From 8ec5dfb67cfdc9e67c139d162a35a4a94426948f Mon Sep 17 00:00:00 2001 From: Jiang Jiwen <125579488+JiwenJ@users.noreply.github.com> Date: Fri, 14 Jul 2023 17:42:06 +0800 Subject: [PATCH] Add files via upload --- Code/Frontend/src/api/chat.js | 21 ++++ Code/Frontend/src/api/drag.js | 60 ++++++++++ Code/Frontend/src/api/goods.js | 89 ++++++++++++++ Code/Frontend/src/api/index.js | 21 ++++ Code/Frontend/src/api/public.js | 23 ++++ Code/Frontend/src/api/tmp.js | 110 ++++++++++++++++++ Code/Frontend/src/assets/images/6.png | Bin 0 -> 2442037 bytes Code/Frontend/src/assets/images/M.png | Bin 0 -> 7437 bytes ...on@2x.32d87deb02b3d1c3cc5bcff0c26314ac.png | Bin 0 -> 6083 bytes .../Frontend/src/assets/images/alipay-red.jpg | Bin 0 -> 16444 bytes Code/Frontend/src/assets/images/alipay@2x.png | Bin 0 -> 9646 bytes Code/Frontend/src/assets/images/aliremark.png | Bin 0 -> 26147 bytes Code/Frontend/src/assets/images/banner.png | Bin 0 -> 61594 bytes Code/Frontend/src/assets/images/banner.webp | Bin 0 -> 61594 bytes .../src/assets/images/bg_9b9dcb65ff.png | Bin 0 -> 6040 bytes .../src/assets/images/bg_9b9dcb65ff@2x.png | Bin 0 -> 19734 bytes .../src/assets/images/cart-empty-new.png | Bin 0 -> 2062 bytes .../src/assets/images/cart-empty_@2x.png | Bin 0 -> 126420 bytes .../images/cart-updown_8303731e15@2x.jpg | Bin 0 -> 11499 bytes .../assets/images/checkbox-new_631a56a4f6.png | Bin 0 -> 2215 bytes .../src/assets/images/con-bg_04f25dbf8e.jpg | Bin 0 -> 35693 bytes .../images/delete-btn-icon_a35bf2437e@2x.jpg | Bin 0 -> 3297 bytes .../src/assets/images/dialog-gray-bg.png | Bin 0 -> 1577 bytes Code/Frontend/src/assets/images/error.png | Bin 0 -> 22964 bytes .../src/assets/images/global-logo-red@2x.png | Bin 0 -> 49863 bytes .../src/assets/images/global-logo-red@2x.psd | Bin 0 -> 206993 bytes Code/Frontend/src/assets/images/gpt.png | Bin 0 -> 125809 bytes Code/Frontend/src/assets/images/lo.png | Bin 0 -> 41571 bytes Code/Frontend/src/assets/images/lo1.png | Bin 0 -> 8741 bytes Code/Frontend/src/assets/images/load.gif | Bin 0 -> 126820 bytes Code/Frontend/src/assets/images/log(1)(1).png | Bin 0 -> 7063 bytes Code/Frontend/src/assets/images/log(1).png | Bin 0 -> 14555 bytes Code/Frontend/src/assets/images/log.png | Bin 0 -> 38436 bytes Code/Frontend/src/assets/images/logo.jpeg | Bin 0 -> 36450 bytes Code/Frontend/src/assets/images/lolo.png | Bin 0 -> 16783 bytes Code/Frontend/src/assets/images/lololo.png | Bin 0 -> 12181 bytes Code/Frontend/src/assets/images/nju.jpg | Bin 0 -> 4010049 bytes Code/Frontend/src/assets/images/nju_logo.png | Bin 0 -> 5295 bytes Code/Frontend/src/assets/images/no-data.png | Bin 0 -> 16569 bytes Code/Frontend/src/assets/images/no-search.png | Bin 0 -> 19500 bytes .../src/assets/images/other-login.png | Bin 0 -> 2665 bytes Code/Frontend/src/assets/images/qqpay.png | Bin 0 -> 26626 bytes Code/Frontend/src/assets/images/qqremark.png | Bin 0 -> 24508 bytes Code/Frontend/src/assets/images/qr.png | Bin 0 -> 3948 bytes Code/Frontend/src/assets/images/red.png | Bin 0 -> 6370 bytes Code/Frontend/src/assets/images/saoma.png | Bin 0 -> 2904 bytes .../assets/images/smartisan_4ada7fecea.png | Bin 0 -> 7309 bytes .../assets/images/smartisan_4ada7fecea@2x.png | Bin 0 -> 16545 bytes Code/Frontend/src/assets/images/smile.png | Bin 0 -> 6992 bytes Code/Frontend/src/assets/images/support.png | Bin 0 -> 4917 bytes .../src/assets/images/user-avatar.png | Bin 0 -> 6102 bytes Code/Frontend/src/assets/images/user.jpg | Bin 0 -> 107987 bytes .../src/assets/images/wechat-explain.png | Bin 0 -> 7171 bytes .../src/assets/images/weixinpay@2x.png | Bin 0 -> 4359 bytes Code/Frontend/src/assets/images/wxremark.png | Bin 0 -> 19729 bytes ...210\252\345\233\276 2023-03-21 220522.png" | Bin 0 -> 40399 bytes Code/Frontend/src/assets/style/base.css | 66 +++++++++++ Code/Frontend/src/assets/style/mixin.less | 26 +++++ Code/Frontend/src/assets/style/reset.scss | 58 +++++++++ Code/Frontend/src/assets/style/tailwind.css | 12 ++ Code/Frontend/src/assets/style/theme.scss | 10 ++ Code/Frontend/src/assets/style/variables.less | 14 +++ 62 files changed, 510 insertions(+) create mode 100644 Code/Frontend/src/api/chat.js create mode 100644 Code/Frontend/src/api/drag.js create mode 100644 Code/Frontend/src/api/goods.js create mode 100644 Code/Frontend/src/api/index.js create mode 100644 Code/Frontend/src/api/public.js create mode 100644 Code/Frontend/src/api/tmp.js create mode 100644 Code/Frontend/src/assets/images/6.png create mode 100644 Code/Frontend/src/assets/images/M.png create mode 100644 Code/Frontend/src/assets/images/account-icon@2x.32d87deb02b3d1c3cc5bcff0c26314ac.png create mode 100644 Code/Frontend/src/assets/images/alipay-red.jpg create mode 100644 Code/Frontend/src/assets/images/alipay@2x.png create mode 100644 Code/Frontend/src/assets/images/aliremark.png create mode 100644 Code/Frontend/src/assets/images/banner.png create mode 100644 Code/Frontend/src/assets/images/banner.webp create mode 100644 Code/Frontend/src/assets/images/bg_9b9dcb65ff.png create mode 100644 Code/Frontend/src/assets/images/bg_9b9dcb65ff@2x.png create mode 100644 Code/Frontend/src/assets/images/cart-empty-new.png create mode 100644 Code/Frontend/src/assets/images/cart-empty_@2x.png create mode 100644 Code/Frontend/src/assets/images/cart-updown_8303731e15@2x.jpg create mode 100644 Code/Frontend/src/assets/images/checkbox-new_631a56a4f6.png create mode 100644 Code/Frontend/src/assets/images/con-bg_04f25dbf8e.jpg create mode 100644 Code/Frontend/src/assets/images/delete-btn-icon_a35bf2437e@2x.jpg create mode 100644 Code/Frontend/src/assets/images/dialog-gray-bg.png create mode 100644 Code/Frontend/src/assets/images/error.png create mode 100644 Code/Frontend/src/assets/images/global-logo-red@2x.png create mode 100644 Code/Frontend/src/assets/images/global-logo-red@2x.psd create mode 100644 Code/Frontend/src/assets/images/gpt.png create mode 100644 Code/Frontend/src/assets/images/lo.png create mode 100644 Code/Frontend/src/assets/images/lo1.png create mode 100644 Code/Frontend/src/assets/images/load.gif create mode 100644 Code/Frontend/src/assets/images/log(1)(1).png create mode 100644 Code/Frontend/src/assets/images/log(1).png create mode 100644 Code/Frontend/src/assets/images/log.png create mode 100644 Code/Frontend/src/assets/images/logo.jpeg create mode 100644 Code/Frontend/src/assets/images/lolo.png create mode 100644 Code/Frontend/src/assets/images/lololo.png create mode 100644 Code/Frontend/src/assets/images/nju.jpg create mode 100644 Code/Frontend/src/assets/images/nju_logo.png create mode 100644 Code/Frontend/src/assets/images/no-data.png create mode 100644 Code/Frontend/src/assets/images/no-search.png create mode 100644 Code/Frontend/src/assets/images/other-login.png create mode 100644 Code/Frontend/src/assets/images/qqpay.png create mode 100644 Code/Frontend/src/assets/images/qqremark.png create mode 100644 Code/Frontend/src/assets/images/qr.png create mode 100644 Code/Frontend/src/assets/images/red.png create mode 100644 Code/Frontend/src/assets/images/saoma.png create mode 100644 Code/Frontend/src/assets/images/smartisan_4ada7fecea.png create mode 100644 Code/Frontend/src/assets/images/smartisan_4ada7fecea@2x.png create mode 100644 Code/Frontend/src/assets/images/smile.png create mode 100644 Code/Frontend/src/assets/images/support.png create mode 100644 Code/Frontend/src/assets/images/user-avatar.png create mode 100644 Code/Frontend/src/assets/images/user.jpg create mode 100644 Code/Frontend/src/assets/images/wechat-explain.png create mode 100644 Code/Frontend/src/assets/images/weixinpay@2x.png create mode 100644 Code/Frontend/src/assets/images/wxremark.png create mode 100644 "Code/Frontend/src/assets/images/\345\261\217\345\271\225\346\210\252\345\233\276 2023-03-21 220522.png" create mode 100644 Code/Frontend/src/assets/style/base.css create mode 100644 Code/Frontend/src/assets/style/mixin.less create mode 100644 Code/Frontend/src/assets/style/reset.scss create mode 100644 Code/Frontend/src/assets/style/tailwind.css create mode 100644 Code/Frontend/src/assets/style/theme.scss create mode 100644 Code/Frontend/src/assets/style/variables.less diff --git a/Code/Frontend/src/api/chat.js b/Code/Frontend/src/api/chat.js new file mode 100644 index 0000000..c047df7 --- /dev/null +++ b/Code/Frontend/src/api/chat.js @@ -0,0 +1,21 @@ +export async function chat(messageList, apiKey) { + try { + const result = await fetch("https://api.openai.com/v1/chat/completions", { + method: "post", + // signal: AbortSignal.timeout(8000), + // 开启后到达设定时间会中断流式输出 + headers: { + "Content-Type": "application/json", + Authorization: `Bearer ${apiKey}`, + }, + body: JSON.stringify({ + model: "gpt-3.5-turbo", + stream: true, + messages: messageList, + }), + }); + return result; + } catch (error) { + throw error; + } + } \ No newline at end of file diff --git a/Code/Frontend/src/api/drag.js b/Code/Frontend/src/api/drag.js new file mode 100644 index 0000000..d329bb0 --- /dev/null +++ b/Code/Frontend/src/api/drag.js @@ -0,0 +1,60 @@ +import Vue from 'vue'; +Vue.directive('drag', { + bind: function (el) { + const odiv = el; + // 缓存 clientX clientY 的对象: 用于判断是点击事件还是移动事件 + const clientOffset = {}; + odiv.style.position = 'fixed'; + odiv.onmousedown = (e) => { + const disX = e.clientX - odiv.offsetLeft; + const disY = e.clientY - odiv.offsetTop; + // 缓存 clientX clientY + clientOffset.clientX = e.clientX; + clientOffset.clientY = e.clientY; + document.onmousemove = (e) => { + const left = e.clientX - disX; + const top = e.clientY - disY; + odiv.style.left = left + 'px'; + odiv.style.top = top + 'px'; + // odiv 距离顶部的距离 + const dragDivTop = window.innerHeight - odiv.getBoundingClientRect().height; + // odiv 距离左部的距离 + const dragDivLeft = window.innerWidth - odiv.getBoundingClientRect().width; + // 边界判断处理 + // 2、超出顶部处理 + if (odiv.getBoundingClientRect().top <= 0) { + odiv.style.top = '0px'; + } + // 3、超出底部处理 + if (odiv.getBoundingClientRect().top >= dragDivTop) { + odiv.style.top = dragDivTop + 'px'; + } + // 4、超出右边边界区域处理 + if (odiv.getBoundingClientRect().left >= dragDivLeft) { + odiv.style.left = dragDivLeft + 'px'; + } + // 5、超出左边边界区域处理 + if (odiv.getBoundingClientRect().left <= 0) { + odiv.style.left = '0px'; + } + }; + document.onmouseup = () => { + document.onmousemove = null; + document.onmouseup = null; + }; + }; + // 绑定鼠标松开事件 + odiv.addEventListener('mouseup', (event) => { + const clientX = event.clientX; + const clientY = event.clientY; + if (clientX === clientOffset.clientX && clientY === clientOffset.clientY) { + return false + // console.log('click 事件'); + } else { + return false + // console.log('drag 事件'); + } + }) + } +}); + diff --git a/Code/Frontend/src/api/goods.js b/Code/Frontend/src/api/goods.js new file mode 100644 index 0000000..def0023 --- /dev/null +++ b/Code/Frontend/src/api/goods.js @@ -0,0 +1,89 @@ +import http from './public' +// 商品列表 +export const getAllGoods = (params) => { + return http.fetchGet('/goods/allGoods', params) +} +// 获取购物车列表 +export const getCartList = (params) => { + return http.fetchPost('/member/cartList', params) +} +// 加入购物车 +export const addCart = (params) => { + return http.fetchPost('/member/addCart', params) +} +// 删除购物车 +export const delCart = (params) => { + return http.fetchPost('/member/delCart', params) +} +// 删除购物车勾选商品 +export const delCartChecked = (params) => { + return http.fetchPost('/member/delCartChecked', params) +} +// 编辑购物车 +export const cartEdit = (params) => { + return http.fetchPost('/member/cartEdit', params) +} +// 全选 +export const editCheckAll = (params) => { + return http.fetchPost('/member/editCheckAll', params) +} +// 删除整条购物车 +export const cartDel = (params) => { + return http.fetchPost('/member/cartDel', params) +} +// 获取用户地址 +export const addressList = (params) => { + return http.fetchPost('/member/addressList', params) +} +// 通过id获取地址 +export const getAddress = (params) => { + return http.fetchPost('/member/address', params) +} +// 修改收货地址 +export const addressUpdate = (params) => { + return http.fetchPost('/member/updateAddress', params) +} +// 添加收货地址 +export const addressAdd = (params) => { + return http.fetchPost('/member/addAddress', params) +} +// 删除收货地址 +export const addressDel = (params) => { + return http.fetchPost('/member/delAddress', params) +} +// 生成订单 +export const submitOrder = (params) => { + return http.fetchPost('/member/addOrder', params) +} +// 支付 +export const payMent = (params) => { + return http.fetchPost('/member/payOrder', params) +} +// 获取用户订单 +export const orderList = (params) => { + return http.fetchGet('/member/orderList', params) +} +// 获取单个订单详情 +export const getOrderDet = (params) => { + return http.fetchGet('/member/orderDetail', params) +} +// 取消订单 +export const cancelOrder = (params) => { + return http.fetchPost('/member/cancelOrder', params) +} +// 商品详情 +export const productDet = (params) => { + return http.fetchGet('/goods/productDet', params) +} +// 删除订单 +export const delOrder = (params) => { + return http.fetchGet('/member/delOrder', params) +} +// 商品列表 +export const getSearch = (params) => { + return http.fetchGet('/goods/search', params) +} +// 快速搜索 +export const getQuickSearch = (params) => { + return http.fetchGet('/goods/quickSearch', params) +} diff --git a/Code/Frontend/src/api/index.js b/Code/Frontend/src/api/index.js new file mode 100644 index 0000000..1772ce4 --- /dev/null +++ b/Code/Frontend/src/api/index.js @@ -0,0 +1,21 @@ +import http from './public' +// 登陆 +export const userLogin = (params) => { + return http.fetchPost('/user/login', params) +} + + +// 商品详情页上传交易时间 +export const updatetime = (params) => { + +} + +export const emailnotify = (params) => { + return http.fetchPost('/api/Mail/SendHtml', params) +} + + +export const userInfoUpdate = (params) => { + return http.fetchPost('/api/user/infoUpdate', params) +} + diff --git a/Code/Frontend/src/api/public.js b/Code/Frontend/src/api/public.js new file mode 100644 index 0000000..1afd3e8 --- /dev/null +++ b/Code/Frontend/src/api/public.js @@ -0,0 +1,23 @@ +import axios from 'axios' +axios.defaults.timeout = 100000 +axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded' +export default { + fetchGet (url, params = {}) { + return new Promise((resolve, reject) => { + axios.get(url, params).then(res => { + resolve(res.data) + }).catch(error => { + reject(error) + }) + }) + }, + fetchPost (url, params = {}) { + return new Promise((resolve, reject) => { + axios.post(url, params).then(res => { + resolve(res.data) + }).catch(error => { + reject(error) + }) + }) + } +} diff --git a/Code/Frontend/src/api/tmp.js b/Code/Frontend/src/api/tmp.js new file mode 100644 index 0000000..61a0b3d --- /dev/null +++ b/Code/Frontend/src/api/tmp.js @@ -0,0 +1,110 @@ +import http from './public' + +export const userinfo = (params) => { + return http.fetchPost('/member/info', params) +} + + + +// 获取appnav里各类选项数据 + + +export const usersinfo = (params) => { + return http.fetchPost('/usersinfo', params) +} + +export const insertGood = (params) => { + return http.fetchPost('/user/insertiGood', params) +} + +export const getGoodList = (params) => { + return http.fetchPost('/user/getOrderList', params) +} + + + + +export const login = (params) => { + return http.fetchPost('/api/auth/login', params) +} +export const bannerpic = () => { + return http.fetchGet('/api/Good/Banner') +} +export const goodsitem = (params) => { + return http.fetchPost('/api/Good/GoodsItem',params) +} +export const goodsitemleft = () => { + return http.fetchGet('/api/Good/GoodsItemLeft') +} +export const hotlist = () => { + return http.fetchGet('/api/Good/hotlist1') +} +export const hotlist2 = () => { + return http.fetchGet('/api/Good/hotlist2') +} +export const hotlist3 = () => { + return http.fetchGet('/api/Good/hotlist3') +} +export const KaoYanList_shuxue = () => { + return http.fetchGet('/api/Good/KaoYanList_shuxue') +} +export const KaoYanList_zhengzhi = () => { + return http.fetchGet('/api/Good/KaoYanList_zhengzhi') +} +export const KeWaiList_xiaoshuo = () => { + return http.fetchGet('/api/Good/KeWaiList_xiaoshuo') +} +export const KeWaiList_manhua = () => { + return http.fetchGet('/api/Good/KeWaiList_manhua') +} +export const TongXiuList_shuxue = () => { + return http.fetchGet('/api/Good/TongXiuList_shuxue', ) +} +export const TongXiuList_yingyu = () => { + return http.fetchGet('/api/Good/TongXiuList_yingyu', ) +} +export const TongXiuList_zhengzhi = () => { + return http.fetchGet('/api/Good/TongXiuList_zhengzhi', ) +} +export const ZhuanYeList_dike = () => { + return http.fetchGet('/api/Good/ZhuanYeList_dike', ) +} +export const ZhuanYeList_jike = () => { + return http.fetchGet('/api/Good/ZhuanYeList_jike', ) +} +export const MianFeiList_jiaoke = () => { + return http.fetchGet('/api/Good/MianFeiList_jiaoke', ) +} +export const MianFeiList_kewai = () => { + return http.fetchGet('/api/Good/MianFeiList_kewai', ) +} +export const detailslist = (params) => { + return http.fetchPost('/api/Good/detailslist', params) +} +export const insertGoodMysql = (params) => { + return http.fetchPost('/api/Good/insert', params) +} + +export const getUser = (params) => { + return http.fetchPost('/api/user/getUserById', params) +} + +export const getGoodById = (params) => { + return http.fetchPost('/api/Good/getByUid', params) +} + +export const deleteOrder = (params) => { + return http.fetchPost('/api/Order/del', params) +} +export const updateGood = (params) => { + return http.fetchPost('/api/Good/updateGoodStatus', params) +} +export const getOrder = (params) => { + return http.fetchPost('/api/Order/getByuid', params) +} +export const updateStatus = (params) => { + return http.fetchPost('/api/Good/updateGoodStatus', params) +} +export const orderInsert = (params) => { + return http.fetchPost('/api/Order/insert', params) +} \ No newline at end of file diff --git a/Code/Frontend/src/assets/images/6.png b/Code/Frontend/src/assets/images/6.png new file mode 100644 index 0000000000000000000000000000000000000000..77f5bf37fc1a8cdfac5a3b4efb5642fb1824cb7a GIT binary patch literal 2442037 zcmV)FK)=6
lZhfj2q`YE5&*^s&Gfd
z9e2ci-@hX6`@ZkE AYpj1vEDVe~Emrt0?;X>HK%g?&7M7dhd{KfV^(b0kghSwdKtn
zX!lCj)|qK|Y?mF|sK2w-nqIW7cS$??bG;=seK8lo(6kYhpKve=e6Vz0SN8?zK3q7<
zd#aU8MnosT%#yZikM&-&1Dnj4q#Y{N72n=phaP<3j;7sLrnjGd>n2&QO5L|yYaOh2
zzvHmo(y~souZ!+fEu(w#nmNMx`eDCCQ26Li9ulX_ar`Gy?I}IW@_%Ofjh(ks;y;oy
z0vu&xj0;98d#-$t10=(5x!Xj8o{WE9ZjN*4;6I(+UZnEm>Zsfm9bYi37;9Rcr9#S^
zwCa^j$7me3M{R3uI>YCMEo)G*KSXrPM>W=Lw2C7ptP&i67PhKlCsp<`znG3iVkbua
z@p-=$B>tN|OVRf@e$c`tA$-}wB0H>*W9`tP;sNe)>v5Rg7Tha|a+G704;dDmSQTD7
z8nRAzj!xRailY#cHUZxg4UB%#I^$)CYaFo%e0 bcpXZPFzY=o|+08VsGK>Vc
z068+$zw8wrtxZAB#VvGEgfayV<1(RVqFwcn9Lu;?rE3J^WilD$NY32*EzdeM3UY3<
zYkjL*-k@b8!pLOBxSe1G|C;Jj{J<3vTzrk$<3_a9DjOkA*{eYhL|Fb&o=Ut6^2P(U
zB@>yQLA<~u5y#7E_%aLh-Kv}{hhV<;!_4i@2?$_EVIU8A-CL&bcnc}D?of5zIcj!+
z7F=@?nob~7A2k)Pj5g8{T+6({NbeXhm}rBezL!C0^YaqnjZCeY$uas_`g>YRFx8Ijtx5s7oy_PaCTVn$Zz*Ug0s~wWtv|AAKzpncZ
zy8;sc+)U1S%|fW1eF5c7%?(Z}Aa(BAwO&`C3R}jyE{C9lHLH=s1XT1ViWB5@2q)wE
z0#LxV(v&ghB9tjoV<_@SAUPS?2mc
0lDc8A
z-rXZ$*
zleZ=T^xDc^lpqs?zLH6UGK|rGZ>32)>j6G$E2uzNZs;tt4915Td@hQx--=kbNi
B5tX#a|b3MaOnj_7S!
zPU;$?+G6()L--@YZygam>$IugXM`Ab^Kh@q4L&K_|E3q|=x)hL@{ZYLz{7VL8lytU
z%%;&_k&ZsDQ_&GaP+MJbSF=ZUqGEqI1E;e*&~!mpU2t-^QPpt3Y&BVAneY%%!fOQ0
zs#lHUSby8^NcX67a&q(f(xa8AC#E5+=nd2d*3<^Q>x8j7Z0Zn1d3=lOA^rg(lfHgk
z7v~~em&>LWa%Z0+4#qM$CQzn2qj03I=q_JpGUAX;#ErDjGX`3ulYnla+Xh_&vXB+v
zw8*wg
pU$age94nJL3
zL|0&$nPq}Gob;-{p>?sg`w9uFg|ZN4l+ooFkI|5~wfFa<8{ict7d3QDuBf)4DN)oh
zBZmX5Gs@72R-8os1$yZeKi)vLFI$!N0#6H+5F^c$YKO|`MCh6gjR&~}=60;*5J<(_
zZZ}_35N^wt+>+Z6l2~-Ex9`A6Aex3^l=Ov&Xo};7Z#2d^)=nmsxd_}jq#D4GSqOaJ
zlFw5<5DpjkF9oq*+MgJQbJ?Q>f>Hb@rAtSq<_-syJ9Ka^0@kKzmFkCOwv{ErK^4d&
z1{eV)r@=Irt@T6fTouRX&N86F+KLG2BPZ`+#y6b7NLF0tN;Rw$L8p236Q$#+D>S3)
z#?llq9#UPzJKMPlga8{Ez7hCw3{ow+=v%$oS%5w}n9*t+xvV4gh-U;xX+>{BYv#P!
z%=ER>IGtB&&Z75HVN;qBOA}(phblUZ1Qhc|SlyQ1DL|yhFt^rl_+c^zr;5PsP~47r
z?b^AG{sDK=U08p|nF`s7ZkP$SzL>S-AQHmDAXZL}hl|ozM2IBjx)Pdwu68!|1#^;!
zE^uK$3~Ph3xWWuR2lWx{Aar>nRb%=*ksK<*6=jVRM=Ka(0