From fe3f421271173e79c10d2c2d90f3fb74e2bbce2a Mon Sep 17 00:00:00 2001 From: yanguoyu <841185308@qq.com> Date: Tue, 23 Jul 2024 20:22:04 +0800 Subject: [PATCH] feat: Support transfer raw transaction to a format for Neuron offline sign --- packages/neuron/package.json | 1 + packages/neuron/public/locales/en/common.json | 3 +- packages/neuron/public/locales/en/tools.json | 13 + packages/neuron/public/locales/zh/common.json | 3 +- packages/neuron/public/locales/zh/tools.json | 13 + packages/neuron/src/components/Page/index.tsx | 1 + packages/neuron/src/pages/tools/download.svg | 4 + packages/neuron/src/pages/tools/file.svg | 7 + .../neuron/src/pages/tools/index.module.scss | 124 +++++ .../neuron/src/pages/tools/index.page.tsx | 177 +++++++ .../neuron/src/pages/tools/neuron-logo.png | Bin 0 -> 16062 bytes packages/neuron/src/pages/tools/refresh.svg | 4 + packages/neuron/src/pages/tools/tools.png | Bin 0 -> 68754 bytes packages/neuron/src/pages/tools/upload.svg | 4 + .../neuron/src/utils/export-tx-to-sign.ts | 108 ++++ yarn.lock | 470 +++++++++++++++++- 16 files changed, 929 insertions(+), 3 deletions(-) create mode 100644 packages/neuron/public/locales/en/tools.json create mode 100644 packages/neuron/public/locales/zh/tools.json create mode 100644 packages/neuron/src/pages/tools/download.svg create mode 100644 packages/neuron/src/pages/tools/file.svg create mode 100644 packages/neuron/src/pages/tools/index.module.scss create mode 100644 packages/neuron/src/pages/tools/index.page.tsx create mode 100644 packages/neuron/src/pages/tools/neuron-logo.png create mode 100644 packages/neuron/src/pages/tools/refresh.svg create mode 100644 packages/neuron/src/pages/tools/tools.png create mode 100644 packages/neuron/src/pages/tools/upload.svg create mode 100644 packages/neuron/src/utils/export-tx-to-sign.ts diff --git a/packages/neuron/package.json b/packages/neuron/package.json index 96bb891..4857dda 100644 --- a/packages/neuron/package.json +++ b/packages/neuron/package.json @@ -10,6 +10,7 @@ "update:locales": "i18next" }, "dependencies": { + "@ckb-lumos/lumos": "0.23.0", "@docsearch/css": "3", "@docsearch/react": "3", "@magickbase-website/shared": "workspace:^", diff --git a/packages/neuron/public/locales/en/common.json b/packages/neuron/public/locales/en/common.json index d03ea5f..f3238ed 100644 --- a/packages/neuron/public/locales/en/common.json +++ b/packages/neuron/public/locales/en/common.json @@ -33,5 +33,6 @@ "Status": "Status", "Sync": "Sync", "Transaction": "Transaction", - "Usage Tutorial": "Usage Tutorial" + "Usage Tutorial": "Usage Tutorial", + "Tools": "Tools" } diff --git a/packages/neuron/public/locales/en/tools.json b/packages/neuron/public/locales/en/tools.json new file mode 100644 index 0000000..b9e14ea --- /dev/null +++ b/packages/neuron/public/locales/en/tools.json @@ -0,0 +1,13 @@ +{ + "Tools": "Tools", + "Raw_Transaction_Conversion": "Raw Transaction Conversion", + "Raw_Transaction_Conversion_Tip": "Since Neuron may run offline, the raw transaction requires extra information to meet Neuron signature requirements. This tool will help you process raw transactions into transactions that Neuron can sign.", + "Click_Or_Drag_To_Upload": "Please click or drag in to upload the raw transaction JSON file", + "Mainnet": "Mainnet", + "Testnet": "Testnet", + "Process": "Process", + "Processing": "Processing", + "Transaction_Complete": "Transaction complete", + "Download": "Download", + "Incorrect_JSON": "JSON format is incorrect, Please check the upload file" +} diff --git a/packages/neuron/public/locales/zh/common.json b/packages/neuron/public/locales/zh/common.json index ca65207..440755e 100644 --- a/packages/neuron/public/locales/zh/common.json +++ b/packages/neuron/public/locales/zh/common.json @@ -33,5 +33,6 @@ "Status": "状态", "Sync": "同步", "Transaction": "交易", - "Usage Tutorial": "使用教程" + "Usage Tutorial": "使用教程", + "Tools": "工具" } diff --git a/packages/neuron/public/locales/zh/tools.json b/packages/neuron/public/locales/zh/tools.json new file mode 100644 index 0000000..3ce2c2c --- /dev/null +++ b/packages/neuron/public/locales/zh/tools.json @@ -0,0 +1,13 @@ +{ + "Tools": "工具", + "Raw_Transaction_Conversion": "原始交易转换", + "Raw_Transaction_Conversion_Tip": "由于 Neuron 可能离线运行,原始交易需要额外信息以满足 Neuron 签名要求。此工具将帮助您将原始交易处理为 Neuron 可以签名的交易。", + "Click_Or_Drag_To_Upload": "请点击或拖动以上传原始交易 JSON 文件", + "Mainnet": "主网", + "Testnet": "测试网", + "Process": "转换", + "Processing": "处理中", + "Transaction_Complete": "转换完成", + "Download": "下载", + "Incorrect_JSON": "JSON 格式不正确,请检查上传的文件" +} diff --git a/packages/neuron/src/components/Page/index.tsx b/packages/neuron/src/components/Page/index.tsx index cfe1b55..38aa7bf 100644 --- a/packages/neuron/src/components/Page/index.tsx +++ b/packages/neuron/src/components/Page/index.tsx @@ -35,6 +35,7 @@ export const Page = forwardRef(function Page(props, r { name: t('Changelog'), link: '/changelog' }, { name: t('Help Center'), link: '/help-center' }, { name: t('Download Neuron'), link: '/download' }, + { name: t('Tools'), link: '/tools' }, ], [t], ) diff --git a/packages/neuron/src/pages/tools/download.svg b/packages/neuron/src/pages/tools/download.svg new file mode 100644 index 0000000..7ffa8c8 --- /dev/null +++ b/packages/neuron/src/pages/tools/download.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/neuron/src/pages/tools/file.svg b/packages/neuron/src/pages/tools/file.svg new file mode 100644 index 0000000..679d230 --- /dev/null +++ b/packages/neuron/src/pages/tools/file.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/packages/neuron/src/pages/tools/index.module.scss b/packages/neuron/src/pages/tools/index.module.scss new file mode 100644 index 0000000..6297158 --- /dev/null +++ b/packages/neuron/src/pages/tools/index.module.scss @@ -0,0 +1,124 @@ +.page { + width: 100%; + + .head { + display: flex; + justify-content: space-between; + margin-top: 42px; + color: #f5f5f5; + font-weight: 700; + font-size: 40px; + + .logo { + display: flex; + gap: 12px; + align-items: flex-end; + margin-top: 22px; + margin-bottom: 24px; + color: #f5f5f5; + font-weight: 600; + font-size: 26px; + } + } + + .body { + display: flex; + flex-direction: column; + gap: 16px; + align-items: flex-start; + justify-content: center; + margin-bottom: 144px; + padding: 24px; + background: linear-gradient(180deg, rgb(54 54 54 / 40%) 0%, rgb(29 29 29 / 20%) 100%); + border: 1px solid rgb(255 255 255 / 20%); + border-radius: 24px; + backdrop-filter: blur(40px); + + .upload { + display: flex; + flex-direction: column; + align-items: center; + align-self: stretch; + justify-content: center; + height: 136px; + padding: 16px; + border: 1px solid rgb(255 255 255 / 20%); + border-radius: 8px; + + input { + height: 0; + visibility: hidden; + } + + .file { + display: flex; + gap: 8px; + align-items: center; + justify-content: center; + } + } + + .node { + display: flex; + gap: 54px; + align-items: center; + margin: 8px 0; + + & > label { + display: inline-flex; + align-items: center; + margin-right: 54px; + } + + input { + position: relative; + width: 16px; + height: 16px; + margin: 0; + margin-right: 8px; + appearance: none; + + &::before { + display: inline-block; + width: 14px; + height: 14px; + border: 1px solid #ccc; + border-radius: 14px; + content: ' '; + } + + &:checked { + &::before { + border-color: var(--btnBackground); + } + + &::after { + position: absolute; + top: 4px; + left: 4px; + width: 8px; + height: 8px; + background-color: var(--btnBackground); + border-radius: 8px; + content: ' '; + } + } + } + } + + .err { + color: #f62a2a; + font-weight: 400; + } + + .success { + color: var(--btnBackground); + font-weight: 400; + } + + .process { + width: 144px; + margin: 8px 0; + } + } +} diff --git a/packages/neuron/src/pages/tools/index.page.tsx b/packages/neuron/src/pages/tools/index.page.tsx new file mode 100644 index 0000000..18df81b --- /dev/null +++ b/packages/neuron/src/pages/tools/index.page.tsx @@ -0,0 +1,177 @@ +import { GetStaticProps, type NextPage } from 'next' +import { useTranslation } from 'next-i18next' +import Image from 'next/image' +import { serverSideTranslations } from 'next-i18next/serverSideTranslations' +import { ChangeEventHandler, DragEventHandler, useCallback, useState } from 'react' +import ImgNeuronLogo from './neuron-logo.png' +import ToolsIcon from './tools.png' +import UploadSvg from './upload.svg' +import FileSvg from './file.svg' +import RefreshSvg from './refresh.svg' +import DownloadSvg from './download.svg' +import { Page } from '../../components/Page' +import styles from './index.module.scss' +import { Button } from '../../components/Button' +import exportTxToSign, { JSONFormatError } from '../../utils/export-tx-to-sign' + +interface PageProps {} + +const Download: NextPage = () => { + const { t } = useTranslation('tools') + const [selectedNodeType, setSelectedNodeType] = useState('mainnet') + const [isProcess, setIsProcess] = useState(false) + const [processFile, setProcessFile] = useState() + const [processedJSON, setProcessedJSON] = useState() + const [err, setErr] = useState() + const onDrag: DragEventHandler = useCallback( + e => { + e.preventDefault() + let file: File | null | undefined + if (e.dataTransfer.items) { + const firstJsonFile = [...e.dataTransfer.items].find(item => { + if (item.kind === 'file') { + const file = item.getAsFile() + return file?.type === 'application/json' + } + }) + file = firstJsonFile?.getAsFile() + } else if (e.dataTransfer.files) { + file = [...e.dataTransfer.files].find(file => { + return file?.type === 'application/json' + }) + } + if (file) { + setProcessFile(file) + setProcessedJSON(undefined) + setErr(undefined) + } + }, + [setProcessFile], + ) + const onChooseFile: ChangeEventHandler = useCallback(e => { + const chooseFile = e.target.files?.item(0) + if (chooseFile) { + setProcessFile(chooseFile) + } + }, []) + const onSelectNodeType: ChangeEventHandler = useCallback(e => { + if (e.target.checked) { + setSelectedNodeType(e.target.value) + setProcessedJSON(undefined) + setErr(undefined) + } + }, []) + const onProcessFile = useCallback(() => { + if (processFile) { + setErr(undefined) + setIsProcess(true) + processFile + .text() + .then(res => + exportTxToSign({ + tx: JSON.parse(res), + nodeType: selectedNodeType, + }), + ) + .then(res => { + setProcessedJSON(res) + }) + .catch((err: Error) => { + if (err instanceof JSONFormatError) { + setErr(t('Incorrect_JSON')!) + } else { + setErr(err.toString()) + } + }) + .finally(() => { + setIsProcess(false) + }) + } + return undefined + }, [processFile, selectedNodeType, t]) + const onDownload = useCallback(() => { + if (!processedJSON || !processFile) return + const blob = new Blob([JSON.stringify(processedJSON, undefined, 2)]) + const filename = `${processFile.name.split('.')[0]}_new.json` + const url = window.URL.createObjectURL(blob) + const link = document.createElement('a') + link.style.display = 'none' + link.href = url + link.setAttribute('download', filename) + document.body.appendChild(link) + link.click() + URL.revokeObjectURL(url) + document.body.removeChild(link) + }, [processFile, processedJSON]) + return ( + +
+
+
+ Neuron Logo + Neuron +
+
{t('Tools')}
+
+ Tools +
+
+
{t('Raw_Transaction_Conversion')}
+
{t('Raw_Transaction_Conversion_Tip')}
+ +
+ + +
+ {err ?
{err}
: undefined} + {processedJSON ?
{t('Transaction_Complete')}
: null} + +
+
+ ) +} + +export const getStaticProps: GetStaticProps = async ({ locale = 'en' }) => { + const lng = await serverSideTranslations(locale, ['common', 'tools']) + + const props: PageProps = { + ...lng, + } + + return { props } +} + +export default Download diff --git a/packages/neuron/src/pages/tools/neuron-logo.png b/packages/neuron/src/pages/tools/neuron-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..10a3d09c0ce836fc42c85da3d44d31ff0b9cf41a GIT binary patch literal 16062 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 + + + diff --git a/packages/neuron/src/pages/tools/tools.png b/packages/neuron/src/pages/tools/tools.png new file mode 100644 index 0000000000000000000000000000000000000000..166711e54ade136c8f40052c461fed1a2ed4c542 GIT binary patch literal 68754 zcmeFY`9IX({{}3IlC8+TEBjI+>sXV$kwo@TA=$@1ObC@2yO4d)zB7!mX3ZM1%#1a= zVHkrkGk5RL_x>a9AMPK{>pWiPm*?Z0=Q-DPo$L8HpG}_X($jL%QczIP>+3x>rJ%Ty z@L#)5{cq$0;?d~8?uM71r7r~q>%ITl6@AmYhyMnz_?qf!QB;p{Z~yzb>a1z3NkLHu zy?Na^}tb4BK24Vzz& z)W6YByO)i}@57(WWxB;bAUln=L0_M%b_!JqggRs3vo^;M{(d7LeS_-AO&dM@_5XkV zzpw_NnNO}I8E+R9PGECzkKO0G(1WFpm)w7Ef&!&RB5$rZ84)$DBx_1N{Eid$ywH90dbEutr)?^=&^fq%_cCu3AUx#HvoE@|WG=GkN zAAt0>JibxV?{^m*DiadZ%xbM$l%Cv}*Q*8k9^97mG2VBMhf|G_d8B*gVnraAs+S)i ztYzKX6h9y!v99ZJCPhWB&bO<7u=@$saGO+IwQ+&O5aZB+pZ{ex6bVr z#vFTh`+zcp*V+$zlw2UC!ZV-(9?oqk%{B)$ctwF1q8jAe=u}Tkp*#v-@r?~SVR{|= zlcp{bZzr2qrT*!QF&9-;q^^tWRp$wk=5sX` zK1hn50U9Rt2dbdfwS$j(+@W zGODixy9Mm-hGDwmRN8e}8hNfpjEx;y$0(``QaA{f8hh#cVPFH}{N| zc<4u!$3PnaWf%;4U3&y%h$cOAm|ur@Oc^6Sez+cOkeNmP9NSe#tlIU#?>FEW<|| zp?YW43Xrv%u9I+Z#aa#T^1%kxDBL7it&fL?XH_kRdM)TW^W^CV$UroK=BIO#Y^@}} ziU|Ytfxy+Gp{rp=Y2Yhw{vNuzzRz=EQ2v==JajMFryYQ$ycGaU6LCq7KknDutikgpl@ zVIDxl&Ow7$O91m-7|D^UryeL&PnsunVF?)GhJB8<)kA<#=AA(!i@1YJA@Xdx%s2Av zhko=AyQ@~~Lv9p#(m51%5?{J0Rk;st&Dc@(w^0dXX)n{w+Pp&3rx^S4Om!?AvQpr5 z5IPBL>2*w7w6{v#iV~Z**oNHm3yQV$;$r?-(z?+f3-xYd_TEqPh2T3b14^7V8YnZi zzf4Kx!A2MO z@KBy7zu11+s;ll+Dfh5;&+p&Dj=Udfz#*Ku;kC(E86)rWZNB(ae5*2DqgQ}??w(pb zF{eb2`rcFxc|JpjjQO=vnUNF!_L}T;YSBTpLKreP=?&f~*2CMWc9;3kZ-;~K)2!5! z;=0;#P~4T#wO*rJ7(q!6o^v)uWL)9l3CrafpiO<8_F%-3&)ikv{<)ybtlUcVu#zxsoe<9d4 zCO44ie~&y&GqAa`p;Z3cI8;iNYx-$NLEL(W^i0<29~0ADs(|c3&%3s}h}~t6fN`%C zNZ~&u)o7rRoqkh#6d3>9I)*gnSa-(Q?orn#YWj?m86?FzGPL&cJ^gT`)cfMDMUlt6 zYq-bF1%q8n*0^bCo@na_<>*h6@9)twUb&;!c$TkGPFtE+)Yp;$X5H&lrN7p1f)w(} zdHFDI8l@_>tEwya$PaD@0WTl(5f3p-#}vQho=39&W7hO^))@Pfda{QJFC@r>S|9b@ zI9v0*84J=;b7aHEM9})i=uh=)7n4>8ghtQs3!HeUeH>zLw=qI*mUyUS!>4{M51+$7 zzi7mCS8t%b;4zy&^*0{W)OGktTby`yq~p#0Py_TA;>uQDEL)V`U7jxapwVs>?6IzC z_9#y`Zgf3Wcd*d({&|iI?pQENfXu92$N=An^E~Sh!N3C|CFG`$Gu|@3E*UY9f%Ik} zJWY7jABjd%P2XY28yuQu|NA()c1AXcUrZSNhKadG_3=;OwFA_nfzS47uUG2QEb3 z;eTlRDEQnBefiVjfG|L_;S~t$IdCdsDd9}fO-~sR91nOsE+ht3lYshRRe!fLJr{K} z=p#J}x-zpPc^09;)p$*TLP2^L$)4#L0TBL8?eqOax2E9QWfrYtneJ$0&%>;g&#BME z0f(oxl{&m3ThGZN|1y#n{~sAnESsK?r z)2)~}Y{>~TH0QoEzYgNRI(j)&^?^~?FMZ?}EU-WNi!{%@ByIab-Bhi&Fg77_ z)xDTK?4(cxL8(aEv(UM5XzkCs`J3^lKE1P#Av>oE@NNG8;s@QCHA;`NJ6%w?jOk4o za2vpcQmaK1ufu-4v(oxur)!{Ul!zbdeF^1<&7R*J8lQe!p{lINRSCX%Y;xn+2;Kkd z`E?x;4Vw&CLBx`NuB2b>Xw`cC$Ogx;8Wvan`5Mb+lF==Gd2Y`%x!aBQl zfp^6~Bfjgv=(IDsCTX*7Y*<_5j{H z|ABsbirwYK9D1s1d-2t73swJ-^;~Mg*QDSpuAeJ|d8g(C%3`Bjr2odP6ZE}L-c$=* z8@+JVNuQybf^{4j9KXDc*JQb4Y*aRXKMEAO61Q%gP}m||Snw@np!MAIvWDv+duM}m zNOLc5xq0nl;JA?4tfko78B#?10nCkn3c(TAtNWBE4DFeyR}c94@o;jjQL7 zcVgw3h7lzT4*T*pQ*8RbbTr<*r0-Q%DSVS#Tb66IAa-5ok)_82{H?Ovfxw&(9(xaA zFC}w(aM6BM4&_ZAoTCN?=`@SgAU3TYy5WtSpkHgdm&)^8nT-lIcJ$W{7#K11E#r(^ zp}`Y6rO~HqvPBTnmpSa2Cx?fl$y7bLb|>I4c;55Kxx=ef>CSl83X$_;Xm;?)r0#f; zZ0E5Gn@k`Y?#Z2VzN^ja=`eluFNJ0C>{>xY7_CFxv4B?WP`ja(1FhTSL;79!Zx#lj zZ$sQ&+}d8+0RL^T8!rC@psg(IT)swWRMK7{j4!pPF-b3i@_N3+wZW?=yC*hpZY?%w zNO^s=e`Bf#%ajm{^XAjHlg<+P0;K2d>g|ovjp3gxzp^*3KLBLN_|8chW7y|lxuX6+ zG-uk{Pz|xLJC0jKvPIVe8OL)it1ayR%p(EBE-FUwb_@gQ1X!c4eR9eMnXw2RK%p*V zaJwXRo}GZu*IKUVKfG|JG^aRUBilK1PN|&c4i%GPgbIMyiG!wKnRUXBBPMR&G)EN1#baz?~poz^lz ze&KI3|KEJ>xE!tCXrnzmk;^Ho@TGgtJeAy%|4?X}_v?D-R-cFEM>7e!V)6AP|3sr< zCr?kXjzpFD+5s+1z7LC@uUV(zBmRM7^j*;xS75AL%$T6@b`RL`3-qI_g<(N1o401T zJvvodtj8-iyRU7>d_MIil>=o~1;srbM?nwldV*;PN`DutLNZ;2^Ug(+Go(4_dHa6B z9stRPr*$fY;*gevR1(NATe6J`K%o%(_tm+ayM_(az)7_#AXUp8NaxE7360$VW@1}^ zZY458mRr(C$)S!=F>{8C=Z8&=Yhs_K#T&qTh8y6=5u_Rro^ z#d#b3CX_T1CH*E_;d+*}Gk0ygi-)!AR}-4XLR1ZIlE%iv<^nG70%*3T@hHMsR~cFQ z=n4B@jX#0+qZ+U_NqV@kr0?JYS)!T5&i64II5lp@&-c2Uu83>WDK!)EI5!kcfJCA2YQfbL=QD}_&X+QwJ#ro&^Q^mo zP53*Yz2o84pfSZD%5h!i#Jy4zB_7k)aGQhJ7w;bK^Znm!=$V=TRj7Q~^zJaVk3QE8 zMW#wOPYi@9lw70gKMiB2y^~+vu#7wAE5x3Ss}WWhFKGb-TStU2e0ewejLi17j!-*8 zV;UdNrpQ0l+9CFMD@FIn>yv^?q@HK!u66qnu0H_jhfkdA_?yLm4#guI!Y{Z>+ajG| zAUSG9*4p==yS4t_KYB%TFJP`ssn&J|_iAM4b3~w}LIyuWSILJD`GU#NN#7J!;;c+{ zJ8qLE4SB!r?$07&yPYKa+41_k0HHQl(Hjas>w`9DYA%EzCs#cuy)BQbM!~%aUQ5|w z(-ZUx#8J=7SqEkC>IC*W5BmtX5`EF*)=A1jp)f-=^goC~3Z8gIWCQSYVHD*0KUlQl zyyB+11jH`naZ|3eew8arde@XHJP*p&3|c>&$peHT()-aRoA>uCfuW?))#Y|-50ZC{ z1@U%M{SSI`n5I3ue2VUBP~%N4w;#<&9v(@Bu-SgxMC{CS9jLJ`Csu~)1#xqV@($*)rW#-uzo zL1m&IeLvoOFWRScXOv$oeMPAtoe^QDcJimiKlUJ|#T*-@nb8q2xWcAff(}Fj5cNS$ zW33KbGMD?>o?)Ax*XAH|#tPMTa^L95xa3k4?#(7Ixrgt3Ppm}%R3c$8Zj<>>G`em@ z)m-e5gTB2WbRMs(ZkWcdhMja*2En|VOVmB$jE79nfx+UDx` zZLVta7}1A&Xrsuw^D?yt)69za#YNwBnfYp?1*^(KHJ(Lfsp(xx|K&6jDevx%nJBRS zi%&Aj?C>)+2o2v+!)<(3(c@#kyKbM0SUWAXJ1J2>`ICU1%YBKv@pdhHY$6xc2-kE% zKtaui)R^A2hV3 zQ$zYeHvUHLIA)cU?4df7EWw+9pybdrE}i1Jwh^wL{2&_-u8c;&;Yfk7Cj0^rvP?Ce zeb0g|-x>qk)v;}n_xREgW(6}myGT6=T|ahQJ`TL_UL_QWzHi~&6}+BD(7(&~M9Flg zrT;hdrk&AnUrG|B-y`Kp`xCP$p~TtPl^!0EPxfIFw)lng>79EDQ!8B6g$EN?(yOxD=nQ>2wcmo+eg)YZh1(9u@IvMo7O(F7 z&=Ag%F?L{nlKtpPa1I!Ae0%%oo_)nk&aeEU%BXV;cKo(}l3^8&;@5TXAPA{x0K9;TkpG(sf?j+--I5*4?n;2~jB;5+;SN^Qloe=TVoSW0mTR`%_a|IHP zA&kN?MEk9v$1;H%ZU;Om-4cTD#j{4A>+$NPt0qKsLUM=(6+3rP-xDqPL-fPHMa*fK z9w3TTeaO<4&{(bVj%51RNN#xAWhi{lWp|l1n?p4v%kKQPGI>E|3sw_&>uAj17glL5 zF8gIXnaWwMbFPNmPtQ07IN^bI5K1w`>T~1R@reJO*+RC?i;6HurgHT)dZ6v9w$jHJ zU2lTZ1JZSadxQSG;@LIKPolKk4|B+xt!cxAVhD1!BPUdzfRi8g@ck`A#OX!WI0>kb ztJr+t@oL-d@C>`;w=1&oryF=G^Cx8gbf{P|-m~U>T_tQ85jvF5sM`3A|G`IJ*}Pq_ zPWqj}GBxEjg&Bu?MAtc-RJ=CFA`cI#Az&Ko#5i4uA+S#t0#jeuezTntL9(pwr2X}N zcV>!4jsXjejk^02*q_O-_>h)OS}c&7#H`M*PdhK(^vNh@q`culy-SnjJ@-lDwI~1W zeuLiy5;4F_K2L%Kx|tmR7FGH`z0LtYl(#=mj@&08lWAn_GWsN^ru#=-3A>`H%l_JF_4 z`zk(|*V%+h0F*Z=J4@zrUPy$|mL2Mdu{&HpMLkn$Qf|hvXYbiJ`+>#4jl0_u6OGC3 z+1$(TOQ7yXvDvkX;_unXC?baJu6)@E?C!DkneKmcJJi9T=%FVCUqNh>_u&cFbUV@z zwt*qifX+rdfHGSJG`xi(YG*f;@z(gMc_=t(HdkGzvBk$OuKHr9i}2ga!c>??JG)C; z(=&NE=`i+J7Jqj8#`WyLqhFvEM#T4c#Lm4&`RMlMmgS6J9A8O8CMf5Nh6?pR$}nOq z_$_|3CCp=YD3{!+?(^mCkN=b7rq>)j1+R)HZ_QIVnDBEMuUw>cE_PsWWv6gH@L?$C zoN!V+feetb4?9HLg6H|TmHZEw1NPtN?nAi~NQ3h{N?xZc#{-OTPt4zq?*2r0jY?o| zcn;9x27Gy_iX@u53zZz3xCQg}4s;oMIyaJti(r73iOt75*N!VR*2BJt?2Gq%jbfm* z>qJJFuJ=q|@}^S~}J;?ypPD;wOu zTnz570&SHrKejd;*f95&g(vK$d`|`Ly+3LPLe@`eq%o=|sF@0NZ!&-pj7cX^4{uWZ zBK!k0kX-dopzrENl<8-!K?fMM=m!DGt2AH+4e6?$%!2ul*#23X2LZvm)-9f-{a$N( z{eUIVfe4Tr9_DulqpDXsI`8#4>v0O1+XojQT)mN4<)Hr4&s6}JLszBsxHR>f+JhF0 zcI0V{Q6Ut=YF2E7&pIo`SV1``lJ~v{#*a1qc4lW+{>h?&+jGvE^8VGtW)stbXi6t zw6XO1`IWrjue>31G3DfJ=)`kAvfNR!b7@d&O_x9;We z&Aaw(fio)@p6VRCPW-)GLdh|{BW`R6p?1iad(o6j&O)Cm1?Nod{l|KPS}#+M)EFK5o` zWgLEW)-1n{;Kr)`Y3Ph^%8`v%mY97#T_i~<)#?5WA@sXBM`%IrT4$RLkwn6fxEcW; z6K%?9tm*~@B**e4vM0=W%_qPAENYTo;W0&;zi?*iATzXnXXc4@zK z!(@cQra{ayuRqfJ;?Kx{x-uMGxu>NrpT07Lre@X2OQ=I5V4h~xE#XgRuK zE}C#v)lVBo-K+~qIefg-zX&nigqtCAe4S(=b@DMmjaudRdD+~pouDeOxU#)p_E3w_Pa~T?0>!r)QMp0~kY5c(H@-5T6upaD=(@*oKhBtXwCf+pmi6Y`shR zHy}@sMO33U&GHX*#HY{T?16vOz2lp60zYlR87EyY+=KVd9`PX7gcnFKi>cYHgQAVk zg&Ed%tg^n%K^5(xp0OUK+9z=pSujL1@h0dmS5ELE#+_&WBJLOwa^XIw-g->RC7@bV zHOHU*yQ3ItdG6aCH6chZvfm?IDOzh@N}m1U|E)_safMMed(b%;U)4{3&N zpRQ0WOXjzczTKL0;eK|?dgNCz>le&o%q%S~PpSglG_$1=w-?{JZc^34#}vWk(Lvcp>8 z_tX2%QuQAVekT3l5nf{i6ZlHjJcHz=pxh;;E3EmjG2&gMYtSo!lZud13q*rr8xD2T zlXxa_a83qee4pfx(ykj8wWCgciOl+tJn6JofQ;(EuX7*{r*sPhOE;}cs{m-Zv)xU9 zgRam}P2MI1A3TF_u4}@%VL}#V{;^X2b@b&g2w{RtJq+8IVGo&4Jm{On#h8OHPr{MA zGT*Ivtit^LK%2+NBe*(vdFvF`?%^gSGA=o%>k4E50f(NoIe3>btI4s$Q~)AEJ`aqT zA6gYS>8KwQ)t><2WT)R>1rQ7FCMpXtEhYJ5|+ME_jJ{QJl?-nOY9VsGBuyfg82 z8gJ9y9jT1pvEG^`FI&5KkI?_rDoC4>Jl8$voQH31e8#oms74}3&}hQ%^MKPi9x!2% zl*~uGPyA<_ZF3e|hJ$Z_2w5nQV{IoS2);nj-Zu6UUy`%@qxi{v+tF=EFfn;p{BGjL zM1LDI_1DtTN#Eq326`d^}gmy8MU6sAs@8b*0d>b!O;<6XuL!2m^^23)|D& zv2aWO99>(Yl%g3Vncj;wzp$1}FW>(yi{kW~y&Qg7GE~uaF3LleK_tW2ka}SPeSNVm zU3~>V9wgeOOsmV&bpS^qNat8EnG0zPB%u%&do4M|ZlB&>!%A+CDRiu?N8KTh2E*}w z7d<(Npc@s^rA8DP!q?K7%mX)tv_1@M3w$ zb`@y(?AB^`QWC}6DkE>E!G7w1NHrWASvs3ILFH~TU#0<@Lcx^ptlqtrH0EqIo#9D% z7d*pA%!tF4Yql~xOsOE{%$CoP(mal58!22=8(={cA;H(|4DcIYc^AeupH6QB=~yod zp_3U%0PNr-C;#lsduJk#ySc?>b1+|1pAHhkIDIYbjKo=QL&{V5UUD!AUZs=sICWvIDTtyCEr?5frKkcq^j;ES=2W*8852PM2}a= z#Y}M;8nJmw%zEsmIf0gA$UF-iKUrp(Qp*vhR{d;4A!cg&CB+Dh&5M@YP#-)W;Iv%k z@)GWOUL6YYpR3g9e0ed3vFSKdzeuaa`PuMY!g6c#moyTVILSeE_5E-6CIVYsWOH8 zyHL{rub9>9DrW|(TgwJ(yq5@~t@1-rCU*U_&P=MhP=2PKp4#E)=2WKH%rOYTZ97%{ zq*UQ$SF!EmYafeJT?^fB9UkWVMZR!-hwj;o>^KD@*#9^Z*N8Cmj{i@qRP2M65`gJU zVaZg|x6agDIqOa_Dfx}53x|}*m`)8K3eUe!Tp(=S#517gHlw$rW-@y8;Rukc>Se_~h%n^}xH z-?l`{w5u4=cq%^KwDZ21-Equd#mGBc_s_Z@4Qeh*cs-C{@BY(!48kPOQ{^YbFucWt zcimMM)37T7r1%+OHKOyIc~fu!@IcR?jc9(R%b6WJ4Ufyw8@r+f=B5?B-5r3|ZwVu}m;{_rG^u_&Z91zsJq;o3 zPH!4qG%PxATjXABp%~G}@}B4S_qBtciYK%qE=4?A570|T3k@-|B4gPIuM|EzK9yi~ zv=1qZ!L9{9hisGr9nV*hF2ax)P)G-$kH5t=wk78C>Jk6;zC%G^VhLL-?{Al=)w|AD zzw0x^*q4q?pFecoURqSst3ZR*0Y^jQCgih5K?{>71AMlbfFT;R)KUmHh~eI6=aH*% zTR^t(cCZtjn^ZhcUV}YOOZiYfU~%Ki|-2^Iu|Hut#Za zRz1(9td2#B0pEM|Pz^^%{-r;;EEe704YdFe21*XHZCvgyshq^jMv5ia!wKpb1DYtqt()ouhT!$wOWDa@X!=IW4>rYdDk)IZf{yTH9VvWjC9L=E zMex>oB;;UsdzMT?z|p3$&^2oM6>_A*b4$x!~2kELAl56G)gMzpU1;Ob~dOzrHvcIkF* z80ik?EWbtlG#8TvZ~#JS2`L_-Tbqn<(C#v#rD=w^(H#&t|EezX3wwDp$?D8(@yhu3 zM>i~_p1jF(gq`dy=YMa*OgG}Ip_9G;_*aTI@b0hN>#AS*Z5WCphXMnJUFX8e#~bpF zT;lr;J&I-m<0rE0^0gT~R(0nf=$Q{Ipz22L7({N) z*&$UU>5uc)k~57P>9?hCe(a>2<-tflC8~E~-nHe;!AAwDAKp65_LmE-eGQ0x<%O_$ zDbPu3z{Jjm!t@GPjfk>02z$58{qx8xVm4v9R8I}dv=6wvnynO?c_Hw~cvEKLbUCpq z&Ctp-ZueBh%ENOK+x3V?G4N9}BVW&#hvu03eXRxWG0je=tR1Y& ztku~z_6%Y4(>8LoN%dRbI$H59MF~Yv zFHXm0tdI^8R$|Em9}-zuh2e^RG6DDqJF_&g$m-!K0oPg-0QD7;4IIY{jkii9>uc( zukAg2R9okmv5zh_cuDUISg8+2u$RdEyb z{CaR@uCnef5FGy$jprZ2fWNBYQP7Filc3=iDR@rbj{&vT7K)!lk>L&*&HS%10#o_- za0+~-+A@f!*%}CkEjil4M4>a%LHki%ToqGtm}lE1pdZfaZMV95Kl0u=I;-RJpV*_b z9_5GBw#3ZsNE2MP&AwZ0N z$i>@+Q$Ck^fbSAd{y0X8MH^r{;l2s+-0dFUUZOpsYrIJDT4OJ7{^@LWk_Aog zwxdfy)u#?=T%5bjbYrDscIv=FkL8*y`p$m!Yy}*eOuq8WXXm%e`GCE z)nTzl=tASXgRw;XIBnlk|7U7QGnQdn;e{kFO$ zht#zH!Se)rTkn9gM4JnI{I1&EBRN89V}QOWs|(F#<6a%u``7XI0xugIpKTS|FU;Ns zP|}E##k-`qdFCRb0BL1%t4rE8E&#z`DxkG`?vSO;`?;pF;Rx{5|2aOroMyRqS`Qv4@; zWD040U*z#eLg#ZZK*@d1Xi`(`99-DvCIQfe8A8~+>Y3(m09l6 zS>Yi^&CHYu3Ca7juWei{X>67=%9ZXozM}5;t9M+!D-zeMQk7H@3SY~2QI|hHNPe?1 zzJKEEO-__EJoq)5-!bGRO9#qX@0s}MTeI~vY)2Pzxw$1iNqWH_i4EM>C2s`mBb$%O zJRc-~1$^x|cyJ>x)G?SEoFQEt6kfnzCi|i>Vq&u0&ZuII#x*F+D`dbTKE56F@ZnTR zN0_N#C?eevwkB(t`I5rmDvSQo^7Z`tq2ZG+iyM31ne{NL>ujo@>91NWJsDYxL4H(u z<~B~*oW|pclcCI`JiH!wlfwGiIpqb3qeR zCsUC^XP>ujq1f3u@ZusbDI+)RTQ%jr^)+nL9O}HP)UFM;7W*c^D;6e5JE0$H&i?pn zHotKA)E2~>RrgB6@9woe`Pkjp`Efo}<~kw#w;cQyN2Hrry%irP6eoyO@8g5kFX&dv zvzc{W2_v3`Yxab9u!BWJbUb*3uRus9jRblQCHTe#i^ailbL%jxVmp z?pZ2sXyz#@JMN zgRkU44I;W%a}Q)9>R$!gP3QHaO)2Qam`tqa;HG!Q?IN)TfTdQKMxm?zH5$Y6{sB$~ z3{z1`%L;;s@9B}FrfYU8^rrhEtAJ5s{?b!ZYWp-o=sG{(q5^Z5W0QWMEuktKixr(@ zym5Xbh1GD-b<8%8IRN252-z(7CXnAm%KXRkqH^N#vLZ?3*Ral(1gFiGIpQW?vVBPi z#@%&t#DHKLzI4Gz>WLauj z-C)#g^;-2~O=>!cCi+emGTi>&>|TCI32wT1mg3n{w@+5uE$hsM8_$!4qw4)mnD)W_ z?)r%~cxSYh0+_g41{sQL3=P)V1ZE4Mvc{M=0m(&=f37t-2o*-^y+6RbXa{e3xg8Fm#o2iBW%=>?(xHhmW&)y-FAvO|X_bP$c%c{43+Aq2 zbw8l!PLDi{waWZUrT|@Y?MrMl&D*2exrM&?FrN#+XjD<*CmU}^aw__)#)5GT1BU~4 z>_WMCz$?Grjsn6?Cey!pWsL0#ep5vt8q)zY;)cT^^c zp!F0;+bt7AHLzs!+>r17d?AA4v6acP9Ctn(2-a-sOx*mhVk6zy?|K`d?iZfJE&LD~ zic9~eMdKT=g)OyZDP3~bOyRkavTce9g*`$GuZg>mn+tjTpDU{$+vT4jl5%W^-otmb zUr31#NbF%te+CfuG$xD;C240)zy?;C;Oz@ zV?#weG3WXtmZvq>4{*xqM1f8J^*?NC0e=f~$)6#l5KxpWS}egjY;zH#7D~YCHn&=H zbK+?R`zk-XK8AJZWdMRWpYs6?UcGvsHYIyx7GXU5EV{bw*hg4c@cZ$aEM01c&WkRD z5sWJEW|Xo1h8pR{%m@3+Ti|-$1X}j~Dcn(@y2wQBq3*Rho2k>Ao_SoIN4Veg%*UJL zWwjldJ!2X+gLC4i50oy0nQ@vnksz+4?=Kk#5Qw^L9*ySCSxqy+6t-aB7R?sJwm26)D9*P#OyCixc&odLYK zcnQWTwcFBqmGb6VE`G<)lpl>M&3@ruW>^vl0KV#s%wCwRO%*TnzBb!9R13_n1Z?YHn@7DwrFe>7h=HWs(b5jxV zXJO;EUSC(s9%Zgw$h%hpmYRbpZ^8c8&i`JdXx4nWEAjC`uHTqvri|!q3ylKNJ3N1` z-+k=9k>8l-5|ifqiS|z`Rx1;WwEuiXp3pQs`3sGe2W@pZT=dzK2O1SdQ!A<2h*|+^ z@H}TXnz5h5jCX3Q+_v#sMywCHTAqmbc>A@}aF4|(S8ny%HF+G% z11nvRXF?la#w)Vhe;Bx`3V{wwm_b_?PN37z4}->Pa_tBecL4Kmm#_N5_$xK zaBf06c^Lcn43@Oa(ta}RW3 zfBDFk{3CtR(YZY=ts~C9g)SU1^Tp@T=)qmp55v)=i?p9J%Z0u|@uB2_jyp?M765*? z>IY?oQ%l1fx!RT|Uz&@pet5h~`LMrK$x;Fq&V?xV^dbD;G5>k~@Wu86e=h>aKwl4f zEWk|k zDZm=6HZ7UXL^xA_vrzuPQ@nETFiCvQ?#}-DUAXj%AbywSd7U>m(4G^oP>j9Q9%cbu&)U+<_!MiI8l@u3kzWVH+~PBWNyop^qdesO0gqwBmZg>(<&lfys4i~NZv#CcTaR+47A+J z|NQSDnAcxPznGT6)fI=V5ZNcbgEr$$4_{;eS08QU#68Tq&jxukt1OYi(lZP=>UkK; z#akp{NYD-Mz*Q}7VwQ$thKpK!=pjb!vMVQLich=%8in0mayb?uuPD&SzChl%>sE*C zeCsUHoK)tpGYhDSzJo|kk6AfH-_`}0C|Pp%iI<3}_Yg|w^n;m)sfkfn@*qam-jLV4 z?Q0RZ%gXr$%V_O73xLrEZZG;H%2*d$ZnZmzNTw+NU2O79@LY;n#TrCl3{weR$;Onz zb#sj*8vFxfinQt3kUh?iAOE5qpnMoNpr?A-fXHCE?gNn)u~5rlzJ@DfP_^hM zNr@4WtY_y+k6x(4B^oxA8a0~$0VbnStfS9Ur#1!hOK$Hd5`WGz2c5lMjqOqV!9Xij zllpwOQ>Mua&UilOcL;ynZT)$C4;93W>%CmmDk`MwFK!!&MH`GXw8yC29k|EC$2tHaXJP3(-xS z3%{$Ie~1EsN#-3fk77P{$R<2d+D{99F;Ax1weg!(UutzehNA1)@r&IX{T|Ni6UEBTMSAjj`7R9 zKyfZfm}^hSW%Fnyy3p0*wNl>c^%Lv9zs7ex`?O5O)|G6>BW7{QrkvAd{dvxXuA;Q< zS)aL${7O`P{zxh~U|(YchDyg|Ex!$`-g++H`bBT3_bRnq2kevf5W0#++tskHqb*}K z9z!q>KCvfpS>?hsDrQj2QF~K96&)7v7qAV%s2ko+n~H4Md3%Tmd}|RSY({xqd7t9; ztTlH^=$W8v3Uxj|@)QpAJfh3U`&Vkam0$+ssVMW`+Vn5!#kV@>QKXMMbu?(UV>Q z4-=bzdOi^n?cK{6<>70@n%S3Q)QHa?1UCC^F(Ds`CIX3Dz~WGWkdXFm?kaCzhb!{5 zO;=44D34*4L6_Y4G@C#|j9%yd?rrqH_l5VhPHk6SbN&oXEzwz3i?wu<;ALiQ5)H)FmeC)<4ac(f<;ykJf(_Br;5w@mH_@Cws4>+pL?V>&w)> z>bNv5n%)Fo-v0++K%c*3nsOvXsrHnz0JYA4OtsSuYDDNI=)XM-S5#XRScHLqcn?W7 zUMb4^#Oq!`4-R3gel^5k_x7eRR@YgQIHb{HoD41)$l%)Ved-bFA3sfe@+fT@1T9dP z>TVgJ7t3S1i`Hvk~#e1Rn=#CWRrzsGA}{V$1ZWqNUU=w86b1 zKuQmd?K*#8krv#f;7@LlL~OC24J@Kk2ff`rernv4k-09W)iiu2Fjh*xi9h_6$WG4~ zA5W9#!}k^U>2sIH?=pBFLmNmS{I*&4FDLDv5Ejw#NqKaW5>etjBywCVxIFHNLdD)T+&>H1q@&u^hvR# zx-&&j*`I49RD2F5a`5k4txCf?(&TGbR4jccPjBVHg9-u-Cr~EtX=bQ7 zIZ#g0EoGCO6`?6CPcJJXB_d(3DaiK)c%+r;LoXGDNag{bKXQPMs3H*Pc~K=NRFn9x zuuFLSd11XutD`VcuMJ~zN+iKqH_g+ECJ~A{YVtx@OsVKe8W*BOaI3zTpZ13W`GFtU zl0|>arhJnk8E=5%=un9uvw-U+)p)%;BQh=TTj%5>RA0zXjwO#rp^acaDw~lpW7um7 zZ{-kGUWJuHQF)#Cbh>O7;9RbTs>bhn%4<4aC0R?IRZ;D9-;PFmTx-RB7I2ZEX!O1Z z5rUj!sdXL7Gt1+L=*a87oSu5mN5>aJ(`xWQ#&z_zvlBAbr=#`lOU`labGx+rvCmNd zy03tGV|otH`S!(-1-3-0YyOj5ZCcmyZeMYw6^ih=w)w1ib5*-I9{~za1opO-zBTBB zdBUQE{k%m=%YC_?Lm!533^hlOF<+Fpq)(u?tkVk;n&qv@nM#?CvjmBzXM2kNq?9&* zkQKi6R+o7CLoy+R&~*|-(*Zb&S5NJlDyOFd3o{JvvyFP( z$dshf_MGZpTcbkJk}a*?Wc&JRp^TToEtZ?+arBLMk^Hk?O`ty>{XR|@E`;4vj>UT2 zt_iHf%AtwD<2-%;Lv&)pnjC4W2;W}9K}#WYVZSBh(fY+z@07m4l;RY(?>Aph4MnI3 zN+=ygw%jY$usYos20_ccs5VMBC8L&xrqVC*b<+8!VrjG06$=$bJZPo#(9&#_A@C}& zN@Knxg`=!BZ1T`^lxy{j*z(1*?TAXB#GUL4#HhTg@ipXia9o9zm*h{&cqK?tsJ(s^ zR@-&Xc~~9BfADyW{5ySUoz#eh->OJ7kLj8!Oy#$x!M!+7s3@25 z+Sc%-9z`(vA!)Lm74pT_@Mw*?d`5g4~p?>;p5TUZ=yrj z9i?+;ADd3=9p*#2tpLqIu8s4eb%Yk>{`|s6K1sL9I`xN#iMpP#Ck2+cB8Q^Fh-+sg zKjjsMKdqoDKM(MprLK`F}*}ZLXR1u_7#9?S>wth zcJ=e-Ob=tN!3EObpEZSwL>k~hU#d(ekY%W=V8silmX%AnZk*nYMp3dAWc3#ED^|Sc z0xcuZj_1E&1ElhdJXeT(pOb_;LeBO@-e`R=H_Zd{Gbqa!SxR`EDw(2^C|30f(*98( zrUZbKlz-bNhwnjZP<4;wJQT{`;kQltap?8wyS{H^4129|vE!#swvV65>lmKh&UH!? z^TR0L8UmbKwnQ;^dd_}298$nq&ev%=`avPFbL}sLM?hC>Bmn{QLdRgM)d3Xz*ISAP ztk)l+{uQ?oede*WCuDpP)p!Uag;EGXP_0O+SNcq>XFBlI1zMjvM||ucJXhr!T8nva z_EOp~kiWx-_Y=lC=_^jmrV3-o2ivP&10a<+R*=M1V~8H946k4kjH%$ja~KQPv67x- zxKG8ZcS@VEf00iL^lD5=vD2t1E2;9q-}xI)ZJqW@i3^QkKlThBDb`)ts>3+5WP%8> zMVc7;O3v)4(>ki=R0dU~11P6qXKWWc4;APr&zSm;2sYxPqPfM;UOBrgk z9wySyo;pPbj_rgyzJ~Q|iZsD3G~KF)HJboimlfB($aHVoEu8X4Ov&JF;O;bIU&0&# zhXm@t`Cr_PJe{3}io&gy8BuJ=(eQ*ILTW*c@C$f{UF%mqLfn|}m z&sbc@EwQO5XB(?D#cI@ z7r3U~Ka!h*;K|d89+xRHE?$u-M}0moZq$ELuk@U@C9JZ{E+~uBd#D&8!ziK{)tmj4nxR3!wpBnd6k4j}{Oui^@6JxTd?=-M%;V+Cv znm~kz;lEmXF@S~d7{HY%9uC8RqX4Egx9wefk?Wbe%bUdf?m1@|YqRb7`+o<_%^24pz8=Dr4S3<=A~3{hT(EP5F`Ij00R^k6tZKsptKbiqq0f4sfDXh2^a zB(3k7j_X@%EF&mN++!l@rBG3neOH%}_$2;X;-#^MOTw1hbp>dj&4D1OKdTHtjgQ3P zlWOV0BW2_KNkOtA8MzoIk&*}U@a!3yPSxGXlkVxL71p!-IZZs<7DApp5-o2MsA=Rf zm8GTrJkyEF`vSZQD9QoBh(o$su|yA{0G&YXgbp0srscSSaBrPFkSU(NNonV=Qocwd z(Q-YW<9~|wzFf~2C=c1cII%l^88?7sORaZhN#-EIvQR?C*~*p#SUCKpv zwJ8IfsD!)V!7?#Sri8R=k5SE^hX24gjuuI(5X=k!GSl8=QPY@1Rw z{G0Jm$SG9GqEWdw`QO!`LHiYEYF69cgN-ZJGR*h*aWBfiV206ebnlJGA& zsp=gmm}q<41ietDAaoKy-!)@Bhd>Qr>aB2T-a`QAMmI%ZRz5nmf?QxbsVl=4!M^Z1 z1GvsxsA9l+Ah;6pux_sn-_9#Q#ZdhbL}h9}l(V;9rA@_Jm}@RKzP6M{Ae`$#UPiQt zO5NHH3Jd#i9Ry+gx~9Tkdw9bbyqvU;JdmjJFIO4(30)gQRcexO{!`^fJXM z$72TcJ=}{v&v$gwIW{J;!)Tgz-R8IcrEpD0fIY8O3w>(~U`_G+tdf|0 zIK%zJA%;G+Q?5Tir*1w<2Zl*+$%nYH2yGHxfLEvL+{hW|)S2-l(>Q;iGEpBK?k9#z z9r67wZlV!No;-qy-)qO)sVrfF&{)aCt$gCFBnaw@x&h|O@Ej`SND?=H0FvYO8XnOJ zU4fU2Z5H1SfW4CfNR}qpM-0zu-j*(ao-4Oe2Lw=TA5^jM0m`<05iu?Dmpz}- zZ7#nBc$V_a^`##505)m^N!@O2??sg{W(|BMfjZ`PXupnx^C**iOmiDO7lUM)dkstc zMK%q=%S!u5fw23yBE@+Vlw2>z5$#5~nlo?@rD@1_HQXPM8d%y8QIIKbA4zxmE={zL z%BIf~VJR*?PSOi!9ac|5V*sn1B?O?Bswv*9UyQ`IdRc zu#Vq_d6ZAEgxuzr#4DPrr8(~ug6MoQoO0u-k_OZ$ioRXsW9j2R5KqVO41p4iA)vlQ zQ0;RB*>U5n+l>S1p!t@>zL4P-nM1HY;5LewGzW<-WEXvqYu4 zTy`W;1EAP&<2$rT`-MXPBTtprn6}jqdK+JUsQ1x}*1jK4BtNI)Tsx;&PJ2Xn`ks|XpX-@mZP7>m2zClX(iy9N~QmKw| z1HPSG@1=w2JUC$x4wRpe3m0hh`&|FB%$BIIL!XCAA>fXG*%Iu5XPpGV&I&DWgK*%9 zqT}*m-+c-s4)m$)@nCq)`d{k+jpkUlP*$8bP`jrKeQx{<0A?N%}K ztgIMNB$_VO7ZgFd-@`p3rySAyTJ%(hjJUMF3grPWr!u_&>GM`$q5?%ip^^j*M;?gR zDI63k)|ZP6m;zTrBPZ(e&7MWTUML-}G> zjPoF;D8IO7h*j;3$z`&sN6#cF71n9)tUPGiSJIIV_DT9(7z%2Z&i;heI}*}F0Jk{^ z@h#IMrVVU@EDFpUjIXt|L7vyMV!4rXAt!R9F`Jlsr%%(atPR*Ek6hE1fhmYy`O`M4 zjnBf08?!_W6vaE30IsEgDKmWrCx5kzEqw-90~vyGEMWpS0-AWxUx?o+x}Sjs17ysVY4xyzW6p*p&g==nB(5 znnYKLrhQ5-?Xjae1%C_q%L4O?v=(p1hD{3SQ}{y*YH1Ls|t@ zeSMNZ0bF~~C72H=`$p2;EUDAo34R6c3&w<~ER|Kj>lTYVxU%v<)}VBw`5X8KwVeJ| zeLAK()rfI`l+mdcXBQL|b_H5{HlQ1Wo~eL3W`PsDXt^gvKt(YLSeIH~Qx@bEoz}6v~W*FXH1V4b<1-k zsF#HPQHE(KO*XYnvb7F*bkMihR1J4cXNy5iFcByd&(#t^GV+2O82o2_mt6Y^%cn}AQ2e-BNY z2#%|e0*Z$Z9LP1u|4A5K0t!~*h->^BzHFTqzoLi=5Je!sajRh#sr73Sr=BX$BPl|G zkQ!=w?tR5y;~;A>Ssu zpT#&TEQ)*zX;Cpr^(E~A zxtb(^2sxl40^j>IuW@!jo>7S$kn!E_<6e;=j5S=-*YZy9NT=i>Ogl~4&QMa)bFviF z$K&SNStMD=6!h{)!%0xpb$w%ESb+vu<6z2*op3E79Af1K-#TQ#V2P(i$ z1rpE_%TZFWbrZ<~ii!$*1u6ht>H5;m*@SYUN2YaTZh$9;{BoN|{wrX1VMCo+*Ia;6 z>(Gbvocl<<9aByMRhOdBQ&vHCx_&yPma#!JzRawn3V2&0%KjFkQ0Dvk$P`1M%4pF3 z(YkBHq5ZcCtJR6u3ZajlOwJwSdov+VUPuShT4qZoPolSh2LR6GHr7>>=2Sqn0M&HgbQOja z1i}GX;MWQQY92|+11HoAN%(}Hc>wOMv;D??up-!TU^Ryv1uS+0GyQ3aOa7gNIi&o24F8NY?Gr8u)APCQi})G> zs9)=oG0g_jH<4Pu1p)0EJkxgLJ>>)PN^hq&^;hTEk{0c+o#-PmT|SD4bEyeUEdoE? zjne7T_|B0n5_>CRI(KRGNOJOy$PQD?_I?H!0qbp&tUe4d5(GUdRvf{&-~whAQpwMz z(jq`=c4J=5Zt&V&@!-jrrZqU>c2bT(ak(_?>tzEhmxZA$f;PJ6rGx_Fa#ItHP!3wW z1mK`x8m;-b>c+qk3Syi)fpV-J$d?Et`KI=%g!Wl60*XKI(ky=1SAz24<;U|LkC$`G z59*C}RM&ezjCnc(LF*YU5a?6%JneZ*27P5?K^GJBHGeC-iTv`zw*KMLf(&=%c{42f zwoDR*F_^ETacAu!vg47&GAY-uG0rU~8s&}xpq4P6bCi6H%m=ix z_4o@shQqQB0*@gD&BuV5z2NE~M=L+Zn#H|DXt3Uv(@T0QEf6l13YNM#V*kS_322A2 z>bdX)!Ih{6I??u_QboXqGIY5r0<{4kK^iXiBH>|w=ux1~s}ytqSFD%kP6-PM1&oC< zJAqx_d{GfJPooR`)^}H+{o}krt3-|Wj;8@=ox%n_q~^mMfz=!O%=)r#$cNS^@Ena1 ze8%z3bq-Klhgln45-B%i!`P4QwQE_iFcf5Lvqt1`-;wQY7EKHdyBc7=e-sF@A8pq% zIb?%T)BxCZzOHi>la(}$oC1Pu*-n$|1PEHfGdyV;7b~}9@H?Iwiq;@n#RjASAXcjt z`B@jDXkl`=?TA|!!_nR_u(>30V2MC4p&k0Y6A!osZaFIpkx;Qv)mk(VW~xGZ29OfU z%~f@8o`d=#AEU#n^(FGGa|#haTbH(4TBv8wHPBWV32BYB+J*>(rHCAdrvl96(^|Wc zU*!2-^{Xlp4)-B{^pdd69F%}F3UYyQ^W=DxNp*%B${!XK+Q`&s=lB84K*i;h1N6Hl zw`1S4MQNU8sy76n`|`||)*f8$tKos{vk(?<0GDfs%p96#Gbmc=MApplZ=uRTe7v5i zXm=OKZ4}uT87j&Gh#NTX1__{$4PF5t5g!hj28A0&4&2jMjy$0%o&U~$;x6mQC2*UqPmr@L3- zjkf#91M!;)t{gF4Ix_IKp$0c4=n^h!M&KZJ6r@fE#w2+rOiYGq3?PVLLa}rmWcjzV zqKUj)9zZk=_zug_e*+3@GXwqY<5z`SB z-stZ>+XEQRL#4vx`woxjHV=YJ0j^jk=M7lBI1f5YuaD-X{IR^K=9}dO6;c_I zz=y;GU~GE9QRWHqHuhh9K8CS4mI3^g4!jp?5C>zT0UxOFF^>gzv=MHUkD)B|aAG~i zf7V1!k#!Iau=yq_^)-)*i=woCft4Q9VTx=DF)1m+vD#?h6{7tW!jenGfiET-p-V?j zh@;qZ1ym#RSNWknB$;-otHLN&#z>PT$Ie1?;0WLn|DvTGbsbZ!Y*bK7s3RXZ7~$Fw zohs1t=3giu^UsXII!6l=2U@Cn=gUCwYn!b8KIV{Ps5Z@0L(>S?xPpr`YId3 ziUXRJc?Cg{VZltLOf&%WdR0egOV6QNAT-HxHMYbs6-k?ImM}e zZn1|z8uAJW`xbeQ0F29jRlYW20}2$39|FGW7j_p4brkv{H&*ARQv33=$WQf!oVS|$ zm$mU(02kzkS!qv8Ixj!%BLyN}(!Rv3t_}&c^u{I>bDP-4|8(G{Ydl#Yy(K8dhUHl# z4ntCCJv(KDhvAEotUiYgKLO;!AgVZiqrn`K(2Y>AbH}yQ~7R# zgV;h?%7PA)2LbQ%(;VUyad)nSJQU1O+2G*O^y=tzVX$C+D9<&DQ`^O7|62lpOloPm zr~4gn0vrc^sf5obj8)G&31iH&kI+)pypRt_4p^k2Pyk3(k%aM|zU%eo>S0R_rN z3poNF_u;pM{)9RkV6)E`SEt30l)!Zh@l~Br>e>U(b$+BJE4bgK>uWY>of%gTB4gRt z57TQ}-EYOz$ee%&FgEmeg;c2csPKLPOM0C`%XN^>e^*&D!y?zK%acQ;|D+mHm(2M7 zB55Bj<0Yc2!-LC2Ed(GNap~~H^m97vKdA)($#e-e?4`|xDr}_h>Y#GUD1f^g6gjU& z9|T-LxG94*Ok(TY0}%`+Q#^R8Z`4{|_~SkOZeR_SbxI7B9ELE8;wl5q-kr@<9}!`> zhdPOM1)-&fmZ^eX4`8Ld(@eEqSSRzI#Mjf6QK~WZ5!KIFF?|3?@^v)N1KOi$EldZ` z_F>Z`hfh>gQPHDWwmKyd`oxMP(A7H(Bk#Xp8N{J_e-{8HjSFMWNyoNPD$tpM|jK+9wB^2oqdJ zEl-Dc=-D|V7_W6OC z_zad+g=>iXQ8QeCPTOBr-;jwCdJWo0v-Bz7gAHw{Y=k_oBR)P8aw353F4d`(uHB$Y z*~ZE4@w02lV+Z?fbZIMk;9c+Qr`NPT0{n4x3Waa-rkpG=wpq$;Y&R%OE59rGXgh5_ z%=NYS#S1wvWPvKez9o;BnfB2tEPCdWi=@4^U&sL>4h6kmB(BT%RL~sQ0RS;d6-^2! zdaM_-M*1wUad2yO^nxur1;J+80F)9w^#L4++<2z(oF;XauoRx){tSEuKNS!yEfq^J z)<*$HW7c|2Aj4|uuaL87wNO0oh@l>+EQ~d(7Rq2MjMN;c3Dcvch5< zAd}}8*Hv=GVtF_})j{7zt6w+YI?sf~K3xHpNvQ+}flpr>@-Xh#GC8zo+4|4%0_u&` zaOH#SGq@KEDX39|T%PYc(TQw1&^1fau0EPpa6bW`N9U{D3n1Zm3P zCZY&hT-wV-PLUuFls9RPr1SeX@Hv9Kw4JDg1@gkOaleW2UFQ=*8`8W_0MZ`9A(}_L zX8jEP8YkYP!f-}JP-^-G7YCrspe!)vmv412$?ZHCy`O)$NoMjg9^0<3g+=8`j4~by zV#q7XuC-m7vc;&~tk0&-btm&ed3e%+8z#EUN~ZlEqjJ*h*TiWDI16evex9F&WhC@P z6JNr-zEo-z8DmEoFp?0^bS{>j#7og4W}QOM@{AxJ@-*s0JUN4p8zW3EKCNJA;Kg;` zg1_S!+Smt>PpiH*{=Br((!!+j~F(6y^&fR^)!VUU=2$`AK0 zz^Cb&4*F9(YhBoeeOm;MHxcrnP2}4p;S<}4?bc5OY2;xm{1iiZ+$a;%xaG-0WiJcL z68rfkt#92(P_I~5 zf%?UCx^zDAm&)pX9GuT@55#)o***)z)t4(ou{`nj3{|GZd@Y@=nqN)ZZrJA_iyN94DGR1 zJDMc`61F>Zh4D^8J@NEc4($>sL#vHIZ2LeY@^z|?g`x7LtYpk% z$et4%PEcv07L1^LX@wkLh+HU3FgpR>agh}q!)735CfYt9(w9j!s5SmBGwq{S+R~+? ztH8*baD?i}A``YQLvTm>&JQZbR;a0k$VrnGQuc_H(3XNnC$$1VBPD(Bp?Xq%^(5sc zT9nf*@vYN)alo|(Amoef#qgE32d%&e?gZ)Wg+c(Rb zUtqm;4oU1@k4ikUvNRqM3g_kszU*}EufiIMX&+K#FqPL<6naw{1xdI^QiVb6v7qRj zRV>u>A`CnsuFh0%UQ_GOcqeV(b3jZrz-blSa$Bsc%dlK?;lg~svp1pX-Ra+y6IAJgEYfbt}G#*`@edT3p+&CUZ8sy)8ILy38SQpL8X+r1a5sARA# zdrrt3LV+hud5##>NQWLohjOQn0MJe zZH+R8(>_B(v6)f^s8b%Xes2%ZM+Qj}f1ua#l!Q?P0^O}Y;KB7tWFKxVSolk-Lh zK2b)Tp~59yJbOz(o)&%EXwkG-CxQOf^SF=)X&Ck7j_1Lp!YOGF^(FRgh}2RT;a(KQ z4#IhO3NVYGzd~7x#zJWm=jG;;$|y1i70HaAS7D9BbeZWg7hr=5C04@y+~GxbCoJnH zzr?Ji{HMzh3#f_%b0%LDy2Un#$uAi+fra!OR=4Q$s&tgLmdj!R#SwLU)oW@RO(>tBKUv~IzqeY4g33Mn%1|h`(?qKet!#IV%D_cX$8e3N z8wrn|*L1F2R65y0*W)o_nh0dkGl;U-^;op6T~vUfPRK7bY)n4bO?{@r8VXIO?)uHEodStFmfCM?%WBeWcpNr7iwpGhq{uDwv)q`aqSgPvYt$GJmCKfjmp z>d3*@-(7PQB)CAIyRG-PsZ6HpGD)f_ar-wO`6(HoBi}{mBgRyfO|Tj)|g|fq6?-m>8Z!udk`Z z@Hff_@G9MBP#jdA#rY?E{clsDz;85eEHnsJ!ZvB%n?i+}W>41SI!1zQ68y&g!yA4G zxPvDm?-&#>g|^0eq5xWX!exvO|LhP3v8Hd&^AHwt>{=mt2KU+x>avuK|0coWq8vD* zt>`FbF}$+F)I^^qcO(aq2MauC5Njq-H3UEfHnk!JCoFR%78T4EMdJn))=59{J`7s5 z!V%;!)X>A82>jF#6v1;*ImY$)Xc@){bQjh@zzt1yFSvp>Ab6PN9omFS-L)UZ3CgNo z{-sGGuuJ) zW#FEY@tK9V=9ZOWPByUO0Nxya2a;O+tv>qcCe4Z53cPsyee@Qc@zsgj^{xtKFBaUW z=ary+q(Cl#=C}k|d`Sgz>jy{`4C2xL*`-N{g>VgeS#QPgNKYO?7%~&7i$>sgRRduy zyIskIUhmmMAeg3L$d6(J5{4q;026;*T&1Y;j4F_d>8S=iZ4)XC0~dyT?18$Rgl$l7 zx7m$AX>d>&LX{VQ;fw^JJt#5FAJUG5p)xIBLY=L`ROUj^y4QBvZ}IayjQj_gbUcB4 z@pfD)-WqadWy6ZSNt2iQ5%6OCv)4Fle`N1Wd1go2AitnZeVC^csl5;s$?a}gSH8gu zXDj9JD2t`frShIlfkIaJzH^2;x@Tb=NoIDR1$C8qu)u_Q#lZ7Bgf)^deMuyA^~p5> zlt+{-0-=)Wogn2{lafv+(Kw@}3ZEV4o|C%CMIv_;y9H#O^DZK9bNNxhN*EFNd}~hz_LcKqw2oBx zAVFbG8I$|0B ztl9#=x1p|Jgc>Lq_(NOptKfrN-$UiCbyEPfHxe>rozvkiZ=1J(uo{zBN&<2qfmhLs zseqqL(HNS-Hl#NwN?lidrj@VCr!IAMXNu9}u(3FaeYhA4a2!Dru zR~}+r-2;iwWiF!AN;m4`loQtq91T5J$-b18((&YdEOCIDrn&O8&lCtS?bi)h23Mi4FiQPjbA8!mq!_ zRanC06X$0w3sewr&s6}rTYOWji3G}|!gcll#rPbN3u8$fZ%}Upn>4ulS{IJwUg=5= ze)??PegK?YmlhiksA4;M|4lWBe!)9)H% z3*Vov{7BCRxpb!o6S+{K_OqqS@(|@lWya*2U>R=@ins6Gm}K^CBK&TGMU`OSJE?4} z;aFhuUNFcrE(nmU;M{9}sqlSzi5ukWggIc%6{LN%6J4k_eZN?`I$F38jM6kZg2{p) zK$AdBUcG>?qKkGpWI6qIG1Gi4DhEpk0}jE$Hf@ogsJ3Uru4J^187t)~IQ`-4NF@xm zsB?Up>5Bmk4#Z$RDq#oi^cu&FFnDj>1|aK!5p z+U*lT-H4psfNfKLxN@OhE<6T#A@#9+RKSgL+r~8O4yqYM0hMc%DNU~{uqMN)$eFg) z@&Hx{)JsoApeUF6P?j6`Y6@1{xhp{{qe8+5^EK=HpirjqAyyBQlgJ;;m&hGIPrfE5 z_XQK`K3hY*CkBMhyh5~(mhnbbU8983o=E(?{6#kmra{Eu<`4gj8w}NI(meEygvG)u zM=;nCBcUEK%n$)x2fDMIsH`4}@osE}9VZ`2F7g`zS@VK{>L1f{f@h9$_#-=Hss`I8o8V4d;Z+0wl7BzYs2(}2)=4CZ_fM`n(gZAOTLoo4Na&1gMN9EX)x8fK=4)CcSiSu+g03?-raY?BG9poP^ zW(8i%M=Ouba`{OOpax7(wy?)76^p2F^tq96*>beJC6pDFqa6TAFt0-ODkXis2R^1W z>ai+N1HW|jQ*}JP6mh`%86SaH9DbX^%x%S&gc&ah(!x?@34Mm;3Gl9C_HZLqLl5#N z$TEj?iJuS=Q2wfHr7}bP-OJBZexNLkGE6MaN0|`$RhNQ;`pVNj@<3WWc&$+|HJm+J zOXGND4OcoulL}}!lrbf81Br_Oy3JSYl}5S@1H!^62%tpnZGGq+EIMZbS*N#^`OjjuS*a6DoW}3JIr0Q!dR$8B3L2FF=WiK9Px^(3p~|2V!iNK6x{7z z;gxK_0V!pnXNcji$XCRa=*3U~G_4ydho}sl^n&7w2P|q@Jn%5(gOkBb4&3!*<2XtX zSe2qDqKZwZUZv;80ePOayfv@Q@g`9me(pKSBQZa($xX&|B^`OWBajyf^IDa`l6j4D z^yS;cs1U)tBD9Y@kZP!2gT&-bS@zd`%Jern(vpRbRkABHgzc-&g$Twxv+U|bVGA@3 z+!%lgggPo18{nWgG{4R%5OM7xD9@uo`?G-WbOD#KVrZhziX?hWSPN7PYW=z0+Br?@ zxNrvW6!PILY!ik>;&CFV@GHfb+pP0TIG4rbzo$PAeZZxC$OFt9flkQx1J1FaVsUj0 z%1LF?;c2|ao_|X2y&E01PtX;g9*qa|DhbNgPj}RRPPgvJZMxL{$Goi0J#AhY7%vZ* z#W`xxf5bN&ji5>vGLN9sPN8s%22ls!icE!q~xLZP>DEu z2|%5IhtX!_T%N?|iJZj_*;-??K6tHl{JqjB!!55(>*ILb0QtgaCfd~hL{8~b>>Fhu z+;e$jK4s8PyXax>Ev!!M3zCcI?0ZIxOs+Eoap%z}cx9D;;rdM3)pcN_BP^E|*vJ;GUSJ}8j|<#G~07*JC-VuR2G zSJ&)!HJBk->R@xb-kI#pXE=ToARHj-L+UvQyeSO^wT(aa*Kly^z(C8FAWgLNkuO+W zv}zsT5jl?v!#Nf@5~vSTWi^{JQ~qh4u`cYDk$Eq$aw{G)qvST+F;yX^s*MEwlNkZ5 zcc;{Pyl%1AgWpzYVc#5cLxG*YA4*BGVux%)#U0D5w z^`M-mD(7X_HI4SSS** zbr#cApnVv^dX7+QUA79QCP|md%Bs{Ey}~d^sBje{#y1plnCwQt*U=RRiw?H9aSN49 zTzaXixnwQQ{Z7xigRnxI#XdZUAUKCdi|Y=nh$5I^TJeer6$iG{%7%Od%M%ZrXhGvX z0t8`w_k;l}v{BDs?0(1VpcHo4i2jhilR5#}|o9 zexL*JM}X16hL}L)(=e2&%TFCX!Edw*U4Hqyrj75ri0|~kqed`|3ojTV13M%rAPRj8 z?T+_a=~cO5SctG*)CM#&5}4fPQj)e#q|$#9hwX-T+WUC8ZhLEvu_b@j_85X4hE(gIG|Q% ztdCG8$@5O@ZYLvX8v>tA!I-gB(+%_KA( zx$qNusVGy-9vIcK>Vp=LMpez?gKPGi>pXQcS*nN7=59hH-f+DDh0jC*McYWBy@Z2{ z$c347katW}g-@UgSU$EpTBZ1#;kxmJLmuoyI<3MPo{x3GcV}BaQURVM78v6XVLbt* z8!Hj}*a0K7tFpEww2{g^D+}|3{3Xi?Dn82|Rg}u$Z0$2%E@Le#rwR0@ilc&)$RFe()KNm)QIR_N9hH=ZM?vm8XDV!z zy30=ca3?y`bAu4Yqp34Nr@fXkYX`JOOaS4x+8ql7Afd`qU-bT-zyLS5pFOak*MhaK zz-OT4vYf^nU&@26b!P}68JIF^lky35w0Rfu`3U9(U?II%ESMgZCbs~O07&(g_~FR` zcx@*;luI0dIZ!o+LN(Y)NMo|m8EI^Hh-g~`_~tVg)4ZWD0)-EC>pQOu?Nb`p z@@01N!=-PMGM!dnt+g&ws6qjJt#DGU~b?q)I39|QW)gN zu>@e#HeuZ(wO*!#fa=nAWkS`eEPmr40%^>{6rzGI`#R#0=Falgwsb-1BTt}y=BYq? z3@-Y-q`LEbBT#CnEHp3I9wz_JjNXH66j^srBa`!3^eA^MOVgn;rI0O?Pm79A>xBvp zjUnglam`2N1HO^dcsVNGc#N-;b%r{!mFe!G;(;v8i0bP05QlUi-y9TDS>P}w(hY~> zZ(X@*Rp1Q+;|kC|^FV~Id2*6$5D`ZDy`DY%1MC*dtW zSVF4jHc950JJQ4fTH%vZ;@a+>yrT<1>12liA$V>Z3`GRfJESHo=A$0ijdllA5apYcWWK!KCFoCl7ae>G}S8mV{xxtt| z^To~yI@{nhp@V9~F)@-YV+0`JFd)%#v;4C_PtWTLbPmnSAuTsBsf=W3SBp>a$PN4) z$!*Rj03A>!TAa4sjyoaWCd~k=p&-YhGjJ(1dK>7?Xc;kt<<9mZ^2g5PYZMd*f(fz` z#S1~T2f!2#><(?lH%n4XLq$2ELdqg*MvUWut8^&}!+CfODV~poa^w1isP-Jmhc4Yc zp~^#4#je-4mRq^*(0N?*%YK>=x!aDBYoElu2u#~%-g3^*_OyTzlG z^C~P;-IszcRX$%#k?co`kL$Q}9 zW__MQy;_Go#?T>_6M;O*Nj`^5uNiL%cqySh;+4+Rk-#(P9maNO{-#Xu#UD(Yy$$6} zZmWbF*zP0-JuD{ZsLUf0IR#HaCMC$A)?K8GwIok8DXKNPBblDx9>_D1mM@B!t~`nV z^XG<)Vy`W}5tIoIrAaGTI!K?S1f()Rs$+{b_ZH=q2tT~|V z$aiB=gzVDPC{}kr9;$~Hzf+i0KnGu$%HcWnLKO6L&I5U5NUI`%CehO>{)MJ6+m%#T*rXpAp zxsa%kS03m!>T~h<7YFp(&talp(pZbM>vzj{+6O}MnFu?;bY-=R06^JT z6lOQwW0M!(-KArn=N<@f`I;w11&}VOdOlkcV*gEpP$pMcymx_1B>Q|rr>a#5apPOu z)t!j60bb~L^AI#mFc3`1f--VvgOR_d{T7V_y=ESxc)3x2 zt@c*gV-{C=R2ZTRRT&ftN4Bu_S5ip8FH?xfdrLcgcF?Dl{3>rc9qW>osE(>_ul7a4H?VL+b0*DA&Hus}HT3pHs)V1;Nh)TK$d)LN39uAGFWEQ{v@;cj9B z0c0@(1H(r|MM$H!I+R^gVodIFXoQQElefAIJV?kJT=XW;v$3+n_-@Vz1b~ZRkMiKcQsn!Q;XBrKQp{9^ov<7vtY-{Qq0ymp zE_zQtF<)HPYrJmNo2j`627$K=^)%j5QA((MwCzN$+siPJ%ovxFoJV0`PNh?A=Xvlv z^n~0FWFgkqdH+QIC2znJiS6ujh&wB*^ejQR3NoK3(XV;p#x<$G4pKBKj*i{H#%4s%LO&t=SC|#9cA~$KUT`( zVtonurJ11!v`n4#%(bF%Bpz7pxDqal3p7ud|E$6z)(rL&vn@jqEn@>zuKPgAO@?DS zAU)Z4Bm`Hp!280dEGAaJRDNEP-G{IcffB^s_6Wdcr~qIST(f*|336xy0~1}S6chso z9y;#{loKBKDM4GPrx?p0+dgiF#X=@tvzPsSL$C^r81zN-ytmRe4%TfoF)h(CnJv@q|j%fO#@yNWg!)i=CoqR%t9S$ zVgjomXTZZSs6dP0nsN%@Gm<-I1FSIviGfzD6|@SazNBXYAmC7*Gqdy=p$5miqGR%} zk%jB27}yBufR~|7M3rKb{11Y!lAc*)ihxj&lY4gq14|U#F!Y#i0T|*N7ZLkfZ(1bC zTleIQ-`5>EJ44^~f=X8Jx%Z}s2R4+f4uDsA$5BxcIZw>2{~+#Y&~WdSX*>W@h}_B2 z1Z^PkX$h`ddASU%CqqA?!XITg8YcRTzfgX&_1&Yv zSj&t`zl(CKJ&ibOt{m;Njf70iW6<|4N&B~5=K6Y;i3CLHr-Y}=Z?sm)0G`Xe{IngH zz$LxPst%ay+$ppip;%lhyUCjG1=WKz^n%p#%ni11Q5-~N@Zi}-Rh=mS8x=stGIYRJ zar68v_q8Iz!JV?>TDcJBOH?1#p3}P*EkV0`=o|!Q3@=45(twz#0&{})Tc1H54v?hW zGesEEX@RC(G%qggP459A01uEmqT;3KyS_0EL7uqzanmvA3jFaXePPjIXnBOco4VGGPzOmLp4^NcYOd$$n!+iYBm=KzlFT9P26m@sXz0 zUy^}e%6&$_VOO3tn|+%kriFo|0~W2ysL*iNb_;w2p0RO8jr;7mlMLf&H{ za!L$z^;B>1V^PzkCgpZbi)%Q0H~Rw&_mKy(0dQR!+UHaQCj}wJ`??#QVZfRd(usQn z#eEVYHlcHq+F`I&)e#U_1VAFVa5Q&)MTUa z0r{up>2vXLKg%aHu*IK9rf7-k#SE}>-9OZj+x(BKKk#G`_LE>}QJ=>=q9=w0jkgYL zZ4tT(_6(#;ljg=~4qm1Zg}hhcxFM~tQ+TNOh+H0S_~0hXoayBC>Fz7>jJry-k35j8 z$An8yhz8+umXh)OtFoGc-F>v;oTW)Pxtr%dm@3QEiVxE3EOSJDDB+P6nyw4H!xb;N63&{&Fb@kg71>Do zVlC|tE!PgtBM*Rj&4)Y!Ti64L1fDZ&=)@(Y0{LRx-W`Ssd_(WALvI4|LomgDt6q?# z;7!0U@jOI6G1O5*RVq)o7Qu&;!%2gYkA=Ib~ zrk*DFb$Ma||EZkJjlKpE{H^7fo7Zadd zB*g&pNL`Re+;oQunXqi=fUft86O3f?VgxQ&KT{cU&VUQOB`|i0YQ9VhU3{6?N7k>X zymOAY99bZ5QG+Xw|Bg^J8y$CrY5ypYk%X>sG8@8Q=5U)P#*a&R*Q7g4^F9b0xy4nT zWRBh7PL>G!rLs7f4a}qfR0lw6h6~&$P&gFQ7Ueh8dEMK^v?EtS`#@hhmT!(-;{jJZD2UvziOQY=)6jD_9S}qzI(aVgYoo++_OJk|9kmskc-+zK~ldg5-4ztAk zuuTTQ*e<9T8WtDQO2Sq`;B~;G(gZHdwsh>4e#d$Uq%~eg8HX~{ZIvyaZ~@2aF4ig! z(t35)<){6nK(2X;P=-?ON9Wp7OcH~~m7oPGNif8Nofs}qhb87>C4ix#hcMM)tURFY z_=vt1e3zGwZusO)2u2=Q>@mE7X~geCa4~fD`iFzEGKB~A);bCNX5HsE;QMNC@rp!tCEQP5&9gw8usmXyn(V}e>z3Ujrx#J8|&S=9_O4; zjA-<{^)mxrf1v18y=eEnL2cz|e1l?z#z5eRdI zDp%tB0q4wc_(&W}(7yD$pK7pW6)J=K`MnRsi0P`+v#tX6v`{S~-MFeswwiU%={ zf9uXG3bn?%u!2fL8;Ph286enNTLMo|@i63t@2STl+fiBL^JpQv7kv@bi9Ao6CkE$! z)J=m9WSQI>5Tj=n>!f=_BEJ|D!L!j?uI}e&HB_X1V)Ib|=(rNgJgzSE0X_%)jg$SU ztssx_(-{a9coQb1(^BNcf;1FWwUIP0JzgiTfMf_?iH^te^cYR(gThD8NxeD8at3+O zwi31#Bs2@+io;HHWztokeW*aL03)7GK|Jd!G)x9JDoQ$?K!>qiitV|25A-xJrneVP z))-IAX|v>^RjpNUo`imOzB<*aD#=2dpS6v7;y3A)X%Hz*l=6JEC@ZiE^`opDxTJA0#0$C4$5CBe})vy+RYFYX~Tm&H8=7RxH z@S>dJ!SWlE>8dEL-W$rZ{zINa5>z5x=mYDM-uIsl7Xx5aoLpqClTepX9x7DCSCge~ zQXpJ0v(&-Mm!6Wqu25YN!p^cPH2!q&E+MbVCqs;sXFo2L|qeKyZi( z$4x|&*Mn&lmX~t-oI*KF)v^5IEjN3N{lIYmkRNd;!{SOPqUx~6s4#kDJ(o7bHnqs^ z!vJ@e0A!sa(K5OM5)R;?3~MiW#iH%NiFL~}C{}01Ho((?K9rwi59EZPE(Gm#fDN)| z{AJHuS2lq{CRlzg{u#YDQe2H??GJs`GP+SQX}_doov(M2LKT!oJ);3J8AU=(qazEl zdL3GKR2&rgQ;X<=5_K}*@|o_eUH@D}c&`xcF9mXSl;~!9HuVvB7*Dbb=F&K?kvxzb zE>c%J4cP1|M{w^3#im-Nbo zsbSrQ0z-QdSPTpyUD_KEfSXZal5aD5W(sNqEAAF}91gV6_(h(Oe`qTaJQG7=scbm9 zLnp~`p1}2sc*WLp%?m8c>Ve}YC)N;B-}hE0{VQ=JDmUjAshlhWbkRDGcuy@x> z2`6$;G{$G~d}o2qrOEps8z<}p_4z%C&b0qX=u03el7@C)mX3AyDi)Z$pM)0Q{FZL9 zIBVKQsc;RF90oJNI{7e|u?%PNK>R(1kjCF>6&5N8DM~_t2|XMEQ@v%GX}t|Vgq(}- ztX!&3t)`-N*I9dAi~Hu_-$oCy)gV}^#i_eu&{Bds_`@CNu>>fWrDmA z@)dbR0py`<1=sZ1g^-Js_9lKIZ>5$ET;+#+NohLYZ zg>^|ObRtShFyBVTFKL?9=y~!+2nUWZywkwD$7X>5Xxe}cmX=imYuONF{oO%cxPeU5 zj^H=GP)c)0eTJ4c5ghbL^bQ^9XWm7tU7#$h1eHB5nxC~NTuF=68^ZHa9aN%fL^-HQCET3vPbt+*=W^?ubvGsX#I`+K zqC|u|Kdo-iMs0f}TMNU$q^m&ta3dkpbAzBmow+s9s4&Kjgz4yxUdnP_mMVT#( z-l5E5-j;{e3qe^h{AA!Ik=r1N>G4b|e6bXYf&nD^`WpZ6dY~9;itRDQ!3|}m{2|Xb zCkpw;?s%Mg=r`NKGJRosI1(025Y;yYy0kPPx;%8^xpmjokk?L~A}R)d*W zfcDWGhz=2%AeYl9vNCAGA zB-gX+LwZm+s!XV`wrt4k$@eEH2=%5G*&aa!hhCdC6Do%L^cdQYOM~qm_DPUmoxwm4 zfWmm8_&tmz)#6T`r5;}@FFCn82Mmib`RFNQ3-$?TRh{4%U&iUq7^UTTFl$5XlM(mtbtdC z@`5ko!gkw=!rVrzuhvVmPf5{}+JK){E>jg|OK&91`#|(9giVjt3M}Q=Sj`PDid@p^ z68cOuv|{*=q+ZfnHOB-yS4RrJ*6|`e?^j{TMq#*iNIR9NY+;5*nWRn=UUr@hGrXc% z(z}(%PjQFRWq}o)AfJBQ8A1e>FihsEfE$)V72T(lXBT-#dMXuxhTs}DDh#sPB4h8- zFn|vi-XY*cZ=z*iMDJz%bAza%C@q!`*DH{vpiBcGtUIry7=YX=6YB@c2;X8zp+8)E zgv@Keev9?)!(JFwI^4JORF9&ic$AT7!5bg)XO9X9GZ3mQeq5QQdE*Xq_d>3~FRh=G z@i2Mrya^^3npA~Z)qy4jg5^zZMUPkts#^l&Jy-JHaZ&8pKTPBf>U4YyGLy3^O3(BJ zJ0oX75P`@O>Cf{?^lM&wkdp#8xTJjKc8+6vT*8}{^U8EIk6CGGF{SI%1-062QeA@8 z4uib1nBX3+&_XaUWutX~<3!Ap$*ZtRZ%MANm>`QAc{Laj5vkjA4cu)3&V#^btC5wif$Ay`BGC@75RHAnz%g{&C2)j1nP9nZZX1Ps5PxG`oi_}CZwouHE<%;ZxoI;jE{E>2@@1$)3|~6k zfMsa-H9`{9kD!n6zV?^$NFUQODU3gD2O$qKUyRt#flRtf@W)l7eKrU39HMGh8iP`i zw1l_7tyt)V0U?Tu3&*+Zprs+<}VCRb9GM;t){qcx=i`SnaGZSF$7 z^|lLjir>Ai%EsEoxEgM%#neUGKp|?>_e#+|T!nR&i0KlNklV(J$lL&UeJ4l}IQF2D zrLq9B)=+Ijt$yNT+~m^%rs$x7%w$ z06==Zr|Muytgpb4FIuT+;WIXzs5-tTfnb=EFhwaPe}-~xeh!P~!t-dkV}GG?H6;xR zqbCzXc@aJ^4<}YKZ6u7(+2M#_EfphYI)~2W*}RmJb01_tpq}Ur;-Q?v)bw6mopN*ZW*}dX;DnVOjZfX~;VC;_X?HxV|6lp)~li)Y-m@QAU_ygJ1SOgsb;Dp+eBX zYoQygVoOQDDC5uYRD zQ)w5&Jq0qgm`BiBz;^|5wB-BNC{d-D)4O>MsH1*YMWN-dvuA)Fj;6%}ED`1Uz|*J* zH63r@M<41DJy&;#BGkuuSX5*}lVH9!fzDLqGb;uAggR+B2Mr+f@UWdket4q1E1zM-l7cjb$^`R8PYdc~id^~I`MyywMN3!nR5mMUo08~4yNRkHXcjWI zU;MMi1kF=HRiGUKzy;(|kjF7kDfgZ1!D=_0$BXA=InNM4dS`2!7zz|)rho$G{0yGP zTgI3Do^mKhndDEmDiZpxA=)t3$tz4LG9H~u!5>$N_Sq_|4cxt!$aN@(8)PQZ$oSFg z7(b_DytxecBrWBbbddrCllL&*n35kd@53>qCRa?H=_sCD7S zIF5>}^ZD3Hq>v|qoq=A=vkM@P8IT8Or{B5UQ!th2IT<)oSs4g<3WW+20&2OxfTidu zDYRR89EZH|pM87H1MQ%#T)Huag_JZKcN#JyuLas9xeZK}GP7sI%NhHPu^5g*g@*mD zc`-c0)Ly{h7YoRA5--CrDzh$>5b@y34&212j2Le7MzA}|fuvAx2e7M#6n5Z&BtS;pH z4UMHfo){q}ZnSiG!oI>+koJ)WlK*+un)KN|cPR-W6U~K)3X_FCO`eO2r4MHa?48IW zCRTr-pb|qb zh+IC?Z(XK|oR4}s<%1SBC;?Om63gzw5=^4XvPGbBH-zjZVfJ=Nd*w%n0cH zGs+KDk_`RPA>RR1ZKpPBteh5_3XCfC>ZEQ~BvmG{O*rYU%9}!4$|Nx47l9uEoJ(6x zDN#}2YU#Tr>A8`KCBb7GFYfK`l1>Kdn+NrCl2fl-8GZ-|g}o<)O4)YS9Flm&84Vft zo)qLqJ{myBeX)8_>rfGpD@^-n4kU9-t^yaHEmb2cAXqdxf>b6zrs*}9&WONtDGNJr zA-^|Vs%%{?0H8ySs)1xnKZ%?*ETIVqy1eLWJ#T`n@;&vX-yc$v77s!*jVsSQ7{vNm zXbrBr=ZMPbxcPb?jW#GtV}ZJtpi*Y|Ddb+_g=LPk=!24C4-)3#KpPRjBX8qNil&7A zInX1><(>mPDSc`4FHBCE3&@2`0zWC(Ahd!?5bJ0O$c!Ug zeq02A%m%IaBX-G*pv7`wH?&W5#S_kLh;}%9FS5Xdr}0L`rsZkf@IB}qc*9-jd+cY{ zu`XpJq45HRCdkZ{qJ0>`x06I-Vt?|~*kinJe zipQ~Kc>xd+fR9>6xb!oE5aV@bUoH{VZ%1PrU}d09dqtdbjDSPr-FA!(=R$FSDcJP^ zT&)&x4M9z#V8}B(x5+#mP_PuT$7QbyXc}U%Jcz1888K9b`5LcLDM5RqM`@spyvx^H zJG_PJRclTug)`Z&bPIIGF3|1DGRJ0w2flBh}=;;2G04? zVhqDV*{LpEmgP?M(RY8a$|BUC<|I8;lPu8KRXu1Yf;`x=oeLHIsGDMw3qUP z0dtiM?|rrkYosg0h|5|`5Sa?t!~iV)2|U5&Rh!e`nSxxze&BL8{|wlP{2&5r#{m%m z7ytk&&>$!#AxD7C<@D<{fR2!^k7wU%Z%ON*^E2zt!$B~?Je(Iq9`M}J_W&^V8wPO2 zBS_0ZaadX|bwR#Gpv7m?J@!Bn-w=tc!Ma3IaTp2bVs(L6*e>jATs(n&(lzRCKpH^W z6kg6~%&U*-h};Rh#C88Wydy|UWlqDqVR+2?gNUMWfX0O?PewjasY_Z#nD1TK+w~o9 zd9qUsWh9puN1^NG6tMXAaxT-!R=Mr!rge{fQWOa}rU*AABns6Pp#3!m@ng}V~O2=frP0uA2B4V4gCSI{-<*dwPHH%ja&P67wPOwE_M2oS@;RaJS zdi;g8Xqr67)l?kY9GdTrd8blOod-%ygI&6qhRA~sDm^WYLDT4O+hI+pfPD>7nF4C~ zXQ%*Cyf;z@p)1vsJ=Qhn&9N;|wt6rQWJ9@|6s`Tp&$_u3A}4}&>TU!qg0^WneW)*y zQ_|7$W~uYEOQ3jS{ZNdtER(-n7sY*j7T;!=lNY%rUl(vPC$CsQcuEza9aBb<8>=g? zR9Yt`Ciz}zUy@5AcTQQQ*od0%M33XLXRC~j=WWTy$LF%IhVn@Dr~N`LE&jB0nYkv< zHh(v4sj?7;&n=pk@kYUyER^H2S(}8FVyzTwyjcCT0sO{m3-Cnj{3D3pR|ng{?rvRj z$bCj$8cgU||r*a$b+XK#dkV!}B9`#dWZBxb{A087#0c7{oQQC^ll3H-@wn zsC00+<9oC`DU;|5WD%hBJAy+zrXK6)<}_gcfz>&G$Nd~`X)81p^KMy-DGLSw28Cp2 zQNdq)L!tIRq7D;PC&}u@M+J0U?rA*GJgGq-Cm6EQ=UVb(^@e((k)iDruIGNr9wKN1 zfUKrPx#PkK z{Z=I-kbe?jw!xR~cV3ZD_|!qb0Z0(Q3`B7d=6_TnExL}}`w-IgGL1gvBQ}6Aje!KT z&l;`ea;*^UcoeD!9)Ti^XGmf8T3=LBBlQ{NEL~27=Yj!#I_0CGJ!g6M9z?YbT`&=~ z9;yU8sVC+IKXbnEWZX?{O=&u)7w~{U$>KeNd&C};^|OZt=&G$Q<^gqaijl~Ha4W6r zL+y7d!zUh7@03J&BqSmmCs+;rru&%6`$0HACdEiV%`4O>McmjmuZhYed8@uE_XIq2 zn<`OQbLVZvM#%Hs1BtzREfbDV3g2^wj~jt>4x}fTpksAw%f1g4AO){UMkOura~&vt zd27p!$F=g(*r=p`9n}hli0V**{u9y=O>ts;tu3N4F7G95X8>RWO8^)2NOXYN#aRwu5qAqq+Yo^ijSiP{)c_?o6=ZCjr; zz|5WrGQW0g_<*67202OAShJVG-+d? z>w|fwZzLQ^Ur%Y4CXrd(WI3>b^<<%s7893n5EZZ|02mwW6a+N`HN(Kwa&d6Sl~_r^ zt$RZ?+k8cFeB}vtv*aKj5qlQh95*0UVdx$iD)n`X0B}NE8lVsN6cAllp~pHGipR7^ z%MiUcKq$5bFxxdjM+$M0~fl6E`XCZ1IC5kmv8Z0}{{FLhr?e_r&u^ z0p32TC;_b=<`-XPweCtCT^J~ku57}255#t@XTJeZwNAU^M#2ERYVb(z5W58hF%{)f z=1@vSqmvT(h~B;}pJy-o=GEp5CwZAtEXr^pJoIs_!}B|Y#X-8SNs_0(Wdgu-o^(PC zHYXWCDoRd*>Q0B(e;8ISDbN7;BM`Y5E|K$4)bdON51vB{S|IBJhA76MD6pM*kRkBd zNm_YCan7Z(OtoG1gM1l8WkX;7-FNlGI!E3?+fm00lv6w)_Mt%lD&r62Nu39OCZ{7S zkIxjR_|Ty}1F?PVJ1b8wV0)>6y^yc-#3b@w0(o#Fsq5@A*K7h0u}#h+1K!%>*mm+8 z>r%RYLwS%lDlf|x^ALZH0mupKq4iXQhdo1W4_1(0b{zoy+ZVp)Y@J7Ko_+S3Y(6W@ zWl65sLgk25F^ZjHVTt+q9>M~ExpoOgQq&kY60!xegcRjH;brG3KAq+dVDu?4>tT%P zI|!tLoeC;T8%PZ}U^NzpJbD0$bdRVGQv?vx%Eosl=qi`8vIUOH23EQFaqq>$P1XYN zxo}Yc6|K7iGl5W*c#zTO>?J;+yrSi7ru9@^FbP&cRr_*nii* z@!IxsSr|rQ29bqUg}t$1LJs4VOTFv{6{XRKejUllQC_#7#HK6bZoH-nRZpEjR&W#s zE$}L!`Tkmkh0^|p4bC20ug83n|fYS3h5e_(Wf2jyHauZKy zMKIA1?E*Wjj(mD8%bjitRuDtJ6G%t~f;{lpA6ge`;zB!GpEMA|a$>YP4fNS79c8&w zbaBZq)#VAG6du0l%FqAkZ#{Xo=Qa?#@CuALZ5LL_(r(y*MwlNwW1>M}80EyKEOU81 z0J(;pG@bQ1EHOrpty)#aSK?hl@dnzuxrxh6Lkf>1qVTv zVi1FJ1q4NRsUvmd%f;1wSVuL&^nToQs`A`rd}w(l(-r_2^ut5lRd7M}(Ih(2wV^wn zO(nzV$g()D!b&IdWMPzij}eR&4Rg89LbUs3aO<=BL>yFDz9pR22^s*n*m{0eq^u&^ zSu8Ch-BcyH9kIF79u^$YWJjS`y>mmHmn6^z|9Gi4kv|@s0&YfJ*fh~f9!Jp{dHka;R0B*DIg zMF1$@wm~=lVfzIJu$9l^6upJ8fT_>(5LVU0`;_=1RSYP75oI&p9fe?>CBI|8wqH7N zPD>US09bL=K@d$A3tEXxzS;o*)q?C=K&KVpvbkw5y-&I%VwiB0+#UxChU9uIq$)!R z>7YGikJwEO(JA0EK9keAO?w&G?34WbNCYEncG|rzM4-FV{k5LqguAne>d=ek-2n&^ zdG86zt1n}D7KO$Vasvb+>?RnQ|3 zH2MS%B*!fAMI?)o{Gg)jhK}r7NF8b^cZc)X%O1 zz?Qnyz+%_JA6mF^fcF4!!C^E@(DDyphzi76zeJUV9TkIq#W@fI@E}4}s3U*JcauQ! ze0npPH)KkzD@=4D5@-jK134-6cJ-A~25yuj@vGNN!9tr{GlSQL%2$;k$2tb3L!lY= zVkga0bP~J(Fa`ImG*##EvJ%mHf;?OO120jDxff#P_AG*jhOhQjAvW0tIkK;4ty~4# zUm>hSLRXY73*%K2=!nKqHx;wfXSX0&mY%* z0>I1Jy>}{HPp8s$LdE<&!h0qtYbcP2T|dPN>=mPEa?3I^(qn%GO?JH&faB zk}h{escrbip*SeZ-Ekc=e{DNGNVdH8KNIdOU&&G;_L_lxh05ri216RT)!8084L0Yd?v4U11TxEq7#L$&8VtT|+ zSn4>ac4X(@xN1tnx*s79Wb^>+THpgJ1$TfYQQ6rZo@oIif;mBZ zY_EinJ6*YJ?OlPsvZLHXxh6AuPs$Am6+|VAz^C=WSFkqa2l6t*L`pwdxJsYtOFE)9 z_-o$U4yBEoXY(h%PF6qG>op6*r} z0s-wd90!3`vgX4Xz&PYxYF(tB!^5Uq2qxSeio)O^So%m{SSg4=driqQxp!Y6FylKH ztUfx(iCjp|(n(oWWo>0&N40qIm9Ft+Rl1T*F@%uMTmTk9J^j|@oIPy(%bA$f+Bx=3 z<%iHoJmnSiq3e6sCh>VPc?F4zMjWbnxlsj$iwo4+)^@DBlE$84kked#-<38i&$`~v zqhK3RHu2mrQ#`q>l`4>2V9BHG$%=iaf}%>Lls$c4<}zGpRLB_(*zfkJly)0$N&87$ zUfR#r-O99%p6`b#(lx6)3Q73n#=VL1!Y9gywUY@aSS=b7F)Jt|PZBn>^4mqAm4mJ{ zf&zktd%pyHmkesIf576I^7WlJS!+_t3n~XkvH-%k0R)ej^_qF28y*obY|@+k9u{mT z2R>~&n@9*P!07^lF2jm74>09!>MM{l2iw`roIzWe4&c+eE4aN@wWF z31U`=AG75JX+&<UC)VZ;%_e^prNYvx7MfZEHu+FZmN+ zqHx2RmM9CQ zDz#FE@rLr~y}5jpNp6f9PTJQ~qM}5uH0{HEAWYXZ8M1*y;P;F$<6(+v7daKRpr^t{ z%Pt+KQ6A2NL~JvmUNc2R0bs>fi^$=432WiQ`8jNfX;ai2z%ZcUHHze_lk>oKyAT6DlbMTi8`1KY(nKbf}K{&=3g2fmBTYo8rX-ZtX1LRarP)8$_}jq)=3Q; zZL%6axCEVnzmh*eXZY8Mb2J2S$%jzXiVUfXGAZ@aGV%0lGa|Uu7evsvnLID2ewwZ( zFVCI6$#gZ8ht_4E(N*HaB_*L+5Bg4C4hhD!OtxHJR50=&;WBU~k0RVRVLkwdqF{ie z!P%GmH7^ClE({YH_F9F>Ez((xB|Nm<5O@nQ_j`OhYeeUoc-g_7bfCC7^AP5PRNK-|EA|*u@ zDJirqhO|?$%_J(PDsd&GY^j)XBs;cJ6`^9s6;*|CNtW!AN=f9Y$~G3&5;S$@Ht$4heL@3WnC_oURP{?2PhY5 z4>?DG&YKy=Bq%e0Oy02zdTovkfsC=xD2F6#Z1>}ERza}Gfc2V09|U-e(s;qZls7<> zE4nux`aY21t%RUmu`znBq@+-zwwB1&yezN#*#iSoGX+oc1<|Wl670jy;B2IPlta#8 z9+Kjs{Upe-9jJ(&T>9FEgB?r8gP`1afS-XBh-4B;+8Hg_e1-;1KnJ4S@ckwjULdR*KTOjIo1n}DdIh}# zU_I}^r#uO)#4^GZUuO+2?@fO!UItno)t5FHJy*7ruVvd7+F6FzP0{};zVcRk+j{Ps zgl3O*H++JwnjBkSCUWu>XmjI||7FK5OP5(XHmp$(1hnyH2N#TBV6GOrqr>uC_T%)} zg|>AcaF2-HdmT`D(JO0%K|qg(OZfv>`kWgkUU!f2^agIo@@2`HwV^K&KQtje-o#In zgXPfcbH*}#FCAz{5LcqY7`Lam%osyiu#6?L%!%gbT<;L&MVaI+J@)BGnW9cgFg%3m z0YSSePT`xTak9*(VULm68#m36fFcqWM(ihtI>284Dln0+EBGz&unq-leK*-7qv)s{ zC0?RuVZ9KN{5s;0$fnbu!!leN6+vGpm5(*?&*_@2+`!ZOk0rddkb)8uxigP?;Bru1 zd4<`=VHG2e5O+3W{+@Q_GjU`&c&}Z&;Ypt@5^>|pp+#`sr{u;eMDBeWN=~tD;hXEw z*fbz7EWh*o({~W3r6C24TmTqVGIq9V4z3Il1Akoy6Ek+u_5{Ca@I&{Onz(} zJ>9rAUGq2Os{ys)IOOITZJg_Xd&$r!2iQ46!nvyt!xr`jG24(!^45`raU~fJ1z}vS z=b_K*VT(#UM6O*Lr?)Do}6Ot0e*QXAwaP`0?_SD;L|@{c6XFX7^ku~5FuNYuE=6UluH zhinbHD5FKeVJX9qw_JI;4+M<}9pwc!bHLTVjdAt8|YN>t{fY zK?pAnV#U*>Y@Gg`B@!KtK~{#`JAjuO8F7sYgv99L9U>fm<53RI*a#K9YkeHOTU!A` zsr$@1HJ%m<2v}guJa58c$_-021L@gV76zk$Ll(}HhWOm_+fx2heAuvc9zkW-2BUyR zDE3N}L|s+ObYfV@8#t7~fELJv{in*IwA)zHKRCq5k=Q{TtGs(h_CRd$8 zG?Hli8SIPKBlo`G~M)ljz4I1bQJ2m#m5(*d=LMufn<^s1@B^I_9Nu zE^6AWlt{W|-!P-69gRhaeDpV-7X?|H^h9(#ybm{<%}lxNBUu-Ar4EfVcx;i3kXQ%6 zq_1E&&YQyYF-N?5ttHcNBvst!p-H;NZjn+bpC{&toXLm7bcsDl4#m^!LQ~_O$P>@` zQbg~YFrNOu!&b2o6^BfW+-+TX{&ZxmX%i4Kln3XKvQe8FLMjcrN;cl9v*OB#JyG|Y zpo%yf^A;?JHv&Z48=H24u@FRr=e5~fAL+3rdOs_wes77qu_ban3s(=2C!HUQ!&;*2 z`qRZ+bn(U`#oEs3$gy6N=t3_cs7j}%hQ!pBwf7)~w-F|#G_K;j8p}R(mtpcQ-J1Rs zXA``e{<7{Bz*nbQu2Pt$4UIe)7)pvPK&nd-XS7)V#XQG*;kxy-px_W?%3S`59)2WL zy~d?5EqSAcvTkylBoJdYLG22U?8x^V?81wZ(G^NqeCRF z*Fl*~wON^iS};UfPAtE!fMS`JGxmNaai(YWH}XD~iHY12WMSw@B-tQQGUkCY5o;b= zFl4zG0uQCnAq~OnoDC7{5Z2JzfboRtVAXJ<0WnBqY12|avi+j8%Ll0gLH;K)n=<$OGS?D7xym3+jfZO2fE zCqHLgnvgH{qz73g5S1&BTPY=;@Tmd9Z-K-q5E=mqgcV9gz{mrt0^;Ma^T{Zb7l!6A z?jB~$lAH#y0byxm@rEY{RIBmb#Ub z!=}QVKmWwhV!e7G#p`qv0V`8AAyhCl5Ss%LPG?*7!PzyULE$7nugZ(P1WZAPq^!+= z!LUYc+Db-R5)|3lJjn*ADbO=DKEC}((w;Dj$m|JzX{B|H_CZZ(!sNvqIJOI zyxXvX#~sIk3(H_K8x5x}tK}dE3_?MTu}2e^sUi;{IV#cN=1z^<86Nh@VO`@3wHz@q zh$xl=iJrV3X}r#uQ#LkuTnidOGem=OdOaKU4(Je!3lgc;9riE@90IEsOj~>ylQ#v~ z$=IeWA7}vxpC2PNz15xT3={B@%VBAQa#-&S{s?79Xa)CTrP z5NG0*KvDybO1X4njx4*N;g1o9VjCjuSGA>TxlSDb_3ihOf4Sg*qrk53Lc4-U^G zL+B9{ltNq5pkSoDz;+AIqRK?1E=^9ud3lhu5)hJ0X*J969A^TM#y3=LOS9Jh)**nB zY}BwxFnG3eUUK8hY>`D~*;GQoLLu3cCwR942g+zhB?%h6I}?Xc@f{8p2gHqpi9H8} z9X2W6Sn0D^FZx}}WjoPBo>BHHHZ@>aRy1fswBR)0+ziSE3AP9*ZyO95>WvwP);*e? z4QvilAWJn0n3o_Ay@szGP@~&Id8P4nCJ?_y+y65j=gv?h$-`Ib+AtUn@x}w+9fG21 zg3*>x1~k4zY*+h^1TYlWm1FWhOQu-_R<(+WW)}{gTrZ&&^2sB1tX?pj|K;f zhFkR%^4G(L4hyTJ^byoD!TM#NuJ$D2J5sP-1Y{76CB9LRebtzp^+R9qrF(2pCax~T zr-zL}>xSUjNmJr1ca8!9Sqf$2Bc@|Oz)WOEvlAGKU?e6GI205O7gP#E+p;2}Y(a-o zv(63+B&;hndu$Rr8E9HZjrAJBinafu<3*4-uZka7N6FV7>E=KBhQQh57ZKXfzVYon!Kb?%}n-!C}*hB7prSX2Zx2sAW{Bq^Ea(G zMw(=tcbLW1VUQ1ke4zmlxQ{XxG!*HcEqi7do&kL#kar8Z9EYcd%T35f(lw1U0*BUA zMz*Lz^+CM+@OXO6!%&766G=ytNNIxH?=;tIL=-|Yyk<7%*$g5WS9jzNRD`w3bgzx< zZ1NgkZ=KU(IxehN4@B&rBf^U8~e zBg(JBrJO9GheNsX698L4q`!v-85J9g(uZ@$&G>`o)F_O9>|83L-1sa{t3*aq(y_<5 z5QX^XZLAz7ds~_sj*_uzL!&0~#zTkk>{Y)Uio!s$Kom}{SQhr=uIZq`z`Qb)QOR4t zXtp6g@%*z?r0fYpx+orJ^eD&*2)PYL-SwDaq~wWRP=2Aj(U3@#ljMaFcn$YLnL`23 z_IW#4EGBVdhR6K*cAH%~1{0DKMtP~8m|>t?MjPf5^3DoPjjg11j_(3$P*j}r(FWZ* z3asG})-g!o1p_u)4(ukt{-Zi>Q7UmNvKo|eABce0$>Uo9MLnXBq?EJKv>`j%kcgb8 zKBTRap3OA7Sh691DKEosVe5V9q#|Y`zsp^+Q4uIK#OnwX$rl1OfxwVFv7xq{hlt|P z6#?-vT(_iwRO3*Dt_HGIZRCe!i2S5I1A#=tHIPXgo)6`>u<)EnCgHe(hXTo)tjHTD zOe^-<(76?im%Qvvoh9T`$dwhn?~)7%;&VF3J{^t3wXz$P5sW5*K>^8YHW4L z*ff~N&3stk5&AB3fq6#;gW(*phWy)T**~M7-pLtLSKkG#|8bD{noXi3gWQY=MuXux zj-Mo7W{<|*=++}p0!&JgyTFnajbV3pvIfqBCYo%{%IS`cX&Ltf2zdf$aziT;3DUWV znirzj)prkB{skHeJCef2uiiVJ8tcf7$qj*UAxSHGle6IN3&A>jay>bfM*|bheYjc6 z&IrXcd)Qf9lJkuFZZu3Bu0ZcosGNp58>#F#VUNK117{qWCP(~F3{<)=K)k98s2_3v zP^^B7lgP!AsAF=z}qKA$f3pSJlm8XeW~26Tw>cLBq+wY3Fl;IjB^BnZ;ArRkIm zO8O-bx+PCznzuH{tA+M8lnL6So2OCv#-Te%i&n_|sIX>pAVfE{{pcYpE&@6CXwqLg zRNB8;P&IE@x5pE&-ge7!@Kh)_a@W&re}V9*%jq}69uo3;f%=5X zZoMEO$O!qKMv@Vy)46lJ`S3^gO6Z{5M}_t3fgF<%UQiSz%9AU7TiLWnn4-6t2~h0l zc8#e?ElASlyEd#s!X(9>NxvEHMFN4eu~&m0YfsP{vst>YE>fOA*W=qo6M*#nz`S5yDUgDd_7bNQOV#a z;h;B)Mnq7K87MD%PRHJfCMWdb5TFW0djnCfV6&Xg#2yRbrb2ue;u5&rHvSqCsCnI( zPs;hUG%4g4j5-B*FqFUlw7S%^WxBC7^L=V-EFgnXaBP_#KO20I$o0BR*4mqZW!74T z8S1OXq3zL?L02wG8N7bkMZW^jBYuS8arT#(h^D4eLFl5@`v8J zo>Qc%B5-gR$2i!>OQAaSKCXt+h}?1R={G@pMY%{YG}%CULbNh5Wg|t|SjGK148{P} zDb~Ht_e7|{0QIqaA<>ympkW}gMHZI#q*v%*Xjm+x>mjHvr|UNKLRp3kh765|#-Z|Y zZ2%^y(HNK^CZ9iuZV0nKKkyOS*PyRpf$U^y=cRe!3K30=9R#s+)p%+Marnye8@j|e z`fT5l{OTln522eI)&gQdeC_svpAjewx*kajRT+n;gZrrsT9?^2;NdVB1sqbC7$3?C zZZ-lMvyo;KipNcE>=R}p%I`}U6Xg`ponT73NFcvT6uoRFnhw=aKYt@AB5XgSu>o?` zczU#c<8jU&1+od`uH)9)o0$+lK1&4km542rYmy*_75IaD1bMJ)G$ku69u6_#a0(K& zguDr+nMisS5o5lMV>##F>7r!0p~FK2Mpg}WOYUeI!9Skr2UEd-hwoTMa}1i9mzd;C z+563{4dyej#8WrX3d5~sa~nb_*P%Ig(H6nqU~sK+nf%lx2qIb8;xR)nGS+V&2-8ad zW(|mq zhxC?k=puTNx$%z%Sr;|LvbY`MKsuAp!oA>6cp0Y3u}yqT69cWiiBdW!4`I>c8VTXiDU|uV!<2B|*?tO6?3CAx4g87v6a< zoXgS%y`U&7_J-E=Qc`{813lT2NyR3fBuf7C2(ey05D@lFjba%>Wp`it{U5_*y5#e8 zoar%=9gT%ffa=gzh>)yX48};+3>)yOyvCt};dV0(x?C(=K7A?K-LO}KrZSkWPkJkC zX|?GfL1*niKwM}$*h{f?&E$IwNMMx9rv?~BX?qEp6~-2bP)Q33Q%TDiSxydvcmgew zDP$bIXaPfNMqRvDibuS+L~aA1>yb1-@GwkhLt?26dY+idLx+&C=Zy16NQ|~;M(ZcU zJ3I?RcesKO>uGotjTwcyC8$%Tl?N1R9uDSnLX7gs$C=;*+VjAj>K$80vrR@ZzJJ~cZlD7h;D&|`WBj{`(c=KY=q$Y;(Nsf z7|@hHj3X;?jN!=>FnKak0wQQ+j`Z|CCX5yiS z`FU>;%==uGU-EKAPjR?6wSZ*34a+AOi4fGSXoE23MHcesJW$B9JFpP$y8{I&6Sp%A zl!iNaIuDpkD)%S9!W!w6hF=|zKUMk}n4i9>rD?-D$E;Y^}#2R(T* z(Q;#YEgE?QSk<&m$X&BuW$WjDhBQ@n!LW$N*ZRCE$>Kqd4DyP9E>8BtUJ{60>kK_| z&CA4)K^T)+6Z9?QEuJ?8YB$6=ZX_H7j56bbh}k~#Dnrh)PAyX>*qOYX+-qvnbvw9| zpsmCG!B~L)YXto;_tKg>6dVq0jjD1KShG10p|2Uw3}H4Q#BP+6j}oIvkGeXbh9 z)4ErgqaH*98ed1OgzPqlQkIM97(+Rb+>y9be41}za_=kA{1A}7#*LdkEgY5QVs$K8 zr}Y3(XLOr_VF}S;{aepIwXa-G41{@9M~!VgQiBLBazO+>j^vF9 zMbcGcq;WWo%@3~DBG^;ZW1_doc)68{#7^>L-H`z&_HlA8$_Xm*a9Jy@`YZIc};p?U^{wa=sovXw)r%yag0`qMUN}8@>lVR zCn?}ih-MehFq%9{fm?;9WB!nL9Tu`74$9=EA<}As8+5>T}!c7R5_t@g4_=qaz@Uj?fkenL^>Gkf*@ZNM%g5cquA)$@CUIP-G zBNJ`3ptN?KVnY@q@@Y>XH9%p)rsxfdP%wcmY-DN7w>CO`^W3BdB{@&(`QtteL61)I z7(W9Ss39Sg7v=kyeS71e?kRwMB6b9d1X3V!q!NpaN3!E2GJ2xK@fr5@Mv(8;uTYA; zF6StacP!k#6e73jEvcM;cMNb?+=tYlEYkBWJkx}FRL8~m8S^6Kj#}|cbj8ZRVMSaU z^xs}z;Ip5<3lT2*(0LDc0H}>Qfu5(^Gcf+caFak9?9*yma?89W)nubF-l>{ zc`iqXH5|gaiJ^)g86(y#G-`pzR1xt_fEsdCOxQ2tj0-s4JeixIz%k2?17x_m^q`6tnzGhWQNOUVQ+Hb$YO z989y}uP?R_XGe8|*VTKS9CVsFSD=!BE=RQuT$*&_8>x!gd5#2)oM}Sh&{lkr+0Sw0 z?!Mra33K>0_EhcxX=BtfXgo4)oSH@?Tq9~o9gV9R9gWju#@R)qo>1n_5fvlF(UzbrunyJ;kc(G)eHXCm0rbV z3RYR8##$+(wdCtS~LHNc@wswo}z_G+xvL0bM zpq;65S-y$f>Cx8HCJ1NounpxoLxNTsmHddXMn{>v*rjKB(Sh2^g|tD@hejSkH0jPb zb}tZRU_nhLD48SrbOVojK;A&*wg#uyDZ5Wd*xFY5V<24lgyH$I@b)4p5C*uhZ*7OPuV7PCF2-*Xe7ABA{i*t1J z`4rdGsUed+_ByN=NaWloitUeW=4EI)o*@9YPwz*I?k#xVb#1=iQMl+Adj=PKQ}V>j4oR2ZgSY0TDVz zL;4~EC@Fmm-O=GQlk33aMrHy^CT^+bNH8)EeQ84zNFqJwo*{B)Bn{zU_hNs^d1*kV z`f6D1`Y)vgCPhza%*@ypadD&?$UH=Vn+R1bk`i}kBLQ(M>1f`S46N;NAhAFqI9y<# zLT;$Xj3g3(P(Fu@@-xn$gZwdWlRf1#rUV*$9Hw&fE1a*nrLiFMXkhev=`cdHlP&U& zsu2=5#r7E3e1p~o!97@e zcm=yL*nRX*_rmWFRMcbL2ZO?4Bv$-0)|F@S_Ljr_@Hi5yDmSOiYE2l|9&Uq@A~7+W zZ6j>CeyL+@nmJRVOQSdq1qig0f#k)JrS_bln1m@PamI2}Bp@g^#^Vey=j(3AJ2ZL< zGNB|77bgTn`MPp)HXhgmne05rxeTJooI?X#hkH9v9_)nWwN~E)!htibBdl?8Sczwf z6w*WaN-l$v-tZjE3oVC>Y^4H6E4*l5mQ5)sO(bBG$Zj$S^a!LmEoLX2pp7 z`%8p;3!5IYNZe}>otVc<9Ouo!h*vWr`hQe37m&DT(F)vH`nXR)k!$4E|4L?d`aFHGxT6upH`_?OOOt;mq!E7Yew+IUvpxDY>UIS zNF`7=_@b)CVrdnqGadrnFw8QjffJVLvt*rS%8N6Q25{FtI)bPQcn_PCSR_gQ1PgFX z0geZ2v0H2;JgO@w(v{)8SCR3_T5y8G#H`tgDQqt~}%*bJv5zm35(lEgral zMpB;?=!X#HeIocyo2Wauq(171mL2N}%ZUaQm+F%05DVz5xO2Dk>M@L9t=SNktHhfe zgO)h|!ZGkXeV-*S#uUpMRPJ4{Yg$UblpAom+q4Dp&`DV!sW@z*-lPNPy#%^?OD98f z5n;B5^EGv$@=K${4UK6+dSjPF8ZSK14mrG3eSEC;sdv?#%t zr1Wt}Ld369L2(+P0+9{m+T=FbGRUIw%XW=yh@8g_nVk$f#osDRlMm74z20s}N000v zPlC=M&@>OK0`A~Ip5})ODrZNKq2^n&kKRJ3W&MPGDVVUY}kogKvN zJuf2Xq4gh!jXAp`q+tV=Wfe$(0)d(*1!)Nw!Z9!GA~W-V?Nb|~J*PbscAmQ(Jpy^d zdseKJ1PW_IzAgkY+rjQayG&k4ku|OEEr%I9;!id^Jc6$6)MC1j^Ol$6gA zK^oeVb3L3k$7Krxh|EKt?3oZCjWB^8cP?w5Y|aD%wi) z6w1qeX=;Q@MhguKQz1V>zWJbBp!{k)nS6dsW-!OshgmF_B+#|ab9A_fUXlSD6S99b z9nCK&kqsS+FONALl>9S=8MLt?NgNT@YzS-Rj~6=fBLY|iJ3l<% z9ad8$l2yeYLJK@AoRmgjm?O8GK{;uvKk8+h=SvoyGaM!FUY|$r*0Md2g!qPQHz+kY zA~#_Utl=9fK*()wbKQ6#VsFUE4*?K454LRlU>FYX1!9c73+Ej|e9`blauLi!BwGn` zB~Q3kH}EXws?P>tuwYO=rpb$);=Yz>cyQQf2;V}B;VCJjJh8rX(ie44v*Bb)G(8rd zGO_B($`s-l!ZrD~H5DfJ*2sx-gicZ~pJnRrb6!HP#^Uh39^<`eY(#wg=sY;bhk^`K z`PBKrHc>h~*z`dyD}?|@j5V4>4@~FjZ%&BqbozxB_TUcBmuHUrnd60gk`KH_DVil$K6*W4abg zlk;SG527{s07=bS&$j3tMt_B&ti;~HDw)}Mys#g338c>}a=j$!|1Q0 zft$hHkELZjQ?^f)XB@J^{UHSRbP2DUP*3^e$nD91p|heogw9dKM9yGnEh22lOh=A2 z8o~;nHzigT0yIAxx!s9D$RWn8}OkjdBc{!{nerAPLXT-g8dj+BDHTN8ci7;)@xL1d0Z+N9mp1SRVZ}PaTG9T4O!(5ZEY5 zxx7df41_Q_1}1$$0(V9Mt|QS8Ka;oV;?zIR*KD~pW}7_`#Zz9vZclqtP(Cw68dnp- zp$<(&XK`VE^ngQ^Uwl06_`X*30+h;@R_z!;Z+O^6Ci6eK_D zGf(g6b2Ggmkak1%ZV=6HHnwB>u6HEZ#>jrC%rx~Dl{z)hWg|yEkG@7jSVAueFn$Tl zWtUu2x0XLBP&4*Ov~lJjV=rVNf6=w;Y|%={L-bgjCrRFM(N6&)5+pT5VvkirR1&`7 zY8E#aB000#Sd7duKSbue4MTpoxsGV!c{5lc335PVp(NghG8>OeZosjZhUuWkuh)U| z4DKXbaUT;^ARrJmG>+`Gd@()D1N(Ag-D! z@f*X-R5niY$pX)oTbJpGv0g)1!zbOmu*wE4N9{Cr8h`JN51BqRj=51ch4SgVlDrZ2 zvI+!>{+)N5*vCTS2V;(T-e5WLQc6HRu@DReGX^1KvuDyY*++V zQk7(Agi16ac>-M^@o6yR)6x|f>I1nApBgFD3Bz;3J_D$$XtZrLBIR=7GnS0zt0i|Z zVJl2Swy`9C=VS3<_-gt~@{_`lShmQ`5j|ay1iHZ81cMOMfkI zR9HS82ontlriJCxn>w`U_K-l`YW+YGHYAhdm0Y(7A^%Pgh;PyhC33IQwe*4-rjHe%1nT*iYgN3WW*#P%JcNXppQNs@IYUT~+yDJ|{ij3Xj-v%gtHoT5?2I zrg+jq*8|WI0n{V*?ad4gP3w5ce*gQj|K2|%jp4wx!+Q zy7~+qG1llbUUCX}^MXAqIC>>xrCGYJUS~r)L7 z9gqilcy{zOtPBxo@Ec8D;*$wkk2Zl9@0h_D|HX}0)*Bh(&6##5uhJ+3ZG1?YNEUh> zhk8^-qxS|2sx`cpEy>0Vg+LEYLhp<6a#+R<1|WAcWI>OW=%bMwAmn>4h4k$i@>-?O z;Su3_wwm_7O1)Br%E#T4sX=H%IZ;nl_5{7XXxOPxHchkzqDLLZUKZxrj1SEpp7D3C}rVuKFh@>$4KBjnEyLu16`-puF> zOA?kl*G%IAIXbx$O?ce$7&u-X2ZAj$Q|%lhW#$Wu})f0uG|BewS4ZxyKj4RhmIEO zVL*QKL)YoV&+X8P`dmNUAfwvCI4~0DXM2Sj+sU|ucQhevji^cNFg(Kf^xJXCVJ79+ zxO&V|BN6c%n3VA1kVQOZ!+HS(4TW=w7j5erxJ8zJ`MD1NozRfzOS4ix9m}G_B}xhn zcQ!plqg>DUMk?9a^=b zK>ituXEL=5IW|-!JtYS-ZUYfOo^04^d`eR5#W@eX=cfWk7SWjO@W$j3_jy@1fh8Hk6$U?RzBJ*kIHWan08 z(i(y3MI$!U2Tf&Z&!l*?JSFaOy(-B!)Ij1f;w3U?Anum^5LfI85s<#-2MvIMeJxJ7 zHiYA(-;PT~CQgeE@eJW1tfa6ELg@e1c?5k&&S-Ran0HvxIJd9_sY=%aIbqTws{{%8 zk9C}$#z)dnSWEk7w!2{}G*d+07`PuEri4B}zOAU@wp!}(vt3@McJWJe3|Jcjvinbr(xuFf4*30}TA&uoR?~Z!0n{ING(IIRqp>c9JrCv{j^ucV(y$G=-qTXVAJnhBPz0S`xB55%bkL!7~|)sU);DLf`)gbs}! z=M$nn^SKAD0N6^1r^#vx-c{wiB7DwnPC`DMv^s>At;t60~^QUdr-7I zk#vnD!3a%^t9WA-JHk52iw1~8{!Eq(1Wr^O*3x>_NZe2o8l|>i3~^a5=kmF^m4>{5 z1_e;U&jxqAF;Ekbd;i?v#S3f(m67Px+0bF8CP$OWU&PLR8?Q@RFfvXo_n4=iMMK_u zAC|K6*dw2(x@es;;%Yt=ZZ-(&kWqTJn=hbKdk3DwjdS$b$TLCz0R5%KWWqW<|>gG=!{NRVK(J^3c49ElTxb*SI{?+YI$w|I{ z%2rP5&?=cGvwcJm_81IGZjD5!*yb9K-+RGtrQjQB$Vb3+WFSFn8>x}%G3dj1J~VV=J(>^=1?eEGrN?wwCC+aQ zWkIi)2v`1QBLhV3PBsR436R4SuZw~TVV{i32hpDHN_wWhv7EN67+>T!S`pUrre)Ixtu@uv&{BT+;DJB!3v^6a z8w2viFaEj9n@|7rKc2sS;|JUgW6xkj7?^HiNGOLpYGY!=h^#hETXR2pdomu+tU8j& zc?L#DiQjglb0TfY%X;04s}vqR`1F{2p%TG$&ANo_VjCZNGa`ZT!k&)QK&-JrLJ~7$ z?Su12G;aEMxGioGo@c<6J4HL`aH3EApxcY1?ETl;UZ;K??o8Z7(Hl(EiD3{6V z6DP|h&11oQ&XQ?z_@NpuZWGztu+P{_?SJPXrQAB2eiaapLp*)hWlCcqd8TSk<0_zo zbVXOa9k?;P(Pijo75X?D#@+x3gmRf}-Y#C#AFFz=cB!3SD;XU({wdCe(b#dJ%rWgK+o4=(1=gSpwAWeIzf45| z9u3xNABbF&zuyVx2c~?>1)-~=1O-&K0Hrr2n9NJO&`4=9e8=P@=dVqRcZY7ik{^#$ ztV?#)gEO0y$XVa|XXHm^uiYGcrpZbwoh)~I04Q_1Ie+XWWgF=rJf{K*3^_W(QRE1A z4QwnoO(t`7uSD!!;pA@rkM;m?!y69GQ7{f@l&oqb@L%95?A5u&2@ro@VXf+=${EMWZIM5pC5ZfS>}M(<=S`V=MgJTy$Qc)GH0LF4{{1>{$UlF~>h zO`J3=pLO{%LAJ3@1s_-;NEa5qL}9x1h3OuLbQqLCh}_FK6zDOehPH9;5=p-k-JHB6 zf5M*hB%}GKibfrm{^RsE(diRJan+QSp} zG9dT=iS`p;{Mhn8w6C7M$u3Tm(pS1uEW2*5U4F)m6YvWA@jQ*nDuP6fmuB)nOXKiP zLu`(_q#j0N2u}<=v6Ady2 zSNO)AFA024-i(DQJ+sPiJV%2f5MI-d>=nW;(W@ch!Hajc9>j@8f?>Wycj}MF z;P-n<#J63^uMF08|M|%LaR+g_m2)biPl}VnDmEPoBFba^!zv#c&n?oKpG6{lJbkrI z^3xn{&2A}JY{cptOj+9~{%hNxCuh~s<| zDm{pj54z#EfAb}B=d`7I5X=WWh`X1HEkg-E&3-G{u&#=sk5~V>-{# zkeDK@$}5|~Y^15kmc~OB`-${Mvp0}pnp7u^E=^hU)Hb!)ZbC0Y^%FjPgVK9x$?RZ6 za4&-7Hmμ|*wl!E~*lk06blsi9;I=OF<}D}EX+Q)=L;Ds@6tt5wo7Io5oXg!+Rz zOf;+bg*e$N03rhe=JE^?xj6y}`7M+qmQh06Ej^5r4)}@Wi+R8m6;O=LXRgud z$1jY|LvUiIV$ZS=3>S!g*(uxp>s~>_1iFOh8S;-Afgm|8DjbNkJEj(zKi;WN+$PE0TZGR3WnERA0NYtH#V+OXgDs!Npz@D8NwIt zbNB3Mra+cb#1clan zOM9O*Q6$KC4wm0}uIa^b=FuDP50mSk*HuFOkrQSBSYV|SyrV(1aVG;{RXfHrr%}ll zDHmz)?r?pUs&}dROFfu2sDKF;2|4nCtRTGzW2!(TAj9&7K#G_?#U*ONAldT-Mxv0I z#C$^{HZ&~$FiGad0F?kD?^~B{%_Z9IOK=$XsoJR_5> zUJDWo3Ab5fHem!s-k#C&jlBVBLs{tX`Yc++)w;pE?Wg3Ktv^U_|G^`F@5d^vp8@Id zE&uDU&{se5|I_v@A0(YER-i(-2Ew7zoR)#1kZD+Sw_WA&G%i~@6Vi5{6w+pLV@#Yk zOSzCK8#5s{moaf9DSyGX>V|nBN9dec2|3?4`^nHw!A=vwE@~m`A!w{p@Uo#VKv5jH zfpAEsW9)<5nXaWXep(+@T4*3P@1Q-4egj#P427h2J)9@R+A9-3DQ|T>UR-cU2*>qg zn(tDh_7RjW1=%1O(nK)i4vCr!<-leT5}z-9)}<#?B8$UDJ^?BhghP68FRnp$#1Da8 zdNOS)(Ev=ugBQyLYjW_BlGSIYXSe*;(_K&7teiO@lX6btAnWbMFnf33N^8kp+_dNRNul&t(!0_ zdT1f6;6oUeLS4tkhz6(sr-4SxQ~fY<2=O3O(>P?3AN6@1qs4S{dOn)2SJKM3=?;pF zy@?`ELGi6v$s5z*8$IMrJ@a8_aPrnppFhYw5XgH>>aeC`c}ZdB+nb$1SadBV^{f*4 zj60H3WDNPTg9-h^!VS4>z!c}j*yxnNa!(Lh6xjSJW5#IHVPljT~@oJ4r$ zh6+6DZfg=pbPw?^!?4>x%itOn$wzLT@46b{_J17Nb-~K z?O5v{(QNkcc(owpp%Ro0qq3)PTuNb;vT#;%yN-d{LNq-6v(*?45uPEQp6Q2FhM|+e zMzq7S-u~O@U8j?JZDM#_m8IjbdQ7z*=dRv4W=YaNOY+6ncDsazqt~>z(tGb}ELzd! zq3IZj?%$JF_pIDGZ5<=lp({f3>-ooWnG9qnt9E;9Ji?k=SIzEBA#CQ@RyA^kR#R-C zv0ZZ@JR7Dd-G>(M^o*uNrUcf8^oNf_yk{4I_%v4$Oo=Qp|Aj~G8I++bV3o_!8XP2_tgcrY53oW-d;xBl%{h|gYvFl6l~0?%~Ijubh!Z)iJRL*04r zLm_eY-<=$Tmscux-*MidC$@fV?<4#F%fJ6QdggB)`(*hltgQhV@R|>wrBD9o2RH6| z%}*`voP8Tn!4#;nAo=Tcr*M3DTBwgDrPN4KXK~EO#$t6gS_fKUV;l`kua>)Am;)K# z3$npW+N6Fp(73F(pC8#s4>kpFOUL{BIS_$41?xf3xXXA6#M-9oy@Ak`K?`W;It0}J z+yimyiX)w@zdk=m?Lr$;E~BJjAhG(8$uPB(CyfnwV{2o~0eYrbhdg1&9GSZ$(*_&U zj2SZH0og)p*NSiJNVXI5k<~^*RLX_xTnJB)uQ>M*jeuQC I7LT}!C>baTWr1sx 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 literal 0 HcmV?d00001 diff --git a/packages/neuron/src/pages/tools/upload.svg b/packages/neuron/src/pages/tools/upload.svg new file mode 100644 index 0000000..3f49746 --- /dev/null +++ b/packages/neuron/src/pages/tools/upload.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/neuron/src/utils/export-tx-to-sign.ts b/packages/neuron/src/utils/export-tx-to-sign.ts new file mode 100644 index 0000000..9dac18a --- /dev/null +++ b/packages/neuron/src/utils/export-tx-to-sign.ts @@ -0,0 +1,108 @@ +import { type Script, utils } from '@ckb-lumos/base' + +const CKB_MAINNET_NODE_URL = 'https://mainnet.ckb.dev/rpc' +const CKB_TESTNET_NODE_URL = 'https://testnet.ckb.dev/rpc' + +interface Transaction { + hash: string + outputs: { + capacity: string + lock: { + code_hash: string + hash_type: string + args: string + } + }[] +} + +interface JSONTx { + inputs: { + since: string + previousOutput: { + txHash: string + index: string + } + }[] + outputs: { + capacity: string + lock: { + codeHash: string + hashType: string + args: string + } + }[] +} + +function checkIsObject(obj: unknown): obj is object { + return typeof obj === 'object' && obj !== null +} + +const JSON_FORMAT_ERROR_TYPE = Symbol('json_format_error') +export class JSONFormatError extends Error { + type = JSON_FORMAT_ERROR_TYPE +} + +function checkIsTx(json: unknown): json is JSONTx { + if (!checkIsObject(json)) throw new JSONFormatError('JSON format is incorrect') + if (!('inputs' in json)) throw new JSONFormatError(`Tx doesn't have inputs field`) + if (!('outputs' in json)) throw new JSONFormatError(`Tx doesn't have outputs field`) + if (!Array.isArray(json.inputs)) throw new JSONFormatError(`The inputs field must be an array`) + if (!Array.isArray(json.outputs)) throw new JSONFormatError(`The outputs field must be an array`) + return true +} + +export default async function exportTxToSign({ tx, nodeType }: { tx: unknown; nodeType: string }) { + const ckbNodeUrl: string = nodeType === 'mainnet' ? CKB_MAINNET_NODE_URL : CKB_TESTNET_NODE_URL + if (!checkIsTx(tx)) return + const context = await fetch(ckbNodeUrl, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify( + tx.inputs.map((input, idx) => ({ + id: idx, + jsonrpc: '2.0', + method: 'get_transaction', + params: [input.previousOutput.txHash], + })), + ), + }) + .then(res => res.json() as unknown as { result: { transaction: Transaction } }[]) + .then(txs => txs.map(tx => tx.result.transaction)) + const inputs = tx.inputs.map((input, idx) => { + const tx = context.find(t => t?.hash === input.previousOutput.txHash) + if (!tx) { + throw new Error(`Failed to load input cell ${idx} from context`) + } + const output = tx.outputs[+input.previousOutput.index] + if (!output) { + throw new Error(`${input.previousOutput.txHash} does not has ${+input.previousOutput.index} output`) + } + const lockScript = { + codeHash: output.lock.code_hash, + hashType: output.lock.hash_type, + args: output.lock.args, + } + return { + capacity: output.capacity, + lock: lockScript, + lockHash: utils.computeScriptHash(lockScript as Script), + } + }) + const inputsCapacity = inputs.reduce((pre, cur) => pre + BigInt(cur.capacity), BigInt(0)) + const outputCapacity = tx.outputs.reduce((pre, cur) => pre + BigInt(cur.capacity), BigInt(0)) + return { + transaction: { + description: '', + nervosDao: false, + signatures: {}, + fee: (outputCapacity - inputsCapacity).toString(), + ...tx, + inputs, + }, + context, + type: 'Regular', + status: 'Unsigned', + } +} diff --git a/yarn.lock b/yarn.lock index 31d94e7..a004f99 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1779,6 +1779,185 @@ __metadata: languageName: node linkType: hard +"@ckb-lumos/base@npm:0.23.0": + version: 0.23.0 + resolution: "@ckb-lumos/base@npm:0.23.0" + dependencies: + "@ckb-lumos/bi": 0.23.0 + "@ckb-lumos/codec": 0.23.0 + "@ckb-lumos/toolkit": 0.23.0 + "@types/blake2b": ^2.1.0 + "@types/lodash.isequal": ^4.5.5 + blake2b: ^2.1.3 + js-xxhash: ^1.0.4 + lodash.isequal: ^4.5.0 + checksum: fa042ea7e2a610d740e943cb92e34cd4299e50ee85bf1d3cb1bb6faa42570b8dab1056a6b7a5c0812ffc4b0c007bc3213f535f0179dd9e18577fa4e2d0552a43 + languageName: node + linkType: hard + +"@ckb-lumos/bi@npm:0.23.0": + version: 0.23.0 + resolution: "@ckb-lumos/bi@npm:0.23.0" + dependencies: + jsbi: ^4.1.0 + checksum: 25cdab2d57d19f509b04829a5773b06ad3381f3b31e4a8691b1a165521a881187cf04a6802798cfe10d5707471c6a9c84818d2539d0551662b9d7f45059926a1 + languageName: node + linkType: hard + +"@ckb-lumos/ckb-indexer@npm:0.23.0": + version: 0.23.0 + resolution: "@ckb-lumos/ckb-indexer@npm:0.23.0" + dependencies: + "@ckb-lumos/base": 0.23.0 + "@ckb-lumos/bi": 0.23.0 + "@ckb-lumos/codec": 0.23.0 + "@ckb-lumos/rpc": 0.23.0 + "@ckb-lumos/toolkit": 0.23.0 + cross-fetch: ^3.1.5 + events: ^3.3.0 + checksum: 72e05b46eb4df018c65b9dec46772b1e3a8cf11b73c1ad8a6be47846334ee679f9b9f5505f80252c925735fa59c31f117195d5c044d38b6fe6af7cb6d3312560 + languageName: node + linkType: hard + +"@ckb-lumos/codec@npm:0.23.0": + version: 0.23.0 + resolution: "@ckb-lumos/codec@npm:0.23.0" + dependencies: + "@ckb-lumos/bi": 0.23.0 + checksum: 203d37457216a9a15a5310fc99eb024d6e842698bb1b575135e40f6ead6002b0c53125685be648e0d157c2eac7db88073160cfa3c6b346ea26d3ca0ce32dffb2 + languageName: node + linkType: hard + +"@ckb-lumos/common-scripts@npm:0.23.0": + version: 0.23.0 + resolution: "@ckb-lumos/common-scripts@npm:0.23.0" + dependencies: + "@ckb-lumos/base": 0.23.0 + "@ckb-lumos/bi": 0.23.0 + "@ckb-lumos/codec": 0.23.0 + "@ckb-lumos/config-manager": 0.23.0 + "@ckb-lumos/helpers": 0.23.0 + "@ckb-lumos/rpc": 0.23.0 + "@ckb-lumos/toolkit": 0.23.0 + bech32: ^2.0.0 + bs58: ^5.0.0 + immutable: ^4.3.0 + checksum: 3eb7061c1cc5679f938c8143a302789182c7791a4365db516a218087ffcc39fad993275c5395b2c46d99b128b2355aea37c5919c8695b3cd24a995233b27053e + languageName: node + linkType: hard + +"@ckb-lumos/config-manager@npm:0.23.0": + version: 0.23.0 + resolution: "@ckb-lumos/config-manager@npm:0.23.0" + dependencies: + "@ckb-lumos/base": 0.23.0 + "@ckb-lumos/bi": 0.23.0 + "@ckb-lumos/codec": 0.23.0 + "@ckb-lumos/rpc": 0.23.0 + "@types/deep-freeze-strict": ^1.1.0 + deep-freeze-strict: ^1.1.1 + checksum: e9e3d90d4811e3331028f0602da337295a1adf334c0c960dd1ee954f94b52cc627d3ea4c02de98e22d0408d6ab7ea6a9dc2659d7c25f9cab31235b9f9435d53e + languageName: node + linkType: hard + +"@ckb-lumos/hd@npm:0.23.0": + version: 0.23.0 + resolution: "@ckb-lumos/hd@npm:0.23.0" + dependencies: + "@ckb-lumos/base": 0.23.0 + "@ckb-lumos/bi": 0.23.0 + bn.js: ^5.1.3 + elliptic: ^6.5.4 + scrypt-js: ^3.0.1 + sha3: ^2.1.3 + uuid: ^8.3.0 + checksum: 2b8256664b9e4fe159e564c7a8f6dcd1e866f458d26bbe50f1cf312951a9b3da76d319796a7caab30293f17991d213717f4347891e9cd01dd861b557715c4583 + languageName: node + linkType: hard + +"@ckb-lumos/helpers@npm:0.23.0": + version: 0.23.0 + resolution: "@ckb-lumos/helpers@npm:0.23.0" + dependencies: + "@ckb-lumos/base": 0.23.0 + "@ckb-lumos/bi": 0.23.0 + "@ckb-lumos/codec": 0.23.0 + "@ckb-lumos/config-manager": 0.23.0 + "@ckb-lumos/toolkit": 0.23.0 + bech32: ^2.0.0 + immutable: ^4.3.0 + checksum: f74fc19782c6e58c24324becd4af166ea254e23ee7adc84d07c11380a8c26987531db63c394c2f83d61147939588b9880197740899f61a9b81fe13cd5da1732f + languageName: node + linkType: hard + +"@ckb-lumos/light-client@npm:0.23.0": + version: 0.23.0 + resolution: "@ckb-lumos/light-client@npm:0.23.0" + dependencies: + "@ckb-lumos/base": 0.23.0 + "@ckb-lumos/ckb-indexer": 0.23.0 + "@ckb-lumos/rpc": 0.23.0 + cross-fetch: ^3.1.5 + events: ^3.3.0 + checksum: 03d942cdb50e333c0ba66c3bd08e997e79a19af21db31d92e046996ceae0708c3b05eae070df0ff22812502eff89432a1ef22e5dd1e57d62b18977edaf556b05 + languageName: node + linkType: hard + +"@ckb-lumos/lumos@npm:0.23.0": + version: 0.23.0 + resolution: "@ckb-lumos/lumos@npm:0.23.0" + dependencies: + "@ckb-lumos/base": 0.23.0 + "@ckb-lumos/bi": 0.23.0 + "@ckb-lumos/ckb-indexer": 0.23.0 + "@ckb-lumos/codec": 0.23.0 + "@ckb-lumos/common-scripts": 0.23.0 + "@ckb-lumos/config-manager": 0.23.0 + "@ckb-lumos/hd": 0.23.0 + "@ckb-lumos/helpers": 0.23.0 + "@ckb-lumos/light-client": 0.23.0 + "@ckb-lumos/rpc": 0.23.0 + "@ckb-lumos/toolkit": 0.23.0 + "@ckb-lumos/transaction-manager": 0.23.0 + checksum: 1460ddb3b62aeb172317ea6e527062d00ceeb5e136d098411e002c370d92f1c1ebe6689b4ef857e293f7018732f2325ba1f711b63e42243790a7ae97967ee84b + languageName: node + linkType: hard + +"@ckb-lumos/rpc@npm:0.23.0": + version: 0.23.0 + resolution: "@ckb-lumos/rpc@npm:0.23.0" + dependencies: + "@ckb-lumos/base": 0.23.0 + "@ckb-lumos/bi": 0.23.0 + abort-controller: ^3.0.0 + cross-fetch: ^3.1.5 + checksum: 5dc9a79686dcdb50434572c7a2b4d957a8323d2d41186351c8dc9b77aae895a75eac0196a265e203058cbe477cab869d2d979c1275f35f6433d101f4d7d3fad0 + languageName: node + linkType: hard + +"@ckb-lumos/toolkit@npm:0.23.0": + version: 0.23.0 + resolution: "@ckb-lumos/toolkit@npm:0.23.0" + dependencies: + "@ckb-lumos/bi": 0.23.0 + checksum: 3de186e0290f920b030908ae66282729f1fb212f462d3238f94e7d69b87aedbd5ac1d6550a501a96e45ec6c3250d6f14fae6e30536f5b1eefa5a9617d6383c9f + languageName: node + linkType: hard + +"@ckb-lumos/transaction-manager@npm:0.23.0": + version: 0.23.0 + resolution: "@ckb-lumos/transaction-manager@npm:0.23.0" + dependencies: + "@ckb-lumos/base": 0.23.0 + "@ckb-lumos/ckb-indexer": 0.23.0 + "@ckb-lumos/codec": 0.23.0 + "@ckb-lumos/rpc": 0.23.0 + "@ckb-lumos/toolkit": 0.23.0 + immutable: ^4.3.0 + checksum: 795099992828cc34bc3dac5dd7c26573a6a24adb1a695853e8fce71cfaeffc84cd2e46991a0438b7786aba8bad4438e4f40a7765bb53c4bd7856f0b4bf07ebcd + languageName: node + linkType: hard + "@cspotcode/source-map-support@npm:^0.8.0": version: 0.8.1 resolution: "@cspotcode/source-map-support@npm:0.8.1" @@ -2314,6 +2493,7 @@ __metadata: version: 0.0.0-use.local resolution: "@magickbase-website/neuron@workspace:packages/neuron" dependencies: + "@ckb-lumos/lumos": 0.23.0 "@docsearch/css": 3 "@docsearch/react": 3 "@magickbase-website/config": "workspace:^" @@ -3944,6 +4124,13 @@ __metadata: languageName: node linkType: hard +"@types/blake2b@npm:^2.1.0": + version: 2.1.3 + resolution: "@types/blake2b@npm:2.1.3" + checksum: 55a6ed7123a7adc82cc51131644b6c035c28142d028fbc23fe06251c76583ee3303d73204e21de8ea075ef84a04c4ed424754f5035fed20730a85272620a0de3 + languageName: node + linkType: hard + "@types/debug@npm:^4.0.0": version: 4.1.8 resolution: "@types/debug@npm:4.1.8" @@ -3953,6 +4140,13 @@ __metadata: languageName: node linkType: hard +"@types/deep-freeze-strict@npm:^1.1.0": + version: 1.1.2 + resolution: "@types/deep-freeze-strict@npm:1.1.2" + checksum: b6e5b5dd68ce74ae5c2c3a43dce9725c79f0d15895c4db90f878e999b9ba553c2bed3af4806ae0f34b6fc003e71adc094d29664654803f85e70db91d1dd440ba + languageName: node + linkType: hard + "@types/eslint@npm:^8.56.0": version: 8.56.10 resolution: "@types/eslint@npm:8.56.10" @@ -4027,6 +4221,22 @@ __metadata: languageName: node linkType: hard +"@types/lodash.isequal@npm:^4.5.5": + version: 4.5.8 + resolution: "@types/lodash.isequal@npm:4.5.8" + dependencies: + "@types/lodash": "*" + checksum: f3180c2d2925514fff1908a1303c11468c9f39b47fd7b053416aad3f1447f8e4a9894dd0460187ac9ac19387e25aec8dd8214d13a50a0967e0dc9cca8e4c5353 + languageName: node + linkType: hard + +"@types/lodash@npm:*": + version: 4.17.7 + resolution: "@types/lodash@npm:4.17.7" + checksum: 09e58a119cd8a70acfb33f8623dc2fc54f74cdce3b3429b879fc2daac4807fe376190a04b9e024dd300f9a3ee1876d6623979cefe619f70654ca0fe0c47679a7 + languageName: node + linkType: hard + "@types/mdast@npm:^3.0.0": version: 3.0.11 resolution: "@types/mdast@npm:3.0.11" @@ -4345,6 +4555,15 @@ __metadata: languageName: node linkType: hard +"abort-controller@npm:^3.0.0": + version: 3.0.0 + resolution: "abort-controller@npm:3.0.0" + dependencies: + event-target-shim: ^5.0.0 + checksum: 170bdba9b47b7e65906a28c8ce4f38a7a369d78e2271706f020849c1bfe0ee2067d4261df8bbb66eb84f79208fd5b710df759d64191db58cfba7ce8ef9c54b75 + languageName: node + linkType: hard + "acorn-jsx@npm:^5.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" @@ -4865,6 +5084,13 @@ __metadata: languageName: node linkType: hard +"b4a@npm:^1.0.1": + version: 1.6.6 + resolution: "b4a@npm:1.6.6" + checksum: c46a27e3ac9c84426ae728f0fc46a6ae7703a7bc03e771fa0bef4827fd7cf3bb976d1a3d5afff54606248372ab8fdf595bd0114406690edf37f14d120630cf7f + languageName: node + linkType: hard + "babel-plugin-polyfill-corejs2@npm:^0.4.3": version: 0.4.3 resolution: "babel-plugin-polyfill-corejs2@npm:0.4.3" @@ -4929,6 +5155,20 @@ __metadata: languageName: node linkType: hard +"base-x@npm:^4.0.0": + version: 4.0.0 + resolution: "base-x@npm:4.0.0" + checksum: b25db9e07eb1998472a20557c7f00c797dc0595f79df95155ab74274e7fa98b9f2659b3ee547ac8773666b7f69540656793aeb97ad2b1ceccdb6fa5faaf69ac0 + languageName: node + linkType: hard + +"base64-js@npm:^1.3.1": + version: 1.5.1 + resolution: "base64-js@npm:1.5.1" + checksum: 669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 + languageName: node + linkType: hard + "base@npm:^0.11.1": version: 0.11.2 resolution: "base@npm:0.11.2" @@ -4944,6 +5184,13 @@ __metadata: languageName: node linkType: hard +"bech32@npm:^2.0.0": + version: 2.0.0 + resolution: "bech32@npm:2.0.0" + checksum: fa15acb270b59aa496734a01f9155677b478987b773bf701f465858bf1606c6a970085babd43d71ce61895f1baa594cb41a2cd1394bd2c6698f03cc2d811300e + languageName: node + linkType: hard + "before-after-hook@npm:^2.2.0": version: 2.2.3 resolution: "before-after-hook@npm:2.2.3" @@ -4965,6 +5212,40 @@ __metadata: languageName: node linkType: hard +"blake2b-wasm@npm:^2.4.0": + version: 2.4.0 + resolution: "blake2b-wasm@npm:2.4.0" + dependencies: + b4a: ^1.0.1 + nanoassert: ^2.0.0 + checksum: 1839dd0693681228d81f781dd8680a6803a629ca374aed5ac02fa649ce40a67a85eb49eeb2ec6aeb7ef3ef5aa169b3579b50eabf7afa360d190338bc3e8666bd + languageName: node + linkType: hard + +"blake2b@npm:^2.1.3": + version: 2.1.4 + resolution: "blake2b@npm:2.1.4" + dependencies: + blake2b-wasm: ^2.4.0 + nanoassert: ^2.0.0 + checksum: cd598c96d459017714b7f9cb8892ef2b0a94f362e26e6baa46b7b8b189af0006ce25ab1713e3ec1484eb18ce7ebe1eb24e07d01e42ab1147067de2419c7f6158 + languageName: node + linkType: hard + +"bn.js@npm:^4.11.9": + version: 4.12.0 + resolution: "bn.js@npm:4.12.0" + checksum: 39afb4f15f4ea537b55eaf1446c896af28ac948fdcf47171961475724d1bb65118cca49fa6e3d67706e4790955ec0e74de584e45c8f1ef89f46c812bee5b5a12 + languageName: node + linkType: hard + +"bn.js@npm:^5.1.3": + version: 5.2.1 + resolution: "bn.js@npm:5.2.1" + checksum: 3dd8c8d38055fedfa95c1d5fc3c99f8dd547b36287b37768db0abab3c239711f88ff58d18d155dd8ad902b0b0cee973747b7ae20ea12a09473272b0201c9edd3 + languageName: node + linkType: hard + "boolbase@npm:^1.0.0": version: 1.0.0 resolution: "boolbase@npm:1.0.0" @@ -5067,6 +5348,13 @@ __metadata: languageName: node linkType: hard +"brorand@npm:^1.1.0": + version: 1.1.0 + resolution: "brorand@npm:1.1.0" + checksum: 8a05c9f3c4b46572dec6ef71012b1946db6cae8c7bb60ccd4b7dd5a84655db49fe043ecc6272e7ef1f69dc53d6730b9e2a3a03a8310509a3d797a618cbee52be + languageName: node + linkType: hard + "browserslist@npm:^4.12.0, browserslist@npm:^4.21.3, browserslist@npm:^4.21.5": version: 4.21.7 resolution: "browserslist@npm:4.21.7" @@ -5081,6 +5369,15 @@ __metadata: languageName: node linkType: hard +"bs58@npm:^5.0.0": + version: 5.0.0 + resolution: "bs58@npm:5.0.0" + dependencies: + base-x: ^4.0.0 + checksum: 2475cb0684e07077521aac718e604a13e0f891d58cff923d437a2f7e9e28703ab39fce9f84c7c703ab369815a675f11e3bd394d38643bfe8969fbe42e6833d45 + languageName: node + linkType: hard + "buffer-equal@npm:^1.0.0": version: 1.0.1 resolution: "buffer-equal@npm:1.0.1" @@ -5088,6 +5385,16 @@ __metadata: languageName: node linkType: hard +"buffer@npm:6.0.3": + version: 6.0.3 + resolution: "buffer@npm:6.0.3" + dependencies: + base64-js: ^1.3.1 + ieee754: ^1.2.1 + checksum: 5ad23293d9a731e4318e420025800b42bf0d264004c0286c8cc010af7a270c7a0f6522e84f54b9ad65cbd6db20b8badbfd8d2ebf4f80fa03dab093b89e68c3f9 + languageName: node + linkType: hard + "bundle-name@npm:^3.0.0": version: 3.0.0 resolution: "bundle-name@npm:3.0.0" @@ -5761,6 +6068,15 @@ __metadata: languageName: node linkType: hard +"cross-fetch@npm:^3.1.5": + version: 3.1.8 + resolution: "cross-fetch@npm:3.1.8" + dependencies: + node-fetch: ^2.6.12 + checksum: 78f993fa099eaaa041122ab037fe9503ecbbcb9daef234d1d2e0b9230a983f64d645d088c464e21a247b825a08dc444a6e7064adfa93536d3a9454b4745b3632 + languageName: node + linkType: hard + "cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" @@ -6018,6 +6334,13 @@ __metadata: languageName: node linkType: hard +"deep-freeze-strict@npm:^1.1.1": + version: 1.1.1 + resolution: "deep-freeze-strict@npm:1.1.1" + checksum: b601e226c873464e35f3667a632963c1e8281f6bb4016d0fbbd8ef60fd51f0c9dcf79fadd745d1597b463f2c25ea0f213599559606c29df8c7e941394cb80f9a + languageName: node + linkType: hard + "deep-is@npm:^0.1.3": version: 0.1.4 resolution: "deep-is@npm:0.1.4" @@ -6339,6 +6662,21 @@ __metadata: languageName: node linkType: hard +"elliptic@npm:^6.5.4": + version: 6.5.6 + resolution: "elliptic@npm:6.5.6" + dependencies: + bn.js: ^4.11.9 + brorand: ^1.1.0 + hash.js: ^1.0.0 + hmac-drbg: ^1.0.1 + inherits: ^2.0.4 + minimalistic-assert: ^1.0.1 + minimalistic-crypto-utils: ^1.0.1 + checksum: 213d778ccfe99ec8f0f871b1cc96a10ac3763d9175215d0a9dc026f291e5f50fea6f635e4e47b4506f9ada25aeb703bd807d8737b880dbb24d092a3001c6d97d + languageName: node + linkType: hard + "emoji-regex@npm:^7.0.1": version: 7.0.3 resolution: "emoji-regex@npm:7.0.3" @@ -7019,6 +7357,20 @@ __metadata: languageName: node linkType: hard +"event-target-shim@npm:^5.0.0": + version: 5.0.1 + resolution: "event-target-shim@npm:5.0.1" + checksum: 1ffe3bb22a6d51bdeb6bf6f7cf97d2ff4a74b017ad12284cc9e6a279e727dc30a5de6bb613e5596ff4dc3e517841339ad09a7eec44266eccb1aa201a30448166 + languageName: node + linkType: hard + +"events@npm:^3.3.0": + version: 3.3.0 + resolution: "events@npm:3.3.0" + checksum: f6f487ad2198aa41d878fa31452f1a3c00958f46e9019286ff4787c84aac329332ab45c9cdc8c445928fc6d7ded294b9e005a7fce9426488518017831b272780 + languageName: node + linkType: hard + "execa@npm:^5.0.0": version: 5.1.1 resolution: "execa@npm:5.1.1" @@ -7996,6 +8348,16 @@ __metadata: languageName: node linkType: hard +"hash.js@npm:^1.0.0, hash.js@npm:^1.0.3": + version: 1.1.7 + resolution: "hash.js@npm:1.1.7" + dependencies: + inherits: ^2.0.3 + minimalistic-assert: ^1.0.1 + checksum: e350096e659c62422b85fa508e4b3669017311aa4c49b74f19f8e1bc7f3a54a584fdfd45326d4964d6011f2b2d882e38bea775a96046f2a61b7779a979629d8f + languageName: node + linkType: hard + "hasown@npm:^2.0.0": version: 2.0.0 resolution: "hasown@npm:2.0.0" @@ -8119,6 +8481,17 @@ __metadata: languageName: node linkType: hard +"hmac-drbg@npm:^1.0.1": + version: 1.0.1 + resolution: "hmac-drbg@npm:1.0.1" + dependencies: + hash.js: ^1.0.3 + minimalistic-assert: ^1.0.0 + minimalistic-crypto-utils: ^1.0.1 + checksum: bd30b6a68d7f22d63f10e1888aee497d7c2c5c0bb469e66bbdac99f143904d1dfe95f8131f95b3e86c86dd239963c9d972fcbe147e7cffa00e55d18585c43fe0 + languageName: node + linkType: hard + "hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.2": version: 3.3.2 resolution: "hoist-non-react-statics@npm:3.3.2" @@ -8328,6 +8701,13 @@ __metadata: languageName: node linkType: hard +"ieee754@npm:^1.2.1": + version: 1.2.1 + resolution: "ieee754@npm:1.2.1" + checksum: 5144c0c9815e54ada181d80a0b810221a253562422e7c6c3a60b1901154184f49326ec239d618c416c1c5945a2e197107aee8d986a3dd836b53dffefd99b5e7e + languageName: node + linkType: hard + "ignore@npm:^4.0.3": version: 4.0.6 resolution: "ignore@npm:4.0.6" @@ -8349,6 +8729,13 @@ __metadata: languageName: node linkType: hard +"immutable@npm:^4.3.0": + version: 4.3.7 + resolution: "immutable@npm:4.3.7" + checksum: 1c50eb053bb300796551604afff554066f041aa8e15926cf98f6d11d9736b62ad12531c06515dd96375258653878b4736f8051cd20b640f5f976d09fa640e3ec + languageName: node + linkType: hard + "import-fresh@npm:^2.0.0": version: 2.0.0 resolution: "import-fresh@npm:2.0.0" @@ -8428,7 +8815,7 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:^2.0.0, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:~2.0.3": +"inherits@npm:2, inherits@npm:^2.0.0, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 @@ -9180,6 +9567,13 @@ __metadata: languageName: node linkType: hard +"js-xxhash@npm:^1.0.4": + version: 1.0.4 + resolution: "js-xxhash@npm:1.0.4" + checksum: db4b333fcab61c1141b0d99724ac419d9ee4d8450b9c91f45101c6257e863f0a5462e634f3e9cc1bad263294ba6ee83ce6a76e15b40a2800b376c82c5e4125df + languageName: node + linkType: hard + "js-yaml@npm:4.1.0, js-yaml@npm:^4.1.0": version: 4.1.0 resolution: "js-yaml@npm:4.1.0" @@ -9203,6 +9597,13 @@ __metadata: languageName: node linkType: hard +"jsbi@npm:^4.1.0": + version: 4.3.0 + resolution: "jsbi@npm:4.3.0" + checksum: 27c4f178eb7fd9d1756144066fdebc62f4a0176e877f55e646e8ce84075c13551bd575a316b9959ccdcca9d5dc05a81c9907cfa09f0cfeb43c9777797e36b0e9 + languageName: node + linkType: hard + "jsesc@npm:^2.5.1": version: 2.5.2 resolution: "jsesc@npm:2.5.2" @@ -9520,6 +9921,13 @@ __metadata: languageName: node linkType: hard +"lodash.isequal@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.isequal@npm:4.5.0" + checksum: da27515dc5230eb1140ba65ff8de3613649620e8656b19a6270afe4866b7bd461d9ba2ac8a48dcc57f7adac4ee80e1de9f965d89d4d81a0ad52bb3eec2609644 + languageName: node + linkType: hard + "lodash.merge@npm:^4.6.2": version: 4.6.2 resolution: "lodash.merge@npm:4.6.2" @@ -10373,6 +10781,20 @@ __metadata: languageName: node linkType: hard +"minimalistic-assert@npm:^1.0.0, minimalistic-assert@npm:^1.0.1": + version: 1.0.1 + resolution: "minimalistic-assert@npm:1.0.1" + checksum: cc7974a9268fbf130fb055aff76700d7e2d8be5f761fb5c60318d0ed010d839ab3661a533ad29a5d37653133385204c503bfac995aaa4236f4e847461ea32ba7 + languageName: node + linkType: hard + +"minimalistic-crypto-utils@npm:^1.0.1": + version: 1.0.1 + resolution: "minimalistic-crypto-utils@npm:1.0.1" + checksum: 6e8a0422b30039406efd4c440829ea8f988845db02a3299f372fceba56ffa94994a9c0f2fd70c17f9969eedfbd72f34b5070ead9656a34d3f71c0bd72583a0ed + languageName: node + linkType: hard + "minimatch@npm:9.0.3": version: 9.0.3 resolution: "minimatch@npm:9.0.3" @@ -10600,6 +11022,13 @@ __metadata: languageName: node linkType: hard +"nanoassert@npm:^2.0.0": + version: 2.0.0 + resolution: "nanoassert@npm:2.0.0" + checksum: b1d366f9524405f3337192d32dda6ac0b02374e4d0550c9aad33480caf2eb3c84c06f18f41f4c5404c14f6fc1ae6b84692b4375166dcb9f2d04a2ea9b9bccba0 + languageName: node + linkType: hard + "nanoid@npm:^3.3.4, nanoid@npm:^3.3.6": version: 3.3.6 resolution: "nanoid@npm:3.3.6" @@ -10810,6 +11239,20 @@ __metadata: languageName: node linkType: hard +"node-fetch@npm:^2.6.12": + version: 2.7.0 + resolution: "node-fetch@npm:2.7.0" + dependencies: + whatwg-url: ^5.0.0 + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: d76d2f5edb451a3f05b15115ec89fc6be39de37c6089f1b6368df03b91e1633fd379a7e01b7ab05089a25034b2023d959b47e59759cb38d88341b2459e89d6e5 + languageName: node + linkType: hard + "node-fetch@npm:^2.6.7": version: 2.6.11 resolution: "node-fetch@npm:2.6.11" @@ -12952,6 +13395,13 @@ __metadata: languageName: node linkType: hard +"scrypt-js@npm:^3.0.1": + version: 3.0.1 + resolution: "scrypt-js@npm:3.0.1" + checksum: b7c7d1a68d6ca946f2fbb0778e0c4ec63c65501b54023b2af7d7e9f48fdb6c6580d6f7675cd53bda5944c5ebc057560d5a6365079752546865defb3b79dea454 + languageName: node + linkType: hard + "semver-compare@npm:^1.0.0": version: 1.0.0 resolution: "semver-compare@npm:1.0.0" @@ -13057,6 +13507,15 @@ __metadata: languageName: node linkType: hard +"sha3@npm:^2.1.3": + version: 2.1.4 + resolution: "sha3@npm:2.1.4" + dependencies: + buffer: 6.0.3 + checksum: fb49c8e18143cc46babc0e5d83d5f5d0149e645f26633a0e6a9aa2514df2ef91f10b6ece20da229e7ead8b8002d8e9514dcc747ef96a25b749294d6385c6f29f + languageName: node + linkType: hard + "shebang-command@npm:^2.0.0": version: 2.0.0 resolution: "shebang-command@npm:2.0.0" @@ -14998,6 +15457,15 @@ __metadata: languageName: node linkType: hard +"uuid@npm:^8.3.0": + version: 8.3.2 + resolution: "uuid@npm:8.3.2" + bin: + uuid: dist/bin/uuid + checksum: 5575a8a75c13120e2f10e6ddc801b2c7ed7d8f3c8ac22c7ed0c7b2ba6383ec0abda88c905085d630e251719e0777045ae3236f04c812184b7c765f63a70e58df + languageName: node + linkType: hard + "uvu@npm:^0.5.0": version: 0.5.6 resolution: "uvu@npm:0.5.6"