jamebal / jmal-cloud-view Goto Github PK
View Code? Open in Web Editor NEWJmalCloud 是一款私有云存储网盘项目,能够简单安全管理您的云端文件
Home Page: https://jmal.cc/demo
License: MIT License
JmalCloud 是一款私有云存储网盘项目,能够简单安全管理您的云端文件
Home Page: https://jmal.cc/demo
License: MIT License
admin
jmalcloud
建议支持LDAP登录
在同步时报错
|WARN |pool-2-thread-3 |FileServiceImpl.java:948 |com.jmal.clouddisk.service.impl.FileServiceImpl |No suitable ImageReader found for /jmalcloud/files/seafile/xxx.dwg./jmalcloud/files/seafile/xxx.dwg
net.coobird.thumbnailator.tasks.UnsupportedFormatException: No suitable ImageReader found for /jmalcloud/files/seafile/xxx.dwg.
at net.coobird.thumbnailator.tasks.io.FileImageSource.read(Unknown Source)
at net.coobird.thumbnailator.tasks.SourceSinkThumbnailTask.read(Unknown Source)
at net.coobird.thumbnailator.Thumbnailator.createThumbnail(Unknown Source)
at net.coobird.thumbnailator.Thumbnails$Builder.toOutputStream(Unknown Source)
at com.jmal.clouddisk.service.impl.FileServiceImpl.generateThumbnail(FileServiceImpl.java:942)
at com.jmal.clouddisk.service.impl.FileServiceImpl.createFile(FileServiceImpl.java:870)
at com.jmal.clouddisk.service.impl.FileServiceImpl.createFile(FileServiceImpl.java:894)
at com.jmal.clouddisk.service.impl.SettingService$SyncFileVisitor.visitFile(SettingService.java:141)
at com.jmal.clouddisk.service.impl.SettingService$SyncFileVisitor.visitFile(SettingService.java:114)
at java.nio.file.Files.walkFileTree(Files.java:2670)
at java.nio.file.Files.walkFileTree(Files.java:2742)
at com.jmal.clouddisk.service.impl.SettingService.lambda$sync$0(SettingService.java:91)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)
2022-09-01 11:26:50 |ERROR |http-nio-8088-exec-1 |CommonExceptionHandler.java:28 |com.jmal.clouddisk.exception.CommonExceptionHandler |null
java.lang.NullPointerException: null
at java.util.Objects.requireNonNull(Objects.java:203)
at com.github.benmanes.caffeine.cache.UnboundedLocalCache.put(UnboundedLocalCache.java:371)
at com.github.benmanes.caffeine.cache.UnboundedLocalCache.put(UnboundedLocalCache.java:366)
您好 使用jc.sh 部署后,创建新文件夹失败。不知道问题在哪里。
好像用2.3.5版本的前端源码编译后,前端页面显示会有点异常
大概看了下vue、elementui、vant之类的库居然都是本地已经编译好的静态依赖
这基本没发升级了啊,有什么考虑吗啊
按照web端的readme搭好之后,访问显示服务器出错,服务器端需要搭建吗,怎么搭建?
比如我想实现用OSS或者minIO之类的对象存储代替本地存储,milton这块儿要怎么处理
Hi, 请问登陆界面和左侧导航栏的图标和文字可以替换吗?谢谢🙏
发现这个可以自己登录账号自己使用但是把文件共享给不登录的游客下载就会无法下载只能看到共享文件是BUG么
我用底下的指令測試 webdav 但是會發生錯誤
chchang@hqdc039:~/git/jmal-cloud-zh_TW$ cadaver http://192.168.11.34:7171/api/webDAV/changch
Authentication required for userRealm on server `192.168.11.34':
Username: changch
Password:
Could not access /api/webDAV/changch/ (not WebDAV-enabled?):
Did not find a collection resource.
Connection to `192.168.11.34' closed.
dav:!>
在基本設置中沒有找到有跟webdav 相關的選項,請問目前 webdav 是否可以正常使用?
又或者是我該檢查什麼地方的設定?
共享可以添加密码验证和有效期限制,也可以添加访问次数限制,
添加一个二维码功能,生成共享链接的时候自动生成链接二维码
感谢作者制作出如此精美的网盘。如题
有个文件夹想共享给某个用户,尝试使用软链接的方式,但是实际测试下来无法使用
如题,多谢~
如何将该网盘挂载到本地呢?现在支持该功能吗?
像windows添加网络位置、Macos连接服务器那样。
看了下很棒,有没有计划增加第三方存储呢?
比如玩客云或者N1的armbian或者openwrt上(可跑docker),如果不行,请问以后有进一步适配这些低端设备的计划吗?
目前尝试在X86的群晖上跑,感觉运用起来比coludreve好太多了,而且直接映射文件夹出来就好了。不过主力当然用群晖啦。
这个项目的权限管理真的好,测试网址中打算用admin来修改上传权限,都提示不可行。作为使用者非常看好,要真能用在这些低端低功耗设备上,绝对可以取代filebrowser(包括灯大修改的),所以作者加油!!
BTW,如果可以通过RCLONE,打通onedrive,就更犀利了。
建议支持阿里云oss
佬是在太强了有没有交流群啊
这个有办法做成公网的吗,目前只能在自己电脑上运行呢
全文搜索 在界面的哪里用到的呢
在 readme 裡面沒有發現,請問是否有 API 使用說明的文件?
大概跟踪了下,是fileListScrollTop这个变量计算的问题,但没看太懂是来做什么用的,mousedown里有个逻辑是判断fileListScrollTop是否>0直接return掉了,但其实如果滚动一定距离,这个值就是大于0,而重置的地方就只有数据加载完毕的回调,但此时其实并未发生数据加载,索性我直接就注释了这段检查,看起来也没什么问题
新建文本,流程图,思维导图都报错
./jc.sh install
[+] Running 0/0
⠋ drawio-webapp Pulling 0.1s
⠋ jmalcloud Pulling 0.1s
⠋ mongo Pulling 0.1s
⠋ nginx Pulling 0.1s
⠋ office Pulling 0.1s
error getting credentials - err: exit status 1, out: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.secrets was not provided by any .service files
大佬您好,看你github的提交记录里面,您已修复用户最大配额只有100G的限制,但是更新您最新的容器镜像后发现还是存在配置只能最大设置到100GB,不知道是我配置文件未更新还是您还未更新阿里云上的镜像;如果您还未更新镜像请帮忙更新一下,谢谢;如果是需要调整本地配置文件,还请不吝指教;还有一个不情之请,不知是否方便将您的镜像在docker hub上也提交一份,[握手]。
错误信息如下
PS E:\IdeaProjects\jmal-cloud-view> npm run dev
> [email protected] dev E:\IdeaProjects\jmal-cloud-view
> vue-cli-service serve
INFO Starting development server...
10% building 2/2 modules 0 activei 「wds」: Project is running at http://localhost:9528/
i 「wds」: webpack output is served from /
i 「wds」: Content not from webpack is served from E:\IdeaProjects\jmal-cloud-view\public
i 「wds」: 404s will fallback to /index.html
98% after emitting CopyPlugin
ERROR Failed to compile with 1 error 下午12:50:12
error in ./src/App.vue
Syntax Error: TypeError: Cannot read property 'parseComponent' of undefined
@ ./src/main.js 25:34-50
@ multi (webpack)-dev-server/client?http://192.168.56.1:9528/sockjs-node (webpack)/hot/dev-server.js ./src/main.js
环境: jdk-17.0.7
cmd窗口下执行 java --enable-preview D:\Temp\clouddisk-2.6.3-exec.jar
启动失败,报错如下:
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'webdavConfig' defined in URL [jar:file:/D:/Temp/clouddisk-2.6.3-exec.jar!/BOOT-INF/classes!/com/jmal/clouddisk/webdav/WebdavConfig.class]: Unsatisfied dependency expressed through constructor parameter 1: Error creating bean with name 'myRealm' defined in URL [jar:file:/D:/Temp/clouddisk-2.6.3-exec.jar!/BOOT-INF/classes!/com/jmal/clouddisk/webdav/MyRealm.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'userServiceImpl': Unsatisfied dependency expressed through field 'fileService': Error creating bean with name 'fileServiceImpl' defined in URL [jar:file:/D:/Temp/clouddisk-2.6.3-exec.jar!/BOOT-INF/classes!/com/jmal/clouddisk/service/impl/FileServiceImpl.class]: null
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:245)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1352)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1189)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:417)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1332)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1162)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:663)
at org.springframework.boot.web.server.WebServerFactoryCustomizerBeanPostProcessor.getWebServerFactoryCustomizerBeans(WebServerFactoryCustomizerBeanPostProcessor.java:87)
at org.springframework.boot.web.server.WebServerFactoryCustomizerBeanPostProcessor.getCustomizers(WebServerFactoryCustomizerBeanPostProcessor.java:78)
at org.springframework.boot.web.server.WebServerFactoryCustomizerBeanPostProcessor.postProcessBeforeInitialization(WebServerFactoryCustomizerBeanPostProcessor.java:70)
at org.springframework.boot.web.server.WebServerFactoryCustomizerBeanPostProcessor.postProcessBeforeInitialization(WebServerFactoryCustomizerBeanPostProcessor.java:58)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:419)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:598)
... 22 common frames omitted
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'myRealm' defined in URL [jar:file:/D:/Temp/clouddisk-2.6.3-exec.jar!/BOOT-INF/classes!/com/jmal/clouddisk/webdav/MyRealm.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'userServiceImpl': Unsatisfied dependency expressed through field 'fileService': Error creating bean with name 'fileServiceImpl' defined in URL [jar:file:/D:/Temp/clouddisk-2.6.3-exec.jar!/BOOT-INF/classes!/com/jmal/clouddisk/service/impl/FileServiceImpl.class]: null
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:245)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1352)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1189)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1417)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1337)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
... 48 common frames omitted
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userServiceImpl': Unsatisfied dependency expressed through field 'fileService': Error creating bean with name 'fileServiceImpl' defined in URL [jar:file:/D:/Temp/clouddisk-2.6.3-exec.jar!/BOOT-INF/classes!/com/jmal/clouddisk/service/impl/FileServiceImpl.class]: null
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:713)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:693)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:133)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:482)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1416)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:597)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1417)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1337)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
... 62 common frames omitted
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'fileServiceImpl' defined in URL [jar:file:/D:/Temp/clouddisk-2.6.3-exec.jar!/BOOT-INF/classes!/com/jmal/clouddisk/service/impl/FileServiceImpl.class]: null
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1314)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1199)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1417)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1337)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:710)
... 77 common frames omitted
Caused by: java.lang.ExceptionInInitializerError: null
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:198)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1308)
... 88 common frames omitted
Caused by: java.lang.SecurityException: JCE cannot authenticate the provider BC
at java.base/javax.crypto.JceSecurity.getInstance(JceSecurity.java:144)
at java.base/javax.crypto.KeyGenerator.getInstance(KeyGenerator.java:325)
at cn.hutool.crypto.KeyUtil.getKeyGenerator(KeyUtil.java:613)
at cn.hutool.crypto.KeyUtil.generateKey(KeyUtil.java:137)
at cn.hutool.crypto.KeyUtil.generateKey(KeyUtil.java:121)
at cn.hutool.crypto.KeyUtil.generateKey(KeyUtil.java:108)
at cn.hutool.crypto.KeyUtil.generateKey(KeyUtil.java:171)
at cn.hutool.crypto.symmetric.SymmetricCrypto.(SymmetricCrypto.java:104)
at cn.hutool.crypto.symmetric.SymmetricCrypto.(SymmetricCrypto.java:73)
at cn.hutool.crypto.symmetric.SM4.(SM4.java:36)
at com.jmal.clouddisk.service.impl.FileServiceImpl.(FileServiceImpl.java:105)
... 96 common frames omitted
Caused by: java.lang.IllegalStateException: zip file closed
at java.base/java.util.zip.ZipFile.ensureOpen(ZipFile.java:831)
at java.base/java.util.zip.ZipFile.getManifestName(ZipFile.java:1057)
at java.base/java.util.zip.ZipFile$1.getManifestName(ZipFile.java:1100)
at java.base/javax.crypto.JarVerifier.verifySingleJar(JarVerifier.java:461)
at java.base/javax.crypto.JarVerifier.verifyJars(JarVerifier.java:317)
at java.base/javax.crypto.JarVerifier.verify(JarVerifier.java:260)
at java.base/javax.crypto.ProviderVerifier.verify(ProviderVerifier.java:130)
at java.base/javax.crypto.JceSecurity.verifyProvider(JceSecurity.java:190)
at java.base/javax.crypto.JceSecurity.getVerificationResult(JceSecurity.java:218)
at java.base/javax.crypto.JceSecurity.getInstance(JceSecurity.java:140)
... 106 common frames omitted
测试账号和用户名写的不对 登录不上
重置过程也没有密码提示,也不知道重置为多少了
大佬,发现有两个小问题,想跟佬探讨一下,在添加用户的方法里,如果用户被删除了,似乎不能重新add回来;在更新用户的方法里,如果被删除了是否还能更新,这里会不会缺少判断用户是否被删除的逻辑
在线体验地址失效 502
你好,我找了很久網盤相關的程式,終於找到jmal 幾乎可以完全符合我的要求
我現在想要製作多國語系的翻譯,但是不曉得怎麼著手
請問可以提供一點提示嗎?
能求一波文档吗?想自己用其他语言搭建后端
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.