From fbc32c5693e69df7005abb3655863ffe1e8e3512 Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Mon, 10 Mar 2025 10:46:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8C=85=E5=A4=B4bug=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/WorkerAdmissionController.java | 19 ++---- .../modules/baotou/entity/UnitApplyData.java | 3 - .../xml/TestUnitDeclarationDataMapper.xml | 4 ++ .../baotou/mapper/xml/UnitApplyDataMapper.xml | 4 ++ .../IPartyConstructionMemberService.java | 15 +++++ .../service/IWorkerAdmissionService.java | 2 - .../PartyConstructionMemberServiceImpl.java | 48 ++++++++++++++ .../impl/QualitySuperviseServiceImpl.java | 2 +- .../WorkerAdmissionDetailServiceImpl.java | 2 +- .../impl/WorkerAdmissionServiceImpl.java | 62 ------------------ .../service/impl/WorkerInfoServiceImpl.java | 42 ++++++------ .../resources/excel/人员入场导入模板.xlsx | Bin 19001 -> 18994 bytes 12 files changed, 99 insertions(+), 104 deletions(-) diff --git a/src/main/java/com/zhgd/xmgl/modules/baotou/controller/WorkerAdmissionController.java b/src/main/java/com/zhgd/xmgl/modules/baotou/controller/WorkerAdmissionController.java index 0ebd5ca0f..a88d09814 100644 --- a/src/main/java/com/zhgd/xmgl/modules/baotou/controller/WorkerAdmissionController.java +++ b/src/main/java/com/zhgd/xmgl/modules/baotou/controller/WorkerAdmissionController.java @@ -617,17 +617,6 @@ public class WorkerAdmissionController { workerAdmissionService.exportZipWorkAdmissionTemplate(response, projectSn); } - @OperLog(operModul = "人员入场管理", operType = "", operDesc = "读取导入的人员入场excel模板数据") - @ApiOperation(value = "读取导入的人员入场excel模板数据", notes = "读取导入的人员入场excel模板数据") - @ApiImplicitParams({ - @ApiImplicitParam(name = "projectSn", value = "项目SN", paramType = "query", required = true, dataType = "String"), - @ApiImplicitParam(name = "excelFile", value = "导入文件", paramType = "query", required = true, dataType = "String"), - }) - @PostMapping(value = "/getUploadExcelWorkAdmissions") - public Result getUploadExcelWorkAdmissions(MultipartFile excelFile, String projectSn) { - return workerAdmissionService.getUploadExcelWorkAdmissions(excelFile, projectSn); - } - @OperLog(operModul = "人员入场管理", operType = "", operDesc = "读取导入的人员入场zip数据") @ApiOperation(value = "读取导入的人员入场zip数据", notes = "读取导入的人员入场zip数据") @ApiImplicitParams({ @@ -759,7 +748,7 @@ public class WorkerAdmissionController { detail.setProjectSn(projectSn); detail.setPersonType(NumberUtil.compare(detail.getPostWorkType(), 200) >= 0 ? 1 : 2); detail.setBirthday(idCardInfoMap.get("birthday")); - detail.setPhone(importInfo.get("*电话")); + detail.setPhone(importInfo.get("电话")); detail.setEpcCbs(enterpriseInfos.stream().filter(o -> o.getEnterpriseName().equals(importInfo.get("EPC承包商"))).findFirst().map(o -> o.getId()).orElse(null)); //项目组 资格证号 资质类型 发证机关 取证日期 截止日期 detail.setProjectGroup(Optional.ofNullable(groupMap.get(importInfo.get("*项目组"))).map(m -> Convert.toLong(m.getId())).orElse(null)); @@ -813,9 +802,9 @@ public class WorkerAdmissionController { if (StringUtils.isBlank(importInfo.get("*姓名"))) { throw new OpenAlertException("有姓名未填写"); } - if (StringUtils.isBlank(importInfo.get("*电话"))) { - throw new OpenAlertException("有电话未填写"); - } +// if (StringUtils.isBlank(importInfo.get("*电话"))) { +// throw new OpenAlertException("有电话未填写"); +// } //if (StringUtils.isBlank(importInfo.get("EPC承包商"))) { // throw new OpenAlertException("有EPC承包商未填写"); //} diff --git a/src/main/java/com/zhgd/xmgl/modules/baotou/entity/UnitApplyData.java b/src/main/java/com/zhgd/xmgl/modules/baotou/entity/UnitApplyData.java index 6f086a36f..dea29b047 100644 --- a/src/main/java/com/zhgd/xmgl/modules/baotou/entity/UnitApplyData.java +++ b/src/main/java/com/zhgd/xmgl/modules/baotou/entity/UnitApplyData.java @@ -114,7 +114,4 @@ public class UnitApplyData implements Serializable { @TableField(exist = false) @ApiModelProperty(value = "设计单位名称") private java.lang.String designUnitName; - @TableField(exist = false) - @ApiModelProperty(value = "勘察单位名称") - private java.lang.String explorationUnitName; } diff --git a/src/main/java/com/zhgd/xmgl/modules/baotou/mapper/xml/TestUnitDeclarationDataMapper.xml b/src/main/java/com/zhgd/xmgl/modules/baotou/mapper/xml/TestUnitDeclarationDataMapper.xml index 5e56c8eb1..2f878af56 100644 --- a/src/main/java/com/zhgd/xmgl/modules/baotou/mapper/xml/TestUnitDeclarationDataMapper.xml +++ b/src/main/java/com/zhgd/xmgl/modules/baotou/mapper/xml/TestUnitDeclarationDataMapper.xml @@ -5,8 +5,10 @@ select * from ( select t.* ,ei.enterprise_name as detect_unit_name + ,ei1.enterprise_name as exploration_unit_name from test_unit_declaration_data t left join enterprise_info ei on ei.id=t.detect_unit + left join enterprise_info ei1 on ei1.id=t.exploration_unit )t ${ew.customSqlSegment} @@ -14,8 +16,10 @@ select * from ( select t.* ,ei.enterprise_name as detect_unit_name + ,ei1.enterprise_name as exploration_unit_name from test_unit_declaration_data t left join enterprise_info ei on ei.id=t.detect_unit + left join enterprise_info ei1 on ei1.id=t.exploration_unit )t where t.id = #{id} diff --git a/src/main/java/com/zhgd/xmgl/modules/baotou/mapper/xml/UnitApplyDataMapper.xml b/src/main/java/com/zhgd/xmgl/modules/baotou/mapper/xml/UnitApplyDataMapper.xml index 05f5a48ba..106e239fd 100644 --- a/src/main/java/com/zhgd/xmgl/modules/baotou/mapper/xml/UnitApplyDataMapper.xml +++ b/src/main/java/com/zhgd/xmgl/modules/baotou/mapper/xml/UnitApplyDataMapper.xml @@ -9,12 +9,14 @@ ,ei1.enterprise_name as supervising_unit_name ,ei2.enterprise_name as epc_contractor_name ,ei3.enterprise_name as construction_unit_name + ,ei4.enterprise_name as design_unit_name from unit_apply_data t left join device_unit du on du.id = t.device_unit left join project_group pg on pg.id=t.project_group left join enterprise_info ei1 on ei1.id=t.supervising_unit left join enterprise_info ei2 on ei2.id=t.epc_contractor left join enterprise_info ei3 on ei3.id=t.construction_unit + left join enterprise_info ei4 on ei4.id=t.device_unit )t ${ew.customSqlSegment} @@ -26,12 +28,14 @@ ,ei1.enterprise_name as supervising_unit_name ,ei2.enterprise_name as epc_contractor_name ,ei3.enterprise_name as construction_unit_name + ,ei4.enterprise_name as design_unit_name from unit_apply_data t left join device_unit du on du.id = t.device_unit left join project_group pg on pg.id=t.project_group left join enterprise_info ei1 on ei1.id=t.supervising_unit left join enterprise_info ei2 on ei2.id=t.epc_contractor left join enterprise_info ei3 on ei3.id=t.construction_unit + left join enterprise_info ei4 on ei4.id=t.device_unit )t where t.id = #{id} diff --git a/src/main/java/com/zhgd/xmgl/modules/baotou/service/IPartyConstructionMemberService.java b/src/main/java/com/zhgd/xmgl/modules/baotou/service/IPartyConstructionMemberService.java index 0b909216a..5ce2432ac 100644 --- a/src/main/java/com/zhgd/xmgl/modules/baotou/service/IPartyConstructionMemberService.java +++ b/src/main/java/com/zhgd/xmgl/modules/baotou/service/IPartyConstructionMemberService.java @@ -4,6 +4,7 @@ import com.zhgd.xmgl.modules.baotou.entity.PartyConstructionMember; import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.core.metadata.IPage; import com.zhgd.xmgl.modules.baotou.entity.vo.PartyConstructionMemberStats; +import com.zhgd.xmgl.modules.worker.entity.WorkerInfo; import java.util.HashMap; import java.util.List; @@ -57,4 +58,18 @@ public interface IPartyConstructionMemberService extends IService param); + + /** + * 同步党员 + * + * @param workerInfo + */ + void syncMember(WorkerInfo workerInfo); + + /** + * 删除党员 + * + * @param workerInfo + */ + void deleteMember(WorkerInfo workerInfo); } diff --git a/src/main/java/com/zhgd/xmgl/modules/baotou/service/IWorkerAdmissionService.java b/src/main/java/com/zhgd/xmgl/modules/baotou/service/IWorkerAdmissionService.java index c5f4443d4..412760f0c 100644 --- a/src/main/java/com/zhgd/xmgl/modules/baotou/service/IWorkerAdmissionService.java +++ b/src/main/java/com/zhgd/xmgl/modules/baotou/service/IWorkerAdmissionService.java @@ -74,8 +74,6 @@ public interface IWorkerAdmissionService extends IService { void exportZipWorkAdmissionTemplate(HttpServletResponse response, String projectSn); - Result getUploadExcelWorkAdmissions(MultipartFile excelFile, String projectSn); - List getBatchByPaper(Map param); } diff --git a/src/main/java/com/zhgd/xmgl/modules/baotou/service/impl/PartyConstructionMemberServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/baotou/service/impl/PartyConstructionMemberServiceImpl.java index b75538f54..835769f50 100644 --- a/src/main/java/com/zhgd/xmgl/modules/baotou/service/impl/PartyConstructionMemberServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/baotou/service/impl/PartyConstructionMemberServiceImpl.java @@ -174,4 +174,52 @@ public class PartyConstructionMemberServiceImpl extends ServiceImpl members = this.list(new LambdaQueryWrapper() + .eq(PartyConstructionMember::getIdCard, info.getIdCard())); + if (CollUtil.isNotEmpty(members)) { + member = members.get(0); + } + if (member == null) { + member = new PartyConstructionMember(); + } + member.setWorkerInfoId(info.getId()); + member.setPartyConstructionOrganizationId(info.getBranchId()); + member.setSex(info.getSex()); + member.setPartyPosition(info.getPartyPosition()); + member.setNation(info.getNation()); + member.setEducationalBackground(info.getEducational()); + member.setNativePlace(info.getNativePlace()); + member.setPersonnelCategory(Optional.ofNullable(info.getPoliticsStatus()).map(m -> m == 2 ? "正式党员" : "预备党员").orElse(null)); + member.setIdCard(info.getIdCard()); + member.setPhoneNumber(info.getPhoneNumber()); + member.setProjectSn(info.getProjectSn()); + if (member.getId() != null) { + this.updateById(member); + } else { + this.save(member); + } + } else { + //删除党员 + this.remove(new LambdaQueryWrapper() + .eq(PartyConstructionMember::getIdCard, info.getIdCard()) + .eq(PartyConstructionMember::getProjectSn, info.getProjectSn()) + ); + } + + } + + @Override + public void deleteMember(WorkerInfo info) { + //删除党员 + this.remove(new LambdaQueryWrapper() + .eq(PartyConstructionMember::getIdCard, info.getIdCard()) + .eq(PartyConstructionMember::getProjectSn, info.getProjectSn()) + ); + } + } diff --git a/src/main/java/com/zhgd/xmgl/modules/baotou/service/impl/QualitySuperviseServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/baotou/service/impl/QualitySuperviseServiceImpl.java index f3aaccfce..a0ac80788 100644 --- a/src/main/java/com/zhgd/xmgl/modules/baotou/service/impl/QualitySuperviseServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/baotou/service/impl/QualitySuperviseServiceImpl.java @@ -189,7 +189,7 @@ public class QualitySuperviseServiceImpl extends ServiceImpl idCardMap = detailList.stream().collect(Collectors.toMap(WorkerAdmissionDetail::getIdCard, Function.identity(), (o1, o2) -> o1)); existDepartmentInfos.addAll(addDepartments); //党员身份证 - List partyIdCards = addWorkers.stream().filter(o -> o.getBranchId() != null && (o.getPoliticsStatus() != null && o.getPoliticsStatus() == 2 || o.getPoliticsStatus() == 3)).map(WorkerInfo::getIdCard).collect(Collectors.toList()); + List partyIdCards = addWorkers.stream().filter(o -> o.getBranchId() != null && (o.getPoliticsStatus() != null && (o.getPoliticsStatus() == 2 || o.getPoliticsStatus() == 3))).map(WorkerInfo::getIdCard).collect(Collectors.toList()); Map existIdCardMap = new HashMap<>(); if (CollUtil.isNotEmpty(partyIdCards)) { existIdCardMap = partyConstructionMemberService.list(new LambdaQueryWrapper() diff --git a/src/main/java/com/zhgd/xmgl/modules/baotou/service/impl/WorkerAdmissionServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/baotou/service/impl/WorkerAdmissionServiceImpl.java index cef1981b4..45151d2ed 100644 --- a/src/main/java/com/zhgd/xmgl/modules/baotou/service/impl/WorkerAdmissionServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/baotou/service/impl/WorkerAdmissionServiceImpl.java @@ -457,68 +457,6 @@ public class WorkerAdmissionServiceImpl extends ServiceImpl rtList = new ArrayList<>(); - try { - InputStream is = excelFile.getInputStream(); - List> list = ExcelUtils.jxlExlToList(is, 0); - list = list.stream().filter(o -> { - for (Map.Entry entry : o.entrySet()) { - if (StrUtil.isNotBlank(entry.getValue())) { - return true; - } - } - return false; - }).collect(Collectors.toList()); - if (list == null || list.size() == 0) { - throw new OpenAlertException(MessageUtil.get("excelNotDataErr")); - } - this.checkParams(list, projectSn); - List enterpriseInfos = projectEnterpriseService.queryPageList(new MapBuilder() - .put("projectSn", projectSn) - .put(Cts.PAGE_SIZE, -1) - .build()).getRecords(); - List deviceUnits = deviceUnitService.list(new LambdaQueryWrapper() - .eq(DeviceUnit::getProjectSn, projectSn).last(Cts.IGNORE_DATA_SCOPE_CONDITION)); - List workerTypeList = postWorkTypeService.list(new LambdaQueryWrapper() - .eq(PostWorkType::getProjectSn, projectSn)); - for (Map importInfo : list) { - WorkerAdmissionDetail detail = new WorkerAdmissionDetail(); - detail.setNum(importInfo.get("*编号")); - detail.setWorkerName(importInfo.get("*姓名")); - detail.setEnterpriseId(enterpriseInfos.stream().filter(o -> o.getEnterpriseName().equals(importInfo.get("单位"))).findFirst().map(EnterpriseInfo::getId).orElse(null)); - detail.setWorkAreaName(importInfo.get("*工作区域")); - detail.setPostWorkType(workerTypeList.stream().filter(o -> o.getPostWorkTypeName().equals(importInfo.get("*岗位(工种)"))).findFirst().map(o -> o.getId()).orElse(null)); - //detail.setTeam(""); - Map idCardInfoMap = IdCardUtils.getBirthdayAgeSex(importInfo.get("*身份证号")); - detail.setSex(MapUtils.getInteger(idCardInfoMap, "sex")); - detail.setAge(idCardInfoMap.get("age")); - detail.setIdCard(importInfo.get("*身份证号")); - detail.setEntryDeadline(importInfo.get("*计划截止时间")); - detail.setRemark(importInfo.get("备注")); - detail.setProjectSn(projectSn); - detail.setPersonType(NumberUtil.compare(detail.getPostWorkType(), 200) >= 0 ? 1 : 2); - detail.setBirthday(idCardInfoMap.get("birthday")); - detail.setPhone(importInfo.get("*电话")); - detail.setEpcCbs(enterpriseInfos.stream().filter(o -> o.getEnterpriseName().equals(importInfo.get("EPC承包商"))).findFirst().map(o -> o.getId()).orElse(null)); - rtList.add(detail); - } - result.setResult(rtList); - } catch (OpenAlertException e) { - log.error("error:", e); - rtMsg = e.getMessage(); - result.error500(rtMsg); - } catch (Exception e) { - log.error("error:", e); - rtMsg = MessageUtil.get("failErr"); - result.error500(rtMsg); - } - return result; - } - @Override public List getBatchByPaper(Map param) { return baseMapper.getBatchByPaper(param); diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerInfoServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerInfoServiceImpl.java index ff2b84d9a..177b5245c 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerInfoServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerInfoServiceImpl.java @@ -35,10 +35,7 @@ import com.zhgd.xmgl.modules.baotou.entity.DeviceUnit; import com.zhgd.xmgl.modules.baotou.entity.PartyConstructionOrganization; import com.zhgd.xmgl.modules.baotou.entity.ProjectGroup; import com.zhgd.xmgl.modules.baotou.entity.WorkerAdmissionDetail; -import com.zhgd.xmgl.modules.baotou.service.IDeviceUnitService; -import com.zhgd.xmgl.modules.baotou.service.IPartyConstructionOrganizationService; -import com.zhgd.xmgl.modules.baotou.service.IProjectGroupService; -import com.zhgd.xmgl.modules.baotou.service.IWorkerAdmissionDetailService; +import com.zhgd.xmgl.modules.baotou.service.*; import com.zhgd.xmgl.modules.basicdata.entity.Company; import com.zhgd.xmgl.modules.basicdata.entity.SystemUser; import com.zhgd.xmgl.modules.basicdata.enums.CompanyTypeEnum; @@ -316,6 +313,9 @@ public class WorkerInfoServiceImpl extends ServiceImpl() +// .eq(Project::getProjectSn, workerInfo.getProjectSn())); +// if (project == null) { +// throw new OpenAlertException("项目不存在"); +// } +// JSONObject param = new JSONObject(); +// String fieldAcquisitionUrl = workerInfo.getFieldAcquisitionUrl(); +// if (StrUtil.isBlank(fieldAcquisitionUrl)) { +// throw new OpenAlertException("fieldAcquisitionUrl不能为空"); +// } +// param.put("facePicBinaryData", Base64Util.convertFileToBase64(PathUtil.reviseSlash(basePath + "/" + fieldAcquisitionUrl))); +// return hikvisionCall.faceScore(project, param); +// } + @Override public Map selectProjectWorkerPageList(Map map) { Map resultMap = new HashMap<>(16); @@ -380,21 +395,6 @@ public class WorkerInfoServiceImpl extends ServiceImpl() -// .eq(Project::getProjectSn, workerInfo.getProjectSn())); -// if (project == null) { -// throw new OpenAlertException("项目不存在"); -// } -// JSONObject param = new JSONObject(); -// String fieldAcquisitionUrl = workerInfo.getFieldAcquisitionUrl(); -// if (StrUtil.isBlank(fieldAcquisitionUrl)) { -// throw new OpenAlertException("fieldAcquisitionUrl不能为空"); -// } -// param.put("facePicBinaryData", Base64Util.convertFileToBase64(PathUtil.reviseSlash(basePath + "/" + fieldAcquisitionUrl))); -// return hikvisionCall.faceScore(project, param); -// } - /** * 修改人员班组 * @@ -568,6 +568,7 @@ public class WorkerInfoServiceImpl extends ServiceImplm1O!H4Xb|b{mJpKFy95Q1l4ukdPOB z-gWO?_k8%T-`W4Y*Eyf|S^G350jraMm2w~~clkJS1t0)miBbbmB2ARKd5L@1(c7g5 zeKU(JG!&ON>3;0MD+{hj6Pvjfn3y9Ee;lhUmwT{D8M}@*wrBY&v_1PEx)kC*^$%z= zG!Ih{CUxK#WL&1@7tOGjPWnlh659vi?70&paplK@_8G51zg)?^TW!oUH zhaW~%Bhyni0$3mPE3$jm$))>>bs40JrDuwsgY}i-B+x~GXcCM4D#D@7Vf7JOzgh_B zn5G!3SJD_?yHS$L$7)M+iY}9Pn*Ah+>*`6|NeHU2%5k|U`#YahK-BvD3!b|VRWqxf zpXTwCJ=-QtgVlX{p4mEhUNlo)VLevST?`}YxvOe=JaEJDYOoo`> zsvFH_*YU@hZn;`Ik!buN1IuO9n)Npp#+^dn`-1l2r^GYtz3n}M1U7ukBnmaJziMnz zsQqZQH$0RWl=s8f6jR3bVlp;Kn9cH&2+%+Iy& z_oreHHTF=A=*-CRb2;;V%1zL2-`>uZckWM-iuIp1ildhZ>>W zI6W&^)|c#zjS`r1>FYxrwze|-Lj8Z~-;Kgbf%!K9_!ca{ki+>MT8o_g(zeBJ$OXxk z8QGc}mODX6uG@?6;!!W<$VKW(Qx&adpQmuh;exY6L)?(fDUqp>i=LIk3`9|mJ@EGR znrD(`Vn@n7^Z9InjVwO0Ox$wL>JpAl%DEQlNmoU~#HgqCOpbmj(Ff+%IdLMgngpB} zlXq>NBoX3iE1#_lj^veLgrSQGte7C?GrwLp3lc`)6clP5+cq9i6GNVOsCAC6uUW1m zMk@0T>4S{ia#As#iZRH*-3GZVcLhmKrIIf>T2N);dOp#zj4bKkroW+X082BEaRIUj z(?>)*@En$fyuBgS|HPdEjb7&!)5_jN))&iXkS2>ZL|+TPBDgUs>-G`yeyQ5$l(+$| z`{9FIG{S!U%tj~@kN7N!I@+d&Q{*4sM9TD6P3p+>JuH7qY3^=cjUHweGL0AI-xnyC zp48=NS+fe~#*XHzj0{JCMOiN)z{g7u8?xlE$kq@lGsy9TpZfal0{PN{?tJn^&lE?M zNNwcl5HbOR6PNJd-s}X0;1YhFVELNCpC#fqI`8)eFGbR9RIEybKqZMsKf|dzhT=;s z@F9zJv?d@{u6V=3+HEpius>U=B0SWKX~21Gns zmv%30ltH_X@Qt2~fK-RTcm7<&r?@vs$eIYM?FdEED&aWY0fx0Wf-_}zPHV!$ZA>n* znOKlKcWEYif}!p@d*IGilNMkQz3xE}9?gJ6oa504yYBcw8pIxQ+{_NQDR9OGe_!)9 zL5q;pI*9KRL8T3`4mkP&R|(2fo}EM~kOf_VQznm{&HxJo2^6#CG83}FiP2LMnoWx} zXIL>VTymN+4ts+*Cltp>OA8)}{`YyY-u`f2ZB3(KuhSp_!>8k_T8u+SW8K2h~^qB}mvRTq7sH~|<|H+x6*Y!??B;D`3evHkE z^&H8Nu@H`FlBUm8hv-Nto`6Qr^UKRiy78_G$&Ak(c&iI+1mqGve&<^!8^i0}+qv+K z81UlLM;zU57cNS$x+oc1B<-4HTZ1oAz?ECmONV{gGWf>E?sg|iZaTTHoN5_;s_V2J zM>5Biq~5*I=!xUmep%=K;;zoRVOEYZ%tNfHN`vjJclTzz`vsCVN77d$sAFXaFO>?v zE<#1-C+EUzhn29q;-Ze{nX)kYNt>R>g|8i!m~lV*4_45wwDD1oDq?3rnnNphFsOe% zb*8FmWAz^Bu61n15F?~E!TPe1!{yPCaYQ)8R!!di3Sp_z*%cqXe-HeQ1pH}I!~g&Q z6A-St1;2+wY7DXc>5-|IFMiWJbgM-I0N{`9<-qgC*38w)Qp3&F&dKHtx0j>CuC9{v zmNxO4&H)l`{3ThG$x+Cj!<4kpT0Hs(#zc=wLa;)WfPM22Q$j~*s9Y927>gcm`u1!H zwE+G-BK~u!?01-P;-K=Y+;lC^Cpep@H)Gp5zJ8y>P8aErn^xmWe9&-)M3Xdsenu}D zJBez7MAEx19?5b4yVi|&$$7N|hH>%*CRZ9sVKzbIl9z+kTbp%>M`S6)R=aW)Iyojp z-Oqn1SR#_1UK%h_LZG+8P5&h86qvt$ZcKz=ZaKQMw*LANMvbcwY$H((We?a4FA28M z!oF*RN+9u(XnwA28_^es==X{D7cIElm$)|Q&K)p1y*L^1$zGGYF6#S{vvIVzF$B}@ z^Zq4;;`q}qN}V4#+d^#G@0@~HOP~^L-Sq54*@0^}aK#OdT%Gh4f6<06vf)FQ+_C$| zsp%LAZT@sCVtT)mk^z*y35zbNa4g>MO9v^mX?C2*5yxy?A^CkZ?&e_u1b(DZqeU-7 z!2ATt7L;rJtYna{Xsfbaq_y1j9cy=X`zYGVoLUGQAdcP7DTy!}0L$UPj)F_Q| zgI_k%{`BoUMsEBsQ|g|0Qvs(|#m>X1Y1U&aJBeeNe1C9roLp`$%^l5Q>EVpJyD|@M zvzxt9(Td^xn(aklgpiLa#NOar^}dXqWaN%?EOxMdqqO`y0Vt{;(|&gvb0~&mASSPb zA?r)FoEmuwZ|zd&L?@WS%$2{(u;vJFE0hKaAtbKlcjFZ~V$QQMC-ueRm=3)X?km?J zoDudQB%XU*=@Lm`8F36=Zim-;lmYG}q$ZA;%3hIAHcP4TPYlq^(I~gq9$54Q(|R0F zbH%WEdefaOXjapK4c3lVSkFgs=0(ZV{xvz6r~jnpP0=FgiE3!R)1FFP5R?Zc31 zMm@7JD)H zjiq#n;s`2I9(j}ZnICpBbe>N!Lfj|Zv`4BH)RWzz zoHbZ?LM3k|w3@W<*;L-zWspmAqwg9?;B`)vk70UjtHNaFH{D$>oC<6jGG=A{$_5%N z>FioC+BQf{0(j3a+F3yNfEqGhu}4^0Dne7X*Z@EW%0R#aw4GivE#L)0o&^S1rxDi; z+lqgSvC!)jVx|i^UDBqr<2%~g)a93-`tC$FC?4UYTiE7p*@c4B;CC`9Zng})A3E?b zD90OAce`4R`D7sUt(ih^^}20sbv=d?E^G0o`iEG#`!?^vKKcBsP+taFOwMmvMyvL< z`sKxj&cc~oD#t{Ss~?Z9*=IaF%g2vnxWD>QyfUp+fHb zghlGyL@8c*@r-oto)Ax6NRY)2SG9TqER-10Mxc%+A}#;&QPdOWWQB1uFC}Vy*(&G`PP2CIy)cjn`@2=Fs!^(&VGMXn`ChtvLeX)_# z>otzn89W+{P#U#JpJK;#S>|nwkRob3+tlvKz$Fg=mDEHi=h9*z#B5GT6j$km7bw6Y zLa;^UNwgwwpT&(X#z~r|7Z^04he4*~8Zcb7d#q2i z`iN6t7zMXK9o|>1UNOk$uu@*~K?o8dk`?u{!w{#$-pgS0i(2wQl)PPl4(|4SYvdbK zAJH{mL{og*{ush8hQI6kRGOmahEw9n23koeF`dA^10GiN1-qir{BQ~Hy!WV}tU<@; z)cDCcftcf}x-x?CHcvYn3@f(F!I?keow0V)U@1BxW z$`e7E!kD2IWKor!{4cSCm6C!3OtRE9y={`9Ga8!c7~&BnPu7X|KGqUpvRg;0UxQKE zS=yI*7^w(E=|Cqv*71eql-~U`MYhC;CU7{jRwC5#wXQnz$0cC+uBLi^DS9dOJY0#5 zd3T0LIED$KYMo=HINNE*m5u~TrPo@%9wgqIvLDnubjOqJihuyOZt|5T(uMW~}_;7iV>^dN>Qbw7CZ{|F(EMbov z%NcV0H<-`(nbg>q$){7?FrY+xZL%IMO~@_6KW=snSqMa;OJE3vauq{Z3q&XVAZx=N z{}8oewfiNz1<^Ib!S&~E^Ze|#QLGjp}xe`TzOuF(regVR$dl8 z0ND?%lt-$uXfHuN?G;?AxssB|YY54FNTgLacnpmZ2Q8k~?^kc(eno)yd8e}l|3m@< z&Uy$ku0Be}b?pAm?fQ0)4|t#_0|^kZF&APHbeK;RxP)d!7FtUaZLNah*sDoCrOg8*enbUM$%wsofQp%ZqF&6vN+m*OLXg3Hlm5*%DdF?!h=^W{B)ptMlQv2Jv^;6+P2hLlu$>(w zf*}ln_N@9`UiIG3rWe`55NDn=KXGrns|v9wt9waEAX%clRU(3 zHg2i?mH|#-N=zw$ zZ$B8`&eSYcrUknY%2CCMD70(pns$~gQiDGlD=chuasidE@DjZ{ihRN<%`V>!jaq#) zrgzwgkZKtU-)7KG?0Mv5O8)vh{eYzFZSSX{UWZa0Oe)ewC|Tp5Jl!38L*$NYWum2a zaxbSJ)giy`LvW-kM;wx=SwSGo>1vh=4Oc1EArjsIi_TEO#9UiId{~Eg*D~bj!m-hd znx7t$tcAF(HCm+>DhFm822{Rdn?3rSAG^hnx=j+OyF+4%5ZEvmp5+L|i(aH8tNHiX zxqlP88S396-znvwnc33iRm^VsFAOfwp3TBA`g$NIOt57Jk>A__LTCkaUwo#U_P}Wf z1EzlGy!i;zED$*?J{acb^%LVa&f{_WXvx)6L4DtwCUrY)vC*jFj4z61bBkp&wN5t9 zFPycK?SI-3P<*p%KW5ZxUfR1X<@!hxu!T?SWaYR_U%$!dYi#LIbnEC^&ZW+pe=YBe zH3PXfXJnH6^=;$i9#}IezJ&&?N7YKf(T2nU092d|DGDM@2|PiuOQZhJk5I3)8n6mQ zDg(#BLH|1jpdhl;C~p}EkQ5amBMcNrwaai({r_>{VPXIP0Z$&Z8HIshrTU-uUkw1j z`(r+=e|;EA0U-)RqCyeEz+zN00uIDR-6Ea=IZ-0A^wj_RX#xO{|6BIoI$d`vFN%g7Q2dJlwzN z^ML*Mf3f2M?+8)n@-iSr;=d7P1s;$i>0eBIKpFDCxbT2flz)*{kpvtp_2+*70j;7L AXaE2J delta 4958 zcmY+IWmFVgyM|{5kdhb}5J4DPx+RqEX6P=Flm=-Snt`DQkPvC%ukZQ3bCK(ufz?EwMu zm=o0{reD%;zf{SXsBrC4>g`cL&DZT26CZcHgUf8wKia^p^jp3 zDMYF?URTQ1 z?(`BO!{@%YXgFZ;sFfmo)`W=tu4lQHS@%mK_AB=kZ{#zS6pXV=B z65-sh=al!u8F8SoFJ{Qz4;*Yi&MWbi-Q-|hOHCAdZ13Ao5a@EJ;7DwxL%tn)!|$~m zKai>^|{{q#3#|BU7p?LC%;2wvV^wi;R=?#hcf|FNkAM5ECvpmBq9VyD0xb)N@4JDKV zzQ?qywfV<$c)ABP-glpY@x=yNcH`%BJ-T&I2)~@1(+C4;9@H}(-}iZBdVD0^lJ*dM z@5w=_N<|XQWodBZhF)T#z-Y^}W`nBtqC)h7Pp3CU9+b|*gVdPneLpw z>)r|?{9GhRRUnr}=A(6#sAiG;x->-HUcSI>J0qZUgf$=Q&Fbczh5Yr@;dP6&oIxrN z-ON=)Fcrcwd#TPjXP4uZJ2L?qoU(tBz8{pnH^?IQYIGtLV-O-6pKv zR7`V}8U6s4>>99*X z!l`;`9|NbVD2X|ixv=d1Xb$YAKss#Ojfac6-J)+jDz5xxbvglNMir4!^p}Am1#Amo!fF ze&;c?bRd#aJNar#9!mw zJuI@5aSE#GagI@&v-GkSbs8K19|#@Jj;Y@|;0!x`t~xAbot-@3y*_hnH&M-gztD{zQ!J zyZxeLR|NCE%G(^BLRguF`QjjfLN0ff@#rk50dD@?2Z-oDcSKhvgd^zN8^lcEZ$=b> zrqqY^=A#QK>g76@k4ESlv~~lX_!s*nH!X@XrZpX#7V0V%6ZEQhCg!UI$YqcuJf$N1 z1=oJpLu4C{Ctq{TXMbdEd!Lu`InG_yZ!cDT;)Au$I+H-Vh_sWVFnbuI<*KS$YJx6` zSJG!Ym^k>&q1?ev>jq}|M_(pDk#?ieukAbkb-!w#p4caF;=< zJHX5T^!t9_p$?;`Hc)J;@4Wz>jCxN9vh&qW9o<&O3)m}q=QYLJX;wV zI_in~Ap_IE!G!<-00ID7i71+hR9YqKl=k+b8U_OZ5C96OL=FFLGU>glOx|72wJ*Ds zQObqPFKtPOG{n`OcEzm&5w%!@2+!26%=Pu=zSu|E(D6HTwu!(2z8{z#6N&?&55lvY z^{IVU`|QR3I_+|m97mznCr3w39fkp~ufRkdRtaDU@~p1@OO!+(n>uo(EWBx#D(oz9 zWoIAnWzA_B8yqgc6K}Pmqf7nzO!{VmWjq1-S-sKNL^op&`o%raOX=>}_lGNnx~mf& zE2^XQ2cJh9&8?CU*KC1GkWAS0)#TEWzW*pR6?gt=fRPkhaG^F3&b>=(fXUMmJoLmJCcH~OpI$~FT21AgiVQlaio|5a%B6ZgZ&$s!e8 zk@{QT?{8sZeR~R2(2SyRNV2Bv$(4M63H%NzaPkI$>kbGIP9Zuxf~scysgFuu&Y@9DYyvcdUNk*gP5Lq54Q3PN`- z%*if!MB#}@$@_1vMc29<79Hp7;VEma z`IuF7UCGhlrGEzlv?zG0!=5ra$u0d!2X1O?S)Ns87i5bq)8Ap1n0)bblD(j_ zX2!=G_W8|At%vFtgscoM2IL>#)5~|nlEWmGVcZ4EFb4}c2V5ztm709X$o_`tqB+u7 zQqeI26bk$!*WQEt;jSm5urRYIYRs0OREiRfMVjZZ5BdqXmn0OnyhRo^fa4}Lq8Sx- z;Ud^;yy9kayv-AETawxLM$j*EW`-%+UU*Ncr?A8@AyJ*I816y1c^mk?%7TCn*>qb8o$tX9J3qEfn?Q8c1?=Nn zS>N5Za1VsF6V&F(#_=Y(m%WM@B2bz5MKrq3ydlmgteddagcE%vs4Z*S+JQ9+a4g@s zW7xUAH?ghRidCVdD1cR<7?PeW@5fDGW3$H+g_7g@5fS5dhGL(iZju3BN`U3kQJU0&;Sunna)Nn;3$I-_|VW zrl<7!yH%$&(fA#D^4w?L3Tj2JGboDH=zfzFvSo*jC3}Y) z{PpAeylj|;pzawiD^U zKUmyLb|VF4s|I~KAipA863jK~kOL4KbUq0kr|DoBh*jWxgScT)Hz|)|Yj2@>(4TI0 z$%xIyb#HQDEK&xaOthHb*T_5Q!-PKxq1~J&sNCWmmgw=Wie0jtXPA{@Es?mUpLq4w zo56RNmEez$i|meT<59RmIh4^WD%qocYg9_Cp;ihX_-cy`>CCh$l@fTzrWTvTB&~D$ThZM*qI$RzZlxT2&+WeD_cjJaj&P(y6tsiJN==)D zQPFnJ>{?dl!so=+$#nzF%vQePO(B_KV?Q}H;c!e#j&rwWQiZQ9+jdS%C|zbE^lrL$ zX^|zV3XaQXpeunK*|V9cJH7-umL&rXN6`%j3ZP~1XC@O6i z2G1C%3?Q3m_N@y8eMLWnSr>vM*kh_Qcu2`&Z=f1n9k7Fq%kjzM;YcqJt{ z+hZ#}{t6+Gs$-Sb{6Idd;7%eY&{f<>B?;eFeMMx#N=TL7PmwuKtc116;lR6n%H(?Z zwK=Q0gw?6GIjbV07zXuIJraH!m=Q)p(2AU)QDfTL)q&Gd&vOpet|+;HE=)W za`>w7l}V;hD(u0&O6A4%fx+uQiYe~q^8R`2Ldv1E+;eCjnX#JLI9 z8Fq-O=do{oUDOugu=FSjFKK|D%mQwc2;i#ta)0-0BCY}`sHC1(yFf+;eojg?78P$l zkTr=*MU0!m5OOwDvQ-}zc-ZG*Cj^UOCjJ(ZEEcEeJq5qH@;$%Y5Cm>(D3XTJJ6cUG zK&>NF7rs$4IT`&*vl(?9;=GXp;#4FZQ zBUt9Vw+k=HDHn$yzufZpns;^m?0Dtd)5iu~932NS8xmTM(0q%K%eZWij9iIo+urT5 z2sy+$Z!$7tvs5{}9`Q-bdx1nqe2Bs(6baXrd6_{XN{T$n&)l)h%ucl6w+E^1UPwft zv*O??4iO&a5C69UY0YUS^g%dLw!HT*=Cpoh5S-mvGW~;0LB6!Ms)=TAV!VRT#rpNG zj?SBuFtN~6o8y@cLS7_s3|$5JFXE<(LVY=-w$Pws3~J%(W_b1B6)IXhodp!w zNH{o=uB{DL^^KgXUr&_B$mYRFd~w!f>`==4Aswka5+o-Lp;yyNHtI+t29LTcand$* zJ2RSuVTz(R+L}HGU$e@XfKC)zxnz;GP1S!VnPadzM4ay_o0{bEomk+#f=VkUSCfe< zi-|WuF%7n9)!u1&x4BrQx?v?gd~P)dxS{Dp|9k^q)U7$hvpc)ip!SEzc7XZbahW%^ zG>FX>$GuRY)(g!t!cC59_*$3}scZA0En92oHuThJ?WyP-cQgsoA_=)(!}bO0u|xmEaYpj1in+W`QewS4i_8*XIPb)9*C4%Zfsn41fzQ$h*4Y6@=9gPx zj znaytBVlmr+X>@PXezlG@x2WbvZ?pVlgFU%KCZ%4k+eLNW;HT1}*QG{rf!(NDd0F5L zYENDm_y@(Tfcih*KHUm1UaP~iump?}fz7LiPUu~3B{*ovA~Q3h!c-5OLVUR8b& z{oTLlbBpt2f3f`*Nhto}%`KWi{-Tl^KPZ&?FCuTzfaWjGsPO~2Q9yO>JMr@WZ0~;n DiZMYB