From 68177b7590b08427868f077f4e12656e6d62894e Mon Sep 17 00:00:00 2001 From: Ingvar Stepanyan Date: Fri, 2 Aug 2019 14:44:47 +0100 Subject: [PATCH] Rename `resize` package Without this, it was creating files in `pkg` prefixed with `squooshresize`, which were ignored by Git. --- codecs/resize/Cargo.toml | 2 +- codecs/resize/pkg/resize.d.ts | 29 +++++-- codecs/resize/pkg/resize.js | 137 +++++++++++++------------------ codecs/resize/pkg/resize_bg.d.ts | 1 - codecs/resize/pkg/resize_bg.wasm | Bin 19781 -> 19317 bytes 5 files changed, 80 insertions(+), 89 deletions(-) diff --git a/codecs/resize/Cargo.toml b/codecs/resize/Cargo.toml index cd47881c..b1f14fe6 100644 --- a/codecs/resize/Cargo.toml +++ b/codecs/resize/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "squooshresize" +name = "resize" version = "0.1.0" authors = ["Surma "] diff --git a/codecs/resize/pkg/resize.d.ts b/codecs/resize/pkg/resize.d.ts index b0cc0a7b..25a0e4fe 100644 --- a/codecs/resize/pkg/resize.d.ts +++ b/codecs/resize/pkg/resize.d.ts @@ -1,13 +1,24 @@ /* tslint:disable */ /** -* @param {Uint8Array} arg0 -* @param {number} arg1 -* @param {number} arg2 -* @param {number} arg3 -* @param {number} arg4 -* @param {number} arg5 -* @param {boolean} arg6 -* @param {boolean} arg7 +* @param {Uint8Array} input_image +* @param {number} input_width +* @param {number} input_height +* @param {number} output_width +* @param {number} output_height +* @param {number} typ_idx +* @param {boolean} premultiply +* @param {boolean} color_space_conversion * @returns {Uint8Array} */ -export function resize(arg0: Uint8Array, arg1: number, arg2: number, arg3: number, arg4: number, arg5: number, arg6: boolean, arg7: boolean): Uint8Array; +export function resize(input_image: Uint8Array, input_width: number, input_height: number, output_width: number, output_height: number, typ_idx: number, premultiply: boolean, color_space_conversion: boolean): Uint8Array; + +/** +* If `module_or_path` is {RequestInfo}, makes a request and +* for everything else, calls `WebAssembly.instantiate` directly. +* +* @param {RequestInfo | BufferSource | WebAssembly.Module} module_or_path +* +* @returns {Promise} +*/ +export default function init (module_or_path: RequestInfo | BufferSource | WebAssembly.Module): Promise; + \ No newline at end of file diff --git a/codecs/resize/pkg/resize.js b/codecs/resize/pkg/resize.js index 656cee33..f7d41ff0 100644 --- a/codecs/resize/pkg/resize.js +++ b/codecs/resize/pkg/resize.js @@ -1,7 +1,6 @@ (function() { - var wasm; const __exports = {}; - + let wasm; let cachegetUint8Memory = null; function getUint8Memory() { @@ -20,95 +19,77 @@ return ptr; } + let cachegetInt32Memory = null; + function getInt32Memory() { + if (cachegetInt32Memory === null || cachegetInt32Memory.buffer !== wasm.memory.buffer) { + cachegetInt32Memory = new Int32Array(wasm.memory.buffer); + } + return cachegetInt32Memory; + } + function getArrayU8FromWasm(ptr, len) { return getUint8Memory().subarray(ptr / 1, ptr / 1 + len); } - - let cachedGlobalArgumentPtr = null; - function globalArgumentPtr() { - if (cachedGlobalArgumentPtr === null) { - cachedGlobalArgumentPtr = wasm.__wbindgen_global_argument_ptr(); - } - return cachedGlobalArgumentPtr; - } - - let cachegetUint32Memory = null; - function getUint32Memory() { - if (cachegetUint32Memory === null || cachegetUint32Memory.buffer !== wasm.memory.buffer) { - cachegetUint32Memory = new Uint32Array(wasm.memory.buffer); - } - return cachegetUint32Memory; - } /** - * @param {Uint8Array} arg0 - * @param {number} arg1 - * @param {number} arg2 - * @param {number} arg3 - * @param {number} arg4 - * @param {number} arg5 - * @param {boolean} arg6 - * @param {boolean} arg7 + * @param {Uint8Array} input_image + * @param {number} input_width + * @param {number} input_height + * @param {number} output_width + * @param {number} output_height + * @param {number} typ_idx + * @param {boolean} premultiply + * @param {boolean} color_space_conversion * @returns {Uint8Array} */ - __exports.resize = function(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) { - const ptr0 = passArray8ToWasm(arg0); - const len0 = WASM_VECTOR_LEN; - const retptr = globalArgumentPtr(); - wasm.resize(retptr, ptr0, len0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); - const mem = getUint32Memory(); - const rustptr = mem[retptr / 4]; - const rustlen = mem[retptr / 4 + 1]; - - const realRet = getArrayU8FromWasm(rustptr, rustlen).slice(); - wasm.__wbindgen_free(rustptr, rustlen * 1); - return realRet; - + __exports.resize = function(input_image, input_width, input_height, output_width, output_height, typ_idx, premultiply, color_space_conversion) { + const retptr = 8; + const ret = wasm.resize(retptr, passArray8ToWasm(input_image), WASM_VECTOR_LEN, input_width, input_height, output_width, output_height, typ_idx, premultiply, color_space_conversion); + const memi32 = getInt32Memory(); + const v0 = getArrayU8FromWasm(memi32[retptr / 4 + 0], memi32[retptr / 4 + 1]).slice(); + wasm.__wbindgen_free(memi32[retptr / 4 + 0], memi32[retptr / 4 + 1] * 1); + return v0; }; - const heap = new Array(32); + function init(module) { - heap.fill(undefined); + let result; + const imports = {}; - heap.push(undefined, null, true, false); + if (module instanceof URL || typeof module === 'string' || module instanceof Request) { - let heap_next = heap.length; - - function dropObject(idx) { - if (idx < 36) return; - heap[idx] = heap_next; - heap_next = idx; - } - - __exports.__wbindgen_object_drop_ref = function(i) { dropObject(i); }; - - function init(path_or_module) { - let instantiation; - const imports = { './resize': __exports }; - if (path_or_module instanceof WebAssembly.Module) { - instantiation = WebAssembly.instantiate(path_or_module, imports) - .then(instance => { - return { instance, module: path_or_module } - }); - } else { - const data = fetch(path_or_module); - if (typeof WebAssembly.instantiateStreaming === 'function') { - instantiation = WebAssembly.instantiateStreaming(data, imports) - .catch(e => { - console.warn("`WebAssembly.instantiateStreaming` failed. Assuming this is because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e); - return data + const response = fetch(module); + if (typeof WebAssembly.instantiateStreaming === 'function') { + result = WebAssembly.instantiateStreaming(response, imports) + .catch(e => { + console.warn("`WebAssembly.instantiateStreaming` failed. Assuming this is because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e); + return response + .then(r => r.arrayBuffer()) + .then(bytes => WebAssembly.instantiate(bytes, imports)); + }); + } else { + result = response .then(r => r.arrayBuffer()) .then(bytes => WebAssembly.instantiate(bytes, imports)); - }); + } } else { - instantiation = data - .then(response => response.arrayBuffer()) - .then(buffer => WebAssembly.instantiate(buffer, imports)); - } - } - return instantiation.then(({instance}) => { - wasm = init.wasm = instance.exports; - }); -}; -self.wasm_bindgen = Object.assign(init, __exports); + result = WebAssembly.instantiate(module, imports) + .then(result => { + if (result instanceof WebAssembly.Instance) { + return { instance: result, module }; + } else { + return result; + } + }); + } + return result.then(({instance, module}) => { + wasm = instance.exports; + init.__wbindgen_wasm_module = module; + + return wasm; + }); + } + + self.wasm_bindgen = Object.assign(init, __exports); + })(); diff --git a/codecs/resize/pkg/resize_bg.d.ts b/codecs/resize/pkg/resize_bg.d.ts index d8049a99..51e147c3 100644 --- a/codecs/resize/pkg/resize_bg.d.ts +++ b/codecs/resize/pkg/resize_bg.d.ts @@ -1,6 +1,5 @@ /* tslint:disable */ export const memory: WebAssembly.Memory; -export function __wbindgen_global_argument_ptr(): number; export function __wbindgen_malloc(a: number): number; export function __wbindgen_free(a: number, b: number): void; export function resize(a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number): void; diff --git a/codecs/resize/pkg/resize_bg.wasm b/codecs/resize/pkg/resize_bg.wasm index dadb009eb0aa4fb0d2d0f1168e2ecfe532f83f4b..c9620d5e2ae775348fb0c0143aa7dbdb44513c2b 100644 GIT binary patch literal 19317 zcmeHud3;pW+5frAOlC5f$s{BY2#|9xAUjO9NdlRBash#`BTH=+NeB^`1OiD|R3Jf6 zP*E`ix7Q`)r*+?|EmW+;x^I=z*7{c4;=Z=xt5mIM-tTknosb~5@7s^R-|wGBXP$G< z^6bxZo^$TNDjQZRj4|axC9^_p+N5m4cN447oAAe|tu$3A^rfN0X=BPJr|C@CRH1Bg zC%6mo#8`!ga5zghZNk*e?)uFY$#O(~p??!m1&U4D!Udu93^f!As~XGD0*V??8A}c+ zO2Fq!NmUe&?n_Bxo}^^m-^;7$;5#Lt1-yPO=+lD1ppFmvG+on!X=y&6;&c9VkFr`B zI@F^nEY0hOGgdQ(4;L#p{=>ShaLn^{T}yD{E`(s#s2Hx4v`h ztE<^aZ+&&ciu0?P;vc0jTM3*tGtV3{qF`8IuhV?fM~@jh!=5m4R(SH1IiX3X&z|ca zbVgeGyz=?el0RL!;I95^|0aFoAZFjM*O;EcjC&@qBJEnmfxBF|!-dT*+~5qacEEB6 zR5;*F2h4H6R0otfpx6Ns2MluncR-c{!Vd5`z~yJZ>O9`>!rNWg=E7@TxXXn*T-fZw zFI>Kly6`<09&zC-EA1--Wlku+4?9XbyjeT=_aR(xF6STwb5?=j}8_e zrZUsZ6}u^JCdCaO*X&JkJ8Pxsw;9K0TDFRqhbP%uW84UUkWVY)KJG0yg54-^Fo3ZT4;U#JH@JT!Xr$n) zz0EK{Gs!^@ntqT56(YTXNK0ZKyF-n09}#ib3lMt&5DJo35V--D+R-Mraioc-*;_Wm zp{mZLX=ZwM7dvjFLc@e-lj3H`zHq}-vsYrmQGtHy$;d{7)@D-U>pt>pYPNmh>NpgV zo^AF<&(Y=bYg)G5k{X8~y|PVAOON&V%1~q zZKiS3GUKFWP(o@{B@cq@gd9r`A}goZ%5*qU3W))iBH0{Yl9WIz6HH_T6`p4JQ`7)Y z@Oq@F-R#x|OX=A_*Bi6oxQUSp?Zhm!F{>BN>SOp5f{-J)_ArgEbseJp23I`Zacc1b zC$tg(K_1w*msIWi#|H!%cu#`{ZPmzum-8;%N5r|d(h$^BG{j2}TO-=+K5LB}lAz~^ z>F0imdH~*cEkNJK8Z#sn%CoQn-2u3Mfall>!kFhkv5F%i!T{ub#4UhpeLt+93U?u- z$ON68ok>QD%eoKiL#GE7TQPiOcAt@g{J>Lqs0IXGJm?`y!c>%nC>%kJ4R zcpey1nL=ryhnTJ~L{(ekp#1I`3e5=c0EIu1$g$PQT>`o$LU0;;VLfv%?BIiep>s}? z6K=rR5@`=F=rqN_9nY2&Apn%(hJsWE57m==d88>NZu)p&Iy~OP6=X7*LxU9BNNh>+ z5slXcY}SDoUy9h$Z=J|5cd#`D29+{o%~9vm4_1f)$ioj5QQ8iR^(0!K` z=HJS%L7Ec;p&XJn=k%bO0=r8$Q_F0I4CdrjD9VpyIV-4kSpdNYhMrBLIU!`=8IUjZ zt%#-o!k{y$*+-sys!70(#7kdJ;{8_48`w)I3DcL8gk`|PJ9>nBB7xZykSCef@RR?X zl-2y)xRZhoR;OI#cd}xl#|^lI(|t!arTpY(Q-7e#p~&j6DE1J-*3Hd~kc=d7zAwS< zcjViih~dP9DavAM*}lqnRx-4Um9pOJ%zf)AU)8Y2l&hxk1?bddj`drTu9ue}lF z6NL}z9fFAph2qptVSx&TduJko5`_w-L{M#0;!YjplqjhbZK<+0fq&_?=B7$%WId!S zDl%q5n^4hU%<_?IQkmnRllwnvFCzrrupxjO*n6J9(uxV zOFTke#5^em+C_f*-tep6f#1=DEY`Zaz+lKQSjy053?^QtgD;7vw78MZRkBYnJgKySY4v7C+{kpN1W+TZaZ{NY)H!CNHJTxXrFjtt zJis$%1~sn0T{5XVH7$va10;l|YHL#GX;hS?@m_|?dvR$7?6rnUvV8kL#HA7sd6}YW zx|dOTq(XKURXM;%TRPC{j}{b@mExhp6pEqanlt>{p2KjwWIHQ9k>QWNL^zxLNA}%y z=bhF>`a&OV5w>pY;i#!XUufBEn0oxiGDx6sH9JjV6#kr5L>l_>4Z7@(jZqln}&GSObW}xsC!S@jOf|HnM1X zfzg*h1m_NbIXH6w%)ogAU@FcV09j@lf&Qj~G@RyR@MyGjGlTLJPC4}C3+D!)UwsN! z>#5tzJ+#sf6d3po|7Z)qmr*a*JV3(jG?)>q>O zG)GR52K!;9tk!zL+ngC`VP{NoNMjfYPYHTX zI1SfG3{tbf!EQPq%Ao~aO0>}I+N)`2^2BmqGN5YQIKGY|p@E^bn_XG-VJ#D=IWdj^O5;i#G4x<-OEI41TA~jfDli#k!c6Eg zlP6I-0G>f(5bwj&C5y0(M3>6bX9lTA#VK4mlu9y@)27n`igler6N&`JLEP(LgVV9LqWtLxF5AQlK#hBjq$rJV!bo@}tZ`i{yc4a5!0xHqTz<_E)SSmm7SCp->&l z4D2GkczT>GluJ*t+vK2!3VizsBs+vnINS#jxRGauGs#1EYPdI^pTWf^DVhcWJqaV@ z4yen>((-&DQKlUOWGP3dlVlo#ki<--poZ3ZZV8Yx>~0DulnjvhUv7!NUDnAY2CTlOB-)uE;fA_mB_a zad5}~M;txka`bt!syAtLBOk6Y71UVlfYE&mVUHlraqH2Uw8qrzS8u-M?;4ffntk}T zziidZvF&O0%Wv-3j;4wxCVrJfH4hN&Hs}%o8q%mVctNi7a8En#f$^1u{ngvv&b^av zn>>E!_7|VB+9x%>``jB}vJnT{+Bt?N{p71vmxR-{i1tbA?|y#%f(1{~fTykPXA&`j zit3hTt<`}Sv^a$H^6X;OM`_E~4;!?k|JF6HHiJVpDQonk`Cl3SvP7c;p3kP@lClk4 zdD~6Tsfbb~0EVvzvwKmGc)%U_I3?eEi8o1<@Ip}@m(rI9+e|6EXVR8)Qoio&{PV$f z_vCj}v`MU{chZD$p4aCsxK*@MkC%w7nDf^o6Lx2)lZqpYl7Qc(87L7GPNm*<$D)#Em(~s&`Ar-DGri;c zmkdm}$jiP@y^DTeX=>iYxnY8tpXIDlRzXhLW@~?PeTcY(i ze3066zB0Z%2oLa1s#?;o@}cnDM{#mTOmgo@S3BN24GpGpZ)P+}9~HA^_gQCuusLq( zcAv(YM-R|x3xyIsD7sPkg_)rNn`$@VuERzw*BIFTM{2(74Ufcurs07HIR62kMzODw z2wF%}R1JcDf4)rqM$YV@L=66u%z$?^-;o;8j(6_zXq7BiJSbI?q&*+x>VtdCbV`*gX9YVm=cstppCXn3+6d_vL2VW%M|E5$)D#w@ZI<-OnQ{Gu%&sE`6qDQ+sN* zkt`+4;F&E~{KMsNP59@x)+1{s*HGOJ{5T})bVy7g;4^}dH5s%p7@{M;hC>O8G60;- zh)=57k_`{)wKSAoo(Fm6Zr*DTPX&%N##%5+w=P&ND?s2PG|)r{A5xzpYgodEF(sZ@ zPjnmhzHzN%dR-b`?)=I>IvC6ITFh#1U;Ob2_zK|M-~VWqQvq*@MGjMiL!<$=$#n4t}%{tE785o`(AoS+Q{sIP?bS z@Poj0dZ9xejH)^UBAH4k4^E48KSM2;HHBJ|vWMDdW^Wd3plB92bc9UhPJsuZ6h7I@O5c$+wGDHxkHf$=M-YWeTG=00u6MoYxO9$T}&P5~mjK_8m!~gk+L687}B> z4PL=EE>LitmZmW%43#>{Zpo;PgIEM2L>wcY5LmKAspTY=a0A?fC7)zTUJpWb#1dVJ zQVVy24ofl;6HK|P{0^pwPaT?&ymhHu@=p4OA>@TC+zx#>^Z;ZTj1nIPAT?el+H|CF zjDW1zC9@1Oi5=H)J&emF7RR_JC^;?<2a=Th|AbN!yP}J zK@P91$;QzdTEH}hbc<;zL^5Ejl;H^DFEBJx#-5=XHuG)gbN?YGz}(~E7yZoe4smc}wR zo>9Ku9LJ5<4NbM&6L;pFG()3TT`(=D|p`aZjs35^fM&{gR2O8DA#JjI=EIb z1r?hXIG`%3yQ^RWBK_;+Au{yYi71oI;4F;y4{17ON|(EhAn5pz>1;T7klPbgZj>4r zPTKG&T-quiikQRM+KEfF@WO)j6~|AZN@;2zEH4)-v{0voxRIrWI{CizJPIYbn2~Ma z{MfYRB0Rtn6mBTvurD}m5=-GE9dN63)dtt6fYzmJkpu=j8@rejyW}gxy89^Y;Dj=6 zZZY77a^QYd(VF0l&5HC!xyX>JA@yJxF=A?Vm{JX41aF$nr7ZVwCG15d4kn!uq%KB2 z%W+}TiMIs0ok}N^NIjPPp57YR$>rH}ImjqmlAZK*CixpWno<4e_7-I}wl>AS61Q_U zy`2LljKKbktWIaSe?+9{`=CLt2%2;nfUb44`^54xn~n#&9&1U=HRb{Dbdw)p3XM(2%LJ6{Bh-|BP6unHkiu$= zHXp=fJayv$Pl2B+NCVEX4QUlV1Z865RLeL8J3LIoE#f-j7Gv_=2QX?DT?BUPO^x9QzDr-H_rF8M|_Ky(CdCxts%0{qdA zY9e%L6Qt{LuHq7e(mKZlqass@<_JR8psWIsKqH z3OHVvBFBLj(u;#cCPce+8|;yVIogSLecg^GyHB_VPV@*Snbhcu6oj0PS4&*Qn>@Q2 zzX8D4^la<^h&gD@QNs(40U@6}>4K`1NR?*-D%ZG51qnG13ISQz$XW?f(I!F?NRF`( zSf%>5C@?x}1bqjYG*6HcQV-7a+L4VMZks3eF&PCA@Y7xWY}5ILkOq6A$MB~n>x zAZ+2_C8S{FR zBY;tPwT3QQ4~3E&(l*rGym1X&mA0pDHj}1Yr)Zlf%&~@qzf7i4Q(Hs{f#Sbe7^(ww z8kbYgBE?L6HMP8~)zrf(*Y{w*qfxHyF~2=U!4zc=DF!xal?n>{eW>Py|9B4F7VUaoxxbC+FZVyp_Y!;FzTb9E67ax z8m5N_uz#K2N8A5b^p0aX(W~u}56PM0f+7rQiDFsnl27ZBPjlqc>_Znh^fX64x&e0N zLyLr?4ib|C;us`}EmxH$%{?6`RDul0g&LGO96y(Vy@sodibFdCB@xkg%HyaS#tpYZ z`3Lqa(y{;)`SOcwrWI+!0MsIl%YGgwsg}b-Y{gJ0rKn}J0UW)t%()+76Sm;RP`F4# z4>An?)c{66qfwl@qSOL*TszayF!c-hixavErQIz`&lsjXH9VE!cNX&#?hjsZA>&-Y zAVtv)fPxLny>g)gw!A8Ju1TE=I!iiS*BrVgpek1n%#}!OpS)wmzCtZxhJOBn6vdf) zCk1O2JJzCmItC7!oACn}oc!%W*fX4531hIpG$>vk%eYerE2L^HhpIW+K00l}`=#e{ z*KM1nfstV3CPDUqA^tT~M^1sNm<6IzPUj{J>}X}=c%zwoAFa{t7aj?~yi^ikKcd^a zz(|G+f^$BMKn>_em-Q2~H2w?=wY~; zLO()L!hKm_w8IpX6AsYnhIUj63^*Ovre}u-qG&@?4dch&dSEOA3-nWiH4kz|MQ78* zJ^vt+1x9x9LuH(FeaQsn0MPeKS>3{E)Tz`%2Mkv?J(Q9|jC^+r4g9n50S+96D?SlHG@JejtEmA^aEz zyA$0h0YAE>Jl$G8xhhmgRK$0U+ z;AE(SrGUnNmW5*UO{9@b$&rfWi&rO5-nL;P+U@yTfHPwHMXI?YHaO_ zB~^9x)nglKS5#GxU0JtuOnn1mVKx5`J_s^YwSOr(F}H##yV ze@rC7h9t~ZgVtQ2U#BpZ37F#2!y}x=p`QvE?$)1%b~--2@TqKQsIG5ZQMZbpTe+gP zdg(Y`F|4-w+(sUY@%k0ZmNyQsNamb+Fj6rp+3BPi$ayAk zlbl;Yzz>*s-sV1MppX8DKIx%1K7H`X!bf*MeF6L7lZ{V*eCY4w`J>b@8;t&+1JZh1 zb?D8nUs1i3H`ein<@GC8)ljRF*TRa`^}MQbb!F9x#`6YXz7HRwH_-j$0CId1JQ!%x z$HZq4KJ-UC5Y5{`lWdcq{TI;o;5mVx*R89rKex7Sz3YhbpM;LBuUx-)U3C@Q;V9N~ z%nxf}Y2P7e(;wkK4Ilhd(&`PoZfzs4JC`r1Tf1s$!#Li!yc*_R#aA?Nz63+`>`X*Y zBofJu@9zc4?VUzA^*Us4b$$Sue#$S)`;C@hE;6crQ~loUn^a|`nd z^9u_K3k#!#MTNzMCDBMUH<}mCj}}A=qtR$lv^ZK)6e-Fr$}7q*Dkv%}iWU_W6&IBh zM~ZWc^NRC}3yKSiqs2wV#RyigSOW4TKwW}mCFp{F^)T~72O|JU_bGtVHxQ$wUB)mN@sR?W|?tLHNQNsrLovc~1S7Wl~LE(D~wOW;pV;HP}yDz>4qvc9o_S2j8t zuZA7yA+iDM?#B9&fWHSMKRzGEBZ#Dd=;Rf%S5vT#8@G1V`ufV%!-iLIgl;9Tm{qr` zx`MB(tX*5(U6eXG9lp^R49na!9k?hbg*_+dEX3{iln~*Krdhcl*3I*uu->2hv{hw4XWcXCMXUD9m#otsKWx=(`JMGZ!7J99KmNhW z-1tXJOFLp+cf%W2LC)KjdEL9#!^t056B|FWJTL#%5|K}=+^wHl17A93MKivz9z5gk z*3*|Bw{Cvq8>^&|iGuBln0JjT?z=@3Ke$g9mHRy6Pmg%TYX_6W$_}4sf7CCwKb$Pa zJQNUZccqAr+k#?9Ye>wxC{?U)42wG})5NhE>0)uTmpC>cLmbpH#nbO*ir&xl7W?n) zBksE-OC&GrD_)w=PpAX3#eK)J#h+g2FIw6Mh?mz56!(_r2s4|D!VkIl^yh|HwA~aN z=M56`2M!h=ygOJ-ynl#TzWy|EW^Aay=}tWI`amU+?nFKg+CNGzVSmbYSoX#lrMiIKHhqkFhXaGx34){6dQ{~pF0L1)~^)5{&b}nuzHn9`)HN;$+9}}%^P*%^F^!0O|PsL|8>S1@#za| zMEm4=p?B1a^pXZ~_<;s-`iMrcyuDGx`mGgDUbR**|2pxPrgh?~zpWGR)vgzxzOi2X z?92^f?5{S6vnQS>Chb2@ygurD5#4*fn38#c2wrl5xbpY~;@P^5;@}$_#p(r{#H&wl z656=U;@!J8i|qrN#9LQ1iElcagqx6@f(5xCGw0@#=ZEBsTkz9W<5rtDk1PD(DYXAO z?s6+Iezlo1{tR#a_%}YBJpQveXN|A>WcB#HuWudy$lF(ruiSCN_}$OmF@DQE`^Ia9 zPmOP^`rY`uO5Pqn>fvMKf6<_o7FDK{=H8ZBde`YWrDs^fOTW1)zqGGymCl`6Ui#yo z%`bgwb4BU>x7L>S8hu{r-N{=^@4oMn(qk9xDm`%dHKo6Q`liw;1wSs`@SA%|lYjiv z()_!BQ9AscCrf`h|5v5Ye*SW4#-Tr#-ulP)O8XiAReIO;UzJwgs>a^AHYxVjZ7H$4 z4yVO_(6>*lcw_%q-d9HKCsz-R?VmL|cHW@;*oe%M*t>&7?D^TJ$4D+sE5tQ>NV#``y;tW2;`gJ2rag1F^KLei|zZJRIA<=h0Yeq?(=(E^+gZ>^ndq-z1sY$iAOz>EH zLq2Qmo5_~;SkRh(TiB|-x|cQYir!ZE%D&e9*Y>ya?#i)leaf`_9}cnNS;MVEvqo9= z6=SU@U(T~ChDELZTT3kc-BPRX{4%TZxrx@B(ct*2T!Y{Ngk8HDke)`4M zQ;T<44{pBH+Sb0)Dt-P6>-8^oS&buiTVE{MW39gV8te5V*IBcN-eCQ_{w8bi<89Ve zS^vjMYPi+faric?Z_%CB{ge~n zwc?XEt?C!wvG(2jzO{JIN7mU}J_h~&vevFRX6>o|!s@f^D@$4RjWzlgOav#Z;*Pz;r+xbUfSjp3$v5Of6#s~Cn%PE91=%&g@sj^F6O@0ON_iYQ@ohhN0hvgCF)xH ziTd*XqD&bmjvUAlv(7Wbl_i73-s6MC#lJjFOt@^AIJ|I#hz%Jfn*KIg-2B{Fan0Ub zQF}qY$T_o6JXBO9hV&~D8#~8|hu$p}zd3A)-*%LVUpz2D?7DT5n0CWt@yVX4VoS?3 z!CGd3-YoI#b#p}D_A|tp_skcU9#|;uf8k8=;*lSTBcGowK1y3G{xYUgd_1d4yuYSe zymieo@p8us@xn(n;$ZeFv47@jao>gY;@*cF#l6SYiT(NKiKiMb5J&cJ5)5b7?zuoi zE=bhHRGV%6vYkzuwTc}dp2>dwgQ4t?1;^NuS36kgb$f8uoXD!?e!~v@=`Oaf@<}#s z)nImb<^)#mJ;MASjA8v-e$74{@C_UOK!5h0bsIZYcp;l~U<|wA{cY@_(^lh!@M8Az zRV8fR))IEZXC>^i#oO4hFMq+l$QjT6)Oig{z1G9h#(vC_e{>mJnX{6;v^mQB&ktpj zXYXS-oh#Vr4;HhBhpuIBfA}#Xbaf|$0xI+ zchxZd$V)8x+4bzrI|i_GDz9R`?048j*HyE&jK%EovgNG#l}bJ=qXGugAZ zH?Rxds9-faJD>?xh98|mUyO~O)Mx=TUpx7WQoxG2FKoa|e%8D-`zWefR>p^%Urf*D mg>Oay*?>=16f*mj8#`FwZaRzn`|sZx__qfBt$}~4f&T{hLv{K9 literal 19781 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