跳转到主要内容

PGSTY SILO 博客

  • mcli 20260903 正式发布

    发布于 发布注记

    发布mcli

    Featured Image for mcli 20260903 正式发布

    发布日期: 2026-09-03 · 版本: RELEASE.2026-09-03T07-13-05Z · 源码: a2ef95c0 距离 mcli 20260806 二十八天,本次发布汇总了客户端此后积累的全部变更。工具链升级到 Go 1.27.1,共享依赖栈与 SILO 家族对齐,silo-pkg 以自有模块路径导入,go.mod 如实描述二进制的构建来源。fork 以来第一个真正的新命令 —— mcli checksum verify —— 到来了,它对端点实际返回的字节只读地核验存储的 …

    发布日期: 2026-09-03 · 版本: RELEASE.2026-09-03T07-13-05Z · 源码: a2ef95c0 距离 mcli 20260806 二十八天,本次发布汇总了客户端此后积累的全部变更。工具链升级到 Go 1.27.1,共享依赖栈与 SILO 家族对齐,silo-pkg 以自有模块路径导入,go.mod 如实描述二进制的构建来源。fork 以来第一个真正的新命令 —— mcli checksum verify —— 到来了,它对端点实际返回的字节只读地核验存储的 …

  • Silo 20260903 正式发布

    发布于 发布注记

    Releasesilo

    Featured Image for Silo 20260903 正式发布

    2026-09-13 状态: 这仍是最新已发布 Server,发布依赖未改变。后续安全、存储与依赖修复目前在 main,包括尚未发布的 SN-2026-011 修复。独立 mcli/pkg 的新版不替换本制品内容;见组件矩阵。 版本日期: 2026-09-03 · 正式发布: 2026-09-04 · 版本: RELEASE.2026-09-03T13-18-01Z · 上一版本: RELEASE.2026-08-06T00-00-00Z SILO 20260903 是首个完整使用 Silo …

    2026-09-13 状态: 这仍是最新已发布 Server,发布依赖未改变。后续安全、存储与依赖修复目前在 main,包括尚未发布的 SN-2026-011 修复。独立 mcli/pkg 的新版不替换本制品内容;见组件矩阵。 版本日期: 2026-09-03 · 正式发布: 2026-09-04 · 版本: RELEASE.2026-09-03T13-18-01Z · 上一版本: RELEASE.2026-08-06T00-00-00Z SILO 20260903 是首个完整使用 Silo …

  • SILO Server 20260903 发布前复审

    发布于 设计

    DesignReviewSecurityCompatibilityRelease

    Featured Image for SILO Server 20260903 发布前复审

    这是 SILO 20260903 背后的发布前长期工程记录:为什么不能直接接受早期“所有问题都已解决”的结论,独立复审发现了什么,修复如何收窄,以及复审时距离生产发布还差哪些门禁。链接的发布说明记录了之后的正式交付结果。 结论: 6e112d1856d4f3655f30fc81ee47e9f43d50d8f3 源码候选在代码层面可以 GO 到远端复审;生产发布仍是有条件 GO,必须等待远端 CI、Test Release、tag 与构件校验、签名、容器发布及公开 pull 验证完成。 基线: …

    这是 SILO 20260903 背后的发布前长期工程记录:为什么不能直接接受早期“所有问题都已解决”的结论,独立复审发现了什么,修复如何收窄,以及复审时距离生产发布还差哪些门禁。链接的发布说明记录了之后的正式交付结果。 结论: 6e112d1856d4f3655f30fc81ee47e9f43d50d8f3 源码候选在代码层面可以 GO 到远端复审;生产发布仍是有条件 GO,必须等待远端 CI、Test Release、tag 与构件校验、签名、容器发布及公开 pull 验证完成。 基线: …

  • SILO 20260903 安全说明:SN-2026-006 至 010

    发布于 安全编年史

    安全S3SSE-CReplicationIAM

    Featured Image for SILO 20260903 安全说明:SN-2026-006 至 010

    已随 SILO 20260903 发布。 这些修复属于 RELEASE.2026-09-03T13-18-01Z。从 20260806 到 20260903 的完整升级边界、组件、验证证据与已知延期见完整发布说明。 本公告汇总 SILO Server 最终复审发现的五个相关安全问题,覆盖客户提供的加密密钥、客户端可控复制 header、管理状态变更与显式对象版本删除。 SN-2026-006 至 SN-2026-010 是分叉内部的 security-note 编号,不是 CVE,也没有登记到 …

    已随 SILO 20260903 发布。 这些修复属于 RELEASE.2026-09-03T13-18-01Z。从 20260806 到 20260903 的完整升级边界、组件、验证证据与已知延期见完整发布说明。 本公告汇总 SILO Server 最终复审发现的五个相关安全问题,覆盖客户提供的加密密钥、客户端可控复制 header、管理状态变更与显式对象版本删除。 SN-2026-006 至 SN-2026-010 是分叉内部的 security-note 编号,不是 CVE,也没有登记到 …

  • 显式版本删除现在要求 DeleteObjectVersion

    发布于 发布注记

    发布安全IAMS3兼容性

    Featured Image for 显式版本删除现在要求 DeleteObjectVersion

    发布状态: 此变更已在 pgsty/silo#104 中实现,对应 Issue #58。本文发布本身不代表 某个服务器版本、软件包、镜像或部署已经包含该变更。 SILO 现在按照请求实际执行的删除类型选择权限: 请求 所需权限 未携带 versionId s3:DeleteObject 版本 UUID s3:DeleteObjectVersion 显式 versionId=null s3:DeleteObjectVersion DeleteObjects 对每个 XML 条目独立应用映射 此前 …

    发布状态: 此变更已在 pgsty/silo#104 中实现,对应 Issue #58。本文发布本身不代表 某个服务器版本、软件包、镜像或部署已经包含该变更。 SILO 现在按照请求实际执行的删除类型选择权限: 请求 所需权限 未携带 versionId s3:DeleteObject 版本 UUID s3:DeleteObjectVersion 显式 versionId=null s3:DeleteObjectVersion DeleteObjects 对每个 XML 条目独立应用映射 此前 …

  • 鉴权前不做 I/O,Header 不授予权限

    发布于 设计

    设计安全CORSReplicationSSE-C兼容性

    Featured Image for 鉴权前不做 I/O,Header 不授予权限

    发布核对(2026-09-16): 本文原始修复已进入 Server 20260903。下文带日期的评审与测试叙述记录当时证据,不代表当前仍待发布,也不代表特定生产部署已验收。后续源码与组件选择见版本表。 本文记录以 PR #101(938603458 至 04b097fd9)合并进 SILO 的 CORS 热路径与复制请求信任边界修复。 截至 2026-09-03 的状态: PR #101 已于 2026-09-01 合并进 main,并带四个后续提交:Snowball 逐条目信任隔离 …

    发布核对(2026-09-16): 本文原始修复已进入 Server 20260903。下文带日期的评审与测试叙述记录当时证据,不代表当前仍待发布,也不代表特定生产部署已验收。后续源码与组件选择见版本表。 本文记录以 PR #101(938603458 至 04b097fd9)合并进 SILO 的 CORS 热路径与复制请求信任边界修复。 截至 2026-09-03 的状态: PR #101 已于 2026-09-01 合并进 main,并带四个后续提交:Snowball 逐条目信任隔离 …

  • ListMultipartUploads:实现、升级契约与历史设计

    发布于 设计

    设计S3兼容性分段上传

    Featured Image for ListMultipartUploads:实现、升级契约与历史设计

    这是 SILO Issue #79 的问题说明、设计分析与决策记录。 9 月 16 日实现与升级契约 PR #198 保留 mr javad seydi 的原始元数据与扫描实现,并追加维护者对 marker 消失、发现覆盖不足、取消确认和升级诊断的修复。发布前的兼容性修复将默认模式恢复为 legacy,严格模式仅通过进程环境显式启用。本节说明这些源码变更。Server 20260903 不包含此修复;源码实现也不代表生产性能与部署验收完成。 下方 8 月 30 日的分析保留为历史设计记录。 列表 …

    这是 SILO Issue #79 的问题说明、设计分析与决策记录。 9 月 16 日实现与升级契约 PR #198 保留 mr javad seydi 的原始元数据与扫描实现,并追加维护者对 marker 消失、发现覆盖不足、取消确认和升级诊断的修复。发布前的兼容性修复将默认模式恢复为 legacy,严格模式仅通过进程环境显式启用。本节说明这些源码变更。Server 20260903 不包含此修复;源码实现也不代表生产性能与部署验收完成。 下方 8 月 30 日的分析保留为历史设计记录。 列表 …

  • silo-pkg 3.13.0 正式发布

    发布于 发布注记

    发布pkg

    Featured Image for silo-pkg 3.13.0 正式发布

    2026-09-13 后续状态: 本文保留 3.13.0 发布时的迁移记录。四个维护组件现已完成独立模块路径迁移;当前 pkg 为 v3.14.0。文中的“尚未迁移”描述仅适用于当时,见现有组件矩阵。 发布日期: 2026-08-30 · 版本: v3.13.0 · 提交: 215f116 · 仓库: pgsty/silo-pkg 3.13.0 是一个破坏性版本,只有一条主线:本模块不再冒用上游的导入路径,改用自己的。同时废弃 pgsty/silo-go 分支——它已经不再包含任何上游没有的东 …

    2026-09-13 后续状态: 本文保留 3.13.0 发布时的迁移记录。四个维护组件现已完成独立模块路径迁移;当前 pkg 为 v3.14.0。文中的“尚未迁移”描述仅适用于当时,见现有组件矩阵。 发布日期: 2026-08-30 · 版本: v3.13.0 · 提交: 215f116 · 仓库: pgsty/silo-pkg 3.13.0 是一个破坏性版本,只有一条主线:本模块不再冒用上游的导入路径,改用自己的。同时废弃 pgsty/silo-go 分支——它已经不再包含任何上游没有的东 …

  • 只读 Checksum 审计与可靠的 CLI 输出契约

    发布于 设计

    设计S3兼容性Checksummcli

    Featured Image for 只读 Checksum 审计与可靠的 CLI 输出契约

    本文是 MCLI 只读 checksum 校验流程,以及发布审查中发现的 non-TTY 输出缺陷 pgsty/mc#5 的设计与实现记录。 状态: 已随最终的 mcli 20260903 正式发布。命令经 pull request #8 与 #13 合入 main,在托管 CI 中针对真实 SILO 服务器验证, pgsty/mc#5 已关闭。Server 20260903 镜像已捆绑包含本命令的 mcli 20260903。 归属: pgsty/mc。 跟踪: pgsty/mc#5。 安全边 …

    本文是 MCLI 只读 checksum 校验流程,以及发布审查中发现的 non-TTY 输出缺陷 pgsty/mc#5 的设计与实现记录。 状态: 已随最终的 mcli 20260903 正式发布。命令经 pull request #8 与 #13 合入 main,在托管 CI 中针对真实 SILO 服务器验证, pgsty/mc#5 已关闭。Server 20260903 镜像已捆绑包含本命令的 mcli 20260903。 归属: pgsty/mc。 跟踪: pgsty/mc#5。 安全边 …

  • 两把 SSE-C 密钥,一份 CopyObject 响应

    发布于 设计

    设计S3SSE-CChecksum兼容性

    Featured Image for 两把 SSE-C 密钥,一份 CopyObject 响应

    发布核对(2026-09-16): 本文原始修复已进入 Server 20260903。下文带日期的评审与测试叙述记录当时证据,不代表当前仍待发布,也不代表特定生产部署已验收。后续源码与组件选择见版本表。 本文记录 SILO 提交 e73436c99 中的 CopyObject SSE-C checksum 响应修复。 截至 2026-08-28 的状态: 实现、加密与换钥测试、完整服务器套件、race、静态检查、构建和 Fable Max 独立验收均已完成。该提交已于 2026-08-29 …

    发布核对(2026-09-16): 本文原始修复已进入 Server 20260903。下文带日期的评审与测试叙述记录当时证据,不代表当前仍待发布,也不代表特定生产部署已验收。后续源码与组件选择见版本表。 本文记录 SILO 提交 e73436c99 中的 CopyObject SSE-C checksum 响应修复。 截至 2026-08-28 的状态: 实现、加密与换钥测试、完整服务器套件、race、静态检查、构建和 Fable Max 独立验收均已完成。该提交已于 2026-08-29 …

  • 配置环境文件不是 Shell 脚本

    发布于 设计

    设计配置兼容性运维

    Featured Image for 配置环境文件不是 Shell 脚本

    发布核对(2026-09-16): 本文原始修复已进入 Server 20260903。下文带日期的评审与测试叙述记录当时证据,不代表当前仍待发布,也不代表特定生产部署已验收。后续源码与组件选择见版本表。 本文定义 MINIO_CONFIG_ENV_FILE 的启动契约,并记录 SILO 提交 2aea7fe9c 中的兼容性修复。 截至 2026-08-28 的状态: 实现、定向测试、完整 cmd 与 internal 套件、tagged tests、race、vet、lint、生成物检查 …

    发布核对(2026-09-16): 本文原始修复已进入 Server 20260903。下文带日期的评审与测试叙述记录当时证据,不代表当前仍待发布,也不代表特定生产部署已验收。后续源码与组件选择见版本表。 本文定义 MINIO_CONFIG_ENV_FILE 的启动契约,并记录 SILO 提交 2aea7fe9c 中的兼容性修复。 截至 2026-08-28 的状态: 实现、定向测试、完整 cmd 与 internal 套件、tagged tests、race、vet、lint、生成物检查 …

  • BadDigest、InvalidRequest 与 CompleteMultipartUpload 校验和契约

    发布于 设计

    设计S3兼容性校验和

    Featured Image for BadDigest、InvalidRequest 与 CompleteMultipartUpload 校验和契约

    #48 与 #50 的修复 已包含在 Server 20260903 中。 本文取代八月提案中“暂时保持 CRC64NVME 规范化”的结论。 为什么必须在完成时校验 初始化上传时选择算法和对象校验和类型,各分片保存其校验和值。 完成请求必须依据已存储的契约校验最终值与显式类型断言,不能因为基础算法相同就将 COMPOSITE 改为 FULL_OBJECT, 也不能通过省略最终摘要绕过类型断言。 修复区分省略类型与显式类型,只规范化内部表示标志,并采用操作专用错误类型,保持 UploadPart …

    #48 与 #50 的修复 已包含在 Server 20260903 中。 本文取代八月提案中“暂时保持 CRC64NVME 规范化”的结论。 为什么必须在完成时校验 初始化上传时选择算法和对象校验和类型,各分片保存其校验和值。 完成请求必须依据已存储的契约校验最终值与显式类型断言,不能因为基础算法相同就将 COMPOSITE 改为 FULL_OBJECT, 也不能通过省略最终摘要绕过类型断言。 修复区分省略类型与显式类型,只规范化内部表示标志,并采用操作专用错误类型,保持 UploadPart …

  • ListObjects 快捷路径不能把不存在的桶伪装成空桶

    发布于 设计

    设计S3兼容性ListObjects

    Featured Image for ListObjects 快捷路径不能把不存在的桶伪装成空桶

    发布核对(2026-09-16): 本文原始修复已进入 Server 20260903。下文带日期的评审与测试叙述记录当时证据,不代表当前仍待发布,也不代表特定生产部署已验收。后续源码与组件选择见版本表。 本文是 SILO #32 与 PR #37 的问题分析、设计讨论与修复决策归档。 截至 2026-08-26 的状态: PR #37 已更新为带 DCO sign-off 的 head e9c5340be,通过正式批准并合并为 49c8aeac4;#32 随后自动关闭。精确 PR head …

    发布核对(2026-09-16): 本文原始修复已进入 Server 20260903。下文带日期的评审与测试叙述记录当时证据,不代表当前仍待发布,也不代表特定生产部署已验收。后续源码与组件选择见版本表。 本文是 SILO #32 与 PR #37 的问题分析、设计讨论与修复决策归档。 截至 2026-08-26 的状态: PR #37 已更新为带 DCO sign-off 的 head e9c5340be,通过正式批准并合并为 49c8aeac4;#32 随后自动关闭。精确 PR head …

  • 一个端点,两种权限:彻底分离用户与组状态

    发布于 设计

    设计IAM安全兼容性

    Featured Image for 一个端点,两种权限:彻底分离用户与组状态

    发布核对(2026-09-16): 本文原始修复已进入 Server 20260903。下文带日期的评审与测试叙述记录当时证据,不代表当前仍待发布,也不代表特定生产部署已验收。后续源码与组件选择见版本表。 本文完整记录 上游 issue minio/minio#21478 与 SILO PR #73 的讨论、修复过程和最终鉴权设计。 截至 2026-08-26 的状态: SILO PR #73 已合并为 2e2377d1c,并保留带 DCO sign-off 的修复提交 58735ee38;八 …

    发布核对(2026-09-16): 本文原始修复已进入 Server 20260903。下文带日期的评审与测试叙述记录当时证据,不代表当前仍待发布,也不代表特定生产部署已验收。后续源码与组件选择见版本表。 本文完整记录 上游 issue minio/minio#21478 与 SILO PR #73 的讨论、修复过程和最终鉴权设计。 截至 2026-08-26 的状态: SILO PR #73 已合并为 2e2377d1c,并保留带 DCO sign-off 的修复提交 58735ee38;八 …

  • 条件 DELETE:一个条件对应一个逻辑对象

    发布于 设计

    DesignS3CompatibilityDELETE

    Featured Image for 条件 DELETE:一个条件对应一个逻辑对象

    2026-09-16 状态:#145 引入单对象条件删除,随后 #178 修复多池串行化与清理。这两批修改均不在已发布的 Server 20260903 中。依赖该行为前请核对组件矩阵。 围绕 PR #12 的八月方案比实际合并代码范围更大。其中批量拒绝、额外读取授权和只比较当前版本等规则,并不是已实现的保证。本文以维护主线 f99ed829b 为依据。 已实现的契约 请求 当前 main 的行为 单个 DeleteObject,非空 If-Match: <ETag> 在删除锁内比较客户端可见 …

    2026-09-16 状态:#145 引入单对象条件删除,随后 #178 修复多池串行化与清理。这两批修改均不在已发布的 Server 20260903 中。依赖该行为前请核对组件矩阵。 围绕 PR #12 的八月方案比实际合并代码范围更大。其中批量拒绝、额外读取授权和只比较当前版本等规则,并不是已实现的保证。本文以维护主线 f99ed829b 为依据。 已实现的契约 请求 当前 main 的行为 单个 DeleteObject,非空 If-Match: <ETag> 在删除锁内比较客户端可见 …

  • Silo Console 2.2.0 发布说明

    发布于 发布注记

    发布Console

    Featured Image for Silo Console 2.2.0 发布说明

    说明 已于 2026-08-26 正式发布。 v2.2.0 指向最终提交 7dc4258a6。这棵精确标签树通过了完整 CI 矩阵、漏洞检查与发布流水线。公开 Release 包含六个独立二进制、九个 Linux 软件包和一份 SHA-256 校验和清单。 版本: v2.2.0 · 发布提交: 7dc4258a6 · 状态: 已发布 · 仓库: pgsty/silo-console SILO Console 2.2.0 是一个以正确性与加固为主题的版本。它新增一项功能——对日志与结构化文本的严 …

    说明 已于 2026-08-26 正式发布。 v2.2.0 指向最终提交 7dc4258a6。这棵精确标签树通过了完整 CI 矩阵、漏洞检查与发布流水线。公开 Release 包含六个独立二进制、九个 Linux 软件包和一份 SHA-256 校验和清单。 版本: v2.2.0 · 发布提交: 7dc4258a6 · 状态: 已发布 · 仓库: pgsty/silo-console SILO Console 2.2.0 是一个以正确性与加固为主题的版本。它新增一项功能——对日志与结构化文本的严 …

  • 为什么 CompleteMultipartUpload 必须返回 ChecksumType:PR #57 评审记录

    发布于 设计

    设计S3兼容性Checksum

    Featured Image for 为什么 CompleteMultipartUpload 必须返回 ChecksumType:PR #57 评审记录

    Shooks(@Dansyuqri)贡献的 PR #57 修复了 #47,已包含在 Server 20260903 中。 本文记录响应契约;具体生产部署是否包含修复,仍取决于实际运行的制品与安装。 缺陷与范围 对 @cbornet 报告的 #31 的调查拆出了两个问题。 CRC32 分段上传完成的数据路径由 c8590413f 与 3e14733f1 修复。 成功完成后,对象保存了校验和类型,HEAD 也可返回,但完成响应的 XML 丢弃了这个类型, 导致 SDK 获得有效校验和值,却没有 …

    Shooks(@Dansyuqri)贡献的 PR #57 修复了 #47,已包含在 Server 20260903 中。 本文记录响应契约;具体生产部署是否包含修复,仍取决于实际运行的制品与安装。 缺陷与范围 对 @cbornet 报告的 #31 的调查拆出了两个问题。 CRC32 分段上传完成的数据路径由 c8590413f 与 3e14733f1 修复。 成功完成后,对象保存了校验和类型,HEAD 也可返回,但完成响应的 XML 丢弃了这个类型, 导致 SDK 获得有效校验和值,却没有 …

  • 可选校验和,强制失败:修复 UploadPart 与 UploadPartCopy 兼容性

    发布于 设计

    设计S3兼容性Checksum

    Featured Image for 可选校验和,强制失败:修复 UploadPart 与 UploadPartCopy 兼容性

    发布核对(2026-09-16): 本文原始修复已进入 Server 20260903。下文带日期的评审与测试叙述记录当时证据,不代表当前仍待发布,也不代表特定生产部署已验收。后续源码与组件选择见版本表。 本文是 SILO #46 的完整设计与实现归档。它记录的并不只是一个 if 条件如何修改,而是一个看似简单的 S3 可选 header,如何一路牵动 multipart 完成语义、复制响应、压缩与加密数据流、兼容基线和发布验证。 状态: 已于 2026-08-24 以 7fea6d5a5 合 …

    发布核对(2026-09-16): 本文原始修复已进入 Server 20260903。下文带日期的评审与测试叙述记录当时证据,不代表当前仍待发布,也不代表特定生产部署已验收。后续源码与组件选择见版本表。 本文是 SILO #46 的完整设计与实现归档。它记录的并不只是一个 if 条件如何修改,而是一个看似简单的 S3 可选 header,如何一路牵动 multipart 完成语义、复制响应、压缩与加密数据流、兼容基线和发布验证。 状态: 已于 2026-08-24 以 7fea6d5a5 合 …

  • silo-pkg 3.12.0 正式发布

    发布于 发布注记

    发布pkg安全

    Featured Image for silo-pkg 3.12.0 正式发布

    发布日期: 2026-08-24 · 版本: v3.12.0 · 提交: 2b087a1 · 仓库: pgsty/silo-pkg 3.12.0 是直接从主线发布的中版本,包含两条主线:第一,为“只有 ARN 命名空间前缀、却没有指定任何资源”的策略增加严格写入保护;第二,把维护基线推进到 Go 1.27 与 etcd 3.7。它新增两个导出的检查/校验方法,将验证过的消费者下限提高到 Go 1.26;同时也是第一个由 SILO 服务端在具名策略与服务账号策略写入路径上真正启用严格校验的 …

    发布日期: 2026-08-24 · 版本: v3.12.0 · 提交: 2b087a1 · 仓库: pgsty/silo-pkg 3.12.0 是直接从主线发布的中版本,包含两条主线:第一,为“只有 ARN 命名空间前缀、却没有指定任何资源”的策略增加严格写入保护;第二,把维护基线推进到 Go 1.27 与 etcd 3.7。它新增两个导出的检查/校验方法,将验证过的消费者下限提高到 Go 1.26;同时也是第一个由 SILO 服务端在具名策略与服务账号策略写入路径上真正启用严格校验的 …

  • 总量未知时,进度条应该说什么

    发布于 设计

    设计Console下载

    Featured Image for 总量未知时,进度条应该说什么

    历史范围: 本页记录 Console 2.2.0 的进度修复,已随 Server 20260903 的内嵌 Console 交付。Console 2.4.1 后续增加文件流写入与浏览器原生下载交接,已不再把整个 ZIP 缓存在 JavaScript Blob 中。下方原始 PRD 的传输路径与待办按 2.2.0 时点理解。 状态:已随 SILO Console 2.2.0 发布(16960f7ab);服务端自更新 Console pin(edc8be6ed)起内嵌该修复 · 优先级:P1 · …

    历史范围: 本页记录 Console 2.2.0 的进度修复,已随 Server 20260903 的内嵌 Console 交付。Console 2.4.1 后续增加文件流写入与浏览器原生下载交接,已不再把整个 ZIP 缓存在 JavaScript Blob 中。下方原始 PRD 的传输路径与待办按 2.2.0 时点理解。 状态:已随 SILO Console 2.2.0 发布(16960f7ab);服务端自更新 Console pin(edc8be6ed)起内嵌该修复 · 优先级:P1 · …