From 19ee4bd38acce30e8c6c828af49e1e8d5a0dd33d Mon Sep 17 00:00:00 2001 From: Bluzume <39113159+KuromeSan@users.noreply.github.com> Date: Wed, 18 Aug 2021 00:08:11 +1200 Subject: [PATCH] Fix CultureVariance issues, Tell the germans to use ,'s to seperate decimal numbers OR SO HELP ME --- .vs/AppInfoParser/v16/.suo | Bin 90624 -> 79872 bytes AppInfoCli/CXMLCli.csproj | 6 ++++++ AppInfoCli/CXMLReader.cs | 17 ++++++++++------- AppInfoCli/GimConv.cs | 6 +----- AppInfoCli/Program.cs | 6 ++++++ AppInfoCli/Properties/AssemblyInfo.cs | 14 +++++++------- AppInfoCli/cxml.ico | Bin 0 -> 35583 bytes AppInfoParser.sln | 14 ++++++++++---- 8 files changed, 40 insertions(+), 23 deletions(-) create mode 100644 AppInfoCli/cxml.ico diff --git a/.vs/AppInfoParser/v16/.suo b/.vs/AppInfoParser/v16/.suo index 0e9234fd670f461baf1ff4bd6234d677f9a4eb23..2be95d48b7e6759efa33b8a31335492f96a76b2d 100644 GIT binary patch delta 8959 zcmeHM32@U@8vlQ3(lcoTO=)QhP49!I&E3=jrb&9YByCZ^RV3-5Xn|5%El_O%Pe6e@ zw@)2iJZ3yu0i)DWcd0J!?yx%uuDd!r>Y}UbvASNcQqXq4@1LZkQUMibb;g(Z<-Pa4 z`@7!pAJ``w_(Zx@n=TOoK`96sm<&UVj*X2GmC~8J8&3cfvvf&X?7>9ef=k&ekdO4? z`D~4(mN{az(8P{P`ehrDct2YmR?F<=dN~L}bOcf`Br%XC_G6c0X_%v!`j-dNu^1;H zrX!*dDF`WI10oKQg_wcB=?STbY(yerDk2_1gWQ4m3j3UfG4)Mh3Z^MmU>r?dTpu71 zu>jMT1@c`Ovp+|sZtF~9??vvCQU~m=s4RJ5pu#G#LR4PlwU`*7%$MLojvNY8D@LC@ zONR7^Fob46Aqo4UX;Yw4gX|$T1X)Dv2xXC28UJKRCl*B_h(;`mK}^P?aHLy_M^uq` zL~$<0#G~K@kVhhmh+j1LcVbaekVP~C;F2YXFa(oF=P|28#j2yTl!Zv3A!cHnMumOR zscKh%n2&J*Vpbrp!T5Xxdn(#dVZ}r_!iKOT9Eb`;C87#Zji^D?BI*$Jhz7(wgcCud zHnNZ8d*wgo$$3={IhhzSkpf$nmIcRIkE%J6R3k|8s-^6h$`y(08mB=#>q+Pjr)pP9 z*zx$ zjh!baFBCLcQA9Vgo;W9SBxq$fV3CxKlshBICMWc1!@<&#NX8#5fScJ-+dN_d+{Ak9 z^AzJ|9jt+}4tP_6^;d66f8it7;1h2o&o!uIhn2nCI}_HtF#p&eTu&6e?EQ`YuC6DA zZH@74rFkxE8l1}B&r$Jq6I{dwYSuGJVY$fl?!o}~3ti;IS+~Zi0CKkEL4w1|8Zi^e zMvDCcC-HxN_TrcO#gAQJ@Wy@@PO3#t`g;)8VZ0tee(yR2d316rS(`Ai8F35ZR>T&> zRs@;5HxRS>q&(KGR_77%K_oteco^{r;!(s7#IF&LA$B6zvq={DZ!xhKaS-91{&wmp z#wQS8BECXUXJZ%($QgEMRK+zCbjMm{jbZyf_BdI2g~CmdN>HBfOR%q#2fe(Bw=4b|!`&if-a@BeJt z_4n-X-01sk+a=ORGer%mE;x{$pZ!5m?dWCu6JHrlHEq{~E{o>u&O($+< zt&fQnYiI3wJh>VogS)POwJ9#S9jBau2(m!7A2au|k@M^1M4A~=1S-~JMcpTQX$U>M z7&Ap`cHFuK7tvFWhLWI@5pU&eB(6@LgDF)=eVD>}l>MM&N0m-F9T&_Yh2%7Qr_{@h zNTWTI2BXP}&eWL1lt!bRwn#dT1j~HgMkkPU`i_|75^t?tA?UH#6jCMpLd-l8!`9T+ z_ys&Cq)_a;7Uf$OAO<^zaMn|Yev{5Iw9yCYGIDIKY$Q`OJJy}$lA}b$;_)hTP$d?z zk*qrTEG#1B2o|yKY^R@#!7~;uP!@*`q#Q1WD%i}{6|Cl?W>BSnao3w0BBClrrvGc- z0^^0hP#(VbFBu>9zTNfw$o8xEWtbimrF%(EBHNml%TQ7Ib-AcR>pe618z#t5B!^5Z zhrwuyjBN3j+ZuBd1~I`Aw%Z@a;{I|Gi+;-;Z&;>g;vxjW7uLNTV3qeS2`U9ryR2lGbDEmXJeH|&SaGim67~O zD5A0N7z9a@#wHHXGHBN$TbqjTRXcXT^lLHIj~GClrBu?fDoG`eq{4cuEDE#9SZLAv zd3F_>Q#FT|IU$;~2{+s?Gq$EEU{aPqg`m0|JFRqN zqI7&C4H1&FUz&f-!KKCM3Uvnmn#HxHPrA0#FOAg~7$<6F_Bg|S2&GI3QA(k;t=-+z z(S2$6vQE3H)WYHxe%jiKTtrVG-kWZzdZ6{6f14MX+F-CXZvS9|bNKV4`wI;=*U`kI z23ca^2So6!&QH3nN~KiIXv4lYXd zE>W@D78S}#b7?#ZY{?>{w4$MMK9eq<{rF|Wa2o%S9_l}6n;=c44U+VO{K*}=8#e)m z7^vYpqd_0ez;T{d#@B_z`5e;0!M8+1DnA?pS~$p8X2Er3eSK?f`Vy^0TVmHZEOxWT zSXyDzSSoB4_-ApL%x1Hpq+EARpQ-H>AE6{4aYhwY2j+KnDmuY|jMc1`h#SapaaZUM z?g8#+qF(>vgp;n_F816*YxzBka2K?;44=l0*0J9y_3UVq^X%NHY#67lW+V2L@9ux1 z#{G})tL93W^ei)w6>^Rd<+vUP4mzux0PlEGB&ZWejp+z?8-n~4NqmcM_ox%Lb+*R+ z=oQ=Rd16wrt$3BLsG>V>!mCUN!i`s(Hla`G#dC^L_yi9nwYFxv&E9M$)0wVG1N@}54A$ahRJb|n3uW|}t1OmT|-fU3aUH(c$jJv1DRx28AuU)EoWi?-tmmf^1l zFNjO=!nhh~^F`h+6V#Ymfxiyq^Tk3lmbwwd05#r8mt(F2>(lje)z|7aVSgkcHMVNQ zHq^cW>(LlA)-sY#A#qY1ybTLlv0^Kd{S8+kr@O|}*o9B=+E9$|wZY17V7ru!-kKBX zsA#rV*qdE!*ZL)2lk20)3@7F4+c}sIY40^X) zV>B5p8n>a{q-odc&2D$Q!R#^VBZSM*!QzjOR++P#S9J7rFI};GZl8T&L%qFYDSB6} z(Pk;PS@fE6Q;A-4f9$o=Bx7YorKZ$muh5wEdcDzTw3%&Y<28N!&1krjE5o64FdK5Y zQVyNGHVIQT5>PX(=W;gt;RAjNdwzHcf17Q@^DVZKQn$t3qSqMP4MyauUZ=5`EbSU& zi{5DQxD7g!K@Ye)BE+!N8p7dXvq{J992E(yeZcM}w-OqRaD z%uhyqYXnMiGz;QtPHQ&b)@mZSI|h<@{xs;Dc5*cT(Si=f4#ua1L#w#o4>=RzS1_eM zq#nK1L=BB5fdqJ3H6-}<4;=^oRufE}@-SVk#E?AvB&Mr}v{RuDcx^lsv0E2Tiw}Cu zF43VJ{?FK07vGxzWrHe6h|&uFpTK7(Lk71ZjrS+x-xbL)jSr}x7}EGI72G7b4fwMv z=#2_?=V9Br;`#3rK<^vfoFh4RRDIL&M2%E%29Sz!QA=47iE@T6ygZRQrnfAA=#C$6j9; z!8evc>}l6v1->K|JbZ2{Wbqqj!b2%^!=C)0RmP*zAUpHa3iO!Z|NIoZw=;y_rk!CYFT)oM#lJ+JUj8z5&-0k%9trJH%D z1N7u>W1y0Tp3U)GoYbFfvb;VFR?Ua)XcI9}A3`fU5ErynJJ{gXa`8&s#k_CR7ygMFZ z@m-~}3fHMFhS>3xg8w5P(z#0q8K)kc_`GK1(QpK$@Ue7ki7r9Pw_Bi`r!>KFuB*YL z5cVeJA5TSg6zf2NpNIL%X<$t28$X2k`PYOIU4QX%LV<5v1c|%@AFR1mkDE}{&|W>P z17=&+D!zvdeYgM?hcU;4Q~7`ivc#`mXZS{PHI7Ixl2So7={FKKP<`un`^*Mjd|vNo z>(i{~?xCGqFM)H=UC7tKWWHMq+2Z>yADst{-%1n71(A3isep0_x|~V_;zj2p54j$GI#FG zKljePckaypTP{j0hont9*s(^gR&rbf$8j!*_KuDYtT={Pv@`D(W5Lje@9l9qTrzo9 z(nzSMIwF~Z#ir*iF%EiB!EN&M?0 zk?Ms&Q5{;brir?VH0jW_fXLr2*3Le;*!IRc9MKOEfbc*#$52hGs6<|WjvL3ljtwfi762XqThvTk9-OF+cCe#SU94J zU@EBgtnWrCV+Id5^_gAu4I^!Z)f%!NukHl0EzThnr=1sJs}Zpnu>`Rcu?#`|E5v#w z)~_N~Azni?A(|0Z1Q4=9vc^ex0~#2w-ja4=z4)CeZwk>PO0z+9ONHfWa*1;@N6w7M9Y#GUNSc5FbO2c5FwpS|$P4WY%ETU7PA%^@DDk@*^c9@u zDGVCqFla?c$geV}ywjlI72@-F3rYnG!i|JXIivH7GQPvqgL7q+XXvO9EU+Jm32f<3%7l(_L(o)i*rIcWI0|wfg)J5MJaV9YVCd(}>X!-!{gc4rsIC5~a)w6gptR?h z$A2Y^v8npZSor;=T`P+I{PoGp4R^FZ4!wAC#iwtmk3?Urzj)gA_14=QrMM9h$NGHK zm{9|@Yaz$KWqsUux8#PcGs|yX_;%e3CAz;n7x;}*7?>Hk+p0my=+i2V=vz&$j1n%L zjSk7Zg$_j?GAMylv1SPmb^8O-Unrn1Yb0rJO|6nHr(UQ{9VMfTOv#=m=|)?q0E5VD zq+?wkVu!Rh2F^UF^~T!*ovsvS(lF%pgB#v2v2dvN$tLxrQOG;;8~P!PQXVF{Xh))> zQ-~C`SHf}PJuxm+dbSX*^~A^J*h%3b zOlg7Y0OZj*9w74MwCRz?5xDC>nIY*%DV{bJJw}haBAi==B8Q&v#L@ot+>A|3;mjsf z!{y9G*Vx#Ig!vh!vPv^#4X9ytFnU0eO(|m%*mhVBi}JKmeOz3G4)zaF!->oYN7tPr zuAt1+y2r-FN9f}nkIxgHEK@O8SedB}iq}Wz4UV2lGhXJ{u!Ky5amuM2Z+X_ZCSkX=CHX;EsM2;I zo~gmos{#1QbNRh;sGEF~DWQ5wy_B{^)}w<`O44Qa8>74PR$bbYy%>kX@AslY@FI3l zu^Pp+V@#9KB}{PaRb#F!1shsov}4+@NzRh>!Ny<*Lo07XA_&3R@0c^t^Zk(wN09HK zYPvS z1jC~^DqtMnW^LI94YexYENtUiI4L6UjkAk#+OAwX3JK!^LU!-icU*a6-=eb-(J8st z{I5kz{UgpsMU&ygQem{+Qn4OBn(XS~=Bk4H^qMMjd1dLW@~CXEj8nyzm&}@%Z?38; zEuUUFbjFk^DW<72kj^MImzB6Q^ZB)vRpyydsk6$;%v0&~AU&`EtMiA(N=^6l(HUd$ z+6Bqg0o1mxQNvd)T4-xg!_I=9U|4g^TJ(Xu*O_Tt+p1G67jhcSP&C`m78J~6U^KPu znwI(y-vtQ1bBKDF_3g%jHYS>9Y*+JiHNrPP4ca~Y>X)U5&>)>=LqqL;{n*m#F)xqb z9*J}p1B&9X`X4Y_g}R<@R1^|voS7@;s=4Xhd@h+Q=V~$RQ@LDxSEJKy4EB~GO!$Uj zeqh8ZOs1JB`Kc+X`KgbeD?c@r40*Re6yH67LT(z$F2f(WKaET0Qc&`6ZU`)|h~_Z~ z?yne(*S+UN&uU=ZYF!^ns18*fiqfof-7s@C2s-mRrhNFwsF?ND|MA*A?_0b5)aoz> zx94Q~(i_Sw^yG`&q`N)^eN8WWV`VuH!MxuF+Y?6O7Av=31`mE$U7Xwn_o97dW2>9> zSZFvo_{rfwPR6e&DyXVh!V1x4pTLWCf%g5@6qj9fml=4^E`uerV;;E%Io-8|HQ2{j ze#tgoeu;;MrA9cvSSw7l19DNd2p9Y1mtA>K)VINBud3}H3$#*E*(=yppXNd>7}>ZN z=Dbo4*|kdhzGV$;Bfl7}P`?$>XJ6p+#dWJ){-c#QzazQN{!#8GZYFNa46c+mBWWjr zF>lYc&)u}bWy9ZP!2fX>99yrnw`}=EqT7r2j9a*8LgJ%~P1C08<09jV2SrE53@R>( zOqixaswCD>oM4JKnRN+Lt_8k7lgk>weP}>)g+fXfv$f56!=NlAD6A(oLJ<#pw|f`) z+YrHs_MN6tY{OO_^b^%E>98J7pIHw-ohgE#LLH2>FWt4x!gQ@py<%hIOX7+Rx=4MA zsU$K6n~@17b4;YUI3cD)r;8q>OE5^e-;rLBV6Rq8FP%AcR{7khsg?72SU7Q*&D4|i zrw1F^1ij1(%Y@M( z0qp(eyd0^xqEv>O2IIK`*!9nFd)v7M42rLZ0Drv*hMo_B zx*N-&?m`I^TnK^U^G&ei`j&olm3{p2HH4dQ`@ScObUTSE)7?!OCSk+wILsD$&C;{G;9Nj$}y*8}m^x*&jk!l0=zO2&lO z8jP{e+XrFd;cTfI)(_Yn^=b`Uz;avbHEbb+6DDscjaPss{0D*lN2m%ydriE1U;8d8 z7%U63I~lEILF{z~mk#?reZ*US^N8nLIM{h~DQp?5hErFvVAWVZkEwW6%*0eo_oh<3 zOrI-|Ib)aN^r_;r?^DDlJbz)J+ZUa|+0}D;dtrM8!+2b5d)J2ne&fHp8wkE{!?1VVl=kSeID<4$ChBOnF}9hMhhPlm5Dn1 sn0PNv^IogNnXwB$$Tp`BYFB4dwI&9$bmsZ11=tKh7&_wn`cM-0Z{&4g{{R30 diff --git a/AppInfoCli/CXMLCli.csproj b/AppInfoCli/CXMLCli.csproj index 5ec3ec2..73c096b 100644 --- a/AppInfoCli/CXMLCli.csproj +++ b/AppInfoCli/CXMLCli.csproj @@ -75,6 +75,9 @@ MinimumRecommendedRules.ruleset true + + cxml.ico + ..\packages\DotNetZip.1.13.3\lib\net40\DotNetZip.dll @@ -102,5 +105,8 @@ + + + \ No newline at end of file diff --git a/AppInfoCli/CXMLReader.cs b/AppInfoCli/CXMLReader.cs index bc1d153..8ece126 100644 --- a/AppInfoCli/CXMLReader.cs +++ b/AppInfoCli/CXMLReader.cs @@ -6,7 +6,7 @@ using General; using System.IO; using System.Text; using System.Xml; - +using System.Globalization; namespace CXML { @@ -102,7 +102,7 @@ namespace CXML public bool ProcessFiles = false; public bool WaitExit = false; - + public bool NoRecursive = false; public void Init(string path, bool CheckMagic = true) { InfoFile = File.Open(path, FileMode.Open, FileAccess.Read); @@ -479,6 +479,9 @@ namespace CXML if (Extension == ".rcs") // Recursive Decompile, remove this if statement to remove RCS processing { + if (NoRecursive) + return; + Console.WriteLine("Decompiling " + Path.GetFileName(FileName)); string DirectoryName = Path.Combine(FileDir, "converted", "RCStoXML", Path.GetFileNameWithoutExtension(FileName)); if (!Directory.Exists(DirectoryName)) @@ -611,7 +614,7 @@ namespace CXML break; case AttributeType.TYPE_FLOAT: float FloatValue = bTreeTable.ReadSingle(); - AttributeValue = ((double)FloatValue).ToString() + "f"; + AttributeValue = FloatValue.ToString("G9", CultureInfo.InvariantCulture) + "f"; Console.WriteLine("Float - Value: " + AttributeValue.ToString() + " sz:" + bTreeTable.ReadInt32()); break; case AttributeType.TYPE_STRING: @@ -640,11 +643,11 @@ namespace CXML int HashTableOffset = bTreeTable.ReadInt32(); int HashTableSize = bTreeTable.ReadInt32(); HashIDTable.Seek(HashTableOffset * 4, SeekOrigin.Begin); - Console.WriteLine("Hash ID Offset:" + HashTableOffset.ToString() + " size: " + HashTableSize); + Console.WriteLine("Hash ID Offset:" + HashTableOffset.ToString(CultureInfo.InvariantCulture) + " size: " + HashTableSize); int HashId = bHashIDTable.ReadInt32(); - AttributeValue = HashId.ToString("X8"); + AttributeValue = HashId.ToString("X8", CultureInfo.InvariantCulture); break; case AttributeType.TYPE_INTEGER_ARRAY: @@ -673,7 +676,7 @@ namespace CXML for(int i = 0; i < FloatArraySize; i++) { FloatValue = bFloatArrayTable.ReadSingle(); - StrList.Add(((double)FloatValue).ToString() +"f"); + StrList.Add(FloatValue.ToString("G9", CultureInfo.InvariantCulture) +"f"); } string[] StrArray = StrList.ToArray(); AttributeValue = "[" + String.Join(", ", StrArray) + "]"; @@ -689,7 +692,7 @@ namespace CXML string FileHash = Tools.GenerateHash(FileData); string FileSmallHash = Tools.GenerateShortHash(FileData); String Extension = Tools.GetFileExtension(FileData); - String FileName = Path.Combine(FileDir, "original", FilePtr.ToString("X")+"-"+FileHash + Extension); + String FileName = Path.Combine(FileDir, "original", FilePtr.ToString("X", CultureInfo.InvariantCulture) +"-"+FileHash + Extension); String IdealName = ElementName + "-" + AttributeName + "-" + FileSmallHash + Extension; if (!File.Exists(FileName)) { diff --git a/AppInfoCli/GimConv.cs b/AppInfoCli/GimConv.cs index e05aaf1..23ebefd 100644 --- a/AppInfoCli/GimConv.cs +++ b/AppInfoCli/GimConv.cs @@ -1,11 +1,7 @@ using Ionic.Zip; using System; -using System.Collections.Generic; using System.IO; -using System.Linq; using System.Net; -using System.Text; -using System.Threading.Tasks; namespace CXMLDecompiler { @@ -55,7 +51,7 @@ namespace CXMLDecompiler zip.Dispose(); zipStream.Dispose(); - File.AppendAllText("GimConv\\GimConv.cfg", "option -psvindex8 {\r\n format_endian = little\r\n format_style = psp\r\n image_format = index8\r\n pixel_order = normal\r\n pixel_channel = rgba\r\n limit_image_width = 4096\r\n limit_image_height = 4096\r\n}"); + File.AppendAllText("GimConv\\GimConv.cfg", "option -psvrgba8888 {\r\n format_endian = little\r\n format_style = psp\r\n image_format = rgba8888\r\n pixel_order = normal\r\n pixel_channel = rgba\r\n limit_image_width = 4096\r\n limit_image_height = 4096\r\n}\r\noption -psvindex4 {\r\n format_endian = little\r\n format_style = psp\r\n image_format = index4\r\n pixel_order = normal\r\n pixel_channel = rgba\r\n limit_image_width = 4096\r\n limit_image_height = 4096\r\n}\r\noption -psvindex8 {\r\n format_endian = little\r\n format_style = psp\r\n image_format = index8\r\n pixel_order = normal\r\n pixel_channel = rgba\r\n limit_image_width = 4096\r\n limit_image_height = 4096\r\n}"); DownloadCompleted = true; } diff --git a/AppInfoCli/Program.cs b/AppInfoCli/Program.cs index e04364e..bdb165c 100644 --- a/AppInfoCli/Program.cs +++ b/AppInfoCli/Program.cs @@ -53,6 +53,7 @@ namespace CXMLCli Console.WriteLine("\t-fat --dump-float-array Dump float array table."); Console.WriteLine("\t-ft --dump-file Dump file table."); Console.WriteLine("\t-p --process-files Process Extracted Files"); + Console.WriteLine("\t-nr --no-recursive Do not recursively decompile .RCS to XML"); Console.WriteLine("\t-w --wait-exit Wait for keypress before exiting"); Console.WriteLine("\t-d --decompile Decompile CXML to XML."); Console.WriteLine("\t-c --compile Compile XML to CXML"); @@ -189,6 +190,11 @@ namespace CXMLCli cxmlParser.WaitExit = true; } + if (HasArg(ArgsFull, "-nr") || HasArg(ArgsFull, "--no-recursive")) + { + cxmlParser.NoRecursive = true; + } + if (HasArg(ArgsFull, "-d") || HasArg(ArgsFull, "--decompile") && !HasArg(ArgsFull, "-dt")) { Console.WriteLine("Decompiling."); diff --git a/AppInfoCli/Properties/AssemblyInfo.cs b/AppInfoCli/Properties/AssemblyInfo.cs index 8acf2fc..0bcf651 100644 --- a/AppInfoCli/Properties/AssemblyInfo.cs +++ b/AppInfoCli/Properties/AssemblyInfo.cs @@ -5,13 +5,13 @@ using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. -[assembly: AssemblyTitle("AppInfoCli")] -[assembly: AssemblyDescription("")] +[assembly: AssemblyTitle("CXML Decompiler")] +[assembly: AssemblyDescription("CXML Decompiler & Compiler")] [assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("AppInfoCli")] -[assembly: AssemblyCopyright("Copyright © 2019")] -[assembly: AssemblyTrademark("")] +[assembly: AssemblyCompany("SilicaAndPina Inc")] +[assembly: AssemblyProduct("CXML Decompiler")] +[assembly: AssemblyCopyright("Public Domain © 2021")] +[assembly: AssemblyTrademark("CXML Decompiler is not a trademark of SilicaAndPina Inc")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible @@ -20,7 +20,7 @@ using System.Runtime.InteropServices; [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("be72e673-25ff-47ab-af5b-9448b69e3990")] +[assembly: Guid("7e3c8d27-de0C-45c1-96ed-a408f3c03b93")] // Version information for an assembly consists of the following four values: // diff --git a/AppInfoCli/cxml.ico b/AppInfoCli/cxml.ico new file mode 100644 index 0000000000000000000000000000000000000000..a96e502097928dad25bfd33b163c417d92b8a5ca GIT binary patch literal 35583 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 M$4*+mKk5