mustard-claude 3.0.4 → 3.0.7
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/README.md +80 -20
- package/bin/mustard.js +0 -0
- package/dist/cli.js +4 -1
- package/dist/cli.js.map +1 -1
- package/dist/services/npm.js +1 -1
- package/dist/services/npm.js.map +1 -1
- package/package.json +59 -59
- package/templates/settings.json +4 -0
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
</p>
|
|
10
10
|
|
|
11
11
|
<p align="center">
|
|
12
|
-
<img src="https://img.shields.io/
|
|
12
|
+
<a href="https://www.npmjs.com/package/mustard-claude"><img src="https://img.shields.io/npm/v/mustard-claude?style=for-the-badge&color=yellow&label=npm" alt="npm"></a>
|
|
13
13
|
<img src="https://img.shields.io/badge/node-%3E%3D18-green?style=for-the-badge&logo=node.js" alt="Node">
|
|
14
14
|
<img src="https://img.shields.io/badge/license-MIT-blue?style=for-the-badge" alt="License">
|
|
15
15
|
</p>
|
|
@@ -32,47 +32,74 @@ Mustard sets up a `.claude/` folder that turns Claude Code into a structured dev
|
|
|
32
32
|
- **3 sync scripts** — subproject detection, entity registry sync, statusline
|
|
33
33
|
- **Monorepo + single repo** — works with any project structure
|
|
34
34
|
|
|
35
|
-
##
|
|
35
|
+
## Quick Start
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
4. Use `/feature`, `/bugfix`, `/task` to work through structured pipelines
|
|
37
|
+
```bash
|
|
38
|
+
# Install globally
|
|
39
|
+
npm install -g mustard-claude
|
|
41
40
|
|
|
42
|
-
|
|
41
|
+
# Initialize your project
|
|
42
|
+
cd my-project
|
|
43
|
+
mustard init
|
|
44
|
+
|
|
45
|
+
# Open Claude Code and run /scan
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
That's it. After `/scan`, use `/feature`, `/bugfix`, `/task` to work through structured pipelines.
|
|
43
49
|
|
|
44
50
|
## Installation
|
|
45
51
|
|
|
46
52
|
### Prerequisites
|
|
47
53
|
|
|
48
54
|
- **Node.js** >= 18.0.0
|
|
55
|
+
- **Claude Code** CLI or IDE extension
|
|
49
56
|
|
|
50
|
-
### Install
|
|
57
|
+
### Option 1: Global Install (recommended)
|
|
51
58
|
|
|
52
59
|
```bash
|
|
53
|
-
# Global
|
|
54
60
|
npm install -g mustard-claude
|
|
61
|
+
```
|
|
55
62
|
|
|
56
|
-
|
|
63
|
+
After install, the `mustard` command is available globally:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
mustard init
|
|
67
|
+
mustard update
|
|
68
|
+
mustard auto-update
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Option 2: Run Without Installing
|
|
72
|
+
|
|
73
|
+
```bash
|
|
57
74
|
npx mustard-claude init
|
|
75
|
+
npx mustard-claude update
|
|
76
|
+
npx mustard-claude auto-update
|
|
58
77
|
```
|
|
59
78
|
|
|
60
|
-
###
|
|
79
|
+
### Verify Installation
|
|
61
80
|
|
|
62
81
|
```bash
|
|
63
|
-
|
|
64
|
-
mustard init
|
|
82
|
+
mustard --version
|
|
65
83
|
```
|
|
66
84
|
|
|
67
|
-
|
|
85
|
+
## How It Works
|
|
86
|
+
|
|
87
|
+
1. `mustard init` copies the `.claude/` structure into your project
|
|
88
|
+
2. Inside Claude Code, run `/scan` to analyze your codebase
|
|
89
|
+
3. `/scan` generates guards, recipes, patterns, agents, and skills specific to your project
|
|
90
|
+
4. Use `/feature`, `/bugfix`, `/task` to work through structured pipelines
|
|
91
|
+
|
|
92
|
+
The CLI is a **one-time setup tool**. All intelligence lives in the skills and hooks inside `.claude/`.
|
|
68
93
|
|
|
69
94
|
## CLI Commands
|
|
70
95
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
mustard
|
|
74
|
-
mustard
|
|
75
|
-
|
|
96
|
+
| Command | Description |
|
|
97
|
+
|---------|-------------|
|
|
98
|
+
| `mustard init` | Copy `.claude/` structure into current project |
|
|
99
|
+
| `mustard update` | Update core files (preserves user customizations) |
|
|
100
|
+
| `mustard auto-update` | Check npm for newer version and install |
|
|
101
|
+
| `mustard --version` | Show installed version |
|
|
102
|
+
| `mustard --help` | Show help |
|
|
76
103
|
|
|
77
104
|
### `mustard init`
|
|
78
105
|
|
|
@@ -106,6 +133,13 @@ mustard auto-update Check npm for newer version and install
|
|
|
106
133
|
- `commands/*.md` — user commands outside `mustard/`
|
|
107
134
|
- `docs/`, `agent-memory/`, `spec/`, `plans/`
|
|
108
135
|
|
|
136
|
+
### `mustard auto-update`
|
|
137
|
+
|
|
138
|
+
| Option | Description |
|
|
139
|
+
|--------|-------------|
|
|
140
|
+
| `--check-only` | Only check for updates, do not install |
|
|
141
|
+
| `-y, --yes` | Skip confirmation prompts |
|
|
142
|
+
|
|
109
143
|
## What Gets Installed
|
|
110
144
|
|
|
111
145
|
```
|
|
@@ -255,10 +289,36 @@ Mustard is **framework-agnostic**. The CLI just copies templates. `/scan` handle
|
|
|
255
289
|
| **Monorepo** | Any combination of the above |
|
|
256
290
|
| **Single repo** | Any single project |
|
|
257
291
|
|
|
292
|
+
## Updating
|
|
293
|
+
|
|
294
|
+
### Update Mustard CLI
|
|
295
|
+
|
|
296
|
+
```bash
|
|
297
|
+
# Check if there's a new version
|
|
298
|
+
mustard auto-update --check-only
|
|
299
|
+
|
|
300
|
+
# Update to latest
|
|
301
|
+
mustard auto-update
|
|
302
|
+
|
|
303
|
+
# Or manually
|
|
304
|
+
npm install -g mustard-claude@latest
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
### Update Project Templates
|
|
308
|
+
|
|
309
|
+
After updating the CLI, update your project's `.claude/` files:
|
|
310
|
+
|
|
311
|
+
```bash
|
|
312
|
+
cd my-project
|
|
313
|
+
mustard update
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
This recreates core files (hooks, skills, scripts, commands) while preserving your customizations.
|
|
317
|
+
|
|
258
318
|
## Development
|
|
259
319
|
|
|
260
320
|
```bash
|
|
261
|
-
git clone https://github.com/
|
|
321
|
+
git clone https://github.com/rubensrpj/mustard.git
|
|
262
322
|
cd mustard
|
|
263
323
|
npm install
|
|
264
324
|
npm run build
|
package/bin/mustard.js
CHANGED
|
File without changes
|
package/dist/cli.js
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
2
3
|
import { initCommand } from './commands/init.js';
|
|
3
4
|
import { updateCommand } from './commands/update.js';
|
|
4
5
|
import { autoUpdateCommand } from './commands/auto-update.js';
|
|
6
|
+
const require = createRequire(import.meta.url);
|
|
7
|
+
const { version } = require('../package.json');
|
|
5
8
|
export function run() {
|
|
6
9
|
const program = new Command();
|
|
7
10
|
program
|
|
8
11
|
.name('mustard')
|
|
9
12
|
.description('Framework-agnostic CLI for Claude Code project setup')
|
|
10
|
-
.version(
|
|
13
|
+
.version(version);
|
|
11
14
|
program
|
|
12
15
|
.command('init')
|
|
13
16
|
.description('Copy .claude/ structure into the current project')
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,MAAM,UAAU,GAAG;IACjB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,SAAS,CAAC;SACf,WAAW,CAAC,sDAAsD,CAAC;SACnE,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,kDAAkD,CAAC;SAC/D,MAAM,CAAC,aAAa,EAAE,sDAAsD,CAAC;SAC7E,MAAM,CAAC,WAAW,EAAE,2BAA2B,CAAC;SAChD,MAAM,CAAC,WAAW,CAAC,CAAC;IAEvB,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,2DAA2D,CAAC;SACxE,MAAM,CAAC,aAAa,EAAE,8BAA8B,CAAC;SACrD,MAAM,CAAC,aAAa,CAAC,CAAC;IAEzB,OAAO;SACJ,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,uDAAuD,CAAC;SACpE,MAAM,CAAC,cAAc,EAAE,wCAAwC,CAAC;SAChE,MAAM,CAAC,WAAW,EAAE,2BAA2B,CAAC;SAChD,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAE7B,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAE/C,MAAM,UAAU,GAAG;IACjB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,SAAS,CAAC;SACf,WAAW,CAAC,sDAAsD,CAAC;SACnE,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,kDAAkD,CAAC;SAC/D,MAAM,CAAC,aAAa,EAAE,sDAAsD,CAAC;SAC7E,MAAM,CAAC,WAAW,EAAE,2BAA2B,CAAC;SAChD,MAAM,CAAC,WAAW,CAAC,CAAC;IAEvB,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,2DAA2D,CAAC;SACxE,MAAM,CAAC,aAAa,EAAE,8BAA8B,CAAC;SACrD,MAAM,CAAC,aAAa,CAAC,CAAC;IAEzB,OAAO;SACJ,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,uDAAuD,CAAC;SACpE,MAAM,CAAC,cAAc,EAAE,wCAAwC,CAAC;SAChE,MAAM,CAAC,WAAW,EAAE,2BAA2B,CAAC;SAChD,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAE7B,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC"}
|
package/dist/services/npm.js
CHANGED
|
@@ -4,7 +4,7 @@ import { readFile } from 'fs/promises';
|
|
|
4
4
|
import { join, dirname } from 'path';
|
|
5
5
|
import { fileURLToPath } from 'url';
|
|
6
6
|
const execAsync = promisify(exec);
|
|
7
|
-
const PACKAGE_NAME = 'mustard
|
|
7
|
+
const PACKAGE_NAME = '@atiz/mustard';
|
|
8
8
|
/**
|
|
9
9
|
* Get the latest version of mustard-claude from npm registry
|
|
10
10
|
*/
|
package/dist/services/npm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"npm.js","sourceRoot":"","sources":["../../src/services/npm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC,MAAM,YAAY,GAAG,
|
|
1
|
+
{"version":3,"file":"npm.js","sourceRoot":"","sources":["../../src/services/npm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC,MAAM,YAAY,GAAG,eAAe,CAAC;AAErC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,YAAY,YAAY,UAAU,CAAC,CAAC;QACvE,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QACtC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QAChE,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAChC,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,CAAS,EAAE,CAAS;IAClD,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAExC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAE7B,IAAI,KAAK,GAAG,KAAK;YAAE,OAAO,CAAC,CAAC,CAAC;QAC7B,IAAI,KAAK,GAAG,KAAK;YAAE,OAAO,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,OAAO,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACxC,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IAEvD,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,kBAAkB,YAAY,SAAS,CAAC,CAAC;IAC3D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,59 +1,59 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "mustard-claude",
|
|
3
|
-
"version": "3.0.
|
|
4
|
-
"description": "Framework-agnostic CLI for Claude Code project setup",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"bin": {
|
|
7
|
-
"mustard": "./bin/mustard.js"
|
|
8
|
-
},
|
|
9
|
-
"main": "dist/cli.js",
|
|
10
|
-
"types": "dist/cli.d.ts",
|
|
11
|
-
"files": [
|
|
12
|
-
"bin/",
|
|
13
|
-
"dist/",
|
|
14
|
-
"templates/"
|
|
15
|
-
],
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
"
|
|
25
|
-
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
"
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
}
|
|
59
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "mustard-claude",
|
|
3
|
+
"version": "3.0.7",
|
|
4
|
+
"description": "Framework-agnostic CLI for Claude Code project setup",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"mustard": "./bin/mustard.js"
|
|
8
|
+
},
|
|
9
|
+
"main": "dist/cli.js",
|
|
10
|
+
"types": "dist/cli.d.ts",
|
|
11
|
+
"files": [
|
|
12
|
+
"bin/",
|
|
13
|
+
"dist/",
|
|
14
|
+
"templates/"
|
|
15
|
+
],
|
|
16
|
+
"scripts": {
|
|
17
|
+
"start": "node bin/mustard.js",
|
|
18
|
+
"build": "tsc",
|
|
19
|
+
"clean": "rimraf dist",
|
|
20
|
+
"typecheck": "tsc --noEmit",
|
|
21
|
+
"test": "node --test",
|
|
22
|
+
"release": "npm version patch && npm run build && npm publish"
|
|
23
|
+
},
|
|
24
|
+
"keywords": [
|
|
25
|
+
"claude",
|
|
26
|
+
"claude-code",
|
|
27
|
+
"ai",
|
|
28
|
+
"cli",
|
|
29
|
+
"scaffold"
|
|
30
|
+
],
|
|
31
|
+
"author": "rubensrpj",
|
|
32
|
+
"license": "MIT",
|
|
33
|
+
"repository": {
|
|
34
|
+
"type": "git",
|
|
35
|
+
"url": "git+https://github.com/rubensrpj/mustard.git"
|
|
36
|
+
},
|
|
37
|
+
"homepage": "https://github.com/rubensrpj/mustard#readme",
|
|
38
|
+
"bugs": {
|
|
39
|
+
"url": "https://github.com/rubensrpj/mustard/issues"
|
|
40
|
+
},
|
|
41
|
+
"publishConfig": {
|
|
42
|
+
"access": "public"
|
|
43
|
+
},
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"chalk": "^5.3.0",
|
|
46
|
+
"commander": "^12.1.0",
|
|
47
|
+
"inquirer": "^9.2.15",
|
|
48
|
+
"ora": "^8.0.1"
|
|
49
|
+
},
|
|
50
|
+
"engines": {
|
|
51
|
+
"node": ">=18.0.0"
|
|
52
|
+
},
|
|
53
|
+
"devDependencies": {
|
|
54
|
+
"@types/inquirer": "^9.0.9",
|
|
55
|
+
"@types/node": "^25.2.1",
|
|
56
|
+
"rimraf": "^6.1.2",
|
|
57
|
+
"typescript": "^5.9.3"
|
|
58
|
+
}
|
|
59
|
+
}
|