From 096428ee5a301b87a284c68c04e90cc0ba47f8e8 Mon Sep 17 00:00:00 2001 From: bakape Date: Sun, 13 Sep 2020 17:13:37 +0300 Subject: [PATCH 01/26] change branch --- frameworks/keyed/yew/Cargo.toml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/frameworks/keyed/yew/Cargo.toml b/frameworks/keyed/yew/Cargo.toml index e18ac269b..3f924cd46 100644 --- a/frameworks/keyed/yew/Cargo.toml +++ b/frameworks/keyed/yew/Cargo.toml @@ -1,23 +1,23 @@ [package] -name = "js-framework-benchmark-yew" -version = "1.0.0" authors = ["Isamu Mogi "] edition = "2018" +name = "js-framework-benchmark-yew" +version = "1.0.0" [lib] crate-type = ["cdylib"] [dependencies] -rand = { version = "0.7.3", features = ["wasm-bindgen", "small_rng"] } +rand = {version = "0.7.3", features = ["wasm-bindgen", "small_rng"]} wasm-bindgen = "0.2.62" # UPDATE TO USE YOUR BRANCH -yew = { git = "https://github.com/yewstack/yew", branch = "master" } +yew = {git = "https://github.com/bakape/yew ", branch = "feature/opt-keyed-diff"} # UPDATE TO USE YOUR BRANCH [profile.release] -lto = true codegen-units = 1 +lto = true panic = "abort" [package.metadata.wasm-pack.profile.release] From b9dc1e7cd69675eaddea5203b717dbb9ecec0ab7 Mon Sep 17 00:00:00 2001 From: bakape Date: Sat, 19 Sep 2020 12:29:41 +0300 Subject: [PATCH 02/26] local becnhmarking setup --- .gitignore | 5 +- bechmark_change.sh | 25 + .../keyed/wasm-bindgen/bundled-dist/1.js | 1 - .../57b853b60f01dd1d4d7e.module.wasm | Bin 34061 -> 0 bytes .../keyed/wasm-bindgen/bundled-dist/index.js | 1 - .../js-framework-benchmark-yew.js | 489 ------------------ .../js-framework-benchmark-yew_bg.wasm | Bin 142093 -> 0 bytes frameworks/keyed/yew/Cargo.toml | 2 +- frameworks/keyed/yew/bundled-dist/index.html | 16 - .../js-framework-benchmark-yew.js | 489 ------------------ .../js-framework-benchmark-yew_bg.wasm | Bin 142092 -> 0 bytes webdriver-ts-results/.gitignore | 1 + webdriver-ts-results/src/.gitignore | 1 + webdriver-ts-results/src/results.ts | 56 -- webdriver-ts-results/table.html | 56 -- webdriver-ts/.gitignore | 1 + webdriver-ts/results.json | 1 - 17 files changed, 33 insertions(+), 1111 deletions(-) create mode 100755 bechmark_change.sh delete mode 100644 frameworks/keyed/wasm-bindgen/bundled-dist/1.js delete mode 100644 frameworks/keyed/wasm-bindgen/bundled-dist/57b853b60f01dd1d4d7e.module.wasm delete mode 100644 frameworks/keyed/wasm-bindgen/bundled-dist/index.js delete mode 100644 frameworks/keyed/yew-baseline/bundled-dist/js-framework-benchmark-yew.js delete mode 100644 frameworks/keyed/yew-baseline/bundled-dist/js-framework-benchmark-yew_bg.wasm delete mode 100644 frameworks/keyed/yew/bundled-dist/index.html delete mode 100644 frameworks/keyed/yew/bundled-dist/js-framework-benchmark-yew.js delete mode 100644 frameworks/keyed/yew/bundled-dist/js-framework-benchmark-yew_bg.wasm create mode 100644 webdriver-ts-results/.gitignore create mode 100644 webdriver-ts-results/src/.gitignore delete mode 100644 webdriver-ts-results/src/results.ts delete mode 100644 webdriver-ts-results/table.html create mode 100644 webdriver-ts/.gitignore delete mode 100644 webdriver-ts/results.json diff --git a/.gitignore b/.gitignore index 2a8381cf9..969d3eb39 100644 --- a/.gitignore +++ b/.gitignore @@ -77,4 +77,7 @@ glimmer-*/tmp Cargo.lock # emacs -*~ \ No newline at end of file +*~ + +bundled-dist/*.js +bundled-dist/*.wasm diff --git a/bechmark_change.sh b/bechmark_change.sh new file mode 100755 index 000000000..b29478e8b --- /dev/null +++ b/bechmark_change.sh @@ -0,0 +1,25 @@ +#! /bin/bash +# Usage: ./bechmark_change.sh CHANGE_BRANCH +set -euo pipefail # https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/ + +sed -i 's/PLACEHOLDER/'"${1/\//\\\/}"'/' frameworks/keyed/yew/Cargo.toml + +npm install -d +(cd frameworks/keyed/wasm-bindgen && + npm run build-prod) +(cd frameworks/keyed/yew && + npm install -d && + npm run build-prod) +(cd frameworks/keyed/yew-baseline && + npm install -d && + npm run build-prod) + +(cd webdriver-ts-results && + npm install -d) +(cd webdriver-ts && + npm install -d && + npm run build-prod && + npm run bench -- --headless keyed/yew keyed/yew-baseline && + npm run results) + +chromium http://localhost:8080/webdriver-ts-results/table.html diff --git a/frameworks/keyed/wasm-bindgen/bundled-dist/1.js b/frameworks/keyed/wasm-bindgen/bundled-dist/1.js deleted file mode 100644 index e1bb375a3..000000000 --- a/frameworks/keyed/wasm-bindgen/bundled-dist/1.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[1],[,function(n,t,e){"use strict";e.r(t);var r=e(3),u=e(2);e.d(t,"main_js",(function(){return u.N})),e.d(t,"__wbindgen_object_drop_ref",(function(){return u.K})),e.d(t,"__wbg_tagName_7a365cf2774b3613",(function(){return u.B})),e.d(t,"__wbg_parentElement_14fd8001596348c2",(function(){return u.s})),e.d(t,"__wbg_getAttribute_937faad6a923ab3c",(function(){return u.j})),e.d(t,"__wbg_random_39c02e3d0f8a020f",(function(){return u.u})),e.d(t,"__wbg_cloneNode_6fbde9e171a9377e",(function(){return u.e})),e.d(t,"__wbg_firstChild_cc345cf09851e11c",(function(){return u.i})),e.d(t,"__wbg_nextSibling_f1e7154ee59f6a7d",(function(){return u.r})),e.d(t,"__wbg_settextContent_917f10f51a06bd14",(function(){return u.A})),e.d(t,"__wbg_setAttribute_1e9980589f904db6",(function(){return u.x})),e.d(t,"__wbg_appendChild_3d4ec7dbf3472d31",(function(){return u.b})),e.d(t,"__wbg_target_f6e8223f5b843ce6",(function(){return u.C})),e.d(t,"__wbg_id_2d7adf535b20f6e9",(function(){return u.n})),e.d(t,"__wbg_preventDefault_df37cc956d4ebefa",(function(){return u.t})),e.d(t,"__wbg_setclassName_f867a8bb05e9072a",(function(){return u.y})),e.d(t,"__wbg_classList_26cad35d60a907de",(function(){return u.d})),e.d(t,"__wbg_contains_6f90cb529cd138a3",(function(){return u.f})),e.d(t,"__wbindgen_object_clone_ref",(function(){return u.J})),e.d(t,"__wbg_insertBefore_e617280513985f61",(function(){return u.o})),e.d(t,"__wbg_remove_00f8ed36a23a14e5",(function(){return u.v})),e.d(t,"__wbg_instanceof_Window_17fdb5cd280d476d",(function(){return u.p})),e.d(t,"__wbg_document_c26d0f423c143e0c",(function(){return u.h})),e.d(t,"__wbg_createElement_44ab59c4ad367831",(function(){return u.g})),e.d(t,"__wbg_setinnerHTML_3eadb06031bae824",(function(){return u.z})),e.d(t,"__wbg_getElementById_df597d226f179219",(function(){return u.k})),e.d(t,"__wbg_addEventListener_0902c64e0479891b",(function(){return u.a})),e.d(t,"__wbindgen_cb_forget",(function(){return u.F})),e.d(t,"__wbindgen_cb_drop",(function(){return u.E})),e.d(t,"__wbg_self_c0d3a5923e013647",(function(){return u.w})),e.d(t,"__wbg_window_7ee6c8be3432927d",(function(){return u.D})),e.d(t,"__wbg_globalThis_c6de1d938e089cf0",(function(){return u.l})),e.d(t,"__wbg_global_c9a01ce4680907f8",(function(){return u.m})),e.d(t,"__wbindgen_is_undefined",(function(){return u.I})),e.d(t,"__wbg_newnoargs_8aad4a6554f38345",(function(){return u.q})),e.d(t,"__wbg_call_1f85aaa5836dfb23",(function(){return u.c})),e.d(t,"__wbindgen_debug_string",(function(){return u.H})),e.d(t,"__wbindgen_throw",(function(){return u.M})),e.d(t,"__wbindgen_rethrow",(function(){return u.L})),e.d(t,"__wbindgen_closure_wrapper64",(function(){return u.G})),r.e()},function(n,t,e){"use strict";(function(n,r){e.d(t,"N",(function(){return v})),e.d(t,"K",(function(){return j})),e.d(t,"B",(function(){return A})),e.d(t,"s",(function(){return T})),e.d(t,"j",(function(){return C})),e.d(t,"u",(function(){return N})),e.d(t,"e",(function(){return k})),e.d(t,"i",(function(){return L})),e.d(t,"r",(function(){return M})),e.d(t,"A",(function(){return B})),e.d(t,"x",(function(){return D})),e.d(t,"b",(function(){return I})),e.d(t,"C",(function(){return S})),e.d(t,"n",(function(){return F})),e.d(t,"t",(function(){return $})),e.d(t,"y",(function(){return J})),e.d(t,"d",(function(){return P})),e.d(t,"f",(function(){return q})),e.d(t,"J",(function(){return H})),e.d(t,"o",(function(){return z})),e.d(t,"v",(function(){return G})),e.d(t,"p",(function(){return K})),e.d(t,"h",(function(){return W})),e.d(t,"g",(function(){return U})),e.d(t,"z",(function(){return Q})),e.d(t,"k",(function(){return R})),e.d(t,"a",(function(){return V})),e.d(t,"F",(function(){return X})),e.d(t,"E",(function(){return Y})),e.d(t,"w",(function(){return Z})),e.d(t,"D",(function(){return nn})),e.d(t,"l",(function(){return tn})),e.d(t,"m",(function(){return en})),e.d(t,"I",(function(){return rn})),e.d(t,"q",(function(){return un})),e.d(t,"c",(function(){return on})),e.d(t,"H",(function(){return cn})),e.d(t,"M",(function(){return fn})),e.d(t,"L",(function(){return dn})),e.d(t,"G",(function(){return _n}));var u=e(3);const o=new Array(32).fill(void 0);function c(n){return o[n]}o.push(void 0,null,!0,!1);let i=o.length;function f(n){const t=c(n);return function(n){n<36||(o[n]=i,i=n)}(n),t}function d(n){i===o.length&&o.push(o.length+1);const t=i;return i=o[t],o[t]=n,t}let _=0,a=null;function l(){return null!==a&&a.buffer===u.g.buffer||(a=new Uint8Array(u.g.buffer)),a}let b=new("undefined"==typeof TextEncoder?(0,n.require)("util").TextEncoder:TextEncoder)("utf-8");const s="function"==typeof b.encodeInto?function(n,t){return b.encodeInto(n,t)}:function(n,t){const e=b.encode(n);return t.set(e),{read:n.length,written:e.length}};function g(n,t,e){if(void 0===e){const e=b.encode(n),r=t(e.length);return l().subarray(r,r+e.length).set(e),_=e.length,r}let r=n.length,u=t(r);const o=l();let c=0;for(;c127)break;o[u+c]=t}if(c!==r){0!==c&&(n=n.slice(c)),u=e(u,r,r=c+3*n.length);const t=l().subarray(u+c,u+r);c+=s(n,t).written}return _=c,u}let w=null;function h(){return null!==w&&w.buffer===u.g.buffer||(w=new Int32Array(u.g.buffer)),w}let p=new("undefined"==typeof TextDecoder?(0,n.require)("util").TextDecoder:TextDecoder)("utf-8",{ignoreBOM:!0,fatal:!0});function y(n,t){return p.decode(l().subarray(n,n+t))}function m(n,t,e){u.h(n,t,d(e))}function v(){u.f()}function x(n){return function(){try{return n.apply(this,arguments)}catch(n){u.a(d(n))}}}function E(n){return null==n}p.decode();const j=function(n){f(n)},A=function(n,t){var e=g(c(t).tagName,u.c,u.d),r=_;h()[n/4+1]=r,h()[n/4+0]=e},T=function(n){var t=c(n).parentElement;return E(t)?0:d(t)},C=function(n,t,e,r){var o=c(t).getAttribute(y(e,r)),i=E(o)?0:g(o,u.c,u.d),f=_;h()[n/4+1]=f,h()[n/4+0]=i},N="function"==typeof Math.random?Math.random:(O="Math.random",()=>{throw new Error(O+" is not defined")});var O;const k=x((function(n,t){return d(c(n).cloneNode(0!==t))})),L=function(n){var t=c(n).firstChild;return E(t)?0:d(t)},M=function(n){var t=c(n).nextSibling;return E(t)?0:d(t)},B=function(n,t,e){c(n).textContent=0===t?void 0:y(t,e)},D=x((function(n,t,e,r,u){c(n).setAttribute(y(t,e),y(r,u))})),I=x((function(n,t){return d(c(n).appendChild(c(t)))})),S=function(n){var t=c(n).target;return E(t)?0:d(t)},F=function(n,t){var e=g(c(t).id,u.c,u.d),r=_;h()[n/4+1]=r,h()[n/4+0]=e},$=function(n){c(n).preventDefault()},J=function(n,t,e){c(n).className=y(t,e)},P=function(n){return d(c(n).classList)},q=function(n,t,e){return c(n).contains(y(t,e))},H=function(n){return d(c(n))},z=x((function(n,t,e){return d(c(n).insertBefore(c(t),c(e)))})),G=function(n){c(n).remove()},K=function(n){return c(n)instanceof Window},W=function(n){var t=c(n).document;return E(t)?0:d(t)},U=x((function(n,t,e){return d(c(n).createElement(y(t,e)))})),Q=function(n,t,e){c(n).innerHTML=y(t,e)},R=function(n,t,e){var r=c(n).getElementById(y(t,e));return E(r)?0:d(r)},V=x((function(n,t,e,r){c(n).addEventListener(y(t,e),c(r))})),X=function(n){f(n)},Y=function(n){const t=f(n).original;if(1==t.cnt--)return t.a=0,!0;return!1},Z=x((function(){return d(self.self)})),nn=x((function(){return d(window.window)})),tn=x((function(){return d(globalThis.globalThis)})),en=x((function(){return d(r.global)})),rn=function(n){return void 0===c(n)},un=function(n,t){return d(new Function(y(n,t)))},on=x((function(n,t){return d(c(n).call(c(t)))})),cn=function(n,t){var e=g(function n(t){const e=typeof t;if("number"==e||"boolean"==e||null==t)return""+t;if("string"==e)return`"${t}"`;if("symbol"==e){const n=t.description;return null==n?"Symbol":`Symbol(${n})`}if("function"==e){const n=t.name;return"string"==typeof n&&n.length>0?`Function(${n})`:"Function"}if(Array.isArray(t)){const e=t.length;let r="[";e>0&&(r+=n(t[0]));for(let u=1;u1))return toString.call(t);if(u=r[1],"Object"==u)try{return"Object("+JSON.stringify(t)+")"}catch(n){return"Object"}return t instanceof Error?`${t.name}: ${t.message}\n${t.stack}`:u}(c(t)),u.c,u.d),r=_;h()[n/4+1]=r,h()[n/4+0]=e},fn=function(n,t){throw new Error(y(n,t))},dn=function(n){throw f(n)},_n=function(n,t,e){return d(function(n,t,e,r){const o={a:n,b:t,cnt:1},c=(...n)=>{o.cnt++;const t=o.a;o.a=0;try{return r(t,o.b,...n)}finally{0==--o.cnt?u.b.get(e)(t,o.b):o.a=t}};return c.original=o,c}(n,t,11,m))}}).call(this,e(4)(n),e(5))},function(n,t,e){"use strict";var r=e.w[n.i];n.exports=r;e(2);r.i()},function(n,t){n.exports=function(n){if(!n.webpackPolyfill){var t=Object.create(n);t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),Object.defineProperty(t,"exports",{enumerable:!0}),t.webpackPolyfill=1}return t}},function(n,t){var e;e=function(){return this}();try{e=e||new Function("return this")()}catch(n){"object"==typeof window&&(e=window)}n.exports=e}]]); \ No newline at end of file diff --git a/frameworks/keyed/wasm-bindgen/bundled-dist/57b853b60f01dd1d4d7e.module.wasm b/frameworks/keyed/wasm-bindgen/bundled-dist/57b853b60f01dd1d4d7e.module.wasm deleted file mode 100644 index d634f0e515fb607754d266f3b23ac16d50dd8c64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34061 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%0DBz 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 Y3)|LrtS@x<{9 diff --git a/frameworks/keyed/wasm-bindgen/bundled-dist/index.js b/frameworks/keyed/wasm-bindgen/bundled-dist/index.js deleted file mode 100644 index 91844088c..000000000 --- a/frameworks/keyed/wasm-bindgen/bundled-dist/index.js +++ /dev/null @@ -1 +0,0 @@ -!function(e){function n(n){for(var t,o,u=n[0],_=n[1],i=0,c=[];i 0) { - return `Function(${name})`; - } else { - return 'Function'; - } - } - // objects - if (Array.isArray(val)) { - const length = val.length; - let debug = '['; - if (length > 0) { - debug += debugString(val[0]); - } - for(let i = 1; i < length; i++) { - debug += ', ' + debugString(val[i]); - } - debug += ']'; - return debug; - } - // Test for built-in - const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val)); - let className; - if (builtInMatches.length > 1) { - className = builtInMatches[1]; - } else { - // Failed to match the standard '[object ClassName]' - return toString.call(val); - } - if (className == 'Object') { - // we're a user defined class or Object - // JSON.stringify avoids problems with cycles, and is generally much - // easier than looping through ownProperties of `val`. - try { - return 'Object(' + JSON.stringify(val) + ')'; - } catch (_) { - return 'Object'; - } - } - // errors - if (val instanceof Error) { - return `${val.name}: ${val.message}\n${val.stack}`; - } - // TODO we could test for more things here, like `Set`s and `Map`s. - return className; -} - -let WASM_VECTOR_LEN = 0; - -let cachegetUint8Memory0 = null; -function getUint8Memory0() { - if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) { - cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer); - } - return cachegetUint8Memory0; -} - -let cachedTextEncoder = new TextEncoder('utf-8'); - -const encodeString = (typeof cachedTextEncoder.encodeInto === 'function' - ? function (arg, view) { - return cachedTextEncoder.encodeInto(arg, view); -} - : function (arg, view) { - const buf = cachedTextEncoder.encode(arg); - view.set(buf); - return { - read: arg.length, - written: buf.length - }; -}); - -function passStringToWasm0(arg, malloc, realloc) { - - if (realloc === undefined) { - const buf = cachedTextEncoder.encode(arg); - const ptr = malloc(buf.length); - getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf); - WASM_VECTOR_LEN = buf.length; - return ptr; - } - - let len = arg.length; - let ptr = malloc(len); - - const mem = getUint8Memory0(); - - let offset = 0; - - for (; offset < len; offset++) { - const code = arg.charCodeAt(offset); - if (code > 0x7F) break; - mem[ptr + offset] = code; - } - - if (offset !== len) { - if (offset !== 0) { - arg = arg.slice(offset); - } - ptr = realloc(ptr, len, len = offset + arg.length * 3); - const view = getUint8Memory0().subarray(ptr + offset, ptr + len); - const ret = encodeString(arg, view); - - offset += ret.written; - } - - WASM_VECTOR_LEN = offset; - return ptr; -} - -let cachegetInt32Memory0 = null; -function getInt32Memory0() { - if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) { - cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer); - } - return cachegetInt32Memory0; -} - -let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); - -cachedTextDecoder.decode(); - -function getStringFromWasm0(ptr, len) { - return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); -} - -function addHeapObject(obj) { - if (heap_next === heap.length) heap.push(heap.length + 1); - const idx = heap_next; - heap_next = heap[idx]; - - heap[idx] = obj; - return idx; -} - -function makeMutClosure(arg0, arg1, dtor, f) { - const state = { a: arg0, b: arg1, cnt: 1 }; - const real = (...args) => { - // First up with a closure we increment the internal reference - // count. This ensures that the Rust closure environment won't - // be deallocated while we're invoking it. - state.cnt++; - const a = state.a; - state.a = 0; - try { - return f(a, state.b, ...args); - } finally { - if (--state.cnt === 0) wasm.__wbindgen_export_2.get(dtor)(a, state.b); - else state.a = a; - } - }; - real.original = state; - return real; -} - -let stack_pointer = 32; - -function addBorrowedObject(obj) { - if (stack_pointer == 1) throw new Error('out of js stack'); - heap[--stack_pointer] = obj; - return stack_pointer; -} -function __wbg_adapter_16(arg0, arg1, arg2) { - try { - wasm.wasm_bindgen__convert__closures__invoke1_mut_ref__hcd644a1bc0bc2463(arg0, arg1, addBorrowedObject(arg2)); - } finally { - heap[stack_pointer++] = undefined; - } -} - -/** -*/ -export function start() { - wasm.start(); -} - -function handleError(f) { - return function () { - try { - return f.apply(this, arguments); - - } catch (e) { - wasm.__wbindgen_exn_store(addHeapObject(e)); - } - }; -} - -function getArrayU8FromWasm0(ptr, len) { - return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len); -} - -function isLikeNone(x) { - return x === undefined || x === null; -} - -async function load(module, imports) { - if (typeof Response === 'function' && module instanceof Response) { - - if (typeof WebAssembly.instantiateStreaming === 'function') { - try { - return await WebAssembly.instantiateStreaming(module, imports); - - } catch (e) { - if (module.headers.get('Content-Type') != 'application/wasm') { - 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); - - } else { - throw e; - } - } - } - - const bytes = await module.arrayBuffer(); - return await WebAssembly.instantiate(bytes, imports); - - } else { - - const instance = await WebAssembly.instantiate(module, imports); - - if (instance instanceof WebAssembly.Instance) { - return { instance, module }; - - } else { - return instance; - } - } -} - -async function init(input) { - if (typeof input === 'undefined') { - input = import.meta.url.replace(/\.js$/, '_bg.wasm'); - } - const imports = {}; - imports.wbg = {}; - imports.wbg.__wbindgen_object_drop_ref = function(arg0) { - takeObject(arg0); - }; - imports.wbg.__wbg_removeEventListener_003b13762a00969d = handleError(function(arg0, arg1, arg2, arg3, arg4) { - getObject(arg0).removeEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), arg4 !== 0); - }); - imports.wbg.__wbindgen_cb_drop = function(arg0) { - const obj = takeObject(arg0).original; - if (obj.cnt-- == 1) { - obj.a = 0; - return true; - } - var ret = false; - return ret; - }; - imports.wbg.__wbg_self_1b7a39e3a92c949c = handleError(function() { - var ret = self.self; - return addHeapObject(ret); - }); - imports.wbg.__wbg_require_604837428532a733 = function(arg0, arg1) { - var ret = require(getStringFromWasm0(arg0, arg1)); - return addHeapObject(ret); - }; - imports.wbg.__wbg_crypto_968f1772287e2df0 = function(arg0) { - var ret = getObject(arg0).crypto; - return addHeapObject(ret); - }; - imports.wbg.__wbindgen_is_undefined = function(arg0) { - var ret = getObject(arg0) === undefined; - return ret; - }; - imports.wbg.__wbg_getRandomValues_a3d34b4fee3c2869 = function(arg0) { - var ret = getObject(arg0).getRandomValues; - return addHeapObject(ret); - }; - imports.wbg.__wbg_randomFillSync_d5bd2d655fdf256a = function(arg0, arg1, arg2) { - getObject(arg0).randomFillSync(getArrayU8FromWasm0(arg1, arg2)); - }; - imports.wbg.__wbg_getRandomValues_f5e14ab7ac8e995d = function(arg0, arg1, arg2) { - getObject(arg0).getRandomValues(getArrayU8FromWasm0(arg1, arg2)); - }; - imports.wbg.__wbg_document_c26d0f423c143e0c = function(arg0) { - var ret = getObject(arg0).document; - return isLikeNone(ret) ? 0 : addHeapObject(ret); - }; - imports.wbg.__wbg_querySelector_9cf023db23245913 = handleError(function(arg0, arg1, arg2) { - var ret = getObject(arg0).querySelector(getStringFromWasm0(arg1, arg2)); - return isLikeNone(ret) ? 0 : addHeapObject(ret); - }); - imports.wbg.__wbg_lastChild_4add591e64b65966 = function(arg0) { - var ret = getObject(arg0).lastChild; - return isLikeNone(ret) ? 0 : addHeapObject(ret); - }; - imports.wbg.__wbg_removeChild_d8035999cf171601 = handleError(function(arg0, arg1) { - var ret = getObject(arg0).removeChild(getObject(arg1)); - return addHeapObject(ret); - }); - imports.wbg.__wbindgen_debug_string = function(arg0, arg1) { - var ret = debugString(getObject(arg1)); - var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - var len0 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len0; - getInt32Memory0()[arg0 / 4 + 0] = ptr0; - }; - imports.wbg.__wbindgen_throw = function(arg0, arg1) { - throw new Error(getStringFromWasm0(arg0, arg1)); - }; - imports.wbg.__wbg_self_c0d3a5923e013647 = handleError(function() { - var ret = self.self; - return addHeapObject(ret); - }); - imports.wbg.__wbg_window_7ee6c8be3432927d = handleError(function() { - var ret = window.window; - return addHeapObject(ret); - }); - imports.wbg.__wbg_globalThis_c6de1d938e089cf0 = handleError(function() { - var ret = globalThis.globalThis; - return addHeapObject(ret); - }); - imports.wbg.__wbg_global_c9a01ce4680907f8 = handleError(function() { - var ret = global.global; - return addHeapObject(ret); - }); - imports.wbg.__wbg_newnoargs_8aad4a6554f38345 = function(arg0, arg1) { - var ret = new Function(getStringFromWasm0(arg0, arg1)); - return addHeapObject(ret); - }; - imports.wbg.__wbg_call_1f85aaa5836dfb23 = handleError(function(arg0, arg1) { - var ret = getObject(arg0).call(getObject(arg1)); - return addHeapObject(ret); - }); - imports.wbg.__wbindgen_object_clone_ref = function(arg0) { - var ret = getObject(arg0); - return addHeapObject(ret); - }; - imports.wbg.__wbg_instanceof_Window_17fdb5cd280d476d = function(arg0) { - var ret = getObject(arg0) instanceof Window; - return ret; - }; - imports.wbg.__wbg_appendChild_3d4ec7dbf3472d31 = handleError(function(arg0, arg1) { - var ret = getObject(arg0).appendChild(getObject(arg1)); - return addHeapObject(ret); - }); - imports.wbg.__wbg_insertBefore_e617280513985f61 = handleError(function(arg0, arg1, arg2) { - var ret = getObject(arg0).insertBefore(getObject(arg1), getObject(arg2)); - return addHeapObject(ret); - }); - imports.wbg.__wbg_instanceof_HtmlInputElement_9e9349535b986dc4 = function(arg0) { - var ret = getObject(arg0) instanceof HTMLInputElement; - return ret; - }; - imports.wbg.__wbg_value_c2fd875fedc14f57 = function(arg0, arg1) { - var ret = getObject(arg1).value; - var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - var len0 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len0; - getInt32Memory0()[arg0 / 4 + 0] = ptr0; - }; - imports.wbg.__wbg_instanceof_HtmlTextAreaElement_af4dc0571f10534b = function(arg0) { - var ret = getObject(arg0) instanceof HTMLTextAreaElement; - return ret; - }; - imports.wbg.__wbg_value_7ffe1d058e13aa75 = function(arg0, arg1) { - var ret = getObject(arg1).value; - var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - var len0 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len0; - getInt32Memory0()[arg0 / 4 + 0] = ptr0; - }; - imports.wbg.__wbg_createTextNode_756ffaca4044be42 = function(arg0, arg1, arg2) { - var ret = getObject(arg0).createTextNode(getStringFromWasm0(arg1, arg2)); - return addHeapObject(ret); - }; - imports.wbg.__wbg_setnodeValue_ab4d09a5c9b583a3 = function(arg0, arg1, arg2) { - getObject(arg0).nodeValue = arg1 === 0 ? undefined : getStringFromWasm0(arg1, arg2); - }; - imports.wbg.__wbg_is_44606c0a00d7753b = function(arg0, arg1) { - var ret = Object.is(getObject(arg0), getObject(arg1)); - return ret; - }; - imports.wbg.__wbg_setAttribute_1e9980589f904db6 = handleError(function(arg0, arg1, arg2, arg3, arg4) { - getObject(arg0).setAttribute(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4)); - }); - imports.wbg.__wbg_removeAttribute_ab1ad95ea7761680 = handleError(function(arg0, arg1, arg2) { - getObject(arg0).removeAttribute(getStringFromWasm0(arg1, arg2)); - }); - imports.wbg.__wbg_instanceof_HtmlButtonElement_0c660cd977827d1e = function(arg0) { - var ret = getObject(arg0) instanceof HTMLButtonElement; - return ret; - }; - imports.wbg.__wbg_settype_8b416ca7e828acb0 = function(arg0, arg1, arg2) { - getObject(arg0).type = getStringFromWasm0(arg1, arg2); - }; - imports.wbg.__wbg_settype_ccacb981913395e5 = function(arg0, arg1, arg2) { - getObject(arg0).type = getStringFromWasm0(arg1, arg2); - }; - imports.wbg.__wbg_setvalue_eb5415236467cd34 = function(arg0, arg1, arg2) { - getObject(arg0).value = getStringFromWasm0(arg1, arg2); - }; - imports.wbg.__wbg_setchecked_795fe0b967d5d996 = function(arg0, arg1) { - getObject(arg0).checked = arg1 !== 0; - }; - imports.wbg.__wbg_setvalue_8bb8ffbd27a7ffda = function(arg0, arg1, arg2) { - getObject(arg0).value = getStringFromWasm0(arg1, arg2); - }; - imports.wbg.__wbg_namespaceURI_35b1c4eab9150629 = function(arg0, arg1) { - var ret = getObject(arg1).namespaceURI; - var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - var len0 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len0; - getInt32Memory0()[arg0 / 4 + 0] = ptr0; - }; - imports.wbg.__wbg_createElement_44ab59c4ad367831 = handleError(function(arg0, arg1, arg2) { - var ret = getObject(arg0).createElement(getStringFromWasm0(arg1, arg2)); - return addHeapObject(ret); - }); - imports.wbg.__wbg_createElementNS_74ac818c77233fe4 = handleError(function(arg0, arg1, arg2, arg3, arg4) { - var ret = getObject(arg0).createElementNS(arg1 === 0 ? undefined : getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4)); - return addHeapObject(ret); - }); - imports.wbg.__wbg_new_d6227c3c833572bb = function() { - var ret = new Object(); - return addHeapObject(ret); - }; - imports.wbg.__wbindgen_string_new = function(arg0, arg1) { - var ret = getStringFromWasm0(arg0, arg1); - return addHeapObject(ret); - }; - imports.wbg.__wbg_set_6a666216929b0387 = handleError(function(arg0, arg1, arg2) { - var ret = Reflect.set(getObject(arg0), getObject(arg1), getObject(arg2)); - return ret; - }); - imports.wbg.__wbg_addEventListener_3526086a053a131e = handleError(function(arg0, arg1, arg2, arg3, arg4) { - getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), getObject(arg4)); - }); - imports.wbg.__wbindgen_closure_wrapper1301 = function(arg0, arg1, arg2) { - var ret = makeMutClosure(arg0, arg1, 27, __wbg_adapter_16); - return addHeapObject(ret); - }; - - if (typeof input === 'string' || (typeof Request === 'function' && input instanceof Request) || (typeof URL === 'function' && input instanceof URL)) { - input = fetch(input); - } - - const { instance, module } = await load(await input, imports); - - wasm = instance.exports; - init.__wbindgen_wasm_module = module; - wasm.__wbindgen_start(); - return wasm; -} - -export default init; - diff --git a/frameworks/keyed/yew-baseline/bundled-dist/js-framework-benchmark-yew_bg.wasm b/frameworks/keyed/yew-baseline/bundled-dist/js-framework-benchmark-yew_bg.wasm deleted file mode 100644 index 30488709764dd4fa7c56ed47200fdda48a1e0f9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142093 zcmeFa3z%J3R^NFZ_f_}SR=dtU`|PtHYp?a+Yp=ETKEeF4d&3|I!tW0^+!dWX z8Qc}}A3wsAcf}`lufN=c`cvUINdZ5r`f1t2hwlmkf6s%OJ>ZFDCLwCpbYJNC`YPwrltoZr23VfWPTg`ln+*X4B`dElO-OM9m$re-H+ zrgqNmn%p@*GdUSV%5<&Ev~ct@_pjWyclY${{v9(jJ9o~`EbUy}KjEs{RBFRL$M!yO zcyVd}J%^VT-P3P$CEUHV@*VSs7w^0GFV7!(VCmT2`N_q}seM!XmzE|McFs=kcA3Ay zx5;wee9xgn-}#xt3wsxL?OWWrIK6Av{>A+}cTLX+v6^<3g7@!Q+A%dxj~8Z_cJJP` z=rUjL3SPW#;emUh>fVK&(~A@Pr*=**?3kKdnpkkvZ+E$lJg{{1GvB#%i1E4a=-%B6 z`zLlzF7DeoxpQjQ?j4gsMYSg`>!JB$E8lkDovyXPl%EG$h;&ra-~nAtz;@_4cwUV7;8 zee*}}KDKvuetvOkp0S(SKRG)&wafL^H+*6K(4oCM_RsE`pP%0~J2}0$A1aq}^oq*D zq5BRmnXDLxkGp2ybNJZG{NaVA`}XhsZ(J{T%w`*Z>=j_Dd)XcQ!Lq8Jp_us#C zc+ri-()HaO=vwhi*H3{{t&G9a=Iz+r6}Va%%Uk$zA()&rUBcOgXOD=3abIq5v!IU!0xU zwSQ?5UfjQH#trSRzGZ)E>G(=^bZI^>et!Sd;=;tPnH~FgOzc9Q`V>F2e?Mb6v1@i| z$K?F{%q~~F7qkV+T3J%5AHQ#LY46Og>HYiX7v`rXrl$5SP3?5u^aMG!v~rkCCck^< z_f0KM?4IAXuzMc^H$Um5>>A(bV|%BjrYEKsCcvu2nVDUa``n;*OUhQ@?tKreEbZNa zltS6r-TQY>OfBx4cDUw++W}!W^ZdRY^NYK8EzQr&Oz(j6T(y&ZX*Ku2%F2C*b4pDt zOixcNEbg9}nT7FpEICSf45Vu-pSgc&@9e&*9n%Z*GfT5OXXh98`Qle)T3F!G?%5qc z!6Z%D)dMh;#`0yLKXp(=!V|oy+A#ja&-{mKF{!E$*G!&B#ye+dVzAxNC9u z?rAqX9&+^cHH1!rjvW8=clKqckY

