@olegkoval/agent-skills 1.10.0 → 1.10.1
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/.claude-plugin/plugin.json +1 -4
- package/.cursor-plugin/index.json +0 -15
- package/README.md +0 -10
- package/catalog/skills.json +0 -68
- package/collections/docs-tools.json +1 -1
- package/collections/git-tools.json +1 -1
- package/collections/software-development.json +0 -2
- package/package.json +1 -1
- package/packages/marketing/search-console-indexing-audit/adapters/cursor/skills/search-console-indexing-audit/SKILL.md +1 -1
- package/packages/marketing/viral-launch/adapters/cursor/skills/viral-launch/SKILL.md +1 -1
- package/packages/music/fill-music-player/adapters/cursor/skills/fill-music-player/SKILL.md +1 -1
- package/packages/photography/gallery/adapters/cursor/skills/gallery/SKILL.md +1 -1
- package/packages/software-development/cloudflare-block-countries/adapters/cursor/skills/cloudflare-block-countries/SKILL.md +1 -1
- package/packages/software-development/docs-index-keeper/adapters/cursor/skills/docs-index-keeper/SKILL.md +1 -1
- package/packages/software-development/gh-cli/adapters/cursor/skills/gh-cli/SKILL.md +1 -1
- package/packages/software-development/git-commit/adapters/cursor/skills/git-commit/SKILL.md +1 -1
- package/packages/software-development/obsidian-pr-sync/adapters/cursor/skills/obsidian-pr-sync/SKILL.md +1 -1
- package/packages/software-development/obsidian-task-rollover/adapters/cursor/skills/obsidian-task-rollover/SKILL.md +1 -1
- package/packages/software-development/open-source-publisher/adapters/cursor/skills/open-source-publisher/SKILL.md +1 -1
- package/packages/software-development/product-builder/adapters/cursor/skills/product-builder/SKILL.md +1 -1
- package/packages/software-development/promptctl/adapters/cursor/skills/promptctl/SKILL.md +1 -1
- package/packages/software-development/semantic-release-beta/adapters/cursor/skills/semantic-release-beta/SKILL.md +1 -1
- package/packages/software-development/starter-rules/adapters/cursor/skills/starter-rules/SKILL.md +1 -1
- package/scripts/build-adapters.sh +13 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "olko-agent-skills",
|
|
3
3
|
"description": "Agent-agnostic skill catalog for Codex, Claude, Cursor, and other skill-aware tools.",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.10.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Oleg Koval"
|
|
7
7
|
},
|
|
@@ -11,15 +11,12 @@
|
|
|
11
11
|
"skills": [
|
|
12
12
|
"./packages/software-development/docs-index-keeper",
|
|
13
13
|
"./packages/software-development/semantic-release-beta",
|
|
14
|
-
"./packages/software-development/changelog-generator",
|
|
15
14
|
"./packages/software-development/gh-cli",
|
|
16
15
|
"./packages/software-development/git-commit",
|
|
17
16
|
"./packages/photography/gallery",
|
|
18
17
|
"./packages/software-development/promptctl",
|
|
19
18
|
"./packages/music/fill-music-player",
|
|
20
19
|
"./packages/software-development/product-builder",
|
|
21
|
-
"./packages/software-development/ai-tools-setup",
|
|
22
|
-
"./packages/software-development/add-to-my-skills",
|
|
23
20
|
"./packages/software-development/starter-rules",
|
|
24
21
|
"./packages/software-development/open-source-publisher",
|
|
25
22
|
"./packages/marketing/viral-launch",
|
|
@@ -11,11 +11,6 @@
|
|
|
11
11
|
"source": "./packages/software-development/semantic-release-beta/adapters/cursor",
|
|
12
12
|
"description": "Set up semantic-release-npm-github-publish with stable main releases and prerelease beta releases on a beta branch."
|
|
13
13
|
},
|
|
14
|
-
{
|
|
15
|
-
"name": "olko:changelog-generator",
|
|
16
|
-
"source": "./packages/software-development/changelog-generator/adapters/cursor",
|
|
17
|
-
"description": "Generate user-facing changelogs and release notes from git history."
|
|
18
|
-
},
|
|
19
14
|
{
|
|
20
15
|
"name": "olko:gh-cli",
|
|
21
16
|
"source": "./packages/software-development/gh-cli/adapters/cursor",
|
|
@@ -46,16 +41,6 @@
|
|
|
46
41
|
"source": "./packages/software-development/product-builder/adapters/cursor",
|
|
47
42
|
"description": "Build a full-stack web application or SaaS product from a user description using production-oriented defaults."
|
|
48
43
|
},
|
|
49
|
-
{
|
|
50
|
-
"name": "olko:ai-tools-setup",
|
|
51
|
-
"source": "./packages/software-development/ai-tools-setup/adapters/cursor",
|
|
52
|
-
"description": "Install, repair, and measure the RTK+ICM+Vox AI development toolkit. Fixes missing hooks and MCP config, and shows a weekly effectiveness digest of token savings and memory health."
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
"name": "olko:add-to-my-skills",
|
|
56
|
-
"source": "./packages/software-development/add-to-my-skills/adapters/cursor",
|
|
57
|
-
"description": "Copy a newly created skill into this catalog, refresh manifests, and publish the change."
|
|
58
|
-
},
|
|
59
44
|
{
|
|
60
45
|
"name": "olko:starter-rules",
|
|
61
46
|
"source": "./packages/software-development/starter-rules/adapters/cursor",
|
package/README.md
CHANGED
|
@@ -184,14 +184,11 @@ These packages are the entry points. Each one is a structured workflow with conc
|
|
|
184
184
|
|-------|-------------|----------|
|
|
185
185
|
| [docs-index-keeper](packages/software-development/docs-index-keeper/SKILL.md) | Keeps a Markdown docs index in sync through pre-commit, CI, or one-off maintenance flows | A repo has `docs/` and needs `docs/README.md` or another Markdown index updated automatically |
|
|
186
186
|
| [semantic-release-beta](packages/software-development/semantic-release-beta/SKILL.md) | Sets up `semantic-release-npm-github-publish` with stable `main` releases and beta prereleases | A Node package needs stable npm publishing plus beta prereleases from a `beta` branch |
|
|
187
|
-
| [changelog-generator](packages/software-development/changelog-generator/SKILL.md) | Generates user-facing changelogs and release notes from git history | Preparing release notes, app store update text, customer changelogs, or internal release summaries |
|
|
188
187
|
| [gh-cli](packages/software-development/gh-cli/SKILL.md) | Guides GitHub CLI usage for repos, PRs, Actions, releases, issues, and related GitHub operations | Working with GitHub from the command line and needing reliable `gh` commands |
|
|
189
188
|
| [git-commit](packages/software-development/git-commit/SKILL.md) | Creates conventional commits with diff-aware staging and message generation | The user asks to commit changes or wants a conventional commit message from the current diff |
|
|
190
|
-
| [add-to-my-skills](packages/software-development/add-to-my-skills/SKILL.md) | Copies a skill from another repo into this catalog, then refreshes docs, manifests, commit, and push | Bringing a newly created skill into this repository |
|
|
191
189
|
| [promptctl](packages/software-development/promptctl/SKILL.md) | Uses `promptctl` for reusable prompt templates, scoring, and workflow automation | A project needs prompt conventions, prompt review, prompt scoring, or reusable prompt workflows |
|
|
192
190
|
| [product-builder](packages/software-development/product-builder/SKILL.md) | Builds a full-stack web app or SaaS product from a user description using production-oriented defaults | The user asks to build a complete app, SaaS, dashboard, or product rather than a prototype |
|
|
193
191
|
| [cloudflare-block-countries](packages/software-development/cloudflare-block-countries/SKILL.md) | Blocks specific countries via Cloudflare WAF Custom Rules using the API | Geo-blocking traffic, setting up WAF country rules, or blocking regions across single or multiple zones |
|
|
194
|
-
| [ai-tools-setup](packages/software-development/ai-tools-setup/SKILL.md) | Installs, repairs, and measures the RTK+ICM+Vox AI development toolkit | Setting up or repairing AI dev tooling hooks, MCP config, or reviewing a weekly token savings digest |
|
|
195
192
|
| [starter-rules](packages/software-development/starter-rules/SKILL.md) | Loads and enforces hard rules for every oleg-koval/* starter | Ensuring 300-line files, E2E tests, pre-commit hooks, Vertical Slice architecture, and KISS/DRY/SOLID |
|
|
196
193
|
| [open-source-publisher](packages/software-development/open-source-publisher/SKILL.md) | Prepares an open-source repository for public publishing with branding, CI/CD, and release hygiene | Releasing a private project publicly with proper GitHub Pages, README, and social preview |
|
|
197
194
|
| [obsidian-pr-sync](packages/software-development/obsidian-pr-sync/SKILL.md) | Fetches open GitHub PRs assigned to you or requesting review, and writes a grouped age-sorted section into today's Obsidian daily note | Syncing GitHub review queue to Obsidian at the start of the day or on demand |
|
|
@@ -297,10 +294,8 @@ agent-skills/
|
|
|
297
294
|
│ ├── software-development/
|
|
298
295
|
│ │ ├── docs-index-keeper/
|
|
299
296
|
│ │ ├── semantic-release-beta/
|
|
300
|
-
│ │ ├── changelog-generator/
|
|
301
297
|
│ │ ├── gh-cli/
|
|
302
298
|
│ │ ├── git-commit/
|
|
303
|
-
│ │ ├── add-to-my-skills/
|
|
304
299
|
│ │ ├── promptctl/
|
|
305
300
|
│ │ └── product-builder/
|
|
306
301
|
│ ├── music/
|
|
@@ -490,11 +485,6 @@ The following package workflows have been smoke-tested locally before first push
|
|
|
490
485
|
- ran `semantic-release --dry-run --no-ci` on `beta`
|
|
491
486
|
- verified prerelease calculation to `1.0.0-beta.1`
|
|
492
487
|
|
|
493
|
-
- `add-to-my-skills`
|
|
494
|
-
- copied a source skill into `packages/software-development/`
|
|
495
|
-
- refreshed generated manifests with `./scripts/build-adapters.sh`
|
|
496
|
-
- validated catalog and generated files with `./scripts/validate-catalog.sh`
|
|
497
|
-
|
|
498
488
|
The semantic-release smoke test was intentionally self-contained and used a local bare git remote plus a valid `file://` repository URL so dry-run behavior could be validated without real npm or GitHub publishing credentials.
|
|
499
489
|
|
|
500
490
|
## Licensing notes
|
package/catalog/skills.json
CHANGED
|
@@ -46,27 +46,6 @@
|
|
|
46
46
|
"kiro"
|
|
47
47
|
]
|
|
48
48
|
},
|
|
49
|
-
{
|
|
50
|
-
"name": "changelog-generator",
|
|
51
|
-
"lookupName": "olko:changelog-generator",
|
|
52
|
-
"category": "software-development",
|
|
53
|
-
"path": "packages/software-development/changelog-generator",
|
|
54
|
-
"description": "Generate user-facing changelogs and release notes from git history.",
|
|
55
|
-
"tags": [
|
|
56
|
-
"changelog",
|
|
57
|
-
"release-notes",
|
|
58
|
-
"git",
|
|
59
|
-
"docs"
|
|
60
|
-
],
|
|
61
|
-
"adapters": [
|
|
62
|
-
"codex",
|
|
63
|
-
"claude",
|
|
64
|
-
"cursor",
|
|
65
|
-
"copilot",
|
|
66
|
-
"windsurf",
|
|
67
|
-
"kiro"
|
|
68
|
-
]
|
|
69
|
-
},
|
|
70
49
|
{
|
|
71
50
|
"name": "gh-cli",
|
|
72
51
|
"lookupName": "olko:gh-cli",
|
|
@@ -195,53 +174,6 @@
|
|
|
195
174
|
"kiro"
|
|
196
175
|
]
|
|
197
176
|
},
|
|
198
|
-
{
|
|
199
|
-
"name": "ai-tools-setup",
|
|
200
|
-
"lookupName": "olko:ai-tools-setup",
|
|
201
|
-
"category": "software-development",
|
|
202
|
-
"path": "packages/software-development/ai-tools-setup",
|
|
203
|
-
"description": "Install, repair, and measure the RTK+ICM+Vox AI development toolkit. Fixes missing hooks and MCP config, and shows a weekly effectiveness digest of token savings and memory health.",
|
|
204
|
-
"tags": [
|
|
205
|
-
"rtk",
|
|
206
|
-
"icm",
|
|
207
|
-
"vox",
|
|
208
|
-
"setup",
|
|
209
|
-
"hooks",
|
|
210
|
-
"digest",
|
|
211
|
-
"ai-tools",
|
|
212
|
-
"productivity"
|
|
213
|
-
],
|
|
214
|
-
"adapters": [
|
|
215
|
-
"codex",
|
|
216
|
-
"claude",
|
|
217
|
-
"cursor",
|
|
218
|
-
"copilot",
|
|
219
|
-
"windsurf",
|
|
220
|
-
"kiro"
|
|
221
|
-
]
|
|
222
|
-
},
|
|
223
|
-
{
|
|
224
|
-
"name": "add-to-my-skills",
|
|
225
|
-
"lookupName": "olko:add-to-my-skills",
|
|
226
|
-
"category": "software-development",
|
|
227
|
-
"path": "packages/software-development/add-to-my-skills",
|
|
228
|
-
"description": "Copy a newly created skill into this catalog, refresh manifests, and publish the change.",
|
|
229
|
-
"tags": [
|
|
230
|
-
"skills",
|
|
231
|
-
"skillshare",
|
|
232
|
-
"catalog",
|
|
233
|
-
"git",
|
|
234
|
-
"push"
|
|
235
|
-
],
|
|
236
|
-
"adapters": [
|
|
237
|
-
"codex",
|
|
238
|
-
"claude",
|
|
239
|
-
"cursor",
|
|
240
|
-
"copilot",
|
|
241
|
-
"windsurf",
|
|
242
|
-
"kiro"
|
|
243
|
-
]
|
|
244
|
-
},
|
|
245
177
|
{
|
|
246
178
|
"name": "starter-rules",
|
|
247
179
|
"lookupName": "olko:starter-rules",
|
package/package.json
CHANGED
|
@@ -6,7 +6,7 @@ license: MIT
|
|
|
6
6
|
allowed-tools: Bash, Read, Write
|
|
7
7
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools.
|
|
8
8
|
metadata:
|
|
9
|
-
targets: [
|
|
9
|
+
targets: ["cursor"]
|
|
10
10
|
author: Oleg Koval
|
|
11
11
|
tags:
|
|
12
12
|
- seo
|
|
@@ -6,7 +6,7 @@ license: MIT
|
|
|
6
6
|
allowed-tools: Bash, Read, Write, WebSearch, WebFetch
|
|
7
7
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Useful for product repos, open-source packages, SaaS launches, waitlists, and creator tools.
|
|
8
8
|
metadata:
|
|
9
|
-
targets: [
|
|
9
|
+
targets: ["cursor"]
|
|
10
10
|
author: Oleg Koval
|
|
11
11
|
tags:
|
|
12
12
|
- marketing
|
|
@@ -5,7 +5,7 @@ license: MIT
|
|
|
5
5
|
allowed-tools: Bash
|
|
6
6
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires shell access and the fill-music-player CLI or underlying script in the target environment.
|
|
7
7
|
metadata:
|
|
8
|
-
targets: [
|
|
8
|
+
targets: ["cursor"]
|
|
9
9
|
author: Oleg Koval
|
|
10
10
|
tags:
|
|
11
11
|
- music
|
|
@@ -5,7 +5,7 @@ license: MIT
|
|
|
5
5
|
allowed-tools: Bash, Read, Write, WebSearch, WebFetch
|
|
6
6
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires a project that contains the gallery scripts and expected data layout.
|
|
7
7
|
metadata:
|
|
8
|
-
targets: [
|
|
8
|
+
targets: ["cursor"]
|
|
9
9
|
author: Oleg Koval
|
|
10
10
|
tags:
|
|
11
11
|
- photos
|
|
@@ -5,7 +5,7 @@ license: MIT
|
|
|
5
5
|
allowed-tools: Bash
|
|
6
6
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires curl and jq.
|
|
7
7
|
metadata:
|
|
8
|
-
targets: [
|
|
8
|
+
targets: ["cursor"]
|
|
9
9
|
author: Oleg Koval
|
|
10
10
|
tags:
|
|
11
11
|
- cloudflare
|
|
@@ -5,7 +5,7 @@ license: MIT
|
|
|
5
5
|
allowed-tools: Bash, Read, Write, Edit, Grep, Glob
|
|
6
6
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires shell access and Node.js 18+ when installing from npm.
|
|
7
7
|
metadata:
|
|
8
|
-
targets: [
|
|
8
|
+
targets: ["cursor"]
|
|
9
9
|
author: Oleg Koval
|
|
10
10
|
package: docs-index-keeper
|
|
11
11
|
tags:
|
|
@@ -5,7 +5,7 @@ license: MIT
|
|
|
5
5
|
allowed-tools: Bash
|
|
6
6
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires the GitHub CLI and valid GitHub authentication.
|
|
7
7
|
metadata:
|
|
8
|
-
targets: [
|
|
8
|
+
targets: ["cursor"]
|
|
9
9
|
author: Oleg Koval
|
|
10
10
|
tags:
|
|
11
11
|
- github
|
|
@@ -5,7 +5,7 @@ license: MIT
|
|
|
5
5
|
allowed-tools: Bash
|
|
6
6
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires git and a writable repository.
|
|
7
7
|
metadata:
|
|
8
|
-
targets: [
|
|
8
|
+
targets: ["cursor"]
|
|
9
9
|
author: Oleg Koval
|
|
10
10
|
tags:
|
|
11
11
|
- git
|
|
@@ -11,7 +11,7 @@ license: MIT
|
|
|
11
11
|
allowed-tools: Bash, Read, Write, Edit
|
|
12
12
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires the GitHub CLI (`gh`) authenticated and a daily note vault.
|
|
13
13
|
metadata:
|
|
14
|
-
targets: [
|
|
14
|
+
targets: ["cursor"]
|
|
15
15
|
author: Oleg Koval
|
|
16
16
|
tags:
|
|
17
17
|
- github
|
|
@@ -12,7 +12,7 @@ license: MIT
|
|
|
12
12
|
allowed-tools: Bash, Read, Write, Edit
|
|
13
13
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires daily notes at a configurable vault path.
|
|
14
14
|
metadata:
|
|
15
|
-
targets: [
|
|
15
|
+
targets: ["cursor"]
|
|
16
16
|
author: Oleg Koval
|
|
17
17
|
tags:
|
|
18
18
|
- obsidian
|
|
@@ -5,7 +5,7 @@ license: MIT
|
|
|
5
5
|
allowed-tools: Bash, Read, Write, Edit, WebSearch, WebFetch
|
|
6
6
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires a writable git repository; browser or image rendering tools are useful for visual validation.
|
|
7
7
|
metadata:
|
|
8
|
-
targets: [
|
|
8
|
+
targets: ["cursor"]
|
|
9
9
|
author: Oleg Koval
|
|
10
10
|
tags:
|
|
11
11
|
- open-source
|
|
@@ -5,7 +5,7 @@ license: MIT
|
|
|
5
5
|
allowed-tools: Bash, Read, Write, Edit, WebSearch, WebFetch
|
|
6
6
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires a writable application repository and a stack compatible with the generated implementation.
|
|
7
7
|
metadata:
|
|
8
|
-
targets: [
|
|
8
|
+
targets: ["cursor"]
|
|
9
9
|
author: Oleg Koval
|
|
10
10
|
tags:
|
|
11
11
|
- product
|
|
@@ -5,7 +5,7 @@ license: MIT
|
|
|
5
5
|
allowed-tools: Bash, Read, Write
|
|
6
6
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires promptctl to be installed when the workflow depends on the CLI.
|
|
7
7
|
metadata:
|
|
8
|
-
targets: [
|
|
8
|
+
targets: ["cursor"]
|
|
9
9
|
author: Oleg Koval
|
|
10
10
|
tags:
|
|
11
11
|
- prompts
|
|
@@ -5,7 +5,7 @@ license: MIT
|
|
|
5
5
|
allowed-tools: Bash, Read, Write, Edit
|
|
6
6
|
compatibility: Codex, Claude Code, Cursor, GitHub Copilot, Windsurf, Kiro, and other Agent Skills compatible tools. Requires a Node.js package repository that uses git and GitHub Actions.
|
|
7
7
|
metadata:
|
|
8
|
-
targets: [
|
|
8
|
+
targets: ["cursor"]
|
|
9
9
|
author: Oleg Koval
|
|
10
10
|
tags:
|
|
11
11
|
- semantic-release
|
|
@@ -21,6 +21,15 @@ const extractFrontmatter = (content) => {
|
|
|
21
21
|
if (!m) return ''
|
|
22
22
|
return m[1].endsWith('\n') ? m[1] : m[1] + '\n'
|
|
23
23
|
}
|
|
24
|
+
const injectTargets = (content, targets) => {
|
|
25
|
+
const targetsYaml = targets.length > 0
|
|
26
|
+
? ` targets: [${targets.map(t => JSON.stringify(t)).join(', ')}]`
|
|
27
|
+
: ' targets: []'
|
|
28
|
+
if (/^ targets:/m.test(content)) {
|
|
29
|
+
return content.replace(/^ targets:.*$/m, targetsYaml)
|
|
30
|
+
}
|
|
31
|
+
return content.replace(/^(metadata:)$/m, `$1\n${targetsYaml}`)
|
|
32
|
+
}
|
|
24
33
|
const stripTrailingLineWhitespace = (content) => content.replace(/[ \t]+$/gm, '')
|
|
25
34
|
const copySkillResources = (pkg, destDir) => {
|
|
26
35
|
for (const resourceDir of ['scripts']) {
|
|
@@ -229,7 +238,10 @@ for (const pkg of catalog.packages) {
|
|
|
229
238
|
2,
|
|
230
239
|
) + '\n',
|
|
231
240
|
)
|
|
232
|
-
|
|
241
|
+
const cursorCanonical = injectTargets(canonical, ['cursor'])
|
|
242
|
+
const cursorFrontmatter = extractFrontmatter(cursorCanonical)
|
|
243
|
+
const cursorBody = stripTrailingLineWhitespace(stripFrontmatter(cursorCanonical).trimStart().trimEnd())
|
|
244
|
+
fs.writeFileSync(path.join(destDir, 'SKILL.md'), [cursorFrontmatter + generatedHeader, '', cursorBody, ''].join('\n'))
|
|
233
245
|
copySkillResources(pkg, destDir)
|
|
234
246
|
}
|
|
235
247
|
|