From fc68c2f4f89717137d3332f1da025552dc748353 Mon Sep 17 00:00:00 2001 From: wxc <191104855@qq.com> Date: Wed, 14 May 2025 18:24:09 +0800 Subject: [PATCH] =?UTF-8?q?fit:=20=E6=A0=B8=E6=9F=A5=E5=8A=9E=E7=90=86?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BF=A1=E8=AE=BF=E7=9B=B8=E5=85=B3=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E3=80=82=20fit:=20=E6=B5=8B=E9=85=92=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1-=E5=8F=91=E5=B8=83=E4=BB=BB=E5=8A=A1-=E6=96=B0?= =?UTF-8?q?=E5=A2=9Eexcel=E5=AF=BC=E5=85=A5=E4=BA=BA=E5=91=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/20250513.sql | 9 +++ .../TaskProblemController.java | 6 ++ .../TestingAlcoholController.java | 59 ++++++++++++++++-- .../flow/action/ApplyCompletionAction.java | 6 +- .../supervision/flow/action/SaveAction.java | 5 +- .../supervision/pojo/domain/NegativeVo.java | 8 +++ .../dto/TestingAlcoholPeopleImportDto.java | 26 ++++++++ .../supervision/pojo/dto/flow/VerifyData.java | 14 ++++- .../supervision/pojo/entity/Negative.java | 8 +++ .../pojo/param/TaskQueryParam.java | 2 + .../TaskTestingAlcoholPeopleQueryParam.java | 4 ++ .../supervision/service/RpcApplyService.java | 6 +- .../supervision/service/SupDepartService.java | 6 +- .../supervision/service/SupTaskService.java | 1 + .../SupTaskTestingAlcoholPeopleService.java | 4 ++ .../测酒任务被测人员模板.xlsx | Bin 0 -> 8979 bytes 16 files changed, 151 insertions(+), 13 deletions(-) create mode 100644 sql/20250513.sql create mode 100644 src/main/java/com/biutag/supervision/pojo/dto/TestingAlcoholPeopleImportDto.java create mode 100644 src/main/resources/static/templates/测酒任务被测人员模板.xlsx diff --git a/sql/20250513.sql b/sql/20250513.sql new file mode 100644 index 0000000..ef7dfc9 --- /dev/null +++ b/sql/20250513.sql @@ -0,0 +1,9 @@ +ALTER TABLE `negative`.`negative` + ADD COLUMN `resolve_status` varchar(255) NULL COMMENT '当前状态(信访)' AFTER `resolve_situation`, +ADD COLUMN `visiting_leader_name` varchar(255) NULL COMMENT '接访领导姓名' AFTER `resolve_status`, +ADD COLUMN `visiting_leader_emp_no` int NULL COMMENT '接访领导警号' AFTER `visiting_leader_name`; + +INSERT INTO `negative`.`sup_dict_data`(`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (0, '信访中', '信访中', 'resolveStatus', '', '', '0', '0', '', '2025-05-13 16:22:32', '', '2025-05-13 16:22:32', ''); +INSERT INTO `negative`.`sup_dict_data`(`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (0, '终结后仍信访', '终结后仍信访', 'resolveStatus', '', '', '0', '0', '', '2025-05-13 16:22:38', '', '2025-05-13 16:22:38', ''); +INSERT INTO `negative`.`sup_dict_data`(`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (0, '停访息诉仍信访', '停访息诉仍信访', 'resolveStatus', '', '', '0', '0', '', '2025-05-13 16:22:46', '', '2025-05-13 16:22:46', ''); +INSERT INTO `negative`.`sup_dict_data`(`dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (0, '已化解', '已化解', 'resolveStatus', '', '', '0', '0', '', '2025-05-13 16:22:53', '', '2025-05-13 16:22:53', ''); diff --git a/src/main/java/com/biutag/supervision/controller/mobileSupervision/TaskProblemController.java b/src/main/java/com/biutag/supervision/controller/mobileSupervision/TaskProblemController.java index 0bdc6e6..7d78476 100644 --- a/src/main/java/com/biutag/supervision/controller/mobileSupervision/TaskProblemController.java +++ b/src/main/java/com/biutag/supervision/controller/mobileSupervision/TaskProblemController.java @@ -10,6 +10,7 @@ import com.biutag.supervision.pojo.param.TaskProblemQueryParam; import com.biutag.supervision.service.SupTaskProblemService; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -37,4 +38,9 @@ public class TaskProblemController { return Result.success(page); } + @GetMapping("{id}") + public Result get(@PathVariable Integer id) { + return Result.success(taskProblemService.getById(id)); + } + } diff --git a/src/main/java/com/biutag/supervision/controller/mobileSupervision/TestingAlcoholController.java b/src/main/java/com/biutag/supervision/controller/mobileSupervision/TestingAlcoholController.java index a66fe23..00be663 100644 --- a/src/main/java/com/biutag/supervision/controller/mobileSupervision/TestingAlcoholController.java +++ b/src/main/java/com/biutag/supervision/controller/mobileSupervision/TestingAlcoholController.java @@ -1,14 +1,20 @@ package com.biutag.supervision.controller.mobileSupervision; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelReader; +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.read.listener.ReadListener; +import com.alibaba.excel.read.metadata.ReadSheet; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.biutag.supervision.constants.enums.TaskStatusEnum; import com.biutag.supervision.pojo.Result; -import com.biutag.supervision.pojo.dto.TaskTestingAlcoholDto; -import com.biutag.supervision.pojo.dto.TaskTestingAlcoholPeopleDto; -import com.biutag.supervision.pojo.dto.TestingAlcoholFilter; +import com.biutag.supervision.pojo.dto.*; +import com.biutag.supervision.pojo.entity.SupDepart; import com.biutag.supervision.pojo.entity.SupPolice; import com.biutag.supervision.pojo.entity.SupTask; import com.biutag.supervision.pojo.entity.SupTaskTestingAlcoholPeople; @@ -19,14 +25,20 @@ import com.biutag.supervision.pojo.vo.TaskTestingAlcoholPeopleVo; import com.biutag.supervision.pojo.vo.TaskTestingAlcoholVo; import com.biutag.supervision.service.*; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; +import java.util.ArrayList; import java.util.List; +import java.util.Objects; /** * @author wxc * @date 2025/3/31 */ +@Slf4j @RequiredArgsConstructor @RestController @RequestMapping("task/testingAlcohol") @@ -87,6 +99,45 @@ public class TestingAlcoholController { return Result.success(taskTestingAlcoholService.save(dto)); } - + @PostMapping("importPeople") + public Result> importPeople(@RequestPart("file") MultipartFile file) throws IOException { + log.info("文件导入中------------------------------"); + String fileNameType = FileUtil.extName(file.getOriginalFilename()); + if (!"xls".equals(fileNameType) && !"xlsx".equals(fileNameType)) { + throw new RuntimeException("仅支持 xls/xlsx 格式文件的导入"); + } + List list = new ArrayList<>(); + ExcelReader excelReader = EasyExcel.read(file.getInputStream(), TestingAlcoholPeopleImportDto.class, new ReadListener() { + + @Override + public void invoke(TestingAlcoholPeopleImportDto data, AnalysisContext analysisContext) { + if (StrUtil.isBlank(data.getEmpNo()) && StrUtil.isBlank(data.getIdCode())) { + throw new RuntimeException(String.format("%s 警号和身份证都为空,请确保警号、身份证其中一项不为空", data.getName())); + } + SupPolice police; + if (StrUtil.isNotBlank(data.getIdCode())) { + police = policeService.getByIdCode(data.getIdCode()); + } else { + police = policeService.getByEmpNo(data.getEmpNo()); + } + if (Objects.isNull(police)) { + throw new RuntimeException(String.format("%s 系统未找到该警员数据,请删除后重试", data.getName())); + } + SupTaskTestingAlcoholPeople people = new SupTaskTestingAlcoholPeople(); + people.setName(police.getName()); + people.setEmpNo(police.getEmpNo()); + people.setIdCode(police.getIdCode()); + people.setDepartId(police.getOrgId()); + list.add(people); + } + @Override + public void doAfterAllAnalysed(AnalysisContext analysisContext) { + } + }).build(); + ReadSheet sheet = EasyExcel.readSheet(0).build(); + excelReader.read(sheet); + excelReader.close(); + return Result.success(list); + } } diff --git a/src/main/java/com/biutag/supervision/flow/action/ApplyCompletionAction.java b/src/main/java/com/biutag/supervision/flow/action/ApplyCompletionAction.java index ada632f..e61c111 100644 --- a/src/main/java/com/biutag/supervision/flow/action/ApplyCompletionAction.java +++ b/src/main/java/com/biutag/supervision/flow/action/ApplyCompletionAction.java @@ -88,7 +88,11 @@ public class ApplyCompletionAction implements Action { .set(Negative::getRectifyDesc, verifyData.getRectifyDesc()) .set(Negative::getInvolveDepartId, verifyData.getInvolveDepartId()) .set(Negative::getUnrectifyReason, verifyData.getUnrectifyReason()) - .set(Negative::getInvolveDepartName, departService.getById(verifyData.getInvolveDepartId()).getShortName()); + .set(Negative::getInvolveDepartName, departService.getById(verifyData.getInvolveDepartId()).getShortName()) + .set(Negative::getResolveSituation, verifyData.getResolveSituation()) + .set(Negative::getResolveStatus, verifyData.getResolveStatus()) + .set(Negative::getVisitingLeaderName, verifyData.getVisitingLeaderName()) + .set(Negative::getVisitingLeaderEmpNo, verifyData.getVisitingLeaderEmpNo()); // 经办人 if (CollectionUtil.isNotEmpty(verifyData.getHandlePolices().stream().filter(item -> StrUtil.isNotBlank(item.getName())).toList())) { updateWrapper.set(Negative::getHandlePolices, JSON.toJSONString(verifyData.getHandlePolices())); diff --git a/src/main/java/com/biutag/supervision/flow/action/SaveAction.java b/src/main/java/com/biutag/supervision/flow/action/SaveAction.java index 8107af2..745ef43 100644 --- a/src/main/java/com/biutag/supervision/flow/action/SaveAction.java +++ b/src/main/java/com/biutag/supervision/flow/action/SaveAction.java @@ -60,7 +60,10 @@ public class SaveAction implements Action { .set(Negative::getRectifyDesc, verifyData.getRectifyDesc()) .set(Negative::getUnrectifyReason, verifyData.getUnrectifyReason()) .set(Negative::getCheckStatusName, verifyData.getCheckStatusName()) - .set(Negative::getResolveSituation, verifyData.getResolveSituation()); + .set(Negative::getResolveSituation, verifyData.getResolveSituation()) + .set(Negative::getResolveStatus, verifyData.getResolveStatus()) + .set(Negative::getVisitingLeaderName, verifyData.getVisitingLeaderName()) + .set(Negative::getVisitingLeaderEmpNo, verifyData.getVisitingLeaderEmpNo()); // 经办人 if (CollectionUtil.isNotEmpty(verifyData.getHandlePolices().stream().filter(item -> StrUtil.isNotBlank(item.getName())).toList())) { updateWrapper.set(Negative::getHandlePolices, JSON.toJSONString(verifyData.getHandlePolices())); diff --git a/src/main/java/com/biutag/supervision/pojo/domain/NegativeVo.java b/src/main/java/com/biutag/supervision/pojo/domain/NegativeVo.java index bc8c251..ddda479 100644 --- a/src/main/java/com/biutag/supervision/pojo/domain/NegativeVo.java +++ b/src/main/java/com/biutag/supervision/pojo/domain/NegativeVo.java @@ -212,6 +212,14 @@ public class NegativeVo { // 化解情况 private String resolveSituation; + // 当前状态 + private String resolveStatus; + + // 接访领导 + private String visitingLeaderName; + + private String visitingLeaderEmpNo; + // 下发选择的问题类型 private List problems = new ArrayList<>(); diff --git a/src/main/java/com/biutag/supervision/pojo/dto/TestingAlcoholPeopleImportDto.java b/src/main/java/com/biutag/supervision/pojo/dto/TestingAlcoholPeopleImportDto.java new file mode 100644 index 0000000..7a9d1ea --- /dev/null +++ b/src/main/java/com/biutag/supervision/pojo/dto/TestingAlcoholPeopleImportDto.java @@ -0,0 +1,26 @@ +package com.biutag.supervision.pojo.dto; + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + * @author wxc + * @date 2025/5/14 + */ +@Setter +@Getter +public class TestingAlcoholPeopleImportDto { + + @ExcelProperty("姓名") + private String name; + + // 警号 + @ExcelProperty("警号") + private String empNo; + + // 身份证 + @ExcelProperty("身份证") + private String idCode; + +} diff --git a/src/main/java/com/biutag/supervision/pojo/dto/flow/VerifyData.java b/src/main/java/com/biutag/supervision/pojo/dto/flow/VerifyData.java index 180c059..37a6724 100644 --- a/src/main/java/com/biutag/supervision/pojo/dto/flow/VerifyData.java +++ b/src/main/java/com/biutag/supervision/pojo/dto/flow/VerifyData.java @@ -54,9 +54,6 @@ public class VerifyData { // 未整改原因 private String unrectifyReason; - // 化解情况 - private String resolveSituation; - // 核查时间 private LocalDateTime verificationTime; @@ -70,6 +67,17 @@ public class VerifyData { // 经办人 private List handlePolices; + // 化解情况 + private String resolveSituation; + + // 当前状态 + private String resolveStatus; + + // 接访领导 + private String visitingLeaderName; + + private String visitingLeaderEmpNo; + @Setter @Getter public static class Blame { diff --git a/src/main/java/com/biutag/supervision/pojo/entity/Negative.java b/src/main/java/com/biutag/supervision/pojo/entity/Negative.java index 3fdc6dc..b322820 100644 --- a/src/main/java/com/biutag/supervision/pojo/entity/Negative.java +++ b/src/main/java/com/biutag/supervision/pojo/entity/Negative.java @@ -314,4 +314,12 @@ public class Negative { // 化解情况 private String resolveSituation; + // 当前状态 + private String resolveStatus; + + // 接访领导 + private String visitingLeaderName; + + private String visitingLeaderEmpNo; + } \ No newline at end of file diff --git a/src/main/java/com/biutag/supervision/pojo/param/TaskQueryParam.java b/src/main/java/com/biutag/supervision/pojo/param/TaskQueryParam.java index 1acfe5b..2dc1095 100644 --- a/src/main/java/com/biutag/supervision/pojo/param/TaskQueryParam.java +++ b/src/main/java/com/biutag/supervision/pojo/param/TaskQueryParam.java @@ -15,4 +15,6 @@ public class TaskQueryParam extends BasePage { private String taskName; + private String taskType; + } diff --git a/src/main/java/com/biutag/supervision/pojo/param/TaskTestingAlcoholPeopleQueryParam.java b/src/main/java/com/biutag/supervision/pojo/param/TaskTestingAlcoholPeopleQueryParam.java index 61a81b9..0b57b6a 100644 --- a/src/main/java/com/biutag/supervision/pojo/param/TaskTestingAlcoholPeopleQueryParam.java +++ b/src/main/java/com/biutag/supervision/pojo/param/TaskTestingAlcoholPeopleQueryParam.java @@ -23,4 +23,8 @@ public class TaskTestingAlcoholPeopleQueryParam extends BasePage { // 饮酒结果 private String drinkResult; + private String position; + + private String queryTxt; + } diff --git a/src/main/java/com/biutag/supervision/service/RpcApplyService.java b/src/main/java/com/biutag/supervision/service/RpcApplyService.java index 0603cc2..1cd700d 100644 --- a/src/main/java/com/biutag/supervision/service/RpcApplyService.java +++ b/src/main/java/com/biutag/supervision/service/RpcApplyService.java @@ -32,6 +32,7 @@ import java.time.ZoneId; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Set; import java.util.stream.Collectors; @RequiredArgsConstructor @@ -48,6 +49,7 @@ public class RpcApplyService extends ServiceImpl { private final SupDepartService departService; + public Page page(RpcApplyQueryParam queryParam, String type) { UserAuth user = UserContextHolder.getCurrentUser(); QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -58,7 +60,9 @@ public class RpcApplyService extends ServiceImpl { } // 是否是市局维权专干 if (rightPeoples.stream().noneMatch(item -> "1".equals(item.getCouncil()))) { - queryWrapper.in("a.handle_depart_id", rightPeoples.stream().map(RpcRightPerson::getDepartId).collect(Collectors.toSet())); + Set departIds = rightPeoples.stream().map(RpcRightPerson::getDepartId).collect(Collectors.toSet()); + List childrenIds = departService.getAllNodeIds(departIds); + queryWrapper.in("a.handle_depart_id", childrenIds); } } queryWrapper.like(StrUtil.isNotBlank(queryParam.getApplicantEmpName()), "a.applicant_emp_name", queryParam.getApplicantEmpName()) diff --git a/src/main/java/com/biutag/supervision/service/SupDepartService.java b/src/main/java/com/biutag/supervision/service/SupDepartService.java index 0dfc066..9487e88 100644 --- a/src/main/java/com/biutag/supervision/service/SupDepartService.java +++ b/src/main/java/com/biutag/supervision/service/SupDepartService.java @@ -50,18 +50,18 @@ public class SupDepartService extends ServiceImpl { return getAllNodeIds(List.of(departId)); } - public List getAllNodeIds(List departIds) { + public List getAllNodeIds(Collection departIds) { return getAllNode(departIds).stream().map(DepartTree::getId).toList(); } - public List getAllNode(List departIds) { + public List getAllNode(Collection departIds) { List treeList = buildTreeAll(); List nodes = new ArrayList<>(); getAllNodeRecursive(departIds, treeList, nodes); return nodes; } - public void getAllNodeRecursive(List departIds, List treeList, List nodes) { + public void getAllNodeRecursive(Collection departIds, List treeList, List nodes) { treeList.forEach(item -> { if (departIds.contains(item.getId())) { getAllNodeRecursive(item, nodes); diff --git a/src/main/java/com/biutag/supervision/service/SupTaskService.java b/src/main/java/com/biutag/supervision/service/SupTaskService.java index ecce27b..5f52be4 100644 --- a/src/main/java/com/biutag/supervision/service/SupTaskService.java +++ b/src/main/java/com/biutag/supervision/service/SupTaskService.java @@ -28,6 +28,7 @@ public class SupTaskService extends ServiceImpl { }) .eq("t.task_status", queryParam.getTaskStatus()) .like(StrUtil.isNotBlank(queryParam.getTaskName()), "t.task_name", queryParam.getTaskName()) + .eq(StrUtil.isNotBlank(queryParam.getTaskType()),"t.task_type", queryParam.getTaskType()) .orderByDesc("t.create_time"); return baseMapper.queryTask(Page.of(queryParam.getCurrent(), queryParam.getSize()), queryWrapper); } diff --git a/src/main/java/com/biutag/supervision/service/SupTaskTestingAlcoholPeopleService.java b/src/main/java/com/biutag/supervision/service/SupTaskTestingAlcoholPeopleService.java index 8168e33..081e234 100644 --- a/src/main/java/com/biutag/supervision/service/SupTaskTestingAlcoholPeopleService.java +++ b/src/main/java/com/biutag/supervision/service/SupTaskTestingAlcoholPeopleService.java @@ -26,6 +26,10 @@ public class SupTaskTestingAlcoholPeopleService extends ServiceImpl { + q.like("peo.name", queryParam.getQueryTxt()).or().like("peo.emp_no", queryParam.getQueryTxt()); + }) .orderByAsc("peo.testing_result"); Page page = baseMapper.queryPage(Page.of(queryParam.getCurrent(), queryParam.getSize()), queryWrapper); page.getRecords().forEach(item -> { diff --git a/src/main/resources/static/templates/测酒任务被测人员模板.xlsx b/src/main/resources/static/templates/测酒任务被测人员模板.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..3e50cc37f7bfb471e4b1e3225a1804a0c7a9fd44 GIT binary patch literal 8979 zcmeHtgb!f9!5+Lz#;R&yWp(hn@f5_CNdt$`XbYyV!xx&Sh>S)>-8i zYeZ4G_XGNHnN);7cE|UYnCNC&THa^Ay#|Ws;9K!lS#l=L8PKjhz$)R&C&qLuNt~kxg^)basAu9Yt z`Kp-*-@=epH&fJ~DqwOBpllspOHj^XH|E_ff}i(%=&+M=>6&&8kF0xz6x^H{9RpS* zqPAsOE$GXXRO07l3h;T~KhVhcQEA_V%*(ED0%aZX*~LBR3}?If_@g**;3E}{cgX%~ z|F(eV-uQ-Y;K5PiwlBvWG5~OYj{s2q8!YS8*&m(2V(mE$br>*M8akTVII%tc(f$X= z|6vUN<<`sM6qLHyF@vEpHzED!GfOc*ad|f}83@%2A3xbe?7GN28q%e9dNSY(l0XD$ z-&UWS!G$Hk$en(wvoBm_;kY1yNA+&y!AV!ITu_+k922Epm92H-xXzr;oTW(1c`&%P zMl+Q*7UjqftUQvMI+Cmgjy={SLBlH`3nmas@z?29&|WsasDPUhSKBWSu4>@T-iaSe z^PNpB+#{=>aI*?d`39@K%}nnEf;#sI9X59(bAAI{@b3R8ixyEu5G0V|uwDPqY3s zv)2mO-1a>u{+H11Xgrxx{bF%cz8c-eJ)^Z1ql+WMJ*UaqgeGUBJYs<}Ct+V`EA(@z z=GHSia*pCghDYlaFTvGuVF^jsI9D5Ig+h{vlljkOAIlNsJSrTYsbdx?9}N3z|IgYrJh$s5%Q6aBZK|x7H&rml^*}I(w z8N-pvF*J4vBx}+wvMV_Zim}SGll+-O1&f%|!gAq5g)*JIr~Rl)v)4ZPFw%S;>ez2u zXxPN{fxFSijGWy^EG#HTS1eFAF3|+cTgtLsLXG=e*n(cRkp&J>T}FXJ7S|6W-eI=I zt2+earw2A&giPqgXym;E2ApSD+;ZAI)X~lOp1xl@Stp~uMEPdmMO0ZjgOF^KnPm_% zJBZU&7|vjzS*OwiOT(V;o6&k%#(;-zC%{o;lslew!bT#2B;Qr;R@!vtr9Bv4(q;+V z{z;Fch&%?^h`^dd^;vB}(p-b}7`4Z!2E(P0NnE?e-JylgBZcMQzKPG{VxvbSD@rLY zy1iBZ=Jfi#c_o2;CVfdovW;mBgDjq!KAH`sm28S!b_DnPw`R|fkPz?;8IxI(hJ44_ zbLfJwg34XWz3+K~R&y`~GVH7^JFYdn9yq#$lZkJNQfylq*^5~%E@#9Ij<-6wjYExA z&ZS&i_@6c~f9y1VxRg#1)onBnDsbH=bhcz9Rp z`z@}6FH?Oyx4a7G5OXq~z7;HUPM60NoVA;fmghYz;`O`!YSM%uA9@>y)H3|JU)$Nk*yXdRpH>qzxt5c%LEF34c{wC&_PoJ!o3tz}AuHj(?I26K(7rnW-o zsX!ZkpsTmw!_`>(ud+t_qR;8uGMvx=z0dp^;$9W;o*K-F;Q zbOUV;ibMPoc*-SL)VN&YBOz$M+O@gz(;d>k;m%(;A?X-~w`LeQkpNKPV7U8@pZRzK0C8f@2T%%qYl(EF3?eN`kbtgGBxXK zeUfKGun+ctj`X>nb7Or$z&q_=E(*g%e2r%V6+p5dIUYekHQq0O7$A*=hr744Te^>d zmFk4oBplbzk_qD5ykMXu4#_K|mON>i4Cb;LWq0AQavCQegyrg?+I7FHAho^nfZB!z z%2YDsWGbJ&(y#Lu51aRL=i?ym-jy`i!WrgOw3OZWqwY(pdjme=bkF4 z{6)~7x#Bqnt&o3S^iVVf0g6dO1>7MbS~;`jS8q-BO-Y1QNVoI&7dhLq&4-5j!A+y^ zmANv^iSM_Cru6D-=|N`%!Nt~$FHO4@C3ZbSk$QxBp(LN1I2FQm9a0zeE7DN&1SHD} z;_g5>2^K0XHaaGkI!4QVHoZvvIxS9Kh308|z8m=kRlOCs1ijg>=~2|6y-mZKMZ9L=+AiR)yv-YWMtc+_ zq0ud_KRKpdJ;Z*Vu6hFQK0C0=a7&W zT!GwG`dD@My<|MQ6b8@hmWNrlnZ~ldb@>6Q(1d$4tT9U7Na?TIaVtg@Ia*;mwea*+ zauY&tb1?FN0jv`oH?~^fo4F8X=9N_j`5FLFU@P)Y=y`CA6i%i*$jF!I)A9P+)B^S5 zJwvAtaN`(EA~~8R?$OSg^}ult<&q1!G3#HGyzcumFn%@>F=AMql)z_|;+p_fhEg-i z2}hg&nu?O`7%O{djE>H3@6!5~>E^9ib3uZ4f5)1;Z`ectyjV0lP$>iMNR_Vp;OVvG zlLw#0ohDb=2~PC1Fh~%$y0_O!65=I@MY=bVlvgC%f%|qL6+z(lOugoJ1k5(Y)SA&I z<81!LK`RXw*vO8aQ=~rv_2>0)jdY-QvI7yv4biUQG;p>HwtM1Ha@v6lwz$(7RobBY zWu|o=dn`@~Szx`O(vC)`K7kU7;~C?gtV3{%mUXZ)FBYw28*-#}iRYnJ<{2b2eKT2y zC&AZ~+AWYcQ{in_=hakfJ-t>}{X%Qbd1|ul4GaqZ1c`!(A4?DnAbuo2=Hfp=;%s4R zYs&Vs{fUn~?J@fW9#9+h+&$&D1D$%>&saO4dK-G{_kP7!=q5MQQ};3!mE^;V;mnAy%6fht73hp(^pPg6$v(iFW#4!aI|+u@a~BT2bX)+iS*)Bs#5A7z{# zH;-k{9-Ickm->H~4~P1ESSccQAMrH_cjAo^L8ugM^7X|KA(H|=gYEMRS9RxWM|=I; zUF_s-wOg?#aYqVclvQdNHvsbFo?7t65a)$xxC%89PqA>_n-fu@+gbbA@ip)#ZXOtaiV=Zpbnax_%5j zq0ZdBNNV@F{T?l1xb?7C2YIdMe9Z9f?xqKO<>qvVGyL2xxc8}-B<^s=!o^}!A1+bq z8L!|&`v+=BUe2?uor5Q~O(0bj5Pmg?< z{AAuFg&WWSHq;4{9&)yW3hM4OdZK20zKT+|qH(X%^Q*#58)E219)W-g;74ACy?K;X ztro$W=P474Gi$;zKxEFjCP<@*jbkk%1-1dHS~|<%_74q80ab0gH!u9BOs08ugoQa{ z4|OQ5s6;xaQNP0JpeM}fMJbD)`cY8fEXZV*)x3=&b%0CBG#O0q06E!xXo~M}ughP7 zx2=AEn_Pj5mxAVKb?gyDG!^UZO47rit;HYD^{LwMP>n%lebKZNS;TCUlp0Ef&9Ibm zfPzT6-KK|n5LmX8FbE&3l$b)Bgp!;B{Ten3)L=p=u@ChSpOk-h8&HTsp)<9=l-6?=;&m#nZ^hZ~+9a%5 zdJ5h$_LgE0!eI`JZq%uCN{%g*uy{d=R+qMDvrOns89E}v!*W;5q4i{iVGdZ&lg{ z5T1h>Mc0b6K5O{NGg}#pj1(FY0^AXoN8mLVn(6+Epl1u6xwK1_YIUPu=s=>j@%UOC z{8i&Sjs98CTO-mp44H$18-0M?y}@-o%R)D#_#J$}Ziov~LW-Syg+K_sbW+khDR`bT z=UtktICB?~!Yh@GE29DR&1U_=>1=w5Y9CTLl95j#{dJ&NjCoNteMXC&bhpJSoR1!J zh^$W!Fwd?WQdqKG8})XmpN1fOc-#M-@J>I$H1^emwBRU0g(SUZU=V6Le*z7;CYG<- z11@!v+{T$5N>mEgCZ7JmJ}Im?J38VqGk5BfT5DF0$xBuSuL}H6?+0&|Iws>-sg~%E zP8Nx$OkJ_X-Xe{pVy-4Q@O>}dm`KOv>smzB*7hZ&D-?G&HXX`+#{-F>6h>1 z8|HZqRd?sD%LB#hMsbsdo9)@DET#uXF|Fc`>M`X<9_uJrX*N=hQ{x|`*DJtn;{l@*cwc^g^_cW9Opu_51g9e1 zRO;yg9^1Do6`@cj17@NZH^ESK9kB+LZDg@L9#kuXc1>S&yztO?ofuyW;!YfpK7N+& zi|bGHNnr0mSKH1wCbg^=C1H(M>#C*DyY(+XUWef?Ai0~aHHkD;R*KKR_v2<(781(&6>o5Hh`XV zBJIe4elv#o+Nzf%{Q7ZB%lNBX-8SBx=lLI1)`L?|a=0EBjMu#zY8^*Qg;T)`*dV34 zCrIHBz&zKn)N8M^V@G%!lFl_s8$UQ1^E6bC87Dbj@#{i6MZ5Q%ajo1iqkyyO3hF%g z+$vrCTjcl?uBRM%DR1~aFr7ZBel}8<(017~>#%g?2_9i*ucI(;~?%;a@=&&NtY>80Ox8(o6xLTU1u=p*!rx9*stUvWlGBqYuqN9>xfQa%?~>+8aen`VO$ zxsc*P7QcXl-uudWjGx`wVrb$El+D9$L$0W}C|X*_dIT)YqKL}+ssek6 z+T%M64=#g?%Dg$G9&IIaeHIwVx>gV-`%r9%O$>Lr54y1cGmtVQ$Z{{2^q8n?n_19( z+kLOJa(~GVx4g$V^c#1vv?VR1}X&+S_a&w`=)MQCcauM079moPuu6RT;r z&R~MHST_{*$Cg>6du+8B$!$xpCE)&(!31I}MDMm*%h0S%$W7BpAUSs2AgHvC99cUd2B$GV3!l-jXd{@UF0yJjAXSiFLCJ9(+7=b-nR^g&k6*8Jz; z(>=;gC(nl?;sO{#zT`-yL+lvzi(Q;6_OnMV2l5|du#-|9JBx@Mxxp4pZ)iHs=oR@S z=+cjvS#M!l*FTHLn*mj89N0vA2KEL0jzbG0M^mtxv!kV*`EPKH?U3sd1qMR{pjE?5 zb|9SCkuzmri^n*MR-EmJnBm?%sl9R`cNX+ap_AOu>1CUUQ0%Y4y$ucpXGnWT<`?ak z!A47^EVM~A>~bckkPJX*w@e>83RQX*Ig||kiN;G7)kuz@9Io+=1>IpHc`rf*)VFn) zI0bZaV7lkhTe!FRmEq5|D8k{mJ*b}9;4<1KPPS6=Wv3{k(oE9M1JC>uiXO{-)-@lE z_%i%`^QfXJgWZaM2+#hdy0cD9o0KQ6ry-?lvM1}bP^7OpU?bwLUNgw`Y3&1q{tWJ{$KUP=xFsz zCD;)oSapsA(>1{MCd!WX4o++)_Kv2%uY~<4XTW01D^6d&iybygN4l37@J=hd7L{1= zAFLol)u3B`vtCxpV=0rnbk}MLnZfEAT5s7JaKe(+MA1eud}%XNgc-{q1;?-)D))}~ zHRGqX2k2!ca#hVLF*%R4Y6mMTRVx_nF$Ghk0$<_JeT+{i&@;DyrWX?FwxJBztm6$5 zx<$qgU*<7Zo81Jy^NZ&*Fh+|)+ax;h%X#?rTM)=gaz{z+9MJJ(no^8ETvqZ>>63r# z*;sHJhwR`Wd0p0azJMu)FsSdOL&K!XcA+Talw>(;b#~;dlZcg8v7IKFawfWB6Wk_A z{OlK@o_MDQNUC?IQQ}e0qsI z#Z;1C^?QQ@6KGd!$0F0r_rPafP&9dJrX=QFa7HEr=mrA_~}iEI4{tmj-p*;EbACO!hDOCm1I4VS zW||uzuVI@Sq^)Jq>%uv@al~)*Znw6Yjd??Z#-^08w>64>W|)F8Xu-=Z#JE`*&hd4e z?cIVuU!g^y?ekuYjm?;qgGIvB6^D6m4}L+S{AktJ-rLdIBs(^-D3a>Bv0!uaXm zUqAR`X#eQ{P|6Kw9(-Z*U zLjP&}|Ix#L_4BJN`llyz%>Q>0{}4%k_42E3^rx2ySg8QJm0wk)Umg5f!~f|(jNqq( zKP&oQO@A#r{xlsR{>}8)BIH*Oe`no4?EwHxm_qjt4*u2r@9FZd=5geIG5