s`ziOJa+*OWiw#uZ@goeC#+?VO&Not}r~=XXppmNpgIF!`#0ienETw+|haydT{$ z3CvdFUkQIX3|g%)tTGxQ|7X(WQVZ>WN*fCX!%8!-2bG~HjKX*@;As%oV=hrJJRI{k z3To0acpQbbTD2O-x(mX=u&M{VAMk_(esgW`ZbTVD6zOT)RBq*|RP3IlAgENTq(#yC zR%4`HsqrL?_+S1f42GJ#9!AZuIl%w;$qV;~_ugBjAEUJaRGRG6sq;ar{tIEFb}tjo z(a%Id6>vPd5`1d3G!FNIy7w&vFNJ000U)r{Uk}%pvMwFJ|GuLudv}Jxw>^YzwKpHi zy$kmpeh_%vyVq0t*xtSO9DeY=gG)R1-uu9cKzi@q0}G4O@Ys%h3lsYmc1}%C2LCJ^ z>nZ#&lN|6G{BBsD;Czz@ei2G%VQce$4*#F~_~5??|F7`>4*!qvZ-g)N z_g{v;5x&B&m&0ETe=U4H{6E9L9|qZ$)_4B1@Lz?$65jXi$M^qexbL&!!M`0o9zGQw zIvf7o@TbH782(K7AHwIuKL~#~{EPp6cGpLKCcO2h!&{yYZ+^Ma`3zn+4~e#5vh%7ivJvSe^*i^*7Z6SjXT+``3?nU*z^rYdwzanGlzxT$Iao<%pnRx@#fl=gB`xgic_V$!qC zYFB%?xKDJyIlqs{Q8cf)s(IX7^E4*!+&ten*R;+xH1(2=d-hfS7ap;}f7MdjAD2A5 zX1_a?M0`=pDl45vQh|b7ZZO$r!+jTb$ zwK61FzbiKl4N~UsUI@P>0BT)g?WUo27Ib1*8W8?6MSnO5J`x1n|0iy~IS9y{tegAn zsZ*yWW+;!7~A}q_=uBh;)p`j#9+G-IvHyt&SFmFbX zjk!$Fc^Fx_{C&d5HmF1igCua*Na7+pJ^l(k7E0AzBclA7p&#AO(GN1KM|bCw8Z`*m zN2jA#8(hzPLB+hHpF(1d{44O-)sYwm&WG5VwMHC%abP(KL10w?omZnU#A(_yF`*$e z!;E|w&y->ANlS4M^pySX)DrR3kb}9}l`u!yU6>2626NAJt1_6YxjG<5sxEu_sCZy5 z-J%&F6wuWi(4|{l3Q$*bP?v5~3Q{f+Nw1xWA#z=VRY~e@W~nEnlBi;=z`Bsq3aV#J zCcc1rcN(d$nnt*{aejlDzXo+{q8SRqsyVI?b=Q&ef{kREx-VLa>-kIen_&?CG#zz? z@~bA1wNdwCw<@Eq%{EbXswQD7s4GJINksF95xBUAG-01fYrxT5 z7YO?(kVs@#mRf7X(YU}-qgEM5jUTBn$5Bs>_k*LTZUv4~A83=~XuZJEs>e|#-={!; z@gSHs9R1PmO>^%1z{ocP0cq0#X|oHYNb8kAnrk)vfpjD(W2j-IFx1L14E@01^U~KG zKAAEMKA-th_;gz0*9AUX4nA8BK3fhxTLpZgNqG2dmEg10h0oS1_~iaQ!e?{s@G01- ze{JCN?E8n$vww{6Irt|MJ^}Tsz-M1I^aT*0P(y!)8?T18x@u_4p=Ya$p6H8LqG!&H zf86MK>T8akx$^mQe~O-8NAzSJA?0(>q357O&%pvc2MhEZETQLM7d;18p(pq65j|z^ zS)=m#HAK(z?;kzSuNggCAGq>4{Ktr%PL*~*#WKINhzHZJf}XWP`K)>66Whzb>;h&j z`{&$vO>}VXb10veO!*vi@HyCpPgL3~;WKB)KW_NE__?q3+I@ppK41R-1ALYQ{7?4U z9lMO+bJ)S>u!GOx0zQWe_#7_5=WrK3hgZQT_wNxt1v+blPr**>YomN#djIfwY0dCC z_<_Uc$R8toy2+p)d;;oMfzPUgPfWL1kFd(Hq*%^=4+QYaXFdDfE_@EpJqmnYH254& zuo4X>!(I3s?gyVaJNAK3>iqhx-OrqU2l%WPrcbk`VPfksedZ>yZa-F=KC2!+fB(OH z_^c--0k6MTeR^uV zv*~kf@Cj-Sf|A~a)Nt@gBjiW<((ga|*{6U1H-Gj^!3<{4;knbG<*87XPMhUdp(T*A z8fD%AE$MXSrpg|Gx-uBH`umMqNpA1NuHf87C>Vvih?e55cJ88BUaPYICwCX&CL6|0 z_Jm)tn?p)|GjkVJa$F1`L+&oB_j7=~4Q5h<+(iQ(Gr!b}nX;6>;@m|Q=eU@0-9-vTSd+WxoiNk* z^c}t8Z-bd7hei)(N~9Ty5@t%MNqHO0gdUaT>y4RxsH;GLHDM<9g)U~k=a_@lnCW8< z-~54{Hz&!_ChDfLZWOpF>ZUO%rH~8~GLT@yuOtI*K7z+@h)>nzjvLT0 zIoH&>Zt(*es&(DM2Q*8q>lQtb;QYAJ6*o@d6nB>5CPp*sa z5EX@#c+ek6hNh!Wx$-{AD1zle!bDYy9yTn}{gENr5!d*RoCaPa<%)}R&;(71Q zaM?!(0bd3)P{91-+#Ae1UR_QGftf)lp-_-__L~Zj-n6igvfuO#OL1z`TlSma8-*7%R?QHFF{hf1IZ+sMs@a&t zz`W99Vtp%UtfZQabwPY=6^L_h)P0qBoeI}Ele?X-qx?*(VCQ7pFef~3onbG7L!OWQO7@^Znwjoc#T4$#>z!PzcVoBS$;J9YF4h-vvA!f1>$`HXewAEsZ`4&ZVj&m3(TJb|o^{7| zj_MW%^Na<)mMQy`r8vqyYrmna0%JG4Ps)PKiege^VVAN@uj1msQG(!8Sl85crVKPz zF|tJubs0GjaU?9B?*fsiG$$~ZwU)OBBdx(k%R*kW*M1J`FM(D;7AC>g(I5y~AUJ_o z{T>jWb!B>sHwbaK@&V~spZlg`R_UA0dZBMR@vME*6;9gs0W(0~^yn%T5G~d>KLKKW z)B93_4zsA}m;Ybg7HvA&B;Y!|Cc6|L%h-_j3pCGgHd4d!i~YB{cQg= z28D+_>eO3_1`5S>{Lpe5`BjEuofvM%ArV>Uus$gbKB%Hw#TE@EE~sXw<1SlJA$Uo7 z1lFYD9bdzmx823#&BB;#(?v=EBal=;7>jxCoY;3%{M^ z*PHI9vn{*qez6#{pL0NPV2|fQ{nA_ZYc6VauBE~~2U(mazBkg)64g^jD=1nMC9GBWR10vS~)(s z41adoq;6jBxRKM!zM9?G%`;x)*>lkHY+hDKiYUvlbNS%-6Xo4WS~a^IFa`yOHnOo* z40_!7yq7^whmJ!}X{xC#ccSd%vFz0MeD5R2kC?ojiA^z za_vtL602pb@0690HYmdtz;eQV+)Vs9v5@xrSX$%f$>k%W8N5lggrqAasU0B~L-t^{ z?MTA9VWY?uB`p|s z{ni)0^usT``ctnd?X1$SoBN&De&|cT_Qr3#@P^W!aA|+=OTY5jUw`&Df9gw0V=ID5 z^J#m=;)bh<02(Rsq(ANUJZWDIKN6gd;2}_qAmmVq%!Fj$6+Iu%&3^8YbemG1i62d` z(~l?O6Df$oaxhM>*YykuNpk(%(B~gbuRoD?_&KVd$u=6={(N%nqm+=$C7(Z$UiYZp z^;zlehR-M0>1l_jb6*X4dYvoF7ogWI!?o`9{%`xTOK;K^O7DG{dQYeeR%@wE*Pc*Q zT|;Tmqcob@X=HNx(Wlda?3xE{tQ#vw?b=>B+8Jduofxd+*O&>!hNJ~aJ55Yv!^UBI zSok%Mqyx!@7(@$rpMCl0jm~!tn(S=b##F?2$bLLvV;vJ_1Dupr?21 zl1;}j2hh9bs@@T7OXj9^t%mAvT{GgTB^%T`RwZ;R-I8o5_in3h8|j9d2~6jAvc-B= zZBYYK24$PJpQDEU&rXHWW#oKa7DBe1u#lCm!`A@HbaXnRTT$ZLE{p)xtqV=P$xx{u z`H-+xDQGbw1Ieg0ys3t#(ejOS6=(m)D<^q0KnMH_%EV(lSJkA}%0e2aNebFM9_lK| zV^wM**8VnY$SS%DiCm+Gl40n&+!>~MM%jLxjlW}3jc6ZA+A}mv9zD!1c7Ima2C7&Rk?C38 z`5`>VZ-Eql&xXtG1?fyGn4ztrFp-?k@z~QWC-X=#|4MO#Up2G%N!MokL7Nqd6r1fE z4y)a4kKCL_yXsE&Y;~zZ2g#G^fMz)>Og0ps)O>Mfc^fQl`c3h#sef2+E~#(lSv#vy zu7fnbM-8E&#j+Zj0Klkv=S5S|Bx*0@v;ZKywva^~l-dq!g-!&AIRc3$DdVHpQt2wb zfuc;>ESneAfONQQf>aYwkVC40 z6qQY>ZWe<81%`_osFrI<#wV|Lxd3{VdW}k2W37rbvu4s{PTjB3@xg#~ly1aJy_mZVSTc!4Q>Jq^A5-p*Gh_pM=K?N`p)~wMPaIE%Jm^LKY;!iK(XBF{IuDYpD z7NIQgc z4w#nr!7LP3YgUpcw8!>m3T}ZR5OO!?rI>C4o*;~-u<`RT7DAEfHR3YacF3TmgGo87 z3zP2Z4bdZrj^x=^UMlE<-N0T#RfNBW@MAP3u75guSzN_T67fzTds@SCp!DxzbB`C}B!?tG{hz)qzkj)NW(U24=!WhYDEVfH8s*e_$S#5z{JazJTh@lWm|(GqF^G zb;DO7m{V&!yj)~=t%H|~ai^&zCO+rY@RF0x;3cP;^)M%xXjNbhb2mH3L?1WF2wu8< z176@I;Ry-hNY#Yz)st9_8#G8TMkieZpQK(1|6`|8gZ~lV&cJU zp|uluzpRdTOnc_WT=U#i#-m4!k=VxR-W6cs zl5av?14tty4FS2S@V^ybq2E+*W+B`aRAzoh?iz@c=Hg>o!Vp7-vXD!W=?NpG0Y&*N zZkj@yG${-oo~*Z0npkjlO+A_<=q2-@>uV!rlWIUO3uBMlx~RUGv4fl?-@t@)##{=^~9qHZP`jfwS>|cuBWrzm~miJUSPqHPf#A z!4cR>rLCZ0n5Cv^JYO<>pry*)Awj5#p^|~z=+XRysY?_Nl8H&6H+p@^>M`K-dL#+0 z-~B#@IFW;UEqJmC&C)5$-T);*(uVq{IRvyolBvx-;(-kUNU*pUO9-)5OQQAvdVNii12?ogJFV0OoY>34!|D++DqD?{#%t}e) z;1Rl4UA|3y;hpE)rdcK}6E&Wh1|t_ijJ=40q3A6X#N}p|;%`&bV;-J|2kWiu=l<^b zAp5h~t$Qrs65xXU%Y&+`$ehS+^?=ah8A=_igKHCHPd7Y>cCpkcEu(J zH!`m7*sv|AV}1k!Jarap3rt&VZO}ZU2&i;W!8*poxKaElOEU4Z5|f(FBy* z%uq8|z(-&EeS{L+dqLQ3?_!0@#RpQng%a%d) zye*<^#BD~^y+%XB z)H9|e@Jz@l@IWQJ13rddHKtdcUIB4UPGr}NT1-T4GA(8!n@86bQ<6=gHIx35?5~o{1_rUtd6a&wfHI%(*6M^ua@b}yGa$G_ zopb^=U^WF!jLcX zMsjD!E{8kCE0t+S5<&mBJ)PA|XB&^6k5Xte9=#CVBCRRGk=oA94mZR&(99|!_o_Ec zV0l3Kc%DkEwf5lokl$t`>s%*oyP6Sif7XnlG~t;DSB`mF<KT;>%=WHtPnH_w#_X zKM)3uC!#PL#J~+=P##1c98Wq=43;3wzVijc3+fjF+q#CHJSVgG?+!sqMc(F@G zVrN-Eop%$Fe3ea&8&d)8RS=S|Q|gU~ZK>Xv@R*GpY$3#J19Cq?&&Ba#TYIIJKueR#d}X0Er*)gQKQI3}BhAlq z{4_tC_<-N1VM?XTE-MB_8H>-dx=lhPMlS2gG@mc1?T#V29a_*XvEehV5Hx-aK9bQi zwML;y*Y&P%&+*QvIw~QBWNrA@#I@H49ti1KQ=5?@Aq46Y4Nw6iD0V3M0|>k=El@*^ zA`nAe46+Fgh$g6zpA3LgJ|z`|x{TWp(Rqmj_a+nRH;5cQIK~D^N~uy9MjtNYbXGN( z6dULiIq^h19ZBJZT-QErtGMTEZQKdK2tz}72a>)Lbvn9Uj5?{V7oyIGbUhz+uJu5M znWC1}BO<2<)K}oQ7#P+r010Znk4Nr&Wf0g2*$PV3GM-XXMNbhBhEn zQ<~90t@?O0o`pAWB|n_S&_B+RYkFGIQ#zMFy~SR0F)r$p`_&X|)R>$Ct*SPnFxhG` zxJj=*g3l)lZn=4A1I&Y_q!pNnh%NN2f}bY+wP4xJMwZ2`X2=$5l^{&D zwrtaTI$6=(5)7iojirpyD;guN&SL{ju=(1sWf$dNAqqj-&nF3AVvf93FFNo134XBT ze8lDbiX8T*-0utetvN9xLNt>I+so$9&Msqc$r&R%r5esE=VRo2;vb$@BjLFAUmen> zEt>c-#~YtanHU(uB)W~gKt=@~-fCt?GDgspA^SLV<)~n0QVBZ*_&1CbyIFO1RYPXp>z@V$Om3`52F>O@ z^(0wt->a@A456;u(@MLULQZWj+pc-dhyt(xhzx=mM%vdAgdDoZp=f5YoMvUN*choK zi;>yZ{sKeY-q;E0o0K0fUL1sIghxRZ;Ug6SJLxP$J+e6|Umjpmkdnf{_gmvJ1);05 zP^;dY)Q+;5PUa^w;Y)o{xYE-!wwgWZ?7iYg_>yLb7Ys5U53km`rfXf(S|_RZtpl#m z032JWbBKbbi;DHpD1=1W!i3I?@KB3B=3z+O2JP#Mx(s=EW&DlJnhMR`A4PGl!h*@i5qY8hte1LgmTH(H6RM}RzFPx1su5e!j zR!EagrSq_0t*NPqoe%iDHNjOo$gph_RXfH-x3VrMF|jHxHN>|;)muY~d)nZSSyUTU zJ@-W$%4`j#Vd_Xz1?yD&8LX1S@6esMOIB{8LhlZs!Aw&IHAzhn$7V-Jpg&*_c1p8l z$)w0_BgKiLi^~bj4LFk`<()IeDOM{8*BwJ!6O>6C3w6@1Q_S^GSwV*)9kr0C5hhX( z*gT>dbVKHc(VAN3Wy2l78k-QLTCwr}(GdN~epVwnu@jw{JCIXR#cm7p;5CSYHxG^zp5SDKT3En};yCN5`UP2d%Y*GxR(ToF^9pY=noD3Wt!ipm4!LPC{r{4P&q+Dv40Tp)- zLvW@wq}hqbe5)xE(p5^bV-rA0a%~PMNv=%;CCRm!pd`7jLN^&Wsi~OM2+kqr<6#@< zM{c+W$&hn*KrNtj?c0G;puu!{#FB#^En0F^+ICe`0+i^c<3wSiO+;`aTA4-38y~4L z#XPb{&HM|-N>{cK>AN~`S{oZKwzPW7k)h$ik(M(-GTi;_li4}6qm0-F2}<_5ZZ7ku z{bN}7veQ4#?e^@YA0^>MGxuGkkY|;#oxQ-N{hZ#s^hFZBF*~iIEaAf6Az^*?Di@dF zO|7q^x4E)&zQZp2$d8fvy6h<~F7v;Z7>;Gn6$$TLoUOyIm^+$R9VIq{%PVlj8v}3i zMq>~(aq;i%!?tFEh**-CeT7WmRi%AR_Q*dy&*%o(snS&{8Y6N`IZZ?qOGG2s>&V z$T734I}~SsDsX0>W<@2%28T;evsBevOv-FHODbD2??~4q#-r|)BJC7mo~04(1V=5t zXfRSl>jv-3cI`r~Wlfg5dMw%#@1Y^(W2cM4IXc z@dh1T&yw&VqVyHw-#L+P=cgj{3H7IigxRMG_y3T^=qCj6r+HTTM2LT)r`wAV|HPH$ z3()J9A$70!f7_Q`dQ&0(*ROs#=@8yfkOO;6ym>*;Bf`P z>#7j{EsUn)yRH0kA^zJ;ed?@(yEYmNZefeV5CP}uCJTb!ytV-UP3*HjlEFz^86!9+ z8I@(f?P3A0l@{Gju4UwMEgCLlQ%MobPgK0TGqBiLYA=o5LIgbp4Km{BaxyqG^!9oz zi{U11PGuho&KI_C6SBRz8?ucZ7_*)1+-+UN#jgBTGE6=H?IuQS^RBqWR;(T(?@3pGALFEDgzt!y9wG}7u? z2X)N$@ucN|6q2!J`>i;H;!9E`w=4#x=m-H8NpyfgS44#34|{q;C=3;XPyiyMY2)U>&Z24CDUa8` z{pfYvkO0_HQ5nLQG=y8qL-@L;c{hYf-CM0#`eBE(D%&5Db_J9lV0m~lvnd0QB8gk* z&+Fh$AW9zC+Uf+nqSIt-wA6G{xZTMzbsY>L4u{Mtkda^nydo#to?m8CSS}#eVJZ9D znJm<>YJx7pXG9p)vRO^}oLS9U8FX8z<;E8H&9#ylNUe;FRc+%ay@+UM!?n|lLPa}i zo!Uv)2wze=jh|?}1erU6m%JcbJFy?Ozd>`V*=}gar#tkCcuF%9K_hDa^j2o*mR8vi z${Iie)c{W@-vDfNj!LG@#x#n<8OISD^p8X4EvmGCK#S1r zCcoLIQPE8t=nJM+A*^D-tV2sq!G~QcpLJ@Yx&LQlA_}OG29z_dqb91D{;(BUL zG=^GL%S{EI3tPOIK>k}GT?^(S1)G}N)a+B7sX&uHM5FPiLPTVgB4yC#{y3|x(19+( zAS-1cGZep9U=awKL<9xku%Ldz1HL%7{b6THN=L|sjSh+v5@4LD;u!vb{1na-;SgKL zOdLlf%yvFhh5BTZw6zt#nZ$LOPl=T3~~*AWvv5lDgmPq7e(u%fqevkazY1!1TRW0z&eD8a!a zB8CMDGi#wIrdqqU6m#MiS!XqYYE1`4v=O7?Anjm8L$E;VP2B*+Dofi zDWkxuRt6aPd@Jo0Yh@ARR&J%V4s!aD@vSt2yBvFJnMQ_TaCUjOWDB}WHp3bxFMhwZ zgu~(4P-wGAh+lz`^#%z0B2V4E=!N}Gw%?l8iFl2Q&=9C^1(;{T;!n=F_!B!VC{jIz z&y9$SkLkc5-hp7_qH*NCTn5DvMlAZLboI(*Gao_Z&=Ed0Q?>fUtN1~`ABwlX$CvnN z2g{K(wJXXwkUxB*=b>5xoRgiAvQd*^nX1i?3sGg(b$K+N8XS`x|5n%A>mlFaoCl$+ zgTIPoim*Nkz^UK0&!9&DmUEz^0**dMmz=2t9F#%2n8z7bh3}TjpJLz%>GGLBMx0ja zf=VU9(;G^D9GS&P&)-)+#H@}ySo{j>|B*ehiZj1#$Xj{EY4gq7e>CvRYuq%@Y9?Z`9=nK zM`s75qf}c>MxRF3kslVFQb#IUY&qwNcxKcm*B(mScvl2B@n00$tLGIbUm)a$ol4D%Hk-!DVq}sm$?E zC1$3rqM?gZZ4}ynJ>|v;?n9ljp!~m#!@_+gi>Ar<#s?A@8 z|BCj*1y#b5H0kqR#WiZX8Yigrq^P>dX;$N+pH=AsbgJAgGu!1&avOoIeQ0yGdB<+( zZQfC1N8d+L3w6p^oFKgHD_?+F`06K3s4=g7IIy)Sx{Gzvvy*L4PN%h54uM229S__ zPPh6LD!k*Ov0_y!@pL)#wZtnbHtCfVtNKcx>e1)gcf0q_z?V8a<}^!v2Rt2k-L(so zG#~L3G+>dmT24`_Vl^&vPYRofEXX6wQ1Kpvmq}w5BWT(EzO3J`i!onDIL*}NXT zDEhl-4NoX`+o8rP`E^XcPawzqr1?Z^L<|tpbV`x0T)z^g+F6=ZQ>`wvnqks&k!ZqQ znN)x_rVwSm%v>$$1$n9@f)}gZ8N6DvR6c<~9` z+w;9x7GAWUXVm1L@%w`DUiW-95Ykd4q2QPOrZM8pSm(1T+JN;%9Pfd=v0FsASR*-f zCEONg6oVKYf&TqSiK)?H#^xgdwZhWvd^SS?<22?+P|GoO30|}=E@O`%hWi4TppYR5 zp}M>*p(@E3M9uz2SH_-oNUZNIT2}s&<0>*n{HJ5l;%k~9ShK@;!);jHD(1+R;mANr4yzmF!iZwyDV7Cv zIzI&&fpD_sKLctE03#R!KmyD~Ijes{fVcNYpY^TlJS-i0mXvV?5Pbwi&=s3q>6TaXC znkK_nCeZPf0v&e+n$hYJXzrar=i|T(;RHG^1UmKtO)($5K&zJQO!tIIJBBpO9XWlVSWC8*vR)~n6YO-1*%pU^Lt8>0#rYiiszXS%6FIR0wNE**f*KkuUw}4id)UQ_ z(lbijJGf+&3b+J3-VrV#T9}W`VQg(&;$j_ z3NjL2J0Bn>nhu%|IbQ$AAAlSc z!)r}uXGNWkQO8eajS^nF$t*WDF{xBC_NRIfW&V~O@0l~_gYm$=ml|h3%FPXdz9PWt z+cIJSmqGlk*M9XM)TV=g`R5V7EpQ&Qgk~n!)49J+65C+_OY1eVn$J=;6VX{W6S2qy zMvWu-Y01E^)YSa*1+fHF(}WYuLXWxPoA+1hFhm)wQ7Ab83W8yfl@_CejaF$f?@cHN zo#3O}rm{`seJ(?uWE(arL7p9-e>KQMtFF2E$jpS;RvqM7M595T#X1_~)k=`3jX)mq z;LaY%o>kPf^8j+l<1hf`bttl0N4(Un z${^1UgfR8xgQ70x3Nx%Lg4QOKs-v!jxf^vY^w+4XWpO^CXwmGci^|YL-CX^8k-eVz zgdz>=ohKAc*JrzGv7fG=ENS3RISstl{agpTX*bT*AQth zqyJpHTX4zs8ZPq-3~b9n-7 zB|k&H4hwWQ71T5PCPZGQinvT)PQk~#cUB8CTdA|n&m^3l+qA~L;it|&&n0|q(!Kip z^H956P(~bf7U!SK;Kcda<}QVntFY7d^5ocg)%Eo`E4aJ9w&jk)PHEr-g*(T_SEV?qC%VMdZAZM`*vh5lj3uhtOEXi5{+2I(nu47Us z+y~bV_Kdn60}tC=WwW1;y)~+5FJbuV#@<@cZhyxIAuVWb{rnbE)cU3K#?|&465!MK z+yYYj_*^LHDu=a$K7FhH>_oKnWUP&g7prS>r9^w&KQ}&#ij!$?D0iuBAXX<-jGMVt zh}F>-B|0qjyKg}RyenZ8Fyb0Oh6^nMjobMZ=|zHzY_i0Os*FRa=Avu#(T0G3p^jZ91e*&`L74d}&YcN>%j1+=MX6 z1CZFt9DmWjp#b(|VT{xOnZX_wy&M`~iIcD@5USDbHu|W|?Mx`9*@xLFvsKw*JWB}? zf`3!ET@*6@PFvp+CPd`=H15vDy~3fBwj>T)-J+ipxU>ppY}KJHCNVh|aT1rtJ^W@0 zF~M=;97?b*@|NT%m!MEbFu#OtY3>Jq{R^-D;8SOR{)Lk>@hdVmF9Yx{ zo!7x^CEP4-v`{W?SWOf1V9s$X7m4c@ttwuubjEajslthoqw+P3dS64r(nIEx*vuzz zboR5l9dQ0Ox9QECe2_#$B8;MNw?Q@Y^ND)qq_^IcylveKs7@HRE;GY;G~=if2d8W$ zU^4^~KcYdj{TJhD1yULCn6{6(iLf^z4OUTsLEVS%D6EgZGGCB|(0*evgabILq)2<< zeiQpC`Kc7~TW|-QXpgDIjqo=Y(}`Oy$#ESD4v#}meA%#zf-|3&>#@qs3(RSt0`n}?pe$V_ zm`qlylwgS^in^Yw^$lvahEolz9a7bBd%=2Ns%K0wtyYiTmAB2xpy4!_hJ&I#4R5)I z+p5Ejr^?L>%tu%S=2@tr!~{^BOjfHJjz*$}Qv{W(;e7aLIb*ogaCJuww->DUrFzE1 zZdQ-p6)IU7G@J(0aFN8UM?Rvj>Kbm}k8#|pa`OUn{#Ai_7HUwIF2%`YwW{HY#;4(W zuGTjooi&_lSmltahT99)`%*n)+GcF^=v|$bk0YE{F1Xa;Sday5LwHJobfI1OvKy9MW@`4M9x zNx9*5*Kk`aIiyiT@&a@0QGt0DYAC@I4JVV;s)oB&sKJ#e$fto^!>NX-B$^_M+Y3De zaw)FiRL>;er{TRJs=nbyPJ>gmIS-Sg4lULPZHtW3ZNgVCa4Ptfs6O%2zRhQ{m&rs) z%A}V^y4o5MA?p}$CWW!2?zFXfp|<3+2Mhl7hzchQ0-_I;obv^-ftzXon zc7yW?m|@9wsaaMguO5F*cha)Q&N?qYUE#0k=5W)RceXOgFv&`f$o{>mqxM|$#1FeJ zV`bP?!19k4`)|HWXG7V+xAPx()vp*LD<^kE%sq-n!F}&N_sPzEFG-2CE7W#V*m43% zqY*iz44Gzwie=u$xKA(8t@BWrOK2u?FW~p`dQQl)1rfFdpQrN}Flf^%CcGnIl>6(F#-k&;*QBUT-u~H7vT* zeVVwj+AvDjHb@uAYje+yhsCPWGSJ`T6L%lYGJ1L4OtvEK3%#)-ovO!3thh6$;!2h2 z=_&U%n5;B7CPenNw`-wqpKBe;)f%nmc=gb{0IL;L)&@hY^}Arw$FG4j zB9yL4rz9SpFz`^vbCIQMUo*e0vwx~gPr8zI&3x1)+nRZ*udu8^Q**~kz)CJZ2$FqS z^7f4;-abS_8#0XZ`AZIkX!uni9)NW+9Enls&k)O9=BJX&uhPfmhw?`pao6S7n0usf z`9U;sc%$UB_@uIKH`WYzt?6@W^?)JrLV+noFP_1+_lQEO2;;kZUy^+ zm$P9_Q4V-tAs7Jkz6O4El!G65;5F4~Yia9xE%3;rD6uh!*Gf`>_5ckKmV8ZF0m$C;rJ>ul}8Hk~}uGsAN-# zu<}zb&nLMxI4Pg`K_`9C2^L&ZYrB+FD_)9&p2=UP%{=@F9>~{Jfv+#gZlcCHoB|6qa-u z%C3-f^ONP0ZsXWb(l2(aGC!FGmb(eZ<_S8ydcgg(QW|jYr0F-{te-J)-sLRmL)j%~ zNk?R5N$22HS<;8{1@i$?WJ%8#$wOvI&sWJqnJnqv+mT^08B)DBcYN#EWjq-O<(b_)66#Ld=+n3)m*6?r!qqI z5k^Cie<7QJ_%;I@4@NNg3|kg#>Vw0jcyA%$8#0#{@!sx?3yg;S%-{Jrzb_IX(Q_Jm zH=(e^tLS$+1>Ik5ZLaqk{ew_vZ3Wq{eD%BBj_($m>oR?&F?;-H&KplDIyz%{ zaj;Xhm$jQ1o_Wyr-E7IOXKI3F>YSLTUHa^VxH}CFX4fC#C*W`Gov5T$&SzIp zAx4>e!#EHm1u47s!K^~%%g75dlm@qK)q|}aX_g^%Xy+i>g68Rtc7I`zAvT#}Gj<5m z7`8{Lmj{m~^&{$MYJmlMM*@uixL+^0xuEnw2g0G#_-Hvo|x{mo1r}KTzoYOfCHwpW5It|#yxaREc zc8+Vz@-AZPr5DC#Hc7G=4oJ&6KCzQ-V`EHvg+8n4((j>#tQ^cio5lA;#~?xonG+$( zln8|kX6R)ADD{pMkw{7q{7>zYfu0(rJ~M6&c#28}p&%E9BhVeZQ6lRg7pUH_J;ixb zP#YKqtP<|IUJ}ExAr8995%&axtG%u#voju1)ctTJwZ5xLhS{DK{R~=?64wAbQCcNlYvPuzaG?qu;QV5^d%<0*5yR{6$>3SO*Vb#tEFw5d2 z=Jv^@?+&7$0|Y3C!KO(9Q#fgV73(2}|i9Yga+jS&>vlYTKZ*FGgfDN&|Mr?nW-C;>cwbK(ykAKs0zr za^(xl>BrixOg|1HR^16~jCdD-2pnc)J9y-Pjc&Oyrga%Fudy*<(HOZZTs!!sO?cuQ zngfM6#mEnEj3tbw=L2MDz_2lVB{s{Rap2i$lo$@ChZ_Xz(GiHVisvGeEqD&9YjN%^ z1+1zZ&zZBD&&aD}Lkeqwr9QOjU?ea6sXj;&WWB;cIwm# zJ`!(tbkHn%LG~Qa?2q*s`5@=*xb%YTSziy!XQHII=>(98A%#jN{(Oa%0g&_>d70=z z%7QIoywbE7$;(FWpxGK!o6c-d?Uxx?95*r+YCleT>UYp0uu|78WZ3b9@htL&T+koK zu6ol&6${vTT@2pBvcWHM>ia}5`JMzf-IVFo_zrz9+>*_j*vc-dabLY&-F`t;YMQb> z+w<%xO`8&WB|obh0fTOIEuK85n`itJU5jil=;oY%qHB@uMcq8_pXgd-dr3Fv{S#e_ zY%lBPf`6iGk?mF8T=Y+LEwa6+9$J%MQ}Qc5kFLcFm&#Ax(2Y{m&DYB}Z|O!Udh%xZ z<}12Uik@69-#qfOJW-0CoGRZurW>W`$?5XVKzUPjoG^y{Mb#{S#e_Y%l5Nynmu=k?m#OT<}kHEwa6; zn~VO5u0^)jbn}XTqHB@u4c%PwPjoG^y``Ji{S#e_Y+upMoBoNeMYcy+B4n5S6J3jJ zkLk%N{)mXW7TF%x&1wHc*CN}Kx;f*Y=vrhGjyN%TqMS!ChVpVJlOfdr1t?d={F9BN zSY#K(vsmCzg>3EMSJSLZFv;J+g{6j_AFgQ~lWN5;O;@gCn{H!i_a;%K@fR+Z7rYCre)N~}( z#A2_sz%t5k;W^6|b%J8bb2QTu5O+|kotmZtW^9klQvCfSoY?WtUO!5uV!2%%)GrDI z?T4s>vrdGHgbkRs&!mRg0v!d<3^h99^9yg1I#csXx*f31IfbUAFkJ72l3ul`hnY?4YOOfvL^=ai;0Mt~##s1dGZoS&j?YfGYv{8UmP-vm z2Si1Op6XNioYk;-G*Q|@F=#a%kj2x?YTw1%Mke4k@sis_6 zUQMpKj%ONvPhQoDIFP1KcN7Xhw8yCctg@Na9owQWbIV>&x3FP7rL)<(a{n$xU4+c; zlISA13;_*c)L24<8Ddtkrr?z#oKI)tX6NY!x7yJkCIg%x({~D2F7h`F35v;(lx^q? zNNSKt<(2*e=cNI#BF&v+o>Xd&sF2D>DGKdFsscRcR z+?AL33VD%|?H0ABWTP|6t6MB~Y*8EaENY#+0Gc+!=Ah!&+SavBWUP|jb*&?n7aE-a zk*{mv1@XV8|X-wJ~Gw`p7@2=$H5*mYJP@POBR(JbTjjZU{* zCR#=vC_TG_Q?fPEjHxw?=ZsYM-8-~Xyyn*209Od>K~+0ee+!Ez)@I%F^fA@(Ok>0= zx@eTPBnte{nff7u=-Ip5}~01HJBjJ^y^@Acg;{#r${ zgEF9|KIx|gD;4e;y@2UXS>(2khxCD%y!5aCh>CG7VoICK^*uSrY`gmHhPI0>#7cI6 z^q^ny6Cu9FF*nnOE7r#Oih;FZG1jF9+s^9;w!-`~cEa%~LAQMq{Iw4Tg*kY{keJ6;_GoW1s z=d=u%h?xGgIo!I!L9ZVPK8mbVI7fmw2a;}x?@ubbqT_b5HRrnC5FdCn-Ky)IC(=aM zyV7mCd{T!^Z?jXax9MoQI=A5FI;A1Y3@ z-s;NIsn!&r*DXWhUhn_5FT3=nPPM+`{RQ-PPNv)6Ph-6&FQBz zPE_Fp(IGq88gQ_at%)E*REUtaP*FSWnQtJ=Y`BRL=e%R07THe%V6>7ge2cOZX$1$P zu@6M&P-CUE)2`PYV;(qpj8eb)hhKhZIX_d{klOOcIx#&N)Zx|oRQN{b4Jy!AIYM#lj zO?bwXaHFaci&DH;lp^nfVo)kFoEDp!&WpZN;I!d!5yRRICRBK@zLF+B=E%h*LE4}N z3#ToG9IeBPqGQ9|S=a!hbVQ;*K5D>THwS=pU&MpC=7?S*`b^*93xfOrZN-R#tt1cH z(D3a^az@KH266@kAICrFg92PF%EaRj2LWzGywH@Ysb;{P;l?jDH5oI>Ywu20vrmM? z`X({?F?jj{AdR}BNkxM&VCD^SU!t`Lg>GX|4_qYqHUfjSoHp)dDy7h5=p%uK57R{r z*RH<&o+rV4W>ii5=h4L+44RELc5nN5dIWrFBS)D7#2%h2Of#hCFq)s0wFO2LKz-d~ zn4BwUegU8dLDJqHaNwZ->c!=M>?0A}e26p*(qLAWgEFy4%z|4KQRZV^2eD_nrx=i{ z%HU==!L;&nLbdYZ>a>Q4{aBfc88K2=)DB+;8+2deG*)H7t`j8zJ|<(66361`Kig87 zmU!FPopn1O?$ftF_ax?@2)IBS)-5oyqnEtM@INozPHLHX7=(7u6zCHv|h{o$AEM{Ow{cIuSR@VnRK)f48ZXIbSF)S&o#^|Af;oGV9k zF)s=|=Yb2Hb*iNiZX`P?znqPE2QEeHuzE?SBH?Wy0cY6(-wNo-fgNz2a&v+s zzlE4%$*3;tleU}U+oj2Vtaq{(5{~sw_B0|{-#gjQT2jwsKcN?A;&DBhi4z)byKE5F zLo!k-mR?g+qnPxC*_G^iH|eV*?1od%JB|pN-=zlJX==bG&G)xH%9-0-XHTRXX;GWG zn()>e;yo!Kc0)XIB3-ZPn!S)?nuymc`^FPITyKiOdOoGF8AU+v>Pr~wlMPY?Hmj7e zLJ=4{k!~tp*dRqtp`)^(X=xsf$`^+=irhPff9` zrU+~_MS#Ab2(0I`xScxVD*i-D_y{X=xS+Vn++3O+U}GkgW>U4e0XZjMthqrm!ydQx zD?zcDEjWJyPuf8MxO(syzq5)78K<77Rk#XvUH`Pcu2B^>>sUDQ@X$D!By=~isF;nX zn-38ismXW)dh~#|WNAa0o1ztCEzKq6lw31%Y3G4^wB8>1J7Lm5vOyP};h~~oC=2ay zXWRoX*m9&c2F5QoX&iyaXqHbdwTMc6eOl|&0v8ExEoSntjd9i+RS)^T0EYFRwtM5)_2x3AzBFP z4SsQM^TXoa(@%qdQAVeA%zBDN0@PukfvqE)-#KVZa2t@e{%L*5rk;%Grgo1zZ( zr3qk^FiSx9>l$ct5@8+u&Rpg8^))(e11#+chmmW^h%mXGT_OV?*%9|>$4MIL%Ovhw zA+h^`qABRN#A7s%9IY!sZJh%(J^-`qehI;PzR&Z)f*R_IWK6&YJ8N5(_GXoVOyzIiT@I3DB@c<(jcFNZ^RS&BfQY`x;^m z93hoT-40;ER5A>&fkde1#Bn1|_rlCg1vgb!gI!(aAuIdrsnyvg$H%i?+kDBH=LI^W2l? z(a^G&xL6eIKPoh_H_^nZ+YJNTsdm9LJ5&n2O9^tcK@@q#oFEg|j^@Rq2NlVHy2O7K z$tEf)sa|EOIh9Ez6e<(myxaIfH`Zr@H}nx)jBQ9JWUcdorKHiLGHHYv9Xx&np7p3q zEceSQlMW8(s!VtYawwvW6=FnO4fH@tldOGm<-}L0O2bZ7sv4qz(5jnJp>_Hwf@lCj zO9APpDv6Jv{e)&Oy$DB&4NP6q79W(SmV*_shx^66*b6XsYO3tjn)paEF!VdG{m_?w z?Tz1f;f>%?_rc_`xgM>Fm9x~PS)1!(zDCKBzA3~8PxMD75@HCM>%JMvSF>+++LHQ$ z24K7<(;zA&MiG4v?0{)YW4gan8V=W61v5@t;v3$;5&8|6Jtxx5rY)g+popL^Nf8q8 zY%pz!chGzUHyaF-qyjm;1wE?JmQb%sF9@kNs#>X2hC&;Qx7X`!V9LGiA<9=}+LG6m zP}$te$p*9~wfu_robpFurY%_+ddX=^Ble9Kv8Ln!5J{W*W&!$A8D`oBGxdaBZx}h4 z^~qNP7qPFOi@M;_NJcR1OIxa-Ej0>li4{Uc+7gPdX-gHU4u(A}64gZEkOhIR|b%&qDERQK3PGb6@M1N-*m+9_$B(1HM-#KN>bTTRVUMCYX!m|Bz zG8D2xCoA{6)M0coDT1Y5TIY&;minSYanHh3?J4eA;;ZTI-sy0J=dRY_ih)?A!wtU| z9S$HeF_jJ^kd(aQHs0F)3{A1E5y&QM#wk3zTy#(iQ063?ag*$}xwTW~g;UHPsrVJ8 zN)oMr4X}IkDyo&XfKBMLi{x!!foQ85EANCVFQmEJUn}b?8}LtOKs#ANJx3WSCuZ0VN#) zj>-azfP2TLAj(CuN-xV{4}g$zmfz>w)12lYg-m)G$EB3?vUW0D*2~P9Cdrb;t9b?@on@VQRXnGO z+Op;EX}kTp5R&RJsID5OfFdrlw%0s&q=s_0F*%rl(2lC2<7xxRVksj+CF3|ehXRTl ziO)jX{9pFwPoJk$-U0)&%iP$uMoYHs-}k#|Bzw!{BM?}>L<*wyTpHE!(WbD~j`NQo z_Wgh*+gP;W2;JJy);#EV=fInrzZO22V{4pT?$?!o)7D6erf=U z3?7fZoNDKNKo|yb6|?3Avq6W^b_KJPQNhKL$AqvVFRGs9n~eD9zE1@D3-lZs3N^UH zWtqMHIi=5vBGb{7OP}D5=HAGKQpa6ll0^z0C{Rd?76v~z&WAQ1*W3HVrj}`0RRL~n% zEH$@Cp)A?5(d%4U6}6M|rAlSd&gd-dltG!F$Me}C6_UG?B10X{!IG3UjeE*4%({f} z8HT{1QVNTn8cyctRvJhaUp;co#$8xsof5q#>>k+(!O3J;5AB9y_KJ_!@G%YU6yhQR z#PS;5#iZNfd^OqqFdICkEA!JCU15pGb%jHo&=ud$lc8%dg@1~gUZuGFumP(LdDU{w z*R4I)vgNy$@bN9PzFOV3Xf)AcD%8Y6!6KDA{>i0q4^oiqPdE`B-2UM4QZTLFV4AQp zP)_xR`=l850-I=8myS^6x!LdcuFK~Qg}G3~jWCV@w-7kdhqd&vD;@-HS9PGXN&SJH zuF_fCYX=E?`%1F<8jwl7HLo`GW@^m|;*#@BnsX)Y;B6l4VMMiL%ala0i4Lf8S(Pi_ zN$pZZDPFgL9rFQ}3ZfZgDxHC2D?KUKGCK4>1IJ$IIRnR1_+$0xT{X$d$h3gdsY5yz z$oy8lA3$_l-Hi}xNZ#0o`y&6)S;X)7*Ca(HynumtSs>vOn*{nyKEI$X7z9hITy>Elv6ioNbOr}VSLYewpq z{#rYCxnBHJLmzx6b}0;fdk&%xi{ElPUnAZl8H0@!bMQ8HzG%hyBHx>xPjAf4YW$T&!I{klns3{$}Mu{LRW`;?MI5OjTSE`~S+U zT#>9?EWXxa<%-^&m8-{_=&W2mDO$nGWnXMZuHVikHL@m~6v~jTSaqgOe8i3~N8!Xs zje;BBoDmVgI=`>a@EvSZEF=5crXFiYV=k~u?nDB+=EBaV=;7>jwm`7Vm2w20Bf04nSM8xeS2+DTmX4OyT3q$RpU=m|ekrQE}kIL74sdBis&T>T5Km^>d z%klD$oVOz*vKGzePg+GwudjLnKJ&tD2pz9AZ&qdT?Fv38AJKaogcZo*EE?fG7ZLXcSPiXaf;RP%3dp_$Q5nOd8sq(cvUD zi=?e)W4F`EYIgbwIsr8mKpH0vw)UyLHYVozX?EE5$o-L_IwW+QqVdo}6im%4+89af zUUr)1x1W^(teS1eo+$1xt!X_DJIg3*%wF7M+b$gpD5EU*g=JPoS?;@*+1!FGT4a}h z*w;s&Mw6iyq^30-Z=pphz5R>OjHpI$CBp=TxSco>NMw@%#vu%j4<1YgWlLV) zzR6Od6%V&}ICWhO=Mw^48WuBWz1ZMIHQC(j;>KP?((nD&7rykvFTMIxuQ`8q1-b2U zaql75rd}7fVg-@o2|Y1$j?7L~!o%xDDByjxzLNc0StgZ+?^=<6cXcEGKKUq)8q)FI z*oJ^xi8bez2%4?QHRhkW<^*y3*O))$8pZj^7qjJ2=D@Ayi&4nTmOLvh#Fc})dy~HM z;9WVJU0HI-P=H>y3|rjm{onRwm)?{s=Zcq;YjEXkDb-rMSJY&l>@8|Ojg%*Q)6>|) z7^rsI21nolhKoR7Rs&qdIvatwlVDnGo4yb@1-b^XX1t>}V3ed)ps2uKrQ z{?chRj_i@rNi`BIFi%$3P753)1m4%o)WMA44DYl*aV*Iv`y`fw0zrPSz_19Z3j@Y5 zK;=MA!ynCw&$N-Wg?Jor#(^M;Fb@sr+3S!DV)~%3#K&1FvWGjTispn$r>55dgdu(Tg(P250f6w zcmIXAWS!J}43|inI*I*nJ9NQ~VQFJ-7&kkxvVhkrWyTu9mWB|L%jSnvRwXn6<8|`e zu|*qc8NJRXJL{+YhVY0s^)nzO!)CN=xl{IlioTg3fA-iK zH=V*A*zoNWEqvRDJ95|ubH|Nd*^Oq;(YaT&XF@mnDcg+r3UiHn;y$g8kxwVInURlY zd(gdOg}hs(45JS7=~Q8FEd_e)m=xyHc%TwwJz`m=Y-UIc-C@$iQxO+Hs_aqSLUQww zr4ZvGBaeI6+oOmXqH?hvVA^AkqD1w;?bDMEA~(o!hDqUSt`F8zeT2mtt=wi%42u&I zN$}P|o#qBv2*S6PQ*LRSSEhrT?u!N^-a$JC!ECuaD9;V%Q+ce@ubug&Ei^7>~!CR;1uBO=I>r)MLrI z8)l5CbYac0Zlc_nr^&~R3tldB!T2G^1?@ja$HpDa@9ff?Hyq8;ZfT6O1bdo~AF=`P z{3q41$U&3&?d{?;;7*HjaDjTVX(E9wJXjr!riyz8OSOWtt2jz)q1lge21 zM2YoX7$L;o#8{h83#i0kb0QQ;qE0hIP!kWf=4L?o-d22GI?}w?EP2|YzSr|(=~%1O zrec`;?&}pVE@+_#Ry-Xws3V>>;`#h6lY!)JFXG2z7k#qwMvAJzN_8H{0HJPlQQQ4B z3|bU%UTBhMgP<9v}qM!8a@$}Y}rI`UjB?wD1(R3wjP+z zRoqxnyHU=HHQ8DV6Ioj)NLcZ$z^j0fobuD3x#HX(U3b-{LDL?n# zI&A)`@^K!fGoRlJCVO0&VhCjR1y-nXMLY$sAm$v#rD!1=WAvfMuv@}O1UHr|)d9d* z6cvpJrDC|f$@-TBn5xM?5eZ03jP^#cX_&y~zGdlHQG>uKE7TW#$Nn!e9c?D{QTQIY zSeRkslqc;C!?1|~VZSlfM8HgT`w%0zUr z#Do)LYBJ}hw8FEFqcGN@yAp;_pw@D(OjDDzKm#|FYXaCq-{&e3R(5Kon9B1pW=^FD z-#&FtEoIwos+I4BF#>4E z#P1>m(*&P@J;uNo_c(h(EO0?+++Y=^fF>j1RlYYK#@39eoZ|S211c4seZqI}+7pyc zls*E|_Es=X(nrxw4Hv0Y1r-8*&b26MzQ)N7sJ`)q5Pk)rE|ms*T*;~6VknHMQAWCO z(MQ8eKwj=FRkEa&WRH>nem$`MCWs7bVG;_ZvD^h~sqi&h zRtKu)g-Bv&-+h>5=!^;u$&vAXR!HRqfw4r+QA4MCm&gsfH)%&~%C{r7u3Z#3igFDa zb-4s{CUR#IPb)-=XdvEOD`Q}R9-SnJ7bfh?c0`@k3urNLz@}jX4%ljPdoSt3lS_Jz z)4jD~(9lM4Skwf5#sFQX*kO>dN~5rf^QcBEXKN`{ic$Q!lCyP{)n+a}SW6aj5C|@! zAOKG`ZTMkyU#}n=EM7GYN)iEG!hUNFb|VRB`7*%9Z!=4Mm_*Y zGz>IQ)To_uT6_m}30Z}okc3-2@?0(q}5e==NW#{HRoSQ8=WhsLa@p*HW zfzF6UsOL1)S_)|ecO3{E=e~8|O1k@&jf`5>Y}HD)YUR*Y4Qo^QH;X%Jv`3rCGyyRk zom9m1tuRBwj-(}r{s|$qW3;hTV+-jby^0~O#wiU^jE&~M;haE>-jAR!vI5EIXV0~= z24T3NVL<@1w)b7XcFxWtKMS3B96C`heF5PZO5oxk(`a~a?LN#u448C~a_M1dX$67FtfT_iA8bZ=c1hgeVI%ZP zC>SO+@!E-?L=EE*r>bPlDwSnT(H&l_XUQ|}RMGq6T`CF+3U_bL8yR)@$xhBNaI%x% z@TZn(E9M-JD`==zW)Vyi(PSKw4oI@)NAy^Ys~TRxKm}GwmKleTs9_uuVH@a%T0dyj zqV6PNJoUa&j}2p7kMdT=AzJYHiKWm|s(GCnKGHanD#lX`YgJ%1!Ya^|o)^g=C5^A} z#_uRni9l>1P7zeDhWn5eMq640UQ{AV>V2ag_ucg|n#g)<$hmS^X#y z78&Y8zwFdsvSKR2uH>R*v?b>cS-#b_K}v|;LW#mo%Lmsm*FMndZe`*;iKAspbMNM` zqH4*C3WAQ_SGuK^D5V$8oI6u)y&N>mw#8gd&GmN(k~$pEDF0LeYXl_7_Gd_F)vSal z0dZ3Vx-5uuX;{afc+sCPb-)pG^$ByA%@=kl7;McK#Z+j{ zmvm@eH5usfb30#}hvq%ad;#Fg<_nEggK2opk*4|59<%~uJgZ5QEEGM$HF{_T@sLLc z2WC6?I28A85c?a-hxzw5o2@Smi8te@G@SfA83~zhHW&)u( zW(K=U0yK$}g>zn8T&DNvoa2(dKppml#_By;??mE|VWO?W^@#NfM+6t$qo18WDm7rp|0%?pSO(urLV z*!5Dk*Z{GK_|T7zeX+sJ{nTZ}n%Li3Ls#RDs$CB?&v4X+K24KE^IH8N|dsMi}_L-JiwC2nkZk%1JV)?35tX}|0ST4}N56D+qDV)A#K?A-V z6EEyIUSJ%=&p=iK8ZHcJbQYw9EgmP>E#%R`0XaClm@F=>Brd8sQXqk_0wV&arO@oC zkds-`G8^eayiPR&N}0CQ^u1ciX@FQoxYxYAKO$z9xgtHl8tRBiCM~265w3h7zD^<0 zmEXQAKUB2${b6_-+{~LF`lvh<-p0!p%DlW?KK2Q{cq1>cu(**6795~$`KaIT;O>RH z@|il}HQd2cgUZ}=sqlvK?1#>26`bZM<`14DrZ;~8G3T`as zHXI4rP(C21d*~jZTL@-e!KX2rbAP%oU4~P*!<$Q{J(g9`DWC>H4};KN$*OKo-I@^4 z-I|aJrNM4Wh3H+P@?wRhLdUv6Af(U;aW$gIDz(|317VE_BPkiOMqV|&Fl&Wu%>v8H z)Zne+jTmgBnOSe6*`P+=$);#bEuQqT&1a#mLmM-VswFfh?aCS<>-_1e)_RF{U+BB9 zsYTOboV?3QAi0q5#1##9UBg9;>Bz#N)uZMi;W3|u>)N9&a>YK|ly1GL2%Ais_6B{Z zo!LfX@_NZ&3seqBb|*qg7Neq-#IM0`?chqnLo@O=E4a5SXEAbF)95vRGxqN8yPzP%ujL(=%11>GC{n^{1;3Ye z+D$sQjfR+U%mY+xa-gvQbBPPB-%u7FSQJS|qidKY}I)@AvwVHmynzE=h%=(NU|!3{>7ZkC>mAIfvMWT+T7cJ!htN&#^NLUoCHR zYY@S=*x|-s41y<@y65aM8Zl&c&snFeevo_4CH0fsbJiySxCJ*O?uB~}0deh~lPC8a ztIKiEvGyGI96NGV?l}`p_neS|T$|i;Jc@pjdydD?Pjb%@F%a<0aW}-H>A@-N>0}1g zGkdvkG(C(%r4VtbWC^)1e^&lEA$?t_0$}V-q-W-!!_3^np!+8N-z4<8VHo<~ z5a?fFryX@TH!`>|vKo41~4`krA6w4%wb)hU}5G6k3{4FTlZR%-pkx zawt|#U>FkRP#>leE@Y4%-r+fB^ElVz}s2deWzf2%a|*q4bu<(0h81lSYduIWtVnSnrma*xKG&*XrRn~I_5 z36sLTprzBc=dwUAE@FZmX}IaEr+u}lRTfys*-HV7iR&r5FQ3*-Dy>7(`=Lk17&IiH zUOR4V_m%D!Xd5YFbIx&GigDq&b`}ZvxLVttk4&|ho0=;0S)gfS9UAdNCI{n(Xk!Hr zeo4OLvX!4KB2F9eL&(vXG|0@$Ck^&VF)R9>6w zng2022!R@RL6&qHpOh=?XQG6*ArntfY6P!Ijf|vBOaOvz+2*cm?u_0*+=YP`ZM!Cp zXdQg>P``@LcJejV;kiQ=5HALh$*+F_0h_;R7Z0$nUOX6ekY{Sr6GeWY!aG~K^+V%I zyddu6^2H;^Nl(iL|6^^v&Uw?EPD{wTVM~auM+msy)C~+SAt38>vV^Q#5?HLJr;Wg3 ziD0WQUdqL5s8ho4)skv6&k@0;chTgZ(yBsg;vS6=C1=8*xu_engt*IC99BW~eci-8 ztia_GrFBkGSy(QM3A;ok0*?m1edM(LYbpYd`vV?3qGRLdC-EKaP@j*)D-b1C788kz z!+8+fb#=kQFUmiDWGO{gZ;Q64`IiOWIbag;*b zKaD#Pi@O;ks5dzpG+r@KmoY}LPk||Y8ox%~mJJ%u=s@t*whB8j7YPc^(Mt^qzIrgy zCh~it;INSqs66)Y#ffsD0snz2Entci4;Jc@yyqAjY%X|1#7)9=q==hqI{5Z44Ym1` zoz|GtUfrWTEE*~aAg)jwY>C2np&iBxvCAUu8x~gVV5$Q=tw$nC*3u$Yydg3?wq+`Z zQfM%H7`BF&L7k(F6UCQ3yt3NO8}A#`;ghEBAY+i!+C~?nLe(d7QH77fMLi|UAh8T# z6o!qUZ0drq@hNoDgi*NKY%B)NNPcjKoUnGTDHO2{4TA5{9 zsG%F}ge$`NrV+TuuDU>@E&TwEw%j%JD4%fM0thbBR?Pw#T{?;x)6qBpP^!%Cf>9+> zORu8VC}xxNq&lP6O?3AWF-7sT+RGwD4sw+#s#^hV{5xocj7ou;`s`N7rm+tT^=J?l zesLa1SjlX-CFJtZXiP2!9so{QqQL9}fMRfI*?J(#E<@53C#97UO*BMm}fr59&Neg)@8+_BfAo679q-L z8)FT-NjrIJv)qa3PJ#Xujy^at>L_mS7HT#&?T=KABr5WFXQ!@4$(C0G{T*Hnhi#ce zsTv5qs%b`WQ#IN$N!7ILYP6HGyc$XvUQJ|--Z18>24l|vJkRTUSu9^_jDRJ$vt;pz z?iZjY5DD&}HZ_M6PJK4V4lei3oYD zCX+dk?DjexHqO+1$&zBI>sTt@SwH);=Nh3@eyNjpD&86*y6hkPHZ2NMoH5!Dky`BA zq6-Vzk`^GqOkHfP33RlLShQF^dz1U_c@r7&jbeZCb*psj92z4{7t$9a_{@#q4a9UF z2OA~wX%QFZ-NEuhZ;+wzoj@Cd*DP4|Uu_TlDrrD%r;Ww4EV&_hY8kW+LhVB#;_$|j z&N}=U=`l^(caOB^Ep(~X-AsKqUEdY;9WK@>N4LJ4NOuBDiHwwK2%wLc28Eo<@@Z&b z2vLE@_Su*(33kyzb1BJAJnZ2#^R!fW|46$MhQg_Uf}ktI3J(WL3uY{YPs!8nl-B9Y zZdIXP7RhE}?;AsZF)9C4)Xsm=>L_?qTcZpnV)TiqE^B3W$S?q94dcgh3HMJcWkaG< z7J1BWT-8xnYmx$C9q-LlLhD6FHuPBYgl_aJYGCJfwbwb#W=3vgk+BquCj)hk@C^8= zD^#xyVzq)1w0)tH(-c>nYms*dLX5mHuTMvOjnFG$|>?8KR(Q zC>3J=Z-v-bE!Or7M7N-Y8e{4e>BUNh4B3a-lZ;xyMxfEaWZ`)+DWA{NQ#n|kWBQ+2 z{2i6gq1OUjq;&{kpuQFn8`?{uGYJA}G*-R}m(Vn`m`39Im_y7QJ0luxhiO%fWWzp$ zXQIaKiv$i3c4TF%$gW@;nK^X-FP+QEO%3Z)I^6vzmZqq-hy?ko*tFUmdmMnf|FAOs z{=*nH`yb?hMnkXU>3=Z*L2$SrKxjr!$F86ct;h}Y7_>afb8v&Lqb59F1`xVhM~hsz z3$92HY486y(nfZ{3iP0De2^&@`nHVov{by^2q;cY^s9@qlB#X*bI3nB{1M(Rg-*Ayr1_~C$dqn7_FP0CCbyno^7uY%!0`HE zIt}~sz+}GSo>A25y%puz)={00*{T?7kA!_UV;wU;Y@RwPrVn;dp_$w{D#pO`cxg7?hTM zN~Q>@ka++Ub~p-`xatwrLOOIle9ccqVz#hX`mR_N7iNnr209M%s1xs8L#jBnXHRNQ zsy8)fCcQ;kAJUp>iHxZ=)5S`+hS9t_zfpb{)sn7R1Qv3s=!xI(N8T4hc2>+qI|qvr zY@b&{%79@|4mK89$^b?e&mdP%V~Jj=m;tNf1yIxGFYNrXp0>2-YglSTs@8*kSF;H_ zwMw7Tp`zioBAQ(7%VQd@?Rp4|k&%S=V+5v-Av5`-l<)djvWo&XYi)sl70pEQ>W2x{ z(pf(EP8q&H>XcuK2?7T4eYz(b#Y^ozgo&pyDKIjz>*wX}|0o~Kn+j6Nf3_e)OV z(SVPD4$R&D;J=Z=SIf8tSyo4I<={MAIXS1n8--R?v%A~7M1}-W$PT`$B=He-q;rc` zT2a$SS#yhma7k|{(RYR+Ge8SZTb8{>9#B>cD5zT57>MmG`Z41zDd0GpO0#C4t$MYD zVPW`ZdWlj1lnR;RwU9}P`0#gRE-R)L37JqlES$2^7Fqw>GA{=Z>S{GTDj3*|RZ3u9 z?1&@{F!9D<64EPJAx{&%cC?s1Q!pX5xSzXGfpdG))PW9T^&-2r5yMV4?Z6G%$=bkI zQUX&19SMsym7I?pfF{q79FPNYz)^z9>Q!@L`Q9p%ao8eYyV(_+a1?odHGoy~B>je3 z4c^}}x=4=zY3bv8;LzW*<>1R_hc5^3`~4q#;(Z@___LpUemQ`sKEE7jfmz~h^v$vy zJUu;lZq|bzd44_khFlLG`DR)V&Ynj+xc{+F{qnDV<%yqr@$=Hb^UFbS@86`$!PAq2 z=Vm$hE$zCB6TJf^Zu2Yv;{HSg8^mdDkUvRuZ)><+vEEz$3R!lTm@4UKiI4Ykffr>2 z-jYd@Lk#;{H~`?hvaI%m5c&CDNrryIAB&z6?eZiUUZlsddn^S@RbT}J6&Oy*suNW? zg@^tq;AcN)gno%FR`j@XiL^~u>4r$Vewob7K6o@-Wh2VQ{tUWAbRt&UOSIMgN)l<8 z8~~sJT_Tml7+XrVb$WR}iXn~qkPcX(r4FdaOHTo~A06p(p$BbKYH?-!{y!z>*WBdD}ZD7 zhlS-Y^A$S#0PV7Rpm`3974K3zW~erOGRt)S#+1P4MZLV!`Ky(!H8P^n(P#N4w1(gw z7RouX_XL&jU2~}p+SC-me=o$Eq<@W!T9>4Mz8&f@%qZm6w zY#yMeC5W}-%Sl(9m*+%Lq(sfw#A^Cl@dD2xi}>-FS#NXRSsuuI?7>DQZZYTudabySJUd>6*FJBG3dIg^Rg*UGAO}@b!!B~aV z&uFt%O8v|zshA1~YB*aJKwN#ur`4PBLZ^@lMpC@jdD&>~7c4J?FfUHs*U?itEQ|It zqig53_j}1m(18qA-fg_WYX2Hap+PZ9YF1LS8*Sa}(D@s6+^y=FzH4!;({mJ6o}RUR zp`)mBwN|z0S?+EkuJsFfyybmBxM4T5EfP*|?Bd$#jX+sGlgisAIK8oX>NBaZ8BJ$W z8Gbko$C*?ysMYafu34^cvZSeNmiJqA_?T130dBO>6wUEu1`PKZNeuWT0Z zA{F2SS2?xI;jIMT;)jPL~|hU z!p1uA!Wwy2EzXP4cHo6c1`jf=__6HX%BGavV)<$K%09zmBN3>z?k z#?`BL*?B@R$Oy>kM{G~5eaX|w4TWfa_|Aw6P+UI^o=hEN3e%~=El7C50IP@Dl*27d z6qm@_jr0l;zFzjj++$_S(+gzPa4Ds&(5#Xjt8A(WuAn{h4aE!L9eXd7)zW2(Q*hZp zoB|eYa$_gMqU}S)wdY2Q9A^T1Y3)r9*h>?!({T#g#mdS~x{hH7S$aLkRVLA@5vL%< zup`(caSBv|D5K&Oh{_k5gjl}r@xs*vd<)D??ZGmL!zg4z+r}3OxK~a<;fufqx?8hK zP>zUt5vKsYuS%)};tQj48(VKIJnpiuYGd!+3|eO!>gpAKI<_M97_R$ny<1p$3OqT^sSS}J#KF~sp5QdEa0n;i`NrQzE%w^37%=@2Bd#ca) zIoPd!%vL!hUaKz(fT*j2=K@Zc6Lum0$%=d&n-tA$nNWQoFM}$cS*)K1P=$a0K z`oIsLGu;nztE4RV52lyIxWNvhHHCEp+}|h+)#ZW=tFC^EkED@P6cESsWPBA$Go@to z36|{S@Q^$xtiGeP%8iSk^NaPWOKMR&h^b(#vXdi^CYu_Os+bzlJdq(fSRh-X5nE`u zdWVvD<*EsPKN7JzzYb`2DrkP~9SvwE7><>lH^>H1O%#Vbew2X*o-4`+ek9=8vokJs znk-Xlqwd1*Lvl<@hM2ak2MB#|VpwD|D+7VRrVSuCuqk!PN-6bFSE{3 zS@uC0@c%FGPi-O)6C)_#i=N3jmti3QD}x&?qBj>Bma(cuHsx1n*CoS3F&7*b;>kON z>en$WtLkBCB6%8?yj=AL`c9|Rx6z}_E(T?yeDp`tpp47G4f>=(!Hh_Ea&eHmg9ioK zhG{cqt4-Mu2{Ut3r-YelP(b;<#oMw$v6Y)KGjC#MtH?3G9ILI?hMF1Dj?2mi-&GkC zf@qB=#&{TGMMGCLQZYT`1pA@X=|Z7xFK4;LO~xTY!~x0NC@T;XY+z-<4tqIZFs%H~ zOynygwlr?&;~_LxM5TX){1ZcKEN_pDj)eyb;$lI)o8bScjh^!WBgaK2hfMOsYA)Hc zw^GEa$Zz6!4I5sypnT(6Z}5&hf~Cf5Euw<0$fpvOFb0K~lT!hSSI{2?U2>Ekm1f@? z>1RY`twzLRHH9Z-O7w*j8S#mWEGEDJ%qB6ErXdsf*RWLQueqZ89%dNju#~B-ZX$~& zZ9U3ryOOq%+s!}$v`Cv$vo)>UYKd+@HN+>0Aay&0p{iOfUm&?swS;yHc23>#H6Qf68y>V zCdtH8w8o7PdqgAfp}?7<%mfS1nFt909N(Z5uGMRYQGtb?P`0+!9mLs21KET?1!Mzsj9q8pWwc?d*gs#o|lfMW{QJtoe9^-1s`P5Gyo zNi#&0)N5UxKY17Co2`O7;^aPg7q_c+yC+Yvlh8vSqeBKk5lsp`Nu1`mFxj31fmCML ztE)(34QAn|fWU16Ynzew;D^a~AXXxUFd)I33L$BlL886`9PXKDIB_gE`tKs45?q^+ zQfR2@RL`Vw#Ai7~kdG)`?@e^7{Mfzcvhs?CakM@^RDJ$GCt9QIpSaaL88Fn&`;EriPlcKemmlKJe>6}+jlt$LVc-&^V8~ps?>gn@ zqJ3<6WH{!#WOb221kzQ>^!RG1Uilb_O}GqftZiQh7`R8l4!j6GV9A-dmZFg57f7Ao zQ-1BL@?5G!sBw9jiVz;sb;e#7|9Q<7rf4YRUPp`6K&e?73%5J^ts!)WhW8uj z)B}i|K=?Tj1c}{qXyXxD1+>bE+f4p1FR$VOUU(el?Q(A6H*f9bM>#i-$#R;3Z!I1z z|KX8NiqMQ>Zu#&h;SzMlVfC;4i3nx~ooSKds?%_7LK4%Nv^&Ir7e4o{4PDC#g-;eS zsNkGQ50~)v%gW1C>uqX+3VYQRizdz^<(0RUBRGE^5n1m)#f0b)G84_vXh=t?hP5KAFB37U9$Fx;mB<(;bioZ3 z*vZKSMyh;>zA+Vn^n(d7%-4cLAU$<7>dX*-V-mIvfvh8k1J%ZYT2)H%Y96he00F)} zl{Rr|jD@q6wr zvb!GX$+-Yx^2O|ghI_I6M?XPlw`AE%GcBigBjJ}HxJNM{BHfY{Z3<9k7V z@z*SL<_KbPr~EcZ=hQgPM|fY9K7t5>8IOO8#DHH^Tv~V#_O%V6o>3&9mpLw|f28jqC5da_k$J!B=8`qH}W^h2X z=HhZ02onk~1g$~Of$vHWU*LSN{s{{=X9Xust{@Qe6?TJeWi62|W*o`Icj!)T#pGu~ z*zu`aHUn&4{nc(7&%}fEVwqj*wcdTzRMIDNIWt;QR4G33d5I#gXmq66L>SX%6LBTE za1$jrke{Wi-^6?`_**rSzFtft>9R;iJr3@U27%FG+@&s37x6t(8pl`(E|eiLK2)7= zLBHsDu_F4&uFr`2m#_s_pQxxBd)B=nb!rav>x4~IojJXVI@7Qk!r&rQumZeXFm-xB z(eC`KiM$(2LWmh6UXFBE`E)6LKKto&PNu8Y4>G)3vmn#_ zfZTB$5b4qu$uLj)^UCq%@SMg5u^s*!6&pdK2ecEwE zQBU=H=16&e{d)RHQad9kd1^&LxJ|OnrPRdbB?zkS&N|b2?jk$HU*S+EoQ->&Df>ZC zv$7uqRX(l&LEC71Bq^vyj*5OnTV}BL)(g=}QKi_f89CB@O9I~0L9Ts;)U8DuFkv9$ zRT^@e%z8Kh{>{D@%I+I`**)JA$ zLe-HeR!<`aB%aRMeV^6ZOgp$@EK1-s#sx%M7Xi8~fzGA3TsojT585pU-L>bzy1#t1 z0l7ZbJyE~D7|128`(0-e*n z?u50L1Y$Fdoh8J>?pvTop*Mwp_`m<>b6NS~@*&38hYywSr@bt5k8_C^fA}F@tS`U9 z#V`JBJYRQDuCRI!=0|&DA}-RpZfH^x4U3p8#gm2H*_T~XC{zqq0W|~*qry6Y7^ItY zKhU>0 zN6*{dRd84-TzcXmxKzPT$0@6aSD-Fcz*v^BtJ^ngKWj`OVaK&IzLwcuZ}>|_Bphsu zi{w~{m@C!RT)oHb%Gjc#vN{cQuv#P1Rrl^-BaB>J+0(ZcEN%3sDC@IrCf=>^fPWkW%9 zYpLO`;X)F)t^{5X5a1LqOik5L)jd^frMGdneN-vYaH}Ua6zX8Lj(YFlY64JOXi@{D zEz=UKuhiB{fn}+QdH)YGO>O|fU&5~O9i9W&4J@cbKtfOoiHo6JV#Qu{W zur&R>H=2XGVkYQS*dxc}@*4opxY@&y7stN9=#(+I1;Z*1#U)IDl#)o`$!H_`C0 zI+41S7t+qrp+4CCPJfoqshc#Vp25K;oyW&oleWC>_LVX!W1_bzny_gk(H^AcN-X3_`OJ}T~1PLZ93v6kpq$VH-Ti37xY>r=p%>XcXEz|oR zv?$}u^AcX57#Dln-ki0{Z$Hf=xlsgE7E6OpBrkm%Hpj^GxL8V|(k~X1^OU=yoOCg(S?u7eRRG%;Qhlp@(Gr1kSg)^;7Vx=R#F^d`%zRQ=mCI%8d<4}BQx9J zVvQmS7veh4fPr1AsR##Z;u6uE25wL*S^Sph52Q)sJt0vgmpffcINO)Y z(Hlmu^=_)=G*g*TQd%A3uS$_V4@y#NCV1D5(uYig&b{NURWf)zCxr>DZmWAdx?TNM zVVQ(CTGz|EE5n{D>kGah)feA)F5^VU4nV)RAw83EDziKt5)ec3>LO#Hd)XBXZU)~9 z_uj5K*^A0x|5D1C(DATk>jIc9ql<1Js3fBXJ9Ru zj#@C~c*tO2I6i?$P-@5eVq867W~b&r(o!NAXhmCcqKQaUao=!FEf`Y_7eC1?5HFgE zi)47phnUSd4?sxFm3PS4;Oz6i7KXHZ)ch}e4F&L~=6~D4byD`#`9tC&OGd#W0jw8O zOeUUM-H5xuaR8F!;Zk45d+L6IaBrtBb3O9FxNt*^u_<=$95tm0u)g}#uftMd`L9J-0Cv8j(m70WV+ zy4$1H=#Kh@BsR|!cGERIr3od3sV7wIuBNHx9hlMj0U=HxiCN4v)x^Z6eGbie<{`E%np7us*+QELp+ZF( z`??}wfJ8^nY2kqhdz6jP*(h6Z>alC;ouo>S;u_Nk+Pbf|#(7n$1neGiuV71!GMn$M zjYnFe!*zS>{HSJ5_b$;rapnaJdB_y&;*P9qtkd2*gajvZW_~)mSQ&rUc%rvj{h+%BLvV&Q72TN(PT(;GcXWBy!wTJ z;J2`1N^ARk@5Kv$Am?eYTUxye^;735oAwq`g@9~V=MO@pyP~*{NS4G^%nD43%~rZ*jTM?Io&n2192qZ^Y1< z%c-eLK|gvpqO8_yc`z*M$GE7b;?j7F=9(eVXwf_(^ZRZZ1dBTcXT9!P<%1OFA#Ujy zCI-)Mt!ap)3L~^4ZgE5@*2L`|BK5`{Bc8%ijqh$3fD0H?%ER0!p4&7R!WYd5XFoz% zC7Gn_RI<2kNY_oiPCNo#8!dNO7PA~Z3P_npwUGk$w6vMd!EJFk^*zOkM`T>$Wf{z( zj)z)e*D)IqkYdGY$BOd-dvnUOvsHeG`(sL8gcp$@>$6Iy^Bd#MXnH(VB>*~lB~*l& z!=TS5rzV^As>r;e2l0+(YvqHV3-yC|p5$Hti``fzy-1RJK!DWQkLWL@1%3D&)POb@ zOOF@%%vcKuFo+F93soP2YY*nOX>yTTO5zrIFu4fJ0xBMEa-p4NFrNO7*l+?eNh8AK z!W+J_x6smF+grE~VQnGd8Ssa}ML(a~>Md&|99mjiFkHysf;=*~sH(1us0}V80)@ea znheBja3R_|XmA1J=04TUSzdw|o`%5%Wyva~@Y?|+hGk_5IMFqr(kjogmDG;y108mm zj2Kux`bG>`P*g??ke+8`#Bj0Z3zCqF_E7T$bxD!@TIDk{Uua8|8DhSW!V_wC^uVt$ zU*Ix9?v>~})?r1_AB9sLl0Br1nqZn=h!?@K+r?N|$`A*Yo@ zK?;&ql9Ko^Ov4wiU7c50xq-(!Tfa5+O|pigwGk1ub_^ZR*x)RhiejKy2W=1q+dp_> zw&VbB&ZrQ`sb+kw*Q&j#o%f>MVy#RP@dF!Ze^p?-iH286sG$KSKtm$eD*7pol7>^n zv)1rAuQ)fCQT8=_vL58!5Dj09ry5c zasvQz5&UsI%Bu|;mqEj6FlNgFNweVum^aqS=^(JRsZ*`+R|Qs4+eSj|+D8=<@s4Vg zs9v$e5_WG=nIluMsspOpDo0(cmKR#^Uq@T3rIe5`G_r~DgN3BsHcF-b(~r=h%Wktq zMh-yI%ybv$k#B^b6an*8Ief9K(-gTcwD;!xD<&Zr=%#R9vCmIufwHh|B(CYev8$S% z%2BlCY{H2%$}(Qg94ipR31Lm6r<|Ecq-h_$O2;QSfq}<~o_&G1FIHE+Kr+%O z+8jm@_LdZH8}ob`O(N?*M6q(|ajoOBMH)Me5W})g5_PnnnWH4%Mp@~!Ki)5NuW4zha zPeXYM4tb4+LTwSw)v}S%c)}4-!%Il^CI}ok&2Yf{Xg##t!U_X#p~6y;9}pPCiK{tv ztHVr>N$C&Mz%@6eb!8^UY5~ouaokz0KZJ-QgEEq#x|Ujml|w~MOKW1ocpYx3qV)x6 z&|;YM>KToQ_~ZH+rO1f5%jmtV0lExAuL}~vRAMVMaKfz4CqsEgrBc_zGUM&@)zRmr zn7?Hy24uT{>@woGr%MHvmIR+0LFR^FQwc7@h$^b;(}*ylNFRZFu~tw@G9BECYC`i$ z0>^}6<(@|>fmqq%=seQMQI-AQSQ>ex6{?cwL>jq&thGXvA7jlngrD99Kg=D+^-N=$ zgay#qvnZRSQiQq`eBpu%r!L(*onEB{h}BZt2uwq%b+kB1rVe*J$$RqNLB}gSPz2bw z-C0-KGB1H%vjk9^#j$2U7Q+}F?T}blub*N@^|0~C<}7m)dGKm0zEz=j)qt$bWCrCG zD4lRGJ2WIcs4^;h+{K^*1Wd>6VI@tq3a#KyE8-N&$d)!q++!W54fb>?J3N^O%Xa^k zlr1WDQDt*pyUN}mHZkkbF1Z3$dDRra4E^P9g#86H-!x1*L-t%ahz<&FbsoXpq1tM= zU@M@B2`V7hQN(n_c>ForbdN6P;0?q$%w8$@~RiY4pin9#nw`89N5A0fO#* ziih7b3NaCLYPI|{W33Wd_T?U-oFnqy3W1dfH{6ZP%Sw{Fqvbo#PT;&Fe>y#~&UbI30G%v> zp?zz<%xwuS3*(;9MTX(*a>}O%A<+-K?tTw7RK5wR+Sk#np~Wz4swoNk&SiZ;$n>oD zvfZp*38D`eq5&D_YnN-pQ>CIusus#yk`_V_QoDe^&0NpZhIVRw%4f+mWw-N5QVXa# zp?FXVNz>TU;3851D_jyKU0n!Xt|aZ5G=WBOOpcWK{9O@~f^e(Z&p%vm!zVDT>e}61 zRn#)2P-(#S4vr2j#b>uqUjeM^Yy}KFGI!1|>wIdIvronb_BCLWtnXy6L1f81eQ(WR zLK#m)`Q z?}od2>lEF9ZmurYD)7O&`+BSI;^S(EVIWVjhOi53cvggl)kRkU5LT(wwRPBq?mz~` zP3S7Y8plmoa~CyMxmPLonkqNtHgc+VwJ^SSBXhBuunTJWvV7etvBNI7xipTj3rXT) zm@)k@$=`~z5DOI%|MJp_#f(ho{p;?13&_1Dr* z8$Ozo-V|v8f~;elq+|3MTx_|@v;*==q=ZkSCDAG>*@}ZHuwciGK(daRX*MQZ01JN! zkADSt2@Z=PXRl0)I_&sZC3Vq+IwQK-zZMNvccx?F_hsF92l_~EsAXMk=5&J}n$~&^ zxI``La|$Si=UUYGWx2?5^xd{Ha9_1DFav7*$5X|8}MQNI9nCIqvawZ+sT4gi@L2nX9-!Ke6ZxC~$ z)=CM}d2BSF974RcMFsJ0GvR`Gch5t-yF-b$52GNC#(9bN>gB|nogfi!j;W}Lx1np& z-E9zVZ6*&V+^|O`+=SdP;TG`~;a(ern{6`_?n_L#R~KuD`vd8`W!&mj*) zSfqE23HKVvH6(Pkh^Z)k#LHPbkU_L}ZP0iHyfIa;a<5iysCwk~$GR%jt`^33Eeoy} z!mXAs%cr%)iA}iOT&*P{+#^zzNx39dnXXcmL1Po)76~69-0hlh69&zJYo3m9>m1Os z1s54~Tbnkg@t8#40TK!i(FSP)9-Qp>qQA~4ufaZs9;1 zB{IxJcrJ41K;zsGgE>HsC}q&TlouDReSV%^Uktrwn1$AjC7(AzQj=lq%hEQ4_27Me zLTI6s=OfoI8%C~QHbAbwGD3WZF}zicSPl!ZCl~((p1sVWde8uK_EtN;8@}DA5KB-} zR1LxwA?P!)+WW#aYiE{qWC1H9FdPt&WC#SKDT^8C_6#Wib;3vARgB+j>!f@>wxUUL zx07sbCPBk33p*Ty_niJHEHv7&8P)q57`RMIo0oBc+ZTN<#_vO~F4EK!KYdqE)CqO6 zXf}*Gt$~0dA({LV+z3LzIdN;>Q%u|^eK0y52&L|Dq!2w^c^|ntCZ71wh&JjY)f6kZ z>q0X)E`ep4GvOh1P!Rd&ht9(x3PsbXpV|ctTB$o4DD#e$h!8A52%}e{n#Z=5y6&R& zxRj{f<8I^lT_Si|Jt$y8O;WOArJJ-ennZz|b@v|XT3K}Nvm-4+jz&h@D2s4~0GGSh5El)0CfKzzyeC_g#$4fWr`#fcr7#5KX4txwGfUBbA<%C1gAo zW}m1(yC$ae|VID0yfor7=%Yj-N15&Z-QM>E|c0CY-<-G z%rI?JMe0LVzFXe zG4HYsrlk}aHZiRjc5h>4R%F(Ofj+IxNC-H^kk=-?(&5%VU&zV3@;lU>Zq-SeEBEQ~ ztToPNF0=ImcJvyP11C=eA%}$-)m9@v~l@4lT|f5V1d zuRz7Iiq#?Rw)vs{)*Z(>ie{6+TX$q2o*ayuL`-_utmo`JxNH&VtDE!Ju zt6kfk0F~*0mv>%+xaur0Z-pV>&-neIy`o15_%1G5EPYpBC>( zC5SQf-A4_ll&<3Ys#H}YRMZ^?<=Iw1#h~0&f%3gA3fmO0d|MxuWC>Uj0ZNc+!gA99 zEYEYY1l8W#x;RMQ+ZqN+a#M!&7n*qz=D7aR2o_WTR*z_cWr2{VfAj$<# z-Ggh?2a=8im?5_VP?nK0<;V{?38KAB7|COoO%COa6p_8yE8j5y3ObIHnv1!jKP10OTN`I2(nxt4cco4}DKnitK)Gh$# zjXBzcJMCZ615C1jiw^z0U=N5xwpoW`bTXc5e`7XzglhsSgoz}5S{(0$h0tR9-f+;iE=O1%c-trzM58Ft z3P9HR%t)&fF%f0MB<@X;t(-sAm|`sU>>c8c=|JpyNt~5epRjNxA`J^5e4XOpaA#%i zR3dpd(qu)2u(nIw50trZ<)G=}aGCirQ)BF%1yF7BAZQkpSVim*Zh-qWo&ysTI22m%~>3v*RB* zm+$uF9RiCgA6k{xT}qW)G=pzNO2Tp`JT%+28z;B~8>+XUuz1#V8!j%^woLGW%;;X= z$;*#?K(eS3<4KY3xExZV>$CT?xDuKPK}<>bu&2oMw3jDL0>gUAft#`tUQip+Bvgt! z3h;6lTJsFU$q*DUgCbH(%&(E_v-?#zMNVV-aUMUy$46|79tfhp<-?yo=edxHG^B&a z11D7!)T{t z>>T%q?fsS(HK3%FK!V%I1^-ffyETUExiD;CjK*=23xX=-3h6$V&NZPHH zjaiPS2X(HO8b3&-C-I0h_*mH#N;{olnyfO%KuxS-g>Eg1KvN+=v5W~&h?KFmpb7#W zIf?#P<9$o5gWo!Tx+fCiFA}NWVB)tHIt3cq#+oK`!Vi8QHF3B0+pZnMH=*i z?w_*=WStK`x7<8<;_V{W1ELGk<^*2U~$B_6E7GxH|+ zrVwno?=iib5Eoxn%gBSQ_#-SEe0_Re{CPBC#sSs;PE1ptV>EgH#iGeijN}u9`ONp0 zXH&pU1&--Gqu{;IY^MWyu zd)?QS`;tcPXlq5z#eaC666IC3WsB%4BJaAx2D!@<5*CZA7_2^l&Y5ZDFMJUC+v%>y zW2xxA04_R(WudyXW~9~9)vzvNS3@5G4JTMoniRrlbg2cBKOUuz>wcmvoQ~i}%F!gZe8m%J#=)U4z`&##k>s>*3QT{r(sPklz<=z<9 z?xnqU_k}bj1OC+2j#i<z0-_iE+N)QQV z!LdyKniq~`0uCHEFQ|smOcW^5Oma4xnY!uLzU1Os%LI%;O?wYII>4OoMK}9_U#8j9 zjb?v>7jE|d(+(HHu004#CXZ6$ zH=w`XZcS*V-ph2Xj3=}r zXVBFi^Zj)!@Swd&>g6jCX;8dlu_Q$)_2ccc^YGvm0Oe6)^tUIz@>hJT@JGZ z!MA>cRnAJ@)S=ZpSG5>WFG`Dh?|gS|jpa+fj&i zhmnlGuyOCxgZ+Sd&#`&^08b+4dX+2lkP?Dhel;v+elC~^58m%5s9y|C@kC=of}3*Rpzkw?`@}TxoWQwS}vc9P@21; zM^7IWTbc#8?Nv>YHMLNo5>HlbVyDwS2dk7=Cb+Og2DrJ;F=54!Owb_PK2A-$8?p2u zO=^n+ZN2s_g6pIV(rJss%OVED-r|6L62k@hR>lE%?UE*VzKg$8J%IPH2cH@u>V1?hC2$~_?EZ+-0tXsI;RUAB|5qnw;U z3{G^k$s>>}R-Wi{j?iDcxme*@m3-b(zL#8zA6eu&J)>w%*#a~l@EugYI)4-d=ruzqGt^v8(bmy#6Fe(Bmm^ zx@P!o+nROUbnn+_1RTCXZfP`6OoZnOAOi@rqjr5`Zfo<3G%$wA*-*V9mzdksHo)Hf z9af7sptP#2z4?gaQcb(;gsH zG$x4o(iN`+!Q?<1)1$Ei$nZutrgXwZ+JF!wp|>Z%JA}LnrH5M1F#`y^2ZCVKY0MQ= zDiDd#srU+$$Arm@B!i4(p|-%#hiwaB(-zxj+acQF5{_tR2XBl|H24BO$V>cPGRZ9* z+#D%8Xrjw=KYcEn%F1tRN`T4~|3DD7&N`DBb}Af4I6kprHL}t}&VuT6a#g4Ncky%; zPm`VUZ{q1Po;c;|C*SXsTX7iYNJ;{z<$o zc+1ldMI&F%lPu(7dm`6n1-yP@{((O;bv;nBvkS~OqHXCVAZOo8=l_*YQBLsXWG3ab zMvVop`+Y7~)~@2uNu%AH5GpRF+%KQM+;*q@IbhNO#{WPwgyHk%M^!$u5NFAVpz3s% z&V6lyjCs)HBkF-%Id{v>f%DdIpjkoK>I9W~C>t;ndGVP@@6!ie< z#4DYiRUM&43DCCNTtaj*wwa`f(8h_o5205P8&pF$#D|hX42d}l*RY|}d1sqo_ciau zEYQ3ZI40L-P!xe>Ma~@2tpX~g=mmf=QM!I$bc7=3TaoSijbD4@zkKF*{^*Z?^qw~{ zeQmNSmZm=QV!*_k`b5vQk#;wO3Hz6m4lVf)-gV z%~rZu#W-oe;W&bc47Ja+MwJTb6Z}_}7(_qAoN3cm44v!Dn7>SwWC@B%vB zWj7eeE8|6a5bpYUeLALR(BQeV<@1~A`S-b37O zD5NHZqq$)V5G;t;igNsfhMhHxv*=oY$!%i)<>D zsjYsrZ!5=HT*`@?uJEKPm$v9nf+u=zz-uF970}eBUkrWb^9* zw}4+HYZ-yM+uEQgSk8cY%XO1B2pfId zjM6+w*96^@u8GMfqVEm$yxvd;F+v;XCbXma(8kfqh!^kubxkIOOlFXxM^qX)JVC_k z$bj5Us2X5pES5iBIHLvLqSj8eThOGlEASSj30 zt9;k5o%2*i{)njzX6rbnJhtjawKRzYF+IV5Nj17_wPR@c1W8dW2>zEDZrm#3jz(T4 zQ<|MuB*d(LK8MkR!$9pWW*t~kea~Dw4LjS? zDwm6-i^DxjBpAx2y@E0vyxiD~Hs7wZ9J=Jop4Q#QnHa-z)CE@QSCux2qnX%#GM*Oh6nzWgrIVxe0s3L^WK7@dGbXa%npF4z z)n@&Ka;ARTcrMlN-jzA4w~G@pgSLw0C(yvJG5|W3OKKar)EOhB1241AA8RcO5Dw1# z^o{};8dxW>!wl)TYa7t{=H zPfmdmnueORQsWfNlo4iungb-Bj!4k$nnbUFQwLF0R7(mYE|42gBw?wjp-)Q}-AY*cfj;$=NK#Qx zvFZcVlL2c|Pv+JD^^}Cxq@GV=ZOw{IrdTHOKKWz>L`O|N)BOT?ND8saoG?EM3bhnO zMzLQ&K~=3-Z%me$;fXquycj*LtX?6##Tl5VTjGSXFbf@lL(s;L?%Qy8;}H@w_jGbYq`amsDnbFN*7HZ)hXhMj8?3Zd7I%|s3}9F9)I8%@(5<@o z@^S6!zOZ~kySb8^J}wprAhNyBrUC7LP6XHcKlE=u^5LKP^ItgmjU=}sZ6>+(d~)Wy zn1bD-jIIPt?U|!9ST1OOxs_BdZBRz|()N%@!(v?om@02m!+#>*8~;4rq#GL<%UWZo zTH0l7Nkf81rRb>WGS4y$S9(VI-j=v9O+G3T2LV2M13lCtExbHi)%xU6t>90-D&sF1 zP@@Yq8f=Rr3_F9!cF2JwhXlR8LsDw>?nSa?xF7pKq2G-iuNxy^o&ZEWqdj&gu0Bn1YWUC?yjq2a3cl7N1wj-U>5Dn}C60C`tBv?OV- z>i!?1EjNG{a1p_(1P7Vwwz!k(?rL92mI~ksOwzz!l~pJ-q)iharbcLAw&%}yC=&%5TWf;fJFpMsI*d$ zRz@xmy4RPjYDW*97kK<49-~zq&<`q`!v3Uiu4(s&~X>u43;a%zW zps90u!zyRl*eFUgR&YVePHQs4C#@Zta>BU*Z<0$xBH#zdWMOW(NJ2RzMf?tJJL96U z0*mMudHI&~-gZo*&WN;GEu`$9Bp|?dr8+5)Tk~GrPD-QF?^L4&gKm*O(&t&zx}wR} z{W))a+2vsmo-fAjV!aP!LHh9~pVgvxbk3%b`Br z32u!RI+b)c<_75%}7V&NZnMP z)u#M|(u{o=?(;8Nl^8zd#u2!X86b_A9r`?IOXTx-m%8QA3mF7{Y0zO&@=fK%&IAxY zWynB4_##2ueb&9eqpJ)Z_=&mzvL;@P#C}K|9!qMPJE{%)Q87(GDuWdf$*QOzBSo1ZPRw3s6Qhb%Yh>Ecs%caj4_bH)hYAfu`HaqOroqS|L{Xj|A{)ipiI)(D@e)%iUw64jG{l(PnsIDN845{Dscpp z?xm_Ujrx})IbKqpt@8Zu{k|u2v%oKMcQ;(vOqsJnp>Wj0G=s{OkAIk=F9iW15Vnzi zf)`;UO=)l@mt9PGQY;`<*}`5THN?`>ME8~PYt%Sden~Y>^BN~D*Z33vEY!WYyRTaRal_5;7Lzy@Tb`kVxySr%A1#EWlLFYe#qRrZ5j+YD-kt`UwgE z?xBHDX;38}md%nxFdUCEB0rN78l%(MhLYDW-Alh}@>)KonR;#c6c?k=XIqXhBGgQj z%1iM@vR*R(Q)vG@@mPW1HHQUR>N6Q-@C%Y`&Binsi#&Y`D#Q5pnN6@k-ftBjF_eA$ ztyX9(&?`z~Aut;H3Vo!=CtLuTnrA*h1m8G)zQ_mD2*}Lcn@y zwkW(4O(T|1b+p_bwrSLnai1Mf1vYy4T>$lQ%}WfAXm<(cB9dvlN)}TslNH*Pzw;ZJCczRC+@_`lVVgci&G6*R#*`=`M-$W^cjU>JBKd}}eN#y2shg1TNiB8c&g z2jd$Qa2dX-Gzh8jjok<7&Q+xGEw2bbTE=tr;c4*fUy3%Ui0PimR9}4_@93mxG0kg) zmUurMAjh&Tl`4ytYcm$SxTZ<=>G#YL9URC9#?O`?Itx&KDSpifBC;RAc0dy+D?iU! zfj`{JH4C0dHZZYfpc$ozYMtnOe%aXgn9Je3S(Eh8P;{>wT%$C|Z2jxO-l$%=vubt-6oOqv&%7{w-S`FP zKr1L$%iJ@=ufditqhlXcSJdP?mf!*LoMOZY0T4I$`Y1_~KG0&Lh~byEC9X)%e)j2> zfS?7wsI}$?TK%IfgD+MICe?-%fo!_VZ5c20wHYI z+THJ?pH#wV2+PH7R@hDjGw^qvN3;NXvoOX zdZ_G+{K3MbK7)as&d>H43K4jkr8(Pcr-e!^_JjrIh)wdJNPE zYzP+{5htUJ2qDn%UXaVxPByE76q91xt?sTVLt2A!QHH0q9@T5mKYcck404@4Ehq(W zwlB>o2_~k%?1d%*Tx-D@Rb~(!tPwKN?@s4qnm>t7(NE1#Dcf09uik3Y9f?rWqI zkRe^c6lLW@wP%{f!*D#0viY6T6$W=y=}VY-j5z32%Kkc7HP5J#GJCB@6zo^13(ula zAHh3{hDH21a}RZ4$9jN?N<*O&RVoI}I*P%`aZfD|)OHt@+-AhmF+|20FeY3_gcFrI zUY!@Rz^*gxNLPOBU2uLk6t)h~N!77#gGyu?CQ3io^`Co&_1_)(3cQNgWrf%E>=;$2 zh}@#tvz`mwE-_uC!ZzPKiu@R%b4Lj)gemoC`Nf}#wP;i+c93P11tU>hgJcxg%VdU-eoGBF`}`9jO48pvm6yuNH(LbTFb5nRkd%qQ;bLJPA- zwc$eSteLQJ>g@GZ*(wi(2){0zsiD+K_ z?mre@ioN3fCb3{BSgKtY?a)l?on3V`gCBbjvsZX|ysl7c0sJda-?DKcw=4V^}gTDN1L{`MhPBQ22GJO zIaBQ#&jHy`Fb6yfJTDlHG#if4`m!~Z<$LqJWI)12zP@Ho41YiBfNkCn- zJ}Y%bLZ^H(vcewT^V(IJAI%|>fT&w2+p^AEpADegf|(1C@b^CJf(e>-LG;x0YLLvY zTP$j>AsW_aTJ{A6g|D~pM_O*qa4Do&`1f2SyhRKG34#_p`83dew&i}|Y0CXBAk7*n z)DBs_wS)z*yjt(W{dBpwHXU{$^AFI;!I)q{Pcd?f1u+P@zNM@GO!iS-U=~cTt`ynmk&_@wW@fq+pI#QOGM8qKJ2B@XjkYE>H`t+?ajS?wY+KB5f zGB5OPY1V$V-a3JWqd_4|%Z$kkA39~48$wUn*h#!@pxWm6FP)7`YrVLfnr};UZl}(| zehJ~(=&2w(^tJ>FfE?mQEmwfaon6q8n3a@P8=hpd(C&!|~hC`zoWbXL!tAO%_M0al8V&Yl`}Eoqp_ zr(jYAcIIaAI!}F2FQhySL?Ti5KfqS*tTSo?!nV~SfmpZCnNx+0u5;zi^Xh>UWNVx$}GNI~^<5aW3 zZf<)?5m)t7_`8%L%`Ur&DA3eD*)zlrw{)N?01!UJNE=@y8DfMbVcGHCH}L&@AIKxD z)gMN~)(+h_cQ#TU!XzTih1lLOHHR6FFC=eY#E&d6f`}WWyzBDtKh%)>bk!I){`NM zSF#a`9eAO7F3r5*tm%{4`al~wSx22H?F`Ev(ywbuVfD>Bij$u9ZJl*l`Pc8G_iM`s znLDm=wHuRN-rhSYep1uF-_jM%++CA(R&vJ}Fjk$*VuAIs)U>m^=^3~mo}bX#{J9rt>>ro|B&Ce^HV-O@8wtWtG@5!{>+KFJ5J3V zSe!dp95{LW)X5WbCl-svJ5S9m1;~Nf`CCtJx%KekmIH_84jessW^rN5opZNu-o0bn zj@g4d4(^`Wx_`%>tp~R3*mm8)>vrwdM}y$d;_+i!77m;|HK+c697WW3Q?J^kcD#b0 z+NR$P{9eiLRs3cb7>~unCr=c&%pN{AckudRVR7zMG4=9d#(7ARwfMc7pUTjGdKN63 z&o}XWVD=a#6gR(VZsE+a#p|y>bK>^-*;CV3-&|1q?1|#$SI*DhT--K$?95#D9i*?? z^BV4lgJFK|*24>n;E4tsm>fE@|60JedF$MP1G~0eciqAL*UcT+vu*p9`PmZ(H_u$V z``YbJx-fTo%kh&30mNgN+r5?Y-$kP@;ab7vf8-t^aR7f`%X1TdU&nL7PdKEuzCQil zz_s94y?-P3`h6$Af?xIiP2B7EW_|^~>iu_duisnv75u9A8ZZ66ho9Qq<)?bTH~szx zt_8m;{r7RN-`n^V{Hphw&-$s41;6V3+qu{8W`5@@f9W_pck>hEIC)^pfs^3K0U_MN zmfPkIy#3(Z=`%vuy#({TgLZw#iY!~r^_KaQ$KTEznLl~z&Kfm&|2fjVfa}9R=T@$Q z5m~ZR^K*-fcOGN%%%wtrTjaNJ=;Zw3v6ClmJp_U*oIE~v>KH`k^cnsv9ym5P zdt&a`+^w@G7UyOc?wmbw>-?Pu=4an==b^b{r*1iO?D(05LwBA$c<{`Lg`i2Z2T#t= z?msqnmc z`o1XmYo(Y!bn?u?-2VNi56&$dg=j)j?>unwz`hYuXue+FcjKXv#W@0dNV zv`6Re+<$U*{$TcGD)Zl`>wiqwKj*48|7Wgh>;Idc|0+HI4Og|XP0UxpuftW(Yq_dV zm!|6#>AQ#)3zNuk_5klzlIETKgum7E>GXW?@NEZ9o>&Ag=jIO_gDShDh5v3obn>>j z`E(CCJbVf&yEwP7$g;RNySV@4!8;dD&7NQi96LFC@G#{Rw;sFm)SH8y|2y~eD1zP=S}>9-tbm>Tb2n%*CnJvDpa z@Zz0?hU*sQ3uzu+(am1SbzhztM-om1F`S>h{q0Z=A;=$)t{~l4xvt~-3V!;JqBFps z9X@ez?v4U(pg4I;vH#>5sM+)rjb>vqlT+PZ7ouI;;a?Ap0&*RI{W_UyWD_ss6CySMG$zI(^+ox6AK z-o1Oz?(6oG>*OSLz!Lq#XPH52eg}A=7LceM8*sJGGM2f)= zH@vBQ{SDWrWW{mV!^5l_#p2=PD&iGydk2q;Vf>PT{sjg3j?`?e7%i2#Pf=`y@KDCkWDU{ zDL+Kn<`Uq{cU`;9oH-;f&6$LF>gAF)ihsC;pZL3G+t2r2^l@TM(Al#POu-|~FA0S# zjfW2$J$&L;(b*Z&Y3<&_RkZax7K{heSJQhY!raLd2j)(({EDNSJ@IXtA6hk;9|sN{ zK6Y@K+;Wz3BoF))Kk-&e`R4%Hvk>Qydui`1%hv3{JDD-!1XylO6Xp&Mz~x5jo#=KA zvn$)f+wt7-@g{u-;0GJctD7~@F5z0$uH&g)L*z}*Udf5Y%U@ocJa+Ky3`OzcVq5kE zeL6-NT7!qd_BrlTC=U{LLIO}Y96Wh@f8J-u)^;u9NuDnFJ!fNmX7TVbX)P)N`VFTf zAT1T3i<@7M+8_zgRa>O*QCq4t;W=y5ZHMO<&&(csJ5+EBtm$!K<9EM;YekFTsgavB z_bMIIN4eEFMKWf8QK9dCWCmznl_BYzevP!3@vHKGn%gOUeZtBl5JMPKFZ=&%IiH>; zf-sC1MWYD^;=h>qZ%i=2q1ysYgN+!CgbN}GA;cSO+ocpri`|9VGvC0oi3#!KfoM#O z2S0=dzk-Q=2M_+9*$$KiH5z-EFmGpecK*HZ`#jGk3|$9V>@d^3spTk4f&>1^2 z$Mb|2*nF}oe5l0K30_MJ!78*ttl{9dIQNq(VRvR}QQIZXZKmhv!b`CxILbP7*FR(5 zJb6tK&-G?a8u_VhZ1hB zeI(CG8-03p(2n;OaG@Bu=-e$_Ya*7&@qAiI7FHFbTHaqTY>?Yr0>Wgb1} z41X8-tMN|ASMs>oplybS-6A2VsI|})cp4rr$pMX&3Lye1FjCC+IUE|IMm_bCv86MA z=SA9&cU>r(n zIhA^Teb9cxm|8lb5Jfe*^*V*B(N?Q`kQn3v0Y*>vY4qZwHZijug3qCp4CrnC8U o_U`D}7Q3Deb@8)y4d{7?!36fF8v;Y7A diff --git a/frameworks/keyed/yew/Cargo.toml b/frameworks/keyed/yew/Cargo.toml index 3f924cd46..f211b5362 100644 --- a/frameworks/keyed/yew/Cargo.toml +++ b/frameworks/keyed/yew/Cargo.toml @@ -12,7 +12,7 @@ rand = {version = "0.7.3", features = ["wasm-bindgen", "small_rng"]} wasm-bindgen = "0.2.62" # UPDATE TO USE YOUR BRANCH -yew = {git = "https://github.com/bakape/yew ", branch = "feature/opt-keyed-diff"} +yew = {git = "https://github.com/bakape/yew ", branch = "PLACEHOLDER"} # UPDATE TO USE YOUR BRANCH [profile.release] diff --git a/frameworks/keyed/yew/bundled-dist/index.html b/frameworks/keyed/yew/bundled-dist/index.html deleted file mode 100644 index 7f4868a86..000000000 --- a/frameworks/keyed/yew/bundled-dist/index.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - Yew - - - - -

