xcratch-create 0.5.6 → 1.1.0

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/bin/create.js CHANGED
@@ -1,28 +1,25 @@
1
1
  #!/usr/bin/env node
2
- 'use strict'
3
2
 
4
- const path = require('path');
5
- const replace = require('replace-in-file');
6
- const fs = require('fs-extra');
7
- const admZip = require('adm-zip');
8
- const projectJson = require('../package.json');
3
+ import path from 'path';
4
+ import { replaceInFile } from 'replace-in-file';
5
+ import fs from 'fs-extra';
6
+ import AdmZip from 'adm-zip';
7
+ import projectJson from '../package.json' assert { type: 'json' };
8
+
9
+ const __dirname = path.dirname(new URL(import.meta.url).pathname);
9
10
 
10
11
  function getArgs() {
11
12
  const args = {};
12
13
  process.argv
13
- .slice(2, process.argv.length)
14
+ .slice(2) // Start from the third argument (ignoring Node and script path)
14
15
  .forEach(arg => {
15
- if (arg.slice(0, 2) === '--') {
16
- // long arg
17
- const longArg = arg.split('=');
18
- const longArgFlag = longArg[0].slice(2, longArg[0].length);
19
- const longArgValue = longArg.length > 1 ? longArg[1] : true;
20
- args[longArgFlag] = longArgValue;
21
- }
22
- else if (arg[0] === '-') {
23
- // flags
24
- const flags = arg.slice(1, arg.length).split('');
25
- flags.forEach(flag => {
16
+ if (arg.startsWith('--')) {
17
+ // Long argument (e.g., --account=my-account)
18
+ const [longArgFlag, ...rest] = arg.slice(2).split('=');
19
+ args[longArgFlag] = rest.join('=') || true; // Handle arguments with and without values
20
+ } else if (arg.startsWith('-')) {
21
+ // Flags (e.g., -abc becomes args.a = args.b = args.c = true)
22
+ arg.slice(1).split('').forEach(flag => {
26
23
  args[flag] = true;
27
24
  });
28
25
  }
@@ -32,90 +29,97 @@ function getArgs() {
32
29
 
33
30
  const args = getArgs();
34
31
 
35
- if (args['version'] || args['V']) {
32
+ // Check for version request
33
+ if (args.version || args.V) {
36
34
  process.stdout.write(`v${projectJson.version}\n`);
37
- process.exit(0);
35
+ process.exit(0); // Exit successfully after displaying version
38
36
  }
39
37
 
40
- if (!args['account']) {
38
+ // Validate required arguments
39
+ if (!args.account) {
41
40
  process.stderr.write('"--account=<github account>" is not set\n');
42
- process.exit(1);
41
+ process.exit(1); // Exit with an error code
43
42
  }
44
- const account = args['account'];
43
+ const account = args.account;
45
44
 
46
- if (!args['repo']) {
45
+ if (!args.repo) {
47
46
  process.stderr.write('"--repo=<github repository>" is not set\n');
48
47
  process.exit(1);
49
48
  }
50
- const repo = args['repo'];
49
+ const repo = args.repo;
51
50
 
52
- if (!args['extensionID']) {
51
+ if (!args.extensionID) {
53
52
  process.stderr.write('"--extensionID=<extension ID>" is not set\n');
54
53
  process.exit(1);
55
54
  }
56
- const extensionID = args['extensionID'];
55
+ const extensionID = args.extensionID;
57
56
 
58
- if (!args['extensionName']) {
57
+ if (!args.extensionName) {
59
58
  process.stderr.write('"--extensionName=<extension name>" is not set\n');
60
59
  process.exit(1);
61
60
  }
62
- const extensionName = args['extensionName'];
61
+ const extensionName = args.extensionName;
63
62
 
64
- const outputDir = args['out'] ?
65
- path.resolve(process.cwd(), args['out']) :
66
- path.resolve(process.cwd(), repo);
63
+ // Determine output directory
64
+ const outputDir = args.out
65
+ ? path.resolve(process.cwd(), args.out)
66
+ : path.resolve(process.cwd(), repo);
67
67
 
68
- /**
69
- * Fetch template files
70
- *
71
- */
68
+ // Fetch the project template
72
69
  async function fetchTemplate() {
73
- fs.copySync(path.resolve(__dirname, '../template'), outputDir);
70
+ try {
71
+ await fs.copy(path.resolve(__dirname, '../template'), outputDir);
72
+ } catch (error) {
73
+ console.error('Error fetching template:', error);
74
+ process.exit(1);
75
+ }
74
76
  }
75
77
 
78
+ // Replacement options for template files
76
79
  const options = {
77
- files: [
78
- 'README.md',
79
- 'package.json',
80
- 'src/**/*.js',
81
- 'src/**/*.jsx',
82
- 'src/**/*.json',
83
- 'projects/example/project.json',
84
- ],
80
+ files: ['./**/*'], // Target all files in the output directory
85
81
  from: [
86
82
  /<<account>>/g,
87
83
  /<<repo>>/g,
88
84
  /<<extensionID>>/g,
89
85
  /<<extensionName>>/g,
90
86
  ],
91
- to: [
92
- account,
93
- repo,
94
- extensionID,
95
- extensionName,
96
- ],
87
+ to: [account, repo, extensionID, extensionName],
97
88
  };
98
89
 
90
+ // Customize the template with provided arguments
99
91
  async function resetRepo() {
100
- process.chdir(outputDir);
101
- fs.renameSync('dot_gitignore', '.gitignore');
102
92
  try {
103
- const results = await replace(options)
104
- console.log('Replacement results:', results);
105
- }
106
- catch (error) {
107
- console.error('Error occurred:', error);
108
- }
109
- try {
110
- const zip = new admZip();
93
+ process.chdir(outputDir); // Change working directory to the output directory
94
+
95
+ // Rename .gitignore file
96
+ await fs.rename('dot_gitignore', '.gitignore');
97
+
98
+ // Replace placeholders in template files
99
+ await replaceInFile(options);
100
+
101
+ // Zip the example project directory
102
+ const zip = new AdmZip();
111
103
  const examplePath = path.resolve(outputDir, 'projects/example');
112
104
  zip.addLocalFolder(examplePath);
113
105
  zip.writeZip(path.resolve(outputDir, 'projects/example.sb3'));
114
- fs.rmdirSync(examplePath, {recursive:true, force:true});
106
+
107
+ // Remove the original example directory
108
+ await fs.rm(examplePath, { recursive: true, force: true });
109
+
110
+ console.log(`Scaffolding project created at: ${outputDir}`);
111
+
115
112
  } catch (error) {
116
113
  console.error('Error occurred:', error);
114
+ process.exit(1);
117
115
  }
118
116
  }
119
117
 
118
+ // Execute the setup process
120
119
  fetchTemplate()
121
- .then(() => resetRepo());
120
+ .then(resetRepo)
121
+ .catch(error => {
122
+ console.error('Error during setup:', error);
123
+ process.exit(1);
124
+ });
125
+
package/package.json CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "xcratch-create",
3
- "version": "0.5.6",
3
+ "version": "1.1.0",
4
4
  "description": "Support tool to create new extension for Xcratch",
5
+ "type": "module",
5
6
  "bin": {
6
7
  "xcratch-create": "./bin/create.js"
7
8
  },
@@ -27,8 +28,8 @@
27
28
  },
28
29
  "homepage": "https://github.com/xcratch/xcratch-create#readme",
29
30
  "dependencies": {
30
- "adm-zip": "^0.5.5",
31
- "fs-extra": "^10.0.0",
32
- "replace-in-file": "^6.2.0"
31
+ "adm-zip": "^0.5.16",
32
+ "fs-extra": "^11.3.0",
33
+ "replace-in-file": "^8.3.0"
33
34
  }
34
35
  }
@@ -0,0 +1,4 @@
1
+ module.exports = {
2
+ require: ["@babel/register", "./test/setup-test.js"],
3
+ spec: "test/unit/**/*.test.js",
4
+ };
@@ -20,15 +20,24 @@ This extension can be used with other extension in [Xcratch](https://xcratch.git
20
20
  ```
21
21
  https://<<account>>.github.io/<<repo>>/dist/<<extensionID>>.mjs
22
22
  ```
23
+ 5. Click 'OK' button
24
+ 6. Now you can use the blocks of this extension
25
+
23
26
 
24
27
  ## Development
25
28
 
26
- ### Register on the local Xcratch
29
+ ### Install Dependencies
30
+
31
+ ```sh
32
+ npm install
33
+ ```
34
+
35
+ ### Setup Development Environment
27
36
 
28
- Run register script to install this extension on the local Xcratch for testing.
37
+ Change ```vmSrcOrg``` to your local ```scratch-vm``` directory in ```./scripts/setup-dev.js``` then run setup-dev script to setup development environment.
29
38
 
30
39
  ```sh
31
- npm run register
40
+ npm run setup-dev
32
41
  ```
33
42
 
34
43
  ### Bundle into a Module
@@ -39,6 +48,23 @@ Run build script to bundle this extension into a module file which could be load
39
48
  npm run build
40
49
  ```
41
50
 
51
+ ### Watch and Bundle
52
+
53
+ Run watch script to watch the changes of source files and bundle automatically.
54
+
55
+ ```sh
56
+ npm run watch
57
+ ```
58
+
59
+ ### Test
60
+
61
+ Run test script to test this extension.
62
+
63
+ ```sh
64
+ npm run test
65
+ ```
66
+
67
+
42
68
  ## 🏠 Home Page
43
69
 
44
70
  Open this page from [https://<<account>>.github.io/<<repo>>/](https://<<account>>.github.io/<<repo>>/)
@@ -0,0 +1,18 @@
1
+ {
2
+ "presets": [
3
+ [
4
+ "@babel/preset-env",
5
+ {
6
+ "targets": {
7
+ "node": true
8
+ },
9
+ "useBuiltIns": "entry",
10
+ "corejs": {
11
+ "version": "3",
12
+ "proposals": true
13
+ }
14
+ }
15
+ ],
16
+ "@babel/preset-react"
17
+ ]
18
+ }
@@ -2,3 +2,4 @@ node_modules/
2
2
 
3
3
  src/vm/*
4
4
  !src/vm/extensions/
5
+ !src/vm/.*
@@ -1,12 +1,36 @@
1
1
  {
2
2
  "name": "<<repo>>",
3
3
  "version": "0.0.0",
4
+ "description": "extension for Xcratch",
4
5
  "scripts": {
5
- "register": "npx xcratch-register --id=<<extensionID>> --gui=../scratch-gui --block=./src/vm/extensions/block --entry=./src/gui/lib/libraries/extensions/entry --core --link --use=extension-support util",
6
- "build": "npx xcratch-build --module=<<extensionID>> --gui=../scratch-gui --block=./src/vm/extensions/block --entry=./src/gui/lib/libraries/extensions/entry"
6
+ "setup-dev": "node ./scripts/setup-dev.mjs",
7
+ "build": "rollup -c ./scripts/rollup.config.mjs",
8
+ "watch": "rollup -c ./scripts/rollup.config.mjs --watch",
9
+ "test": "mocha"
7
10
  },
8
11
  "devDependencies": {
9
- "xcratch-build": "^0.4.0",
10
- "xcratch-register": "^0.4.2"
12
+ "@babel/core": "^7.26.9",
13
+ "@babel/eslint-parser": "^7.26.8",
14
+ "@babel/plugin-transform-react-jsx": "^7.25.9",
15
+ "@babel/plugin-transform-runtime": "^7.26.9",
16
+ "@babel/preset-env": "^7.26.9",
17
+ "@babel/preset-react": "^7.26.3",
18
+ "@babel/register": "^7.25.9",
19
+ "@rollup/plugin-babel": "^6.0.4",
20
+ "@rollup/plugin-commonjs": "^28.0.2",
21
+ "@rollup/plugin-image": "^3.0.3",
22
+ "@rollup/plugin-json": "^6.1.0",
23
+ "@rollup/plugin-multi-entry": "^6.0.1",
24
+ "@rollup/plugin-node-resolve": "^16.0.0",
25
+ "chai": "^5.2.0",
26
+ "core-js": "^3.40.0",
27
+ "eslint": "^8.57.0",
28
+ "eslint-config-scratch": "^9.0.9",
29
+ "eslint-plugin-import": "^2.31.0",
30
+ "eslint-plugin-mocha": "^10.5.0",
31
+ "fs-extra": "^11.3.0",
32
+ "mocha": "^11.1.0",
33
+ "rollup": "^4.34.7",
34
+ "rollup-plugin-polyfill-node": "^0.13.0"
11
35
  }
12
- }
36
+ }
@@ -0,0 +1,252 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <svg
3
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
4
+ xmlns:cc="http://creativecommons.org/ns#"
5
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
6
+ xmlns:svg="http://www.w3.org/2000/svg"
7
+ xmlns="http://www.w3.org/2000/svg"
8
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
9
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
10
+ version="1.1"
11
+ width="131.71837"
12
+ height="49.999924"
13
+ viewBox="0 0 131.71837 49.999925"
14
+ id="svg895"
15
+ sodipodi:docname="cat-top-2-a.svg"
16
+ inkscape:version="1.0 (4035a4f, 2020-05-01)">
17
+ <metadata
18
+ id="metadata901">
19
+ <rdf:RDF>
20
+ <cc:Work
21
+ rdf:about="">
22
+ <dc:format>image/svg+xml</dc:format>
23
+ <dc:type
24
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
25
+ <dc:title></dc:title>
26
+ </cc:Work>
27
+ </rdf:RDF>
28
+ </metadata>
29
+ <defs
30
+ id="defs899" />
31
+ <sodipodi:namedview
32
+ fit-margin-bottom="0"
33
+ fit-margin-right="0"
34
+ fit-margin-left="0"
35
+ fit-margin-top="0"
36
+ inkscape:document-rotation="0"
37
+ pagecolor="#ffffff"
38
+ bordercolor="#666666"
39
+ borderopacity="1"
40
+ objecttolerance="10"
41
+ gridtolerance="10"
42
+ guidetolerance="10"
43
+ inkscape:pageopacity="0"
44
+ inkscape:pageshadow="2"
45
+ inkscape:window-width="1730"
46
+ inkscape:window-height="909"
47
+ id="namedview897"
48
+ showgrid="false"
49
+ inkscape:zoom="4.1340901"
50
+ inkscape:cx="71.579569"
51
+ inkscape:cy="50.556923"
52
+ inkscape:window-x="0"
53
+ inkscape:window-y="25"
54
+ inkscape:window-maximized="0"
55
+ inkscape:current-layer="g891" />
56
+ <g
57
+ transform="translate(-167.40244,-152.39549)"
58
+ id="g893">
59
+ <g
60
+ data-paper-data="{&quot;isPaintingLayer&quot;:true}"
61
+ stroke-linecap="round"
62
+ stroke-linejoin="round"
63
+ stroke-miterlimit="1.5"
64
+ stroke-dasharray="none"
65
+ stroke-dashoffset="0"
66
+ style="mix-blend-mode:normal"
67
+ id="g891">
68
+ <path
69
+ d="m 240.55387,197.27305 c -2.18151,-0.55337 -2.13923,0.42792 -3.6105,1.2197 -2.40982,1.29213 -5.68208,1.608 -8.34559,1.3174 -5.99492,-0.65702 -10.45943,-2.64238 -12.54796,-8.22361 -3.06172,-8.19579 7.48314,-17.83954 15.46512,-14.93773 8.13418,2.95402 2.99324,5.62586 17.43523,12.41835 2.78186,1.30732 8.92053,3.49566 10.4087,6.97612 0.97239,2.26416 -0.76099,5.24518 -3.5513,4.95371 -2.12233,-0.22069 -2.88333,-0.33694 -4.95491,-0.8558 -3.45832,-0.86674 -6.84051,-1.99208 -10.29879,-2.86812 z"
70
+ fill="#faa51d"
71
+ fill-rule="evenodd"
72
+ stroke="#c48800"
73
+ stroke-width="2.45913"
74
+ id="path833" />
75
+ <path
76
+ d="m 244.66183,154.82932 c 2.07157,-0.51889 2.83258,-0.63511 4.95492,-0.85582 2.7903,-0.29143 4.52368,2.68955 3.55129,4.95372 -1.48818,3.48046 -7.62686,5.66885 -10.4087,6.97612 -14.44197,6.79249 -9.30106,9.46433 -17.43523,12.41836 -7.98199,2.90182 -18.52682,-6.74193 -15.46508,-14.93773 2.08848,-5.58124 6.553,-7.5666 12.54797,-8.22362 2.66345,-0.2906 5.93574,0.0251 8.34553,1.3174 1.47125,0.7918 1.42898,1.77308 3.61052,1.21967 3.45827,-0.87599 6.84048,-2.00137 10.29879,-2.86809 z"
77
+ fill="#faa51d"
78
+ fill-rule="evenodd"
79
+ stroke="#c48800"
80
+ stroke-width="2.45913"
81
+ id="path835" />
82
+ <path
83
+ d="m 262.72581,183.84987 c 0.92165,0.74881 2.44365,2.79314 3.47523,3.36674 1.2345,0.67978 5.55526,0.84991 6.83202,1.10513 5.20857,1.03777 7.31398,1.81439 11.9476,4.40201 2.51973,1.40752 4.67589,4.06673 2.7142,6.60044 -0.54959,0.70332 -1.52197,1.81266 -3.97406,0.9122 -3.8726,-1.42689 -5.25084,-2.80575 -9.26722,-3.89404 -3.3991,-0.92066 -7.16179,1.50776 -10.30723,1.99882 -5.28469,0.82297 -10.73004,-2.16558 -13.67251,-6.42354 -1.84332,-2.66847 -1.33599,-6.9222 1.14992,-9.03728 4.09245,-3.4948 7.66914,-1.82951 11.10205,0.96951 z"
84
+ fill="#faa51d"
85
+ fill-rule="evenodd"
86
+ stroke="#c48800"
87
+ stroke-width="2.45913"
88
+ id="path837" />
89
+ <path
90
+ d="m 257.81459,171.37995 c -2.48591,-2.11508 -2.99324,-6.3688 -1.14996,-9.0373 2.94253,-4.25792 8.38788,-7.24649 13.67255,-6.42355 3.14545,0.49109 6.90812,2.91949 10.30721,1.99885 4.01637,-1.08829 5.39464,-2.46716 9.26724,-3.89404 2.45211,-0.90045 3.42449,0.2089 3.97409,0.91222 1.96166,2.5337 -0.19449,5.19293 -2.71421,6.60045 -4.6336,2.5876 -6.73903,3.36423 -11.94761,4.40196 -1.27677,0.25522 -5.59752,0.42539 -6.83203,1.10514 -1.03159,0.5736 -2.55357,2.61792 -3.4752,3.36675 -3.43293,2.79905 -7.00962,4.46431 -11.10208,0.96952 z"
91
+ fill="#faa51d"
92
+ fill-rule="evenodd"
93
+ stroke="#c48800"
94
+ stroke-width="2.45913"
95
+ id="path839" />
96
+ <path
97
+ d="m 270.95478,169.87237 c 1.91939,4.15432 1.4882,9.47444 0.40586,12.22544 -1.73336,4.38938 -9.41097,7.27516 -13.52032,9.19145 -4.27004,1.99546 -10.18886,5.8053 -17.08851,5.41699 -8.15113,-0.45823 -14.56883,-3.53187 -18.54292,-6.45388 -4.08402,-3.00795 -9.67309,-4.19983 -9.69847,-12.83195 -0.008,-7.43939 4.86193,-9.33546 9.14884,-12.10754 5.38617,-3.48807 9.95214,-6.1363 17.39296,-6.44631 8.47241,-0.35208 15.35518,2.96751 20.39468,4.73218 3.33143,1.16659 9.68148,2.3307 11.50787,6.27363 z"
98
+ fill="#faa51d"
99
+ fill-rule="evenodd"
100
+ stroke="#c48800"
101
+ stroke-width="2.50587"
102
+ id="path841" />
103
+ <g
104
+ style="stroke-width:1.10793"
105
+ transform="matrix(0.90430677,0,0,0.9008562,16.136991,15.23707)"
106
+ data-paper-data="{&quot;index&quot;:null}"
107
+ fill-rule="evenodd"
108
+ id="g847">
109
+ <path
110
+ d="m 221.75393,187.02883 c -1.20618,-1.00421 -2.05706,-0.26274 -4.33852,0.48528 -2.80507,0.9182 -6.30113,2.86586 -10.00009,4.25811 -4.09915,1.54279 -8.0917,2.44602 -12.016,2.57038 -3.67184,0.11688 -12.56393,-1.10333 -18.75286,-4.47129 -1.40347,-0.76392 -4.50495,-2.61433 -6.07673,-4.25156 -1.85883,-1.93457 -1.98131,-2.88642 -1.92802,-3.93552 0.0795,-1.57458 0.85462,-3.25108 2.22723,-4.17488 1.71764,-1.15662 4.70129,-0.29641 7.84859,1.86537 2.68446,1.84293 5.96734,4.07016 10.52558,4.76115 9.05571,1.37261 15.37835,-2.30858 18.05252,-3.54001 3.51663,-1.6204 6.11786,-2.89671 8.96034,-4.36376 1.43994,-0.74802 3.61854,-2.1702 4.40396,-4.1057"
111
+ fill="#faa51d"
112
+ stroke="#c48800"
113
+ stroke-width="2.72453"
114
+ id="path843" />
115
+ <path
116
+ d="m 182.42972,191.03319 c -3.69567,-1.11702 -11.43001,-4.10855 -12.53548,-8.56531 -0.70018,-2.82491 0.77982,-3.99028 2.69902,-4.33675 0.81136,-0.14659 2.25903,0.16627 4.26023,1.27171 2.78575,1.53856 4.15458,3.27667 7.73276,4.61501 3.28565,1.22903 -0.49675,-0.50377 -1.44058,3.47126 -0.83974,3.53577 2.7345,4.58697 -0.71595,3.54407 z"
117
+ fill="#ffffff"
118
+ stroke="none"
119
+ stroke-width="0.0918146"
120
+ id="path845" />
121
+ </g>
122
+ <g
123
+ style="stroke-width:1.10793"
124
+ transform="matrix(0.90430677,0,0,0.9008562,16.136991,15.23707)"
125
+ id="g889">
126
+ <g
127
+ style="stroke-width:1.10792"
128
+ fill-rule="nonzero"
129
+ id="g853">
130
+ <path
131
+ d="m 310.2053,180.06419 c 0.0252,2.58028 -0.90746,5.80582 -3.47205,7.76398 -1.71733,1.31052 -4.49561,6.089 -8.01269,9.78514 -3.08737,3.24428 -8.26115,4.3184 -13.47458,2.75871 -17.23127,-5.1545 -14.51751,-38.31385 -0.002,-41.58436 5.42337,-1.22187 10.11758,0.0822 13.47481,3.78771 2.79281,3.08285 6.32948,8.61594 8.01348,9.86927 2.43367,1.81152 3.4427,4.55644 3.4726,7.61954 z"
132
+ fill="#faa51d"
133
+ stroke="#c48800"
134
+ stroke-width="2.76937"
135
+ id="path849" />
136
+ <path
137
+ d="m 309.44912,180.03723 c 0.0357,3.71925 -1.06263,4.87105 -3.09665,7.02623 -1.54464,1.15248 -3.65423,4.20432 -7.52506,8.42795 -3.1928,-4.51859 7.16534,-10.24719 7.16538,-15.45403 3e-5,-5.20677 -11.24178,-11.15804 -7.10093,-15.40079 4.04089,3.90677 5.50685,7.02323 7.26833,8.79959 1.94244,1.89138 3.24786,2.35145 3.28893,6.60105 z"
138
+ fill="#ffffff"
139
+ stroke="none"
140
+ stroke-width="0.0762813"
141
+ id="path851"
142
+ sodipodi:nodetypes="cccsccc" />
143
+ </g>
144
+ <path
145
+ d="m 307.38042,182.93473 c -0.6068,0 -2.16895,-1.44664 -2.16627,-2.61517 0.003,-1.14437 1.55947,-2.63159 2.16627,-2.63159 0.60681,0 1.42453,0.17805 1.47457,2.63159 0.0429,2.15491 -0.86776,2.61517 -1.47457,2.61517 z"
146
+ fill="#5e4a42"
147
+ fill-rule="evenodd"
148
+ stroke="none"
149
+ stroke-width="0.0852113"
150
+ id="path855" />
151
+ <g
152
+ style="stroke-width:1.10793"
153
+ id="g861">
154
+ <path
155
+ d="m 285.05286,198.9878 c -1.14657,3.61479 -14.64556,9.19625 -16.19807,6.69821 -1.55251,-2.49804 4.18358,-20.57026 6.88302,-21.68645"
156
+ fill="#faa51d"
157
+ fill-rule="nonzero"
158
+ stroke="#c48800"
159
+ stroke-width="2.88894"
160
+ id="path857" />
161
+ <path
162
+ d="m 272.64002,202.17072 c 0.44161,-2.67022 2.02488,-9.27921 4.6256,-11.53911 2.34855,-2.04064 3.16025,3.53472 6.03196,7.94488 -2.16162,2.93019 -11.23842,7.11641 -10.65756,3.59422 z"
163
+ fill="#ffffff"
164
+ fill-rule="evenodd"
165
+ stroke="none"
166
+ stroke-width="0.155299"
167
+ id="path859" />
168
+ </g>
169
+ <g
170
+ style="stroke-width:1.10793"
171
+ id="g867">
172
+ <path
173
+ d="m 275.73781,176.00992 c -2.69944,-1.11619 -8.43553,-19.18841 -6.88302,-21.68645 1.55251,-2.49804 15.0515,3.08342 16.19807,6.69821"
174
+ fill="#faa51d"
175
+ fill-rule="nonzero"
176
+ stroke="#c48800"
177
+ stroke-width="2.88894"
178
+ id="path863" />
179
+ <path
180
+ d="m 283.29758,161.43279 c -2.87171,4.41017 -3.68341,9.98552 -6.03196,7.94488 -2.60072,-2.2599 -4.18399,-8.86889 -4.6256,-11.53911 -0.58086,-3.52219 8.49594,0.66403 10.65756,3.59423 z"
181
+ fill="#ffffff"
182
+ fill-rule="evenodd"
183
+ stroke="none"
184
+ stroke-width="0.155299"
185
+ id="path865" />
186
+ </g>
187
+ <path
188
+ d="m 312.24529,190.75061 c -1.36513,-0.80412 -3.20713,-2.53672 -4.30111,-4.02341"
189
+ fill="none"
190
+ fill-rule="evenodd"
191
+ stroke="#000000"
192
+ stroke-width="1.36743"
193
+ id="path869" />
194
+ <path
195
+ d="m 310.3328,193.53618 c -1.38383,-0.89389 -3.45024,-3.78498 -4.22631,-5.82146"
196
+ fill="none"
197
+ fill-rule="evenodd"
198
+ stroke="#000000"
199
+ stroke-width="1.36743"
200
+ id="path871" />
201
+ <path
202
+ d="m 307.94418,173.98929 c 1.09398,-1.48669 2.93598,-3.21929 4.30111,-4.02341"
203
+ fill="none"
204
+ fill-rule="evenodd"
205
+ stroke="#000000"
206
+ stroke-width="1.36743"
207
+ id="path873" />
208
+ <path
209
+ d="m 306.10649,173.00177 c 0.77607,-2.03648 2.84248,-4.92758 4.22631,-5.82147"
210
+ fill="none"
211
+ fill-rule="evenodd"
212
+ stroke="#000000"
213
+ stroke-width="1.36743"
214
+ id="path875" />
215
+ <g
216
+ style="stroke-width:1.10792"
217
+ fill-rule="evenodd"
218
+ id="g881">
219
+ <path
220
+ d="m 300.59193,190.34949 c -1.24973,1.60082 -3.35451,2.04626 -4.70117,0.99495 -1.34666,-1.05131 -1.42525,-3.20129 -0.17553,-4.80211 1.24973,-1.60082 3.35451,-2.04626 4.70118,-0.99495 1.34666,1.05131 1.42525,3.20129 0.17552,4.80211 z"
221
+ fill="#ffffff"
222
+ stroke="#faa51d"
223
+ stroke-width="0.222615"
224
+ id="path877" />
225
+ <path
226
+ d="m 300.32878,189.93995 c -0.98113,1.25677 -2.63357,1.60648 -3.69081,0.78111 -1.05725,-0.82537 -1.11894,-2.51328 -0.13781,-3.77005 0.98113,-1.25677 2.63357,-1.60648 3.69081,-0.78111 1.05725,0.82537 1.11894,2.51328 0.13781,3.77005 z"
227
+ fill="#000000"
228
+ stroke="none"
229
+ stroke-width="0.16968"
230
+ id="path879" />
231
+ </g>
232
+ <g
233
+ style="stroke-width:1.10792"
234
+ fill-rule="evenodd"
235
+ id="g887">
236
+ <path
237
+ d="m 300.4164,175.18194 c -1.34666,1.05131 -3.45145,0.60586 -4.70118,-0.99495 -1.24973,-1.60082 -1.17114,-3.7508 0.17553,-4.80211 1.34666,-1.05131 3.45145,-0.60586 4.70117,0.99495 1.24973,1.60082 1.17114,3.7508 -0.17552,4.80211 z"
238
+ fill="#ffffff"
239
+ stroke="#faa51d"
240
+ stroke-width="0.222615"
241
+ id="path883" />
242
+ <path
243
+ d="m 300.19097,174.55943 c -1.05725,0.82537 -2.70968,0.47565 -3.69081,-0.78111 -0.98113,-1.25677 -0.91944,-2.94467 0.1378,-3.77004 1.05725,-0.82537 2.70968,-0.47565 3.69081,0.78111 0.98113,1.25677 0.91944,2.94467 -0.13781,3.77004 z"
244
+ fill="#000000"
245
+ stroke="none"
246
+ stroke-width="0.16968"
247
+ id="path885" />
248
+ </g>
249
+ </g>
250
+ </g>
251
+ </g>
252
+ </svg>