diff --git a/package.json b/package.json index 0d52330..614ce38 100644 --- a/package.json +++ b/package.json @@ -30,9 +30,9 @@ "devDependencies": { "@biomejs/biome": "^1.9.4", "@playwright/test": "^1.52.0", - "@rsbuild/core": "^1.3.14", - "@rslib/core": "^0.6.8", - "@types/node": "^22.15.3", + "@rsbuild/core": "^1.3.22", + "@rslib/core": "^0.9.1", + "@types/node": "^22.15.29", "playwright": "^1.52.0", "simple-git-hooks": "^2.13.0", "typescript": "^5.8.3" @@ -45,7 +45,7 @@ "optional": true } }, - "packageManager": "pnpm@10.10.0", + "packageManager": "pnpm@10.11.0", "publishConfig": { "access": "public", "registry": "https://registry.npmjs.org/" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 883e2c1..03c2640 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,14 +15,14 @@ importers: specifier: ^1.52.0 version: 1.52.0 '@rsbuild/core': - specifier: ^1.3.14 - version: 1.3.14 + specifier: ^1.3.22 + version: 1.3.22 '@rslib/core': - specifier: ^0.6.8 - version: 0.6.8(typescript@5.8.3) + specifier: ^0.9.1 + version: 0.9.1(typescript@5.8.3) '@types/node': - specifier: ^22.15.3 - version: 22.15.3 + specifier: ^22.15.29 + version: 22.15.29 playwright: specifier: ^1.52.0 version: 1.52.0 @@ -151,36 +151,36 @@ packages: '@jridgewell/sourcemap-codec@1.5.0': resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - '@module-federation/error-codes@0.13.0': - resolution: {integrity: sha512-4soAMLr7qcVWuvCsyRmBbiBfuhxmnDeyl+qzjMx8VurQgL+XQDQJapM9RXngNGT4g8FoCq9o7rM5YWNgFFNUiw==} + '@module-federation/error-codes@0.14.0': + resolution: {integrity: sha512-GGk+EoeSACJikZZyShnLshtq9E2eCrDWbRiB4QAFXCX4oYmGgFfzXlx59vMNwqTKPJWxkEGnPYacJMcr2YYjag==} - '@module-federation/runtime-core@0.13.0': - resolution: {integrity: sha512-Oj/1p0mfxZ+8EbU7ND4gMvRmikFpIvPCbblOgat9N8ZIVAKYpTimCgMhzg4yRqAwzlGCVwnnW7XZ8UlA+Zqrvg==} + '@module-federation/runtime-core@0.14.0': + resolution: {integrity: sha512-fGE1Ro55zIFDp/CxQuRhKQ1pJvG7P0qvRm2N+4i8z++2bgDjcxnCKUqDJ8lLD+JfJQvUJf0tuSsJPgevzueD4g==} - '@module-federation/runtime-tools@0.13.0': - resolution: {integrity: sha512-6ECWX18yGrQKcmkrQoNPd5VEpxZP1SMaB/Bp55xlpEhsrpn4zHnriQluxDw6xldjSOLl1qbokfxwCwjS2OaEbg==} + '@module-federation/runtime-tools@0.14.0': + resolution: {integrity: sha512-y/YN0c2DKsLETE+4EEbmYWjqF9G6ZwgZoDIPkaQ9p0pQu0V4YxzWfQagFFxR0RigYGuhJKmSU/rtNoHq+qF8jg==} - '@module-federation/runtime@0.13.0': - resolution: {integrity: sha512-Ne/3AEVWz6LL6G/i41O5MC6YYlg0SatNNqG/0XbuMAfyGM+llRmB6VKt0o2+JR4isxWuPNp97TbUkkfORit6Eg==} + '@module-federation/runtime@0.14.0': + resolution: {integrity: sha512-kR3cyHw/Y64SEa7mh4CHXOEQYY32LKLK75kJOmBroLNLO7/W01hMNAvGBYTedS7hWpVuefPk1aFZioy3q2VLdQ==} - '@module-federation/sdk@0.13.0': - resolution: {integrity: sha512-JdMZaPD+EQvMJYS+/8/8QjaAHQ3qljogvioXBsAuedcStu/msn5e1Fswc0G34kXY9ixs2hUPZU2cAllfSKWIBQ==} + '@module-federation/sdk@0.14.0': + resolution: {integrity: sha512-lg/OWRsh18hsyTCamOOhEX546vbDiA2O4OggTxxH2wTGr156N6DdELGQlYIKfRdU/0StgtQS81Goc0BgDZlx9A==} - '@module-federation/webpack-bundler-runtime@0.13.0': - resolution: {integrity: sha512-ycgAsFeCTo+3GR8JxkhCyg2UZm6Au98ISdLTdVXYphO4UDcO/KjqyJen1LXEslkpCEohDj68Prei2fUHRruK6g==} + '@module-federation/webpack-bundler-runtime@0.14.0': + resolution: {integrity: sha512-POWS6cKBicAAQ3DNY5X7XEUSfOfUsRaBNxbuwEfSGlrkTE9UcWheO06QP2ndHi8tHQuUKcIHi2navhPkJ+k5xg==} '@playwright/test@1.52.0': resolution: {integrity: sha512-uh6W7sb55hl7D6vsAeA+V2p5JnlAqzhqFyF0VcJkKZXkgnFcVG9PziERRHQfPLfNGx1C292a4JqbWzhR8L4R1g==} engines: {node: '>=18'} hasBin: true - '@rsbuild/core@1.3.14': - resolution: {integrity: sha512-sfG/+23qVFbFj9CgglHaSRKxAuLbTQgOE2Iz6lpA8bRE56L2aZsSQl4v+p513lib6OH6PYttQdbLO9K8aVOfWg==} + '@rsbuild/core@1.3.22': + resolution: {integrity: sha512-FGB7m8Tn/uiOhvqk0lw+NRMyD+VYJ+eBqVfpn0X11spkJDiPWn8UkMRvfzCX4XFcNZwRKYuuKJaZK1DNU8UG+w==} engines: {node: '>=16.10.0'} hasBin: true - '@rslib/core@0.6.8': - resolution: {integrity: sha512-0zwsanYLzskfBxLzSvcF8H4vUerqqIh+uFoGrwa6MYrT8AwGeDYRAuapWt3N3puB5dsxTu8tqnTbZMFjzkWFpw==} + '@rslib/core@0.9.1': + resolution: {integrity: sha512-aa/LXYxr49lCNm/b0B4CQoTB5286MPglGsE5/YFoY0VwIcKJdMz0zBJ4DsPwh27/fcfDQvmN1+J9tzjt9TxQtQ==} engines: {node: '>=16.7.0'} hasBin: true peerDependencies: @@ -192,56 +192,56 @@ packages: typescript: optional: true - '@rspack/binding-darwin-arm64@1.3.8': - resolution: {integrity: sha512-FlfWZzwCxDfLwyiqGaCSINHt2Er1Wno9xZrf2QM7Ss00HyocPo4BUYGYBEi4dai/fPFoeYKeEAdsNdrVmFH4+g==} + '@rspack/binding-darwin-arm64@1.3.12': + resolution: {integrity: sha512-8hKjVTBeWPqkMzFPNWIh72oU9O3vFy3e88wRjMPImDCXBiEYrKqGTTLd/J0SO+efdL3SBD1rX1IvdJpxCv6Yrw==} cpu: [arm64] os: [darwin] - '@rspack/binding-darwin-x64@1.3.8': - resolution: {integrity: sha512-IGXDKHDHiL7WxE/OZMaeIuHzqOzDam3k8WrseHAdl5upKvCp/snwwGdulB/rqGxwkQIXIsv105vIFbGOAe2g0A==} + '@rspack/binding-darwin-x64@1.3.12': + resolution: {integrity: sha512-Sj4m+mCUxL7oCpdu7OmWT7fpBM7hywk5CM9RDc3D7StaBZbvNtNftafCrTZzTYKuZrKmemTh5SFzT5Tz7tf6GA==} cpu: [x64] os: [darwin] - '@rspack/binding-linux-arm64-gnu@1.3.8': - resolution: {integrity: sha512-PU9fv8knPvbxQb8NrDmTrLVpy8QY0vuhzk69/ZuLRW89c0P14HovYeHV+38cQHho4++avUQgVp6vnJI9vSQjtg==} + '@rspack/binding-linux-arm64-gnu@1.3.12': + resolution: {integrity: sha512-7MuOxf3/Mhv4mgFdLTvgnt/J+VouNR65DEhorth+RZm3LEWojgoFEphSAMAvpvAOpYSS68Sw4SqsOZi719ia2w==} cpu: [arm64] os: [linux] - '@rspack/binding-linux-arm64-musl@1.3.8': - resolution: {integrity: sha512-UMZBuTw5iXeA6gmtZYQvAb7g56odfoIkU6YvfqV67AMU0EY2y52sc7ABFloDzURJ1xd2om01Nlru8y48S2lMPw==} + '@rspack/binding-linux-arm64-musl@1.3.12': + resolution: {integrity: sha512-s6KKj20T9Z1bA8caIjU6EzJbwyDo1URNFgBAlafCT2UC6yX7flstDJJ38CxZacA9A2P24RuQK2/jPSZpWrTUFA==} cpu: [arm64] os: [linux] - '@rspack/binding-linux-x64-gnu@1.3.8': - resolution: {integrity: sha512-48hfwVsD2/Caa0HgZiqE1T20H89cnomcaP92++x8t4IQ2uKA9xCeBW87RD/AaKXcb78aM987ctE+asKjN8OVjw==} + '@rspack/binding-linux-x64-gnu@1.3.12': + resolution: {integrity: sha512-0w/sRREYbRgHgWvs2uMEJSLfvzbZkPHUg6CMcYQGNVK6axYRot6jPyKetyFYA9pR5fB5rsXegpnFaZaVrRIK2g==} cpu: [x64] os: [linux] - '@rspack/binding-linux-x64-musl@1.3.8': - resolution: {integrity: sha512-Jx+JlVnLzzVL/62NbEFaVcM2HU4QtNEF+wzo+yODNprx78ZLe3PJT/LdtwLMvE77K2PlGn5CZcmBay6Xwkd/2A==} + '@rspack/binding-linux-x64-musl@1.3.12': + resolution: {integrity: sha512-jEdxkPymkRxbijDRsBGdhopcbGXiXDg59lXqIRkVklqbDmZ/O6DHm7gImmlx5q9FoWbz0gqJuOKBz4JqWxjWVA==} cpu: [x64] os: [linux] - '@rspack/binding-win32-arm64-msvc@1.3.8': - resolution: {integrity: sha512-84tifCsYhir/p5GH0knBOXtLpfRzIFDxF4nF4bHsuwaA1uqwyk0WlWGt4ZwRUtyzh0TN4cJdnqJl/f5209BdLw==} + '@rspack/binding-win32-arm64-msvc@1.3.12': + resolution: {integrity: sha512-ZRvUCb3TDLClAqcTsl/o9UdJf0B5CgzAxgdbnYJbldyuyMeTUB4jp20OfG55M3C2Nute2SNhu2bOOp9Se5Ongw==} cpu: [arm64] os: [win32] - '@rspack/binding-win32-ia32-msvc@1.3.8': - resolution: {integrity: sha512-Grrcfr95gRhJ7FbKtIxfhNAzSM+hvtD2jAMs9fmw/UrgiNsXeaWwJaYgImqHGirKIx8iygZ0t1q7ePIVM+SKMg==} + '@rspack/binding-win32-ia32-msvc@1.3.12': + resolution: {integrity: sha512-1TKPjuXStPJr14f3ZHuv40Xc/87jUXx10pzVtrPnw+f3hckECHrbYU/fvbVzZyuXbsXtkXpYca6ygCDRJAoNeQ==} cpu: [ia32] os: [win32] - '@rspack/binding-win32-x64-msvc@1.3.8': - resolution: {integrity: sha512-wW+Ig3kVqcRcY+3mxZnruN4AdeJYjbEBd2zvheEAOvx/DC+xEQ6czvDXbZEZQQ9rU/znhuKl0Z+898q8l3LwzA==} + '@rspack/binding-win32-x64-msvc@1.3.12': + resolution: {integrity: sha512-lCR0JfnYKpV+a6r2A2FdxyUKUS4tajePgpPJN5uXDgMGwrDtRqvx+d0BHhwjFudQVJq9VVbRaL89s2MQ6u+xYw==} cpu: [x64] os: [win32] - '@rspack/binding@1.3.8': - resolution: {integrity: sha512-0oGrPgnwDsrDN7Swk7OZGvee8y/AdvDXF3f1QewkueJ5uyDaGszDxipEpf644HWIcj11fgNJQEphGEhaAVjofw==} + '@rspack/binding@1.3.12': + resolution: {integrity: sha512-4Ic8lV0+LCBfTlH5aIOujIRWZOtgmG223zC4L3o8WY/+ESAgpdnK6lSSMfcYgRanYLAy3HOmFIp20jwskMpbAg==} - '@rspack/core@1.3.8': - resolution: {integrity: sha512-1zefymDypUROYzGGNa553JR1Ah8En25npwSRIZCuZvfjo6nME6XvjkMxQwhjzMStoqRmFD9+nKUHSiN5jVWWyw==} + '@rspack/core@1.3.12': + resolution: {integrity: sha512-mAPmV4LPPRgxpouUrGmAE4kpF1NEWJGyM5coebsjK/zaCMSjw3mkdxiU2b5cO44oIi0Ifv5iGkvwbdrZOvMyFA==} engines: {node: '>=16.0.0'} peerDependencies: '@swc/helpers': '>=0.5.1' @@ -256,14 +256,14 @@ packages: '@swc/helpers@0.5.17': resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} - '@types/node@22.15.3': - resolution: {integrity: sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw==} + '@types/node@22.15.29': + resolution: {integrity: sha512-LNdjOkUDlU1RZb8e1kOIUpN1qQUlzGkEtbVNo53vbrwDg5om6oduhm4SiUaPW5ASTXhAiP0jInWG8Qx9fVlOeQ==} - caniuse-lite@1.0.30001716: - resolution: {integrity: sha512-49/c1+x3Kwz7ZIWt+4DvK3aMJy9oYXXG6/97JKsnjdCk/6n9vVyWL8NAwVt95Lwt9eigI10Hl782kDfZUUlRXw==} + caniuse-lite@1.0.30001720: + resolution: {integrity: sha512-Ec/2yV2nNPwb4DnTANEV99ZWwm3ZWfdlfkQbWSDDt+PsXEVYwlhPH8tdMaPunYTKKmz7AnHi2oNEi1GcmKCD8g==} - core-js@3.41.0: - resolution: {integrity: sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA==} + core-js@3.42.0: + resolution: {integrity: sha512-Sz4PP4ZA+Rq4II21qkNqOEDTDrCvcANId3xpIgB34NDkWc3UduWj2dqEtN9yZIq8Dk3HyPI33x9sqqU5C8sr0g==} fdir@6.4.4: resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==} @@ -310,8 +310,8 @@ packages: engines: {node: '>=18'} hasBin: true - rsbuild-plugin-dts@0.6.8: - resolution: {integrity: sha512-EkUPAmIIUmHj4pkmiuL9vPQpRQShkg4oNY1PJ/4u55i1pJfilOqT2s5Rr91MwUzd6/ThaefHGMPMl7agq8K0dw==} + rsbuild-plugin-dts@0.9.1: + resolution: {integrity: sha512-04pkKrebuajsCpC8Vj2z4n6NFFxUYAdUdqSQRFGkGhdmururoDFYW0k9+ZQq9XrSQTlB01F/HFv5mAc0dwG/Qg==} engines: {node: '>=16.7.0'} peerDependencies: '@microsoft/api-extractor': ^7 @@ -331,8 +331,8 @@ packages: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} - tinyglobby@0.2.13: - resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==} + tinyglobby@0.2.14: + resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} tsconfig-paths@4.2.0: @@ -428,96 +428,96 @@ snapshots: '@jridgewell/sourcemap-codec@1.5.0': {} - '@module-federation/error-codes@0.13.0': {} + '@module-federation/error-codes@0.14.0': {} - '@module-federation/runtime-core@0.13.0': + '@module-federation/runtime-core@0.14.0': dependencies: - '@module-federation/error-codes': 0.13.0 - '@module-federation/sdk': 0.13.0 + '@module-federation/error-codes': 0.14.0 + '@module-federation/sdk': 0.14.0 - '@module-federation/runtime-tools@0.13.0': + '@module-federation/runtime-tools@0.14.0': dependencies: - '@module-federation/runtime': 0.13.0 - '@module-federation/webpack-bundler-runtime': 0.13.0 + '@module-federation/runtime': 0.14.0 + '@module-federation/webpack-bundler-runtime': 0.14.0 - '@module-federation/runtime@0.13.0': + '@module-federation/runtime@0.14.0': dependencies: - '@module-federation/error-codes': 0.13.0 - '@module-federation/runtime-core': 0.13.0 - '@module-federation/sdk': 0.13.0 + '@module-federation/error-codes': 0.14.0 + '@module-federation/runtime-core': 0.14.0 + '@module-federation/sdk': 0.14.0 - '@module-federation/sdk@0.13.0': {} + '@module-federation/sdk@0.14.0': {} - '@module-federation/webpack-bundler-runtime@0.13.0': + '@module-federation/webpack-bundler-runtime@0.14.0': dependencies: - '@module-federation/runtime': 0.13.0 - '@module-federation/sdk': 0.13.0 + '@module-federation/runtime': 0.14.0 + '@module-federation/sdk': 0.14.0 '@playwright/test@1.52.0': dependencies: playwright: 1.52.0 - '@rsbuild/core@1.3.14': + '@rsbuild/core@1.3.22': dependencies: - '@rspack/core': 1.3.8(@swc/helpers@0.5.17) + '@rspack/core': 1.3.12(@swc/helpers@0.5.17) '@rspack/lite-tapable': 1.0.1 '@swc/helpers': 0.5.17 - core-js: 3.41.0 + core-js: 3.42.0 jiti: 2.4.2 - '@rslib/core@0.6.8(typescript@5.8.3)': + '@rslib/core@0.9.1(typescript@5.8.3)': dependencies: - '@rsbuild/core': 1.3.14 - rsbuild-plugin-dts: 0.6.8(@rsbuild/core@1.3.14)(typescript@5.8.3) - tinyglobby: 0.2.13 + '@rsbuild/core': 1.3.22 + rsbuild-plugin-dts: 0.9.1(@rsbuild/core@1.3.22)(typescript@5.8.3) + tinyglobby: 0.2.14 optionalDependencies: typescript: 5.8.3 - '@rspack/binding-darwin-arm64@1.3.8': + '@rspack/binding-darwin-arm64@1.3.12': optional: true - '@rspack/binding-darwin-x64@1.3.8': + '@rspack/binding-darwin-x64@1.3.12': optional: true - '@rspack/binding-linux-arm64-gnu@1.3.8': + '@rspack/binding-linux-arm64-gnu@1.3.12': optional: true - '@rspack/binding-linux-arm64-musl@1.3.8': + '@rspack/binding-linux-arm64-musl@1.3.12': optional: true - '@rspack/binding-linux-x64-gnu@1.3.8': + '@rspack/binding-linux-x64-gnu@1.3.12': optional: true - '@rspack/binding-linux-x64-musl@1.3.8': + '@rspack/binding-linux-x64-musl@1.3.12': optional: true - '@rspack/binding-win32-arm64-msvc@1.3.8': + '@rspack/binding-win32-arm64-msvc@1.3.12': optional: true - '@rspack/binding-win32-ia32-msvc@1.3.8': + '@rspack/binding-win32-ia32-msvc@1.3.12': optional: true - '@rspack/binding-win32-x64-msvc@1.3.8': + '@rspack/binding-win32-x64-msvc@1.3.12': optional: true - '@rspack/binding@1.3.8': + '@rspack/binding@1.3.12': optionalDependencies: - '@rspack/binding-darwin-arm64': 1.3.8 - '@rspack/binding-darwin-x64': 1.3.8 - '@rspack/binding-linux-arm64-gnu': 1.3.8 - '@rspack/binding-linux-arm64-musl': 1.3.8 - '@rspack/binding-linux-x64-gnu': 1.3.8 - '@rspack/binding-linux-x64-musl': 1.3.8 - '@rspack/binding-win32-arm64-msvc': 1.3.8 - '@rspack/binding-win32-ia32-msvc': 1.3.8 - '@rspack/binding-win32-x64-msvc': 1.3.8 - - '@rspack/core@1.3.8(@swc/helpers@0.5.17)': + '@rspack/binding-darwin-arm64': 1.3.12 + '@rspack/binding-darwin-x64': 1.3.12 + '@rspack/binding-linux-arm64-gnu': 1.3.12 + '@rspack/binding-linux-arm64-musl': 1.3.12 + '@rspack/binding-linux-x64-gnu': 1.3.12 + '@rspack/binding-linux-x64-musl': 1.3.12 + '@rspack/binding-win32-arm64-msvc': 1.3.12 + '@rspack/binding-win32-ia32-msvc': 1.3.12 + '@rspack/binding-win32-x64-msvc': 1.3.12 + + '@rspack/core@1.3.12(@swc/helpers@0.5.17)': dependencies: - '@module-federation/runtime-tools': 0.13.0 - '@rspack/binding': 1.3.8 + '@module-federation/runtime-tools': 0.14.0 + '@rspack/binding': 1.3.12 '@rspack/lite-tapable': 1.0.1 - caniuse-lite: 1.0.30001716 + caniuse-lite: 1.0.30001720 optionalDependencies: '@swc/helpers': 0.5.17 @@ -527,13 +527,13 @@ snapshots: dependencies: tslib: 2.8.1 - '@types/node@22.15.3': + '@types/node@22.15.29': dependencies: undici-types: 6.21.0 - caniuse-lite@1.0.30001716: {} + caniuse-lite@1.0.30001720: {} - core-js@3.41.0: {} + core-js@3.42.0: {} fdir@6.4.4(picomatch@4.0.2): optionalDependencies: @@ -564,13 +564,13 @@ snapshots: optionalDependencies: fsevents: 2.3.2 - rsbuild-plugin-dts@0.6.8(@rsbuild/core@1.3.14)(typescript@5.8.3): + rsbuild-plugin-dts@0.9.1(@rsbuild/core@1.3.22)(typescript@5.8.3): dependencies: '@ast-grep/napi': 0.37.0 - '@rsbuild/core': 1.3.14 + '@rsbuild/core': 1.3.22 magic-string: 0.30.17 picocolors: 1.1.1 - tinyglobby: 0.2.13 + tinyglobby: 0.2.14 tsconfig-paths: 4.2.0 optionalDependencies: typescript: 5.8.3 @@ -579,7 +579,7 @@ snapshots: strip-bom@3.0.0: {} - tinyglobby@0.2.13: + tinyglobby@0.2.14: dependencies: fdir: 6.4.4(picomatch@4.0.2) picomatch: 4.0.2