- - - diff --git a/frameworks/keyed/yew/bundled-dist/js-framework-benchmark-yew.js b/frameworks/keyed/yew/bundled-dist/js-framework-benchmark-yew.js deleted file mode 100644 index 759dec650..000000000 --- a/frameworks/keyed/yew/bundled-dist/js-framework-benchmark-yew.js +++ /dev/null @@ -1,489 +0,0 @@ - -let wasm; - -const heap = new Array(32).fill(undefined); - -heap.push(undefined, null, true, false); - -function getObject(idx) { return heap[idx]; } - -let heap_next = heap.length; - -function dropObject(idx) { - if (idx < 36) return; - heap[idx] = heap_next; - heap_next = idx; -} - -function takeObject(idx) { - const ret = getObject(idx); - dropObject(idx); - return ret; -} - -function debugString(val) { - // primitive types - const type = typeof val; - if (type == 'number' || type == 'boolean' || val == null) { - return `${val}`; - } - if (type == 'string') { - return `"${val}"`; - } - if (type == 'symbol') { - const description = val.description; - if (description == null) { - return 'Symbol'; - } else { - return `Symbol(${description})`; - } - } - if (type == 'function') { - const name = val.name; - if (typeof name == 'string' && name.length > 0) { - return `Function(${name})`; - } else { - return 'Function'; - } - } - // objects - if (Array.isArray(val)) { - const length = val.length; - let debug = '['; - if (length > 0) { - debug += debugString(val[0]); - } - for(let i = 1; i < length; i++) { - debug += ', ' + debugString(val[i]); - } - debug += ']'; - return debug; - } - // Test for built-in - const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val)); - let className; - if (builtInMatches.length > 1) { - className = builtInMatches[1]; - } else { - // Failed to match the standard '[object ClassName]' - return toString.call(val); - } - if (className == 'Object') { - // we're a user defined class or Object - // JSON.stringify avoids problems with cycles, and is generally much - // easier than looping through ownProperties of `val`. - try { - return 'Object(' + JSON.stringify(val) + ')'; - } catch (_) { - return 'Object'; - } - } - // errors - if (val instanceof Error) { - return `${val.name}: ${val.message}\n${val.stack}`; - } - // TODO we could test for more things here, like `Set`s and `Map`s. - return className; -} - -let WASM_VECTOR_LEN = 0; - -let cachegetUint8Memory0 = null; -function getUint8Memory0() { - if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) { - cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer); - } - return cachegetUint8Memory0; -} - -let cachedTextEncoder = new TextEncoder('utf-8'); - -const encodeString = (typeof cachedTextEncoder.encodeInto === 'function' - ? function (arg, view) { - return cachedTextEncoder.encodeInto(arg, view); -} - : function (arg, view) { - const buf = cachedTextEncoder.encode(arg); - view.set(buf); - return { - read: arg.length, - written: buf.length - }; -}); - -function passStringToWasm0(arg, malloc, realloc) { - - if (realloc === undefined) { - const buf = cachedTextEncoder.encode(arg); - const ptr = malloc(buf.length); - getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf); - WASM_VECTOR_LEN = buf.length; - return ptr; - } - - let len = arg.length; - let ptr = malloc(len); - - const mem = getUint8Memory0(); - - let offset = 0; - - for (; offset < len; offset++) { - const code = arg.charCodeAt(offset); - if (code > 0x7F) break; - mem[ptr + offset] = code; - } - - if (offset !== len) { - if (offset !== 0) { - arg = arg.slice(offset); - } - ptr = realloc(ptr, len, len = offset + arg.length * 3); - const view = getUint8Memory0().subarray(ptr + offset, ptr + len); - const ret = encodeString(arg, view); - - offset += ret.written; - } - - WASM_VECTOR_LEN = offset; - return ptr; -} - -let cachegetInt32Memory0 = null; -function getInt32Memory0() { - if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) { - cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer); - } - return cachegetInt32Memory0; -} - -let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); - -cachedTextDecoder.decode(); - -function getStringFromWasm0(ptr, len) { - return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); -} - -function addHeapObject(obj) { - if (heap_next === heap.length) heap.push(heap.length + 1); - const idx = heap_next; - heap_next = heap[idx]; - - heap[idx] = obj; - return idx; -} - -function makeMutClosure(arg0, arg1, dtor, f) { - const state = { a: arg0, b: arg1, cnt: 1 }; - const real = (...args) => { - // First up with a closure we increment the internal reference - // count. This ensures that the Rust closure environment won't - // be deallocated while we're invoking it. - state.cnt++; - const a = state.a; - state.a = 0; - try { - return f(a, state.b, ...args); - } finally { - if (--state.cnt === 0) wasm.__wbindgen_export_2.get(dtor)(a, state.b); - else state.a = a; - } - }; - real.original = state; - return real; -} - -let stack_pointer = 32; - -function addBorrowedObject(obj) { - if (stack_pointer == 1) throw new Error('out of js stack'); - heap[--stack_pointer] = obj; - return stack_pointer; -} -function __wbg_adapter_16(arg0, arg1, arg2) { - try { - wasm.wasm_bindgen__convert__closures__invoke1_mut_ref__h2644d8b2cde4a809(arg0, arg1, addBorrowedObject(arg2)); - } finally { - heap[stack_pointer++] = undefined; - } -} - -/** -*/ -export function start() { - wasm.start(); -} - -function handleError(f) { - return function () { - try { - return f.apply(this, arguments); - - } catch (e) { - wasm.__wbindgen_exn_store(addHeapObject(e)); - } - }; -} - -function getArrayU8FromWasm0(ptr, len) { - return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len); -} - -function isLikeNone(x) { - return x === undefined || x === null; -} - -async function load(module, imports) { - if (typeof Response === 'function' && module instanceof Response) { - - if (typeof WebAssembly.instantiateStreaming === 'function') { - try { - return await WebAssembly.instantiateStreaming(module, imports); - - } catch (e) { - if (module.headers.get('Content-Type') != 'application/wasm') { - 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); - - } else { - throw e; - } - } - } - - const bytes = await module.arrayBuffer(); - return await WebAssembly.instantiate(bytes, imports); - - } else { - - const instance = await WebAssembly.instantiate(module, imports); - - if (instance instanceof WebAssembly.Instance) { - return { instance, module }; - - } else { - return instance; - } - } -} - -async function init(input) { - if (typeof input === 'undefined') { - input = import.meta.url.replace(/\.js$/, '_bg.wasm'); - } - const imports = {}; - imports.wbg = {}; - imports.wbg.__wbindgen_object_drop_ref = function(arg0) { - takeObject(arg0); - }; - imports.wbg.__wbg_removeEventListener_003b13762a00969d = handleError(function(arg0, arg1, arg2, arg3, arg4) { - getObject(arg0).removeEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), arg4 !== 0); - }); - imports.wbg.__wbindgen_cb_drop = function(arg0) { - const obj = takeObject(arg0).original; - if (obj.cnt-- == 1) { - obj.a = 0; - return true; - } - var ret = false; - return ret; - }; - imports.wbg.__wbg_self_1b7a39e3a92c949c = handleError(function() { - var ret = self.self; - return addHeapObject(ret); - }); - imports.wbg.__wbg_require_604837428532a733 = function(arg0, arg1) { - var ret = require(getStringFromWasm0(arg0, arg1)); - return addHeapObject(ret); - }; - imports.wbg.__wbg_crypto_968f1772287e2df0 = function(arg0) { - var ret = getObject(arg0).crypto; - return addHeapObject(ret); - }; - imports.wbg.__wbindgen_is_undefined = function(arg0) { - var ret = getObject(arg0) === undefined; - return ret; - }; - imports.wbg.__wbg_getRandomValues_a3d34b4fee3c2869 = function(arg0) { - var ret = getObject(arg0).getRandomValues; - return addHeapObject(ret); - }; - imports.wbg.__wbg_randomFillSync_d5bd2d655fdf256a = function(arg0, arg1, arg2) { - getObject(arg0).randomFillSync(getArrayU8FromWasm0(arg1, arg2)); - }; - imports.wbg.__wbg_getRandomValues_f5e14ab7ac8e995d = function(arg0, arg1, arg2) { - getObject(arg0).getRandomValues(getArrayU8FromWasm0(arg1, arg2)); - }; - imports.wbg.__wbg_document_c26d0f423c143e0c = function(arg0) { - var ret = getObject(arg0).document; - return isLikeNone(ret) ? 0 : addHeapObject(ret); - }; - imports.wbg.__wbg_querySelector_9cf023db23245913 = handleError(function(arg0, arg1, arg2) { - var ret = getObject(arg0).querySelector(getStringFromWasm0(arg1, arg2)); - return isLikeNone(ret) ? 0 : addHeapObject(ret); - }); - imports.wbg.__wbg_lastChild_4add591e64b65966 = function(arg0) { - var ret = getObject(arg0).lastChild; - return isLikeNone(ret) ? 0 : addHeapObject(ret); - }; - imports.wbg.__wbg_removeChild_d8035999cf171601 = handleError(function(arg0, arg1) { - var ret = getObject(arg0).removeChild(getObject(arg1)); - return addHeapObject(ret); - }); - imports.wbg.__wbindgen_debug_string = function(arg0, arg1) { - var ret = debugString(getObject(arg1)); - var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - var len0 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len0; - getInt32Memory0()[arg0 / 4 + 0] = ptr0; - }; - imports.wbg.__wbindgen_throw = function(arg0, arg1) { - throw new Error(getStringFromWasm0(arg0, arg1)); - }; - imports.wbg.__wbg_self_c0d3a5923e013647 = handleError(function() { - var ret = self.self; - return addHeapObject(ret); - }); - imports.wbg.__wbg_window_7ee6c8be3432927d = handleError(function() { - var ret = window.window; - return addHeapObject(ret); - }); - imports.wbg.__wbg_globalThis_c6de1d938e089cf0 = handleError(function() { - var ret = globalThis.globalThis; - return addHeapObject(ret); - }); - imports.wbg.__wbg_global_c9a01ce4680907f8 = handleError(function() { - var ret = global.global; - return addHeapObject(ret); - }); - imports.wbg.__wbg_newnoargs_8aad4a6554f38345 = function(arg0, arg1) { - var ret = new Function(getStringFromWasm0(arg0, arg1)); - return addHeapObject(ret); - }; - imports.wbg.__wbg_call_1f85aaa5836dfb23 = handleError(function(arg0, arg1) { - var ret = getObject(arg0).call(getObject(arg1)); - return addHeapObject(ret); - }); - imports.wbg.__wbindgen_object_clone_ref = function(arg0) { - var ret = getObject(arg0); - return addHeapObject(ret); - }; - imports.wbg.__wbg_instanceof_Window_17fdb5cd280d476d = function(arg0) { - var ret = getObject(arg0) instanceof Window; - return ret; - }; - imports.wbg.__wbg_appendChild_3d4ec7dbf3472d31 = handleError(function(arg0, arg1) { - var ret = getObject(arg0).appendChild(getObject(arg1)); - return addHeapObject(ret); - }); - imports.wbg.__wbg_insertBefore_e617280513985f61 = handleError(function(arg0, arg1, arg2) { - var ret = getObject(arg0).insertBefore(getObject(arg1), getObject(arg2)); - return addHeapObject(ret); - }); - imports.wbg.__wbg_instanceof_HtmlInputElement_9e9349535b986dc4 = function(arg0) { - var ret = getObject(arg0) instanceof HTMLInputElement; - return ret; - }; - imports.wbg.__wbg_value_c2fd875fedc14f57 = function(arg0, arg1) { - var ret = getObject(arg1).value; - var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - var len0 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len0; - getInt32Memory0()[arg0 / 4 + 0] = ptr0; - }; - imports.wbg.__wbg_instanceof_HtmlTextAreaElement_af4dc0571f10534b = function(arg0) { - var ret = getObject(arg0) instanceof HTMLTextAreaElement; - return ret; - }; - imports.wbg.__wbg_value_7ffe1d058e13aa75 = function(arg0, arg1) { - var ret = getObject(arg1).value; - var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - var len0 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len0; - getInt32Memory0()[arg0 / 4 + 0] = ptr0; - }; - imports.wbg.__wbg_createTextNode_756ffaca4044be42 = function(arg0, arg1, arg2) { - var ret = getObject(arg0).createTextNode(getStringFromWasm0(arg1, arg2)); - return addHeapObject(ret); - }; - imports.wbg.__wbg_setnodeValue_ab4d09a5c9b583a3 = function(arg0, arg1, arg2) { - getObject(arg0).nodeValue = arg1 === 0 ? undefined : getStringFromWasm0(arg1, arg2); - }; - imports.wbg.__wbg_is_44606c0a00d7753b = function(arg0, arg1) { - var ret = Object.is(getObject(arg0), getObject(arg1)); - return ret; - }; - imports.wbg.__wbg_setAttribute_1e9980589f904db6 = handleError(function(arg0, arg1, arg2, arg3, arg4) { - getObject(arg0).setAttribute(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4)); - }); - imports.wbg.__wbg_removeAttribute_ab1ad95ea7761680 = handleError(function(arg0, arg1, arg2) { - getObject(arg0).removeAttribute(getStringFromWasm0(arg1, arg2)); - }); - imports.wbg.__wbg_instanceof_HtmlButtonElement_0c660cd977827d1e = function(arg0) { - var ret = getObject(arg0) instanceof HTMLButtonElement; - return ret; - }; - imports.wbg.__wbg_settype_8b416ca7e828acb0 = function(arg0, arg1, arg2) { - getObject(arg0).type = getStringFromWasm0(arg1, arg2); - }; - imports.wbg.__wbg_settype_ccacb981913395e5 = function(arg0, arg1, arg2) { - getObject(arg0).type = getStringFromWasm0(arg1, arg2); - }; - imports.wbg.__wbg_setvalue_eb5415236467cd34 = function(arg0, arg1, arg2) { - getObject(arg0).value = getStringFromWasm0(arg1, arg2); - }; - imports.wbg.__wbg_setchecked_795fe0b967d5d996 = function(arg0, arg1) { - getObject(arg0).checked = arg1 !== 0; - }; - imports.wbg.__wbg_setvalue_8bb8ffbd27a7ffda = function(arg0, arg1, arg2) { - getObject(arg0).value = getStringFromWasm0(arg1, arg2); - }; - imports.wbg.__wbg_namespaceURI_35b1c4eab9150629 = function(arg0, arg1) { - var ret = getObject(arg1).namespaceURI; - var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - var len0 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len0; - getInt32Memory0()[arg0 / 4 + 0] = ptr0; - }; - imports.wbg.__wbg_createElement_44ab59c4ad367831 = handleError(function(arg0, arg1, arg2) { - var ret = getObject(arg0).createElement(getStringFromWasm0(arg1, arg2)); - return addHeapObject(ret); - }); - imports.wbg.__wbg_createElementNS_74ac818c77233fe4 = handleError(function(arg0, arg1, arg2, arg3, arg4) { - var ret = getObject(arg0).createElementNS(arg1 === 0 ? undefined : getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4)); - return addHeapObject(ret); - }); - imports.wbg.__wbg_new_d6227c3c833572bb = function() { - var ret = new Object(); - return addHeapObject(ret); - }; - imports.wbg.__wbindgen_string_new = function(arg0, arg1) { - var ret = getStringFromWasm0(arg0, arg1); - return addHeapObject(ret); - }; - imports.wbg.__wbg_set_6a666216929b0387 = handleError(function(arg0, arg1, arg2) { - var ret = Reflect.set(getObject(arg0), getObject(arg1), getObject(arg2)); - return ret; - }); - imports.wbg.__wbg_addEventListener_3526086a053a131e = handleError(function(arg0, arg1, arg2, arg3, arg4) { - getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), getObject(arg4)); - }); - imports.wbg.__wbindgen_closure_wrapper1301 = function(arg0, arg1, arg2) { - var ret = makeMutClosure(arg0, arg1, 27, __wbg_adapter_16); - return addHeapObject(ret); - }; - - if (typeof input === 'string' || (typeof Request === 'function' && input instanceof Request) || (typeof URL === 'function' && input instanceof URL)) { - input = fetch(input); - } - - const { instance, module } = await load(await input, imports); - - wasm = instance.exports; - init.__wbindgen_wasm_module = module; - wasm.__wbindgen_start(); - return wasm; -} - -export default init; - diff --git a/frameworks/keyed/yew/bundled-dist/js-framework-benchmark-yew_bg.wasm b/frameworks/keyed/yew/bundled-dist/js-framework-benchmark-yew_bg.wasm deleted file mode 100644 index 4420050b7e37211b730f71bcd9386a5a5dc78f7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142092 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�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 RX3`leJ(|f(PiOqn_%Bp(#uxwq diff --git a/webdriver-ts-results/.gitignore b/webdriver-ts-results/.gitignore new file mode 100644 index 000000000..5352d2980 --- /dev/null +++ b/webdriver-ts-results/.gitignore @@ -0,0 +1 @@ +table.html diff --git a/webdriver-ts-results/src/.gitignore b/webdriver-ts-results/src/.gitignore new file mode 100644 index 000000000..5e92ae6d2 --- /dev/null +++ b/webdriver-ts-results/src/.gitignore @@ -0,0 +1 @@ +results.ts diff --git a/webdriver-ts-results/src/results.ts b/webdriver-ts-results/src/results.ts deleted file mode 100644 index fcb3fc191..000000000 --- a/webdriver-ts-results/src/results.ts +++ /dev/null @@ -1,56 +0,0 @@ -import {RawResult} from './Common'; - -export let results: RawResult[]=[ -{"f":"wasm-bindgen-v0.2.47-keyed","b":"01_run1k","v":[111.679,110.216]}, -{"f":"wasm-bindgen-v0.2.47-keyed","b":"02_replace1k","v":[108.808,114.004]}, -{"f":"wasm-bindgen-v0.2.47-keyed","b":"03_update10th1k_x16","v":[175.604,161.142]}, -{"f":"wasm-bindgen-v0.2.47-keyed","b":"04_select1k","v":[25.468,25.739]}, -{"f":"wasm-bindgen-v0.2.47-keyed","b":"05_swap1k","v":[55.216,54.351]}, -{"f":"wasm-bindgen-v0.2.47-keyed","b":"06_remove-one-1k","v":[24.208,28.341]}, -{"f":"wasm-bindgen-v0.2.47-keyed","b":"07_create10k","v":[1178.322,1184.971]}, -{"f":"wasm-bindgen-v0.2.47-keyed","b":"08_create1k-after1k_x2","v":[261.251,233.08]}, -{"f":"wasm-bindgen-v0.2.47-keyed","b":"09_clear1k_x8","v":[124.812,105.986]}, -{"f":"wasm-bindgen-v0.2.47-keyed","b":"21_ready-memory","v":[1.0803298950195312,1.0803375244140625]}, -{"f":"wasm-bindgen-v0.2.47-keyed","b":"22_run-memory","v":[1.5682106018066406,1.5682106018066406]}, -{"f":"wasm-bindgen-v0.2.47-keyed","b":"23_update5-memory","v":[1.8900527954101562,1.8900718688964844]}, -{"f":"wasm-bindgen-v0.2.47-keyed","b":"24_run5-memory","v":[2.189403533935547,2.189373016357422]}, -{"f":"wasm-bindgen-v0.2.47-keyed","b":"25_run-clear-memory","v":[2.334686279296875,2.3347625732421875]}, -{"f":"wasm-bindgen-v0.2.47-keyed","b":"31_startup-ci","v":[1351.92,1350.788]}, -{"f":"wasm-bindgen-v0.2.47-keyed","b":"32_startup-bt","v":[20.8,18.651999999999994]}, -{"f":"wasm-bindgen-v0.2.47-keyed","b":"34_startup-totalbytes","v":[59.8857421875,59.8857421875]}, -{"f":"yew-v0.16.2-keyed","b":"01_run1k","v":[213.78,202.191]}, -{"f":"yew-v0.16.2-keyed","b":"02_replace1k","v":[73.778,76.039]}, -{"f":"yew-v0.16.2-keyed","b":"03_update10th1k_x16","v":[288.693,237.006]}, -{"f":"yew-v0.16.2-keyed","b":"04_select1k","v":[52.324,42.072]}, -{"f":"yew-v0.16.2-keyed","b":"05_swap1k","v":[32.711,34.04]}, -{"f":"yew-v0.16.2-keyed","b":"06_remove-one-1k","v":[83.746,82.741]}, -{"f":"yew-v0.16.2-keyed","b":"07_create10k","v":[2221.002,2330.112]}, -{"f":"yew-v0.16.2-keyed","b":"08_create1k-after1k_x2","v":[409.533,445.373]}, -{"f":"yew-v0.16.2-keyed","b":"09_clear1k_x8","v":[354.703,335.971]}, -{"f":"yew-v0.16.2-keyed","b":"21_ready-memory","v":[1.0472145080566406,1.0471687316894531]}, -{"f":"yew-v0.16.2-keyed","b":"22_run-memory","v":[2.110729217529297,2.110759735107422]}, -{"f":"yew-v0.16.2-keyed","b":"23_update5-memory","v":[2.428478240966797,2.4285507202148438]}, -{"f":"yew-v0.16.2-keyed","b":"24_run5-memory","v":[2.050769805908203,2.0508155822753906]}, -{"f":"yew-v0.16.2-keyed","b":"25_run-clear-memory","v":[2.3814697265625,2.3814697265625]}, -{"f":"yew-v0.16.2-keyed","b":"31_startup-ci","v":[1351.104,1350.812]}, -{"f":"yew-v0.16.2-keyed","b":"32_startup-bt","v":[26.511999999999997,31.799999999999986]}, -{"f":"yew-v0.16.2-keyed","b":"34_startup-totalbytes","v":[85.0029296875,85.0029296875]}, -{"f":"yew-baseline-v0.16.2-keyed","b":"01_run1k","v":[219.837,203.44]}, -{"f":"yew-baseline-v0.16.2-keyed","b":"02_replace1k","v":[84.511,86.996]}, -{"f":"yew-baseline-v0.16.2-keyed","b":"03_update10th1k_x16","v":[244.717,241.208]}, -{"f":"yew-baseline-v0.16.2-keyed","b":"04_select1k","v":[42.196,43.413]}, -{"f":"yew-baseline-v0.16.2-keyed","b":"05_swap1k","v":[26.277,27.517]}, -{"f":"yew-baseline-v0.16.2-keyed","b":"06_remove-one-1k","v":[79.33,82.96]}, -{"f":"yew-baseline-v0.16.2-keyed","b":"07_create10k","v":[2181.581,2335.49]}, -{"f":"yew-baseline-v0.16.2-keyed","b":"08_create1k-after1k_x2","v":[398.373,397.793]}, -{"f":"yew-baseline-v0.16.2-keyed","b":"09_clear1k_x8","v":[339.692,344.243]}, -{"f":"yew-baseline-v0.16.2-keyed","b":"21_ready-memory","v":[1.0472755432128906,1.0472068786621094]}, -{"f":"yew-baseline-v0.16.2-keyed","b":"22_run-memory","v":[2.111675262451172,2.1116905212402344]}, -{"f":"yew-baseline-v0.16.2-keyed","b":"23_update5-memory","v":[2.4295692443847656,2.42950439453125]}, -{"f":"yew-baseline-v0.16.2-keyed","b":"24_run5-memory","v":[2.050670623779297,2.051464080810547]}, -{"f":"yew-baseline-v0.16.2-keyed","b":"25_run-clear-memory","v":[2.3824424743652344,2.382404327392578]}, -{"f":"yew-baseline-v0.16.2-keyed","b":"31_startup-ci","v":[1350.696,1350.9479999999999]}, -{"f":"yew-baseline-v0.16.2-keyed","b":"32_startup-bt","v":[28.015999999999984,35.37999999999998]}, -{"f":"yew-baseline-v0.16.2-keyed","b":"34_startup-totalbytes","v":[85.1904296875,85.1904296875]},]; -export let frameworks = [{"name":"wasm-bindgen-v0.2.47-keyed","keyed":true},{"name":"yew-v0.16.2-keyed","keyed":true},{"name":"yew-baseline-v0.16.2-keyed","keyed":true}]; -export let benchmarks = [{"id":"01_run1k","label":"create rows","description":"creating 1,000 rows","type":0},{"id":"02_replace1k","label":"replace all rows","description":"updating all 1,000 rows (5 warmup runs).","type":0},{"id":"03_update10th1k_x16","label":"partial update","description":"updating every 10th row for 1,000 rows (3 warmup runs). 16x CPU slowdown.","type":0,"throttleCPU":16},{"id":"04_select1k","label":"select row","description":"highlighting a selected row. (5 warmup runs). 16x CPU slowdown.","type":0,"throttleCPU":16},{"id":"05_swap1k","label":"swap rows","description":"swap 2 rows for table with 1,000 rows. (5 warmup runs). 4x CPU slowdown.","type":0,"throttleCPU":4},{"id":"06_remove-one-1k","label":"remove row","description":"removing one row. (5 warmup runs).","type":0},{"id":"07_create10k","label":"create many rows","description":"creating 10,000 rows","type":0},{"id":"08_create1k-after1k_x2","label":"append rows to large table","description":"appending 1,000 to a table of 10,000 rows. 2x CPU slowdown","type":0,"throttleCPU":2},{"id":"09_clear1k_x8","label":"clear rows","description":"clearing a table with 1,000 rows. 8x CPU slowdown","type":0,"throttleCPU":8},{"id":"21_ready-memory","label":"ready memory","description":"Memory usage after page load.","type":1},{"id":"22_run-memory","label":"run memory","description":"Memory usage after adding 1000 rows.","type":1},{"id":"23_update5-memory","label":"update eatch 10th row for 1k rows (5 cycles)","description":"Memory usage after clicking update every 10th row 5 times","type":1},{"id":"24_run5-memory","label":"replace 1k rows (5 cycles)","description":"Memory usage after clicking create 1000 rows 5 times","type":1},{"id":"25_run-clear-memory","label":"creating/clearing 1k rows (5 cycles)","description":"Memory usage after creating and clearing 1000 rows 5 times","type":1},{"id":"31_startup-ci","label":"consistently interactive","description":"a pessimistic TTI - when the CPU and network are both definitely very idle. (no more CPU tasks over 50ms)","type":2,"property":"TimeToConsistentlyInteractive"},{"id":"32_startup-bt","label":"script bootup time","description":"the total ms required to parse/compile/evaluate all the page's scripts","type":2,"property":"ScriptBootUpTtime"},{"id":"34_startup-totalbytes","label":"total kilobyte weight","description":"network transfer cost (post-compression) of all the resources loaded into the page.","type":2,"property":"TotalKiloByteWeight"}]; diff --git a/webdriver-ts-results/table.html b/webdriver-ts-results/table.html deleted file mode 100644 index 1da64ebc6..000000000 --- a/webdriver-ts-results/table.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - Interactive Results - - - - -
- - diff --git a/webdriver-ts/.gitignore b/webdriver-ts/.gitignore new file mode 100644 index 000000000..91a9c5928 --- /dev/null +++ b/webdriver-ts/.gitignore @@ -0,0 +1 @@ +results.json diff --git a/webdriver-ts/results.json b/webdriver-ts/results.json deleted file mode 100644 index 8e1929fac..000000000 --- a/webdriver-ts/results.json +++ /dev/null @@ -1 +0,0 @@ -[{"framework":"wasm-bindgen-v0.2.47-keyed","benchmark":"01_run1k","values":[111.679,110.216]},{"framework":"wasm-bindgen-v0.2.47-keyed","benchmark":"02_replace1k","values":[108.808,114.004]},{"framework":"wasm-bindgen-v0.2.47-keyed","benchmark":"03_update10th1k_x16","values":[175.604,161.142]},{"framework":"wasm-bindgen-v0.2.47-keyed","benchmark":"04_select1k","values":[25.468,25.739]},{"framework":"wasm-bindgen-v0.2.47-keyed","benchmark":"05_swap1k","values":[55.216,54.351]},{"framework":"wasm-bindgen-v0.2.47-keyed","benchmark":"06_remove-one-1k","values":[24.208,28.341]},{"framework":"wasm-bindgen-v0.2.47-keyed","benchmark":"07_create10k","values":[1178.322,1184.971]},{"framework":"wasm-bindgen-v0.2.47-keyed","benchmark":"08_create1k-after1k_x2","values":[261.251,233.08]},{"framework":"wasm-bindgen-v0.2.47-keyed","benchmark":"09_clear1k_x8","values":[124.812,105.986]},{"framework":"wasm-bindgen-v0.2.47-keyed","benchmark":"21_ready-memory","values":[1.0803298950195312,1.0803375244140625]},{"framework":"wasm-bindgen-v0.2.47-keyed","benchmark":"22_run-memory","values":[1.5682106018066406,1.5682106018066406]},{"framework":"wasm-bindgen-v0.2.47-keyed","benchmark":"23_update5-memory","values":[1.8900527954101562,1.8900718688964844]},{"framework":"wasm-bindgen-v0.2.47-keyed","benchmark":"24_run5-memory","values":[2.189403533935547,2.189373016357422]},{"framework":"wasm-bindgen-v0.2.47-keyed","benchmark":"25_run-clear-memory","values":[2.334686279296875,2.3347625732421875]},{"framework":"wasm-bindgen-v0.2.47-keyed","benchmark":"31_startup-ci","values":[1351.92,1350.788]},{"framework":"wasm-bindgen-v0.2.47-keyed","benchmark":"32_startup-bt","values":[20.8,18.651999999999994]},{"framework":"wasm-bindgen-v0.2.47-keyed","benchmark":"34_startup-totalbytes","values":[59.8857421875,59.8857421875]},{"framework":"yew-v0.16.2-keyed","benchmark":"01_run1k","values":[213.78,202.191]},{"framework":"yew-v0.16.2-keyed","benchmark":"02_replace1k","values":[73.778,76.039]},{"framework":"yew-v0.16.2-keyed","benchmark":"03_update10th1k_x16","values":[288.693,237.006]},{"framework":"yew-v0.16.2-keyed","benchmark":"04_select1k","values":[52.324,42.072]},{"framework":"yew-v0.16.2-keyed","benchmark":"05_swap1k","values":[32.711,34.04]},{"framework":"yew-v0.16.2-keyed","benchmark":"06_remove-one-1k","values":[83.746,82.741]},{"framework":"yew-v0.16.2-keyed","benchmark":"07_create10k","values":[2221.002,2330.112]},{"framework":"yew-v0.16.2-keyed","benchmark":"08_create1k-after1k_x2","values":[409.533,445.373]},{"framework":"yew-v0.16.2-keyed","benchmark":"09_clear1k_x8","values":[354.703,335.971]},{"framework":"yew-v0.16.2-keyed","benchmark":"21_ready-memory","values":[1.0472145080566406,1.0471687316894531]},{"framework":"yew-v0.16.2-keyed","benchmark":"22_run-memory","values":[2.110729217529297,2.110759735107422]},{"framework":"yew-v0.16.2-keyed","benchmark":"23_update5-memory","values":[2.428478240966797,2.4285507202148438]},{"framework":"yew-v0.16.2-keyed","benchmark":"24_run5-memory","values":[2.050769805908203,2.0508155822753906]},{"framework":"yew-v0.16.2-keyed","benchmark":"25_run-clear-memory","values":[2.3814697265625,2.3814697265625]},{"framework":"yew-v0.16.2-keyed","benchmark":"31_startup-ci","values":[1351.104,1350.812]},{"framework":"yew-v0.16.2-keyed","benchmark":"32_startup-bt","values":[26.511999999999997,31.799999999999986]},{"framework":"yew-v0.16.2-keyed","benchmark":"34_startup-totalbytes","values":[85.0029296875,85.0029296875]},{"framework":"yew-baseline-v0.16.2-keyed","benchmark":"01_run1k","values":[219.837,203.44]},{"framework":"yew-baseline-v0.16.2-keyed","benchmark":"02_replace1k","values":[84.511,86.996]},{"framework":"yew-baseline-v0.16.2-keyed","benchmark":"03_update10th1k_x16","values":[244.717,241.208]},{"framework":"yew-baseline-v0.16.2-keyed","benchmark":"04_select1k","values":[42.196,43.413]},{"framework":"yew-baseline-v0.16.2-keyed","benchmark":"05_swap1k","values":[26.277,27.517]},{"framework":"yew-baseline-v0.16.2-keyed","benchmark":"06_remove-one-1k","values":[79.33,82.96]},{"framework":"yew-baseline-v0.16.2-keyed","benchmark":"07_create10k","values":[2181.581,2335.49]},{"framework":"yew-baseline-v0.16.2-keyed","benchmark":"08_create1k-after1k_x2","values":[398.373,397.793]},{"framework":"yew-baseline-v0.16.2-keyed","benchmark":"09_clear1k_x8","values":[339.692,344.243]},{"framework":"yew-baseline-v0.16.2-keyed","benchmark":"21_ready-memory","values":[1.0472755432128906,1.0472068786621094]},{"framework":"yew-baseline-v0.16.2-keyed","benchmark":"22_run-memory","values":[2.111675262451172,2.1116905212402344]},{"framework":"yew-baseline-v0.16.2-keyed","benchmark":"23_update5-memory","values":[2.4295692443847656,2.42950439453125]},{"framework":"yew-baseline-v0.16.2-keyed","benchmark":"24_run5-memory","values":[2.050670623779297,2.051464080810547]},{"framework":"yew-baseline-v0.16.2-keyed","benchmark":"25_run-clear-memory","values":[2.3824424743652344,2.382404327392578]},{"framework":"yew-baseline-v0.16.2-keyed","benchmark":"31_startup-ci","values":[1350.696,1350.9479999999999]},{"framework":"yew-baseline-v0.16.2-keyed","benchmark":"32_startup-bt","values":[28.015999999999984,35.37999999999998]},{"framework":"yew-baseline-v0.16.2-keyed","benchmark":"34_startup-totalbytes","values":[85.1904296875,85.1904296875]}] \ No newline at end of file From 29e5275698045d77028525aae025a49c0abe3c74 Mon Sep 17 00:00:00 2001 From: bakape Date: Sat, 19 Sep 2020 12:32:20 +0300 Subject: [PATCH 03/26] expand gitignore --- .gitignore | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 969d3eb39..f1af4c3a5 100644 --- a/.gitignore +++ b/.gitignore @@ -79,5 +79,6 @@ Cargo.lock # emacs *~ -bundled-dist/*.js -bundled-dist/*.wasm +**/bundled-dist/*.js +**/bundled-dist/*.wasm +**/bundled-dist/*.html From 7ad02f1aa953d5ddad5d368efe9ef1e4d3604cde Mon Sep 17 00:00:00 2001 From: bakape Date: Sat, 19 Sep 2020 12:44:06 +0300 Subject: [PATCH 04/26] run http server in script --- bechmark_change.sh | 43 +++++++++++++++++++++++++------------------ 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/bechmark_change.sh b/bechmark_change.sh index b29478e8b..3efd8336a 100755 --- a/bechmark_change.sh +++ b/bechmark_change.sh @@ -1,25 +1,32 @@ #! /bin/bash # Usage: ./bechmark_change.sh CHANGE_BRANCH -set -euo pipefail # https://vaneyckt.io/posts/safer_bash_scripts_with_set_euxo_pipefail/ sed -i 's/PLACEHOLDER/'"${1/\//\\\/}"'/' frameworks/keyed/yew/Cargo.toml -npm install -d -(cd frameworks/keyed/wasm-bindgen && - npm run build-prod) -(cd frameworks/keyed/yew && - npm install -d && - npm run build-prod) -(cd frameworks/keyed/yew-baseline && - npm install -d && - npm run build-prod) +http -p 8080 & -(cd webdriver-ts-results && - npm install -d) -(cd webdriver-ts && - npm install -d && - npm run build-prod && - npm run bench -- --headless keyed/yew keyed/yew-baseline && - npm run results) +( + set -euo pipefail -chromium http://localhost:8080/webdriver-ts-results/table.html + npm install -d + (cd frameworks/keyed/wasm-bindgen && + npm run build-prod) + (cd frameworks/keyed/yew && + npm install -d && + npm run build-prod) + (cd frameworks/keyed/yew-baseline && + npm install -d && + npm run build-prod) + + (cd webdriver-ts-results && + npm install -d) + (cd webdriver-ts && + npm install -d && + npm run build-prod && + npm run bench -- --headless keyed/yew keyed/yew-baseline && + npm run results) + + chromium http://localhost:8080/webdriver-ts-results/table.html +) + +kill %% From c70e7913aed629f804a1eb9bf479944b6092ed1f Mon Sep 17 00:00:00 2001 From: bakape Date: Sat, 19 Sep 2020 12:45:27 +0300 Subject: [PATCH 05/26] reset hard on start --- bechmark_change.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bechmark_change.sh b/bechmark_change.sh index 3efd8336a..88b82bee5 100755 --- a/bechmark_change.sh +++ b/bechmark_change.sh @@ -1,6 +1,7 @@ #! /bin/bash # Usage: ./bechmark_change.sh CHANGE_BRANCH +git reset --hard sed -i 's/PLACEHOLDER/'"${1/\//\\\/}"'/' frameworks/keyed/yew/Cargo.toml http -p 8080 & From 7eaede5158c430a7a534998ad0fc5325feaea0a4 Mon Sep 17 00:00:00 2001 From: bakape Date: Sat, 19 Sep 2020 12:57:37 +0300 Subject: [PATCH 06/26] also run wasm_bingen --- bechmark_change.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bechmark_change.sh b/bechmark_change.sh index 88b82bee5..d09a5f6b6 100755 --- a/bechmark_change.sh +++ b/bechmark_change.sh @@ -24,7 +24,9 @@ http -p 8080 & (cd webdriver-ts && npm install -d && npm run build-prod && - npm run bench -- --headless keyed/yew keyed/yew-baseline && + npm run bench -- --headless \ + frameworks/keyed/wasm-bindgen \ + keyed/yew keyed/yew-baseline && npm run results) chromium http://localhost:8080/webdriver-ts-results/table.html From 7eb396d033a66d00a539b659e197160213d6c20c Mon Sep 17 00:00:00 2001 From: bakape Date: Sat, 19 Sep 2020 13:12:23 +0300 Subject: [PATCH 07/26] use set -e in subshells --- bechmark_change.sh | 46 +++++++++++++++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/bechmark_change.sh b/bechmark_change.sh index d09a5f6b6..1f119d873 100755 --- a/bechmark_change.sh +++ b/bechmark_change.sh @@ -10,24 +10,40 @@ http -p 8080 & set -euo pipefail npm install -d - (cd frameworks/keyed/wasm-bindgen && - npm run build-prod) - (cd frameworks/keyed/yew && - npm install -d && - npm run build-prod) - (cd frameworks/keyed/yew-baseline && - npm install -d && - npm run build-prod) - (cd webdriver-ts-results && - npm install -d) - (cd webdriver-ts && - npm install -d && - npm run build-prod && + ( + set -euo pipefail + cd frameworks/keyed/wasm-bindgen + npm install -d + npm run build-prod + ) + ( + set -euo pipefail + cd frameworks/keyed/yew + npm install -d + npm run build-prod + ) + ( + set -euo pipefail + cd frameworks/keyed/yew-baseline + npm install -d + npm run build-prod + ) + ( + set -euo pipefail + cd webdriver-ts-results + npm install -d + ) + ( + set -euo pipefail + cd webdriver-ts + npm install -d + npm run build-prod npm run bench -- --headless \ frameworks/keyed/wasm-bindgen \ - keyed/yew keyed/yew-baseline && - npm run results) + keyed/yew keyed/yew-baseline + npm run results + ) chromium http://localhost:8080/webdriver-ts-results/table.html ) From ca52e97d9085f95be2441146292d9cc876c0989e Mon Sep 17 00:00:00 2001 From: bakape Date: Sun, 4 Oct 2020 21:01:48 +0300 Subject: [PATCH 08/26] clean up and don't run wasm-bindgen --- bechmark_change.sh | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/bechmark_change.sh b/bechmark_change.sh index 1f119d873..51504cb32 100755 --- a/bechmark_change.sh +++ b/bechmark_change.sh @@ -11,12 +11,6 @@ http -p 8080 & npm install -d - ( - set -euo pipefail - cd frameworks/keyed/wasm-bindgen - npm install -d - npm run build-prod - ) ( set -euo pipefail cd frameworks/keyed/yew @@ -37,11 +31,10 @@ http -p 8080 & ( set -euo pipefail cd webdriver-ts + rm -rf results npm install -d npm run build-prod - npm run bench -- --headless \ - frameworks/keyed/wasm-bindgen \ - keyed/yew keyed/yew-baseline + npm run bench -- --headless keyed/yew keyed/yew-baseline npm run results ) From 9cf12a2f0c7b688830cc6b6fdd13ccdadb2d7dbf Mon Sep 17 00:00:00 2001 From: bakape Date: Sun, 4 Oct 2020 21:50:31 +0300 Subject: [PATCH 09/26] remove hard reset --- bechmark_change.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/bechmark_change.sh b/bechmark_change.sh index 51504cb32..bef6afc0b 100755 --- a/bechmark_change.sh +++ b/bechmark_change.sh @@ -1,7 +1,6 @@ #! /bin/bash # Usage: ./bechmark_change.sh CHANGE_BRANCH -git reset --hard sed -i 's/PLACEHOLDER/'"${1/\//\\\/}"'/' frameworks/keyed/yew/Cargo.toml http -p 8080 & From ad894ed5e3045be928da89ac2b91a2600cd310b4 Mon Sep 17 00:00:00 2001 From: bakape Date: Thu, 19 Nov 2020 00:21:46 +0200 Subject: [PATCH 10/26] benchmark local path --- bechmark_change.sh | 2 -- frameworks/keyed/yew/Cargo.toml | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/bechmark_change.sh b/bechmark_change.sh index bef6afc0b..a3370363d 100755 --- a/bechmark_change.sh +++ b/bechmark_change.sh @@ -1,8 +1,6 @@ #! /bin/bash # Usage: ./bechmark_change.sh CHANGE_BRANCH -sed -i 's/PLACEHOLDER/'"${1/\//\\\/}"'/' frameworks/keyed/yew/Cargo.toml - http -p 8080 & ( diff --git a/frameworks/keyed/yew/Cargo.toml b/frameworks/keyed/yew/Cargo.toml index f211b5362..0bd184ff8 100644 --- a/frameworks/keyed/yew/Cargo.toml +++ b/frameworks/keyed/yew/Cargo.toml @@ -12,7 +12,7 @@ rand = {version = "0.7.3", features = ["wasm-bindgen", "small_rng"]} wasm-bindgen = "0.2.62" # UPDATE TO USE YOUR BRANCH -yew = {git = "https://github.com/bakape/yew ", branch = "PLACEHOLDER"} +yew = {path = "/home/janis/src/yew/yew"} # UPDATE TO USE YOUR BRANCH [profile.release] From 5b5b80750713661b98bb60c9ff3cb2cca46fddaf Mon Sep 17 00:00:00 2001 From: bakape Date: Sun, 23 May 2021 16:21:45 +0300 Subject: [PATCH 11/26] update yew package path --- frameworks/keyed/yew/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/keyed/yew/Cargo.toml b/frameworks/keyed/yew/Cargo.toml index 0bd184ff8..1d36292c4 100644 --- a/frameworks/keyed/yew/Cargo.toml +++ b/frameworks/keyed/yew/Cargo.toml @@ -12,7 +12,7 @@ rand = {version = "0.7.3", features = ["wasm-bindgen", "small_rng"]} wasm-bindgen = "0.2.62" # UPDATE TO USE YOUR BRANCH -yew = {path = "/home/janis/src/yew/yew"} +yew = {path = "/home/janis/src/yew/packages/yew"} # UPDATE TO USE YOUR BRANCH [profile.release] From 97121342622d22e676ecf6970143e8267c702bfb Mon Sep 17 00:00:00 2001 From: bakape Date: Sun, 23 May 2021 16:37:04 +0300 Subject: [PATCH 12/26] update to new app starting API --- frameworks/keyed/yew/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/keyed/yew/src/lib.rs b/frameworks/keyed/yew/src/lib.rs index 57edd4f40..89aee58a0 100644 --- a/frameworks/keyed/yew/src/lib.rs +++ b/frameworks/keyed/yew/src/lib.rs @@ -313,5 +313,5 @@ impl Component for Row { pub fn start() { let document = window().unwrap().document().unwrap(); let mount_el = document.query_selector("#main").unwrap().unwrap(); - App::::new().mount(mount_el); + yew::start_app_in_element::(mount_el); } From 9da074ba5ef05920c87ca176080a26d692d98a9f Mon Sep 17 00:00:00 2001 From: bakape Date: Sun, 23 May 2021 16:42:28 +0300 Subject: [PATCH 13/26] also update app starting in baseline example --- frameworks/keyed/yew-baseline/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/keyed/yew-baseline/src/lib.rs b/frameworks/keyed/yew-baseline/src/lib.rs index 57edd4f40..89aee58a0 100644 --- a/frameworks/keyed/yew-baseline/src/lib.rs +++ b/frameworks/keyed/yew-baseline/src/lib.rs @@ -313,5 +313,5 @@ impl Component for Row { pub fn start() { let document = window().unwrap().document().unwrap(); let mount_el = document.query_selector("#main").unwrap().unwrap(); - App::::new().mount(mount_el); + yew::start_app_in_element::(mount_el); } From c67863cf0b4a4393a335ed51cb0aaada9057aede Mon Sep 17 00:00:00 2001 From: bakape Date: Sun, 23 May 2021 16:59:06 +0300 Subject: [PATCH 14/26] reset lock files on becnchmark --- bechmark_change.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bechmark_change.sh b/bechmark_change.sh index a3370363d..a8f9a1c17 100755 --- a/bechmark_change.sh +++ b/bechmark_change.sh @@ -11,12 +11,14 @@ http -p 8080 & ( set -euo pipefail cd frameworks/keyed/yew + rm Cargo.lock npm install -d npm run build-prod ) ( set -euo pipefail cd frameworks/keyed/yew-baseline + rm Cargo.lock npm install -d npm run build-prod ) From c5c7377480492bfed53160694fac0310bd66bc8b Mon Sep 17 00:00:00 2001 From: bakape Date: Sun, 23 May 2021 16:59:37 +0300 Subject: [PATCH 15/26] account for lock files not being present --- bechmark_change.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bechmark_change.sh b/bechmark_change.sh index a8f9a1c17..7609e7b8e 100755 --- a/bechmark_change.sh +++ b/bechmark_change.sh @@ -11,14 +11,14 @@ http -p 8080 & ( set -euo pipefail cd frameworks/keyed/yew - rm Cargo.lock + rm -f Cargo.lock npm install -d npm run build-prod ) ( set -euo pipefail cd frameworks/keyed/yew-baseline - rm Cargo.lock + rm -f Cargo.lock npm install -d npm run build-prod ) From 6650013b89b7c50e07ad53289f7650dd4f205a0f Mon Sep 17 00:00:00 2001 From: bakape Date: Sun, 23 May 2021 17:34:41 +0300 Subject: [PATCH 16/26] npm: update dep versions --- frameworks/keyed/yew-baseline/package.json | 4 ++-- frameworks/keyed/yew/package.json | 4 ++-- webdriver-ts-results/package.json | 4 ++-- webdriver-ts/package.json | 6 +++--- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/frameworks/keyed/yew-baseline/package.json b/frameworks/keyed/yew-baseline/package.json index 2fa0702aa..b8bc377c8 100644 --- a/frameworks/keyed/yew-baseline/package.json +++ b/frameworks/keyed/yew-baseline/package.json @@ -15,7 +15,7 @@ "url": "https://github.com/krausest/js-framework-benchmark.git" }, "devDependencies": { - "rimraf": "^2.6.3", - "cpr": "^3.0.1" + "cpr": "^3.0.1", + "rimraf": "^2.6.3" } } diff --git a/frameworks/keyed/yew/package.json b/frameworks/keyed/yew/package.json index 2fa0702aa..b8bc377c8 100644 --- a/frameworks/keyed/yew/package.json +++ b/frameworks/keyed/yew/package.json @@ -15,7 +15,7 @@ "url": "https://github.com/krausest/js-framework-benchmark.git" }, "devDependencies": { - "rimraf": "^2.6.3", - "cpr": "^3.0.1" + "cpr": "^3.0.1", + "rimraf": "^2.6.3" } } diff --git a/webdriver-ts-results/package.json b/webdriver-ts-results/package.json index beaadf2c0..9b1f60bc7 100644 --- a/webdriver-ts-results/package.json +++ b/webdriver-ts-results/package.json @@ -43,8 +43,8 @@ }, "dependencies": { "jStat": "1.7.1", + "plotly.js-cartesian-dist": "^1.45.2", "react": "16.8.4", - "react-dom": "16.8.4", - "plotly.js-cartesian-dist": "^1.45.2" + "react-dom": "16.8.4" } } diff --git a/webdriver-ts/package.json b/webdriver-ts/package.json index 922721543..db91a6b58 100644 --- a/webdriver-ts/package.json +++ b/webdriver-ts/package.json @@ -42,10 +42,10 @@ "jstat": "1.9.2", "lighthouse": "5.6.0", "lodash": "4.17.15", + "npm-check-updates": "4.0.1", "ramda": "0.27.0", "selenium-webdriver": "4.0.0-alpha.1", - "yargs": "15.1.0", - "npm-check-updates": "4.0.1", - "semver": "7.1.2" + "semver": "7.1.2", + "yargs": "15.1.0" } } From 8fd6c848891a00f15eec6499193c09d3ff3cecd6 Mon Sep 17 00:00:00 2001 From: bakape Date: Sun, 23 May 2021 17:43:02 +0300 Subject: [PATCH 17/26] change npm i -d -> npm ci --- bechmark_change.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bechmark_change.sh b/bechmark_change.sh index 7609e7b8e..70b0af7c4 100755 --- a/bechmark_change.sh +++ b/bechmark_change.sh @@ -12,26 +12,26 @@ http -p 8080 & set -euo pipefail cd frameworks/keyed/yew rm -f Cargo.lock - npm install -d + npm ci npm run build-prod ) ( set -euo pipefail cd frameworks/keyed/yew-baseline rm -f Cargo.lock - npm install -d + npm ci npm run build-prod ) ( set -euo pipefail cd webdriver-ts-results - npm install -d + npm ci ) ( set -euo pipefail cd webdriver-ts rm -rf results - npm install -d + npm ci npm run build-prod npm run bench -- --headless keyed/yew keyed/yew-baseline npm run results From f21c6e69c0dc9dca2462907e8fdceec0b4f8a4ec Mon Sep 17 00:00:00 2001 From: bakape Date: Sun, 23 May 2021 19:01:42 +0300 Subject: [PATCH 18/26] parametric yew path --- README.md | 129 ++-------------------- bechmark_change.sh => benchmark_change.sh | 7 +- frameworks/keyed/yew/Cargo.toml | 2 +- 3 files changed, 15 insertions(+), 123 deletions(-) rename bechmark_change.sh => benchmark_change.sh (73%) diff --git a/README.md b/README.md index 9a0bdceed..ea67a81f6 100755 --- a/README.md +++ b/README.md @@ -37,7 +37,9 @@ There are 3 framework entries in this repository: * `keyed/yew` * `keyed/yew-baseline` _(Used to determine if recent changes improved performance)_ -### 1. Prerequisites +### Prerequisites + +#### Install Node Have *node.js (>=10.0)* installed. We recommend using `nvm` to manage node versions The benchmark has been tested with node v12.16.2. Please make sure that the following command work before trying to build: @@ -51,136 +53,23 @@ v12.16.2 v12.16.2 ``` -### Install `chromedriver` +#### Install `chromedriver` https://chromedriver.chromium.org/downloads -### Setup local server - -You can use any server which properly handles the MIME type of wasm files. We recommend the `https` crate: +#### Install local server ``` cargo install https ``` -Start server in the root directory -``` -http -p 8080 -``` - -Verify that the server works: -Try to open [http://localhost:8080/index.html](http://localhost:8080/index.html). If you see something like that you're on the right track: -![Index.html](images/index.png?raw=true "Index.html") - -Now open a new terminal window and keep `http` running in background. - -### 2. Building and running a single framework - -We now try to build a framework. Go to the `wasm-bindgen` reference implementation -``` -cd frameworks/keyed/wasm-bindgen -``` -and install the dependencies -``` -npm install -``` -and build the framework -``` -npm run build-prod -``` -There should be no build errors and we can open the framework in the browser: -[http://localhost:8080/frameworks/keyed/wasm-bindgen/index.html](http://localhost:8080/frameworks/keyed/wasm-bindgen/index.html) - -## 3. Running a single framework with the automated benchmark driver - -The benchmark uses an automated benchmark driver using `chromedriver` to measure the duration for each operation using chrome's timeline. Here are the steps to run for a single framework: +Make sure port `8080` is not taken. ### Run benchmarks -First, navigate to the `webdriver-ts/` directory. - -and install the dependencies -``` -npm install -``` -and build the benchmark driver -``` -npm run build-prod -``` -now run the benchmark driver for the "wasmbindgen-keyed" framework: -``` -npm run bench -- --headless keyed/wasm-bindgen -``` -Just lean back and wait for chrome to run the benchmarks. -Keep an eye on the console output to see if benchmark checks are timing out. If so, visit [http://localhost:8080/frameworks/keyed/wasm-bindgen/index.html](http://localhost:8080/frameworks/keyed/wasm-bindgen/index.html) and check for console errors. You could also try without using `--headless` to debug. - -The results for that run will be saved in the `webdriver-ts/results` directory. We can take a look at the results of a single result: -``` -cat results/wasm-bindgen-v0.2.47-keyed_01_run1k.json - -{ - "framework": "wasm-bindgen-v0.2.47-keyed", - "keyed": true, - "benchmark": "01_run1k", - "type": "cpu", - "min": 101.123, - "max": 114.547, - "mean": 107.69300000000001, - "median": 105.821, - "geometricMean": 107.5587774247631, - "standardDeviation": 6.028027040417119, - "values": [ - 114.547, - 113.509, - 103.465, - 105.821, - 101.123 - ] -} -``` -As you can see the mean duration for create 1000 rows was 107 msecs. - -You can also check whether the implementation appears to be compliant to the rules: -``` -npm run check keyed/wasm-bindgen -``` -If it finds anything it'll report an ERROR. - -## 4. Building the result table - -Install libraries -``` -(cd webdriver-ts-results && npm install) -``` - -In the webdriver-ts directory issue the following command: -``` -npm run results -``` -Now a result table should have been created which can be opened on [http://localhost:8080/webdriver-ts-results/table.html](http://localhost:8080/webdriver-ts-results/table.html). - -## 5. Building and running the benchmarks for all frameworks - -From the base directory, you can build all frameworks by running ``` -npm install -npm run build-prod +./benchmark_change.sh $CHANGED_YEW_PROJECT ``` - -You can now run the benchmark for all frameworks by: - -1. Navigate to the `webdriver-ts/` directory -2. Run benches: `npm run bench -- --headless --count ` -3. Process results: `npm run results` - -After that, you can check all results in [http://localhost:8080/webdriver-ts/table.html](http://localhost:8080/webdriver-ts/table.html). - -## Tips and tricks - -* You can run multiple frameworks by passing their directory names (cd to webdriver-ts): -`npm run bench keyed/yew-baseline keyed/yew` or if you want to pass more options it becomes: -`npm run bench -- --count 3 keyed/yew`. -* You can run all of the frameworks you've installed using `npm run bench -- --installed` -* To achieve good precision you should run each framework often enough. I recommend at least 10 times, more is better. The result table contains the mean and the standard deviation. You can seen the effect on the latter pretty well if you increase the count. - +where `$CHANGED_YEW_PROJECT` is the path to the root of the yew project you have +your changes in. diff --git a/bechmark_change.sh b/benchmark_change.sh similarity index 73% rename from bechmark_change.sh rename to benchmark_change.sh index 70b0af7c4..eb0ab7299 100755 --- a/bechmark_change.sh +++ b/benchmark_change.sh @@ -6,7 +6,10 @@ http -p 8080 & ( set -euo pipefail - npm install -d + git checkout HEAD -- frameworks/keyed/yew/Cargo.toml + sed -i "s/PATH/$1\/packages/yew/" frameworks/keyed/yew/Cargo.toml + + npm ci ( set -euo pipefail @@ -37,7 +40,7 @@ http -p 8080 & npm run results ) - chromium http://localhost:8080/webdriver-ts-results/table.html + xdg-open http://localhost:8080/webdriver-ts-results/table.html & ) kill %% diff --git a/frameworks/keyed/yew/Cargo.toml b/frameworks/keyed/yew/Cargo.toml index 1d36292c4..d3f1922bb 100644 --- a/frameworks/keyed/yew/Cargo.toml +++ b/frameworks/keyed/yew/Cargo.toml @@ -12,7 +12,7 @@ rand = {version = "0.7.3", features = ["wasm-bindgen", "small_rng"]} wasm-bindgen = "0.2.62" # UPDATE TO USE YOUR BRANCH -yew = {path = "/home/janis/src/yew/packages/yew"} +yew = {path = "PATH"} # UPDATE TO USE YOUR BRANCH [profile.release] From e4f05a4787a3e1f5defd9603faa68190f3f584dc Mon Sep 17 00:00:00 2001 From: bakape Date: Sun, 23 May 2021 19:35:49 +0300 Subject: [PATCH 19/26] fix path substitution --- benchmark_change.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmark_change.sh b/benchmark_change.sh index eb0ab7299..85422f912 100755 --- a/benchmark_change.sh +++ b/benchmark_change.sh @@ -7,7 +7,7 @@ http -p 8080 & set -euo pipefail git checkout HEAD -- frameworks/keyed/yew/Cargo.toml - sed -i "s/PATH/$1\/packages/yew/" frameworks/keyed/yew/Cargo.toml + sed -i "s,PATH,$1/packages/yew," frameworks/keyed/yew/Cargo.toml npm ci @@ -40,7 +40,7 @@ http -p 8080 & npm run results ) - xdg-open http://localhost:8080/webdriver-ts-results/table.html & + xdg-open http://localhost:8080/webdriver-ts-results/table.html ) kill %% From 5db86a9574346ea12f940b1508bd8c6bfd0fb22d Mon Sep 17 00:00:00 2001 From: bakape Date: Sun, 23 May 2021 20:00:14 +0300 Subject: [PATCH 20/26] Update framework versions --- frameworks/keyed/yew-baseline/package.json | 2 +- frameworks/keyed/yew/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frameworks/keyed/yew-baseline/package.json b/frameworks/keyed/yew-baseline/package.json index b8bc377c8..b30402857 100644 --- a/frameworks/keyed/yew-baseline/package.json +++ b/frameworks/keyed/yew-baseline/package.json @@ -4,7 +4,7 @@ "description": "Benchmark for Yew", "license": "ISC", "js-framework-benchmark": { - "frameworkVersion": "0.16.2" + "frameworkVersion": "master" }, "scripts": { "build-dev": "rimraf bundled-dist && wasm-pack build --dev --target web --no-typescript --out-name js-framework-benchmark-yew --out-dir bundled-dist && cpr index.html bundled-dist/index.html && (cd bundled-dist && rimraf .gitignore README.md package.json)", diff --git a/frameworks/keyed/yew/package.json b/frameworks/keyed/yew/package.json index b8bc377c8..22fda1137 100644 --- a/frameworks/keyed/yew/package.json +++ b/frameworks/keyed/yew/package.json @@ -4,7 +4,7 @@ "description": "Benchmark for Yew", "license": "ISC", "js-framework-benchmark": { - "frameworkVersion": "0.16.2" + "frameworkVersion": "local" }, "scripts": { "build-dev": "rimraf bundled-dist && wasm-pack build --dev --target web --no-typescript --out-name js-framework-benchmark-yew --out-dir bundled-dist && cpr index.html bundled-dist/index.html && (cd bundled-dist && rimraf .gitignore README.md package.json)", From 3bb79a71357a85900a3d10b6b826327a39441a9b Mon Sep 17 00:00:00 2001 From: bakape Date: Sun, 23 May 2021 20:40:40 +0300 Subject: [PATCH 21/26] add delay to open the page --- benchmark_change.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/benchmark_change.sh b/benchmark_change.sh index 85422f912..9a9b1c55e 100755 --- a/benchmark_change.sh +++ b/benchmark_change.sh @@ -40,7 +40,8 @@ http -p 8080 & npm run results ) - xdg-open http://localhost:8080/webdriver-ts-results/table.html + xdg-open http://localhost:8080/webdriver-ts-results/table.html & + sleep 1 ) kill %% From e9036e7d31d11af450115ae643495a53e30329ba Mon Sep 17 00:00:00 2001 From: bakape Date: Sun, 18 Jul 2021 20:14:09 +0300 Subject: [PATCH 22/26] Mac OS support --- benchmark_change.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/benchmark_change.sh b/benchmark_change.sh index 9a9b1c55e..bb5ff8667 100755 --- a/benchmark_change.sh +++ b/benchmark_change.sh @@ -40,7 +40,11 @@ http -p 8080 & npm run results ) - xdg-open http://localhost:8080/webdriver-ts-results/table.html & + if [[ $OSTYPE == 'darwin'* ]]; then + open http://localhost:8080/webdriver-ts-results/table.html & + else + xdg-open http://localhost:8080/webdriver-ts-results/table.html & + fi sleep 1 ) From 06a0402b76fe1824b9a0dfc5c8d2b99dded1300b Mon Sep 17 00:00:00 2001 From: bakape Date: Sun, 18 Jul 2021 20:52:43 +0300 Subject: [PATCH 23/26] update property syntax --- frameworks/keyed/yew-baseline/src/lib.rs | 30 ++++++++++++------------ frameworks/keyed/yew/Cargo.toml | 2 +- frameworks/keyed/yew/src/lib.rs | 30 ++++++++++++------------ 3 files changed, 31 insertions(+), 31 deletions(-) diff --git a/frameworks/keyed/yew-baseline/src/lib.rs b/frameworks/keyed/yew-baseline/src/lib.rs index 89aee58a0..e8547076a 100644 --- a/frameworks/keyed/yew-baseline/src/lib.rs +++ b/frameworks/keyed/yew-baseline/src/lib.rs @@ -155,18 +155,18 @@ impl Component for Model { .iter() .map(|row| { html! { - + } }) .collect(); html! {
- + { rows } @@ -213,22 +213,22 @@ impl Component for Jumbotron {
- +
- +
- +
- +
- +
- +
@@ -293,13 +293,13 @@ impl Component for Row { fn view(&self) -> Html { html! { - + - diff --git a/frameworks/keyed/yew/Cargo.toml b/frameworks/keyed/yew/Cargo.toml index d3f1922bb..1d36292c4 100644 --- a/frameworks/keyed/yew/Cargo.toml +++ b/frameworks/keyed/yew/Cargo.toml @@ -12,7 +12,7 @@ rand = {version = "0.7.3", features = ["wasm-bindgen", "small_rng"]} wasm-bindgen = "0.2.62" # UPDATE TO USE YOUR BRANCH -yew = {path = "PATH"} +yew = {path = "/home/janis/src/yew/packages/yew"} # UPDATE TO USE YOUR BRANCH [profile.release] diff --git a/frameworks/keyed/yew/src/lib.rs b/frameworks/keyed/yew/src/lib.rs index 89aee58a0..e8547076a 100644 --- a/frameworks/keyed/yew/src/lib.rs +++ b/frameworks/keyed/yew/src/lib.rs @@ -155,18 +155,18 @@ impl Component for Model { .iter() .map(|row| { html! { - + } }) .collect(); html! {
- +
{ self.props.data.id } + { self.props.data.label.clone() } - +
{ rows } @@ -213,22 +213,22 @@ impl Component for Jumbotron {
- +
- +
- +
- +
- +
- +
@@ -293,13 +293,13 @@ impl Component for Row { fn view(&self) -> Html { html! { - + - From 1d60f9eac002721d59f2d201bd40a98c1f4f73fc Mon Sep 17 00:00:00 2001 From: bakape Date: Sun, 18 Jul 2021 20:57:19 +0300 Subject: [PATCH 24/26] fix yew path rouge commit --- frameworks/keyed/yew/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/keyed/yew/Cargo.toml b/frameworks/keyed/yew/Cargo.toml index 1d36292c4..d3f1922bb 100644 --- a/frameworks/keyed/yew/Cargo.toml +++ b/frameworks/keyed/yew/Cargo.toml @@ -12,7 +12,7 @@ rand = {version = "0.7.3", features = ["wasm-bindgen", "small_rng"]} wasm-bindgen = "0.2.62" # UPDATE TO USE YOUR BRANCH -yew = {path = "/home/janis/src/yew/packages/yew"} +yew = {path = "PATH"} # UPDATE TO USE YOUR BRANCH [profile.release] From 0cd543b93aa1a9b098969031f6f25bee93a85c43 Mon Sep 17 00:00:00 2001 From: bakape Date: Sun, 19 Sep 2021 17:03:07 +0300 Subject: [PATCH 25/26] upgrade to components v2 API --- frameworks/keyed/yew-baseline/src/lib.rs | 88 ++++++++++-------------- frameworks/keyed/yew/Cargo.toml | 2 +- frameworks/keyed/yew/src/lib.rs | 88 ++++++++++-------------- 3 files changed, 71 insertions(+), 107 deletions(-) diff --git a/frameworks/keyed/yew-baseline/src/lib.rs b/frameworks/keyed/yew-baseline/src/lib.rs index e8547076a..05f38a2ca 100644 --- a/frameworks/keyed/yew-baseline/src/lib.rs +++ b/frameworks/keyed/yew-baseline/src/lib.rs @@ -4,7 +4,7 @@ use rand::prelude::*; use std::cmp::min; use wasm_bindgen::prelude::wasm_bindgen; use yew::prelude::*; -use yew::web_sys::window; +use yew::{html::Scope, web_sys::window}; static ADJECTIVES: &[&str] = &[ "pretty", @@ -68,7 +68,6 @@ struct Model { next_id: usize, selected_id: Option, rng: SmallRng, - link: ComponentLink, on_select: Callback, on_remove: Callback, } @@ -87,23 +86,18 @@ impl Component for Model { type Message = Msg; type Properties = (); - fn create(_: Self::Properties, link: ComponentLink) -> Self { + fn create(ctx: &Context) -> Self { Model { rows: Vec::new(), next_id: 1, selected_id: None, rng: SmallRng::from_entropy(), - on_select: link.callback(|id| Msg::Select(id)), - on_remove: link.callback(|id| Msg::Remove(id)), - link, + on_select: ctx.link().callback(|id| Msg::Select(id)), + on_remove: ctx.link().callback(|id| Msg::Remove(id)), } } - fn change(&mut self, _: ()) -> ShouldRender { - false - } - - fn update(&mut self, msg: Self::Message) -> ShouldRender { + fn update(&mut self, _: &Context, msg: Self::Message) -> bool { match msg { Msg::Run(amount) => { let rng = &mut self.rng; @@ -149,7 +143,7 @@ impl Component for Model { true } - fn view(&self) -> Html { + fn view(&self, ctx: &Context) -> Html { let rows: Html = self .rows .iter() @@ -166,7 +160,7 @@ impl Component for Model { html! {
- +
{ self.props.data.id } + { self.props.data.label.clone() } - +
{ rows } @@ -180,30 +174,29 @@ impl Component for Model { #[derive(Properties, Clone)] struct JumbotronProps { - link: ComponentLink, + link: Scope, } -struct Jumbotron { - link: ComponentLink, +impl PartialEq for JumbotronProps { + fn eq(&self, _: &Self) -> bool { + // Never changed + true + } } +impl Eq for JumbotronProps {} + +struct Jumbotron; + impl Component for Jumbotron { type Properties = JumbotronProps; type Message = (); - fn create(props: Self::Properties, _: ComponentLink) -> Self { - Self { link: props.link } - } - - fn change(&mut self, _: Self::Properties) -> ShouldRender { - false - } - - fn update(&mut self, _: Self::Message) -> ShouldRender { - false + fn create(_: &Context) -> Self { + Self } - fn view(&self) -> Html { + fn view(&self, ctx: &Context) -> Html { html! {
@@ -213,22 +206,22 @@ impl Component for Jumbotron {
- +
- +
- +
- +
- +
- +
@@ -253,7 +246,6 @@ struct RowState { struct Row { state: RowState, - props: RowProps, } impl RowState { @@ -270,33 +262,23 @@ impl Component for Row { type Message = (); type Properties = RowProps; - fn create(props: Self::Properties, _: ComponentLink) -> Self { + fn create(ctx: &Context) -> Self { Self { - state: RowState::from_props(&props), - props, + state: RowState::from_props(ctx.props()), } } - fn change(&mut self, props: RowProps) -> ShouldRender { - if self.props != props { - self.state = RowState::from_props(&props); - self.props = props; - true - } else { - false - } - } - - fn update(&mut self, _: ()) -> ShouldRender { - false + fn changed(&mut self, ctx: &Context) -> bool { + self.state = RowState::from_props(ctx.props()); + true } - fn view(&self) -> Html { + fn view(&self, ctx: &Context) -> Html { html! { -
- + +
{ self.props.data.id }
{ ctx.props().data.id } - { self.props.data.label.clone() } + { ctx.props().data.label.clone() } diff --git a/frameworks/keyed/yew/Cargo.toml b/frameworks/keyed/yew/Cargo.toml index d3f1922bb..1d36292c4 100644 --- a/frameworks/keyed/yew/Cargo.toml +++ b/frameworks/keyed/yew/Cargo.toml @@ -12,7 +12,7 @@ rand = {version = "0.7.3", features = ["wasm-bindgen", "small_rng"]} wasm-bindgen = "0.2.62" # UPDATE TO USE YOUR BRANCH -yew = {path = "PATH"} +yew = {path = "/home/janis/src/yew/packages/yew"} # UPDATE TO USE YOUR BRANCH [profile.release] diff --git a/frameworks/keyed/yew/src/lib.rs b/frameworks/keyed/yew/src/lib.rs index e8547076a..05f38a2ca 100644 --- a/frameworks/keyed/yew/src/lib.rs +++ b/frameworks/keyed/yew/src/lib.rs @@ -4,7 +4,7 @@ use rand::prelude::*; use std::cmp::min; use wasm_bindgen::prelude::wasm_bindgen; use yew::prelude::*; -use yew::web_sys::window; +use yew::{html::Scope, web_sys::window}; static ADJECTIVES: &[&str] = &[ "pretty", @@ -68,7 +68,6 @@ struct Model { next_id: usize, selected_id: Option, rng: SmallRng, - link: ComponentLink, on_select: Callback, on_remove: Callback, } @@ -87,23 +86,18 @@ impl Component for Model { type Message = Msg; type Properties = (); - fn create(_: Self::Properties, link: ComponentLink) -> Self { + fn create(ctx: &Context) -> Self { Model { rows: Vec::new(), next_id: 1, selected_id: None, rng: SmallRng::from_entropy(), - on_select: link.callback(|id| Msg::Select(id)), - on_remove: link.callback(|id| Msg::Remove(id)), - link, + on_select: ctx.link().callback(|id| Msg::Select(id)), + on_remove: ctx.link().callback(|id| Msg::Remove(id)), } } - fn change(&mut self, _: ()) -> ShouldRender { - false - } - - fn update(&mut self, msg: Self::Message) -> ShouldRender { + fn update(&mut self, _: &Context, msg: Self::Message) -> bool { match msg { Msg::Run(amount) => { let rng = &mut self.rng; @@ -149,7 +143,7 @@ impl Component for Model { true } - fn view(&self) -> Html { + fn view(&self, ctx: &Context) -> Html { let rows: Html = self .rows .iter() @@ -166,7 +160,7 @@ impl Component for Model { html! {
- + { rows } @@ -180,30 +174,29 @@ impl Component for Model { #[derive(Properties, Clone)] struct JumbotronProps { - link: ComponentLink, + link: Scope, } -struct Jumbotron { - link: ComponentLink, +impl PartialEq for JumbotronProps { + fn eq(&self, _: &Self) -> bool { + // Never changed + true + } } +impl Eq for JumbotronProps {} + +struct Jumbotron; + impl Component for Jumbotron { type Properties = JumbotronProps; type Message = (); - fn create(props: Self::Properties, _: ComponentLink) -> Self { - Self { link: props.link } - } - - fn change(&mut self, _: Self::Properties) -> ShouldRender { - false - } - - fn update(&mut self, _: Self::Message) -> ShouldRender { - false + fn create(_: &Context) -> Self { + Self } - fn view(&self) -> Html { + fn view(&self, ctx: &Context) -> Html { html! {
@@ -213,22 +206,22 @@ impl Component for Jumbotron {
- +
- +
- +
- +
- +
- +
@@ -253,7 +246,6 @@ struct RowState { struct Row { state: RowState, - props: RowProps, } impl RowState { @@ -270,33 +262,23 @@ impl Component for Row { type Message = (); type Properties = RowProps; - fn create(props: Self::Properties, _: ComponentLink) -> Self { + fn create(ctx: &Context) -> Self { Self { - state: RowState::from_props(&props), - props, + state: RowState::from_props(ctx.props()), } } - fn change(&mut self, props: RowProps) -> ShouldRender { - if self.props != props { - self.state = RowState::from_props(&props); - self.props = props; - true - } else { - false - } - } - - fn update(&mut self, _: ()) -> ShouldRender { - false + fn changed(&mut self, ctx: &Context) -> bool { + self.state = RowState::from_props(ctx.props()); + true } - fn view(&self) -> Html { + fn view(&self, ctx: &Context) -> Html { html! { -
- + +
{ self.props.data.id }
{ ctx.props().data.id } - { self.props.data.label.clone() } + { ctx.props().data.label.clone() } From fa2fa25940ccb71d2267ae6142044d1a3f2c3d1f Mon Sep 17 00:00:00 2001 From: Janis Petersons Date: Wed, 29 Dec 2021 16:12:41 +0200 Subject: [PATCH 26/26] fix rouge path commit --- frameworks/keyed/yew/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/keyed/yew/Cargo.toml b/frameworks/keyed/yew/Cargo.toml index 1d36292c4..d3f1922bb 100644 --- a/frameworks/keyed/yew/Cargo.toml +++ b/frameworks/keyed/yew/Cargo.toml @@ -12,7 +12,7 @@ rand = {version = "0.7.3", features = ["wasm-bindgen", "small_rng"]} wasm-bindgen = "0.2.62" # UPDATE TO USE YOUR BRANCH -yew = {path = "/home/janis/src/yew/packages/yew"} +yew = {path = "PATH"} # UPDATE TO USE YOUR BRANCH [profile.release]