-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
318 lines (295 loc) · 165 KB
/
index.html
File metadata and controls
318 lines (295 loc) · 165 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
<!DOCTYPE html>
<!-- Created with https://packager.turbowarp.org/ -->
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<!-- We only include this to explicitly loosen the CSP of various packager environments. It does not provide any security. -->
<meta http-equiv="Content-Security-Policy" content="default-src * 'self' 'unsafe-inline' 'unsafe-eval' data: blob:">
<title>Smash or Pass The Game</title>
<style>
body {
color: #ffffff;
font-family: sans-serif;
overflow: hidden;
margin: 0;
padding: 0;
}
:root, body.is-fullscreen {
background-color: #000000;
}
[hidden] {
display: none !important;
}
h1 {
font-weight: normal;
}
a {
color: inherit;
text-decoration: underline;
cursor: pointer;
}
#app, #loading, #error, #launch {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.screen {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
text-align: center;
cursor: default;
user-select: none;
-webkit-user-select: none;
background-color: #000000;
}
#launch {
background-color: rgba(0, 0, 0, 0.7);
cursor: pointer;
}
.green-flag {
width: 80px;
height: 80px;
padding: 16px;
border-radius: 100%;
background: rgba(255, 255, 255, 0.75);
border: 3px solid hsla(0, 100%, 100%, 1);
display: flex;
justify-content: center;
align-items: center;
box-sizing: border-box;
}
#loading {
}
.progress-bar-outer {
border: 1px solid currentColor;
height: 10px;
width: 200px;
max-width: 200px;
}
.progress-bar-inner {
height: 100%;
width: 0;
background-color: currentColor;
}
.loading-text, noscript {
font-weight: normal;
font-size: 36px;
margin: 0 0 16px;
}
.loading-image {
margin: 0 0 16px;
}
#error-message, #error-stack {
font-family: monospace;
max-width: 600px;
white-space: pre-wrap;
user-select: text;
-webkit-user-select: text;
}
#error-stack {
text-align: left;
max-height: 200px;
overflow: auto;
}
.control-button {
width: 2rem;
height: 2rem;
padding: 0.375rem;
margin-top: 0.5rem;
margin-bottom: 0.5rem;
user-select: none;
-webkit-user-select: none;
cursor: pointer;
border: 0;
border-radius: 4px;
}
.control-button:hover {
background: #ff4c4c26;
}
.control-button.active {
background: #ff4c4c59;
}
.fullscreen-button {
background: white !important;
}
.standalone-fullscreen-button {
position: absolute;
top: 0;
right: 0;
background-color: rgba(0, 0, 0, 0.5);
border-radius: 0 0 0 4px;
padding: 4px;
cursor: pointer;
}
.sc-canvas {
cursor: auto;
}
.sc-monitor-root[data-opcode^="data_"] .sc-monitor-value-color {
background-color: #ff8c1a;
}
.sc-monitor-row-value-outer {
background-color: #fc662c;
}
.sc-monitor-row-value-editing .sc-monitor-row-value-outer {
background-color: #e25b27;
}
</style>
<meta name="theme-color" content="#000000">
<link rel="icon" href="data:image/gif;base64,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">
</head>
<body>
<div id="app"></div>
<div id="launch" class="screen" hidden title="Click to start">
<div class="green-flag">
<svg viewBox="0 0 16.63 17.5" width="42" height="44">
<defs><style>.cls-1,.cls-2{fill:#4cbf56;stroke:#45993d;stroke-linecap:round;stroke-linejoin:round;}.cls-2{stroke-width:1.5px;}</style></defs>
<path class="cls-1" d="M.75,2A6.44,6.44,0,0,1,8.44,2h0a6.44,6.44,0,0,0,7.69,0V12.4a6.44,6.44,0,0,1-7.69,0h0a6.44,6.44,0,0,0-7.69,0"/>
<line class="cls-2" x1="0.75" y1="16.75" x2="0.75" y2="0.75"/>
</svg>
</div>
</div>
<div id="loading" class="screen">
<noscript>Enable JavaScript</noscript>
</div>
<div id="error" class="screen" hidden>
<h1>Error</h1>
<details>
<summary id="error-message"></summary>
<p id="error-stack"></p>
</details>
</div>
<script src="script.js"></script>
<script>
const appElement = document.getElementById('app');
const launchScreen = document.getElementById('launch');
const loadingScreen = document.getElementById('loading');
const loadingInner = document.getElementById('loading-inner');
const errorScreen = document.getElementById('error');
const errorScreenMessage = document.getElementById('error-message');
const errorScreenStack = document.getElementById('error-stack');
const handleError = (error) => {
console.error(error);
if (!errorScreen.hidden) return;
errorScreen.hidden = false;
errorScreenMessage.textContent = '' + error;
let debug = error && error.stack || 'no stack';
debug += '\nUser agent: ' + navigator.userAgent;
errorScreenStack.textContent = debug;
};
const setProgress = (progress) => {
if (loadingInner) loadingInner.style.width = progress * 100 + '%';
};
const interpolate = (a, b, t) => a + t * (b - a);
try {
setProgress(0.1);
const scaffolding = new Scaffolding.Scaffolding();
scaffolding.width = 854;
scaffolding.height = 480;
scaffolding.resizeMode = "preserve-ratio";
scaffolding.editableLists = false;
scaffolding.usePackagedRuntime = true;
scaffolding.setup();
scaffolding.appendTo(appElement);
const vm = scaffolding.vm;
window.scaffolding = scaffolding;
window.vm = scaffolding.vm;
window.Scratch = {
vm,
renderer: vm.renderer,
audioEngine: vm.runtime.audioEngine,
bitmapAdapter: vm.runtime.v2BitmapAdapter,
videoProvider: vm.runtime.ioDevices.video.provider
};
scaffolding.setUsername("player####".replace(/#/g, () => Math.floor(Math.random() * 10)));
scaffolding.setAccentColor("#ff4c4c");
scaffolding.addCloudProvider(new Scaffolding.Cloud.WebSocketProvider(["wss://clouddata.turbowarp.org","wss://clouddata.turbowarp.xyz"], "p4-@Smash-or-pass-v1-id1642"));
vm.setTurboMode(false);
if (vm.setInterpolation) vm.setInterpolation(true);
if (vm.setFramerate) vm.setFramerate(30);
if (vm.renderer.setUseHighQualityRender) vm.renderer.setUseHighQualityRender(true);
if (vm.setRuntimeOptions) vm.setRuntimeOptions({
fencing: false,
miscLimits: false,
maxClones: 300,
});
if (vm.setCompilerOptions) vm.setCompilerOptions({
enabled: true,
warpTimer: false
});
if (vm.renderer.setMaxTextureDimension) vm.renderer.setMaxTextureDimension(2048);
if (typeof ScaffoldingAddons !== 'undefined') {
ScaffoldingAddons.run(scaffolding, {"gamepad":false,"pointerlock":false,"specialCloudBehaviors":false,"unsafeCloudBehaviors":false,"pause":false});
}
scaffolding.setExtensionSecurityManager({
getSandboxMode: 'unsandboxed',
canLoadExtensionFromProject: (url) => {
handleError(new Error('Missing custom extension: ' + url));
return Promise.resolve(false);
}
});
for (const extension of ["data:text/javascript;,(function(Scratch)%20%7B%20(function%20(Scratch)%20%7B%0A%20%20'use%20strict'%3B%0A%0A%20%20if%20(!Scratch.extensions.unsandboxed)%20%7B%0A%20%20%20%20throw%20new%20Error('Local%20Storage%20must%20be%20run%20unsandboxed')%3B%0A%20%20%7D%0A%0A%20%20const%20PREFIX%20%3D%20'extensions.turbowarp.org%2Flocal-storage%3A'%3B%0A%20%20let%20namespace%20%3D%20''%3B%0A%20%20const%20getFullStorageKey%20%3D%20()%20%3D%3E%20%60%24%7BPREFIX%7D%24%7Bnamespace%7D%60%3B%0A%0A%20%20const%20validNamespace%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20const%20valid%20%3D%20!!namespace%3B%0A%20%20%20%20if%20(!valid)%20%7B%0A%20%20%20%20%20%20alert('Local%20Storage%20extension%3A%20project%20must%20run%20the%20%22set%20storage%20namespace%20ID%22%20block%20before%20it%20can%20use%20other%20blocks')%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20valid%3B%0A%20%20%7D%3B%0A%0A%20%20const%20readFromStorage%20%3D%20()%20%3D%3E%20%7B%0A%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%2F%2F%20localStorage%20could%20throw%20if%20unsupported%0A%20%20%20%20%20%20const%20data%20%3D%20localStorage.getItem(getFullStorageKey())%3B%0A%20%20%20%20%20%20if%20(data)%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20JSON.parse%20could%20throw%20if%20data%20is%20invalid%0A%20%20%20%20%20%20%20%20const%20parsed%20%3D%20JSON.parse(data)%3B%0A%20%20%20%20%20%20%20%20if%20(parsed%20%26%26%20parsed.data)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%2F%2F%20Remove%20invalid%20values%20from%20the%20JSON%0A%20%20%20%20%20%20%20%20%20%20const%20processed%20%3D%20%7B%7D%3B%0A%20%20%20%20%20%20%20%20%20%20for%20(const%20%5Bkey%2C%20value%5D%20of%20Object.entries(parsed.data))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(typeof%20value%20%3D%3D%3D%20'number'%20%7C%7C%20typeof%20value%20%3D%3D%3D%20'string'%20%7C%7C%20typeof%20value%20%3D%3D%3D%20'boolean')%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20processed%5Bkey%5D%20%3D%20value%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20return%20processed%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%20catch%20(error)%20%7B%0A%20%20%20%20%20%20console.error('error%20reading%20from%20local%20storage'%2C%20error)%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20%7B%7D%3B%0A%20%20%7D%3B%0A%0A%20%20const%20saveToLocalStorage%20%3D%20(data)%20%3D%3E%20%7B%0A%20%20%20%20try%20%7B%0A%20%20%20%20%20%20if%20(Object.keys(data).length%20%3E%200)%20%7B%0A%20%20%20%20%20%20%20%20localStorage.setItem(getFullStorageKey()%2C%20JSON.stringify(%7B%0A%20%20%20%20%20%20%20%20%20%20time%3A%20Math.round(Date.now()%20%2F%201000)%2C%0A%20%20%20%20%20%20%20%20%20%20data%0A%20%20%20%20%20%20%20%20%7D))%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20localStorage.removeItem(getFullStorageKey())%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%20catch%20(error)%20%7B%0A%20%20%20%20%20%20console.error('error%20saving%20to%20locacl%20storage'%2C%20error)%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%0A%20%20window.addEventListener('storage'%2C%20(event)%20%3D%3E%20%7B%0A%20%20%20%20if%20(namespace%20%26%26%20event.key%20%3D%3D%3D%20getFullStorageKey()%20%26%26%20event.storageArea%20%3D%3D%3D%20localStorage)%20%7B%0A%20%20%20%20%20%20Scratch.vm.runtime.startHats('localstorage_whenChanged')%3B%0A%20%20%20%20%7D%0A%20%20%7D)%3B%0A%0A%20%20class%20LocalStorage%20%7B%0A%20%20%20%20getInfo()%20%7B%0A%20%20%20%20%20%20return%20%7B%0A%20%20%20%20%20%20%20%20id%3A%20'localstorage'%2C%0A%20%20%20%20%20%20%20%20name%3A%20'Local%20Storage'%2C%0A%20%20%20%20%20%20%20%20docsURI%3A%20%22https%3A%2F%2Fextensions.turbowarp.org%2Flocal-storage.html%22%2C%0A%20%20%20%20%20%20%20%20blocks%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'setProjectId'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'set%20storage%20namespace%20ID%20to%20%5BID%5D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20ID%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20'project%20title'%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'get'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'get%20key%20%5BKEY%5D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20KEY%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20'score'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'set'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'set%20key%20%5BKEY%5D%20to%20%5BVALUE%5D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20KEY%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20'score'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20VALUE%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20'1000'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'remove'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'delete%20key%20%5BKEY%5D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20KEY%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20'score'%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'removeAll'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'delete%20all%20keys'%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'whenChanged'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.HAT%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'when%20another%20window%20changes%20storage'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20isEdgeActivated%3A%20false%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%7D%0A%20%20%20%20setProjectId(%7B%20ID%20%7D)%20%7B%0A%20%20%20%20%20%20namespace%20%3D%20Scratch.Cast.toString(ID)%3B%0A%20%20%20%20%7D%0A%20%20%20%20get(%7B%20KEY%20%7D)%20%7B%0A%20%20%20%20%20%20if%20(!validNamespace())%20%7B%0A%20%20%20%20%20%20%20%20return%20''%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20storage%20%3D%20readFromStorage()%3B%0A%20%20%20%20%20%20KEY%20%3D%20Scratch.Cast.toString(KEY)%3B%0A%20%20%20%20%20%20if%20(!Object.prototype.hasOwnProperty.call(storage%2C%20KEY))%20%7B%0A%20%20%20%20%20%20%20%20return%20''%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20storage%5BKEY%5D%3B%0A%20%20%20%20%7D%0A%20%20%20%20set(%7B%20KEY%2C%20VALUE%20%7D)%20%7B%0A%20%20%20%20%20%20if%20(!validNamespace())%20%7B%0A%20%20%20%20%20%20%20%20return%20''%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20storage%20%3D%20readFromStorage()%3B%0A%20%20%20%20%20%20storage%5BScratch.Cast.toString(KEY)%5D%20%3D%20VALUE%3B%0A%20%20%20%20%20%20saveToLocalStorage(storage)%3B%0A%20%20%20%20%7D%0A%20%20%20%20remove(%7B%20KEY%20%7D)%20%7B%0A%20%20%20%20%20%20if%20(!validNamespace())%20%7B%0A%20%20%20%20%20%20%20%20return%20''%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20const%20storage%20%3D%20readFromStorage()%3B%0A%20%20%20%20%20%20delete%20storage%5BScratch.Cast.toString(KEY)%5D%3B%0A%20%20%20%20%20%20saveToLocalStorage(storage)%3B%0A%20%20%20%20%7D%0A%20%20%20%20removeAll()%20%7B%0A%20%20%20%20%20%20if%20(!validNamespace())%20%7B%0A%20%20%20%20%20%20%20%20return%20''%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20saveToLocalStorage(%7B%7D)%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%20%20Scratch.extensions.register(new%20LocalStorage())%3B%0A%7D)(Scratch)%3B%0A%20%7D)(Scratch)%3B","data:text/javascript;,(function(Scratch)%20%7B%20(function%20(Scratch)%20%7B%0A%20%20'use%20strict'%3B%0A%20%20console.log(%22ShovelUtils%20v1.3%22)%3B%0A%20%20const%20vm%20%3D%20Scratch.vm%3B%0A%0A%20%20%2F%2F%20Based%20on%20from%20https%3A%2F%2Fwww.growingwiththeweb.com%2F2017%2F12%2Ffast-simple-js-fps-counter.html%0A%20%20const%20times%20%3D%20%5B%5D%3B%0A%20%20let%20fps%20%3D%20vm.runtime.frameLoop.framerate%3B%0A%20%20const%20oldStep%20%3D%20vm.runtime._step%3B%0A%20%20vm.runtime._step%20%3D%20function%20()%20%7B%0A%20%20%20%20oldStep.call(this)%3B%0A%20%20%20%20const%20now%20%3D%20performance.now()%3B%0A%20%20%20%20while%20(times.length%20%3E%200%20%26%26%20times%5B0%5D%20%3C%3D%20now%20-%201000)%20%7B%0A%20%20%20%20%20%20times.shift()%3B%0A%20%20%20%20%7D%0A%20%20%20%20times.push(now)%3B%0A%20%20%20%20fps%20%3D%20times.length%3B%0A%20%20%7D%3B%0A%0A%20%20class%20ShovelUtils%20%7B%0A%20%20%20%20getInfo()%20%7B%0A%20%20%20%20%20%20return%20%7B%0A%20%20%20%20%20%20%20%20id%3A%20'ShovelUtils'%2C%0A%20%20%20%20%20%20%20%20name%3A%20'ShovelUtils'%2C%0A%20%20%20%20%20%20%20%20color1%3A%20'%23f54242'%2C%0A%20%20%20%20%20%20%20%20color2%3A%20'%23f54242'%2C%0A%20%20%20%20%20%20%20%20color3%3A%20'%23f54242'%2C%0A%20%20%20%20%20%20%20%20blocks%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'importImage'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'Import%20image%20from%20%5BTEXT%5D%20name%20%5BNAME%5D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20TEXT%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20'https%3A%2F%2Fextensions.turbowarp.org%2Fdango.png'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20NAME%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20'Dango'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'getlist'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'Get%20list%20%5BTEXT%5D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20TEXT%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20'MyList'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'setlist'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'Set%20list%20%5BNAME%5D%20to%20%5BTEXT%5D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20TEXT%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20'%5B1%2C2%5D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20NAME%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20'MyList'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'importSprite'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'Import%20sprite%20from%20%5BTEXT%5D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20TEXT%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20'Link%20or%20data%20uri%20here'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'importSound'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'Import%20sound%20from%20%5BTEXT%5D%20name%20%5BNAME%5D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20TEXT%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20'https%3A%2F%2Fextensions.turbowarp.org%2Fmeow.mp3'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20NAME%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20'Meow'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'importProject'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'Import%20project%20from%20%5BTEXT%5D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20TEXT%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20'https%3A%2F%2Ftheshovel.github.io%2FBullet-Hell%2FBullet%2520Hell'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'loadExtension'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'Load%20extension%20from%20%5BTEXT%5D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20TEXT%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20'https%3A%2F%2Fextensions.turbowarp.org%2Futilities.js'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'restartProject'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'Restart%20project'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20TEXT%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20'0'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'deleteSprite'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'Delete%20sprite%20%5BSPRITE%5D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20SPRITE%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20'Sprite1'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'setedtarget'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'Set%20editing%20target%20to%20%5BNAME%5D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20NAME%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20'Sprite1'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'brightnessByColor'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'Get%20brightness%20of%20%5Bcolor%5D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20color%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20'%23ffffff'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'getfps'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'Fps'%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20importImage(%7B%20TEXT%2C%20NAME%20%7D)%20%7B%0A%20%20%20%20%20%20Scratch.fetch(TEXT)%0A%20%20%20%20%20%20%20%20.then((r)%20%3D%3E%20r.arrayBuffer())%0A%20%20%20%20%20%20%20%20.then((arrayBuffer)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20const%20storage%20%3D%20vm.runtime.storage%3B%0A%20%20%20%20%20%20%20%20%20%20vm.addCostume(NAME%20%2B%20'.PNG'%2C%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20name%3A%20NAME%20%2B%20''%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20asset%3A%20new%20storage.Asset(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20storage.AssetType.ImageBitmap%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20null%2C%20%2F%2F%20asset%20id%2C%20doesn't%20need%20to%20be%20set%20here%20because%20of%20%60true%60%20at%20the%20end%20will%20make%20Scratch%20generate%20it%20for%20you%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20storage.DataFormat.PNG%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20new%20Uint8Array(arrayBuffer)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20true%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20importSprite(%7B%20TEXT%20%7D)%20%7B%0A%20%20%20%20%20%20Scratch.fetch(TEXT)%0A%20%20%20%20%20%20%20%20.then(r%20%3D%3E%20r.arrayBuffer())%0A%20%20%20%20%20%20%20%20.then(buffer%20%3D%3E%20vm.addSprite(buffer))%0A%20%20%20%20%20%20%20%20.then(()%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20console.log(%22Done%22)%3B%0A%20%20%20%20%20%20%20%20%7D)%0A%20%20%20%20%20%20%20%20.catch((error)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20console.log(%22Error%22%2C%20error)%3B%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20deleteSprite(%7B%20SPRITE%20%7D)%20%7B%0A%20%20%20%20%20%20const%20target%20%3D%20vm.runtime.getSpriteTargetByName(SPRITE)%3B%0A%20%20%20%20%20%20if%20(!target%20%7C%7C%20target.isStage)%20%7B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%2F%2F%20%40ts-expect-error%0A%20%20%20%20%20%20if%20(typeof%20ScratchBlocks%20!%3D%3D%20'undefined')%20%7B%0A%20%20%20%20%20%20%20%20if%20(!confirm(%60Do%20you%20want%20to%20delete%20the%20sprite%20%22%24%7BSPRITE%7D%22%3F%20This%20cannot%20be%20undone.%60))%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20vm.deleteSprite(target.id)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20importSound(%7B%20TEXT%2C%20NAME%20%7D)%20%7B%0A%20%20%20%20%20%20Scratch.fetch(TEXT)%0A%20%20%20%20%20%20%20%20.then((r)%20%3D%3E%20r.arrayBuffer())%0A%20%20%20%20%20%20%20%20.then((arrayBuffer)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20const%20storage%20%3D%20vm.runtime.storage%3B%0A%20%20%20%20%20%20%20%20%20%20const%20asset%20%3D%20new%20storage.Asset(%0A%20%20%20%20%20%20%20%20%20%20%20%20storage.AssetType.Sound%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20null%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20storage.DataFormat.MP3%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20new%20Uint8Array(arrayBuffer)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20true%0A%20%20%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%20%20%20%20vm.addSound(%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20md5%3A%20asset.assetId%20%2B%20'.'%20%2B%20asset.dataFormat%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20asset%3A%20asset%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20name%3A%20NAME%20%2B%20''%0A%20%20%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20importProject(%7B%20TEXT%20%7D)%20%7B%0A%20%20%20%20%20%20%2F%2F%20%40ts-ignore%0A%20%20%20%20%20%20if%20(typeof%20ScratchBlocks%20!%3D%3D%20'undefined')%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20We%20are%20in%20the%20editor.%20Ask%20before%20loading%20a%20new%20project%20to%20avoid%20unrecoverable%20data%20loss.%0A%20%20%20%20%20%20%20%20if%20(!confirm(%60Do%20you%20want%20to%20import%20a%20project%20from%20%22%24%7BTEXT%7D%22%3F%20Everything%20in%20the%20current%20project%20will%20be%20permanently%20deleted.%60))%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20Scratch.fetch(TEXT)%0A%20%20%20%20%20%20%20%20.then(r%20%3D%3E%20r.arrayBuffer())%0A%20%20%20%20%20%20%20%20.then(buffer%20%3D%3E%20vm.loadProject(buffer))%0A%20%20%20%20%20%20%20%20.then(()%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20console.log(%22Done%22)%3B%0A%20%20%20%20%20%20%20%20%20%20vm.greenFlag()%3B%0A%20%20%20%20%20%20%20%20%7D)%0A%20%20%20%20%20%20%20%20.catch((error)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20console.log(%22Error%22%2C%20error)%3B%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20restartProject()%20%7B%0A%20%20%20%20%20%20vm.greenFlag()%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20async%20loadExtension(%7B%20TEXT%20%7D)%20%7B%0A%20%20%20%20%20%20if%20(await%20vm.securityManager.canLoadExtensionFromProject(TEXT))%20%7B%0A%20%20%20%20%20%20%20%20vm.extensionManager.loadExtensionURL(TEXT)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20getlist(%7B%20TEXT%20%7D)%20%7B%0A%20%20%20%20%20%20const%20list%20%3D%20vm.runtime.getTargetForStage().lookupVariableByNameAndType(TEXT%2C%20'list')%3B%0A%20%20%20%20%20%20if%20(list)%20%7B%0A%20%20%20%20%20%20%20%20return%20JSON.stringify(list.value)%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20return%20%22%22%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20setlist(%7B%20TEXT%2C%20NAME%20%7D)%20%7B%0A%20%20%20%20%20%20let%20parsed%3B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20parsed%20%3D%20JSON.parse(TEXT)%3B%0A%20%20%20%20%20%20%7D%20catch%20(e)%20%7B%0A%20%20%20%20%20%20%20%20return%3B%20%2F%2F%20JSON%20was%20invalid%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20if%20(!Array.isArray(parsed))%20%7B%0A%20%20%20%20%20%20%20%20return%3B%20%2F%2F%20it's%20not%20an%20array%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20for%20(const%20element%20of%20parsed)%20%7B%0A%20%20%20%20%20%20%20%20const%20type%20%3D%20typeof%20element%3B%0A%20%20%20%20%20%20%20%20if%20(type%20!%3D%3D%20%22string%22%20%26%26%20type%20!%3D%3D%20%22number%22%20%26%26%20type%20!%3D%3D%20%22boolean%22)%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%3B%20%2F%2F%20One%20of%20the%20elements%20has%20a%20disallowed%20type%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20const%20list%20%3D%20vm.runtime.getTargetForStage().lookupVariableByNameAndType(NAME%2C%20'list')%3B%0A%20%20%20%20%20%20if%20(!list)%20%7B%0A%20%20%20%20%20%20%20%20return%3B%20%2F%2F%20List%20was%20not%20found%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20list.value%20%3D%20parsed%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setedtarget(%7B%20NAME%20%7D)%20%7B%0A%20%20%20%20%20%20let%20target%3B%0A%0A%20%20%20%20%20%20%2F%2FI%20know%20this%20might%20cause%20sprites%20called%20%22stage%22%20to%20be%20ignored.%20But%20lets%20be%20real%2C%20who%20names%20their%20sprite%20%22stage%22%3F%0A%20%20%20%20%20%20if%20(NAME.toLowerCase()%20%3D%3D%3D%20%22stage%22)%20%7B%0A%20%20%20%20%20%20%20%20target%20%3D%20vm.runtime.getTargetForStage()%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20target%20%3D%20vm.runtime.getSpriteTargetByName(NAME)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20if%20(target)%20%7B%0A%20%20%20%20%20%20%20%20vm.setEditingTarget(target.id)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F**%0A%20%20%20%20%20*%20Calculate%20brightness%20value%20by%20RGB%20or%20HEX%20color.%0A%20%20%20%20%20*%20%40param%20color%20(String)%20The%20color%20value%20in%20RGB%20or%20HEX%20(for%20example%3A%20%23000000%20%7C%7C%20%23000%20%7C%7C%20rgb(0%2C0%2C0)%20%7C%7C%20rgba(0%2C0%2C0%2C0))%0A%20%20%20%20%20*%20%40returns%20(Number)%20The%20brightness%20value%20(dark)%200%20...%20255%20(light)%0A%20%20%20%20%20*%2F%0A%20%20%20%20brightnessByColor(%7B%20color%20%7D)%20%7B%0A%20%20%20%20%20%20%2F%2F%20https%3A%2F%2Fwww.w3.org%2FTR%2FAERT%2F%23color-contrast%0A%20%20%20%20%20%20const%20%7Br%2C%20g%2C%20b%7D%20%3D%20Scratch.Cast.toRgbColorObject(color)%3B%0A%20%20%20%20%20%20return%20((r%20*%20299)%20%2B%20(g%20*%20587)%20%2B%20(b%20*%20114))%20%2F%201000%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20getfps()%7B%0A%20%20%20%20%20%20return%20fps%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20Scratch.extensions.register(new%20ShovelUtils())%3B%0A%2F%2F%20%40ts-ignore%0A%7D)(Scratch)%3B%0A%20%7D)(Scratch)%3B","data:text/javascript;,(function(Scratch)%20%7B%20(function%20(Scratch)%20%7B%0A%20%20'use%20strict'%3B%0A%0A%20%20if%20(!Scratch.extensions.unsandboxed)%20%7B%0A%20%20%20%20throw%20new%20Error('Runtime%20Options%20extension%20needs%20to%20be%20run%20unsandboxed')%3B%0A%20%20%7D%0A%0A%20%20const%20greenFlagURI%20%3D%20'data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAMAAADXqc3KAAABFFBMVEUAAACAgABVqlVJkklAn0BNmTNLljxGlzpDmzdFmjpGmzxHmz9Fmj1FmT5Emj1GmT1GmD1EmDxGmTxEmT1GmjxGmT1FmDxEmT5EmTxGmT5FmD1GmT5FmT1Gmj1EmT5FmT1FmT1FmDxGmT1FmjxLs09LtE9Jr0xJsk1Js05JtVBKtU5KtVBKtlBJrkpJsE1KtlFIrEpIsExLt1FLuFJKuVNIqkhLulNIp0VJqkhKtlJLvVRMvFNFmT5GpUVFmT1HpEVHokNMvlVFmT1Ho0NFmTxLvlVGoUFMvlVLvlVGn0BFmT1Nv1ZEmz5FmTxFmTxFmT1NvlZFmz9FmT5FnT9FnD5GnT9Mv1ZMv1ZMv1ZFmT1Mv1b%2F%2F%2F%2F70P2GAAAAWXRSTlMAAgMHCAoRFhcwMz0%2FRkdQVGFmaWpxcnh7gIGEhZKZo6eprLq%2Fv8DAwMDAwMDBwcHCwsPDxcbIysrLzM3Pz9DQ1NTV1dfZ29vg4uXm5%2Bjp6ens7fDx9Pv8%2FnPb5aAAAAABYktHRFt0vJU0AAAAsUlEQVQoz2NgwA3YhNiwS4hHykoou9goCrKiSUhGhqhZe7gbm3rxQwQ4BJihEupRYODooMDFyMAu6uMsgyoRFW5kHxjkqeuhL4cmAQM4JXRwSWjjktDEJaGFS0IVIeFtZuIaAZdQgUmY2%2FoqyTu5WcEkNGAS%2FkJMQJrbySAAJBxmGSoIlYAoYGCR8rPVM7QItuNlQJVgYGDlE5MU5kSErhz2%2BKCihEikNHYJJh5mBhIAADBcR%2Fr5OJzCAAAAAElFTkSuQmCC'%3B%0A%20%20const%20TURBO_MODE%20%3D%20'turbo%20mode'%3B%0A%20%20const%20INTERPOLATION%20%3D%20'interpolation'%3B%0A%20%20const%20REMOVE_FENCING%20%3D%20'remove%20fencing'%3B%0A%20%20const%20REMOVE_MISC_LIMITS%20%3D%20'remove%20misc%20limits'%3B%0A%20%20const%20HIGH_QUALITY_PEN%20%3D%20'high%20quality%20pen'%3B%0A%0A%20%20class%20RuntimeOptions%20%7B%0A%20%20%20%20getInfo%20()%20%7B%0A%20%20%20%20%20%20return%20%7B%0A%20%20%20%20%20%20%20%20id%3A%20'runtimeoptions'%2C%0A%20%20%20%20%20%20%20%20name%3A%20'Runtime%20Options'%2C%0A%20%20%20%20%20%20%20%20color1%3A%20'%238c9abf'%2C%0A%20%20%20%20%20%20%20%20color2%3A%20'%237d8aab'%2C%0A%20%20%20%20%20%20%20%20color3%3A%20'%236f7b99'%2C%0A%20%20%20%20%20%20%20%20blocks%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'getEnabled'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'is%20%5Bthing%5D%20enabled%3F'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.BOOLEAN%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20thing%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20TURBO_MODE%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20'thing'%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'setEnabled'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'set%20%5Bthing%5D%20to%20%5Benabled%5D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20thing%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20TURBO_MODE%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20'thing'%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20enabled%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20'true'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20'enabled'%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%0A%20%20%20%20%20%20%20%20%20%20'---'%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'getFramerate'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'get%20framerate%20limit'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'setFramerate'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'set%20framerate%20limit%20to%20%5Bfps%5D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20fps%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20'30'%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%0A%20%20%20%20%20%20%20%20%20%20'---'%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'getCloneLimit'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'get%20clone%20limit'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'setCloneLimit'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'set%20clone%20limit%20%5Blimit%5D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20limit%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20'300'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20'clones'%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%0A%20%20%20%20%20%20%20%20%20%20'---'%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'getDimension'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'get%20stage%20%5Bdimension%5D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20dimension%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20'width'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20'dimension'%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'setDimensions'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'set%20stage%20size%20width%3A%20%5Bwidth%5D%20height%3A%20%5Bheight%5D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20width%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20'480'%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20height%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20'360'%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%0A%20%20%20%20%20%20%20%20%20%20'---'%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'setUsername'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'set%20username%20to%20%5Busername%5D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20username%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20''%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'greenFlag'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'run%20green%20flag%20%5Bflag%5D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20flag%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.IMAGE%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20dataURI%3A%20greenFlagURI%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20menus%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20thing%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20acceptReporters%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20items%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'turbo%20mode'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20TURBO_MODE%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'interpolation'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20INTERPOLATION%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'remove%20fencing'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20REMOVE_FENCING%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'remove%20misc%20limits'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20REMOVE_MISC_LIMITS%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'high%20quality%20pen'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20HIGH_QUALITY_PEN%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%0A%20%20%20%20%20%20%20%20%20%20enabled%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20acceptReporters%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20items%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'enabled'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20'true'%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'disabled'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20'false'%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%0A%20%20%20%20%20%20%20%20%20%20clones%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20acceptReporters%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20items%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'default%20(300)'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20'300'%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'Infinity'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20'Infinity'%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%0A%20%20%20%20%20%20%20%20%20%20dimension%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20acceptReporters%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20items%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'width'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20'width'%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'height'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20'height'%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20getEnabled%20(%7B%20thing%20%7D)%20%7B%0A%20%20%20%20%20%20if%20(thing%20%3D%3D%3D%20TURBO_MODE)%20%7B%0A%20%20%20%20%20%20%20%20return%20Scratch.vm.runtime.turboMode%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(thing%20%3D%3D%3D%20INTERPOLATION)%20%7B%0A%20%20%20%20%20%20%20%20return%20Scratch.vm.runtime.interpolationEnabled%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(thing%20%3D%3D%3D%20REMOVE_FENCING)%20%7B%0A%20%20%20%20%20%20%20%20return%20!Scratch.vm.runtime.runtimeOptions.fencing%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(thing%20%3D%3D%3D%20REMOVE_MISC_LIMITS)%20%7B%0A%20%20%20%20%20%20%20%20return%20!Scratch.vm.runtime.runtimeOptions.miscLimits%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(thing%20%3D%3D%3D%20HIGH_QUALITY_PEN)%20%7B%0A%20%20%20%20%20%20%20%20return%20Scratch.renderer.useHighQualityRender%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setEnabled%20(%7B%20thing%2C%20enabled%20%7D)%20%7B%0A%20%20%20%20%20%20enabled%20%3D%20Scratch.Cast.toBoolean(enabled)%3B%0A%0A%20%20%20%20%20%20if%20(thing%20%3D%3D%3D%20TURBO_MODE)%20%7B%0A%20%20%20%20%20%20%20%20Scratch.vm.setTurboMode(enabled)%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(thing%20%3D%3D%3D%20INTERPOLATION)%20%7B%0A%20%20%20%20%20%20%20%20Scratch.vm.setInterpolation(enabled)%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(thing%20%3D%3D%3D%20REMOVE_FENCING)%20%7B%0A%20%20%20%20%20%20%20%20Scratch.vm.setRuntimeOptions(%7B%0A%20%20%20%20%20%20%20%20%20%20fencing%3A%20!enabled%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(thing%20%3D%3D%3D%20REMOVE_MISC_LIMITS)%20%7B%0A%20%20%20%20%20%20%20%20Scratch.vm.setRuntimeOptions(%7B%0A%20%20%20%20%20%20%20%20%20%20miscLimits%3A%20!enabled%0A%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(thing%20%3D%3D%3D%20HIGH_QUALITY_PEN)%20%7B%0A%20%20%20%20%20%20%20%20Scratch.renderer.setUseHighQualityRender(enabled)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20getFramerate%20()%20%7B%0A%20%20%20%20%20%20return%20Scratch.vm.runtime.frameLoop.framerate%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setFramerate%20(%7B%20fps%20%7D)%20%7B%0A%20%20%20%20%20%20fps%20%3D%20Scratch.Cast.toNumber(fps)%3B%0A%20%20%20%20%20%20Scratch.vm.setFramerate(fps)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20getCloneLimit%20()%20%7B%0A%20%20%20%20%20%20return%20Scratch.vm.runtime.runtimeOptions.maxClones%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setCloneLimit%20(%7B%20limit%20%7D)%20%7B%0A%20%20%20%20%20%20limit%20%3D%20Scratch.Cast.toNumber(limit)%3B%0A%20%20%20%20%20%20Scratch.vm.setRuntimeOptions(%7B%0A%20%20%20%20%20%20%20%20maxClones%3A%20limit%0A%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20getDimension%20(%7B%20dimension%20%7D)%20%7B%0A%20%20%20%20%20%20if%20(dimension%20%3D%3D%3D%20'width')%20%7B%0A%20%20%20%20%20%20%20%20return%20Scratch.vm.runtime.stageWidth%3B%0A%20%20%20%20%20%20%7D%20else%20if%20(dimension%20%3D%3D%3D%20'height')%20%7B%0A%20%20%20%20%20%20%20%20return%20Scratch.vm.runtime.stageHeight%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%200%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setDimensions%20(%7B%20width%2C%20height%20%7D)%20%7B%0A%20%20%20%20%20%20width%20%3D%20Scratch.Cast.toNumber(width)%3B%0A%20%20%20%20%20%20height%20%3D%20Scratch.Cast.toNumber(height)%3B%0A%20%20%20%20%20%20Scratch.vm.setStageSize(width%2C%20height)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setUsername%20(%7B%20username%20%7D)%20%7B%0A%20%20%20%20%20%20Scratch.vm.runtime.ioDevices.userData._username%20%3D%20Scratch.Cast.toString(username)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20greenFlag%20()%20%7B%0A%20%20%20%20%20%20Scratch.vm.runtime.greenFlag()%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20Scratch.extensions.register(new%20RuntimeOptions())%3B%0A%7D)(window.Scratch)%3B%0A%20%7D)(Scratch)%3B","data:text/javascript;,(function(Scratch)%20%7B%20(Scratch%20%3D%3E%20%7B%0A%20%20'use%20strict'%3B%0A%0A%20%20if%20(!Scratch.extensions.unsandboxed)%20%7B%0A%20%20%20%20throw%20new%20Error('Camera%20extension%20must%20be%20run%20unsandboxed')%3B%0A%20%20%7D%0A%0A%20%20const%20icon%20%3D%20'data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSIyMjUuMzU0OCIgaGVpZ2h0PSIyMjUuMzU0OCIgdmlld0JveD0iMCwwLDIyNS4zNTQ4LDIyNS4zNTQ4Ij48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTg3LjMyMjkzLC0zNy4zMjI1OSkiPjxnIGRhdGEtcGFwZXItZGF0YT0ieyZxdW90O2lzUGFpbnRpbmdMYXllciZxdW90Ozp0cnVlfSIgZmlsbC1ydWxlPSJub256ZXJvIiBzdHJva2U9Im5vbmUiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBzdHJva2UtbGluZWpvaW49Im1pdGVyIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS1kYXNoYXJyYXk9IiIgc3Ryb2tlLWRhc2hvZmZzZXQ9IjAiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTogbm9ybWFsIj48cGF0aCBkPSJNMTg3LjMyMjk0LDE1MGMwLC02Mi4yMzAwMSA1MC40NDczOSwtMTEyLjY3NzQgMTEyLjY3NzQsLTExMi42Nzc0YzYyLjIzMDAxLDAgMTEyLjY3NzQsNTAuNDQ3MzkgMTEyLjY3NzQsMTEyLjY3NzRjMCw2Mi4yMzAwMSAtNTAuNDQ3MzksMTEyLjY3NzQgLTExMi42Nzc0LDExMi42Nzc0Yy02Mi4yMzAwMSwwIC0xMTIuNjc3NCwtNTAuNDQ3MzkgLTExMi42Nzc0LC0xMTIuNjc3NHoiIGZpbGw9IiNmZjRkYTciIHN0cm9rZS13aWR0aD0iMCIvPjxnPjxwYXRoIGQ9Ik0zMTcuMTAyOSw4MC44MTA4N2MyMS44OTI0LDAgMzkuNjYyMDcsMTcuNzM3MjMgMzkuNjYyMDcsMzkuNjM0NGMwLDEyLjMwNTE3IC01LjYxMTQ4LDIzLjI5NjIyIC0xNC40MDA4OCwzMC41NjgyNGg4Ljc3MDMydjY4LjE3NTYzaC0xMTQuMTMzMjV2LTU1Ljc5ODg5Yy0xNC4zMzQwOCwtMy41MjgxNyAtMjQuOTYxNTMsLTE2LjQ1NzQ3IC0yNC45NjE1MywtMzEuODgwNDRjMCwtMTguMTM5IDE0LjY5NjczLC0zMi44MzQ3OCAzMi44MzQ3OCwtMzIuODM0NzhjMTIuMDM3OTUsMCAyMi41NTY2MSw2LjQ3ODAxIDI4LjI3MjExLDE2LjEzMzk1bDQuODYxMzcsLTAuOTI0NzVjMy4xMjkyNiwtMTguNzY2OTYgMTkuNDM5NzYsLTMzLjA3MzM2IDM5LjA5OTAyLC0zMy4wNzMzNnpNMjc2LjIxODUxLDE0MS4yOTE3MWMtMS4xMDAzNSwzLjUzMzg5IC0yLjc2OTQ3LDYuODEyMDMgLTQuOTIwNTQsOS43MjE3OWgyMC41NDc3NGMtMy42ODc1NCwtMy4wNDgxNCAtNi44MDI0OCwtNi43NjUyNyAtOS4xODU0NSwtMTAuOTQ0Mjl6IiBmaWxsPSIjZmZmZmZmIiBzdHJva2Utd2lkdGg9IjEiLz48cGF0aCBkPSJNMzM2LjU3NTI5LDExOS41MjgxNWMwLDExLjA2ODM1IC04Ljk3MjY0LDIwLjA0MDk5IC0yMC4wNDA5OSwyMC4wNDA5OWMtMTEuMDY4MzUsMCAtMjAuMDQwOTksLTguOTcyNjQgLTIwLjA0MDk5LC0yMC4wNDA5OWMwLC0xMS4wNjgzNSA4Ljk3MjY0LC0yMC4wNDA5OSAyMC4wNDA5OSwtMjAuMDQwOTljMTEuMDY4MzUsMCAyMC4wNDA5OSw4Ljk3MjY0IDIwLjA0MDk5LDIwLjA0MDk5eiIgZmlsbD0iI2ZmNGRhNyIgc3Ryb2tlLXdpZHRoPSIwLjUiLz48cGF0aCBkPSJNMjYxLjE4MywxMzAuMDI1ODFjMCw4Ljk2MDA0IC03LjI2MzYyLDE2LjIyMzY2IC0xNi4yMjM2NiwxNi4yMjM2NmMtOC45NjAwNCwwIC0xNi4yMjM2NiwtNy4yNjM2MiAtMTYuMjIzNjYsLTE2LjIyMzY2YzAsLTguOTYwMDQgNy4yNjM2MiwtMTYuMjIzNjYgMTYuMjIzNjYsLTE2LjIyMzY2YzguOTYwMDQsMCAxNi4yMjM2Niw3LjI2MzYyIDE2LjIyMzY2LDE2LjIyMzY2eiIgZmlsbD0iI2ZmNGRhNyIgc3Ryb2tlLXdpZHRoPSIwLjUiLz48cGF0aCBkPSJNMzg3Ljk2MDM5LDE0NS44NTcyNHY2MC41MTA0M2wtMjEuNjAzMjYsLTEzLjQ3MjE3aC0xNi44OTgzNHYtMzMuNTY2MDdoMTYuODk4MzRsMjEuNTk5MTcsLTEzLjQ3MTEyeiIgZmlsbD0iI2ZmZmZmZiIgc3Ryb2tlLXdpZHRoPSIxIi8%2BPC9nPjwvZz48L2c%2BPC9zdmc%2BPCEtLXJvdGF0aW9uQ2VudGVyOjExMi42NzcwNjU6MTEyLjY3NzQwNS0tPg%3D%3D'%3B%0A%20%20const%20CW%20%3D%20'data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAIUAAAB%2BCAYAAAAKj9LmAAAAAXNSR0IArs4c6QAABqdJREFUeF7tneuV1DAMhZdSoBWoB2qBeqAVKAWOOQRCNvHV27Kt%2Fbsex7r6ciV7MjNvXupvWgW%2Bv%2F%2F8sy3%2B3bdPbyyDMJ3McmHauQ7BqPNYC0u9LnccissijumhQCJxRb8bbyG0dh3cODVrng4KrjjaZGSARBqzFIz0UEgF8YDhaU6p%2BJQ1auOXrC0tFFoxKIJ7jJEk4WkdVhpw15QKCisRPJLNnZObiOv8llpw15ICCksBKMl7%2B%2FXj72E%2FPnyhDFeN4SbkuBjS5IjhGN%2BLhbuGoVCgwKnZuApEfR0aZwkNJzFIl6d4rcAYAgUKGiXLCwJ0XQt3QXAgbXqxTwkFCriXlJEgPK1L4yR3cCB9KBo8rQnBeI4xzClQwHfCU0Sg3N0RY6SAHMlC%2BlC1sHCLEChQwNekUQWISDb3GhI4GhhII6om6aFAga4Ewx08EkC0jpkaCg4Q1LuAe9dmGa%2BBQ6KNtq9wKR9UICQBZ0k0dx0SMKT6pIKCCkMTVBowNxnZxlPh0OijLSFmTkEFQhNstgRr1oPg0OiUAooCQobHU%2FI0QKBjb8p5hdopKEBYBCmTPf%2BrrmBYaaXpK1RQFBB20LUkWgGBjuORW4ihKCDsgPCYSdNXuEFhSb2HaDvMKS0hIiiQSxQQOZALg6KAyJFwyiqkJYTlFAUEJRV5xgyHokpGHhjQWUX7f28HQnaKcol8SaesSNJXkKAoICjy5xwzBIoqGzlh0JQQ6BQ9lyggcgMhPdnsQjFL2UDvOFJStzLg3BIihmK0iBYg9GAZHR8FZOoYMyiylg1vGK5CrwAH97zi0SmyQRENw0pwmECRCYjRMKwCB6eE3DpFFiiyAXEGZLayooJiBSDQQyTn5KId1irNKKeEvHKKDFBwHYIDQS%2FJEkBmcQwXKCKCHwXDHShcQCL0oW5Bn8ZRS8h%2FTjHSJThAWDkDRWQOHNnBMIUiIlgKFJEwXIFBcERoRIG4N2YqKLID0YReGYrr8xV%2Fy8eo0lFAaO9%2F3uspbgGh8LTFAoKXUIvR00MxsodYpWRcQSJDMaJ0IJcYDQSCwtNBLRyBuy099xW%2Fy0c0FLMD0TTbFgqvwDmna553zdPcK%2Bw0NFvTrlPsCMXqQDRYUF8RDkVml9gBiB4UR1%2FR%2Fao%2BD6eYFQoPLUaURhUUHiLMCsTMjSV3F9J2fY9OUVD8k9NDi1EucVy311ekgCLzmcSKQKBms6AYcE4z2iVQXxEGxYz9xKouUVAQbsunrejKUPTAGO4UmfuJFXcdqNFs%2Fy8o%2FqgU%2Ff4PwcDchqBSXlAQoDiyM3s5QW9EwhNNawHQebvbbUGcGB1xE6eZfljo4VV2KFo2dwfj6O%2BqfFzu7V3BODf8BcWN4e8GxnUHWFA8dAG7gHF3JFBQEFrD1QBBZ0MFBQGK3YYUFLtlnBBvQUEQabchw6E4TtF2Ez5zvKHPaM5wgJU5WVFrC32au6CISqvuOgWFTr8lX50CiuorcrEV%2FlnSKiG5ALhbTfj3UxQUBcUrBdBTP%2FklW3%2BF4U7RJC23yA0WhKItP%2BoprGo4c8BC%2Bh5Nayh6blFgjAejoBifg3QrIEHhUULKLdKx8HdB5C9sjy4hVUbGQUOGotxiXJKirzwciioj0SnH10vxy0Dok0vomUIcZo3gKJACCuQW1V9wUqofm%2BrXBssx9Am1mCEVFOUYFinVz5HyF4yRY1Q50Se%2BN0NKKCiOUWD4gdGFol125Jd5lGP4JV7sFAgKrwOt84IpYJRr2MIDnQKB4XH8fQ2RCsbxujrX0EFCgmJGMMo95GCYQBFRRo4Qua5R7sGHgwwFcosZwLiTp0rNa1VYUCAwIvoLSRPKuVcKkpcXUygi3aLg4KDOG8uGArnFKDDadaX9Rk%2ByHZ1DBEVmMLQNafUdgvJxFg19F1R0j9G747UuspNjiJ3iSMBMYNxBw4FlFzDcoRjZY%2FDaK1pPsgMYaigo%2FcVMYKCGtaBg3GqojBQYDDEHDzVxCmp%2FcYzL1IA%2B6b%2Fzp%2BNNoaCWkllcY9dPx5tDsRIYBYVDHaP0Gdld4w6M1ZtNF6fgHHBl7zMKCge34JSTjK5RUDhBwQUjCxzVUzgCISknGcpKQREEhcQ1RjlHQREIBfew67q0iMOvOrwaAISmpJxf6wHIzkA0bd23pFTeqGcaaD4tJOit9NXPKFJBYeUcT9AgWBAMbd4dgEgLhbbnQG4i%2Bf8uQKSHIgscOwExDRTepaXnHLsBMSUUkYDsCMT0UNzd4Ra7mF1hOPRMsyWVNH%2Fc1%2FSA2R2Es5a%2FACFtcn%2FxxMQMAAAAAElFTkSuQmCC'%3B%0A%20%20const%20CCW%20%3D%20'data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAIYAAAB9CAYAAABnLBtLAAAAAXNSR0IArs4c6QAABotJREFUeF7tnWuW5TQMhJmlwFZgPcNaYD3DVmApzAmHzEmnY%2BthvRxV%2F01iy6XPJSU3fe%2BXnwz%2B%2Fv71j3%2BpYX756%2Fcv1DkVjnPWcsS5y3q0mi4liyviGVwVMaVxS8Wtsk5p3Nfz1WBoxY0WTRvniqj3a6PXbBG7CoxVsT2FWo3NQlRqDM%2F1U3Nzj6eA4VGjdwBiJycRg2GZgNWdYxkLdyd5nbeqhXVcpmD8%2FO3rh%2Fj%2B%2Be3PabxaMd4ERFUXEYExS8gdinPBlnBYAjGKd3XnUevljq%2FdNNzxqfPcwTgCoMSiRFgFwgsCSlzO2qkxKG2o67XHTcDgCK%2BBYwUITkxa0bTXURrMxo0GJAwMzu65Ll4DRUUYRsnWQBIJBxsMTX9xF4US41j424GQapLVnIaCwXENiU3v5BDUuqhNEw3IMhia5EhFuIuimZNKTJXjEm08S0sKGFrneDMQKyXGA5AtwOgExBWQTPdggWHReD5ZNbXwrkBo3cPSOZbAsEjcCA6Lsav0DRZxUJvonMMKjnQwnvoNQPGMUiQcJcA44QAQPG%2FhALLqHCQYXv0FTwKctfLkdAUOgLExe5RzpIAB269BlBccascAGDXA4Dws1DjHFAz0F3WST0Vi7RwAg1J8o%2BOWcKjAQBmpSQvAqJmXElFZwQHHKJFO2yBmcHAb0SEYaDxtkxU92iocYjA69BeUHT8luZou1Boo52gPBiWgdqdXAGXFNdqC4QXEHaRsQLRwPILx5v4iCogqgACMiednwVClF9HAIXKMbFvU1PtKUFzjj9QSYFyUXwGC6tjvgGr%2BSeoYozIcnxzjDf2FBgopDDP3koASBYfUNV4HhgQKSxieQOECkg3Hkw5sMKKC1%2FQRnHcSruN6A6EpNRH6SlzjNWBw4IgGQgpIJhx3bQCG1qKU11HlxRsOrmt8AKND45ntGgdPmXCYguFNsXLzDS%2BjGlDA8fyleVddWI6xGxg79BuUc3hqPto4LcAAHGMf5pSTH47xhv7iLgVKihyO0zVeDQZcwxEMz1pn3XSOxqvuHBl3KVSfQTrGG8DYwTmiSznVZ%2FwHRnRQUU4h6Tkq38J6bE6AIfgoPhuO6A06KydTx%2FAgNcstznmpnZIZH8DIVJ%2F40vuqruGxSeEYDyBSXXkWu5GuMQUjMpAssZ%2FmBRjjnws5XLNdj0H1GlVLyRG3dTlBKdmolMweH5QBw4PSCuWk8p3JNmCcibSmNQOQ6o%2FGT01GfZ91DshSQj39zEhixpzZ%2FUUVMI44yM9KMhKUMWcVKCqUkg9gdHcNgPFxO7LfEs%2FYxRFzVgKiZCm5J4F6RyAiad5zVISiQin58YBrloC3AVIVhmsOSt2VeO9OjM9XAGDwtWp1JsBolW7%2BYgEGX6s2Z0Z%2B2s168tlG%2BeILBRjFE5QVXhQY1AeJ5A%2FZZAnUdd4K%2FcWnR%2BJdk1Fp3QCjUjaKxBJVRo7lUq82opQUgSLyUTjAKJR0KpQKbnHE%2BOm%2F3anAcdxXgQpgDL84xXfpGH2kQCQUnDKCu5IirEaCQT2%2FOCVB85kMRyQUXLeAYxSG4gjN%2Bq1wgJGccO70VdziejeCUsLNntN50VBI3AKlxCnp1LDU65KRJeTJLQAGlUGH4xlQzNwCYDgkWTrkLlDAMaSZXTifgsLrLkTjFgBjIdGSS3eDAmBIsqs4lwOEp1No3QJgKJLNvWRnKAAGN8vC86pDMboTuS4Tn5UIkz47nQuEd%2FlYKSHn%2BgCGARgSIHaAAqVkAQopDBFAUE7BKSFwDAUUGhjOaTwecz8tgfu%2BBbV8lJKBQisQXIeMAoJyC%2BnXPwAMxs9dUrtrdLwKFJISglLyEiAop9BA0bb5tCoTWSXjOq%2FXd5e2KyXWUESWC89m8z52KzAsoMgGIcItWpUSKRSVAJA6hbavuM7TxjEoMKqDcCaN6iksoGjjGIBCfsPdwjEy3siWp2J%2BRZRTtHmOASh0iL7eMaK%2BoUYnP31VtFO0d4zqzSYHCKtG8wlPOAa9acPPyIaixV3JTqWEC4SnU6CUfPsa7gSjCSsBATCKgFERCpSSJM%2BQwHCGKH3RZnVpbZvPQ7joO5MdgGhTSo6FZjegOwEBMP5XwMs1NDBklY2WzzFmjnEVZBWQFRAqAdHKMbhwcPoOCwDuOzS6seQ0pq9vPq8iUB%2B%2FcwSzPKciEO0c41xwNhyVYbhC38oxMuHYBYi2jhEFx24g3EtkS8fw6Dt2BwFgTLpHTv%2FxNgBGcnwHa6xrfvicCcEAAAAASUVORK5CYII%3D'%3B%0A%0A%20%20const%20vm%20%3D%20Scratch.vm%3B%0A%0A%20%20let%20cameraX%20%3D%200%3B%0A%20%20let%20cameraY%20%3D%200%3B%0A%20%20let%20cameraZoom%20%3D%20100%3B%0A%20%20let%20cameraDirection%20%3D%2090%3B%0A%20%20let%20cameraBG%20%3D%20'%23ffffff'%3B%0A%0A%20%20vm.runtime.runtimeOptions.fencing%20%3D%20false%3B%0A%20%20vm.renderer.offscreenTouching%20%3D%20true%3B%0A%0A%20%20function%20updateCamera(x%20%3D%20cameraX%2C%20y%20%3D%20cameraY%2C%20scale%20%3D%20cameraZoom%20%2F%20100%2C%20rot%20%3D%20-cameraDirection%20%2B%2090)%20%7B%0A%20%20%20%20rot%20%3D%20rot%20%2F%20180%20*%20Math.PI%3B%0A%20%20%20%20let%20s%20%3D%20Math.sin(rot)%20*%20scale%3B%0A%20%20%20%20let%20c%20%3D%20Math.cos(rot)%20*%20scale%3B%0A%20%20%20%20let%20w%20%3D%20vm.runtime.stageWidth%20%2F%202%3B%0A%20%20%20%20let%20h%20%3D%20vm.runtime.stageHeight%20%2F%202%3B%0A%20%20%20%20vm.renderer._projection%20%3D%20%5B%0A%20%20%20%20%20%20c%20%2F%20w%2C%20-s%20%2F%20h%2C%200%2C%200%2C%0A%20%20%20%20%20%20s%20%2F%20w%2C%20c%20%2F%20h%2C%200%2C%200%2C%0A%20%20%20%20%20%200%2C%200%2C%20-1%2C%200%2C%0A%20%20%20%20%20%20(c%20*%20-x%20%2B%20s%20*%20-y)%20%2F%20w%2C%20(c%20*%20-y%20-%20s%20*%20-x)%20%2F%20h%2C%200%2C%201%0A%20%20%20%20%5D%3B%0A%20%20%20%20vm.renderer.dirty%20%3D%20true%3B%0A%20%20%7D%0A%0A%20%20%2F%2F%20tell%20resize%20to%20update%20camera%20as%20well%0A%20%20vm.runtime.on('STAGE_SIZE_CHANGED'%2C%20_%20%3D%3E%20updateCamera())%3B%0A%0A%20%20%2F%2F%20fix%20mouse%20positions%0A%20%20let%20oldSX%20%3D%20vm.runtime.ioDevices.mouse.getScratchX%3B%0A%20%20let%20oldSY%20%3D%20vm.runtime.ioDevices.mouse.getScratchY%3B%0A%0A%20%20vm.runtime.ioDevices.mouse.getScratchX%20%3D%20function(...a)%20%7B%0A%20%20%20%20return%20(oldSX.apply(this%2C%20a)%20%2B%20cameraX)%20%2F%20cameraZoom%20*%20100%3B%0A%20%20%7D%3B%0A%20%20vm.runtime.ioDevices.mouse.getScratchY%20%3D%20function(...a)%20%7B%0A%20%20%20%20return%20(oldSY.apply(this%2C%20a)%20%2B%20cameraY)%20%2F%20cameraZoom%20*%20100%3B%0A%20%20%7D%3B%0A%0A%20%20class%20Camera%20%7B%0A%0A%20%20%20%20getInfo()%20%7B%0A%20%20%20%20%20%20return%20%7B%0A%0A%20%20%20%20%20%20%20%20id%3A%20'DTcameracontrols'%2C%0A%20%20%20%20%20%20%20%20name%3A%20'Camera'%2C%0A%0A%20%20%20%20%20%20%20%20color1%3A%20'%23ff4da7'%2C%0A%20%20%20%20%20%20%20%20color2%3A%20'%23de4391'%2C%0A%20%20%20%20%20%20%20%20color3%3A%20'%23c83c82'%2C%0A%0A%20%20%20%20%20%20%20%20menuIconURI%3A%20icon%2C%0A%0A%20%20%20%20%20%20%20%20blocks%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'moveSteps'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'move%20camera%20%5Bval%5D%20steps'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20val%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%2010%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'rotateCW'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'turn%20camera%20%5Bimage%5D%20%5Bval%5D%20degrees'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20image%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.IMAGE%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20dataURI%3A%20CW%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20val%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.ANGLE%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%2015%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'rotateCCW'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'turn%20camera%20%5Bimage%5D%20%5Bval%5D%20degrees'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20image%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.IMAGE%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20dataURI%3A%20CCW%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20val%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.ANGLE%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%2015%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20'---'%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'goTo'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'move%20camera%20to%20%5Bsprite%5D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20sprite%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22sprites%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'setBoth'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'set%20camera%20to%20x%3A%20%5Bx%5D%20y%3A%20%5By%5D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20x%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%200%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20y%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%200%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20'---'%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'setDirection'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'set%20camera%20direction%20to%20%5Bval%5D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20val%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.ANGLE%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%2090%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'pointTowards'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'point%20camera%20towards%20%5Bsprite%5D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20sprite%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22sprites%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20'---'%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'changeX'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'change%20camera%20x%20by%20%5Bval%5D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20val%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%2010%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'setX'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'set%20camera%20x%20to%20%5Bval%5D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20val%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%200%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'changeY'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'change%20camera%20y%20by%20%5Bval%5D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20val%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%2010%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'setY'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'set%20camera%20y%20to%20%5Bval%5D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20val%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%200%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20'---'%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'getX'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'camera%20x'%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'getY'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'camera%20y'%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'getDirection'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'camera%20direction'%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20'---'%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'changeZoom'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'change%20camera%20zoom%20by%20%5Bval%5D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20val%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%2010%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'setZoom'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'set%20camera%20zoom%20to%20%5Bval%5D%20%25'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20val%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20100%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'getZoom'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'camera%20zoom'%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20'---'%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'setCol'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'set%20background%20color%20to%20%5Bval%5D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20val%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.COLOR%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'getCol'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'background%20color'%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20menus%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20sprites%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20items%3A%20'getSprites'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20acceptReporters%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20getSprites()%7B%0A%20%20%20%20%20%20let%20sprites%20%3D%20%5B%5D%3B%0A%20%20%20%20%20%20Scratch.vm.runtime.targets.forEach(e%3D%3E%7B%0A%20%20%20%20%20%20%20%20if%20(e.isOriginal%20%26%26%20!e.isStage)%20sprites.push(e.sprite.name)%3B%0A%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20if%20(sprites.length%20%3D%3D%3D%200)%20%7B%0A%20%20%20%20%20%20%20%20sprites.push('no%20sprites%20exist')%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20sprites%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20setBoth(args%2C%20util)%20%7B%0A%20%20%20%20%20%20cameraX%20%3D%20%2Bargs.x%3B%0A%20%20%20%20%20%20cameraY%20%3D%20%2Bargs.y%3B%0A%20%20%20%20%20%20updateCamera()%3B%0A%20%20%20%20%20%20vm.runtime.requestRedraw()%3B%0A%20%20%20%20%7D%0A%20%20%20%20changeZoom(args%2C%20util)%20%7B%0A%20%20%20%20%20%20cameraZoom%20%2B%3D%20%2Bargs.val%3B%0A%20%20%20%20%20%20updateCamera()%3B%0A%20%20%20%20%20%20vm.runtime.requestRedraw()%3B%0A%20%20%20%20%7D%0A%20%20%20%20setZoom(args%2C%20util)%20%7B%0A%20%20%20%20%20%20cameraZoom%20%3D%20%2Bargs.val%3B%0A%20%20%20%20%20%20updateCamera()%3B%0A%20%20%20%20%20%20vm.runtime.requestRedraw()%3B%0A%20%20%20%20%7D%0A%20%20%20%20changeX(args%2C%20util)%20%7B%0A%20%20%20%20%20%20cameraX%20%2B%3D%20%2Bargs.val%3B%0A%20%20%20%20%20%20updateCamera()%3B%0A%20%20%20%20%20%20vm.runtime.requestRedraw()%3B%0A%20%20%20%20%7D%0A%20%20%20%20setX(args%2C%20util)%20%7B%0A%20%20%20%20%20%20cameraX%20%3D%20%2Bargs.val%3B%0A%20%20%20%20%20%20updateCamera()%3B%0A%20%20%20%20%20%20vm.runtime.requestRedraw()%3B%0A%20%20%20%20%7D%0A%20%20%20%20changeY(args%2C%20util)%20%7B%0A%20%20%20%20%20%20cameraY%20%2B%3D%20%2Bargs.val%3B%0A%20%20%20%20%20%20updateCamera()%3B%0A%20%20%20%20%20%20vm.runtime.requestRedraw()%3B%0A%20%20%20%20%7D%0A%20%20%20%20setY(args%2C%20util)%20%7B%0A%20%20%20%20%20%20cameraY%20%3D%20%2Bargs.val%3B%0A%20%20%20%20%20%20updateCamera()%3B%0A%20%20%20%20%20%20vm.runtime.requestRedraw()%3B%0A%20%20%20%20%7D%0A%20%20%20%20setDirection(args%2C%20util)%20%7B%0A%20%20%20%20%20%20cameraDirection%20%3D%20%2Bargs.val%3B%0A%20%20%20%20%20%20updateCamera()%3B%0A%20%20%20%20%20%20vm.runtime.requestRedraw()%3B%0A%20%20%20%20%7D%0A%20%20%20%20rotateCW(args%2C%20util)%20%7B%0A%20%20%20%20%20%20cameraDirection%20%3D%20cameraDirection%20%2B%20%2Bargs.val%3B%0A%20%20%20%20%20%20updateCamera()%3B%0A%20%20%20%20%20%20vm.runtime.requestRedraw()%3B%0A%20%20%20%20%7D%0A%20%20%20%20rotateCCW(args%2C%20util)%20%7B%0A%20%20%20%20%20%20cameraDirection%20%3D%20cameraDirection%20-%20%2Bargs.val%3B%0A%20%20%20%20%20%20updateCamera()%3B%0A%20%20%20%20%20%20vm.runtime.requestRedraw()%3B%0A%20%20%20%20%7D%0A%20%20%20%20getX()%20%7B%0A%20%20%20%20%20%20return%20cameraX%3B%0A%20%20%20%20%7D%0A%20%20%20%20getY()%20%7B%0A%20%20%20%20%20%20return%20cameraY%3B%0A%20%20%20%20%7D%0A%20%20%20%20getZoom()%20%7B%0A%20%20%20%20%20%20return%20cameraZoom%3B%0A%20%20%20%20%7D%0A%20%20%20%20getDirection()%20%7B%0A%20%20%20%20%20%20return%20cameraDirection%3B%0A%20%20%20%20%7D%0A%20%20%20%20setCol(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20rgb%20%3D%20Scratch.Cast.toRgbColorList(args.val)%3B%0A%20%20%20%20%20%20Scratch.vm.renderer.setBackgroundColor(rgb%5B0%5D%20%2F%20255%2C%20rgb%5B1%5D%20%2F%20255%2C%20rgb%5B2%5D%20%2F%20255)%3B%0A%20%20%20%20%7D%0A%20%20%20%20getCol()%20%7B%0A%20%20%20%20%20%20return%20cameraBG%3B%0A%20%20%20%20%7D%0A%20%20%20%20moveSteps(args)%20%7B%0A%20%20%20%20%20%20let%20dir%20%3D%20(-cameraDirection%20%2B%2090)%20*%20Math.PI%20%2F%20180%3B%0A%20%20%20%20%20%20cameraX%20%2B%3D%20args.val%20*%20Math.cos(dir)%3B%0A%20%20%20%20%20%20cameraY%20%2B%3D%20args.val%20*%20Math.sin(dir)%3B%0A%20%20%20%20%20%20updateCamera()%3B%0A%20%20%20%20%20%20vm.runtime.requestRedraw()%3B%0A%20%20%20%20%7D%0A%20%20%20%20goTo(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20target%20%3D%20Scratch.Cast.toString(args.sprite)%3B%0A%20%20%20%20%20%20const%20sprite%20%3D%20vm.runtime.getSpriteTargetByName(target)%3B%0A%20%20%20%20%20%20if%20(!sprite)%20return%3B%0A%20%20%20%20%20%20cameraX%20%3D%20Math.round(sprite.x)%3B%0A%20%20%20%20%20%20cameraY%20%3D%20Math.round(sprite.y)%3B%0A%20%20%20%20%20%20updateCamera()%3B%0A%20%20%20%20%20%20vm.runtime.requestRedraw()%3B%0A%20%20%20%20%7D%0A%20%20%20%20pointTowards(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20target%20%3D%20Scratch.Cast.toString(args.sprite)%3B%0A%20%20%20%20%20%20const%20sprite%20%3D%20vm.runtime.getSpriteTargetByName(target)%3B%0A%20%20%20%20%20%20if%20(!sprite)%20return%3B%0A%20%20%20%20%20%20let%20targetX%20%3D%20sprite.x%3B%0A%20%20%20%20%20%20let%20targetY%20%3D%20sprite.y%3B%0A%20%20%20%20%20%20const%20dx%20%3D%20targetX%20-%20cameraX%3B%0A%20%20%20%20%20%20const%20dy%20%3D%20targetY%20-%20cameraY%3B%0A%20%20%20%20%20%20cameraDirection%20%3D%2090%20-%20this.radToDeg(Math.atan2(dy%2C%20dx))%3B%0A%20%20%20%20%20%20updateCamera()%3B%0A%20%20%20%20%20%20vm.runtime.requestRedraw()%3B%0A%20%20%20%20%7D%0A%20%20%20%20radToDeg(rad)%20%7B%0A%20%20%20%20%20%20return%20rad%20*%20180%20%2F%20Math.PI%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20Scratch.extensions.register(new%20Camera())%3B%0A%7D)(Scratch)%3B%0A%20%7D)(Scratch)%3B","data:text/javascript;,(function(Scratch)%20%7B%20(function(Scratch)%20%7B%0A%20%20'use%20strict'%3B%0A%0A%20%20const%20menuIconURI%20%3D%20''%3B%0A%0A%20%20%2F%2F%20Object.create(null)%20prevents%20%22variable%20%5BtoString%5D%22%20from%20returning%20a%20function%0A%20%20let%20variables%20%3D%20Object.create(null)%3B%0A%0A%20%20class%20TempVars%20%7B%0A%20%20%20%20getInfo()%20%7B%0A%20%20%20%20%20%20return%20%7B%0A%20%20%20%20%20%20%20%20id%3A%20'lmstempvars'%2C%0A%20%20%20%20%20%20%20%20name%3A%20'Temporary%20Variables'%2C%0A%20%20%20%20%20%20%20%20color1%3A%20'%23FF791A'%2C%0A%20%20%20%20%20%20%20%20color2%3A%20'%23E15D00'%2C%0A%20%20%20%20%20%20%20%20menuIconURI%3A%20menuIconURI%2C%0A%20%20%20%20%20%20%20%20blocks%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'setVariableTo'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'set%20variable%20%5BINPUTA%5D%20to%20%5BINPUTB%5D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20INPUTA%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20'my%20variable'%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20INPUTB%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20'0'%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'changeVariableBy'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'change%20variable%20%5BINPUTA%5D%20by%20%5BINPUTB%5D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20INPUTA%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20'my%20variable'%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20INPUTB%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20'1'%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'getVariable'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'variable%20%5BINPUT%5D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20disableMonitor%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20INPUT%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20'my%20variable'%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%0A%20%20%20%20%20%20%20%20%20%20'---'%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'deleteVariable'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'delete%20variable%20%5BINPUT%5D'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20INPUT%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20'my%20variable'%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'deleteAllVariables'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'delete%20all%20variables'%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20'listVariables'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'list%20active%20variables'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20disableMonitor%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20getVariable%20(args)%20%7B%0A%20%20%20%20%20%20if%20(args.INPUT%20in%20variables)%20%7B%0A%20%20%20%20%20%20%20%20return%20(variables%5Bargs.INPUT%5D)%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20return%20''%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20setVariableTo%20(args)%20%7B%0A%20%20%20%20%20%20variables%5Bargs.INPUTA%5D%20%3D%20args.INPUTB%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20changeVariableBy%20(args)%20%7B%0A%20%20%20%20%20%20if%20(args.INPUTA%20in%20variables)%20%7B%0A%20%20%20%20%20%20%20%20const%20prev%20%3D%20Scratch.Cast.toNumber(variables%5Bargs.INPUTA%5D)%3B%0A%20%20%20%20%20%20%20%20const%20next%20%3D%20Scratch.Cast.toNumber(args.INPUTB)%3B%0A%20%20%20%20%20%20%20%20variables%5Bargs.INPUTA%5D%20%3D%20(prev%20%2B%20next)%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20variables%5Bargs.INPUTA%5D%20%3D%20args.INPUTB%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20listVariables%20(args%2C%20util)%20%7B%0A%20%20%20%20%20%20return%20Object.keys(variables).join('%2C')%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20deleteVariable%20(args)%20%7B%0A%20%20%20%20%20%20Reflect.deleteProperty(variables%2C%20args.INPUT)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20deleteAllVariables%20()%20%7B%0A%20%20%20%20%20%20variables%20%3D%20Object.create(null)%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%20%20Scratch.extensions.register(new%20TempVars())%3B%0A%7D)(Scratch)%3B%0A%20%7D)(Scratch)%3B","data:text/javascript;,(function(Scratch)%20%7B%20%0A%2F%2F%20Made%20by%20CST1229%0A%2F%2F%20Modified%20port%20of%20an%20extension%20from%20a%20mod%20I%20worked%20on.%0A%0A(function(Scratch)%20%7B%0A%20%20%22use%20strict%22%3B%0A%0A%20%20const%20CaseParam%20%3D%20%7B%0A%20%20%20%20LOWERCASE%3A%20%22lowercase%22%2C%0A%20%20%20%20UPPERCASE%3A%20%22uppercase%22%2C%0A%20%20%20%20MIXEDCASE%3A%20%22mixedcase%22%2C%0A%20%20%20%20TITLECASE%3A%20%22titlecase%22%2C%0A%20%20%20%20EXACTTITLECASE%3A%20%22exacttitlecase%22%0A%20%20%7D%3B%0A%0A%20%20let%20splitCache%3B%0A%20%20let%20matchCache%3B%0A%0A%20%20class%20StringsExt%20%7B%0A%20%20%20%20constructor%20()%20%7B%7D%0A%0A%20%20%20%20_initCaseMenu%20()%20%7B%0A%20%20%20%20%20%20return%20%5B%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20text%3A%20%22lowercase%22%2C%0A%20%20%20%20%20%20%20%20%20%20value%3A%20CaseParam.LOWERCASE%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20text%3A%20%22UPPERCASE%22%2C%0A%20%20%20%20%20%20%20%20%20%20value%3A%20CaseParam.UPPERCASE%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20text%3A%20%22Title%20Case%22%2C%0A%20%20%20%20%20%20%20%20%20%20value%3A%20CaseParam.TITLECASE%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20text%3A%20%22Exactly%20Title%20Case%22%2C%0A%20%20%20%20%20%20%20%20%20%20value%3A%20CaseParam.EXACTTITLECASE%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20text%3A%20%22MiXeD%20CaSe%22%2C%0A%20%20%20%20%20%20%20%20%20%20value%3A%20CaseParam.MIXEDCASE%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%5D%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20getInfo%20()%20%7B%0A%20%20%20%20%20%20return%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20id%20%22text%22%20could%20conflict%20with%20Scratch%20Lab's%20Animated%20Text%0A%20%20%20%20%20%20%20%20%2F%2F%20for%20mods%20which%20implement%20it%20or%20if%20it%20ever%20comes%20out%0A%20%20%20%20%20%20%20%20id%3A%20%22strings%22%2C%0A%20%20%20%20%20%20%20%20name%3A%20%22Text%22%2C%0A%20%20%20%20%20%20%20%20blocks%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22letters_of%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20%22letters%20%5BLETTER1%5D%20to%20%5BLETTER2%5D%20of%20%5BSTRING%5D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20LETTER1%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%202%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20LETTER2%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%204%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20STRING%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22apple%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22split%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20%22item%20%5BITEM%5D%20of%20%5BSTRING%5D%20split%20by%20%5BSPLIT%5D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20ITEM%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%203%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20STRING%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22apple%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20SPLIT%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22p%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22count%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20%22count%20%5BSUBSTRING%5D%20in%20%5BSTRING%5D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20SUBSTRING%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22p%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20STRING%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22apple%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22indexof%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20%22index%20of%20%5BSUBSTRING%5D%20in%20%5BSTRING%5D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20SUBSTRING%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22p%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20STRING%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22apple%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%22---%22%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22replace%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20%22replace%20%5BSUBSTRING%5D%20in%20%5BSTRING%5D%20with%20%5BREPLACE%5D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20SUBSTRING%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22world%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20STRING%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22Hello%20world!%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20REPLACE%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22fellow%20Scratchers%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22repeat%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20%22repeat%20%5BSTRING%5D%20%5BREPEAT%5D%20times%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20STRING%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22apple%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20REPEAT%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%203%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%22---%22%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22unicodeof%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20%22Unicode%20of%20%5BSTRING%5D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20STRING%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22unicodefrom%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20%22Unicode%20%5BNUM%5D%20as%20letter%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20NUM%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%2065%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%22---%22%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22replaceRegex%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20%22replace%20regex%20%2F%5BREGEX%5D%2F%5BFLAGS%5D%20in%20%5BSTRING%5D%20with%20%5BREPLACE%5D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20REGEX%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22.%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20FLAGS%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22g%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20STRING%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22Hello%20world!%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20REPLACE%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22%24%26%24%26%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22matchRegex%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20%22item%20%5BITEM%5D%20of%20%5BSTRING%5D%20matched%20by%20regex%20%2F%5BREGEX%5D%2F%5BFLAGS%5D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20ITEM%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.NUMBER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%201%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20STRING%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22Hello%20world!%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20REGEX%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22(.)%20(.%7B2%7D)%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20FLAGS%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22g%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22countRegex%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20%22count%20regex%20%2F%5BREGEX%5D%2F%5BFLAGS%5D%20in%20%5BSTRING%5D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20STRING%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22Hello%20world!%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20REGEX%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22%5BAEIOU%5D%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20FLAGS%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22i%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22testRegex%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.BOOLEAN%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20%22%5BSTRING%5D%20matches%20regex%20%2F%5BREGEX%5D%2F%5BFLAGS%5D%3F%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20STRING%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22Hello%20world!%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20REGEX%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22hello%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20FLAGS%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22i%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%22---%22%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22identical%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.BOOLEAN%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20%22is%20%5BOPERAND1%5D%20identical%20to%20%5BOPERAND2%5D%3F%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20OPERAND1%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22A%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20OPERAND2%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22a%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%22---%22%2C%0A%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22isCase%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.BOOLEAN%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20%22is%20%5BSTRING%5D%20%5BTEXTCASE%5D%3F%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20STRING%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22apple%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20TEXTCASE%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22textCase%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20CaseParam.LOWERCASE%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22toCase%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20%22convert%20%5BSTRING%5D%20to%20%5BTEXTCASE%5D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20STRING%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%22apple%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20TEXTCASE%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20menu%3A%20%22textCase%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20CaseParam.UPPERCASE%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20menus%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20textCase%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20acceptReporters%3A%20true%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20items%3A%20this._initCaseMenu()%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20identical(args%2C%20util)%20%7B%0A%20%20%20%20%20%20%2F%2F%20Purposefully%20no%20casting%2C%20because%0A%20%20%20%20%20%20%2F%2F%20types%20ARE%20differentiated%20in%20this%20block%0A%20%20%20%20%20%20return%20args.OPERAND1%20%3D%3D%3D%20args.OPERAND2%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20unicodeof(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20chars%20%3D%20Array.from(args.STRING.toString())%3B%0A%20%20%20%20%20%20return%20chars.map((char)%20%3D%3E%20char.charCodeAt(0)).join(%22%20%22)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20unicodefrom(args%2C%20util)%20%7B%0A%20%20%20%20%20%20return%20String.fromCharCode(Number(args.NUM)%20%7C%7C%200)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20letters_of(args%2C%20util)%20%7B%0A%20%20%20%20%20%20args.STRING%20%3D%20args.STRING.toString()%3B%0A%20%20%20%20%20%20args.LETTER1%20%3D%20Number(args.LETTER1)%20%7C%7C%200%3B%0A%20%20%20%20%20%20args.LETTER2%20%3D%20Number(args.LETTER2)%20%7C%7C%200%3B%0A%20%20%20%20%20%20return%20args.STRING.substring(args.LETTER1%20-%201%2C%20args.LETTER2)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20_caseInsensitiveRegex(str)%20%7B%0A%20%20%20%20%20%20return%20new%20RegExp(%0A%20%20%20%20%20%20%20%20str.replaceAll(%2F%5B%5Ea-zA-Z0-9%5D%2Fg%2C%20%22%5C%5C%24%26%22)%2C%0A%20%20%20%20%20%20%20%20%22gi%22%0A%20%20%20%20%20%20)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20split(args%2C%20util)%20%7B%0A%20%20%20%20%20%20args.STRING%20%3D%20(args.STRING%20%3F%3F%20%22%22).toString()%3B%0A%20%20%20%20%20%20args.SPLIT%20%3D%20(args.SPLIT%20%3F%3F%20%22%22).toString()%3B%0A%20%20%20%20%20%20args.ITEM%20%3D%20Number(args.ITEM)%20%7C%7C%200%3B%0A%0A%20%20%20%20%20%20%2F%2F%20Cache%20the%20last%20split%0A%20%20%20%20%20%20if%20(!(%0A%20%20%20%20%20%20%20%20splitCache%20%26%26%0A%20%20%20%20%20%20%20%20splitCache.string%20%3D%3D%3D%20args.STRING%20%26%26%0A%20%20%20%20%20%20%20%20splitCache.split%20%3D%3D%3D%20args.SPLIT%0A%20%20%20%20%20%20))%20%7B%0A%20%20%20%20%20%20%20%20const%20regex%20%3D%20this._caseInsensitiveRegex(args.SPLIT)%3B%0A%0A%20%20%20%20%20%20%20%20splitCache%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%20%20string%3A%20args.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20split%3A%20args.SPLIT%2C%0A%20%20%20%20%20%20%20%20%20%20arr%3A%20args.STRING.split(regex)%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20return%20splitCache.arr%5Bargs.ITEM%20-%201%5D%20%7C%7C%20%22%22%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20count(args%2C%20util)%20%7B%0A%20%20%20%20%20%20%2F%2F%20Fill%20cache%0A%20%20%20%20%20%20this.split(%7B%0A%20%20%20%20%20%20%20%20SPLIT%3A%20args.SUBSTRING%2C%0A%20%20%20%20%20%20%20%20STRING%3A%20args.STRING%2C%0A%20%20%20%20%20%20%20%20ITEM%3A%200%0A%20%20%20%20%20%20%7D%2C%20util)%3B%0A%20%20%20%20%20%20return%20(splitCache.arr.length%20-%201)%20%7C%7C%200%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20replace(args%2C%20util)%20%7B%0A%20%20%20%20%20%20args.STRING%20%3D%20args.STRING.toString()%3B%0A%20%20%20%20%20%20args.SUBSTRING%20%3D%20args.SUBSTRING.toString()%3B%0A%0A%20%20%20%20%20%20args.REPLACE%20%3D%20args.REPLACE.toString()%3B%0A%0A%20%20%20%20%20%20const%20regex%20%3D%20this._caseInsensitiveRegex(args.SUBSTRING)%3B%0A%0A%20%20%20%20%20%20return%20args.STRING.replace(regex%2C%20args.REPLACE)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20indexof(args%2C%20util)%20%7B%0A%20%20%20%20%20%20%2F%2F%20.toLowerCase()%20for%20case%20insensitivity%0A%20%20%20%20%20%20args.STRING%20%3D%20(args.STRING%20%3F%3F%20%22%22).toString().toLowerCase()%3B%0A%20%20%20%20%20%20args.SUBSTRING%20%3D%20(args.SUBSTRING%20%3F%3F%20%22%22).toString().toLowerCase()%3B%0A%0A%20%20%20%20%20%20%2F%2F%20Since%20both%20arguments%20are%20casted%20to%20strings%20beforehand%2C%0A%20%20%20%20%20%20%2F%2F%20we%20don't%20have%20to%20worry%20about%20type%20differences%0A%20%20%20%20%20%20%2F%2F%20like%20in%20the%20item%20number%20of%20in%20list%20block%0A%20%20%20%20%20%20const%20found%20%3D%20args.STRING.indexOf(args.SUBSTRING)%3B%0A%0A%20%20%20%20%20%20%2F%2F%20indexOf%20returns%20-1%20when%20no%20matches%20are%20found%2C%20we%20can%20just%20%2B1%0A%20%20%20%20%20%20return%20found%20%2B%201%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20repeat(args%2C%20util)%20%7B%0A%20%20%20%20%20%20args.STRING%20%3D%20args.STRING.toString()%3B%0A%20%20%20%20%20%20args.REPEAT%20%3D%20Number(args.REPEAT)%20%7C%7C%200%3B%0A%20%20%20%20%20%20return%20args.STRING.repeat(args.REPEAT)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20replaceRegex(args%2C%20util)%20%7B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20args.STRING%20%3D%20args.STRING.toString()%3B%0A%20%20%20%20%20%20%20%20args.REPLACE%20%3D%20args.REPLACE.toString()%3B%0A%20%20%20%20%20%20%20%20args.REGEX%20%3D%20args.REGEX.toString()%3B%0A%20%20%20%20%20%20%20%20args.FLAGS%20%3D%20args.FLAGS.toString()%3B%0A%0A%20%20%20%20%20%20%20%20return%20args.STRING.replace(%0A%20%20%20%20%20%20%20%20%20%20new%20RegExp(args.REGEX%2C%20args.FLAGS)%2C%0A%20%20%20%20%20%20%20%20%20%20args.REPLACE%0A%20%20%20%20%20%20%20%20)%3B%0A%20%20%20%20%20%20%7D%20catch%20(e)%20%7B%0A%20%20%20%20%20%20%20%20console.error(e)%3B%0A%20%20%20%20%20%20%20%20return%20%22%22%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20matchRegex(args%2C%20util)%20%7B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20args.STRING%20%3D%20(args.STRING%20%3F%3F%20%22%22).toString()%3B%0A%20%20%20%20%20%20%20%20args.REGEX%20%3D%20(args.REGEX%20%3F%3F%20%22%22).toString()%3B%0A%20%20%20%20%20%20%20%20args.FLAGS%20%3D%20(args.FLAGS%20%3F%3F%20%22%22).toString()%3B%0A%20%20%20%20%20%20%20%20args.ITEM%20%3D%20Number(args.ITEM)%20%7C%7C%200%3B%0A%0A%20%20%20%20%20%20%20%20%2F%2F%20Cache%20the%20last%20matched%20string%0A%20%20%20%20%20%20%20%20if%20(!(%0A%20%20%20%20%20%20%20%20%20%20matchCache%20%26%26%0A%20%20%20%20%20%20%20%20%20%20matchCache.string%20%3D%3D%3D%20args.STRING%20%26%26%0A%20%20%20%20%20%20%20%20%20%20matchCache.regex%20%3D%3D%3D%20args.REGEX%20%26%26%0A%20%20%20%20%20%20%20%20%20%20matchCache.flags%20%3D%3D%3D%20args.FLAGS%0A%20%20%20%20%20%20%20%20))%20%7B%0A%20%20%20%20%20%20%20%20%20%20const%20newFlags%20%3D%20args.FLAGS.includes(%22g%22)%20%3F%20args.FLAGS%20%3A%20args.FLAGS%20%2B%20%22g%22%3B%0A%20%20%20%20%20%20%20%20%20%20const%20regex%20%3D%20new%20RegExp(args.REGEX%2C%20newFlags)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20matchCache%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20string%3A%20args.STRING%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20regex%3A%20args.REGEX%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20flags%3A%20args.FLAGS%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20arr%3A%20args.STRING.match(regex)%20%7C%7C%20%5B%5D%0A%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20return%20matchCache.arr%5Bargs.ITEM%20-%201%5D%20%7C%7C%20%22%22%3B%0A%20%20%20%20%20%20%7D%20catch%20(e)%20%7B%0A%20%20%20%20%20%20%20%20console.error(e)%3B%0A%20%20%20%20%20%20%20%20return%20%22%22%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20countRegex(args%2C%20util)%20%7B%0A%20%20%20%20%20%20%2F%2F%20Fill%20cache%0A%20%20%20%20%20%20%2F%2F%20(ITEM%20is%20casted%20into%200%2C%0A%20%20%20%20%20%20%2F%2F%20but%20we%20don't%20care%20about%20the%20return%20value)%0A%20%20%20%20%20%20this.matchRegex(args%2C%20util)%3B%0A%20%20%20%20%20%20return%20matchCache.arr.length%20%7C%7C%200%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20testRegex(args%2C%20util)%20%7B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20args.STRING%20%3D%20args.STRING.toString()%3B%0A%20%20%20%20%20%20%20%20args.REGEX%20%3D%20args.REGEX.toString()%3B%0A%20%20%20%20%20%20%20%20args.FLAGS%20%3D%20args.FLAGS.toString()%3B%0A%0A%20%20%20%20%20%20%20%20return%20new%20RegExp(args.REGEX%2C%20args.FLAGS).test(args.STRING)%3B%0A%20%20%20%20%20%20%7D%20catch%20(e)%20%7B%0A%20%20%20%20%20%20%20%20console.error(e)%3B%0A%20%20%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20isCase(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20string%20%3D%20args.STRING.toString()%3B%0A%20%20%20%20%20%20const%20textCase%20%3D%20args.TEXTCASE.toString()%3B%0A%20%20%20%20%20%20switch%20(textCase)%20%7B%0A%20%20%20%20%20%20%20%20case%20CaseParam.LOWERCASE%3A%0A%20%20%20%20%20%20%20%20%20%20return%20string.toLowerCase()%20%3D%3D%3D%20string%3B%0A%20%20%20%20%20%20%20%20case%20CaseParam.UPPERCASE%3A%0A%20%20%20%20%20%20%20%20%20%20return%20string.toUpperCase()%20%3D%3D%3D%20string%3B%0A%20%20%20%20%20%20%20%20case%20CaseParam.MIXEDCASE%3A%0A%20%20%20%20%20%20%20%20%20%20return%20(!(%0A%20%20%20%20%20%20%20%20%20%20%20%20string.toUpperCase()%20%3D%3D%3D%20string%20%7C%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20string.toLowerCase()%20%3D%3D%3D%20string%0A%20%20%20%20%20%20%20%20%20%20))%3B%0A%20%20%20%20%20%20%20%20case%20CaseParam.TITLECASE%3A%0A%20%20%20%20%20%20%20%20%20%20return%20string.split(%2F%5Cb%2Fg).every((word)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(!word)%20return%20true%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20titleCased%20%3D%20word%5B0%5D.toUpperCase()%20%2B%20word.substring(1)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20word%20%3D%3D%3D%20titleCased%3B%0A%20%20%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%20%20case%20CaseParam.EXACTTITLECASE%3A%0A%20%20%20%20%20%20%20%20%20%20return%20string.split(%2F%5Cb%2Fg).every((word)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(!word)%20return%20true%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20titleCased%20%3D%20word%5B0%5D.toUpperCase()%20%2B%20word.substring(1).toLowerCase()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20word%20%3D%3D%3D%20titleCased%3B%0A%20%20%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%20%20default%3A%20return%20false%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20toCase(args%2C%20util)%20%7B%0A%20%20%20%20%20%20const%20string%20%3D%20args.STRING.toString()%3B%0A%20%20%20%20%20%20const%20textCase%20%3D%20args.TEXTCASE.toString()%3B%0A%20%20%20%20%20%20switch%20(textCase)%20%7B%0A%20%20%20%20%20%20%20%20case%20CaseParam.LOWERCASE%3A%0A%20%20%20%20%20%20%20%20%20%20return%20string.toLowerCase()%3B%0A%20%20%20%20%20%20%20%20case%20CaseParam.UPPERCASE%3A%0A%20%20%20%20%20%20%20%20%20%20return%20string.toUpperCase()%3B%0A%20%20%20%20%20%20%20%20case%20CaseParam.MIXEDCASE%3A%0A%20%20%20%20%20%20%20%20%20%20return%20Array.from(string).map(%0A%20%20%20%20%20%20%20%20%20%20%20%20(char%2C%20index)%20%3D%3E%20index%20%25%202%20%3D%3D%3D%200%20%3F%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20char.toUpperCase()%20%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20char.toLowerCase()%0A%20%20%20%20%20%20%20%20%20%20).join(%22%22)%3B%0A%20%20%20%20%20%20%20%20case%20CaseParam.TITLECASE%3A%0A%20%20%20%20%20%20%20%20%20%20return%20string.split(%2F%5Cb%2Fg).map((word)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(!word)%20return%20''%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20word%5B0%5D.toUpperCase()%20%2B%20word.substring(1)%3B%0A%20%20%20%20%20%20%20%20%20%20%7D).join(%22%22)%3B%0A%20%20%20%20%20%20%20%20case%20CaseParam.EXACTTITLECASE%3A%0A%20%20%20%20%20%20%20%20%20%20return%20string.split(%2F%5Cb%2Fg).map((word)%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(!word)%20return%20''%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20word%5B0%5D.toUpperCase()%20%2B%20word.substring(1).toLowerCase()%3B%0A%20%20%20%20%20%20%20%20%20%20%7D).join(%22%22)%3B%0A%20%20%20%20%20%20%20%20default%3A%20return%20string%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20Scratch.extensions.register(new%20StringsExt())%3B%0A%7D)(Scratch)%3B%20%7D)(Scratch)%3B"]) {
vm.extensionManager.loadExtensionURL(extension);
}
} catch (e) {
handleError(e);
}
</script>
<script>
const getProjectData = (function() {
const storage = scaffolding.storage;
storage.onprogress = (total, loaded) => {
setProgress(interpolate(0.2, 0.98, loaded / total));
};
storage.addWebStore(
[storage.AssetType.ImageVector, storage.AssetType.ImageBitmap, storage.AssetType.Sound],
(asset) => new URL('./assets/' + asset.assetId + '.' + asset.dataFormat, location).href
);
return () => new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.onload = () => {
resolve(xhr.response);
};
xhr.onerror = () => {
if (location.protocol === 'file:') {
reject(new Error('Zip environment must be used from a website, not from a file URL.'));
} else {
reject(new Error('Request to load project data failed.'));
}
};
xhr.onprogress = (e) => {
if (e.lengthComputable) {
setProgress(interpolate(0.1, 0.2, e.loaded / e.total));
}
};
xhr.responseType = 'arraybuffer';
xhr.open('GET', "./assets/project.json");
xhr.send();
});
})();
</script>
<script>
const run = async () => {
const projectData = await getProjectData();
await scaffolding.loadProject(projectData);
setProgress(1);
loadingScreen.hidden = true;
if (true) {
scaffolding.start();
} else {
launchScreen.hidden = false;
launchScreen.addEventListener('click', () => {
launchScreen.hidden = true;
scaffolding.start();
});
launchScreen.focus();
}
};
run().catch(handleError);
</script>
</body>
</html>