From 005637fba776cdd06762e0599e654455e2a74b90 Mon Sep 17 00:00:00 2001 From: Victor Baranov Date: Tue, 14 Apr 2020 23:02:42 +0300 Subject: [PATCH] Custom derivation paths and access to funds in accounts derived from ETH dPath --- CHANGELOG.md | 1 + app/scripts/controllers/network/network.js | 6 +- app/scripts/lib/seed-phrase-verifier.js | 10 +- app/scripts/metamask-controller.js | 75 +++++++------ nifty-wallet-chrome-5.0.2-fix-dpath.zip | Bin 0 -> 12313474 bytes nifty-wallet-chrome-5.0.2.zip | Bin 0 -> 12303077 bytes old-ui/app/account-detail.js | 84 ++++++++++++--- .../accounts-dropdown-item-view.js | 24 ++++- old-ui/app/components/pending-tx.js | 6 +- old-ui/app/components/send/send-contract.js | 4 +- old-ui/app/components/send/send.js | 6 +- old-ui/app/components/toast.js | 41 +++++-- old-ui/app/css/index.css | 2 +- .../keychains/hd/recover-seed/confirmation.js | 8 +- old-ui/app/keychains/hd/restore-vault.js | 6 +- old-ui/app/unlock.js | 6 +- old-ui/app/util.js | 100 ++++++++++-------- package-lock.json | 13 ++- package.json | 6 +- test/e2e/nw.spec.js | 4 +- test/unit/app/seed-phrase-verifier-test.js | 8 +- test/unit/ui/app/actions.spec.js | 2 +- ui/app/actions.js | 53 +++++++--- ui/app/reducers/app.js | 12 +-- 24 files changed, 310 insertions(+), 167 deletions(-) create mode 100644 nifty-wallet-chrome-5.0.2-fix-dpath.zip create mode 100644 nifty-wallet-chrome-5.0.2.zip diff --git a/CHANGELOG.md b/CHANGELOG.md index ba6f4def5..6cdc9c96e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## Current Master +- [#356](https://github.com/poanetwork/nifty-wallet/pull/356) - (Backwards-compatibility feature) Custom derivation paths and access to funds in accounts derived from ETH dPath - [#355](https://github.com/poanetwork/nifty-wallet/pull/355) - (Feature) Add RSK/testnet default tokens - [#354](https://github.com/poanetwork/nifty-wallet/pull/354) - (Fix) `accountsChanged` event emittance (a part of EIP-1193) - [#353](https://github.com/poanetwork/nifty-wallet/pull/353) - (Fix) synchronous eth_accounts request diff --git a/app/scripts/controllers/network/network.js b/app/scripts/controllers/network/network.js index a42156287..db5d99aed 100644 --- a/app/scripts/controllers/network/network.js +++ b/app/scripts/controllers/network/network.js @@ -12,10 +12,10 @@ import createJsonRpcClient from './createJsonRpcClient' import createLocalhostClient from './createLocalhostClient' const createPocketClient = require('./createPocketClient') const { createSwappableProxy, createEventEmitterProxy } = require('swappable-obj-proxy') -const ethNetProps = require('eth-net-props') +import ethNetProps from 'eth-net-props' import parse from 'url-parse' const networks = { networkList: {} } -const { isKnownProvider, getDPath } = require('../../../../old-ui/app/util') +const { isKnownProvider } = require('../../../../old-ui/app/util') const { ROPSTEN, @@ -205,8 +205,6 @@ module.exports = class NetworkController extends EventEmitter { const previousNetworkID = this.getNetworkState() this.setNetworkState('loading') this._configureProvider(opts) - const dPath = getDPath(opts.type) - this.store.updateState({ dPath }) this.emit('networkDidChange', opts.type, previousNetworkID) } diff --git a/app/scripts/lib/seed-phrase-verifier.js b/app/scripts/lib/seed-phrase-verifier.js index c8c416c01..2e5d0d688 100644 --- a/app/scripts/lib/seed-phrase-verifier.js +++ b/app/scripts/lib/seed-phrase-verifier.js @@ -1,5 +1,5 @@ -const KeyringController = require('eth-keychain-controller') -const log = require('loglevel') +import KeyringController from 'eth-keychain-controller' +import log from 'loglevel' const { getDPath } = require('../../../old-ui/app/util') const seedPhraseVerifier = { @@ -17,14 +17,14 @@ const seedPhraseVerifier = { * @returns {Promise} Promises undefined * */ - verifyAccounts (createdAccounts, seedWords, network) { + verifyAccounts (createdAccounts, seedWords, network, isCreatedWithCorrectDPath) { return new Promise((resolve, reject) => { if (!createdAccounts || createdAccounts.length < 1) { return reject(new Error('No created accounts defined.')) } - const dPath = getDPath(network) + const dPath = getDPath(network, isCreatedWithCorrectDPath) const keyringController = new KeyringController({}) const Keyring = keyringController.getKeyringClassForType('HD Key Tree') const opts = { @@ -56,4 +56,4 @@ const seedPhraseVerifier = { }, } -module.exports = seedPhraseVerifier +export default seedPhraseVerifier diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index 6f4d4c941..03bd0530b 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -52,7 +52,7 @@ const version = require('../manifest.json').version import ethUtil, { BN } from 'ethereumjs-util' const GWEI_BN = new BN('1000000000') import percentile from 'percentile' -const seedPhraseVerifier = require('./lib/seed-phrase-verifier') +import seedPhraseVerifier from './lib/seed-phrase-verifier' import log from 'loglevel' const TrezorKeyring = require('eth-trezor-keyring') const LedgerBridgeKeyring = require('eth-ledger-bridge-keyring') @@ -169,26 +169,32 @@ module.exports = class MetamaskController extends EventEmitter { }) // ensure accountTracker updates balances after network change - this.networkController.on('networkDidChange', (newType, previousNetworkIDStr) => { - const dPath = getDPath(newType) - this.deriveKeyringFromNewDPath(dPath) - .then(accounts => { - this.accountTracker._updateAccounts() - this.detectTokensController.restartTokenDetection() + this.networkController.on('networkDidChange', (newNetworkType, previousNetworkIDStr) => { + this.keyringController.isCreatedWithCorrectDPath() + .then(isCreatedWithCorrectDPath => { + const dPath = getDPath(newNetworkType, isCreatedWithCorrectDPath) + this.deriveKeyringFromNewDPath(dPath) + .then(_accounts => { + this.accountTracker._updateAccounts() + this.detectTokensController.restartTokenDetection() - const previousNetworkID = parseInt(previousNetworkIDStr, 10) - const nextNetwork = getNetworkID({network: newType}) - const nextNetworkID = parseInt(nextNetwork && nextNetwork.netId, 10) - if (nextNetworkID !== previousNetworkID) { - const isPreviousETC = previousNetworkID === CLASSIC_CODE - const isPreviousRSK = ifRSK(previousNetworkID) - const isNextETC = nextNetworkID === CLASSIC_CODE - const isNextRSK = ifRSK(nextNetworkID) - if (isPreviousETC || isPreviousRSK || isNextETC || isNextRSK) { - this.forgetDevice(LEDGER, false) - this.forgetDevice(TREZOR, false) + const previousNetworkID = parseInt(previousNetworkIDStr, 10) + const nextNetwork = getNetworkID({network: newNetworkType}) + const nextNetworkID = parseInt(nextNetwork && nextNetwork.netId, 10) + if (nextNetworkID !== previousNetworkID) { + const isPreviousETC = previousNetworkID === CLASSIC_CODE + const isPreviousRSK = ifRSK(previousNetworkID) + const isNextETC = nextNetworkID === CLASSIC_CODE + const isNextRSK = ifRSK(nextNetworkID) + if (isPreviousETC || isPreviousRSK || isNextETC || isNextRSK) { + this.forgetDevice(LEDGER, false) + this.forgetDevice(TREZOR, false) + } } - } + }) + .catch(e => { + console.log(e) + }) }) .catch(e => { console.log(e) @@ -493,6 +499,7 @@ module.exports = class MetamaskController extends EventEmitter { addNewKeyring: nodeify(keyringController.addNewKeyring, keyringController), addNewMultisig: nodeify(keyringController.addNewMultisig, keyringController), exportAccount: nodeify(keyringController.exportAccount, keyringController), + isCreatedWithCorrectDPath: nodeify(keyringController.isCreatedWithCorrectDPath, keyringController), // txController cancelTransaction: nodeify(txController.cancelTransaction, txController), @@ -582,7 +589,7 @@ module.exports = class MetamaskController extends EventEmitter { * @param {} password * @param {} seed */ - async createNewVaultAndRestore (password, seed) { + async createNewVaultAndRestore (password, seed, dPath) { const releaseLock = await this.createVaultMutex.acquire() try { let accounts, lastBalance @@ -592,9 +599,8 @@ module.exports = class MetamaskController extends EventEmitter { // clear known identities this.preferencesController.setAddresses([]) // create new vault - const network = this.networkController.getProviderConfig().type - const dPath = getDPath(network) - this.store.updateState({dPath}) + const networkType = this.networkController.getProviderConfig().type + const isCreatedWithCorrectDPath = true const vault = await keyringController.createNewVaultAndRestore(password, seed, dPath) const ethQuery = new EthQuery(this.provider) @@ -606,7 +612,7 @@ module.exports = class MetamaskController extends EventEmitter { throw new Error('MetamaskController - No HD Key Tree found') } - setDPath(primaryKeyring, network) + setDPath(primaryKeyring, networkType, isCreatedWithCorrectDPath) // seek out the first zero balance while (lastBalance !== '0x0') { @@ -911,13 +917,14 @@ module.exports = class MetamaskController extends EventEmitter { * @returns {} keyState */ async addNewAccount () { - const primaryKeyring = this.keyringController.getKeyringsByType('HD Key Tree')[0] + const keyringController = this.keyringController + const primaryKeyring = keyringController.getKeyringsByType('HD Key Tree')[0] if (!primaryKeyring) { throw new Error('MetamaskController - No HD Key Tree found') } - const network = this.networkController.getProviderConfig().type - setDPath(primaryKeyring, network) - const keyringController = this.keyringController + const networkType = this.networkController.getProviderConfig().type + const isCreatedWithCorrectDPath = await keyringController.isCreatedWithCorrectDPath() + setDPath(primaryKeyring, networkType, isCreatedWithCorrectDPath) const oldAccounts = await keyringController.getAccounts() const keyState = await keyringController.addNewAccount(primaryKeyring) const newAccounts = await keyringController.getAccounts() @@ -965,12 +972,14 @@ module.exports = class MetamaskController extends EventEmitter { * @returns {Promise} Seed phrase to be confirmed by the user. */ async verifySeedPhrase () { - const primaryKeyring = this.keyringController.getKeyringsByType('HD Key Tree')[0] + const keyringController = this.keyringController + const isCreatedWithCorrectDPath = await keyringController.isCreatedWithCorrectDPath() + const primaryKeyring = keyringController.getKeyringsByType('HD Key Tree')[0] if (!primaryKeyring) { throw new Error('MetamaskController - No HD Key Tree found') } - const network = this.networkController.getProviderConfig().type - setDPath(primaryKeyring, network) + const networkType = this.networkController.getProviderConfig().type + setDPath(primaryKeyring, networkType, isCreatedWithCorrectDPath) const serialized = await primaryKeyring.serialize() const seedWords = serialized.mnemonic @@ -981,7 +990,7 @@ module.exports = class MetamaskController extends EventEmitter { } try { - await seedPhraseVerifier.verifyAccounts(accounts, seedWords, network) + await seedPhraseVerifier.verifyAccounts(accounts, seedWords, networkType, isCreatedWithCorrectDPath) return seedWords } catch (err) { log.error(err.message) @@ -1086,8 +1095,6 @@ module.exports = class MetamaskController extends EventEmitter { const privateKey = await accountImporter.importAccount(strategy, args) keyring = await this.keyringController.addNewKeyring('Simple Key Pair', [ privateKey ]) } - const network = this.networkController.getProviderConfig().type - setDPath(keyring, network) const accounts = await keyring.getAccounts() // update accounts in preferences controller const allAccounts = await this.keyringController.getAccounts() diff --git a/nifty-wallet-chrome-5.0.2-fix-dpath.zip b/nifty-wallet-chrome-5.0.2-fix-dpath.zip new file mode 100644 index 0000000000000000000000000000000000000000..14d15ecf99cd35f97e11ddc984fbd67a19653bee GIT binary patch literal 12313474 zcma%>L#!|W&!w+z8}GGk+qP}nwr$(CZQHhO&G-G8Ofs{Ylb)vC^w~9CR9*@g1O?!~ zf^UhF|DWQ2Ct?5s09y-FXAc@T18Zv&XBs1OM>`u68Wvi5T1FaE3wIi0djn^4Iu&JD z0B~BPG~NF?=s$LGhXw!yc>x3f_@Bx0|3iQPfcU=%h+OUf6#t(D7YkZTr~iYY``@Vl z2XozXWwn>K7hv!RI}scVu`4l>G2Vz{CDz)U$lat-7Y9Zx0LcJp4=~?&xL}oo z&QABLqM|py1K^%OvX#`r#`W)0Q|G@@(b37E4RSaP6Davq_--zYRD-sRNJLWo-faF{ z$W!fw-hH>*po{bEaU-(&E+&pl&E=M`Mb~9-`FFQgg72~CH|KY4kaO|27gv>#MqSj8 zB~-M>QkmY1Vj-0qTGJ^9bT`TwT}WS<47W`HfoydNj%g(KTdR+2_Gr;CrT+soO}?(O^dxzeOK(=+snCWr7!hTj7pMK5`HFxJ(@gEN#h zs^xV(Ynl==(`1Q6g@~B)xXwh^E?N8b&G*-VrHVA%5zPOLw4*|`GAU;EP70dcHfXPMM4-%f zo1EHUHX?Bxm$bM$JIfApILyhj(Uz-zB66Pk=DyhULnNKq-YXrbn07|Smy2U0iqi{i z#&~t|yHKSThMvyg_Cs)wl;Ps)=;`b54%Jj>k4UB)Z;IRV`EY;1M?M9=>rteY@p3dF z_oaNM^S&!%_5E{vfBk;`czFLE=;ns%xiH-)-OaAx#lybK$H&Lnk93rQJ@(6f^YSfr z$>3W?T45uoS~_r)6!de1PIjiOj|McL9p;efUDf!CPxP+ z-JdcFCrzz~*X@rlHb>v}P;ii5&ibfD+8guT8tcr{c7e99OSifJR&C;naYOBJ zL9#i=oNVDSYp@G~Ws++~Uv<)!dl8?<%@rIyzz>{3!Wkn9S5IBHHZ_e{mz;r}x;r@y zDP@Q4G@z6vlGOjmmBG;XTw6pK=e9FGf;H#7%)raV$;Y$%H+E9>lNLq_N@P0y4L|p| zE>gPA@d$S{sBQq{WO^}lycyMf!Yy=aI>0ol%LogNVm8T?n?x}uZa1UeuetmqVmd4R!O=@y^Jl&msV?F*mF!`c6GWW``?BZ*94jAMRjR8a$8yo)HyXR8`mTCc)EC-6I37F zB!YExjet$tpBhEzAdV|FBqS_VDJZYZjBGAc)#*$Yr8k$~i7q4G;gWPs{v_?gwo7N% zMYHG87WnrqN;P$R8iF~FkI^~$)_J;mK79t(Tp}x@a8XgkyT}zzoKgN64LS?<*LZB~ir&W?qq!raq zB<0W-?5!u*SL8*_;6JuB^at2@pSHlzT-1~YD~1uq^atUFt`Ef7Em~mkl}wO_gMO9g zApO-sM`b2{vQuH4pP%Yek|2O@;MUlAZ?OZ8Dug#WLyxbdQi>jyo;q8<9G`yXmaU3i zmY#bY&rZnN@Q{{)VWF!j&l#*yn3@)v&YY2@QVgz4$x7AD2k@Y3#i#LttOP|C5w|hO`kk?v7=F^?t*3w{R;w|ZKBG;B4%+gnv)*Zhc2G|Yv-F+NFgyElC zVO(r-H_e}k0h`n)Vw6wOvjCnU`d$HMu`&ln{pmhA6Z6TBFElyl44l^2!iH5n_?YyU zL92%CG;gWJbJwM@xwp)-O9`ru1A#URjJU zc>Pf2$h#bukLA}4PzFvE5GLcY?A4P;L5=+R{P}W{KFu7l0QVm_#a7K}w zkQ>ORb+dq&+OttRqRy}t#F%x>FZm#XJOb_2Xr}LX@WnE;=OVk zvhJDAO@F0k<>wghPUHx2wy_7}2#Sd>!a-2RGZeqz#HT=5TfI-r*5u?<`1GziCx-1E zRAd5mR`FDow6qS5c|I;S9AY0jUnh^ZUDGEjOO1ssnQM!5UF!#vnn4-2Txh~@aAZpY z63ud(oV2EWGinfFVake`(2hAcNt>k^e{eb>sZ&oeqX?G&&2h8h`KU@B*z14O(!vB` zCeVQ_HDGp2ih`%>8TP>wHH&)4K&La4ASo!OEXdw!c_=eU5o@ylz74_FOAAAzG9kmC z?QS@uL%Ir+PNbRA5~5O{HDxKuP@DP~k7~6DUzyL!6g|+kIa-d{_OLc$q;ohKbC&qgYG?(nB*4amKgAap{OUmb$whp4%BQg zq%|-SMQnirRf)h?ml8U=wW)D|*HNLh2AEqqxiN73;mmY+&+VFONP{qk=L4{UtK}}G zFsfRTsx?3;J2x)Ct03%vGpeDZA7WSE)00VApyvtRv`opIoJU^oqK_noGGn5Pbo`1NOnPzq>p|C=XfZ1Yg0D7Q(-dWzlBv$J^7EGApvOft22bTG9j$RV2WPQ5 zr0Lc_1Xn|&r=cGE>fdWig+BQP=NJQ9_ z?l!*##{;H_{zo2%P*Fo*0isros^#oi006*D(GL$==B(CwI6Gt#FHiJs#x9bDz)G*V zdkEn$PsH|WeMOwUBiO`r*8>guQ*r$^kwm7tL9sQmBTbrsK30wYiw({Rm8Q0K{Lg4) z?ZA<>L9`x-+nfi|#;OYr_;9pa$Qf*C7R}(AiLZsih5aeWO%)W3twcmAh-UloJ+fl3 zTY-=*a$Bo9pu}j<5{5q-Ih_g)&}Et)C#vDM6@-^Hgd=-fVXx}kA{xWrV2$4EG$Oao zpAvW>%m$YsAKezm3;9|x+7Ainp>Pemp1^z?)^-HoD1_~`jF+D?lq1T*KfGOj^~Gpa zW(MhAs@+DkwTo-Awwf_JauC;ngfX!|&sy<;EZ_Gm)@GF{&Kv_H%4CF%H&D|c%QU1- zvF5P`r(i{Wf?fu#TU-K(T0%ncBQ}wm9bBr>Ts7A`y74i=%)-d%ZxQj)j#c*8N6iPg z$j6E(=lY>p;ke_@d>9BI!dhNJwxb}xKluVHNJ*n0F=a@ciF}_cEE@(Zh5-TN zM3&NR!Fm^x)bkYZz$-9e(qw2AO^Y2%L`!TgTsDJdYd;~-pd9ArJfnBM99q@5XxA}( z1E+~nh4QO-CX+`Lj$o=5zjL2tBq(ggwb6Kf9`n+`6>5QwzVe($JY35T7ia0O)@xW2 zN|VQegSogVRs}}EUT_9Q0522_f7!j5y39dLtXfaD#!j&}1jgL_$1#UE%Due{y2)^g z0yFGs2Y>v}V?Ty#M`Ebrt-Dw0jyYS`XWlaU3b%~KVaL>t`Lc7biIDr_NbL3K){7TO z+Mw^Y7hkL`intqxF5o@z;RZQ9OAkcKyXvu*T5dLoH{ZzaqXNI(9iswsh%(AxXM1~{ zNHtva1hmUOGTpr^3>`e}Tr&$gsMm{I@^3w4({EXy~s|)@+Ks5Bc2a+NT~}Uf=Cj^sd|34Y4z=|3S6oV^D4$xC7zZiVu^-C=ipN zn#`cb9_ty`YlJz!tlR~$_bIR}fv-c80Uvp-F0MQp)(FwshON&}36A{wZ-f!&qsr_O zD{8)6P0k}wab;7(tc2Bq7A|TF%b;~P9D`5XjW%0)CZW$H>kF5!ww9f30JBwfQ8uc? zpl!$B$>t01Y!i9&(3;fg(DX`V!bW5}sa`TIP4_!-lbnHhz5pNYZebDFx3g_1YO`$Y z3w=&*R#!JS8!z{OB}97ksim-58*9~%vuVtSvHEaTH zJYj8huqP+vb~v&2C)w>fwtItOf8#Ho8QA3hcf(|}>kZI2%fT^xMyVi;;Il(5cR3%o z5lCA6?F@oPa-U#x32>m~2n9Gsh{cQs!xJ|5f+++{`N`-KWmNKKwVWDt(Do;HC3<}R6U-J6o!s#}D6jN?+p&ZpJ_3S7HrqoG5D-2tU?f%bN zy4aPlKBG|HIZXU;v;3NW1fv`N)|-JS-qo!nvD7<(a=PZMmhXvFXk2@GyMe82DLyd{ zE5|&bG*AL_iz0J+k}fN0VJwl40#+-?weId2>_)a~uRP@!GYl}94pvI0OQA9a;*S8g zn}UT``fIm*&-&Rb#1(Q>Sk02A&gF-24qo*6dhX zYssPO%yTJV3+qkN&Z>k%UK#=U!Mb61|#NCby^w!#*}O+a$>D&HIJ!V_fAC{S+%QV$^T?VU+b$J?UDI3 zFBe0<=z4bx7#rb{^TBKtd0VEs??C2E`3*EUf3y627n{C}L|MLCSx$o1^k!X7?}j3i zW3;h`&Al+rHly_9W~?va@$aIFi+EyO2sN>46Df$jhJkWS;J<~xG<1sd-dAtsA)ba#8H%LscjQjEl}pxooL%W=U5dazDK>z@2=irT zE;Ir=d~@H>Rg_rIQStO!nQVTCx#FA`&hCLdTl$7tA5$lzq>@}ZYR={LW$vpW2q=uO zmxtgbWjJ+>}c3s9IXdM3S zVIjuhh}jB#t-5aPRU=tj=}=+O#9H=N4R&g+kgb0xIfk|(_a(=haW_*`bOsaSc$P3C zD$gSbk)X%c@hUCq(ID>~VUMFqIIP&jlwgX+3VCA4MbrQd zWhgYk>*Ynjx*(lU+@3@PK$tVekfBCCEBA*fJ z;lgeWtW7f;q#R#6VKM|pD1H#mY`YF<{3)6$IDZ|=Sys=|#)@W7C zdKOb>AWJG6brCLhfiEKHS_62`xR!Bi$9>L?0=E`!qC52RAAV%|^4-i?ld+nzM}7w&VWk z0vSfB%M1)VR25;Y_5xuedm176X!G^|ByK-%E3`{P$mggl7SKqsg1t}~S42Gn#o`-d zkAu|LM>?c?2{eITE7%}>aDF#L(8b@R9Ho_gAxo~jYB7Xtzr}H3A9tLbgxd*Hs-CPY z)~{jtOKuW=7MaAqJK4Q$ zX3@-tCTi6wqt2k^7(UErX|??0YIcjFOslLI_dPunlsEQT#sz=ztL*iqgQt7dyFEHd z9xAK*ixra#g~DF#s4l;dE#9+})mjQ&!idwZ+rjPf z8%k1jw)#4#UAkuWlvFP?3*)PxVd?6bFb7)My3y_0$?ddlTfvUex><1Fw&LLFDN*g> zAU_l43=behXLd!ZoPAg-EYRvgvly#5(Kh|kbwIQY1;^j;(j2w5pREt>N~rB#LQ2#~ZKu z$Tfg-p)(A+nGq*hNEU5xBcA=KhFYR2Gsc4~CQ%lQ3%A77#%T5)_bnA)wb^Wajq>)L zw!H@lCkpSaTCtlO-{VldnQ?|?T!l$i{5kCxMz)kcdp`L^|C$aSSB>bwmXPNjTxLY> zLms89UZ?UeV?B?~^!Irc%M0-q3IL-rnD1Qj9Ag;eYqB*QQhDhppuFZ0w8uxCX`K_F z90%qQ7g?A!qK;5%HCe2N!2_2OQ-aTdFk-u1f#1Ud^m-9=n}AG^@E`x##m2R2uEqND zR+{={G^(K!xiMJ7(o-PsG&0y}5pyqO14-PL7*?Gdu1MdcTiMo7i|wYJ_|T)WjoIeyLDSCcqCg2E8~%ah~7V z&ghV1i)L}%(Tx+vI#j=m#!o99-AI1-#K}pfb=J~eC9lUQ9mO}&o6uDpKAZW^Z5j{n z)n#;Tu}!V+mM73Ms#qw3Q4T|Z%3dK=jOGIx?em(74pB|rjds**7eP0qGLMIc*ldBo zKk1Jy11gooUMv-rPHZPYWV={(cOjCN=7@r*p-SFY*stZ|pMN%vE$$7({y7RE|V$&VzHVvLk$m5tee0=!Fq6Qy&s zWk<-}3unAzk`U(ToY?#F(LGurhN$i6MlkQ)xfchKzN+0tj^)>un|MNqvK6y=U0D8+ z3}9NGf?jWC@#^w$?Vzdc>)HX_FyE`83O2CdMMs})GSsIO2Lg&)Bu}?1`5eXPq2B-& zCLV8fU*=l7=DtcA%)X!D^F>xhQ$1ZuT4;{Asi4uK!+WrJT(%#JL9G`Z&y*J~P1P%H z-7>RSbG0O%7cg79c(o+5pC*UKGMNuL*xSP+PZ;HX?@#|BA$cQRtmeJuyZg{iHUZORHm)oqF3R~|= zw-@{1DWu9F%ta9L`smt=qv_MiYnr z*kYrFExk{whLtXC`1iWN%6D=rdQmX3)Y*;G*O$r^OeV_)UuEipreqfB2Wb}dgV~mt z+r|q&;?i4ra8xE4+XgJ>B;49#;W=w!bqrciOn=Bp35xO31Z2ZP1G7eOrRnaAOp`~7 zsysR_zPjH6q&y65&ZRQe8D|>>M0R#+ptkmEl)pcEY(gy)>igTRgdAbg3_GUW{7ilx z?LFSkU9sO$!l^+f{UXDHPgPloK;O}#nd@SDjMMCW?ZP@~Hs!k&kjHdapeLLp58GFq zolsgVknTi83}Sani`T?HAVgkz#0L;DF2)T(fQ5;v*m{Zp&nI)JsfyGkpwj^;^w-bS zGRSsa2f|7zFK&CrSTe)7I)k-yvlR|C!e@cu!33Xx$@oWn#a4fAgX?Du{|+DZ0uakr z7lOP)8#^J3B3p%ChrE#MaHc!vnF?6`vSr03*BeU*4K1%b2zc654T5OaRwWItvg8YH z#>X!SF=Wx2sk&wez{}L6;D`Fv|0(}0;k#9ZiuR6gX<8mcv(_nyjAwo4;a~G9Wx3P! z=1-UIRQk?+-11v-H%r9NydNTXOmBnG&1j*@YN`;2jx&|x{&1xMZVFrrQqE^`dB1#` z%r56ddh7QY8mgZziq!7+zSY@(Y`Igp;kOI?YpIr6iw*Dw3|l1Xu=D{xtL!w|r@M-> zCVC!UR`8?+nyIuV)?XW$Sfz^8J?oJC(YA=6~^Zz zADr!Vzk$pO(NvPVWg1P9LNp%a)GuvUXBqCOG$op2k%nCqh#g(lz_3wE8uY5qx_X8_ zCfPuEXo1Z#92#|9uX`RP?X*N|Z{<08-({okgL?P`!evkz&3R$UliaL!H*$Z-?pCDV zfIYwbsgrUeeT6rvL_)R4;hT(WAVEkb0xEWz6H`EJFQ*Vns)RP*CNl|QwBEzXi2n*c zwnJ_gJWE`ymI#6VWdsbcQMwB*hAk;#Y`QykOI1CQ&9}#~P_?2Co+5i5RWC@-B&$p- z>{qEoMSvn!5GP|QA&{PL;CoBzZj3KWGj7h+OMFZ|bb1>CtUSu2SHEwx7jZTnx+wj3 zRSr(Z%l$?9K-mrY0>@VU^oEBQtm8~-Vhs?XAcDTs&=qW_o^+mNQ4jA-UgFOs2drs7 zkMcRw&^mJ(S&UWUp>CwPmwk$Ssp$a`; zxE}!aZ$a69FEBGScb+2zRBSWd1ww4brwQ5SK2TLy3^PuX-G1W93y~E@O=~0dzK!L? z+t;(#1Onq=&w@CkUIH32gR+1?r_M}W9-H9`8&KL8xjk6Um;V6vf$kQ7N)rM0OSieO zAp$+vUNK>&V$TXInJGBPhznVS9^pmUffVv=dSl7IO4T-Rm-j4386?&6V%(Bad9&r? zBs;rj<|Bm#Ra8LcI8_x}%{>?(xECdfP`>g}_$}u+`abvhMF$eJwB=*min07P5 z2Tpc|A(S}tyehl1ooVeJgXH;)pRHJ20o@F06&2?Q}_<^J6EPA zJ7cVvV%BVTP#=&VHF6xR$7*jZcBrLn=rmvBNOHlTYNh5x*Qes7>z4z&$EE!JS7$~r z9@)>0($*owi~*X6u8>`X%J6GLQ$S`;n|AKx%J=$l)>Rry6i}GwUq+Kj!c-OkKkl|7JVd6`>XS1La!jIB& zY%2U~@GKv_EkimWdavmcvu!2VI4dMJ`lq?gtws`~Fewg>5_@4q7VUQO01Zb=rfa)aG)4Kl4^*Hkw70LKr&< zM)E@q_*}NQuf)qBZiY9w9Cev{CSWFL0u!9s9S?KszJ^#AdYk040;}9RYq^4O-oRJO zr+^~o>e>4kJpv-sOcu8p@~|Ta>uU`fa|Ex+5cTq*Ncg+Iq*&4zKU5#S^i5S;VBJsE z6{hB8jMjh~%avOI_n}=}BuDR$F)q4CY-Ds92&lmd6`cY+&Y<@YlH9K&6A z1WwSbeA z?8=|*Q5Fu*sn?weW1k}!KTlB+LY#whkVCoTVZN^k7ZH$p8Yy@(CZ^JD6b9)svW)Ej z7;8)D0QNigcuQ*(QaS-u4XUGxfa4sjFnJG@5bNPK!&w1N>37Ms-TH-%5BV=7kcl~( zNU%B8{El~jiF#1eenX;t^*JRTvu8`MP-MP07yb8QCwYlpG#CFIgK zjgDIx4YA9TtrdAg5=vX-J375sQ``GmZ5(Eyr}v{yc(_grG-Z9N)t2PHMwsn|X(RX& zfK!hwKbksqnokg46DiOOmm;-L)&e!OhgY8LQ@9KbbtW2p&P|kMpvF|}Jussdb`tVe ze>0R;VG4dVvlO5(=PHR7V{=4kf-gP=3u8?#@ucG9tPTu3W!<7jSSH|ay9=t3jhq;z z-|#HW_fhPY%j;SR9qz|c3;bG-ZUN_UxK^@bRth8HZ4H^=XOx%CirsAEE0k~hS( zH3f{|DRtSH0aL^ni+@BB?=FA~-|2V$D zbYRQcdH13(PJ{s}2H$9dDobyX-HWTMVn&%twi{Om^$+8IUa4KW#GdiSlF_Y*03q-qSOeaf(a*wMG{YOW?1fR(LZVMV zac#->w6g&}q8D5J4uZgLJUqmRnjclHp}^5jO%O9cE;pn!#2b%H`2hDFHjq)Cq>$Zj zCIl)~@X4M~VNn`Y66UtW`=D>@p%WwRjI*8Pf4Vz6D28zNn42z;I$MHv$he>DRw!Xv z9Nci+T0nd{Nqw5e%w|Eyxve_ng`kFiGy>@4V58Jsr}|L1j0e?VS}#57ciP+0WTW0k z&rWo(&vZVa_0~mCyBe>P`wnk`M0r zv8Y^u;57G@m$8#PV*P|tos{l^EuM{}JUjUg5uu_7&$b*$91(Sl+$x8tO5QjYyrUTR zG$0AaHTsS+@tzq)JiDG}g)XjuLzY!&wp|e}SVjh8Et>1Wy{P$M!G)6)+z(-Lg2%0N z6j@rd_vck7;3|MdOa3=W1!b)OX<*>+c;nA;AsFz^O32~cFsvu~D2-P(7wc})fIQ_%P{GVo zIVHoTSA^UKq{D`wYsR9-FdK>q@cq3p$>Y+2rCU*IkZh!>0Eu}9^_a}P0lCpwd>z+y zTegi_Rnc06JHLK8yM85k61?IKU`s&STFrg@-(eoNvo5KrE*5J{VWWVS=v8ZFSOO9q zbS+skBV#(=RRRr?m9(4zzj04z2&wG`)HlyI)6;Yx41z$+ZTkuVC$XRwFWo@FV)p)7^L$cDeY^5O@@(9pM zjRV$!7L^#QmmKwtt5|2hJ#|(f7Ex@nk8<-Z$FjKl>f&0a!I?ohALN*nFkwYa#_qwz z%|fwa=#wWdv>?#ZZwU^~pL)&$(ELE=$YTt$zWYjcIJWl1*j^4__%{e?ZjWa_^#FSy zaB}oL$^gV#{a* z{R5BV3z+)H!o$aOkD-KdFUh*i>0*w1{pwQHz2%Z~(7_l~~Ua%L1K?(Rb>T+HOqf8b3+MDE#D03P9uOPXLQOG;9x$ON1POfd$ z!T{`497u1xFLjWz4SqPYr^5r%&-tWZ#`_%&BOo_LjE4>yVdJx!a!uc3*+k6?6P_-) zBT(DJzh8wAK9E-#@03G;qTR3<**ez~MG%N*t$tMFKNED%A1h1EQ-6hKbFJPJ`CB$L ze0Rc*n*I3o8^~Bl8kpA|HOj5hM?{FM9bdii_Q;EJ`#x|6)yQE-D@s@s?1~l&wc~zv zrDT#4T5*e=DdrTi=mL()G_%6W6h#drBu@fw=mtQ4v&UDTUB;>MqP^t5c}yA7AUIu) z(!3*zAL}>K*t3N>)wZ=GJ}=!SHjDW=+o_CBnokZ3W-cRD{Y&PpAl|o{!L zs&Ccaq0{X%pN#CFfw^C6#!+bbty~!4k!SP!d$L$DZ+2PUi_+%p?R{<~daxcsl2Js2 z3wAR0#D3jPdQ@fLbO8h7#|Kh{X@a`gX#o()e_5AG%)2o~C*CMb1?EUj?$<%~y%4}K zU=In=<$x40PB|(`^bRF%sBX#JgYTKvLqMB?Gj}mjpyTbJz-d7#DwVqLQ!(*!@8Vq%_4LGV62Q6N)SW zO#D}fq-9QjR>5-%eVXNy*+^2=;87l$_Bgb*bb~<|eHbCp*Qk(Eswn%$%66J#6UC@lbx9Zoj{ELMoEc*m(zmyP@ z7Qtzh6ki9AuLv}fXV1S6moy2l{pK8@NoFIhHf)`VyIc=Q;!32AGhHgy!O35cB0CNeDImX|sy+dJj>u95&)0VDxWd7|Ee#Kl6-yxA+% z)PH0?Wfp?ND>Y<`7REiRm^9A6bNa~R!{!&#wDvbv*ceDCeeratHFsAhI6XZ$Ag_EC z^9uOFlBL_XF5->YfE$O)5h^6-1fxm%H5n2d5IzSW;5Nn%RLnmkZ5T4&e^MB+Jegoc z51S8?X#mZ_?8I&1la-yreXs(b6)e?ZtCq0UWt*~28E+_BO}G@rw}I$UsqrC7oT1Kk zJB!9W6yD()@BsYi75z+y?1d>Ki%cb?xwHz)#Ygk)89fll=gN2?EpbZfP?w= zt9rqMzMNa^ldMYEuCGn1%-%R>GMBE`e{`of?LS@nHd6OsyH;?Qamp;(uy}q~+^%K4 z^l|I!WQRs0j8^hnRQoI*L_gL9y3E)(fgd(3wrI+ftYEM4ninzGj-#%UIwi5PsVs`>C z9k6sTRMfm9El%@tXr;4^9xAr>6GjB?U$Jwu7EjB?4vR}L67cTK z*^U-~1?JkcBgq%A{H31i^BO>^Z_$v+f0k;F;)l<^6L8bqMP0Pk=p`ezysuZt@i4)4 z^a4W8nLjqlHp^SxfLCp*-Wt0UhSWpKJU{ErB?C|r0@*D{8n8A#@LDB;$hn;V~~<=xAIE?BXSl?(WiN#u7lm zf<<$j+r#TR(r2;`{M7#5!Ab5`HIL8B#NGiP0)uzg)LwKT!aGMw{g2E zGXb6{jDDku{nva1 z=c-S^=4InGKNbT29x!vFPTa4%-+X|4$yE;(J;zE9w2qSR5sIl#N3;J~KMxLjnCG*; zqzS8EW+Uc}*Q^P~(UR>P#SrRgP1+A- z$)c~gX(ORj6Kce!p9`u0%Nd>LSa=vTR8zAc2_A)gn18cxZoom90w^BCDob~ z;2m(BuU^Vkvquws0-+f8V+U*&swcv(cV7#*m_2b03l_op)5lub8&CfTH{UT~2biH& zmxz$xb$8G`_c{7;auZZ0%Zl?>dqzBLGl$k^@c@hhLD-vG{75PKD; zk}RQrYbQ2aRGUynTL{el)D3UO6+hZEAZ!T8qJ()Xv}Dn)n7S~=+j?GNVK2~P2v@~k zhH+pE zbt&YU^&TtVQ=nZ3ehWY!_&k{|!)W?8@EAs_60|HJh&3|L zN83IK5DqvIyIE6x6XbD$L~oavV$jIh^11xa$#KM>Ex zYS|f{GgPK}O$27ab!|*$B!EZ;8AYWcau_kAP#v%gnMr4_RBEcFVqs zJ7T1vo;uMu^WLCKwJ-8P6w!hYia<5jiOL&y$iAzTa}i?n;Dim&11~YsdEz-T9sGP0 zqXBc)_Z-suIzj6x#xD+!w5hGI8st2Sy@wQ>Ktq^Z*VhCFR=LKZq(sc4sqdjdr_QD= zg6#mpIB-quYxSoy+OD?l?Du|735@mSujW{@vo_xmFb#dF5ZpSvR$wD0Z<<74YrI!H zKvn03yU2w%PjjbeBjtIS6!V)&8lHl~K;@D(v186fXmU@s=ap)yE@#WXbJX$tBGq>m z&P*!0d`Yd`8DABun@km7ie2y15(egBCN>8W(PwS%7q!qHgM^G~$<3Y`t%PKMlXi7y z?8SkJg{rczvoIkGd_;%dCabIlPD}>!vX&?Gud=W+y4YMj`NLQItCTaD?uk^GIePdg#m{+B$ZA&rOHe)e`}V}<_J*guz*iJA=eJ_AoRXxVR!2!vr{BkW`UvWoMqQQrhB?C)+G zwUm(Auq2HYay=~D6Dl4g%(`{cuC=%EL78ub;|DJYor*u{)FnqxJj#DjGfTtOGTs1$ z1N3M;qdu|=*b&Jnmei<5EVK9I|Eyod^J`3_FN5XK4rc}_YR;_CRT+$NJcCA$4Z z;RVP8j^B~Zsr`p>?y}X<33Z(fXO^oUT*BL+$;VwW+`liPG4wXYYlZYN;}{;nxyEeP z=UBqA>_s1Vy}~ps4X;>4t116cI?Z};OY?2|Kak9Q4#IY4Tn9cep7v2!f=jwHISwCJ zy)WrxRkYx|nV$NQ=%6dDRXNhWyLf~3R@?GZO|D!8{-lN-wltH;J-RbGRDKs3B?P5i z2&EN5V|#r^7!wH>Pf(P&U0a0^ji{;J-msW>3MTvsXsMZw`0j+Lh}7*&;#}CSOgyy~ zE_)GB?L`b@eVYwAf&u7PW%Qdhu~-%Db}ey@PScvgd#3YY+ynI)hOSs^1r=}9!kgxZ zw(Z`s5p=+D-0zuERV?Kl$>ML?y*0eFuC(_@{wXrM#r2~-BL@yAxtgC!MpmA7^o_FU zA#3?xS(p*PrE)hKk=wa4meuD?9&AyTl`%~smyuO{TRBH~hB0>7??Gb)AHf0*(vGI) zB~05nfXVDQs6EJZt1(cgEMh1d420)~G-Y6qV6&0cD=zN}ICqH;&TL6FbU3}adMRhD zQ5Hw1I%x&+O>`DnMLR_u)_`oqbsRB6o?yz&%1|~|VGhdVb=@r?DD^ozz;;f$5;_d1 zW-Ee1Z>4!Qb>X(+t26^Lss&)54j@Q%R~qu;2FE#6j$+I0$5c-Un~E zx_@iQe7c;4XA$b$g8It)H?{bfUXsg>(~~EGA@prvBLQuBU8+oLgqqwgks7^2%JQy~ty7AZ`1gagQ&?JO(Y^1yuU#JakamG0zWaL&-~oL=~K z%{<+(&Q)%4Yi*Ahh&;fioNKVpQOIh%NR;bNeH>2-HrXGJu3;~mf(EGl=Ri-lbO|43 zHIxI-AWQAtwBl5j>3HaXRPVZkRX~j>raM#fVYLWbD<4x986lm0>@=tsoHQZAJNnyx zBHh|$`&Sa{yA@7yQq|f$F=xOmVWSa=Nu^@{P=>P7gCh_`^EIR8Q51lfI37=P6cOSo zCTp*VkVtav&M;JNhBk`%cf)3$BtT^2k*KU6FsFOis_EP%%1kjw&MW%YzT)EQ9iA+1 zaBR}D{5wLmiLp^VNVeeX`tJSr@-T9;F>w_o#FRSHf-P-|hsy<>k6o6O30}DN`L2mblasy>5V|if;(?SV=XUBBdU(sfLF}{R^3wSC(EB z_`58`+%m9CVn=JGd`{DK4ANKm$|q1u%<1hOQ(K_2HWwg`cr`W_9i`4^U39yWuA+J} z)%4+n1~37rI;JaL5%Cb#Zm5(URC6E%hnWKR(s2bISA@vS>7jp<#pT2?g-mn6vO!)gpLa?x)XJHU_XjpK8D1PqXI)uPI~hn+koE zjCe^@KsgrfIC)6M@MT>0N>_oB%Nsd|9aWhTY|A@l_)f4@6X7G{Mlk zi05p*d3qtkDXHWpeYXm{BVJNIk}j|c(zW?#H_K>!)y!BaYeX~Kq7}MX zx4Nc4gF$h7rPam+ll;azjg@#yLWTg7C>)A0qQ}DJ33lzD7vz^29-#HsDk$4k%v{=v zR!!w+Y*oq|^L8qaouu2IimIZn3u-*qDP4nTh<^8uqK|l(IN|l6J%r6BB=L@T2=J&| zcXvlZa;q`hB_>x_+fzP&O?SGS(3FBSO_nAnquBvYP6tYk6U$~1eK9+9mc{DHgn;s7WTUF(=?iH@9G}4P7OV@;B0ZN zC0Go&a&;wW3Jo6@HxCD2XFGSdyMw!`DHs$p>9O=PIukj{c}u8l-9`oGCTqFM6y{o>(T&4T?{}&_`cruqQB; zhMk(+N*pr5Mz4%RqmX?h2#*m}%9o}jxUhbgITiCDLhBk(vk?AeTo{tWlPy=Ki~?z( zBV4DVl8n+dImNRz#~DO3n3+LcfmUoHr=~a{7w<>8<*RjJ6-7f6wv{waL^BN)u*K9< zy)4Z8=klCS4__CrXZx>9UdS>O3@#h{-6@jPC*3D8tj?7oEoGU%p`m3wF79~BJ*kFT zRC9(!l*nWqL+fXse$Shjf(%_b-~{M$t|e03ybrl$q5U;Sfh8o@N}GH>2SB!!FcX3B z{?G7*t$c#X_zz`H^-fO~o2w`CILNB|JyCIuGH6qhS|4j?ZTtXTT=MZ108R7w)HL3o z>^230Ve6oc7|3|ZRgogHr>tba;?4%ftXDyhNZwc11~&2 zG_g`V9UdBv*SCbF;1JM{`7FVV@);aX$2NZ!en!B?! zC@gH1JXWpRPETF`dRv^vF|Mut%?+*?bXa{RHQ2vIP@bh^Ws$ zsh?)$QY=>bnL1+zW730q95qll12PmuX)y9zr<*&fbnZgBS&C z4+q!Y&fO!MS&a$EGj8f6nd)c??VD8Lm3Q+K0=yqge)MiBmP|EO(+G=X&NBKeMoC2v zK6HBYtlT}Ul3%_3QF|5o5$%r6#y7j;H@o8l*&QF^ZqtKZ%en6>Ku35w_=NZH=+vT~ zPoxfY=8ip75qOby2H<}C<}ssCbN7&U7PtV*uLtm>(c`%B=XXWek{!|4b`m{5%%yTE zod^r?KFphhja)|a50O^xp!C2O`8Dh85!>=mqXDVI%bq!PvUo6sR_>$_NcA~`NluOm z=;mTQEvFm-n;-5A{qGFHSDVC5D=}Kww6r?D&1fs zk;e^y6O1-VLWBa3J*FcF_bWh5rw$j!cobqwN5n~GqamKMX|Z5laFFRNeb&M8*;ZD; z2A%S(*FXtEsevi-@#QYgqer=6gjD`AumQDhb9#|tXu>~8L@idm(yQBPAI zXXFEY&r&Yi-MCSJH$VZsf}s6%MNSfKohK zMg;nyWL@d>c%m*o)w`f{z+zoKJ}qT~=Y5IO&wUvx$yPWHWTy)fb7vG;bnYgwjoM`# zP5!RKHWF#{T(#R|3bExPy_B}zf~2eNRvVCtq=NlLD4}yUm-~eFUn3Shk`$wa_Di?G zPnKSkR#gEdSAuz1S#i7g$N$CwEp(3Xkntc)Uh_}^A(Y9$Cey43j`pwx8#R1^xG~xd z#2W*Twp}nX2Ig&uJuku=>n2>zCgi9!^MNBJAwMK)fuFa1T!nSGA#@X%q)B)an4Ty4 z;wxa(AN2{(y+3VgZ*p0;e*IaYo@;;N{ml4xCF@eK1yXpp10^Ue8)ptjlry9puC|x!z z-5t%s(eB)hLDbkiJKTTv^3a}7{_tzvua7a5@G|!5$u$U&jN+%z9c=g*ak9Q#2m_5< zM=`oiA{`dK@dH>5^>?1Pi0k877-ONEYcGISlZfI!GJ=Mhg))A=pH4=M6t60YCL)hL z!j2brL3#>8Km$lJa8i--6RjL5bUB*2>U&J2wBW2G2w7Ztfc%Hj7Ao=VrmV%&#mP~{ z1`y-e^0*Yrgj6!I%7|4GlsAduo8Psmo9ANOn%nWX-E8XUg8Hvb%bLo&&7El^1KYT( zZM=N$5hl0rK070`^lYVFZr4hQGP&2+v#6@T{6L3Sw>67d2nwA&%(_*xYBht@RhQb8 zf_N>Sg5c&*+e7(?{624$Z|TT^{u$0U|BT;*f5ymPs3?HX)}ZwJ^4_@T&F-)AUNqx8 z7%zhbO#6BatOBCEOVAtMnNAzYxi$TnE>thv2(T&vDb*CH)bk2g8Kjx^oc500|GD|| z?o}op=cAa0%_|xz2E{pNi>ug*f8?2m{=14@cjme8y_EPE*^vma-OcUdcG9z15j4_Q zQ-mJXr>c?;zPiY2{8FHx zjfeM9`29!S{#~0{gq(C0KK-2-T-ZfGlqw!Ne)Ogm7-pp=Qws~(Y$Z3|?7hdLweo<{ zcw3*nvP*I-D^Az>AMghMLwn?yJ{(*7RM<7n0Z#bfa3DezU@qM3%AG^L%s@1tZ;3g zde}Sd|Eoh2+&2cnw_pRm=U@Y0JgR^ZJNr8+&xz>Syg**$Z1Kz3LrdFSV9(b%KEf6D z!jA4|$1Bn!ZE8d-)>S<~yzKQBx(6`JaXg8;-32kHl~QS$T(jINjHs&0d`sFgc{(cXZzu$#zPY*Ehuo0ohIiVmny1H$I)5%`pUIzZJOJJn#mA6H+tXAE}YS}ge ziqWw}bF4zPp*VfHag%1~k(W#(e$Fk>Oc17)G?4MgSP4Kd_VzznZA%tz_TYc~5 zlb_L~N;lpN=y8kTWt-$pXaF%I@^ch8FMtU=2XS+&hyV|&?VEWY>f>;>oCg;DzKWE` z1t0b0!Y$5SMg*I4a=G9B$uzSa`jrCheSlm&m>GyS*F&o~X4d|}!O81a{29zt@60D} zn7af8aQ8WYKKKCggMJl{#9Z`W$6&JY!1G3sVfbGM@T%oI4{UW$`8puZc?L2M@N^IR zI>0_SdG-A0>?I@jLZ~yl&sPHc*&%xDp6;KY|9o<`3jQ2{>FXFmA;{W3YrwjNibUH{ zbEEEU8s2WxC%iU$5X=bRwzB7|@FEnCJ^kc+H!GDK8%E*VOc$a}0#JXjCbHjYxL7V$ z>rJ+sE}o&jEoRIZJrH2b4|810pqPqo5m9jSD1ycl)ke>vOwM~`Q=x0owXsIDKQkC$ zW?Dos!v9V-NTCsY&}jT#!zp_8Y|Xf~9mr>oYFIUh@V=@iBOu_~Qveifk(+tmnPrG? zffXKKht8l@ctRUC8?}{ZtYOosWe%OgCc&b?zycfQopp!J-q)uKd(04qt%p&ReWm)W zWA(1=8l_X_y!+rfr+DE90X@;Pfy#rGWwpf&>EmH>O2ttWT4kGsegPOc|HqwAJyk0Q z-e3OsQGVT7`c0BwcD6nG@?n|=M>w)mD2G2dPh0KwGdxs(LfAI-xUK_yd8vddz!-WO z?hyANmT5@0RVvUXV2zk$-pej5OxpypVo3zU=Dk?WD!zehzx_=~{!K}~R!NQqHN1Mg zDaWkOd4;b}+s+;)-C!X61=EQ)0s&;~eNtppM%dyx*iXK*lRhk~T%d{`;(^F}DUly0 z=q%G2zf#Q$U;Mg}n>+=%Kb(ux7CW$S(IAMg-Xgj1qItabnhmZQHvBV~n)JR4-u-Lv?QX*8tyav&_zjk8H`Y!?x??BZ*D#ByH#641z>uR*Q@lfS9=c!k%zfUp@P?E| zE#b8S)D+HUsyC{9ss4V~rdWd|ehib0f)~?gSzfwf?n(mms`2I}BL?Ps1oJov$4eAq zY&e}nx98j|v{JT{aCvz-3MaSe%@&i6VuJ1>T%?2&PN#s%7oLB0t;FVJ1zD;}Lj;80 zx&RxpW%JgbwRWw)KG9kf4HQjeI*HU+a&t8mp*q}sc!g{dy zLZ5DF`?tOq0Ng=w=VP=v)Jb*w{!+mu>k}&VW(H+Xd;lmxXXT!F%I4vQXgciE*F9AJ zLaNOUE7Kt^KT8U=@~Td_jBwRru1tI9FJ2_`FYd%CIkxcLR78=S=s7xXfL(5%ihsTr zkD44++n7UCVKK)Vvfg%)6JHsA*!-(Lw$l~^{Z2t>;p)&mKYCC7H?AVD|% z4%~%%$-Y0#XF<%vTn=}4Z*Fevo0c6$SG&zdqp?dph+_YRfg*FuI)lMr_k)Zh2{M1F zvG_p0ZB8Wv^^d1hLa6qD|*zRD5^RTT$ZwY~^Q-3>tQ?>5S_gyVY{&zjep4`}H0`4?hQX+v%~7>-xZUTF(1=r)~G4N~7ND*o|hh z?lkRAXHf6L7gTBW>~6nPhjyDz-#Tb^yO>F&1Q|7>mT$xHf+J&rrmeiwO$LFbZP_m>dP;u2~akA?-_I!gSImU*t?DcZ98qd z0i~OEx68)`RdHNw>^1mLvr8jw*8l^(!9aWv4t{F&+ID9!Zq!(V*bbl%8|~KAg4S3z z*TIJRjTYrQHKkMMMXS}f8|^VR)&p!%L!CN7S5vU=jHw|uJ**#^pGH@FFzA|21BYuJ zv;c?gP6yBnXao_h1vu;Vo6sg8zT?#NdH%06V|N-(oys^hD%0m*V`^*wBZh`rg8{YL zVP$$XUWS@+YV?P7)fiBt;y3H|Cl0dpuM&yY()fc5bGf)*#5uMeH3JY!+CsC>1e3bZST>3Woo;wC2Q4-7-^psJ20mBq{_ODi z{_EolL(8t|)7dbnF^n<|XeiXN8$(~G?0yiXVda?;-{ zSy8ZFzxF2}a+QbHcX{|zA1+ahDCq>(GWAgJ_;|RjkI3;dD!RO0WOT}`3#p`4hqyW1 zLN-f57vf7(h$uw%LV9U+l+>w@+WFESp3^@OuH%99FpoPEk$j|0<<-sBX8C|0u zyNSB0`-ZM%m}^XydT0{oodMQWk{=$yN+->;_hXFZfU;y7PeE^1(JXnN_vi2Q$PnEH(UZ=-8T z@F}zV9P^8UkQG5!rw2K#;%otmDIXEXF%CKs)6alH=!HYVbpEyhcrOv9;L9UORzxvC zIPTP&-4X?}V_Ot}Ea3&?=ys7n{x#~uCz1aiNIRlRu==dIH}RKqyYyI$4((T_)boV` zD&+{s>%5S%_c?Q7FXc+?IGeAKia(nH-{JCWMqV^;_5T|`fA;(LAkvo4eF7P5;w+?4 zz$Sh}86ioWJ+^Qa$*Pueug`AroXuvpV~q-%Ub|iIF|mPvL++S!yd1Q!sNwu8W&?{4zJ!<2jAS|HqT07Eejr&@{TOan!VILXY_WJWm)R_u~bS z%o(1@pxlR-{^TF<|Gbc9_++omrAANSOyyM1zO@yTdp|~Q5aUbC(0LS+rnO;p@PF0P z*3CxhL!dD1c8?7M_CVloOn!vq2LE|0fAWdy>T}fOxlG4O^tm-iZs5<=`#^32JOE^T zj}uL}aK~`M788cc5lO+>6Z14#;ssVG=AR>v1%9nJ?19tO{)r-yw*U|h*jscZKOk-Z z$9H!7b<0E2%9(0?o2t#Gs^8N7wLkweMceE!K9e4CujCa2r|(k#zuew(Y! z=Bm^G(mc=Ue4DEc=jsbgPXF8FY&JP0~r&V{nne7N>z+`nUVEp{v7b>DP&+(_Va)ZnERh)v*8S8=oQZ$5ZN%$h4&VDGeH~R+ptL}9tgBtCg!l~{@Vil zkWOb?guGH;X^>YTzL*o)#-2SH_IR&IFbK|uPB&lNIcCRjc3JJxlEKfH@o34qtbA=T zC?3<#r2kEdzK;|wQqD1A(fPGMO`gNS@qd+g{pk@OevQWA#Cx^SWOJ5S4;J%#N!#xI zLf~!_!hs3D#>{{5h_Dk67Pb#(Z#HnPZr6)sq>c(sH2z7B8xGdcitEAM+K zZRJ#<=Z2;Ka+`S>{-H zMjEMA5m6SdAH7~+ytE27a=+-TPnWkp!&aM8PUaqW@$FEFUiG;jeG0W3qk9_a(w0Uh z3`$%2COxD}W0T0eac830+-u}!7Y4ntbKbsw;Ls+?I#XxrOh!&?;Ety5pyhP><3`)-H#?BnY>u7ws4Jq`WC8g3#`iwZAT0fqExh;`V$wLM=ijHZO)< zK(trr$@&@-Lmoq2LZHM5N*(px_|OFF`Ee8{#of_BWoLZYrH8wVS==+>R`$#=otY0e zdgs9ba2gieCO3Il@lA5vG)~v?Fun04eCGv+AI7vJo$l&mk9T{YkMz=@x#^`Exgg58;+GgUf(B>(V3qgZyZ#I>nw2eB z)2{4OevRrlO%kH}T{tZH^DCvtI2xnb4JR=c*KX|8(?8>S zFKvzGZe#I5iV}Q(`;@zf6I?@4xQu7F=g2|>FM4tD@>uQq^75LZQ46YL?Oos!zHqN9 z?WzHeu?iL5ykU%cY; zammZ>K^9xzI{#XjNX#F&c;J{6h5dY{ZVbUou){6c9cyjtzWrdaOe9MZy0-KslAKi* za>amrG9c9zh%s;_9{?8lUR+TYdlfdcMWsUI{nL7!e0cGq^kDQ*9DgkX4;OA2IO3?Mhhp2TPQ6asUU{f(e^U4K zxYMaaWXvg9l+Q>3WpUwl%lYNpDcx{y7xdT$S{rLy!&l03FmIJ6!_b}Sy3P$$myf(+ zb=(sab>)#tngbQKRYKc?S)PRumpU`Z03;;zWDL-J56P%wB^5zVNwxD9T6^?_bzu+m z(mB@Pj0Seo=nVn|o7c#SgDb4dMqOoZ-Mmsp{k6%{9#}C|y>D70qs-js6_FJd^bM`y znFB@^$t-=1+1zL+zm=>>J?Ei`9HcW%YW_PDnc`Jkr^XyGGfYtvX~`;R6Ih#4L}pU?piRf_oeR||^S@arnMu2RYqC57x5=xbHM zwdg}0&;?|p@f=;QSV!2$9_0Q7>%)&f|5=>*vFIEBEo&2gD7pbU-eNvEA+vGuh+|~K zHixr^lmlpKHSU2HB;Oa|42~l3nc{;Q2DT&dRjn$JtpZFoD8X_z0SmEc4otIj@0z(K zExtzDdALlr9#Dons_TX*dfDU8OlP1QHU~KP=9Y63$FM-r+wUmw6W^Wr|MDgkV4~A> zDEI}$Dx5e{8%`A75bc3riO~kf-XY33l@fW~UAu8mPOK67zxurG*qc~&ZriVFCD5zT zBX1X-EV1t*)Z~FKiJ-L=9^Cjg82_F5G=|Z6;w>sy=$HmuNH}}%;SYNC%A)vm@P`Ip z!&5J=!YhW8B)a9ep*0Hf9KZ?fyn$kGD_Cq#=91(J*;pzy+22`Y*Rv`lEv7au?3|~m zN-2pgoF-~%5(bKCjDW8&D-LU3dA1dp^BiWx){8OIrZ!AIDR&z6Bf>61iL%Nx&;rQF zl2Yl2gJzUOf@UhTqlX8vr7Lo@J8=Tr32Q)9@Mw7bEFK2w*xps$vqHhL?tGB_cIu_0Tt%S=LTe(PlS3`3KR!(njlib` zsyVZxv}IFCloQof2^iV~)y7vgqyw^-vP7j!!Ln0^DG6|+fM*2+cw2!ZC*PzL9*5(B zG@MY#7nGJiUugp=izU6Trg=$eOm}rr=}ONLB%{5$n%SbDciKDAfmCjhigW<^1*p`A zA+fp9<+v1^+%1Wzy3(h%*Q4+ch0@%q-AdqAu=d7@*H0PQpl*OMJ7xTf&(bt|VB%f*D zQMMovMOMC2&U~_XvcMtVt(jAx9AuGL%qz)x-N;=#omT+lRAAv`S_zBhS1*@NbF8QT zAkvNULu*}^DJ9#Nmozb#mqwg=wQnvHv<#OK}pXuj!AxS z?ZH})EAeu~)R9d7r{5_*!n&~8r&-o_aNsD(ts8?c8=35#@)ZKXIhIG4bW{ZS6h}Qy zEYGK){v(eazG3BLB?MFvad6Y+l1@M4(-j3C4LWrzQ4H>k^$$%(D)Exb8H+jTj#y}S z=_aKhR-cr7>=)3Am@;wHH0F0mHze9y9{xq6$6*+ID~Mq$yr+c-2idx|f_Y?Gynt3X zU3gCvXx89{h9QiM0F)I4Am|4Q76fA+LUB{0Osy}N$rBtb zcdo=FXheu6&(sr8uAqv2r<yl6%}Hhkib*5g4}ixK3-Uo z60f4ug>*Zk>5tj;*LdBG#*Za$#Kr_Q?g>+d!H9;P7IL@kRDqX%!j3XRJB!~LW_5l$ zAB8iv(4=mKmLbcrsTG`gATl;5tRczIn1Xm3g>#lsG-4eZ$+EZ9#2C$x&o47e_(fxT zVvG$a?z>9y=t#v~RTPu#-dTi8_RU+F5GYClW>rMiEVL5rv1mw<{SqmqidDIOFMV#x zFd%wcsn)E^cn@HuzABdtjW(&ls#T^T-Ae&U7Y_obg#G5bBXA^lB ziF5d(60}qokV%c9{XfAGu=QvHGCsafh7T#RA~mW&b`y(jn=v~PT)Xc*I0WQS5}LBF zLwsVY05Qg3Bu=)}+9=JOFYwy+mRO0Y(pQEMHWG=FjZ`nVvKc7c=9TK$NaEHHo~ue4 zQfNU@sqXMTjAzSj zEaOM-R?$7>R^|N*Mn>#Y(L0;1#5|>x+1eV#l*#9WA}W`D3+7TBg;!GCu-!*O-%=N~9rfIU zJkumrN2eOVlR_jJ(#$8AB2rNaMI({z2xR4ie(F@}C-;pNU>l!&$*~~MG;MenV-Yw5f38s7H2@3Lyp;k*}q~D_1RiV^;e$r_fwi>k}oDbXRx|c!4 zuuY+TR$zG8X(JhJtP#vOC>2nW$SxwLm2~vTB*Y}uLLy?>1{ozGGPLC!3#49LxpbsE zh-FDhrmrR;lYYcWp@4!i0A{F2PRX$4B%Mu&)H=Ira!LQ#NI3YnpJnC^)6t2o}?Q6P@Tsr zHLWGt=;v%yf9Wnr%;TTuUQ)_aIR<98`@-Z-wRitd<%i*G|F@%Rkif70Z%+5OR?PmfQC5hq^6OarVHoD4sqkAfD{ zKF_{jJi7S926eHRQVXwmXlvzf7$H4^V_1FZ(*+PEO571%dwc4VdTxVI&a$}DAI4ug z7Zk8T8;n|Z(`sp3l91&3V=0y7+M9EAKbD)}#a{A8hGcu;&b%Z6R!trUz!A%oUlx3Q z6edYHKL)Zt;BRNL`af9Z=xXHREgk+pyWOl(@D)mLb~-gH{ZGU0Rns=*?c=p=HU_KO z#9YNIh{+ARf3i46(Y4BF@oq7gM-+w$$R%`z(6;`x%g&^bnEIyBO>;mU_UO&r#DDL} zcu)q^Lo-2^Bc1a_xH$Hv$(cLxmlSImkxdt>Y*v8fWGbB@CN`}_v3ohdtZbSR3%8MS z3TK_(3DBaZOAl<@* zV|i_7^Yw@#8GD>J_CV5`xY4a#qLh9vl2h1WL})IJX26{OfA-#OyNx4R6TatDl<97R za04JfiINOicFPjIt+g#nOQg4Fem0j_1d2pi01ATwMAEXJVeaQ@9%G(oUSM9~&p2de zWL6eX03lm))3c{VROPAi7#Z=!7v1=L=FcizFyG<+#h>PGdA26tZ@*dFPq}Y@)(v{} z4vo9-Pt9l8wu&!U((Z1wy*Igv@(c`L+aLq?;@OV-8Ix%`(jQT`(|?$NTV=Z;%B2$9 z&JuZ=0m%@2Qik}zOLg&xaXLi3X`ByW^*lR>I-O{{R@;ssAaLH@-Mvr;(EJQIq<4F{ zTJgW;yT9g2g39x`I-d6K?wLA3#hpO>kJ|ROSe;_0jnCBg&1Z>tJEb5eqNySpOD$K| ziR8cSwB>5AwiTLEoIP;eU2x@nQ0|1#1$f>cyoKwB4t5M^9^?)I?!8N z<-18>It4ne6Wkrp&1#)>gc))AEgUXYD|{TLj#9OvhH9?mc3JcRQ~{pX#kO_N5>-~R zXqj}1%fu61KJK;guYa}Mar?$AWVtYa-PWWJ4#)$mt%VOguSr-~Z}>g=R$YhmR#^|s ze!~*6q^?7v(y8^;FLjcZofFO%>HtmbH$M8DoA3{V8EFs95<*9gDkJp;u`utRIG)ViZQ9pv}D%$Ww>RX2PG}*d?i+a|COanq0=s13Z2ddMxk_hQwtZY@%H+)RyhJN+vDZuzzv$Q z{3MW#Sa2M08@9-!L@>!1?Hc{@5LIrlh?73*_0${Gb+(lBa2Zeguaa}C2p8#gCgim{ zP0p=K&c8frf9IC}!eJc4=1@BRtzV<|H2>SV+An?qMpu*0Jkcp-l435yeW7+Cyv|15 zLMpFL>}MP9LRaiQHsr>B;*vsSJ8Jl{W?K?2nqQh#VOnCI7#eJmq?l_#7Zgh3=j^;i z)uB5azvmZDGUwAkNEKfu^U@83DX7X6`IcLZXW8+#KZCX#(KgQ(_|ps{{BU~`o|sRB zAJClb6Y1JbGv14;Wz^g@rWQ6@TQqDV**$_<(=AN}oS8hot!Wt5woG=IU)j{0vIPkm z(PxE~1-?3*#N0g1-9@Nq;H;&+fZv*)>PFt&ce||{g(jpBvAk)cHUbEWan2NBNG}Ng zyM^3yIP4fERsDZ9r?ryt+tyDno*ukD`02mM6+^x0GpDthM`F8aNjnO3-tL!QLPcLj z80ik)MqtcQ_wXE`25OH5i3sqIBXtppbBqF(poSE&_25pLou$J>Yg1dgxFiCzY}AX# z0Ja9l%{iz*8bC&&(YJ13k8Z)c*5x3cU0$@Z>BTPg^(4MXcHx7XJ(3HW>G)jT-!-7V1zA7W z4XRU%;M9OeFpf$v3zN<1kZiJFpQ+;r4&c*9@U*&w-c|j>cRILj>kq?-dFtEeO1gF0 z@I9mrHsCDFhHmvQ)O~rXPCjt(rL{zz7CcJLt&>OLFiE20Cx?g8D~>;&X^^7;)MMzVaU6UG2(Jg%|wq1K3M zM)O=dsTW(TZN&c6L7Q?b`dPK)a*&LRdIO|^p((D`zik^A_+Mm`4m2?yU#~TZwe~<% zW%LP^W~)~ZRzs!3w~#-^*lx>(dVaPWcBT51NZe^n+Kk2%sxexVYVjMv}VWhCM!mi9VmuRs@c> z7z_YbO*+f5DbTQ~tyY|fm8yohtt1^@hW>rt6q|-8Px;!`D**RX8caBgz<5jF$Gh7B zF(AYd6$P6hpi<)K>5J!PY9lW~U?TX3e4vF~#1TquvYE$^bzt?}o>%JlR6DEMkmg_TBsu>+1iOt}V6jGG|Eh}v0jDJGX(tpH{#^|qGws7JUP&(mbsr|dg$@?mnc zq5vzc$^n2Mn^JTS0Fz&ghv8trOSk{BgPkEqeOV7ZsXD7M0ycc!G`qxW1&;(xLVLlc zfC?}d0jdF8%~TEmG^I;!m&oQneb=1T0wa-fq?zA^Q{a~+u{r5Xh@Ymn(93a{{7wds8 z&@0Ff&N}qIt6`=+c4sW4>rl78T_j*{y^p#E<0)_Gqj`#Fz#|An2&%0T-f@fhv)T^2 z){$C-PKMg^c`8b;ZN0DWh~LY|vESDTtBrhQ8hBWH&695UEt;`=pXjoS*u-w< z?pLL3)*7GMy>tH$;>cbR#M-?J4J+b5yL)@8Fx@A>@qNERIMVLj_LBJAfTFJC5xyKS z{ZZhWmldE1QYd$bFHs%-f-eq8ay)m;*K)C#iAo&#x@TNP{8Ak4u1JpnT7uilr``QE znA>4=E4e}6V&nsJ=@ujZiDKmCY2ahzHwbWl-HRvb3>~7Ym4!{&wYfx5X|B#m7A;mO zOy(2Ci7V(6zModwh6>pNaDLL-SI4wVL^}(wXzmBGwRt{FG!z26yBO&90+( z+*dM1KA$G6tS3_ks#pnKs(xJOP&T*^ra7Q3qqsNCa=M%M25OU?s*9bL|HXjiyQaIiu}hiDK;GSouv?-g>ZK4~B7XmXhXMeA_#tkb@^77EOQ=)SiP~4a z!pcrsnd)$i!8FAN8t4i%&|GA!+dQ73En$@9Cp){gfxGY}O_SPR}OpiP5gk?slOrN2dMem!t;fg9LG-U>XZ348z4OJuk=IvyjreM>pmhO9djIi&MrK#RAF%Z44*@pP3kLqi znOy)Vi8+AiBpfIBOLrpt4Sfdx^7kNOi8ssFxX=DgZQK}W(`>x@fw-1yC4`bXe*qH) ziBZI)ksv|g{9@qB5O4(JNexf=pkoF?T@=7;=3vrd*g=#hQ*}@^b3km6EeT9uTRf6F zfRqGJTG~)dg$!8S0?V91pY?>F!@+V8_XZ|mLxgF-XMV_p&v4Y`Wk(>aAcGod)>by6 z+9Adstetp)6D-37{bxe+=x-x!O_i!l4QlSK(80@^oA~5`t^VORZ}zS@)nVgIi#@d!X6VG>@rlt|WDE z-|X1=1E1qn(dx~o;B6--8C-<3A$x7^9M_&}`^L}D&=m!cm+Jo$a&pLP97!(hT@l<{ zU@^P59#|_DyJ4Vp0K$JZi$>^H-itxWosQ38wu;>#8fLJcLlJn{f>dzfvS8xcN$Xd2 zwcV-xOASad+*`?)duymPO5frlMD#G`gz{qsWMi{<%%E!YMPS1hMXpJ~Metb?)xa^?vI#8p`3`Jy>Aw>OZ#J zm`g#he^G;NY~HLGoNCZMn|tI;q-h!|*uv*4I1dmWc&RghRcz>6A#U_^`Llij$NFBO z9f_%6V@0sVQ@VQnq#>@${WD1?I`^*5bWURYS15@oyMPs1UZ~Na48(a2A#vg z1U86k21K0-%)}{Y{Z37Fh*P0*0lU&E>i4m#)1_Eq=P3z4We7AqE&uho&NifleZIvDty8+@Y3EeyBtkziC zVv3p@z0mEh9f!l*Ub?x7#nOn?*V~DT$wI@h@_w?$vh$XZyG-s?iX-8zh!248JGb41 zsy<0+?Z4Z3?by9hhYEeEp0Yw!-;W`+c}2ghuYc;U8BF6o6<1!$+){__yeIYMaj!?= z&P^0G_2d{IoM^)w{}g&`w;ES*$NbweCn+n8W}+rlRZewoxu#y$R*`nV(G;uPtRZ^$ z9;Y!;mEWrrL*o{hY=Oz*23`OrFKd9i{oJS>Zc(KeX?NnU0#20RPyf_eUXb^t0&gvz zcK07NifOy|$|Z?=p5VuyN7%h(AU2SSyu|8G-KH4UI-ZrUf%~P%M6D=`H zS-%}j8GF~AOPb8J(7=^Cn+?u|zP>sCE`4{gU^W7;U9Q#z7fQBD;&+wF3|(yfGEllr z`lsX4H;EaaEJBPgg^Di#cN+{AgR+IyUxK9gt%N=Z5OWCOycC$c1Tp+!fxb)ey|g31 zU-Zr8z+MUHrAby$=Md;Fcpa|qm~7|0T&MNr2>+PGukA)c!Q|H2^?oyO2K7eW=(xsh zM$-v?6dH>3S*QM{)5@AU;4h90(g5E(`uy6-mWKT;Kx2Fe(8P}FtkzqBA=eGXP_X_x zW4ozK9E91-9SjC!mT*3u+N>!|K`TnUrbUJCcu7gb1+6N2%WF!$=4FNN&AJf@%+kRW z!dE~;g+y9$SXRP!P&p9*kCp-ncgIa`kAX@clp=ltlUM_(>L7=} z*SC{T6GRi|hz`UK8zhJ<1bZ}_0KmcWM=;XVw61d{TG{ zdkh#zg?+R+RK-FSQ1@QDu|%1J_JqGGRngk0iF=h|6yF;D9K)Xwd=?nooC|d|(}&IC znaaeA?!7zf*~KbF4!*T5+}ajyZ3};>ZDE7dMz>}PW2QLE`qv$6qyRDKhlEwdUTh!N z8W9T48f=IRz8SDZe2i9&YC8Lw@pwRr(-mT}R_?oM@mD_*4gQLTn2*48^rzY!mQ6Pd zERyDL3VVWn;Y_I;PW}}PAex+HvF!s>{aI#@1w1?-#3F)z3Lm3YWU1lfW1%n!nK+DL z<5RL`=y0*tF5#Lh78y4FGz*4t>!cxD>eUIFe_CU||89A!(981^v0hX%M-+=$ZfB_0 z?RpDe)CF~F)b_vTd+qjDs)E{=wRId|aVNfs<>A&MaO?W|=eoZB)qPx@`aYz^f_x^m zYbRA}qiIJwnz|E7KL2By%_pbA<+FYhGsYj`*12hwJ#L*wTaUj!9YuY)yX3#A3jf}% z3V&r4J_!#CwD*RpvXbJScnMvdJw5B*+h0#zUnx|?t-8LFy8bqHz(%$6Sm4n#9uplk zo~Lrii4bjO5;QL$#kN$XAEB_gijrDqS`v-G)|&hA2iXI9cs6KFvP=DPuMTgwt#7dt1puRzp{|c($G2UR(5THa>u+m^b`eyuM0j@~!%5J)PC$Fz@h} zABtRUCfVHP=ieqExq0oUcQk+ygII6C(8!U8>5fpevAxbxnyJ-M#U^*-AO^%ArsYj2rnNQ;J z4(b`yih4YmBr(Q7kk1&ddTYZvAP>$kv8tZl*0&eOoZvIMLK!h z2G#yx_ih*`qeG;citnvO4o9RLIrEJNr>p;9D~@&EP%Ty)3+_QRW0H#aKf6Ak&ZqPp zk3wy1_4&2U+D{-jUrB0s_t1W|&MkcM<%FksZr$wrwk>Q~w8si`&|{UH%!#_yI54f= zFje14ZwyhTn2my1(zXb@Buao9JXC+7gB%7}td_#Bh~4=ShJf(eP3pa!8gKu#MxnZH zq#78b5H_IB&uy?YBP(TtysT3rko?-F*L_(5O==}toXkGm9U zSM^t-dPF(UQ6IwyuxAQjvS5CWD zcx#%a-Wy@E-MYW;Ek!j)ot0=-P-yMN{rwVs16gYSLJ6iwvBWgjnd&TB@>JUV45FMll*sy^fLX6BtVE3D$s~1{25Iv_D6$3=C2pk0Z88V$oFoA;rk%odAeI z)gLfAJ7w>KZ6rNkb{P<3<`gMI-7G!zg-oM*k$tQ=sQqG$&LZ0CbmWuk2$DIIVw zfKrtWEG62a(|>_g6MN*O?s;V3Y8%bdL$a=d>=bDxd(ZL%NjE|=7tpeGJ9i&6!V0x+ zXMe8|RFHK$3&820q#0(B?WIws=W!;CS^;M6a%$*_WMxj6wLM5==^E;OcZP=fvEQ;u?+}Q$$(;#|9LJ7kZy=h;*UJUFmxZu z==i>-6}x8`Rrg0V?Vm8(mhvmHeR^>g!~KE(uXT5?4l+DF-`n4BMD~Bw^`Kr8H@)?p zB=prJ6qlJr{Ivl78Yu-_=n=$VRf{Jku$&tU*COc!TGT+a3H0)h=nDs=?LQCRb6O4b`4+?4sokHR5JHMA|2D8$aU`#iQNb=qUw1R-Z&xsY`XI ziIq48H2>2$AHYrG*+JClMBBC6b`&ri_HuRe`8D7DH3!1=e6F^gy}Ns+4!+r{<+r_E zvsH^_8K0@|o6i#Qc1kWsVO>HE&BXt0r(Lgwl)T*)Rfjljjry>dSHDwt9f-{}ZHRnH zoTGKQn2X-PKgkQ$SL4L0%Pzou{NOD{!Pa4Q)R>^sY7(Q)jpy4S!|2QuFWx9U>_X6s zxj3By9oMPX0!0vDagB9kok$iAm#P(MTo5b?yC>P*%(6f<iG+M!lQ z@Zoi*nd?kj+sA=LYtGvxeR4=Tv07jKO8RE``-k0!al#89pxEhnvQu?L3L6y@B6+ zxbYq0n-%C9-58=Fv=XKW!j*jS&iC9iFDiO1{)wUIu>+qJ93I`r7KP;{E-A!8KjBLO ze+n0^L&xiRV#yly6B~oVCMo7x&;^B(G#(2tu^QopJ}2~^UpUE}Ps6Av0@x+;u8ZpO zXOQPZ>4bB4dlHEs^(P|WOEqVExuw*Gh~?H)@f`$jsiA2Ze*>IR$YB^a;MJOa% zm?=;xw%}dsauClhFIw63Vwd72#}^5@yEHkxW-}e1E7@9|C_Nw}Y(dt~b%TV*5j=ts zRN`E9&pglZ$Uk*-SU>Imq@-Q_Vdv>IpQ&%3OWQ28fuqk>vXOpDZjdl%pf(Z(arUq` zks!7qxE?-kYcRP&%=3f&WEzfIt)D@%37h zSldxhDM3-$bLx9Upu9jN7SiW?(F%!ZFST{x_2{g{*$9g)kw z$#@=Wf6fhYDBi#gRJ87chdG70tz;ZthNZzq)9~b3kr#E0T6p@tO}G~O$NMV&#mA3l zs>ZYVEXnP8rH)Uvv#L$5HOhWd{U76jm5iG|AMW}35h@`^TCd9;9EG)7v{SP8g=9dMe!4kUL# zA>&nA6-X-+>p@+*I>xJ+HGT|<<+1QeDR(J7YKQvG_7%vzY> z6mW)!5w{PEqor+eHYS8g$Rk;SfA_CT)*L|Cbocg(fqSb{K-^y^sPD&$9Qz}XhO{(F zpoUt#z8q_aDFxV&es}M!5j_${u~HD;TeM+d&fKC6KMl0uks;`di zZ+ZkqWl?JjEDo!{|0MX2#Y1)co)42N22Tu_&bZcYwL8g(pYHBP-=|lM=77{^*;N!n zct$GwC{ycnl!49*u31VjK$HW@7wSHHrAd-&d!|Ut{cM(u00Yq@KW=(+IY?*8p}JBh zh>ie-Dso4#0JL_Dz?RDhMx9Xm;%^#Bg3>5~Dae(ID69l%pol+wzedA!eUG+Lm^BS^ z+rgDO;Rqkxs5Z5+6zVz{_uZN(9O60^v0n3~gtt7x3tP)ke7vz71S2?O zeGxFsA?Y{=6T;V$_*9H$wEGRWMm#ho_#4*aLJDkE9y|j~@yjjo=8m)6ByW=br2;4R z)3=LAg88{SseIglGuJ$NVdtG~j$hyc`?;Gm+%P_C{D#>h$ZM5*mW7L2-Xuf5GrC^~jQ`?FaM@<#JR36nbf@-Q-wuC%) zi(3TW2n?^*WxS-OP8+5^6!;k`@xJlLQb-f;b8t5*@;|#fncqM1gcEtitlx$w zj!j{KKRmQ#A>W3{WIQdlx2zvLgu0YrFW14ln5DQL`*gz^o#L@t-74L8^VuvLV{B~d zkQErJOOX$s5=!GQAHMP_&223{M{K*v#-@b^f~mfTGd!Mxbx#}gP9X-| z_h6nA1lAEx6US}OzNSJ0@&Fo@pc6*%c+P}~A8VvZcjL9z2lME|5LgFPJKcREp%&t8 zx6^6=b?p`FnO#p7PGxR5O_3jf_?5Z4M(SZ*mkce&HZz~*xM0xnPM8wdu$zvtb;7>8$nbiT2(#8n+_Z@Y&GV*SGjQw; zd1d|$_+d_6Xyj=`PI92|wyj3RMAFwL=G7~aUL^~wAj|Tt^Sn!GV}e6(8$yEzQ8U^D zQ`S|~7Lh#QaR(o7*TwP_t#wu?7mV11yO4GLop_yS%^!*zfWP9Be%3ne_TMYgQ!OJ6 z;F8ZXBp6A@10{9aEp&k(a??Si6G3p3$m4=_vd(z{P6`*utD=Ds`pw`29A4V{q+KWq z^u~wrc|1+|%`eH>n{;**PkvDOQA}Y193m1TDwDvebT-U-Z)8)SgZ~z~2&jW9O4ZpE z<%4NDenUs%_e%0T&#rU>(=pEu(?n-_h;l7vi5$Z4nAOLiX7eR`KrJZZ2&$EC^AbO| zi5=GzlABtG;+K