From a7d20d927044b6d8c7ca802b565ff5b04cc63b7d Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Sun, 10 May 2020 02:52:06 +0300 Subject: [PATCH] fix: don't encode the peer suffix of local dep paths close #2535 --- .changeset/nasty-clouds-peel.md | 6 +++ packages/headless/package.json | 2 +- packages/hoist/package.json | 2 +- packages/modules-cleaner/package.json | 2 +- packages/package-requester/package.json | 2 +- packages/package-store/package.json | 2 +- packages/plugin-commands-rebuild/package.json | 2 +- packages/plugin-commands-store/package.json | 2 +- packages/resolve-dependencies/package.json | 2 +- packages/supi/package.json | 2 +- .../supi/test/install/peerDependencies.ts | 32 ++++++++++++++ pnpm-lock.yaml | 40 +++++++++--------- .../fixtures/tar-pkg-with-peers/index.js | 1 + .../fixtures/tar-pkg-with-peers/package.json | 8 ++++ .../tar-pkg-with-peers-1.0.0.tgz | Bin 0 -> 985 bytes 15 files changed, 76 insertions(+), 29 deletions(-) create mode 100644 .changeset/nasty-clouds-peel.md create mode 100644 privatePackages/test-fixtures/fixtures/tar-pkg-with-peers/index.js create mode 100644 privatePackages/test-fixtures/fixtures/tar-pkg-with-peers/package.json create mode 100644 privatePackages/test-fixtures/fixtures/tar-pkg-with-peers/tar-pkg-with-peers-1.0.0.tgz diff --git a/.changeset/nasty-clouds-peel.md b/.changeset/nasty-clouds-peel.md new file mode 100644 index 0000000000..00f6aac665 --- /dev/null +++ b/.changeset/nasty-clouds-peel.md @@ -0,0 +1,6 @@ +--- +"@pnpm/headless": patch +"supi": patch +--- + +The peer suffix at the end of local tarball dependency paths is not encoded. diff --git a/packages/headless/package.json b/packages/headless/package.json index 4c8da22298..c486a2edf5 100644 --- a/packages/headless/package.json +++ b/packages/headless/package.json @@ -88,7 +88,7 @@ "@pnpm/modules-cleaner": "workspace:9.0.0-alpha.4", "@pnpm/modules-yaml": "workspace:7.0.0-alpha.0", "@pnpm/package-requester": "workspace:12.0.0-alpha.4", - "@pnpm/pkgid-to-filename": "3.0.0-0", + "@pnpm/pkgid-to-filename": "3.0.0-1", "@pnpm/read-package-json": "workspace:3.1.1-alpha.0", "@pnpm/read-project-manifest": "workspace:1.0.6-alpha.0", "@pnpm/store-controller-types": "workspace:8.0.0-alpha.3", diff --git a/packages/hoist/package.json b/packages/hoist/package.json index 90c4e9f111..08949a7397 100644 --- a/packages/hoist/package.json +++ b/packages/hoist/package.json @@ -44,7 +44,7 @@ "@pnpm/lockfile-types": "workspace:2.0.0", "@pnpm/lockfile-utils": "workspace:2.0.12-alpha.0", "@pnpm/lockfile-walker": "workspace:2.0.3-alpha.0", - "@pnpm/pkgid-to-filename": "3.0.0-0", + "@pnpm/pkgid-to-filename": "3.0.0-1", "@pnpm/symlink-dependency": "workspace:3.0.5-alpha.0", "@pnpm/types": "workspace:6.0.0-alpha.0", "dependency-path": "workspace:4.0.7-alpha.0", diff --git a/packages/modules-cleaner/package.json b/packages/modules-cleaner/package.json index 3a73e29173..11b51a2891 100644 --- a/packages/modules-cleaner/package.json +++ b/packages/modules-cleaner/package.json @@ -32,7 +32,7 @@ "@pnpm/lockfile-types": "workspace:2.0.0", "@pnpm/lockfile-utils": "workspace:2.0.12-alpha.0", "@pnpm/package-bins": "workspace:4.0.4-alpha.0", - "@pnpm/pkgid-to-filename": "^3.0.0-0", + "@pnpm/pkgid-to-filename": "^3.0.0-1", "@pnpm/read-modules-dir": "workspace:2.0.1", "@pnpm/read-package-json": "workspace:3.1.1-alpha.0", "@pnpm/store-controller-types": "workspace:8.0.0-alpha.3", diff --git a/packages/package-requester/package.json b/packages/package-requester/package.json index f1477379be..e45300faa9 100644 --- a/packages/package-requester/package.json +++ b/packages/package-requester/package.json @@ -38,7 +38,7 @@ "@pnpm/cafs": "workspace:1.0.0-alpha.4", "@pnpm/core-loggers": "workspace:4.0.2-alpha.0", "@pnpm/fetcher-base": "workspace:7.0.0-alpha.3", - "@pnpm/pkgid-to-filename": "3.0.0-0", + "@pnpm/pkgid-to-filename": "3.0.0-1", "@pnpm/read-package-json": "workspace:3.1.1-alpha.0", "@pnpm/resolver-base": "workspace:7.0.1-alpha.0", "@pnpm/store-controller-types": "workspace:8.0.0-alpha.3", diff --git a/packages/package-store/package.json b/packages/package-store/package.json index 465e69de08..a478e41aa4 100644 --- a/packages/package-store/package.json +++ b/packages/package-store/package.json @@ -20,7 +20,7 @@ "@pnpm/core-loggers": "workspace:4.0.2-alpha.0", "@pnpm/fetcher-base": "workspace:7.0.0-alpha.3", "@pnpm/package-requester": "workspace:12.0.0-alpha.4", - "@pnpm/pkgid-to-filename": "3.0.0-0", + "@pnpm/pkgid-to-filename": "3.0.0-1", "@pnpm/resolver-base": "workspace:7.0.1-alpha.0", "@pnpm/store-controller-types": "workspace:8.0.0-alpha.3", "@pnpm/types": "workspace:6.0.0-alpha.0", diff --git a/packages/plugin-commands-rebuild/package.json b/packages/plugin-commands-rebuild/package.json index 5d9e4945d0..c400681a71 100644 --- a/packages/plugin-commands-rebuild/package.json +++ b/packages/plugin-commands-rebuild/package.json @@ -61,7 +61,7 @@ "@pnpm/lockfile-walker": "workspace:2.0.3-alpha.0", "@pnpm/modules-yaml": "workspace:7.0.0-alpha.0", "@pnpm/normalize-registries": "workspace:1.0.1-alpha.0", - "@pnpm/pkgid-to-filename": "3.0.0-0", + "@pnpm/pkgid-to-filename": "3.0.0-1", "@pnpm/sort-packages": "workspace:1.0.10-alpha.1", "@pnpm/store-connection-manager": "workspace:0.3.0-alpha.4", "@pnpm/store-controller-types": "workspace:8.0.0-alpha.3", diff --git a/packages/plugin-commands-store/package.json b/packages/plugin-commands-store/package.json index 411709f1c1..615e020283 100644 --- a/packages/plugin-commands-store/package.json +++ b/packages/plugin-commands-store/package.json @@ -62,7 +62,7 @@ "@pnpm/normalize-registries": "workspace:1.0.1-alpha.0", "@pnpm/parse-wanted-dependency": "workspace:1.0.0", "@pnpm/pick-registry-for-package": "workspace:1.0.1-alpha.0", - "@pnpm/pkgid-to-filename": "^3.0.0-0", + "@pnpm/pkgid-to-filename": "^3.0.0-1", "@pnpm/store-connection-manager": "workspace:0.3.0-alpha.4", "@pnpm/store-controller-types": "workspace:8.0.0-alpha.3", "@pnpm/store-path": "^4.0.0-0", diff --git a/packages/resolve-dependencies/package.json b/packages/resolve-dependencies/package.json index 724cf14588..7f9ef78de8 100644 --- a/packages/resolve-dependencies/package.json +++ b/packages/resolve-dependencies/package.json @@ -34,7 +34,7 @@ "@pnpm/npm-resolver": "workspace:8.0.0-alpha.2", "@pnpm/package-is-installable": "workspace:4.0.8-alpha.0", "@pnpm/pick-registry-for-package": "workspace:1.0.1-alpha.0", - "@pnpm/pkgid-to-filename": "^3.0.0-0", + "@pnpm/pkgid-to-filename": "^3.0.0-1", "@pnpm/resolver-base": "workspace:7.0.1-alpha.0", "@pnpm/store-controller-types": "workspace:8.0.0-alpha.3", "@pnpm/types": "workspace:6.0.0-alpha.0", diff --git a/packages/supi/package.json b/packages/supi/package.json index c4d05580bd..469aefb227 100644 --- a/packages/supi/package.json +++ b/packages/supi/package.json @@ -37,7 +37,7 @@ "@pnpm/normalize-registries": "workspace:1.0.1-alpha.0", "@pnpm/package-requester": "workspace:12.0.0-alpha.4", "@pnpm/parse-wanted-dependency": "workspace:1.0.0", - "@pnpm/pkgid-to-filename": "3.0.0-0", + "@pnpm/pkgid-to-filename": "3.0.0-1", "@pnpm/prune-lockfile": "workspace:2.0.8-alpha.1", "@pnpm/read-modules-dir": "workspace:2.0.1", "@pnpm/read-package-json": "workspace:3.1.1-alpha.0", diff --git a/packages/supi/test/install/peerDependencies.ts b/packages/supi/test/install/peerDependencies.ts index ac791095c9..13be1510c7 100644 --- a/packages/supi/test/install/peerDependencies.ts +++ b/packages/supi/test/install/peerDependencies.ts @@ -2,6 +2,7 @@ import { WANTED_LOCKFILE } from '@pnpm/constants' import { Lockfile } from '@pnpm/lockfile-file' import { prepareEmpty, preparePackages } from '@pnpm/prepare' import { addDistTag, REGISTRY_MOCK_PORT } from '@pnpm/registry-mock' +import { pathToLocalPkg } from '@pnpm/test-fixtures' import rimraf = require('@zkochan/rimraf') import deepRequireCwd = require('deep-require-cwd') import loadJsonFile = require('load-json-file') @@ -840,3 +841,34 @@ test('warning is not reported when cannot resolve optional peer dependency (spec }, }) }) + +test('local tarball dependency with peer dependency', async (t: tape.Test) => { + prepareEmpty(t) + + const reporter = sinon.spy() + + const manifest = await addDependenciesToPackage({}, [ + `file:${pathToLocalPkg('tar-pkg-with-peers/tar-pkg-with-peers-1.0.0.tgz')}`, + 'bar@100.0.0', + 'foo@100.0.0', + ], await testDefaults({ reporter })) + + const localPkgDirs = await fs.readdir('node_modules/.pnpm/local') + + t.equal(localPkgDirs.length, 1) + t.ok(localPkgDirs[0].endsWith('_bar@100.0.0+foo@100.0.0')) + + await rimraf('node_modules') + + await mutateModules([ + { + buildIndex: 0, + manifest, + mutation: 'install', + rootDir: process.cwd(), + }, + ], await testDefaults()) + + t.deepEqual(await fs.readdir('node_modules/.pnpm/local'), localPkgDirs) +}) + diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f00519afd5..0ac7b3dbc4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -606,7 +606,7 @@ importers: '@pnpm/modules-cleaner': 'link:../modules-cleaner' '@pnpm/modules-yaml': 'link:../modules-yaml' '@pnpm/package-requester': 'link:../package-requester' - '@pnpm/pkgid-to-filename': 3.0.0-0 + '@pnpm/pkgid-to-filename': 3.0.0-1 '@pnpm/read-package-json': 'link:../read-package-json' '@pnpm/read-project-manifest': 'link:../read-project-manifest' '@pnpm/store-controller-types': 'link:../store-controller-types' @@ -666,7 +666,7 @@ importers: '@pnpm/modules-yaml': 'workspace:7.0.0-alpha.0' '@pnpm/package-requester': 'workspace:12.0.0-alpha.4' '@pnpm/package-store': 'workspace:*' - '@pnpm/pkgid-to-filename': 3.0.0-0 + '@pnpm/pkgid-to-filename': 3.0.0-1 '@pnpm/read-package-json': 'workspace:3.1.1-alpha.0' '@pnpm/read-project-manifest': 'workspace:1.0.6-alpha.0' '@pnpm/read-projects-context': 'workspace:*' @@ -705,7 +705,7 @@ importers: '@pnpm/lockfile-types': 'link:../lockfile-types' '@pnpm/lockfile-utils': 'link:../lockfile-utils' '@pnpm/lockfile-walker': 'link:../lockfile-walker' - '@pnpm/pkgid-to-filename': 3.0.0-0 + '@pnpm/pkgid-to-filename': 3.0.0-1 '@pnpm/symlink-dependency': 'link:../symlink-dependency' '@pnpm/types': 'link:../types' dependency-path: 'link:../dependency-path' @@ -720,7 +720,7 @@ importers: '@pnpm/lockfile-utils': 'workspace:2.0.12-alpha.0' '@pnpm/lockfile-walker': 'workspace:2.0.3-alpha.0' '@pnpm/logger': 3.2.2 - '@pnpm/pkgid-to-filename': 3.0.0-0 + '@pnpm/pkgid-to-filename': 3.0.0-1 '@pnpm/symlink-dependency': 'workspace:3.0.5-alpha.0' '@pnpm/types': 'workspace:6.0.0-alpha.0' '@types/ramda': ^0.27.5 @@ -993,7 +993,7 @@ importers: '@pnpm/lockfile-types': 'link:../lockfile-types' '@pnpm/lockfile-utils': 'link:../lockfile-utils' '@pnpm/package-bins': 'link:../package-bins' - '@pnpm/pkgid-to-filename': 3.0.0-0 + '@pnpm/pkgid-to-filename': 3.0.0-1 '@pnpm/read-modules-dir': 'link:../read-modules-dir' '@pnpm/read-package-json': 'link:../read-package-json' '@pnpm/store-controller-types': 'link:../store-controller-types' @@ -1015,7 +1015,7 @@ importers: '@pnpm/logger': 3.2.2 '@pnpm/modules-cleaner': 'link:' '@pnpm/package-bins': 'workspace:4.0.4-alpha.0' - '@pnpm/pkgid-to-filename': ^3.0.0-0 + '@pnpm/pkgid-to-filename': ^3.0.0-1 '@pnpm/read-modules-dir': 'workspace:2.0.1' '@pnpm/read-package-json': 'workspace:3.1.1-alpha.0' '@pnpm/store-controller-types': 'workspace:8.0.0-alpha.3' @@ -1221,7 +1221,7 @@ importers: '@pnpm/cafs': 'link:../cafs' '@pnpm/core-loggers': 'link:../core-loggers' '@pnpm/fetcher-base': 'link:../fetcher-base' - '@pnpm/pkgid-to-filename': 3.0.0-0 + '@pnpm/pkgid-to-filename': 3.0.0-1 '@pnpm/read-package-json': 'link:../read-package-json' '@pnpm/resolver-base': 'link:../resolver-base' '@pnpm/store-controller-types': 'link:../store-controller-types' @@ -1263,7 +1263,7 @@ importers: '@pnpm/logger': 3.2.2 '@pnpm/npm-resolver': 'workspace:*' '@pnpm/package-requester': 'link:' - '@pnpm/pkgid-to-filename': 3.0.0-0 + '@pnpm/pkgid-to-filename': 3.0.0-1 '@pnpm/read-package-json': 'workspace:3.1.1-alpha.0' '@pnpm/resolver-base': 'workspace:7.0.1-alpha.0' '@pnpm/store-controller-types': 'workspace:8.0.0-alpha.3' @@ -1298,7 +1298,7 @@ importers: '@pnpm/core-loggers': 'link:../core-loggers' '@pnpm/fetcher-base': 'link:../fetcher-base' '@pnpm/package-requester': 'link:../package-requester' - '@pnpm/pkgid-to-filename': 3.0.0-0 + '@pnpm/pkgid-to-filename': 3.0.0-1 '@pnpm/resolver-base': 'link:../resolver-base' '@pnpm/store-controller-types': 'link:../store-controller-types' '@pnpm/types': 'link:../types' @@ -1335,7 +1335,7 @@ importers: '@pnpm/npm-resolver': 'workspace:*' '@pnpm/package-requester': 'workspace:12.0.0-alpha.4' '@pnpm/package-store': 'link:' - '@pnpm/pkgid-to-filename': 3.0.0-0 + '@pnpm/pkgid-to-filename': 3.0.0-1 '@pnpm/resolver-base': 'workspace:7.0.1-alpha.0' '@pnpm/store-controller-types': 'workspace:8.0.0-alpha.3' '@pnpm/tarball-fetcher': 'workspace:*' @@ -1813,7 +1813,7 @@ importers: '@pnpm/lockfile-walker': 'link:../lockfile-walker' '@pnpm/modules-yaml': 'link:../modules-yaml' '@pnpm/normalize-registries': 'link:../normalize-registries' - '@pnpm/pkgid-to-filename': 3.0.0-0 + '@pnpm/pkgid-to-filename': 3.0.0-1 '@pnpm/sort-packages': 'link:../sort-packages' '@pnpm/store-connection-manager': 'link:../store-connection-manager' '@pnpm/store-controller-types': 'link:../store-controller-types' @@ -1861,7 +1861,7 @@ importers: '@pnpm/logger': ^3.2.2 '@pnpm/modules-yaml': 'workspace:7.0.0-alpha.0' '@pnpm/normalize-registries': 'workspace:1.0.1-alpha.0' - '@pnpm/pkgid-to-filename': 3.0.0-0 + '@pnpm/pkgid-to-filename': 3.0.0-1 '@pnpm/plugin-commands-rebuild': 'link:' '@pnpm/prepare': 'workspace:0.0.2-alpha.1' '@pnpm/sort-packages': 'workspace:1.0.10-alpha.1' @@ -2010,7 +2010,7 @@ importers: '@pnpm/normalize-registries': 'link:../normalize-registries' '@pnpm/parse-wanted-dependency': 'link:../parse-wanted-dependency' '@pnpm/pick-registry-for-package': 'link:../pick-registry-for-package' - '@pnpm/pkgid-to-filename': 3.0.0-0 + '@pnpm/pkgid-to-filename': 3.0.0-1 '@pnpm/store-connection-manager': 'link:../store-connection-manager' '@pnpm/store-controller-types': 'link:../store-controller-types' '@pnpm/store-path': 4.0.0-0 @@ -2054,7 +2054,7 @@ importers: '@pnpm/normalize-registries': 'workspace:1.0.1-alpha.0' '@pnpm/parse-wanted-dependency': 'workspace:1.0.0' '@pnpm/pick-registry-for-package': 'workspace:1.0.1-alpha.0' - '@pnpm/pkgid-to-filename': ^3.0.0-0 + '@pnpm/pkgid-to-filename': ^3.0.0-1 '@pnpm/plugin-commands-store': 'link:' '@pnpm/prepare': 'workspace:0.0.2-alpha.1' '@pnpm/store-connection-manager': 'workspace:0.3.0-alpha.4' @@ -2389,7 +2389,7 @@ importers: '@pnpm/npm-resolver': 'link:../npm-resolver' '@pnpm/package-is-installable': 'link:../package-is-installable' '@pnpm/pick-registry-for-package': 'link:../pick-registry-for-package' - '@pnpm/pkgid-to-filename': 3.0.0-0 + '@pnpm/pkgid-to-filename': 3.0.0-1 '@pnpm/resolver-base': 'link:../resolver-base' '@pnpm/store-controller-types': 'link:../store-controller-types' '@pnpm/types': 'link:../types' @@ -2412,7 +2412,7 @@ importers: '@pnpm/npm-resolver': 'workspace:8.0.0-alpha.2' '@pnpm/package-is-installable': 'workspace:4.0.8-alpha.0' '@pnpm/pick-registry-for-package': 'workspace:1.0.1-alpha.0' - '@pnpm/pkgid-to-filename': ^3.0.0-0 + '@pnpm/pkgid-to-filename': ^3.0.0-1 '@pnpm/resolve-dependencies': 'link:' '@pnpm/resolver-base': 'workspace:7.0.1-alpha.0' '@pnpm/store-controller-types': 'workspace:8.0.0-alpha.3' @@ -2575,7 +2575,7 @@ importers: '@pnpm/normalize-registries': 'link:../normalize-registries' '@pnpm/package-requester': 'link:../package-requester' '@pnpm/parse-wanted-dependency': 'link:../parse-wanted-dependency' - '@pnpm/pkgid-to-filename': 3.0.0-0 + '@pnpm/pkgid-to-filename': 3.0.0-1 '@pnpm/prune-lockfile': 'link:../prune-lockfile' '@pnpm/read-modules-dir': 'link:../read-modules-dir' '@pnpm/read-package-json': 'link:../read-package-json' @@ -2679,7 +2679,7 @@ importers: '@pnpm/package-requester': 'workspace:12.0.0-alpha.4' '@pnpm/package-store': 'workspace:*' '@pnpm/parse-wanted-dependency': 'workspace:1.0.0' - '@pnpm/pkgid-to-filename': 3.0.0-0 + '@pnpm/pkgid-to-filename': 3.0.0-1 '@pnpm/prepare': 'workspace:0.0.2-alpha.1' '@pnpm/prune-lockfile': 'workspace:2.0.8-alpha.1' '@pnpm/read-modules-dir': 'workspace:2.0.1' @@ -3435,14 +3435,14 @@ packages: node: '>=10' resolution: integrity: sha512-/hQK/HSxnqPavF/Wc1YanCtcrYnpLVEqv3fcHJ5SQmKbcaoIVHeUnBsI2Ep6JZiTTYxCfkzRw9c6mr9sn3Uk3w== - /@pnpm/pkgid-to-filename/3.0.0-0: + /@pnpm/pkgid-to-filename/3.0.0-1: dependencies: normalize-path: 3.0.0 dev: false engines: node: '>=10.13' resolution: - integrity: sha512-DojhkQRsAUqo39xnHqVUwMh3zIMRbMoSzv2AwT/+XOlpVPQbFCq7pOmQYs+sf78cDt06gTKJMaaO/gkMY6GsxQ== + integrity: sha512-XiDnXNFIXouJVepE9/C8Tmvs/+OJkOyjeIkNGTua8gCrfSqbEcUE+WtiozX/Y/Uq9l6bEN7BZWdM2xEnddnHTg== /@pnpm/registry-mock/2.0.1: dependencies: anonymous-npm-registry-client: 0.1.2 diff --git a/privatePackages/test-fixtures/fixtures/tar-pkg-with-peers/index.js b/privatePackages/test-fixtures/fixtures/tar-pkg-with-peers/index.js new file mode 100644 index 0000000000..6b5a79544f --- /dev/null +++ b/privatePackages/test-fixtures/fixtures/tar-pkg-with-peers/index.js @@ -0,0 +1 @@ +module.exports = () => require('./package.json').name diff --git a/privatePackages/test-fixtures/fixtures/tar-pkg-with-peers/package.json b/privatePackages/test-fixtures/fixtures/tar-pkg-with-peers/package.json new file mode 100644 index 0000000000..910cc723ec --- /dev/null +++ b/privatePackages/test-fixtures/fixtures/tar-pkg-with-peers/package.json @@ -0,0 +1,8 @@ +{ + "name": "tar-pkg-with-peers", + "version": "1.0.0", + "peerDependencies": { + "bar": "^100.0.0", + "foo": "^100.0.0" + } +} diff --git a/privatePackages/test-fixtures/fixtures/tar-pkg-with-peers/tar-pkg-with-peers-1.0.0.tgz b/privatePackages/test-fixtures/fixtures/tar-pkg-with-peers/tar-pkg-with-peers-1.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..2b82e15d466eb55dd851f65c3a439e3e50ebb4f3 GIT binary patch literal 985 zcmV;~119_*iwFP!000001MODdZ`(Ey?rZc{9Q4u{P!!2c9H3}}DmEPxl_f)xn`I9J zWSO?v$f71nP1B+O`|e~rZPHPw=Y3@f-TXE@r5)Gqpbd zHoAw=T?c+vd7T#UR%I)Ey!!O!rhT)eIya1osMbP~@$hI@Vt*lq7si6|O#^MRX0$F5vGp8JO=3K7j zmVv_Cj%Wix8;uoEo))atTrTJ-+Oo=KmP@^|U@i%I*3_ufq->|hqB@RM1zO~}fd~@w zZfpILUF$=sm(y3|c$sOnne-Et?51RE?=_QlJSazs%~^q*rO4!%S=&hP>F`^s90zqQ~`A)H2PX zR8`COxJ(=QM-1X{m|S@g10KU93g7Vo8-VG>I5sV~;>jqSCV(E17bMpZ4#5kq;Vlma z7OQ!HriKioaBLaWPK*d!5R41h28CJ;4`u{i zXgrPCJs=F2=Ob23!BpbT**1Rkhwy(Y<@WrS#aw)}-|MH~`1A80jlFNq|FiDd{`~(Q zg6B_@3tN1o@2rN`aM*#@=XkRH+Q>>AKDUpzD+JeuDxP=jB3+C9X8q5|ZvTHh%l|aT zU+jPP?8W2#@1CCQ_y2d1-;4v3wzT;YOl-tad9ysC`|D9D@ZM-zX#RjNcmpF3*LG~D zRg!riN`c2lk>Rxstq65s&eDn;e{mgW=X+o-lzN~v4n7;7_aBkH>}4-|`H}KFaXK|Y H02BZKyNcci literal 0 HcmV?d00001