From dfaef5b3302a9ff62d78f5b89e873addcf3e623d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Constantin=20F=C3=BCrst?= Date: Mon, 12 Feb 2024 16:57:53 +0100 Subject: [PATCH] create new timing plots that are now normalized by the longest execution time --- .../plots/plot-timing-distprefetch.pdf | Bin 11261 -> 12158 bytes qdp_project/plots/plot-timing-dram.pdf | Bin 10302 -> 9855 bytes qdp_project/plots/plot-timing-hbm.pdf | Bin 10221 -> 9775 bytes qdp_project/plots/plot-timing-prefetch.pdf | Bin 11955 -> 12744 bytes qdp_project/plotter.py | 67 ++++++++++++------ thesis/images/plot-timing-distprefetch.pdf | Bin 11261 -> 12158 bytes thesis/images/plot-timing-dram.pdf | Bin 10302 -> 9855 bytes thesis/images/plot-timing-hbm.pdf | Bin 10221 -> 9775 bytes thesis/images/plot-timing-prefetch.pdf | Bin 11955 -> 12744 bytes 9 files changed, 44 insertions(+), 23 deletions(-) diff --git a/qdp_project/plots/plot-timing-distprefetch.pdf b/qdp_project/plots/plot-timing-distprefetch.pdf index fc311072b5e327b552a6fe7817daff7e757e14a7..c99f9c1e20521a7699c20ff258e7719754fc5ae4 100644 GIT binary patch delta 3556 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 M3@m|Q>uiVpAD?e16951J delta 2950 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 B8X^Dy delta 2064 zcmZXUX;f3^8ihd_BUKO(WY7pCY8ZNkoSY`&zWS+c4Nf<+pO%J>XYBns>e?yCna+m1QaM9W@KOhG`NdEE)-2waSroy^ zzr0DBv6@w?!5m%cZ+yMY8~pKhxBY61Mhmz3#~2H272&@D zA)Ix5k)x;kE4Pcw3GKddvO|Bcvv!qJOb^6Lor1>iZI9Z`4VY}{{@&;SYMCZk>DPQE zj?4=n-2}W2v=Mga)NgG0P8vC40}+%}XDpXWOLk~X?osCniG6!P=dm-PC)|VXiL5mc z?a@rV9+MxwiefiR>P{;LfD2cvzS;G^EgbgH=|9`%a(*n}6%E!tr`FbJjbtdn6hj;S zU8_oWpTVdgE@kbfbo5)oT{V`o*HP8eB>SdIl`P#L zX=51uaG~{ZVWLbYcuRO`%Lvn9$n6p?@PISqd2H2096#g6_*~DLKWU~9{$BT^oND5c z#>H#+Wwga#ZaY)|En&(yA2n1ajjLpO z5;E&cW9(EejU`)Y8{!-6u&>$cO8yrL>02;{#AALG2T%43JPouf&n zim#XDYh_dh^-fQ-&(8IE9B&Mm5)V$~${tI?s#k`ruO|~{>9Ng;`euzO9)Kiu<@Ui6 zz5W^(SM~Vu2mv`y=a5CzkhU1RI2M^~fDl{!Id8)?4La?)_yKbH|?I zbacg_)<{9zFi1EPnYy!fU_q@o-7RVh-C)BuFS<^cK#Pg8(vygH|8zH68#!d9U%N zEH`Z-18cv6CirV*a~16!qg0-G|WZFAowY_>c2WA%_rqDhGKXOzE!yzDo`9}y$ z#e_x>GA0Z{;ZiVlA+*&_KG^+J7X=0|9ED8Am{6$Lswp%W6PgACA1}v4hz>Y11;!Bw JUoo6<{|8ecD|7$= diff --git a/qdp_project/plots/plot-timing-hbm.pdf b/qdp_project/plots/plot-timing-hbm.pdf index ed9c314e3f26df41bad9afbc51a702bdf289eca4..198429ca17f0bca637f839e9888b225d2ed03dd1 100644 GIT binary patch delta 1565 zcmaFszusqqI3vG_iGiM(iGq>2rJlKwiN$0CMny)2$w7>+^>af{=gF80?D?!+v4wBh z4gIpu8b1{kwjZhHE;6|G>DHlB4Z6y|{)(ihrycL$(YDkv2)_Jg-MV$p;`Z(P`}_01 zZ~e1h|9KU=%Vz&ud7-D)fB1Gjv;HGz{8ai6-^xdC?N(m9B+`HU>BPO_>AVW1zdva% z?SJ`+%U!-mciFRxT8|BV>bFjQu=48#frWo^r|hmY()lYeZBj|iqG>COR?0B?X}g43 z8Er`Ij9c+7V`67D=Z7HHtfNQwRH{u?5;`~WyJu6kNfxi=nyDA^Tq5suH#B=KYm<=` zWZEM3-tOvQLnqF+Cl222iu}^m#kHrZ;kaPM6oIhkK1_AIuL`Dlort}7^@xA{(!~Y= zj{b6n0eZSe6b*ia>iXSs^|v*$>ycSuA+;v3ioN=#!)A-$mnE_i7Z-eJ*uZzsPb`^% zk9EaqlZN=?4u92mALod2&3?vbekc=JWo zt%uGu1+9tlaa#3!Vf@j8D@L&IA2dYVr>7;Cz*@Q zz9OW3lf|tWx*YC{7x*#>7imto%5!wD;x@PTzO{*F3k;s}>0VvEP}<3gJ8VbG?+o#% z!@+F}y_%ChUCz6q?|m>?^VlRoF&?2a+S3HW*GTUW58{~o`u@S4VHx%GfmEVZM1B&TKmi29MKv&?|)By-Xzl)adD&5 zz9yFIUiY8HP2Bm{G4(po<1&y5h9(`N;Gqs-8!(dNt_M7*Yzv{*AJGy*Y zx%_hL%I}JQXU0F+C7|=jxo+lqzV>`^=RjW3?SCG9`|$7gTi1Wu@9Vtt%U*up>~VgF z=(GC9$wA&Vzkc#=EIAWV`}|$>+H*G|bzVlSVx4_HZ{vT(>pRb!|Jt^V#U(|liMc>#N`6unm!Xk@fdYtOZf3Z76Wdc6PcD5&BLy29 z1^tl9f>Z^4*NPJN;F81=Ak*1V!9dSKK|eVWOxxK3l^WwzYPh*iS&)&#(8$ot*uuba z@^TgL3=4B(O9cZEP{>o@0y7LOObvi;Ko>JM!4NYuH^UUOG{+D#H?)`>rK%=oY=JIi zXlQ9Nd77$fy`edV@#aPb7)F_c9E#>NGgC7RF$*J1F`&OO>@YMo2isAP?0-XZOG9)^ zj10{&#Y`~$4=mp>JZWrbgyBGAQqon42w-IjEvDOF*7p8Oc~~umXqhHyKq}rnwoK`s=E5S GaRC63ZzFvG delta 2023 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 W@C4yJCJTwjgJd!ii?!Lc9r-_kWzPlx diff --git a/qdp_project/plotter.py b/qdp_project/plotter.py index 2a10485..67fc01a 100644 --- a/qdp_project/plotter.py +++ b/qdp_project/plotter.py @@ -3,6 +3,7 @@ import csv import numpy as np import pandas as pd import seaborn as sns +import plotly.express as px import matplotlib.pyplot as plt output_path = "./plots" @@ -12,10 +13,11 @@ prefetch_result = "./evaluation-results/current/qdp-xeonmax-prefetch-tca1-tcb1-t distprefetch_result = "./evaluation-results/current/qdp-xeonmax-distprefetch-tca1-tcb1-tcj1-tmul32-wl4294967296-cs8388608.csv" tt_name = "rt-ns" -function_names = [ "scana-run", "scanb-run", "aggrj-run" ] -fn_nice = [ "Scan A", "Scan B", "Aggregate" ] +function_names = ["aggrj-run" , "scana-run", "scanb-run" ] +fn_nice_prefetch = [ "Aggregate" ,"Scan A", "Scan A and B (parallel)"] +fn_nice_normal = [ "Aggregate" , "Scan A", "NULL"] -def read_timings_from_csv(fname) -> tuple[list[float], list[str]]: +def read_timings_from_csv(fname, fn_nice) -> tuple[list[float], list[str]]: t = {} row_count = 0 @@ -29,6 +31,9 @@ def read_timings_from_csv(fname) -> tuple[list[float], list[str]]: t = {key: value / (1000 * 1000 * row_count) for key, value in t.items() if value != 0} + if fn_nice[2] in t.keys(): + t[fn_nice[1]] = t[fn_nice[1]] - t[fn_nice[2]] + return list(t.values()), list(t.keys()) @@ -130,34 +135,50 @@ def tex_table(df, fname): # loops over all possible configuration combinations and calls # process_file_to_dataset for them in order to build a dataframe # which is then displayed and saved -def donut_plot(data: tuple[list[float], list[str]], fname): +def donut_plot(data: tuple[list[float], list[str]], maxtime, fname): + # pad to maxtime + data[0].append(maxtime - sum(data[0])) + data[1].append("NULL") + + # pad to only display semi-circle + data[0].append(sum(data[0])) + data[1].append("NULL") + + fig, (ax, lax) = plt.subplots(nrows=2, gridspec_kw={"height_ratios":[4, 1]}) + palette_color = sns.color_palette('mako_r') - fig, ax = plt.subplots(figsize=(6, 3), subplot_kw=dict(aspect="equal")) + wedges, texts = ax.pie(data[0], wedgeprops=dict(width=0.5), colors=palette_color) + wedges[-1].set_visible(False) + wedges[-2].set_visible(False) + ax.set_ylim(-0.0, 1.0) - wedges, texts = ax.pie(data[0], wedgeprops=dict(width=0.5), startangle=-40, colors=palette_color) + legend_labels = [f"{data[0][i]:3.2f} ms - {data[1][i]}" for i in range(len(data[0])) if data[1][i] != "NULL"] + lax.legend(wedges, legend_labels, borderaxespad=0, loc="upper center") + lax.set_ylim(0.0, 0.25) + lax.axis("off") - bbox_props = dict(boxstyle="square,pad=0.3", fc="w", ec="k", lw=0.72) - kw = dict(arrowprops=dict(arrowstyle="-"), bbox=bbox_props, zorder=0, va="center") + plt.tight_layout() - for i, p in enumerate(wedges): - ang = (p.theta2 - p.theta1)/2. + p.theta1 - y = np.sin(np.deg2rad(ang)) - x = np.cos(np.deg2rad(ang)) - horizontalalignment = {-1: "right", 1: "left"}[int(np.sign(x))] - connectionstyle = f"angle,angleA=0,angleB={ang}" - kw["arrowprops"].update({"connectionstyle": connectionstyle}) - ax.annotate(f"{data[1][i]} - {data[0][i]:2.2f} ms", xy=(x, y), xytext=(1.35*np.sign(x), 1.4*y), horizontalalignment=horizontalalignment, **kw) - - plt.rcParams.update({'font.size': 18}) + plt.rcParams.update({'font.size': 16}) fig.savefig(os.path.join(output_path, fname), bbox_inches='tight') def main(): - donut_plot(read_timings_from_csv(prefetch_result), "plot-timing-prefetch.pdf") - donut_plot(read_timings_from_csv(distprefetch_result), "plot-timing-distprefetch.pdf") - donut_plot(read_timings_from_csv(dram_result), "plot-timing-dram.pdf") - donut_plot(read_timings_from_csv(hbm_result), "plot-timing-hbm.pdf") - donut_plot(read_timings_from_csv(prefetch_result), "plot-timing-prefetch.pdf") + timings = [ + read_timings_from_csv(prefetch_result, fn_nice_prefetch), + read_timings_from_csv(distprefetch_result, fn_nice_prefetch), + read_timings_from_csv(dram_result, fn_nice_normal), + read_timings_from_csv(hbm_result, fn_nice_normal) + ] + + maxtime = max([sum(timings[0][0]), sum(timings[1][0]), sum(timings[2][0]), sum(timings[3][0])]) + + donut_plot(timings[0], maxtime, "plot-timing-prefetch.pdf") + donut_plot(timings[1], maxtime, "plot-timing-distprefetch.pdf") + donut_plot(timings[2], maxtime, "plot-timing-dram.pdf") + donut_plot(timings[3], maxtime, "plot-timing-hbm.pdf") + donut_plot(read_timings_from_csv(prefetch_result, fn_nice_prefetch), maxtime, "plot-timing-prefetch.pdf") + tex_table(generate_speedup_table(), "table-qdp-speedup.tex") tex_table(generate_rawtime_base_table(), "table-qdp-baseline.tex") diff --git a/thesis/images/plot-timing-distprefetch.pdf b/thesis/images/plot-timing-distprefetch.pdf index ae840ca5fa59faf45b3e9b48a9553e5617d63dde..c99f9c1e20521a7699c20ff258e7719754fc5ae4 100644 GIT binary patch delta 3556 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 M3@m|Q>uiVpAD?e16951J delta 2950 zcmZuzc|25o7jFvH$U2m<)NLX)n7K1|)*d7cNrdrGk|K>k&5RhbW!e-)iz`Z0T7=Lt zXt6VCvxJO=52- z7Y|nAOY7@wID2GtJU+cV*Ku{P?e z*b&s!r}Zs%0k(UfXrwi%q?mBq_U~Zpk#F6ck%!xh z%}R?HQLhhPI-J?)Z+yx@(JeTqH-hC-uA~_(<)*!@7{KNO(hYX_0;d*rmlw7s`0FPx z<-AMHaleh%#nJ4CIZKIaPc~Zg2j0&}1|t?bRc3!=g3 zSJajhq4_nTAE=cHzJlgQAwL|xUmq~N>|E}jisLNUVsNv#)xmUPLf2A!HPX8GC+b;$ ze}6p@bGlW66S;=%3m%`SH}X7u>feI%bvuH-6Bjj>)N7qrGz%U!sNVVXS(V-Mp5sEB z6>AH|8Lg*M+xr?ht_lZu-(q-Qc335gXhxwI$Ccc)qn4IxKf9}tphoY`UxgddURCL@ zQlOiLmK=O|I=Wn4*_%t+N!@lSE2iFdVOq>{g*?UZDii&C zZO`w?IfG5wR^H8#E3Yju^PH1WWSVJDxX?QE56d}~jjio%dtLMN#c(2e(U^Pu5s_M& z{gad;$%1MflOYY~nkPveHDC8Ej6Snp_<5b$VOFw=0p0@)0X-X<3-!7~g7fqC`21z1 zDv8VajBfA49Cb`z<0bh*aTl)y^qEpQU)S95mv88nY?E*yE2nG2Wr+=m{Wt>i=2QM5 zT@B6&FKT5|(GMHTvK-R;-J`f8DI(WBX|1iF3r0TWyIIV$2{3W$;MOg{l&?3$hDF5Y zXG=aW+LT*6w&c$Y8nl(uD*ZSZajMgA<=0zbdTIR%A6sz=qej_>emWoAFQ=Aap}aWv z_N#eWeeY?s3-2vG{Fqr=LhQ@yYwd1i%V#{GZg<*vwHY*$-|J7J{|-g+*b)!{NVtqb(X$n-hB$F1m6#-7)hm z4DmZEwP^0u(L?%i!wN=Y@~S}+J<-v5No!)wT7gUQjSd~!h4!N+i-%qTN997e70Zqu zt*u3UXnIh@*ql;htjUXS=Us~OzCEA3zUpG+t|Qq;jJuwnF$qnrT<)Dz_cGy`7>bFI z%dmA=UthfOOI5?qjZe-QJ{YceG+a^2Zo1z7shH8FW5puxPH0IG_HFj@F(P3_qdbW%%dTl~fQa>Oue-$X9Q zK^JLN1)9U(9V86oc=2SOV3&$NnnVUbK(I^ZP-)^M`2YntR9RoVO$m*HaY~qZ5R(d9 zXy8O<>`nZ~77N;XG`3%9{CcrIjP24<{6ny3Jv$3u980PO4?I8fuzQn-`o8FA_jlyE zn`T53+_zl_izzx8Z(v^7p8REbp@)!gm!Y>|K#`n=XJyuAH>7{JOp2a=X7kr{#mWQB ziB96dik3S{4?dWY*WJ@dEN1{Tje{aFa5)0d4ECN4MlI= zZwvF~EqOMQxqTLMSf3LA%sq38tB)zu?BMRw_3UZ5hswkL$x4d&^du&$E;Fu}B{6rf zA6=DXXX0ATcgF4K0!-xme=_r`1t^u2AyoTQ*_tly)FkS-#7isyzi#0JY4J(E3YGTC8w2z|T zzZPTQLY)Zs=@N{Xr5lWbZ)$14wR+Yt4yy^TTKW)H)YcRaEsa6JS9LVR34r5Vcnr66 z1wa(~268w66#|Gpejyxy7~~gdKAOn!&22@rVz zkuMHju|;0Q0mw4hv8P`E$dD|WE=ZNi{IR(Z6IL-gs1Gv9WMpEh5lA)!LBrL6x%t$G=8p~yL3G@9nYBevp~ ziRp+YW;8=W&V&LJh`JOIAhHDlA%K*UeWe@uK8W~{K9K+sc#zO5P&g@XMEVR8+Q7id H!5aM^X2^T6 diff --git a/thesis/images/plot-timing-dram.pdf b/thesis/images/plot-timing-dram.pdf index e575ed91b2fa53d324879f7e86e0e00777638e94..ffa15e90a2fe699dbee4610f90a6b8581844c190 100644 GIT binary patch delta 1564 zcmdlN@ZV>HI3vG_iGiM(iGq>2rJlKwiN$0M#`OBRp{Mht-39iX4?lC!uEON+oOg?- zSTGfNpNXE(eDH)1i)O>x1OIBT>+F0YH8D}WU9~K$`d47=-95iPzIz=1dv|<({wx0c zQ&*pEsn-g5|4}Au{r3vH&{f+j_?ABY5)o2eeDw9SwA-QF|GIf@Jv!lDa8Iv!S?gBrs|*Zns`M0lh@qn=NwN;+FWM4Tz{bDc=mV4 z1+RB&`8R&iTGz|Y9lccKhSHSlwSr%#Jv!{3`YyMmaFf=VUbk6ksZY~nRs~t^Of5g= zYLgop=&+P{czC8(yUB6?1GiRo)*nvP*=IRdW(D69 zLHGNYs=cR&#AUs4n-aJ*+PL3Kq<8nOORP~RZ_3}kAT52AW9AV)E|pY6X@ew#6%kS& za%Tt4TmNt424#bVzb`Z|{`F>+LNE`{s?uhIEi*e8b@!-PZ+29jJZFMq)(MemysXim zF0xBFGX1z#^h9N{?yOHLT@rKZJ*UrE>-br)>G&h2_DrvWHIF>I!~{;L`KEiQ1gJSV zi&@TE+L+hiQRiUx!L6q$kb@_wtEu?I8@`;leKq=hAW>y3>v zqkI-D6mH3sP}#S`N|BMt_F>^;8Qv3_+m>yZ_x-s|ILn_!3%RZ))r3v3ax>h%@B9hP ze(phO&Fqr+H6&F7f+#(Pr&%`-hXS-`$-m|NfuG z{;T2!jdAkxU#+gHwWz7El)M^n@Kj}CdByMZcTfMSzWX;O?)@o!@k#rVmFN6p?DJXs z?dj{=iEAYeGnpKpwwk+4(OYPC&|aY<2XVlIf8pOnRAXry4E0AiS%8EoFfrXOGoaDv zVwNTtV&=wXm|~{pm}2G@=wb#2W~M-~$?H`4#f&jz4Gk@gCtp@otv56`M%QU>WD3#= z1PB+K8<=32VPgw;t1prw( B8X^Dy delta 2064 zcmZXUX;f3^8ihd_BUKO(WY7pCY8ZNkoSY`&zWS+c4Nf<+pO%J>XYBns>e?yCna+m1QaM9W@KOhG`NdEE)-2waSroy^ zzr0DBv6@w?!5m%cZ+yMY8~pKhxBY61Mhmz3#~2H272&@D zA)Ix5k)x;kE4Pcw3GKddvO|Bcvv!qJOb^6Lor1>iZI9Z`4VY}{{@&;SYMCZk>DPQE zj?4=n-2}W2v=Mga)NgG0P8vC40}+%}XDpXWOLk~X?osCniG6!P=dm-PC)|VXiL5mc z?a@rV9+MxwiefiR>P{;LfD2cvzS;G^EgbgH=|9`%a(*n}6%E!tr`FbJjbtdn6hj;S zU8_oWpTVdgE@kbfbo5)oT{V`o*HP8eB>SdIl`P#L zX=51uaG~{ZVWLbYcuRO`%Lvn9$n6p?@PISqd2H2096#g6_*~DLKWU~9{$BT^oND5c z#>H#+Wwga#ZaY)|En&(yA2n1ajjLpO z5;E&cW9(EejU`)Y8{!-6u&>$cO8yrL>02;{#AALG2T%43JPouf&n zim#XDYh_dh^-fQ-&(8IE9B&Mm5)V$~${tI?s#k`ruO|~{>9Ng;`euzO9)Kiu<@Ui6 zz5W^(SM~Vu2mv`y=a5CzkhU1RI2M^~fDl{!Id8)?4La?)_yKbH|?I zbacg_)<{9zFi1EPnYy!fU_q@o-7RVh-C)BuFS<^c!)UL8}k<8V>-Vyw`YB zmYcSafwf;j6oPmLRs=2zV3MFH72|*+D7y9x6ojd3H7XUxa3D%vE$aRJ(*Q^VJ|yOT zDnc+wTMI%I8b*TwYy~h3VQPj^8s;Ko5d4%|^iL2rJlKwiN$0CMny)2$w7>+^>af{=gF80?D?!+v4wBh z4gIpu8b1{kwjZhHE;6|G>DHlB4Z6y|{)(ihrycL$(YDkv2)_Jg-MV$p;`Z(P`}_01 zZ~e1h|9KU=%Vz&ud7-D)fB1Gjv;HGz{8ai6-^xdC?N(m9B+`HU>BPO_>AVW1zdva% z?SJ`+%U!-mciFRxT8|BV>bFjQu=48#frWo^r|hmY()lYeZBj|iqG>COR?0B?X}g43 z8Er`Ij9c+7V`67D=Z7HHtfNQwRH{u?5;`~WyJu6kNfxi=nyDA^Tq5suH#B=KYm<=` zWZEM3-tOvQLnqF+Cl222iu}^m#kHrZ;kaPM6oIhkK1_AIuL`Dlort}7^@xA{(!~Y= zj{b6n0eZSe6b*ia>iXSs^|v*$>ycSuA+;v3ioN=#!)A-$mnE_i7Z-eJ*uZzsPb`^% zk9EaqlZN=?4u92mALod2&3?vbekc=JWo zt%uGu1+9tlaa#3!Vf@j8D@L&IA2dYVr>7;Cz*@Q zz9OW3lf|tWx*YC{7x*#>7imto%5!wD;x@PTzO{*F3k;s}>0VvEP}<3gJ8VbG?+o#% z!@+F}y_%ChUCz6q?|m>?^VlRoF&?2a+S3HW*GTUW58{~o`u@S4VHx%GfmEVZM1B&TKmi29MKv&?|)By-Xzl)adD&5 zz9yFIUiY8HP2Bm{G4(po<1&y5h9(`N;Gqs-8!(dNt_M7*Yzv{*AJGy*Y zx%_hL%I}JQXU0F+C7|=jxo+lqzV>`^=RjW3?SCG9`|$7gTi1Wu@9Vtt%U*up>~VgF z=(GC9$wA&Vzkc#=EIAWV`}|$>+H*G|bzVlSVx4_HZ{vT(>pRb!|Jt^V#U(|liMc>#N`6unm!Xk@fdYtOZf3Z76Wdc6PcD5&BLy29 z1^tl9f>Z^4*NPJN;F81=Ak*1V!9dSKK|eVWOxxK3l^WwzYPh*iS&)&#(8$ot*uuba z@^TgL3=4B(O9cZEP{>o@0y7LOObvi;Ko>JM!4NYuH^UUOG{+D#H?)`>rK%=oY=JIi zXlQ9Nd77$fy`edV@#aPb7)F_c9E#>NGgC7RF$*J1F`&OO>@YMo2isAP?0-XZOG9)^ zj10{&#Y`~$4=mp>JZWrbgyBGAQqon42w-IjEvDOF*7p8Oc~~umXqhHyKq}rnwoK`s=E5S GaRC63ZzFvG delta 2023 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 Tm@Fh750c49EY@b%cI5v6b4bqt