allotaxonometer-ui 0.1.13 → 0.1.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/allotaxonometer_wasm-Kv_ZqZ1J.js +371 -0
- package/dist/index.js +98 -59
- package/dist/ssr/assets/allotaxonometer_wasm-BIgsRP_p.js +300 -0
- package/dist/ssr/index.js +64 -15
- package/package.json +4 -3
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
let wasm;
|
|
2
|
+
|
|
3
|
+
let cachedUint8ArrayMemory0 = null;
|
|
4
|
+
|
|
5
|
+
function getUint8ArrayMemory0() {
|
|
6
|
+
if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {
|
|
7
|
+
cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);
|
|
8
|
+
}
|
|
9
|
+
return cachedUint8ArrayMemory0;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });
|
|
13
|
+
|
|
14
|
+
cachedTextDecoder.decode();
|
|
15
|
+
|
|
16
|
+
const MAX_SAFARI_DECODE_BYTES = 2146435072;
|
|
17
|
+
let numBytesDecoded = 0;
|
|
18
|
+
function decodeText(ptr, len) {
|
|
19
|
+
numBytesDecoded += len;
|
|
20
|
+
if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {
|
|
21
|
+
cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });
|
|
22
|
+
cachedTextDecoder.decode();
|
|
23
|
+
numBytesDecoded = len;
|
|
24
|
+
}
|
|
25
|
+
return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function getStringFromWasm0(ptr, len) {
|
|
29
|
+
ptr = ptr >>> 0;
|
|
30
|
+
return decodeText(ptr, len);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function debugString(val) {
|
|
34
|
+
// primitive types
|
|
35
|
+
const type = typeof val;
|
|
36
|
+
if (type == 'number' || type == 'boolean' || val == null) {
|
|
37
|
+
return `${val}`;
|
|
38
|
+
}
|
|
39
|
+
if (type == 'string') {
|
|
40
|
+
return `"${val}"`;
|
|
41
|
+
}
|
|
42
|
+
if (type == 'symbol') {
|
|
43
|
+
const description = val.description;
|
|
44
|
+
if (description == null) {
|
|
45
|
+
return 'Symbol';
|
|
46
|
+
} else {
|
|
47
|
+
return `Symbol(${description})`;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (type == 'function') {
|
|
51
|
+
const name = val.name;
|
|
52
|
+
if (typeof name == 'string' && name.length > 0) {
|
|
53
|
+
return `Function(${name})`;
|
|
54
|
+
} else {
|
|
55
|
+
return 'Function';
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// objects
|
|
59
|
+
if (Array.isArray(val)) {
|
|
60
|
+
const length = val.length;
|
|
61
|
+
let debug = '[';
|
|
62
|
+
if (length > 0) {
|
|
63
|
+
debug += debugString(val[0]);
|
|
64
|
+
}
|
|
65
|
+
for(let i = 1; i < length; i++) {
|
|
66
|
+
debug += ', ' + debugString(val[i]);
|
|
67
|
+
}
|
|
68
|
+
debug += ']';
|
|
69
|
+
return debug;
|
|
70
|
+
}
|
|
71
|
+
// Test for built-in
|
|
72
|
+
const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val));
|
|
73
|
+
let className;
|
|
74
|
+
if (builtInMatches && builtInMatches.length > 1) {
|
|
75
|
+
className = builtInMatches[1];
|
|
76
|
+
} else {
|
|
77
|
+
// Failed to match the standard '[object ClassName]'
|
|
78
|
+
return toString.call(val);
|
|
79
|
+
}
|
|
80
|
+
if (className == 'Object') {
|
|
81
|
+
// we're a user defined class or Object
|
|
82
|
+
// JSON.stringify avoids problems with cycles, and is generally much
|
|
83
|
+
// easier than looping through ownProperties of `val`.
|
|
84
|
+
try {
|
|
85
|
+
return 'Object(' + JSON.stringify(val) + ')';
|
|
86
|
+
} catch (_) {
|
|
87
|
+
return 'Object';
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// errors
|
|
91
|
+
if (val instanceof Error) {
|
|
92
|
+
return `${val.name}: ${val.message}\n${val.stack}`;
|
|
93
|
+
}
|
|
94
|
+
// TODO we could test for more things here, like `Set`s and `Map`s.
|
|
95
|
+
return className;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
let WASM_VECTOR_LEN = 0;
|
|
99
|
+
|
|
100
|
+
const cachedTextEncoder = new TextEncoder();
|
|
101
|
+
|
|
102
|
+
if (!('encodeInto' in cachedTextEncoder)) {
|
|
103
|
+
cachedTextEncoder.encodeInto = function (arg, view) {
|
|
104
|
+
const buf = cachedTextEncoder.encode(arg);
|
|
105
|
+
view.set(buf);
|
|
106
|
+
return {
|
|
107
|
+
read: arg.length,
|
|
108
|
+
written: buf.length
|
|
109
|
+
};
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
function passStringToWasm0(arg, malloc, realloc) {
|
|
114
|
+
|
|
115
|
+
if (realloc === undefined) {
|
|
116
|
+
const buf = cachedTextEncoder.encode(arg);
|
|
117
|
+
const ptr = malloc(buf.length, 1) >>> 0;
|
|
118
|
+
getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);
|
|
119
|
+
WASM_VECTOR_LEN = buf.length;
|
|
120
|
+
return ptr;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
let len = arg.length;
|
|
124
|
+
let ptr = malloc(len, 1) >>> 0;
|
|
125
|
+
|
|
126
|
+
const mem = getUint8ArrayMemory0();
|
|
127
|
+
|
|
128
|
+
let offset = 0;
|
|
129
|
+
|
|
130
|
+
for (; offset < len; offset++) {
|
|
131
|
+
const code = arg.charCodeAt(offset);
|
|
132
|
+
if (code > 0x7F) break;
|
|
133
|
+
mem[ptr + offset] = code;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
if (offset !== len) {
|
|
137
|
+
if (offset !== 0) {
|
|
138
|
+
arg = arg.slice(offset);
|
|
139
|
+
}
|
|
140
|
+
ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;
|
|
141
|
+
const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);
|
|
142
|
+
const ret = cachedTextEncoder.encodeInto(arg, view);
|
|
143
|
+
|
|
144
|
+
offset += ret.written;
|
|
145
|
+
ptr = realloc(ptr, len, offset, 1) >>> 0;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
WASM_VECTOR_LEN = offset;
|
|
149
|
+
return ptr;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
let cachedDataViewMemory0 = null;
|
|
153
|
+
|
|
154
|
+
function getDataViewMemory0() {
|
|
155
|
+
if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {
|
|
156
|
+
cachedDataViewMemory0 = new DataView(wasm.memory.buffer);
|
|
157
|
+
}
|
|
158
|
+
return cachedDataViewMemory0;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
let cachedFloat64ArrayMemory0 = null;
|
|
162
|
+
|
|
163
|
+
function getFloat64ArrayMemory0() {
|
|
164
|
+
if (cachedFloat64ArrayMemory0 === null || cachedFloat64ArrayMemory0.byteLength === 0) {
|
|
165
|
+
cachedFloat64ArrayMemory0 = new Float64Array(wasm.memory.buffer);
|
|
166
|
+
}
|
|
167
|
+
return cachedFloat64ArrayMemory0;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
function passArrayF64ToWasm0(arg, malloc) {
|
|
171
|
+
const ptr = malloc(arg.length * 8, 8) >>> 0;
|
|
172
|
+
getFloat64ArrayMemory0().set(arg, ptr / 8);
|
|
173
|
+
WASM_VECTOR_LEN = arg.length;
|
|
174
|
+
return ptr;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Main function exported to JavaScript
|
|
178
|
+
* Takes two systems with ranks and counts, returns divergence elements and normalization
|
|
179
|
+
* @param {Float64Array} ranks1
|
|
180
|
+
* @param {Float64Array} ranks2
|
|
181
|
+
* @param {Float64Array} counts1
|
|
182
|
+
* @param {Float64Array} counts2
|
|
183
|
+
* @param {number} alpha
|
|
184
|
+
* @returns {any}
|
|
185
|
+
*/
|
|
186
|
+
function rank_turbulence_divergence(ranks1, ranks2, counts1, counts2, alpha) {
|
|
187
|
+
const ptr0 = passArrayF64ToWasm0(ranks1, wasm.__wbindgen_malloc);
|
|
188
|
+
const len0 = WASM_VECTOR_LEN;
|
|
189
|
+
const ptr1 = passArrayF64ToWasm0(ranks2, wasm.__wbindgen_malloc);
|
|
190
|
+
const len1 = WASM_VECTOR_LEN;
|
|
191
|
+
const ptr2 = passArrayF64ToWasm0(counts1, wasm.__wbindgen_malloc);
|
|
192
|
+
const len2 = WASM_VECTOR_LEN;
|
|
193
|
+
const ptr3 = passArrayF64ToWasm0(counts2, wasm.__wbindgen_malloc);
|
|
194
|
+
const len3 = WASM_VECTOR_LEN;
|
|
195
|
+
const ret = wasm.rank_turbulence_divergence(ptr0, len0, ptr1, len1, ptr2, len2, ptr3, len3, alpha);
|
|
196
|
+
return ret;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
const EXPECTED_RESPONSE_TYPES = new Set(['basic', 'cors', 'default']);
|
|
200
|
+
|
|
201
|
+
async function __wbg_load(module, imports) {
|
|
202
|
+
if (typeof Response === 'function' && module instanceof Response) {
|
|
203
|
+
if (typeof WebAssembly.instantiateStreaming === 'function') {
|
|
204
|
+
try {
|
|
205
|
+
return await WebAssembly.instantiateStreaming(module, imports);
|
|
206
|
+
|
|
207
|
+
} catch (e) {
|
|
208
|
+
const validResponse = module.ok && EXPECTED_RESPONSE_TYPES.has(module.type);
|
|
209
|
+
|
|
210
|
+
if (validResponse && module.headers.get('Content-Type') !== 'application/wasm') {
|
|
211
|
+
console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e);
|
|
212
|
+
|
|
213
|
+
} else {
|
|
214
|
+
throw e;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
const bytes = await module.arrayBuffer();
|
|
220
|
+
return await WebAssembly.instantiate(bytes, imports);
|
|
221
|
+
|
|
222
|
+
} else {
|
|
223
|
+
const instance = await WebAssembly.instantiate(module, imports);
|
|
224
|
+
|
|
225
|
+
if (instance instanceof WebAssembly.Instance) {
|
|
226
|
+
return { instance, module };
|
|
227
|
+
|
|
228
|
+
} else {
|
|
229
|
+
return instance;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
function __wbg_get_imports() {
|
|
235
|
+
const imports = {};
|
|
236
|
+
imports.wbg = {};
|
|
237
|
+
imports.wbg.__wbg_Error_e17e777aac105295 = function(arg0, arg1) {
|
|
238
|
+
const ret = Error(getStringFromWasm0(arg0, arg1));
|
|
239
|
+
return ret;
|
|
240
|
+
};
|
|
241
|
+
imports.wbg.__wbg_new_19c25a3f2fa63a02 = function() {
|
|
242
|
+
const ret = new Object();
|
|
243
|
+
return ret;
|
|
244
|
+
};
|
|
245
|
+
imports.wbg.__wbg_new_1f3a344cf3123716 = function() {
|
|
246
|
+
const ret = new Array();
|
|
247
|
+
return ret;
|
|
248
|
+
};
|
|
249
|
+
imports.wbg.__wbg_new_2ff1f68f3676ea53 = function() {
|
|
250
|
+
const ret = new Map();
|
|
251
|
+
return ret;
|
|
252
|
+
};
|
|
253
|
+
imports.wbg.__wbg_set_3f1d0b984ed272ed = function(arg0, arg1, arg2) {
|
|
254
|
+
arg0[arg1] = arg2;
|
|
255
|
+
};
|
|
256
|
+
imports.wbg.__wbg_set_90f6c0f7bd8c0415 = function(arg0, arg1, arg2) {
|
|
257
|
+
arg0[arg1 >>> 0] = arg2;
|
|
258
|
+
};
|
|
259
|
+
imports.wbg.__wbg_set_b7f1cf4fae26fe2a = function(arg0, arg1, arg2) {
|
|
260
|
+
const ret = arg0.set(arg1, arg2);
|
|
261
|
+
return ret;
|
|
262
|
+
};
|
|
263
|
+
imports.wbg.__wbg_wbindgendebugstring_99ef257a3ddda34d = function(arg0, arg1) {
|
|
264
|
+
const ret = debugString(arg1);
|
|
265
|
+
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
|
266
|
+
const len1 = WASM_VECTOR_LEN;
|
|
267
|
+
getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
|
|
268
|
+
getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
|
|
269
|
+
};
|
|
270
|
+
imports.wbg.__wbg_wbindgenisstring_d4fa939789f003b0 = function(arg0) {
|
|
271
|
+
const ret = typeof(arg0) === 'string';
|
|
272
|
+
return ret;
|
|
273
|
+
};
|
|
274
|
+
imports.wbg.__wbg_wbindgenthrow_451ec1a8469d7eb6 = function(arg0, arg1) {
|
|
275
|
+
throw new Error(getStringFromWasm0(arg0, arg1));
|
|
276
|
+
};
|
|
277
|
+
imports.wbg.__wbindgen_cast_2241b6af4c4b2941 = function(arg0, arg1) {
|
|
278
|
+
// Cast intrinsic for `Ref(String) -> Externref`.
|
|
279
|
+
const ret = getStringFromWasm0(arg0, arg1);
|
|
280
|
+
return ret;
|
|
281
|
+
};
|
|
282
|
+
imports.wbg.__wbindgen_cast_4625c577ab2ec9ee = function(arg0) {
|
|
283
|
+
// Cast intrinsic for `U64 -> Externref`.
|
|
284
|
+
const ret = BigInt.asUintN(64, arg0);
|
|
285
|
+
return ret;
|
|
286
|
+
};
|
|
287
|
+
imports.wbg.__wbindgen_cast_9ae0607507abb057 = function(arg0) {
|
|
288
|
+
// Cast intrinsic for `I64 -> Externref`.
|
|
289
|
+
const ret = arg0;
|
|
290
|
+
return ret;
|
|
291
|
+
};
|
|
292
|
+
imports.wbg.__wbindgen_cast_d6cd19b81560fd6e = function(arg0) {
|
|
293
|
+
// Cast intrinsic for `F64 -> Externref`.
|
|
294
|
+
const ret = arg0;
|
|
295
|
+
return ret;
|
|
296
|
+
};
|
|
297
|
+
imports.wbg.__wbindgen_init_externref_table = function() {
|
|
298
|
+
const table = wasm.__wbindgen_export_2;
|
|
299
|
+
const offset = table.grow(4);
|
|
300
|
+
table.set(0, undefined);
|
|
301
|
+
table.set(offset + 0, undefined);
|
|
302
|
+
table.set(offset + 1, null);
|
|
303
|
+
table.set(offset + 2, true);
|
|
304
|
+
table.set(offset + 3, false);
|
|
305
|
+
};
|
|
306
|
+
|
|
307
|
+
return imports;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
function __wbg_finalize_init(instance, module) {
|
|
311
|
+
wasm = instance.exports;
|
|
312
|
+
__wbg_init.__wbindgen_wasm_module = module;
|
|
313
|
+
cachedDataViewMemory0 = null;
|
|
314
|
+
cachedFloat64ArrayMemory0 = null;
|
|
315
|
+
cachedUint8ArrayMemory0 = null;
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
wasm.__wbindgen_start();
|
|
319
|
+
return wasm;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
function initSync(module) {
|
|
323
|
+
if (wasm !== undefined) return wasm;
|
|
324
|
+
|
|
325
|
+
|
|
326
|
+
if (typeof module !== 'undefined') {
|
|
327
|
+
if (Object.getPrototypeOf(module) === Object.prototype) {
|
|
328
|
+
({module} = module);
|
|
329
|
+
} else {
|
|
330
|
+
console.warn('using deprecated parameters for `initSync()`; pass a single object instead');
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
const imports = __wbg_get_imports();
|
|
335
|
+
|
|
336
|
+
if (!(module instanceof WebAssembly.Module)) {
|
|
337
|
+
module = new WebAssembly.Module(module);
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
const instance = new WebAssembly.Instance(module, imports);
|
|
341
|
+
|
|
342
|
+
return __wbg_finalize_init(instance, module);
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
async function __wbg_init(module_or_path) {
|
|
346
|
+
if (wasm !== undefined) return wasm;
|
|
347
|
+
|
|
348
|
+
|
|
349
|
+
if (typeof module_or_path !== 'undefined') {
|
|
350
|
+
if (Object.getPrototypeOf(module_or_path) === Object.prototype) {
|
|
351
|
+
({module_or_path} = module_or_path);
|
|
352
|
+
} else {
|
|
353
|
+
console.warn('using deprecated parameters for the initialization function; pass a single object instead');
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
if (typeof module_or_path === 'undefined') {
|
|
358
|
+
module_or_path = new URL("data:application/wasm;base64,AGFzbQEAAAAB7gEkYAJ/fwF/YAN/f38Bf2ACf38AYAN/f38AYAF/AGAEf39/fwBgBX9/f39/AGAAAW9gBX9/f39/AX9gBH9/f38Bf2ACf38Bb2ABfgFvYAF/AX9gBn9/f39/fwF/YAJ8fAF8YANvb28AYANvf28AYANvb28Bb2ACf28AYAFvAX9gAABgAXwBb2ADfn9/AX9gAAF/YAd/f39/f39/AX9gAXwBfGAGf39/f39/AGACf3wAYAV/f3x/fwBgBH98f38AYAV/f31/fwBgBH99f38AYAV/f35/fwBgBH9+f38AYAl/f39/f39/f3wBb2ABfAF/ArYEDwN3YmcaX193Ymdfc2V0XzNmMWQwYjk4NGVkMjcyZWQADwN3YmcaX193YmdfbmV3XzFmM2EzNDRjZjMxMjM3MTYABwN3YmcaX193YmdfbmV3XzJmZjFmNjhmMzY3NmVhNTMABwN3YmcaX193YmdfbmV3XzE5YzI1YTNmMmZhNjNhMDIABwN3YmcaX193Ymdfc2V0XzkwZjZjMGY3YmQ4YzA0MTUAEAN3YmcaX193Ymdfc2V0X2I3ZjFjZjRmYWUyNmZlMmEAEQN3YmcqX193Ymdfd2JpbmRnZW5kZWJ1Z3N0cmluZ185OWVmMjU3YTNkZGRhMzRkABIDd2JnHF9fd2JnX0Vycm9yX2UxN2U3NzdhYWMxMDUyOTUACgN3YmcnX193Ymdfd2JpbmRnZW5pc3N0cmluZ19kNGZhOTM5Nzg5ZjAwM2IwABMDd2JnJF9fd2JnX3diaW5kZ2VudGhyb3dfNDUxZWMxYTg0NjlkN2ViNgACA3diZx9fX3diaW5kZ2VuX2luaXRfZXh0ZXJucmVmX3RhYmxlABQDd2JnIF9fd2JpbmRnZW5fY2FzdF85YWUwNjA3NTA3YWJiMDU3AAsDd2JnIF9fd2JpbmRnZW5fY2FzdF80NjI1YzU3N2FiMmVjOWVlAAsDd2JnIF9fd2JpbmRnZW5fY2FzdF8yMjQxYjZhZjRjNGIyOTQxAAoDd2JnIF9fd2JpbmRnZW5fY2FzdF9kNmNkMTliODE1NjBmZDZlABUDdnUMAwQADQEDBQEEAgEAAQIDABYXARgAAgIAAAACGQIAAwMEDAMCBgIaBQAEAAYEAwIEAQEAAgEDAwgAAAIbAgkADQAAHAYeCCAEIgUBBA4D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BWoiATYCACAAIAFBAXI2AgQgACABaiABNgIACyACQQhqDAMLQQBB1M3AACgCACIAIAVNDQIaQdTNwAAgACAFayIBNgIAQdzNwABB3M3AACgCACIAIAVqIgI2AgAgAiABQQFyNgIEIAAgBUEDcjYCBCAAQQhqDAILIAAgBzYCGCACKAIQIgEEQCAAIAE2AhAgASAANgIYCyACKAIUIgFFDQAgACABNgIUIAEgADYCGAsCQCAEQRBPBEAgAiAFQQNyNgIEIAIgBWoiACAEQQFyNgIEIAAgBGogBDYCACAEQYACTwRAIAAgBBAqDAILIARB+AFxQcDLwABqIQECf0HIzcAAKAIAIgNBASAEQQN2dCIEcUUEQEHIzcAAIAMgBHI2AgAgAQwBCyABKAIICyEDIAEgADYCCCADIAA2AgwgACABNgIMIAAgAzYCCAwBCyACIAQgBWoiAEEDcjYCBCAAIAJqIgAgACgCBEEBcjYCBAsgAkEIagsgCEEQaiQAC48NAwd/AX4BbyMAQfAAayIDJAACQAJAAn8CQAJAAkACQAJAIAEtAABBAWsOBQABAgMGBAtBggFBgwEgAS0AARsMBAsCQAJAAkAgASgCCEEBaw4CAQIACyABKQMQIQojAEEwayIBJAAgASAKNwMIIAMCfyACLQACRQRAIApCgICAgICAgBBaBEAgAUECNgIUIAFBiJLAADYCECABQgE3AhwgASABQQhqrUKAgICAkAGENwMoIAEgAUEoajYCGEEBIQIgAUEQahAxDAILQQAhAiAKuhBjDAELQQAhAiAKEAwhCxAhIgQgCyYBIAQLNgIEIAMgAjYCACABQTBqJAAgAygCBCECIAMoAgAhAQwHCyABKQMQIQojAEEwayIBJAAgASAKNwMIIANBCGoiBAJ/IAItAAJFBEAgCkL/////////D3xC/////////x9aBEAgAUECNgIUIAFBiJLAADYCECABQgE3AhwgASABQQhqrUKAgICAgAGENwMoIAEgAUEoajYCGEEBIQIgAUEQahAxDAILQQAhAiAKuRBjDAELQQAhAiAKEAshCxAhIgUgCyYBIAULNgIEIAQgAjYCACABQTBqJAAgAygCDCECIAMoAgghAQwGCyADQRBqIgIgASsDEBBjNgIEIAJBADYCACADKAIUIQIgAygCECEBDAULIANBGGogAiABKAIIIAEoAgwQYCADKAIcIQIgAygCGCEBDAQLIANBIGohBiMAQSBrIgQkACABQQRqIgEoAgQhBSABKAIIIQEQASELECEiByALJgEgBEEUaiIIQQA2AgggCCAHNgIEIAggAjYCAAJ/AkAgBCgCFARAIARBEGogBEEcaigCADYCACAEIAQpAhQ3AwgCQCABBEAgAUEYbCECIARBCGpBBHIhByAEKAIQIQgDQCAEIAUgBCgCCBAQIAQoAgQhASAEKAIADQIgBygCACUBIAggASUBIAEQPBAEIAQgBCgCEEEBaiIINgIQIAVBGGohBSACQRhrIgINAAsLIAQoAgwhAUEADAMLIAQoAgwiAkGEAUkNASACEDxBAQwCCyAEKAIYIQELQQELIQIgBiABNgIEIAYgAjYCACAEQSBqJAAgAygCJCECIAMoAiAhAQwDC0GBAUGAASACLQAAGwshAkEAIQEMAQsgA0HYAGogAiABKAIMIgIQRgJAAkAgAygCWEECRwRAIANB0ABqIANB6ABqKAIANgIAIANByABqIANB4ABqKQIANwMAIAMgAykCWDcDQCACQQAgASgCBCICGyEJIAJBAEchBSABKAIIIQYCfwNAIAlFBEAgA0HoAGogA0HQAGooAgA2AgAgA0HgAGogA0HIAGopAwA3AwAgAyADKQNANwNYIANBKGogA0HYAGoQSiADKAIsIQIgAygCKCEBDAYLIAVBAXFFDQMCQCAIBEAgBiEHIAIhBCAIIQIMAQtBACEHAkAgBkUNACAGIgFBB3EiBQRAA0AgAUEBayEBIAIoApgDIQIgBUEBayIFDQALCyAGQQhJDQADQCACKAKYAygCmAMoApgDKAKYAygCmAMoApgDKAKYAygCmAMhAiABQQhrIgENAAsLQQAhBAsCQCACLwGSAyAHSwRAIAIhAQwBCwNAIAIoAogCIgFFDQYgBEEBaiEEIAIvAZADIQcgASECIAcgAS8BkgNPDQALCyAHQQFqIQYCQCAERQRAIAEhCAwBCyABIAZBAnRqQZgDaiECAkAgBEEHcSIGRQRAIAQhBQwBCyAEIQUDQCAFQQFrIQUgAigCACIIQZgDaiECIAZBAWsiBg0ACwtBACEGIARBCEkNAANAIAIoAgAoApgDKAKYAygCmAMoApgDKAKYAygCmAMoApgDIghBmANqIQIgBUEIayIF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IANrIgBB2M3AACgCAEYEQCACKAIEQQNxQQNHDQFB0M3AACABNgIAIAIgAigCBEF+cTYCBCAAIAFBAXI2AgQgAiABNgIADAILIAAgAxAlCwJAAkACQCACKAIEIgNBAnFFBEAgAkHczcAAKAIARg0CIAJB2M3AACgCAEYNAyACIANBeHEiAhAlIAAgASACaiIBQQFyNgIEIAAgAWogATYCACAAQdjNwAAoAgBHDQFB0M3AACABNgIADwsgAiADQX5xNgIEIAAgAUEBcjYCBCAAIAFqIAE2AgALIAFBgAJPBEAgACABECoPCyABQfgBcUHAy8AAaiECAn9ByM3AACgCACIDQQEgAUEDdnQiAXFFBEBByM3AACABIANyNgIAIAIMAQsgAigCCAshASACIAA2AgggASAANgIMIAAgAjYCDCAAIAE2AggPC0HczcAAIAA2AgBB1M3AAEHUzcAAKAIAIAFqIgE2AgAgACABQQFyNgIEIABB2M3AACgCAEcNAUHQzcAAQQA2AgBB2M3AAEEANgIADwtB2M3AACAANgIAQdDNwABB0M3AACgCACABaiIBNgIAIAAgAUEBcjYCBCAAIAFqIAE2AgALC+4DAgN/AW8jAEEgayIDJAAgASgCCCEEIAFBADYCCAJAIARBAUYEQCADIAEoAgwiBTYCFCADQQhqIAIgASgCEBAQIAMoAgwhBAJ/AkACQCADKAIIRQRAIAMgBDYCGCABKAIADQEgAUEEaigCACUBIANBFGooAgAlASADQRhqKAIAJQEQBSEGECEiASAGJgEgAUGEAU8EQCABEDwgAygCGCEECyAEQYQBTwRAIAQQPAsgAygCFCIBQYQBTwRAIAEQPAtBAAwDCyAFQYQBTwRAIAUQPAsgBCECDAELIAMgBTYCHCADQRxqKAIAJQEQCARAIAFBBGooAgAlASAFJQEgBRA8IAQlASAEEDwQAEEADAILQf3JwAAtAAAaQTNBARBmIgFFDQMgAUEvakHTh8AAKAAANgAAIAFBKGpBzIfAACkAADcAACABQSBqQcSHwAApAAA3AAAgAUEYakG8h8AAKQAANwAAIAFBEGpBtIfAACkAADcAACABQQhqQayHwAApAAA3AAAgAUGkh8AAKQAANwAAIAFBMxCBASECIAFBM0EBEG8gBUGEAU8EQCAFEDwLIARBhAFJDQAgBBA8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IAFBCkY6AAAgAyABIAIoAhARAAALTQECf0H9ycAALQAAGiABKAIEIQIgASgCACEDQQhBBBBmIgFFBEBBBEEIEH0ACyABIAI2AgQgASADNgIAIABByKnAADYCBCAAIAE2AgALQQEBfyACIAAoAgAgACgCCCIDa0sEQCAAIAMgAhAyIAAoAgghAwsgACgCBCADaiABIAIQFxogACACIANqNgIIQQALQQEBfyMAQSBrIgMkACADQQA2AhAgA0EBNgIEIANCBDcCCCADIAE2AhwgAyAANgIYIAMgA0EYajYCACADIAIQTAALTgIBbwF/An8gAS0AAUUEQBACIQMQISICIAMmAUEADAELEAMhAxAhIgIgAyYBQQELIQQgACABNgIQIABBADYCCCAAIAI2AgQgACAENgIACzgAAkAgAkGAgMQARg0AIAAgAiABKAIQEQAARQ0AQQEPCyADRQRAQQAPCyAAIAMgBCABKAIMEQEACysAAkAgACABEFBFDQAgAARAQf3JwAAtAAAaIAAgARBmIgFFDQELIAEPCwAL0AIBBn8jAEEQayICJAAgAiAANgIMIAJBDGohBCMAQUBqIgAkAEEBIQUCQCABKAIcIgNBvIrAAEEFIAEoAiAiBygCDCIGEQEADQACQCABLQAUQQRxRQRAIANBhrHAAEEBIAYRAQANAiAEIAFBuIrAACgCABEAAEUNAQwCCyADQYexwABBAiAGEQEADQEgAEEBOgAXIABBIGogAUEIaikCADcDACAAQShqIAFBEGopAgA3AwAgAEEwaiABQRhqKAIANgIAIAAgBzYCDCAAIAM2AgggAEHosMAANgI4IAAgASkCADcDGCAAIABBF2o2AhAgACAAQQhqNgI0IAQgAEEYakG4isAAKAIAEQAADQEgACgCNEGEscAAQQIgACgCOCgCDBEBAA0BCyABKAIcQaivwABBASABKAIgKAIMEQEAIQULIABBQGskACACQRBqJAAgBQs1AQF/IAEoAgQhAgJAIAEoAghFDQAgASgCDCIBQYQBSQ0AIAEQPAsgACACNgIEIABBADYCAAs6AQF/IAAgAb1C////////////AINC//////////f/AFgEfyAAIAE5AxAgAEICNwMIQQIFIAILOgAAC/oBAgJ/AX4jAEEQayICJAAgAkEBOwEMIAIgATYCCCACIAA2AgQjAEEQayIBJAAgAkEEaiIAKQIAIQQgASAANgIMIAEgBDcCBCMAQRBrIgAkACABQQRqIgEoAgAiAigCDCEDAkACQAJAAkAgAigCBA4CAAECCyADDQFBASECQQAhAwwCCyADDQAgAigCACICKAIEIQMgAigCACECDAELIABBgICAgHg2AgAgACABNgIMIABB9KnAACABKAIEIAEoAggiAC0ACCAALQAJEDQACyAAIAM2AgQgACACNgIAIABB2KnAACABKAIEIAEoAggiAC0ACCAALQAJEDQACx8AAkAgASADEFAEQCAAIAEgAyACEF8iAA0BCwALIAALIgEBfyAAKAIAIgAgAEEfdSICcyACayAAQX9zQR92IAEQIgskACAARQRAQZiTwABBMhB4AAsgACACIAMgBCAFIAEoAhARCAALGQEBf0GAgICAeCABayAATyACIAFpQQFGGwsfAQJ+IAApAwAiAiACQj+HIgOFIAN9IAJCAFkgARAgCyIAIABFBEBBmJPAAEEyEHgACyAAIAIgAyAEIAEoAhARHQALIgAgAEUEQEGYk8AAQTIQeAALIAAgAiADIAQgASgCEBEFAAsiACAARQRAQZiTwABBMhB4AAsgACACIAMgBCABKAIQER8ACyIAIABFBEBBmJPAAEEyEHgACyAAIAIgAyAEIAEoAhARCQALIgAgAEUEQEGYk8AAQTIQeAALIAAgAiADIAQgASgCEBEhAAsnAQF/IAAoAgAiAUGAgICAeHJBgICAgHhHBEAgACgCBCABQQEQbwsL3ysEGH8HfAJ+AW8jAEEwayILJAAgCyABNgIIIAsgADYCBCALIAE2AgAgCyADNgIUIAsgAjYCECALIAM2AgwgCyAFNgIgIAsgBDYCHCALIAU2AhggCyAHNgIsIAsgBjYCKCALIAc2AiQCfyALQQxqIRcgC0EYaiEYIAtBJGohGUEAIQJBACEEQQAhBSMAQbABayIJJAAgCygCBCEaQQghBkEIIQcCQAJAIAsoAggiDUUNAEH9ycAALQAAGiANQQN0IgBBCBBmIgdFDQEgDUEBRwRAIA1BfnEhAyAHIQAgGiEBA0AgAEQAAAAAAADwPyABKwMAozkDACAAQQhqRAAAAAAAAPA/IAFBCGorAwCjOQMAIABBEGohACABQRBqIQEgAyACQQJqIgJHDQALCyANQQFxRQ0A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ACAAQTRqrUKAgICAoASENwMoIABBAjYCFCAAQdyewAA2AhAgAEIBNwIcIAAgACgCDCICNgI8IAAgACgCCDYCOCAAIAI2AjQgACAAQShqNgIYIAEoAhwgASgCICAAQRBqEBogACgCNCICBEAgACgCOCACQQEQbwsgAEFAayQACw0AIAFBrJXAAEEFEGILDQAgAEG0nMAAIAEQGgsJACAAIAEQCQALDQAgAEGAocAAIAEQGgsMACAAIAEpAgA3AwALDQAgAEH8rMAAIAEQGgsNACABQfSswABBBRBiCxkAIAAgAUGcysAAKAIAIgBBJiAAGxECAAALDQAgAEHosMAAIAEQGgsKACACIAAgARAUC7cJAQd/AkACQCACIgUgACIDIAFrSwRAIAEgAmohACACIANqIQMgAkEQSQ0BQQAgA0EDcSIGayEIAkAgA0F8cSIEIANPDQAgBkEBawJAIAZFBEAgACECDAELIAYhByAAIQIDQCADQQFrIgMgAkEBayICLQAAOgAAIAdBAWsiBw0ACwtBA0kNACACQQRrIQIDQCADQQFrIAJBA2otAAA6AAAgA0ECayACQQJqLQAAOgAAIANBA2sgAkEBai0AADoAACADQQRrIgMgAi0AADoAACACQQRrIQIgAyAESw0ACwsgBCAFIAZrIgJBfHEiBWshA0EAIAVrIQYCQCAAIAhqIgBBA3FFBEAgAyAETw0BIAEgAmpBBGshAQNAIARBBGsiBCABKAIANgIAIAFBBGshASADIARJDQALDAELIAMgBE8NACAAQQN0IgVBGHEhByAAQXxxIghBBGshAUEAIAVrQRhxIQkgCCgCACEFA0AgBEEEayIEIAUgCXQgASgCACIFIAd2cjYCACABQQRrIQEgAyAESQ0ACwsgAkEDcSEFIAAgBmohAAwBCyAFQRBPBEACQCADQQAgA2tBA3EiBmoiAiADTQ0AIAEhBCAGBEAgBiEAA0AgAyAELQAAOgAAIARBAWohBCADQQFqIQMgAEEBayIADQALCyAGQQFrQQdJDQADQCADIAQtAAA6AAAgA0EBaiAEQQFqLQAAOgAAIANBAmogBEECai0AADoAACADQQNqIARBA2otAAA6AAAgA0EEaiAEQQRqLQAAOgAAIANBBWogBEEFai0AADoAACADQQZqIARBBmotAAA6AAAgA0EHaiAEQQdq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wP8Da3JFBEAgCyALoSIAIACjDAQLIAuaIAsgA0EBRhsMAwsgCwwCCyAORFnz+MIfbqUBokRZ8/jCH26lAaIMAQsgDkScdQCIPOQ3fqJEnHUAiDzkN36iCwsLhEoFAEGAgMAAC+ETL1VzZXJzL2pzdG9uZ2UxLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvY29sbGVjdGlvbnMvYnRyZWUvbWFwL2VudHJ5LnJzAAAQAIQAAAChAQAALgAAAC9Vc2Vycy9qc3RvbmdlMS8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL2NvbGxlY3Rpb25zL2J0cmVlL25vZGUucnNhc3NlcnRpb24gZmFpbGVkOiBlZGdlLmhlaWdodCA9PSBzZWxmLmhlaWdodCAtIDEAlAAQAH8AAACtAgAACQAAAGFzc2VydGlvbiBmYWlsZWQ6IHNyYy5sZW4oKSA9PSBkc3QubGVuKCmUABAAfwAAAEoHAAAFAAAAlAAQAH8AAADHBAAAIwAAAJQAEAB/AAAACgUAACQAAABhc3NlcnRpb24gZmFpbGVkOiBlZGdlLmhlaWdodCA9PSBzZWxmLm5vZGUuaGVpZ2h0IC0gMQAAAJQAEAB/AAAA+gMAAAkAAAAvVXNlcnMvanN0b25nZTEvLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2FsbG9jL3NyYy9jb2xsZWN0aW9ucy9idHJlZS9uYXZpZ2F0ZS5ycwD0ARAAgwAAAFgCAAAwAAAAL1VzZXJzL2pzdG9uZ2UxLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvY29sbGVjdGlvbnMvYnRyZWUvbmF2aWdhdGUucnMAiAIQAIMAAAAWAgAALwAAAIgCEACDAAAAoQAAACQAAAAvVXNlcnMvanN0b25nZTEvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9zZXJkZV9qc29uLTEuMC4xNDUvc3JjL3ZhbHVlL3Nlci5ycywDEABoAAAATwEAABIAAABNYXAga2V5IGlzIG5vdCBhIHN0cmluZyBhbmQgY2Fubm90IGJlIGFuIG9iamVjdCBrZXljYWxsZWQgYE9wdGlvbjo6dW53cmFwX3Rocm93KClgIG9uIGEgYE5vbmVgIHZhbHVlL1VzZXJzL2pzdG9uZ2UxLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvc2xpY2UucnMAAAgEEABuAAAAogAAABkAAAAvVXNlcnMvanN0b25nZTEvLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2FsbG9jL3NyYy9jb2xsZWN0aW9ucy9idHJlZS9uYXZpZ2F0ZS5ycwCIBBAAgwAAABYCAAAvAAAAiAQQAIMAAAChAAAAJAAAAAAAAAAEAAAABAAAAAEAAABFcnJvci9Vc2Vycy9qc3RvbmdlMS8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvY29yZS9zcmMvaXRlci90cmFpdHMvaXRlcmF0b3IucnMAAABBBRAAfAAAALMHAAAJAAAAc3JjL2xpYi5ycwAA0AUQAAoAAABKAAAAMgAAANAFEAAKAAAASwAAADIAAADQBRAACgAAAFAAAAAYAAAA0AUQAAoAAABUAAAAGAAAANAFEAAKAAAAXAAAABYAAADQBRAACgAAAGUAAAA0AAAAZGl2ZXJnZW5jZV9lbGVtZW50c25vcm1hbGl6YXRpb24CAAAABAAAAAQAAAADAAAAY2FsbGVkIGBSZXN1bHQ6OnVud3JhcCgpYCBvbiBhbiBgRXJyYCB2YWx1ZQDQBRAACgAAAI8AAAArAAAABAAAAAQAAAAEAAAABQAAANAFEAAKAAAAigAAABIAAAAvVXNlcnMvanN0b25nZTEvLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2FsbG9jL3NyYy9zbGljZS5ycwAAyAYQAG4AAACiAAAAGQAAAC9Vc2Vycy9qc3RvbmdlMS8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL2NvbGxlY3Rpb25zL2J0cmVlL25hdmlnYXRlLnJzAEgHEACDAAAAxgAAACcAAAAvVXNlcnMvanN0b25nZTEvLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2FsbG9jL3NyYy9yYXdfdmVjLnJz3AcQAHAAAAAqAgAAEQAAAC9Vc2Vycy9qc3RvbmdlMS8ucnVzdHVwL3Rvb2xjaGFpbnMvc3RhYmxlLWFhcmNoNjQtYXBwbGUtZGFyd2luL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvYWxsb2Mvc3JjL3NsaWNlLnJzAABcCBAAbgAAAKIAAAAZAAAAIGNhbid0IGJlIHJlcHJlc2VudGVkIGFzIGEgSmF2YVNjcmlwdCBudW1iZXIBAAAAAAAAANwIEAAsAAAAL1VzZXJzL2pzdG9uZ2UxLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2Yvd2FzbS1iaW5kZ2VuLTAuMi4xMDQvc3JjL2NvbnZlcnQvc2xpY2VzLnJzABgJEABvAAAAIwEAAA4AAABjbG9zdXJlIGludm9rZWQgcmVjdXJzaXZlbHkgb3IgYWZ0ZXIgYmVpbmcgZHJvcHBlZAAAGQAAAAwAAAAEAAAAGgAAABsAAAAcAEHsk8AAC5kaAQAAAB0AAABhIERpc3BsYXkgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgYW4gZXJyb3IgdW5leHBlY3RlZGx5L1VzZXJzL2pzdG9uZ2UxLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzAAArChAAbwAAAN8KAAAOAAAARXJyb3IAAAArChAAbwAAAI0FAAAbAAAARU9GIHdoaWxlIHBhcnNpbmcgYSBsaXN0RU9GIHdoaWxlIHBhcnNpbmcgYW4gb2JqZWN0RU9GIHdoaWxlIHBhcnNpbmcgYSBzdHJpbmdFT0Ygd2hpbGUgcGFyc2luZyBhIHZhbHVlZXhwZWN0ZWQgYDpgZXhwZWN0ZWQgYCxgIG9yIGBdYGV4cGVjdGVkIGAsYCBvciBgfWBleHBlY3RlZCBpZGVudGV4cGVjdGVkIHZhbHVlZXhwZWN0ZWQgYCJgaW52YWxpZCBlc2NhcGVpbnZhbGlkIG51bWJlcm51bWJlciBvdXQgb2YgcmFuZ2VpbnZhbGlkIHVuaWNvZGUgY29kZSBwb2ludGNvbnRyb2wgY2hhcmFjdGVyIChcdTAwMDAtXHUwMDFGKSBmb3VuZCB3aGlsZSBwYXJzaW5nIGEgc3RyaW5na2V5IG11c3QgYmUgYSBzdHJpbmdpbnZhbGlkIHZhbHVlOiBleHBlY3RlZCBrZXkgdG8gYmUgYSBudW1iZXIgaW4gcXVvdGVzZmxvYXQga2V5IG11c3QgYmUgZmluaXRlIChnb3QgTmFOIG9yICsvLWluZilsb25lIGxlYWRpbmcgc3Vycm9nYXRlIGluIGhleCBlc2NhcGV0cmFpbGluZyBjb21tYXRyYWlsaW5nIGNoYXJhY3RlcnN1bmV4cGVjdGVkIGVuZCBvZiBoZXggZXNjYXBlcmVjdXJzaW9uIGxpbWl0IGV4Y2VlZGVkRXJyb3IoLCBsaW5lOiAsIGNvbHVtbjogKQAAAPgMEAAGAAAA/gwQAAgAAAAGDRAACgAAABANEAABAAAAL1VzZXJzL2pzdG9uZ2UxLy5ydXN0dXAvdG9vbGNoYWlucy9zdGFibGUtYWFyY2g2NC1hcHBsZS1kYXJ3aW4vbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzADQNEABvAAAAjQUAABsAAAAvVXNlcnMvanN0b25nZTEvLnJ1c3R1cC90b29sY2hhaW5zL3N0YWJsZS1hYXJjaDY0LWFwcGxlLWRhcndpbi9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2FsbG9jL3NyYy9yYXdfdmVjLnJztA0QAHAAAAAqAgAAEQAAAB4AAAAMAAAABAAAAB8AAAAgAAAAHAAAAC9Vc2Vycy9qc3RvbmdlMS8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3NlcmRlX2pzb24tMS4wLjE0NS9zcmMvdmFsdWUvc2VyLnJzTA4QAGgAAADrAAAAEgAAAC9Vc2Vycy9qc3RvbmdlMS8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3dhc20tYmluZGdlbi0wLjIuMTA0L3NyYy9leHRlcm5yZWYucnMAAMQOEABqAAAAfgAAABEAAADEDhAAagAAAIsAAAARAAAASnNWYWx1ZSgpAAAAUA8QAAgAAABYDxAAAQAAAC9ydXN0Yy8wNWY5ODQ2Zjg5M2IwOWExYmUxZmM4NTYwZTMzZmMzYzgxNWNmZWNiL2xpYnJhcnkvYWxsb2Mvc3JjL3NsaWNlLnJzAABsDxAASgAAAKIAAAAZAAAAL3J1c3RjLzA1Zjk4NDZmODkzYjA5YTFiZTFmYzg1NjBlMzNmYzNjODE1Y2ZlY2IvbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzAMgPEABLAAAAjQUAABsAAAAvcnVzdGMvMDVmOTg0NmY4OTNiMDlhMWJlMWZjODU2MGUzM2ZjM2M4MTVjZmVjYi9saWJyYXJ5L2FsbG9jL3NyYy9yYXdfdmVjLnJzJBAQAEwAAAAqAgAAEQAAACcAAAAMAAAABAAAACgAAAApAAAAKgAAAC9ydXN0L2RlcHMvZGxtYWxsb2MtMC4yLjcvc3JjL2RsbWFsbG9jLnJzYXNzZXJ0aW9uIGZhaWxlZDogcHNpemUgPj0gc2l6ZSArIG1pbl9vdmVyaGVhZACYEBAAKQAAAKgEAAAJAAAAYXNzZXJ0aW9uIGZhaWxlZDogcHNpemUgPD0gc2l6ZSArIG1heF9vdmVyaGVhZAAAmBAQACkAAACuBAAADQAAAAEAAAAAAAAAZW50aXR5IG5vdCBmb3VuZHBlcm1pc3Npb24gZGVuaWVkY29ubmVjdGlvbiByZWZ1c2VkY29ubmVjdGlvbiByZXNldGhvc3QgdW5yZWFjaGFibGVuZXR3b3JrIHVucmVhY2hhYmxlY29ubmVjdGlvbiBhYm9ydGVkbm90IGNvbm5lY3RlZGFkZHJlc3MgaW4gdXNlYWRkcmVzcyBub3QgYXZhaWxhYmxlbmV0d29yayBkb3duYnJva2VuIHBpcGVlbnRpdHkgYWxyZWFkeSBleGlzdHNvcGVyYXRpb24gd291bGQgYmxvY2tub3QgYSBkaXJlY3RvcnlpcyBhIGRpcmVjdG9yeWRpcmVjdG9yeSBub3QgZW1wdHlyZWFkLW9ubHkgZmlsZXN5c3RlbSBvciBzdG9yYWdlIG1lZGl1bWZpbGVzeXN0ZW0gbG9vcCBvciBpbmRpcmVjdGlvbiBsaW1pdCAoZS5nLiBzeW1saW5rIGxvb3Apc3RhbGUgbmV0d29yayBmaWxlIGhhbmRsZWludmFsaWQgaW5wdXQgcGFyYW1ldGVyaW52YWxpZCBkYXRhdGltZWQgb3V0d3JpdGUgemVyb25vIHN0b3JhZ2Ugc3BhY2VzZWVrIG9uIHVuc2Vla2FibGUgZmlsZXF1b3RhIGV4Y2VlZGVkZmlsZSB0b28gbGFyZ2VyZXNvdXJjZSBidXN5ZXhlY3V0YWJsZSBmaWxlIGJ1c3lkZWFkbG9ja2Nyb3NzLWRldmljZSBsaW5rIG9yIHJlbmFtZXRvbyBtYW55IGxpbmtzaW52YWxpZCBmaWxlbmFtZWFyZ3VtZW50IGxpc3QgdG9vIGxvbmdvcGVyYXRpb24gaW50ZXJydXB0ZWR1bnN1cHBvcnRlZHVuZXhwZWN0ZWQgZW5kIG9mIGZpbGVvdXQgb2YgbWVtb3J5aW4gcHJvZ3Jlc3NvdGhlciBlcnJvcnVuY2F0ZWdvcml6ZWQgZXJyb3IgKG9zIGVycm9yICkAAAABAAAAAAAAADUUEAALAAAAQBQQAAEAAABtZW1vcnkgYWxsb2NhdGlvbiBvZiAgYnl0ZXMgZmFpbGVkAABcFBAAFQAAAHEUEAANAAAAbGlicmFyeS9zdGQvc3JjL2FsbG9jLnJzkBQQABgAAABjAQAA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", import.meta.url);
|
|
359
|
+
}
|
|
360
|
+
const imports = __wbg_get_imports();
|
|
361
|
+
|
|
362
|
+
if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {
|
|
363
|
+
module_or_path = fetch(module_or_path);
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
const { instance, module } = await __wbg_load(await module_or_path, imports);
|
|
367
|
+
|
|
368
|
+
return __wbg_finalize_init(instance, module);
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
export { __wbg_init as default, initSync, rank_turbulence_divergence };
|
package/dist/index.js
CHANGED
|
@@ -1525,10 +1525,20 @@ function tiedrank(arr) {
|
|
|
1525
1525
|
|
|
1526
1526
|
function rank_maxlog10(mixedelements) {
|
|
1527
1527
|
// Get maximum of log10 ranks from both systems, then round up
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
].
|
|
1531
|
-
|
|
1528
|
+
// Use loop to avoid stack overflow with large arrays (Math.max(...array) fails for 100K+ items)
|
|
1529
|
+
let max1 = mixedelements[[0]].ranks[0];
|
|
1530
|
+
for (let i = 1; i < mixedelements[[0]].ranks.length; i++) {
|
|
1531
|
+
if (mixedelements[[0]].ranks[i] > max1) max1 = mixedelements[[0]].ranks[i];
|
|
1532
|
+
}
|
|
1533
|
+
|
|
1534
|
+
let max2 = mixedelements[[1]].ranks[0];
|
|
1535
|
+
for (let i = 1; i < mixedelements[[1]].ranks.length; i++) {
|
|
1536
|
+
if (mixedelements[[1]].ranks[i] > max2) max2 = mixedelements[[1]].ranks[i];
|
|
1537
|
+
}
|
|
1538
|
+
|
|
1539
|
+
const logged_max1 = Math.log10(max1);
|
|
1540
|
+
const logged_max2 = Math.log10(max2);
|
|
1541
|
+
return Math.ceil(Math.max(logged_max1, logged_max2))
|
|
1532
1542
|
}
|
|
1533
1543
|
|
|
1534
1544
|
function rin(arr1, arr2) {
|
|
@@ -1661,14 +1671,26 @@ function wordShift_dat(me, dat) {
|
|
|
1661
1671
|
return out.slice().sort((a, b) => descending(Math.abs(a.metric), Math.abs(b.metric)))
|
|
1662
1672
|
}
|
|
1663
1673
|
|
|
1664
|
-
//
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
//
|
|
1669
|
-
|
|
1670
|
-
|
|
1674
|
+
// WASM module cache
|
|
1675
|
+
let wasmModule = null;
|
|
1676
|
+
let wasmInitialized = false;
|
|
1677
|
+
|
|
1678
|
+
// Eagerly try to load WASM (but don't block)
|
|
1679
|
+
(async function initWASM() {
|
|
1680
|
+
try {
|
|
1681
|
+
const module = await import('./allotaxonometer_wasm-Kv_ZqZ1J.js');
|
|
1682
|
+
await module.default(); // Initialize WASM
|
|
1683
|
+
wasmModule = module;
|
|
1684
|
+
wasmInitialized = true;
|
|
1685
|
+
console.log('✅ WASM module loaded successfully');
|
|
1686
|
+
} catch (e) {
|
|
1687
|
+
console.warn('⚠️ WASM not available, using JS fallback:', e.message);
|
|
1688
|
+
wasmModule = null;
|
|
1689
|
+
wasmInitialized = false;
|
|
1690
|
+
}
|
|
1691
|
+
})();
|
|
1671
1692
|
|
|
1693
|
+
// JavaScript fallback implementation
|
|
1672
1694
|
function divElems(inv_r1, inv_r2, alpha) {
|
|
1673
1695
|
if (alpha === Infinity) {
|
|
1674
1696
|
return inv_r1.map((d,i) => inv_r1[i] == inv_r2[i] ? 0 : Math.max(inv_r1[i], inv_r2[i]))
|
|
@@ -1681,20 +1703,8 @@ function divElems(inv_r1, inv_r2, alpha) {
|
|
|
1681
1703
|
}
|
|
1682
1704
|
}
|
|
1683
1705
|
|
|
1684
|
-
// This function calculates the normalization factor for the divergence between
|
|
1685
|
-
// two arrays of inverse ranks. It first extracts the counts from the mixedelements
|
|
1686
|
-
// parameter and finds the indices where the counts are greater than 0. It then
|
|
1687
|
-
// calculates the disjoint set for each array based on the number of non-zero
|
|
1688
|
-
// counts. If alpha is equal to infinity, it returns the sum of the elements in
|
|
1689
|
-
// inv_r1 and inv_r2 for the indices with non-zero counts. If alpha is equal to
|
|
1690
|
-
// 0, it returns the sum of the absolute value of the log of the ratio of each
|
|
1691
|
-
// element in inv_r1 and the disjoint set for inv_r2, and the absolute value of
|
|
1692
|
-
// the log of the ratio of each element in inv_r2 and the disjoint set for inv_r1.
|
|
1693
|
-
// Otherwise, it returns the sum of (alpha + 1)/alpha * (inv_r1^alpha - disjoint set^alpha)^(1/(alpha + 1))
|
|
1694
|
-
// for each element in inv_r1, and the same for inv_r2.
|
|
1695
|
-
|
|
1696
1706
|
function norm_divElems(mixedelements, inv_r1, inv_r2, alpha) {
|
|
1697
|
-
const c1 = mixedelements[0]['counts'];
|
|
1707
|
+
const c1 = mixedelements[0]['counts'];
|
|
1698
1708
|
const c2 = mixedelements[1]['counts'];
|
|
1699
1709
|
|
|
1700
1710
|
const indices1 = which(c1.map(d => d > 0));
|
|
@@ -1703,22 +1713,15 @@ function norm_divElems(mixedelements, inv_r1, inv_r2, alpha) {
|
|
|
1703
1713
|
const N1 = indices1.length;
|
|
1704
1714
|
const N2 = indices2.length;
|
|
1705
1715
|
|
|
1706
|
-
|
|
1707
|
-
// based on the number of non-zero counts in the array and the number of non-zero
|
|
1708
|
-
// counts in the other array. It returns 1/(number of non-zero counts in other array +
|
|
1709
|
-
// number of non-zero counts in this array/2)
|
|
1710
|
-
|
|
1711
|
-
function calc_disjoint(N1, N2) {
|
|
1716
|
+
function calc_disjoint(N1, N2) {
|
|
1712
1717
|
return( 1 / (N2 + N1/2) )
|
|
1713
1718
|
}
|
|
1714
|
-
|
|
1715
|
-
const inv_r1_disjoint = calc_disjoint(N1, N2);
|
|
1716
|
-
const inv_r2_disjoint = calc_disjoint(N2, N1);
|
|
1717
|
-
|
|
1719
|
+
|
|
1720
|
+
const inv_r1_disjoint = calc_disjoint(N1, N2);
|
|
1721
|
+
const inv_r2_disjoint = calc_disjoint(N2, N1);
|
|
1722
|
+
|
|
1718
1723
|
if (alpha === Infinity) {
|
|
1719
|
-
|
|
1720
1724
|
return sum(indices1.map((i) => inv_r1[i])) + sum(indices2.map((i) => inv_r2[i]))
|
|
1721
|
-
|
|
1722
1725
|
} else if (alpha === 0) {
|
|
1723
1726
|
const term1 = sum(
|
|
1724
1727
|
indices1.map((i) => Math.abs(Math.log(inv_r1[i] / inv_r2_disjoint)))
|
|
@@ -1726,9 +1729,9 @@ function norm_divElems(mixedelements, inv_r1, inv_r2, alpha) {
|
|
|
1726
1729
|
const term2 = sum(
|
|
1727
1730
|
indices2.map((i) => Math.abs(Math.log(inv_r2[i] / inv_r1_disjoint)))
|
|
1728
1731
|
);
|
|
1729
|
-
return term1 + term2
|
|
1732
|
+
return term1 + term2
|
|
1730
1733
|
} else {
|
|
1731
|
-
const term1 = (alpha+1)/alpha * sum(
|
|
1734
|
+
const term1 = (alpha+1)/alpha * sum(
|
|
1732
1735
|
indices1.map((i) => inv_r1[i]).map( d => (Math.abs(d**alpha) - inv_r2_disjoint**alpha)**(1./(alpha+1) ))
|
|
1733
1736
|
);
|
|
1734
1737
|
const term2 = (alpha+1)/alpha * sum(
|
|
@@ -1738,33 +1741,63 @@ function norm_divElems(mixedelements, inv_r1, inv_r2, alpha) {
|
|
|
1738
1741
|
}
|
|
1739
1742
|
}
|
|
1740
1743
|
|
|
1741
|
-
//
|
|
1742
|
-
|
|
1743
|
-
// inverse ranks for each mixed element array and then calculates the divergence
|
|
1744
|
-
// and normalization factors using the divElems and norm_divElems functions. It
|
|
1745
|
-
// returns the divergence divided by the normalization.
|
|
1746
|
-
|
|
1747
|
-
function rank_turbulence_divergence(mixedelements, alpha) {
|
|
1748
|
-
|
|
1744
|
+
// JS implementation (fallback)
|
|
1745
|
+
function rank_turbulence_divergence_js(mixedelements, alpha) {
|
|
1749
1746
|
const inv_r1 = mixedelements[0]['ranks'].map(d => Math.pow(d, -1));
|
|
1750
1747
|
const inv_r2 = mixedelements[1]['ranks'].map(d => Math.pow(d, -1));
|
|
1751
|
-
|
|
1748
|
+
|
|
1752
1749
|
const divergence_elements = divElems(inv_r1, inv_r2, alpha);
|
|
1753
1750
|
const normalization = norm_divElems(mixedelements, inv_r1, inv_r2, alpha);
|
|
1754
|
-
|
|
1755
|
-
return {
|
|
1756
|
-
|
|
1757
|
-
// the formula is a proportionality and miss the normalization constant
|
|
1758
|
-
// shown here.
|
|
1759
|
-
// Example: for alpha = infinity, for the rank 1 names on both systems, the formula as written is equal to max(1/1, 1/former_rank) = 1/1 =1
|
|
1760
|
-
// this value of 1 is then divided by the normalization constant.
|
|
1761
|
-
// this constant of proportionality is the reason for the difference between the 1/1 that the written formula gives you
|
|
1762
|
-
// and the decimal value that wordshift_dat states and which is actuallly used to sort the types.
|
|
1763
|
-
'divergence_elements': divergence_elements.map(d => d / normalization),
|
|
1751
|
+
|
|
1752
|
+
return {
|
|
1753
|
+
'divergence_elements': divergence_elements.map(d => d / normalization),
|
|
1764
1754
|
'normalization': normalization
|
|
1765
1755
|
}
|
|
1766
1756
|
}
|
|
1767
1757
|
|
|
1758
|
+
// Main export: SYNCHRONOUS - uses WASM if available, otherwise JS
|
|
1759
|
+
function rank_turbulence_divergence(mixedelements, alpha) {
|
|
1760
|
+
// If WASM is loaded, use it
|
|
1761
|
+
if (wasmInitialized && wasmModule) {
|
|
1762
|
+
try {
|
|
1763
|
+
// Call WASM implementation
|
|
1764
|
+
const result = wasmModule.rank_turbulence_divergence(
|
|
1765
|
+
mixedelements[0]['ranks'],
|
|
1766
|
+
mixedelements[1]['ranks'],
|
|
1767
|
+
mixedelements[0]['counts'],
|
|
1768
|
+
mixedelements[1]['counts'],
|
|
1769
|
+
alpha
|
|
1770
|
+
);
|
|
1771
|
+
|
|
1772
|
+
// WASM returns a Map, convert to plain object to match expected interface
|
|
1773
|
+
if (result instanceof Map) {
|
|
1774
|
+
return {
|
|
1775
|
+
divergence_elements: result.get('divergence_elements'),
|
|
1776
|
+
normalization: result.get('normalization')
|
|
1777
|
+
};
|
|
1778
|
+
}
|
|
1779
|
+
|
|
1780
|
+
// Handle plain object (in case WASM serialization changes in the future)
|
|
1781
|
+
if (result && typeof result === 'object' && result.divergence_elements) {
|
|
1782
|
+
return {
|
|
1783
|
+
divergence_elements: result.divergence_elements,
|
|
1784
|
+
normalization: result.normalization
|
|
1785
|
+
};
|
|
1786
|
+
}
|
|
1787
|
+
|
|
1788
|
+
// Unexpected format, fall back to JS
|
|
1789
|
+
console.warn('⚠️ WASM returned unexpected format, using JS fallback. Got:', result);
|
|
1790
|
+
return rank_turbulence_divergence_js(mixedelements, alpha);
|
|
1791
|
+
} catch (e) {
|
|
1792
|
+
console.warn('⚠️ WASM execution failed, using JS fallback:', e);
|
|
1793
|
+
return rank_turbulence_divergence_js(mixedelements, alpha);
|
|
1794
|
+
}
|
|
1795
|
+
} else {
|
|
1796
|
+
// Use JS fallback
|
|
1797
|
+
return rank_turbulence_divergence_js(mixedelements, alpha);
|
|
1798
|
+
}
|
|
1799
|
+
}
|
|
1800
|
+
|
|
1768
1801
|
function rank2coord(rank) { return Math.floor(Math.log10(rank) / (1/15)) }
|
|
1769
1802
|
|
|
1770
1803
|
// Augment information already in `me` class with coordinates.
|
|
@@ -1883,8 +1916,14 @@ function diamond_count(mixedelements, wordshift) {
|
|
|
1883
1916
|
}
|
|
1884
1917
|
|
|
1885
1918
|
const counts = diamond_counts(mixedelements);
|
|
1886
|
-
|
|
1887
|
-
|
|
1919
|
+
|
|
1920
|
+
// Find max manually to avoid stack overflow with large arrays
|
|
1921
|
+
let max_delta_loss = deltas_loss[0];
|
|
1922
|
+
for (let i = 1; i < deltas_loss.length; i++) {
|
|
1923
|
+
if (deltas_loss[i] > max_delta_loss) max_delta_loss = deltas_loss[i];
|
|
1924
|
+
}
|
|
1925
|
+
|
|
1926
|
+
return({'counts': counts, 'deltas': deltas, 'max_delta_loss': max_delta_loss})
|
|
1888
1927
|
}
|
|
1889
1928
|
|
|
1890
1929
|
/* allotaxonograph.svelte.ts generated by Svelte v5.34.3 */
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
let wasm;
|
|
2
|
+
let cachedUint8ArrayMemory0 = null;
|
|
3
|
+
function getUint8ArrayMemory0() {
|
|
4
|
+
if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {
|
|
5
|
+
cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);
|
|
6
|
+
}
|
|
7
|
+
return cachedUint8ArrayMemory0;
|
|
8
|
+
}
|
|
9
|
+
let cachedTextDecoder = new TextDecoder("utf-8", { ignoreBOM: true, fatal: true });
|
|
10
|
+
cachedTextDecoder.decode();
|
|
11
|
+
const MAX_SAFARI_DECODE_BYTES = 2146435072;
|
|
12
|
+
let numBytesDecoded = 0;
|
|
13
|
+
function decodeText(ptr, len) {
|
|
14
|
+
numBytesDecoded += len;
|
|
15
|
+
if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {
|
|
16
|
+
cachedTextDecoder = new TextDecoder("utf-8", { ignoreBOM: true, fatal: true });
|
|
17
|
+
cachedTextDecoder.decode();
|
|
18
|
+
numBytesDecoded = len;
|
|
19
|
+
}
|
|
20
|
+
return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));
|
|
21
|
+
}
|
|
22
|
+
function getStringFromWasm0(ptr, len) {
|
|
23
|
+
ptr = ptr >>> 0;
|
|
24
|
+
return decodeText(ptr, len);
|
|
25
|
+
}
|
|
26
|
+
function debugString(val) {
|
|
27
|
+
const type = typeof val;
|
|
28
|
+
if (type == "number" || type == "boolean" || val == null) {
|
|
29
|
+
return `${val}`;
|
|
30
|
+
}
|
|
31
|
+
if (type == "string") {
|
|
32
|
+
return `"${val}"`;
|
|
33
|
+
}
|
|
34
|
+
if (type == "symbol") {
|
|
35
|
+
const description = val.description;
|
|
36
|
+
if (description == null) {
|
|
37
|
+
return "Symbol";
|
|
38
|
+
} else {
|
|
39
|
+
return `Symbol(${description})`;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (type == "function") {
|
|
43
|
+
const name = val.name;
|
|
44
|
+
if (typeof name == "string" && name.length > 0) {
|
|
45
|
+
return `Function(${name})`;
|
|
46
|
+
} else {
|
|
47
|
+
return "Function";
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (Array.isArray(val)) {
|
|
51
|
+
const length = val.length;
|
|
52
|
+
let debug = "[";
|
|
53
|
+
if (length > 0) {
|
|
54
|
+
debug += debugString(val[0]);
|
|
55
|
+
}
|
|
56
|
+
for (let i = 1; i < length; i++) {
|
|
57
|
+
debug += ", " + debugString(val[i]);
|
|
58
|
+
}
|
|
59
|
+
debug += "]";
|
|
60
|
+
return debug;
|
|
61
|
+
}
|
|
62
|
+
const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val));
|
|
63
|
+
let className;
|
|
64
|
+
if (builtInMatches && builtInMatches.length > 1) {
|
|
65
|
+
className = builtInMatches[1];
|
|
66
|
+
} else {
|
|
67
|
+
return toString.call(val);
|
|
68
|
+
}
|
|
69
|
+
if (className == "Object") {
|
|
70
|
+
try {
|
|
71
|
+
return "Object(" + JSON.stringify(val) + ")";
|
|
72
|
+
} catch (_) {
|
|
73
|
+
return "Object";
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (val instanceof Error) {
|
|
77
|
+
return `${val.name}: ${val.message}
|
|
78
|
+
${val.stack}`;
|
|
79
|
+
}
|
|
80
|
+
return className;
|
|
81
|
+
}
|
|
82
|
+
let WASM_VECTOR_LEN = 0;
|
|
83
|
+
const cachedTextEncoder = new TextEncoder();
|
|
84
|
+
if (!("encodeInto" in cachedTextEncoder)) {
|
|
85
|
+
cachedTextEncoder.encodeInto = function(arg, view) {
|
|
86
|
+
const buf = cachedTextEncoder.encode(arg);
|
|
87
|
+
view.set(buf);
|
|
88
|
+
return {
|
|
89
|
+
read: arg.length,
|
|
90
|
+
written: buf.length
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
function passStringToWasm0(arg, malloc, realloc) {
|
|
95
|
+
if (realloc === void 0) {
|
|
96
|
+
const buf = cachedTextEncoder.encode(arg);
|
|
97
|
+
const ptr2 = malloc(buf.length, 1) >>> 0;
|
|
98
|
+
getUint8ArrayMemory0().subarray(ptr2, ptr2 + buf.length).set(buf);
|
|
99
|
+
WASM_VECTOR_LEN = buf.length;
|
|
100
|
+
return ptr2;
|
|
101
|
+
}
|
|
102
|
+
let len = arg.length;
|
|
103
|
+
let ptr = malloc(len, 1) >>> 0;
|
|
104
|
+
const mem = getUint8ArrayMemory0();
|
|
105
|
+
let offset = 0;
|
|
106
|
+
for (; offset < len; offset++) {
|
|
107
|
+
const code = arg.charCodeAt(offset);
|
|
108
|
+
if (code > 127) break;
|
|
109
|
+
mem[ptr + offset] = code;
|
|
110
|
+
}
|
|
111
|
+
if (offset !== len) {
|
|
112
|
+
if (offset !== 0) {
|
|
113
|
+
arg = arg.slice(offset);
|
|
114
|
+
}
|
|
115
|
+
ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;
|
|
116
|
+
const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);
|
|
117
|
+
const ret = cachedTextEncoder.encodeInto(arg, view);
|
|
118
|
+
offset += ret.written;
|
|
119
|
+
ptr = realloc(ptr, len, offset, 1) >>> 0;
|
|
120
|
+
}
|
|
121
|
+
WASM_VECTOR_LEN = offset;
|
|
122
|
+
return ptr;
|
|
123
|
+
}
|
|
124
|
+
let cachedDataViewMemory0 = null;
|
|
125
|
+
function getDataViewMemory0() {
|
|
126
|
+
if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || cachedDataViewMemory0.buffer.detached === void 0 && cachedDataViewMemory0.buffer !== wasm.memory.buffer) {
|
|
127
|
+
cachedDataViewMemory0 = new DataView(wasm.memory.buffer);
|
|
128
|
+
}
|
|
129
|
+
return cachedDataViewMemory0;
|
|
130
|
+
}
|
|
131
|
+
let cachedFloat64ArrayMemory0 = null;
|
|
132
|
+
function getFloat64ArrayMemory0() {
|
|
133
|
+
if (cachedFloat64ArrayMemory0 === null || cachedFloat64ArrayMemory0.byteLength === 0) {
|
|
134
|
+
cachedFloat64ArrayMemory0 = new Float64Array(wasm.memory.buffer);
|
|
135
|
+
}
|
|
136
|
+
return cachedFloat64ArrayMemory0;
|
|
137
|
+
}
|
|
138
|
+
function passArrayF64ToWasm0(arg, malloc) {
|
|
139
|
+
const ptr = malloc(arg.length * 8, 8) >>> 0;
|
|
140
|
+
getFloat64ArrayMemory0().set(arg, ptr / 8);
|
|
141
|
+
WASM_VECTOR_LEN = arg.length;
|
|
142
|
+
return ptr;
|
|
143
|
+
}
|
|
144
|
+
function rank_turbulence_divergence(ranks1, ranks2, counts1, counts2, alpha) {
|
|
145
|
+
const ptr0 = passArrayF64ToWasm0(ranks1, wasm.__wbindgen_malloc);
|
|
146
|
+
const len0 = WASM_VECTOR_LEN;
|
|
147
|
+
const ptr1 = passArrayF64ToWasm0(ranks2, wasm.__wbindgen_malloc);
|
|
148
|
+
const len1 = WASM_VECTOR_LEN;
|
|
149
|
+
const ptr2 = passArrayF64ToWasm0(counts1, wasm.__wbindgen_malloc);
|
|
150
|
+
const len2 = WASM_VECTOR_LEN;
|
|
151
|
+
const ptr3 = passArrayF64ToWasm0(counts2, wasm.__wbindgen_malloc);
|
|
152
|
+
const len3 = WASM_VECTOR_LEN;
|
|
153
|
+
const ret = wasm.rank_turbulence_divergence(ptr0, len0, ptr1, len1, ptr2, len2, ptr3, len3, alpha);
|
|
154
|
+
return ret;
|
|
155
|
+
}
|
|
156
|
+
const EXPECTED_RESPONSE_TYPES = /* @__PURE__ */ new Set(["basic", "cors", "default"]);
|
|
157
|
+
async function __wbg_load(module, imports) {
|
|
158
|
+
if (typeof Response === "function" && module instanceof Response) {
|
|
159
|
+
if (typeof WebAssembly.instantiateStreaming === "function") {
|
|
160
|
+
try {
|
|
161
|
+
return await WebAssembly.instantiateStreaming(module, imports);
|
|
162
|
+
} catch (e) {
|
|
163
|
+
const validResponse = module.ok && EXPECTED_RESPONSE_TYPES.has(module.type);
|
|
164
|
+
if (validResponse && module.headers.get("Content-Type") !== "application/wasm") {
|
|
165
|
+
console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e);
|
|
166
|
+
} else {
|
|
167
|
+
throw e;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
const bytes = await module.arrayBuffer();
|
|
172
|
+
return await WebAssembly.instantiate(bytes, imports);
|
|
173
|
+
} else {
|
|
174
|
+
const instance = await WebAssembly.instantiate(module, imports);
|
|
175
|
+
if (instance instanceof WebAssembly.Instance) {
|
|
176
|
+
return { instance, module };
|
|
177
|
+
} else {
|
|
178
|
+
return instance;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
function __wbg_get_imports() {
|
|
183
|
+
const imports = {};
|
|
184
|
+
imports.wbg = {};
|
|
185
|
+
imports.wbg.__wbg_Error_e17e777aac105295 = function(arg0, arg1) {
|
|
186
|
+
const ret = Error(getStringFromWasm0(arg0, arg1));
|
|
187
|
+
return ret;
|
|
188
|
+
};
|
|
189
|
+
imports.wbg.__wbg_new_19c25a3f2fa63a02 = function() {
|
|
190
|
+
const ret = new Object();
|
|
191
|
+
return ret;
|
|
192
|
+
};
|
|
193
|
+
imports.wbg.__wbg_new_1f3a344cf3123716 = function() {
|
|
194
|
+
const ret = new Array();
|
|
195
|
+
return ret;
|
|
196
|
+
};
|
|
197
|
+
imports.wbg.__wbg_new_2ff1f68f3676ea53 = function() {
|
|
198
|
+
const ret = /* @__PURE__ */ new Map();
|
|
199
|
+
return ret;
|
|
200
|
+
};
|
|
201
|
+
imports.wbg.__wbg_set_3f1d0b984ed272ed = function(arg0, arg1, arg2) {
|
|
202
|
+
arg0[arg1] = arg2;
|
|
203
|
+
};
|
|
204
|
+
imports.wbg.__wbg_set_90f6c0f7bd8c0415 = function(arg0, arg1, arg2) {
|
|
205
|
+
arg0[arg1 >>> 0] = arg2;
|
|
206
|
+
};
|
|
207
|
+
imports.wbg.__wbg_set_b7f1cf4fae26fe2a = function(arg0, arg1, arg2) {
|
|
208
|
+
const ret = arg0.set(arg1, arg2);
|
|
209
|
+
return ret;
|
|
210
|
+
};
|
|
211
|
+
imports.wbg.__wbg_wbindgendebugstring_99ef257a3ddda34d = function(arg0, arg1) {
|
|
212
|
+
const ret = debugString(arg1);
|
|
213
|
+
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
|
214
|
+
const len1 = WASM_VECTOR_LEN;
|
|
215
|
+
getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
|
|
216
|
+
getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
|
|
217
|
+
};
|
|
218
|
+
imports.wbg.__wbg_wbindgenisstring_d4fa939789f003b0 = function(arg0) {
|
|
219
|
+
const ret = typeof arg0 === "string";
|
|
220
|
+
return ret;
|
|
221
|
+
};
|
|
222
|
+
imports.wbg.__wbg_wbindgenthrow_451ec1a8469d7eb6 = function(arg0, arg1) {
|
|
223
|
+
throw new Error(getStringFromWasm0(arg0, arg1));
|
|
224
|
+
};
|
|
225
|
+
imports.wbg.__wbindgen_cast_2241b6af4c4b2941 = function(arg0, arg1) {
|
|
226
|
+
const ret = getStringFromWasm0(arg0, arg1);
|
|
227
|
+
return ret;
|
|
228
|
+
};
|
|
229
|
+
imports.wbg.__wbindgen_cast_4625c577ab2ec9ee = function(arg0) {
|
|
230
|
+
const ret = BigInt.asUintN(64, arg0);
|
|
231
|
+
return ret;
|
|
232
|
+
};
|
|
233
|
+
imports.wbg.__wbindgen_cast_9ae0607507abb057 = function(arg0) {
|
|
234
|
+
const ret = arg0;
|
|
235
|
+
return ret;
|
|
236
|
+
};
|
|
237
|
+
imports.wbg.__wbindgen_cast_d6cd19b81560fd6e = function(arg0) {
|
|
238
|
+
const ret = arg0;
|
|
239
|
+
return ret;
|
|
240
|
+
};
|
|
241
|
+
imports.wbg.__wbindgen_init_externref_table = function() {
|
|
242
|
+
const table = wasm.__wbindgen_export_2;
|
|
243
|
+
const offset = table.grow(4);
|
|
244
|
+
table.set(0, void 0);
|
|
245
|
+
table.set(offset + 0, void 0);
|
|
246
|
+
table.set(offset + 1, null);
|
|
247
|
+
table.set(offset + 2, true);
|
|
248
|
+
table.set(offset + 3, false);
|
|
249
|
+
};
|
|
250
|
+
return imports;
|
|
251
|
+
}
|
|
252
|
+
function __wbg_finalize_init(instance, module) {
|
|
253
|
+
wasm = instance.exports;
|
|
254
|
+
__wbg_init.__wbindgen_wasm_module = module;
|
|
255
|
+
cachedDataViewMemory0 = null;
|
|
256
|
+
cachedFloat64ArrayMemory0 = null;
|
|
257
|
+
cachedUint8ArrayMemory0 = null;
|
|
258
|
+
wasm.__wbindgen_start();
|
|
259
|
+
return wasm;
|
|
260
|
+
}
|
|
261
|
+
function initSync(module) {
|
|
262
|
+
if (wasm !== void 0) return wasm;
|
|
263
|
+
if (typeof module !== "undefined") {
|
|
264
|
+
if (Object.getPrototypeOf(module) === Object.prototype) {
|
|
265
|
+
({ module } = module);
|
|
266
|
+
} else {
|
|
267
|
+
console.warn("using deprecated parameters for `initSync()`; pass a single object instead");
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
const imports = __wbg_get_imports();
|
|
271
|
+
if (!(module instanceof WebAssembly.Module)) {
|
|
272
|
+
module = new WebAssembly.Module(module);
|
|
273
|
+
}
|
|
274
|
+
const instance = new WebAssembly.Instance(module, imports);
|
|
275
|
+
return __wbg_finalize_init(instance, module);
|
|
276
|
+
}
|
|
277
|
+
async function __wbg_init(module_or_path) {
|
|
278
|
+
if (wasm !== void 0) return wasm;
|
|
279
|
+
if (typeof module_or_path !== "undefined") {
|
|
280
|
+
if (Object.getPrototypeOf(module_or_path) === Object.prototype) {
|
|
281
|
+
({ module_or_path } = module_or_path);
|
|
282
|
+
} else {
|
|
283
|
+
console.warn("using deprecated parameters for the initialization function; pass a single object instead");
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
if (typeof module_or_path === "undefined") {
|
|
287
|
+
module_or_path = new URL("allotaxonometer_wasm_bg.wasm", import.meta.url);
|
|
288
|
+
}
|
|
289
|
+
const imports = __wbg_get_imports();
|
|
290
|
+
if (typeof module_or_path === "string" || typeof Request === "function" && module_or_path instanceof Request || typeof URL === "function" && module_or_path instanceof URL) {
|
|
291
|
+
module_or_path = fetch(module_or_path);
|
|
292
|
+
}
|
|
293
|
+
const { instance, module } = await __wbg_load(await module_or_path, imports);
|
|
294
|
+
return __wbg_finalize_init(instance, module);
|
|
295
|
+
}
|
|
296
|
+
export {
|
|
297
|
+
__wbg_init as default,
|
|
298
|
+
initSync,
|
|
299
|
+
rank_turbulence_divergence
|
|
300
|
+
};
|
package/dist/ssr/index.js
CHANGED
|
@@ -599,11 +599,17 @@ function tiedrank(arr) {
|
|
|
599
599
|
return ranks;
|
|
600
600
|
}
|
|
601
601
|
function rank_maxlog10(mixedelements) {
|
|
602
|
-
let
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
602
|
+
let max1 = mixedelements[[0]].ranks[0];
|
|
603
|
+
for (let i = 1; i < mixedelements[[0]].ranks.length; i++) {
|
|
604
|
+
if (mixedelements[[0]].ranks[i] > max1) max1 = mixedelements[[0]].ranks[i];
|
|
605
|
+
}
|
|
606
|
+
let max2 = mixedelements[[1]].ranks[0];
|
|
607
|
+
for (let i = 1; i < mixedelements[[1]].ranks.length; i++) {
|
|
608
|
+
if (mixedelements[[1]].ranks[i] > max2) max2 = mixedelements[[1]].ranks[i];
|
|
609
|
+
}
|
|
610
|
+
const logged_max1 = Math.log10(max1);
|
|
611
|
+
const logged_max2 = Math.log10(max2);
|
|
612
|
+
return Math.ceil(Math.max(logged_max1, logged_max2));
|
|
607
613
|
}
|
|
608
614
|
function rin(arr1, arr2) {
|
|
609
615
|
return Array.from(arr1, (x) => {
|
|
@@ -704,6 +710,21 @@ function wordShift_dat(me, dat) {
|
|
|
704
710
|
}
|
|
705
711
|
return out.slice().sort((a, b) => descending(Math.abs(a.metric), Math.abs(b.metric)));
|
|
706
712
|
}
|
|
713
|
+
let wasmModule = null;
|
|
714
|
+
let wasmInitialized = false;
|
|
715
|
+
(async function initWASM() {
|
|
716
|
+
try {
|
|
717
|
+
const module = await import("./assets/allotaxonometer_wasm-BIgsRP_p.js");
|
|
718
|
+
await module.default();
|
|
719
|
+
wasmModule = module;
|
|
720
|
+
wasmInitialized = true;
|
|
721
|
+
console.log("✅ WASM module loaded successfully");
|
|
722
|
+
} catch (e) {
|
|
723
|
+
console.warn("⚠️ WASM not available, using JS fallback:", e.message);
|
|
724
|
+
wasmModule = null;
|
|
725
|
+
wasmInitialized = false;
|
|
726
|
+
}
|
|
727
|
+
})();
|
|
707
728
|
function divElems(inv_r1, inv_r2, alpha) {
|
|
708
729
|
if (alpha === Infinity) {
|
|
709
730
|
return inv_r1.map((d, i) => inv_r1[i] == inv_r2[i] ? 0 : Math.max(inv_r1[i], inv_r2[i]));
|
|
@@ -747,24 +768,48 @@ function norm_divElems(mixedelements, inv_r1, inv_r2, alpha) {
|
|
|
747
768
|
return term1 + term2;
|
|
748
769
|
}
|
|
749
770
|
}
|
|
750
|
-
function
|
|
771
|
+
function rank_turbulence_divergence_js(mixedelements, alpha) {
|
|
751
772
|
const inv_r1 = mixedelements[0]["ranks"].map((d) => Math.pow(d, -1));
|
|
752
773
|
const inv_r2 = mixedelements[1]["ranks"].map((d) => Math.pow(d, -1));
|
|
753
774
|
const divergence_elements = divElems(inv_r1, inv_r2, alpha);
|
|
754
775
|
const normalization = norm_divElems(mixedelements, inv_r1, inv_r2, alpha);
|
|
755
776
|
return {
|
|
756
|
-
// the divergence used to wordshift dat to sort name in wordshift plot
|
|
757
|
-
// is equal to the formula in the upperleft of the diamond plot. However
|
|
758
|
-
// the formula is a proportionality and miss the normalization constant
|
|
759
|
-
// shown here.
|
|
760
|
-
// Example: for alpha = infinity, for the rank 1 names on both systems, the formula as written is equal to max(1/1, 1/former_rank) = 1/1 =1
|
|
761
|
-
// this value of 1 is then divided by the normalization constant.
|
|
762
|
-
// this constant of proportionality is the reason for the difference between the 1/1 that the written formula gives you
|
|
763
|
-
// and the decimal value that wordshift_dat states and which is actuallly used to sort the types.
|
|
764
777
|
"divergence_elements": divergence_elements.map((d) => d / normalization),
|
|
765
778
|
"normalization": normalization
|
|
766
779
|
};
|
|
767
780
|
}
|
|
781
|
+
function rank_turbulence_divergence(mixedelements, alpha) {
|
|
782
|
+
if (wasmInitialized && wasmModule) {
|
|
783
|
+
try {
|
|
784
|
+
const result = wasmModule.rank_turbulence_divergence(
|
|
785
|
+
mixedelements[0]["ranks"],
|
|
786
|
+
mixedelements[1]["ranks"],
|
|
787
|
+
mixedelements[0]["counts"],
|
|
788
|
+
mixedelements[1]["counts"],
|
|
789
|
+
alpha
|
|
790
|
+
);
|
|
791
|
+
if (result instanceof Map) {
|
|
792
|
+
return {
|
|
793
|
+
divergence_elements: result.get("divergence_elements"),
|
|
794
|
+
normalization: result.get("normalization")
|
|
795
|
+
};
|
|
796
|
+
}
|
|
797
|
+
if (result && typeof result === "object" && result.divergence_elements) {
|
|
798
|
+
return {
|
|
799
|
+
divergence_elements: result.divergence_elements,
|
|
800
|
+
normalization: result.normalization
|
|
801
|
+
};
|
|
802
|
+
}
|
|
803
|
+
console.warn("⚠️ WASM returned unexpected format, using JS fallback. Got:", result);
|
|
804
|
+
return rank_turbulence_divergence_js(mixedelements, alpha);
|
|
805
|
+
} catch (e) {
|
|
806
|
+
console.warn("⚠️ WASM execution failed, using JS fallback:", e);
|
|
807
|
+
return rank_turbulence_divergence_js(mixedelements, alpha);
|
|
808
|
+
}
|
|
809
|
+
} else {
|
|
810
|
+
return rank_turbulence_divergence_js(mixedelements, alpha);
|
|
811
|
+
}
|
|
812
|
+
}
|
|
768
813
|
function rank2coord(rank) {
|
|
769
814
|
return Math.floor(Math.log10(rank) / (1 / 15));
|
|
770
815
|
}
|
|
@@ -861,7 +906,11 @@ function diamond_count(mixedelements, wordshift) {
|
|
|
861
906
|
if (mixedelements[1]["ranks"][i] < mixedelements[0]["ranks"][i]) ;
|
|
862
907
|
}
|
|
863
908
|
const counts = diamond_counts(mixedelements);
|
|
864
|
-
|
|
909
|
+
let max_delta_loss = deltas_loss[0];
|
|
910
|
+
for (let i = 1; i < deltas_loss.length; i++) {
|
|
911
|
+
if (deltas_loss[i] > max_delta_loss) max_delta_loss = deltas_loss[i];
|
|
912
|
+
}
|
|
913
|
+
return { "counts": counts, "deltas": deltas, "max_delta_loss": max_delta_loss };
|
|
865
914
|
}
|
|
866
915
|
class Allotaxonograph {
|
|
867
916
|
// Core data state
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "allotaxonometer-ui",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.15",
|
|
4
4
|
"description": "Headless UI components for allotaxonometer visualizations built with Svelte 5",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -53,9 +53,10 @@
|
|
|
53
53
|
"vitest": "^3.2.3"
|
|
54
54
|
},
|
|
55
55
|
"scripts": {
|
|
56
|
-
"build": "
|
|
56
|
+
"build:wasm": "cd rust-wasm && wasm-pack build --target web --out-dir ../src/lib/utils/wasm",
|
|
57
|
+
"build": "npm run build:wasm && vite build",
|
|
57
58
|
"build:ssr": "vite build --config vite.ssr.config.js",
|
|
58
|
-
"build:all": "npm run build && npm run build:ssr",
|
|
59
|
+
"build:all": "npm run build:wasm && npm run build && npm run build:ssr",
|
|
59
60
|
"test": "vitest",
|
|
60
61
|
"test:run": "vitest run",
|
|
61
62
|
"test:ssr": "npm run build:ssr && vitest run tests/ssr.test.js",
|