From 23f16bca49d2df84f0766ccc1ec74f4e180be9ea Mon Sep 17 00:00:00 2001 From: keminLuo <541416002@qq.com> Date: Fri, 6 Sep 2024 14:55:42 +0800 Subject: [PATCH] =?UTF-8?q?=E6=80=A7=E8=83=BD=E5=88=86=E6=9E=90=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: keminLuo <541416002@qq.com> --- ohos/docs/05_performance/README.md | 4 +- .../performance-delimitation.md | 38 ++++++----- .../performance-threads-sequence.md | 63 ++++++++++++++++++ .../media/05/{image.png => image-1-301.png} | Bin .../media/05/{image-1.png => image-1-302.png} | Bin ohos/docs/media/05/image-2-201.png | Bin 0 -> 26985 bytes ohos/docs/media/05/image-2-202.png | Bin 0 -> 9908 bytes ohos/docs/media/05/image-2-203.png | Bin 0 -> 6685 bytes ohos/docs/media/05/image-2-204.png | Bin 0 -> 3153 bytes 9 files changed, 89 insertions(+), 16 deletions(-) rename "ohos/docs/05_performance/\346\200\247\350\203\275\345\210\206\346\236\220\345\256\232\347\225\214\346\214\207\345\215\227.md" => ohos/docs/05_performance/performance-delimitation.md (47%) create mode 100644 ohos/docs/05_performance/performance-threads-sequence.md rename ohos/docs/media/05/{image.png => image-1-301.png} (100%) rename ohos/docs/media/05/{image-1.png => image-1-302.png} (100%) create mode 100644 ohos/docs/media/05/image-2-201.png create mode 100644 ohos/docs/media/05/image-2-202.png create mode 100644 ohos/docs/media/05/image-2-203.png create mode 100644 ohos/docs/media/05/image-2-204.png diff --git a/ohos/docs/05_performance/README.md b/ohos/docs/05_performance/README.md index b0642f8e..f1cc70fc 100644 --- a/ohos/docs/05_performance/README.md +++ b/ohos/docs/05_performance/README.md @@ -2,7 +2,9 @@ flutter鸿蒙化的工程,也可以使用devtools对Dart代码进行调试,具体内容请参考 [DevTools](https://docs.flutter.cn/tools/devtools) -[性能分析定界(OpenHarmony平台)指南](./性能分析定界指南.md) +[性能分析定界(OpenHarmony平台)指南](./performance-delimitation.md) + +[性能分析第一步-梳理线程顺序](./performance-threads-sequence.md) ## 环境配置 diff --git "a/ohos/docs/05_performance/\346\200\247\350\203\275\345\210\206\346\236\220\345\256\232\347\225\214\346\214\207\345\215\227.md" b/ohos/docs/05_performance/performance-delimitation.md similarity index 47% rename from "ohos/docs/05_performance/\346\200\247\350\203\275\345\210\206\346\236\220\345\256\232\347\225\214\346\214\207\345\215\227.md" rename to ohos/docs/05_performance/performance-delimitation.md index 884e51bb..08892de1 100644 --- "a/ohos/docs/05_performance/\346\200\247\350\203\275\345\210\206\346\236\220\345\256\232\347\225\214\346\214\207\345\215\227.md" +++ b/ohos/docs/05_performance/performance-delimitation.md @@ -1,3 +1,6 @@ +# 性能分析定界指南 + + ## 前置条件 - OpenHarmony Next系统 - 前台运行Flutter页面 @@ -5,34 +8,39 @@ [DevEco Studio Profiler](https://developer.huawei.com/consumer/cn/download/) [SmartPerf](https://gitee.com/openharmony-sig/smartperf) + ## Flutter线程介绍 Flutter 使用多个线程来完成其必要的工作,图层中仅展示了其中两个线程。你写的所有 Dart 代码都在 UI 线程上运行。尽管你没有直接访问其他线程的权限,但是你对 UI 线程的操作会对其他线程产生性能影响。 -- 平台线程 -UI 线程在 Dart VM 中执行 Dart 代码。该线程包括开发者写下的代码和 Flutter 框架根据应用行为生成的代码。当应用创建和展示场景的时候,UI 线程首先建立一个 图层树(layer tree) ,一个包含设备无关的渲染命令的轻量对象,并将图层树发送到 GPU 线程来渲染到设备上。 不要阻塞这个线程! 在性能图层的最低栏展示该线程。 +- 平台线程 +平台的主线,插件代码在这里运行 -- UI 线程 +- UI 线程 UI 线程在 Dart VM 中执行 Dart 代码。该线程包括开发者写下的代码和 Flutter 框架根据应用行为生成的代码。当应用创建和展示场景的时候,UI 线程首先建立一个 图层树(layer tree) ,一个包含设备无关的渲染命令的轻量对象,并将图层树发送到 GPU 线程来渲染到设备上。 不要阻塞这个线程! 在性能图层的最低栏展示该线程。 -- Raster 线程 -raster 线程拿到 layer tree,并将它交给 GPU(图形处理单元)。你无法直接与 GPU 线程或其数据通信,但如果该线程变慢,一定是开发者 Dart 代码中的某处导致的。图形库 Skia 在该线程运行,并在性能图层的最顶栏显示该线程。请注意,raster 线程为 GPU 进行栅格化,而线程本身则是在 CPU 上运行的。 +- Raster 线程 +光栅化线程,又称GPU线程。raster 线程拿到 layer tree,并将它交给 GPU(图形处理单元)。你无法直接与 GPU 线程或其数据通信,但如果该线程变慢,一定是开发者 Dart 代码中的某处导致的。图形库 Skia 在该线程运行,并在性能图层的最顶栏显示该线程。请注意,raster 线程为 GPU 进行栅格化,而线程本身则是在 CPU 上运行的。 -- I/O线程 +- I/O线程 执行高负载的操作(常见的有 I/O)以避免阻塞 UI 或者 raster 线程。这个线程将不会显示在 performance overlay 上。 -- RenderService线程 -由Flutter渲染帧完成后,RS线程进行合成并送显.Texture模式下,Flutter渲染后的buffer与应用的主线程合成后,统一送显,受应用主线程的影响;Surface模式下,Flutter渲染帧单独送显,不受应用主线程影响。 +- RenderService线程 +RS进程的主线程,由Flutter渲染帧完成后,RS线程进行合成并送显.Texture模式下,Flutter渲染后的buffer与应用的主线程合成后,统一送显,受应用主线程的影响;Surface模式下,Flutter渲染帧单独送显,不受应用主线程影响。 + + +## 问题定界 +在DevEco Studio中点击下方的Profiler标签页,打开性能调优工具,抓取应用的trace后,收藏应用进程的<x>.ui <x>.raster 和RenderService的主线程 +![](../media/05/image-1-301.png) + + + -## 丢帧分析和定界 +上图的RenderService缺失帧,是因为UI线程单帧耗时较长,超过一帧的时间(120帧率下,一帧是8.33毫秒)。 - 在DevEco Studio中打开Profiler标签页,选取应用进程的.ui .raster 和RenderService的主线程 -![](../media/05/image.png) - 针对RenderService的缺失帧进行分析 -- 丢帧原因:UI线程单帧耗时长 +![](../media/05/image-1-302.png) -![](../media/05/image-1.png) - 该类丢帧需业务侧进行优化,参考[Flutter性能调优](https://docs.flutter.cn/perf) +一帧渲染流程中,<x>.ui 和 <x>.raster加起来的的总时长超过一帧时间,则性能问题能定界是Flutter问题。问题的定位,需要进一步的性能分析。 ## 附 diff --git a/ohos/docs/05_performance/performance-threads-sequence.md b/ohos/docs/05_performance/performance-threads-sequence.md new file mode 100644 index 00000000..e825e57f --- /dev/null +++ b/ohos/docs/05_performance/performance-threads-sequence.md @@ -0,0 +1,63 @@ +# 性能分析第一步-梳理线程顺序 + +Flutter应用在性能分析的时候,需要使用分析工具去抓取应用的trace,并对trace进行分析。Flutter应用在渲染流程上与几个线程密不可分,而这篇指南里,主要介绍这几个密不可分的线程,以及它们在渲染流程上顺序。 + + +## 分析工具 +常用的分析工具有[DevEco Studio Profiler](https://developer.huawei.com/consumer/cn/download/)和[SmartPerf](https://gitee.com/openharmony-sig/smartperf),推荐使用性能调优工具DevEco Studio Profiler。性能调优工具DevEco Studio Profiler的使用方法可查看[DevEco Profiler工具简介](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/deep-recording-V5). + + +## 线程顺序 +- 掌握分析工具的使用后,便能去抓取Flutter应用的trace。trace中包含了应用运行期间的所有线程,需要先收藏下图的线程,以及按照图中线程的顺序去排序,才能更好的分析Flutter应用性能。下图每个线程的上方用数字标识了其排列的位置。 +- trace收藏线程,后收藏的线程会出现在收藏列表的顶部,所以实际收藏的时候,根据下图的倒序来收藏线程会比较方便。 +- 1)VSyncGennerator 2)DVSync-app 3)mmi_service 4)应用主线程 5)flutter'PointerEvent' 6)1.ui 7)1.raster 8)DVSync-rs 9)render_service 10)RSUniRenderThread 11)RSHardwareThread 12)dpu_gfx_primary + +![](../media/05/image-2-201.png) + +分析工具按顺序收藏线程后,线程收藏列表如下图: +![](../media/05/image-2-202.png) + +![](../media/05/image-2-203.png) + +![](../media/05/image-2-204.png) + + +## 收藏线程介绍 +- VSyncGennerator +软件Vsync信号生成器,提供感知VSync帧的能力 + +- DVSync-app +提供给app应用的软件Vsync信号 + +- mmi_service +手指触摸屏幕时,触发的多模事件 + +- 应用主线程 +即线程号跟应用进程号一致,同时线程名跟进程名一致的主线程 +平台的主线,插件代码在这里运行 + +- flutter'PointerEvent' +flutter的应用主线程发送触摸事件,到1.ui线程处理触摸事件的过程 + +- 1.ui +UI线程,命名为< number >.ui +UI 线程在 Dart VM 中执行 Dart 代码。该线程包括开发者写下的代码和 Flutter 框架根据应用行为生成的代码。当应用创建和展示场景的时候,UI 线程首先建立一个 图层树(layer tree) ,一个包含设备无关的渲染命令的轻量对象,并将图层树发送到 GPU 线程来渲染到设备上。 不要阻塞这个线程! 在性能图层的最低栏展示该线程。 + +- 1.raster +Raster线程,命名为< number >.raster +raster 线程拿到 layer tree,并将它交给 GPU(图形处理单元)。你无法直接与 GPU 线程或其数据通信,但如果该线程变慢,一定是开发者 Dart 代码中的某处导致的。图形库 Skia 在该线程运行,并在性能图层的最顶栏显示该线程。请注意,raster 线程为 GPU 进行栅格化,而线程本身则是在 CPU 上运行的。 + +- DVSync-rs +提供给RS进程的软件Vsync信号 + +- render_service +RS进程的主线程,RS送显的第一步 + +- RSUniRenderThread +RS进程的线程,RS送显的第二步 + +- RSHardwareThread +RS进程的线程,RS送显的第三步 + +- dpu_gfx_primary +硬件dpu信号 diff --git a/ohos/docs/media/05/image.png b/ohos/docs/media/05/image-1-301.png similarity index 100% rename from ohos/docs/media/05/image.png rename to ohos/docs/media/05/image-1-301.png diff --git a/ohos/docs/media/05/image-1.png b/ohos/docs/media/05/image-1-302.png similarity index 100% rename from ohos/docs/media/05/image-1.png rename to ohos/docs/media/05/image-1-302.png diff --git a/ohos/docs/media/05/image-2-201.png b/ohos/docs/media/05/image-2-201.png new file mode 100644 index 0000000000000000000000000000000000000000..521086fbdf53adb81c70e2e949df7a3e4153af82 GIT binary patch literal 26985 zcmeFZ2~^T+*e`0e%iXrLvaMNZvt}h`&U2+@4rpm*&Z((6AkMR5yU`p=O%s*MDd!3i zN3cxI0Zma*5y+7gk(3k_f&0hW?fsqgoqNu`_uRG4UH5aXR`BN?pXYg>@%R4YE}I)| z|6}hTLPA2@jV~Em3JGnY3khu$|9uPaM0E5}C-C2fKue?ZLKWTnr-3iOd7J~E6B2rx zEVAaj8Th`{?~+X*(6m|bZ$lgO^(`Tx+dN~#b63M08Dw0~(IE%9RgT<^JSng>X|Io( z4=C@cyAtwM-N5F2KlNqXz{#wg7ag*EZ9?v(ovKm3YwBgf2tkwapY|ToRsQ{&G479} z66KVtG?9euvzPBS+}t4lw(0kj6iMXS#>a3ur(B)+r%!gSL>%s>9l^ZfPT1Yj=~)?w zV|6}S!wNP9{Czp00&Hphlga;+Pg^Kua7lH%vC{LhGmXzHVWNJXEElzU`9l0O1e|47 z7+)7;)s-f@K2yk^+elx>E)Tp*0L|QAuEP*1T2r;+v-0vzjfAS(nMRwdp!Igg_uUY* z^PK_Lky`w4T3Lx);p=y8`<}Qw1g{hWcOZfVuK_jH-m)naGRUP>?&x=jhpUnzp%^#|=kAL=jTR2cvUnFQNPMU3 z`jXxh0As!=G`%_3Q{^}JgVg&3{jNq}6F#^)4<_t}SrJr1vEjSd{KCn~KM@gg$98H4ez+mx3QA}^y`|U+ZU{Pn z+A3I0h;}$~E-x8lt;4T1R*L4L#)j(gW8-3!VLzKb=;`GU6>_zB!Jc&v|68=6vdbl2ogEcfahDs#j_Pp=%^`Nt=Uj5{EfasTJI_WS$7d^4=!R$F-E$u0@4>Af z?0^Crxu-V3)1xi72?Bv3 zdgJq=CD}^*80sf=OGgnl#Ojp&1y!fH-+Gs-hwi!raF(a?8@}kk`Y8D%Lu7@4doo~- z*cmV}SBg_s@R3f6J6Y|eXDBJHvmwMJ;&1LBS?;bgYEiM>@9X<+7GvRgXtkT{vO3Yb z^b~4w;7@firfmHeduacC25g7J7S?+&jwITXz~~$wo1%m`c@YYx>#5wiRqRqH(nhlT zRXw2Z<9LP8K$2f4I>aRF*DSXQsO*)u?cK_kIz)Q!+TN(h9q0>@(w^RdtLu+mXqRg# z(&tW3GHK;#iY-3~tpg9}6@1gQ;6Bu@7Ns{@U@g3P6SpMazJSYr@UK<|f(N7b-)UG5*RY^?PJl($vkU@VNyW zg?dG2;Q5GUgB1BoB^#DUCGSJQH}0 ziH?|qhzIe4ID6;0&pdWt=#kW?%`xg7AB>c7x;*rdBM%YWS&s}pw%oJGMzUadL=2WX zN|PdV&rLfSg!nS!WR#cw=Agd{-4--(UC(vK7jg$Z^1Tk})7`aK;*M!Xc3Dn~1eO=_ zzJ4vUUK>L##(*JI1GMcd2um&8{4IK`$izJB*{(*c0j2pRv!1Rt;CRG-PO*-;z;^OF z-!INYR&yJ}$pnbVbbWMhv|^5u3SG_9d)SkZZdDSDhE>)MbT4r20&j00s%>o3cc1;6 zv`0J%*Cdk0kve0_CSD>f>7+cfIkKXnPR5+I&Cw*u;5=f5!v2TIb00$6uf;gpCX|DA zKxL3T(bt|eP&c@#$Sl$i`&GNtSGX_Z`}a~`nA%I?o7McyfDNADn9_L8-6tkT}OT?|29g0vaO0YXE4UFqcZnO zSs{H>3k!4H9gbUG9THtaWw={m7^e@Gx?4} z;W0-C*^Myxhn`XqvctZcBw{7TJe&$eRIagxsh1yO>r=edzmBcN(|88+`n)#&9(&AU zIg}jZL9X}+*2dMDgpd`BhQt3-8Aw?OtK^Ah^*HKGD7jjAp{BK|E9Ucg2e`L&Ndiq7 z%aXD{R#es0+89E-H(o>PdB1WVT?z5mbnM4Cob~mUy`LuGdNRH(5sgwE9ovsDJ4wdq zvTmh^jYbFaDa_H7w(lc_!>p@I9JNvHB8g-%51gvKdqsl~CeH@V4()S36hm8bkmE1Z z!s^M@cP3Y82Pt^{C4w{G%GR$7@*$-2WKG$fuR|)VD3YXpxC`0q5^3qWcc(jI z|3cIm7vu>S;!!1VPDzpH~W*?yl~BYg1~;*G*3?Xn^mvSK>4Z>^@06xyPJ^t~0g z&siZjFX*Cefy|VZwza&jQJN+A>lK4Bns-SXiW~XGwKX@*3-3;aap_J@zm_pjRth@Z zMuqlAzC~6EVRWtX>YC~tE|(*4y)~~#LhNXpX#sa{(_A9(tn`@b!KpqQAAcD|1d<)8 zF`=Z3_N03EBcPo6WXYyL2tlE3R*1pruJa?1)v+tM#l~n4@*GE{zj>J%)sG6yv9XE{ zzuKiv>P0@dN+nHUO4GbQPAwS#hdTc%Ty1;(H@<+OUq)I7%1$cyQ4|Xm;@_9*obb){ z!CDum&A2ca<9Wzo8IYqZD`NY0Bt@j#p(j(M_!Q*m=)QwqbJ&-R<;P_W=b zkjkA*_=4U@Z;E$g`I@%8zWWntm|Qt2bTXmXhS;A^`dnt`##7<#bI5;Ni@3s=eVVJ9 zUj-gu;|neZMRg7SZLBX6%1Teg`u5dmNWZiB(r9OfxTky)ux);=EvXI}0d~jqkS?jV z;vP?UBHfF$+d6`1?SoGUyu>xWZdO5sdM?+Z7 zP&1=PG+fLG%hV<9?pxYhFxA3f>P4}ye$Tv6f<-Qx5ScOfB{diGk9LsMHqR0)r6 z!(;$a1l)1KnXyl-u(8%V;+#(Qu_|8UEA1+4@^4OX6T zcL1znN+>1VgNr9G_z+O}!@pI^mJZh{a=k9OGHzdL&=(E=hrq4GvQpLS!=OVF-C15X zryE0IZLTLP-{wgL4*nJRX^!EgrF}G8b(i8nYh@cypS6s7$gQrR;yHg!@;sem^9Cfd5|GCcS_8_VY| z!We*&*_CA)uSJ+Hd$;E0;T_SRGNU$teu+^O``7X=4wh-3hIbZ}!LBw|3K1}>c)vi{rJxI;VaKi_w{a&d*xR((Wg!I*lMusiT zRr$|@4f{;?lsb1!orUa@GPf)R|KOs1U+>S@(J8c6^U0y3|3p8<1F}EdWzh6jcZY9l zG}#t8{jf^^4d#Y@m-gg2mrVhop|QR^;a9VxxVmJ$Rmb@P#h6flE-vKQxM|mJJg0yNK_o_yR~WW;h%&Nto0y}cmW1%IwoL_;SZmu<|xo0_R&v1E%T# z@Z;kl7ro$p;>W-IH8rref7j&Jnyd@ub+z)9y5JAP_{8DgvaJ!dmhz9qw^97Ef?04N z71kXv?-MH9^8KRQMj=u4Id^hd=JhEH@j$sRf4SoWwh!kRztq_vsqWO3E(=!mgirfK zJH;x0)w4d)<}baC`Y9{8^td@Ned|aWoNCquk3E?ssU9iu9u1Hm$x~hu>8@2*g59OI0_> zm&Ps&c7A;YhZOO*vT34;3RV#nySo*ON%*MG=*j&uKyFsG(A}X{32hq%Y__6siF*Rbhvk5Jmbdd^5y~uw%S~?A^w%2KC`I8) z^)~&5%d~j24-az*Vw-BVcnrL+* z#=*Pm0+;^qb6<3Kz(-he?~YGdG#wl8O4r<#&Eiltb$DnZz0!C3t$E za`}i{lzQiCb?p(oFOO&9r!f2e(5S2s`GVru1a1Vi3U4_m2?TPQZ#D^;yPDzZFmLC6 zv%kie)oKfBdVYPu;op!(L zMQFKStSbu~JZE6t-FcWVo3@1vuQZ(xmX+ui^Q*-!6(4<+p3P0)?xH@gT7^=N^0e1=na`Eq}tV%(?a;;puO z0-a~?EB$^JM!ZdUt{!KvHwEStgAZpU4_6_Ej|L3g^Ix)3^dSl)5og8GGt^ILx;hnoTGx+``LG*qSx z-Bs(`1_@s(MchO;aw@I&sBB;QC0|i+vKi>V$;J!+~Aa% z9E6}7v-ZRGFHZ9ki7N)AwKbVKFD) z-s-B7a7}19r{2bcB1lnZs{;g@HiGPWvYS_(U)1`) zC|en~-IL>o@WL(MNAJ22f;a;UHJSR2PG$%l-<_0)>{^!qVN=v+_C< zO|kCIv7Z9dO2P5-ZHNj!+_&oE}oqS{AdyG)lxqyK?;SkYB()r z-)p{BM~XdOand_cNGE3AyXY1~4Zl66>u`%aV&}`5!o)KW!6U+r`x2#&WrX9~z42qv zzzB{y#$*o~`H;ky=3U%(K>Kr9*3(6H)k?U0I%j{*h6BK9EKP)(f(+#zkbf1)+sjADjQGfhVL@)l7WJuPW`p1NoMhCf{2Q#$AP^4-g zZEBO4B@ zuQjRMeu7Q)x1(+Pi2G}{k<$V$y1))2&8a)~u|np=)u(bF5Vv|T%d?(#a?})p6swQe z>jhR1K4a|nny4)SzdZ%+O3>l{UPC#s}bz=9TZP@yJ8sDBzjF|#MG_8;oOVjkP!6os!y<=Wc zv4as??Ak{3oT@Y$wcgmNDqR;YExl+vZB@YD>!|HJroiVf>9&v>9R|I;{!r7u*daC3 z@UyN|r|Aaq^8S zjF&6AO_IopG%$%bJP&YY+e&7IMf4e{$?0DE;;g_PxiXOg#QrJpOyAbPmWTj*kZw$)TX70d@(;Tvnx^l){27L3=!ILe*OaB}1asj~{JKjQL?=*s@0pB8FgZF-%b6}-q8 zR#7bRSVI*~3KkDZP*M0xF^2GMkG#htR-uL7O8)ZqBK^iSGG>urM@Lj^y8%&se2k;l z#cS}XD+;zp6aB+Rxr92{gOqA6Y8*OdC^e(xKwZ5>NxL~#+t)1If@`0tOE{znn6mDQjlkKGh z``yFo)V`?Ro>wrII_uH3YJF(ELT=G1#U4xVkaBT-r<&i~@X-=mGd?Bk`x7rW8XKhj za4W8=&mQ``MeY73;^L4->4S+W-PXYT4%ZJo5`o#vi^DGdkkAJj&_CkM5i4CD&#ZO~ru1RNs zarednORpcqZk=?r1L1j`@>}o`58^RNdnnQp) z+8#M1A5zzhvP&jAY4c>w(_YHp7t1ZCz+2swB)4V^QxaYp=-ul@&oLtt@>74x(_azq zLMz@bv%|tK+-+gNX^sVY9yQ?3y(`5uQx4iG2`5kn4#{bH*QB@fGH%9;OT^D?ig?~p z^ul5#3SblI-q=okX!hmf1hzU4Ub1@FrPo_P^v9ApYD4JdpvS}gYURZX>%b!ne=)R)K=2c7Jg+?>rX5jC^#1TP$}Hqt*cX5(;-482#akb5kdt7 zg>*0r*7nvX9WoH55X9#y1KnP?1x3?S!>v|5OGoSb{!Pb~fKM7sb>i!yC9O!pr+OZT z8Z7!QltW~vHY*D>KJf@@L+u{>QLFCxqF3r$jbz(MN}~O)Qx}4pZaJ4=DR>w!5>SZNgRxoV@;{BP03|&;gfydeb$7 z`f#qbZP3hHhUTqDfa7MWRc(Vdw!(M6cd#2%rb`5-EW)5-?$zivVU2k#iv;TdXi6{a zKS4sE$%J6v9X(DBAV1VCeyfW}ptn@}pP5`oOgp#nPceb&?>q)iEoCS$r+X`Q53#Fe>RQU)rIHh+#j z4x36j(URgB6m^m zr0PVSw1G@xdC{PgN7v=#=~aRptMEJidUI$2luTvsF_v4`GOWoIe~M?t+cov*Mna=K zGl|ay_4IU*E;}93UySl(E*X(zAFg}J6-FkTjyoPLIrV!wG+yGFM4a%jJc9Wx&U6Kp zWw9ZNX{D#(Wvfvtkrm)yjGW%0QUYuBm*EE_j*_NctAFJiRv5%G5`D7|;KHjN; zt1i11YKQrDUvY#IYCTq%bGN?QhwmWDr$G5!=&GM3r^kfPBk~fHdECnGL$5ZE8i?-D z?s-3UpEjwMCPt~d#j%|X?_HuzYPv?21Rfo_1?XUCG~I4Hc08aY-lC`s3~4(CMlUw< zPt+$%FHtG{iCPnJCnp;5PqVZIR<#+W5OW;nXc1_P@VbqvE^V_PV| z*)`tvb!%&}5Z!j37W6@cndA(9s{Uoju?j#XOc#|uV49FzL&zbY=$|H2n;VQBw46kx zXb-!4t1D6CdjeMM>#JWfsQj3~l)JRdKF#8R0%jCVyCpg1d)}nd4RKtZjQsW&9b?^d zf4z$oLM*H#J+Jwg?BLFgyG!C+1u4AKybDPe?nSLx3tK^iwGQE!^(!yr^Oq>LdNwwu zJrHPA(vwLiJvNlcv@tXUJ^x%4Iah0;PH?x$A3h#0>95YZ|J9>Z^Rf!;IM+@Fm*Exo zc@_JV{xtZsGQ5X_0Da z?>P+P1E;(WriSYx&4yKwAQb;?;j`7bF0dR;1HD4J6@s@Is83nu9m}a2_~xLQKX+h3 zD_~{fG}JPqJHw!Lg;LvkCOO`wCcsqV2&hX@jqN1IV{20$xRrQM&}rHOQN^UCPNfy= z(7sYrC(baDkb}|!DC!AsVuFs>3x5M7vnH-{?4VpkH{?SG1mvsuXI8b!?yL?@U36oI z>)0mL%o34eSMUuY`erXakhBlsddnXO|1L#h<`bd2`GN|6tMYV-zdL!WI2YcSCGs&a zcM*%9$I_jXu5hX79_w7ibV(Q*uzKZM2jp?k)u|BDnDUlpZ>Z=VgS(9Pt2aURUIlfE z63LL&p~Lg6mfFT3NBsNIg%`>g1uuz9^4(>ChcN!MkhDsHr9ZpyG#cF&oTo|}zsqe? z*M5hT`V*91wI^@D-5#K9l11GCk!lEQjs$9;ns7X*^EZ-RKZ!%>=Q#8(VBPsotM_6~ zKJ4cjI2wTtco5o^G;d{xKKGu5i>L9q6y!xrL(lY-X(V8f%uRwlS@pbCA{L{w#rqYY zS|OWmhn^eKjRg!+QD)7l%6hw#m*U5+oKOk%j@KrY=}nRgK7Sm8_F&l$+~<(4(v*9b9$MUZCVD2Xwr^_X*>)_BK}usAS23f! zkb!_@8fKGEzEq25!KwDt$jLNRF{37bx*EfFDsX#pi^>q*e_($@isfEbWRl(aB^g?f zzJw2Hii~y$!!C~K&vUkss=3tkU*!7ba>WdLEmu_Ox)UJ}8G$ zma0wslz~S0VyZ$bjvC1o)Kz&7-sfZE0gGO>{RMfm8(TTothk^+rpThLrT;eF}O9D2jQDa5PTZ^;%5m#&Qp$W$*jrF9+}ZwRiq zlBGUdp<2$5Ard|{_gJVq4QpFJ%}cce(j?mc!&@#B+b`+}{dFQk!RfDKF^Sil z;}H5$UJXHfn;YAPd1ZDl;~rbz*l))VwYuXI0WDzI@S?a}g+uW!`(ayeBOpD846=1L z^+clq@f0C03KhG%t0I*L4?-gczVa z$nsBh`tZ8kg&fOGzB;vOv`LOfg&PVx&99Y2*hM?;#)*`$(va$OLi`m06wuEgZXlmwLmX_7ly;>Id(DK(fUpkOFT>54jS0GS3XMa z>L+bx1Cr-iZ$&5sv|KC6#3R0CC@DE*CNMooQ>|7vWGFNeJASvKO&zr#z=cFcN$iq{ zdDW)EAXY=>qDZo|VQ2vtc_h6pSoeX>WVH+i+nw>ZLk?KqDPrrW``Z4?Y?70arLiar z$Ph$n=I2)RsD|J+cc5f_3Bh(psB9*Tt$B&F)G7b;Z`u4j_gCMDy@=){OIpu=$l;M} zJmiG*t$P=8XNnrs*$%t&apx>)=dE-#NdDC7=qsH56|MQ_!JR=PKfLa<9lpN41U?FJ zw_Z9<5;8}Ia?f^S?$w^x34N`)Fm|`-G|{GOry5n-4}Y4Lsb7oDJb7RK+>-VZDNxr`pM zt+p$!dhs6iAlJ5%yOIf@VaQ$c}=5#{pw#HE^&w!JHHzpMn1 z7mdhoxQUNKKvqZCyQY!4(R13Z+kzK81AP@F6($gL`H zDz_n{Nv=!ON={(A<~oPPpV$Uu0$QV^!P8m|;j#^f8YtRb>QNAk``%u;8|{&=l1skq zNl;a-er4Ll&_z}l6=GLe@r=kSt4ZYf(7k*1Q!CHr`ho=q$xq6`f^3)~ZHF)MJ08|$oynop8-^uR(&u{s^ zmUX7={}_dEnqxp=M$A(t+)4-3fX6b zr(RlZ_ZMtC|A3%K)v3>4sc#9?UqaG%!i9s4k8<-hJnC*BL1AmljbnmKG}=an74Xw) z&3iT<+z#w}T9zg_%ujv$fhyop)Ef5y)}di}40eJyQ^|MNwPn2oN|^AgG&4yEVY9Q` zy@~>>I~M@dR=l&>RK#WBlrw-rsB)nIw{_z3|3m@h*j>ganQQ1u3H|w0?B%s@OrEo@ z2`dj6B)uOP1WMQplu`Y3KTk?7H)<>B@xCOs=ExnU8ULtH?`d`M%`o1uXBRLky|tnE zIZ&D=zXs!gsvmt)QEx4AER@O_7$ahqBIfb>tjRG(D32X+YYOZD)S4ftc+{C7eaDA5 z2P6aqPZ7mN+lI9c@0Oz6NMpn9?9+rFmyym1J$T;$6t$J0!xlhMI;y{r3yj|>n}9?_ z%x64y;-v#MYECHc#WLvtZ#+Wf9Y6wmJp+J=sC9rA0Hx9d@Gt^Ml~C--A8@Sy&wT=o zA$Ze>$AVl%r^}JU|NNESyO;x@Y(idMLCb6W^Z2l3Hx7r3xX@^h6xFa@#Bcc5Pwz}L zMkkH*S9|~d`M4VV;*YCrp9N#7{J@_HX#n?-{#SgdL#>q6)IOKMx94Y`LM}7ma2GWv zDgYmDO2@^+r>8O@?=;-CCt?}9do~CO?%(YP3-YFFwa5|S`ZLcdr{*^Mg|oh$`)m4p zh?3_!V1OZe@J7&=M=i4}4Vf!DcKcbzuk`pR$(6{IE_zkvjA;r9%>b~Tyh(ByaOfhE#2`<~z@%bPXQ%UZC>&HG)#Pvf zE>jmyI3Ny!NzGU{KmV{A+$2D#G+hRuUPhhOHrCpK1n768b{n3pL^Wd zszCrI-hM#kc<}fVS@g1X1$gxFMkIyxVtw_%2u;1&HfR9P>lZ!H$x;K!T-z7Xy}CIm z=(|fuhNcyx`S+=7XY0djRG8ljYo0@9Ecjvy>y%ppPDs)-D6#@`+>sj_x@a{eIu^?+ zQIt_dg!PR!ZxPbnU!Uoqtz0>8@Y|wkigvB&SK97GH9%&*d|xN}NZCm*#6~g1QG_IG z1ZWO&f;YY#-!D}H z?3e)k=?Sz>dghI+sNO>vd_>1A|K?|coUVA_0Fbxr-6s|KGNlbgfMDle0sw%Q02HEM z6>zbNEcUr1-b8dFHvW0fV>sMzrE}5kG}OH%%I2>Uk#T&B1;Fthmk=Vy_MmW5@MEo4 z5*vhyihdlAKM_L0Tk=*LLqNSE+4k6$Szp#M>r+BWz$8NX0B}?z%bl#1Sb6~%{rgqL z@lw!+A|h0@e|lkTKx}W#J;l#(0D_tV0C>OL1|a`?CDJ9HcaPnz3Rm)O=vj4-^?ozB z-QKXLWp=14h*~(@&*1#EVOW4s{k79+OS4k5$L+VC6q15wVns5^X7TX8hr-vVke=mg zHuf94^O!CnT;5BmP`eJV11jG(9RIT87Y8OuWpj z6IM6xH~X8sD!95&QJ7^c0Mt|1#f#*+#+rJqn&Th<6w19&Z-Yn3vP%g5SR@qTS`q^w ztH*&G8i3LfJ$Pl*VAE*xrp|j};$<+=)4yHW4nKJlP*jfqE*t$cBC*Yaley0lIrl%b zTr&bgWd!-}*)8?QR9=q$ao*BHevM3`P&NPy_NzLiLf2dU8ri}^z<1+`PA7AJ+TB;n zoz&e=M2;oYo?iN}XPc{1f-x|4$1}q z&jWP63UodrKZ?%)r<&|EKH{7(72+uecr@JgAVq-kQQ)u9m=ZnQ!JZ1EQ$lT@1t-i4 zxEGAL)0zM1-}i#oAwfTUNG`Xn<)qW{a76z`zvF_<%B%fAW5u_@WuN|pLa7M@A(P*F z$n*n5^)Cl-gT_6<>URGF!AiZf)A*!w*#jl`reCnD^)+IE>rV=l2s)aOCmCxX5DC+_ zHf#Z&d>w~=)bc;z?*FyOe;nO^^#g7hXB__Lmhn1d>IYV&Ky5>I{Le)JSGx;Z+w&gf zKcCFR#r}%v)(5ZcmyHb+=(ME2YuOJZP@6yqJ27}82tZ`5 z5B~#o1>CXk2H=)}(#UzVe_y;g5GVe#V0$m|rdq-N@Ib)m>e~DFm>1V!UBHEB4M_p1 z0W4R5&nYbc-m*UCk6^PHEJOof^1#_LH%v;rAP0cA1e{u5m>CGQ^^3hg{R4NSKfQhX z6^NqO$NZ1`2E37-nrad`0Nm}DY$*NLX8-1b?Ef0h?z=dJY}@XMfy&Qw;l9bc^h3Ez z-&jU1v(sAAxfTm?7vwaJb16=|$f~YJVJ|Z~369sh5o_QI5dHzlO$s&r?PK6ykSwO1 zMGcduX^=r<@P`$KlzgizcgjWBduc|N`wSnb7nf0n1%%dv#SUD{h2E@f!d~#gPxpOS z4^OncwpTq7jnK@?Hn_m4GWg)y|7u)tm;P_j+H^_h3bc#tvheNwf)H|baH#of3?y}} z&wE7C9ga{Gy;;P5bvM^U)*@?fB99kpWG|h-ANpJ%S9Thlb>v?Cbfun8+(Yhikg>CCUfvbzZ zs8F}YRQbhO&_EeyE)-kOtK@da+*Geh6W!Hp6U2_6mYpy9s4g#^sdJ*R7lO+$^~PAN z2zheb`*8&qbM;R6%7ChY7Yay7E!@c&PP=@u=5tW@J*|Yk)o8b4-xB_l3kz?)%x1~vgS$8*00aW8)R(j<7IE}4n zC;5zubZN()jp5kWU^x@!eB`ZiuVRC&V97_e{ZUx)e~yHJaDwaLQ8_;lE7a=KF@i-D zbe?lrd-=5pnhHGG)^Io}G&AllXB?idYJLBd%%u`V&!O@)W(=$uoJljca_h?Qr zFvIUz>^bJz?#Sgc%Z1FWL7mWyekT}5euU&sOCmnkky?IFjZ^O5RKMTbDg(<|dF5_) z0&z)0*l#OUH-6VcsCDz;+|#6SY-b1xf}fz4!(=Q=5tFNR z#r_3Zw&7-o)xltdsH*FYpj9THino`max5T zU?#h+G5QngopsI#E8-Ap^MWYzEnO{$)I*O(g;g-P*V$xUbsZmm?qS#0;P;r-prvrD zwfZ{4axaaf;rv?TekSuBDf25YloYfU%-LT+Qqy<3wUR|A`L+#BQ;pF64#p4P7E4HH zyaf!6x4_VZOuLh1AtK`*`fv8xj>Sa)M4jGN*LM#Sb<VZJZU2Lycnp^FCM+;AQZ@Z;^x&Q(Z*$WVmBHUaR1+CrG1_?lwNP?JHDpzBKJY4? zc8YhfwK_%(_UYAvR{B-CD3-QEU0Y% zZ)-;=qNuN@q=55M1H2UE%Wa|;0n%6XQ#e(osnIEeA=th6Bd4t%;Uw$VhmmSi@k zkXs*dne^_(wc(1dC{y8!helJAMk8fU=qpP1Ulog0OSXZv87^*1t?qY(twhD&t!vqU zpE(=AVfo48mN=(mPGPC9rZod`m&Im*SFM!8*nB4yjBne@44w!_w2jZFDA`AM1w8T5 zjTuKU?Uyxf)t`U$wz1a9PAicwLmH?9Qz;JmrpfU$G+trzVaVcJnx3>*>zl8;C7RW- zsbGf^&|^e{S~~BU1T2+~&6|Sz-?+42 z|DlifqEb;sdbw(`t(^8+h55WpMjZNOPmCzr0W(#1U6CHVrtQP$Ojp4yGL`xZZ#qS5 zaT?@#`)Uo#XR>f~>6Or0GZongK6y^7yA)IOwVL5=$a-RhNzM(#S&lKT$9F&dC9l<< zg!}jSdPYB95TMv!@$qlj-E^6L)X@{R88J7P^{*LNbg!PmQW|zPkEb z$oOC8E3`unt$wJfG?_q7l#ws-@Z?+aF^5(dmN8=uUE($rQ=TzNjt4l9$d$Lv9eX5l z##+9COXA1mD!~Ps238?a8ij4yFTd}t=MikDRJn8ue2vXo13QwTA7fdT-Z*pXA$8yo zHhC_1{+kvmnz5`YI)p94-H`amUYALbLusAtsy5VwMRh|c`P(}Tj)X=Qx8fkZTx+2wX%AD~IVLcgLfP)uT^cW_f+sK*7e$we6Ej9x4nbxY!$55jaSuYGtezvv&cC;w z*4r+8wqR5KWb}2!(*)*`(zQ++4-)RQ{dny_VGfL4FpuKxUVw~UD4%lY8@KvdZPyH` z-`g6JF)Pj2MSD}#RGFRRMP&-cO?vLi0kNSX16+zXURIws4ggkIDVHTQ_;A*<)Ym&kG6mh!-Peh3up(4#N37Hcwf zZAO+(uW`wVGT08r{%SPuN~zLNB7El2aD$7?-a|LL#S|)OD<>cZ)mT_f>Fr zSVlyp zxS1W-2TD+#C20uH;$OONi#LaORQQ1Kk-#fx#+Wz5TVty-WDUr6kw8?vtm$kc~nK_d}HKMD1C- z$nZ+2(_W|e`Qg(s*TbXgZ}=@Jja2;}IL4TP=Zs@%A;Ck1HBWX(1Pss6rn7>{OVgK? zA6zJ!2|a%wfSB|_vK!PGS)pmXkQ4E>_3ym9-_TWGrL}_HUcM8E8Sq||Xlf2~F?Jpw zX~#~aiT8I@LrMy!7f)zTuzTyaM^h{q7?LIgRY5@1kMnf>TQ9@^ie8+aWffw^(Fz5$ z8SB#XUa+2MJ_w%c%4NBU^6C?_GDc}|PC0@fVmC$#nd>}4HDc6ewFZ4kT50QM*MLcS zBf)lTF2)1SnJc{uE24GY0KzrF+llUet~yAm+JW&GI6TL4U#puyuyC!ZjXwZ zB5_?JB0s;;$b5b3w}+eR;d0s_X)E0w^15nT2cv4j5^;1@A1nUd;srUkNYy?2`XX); z(mLdVwWXImp1zbBoV)=K;gj27RIuvHT-P?g;B74;Qlu>ZVTP6lYMu(M*MeAGrOS;j z7{fX0{XJn$KlOkQhq0i~JT|Bg6nvRL6}wTc>@7m0rO$W_veij3 zk^EJ>im!ye{+GrjX?-plwMOZ=a#DLBAFOq1&w&NbZR!IVX35-wgZzH&GLNT!iV(*JkJd7 z5N<2IDyDZ{R5PwlcK%uXP~SNcjP= z^+&+*pB5PoKGutR@%sZ#qed$F&Ve;?%mPh@u=~K>A`?(hlSnDyEvLmzARxi~oM_)xF0pGot+J>Q?>s&KX7}lFJ zYyX+hIlYI<=dp==6m?z9I_|h@IxoOrEAkDkZG^sWTQRMhUVW2)|Fx+g>swa6Xnsj$ zZ`kL+!T0?q>d}le4+6us3~_2MGVX4{A-7M$A%GQa6xjvbM8YM_tJbn#R9y=Gw#Tu* zYUabo0DF|ehwR(+bp>t9%o>Lrbg?ZnbOc>%BiWayw=`H}00zaI3)~HCb79ML$DUd? ztA(S@d-iNd-D7ZZ@YxFP&?4=Hy91-K!W-Y@?MBN2-Y*kD2dJS9F(7j7N!FnmB4hK+ zhN`oa;WyKSlTqSWW^=AZmGYtrI<+x|;9Fkm9TRCZ#dI!s-Q?gHUtLZ7WotUZay=&dIX5Cq9&VRt!zq8qApS^$k_xtY8 zslUux8$QfXFb6R__8Dpj2Uk|i>Ms4Lh{?U`ykn!7)+*^Yit8}YFmOE^O{d^(*QxcT zg0qjYx)lq>ahPUq1o!-9v_T59pOjTE%Utdslguo`@S^fFUy_2e2V0v7k0aW8j__GM zF%&%g`>=_4R?^lMwW!;+J4WVR^ul~0H09WMnD^eCJbLj?jK}zo!{OQ6mI?2FAu6}r z;^qQxC(fwAmxCJLAMu4yn3jzS{>NcJ&Pp z=X@H~(=t$t0wR?S%e1$kefW&k-<&#q_tQ8VWZdES{4d1*a$eQA`0o5S_4=zQ6e9ie zHIo<+Ls2e>4f@PUz~!f*XEP_5EjpkUvc_fc2K^gHZ|T$rtApf2C*Z(L#F3?`0$J=p zxG8zRbu1i2H*=cY#Qfh!&~wB}uBQoQiTTmbUge%KW2d}RSJ4(Lo)$Wjxo&q!_IO7w zyzSgYe}jJVQKU|NkPE09yt!K$iIxldZB4wT_c-hvjd**I$jKRc`cHvzwYbg{<6`*v zLZ$M-3k**y$v#^;;?|Uf_EdGP(uPw4V}vWCWo^Mccwai;mO?s?1*K5Z1BA6f(!*nH z?3BR7n>b)QpFG4NQxP|mWvfC%HEoiGAB>g+>L=Bi8HVo)Z3oPr-)CAr5n{lZmXu?m z(zN#^wI)+v@*xkR{O*F}xi0^(aQzk48csjTG66Y_$Q(2Z_}shVoq9TzQU(PY_1L%APm+Rz%C4k)ly0gg7a|Z;_q<;9eVwMylnZ1WPwV z86dB;-7eR(%{NLFGP~x(?eqZT=WDzN_eQygwD8bv!)ru<@!Wv&ySxXc6sOE(u8Y?g zq^SGf9|~r#G9{H)&hwMLrqK>n7b;=W_8=Ynq|29C(O7aPaCC2l)LD^a4TJ`ebzjhH zFK#HuVvO>s*n{pCOYuHbe0B5|uJzmW#!LtRS2CUws%w>qT(lL zsqsYcu!zIn`t4Fky}p_YoxNBW-?t!`vs= zVYSVJ6Tq_RvLH6ozpf-!+GKy>Z;*}nyC7TsrW=r0iRc@E&m^^CwT&X6U#7fT52~EL z4>Z+YbXFRII}Vf_;Lw8F!CM{2ex^%<@Xvv*@E-&SU2t}72B7Ikkxg6h8qF}a+U_yv zKe0lyhyWkp;tQ?* zBS-|QP%yZi*pW9m{qvj2_^n%f$TuKD*vQBcOhT6_+1d{$O47rV^75OjF( z1;lvU4aPj+{3s<;fWEAj1O&)Hkqb-DAU<=v8xY!RZ&!8-KyY4U<^)ouwP1jNt^pX& z(;b0c*LSC~`#==vKTjpng8;n}yOD)E6R!II02j!*%BQ0|-2W^<62!1b$Fm{2a)<)K z0Z8RLJ_%TPoM98L+A$&T`rtmNBAXLE5g`#Yb0unx{9NV7F0yx{RD!Vd1jxZ$qX znr$89d_`A&#HL5@Z7?)Iafl_-czUwJv2$v)Q?mruIVFM&pJlPdPYE7<6fVbyhfee+ zpB)l7$`>|?x%@_k=eSjF=OM3H)3dLuqEuT?h!P<*F?snSH*;nBE$uU|XJGxQp=Zc4`oxiCSeWaR$#`2&RweH61XOhr_(W`fUrWotd zGa{R~eVUj~Ix8FBoa?cl8*SlFE$SznJJCzjdOR&LgwBw+i5qkF+7RZT%KM6%9W0A3 zMLe*%Zf)orGmLHU<9!&j9IjhJlNE?ZDH6I%0DBc}Xkag+(0$#~;+J5zbl?TY;#=i6 z{O5|lRef^u0P*$0X*Sz|%PYK&F6zo>Un}^5RK!Ay)CsenaXoY;@7;vt5Wf3`g}0lp zF^k`d&^WRXnJ4kIkll>%92C*^%i6j1Ts^L*LaHYl?oc&u@T~BF)sdA>#Clc{SPpNw z+SAikG7{cobzCW6W z!bk+PDkdW_z!qa|cvy8LX~D5kUhT+g>!95G&gb)cJlx%{-axYXYq+V?1@;g4oMg)8 zrZsD(TlS=o*z9P_S4g@bWHS|iYxXr}d5{hzGTE6q63LdCw>Km+j?7RUgLHnN;v2Am zy~$S&WMerB>!T$Myp+_De`{8$?TL5P>ll%fY`E_OL6nhwodC3dx@FDb(M!d@|NGp* zUHcE(`|Y3>wNJT@ie`Uvt|*bcmY{Pr?j>dSdzGkFsh!y^;@a|(- zLpb)?jQA#TNSwF1s=-$ok$SHEoQz#fs~J&5foG}FYQj#O1J1NtYnhdg6qsjS8Ib(4 zjk3|Y<;l$hgxPuo%C2XITMHUn<%mPwplcLMBgg!BOOgSUH+%@sUeq>HIpH%Xr-w~w z5gP0L%RwNmySxUopM9$LNsR}uzb3z<`Uk$fNRKfk1V`kKlhb5SCz8 zoZOT*wam7=X)S`t=Fc+EBt;!A$?QG%@f8B_1mwRlV61}<2*g$^{9J3bcPEaIzlswQ zo)syo0?IL>9#`FY7*`G>oh#Th3c!e}y>yM}aZ1afMpT|a(v-Ed4I}E3*xpoJ{LO?X zI`g61m@+rZ2;g&BVZ8_`FX7uj0`&9H3P^>@NAj?h>@DgWNkE%Ct!g802$= z!R`-4KYhmw{H(hK(NV>b>G$SouZQ7bzm{S{s>BQO7ghB=zy$-Z?x@}Q(RKT{tVYjt zP_D&SKqcWi|GIpBu0LmD`3yT<{=naPbIi|fEup~xIk8hA2=>n70U+_`(DPOAt9GjD zAnOf(R3*HckY+*G04|%|c6hr-RyDQ~dap-QapiX6+wydWSC3}xTcuP@!f);^qS(Z+$@d2pLn>M&O6s_O= literal 0 HcmV?d00001 diff --git a/ohos/docs/media/05/image-2-202.png b/ohos/docs/media/05/image-2-202.png new file mode 100644 index 0000000000000000000000000000000000000000..2fc09711331cfb832c9dd3d2ce5ece7b7e51fcbb GIT binary patch literal 9908 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 u%*sq(3TnQ;H{A{JaMF_uA*32D{Jit3wNac8Y8 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 GE&C4>$KEmk literal 0 HcmV?d00001 diff --git a/ohos/docs/media/05/image-2-204.png b/ohos/docs/media/05/image-2-204.png new file mode 100644 index 0000000000000000000000000000000000000000..ff821168225c92e2fa783f0e39148b210a3db996 GIT binary patch literal 3153 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