-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.html
324 lines (300 loc) · 223 KB
/
index.html
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
319
320
321
322
323
324
<!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>Absurd Incremental ReWritten v0.3</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">
</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 = 1366;
scaffolding.height = 768;
scaffolding.resizeMode = "stretch";
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");
try {
scaffolding.addCloudProvider(new Scaffolding.Cloud.WebSocketProvider(["wss://clouddata.turbowarp.org","wss://clouddata.turbowarp.xyz"], "[email protected]"));
} catch (error) {
console.error(error);
}
vm.setTurboMode(false);
if (vm.setInterpolation) vm.setInterpolation(false);
if (vm.setFramerate) vm.setFramerate(60);
if (vm.renderer.setUseHighQualityRender) vm.renderer.setUseHighQualityRender(false);
if (vm.setRuntimeOptions) vm.setRuntimeOptions({
fencing: false,
miscLimits: false,
maxClones: 9999999999,
});
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: () => true
});
for (const extension of ["data:text/javascript;base64,Ly8gTmFtZTogRGlzcGxheSBUZXh0Ci8vIElEOiBTUGRpc1RleHQKLy8gRGVzY3JpcHRpb246IERpc3BsYXkgVGV4dCBpbiBZb3VyIFByb2plY3RzIQovLyBCeTogU2hhcmtQb29sCgovLyBWZXJzaW9uIFYuMS40LjQKCihmdW5jdGlvbiAoU2NyYXRjaCkgewogICJ1c2Ugc3RyaWN0IjsKICBpZiAoIVNjcmF0Y2guZXh0ZW5zaW9ucy51bnNhbmRib3hlZCkgdGhyb3cgbmV3IEVycm9yKCJEaXNwbGF5IFRleHQgbXVzdCBydW4gdW5zYW5kYm94ZWQhIik7CgogIGNvbnN0IG1lbnVJY29uVVJJID0KImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlIZHBaSFJvUFNJMk5TNHlNelFpSUdobGFXZG9kRDBpTmpVdU1qTTBJaUIyYVdWM1FtOTRQU0l3SURBZ05qVXVNak0wSURZMUxqSXpOQ0krUEdjZ2MzUnliMnRsTFcxcGRHVnliR2x0YVhROUlqRXdJajQ4Y0dGMGFDQmtQU0pOTUNBek1pNDJNVGRETUNBeE5DNDJNRE1nTVRRdU5qQXpJREFnTXpJdU5qRTNJREJ6TXpJdU5qRTNJREUwTGpZd015QXpNaTQyTVRjZ016SXVOakUzTFRFMExqWXdNeUF6TWk0Mk1UY3RNekl1TmpFM0lETXlMall4TjFNd0lEVXdMall6TVNBd0lETXlMall4TnlJZ1ptbHNiRDBpSXpOak5HVTFZeUl2UGp4d1lYUm9JR1E5SWswekxqTTVNU0F6TWk0Mk1UZGpNQzB4Tmk0eE5ERWdNVE11TURnMUxUSTVMakl5TmlBeU9TNHlNall0TWprdU1qSTJjekk1TGpJeU5pQXhNeTR3T0RVZ01qa3VNakkySURJNUxqSXlOaTB4TXk0d09EVWdNamt1TWpJMkxUSTVMakl5TmlBeU9TNHlNalpUTXk0ek9URWdORGd1TnpVNElETXVNemt4SURNeUxqWXhOeUlnWm1sc2JEMGlJemM0T1NJdlBqeHdZWFJvSUdROUlrMHhPUzR3TnpZZ05Ea3VORGM1WVRNdU16SWdNeTR6TWlBd0lEQWdNUzB6TGpNeU1TMHpMak15ZGkwMExqazFhREl1TmpBM2RqSXVPRFUxWVRJdU9ERWdNaTQ0TVNBd0lEQWdNQ0F5TGpnd09DQXlMamd3T0dneUxqZzFOSFl5TGpZd04zcHRNalF1T1RnNExUSXVOakEzWVRJdU9ERWdNaTQ0TVNBd0lEQWdNQ0F5TGpnd09DMHlMamd3T0ZZME1TNHlNV2d5TGpZd04zWTBMamswT0dFekxqTXlJRE11TXpJZ01DQXdJREV0TXk0ek1pQXpMak15TVdndE5DNDVOWFl0TWk0Mk1EZDZiUzB5T0M0ek1TMHlOeTQzT1RaaE15NHpNaUF6TGpNeUlEQWdNQ0F4SURNdU16SXlMVE11TXpJeGFEUXVPVFE0ZGpJdU5qQTNTREl4TGpFM1lUSXVPREVnTWk0NE1TQXdJREFnTUMweUxqZ3dPQ0F5TGpnd09IWXlMamcxTkdndE1pNDJNRGQ2YlRNd0xqUXdOQzB6TGpNeU1XRXpMak15SURNdU16SWdNQ0F3SURFZ015NHpNakVnTXk0ek1uWTBMamsxYUMweUxqWXdOMVl5TVM0eE4yRXlMamd4SURJdU9ERWdNQ0F3SURBdE1pNDRNRGd0TWk0NE1EaElOREV1TWpGMkxUSXVOakEzZWlJZ1ptbHNiRDBpSTJabVppSWdjM1J5YjJ0bFBTSWpabVptSWlCemRISnZhMlV0ZDJsa2RHZzlJakl1TlNJdlBqeHdZWFJvSUdROUlrMHlOUzQ0TVRFZ01qY3VOVEl4WVM0NU15NDVNeUF3SURBZ01TMHVPVEk0TFM0NU1qbDJMVEV1TmpJMll6QXRMalV4TXk0ME1UVXRMamt5T0M0NU1qZ3RMamt5T0dneE15NDJNVEpqTGpVeE15QXdJQzQ1TWpndU5ERTFMamt5T0M0NU1qaDJNUzQyTWpaaExqa3pMamt6SURBZ01DQXhMUzQ1TWpndU9USTVlaUlnWm1sc2JEMGlJMlptWmlJZ2MzUnliMnRsUFNJalptWm1JaUJ6ZEhKdmEyVXRkMmxrZEdnOUlqRXVOU0l2UGp4d1lYUm9JR1E5SWswek1DNDROelVnTWpZdU5qVTNZUzQ1TXk0NU15QXdJREFnTVNBdU9USTVMUzQ1TTJneExqWXlObUV1T1RNdU9UTWdNQ0F3SURFZ0xqa3lPUzQ1TTNZeE15NDJNVEZoTGprekxqa3pJREFnTUNBeExTNDVNamt1T1RJNGFDMHhMall5Tm1FdU9UTXVPVE1nTUNBd0lERXRMamt5T1MwdU9USTRlaUlnWm1sc2JEMGlJMlptWmlJZ2MzUnliMnRsUFNJalptWm1JaUJ6ZEhKdmEyVXRkMmxrZEdnOUlqRXVOU0l2UGp3dlp6NDhMM04yWno0PSI7CgogIGNvbnN0IGJsb2NrSWNvblVSSSA9CiJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUI0Yld4dWN6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TUM5emRtY2lJSGRwWkhSb1BTSTBPUzQyTWpRaUlHaGxhV2RvZEQwaU5Ea3VOakkwSWlCMmFXVjNRbTk0UFNJd0lEQWdORGt1TmpJMElEUTVMall5TkNJK1BHY2djM1J5YjJ0bExXMXBkR1Z5YkdsdGFYUTlJakV3SWo0OGNHRjBhQ0JrUFNKTk1DQTBPUzQyTWpSV01HZzBPUzQyTWpSMk5Ea3VOakkwZWlJZ1ptbHNiRDBpYm05dVpTSXZQanh3WVhSb0lHUTlJazB4TVM0eU56RWdOREV1TmpjMFlUTXVNeklnTXk0ek1pQXdJREFnTVMwekxqTXlNUzB6TGpNeWRpMDBMamsxYURJdU5qQTNkakl1T0RVMVlUSXVPREVnTWk0NE1TQXdJREFnTUNBeUxqZ3dPQ0F5TGpnd09HZ3lMamcxTkhZeUxqWXdOM3B0TWpRdU9UZzRMVEl1TmpBM1lUSXVPREVnTWk0NE1TQXdJREFnTUNBeUxqZ3dPQzB5TGpnd09IWXRNaTQ0TlRSb01pNDJNRGQyTkM0NU5EaGhNeTR6TWlBekxqTXlJREFnTUNBeExUTXVNeklnTXk0ek1qRm9MVFF1T1RWMkxUSXVOakEzZWswM0xqazBPU0F4TVM0eU56RmhNeTR6TWlBekxqTXlJREFnTUNBeElETXVNekl5TFRNdU16SXhhRFF1T1RRNGRqSXVOakEzYUMweUxqZzFOR0V5TGpneElESXVPREVnTUNBd0lEQXRNaTQ0TURnZ01pNDRNRGgyTWk0NE5UUklOeTQ1TlhwTk16Z3VNelV6SURjdU9UVmhNeTR6TWlBekxqTXlJREFnTUNBeElETXVNekl4SURNdU16SjJOQzQ1TldndE1pNDJNRGQyTFRJdU9EVTFZVEl1T0RFZ01pNDRNU0F3SURBZ01DMHlMamd3T0MweUxqZ3dPR2d0TWk0NE5UUldOeTQ1TlhvaUlHWnBiR3c5SWlObVptWWlJSE4wY205clpUMGlJMlptWmlJZ2MzUnliMnRsTFhkcFpIUm9QU0l5TGpVaUx6NDhjR0YwYUNCa1BTSk5NVGd1TURBMklERTVMamN4Tm1FdU9UTXVPVE1nTUNBd0lERXRMamt5T0MwdU9USTVkaTB4TGpZeU5tTXdMUzQxTVRNdU5ERTFMUzQ1TWpndU9USTRMUzQ1TWpob01UTXVOakV5WXk0MU1UTWdNQ0F1T1RJNExqUXhOUzQ1TWpndU9USTRkakV1TmpJMllTNDVNeTQ1TXlBd0lEQWdNUzB1T1RJNExqa3lPWG9pSUdacGJHdzlJaU5tWm1ZaUlITjBjbTlyWlQwaUkyWm1aaUlnYzNSeWIydGxMWGRwWkhSb1BTSXhMalVpTHo0OGNHRjBhQ0JrUFNKTk1qTXVNRGNnTVRndU9EVXlZUzQ1TXk0NU15QXdJREFnTVNBdU9USTVMUzQ1TTJneExqWXlObUV1T1RNdU9UTWdNQ0F3SURFZ0xqa3lPUzQ1TTNZeE15NDJNVEZoTGprekxqa3pJREFnTUNBeExTNDVNamt1T1RJNGFDMHhMall5Tm1FdU9UTXVPVE1nTUNBd0lERXRMamt5T1MwdU9USTRlaUlnWm1sc2JEMGlJMlptWmlJZ2MzUnliMnRsUFNJalptWm1JaUJ6ZEhKdmEyVXRkMmxrZEdnOUlqRXVOU0l2UGp3dlp6NDhMM04yWno0PSI7CgogIGNvbnN0IHZtID0gU2NyYXRjaC52bTsKICBjb25zdCBydW50aW1lID0gdm0ucnVudGltZTsKICBjb25zdCByZW5kZXIgPSB2bS5yZW5kZXJlcjsKICBjb25zdCBmb250TWVudSA9IFsKICAgICJTY3JhdGNoIiwgIlNhbnMgU2VyaWYiLCAiU2VyaWYiLCAiSGFuZHdyaXRpbmciLCAiTWFya2VyIiwgIkN1cmx5IiwgIlBpeGVsIgogIF07CgogIGxldCBhbGxUZXh0ID0gW10sIGNsaWNrZWRUeHRzID0gW10sIHR4dFNldHRpbmdzID0ge307CgogIGNvbnN0IHhtbEVzY2FwZSA9IGZ1bmN0aW9uICh1bnNhZmUpIHsKICAgIHVuc2FmZSA9IFN0cmluZyh1bnNhZmUpOwogICAgcmV0dXJuIHVuc2FmZS5yZXBsYWNlKC9bPD4mJyJdL2csIGMgPT4gewogICAgICBzd2l0Y2ggKGMpIHsKICAgICAgICBjYXNlICI8IjogcmV0dXJuICImbHQ7IjsKICAgICAgICBjYXNlICI+IjogcmV0dXJuICImZ3Q7IjsKICAgICAgICBjYXNlICImIjogcmV0dXJuICImYW1wOyI7CiAgICAgICAgY2FzZSAiJyI6IHJldHVybiAiJmFwb3M7IjsKICAgICAgICBjYXNlICJcIiI6IHJldHVybiAiJnF1b3Q7IjsKICAgICAgfQogICAgfSk7CiAgfTsKCiAgY2xhc3MgU1BkaXNUZXh0IHsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBydW50aW1lLm9uKCJQUk9KRUNUX1NUQVJUIiwgKCkgPT4geyB0aGlzLnJlbW92ZUFsbFR4dCgpIH0pOwogICAgICBydW50aW1lLm9uKCJQUk9KRUNUX1NUT1BfQUxMIiwgKCkgPT4geyB0aGlzLnJlbW92ZUFsbFR4dCgpIH0pOwogICAgfQogICAgZ2V0SW5mbygpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBpZDogIlNQZGlzVGV4dCIsCiAgICAgICAgbmFtZTogIkRpc3BsYXkgVGV4dCIsCiAgICAgICAgY29sb3IxOiAiIzc3ODg5OSIsCiAgICAgICAgY29sb3IyOiAiIzVFNzA3RiIsCiAgICAgICAgY29sb3IzOiAiIzNDNEU1QyIsCiAgICAgICAgbWVudUljb25VUkksCiAgICAgICAgYmxvY2tJY29uVVJJLAogICAgICAgIGJsb2NrczogWwogICAgICAgICAgewogICAgICAgICAgICBvcGNvZGU6ICJwcmludFR4dCIsCiAgICAgICAgICAgIGJsb2NrVHlwZTogU2NyYXRjaC5CbG9ja1R5cGUuQ09NTUFORCwKICAgICAgICAgICAgdGV4dDogInByaW50IHRleHQgW1RYVF0gd2l0aCBJRCBbSURdIiwKICAgICAgICAgICAgYXJndW1lbnRzOiB7CiAgICAgICAgICAgICAgSUQ6IHsgdHlwZTogU2NyYXRjaC5Bcmd1bWVudFR5cGUuU1RSSU5HLCBkZWZhdWx0VmFsdWU6ICJteS10ZXh0IiB9LAogICAgICAgICAgICAgIFRYVDogeyB0eXBlOiBTY3JhdGNoLkFyZ3VtZW50VHlwZS5TVFJJTkcsIGRlZmF1bHRWYWx1ZTogImhlbGxvIHdvcmxkIiB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBvcGNvZGU6ICJyZXBsYWNlVHh0IiwKICAgICAgICAgICAgYmxvY2tUeXBlOiBTY3JhdGNoLkJsb2NrVHlwZS5DT01NQU5ELAogICAgICAgICAgICB0ZXh0OiAicmVwbGFjZSB0ZXh0IG9mIElEIFtJRF0gd2l0aCBbVFhUXSIsCiAgICAgICAgICAgIGFyZ3VtZW50czogewogICAgICAgICAgICAgIElEOiB7IHR5cGU6IFNjcmF0Y2guQXJndW1lbnRUeXBlLlNUUklORywgZGVmYXVsdFZhbHVlOiAibXktdGV4dCIgfSwKICAgICAgICAgICAgICBUWFQ6IHsgdHlwZTogU2NyYXRjaC5Bcmd1bWVudFR5cGUuU1RSSU5HLCBkZWZhdWx0VmFsdWU6ICJsb3JlbSBpcHN1bSIgfQogICAgICAgICAgICB9LAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgb3Bjb2RlOiAicmVtb3ZlVHh0IiwKICAgICAgICAgICAgYmxvY2tUeXBlOiBTY3JhdGNoLkJsb2NrVHlwZS5DT01NQU5ELAogICAgICAgICAgICB0ZXh0OiAicmVtb3ZlIHRleHQgd2l0aCBJRCBbSURdIiwKICAgICAgICAgICAgYXJndW1lbnRzOiB7CiAgICAgICAgICAgICAgSUQ6IHsgdHlwZTogU2NyYXRjaC5Bcmd1bWVudFR5cGUuU1RSSU5HLCBkZWZhdWx0VmFsdWU6ICJteS10ZXh0IiB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBvcGNvZGU6ICJyZW1vdmVBbGxUeHQiLAogICAgICAgICAgICBibG9ja1R5cGU6IFNjcmF0Y2guQmxvY2tUeXBlLkNPTU1BTkQsCiAgICAgICAgICAgIHRleHQ6ICJyZW1vdmUgYWxsIHRleHQiCiAgICAgICAgICB9LAogICAgICAgICAgIi0tLSIsCiAgICAgICAgICB7CiAgICAgICAgICAgIG9wY29kZTogImRpc3BsYXllZFRleHRzIiwKICAgICAgICAgICAgYmxvY2tUeXBlOiBTY3JhdGNoLkJsb2NrVHlwZS5SRVBPUlRFUiwKICAgICAgICAgICAgdGV4dDogInByaW50ZWQgdGV4dHMgZnJvbSBJRCBbSURdIiwKICAgICAgICAgICAgYXJndW1lbnRzOiB7CiAgICAgICAgICAgICAgSUQ6IHsgdHlwZTogU2NyYXRjaC5Bcmd1bWVudFR5cGUuU1RSSU5HLCBkZWZhdWx0VmFsdWU6ICJteS10ZXh0IiB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBvcGNvZGU6ICJleGlzdGluZ0lEIiwKICAgICAgICAgICAgYmxvY2tUeXBlOiBTY3JhdGNoLkJsb2NrVHlwZS5CT09MRUFOLAogICAgICAgICAgICB0ZXh0OiAidGV4dCB3aXRoIElEIFtJRF0gZXhpc3Q/IiwKICAgICAgICAgICAgYXJndW1lbnRzOiB7CiAgICAgICAgICAgICAgSUQ6IHsgdHlwZTogU2NyYXRjaC5Bcmd1bWVudFR5cGUuU1RSSU5HLCBkZWZhdWx0VmFsdWU6ICJteS10ZXh0IiB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBvcGNvZGU6ICJhbGxJRHMiLAogICAgICAgICAgICBibG9ja1R5cGU6IFNjcmF0Y2guQmxvY2tUeXBlLlJFUE9SVEVSLAogICAgICAgICAgICB0ZXh0OiAiYWxsIHRleHQgSURzIgogICAgICAgICAgfSwKICAgICAgICAgIHsgYmxvY2tUeXBlOiBTY3JhdGNoLkJsb2NrVHlwZS5MQUJFTCwgdGV4dDogIkZvcm1hdHRpbmciIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG9wY29kZTogInNldFRleHRGb250IiwKICAgICAgICAgICAgYmxvY2tUeXBlOiBTY3JhdGNoLkJsb2NrVHlwZS5DT01NQU5ELAogICAgICAgICAgICB0ZXh0OiAic2V0IGZvbnQgb2YgSUQgW0lEXSB0byBbRk9OVF0iLAogICAgICAgICAgICBhcmd1bWVudHM6IHsKICAgICAgICAgICAgICBJRDogeyB0eXBlOiBTY3JhdGNoLkFyZ3VtZW50VHlwZS5TVFJJTkcsIGRlZmF1bHRWYWx1ZTogIm15LXRleHQiIH0sCiAgICAgICAgICAgICAgRk9OVDogeyB0eXBlOiBTY3JhdGNoLkFyZ3VtZW50VHlwZS5TVFJJTkcsIG1lbnU6ICJGT05UUyIgfQogICAgICAgICAgICB9LAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgb3Bjb2RlOiAic2V0Rm9udFNpemUiLAogICAgICAgICAgICBibG9ja1R5cGU6IFNjcmF0Y2guQmxvY2tUeXBlLkNPTU1BTkQsCiAgICAgICAgICAgIHRleHQ6ICJzZXQgZm9udCBzaXplIG9mIElEIFtJRF0gdG8gW1NJWkVdcHgiLAogICAgICAgICAgICBhcmd1bWVudHM6IHsKICAgICAgICAgICAgICBJRDogeyB0eXBlOiBTY3JhdGNoLkFyZ3VtZW50VHlwZS5TVFJJTkcsIGRlZmF1bHRWYWx1ZTogIm15LXRleHQiIH0sCiAgICAgICAgICAgICAgU0laRTogeyB0eXBlOiBTY3JhdGNoLkFyZ3VtZW50VHlwZS5OVU1CRVIsIGRlZmF1bHRWYWx1ZTogMzAgfQogICAgICAgICAgICB9LAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgb3Bjb2RlOiAic2V0VGhpY2siLAogICAgICAgICAgICBibG9ja1R5cGU6IFNjcmF0Y2guQmxvY2tUeXBlLkNPTU1BTkQsCiAgICAgICAgICAgIHRleHQ6ICJzZXQgYm9sZG5lc3Mgb2YgSUQgW0lEXSB0byBbTlVNXSIsCiAgICAgICAgICAgIGFyZ3VtZW50czogewogICAgICAgICAgICAgIE5VTSA6IHsgdHlwZTogU2NyYXRjaC5Bcmd1bWVudFR5cGUuTlVNQkVSLCBkZWZhdWx0VmFsdWU6IDEwMCB9LAogICAgICAgICAgICAgIElEOiB7IHR5cGU6IFNjcmF0Y2guQXJndW1lbnRUeXBlLlNUUklORywgZGVmYXVsdFZhbHVlOiAibXktdGV4dCIgfQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBvcGNvZGU6ICJzZXRUZXh0QWxpZ25tZW50IiwKICAgICAgICAgICAgYmxvY2tUeXBlOiBTY3JhdGNoLkJsb2NrVHlwZS5DT01NQU5ELAogICAgICAgICAgICB0ZXh0OiAic2V0IHRleHQgYWxpZ25tZW50IG9mIElEIFtJRF0gdG8gW0FMSUdOTUVOVF0iLAogICAgICAgICAgICBhcmd1bWVudHM6IHsKICAgICAgICAgICAgICBJRDogeyB0eXBlOiBTY3JhdGNoLkFyZ3VtZW50VHlwZS5TVFJJTkcsIGRlZmF1bHRWYWx1ZTogIm15LXRleHQiIH0sCiAgICAgICAgICAgICAgQUxJR05NRU5UOiB7IHR5cGU6IFNjcmF0Y2guQXJndW1lbnRUeXBlLlNUUklORywgbWVudTogIkFMSUdOTUVOVFMiIH0KICAgICAgICAgICAgfSwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG9wY29kZTogInNldE1hcmdpbnMiLAogICAgICAgICAgICBibG9ja1R5cGU6IFNjcmF0Y2guQmxvY2tUeXBlLkNPTU1BTkQsCiAgICAgICAgICAgIHRleHQ6ICJzZXQgbWFyZ2lucyBvZiBJRCBbSURdIHRvIHdpZHRoIFtXSURUSF0gaGVpZ2h0IFtIRUlHSFRdIiwKICAgICAgICAgICAgYXJndW1lbnRzOiB7CiAgICAgICAgICAgICAgSUQ6IHsgdHlwZTogU2NyYXRjaC5Bcmd1bWVudFR5cGUuU1RSSU5HLCBkZWZhdWx0VmFsdWU6ICJteS10ZXh0IiB9LAogICAgICAgICAgICAgIFdJRFRIOiB7IHR5cGU6IFNjcmF0Y2guQXJndW1lbnRUeXBlLk5VTUJFUiwgZGVmYXVsdFZhbHVlOiAxMDAgfSwKICAgICAgICAgICAgICBIRUlHSFQ6IHsgdHlwZTogU2NyYXRjaC5Bcmd1bWVudFR5cGUuTlVNQkVSLCBkZWZhdWx0VmFsdWU6IDMwIH0KICAgICAgICAgICAgfSwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG9wY29kZTogInNldFRleHRTcGFjaW5nIiwKICAgICAgICAgICAgYmxvY2tUeXBlOiBTY3JhdGNoLkJsb2NrVHlwZS5DT01NQU5ELAogICAgICAgICAgICB0ZXh0OiAic2V0IFtBVFRdIHNwYWNpbmcgb2YgSUQgW0lEXSB0byBbU1BBQ0lOR10gcHgiLAogICAgICAgICAgICBhcmd1bWVudHM6IHsKICAgICAgICAgICAgICBJRDogeyB0eXBlOiBTY3JhdGNoLkFyZ3VtZW50VHlwZS5TVFJJTkcsIGRlZmF1bHRWYWx1ZTogIm15LXRleHQiIH0sCiAgICAgICAgICAgICAgU1BBQ0lORzogeyB0eXBlOiBTY3JhdGNoLkFyZ3VtZW50VHlwZS5OVU1CRVIsIGRlZmF1bHRWYWx1ZTogNSB9LAogICAgICAgICAgICAgIEFUVDogeyB0eXBlOiBTY3JhdGNoLkFyZ3VtZW50VHlwZS5TVFJJTkcsIG1lbnU6ICJURVhUX0FUVCIgfQogICAgICAgICAgICB9LAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgb3Bjb2RlOiAic2V0T3ZlcmZsb3ciLAogICAgICAgICAgICBibG9ja1R5cGU6IFNjcmF0Y2guQmxvY2tUeXBlLkNPTU1BTkQsCiAgICAgICAgICAgIHRleHQ6ICJzZXQgdGV4dCBvdmVyZmxvdyBvZiBJRCBbSURdIHRvIFtUWVBFXSIsCiAgICAgICAgICAgIGFyZ3VtZW50czogewogICAgICAgICAgICAgIElEOiB7IHR5cGU6IFNjcmF0Y2guQXJndW1lbnRUeXBlLlNUUklORywgZGVmYXVsdFZhbHVlOiAibXktdGV4dCIgfSwKICAgICAgICAgICAgICBUWVBFOiB7IHR5cGU6IFNjcmF0Y2guQXJndW1lbnRUeXBlLlNUUklORywgbWVudTogIk9WRVJGTE9XIiB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICB9LAogICAgICAgICAgIi0tLSIsCiAgICAgICAgICB7CiAgICAgICAgICAgIG9wY29kZTogImF0dE9mVGV4dCIsCiAgICAgICAgICAgIGJsb2NrVHlwZTogU2NyYXRjaC5CbG9ja1R5cGUuUkVQT1JURVIsCiAgICAgICAgICAgIHRleHQ6ICJbQVRUXSBvZiB0ZXh0IHdpdGggSUQgW0lEXSIsCiAgICAgICAgICAgIGFyZ3VtZW50czogewogICAgICAgICAgICAgIElEOiB7IHR5cGU6IFNjcmF0Y2guQXJndW1lbnRUeXBlLlNUUklORywgZGVmYXVsdFZhbHVlOiAibXktdGV4dCIgfSwKICAgICAgICAgICAgICBBVFQ6IHsgdHlwZTogU2NyYXRjaC5Bcmd1bWVudFR5cGUuU1RSSU5HLCBtZW51OiAiRk9STUFUUyIgfQogICAgICAgICAgICB9LAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgb3Bjb2RlOiAibGluZUNudCIsCiAgICAgICAgICAgIGJsb2NrVHlwZTogU2NyYXRjaC5CbG9ja1R5cGUuUkVQT1JURVIsCiAgICAgICAgICAgIHRleHQ6ICIjIG9mIGxpbmVzIGluIHRleHQgSUQgW0lEXSIsCiAgICAgICAgICAgIGFyZ3VtZW50czogewogICAgICAgICAgICAgIElEOiB7IHR5cGU6IFNjcmF0Y2guQXJndW1lbnRUeXBlLlNUUklORywgZGVmYXVsdFZhbHVlOiAibXktdGV4dCIgfQogICAgICAgICAgICB9LAogICAgICAgICAgfSwKICAgICAgICAgICItLS0iLAogICAgICAgICAgewogICAgICAgICAgICBvcGNvZGU6ICJzZXRUZXh0Q29sb3IiLAogICAgICAgICAgICBibG9ja1R5cGU6IFNjcmF0Y2guQmxvY2tUeXBlLkNPTU1BTkQsCiAgICAgICAgICAgIHRleHQ6ICJzZXQgdGV4dCBjb2xvciBvZiBJRCBbSURdIHRvIFtDT0xPUl0iLAogICAgICAgICAgICBhcmd1bWVudHM6IHsKICAgICAgICAgICAgICBJRDogeyB0eXBlOiBTY3JhdGNoLkFyZ3VtZW50VHlwZS5TVFJJTkcsIGRlZmF1bHRWYWx1ZTogIm15LXRleHQiIH0sCiAgICAgICAgICAgICAgQ09MT1I6IHsgdHlwZTogU2NyYXRjaC5Bcmd1bWVudFR5cGUuQ09MT1IsIGRlZmF1bHRWYWx1ZTogIiMwMDAwMDAiIH0KICAgICAgICAgICAgfSwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG9wY29kZTogInNldFRleHREcm9wU2hhZG93IiwKICAgICAgICAgICAgYmxvY2tUeXBlOiBTY3JhdGNoLkJsb2NrVHlwZS5DT01NQU5ELAogICAgICAgICAgICB0ZXh0OiAic2V0IHRleHQgc2hhZG93IG9mIElEIFtJRF0gdG8geCBbeF0geSBbeV0geiBbel0gY29sb3IgW0NPTE9SXSIsCiAgICAgICAgICAgIGFyZ3VtZW50czogewogICAgICAgICAgICAgIElEOiB7IHR5cGU6IFNjcmF0Y2guQXJndW1lbnRUeXBlLlNUUklORywgZGVmYXVsdFZhbHVlOiAibXktdGV4dCIgfSwKICAgICAgICAgICAgICB4OiB7IHR5cGU6IFNjcmF0Y2guQXJndW1lbnRUeXBlLk5VTUJFUiwgZGVmYXVsdFZhbHVlOiAwIH0sCiAgICAgICAgICAgICAgeTogeyB0eXBlOiBTY3JhdGNoLkFyZ3VtZW50VHlwZS5OVU1CRVIsIGRlZmF1bHRWYWx1ZTogMCB9LAogICAgICAgICAgICAgIHo6IHsgdHlwZTogU2NyYXRjaC5Bcmd1bWVudFR5cGUuTlVNQkVSLCBkZWZhdWx0VmFsdWU6IDIgfSwKICAgICAgICAgICAgICBDT0xPUjogeyB0eXBlOiBTY3JhdGNoLkFyZ3VtZW50VHlwZS5DT0xPUiwgZGVmYXVsdFZhbHVlOiAiI2ZmMDAwMCIgfQogICAgICAgICAgICB9LAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgb3Bjb2RlOiAic2V0VGV4dE91dGxpbmUiLAogICAgICAgICAgICBibG9ja1R5cGU6IFNjcmF0Y2guQmxvY2tUeXBlLkNPTU1BTkQsCiAgICAgICAgICAgIHRleHQ6ICJzZXQgb3V0bGluZSBvZiBJRCBbSURdIHRvIFtDT0xPUl0gd2l0aCB0aGlja25lc3MgW1RISUNLTkVTU10iLAogICAgICAgICAgICBhcmd1bWVudHM6IHsKICAgICAgICAgICAgICBJRDogeyB0eXBlOiBTY3JhdGNoLkFyZ3VtZW50VHlwZS5TVFJJTkcsIGRlZmF1bHRWYWx1ZTogIm15LXRleHQiIH0sCiAgICAgICAgICAgICAgQ09MT1I6IHsgdHlwZTogU2NyYXRjaC5Bcmd1bWVudFR5cGUuQ09MT1IsIGRlZmF1bHRWYWx1ZTogIiNmZjAwMDAiIH0sCiAgICAgICAgICAgICAgVEhJQ0tORVNTOiB7IHR5cGU6IFNjcmF0Y2guQXJndW1lbnRUeXBlLk5VTUJFUiwgZGVmYXVsdFZhbHVlOiAzIH0KICAgICAgICAgICAgfSwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG9wY29kZTogInNldExpbmUiLAogICAgICAgICAgICBibG9ja1R5cGU6IFNjcmF0Y2guQmxvY2tUeXBlLkNPTU1BTkQsCiAgICAgICAgICAgIHRleHQ6ICJzZXQgdGV4dCBsaW5lIG9mIElEIFtJRF0gdG8gW1RZUEUxXSBbVFlQRTJdIGNvbG9yZWQgW0NPTE9SXSB0aGlja25lc3MgW1RISUNLXSIsCiAgICAgICAgICAgIGFyZ3VtZW50czogewogICAgICAgICAgICAgIElEOiB7IHR5cGU6IFNjcmF0Y2guQXJndW1lbnRUeXBlLlNUUklORywgZGVmYXVsdFZhbHVlOiAibXktdGV4dCIgfSwKICAgICAgICAgICAgICBUWVBFMTogeyB0eXBlOiBTY3JhdGNoLkFyZ3VtZW50VHlwZS5TVFJJTkcsIG1lbnU6ICJTVFlMRSIgfSwKICAgICAgICAgICAgICBUWVBFMjogeyB0eXBlOiBTY3JhdGNoLkFyZ3VtZW50VHlwZS5TVFJJTkcsIG1lbnU6ICJMSU5FX1RZUEUiIH0sCiAgICAgICAgICAgICAgQ09MT1I6IHsgdHlwZTogU2NyYXRjaC5Bcmd1bWVudFR5cGUuQ09MT1IsIGRlZmF1bHRWYWx1ZTogIiNmZjAwMDAiIH0sCiAgICAgICAgICAgICAgVEhJQ0s6IHsgdHlwZTogU2NyYXRjaC5Bcmd1bWVudFR5cGUuTlVNQkVSLCBkZWZhdWx0VmFsdWU6IDIgfQogICAgICAgICAgICB9LAogICAgICAgICAgfSwKICAgICAgICAgICItLS0iLAogICAgICAgICAgewogICAgICAgICAgICBvcGNvZGU6ICJtYWtlR3JhZGllbnQiLAogICAgICAgICAgICBibG9ja1R5cGU6IFNjcmF0Y2guQmxvY2tUeXBlLlJFUE9SVEVSLAogICAgICAgICAgICB0ZXh0OiAibWFrZSBhIFtUWVBFXSBncmFkaWVudCB3aXRoIFtDT0xPUjFdIGFuZCBbQ09MT1IyXSBhdCBhbmdsZSBbQU5HTEVdIiwKICAgICAgICAgICAgYXJndW1lbnRzOiB7CiAgICAgICAgICAgICAgQ09MT1IxOiB7IHR5cGU6IFNjcmF0Y2guQXJndW1lbnRUeXBlLkNPTE9SLCBkZWZhdWx0VmFsdWU6ICIjZmYwMDAwIiB9LAogICAgICAgICAgICAgIENPTE9SMjogeyB0eXBlOiBTY3JhdGNoLkFyZ3VtZW50VHlwZS5DT0xPUiwgZGVmYXVsdFZhbHVlOiAiIzAwZmYwMCIgfSwKICAgICAgICAgICAgICBBTkdMRTogeyB0eXBlOiBTY3JhdGNoLkFyZ3VtZW50VHlwZS5BTkdMRSwgZGVmYXVsdFZhbHVlOiA5MCB9LAogICAgICAgICAgICAgIFRZUEU6IHsgdHlwZTogU2NyYXRjaC5Bcmd1bWVudFR5cGUuU1RSSU5HLCBtZW51OiAiR1JBRElFTlRTIiB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICB9LAogICAgICAgICAgeyBibG9ja1R5cGU6IFNjcmF0Y2guQmxvY2tUeXBlLkxBQkVMLCB0ZXh0OiAi4oaTIFdpbGwgTG9zZSBTb21lIEZvcm1hdHRpbmcg4oaTIiB9LAogICAgICAgICAgewogICAgICAgICAgICBvcGNvZGU6ICJzZXRUZXh0Q3VydmUiLAogICAgICAgICAgICBibG9ja1R5cGU6IFNjcmF0Y2guQmxvY2tUeXBlLkNPTU1BTkQsCiAgICAgICAgICAgIHRleHQ6ICJzZXQgdGV4dCBjdXJ2ZSBvZiBJRCBbSURdIHRvIFtBUkNdIiwKICAgICAgICAgICAgYXJndW1lbnRzOiB7CiAgICAgICAgICAgICAgSUQ6IHsgdHlwZTogU2NyYXRjaC5Bcmd1bWVudFR5cGUuU1RSSU5HLCBkZWZhdWx0VmFsdWU6ICJteS10ZXh0IiB9LAogICAgICAgICAgICAgIEFSQzogeyB0eXBlOiBTY3JhdGNoLkFyZ3VtZW50VHlwZS5TVFJJTkcsIGRlZmF1bHRWYWx1ZTogIjxzdmc+IiB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBvcGNvZGU6ICJwcmVzZXRDdXJ2ZSIsCiAgICAgICAgICAgIGJsb2NrVHlwZTogU2NyYXRjaC5CbG9ja1R5cGUuUkVQT1JURVIsCiAgICAgICAgICAgIHRleHQ6ICJwcmVzZXQgY3VydmUgW0FSQ10iLAogICAgICAgICAgICBkaXNhYmxlTW9uaXRvcjogdHJ1ZSwKICAgICAgICAgICAgYXJndW1lbnRzOiB7CiAgICAgICAgICAgICAgQVJDOiB7IHR5cGU6IFNjcmF0Y2guQXJndW1lbnRUeXBlLlNUUklORywgbWVudTogIkFSQ1MiIH0KICAgICAgICAgICAgfSwKICAgICAgICAgIH0sCiAgICAgICAgICB7IGJsb2NrVHlwZTogU2NyYXRjaC5CbG9ja1R5cGUuTEFCRUwsIHRleHQ6ICJQb3NpdGlvbmluZyIgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgb3Bjb2RlOiAicHJlc2V0VGV4dFBvc2l0aW9uIiwKICAgICAgICAgICAgYmxvY2tUeXBlOiBTY3JhdGNoLkJsb2NrVHlwZS5DT01NQU5ELAogICAgICAgICAgICB0ZXh0OiAicHJlc2V0IHBvc2l0aW9uIG9mIElEIFtJRF0gdG8geDogW1hdIHk6IFtZXSIsCiAgICAgICAgICAgIGFyZ3VtZW50czogewogICAgICAgICAgICAgIElEOiB7IHR5cGU6IFNjcmF0Y2guQXJndW1lbnRUeXBlLlNUUklORywgZGVmYXVsdFZhbHVlOiAibXktdGV4dCIgfSwKICAgICAgICAgICAgICBYOiB7IHR5cGU6IFNjcmF0Y2guQXJndW1lbnRUeXBlLk5VTUJFUiwgZGVmYXVsdFZhbHVlOiAwIH0sCiAgICAgICAgICAgICAgWTogeyB0eXBlOiBTY3JhdGNoLkFyZ3VtZW50VHlwZS5OVU1CRVIsIGRlZmF1bHRWYWx1ZTogMCB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBvcGNvZGU6ICJzZXRUZXh0UG9zaXRpb24iLAogICAgICAgICAgICBibG9ja1R5cGU6IFNjcmF0Y2guQmxvY2tUeXBlLkNPTU1BTkQsCiAgICAgICAgICAgIHRleHQ6ICJzZXQgcG9zaXRpb24gb2YgSUQgW0lEXSB0byB4OiBbWF0geTogW1ldIiwKICAgICAgICAgICAgYXJndW1lbnRzOiB7CiAgICAgICAgICAgICAgSUQ6IHsgdHlwZTogU2NyYXRjaC5Bcmd1bWVudFR5cGUuU1RSSU5HLCBkZWZhdWx0VmFsdWU6ICJteS10ZXh0IiB9LAogICAgICAgICAgICAgIFg6IHsgdHlwZTogU2NyYXRjaC5Bcmd1bWVudFR5cGUuTlVNQkVSLCBkZWZhdWx0VmFsdWU6IDAgfSwKICAgICAgICAgICAgICBZOiB7IHR5cGU6IFNjcmF0Y2guQXJndW1lbnRUeXBlLk5VTUJFUiwgZGVmYXVsdFZhbHVlOiAwIH0KICAgICAgICAgICAgfSwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG9wY29kZTogInNldFRleHRaSW5kZXgiLAogICAgICAgICAgICBibG9ja1R5cGU6IFNjcmF0Y2guQmxvY2tUeXBlLkNPTU1BTkQsCiAgICAgICAgICAgIHRleHQ6ICJzZXQgbGF5ZXIgb2YgSUQgW0lEXSB0byBbWl9JTkRFWF0iLAogICAgICAgICAgICBhcmd1bWVudHM6IHsKICAgICAgICAgICAgICBJRDogeyB0eXBlOiBTY3JhdGNoLkFyZ3VtZW50VHlwZS5TVFJJTkcsIGRlZmF1bHRWYWx1ZTogIm15LXRleHQiIH0sCiAgICAgICAgICAgICAgWl9JTkRFWDogeyB0eXBlOiBTY3JhdGNoLkFyZ3VtZW50VHlwZS5OVU1CRVIsIGRlZmF1bHRWYWx1ZTogMSB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBvcGNvZGU6ICJ0ZXh0UG9zaXRpb24iLAogICAgICAgICAgICBibG9ja1R5cGU6IFNjcmF0Y2guQmxvY2tUeXBlLlJFUE9SVEVSLAogICAgICAgICAgICB0ZXh0OiAiW0FUVF0gb2YgSUQgW0lEXSIsCiAgICAgICAgICAgIGFyZ3VtZW50czogewogICAgICAgICAgICAgIElEOiB7IHR5cGU6IFNjcmF0Y2guQXJndW1lbnRUeXBlLlNUUklORywgZGVmYXVsdFZhbHVlOiAibXktdGV4dCIgfSwKICAgICAgICAgICAgICBBVFQ6IHsgdHlwZTogU2NyYXRjaC5Bcmd1bWVudFR5cGUuU1RSSU5HLCBtZW51OiAiUE9TIiB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICB9LAogICAgICAgICAgeyBibG9ja1R5cGU6IFNjcmF0Y2guQmxvY2tUeXBlLkxBQkVMLCB0ZXh0OiAiRWZmZWN0cyIgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgb3Bjb2RlOiAic2V0RWZmZWN0IiwKICAgICAgICAgICAgYmxvY2tUeXBlOiBTY3JhdGNoLkJsb2NrVHlwZS5DT01NQU5ELAogICAgICAgICAgICB0ZXh0OiAic2V0IFtFRkZFQ1RdIG9mIElEIFtJRF0gdG8gW1ZBTFVFXSIsCiAgICAgICAgICAgIGFyZ3VtZW50czogewogICAgICAgICAgICAgIElEOiB7IHR5cGU6IFNjcmF0Y2guQXJndW1lbnRUeXBlLlNUUklORywgZGVmYXVsdFZhbHVlOiAibXktdGV4dCIgfSwKICAgICAgICAgICAgICBWQUxVRTogeyB0eXBlOiBTY3JhdGNoLkFyZ3VtZW50VHlwZS5OVU1CRVIsIGRlZmF1bHRWYWx1ZTogNSB9LAogICAgICAgICAgICAgIEVGRkVDVDogeyB0eXBlOiBTY3JhdGNoLkFyZ3VtZW50VHlwZS5TVFJJTkcsIG1lbnU6ICJFRkZFQ1RTIiB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBvcGNvZGU6ICJhbXRPZkVmZmVjdCIsCiAgICAgICAgICAgIGJsb2NrVHlwZTogU2NyYXRjaC5CbG9ja1R5cGUuUkVQT1JURVIsCiAgICAgICAgICAgIHRleHQ6ICJjdXJyZW50IFtFRkZFQ1RdIG9mIElEIFtJRF0iLAogICAgICAgICAgICBhcmd1bWVudHM6IHsKICAgICAgICAgICAgICBFRkZFQ1Q6IHsgdHlwZTogU2NyYXRjaC5Bcmd1bWVudFR5cGUuU1RSSU5HLCBtZW51OiAiRUZGRUNUUyIgfSwKICAgICAgICAgICAgICBJRDogeyB0eXBlOiBTY3JhdGNoLkFyZ3VtZW50VHlwZS5TVFJJTkcsIGRlZmF1bHRWYWx1ZTogIm15LXRleHQiIH0KICAgICAgICAgICAgfSwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG9wY29kZTogInJlc2V0RWZmZWN0IiwKICAgICAgICAgICAgYmxvY2tUeXBlOiBTY3JhdGNoLkJsb2NrVHlwZS5DT01NQU5ELAogICAgICAgICAgICB0ZXh0OiAicmVzZXQgZWZmZWN0cyBvZiBJRCBbSURdIiwKICAgICAgICAgICAgYXJndW1lbnRzOiB7CiAgICAgICAgICAgICAgSUQ6IHsgdHlwZTogU2NyYXRjaC5Bcmd1bWVudFR5cGUuU1RSSU5HLCBkZWZhdWx0VmFsdWU6ICJteS10ZXh0IiB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICB9LAogICAgICAgICAgeyBibG9ja1R5cGU6IFNjcmF0Y2guQmxvY2tUeXBlLkxBQkVMLCB0ZXh0OiAiQWR2YW5jZWQiIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG9wY29kZTogImRlYnVnIiwKICAgICAgICAgICAgYmxvY2tUeXBlOiBTY3JhdGNoLkJsb2NrVHlwZS5DT01NQU5ELAogICAgICAgICAgICB0ZXh0OiAidG9nZ2xlIGRlYnVnIG1vZGUgW1RPR0dMRV0iLAogICAgICAgICAgICBhcmd1bWVudHM6IHsKICAgICAgICAgICAgICBUT0dHTEU6IHsgdHlwZTogU2NyYXRjaC5Bcmd1bWVudFR5cGUuU1RSSU5HLCBtZW51OiAiVE9HR0xFIiB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICB9LAogICAgICAgICAgIi0tLSIsCiAgICAgICAgICB7CiAgICAgICAgICAgIG9wY29kZTogInJlc2V0VHh0IiwKICAgICAgICAgICAgYmxvY2tUeXBlOiBTY3JhdGNoLkJsb2NrVHlwZS5DT01NQU5ELAogICAgICAgICAgICB0ZXh0OiAicmVzZXQgdGV4dCBzZXR0aW5ncyB3aXRoIElEIFtJRF0iLAogICAgICAgICAgICBhcmd1bWVudHM6IHsKICAgICAgICAgICAgICBJRDogeyB0eXBlOiBTY3JhdGNoLkFyZ3VtZW50VHlwZS5TVFJJTkcsIGRlZmF1bHRWYWx1ZTogIm15LXRleHQiIH0KICAgICAgICAgICAgfSwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG9wY29kZTogInJldXNlU3R5bGUiLAogICAgICAgICAgICBibG9ja1R5cGU6IFNjcmF0Y2guQmxvY2tUeXBlLkNPTU1BTkQsCiAgICAgICAgICAgIHRleHQ6ICJyZXVzZSB0ZXh0IHNldHRpbmdzIGluIElEIFtJRF0gZm9yIElEIFtJRDJdIiwKICAgICAgICAgICAgYXJndW1lbnRzOiB7CiAgICAgICAgICAgICAgSUQ6IHsgdHlwZTogU2NyYXRjaC5Bcmd1bWVudFR5cGUuU1RSSU5HLCBkZWZhdWx0VmFsdWU6ICJteS10ZXh0IiB9LAogICAgICAgICAgICAgIElEMjogeyB0eXBlOiBTY3JhdGNoLkFyZ3VtZW50VHlwZS5TVFJJTkcsIGRlZmF1bHRWYWx1ZTogIm15LXRleHQyIiB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICB9LAogICAgICAgICAgIi0tLSIsCiAgICAgICAgICB7CiAgICAgICAgICAgIG9wY29kZTogInRvZ2dsZVNlbGVjdCIsCiAgICAgICAgICAgIGJsb2NrVHlwZTogU2NyYXRjaC5CbG9ja1R5cGUuQ09NTUFORCwKICAgICAgICAgICAgdGV4dDogInRvZ2dsZSBoaWdobGlnaHRpbmcgZm9yIElEIFtJRF0gW1RZUEVdIiwKICAgICAgICAgICAgYXJndW1lbnRzOiB7CiAgICAgICAgICAgICAgSUQ6IHsgdHlwZTogU2NyYXRjaC5Bcmd1bWVudFR5cGUuU1RSSU5HLCBkZWZhdWx0VmFsdWU6ICJteS10ZXh0IiB9LAogICAgICAgICAgICAgIFRZUEU6IHsgdHlwZTogU2NyYXRjaC5Bcmd1bWVudFR5cGUuU1RSSU5HLCBtZW51OiAiVE9HR0xFIiB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBvcGNvZGU6ICJtYWtlQ2xpY2siLAogICAgICAgICAgICBibG9ja1R5cGU6IFNjcmF0Y2guQmxvY2tUeXBlLkNPTU1BTkQsCiAgICAgICAgICAgIHRleHQ6ICJ0b2dnbGUgY2xpY2tpbmcgZm9yIElEIFtJRF0gW1RZUEVdIiwKICAgICAgICAgICAgYXJndW1lbnRzOiB7CiAgICAgICAgICAgICAgSUQ6IHsgdHlwZTogU2NyYXRjaC5Bcmd1bWVudFR5cGUuU1RSSU5HLCBkZWZhdWx0VmFsdWU6ICJteS10ZXh0IiB9LAogICAgICAgICAgICAgIFRZUEU6IHsgdHlwZTogU2NyYXRjaC5Bcmd1bWVudFR5cGUuU1RSSU5HLCBtZW51OiAiVE9HR0xFIiB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBvcGNvZGU6ICJpc0NsaWNrZWQiLAogICAgICAgICAgICBibG9ja1R5cGU6IFNjcmF0Y2guQmxvY2tUeXBlLkJPT0xFQU4sCiAgICAgICAgICAgIHRleHQ6ICJJRCBbSURdIGNsaWNrZWQ/IiwKICAgICAgICAgICAgYXJndW1lbnRzOiB7CiAgICAgICAgICAgICAgSUQ6IHsgdHlwZTogU2NyYXRjaC5Bcmd1bWVudFR5cGUuU1RSSU5HLCBkZWZhdWx0VmFsdWU6ICJteS10ZXh0IiB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBvcGNvZGU6ICJ3aGVuQ2xpY2siLAogICAgICAgICAgICBibG9ja1R5cGU6IFNjcmF0Y2guQmxvY2tUeXBlLkVWRU5ULAogICAgICAgICAgICBpc0VkZ2VBY3RpdmF0ZWQ6IGZhbHNlLAogICAgICAgICAgICB0ZXh0OiAid2hlbiBhbnkgdGV4dCBjbGlja2VkIgogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgb3Bjb2RlOiAiY2xpY2tlZElEIiwKICAgICAgICAgICAgYmxvY2tUeXBlOiBTY3JhdGNoLkJsb2NrVHlwZS5SRVBPUlRFUiwKICAgICAgICAgICAgZGlzYWJsZU1vbml0b3I6IHRydWUsCiAgICAgICAgICAgIHRleHQ6ICJjbGlja2VkIHRleHQgSUQiCiAgICAgICAgICB9LAogICAgICAgIF0sCiAgICAgICAgbWVudXM6IHsKICAgICAgICAgIEZPTlRTOiB7IGFjY2VwdFJlcG9ydGVyczogdHJ1ZSwgaXRlbXM6ICJhbGxGb250cyIgfSwKICAgICAgICAgIFRPR0dMRTogWyJvbiIsICJvZmYiXSwKICAgICAgICAgIFRFWFRfQVRUOiBbImxldHRlciIsICJsaW5lIl0sCiAgICAgICAgICBQT1M6IFsieCBwb3NpdGlvbiIsICJ5IHBvc2l0aW9uIiwgInogbGF5ZXIiXSwKICAgICAgICAgIE9WRVJGTE9XOiBbInZpc2libGUiLCAiaGlkZGVuIl0sCiAgICAgICAgICBBUkNTOiBbImNpcmNsZSIsICJoaWxsIiwgImRpcCIsICJ3YXZlIl0sCiAgICAgICAgICBTVFlMRTogewogICAgICAgICAgICBhY2NlcHRSZXBvcnRlcnM6IHRydWUsCiAgICAgICAgICAgIGl0ZW1zOiBbInNvbGlkIiwgIndhdnkiLCAiZGFzaGVkIiwgImRvdWJsZSJdCiAgICAgICAgICB9LAogICAgICAgICAgTElORV9UWVBFOiB7IGFjY2VwdFJlcG9ydGVyczogdHJ1ZSwgaXRlbXM6IFsidW5kZXJsaW5lIiwgInN0cmlrZXRocm91Z2giXSB9LAogICAgICAgICAgQUxJR05NRU5UUzogeyBhY2NlcHRSZXBvcnRlcnM6IHRydWUsIGl0ZW1zOiBbImxlZnQiLCAicmlnaHQiLCAiY2VudGVyIl0gfSwKICAgICAgICAgIEdSQURJRU5UUzogeyBhY2NlcHRSZXBvcnRlcnM6IHRydWUsIGl0ZW1zOiBbImxpbmVhciIsICJyYWRpYWwiXSB9LAogICAgICAgICAgVEhJQ0s6IFsKICAgICAgICAgICAgeyB0ZXh0IDogInRoaWNrIiwgdmFsdWUgOiAiOTAwIiB9LAogICAgICAgICAgICB7IHRleHQgOiAibWVkaXVtIiwgdmFsdWUgOiAiNjAwIiB9LAogICAgICAgICAgICB7IHRleHQgOiAibm9uZSIsIHZhbHVlIDogIjEiIH0sCiAgICAgICAgICBdLAogICAgICAgICAgRk9STUFUUzogewogICAgICAgICAgICBhY2NlcHRSZXBvcnRlcnM6IHRydWUsCiAgICAgICAgICAgIGl0ZW1zOiBbCiAgICAgICAgICAgICAgeyB0ZXh0OiAiZm9udCIsIHZhbHVlOiAiZm9udEZhbWlseSIgfSwKICAgICAgICAgICAgICB7IHRleHQ6ICJmb250IHNpemUiLCB2YWx1ZTogImZvbnRTaXplIiB9LAogICAgICAgICAgICAgIHsgdGV4dDogImJvbGRuZXNzIiwgdmFsdWU6ICJmb250V2VpZ2h0IiB9LAogICAgICAgICAgICAgIHsgdGV4dDogImFsaWdubWVudCIsIHZhbHVlOiAidGV4dEFsaWduIiB9LAogICAgICAgICAgICAgIHsgdGV4dDogIm1hcmdpbiB3aWR0aCIsIHZhbHVlOiAid2lkdGgiIH0sCiAgICAgICAgICAgICAgeyB0ZXh0OiAibWFyZ2luIGhlaWdodCIsIHZhbHVlOiAiaGVpZ2h0IiB9LAogICAgICAgICAgICAgIHsgdGV4dDogImRpc3BsYXkgd2lkdGgiLCB2YWx1ZTogImJveDJ3IiB9LAogICAgICAgICAgICAgIHsgdGV4dDogImRpc3BsYXkgaGVpZ2h0IiwgdmFsdWU6ICJib3gyaCIgfSwKICAgICAgICAgICAgICB7IHRleHQ6ICJsZXR0ZXIgc3BhY2luZyIsIHZhbHVlOiAibGV0dGVyU3BhY2luZyIgfSwKICAgICAgICAgICAgICB7IHRleHQ6ICJsaW5lIHNwYWNpbmciLCB2YWx1ZTogImxpbmVIZWlnaHQiIH0sCiAgICAgICAgICAgICAgeyB0ZXh0OiAib3ZlcmZsb3cgdHlwZSIsIHZhbHVlOiAib3ZlcmZsb3ciIH0KICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIEVGRkVDVFM6IHsKICAgICAgICAgICAgYWNjZXB0UmVwb3J0ZXJzOiB0cnVlLAogICAgICAgICAgICBpdGVtczogWwogICAgICAgICAgICAgIHsgdGV4dDogImJsdXIiLCB2YWx1ZTogImJsdXIiIH0sCiAgICAgICAgICAgICAgeyB0ZXh0OiAic2F0dXJhdGlvbiIsIHZhbHVlOiAic2F0dXJhdGUiIH0sCiAgICAgICAgICAgICAgeyB0ZXh0OiAiY29udHJhc3QiLCB2YWx1ZTogImNvbnRyYXN0IiB9LAogICAgICAgICAgICAgIHsgdGV4dDogImJyaWdodG5lc3MiLCB2YWx1ZTogImJyaWdodG5lc3MiIH0sCiAgICAgICAgICAgICAgeyB0ZXh0OiAiaHVlIiwgdmFsdWU6ICJodWUtcm90YXRlIiB9LAogICAgICAgICAgICAgIHsgdGV4dDogIm9wYWNpdHkiLCB2YWx1ZTogIm9wYWNpdHkiIH0sCiAgICAgICAgICAgICAgeyB0ZXh0OiAic2VwaWEiLCB2YWx1ZTogInNlcGlhIiB9LAogICAgICAgICAgICAgIHsgdGV4dDogImludmVydCIsIHZhbHVlOiAiaW52ZXJ0IiB9LAogICAgICAgICAgICAgIHsgdGV4dDogImRpcmVjdGlvbiIsIHZhbHVlOiAicm90YXRlIiB9LAogICAgICAgICAgICAgIHsgdGV4dDogInNjYWxlIHgiLCB2YWx1ZTogInNjYWxlWCIgfSwKICAgICAgICAgICAgICB7IHRleHQ6ICJzY2FsZSB5IiwgdmFsdWU6ICJzY2FsZVkiIH0sCiAgICAgICAgICAgICAgeyB0ZXh0OiAic2tldyB4IiwgdmFsdWU6ICJza2V3WCIgfSwKICAgICAgICAgICAgICB7IHRleHQ6ICJza2V3IHkiLCB2YWx1ZTogInNrZXdZIiB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH07CiAgICB9CgogICAgLy8gSGVscGVyIEZ1bmNzCiAgICBhbGxGb250cygpIHsKICAgICAgY29uc3QgY3VzdG9tRm9udHMgPSBydW50aW1lLmZvbnRNYW5hZ2VyID8gcnVudGltZS5mb250TWFuYWdlci5nZXRGb250cygpLm1hcCgoaSkgPT4gKHsgdGV4dDogaS5uYW1lLCB2YWx1ZTogaS5mYW1pbHkgfSkpIDogW107CiAgICAgIHJldHVybiBbLi4uZm9udE1lbnUsIC4uLmN1c3RvbUZvbnRzXTsKICAgIH0KCiAgICBmaXhJRChJRCkgewogICAgICBJRCA9IHhtbEVzY2FwZShTY3JhdGNoLkNhc3QudG9TdHJpbmcoSUQpLnJlcGxhY2VBbGwoIiAiLCAiXyIpLnJlcGxhY2VBbGwoL1sjJSgpLC57fVsvXF0kQF4qJiciOzpdL2csICItIikpOwogICAgICB0eHRTZXR0aW5nc1tJRF0gPSB7IC4uLnR4dFNldHRpbmdzW0lEXSB9OwogICAgICByZXR1cm4gSUQ7CiAgICB9CgogICAgaGFuZGxlQ2xpY2soZSkgewogICAgICBjbGlja2VkVHh0cy5wdXNoKGUudGFyZ2V0LmNsYXNzTmFtZSk7CiAgICAgIGNvbnN0IGluZGV4ID0gY2xpY2tlZFR4dHMubGVuZ3RoIC0gMTsKICAgICAgY29uc3QgdGhyZWFkcyA9IHJ1bnRpbWUuc3RhcnRIYXRzKCJTUGRpc1RleHRfd2hlbkNsaWNrIik7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhyZWFkcy5sZW5ndGg7IGkrKykgdGhyZWFkc1tpXS5TUGRpc1R4dENsaWNrSUQgPSBlLnRhcmdldC5jbGFzc05hbWU7CiAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBjbGlja2VkVHh0cy5zcGxpY2UoaW5kZXgsIDEpIH0sIDEwMCk7CiAgICB9CgogICAgdXBkYXRlU3R5bGVzKHR4dFNldHRpbmcsIG9wdE92ZXJyaWRlTmFtZSkgewogICAgICBjb25zdCBwcm9wc2QyRnVuYyA9IFsKICAgICAgICBbInRleHRNQVIiLCAic2V0TWFyZ2lucyJdLCBbInByZVR4dDEiLCAicHJlc2V0VGV4dFBvc2l0aW9uIl0sCiAgICAgICAgWyJ0ZXh0Q0xSIiwgInNldFRleHRDb2xvciJdLCBbInRleHRMSU4iLCAic2V0TGluZSJdLAogICAgICAgIFsidGV4dE9VVCIsICJzZXRUZXh0T3V0bGluZSJdLCBbInRleHRTSEEiLCAic2V0VGV4dERyb3BTaGFkb3ciXSwKICAgICAgICBbInR4dEZvbnQiLCAic2V0VGV4dEZvbnQiXSwgWyJ0eHRGb250U1oiLCAic2V0Rm9udFNpemUiXSwKICAgICAgICBbInR4dEFMSSIsICJzZXRUZXh0QWxpZ25tZW50Il0sIFsibGluZURJUyIsICJzZXRUZXh0U3BhY2luZyJdLAogICAgICAgIFsibGV0RElTIiwgInNldFRleHRTcGFjaW5nIl0sIFsidGV4dE9WUiIsICJzZXRPdmVyZmxvdyJdLAogICAgICAgIFsidHh0Rm9udFRLIiwgInNldFRoaWNrIl0KICAgICAgXTsKICAgICAgaWYgKG9wdE92ZXJyaWRlTmFtZSkgewogICAgICAgIGZvciAoY29uc3QgW2lkLCBmdW5jXSBvZiBwcm9wc2QyRnVuYykgewogICAgICAgICAgaWYgKHR4dFNldHRpbmdbaWRdKSB0aGlzW2Z1bmNdKHsgLi4udHh0U2V0dGluZ1tpZF0sIElEOiBvcHRPdmVycmlkZU5hbWUgfSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGZvciAoY29uc3QgW2lkLCBmdW5jXSBvZiBwcm9wc2QyRnVuYykgewogICAgICAgICAgaWYgKHR4dFNldHRpbmdbaWRdKSB0aGlzW2Z1bmNdKHR4dFNldHRpbmdbaWRdKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICAvLyBCbG9jayBGdW5jcwogICAgZGVidWcoYXJncykgewogICAgICBjb25zdCB0b2dnbGUgPSBhcmdzLlRPR0dMRSA9PT0gIm9uIiA/ICJzb2xpZCIgOiAibm9uZSI7CiAgICAgIGNvbnN0IGVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgZGl2W2lkXj0iU1BfVGV4dC1FeHQtIl1gKTsKICAgICAgZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4gewogICAgICAgIGVsZW1lbnQuc3R5bGUuYm9yZGVyID0gdG9nZ2xlOyBlbGVtZW50LnN0eWxlLmJvcmRlcldpZHRoID0gIjFweCI7CiAgICAgICAgZWxlbWVudC5zdHlsZS5ib3JkZXJDb2xvciA9IGVsZW1lbnQuc3R5bGUudGV4dEFsaWduID09PSAiY2VudGVyIiA/ICIjMDBmZjAwIiA6IGVsZW1lbnQuc3R5bGUudGV4dEFsaWduID09PSAicmlnaHQiID8gImJsdWUiIDogInJlZCI7CiAgICAgIH0pOwogICAgICBjb25zdCBjcm9zcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBTUF9UZXh0LURlYnVnLUNyb3NzYCk7CiAgICAgIGlmICh0b2dnbGUgPT09ICJub25lIiAmJiBjcm9zcykgY3Jvc3MucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjcm9zcyk7CiAgICAgIGVsc2UgaWYgKHRvZ2dsZSA9PT0gInNvbGlkIiAmJiAhY3Jvc3MpIHsKICAgICAgICBjb25zdCBjcm9zc0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKTsKICAgICAgICBjcm9zc0VsZW1lbnQuc3JjID0gCiAgICAgICAgICAiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUE4QUFBQUxRQ0FZQUFBQmZkeG0wQUFBQUFYTlNSMElBcnM0YzZRQUFJQUJKUkVGVWVGN3QzYit1YlBsMjNmZlRnQ00vaEtqWXFVS0JFZC9Bb1JLREJuRURaWXdFUFlHZ2lCbURDOElYVGhqNkRSUVJDcDA2RnZVUWpneTB3ZHU5cis2cDd0MXJyVkZ6MTU4NVBoMlJ0OVp2MWhyZnNlYWNOVTZkdmM4UDMvN2R2Ly94bS84UVFBQUJCQkJBQUFFRUVFQUFBUVFRV0U3Z0J3RjR1Y1BrSVlBQUFnZ2dnQUFDQ0NDQUFBSUkvSkhBL3dqQS8vajNQMkJ5bmNBLy8vTS8vL0ViOUwvNGk3L0E3em8rSjVZVDBCL0xEU2J2RW9HLy9wdmZuZm9iVjMvNGg5L2JKNWZJdW5nVEFYdGprNXUwZkJVQmZSS1MvZmx2UGd2QUliK1BZeDdBT3dFNnZwcUEvbGh0TDNFWENRakFGNEc1dkpLQXZWRnBPOUVYQ2VpVGk4QStMaGVBUTNBM3h6eUFNeHhWMlVsQWYrejBsYXI3Q0h3V2hIM3pleDlYcDNjUXNEZDIrRWpGMXhMUUp5RmZBVGdFSndEUGdGT2xnb0FCWFdFemtSY0pDTUFYZ2JtOGlvQzlVV1Uzc1NFQmZSS0NFNEJEY0FMd0REaFZLZ2dZMEJVMkV4a1MrQy9mZnZ6anp3VC8xYmNmL014dnlOQ3hmUVRzalgyZVVqUlBRSitFVEFYZ0VKd0FQQU5PbFFvQ0JuU0Z6VVNHQkFUZ0VKeGpxd25ZRzZ2dEpXNklnRDRKUVFyQUlUZ0JlQWFjS2hVRURPZ0ttNGtNQ1FqQUlUakhWaE93TjFiYlM5d1FBWDBTZ2hTQVEzQUM4QXc0VlNvSUdOQVZOaE1aRWhDQVEzQ09yU1pnYjZ5Mmw3Z2hBdm9rQkNrQWgrQUU0Qmx3cWxRUU1LQXJiQ1l5SkhCdkFMNzlaVnAraTNSb3hKc2UyK3EvdmZHbUQ2VGJmaWdCZlJMaUZvQkRjQUx3RERoVktnZ1kwQlUyRXhrU0VJQkRjSTc5a1lBQTdFRkFvSmVBejFlaDl3SndDRTRBbmdHblNnVUJBN3JDWmlKREFta0FQaHQ4ZnZ5bmIzLzhMZE1mLy8zd2w5KysrMjNUUjYrZmxYVmI1L2JjN2Z1ZXJmdkI1K1A2MjkrV2ZmVDYyZmY1dUM2dGQzdnU5bjJQZnN2M3ZlZlBQZzlYZVR6cmVudmpXZVM5N3pzUjBDZWhXd0p3Q0U0QW5nR25TZ1VCQTdyQ1ppSkRBZ0x3YjRNN0NxUkhyMSsxSmExM2I0Qzk5N3dBZk5WcDF5UHcvZ1I4dmdvOUZJQkRjQUx3RERoVktnZ1kwQlUyRXhrU2VQY0FmUFFOOHRIclI5aU9BdW5SNjBmMVAxNy9MSUJlL2ViMjZqZlVSL2QvOVBySC9RdkFaNTEySFFKN0NQaDhGWG9wQUlmZ0JPQVpjS3BVRURDZ0syd21NaVFnQUwvR044QUNjUGdBZjlFeGUrT0x3Q3E3aW9BK0NlMFVnRU53QXZBTU9GVXFDQmpRRlRhL3JjaXozN0I5Sm5EcS9ORTNqZmQrMDVmK2pPN1JON2ozdm43MndVbi9pdkJWZjZhdlA2cDM3K3UzL0xaOEUyeHZuTzBNMXpVVDBDZWgrd0p3Q0U0QW5nR25TZ1VCQTdyQzVyY1ZlUlJBam9STm5SZUFyMzBUZkh2MVoveXUrak45L1ZHOWUxOFhnSTg2MU9zSTdDWGc4MVhvclFBY2doT0FaOENwVWtIQWdLNncrZTFGSGdXUlc0Rlhyei82QnZtckEvREgreDk5WTN0N24wZlgzL3Y2MlFmblZiOEIvcmovcjdxL3E4K1piNERQUGxHdVErRDlDZmg4Rlhvb0FJZmdCT0FaY0twVUVEQ2dLMngrZTVGWGc4YlY2d1hnbndoTS9YTkl0enlmOVEyd0FQdzFyVzl2ZkExWFZYY1IwQ2VobndKd0NFNEFuZ0duU2dVQkE3ckM1cmNYZVRYUVhyMytYUVB3a2JHUCtnYjRzNkI1OXB2ekl4MXAvYVBuNEt0ZnY5WGxHK0N6VHJzT2dmY240UE5WNktFQUhJSVRnR2ZBcVZKQndJQ3VzUG50UlI0RmxWdUJWNjhYZ0g4aWtINERuQWJVcXcvbVZWK1Bydi9xMXdYZ3F3NjdIb0U5Qkh5K0NyMFVnRU53QXZBTU9GVXFDQmpRRlRhdkVYbHZZTGtLNHVvL2c1Uit3NWYrRnVnalBiNEIvdkhIUDJmMHJIOEgrT01lMHVmanlPZEh2MjV2UEpxNDkzdEhBdm9rZEUwQURzRUp3RFBnVktrZ1lFQlgyTHhHcEFCOHpVb0JXQUMrOXNTY3U5cmVPTWZKVmQwRTlFbm92d0FjZ2hPQVo4Q3BVa0hBZ0s2d2VaM0k5TGY2WGdYeDFkOEEzeHRRdi9yODFXOHNqLzZBNHBiL3M2OC9ldjk3WDcvVmU1WG4xZWYxVWRmYkc0OGk3WDNlbVlBK0NkMFRnRU53QXZBTU9GVXFDQmpRRlRhdkV5a0EvMlNwQVB6REQ3LzFjTjhiWU84OUx3Q3ZHejBFSVhDYWdNOVhwMUY5ZjZFQUhJSVRnR2ZBcVZKQndJQ3VzSG10eUtPQWNxL3dxOThBZjd6ZjJXLzZ2anJBZnR4UCtqUEdaM1Y4dk05VlA4NWVmKzhmZUR6Ny9GV085ejYzWDMzZTN2aHF3dXB2SUtCUFFoY0Y0QkNjQUR3RFRwVUtBZ1owaGMxclJaNE5VQ2tBQWZoMzMvMFNxVC84dysvditzYjExb2V6L2owN3dONzcvZ0p3Mm9IT0lmQytCSHkrQ3IwVGdFTndBdkFNT0ZVcUNCalFGVGF2RlhrMlFLVUF2am9BcC9mMXFIUGJndHVqdU4yK3p6YU85c2F6bmlUdiswNEU5RW5vbGdBY2doT0FaOENwVWtIQWdLNndlYTFJQWZocnJkMFczTDZXMXVmVnQzRzBONTcxSkhuZmR5S2dUMEszQk9BUW5BQThBMDZWQ2dJR2RJWE5hMFcrYWdEK0FQN3V3ZWZqL28vKzZ2UGFCK3hPWWUvdS8yZnk3WTA3SHd6SEt3am9rOUJtQVRnRUp3RFBnRk9sZ29BQlhXSHpXcEVDOE5kYUt3RGZ4MWNBdm8rZjB3aThNd0dmcjBMM0JPQVFuQUE4QTA2VkNnSUdkSVhOYTBXK2VnQmVDNTZ3YWdMMlJyWDl4Sjhrb0U5T2dycTlUQUFPd1FuQU0rQlVxU0JnUUZmWXZGYWtBTHpXV3NKZW1JQzk4Y0xtdUxXWElhQlBRaXNFNEJDY0FEd0RUcFVLQWdaMGhjMXJSUXJBYTYwbDdJVUoyQnN2Ykk1YmV4a0MraVMwUWdBT3dRbkFNK0JVcVNCZ1FGZll2RmFrQUx6V1dzSmVtSUM5OGNMbXVMV1hJYUJQUWlzRTRCQ2NBRHdEVHBVS0FnWjBoYzFFaGdUU2Z3YzRmRHZIRUhnTEF2YkdXOWprSnA5TVFKK0VCZ2pBSVRnQmVBYWNLaFVFRE9nS200a01DUWpBSVRqSFZoT3dOMWJiUzl3UUFYMFNnaFNBUTNBQzhBdzRWU29JR05BVk5oTVpFaENBUTNDT3JTWmdiNnkybDdnaEF2b2tCQ2tBaCtBRTRCbHdxbFFRTUtBcmJDWXlKQ0FBaCtBY1cwM0EzbGh0TDNGREJQUkpDRklBRHNFSndEUGdWS2tnWUVCWDJFeGtTRUFBRHNFNXRwcUF2YkhhWHVLR0NPaVRFS1FBSElJVGdHZkFxVkpCd0lDdXNKbklrSUFBSElKemJEVUJlMk8xdmNRTkVkQW5JVWdCT0FRbkFNK0FVNldDZ0FGZFlUT1JJUUVCT0FUbjJHb0M5c1pxZTRrYklxQlBRcEFDY0FoT0FKNEJwMG9GQVFPNndtWWlRd0lDY0FqT3NkVUU3STNWOWhJM1JFQ2ZoQ0FGNEJDY0FEd0RUcFVLQWdaMGhjMUVoZ1FFNEJDY1k2c0oyQnVyN1NWdWlJQStDVUVLd0NFNEFYZ0duQ29WQkF6b0NwdUpEQWtJd0NFNHgxWVRzRGRXMjB2Y0VBRjlFb0lVZ0VOd0F2QU1PRlVxQ0JqUUZUWVRHUklRZ0VOd2pxMG1ZRytzdHBlNElRTDZKQVFwQUlmZ0JPQVpjS3BVRURDZ0syd21NaVFnQUlmZ0hGdE53TjVZYlM5eFF3VDBTUWhTQUE3QkNjQXo0RlNwSUdCQVY5aE1aRWhBQUE3Qk9iYWFnTDJ4Mmw3aWhnam9reENrQUJ5Q0U0Qm53S2xTUWNDQXJyQ1p5SkNBQUJ5Q2MydzFBWHRqdGIzRURSSFFKeUZJQVRnRUp3RFBnRk9sZ29BQlhXRXprU0VCQVRnRTU5aHFBdmJHYW51Skd5S2dUMEtRQW5BSVRnQ2VBYWRLQlFFRHVzSm1Ja01DQW5BSXpySFZCT3lOMWZZU04wUkFuNFFnQmVBUW5BQThBMDZWQ2dJR2RJWE5SSVlFQk9BUW5HT3JDZGdicSswbGJvaUFQZ2xCQ3NBaE9BRjRCcHdxRlFRTTZBcWJpUXdKQ01BaE9NZFdFN0EzVnR0TDNCQUJmUktDRklCRGNBTHdERGhWS2dnWTBCVTJFeGtTRUlCRGNJNnRKbUJ2ckxhWHVDRUMraVFFS1FDSDRBVGdHWENxVkJBd29DdHNKaklrSUFDSDRCeGJUY0RlV0cwdmNVTUU5RWtJVWdBT3dRbkFNK0JVcVNCZ1FGZllUR1JJUUFBT3dUbTJtb0M5c2RwZTRvWUk2Sk1RcEFBY2doT0FaOENwVWtIQWdLNndtY2lRZ0FBY2duTnNOUUY3WTdXOXhBMFIwQ2NoU0FFNEJDY0F6NEJUcFlLQUFWMWhNNUVoQVFFNEJPZllhZ0wyeG1wN2lSc2lvRTlDa0FKd0NFNEFuZ0duU2dVQkE3ckNaaUpEQWdKd0NNNngxUVRzamRYMkVqZEVRSitFSUFYZ0VKd0FQQU5PbFFvQ0JuU0Z6VVNHQkFUZ0VKeGpxd25ZRzZ2dEpXNklnRDRKUVFyQUlUZ0JlQWFjS2hVRURPZ0ttNGtNQ1FqQUlUakhWaE93TjFiYlM5d1FBWDBTZ2hTQVEzQUM4QXc0VlNvSUdOQVZOaE1aRWhDQVEzQ09yU1pnYjZ5Mmw3Z2hBdm9rQkNrQWgrQUU0Qmx3cWxRUU1LQXJiQ1l5SkNBQWgrQWNXMDNBM2xodEwzRkRCUFJKQ0ZJQURzRUp3RFBnVktrZ1lFQlgyRXhrU0VBQURzRTV0cHFBdmJIYVh1S0dDT2lURUtRQUhJSVRnR2ZBcVZKQndJQ3VzSm5Ja0lBQUhJSnpiRFVCZTJPMXZjUU5FZEFuSVVnQk9BUW5BTStBVTZXQ2dBRmRZVE9SSVFFQk9BVG4yR29DOXNacWU0a2JJcUJQUXBBQ2NBaE9BSjRCcDBvRkFRTzZ3bVlpUXdJQ2NBak9zZFVFN0kzVjloSTNSRUNmaENBRjRCQ2NBRHdEVHBVS0FnWjBoYzFFaGdRRTRCQ2NZNnNKMkJ1cjdTVnVpSUErQ1VFS3dDRTRBWGdHbkNvVkJBem9DcHVKREFrSXdDRTR4MVlUc0RkVzIwdmNFQUY5RW9JVWdFTndBdkFNT0ZVcUNCalFGVFlUR1JJUWdFTndqcTBtWUcrc3RwZTRJUUw2SkFRcEFJZmdCT0FaY0twVUVEQ2dLMndtTWlRZ0FJZmdIRnROd041WWJTOXhRd1QwU1FoU0FBN0JDY0F6NEZTcElHQkFWOWhNWkVoQUFBN0JPYmFhZ0wyeDJsN2loZ2pva3hDa0FCeUNFNEJud0tsU1FjQ0FyckNaeUpDQUFCeUNjMncxQVh0anRiM0VEUkhRSnlGSUFUZ0VKd0RQZ0ZPbGdvQUJYV0V6a1NFQkFUZ0U1OWhxQXZiR2FudUpHeUtnVDBLUUFuQUlUZ0NlQWFkS0JRRUR1c0ptSWtNQ0FuQUl6ckhWQk95TjFmWVNOMFJBbjRRZ0JlQVFuQUE4QTA2VkNnSUdkSVhOUklZRUJPQVFuR09yQ2RnYnErMGxib2lBUGdsQkNzQWhPQUY0QnB3cUZRUU02QXFiaVF3SkNNQWhPTWRXRTdBM1Z0dEwzQkFCZlJLQ0ZJQkRjQUx3RERoVktnZ1kwQlUyRXhrU0VJQkRjSTZ0Sm1CdnJMYVh1Q0VDK2lRRUtRQ0g0QVRnR1hDcVZCQXdvQ3RzSmpJa0lBQ0g0QnhiVGNEZVdHMHZjVU1FOUVrSVVnQU93UW5BTStCVXFTQmdRRmZZVEdSSVFBQU93VG0ybW9DOXNkcGU0b1lJNkpNUXBBQWNnaE9BWjhDcFVrSEFnSzZ3bWNpUWdBQWNnbk5zTlFGN1k3Vzl4QTBSMENjaFNBRTRCQ2NBejRCVHBZS0FBVjFoTTVFaEFRRTRCT2ZZYWdMMnhtcDdpUnNpb0U5Q2tBSndDRTRBbmdHblNnVUJBN3JDWmlKREFnSndDTTZ4MVFUc2pkWDJFamRFUUorRUlBWGdFSndBUEFOT2xRb0NCblNGelVTR0JBVGdFSnhqcXduWUc2dnRKVzZJZ0Q0SlFRckFJVGdCZUFhY0toVUVET2dLbTRrTUNRakFJVGpIVmhPd04xYmJTOXdRQVgwU2doU0FRM0FDOEF3NFZTb0lHTkFWTmhNWkVoQ0FRM0NPclNaZ2I2eTJsN2doQXZva0JDa0FoK0FFNEJsd3FsUVFNS0FyYkNZeUpDQUFoK0FjVzAzQTNsaHRMM0ZEQlBSSkNGSUFEc0VKd0RQZ1ZLa2dZRUJYMkV4a1NFQUFEc0U1dHBxQXZiSGFYdUtHQ09pVEVLUUFISUlUZ0dmQXFWSkJ3SUN1c0puSWtJQUFISUp6YkRVQmUyTzF2Y1FORWRBbklVZ0JPQVFuQU0rQVU2V0NnQUZkWVRPUklRRUJPQVRuMkdvQzlzWnFlNGtiSXFCUFFwQUNjQWhPQUo0QnAwb0ZBUU82d21ZaVF3SUNjQWpPc2RVRTdJM1Y5aEkzUkVDZmhDQUY0QkNjQUR3RFRwVUtBZ1owaGMxRWhnUUU0QkNjWTZzSjJCdXI3U1Z1aUlBK0NVRUt3Q0U0QVhnR25Db1ZCQXpvQ3B1SkRBa0l3Q0U0eDFZVHNEZFcyMHZjRUFGOUVvSVVnRU53QXZBTU9GVXFDQmpRRlRZVEdSSVFnRU53anEwbVlHK3N0cGU0SVFMNkpBUXBBSWZnQk9BWmNLcFVFRENnSzJ3bU1pUWdBSWZnSEZ0TndONVliUzl4UXdUMFNRaFNBQTdCQ2NBejRGU3BJR0JBVjloTVpFaEFBQTdCT2JhYWdMMngybDdpaGdqb2t4Q2tBQnlDRTRCbndLbFNRY0NBcnJDWnlKQ0FBQnlDYzJ3MUFYdGp0YjNFRFJIUUp5RklBVGdFSndEUGdGT2xnb0FCWFdFemtTRUJBVGdFNTlocUF2YkdhbnVKR3lLZ1QwS1FBbkFJVGdDZUFhZEtCUUVEdXNKbUlrTUNBbkFJenJIVkJPeU4xZllTTjBSQW40UWdCZUFRbkFBOEEwNlZDZ0lHZElYTlJJWUVCT0FRbkdPckNkZ2JxKzBsYm9pQVBnbEJDc0FoT0FGNEJwd3FGUVFNNkFxYmlRd0pDTUFoT01kV0U3QTNWdHRMM0JBQmZSS0NGSUJEY0FMd0REaFZLZ2dZMEJVMkV4a1NFSUJEY0k2dEptQnZyTGFYdUNFQytpUUVLUUNINEFUZ0dYQ3FWQkF3b0N0c0pqSWtJQUNINEJ4YlRjRGVXRzB2Y1VNRTlFa0lVZ0FPd1FuQU0rQlVxU0JnUUZmWVRHUklRQUFPd1RtMm1vQzlzZHBlNG9ZSTZKTVFwQUFjZ2hPQVo4Q3BVa0hBZ0s2d21jaVFnQUFjZ25Oc05RRjdZN1c5eEEwUjBDY2hTQUU0QkNjQXo0QlRwWUtBQVYxaE01RWhBUUU0Qk9mWWFnTDJ4bXA3aVJzaW9FOUNrQUp3Q0U0QW5nR25TZ1VCQTdyQ1ppSkRBZ0p3Q002eDFRVHNqZFgyRWpkRVFKK0VJQVhnRUp3QVBBTk9sUW9DQm5TRnpVU0dCQVRnRUp4anF3bllHNnZ0Slc2SWdENEpRUXJBSVRnQmVBYWNLaFVFRE9nS200a01DUWpBSVRqSFZoT3dOMWJiUzl3UUFYMFNnaFNBUTNBQzhBdzRWU29JR05BVk5oTVpFaENBUTNDT3JTWmdiNnkybDdnaEF2b2tCQ2tBaCtBRTRCbHdxbFFRTUtBcmJDWXlKQ0FBaCtBY1cwM0EzbGh0TDNGREJQUkpDRklBRHNFSndEUGdWS2tnWUVCWDJFeGtTRUFBRHNFNXRwcUF2YkhhWHVLR0NPaVRFS1FBSElJVGdHZkFxVkpCd0lDdXNKbklrSUFBSElKemJEVUJlMk8xdmNRTkVkQW5JVWdCT0FRbkFNK0FVNldDZ0FGZFlUT1JJUUVCT0FUbjJHb0M5c1pxZTRrYklxQlBRcEFDY0FoT0FKNEJwMG9GQVFPNndtWWlRd0lDY0FqT3NkVUU3STNWOWhJM1JFQ2ZoQ0FGNEJDY0FEd0RUcFVLQWdaMGhjMUVoZ1FFNEJDY1k2c0oyQnVyN1NWdWlJQStDVUVLd0NFNEFYZ0duQ29WQkF6b0NwdUpEQWtJd0NFNHgxWVRzRGRXMjB2Y0VBRjlFb0lVZ0VOd0F2QU1PRlVxQ0JqUUZUWVRHUklRZ0VOd2pxMG1ZRytzdHBlNElRTDZKQVFwQUlmZ0JPQVpjS3BVRURDZ0syd21NaVFnQUlmZ0hGdE53TjVZYlM5eFF3VDBTUWhTQUE3QkNjQXo0RlNwSUdCQVY5aE1aRWhBQUE3Qk9iYWFnTDJ4Mmw3aWhnam9reENrQUJ5Q0U0Qm53S2xTUWNDQXJyQ1p5SkNBQUJ5Q2MydzFBWHRqdGIzRURSSFFKeUZJQVRnRUp3RFBnRk9sZ29BQlhXRXprU0VCQVRnRTU5aHFBdmJHYW51Skd5S2dUMEtRQW5BSVRnQ2VBYWRLQlFFRHVzSm1Ja01DQW5BSXpySFZCT3lOMWZZU04wUkFuNFFnQmVBUW5BQThBMDZWQ2dJR2RJWE5SSVlFQk9BUW5HT3JDZGdicSswbGJvaUFQZ2xCQ3NBaE9BRjRCcHdxRlFRTTZBcWJpUXdKQ01BaE9NZFdFN0EzVnR0TDNCQUJmUktDRklCRGNBTHdERGhWS2dnWTBCVTJFeGtTRUlCRGNJNnRKbUJ2ckxhWHVDRUMraVFFS1FDSDRBVGdHWENxVkJBd29DdHNKaklrSUFDSDRCeGJUY0RlV0cwdmNVTUU5RWtJVWdBT3dRbkFNK0JVcVNCZ1FGZllUR1JJUUFBT3dUbTJtb0M5c2RwZTRvWUk2Sk1RcEFBY2doT0FaOENwVWtIQWdLNndtY2lRZ0FBY2duTnNOUUY3WTdXOXhBMFIwQ2NoU0FFNEJDY0F6NEJUcFlLQUFWMWhNNUVoQVFFNEJPZllhZ0wyeG1wN2lSc2lvRTlDa0FKd0NFNEFuZ0duU2dVQkE3ckNaaUpEQWdKd0NNNngxUVRzamRYMkVqZEVRSitFSUFYZ0VKd0FQQU5PbFFvQ0JuU0Z6VVNHQkFUZ0VKeGpxd25ZRzZ2dEpXNklnRDRKUVFyQUlUZ0JlQWFjS2hVRURPZ0ttNGtNQ1FqQUlUakhWaE93TjFiYlM5d1FBWDBTZ2hTQVEzQUM4QXc0VlNvSUdOQVZOaE1aRWhDQVEzQ09yU1pnYjZ5Mmw3Z2hBdm9rQkNrQWgrQUU0Qmx3cWxRUU1LQXJiQ1l5SkNBQWgrQWNXMDNBM2xodEwzRkRCUFJKQ0ZJQURzRUp3RFBnVktrZ1lFQlgyRXhrU0VBQURzRTV0cHFBdmJIYVh1S0dDT2lURUtRQUhJSVRnR2ZBcVZKQndJQ3VzSm5Ja0lBQUhJSnpiRFVCZTJPMXZjUU5FZEFuSVVnQk9BUW5BTStBVTZXQ2dBRmRZVE9SSVFFQk9BVG4yR29DOXNacWU0a2JJcUJQUXBBQ2NBaE9BSjRCcDBvRkFRTzZ3bVlpUXdJQ2NBak9zZFVFN0kzVjloSTNSRUNmaENBRjRCQ2NBRHdEVHBVS0FnWjBoYzFFaGdRRTRCQ2NZNnNKMkJ1cjdTVnVpSUErQ1VFS3dDRTRBWGdHbkNvVkJBem9DcHVKREFrSXdDRTR4MVlUc0RkVzIwdmNFQUY5RW9JVWdFTndBdkFNT0ZVcUNCalFGVFlUR1JJUWdFTndqcTBtWUcrc3RwZTRJUUw2SkFRcEFJZmdCT0FaY0twVUVEQ2dLMndtTWlRZ0FJZmdIRnROd041WWJTOXhRd1QwU1FoU0FBN0JDY0F6NEZTcElHQkFWOWhNWkVoQUFBN0JPYmFhZ0wyeDJsN2loZ2pva3hDa0FCeUNFNEJud0tsU1FjQ0FyckNaeUpDQUFCeUNjMncxQVh0anRiM0VEUkhRSnlGSUFUZ0VKd0RQZ0ZPbGdvQUJYV0V6a1NFQkFUZ0U1OWhxQXZiR2FudUpHeUtnVDBLUUFuQUlUZ0NlQWFkS0JRRUR1c0ptSWtNQ0FuQUl6ckhWQk95TjFmWVNOMFJBbjRRZ0JlQVFuQUE4QTA2VkNnSUdkSVhOUklZRUJPQVFuR09yQ2RnYnErMGxib2lBUGdsQkNzQWhPQUY0QnB3cUZRUU02QXFiaVF3SkNNQWhPTWRXRTdBM1Z0dEwzQkFCZlJLQ0ZJQkRjQUx3RERoVktnZ1kwQlUyRXhrU0VJQkRjSTZ0Sm1CdnJMYVh1Q0VDK2lRRUtRQ0g0QVRnR1hDcVZCQXdvQ3RzSmpJa0lBQ0g0QnhiVGNEZVdHMHZjVU1FOUVrSVVnQU93UW5BTStCVXFTQmdRRmZZVEdSSVFBQU93VG0ybW9DOXNkcGU0b1lJNkpNUXBBQWNnaE9BWjhDcFVrSEFnSzZ3bWNpUWdBQWNnbk5zTlFGN1k3Vzl4QTBSMENjaFNBRTRCQ2NBejRCVHBZS0FBVjFoTTVFaEFRRTRCT2ZZYWdMMnhtcDdpUnNpb0U5Q2tBSndDRTRBbmdHblNnVUJBN3JDWmlKREFnSndDTTZ4MVFUc2pkWDJFamRFUUorRUlBWGdFSndBUEFOT2xRb0NCblNGelVTR0JBVGdFSnhqcXduWUc2dnRKVzZJZ0Q0SlFRckFJVGdCZUFhY0toVUVET2dLbTRrTUNRakFJVGpIVmhPd04xYmJTOXdRQVgwU2dyd053UC84bi81RFdNa3hCQkJBQUFFRUVMaEs0Ry8vOXIvOThjamYvZDIvdm5yVTlRZ2dnQUFDQ0NCd2tjQmYvTWYvL01jVFAzejdPUWtMd0JjSnVod0JCQkJBQUlFN0NBakFkOEJ6RkFFRUVFQUFnWXNFZmhHQXYvM2ozLzl3c1liTHYzMzc1cThnZUF3UStKeUEvdkIwSVBBNUFYOEYydE9Cd0M4SjJCdWVDZ1NPQ2VpVFkwYS9lb1dmQVE3QjNSenpBTTV3VkdVbkFmMngwMWVxWmdnSXdETWNWZGxGd043WTVTYzFYME5BbjRSY0JlQVFuQUE4QTA2VkNnSUdkSVhOUklZRUJPQVFuR09yQ2RnYnErMGxib2lBUGdsQkNzQWhPQUY0QnB3cUZRUU02QXFiaVF3SkNNQWhPTWRXRTdBM1Z0dEwzQkFCZlJLQ0ZJQkRjQUx3RERoVktnZ1kwQlUyMTR2OHIvLzA0NC8vQXVIZi91VVBsMzZYaGdCYy8rZ0E4Q3NFN0EyUEJRTEhCUFRKTWFOZnZVSUFEc0VKd0RQZ1ZLa2dZRUJYMkZ3dlVnQ3Vmd1FBR0NSZ2J3ekNWR290QVgwU1dpc0FoK0FFNEJsd3FsUVFNS0FyYks0VCtSRjRqNFFmZlNQc0crQWpnbDV2SkdCdk5McE84MVVDK3VRcXNaK3ZGNEJEY0FMd0REaFZLZ2dZMEJVMjE0a1VnT3NzSi9pQkJPeU5COEwyVm05TFFKK0UxZ25BSVRnQmVBYWNLaFVFRE9nS20ydEUzZ2JmMjI5NFB3dkduMzBUN0J2Z21rZUgwQXNFN0kwTHNGeGFTMENmaE5ZTHdDRTRBWGdHbkNvVkJBem9DcHRyUkFyQU5WWVQra1FDOXNZVDRYdnJ0eUdnVDBLckJPQVFuQUE4QTA2VkNnSUdkSVhOTlNLUEF2QUhpTFBYK1FhNDV0RWg5QUlCZStNQ0xKZldFdEFub2ZVQ2NBaE9BSjRCcDBvRkFRTzZ3dVlha1dlRDdkbnJCT0NhUjRmUUN3VHNqUXV3WEZwTFFKK0UxZ3ZBSVRnQmVBYWNLaFVFRE9nS20ydEVuZzIyWjM4V1dBQ3VlWFFJdlVEQTNyZ0F5NlcxQlBSSmFMMEFISUlUZ0dmQXFWSkJ3SUN1c0xsR3BBQmNZeldoVHlSZ2J6d1J2cmQrR3dMNkpMUktBQTdCQ2NBejRGU3BJR0JBVjlpOFR1UkgwUDNzdHplblFmaTJubStBMXowNkJBMFFzRGNHSUNxeG5vQStDUzBXZ0VOd0F2QU1PRlVxQ0JqUUZUYXZFeWtBcjdPVW9EY2lZRys4a1ZsdTlXa0U5RW1JWGdBT3dRbkFNK0JVcVNCZ1FGZlkvUFlpUC91WjNWdGhIOS9nbnYwWjM2TnZpbjBEL1BhUERnRmZRTURlK0FLb1NxNGpvRTlDU3dYZ0VKd0FQQU5PbFFvQ0JuU0Z6Vzh2VWdCK2V3c0pXRVRBM2xoa0ppbGZSa0NmaEdnRjRCQ2NBRHdEVHBVS0FnWjBoYzF2Sy9Mb0c5cWpiM3F2QnVkYlVMNEJmdHRIeDQxL0lRRjc0d3ZoS3IyR2dENEpyUlNBUTNBQzhBdzRWU29JR05BVk5yK3RTQUg0YmExejQ0c0oyQnVMelNWdGpJQStDVkVLd0NFNEFYZ0duQ29WQkF6b0NwdmZWdVJSQVA0UWR2VzZ6MzU3dEcrQTMvWlJjZU1QSkdCdlBCQzJ0M3BiQXZva3RFNEFEc0VKd0RQZ1ZLa2dZRUJYMlB5MklxOEcydytoUi84OGtnRDh0bytFRzM4QkF2YkdDNWpnRmw2ZWdENEpMUktBUTNBQzhBdzRWU29JR05BVk5yK3R5RFFBSHdYaHMwRDhEUEJaVXE1ckltQnZOTGxOYTBwQW40VGtCT0FRbkFBOEEwNlZDZ0lHZElYTmJ5dFNBSDViNjl6NFlnTDJ4bUp6U1Jzam9FOUNsQUp3Q0U0QW5nR25TZ1VCQTdyQzVwY1JlVGJRM3Q3dzJYTm5yenNMeERmQVowbTVyb21BdmRIa05xMHBBWDBTa2hPQVEzQUM4QXc0VlNvSUdOQVZOcitNeURTZ25qMTM5cnF6UUFUZ3M2UmMxMFRBM21oeW05YVVnRDRKeVFuQUlUZ0JlQWFjS2hVRURPZ0ttMTlHNU5HLzIvdlpqWjQ5SndDL2pOVnVaREVCZTJPeHVhU05FZEFuSVVvQk9BUW5BTStBVTZXQ2dBRmRZZlBMaUR3YlpHOXYrT3c1QWZobHJIWWppd25ZRzR2TkpXMk1nRDRKVVFyQUlUZ0JlQWFjS2hVRURPZ0ttNTh1OHJNQWUzdGpSLzg4MFZTZHMwRDhGZWl6cEZ6WFJNRGVhSEtiMXBTQVBnbkpDY0FoT0FGNEJwd3FGUVFNNkFxYm55NXlLcmhPMVRrTFJBQStTOHAxVFFUc2pTYTNhVTBKNkpPUW5BQWNnaE9BWjhDcFVrSEFnSzZ3K2VraVA0THI3VGU4OS82VjVjL3FUZ2tXZ0tkSXFyT0pnTDJ4eVUxYXZvcUFQZ25KQ3NBaE9BRjRCcHdxRlFRTTZBcWJueTVTQUg2NkJXNEFnVEVDOXNZWVNvVVdFOUFub2JrQ2NBaE9BSjRCcDBvRkFRTzZ3dWFYRi9uWk44RmYvUTN2RVJqZkFCOFI4bm9qQVh1ajBYV2FyeExRSjFlSi9YeTlBQnlDRTRCbndLbFNRY0NBcnJENTVVVUt3Qzl2a1J0RTRFOEU3QTBQQXdMSEJQVEpNYU5mdlVJQURzRUp3RFBnVktrZ1lFQlgyUHp5SWgvOXk2M09BdkVOOEZsU3Jtc2lZRzgwdVUxclNrQ2ZoT1FFNEJDY0FEd0RUcFVLQWdaMGhjMHZMMUlBZm5tTDNDQUN2Z0gyRENCd2dZRFBWeGRnL2ZtbEFuQUlUZ0NlQWFkS0JRRUR1c0xtbHhmNVdRQSsrbmVCdjFxWWI0Qy9tckQ2NzBqQTNuaEgxOXp6b3dub2s1QzRBQnlDRTRCbndLbFNRY0NBcnJENTVVVUt3Qzl2a1J0RXdEZkFuZ0VFTGhEdytlb0NMTjhBaDdCKzQ1Z0hjSjZwaW5zSTZJODlYcjZqa252L0hlQ3YxdXdiNEs4bXJQNDdFckEzM3RFMTkveG9Bdm9rSk80YjRCQ2NiNEJud0tsU1FjQ0FyckQ1WlVVS3dDOXJqUnRENEZNQzlvYUhBNEZqQXZya21OR3ZYaUVBaCtBRTRCbHdxbFFRTUtBcmJDWXlKT0FiNEJDY1k2dFJ0Q1ExQUFBZ0FFbEVRVlFKMkJ1cjdTVnVpSUErQ1VFS3dDRTRBWGdHbkNvVkJBem9DcHVKREFrSXdDRTR4MVlUc0RkVzIwdmNFQUY5RW9JVWdFTndBdkFNT0ZVcUNCalFGVFlUR1JJUWdFTndqcTBtWUcrc3RwZTRJUUw2SkFRcEFJZmdCT0FaY0twVUVEQ2dLMndtTWlRZ0FJZmdIRnROd041WWJTOXhRd1QwU1FoU0FBN0JDY0F6NEZTcElHQkFWOWhNWkVoQUFBN0JPYmFhZ0wyeDJsN2loZ2pva3hDa0FCeUNFNEJud0tsU1FjQ0FyckNaeUpDQUFCeUNjMncxQVh0anRiM0VEUkhRSnlGSUFUZ0VKd0RQZ0ZPbGdvQUJYV0V6a1NFQkFUZ0U1OWhxQXZiR2FudUpHeUtnVDBLUUFuQUlUZ0NlQWFkS0JRRUR1c0ptSWtNQ0FuQUl6ckhWQk95TjFmWVNOMFJBbjRRZ0JlQVFuQUE4QTA2VkNnSUdkSVhOUklZRUJPQVFuR09yQ2RnYnErMGxib2lBUGdsQkNzQWhPQUY0QnB3cUZRUU02QXFiaVF3SkNNQWhPTWRXRTdBM1Z0dEwzQkFCZlJLQ0ZJQkRjQUx3RERoVktnZ1kwQlUyRXhrU0VJQkRjSTZ0Sm1CdnJMYVh1Q0VDK2lRRUtRQ0g0QVRnR1hDcVZCQXdvQ3RzSmpJa0lBQ0g0QnhiVGNEZVdHMHZjVU1FOUVrSVVnQU93UW5BTStCVXFTQmdRRmZZVEdSSVFBQU93VG0ybW9DOXNkcGU0b1lJNkpNUXBBQWNnaE9BWjhDcFVrSEFnSzZ3bWNpUWdBQWNnbk5zTlFGN1k3Vzl4QTBSMENjaFNBRTRCQ2NBejRCVHBZS0FBVjFoTTVFaEFRRTRCT2ZZYWdMMnhtcDdpUnNpb0U5Q2tBSndDRTRBbmdHblNnVUJBN3JDWmlKREFnSndDTTZ4MVFUc2pkWDJFamRFUUorRUlBWGdFSndBUEFOT2xRb0NCblNGelVTR0JBVGdFSnhqcXduWUc2dnRKVzZJZ0Q0SlFRckFJVGdCZUFhY0toVUVET2dLbTRrTUNRakFJVGpIVmhPd04xYmJTOXdRQVgwU2doU0FRM0FDOEF3NFZTb0lHTkFWTmhNWkVoQ0FRM0NPclNaZ2I2eTJsN2doQXZva0JDa0FoK0FFNEJsd3FsUVFNS0FyYkNZeUpDQUFoK0FjVzAzQTNsaHRMM0ZEQlBSSkNGSUFEc0VKd0RQZ1ZLa2dZRUJYMkV4a1NFQUFEc0U1dHBxQXZiSGFYdUtHQ09pVEVLUUFISUlUZ0dmQXFWSkJ3SUN1c0puSWtJQUFISUp6YkRVQmUyTzF2Y1FORWRBbklVZ0JPQVFuQU0rQVU2V0NnQUZkWVRPUklRRUJPQVRuMkdvQzlzWnFlNGtiSXFCUFFwQUNjQWhPQUo0QnAwb0ZBUU82d21ZaVF3SUNjQWpPc2RVRTdJM1Y5aEkzUkVDZmhDQUY0QkNjQUR3RFRwVUtBZ1owaGMxRWhnUUU0QkNjWTZzSjJCdXI3U1Z1aUlBK0NVRUt3Q0U0QVhnR25Db1ZCQXpvQ3B1SkRBa0l3Q0U0eDFZVHNEZFcyMHZjRUFGOUVvSVVnRU53QXZBTU9GVXFDQmpRRlRZVEdSSVFnRU53anEwbVlHK3N0cGU0SVFMNkpBUXBBSWZnQk9BWmNLcFVFRENnSzJ3bU1pUWdBSWZnSEZ0TndONVliUzl4UXdUMFNRaFNBQTdCQ2NBejRGU3BJR0JBVjloTVpFaEFBQTdCT2JhYWdMMngybDdpaGdqb2t4Q2tBQnlDRTRCbndLbFNRY0NBcnJDWnlKQ0FBQnlDYzJ3MUFYdGp0YjNFRFJIUUp5RklBVGdFSndEUGdGT2xnb0FCWFdFemtTRUJBVGdFNTlocUF2YkdhbnVKR3lLZ1QwS1FBbkFJVGdDZUFhZEtCUUVEdXNKbUlrTUNBbkFJenJIVkJPeU4xZllTTjBSQW40UWdCZUFRbkFBOEEwNlZDZ0lHZElYTlJJWUVCT0FRbkdPckNkZ2JxKzBsYm9pQVBnbEJDc0FoT0FGNEJwd3FGUVFNNkFxYmlRd0pDTUFoT01kV0U3QTNWdHRMM0JBQmZSS0NGSUJEY0FMd0REaFZLZ2dZMEJVMkV4a1NFSUJEY0k2dEptQnZyTGFYdUNFQytpUUVLUUNINEFUZ0dYQ3FWQkF3b0N0c0pqSWtJQUNINEJ4YlRjRGVXRzB2Y1VNRTlFa0lVZ0FPd1FuQU0rQlVxU0JnUUZmWVRHUklRQUFPd1RtMm1vQzlzZHBlNG9ZSTZKTVFwQUFjZ2hPQVo4Q3BVa0hBZ0s2d21jaVFnQUFjZ25Oc05RRjdZN1c5eEEwUjBDY2hTQUU0QkNjQXo0QlRwWUtBQVYxaE01RWhBUUU0Qk9mWWFnTDJ4bXA3aVJzaW9FOUNrQUp3Q0U0QW5nR25TZ1VCQTdyQ1ppSkRBZ0p3Q002eDFRVHNqZFgyRWpkRVFKK0VJQVhnRUp3QVBBTk9sUW9DQm5TRnpVU0dCQVRnRUp4anF3bllHNnZ0Slc2SWdENEpRUXJBSVRnQmVBYWNLaFVFRE9nS200a01DUWpBSVRqSFZoT3dOMWJiUzl3UUFYMFNnaFNBUTNBQzhBdzRWU29JR05BVk5oTVpFaENBUTNDT3JTWmdiNnkybDdnaEF2b2tCQ2tBaCtBRTRCbHdxbFFRTUtBcmJDWXlKQ0FBaCtBY1cwM0EzbGh0TDNGREJQUkpDRklBRHNFSndEUGdWS2tnWUVCWDJFeGtTRUFBRHNFNXRwcUF2YkhhWHVLR0NPaVRFS1FBSElJVGdHZkFxVkpCd0lDdXNKbklrSUFBSElKemJEVUJlMk8xdmNRTkVkQW5JVWdCT0FRbkFNK0FVNldDZ0FGZFlUT1JJUUVCT0FUbjJHb0M5c1pxZTRrYklxQlBRcEFDY0FoT0FKNEJwMG9GQVFPNndtWWlRd0lDY0FqT3NkVUU3STNWOWhJM1JFQ2ZoQ0FGNEJDY0FEd0RUcFVLQWdaMGhjMUVoZ1FFNEJDY1k2c0oyQnVyN1NWdWlJQStDVUVLd0NFNEFYZ0duQ29WQkF6b0NwdUpEQWtJd0NFNHgxWVRzRGRXMjB2Y0VBRjlFb0lVZ0VOd0F2QU1PRlVxQ0JqUUZUWVRHUklRZ0VOd2pxMG1ZRytzdHBlNElRTDZKQVFwQUlmZ0JPQVpjS3BVRURDZ0syd21NaVFnQUlmZ0hGdE53TjVZYlM5eFF3VDBTUWhTQUE3QkNjQXo0RlNwSUdCQVY5aE1aRWhBQUE3Qk9iYWFnTDJ4Mmw3aWhnam9reENrQUJ5Q0U0Qm53S2xTUWNDQXJyQ1p5SkNBQUJ5Q2MydzFBWHRqdGIzRURSSFFKeUZJQVRnRUp3RFBnRk9sZ29BQlhXRXprU0VCQVRnRTU5aHFBdmJHYW51Skd5S2dUMEtRQW5BSVRnQ2VBYWRLQlFFRHVzSm1Ja01DQW5BSXpySFZCT3lOMWZZU04wUkFuNFFnQmVBUW5BQThBMDZWQ2dJR2RJWE5SSVlFQk9BUW5HT3JDZGdicSswbGJvaUFQZ2xCQ3NBaE9BRjRCcHdxRlFRTTZBcWJpUXdKQ01BaE9NZFdFN0EzVnR0TDNCQUJmUktDRklCRGNBTHdERGhWS2dnWTBCVTJFeGtTRUlCRGNJNnRKbUJ2ckxhWHVDRUMraVFFS1FDSDRBVGdHWENxVkJBd29DdHNKaklrSUFDSDRCeGJUY0RlV0cwdmNVTUU5RWtJVWdBT3dRbkFNK0JVcVNCZ1FGZllUR1JJUUFBT3dUbTJtb0M5c2RwZTRvWUk2Sk1RcEFBY2doT0FaOENwVWtIQWdLNndtY2lRZ0FBY2duTnNOUUY3WTdXOXhBMFIwQ2NoU0FFNEJDY0F6NEJUcFlLQUFWMWhNNUVoQVFFNEJPZllhZ0wyeG1wN2lSc2lvRTlDa0FKd0NFNEFuZ0duU2dVQkE3ckNaaUpEQWdKd0NNNngxUVRzamRYMkVqZEVRSitFSUFYZ0VKd0FQQU5PbFFvQ0JuU0Z6VVNHQkFUZ0VKeGpxd25ZRzZ2dEpXNklnRDRKUVFyQUlUZ0JlQWFjS2hVRURPZ0ttNGtNQ1FqQUlUakhWaE93TjFiYlM5d1FBWDBTZ2hTQVEzQUM4QXc0VlNvSUdOQVZOaE1aRWhDQVEzQ09yU1pnYjZ5Mmw3Z2hBdm9rQkNrQWgrQUU0Qmx3cWxRUU1LQXJiQ1l5SkNBQWgrQWNXMDNBM2xodEwzRkRCUFJKQ0ZJQURzRUp3RFBnVktrZ1lFQlgyRXhrU0VBQURzRTV0cHFBdmJIYVh1S0dDT2lURUtRQUhJSVRnR2ZBcVZKQndJQ3VzSm5Ja0lBQUhJSnpiRFVCZTJPMXZjUU5FZEFuSVVnQk9BUW5BTStBVTZXQ2dBRmRZVE9SSVFFQk9BVG4yR29DOXNacWU0a2JJcUJQUXBBQ2NBaE9BSjRCcDBvRkFRTzZ3bVlpUXdJQ2NBak9zZFVFN0kzVjloSTNSRUNmaENBRjRCQ2NBRHdEVHBVS0FnWjBoYzFFaGdRRTRCQ2NZNnNKMkJ1cjdTVnVpSUErQ1VFS3dDRTRBWGdHbkNvVkJBem9DcHVKREFrSXdDRTR4MVlUc0RkVzIwdmNFQUY5RW9JVWdFTndBdkFNT0ZVcUNCalFGVFlUR1JJUWdFTndqcTBtWUcrc3RwZTRJUUw2SkFRcEFJZmdCT0FaY0twVUVEQ2dLMndtTWlRZ0FJZmdIRnROd041WWJTOXhRd1QwU1FoU0FBN0JDY0F6NEZTcElHQkFWOWhNWkVoQUFBN0JPYmFhZ0wyeDJsN2loZ2pva3hDa0FCeUNFNEJud0tsU1FjQ0FyckNaeUpDQUFCeUNjMncxQVh0anRiM0VEUkhRSnlGSUFUZ0VKd0RQZ0ZPbGdvQUJYV0V6a1NFQkFUZ0U1OWhxQXZiR2FudUpHeUtnVDBLUUFuQUlUZ0NlQWFkS0JRRUR1c0ptSWtNQ0FuQUl6ckhWQk95TjFmWVNOMFJBbjRRZ0JlQVFuQUE4QTA2VkNnSUdkSVhOUklZRUJPQVFuR09yQ2RnYnErMGxib2lBUGdsQkNzQWhPQUY0QnB3cUZRUU02QXFiaVF3SkNNQWhPTWRXRTdBM1Z0dEwzQkFCZlJLQ0ZJQkRjQUx3RERoVktnZ1kwQlUyRXhrU0VJQkRjSTZ0Sm1CdnJMYVh1Q0VDK2lRRUtRQ0g0QVRnR1hDcVZCQXdvQ3RzSmpJa0lBQ0g0QnhiVGNEZVdHMHZjVU1FOUVrSVVnQU93UW5BTStCVXFTQmdRRmZZVEdSSVFBQU93VG0ybW9DOXNkcGU0b1lJNkpNUXBBQWNnaE9BWjhDcFVrSEFnSzZ3bWNpUWdBQWNnbk5zTlFGN1k3Vzl4QTBSMENjaFNBRTRCQ2NBejRCVHBZS0FBVjFoTTVFaEFRRTRCT2ZZYWdMMnhtcDdpUnNpb0U5Q2tBSndDRTRBbmdHblNnVUJBN3JDWmlKREFnSndDTTZ4MVFUc2pkWDJFamRFUUorRUlBWGdFSndBUEFOT2xRb0NCblNGelVTR0JBVGdFSnhqcXduWUc2dnRKVzZJZ0Q0SlFRckFJVGdCZUFhY0toVUVET2dLbTRrTUNRakFJVGpIVmhPd04xYmJTOXdRQVgwU2doU0FRM0FDOEF3NFZTb0lHTkFWTmhNWkVoQ0FRM0NPclNaZ2I2eTJsN2doQXZva0JDa0FoK0FFNEJsd3FsUVFNS0FyYkNZeUpDQUFoK0FjVzAzQTNsaHRMM0ZEQlBSSkNGSUFEc0VKd0RQZ1ZLa2dZRUJYMkV4a1NFQUFEc0U1dHBxQXZiSGFYdUtHQ09pVEVLUUFISUlUZ0dmQXFWSkJ3SUN1c0puSWtJQUFISUp6YkRVQmUyTzF2Y1FORWRBbklVZ0JPQVFuQU0rQVU2V0NnQUZkWVRPUklRRUJPQVRuMkdvQzlzWnFlNGtiSXFCUFFwQUNjQWhPQUo0QnAwb0ZBUU82d21ZaVF3SUNjQWpPc2RVRTdJM1Y5aEkzUkVDZmhDQUY0QkNjQUR3RFRwVUtBZ1owaGMxRWhnUUU0QkNjWTZzSjJCdXI3U1Z1aUlBK0NVRUt3Q0U0QVhnR25Db1ZCQXpvQ3B1SkRBa0l3Q0U0eDFZVHNEZFcyMHZjRUFGOUVvSVVnRU53QXZBTU9GVXFDQmpRRlRZVEdSSVFnRU53anEwbVlHK3N0cGU0SVFMNkpBUXBBSWZnQk9BWmNLcFVFRENnSzJ3bU1pUWdBSWZnSEZ0TndONVliUzl4UXdUMFNRaFNBQTdCQ2NBejRGU3BJR0JBVjloTVpFaEFBQTdCT2JhYWdMMngybDdpaGdqb2t4Q2tBQnlDRTRCbndLbFNRY0NBcnJDWnlKQ0FBQnlDYzJ3MUFYdGp0YjNFRFJIUUp5RklBVGdFSndEUGdGT2xnb0FCWFdFemtTRUJBVGdFNTlocUF2YkdhbnVKR3lLZ1QwS1FBbkFJVGdDZUFhZEtCUUVEdXNKbUlrTUNBbkFJenJIVkJPeU4xZllTTjBSQW40UWdCZUFRbkFBOEEwNlZDZ0lHZElYTlJJWUVCT0FRbkdPckNkZ2JxKzBsYm9pQVBnbEJDc0FoT0FGNEJwd3FGUVFNNkFxYmlRd0pDTUFoT01kV0U3QTNWdHRMM0JBQmZSS0NGSUJEY0FMd0REaFZLZ2dZMEJVMkV4a1NFSUJEY0k2dEptQnZyTGFYdUNFQytpUUVLUUNINEFUZ0dYQ3FWQkF3b0N0c0pqSWtJQUNINEJ4YlRjRGVXRzB2Y1VNRTlFa0lVZ0FPd1FuQU0rQlVxU0JnUUZmWVRHUklRQUFPd1RtMm1vQzlzZHBlNG9ZSTZKTVFwQUFjZ2hPQVo4Q3BVa0hBZ0s2d21jaVFnQUFjZ25Oc05RRjdZN1c5eEEwUjBDY2hTQUU0QkNjQXo0QlRwWUtBQVYxaE01RWhBUUU0Qk9mWWFnTDJ4bXA3aVJzaW9FOUNrQUp3Q0U0QW5nR25TZ1VCQTdyQ1ppSkRBZ0p3Q002eDFRVHNqZFgyRWpkRVFKK0VJQVhnRUp3QVBBTk9sUW9DQm5TRnpVU0dCQVRnRUp4anF3bllHNnZ0Slc2SWdENEpRUXJBSVRnQmVBYWNLaFVFRE9nS200a01DUWpBSVRqSFZoT3dOMWJiUzl3UUFYMFNnaFNBUTNBQzhBdzRWU29JR05BVk5oTVpFaENBUTNDT3JTWmdiNnkybDdnaEF2b2tCQ2tBaCtBRTRCbHdxbFFRTUtBcmJDWXlKQ0FBaCtBY1cwM0EzbGh0TDNGREJQUkpDRklBRHNFSndEUGdWS2tnWUVCWDJFeGtTRUFBRHNFNXRwcUF2YkhhWHVLR0NPaVRFS1FBSElJVGdHZkFxVkpCd0lDdXNKbklrSUFBSElKemJEVUJlMk8xdmNRTkVkQW5JVWdCT0FRbkFNK0FVNldDZ0FGZFlUT1JJUUVCT0FUbjJHb0M5c1pxZTRrYklxQlBRcEFDY0FoT0FKNEJwMG9GQVFPNndtWWlRd0lDY0FqT3NkVUU3STNWOWhJM1JFQ2ZoQ0FGNEJDY0FEd0RUcFVLQWdaMGhjMUVoZ1FFNEJDY1k2c0oyQnVyN1NWdWlJQStDVUVLd0NFNEFYZ0duQ29WQkF6b0NwdUpEQWtJd0NFNHgxWVRzRGRXMjB2Y0VBRjlFb0lVZ0VOd0F2QU1PRlVxQ0JqUUZUWVRHUklRZ0VOd2pxMG1ZRytzdHBlNElRTDZKQVFwQUlmZ0JPQVpjS3BVRURDZ0syd21NaVFnQUlmZ0hGdE53TjVZYlM5eFF3VDBTUWhTQUE3QkNjQXo0RlNwSUdCQVY5aE1aRWhBQUE3Qk9iYWFnTDJ4Mmw3aWhnam9reENrQUJ5Q0U0Qm53S2xTUWNDQXJyQ1p5SkNBQUJ5Q2MydzFBWHRqdGIzRURSSFFKeUhJTkFELzlkLzg3c2MvZjhzLy9NUHZmd2h2WWNVeEQrQnYyK2g1V2ZHWXh5TDBSNHpPd1FJQ1Z3T3dlZnJjaHdML3gvQzNOeDdEK1YzZVJkLzl1bE10ZlRMdXZ3QTgwL290RDJCS2EvekJUVy9FdWFjUTBCOVB3ZTVOMzRTQUFQd21SdjE4bS9iWlkveXlOeDdEK1YzZVJkOEp3S05mdkY0TndHY2Z3Qi8vNmR0MzN4RC84SmZmdnZ1RytPajFyMnJJMi9lOWZaL2Ireng3SHg5MWo4NS8xZnQvZklENnVOKy8rdmJEZDd5UFhqK3I4N2JPN2JuYjk3MTkvZXp6Yy9aK1hQY2VCSHlRZVErZjNPVnpDSndOd0dmbjU5RitQWHI5TEFYN3pOK0VPL3VzSk5mWkd3bTFmV2RhNXA0YzhkT3orN0FjSVFCL1B5eU9BdXhubzhXRCsrQUhkOStNWDYzSUI1blY5aEozSndFQitIdUFSMzlnZS9UNldUdjhnZTVaVXMrNXp0NTREdmRYZTFjQitIdEgvTUhqMEI4OHRnVGdvei94UG5yOUtQaCt2UDVaZ0Q2cWYvVDYwVUE2K2tCdzlQcWo2cDhkWkVmMzQvWDNJdUNEekh2NTVXNGZTK0RkQXZEUnZqcDYvWWp1MGI0NmV2MVI5ZTJ6STlMM3ZXNXYzTWR2eSttemZYWTBkNDVlUCtKMWRQN285YS9LRVI5OThxLysrMTk4OXhaWHY5QTdtcXRIcngveE96cC85UHBIL2JQUHc5SDlmQk9BZjBMMHJBZjN3NkQwL1QvT0h6MDRSNjhmUFNoSDU0OWVIMzl3ajI3WTZ5OUZ3QWVabDdMRHpid1lBUUg0ZTBPTzlzblI2MGYySHAwL2V0MCtPeUk4ODdxOU1jUHgzYXVjRFR4SG42T1BYai9pZEhUKzZIVUIrTWZ2ZmpRMi9WSE5zOC9Ea1orbkEzRDZodWxYOWVtRGRDajRrd3V1dnQ5bnVwNzFEZkJuUWZoVzdtZC90LzVvNGQvNyt1MTlwTTlUNnE5enp5WGdnOHh6K1h2MzF5WndGSURUZWZsVisvZG9YeDY5ZnRhTjlLOG8zN3V2anM3YloyY2R2Tzg2ZStNK2Z1OSsrdFhtM2hIUHEzTnZLa2RNZlFOY2x5UE9mZ1A4YmcvaTBZTjYrL3F6SHR5UCs3ajYvcC9wODRIaHF2T3Vmd1FCSDJRZVFkbDd2Q3NCQWZqWG5iUFAzdldKbnJsdmUyT0c0N3RXZWJmY2NmVnp2QUI4M3kvclRaK1BQL1hEVndmZ05PQmRmWkRTQnIvNlBoL1hmM3pUZS9iODBYVkhyNS9WNXdQRFdWS3VleVFCSDJRZVNkdDd2UnVCcndyQVg3Vi9qL2JWMGV0bi9iSFB6cExhZVoyOXNkUFhzNnJ1RFRoWDU5RFY2KytkcjFNNXdqZkFQem54aDMvNC9YZi8rczNoY3lZQS8vWS8xM1FMVUFEK2lVajZkL2MvZU40NzJBNGZiQmU4RkFFZlpGN0tEamZ6WWdRRTRGODNSQUIrc1FmMXdiZGpiendZK0l1OTNiMmZFNjhHMnF2WEM4RGZQekJIUHpweTcrdTNqK2U5ejhlWC93eHcrb0FjOVdINnMwM3AvZHdHMzZ0MWpocnI2UFVqSHJldkh6MW8wL1d1dnQvZEQrNVZBYTUvS2dFZlpKNkszNXUvT0lGWEM4Qkh1STcyMWRIclIvWHRzNnVFZGw1dmIrejA5YXlxZXo4blRzK2gyL3UrV3YrcmNzVDBOOEFmT3E5K3JqL3k5YWplMGVzQzhNOEVCT0RmZnRTdVBraHY5K0FlM2JEWFg0cUFEekl2WlllYmVURUNBckI5OW1LUDVFdmNqcjN4RWpZODdTWUU0Ty9SZnhhNEJlQ2ZPTDNjWDRHK042aE9kOTdWUDdINWVQOGpIYmYzZWZ2Ym9JL2U5K2oxcXh3RTRLdkVYUCtWQkh5UStVcTZhcjg3Z2E4S3dFZDc2K3EvRS9uWlByeTY3Njc2Wlo5ZEpiYmplbnRqaDQrcGlqUUFmOVhjT3p2L1B0TjdkRjlwamhDQUJlQlRQWllHemE5NmNPOXRxTTlFKzhCdzZuRncwWU1JK0NEeklORGU1aTBKQ01DL2JadDk5cGFQOWQwM2JXL2NqZkN0Q3dqQTM3NzdwVTYrQWY3K2NVNmZqejlWK2FwZmduVVVOTzk5L1dwWEg3M2YxWHBYZyt2Uit4KzlmdFhvcXg4WWpxNi85L1ZidmxmMXBQNDQ5eG9FZkpCNURSL2N4V3NTbUE3QVIvdmsyYTlmbmY5SCsrZlcxYVByNzMzZFBudE1IOWtiaitIOHF1OXlkVTQ4ZTY2bEhJL3UreWh2blAwRytDclBvem41OW5OWEFFNGYyWi9PM2Z2Z0hqM1lINjk3Y08venllbm5FdkJCNXJuOHZmdHJFeENBZi91ZnIxai9RZXkxSDgrbjNaMjk4VFQwTC9IR1Z6LzNIbjBlLytyWFUyaEg5M1dVRXdUZ253aDkyYzhBWHcxaVI0YmUrL3JWQiszZXY4TDgyZnNkNmJnOWQzUWZuLzFNMXRWQk1QMkI0VU5IK3M5U1hIMStydnJyK3RjbTRJUE1hL3ZqN3A1TDRDZ0FYNTJmUjN2cDN0Yy8rMEIyUzlFK2UrNXo5ZTd2Ym0rOHU0TXo5My8yOCsrOWMrM3ErU04xWjMvSHd0SDd5aEhmRXpqN1BCejVjL3FmUVhyVkJYd284T2NMam9MbjJjVjk5Q0FlUGZCSDkrRUR3MWxIWGZkT0JIeVFlU2UzM091akNRakFqLzBHMkIvb1B2b0p6OTdQM3NpNGJUdDFOdkFjQmNucDE0ODRIK1dCei80ZzhlaWNIUEc3SC8rYy9lVnZmajhPbi8wcjBGY0Q4TkdEc2UzMXJ4N1Vad2ZBcTNQZG91UFZPYi9hL1gxMWY3eWFYdmVEd0JVQzB3SDR5bnMvNDlvdGUyQ0xqbWM4QTJmZTA5NDRRMm4vTmZyc3R6MCsyeWRiT0k3cEVJQm5oc2ZaQnpCOXR6SEQweHNZT3JkRnh4Q09takpmM1I4MUlBbGRTVUFBL3UxdmdGL1ZkUHZzYTUyeE43Nlc3N3RVMTJjQzhKOFRHSHNlcmdaZzN3VC8rb1A0MVlQNncvRDRxLzRuVDdxeEIvYkpPcng5UnVDcit5TzdLNmNRZUEwQ1p3UHdsdjFybjczR2MvZnFkMkZ2dkxwRGo3MC9ueVB2eXgvbTdnMC9BWGltZ2I5NlVIdHdaM3hTNVRrRXZyby9ucVBLdXlJd1EwQUFudUg0cUNvK2lEK0d0TDN4R003djhpNzZUZ0QrY3dKM2Z5R1lCdUIzYVpoSDNhZEIvU2pTM3VjZENlaVBkM1ROUFQrS3dOVUEvS2o3OGo0SVBKT0F2ZkZNK3Q3N1hRam9rOUFwQVRnRWQzUE1BempEVVpXZEJQVEhUbCtwbWlFZ0FNOXdWR1VYQVh0amw1L1VmQTBCZlJKeUZZQkRjQUx3RERoVktnZ1kwQlUyRXhrU0VJQkRjSTZ0Sm1CdnJMYVh1Q0VDK2lRRUtRQ0g0QVRnR1hDcVZCQXdvQ3RzSmpJa0lBQ0g0QnhiVGNEZVdHMHZjVU1FOUVrSVVnQU93UW5BTStCVXFTQmdRRmZZVE9SRkFyZS8xT1hqK04yLzNPUGlmYmdjZ1Zja1lHKzhvaXZ1NmRVSTZKUFFFUUU0QkNjQXo0QlRwWUtBQVYxaE01RVhDUWpBRjRHNXZJcUF2VkZsTjdFaEFYMFNncnNOd0gvOVAvOS9mNnprVDZDdkFmVUFYdVBsNmk0QytxUExiMnAvbThCbndmZjJsRDNzU1dvbVlHODB1MC83V1FMNjVDeXBuNjc3MHo4cisvLytUMy84LzMvNDluTVNGb0N2Z2Z5NDJnT1ljWE9xZzREKzZQQ1p5bk1FQk9Cem5GelZUY0RlNlBhZituTUU5TWs1VGg5WEhRYmdqd3Y5Q2ZRNXNCN0FjNXhjMVVsQWYzVDZUdlgzQk00RzMxdHU5ckFucVpHQXZkSG9PczFYQ2VpVGM4UnU5KzhmUHZzR1dBQStCOVEzd05jNHVicVRnQUhkNlR2VkFyQm5BSUdVZ0wyUmtuT3VpWUErT2VmMjVRRDhmL3h2dno5WHVmeXEvLzcvL0s5L0pQQ3YvcGYvcTV3RStRajhrb0QrOEZRZzhPM2IvLzUvL2k3Q1lBOUgyQng2Y3dMMnhwc2I2UFlmUWtDZm5NTjh1MzhQdndHMmVNK0I5UUNlNCtTcVRnTDZvOU4zcXI4bklBQjdJaEE0VDhEZU9NL0tsYjBFOU1rNTd5OEhZRDk3ZEE2c3Y0SndqcE9yT2dub2owN2ZxZjZlZ0o4QjlrUWdjSjZBdlhHZWxTdDdDZWlUYzk1Zi9pdlFBdkE1c0I3QWM1eGMxVWxBZjNUNlRyVUE3QmxBSUNWZ2I2VGtuR3Npb0UvT3VYMDZBQXUrNTRCK1hPVUJ2TWJMMVYwRTlFZVgzOVQrTm9HejN3VGJ3NTZrWmdMMlJyUDd0Sjhsb0UvT2t2cnB1c04vQnNuaXZRYlVBM2lObDZ1N0NPaVBMcitwRllBOUF3amNTOERldUplZzh3MEU5TWsxbHo4TndOLys4ZTkvdUZiSzFmOUN3QVBvT1VEZ2N3TDZ3OU9Cd0M4SmZQWk5zRCtBOXJSc0l2RGovLzJISC85Rnp3Ly81cTh2ZmI2ME56WTlCYlFjRWRBblI0U0dYLzkzLy82bnVmVHQ1LzlEQU00QUc5UVpONmM2Q09pUERwK3B2RVpBQUw3R3k5WHZTY0FIKy9mMHpWMC9sb0ErZVN6dmo5d3JBUC9NM1FQNDRBZlEyNzBsZ2F0OUlnQy9wYzF1K2tFRS9zdTNILy80SjlGLzllMkhTOStRUGVqMnZBMENsd2g4N0llalEwZmZDTnNiUndTOS9zNEU5TW1UM2ZNTjhQY0dYUDFnLzNIYW9IN3lnK3p0SDByZ2FwL29qNGZhNDgzZWpJQUEvR2FHdWQzZkpPQ0R2UWNFZ1dNQyt1U1kwWmRlMFI2QVBZQmYrbmdwdm9UQXZYMGlBQzk1RU1qNEVnSUM4SmRnVmZUQkJHNzN4TzAzdkovdGtjKytDYlkzSG15Z3Qzc0lBWDN5RU16SGJ5SUEvL1RMR1k3KzgxZDFqZ2g1ZlRNQkFYaXp1N1E5bTRBQS9Hd0h2UDhFQVIvc0p5aXFzWjJBUG5rUmgxc0RzQWZ3UlI1QXQvSFNCS2I2eEova3Y3VE5idTdKQkFUZ0p4dmc3VWNJSE8yTGp6YzVlNTI5TVdLTElpOUc0T3p6Zi9ZNmZSSWFMQUQvQk01ZjFRa2ZJTWRXRXpnYXdHZi9TcHNCdmZveEllNU9BZ0x3blFBZGZ3a0NSL3RDQUg0Sm05ekVrd25va3ljYjhQSDJBdkN2QjJDRCtrVWVVTGZ4VkFKVGcxb0FmcXFOM3Z6RkNRakFMMjZRMnp0RklOMFhIOFZ2djRpd04wNWhkOUdiRWRBbkwyS1lBQ3dBdjhpajZEWmVrRUE2cUgyUWVVRXozZExMRWhDQVg5WWFOM2FCUUxvdkJPQUxrRjM2OWdUMHlZdFlLQUJmQzhBRzlZczh1RzdqSVFTbUJyVS95WCtJWGQ3a1RRa0l3RzlxWE9sdEgvMHplT25lOEFlbnBRL1VVdG42SkRQMngzLzY5dDB2Si83aEw3LzljS2JTNVhNQ3NBQjg1c0Z5VFNlQjlJUE03UjhVQ2NDZHp3L1Y1d2dJd09jNHVlbzFDUGhnL3hvK3VJdlhKcUJQTW44dUI5bWYzK2J5dWEwQitPakIrN0FsL1lEdlR5cXpCOXVwMXlMd3FENFJnRi9MZDNmeldnUUU0TmZ5dzkxOFQrRHFQNE4zOXBjakhuMytzamM4aWU5RVFKL011blUyMEo2OTdoZDNKd0IvLys4QWYvYnYvUnJVc3crMmFxOUJRQUIrRFIvY1JUY0JBYmpiLzFkWDc0UDlxenZrL2w2QmdENlpkZUZzc0QxNzNkb0FmUFhCKyt3YjRJLy8vZWlmUmZJTjhPeURydHBqQ0R5clQveEovbVA4OVM3dlNVQUFmay9mdHQvMTBSLzhIMzNUbSs2YkQ2NzJ4dlluYkljK2ZmSTFQcDROdG1ldkU0RC96VjkvOThQVVJ3UDhzNkFzQUgvTkE2L3ExeEpJUDVEYzJ5Yyt5SHl0cjZxL053RUIrTDM5MjNyM1B0aHZkWmF1U1FMNlpKTG0vNmgxTnRpZXZXNWRBTDczd1R2Nkp2Z1cyR2QvUmRvSC9LOXBBRlZuQ0R5N1QvVEhqSStxN0NRZ0FPLzA5ZDFWSGUyTnMxOFEzRjczMmVlb1cxNzJ4cnMvUVIzM3IwKysxdWZQQW00Y2ZEOXU5OTEvQnZqb3dVdS91ZnJNVGdINGF4OTAxYitHd0xQN3hBZVpyL0ZWMVIwRUJPQWRQbTVUY1NmTS80TUFBQ0FBU1VSQlZMUTNCT0J0anRPVEVOQW5DYlh6WndUZ1QxaE5QM2orcFBMOFErbks5eUh3N0Q0UmdOL25XWEduanljZ0FEK2V1WGM4SnBEdWpZL0taNy9wL2V4TzdJMWpqMXp4OVFTT2ZsbW9Qdmw2RC83bEhXNkQ4Si9tek1sL0ovZ1hkN245RytDcmYwSXBBRC9tUWZZdWp5V1FEdWlqRHpCSGkrRkRwUTh5ai9YYnU3MFhBUUg0dmZ4cXVkdDBid2pBTFU5SWg4Nmp6em42NURIUFFXMEEvdXdCZlBhRDV3UCtZeDU4NzNJZmdXZjNpUUI4bjM5Tzd5WWdBTy8yOTFYVW5kMER0L2Q3OXR6WjY4N3lzRGZPa25MZEpJR2pYeGFhL25PcDZSZHlSOXBhK2tRQVB2Z3R6bWNmektrL29SU0FqMXJUNjY5QTRPd0hrN00vTTM5VlU4dUF2c3JGOVFqOEN3RUIySFB3Q0FKbjk0QUEvQWczdk1lckVoQ0FYOU9abWdCODlRRThPOWpQWG5mVmZoL3dyeEp6L1FTQnE4L3oyZXZQWG5kV2cvNDRTOHAxalFRRTRFYlhINjg1L1FQT3MrZnNqY2Q3NmgzbkNCdzl2MWRmLyt5THRxTTZWeFZ0LzN4VjkwdXdCT0NyTGVENlJnSlhCK25aNjg5ZWQ1YjU5Z0Y5bG9QckVQZzFBZ0t3NStJUkJNNEcyYU52Z0gyd2Y0UmIzdVBSQkk0KzkxeDlYWi9NT0ZnVGdLOCtZQjkvNWZuc1lEK3FuOXJsQTM1S3pybDdDSng5N2ovZTQrejEwMzJpUCs1eDJkbnRCQVRnN1E0L1Y5L1JGd3FmZlZBL0c0UnZyenY2NVlsbmFkZ2JaMG01Ym9MQVI1K2MvVkhLczlkOWRtLzY1TGRkTy92di9KNjk3aGZ2OW1xL0Jmcm9nL2RucnovcmcvMEhVSU42WXZ5b2NaWEEyZWRlQUw1SzF2VUlQSTZBQVB3NDFvM3ZKQUEzdWs3elZRSUM4RlZpWDN2OTJXQjc5cnEzQ2NCbi8yVGw5cnFwUVgvVlZnSDRLakhYMzBQZzN1Zjgzdk5YNzExL1hDWG0raVlDQW5DVDI0L1grdGtIKzZNdkhJN3U5Q2d3SEowL2V0M2VPQ0xrOVVrQ1I4OXoyaTlIZGUvVnNMVlB6Z2JiczljSndEOFRtUHFyQng5QXR6NkE5emFtODE5RDRONEFlKy81cTZyMHgxVmlybThpSUFBM3VmMTRyUUx3NDVsN3gvY2pjQlJVQmVESGVubzIySjY5Ym4wQXZoVjQ5RUJQMmVrRC9oUkpkYzRRbVA1QTg5Vjlvai9PdU9xYVZnSUNjS3Z6cjZINzZFZkxwcjh3T0t2YTNqaEx5bldQSUhEVUp4LzM4T2grMmRZbmFhQzlmTzVWZndZNC9TdlFBdkFqeG9EM2VEWUJBZmpaRG5oL0JPWUlDTUJ6TEZXNlR1RG9nLzJqUDlCL0tOajJ3ZjY2TTA2OEVvR2pQaEdBWjl5NkhHUi9mdHZMNTE0dEFCL2g4d0FlRWZJNkF0KytIZlhKb3ovUStDRGpxVVRnY3dJQ3NLZmptUVFlL1NNeFo3WGFHMmRKdWU0UkJJNzY1TkdmcS94QjBaMnVDOEIzQXZ6NXVFRTl3MUdWR1FJQzhBeEhWUkI0QkFFQitCR1V2Y2RuQkk0KzJQdG15N09Ed0MrL1dMaGxJZ0MvMlZQeTdnSFlBL2htRDV6YmZRaUJWL3RBNHcrSUhtSzdOM2xUQWdMd214cTM1TGF2L25ONmo1SnRienlLdFBmNUxRSkhuNmVlRlh4OUEzem5jeXNBM3duUU44QXpBRlVaSlhBMHNCLzlKL28reUl6YXE5Z3lBZ0x3TWtQZlRJNEEvR2FHdWQySEVqajZQQ1VBUDlTT3VUZDdsd0RzQVp6elhLWDlCRjd0QTQwQXZQK1pvekFuSUFEbjdKek1DYVQvckV2K2p0ZE8yaHZYZUxuNmF3am9rNi9oK3ZTcUF2Q01CUWIxREVkVlpnZ0l3RE1jVlVIZ0VRUUU0RWRROWg2M0JIeXc5MHdnY0V4QW54d3plc3NybmgyQXp6NVlaNjk3bGdrQzhMUElkN3p2MmVmLzdIV1BwcVkvSGszYys3MFRBUUg0bmR4eXI0OGlZRzg4aXJUM2VXY0MraVIwVHdBT3dkMGM4d0RPY0ZUbDF3bWNEYlpucjNzMFovM3hhT0xlNzUwSUNNRHY1Slo3ZlJRQmUrTlJwTDNQT3hQUUo2Rjd6d3JBci9aWE5FTjhmenJtQWJ5WG9QTy9SbUJMbitnUHp6Y0NueE1RZ0QwZENQeVNnTDNocVVEZ21JQStPV2IwcTFjSXdDRTQzd0RQZ0ZQbE53a0l3QjRRQlBZVEVJRDNlMHpoZFFJKzJGOW41a1FmQVgwU2V2N29BUHlxZjBVenhPY2I0SHZCT2YrckJMYjFpUUh0UVVmQU44Q2VBUVN1RUxBM3J0QnliU3NCZlJJNkx3Q0g0SHdEUEFOT0ZRSFlNNEJBT1FIZkFKYy9BT1QvS2dFZjdEMFlDQndUMENmSGpINzFpa2NINFBBMlgvNllCL0RsTFhLRFR5U2dQNTRJMzF1L1BBRUIrT1V0Y29OUElHQnZQQUc2dDN3N0F2b2t0RXdBRHNINUJuZ0duQ29WQkF6b0NwdUpEQWtJd0NFNHgxWVRzRGRXMjB2Y0VBRjlFb0lVZ0VOd0F2QU1PRlVxQ0JqUUZUWVRHUklRZ0VOd2pxMG1ZRytzdHBlNElRTDZKQVFwQUlmZ0JPQVpjS3BVRURDZ0syd21NaVFnQUlmZ0hGdE53TjVZYlM5eFF3VDBTUWhTQUE3QkNjQXo0RlNwSUdCQVY5aE1aRWhBQUE3Qk9iYWFnTDJ4Mmw3aWhnam9reENrQUJ5Q0U0Qm53S2xTUWNDQXJyQ1p5SkNBQUJ5Q2MydzFBWHRqdGIzRURSSFFKeUZJQVRnRUp3RFBnRk9sZ29BQlhXRXprU0VCQVRnRTU5aHFBdmJHYW51Skd5S2dUMEtRQW5BSVRnQ2VBYWRLQlFFRHVzSm1Ja01DQW5BSXpySFZCT3lOMWZZU04wUkFuNFFnQmVBUW5BQThBMDZWQ2dJR2RJWE5SSVlFQk9BUW5HT3JDZGdicSswbGJvaUFQZ2xCQ3NBaE9BRjRCcHdxRlFRTTZBcWJpUXdKQ01BaE9NZFdFN0EzVnR0TDNCQUJmUktDRklCRGNBTHdERGhWS2dnWTBCVTJFeGtTRUlCRGNJNnRKbUJ2ckxhWHVDRUMraVFFS1FDSDRBVGdHWENxVkJBd29DdHNKaklrSUFDSDRCeGJUY0RlV0cwdmNVTUU5RWtJVWdBT3dRbkFNK0JVcVNCZ1FGZllUR1JJUUFBT3dUbTJtb0M5c2RwZTRvWUk2Sk1RcEFBY2doT0FaOENwVWtIQWdLNndtY2lRZ0FBY2duTnNOUUY3WTdXOXhBMFIwQ2NoU0FFNEJDY0F6NEJUcFlLQUFWMWhNNUVoQVFFNEJPZllhZ0wyeG1wN2lSc2lvRTlDa0FKd0NFNEFuZ0duU2dVQkE3ckNaaUpEQWdKd0NNNngxUVRzamRYMkVqZEVRSitFSUFYZ0VKd0FQQU5PbFFvQ0JuU0Z6VVNHQkFUZ0VKeGpxd25ZRzZ2dEpXNklnRDRKUVFyQUlUZ0JlQWFjS2hVRURPZ0ttNGtNQ1FqQUlUakhWaE93TjFiYlM5d1FBWDBTZ2hTQVEzQUM4QXc0VlNvSUdOQVZOaE1aRWhDQVEzQ09yU1pnYjZ5Mmw3Z2hBdm9rQkNrQWgrQUU0Qmx3cWxRUU1LQXJiQ1l5SkNBQWgrQWNXMDNBM2xodEwzRkRCUFJKQ0ZJQURzRUp3RFBnVktrZ1lFQlgyRXhrU0VBQURzRTV0cHFBdmJIYVh1S0dDT2lURUtRQUhJSVRnR2ZBcVZKQndJQ3VzSm5Ja0lBQUhJSnpiRFVCZTJPMXZjUU5FZEFuSVVnQk9BUW5BTStBVTZXQ2dBRmRZVE9SSVFFQk9BVG4yR29DOXNacWU0a2JJcUJQUXBBQ2NBaE9BSjRCcDBvRkFRTzZ3bVlpUXdJQ2NBak9zZFVFN0kzVjloSTNSRUNmaENBRjRCQ2NBRHdEVHBVS0FnWjBoYzFFaGdRRTRCQ2NZNnNKMkJ1cjdTVnVpSUErQ1VFS3dDRTRBWGdHbkNvVkJBem9DcHVKREFrSXdDRTR4MVlUc0RkVzIwdmNFQUY5RW9JVWdFTndBdkFNT0ZVcUNCalFGVFlUR1JJUWdFTndqcTBtWUcrc3RwZTRJUUw2SkFRcEFJZmdCT0FaY0twVUVEQ2dLMndtTWlRZ0FJZmdIRnROd041WWJTOXhRd1QwU1FoU0FBN0JDY0F6NEZTcElHQkFWOWhNWkVoQUFBN0JPYmFhZ0wyeDJsN2loZ2pva3hDa0FCeUNFNEJud0tsU1FjQ0FyckNaeUpDQUFCeUNjMncxQVh0anRiM0VEUkhRSnlGSUFUZ0VKd0RQZ0ZPbGdvQUJYV0V6a1NFQkFUZ0U1OWhxQXZiR2FudUpHeUtnVDBLUUFuQUlUZ0NlQWFkS0JRRUR1c0ptSWtNQ0FuQUl6ckhWQk95TjFmWVNOMFJBbjRRZ0JlQVFuQUE4QTA2VkNnSUdkSVhOUklZRUJPQVFuR09yQ2RnYnErMGxib2lBUGdsQkNzQWhPQUY0QnB3cUZRUU02QXFiaVF3SkNNQWhPTWRXRTdBM1Z0dEwzQkFCZlJLQ0ZJQkRjQUx3RERoVktnZ1kwQlUyRXhrU0VJQkRjSTZ0Sm1CdnJMYVh1Q0VDK2lRRUtRQ0g0QVRnR1hDcVZCQXdvQ3RzSmpJa0lBQ0g0QnhiVGNEZVdHMHZjVU1FOUVrSVVnQU93UW5BTStCVXFTQmdRRmZZVEdSSVFBQU93VG0ybW9DOXNkcGU0b1lJNkpNUXBBQWNnaE9BWjhDcFVrSEFnSzZ3bWNpUWdBQWNnbk5zTlFGN1k3Vzl4QTBSMENjaFNBRTRCQ2NBejRCVHBZS0FBVjFoTTVFaEFRRTRCT2ZZYWdMMnhtcDdpUnNpb0U5Q2tBSndDRTRBbmdHblNnVUJBN3JDWmlKREFnSndDTTZ4MVFUc2pkWDJFamRFUUorRUlBWGdFSndBUEFOT2xRb0NCblNGelVTR0JBVGdFSnhqcXduWUc2dnRKVzZJZ0Q0SlFRckFJVGdCZUFhY0toVUVET2dLbTRrTUNRakFJVGpIVmhPd04xYmJTOXdRQVgwU2doU0FRM0FDOEF3NFZTb0lHTkFWTmhNWkVoQ0FRM0NPclNaZ2I2eTJsN2doQXZva0JDa0FoK0FFNEJsd3FsUVFNS0FyYkNZeUpDQUFoK0FjVzAzQTNsaHRMM0ZEQlBSSkNGSUFEc0VKd0RQZ1ZLa2dZRUJYMkV4a1NFQUFEc0U1dHBxQXZiSGFYdUtHQ09pVEVLUUFISUlUZ0dmQXFWSkJ3SUN1c0puSWtJQUFISUp6YkRVQmUyTzF2Y1FORWRBbklVZ0JPQVFuQU0rQVU2V0NnQUZkWVRPUklRRUJPQVRuMkdvQzlzWnFlNGtiSXFCUFFwQUNjQWhPQUo0QnAwb0ZBUU82d21ZaVF3SUNjQWpPc2RVRTdJM1Y5aEkzUkVDZmhDQUY0QkNjQUR3RFRwVUtBZ1owaGMxRWhnUUU0QkNjWTZzSjJCdXI3U1Z1aUlBK0NVRUt3Q0U0QVhnR25Db1ZCQXpvQ3B1SkRBa0l3Q0U0eDFZVHNEZFcyMHZjRUFGOUVvSVVnRU53QXZBTU9GVXFDQmpRRlRZVEdSSVFnRU53anEwbVlHK3N0cGU0SVFMNkpBUXBBSWZnQk9BWmNLcFVFRENnSzJ3bU1pUWdBSWZnSEZ0TndONVliUzl4UXdUMFNRaFNBQTdCQ2NBejRGU3BJR0JBVjloTVpFaEFBQTdCT2JhYWdMMngybDdpaGdqb2t4Q2tBQnlDRTRCbndLbFNRY0NBcnJDWnlKQ0FBQnlDYzJ3MUFYdGp0YjNFRFJIUUp5RklBVGdFSndEUGdGT2xnb0FCWFdFemtTRUJBVGdFNTlocUF2YkdhbnVKR3lLZ1QwS1FBbkFJVGdDZUFhZEtCUUVEdXNKbUlrTUNBbkFJenJIVkJPeU4xZllTTjBSQW40UWdCZUFRbkFBOEEwNlZDZ0lHZElYTlJJWUVCT0FRbkdPckNkZ2JxKzBsYm9pQVBnbEJDc0FoT0FGNEJwd3FGUVFNNkFxYmlRd0pDTUFoT01kV0U3QTNWdHRMM0JBQmZSS0NGSUJEY0FMd0REaFZLZ2dZMEJVMkV4a1NFSUJEY0k2dEptQnZyTGFYdUNFQytpUUVLUUNINEFUZ0dYQ3FWQkF3b0N0c0pqSWtJQUNINEJ4YlRjRGVXRzB2Y1VNRTlFa0lVZ0FPd1FuQU0rQlVxU0JnUUZmWVRHUklRQUFPd1RtMm1vQzlzZHBlNG9ZSTZKTVFwQUFjZ2hPQVo4Q3BVa0hBZ0s2d21jaVFnQUFjZ25Oc05RRjdZN1c5eEEwUjBDY2hTQUU0QkNjQXo0QlRwWUtBQVYxaE01RWhBUUU0Qk9mWWFnTDJ4bXA3aVJzaW9FOUNrQUp3Q0U0QW5nR25TZ1VCQTdyQ1ppSkRBZ0p3Q002eDFRVHNqZFgyRWpkRVFKK0VJQVhnRUp3QVBBTk9sUW9DQm5TRnpVU0dCQVRnRUp4anF3bllHNnZ0Slc2SWdENEpRUXJBSVRnQmVBYWNLaFVFRE9nS200a01DUWpBSVRqSFZoT3dOMWJiUzl3UUFYMFNnaFNBUTNBQzhBdzRWU29JR05BVk5oTVpFaENBUTNDT3JTWmdiNnkybDdnaEF2b2tCQ2tBaCtBRTRCbHdxbFFRTUtBcmJDWXlKQ0FBaCtBY1cwM0EzbGh0TDNGREJQUkpDRklBRHNFSndEUGdWS2tnWUVCWDJFeGtTRUFBRHNFNXRwcUF2YkhhWHVLR0NPaVRFS1FBSElJVGdHZkFxVkpCd0lDdXNKbklrSUFBSElKemJEVUJlMk8xdmNRTkVkQW5JVWdCT0FRbkFNK0FVNldDZ0FGZFlUT1JJUUVCT0FUbjJHb0M5c1pxZTRrYklxQlBRcEFDY0FoT0FKNEJwMG9GQVFPNndtWWlRd0lDY0FqT3NkVUU3STNWOWhJM1JFQ2ZoQ0FGNEJDY0FEd0RUcFVLQWdaMGhjMUVoZ1FFNEJDY1k2c0oyQnVyN1NWdWlJQStDVUVLd0NFNEFYZ0duQ29WQkF6b0NwdUpEQWtJd0NFNHgxWVRzRGRXMjB2Y0VBRjlFb0lVZ0VOd0F2QU1PRlVxQ0JqUUZUWVRHUklRZ0VOd2pxMG1ZRytzdHBlNElRTDZKQVFwQUlmZ0JPQVpjS3BVRURDZ0syd21NaVFnQUlmZ0hGdE53TjVZYlM5eFF3VDBTUWhTQUE3QkNjQXo0RlNwSUdCQVY5aE1aRWhBQUE3Qk9iYWFnTDJ4Mmw3aWhnam9reENrQUJ5Q0U0Qm53S2xTUWNDQXJyQ1p5SkNBQUJ5Q2MydzFBWHRqdGIzRURSSFFKeUZJQVRnRUp3RFBnRk9sZ29BQlhXRXprU0VCQVRnRTU5aHFBdmJHYW51Skd5S2dUMEtRQW5BSVRnQ2VBYWRLQlFFRHVzSm1Ja01DQW5BSXpySFZCT3lOMWZZU04wUkFuNFFnQmVBUW5BQThBMDZWQ2dJR2RJWE5SSVlFQk9BUW5HT3JDZGdicSswbGJvaUFQZ2xCQ3NBaE9BRjRCcHdxRlFRTTZBcWJpUXdKQ01BaE9NZFdFN0EzVnR0TDNCQUJmUktDRklCRGNBTHdERGhWS2dnWTBCVTJFeGtTRUlCRGNJNnRKbUJ2ckxhWHVDRUMraVFFS1FDSDRBVGdHWENxVkJBd29DdHNKaklrSUFDSDRCeGJUY0RlV0cwdmNVTUU5RWtJVWdBT3dRbkFNK0JVcVNCZ1FGZllUR1JJUUFBT3dUbTJtb0M5c2RwZTRvWUk2Sk1RcEFBY2doT0FaOENwVWtIQWdLNndtY2lRZ0FBY2duTnNOUUY3WTdXOXhBMFIwQ2NoU0FFNEJDY0F6NEJUcFlLQUFWMWhNNUVoQVFFNEJPZllhZ0wyeG1wN2lSc2lvRTlDa0FKd0NFNEFuZ0duU2dVQkE3ckNaaUpEQWdKd0NNNngxUVRzamRYMkVqZEVRSitFSUFYZ0VKd0FQQU5PbFFvQ0JuU0Z6VVNHQkFUZ0VKeGpxd25ZRzZ2dEpXNklnRDRKUVFyQUlUZ0JlQWFjS2hVRURPZ0ttNGtNQ1FqQUlUakhWaE93TjFiYlM5d1FBWDBTZ2hTQVEzQUM4QXc0VlNvSUdOQVZOaE1aRWhDQVEzQ09yU1pnYjZ5Mmw3Z2hBdm9rQkNrQWgrQUU0Qmx3cWxRUU1LQXJiQ1l5SkNBQWgrQWNXMDNBM2xodEwzRkRCUFJKQ0ZJQURzRUp3RFBnVktrZ1lFQlgyRXhrU0VBQURzRTV0cHFBdmJIYVh1S0dDT2lURUtRQUhJSVRnR2ZBcVZKQndJQ3VzSm5Ja0lBQUhJSnpiRFVCZTJPMXZjUU5FZEFuSVVnQk9BUW5BTStBVTZXQ2dBRmRZVE9SSVFFQk9BVG4yR29DOXNacWU0a2JJcUJQUXBBQ2NBaE9BSjRCcDBvRkFRTzZ3bVlpUXdJQ2NBak9zZFVFN0kzVjloSTNSRUNmaENBRjRCQ2NBRHdEVHBVS0FnWjBoYzFFaGdRRTRCQ2NZNnNKMkJ1cjdTVnVpSUErQ1VFS3dDRTRBWGdHbkNvVkJBem9DcHVKREFrSXdDRTR4MVlUc0RkVzIwdmNFQUY5RW9JVWdFTndBdkFNT0ZVcUNCalFGVFlUR1JJUWdFTndqcTBtWUcrc3RwZTRJUUw2SkFRcEFJZmdCT0FaY0twVUVEQ2dLMndtTWlRZ0FJZmdIRnROd041WWJTOXhRd1QwU1FoU0FBN0JDY0F6NEZTcElHQkFWOWhNWkVoQUFBN0JPYmFhZ0wyeDJsN2loZ2pva3hDa0FCeUNFNEJud0tsU1FjQ0FyckNaeUpDQUFCeUNjMncxQVh0anRiM0VEUkhRSnlGSUFUZ0VKd0RQZ0ZPbGdvQUJYV0V6a1NFQkFUZ0U1OWhxQXZiR2FudUpHeUtnVDBLUUFuQUlUZ0NlQWFkS0JRRUR1c0ptSWtNQ0FuQUl6ckhWQk95TjFmWVNOMFJBbjRRZ0JlQVFuQUE4QTA2VkNnSUdkSVhOUklZRUJPQVFuR09yQ2RnYnErMGxib2lBUGdsQkNzQWhPQUY0QnB3cUZRUU02QXFiaVF3SkNNQWhPTWRXRTdBM1Z0dEwzQkFCZlJLQ0ZJQkRjQUx3RERoVktnZ1kwQlUyRXhrU0VJQkRjSTZ0Sm1CdnJMYVh1Q0VDK2lRRUtRQ0g0QVRnR1hDcVZCQXdvQ3RzSmpJa0lBQ0g0QnhiVGNEZVdHMHZjVU1FOUVrSVVnQU93UW5BTStCVXFTQmdRRmZZVEdSSVFBQU93VG0ybW9DOXNkcGU0b1lJNkpNUXBBQWNnaE9BWjhDcFVrSEFnSzZ3bWNpUWdBQWNnbk5zTlFGN1k3Vzl4QTBSMENjaFNBRTRCQ2NBejRCVHBZS0FBVjFoTTVFaEFRRTRCT2ZZYWdMMnhtcDdpUnNpb0U5Q2tBSndDRTRBbmdHblNnVUJBN3JDWmlKREFnSndDTTZ4MVFUc2pkWDJFamRFUUorRUlBWGdFSndBUEFOT2xRb0NCblNGelVTR0JBVGdFSnhqcXduWUc2dnRKVzZJZ0Q0SlFRckFJVGdCZUFhY0toVUVET2dLbTRrTUNRakFJVGpIVmhPd04xYmJTOXdRQVgwU2doU0FRM0FDOEF3NFZTb0lHTkFWTmhNWkVoQ0FRM0NPclNaZ2I2eTJsN2doQXZva0JDa0FoK0FFNEJsd3FsUVFNS0FyYkNZeUpDQUFoK0FjVzAzQTNsaHRMM0ZEQlBSSkNGSUFEc0VKd0RQZ1ZLa2dZRUJYMkV4a1NFQUFEc0U1dHBxQXZiSGFYdUtHQ09pVEVLUUFISUlUZ0dmQXFWSkJ3SUN1c0puSWtJQUFISUp6YkRVQmUyTzF2Y1FORWRBbklVZ0JPQVFuQU0rQVU2V0NnQUZkWVRPUklRRUJPQVRuMkdvQzlzWnFlNGtiSXFCUFFwQUNjQWhPQUo0QnAwb0ZBUU82d21ZaVF3SUNjQWpPc2RVRTdJM1Y5aEkzUkVDZmhDQUY0QkNjQUR3RFRwVUtBZ1owaGMxRWhnUUU0QkNjWTZzSjJCdXI3U1Z1aUlBK0NVRUt3Q0U0QVhnR25Db1ZCQXpvQ3B1SkRBa0l3Q0U0eDFZVHNEZFcyMHZjRUFGOUVvSVVnRU53QXZBTU9GVXFDQmpRRlRZVEdSSVFnRU53anEwbVlHK3N0cGU0SVFMNkpBUXBBSWZnQk9BWmNLcFVFRENnSzJ3bU1pUWdBSWZnSEZ0TndONVliUzl4UXdUMFNRaFNBQTdCQ2NBejRGU3BJR0JBVjloTVpFaEFBQTdCT2JhYWdMMngybDdpaGdqb2t4Q2tBQnlDRTRCbndLbFNRY0NBcnJDWnlKQ0FBQnlDYzJ3MUFYdGp0YjNFRFJIUUp5RklBVGdFSndEUGdGT2xnb0FCWFdFemtTRUJBVGdFNTlocUF2YkdhbnVKR3lLZ1QwS1FBbkFJVGdDZUFhZEtCUUVEdXNKbUlrTUNBbkFJenJIVkJPeU4xZllTTjBSQW40UWdCZUFRbkFBOEEwNlZDZ0lHZElYTlJJWUVCT0FRbkdPckNkZ2JxKzBsYm9pQVBnbEJDc0FoT0FGNEJwd3FGUVFNNkFxYmlRd0pDTUFoT01kV0U3QTNWdHRMM0JBQmZSS0NGSUJEY0FMd0REaFZLZ2dZMEJVMkV4a1NFSUJEY0k2dEptQnZyTGFYdUNFQytpUUVLUUNINEFUZ0dYQ3FWQkF3b0N0c0pqSWtJQUNINEJ4YlRjRGVXRzB2Y1VNRTlFa0lVZ0FPd1FuQU0rQlVxU0JnUUZmWVRHUklRQUFPd1RtMm1vQzlzZHBlNG9ZSTZKTVFwQUFjZ2hPQVo4Q3BVa0hBZ0s2d21jaVFnQUFjZ25Oc05RRjdZN1c5eEEwUjBDY2hTQUU0QkNjQXo0QlRwWUtBQVYxaE01RWhBUUU0Qk9mWWFnTDJ4bXA3aVJzaW9FOUNrQUp3Q0U0QW5nR25TZ1VCQTdyQ1ppSkRBZ0p3Q002eDFRVHNqZFgyRWpkRVFKK0VJQVhnRUp3QVBBTk9sUW9DQm5TRnpVU0dCQVRnRUp4anF3bllHNnZ0Slc2SWdENEpRUXJBSVRnQmVBYWNLaFVFRE9nS200a01DUWpBSVRqSFZoT3dOMWJiUzl3UUFYMFNnaFNBUTNBQzhBdzRWU29JR05BVk5oTVpFaENBUTNDT3JTWmdiNnkybDdnaEF2b2tCQ2tBaCtBRTRCbHdxbFFRTUtBcmJDWXlKQ0FBaCtBY1cwM0EzbGh0TDNGREJQUkpDRklBRHNFSndEUGdWS2tnWUVCWDJFeGtTRUFBRHNFNXRwcUF2YkhhWHVLR0NPaVRFS1FBSElJVGdHZkFxVkpCd0lDdXNKbklrSUFBSElKemJEVUJlMk8xdmNRTkVkQW5JVWdCT0FRbkFNK0FVNldDZ0FGZFlUT1JJUUVCT0FUbjJHb0M5c1pxZTRrYklxQlBRcEFDY0FoT0FKNEJwMG9GQVFPNndtWWlRd0lDY0FqT3NkVUU3STNWOWhJM1JFQ2ZoQ0FGNEJDY0FEd0RUcFVLQWdaMGhjMUVoZ1FFNEJDY1k2c0oyQnVyN1NWdWlJQStDVUVLd0NFNEFYZ0duQ29WQkF6b0NwdUpEQWtJd0NFNHgxWVRzRGRXMjB2Y0VBRjlFb0lVZ0VOd0F2QU1PRlVxQ0JqUUZUWVRHUklRZ0VOd2pxMG1ZRytzdHBlNElRTDZKQVFwQUlmZ0JPQVpjS3BVRURDZ0syd21NaVFnQUlmZ0hGdE53TjVZYlM5eFF3VDBTUWhTQUE3QkNjQXo0RlNwSUdCQVY5aE1aRWhBQUE3Qk9iYWFnTDJ4Mmw3aWhnam9reENrQUJ5Q0U0Qm53S2xTUWNDQXJyQ1p5SkNBQUJ5Q2MydzFBWHRqdGIzRURSSFFKeUZJQVRnRUp3RFBnRk9sZ29BQlhXRXprU0VCQVRnRTU5aHFBdmJHYW51Skd5S2dUMEtRQW5BSVRnQ2VBYWRLQlFFRHVzSm1Ja01DQW5BSXpySFZCT3lOMWZZU04wUkFuNFFnYndQd1AvK24veEJXY2d3QkJCQkFBQUVFcmhMNDI3LzliMzg4OG5kLzk2K3ZIblU5QWdnZ2dBQUNDRndrOEJmLzhULy84Y1FQMzM1T3dnTHdSWUl1UndBQkJCQkE0QTRDQXZBZDhCeEZBQUVFRUVEZ0lvRmZCT0J2Ly9qM1AxeXM0Zkp2Mzc3NUt3Z2VBd1ErSjZBL1BCMElmRTdBWDRIMmRDRHdTd0wyaHFjQ2dXTUMrdVNZMGE5ZTRXZUFRM0EzeHp5QU14eFYyVWxBZit6MGxhb1pBZ0x3REVkVmRoR3dOM2I1U2MzWEVOQW5JVmNCT0FRbkFNK0FVNldDZ0FGZFlUT1JJUUVCT0FUbjJHb0M5c1pxZTRrYklxQlBRcEFDY0FoT0FKNEJwMG9GQVFPNndtWWlRd0lDY0FqT3NkVUU3STNWOWhJM1JFQ2ZoQ0FGNEJDY0FEd0RUcFVLQWdaMGhjMzFJdi9yUC8zNDQ3OUErTGQvK2NPbDM2VWhBTmMvT2dEOENnRjd3Mk9Cd0RFQmZYTE02RmV2RUlCRGNBTHdERGhWS2dnWTBCVTIxNHNVZ09zZkFRQUdDZGdiZ3pDVldrdEFuNFRXQ3NBaE9BRjRCcHdxRlFRTTZBcWI2MFIrQk40ajRVZmZDUHNHK0lpZzF4c0oyQnVOcnROOGxZQSt1VXJzNStzRjRCQ2NBRHdEVHBVS0FnWjBoYzExSWdYZ09zc0pmaUFCZStPQnNMM1YyeExRSjZGMUFuQUlUZ0NlQWFkS0JRRUR1c0xtR3BHM3dmZjJHOTdQZ3ZGbjN3VDdCcmptMFNIMEFnRjc0d0lzbDlZUzBDZWg5UUp3Q0U0QW5nR25TZ1VCQTdyQzVocVJBbkNOMVlRK2tZQzk4VVQ0M3ZwdENPaVQwQ29CT0FRbkFNK0FVNldDZ0FGZFlYT055S01BL0FIaTdIVytBYTU1ZEFpOVFNRGV1QURMcGJVRTlFbG92UUFjZ2hPQVo4Q3BVa0hBZ0s2d3VVYmsyV0I3OWpvQnVPYlJJZlFDQVh2akFpeVgxaExRSjZIMUFuQUlUZ0NlQWFkS0JRRUR1c0xtR3BGbmcrM1pud1VXZ0dzZUhVSXZFTEEzTHNCeWFTMEJmUkphTHdDSDRBVGdHWENxVkJBd29DdHNyaEVwQU5kWVRlZ1RDZGdiVDRUdnJkK0dnRDRKclJLQVEzQUM4QXc0VlNvSUdOQVZOcThSK1JGd2ovNzkzalFJMzliMURmQ2FSNGVRUVFMMnhpQk1wZFlTMENlaHRRSndDRTRBbmdHblNnVUJBN3JDNWpVaUJlQTFWaEx5eGdUc2pUYzJ6NjAvaklBK0NWRUx3Q0U0QVhnR25Db1ZCQXpvQ3B2ZlZ1Um5QNnQ3S3lqOTkzNlB2aW4yRGZEYlBqcHUvQXNKMkJ0ZkNGZnBOUVQwU1dpbEFCeUNFNEJud0tsU1FjQ0FyckQ1YlVVS3dHOXJuUnRmVE1EZVdHd3VhV01FOUVtSVVnQU93UW5BTStCVXFTQmdRRmZZL0hZaWo3NlpQZnRibk5NQS9RSE1OOEJ2OStpNDRRY1FzRGNlQU5sYnZEMEJmUkphS0FDSDRBVGdHWENxVkJBd29DdHNmanVSQXZEYldlYUdpd2pZRzBWbWt4b1QwQ2NoT2dFNEJDY0F6NEJUcFlLQUFWMWg4OXVKUEFyQUg0TE9YbmQ3L2RGdmtmWU44TnM5TW03NGdRVHNqUWZDOWxadlMwQ2ZoTllKd0NFNEFYZ0duQ29WQkF6b0NwdmZUdVRaWUh2Mk9nSDQ3UjRCTi96Q0JPeU5GemJIcmIwTUFYMFNXaUVBaCtBRTRCbHdxbFFRTUtBcmJINDdrV2VEN2RtZkJVNEIrQm5nbEp4em13bllHNXZkcFcyS2dENEpTUXJBSVRnQmVBYWNLaFVFRE9nS205OU9wQUQ4ZHBhNTRTSUM5a2FSMmFUR0JQUkppRTRBRHNFSndEUGdWS2tnWUVCWDJQd3lJczhHMjQ4YlBudjkyZXV1Z3ZBTjhGVmlybThnWUc4MHVFemp2UVQwU1VoUUFBN0JDY0F6NEZTcElHQkFWOWo4TWlLdkJ0V3oxNSs5N2lvSUFmZ3FNZGMzRUxBM0dseW04VjRDK2lRa0tBQ0g0QVRnR1hDcVZCQXdvQ3RzZmhtUlYzOW05K3oxQXZETFdPeEdPL202SEFBQUZTQkpSRUZVQ2dqWUd3VW1rM2czQVgwU0loU0FRM0FDOEF3NFZTb0lHTkFWTnIrTXlMT0I5dU9HejE0dkFMK014VzZrZ0lDOVVXQXlpWGNUMENjaFFnRTRCQ2NBejRCVHBZS0FBVjFoODlORmZoWmtiMi9zczMrZjk5N3pLUUIvQlRvbDU5eG1BdmJHWm5kcG15S2dUMEtTQW5BSVRnQ2VBYWRLQlFFRHVzTG1wNHU4TjhEZWV6NEZJQUNuNUp6YlRNRGUyT3d1YlZNRTlFbElVZ0FPd1FuQU0rQlVxU0JnUUZmWS9IU1JId0gyOWh2ZTlLOHVmMVp2V3FnQVBFMVV2UTBFN0kwTkx0THcxUVQwU1VoWUFBN0JDY0F6NEZTcElHQkFWOWo4ZEpFQzhOTXRjQU1JakJHd044WlFLclNZZ0Q0SnpSV0FRM0FDOEF3NFZTb0lHTkFWTnIrOHlNKytDWDdVTjcyZkFmSU44TXMvT203d0NRVHNqU2RBOTVadlIwQ2ZoSllKd0NFNEFYZ0duQ29WQkF6b0NwdGZYcVFBL1BJV3VVRUUva1RBM3ZBd0lIQk1RSjhjTS9yVkt3VGdFSndBUEFOT2xRb0NCblNGelM4djhsbS81T29JakcrQWp3aDV2WkdBdmRIb09zMVhDZWlUcThSK3ZsNEFEc0VKd0RQZ1ZLa2dZRUJYMlB6eUlnWGdsN2ZJRFNMZ0cyRFBBQUlYQ1BoOGRRSFduMThxQUlmZ0JPQVpjS3BVRURDZ0syeCtlWkdmQmVEUC9sM2dSd255RGZDalNIdWZkeUpnYjd5VFcrNzFXUVQwU1VoZUFBN0JDY0F6NEZTcElHQkFWOWo4OGlJRjRKZTN5QTBpNEJ0Z3p3QUNGd2o0ZkhVQmxtK0FRMWkvY2N3RE9NOVV4VDBFOU1jZUwxOUp5ZGwvMy9mc2RjL1M1aHZnWjVIM3ZxOU13TjU0WlhmYzI2c1EwQ2VoRTc0QkRzSDVCbmdHbkNvVkJBem9DcHNmTHZKc3NEMTczY01GL1B5R0F2Q3p5SHZmVnlaZ2I3eXlPKzd0VlFqb2s5QUpBVGdFSndEUGdGT2xnb0FCWFdIencwUys2bDlsVGdFSXdDazU1ellUc0RjMnUwdmJGQUY5RXBJVWdFTndBdkFNT0ZVcUNCalFGVFkvVEtRQS9ERFUzZ2lCcHhHd041NkczaHUvRVFGOUVwb2xBSWZnQk9BWmNLcFVFRENnSzJ6K2NwR3YvbGVaVXdDK0FVN0pPYmVaZ0wyeDJWM2FwZ2pvazVDa0FCeUNFNEJud0tsU1FjQ0FyckQ1eTBVS3dGK08yQnNnOERJRTdJMlhzY0tOdkRBQmZSS2FJd0NINEFUZ0dYQ3FWQkF3b0N0c0pqSWs0QnZnRUp4anF3bllHNnZ0Slc2SWdENEpRUXJBSVRnQmVBYWNLaFVFRE9nS200a01DUWpBSVRqSFZoT3dOMWJiUzl3UUFYMFNnaFNBUTNBQzhBdzRWU29JR05BVk5oTVpFaENBUTNDT3JTWmdiNnkybDdnaEF2b2tCQ2tBaCtBRTRCbHdxbFFRTUtBcmJDWXlKQ0FBaCtBY1cwM0EzbGh0TDNGREJQUkpDRklBRHNFSndEUGdWS2tnWUVCWDJFeGtTRUFBRHNFNXRwcUF2YkhhWHVLR0NPaVRFS1FBSElJVGdHZkFxVkpCd0lDdXNKbklrSUFBSElKemJEVUJlMk8xdmNRTkVkQW5JVWdCT0FRbkFNK0FVNldDZ0FGZFlUT1JJUUVCT0FUbjJHb0M5c1pxZTRrYklxQlBRcEFDY0FoT0FKNEJwMG9GQVFPNndtWWlRd0lDY0FqT3NkVUU3STNWOWhJM1JFQ2ZoQ0FGNEJDY0FEd0RUcFVLQWdaMGhjMUVoZ1FFNEJDY1k2c0oyQnVyN1NWdWlJQStDVUVLd0NFNEFYZ0duQ29WQkF6b0NwdUpEQWtJd0NFNHgxWVRzRGRXMjB2Y0VBRjlFb0lVZ0VOd0F2QU1PRlVxQ0JqUUZUWVRHUklRZ0VOd2pxMG1ZRytzdHBlNElRTDZKQVFwQUlmZ0JPQVpjS3BVRURDZ0syd21NaVFnQUlmZ0hGdE53TjVZYlM5eFF3VDBTUWhTQUE3QkNjQXo0RlNwSUdCQVY5aE1aRWhBQUE3Qk9iYWFnTDJ4Mmw3aWhnam9reENrQUJ5Q0U0Qm53S2xTUWNDQXJyQ1p5SkNBQUJ5Q2MydzFBWHRqdGIzRURSSFFKeUZJQVRnRUp3RFBnRk9sZ29BQlhXRXprU0VCQVRnRTU5aHFBdmJHYW51Skd5S2dUMEtRQW5BSVRnQ2VBYWRLQlFFRHVzSm1Ja01DQW5BSXpySFZCT3lOMWZZU04wUkFuNFFnQmVBUW5BQThBMDZWQ2dJR2RJWE5SSVlFQk9BUW5HT3JDZGdicSswbGJvaUFQZ2xCQ3NBaE9BRjRCcHdxRlFRTTZBcWJpUXdKQ01BaE9NZFdFN0EzVnR0TDNCQUJmUktDRklCRGNBTHdERGhWS2dnWTBCVTJFeGtTRUlCRGNJNnRKbUJ2ckxhWHVDRUMraVFFS1FDSDRBVGdHWENxVkJBd29DdHNKaklrSUFDSDRCeGJUY0RlV0cwdmNVTUU5RWtJVWdBT3dRbkFNK0JVcVNCZ1FGZllUR1JJUUFBT3dUbTJtb0M5c2RwZTRvWUk2Sk1RcEFBY2doT0FaOENwVWtIQWdLNndtY2lRZ0FBY2duTnNOUUY3WTdXOXhBMFIwQ2NoU0FFNEJDY0F6NEJUcFlLQUFWMWhNNUVoQVFFNEJPZllhZ0wyeG1wN2lSc2lvRTlDa0FKd0NFNEFuZ0duU2dVQkE3ckNaaUpEQWdKd0NNNngxUVRzamRYMkVqZEVRSitFSUFYZ0VKd0FQQU5PbFFvQ0JuU0Z6VVNHQkFUZ0VKeGpxd25ZRzZ2dEpXNklnRDRKUVFyQUlUZ0JlQWFjS2hVRURPZ0ttNGtNQ1FqQUlUakhWaE93TjFiYlM5d1FBWDBTZ2hTQVEzQUM4QXc0VlNvSUdOQVZOaE1aRWhDQVEzQ09yU1pnYjZ5Mmw3Z2hBdm9rQkNrQWgrQUU0Qmx3cWxRUU1LQXJiQ1l5SkNBQWgrQWNXMDNBM2xodEwzRkRCUFJKQ0ZJQURzRUp3RFBnVktrZ1lFQlgyRXhrU0VBQURzRTV0cHFBdmJIYVh1S0dDT2lURUtRQUhJSVRnR2ZBcVZKQndJQ3VzSm5Ja0lBQUhJSnpiRFVCZTJPMXZjUU5FZEFuSVVnQk9BUW5BTStBVTZXQ2dBRmRZVE9SSVFFQk9BVG4yR29DOXNacWU0a2JJcUJQUXBBQ2NBaE9BSjRCcDBvRkFRTzZ3bVlpUXdJQ2NBak9zZFVFN0kzVjloSTNSRUNmaENBRjRCQ2NBRHdEVHBVS0FnWjBoYzFFaGdRRTRCQ2NZNnNKMkJ1cjdTVnVpSUErQ1VFS3dDRTRBWGdHbkNvVkJBem9DcHVKREFrSXdDRTR4MVlUc0RkVzIwdmNFQUY5RW9JVWdFTndBdkFNT0ZVcUNCalFGVFlUR1JJUWdFTndqcTBtWUcrc3RwZTRJUUw2SkFRcEFJZmdCT0FaY0twVUVEQ2dLMndtTWlRZ0FJZmdIRnROd041WWJTOXhRd1QwU1FoU0FBN0JDY0F6NEZTcElHQkFWOWhNWkVoQUFBN0JPYmFhZ0wyeDJsN2loZ2pva3hDa0FCeUNFNEJud0tsU1FjQ0FyckNaeUpDQUFCeUNjMncxQVh0anRiM0VEUkhRSnlGSUFUZ0VKd0RQZ0ZPbGdvQUJYV0V6a1NFQkFUZ0U1OWhxQXZiR2FudUpHeUtnVDBLUUFuQUlUZ0NlQWFkS0JRRUR1c0ptSWtNQ0FuQUl6ckhWQk95TjFmWVNOMFJBbjRRZ0JlQVFuQUE4QTA2VkNnSUdkSVhOUklZRUJPQVFuR09yQ2RnYnErMGxib2lBUGdsQkNzQWhPQUY0QnB3cUZRUU02QXFiaVF3SkNNQWhPTWRXRTdBM1Z0dEwzQkFCZlJLQ0ZJQkRjQUx3RERoVktnZ1kwQlUyRXhrU0VJQkRjSTZ0Sm1CdnJMYVh1Q0VDK2lRRUtRQ0g0QVRnR1hDcVZCQXdvQ3RzSmpJa0lBQ0g0QnhiVGNEZVdHMHZjVU1FOUVrSVVnQU93UW5BTStCVXFTQmdRRmZZVEdSSVFBQU93VG0ybW9DOXNkcGU0b1lJNkpNUXBBQWNnaE9BWjhDcFVrSEFnSzZ3bWNpUWdBQWNnbk5zTlFGN1k3Vzl4QTBSMENjaFNBRTRCQ2NBejRCVHBZS0FBVjFoTTVFaEFRRTRCT2ZZYWdMMnhtcDdpUnNpb0U5Q2tBSndDRTRBbmdHblNnVUJBN3JDWmlKREFnSndDTTZ4MVFUc2pkWDJFamRFUUorRUlBWGdFSndBUEFOT2xRb0NCblNGelVTR0JBVGdFSnhqcXduWUc2dnRKVzZJZ0Q0SlFRckFJVGdCZUFhY0toVUVET2dLbTRrTUNRakFJVGpIVmhPd04xYmJTOXdRQVgwU2doU0FRM0FDOEF3NFZTb0lHTkFWTmhNWkVoQ0FRM0NPclNaZ2I2eTJsN2doQXZva0JDa0FoK0FFNEJsd3FsUVFNS0FyYkNZeUpDQUFoK0FjVzAzQTNsaHRMM0ZEQlBSSkNGSUFEc0VKd0RQZ1ZLa2dZRUJYMkV4a1NFQUFEc0U1dHBxQXZiSGFYdUtHQ09pVEVLUUFISUlUZ0dmQXFWSkJ3SUN1c0puSWtJQUFISUp6YkRVQmUyTzF2Y1FORWRBbklVZ0JPQVFuQU0rQVU2V0NnQUZkWVRPUklRRUJPQVRuMkdvQzlzWnFlNGtiSXFCUFFwQUNjQWhPQUo0QnAwb0ZBUU82d21ZaVF3SUNjQWpPc2RVRTdJM1Y5aEkzUkVDZmhDQUY0QkNjQUR3RFRwVUtBZ1owaGMxRWhnUUU0QkNjWTZzSjJCdXI3U1Z1aUlBK0NVRUt3Q0U0QVhnR25Db1ZCQXpvQ3B1SkRBa0l3Q0U0eDFZVHNEZFcyMHZjRUFGOUVvSVVnRU53QXZBTU9GVXFDQmpRRlRZVEdSSVFnRU53anEwbVlHK3N0cGU0SVFMNkpBUXBBSWZnQk9BWmNLcFVFRENnSzJ3bU1pUWdBSWZnSEZ0TndONVliUzl4UXdUMFNRaFNBQTdCQ2NBejRGU3BJR0JBVjloTVpFaEFBQTdCT2JhYWdMMngybDdpaGdqb2t4Q2tBQnlDRTRCbndLbFNRY0NBcnJDWnlKQ0FBQnlDYzJ3MUFYdGp0YjNFRFJIUUp5RklBVGdFSndEUGdGT2xnb0FCWFdFemtTRUJBVGdFNTlocUF2YkdhbnVKR3lLZ1QwS1FBbkFJVGdDZUFhZEtCUUVEdXNKbUlrTUNBbkFJenJIVkJPeU4xZllTTjBSQW40UWdCZUFRbkFBOEEwNlZDZ0lHZElYTlJJWUVCT0FRbkdPckNkZ2JxKzBsYm9pQVBnbEJDc0FoT0FGNEJwd3FGUVFNNkFxYmlRd0pDTUFoT01kV0U3QTNWdHRMM0JBQmZSS0NGSUJEY0FMd0REaFZLZ2dZMEJVMkV4a1NFSUJEY0k2dEptQnZyTGFYdUNFQytpUUVLUUNINEFUZ0dYQ3FWQkF3b0N0c0pqSWtJQUNINEJ4YlRjRGVXRzB2Y1VNRTlFa0lVZ0FPd1FuQU0rQlVxU0JnUUZmWVRHUklRQUFPd1RtMm1vQzlzZHBlNG9ZSTZKTVFwQUFjZ2hPQVo4Q3BVa0hBZ0s2d21jaVFnQUFjZ25Oc05RRjdZN1c5eEEwUjBDY2hTQUU0QkNjQXo0QlRwWUtBQVYxaE01RWhBUUU0Qk9mWWFnTDJ4bXA3aVJzaW9FOUNrQUp3Q0U0QW5nR25TZ1VCQTdyQ1ppSkRBZ0p3Q002eDFRVHNqZFgyRWpkRVFKK0VJQVhnRUp3QVBBTk9sUW9DQm5TRnpVU0dCQVRnRUp4anF3bllHNnZ0Slc2SWdENEpRUXJBSVRnQmVBYWNLaFVFRE9nS200a01DUWpBSVRqSFZoT3dOMWJiUzl3UUFYMFNnaFNBUTNBQzhBdzRWU29JR05BVk5oTVpFaENBUTNDT3JTWmdiNnkybDdnaEF2b2tCQ2tBaCtBRTRCbHdxbFFRTUtBcmJDWXlKQ0FBaCtBY1cwM0EzbGh0TDNGREJQUkpDRklBRHNFSndEUGdWS2tnWUVCWDJFeGtTRUFBRHNFNXRwcUF2YkhhWHVLR0NPaVRFS1FBSElJVGdHZkFxVkpCd0lDdXNKbklrSUFBSElKemJEVUJlMk8xdmNRTkVkQW5JVWdCT0FRbkFNK0FVNldDZ0FGZFlUT1JJUUVCT0FUbjJHb0M5c1pxZTRrYklxQlBRcEFDY0FoT0FKNEJwMG9GQVFPNndtWWlRd0lDY0FqT3NkVUU3STNWOWhJM1JFQ2ZoQ0FGNEJDY0FEd0RUcFVLQWdaMGhjMUVoZ1FFNEJDY1k2c0oyQnVyN1NWdWlJQStDVUVLd0NFNEFYZ0duQ29WQkF6b0NwdUpEQWtJd0NFNHgxWVRzRGRXMjB2Y0VBRjlFb0lVZ0VOd0F2QU1PRlVxQ0JqUUZUWVRHUklRZ0VOd2pxMG1ZRytzdHBlNElRTDZKQVFwQUlmZ0JPQVpjS3BVRURDZ0syd21NaVFnQUlmZ0hGdE53TjVZYlM5eFF3VDBTUWhTQUE3QkNjQXo0RlNwSUdCQVY5aE1aRWhBQUE3Qk9iYWFnTDJ4Mmw3aWhnam9reENrQUJ5Q0U0Qm53S2xTUWNDQXJyQ1p5SkNBQUJ5Q2MydzFBWHRqdGIzRURSSFFKeUZJQVRnRUp3RFBnRk9sZ29BQlhXRXprU0dCZXdQd1gvL043Mzc4ODdmK3d6Lzgvb2Z3Vmh3cklQQXV6NHU5VWZBd2tuZzNBWDBTSWhTQVEzQUM4QXc0VlNvSUdOQVZOaE1aRWhDQVEzQ09SUVFFNEFpYlF3aThKQUdmcjBKYkJPQVFuQUE4QTA2VkNnSUdkSVhOUklZRTBnQjhOc2o4K0UvZnZ2dUcrSWUvL1BiZE44UkhyNStWZFZ2bjl0enQrNTZ0KzhIbjQvcS8rdmJEZC9kLzlQclo5MG12UzkvLzl0enQrOS9xdkgzOTN2Tm5uNStVeTczbjdJMTdDVHJmUUVDZmhDNEx3Q0U0QVhnR25Db1ZCQXpvQ3B1SkRBa0l3TDhON2loZ0hyMGUybkw2V1ByKzl3YlllODhMd0tjdGRpRUNMMHZBNTZ2UUdnRTRCQ2NBejRCVHBZS0FBVjFoTTVFaGdYY1B3RWZmSUIrOWZvVHRLR0Fldlg1VVAzMzlzd0I2OVp2YnE5OW9IK2s5ZXYxRHJ3Q2NPdThjQXE5RHdPZXIwQXNCT0FRbkFNK0FVNldDZ0FGZFlUT1JJUUVCK0xmQkhRVzZvOWREV3c2UENjQ0hpTzY2d042NEM1L0RKUVQwU1dpMEFCeUNFNEJud0tsU1FjQ0FyckNaeUpEQTFRQ2Nmbk9YL296dTBUZTQ5NzUrRmx2NlYzNi9PaUJmclg5MC9WZS9mc3M3Zlo3TytwWmVaMitrNUp4cklxQlBRcmNGNEJDY0FEd0RUcFVLQWdaMGhjMUVoZ1FFNEhQZ0JPQ2ZPTjBia0FYZ2M4K2JxeEI0QndJK1g0VXVDY0FoT0FGNEJwd3FGUVFNNkFxYmlRd0pQQ29BZjl6ZTBUZTJ0ektPcnIvMzliUFl0Z1RnRDcxZnBlY29JQXZBWjU4NDF5SHcrZ1I4dmdvOUVvQkRjQUx3RERoVktnZ1kwQlUyRXhrU0VJRFBnZnVxd0hqdTNUKy82bXJnRklEUEViYzN6bkZ5VlRjQmZSTDZMd0NINEFUZ0dYQ3FWQkF3b0N0c0pqSWs4T29CK0VqV283NEIvaXc0SHYzVzVhUDdUNE4xZWo5SGdmbXJYNy9sNFdlQWo1NFFyeVB3dWdSOHZncTlFWUJEY0FMd0REaFZLZ2dZMEJVMkV4a1NFSUN2Z1RzS2lOZXEvZkpuYW0vUEh3WHNxL2R6ZFAxWHZ5NEFYMzFDWEkvQTZ4THcrU3IwUmdBT3dRbkFNK0JVcVNCZ1FGZllUR1JJNEZFQk9QMHQwRWV5M3YwYjRDTjlSNjhmQmRiYjgwZlhmL1hyQXZDUm8xNUg0SDBJK0h3VmVpVUFoK0FFNEJsd3FsUVFNS0FyYkNZeUpDQUFYd04zRkJDdlZidi82cXYzYzNUOVY3OHVBTi92dVFvSXZBb0JuNjlDSndUZ0VKd0FQQU5PbFFvQ0JuU0Z6VVNHQkw0NkFOLzdEZTFYbjcvNk02aEhBZkhxTjY2aGJYODZObjAvUi9YdWZWMEF2dGR4NXhGNEhRSStYNFZlQ01BaE9BRjRCcHdxRlFRTTZBcWJpUXdKQ01DLysvSFAwZjNoSDM3L3cyK2hQQXFBQXZDUDMvRTgraG5tcTM4QUVUN21sNC9aRzVlUk9WQklRSitFcGd2QUlUZ0JlQWFjS2hVRURPZ0ttNGtNQ1Z3TndCOXZjemE0ZlBVM3VCLzNrLzZNOFZrZEgrL3pLZ0Y0K3JkSDN6NCtSOEgxM3ZlL3lqMTh2T05qOWthTXpzRWlBdm9rTkZzQURzRUp3RFBnVktrZ1lFQlgyRXhrU0VBQWZzOXZnTzhOb004K0x3Q0hEZXNZQWk5RXdPZXIwQXdCT0FRbkFNK0FVNldDZ0FGZFlUT1JJWUd2RHNEaGJUM3MyS3NIc1llQmVQQWJ2VHAzZStQQkQ0UzNlMHNDK2lTMFRRQU93UW5BTStCVXFTQmdRRmZZVEdSSVFBQys5ZzF3aU5teEd3SUNzRWNDZ2ZjbjRQTlY2S0VBSElJVGdHZkFxVkpCd0lDdXNKbklrRUFhZ0QvZTd0V0R6QkdXai9zLyt1VlhSM1c4Zm83QXV6d3Y5c1k1UDEzVlRVQ2ZoUDRMd0NFNEFYZ0duQ29WQkF6b0NwdUpEQWtJd0Q5OUF5d0Fody9ReFdNQzhFVmdMa2ZnaFFuNGZCV2FJd0NINEFUZ0dYQ3FWQkF3b0N0c0pqSWtjRzhBRHQvV01RUmVtb0M5OGRMMnVMa1hJYUJQUWlNRTRCQ2NBRHdEVHBVS0FnWjBoYzFFaGdRRTRCQ2NZNnNKMkJ1cjdTVnVpSUErQ1VFS3dDRTRBWGdHbkNvVkJBem9DcHVKdkVqZzlxK2lmaHozVjRFdmduVDVTZ0wyeGtwYmlSb21vRTlDb0FKd0NFNEFuZ0duU2dVQkE3ckNaaUl2RWhDQUx3SnplUlVCZTZQS2JtSkRBdm9rQkNjQWgrQUU0Qmx3cWxRUU1LQXJiQ2J5SklIUGd1L3RjZDhFbndUcXNwVUU3STJWdGhJMVRFQ2ZoRUFGNEJDY0FEd0RUcFVLQWdaMGhjMUVuaVFnQUo4RTViSnFBdlpHdGYzRW55U2dUMDZDdXIzc0Z3RTRyT01ZQWdnZ2dBQUNDQ0NBQUFJSUlJQUFBdTlBNElkdlB5ZmhkN2haOTRnQUFnZ2dnQUFDQ0NDQUFBSUlJSUJBU3VEL0J6bm1MbHFtemp2bUFBQUFBRWxGVGtTdVFtQ0MiOwogICAgICAgIGNyb3NzRWxlbWVudC5pZCA9ICJTUF9UZXh0LURlYnVnLUNyb3NzIjsKICAgICAgICBjcm9zc0VsZW1lbnQuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwogICAgICAgIGNyb3NzRWxlbWVudC5zdHlsZS53aWR0aCA9ICI0ODBweCI7IGNyb3NzRWxlbWVudC5zdHlsZS5oZWlnaHQgPSAiMzYwcHgiOwogICAgICAgIGNyb3NzRWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSAidHJhbnNsYXRlKC01MCUsIC01MCUpIjsKICAgICAgICBjcm9zc0VsZW1lbnQuc3R5bGUuekluZGV4ID0gIjAiOwogICAgICAgIHJlbmRlci5hZGRPdmVybGF5KGNyb3NzRWxlbWVudCwgInNjYWxlLWNlbnRlcmVkIik7CiAgICAgICAgYWxsVGV4dC5wdXNoKGAjU1BfVGV4dC1EZWJ1Zy1Dcm9zc2ApOwogICAgICB9CiAgICB9CgogICAgcHJpbnRUeHQoYXJncykgewogICAgICBjb25zdCBJRCA9IHRoaXMuZml4SUQoYXJncy5JRCk7CiAgICAgIGNvbnN0IHNldHRpbmdzID0gdHh0U2V0dGluZ3NbSURdOwogICAgICBjb25zdCB0ZXh0RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIHRleHREaXYuc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gImxlZnQgdG9wIjsKICAgICAgY29uc3QgdHh0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICB0eHRFbGVtZW50LmlubmVySFRNTCA9IHhtbEVzY2FwZShhcmdzLlRYVCkucmVwbGFjZSgvXG4vZywgIjxicj4iKTsKICAgICAgdHh0RWxlbWVudC5pZCA9IGBTUF9UZXh0LUV4dC0ke0lEfWA7CiAgICAgIHR4dEVsZW1lbnQuY2xhc3NMaXN0LmFkZChJRCk7CiAgICAgIHR4dEVsZW1lbnQuc3R5bGUudXNlclNlbGVjdCA9ICJub25lIjsKICAgICAgdHh0RWxlbWVudC5zZXRBdHRyaWJ1dGUoInNwdHh0cG9zIiwgIjEyMHwtMTAiKTsKICAgICAgdGV4dERpdi5hcHBlbmRDaGlsZCh0eHRFbGVtZW50KTsKICAgICAgcmVuZGVyLmFkZE92ZXJsYXkodGV4dERpdiwgInNjYWxlLWNlbnRlcmVkIik7CiAgICAgIGFsbFRleHQucHVzaChgI1NQX1RleHQtRXh0LSR7SUR9YCk7CiAgICAgIGNvbnN0IGJveCA9IHR4dEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGlmIChzZXR0aW5ncy50ZXh0TUFSID09PSB1bmRlZmluZWQpIHRoaXMuc2V0TWFyZ2lucyh7IElELCBXSURUSCA6IGJveC53aWR0aCAvIDIsIEhFSUdIVCA6IGJveC5oZWlnaHQgfSk7CiAgICAgIHRoaXMudXBkYXRlU3R5bGVzKHNldHRpbmdzKTsgLy8gYWRkIGZvcm1hdHRpbmcgKGlmIGFueSkKICAgIH0KCiAgICByZXBsYWNlVHh0KGFyZ3MpIHsKICAgICAgY29uc3QgZWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBkaXZbaWQ9IlNQX1RleHQtRXh0LSR7dGhpcy5maXhJRChhcmdzLklEKX0iXWApOwogICAgICBpZiAoZWxlbWVudHMubGVuZ3RoID4gMCkgZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4geyBlbGVtZW50LmlubmVySFRNTCA9IHhtbEVzY2FwZShhcmdzLlRYVCkucmVwbGFjZSgvXG4vZywgIjxicj4iKSB9KTsKICAgICAgZWxzZSB0aGlzLnByaW50VHh0KGFyZ3MpOwogICAgfQoKICAgIHJlbW92ZVR4dChhcmdzKSB7CiAgICAgIGNvbnN0IElEID0gdGhpcy5maXhJRChhcmdzLklEKTsKICAgICAgY29uc3QgZWxlbWVudHNUb1JlbW92ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYGRpdltpZD0iU1BfVGV4dC1FeHQtJHtJRH0iXWApOwogICAgICBlbGVtZW50c1RvUmVtb3ZlLmZvckVhY2goKGVsZW1lbnQpID0+IHsKICAgICAgICByZW5kZXIucmVtb3ZlT3ZlcmxheShlbGVtZW50LnBhcmVudE5vZGUpOwogICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLmhhbmRsZUNsaWNrKTsKICAgICAgICBjb25zdCBpbmRleCA9IGFsbFRleHQuaW5kZXhPZihgI1NQX1RleHQtRXh0LSR7SUR9YCk7CiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkgYWxsVGV4dC5zcGxpY2UoaW5kZXgsIDEpOwogICAgICB9KTsKICAgIH0KCiAgICByZW1vdmVBbGxUeHQoKSB7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWxsVGV4dC5sZW5ndGg7IGkrKykgewogICAgICAgIGNvbnN0IGVsZW1lbnRzVG9SZW1vdmUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGFsbFRleHRbaV0pOwogICAgICAgIGVsZW1lbnRzVG9SZW1vdmUuZm9yRWFjaCgoZWxlbWVudCkgPT4gewogICAgICAgICAgcmVuZGVyLnJlbW92ZU92ZXJsYXkoZWxlbWVudC5wYXJlbnROb2RlKTsKICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLmhhbmRsZUNsaWNrKTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBhbGxUZXh0ID0gW107IGNsaWNrZWRUeHRzID0gW107CiAgICB9CgogICAgZGlzcGxheWVkVGV4dHMoYXJncykgewogICAgICBsZXQgdGV4dHMgPSBbXTsKICAgICAgY29uc3QgZWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBkaXZbaWQ9IlNQX1RleHQtRXh0LSR7dGhpcy5maXhJRChhcmdzLklEKX0iXWApOwogICAgICBlbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7IHRleHRzLnB1c2goZWxlbWVudC50ZXh0Q29udGVudCkgfSk7CiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0ZXh0cyk7CiAgICB9CgogICAgYWxsSURzKCkgewogICAgICBjb25zdCBjbGVhbmVkSURzID0gYWxsVGV4dC5tYXAoKGl0ZW0pID0+IGl0ZW0ucmVwbGFjZSgvXiNTUF9UZXh0LUV4dC0vLCAiIikpOwogICAgICBmb3IgKGxldCBpID0gY2xlYW5lZElEcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICAgIGlmIChjbGVhbmVkSURzW2ldID09PSAiI1NQX1RleHQtRGVidWctQ3Jvc3MiKSBjbGVhbmVkSURzLnNwbGljZShpLCAxKTsKICAgICAgfQogICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoY2xlYW5lZElEcyk7CiAgICB9CgogICAgZXhpc3RpbmdJRChhcmdzKSB7CiAgICAgIGNvbnN0IGluZGV4ID0gYWxsVGV4dC5pbmRleE9mKGAjU1BfVGV4dC1FeHQtJHt0aGlzLmZpeElEKGFyZ3MuSUQpfWApOwogICAgICByZXR1cm4gU2NyYXRjaC5DYXN0LnRvQm9vbGVhbihhbGxUZXh0W2luZGV4XSk7CiAgICB9CgogICAgbWFrZUdyYWRpZW50KGFyZ3MpIHsgcmV0dXJuIGAke2FyZ3MuVFlQRX0tZ3JhZGllbnQoJHthcmdzLkFOR0xFfWRlZywgJHthcmdzLkNPTE9SMX0sICR7YXJncy5DT0xPUjJ9KWAgfQoKICAgIHNldFRleHRDb2xvcihhcmdzKSB7CiAgICAgIGNvbnN0IElEID0gdGhpcy5maXhJRChhcmdzLklEKTsKICAgICAgY29uc3QgZWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBkaXZbaWQ9IlNQX1RleHQtRXh0LSR7SUR9Il1gKTsKICAgICAgZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4gewogICAgICAgIGVsZW1lbnQuc3R5bGUuY29sb3IgPSBhcmdzLkNPTE9SOwogICAgICAgIGlmIChhcmdzLkNPTE9SLmluY2x1ZGVzKCJncmFkaWVudCIpKSB7CiAgICAgICAgICBlbGVtZW50LnN0eWxlLmJhY2tncm91bmQgPSBhcmdzLkNPTE9SOwogICAgICAgICAgZWxlbWVudC5zdHlsZS5jb2xvciA9ICJ0cmFuc3BhcmVudCI7CiAgICAgICAgICBlbGVtZW50LnN0eWxlLndlYmtpdFRleHRGaWxsQ29sb3IgPSAidHJhbnNwYXJlbnQiOwogICAgICAgICAgZWxlbWVudC5zdHlsZS53ZWJraXRCYWNrZ3JvdW5kQ2xpcCA9ICJ0ZXh0IjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZWxlbWVudC5zdHlsZS5jb2xvciA9IGFyZ3MuQ09MT1I7CiAgICAgICAgICBlbGVtZW50LnN0eWxlLmJhY2tncm91bmQgPSAibm9uZSI7CiAgICAgICAgICBlbGVtZW50LnN0eWxlLndlYmtpdFRleHRGaWxsQ29sb3IgPSAiaW5pdGlhbCI7CiAgICAgICAgICBlbGVtZW50LnN0eWxlLndlYmtpdEJhY2tncm91bmRDbGlwID0gImluaXRpYWwiOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHR4dFNldHRpbmdzW0lEXVsidGV4dENMUiJdID0geyAuLi5hcmdzIH07CiAgICB9CgogICAgc2V0VGV4dERyb3BTaGFkb3coYXJncykgewogICAgICBjb25zdCBJRCA9IHRoaXMuZml4SUQoYXJncy5JRCk7CiAgICAgIGNvbnN0IGVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgZGl2W2lkPSJTUF9UZXh0LUV4dC0ke0lEfSJdYCk7CiAgICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHsKICAgICAgICBlbGVtZW50LnN0eWxlLnRleHRTaGFkb3cgPSBhcmdzLnogPT09IDAgPyAibm9uZSIgOiBgJHthcmdzLnh9cHggJHthcmdzLnkgKiAtMX1weCAke2FyZ3Muen1weCAke2FyZ3MuQ09MT1J9YDsKICAgICAgfSk7CiAgICAgIHR4dFNldHRpbmdzW0lEXVsidGV4dFNIQSJdID0geyAuLi5hcmdzIH07CiAgICB9CgogICAgc2V0T3ZlcmZsb3coYXJncykgewogICAgICBjb25zdCBJRCA9IHRoaXMuZml4SUQoYXJncy5JRCk7CiAgICAgIGNvbnN0IGVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgZGl2W2lkPSJTUF9UZXh0LUV4dC0ke0lEfSJdYCk7CiAgICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHsgZWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9IGFyZ3MuVFlQRSB9KTsKICAgICAgdHh0U2V0dGluZ3NbSURdWyJ0ZXh0T1ZSIl0gPSB7IC4uLmFyZ3MgfTsKICAgIH0KCiAgICBzZXRUZXh0T3V0bGluZShhcmdzKSB7CiAgICAgIGNvbnN0IElEID0gdGhpcy5maXhJRChhcmdzLklEKTsKICAgICAgY29uc3QgZWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBkaXZbaWQ9IlNQX1RleHQtRXh0LSR7SUR9Il1gKTsKICAgICAgZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4gewogICAgICAgIGVsZW1lbnQuc3R5bGUud2Via2l0VGV4dFN0cm9rZUNvbG9yID0gYXJncy5DT0xPUjsKICAgICAgICBlbGVtZW50LnN0eWxlLndlYmtpdFRleHRTdHJva2VXaWR0aCA9IGAke2FyZ3MuVEhJQ0tORVNTfXB4YDsKICAgICAgICAvL211bHRpLXBsYXRmb3JtIHN1cHBvcnQgY3V6IHdlIGNhbnQgaGF2ZSBuaWNlIHRoaW5ncwogICAgICAgIGVsZW1lbnQuc3R5bGUudGV4dFN0cm9rZUNvbG9yID0gYXJncy5DT0xPUjsKICAgICAgICBlbGVtZW50LnN0eWxlLnRleHRTdHJva2VXaWR0aCA9IGAke2FyZ3MuVEhJQ0tORVNTfXB4YDsKICAgICAgICBlbGVtZW50LnN0eWxlLm1velRleHRTdHJva2VDb2xvciA9IGFyZ3MuQ09MT1I7CiAgICAgICAgZWxlbWVudC5zdHlsZS5tb3pUZXh0U3Ryb2tlV2lkdGggPSBgJHthcmdzLlRISUNLTkVTU31weGA7CiAgICAgIH0pOwogICAgICB0eHRTZXR0aW5nc1tJRF1bInRleHRPVVQiXSA9IHsgLi4uYXJncyB9OwogICAgfQoKICAgIHNldExpbmUoYXJncykgewogICAgICBjb25zdCBJRCA9IHRoaXMuZml4SUQoYXJncy5JRCk7CiAgICAgIGNvbnN0IGxpbmVUeXBlID0gYXJncy5UWVBFMi5yZXBsYWNlKCJzdHJpa2UiLCAibGluZS0iKTsKICAgICAgY29uc3QgZWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBkaXZbaWQ9IlNQX1RleHQtRXh0LSR7SUR9Il1gKTsKICAgICAgZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4gewogICAgICAgIGVsZW1lbnQuc3R5bGUudGV4dERlY29yYXRpb25MaW5lID0gbGluZVR5cGU7CiAgICAgICAgZWxlbWVudC5zdHlsZS50ZXh0RGVjb3JhdGlvblN0eWxlID0gYXJncy5UWVBFMTsKICAgICAgICBlbGVtZW50LnN0eWxlLnRleHREZWNvcmF0aW9uVGhpY2tuZXNzID0gYCR7YXJncy5USElDS31weGA7CiAgICAgICAgZWxlbWVudC5zdHlsZS50ZXh0RGVjb3JhdGlvbkNvbG9yID0gYXJncy5DT0xPUjsKICAgICAgfSk7CiAgICAgIHR4dFNldHRpbmdzW0lEXVsidGV4dExJTiJdID0geyAuLi5hcmdzIH07CiAgICB9CgogICAgc2V0TWFyZ2lucyhhcmdzKSB7CiAgICAgIGNvbnN0IElEID0gdGhpcy5maXhJRChhcmdzLklEKTsKICAgICAgY29uc3QgZWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBkaXZbaWQ9IlNQX1RleHQtRXh0LSR7SUR9Il1gKTsKICAgICAgZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4gewogICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHthcmdzLldJRFRIfXB4YDsKICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke2FyZ3MuSEVJR0hUfXB4YDsKICAgICAgfSk7CiAgICAgIHR4dFNldHRpbmdzW0lEXVsidGV4dE1BUiJdID0geyAuLi5hcmdzIH07CiAgICB9CgogICAgc2V0VGV4dEFsaWdubWVudChhcmdzKSB7CiAgICAgIGNvbnN0IElEID0gdGhpcy5maXhJRChhcmdzLklEKTsKICAgICAgY29uc3QgZWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBkaXZbaWQ9IlNQX1RleHQtRXh0LSR7SUR9Il1gKTsKICAgICAgZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4geyBlbGVtZW50LnN0eWxlLnRleHRBbGlnbiA9IGFyZ3MuQUxJR05NRU5UIH0pOwogICAgICB0eHRTZXR0aW5nc1tJRF1bInR4dEFMSSJdID0geyAuLi5hcmdzIH07CiAgICB9CgogICAgc2V0VGV4dEZvbnQoYXJncykgewogICAgICBjb25zdCBJRCA9IHRoaXMuZml4SUQoYXJncy5JRCk7CiAgICAgIGNvbnN0IGVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgZGl2W2lkPSJTUF9UZXh0LUV4dC0ke0lEfSJdYCk7CiAgICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHsgZWxlbWVudC5zdHlsZS5mb250RmFtaWx5ID0gYXJncy5GT05UIH0pOwogICAgICB0eHRTZXR0aW5nc1tJRF1bInR4dEZvbnQiXSA9IHsgLi4uYXJncyB9OwogICAgfQoKICAgIHNldEZvbnRTaXplKGFyZ3MpIHsKICAgICAgY29uc3QgSUQgPSB0aGlzLmZpeElEKGFyZ3MuSUQpOwogICAgICBjb25zdCBlbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYGRpdltpZD0iU1BfVGV4dC1FeHQtJHtJRH0iXWApOwogICAgICBlbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7IGVsZW1lbnQuc3R5bGUuZm9udFNpemUgPSBgJHthcmdzLlNJWkV9cHhgIH0pOwogICAgICB0eHRTZXR0aW5nc1tJRF1bInR4dEZvbnRTWiJdID0geyAuLi5hcmdzIH07CiAgICB9CgogICAgc2V0VGhpY2soYXJncykgewogICAgICBjb25zdCBJRCA9IHRoaXMuZml4SUQoYXJncy5JRCk7CiAgICAgIGNvbnN0IGVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgZGl2W2lkPSJTUF9UZXh0LUV4dC0ke0lEfSJdYCk7CiAgICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHsgZWxlbWVudC5zdHlsZS5mb250V2VpZ2h0ID0gYXJncy5OVU0gKiA5IH0pOwogICAgICB0eHRTZXR0aW5nc1tJRF1bInR4dEZvbnRUSyJdID0geyAuLi5hcmdzIH07CiAgICB9CgogICAgc2V0VGV4dFNwYWNpbmcoYXJncykgewogICAgICBjb25zdCBJRCA9IHRoaXMuZml4SUQoYXJncy5JRCk7CiAgICAgIGNvbnN0IGVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgZGl2W2lkPSJTUF9UZXh0LUV4dC0ke0lEfSJdYCk7CiAgICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHsKICAgICAgICBlbGVtZW50LnN0eWxlW2FyZ3MuQVRUID09PSAibGV0dGVyIiA/ICJsZXR0ZXJTcGFjaW5nIiA6ICJsaW5lSGVpZ2h0Il0gPSBgJHthcmdzLlNQQUNJTkd9cHhgOwogICAgICB9KTsKICAgICAgdHh0U2V0dGluZ3NbSURdW2FyZ3MuQVRUID09PSAibGV0dGVyIiA/ICJsZXRESVMiIDogImxpbmVESVMiXSA9IHsgLi4uYXJncywgSUQgfTsKICAgIH0KCiAgICBwcmVzZXRUZXh0UG9zaXRpb24oYXJncykgewogICAgICBjb25zdCBJRCA9IHRoaXMuZml4SUQoYXJncy5JRCk7CiAgICAgIGlmIChhcmdzLmlzUHJpbnQgPT09IHVuZGVmaW5lZCkgdHh0U2V0dGluZ3NbSURdWyJwcmVUeHQxIl0gPSB7IC4uLmFyZ3MsIGlzUHJpbnQ6IHRydWUgfTsKICAgICAgZWxzZSB7CiAgICAgICAgY29uc3QgcG9zID0gW1NjcmF0Y2guQ2FzdC50b051bWJlcihhcmdzLlgpLCBTY3JhdGNoLkNhc3QudG9OdW1iZXIoYXJncy5ZKV07CiAgICAgICAgcnVudGltZS5vbmNlKCJBRlRFUl9FWEVDVVRFIiwgKCkgPT4gewogICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBkaXZbaWQ9IlNQX1RleHQtRXh0LSR7SUR9Il1gKTsKICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50c1tlbGVtZW50cy5sZW5ndGggLSAxXTsKICAgICAgICAgIGNvbnN0IGNlbnRlclcgPSBwYXJzZUZsb2F0KGVsZW1lbnQuc3R5bGUud2lkdGgpIC8gMjsKICAgICAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTsKICAgICAgICAgIGNvbnN0IGxpbmVIZWlnaHQgPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoImxpbmUtaGVpZ2h0Iik7CiAgICAgICAgICBjb25zdCBmb250U2l6ZSA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgiZm9udC1zaXplIik7CiAgICAgICAgICBjb25zdCBjZW50ZXJIID0gKGxpbmVIZWlnaHQgPT09ICJub3JtYWwiID8gcGFyc2VGbG9hdChmb250U2l6ZSkgKiAxLjIgOiBwYXJzZUZsb2F0KGxpbmVIZWlnaHQpKSAvIDI7CgogICAgICAgICAgbGV0IHRyYW5zZm9ybSA9IGVsZW1lbnQuc3R5bGUudHJhbnNmb3JtOwogICAgICAgICAgY29uc3Qgc3RyaW5nID0gYHRyYW5zbGF0ZSgke3Bvc1swXSAtIGNlbnRlcld9cHgsICR7KHBvc1sxXSAqIC0xKSAtIGNlbnRlckh9cHgpYDsKICAgICAgICAgIGlmICh0cmFuc2Zvcm0uaW5jbHVkZXMoInRyYW5zbGF0ZSIpKSB0cmFuc2Zvcm0gPSB0cmFuc2Zvcm0ucmVwbGFjZSgvdHJhbnNsYXRlXChbXildKlwpLywgc3RyaW5nKTsKICAgICAgICAgIGVsc2UgdHJhbnNmb3JtICs9IGAgJHtzdHJpbmd9YDsKICAgICAgICAgIGVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gdHJhbnNmb3JtLnRyaW0oKTsKICAgICAgICAgIGVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwogICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoInNwdHh0cG9zIiwgYCR7cG9zWzBdfXwke3Bvc1sxXX1gKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfQoKICAgIHNldFRleHRQb3NpdGlvbihhcmdzKSB7CiAgICAgIGNvbnN0IGVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgZGl2W2lkPSJTUF9UZXh0LUV4dC0ke3RoaXMuZml4SUQoYXJncy5JRCl9Il1gKTsKICAgICAgY29uc3QgcG9zID0gW1NjcmF0Y2guQ2FzdC50b051bWJlcihhcmdzLlgpLCBTY3JhdGNoLkNhc3QudG9OdW1iZXIoYXJncy5ZKV07CiAgICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHsKICAgICAgICBsZXQgY2VudGVyVyA9IHBhcnNlRmxvYXQoZWxlbWVudC5zdHlsZS53aWR0aCkgLyAyOwogICAgICAgIGlmIChpc05hTihjZW50ZXJXKSkgY2VudGVyVyA9IChlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoID8/IDAgKSAvIDI7CiAgICAgICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpOwogICAgICAgIGNvbnN0IGxpbmVIZWlnaHQgPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoImxpbmUtaGVpZ2h0Iik7CiAgICAgICAgY29uc3QgZm9udFNpemUgPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoImZvbnQtc2l6ZSIpOwogICAgICAgIGNvbnN0IGNlbnRlckggPSAobGluZUhlaWdodCA9PT0gIm5vcm1hbCIgPyBwYXJzZUZsb2F0KGZvbnRTaXplKSAqIDEuMiA6IHBhcnNlRmxvYXQobGluZUhlaWdodCkpIC8gMjsKCiAgICAgICAgbGV0IHRyYW5zZm9ybSA9IGVsZW1lbnQuc3R5bGUudHJhbnNmb3JtOwogICAgICAgIGNvbnN0IHN0cmluZyA9IGB0cmFuc2xhdGUoJHtwb3NbMF0gLSBjZW50ZXJXfXB4LCAkeyhwb3NbMV0gKiAtMSkgLSBjZW50ZXJIfXB4KWA7CiAgICAgICAgaWYgKHRyYW5zZm9ybS5pbmNsdWRlcygidHJhbnNsYXRlIikpIHRyYW5zZm9ybSA9IHRyYW5zZm9ybS5yZXBsYWNlKC90cmFuc2xhdGVcKFteKV0qXCkvLCBzdHJpbmcpOwogICAgICAgIGVsc2UgdHJhbnNmb3JtICs9IGAgJHtzdHJpbmd9YDsKICAgICAgICBlbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IHRyYW5zZm9ybS50cmltKCk7CiAgICAgICAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7CiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoInNwdHh0cG9zIiwgYCR7cG9zWzBdfXwke3Bvc1sxXX1gKTsKICAgICAgfSk7CiAgICB9CgogICAgdGV4dFBvc2l0aW9uKGFyZ3MpIHsKICAgICAgY29uc3QgZWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBkaXZbaWQ9IlNQX1RleHQtRXh0LSR7dGhpcy5maXhJRChhcmdzLklEKX0iXWApOwogICAgICBsZXQgdmFsdWU7CiAgICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHsKICAgICAgICBpZiAoYXJncy5BVFQgPT09ICJ6IGxheWVyIikgdmFsdWUgPSBlbGVtZW50LnBhcmVudE5vZGUucGFyZW50Tm9kZS5zdHlsZS56SW5kZXg7CiAgICAgICAgZWxzZSB2YWx1ZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCJzcHR4dHBvcyIpPy5zcGxpdCgifCIsIDIpW2FyZ3MuQVRULmluY2x1ZGVzKCJ4IikgPyAwIDogMV07CiAgICAgIH0pOwogICAgICByZXR1cm4gdmFsdWUgfHwgMDsKICAgIH0KCiAgICBhdHRPZlRleHQoYXJncykgewogICAgICBjb25zdCBlbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYGRpdltpZD0iU1BfVGV4dC1FeHQtJHt0aGlzLmZpeElEKGFyZ3MuSUQpfSJdYCk7CiAgICAgIGxldCB2YWx1ZTsKICAgICAgaWYgKGFyZ3MuQVRULmluY2x1ZGVzKCJib3gyIikpIHsKICAgICAgICBjb25zdCBjYWxjcyA9IFtdOwogICAgICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHsKICAgICAgICAgIGNvbnN0IHRlbXBTcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgICAgICAgdGVtcFNwYW4uaW5uZXJIVE1MID0gZWxlbWVudC50ZXh0Q29udGVudDsKICAgICAgICAgIHRlbXBTcGFuLnN0eWxlLmZvbnRTaXplID0gZWxlbWVudC5zdHlsZS5mb250U2l6ZTsKICAgICAgICAgIHRlbXBTcGFuLnN0eWxlLmZvbnRGYW1pbHkgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmZvbnRGYW1pbHk7CiAgICAgICAgICB0ZW1wU3Bhbi5zdHlsZS5kaXNwbGF5ID0gImlubGluZSI7CiAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRlbXBTcGFuKTsKICAgICAgICAgIGNhbGNzLnB1c2godGVtcFNwYW5bYG9mZnNldCR7YXJncy5BVFQuaW5jbHVkZXMoInciKSA/ICJXaWR0aCIgOiAiSGVpZ2h0In1gXSk7CiAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRlbXBTcGFuKTsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoY2FsY3MpOwogICAgICB9IGVsc2UgewogICAgICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHsgdmFsdWUgPSBlbGVtZW50LnN0eWxlW2FyZ3MuQVRUXSB9KTsKICAgICAgICB2YWx1ZSA9IGFyZ3MuQVRUID09PSAiZm9udEZhbWlseSIgfHwgYXJncy5BVFQgPT09ICJ0ZXh0QWxpZ24iIHx8IGFyZ3MuQVRUID09PSAib3ZlcmZsb3ciID8gdmFsdWUgOiBwYXJzZUZsb2F0KHZhbHVlKTsKICAgICAgICB2YWx1ZSA9IGFyZ3MuQVRUID09PSAiZm9udFdlaWdodCIgPyB2YWx1ZSAvIDkgOiB2YWx1ZTsKICAgICAgICByZXR1cm4gdmFsdWUgfHwgIiI7CiAgICAgIH0KICAgIH0KICAKICAgIGxpbmVDbnQoYXJncykgewogICAgICBjb25zdCBlbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYGRpdltpZD0iU1BfVGV4dC1FeHQtJHt0aGlzLmZpeElEKGFyZ3MuSUQpfSJdYCk7CiAgICAgIGxldCB2YWx1ZSA9IFtdOwogICAgICBlbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7IHZhbHVlLnB1c2goZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCJiciIpLmxlbmd0aCArIDEgfHwgMSkgfSk7CiAgICAgIHJldHVybiB2YWx1ZS5sZW5ndGggPiAxID8gSlNPTi5zdHJpbmdpZnkodmFsdWUpIDogKHZhbHVlWzBdIHx8IDApOwogICAgfQoKICAgIHNldFRleHRaSW5kZXgoYXJncykgewogICAgICBjb25zdCBlbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYGRpdltpZD0iU1BfVGV4dC1FeHQtJHt0aGlzLmZpeElEKGFyZ3MuSUQpfSJdYCk7CiAgICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHsgZWxlbWVudC5wYXJlbnROb2RlLnBhcmVudE5vZGUuc3R5bGUuekluZGV4ID0gTWF0aC5yb3VuZChhcmdzLlpfSU5ERVgpIH0pOwogICAgfQoKICAgIHNldEVmZmVjdChhcmdzKSB7CiAgICAgIGNvbnN0IGVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgZGl2W2lkPSJTUF9UZXh0LUV4dC0ke3RoaXMuZml4SUQoYXJncy5JRCl9Il1gKTsKICAgICAgY29uc3QgdmFsID0gU2NyYXRjaC5DYXN0LnRvTnVtYmVyKGFyZ3MuVkFMVUUpOwogICAgICBlbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7CiAgICAgICAgY29uc3QgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlOwogICAgICAgIGNvbnN0IGN1clN0eWxlcyA9IFsKICAgICAgICAgIGVsZW1lbnQuc3R5bGUuZmlsdGVyIHx8ICIiLAogICAgICAgICAgZWxlbWVudC5wYXJlbnROb2RlLnN0eWxlLnRyYW5zZm9ybSB8fCAiIiwKICAgICAgICAgIGVsZW1lbnQuc3R5bGUub3BhY2l0eSB8fCAiIgogICAgICAgIF07CiAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGAke2FyZ3MuRUZGRUNUfVxcKFteKV0rXFwpYCwgImciKTsKICAgICAgICBjdXJTdHlsZXMuZm9yRWFjaCgoY3VyU3R5bGUsIGluZGV4KSA9PiB7IGN1clN0eWxlc1tpbmRleF0gPSBjdXJTdHlsZS5yZXBsYWNlKHJlZ2V4LCAiIikgfSk7CiAgICAgICAgc3dpdGNoIChhcmdzLkVGRkVDVCkgewogICAgICAgICAgY2FzZSAic2F0dXJhdGUiOiByZXR1cm4gZWxlbWVudC5zdHlsZS5maWx0ZXIgPSBgJHtjdXJTdHlsZXNbMF19IHNhdHVyYXRlKCR7dmFsfSUpYDsKICAgICAgICAgIGNhc2UgImNvbnRyYXN0IjogcmV0dXJuIGVsZW1lbnQuc3R5bGUuZmlsdGVyID0gYCR7Y3VyU3R5bGVzWzBdfSBjb250cmFzdCgke3ZhbCArIDEwMH0lKWA7CiAgICAgICAgICBjYXNlICJicmlnaHRuZXNzIjogcmV0dXJuIGVsZW1lbnQuc3R5bGUuZmlsdGVyID0gYCR7Y3VyU3R5bGVzWzBdfSBicmlnaHRuZXNzKCR7dmFsICsgMTAwfSUpYDsKICAgICAgICAgIGNhc2UgImh1ZS1yb3RhdGUiOiByZXR1cm4gZWxlbWVudC5zdHlsZS5maWx0ZXIgPSBgJHtjdXJTdHlsZXNbMF19IGh1ZS1yb3RhdGUoJHt2YWx9ZGVnKWA7CiAgICAgICAgICBjYXNlICJvcGFjaXR5IjogcmV0dXJuIGVsZW1lbnQuc3R5bGUub3BhY2l0eSA9ICgxMDAgLSB2YWwpIC8gMTAwOwogICAgICAgICAgY2FzZSAic2VwaWEiOiByZXR1cm4gZWxlbWVudC5zdHlsZS5maWx0ZXIgPSBgJHtjdXJTdHlsZXNbMF19IHNlcGlhKCR7dmFsfSUpYDsKICAgICAgICAgIGNhc2UgImludmVydCI6IHJldHVybiBlbGVtZW50LnN0eWxlLmZpbHRlciA9IGAke2N1clN0eWxlc1swXX0gaW52ZXJ0KCR7dmFsfSUpYDsKICAgICAgICAgIGNhc2UgInNjYWxlWCI6IHJldHVybiBwYXJlbnQuc3R5bGUudHJhbnNmb3JtID0gYCR7Y3VyU3R5bGVzWzFdfSBzY2FsZVgoJHt2YWwgLyAxMDB9KWA7CiAgICAgICAgICBjYXNlICJzY2FsZVkiOiByZXR1cm4gcGFyZW50LnN0eWxlLnRyYW5zZm9ybSA9IGAke2N1clN0eWxlc1sxXX0gc2NhbGVZKCR7dmFsIC8gMTAwfSlgOwogICAgICAgICAgY2FzZSAic2tld1giOiByZXR1cm4gcGFyZW50LnN0eWxlLnRyYW5zZm9ybSA9IGAke2N1clN0eWxlc1sxXX0gc2tld1goJHt2YWx9ZGVnKWA7CiAgICAgICAgICBjYXNlICJza2V3WSI6IHJldHVybiBwYXJlbnQuc3R5bGUudHJhbnNmb3JtID0gYCR7Y3VyU3R5bGVzWzFdfSBza2V3WSgke3ZhbH1kZWcpYDsKICAgICAgICAgIGNhc2UgInJvdGF0ZSI6IHsKICAgICAgICAgICAgbGV0IHRyYW5zZm9ybSA9IGVsZW1lbnQuc3R5bGUudHJhbnNmb3JtOwogICAgICAgICAgICBpZiAodHJhbnNmb3JtLmluY2x1ZGVzKCJyb3RhdGUiKSkgdHJhbnNmb3JtID0gdHJhbnNmb3JtLnJlcGxhY2UoL3JvdGF0ZVwoW14pXSpcKS8sIGByb3RhdGUoJHt2YWwgLSA5MH1kZWcpYCk7CiAgICAgICAgICAgIGVsc2UgdHJhbnNmb3JtICs9IGAgcm90YXRlKCR7dmFsIC0gOTB9ZGVnKWA7CiAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gdHJhbnNmb3JtLnRyaW0oKTsKICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gImNlbnRlciI7CiAgICAgICAgICB9CiAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZWxlbWVudC5zdHlsZS5maWx0ZXIgPSBgJHtjdXJTdHlsZXNbMF19IGJsdXIoJHt2YWx9cHgpYDsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQoKICAgIHJlc2V0RWZmZWN0KGFyZ3MpIHsKICAgICAgY29uc3QgZWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBkaXZbaWQ9IlNQX1RleHQtRXh0LSR7dGhpcy5maXhJRChhcmdzLklEKX0iXWApOwogICAgICBlbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7CiAgICAgICAgZWxlbWVudC5wYXJlbnROb2RlLnN0eWxlLnRyYW5zZm9ybSA9IChlbGVtZW50LnBhcmVudE5vZGUuc3R5bGUudHJhbnNmb3JtIHx8ICIiKQogICAgICAgICAgLnJlcGxhY2UoL3NjYWxlWFwoW14pXSpcKS8sICJzY2FsZVgoMSkiKS5yZXBsYWNlKC9zY2FsZVlcKFteKV0qXCkvLCAic2NhbGVZKDEpIikKICAgICAgICAgIC5yZXBsYWNlKC9za2V3WFwoW14pXSpcKS8sICJza2V3WCgwZGVnKSIpLnJlcGxhY2UoL3NrZXdZXChbXildKlwpLywgInNrZXdZKDBkZWcpIik7CiAgICAgICAgZWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSAoZWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gfHwgIiIpCiAgICAgICAgICAucmVwbGFjZSgvcm90YXRlXChbXildKlwpLywgInJvdGF0ZSgwZGVnKSIpOwogICAgICAgIGVsZW1lbnQuc3R5bGUuZmlsdGVyID0gIiI7CiAgICAgICAgZWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gMTsKICAgICAgfSk7CiAgICB9CgogICAgYW10T2ZFZmZlY3QoYXJncykgewogICAgICBjb25zdCBlZmZlY3QgPSBhcmdzLkVGRkVDVDsKICAgICAgY29uc3QgZWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBkaXZbaWQ9IlNQX1RleHQtRXh0LSR7dGhpcy5maXhJRChhcmdzLklEKX0iXWApOwogICAgICBsZXQgZWZmZWN0VmFsdWUgPSBlZmZlY3QgPT09ICJyb3RhdGUiID8gOTAgOiBlZmZlY3QuaW5jbHVkZXMoInNjYWxlIikgPyAxMDAgOiAwOwogICAgICBlbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7CiAgICAgICAgaWYgKGVmZmVjdCA9PT0gInJvdGF0ZSIgfHwgZWZmZWN0LmluY2x1ZGVzKCJzY2FsZSIpIHx8IGVmZmVjdC5pbmNsdWRlcygic2tldyIpKSB7CiAgICAgICAgICBjb25zdCB0aGlzRWxlbWVudCA9IGVmZmVjdCA9PT0gInJvdGF0ZSIgPyBlbGVtZW50IDogZWxlbWVudC5wYXJlbnROb2RlOwogICAgICAgICAgY29uc3QgdHJhbnNmb3JtViA9IHRoaXNFbGVtZW50LnN0eWxlLnRyYW5zZm9ybS5zcGxpdCgiICIpOwogICAgICAgICAgY29uc3QgaW5kZXggPSB0cmFuc2Zvcm1WLmZpbmRJbmRleCh2YWx1ZSA9PiB2YWx1ZS5pbmNsdWRlcyhlZmZlY3QpKTsKICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHsKICAgICAgICAgICAgZWZmZWN0VmFsdWUgPSB0cmFuc2Zvcm1WW2luZGV4XS5yZXBsYWNlKC9bXlxkLi1dL2csICIiKTsKICAgICAgICAgICAgZWZmZWN0VmFsdWUgPSBlZmZlY3QgPT09ICJyb3RhdGUiID8gcGFyc2VGbG9hdChlZmZlY3RWYWx1ZSkgKyA5MCA6CiAgICAgICAgICAgICAgcGFyc2VGbG9hdChlZmZlY3RWYWx1ZSkgKiAoZWZmZWN0LmluY2x1ZGVzKCJzY2FsZSIpID8gMTAwIDogMSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChlZmZlY3QgPT09ICJvcGFjaXR5IikgewogICAgICAgICAgZWZmZWN0VmFsdWUgPSAxMDAgLSAocGFyc2VGbG9hdChlbGVtZW50LnN0eWxlLm9wYWNpdHkgfHwgMCkgKiAxMDApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBmaWx0ZXJWID0gZWxlbWVudC5zdHlsZS5maWx0ZXIuc3BsaXQoIiAiKTsKICAgICAgICAgIGNvbnN0IGluZGV4ID0gZmlsdGVyVi5maW5kSW5kZXgoKHZhbHVlKSA9PiB2YWx1ZS5pbmNsdWRlcyhlZmZlY3QpKTsKICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHsKICAgICAgICAgICAgZWZmZWN0VmFsdWUgPSBlZmZlY3QgPT09ICJjb250cmFzdCIgfHwgZWZmZWN0ID09PSAiYnJpZ2h0bmVzcyIKICAgICAgICAgICAgICA/IHBhcnNlRmxvYXQoZmlsdGVyVltpbmRleF0ucmVwbGFjZSgvW15cZC4tXS9nLCAiIikpIC0gMTAwCiAgICAgICAgICAgICAgOiBwYXJzZUZsb2F0KGZpbHRlclZbaW5kZXhdLnJlcGxhY2UoL1teXGQuLV0vZywgIiIpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pOwogICAgICByZXR1cm4gZWZmZWN0VmFsdWU7CiAgICB9CgogICAgc2V0VGV4dEN1cnZlKGFyZ3MpIHsKICAgICAgLy8gVE9ETyBjbGVhbiB0aGlzIHVwIGFuZCBhZGQgbW9yZSBhdmFpbGlhYmxlIHRleHQgc3R5bGluZ3MKICAgICAgLy8gUGVyaGFwcyBtYWtlIHRoZSBlbnRpcmUgZXh0ZW5zaW9uIHJlbHkgb24gc3Zncz8KICAgICAgY29uc3QgSUQgPSB0aGlzLmZpeElEKGFyZ3MuSUQpOwogICAgICBjb25zdCBzZXR0aW5ncyA9IHR4dFNldHRpbmdzW0lEXTsKICAgICAgY29uc3QgcmVnZXggPSBhcmdzLkFSQy5pbmNsdWRlcygiPHN2ZyIpID8gLzxwYXRoW14+XSpkPSIoW14iXSopIi8gOiAvPHBhdGhbXj5dKmQ9IihbXiJdKikiLzsKICAgICAgY29uc3QgbWF0Y2ggPSBhcmdzLkFSQy5tYXRjaChyZWdleCk7CiAgICAgIGNvbnN0IG91dGxpbmUgPSBzZXR0aW5nc1sidGV4dE9VVCJdICE9PSB1bmRlZmluZWQgPyBzZXR0aW5nc1sidGV4dE9VVCJdIDogIiI7CiAgICAgIGlmIChtYXRjaCAmJiBtYXRjaFsxXSkgewogICAgICAgIGNvbnN0IGVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgZGl2W2lkPSJTUF9UZXh0LUV4dC0ke0lEfSJdYCkKICAgICAgICBlbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7CiAgICAgICAgICBjb25zdCBleGlzdGluZ1N2ZyA9IGVsZW1lbnQucXVlcnlTZWxlY3Rvcigic3ZnIik7CiAgICAgICAgICBpZiAoZXhpc3RpbmdTdmcpIHsKICAgICAgICAgICAgY29uc3QgcGF0aCA9IGV4aXN0aW5nU3ZnLnF1ZXJ5U2VsZWN0b3IoInBhdGgiKTsKICAgICAgICAgICAgcGF0aC5zZXRBdHRyaWJ1dGUoImQiLCBtYXRjaFsxXSk7CiAgICAgICAgICAgIGNvbnN0IHRleHRGaWxsID0gZXhpc3RpbmdTdmcucXVlcnlTZWxlY3RvcigidGV4dCIpOwogICAgICAgICAgICB0ZXh0RmlsbC5zZXRBdHRyaWJ1dGUoImZpbGwiLCBlbGVtZW50LnN0eWxlLmNvbG9yID09PSAidHJhbnNwYXJlbnQiID8gIiMwMDAiIDogZWxlbWVudC5zdHlsZS5jb2xvcik7CiAgICAgICAgICAgIGNvbnN0IHRleHRQYXRoRmlsbCA9IGV4aXN0aW5nU3ZnLnF1ZXJ5U2VsZWN0b3IoInRleHRQYXRoIik7CiAgICAgICAgICAgIHRleHRQYXRoRmlsbC5zZXRBdHRyaWJ1dGUoImhyZWYiLCBgI015UGF0aC0ke0lEfWApOwogICAgICAgICAgICB0ZXh0UGF0aEZpbGwudGV4dENvbnRlbnQgPSBlbGVtZW50LnRleHRDb250ZW50OwoKICAgICAgICAgICAgY29uc3QgdGV4dFN0cm9rZSA9IGV4aXN0aW5nU3ZnLnF1ZXJ5U2VsZWN0b3IoInRleHQiKTsKICAgICAgICAgICAgdGV4dFN0cm9rZS5zZXRBdHRyaWJ1dGUoImZpbGwiLCBvdXRsaW5lID8gb3V0bGluZS5pbnB1dHMuQ09MT1IgPz8gIiMwMDAwMDAwMCIgOiAiIzAwMDAwMDAwIik7CiAgICAgICAgICAgIHRleHRTdHJva2Uuc2V0QXR0cmlidXRlKCJzdHJva2UiLCBvdXRsaW5lID8gb3V0bGluZS5pbnB1dHMuQ09MT1IgPz8gIiMwMDAwMDAwMCIgOiAiIzAwMDAwMDAwIik7CiAgICAgICAgICAgIHRleHRTdHJva2Uuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLCBvdXRsaW5lID8gb3V0bGluZS5pbnB1dHMuVEhJQ0tORVNTID8/IDEgOiAxKTsKICAgICAgICAgICAgY29uc3QgdGV4dFBhdGhTdHJva2UgPSBleGlzdGluZ1N2Zy5xdWVyeVNlbGVjdG9yKCJ0ZXh0UGF0aCIpOwogICAgICAgICAgICB0ZXh0UGF0aFN0cm9rZS5zZXRBdHRyaWJ1dGUoImhyZWYiLCBgI015UGF0aC0ke0lEfWApOwogICAgICAgICAgICB0ZXh0UGF0aFN0cm9rZS50ZXh0Q29udGVudCA9IGVsZW1lbnQudGV4dENvbnRlbnQ7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zdCBzdmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwgInN2ZyIpOwogICAgICAgICAgICBjb25zdCBkZWZzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsICJkZWZzIik7CiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwgInBhdGgiKTsKICAgICAgICAgICAgcGF0aC5zZXRBdHRyaWJ1dGUoImlkIiwgYE15UGF0aC0ke0lEfWApOwogICAgICAgICAgICBwYXRoLnNldEF0dHJpYnV0ZSgiZCIsIG1hdGNoWzFdKTsKICAgICAgICAgICAgZGVmcy5hcHBlbmRDaGlsZChwYXRoKTsKCiAgICAgICAgICAgIGNvbnN0IHRleHRTdHJva2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwgInRleHQiKTsKICAgICAgICAgICAgdGV4dFN0cm9rZS5zZXRBdHRyaWJ1dGUoImZpbGwiLCBvdXRsaW5lID8gb3V0bGluZS5pbnB1dHMuQ09MT1IgOiAiIzAwMDAwMDAwIik7CiAgICAgICAgICAgIHRleHRTdHJva2Uuc2V0QXR0cmlidXRlKCJzdHJva2UiLCBvdXRsaW5lID8gb3V0bGluZS5pbnB1dHMuQ09MT1IgOiAiIzAwMDAwMDAwIik7CiAgICAgICAgICAgIHRleHRTdHJva2Uuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLCBvdXRsaW5lID8gb3V0bGluZS5pbnB1dHMuVEhJQ0tORVNTIDogMSk7CiAgICAgICAgICAgIGNvbnN0IHRleHRQYXRoU3Ryb2tlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsICJ0ZXh0UGF0aCIpOwogICAgICAgICAgICB0ZXh0UGF0aFN0cm9rZS5zZXRBdHRyaWJ1dGUoImhyZWYiLCBgI015UGF0aC0ke0lEfWApOwogICAgICAgICAgICB0ZXh0UGF0aFN0cm9rZS50ZXh0Q29udGVudCA9IGVsZW1lbnQudGV4dENvbnRlbnQ7CiAgICAgICAgICAgIHRleHRTdHJva2UuYXBwZW5kQ2hpbGQodGV4dFBhdGhTdHJva2UpOwoKICAgICAgICAgICAgc3ZnLmFwcGVuZENoaWxkKGRlZnMpOwogICAgICAgICAgICBzdmcuYXBwZW5kQ2hpbGQodGV4dFN0cm9rZSk7CiAgICAgICAgICAgIGNvbnN0IHRleHRGaWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsICJ0ZXh0Iik7CiAgICAgICAgICAgIHRleHRGaWxsLnNldEF0dHJpYnV0ZSgiZmlsbCIsIGVsZW1lbnQuc3R5bGUuY29sb3IgPT09ICJ0cmFuc3BhcmVudCIgPyAiIzAwMCIgOiBlbGVtZW50LnN0eWxlLmNvbG9yKTsKICAgICAgICAgICAgY29uc3QgdGV4dFBhdGhGaWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsICJ0ZXh0UGF0aCIpOwogICAgICAgICAgICB0ZXh0UGF0aEZpbGwuc2V0QXR0cmlidXRlKCJocmVmIiwgYCNNeVBhdGgtJHtJRH1gKTsKICAgICAgICAgICAgdGV4dFBhdGhGaWxsLnRleHRDb250ZW50ID0gZWxlbWVudC50ZXh0Q29udGVudDsKICAgICAgICAgICAgdGV4dEZpbGwuYXBwZW5kQ2hpbGQodGV4dFBhdGhGaWxsKTsKICAgICAgICAgICAgc3ZnLmFwcGVuZENoaWxkKHRleHRGaWxsKTsKICAgICAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSAiIjsKICAgICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChzdmcpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICB9CgogICAgcHJlc2V0Q3VydmUoYXJncykgewogICAgICByZXR1cm4gewogICAgICAgIGNpcmNsZTogYDxzdmc+PHBhdGggZD0iTTQxLjkzNzUsODkuNWMwLC0zNy44MzE1MSAzMC42Njg0OSwtNjguNSA2OC41LC02OC41YzM3LjgzMTUxLDAgNjguNSwzMC42Njg0OSA2OC41LDY4LjVjMCwzNy44MzE1MSAtMzAuNjY4NDksNjguNSAtNjguNSw2OC41Yy0zNy44MzE1MSwwIC02OC41LC0zMC42Njg0OSAtNjguNSwtNjguNXoiLz48L3N2Zz5gLAogICAgICAgIGhpbGw6IGA8c3ZnPjxwYXRoIGQ9Ik0zNy40Mzc1LDg5LjVjMCwwIDQzLjAwODc5LC0zMSA3NC41LC0zMWMzMS40OTEyMSwwIDcxLjUsMzEgNzEuNSwzMSIvPjwvc3ZnPmAsCiAgICAgICAgZGlwOiBgPHN2Zz48cGF0aCBkPSJNMzcuNDM3NSw4OS41YzAsMCA0Mi4wMDg3OSwyNSA3My41LDI1YzMxLjQ5MTIxLDAgNzIuNSwtMjUgNzIuNSwtMjUiLz48L3N2Zz5gLAogICAgICAgIHdhdmU6IGA8c3ZnPjxwYXRoIGQ9Ik0yNC40Mzc1LDk4LjY3MjE0YzAsMCAzOC4zMDQ5LC0yMi40ODYxMiA2NS45NzQ5NiwtMjNjMjcuNjcwMDYsLTAuNTEzODggNDQuODgzNiwxOS4wNDY2MyA3Ni41MjE1NCwyMy4zNTM1OWMzNy40NjEwNyw1LjA5OTY4IDc2LjA2NiwtMTcuMzUzNTkgNzYuMDY2LC0xNy4zNTM1OSIvPjwvc3ZnPmAKICAgICAgfVthcmdzLkFSQ107CiAgICB9CgogICAgcmVzZXRUeHQoYXJncykgeyBkZWxldGUgdHh0U2V0dGluZ3NbdGhpcy5maXhJRChhcmdzLklEKV0gfQoKICAgIHJldXNlU3R5bGUoYXJncykgewogICAgICB0aGlzLnVwZGF0ZVN0eWxlcyh0eHRTZXR0aW5nc1t0aGlzLmZpeElEKGFyZ3MuSUQpXSwgdGhpcy5maXhJRChhcmdzLklEMikpOwogICAgfQoKICAgIHRvZ2dsZVNlbGVjdChhcmdzKSB7CiAgICAgIGNvbnN0IHR5cGUgPSBhcmdzLlRZUEUgPT09ICJvbiIgPyAiYXV0byIgOiAibm9uZSI7CiAgICAgIGNvbnN0IGVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgZGl2W2lkPSJTUF9UZXh0LUV4dC0ke3RoaXMuZml4SUQoYXJncy5JRCl9Il1gKTsKICAgICAgZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4gewogICAgICAgIGVsZW1lbnQuc3R5bGUudXNlclNlbGVjdCA9IHR5cGU7IGVsZW1lbnQuc3R5bGUud2Via2l0VXNlclNlbGVjdCA9IHR5cGU7IGVsZW1lbnQuc3R5bGUubW96VXNlclNlbGVjdCA9IHR5cGU7CiAgICAgICAgZWxlbWVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gdHlwZTsKICAgICAgfSk7CiAgICB9CgogICAgbWFrZUNsaWNrKGFyZ3MpIHsKICAgICAgY29uc3QgZWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBkaXZbaWQ9IlNQX1RleHQtRXh0LSR7dGhpcy5maXhJRChhcmdzLklEKX0iXWApOwogICAgICBlbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7CiAgICAgICAgaWYgKGFyZ3MuVFlQRSA9PT0gIm9uIikgewogICAgICAgICAgZWxlbWVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gImF1dG8iOwogICAgICAgICAgZWxlbWVudC5zdHlsZS5jdXJzb3IgPSAicG9pbnRlciI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGVsZW1lbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9ICJub25lIjsKICAgICAgICAgIGVsZW1lbnQuc3R5bGUuY3Vyc29yID0gIm5vbmUiOwogICAgICAgIH0KICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5oYW5kbGVDbGljayk7CiAgICAgICAgaWYgKGFyZ3MuVFlQRSA9PT0gIm9uIikgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuaGFuZGxlQ2xpY2spOwogICAgICB9KTsKICAgIH0KCiAgICBpc0NsaWNrZWQoYXJncykgeyByZXR1cm4gY2xpY2tlZFR4dHMuaW5kZXhPZih0aGlzLmZpeElEKGFyZ3MuSUQpKSA+IC0xIH0KCiAgICBjbGlja2VkSUQoXywgdXRpbCkgeyByZXR1cm4gdXRpbC50aHJlYWQuU1BkaXNUeHRDbGlja0lEID8/ICIiIH0KICB9CgogIFNjcmF0Y2guZXh0ZW5zaW9ucy5yZWdpc3RlcihuZXcgU1BkaXNUZXh0KCkpOwp9KShTY3JhdGNoKTsK","data:application/javascript,https%3A%2F%2Fgithub.com%2FPatashu%2Fbreak_eternity.js%2Ftree%2Fmaster%0A!function(t%2Ce)%7B%22object%22%3D%3Dtypeof%20exports%26%26%22undefined%22!%3Dtypeof%20module%3Fmodule.exports%3De()%3A%22function%22%3D%3Dtypeof%20define%26%26define.amd%3Fdefine(e)%3A(t%3D%22undefined%22!%3Dtypeof%20globalThis%3FglobalThis%3At%7C%7Cself).Decimal%3De()%7D(this%2C(function()%7B%22use%20strict%22%3Bfunction%20t(t%2Ce)%7Bif(!(t%20instanceof%20e))throw%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%7Dfunction%20e(t%2Ce)%7Bfor(var%20i%3D0%3Bi%3Ce.length%3Bi%2B%2B)%7Bvar%20r%3De%5Bi%5D%3Br.enumerable%3Dr.enumerable%7C%7C!1%2Cr.configurable%3D!0%2C%22value%22in%20r%26%26(r.writable%3D!0)%2CObject.defineProperty(t%2Cr.key%2Cr)%7D%7Dfunction%20i(t%2Ci%2Cr)%7Breturn%20i%26%26e(t.prototype%2Ci)%2Cr%26%26e(t%2Cr)%2CObject.defineProperty(t%2C%22prototype%22%2C%7Bwritable%3A!1%7D)%2Ct%7Dvar%20r%3Dfunction()%7Bfunction%20e(i)%7Bt(this%2Ce)%2Cthis.map%3Dnew%20Map%2Cthis.first%3Dvoid%200%2Cthis.last%3Dvoid%200%2Cthis.maxSize%3Di%7Dreturn%20i(e%2C%5B%7Bkey%3A%22size%22%2Cget%3Afunction()%7Breturn%20this.map.size%7D%7D%2C%7Bkey%3A%22get%22%2Cvalue%3Afunction(t)%7Bvar%20e%3Dthis.map.get(t)%3Bif(void%200!%3D%3De)return%20e!%3D%3Dthis.first%26%26(e%3D%3D%3Dthis.last%3F(this.last%3De.prev%2Cthis.last.next%3Dvoid%200)%3A(e.prev.next%3De.next%2Ce.next.prev%3De.prev)%2Ce.next%3Dthis.first%2Cthis.first.prev%3De%2Cthis.first%3De)%2Ce.value%7D%7D%2C%7Bkey%3A%22set%22%2Cvalue%3Afunction(t%2Ce)%7Bif(!(this.maxSize%3C1))%7Bif(this.map.has(t))throw%20new%20Error(%22Cannot%20update%20existing%20keys%20in%20the%20cache%22)%3Bvar%20i%3Dnew%20n(t%2Ce)%3Bfor(void%200%3D%3D%3Dthis.first%3F(this.first%3Di%2Cthis.last%3Di)%3A(i.next%3Dthis.first%2Cthis.first.prev%3Di%2Cthis.first%3Di)%2Cthis.map.set(t%2Ci)%3Bthis.map.size%3Ethis.maxSize%3B)%7Bvar%20r%3Dthis.last%3Bthis.map.delete(r.key)%2Cthis.last%3Dr.prev%2Cthis.last.next%3Dvoid%200%7D%7D%7D%7D%5D)%2Ce%7D()%2Cn%3Di((function%20e(i%2Cr)%7Bt(this%2Ce)%2Cthis.next%3Dvoid%200%2Cthis.prev%3Dvoid%200%2Cthis.key%3Di%2Cthis.value%3Dr%7D))%2Ca%3DMath.log10(9e15)%2Cs%3Dfunction()%7Bfor(var%20t%3D%5B%5D%2Ce%3D-323%3Be%3C%3D308%3Be%2B%2B)t.push(Number(%221e%22%2Be))%3Breturn%20function(e)%7Breturn%20t%5Be%2B323%5D%7D%7D()%2Cu%3D%5B2%2CMath.E%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%5D%2Ch%3D%5B%5B1%2C1.0891180521811203%2C1.1789767925673957%2C1.2701455431742086%2C1.3632090180450092%2C1.4587818160364217%2C1.5575237916251419%2C1.6601571006859253%2C1.767485818836978%2C1.8804192098842727%2C2%5D%2C%5B1%2C1.1121114330934079%2C1.231038924931609%2C1.3583836963111375%2C1.4960519303993531%2C1.6463542337511945%2C1.8121385357018724%2C1.996971324618307%2C2.2053895545527546%2C2.4432574483385254%2CMath.E%5D%2C%5B1%2C1.1187738849693603%2C1.2464963939368214%2C1.38527004705667%2C1.5376664685821402%2C1.7068895236551784%2C1.897001227148399%2C2.1132403089001035%2C2.362480153784171%2C2.6539010333870774%2C3%5D%2C%5B1%2C1.1367350847096405%2C1.2889510672956703%2C1.4606478703324786%2C1.6570295196661111%2C1.8850062585672889%2C2.1539465047453485%2C2.476829779693097%2C2.872061932789197%2C3.3664204535587183%2C4%5D%2C%5B1%2C1.1494592900767588%2C1.319708228183931%2C1.5166291280087583%2C1.748171114438024%2C2.0253263297298045%2C2.3636668498288547%2C2.7858359149579424%2C3.3257226212448145%2C4.035730287722532%2C5%5D%2C%5B1%2C1.159225940787673%2C1.343712473580932%2C1.5611293155111927%2C1.8221199554561318%2C2.14183924486326%2C2.542468319282638%2C3.0574682501653316%2C3.7390572020926873%2C4.6719550537360774%2C6%5D%2C%5B1%2C1.1670905356972596%2C1.3632807444991446%2C1.5979222279405536%2C1.8842640123816674%2C2.2416069644878687%2C2.69893426559423%2C3.3012632110403577%2C4.121250340630164%2C5.281493033448316%2C7%5D%2C%5B1%2C1.1736630594087796%2C1.379783782386201%2C1.6292821855668218%2C1.9378971836180754%2C2.3289975651071977%2C2.8384347394720835%2C3.5232708454565906%2C4.478242031114584%2C5.868592169644505%2C8%5D%2C%5B1%2C1.1793017514670474%2C1.394054150657457%2C1.65664127441059%2C1.985170999970283%2C2.4069682290577457%2C2.9647310119960752%2C3.7278665320924946%2C4.814462547283592%2C6.436522247411611%2C9%5D%2C%5B1%2C1.1840100246247336%2C1.4061375836156955%2C1.6802272208863964%2C2.026757028388619%2C2.4770056063449646%2C3.080525271755482%2C3.9191964192627284%2C5.135152840833187%2C6.989961179534715%2C10%5D%5D%2Co%3D%5B%5B-1%2C-.9194161097107025%2C-.8335625019330468%2C-.7425599821143978%2C-.6466611521029437%2C-.5462617907227869%2C-.4419033816638769%2C-.3342645487554494%2C-.224140440909962%2C-.11241087890006762%2C0%5D%2C%5B-1%2C-.90603157029014%2C-.80786507256596%2C-.7064666939634%2C-.60294836853664%2C-.49849837513117%2C-.39430303318768%2C-.29147201034755%2C-.19097820800866%2C-.09361896280296%2C0%5D%2C%5B-1%2C-.9021579584316141%2C-.8005762598234203%2C-.6964780623319391%2C-.5911906810998454%2C-.486050182576545%2C-.3823089430815083%2C-.28106046722897615%2C-.1831906535795894%2C-.08935809204418144%2C0%5D%2C%5B-1%2C-.8917227442365535%2C-.781258746326964%2C-.6705130326902455%2C-.5612813129406509%2C-.4551067709033134%2C-.35319256652135966%2C-.2563741554088552%2C-.1651412821106526%2C-.0796919581982668%2C0%5D%2C%5B-1%2C-.8843387974366064%2C-.7678744063886243%2C-.6529563724510552%2C-.5415870994657841%2C-.4352842206588936%2C-.33504449124791424%2C-.24138853420685147%2C-.15445285440944467%2C-.07409659641336663%2C0%5D%2C%5B-1%2C-.8786709358426346%2C-.7577735191184886%2C-.6399546189952064%2C-.527284921869926%2C-.4211627631006314%2C-.3223479611761232%2C-.23107655627789858%2C-.1472057700818259%2C-.07035171210706326%2C0%5D%2C%5B-1%2C-.8740862815291583%2C-.7497032990976209%2C-.6297119746181752%2C-.5161838335958787%2C-.41036238255751956%2C-.31277212146489963%2C-.2233976621705518%2C-.1418697367979619%2C-.06762117662323441%2C0%5D%2C%5B-1%2C-.8702632331800649%2C-.7430366914122081%2C-.6213373075161548%2C-.5072025698095242%2C-.40171437727184167%2C-.30517930701410456%2C-.21736343968190863%2C-.137710238299109%2C-.06550774483471955%2C0%5D%2C%5B-1%2C-.8670016295947213%2C-.7373984232432306%2C-.6143173985094293%2C-.49973884395492807%2C-.394584953527678%2C-.2989649949848695%2C-.21245647317021688%2C-.13434688362382652%2C-.0638072667348083%2C0%5D%2C%5B-1%2C-.8641642839543857%2C-.732534623168535%2C-.6083127477059322%2C-.4934049257184696%2C-.3885773075899922%2C-.29376029055315767%2C-.2083678561173622%2C-.13155653399373268%2C-.062401588652553186%2C0%5D%5D%2Cl%3Dfunction(t)%7Breturn%20k.fromValue_noAlloc(t)%7D%2Cm%3Dfunction(t%2Ce%2Ci)%7Breturn%20k.fromComponents(t%2Ce%2Ci)%7D%2Cg%3Dfunction(t%2Ce%2Ci)%7Breturn%20k.fromComponents_noNormalize(t%2Ce%2Ci)%7D%2Cf%3Dfunction(t%2Ce)%7Bvar%20i%3De%2B1%2Cr%3DMath.ceil(Math.log10(Math.abs(t)))%2Cn%3DMath.round(t*Math.pow(10%2Ci-r))*Math.pow(10%2Cr-i)%3Breturn%20parseFloat(n.toFixed(Math.max(i-r%2C0)))%7D%2Cc%3Dfunction(t)%7Breturn%20Math.sign(t)*Math.log10(Math.abs(t))%7D%2Cy%3D.5671432904097838%2Cv%3Dfunction(t)%7Bvar%20e%2Ci%2Cr%3Darguments.length%3E1%26%26void%200!%3D%3Darguments%5B1%5D%3Farguments%5B1%5D%3A1e-10%3Bif(!Number.isFinite(t))return%20t%3Bif(0%3D%3D%3Dt)return%20t%3Bif(1%3D%3D%3Dt)return%20y%3Be%3Dt%3C10%3F0%3AMath.log(t)-Math.log(Math.log(t))%3Bfor(var%20n%3D0%3Bn%3C100%3B%2B%2Bn)%7Bif(i%3D(t*Math.exp(-e)%2Be*e)%2F(e%2B1)%2CMath.abs(i-e)%3Cr*Math.abs(i))return%20i%3Be%3Di%7Dthrow%20Error(%22Iteration%20failed%20to%20converge%3A%20%22.concat(t.toString()))%7D%3Bfunction%20d(t)%7Bvar%20e%2Ci%2Cr%2Cn%2Ca%3Darguments.length%3E1%26%26void%200!%3D%3Darguments%5B1%5D%3Farguments%5B1%5D%3A1e-10%3Bif(!Number.isFinite(t.mag))return%20t%3Bif(t.eq(k.dZero))return%20t%3Bif(t.eq(k.dOne))return%20k.fromNumber(y)%3Be%3Dk.ln(t)%3Bfor(var%20s%3D0%3Bs%3C100%3B%2B%2Bs)%7Bif(i%3De.neg().exp()%2Cr%3De.sub(t.mul(i))%2Cn%3De.sub(r.div(e.add(1).sub(e.add(2).mul(r).div(k.mul(2%2Ce).add(2)))))%2Ck.abs(n.sub(e)).lt(k.abs(n).mul(a)))return%20n%3Be%3Dn%7Dthrow%20Error(%22Iteration%20failed%20to%20converge%3A%20%22.concat(t.toString()))%7Dvar%20k%3Dfunction()%7Bfunction%20e(i)%7Bt(this%2Ce)%2Cthis.sign%3D0%2Cthis.mag%3D0%2Cthis.layer%3D0%2Ci%20instanceof%20e%3Fthis.fromDecimal(i)%3A%22number%22%3D%3Dtypeof%20i%3Fthis.fromNumber(i)%3A%22string%22%3D%3Dtypeof%20i%26%26this.fromString(i)%7Dreturn%20i(e%2C%5B%7Bkey%3A%22m%22%2Cget%3Afunction()%7Bif(0%3D%3D%3Dthis.sign)return%200%3Bif(0%3D%3D%3Dthis.layer)%7Bvar%20t%2Ce%3DMath.floor(Math.log10(this.mag))%3Breturn%20t%3D5e-324%3D%3D%3Dthis.mag%3F5%3Athis.mag%2Fs(e)%2Cthis.sign*t%7Dif(1%3D%3D%3Dthis.layer)%7Bvar%20i%3Dthis.mag-Math.floor(this.mag)%3Breturn%20this.sign*Math.pow(10%2Ci)%7Dreturn%20this.sign%7D%2Cset%3Afunction(t)%7Bthis.layer%3C%3D2%3Fthis.fromMantissaExponent(t%2Cthis.e)%3A(this.sign%3DMath.sign(t)%2C0%3D%3D%3Dthis.sign%26%26(this.layer%3D0%2Cthis.exponent%3D0))%7D%7D%2C%7Bkey%3A%22e%22%2Cget%3Afunction()%7Breturn%200%3D%3D%3Dthis.sign%3F0%3A0%3D%3D%3Dthis.layer%3FMath.floor(Math.log10(this.mag))%3A1%3D%3D%3Dthis.layer%3FMath.floor(this.mag)%3A2%3D%3D%3Dthis.layer%3FMath.floor(Math.sign(this.mag)*Math.pow(10%2CMath.abs(this.mag)))%3Athis.mag*Number.POSITIVE_INFINITY%7D%2Cset%3Afunction(t)%7Bthis.fromMantissaExponent(this.m%2Ct)%7D%7D%2C%7Bkey%3A%22s%22%2Cget%3Afunction()%7Breturn%20this.sign%7D%2Cset%3Afunction(t)%7B0%3D%3D%3Dt%3F(this.sign%3D0%2Cthis.layer%3D0%2Cthis.mag%3D0)%3Athis.sign%3Dt%7D%7D%2C%7Bkey%3A%22mantissa%22%2Cget%3Afunction()%7Breturn%20this.m%7D%2Cset%3Afunction(t)%7Bthis.m%3Dt%7D%7D%2C%7Bkey%3A%22exponent%22%2Cget%3Afunction()%7Breturn%20this.e%7D%2Cset%3Afunction(t)%7Bthis.e%3Dt%7D%7D%2C%7Bkey%3A%22normalize%22%2Cvalue%3Afunction()%7Bif(0%3D%3D%3Dthis.sign%7C%7C0%3D%3D%3Dthis.mag%26%260%3D%3D%3Dthis.layer)return%20this.sign%3D0%2Cthis.mag%3D0%2Cthis.layer%3D0%2Cthis%3Bif(0%3D%3D%3Dthis.layer%26%26this.mag%3C0%26%26(this.mag%3D-this.mag%2Cthis.sign%3D-this.sign)%2C0%3D%3D%3Dthis.layer%26%26this.mag%3C1%2F9e15)return%20this.layer%2B%3D1%2Cthis.mag%3DMath.log10(this.mag)%2Cthis%3Bvar%20t%3DMath.abs(this.mag)%2Ce%3DMath.sign(this.mag)%3Bif(t%3E%3D9e15)return%20this.layer%2B%3D1%2Cthis.mag%3De*Math.log10(t)%2Cthis%3Bfor(%3Bt%3Ca%26%26this.layer%3E0%3B)this.layer-%3D1%2C0%3D%3D%3Dthis.layer%3Fthis.mag%3DMath.pow(10%2Cthis.mag)%3A(this.mag%3De*Math.pow(10%2Ct)%2Ct%3DMath.abs(this.mag)%2Ce%3DMath.sign(this.mag))%3Breturn%200%3D%3D%3Dthis.layer%26%26(this.mag%3C0%3F(this.mag%3D-this.mag%2Cthis.sign%3D-this.sign)%3A0%3D%3D%3Dthis.mag%26%26(this.sign%3D0))%2Cthis%7D%7D%2C%7Bkey%3A%22fromComponents%22%2Cvalue%3Afunction(t%2Ce%2Ci)%7Breturn%20this.sign%3Dt%2Cthis.layer%3De%2Cthis.mag%3Di%2Cthis.normalize()%2Cthis%7D%7D%2C%7Bkey%3A%22fromComponents_noNormalize%22%2Cvalue%3Afunction(t%2Ce%2Ci)%7Breturn%20this.sign%3Dt%2Cthis.layer%3De%2Cthis.mag%3Di%2Cthis%7D%7D%2C%7Bkey%3A%22fromMantissaExponent%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20this.layer%3D1%2Cthis.sign%3DMath.sign(t)%2Ct%3DMath.abs(t)%2Cthis.mag%3De%2BMath.log10(t)%2Cthis.normalize()%2Cthis%7D%7D%2C%7Bkey%3A%22fromMantissaExponent_noNormalize%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20this.fromMantissaExponent(t%2Ce)%2Cthis%7D%7D%2C%7Bkey%3A%22fromDecimal%22%2Cvalue%3Afunction(t)%7Breturn%20this.sign%3Dt.sign%2Cthis.layer%3Dt.layer%2Cthis.mag%3Dt.mag%2Cthis%7D%7D%2C%7Bkey%3A%22fromNumber%22%2Cvalue%3Afunction(t)%7Breturn%20this.mag%3DMath.abs(t)%2Cthis.sign%3DMath.sign(t)%2Cthis.layer%3D0%2Cthis.normalize()%2Cthis%7D%7D%2C%7Bkey%3A%22fromString%22%2Cvalue%3Afunction(t)%7Bvar%20i%3Dt%2Cr%3De.fromStringCache.get(i)%3Bif(void%200!%3D%3Dr)return%20this.fromDecimal(r)%3Bvar%20n%3D(t%3Dt.replace(%22%2C%22%2C%22%22)).split(%22%5E%5E%5E%22)%3Bif(2%3D%3D%3Dn.length)%7Bvar%20a%3DparseFloat(n%5B0%5D)%2Cs%3DparseFloat(n%5B1%5D)%2Cu%3Dn%5B1%5D.split(%22%3B%22)%2Ch%3D1%3Bif(2%3D%3D%3Du.length%26%26(h%3DparseFloat(u%5B1%5D)%2CisFinite(h)%7C%7C(h%3D1))%2CisFinite(a)%26%26isFinite(s))%7Bvar%20o%3De.pentate(a%2Cs%2Ch)%3Breturn%20this.sign%3Do.sign%2Cthis.layer%3Do.layer%2Cthis.mag%3Do.mag%2Ce.fromStringCache.maxSize%3E%3D1%26%26e.fromStringCache.set(i%2Ce.fromDecimal(this))%2Cthis%7D%7Dvar%20g%3Dt.split(%22%5E%5E%22)%3Bif(2%3D%3D%3Dg.length)%7Bvar%20f%3DparseFloat(g%5B0%5D)%2Cy%3DparseFloat(g%5B1%5D)%2Cv%3Dg%5B1%5D.split(%22%3B%22)%2Cd%3D1%3Bif(2%3D%3D%3Dv.length%26%26(d%3DparseFloat(v%5B1%5D)%2CisFinite(d)%7C%7C(d%3D1))%2CisFinite(f)%26%26isFinite(y))%7Bvar%20k%3De.tetrate(f%2Cy%2Cd)%3Breturn%20this.sign%3Dk.sign%2Cthis.layer%3Dk.layer%2Cthis.mag%3Dk.mag%2Ce.fromStringCache.maxSize%3E%3D1%26%26e.fromStringCache.set(i%2Ce.fromDecimal(this))%2Cthis%7D%7Dvar%20p%2CN%2Cb%3Dt.split(%22%5E%22)%3Bif(2%3D%3D%3Db.length)%7Bvar%20M%3DparseFloat(b%5B0%5D)%2C_%3DparseFloat(b%5B1%5D)%3Bif(isFinite(M)%26%26isFinite(_))%7Bvar%20x%3De.pow(M%2C_)%3Breturn%20this.sign%3Dx.sign%2Cthis.layer%3Dx.layer%2Cthis.mag%3Dx.mag%2Ce.fromStringCache.maxSize%3E%3D1%26%26e.fromStringCache.set(i%2Ce.fromDecimal(this))%2Cthis%7D%7Dvar%20F%3D(t%3Dt.trim().toLowerCase()).split(%22pt%22)%3Bif(2%3D%3D%3DF.length)%7Bp%3D10%2CN%3DparseFloat(F%5B0%5D)%2CF%5B1%5D%3DF%5B1%5D.replace(%22(%22%2C%22%22)%2CF%5B1%5D%3DF%5B1%5D.replace(%22)%22%2C%22%22)%3Bvar%20S%3DparseFloat(F%5B1%5D)%3Bif(isFinite(S)%7C%7C(S%3D1)%2CisFinite(p)%26%26isFinite(N))%7Bvar%20w%3De.tetrate(p%2CN%2CS)%3Breturn%20this.sign%3Dw.sign%2Cthis.layer%3Dw.layer%2Cthis.mag%3Dw.mag%2Ce.fromStringCache.maxSize%3E%3D1%26%26e.fromStringCache.set(i%2Ce.fromDecimal(this))%2Cthis%7D%7Dif(2%3D%3D%3D(F%3Dt.split(%22p%22)).length)%7Bp%3D10%2CN%3DparseFloat(F%5B0%5D)%2CF%5B1%5D%3DF%5B1%5D.replace(%22(%22%2C%22%22)%2CF%5B1%5D%3DF%5B1%5D.replace(%22)%22%2C%22%22)%3Bvar%20q%3DparseFloat(F%5B1%5D)%3Bif(isFinite(q)%7C%7C(q%3D1)%2CisFinite(p)%26%26isFinite(N))%7Bvar%20I%3De.tetrate(p%2CN%2Cq)%3Breturn%20this.sign%3DI.sign%2Cthis.layer%3DI.layer%2Cthis.mag%3DI.mag%2Ce.fromStringCache.maxSize%3E%3D1%26%26e.fromStringCache.set(i%2Ce.fromDecimal(this))%2Cthis%7D%7Dvar%20E%3Dt.split(%22e%22)%2CC%3DE.length-1%3Bif(0%3D%3D%3DC)%7Bvar%20z%3DparseFloat(t)%3Bif(isFinite(z))return%20this.fromNumber(z)%2Ce.fromStringCache.size%3E%3D1%26%26e.fromStringCache.set(i%2Ce.fromDecimal(this))%2Cthis%7Delse%20if(1%3D%3D%3DC)%7Bvar%20T%3DparseFloat(t)%3Bif(isFinite(T)%26%260!%3D%3DT)return%20this.fromNumber(T)%2Ce.fromStringCache.maxSize%3E%3D1%26%26e.fromStringCache.set(i%2Ce.fromDecimal(this))%2Cthis%7Dvar%20O%3Dt.split(%22e%5E%22)%3Bif(2%3D%3D%3DO.length)%7Bthis.sign%3D1%2C%22-%22%3D%3DO%5B0%5D.charAt(0)%26%26(this.sign%3D-1)%3Bfor(var%20D%3D%22%22%2CV%3D0%3BV%3CO%5B1%5D.length%3B%2B%2BV)%7Bvar%20A%3DO%5B1%5D.charCodeAt(V)%3Bif(!(A%3E%3D43%26%26A%3C%3D57%7C%7C101%3D%3D%3DA))return%20this.layer%3DparseFloat(D)%2Cthis.mag%3DparseFloat(O%5B1%5D.substr(V%2B1))%2Cthis.normalize()%2Ce.fromStringCache.maxSize%3E%3D1%26%26e.fromStringCache.set(i%2Ce.fromDecimal(this))%2Cthis%3BD%2B%3DO%5B1%5D.charAt(V)%7D%7Dif(C%3C1)return%20this.sign%3D0%2Cthis.layer%3D0%2Cthis.mag%3D0%2Ce.fromStringCache.maxSize%3E%3D1%26%26e.fromStringCache.set(i%2Ce.fromDecimal(this))%2Cthis%3Bvar%20P%3DparseFloat(E%5B0%5D)%3Bif(0%3D%3D%3DP)return%20this.sign%3D0%2Cthis.layer%3D0%2Cthis.mag%3D0%2Ce.fromStringCache.maxSize%3E%3D1%26%26e.fromStringCache.set(i%2Ce.fromDecimal(this))%2Cthis%3Bvar%20Z%3DparseFloat(E%5BE.length-1%5D)%3Bif(C%3E%3D2)%7Bvar%20Y%3DparseFloat(E%5BE.length-2%5D)%3BisFinite(Y)%26%26(Z*%3DMath.sign(Y)%2CZ%2B%3Dc(Y))%7Dif(isFinite(P))if(1%3D%3D%3DC)this.sign%3DMath.sign(P)%2Cthis.layer%3D1%2Cthis.mag%3DZ%2BMath.log10(Math.abs(P))%3Belse%7Bif(this.sign%3DMath.sign(P)%2Cthis.layer%3DC%2C2%3D%3D%3DC)%7Bvar%20G%3De.mul(m(1%2C2%2CZ)%2Cl(P))%3Breturn%20this.sign%3DG.sign%2Cthis.layer%3DG.layer%2Cthis.mag%3DG.mag%2Ce.fromStringCache.maxSize%3E%3D1%26%26e.fromStringCache.set(i%2Ce.fromDecimal(this))%2Cthis%7Dthis.mag%3DZ%7Delse%20this.sign%3D%22-%22%3D%3D%3DE%5B0%5D%3F-1%3A1%2Cthis.layer%3DC%2Cthis.mag%3DZ%3Breturn%20this.normalize()%2Ce.fromStringCache.maxSize%3E%3D1%26%26e.fromStringCache.set(i%2Ce.fromDecimal(this))%2Cthis%7D%7D%2C%7Bkey%3A%22fromValue%22%2Cvalue%3Afunction(t)%7Breturn%20t%20instanceof%20e%3Fthis.fromDecimal(t)%3A%22number%22%3D%3Dtypeof%20t%3Fthis.fromNumber(t)%3A%22string%22%3D%3Dtypeof%20t%3Fthis.fromString(t)%3A(this.sign%3D0%2Cthis.layer%3D0%2Cthis.mag%3D0%2Cthis)%7D%7D%2C%7Bkey%3A%22toNumber%22%2Cvalue%3Afunction()%7Breturn%20Number.isFinite(this.layer)%3F0%3D%3D%3Dthis.layer%3Fthis.sign*this.mag%3A1%3D%3D%3Dthis.layer%3Fthis.sign*Math.pow(10%2Cthis.mag)%3Athis.mag%3E0%3Fthis.sign%3E0%3FNumber.POSITIVE_INFINITY%3ANumber.NEGATIVE_INFINITY%3A0%3ANumber.NaN%7D%7D%2C%7Bkey%3A%22mantissaWithDecimalPlaces%22%2Cvalue%3Afunction(t)%7Breturn%20isNaN(this.m)%3FNumber.NaN%3A0%3D%3D%3Dthis.m%3F0%3Af(this.m%2Ct)%7D%7D%2C%7Bkey%3A%22magnitudeWithDecimalPlaces%22%2Cvalue%3Afunction(t)%7Breturn%20isNaN(this.mag)%3FNumber.NaN%3A0%3D%3D%3Dthis.mag%3F0%3Af(this.mag%2Ct)%7D%7D%2C%7Bkey%3A%22toString%22%2Cvalue%3Afunction()%7Breturn%20isNaN(this.layer)%7C%7CisNaN(this.sign)%7C%7CisNaN(this.mag)%3F%22NaN%22%3Athis.mag%3D%3D%3DNumber.POSITIVE_INFINITY%7C%7Cthis.layer%3D%3D%3DNumber.POSITIVE_INFINITY%3F1%3D%3D%3Dthis.sign%3F%22Infinity%22%3A%22-Infinity%22%3A0%3D%3D%3Dthis.layer%3Fthis.mag%3C1e21%26%26this.mag%3E1e-7%7C%7C0%3D%3D%3Dthis.mag%3F(this.sign*this.mag).toString()%3Athis.m%2B%22e%22%2Bthis.e%3A1%3D%3D%3Dthis.layer%3Fthis.m%2B%22e%22%2Bthis.e%3Athis.layer%3C%3D5%3F(-1%3D%3D%3Dthis.sign%3F%22-%22%3A%22%22)%2B%22e%22.repeat(this.layer)%2Bthis.mag%3A(-1%3D%3D%3Dthis.sign%3F%22-%22%3A%22%22)%2B%22(e%5E%22%2Bthis.layer%2B%22)%22%2Bthis.mag%7D%7D%2C%7Bkey%3A%22toExponential%22%2Cvalue%3Afunction(t)%7Breturn%200%3D%3D%3Dthis.layer%3F(this.sign*this.mag).toExponential(t)%3Athis.toStringWithDecimalPlaces(t)%7D%7D%2C%7Bkey%3A%22toFixed%22%2Cvalue%3Afunction(t)%7Breturn%200%3D%3D%3Dthis.layer%3F(this.sign*this.mag).toFixed(t)%3Athis.toStringWithDecimalPlaces(t)%7D%7D%2C%7Bkey%3A%22toPrecision%22%2Cvalue%3Afunction(t)%7Breturn%20this.e%3C%3D-7%3Fthis.toExponential(t-1)%3At%3Ethis.e%3Fthis.toFixed(t-this.exponent-1)%3Athis.toExponential(t-1)%7D%7D%2C%7Bkey%3A%22valueOf%22%2Cvalue%3Afunction()%7Breturn%20this.toString()%7D%7D%2C%7Bkey%3A%22toJSON%22%2Cvalue%3Afunction()%7Breturn%20this.toString()%7D%7D%2C%7Bkey%3A%22toStringWithDecimalPlaces%22%2Cvalue%3Afunction(t)%7Breturn%200%3D%3D%3Dthis.layer%3Fthis.mag%3C1e21%26%26this.mag%3E1e-7%7C%7C0%3D%3D%3Dthis.mag%3F(this.sign*this.mag).toFixed(t)%3Af(this.m%2Ct)%2B%22e%22%2Bf(this.e%2Ct)%3A1%3D%3D%3Dthis.layer%3Ff(this.m%2Ct)%2B%22e%22%2Bf(this.e%2Ct)%3Athis.layer%3C%3D5%3F(-1%3D%3D%3Dthis.sign%3F%22-%22%3A%22%22)%2B%22e%22.repeat(this.layer)%2Bf(this.mag%2Ct)%3A(-1%3D%3D%3Dthis.sign%3F%22-%22%3A%22%22)%2B%22(e%5E%22%2Bthis.layer%2B%22)%22%2Bf(this.mag%2Ct)%7D%7D%2C%7Bkey%3A%22abs%22%2Cvalue%3Afunction()%7Breturn%20g(0%3D%3D%3Dthis.sign%3F0%3A1%2Cthis.layer%2Cthis.mag)%7D%7D%2C%7Bkey%3A%22neg%22%2Cvalue%3Afunction()%7Breturn%20g(-this.sign%2Cthis.layer%2Cthis.mag)%7D%7D%2C%7Bkey%3A%22negate%22%2Cvalue%3Afunction()%7Breturn%20this.neg()%7D%7D%2C%7Bkey%3A%22negated%22%2Cvalue%3Afunction()%7Breturn%20this.neg()%7D%7D%2C%7Bkey%3A%22sgn%22%2Cvalue%3Afunction()%7Breturn%20this.sign%7D%7D%2C%7Bkey%3A%22round%22%2Cvalue%3Afunction()%7Breturn%20this.mag%3C0%3Fe.dZero%3A0%3D%3D%3Dthis.layer%3Fm(this.sign%2C0%2CMath.round(this.mag))%3Athis%7D%7D%2C%7Bkey%3A%22floor%22%2Cvalue%3Afunction()%7Breturn%20this.mag%3C0%3Fe.dZero%3A0%3D%3D%3Dthis.layer%3Fm(this.sign%2C0%2CMath.floor(this.mag))%3Athis%7D%7D%2C%7Bkey%3A%22ceil%22%2Cvalue%3Afunction()%7Breturn%20this.mag%3C0%3Fe.dZero%3A0%3D%3D%3Dthis.layer%3Fm(this.sign%2C0%2CMath.ceil(this.mag))%3Athis%7D%7D%2C%7Bkey%3A%22trunc%22%2Cvalue%3Afunction()%7Breturn%20this.mag%3C0%3Fe.dZero%3A0%3D%3D%3Dthis.layer%3Fm(this.sign%2C0%2CMath.trunc(this.mag))%3Athis%7D%7D%2C%7Bkey%3A%22add%22%2Cvalue%3Afunction(t)%7Bvar%20i%2Cr%2Cn%3Dl(t)%3Bif(!Number.isFinite(this.layer))return%20this%3Bif(!Number.isFinite(n.layer))return%20n%3Bif(0%3D%3D%3Dthis.sign)return%20n%3Bif(0%3D%3D%3Dn.sign)return%20this%3Bif(this.sign%3D%3D%3D-n.sign%26%26this.layer%3D%3D%3Dn.layer%26%26this.mag%3D%3D%3Dn.mag)return%20g(0%2C0%2C0)%3Bif(this.layer%3E%3D2%7C%7Cn.layer%3E%3D2)return%20this.maxabs(n)%3Bif(e.cmpabs(this%2Cn)%3E0%3F(i%3Dthis%2Cr%3Dn)%3A(i%3Dn%2Cr%3Dthis)%2C0%3D%3D%3Di.layer%26%260%3D%3D%3Dr.layer)return%20e.fromNumber(i.sign*i.mag%2Br.sign*r.mag)%3Bvar%20a%3Di.layer*Math.sign(i.mag)%2Cs%3Dr.layer*Math.sign(r.mag)%3Bif(a-s%3E%3D2)return%20i%3Bif(0%3D%3D%3Da%26%26-1%3D%3D%3Ds)%7Bif(Math.abs(r.mag-Math.log10(i.mag))%3E17)return%20i%3Bvar%20u%3DMath.pow(10%2CMath.log10(i.mag)-r.mag)%2Ch%3Dr.sign%2Bi.sign*u%3Breturn%20m(Math.sign(h)%2C1%2Cr.mag%2BMath.log10(Math.abs(h)))%7Dif(1%3D%3D%3Da%26%260%3D%3D%3Ds)%7Bif(Math.abs(i.mag-Math.log10(r.mag))%3E17)return%20i%3Bvar%20o%3DMath.pow(10%2Ci.mag-Math.log10(r.mag))%2Cf%3Dr.sign%2Bi.sign*o%3Breturn%20m(Math.sign(f)%2C1%2CMath.log10(r.mag)%2BMath.log10(Math.abs(f)))%7Dif(Math.abs(i.mag-r.mag)%3E17)return%20i%3Bvar%20c%3DMath.pow(10%2Ci.mag-r.mag)%2Cy%3Dr.sign%2Bi.sign*c%3Breturn%20m(Math.sign(y)%2C1%2Cr.mag%2BMath.log10(Math.abs(y)))%7D%7D%2C%7Bkey%3A%22plus%22%2Cvalue%3Afunction(t)%7Breturn%20this.add(t)%7D%7D%2C%7Bkey%3A%22sub%22%2Cvalue%3Afunction(t)%7Breturn%20this.add(l(t).neg())%7D%7D%2C%7Bkey%3A%22subtract%22%2Cvalue%3Afunction(t)%7Breturn%20this.sub(t)%7D%7D%2C%7Bkey%3A%22minus%22%2Cvalue%3Afunction(t)%7Breturn%20this.sub(t)%7D%7D%2C%7Bkey%3A%22mul%22%2Cvalue%3Afunction(t)%7Bvar%20i%2Cr%2Cn%3Dl(t)%3Bif(!Number.isFinite(this.layer))return%20this%3Bif(!Number.isFinite(n.layer))return%20n%3Bif(0%3D%3D%3Dthis.sign%7C%7C0%3D%3D%3Dn.sign)return%20g(0%2C0%2C0)%3Bif(this.layer%3D%3D%3Dn.layer%26%26this.mag%3D%3D%3D-n.mag)return%20g(this.sign*n.sign%2C0%2C1)%3Bif(this.layer%3En.layer%7C%7Cthis.layer%3D%3Dn.layer%26%26Math.abs(this.mag)%3EMath.abs(n.mag)%3F(i%3Dthis%2Cr%3Dn)%3A(i%3Dn%2Cr%3Dthis)%2C0%3D%3D%3Di.layer%26%260%3D%3D%3Dr.layer)return%20e.fromNumber(i.sign*r.sign*i.mag*r.mag)%3Bif(i.layer%3E%3D3%7C%7Ci.layer-r.layer%3E%3D2)return%20m(i.sign*r.sign%2Ci.layer%2Ci.mag)%3Bif(1%3D%3D%3Di.layer%26%260%3D%3D%3Dr.layer)return%20m(i.sign*r.sign%2C1%2Ci.mag%2BMath.log10(r.mag))%3Bif(1%3D%3D%3Di.layer%26%261%3D%3D%3Dr.layer)return%20m(i.sign*r.sign%2C1%2Ci.mag%2Br.mag)%3Bif(2%3D%3D%3Di.layer%26%261%3D%3D%3Dr.layer)%7Bvar%20a%3Dm(Math.sign(i.mag)%2Ci.layer-1%2CMath.abs(i.mag)).add(m(Math.sign(r.mag)%2Cr.layer-1%2CMath.abs(r.mag)))%3Breturn%20m(i.sign*r.sign%2Ca.layer%2B1%2Ca.sign*a.mag)%7Dif(2%3D%3D%3Di.layer%26%262%3D%3D%3Dr.layer)%7Bvar%20s%3Dm(Math.sign(i.mag)%2Ci.layer-1%2CMath.abs(i.mag)).add(m(Math.sign(r.mag)%2Cr.layer-1%2CMath.abs(r.mag)))%3Breturn%20m(i.sign*r.sign%2Cs.layer%2B1%2Cs.sign*s.mag)%7Dthrow%20Error(%22Bad%20arguments%20to%20mul%3A%20%22%2Bthis%2B%22%2C%20%22%2Bt)%7D%7D%2C%7Bkey%3A%22multiply%22%2Cvalue%3Afunction(t)%7Breturn%20this.mul(t)%7D%7D%2C%7Bkey%3A%22times%22%2Cvalue%3Afunction(t)%7Breturn%20this.mul(t)%7D%7D%2C%7Bkey%3A%22div%22%2Cvalue%3Afunction(t)%7Bvar%20e%3Dl(t)%3Breturn%20this.mul(e.recip())%7D%7D%2C%7Bkey%3A%22divide%22%2Cvalue%3Afunction(t)%7Breturn%20this.div(t)%7D%7D%2C%7Bkey%3A%22divideBy%22%2Cvalue%3Afunction(t)%7Breturn%20this.div(t)%7D%7D%2C%7Bkey%3A%22dividedBy%22%2Cvalue%3Afunction(t)%7Breturn%20this.div(t)%7D%7D%2C%7Bkey%3A%22recip%22%2Cvalue%3Afunction()%7Breturn%200%3D%3D%3Dthis.mag%3Fe.dNaN%3A0%3D%3D%3Dthis.layer%3Fm(this.sign%2C0%2C1%2Fthis.mag)%3Am(this.sign%2Cthis.layer%2C-this.mag)%7D%7D%2C%7Bkey%3A%22reciprocal%22%2Cvalue%3Afunction()%7Breturn%20this.recip()%7D%7D%2C%7Bkey%3A%22reciprocate%22%2Cvalue%3Afunction()%7Breturn%20this.recip()%7D%7D%2C%7Bkey%3A%22cmp%22%2Cvalue%3Afunction(t)%7Bvar%20e%3Dl(t)%3Breturn%20this.sign%3Ee.sign%3F1%3Athis.sign%3Ce.sign%3F-1%3Athis.sign*this.cmpabs(t)%7D%7D%2C%7Bkey%3A%22cmpabs%22%2Cvalue%3Afunction(t)%7Bvar%20e%3Dl(t)%2Ci%3Dthis.mag%3E0%3Fthis.layer%3A-this.layer%2Cr%3De.mag%3E0%3Fe.layer%3A-e.layer%3Breturn%20i%3Er%3F1%3Ai%3Cr%3F-1%3Athis.mag%3Ee.mag%3F1%3Athis.mag%3Ce.mag%3F-1%3A0%7D%7D%2C%7Bkey%3A%22compare%22%2Cvalue%3Afunction(t)%7Breturn%20this.cmp(t)%7D%7D%2C%7Bkey%3A%22isNan%22%2Cvalue%3Afunction()%7Breturn%20isNaN(this.sign)%7C%7CisNaN(this.layer)%7C%7CisNaN(this.mag)%7D%7D%2C%7Bkey%3A%22isFinite%22%2Cvalue%3Afunction(t)%7Bfunction%20e()%7Breturn%20t.apply(this%2Carguments)%7Dreturn%20e.toString%3Dfunction()%7Breturn%20t.toString()%7D%2Ce%7D((function()%7Breturn%20isFinite(this.sign)%26%26isFinite(this.layer)%26%26isFinite(this.mag)%7D))%7D%2C%7Bkey%3A%22eq%22%2Cvalue%3Afunction(t)%7Bvar%20e%3Dl(t)%3Breturn%20this.sign%3D%3D%3De.sign%26%26this.layer%3D%3D%3De.layer%26%26this.mag%3D%3D%3De.mag%7D%7D%2C%7Bkey%3A%22equals%22%2Cvalue%3Afunction(t)%7Breturn%20this.eq(t)%7D%7D%2C%7Bkey%3A%22neq%22%2Cvalue%3Afunction(t)%7Breturn!this.eq(t)%7D%7D%2C%7Bkey%3A%22notEquals%22%2Cvalue%3Afunction(t)%7Breturn%20this.neq(t)%7D%7D%2C%7Bkey%3A%22lt%22%2Cvalue%3Afunction(t)%7Breturn-1%3D%3D%3Dthis.cmp(t)%7D%7D%2C%7Bkey%3A%22lte%22%2Cvalue%3Afunction(t)%7Breturn!this.gt(t)%7D%7D%2C%7Bkey%3A%22gt%22%2Cvalue%3Afunction(t)%7Breturn%201%3D%3D%3Dthis.cmp(t)%7D%7D%2C%7Bkey%3A%22gte%22%2Cvalue%3Afunction(t)%7Breturn!this.lt(t)%7D%7D%2C%7Bkey%3A%22max%22%2Cvalue%3Afunction(t)%7Bvar%20e%3Dl(t)%3Breturn%20this.lt(e)%3Fe%3Athis%7D%7D%2C%7Bkey%3A%22min%22%2Cvalue%3Afunction(t)%7Bvar%20e%3Dl(t)%3Breturn%20this.gt(e)%3Fe%3Athis%7D%7D%2C%7Bkey%3A%22maxabs%22%2Cvalue%3Afunction(t)%7Bvar%20e%3Dl(t)%3Breturn%20this.cmpabs(e)%3C0%3Fe%3Athis%7D%7D%2C%7Bkey%3A%22minabs%22%2Cvalue%3Afunction(t)%7Bvar%20e%3Dl(t)%3Breturn%20this.cmpabs(e)%3E0%3Fe%3Athis%7D%7D%2C%7Bkey%3A%22clamp%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20this.max(t).min(e)%7D%7D%2C%7Bkey%3A%22clampMin%22%2Cvalue%3Afunction(t)%7Breturn%20this.max(t)%7D%7D%2C%7Bkey%3A%22clampMax%22%2Cvalue%3Afunction(t)%7Breturn%20this.min(t)%7D%7D%2C%7Bkey%3A%22cmp_tolerance%22%2Cvalue%3Afunction(t%2Ce)%7Bvar%20i%3Dl(t)%3Breturn%20this.eq_tolerance(i%2Ce)%3F0%3Athis.cmp(i)%7D%7D%2C%7Bkey%3A%22compare_tolerance%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20this.cmp_tolerance(t%2Ce)%7D%7D%2C%7Bkey%3A%22eq_tolerance%22%2Cvalue%3Afunction(t%2Ce)%7Bvar%20i%3Dl(t)%3Bif(null%3D%3De%26%26(e%3D1e-7)%2Cthis.sign!%3D%3Di.sign)return!1%3Bif(Math.abs(this.layer-i.layer)%3E1)return!1%3Bvar%20r%3Dthis.mag%2Cn%3Di.mag%3Breturn%20this.layer%3Ei.layer%26%26(n%3Dc(n))%2Cthis.layer%3Ci.layer%26%26(r%3Dc(r))%2CMath.abs(r-n)%3C%3De*Math.max(Math.abs(r)%2CMath.abs(n))%7D%7D%2C%7Bkey%3A%22equals_tolerance%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20this.eq_tolerance(t%2Ce)%7D%7D%2C%7Bkey%3A%22neq_tolerance%22%2Cvalue%3Afunction(t%2Ce)%7Breturn!this.eq_tolerance(t%2Ce)%7D%7D%2C%7Bkey%3A%22notEquals_tolerance%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20this.neq_tolerance(t%2Ce)%7D%7D%2C%7Bkey%3A%22lt_tolerance%22%2Cvalue%3Afunction(t%2Ce)%7Bvar%20i%3Dl(t)%3Breturn!this.eq_tolerance(i%2Ce)%26%26this.lt(i)%7D%7D%2C%7Bkey%3A%22lte_tolerance%22%2Cvalue%3Afunction(t%2Ce)%7Bvar%20i%3Dl(t)%3Breturn%20this.eq_tolerance(i%2Ce)%7C%7Cthis.lt(i)%7D%7D%2C%7Bkey%3A%22gt_tolerance%22%2Cvalue%3Afunction(t%2Ce)%7Bvar%20i%3Dl(t)%3Breturn!this.eq_tolerance(i%2Ce)%26%26this.gt(i)%7D%7D%2C%7Bkey%3A%22gte_tolerance%22%2Cvalue%3Afunction(t%2Ce)%7Bvar%20i%3Dl(t)%3Breturn%20this.eq_tolerance(i%2Ce)%7C%7Cthis.gt(i)%7D%7D%2C%7Bkey%3A%22pLog10%22%2Cvalue%3Afunction()%7Breturn%20this.lt(e.dZero)%3Fe.dZero%3Athis.log10()%7D%7D%2C%7Bkey%3A%22absLog10%22%2Cvalue%3Afunction()%7Breturn%200%3D%3D%3Dthis.sign%3Fe.dNaN%3Athis.layer%3E0%3Fm(Math.sign(this.mag)%2Cthis.layer-1%2CMath.abs(this.mag))%3Am(1%2C0%2CMath.log10(this.mag))%7D%7D%2C%7Bkey%3A%22log10%22%2Cvalue%3Afunction()%7Breturn%20this.sign%3C%3D0%3Fe.dNaN%3Athis.layer%3E0%3Fm(Math.sign(this.mag)%2Cthis.layer-1%2CMath.abs(this.mag))%3Am(this.sign%2C0%2CMath.log10(this.mag))%7D%7D%2C%7Bkey%3A%22log%22%2Cvalue%3Afunction(t)%7Breturn%20t%3Dl(t)%2Cthis.sign%3C%3D0%7C%7Ct.sign%3C%3D0%7C%7C1%3D%3D%3Dt.sign%26%260%3D%3D%3Dt.layer%26%261%3D%3D%3Dt.mag%3Fe.dNaN%3A0%3D%3D%3Dthis.layer%26%260%3D%3D%3Dt.layer%3Fm(this.sign%2C0%2CMath.log(this.mag)%2FMath.log(t.mag))%3Ae.div(this.log10()%2Ct.log10())%7D%7D%2C%7Bkey%3A%22log2%22%2Cvalue%3Afunction()%7Breturn%20this.sign%3C%3D0%3Fe.dNaN%3A0%3D%3D%3Dthis.layer%3Fm(this.sign%2C0%2CMath.log2(this.mag))%3A1%3D%3D%3Dthis.layer%3Fm(Math.sign(this.mag)%2C0%2C3.321928094887362*Math.abs(this.mag))%3A2%3D%3D%3Dthis.layer%3Fm(Math.sign(this.mag)%2C1%2CMath.abs(this.mag)%2B.5213902276543247)%3Am(Math.sign(this.mag)%2Cthis.layer-1%2CMath.abs(this.mag))%7D%7D%2C%7Bkey%3A%22ln%22%2Cvalue%3Afunction()%7Breturn%20this.sign%3C%3D0%3Fe.dNaN%3A0%3D%3D%3Dthis.layer%3Fm(this.sign%2C0%2CMath.log(this.mag))%3A1%3D%3D%3Dthis.layer%3Fm(Math.sign(this.mag)%2C0%2C2.302585092994046*Math.abs(this.mag))%3A2%3D%3D%3Dthis.layer%3Fm(Math.sign(this.mag)%2C1%2CMath.abs(this.mag)%2B.36221568869946325)%3Am(Math.sign(this.mag)%2Cthis.layer-1%2CMath.abs(this.mag))%7D%7D%2C%7Bkey%3A%22logarithm%22%2Cvalue%3Afunction(t)%7Breturn%20this.log(t)%7D%7D%2C%7Bkey%3A%22pow%22%2Cvalue%3Afunction(t)%7Bvar%20i%3Dthis%2Cr%3Dl(t)%3Bif(0%3D%3D%3Di.sign)return%20r.eq(0)%3Fg(1%2C0%2C1)%3Ai%3Bif(1%3D%3D%3Di.sign%26%260%3D%3D%3Di.layer%26%261%3D%3D%3Di.mag)return%20i%3Bif(0%3D%3D%3Dr.sign)return%20g(1%2C0%2C1)%3Bif(1%3D%3D%3Dr.sign%26%260%3D%3D%3Dr.layer%26%261%3D%3D%3Dr.mag)return%20i%3Bvar%20n%3Di.absLog10().mul(r).pow10()%3Breturn-1%3D%3D%3Dthis.sign%3FMath.abs(r.toNumber()%252)%252%3D%3D1%3Fn.neg()%3AMath.abs(r.toNumber()%252)%252%3D%3D0%3Fn%3Ae.dNaN%3An%7D%7D%2C%7Bkey%3A%22pow10%22%2Cvalue%3Afunction()%7Bif(!Number.isFinite(this.layer)%7C%7C!Number.isFinite(this.mag))return%20e.dNaN%3Bvar%20t%3Dthis%3Bif(0%3D%3D%3Dt.layer)%7Bvar%20i%3DMath.pow(10%2Ct.sign*t.mag)%3Bif(Number.isFinite(i)%26%26Math.abs(i)%3E%3D.1)return%20m(1%2C0%2Ci)%3Bif(0%3D%3D%3Dt.sign)return%20e.dOne%3Bt%3Dg(t.sign%2Ct.layer%2B1%2CMath.log10(t.mag))%7Dreturn%20t.sign%3E0%26%26t.mag%3E%3D0%3Fm(t.sign%2Ct.layer%2B1%2Ct.mag)%3At.sign%3C0%26%26t.mag%3E%3D0%3Fm(-t.sign%2Ct.layer%2B1%2C-t.mag)%3Ae.dOne%7D%7D%2C%7Bkey%3A%22pow_base%22%2Cvalue%3Afunction(t)%7Breturn%20l(t).pow(this)%7D%7D%2C%7Bkey%3A%22root%22%2Cvalue%3Afunction(t)%7Bvar%20e%3Dl(t)%3Breturn%20this.pow(e.recip())%7D%7D%2C%7Bkey%3A%22factorial%22%2Cvalue%3Afunction()%7Breturn%20this.mag%3C0%7C%7C0%3D%3D%3Dthis.layer%3Fthis.add(1).gamma()%3A1%3D%3D%3Dthis.layer%3Fe.exp(e.mul(this%2Ce.ln(this).sub(1)))%3Ae.exp(this)%7D%7D%2C%7Bkey%3A%22gamma%22%2Cvalue%3Afunction()%7Bif(this.mag%3C0)return%20this.recip()%3Bif(0%3D%3D%3Dthis.layer)%7Bif(this.lt(g(1%2C0%2C24)))return%20e.fromNumber(function(t)%7Bif(!isFinite(t))return%20t%3Bif(t%3C-50)return%20t%3D%3D%3DMath.trunc(t)%3FNumber.NEGATIVE_INFINITY%3A0%3Bfor(var%20e%3D1%3Bt%3C10%3B)e*%3Dt%2C%2B%2Bt%3Bvar%20i%3D.9189385332046727%3Bi%2B%3D((t-%3D1)%2B.5)*Math.log(t)%2Ci-%3Dt%3Bvar%20r%3Dt*t%2Cn%3Dt%3Breturn%20i%2B%3D1%2F(12*n)%2Ci%2B%3D1%2F(360*(n*%3Dr))%2Ci%2B%3D1%2F(1260*(n*%3Dr))%2Ci%2B%3D1%2F(1680*(n*%3Dr))%2Ci%2B%3D1%2F(1188*(n*%3Dr))%2Ci%2B%3D691%2F(360360*(n*%3Dr))%2Ci%2B%3D7%2F(1092*(n*%3Dr))%2Ci%2B%3D3617%2F(122400*(n*%3Dr))%2CMath.exp(i)%2Fe%7D(this.sign*this.mag))%3Bvar%20t%3Dthis.mag-1%2Ci%3D.9189385332046727%3Bi%2B%3D(t%2B.5)*Math.log(t)%3Bvar%20r%3Dt*t%2Cn%3Dt%2Ca%3D12*n%2Cs%3D1%2Fa%2Cu%3D(i-%3Dt)%2Bs%3Bif(u%3D%3D%3Di)return%20e.exp(i)%3Bif((u%3D(i%3Du)-(s%3D1%2F(a%3D360*(n*%3Dr))))%3D%3D%3Di)return%20e.exp(i)%3Bi%3Du%3Bvar%20h%3D1%2F(a%3D1260*(n*%3Dr))%3Breturn%20i%2B%3Dh%2Ci-%3Dh%3D1%2F(a%3D1680*(n*%3Dr))%2Ce.exp(i)%7Dreturn%201%3D%3D%3Dthis.layer%3Fe.exp(e.mul(this%2Ce.ln(this).sub(1)))%3Ae.exp(this)%7D%7D%2C%7Bkey%3A%22lngamma%22%2Cvalue%3Afunction()%7Breturn%20this.gamma().ln()%7D%7D%2C%7Bkey%3A%22exp%22%2Cvalue%3Afunction()%7Breturn%20this.mag%3C0%3Fe.dOne%3A0%3D%3D%3Dthis.layer%26%26this.mag%3C%3D709.7%3Fe.fromNumber(Math.exp(this.sign*this.mag))%3A0%3D%3D%3Dthis.layer%3Fm(1%2C1%2Cthis.sign*Math.log10(Math.E)*this.mag)%3A1%3D%3D%3Dthis.layer%3Fm(1%2C2%2Cthis.sign*(Math.log10(.4342944819032518)%2Bthis.mag))%3Am(1%2Cthis.layer%2B1%2Cthis.sign*this.mag)%7D%7D%2C%7Bkey%3A%22sqr%22%2Cvalue%3Afunction()%7Breturn%20this.pow(2)%7D%7D%2C%7Bkey%3A%22sqrt%22%2Cvalue%3Afunction()%7Bif(0%3D%3D%3Dthis.layer)return%20e.fromNumber(Math.sqrt(this.sign*this.mag))%3Bif(1%3D%3D%3Dthis.layer)return%20m(1%2C2%2CMath.log10(this.mag)-.3010299956639812)%3Bvar%20t%3De.div(g(this.sign%2Cthis.layer-1%2Cthis.mag)%2Cg(1%2C0%2C2))%3Breturn%20t.layer%2B%3D1%2Ct.normalize()%2Ct%7D%7D%2C%7Bkey%3A%22cube%22%2Cvalue%3Afunction()%7Breturn%20this.pow(3)%7D%7D%2C%7Bkey%3A%22cbrt%22%2Cvalue%3Afunction()%7Breturn%20this.pow(1%2F3)%7D%7D%2C%7Bkey%3A%22tetrate%22%2Cvalue%3Afunction()%7Bvar%20t%3Darguments.length%3E0%26%26void%200!%3D%3Darguments%5B0%5D%3Farguments%5B0%5D%3A2%2Ci%3Darguments.length%3E1%26%26void%200!%3D%3Darguments%5B1%5D%3Farguments%5B1%5D%3Ag(1%2C0%2C1)%3Bif(1%3D%3D%3Dt)return%20e.pow(this%2Ci)%3Bif(0%3D%3D%3Dt)return%20new%20e(i)%3Bif(this.eq(e.dOne))return%20e.dOne%3Bif(this.eq(-1))return%20e.pow(this%2Ci)%3Bif(t%3D%3D%3DNumber.POSITIVE_INFINITY)%7Bvar%20r%3Dthis.toNumber()%3Bif(r%3C%3D1.444667861009766%26%26r%3E%3D.06598803584531254)%7Bif(r%3E1.444667861009099)return%20e.fromNumber(Math.E)%3Bvar%20n%3De.ln(this).neg()%3Breturn%20n.lambertw().div(n)%7Dreturn%20r%3E1.444667861009766%3Fe.fromNumber(Number.POSITIVE_INFINITY)%3Ae.dNaN%7Dif(this.eq(e.dZero))%7Bvar%20a%3DMath.abs((t%2B1)%252)%3Breturn%20a%3E1%26%26(a%3D2-a)%2Ce.fromNumber(a)%7Dif(t%3C0)return%20e.iteratedlog(i%2Cthis%2C-t)%3Bi%3Dl(i)%3Bvar%20s%3Dt%2Cu%3Ds-(t%3DMath.trunc(t))%3Bif(this.gt(e.dZero)%26%26this.lte(1.444667861009766))%7Bt%3DMath.min(1e4%2Ct)%3Bfor(var%20h%3D0%3Bh%3Ct%3B%2B%2Bh)%7Bvar%20o%3Di%3Bif(i%3Dthis.pow(i)%2Co.eq(i))return%20i%7Dif(0!%3Du)%7Bvar%20m%3Dthis.pow(i)%3Breturn%20i.mul(1-u).add(m.mul(u))%7Dreturn%20i%7D0!%3D%3Du%26%26(i.eq(e.dOne)%3Fthis.gt(10)%3Fi%3Dthis.pow(u)%3A(i%3De.fromNumber(e.tetrate_critical(this.toNumber()%2Cu))%2Cthis.lt(2)%26%26(i%3Di.sub(1).mul(this.minus(1)).plus(1)))%3Ai%3Dthis.eq(10)%3Fi.layeradd10(u)%3Ai.layeradd(u%2Cthis))%3Bfor(var%20f%3D0%3Bf%3Ct%3B%2B%2Bf)%7Bif(i%3Dthis.pow(i)%2C!isFinite(i.layer)%7C%7C!isFinite(i.mag))return%20i.normalize()%3Bif(i.layer-this.layer%3E3)return%20g(i.sign%2Ci.layer%2B(t-f-1)%2Ci.mag)%3Bif(f%3E1e4)return%20i%7Dreturn%20i%7D%7D%2C%7Bkey%3A%22iteratedexp%22%2Cvalue%3Afunction()%7Bvar%20t%3Darguments.length%3E0%26%26void%200!%3D%3Darguments%5B0%5D%3Farguments%5B0%5D%3A2%2Ce%3Darguments.length%3E1%26%26void%200!%3D%3Darguments%5B1%5D%3Farguments%5B1%5D%3Ag(1%2C0%2C1)%3Breturn%20this.tetrate(t%2Ce)%7D%7D%2C%7Bkey%3A%22iteratedlog%22%2Cvalue%3Afunction()%7Bvar%20t%3Darguments.length%3E0%26%26void%200!%3D%3Darguments%5B0%5D%3Farguments%5B0%5D%3A10%2Ci%3Darguments.length%3E1%26%26void%200!%3D%3Darguments%5B1%5D%3Farguments%5B1%5D%3A1%3Bif(i%3C0)return%20e.tetrate(t%2C-i%2Cthis)%3Bt%3Dl(t)%3Bvar%20r%3De.fromDecimal(this)%2Cn%3Di%2Ca%3Dn-(i%3DMath.trunc(i))%3Bif(r.layer-t.layer%3E3)%7Bvar%20s%3DMath.min(i%2Cr.layer-t.layer-3)%3Bi-%3Ds%2Cr.layer-%3Ds%7Dfor(var%20u%3D0%3Bu%3Ci%3B%2B%2Bu)%7Bif(r%3Dr.log(t)%2C!isFinite(r.layer)%7C%7C!isFinite(r.mag))return%20r.normalize()%3Bif(u%3E1e4)return%20r%7Dreturn%20a%3E0%26%26a%3C1%26%26(r%3Dt.eq(10)%3Fr.layeradd10(-a)%3Ar.layeradd(-a%2Ct))%2Cr%7D%7D%2C%7Bkey%3A%22slog%22%2Cvalue%3Afunction()%7Bfor(var%20t%3Darguments.length%3E0%26%26void%200!%3D%3Darguments%5B0%5D%3Farguments%5B0%5D%3A10%2Ci%3Darguments.length%3E1%26%26void%200!%3D%3Darguments%5B1%5D%3Farguments%5B1%5D%3A100%2Cr%3D.001%2Cn%3D!1%2Ca%3D!1%2Cs%3Dthis.slog_internal(t).toNumber()%2Cu%3D1%3Bu%3Ci%3B%2B%2Bu)%7Bvar%20h%3Dnew%20e(t).tetrate(s)%2Co%3Dh.gt(this)%3Bif(u%3E1%26%26a!%3Do%26%26(n%3D!0)%2Ca%3Do%2Cn%3Fr%2F%3D2%3Ar*%3D2%2Cs%2B%3Dr%3DMath.abs(r)*(o%3F-1%3A1)%2C0%3D%3D%3Dr)break%7Dreturn%20e.fromNumber(s)%7D%7D%2C%7Bkey%3A%22slog_internal%22%2Cvalue%3Afunction()%7Bvar%20t%3Darguments.length%3E0%26%26void%200!%3D%3Darguments%5B0%5D%3Farguments%5B0%5D%3A10%3Bif((t%3Dl(t)).lte(e.dZero))return%20e.dNaN%3Bif(t.eq(e.dOne))return%20e.dNaN%3Bif(t.lt(e.dOne))return%20this.eq(e.dOne)%3Fe.dZero%3Athis.eq(e.dZero)%3Fe.dNegOne%3Ae.dNaN%3Bif(this.mag%3C0%7C%7Cthis.eq(e.dZero))return%20e.dNegOne%3Bvar%20i%3D0%2Cr%3De.fromDecimal(this)%3Bif(r.layer-t.layer%3E3)%7Bvar%20n%3Dr.layer-t.layer-3%3Bi%2B%3Dn%2Cr.layer-%3Dn%7Dfor(var%20a%3D0%3Ba%3C100%3B%2B%2Ba)if(r.lt(e.dZero))r%3De.pow(t%2Cr)%2Ci-%3D1%3Belse%7Bif(r.lte(e.dOne))return%20e.fromNumber(i%2Be.slog_critical(t.toNumber()%2Cr.toNumber()))%3Bi%2B%3D1%2Cr%3De.log(r%2Ct)%7Dreturn%20e.fromNumber(i)%7D%7D%2C%7Bkey%3A%22layeradd10%22%2Cvalue%3Afunction(t)%7Bt%3De.fromValue_noAlloc(t).toNumber()%3Bvar%20i%3De.fromDecimal(this)%3Bif(t%3E%3D1)%7Bi.mag%3C0%26%26i.layer%3E0%3F(i.sign%3D0%2Ci.mag%3D0%2Ci.layer%3D0)%3A-1%3D%3D%3Di.sign%26%260%3D%3Di.layer%26%26(i.sign%3D1%2Ci.mag%3D-i.mag)%3Bvar%20r%3DMath.trunc(t)%3Bt-%3Dr%2Ci.layer%2B%3Dr%7Dif(t%3C%3D-1)%7Bvar%20n%3DMath.trunc(t)%3Bif(t-%3Dn%2Ci.layer%2B%3Dn%2Ci.layer%3C0)for(var%20a%3D0%3Ba%3C100%3B%2B%2Ba)%7Bif(i.layer%2B%2B%2Ci.mag%3DMath.log10(i.mag)%2C!isFinite(i.mag))return%200%3D%3D%3Di.sign%26%26(i.sign%3D1)%2Ci.layer%3C0%26%26(i.layer%3D0)%2Ci.normalize()%3Bif(i.layer%3E%3D0)break%7D%7Dfor(%3Bi.layer%3C0%3B)i.layer%2B%2B%2Ci.mag%3DMath.log10(i.mag)%3Breturn%200%3D%3D%3Di.sign%26%26(i.sign%3D1%2C0%3D%3D%3Di.mag%26%26i.layer%3E%3D1%26%26(i.layer-%3D1%2Ci.mag%3D1))%2Ci.normalize()%2C0!%3D%3Dt%3Fi.layeradd(t%2C10)%3Ai%7D%7D%2C%7Bkey%3A%22layeradd%22%2Cvalue%3Afunction(t%2Ci)%7Bvar%20r%3Dthis.slog(i).toNumber()%2Bt%3Breturn%20r%3E%3D0%3Fe.tetrate(i%2Cr)%3ANumber.isFinite(r)%3Fr%3E%3D-1%3Fe.log(e.tetrate(i%2Cr%2B1)%2Ci)%3Ae.log(e.log(e.tetrate(i%2Cr%2B2)%2Ci)%2Ci)%3Ae.dNaN%7D%7D%2C%7Bkey%3A%22lambertw%22%2Cvalue%3Afunction()%7Bif(this.lt(-.3678794411710499))throw%20Error(%22lambertw%20is%20unimplemented%20for%20results%20less%20than%20-1%2C%20sorry!%22)%3Bif(this.mag%3C0)return%20e.fromNumber(v(this.toNumber()))%3Bif(0%3D%3D%3Dthis.layer)return%20e.fromNumber(v(this.sign*this.mag))%3Bif(1%3D%3D%3Dthis.layer)return%20d(this)%3Bif(2%3D%3D%3Dthis.layer)return%20d(this)%3Bif(this.layer%3E%3D3)return%20g(this.sign%2Cthis.layer-1%2Cthis.mag)%3Bthrow%22Unhandled%20behavior%20in%20lambertw()%22%7D%7D%2C%7Bkey%3A%22ssqrt%22%2Cvalue%3Afunction()%7Bif(1%3D%3Dthis.sign%26%26this.layer%3E%3D3)return%20g(this.sign%2Cthis.layer-1%2Cthis.mag)%3Bvar%20t%3Dthis.ln()%3Breturn%20t.div(t.lambertw())%7D%7D%2C%7Bkey%3A%22pentate%22%2Cvalue%3Afunction()%7Bvar%20t%3Darguments.length%3E0%26%26void%200!%3D%3Darguments%5B0%5D%3Farguments%5B0%5D%3A2%2Ci%3Darguments.length%3E1%26%26void%200!%3D%3Darguments%5B1%5D%3Farguments%5B1%5D%3Ag(1%2C0%2C1)%3Bi%3Dl(i)%3Bvar%20r%3Dt%2Cn%3Dr-(t%3DMath.trunc(t))%3B0!%3D%3Dn%26%26(i.eq(e.dOne)%3F(%2B%2Bt%2Ci%3De.fromNumber(n))%3Ai%3Dthis.eq(10)%3Fi.layeradd10(n)%3Ai.layeradd(n%2Cthis))%3Bfor(var%20a%3D0%3Ba%3Ct%3B%2B%2Ba)%7Bif(i%3Dthis.tetrate(i.toNumber())%2C!isFinite(i.layer)%7C%7C!isFinite(i.mag))return%20i.normalize()%3Bif(a%3E10)return%20i%7Dreturn%20i%7D%7D%2C%7Bkey%3A%22sin%22%2Cvalue%3Afunction()%7Breturn%20this.mag%3C0%3Fthis%3A0%3D%3D%3Dthis.layer%3Fe.fromNumber(Math.sin(this.sign*this.mag))%3Ag(0%2C0%2C0)%7D%7D%2C%7Bkey%3A%22cos%22%2Cvalue%3Afunction()%7Breturn%20this.mag%3C0%3Fe.dOne%3A0%3D%3D%3Dthis.layer%3Fe.fromNumber(Math.cos(this.sign*this.mag))%3Ag(0%2C0%2C0)%7D%7D%2C%7Bkey%3A%22tan%22%2Cvalue%3Afunction()%7Breturn%20this.mag%3C0%3Fthis%3A0%3D%3D%3Dthis.layer%3Fe.fromNumber(Math.tan(this.sign*this.mag))%3Ag(0%2C0%2C0)%7D%7D%2C%7Bkey%3A%22asin%22%2Cvalue%3Afunction()%7Breturn%20this.mag%3C0%3Fthis%3A0%3D%3D%3Dthis.layer%3Fe.fromNumber(Math.asin(this.sign*this.mag))%3Ag(Number.NaN%2CNumber.NaN%2CNumber.NaN)%7D%7D%2C%7Bkey%3A%22acos%22%2Cvalue%3Afunction()%7Breturn%20this.mag%3C0%3Fe.fromNumber(Math.acos(this.toNumber()))%3A0%3D%3D%3Dthis.layer%3Fe.fromNumber(Math.acos(this.sign*this.mag))%3Ag(Number.NaN%2CNumber.NaN%2CNumber.NaN)%7D%7D%2C%7Bkey%3A%22atan%22%2Cvalue%3Afunction()%7Breturn%20this.mag%3C0%3Fthis%3A0%3D%3D%3Dthis.layer%3Fe.fromNumber(Math.atan(this.sign*this.mag))%3Ae.fromNumber(Math.atan(Infinity*this.sign))%7D%7D%2C%7Bkey%3A%22sinh%22%2Cvalue%3Afunction()%7Breturn%20this.exp().sub(this.negate().exp()).div(2)%7D%7D%2C%7Bkey%3A%22cosh%22%2Cvalue%3Afunction()%7Breturn%20this.exp().add(this.negate().exp()).div(2)%7D%7D%2C%7Bkey%3A%22tanh%22%2Cvalue%3Afunction()%7Breturn%20this.sinh().div(this.cosh())%7D%7D%2C%7Bkey%3A%22asinh%22%2Cvalue%3Afunction()%7Breturn%20e.ln(this.add(this.sqr().add(1).sqrt()))%7D%7D%2C%7Bkey%3A%22acosh%22%2Cvalue%3Afunction()%7Breturn%20e.ln(this.add(this.sqr().sub(1).sqrt()))%7D%7D%2C%7Bkey%3A%22atanh%22%2Cvalue%3Afunction()%7Breturn%20this.abs().gte(1)%3Fg(Number.NaN%2CNumber.NaN%2CNumber.NaN)%3Ae.ln(this.add(1).div(e.fromNumber(1).sub(this))).div(2)%7D%7D%2C%7Bkey%3A%22ascensionPenalty%22%2Cvalue%3Afunction(t)%7Breturn%200%3D%3D%3Dt%3Fthis%3Athis.root(e.pow(10%2Ct))%7D%7D%2C%7Bkey%3A%22egg%22%2Cvalue%3Afunction()%7Breturn%20this.add(9)%7D%7D%2C%7Bkey%3A%22lessThanOrEqualTo%22%2Cvalue%3Afunction(t)%7Breturn%20this.cmp(t)%3C1%7D%7D%2C%7Bkey%3A%22lessThan%22%2Cvalue%3Afunction(t)%7Breturn%20this.cmp(t)%3C0%7D%7D%2C%7Bkey%3A%22greaterThanOrEqualTo%22%2Cvalue%3Afunction(t)%7Breturn%20this.cmp(t)%3E-1%7D%7D%2C%7Bkey%3A%22greaterThan%22%2Cvalue%3Afunction(t)%7Breturn%20this.cmp(t)%3E0%7D%7D%5D%2C%5B%7Bkey%3A%22fromComponents%22%2Cvalue%3Afunction(t%2Ci%2Cr)%7Breturn(new%20e).fromComponents(t%2Ci%2Cr)%7D%7D%2C%7Bkey%3A%22fromComponents_noNormalize%22%2Cvalue%3Afunction(t%2Ci%2Cr)%7Breturn(new%20e).fromComponents_noNormalize(t%2Ci%2Cr)%7D%7D%2C%7Bkey%3A%22fromMantissaExponent%22%2Cvalue%3Afunction(t%2Ci)%7Breturn(new%20e).fromMantissaExponent(t%2Ci)%7D%7D%2C%7Bkey%3A%22fromMantissaExponent_noNormalize%22%2Cvalue%3Afunction(t%2Ci)%7Breturn(new%20e).fromMantissaExponent_noNormalize(t%2Ci)%7D%7D%2C%7Bkey%3A%22fromDecimal%22%2Cvalue%3Afunction(t)%7Breturn(new%20e).fromDecimal(t)%7D%7D%2C%7Bkey%3A%22fromNumber%22%2Cvalue%3Afunction(t)%7Breturn(new%20e).fromNumber(t)%7D%7D%2C%7Bkey%3A%22fromString%22%2Cvalue%3Afunction(t)%7Breturn(new%20e).fromString(t)%7D%7D%2C%7Bkey%3A%22fromValue%22%2Cvalue%3Afunction(t)%7Breturn(new%20e).fromValue(t)%7D%7D%2C%7Bkey%3A%22fromValue_noAlloc%22%2Cvalue%3Afunction(t)%7Bif(t%20instanceof%20e)return%20t%3Bif(%22string%22%3D%3Dtypeof%20t)%7Bvar%20i%3De.fromStringCache.get(t)%3Breturn%20void%200!%3D%3Di%3Fi%3Ae.fromString(t)%7Dreturn%22number%22%3D%3Dtypeof%20t%3Fe.fromNumber(t)%3Ae.dZero%7D%7D%2C%7Bkey%3A%22abs%22%2Cvalue%3Afunction(t)%7Breturn%20l(t).abs()%7D%7D%2C%7Bkey%3A%22neg%22%2Cvalue%3Afunction(t)%7Breturn%20l(t).neg()%7D%7D%2C%7Bkey%3A%22negate%22%2Cvalue%3Afunction(t)%7Breturn%20l(t).neg()%7D%7D%2C%7Bkey%3A%22negated%22%2Cvalue%3Afunction(t)%7Breturn%20l(t).neg()%7D%7D%2C%7Bkey%3A%22sign%22%2Cvalue%3Afunction(t)%7Breturn%20l(t).sign%7D%7D%2C%7Bkey%3A%22sgn%22%2Cvalue%3Afunction(t)%7Breturn%20l(t).sign%7D%7D%2C%7Bkey%3A%22round%22%2Cvalue%3Afunction(t)%7Breturn%20l(t).round()%7D%7D%2C%7Bkey%3A%22floor%22%2Cvalue%3Afunction(t)%7Breturn%20l(t).floor()%7D%7D%2C%7Bkey%3A%22ceil%22%2Cvalue%3Afunction(t)%7Breturn%20l(t).ceil()%7D%7D%2C%7Bkey%3A%22trunc%22%2Cvalue%3Afunction(t)%7Breturn%20l(t).trunc()%7D%7D%2C%7Bkey%3A%22add%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20l(t).add(e)%7D%7D%2C%7Bkey%3A%22plus%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20l(t).add(e)%7D%7D%2C%7Bkey%3A%22sub%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20l(t).sub(e)%7D%7D%2C%7Bkey%3A%22subtract%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20l(t).sub(e)%7D%7D%2C%7Bkey%3A%22minus%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20l(t).sub(e)%7D%7D%2C%7Bkey%3A%22mul%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20l(t).mul(e)%7D%7D%2C%7Bkey%3A%22multiply%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20l(t).mul(e)%7D%7D%2C%7Bkey%3A%22times%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20l(t).mul(e)%7D%7D%2C%7Bkey%3A%22div%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20l(t).div(e)%7D%7D%2C%7Bkey%3A%22divide%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20l(t).div(e)%7D%7D%2C%7Bkey%3A%22recip%22%2Cvalue%3Afunction(t)%7Breturn%20l(t).recip()%7D%7D%2C%7Bkey%3A%22reciprocal%22%2Cvalue%3Afunction(t)%7Breturn%20l(t).recip()%7D%7D%2C%7Bkey%3A%22reciprocate%22%2Cvalue%3Afunction(t)%7Breturn%20l(t).reciprocate()%7D%7D%2C%7Bkey%3A%22cmp%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20l(t).cmp(e)%7D%7D%2C%7Bkey%3A%22cmpabs%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20l(t).cmpabs(e)%7D%7D%2C%7Bkey%3A%22compare%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20l(t).cmp(e)%7D%7D%2C%7Bkey%3A%22isNaN%22%2Cvalue%3Afunction(t)%7Bfunction%20e(e)%7Breturn%20t.apply(this%2Carguments)%7Dreturn%20e.toString%3Dfunction()%7Breturn%20t.toString()%7D%2Ce%7D((function(t)%7Breturn%20t%3Dl(t)%2CisNaN(t.sign)%7C%7CisNaN(t.layer)%7C%7CisNaN(t.mag)%7D))%7D%2C%7Bkey%3A%22isFinite%22%2Cvalue%3Afunction(t)%7Bfunction%20e(e)%7Breturn%20t.apply(this%2Carguments)%7Dreturn%20e.toString%3Dfunction()%7Breturn%20t.toString()%7D%2Ce%7D((function(t)%7Breturn%20t%3Dl(t)%2CisFinite(t.sign)%26%26isFinite(t.layer)%26%26isFinite(t.mag)%7D))%7D%2C%7Bkey%3A%22eq%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20l(t).eq(e)%7D%7D%2C%7Bkey%3A%22equals%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20l(t).eq(e)%7D%7D%2C%7Bkey%3A%22neq%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20l(t).neq(e)%7D%7D%2C%7Bkey%3A%22notEquals%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20l(t).notEquals(e)%7D%7D%2C%7Bkey%3A%22lt%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20l(t).lt(e)%7D%7D%2C%7Bkey%3A%22lte%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20l(t).lte(e)%7D%7D%2C%7Bkey%3A%22gt%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20l(t).gt(e)%7D%7D%2C%7Bkey%3A%22gte%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20l(t).gte(e)%7D%7D%2C%7Bkey%3A%22max%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20l(t).max(e)%7D%7D%2C%7Bkey%3A%22min%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20l(t).min(e)%7D%7D%2C%7Bkey%3A%22minabs%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20l(t).minabs(e)%7D%7D%2C%7Bkey%3A%22maxabs%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20l(t).maxabs(e)%7D%7D%2C%7Bkey%3A%22clamp%22%2Cvalue%3Afunction(t%2Ce%2Ci)%7Breturn%20l(t).clamp(e%2Ci)%7D%7D%2C%7Bkey%3A%22clampMin%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20l(t).clampMin(e)%7D%7D%2C%7Bkey%3A%22clampMax%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20l(t).clampMax(e)%7D%7D%2C%7Bkey%3A%22cmp_tolerance%22%2Cvalue%3Afunction(t%2Ce%2Ci)%7Breturn%20l(t).cmp_tolerance(e%2Ci)%7D%7D%2C%7Bkey%3A%22compare_tolerance%22%2Cvalue%3Afunction(t%2Ce%2Ci)%7Breturn%20l(t).cmp_tolerance(e%2Ci)%7D%7D%2C%7Bkey%3A%22eq_tolerance%22%2Cvalue%3Afunction(t%2Ce%2Ci)%7Breturn%20l(t).eq_tolerance(e%2Ci)%7D%7D%2C%7Bkey%3A%22equals_tolerance%22%2Cvalue%3Afunction(t%2Ce%2Ci)%7Breturn%20l(t).eq_tolerance(e%2Ci)%7D%7D%2C%7Bkey%3A%22neq_tolerance%22%2Cvalue%3Afunction(t%2Ce%2Ci)%7Breturn%20l(t).neq_tolerance(e%2Ci)%7D%7D%2C%7Bkey%3A%22notEquals_tolerance%22%2Cvalue%3Afunction(t%2Ce%2Ci)%7Breturn%20l(t).notEquals_tolerance(e%2Ci)%7D%7D%2C%7Bkey%3A%22lt_tolerance%22%2Cvalue%3Afunction(t%2Ce%2Ci)%7Breturn%20l(t).lt_tolerance(e%2Ci)%7D%7D%2C%7Bkey%3A%22lte_tolerance%22%2Cvalue%3Afunction(t%2Ce%2Ci)%7Breturn%20l(t).lte_tolerance(e%2Ci)%7D%7D%2C%7Bkey%3A%22gt_tolerance%22%2Cvalue%3Afunction(t%2Ce%2Ci)%7Breturn%20l(t).gt_tolerance(e%2Ci)%7D%7D%2C%7Bkey%3A%22gte_tolerance%22%2Cvalue%3Afunction(t%2Ce%2Ci)%7Breturn%20l(t).gte_tolerance(e%2Ci)%7D%7D%2C%7Bkey%3A%22pLog10%22%2Cvalue%3Afunction(t)%7Breturn%20l(t).pLog10()%7D%7D%2C%7Bkey%3A%22absLog10%22%2Cvalue%3Afunction(t)%7Breturn%20l(t).absLog10()%7D%7D%2C%7Bkey%3A%22log10%22%2Cvalue%3Afunction(t)%7Breturn%20l(t).log10()%7D%7D%2C%7Bkey%3A%22log%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20l(t).log(e)%7D%7D%2C%7Bkey%3A%22log2%22%2Cvalue%3Afunction(t)%7Breturn%20l(t).log2()%7D%7D%2C%7Bkey%3A%22ln%22%2Cvalue%3Afunction(t)%7Breturn%20l(t).ln()%7D%7D%2C%7Bkey%3A%22logarithm%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20l(t).logarithm(e)%7D%7D%2C%7Bkey%3A%22pow%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20l(t).pow(e)%7D%7D%2C%7Bkey%3A%22pow10%22%2Cvalue%3Afunction(t)%7Breturn%20l(t).pow10()%7D%7D%2C%7Bkey%3A%22root%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20l(t).root(e)%7D%7D%2C%7Bkey%3A%22factorial%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20l(t).factorial()%7D%7D%2C%7Bkey%3A%22gamma%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20l(t).gamma()%7D%7D%2C%7Bkey%3A%22lngamma%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20l(t).lngamma()%7D%7D%2C%7Bkey%3A%22exp%22%2Cvalue%3Afunction(t)%7Breturn%20l(t).exp()%7D%7D%2C%7Bkey%3A%22sqr%22%2Cvalue%3Afunction(t)%7Breturn%20l(t).sqr()%7D%7D%2C%7Bkey%3A%22sqrt%22%2Cvalue%3Afunction(t)%7Breturn%20l(t).sqrt()%7D%7D%2C%7Bkey%3A%22cube%22%2Cvalue%3Afunction(t)%7Breturn%20l(t).cube()%7D%7D%2C%7Bkey%3A%22cbrt%22%2Cvalue%3Afunction(t)%7Breturn%20l(t).cbrt()%7D%7D%2C%7Bkey%3A%22tetrate%22%2Cvalue%3Afunction(t)%7Bvar%20e%3Darguments.length%3E1%26%26void%200!%3D%3Darguments%5B1%5D%3Farguments%5B1%5D%3A2%2Ci%3Darguments.length%3E2%26%26void%200!%3D%3Darguments%5B2%5D%3Farguments%5B2%5D%3Ag(1%2C0%2C1)%3Breturn%20l(t).tetrate(e%2Ci)%7D%7D%2C%7Bkey%3A%22iteratedexp%22%2Cvalue%3Afunction(t)%7Bvar%20e%3Darguments.length%3E1%26%26void%200!%3D%3Darguments%5B1%5D%3Farguments%5B1%5D%3A2%2Ci%3Darguments.length%3E2%26%26void%200!%3D%3Darguments%5B2%5D%3Farguments%5B2%5D%3Ag(1%2C0%2C1)%3Breturn%20l(t).iteratedexp(e%2Ci)%7D%7D%2C%7Bkey%3A%22iteratedlog%22%2Cvalue%3Afunction(t)%7Bvar%20e%3Darguments.length%3E1%26%26void%200!%3D%3Darguments%5B1%5D%3Farguments%5B1%5D%3A10%2Ci%3Darguments.length%3E2%26%26void%200!%3D%3Darguments%5B2%5D%3Farguments%5B2%5D%3A1%3Breturn%20l(t).iteratedlog(e%2Ci)%7D%7D%2C%7Bkey%3A%22layeradd10%22%2Cvalue%3Afunction(t%2Ce)%7Breturn%20l(t).layeradd10(e)%7D%7D%2C%7Bkey%3A%22layeradd%22%2Cvalue%3Afunction(t%2Ce)%7Bvar%20i%3Darguments.length%3E2%26%26void%200!%3D%3Darguments%5B2%5D%3Farguments%5B2%5D%3A10%3Breturn%20l(t).layeradd(e%2Ci)%7D%7D%2C%7Bkey%3A%22slog%22%2Cvalue%3Afunction(t)%7Bvar%20e%3Darguments.length%3E1%26%26void%200!%3D%3Darguments%5B1%5D%3Farguments%5B1%5D%3A10%3Breturn%20l(t).slog(e)%7D%7D%2C%7Bkey%3A%22lambertw%22%2Cvalue%3Afunction(t)%7Breturn%20l(t).lambertw()%7D%7D%2C%7Bkey%3A%22ssqrt%22%2Cvalue%3Afunction(t)%7Breturn%20l(t).ssqrt()%7D%7D%2C%7Bkey%3A%22pentate%22%2Cvalue%3Afunction(t)%7Bvar%20e%3Darguments.length%3E1%26%26void%200!%3D%3Darguments%5B1%5D%3Farguments%5B1%5D%3A2%2Ci%3Darguments.length%3E2%26%26void%200!%3D%3Darguments%5B2%5D%3Farguments%5B2%5D%3Ag(1%2C0%2C1)%3Breturn%20l(t).pentate(e%2Ci)%7D%7D%2C%7Bkey%3A%22affordGeometricSeries%22%2Cvalue%3Afunction(t%2Ce%2Ci%2Cr)%7Breturn%20this.affordGeometricSeries_core(l(t)%2Cl(e)%2Cl(i)%2Cr)%7D%7D%2C%7Bkey%3A%22sumGeometricSeries%22%2Cvalue%3Afunction(t%2Ce%2Ci%2Cr)%7Breturn%20this.sumGeometricSeries_core(t%2Cl(e)%2Cl(i)%2Cr)%7D%7D%2C%7Bkey%3A%22affordArithmeticSeries%22%2Cvalue%3Afunction(t%2Ce%2Ci%2Cr)%7Breturn%20this.affordArithmeticSeries_core(l(t)%2Cl(e)%2Cl(i)%2Cl(r))%7D%7D%2C%7Bkey%3A%22sumArithmeticSeries%22%2Cvalue%3Afunction(t%2Ce%2Ci%2Cr)%7Breturn%20this.sumArithmeticSeries_core(l(t)%2Cl(e)%2Cl(i)%2Cl(r))%7D%7D%2C%7Bkey%3A%22efficiencyOfPurchase%22%2Cvalue%3Afunction(t%2Ce%2Ci)%7Breturn%20this.efficiencyOfPurchase_core(l(t)%2Cl(e)%2Cl(i))%7D%7D%2C%7Bkey%3A%22randomDecimalForTesting%22%2Cvalue%3Afunction(t)%7Bif(20*Math.random()%3C1)return%20g(0%2C0%2C0)%3Bvar%20e%3DMath.random()%3E.5%3F1%3A-1%3Bif(20*Math.random()%3C1)return%20g(e%2C0%2C1)%3Bvar%20i%3DMath.floor(Math.random()*(t%2B1))%2Cr%3D0%3D%3D%3Di%3F616*Math.random()-308%3A16*Math.random()%3BMath.random()%3E.9%26%26(r%3DMath.trunc(r))%3Bvar%20n%3DMath.pow(10%2Cr)%3Breturn%20Math.random()%3E.9%26%26(n%3DMath.trunc(n))%2Cm(e%2Ci%2Cn)%7D%7D%2C%7Bkey%3A%22affordGeometricSeries_core%22%2Cvalue%3Afunction(t%2Ci%2Cr%2Cn)%7Bvar%20a%3Di.mul(r.pow(n))%3Breturn%20e.floor(t.div(a).mul(r.sub(1)).add(1).log10().div(r.log10()))%7D%7D%2C%7Bkey%3A%22sumGeometricSeries_core%22%2Cvalue%3Afunction(t%2Ci%2Cr%2Cn)%7Breturn%20i.mul(r.pow(n)).mul(e.sub(1%2Cr.pow(t))).div(e.sub(1%2Cr))%7D%7D%2C%7Bkey%3A%22affordArithmeticSeries_core%22%2Cvalue%3Afunction(t%2Ce%2Ci%2Cr)%7Bvar%20n%3De.add(r.mul(i)).sub(i.div(2))%2Ca%3Dn.pow(2)%3Breturn%20n.neg().add(a.add(i.mul(t).mul(2)).sqrt()).div(i).floor()%7D%7D%2C%7Bkey%3A%22sumArithmeticSeries_core%22%2Cvalue%3Afunction(t%2Ce%2Ci%2Cr)%7Bvar%20n%3De.add(r.mul(i))%3Breturn%20t.div(2).mul(n.mul(2).plus(t.sub(1).mul(i)))%7D%7D%2C%7Bkey%3A%22efficiencyOfPurchase_core%22%2Cvalue%3Afunction(t%2Ce%2Ci)%7Breturn%20t.div(e).add(t.div(i))%7D%7D%2C%7Bkey%3A%22slog_critical%22%2Cvalue%3Afunction(t%2Ci)%7Breturn%20t%3E10%3Fi-1%3Ae.critical_section(t%2Ci%2Co)%7D%7D%2C%7Bkey%3A%22tetrate_critical%22%2Cvalue%3Afunction(t%2Ci)%7Breturn%20e.critical_section(t%2Ci%2Ch)%7D%7D%2C%7Bkey%3A%22critical_section%22%2Cvalue%3Afunction(t%2Ce%2Ci)%7B(e*%3D10)%3C0%26%26(e%3D0)%2Ce%3E10%26%26(e%3D10)%2Ct%3C2%26%26(t%3D2)%2Ct%3E10%26%26(t%3D10)%3Bfor(var%20r%3D0%2Cn%3D0%2Ca%3D0%3Ba%3Cu.length%3B%2B%2Ba)%7Bif(u%5Ba%5D%3D%3Dt)%7Br%3Di%5Ba%5D%5BMath.floor(e)%5D%2Cn%3Di%5Ba%5D%5BMath.ceil(e)%5D%3Bbreak%7Dif(u%5Ba%5D%3Ct%26%26u%5Ba%2B1%5D%3Et)%7Bvar%20s%3D(t-u%5Ba%5D)%2F(u%5Ba%2B1%5D-u%5Ba%5D)%3Br%3Di%5Ba%5D%5BMath.floor(e)%5D*(1-s)%2Bi%5Ba%2B1%5D%5BMath.floor(e)%5D*s%2Cn%3Di%5Ba%5D%5BMath.ceil(e)%5D*(1-s)%2Bi%5Ba%2B1%5D%5BMath.ceil(e)%5D*s%3Bbreak%7D%7Dvar%20h%3De-Math.floor(e)%3Breturn%20r%3C%3D0%7C%7Cn%3C%3D0%3Fr*(1-h)%2Bn*h%3AMath.pow(t%2CMath.log(r)%2FMath.log(t)*(1-h)%2BMath.log(n)%2FMath.log(t)*h)%7D%7D%5D)%2Ce%7D()%3Breturn%20k.dZero%3Dg(0%2C0%2C0)%2Ck.dOne%3Dg(1%2C0%2C1)%2Ck.dNegOne%3Dg(-1%2C0%2C1)%2Ck.dTwo%3Dg(1%2C0%2C2)%2Ck.dTen%3Dg(1%2C0%2C10)%2Ck.dNaN%3Dg(Number.NaN%2CNumber.NaN%2CNumber.NaN)%2Ck.dInf%3Dg(1%2CNumber.POSITIVE_INFINITY%2CNumber.POSITIVE_INFINITY)%2Ck.dNegInf%3Dg(-1%2CNumber.NEGATIVE_INFINITY%2CNumber.NEGATIVE_INFINITY)%2Ck.dNumberMax%3Dm(1%2C0%2CNumber.MAX_VALUE)%2Ck.dNumberMin%3Dm(1%2C0%2CNumber.MIN_VALUE)%2Ck.fromStringCache%3Dnew%20r(1023)%2Cl%3Dk.fromValue_noAlloc%2Cm%3Dk.fromComponents%2Cg%3Dk.fromComponents_noNormalize%2Ck.fromMantissaExponent%2Ck.fromMantissaExponent_noNormalize%2Ck%7D))%3B%0A%0Aconst%20ROUND_FUNCTIONS%20%3D%20%7B%0A%20%20'round'%3A%20Decimal.round%2C%20%0A%20%20'floor'%3A%20Decimal.floor%2C%0A%20%20'ceil'%3A%20Decimal.ceil%2C%0A%20%20'trunc'%3A%20Decimal.trunc%0A%7D%3B%0A%0Aconst%20MATHS_FUNCTIONS%20%3D%20%7B%0A%20%20%22abs%22%3A%20Decimal.abs%2C%0A%20%20%22neg%22%3A%20Decimal.neg%2C%0A%20%20%22ln%22%3A%20Decimal.ln%2C%0A%20%20%22e%5E%22%3A%20Decimal.exp%2C%0A%20%20%22sqrt%22%3A%20Decimal.sqrt%2C%0A%20%20%22ssqrt%22%3A%20Decimal.ssqrt%2C%0A%20%20%22gamma%22%3A%20Decimal.gamma%2C%0A%20%20%22factorial%22%3A%20Decimal.factorial%2C%0A%7D%0A%0Aconst%20LOG_FUNCTIONS%20%3D%20%7B%0A%20%20%22log%22%3A%20Decimal.log%2C%0A%20%20%22slog%22%3A%20Decimal.slog%2C%0A%7D%0A%0Afunction%20toDecimal(value)%0A%7B%0A%20%20try%0A%20%20%7B%0A%20%20%20%20return%20new%20Decimal(value)%0A%20%20%7D%0A%20%20catch%20(error)%0A%20%20%7B%0A%20%20%20%20return%20new%20Decimal(0)%0A%20%20%7D%0A%7D%0A%0Aclass%20BreakInfinity%20%7B%0A%20%20getInfo()%20%0A%20%20%7B%0A%20%20%20%20return%20%7B%0A%20%20%20%20%20%20id%3A%20'breaketernity'%2C%0A%20%20%20%20%20%20name%3A%20'Break%20Eternity'%2C%0A%20%20%20%20%20%20color1%3A%20'%23c4b513'%2C%20%0A%20%20%20%20%20%20color2%3A%20'%23545023'%2C%0A%20%20%20%20%20%20color3%3A%20'%23545023'%2C%0A%20%20%20%20%20%20blocks%3A%20%5B%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20opcode%3A%20'add'%2C%0A%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%20text%3A%20'%5Bnum1%5D%20%2B%20%5Bnum2%5D'%2C%0A%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%20num1%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%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%20%20num2%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%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%7D%2C%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20opcode%3A%20'sub'%2C%0A%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%20text%3A%20'%5Bnum1%5D%20-%20%5Bnum2%5D'%2C%0A%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%20num1%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%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%20%20num2%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%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%7D%2C%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20opcode%3A%20'mul'%2C%0A%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%20text%3A%20'%5Bnum1%5D%20*%20%5Bnum2%5D'%2C%0A%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%20num1%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%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%20%20num2%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%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%7D%2C%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20opcode%3A%20'div'%2C%0A%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%20text%3A%20'%5Bnum1%5D%20%2F%20%5Bnum2%5D'%2C%0A%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%20num1%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%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%20%20num2%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%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%7D%2C%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20opcode%3A%20'pow'%2C%0A%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%20text%3A%20'%5Bnum1%5D%20%5E%20%5Bnum2%5D'%2C%0A%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%20num1%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%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%20%20num2%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%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%7D%2C%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20opcode%3A%20'tet'%2C%0A%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%20text%3A%20'%5Bnum1%5D%20%E2%86%91%E2%86%91%20%5Bnum2%5D'%2C%0A%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%20num1%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%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%20%20num2%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%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%7D%2C%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20opcode%3A%20'pent'%2C%0A%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%20text%3A%20'%5Bnum1%5D%20%E2%86%91%E2%86%91%E2%86%91%20%5Bnum2%5D'%2C%0A%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%20num1%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%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%20%20num2%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%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%7D%2C%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20opcode%3A%20'root'%2C%0A%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%20text%3A%20'%5Broot%5Droot%20%5Bnum%5D'%2C%0A%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%20root%3A%20%7B%0A%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%20defaultValue%3A%202%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%20%20num%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%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%7D%2C%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20opcode%3A%20'log'%2C%0A%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%20text%3A%20'%5Bbase%5D%20%5Bfunction%5D%20of%20%5Bnum%5D'%2C%0A%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%20base%3A%20%7B%0A%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%20defaultValue%3A%2010%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%20%20num%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%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%20%20function%3A%20%7B%0A%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%20menu%3A%20'LOG'%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%7D%2C%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20opcode%3A%20'round'%2C%0A%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%20text%3A%20'%20%5Bround%5D%20of%20%5Bnum%5D%20'%2C%0A%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%20num%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%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%20%20round%3A%20%7B%0A%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%20menu%3A%20'ROUND'%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%7D%2C%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20opcode%3A%20'maths'%2C%0A%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%20text%3A%20'%20%5Bfunction%5D%20of%20%5Bnum%5D%20'%2C%0A%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%20num%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%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%20%20function%3A%20%7B%0A%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%20menu%3A%20'MATHS_FUNCTIONS'%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%7D%2C%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20opcode%3A%20'gt'%2C%0A%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%20text%3A%20'%5Bnum1%5D%20%3E%20%5Bnum2%5D'%2C%0A%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%20num1%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%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%20%20num2%3A%20%7B%0A%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%20defaultValue%3A%2050%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%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%20opcode%3A%20'gte'%2C%0A%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%20text%3A%20'%5Bnum1%5D%20%3E%3D%20%5Bnum2%5D'%2C%0A%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%20num1%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%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%20%20num2%3A%20%7B%0A%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%20defaultValue%3A%2050%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%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%20opcode%3A%20'lt'%2C%0A%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%20text%3A%20'%5Bnum1%5D%20%3C%20%5Bnum2%5D'%2C%0A%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%20num1%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%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%20%20num2%3A%20%7B%0A%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%20defaultValue%3A%2050%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%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%20opcode%3A%20'lte'%2C%0A%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%20text%3A%20'%5Bnum1%5D%20%3C%3D%20%5Bnum2%5D'%2C%0A%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%20num1%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%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%20%20num2%3A%20%7B%0A%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%20defaultValue%3A%2050%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%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%2C%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20opcode%3A%20'eq'%2C%0A%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%20text%3A%20'%5Bnum1%5D%20%3D%20%5Bnum2%5D'%2C%0A%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%20num1%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%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%20%20num2%3A%20%7B%0A%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%20defaultValue%3A%2050%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%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20menus%3A%20%7B%0A%20%20%20%20%20%20%20%20ROUND%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20acceptReporters%3A%20false%2C%0A%20%20%20%20%20%20%20%20%20%20items%3A%20%20Object.keys(ROUND_FUNCTIONS)%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20MATHS_FUNCTIONS%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20acceptReporters%3A%20false%2C%0A%20%20%20%20%20%20%20%20%20%20items%3A%20Object.keys(MATHS_FUNCTIONS)%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20LOG%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20acceptReporters%3A%20false%2C%0A%20%20%20%20%20%20%20%20%20%20items%3A%20Object.keys(LOG_FUNCTIONS)%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%3B%0A%20%20%7D%0A%0A%20%20%23proformNumOperation(args%2C%20operation)%20%0A%20%20%7B%0A%20%20%20%20return%20this.%23proformOperation(args%2C%20operation).toString()%3B%0A%20%20%7D%0A%0A%20%20%23proformOperation(args%2C%20operation)%0A%20%20%7B%0A%20%20%20%20const%20num1%20%3D%20toDecimal(args.num1)%3B%0A%20%20%20%20const%20num2%20%3D%20toDecimal(args.num2)%3B%0A%20%20%20%20return%20operation(num1%2C%20num2)%3B%0A%20%20%7D%0A%0A%20%20add(args)%20%0A%20%20%7B%0A%20%20%20%20return%20this.%23proformNumOperation(args%2C%20Decimal.add)%3B%0A%20%20%7D%0A%0A%20%20sub(args)%20%0A%20%20%7B%0A%20%20%20%20return%20this.%23proformNumOperation(args%2C%20Decimal.sub)%3B%0A%20%20%7D%0A%0A%20%20mul(args)%20%0A%20%20%7B%0A%20%20%20%20return%20this.%23proformNumOperation(args%2C%20Decimal.mul)%3B%0A%20%20%7D%0A%0A%20%20div(args)%20%0A%20%20%7B%0A%20%20%20%20return%20this.%23proformNumOperation(args%2C%20Decimal.div)%3B%0A%20%20%7D%0A%0A%20%20pow(args)%20%0A%20%20%7B%0A%20%20%20%20return%20this.%23proformNumOperation(args%2C%20Decimal.pow)%3B%0A%20%20%7D%0A%0A%20%20tet(args)%20%0A%20%20%7B%0A%20%20%20%20return%20this.%23proformNumOperation(args%2C%20Decimal.tetrate)%3B%0A%20%20%7D%0A%0A%20%20pent(args)%20%0A%20%20%7B%0A%20%20%20%20return%20this.%23proformNumOperation(args%2C%20Decimal.pentate)%3B%0A%20%20%7D%0A%0A%0A%20%20round(args)%20%0A%20%20%7B%0A%20%20%20%20const%20num%20%3D%20toDecimal(args.num)%3B%0A%20%20%20%20const%20_function%20%3D%20ROUND_FUNCTIONS%5Bargs.round%5D%3B%0A%20%20%20%20return%20_function(num).toString()%3B%0A%20%20%7D%0A%0A%20%20gt(args)%0A%20%20%7B%0A%20%20%20%20return%20this.%23proformOperation(args%2C%20Decimal.gt)%3B%0A%20%20%7D%0A%0A%20%20gte(args)%0A%20%20%7B%0A%20%20%20%20return%20this.%23proformOperation(args%2C%20Decimal.gte)%3B%0A%20%20%7D%0A%0A%20%20lt(args)%20%0A%20%20%7B%0A%20%20%20%20return%20this.%23proformOperation(args%2C%20Decimal.lt)%3B%0A%20%20%7D%0A%0A%20%20lte(args)%20%0A%20%20%7B%0A%20%20%20%20return%20this.%23proformOperation(args%2C%20Decimal.lte)%3B%0A%20%20%7D%0A%0A%20%20eq(args)%20%0A%20%20%7B%0A%20%20%20%20return%20this.%23proformOperation(args%2C%20Decimal.eq)%3B%0A%20%20%7D%0A%0A%20%20maths(args)%20%0A%20%20%7B%0A%20%20%20%20const%20num%20%3D%20toDecimal(args.num)%3B%0A%20%20%20%20const%20_function%20%3D%20MATHS_FUNCTIONS%5Bargs.function%5D%3B%0A%20%20%20%20return%20_function(num).toString()%3B%0A%20%20%7D%0A%0A%20%20root(args)%20%0A%20%20%7B%0A%20%20%20%20return%20this.%23proformNumOperation(%7Bnum1%3A%20args.num%2C%20num2%3A%20args.root%7D%2C%20Decimal.root)%3B%0A%20%20%7D%0A%0A%20%20log(args)%20%0A%20%20%7B%0A%20%20%20%20return%20this.%23proformNumOperation(%7Bnum1%3A%20args.num%2C%20num2%3A%20args.base%7D%2C%20LOG_FUNCTIONS%5Bargs.function%5D)%3B%0A%20%20%7D%0A%7D%0A%0AScratch.extensions.register(new%20BreakInfinity())%3B","data:application/javascript,(function(Scratch)%20%7B%0A%20%20'use%20strict'%3B%0A%0A%20%20const%20stringArg%20%3D%20Scratch.ArgumentType.STRING%3B%0A%20%20const%20numberArg%20%3D%20Scratch.ArgumentType.NUMBER%3B%0A%20%20const%20reporterBlock%20%3D%20Scratch.BlockType.REPORTER%3B%0A%0A%20%20class%20TextSplitter%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'textsplitter'%2C%0A%20%20%20%20%20%20%20%20name%3A%20'Text%20Splitter'%2C%0A%20%20%20%20%20%20%20%20color1%3A%20'%23FF6347'%2C%0A%20%20%20%20%20%20%20%20color2%3A%20'%23FF4500'%2C%0A%20%20%20%20%20%20%20%20color3%3A%20'%23FFA07A'%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'splitText'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20reporterBlock%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'%D0%A0%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D1%8C%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%20%5BTEXT%5D%20%D0%BD%D0%BE%D0%BC%D0%B5%D1%80%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%20%5BINDEX%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%7Btype%3A%20stringArg%2C%20defaultValue%3A%20'3%2C%204%2C%2046%2C%20qrcode%2C%201e385'%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20INDEX%3A%20%7Btype%3A%20numberArg%2C%20defaultValue%3A%203%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%0A%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F%20%D0%B4%D0%BB%D1%8F%20%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%B0%20%D0%BD%D0%B0%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B%20%D0%B8%20%D0%B2%D0%BE%D0%B7%D0%B2%D1%80%D0%B0%D1%82%D0%B0%20%D0%BA%D0%BE%D0%BD%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B3%D0%BE%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%20%D0%BF%D0%BE%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%83%0A%20%20%20%20splitText(%7BTEXT%2C%20INDEX%7D)%20%7B%0A%20%20%20%20%20%20const%20elements%20%3D%20TEXT.split('%2C%20')%3B%20%2F%2F%20%D0%A0%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D1%8F%D0%B5%D0%BC%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D1%83%20%D0%BF%D0%BE%20%D0%B7%D0%B0%D0%BF%D1%8F%D1%82%D0%BE%D0%B9%20%D0%B8%20%D0%BF%D1%80%D0%BE%D0%B1%D0%B5%D0%BB%D1%83%0A%20%20%20%20%20%20const%20index%20%3D%20INDEX%20-%201%3B%20%2F%2F%20%D0%9F%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D1%83%D0%B5%D0%BC%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%D0%B2%200-%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D0%B0%D1%86%D0%B8%D1%8E%0A%20%20%20%20%20%20if%20(index%20%3E%3D%200%20%26%26%20index%20%3C%20elements.length)%20%7B%0A%20%20%20%20%20%20%20%20return%20elements%5Bindex%5D%3B%20%2F%2F%20%D0%92%D0%BE%D0%B7%D0%B2%D1%80%D0%B0%D1%89%D0%B0%D0%B5%D0%BC%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%20%D0%BF%D0%BE%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%83%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20return%20%60%D0%AD%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%20%24%7BINDEX%7D%20%D0%BD%D0%B5%20%D0%BD%D0%B0%D0%B9%D0%B4%D0%B5%D0%BD%60%3B%20%2F%2F%20%D0%95%D1%81%D0%BB%D0%B8%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%D0%B2%D0%BD%D0%B5%20%D0%B4%D0%B8%D0%B0%D0%BF%D0%B0%D0%B7%D0%BE%D0%BD%D0%B0%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20%2F%2F%20%D0%A0%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F%20%D1%80%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%B8%D1%8F%0A%20%20Scratch.extensions.register(new%20TextSplitter())%3B%0A%7D)(Scratch)%3B","data:application/javascript,(function(Scratch)%20%7B%0A%20%20'use%20strict'%3B%0A%0A%20%20const%20stringArg%20%3D%20Scratch.ArgumentType.STRING%3B%0A%20%20const%20numberArg%20%3D%20Scratch.ArgumentType.NUMBER%3B%0A%20%20const%20reporterBlock%20%3D%20Scratch.BlockType.REPORTER%3B%0A%0A%20%20class%20ElementReplacer%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'elementreplacer'%2C%0A%20%20%20%20%20%20%20%20name%3A%20'Element%20Replacer'%2C%0A%20%20%20%20%20%20%20%20color1%3A%20'%2332CD32'%2C%0A%20%20%20%20%20%20%20%20color2%3A%20'%23228B22'%2C%0A%20%20%20%20%20%20%20%20color3%3A%20'%236B8E23'%2C%0A%20%20%20%20%20%20%20%20blocks%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%2F%2F%20%D0%91%D0%BB%D0%BE%D0%BA%20%D0%B4%D0%BB%D1%8F%20%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%8B%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%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'replaceElement'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20reporterBlock%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'%D0%97%D0%B0%D0%BC%D0%B5%D0%BD%D0%B8%D1%82%D1%8C%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%20%5BINDEX%5D%20%D0%B2%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B5%20%5BTEXT%5D%20%D0%BD%D0%B0%20%5BNEW_VALUE%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%7Btype%3A%20stringArg%2C%20defaultValue%3A%20'1%2C%202%2C%203%2C%204%2C%205'%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20INDEX%3A%20%7Btype%3A%20numberArg%2C%20defaultValue%3A%202%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20NEW_VALUE%3A%20%7Btype%3A%20numberArg%2C%20defaultValue%3A%2050%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%0A%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20%D0%92%D1%81%D0%BF%D0%BE%D0%BC%D0%BE%D0%B3%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F%20%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F%20%D0%B4%D0%BB%D1%8F%20%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D1%8B%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%0A%20%20%20%20replaceElement(%7BTEXT%2C%20INDEX%2C%20NEW_VALUE%7D)%20%7B%0A%20%20%20%20%20%20const%20elements%20%3D%20TEXT.split('%2C%20').map(Number)%3B%20%2F%2F%20%D0%A0%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D1%8F%D0%B5%D0%BC%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D1%83%20%D0%BD%D0%B0%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B%20%D0%B8%20%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D1%83%D0%B5%D0%BC%20%D0%B2%20%D1%87%D0%B8%D1%81%D0%BB%D0%B0%0A%20%20%20%20%20%20const%20index%20%3D%20INDEX%20-%201%3B%20%2F%2F%20%D0%9F%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D1%83%D0%B5%D0%BC%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%D0%B2%200-%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D0%B0%D1%86%D0%B8%D1%8E%0A%0A%20%20%20%20%20%20if%20(index%20%3E%3D%200%20%26%26%20index%20%3C%20elements.length)%20%7B%0A%20%20%20%20%20%20%20%20elements%5Bindex%5D%20%3D%20NEW_VALUE%3B%20%2F%2F%20%D0%97%D0%B0%D0%BC%D0%B5%D0%BD%D1%8F%D0%B5%D0%BC%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%0A%20%20%20%20%20%20%20%20return%20elements.join('%2C%20')%3B%20%2F%2F%20%D0%92%D0%BE%D0%B7%D0%B2%D1%80%D0%B0%D1%89%D0%B0%D0%B5%D0%BC%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D1%83%20%D1%81%20%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D1%91%D0%BD%D0%BD%D1%8B%D0%BC%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%BC%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20throw%20new%20Error(%60%D0%AD%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%20%D1%81%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D0%BE%D0%BC%20%24%7BINDEX%7D%20%D0%BD%D0%B5%20%D0%BD%D0%B0%D0%B9%D0%B4%D0%B5%D0%BD%60)%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20%2F%2F%20%D0%A0%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F%20%D1%80%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%B8%D1%8F%0A%20%20Scratch.extensions.register(new%20ElementReplacer())%3B%0A%7D)(Scratch)%3B","data:application/javascript,(function(Scratch)%20%7B%0A%20%20'use%20strict'%3B%0A%0A%20%20const%20stringArg%20%3D%20Scratch.ArgumentType.STRING%3B%0A%20%20const%20numberArg%20%3D%20Scratch.ArgumentType.NUMBER%3B%0A%20%20const%20reporterBlock%20%3D%20Scratch.BlockType.REPORTER%3B%0A%0A%20%20class%20NumberFormatter%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'numberformatter'%2C%0A%20%20%20%20%20%20%20%20name%3A%20'Number%20Formatter'%2C%0A%20%20%20%20%20%20%20%20color1%3A%20'%234B0082'%2C%0A%20%20%20%20%20%20%20%20color2%3A%20'%238A2BE2'%2C%0A%20%20%20%20%20%20%20%20color3%3A%20'%239370DB'%2C%0A%20%20%20%20%20%20%20%20blocks%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%2F%2F%20%D0%91%D0%BB%D0%BE%D0%BA%20%D0%B4%D0%BB%D1%8F%20%D1%81%D0%BE%D0%BA%D1%80%D0%B0%D1%89%D0%B5%D0%BD%D0%B8%D1%8F%20%D1%87%D0%B8%D1%81%D0%BB%D0%B0%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'formatNumber'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20reporterBlock%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'%D0%A1%D0%BE%D0%BA%D1%80%D0%B0%D1%82%D0%B8%D1%82%D1%8C%20%D1%87%D0%B8%D1%81%D0%BB%D0%BE%20%5BNUM%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%20NUM%3A%20%7Btype%3A%20numberArg%2C%20defaultValue%3A%201000000%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%2F%2F%20%D0%91%D0%BB%D0%BE%D0%BA%20%D0%B4%D0%BB%D1%8F%20%D1%81%D0%BE%D0%BA%D1%80%D0%B0%D1%89%D0%B5%D0%BD%D0%B8%D1%8F%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%20%D0%B8%D0%B7%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8%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'formatElement'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20reporterBlock%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20'%D0%A1%D0%BE%D0%BA%D1%80%D0%B0%D1%82%D0%B8%D1%82%D1%8C%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%20%5BINDEX%5D%20%D0%B8%D0%B7%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8%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%7Btype%3A%20stringArg%2C%20defaultValue%3A%20'1%2C%202%2C%203%2C%204%2C%205'%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20INDEX%3A%20%7Btype%3A%20numberArg%2C%20defaultValue%3A%201%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%0A%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20%D0%9B%D0%B8%D0%BC%D0%B8%D1%82%2C%20%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9%20%D0%B8%D0%B7%20%D0%B2%D0%B0%D1%88%D0%B5%D0%B3%D0%BE%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE%20%D1%84%D0%B0%D0%B9%D0%BB%D0%B0%0A%20%20%20%20getLimit()%20%7B%0A%20%20%20%20%20%20return%201e25%3B%20%2F%2F%20%D0%97%D0%B0%D0%BC%D0%B5%D0%BD%D0%B8%D1%82%D0%B5%20%D1%8D%D1%82%D0%BE%20%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BD%D0%B0%20%D1%82%D0%BE%2C%20%D1%87%D1%82%D0%BE%20%D0%B2%D1%8B%20%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D0%B5%20%D0%B8%D0%B7%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE%20%D1%84%D0%B0%D0%B9%D0%BB%D0%B0%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F%20%D0%B4%D0%BB%D1%8F%20%D1%81%D0%BE%D0%BA%D1%80%D0%B0%D1%89%D0%B5%D0%BD%D0%B8%D1%8F%20%D1%87%D0%B8%D1%81%D0%BB%D0%B0%0A%20%20%20%20formatNumber(%7BNUM%7D)%20%7B%0A%20%20%20%20%20%20const%20limit%20%3D%20this.getLimit()%3B%0A%20%20%20%20%20%20%2F%2F%20%D0%95%D1%81%D0%BB%D0%B8%20%D1%87%D0%B8%D1%81%D0%BB%D0%BE%20%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B5%20%D0%BB%D0%B8%D0%BC%D0%B8%D1%82%D0%B0%2C%20%D0%B2%D0%B5%D1%80%D0%BD%D1%83%D1%82%D1%8C%20%D0%B8%D1%81%D1%85%D0%BE%D0%B4%D0%BD%D0%BE%D0%B5%20%D1%87%D0%B8%D1%81%D0%BB%D0%BE%0A%20%20%20%20%20%20if%20(NUM%20%3E%3D%20limit)%20%7B%0A%20%20%20%20%20%20%20%20return%20NUM.toString()%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%2F%2F%20%D0%A1%D0%BE%D0%BA%D1%80%D0%B0%D1%89%D0%B0%D0%B5%D0%BC%20%D1%87%D0%B8%D1%81%D0%BB%D0%BE%20%D0%B2%20%D0%BD%D0%B0%D1%83%D1%87%D0%BD%D1%83%D1%8E%20%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C%20%D1%81%20%D0%B4%D0%B2%D1%83%D0%BC%D1%8F%20%D0%B7%D0%BD%D0%B0%D0%BA%D0%B0%D0%BC%D0%B8%20%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%20%D0%B7%D0%B0%D0%BF%D1%8F%D1%82%D0%BE%D0%B9%0A%20%20%20%20%20%20return%20NUM.toExponential(2)%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F%20%D0%B4%D0%BB%D1%8F%20%D1%81%D0%BE%D0%BA%D1%80%D0%B0%D1%89%D0%B5%D0%BD%D0%B8%D1%8F%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%20%D0%B8%D0%B7%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8%0A%20%20%20%20formatElement(%7BTEXT%2C%20INDEX%7D)%20%7B%0A%20%20%20%20%20%20const%20elements%20%3D%20TEXT.split('%2C%20').map(Number)%3B%20%2F%2F%20%D0%A0%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D1%8F%D0%B5%D0%BC%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D1%83%20%D0%BD%D0%B0%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B%0A%20%20%20%20%20%20const%20index%20%3D%20INDEX%20-%201%3B%20%2F%2F%20%D0%9F%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D1%83%D0%B5%D0%BC%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%D0%B2%200-%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D0%B0%D1%86%D0%B8%D1%8E%0A%0A%20%20%20%20%20%20if%20(index%20%3E%3D%200%20%26%26%20index%20%3C%20elements.length)%20%7B%0A%20%20%20%20%20%20%20%20const%20element%20%3D%20elements%5Bindex%5D%3B%20%2F%2F%20%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B0%D0%B5%D0%BC%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%0A%20%20%20%20%20%20%20%20return%20this.formatNumber(%7BNUM%3A%20element%7D)%3B%20%2F%2F%20%D0%A1%D0%BE%D0%BA%D1%80%D0%B0%D1%89%D0%B0%D0%B5%D0%BC%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20return%20%60%D0%AD%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%20%D1%81%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D0%BE%D0%BC%20%24%7BINDEX%7D%20%D0%BD%D0%B5%20%D0%BD%D0%B0%D0%B9%D0%B4%D0%B5%D0%BD%60%3B%20%2F%2F%20%D0%95%D1%81%D0%BB%D0%B8%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%20%D0%B2%D0%BD%D0%B5%20%D0%B4%D0%B8%D0%B0%D0%BF%D0%B0%D0%B7%D0%BE%D0%BD%D0%B0%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20%2F%2F%20%D0%A0%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F%20%D1%80%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%B8%D1%8F%0A%20%20Scratch.extensions.register(new%20NumberFormatter())%3B%0A%7D)(Scratch)%3B","data:text/javascript;,(function(Scratch)%20%7B%20%2F%2F%20Name%3A%20Local%20Storage%0D%0A%2F%2F%20ID%3A%20localstorage%0D%0A%2F%2F%20Description%3A%20Store%20data%20persistently.%20Like%20cookies%2C%20but%20better.%0D%0A%2F%2F%20License%3A%20MIT%20AND%20MPL-2.0%0D%0A%0D%0A%2F*%20generated%20l10n%20code%20*%2FScratch.translate.setup(%7B%22de%22%3A%7B%22_Local%20Storage%22%3A%22Speicherplatz%22%7D%2C%22fi%22%3A%7B%22_Local%20Storage%22%3A%22Paikallinen%20muisti%22%7D%2C%22it%22%3A%7B%22_Local%20Storage%22%3A%22Memoria%20Locale%22%2C%22_Local%20Storage%20extension%3A%20project%20must%20run%20the%20%5C%22set%20storage%20namespace%20ID%5C%22%20block%20before%20it%20can%20use%20other%20blocks%22%3A%22Estensione%20Archiviazone%20Locale%3A%20il%20progetto%20deve%20eseguire%20il%20blocco%20%5C%22imposta%20ID%20spazio%20di%20archiviazione%5C%22%20prima%20di%20usare%20gli%20altri%20blocchi%22%2C%22_delete%20all%20keys%22%3A%22cancella%20tutte%20le%20chiavi%22%2C%22_delete%20key%20%5BKEY%5D%22%3A%22cancella%20chiave%20%5BKEY%5D%22%2C%22_get%20key%20%5BKEY%5D%22%3A%22valore%20della%20chiave%20%5BKEY%5D%22%2C%22_project%20title%22%3A%22titolo%20progetto%22%2C%22_score%22%3A%22punteggio%22%2C%22_set%20key%20%5BKEY%5D%20to%20%5BVALUE%5D%22%3A%22imposta%20valore%20chiave%20%5BKEY%5D%20a%20%5BVALUE%5D%22%2C%22_set%20storage%20namespace%20ID%20to%20%5BID%5D%22%3A%22imposta%20ID%20spazio%20archiviazione%20a%20%5BID%5D%22%2C%22_when%20another%20window%20changes%20storage%22%3A%22quando%20altra%20finestra%20cambia%20spazio%20di%20archiviazione%22%7D%2C%22ja%22%3A%7B%22_Local%20Storage%22%3A%22%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%82%B9%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B8%22%2C%22_Local%20Storage%20extension%3A%20project%20must%20run%20the%20%5C%22set%20storage%20namespace%20ID%5C%22%20block%20before%20it%20can%20use%20other%20blocks%22%3A%22%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%82%B9%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B8%E6%8B%A1%E5%BC%B5%E6%A9%9F%E8%83%BD%EF%BC%9A%E4%BB%96%E3%81%AE%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E5%89%8D%E3%81%AB%E3%80%81%E3%80%8C%E3%82%B9%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B8%E3%81%AE%E5%90%8D%E5%89%8D%E3%82%92()%E3%81%AB%E3%81%99%E3%82%8B%E3%80%8D%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E5%BF%85%E8%A6%81%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%22%2C%22_get%20key%20%5BKEY%5D%22%3A%22%E3%82%AD%E3%83%BC%E3%82%92%E5%8F%96%E5%BE%97%5BKEY%5D%22%2C%22_set%20storage%20namespace%20ID%20to%20%5BID%5D%22%3A%22%E3%82%B9%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B8%E3%81%AE%E5%90%8D%E5%89%8D%E7%A9%BA%E9%96%93ID%E3%82%92%5BID%5D%E3%81%AB%E3%81%99%E3%82%8B%22%7D%2C%22nb%22%3A%7B%22_Local%20Storage%22%3A%22Lokal%20lagring%22%2C%22_Local%20Storage%20extension%3A%20project%20must%20run%20the%20%5C%22set%20storage%20namespace%20ID%5C%22%20block%20before%20it%20can%20use%20other%20blocks%22%3A%22Lokal%20lagring%20utvidelse%3A%20prosjektet%20m%C3%A5%20kj%C3%B8re%20blokken%20%5C%22sett%20lagringsnavnerom-ID%5C%22%20f%C3%B8r%20det%20kan%20bruke%20andre%20blokker%22%2C%22_delete%20all%20keys%22%3A%22slett%20alle%20n%C3%B8kler%22%2C%22_delete%20key%20%5BKEY%5D%22%3A%22slett%20n%C3%B8kkel%20%5BKEY%5D%22%2C%22_get%20key%20%5BKEY%5D%22%3A%22f%C3%A5%20n%C3%B8kkel%20%5BKEY%5D%22%2C%22_project%20title%22%3A%22prosjekttittel%22%2C%22_score%22%3A%22poengsum%22%2C%22_set%20key%20%5BKEY%5D%20to%20%5BVALUE%5D%22%3A%22sett%20n%C3%B8kkel%20%5BKEY%5D%20til%20%5BVALUE%5D%22%2C%22_set%20storage%20namespace%20ID%20to%20%5BID%5D%22%3A%22sett%20lagringsnavnerom-ID%20til%20%5BID%5D%22%2C%22_when%20another%20window%20changes%20storage%22%3A%22n%C3%A5r%20et%20annet%20vindu%20endrer%20lagring%22%7D%2C%22nl%22%3A%7B%22_Local%20Storage%22%3A%22Lokale%20opslag%22%2C%22_Local%20Storage%20extension%3A%20project%20must%20run%20the%20%5C%22set%20storage%20namespace%20ID%5C%22%20block%20before%20it%20can%20use%20other%20blocks%22%3A%22Lokale%20opslag-extensie%3A%20het%20project%20moet%20eerst%20een%20opslagnaamruimte-ID%20toegewezen%20krijgen%20voordat%20de%20andere%20blokken%20kunnen%20werken.%22%2C%22_delete%20all%20keys%22%3A%22verwijder%20alle%20sleutels%22%2C%22_delete%20key%20%5BKEY%5D%22%3A%22verwijder%20sleutel%20%5BKEY%5D%22%2C%22_get%20key%20%5BKEY%5D%22%3A%22sleutel%20%5BKEY%5D%22%2C%22_project%20title%22%3A%22projecttitel%22%2C%22_set%20key%20%5BKEY%5D%20to%20%5BVALUE%5D%22%3A%22maak%20sleutel%20%5BKEY%5D%20%5BVALUE%5D%22%2C%22_set%20storage%20namespace%20ID%20to%20%5BID%5D%22%3A%22maak%20opslagnaamruimte-ID%20%5BID%5D%22%2C%22_when%20another%20window%20changes%20storage%22%3A%22wanneer%20een%20ander%20venster%20de%20opslag%20aanpast%22%7D%2C%22ru%22%3A%7B%22_Local%20Storage%22%3A%22%D0%9B%D0%BE%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5%20%D0%A5%D1%80%D0%B0%D0%BD%D0%B8%D0%BB%D0%B8%D1%89%D0%B5%22%2C%22_Local%20Storage%20extension%3A%20project%20must%20run%20the%20%5C%22set%20storage%20namespace%20ID%5C%22%20block%20before%20it%20can%20use%20other%20blocks%22%3A%22%D0%A0%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%9B%D0%BE%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5%20%D0%A5%D1%80%D0%B0%D0%BD%D0%B8%D0%BB%D0%B8%D1%89%D0%B5%3A%20%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%20%D0%B4%D0%BE%D0%BB%D0%B6%D0%B5%D0%BD%20%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D1%82%D0%B8%D1%82%D1%8C%20%D0%B1%D0%BB%D0%BE%D0%BA%20%5C%22%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D1%8C%20ID%20%D0%BF%D1%80%D0%BE%D1%81%D1%82%D1%80%D0%B0%D0%BD%D1%81%D1%82%D0%B2%D0%B0%20%D0%B8%D0%BC%D0%B5%D0%BD%20%D1%85%D1%80%D0%B0%D0%BD%D0%B8%D0%BB%D0%B8%D1%89%D0%B0%5C%22%2C%20%D0%BF%D1%80%D0%B5%D0%B6%D0%B4%D0%B5%20%D1%87%D0%B5%D0%BC%20%D0%BE%D0%BD%20%D1%81%D0%BC%D0%BE%D0%B6%D0%B5%D1%82%20%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D0%B4%D1%80%D1%83%D0%B3%D0%B8%D0%B5%20%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8%22%2C%22_delete%20all%20keys%22%3A%22%D1%83%D0%B4%D0%B0%D0%BB%D0%B8%D1%82%D1%8C%20%D0%B2%D1%81%D0%B5%20%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D1%8F%22%2C%22_delete%20key%20%5BKEY%5D%22%3A%22%D1%83%D0%B4%D0%B0%D0%BB%D0%B8%D1%82%D1%8C%20%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%5BKEY%5D%22%2C%22_get%20key%20%5BKEY%5D%22%3A%22%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C%20%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%5BKEY%5D%22%2C%22_project%20title%22%3A%22%D0%BD%D0%B0%D0%B7%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0%22%2C%22_score%22%3A%22%D0%BE%D1%87%D0%BA%D0%B8%22%2C%22_set%20key%20%5BKEY%5D%20to%20%5BVALUE%5D%22%3A%22%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D1%8C%20%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%5BKEY%5D%20%D0%BD%D0%B0%20%5BVALUE%5D%22%2C%22_set%20storage%20namespace%20ID%20to%20%5BID%5D%22%3A%22%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D1%8C%20ID%20%D1%85%D1%80%D0%B0%D0%BD%D0%B8%D0%BB%D0%B8%D1%89%D0%B0%20%D0%BD%D0%B0%20%5BID%5D%22%2C%22_when%20another%20window%20changes%20storage%22%3A%22%D0%BA%D0%BE%D0%B3%D0%B4%D0%B0%20%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%B5%20%D0%BE%D0%BA%D0%BD%D0%BE%20%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D1%8F%D0%B5%D1%82%20%D1%85%D1%80%D0%B0%D0%BD%D0%B8%D0%BB%D0%B8%D1%89%D0%B5%22%7D%2C%22zh-cn%22%3A%7B%22_Local%20Storage%22%3A%22%E6%9C%AC%E5%9C%B0%E5%AD%98%E5%82%A8%22%2C%22_Local%20Storage%20extension%3A%20project%20must%20run%20the%20%5C%22set%20storage%20namespace%20ID%5C%22%20block%20before%20it%20can%20use%20other%20blocks%22%3A%22%E6%9C%AC%E5%9C%B0%E5%AD%98%E5%82%A8%E6%8B%93%E5%B1%95%EF%BC%9A%E8%AF%B7%E5%85%88%E8%BF%90%E8%A1%8C%E2%80%9C%E8%AE%BE%E7%BD%AE%E5%AD%98%E5%82%A8%E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4ID%E2%80%9D%E7%A7%AF%E6%9C%A8%E6%89%8D%E8%83%BD%E4%BD%BF%E7%94%A8%E4%B8%8B%E9%9D%A2%E7%9A%84%E7%A7%AF%E6%9C%A8%22%2C%22_delete%20all%20keys%22%3A%22%E5%88%A0%E9%99%A4%E6%89%80%E6%9C%89%E6%9C%AC%E5%9C%B0%E5%AD%98%E5%82%A8%E5%8F%98%E9%87%8F%22%2C%22_delete%20key%20%5BKEY%5D%22%3A%22%E5%88%A0%E9%99%A4%E6%9C%AC%E5%9C%B0%E5%AD%98%E5%82%A8%E5%8F%98%E9%87%8F%5BKEY%5D%22%2C%22_get%20key%20%5BKEY%5D%22%3A%22%E6%9C%AC%E5%9C%B0%E5%AD%98%E5%82%A8%E5%8F%98%E9%87%8F%5BKEY%5D%E7%9A%84%E5%80%BC%22%2C%22_project%20title%22%3A%22%E4%BD%9C%E5%93%81%E6%A0%87%E9%A2%98%22%2C%22_score%22%3A%22%E5%88%86%E6%95%B0%22%2C%22_set%20key%20%5BKEY%5D%20to%20%5BVALUE%5D%22%3A%22%E8%AE%BE%E7%BD%AE%E6%9C%AC%E5%9C%B0%E5%AD%98%E5%82%A8%E5%8F%98%E9%87%8F%5BKEY%5D%E7%9A%84%E5%80%BC%E4%B8%BA%5BVALUE%5D%22%2C%22_set%20storage%20namespace%20ID%20to%20%5BID%5D%22%3A%22%E8%AE%BE%E7%BD%AE%E5%AD%98%E5%82%A8%E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4ID%E4%B8%BA%5BID%5D%22%2C%22_when%20another%20window%20changes%20storage%22%3A%22%E5%BD%93%E5%85%B6%E4%BB%96%E9%A1%B5%E9%9D%A2%E4%BF%AE%E6%94%B9%E6%9C%AC%E5%9C%B0%E5%AD%98%E5%82%A8%E6%95%B0%E6%8D%AE%22%7D%7D)%3B%2F*%20end%20generated%20l10n%20code%20*%2F(function%20(Scratch)%20%7B%0D%0A%20%20%22use%20strict%22%3B%0D%0A%0D%0A%20%20if%20(!Scratch.extensions.unsandboxed)%20%7B%0D%0A%20%20%20%20throw%20new%20Error(%22Local%20Storage%20must%20be%20run%20unsandboxed%22)%3B%0D%0A%20%20%7D%0D%0A%0D%0A%20%20const%20PREFIX%20%3D%20%22extensions.turbowarp.org%2Flocal-storage%3A%22%3B%0D%0A%20%20let%20namespace%20%3D%20%22%22%3B%0D%0A%20%20const%20getFullStorageKey%20%3D%20()%20%3D%3E%20%60%24%7BPREFIX%7D%24%7Bnamespace%7D%60%3B%0D%0A%0D%0A%20%20let%20lastNamespaceWarning%20%3D%200%3B%0D%0A%0D%0A%20%20const%20validNamespace%20%3D%20()%20%3D%3E%20%7B%0D%0A%20%20%20%20const%20valid%20%3D%20!!namespace%3B%0D%0A%20%20%20%20if%20(!valid%20%26%26%20Date.now()%20-%20lastNamespaceWarning%20%3E%203000)%20%7B%0D%0A%20%20%20%20%20%20alert(%0D%0A%20%20%20%20%20%20%20%20Scratch.translate(%0D%0A%20%20%20%20%20%20%20%20%20%20'Local%20Storage%20extension%3A%20project%20must%20run%20the%20%22set%20storage%20namespace%20ID%22%20block%20before%20it%20can%20use%20other%20blocks'%0D%0A%20%20%20%20%20%20%20%20)%0D%0A%20%20%20%20%20%20)%3B%0D%0A%20%20%20%20%20%20lastNamespaceWarning%20%3D%20Date.now()%3B%0D%0A%20%20%20%20%7D%0D%0A%20%20%20%20return%20valid%3B%0D%0A%20%20%7D%3B%0D%0A%0D%0A%20%20const%20readFromStorage%20%3D%20()%20%3D%3E%20%7B%0D%0A%20%20%20%20try%20%7B%0D%0A%20%20%20%20%20%20%2F%2F%20localStorage%20could%20throw%20if%20unsupported%0D%0A%20%20%20%20%20%20const%20data%20%3D%20localStorage.getItem(getFullStorageKey())%3B%0D%0A%20%20%20%20%20%20if%20(data)%20%7B%0D%0A%20%20%20%20%20%20%20%20%2F%2F%20JSON.parse%20could%20throw%20if%20data%20is%20invalid%0D%0A%20%20%20%20%20%20%20%20const%20parsed%20%3D%20JSON.parse(data)%3B%0D%0A%20%20%20%20%20%20%20%20if%20(parsed%20%26%26%20parsed.data)%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%2F%2F%20Remove%20invalid%20values%20from%20the%20JSON%0D%0A%20%20%20%20%20%20%20%20%20%20const%20processed%20%3D%20%7B%7D%3B%0D%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%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20typeof%20value%20%3D%3D%3D%20%22number%22%20%7C%7C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20typeof%20value%20%3D%3D%3D%20%22string%22%20%7C%7C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20typeof%20value%20%3D%3D%3D%20%22boolean%22%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20)%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20processed%5Bkey%5D%20%3D%20value%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%20%20%20%20%20%20return%20processed%3B%0D%0A%20%20%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%7D%20catch%20(error)%20%7B%0D%0A%20%20%20%20%20%20console.error(%22error%20reading%20from%20local%20storage%22%2C%20error)%3B%0D%0A%20%20%20%20%7D%0D%0A%20%20%20%20return%20%7B%7D%3B%0D%0A%20%20%7D%3B%0D%0A%0D%0A%20%20const%20saveToLocalStorage%20%3D%20(data)%20%3D%3E%20%7B%0D%0A%20%20%20%20try%20%7B%0D%0A%20%20%20%20%20%20if%20(Object.keys(data).length%20%3E%200)%20%7B%0D%0A%20%20%20%20%20%20%20%20localStorage.setItem(%0D%0A%20%20%20%20%20%20%20%20%20%20getFullStorageKey()%2C%0D%0A%20%20%20%20%20%20%20%20%20%20JSON.stringify(%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20time%3A%20Math.round(Date.now()%20%2F%201000)%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20data%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%7D)%0D%0A%20%20%20%20%20%20%20%20)%3B%0D%0A%20%20%20%20%20%20%7D%20else%20%7B%0D%0A%20%20%20%20%20%20%20%20localStorage.removeItem(getFullStorageKey())%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%7D%20catch%20(error)%20%7B%0D%0A%20%20%20%20%20%20console.error(%22error%20saving%20to%20locacl%20storage%22%2C%20error)%3B%0D%0A%20%20%20%20%7D%0D%0A%20%20%7D%3B%0D%0A%0D%0A%20%20window.addEventListener(%22storage%22%2C%20(event)%20%3D%3E%20%7B%0D%0A%20%20%20%20if%20(%0D%0A%20%20%20%20%20%20namespace%20%26%26%0D%0A%20%20%20%20%20%20event.key%20%3D%3D%3D%20getFullStorageKey()%20%26%26%0D%0A%20%20%20%20%20%20event.storageArea%20%3D%3D%3D%20localStorage%0D%0A%20%20%20%20)%20%7B%0D%0A%20%20%20%20%20%20Scratch.vm.runtime.startHats(%22localstorage_whenChanged%22)%3B%0D%0A%20%20%20%20%7D%0D%0A%20%20%7D)%3B%0D%0A%0D%0A%20%20Scratch.vm.runtime.on(%22RUNTIME_DISPOSED%22%2C%20()%20%3D%3E%20%7B%0D%0A%20%20%20%20namespace%20%3D%20%22%22%3B%0D%0A%20%20%7D)%3B%0D%0A%0D%0A%20%20class%20LocalStorage%20%7B%0D%0A%20%20%20%20getInfo()%20%7B%0D%0A%20%20%20%20%20%20return%20%7B%0D%0A%20%20%20%20%20%20%20%20id%3A%20%22localstorage%22%2C%0D%0A%20%20%20%20%20%20%20%20name%3A%20Scratch.translate(%22Local%20Storage%22)%2C%0D%0A%20%20%20%20%20%20%20%20docsURI%3A%20%22https%3A%2F%2Fextensions.turbowarp.org%2Flocal-storage%22%2C%0D%0A%20%20%20%20%20%20%20%20blocks%3A%20%5B%0D%0A%20%20%20%20%20%20%20%20%20%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22setProjectId%22%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22set%20storage%20namespace%20ID%20to%20%5BID%5D%22)%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20ID%3A%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20Scratch.translate(%22project%20title%22)%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22get%22%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.REPORTER%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22get%20key%20%5BKEY%5D%22)%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20KEY%3A%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20Scratch.translate(%22score%22)%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22set%22%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22set%20key%20%5BKEY%5D%20to%20%5BVALUE%5D%22)%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20KEY%3A%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20Scratch.translate(%22score%22)%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20VALUE%3A%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20%221000%22%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22remove%22%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22delete%20key%20%5BKEY%5D%22)%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20arguments%3A%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20KEY%3A%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20Scratch.ArgumentType.STRING%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defaultValue%3A%20Scratch.translate(%22score%22)%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22removeAll%22%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.COMMAND%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22delete%20all%20keys%22)%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20opcode%3A%20%22whenChanged%22%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20blockType%3A%20Scratch.BlockType.EVENT%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20Scratch.translate(%22when%20another%20window%20changes%20storage%22)%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20isEdgeActivated%3A%20false%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0D%0A%20%20%20%20%20%20%20%20%5D%2C%0D%0A%20%20%20%20%20%20%7D%3B%0D%0A%20%20%20%20%7D%0D%0A%20%20%20%20setProjectId(%7B%20ID%20%7D)%20%7B%0D%0A%20%20%20%20%20%20namespace%20%3D%20Scratch.Cast.toString(ID)%3B%0D%0A%20%20%20%20%7D%0D%0A%20%20%20%20get(%7B%20KEY%20%7D)%20%7B%0D%0A%20%20%20%20%20%20if%20(!validNamespace())%20%7B%0D%0A%20%20%20%20%20%20%20%20return%20%22%22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%20%20const%20storage%20%3D%20readFromStorage()%3B%0D%0A%20%20%20%20%20%20KEY%20%3D%20Scratch.Cast.toString(KEY)%3B%0D%0A%20%20%20%20%20%20if%20(!Object.prototype.hasOwnProperty.call(storage%2C%20KEY))%20%7B%0D%0A%20%20%20%20%20%20%20%20return%20%22%22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%20%20return%20storage%5BKEY%5D%3B%0D%0A%20%20%20%20%7D%0D%0A%20%20%20%20set(%7B%20KEY%2C%20VALUE%20%7D)%20%7B%0D%0A%20%20%20%20%20%20if%20(!validNamespace())%20%7B%0D%0A%20%20%20%20%20%20%20%20return%20%22%22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%20%20const%20storage%20%3D%20readFromStorage()%3B%0D%0A%20%20%20%20%20%20storage%5BScratch.Cast.toString(KEY)%5D%20%3D%20VALUE%3B%0D%0A%20%20%20%20%20%20saveToLocalStorage(storage)%3B%0D%0A%20%20%20%20%7D%0D%0A%20%20%20%20remove(%7B%20KEY%20%7D)%20%7B%0D%0A%20%20%20%20%20%20if%20(!validNamespace())%20%7B%0D%0A%20%20%20%20%20%20%20%20return%20%22%22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%20%20const%20storage%20%3D%20readFromStorage()%3B%0D%0A%20%20%20%20%20%20delete%20storage%5BScratch.Cast.toString(KEY)%5D%3B%0D%0A%20%20%20%20%20%20saveToLocalStorage(storage)%3B%0D%0A%20%20%20%20%7D%0D%0A%20%20%20%20removeAll()%20%7B%0D%0A%20%20%20%20%20%20if%20(!validNamespace())%20%7B%0D%0A%20%20%20%20%20%20%20%20return%20%22%22%3B%0D%0A%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%20%20saveToLocalStorage(%7B%7D)%3B%0D%0A%20%20%20%20%7D%0D%0A%20%20%7D%0D%0A%20%20Scratch.extensions.register(new%20LocalStorage())%3B%0D%0A%7D)(Scratch)%3B%0D%0A%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,
storage.AssetType.Font
].filter(i => i),
(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>