From e405fc615d6f7caa0405a0fceeddb5f5e6ccf0f8 Mon Sep 17 00:00:00 2001 From: caozhou Date: Mon, 24 Aug 2020 19:32:41 +0800 Subject: [PATCH] add mindspore api introduction --- api/source_zh_cn/index.rst | 1 + .../programming_guide/api_structure.md | 37 ++++++++++++++++++ .../images/api_structure.png | Bin 0 -> 22544 bytes 3 files changed, 38 insertions(+) create mode 100644 api/source_zh_cn/programming_guide/api_structure.md create mode 100644 api/source_zh_cn/programming_guide/images/api_structure.png diff --git a/api/source_zh_cn/index.rst b/api/source_zh_cn/index.rst index dc8e99459f..83080af373 100644 --- a/api/source_zh_cn/index.rst +++ b/api/source_zh_cn/index.rst @@ -10,6 +10,7 @@ MindSpore API :maxdepth: 1 :caption: 编程指南 + programming_guide/api_structure programming_guide/tensor .. toctree:: diff --git a/api/source_zh_cn/programming_guide/api_structure.md b/api/source_zh_cn/programming_guide/api_structure.md new file mode 100644 index 0000000000..9a42ef6642 --- /dev/null +++ b/api/source_zh_cn/programming_guide/api_structure.md @@ -0,0 +1,37 @@ +# MindSpore API概述 + + + +- [MindSpore API概述](#mindsporeapi概述) + - [设计理念](#设计理念) + - [层次结构](#层次结构) + + + + + +## 设计理念 + +MindSpore源于全产业的最佳实践,向数据科学家和算法工程师提供了统一的模型训练、推理和导出等接口,支持端、边、云等不同场景下的灵活部署,推动深度学习和科学计算等领域繁荣发展。 + +MindSpore提供了动态图和静态图统一的编码方式,用户无需开发多套代码,仅变更一行代码便可切换动态图/静态图模式,从而拥有更轻松的开发调试及性能体验。 + +此外,由于MindSpore统一了单机和分布式训练的编码方式,开发者无需编写复杂的分布式策略,在单机代码中添加少量代码即可实现分布式训练,大大降低了AI开发门槛。 + +## 层次结构 + +MindSpore向用户提供了3个不同层次的API,支撑用户进行网络构建、整图执行、子图执行以及单算子执行,从低到高分别为Low-Level Python API、Medium-Level Python API以及High-Level Python API。 + +![img](./images/api_structure.png) + +- Low-Level Python API + + 第一层为低阶API,主要包括张量定义、基础算子、自动微分等模块,用户可使用低阶API轻松实现张量操作和求导计算。 + +- Medium-Level Python API + + 第二层为中阶API,其封装了低价API,提供网络层、优化器、损失函数等模块,用户可通过中阶API灵活构建神经网络和控制执行流程,快速实现模型算法逻辑。 + +- High-Level Python API + + 第三层为高阶API,其在中阶API的基础上又提供了训练推理的管理、Callback、混合精度训练等高级接口,方便用户控制整网的执行流程和实现神经网络的训练及推理。 diff --git a/api/source_zh_cn/programming_guide/images/api_structure.png b/api/source_zh_cn/programming_guide/images/api_structure.png new file mode 100644 index 0000000000000000000000000000000000000000..9bb9f2c1f4402e4b404f76720725b10b27a4a89e GIT binary patch literal 22544 zcmd4(Wl&r}7cPu$+#P~@f&>T}G`LG30Rq82kl^laL(o8Q$lwGBgM{E32ol^K0)uM? z8=SlIzUQ7#PSvTe>fT#*f6QjsP4B&W_3G8nv({>2UTG>5;L_j%06?IsqM!``DDB|q z3L6u=b3bMz3I4!wQ891_06fxvAC!sZpj!Z70#p@bb$xOUmVEw zASxJjE^KXPoODbU#{{$xSeaZ*RzR=KZg@32n%r-I#qP?98+Ju2ISgMW`oNlP;~N zt7G4MbZau91uk1$RrbTL_39gz{HnXl+bhzVv@4dI$L_7+1nTEcTZC;9ZZt60x?D|Ado3_sWzhO ztk8^phJBsKh=KU&kZwXYDHaxr6uKl@B6%u7)`DfQhq#f?BX$xJS>bx60NkP>n5H|e z=pri%OU5GWO0htUR+=bWhd=*PTm}mGu2uw1lWhl4LSiE8&KoQ~a=-ZeQNpl+vMi2U zu~j{CWRJX)dbPj60D&G67a%I-gK`p63EPxgL$!molDWCl)9vTjI=_F`fdQDWBDFfM zi3hh(fuhR$_}nhbSaP%VqZksv{JV^keUyiTh_!UXr;fX*Y`$|gyWi=k!gvR~%VK{5 zo%fed+wZQNl>{6hHNihc-pyu!Q6qJ zbyA!(p)9*_-NL*NaX$`!E8HMa6HNZ9V~r&t^B|yLQa;0vY$LGBmwP*~?J7_pj#Fx_u{o8dMdz6w5?Df(rDXPZJCD$~Z}3Tx}?$?cwNjV0I;8Hf;)R?0KWb zIsR?OIup~aXrDQ^7#dXel99S1iKvSiTl$L!u^MC|c&(+9jcuV@b9&W-i|w0&+55-F zALl(8vxecHgO2Z>GH#^XOL%XGlf3SRs}7$Py^Kf_Aq3S1DicEX?q|)zdFM>_DkW=1 z`MZE3J(!6Lw91W#tR#paYhK+C@BFh^qoWMV_|lmX_CTAo%l;TUzIe*t$O`A|U(*eR z0%RxcvrMMv$HaJQYhMEfrHY*8D=W}ZIm*`9ysAA7ldjplrsmGR6k^)ECw!dZ5 z7V}fFOQIStAnt2)%GPg*ytW%>STy)$Y_QE?^;&YE8*%Z_b-!)IOn)07lgZ#VoIWDp zFM1{%8;H z&G?MN?8wqnalhOIBY2*aaO4pytCGE==9kbAOwiOs2>iMHqd4~vz_pRWc+=Wuym%L{ zoa5O-R_23fz;Z$gDlaW^wmI~BlH!(%CoaBu!22f(58t^VbaoNx*r)6v&7ze_4P^>x zd8WkHRN3TxfhL-Gcs4}Zda(C-FHzoUX;D(j@3#*}!;Os$F;hbh%~+b~_Lr5n;)YDe z!G&7XMEqyf223Muv*&aw9v80GWUpK$K@Ep6$z-^N3r2M>`Y+NH9RX5tzQYGkWRUn8 z!k#kM0X!S0%F9+%`fG7(Q?f{5EQ5~xddji3NEDH~u>Xucn)%)9| z!^XB~VdE_lRb4R}wz1BX#(Vi|AhLq8lB{}9Nfrv*NDbPk!JgaTl z?>iS?^zYP={*JAG@`qlXN1zP$Oo+jr{9B|qv*%ob{f(2m%+?g5&_(X$?;N%UW%r^z zVcOU_PCH*bQBLkX+Z+jAd+(f6sVuZ$xG4*oKR=&O2s6U}+4vsKipuQ{bJY}BYG|1j zQfM_@*lnr%N*CgetniuLTiHa!5VM)WZ;2Ec!z&vaf*`0}DMlQ1*Q4S~?JZGX5X{We z4Vl`b_C$`0W{utM23j@eHXov`x_KpMQi&Wean+a;IKz`9Mw)10&Jyxd=gr?3o6gC> zfe~^XKazLDELxCfsEd%vm=quG*lwrzCx|B zdqk(a>dqxS=jXp4t%N#q$??JWX0@qw9&%$}lZW1T8+x=|EMK?1d;SVu<}d7nAT?jG zoYmH^tu@H8rGIu!y`gi%{I~?I%r{9`ngB?m?Fe(&b2<8e&Xfz=I~-LvX*jQF#GAOF zjEWmSy(Wm0mHM&zMzh^zgu1)#SCSOg3!E4e>8~D36U|SdfaA*=bP5x_ z!^P&zbaL!J@5_mw<4!_WAuC`W4!j{>ma9V@q>1?Hd^^0a+Fydv9aX`DR$5C^yGIr2%tR~a71zT&ad{@KWKl6wvw`EpYwxl80p&9=1eK2^pmv~ z-5`w-^KXTU*VDsg?DxmLDqgCu<@z%*n-E-()1zon3(O*3>4-Yp_z4RFJj<(GVs$R2 zTygaGrw<(Tgs)W~f@yL&H9`e}Zu;y5cXfw~YtGqQ@$=4&OM>2O=V*ngSQC7T!{QV`rWwUZ3r1)yGb=z(9Y345p+ zNk}+Vcm$<@|G*>kduwX&2FFR0OxGeQ2?>cJgSRIs$*1zaLH{rm-AZC22sT=M-0;A^ zg8X}4LA5p?Vu0E4&|03=a8bggy^zc>9#Vqm$m|G(sKg8CBr^}lD5;UUY3qE-%qs9u zk=1#Ih~zlVY;OKL(2mxxt|kAmE9B=AT@f2wREaAKi=4U78QqZZ4FhOQlMg#J_j2#<@z?pG1${NT+b z@dU>P{P|FwNmMP zSbVC#>-jfy(Me8ADOlN`$C$B@yQv~vLA&WX z`AB^^ONqs-8XC;((yHAU;g+Msy6NSqbjd!LAe8SWXLH1cmJ|L zx(4M=u_&KLto@XR}c=*bSa9E>7xfbColA7 zH#@2KSUvflceEQGtvkkW7(&2pD;TLRl{&q8M_T88MCh(S?kGeVOtv8AEibX{1o@@! z&$Aj#cOFQez~AdC;Z}AaE_HrKWEhP60EB>Re_uLy&+yqJGqmN_Y!o0(di9aapj$`q zU0I=UC=A)ZWGZ)r-^1NbG`7q9d=>@puyHppyH8K#Ia_^pLVO(gv;US3^CL`9Fg!nN zkQx;xhzjl||GcW(I~k`rG+<0417nUmMDuvoizK!xG=m=#vfExV1a&N*I2<*}J+geX ziUm}+-(zpg6aoNqWk2%#&$h!(4?9n*3}RA20H9V)N$3b(9@&{C=0J?(N& z%lLR7c9Z(u6vU2~j~k>sX76w<-$@nKzk^U;xzH`6-ON11&WUT2kMCNnw#=uV0gYew zkFU5k>fZq&NjWIsgXV1J%kcNu?N+W=r!v?#(apf&>wi(fdoRna0@J^1YRsa6a;5aq-ri{>~PiA zL@&h-7WHHW&z0;3(`5wrja&i{-rE|y&N=&mHGkc9V6EM6^uh7nBsBb)LyFho1pzO| z6|0@!e29GCn3ApKYwYBEuQz-8C1S%pyVvWj*&R+q9ZS#BC7#{yXYNnhyA}?mk0i&R z-HSzBD!dhu+;-;{YDG{%pY|`S9_^25w2@@3&$~?Nq3EUT2l8790W#&%2izUU&;N-t z#DEnYjl8K}KK)W3fK#`rzO>>V3|l#5ocDXp#K!PtMoR)|ial?Ik~eA^ncw^R*#0U2 z4WM@0Cz(BfZMStT&<7Yxyk{Hn7(unKU=lgFu%{^0@;HRyWAfU*!rA>R(V4TK&si1% z>Z{Dp|2R9aLA_&Csou*ssKeF(igY;c0Cszn!?E&b4o9s5&>$E(xmLAA!{3bZIkWNl zx*V&6FX-xG8N=Q=>?ZY{VYVIxJ$q~`;{-#qo^SAqzSK<4+RupwdQGLyE)%?-Hs^%4 zh`;G^Jz)}3q?85Wr8t75=jT=1G5rH-R&CRmhA99LX+ocVX5cYlOM2|EY?7rG!?%Pw8J-ZVMEdh&#nH?ZaeGNVxXOjvWssfPBA z{sTI&jl=5;&&%{gb2z^9F48x14NYkIByL*id`s8->w#!}PQdQtGt@tHyffbSl$L9{ zphd`mT5BKM$Z7I)j=qO~J+_~pTBFNGifgI4{#!|u6)3<(IT4oQtg9tgM0iSGrcaIi z!Gf1V#FXJ-9Nx%i*TuXviTiZ!7|+%7Z_anN)*^2sIL=dS)QGJOf~Y#HSmw(DXT|5d ztMD4{uYW(~h92I?9?R?#V{nbR_94_hkq`Ocd42m}3k$her$Ct{`Z@}^*do2M3ZRZb zuwG~25NL%aNPw=nD6h}xvq@j+7brIwx=;gcYC@Q9(ee^Tg$eFA0noLoyn+jgQd#$CgWYO7 z^nR7N@abpFV3Ybga#`}oyu}Tl;#YWmqVdAzV!gBa<+6#o-JP*kF>+i&4=I~I#eZ>s ziN?dM0)Cr}c=CLxK(e|-`7O=W%miaPJl0;HDbrGk(g2GZU3 zQz_`fArJ__00+C|fzH8u$X`K$RoP=x($jRrrF}ANvXb8Jh>umNLRQ^YKdFWoWjE^W zTYA!3GWaWjrvwGWS^I^erktOD3ThVGvlTSs%~jBj!VfUWKDz6?&Pa{xd7C@IJdQnK zQC~1=*)8F(wO(FUm_Lh&WbZ|&tr73J(m3k68?gX$p6hhU@be7)97colX=Z-C z=qG}`mhhF7Mkhbn&WFM+pJErBO;L=_MN$I&zR`Nt;XLKnUbX+`#aKHdvb^~eWg1k4 z3eLM6C9Y{YxV?i&fhhYE^gGfkHfFu>az8;-YWM#+z0Wn@xQm5z5B94}Mdz8ZtUm7D zBQB&M?$3b#_YoH#VMS$goA{rkdS)lyudR`MZ2a%$tX&P~`Avu@v(>k?yMBzTkOxnI zr?PPVuGJ^jb^nKKN%9J;0zzl0Gb7?SAuXFEK#1pJcJ;AArGpGBjcouqflnOoZ3dFO zn8yeoNO~qDE8+U+phcgHc1)$WRe7AL*-ihIPn=e99lW&bwKu-DI+}+LZ+H?vhTEwW zAajcpk!v19mo3GzJR|n-o2&4a6?DP{WX5(ae34?J32lo;!ps8(3?VjygD!NprI!1` zw|u9sgv*M1f)}Ghy z;X#^vC2!Zs!hF!RrRSuSf6Gg(v4C&rx2cB01@7eKbZ>5}wh1^Ww~F{vSqYSG)upG50>YHjtJOBRqU$kE}H1 z&~;$+K3>=TV0*_m^S*{vf>SupvHQQ?#xth2BY1k~lFgcWY{BB!xI4XCwA|C0eQPeY zlVsHYlTT6&09;%x#2*{6BQ7*Zu6136+D?*I1s z(UP)S`La|z2Ew6HaCnpPAEuf5RU?4H2z)9_-_}G3$5KM>zQRi#EZEaQ0#$!C zV>GI1Z*!3y&kPZMGAO;hl9L-Z>6u|sZy(chDW%;p2t+9^O%u;hypqrGa14TNFrlNS z%Ps{#635reC+Mc?X2tvLDRfyfgj8xK;#Voh1P=)b zfgtV%8pv0ZGV&D~6cmJpuyNj#9P4EEq#NPdU6NTTD3q6s%k^```!xJE?u5lgie9j& zJWu`Tp#>5}vR(}=%XQY3Dob0>kCdzEHbGxLgR-Cv4^?qaR9VJo_0tj69HZ z#3-iA^>gYKIV%QN=(x`>cV3D2pJS!sgVM98sL-Mf-yT1m>8Pcww)Yq_z9EhnpQIr8 z*Czk3&9g&yW6qRlGq_37Ipp0yuw3f~NMUYvzMDt68O%+yMpj#1Cen|Hn2)ldJkba|71aIFVE6@-6xuUA%3 zSoQ~4HS(z${~07o@-itxisE7Ok+z8cq`_OlgV4%*kK@|w$?Dt}Fmv7CwRB6dur>*n zRp;sSodqLmM3Cwxd1IRY+;SQu3Jcz1Zy|k#1%#}PG~}sj(qG-wXW-qO;u} zJMSVQ@!xzv^#$2{iGBx2lJ9olA&Uf2?-Hr3B@srIJ|<@;Nv52olZyeL9adZA?IKsxt|V?SFWLGDB_}YxU%t2Ys_$hVV0qHqzr5|tPYIT7iXA+oYPsWGm7{$v4a0$Rb}7TS+@*3SVMVZEPTdp&uZ9)gS! zPJ5R9lwd?`1g$!tNl=@40=u(ES)LR>{b%zHPlHW8&31Z9M%$7Vz4D?jsLiO&PN%u- z5kH>?RBo(`PB(KRx|jJ^o0x;4lGO~JY<5P6uC|NABkfO8#;2jy0#QZM%8M9p36CN- z|Cn}=sqlH;#Ad#Vnxo!?n7Oe7ofn%OQQW+lan+1BxPZB&DTexVI)hbpZh2_&p86au zW{_0!05*89S~n19u`CPa*r>cc;(TuH$V;%|XyiNE-Dip%@jZQf(G&4?#s zS{>-FvnzYtEyt2ohh*n}V45_^PA4pHyGH{lQDc?+f7b$d2VgIbD4SHFbT+O%5&iHGT6FB}HM8u(i!QI| zy?h8Us(<>`AJCVnY+HKcgCpTnG&?1?#0fg~Is1rT zRse7~`*1Xq<_cdmwgH%&b{X?&4;}iv$}zVZj=Z^?>D}>2(*hRH7i!O$ZRh11I$b|h z+WX#ql$Osng+3N#wnSGO%4njm}eLJtx`55MlS7CnhQ7qV9{dx zq22MklsVTVG2=bni!_nS7JADIx5vw;RLMua_~6%!nR7Pr$!u?M^pR@`@hbP@>?2nG z%th2D5k-ta=ywIHsK7Ug6`9+UW7gehBj$HJkseM~V}Tj7t7!c8IHbq71phug-=6R} zH(~*KTp8FvHB|KA>G9V)EFp|l7f?%8-;d}!WY_5>J&y@Q9}Udm3|L3__UYL^=mcXg z_mquLHG9*lu@!Rd{xS(7s3SYZ1Re+69jjcg_@gCQ?Wx%^@A_vG`~PtFb|1AR0zmyl zC%q!PCh%E$Yg-q zHkTDE%J>+T3l+V|y6sGIBs>2_%}Ah{ok_s&FXmt-g~M&UcTGAK&lPnyMUvo=ux$4X2ABI`?@uZEcVqeyt zC*5u?Rr|g~jz=8WQDW7HH$3ZG53~+HM!xG>x6J8sn z%g1Sjn16K{x!y8C^S|S?b%^{W^@Cb4A05b3RYhL5*KfGZYN+cAQPkgsv~4k2vT3++ zmGb7!ENf=XO3@F$Ov+k`blM7E=GTy$y$QM7d1iinfU?=Lvis7*a_h&~XzNt;b5=JH z7gbr7@W{;G>|2Oc)7JAsBb=_oiQxp{Y3aj`)lhLi(?-)>R4Xu&lb5 zhD0e~H&ZoaX4hLwIhZ*_ALr_Ve<`RM$AT(~8ZTj4XP&k2r#VZ-GWQB2!?S z+LJBSBHYo!vw@Ul_vNL`Y#vqKe(zK)na;sTLX`*n<2Xj=$(8-cY|1-)15=G*<)1&y zj=w8-wanK}9X;fV6`i)REBDur-EEjm5Y=D!Zr+?LSbktwuWBE#n$Ad$HDBCaT7JKX zl-Mb`w=-YnHU@oz1(a3qY0+))6(f3I&ZCy}P)Y@g8l6lX@(HCu(V)P}v=A{VB{PwMOrrCQNGNDqz$o{P}e0a8uHVlg#Xq z8xZ2CWepqOyFQ@Du4!Y}J9{kN#fNpV_lA$%Rz}2&rD()UG>eu*znvJg49(DtAL#Xg zBUVNWKUYjb!tx6moMcIgMhHa>X-M>?f@L1k!u|7kX|JWJ!^a;N%M3LW*58d-eQo9^ zGd_;VEDT`{u^DBDWNNQS8lCaPVB>67A3jL-#2MRZ3tG%0o&ikn0^ZBGqPoyCPCYU? zSdd)k4!X3OBYc5&_bZ*iHyQ7fG?+rWdR#K)TPr&>^h7>Qz41yGGCydsjIhrzHNZJt zM0SnO`Ah2Ep7Wvt+|XMIhv~(9E~AYf$8%h{r42^XzStLg^kZiC@iO||ya@{(-KKXr z`{S(ly--my(BoQMZ&&X4AyHIp?U(mHu!|?E<3!;$EaxCZ&dP2U9Cxl~(UL~KcvR53 z?>Yl#ru_^Yhdl-`s=B5^zeV0JsQjnmbBVXqB_c-=cgAg_j=fcvD0Pb7U7%0Rm|4b{ zp9*Vy5{$hk7rdCyo8$U2=YOPWMD7*YYyyMZfX2K`kxMTKiEf1&Fsjl`u3+w zwetJSGgn-We>u>)V*Wi4-u|~kGBFlyPRX?5ilmfC(Wax`KV)BU!${Tvnb%js3!mr^ z=D|Y#JXssf&psz!e>X}5dkG@r&ILTT{~J`Tk{=q}J_w}pbr>$~ZM_flz5C7>uyk{Q z^P8aq*YcE|S-7L8^pRX-i+GF@)nFGdvr&ur-GMYS)zdtvfckC{B#MGf3MALIlw}#7 z^p?CWU;26>*B0xnG#1GWJ{>oi&Mg@+Q&Io2YoE&bK&J5jjjO`>GWFwV`kRJt-Scp) zyhOpgvUurv#Fp+N1@z;?QH_EQDx{GbR2z`)q2q2a7#Jc!> z&dVHlCi>WRgBg_Un1GO^bh|-mhJNm@h3B=ox4E;pNqGGhW?fF%uY)ICZ4KLfb1!t8 zDB}Bw3X3dBNRxGvGSUVls)@oSs?F@a$;-c_aCk>n^2~TkGNJuEdVqeePynGyC@~}L zC9QXBnY!)PUN_LQZPX&`P%84}k_7g!t3&)eE01h7e{?mR*>O z+~xuk5vzhZG8CpaZynu6ANx>#0EJyw`3j?wcM=kXN|-P3TtU;MgX>&@>&NNV|n2( z=qD8UXGlFzj)ipcyF4*Lq>iQGqca4KY(ux8NTIrYVC4k!zipYOn{Z`Ls#Y>+fT8N4?MZ)Yp`Gnb&>?Ptg65Pi`V^i)W7@itM}e7Qj| zuQ}~`;?MTu*rXoW@Yp@Pxx&c8!xwS(jFC$S&bneE0655QkKTYDz7iE+@l0M=G++6P zZ*BENi0mlDfnQGi?x{nev(nO!)w3r0!88#R;5u@)B`rqGhFAwp;!3k0EQ!e?d1Z1! zPiBTrH7kV+sN5dCgWzBSAwt2K$;_{*>K^WK?P8A=Z`ZRw6Gpc3Is1S?&W;lsi0VKR z%AD44AKR-kAWPtxlE~8=CPMfB8(E8Qtfbj)bFAr{{pTMgR$u zcfiNSV&2AN24L2GGL4{`@eV)h^(4rb@Xt=6N(aBzuCCZw+>+x{$KKqMT58wYXL@Nc zgJXya9MysK*c$&pU;moT43);2e~SY^OfJ|VVpr8p!9)|8`Y3>jt!bpw3M+9+Nx^=+ zM1D3B+asj}6&M=j^{gMCCd@EmqV<-OxS@2R^XZUC%N?t_#OpcJcssj{acI*K>NTM| zM|2#1H)+=Vi{AYX%3Namv;HtpzW4}{d-~=Y#hu^JLN*JbEEnrLEli)I-mTP7)aNG3 z83phjOjqP_USg7_Efe~8Q)igA5G<_wgM3XJbNx4^XnIGGL>*a6I=e)=&W@cj1>sw^ z9juZ1o(+wihr{fomr5D;_aG&tm(kFaI@32Mnyg9B%XDd3glTF;6yfhw-C-7`xmUN= zkh%5w_P}n5L}~Ud0`1w0O2F*$QH%1AloC0K_h=gz!f#FQgnL{YCeT5B9Bdbv*TAFI*HppOSJ1BNtIKmDH zY|R(1IL`E6U2(z}(7Be&5MLEG#@J z<6yOlyd0m*EMiWJA?jIhT_2Lv$%x2NY1OR!4}@OTFF8Ya@k)NLISj#v<}x+S^sd+V zEdd1|>`6Oui$3(wfikzDW&`g71wjFT|QF28_O>7zD7 ze|)->wmt~N(C&In2qPkv``(W3+m%zk`)OZd!y!|YF^0K{Vbtdv0hZOuz6tvKpvnxJ2bovF-BO69r`SU!j9E9b25<@}t_H zuUye>y}mKAg?Fgvj>wbil}&OQ*H{>spJJ>xp|v=adapW*p$EFz#pHtuQvtk!2M#=}5`A^_S!HZ74o#@{LhZO#9(pU^6jRh_B z=lw3t+)67gz*J;LFl=}4(oqF^+Q&{uZx~WiVb$2pH(ySC%*eY5kU(SKkGcnYnxG}|A`FD27I>ZeQ6wUSDq8wL`nLvQjvCe7duH5D3!pm)x^Ds_=PXRIUp#?gF zuF<&}r9{oeA`^lZzyN{!Q90dSy#oI!LnO?)ybpC@JaTNMWxP`JR+4skukYNKr^J@! z=nDbt#L|y#{b=QnpLG4`X-4E=Xyo9H=Waj&wdA9$)CcEIS&}=GeaUZ}=ai{2yx;TQ z?h^Ma-!Jpce2*ipBf(K!U0t^*JFQUF=VNG=2on5b0xqweLE)C)=eKaLrQf}i9!#m4Mh-TaKC#P4cQ;HJdjZyod36*O^y2zK1$)= z@d8ne4))OrG48){WTfu5<*EG;o>JOu@&S_vwSDRN-)}U;Xxc%T@=4H1d+gAfg1pNo z|2aCzYf0J9m;4$+_V#iGWp%P=?Y&5Q2CTxDze9vMYrlU0 z4?#qu+&)dtRdb9_S_qg=WhT1PcAIlG9~2j2kOl&CLPfs5dApT?Q=Rd$pFuy2^Rz1b z>#mr$+QqJD$U*U|&Fl0eDL=Yo!IRq;@83bZqQ!GZp%<8ydti*30$KPHn%LpP$wA}; zCJz5WzBCZ>!Tty2b4C0KY!J@rEh}#m^=`(z_CY&FmR8rbqN*g*7si%adCY4(L^&dT z4$OpwgGnt<)#YfvQohc;4Dhk~TPv@JD3qLso{(IkGI+QGi~aUL#)44%)xi|lS#08% z%Nby8uto5JB8|VCIE)G0v2i}WGhH}d{u}qwHwpcPbp_f-!f*SlP-yh0y?tnX`Z43N znJa_QX&HZ2u$k$@0oDVNS>2QNudO+uQx$eI0p!D3t4P{0tQ-W!atR|&v|VHD?-V02 ziH`cK2aLRy|NLLBq|>&ZYJ?IO&IZxnTN9k$?ldLv+AclT_|j1{>KULAy5(j$#*kY%{Py8Y%k>cLA#(0= z?5-eTqZ;0+eEjDiMjjHQ{>L)_caZ80wtYIam{sg6uU$(B%}bR<>Hh;#_l|y*u{30> zg41HoB24}ZsV^MoL(1^d36{6`C{ih_)&KW+dW5%!iP!vC;0Ju!HaPxdv*Bk_R!mVG z-7DSH+Cv~pOs-DfeIcHFm}BK7!N*K_18T@4~ezF`|a_btGmN4xg)^$Yti{;F(J zW-SCa7zduw9X-3-n1M@6@M+;{G~Ph25vrXR5A>-Z8# z#l>*TxbZUQW0A%R+q*`U-~Fj5`m%WQ5fC=<`jQuf(4#AH3@@2QQJ%0p3vCf8l+jiqw6qNGAfOms zihEXh{zEPLPXh?bi=O?1<$Uj73xP2hnk{kDYp{B18LanIV8tXe!>*HjPTT8!5B^S$ za`@0deE8sv5w~yVX5{278h){A77BjWbR zJ+DW4M1H@Yq~L4+j#+=LW9RQj7pkw$iX zsYD$1_dE0+t(WQUrd$fdw;LgT(PYwbTVt+`xKN(`|h`q3d zc?@I6+jpQCL3MhECF%?AGAqoN8fkK??ipqZyUYaSir8M?q}YtJT-m0=wznK3tAp;< zdsZ*K=PrN*cLHKOFi!O#EjR5^#oBZ ztC4JC7$Eln35Yr@q~2DqGut{kH7_yJX(7>~Y5`Z5JECpGS1%jpL*sDcH#ko_(pi7( z4MwYRK@_+1n+{{&wnJe8DN@+xM^X0+$r6N^ZB|DH*JacpwMO&my zlSZ-*%n|BYV{ZyR1#(bQiUxme1Qen({Gh3L1I zmFT17hmgEjS1!1nBPx&~vV`}Y(Xr3it*x(Uw&A6tm#K^^83~!$TZ0OsJp0KzNZU2h zm{t?jmg8~vLL(uNm+eOJ4f;T8=_Vf0Gnhwfw4o=mHY1Whe0IN20SfVW`3C))GGU(m z{;Ea5rYjf}odxA?hRcQtYUYF3~Cq;eYts zi9Z>RcGd=`@1p>%bE5Ybjf za#5l*r%8BkPnA%Anxv5n$rPntz-iAlmd(%4cIBb_!7D#xD8N*M5+c0l+m{4$JQmfm zd@qFsCTu`B8~l{c^Cm#N>6cFSOn8g2qZ*qP_Docm&HM>l(SEqn6=S}xni2(GG0cXR0rvGqr*^d--W?mghS9UN8JeocMI=hO!Oj7M9YAkJRz zCusWIi@DMZmDwI7|B@as1DyR8M=504Kz~@!T1xe-?$5@HY(Cf>8{JFWa5HM$Ecm5* zQWg!?i}WbJl^1`-A{o6sqhwae-d>ZE;j7%vjH2AO`p4iKuLV6k<+sJ~xUyQ(R2h%w z2|HS0mqecHAkE}vwK8$;K94TrAvV&gRj<3Ecjh~@Hpm~}na7?I%x8X1ZtwV2*$Oj% z;o*Jz4rC)?h_S$6cj%K5;S>fcA3diBo9o)$7d19iA3JOd`?g)3Mny!S{W43-w0`N{ z(%VocYXzJ2L2ixZi@J92+S@jq4o(ewkx<`?2}TvNiFl-=gW4ZQ^}LpZ*HK^*zy z1KEZYiFR~Ho);?=1piMUVXgqJEnzUlzYxw|!cpH`ZKiC4j>kA180u0yhiSR%I>~sfd&23dWTBsWn_^$w$Vjx^RvsS18bep_74%gWXfYCzx;ia zvhdU*i_^q;)KLz?ULVh{O zT{MzvWCoi+i`Z{G=wvRmcT%2@T22+cSNT08-^&qvG$yIga+1e;Yw!Hu$^cjCg|n;6 z*z~ZI5OyF3xoYqHp(nEti~qQ!rL|%E|5u2w$c>98;Rp-;KUj4%hPw%_&WBhZyl$iY zQo~7<91`u|Df6#H;pX&|Pdo5#^5WzUe#bRpWiR!7>->0dAA0xaVGZvoBL1nYgX!OG z)JyryL24m!#pdE25!VY;jhwc;W05=}Q8-@nOKDQVPtppNQYV2*t;#@HS`2vD0g$Dn z1xsqgniR?4ZTMjAfsbXJ8Ywg{cJoM+g(a0t$Pla-_*W#8E(k$^-WLdj{P7-~Bqgm%WA)?N!lds9DJJay zR2<+!=--t0J88!1y9d0XDH` zjY6a);l^2L?*6!{MK@v+?4U z3O!VSD1-GDmo?O^tSo?U4K!hLu#@dbj;yIEgNJzT#2P;IyLfh1ma!^m?@Es4JpGBst03g`@x_yqP|KLa z?`@wdw@)e1Wot(LM1S#3`HL)roE;8-ZD0_?{>2BiVc9ENOVxgRB-iJtY5VU^VWOYL zf!clin>TMz02*3a*R!414Mkgne#pB6J8PYFFZYj+rBste^WIoi7l8`hy>`>k)KqeH zb?vdTb9DSwW7P)$h02K+{(3v=fo8o|XSGNP^h{{8i65cGr!jE)HHR)^PyDa_p zD;ug^*5m@f@Wxz|duiY3Z2I{YvZuc^s|U+PCecHFxW2ri0x@Tm*u;}9=`Y-VntN=% z-0V5m=*r3vbZHSsFYzchH}`S{*^ULErSX_FlXK~P!+si-lS2oLWDdv^Nk*)%TRJS% z;Z(JreB6Hy-0o@x%h}jG(W^2&{Lx-Y6%fPA&p$prlkMCd6HhBbNYjnQ7!dONw;Iq{ zQPqwM_#D*qEnWMA>I6$b8h<>WvK^b$AFXY7JPW{-7xUO52DV{(h2sz+>04s()h^2^ zj$hA@q$lA>^vLe&CJD4MWv!n+7xT6?e&-*!LHSZsQ|B6-8Grx&4FJ(ZjF`aG)Kuf% zx!H`4@EDbvn%dt>cp@Cp$Ed8T8pB1RktKu!xcvPitA7Q`H1tJsvGn@>1GrkjRW9tf zfDXKE_TYThyu;E!B`zWH&kl;!(@_DvZ*N1nV2wX12KS~bu!clIi-?`B(1-U)-}3|8 z+%V_c@IcJK;T*Ba%6Kj5yQ%$ahvjAp&?>1UytubUa`Awo8ABQeKzu1!d z^nA`%GWb4V_Tdbi-+!uF2lex_q2taG7+Ln7HFhURpqGd`IdQ9NXlUU<^CQz;rB+o_ z``BlYUP_gml43HzBqlchroOtG7<|va33O^)!_?K+M+0Du>$nYGm=&uX&d%3tLlYC) z#-7t}R5Ua^V)NPOwZ6QVw_^Nqohj@{12o=IxvaW@!b_e5jmdZBj%TxDV0ebUVfCUth7xS0K7^V{0!l@sVt04jV; zZo|6%H%?t)7;js=coOKu*0Vg%>-N>}?iVe-I-aFKZ+p(e+X8JJ1FbG^Pe-wO{y5&f zI21lGa{4;jIV*g9vsY0C0H8hMn)+^1%$}5&Kb@MHu{@ZoF`Zr1=}^cox^#?D$sNfN zgJ-=2wTT9Rei=p7_BpMvgG=s-l;@tVe&!c+KHn2-eWT!;#Z}ag%)Gp#&$|ztFAnDa z$wWve8bUxTY(8IW6Euxf*3(PtBeS~ht+whTTyh)akws3=zJki;&A?3lU#(neJXLGk zUnqw<>Ld{r9m6pv5v2@eC>1ho^OVffLC9QAr3}eNqGX=7G1>OUHe?nu#WwHEY%^{1 z@Ls$3eV_OJ_j>t5@=?(6ywmwT;H2)2lRVKp`vi#_E)%&%V@E+2k<{8-6| z(rAN80t;%6Sa9p+&7e6-9&RKAaLlo}J|sZ)KG{?}MV^nchpY^_e}R|Uwv6*F7x-dtg=#pvb~TDNf! zS3^P|MW&5SZ{{CjJ?7vpOKxt8*{lVnd82tKxL(H*YfeB`2X5-j0r6cgxG?OCS=}Et1gW3Kn z8$8{E5rX&b`{Wa^U>gDhvfL`sj{I$!gLj*}!^_7fc=kkR(-(HG&WpvK3x?^6=R+9y z+-L%++rV|G`xfBkT?in^$Xb&GB_$;bNCWCOZH9VOm6Sq8^Ff=YTpXwV(K@wAhHu8y z|4rSxulWvMV2!e3FA@>%r0z!Lxib-T0{*AJG2(mt^5x4{T*nTLjg3)}EM1YCJH+0~ z%4&v8uGw4}7q_T6Bw~!eKl>&K-qJW~_4WXGi%OPo@DF8WWjq;^b8+zi=Yw2U$%9`I$(D=p}Q{|PVwJkq+k~=-q zYX1sN^+SI34;{@>{JLgl1&5Ea+BT#4LSDW4R3;M9A5e$0sHF#4G1A6~>_S+T1qB7s zX^bcTvV|NnBs~7~K|QlR#=D_6)ac03qcLyaW)Mw%+sIl-HN(ov%0RJQ6i`rJS(!{u z%gRe9Hr#yw=UZ`caq(ANxsSqT!)n$G##tMrK(idZf_3s0)b+qYw>mvd&1CoKZ?m(R zi6vz$$i=Rt8~;Q{MWwn_?e&ti7UM3=G|&^Mt+PK#c>YJkOJQL(N>$NtSSuciF3u-|i9fbaPrM?^$g$(Mc&7#$lc z(Z-0}s2-fQWW^!K51SI>p|Q|C8l=(!H*Kln2Uqm1a+ndt5u|sVg9|}!gf&1@=}4#% zf|!09TodP!L!M~r578pazm73Hkfa_6Gak~?)=s7S?O0Y(kyd16BqlfaCx%r4ed*Gr z@132=qqV_vaW)?#Ye$!xU7Lmdnz^oG2h;gmI1+V3LPCB5DA+;}eRfwGPjPX%c&Oro zC8eY=Sgh`6oA%yq%G@b-_Sv45CgI&L#H-jdsjN5<0jkZ-&4wk8ae9q3`{CWQ(cQD( zp|W)D-%rXj!ujlm#1m@F{Nl7<)r;Q9!Q=Jq?Cj#Ndl&VjSO2j#-A?={>wA45mcV_V z(41|;-n|*Hzh%R8`eHTtlKGo=?@j};dl!p&DmSM_)e+v~bSd@^q7OPgS(( zZ=nsUg3ZmzIyTnU8P;v_e5yhM z0v-E%J2BDG4_$So-Aj$#N{!KJ85w^)fA&m3Na*VrhPK_gJ7&bZ&L&GkZc7Q&3kt3U z%@UoMSO8iPla!=TT3QNHkwxmAE(;cg-uGcXl$?45h66ocZL* zo~|x#RSx+8!p^I-k`h$8*HSORdyQIjATjeyD-3yVz5c#DT087vl^2(*293oQ$NpR!f zQRYH(v47|0?4N{p@N~{43vHs=c)6*8 zL7bG!$h`9lNC8|$#Jn@ED#~b5PD*M$za+Tg6MmA@D<}KgvuB4?yD}34F#L&rT4+Fm zQO>+QccHSm9mxJ{y#iAXDaUvA_Vz!=BjkkucF{j;kIT=D26Lf2Jg{l+Ngj1<-GiQ1 zWS!}%y~Km9=|pr|Q`7APSzi>O-Qt1^mJ~R=uTCOe*kEU8$7E&UEnHiM_Y?XOhBJgK zzPxN#0Qcjw)+SB)@*9`!Y*#uu|1w57ly%s%Dn6dWslQ0M3#->8R`C;^l9DpixDBk# za^_4L3N;?2=hmjw? zo<>78FOMVUEIe$$PkxQg?Tum3Fj5g;l#^54Uciwaf$BIXA7Bj4r$r4jMt!sDg7c!TRRH$cq-8> z&_q}-Uq?ylnO-AL!SZir)6qZ{jv(dW`3=D<6crUcW`5dU-`MD|xjZ_6cTIgOVvqvY zJoXb=JrcNLrM}Sgu3i*snM2a{4cx${{OG5`%&YEGSy@@P0psv<{>{R)_3uA;elk)C zXI}wYX`X##XhQ!x^SN_*AVVY8`Tl238YC;7hsy*-Mcb$pgvVcb9vtlZe-vcx+Ojg< z=p=nMc+Wfj+G>cxs+5a}GYxY7CFDar+cZHhCN_2s7~xliq-SIp8h2LIcMnDC9YPPQ zIE`FfrS~-M9vR68vxmvcQv=zLva!hw*q-ILva!iYN~$KWBGqEHe)NMdOpOA7s(=bW&&vV3kA++4kgB8=_FNc3!sgo}X<5}fYHGTko+ZHJL*Xv_yIWts zeM2cK{xdKzz^m#)Sb4!aJM2a3ndwaBQ{CI9q#DpN_(;mt4wHRMZEa`NA}Di2jl+iz z13mfdEZ{t#sR7}>OI@u@;IEwu6ta96<-w7knmR7;MC_TUsj1;rg*E{-;wh=AlyBFT zY{CA4jovUyKz<0r*t#gx$WMJ;-5BUrEa3rd{jrYymw=iyrrQ&}%p?vyF;^Lv=z~Y1 z05_1EB6(!|w~IMAIEukj0kF(M{{?R`2r{8%(rp%gMyEkuW5Ei`k4z*7a~6%=dSc6)o3!>;AKyME!P#m8PW zs)U_(?Y4X(Zz7+t*hakgUR*nYFe;Y&!)~!jn6|l?01}2b8|t0R>?kNNZ^p>Th>Eqi z*4EYrf#qD%_$61qzXn)=SZPB6^jP(Ey*$B#*J!7M7Jw#D|E(Rg-k}ibt5{)64w7Yr zY(^Bn2B?e5qB54#51=OEWjrwd|C~hLQ!FeqUt@#~an1=sLPFoWx*mXXYm}6ho`cfr zsd;`B`=I^^sOpFaWz$iy%2vQG9L9aD?iHXZF;^XTozVt-O>CLoZ874Xi3+occGx{d%m=8~jqzu>KM~>;j-8$=#U|atFKaId^Fgp39PwS-H9Q zKq{eP-KgrD*RCr~6_cIa3F(`6;V=^R8L~?DV0R4_J9=VJN>0_V(EO>rg98O<&d}rt zayl7w?(^r*<3X%|&44c%)S-{3EOgd-W%{qwvr$#Y^P_C!$XlG9PiW|(A<1ay=r`xj zBIZTg+de%+Vh+?|WQzY9^-=k6e`m+ALzE>;}`+`V&Dym6VmU zeZ3qE-=v3&NlHcwY9JTGYDe!w5sO}{np_%U27(6h4j77@R{$3(a%MsGM#tvaW5M8| zMfUg*gq8>NZIQC5Nl?n*vuDqmW*>F!B0o4;Sy?kcw&t`jyl&t(F`A5vj;<@_M~434 z=HZ!qBqLhtvXmH@py@|fm{uM*CAm<50ukH;t3`k&zQw_bliXb;>8{G1(UM0mRPYlum>rOv&R}40yAew6o|Ux%H6}rp@Jkss;{W({8y?|llR}MiU0hGtAS@vYEHd0NbZ17{35E# L>Pq=H&4d06WQ5FA literal 0 HcmV?d00001 -- Gitee