From 0eac2a0c61136d2d2486040f81b0b3a3dd9b54f6 Mon Sep 17 00:00:00 2001 From: Suphonchai Phoonsawat Date: Mon, 4 Sep 2023 11:37:37 +0700 Subject: [PATCH] Report C-PM-13 Cover and Attachment --- .../Commands/CommandReportRepository.cs | 46 ++++++ .../Commands/CommandRepository.cs | 2 + .../Reports/CommandType13Response.cs | 25 +++ .../Controllers/CommandReportController.cs | 146 ++++++++++++++++-- ...7-คำสั่งให้โอนข้าราชการกรุงเทพมหานครสามัญ-1.trdp | Bin 28708 -> 28791 bytes ...7-คำสั่งให้โอนข้าราชการกรุงเทพมหานครสามัญ-2.trdp | Bin 2656 -> 2355 bytes 6 files changed, 206 insertions(+), 13 deletions(-) create mode 100644 BMA.EHR.Application/Responses/Reports/CommandType13Response.cs diff --git a/BMA.EHR.Application/Repositories/Commands/CommandReportRepository.cs b/BMA.EHR.Application/Repositories/Commands/CommandReportRepository.cs index 013b70a9..d3daa100 100644 --- a/BMA.EHR.Application/Repositories/Commands/CommandReportRepository.cs +++ b/BMA.EHR.Application/Repositories/Commands/CommandReportRepository.cs @@ -532,6 +532,52 @@ namespace BMA.EHR.Application.Repositories.Commands } } + public async Task> GetCommandType13AttachmentAsync(Guid id) + { + try + { + var raw_data = await _dbContext.Set() + .Include(c => c.Command) + .Where(c => c.Command.Id == id) + .ToListAsync(); + if (raw_data == null) + { + throw new Exception(GlobalMessages.CommandNotFound); + } + + var report_data = (from r in raw_data + join p in _dbContext.Set() + on r.RefPlacementProfileId equals p.Id + join pf in _dbContext.Set() + .Include(x => x.Position) + .Include(x => x.PositionLevel) + .Include(x => x.PositionType) + .Include(x => x.PosNo) + .Include(x => x.Salaries) + on r.CitizenId equals pf.CitizenId + select new CommandType13Response + { + CitizenId = r.CitizenId, + FullName = $"{r.Prefix}{r.FirstName} {r.LastName}", + Organization = pf.Oc == null ? "" : pf.Oc.Replace("/", " "), + PositionName = pf.Position == null ? "" : pf.Position.Name, + PositionLevel = pf.PositionLevel == null ? "" : pf.PositionLevel.Name, + PositionType = pf.PositionType == null ? "" : pf.PositionType.Name, + PositionNumber = pf.PosNo == null ? "" : pf.PosNo.Name, + Salary = pf.Salaries == null || pf.Salaries.Count == 0 ? 0 : pf.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount.Value, + ActiveDate = "", + ReceiveOrganizationName = r.Command!.ReceiveOrganizationName + }) + .ToList(); + + return report_data; + } + catch + { + throw; + } + } + public async Task> GetCommandType15AttachmentAsync(Guid id) { try diff --git a/BMA.EHR.Application/Repositories/Commands/CommandRepository.cs b/BMA.EHR.Application/Repositories/Commands/CommandRepository.cs index 136d5701..8b1f1375 100644 --- a/BMA.EHR.Application/Repositories/Commands/CommandRepository.cs +++ b/BMA.EHR.Application/Repositories/Commands/CommandRepository.cs @@ -1841,6 +1841,8 @@ namespace BMA.EHR.Application.Repositories.Commands .Include(x => x.Placement) .Include(x => x.CommandType) .Include(x => x.CommandStatus) + .OrderBy(x => x.CommandType.CommandCode) + .ThenByDescending(x => x.CommandAffectDate) .ToListAsync(); } diff --git a/BMA.EHR.Application/Responses/Reports/CommandType13Response.cs b/BMA.EHR.Application/Responses/Reports/CommandType13Response.cs new file mode 100644 index 00000000..d8da5e56 --- /dev/null +++ b/BMA.EHR.Application/Responses/Reports/CommandType13Response.cs @@ -0,0 +1,25 @@ +namespace BMA.EHR.Application.Responses.Reports +{ + public class CommandType13Response + { + public string CitizenId { get; set; } = string.Empty; + + public string FullName { get; set; } = string.Empty; + + public string Organization { get; set; } = string.Empty; + + public string PositionName { get; set; } = string.Empty; + + public string PositionLevel { get; set; } = string.Empty; + + public string PositionType { get; set; } = string.Empty; + + public string PositionNumber { get; set; } = string.Empty; + + public double Salary { get; set; } = 0; + + public string ReceiveOrganizationName { get; set; } = string.Empty; + + public string ActiveDate { get; set; } = string.Empty; + } +} diff --git a/BMA.EHR.Report.Service/Controllers/CommandReportController.cs b/BMA.EHR.Report.Service/Controllers/CommandReportController.cs index 961c766f..f071749c 100644 --- a/BMA.EHR.Report.Service/Controllers/CommandReportController.cs +++ b/BMA.EHR.Report.Service/Controllers/CommandReportController.cs @@ -1290,6 +1290,126 @@ namespace BMA.EHR.Report.Service.Controllers #endregion + #region " C-PM-13 " + + private async Task GenerateCommandReportType13_Cover(Guid commandId, string exportType) + { + try + { + var raw_data = await _repository.GetByIdAsync(commandId); + if (raw_data == null) + { + throw new Exception(GlobalMessages.CommandNotFound); + } + + //var recvId = raw_data.Receivers.Select(x => x.RefPlacementProfileId).ToList(); + //var positionList = string.Empty; + + var command = new + { + CommandNo = raw_data.CommandNo, + CommandYear = raw_data.CommandYear.ToInteger().ToThaiYear().ToString(), + IssuerOrganizationName = raw_data.IssuerOrganizationName, + ConclusionRegisterNo = raw_data.ConclusionRegisterNo, + ConclusionRegisterDate = raw_data.ConclusionRegisterDate == null ? "" : raw_data.ConclusionRegisterDate.Value.ToThaiFullDate3(), + ConclusionResultNo = raw_data.ConclusionResultNo, + ConclusionResultDate = raw_data.ConclusionResultDate == null ? "" : raw_data.ConclusionResultDate.Value.ToThaiFullDate3(), + PositionList = "", + Count = raw_data.Receivers.Count, + CommandAffectDate = raw_data.CommandAffectDate == null ? "" : raw_data.CommandAffectDate.Value.ToThaiFullDate3(), + AuthorizedUserFullName = raw_data.AuthorizedUserFullName, + AuthorizedPosition = raw_data.AuthorizedPosition, + + ReceiveOrganizationName = raw_data.ReceiveOrganizationName, + }; + + var rptFile = Path.Combine(_hostingEnvironment.ContentRootPath, "Reports", $"27-คำสั่งให้โอนข้าราชการกรุงเทพมหานครสามัญ-1.trdp"); + + ReportPackager reportPackager = new ReportPackager(); + Telerik.Reporting.Report? report = null; + using (var sourceStream = System.IO.File.OpenRead(rptFile)) + { + report = (Telerik.Reporting.Report)reportPackager.UnpackageDocument(sourceStream); + } + + report.DataSource = command; + + System.Collections.Hashtable deviceInfo = new System.Collections.Hashtable(); + if (exportType == "docx") + deviceInfo["OutputFormat"] = "DOCX"; + + InstanceReportSource instanceReportSource = new InstanceReportSource() + { + ReportDocument = report + }; + + + ReportProcessor reportProcessor = new ReportProcessor(_configuration); + RenderingResult result = reportProcessor.RenderReport(exportType.ToUpper(), instanceReportSource, deviceInfo); + + var content = result.DocumentBytes; + + return content; + } + catch + { + throw; + } + } + + private async Task GenerateCommandReportType13_Attachment(Guid commandId, string exportType) + { + try + { + var command = await _repository.GetByIdAsync(commandId); + if (command == null) + { + throw new Exception(GlobalMessages.CommandNotFound); + } + + var data = await _commandReportRepository.GetCommandType13AttachmentAsync(commandId); + + var rptFile = Path.Combine(_hostingEnvironment.ContentRootPath, "Reports", $"27-คำสั่งให้โอนข้าราชการกรุงเทพมหานครสามัญ-2.trdp"); + + ReportPackager reportPackager = new ReportPackager(); + Telerik.Reporting.Report? report = null; + using (var sourceStream = System.IO.File.OpenRead(rptFile)) + { + report = (Telerik.Reporting.Report)reportPackager.UnpackageDocument(sourceStream); + } + + var tblData = (Telerik.Reporting.Table)report.Items["detailSection1"].Items["table1"]; + + tblData.DataSource = data; + + report.ReportParameters["IssuerOrganizationName"].Value = command.IssuerOrganizationName; + report.ReportParameters["CommandNo"].Value = command.CommandNo; + report.ReportParameters["CommandYear"].Value = command.CommandYear.ToInteger().ToThaiYear().ToString(); + report.ReportParameters["CommandExecuteDate"].Value = command.CommandExcecuteDate == null ? "" : command.CommandExcecuteDate.Value.ToThaiFullDate3(); + + System.Collections.Hashtable deviceInfo = new System.Collections.Hashtable(); + + InstanceReportSource instanceReportSource = new InstanceReportSource() + { + ReportDocument = report + }; + + + ReportProcessor reportProcessor = new ReportProcessor(_configuration); + RenderingResult result = reportProcessor.RenderReport(exportType, instanceReportSource, deviceInfo); + + var content = result.DocumentBytes; + + return content; + } + catch + { + throw; + } + } + + #endregion + #region " C-PM-15 " private async Task GenerateCommandReportType15_Cover(Guid commandId, string exportType) @@ -1772,10 +1892,6 @@ namespace BMA.EHR.Report.Service.Controllers var contentData = await GenerateCommandReportType01_Cover(id, exportType); return File(contentData, mimeType, $"command-{cmd.CommandNo}-{cmd.CommandYear.ToInteger().ToThaiYear()}.{exportType.Trim().ToLower()}"); - - //var rptFile = Path.Combine(_hostingEnvironment.ContentRootPath, "Reports", $"01-คำสั่งบรรจุและแต่งตั้งผู้สอบแข่งขันได้-1.trdp"); - //var contentData = _reportGenerator.GenerateReport(rptFile, exportType); - //return File(contentData, mimeType, $"command.{exportType.Trim().ToLower()}"); } catch { @@ -2631,7 +2747,7 @@ namespace BMA.EHR.Report.Service.Controllers [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] - public IActionResult GetCommandType13CoverReport(Guid id, string exportType = "pdf") + public async Task> GetCommandType13CoverReportAsync(Guid id, string exportType = "pdf") { try { @@ -2643,10 +2759,12 @@ namespace BMA.EHR.Report.Service.Controllers case "xlsx": mimeType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; break; } - var rptFile = Path.Combine(_hostingEnvironment.ContentRootPath, "Reports", $"27-คำสั่งให้โอนข้าราชการกรุงเทพมหานครสามัญ-1.trdp"); - var contentData = _reportGenerator.GenerateReport(rptFile, exportType); + var cmd = await _repository.GetByIdAsync(id); + if (cmd == null) + throw new Exception(GlobalMessages.CommandNotFound); - return File(contentData, mimeType, $"command.{exportType.Trim().ToLower()}"); + var contentData = await GenerateCommandReportType13_Cover(id, exportType); + return File(contentData, mimeType, $"command-{cmd.CommandNo}-{cmd.CommandYear.ToInteger().ToThaiYear()}.{exportType.Trim().ToLower()}"); } catch { @@ -2668,10 +2786,14 @@ namespace BMA.EHR.Report.Service.Controllers [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] - public IActionResult GetCommandType13AttachmentReport(Guid id, string exportType = "pdf") + public async Task> GetCommandType13AttachmentReportAsync(Guid id, string exportType = "pdf") { try { + var cmd = await _repository.GetByIdAsync(id); + if (cmd == null) + throw new Exception(GlobalMessages.CommandNotFound); + var mimeType = ""; switch (exportType.Trim().ToLower()) { @@ -2680,10 +2802,8 @@ namespace BMA.EHR.Report.Service.Controllers case "xlsx": mimeType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; break; } - var rptFile = Path.Combine(_hostingEnvironment.ContentRootPath, "Reports", $"27-คำสั่งให้โอนข้าราชการกรุงเทพมหานครสามัญ-2.trdp"); - var contentData = _reportGenerator.GenerateReport(rptFile, exportType); - - return File(contentData, mimeType, $"command-attachment.{exportType.Trim().ToLower()}"); + var contentData = await GenerateCommandReportType13_Attachment(id, exportType); + return File(contentData, mimeType, $"command-attachment-{cmd.CommandNo}-{cmd.CommandYear.ToInteger().ToThaiYear()}.{exportType.Trim().ToLower()}"); } catch { diff --git a/BMA.EHR.Report.Service/Reports/27-คำสั่งให้โอนข้าราชการกรุงเทพมหานครสามัญ-1.trdp b/BMA.EHR.Report.Service/Reports/27-คำสั่งให้โอนข้าราชการกรุงเทพมหานครสามัญ-1.trdp index 928b34df6faff1d4480c6de82bd5f8c8e05fc60b..22e621d2a4c36dc8506a9939a68de8d6f0cfba7a 100644 GIT binary patch delta 1631 zcmV-l2B7(*-~spG0S!<~0|XQR000O8ol_*S4U=dNol_)N9i%&Z%>@7en-`O=XfS`( zSX)mUM-+aq)c-KrCwR!L*EY7P>_k9Bg3?e6lSJ*?#2)Nb*1Oj3IJYWNNs&k*<)JM! zGO3UXs#+Bx1$tZmoB1i7IlHqr+dvZ12FtQ{X3xwy=ljk%bE#f=*tO7o>UySQ*E9p? zG(_#D(=zRLP3yC@OBLb_sS|(ju)AHp@hK9a!oUVA* zP^05KXxOB8%{5y!ZPo2l4GA5#SJOI-^*+;eui2qp;$cQD>YDd()9LCiOfQt``CPuB z8`#iYOYhW-C@GI8EnM%wUU2>!f9c) z276@Ds3|%Y9h-%NR>#Qrsd?5Fbt?_G>Jv) zt^+VSHnB8x)9ljKM?Im_lq!Gqp50cMB$Oxp5eBc)hfG?VB3c=e!=>1iTx3WA=ko9Z z{HST%-{Afq-2a{XM|}8<`vNixg2v zS~h2yZ4ssm)MnI8OHJZ$X_XHL8k%=35sr(*@@U%QQ5I!S2*dj$Q_6oJ^NRa_2~1#0 zh021{?Gn4S>^wn8AL;&*5;u!b;UXYZ#*-l`;(P>>cus>f{D%Ac-2Vq+=TL+XLVWlw z_Ye5+IUhcSz5(~2%BFt|vf}pz_t#Z(9e#Z=6ebg(?{fcVIfE1!K!EN;fF48t5%*ta zATC}6h|@u6;KFQqTo`{AaV3E-8uQ`)7NGen_xDu%t2!Rv1J_Ou;1FZIB zbNEsLE`CMQZL7rCfRKP^nSlf7JO%;Df(Qi>2V3G#0RId3-;960-{!;br?B`;2T}*Y ziU3US!-$B^ogfk6djxa*8Oq4u*pZb}n!9rjsUO?B1Hv27JXXWcG>HIm7Yi7%@DTjm z1}MT%eFL)`f`WAwxmj?2#F9Scd3;!a>4=V z3Q*q;gD?O?yaInbl96?&+y^71vQ2IUtq+sDhFrc@fqw_1`zCn!~)#6nJ9Om z*LzSU!$K30@&fP=B|=lBu0zGk7Pv5gA+HpUd(b0x0?#w0sC)rR5iU>O`XttMqkv~- zW>dSL1C;`MfYAZa>1*KM9hdYXJJb8Y+y??BI5wOMCI)}57?p{z7 z6#vBiAw*5Qn^ue9J_z`6iVTB13S_oH{&^~qCFrmDa1)XySXIMPkH%N-cPUQV=*jG4 zevPs8-Znk+u0^9EA6E_-crx3mBq(AdlLQxFMN6&-TW`Lt#$QvsJ1V6Uj&PMEE=CR) zQ@~6?_-#TYhX=W7gx~R#T@Okh8%`BmnVkq!2^Zo^8&NoNDWGE2Qz}sA`mE!)!o=1s zkGhL}%YsA8bQXqFk1gR572T#TGn>Q;yM-Zdm27|iD_W%qXvuTTw%oRfau)6-!ad^{ z9P5r}%ER9%h9BaX|9*H?_0*lGp1Sl5E=3a()jDa@24(W@)I)XBqwWpU7PWD%C=eCp z#%q#ZTyqzM*{0oh`W}d?ex>XtaoeUH-(aeaTOm1c=3EKSpfO8050uS2jLBPIxO~+k z2asld|8SNQ$p*@j%VOs%E)q|_{%l`sUO9KQH000080G(4L zSB5mjouU8$0Pg?*022Tl09!+EZggdCbYGKyZqx&vQzVmCZ$}QDQzTa%q&s`f1pok> d7n7@RE(4uYB$M248v(16_-`f#nr{FA007Po2J8R; delta 1522 zcmV zSzAvVM-+aq)c-KrN)s|1zu@eDNLYf9ym?qB~d$3no?^?U-2KrP|BtoP-w1q|{ zRiuKdR7FUE^s@dp`%`-6?9Se>v1yP>u#i17d*)oe@9fN(p>k`zV~}r{?dXe;(&`eaYqs{dXOd<16r$3y2y^hub9Wwqp zayNRS(1)7QW3;w>R}#3+a{om<*!haBL9;;fyt8U`t5S})z%gW~-p~wIvn_n`^;^rJ`%Nl$V?H}GYSs*x|VG^gSt45cdh z-j?sZ_q{)S@5CQG_q}a;?ngN02If^M;gg_>aNp()y#@KX$V`{nX{k{R*6Q~qvS1mI zj(0S}Vd;p^vdBk57%l~wLI#;vzV{bk62&f$gkkpjzyR$u41@1{@6dnu{=w`xh6EwR zAAIk7NB&^PA3VdczVAKbUGEfS;roT}ZHn$DetR$#l>w}8eD7DTfeZ981rIR=PjURj z_g-cIp1b-0E2HtvCD1LE)l`!0B5rSe?|@8k3^>Yf5tXw*h6#yn0BJvhe;O#+61uVv z&*cW+dmx67oNx^jvc-SRy^d{7pgF^6ejKAK9LOtAXr9ic2>k#KGXNFF0mNOo^7s^J zE|c)bh{W$0{Q>U|UW&|uZvbXbtOHw!BDVR0)5pP66yUf*&O^fQ!ViG^oA13l`+UzI z{5Zwe>*+x1DA?jKr4MmNM9_Y)?%>}E>i9F1;cvk{XN|kNpJ9Kgcs@(UKQ{s1a4Ms^09UVwDUzV-2ZAs3-$=4387{k0;4)lcA8iHs zwHGcb0qyVznU8;0iVWZ7>%(^`!}qbE8NueDZX@M=Z0|<=A=sy4znYMgS$vqAE&$$Idgy`u!HVoI8<^U0g3tGR2ZEX zsajNH9*c=HV>vh(M?A*oGXN77G!FWS;4O7Z8TI-6v-N-5H{fgjM%Hi2$q6#gJeuooBFlCnJ^W_x%M`B|; z5I6yBo`mr|vbApHXZmzL_MI4ALk7_Y_cfOiyh2M#X=MBgEuRxVmVaals<Z>lngH~|4U&hoxKt}pGajWj}LW6 ze{8U5$_046%&Z1tCrj%&s$|moqJ_u*PdfU=y$-2qU1s0cO|U;d2i$6A(`jhkIDkcPP&a>jR?k6EF)oZf(Cn6O#uu();Oj6= zux42a@+XlnRK*Q(!E#-z1AX3+qX3dhD{|7`U@6aWAK2mn`B9+S9k?gLj=9+RnWM-Eq39#>&J_*Qxa002Q4lm2fm Y16NialP_=^0a%kua3%&vZvX%Q0Ah9Gga7~l diff --git a/BMA.EHR.Report.Service/Reports/27-คำสั่งให้โอนข้าราชการกรุงเทพมหานครสามัญ-2.trdp b/BMA.EHR.Report.Service/Reports/27-คำสั่งให้โอนข้าราชการกรุงเทพมหานครสามัญ-2.trdp index d22e0795c215949df60696df82b6371875fccccc..db274c354a6c5fbc972b6f0786e479bdda40ce0e 100644 GIT binary patch delta 2038 zcmV@6aWAK2mp*+Bv+kCP zu2i)T*s-16B*j^@moBUd+tp^d2&q6T zy#K~Or8CE4#~wS0lT9E&eu*--GskDXxt*C&&mFW)?gnzYhHce(Nht9gvYNJTSgktW zbFZDL^5<4Q{z%<_MIGC5x$h0#-LLaN*ZDoChjRR#*j6&hbDC?O_gB$R`Q zJ#^r%*#|M(FUu0qE!0&KDrHdiBD#iyCGvOA?%;odyi_Kk?=-Uq4fU(uKjnmRBCl9!I?sdD} z)+~M7zQc)G2|pmsA!V`VM?l;w&}WFKuMSYN=b{aN%|&;@hIIqm%6!b=VY70?@T;cL z!X0BBSy&V{B*I)aHIqhPGIZTU$-;vm*xK_?j^iz#)%qlcws!&n?JCx1AOH%5m2H2y zPq0fQNX%!h+4>=?`#LhsE)yAQK+?Ef`{tIVqXS$K&#l{LuWj|iII+>u$Vd{Vg~60a zEHoH@R0!}HscG^hL8(^b-(3=FK|~7t81!|l({`_Y6*-@O!8Ch0ORJ#(49E|*badnd zJ@HU(llEsbP9 zZAc^Hf+04O5v9zSC`BkGdr~fn)VeGR{4>r!?pVhNra(tv?2b}6~ z@(RpSX|u$vHe<|WL8_F;AGjz-t9aFM1EwtoB8e=ph&hAUVla!!&Lw5lnNwD)R3@fu z7c~*aj9s3w$dwD^76`e@%#kZelOxyAOwBoD30p1*TOh)g=bEr+g$C)t>&ER8H#K z%8^r+^2vMoIMD4!r^h69ecv$kOmW#F zTjalz*>2)6St`UERx7ibFfmi?pptY{fMmvM*(Rc7En88B95EyHg8$8Dip5cbfZv#0VPG!c*XFM!ZE9ab8KJvY{aPQ$IcZP%O2(Nwb z54aC;*Y`ZkEsJO#cY1;793wh^=|oY@)^9-W%DB_Yggqx?-#O-hE(zsQExBQ+Dz(vF z=Ls3n>9wL4aK(sR9|~jOdQw0BIovfmg6;*Ek;qi=FYan=_gXql_bU3)0`#NWfJPm$ z&rOq?x(b5VCWZ+7rOTb`7@+S0d4_q2Dr)`fO`ZRuxK;(Hh3t) z5}ap028tB~C&Ygk1W(O>VbPk3uOf9{HlLTT{|M?ntdK|S^OQV?pM{HWj$ISuqd5f! zH1l8}rvv&4JiL1t^PD{i9cGE=aV(>GHgW}{9~7gfMKpCYBqyRT;6wyoi&A$3hSp<& z%yW~i0CEw53@<07Rspm`6r+lXXWC-oopua3f$i8k{IAhQ5bs=Y+-_*=*#F=_Y zb6Q615=I#DEo~TBSks1)quwG3@)8L|Eg8R!p^9;#su)){h=N9J>?7ocMIdIk7q@Kc z&GC+=lNbL~F*!zmj6CACdIOo*p0<;Gv3}S=VFE`2*kTwVV&^ptTPT5GR_+UK+oaGj zwKLUGeWK5!;l2Urpw@p49u{QcDJI!()MF3+VH}HV-*6plxfS)3%j+Afd#jhZD_2&C z77*K4JYFvBHc{onb&6iX&xIP~-ThoB5_``7PV`B|5|qLc$d&&AP)h>@6aWAK2mp*+ zBv+I92;dHkTqIYWg>6rE2LJ#`LzCwTE+C9tBv*+1^m&y4006cC000vJ0000000000 U00000z6X;v3MB@h2mk;80I_M%!2kdN delta 2320 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