@bongos/core 1.20.38 → 1.20.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.bongos-core.json +47 -37
- package/docs/adr/0349-a-version-preview-is-a-sandboxed-child-the-web-tier-launches.md +1 -0
- package/docs/copy-inventory.md +1 -1
- package/docs/copy-registry.json +9 -9
- package/docs/module-api-changelog.md +4 -0
- package/docs/page-readings.json +251 -248
- package/modules/npm-release/preview/childlog.js +95 -0
- package/modules/npm-release/preview/commands.js +46 -5
- package/modules/npm-release/preview/divert.js +16 -6
- package/modules/npm-release/preview/env.js +18 -7
- package/modules/npm-release/preview/proxy.js +4 -1
- package/modules/npm-release/preview/runtime.js +43 -9
- package/modules/npm-release/preview/supervisor.js +170 -31
- package/modules/npm-release/public/work.css +3 -0
- package/modules/npm-release/public/work.js +6 -1
- package/modules/npm-release/routes/preview.js +7 -5
- package/modules/provisioning/render-standup.js +13 -1
- package/modules/public-landing/public/projects.html +22 -8
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/release-notes.json +16 -0
- package/scripts/gds/provision-render.js +13 -1
- package/scripts/gds/render-payload.js +6 -5
- package/src/module-api.js +1 -1
- package/tests/npm_release_preview_commands.mjs +1 -1
- package/tests/npm_release_preview_diagnosis.mjs +376 -0
- package/tests/npm_release_preview_divert.mjs +10 -0
- package/tests/npm_release_preview_proxy.mjs +26 -0
- package/tests/npm_release_preview_routes.mjs +15 -2
- package/tests/npm_release_preview_supervisor.mjs +4 -4
- package/tests/projects_hub_app_step.mjs +49 -0
- package/tests/projects_hub_render_connect.mjs +2 -1
- package/tests/provision_render.mjs +23 -2
package/.bongos-core.json
CHANGED
|
@@ -2,22 +2,22 @@
|
|
|
2
2
|
"artifact": "bongos-core",
|
|
3
3
|
"manifest_schema": 1,
|
|
4
4
|
"generator": "scripts/gds/package-core.js",
|
|
5
|
-
"core_version": "1.20.
|
|
6
|
-
"core_contract": "1.20.
|
|
7
|
-
"source_commit": "
|
|
5
|
+
"core_version": "1.20.40",
|
|
6
|
+
"core_contract": "1.20.40",
|
|
7
|
+
"source_commit": "b2b1ab60800736f857d25d84bf91ee5bd53153fb",
|
|
8
8
|
"source_ref": "HEAD",
|
|
9
|
-
"built_at": "2026-10-01T00:
|
|
9
|
+
"built_at": "2026-10-01T00:37:27.302Z",
|
|
10
10
|
"redaction": {
|
|
11
11
|
"model": "docs-redacted+functional-verbatim",
|
|
12
12
|
"docs_redacted": 564,
|
|
13
13
|
"agent_docs_stubbed": 25,
|
|
14
|
-
"functional_verbatim":
|
|
14
|
+
"functional_verbatim": 2684,
|
|
15
15
|
"rules": 3,
|
|
16
16
|
"gate_literals": 3,
|
|
17
17
|
"gate": "passed"
|
|
18
18
|
},
|
|
19
|
-
"file_count":
|
|
20
|
-
"tree_sha256": "
|
|
19
|
+
"file_count": 3274,
|
|
20
|
+
"tree_sha256": "c0d69a1151540d8702aca870e7ac26d1ed5e95c2b60eafed5a232c20fde50f71",
|
|
21
21
|
"files": [
|
|
22
22
|
{
|
|
23
23
|
"path": ".claude/skills/ask-for-help/SKILL.md",
|
|
@@ -2222,7 +2222,7 @@
|
|
|
2222
2222
|
{
|
|
2223
2223
|
"path": "docs/adr/0349-a-version-preview-is-a-sandboxed-child-the-web-tier-launches.md",
|
|
2224
2224
|
"mode": "0000644",
|
|
2225
|
-
"sha256": "
|
|
2225
|
+
"sha256": "7fe345d475d9540181d12544606c1c2cbfd5510e94c8fbf3599fc48d2790b3cb"
|
|
2226
2226
|
},
|
|
2227
2227
|
{
|
|
2228
2228
|
"path": "docs/adr/0350-the-hub-holds-a-per-project-write-deploy-key-so-a-hosted-upgrade-reaches-github.md",
|
|
@@ -2302,12 +2302,12 @@
|
|
|
2302
2302
|
{
|
|
2303
2303
|
"path": "docs/copy-inventory.md",
|
|
2304
2304
|
"mode": "0000644",
|
|
2305
|
-
"sha256": "
|
|
2305
|
+
"sha256": "0baae7f0f5f6a43b821d0624eff2d393bc4a76b68fc357077df2875c92548c86"
|
|
2306
2306
|
},
|
|
2307
2307
|
{
|
|
2308
2308
|
"path": "docs/copy-registry.json",
|
|
2309
2309
|
"mode": "0000644",
|
|
2310
|
-
"sha256": "
|
|
2310
|
+
"sha256": "b318f4f9fd9e4cc39c515543246c8ab6e5290428702c4be2770b9c0ab705fd9e"
|
|
2311
2311
|
},
|
|
2312
2312
|
{
|
|
2313
2313
|
"path": "docs/design/apex-pass-2-direction.md",
|
|
@@ -2812,7 +2812,7 @@
|
|
|
2812
2812
|
{
|
|
2813
2813
|
"path": "docs/module-api-changelog.md",
|
|
2814
2814
|
"mode": "0000644",
|
|
2815
|
-
"sha256": "
|
|
2815
|
+
"sha256": "151589d412762bf79fe8fae3f48ae9ceb0a0052c0159860a1ed02a670101690c"
|
|
2816
2816
|
},
|
|
2817
2817
|
{
|
|
2818
2818
|
"path": "docs/modules-contract.md",
|
|
@@ -2902,7 +2902,7 @@
|
|
|
2902
2902
|
{
|
|
2903
2903
|
"path": "docs/page-readings.json",
|
|
2904
2904
|
"mode": "0000644",
|
|
2905
|
-
"sha256": "
|
|
2905
|
+
"sha256": "430b53669889f1df1cfb99359ab3ae819dd8c7d37d716271dab516c39d11eb6d"
|
|
2906
2906
|
},
|
|
2907
2907
|
{
|
|
2908
2908
|
"path": "docs/project-context.template.md",
|
|
@@ -6764,35 +6764,40 @@
|
|
|
6764
6764
|
"mode": "0000644",
|
|
6765
6765
|
"sha256": "ede907b6b579c3213eaf45d12320a8765aebaa11adc9b534e9402271c5eb39f7"
|
|
6766
6766
|
},
|
|
6767
|
+
{
|
|
6768
|
+
"path": "modules/npm-release/preview/childlog.js",
|
|
6769
|
+
"mode": "0000644",
|
|
6770
|
+
"sha256": "ca1a26162ad5ac7b9dffa8442ebf932fb3c531730c271c40e1735cbe57263f11"
|
|
6771
|
+
},
|
|
6767
6772
|
{
|
|
6768
6773
|
"path": "modules/npm-release/preview/commands.js",
|
|
6769
6774
|
"mode": "0000644",
|
|
6770
|
-
"sha256": "
|
|
6775
|
+
"sha256": "2dd2d3b901db52e5b6c00b1cedcefc258e93e23277f982102ed44ad980e236a8"
|
|
6771
6776
|
},
|
|
6772
6777
|
{
|
|
6773
6778
|
"path": "modules/npm-release/preview/divert.js",
|
|
6774
6779
|
"mode": "0000644",
|
|
6775
|
-
"sha256": "
|
|
6780
|
+
"sha256": "d7dd379f30685df8874102c40c4e68f1e7547ed85f2ec7bbaf3d98e0a7528bed"
|
|
6776
6781
|
},
|
|
6777
6782
|
{
|
|
6778
6783
|
"path": "modules/npm-release/preview/env.js",
|
|
6779
6784
|
"mode": "0000644",
|
|
6780
|
-
"sha256": "
|
|
6785
|
+
"sha256": "d9716eea3c3c233eb0397fa0976de9dfcb8a87a8e3b802c5bbea4e5568e691f9"
|
|
6781
6786
|
},
|
|
6782
6787
|
{
|
|
6783
6788
|
"path": "modules/npm-release/preview/proxy.js",
|
|
6784
6789
|
"mode": "0000644",
|
|
6785
|
-
"sha256": "
|
|
6790
|
+
"sha256": "8b68575faf04ee2905b31a9b9e2e584723666d313612ab80be3a189ea10c6f0d"
|
|
6786
6791
|
},
|
|
6787
6792
|
{
|
|
6788
6793
|
"path": "modules/npm-release/preview/runtime.js",
|
|
6789
6794
|
"mode": "0000644",
|
|
6790
|
-
"sha256": "
|
|
6795
|
+
"sha256": "307b217847412c79adb453d078d29f9063a7a83d9c0afc1d43acaef685e9e482"
|
|
6791
6796
|
},
|
|
6792
6797
|
{
|
|
6793
6798
|
"path": "modules/npm-release/preview/supervisor.js",
|
|
6794
6799
|
"mode": "0000644",
|
|
6795
|
-
"sha256": "
|
|
6800
|
+
"sha256": "fd27648c4d75e03ec541f1295a05ffd05aae957bbf0748215497b624106cf12e"
|
|
6796
6801
|
},
|
|
6797
6802
|
{
|
|
6798
6803
|
"path": "modules/npm-release/public/task-widget.js",
|
|
@@ -6802,17 +6807,17 @@
|
|
|
6802
6807
|
{
|
|
6803
6808
|
"path": "modules/npm-release/public/work.css",
|
|
6804
6809
|
"mode": "0000644",
|
|
6805
|
-
"sha256": "
|
|
6810
|
+
"sha256": "4c47bc82ceb37fe4e5f235923dc7df19b27bafd02079931b8a1b4a1581dd9a9b"
|
|
6806
6811
|
},
|
|
6807
6812
|
{
|
|
6808
6813
|
"path": "modules/npm-release/public/work.js",
|
|
6809
6814
|
"mode": "0000644",
|
|
6810
|
-
"sha256": "
|
|
6815
|
+
"sha256": "7e24e12c9615e6310227a12620dc320777bcef82710d1cad68a0546e66c783c6"
|
|
6811
6816
|
},
|
|
6812
6817
|
{
|
|
6813
6818
|
"path": "modules/npm-release/routes/preview.js",
|
|
6814
6819
|
"mode": "0000644",
|
|
6815
|
-
"sha256": "
|
|
6820
|
+
"sha256": "bb2d1b5db4a13949d69177ad10bdd9d4a3e6ad77710317317e764358bc150551"
|
|
6816
6821
|
},
|
|
6817
6822
|
{
|
|
6818
6823
|
"path": "modules/npm-release/routes/task-where.js",
|
|
@@ -7572,7 +7577,7 @@
|
|
|
7572
7577
|
{
|
|
7573
7578
|
"path": "modules/provisioning/render-standup.js",
|
|
7574
7579
|
"mode": "0000644",
|
|
7575
|
-
"sha256": "
|
|
7580
|
+
"sha256": "619653655d9e832771a10e2f0be0177787f5506abff73ccdd7266c2ae9ac8b3f"
|
|
7576
7581
|
},
|
|
7577
7582
|
{
|
|
7578
7583
|
"path": "modules/provisioning/repo-private.js",
|
|
@@ -8172,7 +8177,7 @@
|
|
|
8172
8177
|
{
|
|
8173
8178
|
"path": "modules/public-landing/public/projects.html",
|
|
8174
8179
|
"mode": "0000644",
|
|
8175
|
-
"sha256": "
|
|
8180
|
+
"sha256": "e9ba493a5969fb4e544ea578a5ebd913885e30945b3ef08b76077620fda3b357"
|
|
8176
8181
|
},
|
|
8177
8182
|
{
|
|
8178
8183
|
"path": "modules/public-landing/public/projects.probes.json",
|
|
@@ -9017,12 +9022,12 @@
|
|
|
9017
9022
|
{
|
|
9018
9023
|
"path": "package-lock.json",
|
|
9019
9024
|
"mode": "0000644",
|
|
9020
|
-
"sha256": "
|
|
9025
|
+
"sha256": "9f46a8f738d89eb715a930ddb554bf6b1bd3d027a0851e356aed3c4545354f43"
|
|
9021
9026
|
},
|
|
9022
9027
|
{
|
|
9023
9028
|
"path": "package.json",
|
|
9024
9029
|
"mode": "0000644",
|
|
9025
|
-
"sha256": "
|
|
9030
|
+
"sha256": "b504322a4ccdf13821f15b0c09de9c9c44383bdfa54457925772af80d80445c7"
|
|
9026
9031
|
},
|
|
9027
9032
|
{
|
|
9028
9033
|
"path": "public-docs/index.html",
|
|
@@ -9042,7 +9047,7 @@
|
|
|
9042
9047
|
{
|
|
9043
9048
|
"path": "release-notes.json",
|
|
9044
9049
|
"mode": "0000644",
|
|
9045
|
-
"sha256": "
|
|
9050
|
+
"sha256": "88bbf251ccd70e10dff2d818ed34eb8047ee80075856cde2da929f473ea03e89"
|
|
9046
9051
|
},
|
|
9047
9052
|
{
|
|
9048
9053
|
"path": "scripts/bongos-mcp.js",
|
|
@@ -10047,7 +10052,7 @@
|
|
|
10047
10052
|
{
|
|
10048
10053
|
"path": "scripts/gds/provision-render.js",
|
|
10049
10054
|
"mode": "0000644",
|
|
10050
|
-
"sha256": "
|
|
10055
|
+
"sha256": "2968e99d4761b2cfdcb04cfdbed601f2e971918f123721ee2c070d698064bb17"
|
|
10051
10056
|
},
|
|
10052
10057
|
{
|
|
10053
10058
|
"path": "scripts/gds/provision-repo-auth.js",
|
|
@@ -10182,7 +10187,7 @@
|
|
|
10182
10187
|
{
|
|
10183
10188
|
"path": "scripts/gds/render-payload.js",
|
|
10184
10189
|
"mode": "0000644",
|
|
10185
|
-
"sha256": "
|
|
10190
|
+
"sha256": "cfff58290a701e90865ee5f97955613000c9963c022f3392d996f8f67e707b72"
|
|
10186
10191
|
},
|
|
10187
10192
|
{
|
|
10188
10193
|
"path": "scripts/gds/repo-metrics.js",
|
|
@@ -11197,7 +11202,7 @@
|
|
|
11197
11202
|
{
|
|
11198
11203
|
"path": "src/module-api.js",
|
|
11199
11204
|
"mode": "0000644",
|
|
11200
|
-
"sha256": "
|
|
11205
|
+
"sha256": "e3bc53481c5c7f502e3fb43c06d8ceadae02c0c57edb504aab696fff1e50af7d"
|
|
11201
11206
|
},
|
|
11202
11207
|
{
|
|
11203
11208
|
"path": "src/module-loader/catalog.js",
|
|
@@ -14342,12 +14347,17 @@
|
|
|
14342
14347
|
{
|
|
14343
14348
|
"path": "tests/npm_release_preview_commands.mjs",
|
|
14344
14349
|
"mode": "0000644",
|
|
14345
|
-
"sha256": "
|
|
14350
|
+
"sha256": "42c80d48506e3f815ea4ed1dce343f84fc12b2ac55c645ac39d5be415ab3261a"
|
|
14351
|
+
},
|
|
14352
|
+
{
|
|
14353
|
+
"path": "tests/npm_release_preview_diagnosis.mjs",
|
|
14354
|
+
"mode": "0000644",
|
|
14355
|
+
"sha256": "9a246f9a29da48eaed7d0f19e156f1f63a48afb0277ab8ce02f7d6dc07c6d92b"
|
|
14346
14356
|
},
|
|
14347
14357
|
{
|
|
14348
14358
|
"path": "tests/npm_release_preview_divert.mjs",
|
|
14349
14359
|
"mode": "0000644",
|
|
14350
|
-
"sha256": "
|
|
14360
|
+
"sha256": "154a7246124d65e9c0c487b9fd24b23d6786d2e9879cb9454ecdde50c618700d"
|
|
14351
14361
|
},
|
|
14352
14362
|
{
|
|
14353
14363
|
"path": "tests/npm_release_preview_env.mjs",
|
|
@@ -14357,17 +14367,17 @@
|
|
|
14357
14367
|
{
|
|
14358
14368
|
"path": "tests/npm_release_preview_proxy.mjs",
|
|
14359
14369
|
"mode": "0000644",
|
|
14360
|
-
"sha256": "
|
|
14370
|
+
"sha256": "5aeb98a740acf5dc96ad456f72dfe7616a53a5a4c0ba306fa24764b5df299881"
|
|
14361
14371
|
},
|
|
14362
14372
|
{
|
|
14363
14373
|
"path": "tests/npm_release_preview_routes.mjs",
|
|
14364
14374
|
"mode": "0000644",
|
|
14365
|
-
"sha256": "
|
|
14375
|
+
"sha256": "187d0c93077dce3321c8063ccd04ea6033e46ee868e9530c9d6eaf5092b926a4"
|
|
14366
14376
|
},
|
|
14367
14377
|
{
|
|
14368
14378
|
"path": "tests/npm_release_preview_supervisor.mjs",
|
|
14369
14379
|
"mode": "0000644",
|
|
14370
|
-
"sha256": "
|
|
14380
|
+
"sha256": "d699b5b2a6b36169cfcdd925bf6b580c0238a6125174469a0129ca7945b1e69b"
|
|
14371
14381
|
},
|
|
14372
14382
|
{
|
|
14373
14383
|
"path": "tests/npm_release_where.mjs",
|
|
@@ -14742,7 +14752,7 @@
|
|
|
14742
14752
|
{
|
|
14743
14753
|
"path": "tests/projects_hub_app_step.mjs",
|
|
14744
14754
|
"mode": "0000644",
|
|
14745
|
-
"sha256": "
|
|
14755
|
+
"sha256": "c3d744459af82c770b04158b0cd3ec41cd2bb2f458c57992d80fde67d03565f4"
|
|
14746
14756
|
},
|
|
14747
14757
|
{
|
|
14748
14758
|
"path": "tests/projects_hub_module_picker.mjs",
|
|
@@ -14757,7 +14767,7 @@
|
|
|
14757
14767
|
{
|
|
14758
14768
|
"path": "tests/projects_hub_render_connect.mjs",
|
|
14759
14769
|
"mode": "0000644",
|
|
14760
|
-
"sha256": "
|
|
14770
|
+
"sha256": "41251f0c70ed1197155f01213d4bc0de8fb9c0ca5e4295dfc4b2fab6762823fb"
|
|
14761
14771
|
},
|
|
14762
14772
|
{
|
|
14763
14773
|
"path": "tests/projects_hub_repo_private.mjs",
|
|
@@ -14822,7 +14832,7 @@
|
|
|
14822
14832
|
{
|
|
14823
14833
|
"path": "tests/provision_render.mjs",
|
|
14824
14834
|
"mode": "0000644",
|
|
14825
|
-
"sha256": "
|
|
14835
|
+
"sha256": "0e513363137692678e03267676cb1637d9753f157a8f3702928c73b5c9e3afee"
|
|
14826
14836
|
},
|
|
14827
14837
|
{
|
|
14828
14838
|
"path": "tests/provision_repo_private.mjs",
|
|
@@ -96,6 +96,7 @@ What keeps that exception narrow:
|
|
|
96
96
|
IPAddressDeny` is the follow-up and needs the droplet.
|
|
97
97
|
- A preview started by the live process is stopped when that process exits, but the copy is
|
|
98
98
|
dropped only by the next start or stop. It is one fixed name, so it cannot pile up.
|
|
99
|
+
- **Correction, 2026-09-30 (task 1004466): the proxy strips every upstream `Set-Cookie`.** Same origin means a cookie the child set replaced the live hall's own (`cb_stealth`, the session) and locked the owner out of `/deploy`. The child's cookies now stay with the child; the steering cookie is the only one this module writes, and its clear repeats the set's Path, SameSite and Secure.
|
|
99
100
|
|
|
100
101
|
## Consequences
|
|
101
102
|
|
package/docs/copy-inventory.md
CHANGED
|
@@ -2276,9 +2276,9 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
|
|
|
2276
2276
|
| `d22564a81b18` | certain | {{productName}} — projects | `modules/public-landing/public/projects.html:6` |
|
|
2277
2277
|
| `2fd83f9a5669` | certain | {{productName}}: {{tagline}} | `modules/public-landing/public/index.html:22` |
|
|
2278
2278
|
| `2fd83f9a5669` | certain | {{productName}}: {{tagline}} | `modules/public-landing/public/index.html:22` |
|
|
2279
|
+
| `2609873e46a5` | certain | — Render needs one; the usual one is filled in | `modules/public-landing/public/projects.html:1436` |
|
|
2279
2280
|
| `5ee1b494eec3` | certain | — for signing in, and for the repositories your projects ship to. | `modules/public-landing/public/privacy.html:63` |
|
|
2280
2281
|
| `39b7e60d327e` | certain | — it is on the map under its name, but nobody joins on their own: people ask, and you decide. | `modules/public-landing/public/projects.html:933` |
|
|
2281
|
-
| `ee96978f8d1b` | certain | — leave empty if there is none | `modules/public-landing/public/projects.html:1436` |
|
|
2282
2282
|
| `5becfcad07c3` | certain | — people ask from the project’s hall, you approve each one from the hall’s Watch page, and then they sign in. | `modules/public-landing/public/projects.html:914` |
|
|
2283
2283
|
| `9ac56aa4e540` | certain | — projects hosted by the platform run on servers rented from DigitalOcean, with their web address and traffic | `modules/public-landing/public/privacy.html:65` |
|
|
2284
2284
|
| `210963315141` | certain | — the place where the project gets built — at the address you just chose. There is nothing for you to set up. | `modules/public-landing/public/projects.html:1395` |
|
package/docs/copy-registry.json
CHANGED
|
@@ -20989,6 +20989,15 @@
|
|
|
20989
20989
|
"origin": "html-title",
|
|
20990
20990
|
"confidence": "certain"
|
|
20991
20991
|
},
|
|
20992
|
+
{
|
|
20993
|
+
"id": "2609873e46a5",
|
|
20994
|
+
"surface": "landing",
|
|
20995
|
+
"text": "— Render needs one; the usual one is filled in",
|
|
20996
|
+
"file": "modules/public-landing/public/projects.html",
|
|
20997
|
+
"line": 1436,
|
|
20998
|
+
"origin": "html-text",
|
|
20999
|
+
"confidence": "certain"
|
|
21000
|
+
},
|
|
20992
21001
|
{
|
|
20993
21002
|
"id": "5ee1b494eec3",
|
|
20994
21003
|
"surface": "landing",
|
|
@@ -21007,15 +21016,6 @@
|
|
|
21007
21016
|
"origin": "html-text",
|
|
21008
21017
|
"confidence": "certain"
|
|
21009
21018
|
},
|
|
21010
|
-
{
|
|
21011
|
-
"id": "ee96978f8d1b",
|
|
21012
|
-
"surface": "landing",
|
|
21013
|
-
"text": "— leave empty if there is none",
|
|
21014
|
-
"file": "modules/public-landing/public/projects.html",
|
|
21015
|
-
"line": 1436,
|
|
21016
|
-
"origin": "html-text",
|
|
21017
|
-
"confidence": "certain"
|
|
21018
|
-
},
|
|
21019
21019
|
{
|
|
21020
21020
|
"id": "5becfcad07c3",
|
|
21021
21021
|
"surface": "landing",
|
|
@@ -2733,5 +2733,9 @@ is load-bearing: the script throws rather than guess if it is missing, and
|
|
|
2733
2733
|
landed since 1.20.36 with no explicit bump. run 36790298715. (task 1002620)
|
|
2734
2734
|
1.20.38 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
2735
2735
|
landed since 1.20.37 with no explicit bump. run 36794921587. (task 1002620)
|
|
2736
|
+
1.20.39 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
2737
|
+
landed since 1.20.38 with no explicit bump. run 36796243918. (task 1002620)
|
|
2738
|
+
1.20.40 — CI auto-patch (publish-on-merge, ADR 0161): carrier for merges
|
|
2739
|
+
landed since 1.20.39 with no explicit bump. run 36797045221. (task 1002620)
|
|
2736
2740
|
---------------------------------------------------------------------------
|
|
2737
2741
|
```
|