From c03092bc0c717ee70a6d7474605969c3faed2017 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B7=AF=20=E8=8C=83?= Date: Fri, 24 Sep 2021 14:33:10 +0800 Subject: [PATCH] . --- .gitignore | 9 + .gitmodules | 6 +- Api/Ewide.Application/Entity/BsHouseCode.cs | 52 + .../Entity/BsHouseCompany.cs | 36 + Api/Ewide.Application/Entity/BsHouseInfo.cs | 378 + Api/Ewide.Application/Entity/BsHouseLog.cs | 46 + .../Entity/BsHouseMemberRelation.cs | 26 + .../Entity/BsHouseProjectInfo.cs | 38 + Api/Ewide.Application/Entity/BsHouseTask.cs | 266 + .../Entity/BsHouseTaskCheckRecord.cs | 36 + .../Entity/BsHouseTaskOptions.cs | 60 + .../Entity/BsInspectionMemberRelation.cs | 26 + .../Entity/BsInspectionOrg.cs | 72 + .../Entity/BsInspectionOrgDirDetail.cs | 34 + .../Entity/BsInspectionOrgDirStage.cs | 40 + .../Entity/BsInspectionOrgSetting.cs | 54 + .../Entity/BsInspectionOrgUpdate.cs | 82 + Api/Ewide.Application/Entity/README.md | 1 + Api/Ewide.Application/Enum/DataStatus.cs | 48 + Api/Ewide.Application/Enum/HouseLog.cs | 43 + .../Enum/HouseManagerRole.cs | 36 + .../Enum/InspectionOrgEnum.cs | 87 + .../Ewide.Application.csproj | 28 + Api/Ewide.Application/Ewide.Application.xml | 1647 ++ Api/Ewide.Application/README.md | 3 + .../HouseCode/Dto/HouseCodeInput.cs | 65 + .../HouseCode/Dto/HouseCodeOutput.cs | 43 + .../HouseSafety/HouseCode/HouseCodeService.cs | 123 + .../HouseCode/IHouseCodeService.cs | 13 + .../HouseCompany/Dto/HouseCompanyInput.cs | 61 + .../HouseCompany/Dto/HouseCompanyOutput.cs | 33 + .../HouseCompany/HouseCompanyService.cs | 101 + .../HouseCompany/IHouseCompanyService.cs | 19 + .../HouseInfo/Dto/HouseInfoInput.cs | 239 + .../HouseInfo/Dto/HouseInfoOutput.cs | 239 + .../HouseSafety/HouseInfo/HouseInfoService.cs | 208 + .../HouseInfo/IHouseInfoService.cs | 13 + .../HouseSafety/HouseLog/Dto/HouseLogInput.cs | 15 + .../HouseLog/Dto/HouseLogOutput.cs | 20 + .../HouseSafety/HouseLog/HouseLogService.cs | 209 + .../HouseSafety/HouseLog/IHouseLogService.cs | 24 + .../HouseMember/Dto/HouseMemberInput.cs | 16 + .../HouseMember/Dto/HouseMemberOutput.cs | 13 + .../HouseMember/HouseMemberService.cs | 326 + .../HouseMember/IHouseMemberService.cs | 22 + .../Dto/HouseProjectInfoInput.cs | 52 + .../Dto/HouseProjectOutput.cs | 19 + .../HouseProjectInfoService.cs | 147 + .../IHouseProjectInfoService.cs | 24 + .../HouseQuery/Dto/HouseQueryInput.cs | 21 + .../HouseQuery/Dto/HouseQueryOutput.cs | 12 + .../HouseQuery/HouseQueryService.cs | 110 + .../HouseQuery/IHouseQueryService.cs | 12 + .../HouseSelector/Dto/HouseSelectorInput.cs | 24 + .../HouseSelector/Dto/HouseSelectorOutput.cs | 12 + .../HouseSelector/HouseSelectorService.cs | 225 + .../HouseSelector/IHouseSelectorService.cs | 18 + .../HouseTask/Dto/HouseTaskInput.cs | 171 + .../HouseTask/Dto/HouseTaskOutput.cs | 173 + .../HouseSafety/HouseTask/HouseTaskService.cs | 102 + .../HouseTask/IHouseTaskService.cs | 13 + .../Dto/HouseTaskCheckRecordInput.cs | 46 + .../Dto/HouseTaskCheckRecordOutput.cs | 12 + .../HouseZone/Dto/HouseZoneInput.cs | 41 + .../HouseZone/Dto/HouseZoneOutput.cs | 12 + .../HouseSafety/HouseZone/HouseZoneService.cs | 175 + .../HouseZone/IHouseZoneService.cs | 15 + .../InspectionOrg/Dto/InspectionOrgInput.cs | 81 + .../InspectionOrg/Dto/InspectionOrgOutput.cs | 28 + .../InspectionOrg/IInspectionOrgService.cs | 22 + .../InspectionOrg/InspectionOrgService.cs | 410 + .../Dto/InspectionOrgDirInput.cs | 42 + .../Dto/InspectionOrgDirOutput.cs | 15 + .../IInspectionOrgDirService.cs | 16 + .../InspectionOrgDirService.cs | 295 + Api/Ewide.Application/Startup.cs | 30 + .../applicationsettings.json | 3 + Api/HouseSafety.sln | 100 + EwideCore | 1 + Web/.env | 1 + Web/.env.development | 1 + Web/.env.production | 1 + Web/.gitignore | 23 + Web/.prettierrc.js | 24 + Web/README.md | 70 + Web/craco.config.js | 35 + Web/jsconfig.json | 6 + Web/package.json | 67 + Web/public/doc-code/api/setting.js | 14 + Web/public/doc-code/api/usage.js | 25 + Web/public/doc-code/application/dto.cs | 35 + Web/public/doc-code/application/entity.cs | 26 + Web/public/doc-code/application/interface.cs | 15 + Web/public/doc-code/application/service.cs | 90 + Web/public/doc-code/auth/index.txt | 51 + Web/public/doc-code/util/dic/index.js | 10 + Web/public/doc-code/util/query/index.js | 32 + Web/public/favicon.ico | Bin 0 -> 4286 bytes Web/public/index.html | 44 + Web/public/logo192.png | Bin 0 -> 5347 bytes Web/public/logo512.png | Bin 0 -> 9664 bytes Web/public/manifest.json | 25 + Web/public/robots.txt | 3 + Web/seed/form-tabs/index.jsx | 153 + Web/seed/form-tabs/tab/index.jsx | 126 + Web/seed/form-tabs/tab/part.jsx | 115 + Web/seed/form/index.jsx | 169 + Web/seed/form/part.jsx | 115 + Web/seed/query-table-form/form.jsx | 78 + Web/seed/query-table/index.jsx | 235 + Web/src/App.js | 16 + Web/src/assets/image/adorn/house-top-01.png | Bin 0 -> 39518 bytes Web/src/assets/image/login-bg-00.jpg | Bin 0 -> 228327 bytes Web/src/assets/image/login-bg-01.jpg | Bin 0 -> 572882 bytes Web/src/assets/image/login-bg-02.jpg | Bin 0 -> 441184 bytes Web/src/assets/image/login-bg-03.jpg | Bin 0 -> 146405 bytes Web/src/assets/image/logo-w.png | Bin 0 -> 7628 bytes Web/src/assets/image/logo.png | Bin 0 -> 13518 bytes Web/src/assets/style/dark/extend.less | 11 + Web/src/assets/style/dark/index.less | 35 + Web/src/assets/style/dark/lib/align.less | 9 + Web/src/assets/style/dark/lib/anchor.less | 11 + .../assets/style/dark/lib/authority-view.less | 53 + Web/src/assets/style/dark/lib/button.less | 4 + Web/src/assets/style/dark/lib/card.less | 14 + Web/src/assets/style/dark/lib/cascader.less | 6 + Web/src/assets/style/dark/lib/checkbox.less | 10 + .../assets/style/dark/lib/color-selector.less | 18 + Web/src/assets/style/dark/lib/container.less | 43 + .../assets/style/dark/lib/description.less | 10 + Web/src/assets/style/dark/lib/disabled.less | 59 + Web/src/assets/style/dark/lib/dropdown.less | 6 + Web/src/assets/style/dark/lib/font-size.less | 25 + .../assets/style/dark/lib/font-weight.less | 24 + Web/src/assets/style/dark/lib/form-page.less | 169 + Web/src/assets/style/dark/lib/form.less | 401 + .../assets/style/dark/lib/icon-selector.less | 59 + Web/src/assets/style/dark/lib/input.less | 4 + Web/src/assets/style/dark/lib/list.less | 95 + Web/src/assets/style/dark/lib/margin.less | 68 + Web/src/assets/style/dark/lib/modal.less | 41 + Web/src/assets/style/dark/lib/page.less | 8 + Web/src/assets/style/dark/lib/radio.less | 7 + Web/src/assets/style/dark/lib/scrollbar.less | 14 + Web/src/assets/style/dark/lib/select.less | 6 + Web/src/assets/style/dark/lib/table.less | 255 + Web/src/assets/style/dark/lib/text-color.less | 35 + .../assets/style/dark/lib/tree-layout.less | 83 + Web/src/assets/style/dark/lib/upload.less | 29 + Web/src/assets/style/dark/lib/visibility.less | 45 + .../assets/style/dark/lib/width-height.less | 47 + Web/src/assets/style/dark/main.less | 704 + .../assets/style/dark/pages/account-base.less | 51 + Web/src/assets/style/dark/pages/home.less | 42 + Web/src/assets/style/dark/pages/index.less | 3 + Web/src/assets/style/dark/pages/login.less | 89 + Web/src/assets/style/dark/public.less | 45 + Web/src/assets/style/dark/theme/README.md | 1 + Web/src/assets/style/dark/theme/primary.less | 5 + Web/src/assets/style/default/extend.less | 11 + Web/src/assets/style/default/index.less | 36 + Web/src/assets/style/default/lib/align.less | 9 + Web/src/assets/style/default/lib/anchor.less | 11 + .../style/default/lib/authority-view.less | 53 + Web/src/assets/style/default/lib/bs.less | 81 + Web/src/assets/style/default/lib/button.less | 4 + Web/src/assets/style/default/lib/card.less | 4 + .../assets/style/default/lib/cascader.less | 6 + .../assets/style/default/lib/checkbox.less | 10 + .../style/default/lib/color-selector.less | 18 + .../assets/style/default/lib/container.less | 43 + .../assets/style/default/lib/description.less | 10 + .../assets/style/default/lib/disabled.less | 59 + .../assets/style/default/lib/dropdown.less | 6 + .../assets/style/default/lib/font-size.less | 25 + .../assets/style/default/lib/font-weight.less | 24 + .../assets/style/default/lib/form-page.less | 169 + Web/src/assets/style/default/lib/form.less | 401 + .../style/default/lib/icon-selector.less | 59 + Web/src/assets/style/default/lib/input.less | 4 + Web/src/assets/style/default/lib/list.less | 95 + Web/src/assets/style/default/lib/margin.less | 68 + Web/src/assets/style/default/lib/modal.less | 41 + Web/src/assets/style/default/lib/page.less | 8 + Web/src/assets/style/default/lib/radio.less | 7 + .../assets/style/default/lib/scrollbar.less | 14 + Web/src/assets/style/default/lib/select.less | 6 + Web/src/assets/style/default/lib/table.less | 255 + .../assets/style/default/lib/text-color.less | 35 + .../assets/style/default/lib/tree-layout.less | 83 + Web/src/assets/style/default/lib/upload.less | 29 + .../assets/style/default/lib/visibility.less | 45 + .../style/default/lib/width-height.less | 47 + Web/src/assets/style/default/main.less | 698 + .../style/default/pages/account-base.less | 51 + Web/src/assets/style/default/pages/home.less | 42 + Web/src/assets/style/default/pages/index.less | 3 + Web/src/assets/style/default/pages/login.less | 89 + Web/src/assets/style/default/public.less | 45 + Web/src/assets/style/default/theme/README.md | 1 + .../assets/style/default/theme/primary.less | 5 + Web/src/common/api/index.js | 196 + .../business/houseSafety/houseCode.js | 9 + .../business/houseSafety/houseCompany.js | 10 + .../business/houseSafety/houseInfo.js | 8 + .../requests/business/houseSafety/houseLog.js | 7 + .../business/houseSafety/houseMember.js | 15 + .../business/houseSafety/houseProjectInfo.js | 12 + .../business/houseSafety/houseQuery.js | 6 + .../business/houseSafety/houseSelector.js | 8 + .../business/houseSafety/houseTask.js | 6 + .../business/houseSafety/houseZone.js | 15 + .../requests/business/houseSafety/index.js | 25 + Web/src/common/api/requests/business/index.js | 9 + .../api/requests/business/inspection/index.js | 9 + .../business/inspection/inspectionOrg.js | 14 + .../business/inspection/inspectionOrgDir.js | 11 + Web/src/common/api/requests/index.js | 22 + Web/src/common/api/requests/sys/appManage.js | 34 + Web/src/common/api/requests/sys/areaManage.js | 9 + .../common/api/requests/sys/configManage.js | 28 + .../common/api/requests/sys/dictDataManage.js | 24 + Web/src/common/api/requests/sys/dictManage.js | 32 + .../common/api/requests/sys/emailManage.js | 12 + Web/src/common/api/requests/sys/fileManage.js | 38 + Web/src/common/api/requests/sys/index.js | 47 + Web/src/common/api/requests/sys/logManage.js | 25 + .../common/api/requests/sys/loginManage.js | 40 + .../common/api/requests/sys/machineManage.js | 12 + Web/src/common/api/requests/sys/menuManage.js | 68 + .../common/api/requests/sys/noticeManage.js | 33 + .../api/requests/sys/noticeReceiveManage.js | 12 + .../api/requests/sys/onlineUserManage.js | 14 + Web/src/common/api/requests/sys/orgManage.js | 40 + Web/src/common/api/requests/sys/posManage.js | 34 + Web/src/common/api/requests/sys/roleManage.js | 64 + Web/src/common/api/requests/sys/smsManage.js | 19 + .../common/api/requests/sys/tenantManage.js | 28 + .../common/api/requests/sys/timersManage.js | 58 + Web/src/common/api/requests/sys/userManage.js | 95 + Web/src/common/api/status.js | 208 + Web/src/common/login/index.js | 65 + Web/src/common/storage/index.js | 10 + Web/src/common/token/index.js | 19 + Web/src/components/ant-icon/index.jsx | 30 + Web/src/components/authority-view/index.jsx | 257 + Web/src/components/authorized/handler.js | 141 + Web/src/components/authorized/index.jsx | 72 + .../components/business/house-log/index.jsx | 143 + .../components/component-dynamic/index.jsx | 49 + Web/src/components/container/index.jsx | 23 + .../components/form/braft-editor/index.jsx | 58 + .../components/form/color-selector/index.jsx | 55 + .../form/input-number-range/index.jsx | 46 + Web/src/components/icon-selector/icons.js | 34 + Web/src/components/icon-selector/index.jsx | 87 + Web/src/components/image/index.jsx | 53 + Web/src/components/index.js | 19 + Web/src/components/modal-form/index.jsx | 241 + Web/src/components/notice-detail/index.jsx | 122 + Web/src/components/photo-preview/index.jsx | 74 + Web/src/components/query-list/index.jsx | 270 + .../components/query-table-actions/index.jsx | 48 + Web/src/components/query-table/index.jsx | 456 + .../components/query-tree-layout/index.jsx | 337 + Web/src/index.js | 54 + .../pages/business/house/code/form/index.jsx | 148 + .../pages/business/house/code/form/part.jsx | 744 + Web/src/pages/business/house/code/index.jsx | 369 + Web/src/pages/business/house/company/form.jsx | 180 + .../pages/business/house/company/index.jsx | 295 + .../business/house/info/form/base/aspect.jsx | 230 + .../house/info/form/base/attachments.jsx | 238 + .../house/info/form/base/building.jsx | 955 ++ .../business/house/info/form/base/drawing.jsx | 167 + .../house/info/form/base/identification.jsx | 155 + .../business/house/info/form/base/index.jsx | 126 + .../house/info/form/base/investigation.jsx | 312 + .../house/info/form/base/ownership.jsx | 305 + .../business/house/info/form/base/unit.jsx | 154 + .../pages/business/house/info/form/index.jsx | 369 + .../business/house/info/form/patrol/base.jsx | 112 + .../business/house/info/form/patrol/grade.jsx | 182 + .../house/info/form/patrol/handling.jsx | 131 + .../business/house/info/form/patrol/index.jsx | 150 + .../house/info/form/patrol/inspection.jsx | 291 + .../house/info/form/patrol/investigation.jsx | 312 + .../house/info/form/patrol/result.jsx | 102 + Web/src/pages/business/house/info/index.jsx | 15 + Web/src/pages/business/house/member/data.jsx | 115 + Web/src/pages/business/house/member/form.jsx | 294 + Web/src/pages/business/house/member/index.jsx | 417 + .../business/house/member/selector/index.jsx | 66 + .../house/member/selector/selected-list.jsx | 263 + .../house/member/selector/selector-list.jsx | 263 + Web/src/pages/business/house/project/form.jsx | 273 + .../pages/business/house/project/index.jsx | 313 + Web/src/pages/business/house/query/detail.jsx | 35 + Web/src/pages/business/house/query/index.jsx | 571 + .../pages/business/house/task/check/index.jsx | 338 + Web/src/pages/business/house/task/index.jsx | 331 + Web/src/pages/business/house/zone/form.jsx | 194 + Web/src/pages/business/house/zone/index.jsx | 277 + .../pages/business/inspection/dir/index.jsx | 273 + .../pages/business/inspection/dir/preview.jsx | 141 + .../pages/business/inspection/dir/score.jsx | 381 + .../business/inspection/register/detail.jsx | 314 + .../business/inspection/register/form.jsx | 329 + .../business/inspection/register/index.jsx | 94 + .../business/inspection/review/history.jsx | 122 + .../business/inspection/review/index.jsx | 14 + .../pages/business/inspection/review/list.jsx | 305 + .../business/inspection/review/update.jsx | 14 + .../business/statistics/summary/index.jsx | 88 + .../statistics/summary/tab1/charts.jsx | 202 + .../statistics/summary/tab1/index.jsx | 68 + .../statistics/summary/tab1/table.jsx | 209 + .../statistics/summary/tab2/charts.jsx | 0 .../statistics/summary/tab2/index.jsx | 11 + .../statistics/summary/tab2/table.jsx | 0 Web/src/pages/home/business/inspection.jsx | 144 + Web/src/pages/home/charts.jsx | 115 + Web/src/pages/home/index.jsx | 109 + Web/src/pages/home/list.jsx | 103 + Web/src/pages/home/notice.jsx | 34 + Web/src/pages/home/statistics.jsx | 61 + Web/src/pages/home/task.jsx | 65 + Web/src/pages/system/account/base.jsx | 193 + Web/src/pages/system/account/index.jsx | 113 + Web/src/pages/system/account/setting/info.jsx | 87 + .../system/account/setting/satety/index.jsx | 126 + .../system/account/setting/satety/mail.jsx | 376 + .../account/setting/satety/password.jsx | 145 + .../system/account/setting/satety/phone.jsx | 376 + Web/src/pages/system/app/form.jsx | 133 + Web/src/pages/system/app/index.jsx | 323 + Web/src/pages/system/area/form.jsx | 143 + Web/src/pages/system/area/index.jsx | 305 + Web/src/pages/system/config/form.jsx | 134 + Web/src/pages/system/config/index.jsx | 277 + Web/src/pages/system/dict/dictdata/form.jsx | 110 + Web/src/pages/system/dict/dictdata/index.jsx | 436 + Web/src/pages/system/dict/form.jsx | 166 + Web/src/pages/system/dict/index.jsx | 324 + .../system/doc/back-end/application/dto.jsx | 35 + .../doc/back-end/application/entity.jsx | 33 + .../system/doc/back-end/application/index.jsx | 35 + .../doc/back-end/application/interface.jsx | 19 + .../doc/back-end/application/service.jsx | 40 + .../system/doc/back-end/database/index.jsx | 7 + .../doc/back-end/database/migrations.jsx | 83 + Web/src/pages/system/doc/back-end/index.jsx | 157 + .../pages/system/doc/front-end/api/index.jsx | 14 + .../system/doc/front-end/api/setting.jsx | 26 + .../pages/system/doc/front-end/api/usage.jsx | 17 + .../pages/system/doc/front-end/auth/index.jsx | 27 + Web/src/pages/system/doc/front-end/index.jsx | 213 + .../pages/system/doc/front-end/seed/index.jsx | 70 + .../pages/system/doc/front-end/util/dict.jsx | 22 + .../pages/system/doc/front-end/util/file.jsx | 90 + .../system/doc/front-end/util/format.jsx | 39 + .../system/doc/front-end/util/global.jsx | 54 + .../pages/system/doc/front-end/util/index.jsx | 21 + .../pages/system/doc/front-end/util/query.jsx | 119 + .../pages/system/doc/front-end/util/style.jsx | 197 + .../system/doc/front-end/window/close.jsx | 21 + .../system/doc/front-end/window/index.jsx | 28 + .../system/doc/front-end/window/open.jsx | 80 + .../system/doc/front-end/window/reload.jsx | 21 + Web/src/pages/system/doc/highlighter.jsx | 88 + Web/src/pages/system/doc/index.jsx | 78 + Web/src/pages/system/file/index.jsx | 398 + Web/src/pages/system/log/oplog/index.jsx | 274 + Web/src/pages/system/log/vislog/index.jsx | 266 + Web/src/pages/system/machine/base.jsx | 33 + Web/src/pages/system/machine/disk-charts.jsx | 107 + Web/src/pages/system/machine/index.jsx | 46 + Web/src/pages/system/machine/use-charts.jsx | 304 + Web/src/pages/system/menu/form.jsx | 416 + Web/src/pages/system/menu/index.jsx | 415 + Web/src/pages/system/notice/form.jsx | 251 + Web/src/pages/system/notice/index.jsx | 371 + Web/src/pages/system/noticeReceived/index.jsx | 218 + Web/src/pages/system/org/form.jsx | 227 + Web/src/pages/system/org/index.jsx | 321 + Web/src/pages/system/pos/form.jsx | 101 + Web/src/pages/system/pos/index.jsx | 203 + Web/src/pages/system/role/data.jsx | 166 + Web/src/pages/system/role/form.jsx | 104 + Web/src/pages/system/role/index.jsx | 266 + Web/src/pages/system/role/menu.jsx | 89 + Web/src/pages/system/timers/form.jsx | 243 + Web/src/pages/system/timers/index.jsx | 318 + Web/src/pages/system/user/data.jsx | 115 + Web/src/pages/system/user/form.jsx | 276 + Web/src/pages/system/user/index.jsx | 389 + Web/src/pages/system/user/role.jsx | 99 + Web/src/reportWebVitals.js | 13 + Web/src/router/config.js | 11 + Web/src/router/index.jsx | 16 + Web/src/router/navigationGuards.jsx | 26 + Web/src/store/index.js | 54 + Web/src/store/reducer/business.js | 33 + Web/src/store/reducer/dict-data.js | 11 + Web/src/store/reducer/index.js | 18 + Web/src/store/reducer/layout.js | 62 + Web/src/store/reducer/nav.js | 16 + Web/src/store/reducer/notice.js | 40 + Web/src/store/reducer/pane.js | 0 Web/src/store/reducer/user.js | 16 + Web/src/util/des/index.js | 34 + Web/src/util/dic/index.js | 45 + Web/src/util/file/index.js | 125 + Web/src/util/format/index.js | 50 + Web/src/util/global/index.js | 49 + Web/src/util/query/index.js | 109 + Web/src/util/rsa/index.js | 13 + Web/src/util/tool/index.js | 23 + Web/src/views/error/404.jsx | 11 + Web/src/views/login/index.jsx | 235 + Web/src/views/main/_layout/content/index.jsx | 252 + Web/src/views/main/_layout/header/index.jsx | 96 + Web/src/views/main/_layout/header/notice.jsx | 158 + Web/src/views/main/_layout/header/search.jsx | 177 + Web/src/views/main/_layout/header/user.jsx | 139 + Web/src/views/main/_layout/header/weather.jsx | 51 + Web/src/views/main/_layout/logo.jsx | 14 + Web/src/views/main/_layout/sider/index.jsx | 90 + Web/src/views/main/_layout/sider/menu.jsx | 134 + Web/src/views/main/index.jsx | 293 + Web/yarn.lock | 12477 ++++++++++++++++ framework | 1 - 432 files changed, 57806 insertions(+), 4 deletions(-) create mode 100644 .gitignore create mode 100644 Api/Ewide.Application/Entity/BsHouseCode.cs create mode 100644 Api/Ewide.Application/Entity/BsHouseCompany.cs create mode 100644 Api/Ewide.Application/Entity/BsHouseInfo.cs create mode 100644 Api/Ewide.Application/Entity/BsHouseLog.cs create mode 100644 Api/Ewide.Application/Entity/BsHouseMemberRelation.cs create mode 100644 Api/Ewide.Application/Entity/BsHouseProjectInfo.cs create mode 100644 Api/Ewide.Application/Entity/BsHouseTask.cs create mode 100644 Api/Ewide.Application/Entity/BsHouseTaskCheckRecord.cs create mode 100644 Api/Ewide.Application/Entity/BsHouseTaskOptions.cs create mode 100644 Api/Ewide.Application/Entity/BsInspectionMemberRelation.cs create mode 100644 Api/Ewide.Application/Entity/BsInspectionOrg.cs create mode 100644 Api/Ewide.Application/Entity/BsInspectionOrgDirDetail.cs create mode 100644 Api/Ewide.Application/Entity/BsInspectionOrgDirStage.cs create mode 100644 Api/Ewide.Application/Entity/BsInspectionOrgSetting.cs create mode 100644 Api/Ewide.Application/Entity/BsInspectionOrgUpdate.cs create mode 100644 Api/Ewide.Application/Entity/README.md create mode 100644 Api/Ewide.Application/Enum/DataStatus.cs create mode 100644 Api/Ewide.Application/Enum/HouseLog.cs create mode 100644 Api/Ewide.Application/Enum/HouseManagerRole.cs create mode 100644 Api/Ewide.Application/Enum/InspectionOrgEnum.cs create mode 100644 Api/Ewide.Application/Ewide.Application.csproj create mode 100644 Api/Ewide.Application/Ewide.Application.xml create mode 100644 Api/Ewide.Application/README.md create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseCode/Dto/HouseCodeInput.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseCode/Dto/HouseCodeOutput.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseCode/HouseCodeService.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseCode/IHouseCodeService.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseCompany/Dto/HouseCompanyInput.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseCompany/Dto/HouseCompanyOutput.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseCompany/HouseCompanyService.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseCompany/IHouseCompanyService.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseInfo/Dto/HouseInfoInput.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseInfo/Dto/HouseInfoOutput.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseInfo/HouseInfoService.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseInfo/IHouseInfoService.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseLog/Dto/HouseLogInput.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseLog/Dto/HouseLogOutput.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseLog/HouseLogService.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseLog/IHouseLogService.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseMember/Dto/HouseMemberInput.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseMember/Dto/HouseMemberOutput.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseMember/HouseMemberService.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseMember/IHouseMemberService.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseProjectInfo/Dto/HouseProjectInfoInput.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseProjectInfo/Dto/HouseProjectOutput.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseProjectInfo/HouseProjectInfoService.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseProjectInfo/IHouseProjectInfoService.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseQuery/Dto/HouseQueryInput.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseQuery/Dto/HouseQueryOutput.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseQuery/HouseQueryService.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseQuery/IHouseQueryService.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseSelector/Dto/HouseSelectorInput.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseSelector/Dto/HouseSelectorOutput.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseSelector/HouseSelectorService.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseSelector/IHouseSelectorService.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseTask/Dto/HouseTaskInput.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseTask/Dto/HouseTaskOutput.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseTask/HouseTaskService.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseTask/IHouseTaskService.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseTaskCheckRecord/Dto/HouseTaskCheckRecordInput.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseTaskCheckRecord/Dto/HouseTaskCheckRecordOutput.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseZone/Dto/HouseZoneInput.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseZone/Dto/HouseZoneOutput.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseZone/HouseZoneService.cs create mode 100644 Api/Ewide.Application/Service/HouseSafety/HouseZone/IHouseZoneService.cs create mode 100644 Api/Ewide.Application/Service/Inspection/InspectionOrg/Dto/InspectionOrgInput.cs create mode 100644 Api/Ewide.Application/Service/Inspection/InspectionOrg/Dto/InspectionOrgOutput.cs create mode 100644 Api/Ewide.Application/Service/Inspection/InspectionOrg/IInspectionOrgService.cs create mode 100644 Api/Ewide.Application/Service/Inspection/InspectionOrg/InspectionOrgService.cs create mode 100644 Api/Ewide.Application/Service/Inspection/InspectionOrgDir/Dto/InspectionOrgDirInput.cs create mode 100644 Api/Ewide.Application/Service/Inspection/InspectionOrgDir/Dto/InspectionOrgDirOutput.cs create mode 100644 Api/Ewide.Application/Service/Inspection/InspectionOrgDir/IInspectionOrgDirService.cs create mode 100644 Api/Ewide.Application/Service/Inspection/InspectionOrgDir/InspectionOrgDirService.cs create mode 100644 Api/Ewide.Application/Startup.cs create mode 100644 Api/Ewide.Application/applicationsettings.json create mode 100644 Api/HouseSafety.sln create mode 160000 EwideCore create mode 100644 Web/.env create mode 100644 Web/.env.development create mode 100644 Web/.env.production create mode 100644 Web/.gitignore create mode 100644 Web/.prettierrc.js create mode 100644 Web/README.md create mode 100644 Web/craco.config.js create mode 100644 Web/jsconfig.json create mode 100644 Web/package.json create mode 100644 Web/public/doc-code/api/setting.js create mode 100644 Web/public/doc-code/api/usage.js create mode 100644 Web/public/doc-code/application/dto.cs create mode 100644 Web/public/doc-code/application/entity.cs create mode 100644 Web/public/doc-code/application/interface.cs create mode 100644 Web/public/doc-code/application/service.cs create mode 100644 Web/public/doc-code/auth/index.txt create mode 100644 Web/public/doc-code/util/dic/index.js create mode 100644 Web/public/doc-code/util/query/index.js create mode 100644 Web/public/favicon.ico create mode 100644 Web/public/index.html create mode 100644 Web/public/logo192.png create mode 100644 Web/public/logo512.png create mode 100644 Web/public/manifest.json create mode 100644 Web/public/robots.txt create mode 100644 Web/seed/form-tabs/index.jsx create mode 100644 Web/seed/form-tabs/tab/index.jsx create mode 100644 Web/seed/form-tabs/tab/part.jsx create mode 100644 Web/seed/form/index.jsx create mode 100644 Web/seed/form/part.jsx create mode 100644 Web/seed/query-table-form/form.jsx create mode 100644 Web/seed/query-table/index.jsx create mode 100644 Web/src/App.js create mode 100644 Web/src/assets/image/adorn/house-top-01.png create mode 100644 Web/src/assets/image/login-bg-00.jpg create mode 100644 Web/src/assets/image/login-bg-01.jpg create mode 100644 Web/src/assets/image/login-bg-02.jpg create mode 100644 Web/src/assets/image/login-bg-03.jpg create mode 100644 Web/src/assets/image/logo-w.png create mode 100644 Web/src/assets/image/logo.png create mode 100644 Web/src/assets/style/dark/extend.less create mode 100644 Web/src/assets/style/dark/index.less create mode 100644 Web/src/assets/style/dark/lib/align.less create mode 100644 Web/src/assets/style/dark/lib/anchor.less create mode 100644 Web/src/assets/style/dark/lib/authority-view.less create mode 100644 Web/src/assets/style/dark/lib/button.less create mode 100644 Web/src/assets/style/dark/lib/card.less create mode 100644 Web/src/assets/style/dark/lib/cascader.less create mode 100644 Web/src/assets/style/dark/lib/checkbox.less create mode 100644 Web/src/assets/style/dark/lib/color-selector.less create mode 100644 Web/src/assets/style/dark/lib/container.less create mode 100644 Web/src/assets/style/dark/lib/description.less create mode 100644 Web/src/assets/style/dark/lib/disabled.less create mode 100644 Web/src/assets/style/dark/lib/dropdown.less create mode 100644 Web/src/assets/style/dark/lib/font-size.less create mode 100644 Web/src/assets/style/dark/lib/font-weight.less create mode 100644 Web/src/assets/style/dark/lib/form-page.less create mode 100644 Web/src/assets/style/dark/lib/form.less create mode 100644 Web/src/assets/style/dark/lib/icon-selector.less create mode 100644 Web/src/assets/style/dark/lib/input.less create mode 100644 Web/src/assets/style/dark/lib/list.less create mode 100644 Web/src/assets/style/dark/lib/margin.less create mode 100644 Web/src/assets/style/dark/lib/modal.less create mode 100644 Web/src/assets/style/dark/lib/page.less create mode 100644 Web/src/assets/style/dark/lib/radio.less create mode 100644 Web/src/assets/style/dark/lib/scrollbar.less create mode 100644 Web/src/assets/style/dark/lib/select.less create mode 100644 Web/src/assets/style/dark/lib/table.less create mode 100644 Web/src/assets/style/dark/lib/text-color.less create mode 100644 Web/src/assets/style/dark/lib/tree-layout.less create mode 100644 Web/src/assets/style/dark/lib/upload.less create mode 100644 Web/src/assets/style/dark/lib/visibility.less create mode 100644 Web/src/assets/style/dark/lib/width-height.less create mode 100644 Web/src/assets/style/dark/main.less create mode 100644 Web/src/assets/style/dark/pages/account-base.less create mode 100644 Web/src/assets/style/dark/pages/home.less create mode 100644 Web/src/assets/style/dark/pages/index.less create mode 100644 Web/src/assets/style/dark/pages/login.less create mode 100644 Web/src/assets/style/dark/public.less create mode 100644 Web/src/assets/style/dark/theme/README.md create mode 100644 Web/src/assets/style/dark/theme/primary.less create mode 100644 Web/src/assets/style/default/extend.less create mode 100644 Web/src/assets/style/default/index.less create mode 100644 Web/src/assets/style/default/lib/align.less create mode 100644 Web/src/assets/style/default/lib/anchor.less create mode 100644 Web/src/assets/style/default/lib/authority-view.less create mode 100644 Web/src/assets/style/default/lib/bs.less create mode 100644 Web/src/assets/style/default/lib/button.less create mode 100644 Web/src/assets/style/default/lib/card.less create mode 100644 Web/src/assets/style/default/lib/cascader.less create mode 100644 Web/src/assets/style/default/lib/checkbox.less create mode 100644 Web/src/assets/style/default/lib/color-selector.less create mode 100644 Web/src/assets/style/default/lib/container.less create mode 100644 Web/src/assets/style/default/lib/description.less create mode 100644 Web/src/assets/style/default/lib/disabled.less create mode 100644 Web/src/assets/style/default/lib/dropdown.less create mode 100644 Web/src/assets/style/default/lib/font-size.less create mode 100644 Web/src/assets/style/default/lib/font-weight.less create mode 100644 Web/src/assets/style/default/lib/form-page.less create mode 100644 Web/src/assets/style/default/lib/form.less create mode 100644 Web/src/assets/style/default/lib/icon-selector.less create mode 100644 Web/src/assets/style/default/lib/input.less create mode 100644 Web/src/assets/style/default/lib/list.less create mode 100644 Web/src/assets/style/default/lib/margin.less create mode 100644 Web/src/assets/style/default/lib/modal.less create mode 100644 Web/src/assets/style/default/lib/page.less create mode 100644 Web/src/assets/style/default/lib/radio.less create mode 100644 Web/src/assets/style/default/lib/scrollbar.less create mode 100644 Web/src/assets/style/default/lib/select.less create mode 100644 Web/src/assets/style/default/lib/table.less create mode 100644 Web/src/assets/style/default/lib/text-color.less create mode 100644 Web/src/assets/style/default/lib/tree-layout.less create mode 100644 Web/src/assets/style/default/lib/upload.less create mode 100644 Web/src/assets/style/default/lib/visibility.less create mode 100644 Web/src/assets/style/default/lib/width-height.less create mode 100644 Web/src/assets/style/default/main.less create mode 100644 Web/src/assets/style/default/pages/account-base.less create mode 100644 Web/src/assets/style/default/pages/home.less create mode 100644 Web/src/assets/style/default/pages/index.less create mode 100644 Web/src/assets/style/default/pages/login.less create mode 100644 Web/src/assets/style/default/public.less create mode 100644 Web/src/assets/style/default/theme/README.md create mode 100644 Web/src/assets/style/default/theme/primary.less create mode 100644 Web/src/common/api/index.js create mode 100644 Web/src/common/api/requests/business/houseSafety/houseCode.js create mode 100644 Web/src/common/api/requests/business/houseSafety/houseCompany.js create mode 100644 Web/src/common/api/requests/business/houseSafety/houseInfo.js create mode 100644 Web/src/common/api/requests/business/houseSafety/houseLog.js create mode 100644 Web/src/common/api/requests/business/houseSafety/houseMember.js create mode 100644 Web/src/common/api/requests/business/houseSafety/houseProjectInfo.js create mode 100644 Web/src/common/api/requests/business/houseSafety/houseQuery.js create mode 100644 Web/src/common/api/requests/business/houseSafety/houseSelector.js create mode 100644 Web/src/common/api/requests/business/houseSafety/houseTask.js create mode 100644 Web/src/common/api/requests/business/houseSafety/houseZone.js create mode 100644 Web/src/common/api/requests/business/houseSafety/index.js create mode 100644 Web/src/common/api/requests/business/index.js create mode 100644 Web/src/common/api/requests/business/inspection/index.js create mode 100644 Web/src/common/api/requests/business/inspection/inspectionOrg.js create mode 100644 Web/src/common/api/requests/business/inspection/inspectionOrgDir.js create mode 100644 Web/src/common/api/requests/index.js create mode 100644 Web/src/common/api/requests/sys/appManage.js create mode 100644 Web/src/common/api/requests/sys/areaManage.js create mode 100644 Web/src/common/api/requests/sys/configManage.js create mode 100644 Web/src/common/api/requests/sys/dictDataManage.js create mode 100644 Web/src/common/api/requests/sys/dictManage.js create mode 100644 Web/src/common/api/requests/sys/emailManage.js create mode 100644 Web/src/common/api/requests/sys/fileManage.js create mode 100644 Web/src/common/api/requests/sys/index.js create mode 100644 Web/src/common/api/requests/sys/logManage.js create mode 100644 Web/src/common/api/requests/sys/loginManage.js create mode 100644 Web/src/common/api/requests/sys/machineManage.js create mode 100644 Web/src/common/api/requests/sys/menuManage.js create mode 100644 Web/src/common/api/requests/sys/noticeManage.js create mode 100644 Web/src/common/api/requests/sys/noticeReceiveManage.js create mode 100644 Web/src/common/api/requests/sys/onlineUserManage.js create mode 100644 Web/src/common/api/requests/sys/orgManage.js create mode 100644 Web/src/common/api/requests/sys/posManage.js create mode 100644 Web/src/common/api/requests/sys/roleManage.js create mode 100644 Web/src/common/api/requests/sys/smsManage.js create mode 100644 Web/src/common/api/requests/sys/tenantManage.js create mode 100644 Web/src/common/api/requests/sys/timersManage.js create mode 100644 Web/src/common/api/requests/sys/userManage.js create mode 100644 Web/src/common/api/status.js create mode 100644 Web/src/common/login/index.js create mode 100644 Web/src/common/storage/index.js create mode 100644 Web/src/common/token/index.js create mode 100644 Web/src/components/ant-icon/index.jsx create mode 100644 Web/src/components/authority-view/index.jsx create mode 100644 Web/src/components/authorized/handler.js create mode 100644 Web/src/components/authorized/index.jsx create mode 100644 Web/src/components/business/house-log/index.jsx create mode 100644 Web/src/components/component-dynamic/index.jsx create mode 100644 Web/src/components/container/index.jsx create mode 100644 Web/src/components/form/braft-editor/index.jsx create mode 100644 Web/src/components/form/color-selector/index.jsx create mode 100644 Web/src/components/form/input-number-range/index.jsx create mode 100644 Web/src/components/icon-selector/icons.js create mode 100644 Web/src/components/icon-selector/index.jsx create mode 100644 Web/src/components/image/index.jsx create mode 100644 Web/src/components/index.js create mode 100644 Web/src/components/modal-form/index.jsx create mode 100644 Web/src/components/notice-detail/index.jsx create mode 100644 Web/src/components/photo-preview/index.jsx create mode 100644 Web/src/components/query-list/index.jsx create mode 100644 Web/src/components/query-table-actions/index.jsx create mode 100644 Web/src/components/query-table/index.jsx create mode 100644 Web/src/components/query-tree-layout/index.jsx create mode 100644 Web/src/index.js create mode 100644 Web/src/pages/business/house/code/form/index.jsx create mode 100644 Web/src/pages/business/house/code/form/part.jsx create mode 100644 Web/src/pages/business/house/code/index.jsx create mode 100644 Web/src/pages/business/house/company/form.jsx create mode 100644 Web/src/pages/business/house/company/index.jsx create mode 100644 Web/src/pages/business/house/info/form/base/aspect.jsx create mode 100644 Web/src/pages/business/house/info/form/base/attachments.jsx create mode 100644 Web/src/pages/business/house/info/form/base/building.jsx create mode 100644 Web/src/pages/business/house/info/form/base/drawing.jsx create mode 100644 Web/src/pages/business/house/info/form/base/identification.jsx create mode 100644 Web/src/pages/business/house/info/form/base/index.jsx create mode 100644 Web/src/pages/business/house/info/form/base/investigation.jsx create mode 100644 Web/src/pages/business/house/info/form/base/ownership.jsx create mode 100644 Web/src/pages/business/house/info/form/base/unit.jsx create mode 100644 Web/src/pages/business/house/info/form/index.jsx create mode 100644 Web/src/pages/business/house/info/form/patrol/base.jsx create mode 100644 Web/src/pages/business/house/info/form/patrol/grade.jsx create mode 100644 Web/src/pages/business/house/info/form/patrol/handling.jsx create mode 100644 Web/src/pages/business/house/info/form/patrol/index.jsx create mode 100644 Web/src/pages/business/house/info/form/patrol/inspection.jsx create mode 100644 Web/src/pages/business/house/info/form/patrol/investigation.jsx create mode 100644 Web/src/pages/business/house/info/form/patrol/result.jsx create mode 100644 Web/src/pages/business/house/info/index.jsx create mode 100644 Web/src/pages/business/house/member/data.jsx create mode 100644 Web/src/pages/business/house/member/form.jsx create mode 100644 Web/src/pages/business/house/member/index.jsx create mode 100644 Web/src/pages/business/house/member/selector/index.jsx create mode 100644 Web/src/pages/business/house/member/selector/selected-list.jsx create mode 100644 Web/src/pages/business/house/member/selector/selector-list.jsx create mode 100644 Web/src/pages/business/house/project/form.jsx create mode 100644 Web/src/pages/business/house/project/index.jsx create mode 100644 Web/src/pages/business/house/query/detail.jsx create mode 100644 Web/src/pages/business/house/query/index.jsx create mode 100644 Web/src/pages/business/house/task/check/index.jsx create mode 100644 Web/src/pages/business/house/task/index.jsx create mode 100644 Web/src/pages/business/house/zone/form.jsx create mode 100644 Web/src/pages/business/house/zone/index.jsx create mode 100644 Web/src/pages/business/inspection/dir/index.jsx create mode 100644 Web/src/pages/business/inspection/dir/preview.jsx create mode 100644 Web/src/pages/business/inspection/dir/score.jsx create mode 100644 Web/src/pages/business/inspection/register/detail.jsx create mode 100644 Web/src/pages/business/inspection/register/form.jsx create mode 100644 Web/src/pages/business/inspection/register/index.jsx create mode 100644 Web/src/pages/business/inspection/review/history.jsx create mode 100644 Web/src/pages/business/inspection/review/index.jsx create mode 100644 Web/src/pages/business/inspection/review/list.jsx create mode 100644 Web/src/pages/business/inspection/review/update.jsx create mode 100644 Web/src/pages/business/statistics/summary/index.jsx create mode 100644 Web/src/pages/business/statistics/summary/tab1/charts.jsx create mode 100644 Web/src/pages/business/statistics/summary/tab1/index.jsx create mode 100644 Web/src/pages/business/statistics/summary/tab1/table.jsx create mode 100644 Web/src/pages/business/statistics/summary/tab2/charts.jsx create mode 100644 Web/src/pages/business/statistics/summary/tab2/index.jsx create mode 100644 Web/src/pages/business/statistics/summary/tab2/table.jsx create mode 100644 Web/src/pages/home/business/inspection.jsx create mode 100644 Web/src/pages/home/charts.jsx create mode 100644 Web/src/pages/home/index.jsx create mode 100644 Web/src/pages/home/list.jsx create mode 100644 Web/src/pages/home/notice.jsx create mode 100644 Web/src/pages/home/statistics.jsx create mode 100644 Web/src/pages/home/task.jsx create mode 100644 Web/src/pages/system/account/base.jsx create mode 100644 Web/src/pages/system/account/index.jsx create mode 100644 Web/src/pages/system/account/setting/info.jsx create mode 100644 Web/src/pages/system/account/setting/satety/index.jsx create mode 100644 Web/src/pages/system/account/setting/satety/mail.jsx create mode 100644 Web/src/pages/system/account/setting/satety/password.jsx create mode 100644 Web/src/pages/system/account/setting/satety/phone.jsx create mode 100644 Web/src/pages/system/app/form.jsx create mode 100644 Web/src/pages/system/app/index.jsx create mode 100644 Web/src/pages/system/area/form.jsx create mode 100644 Web/src/pages/system/area/index.jsx create mode 100644 Web/src/pages/system/config/form.jsx create mode 100644 Web/src/pages/system/config/index.jsx create mode 100644 Web/src/pages/system/dict/dictdata/form.jsx create mode 100644 Web/src/pages/system/dict/dictdata/index.jsx create mode 100644 Web/src/pages/system/dict/form.jsx create mode 100644 Web/src/pages/system/dict/index.jsx create mode 100644 Web/src/pages/system/doc/back-end/application/dto.jsx create mode 100644 Web/src/pages/system/doc/back-end/application/entity.jsx create mode 100644 Web/src/pages/system/doc/back-end/application/index.jsx create mode 100644 Web/src/pages/system/doc/back-end/application/interface.jsx create mode 100644 Web/src/pages/system/doc/back-end/application/service.jsx create mode 100644 Web/src/pages/system/doc/back-end/database/index.jsx create mode 100644 Web/src/pages/system/doc/back-end/database/migrations.jsx create mode 100644 Web/src/pages/system/doc/back-end/index.jsx create mode 100644 Web/src/pages/system/doc/front-end/api/index.jsx create mode 100644 Web/src/pages/system/doc/front-end/api/setting.jsx create mode 100644 Web/src/pages/system/doc/front-end/api/usage.jsx create mode 100644 Web/src/pages/system/doc/front-end/auth/index.jsx create mode 100644 Web/src/pages/system/doc/front-end/index.jsx create mode 100644 Web/src/pages/system/doc/front-end/seed/index.jsx create mode 100644 Web/src/pages/system/doc/front-end/util/dict.jsx create mode 100644 Web/src/pages/system/doc/front-end/util/file.jsx create mode 100644 Web/src/pages/system/doc/front-end/util/format.jsx create mode 100644 Web/src/pages/system/doc/front-end/util/global.jsx create mode 100644 Web/src/pages/system/doc/front-end/util/index.jsx create mode 100644 Web/src/pages/system/doc/front-end/util/query.jsx create mode 100644 Web/src/pages/system/doc/front-end/util/style.jsx create mode 100644 Web/src/pages/system/doc/front-end/window/close.jsx create mode 100644 Web/src/pages/system/doc/front-end/window/index.jsx create mode 100644 Web/src/pages/system/doc/front-end/window/open.jsx create mode 100644 Web/src/pages/system/doc/front-end/window/reload.jsx create mode 100644 Web/src/pages/system/doc/highlighter.jsx create mode 100644 Web/src/pages/system/doc/index.jsx create mode 100644 Web/src/pages/system/file/index.jsx create mode 100644 Web/src/pages/system/log/oplog/index.jsx create mode 100644 Web/src/pages/system/log/vislog/index.jsx create mode 100644 Web/src/pages/system/machine/base.jsx create mode 100644 Web/src/pages/system/machine/disk-charts.jsx create mode 100644 Web/src/pages/system/machine/index.jsx create mode 100644 Web/src/pages/system/machine/use-charts.jsx create mode 100644 Web/src/pages/system/menu/form.jsx create mode 100644 Web/src/pages/system/menu/index.jsx create mode 100644 Web/src/pages/system/notice/form.jsx create mode 100644 Web/src/pages/system/notice/index.jsx create mode 100644 Web/src/pages/system/noticeReceived/index.jsx create mode 100644 Web/src/pages/system/org/form.jsx create mode 100644 Web/src/pages/system/org/index.jsx create mode 100644 Web/src/pages/system/pos/form.jsx create mode 100644 Web/src/pages/system/pos/index.jsx create mode 100644 Web/src/pages/system/role/data.jsx create mode 100644 Web/src/pages/system/role/form.jsx create mode 100644 Web/src/pages/system/role/index.jsx create mode 100644 Web/src/pages/system/role/menu.jsx create mode 100644 Web/src/pages/system/timers/form.jsx create mode 100644 Web/src/pages/system/timers/index.jsx create mode 100644 Web/src/pages/system/user/data.jsx create mode 100644 Web/src/pages/system/user/form.jsx create mode 100644 Web/src/pages/system/user/index.jsx create mode 100644 Web/src/pages/system/user/role.jsx create mode 100644 Web/src/reportWebVitals.js create mode 100644 Web/src/router/config.js create mode 100644 Web/src/router/index.jsx create mode 100644 Web/src/router/navigationGuards.jsx create mode 100644 Web/src/store/index.js create mode 100644 Web/src/store/reducer/business.js create mode 100644 Web/src/store/reducer/dict-data.js create mode 100644 Web/src/store/reducer/index.js create mode 100644 Web/src/store/reducer/layout.js create mode 100644 Web/src/store/reducer/nav.js create mode 100644 Web/src/store/reducer/notice.js create mode 100644 Web/src/store/reducer/pane.js create mode 100644 Web/src/store/reducer/user.js create mode 100644 Web/src/util/des/index.js create mode 100644 Web/src/util/dic/index.js create mode 100644 Web/src/util/file/index.js create mode 100644 Web/src/util/format/index.js create mode 100644 Web/src/util/global/index.js create mode 100644 Web/src/util/query/index.js create mode 100644 Web/src/util/rsa/index.js create mode 100644 Web/src/util/tool/index.js create mode 100644 Web/src/views/error/404.jsx create mode 100644 Web/src/views/login/index.jsx create mode 100644 Web/src/views/main/_layout/content/index.jsx create mode 100644 Web/src/views/main/_layout/header/index.jsx create mode 100644 Web/src/views/main/_layout/header/notice.jsx create mode 100644 Web/src/views/main/_layout/header/search.jsx create mode 100644 Web/src/views/main/_layout/header/user.jsx create mode 100644 Web/src/views/main/_layout/header/weather.jsx create mode 100644 Web/src/views/main/_layout/logo.jsx create mode 100644 Web/src/views/main/_layout/sider/index.jsx create mode 100644 Web/src/views/main/_layout/sider/menu.jsx create mode 100644 Web/src/views/main/index.jsx create mode 100644 Web/yarn.lock delete mode 160000 framework diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1b0971a --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +bin/ +obj/ +*.user +/Publish +/packages +.vs +Logs/ +Upload +dbsettings.Development.json diff --git a/.gitmodules b/.gitmodules index 7f59953..73fc9bf 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ -[submodule "framework"] - path = framework - url = http://118.178.224.202:3000/ewide/ewide_core +[submodule "Framework/EwideCode"] + path = EwideCore + url = http://118.178.224.202:3000/ewide/ewide_core.git diff --git a/Api/Ewide.Application/Entity/BsHouseCode.cs b/Api/Ewide.Application/Entity/BsHouseCode.cs new file mode 100644 index 0000000..ded5654 --- /dev/null +++ b/Api/Ewide.Application/Entity/BsHouseCode.cs @@ -0,0 +1,52 @@ +using Microsoft.EntityFrameworkCore; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace Ewide.Application +{ + [Table("bs_house_code")] + [Comment("房屋编码表")] + public class BsHouseCode : Core.DEntityBase + { + [Comment("系统中唯一的房屋编码,生成即不再变更")] + [MaxLength(50)] + [Required] + public string HouseCode { get; set; } + + [Comment("编号")] + [MaxLength(3)] + [Required] + public int No { get; set; } + + [Comment("项目ID")] + [MaxLength(36)] + [Required] + public string ProjectId { get; set; } + + [Comment("片区ID")] + [MaxLength(36)] + [Required] + public string ZoneId { get; set; } + + [Comment("详细地址")] + [MaxLength(500)] + [Required] + public string Address { get; set; } + + [Comment("性质")] + [Required] + public int Type { get; set; } + + [Comment("所属行业")] + [Required] + public int Industry { get; set; } + + [Comment("坐标-经度")] + [MaxLength(50)] + public string Lng { get; set; } + + [Comment("坐标-纬度")] + [MaxLength(50)] + public string Lat { get; set; } + } +} diff --git a/Api/Ewide.Application/Entity/BsHouseCompany.cs b/Api/Ewide.Application/Entity/BsHouseCompany.cs new file mode 100644 index 0000000..0849cdc --- /dev/null +++ b/Api/Ewide.Application/Entity/BsHouseCompany.cs @@ -0,0 +1,36 @@ +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application +{ + [Table("bs_house_company")] + [Comment("房屋相关单位表")] + public class BsHouseCompany : Core.DEntityBase + { + /// + /// 单位类型,多选 + /// + [Comment("单位类型,多选")] + [MaxLength(20)] + public string Type { get; set; } + + /// + /// 单位名称 + /// + [Comment("单位名称")] + [MaxLength(200)] + public string Name { get; set; } + + /// + /// 信息 + /// + [Comment("信息")] + public string Info { get; set; } + } +} diff --git a/Api/Ewide.Application/Entity/BsHouseInfo.cs b/Api/Ewide.Application/Entity/BsHouseInfo.cs new file mode 100644 index 0000000..f7c8ea8 --- /dev/null +++ b/Api/Ewide.Application/Entity/BsHouseInfo.cs @@ -0,0 +1,378 @@ +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application +{ + [Table("bs_house_info")] + [Comment("房屋信息表")] + public class BsHouseInfo : Core.DEntityBase + { + /// + /// HouseCode主键ID + /// + [Comment("bs_house_code主键Id")] + [MaxLength(36)] + [Required] + public string HouseCodeId { get; set; } + + /// + /// 幢名称 + /// + [Comment("幢名称")] + [MaxLength(255)] + public string BuildingName { get; set; } + + /// + /// 土地性质 + /// + [Comment("土地性质")] + public int? LandAttribute { get; set; } + + /// + /// 结构类型 + /// + [Comment("结构类型")] + public int? StructureType { get; set; } + + /// + /// 基础情况 + /// + [Comment("基础情况")] + public int? BaseInfo { get; set; } + + /// + /// 抗震等级 + /// + [Comment("抗震等级")] + public int? SeismicGrade { get; set; } + + /// + /// 竣工日期 + /// + [Comment("竣工日期")] + public DateTime? CompletedDate { get; set; } + + /// + /// 设计使用年限 + /// + [Comment("设计使用年限")] + public int? UsefulYear { get; set; } + + /// + /// 总层数 + /// + [Comment("总层数")] + public int? TotalFloor { get; set; } + + /// + /// 地上层数 + /// + [Comment("地上层数")] + public int? LandFloorCount { get; set; } + + /// + /// 地上商业层数开始 + /// + [Comment("地上商业层数开始")] + public int? LandBsFloorStart { get; set; } + + /// + /// 地上商业层数结束 + /// + [Comment("地上商业层数结束")] + public int? LandBsFloorEnd { get; set; } + + /// + /// 地上车棚层开始 + /// + [Comment("地上车棚层开始")] + public int? LandBikeFloorStart { get; set; } + + /// + /// 地上住宅层开始 + /// + [Comment("地上住宅层开始")] + public int? LandResidenceFloorStart { get; set; } + + /// + /// 地上住宅层结束 + /// + [Comment("地上住宅层结束")] + public int? LandResidenceFloorEnd { get; set; } + + /// + /// 地下层数 + /// + [Comment("地下层数")] + public int? UnderFloorCount { get; set; } + + /// + /// 总建筑面积 + /// + [Comment("总建筑面积")] + public float? TotalArea { get; set; } + + /// + /// 有无建筑幕墙 + /// + [Comment("有无建筑幕墙")] + public int? CurtainWall { get; set; } + + /// + /// 有无面砖 + /// + [Comment("有无面砖")] + public int? FaceBrick { get; set; } + + /// + /// 有无涂料 + /// + [Comment("有无涂料")] + public int? Coating { get; set; } + + /// + /// 有无粉刷 + /// + [Comment("有无粉刷")] + public int? Painting { get; set; } + + /// + /// 电梯 + /// + [Comment("电梯")] + [MaxLength(20)] + public string Elevator { get; set; } + + /// + /// 总户数(户) + /// + [Comment("总户数(户)")] + public int? HouseHolds { get; set; } + + /// + /// 房屋单元数 + /// + [Comment("房屋单元数")] + public int? Units { get; set; } + + /// + /// 各单元每层户数(户) + /// + [Comment("各单元每层户数(户)")] + public int? UnitFloorHolds { get; set; } + + /// + /// 建设单位ID + /// + [Comment("建设单位ID")] + [MaxLength(36)] + public string BuildingUnitId { get; set; } + + /// + /// 设计单位ID + /// + [Comment("设计单位ID")] + [MaxLength(36)] + public string DesingerUnitId { get; set; } + + /// + /// 施工单位ID + /// + [Comment("施工单位ID")] + [MaxLength(36)] + public string ConstructionUnitId { get; set; } + + /// + /// 监理单位ID + /// + [Comment("监理单位ID")] + [MaxLength(36)] + public string MonitorUnitId { get; set; } + + /// + /// 产权性质 + /// + [Comment("产权性质")] + [MaxLength(100)] + public string PropertyRights { get; set; } + + /// + /// 总共套数 + /// + [Comment("总共套数")] + public int? HouseCount { get; set; } + + /// + /// 直管公房套数 + /// + [Comment("直管公房套数")] + public int? StraightHouseCount { get; set; } + + /// + /// 自管公房套数 + /// + [Comment("自管公房套数")] + public int? SelfHouseCount { get; set; } + + /// + /// 私房套数 + /// + [Comment("私房套数")] + public int? PrivateHouseCount { get; set; } + + /// + /// 商品房套数 + /// + [Comment("商品房套数")] + public int? BusinessCount { get; set; } + + /// + /// 房改房套数 + /// + [Comment("房改房套数")] + public int? ChangeHouseCount { get; set; } + + /// + /// 拆迁安置房套数 + /// + [Comment("拆迁安置房套数")] + public int? ResettlementHouseCount { get; set; } + + /// + /// 其它套数 + /// + [Comment("其它套数")] + public int? OtherCount { get; set; } + + /// + /// 产权单位ID + /// + [Comment("产权单位ID")] + [MaxLength(36)] + public string PropertyUnitId { get; set; } + + /// + /// 物业单位ID + /// + [Comment("物业单位ID")] + [MaxLength(36)] + public string WuYeUnitId { get; set; } + + /// + /// 图纸资料存档处 + /// + [Comment("图纸资料存档处")] + [MaxLength(50)] + public string DrawingMaterial { get; set; } + + /// + /// 其他图纸存档 + /// + [Comment("其他图纸存档")] + [MaxLength(100)] + public string DrawingMaterialText { get; set; } + + /// + /// 立项文件 + /// + [Comment("立项文件")] + [MaxLength(2000)] + public string AnEntryDocument { get; set; } + + /// + /// 规划许可 + /// + [Comment("规划许可")] + [MaxLength(2000)] + public string PlanningPermission { get; set; } + + /// + /// 竣工验收备案 + /// + [Comment("竣工验收备案")] + [MaxLength(2000)] + public string CompletionRecord { get; set; } + + /// + /// 监理资料 + /// + [Comment("监理资料")] + [MaxLength(2000)] + public string MonitorDocument { get; set; } + + /// + /// 鉴定报告 + /// + [Comment("鉴定报告")] + [MaxLength(2000)] + public string IdentificationReport { get; set; } + + /// + /// 其它资料 + /// + [Comment("其它资料")] + [MaxLength(2000)] + public string OtherDocument { get; set; } + + /// + /// 外立面照片 + /// + [Comment("外立面照片")] + [MaxLength(2000)] + public string FacadePhoto { get; set; } + + /// + /// 房屋等级 1,2,3,4,C,d + /// + [Comment("房屋等级 1,2,3,4,C,d")] + public int? HouseGrade { get; set; } + + /// + /// 房屋使用状态 + /// + [Comment("房屋使用状态")] + public int? HouseUsedStatus { get; set; } + + /// + /// -1 退回(审核被退回的数据) 1、待建档(需要建档的数据未暂存未保存的)2、暂存(点击了暂存的数据)3、待提交(点击了保存的数据) 5、审核中6、审核通过 + /// + [Comment("-1 退回(审核被退回的数据) 1、待建档(需要建档的数据未暂存未保存的)2、暂存(点击了暂存的数据)3、待提交(点击了保存的数据) 5、审核中6、审核通过")] + [Required] + public int State { get; set; } + + /// + /// 调查登记机构 + /// + [Comment("调查登记机构")] + [MaxLength(100)] + public string InvestigateAgency { get; set; } + + /// + /// 纸质资料调查人 + /// + [Comment("纸质资料调查人")] + [MaxLength(50)] + public string InvestigateUser { get; set; } + + /// + /// 纸质资料审核人 + /// + [Comment("纸质资料审核人")] + [MaxLength(50)] + public string OfflineAuditor { get; set; } + + /// + /// 主管部门 + /// + [Comment("主管部门")] + [MaxLength(50)] + public string CompetentDepartment { get; set; } + + } +} diff --git a/Api/Ewide.Application/Entity/BsHouseLog.cs b/Api/Ewide.Application/Entity/BsHouseLog.cs new file mode 100644 index 0000000..bdcd8bd --- /dev/null +++ b/Api/Ewide.Application/Entity/BsHouseLog.cs @@ -0,0 +1,46 @@ +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application +{ + [Table("bs_house_log")] + [Comment("房屋流转日志")] + public class BsHouseLog : Core.DEntityBase + { + [Comment("房屋编码Id")] + [MaxLength(36)] + public string HouseCodeId { get; set; } + + [Comment("目标处理人Id,可多个")] + public string TargetUserIds { get; set; } + + [Comment("步骤类型")] + public HouseLogType Type { get; set; } + + [Comment("状态")] + public HouseLogStatus Status { get; set; } + + [Comment("备注信息")] + public string Remark { get; set; } + + [Comment("完成时间")] + public DateTime? FinishedTime { get; set; } + + [Comment("完成者Id")] + [MaxLength(36)] + public string FinishedUserId { get; set; } + + [Comment("完成者名称")] + [MaxLength(20)] + public string FinishedUserName { get; set; } + + [Comment("排序")] + public int Sort { get; set; } + } +} diff --git a/Api/Ewide.Application/Entity/BsHouseMemberRelation.cs b/Api/Ewide.Application/Entity/BsHouseMemberRelation.cs new file mode 100644 index 0000000..98e42e2 --- /dev/null +++ b/Api/Ewide.Application/Entity/BsHouseMemberRelation.cs @@ -0,0 +1,26 @@ +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application +{ + [Table("bs_house_member_relation")] + [Comment("房屋与人员关联表")] + public class BsHouseMemberRelation : Core.DEntityBase + { + [Comment("sys_user主键Id")] + [MaxLength(36)] + [Required] + public string SysUserId { get; set; } + + [Comment("bs_house_code主键Id")] + [MaxLength(36)] + [Required] + public string HouseCodeId { get; set; } + } +} diff --git a/Api/Ewide.Application/Entity/BsHouseProjectInfo.cs b/Api/Ewide.Application/Entity/BsHouseProjectInfo.cs new file mode 100644 index 0000000..1f294e2 --- /dev/null +++ b/Api/Ewide.Application/Entity/BsHouseProjectInfo.cs @@ -0,0 +1,38 @@ +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application.Entity +{ + [Table("bs_house_projectinfo")] + [Comment("项目表")] + public class BsHouseProjectInfo : Core.DEntityBase + { + [Comment("名称")] + [MaxLength(100)] + [Required] + public string Name { get; set; } + + [Comment("备注")] + [MaxLength(1000)] + public string Note { get; set; } + + [Comment("排序")] + [Required] + public int Sort { get; set; } + + [Comment("区域ID")] + [MaxLength(36)] + [Required] + public string AreaCode { get; set; } + + [Comment("类型")] + [Required] + public int Type { get; set; } + } +} diff --git a/Api/Ewide.Application/Entity/BsHouseTask.cs b/Api/Ewide.Application/Entity/BsHouseTask.cs new file mode 100644 index 0000000..fde1073 --- /dev/null +++ b/Api/Ewide.Application/Entity/BsHouseTask.cs @@ -0,0 +1,266 @@ +using Microsoft.EntityFrameworkCore; +using System; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace Ewide.Application +{ + [Table("bs_house_task")] + [Comment("房屋巡查任务表")] + public class BsHouseTask : Core.DEntityBase + { + /// + /// bs_house_code主键Id + /// + [Comment("bs_house_code主键Id")] + [MaxLength(36)] + [Required] + public string HouseCodeId { get; set; } + + /// + /// 巡查日期 + /// + [Comment("巡查日期")] + public DateTime? PatrolDate { get; set; } + + /// + /// 巡查人姓名 + /// + [Comment("巡查人姓名")] + [MaxLength(50)] + public string PatrolUser { get; set; } + + /// + /// 沉降倾斜 + /// + [Comment("沉降倾斜")] + [MaxLength(1000)] + public string SettlementTilt { get; set; } + + /// + /// 沉降倾斜附件 + /// + [Comment("沉降倾斜附件")] + [MaxLength(2000)] + public string SettlementTiltFiles { get; set; } + + /// + /// 其他情况 + /// + [Comment("其他情况")] + [MaxLength(1000)] + public string OtherInfo { get; set; } + + /// + /// 其他情况附件 + /// + [Comment("其他情况附件")] + [MaxLength(2000)] + public string OtherInfoFiles { get; set; } + + /// + /// 初始等级 + /// + [Comment("初始等级")] + public int? InitGrade { get; set; } + + /// + /// 损坏等级 + /// + [Comment("损坏等级")] + public int? DamageGrade { get; set; } + + /// + /// 综合等级 + /// + [Comment("综合等级")] + public int? ComprehensiveGrade { get; set; } + + /// + /// 房屋场地 + /// + [Comment("房屋场地")] + [MaxLength(100)] + public string HouseSite { get; set; } + + /// + /// 相邻施工 + /// + [Comment("相邻施工")] + [MaxLength(100)] + public string AdjacentConstruction { get; set; } + + /// + /// 化学侵蚀 + /// + [Comment("化学侵蚀")] + [MaxLength(100)] + public string ChemicalErosion { get; set; } + + /// + /// 结构拆改 + /// + [Comment("结构拆改")] + public int? StructuralDismantling { get; set; } + + /// + /// 加层改造 + /// + [Comment("加层改造")] + public int? AddingLayer { get; set; } + + /// + /// 修缮加固 + /// + [Comment("修缮加固")] + [MaxLength(100)] + public string RepairAndReinforce { get; set; } + + /// + /// 历史灾害 + /// + [Comment("历史灾害")] + [MaxLength(100)] + public string HistoricalCalamity { get; set; } + + /// + /// 使用功能变更 + /// + [Comment("使用功能变更")] + [MaxLength(100)] + public string FunctionalChange { get; set; } + + /// + /// 其他调查内容 + /// + [Comment("其他调查内容")] + [MaxLength(1000)] + public string OtherContents { get; set; } + + /// + /// 主要安全隐患综述 + /// + [Comment("主要安全隐患综述")] + [MaxLength(1000)] + public string MainSafety { get; set; } + + /// + /// 处理意见 + /// + [Comment("处理意见")] + public int? HandlingOpinion { get; set; } + + /// + /// 处理意见备注 + /// + [Comment("处理意见备注")] + [MaxLength(1000)] + public string HandlingOpinionRemark { get; set; } + + /// + /// 整改情况 + /// + [Comment("整改情况")] + public int? RectifyAndReform { get; set; } + + /// + /// 整改情况备注 + /// + [Comment("整改情况备注")] + [MaxLength(1000)] + public string RectifyAndReformRemark { get; set; } + + /// + /// 巡查结果:1正常,-1异常 + /// + [Comment("巡查结果:1正常,-1异常")] + public int? PatrolResult { get; set; } + + /// + /// 巡查异常描述 + /// + [Comment("巡查异常描述")] + [MaxLength(1000)] + public string PatrolResultRemark { get; set; } + + /// + /// 任务人员ID + /// + [Comment("任务人员ID")] + [MaxLength(36)] + public string UserID { get; set; } + + /// + /// 任务截止时间 + /// + [Comment("任务截止时间")] + public DateTime? EndTime { get; set; } + + /// + /// 是否过期 + /// + [Comment("是否过期")] + public bool? IsDelay { get; set; } + + /// + /// -1:退回0:待处理1:保存待提交2:待审核3:审核通过 + /// + [Comment("-1:退回0:待处理1:保存待提交2:待审核6:审核通过")] + public int Status { get; set; } = 0; + + /// + /// 0:建档任务1:系统派发的巡查任务2:主动巡查任务 + /// + [Comment("0:建档任务1:系统派发的巡查任务2:主动巡查任务")] + public int? TaskType { get; set; } + + /// + /// 上报街道 + /// + [Comment("上报街道")] + public int? ReportRoad { get; set; } + + /// + /// 上报街道时间 + /// + [Comment("上报街道时间")] + public DateTime? ReportRoadTime { get; set; } + + /// + /// 上报区住建 + /// + [Comment("上报区住建")] + public int? ReportArea { get; set; } + + /// + /// 上报区住建时间 + /// + [Comment("上报区住建时间")] + public DateTime? ReportAreaTime { get; set; } + + /// + /// 上报备注 + /// + [Comment("上报备注")] + [MaxLength(1000)] + public string ReportRemark { get; set; } + + /// + /// 提交时间 + /// + [Comment("提交时间")] + public DateTime? SubmitTime { get; set; } + + /// + /// 最后提交时间 + /// + [Comment("最后提交时间")] + public DateTime? LastSubmitTime { get; set; } + + /// + /// 是否有效 + /// + [Comment("是否有效")] + public bool IsEnabled { get; set; } = true; + } +} diff --git a/Api/Ewide.Application/Entity/BsHouseTaskCheckRecord.cs b/Api/Ewide.Application/Entity/BsHouseTaskCheckRecord.cs new file mode 100644 index 0000000..5fdf4e1 --- /dev/null +++ b/Api/Ewide.Application/Entity/BsHouseTaskCheckRecord.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using Microsoft.EntityFrameworkCore; + +namespace Ewide.Application +{ + [Table("bs_house_task_check_record")] + [Comment("房屋任务审核记录表")] + public class BsHouseTaskCheckRecord : Core.DEntityBase + { + /// + /// 任务Id + /// + [Comment("任务Id")] + [MaxLength(36)] + public string TaskId { get; set; } + + /// + /// 通过1;退回-1 + /// + [Comment("通过3;退回-1")] + public int PassOrBack { get; set; } + + /// + /// 审核内容 + /// + [Comment("审核内容")] + [MaxLength(500)] + public string Content { get; set; } + } +} diff --git a/Api/Ewide.Application/Entity/BsHouseTaskOptions.cs b/Api/Ewide.Application/Entity/BsHouseTaskOptions.cs new file mode 100644 index 0000000..c279a1b --- /dev/null +++ b/Api/Ewide.Application/Entity/BsHouseTaskOptions.cs @@ -0,0 +1,60 @@ +using Microsoft.EntityFrameworkCore; +using System; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +namespace Ewide.Application +{ + [Table("bs_house_task_options")] + [Comment("房屋巡查任务选项表")] + public class BsHouseTaskOptions : Core.DEntityBase + { + /// + /// bs_house_code主键Id + /// + [Comment("bs_house_code主键Id")] + [MaxLength(36)] + [Required] + public string TaskId { get; set; } + + /// + /// 字典类型 + /// + [Comment("字典类型")] + [MaxLength(50)] + public string DictType { get; set; } + + /// + /// 字典code + /// + [Comment("字典code")] + [MaxLength(50)] + public string DictCode { get; set; } + + /// + /// 字典值 + /// + [Comment("字典值")] + [MaxLength(100)] + public string DictValue { get; set; } + + /// + /// 备注 + /// + [Comment("备注")] + [MaxLength(500)] + public string Remark { get; set; } + + /// + /// 附件 + /// + [Comment("附件")] + [MaxLength(2000)] + public string File { get; set; } + + /// + /// 是否选中 + /// + [Comment("是否选中")] + public bool? Checked { get; set; } + } +} diff --git a/Api/Ewide.Application/Entity/BsInspectionMemberRelation.cs b/Api/Ewide.Application/Entity/BsInspectionMemberRelation.cs new file mode 100644 index 0000000..adfbb61 --- /dev/null +++ b/Api/Ewide.Application/Entity/BsInspectionMemberRelation.cs @@ -0,0 +1,26 @@ +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application +{ + [Table("bs_inspection_member_relation")] + [Comment("鉴定机构人员表")] + public class BsInspectionMemberRelation : Core.DEntityBase + { + [Comment("sys_user主键Id")] + [MaxLength(36)] + [Required] + public string SysUserId { get; set; } + + [Comment("bs_inspection_org主键Id")] + [MaxLength(36)] + [Required] + public string InspectionOrgId { get; set; } + } +} diff --git a/Api/Ewide.Application/Entity/BsInspectionOrg.cs b/Api/Ewide.Application/Entity/BsInspectionOrg.cs new file mode 100644 index 0000000..941b23f --- /dev/null +++ b/Api/Ewide.Application/Entity/BsInspectionOrg.cs @@ -0,0 +1,72 @@ +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application +{ + [Table("bs_inspection_org")] + [Comment("鉴定机构表")] + public class BsInspectionOrg : Core.DEntityBase + { + [Comment("名称")] + [MaxLength(100)] + public string Name { get; set; } + + [Comment("机构备案编号(YYYYNNN,如2021001)")] + [MaxLength(10)] + public string Code { get; set; } + + [Comment("社会统一信用代码")] + [MaxLength(50)] + public string CreditCode { get; set; } + + [Comment("地址")] + public string Address { get; set; } + + [Comment("联系人")] + [MaxLength(50)] + public string Contacts { get; set; } + + [Comment("联系人手机号")] + [MaxLength(50)] + public string ContactsPhone { get; set; } + + [Comment("法人代表")] + [MaxLength(50)] + public string LegalPerson { get; set; } + + [Comment("固定电话")] + [MaxLength(50)] + public string OrgTelephone { get; set; } + + [Comment("名录申请表")] + public string ApplicationFormFiles { get; set; } + + [Comment("机构营业执照和法人证书")] + public string OrgBusinessLicenseFiles { get; set; } + + [Comment("建设工程质量检测资质证书或检验检测机构资质认定证书")] + public string InspectionQualificationCertificateFiles { get; set; } + + [Comment("办公场所资料(房产证、不动产登记证或房屋租赁合同等)")] + public string OfficeInformationFiles { get; set; } + + [Comment("符合条件的从业人员职称证明、学历证明、劳动合同、社保证明等")] + public string EmployeeCertificateFiles { get; set; } + + [Comment("开展房屋安全鉴定工作必要的设备计量检定证书、校准证书")] + public string CalibrationCertificateFiles { get; set; } + + [Comment("其他资料")] + public string OtherFiles { get; set; } + + [Comment("状态 0登记中 1正常 -1已撤销 -2因红牌撤销")] + public InspectionOrgStatus Status { get; set; } + + } +} diff --git a/Api/Ewide.Application/Entity/BsInspectionOrgDirDetail.cs b/Api/Ewide.Application/Entity/BsInspectionOrgDirDetail.cs new file mode 100644 index 0000000..bab8b29 --- /dev/null +++ b/Api/Ewide.Application/Entity/BsInspectionOrgDirDetail.cs @@ -0,0 +1,34 @@ +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application +{ + [Table("bs_inspection_org_dir_detail")] + [Comment("名录详情")] + public class BsInspectionOrgDirDetail : Core.DEntityBase + { + [Comment("名录Id")] + [MaxLength(36)] + [Required] + public string StageId { get; set; } + + [Comment("机构Id")] + [MaxLength(36)] + [Required] + public string OrgId { get; set; } + + [Comment("评分")] + [Required] + public int Score { get; set; } + + [Comment("评分结果 1优秀 2合格 3警告 4除名")] + [Required] + public int ScoreResult { get; set; } + } +} diff --git a/Api/Ewide.Application/Entity/BsInspectionOrgDirStage.cs b/Api/Ewide.Application/Entity/BsInspectionOrgDirStage.cs new file mode 100644 index 0000000..782b9b6 --- /dev/null +++ b/Api/Ewide.Application/Entity/BsInspectionOrgDirStage.cs @@ -0,0 +1,40 @@ +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application +{ + [Table("bs_inspection_org_dir_stage")] + [Comment("名录期数")] + public class BsInspectionOrgDirStage : Core.DEntityBase + { + [Comment("名录期数")] + [Required] + [MaxLength(100)] + public string No { get; set; } + + [Comment("名录包含机构数量(冗余)")] + [Required] + public int OrgAmount { get; set; } + + [Comment("被除名机构数量(冗余)")] + [Required] + public int RemovedOrgAmount { get; set; } + + [Comment("同比上一年新入或回归机构数量(冗余)")] + [Required] + public int NewOrgAmount { get; set; } + + [Comment("状态 0未发布 1已发布")] + [Required] + public int Status { get; set; } + + [Comment("发布时间")] + public DateTime? PublishTime { get; set; } + } +} diff --git a/Api/Ewide.Application/Entity/BsInspectionOrgSetting.cs b/Api/Ewide.Application/Entity/BsInspectionOrgSetting.cs new file mode 100644 index 0000000..348dac7 --- /dev/null +++ b/Api/Ewide.Application/Entity/BsInspectionOrgSetting.cs @@ -0,0 +1,54 @@ +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application +{ + [Table("bs_inspection_org_setting")] + [Comment("鉴定机构相关设置")] + public class BsInspectionOrgSetting : Core.DEntityBase + { + [Comment("设置类型 1申报时间范围")] + public InspectionOrgSettingType Type { get; set; } + + [Comment("设置")] + [Required] + public string Setting { get; set; } + } + + public class BsInspectionOrgSetting_DateRange + { + private DateTime _BeginDate { get; set; } + public DateTime BeginDate + { + get + { + return _BeginDate; + } + set + { + var date = new DateTime(DateTime.Now.Year, value.Month, value.Day); + _BeginDate = date; + } + } + + private DateTime _EndDate { get; set; } + public DateTime EndDate + { + get + { + return _EndDate; + } + set + { + var date = new DateTime(DateTime.Now.Year, value.Month, value.Day); + _EndDate = date; + } + } + } +} diff --git a/Api/Ewide.Application/Entity/BsInspectionOrgUpdate.cs b/Api/Ewide.Application/Entity/BsInspectionOrgUpdate.cs new file mode 100644 index 0000000..76b2d3f --- /dev/null +++ b/Api/Ewide.Application/Entity/BsInspectionOrgUpdate.cs @@ -0,0 +1,82 @@ +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application +{ + /// + /// 记录鉴定机构申请及修改, 在申请/修改时, 只记录在当前表内, 待审核通过将此表内容冗余到主表 + /// + [Table("bs_inspection_org_update")] + [Comment("鉴定机构修改记录表")] + public class BsInspectionOrgUpdate : Core.DEntityBase + { + [Comment("机构Id")] + [MaxLength(36)] + [Required] + public string OrgId { get; set; } + + [Comment("名称")] + [MaxLength(100)] + public string Name { get; set; } + + [Comment("社会统一信用代码")] + [MaxLength(50)] + public string CreditCode { get; set; } + + [Comment("地址")] + [Required] + public string Address { get; set; } + + [Comment("联系人")] + [MaxLength(50)] + public string Contacts { get; set; } + + [Comment("联系人手机号")] + [MaxLength(50)] + public string ContactsPhone { get; set; } + + [Comment("法人代表")] + [MaxLength(50)] + public string LegalPerson { get; set; } + + [Comment("固定电话")] + [MaxLength(50)] + public string OrgTelephone { get; set; } + + [Comment("名录申请表")] + public string ApplicationFormFiles { get; set; } + + [Comment("机构营业执照和法人证书")] + public string OrgBusinessLicenseFiles { get; set; } + + [Comment("建设工程质量检测资质证书或检验检测机构资质认定证书")] + public string InspectionQualificationCertificateFiles { get; set; } + + [Comment("办公场所资料(房产证、不动产登记证或房屋租赁合同等)")] + public string OfficeInformationFiles { get; set; } + + [Comment("符合条件的从业人员职称证明、学历证明、劳动合同、社保证明等")] + public string EmployeeCertificateFiles { get; set; } + + [Comment("开展房屋安全鉴定工作必要的设备计量检定证书、校准证书")] + public string CalibrationCertificateFiles { get; set; } + + [Comment("其他资料")] + public string OtherFiles { get; set; } + + [Comment("记录类型 1登记/回归 2修改")] + public InspectionOrgUpdateType Type { get; set; } + + [Comment("状态 -2放弃 -1退回 1审核中 2审核通过")] + public InspectionOrgUpdateStatus Status { get; set; } + + [Comment("退回理由/备注")] + public string Remark { get; set; } + } +} diff --git a/Api/Ewide.Application/Entity/README.md b/Api/Ewide.Application/Entity/README.md new file mode 100644 index 0000000..59bc7dd --- /dev/null +++ b/Api/Ewide.Application/Entity/README.md @@ -0,0 +1 @@ +/** 您的业务实体文件写在此文件夹下面 **/ diff --git a/Api/Ewide.Application/Enum/DataStatus.cs b/Api/Ewide.Application/Enum/DataStatus.cs new file mode 100644 index 0000000..d073a7f --- /dev/null +++ b/Api/Ewide.Application/Enum/DataStatus.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application +{ + public enum DataStatus + { + /// + /// 审核退回 + /// + [Description("审核退回")] + Back = -1, + + /// + /// 初始未处理 + /// + [Description("初始未处理")] + Init = 0, + + /// + /// 暂存 + /// + [Description("暂存")] + TempSaved = 1, + + /// + /// 已保存,待提交 + /// + [Description("已保存,待提交")] + Saved = 2, + + /// + /// 已提交,待审核 + /// + [Description("已提交,待审核")] + Submited = 3, + + /// + /// 审核通过 + /// + [Description("审核通过")] + Passed = 6 + } +} diff --git a/Api/Ewide.Application/Enum/HouseLog.cs b/Api/Ewide.Application/Enum/HouseLog.cs new file mode 100644 index 0000000..29d707f --- /dev/null +++ b/Api/Ewide.Application/Enum/HouseLog.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application +{ + public enum HouseLogType + { + [Description("创建房屋编码")] + CreateCode = 1, + + [Description("人员选房")] + SelectMember = 2, + + [Description("房屋建档")] + CreateInfo = 3, + + [Description("审核")] + Check = 4, + + [Description("审核通过")] + Agree = 5, + + [Description("审核退回")] + Disagree = 6 + + } + + public enum HouseLogStatus + { + [Description("待处理")] + Handle = 0, + + [Description("正在处理")] + Handling = 1, + + [Description("已处理")] + Handled = 2, + } +} diff --git a/Api/Ewide.Application/Enum/HouseManagerRole.cs b/Api/Ewide.Application/Enum/HouseManagerRole.cs new file mode 100644 index 0000000..bb0909b --- /dev/null +++ b/Api/Ewide.Application/Enum/HouseManagerRole.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application +{ + public enum HouseManagerRole + { + /// + /// 市住建部门 + /// + CityManager, + + /// + /// 区住建部门 + /// + AreaManager, + + /// + /// 街道管理员 + /// + RoadManager, + + /// + /// 片区监管员 + /// + ZoneManager, + + /// + /// 房屋安全管理员 + /// + HouseSecurityManager + } +} diff --git a/Api/Ewide.Application/Enum/InspectionOrgEnum.cs b/Api/Ewide.Application/Enum/InspectionOrgEnum.cs new file mode 100644 index 0000000..a78adc3 --- /dev/null +++ b/Api/Ewide.Application/Enum/InspectionOrgEnum.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application +{ + /// + /// 鉴定机构相关设置 + /// + public enum InspectionOrgSettingType + { + /// + /// 开放时间范围 + /// + DateRange = 1 + } + + /// + /// 鉴定机构状态 + /// + public enum InspectionOrgStatus + { + /// + /// 因红牌撤销 + /// + Delisting = -2, + + /// + /// 撤销 + /// + Revoke = -1, + + /// + /// 登记中 + /// + Register = 0, + + /// + /// 正常 + /// + Normal = 1, + } + + /// + /// 鉴定机构登记/修改类型 + /// + public enum InspectionOrgUpdateType + { + /// + /// 登记/回归 + /// + Register = 1, + + /// + /// 修改 + /// + Update = 2, + } + + /// + /// 鉴定机构登记/修改审核状态 + /// + public enum InspectionOrgUpdateStatus + { + /// + /// 放弃 + /// + Close = -2, + + /// + /// 退回 + /// + Back = -1, + + /// + /// 审核中 + /// + Reviewing = 1, + + /// + /// 审核通过 + /// + Approved = 2, + } +} diff --git a/Api/Ewide.Application/Ewide.Application.csproj b/Api/Ewide.Application/Ewide.Application.csproj new file mode 100644 index 0000000..18a1132 --- /dev/null +++ b/Api/Ewide.Application/Ewide.Application.csproj @@ -0,0 +1,28 @@ + + + + net5.0 + 1701;1702;1591 + Ewide.Application.xml + + + + + + + + + + PreserveNewest + + + + + + + + + + + + diff --git a/Api/Ewide.Application/Ewide.Application.xml b/Api/Ewide.Application/Ewide.Application.xml new file mode 100644 index 0000000..65fc1be --- /dev/null +++ b/Api/Ewide.Application/Ewide.Application.xml @@ -0,0 +1,1647 @@ + + + + Ewide.Application + + + + + 单位类型,多选 + + + + + 单位名称 + + + + + 信息 + + + + + HouseCode主键ID + + + + + 幢名称 + + + + + 土地性质 + + + + + 结构类型 + + + + + 基础情况 + + + + + 抗震等级 + + + + + 竣工日期 + + + + + 设计使用年限 + + + + + 总层数 + + + + + 地上层数 + + + + + 地上商业层数开始 + + + + + 地上商业层数结束 + + + + + 地上车棚层开始 + + + + + 地上住宅层开始 + + + + + 地上住宅层结束 + + + + + 地下层数 + + + + + 总建筑面积 + + + + + 有无建筑幕墙 + + + + + 有无面砖 + + + + + 有无涂料 + + + + + 有无粉刷 + + + + + 电梯 + + + + + 总户数(户) + + + + + 房屋单元数 + + + + + 各单元每层户数(户) + + + + + 建设单位ID + + + + + 设计单位ID + + + + + 施工单位ID + + + + + 监理单位ID + + + + + 产权性质 + + + + + 总共套数 + + + + + 直管公房套数 + + + + + 自管公房套数 + + + + + 私房套数 + + + + + 商品房套数 + + + + + 房改房套数 + + + + + 拆迁安置房套数 + + + + + 其它套数 + + + + + 产权单位ID + + + + + 物业单位ID + + + + + 图纸资料存档处 + + + + + 其他图纸存档 + + + + + 立项文件 + + + + + 规划许可 + + + + + 竣工验收备案 + + + + + 监理资料 + + + + + 鉴定报告 + + + + + 其它资料 + + + + + 外立面照片 + + + + + 房屋等级 1,2,3,4,C,d + + + + + 房屋使用状态 + + + + + -1 退回(审核被退回的数据) 1、待建档(需要建档的数据未暂存未保存的)2、暂存(点击了暂存的数据)3、待提交(点击了保存的数据) 5、审核中6、审核通过 + + + + + 调查登记机构 + + + + + 纸质资料调查人 + + + + + 纸质资料审核人 + + + + + 主管部门 + + + + + bs_house_code主键Id + + + + + 巡查日期 + + + + + 巡查人姓名 + + + + + 沉降倾斜 + + + + + 沉降倾斜附件 + + + + + 其他情况 + + + + + 其他情况附件 + + + + + 初始等级 + + + + + 损坏等级 + + + + + 综合等级 + + + + + 房屋场地 + + + + + 相邻施工 + + + + + 化学侵蚀 + + + + + 结构拆改 + + + + + 加层改造 + + + + + 修缮加固 + + + + + 历史灾害 + + + + + 使用功能变更 + + + + + 其他调查内容 + + + + + 主要安全隐患综述 + + + + + 处理意见 + + + + + 处理意见备注 + + + + + 整改情况 + + + + + 整改情况备注 + + + + + 巡查结果:1正常,-1异常 + + + + + 巡查异常描述 + + + + + 任务人员ID + + + + + 任务截止时间 + + + + + 是否过期 + + + + + -1:退回0:待处理1:保存待提交2:待审核3:审核通过 + + + + + 0:建档任务1:系统派发的巡查任务2:主动巡查任务 + + + + + 上报街道 + + + + + 上报街道时间 + + + + + 上报区住建 + + + + + 上报区住建时间 + + + + + 上报备注 + + + + + 提交时间 + + + + + 最后提交时间 + + + + + 是否有效 + + + + + 任务Id + + + + + 通过1;退回-1 + + + + + 审核内容 + + + + + bs_house_code主键Id + + + + + 字典类型 + + + + + 字典code + + + + + 字典值 + + + + + 备注 + + + + + 附件 + + + + + 是否选中 + + + + + 记录鉴定机构申请及修改, 在申请/修改时, 只记录在当前表内, 待审核通过将此表内容冗余到主表 + + + + + 审核退回 + + + + + 初始未处理 + + + + + 暂存 + + + + + 已保存,待提交 + + + + + 已提交,待审核 + + + + + 审核通过 + + + + + 市住建部门 + + + + + 区住建部门 + + + + + 街道管理员 + + + + + 片区监管员 + + + + + 房屋安全管理员 + + + + + 鉴定机构相关设置 + + + + + 开放时间范围 + + + + + 鉴定机构状态 + + + + + 因红牌撤销 + + + + + 撤销 + + + + + 登记中 + + + + + 正常 + + + + + 鉴定机构登记/修改类型 + + + + + 登记/回归 + + + + + 修改 + + + + + 鉴定机构登记/修改审核状态 + + + + + 放弃 + + + + + 退回 + + + + + 审核中 + + + + + 审核通过 + + + + + 房屋编码相关 + + + + + 获取同一区域下的下一个编号 + + + + + + + 房屋详细信息 + + + + + 住宅查询 + + + + + 房屋流转日志 + + + + + 分页查询用户 + + + + + + + 增加用户 + + + + + + + 获取角色 + + + + + + + 获取用户拥有角色 + + + + + + + 删除用户 + + + + + + + 更新用户 + + + + + + + 查看用户 + + + + + + + 修改用户状态 + + + + + + + 授权用户数据范围 + + + + + + + 获取用户拥有数据 + + + + + + + 获取当前机构中所创建的默认角色 + 片区中的第一个帐号必定为片区监管员 + + + + + + + 获取可创建的角色列表 + + + + + + 项目管理相关服务 + + + + + 添加项目 + + + + + + + 删除项目 + + + + + + + 编辑项目 + + + + + + + 通过ID获取项目 + + + + + + + 分页查询 + + + + + + + + + + + + + + 获取项目下拉列表 + + + + + + + 选房相关 + + + + + 获取人员允许绑定的房屋编码列表 + + + + + + + 获取人员已经绑定的房屋编码列表 + + + + + + + 从人员选择房屋 + + + + + + + 房屋任务(巡查任务/建档任务) + + + + + 片区相关 + + + + + 获取片区列表 + + + + + + + 分页查询片区 + + + + + + + 根据用户Id获取所在片区的Id + + + + + + + 获取当前名录打分列表 + + + + + + 鉴定机构相关 + + + + + 获取可登记的时间范围 + + + + + + 获取当前用户所在机构 + + + + + + 获取最新备案编号 + + + + + + 获取当前用户所在鉴定机构信息及登记时间范围 + + + + + + 鉴定机构登记 + + + + + + + 鉴定机构申请修改 + + + + + + + 鉴定机构详情 + + + + + + + 登记审核通过 + + + + + + + 登记审核退回 + + + + + + + 获取审核记录 + + + + + + + 总建筑面积 + + + + + 总户数(户) + + + + + 房屋单元数 + + + + + 各单元每层户数(户) + + + + + 总层数 + + + + + 地上层数 + + + + + 地上商业层数开始 + + + + + 地上商业层数结束 + + + + + 地上车棚层开始 + + + + + 地上住宅层开始 + + + + + 地上住宅层结束 + + + + + 地下层数 + + + + + 产权性质 + + + + + 总共套数 + + + + + 直管公房套数 + + + + + 自管公房套数 + + + + + 私房套数 + + + + + 商品房套数 + + + + + 房改房套数 + + + + + 拆迁安置房套数 + + + + + 其它套数 + + + + + 房屋等级 1,2,3,4,C,d + + + + + 房屋使用状态 + + + + + 图纸资料存档处 + + + + + 其他图纸存档 + + + + + 立项文件 + + + + + 规划许可 + + + + + 竣工验收备案 + + + + + 监理资料 + + + + + 鉴定报告 + + + + + 其它资料 + + + + + 外立面照片 + + + + + 调查登记机构 + + + + + 纸质资料调查人 + + + + + 纸质资料审核人 + + + + + 主管部门 + + + + + 总建筑面积 + + + + + 总户数(户) + + + + + 房屋单元数 + + + + + 各单元每层户数(户) + + + + + 总层数 + + + + + 地上层数 + + + + + 地上商业层数开始 + + + + + 地上商业层数结束 + + + + + 地上车棚层开始 + + + + + 地上住宅层开始 + + + + + 地上住宅层结束 + + + + + 地下层数 + + + + + 产权性质 + + + + + 总共套数 + + + + + 直管公房套数 + + + + + 自管公房套数 + + + + + 私房套数 + + + + + 商品房套数 + + + + + 房改房套数 + + + + + 拆迁安置房套数 + + + + + 其它套数 + + + + + 房屋等级 1,2,3,4,C,d + + + + + 房屋使用状态 + + + + + 图纸资料存档处 + + + + + 其他图纸存档 + + + + + 立项文件 + + + + + 规划许可 + + + + + 竣工验收备案 + + + + + 监理资料 + + + + + 鉴定报告 + + + + + 其它资料 + + + + + 外立面照片 + + + + + 调查登记机构 + + + + + 纸质资料调查人 + + + + + 纸质资料审核人 + + + + + 主管部门 + + + + + 任务Id + + + + + 通过3;退回-1 + + + + + 审核内容 + + + + + 沉降倾斜 + + + + + 沉降倾斜附件 + + + + + 其他情况 + + + + + 其他情况附件 + + + + + 房屋场地 + + + + + 相邻施工 + + + + + 化学侵蚀 + + + + + 结构拆改 + + + + + 加层改造 + + + + + 修缮加固 + + + + + 历史灾害 + + + + + 使用功能变更 + + + + + 其他调查内容 + + + + + 主要安全隐患综述 + + + + + 处理意见 + + + + + 处理意见备注 + + + + + 整改情况 + + + + + 整改情况备注 + + + + + 巡查结果:1正常,-1异常 + + + + + 上报街道 + + + + + 上报街道时间 + + + + + 上报区住建 + + + + + 上报区住建时间 + + + + + 上报备注 + + + + + 沉降倾斜 + + + + + 沉降倾斜附件 + + + + + 其他情况 + + + + + 其他情况附件 + + + + + 初始等级 + + + + + 损坏等级 + + + + + 综合等级 + + + + + 房屋场地 + + + + + 相邻施工 + + + + + 化学侵蚀 + + + + + 结构拆改 + + + + + 加层改造 + + + + + 修缮加固 + + + + + 历史灾害 + + + + + 使用功能变更 + + + + + 其他调查内容 + + + + + 主要安全隐患综述 + + + + + 处理意见 + + + + + 处理意见备注 + + + + + 整改情况 + + + + + 整改情况备注 + + + + + 巡查结果:1正常,-1异常 + + + + + 巡查异常描述 + + + + + 上报街道 + + + + + 上报街道时间 + + + + + 上报区住建 + + + + + 上报区住建时间 + + + + + 上报备注 + + + + + 提交时间 + + + + + 最后提交时间 + + + + + 是否有效 + + + + + 所属街道 + + + + + 名称 + + + + + 机构Id + + + + diff --git a/Api/Ewide.Application/README.md b/Api/Ewide.Application/README.md new file mode 100644 index 0000000..11a79cd --- /dev/null +++ b/Api/Ewide.Application/README.md @@ -0,0 +1,3 @@ +1、原则上服务应该放在Application层次,考虑将咱自己的业务层直接写在Application里面好些,后续升级后,咱大家直接升级就行了,减少冲突! +2、系统默认ORM为EF Core,如果觉得不趁手,可以自行更换 +3、在此应用层默认集成了SqlSugar,其他ORM类同,可以多个ORM并行开发,熟悉哪个用哪个 diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseCode/Dto/HouseCodeInput.cs b/Api/Ewide.Application/Service/HouseSafety/HouseCode/Dto/HouseCodeInput.cs new file mode 100644 index 0000000..d105eda --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseCode/Dto/HouseCodeInput.cs @@ -0,0 +1,65 @@ +using Ewide.Core; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application +{ + public class HouseCodeInput + { + } + + public class AddHouseCodeInput : PageInputBase + { + public string HouseCode { get; set; } + [Required(ErrorMessage = "行政区域编码不能为空")] + public string AreaCode { get; set; } + [Required(ErrorMessage = "项目Id不能为空")] + public string ProjectId { get; set; } + [Required(ErrorMessage = "房屋编号不能为空")] + public int No { get; set; } + [Required(ErrorMessage = "片区Id不能为空")] + public string ZoneId { get; set; } + [Required(ErrorMessage = "房屋地址不能为空")] + public string Address { get; set; } + [Required(ErrorMessage = "房屋性质不能为空")] + public int Type { get; set; } + [Required(ErrorMessage = "所属行业不能为空")] + public int Industry { get; set; } + [Required(ErrorMessage = "经度不能为空")] + public string Lng { get; set; } + [Required(ErrorMessage = "纬度不能为空")] + public string Lat { get; set; } + } + + public class EditHouseCodeInput : AddHouseCodeInput + { + [Required(ErrorMessage = "房屋编码Id不能为空")] + public string Id { get; set; } + } + + public class DeleteHouseCodeInput + { + [Required(ErrorMessage = "房屋编码ID不可为空")] + public string Id { get; set; } + } + + public class QueryHouseCodeInput : PageInputBase + { + public string HouseCode { get; set; } + public int? No { get; set; } + public string Address { get; set; } + public string ProjectId { get; set; } + public string ZoonId { get; set; } + public int Type { get; set; } + } + + public class GetHouseCodeInput + { + [Required(ErrorMessage = "房屋编码ID不可为空")] + public string Id { get; set; } + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseCode/Dto/HouseCodeOutput.cs b/Api/Ewide.Application/Service/HouseSafety/HouseCode/Dto/HouseCodeOutput.cs new file mode 100644 index 0000000..bb691f8 --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseCode/Dto/HouseCodeOutput.cs @@ -0,0 +1,43 @@ +using Ewide.Core; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application +{ + public class HouseCodeOutput + { + public string Id { get; set; } + public string Address { get; set; } + public string ProjectId { get; set; } + public string ZoneId { get; set; } + public int Type { get; set; } + public string AreaName { get; set; } + public string RoadName { get; set; } + public string CommName { get; set; } + public string ZoneName { get; set; } + public string ProjectNote { get; set; } + public string FullProjName { get; set; } + public string HouseCode { get; set; } + public int No { get; set; } + public string Lng { get; set; } + public string Lat { get; set; } + } + + public class GetHouseCodeOutput + { + public string Id { get; set; } + public string HouseCode { get; set; } + public int Type { get; set; } + public int Industry { get; set; } + public string AreaCode { get; set; } + public string ProjectId { get; set; } + public int No { get; set; } + public string ZoneId { get; set; } + public string Address { get; set; } + public string Lng { get; set; } + public string Lat { get; set; } + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseCode/HouseCodeService.cs b/Api/Ewide.Application/Service/HouseSafety/HouseCode/HouseCodeService.cs new file mode 100644 index 0000000..8175ddd --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseCode/HouseCodeService.cs @@ -0,0 +1,123 @@ +using Ewide.Application.Entity; +using Ewide.Core; +using Furion.DatabaseAccessor; +using Furion.DatabaseAccessor.Extensions; +using Furion.DependencyInjection; +using Furion.DynamicApiController; +using Furion.FriendlyException; +using Mapster; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using System.Threading.Tasks; +using Dapper; +using Ewide.Core.Extension; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Collections.Generic; + +namespace Ewide.Application.Service.HouseCode +{ + /// + /// 房屋编码相关 + /// + [ApiDescriptionSettings(Name = "HouseCode", Order = 180)] + public class HouseCodeService : IHouseCodeService, IDynamicApiController, ITransient + { + private readonly IRepository _houseCodeRep; + private readonly IDapperRepository _dapperRepository; + + private readonly IUserManager _userManager; + private readonly IHouseLogService _houseLogService; + + public HouseCodeService(IRepository HouseCodeRep, IDapperRepository dapperRepository, IUserManager userManager, IHouseLogService houseLogService) + { + _houseCodeRep = HouseCodeRep; + _dapperRepository = dapperRepository; + + _userManager = userManager; + _houseLogService = houseLogService; + } + + [HttpPost("/houseCode/add")] + [UnitOfWork] + public async Task AddHouseCode(AddHouseCodeInput input) + { + var houseProjectInfoRep = Db.GetRepository(); + var houseProject = await houseProjectInfoRep.FirstOrDefaultAsync(p => p.Id == input.ProjectId); + if (houseProject == null) throw Oops.Oh("项目参数有误,添加失败"); + + var areaCodeRep = Db.GetRepository(); + var areaCode = await areaCodeRep.DetachedEntities.FirstOrDefaultAsync(a => a.Code == input.AreaCode && a.LevelType == 4); + if(areaCode == null) throw Oops.Oh("区域编码有误,添加失败"); + input.HouseCode = areaCode.AdCode + houseProject.Sort.ToString().PadLeft(3, '0') + input.No.ToString().PadLeft(3, '0'); + var id = System.Guid.NewGuid().ToString().ToLower(); + var houseCode = input.Adapt(); + houseCode.Id = id; + var isExist = await _houseCodeRep.AnyAsync(p => p.HouseCode == houseCode.HouseCode); + if (isExist) throw Oops.Oh("房屋编码已存在,不可重复添加"); + await houseCode.InsertAsync(); + + // 添加到流转日志 + var sort = await _houseLogService.AddThenDone(id, _userManager.User, HouseLogType.CreateCode); + sort = await _houseLogService.Add(id, _userManager.User, HouseLogType.SelectMember, sort: sort); + } + + [HttpPost("/houseCode/edit")] + public async Task EditHouseCode(EditHouseCodeInput input) + { + var houseCode = input.Adapt(); + await houseCode.UpdateExcludeAsync(new[] { nameof(BsHouseCode.HouseCode) }, true); + } + + [HttpPost("/houseCode/delete")] + public async Task DeleteHouseCode(DeleteHouseCodeInput input) + { + var houseCode = _houseCodeRep.FirstOrDefault(p => p.Id == input.Id); + await houseCode.DeleteNowAsync(); + } + + [HttpPost("/houseCode/page")] + public async Task QueryPage([FromBody] QueryHouseCodeInput input) + { + var sql = @"SELECT +HC.*,AA.Name AreaName,RA.Name RoadName,CA.Name CommName,Proj.AreaCode,Proj.Note,CONCAT(Proj.`Name`, IFNULL(CONCAT('(',Proj.Note,')'), '')) FullProjName +FROM bs_house_code HC +LEFT JOIN bs_house_projectinfo Proj ON Proj.Id=HC.ProjectId +LEFT JOIN sys_area_code CA ON CA.Code = Proj.AreaCode +LEFT JOIN sys_area_code RA ON RA.AdCode = SUBSTR(CA.AdCode,1,9) +LEFT JOIN sys_area_code AA ON AA.AdCode = SUBSTR(CA.AdCode,1,6) "; + return await _dapperRepository.QueryPageDataDynamic(sql, input, filterFields: new string[] {"Type", "Address", "HouseCode","AreaCode"}); + } + + [HttpGet("/houseCode/detail")] + public async Task GetHouserCode([FromQuery] GetHouseCodeInput input) + { + var houseCode = await _houseCodeRep.DetachedEntities.FirstOrDefaultAsync(p => p.Id == input.Id); + var areaCode = (await Db.GetRepository().DetachedEntities.FirstOrDefaultAsync(p => p.Id == houseCode.ProjectId)).AreaCode; + var result = houseCode.Adapt(); + result.AreaCode = areaCode; + return result; + } + + /// + /// 获取同一区域下的下一个编号 + /// + /// + /// + [HttpGet("/houseCode/getNextNoByCode")] + public async Task GetNextNoByFullNumber([Required] string projectId) + { + var areaCodeRep = Db.GetRepository(); + var houseProjectInfoRep = Db.GetRepository(); + var houseProject = await houseProjectInfoRep.FirstOrDefaultAsync(p => p.Id == projectId); + if(houseProject == null) throw Oops.Oh("项目参数有误,房屋编码生成失败"); + //取到社区编码 + var commAreaCode = await areaCodeRep.FirstOrDefaultAsync(a => a.Code == houseProject.AreaCode && a.LevelType == 4); + if(commAreaCode == null) throw Oops.Oh("项目区域编码有误,房屋编码生成失败"); + var maxNo = await _houseCodeRep.DetachedEntities + .Where(h => h.HouseCode.Contains(commAreaCode.AdCode + houseProject.Sort.ToString().PadLeft(3, '0'))) + .MaxAsync(h => (int?)h.No); + return maxNo.GetValueOrDefault(0) + 1; + } + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseCode/IHouseCodeService.cs b/Api/Ewide.Application/Service/HouseSafety/HouseCode/IHouseCodeService.cs new file mode 100644 index 0000000..c1e1e4f --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseCode/IHouseCodeService.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application.Service.HouseCode +{ + public interface IHouseCodeService + { + Task AddHouseCode(AddHouseCodeInput input); + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseCompany/Dto/HouseCompanyInput.cs b/Api/Ewide.Application/Service/HouseSafety/HouseCompany/Dto/HouseCompanyInput.cs new file mode 100644 index 0000000..95fcd6e --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseCompany/Dto/HouseCompanyInput.cs @@ -0,0 +1,61 @@ +using Ewide.Core; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application +{ + public class HouseCompanyInput + { + [Required(ErrorMessage = "Id不能为空")] + public string Id { get; set; } + } + + public class HouseCompanyInfoInput + { + [Required(ErrorMessage = "信息名称不能为空")] + public string Name { get; set; } + [Required(ErrorMessage = "信息内容不能为空")] + public string Value { get; set; } + } + + public class HouseCompanyPageInput : PageInputBase {} + + public class HouseCompanyAddInput + { + [Required(ErrorMessage = "名称不能为空")] + public virtual string Name { get; set; } + + private string _Type { get; set; } + + [Required(ErrorMessage = "类型不能为空")] + public virtual string Type + { + get + { + return _Type; + } + set + { + _Type = String.Join(",", value.Split(',').Select(p => $"[{p}]")); + } + } + + public virtual List Info { get; set; } + } + + public class HouseCompanyEditInput : HouseCompanyAddInput + { + [Required(ErrorMessage = "Id不能为空")] + public string Id { get; set; } + } + + public class HouseCompanyListInput + { + [Required(ErrorMessage = "类型不能为空")] + public string Type { get; set; } + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseCompany/Dto/HouseCompanyOutput.cs b/Api/Ewide.Application/Service/HouseSafety/HouseCompany/Dto/HouseCompanyOutput.cs new file mode 100644 index 0000000..8692722 --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseCompany/Dto/HouseCompanyOutput.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application +{ + public class HouseCompanyInfoOutput + { + public string Name { get; set; } + public string Value { get; set; } + } + + public class HouseCompanyDetailOutput + { + public string Id { get; set; } + public string Name { get; set; } + private string _Type { get; set; } + public string Type + { + get + { + return _Type; + } + set + { + _Type = String.Join(",", value.Split(',').Select(p => p.Replace("[", "").Replace("]", ""))); + } + } + public List Info { get; set; } + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseCompany/HouseCompanyService.cs b/Api/Ewide.Application/Service/HouseSafety/HouseCompany/HouseCompanyService.cs new file mode 100644 index 0000000..dc99898 --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseCompany/HouseCompanyService.cs @@ -0,0 +1,101 @@ +using Ewide.Core.Extension; +using Furion.DatabaseAccessor; +using Furion.DatabaseAccessor.Extensions; +using Furion.DependencyInjection; +using Furion.DynamicApiController; +using Mapster; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application.Service +{ + [ApiDescriptionSettings(Name = "HouseCompany")] + public class HouseCompanyService : IHouseCompanyService, IDynamicApiController, ITransient + { + private readonly IRepository _bsHouseCompanyRep; + + public HouseCompanyService(IRepository bsHouseCompanyRep) + { + _bsHouseCompanyRep = bsHouseCompanyRep; + } + + [HttpPost("/houseCompany/page")] + public async Task Page([FromBody] HouseCompanyPageInput input) + { + var config = new TypeAdapterConfig().ForType() + .Map(target => target.Info, src => JsonConvert.DeserializeObject>(src.Info)) + .Config; + return await _bsHouseCompanyRep.DetachedEntities.ToPageData(input, config); + } + + [HttpPost("/houseCompany/add")] + public async Task Add([FromBody] HouseCompanyAddInput input) + { + var info = JsonConvert.SerializeObject(input.Info); + var config = new TypeAdapterConfig().ForType() + .Map(target => target.Info, src => JsonConvert.SerializeObject(src.Info)) + .Config; + var company = input.Adapt(config); + await company.InsertAsync(); + } + + [HttpPost("/houseCompany/edit")] + public async Task Edit([FromBody] HouseCompanyEditInput input) + { + var config = new TypeAdapterConfig().ForType() + .Map(target => target.Info, src => JsonConvert.SerializeObject(src.Info)) + .Config; + var company = input.Adapt(config); + await company.UpdateAsync(); + } + + [HttpPost("/houseCompany/delete")] + public async Task Delete([FromBody] HouseCompanyInput input) + { + var company = await _bsHouseCompanyRep.FirstOrDefaultAsync(p => p.Id.Equals(input.Id)); + await company.DeleteAsync(); + } + + [HttpGet("/houseCompany/detail")] + public async Task Detail([FromQuery] HouseCompanyInput input) + { + var company = await _bsHouseCompanyRep.FirstOrDefaultAsync(p => p.Id.Equals(input.Id)); + var config = new TypeAdapterConfig().ForType() + .Map(target => target.Info, src => JsonConvert.DeserializeObject>(src.Info)) + .Config; + var output = company.Adapt(config); + return output; + } + + [HttpGet("/houseCompany/list")] + public async Task List([FromQuery] HouseCompanyListInput input) + { + var types = input.Type.Split(','); + var result = new List(); + var config = new TypeAdapterConfig().ForType() + .Map(target => target.Info, src => JsonConvert.DeserializeObject>(src.Info)) + .Config; + foreach (var type in types) + { + var list = (await _bsHouseCompanyRep.DetachedEntities + .Where(p => EF.Functions.Like(p.Type, $"%[{type.Trim()}]%")) + .OrderBy(p => p.Name) + .ToListAsync()) + .Select(p => + { + var output = p.Adapt(config); + return output; + }); + result.AddRange(list); + } + + return result.Distinct(); + } + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseCompany/IHouseCompanyService.cs b/Api/Ewide.Application/Service/HouseSafety/HouseCompany/IHouseCompanyService.cs new file mode 100644 index 0000000..94eac4e --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseCompany/IHouseCompanyService.cs @@ -0,0 +1,19 @@ +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application.Service +{ + public interface IHouseCompanyService + { + Task Page([FromBody] HouseCompanyPageInput input); + Task Add([FromBody] HouseCompanyAddInput input); + Task Edit([FromBody] HouseCompanyEditInput input); + Task Delete([FromBody] HouseCompanyInput input); + Task Detail([FromQuery] HouseCompanyInput input); + Task List([FromQuery] HouseCompanyListInput input); + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseInfo/Dto/HouseInfoInput.cs b/Api/Ewide.Application/Service/HouseSafety/HouseInfo/Dto/HouseInfoInput.cs new file mode 100644 index 0000000..6977a3f --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseInfo/Dto/HouseInfoInput.cs @@ -0,0 +1,239 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application +{ + public class HouseInfoInput + { + #region 建筑物基本信息building + public string BuildingName { get; set; } + + public int? LandAttribute { get; set; } + + public int? StructureType { get; set; } + + public int? SeismicGrade { get; set; } + + public int? BaseInfo { get; set; } + + public string InsulationMaterial { get; set; } + + public string WallMaterial { get; set; } + + public string FireproofGrade { get; set; } + public int? CurtainWall { get; set; } + public int? FaceBrick { get; set; } + public int? WhiteWash { get; set; } + public int? Coating { get; set; } + public string Elevator { get; set; } + public DateTime? CompletedDate { get; set; } + public int? UsefulYear { get; set; } + /// + /// 总建筑面积 + /// + public float? TotalArea { get; set; } + /// + /// 总户数(户) + /// + public int? HouseHolds { get; set; } + + /// + /// 房屋单元数 + /// + public int? Units { get; set; } + + /// + /// 各单元每层户数(户) + /// + public int? UnitFloorHolds { get; set; } + + /// + /// 总层数 + /// + public int? TotalFloor { get; set; } + + /// + /// 地上层数 + /// + public int? LandFloorCount { get; set; } + + /// + /// 地上商业层数开始 + /// + public int? LandBsFloorStart { get; set; } + + /// + /// 地上商业层数结束 + /// + public int? LandBsFloorEnd { get; set; } + + /// + /// 地上车棚层开始 + /// + public int? LandBikeFloorStart { get; set; } + + /// + /// 地上住宅层开始 + /// + public int? LandResidenceFloorStart { get; set; } + + /// + /// 地上住宅层结束 + /// + public int? LandResidenceFloorEnd { get; set; } + + /// + /// 地下层数 + /// + public int? UnderFloorCount { get; set; } + #endregion + #region 权属情况ownership + /// + /// 产权性质 + /// + public string PropertyRights { get; set; } + + /// + /// 总共套数 + /// + public int? HouseCount { get; set; } + /// + /// 直管公房套数 + /// + public int? StraightHouseCount { get; set; } + + /// + /// 自管公房套数 + /// + public int? SelfHouseCount { get; set; } + + /// + /// 私房套数 + /// + public int? PrivateHouseCount { get; set; } + + /// + /// 商品房套数 + /// + public int? BusinessCount { get; set; } + + /// + /// 房改房套数 + /// + public int? ChangeHouseCount { get; set; } + + /// + /// 拆迁安置房套数 + /// + public int? ResettlementHouseCount { get; set; } + + /// + /// 其它套数 + /// + public int? OtherCount { get; set; } + + #endregion + #region 管理情况manager + #endregion + + #region 鉴定治理identification + + /// + /// 房屋等级 1,2,3,4,C,d + /// + public int? HouseGrade { get; set; } + + /// + /// 房屋使用状态 + /// + public int? HouseUsedStatus { get; set; } + #endregion + + #region 图纸资料存档处drawing + + /// + /// 图纸资料存档处 + /// + public string DrawingMaterial { get; set; } + + /// + /// 其他图纸存档 + /// + public string DrawingMaterialText { get; set; } + #endregion + + #region 相关附件资料attachments + /// + /// 立项文件 + /// + public string AnEntryDocument { get; set; } + + /// + /// 规划许可 + /// + public string PlanningPermission { get; set; } + + /// + /// 竣工验收备案 + /// + public string CompletionRecord { get; set; } + + /// + /// 监理资料 + /// + public string MonitorDocument { get; set; } + + /// + /// 鉴定报告 + /// + public string IdentificationReport { get; set; } + + /// + /// 其它资料 + /// + public string OtherDocument { get; set; } + #endregion + + #region 建筑概貌aspect + /// + /// 外立面照片 + /// + public string FacadePhoto { get; set; } + #endregion + + #region 调查单位unit + /// + /// 调查登记机构 + /// + public string InvestigateAgency { get; set; } + + /// + /// 纸质资料调查人 + /// + public string InvestigateUser { get; set; } + + /// + /// 纸质资料审核人 + /// + public string OfflineAuditor { get; set; } + + /// + /// 主管部门 + /// + public string CompetentDepartment { get; set; } + #endregion + + public int State { get; set; } + } + + public class HouseInfoInputSave + { + public HouseCodeOutput houseCode { get; set; } + public HouseInfoInput houseInfo { get; set; } + public EditHouseTaskInput PatrolInfo { get; set; } + public HouseTaskCheckRecordInput TaskCheckRecord { get; set; } + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseInfo/Dto/HouseInfoOutput.cs b/Api/Ewide.Application/Service/HouseSafety/HouseInfo/Dto/HouseInfoOutput.cs new file mode 100644 index 0000000..104f44d --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseInfo/Dto/HouseInfoOutput.cs @@ -0,0 +1,239 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application +{ + public class HouseInfoOutput + { + #region 建筑物基本信息building + public string BuildingName { get; set; } + + public int? LandAttribute { get; set; } + + public int? StructureType { get; set; } + + public int? SeismicGrade { get; set; } + + public int? BaseInfo { get; set; } + + public string InsulationMaterial { get; set; } + + public string WallMaterial { get; set; } + + public string FireproofGrade { get; set; } + public int? CurtainWall { get; set; } + public int? FaceBrick { get; set; } + public int? WhiteWash { get; set; } + public int? Coating { get; set; } + public string Elevator { get; set; } + public DateTime? CompletedDate { get; set; } + public int? UsefulYear { get; set; } + /// + /// 总建筑面积 + /// + public float? TotalArea { get; set; } + /// + /// 总户数(户) + /// + public int? HouseHolds { get; set; } + + /// + /// 房屋单元数 + /// + public int? Units { get; set; } + + /// + /// 各单元每层户数(户) + /// + public int? UnitFloorHolds { get; set; } + + /// + /// 总层数 + /// + public int? TotalFloor { get; set; } + + /// + /// 地上层数 + /// + public int? LandFloorCount { get; set; } + + /// + /// 地上商业层数开始 + /// + public int? LandBsFloorStart { get; set; } + + /// + /// 地上商业层数结束 + /// + public int? LandBsFloorEnd { get; set; } + + /// + /// 地上车棚层开始 + /// + public int? LandBikeFloorStart { get; set; } + + /// + /// 地上住宅层开始 + /// + public int? LandResidenceFloorStart { get; set; } + + /// + /// 地上住宅层结束 + /// + public int? LandResidenceFloorEnd { get; set; } + + /// + /// 地下层数 + /// + public int? UnderFloorCount { get; set; } + #endregion + #region 权属情况ownership + /// + /// 产权性质 + /// + public string PropertyRights { get; set; } + + /// + /// 总共套数 + /// + public int? HouseCount { get; set; } + /// + /// 直管公房套数 + /// + public int? StraightHouseCount { get; set; } + + /// + /// 自管公房套数 + /// + public int? SelfHouseCount { get; set; } + + /// + /// 私房套数 + /// + public int? PrivateHouseCount { get; set; } + + /// + /// 商品房套数 + /// + public int? BusinessCount { get; set; } + + /// + /// 房改房套数 + /// + public int? ChangeHouseCount { get; set; } + + /// + /// 拆迁安置房套数 + /// + public int? ResettlementHouseCount { get; set; } + + /// + /// 其它套数 + /// + public int? OtherCount { get; set; } + + #endregion + #region 管理情况manager + #endregion + + #region 鉴定治理identification + + /// + /// 房屋等级 1,2,3,4,C,d + /// + public int? HouseGrade { get; set; } + + /// + /// 房屋使用状态 + /// + public int? HouseUsedStatus { get; set; } + #endregion + + #region 图纸资料存档处drawing + + /// + /// 图纸资料存档处 + /// + public string DrawingMaterial { get; set; } + + /// + /// 其他图纸存档 + /// + public string DrawingMaterialText { get; set; } + #endregion + + #region 相关附件资料attachments + /// + /// 立项文件 + /// + public string AnEntryDocument { get; set; } + + /// + /// 规划许可 + /// + public string PlanningPermission { get; set; } + + /// + /// 竣工验收备案 + /// + public string CompletionRecord { get; set; } + + /// + /// 监理资料 + /// + public string MonitorDocument { get; set; } + + /// + /// 鉴定报告 + /// + public string IdentificationReport { get; set; } + + /// + /// 其它资料 + /// + public string OtherDocument { get; set; } + #endregion + + #region 建筑概貌aspect + /// + /// 外立面照片 + /// + public string FacadePhoto { get; set; } + #endregion + public int State { get; set; } + #region 调查单位unit + /// + /// 调查登记机构 + /// + public string InvestigateAgency { get; set; } + + /// + /// 纸质资料调查人 + /// + public string InvestigateUser { get; set; } + + /// + /// 纸质资料审核人 + /// + public string OfflineAuditor { get; set; } + + /// + /// 主管部门 + /// + public string CompetentDepartment { get; set; } + #endregion + } + + public class HouseInfoOutputForDetailPage + { + #region header + public HouseCodeOutput HouseCode { get; set; } + #endregion + + public HouseInfoOutput HouseInfo { get; set; } + public HouseTaskOutput PatrolInfo { get; set; } + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseInfo/HouseInfoService.cs b/Api/Ewide.Application/Service/HouseSafety/HouseInfo/HouseInfoService.cs new file mode 100644 index 0000000..a5b2d5e --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseInfo/HouseInfoService.cs @@ -0,0 +1,208 @@ +using Dapper; +using Ewide.Core; +using Furion.DatabaseAccessor; +using Furion.DatabaseAccessor.Extensions; +using Furion.DependencyInjection; +using Furion.DynamicApiController; +using Furion.FriendlyException; +using Mapster; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application.Service.HouseSafety.HouseInfo +{ + /// + /// 房屋详细信息 + /// + [ApiDescriptionSettings(Name = "HouseInfo", Order = 200)] + public class HouseInfoService : IHouseInfoService, IDynamicApiController, ITransient + { + + private readonly IRepository _houseCodeRep; + private readonly IRepository _houseInfoRep; + private readonly IRepository _houseTaskRep; + private readonly IRepository _sysUserRep; + private readonly IUserManager _userManager; + private readonly IDapperRepository _dapperRepository; + + private readonly IHouseLogService _houseLogService; + + + public HouseInfoService( + IRepository HouseCodeRep, + IRepository HouseInfoRep, + IRepository HouseTaskRep, + IRepository sysUserRep, + IUserManager userManager, IDapperRepository dapperRepository, IHouseLogService houseLogService) + { + _houseCodeRep = HouseCodeRep; + _houseInfoRep = HouseInfoRep; + _houseTaskRep = HouseTaskRep; + _sysUserRep = sysUserRep; + _userManager = userManager; + _dapperRepository = dapperRepository; + + _houseLogService = houseLogService; + } + + [HttpPost("/houseInfo/save")] + [UnitOfWork] + [AllowAnonymous] + public async Task Save([FromBody] HouseInfoInputSave input) + { + await InputDataProcess(input, DataStatus.Saved); + } + + [HttpPost("/houseInfo/submitToCheck")] + [UnitOfWork] + [AllowAnonymous] + public async Task SubmitToCheck([FromBody] HouseInfoInputSave input) + { + await InputDataProcess(input,DataStatus.Submited); + } + + [HttpPost("/houseInfo/check")] + [UnitOfWork] + public async Task Check([FromBody] HouseInfoInputSave input) + { + await InputDataProcess(input, input.TaskCheckRecord.PassOrBackDataStatus ); + } + + [HttpGet("/houseInfo/getByTaskId")] + [UnitOfWork] + public async Task GetByTaskId([Required] string taskId) + { + //获取任务实体 + var houseTask = await _houseTaskRep.DetachedEntities.FirstOrDefaultAsync(t=>t.Id == taskId); + if(houseTask == null) throw Oops.Oh("任务不存在"); + + //获取房屋编码信息 + var houseCodeOutputAsync = await _dapperRepository.QueryAsync( + @"SELECT +HC.Id,HC.Address,HC.ProjectId,HC.ZoneId,HC.Type,AA.Name AreaName,RA.Name RoadName,CA.Name CommName,O.Name ZoneName,Proj.Note ProjectNote,CONCAT(Proj.`Name`, IFNULL(CONCAT('(',Proj.Note,')'), '')) FullProjName,HC.HouseCode,HC.Lng,HC.Lat,HC.No +FROM bs_house_code HC +LEFT JOIN bs_house_projectinfo Proj ON Proj.Id=HC.ProjectId +LEFT JOIN sys_org O ON HC.ZoneId = O.Id +LEFT JOIN sys_area_code CA ON CA.Code = Proj.AreaCode +LEFT JOIN sys_area_code RA ON RA.AdCode = SUBSTR(CA.AdCode,1,9) +LEFT JOIN sys_area_code AA ON AA.AdCode = SUBSTR(CA.AdCode,1,6) +WHERE HC.Id=@HouseCodeId", new { houseTask.HouseCodeId } + ); + var houseCodeOutput= houseCodeOutputAsync.SingleOrDefault(); + if (houseCodeOutput == null) throw Oops.Oh("任务已失效:房屋编码不存在,请重新加载任务列表"); + + //获取当前登录账号 + var currentUser = await _userManager.CheckUserAsync(); + + //查询房屋详细信息是否存在 + var houseInfo = await _houseInfoRep.DetachedEntities.FirstOrDefaultAsync(h => h.HouseCodeId == houseTask.HouseCodeId); + var houseInfoOutputForDetailPage = new HouseInfoOutputForDetailPage + { + HouseCode = houseCodeOutput + }; + + var taskOutput = houseTask.Adapt(); + taskOutput.PatrolDate = houseTask.PatrolDate.GetValueOrDefault(DateTime.Now); + taskOutput.PatrolUser = String.IsNullOrEmpty(houseTask.PatrolUser) ? currentUser.Name : houseTask.PatrolUser; + houseInfoOutputForDetailPage.PatrolInfo = taskOutput; + + if (houseInfo == null || houseInfo.State <= (int)DataStatus.Submited) + { + // 未建档或者当前数据未提交时打开,标记为已读 + await _houseLogService.Read(houseCodeOutput.Id); + } + + if (houseInfo == null) + { + houseInfoOutputForDetailPage.HouseInfo = new HouseInfoOutput(); + return houseInfoOutputForDetailPage; + } + + var houseInfoOutput = (await _houseInfoRep.DetachedEntities.FirstOrDefaultAsync(p => p.HouseCodeId == houseTask.HouseCodeId)).Adapt(); + houseInfoOutputForDetailPage.HouseInfo = houseInfoOutput; + + return houseInfoOutputForDetailPage; + } + + [NonAction] + [UnitOfWork] + public async Task InputDataProcess(HouseInfoInputSave input,DataStatus dataStatus = DataStatus.Init) + { + //房屋编码地址/坐标单独更新 + var houseCode = input.houseCode.Adapt(); + await houseCode.UpdateIncludeAsync(new[] { nameof(BsHouseCode.Address), nameof(BsHouseCode.Lng), nameof(BsHouseCode.Lat) }, true); + + //获取房屋详情实体,判断是新增还是更新 + var houseEntity = await _houseInfoRep.DetachedEntities.FirstOrDefaultAsync(h => h.HouseCodeId == input.houseCode.Id); + + //建档审核通过的房屋数据修改时,对应的建档任务Task不处理 + var houseTask = await _houseTaskRep.DetachedEntities.FirstOrDefaultAsync(p => p.Id == input.PatrolInfo.Id); + if (houseEntity == null || houseEntity.State != 6) + { + var _houseTask = input.PatrolInfo.Adapt(); + _houseTask.HouseCodeId = input.houseCode.Id; + //任务没有暂存状态,其他状态与HouseInfo的State一致 + _houseTask.Status = dataStatus == DataStatus.TempSaved ? (int)DataStatus.Saved : (int)dataStatus; + await _houseTask.UpdateExcludeAsync(new string[] { nameof(BsHouseTask.TaskType) }, ignoreNullValues: true); + } + //判断房屋建档状态 + //dataStatus == DataStatus.Saved 若是保存操作 则判断是新增/更新 + //判断是新增/更新 根据传入参数dataStatus确定 + input.houseInfo.State = dataStatus == DataStatus.Saved ? (houseEntity == null ? (int)DataStatus.Saved : houseEntity.State) : (int)dataStatus; + var houseInfo = input.houseInfo.Adapt(); + houseInfo.HouseCodeId = input.houseCode.Id; + + if (houseEntity == null) + { + houseInfo.Id = Guid.NewGuid().ToString(); + await houseInfo.InsertAsync(); + } + else + { + houseInfo.Id = houseEntity.Id; + await houseInfo.UpdateExcludeAsync(new[] { nameof(BsHouseInfo.HouseGrade) }, true); + } + + int? logSort = null; + + if (dataStatus == DataStatus.Submited) + { + await _houseLogService.Done(input.houseCode.Id); + + var org = await _userManager.GetUserOrgInfo(); + + var _sysEmpRep = Db.GetRepository(); + var _sysUserRoleRep = Db.GetRepository(); + var _sysRoleRep = Db.GetRepository(); + var zoneManagerList = await (from u in _sysUserRep.DetachedEntities + join e in _sysEmpRep.DetachedEntities on u.Id equals e.Id + join ur in _sysUserRoleRep.DetachedEntities on u.Id equals ur.SysUserId + join r in _sysRoleRep.DetachedEntities on ur.SysRoleId equals r.Id + where e.OrgId == org.Id && r.Code == Enum.GetName(HouseManagerRole.ZoneManager).ToUnderScoreCase() + select u).ToListAsync(); + + logSort = await _houseLogService.Add(input.houseCode.Id, zoneManagerList, HouseLogType.Check); + } + //审核操作则新增一条审核记录 + if (dataStatus == DataStatus.Back || dataStatus == DataStatus.Passed) + { + var checkRecord = input.TaskCheckRecord.Adapt(); + await checkRecord.InsertAsync(); + await _houseLogService.Done(input.houseCode.Id); + logSort = await _houseLogService.AddThenDone(input.houseCode.Id, _userManager.User, dataStatus == DataStatus.Passed ? HouseLogType.Agree : HouseLogType.Disagree, remark: checkRecord.Content, sort: logSort); + if (dataStatus == DataStatus.Back) + { + var user = await _sysUserRep.DetachedEntities.FirstOrDefaultAsync(p => p.Id.Equals(houseTask.UserID)); + logSort = await _houseLogService.Add(input.houseCode.Id, user, HouseLogType.CreateInfo, sort: logSort); + } + } + } + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseInfo/IHouseInfoService.cs b/Api/Ewide.Application/Service/HouseSafety/HouseInfo/IHouseInfoService.cs new file mode 100644 index 0000000..14dda5f --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseInfo/IHouseInfoService.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application.Service +{ + public interface IHouseInfoService + { + Task GetByTaskId(string taskId); + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseLog/Dto/HouseLogInput.cs b/Api/Ewide.Application/Service/HouseSafety/HouseLog/Dto/HouseLogInput.cs new file mode 100644 index 0000000..356d221 --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseLog/Dto/HouseLogInput.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application +{ + public class HouseLogInput + { + [Required(ErrorMessage = "Id不能为空")] + public string Id { get; set; } + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseLog/Dto/HouseLogOutput.cs b/Api/Ewide.Application/Service/HouseSafety/HouseLog/Dto/HouseLogOutput.cs new file mode 100644 index 0000000..fdd2831 --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseLog/Dto/HouseLogOutput.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application +{ + public class HouseLogOutput + { + public string Id { get; set; } + public string TargetUserNames { get; set; } + public int Type { get; set; } + public int Status { get; set; } + public string Remark { get; set; } + public DateTime? FinishedTime { get; set; } + public string FinishedUserId { get; set; } + public string FinishedUserName { get; set; } + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseLog/HouseLogService.cs b/Api/Ewide.Application/Service/HouseSafety/HouseLog/HouseLogService.cs new file mode 100644 index 0000000..85cf06f --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseLog/HouseLogService.cs @@ -0,0 +1,209 @@ +using Dapper; +using Ewide.Core; +using Furion.DatabaseAccessor; +using Furion.DatabaseAccessor.Extensions; +using Furion.DependencyInjection; +using Furion.DynamicApiController; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application.Service +{ + /// + /// 房屋流转日志 + /// + [ApiDescriptionSettings(Name = "HouseLog", Order = 210)] + public class HouseLogService : IHouseLogService, IDynamicApiController, ITransient + { + private readonly IDapperRepository _dapperRep; + + private readonly IUserManager _userManager; + + private readonly IRepository _bsHouseLogRep; + + public HouseLogService(IDapperRepository dapperRep, IUserManager userManager, IRepository bsHouseLogRep) + { + _dapperRep = dapperRep; + _userManager = userManager; + _bsHouseLogRep = bsHouseLogRep; + } + + [NonAction] + [UnitOfWork] + public async Task Add(string houseCodeId, SysUser targetUser, HouseLogType type, string remark = null, int? sort = null) + { + return await Add(houseCodeId, new List { targetUser }, type, remark, sort); + } + + [NonAction] + [UnitOfWork] + public async Task Add(string houseCodeId, List targetUsers, HouseLogType type, string remark = null, int? sort = null) + { + if (!sort.HasValue) + { + sort = await _bsHouseLogRep.DetachedEntities.Where(p => p.HouseCodeId.Equals(houseCodeId)).MaxAsync(p => p.Sort); + } + var _sort = sort.GetValueOrDefault(1) + 1; + await new BsHouseLog + { + Id = Guid.NewGuid().ToString(), + HouseCodeId = houseCodeId, + TargetUserIds = String.Join(",", targetUsers.Select(p => p.Id)), + Type = type, + Status = HouseLogStatus.Handle, + Remark = remark, + Sort = _sort + }.InsertAsync(); + + return _sort; + } + + [NonAction] + [UnitOfWork] + public async Task Read(string houseCodeId) + { + var log = await _bsHouseLogRep + .Where(p => p.HouseCodeId.Equals(houseCodeId) && p.Status.Equals(HouseLogStatus.Handle)) + .OrderByDescending(p => p.CreatedTime) + .FirstOrDefaultAsync(); + if (log != null) + { + log.Status = HouseLogStatus.Handling; + await log.UpdateAsync(); + } + } + + [NonAction] + [UnitOfWork] + public async Task Done(string houseCodeId) + { + var log = await _bsHouseLogRep + .Where(p => p.HouseCodeId.Equals(houseCodeId) && !p.Status.Equals(HouseLogStatus.Handled)) + .OrderByDescending(p => p.CreatedTime) + .FirstOrDefaultAsync(); + if (log != null) + { + log.Status = HouseLogStatus.Handled; + log.FinishedTime = DateTime.Now; + log.FinishedUserId = _userManager.UserId; + log.FinishedUserName = _userManager.User.Account; + await log.UpdateAsync(); + } + } + + [NonAction] + [UnitOfWork] + public async Task AddThenRead(string houseCodeId, SysUser targetUser, HouseLogType type, string remark = null, int? sort = null) + { + return await AddThenRead(houseCodeId, new List { targetUser }, type, remark, sort); + } + + [NonAction] + [UnitOfWork] + public async Task AddThenRead(string houseCodeId, List targetUsers, HouseLogType type, string remark = null, int? sort = null) + { + if (!sort.HasValue) + { + sort = await _bsHouseLogRep.DetachedEntities.Where(p => p.HouseCodeId.Equals(houseCodeId)).MaxAsync(p => p.Sort); + } + var _sort = sort.GetValueOrDefault(1) + 1; + await new BsHouseLog + { + Id = Guid.NewGuid().ToString(), + HouseCodeId = houseCodeId, + TargetUserIds = String.Join(",", targetUsers.Select(p => p.Id)), + Type = type, + Status = HouseLogStatus.Handling, + Remark = remark, + Sort = _sort + }.InsertAsync(); + + return _sort; + } + + [NonAction] + [UnitOfWork] + public async Task AddThenDone(string houseCodeId, SysUser targetUser, HouseLogType type, string remark = null, int? sort = null) + { + return await AddThenDone(houseCodeId, new List { targetUser }, type, remark, sort); + } + + [NonAction] + [UnitOfWork] + public async Task AddThenDone(string houseCodeId, List targetUsers, HouseLogType type, string remark = null, int? sort = null) + { + if (!sort.HasValue) + { + sort = await _bsHouseLogRep.DetachedEntities.Where(p => p.HouseCodeId.Equals(houseCodeId)).MaxAsync(p => p.Sort); + } + var _sort = sort.GetValueOrDefault(1) + 1; + await new BsHouseLog + { + Id = Guid.NewGuid().ToString(), + HouseCodeId = houseCodeId, + TargetUserIds = String.Join(",", targetUsers.Select(p => p.Id)), + Type = type, + Status = HouseLogStatus.Handled, + Remark = remark, + FinishedTime = DateTime.Now, + FinishedUserId = _userManager.UserId, + FinishedUserName = _userManager.User.Account, + Sort = _sort + }.InsertAsync(); + + return _sort; + } + + [HttpGet("/houseLog/list")] + public async Task List([FromQuery] HouseLogInput input) + { + var sql = @"SELECT + HL.Id, + HL.Type, + HL.`Status`, + HL.Remark, + HL.FinishedTime, + HL.FinishedUserId, + IFNULL(NickName, `Name`) FinishedUserName, +(SELECT GROUP_CONCAT(IFNULL(NickName,`Name`)) FROM sys_user + WHERE Id IN ( + SELECT DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(_HL.TargetUserIds,',',HT.help_topic_id + 1),',',-1) + FROM bs_house_log _HL + JOIN mysql.help_topic HT ON HT.help_topic_id < (LENGTH(_HL.TargetUserIds) - LENGTH(REPLACE(_HL.TargetUserIds,',','')) + 1) + WHERE _HL.Id = HL.Id + ) +) TargetUserNames +FROM bs_house_log HL +LEFT JOIN sys_user SU ON HL.FinishedUserId = SU.Id +WHERE HouseCodeId = @HouseCodeId +ORDER BY Sort DESC"; + + return await _dapperRep.QueryAsync(sql, new { houseCodeId = input.Id }); + } + + [HttpGet("/houseLog/listByInfoId")] + public async Task ListByInfoId([FromQuery] HouseLogInput input) + { + var info = await Db.GetRepository().DetachedEntities.FirstOrDefaultAsync(p => p.Id.Equals(input.Id)); + return await List(new HouseLogInput + { + Id = info.HouseCodeId + }); + } + + [HttpGet("/houseLog/listByTaskId")] + public async Task ListByTaskId([FromQuery] HouseLogInput input) + { + var task = await Db.GetRepository().DetachedEntities.FirstOrDefaultAsync(p => p.Id.Equals(input.Id)); + return await List(new HouseLogInput + { + Id = task.HouseCodeId + }); + } + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseLog/IHouseLogService.cs b/Api/Ewide.Application/Service/HouseSafety/HouseLog/IHouseLogService.cs new file mode 100644 index 0000000..056db2b --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseLog/IHouseLogService.cs @@ -0,0 +1,24 @@ +using Ewide.Core; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application.Service +{ + public interface IHouseLogService + { + Task Add(string houseCodeId, SysUser targetUser, HouseLogType type, string remark = null, int? sort = null); + Task Add(string houseCodeId, List targetUsers, HouseLogType type, string remark = null, int? sort = null); + Task Read(string houseCodeId); + Task Done(string houseCodeId); + Task AddThenRead(string houseCodeId, SysUser targetUser, HouseLogType type, string remark = null, int? sort = null); + Task AddThenRead(string houseCodeId, List targetUsers, HouseLogType type, string remark = null, int? sort = null); + Task AddThenDone(string houseCodeId, SysUser targetUser, HouseLogType type, string remark = null, int? sort = null); + Task AddThenDone(string houseCodeId, List targetUsers, HouseLogType type, string remark = null, int? sort = null); + Task List(HouseLogInput input); + Task ListByInfoId(HouseLogInput input); + Task ListByTaskId(HouseLogInput input); + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseMember/Dto/HouseMemberInput.cs b/Api/Ewide.Application/Service/HouseSafety/HouseMember/Dto/HouseMemberInput.cs new file mode 100644 index 0000000..e3634ea --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseMember/Dto/HouseMemberInput.cs @@ -0,0 +1,16 @@ +using Ewide.Core.Service; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application.Service +{ + public class AddHouseMemberInput : AddUserInput + { + [Required(ErrorMessage = "角色不能为空")] + public string RoleId { get; set; } + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseMember/Dto/HouseMemberOutput.cs b/Api/Ewide.Application/Service/HouseSafety/HouseMember/Dto/HouseMemberOutput.cs new file mode 100644 index 0000000..73d2395 --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseMember/Dto/HouseMemberOutput.cs @@ -0,0 +1,13 @@ +using Ewide.Core.Service; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application.Service +{ + public class HouseMemberOutput + { + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseMember/HouseMemberService.cs b/Api/Ewide.Application/Service/HouseSafety/HouseMember/HouseMemberService.cs new file mode 100644 index 0000000..a77a0b5 --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseMember/HouseMemberService.cs @@ -0,0 +1,326 @@ +using Dapper; +using Ewide.Core; +using Ewide.Core.Extension; +using Ewide.Core.Service; +using Furion.DatabaseAccessor; +using Furion.DataEncryption; +using Furion.DependencyInjection; +using Furion.DynamicApiController; +using Furion.FriendlyException; +using Mapster; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System; + +namespace Ewide.Application.Service +{ + [ApiDescriptionSettings(Name = "HouseMember")] + public class HouseMemberService : IHouseMemberService, IDynamicApiController, ITransient + { + private readonly IDapperRepository _dapperRepository; + + private readonly IRepository _sysUserRep; // 用户表仓储 + private readonly IUserManager _userManager; + private readonly ISysUserService _sysUserService; + private readonly ISysEmpService _sysEmpService; + + public HouseMemberService( + IDapperRepository dapperRepository, + IRepository sysUserRep, + IUserManager userManager, + ISysUserService sysUserService, + ISysEmpService sysEmpService + ) + { + _dapperRepository = dapperRepository; + _sysUserRep = sysUserRep; + _userManager = userManager; + _sysUserService = sysUserService; + _sysEmpService = sysEmpService; + } + + /// + /// 分页查询用户 + /// + /// + /// + [HttpPost("/houseMember/page")] + public async Task QueryMemberPageList([FromBody] UserInput input) + { + var dataScopes = await _userManager.GetUserAllDataScopeList(); + + var sql = @"SELECT +SU.*, +SO.Name OrgName, +SUR.RoleName, +SUR.RoleCode +FROM sys_user SU +LEFT JOIN sys_emp SE ON SU.Id = SE.Id +LEFT JOIN sys_org SO ON SE.OrgId = SO.Id +LEFT JOIN ( + SELECT + SUR.SysUserId, + GROUP_CONCAT(SR.Name) RoleName, + GROUP_CONCAT(SR.Code) RoleCode + FROM sys_user_role SUR + LEFT JOIN sys_role SR ON SUR.SysRoleId = SR.Id + GROUP BY SUR.SysUserId +) SUR ON SU.Id = SUR.SysUserId +WHERE 1=1"; + var param = new DynamicParameters(); + + if (!string.IsNullOrEmpty(input.SearchValue)) + { + sql += @" AND (SU.Account Like @SearchValue + OR SU.Name Like @SearchValue + OR SU.Phone Like @SearchValue)"; + param.Add("SearchValue", "%" + input.SearchValue + "%"); + } + + if (!string.IsNullOrEmpty(input.SysEmpParam.OrgId)) + { + var filter = " AND (SO.Id = @OrgId {0}) "; + filter = String.Format(filter, input.TreeNodeDataScope.GetValueOrDefault(1) == 2 ? " OR SO.Pids Like CONCAT('%[', @OrgId, ']%') " : ""); + sql += filter; + param.Add("OrgId", input.SysEmpParam.OrgId); + } + + if (input.SearchStatus >= 0) + { + sql += " AND SU.Status = @Status"; + param.Add("Status", input.SearchStatus); + } + + if (!_userManager.SuperAdmin) + { + sql += " AND SU.AdminType <> @AdminType"; + param.Add("AdminType", AdminType.SuperAdmin); + + sql += " AND SU.Id <> @UserId"; + param.Add("UserId", _userManager.UserId); + + if (dataScopes.Count > 0) + { + sql += " AND SO.Id IN @OrgIds"; + param.Add("OrgIds", dataScopes.ToArray()); + } + } + + var users = await _dapperRepository.QueryPageData(sql, input, param); + + //foreach (var user in users.Items) + //{ + // user.SysEmpInfo = await _sysEmpService.GetEmpInfo(user.Id); + //} + return PageDataResult.PageResult(users); + } + + /// + /// 增加用户 + /// + /// + /// + [HttpPost("/houseMember/add")] + [UnitOfWork] + public async Task AddUser(AddHouseMemberInput input) + { + var id = await _sysUserService.AddUser(input); + var grantRoleInput = input.Adapt(); + grantRoleInput.Id = id; + + // 添加角色 + grantRoleInput.GrantRoleIdList.Add(input.RoleId); + await _sysUserService.GrantUserRole(grantRoleInput); + } + + /// + /// 获取角色 + /// + /// + /// + [HttpGet("/houseMember/defaultRole")] + public async Task DefaultRole([FromQuery] string orgId) + { + return (await GetDefaultRole(orgId)).Adapt(); + } + + /// + /// 获取用户拥有角色 + /// + /// + /// + [HttpGet("/houseMember/ownRole")] + public async Task GetUserOwnRole([FromQuery] QueryUserInput input) + { + return await _sysUserService.GetUserOwnRole(input); + } + + [HttpGet("/houseMember/defaultRoleRange")] + public async Task DefaultRoleRange() + { + return (await GetRoleRange()).Select(p => p.Adapt()).ToList(); + } + + /// + /// 删除用户 + /// + /// + /// + [HttpPost("/houseMember/delete")] + [UnitOfWork] + public async Task DeleteUser(DeleteUserInput input) + { + /* + * 未处理逻辑 + * 片区监管员在本片区已有安全员的情况下无法删除 + */ + + await _sysUserService.DeleteUser(input); + } + + /// + /// 更新用户 + /// + /// + /// + [HttpPost("/houseMember/edit")] + [UnitOfWork] + public async Task UpdateUser(UpdateUserInput input) + { + /* + * 未处理逻辑 + * 如果移动组织架构,会产生以下几种逻辑 + * 片区1监管员(无安全员或有其他监管员)=>片区2,直接成功 + * 片区1监管员(有安全员并且无其他监管员)=>片区2,无法移动 + * 片区1安全员=>片区2(有监管员),直接成功 + * 片区1安全员=>片区2(无监管员),无法移动,需要创建监管员 + */ + + await _sysUserService.UpdateUser(input); + } + + /// + /// 查看用户 + /// + /// + /// + [HttpGet("/houseMember/detail")] + public async Task GetUser([FromQuery] QueryUserInput input) + { + var sql = @"SELECT +SU.*, +SO.Name OrgName, +SUR.RoleName, +SUR.RoleCode +FROM sys_user SU +LEFT JOIN sys_emp SE ON SU.Id = SE.Id +LEFT JOIN sys_org SO ON SE.OrgId = SO.Id +LEFT JOIN ( + SELECT + SUR.SysUserId, + GROUP_CONCAT(SR.Name) RoleName, + GROUP_CONCAT(SR.Code) RoleCode + FROM sys_user_role SUR + LEFT JOIN sys_role SR ON SUR.SysRoleId = SR.Id + GROUP BY SUR.SysUserId +) SUR ON SU.Id = SUR.SysUserId +WHERE SU.Id=@Id"; + var user = (await _dapperRepository.QueryAsync(sql, new { input.Id })).SingleOrDefault(); + if (user != null) + { + user.SysEmpInfo = await _sysEmpService.GetEmpInfo(user.Id); + } + return user; + } + + /// + /// 修改用户状态 + /// + /// + /// + [HttpPost("/houseMember/changeStatus")] + public async Task ChangeUserStatus(UpdateUserInput input) + { + await _sysUserService.ChangeUserStatus(input); + } + + /// + /// 授权用户数据范围 + /// + /// + /// + [HttpPost("/houseMember/grantData")] + public async Task GrantUserData(UpdateUserInput input) + { + await _sysUserService.GrantUserData(input); + } + + /// + /// 获取用户拥有数据 + /// + /// + /// + [HttpGet("/houseMember/ownData")] + public async Task GetUserOwnData([FromQuery] QueryUserInput input) + { + return await _sysUserService.GetUserOwnData(input); + } + + /// + /// 获取当前机构中所创建的默认角色 + /// 片区中的第一个帐号必定为片区监管员 + /// + /// + /// + [NonAction] + private async Task GetDefaultRole(string orgId) + { + var roles = await GetRoleRange(); + if (roles.Count < 2) throw Oops.Oh("未配置正确的角色"); + + var _sysOrgRep = Db.GetRepository(); + var org = await _sysOrgRep.DetachedEntities.FirstOrDefaultAsync(p => p.Id == orgId); + // 如果当前组织为街道, 则直接返回安全员 + if (org == null || org.Type <= (int)OrgType.乡镇街道办事处) + { + return roles.LastOrDefault(); + } + + var _sysEmpRep = Db.GetRepository(); + var _sysUserRoleRep = Db.GetRepository(); + var userIds = await _sysEmpRep.DetachedEntities.Where(p => p.OrgId == orgId).Select(p => p.Id).ToListAsync(); + var roleIds = await _sysUserRoleRep.DetachedEntities.Where(p => userIds.Contains(p.SysUserId)).Select(p => p.SysRoleId).ToListAsync(); + + var _sysRoleRep = Db.GetRepository(); + var isExistZoneManager = await _sysRoleRep.DetachedEntities.AnyAsync(p => roleIds.Contains(p.Id) && p.Code == Enum.GetName(HouseManagerRole.ZoneManager).ToUnderScoreCase()); + // 存在片区监管员,返回安全员, 否则返回监管员 + if (isExistZoneManager) + { + return roles.LastOrDefault(); + } + + return roles.FirstOrDefault(); + } + + /// + /// 获取可创建的角色列表 + /// + /// + [NonAction] + private async Task> GetRoleRange() + { + var codes = (new[] { + Enum.GetName(HouseManagerRole.ZoneManager), + Enum.GetName(HouseManagerRole.HouseSecurityManager), + }).Select(p => p.ToUnderScoreCase()); + + var _sysRoleRep = Db.GetRepository(); + var roles = await _sysRoleRep.DetachedEntities.Where(p => codes.Contains(p.Code)).ToListAsync(); + + return roles; + } + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseMember/IHouseMemberService.cs b/Api/Ewide.Application/Service/HouseSafety/HouseMember/IHouseMemberService.cs new file mode 100644 index 0000000..76ea0f5 --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseMember/IHouseMemberService.cs @@ -0,0 +1,22 @@ +using Ewide.Core.Service; +using Microsoft.AspNetCore.Mvc; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace Ewide.Application.Service +{ + public interface IHouseMemberService + { + Task QueryMemberPageList([FromBody] UserInput input); + Task AddUser(AddHouseMemberInput input); + Task DefaultRole([FromQuery] string orgId); + Task DeleteUser(DeleteUserInput input); + Task UpdateUser(UpdateUserInput input); + Task GetUser([FromQuery] QueryUserInput input); + Task ChangeUserStatus(UpdateUserInput input); + Task GetUserOwnRole([FromQuery] QueryUserInput input); + Task GrantUserData(UpdateUserInput input); + Task GetUserOwnData([FromQuery] QueryUserInput input); + Task DefaultRoleRange(); + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseProjectInfo/Dto/HouseProjectInfoInput.cs b/Api/Ewide.Application/Service/HouseSafety/HouseProjectInfo/Dto/HouseProjectInfoInput.cs new file mode 100644 index 0000000..b2e4e17 --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseProjectInfo/Dto/HouseProjectInfoInput.cs @@ -0,0 +1,52 @@ +using Ewide.Core; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application.Service.HouseProjectInfo.Dto +{ + public class HouseProjectInfoInput : InputBase + { + public string Name { get; set; } + public string Note { get; set; } + public int Sort { get; set; } + public string AreaCode { get; set; } + public int Type { get; set; } + } + public class AddProjectInput : HouseProjectInfoInput + { + + } + public class UpdateProjectInput : HouseProjectInfoInput + { + [Required(ErrorMessage = "项目ID不可为空")] + public string Id { get; set; } + } + + public class DeleteProjectInput + { + [Required(ErrorMessage = "项目ID不可为空")] + public string Id { get; set; } + } + + public class QueryProjectInput : UpdateProjectInput + { + + } + + public class PageProjectInput: HouseProjectInfoInput + { + public string pid { get; set; } + } + + public class ListHouseProjectInfoInput + { + [Required(ErrorMessage = "区域编码不可为空")] + public string AreaCode { get; set; } + [Required(ErrorMessage = "性质不可为空")] + public int Type { get; set; } + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseProjectInfo/Dto/HouseProjectOutput.cs b/Api/Ewide.Application/Service/HouseSafety/HouseProjectInfo/Dto/HouseProjectOutput.cs new file mode 100644 index 0000000..307b548 --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseProjectInfo/Dto/HouseProjectOutput.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application.Service.HouseProjectInfo.Dto +{ + public class HouseProjectOutput + { + public string Id { get; set; } + public string Name { get; set; } + public string Note { get; set; } + public int Sort { get; set; } + public string AreaCode { get; set; } + public string AreaName { get; set; } + public int Type { get; set; } + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseProjectInfo/HouseProjectInfoService.cs b/Api/Ewide.Application/Service/HouseSafety/HouseProjectInfo/HouseProjectInfoService.cs new file mode 100644 index 0000000..d0f8112 --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseProjectInfo/HouseProjectInfoService.cs @@ -0,0 +1,147 @@ +using Ewide.Application.Entity; +using Ewide.Application.Service.HouseProjectInfo.Dto; +using Ewide.Core; +using Ewide.Core.Service; +using Furion.DatabaseAccessor; +using Furion.DatabaseAccessor.Extensions; +using Furion.DependencyInjection; +using Furion.DynamicApiController; +using Furion.FriendlyException; +using Mapster; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Data; +using System.Linq; +using System.Threading.Tasks; + +namespace Ewide.Application.Service.HouseProjectInfo +{ + /// + /// 项目管理相关服务 + /// + [ApiDescriptionSettings(Name = "HouseProjectInfo", Order = 170)] + public class HouseProjectInfoService : IHouseProjectInfoService, ITransient, IDynamicApiController + { + private readonly IRepository _houseProjectInfoRep; + + public HouseProjectInfoService(IRepository houseProjectInfoRep) + { + _houseProjectInfoRep = houseProjectInfoRep; + } + + /// + /// 添加项目 + /// + /// + /// + [HttpPost("/houseProjectInfo/add")] + public async Task AddProject(AddProjectInput input) + { + await _houseProjectInfoRep.InsertNowAsync(input.Adapt()); + } + + /// + /// 删除项目 + /// + /// + /// + [HttpPost("/houseProjectInfo/delete")] + public async Task DeleteProject(DeleteProjectInput input) + { + var project = _houseProjectInfoRep.FirstOrDefault(p => p.Id == input.Id); + await project.DeleteNowAsync(); + } + + /// + /// 编辑项目 + /// + /// + /// + [HttpPost("/houseProjectInfo/edit")] + public async Task UpdateProject(UpdateProjectInput input) + { + var project = input.Adapt(); + await project.UpdateExcludeAsync(new[] { nameof(BsHouseProjectInfo.AreaCode) }, true); + } + + /// + /// 通过ID获取项目 + /// + /// + /// + [HttpGet("/houseProjectInfo/getById")] + public async Task GetById([Required] string projectId) + { + return await _houseProjectInfoRep.DetachedEntities.FirstOrDefaultAsync(p => p.Id == projectId); + } + + /// + /// 分页查询 + /// + /// + /// + [HttpPost("/houseProjectInfo/page")] + public async Task QueryProjectPageList([FromBody] PageProjectInput input) + { + var areaCodeRep = Db.GetRepository(); + var projects = await _houseProjectInfoRep.DetachedEntities + .Join(areaCodeRep.DetachedEntities, p => p.AreaCode, a => a.Code, (p, a) => new { p, AreaName = a.Name }) + .Where(input.Type>0, x => x.p.Type == input.Type) + .Where(!string.IsNullOrEmpty(input.Name), x => x.p.Name.Contains(input.Name)) + .Where(!string.IsNullOrEmpty(input.Note), x => x.p.Note.Contains(input.Note)) + .Where(!string.IsNullOrEmpty(input.AreaCode), x => x.p.AreaCode == input.AreaCode) + .Where(!string.IsNullOrEmpty(input.pid) , x=> x.p.AreaCode.Contains(input.pid)) + .Select(x => new { x.p.Id, x.p.Name, x.p.Note, x.p.Sort, x.p.AreaCode, x.AreaName, x.p.Type }.Adapt()).ToPagedListAsync(input.PageIndex, input.PageSize); + return PageDataResult.PageResult(projects); + } + + /// + /// + /// + /// + /// + [HttpGet("/houseProjectInfo/detail")] + public async Task GetProject([FromQuery] QueryProjectInput input) + { + var user = await _houseProjectInfoRep.DetachedEntities.FirstOrDefaultAsync(p => p.Id == input.Id); + var userDto = user.Adapt(); + + return userDto; + } + + [HttpGet("/houseProjectInfo/nextSort")] + public async Task GetNextProjectSortByAreaCode([FromQuery] ListHouseProjectInfoInput input) + { + //var projects = await _houseProjectInfoRep.DetachedEntities + // .Where(p => p.AreaCode == input.AreaCode && p.Type == input.Type) + // .Select(p => p.Sort) + // .DefaultIfEmpty() + // .MaxAsync(); + if (input.Type > 2 || input.Type < 1) + { + throw Oops.Oh("类型参数异常"); + } + var p = await _houseProjectInfoRep.DetachedEntities + .Where(p => p.AreaCode == input.AreaCode && p.Type == input.Type) + .MaxAsync(p => (int?)p.Sort); + + return p.GetValueOrDefault(0) + 1; + } + + /// + /// 获取项目下拉列表 + /// + /// + /// + [HttpGet("houseProjectInfo/list")] + public async Task GetProjectList([FromQuery] ListHouseProjectInfoInput input) + { + return await _houseProjectInfoRep.DetachedEntities + .Where(p => p.AreaCode == input.AreaCode && p.Type == input.Type) + .OrderBy(p => p.Sort) + .ToListAsync(); + } + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseProjectInfo/IHouseProjectInfoService.cs b/Api/Ewide.Application/Service/HouseSafety/HouseProjectInfo/IHouseProjectInfoService.cs new file mode 100644 index 0000000..e8b05c6 --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseProjectInfo/IHouseProjectInfoService.cs @@ -0,0 +1,24 @@ +using Ewide.Application.Entity; +using Ewide.Application.Service.HouseProjectInfo.Dto; +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application.Service.HouseProjectInfo +{ + public interface IHouseProjectInfoService + { + Task AddProject(AddProjectInput input); + Task DeleteProject(DeleteProjectInput input); + Task UpdateProject(UpdateProjectInput input); + Task GetById([FromRoute] string projectId); + Task GetProject([FromQuery] QueryProjectInput input); + Task QueryProjectPageList([FromQuery] PageProjectInput input); + + Task GetNextProjectSortByAreaCode([FromQuery] ListHouseProjectInfoInput input); + Task GetProjectList([FromQuery] ListHouseProjectInfoInput input); + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseQuery/Dto/HouseQueryInput.cs b/Api/Ewide.Application/Service/HouseSafety/HouseQuery/Dto/HouseQueryInput.cs new file mode 100644 index 0000000..096f601 --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseQuery/Dto/HouseQueryInput.cs @@ -0,0 +1,21 @@ +using Ewide.Core; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application +{ + public class HouseQueryInput: PageInputBase + { + + } + + public class HouseQueryDetailInput + { + [Required(ErrorMessage = "Id不能为空")] + public string Id { get; set; } + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseQuery/Dto/HouseQueryOutput.cs b/Api/Ewide.Application/Service/HouseSafety/HouseQuery/Dto/HouseQueryOutput.cs new file mode 100644 index 0000000..a4464e1 --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseQuery/Dto/HouseQueryOutput.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application +{ + public class HouseQueryOutput + { + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseQuery/HouseQueryService.cs b/Api/Ewide.Application/Service/HouseSafety/HouseQuery/HouseQueryService.cs new file mode 100644 index 0000000..5800149 --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseQuery/HouseQueryService.cs @@ -0,0 +1,110 @@ +using Dapper; +using Ewide.Core.Extension; +using Furion.DatabaseAccessor; +using Furion.DependencyInjection; +using Furion.DynamicApiController; +using Mapster; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application.Service.HouseSafety.HouseQuery +{ + /// + /// 住宅查询 + /// + [ApiDescriptionSettings(Name = "HouseQuery", Order = 210)] + public class HouseQueryService : IHouseQueryService, IDynamicApiController, ITransient + { + private readonly IRepository _houseCodeRep; + private readonly IRepository _houseInfoRep; + private readonly IRepository _houseTaskRep; + private readonly IDapperRepository _dapperRepository; + + public HouseQueryService(IRepository HouseCodeRep, IRepository HouseInfoRep, IRepository HouseTaskRep, IDapperRepository dapperRepository) + { + _houseCodeRep = HouseCodeRep; + _houseInfoRep = HouseInfoRep; + _houseTaskRep = HouseTaskRep; + _dapperRepository = dapperRepository; + } + + [HttpPost("/houseQuery/page")] + public async Task QueryPage([FromBody] HouseQueryInput input) + { + var sql = @"SELECT + HC.ID, + HC.HouseCode, + AA.Name AreaName, + RA.Name RoadName, + CA.Name CommName, + Proj.AreaCode, + Proj.Note, + Proj.Name, + CONCAT(Proj.Name,'(',Proj.Note,')') FullProjName, + HC.Address, + IFNULL(HI.BuildingName,'') BuildingName, + IFNULL(HI.TotalFloor,0) TotalFloor, + IFNULL(HI.TotalArea,0) TotalArea, + HI.LandAttribute, + IFNULL(HI.HouseGrade,0) HouseGrade, + HC.Type, + HC.No, + HI.State, + HI.CompletedDate, + HI.CreatedTime +FROM bs_house_code HC +LEFT JOIN bs_house_info HI ON HI.HouseCodeId = HC.Id +LEFT JOIN bs_house_projectinfo Proj ON Proj.Id=HC.ProjectId +LEFT JOIN sys_area_code CA ON CA.Code = Proj.AreaCode +LEFT JOIN sys_area_code RA ON RA.AdCode = SUBSTR(CA.AdCode,1,9) +LEFT JOIN sys_area_code AA ON AA.AdCode = SUBSTR(CA.AdCode,1,6) +WHERE 1=1"; + + return await _dapperRepository.QueryPageDataDynamic(sql, input, filterFields: new string[] { + "HouseCode", + "Address", + "BuildingName", + "State", + "AreaCode", + "LandAttribute", + "HouseGrade", + "CompletedDate", + "CreatedTime", + "TotalArea", + "TotalFloor" + }); + } + + [HttpGet("/houseQuery/detail")] + public async Task Detail([FromQuery] HouseQueryDetailInput input) + { + var houseCodeOutputAsync = await _dapperRepository.QueryAsync( + @"SELECT HC.Id,HC.Address,HC.ProjectId,HC.ZoneId,HC.Type,AA.Name AreaName,RA.Name RoadName,CA.Name CommName,O.Name ZoneName,Proj.Note ProjectNote,CONCAT(Proj.Name,'(',Proj.Note,')') ProjectFullName,HC.HouseCode,HC.Lng,HC.Lat,HC.No FROM bs_house_code HC +LEFT JOIN bs_house_projectinfo Proj ON Proj.Id=HC.ProjectId +LEFT JOIN sys_org O ON HC.ZoneId = O.Id +LEFT JOIN sys_area_code CA ON CA.Code = Proj.AreaCode +LEFT JOIN sys_area_code RA ON RA.AdCode = SUBSTR(CA.AdCode,1,9) +LEFT JOIN sys_area_code AA ON AA.AdCode = SUBSTR(CA.AdCode,1,6) +WHERE HC.Id=@Id", new { input.Id } + ); + + var houseCodeOutput = houseCodeOutputAsync.SingleOrDefault(); + + + var houseInfoOutputForDetailPage = new HouseInfoOutputForDetailPage + { + HouseCode = houseCodeOutput + }; + + var houseInfoOutput = (await _houseInfoRep.DetachedEntities.FirstOrDefaultAsync(p => p.HouseCodeId == houseCodeOutput.Id)).Adapt(); + houseInfoOutputForDetailPage.HouseInfo = houseInfoOutput; + + return houseInfoOutputForDetailPage; + } + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseQuery/IHouseQueryService.cs b/Api/Ewide.Application/Service/HouseSafety/HouseQuery/IHouseQueryService.cs new file mode 100644 index 0000000..aa1e217 --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseQuery/IHouseQueryService.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application.Service.HouseSafety.HouseQuery +{ + public interface IHouseQueryService + { + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseSelector/Dto/HouseSelectorInput.cs b/Api/Ewide.Application/Service/HouseSafety/HouseSelector/Dto/HouseSelectorInput.cs new file mode 100644 index 0000000..0001eff --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseSelector/Dto/HouseSelectorInput.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application +{ + public class HouseSelectInput + { + [Required(ErrorMessage = "用户Id不能为空")] + public string UserId { get; set; } + + [Required(ErrorMessage = "房屋编码Id不能为空")] + public string[] Ids { get; set; } + } + + public class QueryHouseSelectorInput : QueryHouseCodeInput + { + [Required(ErrorMessage = "用户Id不能为空")] + public string UserId { get; set; } + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseSelector/Dto/HouseSelectorOutput.cs b/Api/Ewide.Application/Service/HouseSafety/HouseSelector/Dto/HouseSelectorOutput.cs new file mode 100644 index 0000000..43fd2e9 --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseSelector/Dto/HouseSelectorOutput.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application +{ + public class HouseSelectorOutput + { + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseSelector/HouseSelectorService.cs b/Api/Ewide.Application/Service/HouseSafety/HouseSelector/HouseSelectorService.cs new file mode 100644 index 0000000..df04bd2 --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseSelector/HouseSelectorService.cs @@ -0,0 +1,225 @@ +using Dapper; +using Ewide.Core; +using Ewide.Core.Extension; +using Furion.DatabaseAccessor; +using Furion.DatabaseAccessor.Extensions; +using Furion.DependencyInjection; +using Furion.DynamicApiController; +using Furion.FriendlyException; +using Mapster; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Ewide.Application.Service +{ + /// + /// 选房相关 + /// + [ApiDescriptionSettings(Name = "HouseSelector", Order = 180)] + public class HouseSelectorService : IHouseSelectorService, IDynamicApiController, ITransient + { + private readonly IUserManager _userManager; + private readonly IDapperRepository _dapperRep; + + private readonly IRepository _bsHouseMemberRelationRep; + private readonly IRepository _bsHouseCodeRep; + private readonly IRepository _bsHouseTaskRep; + private readonly IRepository _sysUserRep; + private readonly IHouseZoneService _houseZoneService; + + private readonly IHouseLogService _houseLogService; + + public HouseSelectorService( + IUserManager userManager, + IDapperRepository dapperRep, + IRepository bsHouseMemberRelationRep, + IRepository bsHouseCodeRep, + IRepository bsHouseTaskRep, + IRepository sysUserRep, + IHouseZoneService houseZoneService, + IHouseLogService houseLogService + ) + { + _userManager = userManager; + + _dapperRep = dapperRep; + _bsHouseMemberRelationRep = bsHouseMemberRelationRep; + _bsHouseCodeRep = bsHouseCodeRep; + _bsHouseTaskRep = bsHouseTaskRep; + _sysUserRep = sysUserRep; + _houseZoneService = houseZoneService; + + _houseLogService = houseLogService; + } + + /// + /// 获取人员允许绑定的房屋编码列表 + /// + /// + /// + [HttpPost("/houseSelector/selectorPage")] + public async Task HouseSelectorList([FromBody] QueryHouseSelectorInput input) + { + var sql = @"SELECT + HC.*,AA.Name AreaName,RA.Name RoadName,CA.Name CommName,Proj.AreaCode,Proj.Note,CONCAT(Proj.`Name`, IFNULL(CONCAT('(',Proj.Note,')'), '')) FullProjName +FROM bs_house_code HC +LEFT JOIN bs_house_projectinfo Proj ON Proj.Id=HC.ProjectId +LEFT JOIN sys_area_code CA ON CA.Code = Proj.AreaCode +LEFT JOIN sys_area_code RA ON RA.AdCode = SUBSTR(CA.AdCode,1,9) +LEFT JOIN sys_area_code AA ON AA.AdCode = SUBSTR(CA.AdCode,1,6) +LEFT JOIN bs_house_member_relation HM ON HC.Id = HM.HouseCodeId +INNER JOIN (SELECT * FROM sys_emp WHERE Id = @UserId) E ON HC.ZoneId = E.OrgId +WHERE HM.Id IS NULL"; + return await _dapperRep.QueryPageDataDynamic(sql, input, param: new + { + input.UserId + }, filterFields: new[] { + nameof(BsHouseCode.Address) , + nameof(BsHouseCode.CreatedTime) + }); + } + + /// + /// 获取人员已经绑定的房屋编码列表 + /// + /// + /// + [HttpPost("/houseSelector/selectedPage")] + public async Task HouseSelectedList([FromBody] QueryHouseSelectorInput input) + { + var sql = @"SELECT + HC.*,AA.Name AreaName,RA.Name RoadName,CA.Name CommName,Proj.AreaCode,Proj.Note,CONCAT(Proj.`Name`, IFNULL(CONCAT('(',Proj.Note,')'), '')) FullProjName +FROM bs_house_code HC +LEFT JOIN bs_house_projectinfo Proj ON Proj.Id=HC.ProjectId +LEFT JOIN sys_area_code CA ON CA.Code = Proj.AreaCode +LEFT JOIN sys_area_code RA ON RA.AdCode = SUBSTR(CA.AdCode,1,9) +LEFT JOIN sys_area_code AA ON AA.AdCode = SUBSTR(CA.AdCode,1,6) +INNER JOIN (SELECT * FROM bs_house_member_relation WHERE SysUserId = @UserId) HM ON HC.Id = HM.HouseCodeId"; + return await _dapperRep.QueryPageDataDynamic(sql, input, param: new + { + input.UserId + }, filterFields: new[] { + nameof(BsHouseCode.Address) , + nameof(BsHouseCode.CreatedTime) + }); + } + + /// + /// 从人员选择房屋 + /// + /// + /// + [HttpPost("/houseSelector/select")] + [UnitOfWork] + public async Task Select([FromBody] HouseSelectInput input) + { + #region 验证房屋是否在当前用户可选范围内 + + var ids = input.Ids.Distinct().ToList(); + if (ids.Count == 0) throw Oops.Oh("没有选中任何房屋"); + + // 验证当前用户是否安全员 **须补充 + + // 已经被选中的房屋,从ids中剔除 + var houseSelected = await _bsHouseMemberRelationRep.DetachedEntities + .Where(p => ids.Contains(p.HouseCodeId)) + .Select(p => p.HouseCodeId) + .ToListAsync(); + if (houseSelected.Count > 0) + { + houseSelected.ForEach(p => + { + var index = ids.IndexOf(p); + if (index > -1) + { + ids.RemoveAt(index); + } + }); + } + + if (ids.Count == 0) throw Oops.Oh("当前房屋在此之前已经全部被选中,请确认"); + + var selectedUser = await _sysUserRep.DetachedEntities.FirstOrDefaultAsync(p => p.Id.Equals(input.UserId)); + + // 从用户所在片区中过滤房屋 + var zoneId = await _houseZoneService.GetZoneByUser(selectedUser.Id); + var house = await _bsHouseCodeRep.DetachedEntities.Where(p => ids.Contains(p.Id) && p.ZoneId == zoneId).Select(p => p.Id).ToListAsync(); + + if (house.Count == 0) throw Oops.Oh("选中的房屋错误"); + + #endregion + + // 选定房屋 + house.ForEach(async p => + { + var originalTask = _bsHouseTaskRep.DetachedEntities.FirstOrDefault(t => t.HouseCodeId == p && t.TaskType == 0 && t.IsEnabled); + if (originalTask == null) + { + new BsHouseTask + { + Id = System.Guid.NewGuid().ToString(), + HouseCodeId = p, + UserID = selectedUser.Id, + EndTime = System.DateTime.Now.AddMonths(1), + Status = 0, + TaskType = 0 + }.Insert(); + + await _houseLogService.Done(p); + await _houseLogService.Add(p, selectedUser, HouseLogType.CreateInfo); + } + else + { + var sort = await _houseLogService.AddThenDone(p, _userManager.User, HouseLogType.SelectMember); + if (originalTask.Status != 6)//建档未完成,生成新建档任务分配给新的人员;原建档任务数据保留,有效性设置为false,取消巡查关系 + { + var newTask = originalTask.Adapt(); + newTask.Id = System.Guid.NewGuid().ToString(); + newTask.UserID = input.UserId; + newTask.EndTime = System.DateTime.Now.AddMonths(1); + newTask.Insert(); + + originalTask.IsEnabled = false; + originalTask.Update(); + + sort = await _houseLogService.Add(p, selectedUser, HouseLogType.CreateInfo, sort: sort); + }//已建档完成,不再分配建档任务,仅更换巡查关系 + else + { + var originalRelation = _bsHouseMemberRelationRep.DetachedEntities.FirstOrDefault(r => r.HouseCodeId == p && r.SysUserId == originalTask.UserID); + originalRelation.Delete(); + } + } + + new BsHouseMemberRelation + { + SysUserId = selectedUser.Id, + HouseCodeId = p + }.Insert(); + }); + } + + [HttpPost("/houseSelector/revoke")] + [UnitOfWork] + public async Task Revoke([FromBody] HouseSelectInput input) + { + var ids = input.Ids.Distinct().ToList(); + if (ids.Count == 0) throw Oops.Oh("没有选中任何房屋"); + + var selected = await _bsHouseMemberRelationRep.Where(p => ids.Contains(p.HouseCodeId) && p.SysUserId == input.UserId).ToListAsync(); + + selected.ForEach(p => + { + p.Delete(); + }); + } + + public async Task SelectMember() + { + + } + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseSelector/IHouseSelectorService.cs b/Api/Ewide.Application/Service/HouseSafety/HouseSelector/IHouseSelectorService.cs new file mode 100644 index 0000000..df71ac7 --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseSelector/IHouseSelectorService.cs @@ -0,0 +1,18 @@ +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application.Service +{ + public interface IHouseSelectorService + { + Task HouseSelectorList([FromQuery] QueryHouseSelectorInput input); + Task HouseSelectedList([FromQuery] QueryHouseSelectorInput input); + Task Select([FromBody] HouseSelectInput input); + Task Revoke([FromBody] HouseSelectInput input); + Task SelectMember(); + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseTask/Dto/HouseTaskInput.cs b/Api/Ewide.Application/Service/HouseSafety/HouseTask/Dto/HouseTaskInput.cs new file mode 100644 index 0000000..53bdf4b --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseTask/Dto/HouseTaskInput.cs @@ -0,0 +1,171 @@ +using Ewide.Core; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application +{ + public class HouseTaskInput + { + [Required(ErrorMessage = "巡查日期不能为空")] + public DateTime PatrolDate { get; set; } + + [Required(ErrorMessage = "巡查人员/单位不能为空")] + public string PatrolUser { get; set; } + + /// + /// 沉降倾斜 + /// + public string SettlementTilt { get; set; } + + /// + /// 沉降倾斜附件 + /// + public string SettlementTiltFiles { get; set; } + + /// + /// 其他情况 + /// + public string OtherInfo { get; set; } + + /// + /// 其他情况附件 + /// + public string OtherInfoFiles { get; set; } + + //[Required(ErrorMessage = "巡查初始等级不能为空")] + public int InitGrade { get; set; } + //[Required(ErrorMessage = "巡查损坏等级不能为空")] + public int DamageGrade { get; set; } + //[Required(ErrorMessage = "巡查综合等级不能为空")] + public int ComprehensiveGrade { get; set; } + #region 调查情况investigation + /// + /// 房屋场地 + /// + public string HouseSite { get; set; } + + /// + /// 相邻施工 + /// + public string AdjacentConstruction { get; set; } + + /// + /// 化学侵蚀 + /// + public string ChemicalErosion { get; set; } + + /// + /// 结构拆改 + /// + public int? StructuralDismantling { get; set; } + + /// + /// 加层改造 + /// + public int? AddingLayer { get; set; } + + /// + /// 修缮加固 + /// + public string RepairAndReinforce { get; set; } + + /// + /// 历史灾害 + /// + public string HistoricalCalamity { get; set; } + + /// + /// 使用功能变更 + /// + public string FunctionalChange { get; set; } + + /// + /// 其他调查内容 + /// + public string OtherContents { get; set; } + #endregion + /// + /// 主要安全隐患综述 + /// + public string MainSafety { get; set; } + + /// + /// 处理意见 + /// + public int? HandlingOpinion { get; set; } + + /// + /// 处理意见备注 + /// + public string HandlingOpinionRemark { get; set; } + + /// + /// 整改情况 + /// + public int? RectifyAndReform { get; set; } + + /// + /// 整改情况备注 + /// + public string RectifyAndReformRemark { get; set; } + + /// + /// 巡查结果:1正常,-1异常 + /// + //[Required(ErrorMessage = "巡查结果不能为空")] + public int PatrolResult { get; set; } + + public string PatrolResultRemark { get; set; } + + /// + /// 上报街道 + /// + public int? ReportRoad { get; set; } + + /// + /// 上报街道时间 + /// + public DateTime? ReportRoadTime { get; set; } + + /// + /// 上报区住建 + /// + public int? ReportArea { get; set; } + + /// + /// 上报区住建时间 + /// + public DateTime? ReportAreaTime { get; set; } + + /// + /// 上报备注 + /// + public string ReportRemark { get; set; } + } + + public class AddHouseTaskInput : HouseTaskInput + { + + } + + public class EditHouseTaskInput : HouseTaskInput + { + [Required(ErrorMessage = "任务Id不能为空")] + public string Id { get; set; } + } + + public class SubmitHouseTaskInput + { + [Required(ErrorMessage = "任务Id不能为空")] + public string TaskId { get; set; } + } + + public class QueryHouseTaskInput : PageInputBase + { + + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseTask/Dto/HouseTaskOutput.cs b/Api/Ewide.Application/Service/HouseSafety/HouseTask/Dto/HouseTaskOutput.cs new file mode 100644 index 0000000..b5f1df0 --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseTask/Dto/HouseTaskOutput.cs @@ -0,0 +1,173 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application +{ + public class HouseTaskOutput + { + public DateTime? PatrolDate { get; set; } + public string PatrolUser { get; set; } + + /// + /// 沉降倾斜 + /// + public string SettlementTilt { get; set; } + + /// + /// 沉降倾斜附件 + /// + public string SettlementTiltFiles { get; set; } + + /// + /// 其他情况 + /// + public string OtherInfo { get; set; } + + /// + /// 其他情况附件 + /// + public string OtherInfoFiles { get; set; } + + /// + /// 初始等级 + /// + public int? InitGrade { get; set; } + + /// + /// 损坏等级 + /// + public int? DamageGrade { get; set; } + + /// + /// 综合等级 + /// + public int? ComprehensiveGrade { get; set; } + + #region 调查情况investigation + /// + /// 房屋场地 + /// + public string HouseSite { get; set; } + + /// + /// 相邻施工 + /// + public string AdjacentConstruction { get; set; } + + /// + /// 化学侵蚀 + /// + public string ChemicalErosion { get; set; } + + /// + /// 结构拆改 + /// + public int? StructuralDismantling { get; set; } + + /// + /// 加层改造 + /// + public int? AddingLayer { get; set; } + + /// + /// 修缮加固 + /// + public string RepairAndReinforce { get; set; } + + /// + /// 历史灾害 + /// + public string HistoricalCalamity { get; set; } + + /// + /// 使用功能变更 + /// + public string FunctionalChange { get; set; } + + /// + /// 其他调查内容 + /// + public string OtherContents { get; set; } + #endregion + + /// + /// 主要安全隐患综述 + /// + public string MainSafety { get; set; } + + /// + /// 处理意见 + /// + public int? HandlingOpinion { get; set; } + + /// + /// 处理意见备注 + /// + public string HandlingOpinionRemark { get; set; } + + /// + /// 整改情况 + /// + public int? RectifyAndReform { get; set; } + + /// + /// 整改情况备注 + /// + public string RectifyAndReformRemark { get; set; } + + /// + /// 巡查结果:1正常,-1异常 + /// + public int? PatrolResult { get; set; } + + /// + /// 巡查异常描述 + /// + public string PatrolResultRemark { get; set; } + + /// + /// 上报街道 + /// + public int? ReportRoad { get; set; } + + /// + /// 上报街道时间 + /// + public DateTime? ReportRoadTime { get; set; } + + /// + /// 上报区住建 + /// + public int? ReportArea { get; set; } + + /// + /// 上报区住建时间 + /// + public DateTime? ReportAreaTime { get; set; } + + /// + /// 上报备注 + /// + public string ReportRemark { get; set; } + + public int Status { get; set; } + + /// + /// 提交时间 + /// + public DateTime? SubmitTime { get; set; } + + /// + /// 最后提交时间 + /// + public DateTime? LastSubmitTime { get; set; } + + /// + /// 是否有效 + /// + public bool IsEnabled { get; set; } + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseTask/HouseTaskService.cs b/Api/Ewide.Application/Service/HouseSafety/HouseTask/HouseTaskService.cs new file mode 100644 index 0000000..6337437 --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseTask/HouseTaskService.cs @@ -0,0 +1,102 @@ +using Dapper; +using Ewide.Core; +using Ewide.Core.Extension; +using Furion.DatabaseAccessor; +using Furion.DatabaseAccessor.Extensions; +using Furion.DependencyInjection; +using Furion.DynamicApiController; +using Furion.FriendlyException; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application.Service +{ + /// + /// 房屋任务(巡查任务/建档任务) + /// + [ApiDescriptionSettings(Name = "HouseTask", Order = 190)] + public class HouseTaskService : IHouseTaskService, IDynamicApiController, ITransient + { + private readonly IRepository _houseTaskRep; + private readonly IRepository _houseInfoRep; + private readonly IDapperRepository _dapperRepository; + private readonly IUserManager _userManager; + + private readonly IHouseLogService _houseLogService; + + public HouseTaskService(IRepository HouseTaskRep, IRepository HouseInfoRep, IDapperRepository dapperRepository, IUserManager userManager, IHouseLogService houseLogService) + { + _houseTaskRep = HouseTaskRep; + _houseInfoRep = HouseInfoRep; + _dapperRepository = dapperRepository; + _userManager = userManager; + + _houseLogService = houseLogService; + } + + [HttpPost("/houseTask/page")] + public async Task QueryPage([FromBody] QueryHouseTaskInput input) + { + var sql = @"SELECT T.Id,AA.Name AreaName,RA.Name RoadName,CA.Name CommName,Proj.AreaCode,Proj.Note,Proj.Name,CONCAT(Proj.`Name`, IFNULL(CONCAT('(',Proj.Note,')'), '')) FullProjName,HC.HouseCode,HC.Address,T.EndTime,HC.Type,HC.Industry,HC.No,T.Status,IFNULL(HI.State,0) State FROM `bs_house_task` T +LEFT JOIN bs_house_code HC ON T.HouseCodeId = HC.Id +LEFT JOIN bs_house_info HI ON HI.HouseCodeId = T.HouseCodeId +LEFT JOIN bs_house_projectinfo Proj ON Proj.Id=HC.ProjectId +LEFT JOIN sys_area_code CA ON CA.Code = Proj.AreaCode +LEFT JOIN sys_area_code RA ON RA.AdCode = SUBSTR(CA.AdCode,1,9) +LEFT JOIN sys_area_code AA ON AA.AdCode = SUBSTR(CA.AdCode,1,6) +WHERE T.IsEnabled = 1 {0}"; + var user = await _userManager.CheckUserAsync(); + if (user == null) throw Oops.Oh("登录信息丢失"); + + var userRoles = await _userManager.GetUserRoleList(); + var userOrg = await _userManager.GetUserOrgInfo(); + var param = new DynamicParameters(); + if (userRoles.Where(r => r.Code == Enum.GetName(HouseManagerRole.HouseSecurityManager).ToUnderScoreCase()).Any()) + { + sql = String.Format(sql, " AND T.UserID=@UserID "); + param.Add("UserID", user.Id); + } + + if (userRoles.Where(r => r.Code == Enum.GetName(HouseManagerRole.ZoneManager).ToUnderScoreCase()).Any()) + { + sql = String.Format(sql, " AND (T.Status=3 OR T.Status=6) AND HC.ZoneId = @ZoneId "); + param.Add("ZoneId", userOrg.Id); + } + + return await _dapperRepository.QueryPageDataDynamic(sql, input, param, filterFields: new string[] { "Type", "Address", "HouseCode", "Status","State" }); + } + + [HttpPost("/houseTask/submit")] + [UnitOfWork] + [AllowAnonymous] + public async Task Submit([FromBody] SubmitHouseTaskInput input) + { + //获取任务实体 + var houseTask = await _houseTaskRep.DetachedEntities.FirstOrDefaultAsync(t => t.Id == input.TaskId); + if (houseTask == null) throw Oops.Oh("任务不存在"); + houseTask.Status = 2; + houseTask.LastSubmitTime = DateTime.Now; + if (!houseTask.SubmitTime.HasValue) houseTask.SubmitTime = houseTask.LastSubmitTime; + await houseTask.UpdateExcludeAsync(new string[] { nameof(BsHouseTask.TaskType) }, ignoreNullValues: true); + + if(houseTask.TaskType == 0) + { + var houseInfo = await _houseInfoRep.DetachedEntities.FirstOrDefaultAsync(h => h.HouseCodeId == houseTask.HouseCodeId); + if (houseInfo == null) throw Oops.Oh("提交审核失败:请先保存后再提交"); + + houseInfo.State = 5; + await houseInfo.UpdateExcludeAsync(new[] { nameof(BsHouseInfo.HouseGrade) }, true); + } + + // 提交时流转日志 + await _houseLogService.Done(houseTask.HouseCodeId); + } + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseTask/IHouseTaskService.cs b/Api/Ewide.Application/Service/HouseSafety/HouseTask/IHouseTaskService.cs new file mode 100644 index 0000000..75b2d3d --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseTask/IHouseTaskService.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application.Service +{ + public interface IHouseTaskService + { + Task QueryPage(QueryHouseTaskInput input); + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseTaskCheckRecord/Dto/HouseTaskCheckRecordInput.cs b/Api/Ewide.Application/Service/HouseSafety/HouseTaskCheckRecord/Dto/HouseTaskCheckRecordInput.cs new file mode 100644 index 0000000..497a3a7 --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseTaskCheckRecord/Dto/HouseTaskCheckRecordInput.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application +{ + public class HouseTaskCheckRecordInput + { + /// + /// 任务Id + /// + [Required(ErrorMessage = "任务参数有误")] + public string TaskId { get; set; } + + /// + /// 通过3;退回-1 + /// + [Required(ErrorMessage = "审核结果不能为空")] + public int PassOrBack { get; set; } + + public DataStatus PassOrBackDataStatus + { + get + { + return PassOrBack switch + { + -1 => DataStatus.Back, + 1 => DataStatus.TempSaved, + 2 => DataStatus.Saved, + 3 => DataStatus.Submited, + 6 => DataStatus.Passed, + _ => DataStatus.Init, + }; + } + } + + /// + /// 审核内容 + /// + [Required(ErrorMessage = "审核内容不能为空")] + public string Content { get; set; } + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseTaskCheckRecord/Dto/HouseTaskCheckRecordOutput.cs b/Api/Ewide.Application/Service/HouseSafety/HouseTaskCheckRecord/Dto/HouseTaskCheckRecordOutput.cs new file mode 100644 index 0000000..bdfa2ab --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseTaskCheckRecord/Dto/HouseTaskCheckRecordOutput.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application.Service.HouseSafety.HouseTaskCheckRecord.Dto +{ + public class HouseTaskCheckRecordOutput + { + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseZone/Dto/HouseZoneInput.cs b/Api/Ewide.Application/Service/HouseSafety/HouseZone/Dto/HouseZoneInput.cs new file mode 100644 index 0000000..1d69b94 --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseZone/Dto/HouseZoneInput.cs @@ -0,0 +1,41 @@ +using Ewide.Core.Service; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application +{ + public class HouseZoneInput + { + [Required(ErrorMessage = "区域编码不可为空")] + [MinLength(9, ErrorMessage = "区域编码长度必须为9位及以上")] + public string AreaCode { get; set; } + } + + public class AddHouseZoneInput : OrgInput + { + /// + /// 所属街道 + /// + [Required(ErrorMessage = "所属街道不能为空")] + public override string Pid { get; set; } + /// + /// 名称 + /// + [Required(ErrorMessage = "片区名称不能为空")] + public override string Name { get; set; } + + } + + public class UpdateHouseZoneInput : AddHouseZoneInput + { + /// + /// 机构Id + /// + [Required(ErrorMessage = "片区Id不能为空")] + public string Id { get; set; } + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseZone/Dto/HouseZoneOutput.cs b/Api/Ewide.Application/Service/HouseSafety/HouseZone/Dto/HouseZoneOutput.cs new file mode 100644 index 0000000..d95ac21 --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseZone/Dto/HouseZoneOutput.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application +{ + class HouseZoneOutput + { + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseZone/HouseZoneService.cs b/Api/Ewide.Application/Service/HouseSafety/HouseZone/HouseZoneService.cs new file mode 100644 index 0000000..791374b --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseZone/HouseZoneService.cs @@ -0,0 +1,175 @@ +using Ewide.Core; +using Ewide.Core.Extension; +using Ewide.Core.Service; +using Furion.DatabaseAccessor; +using Furion.DatabaseAccessor.Extensions; +using Furion.DependencyInjection; +using Furion.DynamicApiController; +using Furion.FriendlyException; +using Mapster; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Threading.Tasks; + +namespace Ewide.Application.Service +{ + /// + /// 片区相关 + /// + [ApiDescriptionSettings(Name = "HouseZone", Order = 180)] + public class HouseZoneService : IHouseZoneService, IDynamicApiController, ITransient + { + private readonly IUserManager _userManager; + private readonly IRepository _sysOrgRep; + private readonly IRepository _sysEmpRep; + private readonly ISysOrgService _sysOrgService; + + public HouseZoneService( + IUserManager userManager, + IRepository sysOrgRep, + IRepository sysEmpRep, + ISysOrgService sysOrgService + ) + { + _userManager = userManager; + _sysOrgRep = sysOrgRep; + _sysEmpRep = sysEmpRep; + _sysOrgService = sysOrgService; + } + + /// + /// 获取片区列表 + /// + /// + /// + [HttpGet("/houseZone/list")] + public async Task GetHouseZoneList([FromQuery] HouseZoneInput input) + { + var areaCode = input.AreaCode.Substring(0, 9); + var road = await _sysOrgRep.DetachedEntities.FirstOrDefaultAsync(p => p.AreaCode == areaCode); + if (road == null) throw Oops.Oh("未在组织机构中配置街道"); + return await _sysOrgRep.DetachedEntities + .Where(p => p.Pid == road.Id) + .Where(p => p.Type == (int)OrgType.片区) + .OrderBy(p => p.Sort) + .Select(p => new + { + p.Id, + p.Name + }) + .ToListAsync(); + } + + [HttpGet("/houseZone/getById")] + public async Task GetById([Required] string zoneId) + { + return await _sysOrgRep.DetachedEntities.FirstOrDefaultAsync(p => p.Id == zoneId); + } + + /// + /// 分页查询片区 + /// + /// + /// + [HttpPost("/houseZone/page")] + public async Task QueryZonePageList([FromBody] PageOrgInput input) + { + var dataScopeList = _sysOrgService.GetDataScopeList(await _userManager.GetUserAllDataScopeList()); + + var name = !string.IsNullOrEmpty(input.Name?.Trim()); + var id = !string.IsNullOrEmpty(input.Id?.Trim()); + var pId = !string.IsNullOrEmpty(input.Pid?.Trim()); + var orgs = await _sysOrgRep.DetachedEntities + .Where((name, u => EF.Functions.Like(u.Name, $"%{input.Name.Trim()}%")), // 根据机构名称模糊查询 + (id, u => u.Id == input.Id.Trim()), // 根据机构id查询 + (pId, u => EF.Functions.Like(u.Pids, $"%[{input.Pid.Trim()}]%") + || u.Id == input.Pid.Trim())) // 根据父机构id查询 + .Where(dataScopeList.Count > 0, u => dataScopeList.Contains(u.Id)) // 非管理员范围限制 + .Where(u => u.Status != CommonStatus.DELETED) + .Where(u => u.Type == (int)OrgType.片区) + .OrderBy(u => u.Sort) + .ToPageData(input); + return PageDataResult.PageResult(orgs); + } + + /// + /// 根据用户Id获取所在片区的Id + /// + /// + /// + [HttpGet("/houseZone/getByUser")] + public async Task GetZoneByUser([FromQuery][Required(ErrorMessage = "用户Id不能为空")] string userId) + { + var data = await _sysEmpRep.DetachedEntities.FirstOrDefaultAsync(p => p.Id == userId); + if(data == null) throw Oops.Oh("用户不在组织机构中"); + var org = await _sysOrgRep.DetachedEntities.FirstOrDefaultAsync(p => p.Id == data.OrgId && p.Type == (int)OrgType.片区); + if(org == null) throw Oops.Oh("用户不在片区中"); + return org.Id; + } + + [HttpGet("/houseZone/autoIncrement")] + public async Task AutoIncrement([FromQuery] string roadId) + { + var road = await _sysOrgRep.DetachedEntities.FirstOrDefaultAsync(p => p.Id == roadId && p.Type == 3); + if (road == null) throw Oops.Oh("组织机构错误"); + return await AutoIncrement(road); + } + + [NonAction] + public async Task AutoIncrement(SysOrg road) + { + var maxZone = (await _sysOrgRep.DetachedEntities.Where(p => p.Pid == road.Id && p.Type == (int)OrgType.片区).MaxAsync(p => p.Code)) ?? "000"; + return Convert.ToInt32(maxZone[^3..]) + 1; + } + + [HttpPost("/houseZone/add")] + public async Task AddZone(AddHouseZoneInput input) + { + /* + * 区县市限定所属区域/上级机构是否为当前区 + * 街道自动获取所属区域/上级机构 + * 自动生成唯一编码, 街道Code+三位编号 + * + * 机构类型默认为片区 + */ + + var org = await _userManager.GetUserOrgInfo(); + + var areaManager = Enum.GetName(HouseManagerRole.AreaManager).ToUnderScoreCase(); + var roadManager = Enum.GetName(HouseManagerRole.RoadManager).ToUnderScoreCase(); + var roles = await _userManager.GetUserRoleList(); + if (roles.Any(p => p.Code == areaManager)) + { + var road = await _sysOrgRep.DetachedEntities.FirstOrDefaultAsync(p => p.Id == input.Pid); + if (!road.Pids.Contains(org.Id)) throw Oops.Oh("当前用户组织机构错误"); + + input.AreaCode = road.AreaCode; + input.Code = road.Code + (await AutoIncrement(road)).ToString().PadLeft(3, '0'); + } + else if (roles.Any(p => p.Code == roadManager)) + { + input.AreaCode = org.AreaCode; + + input.Code = org.Code + (await AutoIncrement(org)).ToString().PadLeft(3, '0'); + } + + input.Type = (int)OrgType.片区; + + AddOrgInput addOrgInput = input.Adapt(); + await _sysOrgService.AddOrg(addOrgInput); + } + + [HttpPost("/houseZone/edit")] + public async Task EditZone(UpdateHouseZoneInput input) + { + var zone = await _sysOrgRep.DetachedEntities.FirstOrDefaultAsync(z => z.Id == input.Id); + if(zone == null) throw Oops.Oh("修改失败:数据有误,刷新列表后再尝试修改"); + zone.Remark = input.Remark; + await zone.UpdateIncludeAsync(new[] { nameof(SysOrg.Remark) }, true); + } + } +} diff --git a/Api/Ewide.Application/Service/HouseSafety/HouseZone/IHouseZoneService.cs b/Api/Ewide.Application/Service/HouseSafety/HouseZone/IHouseZoneService.cs new file mode 100644 index 0000000..9c0b138 --- /dev/null +++ b/Api/Ewide.Application/Service/HouseSafety/HouseZone/IHouseZoneService.cs @@ -0,0 +1,15 @@ +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application.Service +{ + public interface IHouseZoneService + { + Task GetHouseZoneList([FromQuery] HouseZoneInput input); + Task GetZoneByUser([FromQuery] string userId); + } +} diff --git a/Api/Ewide.Application/Service/Inspection/InspectionOrg/Dto/InspectionOrgInput.cs b/Api/Ewide.Application/Service/Inspection/InspectionOrg/Dto/InspectionOrgInput.cs new file mode 100644 index 0000000..483f135 --- /dev/null +++ b/Api/Ewide.Application/Service/Inspection/InspectionOrg/Dto/InspectionOrgInput.cs @@ -0,0 +1,81 @@ +using Ewide.Core; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application +{ + public class InspectionOrgKeyInput + { + public virtual string Id { get; set; } + } + + public class InspectionOrgKeyRequiredInput : InspectionOrgKeyInput + { + [Required] + public override string Id { get; set; } + } + + public class InspectionOrgPageInput : PageInputBase + { + + } + + public class InspectionOrgRegisterInput + { + [MaxLength(100)] + [Required] + public string Name { get; set; } + + [MaxLength(50)] + [Required] + public string CreditCode { get; set; } + + [Required] + public string Address { get; set; } + + [MaxLength(50)] + [Required] + public string Contacts { get; set; } + + [MaxLength(50)] + [Required] + public string ContactsPhone { get; set; } + + [MaxLength(50)] + [Required] + public string LegalPerson { get; set; } + + [MaxLength(50)] + public string OrgTelephone { get; set; } + + [Required] + public string ApplicationFormFiles { get; set; } + + [Required] + public string OrgBusinessLicenseFiles { get; set; } + + [Required] + public string InspectionQualificationCertificateFiles { get; set; } + + [Required] + public string OfficeInformationFiles { get; set; } + + [Required] + public string EmployeeCertificateFiles { get; set; } + + [Required] + public string CalibrationCertificateFiles { get; set; } + + public string OtherFiles { get; set; } + } + + public class InspectionOrgReviewNotApprovedInput : InspectionOrgKeyRequiredInput + { + [Required] + public string Remark { get; set; } + } +} diff --git a/Api/Ewide.Application/Service/Inspection/InspectionOrg/Dto/InspectionOrgOutput.cs b/Api/Ewide.Application/Service/Inspection/InspectionOrg/Dto/InspectionOrgOutput.cs new file mode 100644 index 0000000..bb6b154 --- /dev/null +++ b/Api/Ewide.Application/Service/Inspection/InspectionOrg/Dto/InspectionOrgOutput.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application +{ + public class InspectionOrgDetailOutput + { + public string Id { get; set; } + public string Code { get; set; } + public InspectionOrgStatus Status { get; set; } + public InspectionOrgUpdateStatus UpdateStatus { get; set; } + public string Remark { get; set; } + public DateTime? CreatedTime { get; set; } + public DateTime? UpdatedTime { get; set; } + public InspectionOrgRegisterInput Record { get; set; } + public InspectionOrgRegisterInput UpdateRecord { get; set; } + } + + public class InspectionRegisterStatusOutput + { + public DateTime BeginDate { get; set; } + public DateTime EndDate { get; set; } + public InspectionOrgDetailOutput InspectionOrg { get; set; } + } +} diff --git a/Api/Ewide.Application/Service/Inspection/InspectionOrg/IInspectionOrgService.cs b/Api/Ewide.Application/Service/Inspection/InspectionOrg/IInspectionOrgService.cs new file mode 100644 index 0000000..a0ad78c --- /dev/null +++ b/Api/Ewide.Application/Service/Inspection/InspectionOrg/IInspectionOrgService.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application.Service +{ + public interface IInspectionOrgService + { + public Task NewCode(); + public Task RegisterStatus(); + public Task Register(InspectionOrgRegisterInput input); + public Task Update(InspectionOrgRegisterInput input); + public Task Detail(InspectionOrgKeyInput input); + public Task ReviewPage(InspectionOrgPageInput input); + public Task ReviewUpdatePage(InspectionOrgPageInput input); + public Task ReviewApproved(InspectionOrgKeyRequiredInput input); + public Task ReviewNotApproved(InspectionOrgReviewNotApprovedInput input); + public Task History(InspectionOrgKeyRequiredInput input); + } +} diff --git a/Api/Ewide.Application/Service/Inspection/InspectionOrg/InspectionOrgService.cs b/Api/Ewide.Application/Service/Inspection/InspectionOrg/InspectionOrgService.cs new file mode 100644 index 0000000..7561ec7 --- /dev/null +++ b/Api/Ewide.Application/Service/Inspection/InspectionOrg/InspectionOrgService.cs @@ -0,0 +1,410 @@ +using Dapper; +using Ewide.Core; +using Ewide.Core.Extension; +using Furion.DatabaseAccessor; +using Furion.DatabaseAccessor.Extensions; +using Furion.DependencyInjection; +using Furion.DynamicApiController; +using Furion.FriendlyException; +using Furion.JsonSerialization; +using Mapster; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application.Service +{ + /// + /// 鉴定机构相关 + /// + [ApiDescriptionSettings(Name = "InspectionOrg")] + public class InspectionOrgService : IInspectionOrgService, IDynamicApiController, ITransient + { + private readonly IJsonSerializerProvider _jsonSerializer; + private readonly IDapperRepository _dapperRep; + + private readonly IUserManager _userManager; + + private readonly IRepository _orgRep; + private readonly IRepository _orgUpdateRep; + private readonly IRepository _relationRep; + private readonly IRepository _settingRep; + + public InspectionOrgService( + IJsonSerializerProvider jsonSerializer, + IDapperRepository dapperRep, + IUserManager userManager, + IRepository orgRep, + IRepository orgUpdateRep, + IRepository relationRep, + IRepository settingRep + ) + { + _jsonSerializer = jsonSerializer; + _dapperRep = dapperRep; + + _userManager = userManager; + + _orgRep = orgRep; + _orgUpdateRep = orgUpdateRep; + _relationRep = relationRep; + _settingRep = settingRep; + } + + /// + /// 获取可登记的时间范围 + /// + /// + private async Task DateRange() + { + // 验证当前时间是否已在可申报时间范围内 + var setting = await _settingRep.DetachedEntities.FirstOrDefaultAsync(p => p.Type == InspectionOrgSettingType.DateRange); + var dateRange = _jsonSerializer.Deserialize(setting.Setting); + return dateRange; + } + + /// + /// 获取当前用户所在机构 + /// + /// + private async Task RelationOrgId() + { + var relation = await _relationRep.DetachedEntities.FirstOrDefaultAsync(p => p.SysUserId.Equals(_userManager.UserId)); + if (relation == null) + { + return null; + } + + return relation.InspectionOrgId; + } + + /// + /// 获取最新备案编号 + /// + /// + [HttpGet("/inspectionOrg/newCode")] + public async Task NewCode() + { + var nowYear = DateTime.Now.Year; + var code = await _orgRep.DetachedEntities.MaxAsync(p => p.Code); + if (String.IsNullOrEmpty(code)) + { + code = nowYear + "001"; + } + else + { + var year = int.Parse(code.Substring(0, 4)); + var no = int.Parse(code.Substring(4, 3)); + if (year < nowYear) + { + code = nowYear + "001"; + } + else + { + code = year + (no + 1).ToString().PadLeft(3, '0'); + } + } + + return code; + } + + /// + /// 获取当前用户所在鉴定机构信息及登记时间范围 + /// + /// + [HttpGet("/inspectionOrg/registerStatus")] + public async Task RegisterStatus() + { + var orgId = await RelationOrgId(); + var dateRange = await DateRange(); + var output = dateRange.Adapt(); + if (String.IsNullOrEmpty(orgId)) + { + return output; + } + + var org = await _orgRep.DetachedEntities.FirstOrDefaultAsync(p => p.Id.Equals(orgId)); + var orgUpdate = await _orgUpdateRep.DetachedEntities.Where(p => p.OrgId.Equals(orgId)).OrderByDescending(p => p.CreatedTime).FirstOrDefaultAsync(); + output.InspectionOrg = org.Adapt(); + output.InspectionOrg.UpdateStatus = orgUpdate.Status; + output.InspectionOrg.Remark = orgUpdate.Remark; + return output; + } + + /// + /// 鉴定机构登记 + /// + /// + /// + [HttpPost("/inspectionOrg/register")] + [UnitOfWork] + public async Task Register([FromBody] InspectionOrgRegisterInput input) + { + // 验证当前时间是否已在可申报时间范围内 + var dateRange = await DateRange(); + var now = DateTime.Now; + if (!(now >= dateRange.BeginDate && now < dateRange.EndDate.AddDays(1))) + throw Oops.Oh("当前时间段无法登记鉴定机构"); + + // 登记时主表数据应为空, 只向记录数据中插入当前填表的内容 + var updateData = input.Adapt(); + var orgId = await RelationOrgId(); + if (String.IsNullOrEmpty(orgId)) + { + orgId = Guid.NewGuid().ToString().ToLower(); + var code = await NewCode(); + // 登记主表 + var data = new BsInspectionOrg + { + Id = orgId, + Code = code, + }; + await data.InsertAsync(); + + // 用户关系表 + await new BsInspectionMemberRelation + { + SysUserId = _userManager.UserId, + InspectionOrgId = orgId + }.InsertAsync(); + } + // 登记记录表 + updateData.OrgId = orgId; + updateData.Type = InspectionOrgUpdateType.Register; + updateData.Status = InspectionOrgUpdateStatus.Reviewing; + await updateData.InsertAsync(); + } + + /// + /// 鉴定机构申请修改 + /// + /// + /// + [HttpPost("/inspectionOrg/update")] + public async Task Update([FromBody] InspectionOrgRegisterInput input) + { + var orgId = await RelationOrgId(); + var org = await _orgRep.DetachedEntities.FirstOrDefaultAsync(p => p.Id.Equals(orgId)); + var updateData = input.Adapt(); + // 与之前的值进行对比, 没有变更则不提交 + var updated = false; + var TSource = org.GetType(); + var TSourceProperties = TSource.GetProperties(); + var TTarget = updateData.GetType(); + var TTargetProperties = TTarget.GetProperties(); + var compareFields = new[] { + nameof(BsInspectionOrg.Name), + nameof(BsInspectionOrg.CreditCode), + nameof(BsInspectionOrg.Address), + nameof(BsInspectionOrg.Contacts), + nameof(BsInspectionOrg.ContactsPhone), + nameof(BsInspectionOrg.LegalPerson), + nameof(BsInspectionOrg.OrgTelephone), + nameof(BsInspectionOrg.ApplicationFormFiles), + nameof(BsInspectionOrg.OrgBusinessLicenseFiles), + nameof(BsInspectionOrg.InspectionQualificationCertificateFiles), + nameof(BsInspectionOrg.OfficeInformationFiles), + nameof(BsInspectionOrg.EmployeeCertificateFiles), + nameof(BsInspectionOrg.CalibrationCertificateFiles), + nameof(BsInspectionOrg.OtherFiles) + }; + + foreach (var fields in compareFields) + { + var PSource = TSourceProperties.FirstOrDefault(p => p.Name.Equals(fields)); + var VSource = PSource.GetValue(org); + var PTarget = TTargetProperties.FirstOrDefault(p => p.Name.Equals(fields)); + var VTarget = PTarget.GetValue(updateData); + if ( + (VSource == null && VTarget != null) + || + (VSource != null && !VSource.Equals(VTarget)) + ) + { + updated = true; + break; + } + } + + if (!updated) + { + throw Oops.Oh("当前信息未修改"); + } + + // 登记记录表 + updateData.OrgId = orgId; + updateData.Type = InspectionOrgUpdateType.Update; + updateData.Status = InspectionOrgUpdateStatus.Reviewing; + await updateData.InsertAsync(); + } + + /// + /// 鉴定机构详情 + /// + /// + /// + [HttpGet("/inspectionOrg/detail")] + public async Task Detail([FromQuery] InspectionOrgKeyInput input) + { + var orgId = String.Empty; + // 传入Id表示查看他人,否则查看自己 + if (!String.IsNullOrEmpty(input.Id)) + { + orgId = input.Id; + } + else + { + orgId = await RelationOrgId(); + } + + if (String.IsNullOrEmpty(orgId)) + return null; + + var output = new InspectionOrgDetailOutput(); + + var org = await _orgRep.DetachedEntities.FirstOrDefaultAsync(p => p.Id.Equals(orgId)); + var orgUpdate = await _orgUpdateRep.DetachedEntities.Where(p => p.OrgId.Equals(orgId)).OrderByDescending(p => p.CreatedTime).FirstOrDefaultAsync(); + + if (org.Status == InspectionOrgStatus.Normal) + { + output.Record = org.Adapt(); + } + if (orgUpdate != null && + (orgUpdate.Status == InspectionOrgUpdateStatus.Reviewing || orgUpdate.Status == InspectionOrgUpdateStatus.Back)) + { + output.UpdateRecord = orgUpdate.Adapt(); + } + + // 获取最新更新时间 + var lastOrgUpdatedTime = await _orgUpdateRep.DetachedEntities + .Where(p => p.OrgId.Equals(orgId)) + .Where(p => p.Status == InspectionOrgUpdateStatus.Approved) + .MaxAsync(p => p.UpdatedTime); + + output.Id = orgId; + output.Code = org.Code; + output.Status = org.Status; + output.UpdateStatus = orgUpdate.Status; + output.Remark = orgUpdate.Remark; + output.CreatedTime = org.CreatedTime; + output.UpdatedTime = lastOrgUpdatedTime; + + return output; + } + + private async Task Page(InspectionOrgPageInput input, int Type) + { + var sql = @"SELECT + IO.Id, + IO.Code, + IOU.Name, + IOU.CreditCode, + IOU.Address, + IOU.Contacts, + IOU.ContactsPhone, + IOU.LegalPerson, + IOU.OrgTelephone, + IO.Status, + IOU.Type UpdateType, + IOU.Status UpdateStatus, + (SELECT COUNT(0) FROM bs_inspection_org_update WHERE OrgId = IO.Id AND Status <> 1) UpdateCount, + IOU.UpdatedTime +FROM bs_inspection_org IO +LEFT JOIN +(SELECT * FROM bs_inspection_org_update WHERE CreatedTime IN (SELECT MAX(CreatedTime) FROM bs_inspection_org_update WHERE Status <> -2 AND Type = @UpdateType GROUP BY OrgId)) +IOU ON IOU.OrgId = IO.Id"; + + return await _dapperRep.QueryPageDataDynamic( + sql, + input, + param: new { UpdateType = Type }, + filterFields: new[] { "Code", "UpdateStatus" } + ); + } + + [HttpPost("/inspectionOrg/reviewPage")] + public async Task ReviewPage([FromBody] InspectionOrgPageInput input) + { + return await Page(input, 1); + } + + [HttpPost("/inspectionOrg/reviewUpdatePage")] + public async Task ReviewUpdatePage([FromBody] InspectionOrgPageInput input) + { + return await Page(input, 2); + } + + /// + /// 登记审核通过 + /// + /// + /// + [HttpPost("/inspectionOrg/reviewApproved")] + [UnitOfWork] + public async Task ReviewApproved([FromBody] InspectionOrgKeyRequiredInput input) + { + var orgUpdate = await _orgUpdateRep.DetachedEntities.Where(p => p.OrgId.Equals(input.Id)).OrderByDescending(p => p.CreatedTime).FirstOrDefaultAsync(); + + orgUpdate.Status = InspectionOrgUpdateStatus.Approved; + await orgUpdate.UpdateIncludeAsync(new [] { + nameof(BsInspectionOrgUpdate.Status) + }); + + var org = orgUpdate.Adapt(); + org.Id = input.Id; + org.Status = InspectionOrgStatus.Normal; + + await org.UpdateExcludeAsync(new[] { + nameof(BsInspectionOrg.Code) + }); + } + + /// + /// 登记审核退回 + /// + /// + /// + [HttpPost("/inspectionOrg/reviewNotApproved")] + public async Task ReviewNotApproved([FromBody] InspectionOrgReviewNotApprovedInput input) + { + var orgUpdate = await _orgUpdateRep.DetachedEntities.Where(p => p.OrgId.Equals(input.Id)).OrderByDescending(p => p.CreatedTime).FirstOrDefaultAsync(); + + orgUpdate.Status = InspectionOrgUpdateStatus.Back; + orgUpdate.Remark = input.Remark; + await orgUpdate.UpdateIncludeAsync(new[] { + nameof(BsInspectionOrgUpdate.Status), + nameof(BsInspectionOrgUpdate.Remark) + }); + } + + /// + /// 获取审核记录 + /// + /// + /// + [HttpGet("/inspectionOrg/history")] + public async Task History([FromQuery] InspectionOrgKeyRequiredInput input) + { + var sql = @"SELECT + IOU.Id, + IOU.OrgId, + IO.Code, + IOU.Remark, + IOU.Type, + IOU.Status, + IOU.CreatedTime, + IOU.UpdatedTime +FROM bs_inspection_org_update IOU +LEFT JOIN bs_inspection_org IO ON IO.Id = IOU.OrgId +WHERE IO.Id = @Id + AND IOU.Status <> 1 -- 审核中 +ORDER BY CreatedTime DESC"; + return await _dapperRep.QueryAsync(sql, new { Id = input.Id }); + } + } +} diff --git a/Api/Ewide.Application/Service/Inspection/InspectionOrgDir/Dto/InspectionOrgDirInput.cs b/Api/Ewide.Application/Service/Inspection/InspectionOrgDir/Dto/InspectionOrgDirInput.cs new file mode 100644 index 0000000..1975c48 --- /dev/null +++ b/Api/Ewide.Application/Service/Inspection/InspectionOrgDir/Dto/InspectionOrgDirInput.cs @@ -0,0 +1,42 @@ +using Ewide.Core; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application +{ + public class InspectionOrgDirKeyInput + { + public virtual string Id { get; set; } + } + + public class InspectionOrgDirKeyRequiredInput : InspectionOrgDirKeyInput + { + [Required] + public override string Id { get; set; } + } + + public class InspectionOrgDirPageInput : PageInputBase + { + + } + + public class InspectionOrgDirSaveInput : InspectionOrgDirKeyInput + { + [Required] + public string No { get; set; } + [Required] + public InspectionOrgDirSaveDetailInput[] Detail { get; set; } + } + + public class InspectionOrgDirSaveDetailInput + { + [Required] + public string OrgId { get; set; } + [Required] + public int Score { get; set; } + } +} diff --git a/Api/Ewide.Application/Service/Inspection/InspectionOrgDir/Dto/InspectionOrgDirOutput.cs b/Api/Ewide.Application/Service/Inspection/InspectionOrgDir/Dto/InspectionOrgDirOutput.cs new file mode 100644 index 0000000..52da4bc --- /dev/null +++ b/Api/Ewide.Application/Service/Inspection/InspectionOrgDir/Dto/InspectionOrgDirOutput.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application +{ + public class InspectionOrgDirPreviewOutput + { + public BsInspectionOrgDirStage Stage { get; set; } + public int Count { get; set; } + public dynamic List { get; set; } + } +} diff --git a/Api/Ewide.Application/Service/Inspection/InspectionOrgDir/IInspectionOrgDirService.cs b/Api/Ewide.Application/Service/Inspection/InspectionOrgDir/IInspectionOrgDirService.cs new file mode 100644 index 0000000..0419301 --- /dev/null +++ b/Api/Ewide.Application/Service/Inspection/InspectionOrgDir/IInspectionOrgDirService.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application.Service +{ + public interface IInspectionOrgDirService + { + public Task Page(InspectionOrgDirPageInput input); + public Task ListScore(); + public Task Detail(); + public Task SaveScore(InspectionOrgDirSaveInput input); + } +} diff --git a/Api/Ewide.Application/Service/Inspection/InspectionOrgDir/InspectionOrgDirService.cs b/Api/Ewide.Application/Service/Inspection/InspectionOrgDir/InspectionOrgDirService.cs new file mode 100644 index 0000000..d46ccbb --- /dev/null +++ b/Api/Ewide.Application/Service/Inspection/InspectionOrgDir/InspectionOrgDirService.cs @@ -0,0 +1,295 @@ +using Dapper; +using Ewide.Core.Extension; +using Furion.DatabaseAccessor; +using Furion.DatabaseAccessor.Extensions; +using Furion.DependencyInjection; +using Furion.DynamicApiController; +using Furion.FriendlyException; +using Mapster; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ewide.Application.Service +{ + public class InspectionOrgDirService : IInspectionOrgDirService, IDynamicApiController, ITransient + { + private readonly IDapperRepository _dapperRep; + + private readonly IRepository _dirStageRep; + private readonly IRepository _dirDetailRep; + private readonly IRepository _orgRep; + + public InspectionOrgDirService( + IDapperRepository dapperRep, + + IRepository dirStageRep, + IRepository dirDetailRep, + IRepository orgRep + ) + { + _dapperRep = dapperRep; + + _dirStageRep = dirStageRep; + _dirDetailRep = dirDetailRep; + _orgRep = orgRep; + } + + [HttpPost("/inspectionOrgDir/page")] + public async Task Page([FromBody] InspectionOrgDirPageInput input) + { + var sql = "SELECT * FROM bs_inspection_org_dir_stage WHERE Status = 1 ORDER BY PublishTime DESC"; + return await _dapperRep.QueryPageDataDynamic(sql, input, filterFields: new[] { nameof(BsInspectionOrgDirStage.No) }); + } + + /// + /// 获取当前名录打分列表 + /// + /// + [HttpPost("/inspectionOrgDir/listScore")] + public async Task ListScore() + { + var sql = @"SELECT * FROM +( +SELECT + IO.Id, + IO.`Code`, + IO.`Name`, + CASE WHEN LIODD.ScoreResult IS NULL THEN 1 ELSE 0 END IsNew, + LIODD.ScoreResult PrevScoreResult, + TIODD.Score, + TIODD.ScoreResult +FROM +( + SELECT + *, + (SELECT Id FROM bs_inspection_org_dir_stage WHERE Status = 1 ORDER BY CreatedTime DESC LIMIT 1) PrevStageId, + (SELECT Id FROM bs_inspection_org_dir_stage WHERE Status = 0) CurrentStageId + FROM + bs_inspection_org +) IO +LEFT JOIN bs_inspection_org_dir_detail LIODD ON IO.PrevStageId = LIODD.StageId AND IO.Id = LIODD.OrgId +LEFT JOIN bs_inspection_org_dir_detail TIODD ON IO.CurrentStageId = TIODD.StageId AND IO.Id = TIODD.OrgId +WHERE IO.Status = 1 +) T ORDER BY IsNew DESC, `Code`"; + return await _dapperRep.QueryAsync(sql); + } + + [HttpGet("/inspectionOrgDir/detail")] + public async Task Detail() + { + return await _dirStageRep.DetachedEntities.FirstOrDefaultAsync(p => p.Status.Equals(0)); + } + + private int ScoreResult(int score, int? prevScoreResult) + { + int result; + if (score >= 10) + { + result = 1; + } + else if (score >= 8) + { + result = 2; + } + else if (score >= 6) + { + result = 3; + } + else + { + result = 4; + } + + if (prevScoreResult.GetValueOrDefault(0).Equals(3) && result.Equals(3)) + { + result = 4; + } + + return result; + } + + [HttpPost("/inspectionOrgDir/saveScore")] + [UnitOfWork] + public async Task SaveScore([FromBody] InspectionOrgDirSaveInput input) + { + var stageId = input.Id; + + var isAdd = false; + // 新增修改名录主表 + if (String.IsNullOrEmpty(stageId)) + { + // 新增 + // 如果存在未公布的名录,则失败 + var isExistUnpublished = await _dirStageRep.DetachedEntities.AnyAsync(p => p.Status.Equals(0)); + if(isExistUnpublished) + throw Oops.Oh("存在未公布的名录,无法新增"); + + var isExistNo = await _dirStageRep.DetachedEntities.AnyAsync(p => p.No.Equals(input.No)); + if (isExistNo) + throw Oops.Oh("名录期号已存在"); + + var stage = input.Adapt(); + stageId = Guid.NewGuid().ToString().ToLower(); + stage.Id = stageId; + + await stage.InsertAsync(); + + isAdd = true; + } + else + { + var isExistNo = await _dirStageRep.DetachedEntities.AnyAsync(p => p.No.Equals(input.No) && !p.Id.Equals(input.Id)); + if (isExistNo) + throw Oops.Oh("名录期号已存在"); + + // 修改 + var stage = await _dirStageRep.FirstOrDefaultAsync(p => p.Id.Equals(input.Id)); + stage.No = input.No; + + await stage.UpdateAsync(); + } + + var prevStage = await _dirStageRep.DetachedEntities.OrderByDescending(p => p.CreatedTime).FirstOrDefaultAsync(p => !p.Id.Equals(stageId)); + var prevDetails = new List(); + if (prevStage != null) + { + prevDetails = await _dirDetailRep.DetachedEntities.Where(p => p.StageId.Equals(prevStage.Id)).ToListAsync(); + } + + // 新增修改名录详细表 + foreach (var detail in input.Detail) + { + var prevDetail = prevDetails.FirstOrDefault(p => p.OrgId.Equals(detail.OrgId)); + var scoreResult = ScoreResult(detail.Score, prevDetail?.ScoreResult); + + if (!isAdd) + { + // 名录已经存在时,判断每个机构的打分记录是否已经存在 + var _data = await _dirDetailRep.FirstOrDefaultAsync(p => p.OrgId.Equals(detail.OrgId) && p.StageId.Equals(stageId)); + if (_data != null) + { + _data.Score = detail.Score; + _data.ScoreResult = scoreResult; + await _data.UpdateAsync(); + continue; + } + } + + var data = detail.Adapt(); + data.StageId = stageId; + data.ScoreResult = scoreResult; + + await data.InsertAsync(); + } + } + + [HttpGet("/inspectionOrgDir/preview")] + public async Task Preview() + { + var stage = await _dirStageRep.FirstOrDefaultAsync(p => p.Status.Equals(0)); + if (stage == null) + { + // 当前没有需要发布的名录 + return null; + } + + var count = await _dirDetailRep.Where(p => p.StageId.Equals(stage.Id) && !p.ScoreResult.Equals(4)).CountAsync(); + + var sql = @"SELECT * FROM +( +SELECT + IO.Id, + IO.`Code`, + IO.`Name`, + IO.Address, + CASE + WHEN TIODD.ScoreResult = 4 THEN -1 + WHEN LIODD.ScoreResult IS NULL THEN 1 + ELSE 0 END `Status` +FROM +( + SELECT + *, + (SELECT Id FROM bs_inspection_org_dir_stage WHERE Status = 1 ORDER BY CreatedTime DESC LIMIT 1) PrevStageId, + (SELECT Id FROM bs_inspection_org_dir_stage WHERE Status = 0) CurrentStageId + FROM + bs_inspection_org +) IO +LEFT JOIN bs_inspection_org_dir_detail LIODD ON IO.PrevStageId = LIODD.StageId AND IO.Id = LIODD.OrgId +LEFT JOIN bs_inspection_org_dir_detail TIODD ON IO.CurrentStageId = TIODD.StageId AND IO.Id = TIODD.OrgId +WHERE (LIODD.ScoreResult IS NULL OR LIODD.ScoreResult < 4) AND IO.`Status` >= 0 +) T ORDER BY `Status` DESC, `Code`"; + var list = await _dapperRep.QueryAsync(sql); + + return new InspectionOrgDirPreviewOutput + { + Stage = stage, + Count = count, + List = list + }; + } + + [HttpPost("/inspectionOrgDir/publish")] + [UnitOfWork] + public async Task Publish() + { + var stage = await _dirStageRep.FirstOrDefaultAsync(p => p.Status.Equals(0)); + if (stage == null) + throw Oops.Oh("当前名录数据错误"); + + // 评分详情 + var details = await _dirDetailRep.DetachedEntities.Where(p => p.StageId.Equals(stage.Id)).ToListAsync(); + // 当前需打分的机构 + var orgIds = await _orgRep.DetachedEntities.Where(p => p.Status != InspectionOrgStatus.Delisting && p.Status != InspectionOrgStatus.Revoke).Select(p => p.Id).ToListAsync(); + if (orgIds.Any(p => !details.Select(p => p.OrgId).Contains(p))) + throw Oops.Oh("存在未评分的机构"); + + // 往期名录 + var prevStage = await _dirStageRep.DetachedEntities.OrderByDescending(p => p.CreatedTime).FirstOrDefaultAsync(p => !p.Id.Equals(stage.Id)); + // 往期机构 + var prevDetails = await _dirDetailRep.DetachedEntities.Where(p => p.StageId.Equals(prevStage.Id)).ToListAsync(); + // 往期黄牌机构 + var prevFilteredDetailOrgIds = new List(); + if (prevStage != null) + { + // 获取往期黄牌机构 + prevFilteredDetailOrgIds = prevDetails.Where(p => p.ScoreResult.Equals(3)).Select(p => p.OrgId).ToList(); + } + + // 对除名的机构修改状态 + var revmoeCount = 0; + var mayBeRemovedDetails = details.Where(p => p.ScoreResult.Equals(3) || p.ScoreResult.Equals(4)).ToList(); + foreach (var detail in mayBeRemovedDetails) + { + if ((detail.ScoreResult.Equals(3) && prevFilteredDetailOrgIds.Contains(detail.OrgId)) + || detail.ScoreResult.Equals(4)) + { + // 本期及往期为黄牌或者本期为红牌的,进行除名 + var org = await _orgRep.FirstOrDefaultAsync(p => p.Id.Equals(detail.OrgId)); + org.Status = InspectionOrgStatus.Delisting; + await org.UpdateIncludeAsync(new[] { nameof(BsInspectionOrg.Status) }); + revmoeCount++; + } + } + + // 新增机构数量 + var newDetailsCount = details.Where(p => (p.ScoreResult.Equals(1) || p.ScoreResult.Equals(2)) && !prevDetails.Select(p => p.OrgId).Contains(p.OrgId)).Count(); + + // 总数减去除名 + stage.OrgAmount = details.Count - revmoeCount; + // 除名 + stage.RemovedOrgAmount = revmoeCount; + // 新增 + stage.NewOrgAmount = newDetailsCount; + + stage.Status = 1; + stage.PublishTime = DateTime.Now; + await stage.UpdateAsync(); + } + } +} diff --git a/Api/Ewide.Application/Startup.cs b/Api/Ewide.Application/Startup.cs new file mode 100644 index 0000000..ade1ce8 --- /dev/null +++ b/Api/Ewide.Application/Startup.cs @@ -0,0 +1,30 @@ +using Furion; +using Microsoft.Extensions.DependencyInjection; +using System.Linq; + +namespace Ewide.Application +{ + public class Startup : AppStartup + { + public void ConfigureServices(IServiceCollection services) + { + //services.AddSqlSugar(new ConnectionConfig + //{ + // ConnectionString = App.Configuration["ConnectionStrings:DefaultConnection"], + // DbType = DbType.Sqlite, + // IsAutoCloseConnection = true, + // InitKeyType = InitKeyType.Attribute + //}, + //db => + //{ + // // db.DbMaintenance.CreateDatabase(); + // // db.CodeFirst.SetStringDefaultLength(200).InitTables(typeof(Test)); + + // db.Aop.OnLogExecuting = (sql, pars) => + // { + // App.PrintToMiniProfiler("SqlSugar", "Info", sql + "\r\n" + string.Join(",", pars?.Select(it => it.ParameterName + ":" + it.Value))); + // }; + //}); + } + } +} diff --git a/Api/Ewide.Application/applicationsettings.json b/Api/Ewide.Application/applicationsettings.json new file mode 100644 index 0000000..29091fa --- /dev/null +++ b/Api/Ewide.Application/applicationsettings.json @@ -0,0 +1,3 @@ +{ + +} \ No newline at end of file diff --git a/Api/HouseSafety.sln b/Api/HouseSafety.sln new file mode 100644 index 0000000..6114a40 --- /dev/null +++ b/Api/HouseSafety.sln @@ -0,0 +1,100 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.31424.327 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ewide.Application", "Ewide.Application\Ewide.Application.csproj", "{68773592-648C-487D-B68B-33E017A37EC6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ewide.Core", "..\EwideCore\Api\Ewide.Core\Ewide.Core.csproj", "{07C08564-894E-43CE-9981-FE78E2BE3BE0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ewide.Database.Migrations", "..\EwideCore\Api\Ewide.Database.Migrations\Ewide.Database.Migrations.csproj", "{ADFE4B2B-B396-4A19-85D5-AACD6530D94D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ewide.EntityFramework.Core", "..\EwideCore\Api\Ewide.EntityFramework.Core\Ewide.EntityFramework.Core.csproj", "{D2F59ABE-62DE-4C5C-A104-4A2275ECD9CB}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ewide.Test", "..\EwideCore\Api\Ewide.Test\Ewide.Test.csproj", "{27696F6B-F895-4A7B-B47C-777D83259DAA}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ewide.Web.Core", "..\EwideCore\Api\Ewide.Web.Core\Ewide.Web.Core.csproj", "{9BF809F4-3219-4B03-8DD9-E7B174DA2041}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ewide.Web.Entry", "..\EwideCore\Api\Ewide.Web.Entry\Ewide.Web.Entry.csproj", "{D5D2CF2B-BD26-4C40-930A-CCBC30479520}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Furion", "Furion", "{B77F1834-B24B-439F-B828-8621138C560F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Furion", "..\EwideCore\Api\Furion\framework\Furion\Furion.csproj", "{E9570EF7-C1D5-4C4E-8FC9-26AB598FF2A2}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Furion.Extras.Authentication.JwtBearer", "..\EwideCore\Api\Furion\framework\Furion.Extras.Authentication.JwtBearer\Furion.Extras.Authentication.JwtBearer.csproj", "{8AB345D4-0EEC-4017-BED4-0DFFF696D8B3}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Furion.Extras.DatabaseAccessor.Dapper", "..\EwideCore\Api\Furion\framework\Furion.Extras.DatabaseAccessor.Dapper\Furion.Extras.DatabaseAccessor.Dapper.csproj", "{EC8E2F6A-87C9-4369-8E00-7AE74BBA53C7}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Furion.Extras.Logging.Serilog", "..\EwideCore\Api\Furion\framework\Furion.Extras.Logging.Serilog\Furion.Extras.Logging.Serilog.csproj", "{EF6EF253-94D0-4143-A763-3813922F43A2}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Furion.Extras.ObjectMapper.Mapster", "..\EwideCore\Api\Furion\framework\Furion.Extras.ObjectMapper.Mapster\Furion.Extras.ObjectMapper.Mapster.csproj", "{35C3B1E9-1291-4B54-99C7-0849FB02569B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {68773592-648C-487D-B68B-33E017A37EC6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {68773592-648C-487D-B68B-33E017A37EC6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {68773592-648C-487D-B68B-33E017A37EC6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {68773592-648C-487D-B68B-33E017A37EC6}.Release|Any CPU.Build.0 = Release|Any CPU + {07C08564-894E-43CE-9981-FE78E2BE3BE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {07C08564-894E-43CE-9981-FE78E2BE3BE0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {07C08564-894E-43CE-9981-FE78E2BE3BE0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {07C08564-894E-43CE-9981-FE78E2BE3BE0}.Release|Any CPU.Build.0 = Release|Any CPU + {ADFE4B2B-B396-4A19-85D5-AACD6530D94D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ADFE4B2B-B396-4A19-85D5-AACD6530D94D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ADFE4B2B-B396-4A19-85D5-AACD6530D94D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ADFE4B2B-B396-4A19-85D5-AACD6530D94D}.Release|Any CPU.Build.0 = Release|Any CPU + {D2F59ABE-62DE-4C5C-A104-4A2275ECD9CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D2F59ABE-62DE-4C5C-A104-4A2275ECD9CB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D2F59ABE-62DE-4C5C-A104-4A2275ECD9CB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D2F59ABE-62DE-4C5C-A104-4A2275ECD9CB}.Release|Any CPU.Build.0 = Release|Any CPU + {27696F6B-F895-4A7B-B47C-777D83259DAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {27696F6B-F895-4A7B-B47C-777D83259DAA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {27696F6B-F895-4A7B-B47C-777D83259DAA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {27696F6B-F895-4A7B-B47C-777D83259DAA}.Release|Any CPU.Build.0 = Release|Any CPU + {9BF809F4-3219-4B03-8DD9-E7B174DA2041}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9BF809F4-3219-4B03-8DD9-E7B174DA2041}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9BF809F4-3219-4B03-8DD9-E7B174DA2041}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9BF809F4-3219-4B03-8DD9-E7B174DA2041}.Release|Any CPU.Build.0 = Release|Any CPU + {D5D2CF2B-BD26-4C40-930A-CCBC30479520}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D5D2CF2B-BD26-4C40-930A-CCBC30479520}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D5D2CF2B-BD26-4C40-930A-CCBC30479520}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D5D2CF2B-BD26-4C40-930A-CCBC30479520}.Release|Any CPU.Build.0 = Release|Any CPU + {E9570EF7-C1D5-4C4E-8FC9-26AB598FF2A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E9570EF7-C1D5-4C4E-8FC9-26AB598FF2A2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E9570EF7-C1D5-4C4E-8FC9-26AB598FF2A2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E9570EF7-C1D5-4C4E-8FC9-26AB598FF2A2}.Release|Any CPU.Build.0 = Release|Any CPU + {8AB345D4-0EEC-4017-BED4-0DFFF696D8B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8AB345D4-0EEC-4017-BED4-0DFFF696D8B3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8AB345D4-0EEC-4017-BED4-0DFFF696D8B3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8AB345D4-0EEC-4017-BED4-0DFFF696D8B3}.Release|Any CPU.Build.0 = Release|Any CPU + {EC8E2F6A-87C9-4369-8E00-7AE74BBA53C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EC8E2F6A-87C9-4369-8E00-7AE74BBA53C7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EC8E2F6A-87C9-4369-8E00-7AE74BBA53C7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EC8E2F6A-87C9-4369-8E00-7AE74BBA53C7}.Release|Any CPU.Build.0 = Release|Any CPU + {EF6EF253-94D0-4143-A763-3813922F43A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EF6EF253-94D0-4143-A763-3813922F43A2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EF6EF253-94D0-4143-A763-3813922F43A2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EF6EF253-94D0-4143-A763-3813922F43A2}.Release|Any CPU.Build.0 = Release|Any CPU + {35C3B1E9-1291-4B54-99C7-0849FB02569B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {35C3B1E9-1291-4B54-99C7-0849FB02569B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {35C3B1E9-1291-4B54-99C7-0849FB02569B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {35C3B1E9-1291-4B54-99C7-0849FB02569B}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {E9570EF7-C1D5-4C4E-8FC9-26AB598FF2A2} = {B77F1834-B24B-439F-B828-8621138C560F} + {8AB345D4-0EEC-4017-BED4-0DFFF696D8B3} = {B77F1834-B24B-439F-B828-8621138C560F} + {EC8E2F6A-87C9-4369-8E00-7AE74BBA53C7} = {B77F1834-B24B-439F-B828-8621138C560F} + {EF6EF253-94D0-4143-A763-3813922F43A2} = {B77F1834-B24B-439F-B828-8621138C560F} + {35C3B1E9-1291-4B54-99C7-0849FB02569B} = {B77F1834-B24B-439F-B828-8621138C560F} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {ED14FD8E-FA4B-477E-A71E-E4F21A9670B1} + EndGlobalSection +EndGlobal diff --git a/EwideCore b/EwideCore new file mode 160000 index 0000000..9f81b83 --- /dev/null +++ b/EwideCore @@ -0,0 +1 @@ +Subproject commit 9f81b838ceba17846d32ba3a77e19c24b81baa0c diff --git a/Web/.env b/Web/.env new file mode 100644 index 0000000..4f79a0f --- /dev/null +++ b/Web/.env @@ -0,0 +1 @@ +GENERATE_SOURCEMAP=false \ No newline at end of file diff --git a/Web/.env.development b/Web/.env.development new file mode 100644 index 0000000..b8402ce --- /dev/null +++ b/Web/.env.development @@ -0,0 +1 @@ +REACT_APP_BASE_URL=http://localhost:5566/ \ No newline at end of file diff --git a/Web/.env.production b/Web/.env.production new file mode 100644 index 0000000..a7692b7 --- /dev/null +++ b/Web/.env.production @@ -0,0 +1 @@ +REACT_APP_BASE_URL=http://118.178.224.202:90/ \ No newline at end of file diff --git a/Web/.gitignore b/Web/.gitignore new file mode 100644 index 0000000..4d29575 --- /dev/null +++ b/Web/.gitignore @@ -0,0 +1,23 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/Web/.prettierrc.js b/Web/.prettierrc.js new file mode 100644 index 0000000..86e4998 --- /dev/null +++ b/Web/.prettierrc.js @@ -0,0 +1,24 @@ +module.exports = { + "extends": [ + "airbnb", + "prettier", + "prettier/react" + ], + "printWidth": 100, // 超过最大值换行 + "tabWidth": 4, // 缩进字节数 + "useTabs": false, // 缩进不使用tab,使用空格 + "semi": false, // 句尾添加分号 + "singleQuote": true, // 使用单引号代替双引号 + "proseWrap": "preserve", // 默认值。因为使用了一些折行敏感型的渲染器(如GitHub comment)而按照markdown文本样式进行折行 + "arrowParens": "avoid", // (x) => {} 箭头函数参数只有一个时是否要有小括号。avoid:省略括号 + "bracketSpacing": true, // 在对象,数组括号与文字之间加空格 "{ foo: bar }" + "disableLanguages": ["vue"], // 不格式化vue文件,vue文件的格式化单独设置 + "endOfLine": "auto", // 结尾是 \n \r \n\r auto + "eslintIntegration": true, //是否让prettier使用eslint的代码格式进行校验 + "htmlWhitespaceSensitivity": "ignore", + "ignorePath": ".prettierignore", // 不使用prettier格式化的文件填写在项目的.prettierignore文件中 + "jsxBracketSameLine": false, // 在jsx中把'>' 单独放一行 + "jsxSingleQuote": false, // 在jsx中使用单引号代替双引号 + "trailingComma": "es5", // 在对象或数组最后一个元素后面是否加逗号(在ES5中加尾逗号) + "tslintIntegration": false // 不让prettier使用tslint的代码格式进行校验 +} \ No newline at end of file diff --git a/Web/README.md b/Web/README.md new file mode 100644 index 0000000..02aac3f --- /dev/null +++ b/Web/README.md @@ -0,0 +1,70 @@ +# Getting Started with Create React App + +This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). + +## Available Scripts + +In the project directory, you can run: + +### `yarn start` + +Runs the app in the development mode.\ +Open [http://localhost:3000](http://localhost:3000) to view it in the browser. + +The page will reload if you make edits.\ +You will also see any lint errors in the console. + +### `yarn test` + +Launches the test runner in the interactive watch mode.\ +See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. + +### `yarn build` + +Builds the app for production to the `build` folder.\ +It correctly bundles React in production mode and optimizes the build for the best performance. + +The build is minified and the filenames include the hashes.\ +Your app is ready to be deployed! + +See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. + +### `yarn eject` + +**Note: this is a one-way operation. Once you `eject`, you can’t go back!** + +If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. + +Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. + +You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. + +## Learn More + +You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). + +To learn React, check out the [React documentation](https://reactjs.org/). + +### Code Splitting + +This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting) + +### Analyzing the Bundle Size + +This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size) + +### Making a Progressive Web App + +This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app) + +### Advanced Configuration + +This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration) + +### Deployment + +This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment) + +### `yarn build` fails to minify + +This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify) diff --git a/Web/craco.config.js b/Web/craco.config.js new file mode 100644 index 0000000..e240718 --- /dev/null +++ b/Web/craco.config.js @@ -0,0 +1,35 @@ +const CracoLessPlugin = require('craco-less') +const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin') + +module.exports = { + devServer: { + open: true, + port: 6591, + proxy: { + '/api': { + target: 'http://localhost:5566', + pathRewrite: { + '^/api': '' + } + } + } + }, + plugins: [ + { + plugin: CracoLessPlugin, + options: { + lessLoaderOptions: { + lessOptions: { + javascriptEnabled: true, + }, + }, + importLoaders: 2 + }, + }, + ], + webpack: { + plugins: [ + new MonacoWebpackPlugin() + ] + }, +} \ No newline at end of file diff --git a/Web/jsconfig.json b/Web/jsconfig.json new file mode 100644 index 0000000..ec9aa3f --- /dev/null +++ b/Web/jsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "baseUrl": "src" + }, + "include": ["src"] +} \ No newline at end of file diff --git a/Web/package.json b/Web/package.json new file mode 100644 index 0000000..e486365 --- /dev/null +++ b/Web/package.json @@ -0,0 +1,67 @@ +{ + "name": "web-react", + "version": "0.1.0", + "private": true, + "dependencies": { + "@craco/craco": "^6.1.2", + "@testing-library/jest-dom": "^5.11.4", + "@testing-library/react": "^11.1.0", + "@testing-library/user-event": "^12.1.10", + "antd": "^4.16.2", + "axios": "^0.21.1", + "braft-editor": "^2.3.9", + "craco-less": "^1.17.1", + "crypto-js": "^4.0.0", + "echarts": "^5.1.2", + "jsencrypt": "^3.2.0", + "lodash": "^4.17.21", + "monaco-editor": "^0.25.1", + "monaco-editor-webpack-plugin": "^4.0.0", + "nprogress": "^0.2.0", + "photoswipe": "^4.1.3", + "react": "^17.0.2", + "react-color": "^2.19.3", + "react-cropper": "^2.1.8", + "react-dom": "^17.0.2", + "react-infinite-scroller": "^1.2.4", + "react-json-view": "^1.21.3", + "react-monaco-editor": "^0.43.0", + "react-router": "^5.2.0", + "react-router-dom": "^5.2.0", + "react-scripts": "4.0.3", + "redux": "^4.1.0", + "swiper": "^6.7.0", + "web-vitals": "^1.0.1" + }, + "scripts": { + "start": "craco start", + "build": "craco build", + "test": "craco test", + "eject": "react-scripts eject" + }, + "eslintConfig": { + "extends": [ + "react-app", + "react-app/jest" + ], + "rules": { + "eqeqeq": "off", + "no-unused-vars": "off", + "no-sparse-arrays": "off", + "array-callback-return": "off", + "jsx-a11y/anchor-is-valid": "off" + } + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} diff --git a/Web/public/doc-code/api/setting.js b/Web/public/doc-code/api/setting.js new file mode 100644 index 0000000..5b2740e --- /dev/null +++ b/Web/public/doc-code/api/setting.js @@ -0,0 +1,14 @@ +export default { + /* 自定义的接口名称 */ + apiName: [ + /* 接口地址 */ + url, + /* 请求类型 [get | post] */ + 'get', + /* axios所需的设置参数 */ + options, + ], + + /* 默认为get接口 */ + apiPostName: getUrl +} \ No newline at end of file diff --git a/Web/public/doc-code/api/usage.js b/Web/public/doc-code/api/usage.js new file mode 100644 index 0000000..f2bc671 --- /dev/null +++ b/Web/public/doc-code/api/usage.js @@ -0,0 +1,25 @@ +import { api } from 'common/api' + +api.apiName(params) + .then(res => { + /* ... */ + }) + .catch(error => { + /* catch */ + }) + .finally(() => { + /* finally */ + }) + + +// 或者采用异步 +async function foo() { + try { + const res = await api.apiName(params) + /* ... */ + } catch (error) { + /* catch */ + } finally { + /* finally */ + } +} \ No newline at end of file diff --git a/Web/public/doc-code/application/dto.cs b/Web/public/doc-code/application/dto.cs new file mode 100644 index 0000000..f2faad3 --- /dev/null +++ b/Web/public/doc-code/application/dto.cs @@ -0,0 +1,35 @@ +using System.ComponentModel.DataAnnotations; + +namespace Ewide.Application +{ + // 继承PageInputBase,可以直接使用一些通用的查询和分页字段 + public class DtoPageInput : Core.PageInputBase {} + + // 可定义一个主键Dto + public class DtoKeyInput + { + public virtual string Id { get; set; } + } + + // 可定义一个必传主键的Dto + public class DtoKeyRequiredInput : DtoKeyInput + { + [Required] + public override string Id { get; set; } + } + + public class DtoAddInput + { + [MaxLength(100)] + [Required] + public string RequiredString { get; set; } + } + + public class DtoUpdateInput : DtoAddInput + { + [Required] + public override string Id { get; set; } + } + + public class DtoDeleteInput: DtoKeyInput {} +} \ No newline at end of file diff --git a/Web/public/doc-code/application/entity.cs b/Web/public/doc-code/application/entity.cs new file mode 100644 index 0000000..3503f31 --- /dev/null +++ b/Web/public/doc-code/application/entity.cs @@ -0,0 +1,26 @@ +using Microsoft.EntityFrameworkCore; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace Ewide.Application +{ + // Table特性设定表在数据库中的表名 + [Table("bs_table_name")] + [Comment("表名")] + // 这里继承Core.DEntityBase,会自动添加Id及一些常用字段 + public class BsTableName : Core.DEntityBase + { + // Comment特性用于生成字段说明 + [Comment("字符字段")] + // MaxLength特性用于限定字段值长度,可以不设置 + [MaxLength(50)] + // Required特性设置字段是否不为空 + [Required] + public string StringField { get; set; } + + [Comment("整形字段")] + [MaxLength(3)] + [Required] + public int IntField { get; set; } + } +} diff --git a/Web/public/doc-code/application/interface.cs b/Web/public/doc-code/application/interface.cs new file mode 100644 index 0000000..388e010 --- /dev/null +++ b/Web/public/doc-code/application/interface.cs @@ -0,0 +1,15 @@ +using System.Threading.Tasks; + +namespace Ewide.Application.Service +{ + public interface Interface + { + Task Page(DtoPageInput input); + + Task Add(DtoAddInput input); + + Task Update(DtoUpdateInput input); + + Task Delete(DtoDeleteInput input); + } +} \ No newline at end of file diff --git a/Web/public/doc-code/application/service.cs b/Web/public/doc-code/application/service.cs new file mode 100644 index 0000000..d821ee8 --- /dev/null +++ b/Web/public/doc-code/application/service.cs @@ -0,0 +1,90 @@ +using Dapper; +using Ewide.Core; +using Ewide.Core.Extension; +using Furion.DatabaseAccessor; +using Furion.DependencyInjection; +using Furion.DynamicApiController; + +namespace Ewide.Application.Service +{ + [ApiDescriptionSettings(Name = "ServiceDoc")] + public class Service : Interface, IDynamicApiController, ITransient + { + // Dapper仓储 + private readonly IDapperRepository _dapperRep; + + // 用户信息 + private readonly IUserManager _userManager; + + // 数据(实体Entity)仓储 + private readonly IRepository _entityRep; + + public Service( + IDapperRepository dapperRep, + + IUserManager userManager, + + IRepository entityRep + ) + { + _dapperRep = dapperRep; + + _userManager = userManager; + + _entityRep = entityRep; + } + + /// + /// 查询 - EF方式 + /// + /// + /// + public async Task Page(DtoPageInput input) + { + var data = await _entityRep.DetachedEntities.ToPageData(input); + return PageDataResult.PageResult(data); + } + + /// + /// 查询 - Dapper方式 + /// + /// + /// + public async Task Page(DtoPageInput input) + { + var sql = "..."; + var data = await _dapperRep.QueryPageDataDynamic(sql, input); + return data; + } + + /// + /// 新增 + /// + /// + /// + public async Task Add(DtoAddInput input) + { + + } + + /// + /// 编辑 + /// + /// + /// + public async Task Update(DtoUpdateInput input) + { + + } + + /// + /// 删除 + /// + /// + /// + public async Task Delete(DtoDeleteInput input) + { + + } + } +} \ No newline at end of file diff --git a/Web/public/doc-code/auth/index.txt b/Web/public/doc-code/auth/index.txt new file mode 100644 index 0000000..5e10e0b --- /dev/null +++ b/Web/public/doc-code/auth/index.txt @@ -0,0 +1,51 @@ +import { Auth } from 'components' +import auth from 'components/authorized/handler' + +/** + * 简单的权限标识 + */ +function foo1() { + return ( + + 连接 + + ) +} + +/** + * 多个并且关系的权限标识 + */ +function foo2() { + return ( + + 连接 + + ) +} + +/** + * 多个或者关系的权限标识 + */ +function foo3() { + return ( + + 连接 + + ) +} + +/** + * 前缀简化 + */ +function foo4() { + return ( + + 连接 + + ) +} + +/** + * 纯js + */ +const flag = auth('permissions:name') // => Boolean diff --git a/Web/public/doc-code/util/dic/index.js b/Web/public/doc-code/util/dic/index.js new file mode 100644 index 0000000..da683c1 --- /dev/null +++ b/Web/public/doc-code/util/dic/index.js @@ -0,0 +1,10 @@ +import getDictData from 'util/dic' + +async function foo() { + const code = await getDictData('dic_code_one', 'dic_code_two') + // => + // code = { + // dicCodeOne: [], + // dicCodeTwo: [], + // } +} \ No newline at end of file diff --git a/Web/public/doc-code/util/query/index.js b/Web/public/doc-code/util/query/index.js new file mode 100644 index 0000000..24bffbc --- /dev/null +++ b/Web/public/doc-code/util/query/index.js @@ -0,0 +1,32 @@ +import { QueryType, getSearchDateRange, getSearchInfo } from 'util/query' + +getSearchInfo({ + query: { + value: '123', + text: '123', + code: 'abc', + check: ['1', '2', '3'], + range: [1, 10], + dateRange: getSearchDateRange(['2021-01-01', '2021-01-10']) + }, + queryType: { + text: QueryType.Equal, + code: QueryType.Like, + check: QueryType.Equal, + range: [QueryType.GreaterThanOrEqual, QueryType.LessThan], + dateRange: [QueryType.GreaterThanOrEqual, QueryType.LessThan] + } +}) + +// => + +[ + { field: 'value', value: ['123'] }, + { field: 'text', value: ['123'], type: '=' }, + { field: 'code', value: ['abc'], type: 'like' }, + { field: 'check', value: ['1', '2', '3'], type: '=' }, + { field: 'range', value: [1], type: '>=' }, + { field: 'range', value: [10], type: '<' }, + { field: 'dateRange', value: ['2021-01-01'], type: '>=' }, + { field: 'dateRange', value: ['2021-01-11'], type: '<' } +] \ No newline at end of file diff --git a/Web/public/favicon.ico b/Web/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..ae7c79700385d9f694836df691822a40fa75f0e8 GIT binary patch literal 4286 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 a)zXfvTQoGG1z+CB-9|K_4G-llTK-Ss2ICh1 literal 0 HcmV?d00001 diff --git a/Web/public/index.html b/Web/public/index.html new file mode 100644 index 0000000..fb47694 --- /dev/null +++ b/Web/public/index.html @@ -0,0 +1,44 @@ + + + + + + + + + + + + + 宽易科技 + + + + +
+ + + diff --git a/Web/public/logo192.png b/Web/public/logo192.png new file mode 100644 index 0000000000000000000000000000000000000000..fc44b0a3796c0e0a64c3d858ca038bd4570465d9 GIT binary patch literal 5347 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 b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN literal 0 HcmV?d00001 diff --git a/Web/public/manifest.json b/Web/public/manifest.json new file mode 100644 index 0000000..080d6c7 --- /dev/null +++ b/Web/public/manifest.json @@ -0,0 +1,25 @@ +{ + "short_name": "React App", + "name": "Create React App Sample", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + }, + { + "src": "logo192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "logo512.png", + "type": "image/png", + "sizes": "512x512" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/Web/public/robots.txt b/Web/public/robots.txt new file mode 100644 index 0000000..e9e57dc --- /dev/null +++ b/Web/public/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/Web/seed/form-tabs/index.jsx b/Web/seed/form-tabs/index.jsx new file mode 100644 index 0000000..470a4a0 --- /dev/null +++ b/Web/seed/form-tabs/index.jsx @@ -0,0 +1,153 @@ +import React, { Component } from 'react' +import { Button, Tabs } from 'antd' +import { ComponentDynamic, Container } from 'components' +import { isEqual, merge } from 'lodash' + +const tabs = [ + { + title: '标题', + component: () => import('./tab'), + show: true, + }, +] + +export default class index extends Component { + state = { + actived: '0', + loading: true, + record: null, + saveDisabled: true, + saving: false, + } + + // 子表单实例集合 + children = [] + + // 整合提交数据 + formData = {} + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * DOM加载完成钩子,可在此获取详细数据赋值到record + */ + componentDidMount() {} + + /** + * 接收到所有子组件已加载完成,并启用提交按钮 + */ + call(child, index) { + this.children[index] = child + if (this.children.filter(p => p).length === tabs.filter(p => p.show).length) { + this.setState({ saveDisabled: false }) + } + } + + async onSubmit() { + for (const child of this.children) { + try { + const data = await child.getData() + merge(this.formData, data) + } catch (e) { + return e + } + } + + //#region 提交数据 + this.setState({ saving: true }) + this.setState({ saving: false }) + //#endregion + } + + render() { + const { id } = this.props + + const { actived, loading, record, saveDisabled, saving } = this.state + + return ( +
+
+ {/* 底部工具栏(需放在前面) */} +
+ +
+ + + + + +
+
+
+ {/* 顶部信息栏,不需要时刻删除 */} +
+
+ { + this.setState({ actived: activeKey }) + }} + > + {tabs.map( + (tab, i) => + tab.show && ( + + ) + )} + +
+ {tabs.map((tab, i) => { + if (tab.show) { + return ( +
+ this.call(child, i)} + /> +
+ ) + } + return <> + })} +
+
+
+
+ ) + } +} diff --git a/Web/seed/form-tabs/tab/index.jsx b/Web/seed/form-tabs/tab/index.jsx new file mode 100644 index 0000000..3d2912d --- /dev/null +++ b/Web/seed/form-tabs/tab/index.jsx @@ -0,0 +1,126 @@ +import React, { Component } from 'react' +import ReactDOM from 'react-dom' +import { Anchor, Card, Col, Divider, Row, Spin } from 'antd' +import { AntIcon, ComponentDynamic, Container } from 'components' +import { isEqual, merge } from 'lodash' + +const parts = [ + { + // title: '标题', + component: () => import('./part'), + }, +] + +export default class index extends Component { + // 子表单实例集合 + children = [] + + // 整合提交数据 + formData = {} + + // 锚点挂载DOM + container = window + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) || this.props.loading !== props.loading + } + + /** + * 加载完成,通知父级组件并传递自身 + */ + call(child, index) { + this.children[index] = child + if (this.children.filter(p => p).length === parts.length) { + const { onRef } = this.props + if (onRef) onRef(this) + } + } + + /** + * 从下级组件获取表单数据,并传递给更上级组件 + * [异步,必要] + * @returns + */ + async getData() { + for (const child of this.children) { + const data = await child.getData() + merge(this.formData, data) + } + return this.formData + } + + /** + * 设置锚点容器 + * [非必要] + * @param {*} container + */ + setContainer = container => { + this.container = (ReactDOM.findDOMNode(container) || {}).parentNode + } + + /** + * 渲染 + * 当前渲染结构已完善,非必要可以不用修改 + * [必要] + * @returns + */ + render() { + const { id, loading } = this.props + + return ( + + + +
+
+ + {parts.map((item, i) => ( + +
+ {item.title &&
{item.title}
} + } + wrapperClassName={loading && 'h-400-min'} + > + {!loading && ( + this.call(child, i)} + /> + )} + +
+ {i < parts.length - 1 && } +
+ ))} +
+ + {/* 锚点,如果不需要可以删除以下节点 */} + + this.container} + offsetTop={24} + targetOffset={100} + wrapperStyle={{ backgroundColor: 'transparent' }} + onClick={e => e.preventDefault()} + > + {parts.map((part, i) => ( + + ))} + + + + + ) + } +} diff --git a/Web/seed/form-tabs/tab/part.jsx b/Web/seed/form-tabs/tab/part.jsx new file mode 100644 index 0000000..9b70bef --- /dev/null +++ b/Web/seed/form-tabs/tab/part.jsx @@ -0,0 +1,115 @@ +import React, { Component } from 'react' +import { Form, Spin } from 'antd' +import { AntIcon } from 'components' +import { cloneDeep, isEqual } from 'lodash' + +const initialValues = {} + +const layout = { + labelCol: { flex: '150px' }, + wrapperCol: { flex: '1' }, +} + +export default class part extends Component { + state = { + loading: true, + codes: {}, + options: {}, + } + + // 表单实例 + form = React.createRef() + + // 初始化数据 + record = {} + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * DOM加载完成钩子,绑定数据 + */ + componentDidMount() { + this.fillData({ + record: this.props.record, + }) + } + + /** + * 加载完成,通知父级组件并传递自身 + */ + call() { + const { onRef } = this.props + if (onRef) onRef(this) + } + + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + this.record = cloneDeep(params.record) + //#region 从后端转换成前段所需格式 + //#endregion + this.form.current.setFieldsValue(this.record) + + this.setState({ loading: false }) + this.call() + } + + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + //#region 从前段转换后端所需格式 + //#endregion + return postData + } + } + + //#region 自定义方法 + /** + * 表单change事件处理,包括了所有字段的change + * [异步,非必要] + * @param {*} changedValues + * @param {*} allValues + */ + async onValuesChange(changedValues, allValues) {} + //#endregion + + render() { + const { loading } = this.state + + return ( + }> +
+ this.onValuesChange(changedValues, allValues) + } + >
+
+ ) + } +} diff --git a/Web/seed/form/index.jsx b/Web/seed/form/index.jsx new file mode 100644 index 0000000..eb193ee --- /dev/null +++ b/Web/seed/form/index.jsx @@ -0,0 +1,169 @@ +import React, { Component } from 'react' +import ReactDOM from 'react-dom' +import { Anchor, Button, Card, Col, Divider, Row, Spin } from 'antd' +import { AntIcon, ComponentDynamic, Container } from 'components' +import { isEqual, merge } from 'lodash' + +const parts = [ + { + // title: '标题', + component: () => import('./part'), + }, +] + +export default class index extends Component { + state = { + loading: true, + record: null, + saveDisabled: true, + saving: false, + } + + // 子表单实例集合 + children = [] + + // 整合提交数据 + formData = {} + + // 锚点挂载DOM + container = window + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * DOM加载完成钩子,可在此获取详细数据赋值到record + */ + componentDidMount() {} + + call(child, index) { + this.children[index] = child + if (this.children.filter(p => p).length === parts.filter(p => p.show).length) { + this.setState({ saveDisabled: false }) + } + } + + /** + * 提交 + * [异步,必要] + * @returns + */ + async onSubmit() { + for (const child of this.children) { + try { + const data = await child.getData() + merge(this.formData, data) + } catch (e) { + return e + } + } + + //#region 提交数据 + this.setState({ saving: true }) + this.setState({ saving: false }) + //#endregion + } + + /** + * 设置锚点容器 + * [非必要] + * @param {*} container + */ + setContainer = container => { + this.container = (ReactDOM.findDOMNode(container) || {}).parentNode + } + + /** + * 渲染 + * 当前渲染结构已完善,非必要可以不用修改 + * [必要] + * @returns + */ + render() { + const { id } = this.props + + const { loading, record, saveDisabled, saving } = this.state + + return ( +
+ + + +
+
+ + {parts.map((item, i) => ( + +
+ {item.title &&
{item.title}
} + } + wrapperClassName={loading && 'h-400-min'} + > + {!loading && ( + this.call(child, i)} + /> + )} + +
+ {i < parts.length - 1 && } +
+ ))} +
+ + {/* 锚点,如果不需要可以删除以下节点 */} + + this.container} + offsetTop={24} + targetOffset={100} + wrapperStyle={{ backgroundColor: 'transparent' }} + onClick={e => e.preventDefault()} + > + {parts.map((part, i) => ( + + ))} + + + + +
+ +
+ + + + + +
+
+
+
+ ) + } +} diff --git a/Web/seed/form/part.jsx b/Web/seed/form/part.jsx new file mode 100644 index 0000000..9b70bef --- /dev/null +++ b/Web/seed/form/part.jsx @@ -0,0 +1,115 @@ +import React, { Component } from 'react' +import { Form, Spin } from 'antd' +import { AntIcon } from 'components' +import { cloneDeep, isEqual } from 'lodash' + +const initialValues = {} + +const layout = { + labelCol: { flex: '150px' }, + wrapperCol: { flex: '1' }, +} + +export default class part extends Component { + state = { + loading: true, + codes: {}, + options: {}, + } + + // 表单实例 + form = React.createRef() + + // 初始化数据 + record = {} + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * DOM加载完成钩子,绑定数据 + */ + componentDidMount() { + this.fillData({ + record: this.props.record, + }) + } + + /** + * 加载完成,通知父级组件并传递自身 + */ + call() { + const { onRef } = this.props + if (onRef) onRef(this) + } + + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + this.record = cloneDeep(params.record) + //#region 从后端转换成前段所需格式 + //#endregion + this.form.current.setFieldsValue(this.record) + + this.setState({ loading: false }) + this.call() + } + + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + //#region 从前段转换后端所需格式 + //#endregion + return postData + } + } + + //#region 自定义方法 + /** + * 表单change事件处理,包括了所有字段的change + * [异步,非必要] + * @param {*} changedValues + * @param {*} allValues + */ + async onValuesChange(changedValues, allValues) {} + //#endregion + + render() { + const { loading } = this.state + + return ( + }> +
+ this.onValuesChange(changedValues, allValues) + } + >
+
+ ) + } +} diff --git a/Web/seed/query-table-form/form.jsx b/Web/seed/query-table-form/form.jsx new file mode 100644 index 0000000..cebd795 --- /dev/null +++ b/Web/seed/query-table-form/form.jsx @@ -0,0 +1,78 @@ +import React, { Component } from 'react' +import { Form, Spin } from 'antd' +import { AntIcon } from 'components' +import { api } from 'common/api' + +const initialValues = {} + +export default class form extends Component { + state = { + // 加载状态 + loading: true, + } + + // 表单实例 + form = React.createRef() + + // 初始化数据 + record = {} + + /** + * mount后回调 + */ + componentDidMount() { + this.props.created && this.props.created(this) + } + + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + const state = { loading: false } + //#region 从后端转换成前段所需格式,也可以在此处调用获取详细数据接口 + if (params.id) { + this.record = (await api).data + } + //#endregion + this.form.current.setFieldsValue(this.record) + + this.setState(state) + } + + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + if (this.record) { + postData.id = this.record.id + } + //#region 从前段转换后端所需格式 + //#endregion + return postData + } + } + + //#region 自定义方法 + //#endregion + + render() { + return ( +
+ }> +
+
+
+ ) + } +} diff --git a/Web/seed/query-table/index.jsx b/Web/seed/query-table/index.jsx new file mode 100644 index 0000000..95eb779 --- /dev/null +++ b/Web/seed/query-table/index.jsx @@ -0,0 +1,235 @@ +import React, { Component } from 'react' +import { Button, Card, Form, Input, message as Message, Popconfirm } from 'antd' +import { AntIcon, Auth, Container, ModalForm, QueryTable, QueryTableActions } from 'components' +import { api } from 'common/api' +import auth from 'components/authorized/handler' +import { isEqual } from 'lodash' +import getDictData from 'util/dic' +import { toCamelCase } from 'util/format' +import FormBody from './form' + +/** + * 注释段[\/**\/]为必须要改 + */ + +/** + * 配置页面所需接口函数 + */ +const apiAction = { + page: api /**/, + add: api /**/, + edit: api /**/, + delete: api /**/, +} + +/** + * 用于弹窗标题 + * [必要] + */ +const name = '/**/' + +/** + * 统一配置权限标识 + * [必要] + */ +const authName = '/**/' + +export default class index extends Component { + state = { + codes: {}, + } + + // 表格实例 + table = React.createRef() + + // 新增窗口实例 + addForm = React.createRef() + // 编辑窗口实例 + editForm = React.createRef() + + columns = [] + + /** + * 构造函数,在渲染前动态添加操作字段等 + * @param {*} props + */ + constructor(props) { + super(props) + + const flag = auth({ [authName]: [['edit'], ['delete']] }) + + if (flag) { + this.columns.push({ + title: '操作', + width: 150, + dataIndex: 'actions', + render: (text, { id }) => ( + + + this.onOpen(this.editForm, id)}>编辑 + + + this.onDelete(id)} + > + 删除 + + + + ), + }) + } + } + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * 加载字典数据,之后开始加载表格数据 + * 如果必须要加载字典数据,可直接对表格设置autoLoad=true + */ + componentDidMount() { + const { onLoading, onLoadData } = this.table.current + onLoading() + getDictData(/**/).then(codes => { + this.setState({ codes }, () => { + onLoadData() + }) + }) + } + + /** + * 调用加载数据接口,可在调用前对query进行处理 + * [异步,必要] + * @param {*} params + * @param {*} query + * @returns + */ + loadData = async (params, query) => { + const { data } = await apiAction.page({ + ...params, + ...query, + }) + return data + } + + /** + * 绑定字典数据 + * @param {*} code + * @param {*} name + * @returns + */ + bindCodeValue(code, name) { + name = toCamelCase(name) + const codes = this.state.codes[name] + if (codes) { + const c = codes.find(p => p.code == code) + if (c) { + return c.value + } + } + return null + } + + /** + * 打开新增/编辑弹窗 + * @param {*} modal + * @param {*} id + */ + onOpen(modal, id) { + modal.current.open({ id }) + } + + /** + * 对表格上的操作进行统一处理 + * [异步] + * @param {*} action + * @param {*} successMessage + */ + async onAction(action, successMessage) { + const { onLoading, onLoaded, onReloadData } = this.table.current + onLoading() + try { + if (action) { + await action + } + if (successMessage) { + Message.success(successMessage) + } + onReloadData() + } catch { + onLoaded() + } + } + + /** + * 删除 + * @param {*} id + */ + onDelete(id) { + this.onAction(apiAction.delete({ id }), '删除成功') + } + + //#region 自定义方法 + //#endregion + + render() { + return ( + +
+ + } + operator={ + + + + } + /> + + + + this.table.current.onReloadData()} + > + + + + + + this.table.current.onReloadData()} + > + + + +
+ ) + } +} diff --git a/Web/src/App.js b/Web/src/App.js new file mode 100644 index 0000000..77a1d96 --- /dev/null +++ b/Web/src/App.js @@ -0,0 +1,16 @@ +import React from 'react' +import { ConfigProvider } from 'antd' +import zhCN from 'antd/lib/locale/zh_CN' +import moment from 'moment' +import 'moment/locale/zh-cn' + +moment.locale('zh-cn') + +const App = () => ( +
+ + +
+); + +export default App \ No newline at end of file diff --git a/Web/src/assets/image/adorn/house-top-01.png b/Web/src/assets/image/adorn/house-top-01.png new file mode 100644 index 0000000000000000000000000000000000000000..fbaee95ee3d7ae5414d06f835935fb782069776e GIT binary patch literal 39518 zcmaHRWmufuuIS+IPO;+d4uiWhXp!PBgS%6txVyU)EAB3(xD@x|?hco4pR>=oKkmNs zV`jbY6I&~pBrC~x6(wmDL_$OW0DvMZBLM;cAZb6=qVTXE-_KSCLLWZ_E|S_VYG890 zcOxe=fT$_h*o;ip&d9G;b`5CDMsY^AR4qOGXFZvwVsHu?vK*~8A^0~-Jk z6!vg1GO;mpAu~3!u(Ah|pSO3DlUbPp$+fr?Srr|`%`B~CyqwI`yp+^UylhPPOv#0X z$OJw3KM2^Fxfqdo*xA}U^Lqfv|3#PoWBt!-7ILzGfwl^Z~)->}l^}&)9|V}KtW5dEdAK;l`FOd- zrKH5!*d)coL^*i*L^=2*Bv?7cxy8i)jVl2*akVqEclkH2>Hp&L{72k>EWysV*}`*1Q7R>+;)oa- zf;>DrHZgiIYr#Yr7LlvSE{i|c7%xA?lZ8u<>a?hY5j=%z+_zfFIP{;cDN5(h$Ia*G zUF|Hcm2dk38uy)E^RDdzlnD#tRSur7XO+6QmAii){Wcya+_4v24~@TKOXmN%x?*|0 z1Nttlj=c=a@6Iegj`d+dL1lM)A6L0g=tT`XU2KZh>y7%XxgHUxFCkyD`5sQVzs-?0 zRXf>OF;x{e{#ca+X9wXmuX>*wxT9p_A5ySe>H5DP#J;{v?lU)U{*KRAEpCE^b^dhMO!{*6Y2D%Zo@Lkj z_U-xnl$bcXW4ub$%FuVA5bXc#y|25m`DaGw>nag`Z2TW9ONgXMV^5>=c=vVp_XYo7 zoC>>Fznin4=1PTbNzc2U&%Vna;-e8SdutSfmNhEX%Rv{K{v*7mwoTc*`{ODbXqPcw`Ynh$E!q-wWU8!uO7PpACN z%2M$Ktw%GtH@W(#4>rCcq2jpc`nM~Q)6v9){N(q!wM>+2#<_*+YiRK_CWhlc<1x>g8qmuE<|m8h+`GPlp2jqm4pR|7M3@zc`N zKPQW7^Cy=uxSx7;-B#H#;q}fKfBEMyJLag;?KkZ3OO9E^9QDK4A75N$X!H<=HAhpC zHEuaS`B);WAF)?WbKxBRP^^BwkW_n|UsxzLXGcns8Nj!khhLBr&j>R}F+-mJR|C5b2c;;W)=Vw^obiHfOhIZ<{)cZv3X*=4f!~r{bH|za z(a}*sWpziwc8cet@BOR(0u@_`>Z;w8MG^y!a{7+hwE9t$5yAiD^jbw5bw>ROmW3ZuB1y7Zkd?80 zkq%+`UTovocjUesn@7@wJmjla45W@_e5wvI*{j&sTCCzEtMHoZJw zJGH9NU{EjDVopc=aqj>Ad}+(w{p`xqonl^ETCOspMrYu0Y~Xh^x!wT@6^D80eeCIS z7>u?{V4LEzy4m|XI{x- z&F6BEo_W&NZtdljLe19`XjGPDlXP}UhLK562z)pV`}qIg`++xb1e(^~)r4<3Vqt;{ zf64nd>gc=gMDK0}55i%QGO#Q6^?!46$xN$!X+0S{o43>^@ zb928x>3+Ry27bSP)U#P>20#9i?z*n>e|OJ)%@hx}D|fld)mueQ;`*mAu(Irmmv2O&n9)53jcWZJdUi1$~B^4GeSC5by zmMYg-({I7QxI{zu(8&miw0v`pIVOT-IpYh6^p3eNXgcp2c>dAYkx>3+~QlRMVQd{Hxq~zwdW8H|U0Xf3}uMi{sQSAjIc*J#wM#W9^i| zj`W2-`M2o-tiJbYrKOu&OpezR-RRX1L7Z4M0|T_q9b(}-lPKvuQlHJ<4F+rmaM==< z92M5w#=>irzSh^ry8G_;*N{oyy;*R@;=I8$mrYecMSs-pS-0_i^7|)0c4gtGgFOqh zv-jlhb#)8-h>{OUW40?zu2;9st9MAc&GuDqY>`xIAX2Dh+(c!xm~be6BJ#UWRApQg^%+7n5i z7yXNSw=j&NnK!y_A1s8Qm)ak^e_{sIJ3(+*c%_?9RPAmXYptTIIFg?c@EEU^bvFX+ zB1Ipk_3c}CQ;xK{y*3aEp1AcnR!ejIbRL)PyC+}&h;MXdzQ5#0!l&Js)~COFoE%JN zmXwqV(9l>|>VTkN=#%Bt%hhS)qtukO;Iat>#g}|?_V(G;6&Ga8YHQt2mzO4e_P}RC zKHH0*meq)9yQ!0!W1^Ki*wU49_fFq$3u6Ue3=l&S_<+FRh*HeubX0bUnU(#Hv` z*siym!~BK&+Z$DHT{x1@z-I&Ase1eIp6;b4yA|P=32A>D*G8S=r7l+nt0>z&c7jo+ zzwf6bJF)M{#_bbRBee4bEde+XQ+K1^?UF?k*(U=KA(s@~0?C5S90thDzQrOOfBJ^# zI9yi_%s#8uJU*wxUIzO<9iG1~;y^3)1r{%P&mnROgEs&A7*dSI(e6WZ%VF(FSh3MD1vnl07xD(IT?=$ylfeyE z`3y5~IMtK6+;4r045# zD~A}z$n7G|TWjcayP>RIrtnN31bk2wJY3Rs>8D(& zO6#*bFB&pWPH{2wlH zR$2%|#fmMLy9m%7SpWli$nyQc`-4Hl7oMJc5GxE2ZyCkl0+84!3@i00+LmBr3aRD~ zyJ8Q&+THcZ*KxD={Vx9}T}~7Qs+GCGKn<7caUKSP$B!esw8(uicn53S)M2Jr=#^Wc>zFBJN9Q~OCljq zETJNq5Gtg?Bi6Elc`{sqT71y>JLs?lp09WGAjpIBr=3;yR%_&pZO2(C?l&eq=H%jKcq_V998V!`DVdvIgGaN7Yc`Y|K}j1P`+~svN-JC2 zpu1D=Kx*oek*M^7YzXZ@ZWwC&!zRi`4(-FUqmr|n95|5OB}=ug`y&#=>6`!Gd~k=K zwc8#R)a&cbOBWO*cK2OR@C>@++Az1+ND%dw_YlNb_a z&{MT71@82&>DzWJiybSdt%ee4OhM|%M&Hkt*L;q30 zQ5%$7a#%-?%&rdmd3#aEeSl1H;n7#$Ol2!P4kwoZ8wpaVNGobjF+%~C@`de9FFOL6 z6NHS5{FNq`MU07jMZFG9tN5f3@=OmF{gj=#e~y5%RefT=T)q6Fjf;I8|BAn(3bOP5 zBcisupBcs(gF=P9PYxWXE%fS4;0CuH`CYFlfxmk@<0jcytqM7VsX1|?Xz*KDr;bhz z3~T3MS01FX%KsXC1pDI=Im3|;J@4%mhM~S4HdW~!MjE`3ckaeC&jR0f(Flr?2f9nz zD}&cxP0n9#ZL_%-w)NGc z^J``qjLOGd1_Vjl{kqcay0FmwSY;4sHDUwqQ1v}k&KT<6RcTiM|%83<8sP*=6U+yL?_k7poR4dLa()Ba6U(= z(v&k%UbFqWjDXu|(SGiV^oI8foso(m)_Jj^0>94#EnNnE6x>AHU=LuE5;row{0k(u zVR-1~$TQ9ORC#x^K>+ePo?)StU=Aab>Gj-nia9!ZsWnPo-)He=84aS0>|7JFLY1iZ z&=oZo767nAZEgBH1m5{A}N~xaPPNp-HOVBjamW5#hQi3HSK#W z!nft!FO@iH_Uak6^hQRetRhk{W~B(9cBUSGt7XC*(r#6ILkt&i8kzTmQeGP0#Ji!e z(uUe5)*$&)RpOB5U97PHLi7?D7r4~VA2loKUK)3k0j7JtJx*ON3*C2(&MX(5tST*W z#}fO7IqQM?vs^Yi=$#< zW^KS-)5IhMp69d5LSNoLGP$Qif%A^~hZ?R>uwC?h)u}v_uH#;c8E`) z(-I@jDAgz;FCC~#a}QiB57f`T*%5YwJ6)~|&e>?r?YcnAE&a#|(K=77+^2S8g=PJ( zhW(`??86&@Ioa1l7nRBEw>4jxY!Sq=d;Oh>i|mOG9mPw;m?s~5{ABp0<_WSyrbYpw zxr4?G%3r^*)R5;^srPIS$joEDsB@1rFp`*zL(xCPF*ppl*EO1?goqO|rDJR0U z28+p+HOq=%pMEBns~anRrw4eb4!R(C-fS5TvU*yfZjr;KrD$YLKfj$P4R@jUF)aU$ z_2jodC5i$xe%kkI`QnrI_#`CHdUe{I&u#5=iN8SP$pynC{$e1j`3iBU%IC0;N|2Ut zJ!Yc{9{%PkKo_0L$3<)fG|6Uz`V(RwQH3zO%J+MQk+fYQ2DHZeJfPZ8i67sSQZLU3 zEnCJRbQo>NJNtZ^+fTP)l^xdoyAfudF@46DD(m^(!<=P#Q;^@3$Z6<=Mg3_jUM(>d zRpaw{ zse9LT_R#{#1AiCl@&VYlBt&Sq|_uFQ3^NrFNVzC+&ANXf(< z_j0Q<&F$^o3~%i5&9B6{>9s+V4aR7g*j!#k8s!|!+Ej(@dPnxhhs*OO^#reH@6(*> zoCLMzclFpqWxEx(`H}8Fz-I79VkZ0b(j=*X-)fuvB+1jh|C>eI&Yi$P|NEqL@ee`^ zHj?JibMO0h|2^TCry2v~9Kq2@WJ*q_%Y@)cdPN*fIYlUJvE zq3%&3^9N}t<5fsHWwJW|6S0|n1A=xJgdXHc*Pi>{n$d3V%h%R`qX&ycSMuE#*EhS* zXKH63H^}4~zf%b4g~#kvgSU3l2X|s+`q4;bgdV%wod!D~68;wI3Z#l3R%Ikuv(}Q<*PqO67}F64Nn)Q<}KXT0~%*o2W(39>Ei-p5cXtl zDLv`_qx3I0+NlzC@}OIJrg{zX3D5clLe&N#TI8k-yXJHVU3G$|)*j1;dR398Vje4q zBvRsltHbV>Ie#Iilf_T_=KFJE`FT!7g>tPwUXI{|%Y5FD3{=*y)y_-8x}VF~hd8cJ zSDJ{9kI&zZ{#0d>dafO>3pz1B5o?IGuCAWR4R#fSm^;mlK6kqs8)rBz!IV3t?~)nN zViyO&0?m8U4oXCi|Da68{AMow-DFoNL9g_jD=bo~l%2mq@5z0(WLe<7%EUUKK2{>+XtzbtN%_tn29BQ+1zW8Iw%)zib00m_u5f_mf z#-?ZW(Su`SE>QO<53m!lmTsfG_IGx6<`m#SV}fgJE-jB4&1w_ZT*YKn8`+iUhumTW zaqvUY>hJ7#ZwDsD#~VSImSse+iO{72QIJyTbKz=fW&KDuAx_4RG+rB=hnc4{v-q5K zD#Cl-06zwH5HPNdh1b^fu_M3yL@V;;t|rc7VD466yu2qBq{NYIukMI|P>cwbmO6a6 zOoU7^?qI6rGPE;B5CWgl9hq(>D^SN4Ezb;NeSb*hv0HxYL(8z|^LYqaYYk~NASEX0 zZ0lRtck1eTciHfD`CZjKz2Sd}!sS+`K7e?3t8{#0}RHUBWXOr(r6 zJzZM$7L^Ha9z>QsBU3X+4yl2U9`gH3GPQ^dS_k2C^Q-UN>wP0YAgG(>(|Kk|`liK? z`G=0PHk}KPHI-T|NJ6BQc0W<-!7Ur>-^$7zL3571aCE9V*`%Cn&ddy+RNI0eEL;VI zs{PRF&yspbyF?!UN;Zsv#i(}YV#TD z$}S9pVycg=xxTqqjsBhi_T8_Fql*vFz?YHxveNc2FYk60L~q0Ko@LLRL(=n;lOHRM zh!whXUTgZfzjv{G)Oi?9udQ=L;a_CY<7|=%apYh|cM(aPjTg#**+m~AWX82-y?@gb z2=`9F@Aj7#ZpU#tNY8U#3H6PcnBOH$2?Z4+V?VzS_K*x#D2WbtAPHp?%B)YuKdpp{ ztZ?FaU|~s25;=DtR7Wml<5Q+ykpwhp?9#ye+bfiJ1WT@6%SBOG*r#B-_EU03LZ-G~ z0c9mn_jGCszE=R&Dr3lXfEU8p++tXA4$;9#$5Hmz@%9@cyX4knPCh$SJOnHW`hnPU z(2QXMY#3KYRt|Q)rF5J4-S?x<>I8#W2uCL}*G+0ZsCWkhC(97qx729r9snC{B`w7^OT zO>vZ0WVkb0QFCCeFAad7FpzBvDo(1c7(#{c5NFoF;Ql?@nz*0qGN-(qgw_gx&4u5x zwyO|V$w*p?BsKW;Y3+-#nl(=2s52ZUbum6b$;~j!1%gp^t`Q{O^Lb3u(xpj-XN0vC zLM1OJtPv4vf|a2-MM3`llLnz&Ok6G~L|JKXROAbEdFl-sBf(rGqg^4+bxmv^uOgG>2?31m(31~j9_ zWP*O`N|U*LLvf(AQ^ndyXj7jxEXm2!()Z=E>po#eEpQ|xCMXaej+q`9psYGNEYR1| zR|ID3yWBh=cZ%A03lLk>%nsPFR() zi~-O9hz}=+@Qd-U2azmlXlLJM-VBTvO8=atpI;6&btz@?PjkcUqAvi<+Po*~)Jenu z2&e>wp9^zQ(e%eXm*?2*SAb+*>dr?qSbT(uLS-8UuB8$hsjUhMC za@VkOaM1No4T==@9gE&W+W2M1qP;Ql=Bd+n!N&{@4_n##fIzy28jP@bGP;eI`$mLe zI{@u|$LfvRm?leG?Ju>V#Kf?Hq~uMo5DU@Nawnrd;a>&6ZHn1OJ9g^S_t(`e?d_03qoY(8oIR;#J zEi9g|o@80_qyMP;+BycIwE&%Es1T!n&kxOE8AMTOachv;gB)*H$caBJ`u7k703iy( z0;q~oJ1U4HZ7tRHq)+xgf72JJ%^21}_x4(w@wu#$v$%{jisW_7hK zPnKJ$Vf)jB8*H$9dISldH%UilmXVQ@VlrwjD2xk;x;^F@c?b)goO&4GC6!LW#ob08 z*eeefB@Cd{PQLtQMfiyrZ*6QyG4r4#)84pNz2KFFD2}aWr8a)uabK6ptnt0)Gohew zD7A$-B@+)82fnSg>7^riago(B{~G&(RfQu?KytNbK>LXSLs4{f%Qhmc57JG@q<`So z_cmQCbGOj92Q2>~z%3y}`iB)$!}cX)i1RZiTNkdiyS=_5dTmP7k*Owi5bBg-5GBK- zW0@)uX8)w?Ay={7TZ1>&IoOb}h&22}n4rC5L~y-?VfqHp$H$p_nOuQr3hAc94jca7 zo;38uO|MN^=Q+ZTD(#P>csI+N?;|w(L*!n;OBH>d%sm9wv=c`8C%IVkY=cxxQz^oj zCVMj15^e}Q>=qJKuJd9nS8!RrO#w`GFd?LZjzrs#XMA2!`n#Nsr&%glT(vjf6mIZU zLMocirmw%x)6J%hTDe;>sGNbqq!7`3LhxEcv*t+c=VR8-{R#%Yv^5bl!HWP^IG!~h ztdE9u(ax~4{Ds)26cyqOgACgbVtn)=GYw^)@v+I7ORV9;i{4jtI<4}`=Gf}h*32gG z2BHz%$CyHt#o4f>7dM6IM)jXEb^0fBTV%|Widr@qILowon#6<|kqp>9%aTI~s4fEN zq@H+JTid8!`Jg{l1n6w#pYQH67AH(}(X-uLnvmMbo-i2B>exHRF)P0Fj<~rtMgs8Q zM*?yqBIR=U$0x=?IiiRl5g<^XTqPtNmyWS0x?(r$W|huqbD`>6kt;UdX4Qn~TAmmk zjUs~9{r&GpY5t1KEGU^@dw8adnv6=9+G2~i0QTYBY7#y-y@}b|npPzdk>pr}L*m&v zE5loQ2;(JNsTY->K6Va%%Vd7L*PjhT3{DRlS|<9`hPLa1HI_QeILz?aAyKbiTIX#R z@E6VA8hy-d{P9BtBZ~n>u<`Re&?DLE7X#G@I^UdLd%i@G z4&k0t$-6f&POJiM##jlf2g}^LAS>Y0SONwlnIpe$=3h?Pg+&NWh8Ft=Uu!4SzI$1l zFS3`NFe+c4u9hbKnx5mON#6QSY)f7rz9-7H>S?IV8{@YnC{QN*!P1o&ea~K0etQsj zsI;4%-WmRA0IHzDExpY{UA?l7x3FSPWhp2`O+PG#b6y@F927C|8lG-0HQ*@AAzV!N zOCRFHm65|)uoB+3$zKR#loWxs^K?tS8Y#)Op+U3iRHqO#@q;~`W z&xb6*NP_fqzKP%S0QeiAFWOCN3spQJ-cR#u^Rjq(8Go@zf}`+>gwaD{e0(x|OOHJn z6O09I7r+jqg9Xc-qiZiaLt48w%!CRH3xEmIvy}PhGPBwCXBw&|Ak#u1Yot%KZIee{ zZoOq>q?f36ku(zGM{qV$%_934U!_k}b6fA+#}xz<=<{b6{cf@^hJZ~o%zyAhcVB7x zCJF4UEGwwF1rpY zO(US?5S0A-Wrcysa?#4|swUUIl30Gp)4em_X^k`#XX>Cd}4z?QQjw;|1)^*6mok9qQ>(x;`5WN~gwok9eJZE61}tG2NLFgl2) zQtR`Vg0$=O(}u^v{qOrxDp3(1az%U2BG+&rV!;<^F=*9} z;fr8Q+1ZcM$Z|9`AO{cjTVaNUVvVOKj4a!C9AGf~%|b7vBO@n)3}4;}egGA2^S5lk zRA3xV8|sH!;?hN41%TqVAsOOjsCe^e%JrD8?(`uDr`q$LXthR=f+4pmbnj<|N^;P_ z3ATPYCpzgAk_r`eMDNpuBM%+)WUP2)0Cv7I6Q4!yy;8Q{#sON`)bIg}Lo1cbO%Dy5 znsBqMYTm%bPoqf2k@{Wf&`oASy2Ve0(l z?VQvgzt!v>a#loC>Kl1LB<=%2^+Y&5ovWBttb;%4JX&0|dNjS}bxNtPgT5Nt3HXac z@X!FmtNz!$BOB!#Rw!&^@1_gq@|zaNGeP3fFJv${z!#&pKP=WJL6GZtN;GBd z`6_ahjONkL$Z~PzGp}}>0deBfyIuANUeE-Uc{Q@)K19&p+x*`?3+yb#@pO}o8PJ=y zr$~n;gn^O(+6a-U$Dhe?=BfDTC0&>^Uy<~Kf{yU&B|L|r)smGG&&R2dDn2?SyK*^~ z!TToN&+%x$$GLTPXI9m#K|-iVjF8?SW9<^-a96J&&D&d517(^?pX&k>kwKV&j8j1* zJQj=)%Ej2v;SptAG|`u}%oR=*$!)c0@O`^Z8WM?yoN-SOzXL(~VBOG#LoF>BZ9o|r zj!Hs9ECoNx!?!$a{1XJ^8RT`pEGU=c=8#fA4^mU~eO)%aNL00q*T5A}B<>8tCiom_ zku+(ufE+F$Dr8?rN*}zb3sfMFFVVU8!kdZf^FYjGhaZsOIz@yt6qiQj2#^; zsiP3JbU?nP-?l7-B~V}AX&nXD9YAiFHu@NpHY)nV`(}U+g95zVkv_aAB`#jb$;&Cj z2g_Z5eeE-5w%p-ZSX8Z)OOPM^Q5srz+llVJi;wlSwG0VLG(V9|lFh_~4;5XQaj=#y zJV1lXMReWotw?v<^VOB^sMbp#5_XjECy85JVXz-+?Nj z&J$II-2D6Fr;&HLt>8d`Ix$Qv1k2zofX>a55#`d7Z~NiXW^tYUG922}1|#Iy)fKj~ zc&!dvv1);je9&Rz&_?m{FN+_zOP{iwmk>!lPY0CF(i?~PMwR$*6$^X6T6WH z4`bly=$Kd2a*$fr{Q;I->s|nks`>stw)$?K7))>kJSYNn=r2U-I|oC*IlOAgrrgP3pj2iSR%k@kytXdN z`MEqootCnq@T?G7iJbOVT=`Prw+%%BBxF&N%#bFjVAdLwDOpC=%uW?-dHjy0f=I!t<`q$f#DVBjvaCaKYyD9uOL6WTw$R} zfxf6P)kCw3o7+^5O$|nEOHcRYrOi&LtHJwUn)d~8&0LM81bXaDQdwY6xmtq=ciNsR zR5@8h-uW6lHZ7;GUv~{UmpwYJZtdJuH=?QNo%@J} zsl|GV(4T0iAr-&%tuyu}Y3*!8vxTXB8Bc+=41eCNR(-R}-MLOdn;~4t$Cgut;nH-Y z)h~yu)}3?z@dd3CSL9I@ns(#;t@DyX+MF~kBTWVwC7Sl5*j=*O1rp`E@OMT1fv)mL z;yoWUcEyQG%V!6zG@L7t{}Zm4bhlY%hseu&rhd_c zRuDsR-^;>cQi;tjAPUD$RpFnyE5O>zSS8EDK#=0oxNu|~0pF2<)cUa)FTHsI#c97i zwv7Y_F9=v=cCBSW>VtZ!C$Fm2(bsTIP%B}u`w>X2Gl@RLkUOSO-NU9s5h70CUsA?vY7?YHt9Ohfcq zKnbKT|LN6C+pUTm74I=xP&Sz*QrE?leA zr^ncw;_H1?I^N#KpFGv{Obeyoo_SjHv5kOnPV{gAQjd_@i6rm!(K}$vKw3aTQja!3 z0rYmc0JYP@_v=Br@WG@^0)SnN0FQtad5q`m15PIBR*)~oR2HhgU;1?pe48r~t0uD| z^m*rB7JwE{7fk%xXx<3Te4rA61G{idFfBr6Sr{bU#niNup7LG%$MIu93(1A0jl61x z#oh%b1lCqE$_jgBs2ApPC_5YzygJ4=Dv#7iW8YY8bQk(VQ;;?m0PzJSXiLT8vaxxLju0|iCsmjHvs5~CjpM2GdbrZ}wBOb2-wx0CurWbsm0p1Bi!%ZtmR!vq; zM>>iaSbZBZhXK4ROBb05jBh>oH1zSc z&QWOh@W^XDKSVn8DhhgcAfbvniX4_fbZt)+*$olR0s@KgN5lu3hAv?h)ToDZxJo~Mrx~Ze<;!>;7j0=rn-YSVHx4c<$%zTeRns6+4_W)1AWE4xa;UW z7-oZAKOjrCmXBd)c%s=Jrsw8Udt{R~es4D=hu?^ibz;r`P`-6z+EMS^4>NioUzR+D zTO?cf@yA4C+8+Dml!odh(>$y@rqd;g8Y-+pg_U_y?MHE))h?B{FYsa(Q9oB|ifQ@^ zI|YJNyp{rjb-!LMR4V7&YPZzTwh==_>yNP5_CdF!@i0f{UG z9u4&sY~IDsoyL|Vi`6UDG+#r?wfSZBLl0Yvomhjyako{*Y7@(O?N)1Zyu7>yh;cdm zip)@n`Q#eCG;9yzm+=WnFndcam3T)g{DwaDV)T;sAP{0r(oSH+Gl{_V$n;z3stR5* zrV-SBmWlL;3YWXB7+%GHbCy)?2n~>Fg~uCv7O{p_U;;?Cf|AK<4%Y`Xc5x&Zwro^u zCqY8uJBf+Nf1Umw!KO>;K@XPsi2=g?6bQo^u1{mTD!vg|LdbG)iB!#n`%9#r^ z7EhrZ!jrpgyf<{DguKY988O6w*x`^~584oShF(qfYy7!t+D0o?pqlTW;+GLvT&>sFxb@7) z>%o3c48=WdmvOv}4T6Rtl2sLx8MFVGwPT8GHB=< zgExGEk#cxb7gH8a4O6Y#b%ZfC^Km4HwdhNoGnRG1 z7Lb$;;)TNi=2sjO_KvVFp@;%`X@k_j_-z~3f#!j~0TTwF;LUeG^{+r&&lsZj7>kGp z2iQKB*s zS+hiYf&wCOC=dB`{C6%%dtO&lY{E!VB$k{JW9ZaX=a1>e1#B;`wG4;o4tcWROS?V> zH~gdpoxD`{XIOzUSV;IDtxv`a66|z_P*!|o&_zu>O2qs=+Fs`!M@MT;zHw4wx0pTn z19dr}rSuD!<)86a2Yn%`+)0S}HpD=eZoOZZkhOct03ExyS4ra*1hi%$Mn8N0T|Eu={XUf>0_JbSwpy$NXZ|zg0RSNi$xtje3~?V-saZr zl=w!Ak+t#m_#nu0GEo^g|NguCA#(I$D*Q^?|4O*Wl$OM*JR!!EISqaV0|k;31O9Ew zRA!2tMH`|;#s-L50bd57m9YrFB!qh>*0N1Z_>)ni=6D=qDc)g6`&A_jBHaujGcXUa z@cM~2I{+>(ug{K@z!-;!d!l=3Z;yRt_(#U1Q~re=X~U6_&$#&k)67@ad_{~ zw(xL&TJV2*2I<%g!Z04cKz|GCCNuMS)GQY0W#rX-|Mq!I0oF33~^$05i? zD_+oHy-+?KPcRJoF=?4`=OUnZ`5;J)@yl~^7s+Xr zSEvCh;Bk3K@wn)xg`1lcbPYP<3RhU{uPeFi)3#cj2Rdqd56H_j2${{!pd1mI^4`7o zxkDqmz^)xdF#pp(^^rj}jzr=1{in>gyQkxt$!e8o*?NNP83}((+3V>N(q#PY325 zX&*t^x`WB&QQSdx<)_|0X3iHLe#(Uxkx8D6@(_U3j>ji2!sH3Jb1LP1$Z(J==ae)zOU zRlTmqdAd2Xm4hbU?dLk3k`gAYruF~A$8ju16vzR9z4H&bJrHMBFi ze?=q#l=rhVMD{UYq$|KsHPt|dz#2^icO zuz-Y59KZ<32|9lzpN^e8)H7F7xaz6x=|LgHQhx@t=VPE1R9CXi#;O_hHkDz5aXlaBhpchj9UTqqkr9lE(jLqw6Mr<7K2&bD5~%OKs7C z(vT>>P*&R%c~8VDG*vEStYlhGKH?x8ixMNHf=0(AzhgI{>7^QIkA5KOcsy{^@EjH> zn5B}ZRtOnwAXk6Fn^Z6QYw0PAO0B6Ds+t;EN~P==3UR@v8h2N5yN*$wT*sfd{_+J3 zV7PSseh_pTivJ^Y9hO?TNnV5Q%A{qR8Rrc?{6|<2H9o^U+pEn9vp^FpnRUwgwc}R} z0UITq+t~bkxT`a$0M+aXw?rx(`}A`uRy>p;a#?u|E~C?UrSY}6em}w9i24gIjm+8z zRgqGNEX=@TjFWhEYseF39o&MC4n=6O&3MM)cj@le&R00pjjWx#2gb1$atN`3QWjvA;PxT_d|LD8LCCxE&Q7(_(qfE)BQCKd zFvGc4SV0YDVU=$4^mi;8OE+c;4bHC_ve(*3QZQ3Db3WW~z-S`J-}529vZc#rg0%Y+ zhNK;+as&Bi{mu)Q3{`)szEI?TA|$al9i@^?QDP@EcFm*UVk)P?Agnn$FZO=FeE&ZHXh4_0#>d9S z;-GFAXtwosccoSca}rg88b@4mi3hgR z04F7%1&B33lH~^&zcK_yVS%7ik4hs&lpimFs74WS^tn<)fjB6BUDo{0_O&Rq1X7lp z#05ZB5D57tB#TuYfw3-QMjDJdfJy)?Xd(7U39`q~wJ4x^J){u4R(gO*(PCa1cSC@y z_*iXm42}IY7^^^4QaB}}_`t-iE>96P&Q)-~4PX#tJc7n^st<9@5Riz6v>#Dc{o!kE z1kRV~Z?_cCvNX~(!E}=r(3;dEzAI7vj2ht22po64$@k-;PLZ?#%FD3q*|Vqina_OY zqZ1QTf59``orZ2I2$XOu#kWj^mmHK(HVR>*A&iE1FF`|sKqYA%=u^m*hJ$k%MJWA3 zE-z+d00s!+rlCoyMpFzgD8r&2YzSDCviCGa8mJ_V2>ogtbn@k|hV<#N;jjw35)Vum zMuHMNBS+wtCWrN`mu`va0*a94Fmz7~2KEA45HK&$u%HqrnXo*sk*X~fNYbIXtxb&1 zz_1jhOt~?)@k*x~CCgw|49lRI*?Flr$`z~B)!t5q=86S=lE+o!&t!57qP@YkF@78$ ziH=8?a&72fpz}Z_kTg5wW0}h_pkZ(_J~b^*7Mx3+j{`zkd4i$h2&K|~gGVWK*1ZyI zINxeDol3$g#pLs;nAe#Fzz))qb{^jxk9%lj*z44cv>gKz^imQK$Ur1%dCV1J8kF#RZXnP!>)*4CQZFs#`F0DKDiX7OPYmrgY>LE-rJg z4OBrj1F`;kCfdA9rnMFgXd6MkAu_G{KZ~JMOT%Wr(FMBEcZdQ^U4vzb(~{t|(Uj4S z04E7r?omRav}6>E81(dM0FPP(xTg>pjYR-vH893Y!d+Hb!Q)csBI}RviI4x`ZQp(D ziT|F>W|f6(PC>l1OiMwKReX{Yvvth;J0wlurC-oA5LyQ~rGj1Q?rM`%1kwnecvKa~ zR)B(J0{$R5VG)r2K|q9m2FiK?P+$ND00728%56CayLDRvqx9OTcmYlqKvLoDsJ^fi z&aiRu@(`z3%UslvU|n6-iAjnADG{VmP^E(Jgy+=iiqA=bk3-TWczEi%G%ak*%v8;@ zqDN^m015s+H8myUiHWmnOhlx;U1{-0DVC}Yq$#4i0SG}Ua1MGM z)mtBF9z0W#&BA+l)LOg_&iBmRjHkij>x5L0;unkJI;X`CrcS-Rz0!aY&cP7gg1rHV zJay`fq=a63{dKhS%H8zL-n~5bf^0|9dFVG}SYG=AP4|IfO>FLAQU~qQt*?9ipZ>`w zKJnQV@C;Ed@Hyi~1jsO(5S;C*AxeBPpYO9D%UFk)A0T{#F)A$=2?m9m;oLrE`KG(X zpil@vAQ?x2ik`*y{c_o5Opor5(I($THd-UH1Z0*o2Ft*hU%?ah?NI&g2GdiEHu-_x zJwaVVy-7Mk4W+Dt=?Mz#ORX(=t}Gh0`Ih??A0)|_5jvB~l4+WP(qazt9#dn&pv|yC z>`a46Q3LEr*gcnjuelt;0Z_Eiu{j|CX48_NNG$*q!falnF`^og@@bsYATViEDFsah zbz0tBG3aU=*0MCtb0q*wl)&~YA7D$98V22trN2mS1NSG&DQt*Sk>PzhHnV)5Tc6Mme&QSLH{1O zr=qtH9AlBTQdF;8xxFpLfjI6t-a4K}4O$spGyJr7mHjt5>YIClUi02VRb5|*ls&k=;QsN|_T-h@p&Q2?eC zR~R7(mBBIr003B3#0bwTl?Lm9^9H7-E?zGrAO!jyWcmTtupY#)=nn)otE;PnKjWpn zuureDse@*wXQ-#ASH_;1Ul2f9ESBXQAZ3GIOkiEc$H(Zvp+ht|H7kt(C#Pm;hVK__ z2SQ(@>@ddR(GdYvSMA>Y$zQ(v?$7`EpZ|G%1pt(D=}z1W+*a7_GpfR2QABBn08%{g zoKTieb%RU_QFIxwh+4q{L~zUgGfFHp!n5B<-wns}Mpi^xCN|A}7RIZ^Ukb_|d!RbY zt?ZW_b7MQf_Zon~4LuVZrOLcd*Z*9&tTkLI5){G)_rG|q0LnD~cXaP^mYKqNRXx7j z;?ntm{u^e=G9BQ*@*KcLMp^?4rD+jt*y3@B7S{8J1|U&AX^AJn0j*j)TU;HU*e*7I z46!C!01yPrh+~0&H_Y0ifEoqBiRpjNqUG%uf`V8ruq~aU4GF{MYDz!{qeY}Y)g}y6 z%x7^d|MOM4h%0zrDF!797;Q-*&_obLP?DeuK)}Iz^QMi$Xp|Tz%+KY8 zJ&;bpj!oU&-Qwbk=OEH6UU_X@bPo-aHLxcTrXpq3&cS=ts(uC*rie9>U>chk7cB)! zo%?ylk3fr4T7>q4gD=L7nZKBhaR9FH`|x2wDguBio6XVO{Hy?{L^4IQGc&ZnfjB0D zQWAZKBRzn;K0shiV1M7xv3Sk$Jf~WK2UB_w@l#LQ0MMeDnU@;VD3wUb__DdYRM2SB zLE4bN>55lv1O{Vte4KI&J^C+#`qt?c z`V3KC#OKc?m?c{7=MkI%o5A(t%PVCT8}5~sHw|p~pQr(L1*wT;RYBA+`7Jl9dZgr- z0+lU621TXjj<`yrCyy_N@EDdQci2TdWG_9>)QEuV26FRor`6qvl#(2CNWW3@8XMXn z21RZ1ytD%W9plv8pf8Na&Mfx032YZYMe(a?z>+NX0rFj6UB7ieLtdZ+s-86O@3nyc zOdw@bTZ#p>v(tXzsvjo+3^ZCUiVdCvBk;Zv00qG^;d+263R>d30YKw~_8E>};cnXw zE$PM^ zJjYa|DRhSl*{u80SfnGa>tdyz( zG{}kMfIl)aDuP-blduHilT(WZYGS$QH^M{O#}L02jh@^0g0M4~xyP-97|3B806{Q> z1Iq)mH%#^n-RlMn765EXM^`8M_lb82Dq@O-q6G4RRRc7?upqs4kcx@LdPO&~uu$Ni zo<%>dT+A{^H#JEM6*=hRVpaft7)&8;g7F|lqUs*#g6^fnf!gNB6H1@~U?3_+ss{`R z*o+*H0YI?5y-ffZKv0#}0rLcqBVCk>C8?OwQOTrwOiqG<&O88$3#9=}?f4wmigGh_ zcA0X{28V_`!7B7VD7-Ee1?;U`yH2_wLo)(KEEe-MD15ROV4jC699|c?oUt=!1mGa$ zhJ7p2H>p7FsdnmsRXzi}fxbQ(9U3OJ!XSp9-Cb+bv}Vm}0gC{BxE2}S7XZ-c=m^c^ z^Ox~3UrB)CUH}le5C$cz%ZReKcS196HN=3_OUv0=SucL}cU$&RitY}({5gbfx>jR< zmfB>z)Z`hm2rL?)#153I`g#*3Bxs20EPPgaEU0S<%5THoDh>81;MEdt%1FV6h7@6B z=AN5r4?JU0%_Hu!3jEz@$>mk?U0*3s*4*$lA>RSl@t6|>AVu*-G>Q^%7Oq8KrzoHs z1U(dDF7yDiVKxDkQJySeP#kQ5;861(Q%Z#9#|^|Rjm{Q@I}zuX0@{`+@oTVS^|I1; zI=eCAMYHHX1VD1G3q}z%DaMraZvp_0LV&7jAXFy;wVGih+27yqu3fvZp{u}@4*OZN$H}1ZC`}SRry;v z2up%lIviV(Ca7jJRGgdjs(JXa)z+Snz=N4T(kJbDN^~YDajldlMSu$3f;6#1ikH{v zZ11LYyhCXIEYIo(23AWY5Wolk08%gMcue*U0V-zkU?1$dDpf#$HRzgKuX*Ldx~WQ% z`{>DI)Rsz%AsB4%kv;(n12Ji-UJ;oa48jmB&0L0LJFT$&>OosT@Lyv#v^N zBoRY8CLvC)sKP<|1e3S1u?dMkrDx9Y!Nmyyu*LJ~Ke!!b zNgTVlZF{+X!)>DfS=^s}Hv6zR9^andZD?FPk?Yd-eXR(2;G}V$(Mw1A=D40)tjC7< zjsF(Gq`!{lgA@a)oW=8OQ)9o2;$OqdtvKg6ca8XAgi=@zEf=pkAyzJ|H*rHuhfB+S zQNqr#Y7;l=Fa-@E1i3 zT>QBIG6NSP?hAnIkk}~Ltf~^o+Zi0x)p$Iva?n>YnT(RnW{q4fXC6LWN%0IjW*G5= zMsBKN+bO>DQyhHoO4jPN6hC5;@nj;#pNaE(76%C(K*iJztyU{@jMTJW*t9|G?Cw(6 zt>17h$J{;ppMPGdRm#_vD)zCy{%y8p#^$TlQkUz*`3d53Fw8L+Fsa6~-i5h&uM4nm z>Q%_)wUe7Mllh@whQ9|05r(~ zzq_xOsvM}}N|L&|y97jlIRT@SvjsC<0kH5Q9z|Qp4H1)6Qql!|J6cs9fpjCli4Gh_i96myuHf_DAVFoT1M2d8(B$o;+d8SetwX@qfy2l7?^T**5UWYe1K&H@EKLp%)2dAy zr2M)DJraZ85k4*`PpL#=kCJ*I}jVja{)o0*lrZF0`(ACb`vR zqGiQi1SP?NyS1}RqJxHOP6(ic+Y)GWc7Ga`&Rxn&6fMxckg|EV3Gh^!=w+x0Q&Xem zBH4OGOm#!|Uo$}NG`apOI^CncOkkuLV?yVkL4zkU7I?)&x#n6R&qtx3K`Y@#9uc|^ zj%k{TstpDy8qbnV4sJ0=RpW+c#p9-ta#fDBHNB1FLc6N!Z2&497*mXDVyk-lt$M9y zTKu2O&jCf%9F6Bub;ppdqT3N$6CUab_%QWl)c<;8X#rMw7EGnot}Ifx=CV^)t!4ft-%&CSZcaSW(Z z0h2N@S@pUH*O3k>Qk4M!G%Ps|Xr2*VMYJXW2Vh4Q=I2QTAgFpelr#shfpkhlt^gM` z-nLSAC3wayQ-VI24Vf~MXOWNbYT^r$pswDH;&*}zvzmiEfD!t{Amsq7+<}1sVJQ+Z z&kSwD`VBNXI!g0=Ebu$&>+SSS<2<1+It3#YGci6!)8pe50}xodMi>GJgi)P@enT)w zJ9YXL6*3F7rf(H>_x8xG0sDEdIalu7MZ-g9Xp#X}lDE5c!#cjR4G{qs%4O>9>zDlv zo;*d4T@gQ+p1w{}d7YS<6g^FqLDWon67xCP-}<%d$zrh7+1@67e8w51p^2Y?G~7a# zs(h{ZU<81e4AM>yo)Hmpj@N-J9ZHZ@4WzT;R& zf$5*2I&QV@z&6OKIjU>(H6I=x)=(`qFwj@W`gP59T(mf-!9c2I!{zO&(0QP< zrRY8C*sbV3a4iGn!(hJ}mAtO!^}*LVSTbuP7rMOjtrDR}X;cKcfiB0?gso8{f?xPq zEFjSLKMD5LQGJji>)FczP|#Cku}s+Sm*Xz#PCQkyBkV}k>ozQ(t@zJ>v;(SD&kFKN zz{4d3O3l#mX|%lgUKGexn&=v-3DcxDW1J%Nj^~<`M|IJ@5Fj5kcC%=?hAL=gsD;i= zV?8SX-ojcJx>(p0{Uw4E1CpOR3XDnO{QQZdwk1-c|A1EI%$XtD%rj^N z<7(ZON{&em>X?lK*v!q$iH-u|*aCXipv*W|V1P0!>_Z`6kiZv@+Z@PB9BXOmNY)mu2Kxi)UIm9tl%QXqU6O$9v)4z(r*MjI_5b(i< z!RQW;@ac(3N~DtxdE9_QRVg9|Gm;4U|xl?tWq-ahZ#@jglneqh#@&lM@f z=b9JLt7H-$eVKf1b)EFg-fW>#Ra%H1rI3^42?e&v$L9`@ zjmUO*({<^hU6-B?{02U0+YGW?O*0sy)g85g*LWR(HHT40oj+SDmg}*&WmoKyxRml_ zhll6dhH5bMv7mP60ijnUqeY9)E5_w04(hl7p!kM&P1&fzSWS0)5=+X86@U@Tax`0! zY86I6b=_--Q5RLK2Uh9*W;sUScOyi}h3nhH+gr>HnhYs;#>dZDl%>>74s_6##CffRWf^gP z03{f)#BHb6#euzx!A1&9Fh2_|eqb9sdoy)||I>9mPYf$=X?D%#$yD7SFHedYp?byk zt?E19`Qr)$24&OcEp+JcA*C&mV0>cDe)+zC`trk%Jo?;Q?zrROpM3jU?BUacH<>V4 zBh2)8kaf@2-sYfznL2zdU}!coJ4f>j2C|vFSJC1)0urF{fQ9<}d`2`J27VsTtf)@$VGRD6wxCy)7^}7~_Bk1spyD=h?Po zN(8%Qzt_$b2U#!zU{DGiT$8DkOoPhUpWlRUk^?oOSG8h`1_Z`ys4ha_Lp4ffE+f5g z5M|JNrmLeGlp8D}zrFE{`)% zM2ta73Z`!m0!x`R2V=y=;gMkhP)Ik;flc9al};q32@fi-jvhJcAGaed2g=p5-w!Au zKeZmF`(;9C8R0|Vqz=ZMmOF1 zdiuaG{JhxifA6u!sIPaGq|cst_E|c4{50?9C~e(-IX(L5qn-hvrpn6@lR(eh4)=;D z)a3~*?i)jwG@_Lf9fD@coX;v8~g`GBCe`2SmD#B$^^*q(i1oYT^<&uq2j5*8$kRu z$yH4ZN#}PFlX+BFPxls6!vlif)8bZ4GvoZyO%;zE$U@?A%iv?=Loqeo;*arPF(!@2 z06jaO8~^zvN2)=6p^9T8zPGL>6=)pbF{c8P!Rtxzz&f7Ova+oDMv$8KBBy!9W0*M! z7Z6-X5LRgUKEj`C1W+DhEu6L@>3m$57o>2WAl`d$qbH9Mnw*M|*jXx%4wl=hO;Qu# z<7w7>?|f{>`LY60+o$ueBkno&8$QoYNJmK#>B3roT+l*nixCk1)Lt)PsXCqA5z-E&ahwpk3s?JSuD57B zIa8q(;Q(q_x*p?SEdGM?Q%p@w9nQ&K`<(mUt;_qW zO19x{+NB!adv`qd>~;2Ddo3n?Lf8wPH)!KU5M<>9_OPM#Sl0yHlP6nS z?Cz@q5NNHj;D;aG7Hex~xt;Ys01kc5cN!rhnjk;9`>D8i@q+NeDuays5AN~m9BsEl z0vosQ+!4=Rxgr)97noqXP5S`Z7d#EztquiXLXk`$#jJ`l6Ur_C8puFkm40~t9t*I6 z;EMC_c01zZJD>2iK^t~MHkf~L_WXG)Tv;}L*BuD|UAu@v-{c3LFtAibbEnN+QmzuJE-7j|CtR>bD5? zD3jg3eTOwou&xCtWUxnoAa!~&_}tdc9tUby)wfAX&o<=J5-M5k1}N`UTwoun^4^Q?IMgH5^z zZ6+QMBWF}1B##%29RMUn`>@Fd#o07Fjx;|>_#FY!n!DHxvZT*uvtfb+LjcUKj86-A zR_BG-Ic=2%JMamR$`ft7G|(EFaCuT8BS8-+YB-X{5HLS&j6Q`F1ihWWhJ@LqNfLUH z18jrNqoU$btl3mYqx_^H8fNDi&f=h;0x4f ziKi7;%@p2ASyz`n0bu;H-DYLK8!=rG*c`({F~=OoG+>#5kGRlbRXmP7V8PE#7iUL> zWJD#GRp~l@XPyWgy7wf7^3iEX?Y}Vw{%HY42AstP^MeDVBaV6xh7k*;#LKZqA=wm<`+QcBRS7FRw)rdA{NYbuS33AuVlbeN(6P zOpPYrDy^3wY8}wLP@zdFpouG>Da)rdRKTfhn%M};z_Lw3=x{LX%QQ~Zpx^gEM27B$d%ssq9K@$N3YWj;gqx)LSPWP?J9GNi)Gm|F{t8tXhP%1+CYjRAfr~@1&DOa`U+6x?*2ctfl z1kh5Qz*UtwK0~^Q)oRQ77VYoD-n$A=(P*WXDnN;RuO;jM}H!|{Egq?G7~aufAQV_F0Nm{#;x5U0kDqk0D?g_WiWuyorm&}27pRX>hVFz zlmHjZMWOwo*n@piaHoi$a-`SvSQ?ay=tq=?G`Kmafg~s((Y_n4h6d>wDML+&ijEQG z9~$DRMg}QP0C<$4i6D*BDDl~&DrMdSt!)5!QW~3@77uzjjFL*|C;ib#({)KDYF+m2 z2~HB?!!#?TbWQj-929|5?JL4pNt8TO$i7r12lR{ zSxFuP_NJA4iae4cf!r@4RTuSBl3a&RQs_3y8d37vE}0{ACwDBNdu{Za04l#MK#>KO zbH0@-4^GlTwr19)nY=>VmRB;!bUt-hLTVZhLINn99tEKf-#IN3AbG-FIISR1EqqtX ztI_uwt(GeE@K9t2IPI5Mb;Fpro1AJgyB_i+-?3SxQ;%9`AkkM{Ne`$-MRx`u7TwTYla8jX<6(0<6- z6ipzHIVj?8^vOsIWg$*_ww6Q%_Igm%7pyXgffeOKjrx?r0^0Iji zt8Zfixbic{cQbC8wzYG~T_%zPigMev+eg`hcW)2af(0?LDPa@DtPMarpukHp?Ldt^ z8$Py455iVOpAFWQ1IQ}-50B?XDtC1Vs?QuNyNfm*>hvlN|)W?^W*y% zSi?t?@NuwdB)BT{-cdAU!99yXeF8333z+SVF&4~PKc>NOV9PXgk^mLx4D&t5=>+>C zK3(l(q#ez990g{%+8$~0OcQmp{;4Yx$24$KwcH~k#KTswz5X->6ZRd}%nM5!< z3>FT)4<1J#HCxlA41hq|rMDwM8?Fjjga-PoH3!yAl-2Z{Yosse9vQ`j9}spSWsD=H zF9JCU{goC9G5EGL)UcjN2?(a66h7ZbkR@rv>|ENpNwD_NX_Ugt(j&mZBG54tePcC> zV>KKOy-{zd2E!q;HQaHO42Ke(ON~Y&?)MKUgv6lTfIKTLNRa>vne*^8ZH;`8bkg*8 zD4Wb9$aWQFCV*O6VHb52kg%k^usSCh(231B)ZuU8cweb|igZDWzfx$472>FT#5A&M z84ys%@E_$V0LN(;?dx}=Tp0e!+ z1X4mtt5*pNU* z6ag|m4gh&JI=XC$78A&%`Mk9o21iu<5Li9Sv$3yPdjKx47z^So$e9Q*qEw~azW6v9 zKV#il zxI$oj0e?e}wu$RTV-nJU_IT<4=-9e->o$RsIq{Pp{geR>-w$OoQ`nu)9X2VGemUtz zW5D+_ASfA3<8}5SG8P17*%HqgMrOA@16(P)W*bJ5(B;A6SSp+4!WgypzyU^hCgQqt za8%rXY=Nd0c9)U~v&vXF>-LvY;>2?)g?oq|7uMjg~zP!kf|(hO>JiX5Ou=EvjG zDA#TbdsNW2xSC|!ld;Co3}R@f3H|KzN!gDhiA3*Hgga13lnKBPEoA7ZyhPbKF+m%k zlq`&zpp1k)&|UIiF%Cs!>}muKOcbG1~q zprrg~{w@HN)l??_Xj@n@Jdu(mH>diJ9(yvz0x#Q8C z6&@TM&@W*ClK{Bd3#0MYUWKEJCTKS@*$LEZKW=}1S z?FcNGh<#TYk+Va$fIypZ7Gm;(mB6<-SeuXF0ORh8r{p-u z^L~&<_myiOFfL(Y$0xcrICGNPIm}Az+t)n@co6(D14A?|TJU6?M~@zxDME3VMf`2p z8vmUGwBbGud#u-;m@L?e+_`YzJ^Jk1!!+V( z6$;z(xdoX^6{#(8;n+DzhcXX?Q%Eq#N^9W+|i+=Q|JvibAo-P6!TOhoQIR0Mp`p1QK9RFuBicJ{Qi- z2W6L`N>GmD64`*ppwFBbWKAHPmw{yfPn=V1L5GEsuog%n3qjbz4ph;QF^R(^7-jrE zM0iiSk;gzcNn3zHa=K9j8gr_2~Xp~2X;Mgu<(dXS!l;|8`iNQLk}1aTk{P2ii$ zCino2#{i$F^W;(x_%T36zVadJlA0ur2%-2SE$sl#PpCu4MFU&8qw=T|A})I8<^q#v-d&=Dy1kW_G?# zmM1=`0!z8H~}98d;$;{kqtnLCw^`( z%!>2p&WlE^#;u^Wu)?HLtu0t!EaAB_2nEQ%l@xd(iq_Cdz%vXoF(5XwR60s0tao9- z2v+mpzHmkWgj{eTlqW=vdr_qoDuN{QWYTy{`b2PJBubMy4DEPj&S1c06VP&s%nOry zjSaF;c;Hn!(*~G(!R(ee&L|=rU?C+BKnDk3R=-6XENu(wwDx_5Tc|m}rDj~FVciaG zGSw-e9p8n^F!&!b`r69(GbvfwQispwwS+ktxE2V|zAJAapyHV5{yR^iECZy($PoZC zE)PD>01fX$YR|2! z4ghA9#(dV23B#`1t50pgjJ596!T=}3@^xgMhv zS*e7aom^XAm#_}NIqdH48atlAvGL6O{G3@|TNSO=ER=!e$9L~}hn)@wV(A$PHDjm> zFE1{b{Z3aO>>rpe%>_UQ8n}r5k1R`zu8AL1G%a8VjSMs$vkmB+8`3GrxXoIPaE7n@ z{XVvVR7`*a0p|qCt$Mwo7v|?NIMQyvr|F#WQRuWK=rV3Kn(2je=RDeWytlWT93CDf zhrNLcJ&%cHAiS+E&y0G#A?6Yp(O^|^Y(hz3*4Laisnr5G97<$SI8Z0t{^w|AGSk?b zWKMD=9U+dl9dLwK%l|Ws0a=pXbHF4&UjqxvaFQYM9fMLEmy?YqU?R+APt-9%ej3U2 zq&D5t@I$7(&rBhwPHRUl%jz5lhU6(g!nD9HPXK4fm6ueZ>nAxOBO|8l%S<67JKxK3 zNhlAzI^x%)q4KMgc!~#JBt4k|Ajzj4y%HvNzDAbhfKT2Qy9|Z$7bb1bMLXz942Q9( z)v5})+khs1$V{RhO{+R@dv{m$dObNeH><#>uY?t>fS7y-1G+t$Z1+0{W~SNV60V>s$Z!~)Gc}Q80D%q}tF5WH1H_uDd*iMn+!O1U6R^B|whiOR8aCbUjkzOf zIuRGPZ?TFB5TXMJL$C}ufLh)KKn>5t+KHy3qsn>9Gl`Y64VnRk?^?S7feCJbDt3FKmI(O4EUb1l)? z-xFX=02IVbF14j20Mg|%D`NA>V;;A7542h!1_*8nJyfF6s?+t;VtZ?cb$I})B;7Px z1n}{~Ao0Ta^JZ&nTf$ZVX#qA_Va|<_0fCEi>t`kI9f1OK(Ak%0JqK6-u>|08c4kKM z^YQqR>Gvbk8w>zoBs+oAzxj4sz5dD#)9H5glg-C+I2f@29RWE>*BXP~wC9)2`L%Tr ziPhm@2hYCg9CQrL57>!8w(r@C&zgFu%=XT{*Y^ithA13IoJ8ndMj6+8@#Few3{u`rXXUHO=AS0Ognj#9x$pj0qHY zDEU&4IO_6V_{XMxrQSbMM&ov5N3|N42Al#c(&A$dL{!iwi6$%UeB(qV7Z1bDFB=|r6X6C&^%Hx z@y+{N%b?^l9{Gc;iirfVEC3c$ILYF}qo>^5tiW2I!fKZ2+`$70vKv-4&1Mr1E!g)A zC}>qm6I);QdR>JMg+`;14hB6vH#cKitvYAsJG27bKiEZCRzpjo-#avm?Y6F0>tND} zPPa$@J){-p4km8&{)sayi|ka~IXvWQwNKF)?Y8xL-Cz}a<;ruMvWH^mg9rBka12O> zv$HMnga7rv#sB%y`+|-^j3{v2`|PtZ5MZE%)>m4e%+iXm)oQX*DVHZGAXaFfsF!<= zR4HBgAZv$BQsG>NC!iKV9`%3h!*-E~vG#><#QmN$N;_~#l7G--&j5axZu5Bj= zcpygSdg|nn&YG;ul4W!V2@Q03-n}p}Y$LJlwJEoh|v`Vcpa!HQCiYsH`F5#Dy1nUgV>V4fA2M z#^P=%nqJ}rH82)It4f8k|??R>Am>bix>QZgMDD+nA5m;<^yh$RuBwq%+&P!%nXY;ff1ahkx%mu z{V-Ao2M2^{tDMPAENdC+*@mWI4GpX|gQhm}_3f zkMRoKwRvEsPRL>%2a3!T9_jFJ8=#b3B)^b)DrPw3l=NQyrl;a*6R<3EQWWpWL~A5> z-GGQ9t?DzaJZK*GgN21T)QIEZu zjpU<8Pk8xFKm~+6Lld&BHyXxfEFcMgs3~Bmh50skC(u^3HST6qT8|LXy~9oU@b-&fV+G`TAh0AY#fbzTQ*@L zq~Te^W8fgh*#qhLB0&ZS5M&*2$v;Xg^>Ks)AWWP#NMb>Z5LISXMXB+x8?^P=5J zqGxx7e|P*1J=UGH#8cr&wW&@gd?Zji!Gr$DEYOPuq&1xw2_jWm>CY2@M z;%#Whg;R2iw!OKvX|oy*ymDrRzAv=r#Qgj$mwh%jpKy6mI9?A(6ZHzrC7$j7IJ56N9+&)!mVW2Xd1%= z0_5{oE*X^X4hSgS|LlHdNQaD)97H2?VSQaLEzUzxSi+5ZYkLSrg1|}X^j%TaY5Ess!(=4Qg)Q)Fob+dd}Xu&CMDd4+7q!NG2Nu-A>Z_xC-zu5bX7wJ?xS9fsn4JdDgE0!Q8M z0E?|8MR|xm*Q&LE?^shMN$}c0hat39q;>?^jOfbXM2>hhD@|pjpsY|J#U5QzL#G9a z0SXxP=RcStjwTMm74#=OFB%-#Nu=z=A6d2O&$}dk6Znph6HOqNBKyV zl%C8nhr-_u&wi?oc4JKA#qyO;`~doVeM*H{07gDFKdzCdq(SxVqJ>v)Yuls!)=Eg;P<-u)_S_6R_p(zl z{hfu&=rw4j9Cj(N#fF0c+Bt1}_goi;&4_TxBGUyC8F;XwXi{eSBDNGET=$Ndq<|d& zIXVtAu#tJLjN5-z)>~!syBI2-|X7QMU7C z^7%$EXDY%A0hJ7~6d#Gu@XgW1~&3QzcV5HI{@sp%Aka|M+~|>3FVWmXjHu zkagX6%RO;q<4kQ%%JKcsIlPTh3<76uRA(){Bue=@al5Zuka{v;&Iht8Q1C?wacOCu zh45e^=@EEHbxc6iK1yMT4z`fZA)&j{qW60$Wk^OqS)5s3aO7r>fJ9FWVM0hC0VPL~ zSkSR_W|28AXio-6!B~bB0*(<9_hH8W0e~LHocoUxR3<8-J>PbnO;%hGuG9e4T#AG^ z9NNjHF*B_hIU2=sFdT_W#W!&@1Yuk*EiE!1W`1^-J8$4vJ%|RZ*c_+mY!YT^fj|lc z`+BV^I`quNI%RQ2aC&h22K|A2`1mn_{+`W~X_o4j%Qp>mvC;Aq4|T3Q=-JY)Sicm z8-cNh34xPyqo?Fs#DfNCOhK_aBxLI~(bhQLWY?#5y7 zn-SBNIYilYMrx%KLi#ykaDoZAI^ysAK+?>kM{e=yz=>CqNhmHrgJU=$8R;^d(rF@2 zQNs8<+FhsNi<}ln90xE=$)Z~xQxf_-B-Ya$>uI`(^2FCN0-$uFP-xKJjlq`J!5xbNiOY_=H8#?26s~2F2Dz^ zesrxC#Bhy;1`5j0KI`3k8X)D&nKL{eAtl<5=S(%MYMM}B#0v;sH(eJBJ7e zgiR{+){%@xk)&VL^2)M?+&zI8nrK@dAs3Am9GrXM*m3sks%f=a;=zN5G?}*1R!J+l zu0ciwwf<+&`7=9XhJ&H}?17@mah^E@FnNPaEhg#N**RJ{N&+(Q;aQ@|b|@B?7TBFQ z%Sza?h|Ll(w?SpAc+U}DwZIaK6;G{R+Bmx)a&5)=4xi#vVc(uJk4ATnHvu3Szr=QP zl*|`d0C#1XqgY>!fkJ+-+3}csH;pR?$sE|QToUx1=AMDTz3$H6p1b`$6)q!`on8LC za|bd8TN&7MD(WDj1P-uGMA;_L#@+`#?rcE@#mhck^kY-5{F5fm$$CzB{fIxiI6rT_ zkG8f%tsW3~m=y`d8aPOUDE!LHFSDcdt&i@oV|A0jEc8z5)r9R0UZ>Xq7;fLb&7|FG zwaMkfh(HbaDzGm=>GIaCo8qw3V||&Jf-A~5=gys{?Nr6ux%IK1P!c74^s_T<8jm%$ zP`UiQ2les~#CV;@)lg&r$fSs^MR3e(KnmDtvD#7DCf9@Qe zM@MWt+>ppTGSA5XoHxYc;*z}f!tH3r+%|Xb-~uNk=vl!qg*?DGNAS z6h=7VLtVvata7F#5fvDG2{Uvhn_+HsJj``WMn|&=MFrC|_p>}9^P#4Imoka{;{v!j zMd!{*rI6E-Yt0Fn9&rK?nsyx1fWWWPxN;I;D-%T3Q!-O!uFqNA9=ZG8xBY_r_n=VD z@(a9DS%LwM{pU^jTmCB)M}>6q-8w~GlOn>>1t5}_+{Hho8sHGy_eV9#X__zx@UA z{PWMt;b5Tl_V$ep?#$hn=wf)|wO7s6t5?P2C!3IOhX@oaTI0|b7Z=QPmoJ-3moCzT zsKtYakE{&3@(hx*%gamRg%_@hmtVRr&tEtv?%uu60ZhYQoX%`+c1B!z?h<`(i3Uyj z2vPtf2(oX!@v3<3jW2L!Ksk{%mM(XuZZ_p^zuVt!#|-ltlyBeX%-%fr9{WBu{*tUu z;&F;zjkjsLS5OXMQYgwazQ?co?(_INxCQ((6O`@e@i&iKP~G;j<7E>$-~K&259WV( z9N_%yxU=`TeP=&&3BkAL!Ta@WmyMsD6PFmA>7BGK%7GW~HSwHT9%n1?H_wub`8d?% z+Tb-mcg%t3kGDO!em;|HeQ)x4%Nz3D{(Rdh#RhzVeZM2Z^0wIUF%f_EXMZk6NhD?{ zIA6JPnKNiu<%8tuidSq}c;otY@!G4e(%7;ZI*|4UHwIl<;Et@VtcdsCdyoB-P&VA% z+2PNkoOnRN5j>XP`_?zvOc17xyYz*yg}?96dr=bl?XP`R+<5sV5z?`4ZEbQl6M=9R z7DRW@#q$@$m%j8x0y=AKJ+QmG!=MGk@3NkLrVT7CO>zb&p@zAR>D=hVG>_e_$es$Opykk6lN zZmB>8=J)>I-=}Bwih_;8pg+KZfv$TfH#fJqGWW%I-WIRF{yOWMpd4%nci z(7luI(0iVJ<|67LAg!BLqa_=y8BuH0*;5GT{`Q-1n&+=vflImRb^&A>Okf@kBD$_! z(QdcpSHApPa&={uuIWCP!75ewCSh@Ms34eo{n}MY^M(Z12jyP)4|-mp2Q-J!FXsC7 z>*jU3w~rn_hH$J{Svi}wW@a>P-*gTS^y{y@qMy5TNjDoay0f>3TDGo+bqL?51TZ1g zlrGJmA-JY=uQvqkB@O94UD`QHPC=pVcj)F<-}ZD^(PX5DxS018anch{%R=Op!?XE6 zbid~t8}g3yULl+Ai{mv)PLnAy;`3)x%80CT3I|1;P*N)6(v%6Ookl>eED>;A$?G&- zOw+bq{3-*F#rUtLbT8$zX;JQ8`X!VPQ9`Pfry)CgCAGHv!R2?B8T(}!lYAMbj7OqH zxg&8_0~?5m_!y z2hUu(=qvc5LFVCM_H&>s(EH2Xb_S}qFrR{BR@6f9C(8Ls6*3Pbo z8!ug>Ra09c4NM?JUO2lhx`!PZ$3uDL*^A<>H@_ej+Vk{UQ=F%jE;1-P6abJdc;&{+ z;^kLf<$Nr6sVEyLmC9D@RtqKLlw<&d#j}(c2VyC$`X>kF+!qIKp&Zcg#$aH)J!K`& z!NI`$5oA>s^f?eq=aw6~ZWo!Ui#h-lSchB{jysO{y&U)h?lM9^$KRlf!mX()w4ami zd|c2UZ*MGCXTb|^SJ;+j*1~XY&30e*n3#_Ppy0SV78Hf7>5>5}{_f73!4!iqH3m2Q zH}{@wzg`Ap!f*nPe9!*udt;CWY55G`;ZcHt;rGA)m*ULgf_U%U-x5o-vPZ|)(!!$H z+T7&(h2Vej{JQvu|L7mECJMF}2KJm$9zc0xetu5;-nYLcE?is}HCmAaj3V;_0xOH0 z(XoE@D_;?>y!tX{^3ZhzGHj1l{Qy7k)_IkH$ya{s%bWp0xd@-zr-0iZ^q8;;Qt3Co z{+_t_%y}kwBV+XGy?adJMJqhYZ3wb&eBpJ`UYHm39Pzfd2xvph5GBX?xq0#KyIU;CO_IlBs?uz{=dVW)#^2m>>KyUWi$gKKUU7usxO z_~Ff)2Cmm|ir(Y*?1{yN1@pUfUFrEoDOMA}lIZMDH?f^0*oaLz5%m@Gs^bZ5L6{Y3DYFa>1xi(W@9Cgyo7OZ)9`h1}CPe}R86FOjo zI9XI}nxnBNo)&sj$8a~MWfaU55TZ`Wt0~K(sAIs4JccK8+R{n>yj02liubC_Ia-#0 z8JTNlNeiUmvVDjWE{{A-YDncal0S+3pz}nzOQtDdGkXP;X2emmqWss$onX-fDLb~B z>kuj>K)v+ROZAzVN-#6Cw z#Mi(6P4Vg*Z?et^-_0~r3bWlOSvdsS9{EyE{t9JeSd|xUb3E9L@R~1us9eb?Q&;6P zlfIL;&r}ZdSUP^Z(Hy6P*JRRnpDoM-ra&YwzV6;LE+ZB9lN~RYSe!wfu>@S^-lz%V z2D}&T%2NPE)P4% z{ucrraxAgWIxTd~H#Q!LAOH9#+$r{773_QEyMCXm7l zVb_X{R_Tog8{#t>qigHyTvkDs6k60%_I$Esn$0Jh1UfE=YuB#244mc1ppy&)?~gyZ z%K+r+^H;fa@WapmlmH|>-h5-yhm0w-x`+yYCXf zS%5YQ^HP5C!Ay6}%*KS0!3+<$L*o%6-LGtro{A@&^ZXmTB(oUimUwD4FxVSK&>rI$wIP4MX+}Ye2 zefY_p5uM9`&LyF*6lO*Hdp&d%C4+uH+B`VW0Kkqz!rFU-r=5&>K1Zo%C>$$gvPjI& z?|z}I;}sUH{**u_PtiSd60JZUQ(id^r07!ugK5EDi|Iyy#i~FVkUNg}T6PR-3J^I> zM#zZM$?zAieNom!p5i_gDHdt2sxitX8bFXe% zZ#G-?R%@o-fGuF99uiupNNK8`HkDW>6$-{xLMD|;4I(G(VjTJ~;4rBNVI}$z-afuz zvs}#vG^{PD6NBtQB@9*I(>rN~r+q>UQt4Pr2(?k5RFxo9sEgYy2>pSx8{C7-b$Ji1 z0I88o-1H=irp2_rLF?voSFVefUVg)QyI2QZnbQvuBIBf_Q%A8Uoi>UKgk#cc))34d zEy*MR3sERB7q}b0?7t(xVl0a~{p}Pik~DIHYL%yf&=Ed~aoiU@0Zt~K3?&C}n21{P zxeV-xob>;s!|8-``P`Qw;a1)6|K;~6i1zpZOY8-(Dx^x&j=^4Kbb38f!J6wG7E&TD4^oD};DAagpXg7d|d_LL2G!y2-(QFIiq{$3a-pVc>K2ctrnbv%~GJ ztx<0@94ySuN3@_B&|EMyNj!+tbTEiUgWf@p-r0@%Q948l>!9CDhKGk~Z?|g>hr_r_ z7mNT6y?H=KJD@pevP!L4ppwnuen}RjtV<*BH1CxF6IHSzKS_38pRz2WP5?Uk6df(c ziL99ux`9kdX{e~MI;}iY)LALZ)`%0X*J((*<^+C>IR=28M$9f>4T;6XOwbcYbx%yL z5|XcQMB=FMswr?#@~T!vfXrAN&N?a%jnZkph z3pK7(JguuDgP@hx=BnsC;BMna*i2fj>Iio3jYdsXtF>UJ*&NUcE)Hw;iqLV&?E5I< zVn#@-EdYahy~?CnEJ9&GN&v-&w1V&X0e!(_Oj-ZV5mre$NrsUAP_=4BS1O^T$%Yo_ z70#s$`aS7|9y^vP*YE<8ZM9aBUO<6Gv9l^jd=e_N#=Qwy7c@KvDxg(g$bpF4bKR;R z+R>hG6IxzwEPA&8SY)!{7J#U6SB*cuUEUaK$|7)Md2RZVqJo%UkSsZ!X@%}1+&2=`>iro>JCkr;e60olfzF581^BD{61L+qn#>)4{F4F)qCi7~70|f_Tzwv8M#JK8VZd_t z@W=tc0#|2#p)GFQc$p1}Aufl8J$jzGv5OWoT#|`KiCCj+0iKSXg;;T!E>$YyG?vJ2 zrcR-l7bBjPzQ>}1<{C((=!N!z@GkjU>V&rIGszz76L|Fy01=DJ3v^6CgeInSQOd1_ zbR#1AELy?4)je_0t(lrt4>m3B(G){-*2q9;GOfok3>Y;HEw#7DphOSc96gu>R+A$% zdIiu>Ov9_fO5ZOmX4Mpqhdd^@PwRx47JQF044g)kJx+$cti&LX;d&H`9E@Wd$3A6uS afB^t&fL4PtRhc*d0000*Zf>n1F_%UhYgx7>q0v zC)0oFuR|t&gCIBWFeYXuwzFm#CZ@mMu*!G_2Hw_ERP>`LxDfqaNeXWMzKWqPw-uEX z5QVKo>};ua6%^D^v&ik8-WE`@fqNp^$$>0=;#hdVgDm*y8XIeg6Ow zL{$MH?}kuAK-82Jl$2G})z#q;Bti+Hh(IbTA?20SwUm)s2n6I`1U<7BKy=qKH$eZ( z*4dK|^k0Jt2?e#Y(LaRp zk2DUah4G^Vy7;+~Fa|o%GrWSA7g0+?Qw@zqt0C0Y^bM4h3{_F;st66Fp1P6&+R#AL z5czMcfxlajFUc?P-&o>*u}c3d_U}OOy?ticfE3^rOd_HK{Cy$+3|PzSf9;E^;s2`d zUs&S*+80&y|B6*S>x|;xul4_W&HrvXi=Dr3{}Z%l5B~{!lHXaZ2b=}L_$JJNwh^8MMS!MxiogX@K6JTOyIYYBDoq_)$aVCBU z-kDj6525RF+bl9ouOxkrMewYDXLM%cUjsU`^tT~CmphQC^wO3=#GLM@H=ps&f2}eB z&NQ*`v+|#5J3hKu`Mq_2^g~MBNJIK4+z9?042&@uou9=^8edE9oM zreT;OgUJH8q>Y)ASe!?R@g%qxQv!Y%Dj;i=2Gl*zZw#_d_7voOI%};`DKF{9!jxw_ zgo$-x@pXv-(EJ)w`^$oRNA}Y4fP&ak&6XoGYKJj1XrkF-$2+#p<_tc?B=EIyoRp&j6iGQEsoYq8mtV z!?kcbYrQSQD~9uru6KI$)J#tJeSbx5v)t;sZfYgdRQ=1N*6aSclMhQ*#6;_r(vHB?gK}ml@XR9u zp6E=j3_uJQO#*ED$y%kvLs^W6 z+*J3hx6&TY_0<8oyFVFRi?u9x%H(5DbLaF)F!L$XMnE=9?Pdp7MlFX|Q&?SO+^|=MO1Of3l zxDqp>LMrP`8K46I5k~?tjVQWfc$G>|Paqm-ASkQPrlb~wf}|sXD3ET3tO?&`6cs=R zaFRH9p(;XBmNb*J*;q3U%d@K`&4@!6HW{05?o6eb#OgVFqG=6~Vc`4=T4gB*hig0d zodGXUALaENvmLY&lkHyN!1x(m= zH*;>nZ4i3&tJcS?dWOxCu6x2S13kif+-x#-%@j;djNAG-E?6$QYEIp-PH|&wOkeY9Yif5KSgDH*DED@756PhIz|2N0tkp?sq z*+ubau%Pak6cB+(2bAf9X-XB@(nFVBVzdz0GX^QWTqMQU22Y6jO&^HV)F(+=KNm{n zQ)X^(bf|HS>^CoyOLGpW`<#YE)l0QPW5XO0?3d|W+{jiw>-_PwCHx7;vQw9VhT#M2}+&7d4s zLg&LkjXe3LU8tqhC~5+)K@5J_Fvc==H1-*ldl(3U0?|h9C@hdDLgR`CWC6jkh0TJp zn6!BwWCrnpO3P-2C$~|pgpm}6gF6GlDlHdlJD-_{wZl`5&Qdm(6>B?`4U8O?1LLXu zY58mu_-LdaT3>h6GYu!A4{u^O5psc6medO(7uzn;#)>Mup!&Rog`UQ z9RCd2xE5l*Ix?TvR{u%C(UrT}R7d`$+VNq@5_vyA5%jS-f`RL@HdxGVUyH6;q;(H? zgT71|%R>U<;ha^CxZ-tx#c8G8??2K#?n|X^;(BfvkX?O@S#gE}5*Hd?S4M__vwExC26jz}uba<0~Vv%+=JTnqZbv#yub z+Nn!Agn2qhZ%E0 z&ZdQ27e1593o@+ZsQI+M3VE23mkU30a%lx8$%q7ZF$UvlCR8EB=$Q==O%I8U#!&fF zxXK2PYxcjdAv=R5W626$p!l}R?)f$@1<|zjv}|mnZ3lLB%rUqU+N0SZpI}7B*QF3K zqH&&C^7ZruxCmL~oD9gEJ&Tz$wf9D8hRyYdRYAY6CpVx)`-OI%NaTNBD~PDAn`6+t zu2Sl5;c^f1+Rfx#$3c6z&$17yMbco+wnz7dj?sx`~rx;1f(E}OQA z0S@w27(vb{IaDGCxuNCuxS=mzZDIEM$QrIYA(t|X9~OGYG|>#= zKO1Ub4B**`Lu@Pt0!Gv+t5nDF?cBXKS@C{N=kXGHq;n0am_a>##G9}B*u~j)J_CY| zZ;9522>|qYS={si9Mn>&(lk2^ehkfOFbty#xPjSPO5UVo^A_ogw~h~sXNYG?=&_A+ z@JEjGS46w$!}7RLfU_b;fN=?6@IV^I+z3B*<}?fh#028u)B}{l%Gt^wWsq_( zR04I*d1Wq$LX0WOb*2IGAbEgjqgtuVc3~+aBp$HhWYwRU7J-on>SGxZDHP`a0>`2_SPB15mVqw?F4J6_5xIOhpnc92&8k!kn9>M$z1cf$^|B7>G#_l5Ja+FFt(` zK67oT!{kd)WIWB1pN|iM93NuSEwiMbid@7;Cd1~ON6JN}-=Wn2KD#Pvv9PEV2+dQ#0G(NpZ~L!3Al7^~Rw@=@ zIgAoC2L7`K`+FURv`n+)gVA(pDjayKB^AIcDS_p$6g*q6vP5mkwdLD*71ac#5$jPV zyIF`K?dTU;)=;7+6kYQCxkI|51@B1C#eckRdFFXb4l4}lJho0haY(DgH61Uf&>EF! zp%7Z~N;ch9)7BL=X>|!FcV0VC`@KY0Dsp*w()?VmZH?<-GhJ0E*XXTxYMY~9bL?2+ zI6|-}PWAZ1AV=UL_f(pwrELat?AgY5TLzxVpK~=GQ$m+U3+^Udw|UEgJ7X+HQUD5q zow1|D5cuQcs9GFHAmx0+yKrvWf`@@2U^WbBgHH}S*}QoD`y_(7+{P` zpEI7s#mhAx#_N+%}n*d2@2SVy^hB@Rx-~F@t3!B%TSwB!@Hc zN*s5tRY+{M7W9@C{R4aeS{kN$l$SLI4w8UX4iy*8q(`0gB%|!?Rt)tx7UFg3G^R)9 zW&=&nT&r?p&?p*6Kp+|O4gno9UvsIaIV(bd?}?`F22Dk;KCP4%anW~R%Hyg)wmU|Edo8i zu0{}j$|i7DxA1xfTsWc3Xgd;Ym2GOKtwCQ5ZdY1`=S<*a;pLJ;MXMEK5;gzcBFzfW-;T##tkJrcNS3d!KPY(64gS;=W) zL>%Vg#Od>*lgTPlZ#WWS7lK?ofv*tBhy+AIS~E4748-Zq#v)5&U1%;GL_`J60C^TS z(6cEBX@HFMG6qC(Is{AGwzG8}-ig|?0ahyaMFBU{DF`h_!nuP2qbD1vXz_8_xr~{Vqvp$$GgUE}MVi$;i!UjQkDmh|4Ln=$gR<}ho9x%a?>7Ng zeubcIWFg)0hPtjyBSM4bEGRCtesOeFxsDj~bh_)@4LyjU?jX9$!ps(|JCV;S#U)9M z;f!_`iI0YANT#jQfwG;jrv{M*v$kMky_($xAo7x@Fli+@{Qi@;#oePnF1`u=>2!q_ z_#40zO^u~Nq@q&HV(e0Yvxs<4v`7Y6&@je>2=vU+N1p?c*NT=Tz1%PTSeq%Q#UJ<0 zpM2Z)I=HN#e-Nm>*u7j)xSoA?gpGI>Vv$HDue16cYni4OIZD$7fZSF!rxPmyp7^11 zjx>;woB?V+it2_|6*r3<1GBhb>rf;q%>n)KHVrO zCK$%E7Ujv#*E+|;ZrQ-kG{#=3COM0W9AT66%ilU%DB>$rR*y1221i^CIr?L4C;ZPx zmz&=;<>|-r-7wzo-@a&<`{y+JLnsW# zprU}#Cbpr$QV`h8*|S;M<3=H+KcQ%UJqMQmar*jAu?8xbZ=5eNl4?7_!Y_b9fGkV{ zyh}5eQxljrq(S?S4^Wu1Q&;8uMtffIU@+;+;+<$FyY!-wj(+z%qJf8t?Y{VuMX3wj z7Ibz<&LLoB_&h+&4SO-%7&75zO*ybgEG+-$T(E2s@ZVvI+6iO_ZdAT4o zSi1#3Hj&El)L9y$Dij^fYA%u)%N^ZnRZ-THCSW9hPs_&}y2VqLo=On>?ivnPmSGJm zFZ;+iFTw8-``M>f5o;dHqq~(yfBd{`I(g$@2XPK=ZI}*d7brTo(~^EXm+QOp zN@_!KrsGwiH)F!JCJCAir?rEf8UnN2o_LW z8GWpwFz7dOL->3C#0J(~)~9|>qy zxJl_6@qo#SG9tfQ8tYpxDVh5UlrClJCY$r0Ez{GSL+TDa_}+p&oAW?qJ-$I$JPT7T zngTrQm2#rf&ovYTz8Q)n_t+WiXc+l$Dqz$h_qYGBbe84idF3%pqv* z_O~V3V66S7j(_R~_?7yv{3(~TZW&KSgCN|phMY_9DgzRgRx88T@mze!SvD>vo(iNw z)f!Gf`B@yyTzZj>yL(NVTH=dtnXqJlmx2?6-ZjFDOmVnsva!;W(Ek@>F_ zig@(X>+H<-3;5Qo+6QXX7fqyRsr#b7nG-fzNWEnd^7ZfZ_qKQ_2m`+t>{fivk_vo*&;Q@%K5+ZTN)m_qxs;4Y#Ro-%A7 zN@m4H2@#b5Dj4WTE9xe)LMmIO#HGPeLB8*glfAZ-nI_bq*6&%zmTxNb^}pOuYmL@lkn%89~PF=O0|LokSZ;fmztIKkxcZaq*EOM_nR401Hy8vuw zT}Lw0VRWfT3pU%(D7vaDK|qj6`k7_BmF#nTiX7ij^HPKNc_DG#M!j4^gTa(EZU=X$}4Q1;Q2g@f1a7cNXpDt&xoWa8PGuA8Aybq zT%1eBD(eE<{Te0hYRE5yaEq_fC9JpFJ^BcFl6&2+7#53kts)V_?@miaxxW5ZYv0#D ztlugPZON%FMD=S(yLhojdUyL)7>j_nT7=&uxT?HdB$$jzE!XZZ*NuD2HqRwVcia@= ze8-8LPK9&QOlpAh?GnshuXlWof9PCJ{qwqS#6yYh&F;X1vZ|ns-ngZud-cSXjZ8U| z4-fk|e?T&{HwN#diE*`zWDv|QnGw@Q((}!SCEbj8McuCMkU#Ml2)rSx7}gu=!7VxW z>#ecT4qlR;R`rtR4VLk9ByEf#X9*C(_UycS%>lPth1*D@L*vZNnMCX8_JC5FVK6u9 zV`_KXtw*YIl2RAPY?g}{G^jF{G|HTF;e$nqRs!2X=I~kRRw|(jz0pXNkrIb=m z+2U#(m{QyCZMf;(6mV?sCm+x)*Dzz`(Y!wVz~sbdxM}%V%rX4?9F2#bB_^pvl~=V* z9{uF({tynFWY~|?jGru7Z^!a7KhNTlN}v^%gPVb9mf0aGebn=k$oJ8UlIdj8q8Em+@g7(cLC-_4(U0Qw-WfX_DE@q=Fbi6 zMTFBGR^&2=4B)a2PUH`_Oa%tDzO%d_B74H$H;H-8>AkS0*c5{TNq0yW9HpUSMzS)j zY-V!IHTqzRBqyn)0Xg7HAfAw`bwpHy&GxA|nRZ_$t=U!Mh1%g?e6TZ3pAQ z2?_C82!%Tf;CwoSX|>g*n&Ed8l6PaTwN*`i-ND+8mF-~M>~uSJQv&5yvpj2u?NfJ~ z%k5gh`sFeYjOmf<@Y8^xqy4%rO3+Jq(MKl>$F(r<)v(U-M_s8#4s_RK9%wV-GXa!U zw%ky+M)o!}AB5Xk_L?g}FN0!-Xkc^FrTr&YQN|n>^fO-Wq!wSiS~PLj6QsQCZ+yL2 zb!j3_iP0NfK2t?)JoI)N2%b9rl99pq64uk0VU=Q$ltpd+uz4ct&70NeEDbDxRWejDGhwTh(3MPqd!h93hSUU^1zDt_QH7>} z0Tm3_ZK8Fl`(Hv97aA|gjsXD6t~(o8MuASa#(Yj8i+7=H`8_i(XF?DpnP!GfW)5gu zbm?W~0xRULs~OarS%!CiKAgdl_bmO>ibPH2$j>}yF0Z|`TZF%rvlqc560OH4pCebJ zt5B^I$OIxwGD{wGvP<^PNsvH?ig&+2o>Xg(g^4TUkq>=*t6YA_VJW4otISs%I&5#9 z=qmZuD%9?s`23H8!#g8$e!j;7`-iq5;%kGVwco=p(eHSFd>3%xmQqlvZFF2#=?YjZ z`?>40g%-P_%&BZkUS&9yNDgRTjKXPKUzEFIQuSlcDE`&Y6YKN$3m=CHf7R%_cP%FC zL6v+G4|cWs5os|Aeff#^3-=|R>5ms)y`Nd>0AKwKPgb-z#x_1;eY|7Bwu`v~K4=q@ z*Ta;A={UN)jS90xqIlM^s57^Kn@MT3PYn zDQyB4Fr8W8q4UBi{0gc+qF-feCU0U#(BbR#Ym<9lk0cv@_a8B2yRECNva=M(oCQNh z5#Th#ARUCI$u3Kq&}b67kd(O|9%D46J&=~~<8aX|1U2Tk73^&-Mn>ONewnk9q+1#8 z=}l?aD>uD#XYSFpo_dAJX&%U2OC6(V&i!tB#f)*8O{4qju!V~^w0;kl^JdoH_f<;4 zR!40w<9MB8135nH2yb-+HK=A-cidETgXgvu(vv`!jU}n2uCnjhNl6xlFu$xF)f)GX z(a%n6V{Q(jYoEUN_k4Z({^O&C z(6`808sAA@-V9<`#eH5BOATU1w(mW6`n7wfS8HoQbUnSo+93DKyE`wA?)}9iAM<3l z?@37LiGlJwA441}fi)+wvIE)qBn4XYr5|uf*K)!*iCN6T%)&5Lu#Tx(lX4>zv-?Se zhkUxbeRSeo7P(Ep->KKgTx?F@8Ry}f=d2WpG9UG=M`ZKK`xYoK=YPc%`CZU|bazo% z#2|PXZZ;pwQZ}ll!>iWMLw2-abMajg`_X12=}!kH;Y@0Vt@k}SFtQ{gNp@s51`8r{ zm=9F=D^|iYybmnG006H0_0R4m7@P zgF8DcuCC$2A7r^#Y)F_bYBZ@HARR4Z7dpLq$_l;(v}>Q@9E+c@K@Kv2AN1uj?Rw=^ zJ66>3;2TmMa-|fptJ+|8^f@3r)hz5(>v3D%W3kKEFPQUMc~lzL zt2QROdM?VSwMzzX_x#WiwZGe^)4Nr*A;UO$=)rh#!@+0rv&PS9sh1zRu9p{A=HwN9 z@yHi`e7ipEYrvhKa@mI_U)xRH_u7(HKBqs*3E#=~_kOFz(O>oP`tGSLrd%WvnTJ8y3(_oxUgc3$)J`;zv1`hpQXi7nPX=!M^X z(+Af8W~AuEC$-OfKGsr8$qek{KD<}GKoODFY8h#4fH24ujxA~Cv%$`gi^Y~o)g9{* z)16BTn{{8RORMVW^&gEXW_}^wZ8|Y_p53j8)&jLe3qzkRJq&$4XRG0&d+XxFuiC)} zFRHalCQdBZCNe*~W1yis^Z&gWpxWs}nNNdH#$T59o&@=dM&&_5a>?FZvKA?;G< zJ?e%DITN}k_p~p18kE}?iQfMxlq1vsrh#eVWsoeRZ`6n|d?>@3Xggn;Vv*sWyTMM|xG`fdMe(0`{ZI$ls#B17(Ev%4NK(ml zpUu#LaE!XfxO?NhwT|7YifrLKyMFGg`ze;bD!KG3VPV1MA0Mb!ms4W$S;Yb>n57o> zJ$&+ZwGOxUCb!cJr{U=knn8>RmnUG5-G~LqI&({(${$LopVUy0Q{wdcR#$*V_X zim!XZ$GL~rYD!-B-oY=axTq=TpB$@8F5%x)+gvZ-7+qS{xhyZIXG}sjs;bygDh^Dd zo3N7tEmIGTmwG=t78e|4tMniVbid4%)S1DLomycE*Sn4*PCp%g`|;uzQ+o4`A9aN` zE@4t{^1wdefHBS(-#dIefXl0Uv5|wbO?eG)y!NAS<8EGS+ZDx5$B&rpt2*5)gL@Xm zeb}C0+xo1%K)cWV_o+NrZsZ>bNBsCIb?7@bxq7@i(yP;?$=G{H)L82&Ql56Z``|kM zHTcrqOt&&EHVdBYB=*{7-bS$0ox@LlGeNu{Efxe&K?hM}GK^A}u zyytZiYwE?0%5dMmZW`9`ETz~UXpOHIs9A}K2v?zG&%QyjvnH@%qPY2${om0|7j@&{*UgtAj_3sWf}JC^zt@^a*u1}dD2hFQaTIR)>k5GaVx3b^48z&UCHV>^;3(D z;KW~UO;c`6}5$UQ5^i-ZL}aI3ZG3-h&>y@)-nK3{@oJE7jGIBch0pg_HFs&RYD`mu*p;^D$B zp!3gr>750X;3H(s`^{GI0H>}cP`zg`+MVR|=$N|bzAiU< z-1Dc~#D|8ST&0zx$3i{N6z#XZQ95$vUwRjn+Mi#v*<9#2G^wrkH+i$CKs>B6hBFF8 zs>&M@pY47Py+2W{Ahi;yhd%p(`$dA*tOH;tRpp)Y-9%HyWi%(wy zY};R`8CanDRTJTYFjP=9HpYB>G8e$^41K2TnQhmoH6Ja_>H2sG)tZhLgbBkkh2uCU zWEJ!<5Te!s=wpBvw}*5L{U1vj=>=TmlfH}5()8Z9%Zo(;>BGxpvESu$>N-th4cZX5xV zm7?`}kn(5VHdzrtYF92i@_X=5==(Klu%r9uVk)`u1wCB!Jz*_a5aam-Fwsh%xnX#@ zJmQo4``Z#_nja@BW1I}ij?3sxYSrrDw&A|hrCS7#wF3Q_(zMF-wap-f`$KhpU%ppFL0ACHz}icf6Vwt7JPjVt3p#phE8My^ z@E6m=2T?`#hF9-~d5!sA+FtV8$yaGb7eyQ>FO#lF??1_ClPoVjpK~kL>a}RF2YniO zkiA&Ri;se@Iqs6%_bJCxKYBjo$#mAx5hcm7PZOAzQW7O21@z1jV=#I)-J+aJfD=+` zCgUVpPG^)JkIxlXr$b_bYw1god=A$2&gM}UU1ii}7iybzi?;mdpHmRG>)IE8){N;CS>qjQt zZ9Tp;gE1+67xA4>FC5?<)59o2{=-3%3JkgbDb9UsYd1CeQ<2mUR zZ@~z^l9H46n=8fHn@`|c1Rsx{*N@+aT>bTzOPcW;2=8@E>w2w#y)i`#Ni;gTj{TjD zLJ0byZ6QXSycXvw%dM__!kPi6l8 z>_{wH(DAp$Z)VyBJuw+pJ>O3YUzaB|T`{G9J1SC5e)XeQbD&}2TXBXMILtexu0cz# z?C`W}do6cyQ%O|5Aau^%X6Y^~N28$tNzmUYqZPC2-%VQ7XP^z{Pvc<}Y++M19{7s2H<&h+kpMnDTgvR|j_$8lxY>uhs| zSL5ieCFLPn)usOR?+-D1p93@1?{k72INbz+`fB?2nsQI4l-JY;og3u3FPCXgAIP+} zcDz<_DmHc0erGQ~u`s>YR{rQwcw51%&;DMF$+7Tv1M9wF#x^$-I{mvI5gIZ=)Q}s| zo1H)9Qr0FJ*^Kp`2Q$1&A9K_Kk8p)+wYu{5P%X2EQing`=(zTN$?yPNgZ^-wplhsz zUD=9U79^`heniQqEMKFRq~)Qiwg6v9>>v@H1x8WnB6;<3UUe2=lM|~41sHUZ#b|vO zI@O8xn%BKIVmm3|3FP?eBBRoh|8-aS)Z*Am;o4Mr(d_1_^8B-5!`{a~1$@44M>(wq z6Wj^bgu<$Jm82^-cv4a_FcpobuPVRGd*}C3x-qp1%aa2kjMP^JmpIlO1*LZw?%|KD zQ?#c{?M~Zv4+4Dl{T~R2_dU9iFm41cw_er4%%#K3!p#vq6O zyWhw2))U#%N$Aeyum^V2c6n;T>_@6!i7gVT+igQ#^Y7a35*|1l)=R!Tm|-}J^*@nW zy)$=GeC1`x+fa+tf)g`ShlpQqWL({L3g`G;@VcnINzh%#YWLIT21P4yV|nIv z|AYGR#Lwd*nPEFKTPMXHx30^*Z0}Y->Y+BP-BYkSnI+qF#Y}XS?@&%7{-9`Szh@)} zOcB3o_7^+WZwCfknrOOkR(_UWKO{Uf!=~OXS;@}ZFtzutPM3oXkQyJ{nDLu2t-d@d z$k5m~UD9e@I;FgN<27(v>9jW%@B!}n>X?KWGxo031h<#gPN>@8l$guy%P?#?4MV5C z)8rq^5(Gk(N@fjXhbYcn%kMeLm7YzEc8)IbVlgaeeD3F{CEbTvbT zk_&S!Q1+MWDsG4Xw<(U(^`{ZaI*o?>!66X`D=T^7USm(z!lvBUXR=O3S_)?T zxAs-NUOCv!$UU;{_EUXw;YQ}07ygNX<^JlS^YYW=Wk&_yFPHU~y=V5s9=45UDI(Ov zUWK*p*Hwk>&a{aH^$O=w7PTVIr(U&Le&c<428{P^7=9vLpVEBDhJ1J9;2NPldmoJJ`^zG@c?vmI=aEab`2Bs+?x7UNU@0U;m>!j8Y?K z_jKfxSeA?8H!CwENU?k&w8*e0*y-DkJwQ>G?EGgI=E@5gV<4s9K3Gg?_J-a5stI}t zJKFv;q{$v$`{_eN%~rod!`03^@Qsb5PTlirMz6%iuh^$&i2G_${OMG z>afT(q;=Zx>Js^E*AFhmAp38DX0@7|THCdc&SO_V&v$G1JVCp2g@F!Zz|wV|&7aC)h4;9XUrPC6rp;s^)Iol;T?4uDUlIL@5aWsIt89LF2c^b&|S$aa@~C z@yY76)2|($e`-?hZDbwfxW)B8sCyr={`;pX(Le90+DsYWyYF(>u9-Z++_a!kbMhE| z-1M4SJ6CYu?~hy4-y-Nj9kvIGGhJ76zY(V!c!(!qfi}fOKHYT+IW{q`XKuXNt6p_P z<;6SL%oGZjt5Iw3_Nn>gM7<;v)m+eV8Z{0sqGl%Wj;{FAomxZJlfh%Mwr5K&6Xi=~s80?E{JLi@@<9PXoTVdA6LBHdB z^~w!)N4I8d-gWQi!)N+7U-UG-I?mKm0f!UX0$anKbTqI_WOWf{*vBE!!XC z-_>BCI#K@mV+S8EX^Qzdb*mfa?R!6G^fcZh?=H_SYo7$(F*jmQCKf3=h&cMSA$nrPO^ne!T19XsYo| z-B|1OBU442sgZ2+K)*-o^)q3g0ufp*fmU=6o4omD&yJ?rtUHWHdm29r{S&5_AC>IY z)q^BkWJItD&YAXnLbYY|nzX3qa&c+092d797dy``a-;=*k{=4-R7~`rdA#o01s?2G zh}UeWnn!aA3}Uz$I(VN1S>X)s2D^n0dpo$Tm)Bfy@Fc&tN2GjRNrQDABswyh!9*(S zSE{VmyLdjlbB@Qc<89{}$3^2CSF@b@)=RWQ7w_|gIqF2*TX)!fF1;A^I9#FGYISDW z!T83_w&`VedZAyXs({{&gdB9RM$op96uoAR8<_JtYr=dx!yeOjHb1xE9)!LK z`e1YN`!~wcv{OdChaBOKzTN7?!V=+m)%H^0ELdr;=sJ@^_rYH9+nr;5Hxpn=QM+e#i zX1hQB91c@<(RZAlNq)bhvwp7fw}VIK^gMKLtLM)0+QGZi>;4a(@Ah^S7hb;D`{{e= zsr=YX>+;fc-}}JFdsCG@zumOh3BHxnf}=d3oF{aZ&mHXiHn*^|b@-{1v^UZ|-!p{^ zRChmLOu;?6r!}qFTrjMqp5*-6jBY1yH+&0oMNCY^G~$)daq6?e`qt6y^Z7Sad@E}5 z6;i|Z>%82f)0bRT*zMUC6&4DYR&w?3dVm%rBC5+NZ$jEVwl<>tE#xTj%Vo<-y=%9_ z!2KbG>n+BD&gL@S9bT{)o=QF6fYK>*M>3Z*5SA{jtZJoVVpzlf;JPKK5EpIW; zrz(7)dg6}@H&UPQzK;k|XwP1m833t_+?9_wCn3vIAZPEc1HS82J>*1r?|r4?-)L+aVd{#`=?3D)(zXKXu z$#@t#fcdj8d8pIhB2BhiD&2ownIZ?Vr4vD!Au; zwNHtDa@(q!d$H=gqe@j9%PnE$Wz+Zbl&8-|NlRX|;$XJ0^6a1>tv_G2SlDs@%glp<{`8$^)h*V2KghkRdGBnN zD!SVOsQ35|l+_JBKH?7t{r+vzkE7lrZy_+sl^L)5fxR);lKZ$YHLuv}0AC>EMegOQ z$038PEH8nnNxXQ50ikgV+a^EawT$nmaTjS4VjIBAneT9P41nxRRf~5&>>Qu|*eLk& z=Zz=4MOiBomVWer#l(UybuB(KeMdq5jt&u*x7$Bc7@xlthW@;At#*d7e>3y&pk*ua z{e?%c+0$vSM$Pe{+|i)yXTipx|HIOEfF=EX|GRRO=E|Km9HqE&7HPQ$s5t<)=2lQE zXX3}ooVh9$7io@gfZ|@bN>fu@I52l+DmbzftZ4n{`~N==T;A~9_vL-gJ@=f~J?GwY z{c|L;QWwTIFYBhgTDn*h`0A-Ld9X~PP_O_JH~~$#rgAD9j5s-TRkckMsFw%x_Bns0 zIyre4R=uV+4&S`rJ1{+xwRHj~Q|&mao5={Q&%>6Zc7j|a)PfJSHq+sMxO1}`$GMh+!Fl>y9T#jUHt(`u;G zaef}K4tj2k{RYWypl*9^FiWq+&i&4Hz@u@a(dpgrn>M=Pj5%{@oq!Fh#aNKU>!e7O z!(~}{xil4#5N81gMf=;8Rzeo(R*ivgPN1ws9$T7avm~>II05WhF1D75&ZNCvZXIp2 zyR`)iJJRehsrP;cD1i0EbLyozm)Rf{lF^sSVK9KE5{Yp8`5(-PY8b6PkQ4sCpGkOg?q~eTdx&i7`|@X^_J9Y0^0+wy9HxtQ5yl# znbWlIw1xQC7)JX&F(3{0qx#Owr26-@R}c05k7nB%>YZ`$I%IZnfiQ&+Yk z>GQ#k(P(YEMxUpiUO#tJDjNIZ^txiX+CK)gx4Rq_dz2(Z1fz&^Q0ww;eiuX?&bqKN zGd&4ccI`P(^SM>jEorF^J<3yaPXTk^FeRHoH@6x})r+lNnaUWs@IA%Dvg_Y|1cV>B z4q5xmeq49jC@+k-hR8!mD9?G}ukFq|X-1cH??yLmS1B@_$G55~a)7T&fmeCKGNYqE zdGOA&ve$z^co%qH%d~!WqK{qDY!!0zb(9zA<#mMtw@Oq#i$hr;sUNF5RypQtbGw3k(Km8MaMVnxJl)iG%#{{#BrZ_w8dlTWkStWoY z8bi9ov1XXG8ftE=ANm9#56o`-NZlMCo@`3nnDKw`qQ&p(fWfebE~)Cpz3EL-)%ERm z<4H6%oKd0={FDD0`DJ${C1AA+oc5e7Dr*C zQ1C*-UNE6kd-eN#-SlBJkhbtWsETl3sU*3V<(8qNL{(*X3mLhQDccxu(i~Z05{eNY zD9+5%VT5J324x~)7`QTyjpv@rV57_{k+~eRZ&&H7KR@LS&x;$9Wfhyf%*oC>0ir!> zwTpC3v`YodL2=kHZSTQDM_{JJ_n#IuW?MByS`F2W7!hZyykz|KagD``OPcz@;%C~k zV(RFdnUw*k|8OP{WksWvJQoOj#1bbTB}~kd4aE)zTmql&PQp0FN>A|nEFJBa*RH-) zE9-hm>e{x3LTw(`I`Any2g|*3u+zK%bQb*+M?a2<`tkes(vPl2GF1dOQo$K4r844n zL#<}(`0(&fpYAOshi1(TR74S; zm-pi1&NR9u9zcRkx1>Yhc|5jnrcMOPf+1*AY(-kFi$aBO(LfQ_sincP)PkNZnSD|| z6r0oz7516%$TVm>YmYB`tbcbl1I704;>FGkBd6*{->c5NLe`ZSTsc+SfROrJ86(!c z4RmQ*h#eGlnSckV3cZ`KG`r_(^l`vBY}2_&=#vIoRNLHi-1%NyZd-E%H0{VWCm(+3 z`ZA?in-Bf6@{KdvF9fF1qkPheuJ1C}qW^uhJ-`ocEK%oT-+7;nY)byEAGW=)(EMKq zk#d==H?KPz)_J^MW&a|wf6-!ldfwTuM?+r+wvEdptZ9GjKs3HzkLc;s@I6D@rv5x@ z!*qbfopA@;CObRxC8hgcK2tq6^|%?flD*)K96 zV%HJ2y86I0PT7qyTdUa;m`%0MLVx9^Og!kYSio*gxZ2y(s4U`OTS8FVSt&ygLZq{t zvC>$pZL1gilO*eE-co#v;HRTXqRe;KQt(Uvrdj_)R{yiw~;8o$8ITMgg9y8R&RA=Pw(3|)AU9MAjIzd1OqqD8J{(AxW&fJKy1 zR)a%RbM~9sMu*z>lu6y&+UPT{6u{I?Dls2=HcpSB>+sYpsxisM$eT|tt)B;`Z$m<1 zzt{V*7vkL|yX5m^yE^)C2~{&$OFN{cMAwq5-IIo+Tld20myf<}^PvJ-bvRks7JW_8 zn-{ht3v0ut=O(*I>#<+=_lce4Pjr2~J+QETHrwM$C#d#9nrNC4oN!PDG`u?r-47@H ziYt~zA=dZFE%QKZD;)3t#l!z||E1g!ig4A-gzL*aUni8Uzha9)AB*;}gVzW=`A5%!o_Kvd$37dqLVphr^a+-g)(Y1^tjfu{ z_AO2~m2`tvIn%tBwd7r(VyD|wZIwx$N-0Mb+{z^=n?53-p4%u9@2mI-xi zt(MNKqH1q7!4S0qO@l>cPO5q1kwJ!I+TbN0k*k;4>_1mOc`KtK-)9K+bb- zFD$eBKw)}{BECs^At+~?M&)?PJSVq`BwVJDnpTt3yU#qX%IWeGh-l#JfaoHkkjD0W z{?p)A=UeBjAwACY8Ud1nypd`pR9i0Nz?F3S%dtuu%qh5{dBOEU!!gu{=>I2b^##!7 zUeNwGSyD{JL&`06)@-tlq)t}cvuH8Jho1Bj3D{f@%Ug0Nw`X?BwbR7o@PqvN^!DKekAfH^+OUD#=?aa~Ai;7AwfeUm zXDT~hOoDTqjwE`_R7)O+xHd-|&7+~W#PEy3Puw_Mm3Yz-egi@FcLk(wkgg&Y3&}uw zXYYN=g<9CE_jt!=>YE=u@POwYuePbYgaYJeZZGHB)1gVTt6DkImZ!Llu<>@13RI1%)l72RQrpExUHwN#IQu#GVahGI2rLm(VJB?ShIIvKwuj1e4&l_KW4tG4$0N4t z=6tY@ciSxkEzW8iy}A5h7P(l`)L=LEZMdSINbmmrd-qa$MQngmaBul!xE6MGGdZgj zO036t$1ImHLlhFXnsLrwQ{Fq){@|qVl>q88n_X%d+qpvxNj07%E#}ubHaOwwb36zHwgc&(DK7s|LE5_^GNb zqNM@{psjfT-djk0=!5s^F{}ENnhKYRrul=*ST9XUNec^k-S2}PnOPM%j@Em=KM;n zg-@`wzCgJ1?&slBUb;5QpN5xDnEjyEiy$|qMkdt&hqkIn(HtLZf&Qu8qIOVba5JlQ zF0OxccIL9x4l!Iiw2QB3aBktO@5t0}3DtWnbfAz-u6+O01&VqTBrA`d8+4}VeKWp( zEb(pcztzx^)tip!^z_!J`Y`}PmOBMJHRt`dXg!zpjCEL@p}dy}?fRF!FLCX|)9>cq zeQIryN()kM4aHYaPCpskME-KQDwEv30Q#I@P2R3@{bDccFmnbP`rt)f1aNQ&ZLb~T z?-_2ur_8ytOFm1KiEUJud45L0(7+WSx@l4{4`K{q0t;X*^3(@*K zTy-}|^Lf8xw4yh=VERaMylb(Fu}9Qk?qXeo^%Kn*l^zc5?D5EeD8zQiMB8j0U!H>> zR07~1t6Yoowm}AuUV5OA+3`WLc_}hHbm956PULLI#~F&o!OQC}$rFbgel)!$@vJd^ zMd*id+mldbBjv~R9?<)fWZRkdb%3}qZRV;z1^sjcE1^5GQdntj`Q$rMWetJ43JzRI z`PYNk`aE646P>I_k)Z zG6sJfZa{+OVi!qXb>j$xe3Yh;hsya8*3aP7>PL%B&fN5Q$s{(dw|Oql9g-$B@8n!m zJzSS^(GX2+;nZ=0wRAu0?wqrx=1aR^H+M$WjOQQ?l1_Wtr!WqxD9gLaqkG(MrmyBn zZ5mUY93`MwtMi0}2 zO8W`O+hwCWijcX>q>!lj>%~*^XXz{8@S})(*J5LSi*Ez?eE4F&c4K>BuiK@w!Yd1X zUdS|adttyeX|=pT_Jdf7Csl2)aKYog+J!C=Q^#ab%PhRoFUQi=QVkEe`kbedfE!&+ zmKN=KS@Wa4cKE?JsgBhW8L7g(Uw>ID-t-SI5Jxr@y1N;+`HBP|#VHmgStHw#n-WGD6t- zjjovZC6nbJ2R#)pqE#|-?7NSoDn{EPJ6YBTPen`|&0%X}4=dAdSzC<+EZRZ( zcI<(XwsK_eue|QPm7?*D(9cnyQQzkMH)5jH7Xz7&k z$4H5eHrvEj-15n+rhfh@BRjJ(Lt6h9fSdeqmodThkn7Sphf9|VVavZ5wrv-tiw+zj zxr}UKJu7<35BO`S-5)ns&w`NQbEIv0XGEN=D)Ok7vb7qrzt#6L)?mXiMgjO3ZU4Tz z$9pHd&nEa#&M#Iagl&8dLV0u1BR92Svk4#LB_-ckjqtr{0ZUXz5TH@=&m~M)tk~UA z?v5N!z0wvx`gd$K<8$GNDZEDO`nnroS3+UO${XjWomU5u$)HgyX>#yyZK)EEo?TFd z&JH#zPvqj*1;{5#mp^fSV&^&m+AS_p>~o9QAy(icoT0^G@W@u1IEiLL_!|19%h8hK zjcOxldM{^d+iK|2b>y$p_}zB@`RNXY6?hlMx@NbVGS;lGs_j@D+^pX@N1olPgD)1y zx17~l5-3mB%ASEVRu@PpTGQs7@r9Z6p~9A{>#k&6`Pf`&h9Wy(=R)&d*}zBAL_@_5 z>##NkAO%63lW7(1?H2r)2$&ExvnR$`$8`ipAGr~yA@Tm)BT{n zfx58$klBTR3d(==<}!WZeZ*tcu3rb`9)BLb^rH91wkJH#!Jtbz=k_MEI?0R8Ek+8h zx8b{pTe|JByH@lq{Qa-J)VWDR!phkm;Fng>qs6<3!Z+FVb|S8{chor>6u!s6Y^ki4@o5)5bEtf zmePbq>)#2N2ao#z#$F$Y5zy_KV%vR{YVfsJ@7~pz(zYR+q?gj+4wV^^lj1&@p(hBt zk-Brnu7qG9P;yOY``&INnHWZygkAjgxoZF&Zj(WAW+qAiD|N}`Bk|P|g7 zXNhX6wZxPA7;sPlJ4oDAbaYGnFg{6~PnhqzeAC^V9FnYiyw*Bb0CeEgH zgYu#`$!dSBM(bYtZR$_}f<6`zwlnck{s@{Opqz_!Y4y)!Te9zBNx1OJo7UDWq?zrQ zZW9>TQg)dR>TKHO@m{dVyXIJWS6bxUxRN%&4%K;=D!NWbrHkuY!NNE+By~rL^Vh2bzyVut5e%?Z8drowIeBbVE9_l`?FAL~*z+EY_bX5~{IeL*?lMnduh4)<#&lky=Qa6G_tRlF7fln zpNEsjGO<FA25c}@T1YC_o0bE7w5e2%0--ZGBz3+@_>`D~t- zisnoUwRUcEvPWB_;^EKzu9etLrM(pGab(-{fed;X!a#|xCh!3BQr}9ERbILgVR_O; zNlF#JviMK*vNbP{HrZ z>r}MzVf2t{+MP=4HW-cMo|s&0$aAs#!Qw5dODsI^a$c3OY*=3B!*eB0e0cpV=1vWU9= zag+LKeeI+t3`pI!yQ5Yf{h>?3pmvks9Q~Cd8t*7MQ-PEDg{fDshZcoX<@|YA-%3iM zt4?SHE~Bp@v4~2MefK)$EHh&}zeuk->S{8s(zR?_UUDI*ZW3UV(Y9@+;;m+x%p+Li zn<^9-F6ZozfG=sV%xF40Y83eaVEeCs!~(C1eOdk0)_X6l&gq%|e?P4i@R)c{6HbR* z1=Fb4)lJvbIZ_=BPDGC17Sm`zWag0>gKgV!0T45CsK_{|_A$aG6CLQbAJk(#JLyM= zaQB_>iP&{1jObAzP2?T7!mOt9mRvn`A|Ld+ZxKX4EnJD{S9%j_f%2=KyA2i>VkUm_ z^SdC~s@-&kR}nUP(xLMCIP`7jK^Qr9AMdOL!l9>z`CpK8DI#6rAwvY_#l80sUE>~})i&YGK>|AYs9P_=C;oSYFgq<=oK>bKEH`nI=kv4=l z%n++2&!vf(U$O6tl0NQqQ7)axA1_4SR~|o69feSu;uYP(In+qO{ktJaHHx5lcNMEr z?bbS!-@=P}w=pq!udIyY(_PIvu31Q2NDR>ffF0jA3E{ELyqNb2UJJ(9@G%#~NTw0J zhQ5~CDUnBWYCj|sB#snZ$&d0+=4q=!!n;3;Mph!1e7pl^Tbi8(pS>I5MTn$3ZyOTy zu*@`61&dqct;TVx+teGmqED^%`qvh~u<14XrM@U+NCZ-^r`@`L2>JeY#DS;TTnv61 zUQBljskLU${??RB_TLR(g7uizrqVuK=M=h-ohtCkz7!yEN)g^70$s5nljkk-ZH!KK zDtvp}lDiOFS9V(lz#<5$W9jPEmykuuNM7ft zC>#PIC=QAr6XaZXu6m;IIYqu|ZvXIii2J@Cxa;fED8-KQ z^~ae0A5ZC+P2A1#pEV0xl_jYpN0qed>yt*cGwOXclV`g$+EPf_kCxkKl9bE7@k$;> zYI$&~*tc)oy!8Zs2kRe_4DG;~q54PP%^tQTH|3Z4S=tWRi0rs1PZT~RcCISvdR&2QB#hE8j0 z0YsDTzpL|YI@_EmA8Oz%V^Qm2L1sqsS~?Dj+;8et%I9Z(L(c>xuEwn za1MA$ftUx|aU%bOCm**8;aP~lG=h04SUULjXNk~g7Jf|vIKo|3mYY84ghvYjebP`e83_#|I? z1r$7}A{DGu3kE&!6$KQT$`JzU-LHT=GEv&%lUi52i}IR=v|o5aPV}~4-l_4ed)9PD zbpAgnyY;jJ6=n<|_=&9BfY#mCHRJKit=fYkZv*n?gHC~M--Ik&3|c^`9CWcS&X7Ls zMK9Eg*&o1`@7xI*zU045Q1L9>FUYF_!?oi&3tP@8hZx%rD$7)*i1Y{`s#tfLSY8k? zOxGpW6%u~RRMlGKDX^;v_2cMdxvL-Gh;a9ZrdR0i7ocUj@HjnqS5M~gz4ncFUnyf9 z8_i=PCa(7V_}V$n+T4DQCcwK$go4q#LzDXoMh!SW5J#dB8YE%BBg)Nbq+qB#B42Z6 zW_PR@AcUVq*zwD%!!)_wh_+5>Q=efEm@XX1kqn?){nWasi`oS4q3&8$kD>Gv+Z zIk~5obL?vaD>H-Z=KHP>0~POFgtx_*{T^WkSNxLb0AC<3jc@w-zE^pmp{R3IMDmVl z>AW)^4(2FYccTAEWhLH4oVcW-Q%5p(VLPMMx&*QB9P`lh_3CmP5$20QNHHmem zi*wNxU_I@M8~N@c!F5#Cn&Jo$5no)OTOgyGmgotcQp+$D~hK-eg2Q69T# zf`)h?7s%qB9c&cab$dR?TU4-0(RFOCAj|>ZdA7$*{NO0ke)F>{PGk4}$Xog{221vtm9C9 zIg8Dvx;u!gtl=+@a1h%*K5s;^>3o8i~qErmnkAR=5=SjE}Q5H+RNx+&G7 z(xD}BZFj3cj7Gv-v$UpTQHytPOI=GgCVC^|H3z<`;(lulrBZffI}cFXY-;5~R83pQ z8RWHE!-_r$Y&bh9Wg2Vef$j4m>(qq0WNL>o+dyh#I8nTYmkL!D?l zGe&pJ88}3(BQIhH;n4uISru;)#HN30xasXmzYO0qCb@DPxfIm%dc$|hwJ$kGlUsY! zB#<4%(+@C>gIh?sdfk+{sgkfiTTT^RhT94LRWTn&!D&(3;Ji|o%c*1vC1B^%)t z6Ni~ZBUJTvyjBCpk+gnmU`1h7WozEgD}xJo?zt6Tzc{39jw3Qfuci`SNrE^j`9=cx zU`c6`CL}j|Q6<=OXf6T1b~!vkiO@<7cCn0XO5bnUjUDUFJf${VnHe8oygs!E$1@r( z`@p-!jL0V!OI7F0?fvm~wk^TVHf2hVe#U+#D99>8-u)!;6vc9wxHGHx5@`niJno!U z(6;mCVp!Z$jY;%_biMBjvAEUAsa35f@=ZaFl3FYyX(aCF=g+Lm zpNS}Epzuw~#M{sDY9s?O6 z3f5K5Z?Zwsr{?GUlA^8`W&c7BpGJS5V@?*omee^q>Xb})eTpbr+%D#_*gLrQRqR#hkF!h_T=v> zHeWkQZ9!bCo$M`))3sW~1?%UsDGHha+uaN5 zLdS(P0@=~^gJeR>QPenjdwC(M#$8rrE}T4;zbNmcA3$<#easyT@V|oL!jE2YMm?%T zX^S+%xnCXDI0iV#xmubwL7^)z5Y`CiZXSor@2NUr@OrKe_8g0 zmpl}O7@q(cPuzw0=H6*rv zv&^qYSo(K2U4$w$=a>}9WdpD#q!J73Fa>sb(`@k(t8CM3P@h|N*QeI$CQ#FenC?Q(NhL~yIrnHWk53O&#k-d2I_BW zfRGw{%)^}JOO>>9n~CE`5uDP9%D*h5BZ)h_3N&_O5)x8>_}Gh54p;ral^;E1jIO*@a)zbt3C zFb_R6#Lu3y&EZ7-`Xa_cQ}z5}d;vXNYQ@}FYUpnKz3kV01>R&XE^xjs_k(OqgfM5- zY#oA{U;FaoKw&iR&)-+1*}o_4^lgN)-{r3cir>CDB>d}f$(o%l#rrSINiNgBEUXVr z&c{3i-~AaF;hHejhhs1Q?MmsZ?|m64MZIN_7W)cLE&1s83GqACgSbA(xpMYjERyFLpPrwR$tnGo=jEe3zPQ{x z6(O_QA?el!qTh6gWSx>J+L6|t?Jc0l);?LKiPZN&cjQ5+9af}gMcBG-ecznqV^33h zCZL=VPftx`NPkE)^sxh!(oUzLsHdljO@JP+zA5l{x-Qu)x=He>)qgfat-AFl1wE+2 zCzMe;?+TuIvSc^Q59MhKLAhV5+@#)p`62Pn!v^U~uVm6@>FhhgJT#VMM}u$s*TFmL zu?#r_?cSn4qVr&Z0`6(XjcIxhmm!4^-_pVFzB3P)1|BCGszxOeDLq_MZg^b6?iick zNl?BRIGN831*px0^B_a>DY{i*^zwj)e4d@^UR1xys(imcHEgr^IyC_N*sZVjKsi;$ zO{0|5;?Dipv&!9ImM<>E{-TgKdWS_xTA&%U2nOS7#Gvsd%r~D=;LDXY;JbL1I=$3iBY>6FC zhW5ke_e8}nQjcFgcpM>oP&#uk)kt{T=}0>MhFUNIrcn=+_~|J%ea~g4QePYJ>X)}t zLZQ@EyLhV#CCHKz4C80eRJqU=g7#l%JMpgwNsPun-!mah6~wjhy*Hbs$&f;|Q?+GK zAi6G3H&|%vD?2;w_|pA~Zp~Ez4i3;GR{CCS4wuo;Ul#9(-tabm3b4iOG_CE`T= z3d3lfVOvx}DEfm2V+T5(Gpu8vWQ#uENL^l*rv${TMpFfj^Y0p#dVaXo`-+&)k8|;e zzmdI3BclK=4Ae1VdaN@%qBCrhm`^w9N5+oQ#{_b&^!%0vq3VeFrRq;{2dt%WBbpJ* zeuax}2WpkfimGmX_RJ4m>!EX1D%T6m_(;YewEsw3h(?c8p8ONS9pU@v#ASJAMRxwV z5GSvTQt_epGtNKeDKXYvUiPO3lyB0ai?^B2R?LWw63ZrDFg@sC=-(_Njf}DA!w6D=772kLQ&_-y>8l;U;9 zLyU*UBnVxU1Zl^m&xR@r9;kHGFzG6{LTI6 z_Uqd~nNs<{(Cxt6=iDC}0r?MK8J?jacVBs+{@9oZTIm}v@7e}Ebl$J~%aQ~QDGe54+z^84%SGRdnWlK*7=W$BMg%T!{ESd7puLvb^hKkvrr{^1Tih2lwgUwE7> zfjsw*@%0bC;uj^p>7Ia3t?+zf81FC!S}%TJ3A9OYU`ckngo|qZ!{=#V z(Li3;pfU4CPjAx2{<6rji4%%hP&FEiQ>=Q;MBUW!I95NV@nf&AtzfBxL+UIuOja8{ z2@@qoc2C_s`Im*GzRuI2L3p&WDMyWTO6TdJ(&NP5$2%8B8@3YHUWq#XxPDb&OY>en zWwxe`_0K6!XM2Jrn~sqmBa&_O-`(p{=LHHMqzd~kas99{&!@!Sz06SKE@9OZej~yC z$Lb-+q;2Dk?58#Vd5)}oIlcPK*%S6YK1D*NCy+Cd<{V#o0|WY_n91Yuh@HCg&z{5Y zDQ2cVwK8BS=h2Ne4E%2DJuU36-My|;mngah z5lr?yOjC&8W&6Ma-l;d?F{Y%Z7?lpBioY)aq1XyHymTR-A7qX3VQ$^$^1;&AO#g{@ zUq$D=->p4H%X|8#^3`gYR+w;-ox8f>8P^QwtQ+v@2Q|!?zLq>gTglO23e130F0P;O zY5i@WU;0>(_6cm2WE$(HX}DN}xEuPFxoHt$sccygw}}Sgnp`49tYL zU^8^t08^dbQNYdbE^V^H|3yTZn9vP` za9Nc+yHct_v%j4{(yiW~Gu!P&S5l;AeTzITTWUn`oG7r-1r*HW6KjK=J|Tf zY(-VVzT)&8)lGPjyWFvKN@h*CEZI$(E(xhd>KbfJ-^sPr_F^HKKkPAefr{{S#yyQw zb?bcimdBn}<9_ERqj<*_Vh|V~a_!J+HQWECbt1Q(Y zG?wayYC!{HTE@IJ!GFxwXZFj4yRRfMyf3Stj-RsnMmgZs$f)D2#aae>7*#mcM^92%gS$EL+7~{J&!wqgN1|8x7jicIQB0GiVCuzl+JzNGNkbe(A;{{rz$D$Oz_VIr0PwGkJF<%yb=uh zg{R?HsM^=ZOAXpMHQC6IX$BXtLWDPo#Kc|uz6@y*F3`~9GMh~cii1f+Rsz6)bYLx9vhxt)TZQuog(R}{)2{H-Xdq@O@{|mHkNBgItIC$UxPDVa=_2UmB z^GMIwYHm4FVid4EWOCWEZdr;Lok4wydIBX!2AmRLpATA7w<5O3??*S;ut13Ls9%aHVi?fkZFuj zyN*OFM#9W47pXSgXTUCK!ASNjXF`@`g>_x-h=Vdgt3K=sW_%{%pM{QSR1We1p-q-_ zteHSaVnfpl&HLVeMrXV^c!^o~F6i76PdM`>^-AqYu9>9VOMy{Cin@iLG>LlUcZ7y3 z9D>kROv27w&G;&@5!6~W@n0DqD--(2KUvy69?$Vz)MieMuG`GCd}r>MybcmdEK>{^ zav3M;)*kYFa_;f}@Stex2f=sb)c^Q+SBszB(=O;!iJk6~4kqsA-RGHaS!}?*7QO%W zEB8I?oo%8&NiL;y@txAykb*6SNburz?!eUf1P3W2ttF+9c>i~zj@3vdSnG_7TB(8wiuDnL z&O%XV%qcO&QYi!lC^g&>o<5(>{717^0Ei9`Ni@2V8=Z8)qyqoy*!P^jfoCo$xb?6SApY=#%WQoq6DA4$0+#{1&ky)d+y*I^X(eVpg6eeL8 z0ixr+YiQkc0%9S;2fLnAuzz*jMShvb*rrco;_lWgjvcsvVBpurBvzxFrIvqR`X3-< z{Raps=l-&ANgIimOz1-e7$W>L!aQ^)ym2=+=1HV*#)o=sG{3m-D6XJs%xhPcDLyc* zbz@&?cIbVKfWcL;C~K{~7y;^xKthHWnkpY6Qckl6oG^pcU6dW(Xv8hA&h zl?iRXv!s;rFq>f}ac7p(Wi$jypB+!Hv9DB)MN6LG^i69Hey1eTVPcwEDl2Yv$tYql z{oY9q?NWG&MVR%M76ndpnRn3(@>l=I}DZlyf^$TjQuT?Fa# zuO&7|3junu5=37XyGfiP(wL(ewEogNlbY5jme1oW>lz=Qw6WTG z0h#no72Gl;_Xu)*75Q_^zEyw*!DCZiJ+bd$^U|Q}Lz$xDQl6t;IX5-w(*@4(e&Sy2 z!&hD*e%pz&T#B;7lRs~dLAV=n-+YbuC5b`Um(wy41{bK+5x|nJd{tp;D%R?%byQbWx#{BVlt=mK`{t5t95P?QsX&3U;R(& zA<`EGm0*vINiH(Y{I7rjTjh@%dFe?I4R*bYXT{ECa0Hv03}Gs@PI84vCPp6+6d$<( zMBT#grX{9+WKK?5MR?LK`+7-~0U`J_6rlRk+w&JvtPTIfc|3dUXhAMbnO0|TQSNs? zc-P7+P)NAK;u|&ky<@O+2*;8vR)ZQrRh~bed8R)i{O;>hru~Rvmy1ujxqtXv1Cm>3 z9Mmp7O}@FGw{-lXLh2d%U_5xLXbXPyJY?{#Voiz!o z){x;hair8dc3;E`!&>=;-7hmw$Ff)PAdPkr(qWz5AN%$s=U1NnIAUSPuI=gW&U;=G zHxU_DFB>*}>E=gsbUNU>%QObz!Uy;#Jf$fh)almKs4@!hoGs0JAbgQO=k%AMDR9#3 zr+G0Kh^LKDN#CnAxb2d>?lcr1e!bwlw(j_rTW6g1)LwP>(}jY)u}G#On7TQD`vF36 zGP#X^t^}#$0CFSw-3Mw?rus~xul|&^<$l|%GxfwFLPfelON9reGu~)_J`El!{9hEy z_2tg6^^iNZz@zQqVUJsYOBY&dmgXd%{$+WTDi7Kb!USs7oqjB>1ObXi)Tz0kc1xRB zSr3KTAsY!Ug1r7&Qxpy!wp(Y#w-!lOQJ+25gTgi`T6J(Xep8zOz}IUdJhnL`nS)K*Ut_$2sy%GKwbv_yrL zkEDbhOlkCy@uDzW4*!slCDS&rmhGP_93IwqK)mo2t!lx;5q6E`<93+9UzSls7Nlx`mVN@FPl1*Y$)xN7O1`BPD&qVaLBheG@E&ur@eq}N>2*Pvy zk#!Fg0Gg)N*q73InG`VBe1m8JX<6zK3cB}U!AbrLO&nzVv}4LpBY>?)2rRZd;W^WQ>0t&3!3?pUMT`nth9-QdTYx&K)S17I?0`ut4; zuM`KSj@c2998%D7V4GSvVHCkk!0iycpffSmav)}=sVgh0nRBcn-du#5L;eGoM2d>T z$jXaxT31FGs_c(_-&?q&DG2QcqM6rvF~zPX`J8RB5-Uf)mBagDxLenBtNM7es@qlL z2Qw@$>F9@-j&IilS~2}H{?YVUBlw-qtMkjm8wJ$*54c}$kx#-lX|pw+#`a}QRmO;{ zqdEjviz;07K5uJnKB8-=Dy$kRP@sLN_}^cahM}YpZ?Als=WUzg(6z7?=-iUwyyq5E zFR?k+hi(4m>-SQpiN}HBk;1|JddZ;*QVk6~(n_0YGlt$HO|tOjnXH&lGW%@wOoJNuHP7&cn=l+lNWBHTJEY?jpPVWfw)zUQQ;m zGxa8hVu8t3vIPZmhrP!8x?lmOhl&!RFS5hV->kK^_$T*azN2X%2fmEI-X3GPyZk?7 z*~85J{QnG0iVKRD4N~)Nlb2mhR@H&02I|a+sdEkI zA22(&ZhV?1QzJnCU*}DiI@^~`|FcwP5kuF`euY`$5}$OD)#a9etFPTzr1x5Cc>i>L@I>%{m%U_WB*gl zrz8x$IMl62)uWe`v0}7GymBi_hdGgc?&?s_e>OhDK!HEd{sx!?MLW$_Mrh=FV>N%5=G*ks)!^T`q!H1Rz;b0lR>lPHp3CpCJQ@9LLtsF0OEYFba`%<+oOePvo z*51O}r{xh$QKw;HOtnS+eE|SMvC!`rtCjwf{+^qD+2av1*lEJsqP}t+1MSPDi7j z82_{$B$FaKMA~c@>EiiILrr;X(;y=3&!-mCA8(%1I9T}I`5zG7YOpa%X@1B^A)%+A zRh(!#QpQe9|A{Yf>zlVOY%PoEe=MGCpKA7(_EYFzv03f`!xZ zx2aCl4W0NVD7XDykxlpWMz8D`9?Ya|DP?uV`*o4x|N5dA!aQ`(HOwfqeo(o${|%8! zLdwVfaw>R_h;NHO7X`Gq7OXzFyoaQ)N9ez;6s*5Qo- zg%iBZQ7aC!^k9_1 zpwS)Vr+x&#Qy<`*he9S&9{LvL2Zh#-_+mk+$}^+OO4ZEP97g9b%5sqNohqRDO7@zn z`7O+zeomeD^yc*Rwa3#{4GnHO;IjKxxjg~&W>o?b=wbG)`vjWU$-yT5Fvl#+*JA{S z61!WiTVzWXB5(q0h&(uPB@>j*(y8me3F|S(5A8M+xa9^uym3eWZE~Le?;_s$vr+J* zl%PO`)`bV!8l;E<65lduiimOX`m5=p|D4lHQ2fH@1Hy zRJk)hm&gGkP_ch~Y-zZ<7<%?f>8?@ERpNLcCuW+yc7xtdcR^`ebtYlL8EAmLrAviE zjRHO=jFhRoC6w0uc$i-#7r!QOY1aSx@^yZTG03n{QM@R zH!YSjO{Bas-zeqDhH?YDe>*6deLF`WN=?5}Rhq7+{0~ncoKb%k5MU?KU|zv)^>WZ$&a^{iPRNey7|$5WG(^co6Rl0B-rP z#v)r^iUb>uU^diBX)meOr(CAjI;VgXS|ticdiXJ7mGaw7(*t^B!jJz7T*Z^+XKZo+ zRtis{_asBuJk6H-o3QQ<{G5B1o~^n{PVTt}3-34OzlkFby{+$7;iKNXyh&;==Cd^( z)kByxaOL`qwD*Et*iXyK=)$R!YPVWI-~DeVUoRcwg1x?kGY}WqD#5l;(Vmi3g!@hH2^h zR}82O>#?lo>9OJT_I0(r*9IRZ9Q@|g-<5ih|88rn+^hE^*h)kpgrs9ms0=vN@zW4?Ui7!3Yh~yEw7hkdzbcWV?axz;wgl*} z=+xYJe&2gg;dnIYg{aO0*Ni5b-KcG+Z79&gdV64}FmsY3RLr`k-KLRGWNz;Wy~7cI zC`|X@!@YJY6X0nIYJn3*%@|5iwGPzgAYYlCbCQ zXME=YXWkX3(p%(ji?4JUk^wj4$+}82(A*lqhZi3bi5CN^n`7m2>sIpzvZcth{eJiq z#vBPx=*Y+A&2xX$DlD)0%h&RsfLGG;<9|5HwVMK^C{!e+t+110lGf1rk{`+I2SFY|1r20o_<>=2m8`jT_%>Z)}Lz1i=nJIF|J;p)^SPQ&Pn<4>#) zUR2ikq(Va?fV|4wOu(DlnXt&fXaA_SHJV#MT5~N+t^MGrk#df0lN|ie2BwM|M)HLm z{I+ee%&7}bnGsixuurj3WOl6*PG4O*uKOMp^i>NQgda=VG!MZ{R4NlEMjt3X@*a20 zP!s+lYw)^!T9;B%zER7+CQr=#KVV3aTHpN-M{QB|QF&|e8uk_Q7yR+k&NnKK zZk1YfoBZB|_E-CJ%ajcOCiZ-G#cxv2$svndmK-TGalP0LIdWWpA(~0fHe03f#?VEV zV?l_gqh8|J9TtP^S+iY6{<`}Ne|FpQDyI`27G#rRi!5J_;of0K37}X$3bHXHwhWZXZfHBJpVo%;s}94%gT5UJT0{(jEvo1tGEfu zj8oHro@X`xh`#~GXS_JKXjRzx_}@eNK-ti$EZ=L-kw6i_+0%oHLC63fE8l0sHD4NU zvbNYc5n$fHN2F1g4;iDwfB2hM?*sMc1Tw5Vz9b~6$xOU5Yv>!YQ%DrKlAc`fhk+6T zzIeYIoOJ-vULXUyb;jfzwdQof)~_nd>Dwx>GSvQ{YLjehgsLF}cWrZ#-k;_#PevUlN3U2XQKp546L6fO`$)WK<%%`W8X7@wc9 z_~CUeP5+wHPLlRqZtTm$BsCq=eg{^y`w!eAk7oZyaaa;LLRbE>wN|Ubs8K@)Y$&eX z{&@|3(CNFv&_e}X&sX~Hb$&h7OZ+x2_cMfFR^tTuos0u9YPPISrT(MXM&75kN9j?e zHCuGb!gK;jjL#1f16-(Pml>bmJwSb*KT#?z!Q;vc3Np})2>ga8Z2a7n)v-NnI_w`+ zn@hnT4|KXGbe=CKhgbg}l~VR?-4u4o0-PL0Z{VxhlA&F3c>W)Zq!6{vvkk6krX`=^ zb;v-K7K?uf5HAKXIM|jdGOk^Kcfu9YL*T)u$>7Xjg}`-FdeA+2*@A z`qJhogGFzC2@O8gG}ZL?u4|n|EtjErNIVGEK9}7JZ%<0(^c!a+nK(xA=bcujE5pL5**kJ^pW4Od^kq1Aq<3Grr10)1mHL_YRv&#AV3L}czR!A;_{}*l zKzHUr|HU~^9jRORqukB@U?nNkk1-S6roE6t9rxOK3VW0)LOm~w@6edK?D6wKB}Gf4 z8<5C1f)nMSi4?%bI}+a~gc$Vs8#4-9)!_Ue5`G_xFOhSwpww-`kNU40qdH1vTQAL4 zR6neSB?tP{TUNoR1#*MkEFzYKuYguqV~$l{h~MbobU70GNzrL|xij_^FS4%os& ze^DK?(i!(%C{%W?p@cU?ZSx7hk)}9DtbQ7nN5w=sfMh4f)ivfxt1QWXl}k6V z^T8$PO;1l4)5>2JP_cA>E_|=! zs^)7~Ruo3M0{M^XURAETP_Q;p4MF?byTr77+&nk;)ni%>*a&WdF9koAlk&GGlhe@d zwBliK}cFFlF~v+#4F zdssT{j0`tp?FV%aUpl-z-AF&stMn&jkrUPHn`ngoZP#@9(4Bu3zy)pgtxrcA{LELK zn2wdn78Q!CF}W9)X;j_!-6Zf%_uCGY0DDEnEAy7W7vTH< zsNRrsA0*gpbwt z_5!Z{qq1gCF;eaoxzl}H_>6M5J3>=gA;$PVl!;GFyOd^)y9bQ8*GH4;9=b ztw-0gJBS-=luiQLfq~o%kwoS50!c+EHp+dWBEv4hG$rpz(}9?~E_Tq}Ur2i8@MnGM zG@fT||BWyq}f(xQw~1RYG{P-HUZzAVf8O0(}IP?kAeh&C9>Y&!PNv zVY*@O?+@8u4p`+*0m>PMn_q0X9`ihrzh`~*$XA<}PjU06cr16G^Ih@G4Uz3MKQK>F zvkg$UU%bBlHYQA0fe;#Ud(la^{x|+R)~?yQFG8UH9oz755_cy*>wztuNL&33`L}E7 zR-S=St%i;C_mF~*+tlq&jQ=fkf<6Q3{N>!oSYjNX33&zG$3 ztHyy$yYiy-5*@`agcPMOUBsdTsiYo2OmH3rh?HXFUqvVZyHEb=MVmjb#?Gas$$!c6 z+)n<}Ks8Omh*Xn?wh@6*B?~!03dx%w=kHGcS;@F#Y+{^vKQ+V{lK~*SZzl_=AAh6x zR5l1Faprhk9^XI@BU;LvWOGYjzvcIdxp}g<#k>GThw{@`PF;ZYM$mV8wUD@Y>O1av zhCI<5O}l<;(B(?v{1w^ZZ%$V-@%ACvzeH^O-C=S>_Rq|5-D-})rBRV!OYn;X>3LT6 zViS7H!8f4~+&maf>oZ>YOEJ6SFINly=wJCkOQUiSr%;g#v6viJ@k)>h;gbfMOBa+D zM%QWcl_bJ&B|i&~J2X&^J^Vh)<7KBZRPT$4_e4Y#%DyUt6&jTrpUsfR^UFNj*&o&( z$XI^two+)^h>HuhCT@(3jP{WOE6JuMkW4{F`J3bo@Ma*Z4m7GvrK?2#Sj0gxSPecM zYvqyFZGLjPw9Mk#-J&ah_lxrewUPNB4P+~(Gw6HRhA8jCUS1tQuwAs&{u^pyA-Gun z(xQ-mN;2-dCch!%`wmcc{H} zw4;hyPs)K7vu2lV zFI%h%mY34Jktzi{j3LBmw9I|(g&3$Z7Kt)esfP7Hl-JJdjt;^O`ug&L_9TJ)^p!AW zu%*3}0@ZYcFPSukP?O9m<({Hr^JF^o8 zH;j&EV?T|Tb!9!|R%E2{!1ltuoTbf574(d2T$2x3N0apx?o?k($63~`1;hA60cCSc z<)-Jw$(&K>)DCCWxIu%QR3itjw9x>5Myx2eYUPQ%7{)X~EiDl#QsIRX+*oHFuM@I+ zI2fhTq-Y4Xu}$NVC+Y{(&b=}Ov7sdE{X+d7D7{{r=5d7Toge80W&jy?0RTMf)Zhqm z_0L&_MQPr|7(~-&tdNUG2dUEVNJdY~;7yp|efMC;oOkpZO>*NEyZX|6h5xAXz7jIz z$e6+y)EU(8lnx6z5H9Icx;&u3dRS3&n@Q!X^wYlRe^i|Z`>o^&+}I|mHm+zV*XvvT&o1)6I;zY@UfzW&TzZ+#Zzq07Vx}a46m=_IyYQaVU0Ah`M!r$?AI)4n zQr#a)M7TZl^vZ=2x?~g8H zM4u<6-1}VTq4eRp*sbwJEoJIhe~#D}1K)ugQnY{)SMBZ4O@1t=*AOPK$4!zeynoHl zh!-E*U~r8oBM_6vq(dlGcZbg;b@AFaSI?o8$VU!kR7OJh;qz@8JiKA~vkjq@r= z_Hpeln;dPagRtnGoXUbjO)Jb)6-WVfK(dp^xbp6N*6L%PA`9Kw8l%J4Z+dCVi0!av z=)YEGRr&LJxvT5huS*|6)>mMDrRPn=47Miu;EDMWomGXHVDEz~fvyS``ue*b9|ewD zKD6hIt2H>r|NU8gPQNvd4smH^sr-s)r%yerY~~L&cu_CO#}%%eQMh?6X(9Qwbtc}1 zYwD1R$1HjnzYQG|#&{Uq7>YDie;_kwoAr3ZdlCGTo*7;D7wc{k^tF?5W8R%G4|@3~ zLj81Njbbufn`VAT>7i#f_rxdEpsQ+S$jFgj_l{5GWS3=hw}af(IQ+`l^&y&?$1Xb- z*MBO^(!ZW)%n@1azh3LvGOq#(@GIcDHmd$4VTx)n46eTO_g6}3IbZ``tKinrUV-yo zWJ1FCe`K9<74V4`A&TAp9An8qu7r(n4^!mWYfu*3xH%d=X zFo>VE)Z`k%!XUR=CTI2mL*AC;{a77EZNQ6W`-X}(KuTHkq}6ge7lVFO=(n5*x!+UX zB}{y5pA(q|n5I@}b(XY}{>qnD|D>{bo&759gY$E$(f8e6+#GLpB>qt~A`2hE?xbPK z`JQ&NNqu*D%@P&A`Z(T;1-wcrmVXUGZEib_A2`=ekN0vELIMYe3RgVdDF(F(GkLG* z{iC`oOBY92$0Pi>(m&<^XPWwmJR0Uci-z0}^u8#%ncQI4)l7HO$<~o$&ZSLR5Z_(S zj;l_XcLQq1Ra7*O{L=Or`bPyD_r-F{&Rr`2D0t|o(!e#gYD@hZlV8a3DZEzy+0H9h zQzhw3cpH{)NQ^^?USvp0a(q63!^R562)@KMWKSIQ+t^-+;hNV(LB@zAqJwkO%hi_j za{mAx2LB4!mkj$Dl_O!Gi%xJ;MwB1wxDybMckuYIx*rJoaO-DgJf3Mk{*+-zYS#~X zRsy|Z+{OM#1Q%1wAM{UCYnY`n-)W?HFW8MdQUu$gXx1?EqT$+T(1{b0oyd5PhK;bb z0GLa6#jvgl!9Cnr3d5d!UK`-)- zzX(REsTpZC{1xw<$mzg@#ks$Gh57jwE>0|x$<#6a#pTbtnl4=E_{#2RO6K9=XsCSq3n$endeofrn`y-`7z8R zh#q{^tORK8(ZYB6Ae$XeXn*B2>Y2&AzprI?O;iOr@w0Fi4@J-5(^xI9+bXq7&D_SRVlK>(S3zWMU+a!_6Kgr_GDo?970zTJQnx@`5)92lKsd-} zPtajL((DS-iXrl~u3Fl2^no6xp6Ai7O7clb4q#j8K*!i)uOR|KrCV}%X?tFj!EO+A z@iFrxi!6jgpFbjc6XE(Q`5`O?<5NyCV{M@)3d+gb7n)61vLPxE{a3WJ2! zoewTg6s;dv4(k7uf8BX2K5_FvbE*rvih^y=YYdy*%XqoN`jcTSbv}u$_VS0;hFm0V z^x)V(s^%E5J6>f6ufZS&wTqI^vvJuKlp1-ZItq*3PyOY^D7hs4p76_lZj!^@PP1A%K-wkyHURebEE*Mn17rouXPmj@6-9D{ zZpLLT892zTtX-Bq<-vrtd+wzztmZd^+)sSQGZeLe#)F{;-!6N&(kO3+79AhA{{n=b zoP-5oasX3_mb?l*Uj-S(g;8!NceE<1IHdl{XRYmfI#<5^(-2}j%$)O3C2iNTT{*OG z|KYhY5P00?gF)mGh_Fb%a0bc3ifrbiJBX-IjcIRr%3$=qgIQin9dq0w2e*uRsmcbK z-RcK?(m4U;j>$!7y6Umk2uIg|TFFFAF3C8KKf2lYyK3-8r~|h*F*gQY$0tL`;1foO zZ-nh}RjRC;C8%9}!(D=ZG{A2uznl<(HpG2>;ZX)blNH4liS&n8RRXeTMrm#38?tU z%`LXT*}ESqWcJ=gxnEorE*EoTj@PfXK%xEZqunLVo{^9b-P~gzOKn-**O+L3H#Kw3 z2{m%>3mTkum1R!V%a0U$v3|u%zM$~1SKLvDR)QMTqLJuf?`)={X25;%~b&*VMVcjRr>>mmn{!vX`QvqM!2#?V(9~KHUZBm1A zOK#lPNpupVGj~#XnPxBDYIHv(fPq2IQ!Y^Xgm>dCE-&@uGU_bBC|aG8p;3k(s9f}F z#bCxppfSHr^eKK)R|(pJoTu*m$1k1ytTrvD~t|p8JPcV|q z89**ZN#-ZQw;O&kNt%|Zs-v^85M^(|e5!SG&lS+%7tszmjZ4bNw|e~xHIZ?>m%<48 z$yxJnRd?(uvW2D00e2WJrTI$Prh>A(-{cE4+x22y7SD$k9Qo1@o%_Xed4kC0 zSNQq30>&Fsrz-ccT%RkFIbKWoOLTI;7cR4^Uuae>-jVa3oc~AVmcszF)O7DR+|@%K zxmsP-kIJ+6&@uu_sH)7=hxha)HZ_`K5?r+uHJaGU+P;!JwX3FTCh!X1N|M7Nmy!;M zBNJp2$(Ps!o79FSYpZfdA`#^UBCyk22n62J(vm}cZ{KSZ4sqWg@3q%KeAV(Yn8+TZ zAY$YQq6iDA6_OT=h6a zKF^bfe8BKgQRb@J{e;AaU$(3-J>=`W2@>O{xV+DHX_;MWoU(z&N$}>@9|w%|PvX%& zyK23>Az4@J7dunhPK95%cc|>514nU&_aYWNG3(fV{Wo=tN} zb3t(hp_iqmmG(yo_v|i_J!lcMsy83A+i~OyXJvpGmABsr2Xl4BSOmKyeapE~3So4d zj>s>n-TgeR zDT(NF5Z(hh;mBaNvowQ;`wn5p81GwdwQ{o=VlB;4`_Qo-ZI9`YNFRfpHr`fV$`$gqS*QrKK~KLjh!S!47T5X!e6lc>!q^Ni6^I8cNl0e zz@G^6l7MTk$#rl3V<#hJneK!Xt-o1ak(7Yxv=V%?EJ=VWGXG$f%SuCs^!V3X@B$}- zZoA_Vh8*zjz~?PkSI6>t^)4E;U>gbX-p#rcDP@_1GRACLzsD;T2y*I5c>kjc8kOI< zw!^gsl(%+JD;ju1dUf5XA<{1BV8dIHDS#7F;-5IfQ{5|u3mgp;^G>}I7-KZp_`!A4 zz*@yUOv}`4yeas7K2%4^@sC5>k+}VUN0l~z`+=zJFY@bc{8Fgqai7V(!|L*v{YFgP z;OYC%7F9@Ennj4V7fY&x`jcmNqz-}6nqeY|L5nBwTR6LF@r9yEF=^CT8Zwf5U>#as zf>eQnJilJJMV;45ls)nf^I89;?6IB@X@Eb;g`T$lDiy~r3Jw50<2$0ajnp+ z?Wm1A+37w^n^3WrK<6YY1lco$rDSgFzu#HW8ENgJoZPa8=i((Qk5=u_%LW_6n5GYB z0Y1x$P)W;Wpv}zh*AzyNTamVL#GbibTvT9D;ZsoM8j$?-NJ^w(-*ok9 zY?^zkKst6bx7Nt4_k@+IZ?O&V++!WA_r5Bzsx8eYNWx`$rF#%b1Rjf)CvqN%2>PI& zIlK)h-O=W$_vlcGeOnKAA>hFE2u2F4=;pe;?{#^}llT!r0!zmg;D$1Ck^pe{{-(l- zk>OPz%yB;7@3ScTb4wNs2DfpR;G~pOlynkQUR1b2z)Xy8?m5sV3~;ZJ-J$+CYkiM5cFQ=tLIqv&2Jky#8kOvYyS(F8?Zn4oa_SD~2Rt0?A z@0ZTs2nwTqC_MXua-PvwVf!jthYT^fS30FsUU7@APKo?!UE_&fOndj$=T4l%CigQp#`q*hlYM|9X|RxB#-8bM{*O&P?F$4a85K1AD3v7YpDeze{}la4wh(Hq)iF9<>TZW>q! zqCABQ%Osz8n9uV89>lHKN**HNV(T!{x*+N-_a`>t5pz#|4tAvQSC3GUHWWlUPjGd$ z8`btXh0H4{lX|t{%2W;Fatgq4J(tJ%_;_kH%h@%NfVZE8pYL4^NRl4S?eC4XKP%%# z;O(Tff5*N((|jrL(sJ>jf0L8O=O+TBN^OgDoqwN|4AXJq4tRTYB}ypQV|s+A0omLh z=WlE7k#7h<3a9f<5s4ev!NL$f2_f+?FR*n~+|$e6-wwb0{M^y0a;hUW?CTfW?Om-s z7r_+Y5)c8+x;6alYk(eA`SV@N()y!%_W7bAs4wszl@!evj=!Zh(#BMSb63CYFtvx} zRa+mEw1!>?l)v^_VOxyly|sB`r|^k-;$kejO;$1mZ&`xiWtp_Rx zjQr)lDncvUfee5TiyS|q)`!dEAaIYd46V4hp7^<-d-8yt#Gw~Ywd|OLc8tBDX+_cA zVS+nbvn-IfH@rrk(@Tq8keck^VC75=qu_75BRxM=o*hc;SC)f0IE_SvAcwE@-@jnV zN;?3J&P^3C*sAY6=9lMV7LE+YDig(zdw8b!u8CkIIr~+MpQ#V?@Cm#J5hV~$R@wL; z0G3A8w3R%#+*bo+-caR3vze)~r!Cs()E+pKoE8csM& z?z>&rczrDkqt6hcgif$4I-?his;-OwE}* zRX}Y)Sq3-kbq+84uj-@H_v2bf?5s;Kye)cO@4puEhck?5gOZgF^~XTduQ>hU`DzHW zBBw1Sy>M-AAT%d=Sy-x!j>@dwnQh$iRvS3*$Pm31mklG)@a0_)R}YqbtHi^R&%i?E z4ZcOW>dhW#f$05afJ+$Iyhku)C<^M<9LRqv*io)W z?%Mowoy*GuixJAE4b~J(aMoC4xdSgON8lxiiX!#y;y+vhx{4Ab+|EO{;*ZbaoRAnuLe^u{05%Bh8^1(OdsULqVMhceT;%caEa!7qX zt>3)XMw<#f)VckQB7s+qXTjI49z|kxIP@Mh!W48l57pG7l=Tc#Sl=t@?#AZ4h_bbc zn)x32W%pCfx7Am%dJityB=>J;+P;>UZn$g2@o*93vl7+>+7A@`7*y}8El%;#HRndb z#KxOY5-Jt-j^ID#gbnPrC6JeGy!o?@nfj%XrCa08W?91OU!e%Mta2a${DG4;H_V@#dsTdsfNRZZU%s6}|38nHIq*t~2E2Y4h6E#&I<6#XBu%Q?BSHUUAWhGUx z!ZT=Joq8BC0dg(l74s?UbC5T=dZf5>$9!y3|G->hpQPc7`fzKna4B8Wn=+`Hgj2ix z1FOM*WJ*OZb=>#p$3%uw0Z<5q7KHz!D#?BXBVpwj#NM?V?AEoq{>aBD(ou;jz_2ivN=HugbjxCnyeo&={Iy)>*2lbOUNqSGNcn%>)WQID zOw`AlqyukJLR)vOk4hJx-&*W!H?uR3Pg1)KQJJG{__FO-Wx|r1`?)_rd^W{yziaV* za@lLpP+_Y=o&pll=T)4y#XVD04F|x-7ec9!EsQUT|IzA77Uh6JrUXw^$ zx%6=Ypq%|v!NcL(k)#dW&_o)q?*>D}`Q4vn4_unH>iX#GA0;m8TcIO4USn8F@EBPJpbfiW!eIf?WNoy)T6?NWJTxVQ5qV-1O%plSJm9H z%MC4)&FnMUklg!>$Zmmz!-vK&B+eM<;}0f`eB$lyzhuUWaN!Px3mYNG>MMuW<}RB) z>JV;ov{|q{%%0Uf@sa>lj92DJtUnG>cL%-v?-&+^LuQHT) z7O~41G>nsYXH!oC852U&X{bu~yPlYc9IbZVbebke*LCaS9h)|)dA}@|WsW&Jj9<$Q z6p)+sb;<)^Mq#qG^!NPkiyveyS&Yh+MW66*HF&QiQ!ktrg)a&mB_{gM-lYNy?DH9B zS9|Wy?1*Xm4ZIVwykuLmU)TLq@w57vsOTU^>0dBSTZz7`;F+!iLx`lxN3VZW`m4N$ z@@Yo~=+5INp!se`A~|1yT7Qj3OIrW4SOa0C^r|M*v2s7m4kY9e_1OIN5R*-Kr`sXR zc~Dnhdg;3j$I#ufwiCCaR3h$fPL&84gWw{2<1prKmAKWEN@CdQv$M$rOY^lgJO)6N z`=zq~h#!@O;9rO9jNxrH6Wjn7V{Kt4aVc5(Li1lPf`wX+841=@RXZClvBflrA8ll(E>HzET*03JDtLW@&7yy`^;J|fA!xb@%gB$zPElQv-WZH8dl}r) zQd8X{oM`OdMBn@KQq8Gqq=LM7wm(!_$Fn;sAf&rhy3cs0Fr{`!k&+++GSsUa@=M+z zD)8)+b{2ygFpsz&z(NYsdLD3%d1gp7<VmK%CGo z=Cqx29w(MS_&;9ybt2~jO?nUq z%DM$%%@~?(8X1N_ms9If7M_KR1ee2DWC1bv9kTafT>E9`D;lDtSus}Xi{T`D@6aMR z8=4=Rr}{RIozd z%RnD#$}q|8){(OG@hcN!>*5IP3<>RCC31``5fH+0k3lk)Xf)HEEMS=Lj4pT z+OJv02N3U&Oc>CXe%x0homuk5Tb`P0k&3Cjjj3EH|WBI-v#q)snpwZ60T&Lj7+V|j43 z6cIajlk97GHd4kAn>fU-+T^7@8;&g1K&D9N!B>b2&^BfX zSQ`RJ2X`QYu8os`lA$Reo|W;p2zcH`&~**{UE>6z*-Y=Z!^Egk=5$;Bd7ZviiDpUC z)&#pk4qs^5ZKRCFs*;9zj06LIZqDN#LyR4aD40Mz2emfmEh=sTOxS;9W{mYPfS*mr zHgN))vboRO8XpIH_}HW^b+(GVuK>6wygQe%ClYC4du(s^e3sorO6b zpJ?4v@UmOcXEj%Y5lQN+|EOwdvq#vP3fsX7czBUT*GC3V1kmM#TP_+8lVir@?aAcj zHZctua1xKnq}P|{TVDnH6Gy5vyfh}qqZcWrI4s?GR(oVe(LBYod*_w@Lzs;d>*Btp zY9Jv5O9@)+cu!=cm!T-FklUebTG-l9-mz(4pQJKVMS`0=Ah7SjqrXsdl$D_LW|%U0 zJO<)MbFd8eSl@Fx?sJW0*YI8Us_5K5P*?g#^@Hq5Fc!tH}yszw`*B^q^^x&LEV-{=9;8YORMr*Pi~FhZXSZ3u!F_RrLL)tL+{M1ToQo> z!i;y^QNez;Wji=XagtF8qUP9#Yf(71XJm&zP?rcVv!UYyI{+bnUv4* z$6j#J&q0Qe+hmR-KDf0#u8~V92=E;1ffw+*j^{FmT$EuK&P#s!3OSBZUc4rHhl00d zXxVI|r4Ur0MtQj54K==D!g7LAPuEwqBGY1yKrHKe8`8+orsU}@Qcz1CYN}s_;7383 zJ`asBgsdXXh}U_0=0B3Xj5u|c`#gr%Hed<%mSCOZ)K^Bqrb(+It!2d;o7PFETJBK> z^mt-!uS@EjJ)2>MmAdH&+khRSlGW(Al zs9r8DD)H-!HXq}&fxz$IMmCRIy>WlfP|?s;7OmjRB#PIe<^ABqWhJp1OF%^ofN=R7^dh#X1;Fo$!IP_eI5BaTne1jQS5Fr$w;O^oDet-Cu0# z8X)t#J@%4URAQMdcT8^3mksBceSEtiW_)YyNP=wt_DWR3IQvk3j*#9J@5oSgD?mmc zTDo(^vl(rB`4m=J5B+>XQpI{6xcHJfHJ>!|cT0Lmh0$Nbq1m$xHkMUB0xyFmEhX?} z^O-s<4T=Z6cReAjP9G7BMz(V zpUj1N$!C-eWP>at`9`CUCtc;k;2TIbr5`Z?L^5h51(D50Cr2Diksc6S5nV{3x%1RkpK=S6Hh!-y}HW$!BJqi(D=3*Sz!VKVQZ zTgsf(X;q6{3BHy^!UPZ1&3%|H$fOYZuk?6@gIz%FdQVTG_4d>?uoO?D`(3_-NJTSd zT*87=l8)*jQ_rtfiHS{JO+0{dm*y(aeKd-wN- zd^{XOZ+T4)ES%t6rF&r)8(Kk8`}-&QB&;a}_fA?`Lh5+_!cocm>vrn#MjRXh`CgjE?cJbHDL(s8wa7#@XJrS$LB0TIe8O->TY1x zfmU+<-Mw}nKn%aihNY#{nGj&UO`4kpMqUq`$N*Y`gSAC-syI{`Ieb;}DemHZtDRrX zXJ@JXfwR4y32&=JTtyQ-2L})(mi)1mjdGDcsl_Nu7=JtI%cgB_Qy-!f#PRO* z%|9xIC!naD?FTBgn(;mS!eKX_py$GfJ_`4ijs3dp^sC?HEV{+42s_*fF)j8sRp~_g zb0366KP;57e=-{XF#zl?F5qxG8QPd?)wx4|{|zNbd_(vL^F1IsN6*dwdAt#`PjDhZ zIf+%(kCVRB+LO7PKQBcroow;SfQIc=W6shh7=`&L||N^ zmI8+plHhqxkmf5u$0i(e>Dn6BK}}ZAK=j(_fj1)o6I2I!VH;>3IDQOQ zaElVG9jpryl;#zhZAt3pYU|i*_qvwKxX%|D%|Ay301^{P9}J#t{=gH~A_o+Nn^<`rz#Ni%6~ zo|9+(Do|Z{9h-?zV{`T8m)ILLkLJEIWi0z4wm8sLxG!?VhAv*-v;rDbIFJ!})BMD- zB%mF*-j=;X2^R=FYx_ir0?n+?j?s-Q#8zP@G%^RaJPUI2kM;R*-tVj|enU~_Jr6Uk zK!c>~euhr&5lW}yJJGKyd%c--%9-u0#hd}3LMWQQY3Lv!sh5bQ;s;dtgm9yax-(nC zeazHPg>H3aDkC(xMR{&BMUfs!bnrRvf)2-Wq;{~`74|X5y9mrLSFWW{GI8RuRYrg)v!u$X;CPof9s+Q!|zJ>Fnm z$m9qz%$s;2B9z)kpNn~S!fG*$+tvMTo*`OW>`uuCX$qGEwf< zyHynqgt4ijd+>y)s~ZkuxTP3W5r_iK?1uXVd zM;R3$XS?A2kTTWJ&@?fwPewXJ_!0-g-I+e;5(vie_{r@h{% zk9{3_urV5X4C!7ZU${3IeQl3Pcwe7LVEmJ>FRvpVU}N1r2XR$Y%Y2oKgo|rtz&fZLb=Z`4UD6OuIkz{gk*7r)oVp91wRgFpBF=T?~yw6vah2U`7TlXgB zeGjL0s+NG5XTWFRXW$h66hU3mJHPxw%dz+r#j#!nco`}*qT4PW)0G#PJ}X5A$n!#x5$P{d;8 z3%4C%72m0%{A)dKT_Pew!SshQJC&dfGWgpFvu&NL&0fV2jPIbc^coNr#V`zDAlwl~xtuZ#Rv*a3CYv&R^>d&;E>J89*X0a*$4vzQ0DUC9_8i>-jtNIX;t{+ z5%7BJpqLX;b(G>f*y_{Na=nZAee%R>4bH>&=cEj*lA&s2Ga6Hnk+gB~%6zq15blmm zZTN3V1bvFkI=b#a8KuT#8*ryC{=Vf$|DrDbyE`i`dV_?Iu}mg@+lq=37G7O<8kzEb z=9%?xnry<@`f59QRBOLk1LE;ba_JyPnFHl#k$t(QE!QvVdm@dFmRiR}Y}?l`I{kFVSM7rph=l`bATetoWO&URY#T#yKVa z_B$M>`An5(0xQ+=W`LCghv|er^5okqyGyE(#K}c(wD7#mcclKgG>SKXm|gK#cXA2) zYB)49fyhx!_y`hWzk3~5oZzZPv^O@E3|?DQUXN?Yh^0Nbmb-p|hH4I1DCA_6oCc*R zYALc-H4+LGg)}W08Nnhd#0~N$d1=YgKU`WgZv!9p9I5Uo@@RaB@kjJts4|s$^tcfF ztptwC35=XmClyZrs8kCWe}Jq`vb4#RR;(CtVNRK4%JH35yOE$xBB%Uu5Q@ZsMep@9*1|ow^+r3xQ20LK zSDBXe{+_<){EmN!p5u}6JlB2Q*LB^WPf$`4ykJm0DZQUHmUZ|TD)TC?DkEprRg5S~ zPM<^fwTA%!UK#+-EAR9uAzlp+?HJqCp%GyYGGESkhvwxK>zur&dp`A!7?j)>5>IN0 z!o+kuR0|1qALYiHR&F+6E5*U{Vm~UqLsnwZE<>T6J#0ZO!!tEkpk}g<%hI4V8PFAP z$8_;uqp_68k2w)M7yHGYe$A6G`&737_dE0{uo!S{Mx0p|o*o|k(f=RlRgBklc=s2D|T1;Cq?kWK<|cs8dqxk?@4pSFco=F>lH-L z03C5wk60@Q`P2)D9EG0Hi1vPg6Q@x-x$FDV*987YP92ckYoBmuk3eCXTqFd69O&`R+nagjb zQ*n!U!xtBde_x0F2QtH)d?-Ozby$MV`$+W!XOAnmt&5}GlMadw9W6g(Qhvy&B!K%K zw386?JIg?2dK+_aFn6)MJb85mwA1!(HK?GZl^?1kdo!kgeE8(aBN3s7JNIptBWR>{ z1RDs4A<^z;m6@J=zIV09VU;?Zc*CGHSw||ec<Mjw!w=vnP+ZkGb_0K0h^_Q4BZG zSifMR6TDO-lBJTS+S`uSG>q&J=)V$PP|iHVk0t^T!U3I|xxY!*dBtj8{#3R~B5%lb zyxV3@-!yrLXoyTM%=u!Tgph(|uf4QK71*V3XC>)sBRo@S0-w%c{TFfU+~_ zg*hthHrtUvD?u5c+ML6g^D$l8WX%Pt0etnb(poNa8r#A zQCq#b;S6V)hV%0b`(I=anz8Y!(e(lF-`i!AF)oZNv^oG>Diukq&6x%Gx&R7N>eA?) zKeY5S0QNIH)J1!2=XvAX!?&WNO$U*LqjI=Bntas{D3x!3C70G8{2!=_Ogs5`|1#>P zO-WKyd3<-~Sw=M>QVkRMTcc%eKFWtCg0S5NkW~L$PHF+UfrHoo{{)a_fwRG4e}7OS zoG*bKSj0{#jh08h?|3)gE%F2>td*s#QPi6}+BZ5)%RZ#0)s^boerxpuMiv*VDrF+v zLhNHG=bdmezwM`S#aA&c?dBH%Qec!;zN%0=x_Si(dm>nNT;SuGT9^B1#8wkvO0dB5 z17zEC(h0xXV;yId84*K;b_X>l^`sRSEDqMhqdn@mLht?Fdsy7JXnAV$7%ZjkzO|SU zSyU{%&`Xpp4?&xCym>>rAd*aF24Uc=j=Pqg&mT9lQA;0cv@g$IsHhK}buZP8`?q@o z2oWm)TlEi&3Sg>|<|h+f)-5s<;Dh-Tvw(;4kz0XbDtRS5*-bk61h2PCjF&IY*m0w_ zsZ|fvkels`SIiNxq^y&2N{SY2i!erDZ@JqN+9U1T#^PW9zTego`unDGp1|S)LV^xck7QfeyKnbN+bEaZ(iX7r371pc^ek^F?{(Q-51R`D38MTu^ zjag!80g~CwFchhAyXw$rOI;5D|s!We6K&1w}$6l7>+z+K@+C!yyf3yXj3oxG@$ z%s#22f7^n33YB1%dh-;rYIG&rY=7WCP)*tRnqt)t^#T)E6}5P~1!{zArzmdgq#Y6K ztaZHV`%%xjzVpS+$&O>@u5V9#eHP(c@#tA1yX@HU-O0z^K=3b!O<{$P(TpQ)Sa1TIsr=F6_zqzzz7 z`G^RwOCcdmQ3##W28jt=xjBejQF&a;-DwX#@jhHv$yQ#}Q<*?&zjbT_F*Yj<0NH@m z93rCa@Nc&|w%Pp8r$fVR70dYJg!jgfaAoC>03v?zSCEI{?-vH9^o)HKnA=RyLRDKs zm)JWa>*2JLmT1HBRYz3Qd^-o>MygG=)|;3^3voz=*}i;qXwTd8N!Cdz)xt#ezTO&8 zD}z!fJohA!!G8=5_Eg%N7?*VD$y7$UF~qm(Ia8ZZL*t98X~RmWQ`lY(`)kRSXhA~-}??;$y z9SN5x6(aIS|K*>BP{cevd>ENkQ1(LMNEi%c5nFkPJZx{eA6~=^Z3_cJP>V}ym{hObFxgtbIeBbyS+mKkHD`4oU}Y=r*T6SV@3;&J`ra;8U`oKZ2^6gHyrApW-Uac9lb=}P9kk;Nt* z*b((@W##j!x9f2Gf{=B=^L(oCl^iC=5?^^OxdXr|(`}ZCtiGE*s#2wCYHT)i`uAMc zp>=xZU$2+lesqVw`??qVSMb0g+L&3fibhHGZ?^Kldxu~7GK%kJ5377mFpDN`iEMt~ zGOScA9tba!0PubQDmg$RLTm?)vL$5roN>vsxGW|Cd_f~SgqP2cj+=A?z@4k_M1*NL0!|B<1Dn8_&H9d8iUJ z1H)3}Vc*E@*R8-+8g%h>6#J-*p<7{ry{$mj@g_5C z&EAVTYB9(1tzWPj_k;ce9T`79ZZY31j3=~92q4GBU`vkiAOFfP-b&xp)&%;wPyEWK zZE0X-tU`PACVpt>S8j(&TmK7oYWG3N{DQX1*Uh<`lTe+X=TClfQJE&p0v*?3sa>=6 zuG^V$qwFAyrrq)9qAkeW0V{^wS|Ur5Gz%6w#lX$hCR0c*6tveIZx6sX<_E)H@&Z83 z8k4^7+Uy#-G33r4aCc01*LAPPPSDZry?+VF=bBf3upj@u0n-T~;X6 z=If{t%c%VnPzG=@qy+tIW4@TS&0v2`YWB#wBUPp7>Ek)1&rdbdMVUBM;KNd{>41)iH4Dm!*hpRhFKVZ2=_Au{C;8!c{SuV~b7`12!4`7A_Vp3Q`WX zVn%42!uvv}&Q+{@{Ihhs?sV@vqej~QqzPTueJeVCvMEQ;Q)&iph2f-?SmKQSeD(SQ zrU}|w%-*l~R_aZkP{zs%f6%tlsQ%Jr5lqr$-lhwR7vQF*8gU%Xi@||_zFcW{Q5Dtd zIKj3gu%eOcWEk%;Cx+G~WG*SuMBPMvn7gi0dH>{xrK+z{<^O@4j;_fAdj$!FUF6N) zhgwHPvWA1Bj5_Y87op{H(!ZD%_GZN9qyAmi7gHbLqzLk;kh(w|p+%{!l(h8wC!ynv zs!WaF&+`5nH>AVr7r7FfPk;-zD`0FDG=Vqf$fw#hw$(b7Xo7Y9k`XfIA@}NZ1N@4j zvck${>}d(kJm=;C0Q$0GaniOMV&_-_#tgGv{yd_LxQn%o&|I)^pi>$1{6cwJVdbGw zf$fmcjvk-5RH^!e1z?E=pRV*dq>Q~<-@=?i@tycOt0scN0cTKF9FWmVAyHcuFH}M| z8})Mr)M`8}%Dw8>5%E)`?P+PwmV%Ye7H}GRX>?5Mmm*ogq`Wo$03&h7D5@>!*F&{&xeD@Ty@p6WLtOiT zsm*A5f3}-=7R0osUko~p8^AGw^W&F>gyUv$p4u!FX#?Oi)qRW}cxLW0i*0|2_pOrG zO)t*o{nQfem{%f1?oI!jS$_LAOshb(a#A+fu{(`m+?}eJiDy46Rz~)pR6c1U`|>9Q z|JO^;lOM1LyIHqaZ^qaT51-UCKA4}}?h;Jsvif}%C3aSOoW-4t-nM1E6^naewr?N^C5TvB@L?yV>+1fGO|0k9BicS1~X#3x)(uP z1^y&8_SK(+$S8rfx`%>A;EaYnM=)l=KstBffAIMuY}6`1o=2^GxF7g)Jy&eIbZGhL zx8oI5X!_uK-mmC#a>HG$VPuwVC1XPnjuS%G$+-+OFfzV*kKdg5nWgw9P19CoO0SG5Ht^i*epLE##Y?inkp1hk z;_zv!w&RJRwod6b&u;vP@GA@8cEDPTxSVn>r=KE3Ynj#!{`)SG5p*EAHTq3LDS3It zXe%N1cEo7`qoyEx9hw6ATje#W?UwOjPciqPZ$|NHMsCCGlNv|N&Rq!?6$%2-X)9x! z^POeE3Bh*;y6Dympw;-wc+5d;w=cTKKtTRowXst5hhxy}*dcXuFEa=NBQ7*6+P-vD zalZX3z{l71(#D-JrU&0J?~e>!0AYkIg60(UtUJ1{H_-2U5)1DX{uOj#{^rpi#FL5+ znP{L7qxewb=aPwlt*Fh_2X`Cvq@@hQ)08C6=9g&rlJTC%gRrM>p?^?6o0ZeYv~ubuk)*_5?=C?N zo3@&^z{n$5XTxQ`;#|nVIlcU9kkusfQCHAMu2fR1L49fctq5etyyobuC8MkFVp=O| zolvzxo#GSomb1G+iIny~yA%53nI8`>RD*p8+clW|579eE4n|(Kui#oSBA$J14PM6; zs=N1Nt2Z-YxLr%DeAASf}@Z)sj#92TPN^b^u zc3ZTtwUXc{KpYnfRMobp_|V4C5or2!drRH|w((3lu0}9!BAk*h>u=%}Hh1dp)vvj| zb(7|!lZiI3M%uMmuX<=Bhty~oL4nH+vS(jjwE6(LOwV~DC2t(k!z$$+ZNK84{7Lmg zW2YCd01b~AP#^R_XR}d=CGf-SG;h2dz((e3xh7isSE8&w=L%eFsDg4{KgWrY$ zX||vkDAl12g~yh$^O`oAA?i>PaelZy6pvM35=ZC(XY>oY^@KmJ^B|#6s|aM}EMS$m zK(RFHK&GHsp+H;))E%y`>Sh+=-^9NH6?3#*8g+<5k7Pyvjw^FWr#`rxv;f&V%kZtJ zF1I(9uvbVQoP&&lY4M>GiNRwJ=A7SGvGOtLg1dFo~&9?3vQUnU3mgsTeRqZ{Yv?T7W0P#tV? zC808 zCglOFS5(_tcJg3@fkb3lGoS8_HNY6grqp)>dq7*n$Jw8*eZCZjua{JD3x{NumsoH{ znt}@%{arn*5``Ps81^vRDDeJ=_^zuc{xROh1xKvo9Es%r?hJ|uM zIVD=5beGA53;^H@1eptu%votxY9tLTvj4D4|Epu-SEm|OlkIb)2jM#6BSiy5l12!Q zV&d#~**rATFYe$63ydZ1p%ory>}fN z&s^%_{++#0IqOctmMGs;B$rx$>F`}36%NIqf6y1r*_FvtlxSzbSngFi!1a)zc z4dl+OCu&Bx3|PRCzDtL1gAbhwr3*cem~ta6@WV(uhLsMq{AbmTTNU*o{EaqBVPij1 z05CWZhm)Nq7-VQ4F3Wjpm-6aZgQ{eD13#a&0m3&^C#5>xF<&D^(Lo|5Gx5XK;}KGk z6uFRGAF)j#@+E?VW`E7ArOXf0vJvUKy0kk1^A@h{(7lL9gDn|rH{pkgpj=))u;jgC ztcn_91{3i{!4l5cE5SS)%0rSK%DwB3*d~e4!Jf}p5bzy^7cl}ocE`*eypg_WRbBz9 zfXZVj=foxi4BuE9p_NW7in}FvGU~z_9m0`~rROfB>Qmu!Howpqkw zvNb)f?$sj`^K5g*TNkbdl(|S?wiqu2?FhkvH$&VoP1DW%9k+{IS|5Y9f$v!S>b^tM zRu>?EuWP<%;r+)u!;Qk`^zL4LmgqXku@ql_Q!S)#XP_1i5Lct#)LPYrr>Oe5^XLj) z7d@SC2RDXePv}pnPF+_WG{pF}I*{zUL+nBv(x)C}0+Hf_zgv!>dWr-OwMR;65ZEWq zPxBkYJs#|E+Y@-F`e)K2BGH6_XPv;Tj3if>`c-6G-`%w@2_q;gE;edoF`Sckv@pwI z>$k}_G$i#V+@qYL-VSFnYom^SD?`2S-hK5z;>=?k_36y&wHr%TYQA>OJX$Uj#^04+ z-ZSpn3^{WrMOT=H2*+72j?F4m)bN7U?Nh_)ABD$5XJxuNy+db#Xd^-+(NEm-nCQ_} z%y3!_f3ve1z}V>n>gYGop?fpibNaEES<#AJ#;vXNF7 zO(krOf6z>Yx=uem$7c{hIr;~pEcAxdz>}gyCaRVd9=9#kDwBoB8U1k;!O~zUKuMs7 ze@^$XBb8xDhJ;)vY5Ze7dCm`rXsJ56_(Aay0=Umuoudanoz)Fg;uyHoogyzv>d54`0ZQ<6l9lZW-qy~pn=v5ye3pvIgzdCI{(2?OGy~9e(2(-XkrfC^KF=S-pf?2$EUt$-?gVHS0caZAqWBs8vvEqT#gx&U^YVVqcj6o_ zLnI}@?N;O2w5vi8A#f>JylDQtnr<9!y`$ABu9ayk=mdhK$uHXbkD9bF+JdeLu8X8pYu+;Wwas zIyJLaf=sXECqvG|?SW>}B$Cc{d_VEJL+p*lY+}!hU;Iqe2vvNf+Y4(et0`8aqHk{) z^0zOxd|J|aBFF!O&{;$e&gh!UztwWOH{OU;aIoqUXU6Tx;7mV?Nr+bWd8r(x>71Z- zQ8ccr7?KqA3dQhssJE`k^!ev|*FbNveCnFM6W5-!*gNajo)_jddnf&^bzc*7tIJ;c zr-Z|q4=hqvyk7C8y7zH!pQ6KCh&_AT+35A)M*L6z>`NY1+QK={Wz)$bE)3vqpjG38 zIOZ&Z%sH`F1K%?o72bF20W&NifVp)E2cX`8LdCb|#SlP0A@lFKv-KW!ya-3JOr*rf zB~oiiAGoYcyAKYOXFJ1uW$rYJwhTHz@~mxZoRG1}UcV>8(*-m{6wG6#ehID!#MyX_ z%Qr^O`TQMz-sPpQc;R2bcyrUj9i8-8Cc2=|T^{bzT*^`mqi>}Wn!>0$M)>%%N(qsK za+FRwhmjWhh64wUh`BIPt1xdR8EoA$gVh9WGt_W<_Wi_CvJ{{_+pYNWiC5F=k`9uc zk?2#Rw%aw^0I;L`C)5W{>{;B(k`Pmo8KJ|m*I)z$4x(4XD^48S{^3YHTev9$fyv%< zgZF!6sJ>xR@np0AKT zFLkeGU7ynC%l=BWu0Jl6-lNum>wG5|-whjh`H5Zgt`o6n?bqKW{F@8~Zs$0QCl!$f zZ`G+58OA|L^9=V8F#Ivp%841?6+vqZ#MTu5viDMk}LFgN{chHBrZs z!YObUx-A-#kSWXHeXd{YRV557R-SC(iR1y(YC>bteRpmQctY*r5fnsuhbIE$P+FTE z+_8cF>|xiyKQI`4xY$!6^KdqDG_?-v0bIWqxFM%*=)UhPA+jcL&{YTjhgm#1gM(!3 z9ed_!pEILX45OX$O!)840Co-!)0;pILHn;oDK^oHBL=h>%U76_+bQW;0QwJG_^BI$YG_SPx_B!ufgGJdd_w}xv+A2>ZyB&rGmxI~Pz zo)VlF%upTLW;Q>L0tLD>y71{1bp_bhZk$-k@ahvidnp-;7*~l@2=QAGdsXZ5mf0yM z(^M*rmR3lKDy@;Z^)Z^Ty$Y4BIt-KU6dub9&PG|@gd-wxoA=YpyDt~Dav5_mL6y;L z#&$R>{XUV!QFfW>f=rJOs3NE2ku=qF6H^TaOK_cuzw->-)yisJS{5kUu*cnv>($Bg zzCu*g%jNgfh5l+>6+b)wE`msE$**|zK0YK30>Iwb@Ke`%_MM0;ceH-_1Pu>!w^0v^ zvjJ^;%=DuIlsZhJ<1 z6wUx3NiOD>&YXBx`W2%3*V zdOYrL`|Ezv;)&ib(P_N3d%byd5QuR(V1QpiGeWjW`U}mabDa%rUTt8(Hd^tz-VTDM zrSG1|ZT-6|P?wjtcyHWH*}A|0?PK9oX+i2mKX5g`8u6y(EK3(O5!yn_d385|+~gd)9fZl-~{@ZU!_C9fWr&xiAI0dsh>1}9xHj+$rJ^a~gC{wVfx!6QXp3|EjZ0ESQ{bs&| zBhMwa#ZEBZ?6s?!uGmJ#rC+j>%&Af{|A>#JMM$_S_e5kk0yj}h2xMKBPvYrTyT{V!~JD#%1W~uKK3zp7Vs7$*HX2Pt zlA8EeD9}CWehi%L=C%wK6Yx0DtVQ{DX^=I88`)B)*~3vAqM6@p*KoL?0&7|AFP88i zI*YmK_0e0lq9d!|Jr)__57r(8xvA+*uhRufPt*cwt{<&#g(8GM3(IY*7I&^#VNZ6i z*LOFIJzMFQc252}1q5Xp1UiC^omi1+p?ZdNU(m`v+}%)itL@H)R0t%(qgpG#b+6fd zrc_t#eOFa95xWj$-Hq(uD9S$OZqgeAD!WvP4CUf^jH5y4^$kZ%EN$|NOF4loA<+!m zC4iNIy;8jO{keQT>l4+Z2)Tba$A-{POTc~!$xMO>4R%U^q~gMLV<$W4r^|@WpR^uS zKjW9z!Z$_L7?R4irI_ORLYdKpejsu_Oe-fphZ<$G|E0MfPYqPKH$l5soI{2%E1ni zx`A9!Rb7HI1%KI2KxiT(;2+v(;Fr{M$v(eR*Oo7bEYL>);|%d-79 z`fG#n-H+~R^RcO5%}>@@UFs(74p}pfsSWGdIbve$oaU&u(x7=GE`PB9^H`qfU5zBK zb+U9tLC14XIrSbFEv6@Uu*c?{Xx-U}uL2V0NQH)5`eI`x+!iuhYY1L!;?C>Rx}Y)NDJw zm*nQwPBc4xbwr6i5Eu|mpzbZi{`GI5ZB{{=@V#)_>*|R8zyFom+kB|b>E;Wvu>L}bUi4$e=R3)5@)HwlE z)x8$zJ3Y8~f4~`-oI;!KI&JEfiAzb?-gKM6H&qy32RX(CUG19nT0d%gZ4Ci@Y{on_ z2x#w!`&5VsJ#kRC)@S%)9@^p(OikMggL`*;*=$lHP+9dL^PdQ(I+c%FeT|2UyisO{ zyIX-nYbt7Bn>R-#HUvN9Tio1EpT$XaJXnpRn1|wHQMK09AAWi@x;uaLX-qR7yw%qs zNF1U^$4|md+2C{=HPVxc1y{$R7qVfu!xAd6{BwqPi1_UD%Kw417)H;z(ALbW%2LhVe6uUf?^ZB zkw+ff2XumfI_ND=Zep$Y=W65>@Y(tHdEo%>@Sjzzv|8N3sN=!kQ~7;h^|6UdxJ+n- zII*X}Ex~IZU7V2yFZWsYY#(#9|)qVyzXc zZcs{T@(E_o5##~`f#JL(TTxrf+># zhreQ?-W5`rxa{0SUuXqrbubJS|$|e55z;*q(6y*SHou*E>kJy z%Cm1Kvw<^)4Y9ph>grsqNBf5Ikfn9!NK!%taFEl|b0s$T+F<_6P%EZm@SJ4dycwvH zn59N*b6Z;|^_M|YWq~4sI6IyFr|mT&9FXRet0~VLp6YM&YV}JGyG+d}77!`oBU0)R zE#keeU{8DvGZ?;XG{cb%2JE1~Y?&~t^rgRyfl}gNs!-%rsEjJKZx9`Dq!~(;X!JgLO-;ed7boGOW_PzX6Y#JDRChb%EGwhUODZzW>fhIq zMJCwwnh$=_Kj-DaV9BpWon?S7-R($MOcbStE;NPlyTl8%G#%FMSi?Coah^&z$yzH- zpx-v*o&%%^hiw*9kG9O2TQ_Dx?bJsCv{MA9<9y#e^0nWJkZCzI+ok0G#*tTT+S=m! zP?mg-i;`cdM<1kI_1V76cY;&4LgbBRtNcY@zV&Hmz%IF7%N8GhHeI=iHSNV;k~4Q6 zR1d!~BLn(JO1I)Z*Y~^{lyTN2OJik_%wEPCJRF*5`o54V@hdK)Itho7KA4UiR{0qn zI8-X=9Sc)1h+n!RJ47BP)8J>A6OEE18$45IttL_r-@quv0VO?xGlj=U*~v5plW>Pf ziJCxix9YI=geIK4l2N6D2N1dCiuRT^wrKFM1kZ7bUf?i8F)}(RyEpT*{!SdjB=L!= z`+x&W;t*4~VkOiw>^kr6m>K^r^`?FF%(J7O%~!wED#a!fXz750>O#c&6Fv4u%vChz zNk-krNb6cGF#6c&4hupI-n#RoB~b9VmqyK9FwoZO^mzncvjf(Fx#r8BUsUtfRF6y5 zG|oO-BE68E6J_ilZcA0qG?F(AFBb`8%85y}2YK7|K@?hANAvO1hFLdqXVh3SUX2PR zXnXHtB}R#J$ySltwS~HRu*7OX_b0qwCpuc|yHC{9e;&SmM>fZ=11ejyVX3E-=HP84 zVN)(Gu{h7vmPFjMqGGh~u+O`WG;MMKjT|BKA}Q^sR?*)1cmSOtNA;PvztS*nW&H=#BrU z^>PTkH;1WUL6Mc}AnS^h5S`Zl1l8kZ6qt3c3~^T)w|k%Fk^+JA38jCHK$^R({we7^ z`TESno*<`hH>R0ckSmjJ3qhvTe&qqDyR=o8YKL4O5VrZWIQIOL*pO56ZNc!GBw^&s<~UqgN2vV*@LVkA0wmVw=b1-`P)tik%;?Fz4Uz$ zre4tu6&=l83EWz|u{QkV!u3H~q|nfrc>~}GtSK`(2sF^YQeuaTX{9OhCVsE(yHFOQ z0I&U^=~Ow{3N+=`MZcz1qZUK6j$!;#QkIFyX{cJ#o*g^)E+PtQKhwD zU*B5-*1Dnwvb6fdpZ+dybC9mvwKi9U16l<>ox=j}bJoQhCPGglfSzBfPgNAK-=$`o zfkr~luhaVt5;KI?sulHGqn3Kk-87#G zZ;*>Ukwenq=bUnnSxIZFV3v_^Hy}A~Z ze|Q(ixzF=Mhe3uE=1E0?Bpj}f2C{|9DC8dtC+A&JTspv5;W4)Z$KI0!PYH3^?W#+L zSmEjEV3>ks!1VcT1`1wTP%nIp}YHDOaI44e|+ zL4N`yre7t$(v9izc($i<1iK9GN0%rK3Ntb|j(GMqxW%6N5@}@1xLT0YnQ5#d!SCVR zTcD@()79#Hs96Z)F98BI#pA_)plU@%1phjnpBsKi_GBh^wqefSN2}e?@3ESF?RmPc zEUmUbW(`bQ?LYA)y~Fm*Qs@&bVJ6NhV4_1zi(rysVnZCAO%s{|wv0fva^USBTj5)i zUTSs>6EGJ_jP0$is6Tyc zJuh53znk8JD^aZhORYbgULf<|uRKOt7Ye~bBl4O1_H`j+tu)d2E%8wXD~c1oLEZ|y znluSV_sO8l!ZdWedul5l9@XiuH{OS}JPjVUPmsQ=W4o_rz0#UeUknX;=l}lthJJ_s zQ|qFMini)z%f7ghYrxQVOvk$U)m>oFg)U!*m{dM5%(WW{+U#A$#=wu0G?p%^VSmOc zVjApBQC~JlOPt%2x)9`1LSCrZ(RCQGdJ+>T|44Ve>ix2XPIFX#^SReW&@aVhvjOv6ZeEe@cZo4dBnT)4Z z8(jsYyh5)YZPcK?0;4+ch(|)gZg#@+3StZUXl789SAP*6LnI zFfJD0w58Qu7SCm#xFZ1s7QEUJM`9eXCR- zd!QUN*{T&uTV1mHph|Xkou!q)UuuUg+#qL6uPU{NsBMwcr2H_W3S_DgzViY!{s8iC z-nY-3>Aix|g`goOv_E+Ic6YhQPS8OCbL$>=XBEDEbT^O{e@{^IRCei1xfid!<>`g7 zCB)bdz@7NmP);ywVTFA{&fsGG^$XP_et2T;%V-!NaLS2M#}E(7=f41$hWOVZ|2WrTZE#p~$YE7!NiTb|faEN3gH{gsoGo$IX>^`ivRO@|_JL=r!AZ4Xwz{f+1xFYS+Lu9AEk5?R>D0hgH9HILT!hL9Vf2P8C^g4k| zqvP_K`%aP_&mfK0p;s-FOB-HZ`~G3h+(G>?&hq`j>ayxd4dJ>eulcAVrQ{T->&sMY zvg5I5<+lhvHv5WCqn$^Ha!}$w!no@iK|Op7cjxfr>g?XyBll7W$Yi$=5GtEeLqUH( zeh`sDvtJifr~)13MhGqlKlnVaThI8dE~h|+kHmLLcX=o-GR6T&EpkQVg~n|Sk-#vh zjqYaOUp^-Pfhxed*=b>GTHx~GQu%t1u=F-`CCY?J1827F>Ni(eSU)O z>rUiT8D`(U^m7+^Ooia~`$5n#ZPcUEaAs5ltT=2wON|{PpfX!q#Oel9UA$=YKp9q@G0FHdRJX+2l>AlxXl6r8UKB^DWA-+D6TFW&rW85RBAvnBp%mO_-ULg*xq zomz}-3F&k$+Js$L%9dNqdBGU*z7lvDEFyhZJ0MGoYwwleU0jM%)_*o$Gk-SXh;aFR9;Ec0W{hI_6aZ1 z!hz}bu9JaJCa=!pUaj;-T2G#-4eeZ=v4IA^0~&q$$+Oz9K$mglWo6dLWWhZ8j1?C? zm2@o+y+k6+b!1vxXU3SOt@0ADo%!$%Zk~7?q*G^f>mc`~Q?_>RdS{#<>G^Ai^j(v4 zlE7Fc7^4f(XccTOxexX;K?a=^ce>>>N6DNS1!QRKK=mv{E2S26T6mJvd?I~e6JUT+6;p2JtgJq-|~kFD*b^B;sdUw?RoQp$7PUi}3wolhsJVoa+Zf==oH^+}w#XWhf+;e+Q$&A!f z9@qn!Ym3vA*a#7?X)ccL-vFURKFPRfHQvZQ;F9{yI(m`Yv%FcgE$9Zyzv+?!N;nf+#_X9p-_Gf>;kospE z#k*LCR)zF=<|N)}fXtQVzj|)aA3fOhCDC=_O{P?}`coj5wO)kH#=U%v*&2PuDhE6e zRCadpKz~Q=3$5&ZxBxRhx_WdA|Fd+?KpMLijY~>weW+mx2_4(vY-@Jm_@~8EviYYQzu(W5wwJo( z7CM_I0s;C2dfhtPy6~5JGH)Uj2Vt1+OBt$xA99Pr-#NYcwggdOb!j=I}|^VEzf~nkLCA3q=(p9vR=S>`=+2F zT_N?lWq}eB`IrSX#_@w|Pi%T_+~0VQ1-_^)j+C;-@>(l)wp8M+qwMf(q5wW4#`zR`k9nQwEdWMu}DOy>i=PkSOfh=0~&7B&&zVG)E zy*ssD&vbp#Z6Dse|EVkbYgg2TL$rE1v996}6oVJT`JkpnB~o9>Nupm`ng zt~BIn{M}DaE;c}ub;VvWsy_%OW7UCq7+oK-t~T8vIo5Q=kOq0MI-sKcPYQjS8Cgb| zmM{Tpem_*rYU`^3j(Gd(&TEX`JJq3VgqFz?GzlwF=Rlx$@mLt|!dV8YN+Xb2EaqAG z!bsU3guvy_Qle;6Jih%_E}Kb)6d>FOXjT0VjE3VI%#&Qbk`fd8Tz zDa4eMFRz?l){0ubcZgtkxH2}8p<>P@GSIEiiKa1gg|~ZqG-w!ZE27-Ry!f$!aoiSs zk=`aX#A#(Sdxwn6ZK6gZOhYMYMdEn#ccdNy=ebp6+u*5?X{uyq{L{y!PW%29{9(>2 z(ONK*-k}@QQHJ=sZl~Tz9`v1*BFvWw|3uMs6L}rNfJa&GJ}C3xYF$#{eJA5&>Ibj8 z^0IJD;$1>Rwc+N}LdO^AdEb3E5wNJBDlq-8YZ8CAqtPAA-vDWJh-;q3J_DzFB(t+- znY0JONTAP3F8X+iOug+R1#|3m(yj6G$>}h7SGN9;oE=3HB3tTZ-&$PWB)X&>!@-)Xi_!gaCX4ev66c#9I5ys=U=B%_9tNpVWtc-ph6?1zvze&HjHtljD&-xrcv@-e)_)-VF^I*QM}pm{O^p3_h^;|1 zl52V~j~q>O7|M}xz{J~HY7i9yWk9HvZ?O~qT2FkA{&qsE`dcbK4%8kP;Te#Qp7KnJ zYbrlP(JD0hqWXxVz{_yc9?Yj^2vr?>_!e*m@npz`2brRDIP2ZP;!UOsYM2CBlfx=S zhKha`NB@Q(fKE(O4ZF;2Cy+X>5ut^NoSaQ#dgq6ae<0I#E#; z0oqqK4N5lNcQvoh(vog;AL_kz;HoArw3R-}h@7??TzW)c? zKqSBOrW|+*oPHWyc*x4*9f!=BG2+Urn?L^mk&S>V3?h_d5eXw}ZS0Df4dcSxhs%c# z9}gdqfoB!a=4a$TDF-AE5D(SbN-!5`7ayQQt<;<;_5H>#t7x8o80kLJvi!R##(JS%A$}le6nv)8Ilaos2zBPnB2#2HO)$V#ilXA^U@W!ycF zyrVY2v5>)&Y%M#*o2AORS`jKyi+18EfbBj;qqUUf3@YNbK@%sGs%(t7a!iQZG2_fp zlo7hZzEW|ojXI zA8zx#{7g4&0g5Prurq}l#M&c1cpsIIIBbOf0A5lT`rno|x#Tw=8OfAmDu)s=Irn5v zBl7U%&5847<7NDK?T9WGMIZi*b2f95Ze@y~jqapla)UU$#|GZgk=x)RZ7ll~+#MIC z_a{r8;nKuCUE%3If&x#+Ygic>C~opLHx2&Hh#kqt%F~jYAo3BIH(;t}qpi9Iqb% z&y7Ym@MCAknek)CQyMel$H&SCkYg8xkK!t17(A)s-OJiCrYq-?gexOmcb6JaDEn-$jzfX_gPRY=AKkTg z9B0}~sGdL>?7@cM#J~aHXn_`N06!lSPZEhjRA?uCKH`k1bo)-%yRk*Dvay~u$&GQc zzE1037GH-OA>Wb5lz@@BBWk+52jZ;7UmDU>_JxBD$7%|cky@el27zNMwSX>E>|m)= zwua@wEXy+c8=lY@%~Fj)vW7fyz_OMRT_#L;m@kOHxz*bk$Px0a%fVcXaq^gcBku6B zlZ8fCT-etKHFhbrYx zImMXx+~p66+XEL&8IuQ(D!(CH5@YA@i1?U4g^+R7DMS;)NHC4Q5K7~zlM{%b)wzQm zG2A70$ZQROA7JN`j$I+bVZ} zxX^oCJ>h`%x!wY7(JIDmAYwFpZ@YC&Sw*iUN{pBlxj5|r-kVx@`+TP5jg9vr1!V&0 zkgIa&1`^yAlwkKHi9&#=PjlJ>aFaoy@1Qb__JrP)K_p8SMEP!@r{fOM9hNY;xQUTG zu&7C8U_vHR1GA!$lN?su*?i%b8{|wla=uKUEX|t`RLY!?F^p3ZyG^Lvg~gFMAK0Uo z&L1BUGnK@(lLlNz`ksHR+duK~A{8*{-d=)Ufa|)aW2Nc;0G&JPD@um_13T%DFc`e_ zGUrBj&%Oo>+ZCBWQ@ap3vg9j|5OSCZ$jUI|&5`mPPm623`<7=ZiJBC2n6oJuxOf{H zjy_z~znhSZSa3UJUJsKf#;VgI{{UZwh-U1njuBC^*7!F^z_d90AqNi$J`8x^M_9vr z?isOdis-o6@qnDHZy%B}KS;DF~ZXon_6%k#!D?qZ9* zc(_E!xv@4I11ma$7%0l*C=3K3Zr;HPW6Lr+f;jwkL{2x5<-@$E46^uwI#xBsPPp8v zW*Hn|E**2L)>b|YzBd@?DqE{h4UY=ihM|DGRm7*vgR&=^HPyMaRwZ4B=LGt0R=gh7_(EbLdx5CMyB zGfL`KAS5Fc%5kV_MrW`r8U2tko64}*R62umXJ9@Vt1f#PSD&E)>Q6h<9DxV z-glPCN`cd87AGY;>5?qsFbt7#GXl5HnwK3Cxo=Yi}mj^ z@Oaq4^KswuS0+43$7S5gc?d|^=i_meFr1uR*`2WXhD>NCYzvJ;`GK$>vuRM&soO$E zgizGV>A7?70oLXEerB8O8e_KI6mBe_VzQ-KV{RpI?LJ(1=0-Ufg}N8Ir5nR!@V{Qw z%i`h5n~i|rnK?OgmP$N)--t7|T$wQ5Oc^p~7^?+ha*a6_&^RDt7n2eObt?$Uz*IPvoaMrgkOlK7II@Ldm7Q_1 z$ueP0r!g3Di;p>&c-e9x z;V#^m_`-PT40#+CEa>(f0SQ7?w$REKE;jsxpvp(}D>f{EsqK=Sl!^ox!6yh1V~ngP zVy(KBoI#LNFePDtK)uS;ZL+EYL|o3Z7Ip=*fHCI5(Pj~P1}FtLjhtQi7_wKj4Bn9#fD#^vm$BglMwhvSCL=EuJt8J`%+Q!M0U7@G$# z8@^5#GcHuklJe(chmFd>xijA-xcM_<8TjGC`4VKrrPm&8c``M*e$wU5*vRdAnSJhD z`(Htq(RZmDUYD=lfB)J52mt~D20sD*aHsE=uZ-uwC3>rKOBXyK3Jm@P=OEsvig>Es=%E~p%{{YYRNwk^lE3aF^w(s(>0y9L9654`# z;ilt`b3JJ(LVDJL_e}U`EhcI~?QZ~%Yku$IfeRack(0mdVtwyqBLIIm%)Q)#?7ip1z4N7_#pp1Fj z#-SL_%j_}~LDJY>}X|7Kj|Jncu0RaI9 zKLP&$c=><5^|Gh`09sCe`qr=i09&>Cqkp=TRaEwvf4t4@J<4;(pYUqVBfKXC$1nE( z09>z!wC2i|RaExe{SA26>DzK_auq)1`g>&ak#BV??eobu zwWkl@Pq`rV|VVVlGyn+t7Y&|Ewn^DR&U#AffnW7o2p9*3A;#cXPa!tz>(-|KCynt={)}4^q$o=2%S%|5P)T0iwVcXiA)SvgLom3wF z#nT6mG{PbCRhdVq*8c!lfA>A)nf08b_@>*Aj&~>>WyO_bf8M8GrbMQmWXS&jy{&!2 zVfe1I-G}?y^CBafZJ+$V1Y}LsKDAHxORD$;WiH|Mx_`P_q*x47ZAbqAk^B*q>m&7t zJ<0z7-Az|NC|zf}539cr_WuBNDU8-Yzhg;;C=pm7?$Udo6r>BV`ZtXVZO{CZi+`(J&Euy~8fAwxV*(8R*G@@4PDG!Q$Z||%Q-Z70^-BK$ zr8>OE(N&~J%08t;emriP!}ybnr^k(WQF2F)f;Eqo0PVPN`pGkpMpnpuW0H84k^cZv z>5o?KS$3l-my!C7eXe-_01~GL;cBNfb&_P<7~OsR1jWTu)$(Nfa(u==Q_@r5n`nt2 za9vWSR{Etqy5g9sEY(MX%eVbNW%F7+sm)3Hi7EIu*P0>9=a<$hsyJCPwK$9w_`2nS zp<<%fi@!BkH+m;*>HxF-N7LIsryO%X!0Bw4JipV?h7lhhs6HOnXX|ygC;%J_06r>O zi+3kf#^^WG**X#)!+RW;C1-9mS*p;@Enub4`t$8u^&+Di9p6fRx!uuGYH7wwaWhh!f3jx z6+N@Lx78Rp+>Rl6n8Bz+a_N71+Vq+xSV;KYKl(Y*Cg#{@)Z zC5P0h!TJ zw+qCY6u`Om3m?>-Bl!JAzPtA=NyLMLnldrd5W+2HTFt)KLvvzh(wM7rsS0tFr6|gg z+aityD}s^Th>L+sIM2OGduKrvYg3mrWMahp)p9PLMZeL$lx}?8pGX(S+I&?$uT`Xj z;+?vA;Iie$s+Qqjt_8_ea#c_522O3jjx12;#n;}1-ODvsP!a;?h!;+a+i?&QsACNI4)o(Y@&Cj=h+H z>&F3+ZaRBRY zmzfJ}?e6;0BdNu?Res<16EO#HkVXNljPU(~olE@@9kJSekRg(y=6#;u^q`Bmn--SmGY4}t4k64c1q+TZXz3FA3 zKyJfTG}>BfO%eUXW+nTN+!GDmf(usyrTcCDh{(gG&&v>PMHuYE)7g$kQKss4o=Sh1!Mfky;*JpUE!&0CiE1sTYxB6H<=m z<85pRfwxgs%?S$|6)h#}e&t{EJw94L(1hvE3BIh{SYoa<@=mCm6-AnG92%Cx+o#p3 z?DUlQaBNd5r$M;#RYY*@MK%e-dopa0A!JrzJ|4p+T$6(T0K>G(VlsAOjA5p5h+zXd zO1Glh(+K{N20NDOAh_nWe(lcWrPENxSE)v4_QP^po_Uki+(HLfj+fJkmv|xk7T)A$ z4CF|ZUZW~46ONK8_GClqZz*4?CL+Of11P|CHO*+EW@$5}taW$MMtaO6t4!f6?M6Z; zb=wnGa^9KJVZiN{EAgHnQrv=BsWG8X(nl*zg>XDwv@mY31sDJ+eNI4)_#(!1N=H#)LGeTO zvyhhAB4TlUQIUG~J=6Z%_eXjR&8egZH$!9h8)5dwo}lHgLcK!}bj}3zRK?x2vWeJ? zOfCn_Tq%MA_CO49x`6O(u}v;RE!RE zz^U#-U!01Hu+3N6j7@tLynl|6?D(dR6n|{C2tAcJY81g!+OO0H4%GYucOej5ra0MZ zYuPqF!PSl`mO?qE`oA?~&EM@lDT<-52US&0EyPYY#4TJXvMICR4tOqW`-UpD$uniI-AXs)Cmj$ ztviuBI;RYNHedDtEg)s6V-Z3S-`tB2HrNDryRFd1f2$z$KZ2*U00z`=y<^|)xxdke z#-GBBjtP&DSa5G?yinw+zzhe~weA-Dsm-zA$%h`B=A6ofFf~pts(qLG!OMqk3hY9? zb4{k#Ox4X++&PXFtD+5%Ff`#+WcXy5Cc!YWW(=M-$qdtF#0CAO2C-DDs*c_aeV)au z6-xgA2|HWiqC>>p`%#|E%pdX^crD0@3B%}2{) zV1F(&UZh5d0$>P^oj`r)?rsnVNa>`(=L2`lExB!OdE{d*Sy4(7BN3_TPH5_>uq&p3 zd8CG;r~uI>)UqD8kp5EN`3e;KTk<<+rZ5Jgmm;A@dvkEgasL3;<%#T5+;-fS{IFo|yMk&=${tu^cI(TkNYA}g;kG)J! ze2v!qJ-M-W?L%XEp}8w*7v|uo&SO@noi5^*bb5Nhc$cvp)~1M)5_&;?;+xacHmDEx zt*w1Aa7mn8HZ;XbE(8yhfLp;B%7w0(`gyKQ!3pbW8Wh^yHsGc!L`U>Pvf^B+RalsWV-RX%s zHsfx@{{X>^jtfw+14?sq?P@rt;O3-weOs0)T04S$&je>7phm$P_MSCQ#gL;M{{XMD z{{UTon*=%Vsbu%#rzANoVRBk?#c69MvG!S3>5cP5-b*5x7sAVurw2fS#9_h8sAW|| zM5}^i2*nq-3aWUfKf$DC45Mi_N%l^?nI4IgaDN2*kEqz&y$?{Ch=vYqIVk!&U>4J7 zcg=dx*^bl&bwU*P;I+y})XnOn>PVe7erd^O$r4tZm02-voRD(D;&hDvE!namki&hvdI35*TlMWQW4w9{8@h!<0;mK;nG45CCD@n33 zA;t-txl-I2P+c-^<)VI5iXc^!F4ZRD%Sot3xB-#}6f#>GLHNO z4J+Odm;GWlk5H6q{{VQhl)Yy^{y9XK>?n!CGL{Wb6n6=%uAE;r)n3(35`;uZHWH|O z*$v$ym}d7NFn}8J*~eiFpX4L6;uLp%mar8w>FZS^#F44<}l#!fGQ68kUx6B9L%X?muL}7*<$e7p~ zAH&=78609U8G^Mmw?>j!M%}MvD92@^J6roy8ii#XLV$_t52W`KRVeDzA!!_AgF2L>=a-Nl2W$e2CH`4;OYA>^$%|m> z0Q|gMq8(G}!-L7rNQOF>G)cI#q6H+GX^o9|IkyhqXEi{d+pafF6ZMBwR;p|hI>}Uc zCgI6Ed-zDFD6%V6(?+8u)D@0O>Z?=HGKgxYm5S6eqN1vzs6~^CAm)fB7LwM=sF6{? zxJ*LQ+#dwoDfNmEVV5opY8I~~twcQy!o+EOmf(az^}2QTo5v?phJh(<#2FFK`k@ma z#cGswH_B+FbVedf7;;8H4nWl~OsZHSBh)Z9Rp1D)&dP+oK^bnEyE(7LXrANkVj71G z5&gc*eMm>B(b(X$H&8z*?!iZ9F#SSb)HRo3QR!`0YSdk_MQeT0XfLg4ehylf4E{K8G#+? z_X#~MIE-+3{{S_+{{UI^$Z0yoTwLUgOpd9Dza|=n-N(^PR_?pu-9oR?o<_@6}=gZaNr!wq%Yk(F6 zqrJHEpOzbAJlzAkA-VgV;^Ycxj!b`n9id&e^K&S~c_mit<5bE1tJFP;yJV#=G>#}A zdZ$)4PvVB0aK&nfprJP4%c!!au)^q>(X2CCi0V0E{0Z4RamlQi)7YWUg?Lifs_?7T zYKeG^7NyMu!s|+)@Kh|cgQ;ovD{$24zFaz&N@Iblk0pSSZdk)q*TI2ShCS zAub2#tMqhE{3tz_$vWhyiSJSyjS0r!{8VSPFb3gikj%&CCz6))##_;sOk+@aqd7fQ zICS~G3Q+;&8k2%#PFw;5RZa_}9D#1->Cy3el-rKM#9o4zT~d^G$gYpQZSL(yt6Ry( zcybg!aWHz0w}qPQ6GLp*=G>qdIbLY(#JlJ@8vg(!JsEnCJy6%>6noyN!f?_5028Qp z2`$M^USKPwk4U93TBKwm0|<|Mqq`|IdwQvhASFnWWf6%SA7*3%dZC6?U#ks$V!ejL zxdZDBt&m(m6F@O#DGlc@s#;}J5Hajhly{EiKlVRyq+mA3SGt!gRK|_yj=fi7Q0s0_jAS_sTbho!>z62-bM0QHoiUN5 zO~{Sc{eRp`NA4j_xk%hEP7>7vm2gKn4RRJXTB zt2wtx?PNg0{{X-}Ex$L+a!>3x(h_j?n;iXvA|0%{gT0qmm7+Zj5UYL;gL&k%m8g#7(Yk3W7RgKtgkvNQc03(Bs$DS( zK;Htp6Z>^k`WmV#swx!66-$K|zYe2*AmPKcN@IFZ0?`JD>XxaVs$_9mW#$wi@m;(f zb5~cd0!{Etg=~d%oDgYO^J1v(Zl$-R>E}|v>l(shrbEhYsCOuB$8>JSC8>vRH3-g9 zfDzK+q%vX{vXu6S+}nX5kxs=Z=_Kv{0FVkkL3(>)QH*OC$k0D+5tpYT9iN&yiyU24 z&|GGscB7?$*H;qmz#!3mz+4Ehq9=46p=Q66ls6_p>X(>NgQ(~fmEvstxh=uDFHGqm3%M8~V}F&=G6!>X z_y(~Y)~WgTOP{8v)N~5Z9!br3u(BYUFYaI6^)A(@koj<7)`Nz85ENrzq;QYgoCR>f zI2BcHH>OJcH@y?O8gGxa&^muM3#Objy%T+YyeY$~sp5;!E^54Pv)};_$y%n%n$mDg zRS|UP920JIrX9+KY8WbDfD~25X+T}>oD@#yiV=<4sfU?Fk2l*64m`@DrzBx6}_so)NJiuXvRB-)OvuuJ?-Mf z+EN|>*=yS0gu!UYK>iscwJ7S4o{~*J{z_9Z+1z8N(|)edVx{^b1bIw81<;P?PTBKL zt^$btzSy3hG>?~0EYUEH4GR)GmfxcjIStr`7p4_X#vA_tl46&jk><9eEx5u*s6rJQ zy9)Hr?b})P9yL9YTacHiW^~6*WAaB+x;~gNi1Qs*B;-QTyQDynM&PYKs)ROohVgwy zB+;FjncYWhY<`&k02qkrayi|?8#3FDscnfuc5*3X-@iVL^uFHVBH0wt+S9xX9sFd% zg^Cl5j@Il9T2*5AbAsxhRb7j-R4$Nv)$nIfEzxtSM{i;DZI^z;@jAN|sHyY~#=lV1 z&wxf|@@BVx&GxCyg*&xTxx`lpDnZ zi`SP58z5hSIEx^2`YL@BEk$Y;HTFiL#L#x5P{Ww;M4iaRpHxX?cOkjcSBTB1&&_&U zQPg7=6SZ?(xN}dX5=%+^xuGe8TVzr9E@f!jtgwpHFvMV*Aq;U=Ae>NeBt@5~7|D>7 z!|DZ_0USyiO#=_P7?UHta4jRrNX9XPikSfQ=`E5Qa1dx0Cvr7+9_8vzTM(R>${ zXIsw!zVfc1Z-yxD?TBrhBOn9+0LAE~tNel73Xc`HIqwi8I-#Y=m*BlEsY`Pg(#^?w zo}9npDqEU}gk&^sLt9@PGLhQVwY9iN>KeBm%yNo`#^fOhN}^RI#jd5Zy$C_NWw<10 z_{0i@zbQ21x42t$kZNKY_fqs>Ig%esT;|JnUePm^HVxo2y_C1NcMNwi+&2^Q$Tw=+ zGTbwVPJr&u_b*ObHn+cTP)!D&PF;W3J7ax|#xfd@H65ZLKzrO9SFvu0$Ux}=-A1lz zo987wfsbt!1u;WvEH!lM?c}t6->ZIL3CZXml7`I48?tiTTES6uQ|j()7MTA4jyB^? z?j4^-@~PyXg>0qr$2Iy@BLcLwQ^-{Nm7TLgKr=QUi>lt!*%RhCI(w@B00IHgBHSpYBTk?XV$%~u3_HSebjqPIqPKbk z2a0cPmueCgT-9+|6eVee&1uTTR|Md$o2uDY3o47%(+m}Ax=&EWHb@VO(`v0U^I(p; zwUsYIQ}={McT`$Jsv1xpB}237VCQsalA>%lQsahdP{u-?t4{Q^g4(hN1?uTDkbeid z9;U=MA}Ty6D2bG18Q?{{5z=HQfT0Uc*k`$WrYV7a#X7H&dYB< z`5)ZKYi&N{+jV;OAbwe2lOY&6+JsC+1&?BY+ihSI9eQHbv)xPgJCX*&R;uM|pnT+z z5T5jm&ad%DA&ak5_WuC2{Wumf#QqC*I}y@M-Rc{Xok`oNW zy|FFn7u8cHwXC78I(DX5NzNIg5?ev2%w{uQymthpF{I|ywkmt1<6P@hV}ZH?QIL=) zQ5}>`4NU(4HP8afRIpN+gUs4SwY?o~e&>4Tk*CAj<&vmm;@?#C{{TKHlBT3yhLs0tEN?t!@r5x~N)XOptFBeLx4w8wSOYkhQ6bp23h2q=UDa`KWrkU}+s%P3rY! zEvX+*Y@Jn+uYpnYr1E0YkC>dK7wK(Cn`#;T%TfKb*b3O!lPxiXwzS+3PkJ-l1jJw{ z=*A~gi)eG=w+V}xS*fSFdNbM;>4e?7vnWSip-Od{Fb8s@ zQ~a_*JA}!sda2-qAZ4?xH>>i?FjQr|wYNPnXi60)k)r*?_QvMk_U7r*&dqZX%}Zp`WBj9Yd_6JnW1Y*zHeu9RXDunK-?LW|&n?|R(dXb^r z4II>EBIlazLm`3zsE@T z)x~uIL~u=xDTSnJwZC$3DfJ`I*&LAO8FEauY?j>>6;t))D2M3=&TgXf24>+ulpsXj zwn4V^o8FDz!!E@BCmum{ zN^o|d$BEQfn=0L0x7!8N*nyTQ&-lhDQJFV~vFZ_1Vz1zjJFD<22+?`r|69 z4llqb2f1IU;GIzz%(EesmaSEA*fRY}j#NG?)`sU#sd;Y9UJ zF}mpq6-AFUVX_IpmiQqU#ocR`?y@M+w>qep z$<9XI=;`u=&cia8RdeQnjHDwI(-$leHY-syS|UUqEg4y>n$dC(nPEj*;_Faw8I!X; zLT%RS!xj2vqZo99V%23WduCgb9Xd?`??lANQGjoYSr1Ei#$BlFYj~eC^S_GeGCD^{ z1*6aG7QHVh-K*k^cHeE{9NL_d`m7~V4a<@ECzQ;#MKA@jq93^0hP|+95^czkqw2zN zk-tyhiv7Id(qS&GUzLqkt+O5PP+@+>Enl{jG>R}DB}7kRJ6f0t5@I`Oix{19A-vKJ z$ql(3W-n8hKE(u@FWKEu(#A+C5r3mDxSuJb92dh5%UIld(kJsIYb`irvy>w!LURs@aim0f-#}@EmAbQ zE~n6LLiE4&`_noMDJlZ1{!4eG8DO-&j2wsep{k%_sF-4|HF2`3R7C#(2qizUbw&58 z9xcy~MHbw!*s8f;j1$22x@p}}4NFvM$Z%{pbKu9t5=}7eMpsXYIjZ1^7g7=y z!8M&cFuKiZvedGpD3gf7?zuMzhOgC|E)KeErZ-vU(jW(@u~MGda%@_`G>Pv)$Sxj* z*FGILL)0Whnvfi+ZiD2I6lVDF08D8zFSn0*K(nn`;HtVqNMV>l!x~*P+M#Qdy7{IO zK222(T$KrkM48m&gKg_3fb&Gg9$U!fwM%o$VXD2sP>|PRg!fNFvqXPIDL{1X5byoe z3UU3$*HozzZW|;wcA_B1Gh8%~?4`N3KqJapwaA70Z~GLSx4eB%IF+I@p$-pwC%Y+!c~~B1{2dd6@#n#Z2gN@Jm6o^cLRD-* zQhT~`Xch^L1?akH5Fpi-r1F!soobi0UK-^5tFwh!F3wv{SY+`?joDiewf&?{K_tER9`iiGya(_%1QNP=<|Lt5@IjgzN0a_PPjLT^h3<8nK0@T5GBUM02DHvvyK+z%A!D@I6mtri9}0p z4MP*n9kC;#Rg^Ck7#-kXDq*%dyB?QYQX0e|De4oiQ&pF#8OwAZ{bD*m{{ZBrEd_;% z%FdXdS7>K(*l|RV4BkWyL>lr@^!H~k&oPm$0mv=i+(;S2QwdFs-Ka=HQ`(-Br*bme zI&_gjqqs!Do9Gfcx^QV@bqL7PF=&J1PSxq*663zlG%CoLN>%-rP4b0MRvqqFJ;QY-@Xepz9Ph7&QULRT25`ZO4WimADD zS0=#`hXJbmktd7rI=i@XC{9h)Y}X~tT@Z#@M1_YV<@OHVD1Z3W1I-WFl$J0Ta}&nQBaK zhA+a2iM3mRuWEkhWmMc8R27j=BW3RkL9q&^$;~9Qb@4~VRYo(r8mE<8xdB$e(TG_l zG(`yu8~sO8wM~u)1CkUBhybz>0&6!AP5hCLK;RtSR$7VDVlmnh*I*j(W z3$;YE0ll}Lole;)ZEo$cBTXyb_d|DLUcBWhLNu4yAu=W;e>IO{1@BNe`hO-| z)m%p(=d zE4!$Oi!DCQ6JoRzSdV&nORG(|-+>hEJ_r3}3$o=3DpVDu zGOZ|>tPsH9zqx7PXth|a1wHaansZd|N8E?GI(V^(PH0mqpxB`xE`Y^S>7=_+7a1Nb znLcYv(-m6a>7C+=zj~yonA0a1=Kv&;0&u1MnK0L zK9$I!PJFnO?b3@!%&|s7%DAE(o`mvKm+j~3Mi-N#)j?iJNQ1a=jDGc}b{$wPUoL8k zRO%Y6Ss0Tz?YBuK_)BsU(-A{l@LZQAV6!D@@%t5im3Ih9yH=nyzF2snxLRaIjVYuC zTabiw5;}mWZq(YpQ!EhNuAB*4WJ&)3ktX>J6UWL09ZEnvBjy245Rd9^Qvy_mfgdTE z9x+f(F$N-8MBt+n2+MR3+r*ga9K!vx?Y8t|GaCSI#D6ub zc6s@j{{Z61!ZPX?iJ|aYx(WXPt^+t=D??L?(n%!i>5O$0BeUxbnDoa`#kz-rhp8!+ zXK)L9s=a7S^$Bw^)9|v1-u+E9>a7ZdHgCLj@>G*oOsy$BR;5Cd@}Sa7=ls9lvQ?cI}`DhFf{ zFGYK*8iYliX^A>V%$h>@s`dmUf~^6f(~_lAwH8Q~W>?`C$#p7JBY?|=)|I6<%A#M& zj&DWr95kFPuh^fO63q_<$qo!?pV+OH4+dRVRzfDqIU6cdP`@?lllY^R6o|dYV)W&B z`A{mV0$92xHu^fI28gwfvL4FxDD3(GRrOSIbRi!~A*&|-YtkFKNqUmq%d2)WrLXTq zKTb*2*){ov+K7k%8Z8%#>iZQ9f(NGyQm2_H=^eE`)2FNcD@OCjb_35Ir$2%deS0J1$63GvhKQL))4)29qQHUIMn4kjag5Al zP8L}`>Wi<8VPUWE3#SiqKZg~EW?nA;{UPOlpM%X8I`+>|22U))#iy;;-= z(fp#cT6XunIgYAHN?YH%jJE(L700=5>z6`47iRbIlx>Yr^+u3vp4uWy+0$xaa#J<2LvmASU@=Ve&1u>%JcvypQ)Txm;8bY9 zWsWK_jpbmQcs!-rpqTKu*HTRmU_9sp5f?)d6Ly5qOoSaCdS*;F|H((otyinpJJU z4yw6FEE6B6X%q8AtObnY3DPN(M<5zLtJxF z*xx#8eq$G^h})m*et7i_J)x=;hW6nY&{CQ6=Cthoq)m<}da{d0Y|Q@v$UjNun{Qw> zA8^RefD2$Hb8-eo)y35soLhAKdSd zBT)@h>AQp^EN$(%px^*6>H^2yi~0Pc@kVm_kXnt9_Dp$j)h?Lxq8oDRG9LA*orY^n zdTV}3-O9~$n*G*V_e)Z-Mmk1eu{_h7Omz6-wCWYHT3z|7+E!0?7}+y3Am)PvS#~DF zB;ysS)VCzlA1TI)PHB$_?Z&bTT&1gUS*#c9Ls^YMS_8%wWhz`zkq>OttYl5Dh!$U% z%A#G0%{LBKp;D{uK1enwd(|vcfUEN0xwo+C(fSXE3i~#=_GxZ@#eRse)H7U_E)$e^ z)TSbW%0@>>%{eYGJeGWwdQm?FBP2%(7VT7_=7^HW1PMbK1zsG+1xMbgM8ez|sDyrD z!lh8A2C4Gk(y?77R52*ExH!6xDlCgFUMiMVK@CKh5l+=hASD-IoLzO&S)&Qyx@UAF zEGSSX3>QHfXJE9jf5Q|i(#8GCv?JbzQVu?pbKzX>6r))+&*F~cWGA}S7>O^|+|n-5 z7wsr|axaWoz39CY>aJXGUP@+ll!Hfs!7zSky7Mf)*e<#eg3}8UsnvUOL^9OJO`U16 zYBTt>3yGm(Lr^3h<2TfL}jVB)80GNl~&6=Ia5CpzG=(kJIj#(jy7!@B^YBLeH zN|uqNPXk|yj85Qsd8omc{{Xf7fjAHSa3tHgkUDe&<%UB5eZNe3qjRkFsKHf%$-TLjjU?r;{pOJ}5+Dq-8BTmJ#e)rXF^0=(@u?(l07^px}(L zPg0{7sJb8(Q-adYh*s}J@Z^L6wg|nmMH+QCNy!aW%qZyF0^puXE#xB$*E9e`yBjGD zMUA3_eAEt$SXd^_FyhL*36+961BB+`R>2NQt&vV_pST19BPB}k&1%6uKG)p86z0pO z+zMs!O%d-^3BA5wM0&pjdaHI$QvjUTi5am&A~ocz!P&TT&1kx@uJX698+=Rcrs!btx!F! zn(8Rb7W~VmReVvDyum>C6$}FY=fMd;)!h-e3mQ84Xaf?ZH>_^R91qew%K*CO1Rn0{ zLvLtGGQOj9>>@IVLtC7{r4Osbk*DvGx$p<)|@;+`aq#hG4|Bl@zC zChdigpYC?F0vo2S&CnYxc793Ro<}7SxzaZQCmMwEhM3z>3|75bh%^|YcV2Oi%3bS{ zsOXt^m$xDn$ki5;xBmcYj^@tbo+Yq3RcwFQfRTs(!Ine}kkZ5eCL+w?otYgwM`|IQ zOUxe-0+f&L92-T1rBBKNmf(eA2s1R)TwtO4LQ>UID<*Tv)b}9!LSmAiR;asks6qEY zm8uStd}yV8$cl+Vp#BT=J{3M5zD^LG->RIpKoUy56quOd@c=Nx}zmP9Om=#2k|kWX@%v zE>tB0)aHWS>t5wuH|61arWpOos75s4TL9}+tb}47{fOzTjSHs*rHc0>yCMr&HP*SF zsd+%jI_4B)z_Js$i45v;k$7{>Lb|@#s!@#-%1x#F(~$Eu3C<-tB%Y=Brw7GXj(m}7 zCczR)ZVr4GJU9@^)B6mLpz*GO=fV5)!=;7L7-v`hzSO|%4tB<7k@{{Y2w);XsXK|EJ9Fjqjz zs-z=eFj{e0k;Ac5gV}X(d}CzIUQ5%JL9z{1N)-6#!T12GDlt;4vgd*b>JCw*6?=*! z92S`(GDXKuc`XHq7Ar}%OH@J9%S^kl%USh(=~QrGRR9qIl}TcA^;tDawYLLVUPB zNQH13&7Mos2SGM<>HO9sn$l2&;3pG!2%jYC z7BSn(DzTJ@{Mj)YK)@*O2GOai%2M7Mpv@MMq0NnZR*i{FNVDzyy|uC%n)IC`pr;U| z2T>ms2IMt161RdI!a8>Jume3T;d-57+C*c1bSiS&C7a7J)EgpQP7{m<ktX9S%pz^e8peshTl8S+;61gU67Uy&qd} z%Xf03H}|0|`0JNo2oOZ2JALTD6BvPHW8uN`Kv~gqR2vLapkZdZ84IR~W~n7Ou^uRq zlBMuo{U7lpv1Q}#YfX6>|Gk)1bJYA%ITDt(Pn}L zyc3IiK%>F9*XX&XL-MLrV2Ht1lt=r0>mJ2GuT`fGH2gTVl@)v!Z?fsuN`>=PTBU3e zAX=O$$C7Iws1?&Iq8_WLK1uAIsGBShd{Bs}H*{iakW?B|%8}%#8J4BfA*&*qee0%O z%Jq9KD$awQ0Ai`st4GI;cs4vAf##m%ETk|*J99=DV1YDzP?-A!I}`f@g&Hk_0yQHA z<<+H0#Z8KsdW!@=QRRx(2U3y89MGP2E0_!WflPjDvI5u?)?%0tWpo2|jJcy9o0>VN z<(h^Rwke46ntkZ$=$=?nTprJ%F^kAvs8cfWqi)-cdb6E^AKLn!+OA z(P^CFA%?Hyj`f^~n2UDRLqtgiM?*#NFI64Q&4>_AnMggc3TI^LZ#KKrnOdRL^wI@s zifuhvEl~|I<&Y~-uH?^DBq$pgvV5$F(H%zRss8|uYQQ~!qGcVqLZJD9spPb2qHi`8De-k1?;3~>~5$ZHKtlbpUwSLV;J;<@~T9| z`+g~mA8;B+x8jWDw)$)ttB9g-E0ZHf9>cW;C{a7_Bmx5_1HJ3qn*1ucl*8DnGB%ad(~{{;Bd0QpTQOwBFujBqdsi!hi>a9O9pQ2_MGJt(z36WP$s=!_&5Q;ImZusNciBu+tp$#r>3 z2Ru+B#RXD8!D@-5#X^)07EWq8u9C$J&>@7eA9{Zj>sClgHr!Ge#U0E7{Yv073#LT1 z`%}u{4cJr)u~IYWDCz2pwx!+edW1emN;^PC&v_!?5KSa6&dHjpikJ5-RIW=%xy=!Z zWgWQzrWlNHso?J9-PB`da{a0CPb#&M*X~g)@eJ;Sw%Lu_`KX=82eIkirey)W3Wl_~Hwk?LBS1M-Jfo&E&om$^&SD3>Y2K0A z0E)`Tlje*(&=xDGX=n)t{Dbn0RHLc4Ls+x6aigZ+hom<@_Qm8u7#peX>yG1(HJ;Xd zR;Ud|#x^6xM2)z?@tJ>cL<{NP4rQdJ}H$DCeEZty&^JCrLw9&lw_mGEY4~(ZkZMZbo7yFe8_YSMy(L% zysVU^imG9XkdP8`%!q|W>3~#;>akKCF=36SCglVhcZrS#Yh!6 zza(V(jzvBgD>=>7n03UtJh*8K)7_Is?fsf+K*b?Fd3Py>G$78p3Zb zNcB9jR$`o44|<}deVY9nixvI9dL1U0$uNxyI%3?BaM_gMIVcfV#Tur5lyUeYUX)|* zUwSbv3B)G6e=tnD7G(}-a=NAn?lW#&6{_VivLl75o+udK6l%$qNrh7ztug_T7%eho zUoXI^%;NnyBPe%|W3hIk$OI$rL|v#5+cr^d4T(S-DGNwg^2s<18{UM8?oW%N=uBc( zsL{(Z(A|YbH~_VkC~eXb!AJ(w4ILQIq^&ODkrEUP3{;NTENNU3fv6=#yrzV$Cb=G5 zDZ^Atg%L3EIH^lkxysBbR3J85j5TJQfgCz$m@YvTq*$gB2e7)xAp_-&kN{S}X(5}1 zQzsOX0_POut)1Py!Mk8#A|E?C+!28!lSPdU0kYQ5x+$fcWmT(hdq(`gXheqR<#oBY z6Gn1Da8}==;!?N)sG}ZM@*?9DvYY93B<>I5syn^qEG5T(jeg9l}OKS zai7V7j$NuFTSx|Z4;46U)W8xO5%wrYa7q)6oIQE!qV%V=Az$*AkvOQ%AVuY1Y8yEH z>(_y()Zku=ME3nyLrF5*I%Eeoy4E2fud8vYL!X;8XR>w0=ot7_N?V&oP_DSZJ9BPJ z{{Yq#GRcWP=T7Y~Ya0~gliO7t$id+&bM9JqBc@pt+Cb(IF!NzY_Y_3@*%~Gu3rXnD z8X+gwvF42a8wIzuwIL@A!|_IPDfpGiHlC*VCKxG3BC@&y zH8=$rno9Lj+lzjmP#n;k4^mYn7c~ZzV1zD7Z?RI_XBHBFxdD8F(KtR~Hr&C1uQbJu z-{otZ9HRjj2ICh@2UcnEQPjq(r^Qm}86d^wl48O~1l-XQzlXtU)2aSvw`#vpG)0Tc zG{rEPsIEhR9&KJ@_i|0Q6By)EUnKt9qa$8O&JhvQa4|!0NOKu*w^8;&F&5xHArn$? zek0xN)%%x7e&4+kI!*x?lI_8T0_3@3wM)1nMNoWJvX4B~)@!J0mLHwjDbzsPhTFOwD zVNN(|3Apn|m64mW)E1$2AbiLGUDFx_G?rSh%p>Yp7j>5)oKS_JV_yX}4F|dpRS}CW zrCOZSp8o&^*n-Pdc`Y*XsR>h65r8jGG7^~85kk5yaZW`n{23ZMFHwMHr_`oF$Z)7# zb-C<7Y{yGtQG8SI5i-&-E23JWZJ&CJ;3AxtJR1~fxf-wTI3_eX6{B*kYOOGLIbB7L zJwYG(-7%>Re-sN4_*vJdxg)eH`64P!Aa!XEaeU~cH)Iaf&zxc5iiw2% zO}q^su(I2fgtdSKNdm2ePvVZ~9a52a{$IVDxQHj)NG= zq4RaOt8f4<0$x`x^jmToLDe9@F$|(5w($-%wglPG&?UDh`9u5<+`6F|kw+&<56uZe zGH2?Br(3?84%1-kps5r9s|iq1+r>7T=7x)-x_Sr7Xnr)Z9S>sa;j>a zVZoiUOl9DySp+>qB@iU|TkW!$6F&^hYmMFX&O#xJO2%9$won`3q}CXqFK=%J`YY6P@? z_2|dVDNvm9a)_K+oHNnF&}d0e*`D6H3~6O8{i(F0(gAbb$$H`AA}crw5zH;!Kx&XA z(lz%LNc=qPB z!>@84a?4D%!{$>p6JWf$PAs7~)*_`6A*KePebik5=*Zm=Bcz7Yna#=&+@!RT88hPb zTaomJtrd`}8sr4z;s+x5p&j^Wfy5vu9U#^xFolOS=0Z9!PAr&Ny^B1vPDMyYM@O|=WwHZjcKEy@{h(na3f1MEn@kdDy&1of@o+#p|YPtJ$;mHn3rF_#rw7}EoH3WE7 zHXhUCz)`a*y~*91C94Gg07UNo!(f@{a86Z1_$uFpoq2SW_D$@B_HSyJ90AXbJ%5LONp*Lt}hafClE)Fg9~QdsKG6ay3(?B=t9H^)*DxSk)2c#_A>n zI2EVG0~s3PJ_jOhy|eL z*q6l!$VKCdCBT`fkRITOp^T`^5Y)BC#5{Ed_nVshXd(*)UlA1`LSH1WFWLsz?pJ~b?e z!|F9vq6aJ$XxBqXp-0o7a$v1W7s0F_W++m9CeReaB+KCiiL#Mm`2l9;FuCSbPW2s&*hZ-Vsy0C6bE?XIz} zYL@5iq-#lSkl-BFt=Y^>`Jx`AS#6EB5ikcVP2CAZby{5VUaWfb$m)ESsEs>#A+!q# zc0Y5W5D02D${nk6TV8mQdq$=q9lgGTATI8@ZdEI*sG&079Mz?h+Ra3 zdM_&+C6_l)BInH^k2E8=El82cMnkBZy(^k{ipu2{@8eq|867g@58Q-~=jsc^zWxAv zMi-@>k%pePU`3Qjh`ov?LfCN~A=Q|_@D{~e-W69RRP9ayk$D9UWq0J7&W5U|W`I{lY!^tq)@sE+2a|`gF{o=ORpk)G z@=Wgx6Jni%|Q4L^GCPQH+j>cqfkJN#<8mN+%@Juv$aBu|$%`1B%l(&sX$O z=7hyiBjB~#2M@&^Skw@`SlYy7tgNlUjYwKZF3mtnGJqp;HDV}G zxuJnxvJS!gY(IMk^ru)=&=nX(cFkFLtCw0yiRvi{mfem6wurk`CZVN z+>Ez(FB`hlSY!fVR9(}vD8>L7X#~g%cc|(N7NRvoIAjbm_o(Re)t|9WGa$%atz_0K zYi`BR*llAm)LSwWmxvN$F;9XLs|Lk9T*pYMf4xU;UG{ZH zBm0O(f0jfC_aPmF)40UMAw9WunvpC}4*Fu&Y!2%1Db#+?yCmrgQDwO0CyK_%w!F5NZD%w{=0gEn|0AeygGGT5JR_{Zp zuYxipx@|u7(ic<#EBt=-tI`L(IE!L(@L%H|C3#!CsM_v)TCG1n!?i|xbtcjj3)S40Rm0|RWJGKjd#a-W(X|i*X39G1 zMLx{5z&wrtF$5fnpn4ixmI_4O*EI;AnANZDUZ?FPq>|B%-?LTusbqye2wu{${^~Nv)mjraxKOI|=BTYhyjN`9u^nOq|+NyE~RB$=-TTu@! z=z{rs*0y-V%z0*24^0TWiw5+A6NGKl&u;^12!GV0nkLKa;lH3r0Fdn z!%!y;Sflz+G4s1qB`x?6BeWWQEPMH=2J1EMQI^ikW(jT1zqr&d`m);*-2sesV_E{A z_LFkehCSJ+&w4sci?oMVIwDoLuvJ7ehHf?XGEB|MQCHii8YicUa?u%;s_V*CLnlsX z8C&S-6h@FA*q~lgny!FuoJ+2Tkx#h54%7E1i%fFz^Cf=&Gr8Z))6VtH!8B%OexllCMgokdA4{Y>+Kv_9Y0& z(5*L$ItynW#mzSd#0296;`yd@5sT2)sfe(mVMe+gR8A?`#{35_<2tDg`1xF2M8iNo zm_~*3)TQfH#ZUhL)sqBvZAlWlSmuT zvy;iuJ98p(+cETKTIUnqw={~-O22Y_vk-K)tX0gZsLE!eltMF;nCo+zoVOlD=>QwN zl@U=9dw1DU&tj*{SoTx!TH`L6NR1e{7gfgL5w_YTcocd=$mYNW>5bu{aMU7ADffUV zp*d6uSL{(6MWZq$D7%Mit*(dNk)vFf&3@x(l6K)v%8VA=rgTqDNW}9PGIoT<-~v;P z3!~^qQIuYBoN}=bh)~$y+YR!`&wCQLA{tv+nx67qRwKcGjCU_7@hi#iRN9YyRak$< zAy-nghkE&kdh<)%sktHGzsP(S`8~`0gTZ;ng7e40dBXD#6^DxQ``4DesPvlNtNdrh ze~9>nU9!K&F9rT7H)8VcN0@Y}qq=mz&(Wn2!b0BN=;^ zsP0AArM|~08mj)UAS3soJ&vEv4bS9(By(@-u!k^E)h#l@K?v^0TjJF3T~W|Yh;i^; z0LW&^y~_Up{7skTIVO~Kc7>`g3Gnb%)!3^O^?Gopumn(f(Rr0hp-g?r)k0zyOl$X| zWgRCq=0j2KMy{FMF2n@F=q0{yxd9Z|s~!y_ML_C-q^f|*=n+McX=Pl;Q5 zf%VR^`>eFbbb}(s2g(7tQh*F(Kn-Rct8YQ`HmA&GL?r?GzFN16(Wpvx)H5nZ1;l0g zpSP9A_XQ&d)N4EGu1-(0Wo2$YRb_8#+$RhH z>&RD>t2b>vD#OKjSCLi=uW!O?(jDObO1K_%D&*V#s%{wQk;~8;~itl z^h`E@<`-NKCR~@nGR<`clKjc&oCgZ73Bh?>1bRvinKlXx8>A-jLv8`(F>H|=bs+VW z#hc)|#*#ARwu{zs7wsvC8cm40>GNWlSTN5NN6qrBGWMy%xA@M0JeaERs(hBPTXo*u z_E6jv?D#0lBBn+%Db)kLdy^r#8c0~E>+5n%v&bf9+a=={c0yMPg}4mWS1tsA;}y?? zwH0WAZsp~s2$O%cnL9Tm6+VJd7L~#R5dhX9mfL0{azs?VKOWAR>4h^L5Hc!gX!uOUn$RaXULos$=Ja;~ng z?B9)*m6es1mA$JgD=RB2D=RAnq{J{xA_D4wE6T0!M?;5KP7m9?Jf*1f1MpSDAm0Ut zg2TaK;IQydM_70+ra~c@a!gyfJJ~s_rok~(;bmoIVd29CP&^f)tSj2P5v@)sh^A|@ zo(S$tYQsu9(yXOM$Rh|-wMayhdP<)3TxmWlZa!>VkO{Eh{0FsVZVmil&4QHJ`jRI0 zWvJq*?2HvEw8{HZ?UH#Qa!#v6$OH1HlfSu8QBwt864Yu3N*In5T#(gRwklc!2coBY z@N+~AUz+Fi4TfA=MWWB(q-N${CQ3!w>@!G+nU?cFVWNFe|RYEv7H=;>6T1z zU#A8f@ArE*;YL;p%gVf}%O7Tn-pzfwEY-N!cq>IxF?H1#y7I@lRlW$(`8o{}A0&EN z7QSe?G(h~gtEOd#7WOH^{{T;a;Gv*A6_kaKXACsQJXcoKWP3H!i}Ag_Ql+z6OA1i7?T#Gstr6DUdW~emFvSk9Fr<= z?BQH)sX(1JA4U)@=D~Hir%HTNg4y>~4@N$ubl6`OL#IUX2l;zfS6J|MMVHasuQKy1 zj|Fkyys+>aJ{n+LMemVaYKdZp6{chCPc`fh-smK8bCS zY)4`Q#Hz&o1^&5jscJMCq5=IeVfg!Qtmx^utWfD=^CJ<$io7Ytxce30`29wTB1{G- zz{!BJbi}PuEz6%Js#=}=)%dT|m@>p-syN%&=B!pcZ}hC(EVEs_7!^tgxW@ zxY+*y3gyBeXI>Cu!D%uH^?}~5J<0V(y^G}SqAw_`x#X=U>|R+dA?hy56B~>LSh!T1 zu<>4ME4pxcP$|J>TQ1aWN~jV!B3b)toIqz{hfbFF=IfyKWK-*<^xNW?xNgN*p8o*h zRNI*7?zwRU$r7K&|vI8Wrz->A5I7-GRfik0yZ5e>;-6hmcbDe=O0;|v z88QXr*eXj~(UCKYoShdH!}_86BT?-5lr?P1)FFy(t*KJ7GQWZZ%k=*MCYt+@5V^CT zfJKRyV(OE2tAmo|+IyK*yHiW;+Nex25&mdI&t7I%_akDTO7fIiCPh)m!i=%-Ohkur zJv{>)a&*VrztLG+*tfB8yxcVF8nRD4#_mKzYp}i^3!)JoC2N$JiwMwnBO_TGlB#?a zJW8peqU=s__AT^u_G(ZRqPqolUS)q`)mHik7^=kq9k32-)ZT!X;;FU)M2L;8H+n5Q zeNo3qbsy87rmKU01Sc)IZGq%5r@b4R-b5C_U&#BTOS;n-uE)#nspI zR;sNCS*s^k;^THvYXM}_V%V!IaJstaBg6TG^NEkaX@MGs1vci<&_DJ!PvWWYDe8G? zPGK!w--<7_Ffc9?w8w!|)_a1{`+0gX`HNKeEhB$ZerUhFQY}1kf9j>`2ov(gFMM6o z7?CW6z3H|eQS%e>j!10oOH>G{?d;@s115ZNXMih#)CLe>Zp0hqY$LiEhl4@?m(4HMPMvTAmID-XFlcPDy}9>rBt z;Dy*H$yrndnN)7oP%C;as7JwRZ9R^KDVn9bP{}YXuCH~~II^bX8@8&GhyFo%hl(DY zw#Is@t04HYZD4)5I@bD$v_hAvG&PiCR+cNy3iE|YIw9GyRC1-L(0N+@g<46@pnoea zkkP`G??LwIilg7T6R%Gp{F9TUb|;*rBh6zj^=>W3?ZX92CTA;>XoUX&Lv?>;l@)55 z+|@pk>fx2kk!w-`5n#TfyMq9ka#cO`8!r2_p;$)4F11_RjT^qjIx zTyqsim&{XioY(VD!i$n+h)t4;4zka;GC@oshaum1pNW*evT z4wLRw^U;FjiLft?gTl{fqrw zuvS%~8vMAo+?~2`K!O|;*L+Z9>r`tcbU~N%TI1z7^I7p_iB&AM89YjVy?<29CVAO) zMaD^iAQj7>0wdm@$kc+pS9xG$Q4<7w6~$8$7nmHXo2IzB=&Gsyxm5rN=BQiVi5?2% z_bW-xE6RISVN5FOkRSy5ee0xnm8ifT^j;^$(5HwBu!$JaQ(`)^R1Mgwt98jyIlm+x z$?M{@)TXMk@}o=eV{c-L{3uyCJR0#-D!eYU;d&+&LG-FLjw;?CL3LYu7w}k<&1N!G z=>pk=`uo?J)k*pmdV63aB2B?T@B|W)qn-|1)CmUg~aQ^^;^&)A6Na^e`UZ$cXskOFz$@J$U}{{YE)fRIJN#AJzsZHxum#XjXXA?7XbPZ^H>Hf2Jt{B7)0 z>a_N6^bAvru4|`($xyCo&xZ>vkszVf+`3bd*u_vTu9WiJ)!+BBeKqY&VI$s{LPNcI zXql5`l5%C-ywgbC*ssymg7Yh@{ZJxQxHr+?=(%FCccOh=KP%nP)Xi^ZrJXmJveZmO32IgQ z@K}@X?OI9I*fA-9CP~dxn3$~oD&7n6R#sk9!n`fRqD|OWo=8AMOypt>vsyoK`)$1K zpn;fbvIq9S?EYZn*S%AEUMs3(_o_(u)llo)!nN#8AVh`TRdQ6}n$Y@Nm)@z>E(|@( zG-JF-kIKBxIjgTQRN-}XZZzX=6yZgW)~Xd;ATr@tDn*qF&04D$T{0ngpS4mkY}q_w z7nOBDp2DjV+}U-oOgL03!{Vs`suh(!DvIk5X1?7EF0XYJzJjY2ZWrM0eyw$Xp|YU< z1QR3mYOb5|RhE-(NNK1z+81ccNl=JE|Tu`U?FGzPDFhE<$*gRg$4s zOlmS!iz+ZzO#Um)>|g0G#{R`sin8iH94xK;Hs4Qg;M|etS3sTFYX>SVM^2dVK9;X>T4qd7WxuK-5;XZvDdlhNUREO&84_eo z>tyi{?@cJGcdCU?dS+RtR#|bnueE=tZWmPwiT#>;7xr!JQ-xK%ntOEm5Jlaa*r&5) zWa~9=prU>?UvhplU2#tegw%CQtd?ru=sR$!;cwtoM8+?LaPVH9;E(o#&ED%rsTtGd z4e&$&{{YW}#P=)JbvBhDVtdg5>BY(E@I=NSm^iJDE&?a#mIKPQYG|7O07@qgXMIN= z&{tV!x&BG+m@cU|G~%wPz~ro|Dyeko)@sUuRx2-{sN-*#m)t!Au=Cs;;45ps4zVRXvNVt9vy13jHNG=k%8LF2PfaJDwCp#YYPt zrMtHpCRDOwewy4Z{Cg!s>|Ip-9sZj&%QV=c38=Fm=0xTAB19@EUj3+m{*Qm$-mD`W&CxUJB7(NXMmus6IR5}us7f-C!z2jvS6Ot$ zjUI=+Ff_~HuE!+vt|d_E36^PyRN-Z1P@jeVw%jTe6_q}_RYh(ssdUN0y1f-uit?3j zZI>lcP^uNkRFkSzQCE!>WUi`yirg>$h`$RfaKE>Iq-Rdcnqx(#{M2#HgV(*0AR1g@ z?_YTSfdLZCQ8DTxZ{4MMpJv}hfAmE?yL%LF1L&_sLOF$86@L#EMNXRenbX0mXTP}v z=QkL5;GzdijdZ4zqDLmLiaJZ2UDIg{n+5Ppx$$ySj8hu&3Mj`*^1(D>9lAkP05GPy zd(aYU*h;lpqomgL@FA0#8A`u47zQg*k2{Zxp%V_NTNKE#S*OJlmD4+NSN3SCtMqjq z#T7@hRdt`SRZpd_)E*Adg3op4)HwtjK4oZQ&yL~NH zmA{Nr+rJC&sP<~Ct>C#~^eyZ^4&2d>cTX#=KvZ+7L_o;I;7A@6QH*3XyVO;?MGA>7 z8$A1#pvN66OyV?OQgK0UNro0F@HZ!g5q>R?9@ONKkqO&RKj@4DzvjQ*w8pczH}M4n z4b3q$H>|Ou=#IMg7E*+wLsGb9QlmF=eZ^48@?>h~81l_ok;mAory8t}43#+7h5m;l z!MIsdj(k|FeP+tsDyRueMHenMREqMI!a8u4;diiKbmDlt^CZ}o=z^13$ zni7;lTB(|bvB^+8dDpdA{{U;#y|_zG6%{I0MPt~R$i;p5t9T>LSve-3Ypoy_#NphUMvUhYRp~4(RiuML@o0wo>VWkk z+N$*NvM`a4rp>6GH{@=;5$R7*CK9PbZgGrSx`3%YkxV5IOy)1*D2RsK7}&L46F9Wp zgpHhCJ=5u?OEphz@!@Y_y|)U!!+Q<%0YA{w>2%5+qzk8zqGwj`86%~Peg5S@?|w;{ z)kQE~K=}QN6mww4szL3K+?bX(Vx_0ci56N(VVDmS+Ki22C6&`au>R&0?F9o3!6{P5U0|xH6E$-eM^-ti_@E;$ueM2nwrleg-xS24 z5dii*m928I)ss;IV&UtWI%DR*SKO-a_RTn_D%3B zd9TvzmL>2({JD(#5P30rb4}U(RDp(;^A}*trJybcA>5&=Fp!Q8L6>VWQuJju#xbjV z+=Une9qqx1%Ogisho%Kv1?hnDH09i-EzyM+>Kex@Hb`j?JRX9a*V_H4Mlt}N^-2Nl z+$x?H`WpKbR8{t^{BE2tP8`=YWs<{(QGV3I_#Rz|SgQv>w}_ijbi*;^h ziHk?`3%}l?1e>+n`lr+ku`0BCE`a$M;Iz4n+K$1wQAh#^K0TtrN=@g$pSUej5!Go- zSaU~967@F#X2ELLCj7LQykNB*T~ymK4;CHdpux@D4~Z+P6M@nw-7-Gvcdb*6>H~DO zkld66X+Qwda-wNIhpiJ5!#)faD%^Q+al*dceTt^~h|7bIs%zYn&mKrg>BuG`n7ZZK zqHC($ktF{B#D7(!faZ-u@lD}Riep(CNLJi}(_tFw7^a75)tY%R(^6{cI=d;7()fFp zsMO(#j7VV*F}ipSGZ!)YQ@K2iaF#5!NG8k{pb34LM#*l5M=aL}LOdg_G=H2LtG1~$4KwJL+6IBthB4&TabL6BaxFZl)mw6A5VvMIP z)(%@Y!v)d1FGhZN#rj36D!L`8f<$5Yva7lz5F;zZh?x)hHGRq;ZuFME3FWv9+Q$)Q zaHzSW!Svm$@K#h+_OI>o;Qs(YZWZBQpbupK094hzM#{?I{Ck(2In9vUffJW2`;a-{ zv>i^~WEg6dj$vz%VkxQ5jT1^;Lgu9rsp5OrSq48SX7O51xQ%4|-^l?e2=1H7=%p=0Owfr`APLuN z2U7JmOf)-BQEtYvGQluqdoEmAQ-!{vf8vewJpGf$lBy^^3;TWP;9b_1sj|~B-H10! zB4bW}7eKR*4}#UM*}M3sX6JNCmyh6&=D+kpTDrNWCZgy0p`_P8#gG&uBt(N<%`AX# z{#Ha|%&L^BbjD$pX!;Msofy7dYhU5t*#{q^F3L2YD#REPr%Te2mi9IukU_S7U){`>tfRo$+ z*eDPLdoEu*`_bCl8lucK4wl5kxl)$wJvl`30$htwsJt~jC#9VDDM}GKF3bl_u`5pI z*Qni0dQ;9CVEoAURcq1di$$8GW+X!N{{V3S_Y2dhK3h5_H)pI1?+2bUxW5q89u zK$tlgkLHX|Oodzvr!;&GM`B^53>yNe<`iZX{{V<38c0k43`p*AR3br+i*tPWtfS2| za8*7E^jejbmo7K@t<%5pM^ySZYATNe@uIT~!pIDH zG%cEcmzUnTjQ;=@MllkM^9G%(Q36@#;OGdRoIzetA%>dE!3k;&gl$&5R&wBmkpx3Q>tWo3gaUyPB#n+?32^s`VdoeW}U6 zE|59WB)Vzt7)$f$75@OlsF=%K#hyAqapvtn?tJ)xtN#GB7Yov8%!^W^P3ej=i~-w_ zE-B8fdLg(3bjpKG4L`Ixji;mlK?qPpVG>#`kt%T8AVATfCv@z6N3Ulz7oLbWfXk9zcX0}Kd5Y%^d6Dkf5LZxkaF zQ|19Yt1JSHHy~wK)e_aSReqdhwAe_|2}BI_4s>-3ehWRhX)2NEv@^Ulr#vdi2nCI-u$+ui~*(3CLX|*uS#HTidE}#@@}9 zzl?MCt-+aDV^vX3#N*yA!>Q^8V05($3JY4lak_AHN&JoQR(RI2`_tuu7?tJF_mykPu7;7@ zMz6gv4uWqG(wE^A)oOmto+V*ThyQjVG2oZV>wrHce=Ns_y$Z>>5|P- zgz%y6RW#wrJ|i{FU6FQdLaS-AAXg))*v$QXep@ zTkKIYh|f$*pL%y`1K3*%A|){9pcOnLV<^(TEA=L4W2#o}(?u~Dm~M**xduGZls4pd zF2b?wqxh$b$j-t-#@8w357j59a$P;TW%#2%PG@pG5{y=zn8=V^>gjG>C*rjo@wGW# zGUr>N`*+bN{Ye_fk$a(`q&EI&kjgmhikImRjx}8ar=Q~$POM!p2U5~{WbM^P?Ok46 z#Yc!*pSy)Vj-OM0E}r3!?)KFn^Vk4-~?=tM@Cb{S9cYsqN&dU)rbo67=B0fl}$-xP__gjgQ4K zjWHpAX)M+$qe0C;$?0av0{s@Q2wH#K6lI~KFE*8`y{Y7DX8ci+^5%@AMl^e^PeGb( zEn3JU0Bep5s{}9@W{Wh3YSD)@0l3X-?_9i9sGEa(49l@mKfOLG+#T2VX0KeAO9F_O zR#c*30Orb<$C~ODT5I<&D@1*$pHG_<)|0P3pe*+LmZH_Ao8GA^pD*&sf0T)wMjr(G zyTAvi)9-lu(Js>Lr(R6HsyC0qe#E$|(eetSa zF|mG3o-x!Q%_$ZmKGY80Ufss3PglM5tS^id9I9 z922|Jpe~l&4_~vP`-m9^^F)^!QA zJ*%?wKl(qKB;SWM_@W-_hKr^{v2)BWuuM%^@l~KeMAs1XK-3d*o_!&(`_nj#vo=wT zPP6V>w*Yb}riew^^DEPnX}}zOR**T=giI^>fXlHRS2>^^@);&0y_Lx9SJXQYz^-dL z-BDJAu6)ztzU~bq%PuYNP2ibQ>b@zO=+TG0Qmiffkhzh;I00(+71JK;D>R0G$uX&J zqR7#~v*w1OFANP;r5OtV9CqZcK{qVV@A#r8s^9!hHx^B-04@*QYEc_*H;EJml6;*B zZixvWn2*EChpPsLk<)lKSd`m)Z3BUcivy83A-lF=q<&$3)#?}xV6kS>dq7%TYIcmO z0q0-AT>R(ep?s2q=RN7Nlz;+u46kv;93AW78uU%hkS z%kSY|pk`M3!;hq_YlM`HrKe5^OgWkPGUlE~Mynf?!cH)COJb?!TBbyCWFxaDYRKW( z$h39t8wjB-#xI1wl6Y-HQO8T8xLPxV8glGZ1oOqYF0D<7)pg}3w697K{V&Q6Dq6Qd zjpW9tLsq>%GY^X<2*~5dri!ZkIsFa4(697-_|ZGBy#pc}?L;WR*r(LTn$+(6(+cus zfnAB}Py&+%{MSJ3IF$1abHTfpNulzBgU_}tL_|e7iX#|Gg5X%H#+l|aT_K`;%7x+v z3B|eHbkK5Dk9fMMe~M_)R}84L$=BSk;+Ta?ac^UivMi}(WquD=%bA%{Z_8YN9Pp&lDpw8FOY#@hwnEbo1)|=-Br2OdNh!p!Y3b`(yKb zrSll5>)H?HlNTN0j8Gyn^sFAwhLc6O&7r3@U`-w-XwJ z8qeayE#8tqtfjO^mh}Z|fjWL?fWK&3swIKLwE;cI?h{ck0dCg-pmyf^sASze$)sQa z6f<@wy2*%h`Lpds+{+66$b%6qxppTN;cNY=#}#+>Y4xZ2H9GNAp#A9PXzbLAm|K00yZHa6yS2{{RJ|L#X`M@kEd> zR_2-8lUW0+tFaSz?q!TCQd7sQVzmod$v^|B;+o37DdTlo<;MJSJSoDqPr|9mPBF1V zN~Jlc)m%dJQ!E!HU|+kz7ztN9d)A>KNV&wU8rA$4QDXQ4YJl)9-*SlD+S4*RD}Ll5 zIsr(J<%<0xOWZf$y;y241Hp?P0@*~5Z`Q2 z3?_N4a{mA%jh2&K`6%8yUzRl`eo=me_IT4z#z)m>d1epxl-GY9}! zTgRFanGNLy)OMMnFPpQH>X&v%h|5mVH6;-fK!&%RlL1Z#skE!Q>h>#S)dMVllC1_o zP<;hHg8svCr?p?<+|zv(eU8<2RN2v0pWKV|fQvDF>Y`;ApUeWF(h#K)F}UzTgvjF5 zDx?AUcC8_#4~ptGqK~Ev<617FVfkE9YBR1w@e8D|d!KS9bpqg1y*m*DMOi=ZrH|aSfz^pX9Xhc@1KLl)W;_z zNr;zc;DCere(-WbroWm<%XUs87-8Uytq_KnRgj9+<|T9CTbiB~DwXb3iTEr6lf1-h zL>M>LsH^;W{fhT+cL1hMRg2*07a^z%Arc`@P48MvT=FmAwMY{gSX;lj0v=KOWQ^#~ zP>72+V|*5%#N(e~LL;Vs+f}CA>Z30fH1P<4OFaP~Dlv1~%AFmSD_mn-S&!g^nV%)< z3Eqs$RI#%r9xkh8QB2hffttx*jTJ|F&x@*1s-79185Pz1(p~L!q0SLU~@M6>W13@59DX}sm5{=095?VbRq+o+N1AMfZQ%Ah0SXv z9bGz{>(($H9tib5-kLKSyI&}9@NWdLH+Ei{@P1dRD+1@9ms^gf!Y0y1L zP{>8&r#&R0xCopm@(p~BJ}8~WBQL>|P4>JkTdtDnd!w19$Rx-N04HR zQI?nyY%okg(hdrNyH`;s?a5F#7gCffs+v(BFu^>J@p}Dkp3Z6gjFqdJs&^q4F8r4- zflVqzWSPqz^fOA z4w$>S6hd0HHPgYn3nmWUD6j?Y>7#LHva14o7sM5$4J6eYlB?bJD1&|u_g{L=Tj**# zIDSg`LVrCA2VVi0%L^4y;Ae&wS;i(HBm+Uesc5&2|W#4Q!u zi4O>B{XWMlR_r4v$NvCiDo1JjSE~j(erWySMr4`Dd8J2w!pK z?D2&UHLGZNDD8^=WLP;RflgI#BC1*^3{Prc7;&c_WnPGr+;~fN zSQZ?UX)T}8Q`w+ZT$O)}ztL8_IW9@Xc`Gsi*;BnSPAIQcrcbC?E_P(>dzP=wcW|}p zCNEI64Kp790CH`>L)2obT+CcjywRx|ya_;R($*izQXuE2@Il%K7obEq6T0dxM{pB| zFY(PYJbmas3eOXg$fgu2r0<$=D~qSck|5nO<-+_qai1OrXWNDk1oZf(BV`GsG% zO%XdGr7PC49Nm7T2IMn~pAP>=)UIthRID92om z;H08_+ij0a5{};I>H|obzk<^!4XwaiOiOo=YEw3$wdVf-i8(Sd*^Htcw7a|VQJiBS zMi&I3A*vH3>WAP!3A8@v=W_JqOCaqcM~5WX97tU(IA@L1wFSzzdgX@-`#iqAZ)-s6 zl>Ec-T5YD~NZ7L0Xd0mnG<$`qn+2spF^Kf#ZhfhrOJJ|egx8nK7MWiY%@9QmLVAj^ zDTWEp%kf^M`iZY%p!OdHOJ<8;jOAfvu3kZCr)FZnCn$(kugNj~A79|NPMaTNST(ZK zLCo+03U;P1MX8C75BDyvn3_1j1EjbutKh#<*&ITYhmy_776LOk1N|zxrVN^nR*4pD zO@0fc-ygLWt$K*CO+aN_(bX3+u^v?VO)kh7mXV_zQ!}^Q6Erx)W+EbHLA5hJ}(JNB0w{x%{WK9TacQecGdnCrq@C+Hx+MJrZY*Qf!G@SU6n* zMTb`}3>7GWYD&kmjv+mP;cgWA8vT0jBXlExx@et1A*8v)6{rr>(G+?WqEY=!$xzdH zW6f*xNeaH?usAw0zUdb$)Ze+VO@T$oq^i1T^)f#eTCbL`iCTS~7Ohc)YU#G^^B_$h zHAKOQP4g7-zqls@Q8zzJf2ddZy*NJ`tkt`hJQFZ{)|p@B?NSmgq}ZSx#v$$8fgm@< z9+MC}&sFJ}0QM|^-3|o-wX!Rj`SA*pu1pt}wj>+(1)?=JI)ZXLNFQ=w@0g)XPPmIB z7{P(T0!e@rWz(xjOb=)%NQ#P4G?gy2o2Fcq6Du!*ud!6?6?EKdW!ke$-Yce~C2C}v z9R+zo2km7l0uRb;n1%!8Q4LmN4ojkk#m8wV5g6&_SslrpSTLy%g+e<|t89ljAA&N3 zo-O&0-BdqNow*kD$+Q0ebyOrb3`6-O?8g_)PFuTMV^t}9-9lSi+dG?cZ_+p(Zj3i} z<+r|mQ70YNqWvQixn>MVEhGxMsnO@Zi~sONBfqSI*u#!!@g^* z2Q~uf}A4=zQt7)RXwKuCr@U+%Y+VTvRu{boiOe~ zPT={VxnL2Lg&N~DL?+TwGntvN=h~W324j&cM))Ekpv2Otwu^&?J_t`(n`9V{j-^Dfy@K1g= zSNc~pT{T@ysu1==dAfW# zapbh{t@u0+oGF(Y{T;rp!1Sh!bnUG@GkjL9#sR3`$um~v*Xl=6HbzkCWWq)K7wNpE z^BlVq?g>b$298O{M9H-T#$TzXnsUgY66R+BtjpAu2oyprzy#)id(+3KZ5%|g{82Iw z*ql;7lr2W~DqCaAb_hrVBZ*BBq??r7Eyk*fze?Ze7WP=t7fgj!B~;gSf+I-fEJ0Pn z0<^FI_xsmPV@xWa{AAulQ1Y_Vw?c1AsK;&I6fJf7Zex%1QEEuxU{-Q$(@(nD5>R4>+x5j`?x>Q^HuNRRnLdPGNGwXZ}%Yd zRIX~E_Bx}40|0q|r4R&lROzgL@l807y!S0zZZOjHY>P2osl&<-SN=ST{`4g|2oUckI_YEv&+ZSXDt6?-^J2k~he+Ha zlcmNErL`bN=>zql?s^6K#^?NmJzEnH7p7;3sAdiS048FK>Sr#;zSKbNytQ637VMTw zR?&a$9$=m6_M!xXqXU9=?I=byI1GNNPpV(rq+P5qO)~0~3AZQN9!kA2IHObPH9G=r zsPx(MD_o@9(9%hnzt|{sYTP2Z1xk<>a!-k4S{&PpC5aW&OgPlqw__C(IArfSc;O8XYKU zJ`|z>xr2A^QqlniJ(h?RIh4a3&#g%THM;PD^MlJ zf58_734F&idbG{5>h~v%gv5tPFCK41VYoDw>b-fcmkj0Jgyck(3l{Q5{snrcbjJZ& zOSdFM_Wf{%p^AV2TK^WJ2OIFpQ>EB(N^q#f)U%05i->wI@*Bh+<`VWD2M|hG7hev_(9Q*B^^#@f+d;pOb=1T z4^X-q0jR0uoM3vEm;w$BZv^S0@rlIbh-a1`iqt`Qc{%g!QZnvAkC+8fP=y#M#0(RT zpm0_54A62+vRWi`!WadnHdL2|(19LX6a=Va@LIJwz$k}#T=K;N9foMh(U+S5oR;=j zs;Y2&II#M&w+nH%8h;PP`6@jYpv2>v{aF?sD@2Qo3hNq<3E@y`Fz#JZc%L%pI<}qb zh6%NeO-CN(R*de%2__&%b|Qv3h3U@toD;--)aHYAOK#xZk%*5__^85TRLRE3^fhoa zKmn(n5hk3K4SAwSae`w;O)nqCAByG`YM6K|if3fUjdb&;Y7|4vi^(pPKoV23fcCjD3u@6;5%4Z{N}7Lx)wRDzDy-|k6qYxg6&8SX|oPBeR5DSEPz+x)Hw zry`7?bpB9Qo#WRpnsIa7Zl$*!*vQ7wW+Y}DEhKrZs))yMX&4drtD;0`E=K?bUhbKP z{Hsp|Uxr@Qe}SDxw3~MX8oI1~%hNSB@6CD7JP;(f7ReJT@=Zbr#R{=rneqW}iS-La zYSk`S2U_ox3HO!Mdh7xuv$HZ9q{GDbDL`6h6%h}W^$)#DY-$=K??N$%4|1vnDvqBX zNbY>3v#8F2zRstk=AaCkCHD?FDT&u|%y8y_6gdRN#wdY&_&GIM`#CDvHlVJXi>iAK z?AL{TyDKX<4tyWzEA$oq1*F+Jsx6JxYRjg=$@c{i3@L%4HLP$z#DDQ9N!|v29$8YMMczX(f(}ey3_FmKY3an!_^m?`LaN)5z}WaAGB$K8YzlJ0 zYRk>`3sibhIHRgRifV?%UAT0vTp3o%iMZ2+{fqFevk8`$0FM+}RP0U5W?JrB&lR`#V;Og4UZKcv{<3{{Z}NNe*#SK1hn`kKuJDkSyIIhq>9% z+Y^&qI5GH?`m{sMq(n&f6k)n07~#1dq3&A!U_d@vhX)c3VpiU+ktZfa$gexEOK_dq zyS=*%SEC(*VLT;^WJ@6-w;2gXt8QRMV0Nyptviw+>l1&4LT$*(TTIa)xvg-^m{OcP zg7}0bFb?!@K~da72h#!!!YA%c7>LeA+?J2MdSAEz5m73UTB0CcFG@1!k|kJKq{_aOM-hN`B(pm9LV`InnfQFdWKIp-t~&xhiMj?*MSvBf(v zhyV`6POUBWWf2&U?gtep03F%xTLr6fMaBwQ;S?c#RYPswH#T93uTm4#Fk;D{SQMcyzfL+vAQy17N-*`d{{Y7CRSACQXzgy=GL1)q zeb$sdQW$(2z^KgbKGA!#gOe0uWPM0{xjkGlWjTqo&QA$Qa|%EH%kD&8y$ z;#n4*O-P{dWm_#VgP+c6?oY!10Kw%sNN9+$sV{(Kqh!4Ci>DrUX$)8SDl064grQ%T znt7kp{I{Y8t%xcnvX)pQxs32kOX63kOR%WPF!G=x#%J7yB(6ijayausa_VDR+;*cf zv3pUKdURc6CTPdC+CXi>Y%~_MhvSgw|ZRHY-b2F;=0;Q_6vipOVnjL!`C~Q1e=& z@j_56%S>c@*_M*pP9!=JkbPK-_b=3Ql%xEUYdVdH`_LczK4~@607)Mpvg?Thns~T4 zF}lUjF{W;`oN`t1DwO7)=m}#*bx;>g6CNzw8FJ%(6so$n4AWVD37)wX%FK(@3#~xV z*$q@D5S%oC`By>E_j`6Oj+t_?Qrspl`TVE7LQ>pm`Az-h3FxFMWq*RxHlC`9{y8l% z+tw%l0J1r|(cONg(bmlp)$gM^JKJJfi!lt<$4RmVa(RJKx(!Ap#n3xv&E`I6kT4Hq z!cl|VF_a7PHcdDW+!0rc3EGr5Q|XngNDVH@V7)nmr*Gx3=Ivhv=)f^90n|t!;Oq~I zGcyhcRAvYxy_UT)Y#Z@Jh|5RIs{Sg7MfydPo((7o$H4f6blU)H!MIs8Z{hJ=#|M7Z zf8c@10|JZ7^$lXkZ@ta2BQ*a2;}WqyHzlGWh@mQbwdwht0(=w*^Sw%MHuf0~fwD#OPlS0_7IjXQYEY3kV z3$b+@uhS**baNIsDy?4R`HWQ!U0ro2!8oFLhgGtrQ!;QBE~v|^-NvC?g-~S0Q8@bJ zab=NB>@sF^_Q5>G*GM`s7eZ0S?1*VOLRz)8Tls~mGP(}JM#QyH)Vwjf1-WTc=)Ogl8kZiPULp3r~*Z*%2DbB+{fayi9hBdr@~9qi#&YJ zz@es0UBnuV@KX_tb-$JrJ;W&O&tp`6XB}O|Xp^0SH4u8(fAO+Aj&uu0s@c&U0Q%G& zWRaxdnh~6YBsz$R(n0XW9lgj#J0XN)xgn{g&g)O^w98E+Cw4!{Lr(Of_AKD!>RY>8 z#JwgyUd0%^Hp_mSi0MCaak(ssYI~dzy-~HIap^i4q|`2fv)ffc?y`rcH<2IW$2LtH znh@wia9hfGcCJ^d)hLm-FPic33Ww-zY=43RbvdAAwYxb9Og^$m?jUke*^JD=4?QhF zw9J|MaylzOgbN62cgCtP*)B=y&WWT5l8k`qjXTqur>Kf(+18s()>7rkYTGOu?8{6% z#*djt)Sq7}_ahrd;R-!$tJ4q4qZg>4{88HuOlUGs80yt!UoIsB4<=}C6RhA4DiWLR zNaiScgaL5Wi*mAo(-0kit9Hpo5~h;*hCG(2Kp2o9#*f%rBsRz}1It#^{{RvJPZxwV z=`uC&Y}S)mM4q8X>?p~!nEB(Sf&T!DV!9)!%NAq*0F&UgZSJ4=wJq}?O!`X`9R!xK zt(dJ_Td^@WfDXsCRzoxZ3xrvncZU!Z{GT%3q!L&kx5ZRhdy_C6 z(TO#?qtax_gjjP-PM+sZx}#M{yDBta2SMgUKPXQcN1AHHuDNw#!q1vvb7aL?RxW^M z3hJrVQ{qU)K{gOBFFQX2NpmvS^9^JHXp^~Ve9=0*t5Y!jHTxzvb+Sm9Riuq*Wp zfr+GN<;|T;ktm3rKn|he3XHcTWI?2;#94wfhU*AYQJe(3+3KcA14$Yg!;j4$z^&Pr zc{51k9`0$TBnS*5^gb@NZVAV2>7ePZP4}TFLPhN;%sK6BRJ2SJSwKyT{{U$jp&hzz zUrnlx-tN&Gk&WUysf`nE8Ok#ity_>$hpDe-UR!G%q~S~nne9_h9RybpTp{U+X_uE% zNI!BVt%veYppWiu72|Jbm(-u>%h0lUiU9g-;WzF2cO_FVgj8hi^lyrsraQ_yV(z6W z*ix152n{U(Xe}Z%$&ibgZyP{ZI_sBKG5i*QDm+t2nq3ki!Z@G>Gdvg`OG%(ns3gB6 zUgG_UzbXPmnYB@?Ml(#qcUowM`BE*dQUK zMn@Z0kzGN|=_;1(qC0U8VMu^_NIv&ZI5b0O#op{tH={-ch|Y`rY;aQ1Eif_iwI20l z58IjQm;}Zn%kNLBgn?NA*|Veiqg1?v11}a)j^^Zbn|!fwjCx}^Rv;IN@WpGSpU?I= zCytOX22I!$fsD1wszBk87$Q#O!toop zL=rLw?m&uiLsYbasBMC`P6bk>IR_+3eJ2bP3u3t@H5PPY#rdm!%gl(7Y>2A24=Ng< zB@cQ!Lneoq;((RVVyRNBt!0{cuvbkWtwm>6qI+>|z`U!b%8IJLQ*sp$DXyG`C43}? zv(lU$Kvt_)xd^cV@hXi~93=N^rrZKz{L{(wkyWM6saSogv`yG$RN$RI+xLX=E)SVd zvB5vhXCHbY`GgE=Q+(L2OY2evwG|a^s;R=h)jo!S*HsP$HfyGbn)LMd zsW8522{t4sMO_Lf6kZ;_L+RhYZw?1Nx+*8y?=C75p04|L?lQ`zTQ)P>^s4vNB z1JZs?@5MuRauRWjT!!vPd-nUfOnQdh$2;PV|?kXhw>cymZD*}H$1Y7)4d(Y#LrNq zgZ;{zbdSs)ow+Wfr@7T!&f4GQ$f}>y@ovyiFx~YzscGEmG%z%#Jdl)X9^hE2(}fET ze#7jYY(7gT;_4N_?y^aV@iw23@1nlSypNR>5WLLt9X?L{yHZW~Ohbxv27 z9tg@-jw_}tK%q5rnj-TzDZ?MPH7HiM?p41CmqtK4Ei`kQVf|Csh2=u#vTt8_j{+wYv4>h+f$yi#f`Kd|~l!PdH8U5+T z-AEo_-Og@}BNK^i5ITmD6F|&HE)-+82?mSWxFtbm;~ z)PbI8Y=Zh}s72)O&yo-tWG*EdOb)~&2|^CopEhh1zwAsIMqMWNy;%)J85;gldDRUO z2T*wjw>N#i7_1mR_&~|~C@}KCne(oSjH!be&K*-Np)8w_5o=ZR2Eu7^Rp^B3na`+AbI#66bjzW{hB5! zpGL}*L=v4nS#aw7XdU05sBo)tWys@g2#rIbAaX$~tQqeaIb8Jcwn` zOXp+vrl^($ITe-2&oxT(GzplF<$oF`iSSynT_*XaCrc)}t_hWRQ-ye2*tfLIot0G< zOP4jN+m;IlRc=@-w75Ig# zNQf9aOWvga0HwGn2zRfzg`!i@xGE$ZNrpKUd2U3D*p6&d?95Er{{Y86#&!CUjRi!y zb$8hrZ4(%r4T|W{1Wxj^4amc#`M17{OC7jk)%c;ew$jI5oigkyhylD9?CYrN$Y84)Ctaz+1)H@n6#U2lTpSjt4y<0lWfdP%UYrG^7u0b;M{l9* zD$0Zm`bJUo?%K^!LnAAb6K{0F`@>3eMMZAD&1F)1N zHrRvLtPtR0jWijakQ~<6EA>E*Qj(ucT(h6#QH0-Y&9s18hLlYXjY0iaa{cMz@!lf$ zCOFw`Yk$-fb4qh4onvkJasl%lt52dOw__=r=T}E) z?U)f_WNnydQUpiS+aT&MPsKb$eNn1{%hTKv7zYG8hSr^NjU;4r_XX1vDE|O!5C^$y z+?mwx5C>2EQx7gu6;eK?m$3reg7jy#J<)wxp3!9EXLW_-FyzW$L;KjHqMGcG-0X4btsX$dw7`eZATpFQ^+^Bzjn4gyM9Ahx0@}rue3t?Z|RY zFW8HCr!p+Me!(}G-Bp5XoRyS;9XX%{jwz@zA$2ReERzx(CyLEfGNSUQW#v_hp{{XmOy-HhC z5PT}mw3f&MJ`xH~KnIW-w`p25N>Kj*l|m5Oal2-fkAh-7K^ias9}tZI4l&a&a*TIk z2|0$7_f?lcCu}oC=+Bu_^-S7jwe7?f7y<~*L4-FB-5YZ|DH-gOy=};zsDYeyA?Q?! zv5Ow|aJMH76}(G=frtLG;e)aSyky-)u2iFyI=9gGOE{fbBd8JRD(y)N0mDYB3AclxvJo zIz)tU!TFWyZb(h5qBiGOLuM1`kk!}@e9$D;(Tidb5h7&yhL-`pRWb&GMx!Z4k49rg zT8@^|bpaCO4;45>2}WP~jRad7Ixo9Y2-5nwitmF@o=mh~p^ax4Brb&?_lQmRH-!X~u4WbRG^9MB;?sbvX7Y~oQ zMll9;4%lS)mHz->L}|3}ulGBxPbLo0ac=PGwUq1n`YC=^U1hfH0h z_>2dNF_l3e7&SDUIisP6Tfu_#^c~F?k(QdM%5WMQuj2ivokK?5X!gj4Kz83sB0zecP(J*Slw#!JW=vR>O0h;sqX&t{Q!>-$mVA>$0y70OysoNUbQdY* zbxNEU==Ge4RgF{W?N1AK1-|3h)o0BQ-nm3 z{G||Wn$AI3z6z8of{DmtRg>nq9C%xUwK((P*~05SFT>!jusN$yJsDAmPhpx2K^YR= z=rv+F)jaibApisO>{?x;g;uZxvm~uj>5HimC$~@F$(vANU$~;gQj9;CMTBF$TilO= zcGI{=%V+nkJGBtXdaLn5Q;xDJst3Ww3vOCY;h+G?ryQD5Mgm2wJy`}8Cj?`vTYIl? z)qczomh=R+iL8jnnTm{dAZ0N15;X198{Ukk7_mA;rtt%`!5M5rY7#v%+i@!A9@YBa zw>x{dbLY)zhN$irA~O6@)O2o(Mnj~I+|czPW2&Pfnf*5Z0OUUqm`D(-LcG29RH5No zeIK;xk#voFjW6jrGn^p{)RaI~( z%6A_uvFuvNXqyZX8-dORUbym3Z^6Y@sWfR;Ae2Vjbv5NYIib6|EpQc-S%-Qsj2mt@ z7F%)J>4b2NnNLa4DH>C&wR$o-^aCP(T~#$IQsb07{O4;1jD>11$Rx3_ywMJnviG06`KZ{_wY8K-2|}J?ZP}h|mi7Iva*&E)5M2 zdONV|)G7&KK}z#pw)afV84L+pWizYF@$j|WA+jZ_MNNq#1ScUZy*3o)u$4o0W8k`^ zWChxdlPT_QNXmr9KbDxN`eV}=nFr;HX&CB zW*M(eBnUswMSEBxbUQsjXKSxkF^z5sx)$80Au#wlBvqa>EPnJ($#c$56`Ro~VbnBXizjH2^@DL>7W;U|5us(S3jXpYHq zLLQ^u$n5S%L`^oOQ!lfr3Hf2>rCS$etTeWbY)p}s*4dWf07=MU$SUoK&ALhhYy&$< z?*9M+pifJNGWnj?RN0i-!D>2$p||NUtVF-@sk>spM#g?JvC8~i0b{euUnR$4G1dmP# zNU@A@7e$Vzu95gBBTw5DPL?AC50qq6An{aMO)^A3R!Q!d{{S`A7cLdLr-uv=E*zD; zhFL0b=C4&>6ybKKA&RQ|#|nyjmYf$z55uUlSf_<2XH*pz3H1?&^-dp1{HgYgyHCMt zlby)}LIL3w4;?Rz#0gjMOuE=`e0v+x{j&V|s)Q0F6j3m_m0F2Px zmefX;cp_wdlVkizjxPqd{t|hPH0bnT3(s1 zt0vo#kv`->4=<5Fn{ygFApJzHYfOfsam75S_K))@R*IHQh6<}l$HjFti}gU$#d>j` zh;33t^0)&OHFWCh{^QA!+uPTm5!gFGS|h4kxU$kf)-KI217$7R{{V0psSn(0+S!kk zL|?T=J7+`<1TpPI?wA=ro{70n2N9tv;!Xgg`_T^HD5iKzB_X>P zgl$UX?i4`X15KkaZ!C%cPeeg{431f$1}rFKF*#PNQIM?$N8*7bAD2zWbW%HQ852NG z2kxR0Jw@81-%OU|HzGPn>eA1HWTolI#k2P^*I7z{{2a0#c|_EaahM@_3DeZzij3Om zh-&pumPA}!-8;s&0sOs~Ihk4dldUrryuSBcboD%=9|Sef9+8nj$q{zQc3{belvz{DmVOAzFs;b! zr)tH`M19z!)gWg_A=wCtJ3VZ9QFMUK+Cm01&`l%=a(qxE(W?>h??6T}G^uS&`I59# zrsJ}Jlyz5|4{=iT9U_Jzug_92oNEzcD5JVO*#`u;veOeI5m6Zqp2D6o(j-Kg ztZ_zcNeup#^qxecs7$au7JQ0*&7BdIWu8_}(hOX+nQ7aXS+8oAoAXDc0d=Y}JvXXp zRM;|NNK}=1@>;~`eo%`oOiX)I5W0db8l0A)<-s|@WUoZmT)m10JZtUKg)CDN;X49( z{tHl~XN5iM)AHrbL`0ofg{xLCq^Rq@CjS5h>g`IR(NFVYKNR=O3!wuhYzohs_$J+= zrCPyMGNm~cRM@Y%bxWgy=G0i?J zr^}M0My~LS;a7ChC6PMhKomz@Uzo8AUeI_Ok$CqCtwVLAW{~M8ngVaPKbKAqkqB-? zM8Nr@pYvX(#E#hct8A!LwM2TDxbp$ph};v=kuMhHj)Au~&n{>}RFC98n=xt?>weF0 zMh^Rc8oM`?=Ct%~h&G`xV=Xpk2x!}pjuIjC^6XlHmceEWXis7@Bse3kEY;>1I`oXa zXxcM9I%GMO`p+%g46RJ0=rl>QY8uER^0JZB9d2nJnIHZ*q6pQtdPtmJxn>I0vl8Os zT_@jk90M1uWDybRKb5}l=sbGAEbM$!=@8^BnLidV>cE5XA7B6400;pB0|7q}{{Zsu z{FmnC%a`Ki%a`@AeB8eaE?l{PRsB`<+_`f6T)22aI00xXYI>&G@)^7=MKppz;v#Vk~B1732@3JC!O| z(0|Cea{OP_f8e=t<;$1<01bTHxpDfg9xugtAE{`9-1!hZFva-;=mnRTmWOFxF$C08 zFaAZ#^K#|O{{R)sm;V47;>G$O@(}+36D&ni~8UH0B+*Tm-Ju!LSKuQ^jx@(^#ZU! z^M6tg1xNfR{%ijLJ!Ss@g8rKS0Ed1lW*bbv{{RZqTwn2D_%p16>K%!$e&6vg#s2`u zxqm|+@z<7Asa`Am=;g!{U*hQS{{Y4m$u%FJ{{W$WDpU`l`YY>vKjN>TcEkKABHz^i z0L4%aNv3|^t8uz@J?Qi#GQ`4*)m{Wtz6$jk9^<@mqzSBsbx{soG4{{SN8%a<-( z6v+v^%8b+0zwohQ3`^ExT&>Fb(&Z5dpW#b^pQ&Zbmo8kna^=hVFU@$r5BY97&Y%V* zeQ1hbqUHYp$NPA=J_fS|yutaXBd?{50v5wu$~yl5HA*ESSBsYy5nqcBrGA^2=H<(m zE??7LFZ>lMSI{j874@w}xF6?PZ}@NNeB2m#7M25fn2V-dq)ZX3fLH;qH~#vP9C)c-YFCPs%Sx5uQltJll`G9kl?HygH8St(K9%uu{5XgCZSuCiu%IZfkY2CG*mvf{0sj85n3F7Jx(ReS#%l`m~p&F$jhUyBujBe$)jjX5M z47qar-9h?pUz(NvOY>5^u-o)7w*$C+FVk}3-;0a>aGoxIR;H3^{;h z{{W8um&@ual3OZ=0nD__yEJBGy18zD61>(vfJ>Jz{8jbWik0+Nm*`V)Ab0*N^0?r* zSpNWlR!U&`W_V!uC$9u$T)_!r^b4dXc>e%{uMB9zS(M;FmtpIux4{_vM1@6Z0g zftjBbDqxlW027^ug^pT>P(G`dKgReA zm7nk|E%aabJ(%|oaYbcwD;_Q^z6tFtb>RxcEOQ*rYGi-;&E%+H@SR75{Y z#B-T|Zn~Sha%KvYxu6m3)GTN11@#w}X*(yzC40or5K&~hlt6#a80XbH+(`S&Ls0 zJ;57-IgBNc&)Ov9OkELBErN|pQu>tmo2gwvZ!+b~n1e1{xqnScnI`i#Sr}+4rTKB; zxV^9t=2o)tGf|uBELw_n_k=Exh)Rh^b2WkuIp%GGU7LrD973xeDkY0NT)(R<#S#!= zi!ftCUM0&t2#Y~brsI{v9&5w@02yX|5gq|!Pn4`#m|; zk5ZG&VaWrt7ZiTw-~v+fh~aZF_mw^)^9u*klhqR|++VRSTrEs)22j)vB4Q)p##o!& zw6mE`C76Iz5BcrgP>i9s?FEE}JOHPD7M$uS1wm*}6&o@{Nlo8@7{GTiHW*W9Fvb`> zGY+A-Lrfn8KD zhhlOrCX$ruVVFHRg)X9#*3&qOJ7_sRspBMiC4gUZT zwE%N4se@f{w2&iCy! z^a-)|&unh!H{~B5#nz!tW-3nZE9UxjYLZVDJI#6znN#dz{Z#h`7p_YqOr_W~A=;eA z7fvFFL+3!l$>o{}6&A+qsYNTQ)@tYtcc0NQ3DZYa>I8Yv_HEMsvEjPeG|62l?a=yM zmuJF2Y3lWehu_zU23S^CySKn9S`O)c&r?-KN~J9W7t>deq&B zKedbkLRszLZMVfrmPW!gy<1$_?8X6$NX*73)!_#H?bjXcrwxnE+oDKswx4HQREk(z z-_xZTo8I#^VQl!(^=pZmQT~%z@f{S*orcgI?RgQ!``(Wie&Mj^*GYBqJL)YT=T#r|hegEFg|-TEpVQDR<~P4JqNGZz>Gi0wl0e6%iiorMm2&Av@88_r6SBwD zwA(M8Ve+?5jDLA5*Y5qU?=2c$bEW%^&?js{MZdW5OZVYCKJG4iR|bm0IUc5{VV&%> z#pzjCUGK^CeCcww>TT5iKfE-4yEkM!v~NgyfThpbI%nq|9uqvbqo^qOQE5bO@s#>y z5Idq#F1Zn3Io50XuOsYhTAVj@#0DG8hK|(57C)p|TeSqWYqW|4#FuwRt}m45=}6BM zS{w^hb|`D;Z?PRduuG)tbcL|FA2+0f-h0=cylgGE4eK4(+xkyIYyWP0-};ZAh}y3Q zmS4R!_ih!oQzGY?nf+Otwij#&XuCgpvN$d6es$_ev3{$;gx-lsZe)8j#wzP(5W7g> zobA3?$KG`h(!}DiNIsSa+I=;f{=y5KTtkG@Rw^g4p%L>sM|2feBWiYet@Hf55I2&% zZ>0VB(8Mo&I<04~Y_wwRJ@^_l_j zDZP*9*nFoyADQ2`PmOnAOsOz_anH$&)|shV@;FR^@ZT+|_i(cNOev(J%bx9a+v4xB zK`k_WJc>u%ZCu=Qxf&P0&9FGZ`?wGudI?^UX-Ty?lCreXu-JLHp;Nbubd`<9)K^@5 z?8vh{7S?O+F-!MxzT%ZpYP+wd>S2m%Do}b&m;9rl|M<{5VJ2f zzUQP$M3!0d#}1T9!UP-siny1}cIWH3Ry}&TCIB^(vP%s^d!{O$nX0m-zL27XyWo=I zhFt9+T4>Kw18G0_KGhQ`;WY@-F3rMLbH&-1{k!k#^aLYQ0({*@xG{le>m0NQiE(3* zY6k)OCIG*4PG5RQFe7OECbfF2Y$q|g1!u)3P<$WM<{kGOcA5^g*BWj$-iW-~f7-_O z=N-rcc@EDGcj{Xl>?A~KF7|cGZd`|UfOl{!ivGxi-Vz2Z`1CbeXO+n5huZfpMSqP+ zpIGv6L3U59xxxHyV`H;+?Vi<|(>|(G;YaS*ABt1?;kQ3zXG$0gN>T2Kp&#R*BFTYs zdu?jcKAG|D4>*s6MpI9bcZuhnRr8=jKaw7I4ZPKV@hVB-0E&nE_w)PjF_=ga59-c1 zhjwqN3Lgp&d4X`?CZ_C9kR2$fTMoH8WRTWR9;jM|j1RcI@L#D9-*_{AA^?HtljKgR z-_K0l%O;<>#+_tNg>$2Ca+p()U~A_0d^7wtI99j}@^p3vH|9WlWFg-z%&*76p{SVD z=r~~86rwi~emPHBsKfPRfI^Hh8zZ}LdKVG9blPFEiNrBU0c)ZbQ?x?%Hy^#eTHr=a zSPP1VgjZuc+C1XM3#igV{z=axGN58gHOwfx@ z%}PuSQF&OAH>f*^;1wtN^p&IN3b2xr9i@suMTFbPYK2whkN>%_X;Q^T-X=vQ-W7g% zan+b2TH--5q13(m@u1(poHnX%WL+GqJ3F5uE&qkznfCF;A@j5Y9I9TdS>`{hmXYO8 zz7H1GK_JO&DSrddiS}%w!qpUtuP$EDKBGXzG>`W^T>zlK=hv>fO9tE&qi85lL@FYv zMz+<%ZSF;{QnPNYUMRIF*95K&D!qly8%38S%bO~eoTQ2lQ1}%tMWK8ECre*ZUxR+D znP~%Nt8B^kZe~mghpL^dl9dv38TiApPZwD zJ~9KQ$m%Rev;b-YM_&m?QD5of{*D*RwnTSg_!liy#k_%zb{@IrG3_#Ue^G zZre@#ZU*MTCkvzdovb9otVX@F#0N@B;4A}hPzq1zchc$j3-4dQD}itT zXdxr;adC>o4c6v`@K-DEb6^RK(#8RF6tje1R$po;u&%h$y@)GTegZ2{ggqarKGygy z>M0h8X|lZ_JD7$fuO1#90nB?GHT-Dpa941arDE^oo$2Y=KSPg? z(;`Z-BC)?b4WKu`J}B*3S|h7A3yND%T#8a-!8KPm>UT>O>Usl7Cxh1;2NY<;JUV-P zN-JDo|7f|(?)`~xTP#W}8b6Uoztmjdzq9Q+;rb)z^D;L`t)k-Dq4q;!wh}Rb^$BK0Y{2ydyiywonALxoqEWV?Mg8#p zHlh#ffWW>P>w-AWP1xtfOQi1C_>PpF{_SGjxh^>=?y-7dz~w&fhOk0{X-tM56jb?1&;>o!vz6O<~w zwY~B>GxyZcS{*tS?OjPQ+toX6Yj5vjuZ`L=;k>i(q)x%7q+asgOr$S`! zMH3cr!|hqXd?@M10F^u5JQ0fxZH9N2$emJb&Vl!}eE1QaWy#MTJMqEP z&D7s6zUjs-_2s$XaFPzo)Z0QZ&lN{tHcP2)Uk%)P<-AviTNZcmv6D{kntX~9ySRT$;^%y2dq*kv993@Q3 zrovsMY&qj@N_2nA>64Vpf z14?<`U!AKUodB*cL4!X6*xP@omnoD>ME?h2&0$D*eaxl;0(}k&-aOZ}eeeJy4m|-sMsQo$Q z|E{qby}`dBWIaLV&V<)9AtVi=1(=Yg>*J*$V%^{jKvk1)CT5T6$>N0SoU*1+TN_xt zJ7ZaY;)kEe>#yvtj7(FXbIN1+z?wqXRG!BF9W>Y^)$^Xg^}*EUk~jpKsdlC<&o&ds z91lZ?OzgK9Q~lv<1~VOUfV5;c?^UoD#n|WIJ+vk0+g@xAuay(gUV2pOKtdN*-!0Ej&{ZT@d zDQhjMFJW^jV&(-0!CA{kc8&~zEU5 zvVFIjYK(-GdTdV)78_KnYfP5`JXA-uhg}0A4iyj8Ae#NOV0|gD>#e}MR0I(990Coy z^c9KAbd7;d=ufZ-vMNa28NUrM_T#U3g!$|)gi3Uf`jQg~hCq7_u2ulqVi*E{0YH<- z+9~BlUpf0xyTJCT)avn<^PPn-|TP!(|^)wL=$pG=%$;+2PJj72$6v2`j62G;^0_tPUA8ZG_Yl zm@xR(@9%OuyTHEfGDioNYIj>0>uVony6L5db1msb-g8TssU-U;K<~}f;0w1z*=1n5 zFeD3*eoKnp#f3#JQr!_Q-Yjm=FWs= z7j_N;BfxgKGqIB}Bt6DwfT^dB-I1Q}5A1DKhH(x{aZ>(|4@Fu!5k=Zr zp?iPyFJdQo$}p-qWOWGVPOjeb`>MU3Q?KZa$&G4rwO{?{2*BUMr4Bz8+jQHAe>M@HoaFCqxLQ-9hMuYM5%)d=AuE(_rzme}Z980g@I%?t3g9VFjc5o09k6xuzBPWY6Lvt7 zx%-6UhU^Qik$`FdCaMt=;R~J-%rXWFu;JBUD|w)(PD#)}hQBoEA&WbkC5qLUW_098 z7Mo4jJaN?gQOQm^lEk6n^Nr|E3}ti_`Ds-J*joNVy!sFVYi0`8(BkgRSNMMH#|>BQjSGr|n?nX=Xp z$y`*(jhll5`4(TXb^r5=`&Y?vV7Ik4XFujp4j!`5<~{@50=QfNH>An6q=q^7xun`C z+ouQFUTPG~l)lxuoF+;d9{6X*y;C#Z(*(X{7PGY`q=QdwC{`e&+S@itd{grJpdTYY z*s1F`nmx(Y(@DdE4S7MMUA*qvWYpj_JwfHI%Foa!X{gf2i%yEw3^A(x&<(!=d{xij zYPPdV5_VckCz3 zfsV+J8*l3L%K~qG&XM&k<;@{)<0xfu#T+*d<;sTsv7tvB-xYye$3AM82oRGBG0Y_8 zKOPZ;60H)u{Pl3H(m18=0Gwej9?941wX=g1nSEMf&3C)e!>Lw#72 zxGA`G53!x_S|f3HouSFdTt|>4ys^RbCgfO;*2V0hr=V^o0Fn)<`zVJQ zc{$(jke2h!X8PV~yDyV?D8~e;dGG{rI#~IW6l{BwATQX1iO=jRX%Az)j&9t#W>A_8 zVe8MXan&Rci5ITaen;Hk#&`i=qepv^c*?&lU-2XoAvBI=Q!wY^YxWw{PI;EPjYRgO zoyY*$1~79`0JWV$7R`zTB#M1Bd52l|@N{DSJEHv4uCWh|EEH@{ z*?Nr+`BNz`%fReQmwURQJ`NPA44M13f0Z-<)IWW!pvUn>eY^Lxz4_b_PhV$djt3Ou2jHjRAxo7Pz;yHsb%Go)Iue}H}XRIQK5Q{ z>SlbXyLIXDs#>@%>en{r4{m zo6{C^;;Os@m(NyrO(!2XX<#P38JAbqDTo;{cYXbP?6hSm;k3h3ucz)Ys@}66@z3hqM!eBg)$kyZZz@MA>}c^w&W_QEyJV z5xJ|W3MY*jX0h{MPpA@#UNwi!Z`OZ44!WTV+Ka3vJhp!pdhBu!TSJ((IP{6U%=(o- zxJc8@m<17gPc+EB!C1!>gJOycbkAFne&z*z`wbteg#+`> zc95^dn&8=($~R(W>O3%3eB{)|Anm4YdAh9A%4tvYYJA?M^+4{T5<_w>M-8x=QLn&8 z%#Cp$dNgi~8~t%!|n(M7h^@NceSzN5&L<3{Ii=h&!*||Bu_{Tj?g=9Q!yghYMl%o zKGSJw8?8;Zf5RU;ass?`wd2l-8b^5BDC<)<4OgXUe+cXtJ;Jixk4qJ(wJDen>7r!) z5?axw>GaU+V#j7F^w((+eRJ$%H#jZp9<5B3DW!9BuGB}KDXMCGM7B>%Uptf*z$}?paw$el+xEORBA$Dt z)s)JvvY~{Rvpy9iZEPGFJt5pb##BdGp_a`JYMG&`1urNWTZN5s+bOGoYC6%s*pX;V zXxj_>vrV(Bt;vQiR+mfpL%ciabDMHlAR>({+MmRzUa)LydscNiPGPjh*@T(moDf;_M5#yhSLIl&dPT61&;0VyplexIk6;FJ*tC`xHyW+rJt<~ z=cP49=G;oCB>!=XRUjffW-#t)r%%+&hdhQRTrJ0H?GFdBc*pt>(~$tnu;2V1|Ke0U zv7&KoLx$)kM;l20hqXgIX^bd6)WX^8A0Yi;s2dt``nP%fb~wzYs1NBiuEAMI?Q zV>)CVq2CNFhCPl}IlhWJcj2S!Lu_LFAGacNdgBl3uW=vjYTRV|^i<)8nh>^+=rl@m zF6Vw%pQX(WXPaB}7XweKPkTM|V|qtKtswX{`IN)`ChxdpvEDwRwk1! zz?N%3C~y}^(SpO|x@x%oNn{ILOCm2s`y4n=QI)272e?{Zr5H3fN-f$-pK0LwBh+4! zP*W#h7x6?~adZj=-Vhx(`c0{Z`D|8_FkyJQ-dbEiiSF zM6yi1uqF{f6mTX$MMs0or%#wJ_LePZ(L?HQK7D@uw)-7%@wPoBU(cTkM5$E7=28$B zM~PEc`In06kO{5+1r}FD6i;fFN9!lF`(7j0hU^f{mml6`b%Z5qermtESKz(wyH5Ub^3y9KBK^tGn3<;4%Wir_i)}}X zc4E2>gR$SDyuOM4SB;oUlndK3((CLTEy`bI!S61)MiAtOEG1WjFKQ>k^XwrHb|kQF zAs-~+5DVum+rtZTuOwSZpy4>pSY4~cUahy@Vc68#nnio0#CUCELDardE9u{f+wynP z9ux?S`*v4wPGZk=6%KGK2N!EKzG-SBHYDz+;C^+13LoA|8yW{We&EAx0nmq}7|sP2 zj2W#K#rN;dK%J7E)4c1NybrD5ZMyVV-%Bd*`o@^8FxTBhxmMRtszs-)HBGe~%7pIh zu+UFUoUpFWr_#73c7Z+*jL%I7KX8KO9B(9|pNN~IXoyaxbuSK|_)vXjDmmWiv0vLG zZZ7)xH)rhnx*WTl$*f49!z3kvI@Ycu{Qu^+DUN>mNp_6r16l=(E=*yRUYghNSu45#9WN`jPF_ zXRaScPv9PXrE?p(jA%NtaK5eofck`LnVEKyG_s{+nzHuo@8*rl+QzY4)jYx-Q&c~+ ziwh~9p@^@n0dJK5(H=Y#=dg(zyI63C7~5y~(a$3&{C>!!)X>g)l2+M8=Iki;t~#$E z4&O|>Dja*LY`aK04A|ojTK1BEs-1_#Y@Mw@JJwGC?DfrF*Je3|va8~gLDlsB{reAe zzvpR@2dec^F+jm15nT2-abTL1-X6!L*k7xUJ(J%#;#T)p%16<*T!;3D{WS3#od#Lu zZOZz~O(FBM+aWd*vkmSit*3&Au5-N`gKe7w^|d2P4Rn{a@u_lLG+M2VX;4-B>Im~9YBg7P`sGIGFxQ2AD^MVZ+Syy@=y z05M+HPCzLlV?yecu{|eR@r9x;ZIo;|>2>a=)Ou*>M!n{0^&wYt_{@+mW((_kltaUM{MOdiPRA-oZ@t%djil;(*2<^) zQz|ysp}LFbdhY~9?MQfq3Uvl_-9U+5jqJX(*C3`uW>nd?EuVaP5me*R)&z1aofYLE zSn>aE>YEuE&6&o})qv7y=zwdu&!YR_3x>o!>i1ax4ppUxs<9}kS z#Bi>-m-)eN7f&=qS@-I3g)ECHA&!a<~HHwhBuNmM!Mfi%&v& z+D05W88;flS#itQ_}U_>dsgg~OCKN&N6=lV{=1xw^Y>mnc;Pur+Pp<_jivXtubsBD zhFW<{eq$qC3ti_!$p4A!0Pux;hGo82BO`14NA)zeJ>^5zhipp7%^?2pf%FHZ%_Bp8QP^eX0*zY2k$gGC;___;XvvDvy6odkxEzm9;2S z)}~gUsoOqNVl(`ptsp6<%+hu2*}H;^u~E>qUgUaT*Rk%W=<1*%)nYgVdD;sgU4Z~>kfI|4$o^c5 ztXEgF6!`0MKwHbqJ9}f~A20G?7ira{VfYZ8nIu6%TD=fCG7^@^u$Gas&~*+#S! zYBy#s?Nt!TGqp;yKz#~-9s?_X5Z8SQj@V7z}@{rvFaVqPp$H>c|p|&Q4{iMi`HovL=5CBc7nZU#nCoIqw z@%Z(6-~3%CRh65I{(`*mA?ny*AGU*rm0`z4NTAUAF_Ak!K3} znObe&y>t1T{DOhR#52{>i3x$GW9xuOff|utt{T3L_aUS46$yWjMKET54>1Rhp*g>W zj`Hb0+GRn=B$?(co(HUhRK!r&L`*xJ=ifYU(Y7>T7RrfR8RfIx7Z$4cL)Is0D~7{o za^_hD+ki|^xA>DzNclP%W@CKwev)k|TzT}C&0%2+PHa?-vqu7)dZd^PUZiwxlZe2a z!&%OmiR$Y!fijG-YJws_07hn^s~w*Ch@Z}Q_By7$s4%9Q9$G6o@8~M)lud-L$HCiN zJlwtpJCEQ)QSs`Gc4ARU{;gS#3V3xGnFkZdsGZy8y|L?g>lgP~xT5-&T#y@goBt6E z$gWh&ud0%bO5kWpgC!|v-j2=zjK`+dFBz(AU ze%(4w^$8srypc^PH0!6$y=QGzEgRXWjgN{(;Pn1f&}q-Ff97mT)%|>#;lMLA6#c7o z(cTI-Tf(3tlQ`=awW>!>kH{i=P!>S5tt?C5lQD`sAGIUV;Da&*>NXf`_85T=wadDR zex71+8p%f^K;5WbQav&oib(TXBZ|xo8?=}qgvQX%ZC31f-V~T_{mD${C}rM0*r9u% zWF-**^1k~HN;eB#Zzxc`xZ0~PG-s&VKK>Jqr!^Pay@btmm;!~Hq|=uCTSD7!Z~GU@ zA=z!``?t3XGppy+-%!X+O_+EpZTEn-$DqH=i=x^0t#_ON84W@TxJm8D$4daMXQ}|0 zUS|HDU$8J(M!ZMi#)Qo?nb)Ak{&)JXK(%E>uo5Z-Ji8V-5T zUfEpBoLJI{?T?c#xvH^HIP`Vf2hjG^{4?`yH*U38d?c)KF|Fmip(jnGm;z<^N-{w7 ziv|h#_wJjF>Pr@p`w~pmHsY8V6HgP3h{~aDl|>V#^7YQa^YhZ<a zN54E2ddXFq%dqkf9jyU$xGAD=oKSRmk!MP1GQ`=&ecXyUQcb;8TXO}-r0rc@-JWLW zt|I?@O@CR%PuzL;MN19cXE6UfDC2xjcmn7hAA_fwXa1|yeLrFN!SK12(FppWD1duK zXZzNgI5FzcL`=kNC~4qD$zl*E_^mLYANBiMjAL?`$_53Y?np{Uq58X!pVY)EnoOAa z`B5Iie^;3clC^>CU4!p74hfaHv5jyLWj7s zSW$NF1IeN~{ZwObZ-VH)r1JKo`dRHdT^&}5vpw`@Fan4$xCIjvjO}J;{6~xIS^WWW zLwMu3W66aKl^QC)4_JxS|f6%q_nA-EiJkG=!WBR<5-y2+efr(+PM%uZdd7 zy7a=SgF!P@B79d`b4b22PLbB1FoE@TPak-83cOfN;$EViP*reN9i+2>3`i+G%x!|J@XD0Tusgfe3UR zlp+JJowxGl#s-v zO#hxbqtUK;gl7Lh1U_K6+Lp8axrT5d~mDy(fNBjTgo2)!wsx_*Y4*aKFTX!n@PIMui#g7 z3gn|sHTR|R_NtwkS6l4S{i=oaM(Y!A3LhmN5I$~!ePnpS{~I^RJUT~X$~&c}j}LqeZQx#H*rO#=vC;21{H$*}zdpC(SFAi( zI)qQ;Pqn{lKUxNV8;Co7-hW>zC`Vb8Im{DLJyM!U;>2s4LQR`iYGs~I z{A-Z#ypRTil|r{YZ5Mv#Qhl{d$tnrjNT?*t5NO+q0e-^|2D43s>yOqsFe(A12G}~l zA@TH0n_ng%!!nBRUP3Q$kd350fbC?Ce1(wqgxrO4_Qx4W`v$WMC1Pr({+L}n=ohUg znQ8}_LxEbXofvJ^h(DD9iRg_T4nOR!6{PNcRIlaHx|$37-beWyi?}~B{MtlC4N(nC zLFB=JytCTgxvsuIfgB&eBgeZ;onSIKOC+wKHfgSip($8tXy92$I~z)mewAzaqLaD*I)C z3n?mOC&?#V&eaq`}lZkxWQQq8j1zOeikp@wZpGnd|r6>w5u8~KBt`uNL?m6zv zv|7+gg{Iz|ye`OD)EN7m*XNo{au8q#!GZvyIJ_(~{PJuxteKhCQ5eqfB2KK5=1E;L z62~_a`?U4wNQktbnTmZ@7&pg6Lc61+RwKX~i{Dl4keQilRK&-7WA<8}4qel)%B?+n z{;tKz9X0&|j@or*%f_|j*LN>$u>S=EI|bg^=OuCWNMIFluC&0*ZRI~oqv9Ld{PXlZ z^37qp_L^gshNCh7A!_I_IBdkaF9G&u`+TJ=^BT;(sL(WMD+aBMaEs^>?9=^I#89?u~UJLXu;LSsJ);I@y|Ya$PE zBu@(R8`mCZaw(ceagB{lqqmz5Wt<_mB=z$Vvc&Kl8U{RHr;F(gc{IFniDY(Ql{Loi z%QW@iL~-R`^fibxJ<%9oOEC33KvsdR8~AEb;l6mP>m`vl4Q!*{Ozbo3#SLIpSb#AS zxS#+Hj}Z1;@{c+as)}gYO}4Qjul^f*0s=f(6)!Q?9iBvVMi}+JO_pA~NV-0M zPjG$-%Kd6+D58*eMC3=Dh;uA48geQ#+ZPLMF#GZ07->MQGLKtmm10o8Vo??H7O<$$bMj4_I*OnVU>SH5$U2&|1~~m9yk472 z%m;=N!ltg0{3-k539@S{PAynGH?`B1r`bV_Cg8(e8f1N?=Y2wH)#U1+N3#yw!k zE)Q{U($sT+8Ux$q3~@Dz*4wkYS10EBF_Fxt1QplX#y40(Pz-ESQgA8t<2h2@-*;9j ziP^WbQt%u6&Gl1*5qc@nc)!abKT^Gq3=t-RN8+^YqdKmKe9;aG=8~%hbTSJDfJXJb zwwZ-@iV4gUt^x?@e0=!JW$#sT7dUpl<*F;=LfEHa923yBRVUs$H^j-{awEiWD9oLy zJM}ZXVK#E3J%J@f!?(`Gya6MjVFlP{a2Kp#P50{XGXlJs5Gc%umXxOqfdN5?b`vz9 zUruR4ShzxLAN0OvhnE0-RfkrbGR7u7%WL3fA(DPDFbM}O!J5DX=7C;zy=%zTrSoe- zKFl~qM%I#zhL7(x!)|~=g|#KYvJ-jYAsT8G##}qD@|Q*;Z5m zoE(-61^jWaYfe+tCS0a&s!{YVxkgu{@HgHB4InJAN^}5fFqj%y$zb3s zfc!=_Ot9TEqwruHEUzrc(&q~D2+@@mjCRl6$kVJrH*b3B3yo-6;xduA_@1s2NmMUV zZm^vWH_x(UMO{x#Ea)@07^vw=7>Xk$*tM9u{$cc32Xk65uJmfD`*2*LnQGj<08%<8 zPG1mAn>tDlt_gj*-G8rzB4Pq;^Ns!)PpL57-L6pl(ZSXJRmD79jgNT20KQ@7UU0v? z5Lgc;lMos5WO$HzT_6PxG6CM-2p$)BPEH$DBPMKBkd)D>p$oLFBwiDrG%6Tdgx@eP zhdSFJfw=bdIisckHHWlk8h?WULjksxuRF9TJ7oeW0 zzlHiI1&DujJl`J~9fAo9Bvh{Nd%o%KH_NX%mkAHP!w}986}XZ+O%s2Ew{>ov49UL$ zB0>cezEQg$?W#d!f<3_`8OVvpWC06s=q@jjQw@*<+%$29f#HWUK%Bqr4n#h{Re*%W z8^EQH~)c z>At%(sqM~Gp-02@F;KINTg+l)y?Z7ib5j9@i1%~dBfi$sC)X+{QDqGJx#dds>v&5;FcQUXfEupNpUvD8p^YFOJykjri0 zA3c;DV_}ze-An6tF}_pzP|0;nH&iKJb;5NNp;%cIUlDV2D#G9x*^UFmPz3h4n0@4gnW~n9GhcjlhuZsvd1T-3|y)a?oFv%r??#m(G zZL~4K4OjOU0QW(8`jXG9h5!aXi5`f9j3|%65VDYb79pS517F8|TtG#6pe|et#$(Dg z={k(!4($ZEO-MOo_~2=GnHGoIa`mp%D_#2iIxAgekZo zzcOtKKph9fh9nF3MYv`WkQV+dKI7E^0>usK08OJe74|1Y=UlMQV3x3??wOZ4Oi3A8 z0@IDa!_WjV0iXN6(l710cbpdvvb}Y8>7Ed_Kg*{Cjw&&5BnF(YeR6)(Bj?Wnp}%}{ z;>IV|q(P*Gz)?Py7pL^9EzSL8$Sa34HQtDuIVsw4;+tK%I^>0Wk1^|yPMC+S-H`o2 z+MwKz{im|O132A=FVA4qb%lJmzA2~Zl4!_$>~pQmt4pwmfeN`q;LRkC7tjffZ7=AW zNhCFb*dBFrlD84ti~gzpVq*UyXMiyN6@Lu_G+GB545?(C(6;=B0P9-Dfh|wvNc$We6k`h7g+h z;;5(cp_b*l5$D3xb9O6ABNS%TI|fcm_SO{_OZxpNc!0hkBaFj&(O0gqmrCZBc zp_kS_v$pkWxjt*ClzP+fUE1t6b-&(=sklXi!k0B+litQ-)Cq-q_B|SBj25-cEK46r zw*_<4q9@K?>Ea;F5at>&Bcnj^%QMI5Z)3tz(o@mrEMdAP5GVxtH^u}4VS9p94G7rW zXFLJ>IRrvUCHmR~H5x8)~Z@Wm zYM}dMTBmZ&fwqM%XRCX#2H*ePSW?za{>Pg4N&4w&*tOmjvijJXEXxn}$7LoHu@9Zc zt?)JoyH{%8#hKm_=8mGlUfl5THkyh6z7b8unuk|fmC!oSaEYik-qOLyTVP-tqcy^W@GB!9A-)8R*zeL;aJExv6|2CNL7yd%N2GO-H zwTMBJHe6ZND4GF%F35j?0CLP8Y%7Z#fJ3d4ES-ic2H?C1|Lf8;pTdBFOA{Hv4zH58Mx@ur*&dtN^K$N$ei{!TPLA^cyd9rdJ9XbsUBLl0@* zXC-O6-NDu>^N;^^rxd&U&ZmTDoarBo*-;8;pc{Y}Z|^WmJOTlQ6Id9H=yT_w;7nWE z7$^!d@P$EHdR_PfN9N`#Z(!}Zc<(ldBNYGY{@8G3=490dLxUtq zfno6F(5&Wh$IAW}qrsz3FjM$qOefDrzus7D}SVn$#_ zvY#4l^ELfUi9GuMCTnxyIp9o_5WZCwV-cuCsDSMO|EHcqgQ|MhWSYR&<*6lgnK%HD z86eb336eem9SN!}{pcenaWtIK3z{}gKK#}@+H$|He%GmnrLM1vO&{Y!RNJ??6>}%o zAio`ry(!NrgT0fjQ5!HU8FxrNferTy5()7Qf^ljWz{+z0V zqH5L)mT-bJH18a~j;8Ht0&|6d)XWt;Fp)XYalOwmhvy>MnGdvt=3_$|FN!8Xjd4zY zY*pF|4z7q9jhc2hG5 zf8sDCUy?(&e@XDA;jk34cE`^61xEMw37zti?R{<9oHh=BAVI%cIIJ$%)c`l{d1mia z?y_PjXa{ia-J{X4ZYT^1x-mSHk!(*BfI);bkwH$yPXw(6^76a<@OMG4fg16recqge zYXV=hcmOI5N&IC(!GO$AxrPSzj>1?^RT$K|y6(>6ff5Fz^tHuip_vE0bSPLSH*P{x z-bRHEXxP{^vgOxC?cX%1{}EcA>a#E56xQx+*@3FxCEd6L3YrkF_Jzl|vam0qhnHW! zlj$#w*dM-;d^EV#K0NI@RzyLP9h2*WCx@4}m3|=F3Sa1G&Z~+&W`8g-AW?@AuDXK` zJ3=AbGrS@lUSE`2kdpp|rF|D*EAC>r^2lmd4V(!Kj_wT#U?LtA1Yl`EoixeQ|9-pe z{z~)W6j<0*gbw1}gCUVCo||i_3sPa{RIptY?q>O1$@UYpmA%|}+XVZlxZr5*afvpJ zzUQk>e1r06gkQ&-WvlFgN6Citv~cWv6$v}6dg}P}mRIxD20Pn&wT*p8Io?cNLB@o$ zA#!8G$EbP_u7}MPTkiRH!l@~ql)Ds@*XQQ(rF>JasXM3xKu(zhkQHr@V#he*Y%!tIQ$45l9Z0Dwf3`0a^520r zBh_X7vDJzw8dUxv^-SwZ8U&o3!;o$qGV@&fh8U+7SLscQR!b7>L*(~sF8r&so|~~x zc~d}KX<~f4EXJ&-`}a^lQmEJjAxj?LOtI8^EK~O$BX6=Lx;TR_n3598(P$+O=)){Q ze=guya=Op+`yesTQCfcvd5zdPKbJ_8daaPpPH$Lt;e5^;z0o%6G!@muD#Js0&_+#KdYl^yF(dGb#DFuq5VF4L`{_EqQ{u@KZ9WlZ5p!FhdeaHbBqpcd1gU^@b6QOp&t zdcF)24vbEl3VKQsk!*KRkw^6xj%dpJK=Tgb9b-{tlGofR?gtHYp8D3s8E8<+=94V0 z>tlQ7)N?E%dXdkPa^i6IhH8;Usck5#VaUkD$|G$=ft8`fYM z52QZ4v*m}P`YhHDvgJECx1GX`WCaYw-k+sJ8wSLZ>u@qh2Ald|c8wU$*!uR~zR({f z8IEPL0df0D)~%Yf@qs)^wIm+&qhT8{gFfPj#?j${%~z4*Q&A`Y=wH6#`Ev>KK`rfW zzMYnJn1if>LJ*4@a+OsfanU6Jr(h^^0J@tCSJ;D-vH}6CCCV@#nN2;O3p3rF08R%x z1W~5BIP_@W@ZPF7_l^d0`a}S& z)<(0vremeyNj3`%{xo(2=)@g=S26yn$r5<)dggsSFT)p3eTB&3n_pF?%O^k&W7Fdk`E60TMgE6T;G`A{lsDVF zT6??K%nVe+`1!j<22sOj2xRyCM^SCXFz2-T?#-AjRc(%!y$P4TXmw2}+h`6Gt5ZKS z7H92ul#%`6kc+#Ehjw4AsZ_M5lDCDP?<{V-8hh-l&*Qf1tG$6mlQ*A7Oqm2Gt=sHH z4;yN?mp|IrZ5^)T@HfVF+&jD~c%%RvqGr3=*O{Q}sdg{K+Wj=J`KdDs1{E3{v}d>! z1+qk#QGplH_4**Fz5y2alR5ketyoZbHbdNKU($RwOnKko&mThhGR2{MY>DG%nSv$@$H5OYPKw z!ZNFgS>@lioH|>Hz5S~zQV3VibE1bdI-=bRM@A9meW^+EDiLsee4wamhp*f$KF{hkHLP^fex#TcW zIYe_lGshg}xREkNrkJP{k%Uz5?>>+3AFyAx-S>50*Y$cmU)%OTBB(`S)J)?@T4C&> ziGHrX#^k^INR$TiKn_Pj#Ve3&vsHrk4nk5T19O*uTW(A-6o``CATUfhUL@rP*2rk2 zP0;aGNoaNXXO|{vRQxIa`^0-OD_%JQ@3ve1i!Ap{roQKgfaj9%38f~#e?c5~~K&Z7F#Z>oRlK>H`KoGiB@Qp~zUju%Z$Pu$=K zvlpXSccKOmC>p!r6`|+D9U16IrWvhocZ-+Q2mXH2fm;!#S&h?eZCR}bIa#rqnb5>T zFwJV)%imRN)Wl6r^nM$OyM?R$B-82;CPR#JJkDU*h~h!Ho~H=w2zX6xjyT0o1GGK| zWX%3=5Bb*&u|LLUq+e#8_&(G5UC7naq-cfuf%O0qXp1d-Q${WTIPd zHq~Bv>?ML#V0|+E7=IN1ch)^YFS(r|XD?{UW+|upuQsQh-L*pc^WmaXwd=|BX{&5M z9Va5%fJ;UfaJR}OvC64^Nh z*PY!K4sR^Md@Ab;7-M+9b@>;<9RRsXpE(-E|JLCDqj`|V6CWG>M*qXTFRWfJiKMb( z9BZNKl(w?U37VE?(qEGYa;uFLFFIhDc!&*({(a8`KhoEBYXCTUDL3f~UAFgIKND$v zFRB7aADn7~=^fU71n_434`Bs>MyhsP8ZIT=bA`+?U?)LS4Iv2?>}q8il=u>~mL`#J zNCqKiaP?rgqb^Z!9nBn z--y1s2D4?*+=wNquqt41Y4oxel$n#GXj_)Tk#%hl%&SyON`rbPU7;82u^dPa|CX(# zB8uV{h#W;dEVF*4$pd>LO4=4t*_JynV!9Vyg^8gbSHm0)rbDhLG)NTn&MygiMaywr0RpHa!ijuqo10Esg#&A=OeT0++>Sdl{dowH0(|{+ zlXTqA$D?|xn#7kA<|Ua*C#UP&&Rz56-xSe)bE%_~y>O6ODP9^) zN@Mksg93|=*vm&OET0r!I96$MuFW~gfm=y2XvHuG1YY;ZvK{s9D+^qYnljX;Hc%~` z+9{1Gm`;H!GB{C!axd$U#o$DMWSgk9>WQVfQ0I%Xe4T*UUx`k2j%uIrr}VNPPskDL z#-Q60Y z{HH0skLZUquP#xo^>~Z-ol4>EFLcgysXLuEjS20xl($AF z+_p~lWIov^=n5A@H%;j_S!HRH^i~G8oMJ{1i6Y`}m{x%**x3x^u#)M-TdRfB`wSJM zR_cj33^Vs?@^^Pz&BDxSC$G@0{t@pTHdMf|EdaSbh1{oB$Pg#vVK{-9oy7t~3@2YNt z0`4f-%M3P@JW3PH-^`mz8q}EL-||6!{t5ho5ZmSNJuagDx@T*SqbZAEo_W>uAyRO? zQpakOHpd$L%O|PZZp9K2*Qh{;PaeE;L{V-GmD5eVgi-UgsURc8TtJF?mTPoxpbsF?6gf(|Wq7g_yrXTeI0G z(YbN!n<4b3#?PZ~)_ak=niR3&i!k+z9o5MQ?HtF1-ax9u0NSDGI_mRp9|bks#MG z(m|N?)@X*QQ?+mE{Y$p9#bA_EodQG3C3KZ+ZefC;g;H&G^{-P91gWhxeMMGd;$8+R zkuET#6BkH18>Q;;Ue5@ZrY6YLR*Vh1+i8}=G8A`xT-{(Q^IVB%NS}2w$h4FXbYWZ7 zHOjfzq%_QSf`a#;*!f>^>c{9WFu7C^<58xylhvOn6w5dsp9UZE&KRMROc3)mN|TGlleR$NjcaM6?7peDN0M1s7OJ#N z`AkoK<#mv|Mf6x}*KyTuCS`qrX*kZJHuT>?jzexxu#cObsLJM3RwwgEfszwBT5Cr8 z`D$7b&b{nr80Qk@LIA6kIt}6&w}{|cen*uRieY6b;d-RGjZ%+|^2uYecg~6Hk4qIr zPWf^Fb7YBIA7<$*&ke?@n68hedl5{>d=dpqOoh~o!|D;o8=Ni1LcRJJj;$_7Z3k*zy~dy`IVG)sEKQG=P{r(LbqpC3 zgri3;83d|wayRr0?;kWK`<>!Ft+^P?-p!Hr&TmFZqeiTqt`X(ZCIl3qM&PgY9a*<4 z9$SJ#c{f3R7-$>tk(zfb*hjir_O(Y}6q8qkf{W`_EqW_A3uvHu&5IRl&QY}nC3sOW z;wZLnci@8~h$EUL$PE~z#$&3%5Oq4RyzE)pC2h!SNk0tA#Uwpvs zT%c$cPA)#hs+V3>U2_MxX;VgYl=6+v{*1aU18j%i&IaB{sr(PXDn|>8b(iB=)OF(I z-5QC&UXj*0?F;Mi8Xw!j8doYQos}r@zj8Pz{*fQl;n^45cYV`HH8n+YRtYY9S|lx; zCLE)xF)@K6C5m>rc)4|Kor=D|k!VWG`odDl;KxluJf^96voIf|$Zm402s9jeyQt<+ zwMOp}3=xM$=8=+UfRezPFtXRk`H}uOJnH*rq$fk>>0t6_1I9{2kHuaA;Mx@CgS~9)%U&hDd7rh`Cdmk_Sh|6bXh8p9rUUI9dHBd?^0b*dhqLr9ZAQ($+qdP6 zAHijCd-^Q-d=VT^KLX!8j8BJ+5+t6VzrJ3pRr@mv5WrP$va=9*x9@R@S5@)dt8Q=f z;(b(>LV1yoOv<)-BXq$5%AY{LHO6MHMkRWU2`7^!Q1S)k^$Dff*rK#e98fkM$N;VF zD8r^|Mz7CW9E82hh0801VA}(pRf+o9|Jnz0vD=WW4y+YJ0wisl(jM$6P1(z%e4~qT z4}^bTa7)bDq=7p+q12KuXJkP`%`Y_c?b{_dzUqcmRs^t%# zf6Jxi|NPCLy`?z<|9v9Qk+G%T)>nV=jI_Tb>V~04y+LHXQ_!^}a2%em)qsb?tc5k+sU4Qt=X1}`a z*=!5X+yEnUXw`7K#1=VP%3R8YRMV_e2!7VVO((k7){Z2yu(3-jGJ3-gw8lXhR$pXC z^Dc@yd3DhzwLe+^hvU1*!VFZ`{9D2IA`|kW3mKzvEc!rG;DG%*fBRRT=?YUyOAar* z1uN%Cb(5}174#*CM0j_mq)~5M{FrbhY{pOr;eSrt@0C7yKe}FUh{GeMgr!9-Vzb*7>~cy^0CcvCuWXb!>8YD=t*>1I)=_?N&;o z8(v6qXWRUT|97x~H`L>jKsfZ6!z0!{t!GS>PLqD>jVca-N>{R#4ftbi zb)2T_kK|VdJz)iVVPzI5)>u3{+dZJ}(l{GIe5r{I>rJc_5P|X5<4ffS-v@OeVlOilc2v6r_E}dpJJdoko`qA z6T9UtiQ=`+e*ehXZIwkz=)Udw(gztpH`;It_n(JG(+p;W{%T6dHPW%%GvfyUQ8Hi10ZM|l@@jV^mdNvIMvcH)&F-fDE`5=y$_cGbJN7p zuOhf~;bEaRZsc7|6xCXm-Jug83IB@dzBtG8kPR5AwG(*24U1vk4sho-$jl1Lgo%R`&h82j0WZEu~xEfE6XaR z2X58GrrSt|n8VMEamfsNoI%H|wCs7VWC^W+SH~Q~KHU{}>U@;~_H>uBMdvlPlk2sw`{(NuXaFY;$9^iJiOao^1fbMO0;N-toUu@#HD*4}-DtvvIXasI*$ zGXbgyj*U332$J6tuBFOFEtyJh^rz&cJo$rW?38>)eo2%V7XYrAdAx9#)~OdZ@L{(# zZtRX(c&Q;}0;taj?g6(u!bYGHnFCJJ$ey*Q;F$wWw}sEEw9zmNU2f)(A_jo&%pvG#RP@vX?DD+xdW zprgZkg=;J$xDu0n_(8DB6+RJrx@%Ri6!N3v&$&E~0+t;PI&i`rvVjPsS)=<)vJaF~ z-GzO#Q#i$n!bX2+l|A#e{&PZ@+^5O1sc}R#)ZS?mKIII;F0b|cfj@i&RP#^BxO{P< z;X-oKgZJmig!b$F>z)YBQmDgc48&()RDWE+)LhJ*&;hX;f+EN1yc<)#V9i&{}_SDTst(HAV-DJ{bMCYXUa@cK|Vbma{nq)5& zRDmE;o}x*-fJ0}m(k|HQpuq1`}`$xT^m{sI4Q9& zvL-gMK&`v(8Cn5lX{Y%IJ)#|-caqkR1lc040C*n)J1VS6!U{cWrD1KmU`J}t&^M!j z)TW;1=0wY$dyVPYSvk5f@-I~5gtN-ncx#`(cBz~48nU#&-wlgHaQb$rOw*K%kTW}O zlo!gV&;z0RJ0vEGGv39MGZx}KTS|Y-sD*J2ZwtgaWX~%fxTPROftn6Gg_YqcVSIq} zDiQ@&XpEFd--UvWoUQktJ>xw1MXy9xR4kO)pAr5{CId z-gy=lEJZwmVYDAcAk{8sQ8TwRk6GT|!nFk>9;IeiY8{9D`3B z8F6>1Q{rq7W`HUof+7#bE*W=o9b*<+N3eXXP;WRc0;oLjT)7=u+7_}rwF2qCgP2Su z55QxbevZ|r(fY6{m{yXQiP|V?%e60Pyxp_cXZtCC{`-N{>a%VJTc#GdhUaW3ax>Wd z%}Z;}E*h30z(EBjg-|mNVxelfK~tQ^KSZH+{byO;*k`-f8uJ)w(MUwk+BNQggbaP2 zH`!m@1X7&Vm>Q3mRk+@bcc+4%i=S%cEEvOB;(c13@KN8302`w-tjM=>e49}iR&Mbe zOjfOd@E>y)*)#bQZUs?Nc`*xzVlqyF^B}-qz1|lw9O30QF}4-GudroAmvK~k$HT@Z zEG&|eQy8L>-vNgl+03rE3Jy9ETHIr^B9PREk_n(UBqjL654qPWdi<(eso_5^G(TgR zJzdoz6|BMR&z|yYL5}x*HidEKiB^+57C)W^qDKw|UlYDE*T`60g73{8(4P;rCI%hr z!lKq5K@`F!>dA6!SIT7ecg^~-H+%h$ethx7z`oZf+;sKAumJ2Wm%vX$^(CC|zR7^%#x`#r2}#ey6Ux6O>)xQL^y_0o7w@v4ZeAnhhWPZ-q0eMKr2kqD^8|1$lFWkhD z1?RJZ-M@CYVdV@yMmX15&w%dRzld~r>ukHn!wqTAZPyH=;OWZczq_9%E$&2(d*ZVGiR-ET>vs6q(5>{AjS!JPpd)I}PQ^zBrY5B+@-sf|S5)pxGOJoJqpnO2pp1t<@-&Bb@Sw$gM|%mfz; zuvZY(7vjP?lQ}hbhm4uj)HxRhRCKwJg0-l*p4PDI;hCKPp`2kqHCN6t7pJJ-k9o^2 zF70Bk7^99HA$oMKI~Fo3rKZ+4x7CfrF8Xt&p5S#i!fGjcei+FxqU`;#u!1_&Q|`Iq z(8Lq3shrYJ{L>wOG`=XA3aP4>kg;&t#2D4pSGv6eo|F!|2(qdb+q@0K+}( zkzE2$gfGs7sv??|JaiJP-D!$u6-!9o_fp6a!mI&@d|>yHTmCGFvhJJB>U5P zvT8vDyz_(ZIki^5S=TAPr&b@AUkwA?v=Z*CXpUA4In8w>#%T$WXVf(J%d&7OYDUkc zs~_BgE7S}6*u;k#7XDjYG`0Xj zFBW9F6FUa4^4Jc(MF?-&*kR{;-oNL|1`Y+-czbWcKFwg^7g50d4(UqcQO4T%cUD>5 zmIh=!Ns|g|<~{DN?2f!W)?CZw^BL=p%CL6WJa>w&^ZHyGa& z^1}HLOz9%{_gbS7y3Va0c_!B<4j8V-W>BlVJHh1wSk|W}k5he<2d4xshvZstdzPLR zmuLIbzCBw1@DC1x?-^pb4%%Mf%tkNFyCZAtX2qeJ4SQ?jk4MzN-`sselGi^yN~TD} zAWA!Jvcu`H==4S2y=w>^W(05PieKve&+DZ+pFXGxhY(#WNcdjvjz*imH6qPZ?HVtL z9ZcI|X$R6L^7-d5Ia87rk1f&*2%UFBV*BnMQ);w+jkqDd$L-0Ki?_&^8eTrZUWpk{ zDgqn}Y%&p8Z0{0w#daVb4e~^TDPWs$S10%vlNBNLM)!03xE0oR#4_22`)QZTz-5V? z2#l&pXPN2a`?}l6U%kxQ&Mh)A9GoEH>p!rk|M-zsV#P21R?XsR9$bluX6m)G4bal{ zi$fjBpby_>{jIne&L<>?BMyne`WTE^L!jtllPsRXET>`PbY3fw1hpR+-nxcENt8NN zv73EJS*L?LQZu+6?D+w%j~N9e&0hqArDTZQ@On(M2=Bv< zWUG|gxMT@xh#+MsWqf;2{YssH2jj+z0G|mv`*z!2g3q!W*Q!Zji(jv|)R&0-=MsWK z>F>(C>LK8a^!8^u@}9<$h+fSF^@_%S4?MFBbf&a6Jvl3GDV4wT`Xh?RHu`X71k~0P z#SK}Ak97%4u(o{wh7-r?uWk4q%b0$$-bT6#Ckw0uHm3e!uDo{)*tN@ul70dPx<G*bo3#fgxxpEq{XZfNm+(?= zcIaeO#?jw=y5PXXvEl42@tlvSt&^*C^9{RzE9&bD#J|?t1K|XZJ)zSW)^0sQ5%Hb< zr3-GSMe6hE(?k6Q$xbgX0gxs6%SH6y64q*ZmkmPXC;A{~_k55OJLr;>a5(n?MZ6EP zPdsP%cRD;YgRT=Vi?QQ?6K}HIRZ2puT3(<++VL&KxOt^5$m1aswJ7IXDG!)QSQkxI zo)2V|u>S89mqRt_+5?zhKGGajl0fMuPfA<{?Okpp zMo1qqx%!peS*V+>SS{u|mXN$xK=XLii!}@YB*}Jxty#|R1;kscQD-RQmrNvXf~#`# zTsN|uIG(@v(0bWte?BFw-xuc@8m*Yn)ugrBTb2y}xyo=)WwOy5`UDJCism2rtab4% zQTx^NEaG<=0Xf#SOuy-8|IiOs-{Q%=Y{$|}8PCoEI6PX*LReon8l9Y!&Q!Se0JOP= zWwMe*oSp{LTGOcY7MTToex8!~vi!UD9EBR7h}5<5@@IA+91_?)vyL=ITGtq{ z;Z4Zmd<>K!Cvm^;iSfQPQFywv>~@`>>b69F`rSSMuj3Z!M%||=HG4{^yGDG9MIejb zOE$J2*frS3HDwu<<_p4Vh{Mv81=S1o=(My9wxpVStc)vKpGpte4Ape4DG?7}b_s{X zs2ia4&naJvI-jfTdVWxn>~W_6UkFp+e0~`RqdJJS?0Bd@T&WM*-ZC?p*9ywAx{H4j zJ}fT298iC|;dN;dDZZYXX+h$WIG|6{Oyzs^)CLvp@md@B3+IHW8y7t~j@6J>K&AY>~HVj zdi&mU+lSt$@K^oLv~h1p&6#maUmtDxUYyAWt!8c7ZRQ>KgQA)_lEVCAzJ6*`D$9Et8L(m~ja^@7w9iuYO}K+T*+} zl^YhsoeULHs=Gl${@ANwFw2S=*~Mi=FHdkjUn90<)}ciTOl(&24V|CC(AEql9~ zdnJ^nk|{*t`CwxbDV$O8E2ZZ^gDlb^1XgF}vkEXVFJ3>fFG$qBZ(7)TSMwpjm^Fll z6Ak7pYj`)Arm*K{5WgYny?R4ap^L>A6lc6*)Fm=9qrhMB;_RWBOf{=ZO zQ{Mick2|XwsI_B{p0oYQ75B4!|#7 zuY-A-(y_K!i|?GBp6{ARLFw-q{%yFhjst$lvzR9XUq37WtUOu$YfVv+Z64EHSF-4Q z<$o8(@5uP*%O|UMx;KhE8P_^`sob+(B=OkzLC`G=3%I%EXIbIZpQ(H=O|B~q1g~No z`B&Rx%WDrP#IkVzLS1W`(9`r)$wrc=JUvF3b;c@riyrT$sku#uQi)8E&?f|X{BEVJ zF(Z}Lc}L)e8R|aQ@Hu%iUh9D#{ zZC@*MVOC>(j$#mI)ON`ju9{lSSf}SqQMy-w$}TP7-K0V}VGRe_Ic(aj8)-lHBAu_# z*A(^LD|f;LKYxLcGfQji{9Sq?fQ2T#{(d`8oF*3Gd1t~W@LE=SkAsWd}s%UaZP~5$mdga!JUJJ6G94cq78#^<6~|-Qvp>pzV&5xU{8gQ(d(I zE>e`-q~_8#vPMWqUs(RMs|xaYpb}=;QrnZ~ttcKb9d)ekoWym=K1%<<{MBdcYgXY8 zt`ogHc|S;37p5*>IUSmqfLDuc;Jcne-pejD3*QpMz1hAru&N12qcpbvlE%3V;|_IpSi2|y}^|p{6k=6koLta_+tP=WtwfwGEIpux{@7T zjHqp#=`+=-Mrc#6XZoZw2<3;{n^dX9JEJz$tomC1VlaWWEU^p#gg`(u6zZ?Wf1sA_ zR@IO2DZGjqZDN!LI%_=u9$ls7MT!y^8k=Y*emfUh($xvHLQ zR4shyFjJz00s4LS{DcVQIk!&CG2u*O&8aEVhX4Fr1l=~+)lpG6EnvtqWvHBfvuTjz zn%?lo^ihR>ff*;oKXvO*Eakn`fHAw;Dsx|t`%_}H)0?ys&%V1^Vb$ADqmMMFXo{}V z)eZvn;lzj+Q3;#BCK~`V;TrQ|GegMwq>20#`?I}kA%GIP4LAg8+wZ>a#?BBTv ze&FA*2De`uNJCB^KnT7be@NQizUplRtrJVw5>v>-rKy^;BguR=5UK6o`d0{H+TK}? zk+S70X^lOc{8}rkBlO;8%#mcJRblXfHRwWyD-hgRTwjM%yEMFsvp=Tdu`Q+e)F)3x z*!PF**n~b{l7)*jWMIn!o-exidt*e(5?$ZR)TgJGdGBzZ+hrig6gl>IiN$5rM{jVl zg_~==gGaHB7T7Q8QN5tsvXLjav||`JE5H7`#I!ul={t-s-(Q3HaKhnmI*8y;y>XBnIcq1Ct3KZ0ZfH~~d z45v;KUlw(s8{{nufU_&?7M5d)#j(MMU2ApnhjX%@a)f9*(xSENu9MgrLdkAM$|CATwG4xv+)%Rv{+qSk?nsxqqUKL}V zl9}-Kn^z7a#Eh5f-&`<|9X3h66l!B}ZLG;8{aV7;3yFDz37dPqh1?T?sn-x_7a1M; zxXgql&y*OM0|u?)1K!!)@?@{<*_eR_bC>6V0Xn7#{fREgWg|Ut6;U)gs_Kdv@?X&E z{N*WMvwx;+x3(R!L1K6Jv#J|v+oO70yP_j*W0+!SE>4SgL$0r8MXBkM<8ftOVFw5a zdQQ?tF}52zWAEQ=MbIpRr$um}U~KPLj3=RII~OX~X{Z{O*&oWKVK(R2VKV%4dbW+1 zA0kY{mj!?0$WZ`1VV>boHINAJBSc+!TxqGlU=5LTBB^FdxdoB^*-FPrs65ut^!s`4WZ z)dn{yk{ILUPyI7eUK2s`?k~CKwNJZ{V4vW_f46xYuoR6f zC;UlGWt(^mc1>=O-9q3m)gqh*^JCIU4_k-iqML6V6B9EeB~ntt|7|AYdoI4B*%u_6 zKH6@fxru#DT^7Ywexhd+N_`+Ma3%~7U@ciTV^7eEfF3DBOY%*VG;iK+rf4Q9PuJ)t zjbf_$;~4Z_8)Gv2`}iV9)RN!p={;_S_9{bGZz{2uQAcp>q_tnmv7XG$Ga7;FQcgpg zHXM_OzT!BNF*ajq)r>!?Btq4UgU^qV%GN2fo*I{{x$MD!TJfIyUoSL|a{b(0Tha7= z2afi29Z)?jwYy-4;Cn4k^x#T1zFgF_%y?+leFWVU0gr< zM!#~Y>r+zI9U&gGh+x|&Wbzf2vC+wk9 zzce<|{7cdv%y5V!gSVsCUlQ7se-0drnYYwAwK{Cv|Dwq{W-k#FpQf_IMr~Ped1+&Z zJjq21?4G#6V?eCK%k30eCfb2$~KP2txS!{MXNd+`5x6ievOcqe3yT$*8_c2qrA0r zwMi`t;iLI9Y9Vhn6eMs?(Y@Cqo30V+Zu9hvfXRLi82sR~;VA!6T)Gvl-HRYBw5VWQtk9-x?LD_}MFJaIZ%NuSCpEA6|s95?^sH z{Q)tig=nx@TehvbLpSmzZD;Qk67|YKOaHjxmr={DzDogRkW|2wZKkWdZHd8JzNZg&QkeZf|zL*}(#J7VZ(B*Z$E?)#;i`u6v*MU*9( z_(ul2MT44Z{J6qF706Vo*~k;PG1AUajdGb9vE>1N`>%sUN!e5u+>8(V%xA-L5{Nsco*(@Kj_@xWy#SS z_A#ynT}LJ|w92g!%if$J^C3@o``scSgx0fmZrJZlBm?^&NsCH`fnUU0z>ro+9po+1 z>w{+ZbE^N313q(Eme*?&R#t8lWSl3owOT55+QIAGwnp@(Bw^dhd8j#rqsJ^Hp`;o5 zUGpj9;_i;27p3lxQ$t{)*VXjx$f(wTmMs_!?UO@{=5JhnUGVLEZK1rsl{Hyqfr;GD zmq&S)59;ls(F)EsTFH_=>%qEjR&)688PQ%18cQHnB;p5Q8j=br9*|8?iAZUO2mCESxHue>N`gBv&9grqiDfD zrNZ-jxKei_ccLbB^;^+>h44|8c0zfQoWy7v8}N#dD>p;#-~-RP=V%gigMl8aygm}K z{9;ees^k9ON7@+*VY3!8g$}%Mtnpgw;dx0`xxSt?jMh&!`*Br=%`G>dDpyGSHB=+3 z9|wXj<3=neSg6W~>jmx+v|*z34(}E>p(9zm|2DbH^dL8JL?|+TdiM0WWT_;lioMks z$1l_Gf6W1YcFT7T)K!}KVl~nmVx;Ox>nDWK=7#Q!Uz52HS1oD@llcmxuclFNxSbJ?1R;?P$J}eL)NZ_wOTa#R&6u$~sPRO3K1%-k zg&R~@pi20o*VTVVQcZLNb2IG@xToF_9qT55a@M0SPT&*^TTct&i-MG9RuJHh6nu9$ zb@payV-}}A!h}Ei>w2fnvWTxt7P8qC&y>^BcvV^l=7g*_X&={$w-$Zi+9qatu75h! zyO;fO9x27qZylC8Aj-_Luvz`K>^7+LrFGKll>Q&{ z$eS(yJGC~o!Ls)yi0a~bp%`o`imy}fb04CiND_U(`oQOy_kcgko^DSCV8ySE=;q|_ z)@vjQ2%jU$87@-Y^&(hx?eFcOSR&tRUH;aZejr+ta#!TIPf|a3>{B-g(e90k7@SG{)a9XMp`N;X*UhGwvA~i-NDwgpmzp zcbrG~Pg#aWx!Zf$4mfqI;{OBKUwYs%zjf&gDL2WVBzG-i&|hmB-z*$?B3qRF;W|s} zC$~Q)m4cV;?Yys#c;=D52HmWAMHTBdAyq2fkNHNa44^LPuc-UdbWd@F9;st7a+5LH z<}&fBdy%%oL$=?zM9_!h4f04(zVa|S0#)lV8G~OkJL2tCNByA>tD3Kd8*ShwxZmt? z3R;OJkH-E7uz?Fc&-qx)dLzITuVcsRykC!})6{xgB;Z(<= zE`t?LaZy_3CEdiqUQ0CsYwa<|!`LhAZ&@bPCR%2K=7y{X3?;4=LiNM+)28DWf0#e0 zVd@ZPLFYL6Dl%chgIcjfUyqM;B|^k@ht1&Z3MeWKyqd7c{rig^P}Ju0{JNlnZnJgq zGY4ne>KLWL6q?HDG=8T@*dbK!5%)C{`qX{$H=2*EfKb&g{N z(&>2&=k7QwzR6*7?`9mXOmgOp6iGRuq59vK*#uc8kNj=@p50?RhnDvC>Abib{xBHF zn40Aakwb9(a`?`+W)EiyD}&uPXoz8Qq>0ZwCRN1Qinj_dSaIY%epA14t7T|Hh1f$P zS08B4{FpVVW^99*W)j=p{w}+pX&pIG8strKQl*!o!X|ER-01DJ(Au&de9&W*X9;JK zj^ldDGH$&(W8fB!K~bw}wl7pe$`LO{r$Los#K~)IE96ZY?v@j46P6jqr? z(Ypa`xKN*5UhfPFGkVrM+g-SD`JoWk0-M?(b-Dwe`hFJGh^R7nNq3_!$X2e{F#X0x zhJ4FQaYf_sdx?I1iJ+n$G8c zoKl^1Sz4=AJwk8(=(Hh=r-gG~3oX5_orn_JdH(OY`_V+z9U?G%^rL~ogW`7oieV%-s5hF`wwsp z0eLHA{3&t7xlOGl%Tak{(Bmwl%KmT7B4TaIbs%%sZ;j;it#dGRt16^|1kZ8u_vPQ3 z_m|<_nyrYhK8K(EKDy)d_MXx9oe$c4`YAc<2b1lR^Rlaw{{eug={G0Invi_E_ww;A z8iX-PKQvl!ufin0wapT9D1i*X;78CW3Um29zV*f|e1FN)J4X+-hOjyYRJ+C!X}-Z2 zC#dZ|Jqc@tJ*Jy)KVblimR!lGOVw_BG^yv~{P(III+!ZvGB!g9qMVX{Odjyig=%wj zjzg*0ug3tF5Z>)de-bOV#zKtl(>1}S?i)$#nDfm$imzH0<%9=pjIVVCXPql;Rs~vE zc8JzTEBCKI`8!q~Q?9|2!=NO zsIgqv_wp)`hyuh|o(@UX1LCsI?_y+$8RCduZ>u+zrCx1nw^NQ|1Co!SSk>F<+oF+W zfvm98+2k;no7R)05EXq{!?(^XQ6@8>`R7Ef*{`R`^I%DJ~_hUF~!r2VMR{K@35-@V)jQJ&8?d25_x8{0(-6oxlk zZEKr1Bj?u%>6}r|tm?D(kXK&|v8e7+3HNl3TOtQ7Aqk@M+AH{y`*D57C0!3$;IN3= zAkF=g7hGAG0y-4I3;~k-x(jQnI!onscKvSOlx6)A!=&!I8?``;eQbOr=ItaH=ykRO z41!fyGf9;AKdeW7e}aTxoInG*z0Lj)g+O}0dBn##N|P{NNI*bkdIAY`B{*LU0w zCYJ+jy=*GcFXm)|vRi)=g;ofS#RA?>bpphxEY*_Mt)<^Cb)2T73Qb=c&Sc|8$DKZniNctaXwA zHrKd|YB(8-Swd6^^odcT)urdTopQ@)aOVI*wyMbATEu9Y2;ggX6Pg7~J60<_PMLXR z((}G0beoI~+Fx|s3iY_%fa5VSEi5RIUfYkaY#V3zAnk)OhfvPdXlC#g0}0N$j7Yr- zvQ^%U7S;8UMxJWWZVO_`K;$b|&BqLm7a(B!<)w_#RisB`+qqsF4{&hW^NEX#du`S7 zTlWWR*tAlp4G&+;%B5mWS?(i4ffMjGNmIycnhOWBaOl-re!e0bYrlPcrcNV?vzUU3 zF0MUdKM>9nI}f_GF0n?zhRCczOBu|zT)bSl`v}x%9DO$nq4-*5j^Bw`xwe7< zs>}fGc#b7k40kLpuz6+u8tjyWF-Yhx$L$u`Zr4lAd_+PW>+cia_#MP*i*FRf7I5kTAA+n8!(fow`MTI~0#jB4bmLiWw37RkEI#Msz3)H}?e6{Z6R=6sOE<|Xic z@m?r$`+_C_TX*VbjZmV#?@@Gkt~P#m_KL;LpoP32L7zS7N#HLoUn{MKomn`f(%VjWHB5k155LnAiKx$Vq zh>@zfcCS?xsNy~o1biE1W^tZ4oJ(u0$M-3hSe*C_{{R!>RmG2(@G$J)faHC;2;Q#! z#{Ts(f4O;z{$+(O`aME{t`wCDX$lT?3{QWW#cQwVPQv^(} zm}qu4)C&i)AG1DUU;^C-4R`4Ei9jTWitLt&-sEyK? z`AWotYQk4O;k_2Kr`%1DT=c+>LE~5OW&k+209Hl- zm>axL)LBCCcPu+Be$v(&DNNK804+J0R8dD$G6%cW#oj;^rQ6R^ic2g~tGfQ7Lo-TE z+;V?2AVqknj-V?;sbor0X};T(H{JtBb%gGqI1~;;nz5D>cHg^$(NMGo>EqRTp(Yy3F>;7X#HwSE0MU;GPS8)#}za61SS6LwgH{8I4+o)XY$=skB^6 zz{)M?dKYro=U@QIeK2tiD`~3R*P=`uy);C+7lQ>#L5P8^6jO|+1g4Uf>W%s>6#_bf zHH0{81Kg~kk}>G0wyFqlu}li@s5LBy%i6e(HGC|*V~E?X*gp|20Akdk9ez|$4A9>^^;eUkJE>96KF_xZfRFBhP~ zE)D}RdsnLvfr9ukab+rlGhkGx8r&RKtTnpmOHSDK)&Br-tO#+kum1odWXQw|a0M>4 z?gO~C-ulc?76ZoWSytP39-3}QAGoGSw_5m@YL;88?pQ3A%jyRL9IiNwiV7)2W3sc8 z7{77ZDJuNe2XLn{Gg!v|0Js(lqYi#ytNctcNSld+P*6?;yj~#a*ba1NSw@Wmij$3ccFJZZWx1 zyOkAn8(Cq`Q__+MGZJd$9Kx)bK&Y9O)J#Ohbsyq<%sbqvQ?@m>bwmf8cPl>SW>;B= zRD1oxRxNbYt56G@Wep2@BboPz6<7F`&BSQn>6n*!EU$4Yhu3jvBNf{4#^eto?-1~| zx`XF6(7}9wio-0pIQ0Os91pp8%}OTCYBG!Bkt(u4mJKEx{v*SUgwtc0z}_u*mX>c9 zb&NuDUKr=%1?l!O$SG!*dE(n?F=lkgU*=mT#vf4J7lZsx-}jB(~SM3)Bt;$aNTb8R8+`DQZHln^!gw80vFs8-EO8V4ddnTErM7hF7%7Q%Z2@iaR-N1fECjtwXF znsYGLa8s(6JhImG+sFRJ0gF;n{AX1MZK<<`9(k481QymQ)Vbtr;QZVbY@4#KvIZdv z*$M{zB(2BwM&2djs{_6U7RW|bydhxzVxDHJPhjG^oG)M-9Jv(|(JdE&Tp7Jf-D8yz z_Ep9w$RUu^que$tcY^nQnTsL?P`8kM$iReP9$|K+hcGQ@&c^GgQvn5|Eg!h!b08kk zNN0iCTQguFSTn24e{fJu!x$I#jfAWq0rc{~InhIT==ivuSI;a2r)SGjX=!8OEjcnX`<+nprF6P&E~To74D? z<4(GK%Y@U%sYDGe(a6WDU>dm2r-_6#48cqL_Xt|@tHk1S!tOcUu`)%a)F!5cU6SOb zU9FFpEGW^NVko6XL1$ggK?X{~<0}@Jql598XUJH{iMn>X`~R3ukGdh->%kEMB{z z1o^1=fGN$)D!{o{{a_Spl#ZBxXtt^i^2!iOT`f!KS35~uEV)X?7ZHa+55-)-MOTXt z?VAAi2#j$4M6&Q((WI`LkEKO{mpix$X&y&@<$#|Gjm*@bM! zio_Ew1v>oqG7ilgMJtr!<^~1Ss6w_LPg44o6F>O{-l>#1k9k6TDLYMnAMjA7=WQ5^Mpf`M~;B{1bZGdmuva&Uy%Z+PA% zcHQ~8>_xq1Z$VWo0*zg8&A?K-5Kuw0yhm+_M40Ah2W(pETd8hFGQmfWa`l`B5DePB zi)-->h0s^Np`G1crZIrz=JPC;%SdDI4R|GKvKGNJH4Q*!5O3|M7Wmt9EL6?cP)H?~ z{mfZfbr_auAI!&cPHXsqg4iT5RtZ7+m^M6ar5y&rchM+17*$K*u4X^lJEoEp6}=<^ z);-~tj9d4ZeX6AFy_6uoPO)_W-=3Aj>6j%`-}-t;Xz|J>pqXts@pq zWcLY9geix7DVmZIu-(cbAyByPS46yS5?k5Q95C#}yF}okhk#adOewShV|62whA}U& zU4ZFToRVqVQd+j0pP8WCFqiIBFvb^e4Xbi07L;FSSND%gE{eW?CgW`7#Y8Hq_T_`M z-zRd!y}1AbOT6=#*p?x->|Ks{ngj$Wl)D)Fp-OP>F#$~zYUMGS#lYNrvhy#<%JAwn zS9po@FVhlNhLcmuM~`F!aJg2h(xR1cu5qt$L{Uice*ucap)%UER&HFzMZV=FE#&); zzOd(WWS2V;2rri&ing*Mo$F~ykf|guSWgIOjGgSqqLYj+6S%B3Y)LW+$ z2G*eC-o7U=2rwf}V-XD-f;46(Rze)p*)0*Fgt}5>&fLnWcgKWYBM-kO*`>dTBC#=^ zB}&d^H{i6WDXhmSeJot35wXUloXfwob<}hI=DcxdI9W*^3(TmV&y&r+-1;BsH6V%~|`rIM%H0Erx}x(Rb4vs}Lr4Ud(U zUR4U+Bk8GJKo?cXyOpZhPq?yyHh&O?#!J=CXf^);t;2aDYVG|aGaC_O;k!xhiW%o+|%X#Ay41Um{(v~6ps*B#VGU}h_gDv|a?t?C3Y zZ*fejst$9hW7#Y55@m&i;V@k^^99^3j;0ozM;qedcZlxX+)|=}aS@1Fm_j5KM7i+8 za>LF405Zbp^}PD6OChhH@_-83beuyhwT3&C&=HdHhC3J18;#WJ22tsbR;a}`1giOo zM&|+4S^!z)cqioDBTjbJdBg+*?^Kjac3(oLp9E#<4ag9N!p(+eE%D25}q!sjtsAMbM(_ z{{XcZn!a;q;#zDih#E-R4az_%`-ryXRbDs5dQrMNAhKGuRjcAY)zW;Q5qMmUpJr5u zZzwn-*%y!XC_)O;!u-H0$*jdugfob|LL2G1!vJRb-IDV-yg(tyWrEPqL!`9#3R3rp zi7M{}zq~zQjoGF2&4yKiF)gxQvmDdV;!w9d2e{zG$>yT3BctLf0|~!r_LYHJXkHC! z4=1yP;u2f77pbL#;j%u*bTdb|N$sA-Fz$tR)CDY99*=NBQkKc6hMS>ftmFnerXrrD z^Jy&%niCp~J*zI5UBmSVL);+`*MV>!w5uT$uXB04N|y%Hu@14HmgOf}9o?TMKL!_LKqz#T%;s08-7Knj5RDP1*4>2-YgK zjJR4#SYXB0C4vZvc-31K-XXFRBjAOlIdLwD0l@|KI)}8$ihM44-%_NNtSt&w=+0#> z(uQcHOx7V(pveSP08ucOEc7J4uyGl5v^#}0rn^8PO4_|c4Lg9{Mj9Qq-A3o1SkjP9 zC_)$zb7h<`i?9WDrpa#%vus#{NG(ur&|!AkEjSQVNv-r=hXykQfTE*e#o)iR07pp? zlE8qpM9nDOgmnt)rc>Rbtr($@Ek8B7j;brbK2Ui|z>%L%HHHgE9+`Af$eqd(qn&|f^4z(vp`q;Hfta8E3 z<_+VR&|ta21sjYdtin|<%iN@jyTi=w*BAO$6MqFo2Q&G!pq_daDV2M8djuuEn#TWqjyb98YHUx8CxPn5rK*_WG% zWw3*k2Z>0$&Bw3eS{cr+SewM7yvi8V5r2eAv+)%Cz+lV;lCys!ItC*-$8k>;nRQhy za_#{1)wdTsmuGy&n%-4z<(8CmR({nRQOM1Ia_DR~e3HR!s#9U^2dj3V?iH)u!eC!h zs_H7ysahta1{OvNitz+L;X&{{Y+xYPEUP4pz322Bg@50Qm+!@~9L! zUL{&7;jCs9P%c2yN>$alb*XA37xDKX3fV6^JwpU&lUejc5k>9-OZ$3-1*02f7t5t0 zMI3%^Qp0m#smxc!&6@5pJ6I3kM^9P{sW&o*f(Xv^V$7uIByAz2| z0m=UE6$>yGLoEYMQ<|S@`(LQS4@%?l6v-Ar!%*R|o9b@gn<`WhRS$NY%18yb*Qitl1J1t@ z8Y$cJ0c#B~@tI@{1PwMS$B20mWolmU63kfaycdXsQczo8;Rs5wLZA)MW(XoJfei3G zz*^GELD}wCM$jzV&67Ix0a#r$cNu3T*t>-4j-h=AF~R2k$!*K4x@zVGQPuK$s0g7o z+C&kx+luBBV$IQlq61-UflC-d_ry&lyA4M1ltNWtqSyz{Sjq}1An9DU3hAW-mphpF zBJehGdx#>!s7lJxGsSQmJNrgr?10`%7GT6wKn`#>nC?}lfS0j$zN4C@00HX;*p-8N zNY8Pex{X1>qnt&2-r+(32G~ib1R6oI1OcyU^O$H|(wA9LB*7cH5$G_@a8TOYk|JW@ z0m!#$$begQfHX2;?00^pdMttq;*F7fNNAF5#mZN3Gi}aOaQH~zt!+kr*AR`?Ed?}J z`GbJuG<9(<*A-fUIhLvwT?M=0n%o5iGQ1K1E!d#zJwRsYHr5EdM#%_2Eux~P}Q z4m9?Wq6!L)nvaLY{Xs2=qjjLVS^ogZP};INPLQKKaq$-M1#Sn8i{-cdN>Etl`8tIF zh;q60E*)?k64yP0gVYg5=0RJP3YP|#e&us;Ta~GLs=0|o#J(1zwYiY}O2aK+WwwZs zOYl@Ri|zoH<+qt*Tr{i{U+2P1MHI3B07O@E+m2?ukE9aZA2>bBke{*of=W@VtS@nD z#9+l3Y687%0Uo|!8@8F#<|P!a-eY6IIf>zZb_47vf^#3wKchIa3M5d;?vurjqMK(6543Q-}c8 zdW8k4y^)$6JB@z;joRZZ#ZLos5UXbl!L?4^S5PJi-Q&J)X&Byl}yH7-T}P6%nBJbVD~eoUxoacNP91q*a|34ue8?U>|J$O#!oOLlxhEtz8GBjN&>Rn_+j28M!Z`I;9E*_a@Q zqWM2DT8E6?er9aN-|85XA~4`NU}(*nzI%czh+7R&N76)_lD=i` zr)Gh6=2Y8i{k_8cm>6K#DO1wIU~yxQi-D@_t!}P1G$MS&fOjce2R~_Q9%?%oOVg4i zK-QjXs38m9P>678oHrC#+#wb0yukvhVECB;vy?OWievC~_LL|_Ym>N%48vx>WLw$x zN^F%5R~v74q96n8tc~SkAFW-7C@_)0Db}7?#45SsP?d&jd`hwg1?II0Ea@wb?h0xZ zUIPIy5SU^RH_ReB!14m?iBQ8~F;%r1sc|oY0#(q(E>pjzQU!%GQB`q)k>D?wD;y(i zCngqrOGTpsTi{})>6pTIAgC)FuV=Zh z84MS7Uey9`C@7izh*-trZ2XWJReGu^ULc{7V?{#dLb_dP5gNCM?*h7en30Ah(62^k60^{Of{j-zn{HFoptZwB z@(jlVpebPs8}HO$+q?ItFwj`_^E6g$wTuC$F;{t&EY~DZ&R1+i>8VsTEmTl&LA%6u z!R>;8GFd$lu`06O;DT7^{lW{7Jy&tb%CFgoC$QbMZ}!WBA;dQF%e>Kff23C5QHCqs z!UZZaQC-304bqi8L{XN5LC4L&2BBoU){5d~S9Jb=m`a#lLVr*$DUj{l#H?CD#`1M8 zvDe||0>}>X3?F#%4$A%^1!#0_vksgLID*(C$@bz~JUE89ZKx5| z8#p6QE8Je7GGXJWb1weUx!S}$SF$xxD22b{!l%b^;TKVES$)Qf7<>LAzagM=E@}9c z#73RK-9{WQvxunLhMk|eq}2h z1#*4nNQAm<#rn9$0fBtx74X%H^DC7UHfZ^la1KVX8kiP^*Qh|Q$3GC!MIO)04Gm~P zP0HZG0YTDij)eS*l!IFw(TIh(5Ahz=gPS!4Od24yL7~8ptjl%eRn_{Akn9hbO6r^$ zjzH;e55zU{74xHX!R}h%1r?c2bNrBoC5f6P@5oG8#bAljsq|t(RdNjX9d@^&pNL!c zD%+9Msd-|}(&!+o0Zww?P**^v%$$*iU8^15Gw}q9f|bJIR5!Jqv2aAKQ?rS6iWFGk zJ|ftIgu1_R78?<`3?0GXrfr zW)rM>gl^J-DtB6)gTJ07SuVj`ML@M8!#Tvtv|9&T3v_{y9 zFtm`bW{+sb!4?v-x^&dX>aL-&>RK3Brb72X)>t2_O0{vW#qGG;R&`!ooy&-j-Hre? zRy7N3xIs?L7Ih7PqJc%uc$&;HOLXdB^1dawO7R$SJlG^zp-+M414(Kf(C_aU`8*cT2QCc4o9sU=Lu`T$ zsxAQqDbQ#1h^`Bg@82@p}rNbQ~v;H)&aHI#IUleQyJW_jz4*211qUhr&Y~} zPy{SE4x&UXCdXf>jOmq(qluT<_iaiT7C>*ghE*CDg=y|IV=3EPf_gF-3An{&MO>YI zktir&CRB5NpfXK1J$C{c1AhaUuQTKvHitKawnn+$T>OIyMKKk_qAyhj$_i^!LMW8!9Ms%Y}?ka^9srpxD*|RNDqwNwps3+&IAEu~4OeX!pdqJ9G~o zqnLnA?fc3B+-Xd>n=TOxo$i@`VyH%U)GpXV0l_p_vpeQGDPugp5U(ay&rsNL#2+~! zvtPu_uAv;XK?3ISD|aq89H#QkD^YWadgh)X1f$^cOw_~1BUp1-_?KShcVGR3p5UfS z-sQs6Ls%{)8UZ;TBH2l-63!g;)GH-^-xA6Sa<*Ao&3lcTb^4aCsOsqJ;wc{al^$3! zt9v4trV>5(2lw0zdWu+jAPF+@PB$+X3Y*Sl&4+c|I0`k~qlhp$dz3gAfNUi_f!mg4 zC(w#_#4e2=lWVvKbBr@v-OGRrV2#U&in$?XRF*ZHludu+0335L0n(qTON#C3+^HJP zCYf)uAl0?1VOtjP?l%QZW>J>7grjBpl}7dyLSWtnG?1l@mE-pu=xTBqApzxajaN`O zh8}L7M3AK^fq226K`HZv{W)D zQA&M9Nx?926b1mEoiX9xH|i|r(6|)VV6>$BE(aCCv0_D6DqhpsEs+x;i>K`Y#u*Ba zgsG;28>M8JxA6!sJ|D?0D%{`6tQv-V6Oy4^HVc|9p=<3ciQr&PM&(FY`!6wUUCGd@ z+!P3lCe`Fz+xUc5WMa36CypjT&4WdJN-QYTXU~PPc!XF$EO2gKkwJ?U-tSSAt>@z6 zfKZf|$u0t{ho5j|0wdQm*gD-mFr9oaZ@94`BCXr;Dj*g+N9U=9BPosJlotSA98_?1 zQCAk=EcuRI>23PN&Xf#=gFIAVg{6Ki2615_NEZ*Y-A1GhQ$0WYGGVHFZEy^`nTP;|7ypG`Gf-HhK zM|q8o2!6=P6;Ms)^C)mj7_6;80QCrD86XEeMfoGb5oitplS`L%Vw1Nb8Nee!jJL)1+t3Y=TQI^(V0@c9cBgP+hS)dzW9X>V+(12 z(jjryc8*{l5IyjgnZnr8onjV9gKZtaZ%s}M$tw^gH=*JUcP-C{<~$lg=-tY=*Y010 zU3*2i-H-+48?M;*=Vtr+LR15TjZB%$904}V`TL0g z%Nk@Rrc;K`bsme*ZME%+igdo?JQRm(A8 zKXUTm86$;?E}rR%V)pfa`2h=^?*wg0qVq!msM%)h;x&#P4r{q;+=rvyNLHbFzAvSV zXoYkJR2N`;-?$bq7f=co8-2%sY?iS=+gpVo;i20q3unJa5uz}xZ<%$eabOyyuP6#u z3WY?wQbD%A+o+Ad%)mHyOCSA00_PbFP+~c(nPZGh%{?RtZ;xC&$K6r|<`7DCsT<_~d#FKv35NW0I>JOSgJ zN@xr_7;s(+ts2{jg;RpDPfo65pbD(%nM-uad#SBvU=)9Fh>R+j7o9@DD`!2B2`C1!SgQ$% z8_#-w(sY=IC3~0L!Yu@686>H*7n!I4Xl%xQ)0lKV;>87vx$&8NLN3@bD=cN~EAcmw zm31hNl^Y(lHeRxuJhc#86)FYGr8_V^o4Au5_H$n_9GLCQc@07*J~s zDG&>U-xzryq7P}!#R4#3;XTU5m#W>-3m;{i%BUPa9_4|BqJxfV?xqJ#NQ3w{oy*kOMTutk*I2&LXW%f;Z`x)2SW?DGj(taS=h0l)V|0G6Be1w)68A ziWuh4KWKvnkKPnGWdM;=EgXTfBnr@J5O14l`@;qRQAM=*J;%9H&-xR|yJQ0||3YAT?uh6f#h>Ma1*8ozy}O!X4M#4!q0YNJ7y0KuKy z%XZe{C>tyf^#QnXZkL)4X#z=@@X%3d^1kMGtb@+92lEGH!P&7#R!RWC1qVb)UIgxm zeoR9Vx+!!I%Wxy;)+jjjD^{}{3Pf<<42oEm|9Rvkpo#GKdBiKzvpd*v`h*hw`TvSq&RZARK>Qdl=ag9YJc*T1~ zQRi6cy-cLhex?}@OUW0C!FzARUbp_I`SouH$C;h~=U|#S2 zMQs6Uu-r(sXPEaJd16(CGqy)O##}=xZxL?v%4}$J%^8Kl;NPi$qeb49Y^y9;Xl#MH z=CIr>+d1xU;H4Wgspt*>P1DgE4)U)VnF6XOZcbA7#X1yqUjoS{u=}W{2&lva)&f%wdtuMvPI#<nHzX# zGMK9F3ZdDAfZfBv<~Oj!!c9aODzgy_Hl0$jjpX96%TsSBXiI@+#r|XA!AiJu%t(WE zAHT$~pu4ymyL*jo<7vZfKE<^t%Y z+owCsuTUdO-CxW`4TznGWCMJ=yu>;Nk>XZT$HyTOE0c?5GMp&cx^I$Y#O#Kg`;8!G8as3fqX<21sF4KX!Q!CxD$_ZnrmQLI#*C&N)Q^Y zm7{PXK#UPrMP&Z^g`s9IvERK#tzDaN{&y11c)Xnj1`4TEZgivb2W4^wH#kTjmX{vZL+8g4kxg03UNN;Ee{SMxQJw1x-XJDkZO zlDr+t{==-L-kF$uFz)YAih=@(2k%b(R0%jDhp3J~f7L>UwWGEWLxTsafd&>o`5u7a zweZD4+&A$U+E{drO_!pLU%6`Tz0@zeY5+Bbi+>WPFh-M;b8uYd_QBn9{ve!zjM3s= zU}Zw+6x`CeKR*$>u6l(8tho4>$%rkF%)yCM<{e?oWn-CEdpXW3IPkr@#0!*RpZ#Mc zn-dvfdv~5#7a>YLGf&May8i%acH%f~h=33`mbVKFl%Uz|V6fTDvfIArc4k1{!wUAy zYHGM_fa`56L?)NL2^Oi*%u=?Ee7LAPT;oA;Y!+K?uLJ<6OjFb2w4!sZm@3wXcas+Qwmy{I)H#Firs9%nVu1 z)?yQfN6ZVBE|#m@Ei9*N)X^xgS(GKJx@OmAjv$_Re7KecV9Hui%+R|yRiOX2D#K2Ayno&ju;gRUvZCVl67zM78L=uTFe-2wX0iF zKUT$XkO@+VaZIytpJ!1(30BvynQstALAZdFy9}ea17tktBUzR!gTgD!U0JzCn=Z*h z3gbD)d5%0H%MAL5g;(>uB)zLiy~i4dCl&XcX(g@N@o}EgYWP$%HEEgpn%T)4{lz+I zZiW8WAiAk!FgVyH`PsU5Q7E|W2%e3pw|6NwI$K*3w~e$G#XXo z?I@)j59TX)%POt^0M}94M`MXhF4=U7GlkX13|cQl%hXVzDL(Ho&?B^K?=qP9E+4dP z;i14@0g8wpK~3YiT$IS3#9~ULcDL^xo*rs7x;8H{)fnY}+{_VVY%83>ZDdU6(^k3K zHk@QW4z227cAXd&yY&?YXeg<2uLiLKoHBz)MUBNdp-eg7BU1rv7Vm|}-3*Uz`Lpa%Jip{S)1+vAuOnwE}AyK4)I2fP;1!qVc|5{X5YWW2`=1e2*b za|ZJ4BjEb?7GC1pnOSAM2N50ZEicF}ElJYGZc!oQQB}MfjIe+rgK$4Lab&e&90}?y z@t8$UO@2&z*mXb`gVauT1|fxONSdl8R6u(oZq28Em|>vh@d*TNVCZ*I+E`E$^41P| ziPH8t1>N@nwD{*>hOg{kOm&!XTtazRpbN2o(8?uJxHdnSp@o53D^V0tcIY<`Ry(`v z=42qHS9`uE8x|-R9D-=zX^LyB9#$0!c7+x^F{*oE?k{(Gh|I}LRWBvuDCPGq$}9=G zWv|Tc51ec96P==WMG#lWzueFdfetOFE4|mbM!INa&o#REi-N+hfc!3{7^-jz)k`Aa zg@WEG({ju+tu%UYg~p*>BD-;*193osp?Z%QXb*9Rd*KA$sf*n~Mq2SncM4y)~$tpclW3&d)&WVI>n+0-oWUDlFVXy$K3TeFEsfp`|QbpXcK0CN!( zc40lwVqDo|6Ag0|n?y~aSuqgVg}^A>Qza)^h-7B|{vyC?=_*0+OKO1o7vdDv>^6Fq zg#*X`03{_qa_xIzw+p}OIRpKrm*2Se;}>6xmPDgaa?i)ip`gzZRI@mUix_@bmy}AX z;w#4y3X}?uSpfKeICa2^7l3V|`-uRdmsx@15xcr5hd@Ev$Knx766pOfv140ou-=#j zzI1)%txWCQqA+`D_K0RC%tk?gYVc-W4F-fR! z!lJc^1_Fk(oJKx}@wkKCLF|NsLeQ%nW-{E{j@kYv8f3I+4TR1KwX}}v;zMR^;;~fB z*+l@Mh08UR$o~K^)xn2w?l-gw9KMKEfTIGwuTa=74Z}xBsuj5Si#XPJ`$`M!S?SzI zU~NKz{Y-c;mH~RV6NUpwHXn(Dg=1|Wm?e}3aRnP2YpM2#tmgI2hDL8#RWk(vqz&>!0YYa1%B{c#0c4Lr zyTKMN;W6}}&5D&3DtMsz0 z)L(IUZ*lA{k>97{P*9F=A9h&*#4NweLL$q${Du^V|H*Bmy zkw+%uK-?yo$UQ!#l1maGJx(g(oS}N^T$HBMYUfh51{iJjG4srD1UV_Ao9A-I0_{SI z^;}AtWT?1tJC_4r3AVWY;4P2hGG(+I$XGTBRIr*guX8q0b6mb zn&vx10S}Ez5w@(Y!r7dbpMo^f#ZuQi!Ntb$OvnIjh)UZP0+m{ovW z1?*c3k(I4ncojui@d6u;>-dFh1B1VDdMNG(RzMSFJ}4Qw;HbrWC;8mx$!|)I%;kO1#SjZ@Ah5-?@YSpsuwMtBOd_ zK@@l*V0JAQhwO^l%VEL!jE6ZCb6%qQn!K@ij*Lp^%n5$Emz>lEy- z!$f~kmrK3tUDR&A<(VV0jtkHC2Iv-%$X7DmwC<_k{KOa+n!L(T_nO^BRdb9kk>Knq zujXXfsC~~_VgOo|sY}SKj8pcA2A+rCaUzcGOEC;iD?#1E;1?mY5BC60mri;r;YS6m zEPfRjM|t}Ai*lte*xa*F6*S}>%pzcBBdY#jAiH+UtOz@PW~j0?sNw(?Ulks;ZRYjr zR5Wa+v>yIuQJme8Dokr7#_Bj<9aLXF55qTnuOb^VZ0i|oysMM!CJZc~)8Z0bb zyM^yj!_7gy6{n%pL@ETj{XrtFg&D@2M6-g$zlc#l+zLHI9?)c}!+*H+sL&fS`jza` zm%IzU=R85(A3egDI~%96FI8`Ry+qZlAM#?+=KJH$A{segZj#$~ey1oVcJit|hFo zr*F7)G~W)1LL-VkAlXKqdYOwR9mXt5@(pKD$589Ign}YP6r?a~F)$IP#`!%%BI~0L z@u^zC(U7+#ko%DXkp?a*mzsz%7WRS5Y^5#*B3p82)fL~aYs@A|)3%n(oHAUg2DQhy} z&~l|85!mV|O1-k~*GgCAjDd-nk;YLg4wN`@Vi8j8K&~o)#WIx(RmIm8lI4YgY?NQF zBT*aDGj|F)F0rG?Z%Hit=?$Wr@-^HFO|+t)w7wNW=nFmI<|w^rV#6!x#HnHzcI@gi zUv0}1cbLc&7eznBxQk%A?fJyKK+uIX{G}kH0VqFtV*qVtG1tT@74QaVGXuV5=y@~T z1{wfe(Ogt(2n!BAYA#Vjp6BHtV5g5g-1#}FL(SNYI2fUIQB;UEN=m_SYh2_R&2d|nu&Qkf35pU_U@01wRp}Kjh>R;(Dxe1H z?_^Vk0&-g)Ric++_L@g8aUz(|!W*XIuoZl~<|0ld(-gclnABT*USk*IEa!=oa;QA# zfg5G~qvRdNQvjhrUcbAr{{Xa0USWEy)OsRQPRVlaFl)70d6iMI&oO+WF37YAOg7)F z0DSIjRt^08$1G#A4Mx@Nk8lG?N%xMbT)NZ|bUm{u1CYC4p*ir+0=y7s!B#@7U%99T zkhb&0rS9#Ax`F^wbMCl}saHqG%TUHLbBF}6Xlv~ODrm45H^#O{0_&Dfsc3#o6_i>j zBbR(PsJlaZF1&eMM2ut+{61t5aaD;kzAb6l4;<=8I z0HI=D8H9^^rizv9KEnF&L#vVvl5XVDrlu53+kuxW9j8Dn;$WK{RY9_cR5L3ewa~JQ z9MSy2Lfr7@@eH>OqV3=_4kCvNrDIGCw*LSMfW=?u<{_=J-pk@u1I!NFrY{l416W1= zBd8QWsAVB|cy3xv=L(c@qz!_;3^7!Oj`H0k%`kmO)E+f7*?}Xacos+@w@3 z+1Ed)u2_gRr@|bz#Mz!&Pnm1V@uS)z<=IR9eWjtYwtPhoysg}OF?7oSEWBU-LvR~k z>O3tolID4Q8sDfaD7=_+k{?vA&=gozv74iR^HB{nOm;)DE_6l zX3F$Ag!l~x>%6(lCe(o8UV5lpVJ)NN&ni$>u@iZWY9k)tLL!qt_i(6fr|vo_+ZN-g zm;sz=e(;FOs4)Il7S>y$G~9ermt8P6s;Y8-n3ZLj_=MS6&;VM*6`SQ>oIt2_Hh)~g z(X)4hh`C?P;^I4E-yScCX{I=I+qqOJz4Z-?_P*jS{_&yiD|)X+BCjhZZwKOH3I=@Y zC#rM{ABZ$L;Z6Q70y5x?IL9)&%d2m=Dj~CJ%r4gK1^xJlELo*DUuki0Fw*}3iCHoa z8i=2;@hHhM`}vFuQK8h$m4zx2!`X3G?3}`$$xQdm62+fdCe(JY);{rMw;NmiM+bLx zdV;08(FIcNIF_^fmRMPMm>l!euy?<5*SQ!fDUw_Vf;6abg3cL!0z+H^}HhN;^q6a_&Xw(2M$1>JSTSPOI+ z^#xRHBC++>w@KGv?pM_M$;}2Ez_ArQHMjngTdzR5U~6V5)kTOU3E0-0KrAc~cerMe5qzR1 zEPdsG79E3{IK@Xr43(wX`cTV!Ey62nWbaUbbtsM(n)!yp;FWsldn)E=in=N7(1_hN zk__svXEzXpOrqb!1dO>OT^G{v3@q|5Pue~giv(|^jXfpIn5t5%_ZZSxrTeWR-mV+9 z%heoNSPdH*-`WkP8rrRGGKcWOLUdgi8UXhe=++xac__d4C{`^P+#*1vWN(y5W>y!v z;wm+*GL13Q<|I;=7?eWFHc^;0h(#=<)j&WViw3Y@ltc>E4W@g5n#CjPP=6&K> z;leX5q7oE@DZt-rEgN`3vwOY|n2eW<4i0W6h%remcpr&O9BFXCzr1FRlpEq%*m6zW zbX=}tr@|!RsD)SMnJjR7lvcj-(K@`aduhfR!?}}o1E)ComKrYCPd_y&rtbhSRCWk( zJrdS1y?cw9Y`sOpsN6=g8?>lcU%#9>1|e93zMBp^0MuU zqw>wv7~aVHiBhpBVVhPuiTPE1TvQAJXL8Eu(_z#7!>NIXmCkT*zT<{fapandnRl2m zVhz{k4VW_Rl&&%cUrT zgRa+8bvR+Z@_Z5g_aQwuA z`w2B8}I?}!}5N^u-skETfW-f;)SD)>FXIVfHm zT{ALbgR||2g@MK~+^`yT>G_!gvY;?avT`x)k4KSy-AaZvk`1_ts>E>0{pJacOaAi^ z2~=H*_cD8Gf}l`lhO49k0gPOHeAG#2g^aDe+^UVuBPO@LBV<6J0UWLgv$7*J+E{jL z;x)8GXJ7X)a57nSns}JPR6W`5IOQSDg~|{Cx+v$LQzzzK5`%=p@P-%e1U46ldcue; zd%HG%X2?ow823ai0XC}h>gNjgMZk!s`$B~K5bWNZpWIs;48))zWyCQt03X~{vscHs zp$;9BiO5{2^4O_<5UPsYgvI)T)?Ibh%c0Q4(n)mC-%xTLnqXZOStR`~z{-Ub_l(1fhJxdE%RnlItMqP@w-XPX&8Uo3xJ;8P$0F0I^yNuI5Dx+=~ zVJ5YMIO9A<{F6j!&rlN3pt45|^<=eH%2;lr#u6n;Ty0T|Y%2g^>bKlNd1pA)jgrrX z4vW6ePAj8y%JaZohO?+QvsGLr?1+l0wfU4S88`9FSP`SI#4;V2Ed^2W#7Y1yg`Mzv zN`O&fuk{HQlQdO6IfIq^va(k1sMuX${{YyQ$||J-xAO&8ySf#_Z>Bsu77t3Ymn783H}aDL`ne&xF=HdDFI zv9EA=;kg)cAgUT+r;_ z+CBBGg$AO_?p{}@*Z%+~9_P7qkzc=Yoc^OnL&Pn-K(Rk_1!FwNRbPK;Od$)lG$~iB z<}nWf@YuavY#KwBZQ`Kd$*IV_e8$q2LWW+!FCzwXhAXPE$oI_2#BdWmlGbYaW6Wrw z9198RRsrA4y2u9#@8{HD7y(vSrXU8E2MBty!19fNu2!)d$l6kL?17B&pRz*?TIeZ%?Ay5t%E!Z;%2g0iU5CtN` zxS6=t9tTwZ;rs~O#V1g*fwVFd$!{=1f>Sn%{M=EtPJSii3RHcWm{m9Sm!<=DE9Nb$ zMI39U94m&EOS1+g2AmB0#&HCT8mg!|;vfrA=vHpAA0o1u=i((f-USy=a`Z{I)N{Fn zR$|%iqG-TkzwHp*$`w`eGT3cRa)&Lz?but%%KS>eEqC^VtkPuK80t81w88;=)Cyh; z>J^A68feethM?kzn_$Id3pn|K5xuGYqoL7)Dq0)G{o$DpN564Ye*R&_p($&;%fKp% z=GWfl1zMUMm)RZ4YU3H2+8H~`_XrKJ2z$)X6STVAFDf zEiVkh*n93+$1bC0L@heEP+E~T&1k%SAu&MflhjQn`F+4T;B#1Y8#T;(EaN=H12kY* zI>L;&up(B~YN+feREBvisfwZa z@}R-d-IHSjbE&8MnFDYQmmo_K8)|n~D7`y?Y_DOvC044VmExdMy|JLx3r&3Gff$&Z zCr37J;(j0(n!ciT+CyoO_+}LG2LpcP0AdT@wH3h&6k@B<{LAV<0#VzLVCWLcC7!n^ zQe_*j<8j+_+qfB2v{m9RZ^0?1@Cmp`z-o^5b`--k0>}sETY~I0YTpP79K6KF4o4pn zg^H5s{{Y!RU0S)C`Tk|Z$k1KE8Y^bNx3e_C0)cce;*0r!#iI?av`U>80R^s&Txq1% zxm(R#8HdZT%oTW-m;e=9FHHcL(ERM}Y*j@~{_<|JWvg3fTb7mv<2Lw#likZYnAGfHuoL?|$ zmoLNf7V-Z8YG_;k0Hnh#FavV{mRGx)HMer|*AQ%{P=IdHQ~}!Py=DWe>pT5H`%5^~ z-}-@j)DBS|+S~~BEM_*ASMdVN2x~uRlrBOGOfb6j@e38%l&~0aZesq4L%D_n zNH^|ak8a-Kf}+sJ%s?6Ys&No9xF3cMF0LA48d(ymUnkxx{{SIoQngu$%Qwz5@i8Dd zvG-gzWNih@z^WWmRq+=Uk~kf*qLXOHFMUF#+c*~lNVYfwB@(Mpm(rcor6B1*?xUpr z5Sj_q^Db)amh&JNP+$=@aF5ywk#xW7GgE~~Qder5U?}FB>ML0E=B5%3ZD5PXt&;tih|yuJH;yw0pmqo?YKC1P#@%k#k6M9- z2{PsB0wL7F@&`JZNgoVmRFbd+izGHMqYq4m)bHoTMv|H~iWwRA?i}{Glfnt20+!Z=yg3GrN!ZB`S zFY^!?T2uv9D1wfhl`cukT?=nK@f-qX_BU>lj)dDRR#fg$Wss?No^=p_(8$oGzA7TO zR+5&=5VhVTBUt96A}Te2w%!&qQrhcW_53m6{sxEQ@eVfv1WcOb)DrVx(MI`tj9XB+ zZ7os6paRbDJvH1IZlORrYGj%#6Fjj9fh}&*iDFc6DJ|wVU`p1(bwV$$;7taa{lOT) ziWNU}xSSbFeB^){scZ?-FLN}4Hru@NC65%j2P)quQtYf4-%xyiTfV6u%=nuwHQzBSA4kMua}bE)T3^A`uTwjU>oXAQ!GWmz z481b6)v#R~A8C{*kCLTk<8HxwtHhzOPZjAbWyew74IEXfRJ|oQbPP5cT=_%A-tUwnP>+de0kZLFDUW6>S!*n} zJC5xYPW~fj*}sWag*9}squDjMids%4Et-X#ZYA>ETzAZ{+Af5~c$kF-z2ARm(O3%3 zBQ9v_HnZ^;PQAY{txuA%5KXFrpMPm#0=wz*pJ_?LxHy5Kae@4q%HZW*ptXT~x`tzl zk7ux!3XjqFya+t)mK!>f5UOKr1Dt>-Z%t zAmlOoVr8LrTC4X}ah)`@t*=HEEr26<58;D_5s?8ua{K_|jGuURHD76H3a+M=tABZI zDyZ3g_Z+0JxHgFQY%$ku5`x!3sdl^Bti^jz-VTB~7{1$oGwi3n4gUbxKBkS82LAxy zq{((aFZUB-J*+FNRMmqJw?y=i+eEIU3uuR-DR4mQKztAn1P@zabs@`HhpOSpQ1n0> zs-G9`6zKiN-4oD$=cW6PN%>*Yer8R917cgPz)b~|pP?dVOJM^XOsASvhmgJQ0{k>3 zQUigDhRRE85G`?0aZy4gRy1HhiMd%6=2UX4z?Uy#>blzdWy~#Gs~df7fz4RsSd^to z6|PpfLFOLp#$1O1SbW1G8~7-<5FM(z3PQ)IptZe3E0D$r90W?C0G;oaDSZv4`P~4G`8f*k%$y?S++?J>L%zxz!6nt?62_8PwP+ znUXp7NO$Lxk)HcCu5ml;;hhvs^qwONYyd{oRRT*3qapyBrsp!tJfi@Y0+8q`$6 z!eR?F`(XK$`1d{*&qgDZbIqar#|3j(5Ag@Co!O7o#sNX_U&dK#N{!-VD0_j2IMY>Y z@6klGQo(lTnvUEtGg+O4S;jevsn4lr)U@`2gS!5q;K$o__NZRMIV-5yxk&}$DATX2 zS&y;NQJ_bm!ybK5332 z@`3tlTu?TqAIoqU2UaqCY9=Z>E5KQ5%(PO*+|wx;QP}Y1?lw{L5w;$9sE!)FT)oo; zHm4O(8qA_=s;E=>!*?8_Nqp{qy`%;;ydthBV zWpuI|bCMDkMs2dCEU;i}1WTJ*M0NLuh9#VS*UicnI!degYciMe9zyY{b zOFK}F6nIl#J&6qDAA1r zD<4i&8#^(K#%AQt$uBOloU@GC#$iHGL8m)p>K?srT@2gE@fOB<_DfY@;}Z-thbp;q z6%2aZ7WVDHRRO?OK4B08u{WOJhE=LRljblxFFc5ai_Myqj0q@bSvc$`v0@5aqBHk|F^x4_eOy${8-%u& zZrGy4DpG}~+1yb=s_sJfp5Z_lg?!uliu<`;litV#!GKH1!`6! zoiR{z2TVfv?esT7;c&%&VReCSE2n8-2S6Ond-Vij;+i<%Hk?8LGR#pqOD*>ZYb%p> zShYea$FR-tJ&OJ(H|ij=x8+aBrN5M>DReL9<`^N%kk8nGVMlXY894-Q*L}a~Dr^4Z z)DD^UB^p2X>IuKhiWGkIrQ)csKZd0X5sR3)>J-@gAgcsqxU34Em_V3svMA^7ggcAy zkMR=S{-EElI(98$KG zmvvBe>z~B8QMUoFWQNrPex2(mwHI80{^PRWn6Bj?{$=phVP4V$tQ$?si#}sj_?Oxq ztiOm^P4XzOn}7;4ky}fbc@_JJVHn9+mF0M*UYnQ#jZ{(cu>!LDMSfETu?&C!{KBBB zxC4v!%jGu#TYYQh1m+PX%bYO^Y9m<>*kV?fONZ(_8?I8UU}dud<&~U{+UMe9l6$KD z(%rOFVe$f7icROQy+M=#g+!?KJU+x1F^4S5S5o{l@kWi?#8qJVl}4-|Xi(1Q86x_` zOVLv29P=poHxY68i{bXv80S$J1}xP?(T?B_8+m~hq=}y4QA5j&cPJ|R;rmNg{{W0f zw3*VBVgTQsu^6Rq?qj)2xL}TDAL`&R-oLg@(vK@4TzLLD8S0GFYJJ{3AV5XcQPD=9cM4% zEvBvD{@^NuY9GlD^b4xHm(WTt2kfRfBs+iW5G_|VkJUppk=}+f;=`7Y_W_VIz<=yY z{^$K-MWJ4K3A;g{(C<$4(Tg*Y?QW%YpZ z#7zV}7XDj-)$wXI$xfT7E{XV;Y>$jV8grIjj1{b_qL%bsdN@}uHwCa|GF&jZ> zVQx7!=SWMIJshyMwYFdZMU;6XPdMDCFg1aIl!!!I9p4h66x3U8cO6FktNRejz*^+x zEo!vkLCN@-$q#MV#l@b@KFF5H7fbN~7E`l-gto33eH@dQx_;0^o55ni-c0o<>+w0b zBTJcUj^!hM)GZ6VsuP9^Cs7zheyYs97T zK-XN#FSu5+!OaED_49a+ivcy$3c(~$u~fHoYRZUGLNbKWOXwcZpKXDT?E)FAdH8WY6`^CA|37@LX8ifee z-M(gcTqp%Aeh}~@yuyg!xHm9Nn3Yy2J^}$PJXa0XY6iD(2{#R()uh_u2KO@2D-7~D zj|9a9Ks~l=Gg@J_i~-w?%e@r}k>PLD4J>P>`mQD)GN10_Wu{J%c2Us37edCF884<%5^zNVCz)vTma+|wzOa!~A<=Zg2oF^0G zqo&3wDu@>80_i9so??hQxp2TFREyrH*0%&jz!SBQGT zvy6We9vbGeg$uBrMmbFhg~HtN3O@ zjfzBm?j&9ji{j#zPK`4tMWaD>#<6apeih8c;N(l`#&E(}Eri#>Hne0ZSm)*=La9rZ z`Zo&%2Tnpm34o-VOSzC+3wDBngLpyac-4F-T0Kgvk zh@=xn>azPLya#}k!1WHL5GN;qE@JtBz@K;%{_0}ta^VZyuN4o75Q6x> zaQTJ0fRG`KLM&!k$jdjFUlUT&Tc5OFGVzzbww-z>RN)aEqe6E z*t~N9IgOUL?Uh$hT#M~vsRS)=e9h1yVzHQ(XtK>w@<)4=XBoep!FTZsBOjZQI}Zd)N+@fQtJe;MP6e5rPQ!D8%_f5 zQjBKzHLeCa=q$}%)M3n1C6!YI(?Uoy>R!|gJan0r3()ndv;3S;dB=zmZ9fkPq1_xXZtXg+rfrwcv7*}vcY zzJ9_^@8jyr(pec{ay%(qPSa7Ni%iR!*(E(MlfxGn{EEZn`r zsNrwknA)jI;^lG)?Ee5$C<4^O2s5sKnUa9Gwp)n~OM`4*FfPYg%o}Q~QZhW;+&>wA z#1-iduRj$k;L{3a{w6z7RgyT&O4>&p{{Uz)Qrohy@GLBV6e_j%=01oyGlS)TP>VMEro!qw+%h$yB2~H;rOSq}qF&#gNyLa&so}+)c@?|?< zHx=4Z=kYJ@m23K(X|Gee_=9ne#4-2rI@G6A&`sh%P7BPqAwF{6BTk-X8_XEwm1$*r z+@}mv{-WjTFSp_nLisqDHv5S7#2(|z`kZSKDbWfP1vcfVZrOeU12cR-bvewaP%X5( zJTcu-(tiUJI#p_qm{bIYnnhsT^miMQ2@)_K`tkE{nQ7 zLa7S8*>ahx+#DBBe3Jc3@Jn?C)k_cvFSJHysZUa~Kj{SGTaU~nGyC({jN|7N!hg|( z5L>|SDhF_HaNMW|Bq;?wz`B5*plVhoe-OEwhjV(IBS+dSZ-@6B2Ako@9Pur?knN{Y z1c2KzvBo91D0J#5N++@b+`0*-8!F|$*K8EK8pp)MOW4_aiXfGeT5nT1QnX|lXg7J8 zYV9!Ux`+pDIhxZ0xNA#;{mYe+&l6yLzzcYFbrQJJaK=D2(A2VYlo@=)9rpm+%sb3u z%E~ZZC^2Ok%cZ>YD5jnK#+hSSBm9#*%|)g#98Za;Rc|o%#B*Z#*MGTck!3a45G`EH zZw{bx*n+x?7mi#V=2T70)Dpv7XIw%slHH7KBQ7pu*Wv(B3|lQet`}5xLoCoWh*oXL zOE6?}Soy>%zH`YA!k)CiLu)p&$2=;op_(jUQ#oKRuTc0h&I^}pKT}2^IXpNg$!X-oM0!?HR`)8Y!?6`WpwF?s>#4gIN(0jsiS?-$SgA24Qe3j*h;+M=6V zGt8d)wiD+K(E}rG{s_ zneX`_@;qFy=$h~#HCDS=BN(``DmK_wZ?&o+%mfv!DfkDuky>vgNHA06$MQe89N^nP zKXMIAIA8$Q9mG94BH5@0n9d)j0H`IG}5I7xzW8Ud!Ki z9@|DK{tZF_7!fIWwPszmCAeSf)DqV2T)$BbLeRlR?d~OLdM4^@#sz&4?W1*waBOaO zR&7}r(G4tWQLzg}lKoO{@%+JaO?u27Y5Yz90P%=MOv#5swZ)H{8q8-=-;Ywu9_ zbGBvT2S%lgVTgG9&cYzuKWOKR$K@!x53ULTF>XsI4%qDBK%2}djxzt@?ut?F42NJYAH!A#oMrhO05H7c<_2~LChdJn5Cz*d7lDE)j=$>z;8|^64aH?4%7ZSDOVZJ!@Nsb4Ml%$7 zvL$6Jxo-v_TY}~a$(wNvjw(`9pWG~1U_g1~$IL0DUaS8AC5}?RGSZs-)VE0Wa3)Rs zu)gn{IsLS>or~3xa*bnJICmSYtO%NFCaaKoDXK7t0m6bO9V% zW}r?*_h$D@N|pu^uDoO*_llf)B!#q@r{fHs;^x@5WwCa z$U&0@ZjJlIy-PvJdU0BqK&s2i@B50!xn@{>RZSZUved7=#F#kIdHXQwRKJMYXfoBrn>J)e1*ZX%2XSHxB2r;W$*mKhctN~;mZA}dX0zWRW=vZjm} zm93699JpqOHm-3geha_MD*FaSR86ARZFz5VeU*b!q62s)wwshK$mbe~mufEswEIjM zxrVKASzsBouZRmU8tV0wS#=tsN)5kwX1B0Hmo1@gNp<L_J7iHf3}R(om~khPbyo};WRj#Xa?ACH(*?1D)$ux?k`rR5AXYUN!* zw+)8{PAf(PKNv?r#L2bxmN3i;+7eJ*QQs43j9*xtj0~a|q!HnWYA22LQ|_s4RKC_x zdzAGSyu`#l;7xJhuB9s6K)I956bVq!#h4R7fr?+)$s)3*`j1$a-s!MmURU2KNLMI zmX;WXmii_|cV@Wxi_xrmTymO*#}$%Vq~K|uZfb7L4HfsM3EmY@hZ@G9){IapR~bk) zAWSVD^#DajcK*^elCFjc3Kvba{p}LuHoZ!BnMTATpO$AaP<>tT{-SsHiTumx#(j;# z`6^Yz?n1_YO-#78`G9fuo`j?auNmrAWgSY1eV-8veN0YV^DRMwYKVbUKpg0GN9tgO z?{D0&S@vc^#k2O)Q3=V`m0yp@ns39=q&!`&Ag-#BO zd6g_2icIQc8s}jP{{V96R>B4D4*FXtukTXCY^)pF~j%N zIv8JZ#}2#))V+2^sg^786!{~DV4Utyx`9WxQ}p5{eq|p&J<3&%U{3KIBhLXVr!jF( zK41cCmZmDS&z;;#{By+1cEJ?4Yh@ftR{sFpQtRw+fFj_bOTELSm$bJvV&f1LKs_V0 z7HBlbLOUPKeJeX0K`k|`OB)S% zwT7d&64bicz(q(>*kR)F#0h9pfbX7j2VB;MlzNAZj0(5#)ZUJJ3Hl}cQCS4K*u&!m z$N+fL^9+zMpnaeEmidyzZ+?OSDX1|=o^=qu)fi~!5U}KC=MU;50W&hAkC21h#UN_= zF83RS*x7_j>}7z8V{HeF;R#`EV`raO-~tVpzl(xOmAc<>UI*ghK+J$w?Syki%eUqx zEh^3w*s+yiUFV1*5dgJOatspPW+ks9_l--6_bT`A5JqInJw_L0iHEG9w&p%o(V@Yf~@|D&bpxggFmM z*ghhMJCxK`t??EO=HSxz#H0S;ZN@ldJz@=rySFE(;-YpxS2YUm2ZlS9`%Cd*1~)_A zqvFR%KoPbjV$WxBi$%G6h%E)f#8v0j5#WB1RNivVSf1x~vyt*V#;P>e%&dLp4Q?Do zMC}3^a8w%wum%Lvf2x*(&vz|bECmew;$lN8uS)}orh384UWH)-c=Wz1w+p5LOdID| znMN9@dQ>VX%67tuDjn%7{{T0ZUH!>_DWBH2!5F#e5DvNTWbMm=#qgSf)`FIJ&m~0EjpgSEmxSL;cK4b=nw_CJ`Tt{veJA#XxZT7b}ZytuR927h`X;9;c}(zr=J2 zUe4TqNla3yc()#zj$P4T?xmxiT>#dy$h2G#vi>dz(D&Vaw=aQxiTYq=t*#$HtRKt| zPB@-@o2YDxC^@vp7g4C@xRC4@UlVDT?N{8BgZo7k*WC!34Ld@>+wB(2CMo{_UU{s;G8Snj5tDnVOrv|bXFyFih_4oVKh*oL;e-yaOarD^ zQ!NHxXvZ(wA7}PU0Kk{Jm;V6jbkJfrm1`I70I_{$1l1CqKfFhqiFfX$wAKO+bdsy? zDXk=`!}Buhi>u5`d`iQT*q-;)!=9zR%v)*H820Ok zqbR&a?~HC*@_%p{#`OUTwZQzFCbx=>JJ|uwzcbuN6&s-DSSpHTuIvC{JGi?jui`5} zLczerVME)8(*{+ zI?sp&-HzM1l(4pC6Z2CS&z#~|5KLqaU}(Wx22**#E!cpGpizah)~$I1!B@z*%@zT7|*$kN>*HR>u`#r z2fh0f7~@Sj%dAFKA%@n8u(?>G>#EDPU=BlBZ#U{>5os&mS90hfTW^zx8Gr~CMm_!J z6(lmzi{mV}Y3r50QEbwb=lu@#L6q`}<%+Ng8{ZSKE%h3M-ak@*>Wc-nO z6@w1gm#ZDNwHi_KPt8WmSLBFOrix+~9UIMj%S$Cn!}&!iO1|W;m+hijfyuM-1RUW? zWu95Rb9A>@_(p1CBvtoXAnZvJExqnw%R!lo>`Ae4_Cl8N7qeZ*NCT07SpFlbbkRoo zm&84QOolTNk$;j18--{dKN6bATVr2*64JjlvOZDe$FX-_jY_jFgMpkC5(qBPKGBLv zK~(+6bOx1!;#l5F(x9|T#Y;+d-eyguOe$piTq7)NtB#ZRsYQp{gE_l|h=JiQTG%b7 zss=3ly+q(QycH^0LMb%I0|S*3y9#=&K|L^ZRUW6fnKy68g_^neml_AWO4U>BN_TYt z%{YrD{$ug@tVRM1bEr0wiAJ1_Q}G>Q?`&VK!m_*B{{Y!(&Ul`U>O2vns43JaT)V^- z(F`;H0DFnHG~T_ygv;#}*+*ut^)GXB20qQeS}f{_IWo-x;<^w4T|L6>736`OJXVVP zO`F!t=o*-G)KE7%)*)XrtX`;&q^30FfL*7= z3u93QrM2aYBG{eTQti23y5rLEiB-5)Y>@IOI6w6gsK0k{&Lx{-__*11f3X7W6~_(A zRnfRy>o`B$dCVvaI68z1t&$V&s9mz!!k^g`C?sgmpO$D*iUF>w5u(fo`|y==EOZg^ zg%k%>m$~_#((eV@_iANUH&5uG@Psv4`BLC=?E;Uv6?QoWuk6&gH)bz%@u;TTrUl;# zG$Qh(b&S{kMM#RRR<)~U>>l8XeVA%cU5<;7yOt?b<8*81GVCqrl;hNSQZS%<+bRWy z+pcim<_2dLSgqrZC|Nca6cJ^v9EO!FqC%;xcs2A z3gr#4i_?yEI#N(%r_@x)W15LqakEL>aOONel5NGyFCm^I>;;{{V5`tz1g& zD}yXsc_G@Cb13}kA7pvg?gif&;#qf)?qj?BO7WjrAdk#&VLs6wdW~CKVM4}PlPA7l zG%w6+ru&99SoasvM(5iP+EbDXexmkfY_)L*W}cp7YAS`hD~v^Gc#q|1d=YCyn&JQu z!{6Qjjte{qVv6{8^VE9kwN%O~he98@yL&T$g40@YhHB?d158&T_iz_<>fqx+N4SV3 zrVzwTJLO7GyrHB{9o%h*FCshpT%fOzQIC%0_Le>A@iE0BWmTtxQniLyXh-dsKEXjQ zQTMhH_f$`UVp7FXM+Yk?Ef5jI{OS)iO^kl#RN9_xDU86bv0>ac17Zjpq^4K|U7WA; z9RY`&HWHOYIW7LZ!#3mugFKF98vr&1*~GI|cr0>O9m0;1^Fw%a(pJDL)V^DU^e&33 z1I_!61$}~_nT#;AW+iu=+|w?EWh(|Vh*n|16by2F#5Vi|0e#ahp#tyO@e&G&rkVc$ zQs_~4b~$U}0Hf}i{KlDC+7a;P1qG;6ck!4Z!2&ZWBSv-m;EQn+i&RHi$6v795o>92 znYW5)a>}T^I7@=TEN<#Pt3M`W6jEjGD&ZVKsrlYv>V^B7Fy#x)ORoYbTItX80e2C6 z;gwofd6qgs)hYOkD`VCsH{Podqb;W+QuPwctwb14<_@;|Qxa|blm3DR%P9S#idYyv z)`-<0@VdmbP~L4{(FZqaR>l#QM$)5du~0kPS~r&KlX;grWB~qP2ieJBxGk5Fvl|E zM^G0zsM%oIkK6|>zo?s|>?REdP(=m3%V$$vMC%b)jTCID{42Lsf5gcPHLx`#^{BX5&m%pnn_sgezc*l`3FY9+;$*|gjPm1SB}_hAYk zIlHc~!9WHG33E-g9->-gA41KcjIl^sn$33iEfBnmYrg1IO@mdUoN&8}jT4l=>LZAC zbpHS|Os~i?)vEQM?7*utRZ9EJV25k_u75dO@&h-WO|1K&k64=EFU_!a+YK!sL%tFS zEw^a=9OF>s`r+r|1PIN|6O})RuDE0kOuIjrjZqX9_+L+RB+`ky4ItULaA#Ep4)DYn zGswtSRd|VN@-%`6o8l}_hJm8{%>AOW0eh&VWfh>ydU@2b&9JiH<7W;_G$O?D& zDBIZ|N&tVFw+KS9yLr873s#>E{mcNOq*hF&(7`b(fHBpK$HhYs&!s>)14ECzx1_b& z1lIy|kMjsxm!{yU!Q24QuXv2#^UV8I!z;}z(FMR)>K_*eONcwlQpTncS?(g~{vvp< zn~ZBeGyaA=LjdzLXAc>PZFBd9nBS>G7?ko4vQxeMMLDd^9A;sNt$LQ^z94xf4pEB- zkp0WqQ=aBpV1k@38FtQL-`*(f$;`VhS*nHB;#qmK5GcxUguDyWfSH0LS*ARzMP}3N z#+)tUmTLvJIeW##Fbl))n1r|o2lo_!1`8OtE(P?GrW$iuh^k8wEK8JfEVBtYSi~m_ zFAJG#IC1`jD@l8A5d%hPyi~^^;G<`>Em}si1O3O))>-{(E(+0U`Evjzt&HdUlpc-u zey%PVRsqxV9WBVT+8UsU%F7wY@e;BCtUy!0mpM(u-MtJo=qB@9`Gr6plH9PmXI8PG zVA;xSmP#m_w)9jR^KO!bjP%>qV|@>OjNR_A6(10w%>6%xTza4160&llFqw`-Y@Pfawkg6R=H$Sp+=_^ zxJwA+g3v%Xl|@X|!S}eT2z<&jEaq1h=awUj{@^a^pxn5jy?WF^sNE2HfVMe-eK3(u z>mKE@Q}YTna>2Dl6D#|ddHk~LxmRYrN3GXua?b8OHxQYn9763u>K#aApuQox9@-!U zRrrSw?-UlFmOe8#USNLn1|^)#TaBBXh*1`EEiLz$Ch?1(6$n&>m7FZmvTChYVKQhLOg|f%Yy6qQvsfyf3+EC0}(G&iWaaV{^*EhAX>JH>Y z*JOZhmLyd-#kG^>HIZ7bLsU#_tBp2|lFS_a;&5#&7+KIR>N2iU%wS(JMXA^{dw$VL z>16z;R;HWK#aM5b5Ue1)X>RgY1v_zszw2ng_Lw zLns^oPH-Z}sY^9;UdHm#kZHsCnP<7m+lgk^zxIfVB?QoLB0K;A5%+n6c{L0YmxRw( zJv9UK7aJ=;GJyw8XZMTYt)(LC3~W%1v`+21?o@{VzVQ;ZG+7Y!D$HZzXPKX4(;RFWeSPO@ z#^qPc%f0s(tMAmY+nU7reWPJEYySWsDyO+fZFsFh!NX`d_i+s)&=Ebp$B4E;`OJGr zc0!t3dyiWEu348SPzKTWztmQO-7Z*>Owkvzcn$vmP4y+7v2oA@Z7e)+*>%AS&g5<1JVjzzUH33CfQlHf}oAYK;;uZ zk~ZoA<{i=h0NPUb0+`ILfSUpjW~D2cWs4cO5oYC~a{MuB?pX+N7Xd6VU$mv;z*UOg z<*2YIi2QB>MH!4?y5a(-mhK&amAL0KA5x%Q)Y$`O{9#LSz;!6z|K}!e*7d5vn+W*kkkHuP{>;#Q`c^w=7+@O@sA=ygI0cN_}cB6a&=aiC4!^ zz`*_(Fo$qMh4)4FJw~bxUWLOfGG9hWui!Y1lQS*-pxIwyE#&xvZMW2^lImnu$fax# zh=XXwVdvR$l)#o)r{X#1A29>Gey3GeLoLbqmT@uD0r5I4%Vd>YOTD<1@e?{R_L*@2 zy&kg>yO&E5t{|Ki?=#i&6&G5H_C|%KB?l6n(=GEazzzNai@ z8}}5`)YNc?IBT3joRGUNW55kC^pt(2M&-Dd>Mv8{DR?2Zh|=l&6aLb4kb4BDsY57w z%P3xAR$^wM0Yb@%t_dk3N-F*3pgG($Ik{lm#t57YUYMZPV>9kthGwK>OmpF*a@gm= z_n6y=tzrkAOH4{=V3pFW-X$a`R7Ioz0Fab6N~hd==Q7-kA+2x{j%ISO&?x*$;Jd~1 zQJ~VC;^*>xBDx~7>TG1%M6~tEU zt96NDysq4`eqd@dHW1?T3eY|P4HE znCm}yiRk!+v>&tsXX6nUw&pr<4sz-o(TQ9#nwA^;Bz9ZwGP57VS72ZqA(-}e44~wA}_cuU>jv3Op!Rm zqGt%ifdTLXUIAvW_bayk5POckrOF{j7JT^kf^+|3r;O&jvf##BB&s4 z`k&kyNOp#Cm7`Gt0d2qm(RVbwl`_;`1zGk=1>NSmf2f+EjQc;SNQ)4&G3W0w_;ve?W2j<*Q8YojMTUAswyrYk*Tl)hX>eiwr6?Rl zq6iHG-}{bLzykc{428W5f4BgSc1W9F!k7h{z9%?mIhcwMxPeK;z(6`?z^=(bMI9t} znLR`w>4Grg0n;yjqj!cN;g|G!ok}x2;gxO&3{}Q7g?9zIJ`w|Np}j=TES2EQQ0D4! z)xy}l!KcK)ySN5YgQ-@pCvZxM>zLMfBc|Mwl$6yP^)4)b+{4)Qh+XO!SbRfOwFu)6 zvD|5g52=>ilWma)->9P9J|zR6>LFXlHw8Jm<58x`kRgdnq^XuJBVqQ;u;U1xR#+J? zh+k>IDg~}NQ7HZgUF8B^&qNy4#?g73Y zCEPFZFKxHf2;9eG92Wr0T5|^hOL<+;95bW?6s9V4i0Sd1gnV-*$`KeOi!!WI}dX~Mz-+%}i z{lH8xJJdx$P9op>hpweu-h)$0EM`zbpK%d3V0h4YzdSSv%M`(`0^!tBO7TxJN!$^`v| zZYQmwbU9f9H4R`epp)@CaSxzIPZvwGAF)}o6sqekpg|?zf>*MV5JU%Ky?3Z;rED8< z(=atQ0Dd>zQB;sP$q<#6z7Tmq$mxATtg_)Ue{sMBaK=*3)&BsB2KLpcO+aonY3XwM|Ac2?>N3M14xTCZeubHviZ zQ&jtix6Zyi6)611y5hvF#-UU_V1kPM#Sue7cF@D!LvTt8SQgfd(F^p$3w)A{k z)4av|Pq7FNq1F<6N_Q*4T*J|V=Fz30CncfGR6P*wxQm?50W91t2*~DK2J;dMW)OEP z@deBqhFQcEwaQX|h(PLk<35tpOtukm6qJ@-%ZqSt!5$)G`IthAh(tj15o1a@ z-sb1?It+6e$m6I`tKSf+v3$%=@Iu)^wmYtL!i}|D$1E4sN@%|rm^Tz1J@5K~q2svY z<{qWQB&hm{#vw!a@Uh$_BZo6c>S-SeF^d*9{{YEmoaXQPg}D$P7k|VPc_Ov|`@Z1f zWvjvS0R(zsN8u%)jh4V?H(bkBzME4yr#}&0b!%JByQMf-6)5`V*rMq{ieF>ga;i6g zAOJQQ>n9eC0J8ZyC8VV-t1tM8e=_0w)VcxYKZH0LeP}+KqujF}!)U zG%FsK$wtEB6PTTI8jHi`=rNp(~w4>Z;?P+-kwU=5~&zYJUV#V^F*+(_-V1TUxb0hFWu2ZN$5Dq2yAxMpCCqy0E737NP5ovC^ zmS9B$I^rDKiu3r6cL5d|A$161rt<_KC#+kQ<_AzOED}H;6Dol>sl8@>iiYs!4-g2} z4&WdqN{JE>u@^G`05ahdE*=UC_wZgOSU_(x3#p{LSeN@o8-CDAN^7{Q5YO=_Wa=WU zQ{|MWmOU})ZvOzdf`<_$=DkJ4O%0tznRCu+RaTAqsl?TJF^N$|{>?>5(p+$#nFkO) z=#BD+tUcdGL0rnyjfIPW=Ga40A?SnWh z%nAa5Fdr&q+^DEEMWAo)_=TI!MFI@S%hU+ha0-g=WM~3(GKJgP1yB zq6v4W2OgM+&4V`zRG`yzO9FxNVTTGAb#cFDN6F8>yu->0X+Z*fHvlPk9PrWNqI7T@ zfagvX2O2FCWzZ+Q#F4VFry6R#!H5d@pujDoy0Y-=X7>%9z4QFWIcNM%WgZBX0|qw! zDo}Y>#$b+zuH&qJb5XWS>QGFtc_U1%;)n(-;wBcDIiUHLwNG1$7*RG${{SIf-nkM6 z)Tr6P_KL{VSyhQ!R07_ihq#ThiW`VB=c%7rj$Ms>LBV-~Z87R$?sVZJe2mSr5u-s+ zT+HI&=2cE!rJdAsANd;wTa*V;69pFl&9g>v9<U+N4GJ|G&G3xG90gcqxT)*?&Zp!hK#am{Ap`hw)lOc1U005t=f zl`_OtO`asNL9YwuG?6MXeoq1i5D;BY{5%waC}m4=9)z@WMj>9kyk}Ew2we5vDTw%x?hP!^_m5;nb@P<|-(%<(}sjE1X9z4gIBPDzg$~ zx4cW)EA1!|3NJW?bz|_v;8&*O;wlJu8>Q-7QDUwxw<@k%@)uvs7FBj^M~GUffEL9W1@?y4AO5fMFN%*uVu!fua zA||HF1syJ!P&945eU2Y>)=N27r5wW3 zLHD?br^VPX_bf81&|yio0V{^49SaIwS1P&p3Cp|-*I?$Oja$$F>jC^t3J~I@Z$V!S z#@fX|P5hC(7}C-`Qp5t7cf>2C9_!Z;i%+fIdx+T3+y4OA$hTY2=DFY6Rkd~Sm?jFCDQ($INh~&gqtgU&V+gLzLZc_R z9vV%{$2ao;+E{&{MooUEZ898@t65&+Rx)mg8*hDc09rA`28KI`F;BG3jGaJthALQH zaTJ)S*v(T1WBoxr*JQpccPv*i*^;6R_DUR|m@yoJ%r+#vR}g9oBXLGyV|xDpQHLLy z@0YrU%s^@1JixYG#cL$nRexxhqBmG;)b?2nO7SUTjDBT74?`_P1XZ&lzY$X{-6kp+ zX8|SYFZ~Y&R6_Df~fV z?dWDwiE&rdNzh*biH3_Js?=(&o4Nl0q!OLDz9AO4<4}21(<)WF5^re6u@{~9251mw zvGd^32V8ga0m=n< zV$D=DB?*hAGkMATi6jkTU|$VWD4ZJ+ot$stJsb-V1Fi$+P)Ijn+c!_fWtYP2lylnH z{6@7F8f%I=hXM`AQ)|5GeLw>s*tkyi{{V8el^lVuUg70u$Z`D471=Y7#^8mWShjyM z#0-35{{Rdc;{IYVv0g(L^BRVZO%mNL93JCPF1UC4W4;Iiz|J?Hl3gX15G&i#0)mH1 zAEoAENw65@#vmT4frLXX6aN5&q{tOmDYv3w21Ph%r3APLmQ|EIHB7M7U7(l1Bnuk6 z4%<$Nf?OMY#B6(C{=rZmVxlV;Vxon<=LL)1Vp09CG2-7uQyP>oUu3^O0|R59Qin@U zpc^mdQM9g@wpRFx$|>q+d`3UCM6-VoDuHper+vbL@dDnzFjCxHTc$ML9zrexzXis) z?fc3WEs5y(<^XW_HWpqdddP|Xld=ZZ2$JaDW3?CVRj&qY6AyJR>oHPY{7j5-28yXp z7RKs#kp$P`BEm{oqvkbfKM`vG0GKBvv}<~fJbZI0-{&zdVjzAhV$KSP8AhLs#nC|e zVm-NyarRCb)-wSVqWY=wEe%DbShEaxcJAZVe)n@?uk8f4PnbSG1Y0(CLX}fn2)k`{ zZxOo#EDc0U0`s_IQ}QLM67mk_Q5m$oOcEQqS6;3bjonZC zhRN1uS-@0QTMMWp8N(Lfi)D}urN?N@P6+84tl~6MX^M%m31K&Vcr056^Ws2w0F^kD zi!a7`fY*MdR}j5%F$SLJM-W!^2mb&f5<0oFEo^U}qcbVN0k{&bR2h}H?gJ10RO2%M zs9zGsdqePRnsL$g{t^Uh*;Le-|2@{1F@#eL{<6KBjkkOBFEzoO^() z!dCR#>Y|mP9^>jxYySWsqi!94)*Ld2WWqJ}YF{RYCszU!H<~m2L5hnsZxC%J`GQh5 z8?8&F1LTZ>gfbOH#ak)t+#hm4xy?6vmIJ)!JWfQTwfsu1&@HXs6Lq@9vy+I=3R(v_ z_<)CQjI8$#n=VflS1+knu!;n$z7pddX#r9+<@yeLMK0SvhFzOZFZ*Is1)F)Uhyb*%oWO6# z2QhBYPm8a-ux7gsiFOdts_G!F2WD6(3j=sqg&cs&H2scYl;UZX_?atUWv)HSbTO(z zv=X{q2vJMyh&F|+vDz;bDwYATvj_(sOct8izVR&-MT*XTuo6Tv>Yt>2;)*Prx_<)=HvZe-}E(xQR2mZ|A zLaEK`;&HODYW06H_PXW;L-d0>Y7fKQZ)ulN3QWNqY6?1IS}4~fzNY4D4f>VjzY{fF zXUsdgwd!gY_ldqko?_{F<|fm#Ov%PcUvE)H^?09XMNX-DiQ`N`_~s?Gb<;6vEG^wA z;!!nBKrCP(d-pL5W8AHNqU!`18wj-2LwrjO#=G3GP{&liX{Jo>E;4>2T;^x*<{f3{zo|3?&7LGrdFks2=@O3jFTmdQgIQf9a>l|gl%kB(@ zv_yNa!%WZ)Hs9u;lQ&)o0+)67K>)Wf*xV~&=v06+JXupzy7q1?0Y~B{516jeEKW?7 z1mp8QC&Uk%h+|O~-?$?o_?7TMIHCmGo}yZoS`=;Ec#(UFc9RKO?ku9s(+#E}r9SaI z)tyUyq196cqsT^K7dXDiutS5N+zu@YXre9$;CKUYPHGeY{{XBS*fcGh?}z~Y#OfyEj2xBf0B)xlnP3o5(*DyOn9G+R#5S!R z-AV#rHAX@OiJnqjUJ@T98|>fAwV)I#)A+iE!LXn$F-VhPfCo6Gi?I}=l-9FVC^-W7 z4FcMz+Y6ky54dp?t6(lb+ZD(X;suv2t#k~)C!m08@l4RXODi>5yEfOT(4%=`;=Tc% zB}r_UvHsa+3S!?~;tE>i5(`6$=zUBlGi~^sQ1*(M@%YSG9%B*MCuA%H=n8|R$ zkWp5hST5k02?O_^{3Q~RK}Z##RTcLz#v-)`Y!SH_9NH3~++luL#*1cv^h@kYEw2N3 zykb>bvV#*y8Z(mOR-{uxMaLl3lMqzf!ggYx6SRdWhXXUiT6I0CgWlhceuK z;@w#)j}TG2=9nPw;(Ha`Ry=!)mxx&Y$wFCA0G&|>GrA&t`h%)>YSClFCXFki&tu%O zZZB4@nDkAq1aQJ;%VHMO=`$K8G!<1@&1EMXnN;oIi!e~M0p1&FVlgxdcgfcIm6cF( zDR!6l#LZJvAgg%C<`{1YEP8s0`hiluj`}4r0Jj0!v@_fkAf|zP8z2%dV8KzWX1kW? zi5@**=Au1IpjF2>dV@LvDMO4^7R*r@3_P>L6L3+%b(;I26p%_&CuvDb1zKuXPM}1A zfEe@=oIiZm%+G9aL3jFwC~_`5KXicO?ncOsWZ5mrUU`MOBM-z%o3)<|YBuUzR}%Mq zlFmO#lL!MgWfTSdOD-U(hzwR`PvR|?m*x@oW-d;la|=({g86kc%sT!cJVsyU4s$L0 zOAnayf$I>;6R(ANh`yznsG@F;X$)};sZ&~?%t$c;1P4$MtQhwJxF4Sb4zJWhs8>}2 z2U6Wi=k+xy_kg>K$W-{2v-Zo@b9#W&R{TbV8kk_O%nQa`yhdH4pVYdkm~&h9>QJ-e z?>^(JsiAaiZ$GHJKl3P1U-tl~E-lB};b0(fMW2{%09OVx4jCzB9}DhWjU2+?!~DuX zG>GB);vVQPR(l5AO;&pf#q*XZsDf2$kBDR%9q_)pguD(%62up^cphRLMQcDe&k+sc zWTj_~N(fleXnaMU1%N)(v4s+WF4H}tNGi~!4)2vzpbFCnr@9OM#i&~A7^J#HDH^p ztJ-aXXc~9X{U8f!^khlUUS&4=!38(c-2LijK)0K2mSkgL!VH0PZtkU&wY8fV%Ta-r z0=6{-Iet+s&9zXa8_sH_s{)jieZ)3$0^?({XY&SyW;PW3O8`E*S(UuYH*UL7+pb6y zuuDW+4gTU0^=;Dlb7_jrkj?d}xdGkN6}AyFDAF}^2MCK^^?t2PogI#T z4LD+drV<>NeedHDY05LKplROJ<0qB}v#Y{MU@gsGv zV3sx0655aD9O9*Yx|fW8XGQ$XHS359*C}!A4rTp2c>_c%rIR+`zlb#$qzq=c#Z(uI zf%_j5RLBK}>r_af6`B-RW16TH0ctE}xodIIQKl5o-fNx)afH=x0`8adm;j8qRt7FG zan;vDzuo{mz_FSb3%$e%p)jj6yfs(2tO%AR25Ro}8UZ^OSTdGkR+eNQ!xUX43Zv{8 zOOIKN(9o^9KGPm>!z#G%nV<^gD2~V3RJZ~JpH4qugMD(ifn;Z-^l@XG<$&R%=?NqV*SNf$?2D58CIp+S`yZY zX0aYk{6s5IJZc!?Db790a$y4u%6dSK;BCPvIaj%6{{U=5)A*Wsr~%vnvux!PCINuC zXu6;M5k%@z;MRZn0=>ZQEoOVa68Vf;p0Q^#+`@0)g~c?)*ThZ^CCFj!RH~H{;YdXj z(id>PU^j*jbK)ERCPOeXxs{AY&;bh|=BS*RKZ$^^%-E&}xbO*o!~u+u1Z4Q8df0iF-Hw2T*EO7fmhpsikh50MC1bfZJk&wsHN&L}yA` zzsQSVX>AAjC4mS#TIvlTj0f%%3hx)Wc}D`B{-x=BFw%=Ts<})V_Hh7cPJ^GcV$n}* zKNB1#g<}5lx-i-sz7~)50CkQaUfrTtWz_`Z)ES=Htii`U!vRvH7k~K#und6vju}EI zidHW>EAB%hJ8J4)QnXDBsxX_QISfLTtw5;Y7Jg+)$MEHX%1@Z_c!~_0(icnWKA$Nn zDZ4ssC8Zi9jV5q(aDCZ&$^~UpNkg~k8v@o4T+}!Aip&T?b`bi^BO^hjpS8h!U6dss z24*hn{_!yf%@v}fQ7rRwqI|;LKQOt4aQS8mcK0$-UBEHH&SKt1dLbh$wQ&V1z0DQ5 zV(%~k#rBZAD0|{oxP8OZeP&*Sut895SL&I20vyzO5^d(-nyp1|54^-2;tlJFiF<(A zh9K$ip~EamY*wI%;w?@)g$sP4RLl+|D!f22k#fN<_Y;CG^$@y9kfVGtyP|265iJg2 zb+`(u%&#AZ)G+H1YdY$upuNq;S-_Wd!PP{EGe|knxr!HViV){HlqkT;YE${IiA+<1 z>WbagCQ#ABVwYbBxUjrTpoZ?(2w6WwG(P#vbxz6vjh~omwu`}wrKaj4UPMvZ?wA)&nK5|wiidu7cDJV9 zmQrW{v8T|s;tjBcWF34!n|g|`!_*qswsE1yA($%^+JKq^{{V=IOt=*StSxYw!Wzaw zZeF8@QDAJ~BC6A0uha)jKIMS(^9yeUK}Dc8={OAb%Pk=Ij8(UB#$5Fj9P=2(Mfs@K za@@E3gT2fZ>SX09Wi6TmT@%?7s;SQ5xyQ^5E18isT9mr1%XB{S+PCck!3yzgej$9t zmZN1{vxU^dE4Yiyt|mH-;%DbFcP?BYd4m{>^9(%0eiENB)Ja|VB}$dxE(8_Iwr>y2 z9Mc52Qv>lfdYK_Et((jR=WJTUt7OKrf-5l!gH`G%;{8-5a9;1ZQjJ!4`^KR5!|r~q zaS6L0W>~GKre&28G$cD0R=&s^{{XBsufF1L1}5yr6KqIm$(BY~Sc1z6En{!QGKJrE z{6UR!W`X;`sLM(->fnB0EM7;~GW4-}Ue~?N!EChe;}WU`vc|2io@P|8<)*6Q=qt+$ za12tc-8LP{DrhL-d}L}Uwmz_1?3E>~u|#o<8-f8qD5+m53os&)O8hnM7g20%x-W`k zKQlP8+M{BdJH&<#F;(wErbMj+R=slklNta}O9t z4HHH7zq2kDthD-wN)=04%uS=24E^SIiAu5@=DK2K12z>5Vu*XpP^uEjO#2|zQ@U<7mxde#aZI0xz@#i5XQjj2DF7>AhA^S`m;$jxY|0r@&tMzi2dts= zgvi(ISSyLn%h5;bVqcO72;!)q+XR-h1>jSGE2O*;rRWdD5Eh&j=*jj}HbRx1Rx086 zO`))+xir$y{{ZqbR>VQcu%S9(IDqx9#AbmNg3#a1L3ehhqrI&7lpQ;PeHnQiAoSG9 zhyw#%MXKr}pUu<=;69*rRQIwEgcVLDDUa1ey)k*S5f>iO^?H=$PviNQ=H=m9I!N>4 zHEr%TCDawZVRzKE+5AMZF7HzHT1NVPW)84`yfL?7i9?uJoc{nb+YzzHvv$y~S9R8LEO#_`|0 zMK%Ul6sJxJM6h&4b->hpt7=M0eVf@cX9ZI=>5bXV?)q*yeA*!pE z;|CNwg3G&>uTqGEo~2hmX^PZaI=ER#9ZYi+{6>+J%osrK49h@Zyjm9tIkH@bbm@}zZO<95qjdt}cTeql{ zZ+%2qp}EiS5HOi^PN&*!SW~FDuPtU9m}iZjZleHalxhki3j=y{QCC>C?#IXe#|k+! zlkGB#Vbd?NI!As_+AuUSI&VxIv2uXek7OeA7`+d%zjE5_=nD>^tQHu}SINiBXfWO6 zs_?YbB^tI@ur-7WK-d*G#^Lb<6?xr1xHMv2cI7rg1zVeBFSe>I(kWewa2bCxs8P_d zlJmqYTii__fQdSF3SYN4fttjk#l4g!Y9XBj?~KamiJD};a0aT$S!dH1$aarC(JGs$ z8TsxJtSsS5`o}RSgJWhKZd@J3ApDx&#AvHiK`8b(k4Pw7xUZeXywaGh@2kvdYh|FN z^`>5JI|MP_;b;KWf%1ElK}F=N`TaucdCD;zSEX(+JN8`tAXs9%;l^eV0JVYFO02=< z7!C|Ga2i=DUk9p(m>^9XdlYWTUQ82NYlFlv!k{b#QJTlhy)xop6avItQ-#_)X@K<_ zP-@p=+kNre*lZffMO%}n62NjomoQfjNGh1xPz@~nZ2Knj?GjGH8KNNO>mZ_sRr{2? zbQ(wv3YQzlxpWI!Xz~hRs*7MG-xZIFflNy#0d+;1ADDMqyFJEM?392)5h7nF@h_c# zLhw&1@p$vlVI{gUj6LXC)Lg58BT`k%1TVd6Eqp2;%u$RT*%n=XCQBKJ(5JXVYT>oG z-&sB&G~CX_9lvOoPDrU{IT$y;Oj=TXq6BNwRmv53`{F#z_X@7>)B)4(2J1)a1>1h$ zRip9l6hGWH`iSVkSlP`+oXAtZxN>-xQ1_8n@TUPBV`vUH~_YWIM#{gCug zD(P2U24c&z$!=z{y`VVt3NSamo4I;)}d&BEYI3igmJmBxazYqQ0f?V!q(sSC?DJuTUQnDh9GZ!%#dN` z7unog2sbP_*D(aojX`m6+1!0GaZ@a(f(xiBg8u;7mUpRPC?M;&fq+X6B6-{dWRwy7 zB6^A75Wj_E>oJ~>m=z7f^FQkh=AaSJ5mT5pd`v-<2nFspsbyBCZxAIRb(x8!OPS>s zZ}luQv+*j0?;3c3?;OH~jo)!5F}$&j26^gP&)PrR)}mdY59(Vs2X}}orDp9Z^fg<=N6g?O%*;IOC?%wuDSBq2h`x4O9DV5^c-nmdl& zp-mQdh0JALy8D!=c~GvjF#{-8hccIll)wxn>$3;#2b8P(z&IW_`>;e*@VJm6(7=Az zb0(sQxwovw(q+D(*dz)9#RLBUf&p6OqS3?Z2NwmU8gITJVuMpk$KSbQu)Jc?0?i?4 zavw6*v=0Mc7{DoN4Hozu+!@_k-g=mmZdZkR`HH62Oem8D4V08|-O9F+_W6t`H1e4K zV4F+Piv3ELM7>~yY>-<`W0=$x=w31EJ5W5X^YTClLW_UheWJov*rQnDpUhPf*A~28 zS46oaE0L$R;s}APaN)6H`y-_Xn{`!&mou;JtOVW_0`<7jbG1cZQ0)g&=r^Ug;wCVF zQmLUubHNX!*_yr!IpNGLv@Hu@^nBBCxk3;>i1jfE24kegnoQVIkgZyqeWL**Ws5_e z0r4ILfV&p#TmJ4{Nh#9{tJ76e7ucvGZKa{XOfZl+AQjq4zA zq=+fiFWYk9s8uns$Tt=)*){C;nUz6786XamCBLhNn!v%UBZIWnhW8?(Miw-xN!lpX6v#fGE$>VJsHX|60j-TT1>L`ym`iUT_$Bmk;Y-W}!CkS6FB!l0 zFhV_l_GDFoENb)2c!~44(zeSkV;^{#iZ6ErH&}-9zG1v96@Yb!TRcH#h+WexVWcHF z+y>Xh%egO@3&B0rz~2as5CNUSs-auY^C?&m(!wKG5m<@3AL?20#8Vl#tmYz|LZ4G( zz%%3AA2Qs$%;NJVm5G?tlQ zY(^NA`)3(b*aZ0m-od~p>QifrD00PgmfD6u1^coR94a8*Zpi6kxnBPO2nbe@*gLCg zbt{$j~u7RPyjY;Cb*qwmB^$lZHtP()5KoO{IJ7ruw4Y5|Sk9K@;@ z7mdDY2n+)WPX1<0bqQ8|a|h%Cix=eo08uo>$dKa&*#S>L7~jTRzj&GzuvnD)%xiR7 zs4t#9{6Imqww{E<10XFxSLnuIJjEb?9G;_qWr(h4@L_tZ8Z0A~z84=AaB6mJT)x#) z6?Ee8u1MtEvC!M&Uo|Y-t`|sN?o8exY#5YfD`JPYGLdHts|(aUF-9R}+!-gtovY>YI|-d)>YGL>U*!5!Z+jt1H4r|}UtznC44 zVgP@XZE5>|>}p|tBC?h_ZT(Ci?U11m?MN7{0us(~uiQsUSQVD-2e1=5*!zPs$y_ML5Z=&RU9M^r zv|`ardyg6E!CQb~0BoZDD4WDdT@T+8a@J15huMy0=*ud}Mb!_eni{ZdA{3V8Om|Qx z5EZ4bVx=f6Lm27X`HN~cX$x*p7AbvXq<&2~?mp9NRcW0qWqso|H&xDZ(hpGTDQrZb z%N1~|i|`6wwG(?qwTk}bE2p*+u;aK84Ztm@=W}|jz!U*1;?AQoxT!|(?!cV7hAB|$ z72$3mjUO_?;qM0Hs26VKuA%8c6NC}Xf~wc4KwjWEO7$;TBkxRT8MXXk34kWgqBO?|Lo%-r$Ec`Ze`vLb z5}Cg708~PlinszJhhaK_6+eb4^QvUU42Q zM85frOTBR|!aB)?1R2}O#KBhQnQQ(cY~$4FQ5;xl3^K612S%zDvRCF(@q*#M^%3lj z-u*&=XRDQaRL`8+Mz{He04>^ca?0fv=PI~{lGL)APjxqGrpa7ehEUs$hWR@E%Hll@ zpLH;8a;iA4$0|kSLgOdlMwx1BB9@8q5(erD2kZ@^(h8wm*FSld1-PpH zD8vTZ8!QWsssO&HGdNI5pK>r!;H7N|=>A|*F0yyU)S@;qaLI0%0By=t!0MVuI%`X_ z!yo%B*8npV^L~s&nnwWHj0qXu^fFb9dDGgU9q|mZt%blr$fGTHH`|XSljx%{(J;wwW%%yC|}V?AajJUe-H-U>KdM zI5pS7_lVh1K}=mMC)?ZsY@(KV5 z7~DQu1gcxuvMi;XEPn8cT@Gt&`P8w!cezH_T|@wI%J?6NS;Q|-#6ZU4Q)~ET4nK)| zF26BpReipui(j7Qn-9+As@d@J`u#0R)2~$rqD#J@~3`#kO=$T6x@kK?c@qxE_u@k{mZwyi-{aIh>?WmalGU^y;sUW_!@f;Kq3L5kCdn1xec zXr~EpZ1`puUN4!7p_WU$#K6~bgTGM=fE*&}m${ox$zukkrm9}%RLe-mnAG@1YY|T81RPA}I)fd31^35`BFfCk12I!jbJShS7*l$I$36gw zEck|8)H%UWTdMcOt|DUw)Wb;#dx0tEjX7$naWz zbup+oD1Q(Ou};Qr8*I9BC>BmbRr!<&7R4=Nm>{L8c%{a%8>w;4zjjDgxEtBGQRizQ zud?b|w4+&4z1%2`nGk8ZA9BQ4TPDMIb#j!@Gy+(5hcS9Xc3pMuP(qiHw((OiSlWfr z`!VhKSmf$6Ai%BY|KG-Q54!79dxpy2I~dpHeD#jM*|&l zKGP;;9nv~UkmFi{iicy=z!Bklxk9iM&!#qZaB};>0X8v7kBrJV4do?P7oPJ|oDKsG z)JsdR*`6YAmGUv4z9E#db8S{Sm{B>UhrIIu&{551w9HXj^nwD*;idS4B63ETKHvxh z(f}=+!d5$$68GOSkY2*Pdc`n6Y}IsAcut<6!+K82avHCQKyGH&>Zt{N(#G?oP&PO@ z6w5aTDG@p^t4AuLwnay?oL->1QDS|qhV}6@Mix__Zj!E0{=^^#_=&1Bp%ypdv1q_3 z2Ebvn++SCD)!S~qW1h08lsgJO&=zn4L6Cier2YQP0XBC5jwNH%L~oSIC6Iq z6s+#x6#jUNZ;04i`+=g>dc>hx)D=)mt|8@L5LvQnRe)#p1&4m4o<7j{M!5ba1)Ctu z=*+Tvi;v7?T4h)nMHh$wMi8hylUPI>Gd&X%7pzCP8uu!)OStZhM(@4AC+^?|?2WVH zLH85T1r7@4Enxz>G-wVb5>DpViEE9`x%inJN5B%!Qxw+X{IrSLUeWR;>@ob|+lC!M z)L;#^{>BKZzSx&fu?_|`n@3r~o+FzC3{v0Zl-1zSuT7OGz-kIgH=6dS=;kki(rK(X zfENt{-3qe`&NT|FvfcfmDDqlc{{YBMVbQp-c!4?Za=V9-{)QIkmD>Pb=5H`g0GL2$ zznYo$`H6Oy8kHQXG|3w+aXqyiAH?iRu|!ZeOr)pt3eQ#`sEeQu*=YX&q{CTal9t$D zulrE7K&Gapi#WI{?196HjaNG$zj#r%Gbb)LHOx1tgP0nwU}8}yhW`NTFvi~zxH6tmpYok}d@h~= zjSWWTmp<5w&7XLUuhJnELb@&A!6{e(&tJGC{g-f<0kJ~k_ZO*(A`vUjN94p^qMGUZ zEZ4!%zN3U7sgv!^edU%B2AMfmclM7^6^2EA(h*x@McLH`C1_rg4eOWR+9ssnI0Jw8 z5xY47f$7pXMYw))H#X%)If;H=jOdA$eV>`W(uKn6{FS4aVA#K<1-Xj-A z+%8Ya8U^mre;0DK01zD?Ic1G7bZY+qh%HDTZT^|b3dnBdhQ8ZXeWAKI;>v(26glAm zMWY7F7m9!sQ}YnA?0WwIQMCf(Ia3v_m0%OeO=0$?1S(*RuDj+`D!(rL491i`H?pYV}z_ zoJQW2t(_l|CT6n~&LblDqYAvW!klw?+MSyDsKMU-AQ3?Vo*p>PXyg;aj4W@Nwkw+Pnfl?4H z=9N|9BE)O*YH`CvV;XikQ*_X1Ik*f6anL?ezqtESSdEM8WWVmGPP#;m0?#%LG4n8J ziaI>-9~qUv7NX5Kg3>*&f4P4xADB^SJbQrE(hkO@4lW4Njv|Z3CbB~=pK*GjugpfA zJTo-`T$dHRUt1!ITXiVaFS(1V2}t@iGlr(V+(K-5;uY4V(~E-N>QbAiV#hLw@;RA1 zA{C9ps120`uHk3D#83|s(9E)?qZDFp49B&_zf=DJtV(Kj?k4$Xv6#}$diN~U_PS*_ z#Y<*otZdXGm0u4+j$&6H1`7}d>J?)CW0hsTOZN_=k;$6(DPlMR z!wOp?QKJ&kzLLLi0ztCr^^Cg{6|yg;4|e4WRc(JrB(S{Q2MtF>g@6;5UihDwMFP0Q zY$33kr!||D=CA+^kAQ=foRYL5*fMRy_C~c2JEWLY=<(9I`VvS-DT(X@?{1X>& zS+d_!*5Z@nQGB7BfNy=p5}Kcs&Vp>h3q(iU9sd9kb=(o0Fuvw+&(!=-6@Y=cls0&j zjwL(9+VKJ~Ik=gHH{oLV$AX%abpVVDJ;dRZIM-14fT0$%Am&Tju60->(vuH$Ng^Ww=s{UrZJpbq$~w0^xvE zAFv4O$vIVTuE}Tzcma1amKn&uXq^olmV1B#s1VKz>Q&8!THpH^_G%Wmw&=<};G$N% zN6n_@+DtaSitQ*+XvwVFiv+x)fMNSK{BpG+A1?}c(2DAg3 z>xp3!*4sq9AN)%2Xp6gNFSHf5f|66~p9i^1bWmYe&4KPXX|*a5xP|s+I>UvO26A$y z*i){wbSQdQm)$USP?p$r#AqsjN=F>gyZb~c;dasW(|+dwX6qkJ95=}l3l$MN;vTLR zq~8MGXt&QK#QHYVy0DA1VA8Zvtv+T1;jGgMb}#Bcx|r#}qCQBGSoDKr#T zav#!FFDIym=>u>6z}DM!Sc8DGlT{HkF&Ens)rl&vkm@1kn5^n7&Cgh4cUzbL0B#g( zTjo{l#}QMKA%>xB(fz<0b1SlXL!?=*pb7Y3b3bTqRFD0ss@j4K`0T?i6*dFrUP_d1 zZ#kcOb&;7-cN6g(>SC&@000zhr_t0T;-1u%1%_HR>Ncv4a!u~@aKH(g2n);?ccUeh zaOku&S!Y2QMoKk>szU^c}Lqizsn0sf;`1>l5y&Iy0@@Gie|Ma2?=H^j)_?iJ#C zVhY?X`_4)r*+wn^AokN6GsYuROm|=I1nMuR_jG_wKaqd%B zw6g*H%el3+TZNRi%`v(ISJw=yEgHptaJHbDCO$)nXWh9}Eh6gvcc?Z)G;-I(0evY+ z_K3-VYLvbh8_}riT;FjVM)uhGTn1DzM#K9;a|IS@`RZrgbX221lx96;xVKc@ecCwsy)_c#W3#r$dGcJ@qWnre4=ghImiBtUM@e3)PRfLaXp{qJR|BFcSAR zYC09}IIUDyrE`AWOz2v6x29bYpG+4YCpFYX%}Z86)K7$z(e{IpIO6$Y1v&=$_Oh}u zFmN4LB)tW?zLE$;6Q`NL!f{MPb^3{c9m^RADR%<-fZt~mpNVR&Iax6bvoDtrR=Jc~ z8i*-W%I?YE7UKP&CQ8(BXK^E?dQ70_XQ+T+l;=M`DU9)*fOrUrv+GI^P*MS*{nY?y zDAkGn%Stv1TvLxzG~#A;dF~>C+PuMRBCOzm0*4SIg@$;D4n=5pnW?AX{vhi6O019C zI0)Uc*7$QM1EAmiA=Ewh^7ApM33!xqnDijO`7CoNlwb}f_(Ibp3z#UrW>}ST_uQp= zieXDND_i)VksRoIjV_GKwqcN#)GX{ld?Rt7wm~_Z)5|F)mzc9^kh#GR#M=easy|saW{4@cpAgRP2VDfnKUM zWjKVV^D|VRcxFG0^fdsw+*6a>!Oo%MMQ5kL?hzY%Tkg zC6)clLVgem4Gk(>LViRojcjKt&ddD<#OMl3o&3G*HNM?iXq(u=GR~`GBfWa<08pq~@I+ z%F|S*2IYYqjv9=0Q02e9$Konv{koT&)_3Y4>)$Y}wf4lQqi!l%#lfWw||opCBlKGorg0~YE_+nB|&sqkMHda6iozUyMv`BQZBl3+9+j!9OkP@ zKnq|sM@*wGjOqsZst%szC8EPxIBxvJxzYs-;D54GT_8eb$UjJHB(Z807qjHt7|b_x z*BEf0Xf>uSbOWqQR$O_rU_-_mymO1GXB*fevvB!2hIJW>BLQU{GcBqXfDS$>r3mJ-s{5tyz%|WUSNAI!$`l7}W}>8q>~#2mD*sOq^~ z!Z$lkU~Ps{wLpU!F?g*SA1nYJb#1TpFq=y#8JFx*P%LY*qvBDmd)fGvZid_tIQQx> zQ*h}1SJY@RwhJB|e`Uvz>D;{7Vkp|VHsv6a0$wl;V7GFNATwI|h{_?GyM8E`;0o-@ z!$2EkS903SNJk97*5I3+4R;s+0A&@KV&+kz zScP{ILBN1sBCX2YE~ZUNJUt=hFWNFIjtH?jf@MscN*(>ByMid$JHbEHx9PR*j_`VYeYMFl~{)^@wtpi`vc#?Sasg zGKiBXb1-r;nJ;5-6-8`mDfxmEE3D%Tv;mFT{7#1*e9E;ii-Eet@QRhEa=E=3j}AG3 zQ)<`50a&gdh!_I#y~PY-{{Zdt1G+5MIf@rX*I2LjG7E#Ce+v{?UPAHylMqDbS($<< zS6e<{VE{0-o8h=3Dh-WYe5QI(1sr>agpIflO;h)bV$O=e`8%2Hv1(fLLv+l=ISm#J zUSF{U(zPOA)c!6|TqaP_V}`v!7`8AJbm4pV6*+9s4N5b2!~iPM8H+V^AO0Xf6&^%6 z0r1cfKe#QqTvyZKpUbhFDD~CN=hiS!-}DetZlePIS&%U2yqni^`ED{Cbs&uoKzLOxuXuUFPMNHBzQ_ zu>{q8Y8e=B`j~eMO5IC2gzT;%alOK(?e`D5Q^)UU*#6he zxqUz+A;rrmGZ}2uQDawdQB!kOaFr9S#J*KbP?e#%b%!NUF?97P;m(CGdI2-mPSnsl zR;9S%%3eMp1%g|(3*HdgA_pSbn<&mDZue-hYT*0ElIKh`Cv@Ug>adUt_RKoS#gx5~ zdvr7%no905F&BHb+E|jVLZT*%R%*d_@hDt3fiL3aA$t=YY`IsDe4qd-sbUh;SuxsmvWb*1WtvkX!(F$O&01Bs(xS? zkG%B_LC)%5xk|41l%ahZmjQFx#4A#rz(>DOJ5Pu+9CS=97YuVBWf9Yu#%E2%t;^HI z!!q{QajlTJkHrJs#cICrynjiSrdRuye|eID@C)t-Q8rT%7UPNTQ=%aM08##_W#%T# zveslu-^x=xa~=2vPlTiDBT<5Mmp0THbK}%cyrnY>=Tj21h{VtLGQllG)kGQHL@Nj0 zKSFT9J980s<>Qz(w~C9La~)@d;)=aizf#Tw_i=V>cf{|n-Zd*Vch#zY5C9fdj&F&0 zqE_z^gn##XnJ3^ynDC|#B04{F3!G4GTvQYk(|Y^HAi-RT1RQbIaXHuqRSV0Velsx0 z+5jr(RhocJunP^izATk=JSxn3w8^HsOTk$~Uof+80nPh8L4~pzTYTnIg7_VCw-}jn zW(N(Lz{PYMwNf6ja{fBz%{N_=q}ma5AB6GT|9;*)YoR z6ByeDjjU-A?gd129PR@{P2M;01+O+?+ynz0E2dE*XC9Ca&}rrkV4=ftXLai_T3w0j z{Y+LLiG`JHE}^S60=6bN;!$hg9}^%NO^hv0PTG}fFZ23=T8bWXj;>lDxV5-Mqiv^W zsIg$*7C#XX6pa&I&UuEvy~4m}ia-ytB1V>0hxC5%DT>bR70xWl^8&D(k?p&geFd}) zjkA&-u<=PwFD;QF7y!2f0wzFvYN zC1HdxqPj+qvRGQsmwuQ!z?xl=Mfx~}dntf`OTs@Yr6yCyA+obmHX}(_P$o*nWkD~b zzDQEd1KJwRWso)RfaTfF!RJz$BG3Un)lZpe5T!T;pL8A~EG(W)%$v!wQ-)fuqZ-^5 zVXT1#dsbRaT}G@#dXA0DhO1pcxQ%SCw<#4au|Zev;A0MXBdlZh68EWwB@NWk1l@`J z!M1L_Fw9EU;Lg7AR!vM@)_Dn5;>W6h@=C*jns9HIxvy*#u$atGCVfK>@5CrUk5Im5 z7xxe?nTT!yR@KX>l@}NZEEGf=F&phNtVwvpR!3T@Wx+7Au5Pm*wJpIfL7(O%2Fm?n zP|8CI$MqV(qSF%~h)@QF3cs|VRBEsbetLt%dqI zpgf^8kB(q3+`^$rtyHl^y&FDd5u+qji%?wxIg1;vCQaTUtA#j%?q()h`ihdPYnTC1 zP-*YD<7M1iYZ0(M_g+2fuN#Rk_Mk$T#))*MSJRmP^#wAQ;T02JOtMJw=Kz6*4eAKzIQq z!?-mn$_Z)`Q3$xqG1O@R>k_W#3j4&qE~RHv+Aq0T#A=p)CG5v;WjK}FF{6Ayyk_?> z9;!P>4u}}e{X`TN{4$l>{D?#oWrHp+=PX!zb^2wN1pHE_EuJVcS?UrZwlCbR0c&bF z_b8y0I;wTNM1@ZX@upy|*{lAaabeiB)z#+ZeE?mj9YmL(0x#aBGqnjwlwA!$!Oo>= z&Qtl6VaTfmmO4sisK5%X-Q1+pOxl5?f%t@{R4HWV?+74{3dnVZ{$nn+&4~P}{_vI9 zpg#p$`IG<*jFs`2f@Ii4_{0ZsM8++tF>}(pZ42;z>Y69a86-y}FHJtDBEJKCIzr+bfdxb0cZ{jQ~H@lZu z3*}IviaoIkyT>&V$yn^>4J$5dnC7gCyNPOru{Z(UH!7{IdC^@FDG8damGLt?9J_90 zg6q#8BqEZo@VBqJAe8S3ga-AuAJD?Vz#9`ji|#gC0>b3oN*E}-h0_C(6=|%y3e*ct zOdFu%vDRbZ1a5S}V^8WA7Okc?p!kd|z!JqbWAemwdw>##@VJMmn`{BUBx3IdQV)q1 zl%)k5*UUH{&x97o*eX$$5EU$4YRE!wD8>H(*tZH<{6#+Uh`f+g%Su=QxGtkDg=}JM?pwUep16Xb5>mY(b^Ia_0CGE< z6^dUu{@^`OTYmD!$zUCx>J=yng|S#_!I%u5X@Td z9Yr4vP39w~F$cJIfHeX5g|SW|4zUvB_Yns~`!v4`yKld;*-?#$z1>Z9qam)jdjWNV5&oEHlA%=4=9Yqc$-%-xvjIk-> zGR-w{#T^{VCev9_+@R+y(2(YVd znWLyOWG*ou3k;=T>p#RxR1@Oj8x7E~6Yb1=0IF%idXK5QIX+ZY?_eM)>Ivvjw%5xJ zB`svPkxb_CaM2NAITM{?qw9hecpO?S7cd6*!0J#2dP%KkA%TH<0{&^z1i_y`*!6lz zNC7Fd)>Ti5dQCxe-{oaYRLPCoikXPZ8AonVQP>xO4pWH4XeVpfoqMddPWMa>8ZV0t)b8wOpOQ>dvVmF6Mz>zZ~dMDU>54x3zGuJE%yPww;(A%(Yh-;lv&&wj>}%g zKELlR}LdX>+cU*nG^PaaO2!)%sa#q>;C|fxg|UGQkcM$N_E;RwPzKAcQ#+bTwb@F9_FO0Nx^E zmseV>Qf*$3fQ?g+PUY!Ek=d`@MAN_;ENZ9G#l%WN@Y?2mD*$WoqB*6 z{7T%>Il-0pnN%@nW?;85MPRwq0Xk#i>E5GRV=Tl{H0KhA^D~24Wi=mC!Rjv@!Ccm( zk5G2*8FKrA)-*sL>Nw|6vyOEWYkwmP8@&GjGvO-+o4(@v1}3LB{S!`OX`P%psa_g8 z#YVNY>qY!Zind|3B|$@D$rS5#Gc2VuRN-uwO8_0WdG<@k7Y0e>R6>>N3T>+Q0NL35H=Rdh{ zqh+W!$+0s~ZdL=0!N=uVuD%Xo$ZVp#tBcD8?Sg|g^@v4;pywm-?qbro4jlggQ4%J? zzj}&dEXA2$w9Z(5U&I4>c5Jv96_*Xu48$@iM}ILH4ydOm;-(oHuaDfz_KqdDl~AKG zbMowfRbb|$odsVy&$tY{o*i7c(W12hYE%8qIeZh9^X^t$Hf47U8M?@um2TiQs)kLr zE3#9Brxm!`t~_#^C~|-5P-t*ji}e#I89=|BJWP5bmeSX_$pVIC6|TM}p|!~oPrS3p z#|`o|Qmu2)G=fWT;l9zy@e-srXa*EEedRQG!IdcFR2UPWJB*{CndIz+F*L%ASWC13 z8o97>{5Y9mM5{tknHP&Q0Y-@mLn*X=W@}F6B`2}fY9niuG-|>I8cTx>41)s?sm1-` z_IgK>JU@`fi-E(^Ax#UDPh2AK&45wWYL z7bph4#Y%5E^#EZ|%T`ntYg1?NgiN^nkx@ZU)YhcETzWa{Gqxe!e8Vi{mG&c!B6^x@ zI+arKP^N1A#?f(-EL=l*_=D7863*lJ_bApoi%k4+FQ(nX6Q^+KE)a=?+fu^Gk%$fA z-X&riE)A8Y7^w8u-Xaw%c7h024pT-flB{>=AV7u)WTyWBD2p)5*X}9_U2<7SA#gDH zdWo}gByCmzHIij&A%{3pP;b6Uz{5oyVd*}%de2lW?@2rgRcB-UQ#hEYr3P#6!|F4{y_Yd8!tfy<~`siBB- z6yx_V%jQ#qFedbmsJ7T(#tx+hBR0o$xd?yUrmAMs8el$QRjG9E?J!qU6kPl29_2M0 z6E$iNZ?rg@xB^_!h9MZ!Okriq7gGy$IV$AZMELSftk&Bm=0ufI0>J-@1 zEt^eU`rJE2Yy}Te)QJ+b{iU!9=!Qmk6`|c?CRbPsg;!UpmPXq^(`fMxuOKMkKx<$k zlJMf`n2U4Jbu;#urnez;%YLAi5H`6UZ-a7(ab_tFbucZS4P8Ryx3GP|3W-V)7f$~G zP;fUiTHo3!52Wo*ZlQDBxI zTV-{UBG)d`ElQ4SQiUcVMX))am2g7&!TE?^OuE^1J63v_ggyvST#JD?L%qQx4QJ+kEy)a?3+Y@h(DlSdfAZApa?ShI=&&-Vn0MQ*UTVb9DCHYF2ju$O;-|hM3ZuFxunJ#d3~VTSr(nM*9DQ~}0X9~#2n6j5QPENOh`JObp==AIqC&V`+(t^PkGiqZ;`Sz^LS zMI5i=F~Fpah85xiEE?6WjKI0IGsS~07!M1K@drU-wRF`5%f+R(7+0ZVN4V(X;R+DZ zX_(53-il@h+vU8`y~ZJ;18pXnPZ);axLwgbMyVpLcKnbb4lkFuQOg2VU?{gyD-D5` zqhkdlfjF111iOAFQq_$Tp+k>ys0$p&N)K}-yhCEPWxS?EsE}Lu2!}2@ni?Q9U${M_ zbFiF<>?}seJ2{0IVWn;4?QdObx6ygnLcXH&m;MX#(MF^ud%u2*l;w-qTl#w?ucQB9X8^pLRZVwZ1 zI41D|`1L8efo<~&g(hQqyTnCWuHib!xV(Z4t)%;PEp{PXf>v)P zUoD}i9`b9{K%BM9UtEZ0SyhFGt6lREQt?wqFeqiTl=sEL89=3le;AmhPU^w=s@y?L zjp3u#AeMnQz_6d0uKo1{f@Z5h4{)H+x*WfGY&tJ_>xn~j*+RwBEwy|3fNtzJXd5V2 zuD|;$u%Pt~X}Z~Zg*vh2lnQd1Vz9jTDHPwSiD%w9Wn*~H!jU)>_+g0|Rb$#43(2lC zDJtF5n4)IAzua0IFmqyl<%I#hUH%}23L|B+DMp3e#qPX6r_%^JMVt4K+9hPjY+iHds=}ADG-7koRjg5efOZG~l&8%L6fNjLe ziDibu(XgkAm;_4kq-zg{sNm}vMUMB;9HOethQiA$gaDxD$!(3+;CWj{=2`S3lnkdd zv^|kdGdvFqQC-1s2ElYR1r=u>xp+4-(HO{2GmKhPMLnM_$|`a&QPka_J2bVhR@13h zNUpC1kdLLXwS7kyP?T|eLsM5#Ym~Ys6tenAvS7YrhX>kWvKPn9Ie#&34EmQ5r-)Q+ zg`An{BWsV$DI0N`$8Z9yoI;r>dSOc|{`}8SK`zn0#txsy%yAI>IGH}64_-dmiJeWt zu@;GE4e=D_FB9RP{Y%c}JC~nw?jg*j3x?I<0_<)9qf(s6ZskQL%wwsoD6-M+B&c&v zKM_hrjtOJ9*F_GhI0RLe#e0@TLbg@@0^qoY85<41XsMtx%N@bAL0%QrMF4LLq<`{S z#H3NOubD+}B4z4k4YIIIm44ks0mvz)H<G3P^n5zVEipZrI%Wulw-2Qvc3 zinc8%Za5=@o?&C*ydTb z2x1s}mNgr7M7n%JV~K91*dxh^FdGagcu9qv${cemD7HW_ONOZ98sJbJ-tT2Wc~?4v9P$b zijd*=hvqfYAX71cNamJ}V!4TfsD|8qqxGsABKDe{v*xpR_Lg=DhQ)q`FyP{$Q+>gr zOML^b8A365x%q4Bl*3zR_r_(+PszJDKhtt{E15RIa&z#hCRP zdnOxE&smom4tJbPjpn_V6+(>5$O>>-G!{*rM$I|qrcx+&MNAA_WP*{CN@qXJE(NA@ z+3y>SxvO}WrF#z3<`(vZv^yD2_W&!`IDxns0l@vrpg!DB-sSrQ9_^+UKrgPSa6vT$r{;eo9obc# zSeUIJQDTE=v>ysjhFXC@W$h_+@{9v zIEttNv0K_8;ZrVb$g; z!nfT1Z*d>{DGchSMln#MjL%FO+-osUhq-*;`k3MixqtiAP0%);wX{XC96*n z-*XO`$7E9P^$X5rru79Xrs^TKG7uU_xj3DlxB%i@J=8ZXPjFlK1dw~)KC=?%^ zK=jj>Q$t+0r{~lxQlet5gB(Q)t%4ouXaH8vYuW>~t`9+$rjae}_-YF=dPH|tvPUY(MxzW_SyJ!b;+J_O<^ufJco=fP9lf2-tUTB4j5O@L9 zQK*-L2lo&rN^RV|?K7%1MUuhnS>;62+(3c@1yb2K9B^?RUwU1E2t;UXb|1DNVil}w zc>P1@Sa4n=T`O=A7!9)rBt`)R>e1?7K$zZ+rj7(1>IG(aKtJ|yEJ6Djd%L%(lQ@SQ zUlXNfa$@2wRKTkEW=3ae)0nwt4YnAUwQ%_$?8kDrZ1{-Q;jdu~IhPxjO4*kdRYv&` zxw5@Z7Nr{7xpMe|;X^WB zpUgn@?kdaF%XUgCZT=;zYF(-W;w{d*B(rLg0I28%!DFvbER5OfebCFx@RrqnqQ#+G z(|`R$8-$3XTH|vz=|D@iRxt04by)CBW^lc61Hr98L=-{nD7t{gs!{?D9^eajvfC)S zYF$xT)UB~1)jS1#*vB12J^&3i?;42;D`3bDppLpw!tXm6tc6~d-zT|sDK=FNdzs}h zhY!3&XgMo4o~mjw+1nqqU=Rhqp5hh=Y7H=8KwUI^ZYrt5m{w&gU>T=~jR1ASEaR(~hB<96ni z9D&XA0+c-E8+T_A#HIlLLH;66;Xp9)Wm)@-e$d(ICn_-PmR_nIIbe+Mq57SjYJ#oVUZ{q_b#^NIF@E4JU>1=$NwEY% zN)-mc?@aiR&}-ayfYkvJO1KIxL5;*w?mc%CV@FGYi!JzLIsC-+I}Yf^9@r_-#aTJodXx}~whMLC zMayHzBNb`78$G;Ba7PUCc0~iQ=Y$Ou7hLWWWIFd2Si_cKSl=;R0^+wBVy2wLy7KNI z$&Q>*MwABk28go@bQU8c>%rdh1P&D=MGFxd?Qa4O+^V2a;lb{CAzC4=T& zcS{E7O6cNJ;>|=Wc6F&ihaA+=2jzj))}g%1<+-+Z@hyU+t_7IXuv*#xfTQANlG#?6 z;hM)=g;eB+6=T#hqA1o#t6T0N$doXM1zus+aLO`Fj~5LLFGk8=x(|Q_ z*r|8v#Go~K{+WniaJ)WZjt3!z^%ag&ImP=KT+;n+33d*gOGO{c?8`w+OXMqzkX){i zSF`RLPV_OmCM6rJ{{Y^iOoR-=m1*%)o{V=0JS+z;ej*1v-r)2xD+7*hI7O`mVk;y# z*YgH)5|>|P%0V{8k=AR76f>fNn#3~RwaGh~)+Z%YV-8~3VU-Bc#z|?ghjMokvNRQk zH&vcya=(Fr*)I&rMMxF^?%T(?ZV*~+;?Uz6g#ampRn81VUnv20QdX;VU|GCOMi#{b z4st&XM0F5Fy|NirbtN;!LN7#xYAT_l)>F*=}pgRp(uX5d~ zP6q~Wcf`}i7tK~Pe&Hw(icoeZ`4f4x3I<*-tB8J(8)7b>Ly24CFG}q>vFcqz0Bzkh z-&uo9!p54|+v`vU$y;G~!5YOi+U^ahY|aKMuB%NNzib_aSG8~FaH`Gl@<9e|d$Iu7 zaZ2CLrXv1Er8|Dp<`l-|Qs+3tN@II~@cpIzp5+ZK!RL}I+@;5SL`iP$;&XV8Q2r5H zsIQO5{!O(%txi(c{7chP*O()6f9Sl)KMb>rr#(_2<1$qFceEEF?>(FLreFaz{Nd8Ml>^})WD;e8~x4zG^kbi zE2%^?N*=p^QHUX8<3a6=!nSFa5|SffX;#J!32}`39m06aQpW3Ag-{gq9zpBesqlkS zj7E+@Mc3XDOQYL3E-E@;HE(cJBS2IMMqXp3p@P9l?-J@&Ie*&)R1dqUMB85JLm4v9 z>3D&D$UkXgdtI!CVVz`(6@%90=8YX0l#C80cQ3LHP24f5MvmtOFTG0(8Fq0EsIRzI zOnkt>bsdXCRoRL3k79P@~Sbdc{}volj^zi}20Z-xb0 zF;)n@xs*iK(-mCnF+i%m;6A{mu)=lRzAk#GNFW2kD3~qkC=C0Jp#tR*?mnRJo-6O)7S&`_=$Taf9RoC9*ofH|RznGbpbFgy10wy^&IPyndGtYFpv$XWJgTCgYJ7=mEBeSSzG_AJo^=qeTvnr!mwWdw8guG4E0i!PYukjAE3 zY#QPwMv;rj_lZ`x95*zf1VGfajm_SDejq|dxGA4_ms?ouDPe#ugyqlNxkO_daus}Z zB?Gi9uiE&F#hEq?_gBSKwN)5kFyyvWps3UV#`Rp{C^F`O%%M3*H3LW;ny31XC!Sd> z)i@FeL9R`SX`1(#c65aRVFJqFq&C6?!ryz3qZvUsS~nLjZkSDlJiH4cN zDJxAsxm%@tMzO2?z{-?tx?t1&!LpLa)I*jh0Nk@&z#==|Wzxpw?zn||_bsI)t4g14 zAy>bKHEklXbGZALn(M`Ts2lEAb1O0Sj_xidD^lwmMKerP&SH|zVBfjR6!Q!}+*Rk8 zy5?1j`SASw2rv~jg-2osA+wD7V!SniQnu%beuRaEQSvRu*b^WrFxa~U&}Z)tMV8Su z#v@T`jhYVFBMpdX2Xd20G#b7?G3AjYU!}vtRHd!IJ;X#NM8A}C+J&Yv<2MepGwR|v+WH7lW%g%IScnH-?oSj(haTZS3?~@01k1O<^i`v zRBa_zryFI=#?h-#s8qST;F$#nCI0}Zw!oO-DOjaxcPx=qD8eS%;_6mA8zbBh8bqmXmW7nDf7ogYQUycHdsJ9eGN-rThM-mNY4xaakqc zIto}$Q~W}Z@2Z%m*npQT($R-_R!gOVj}~G4LE7G^Ep?pcW)!X^{{ZB2lw{Zn&#X-v zvMI{`F&w(XM+84Ip;skx6Nmv}IR!`UEXw17oBPHa`ZrI*QnW7vjdb%GuEDJEeWERZ z!_UO{9A6LQg_HvA_b6AspGZ~w+PlJjrJU9vV!|!7`XrDMt&0Z*^F5qy zT1Ah)Qwp>WrY|&5Qq`O&wmV5l`-n@c+$gVuljGDWt%;|JXR0H5*(jZ3?Jc&UgK?(@ zp-r)-n~fM}LN4p-c_ilX=1kSwr`gq8}eO4J_L7nSs~nmm?* zjj~{M;Q>gNzyOh@KLrRz4C4D8nS=9YGO18^p=`QPg>NxG7Nxl#;p*~+6yHutGlR0?QYV( zV?YA(kU78g)WxMQ7Y&`wZXhD>a)Oq(StVG5S9L5qU%b|-LZE38IYtJF-iBoIU{ zVk>)(4c$~ZVsB(FqkfN4+i=L0aUT-^#a#?n{@`N}a>Z6P8MIJ?UlDV>%S^!@;5=Na z(JEv2G>!U}c5kRF)UU)FtiqPXNBO9I{iVjuADEO`U{wdls0bsUhze%@^Bv?lmCPE| z;f)HK*%V{;mW8tU;tDAM&NnC^&w2HhA~h7USN9&ECesBW61$8NScp5#oZfC%BSM=G z*hP>VCkx3fpe2zQcX6aN&wqwk`9{=jSvP468?dF{zA7BRFDhgDL$hP7?suG`1kq54 z{JHzYE6QYS3g+_(5+WK$dqoUPnJAx_s0x5)?mtj|XqFXzA0FYbTmE99C@l32QAFPL zT}r?JbT>~juqO6wluFc&R`6j>eWPheX~e={Z=FFP8F!eig(j1RU`H>+8M?<$?k^w> z8v$)5lG%fFndF(P{wJ`rnMzmQ<|ZZ;pS(BQo97{EPTVceKE1=TgcAYRW$Dt~XmPx>=V`cL^)H+xXjX7k z62B3fk_S>@w4`B9Mon4_98CCV6aYLmPqr`>R&ZV3$$1W8F2)OSsF6~opfji0WN}o< z5Y_@C?Eoq)gGCgALV{>1t_JA?D<~jW+sodi+;u$%H#jd?mJC&uW&+bL?19#D6;qIM z4lZ_&Bx)h%y0}s;7I_ZYOR%&efSF()Yx_X}0Pk|YW+P=6LKM@DoW_L6Y-AY2Tz(-6 z1k$o=XW||K6BRJu-Yao>S93f})JXpT67!z|5?I(8zTmk30PGOv{{X4&f>NekX@WHV zXZ>Or>k+)Pdm^`}F*~LjjT~kDMIG)fYX0*a)l6hd5E3+eO>6Z8=I6>Fdv`6&;3RP8 zh;IJ?n5$LuAKCbZ>z{JNMcd4|xoHH#At{Q$)3P~4r^Tj4$o~K`I?@6>U~1Vmi+Vivc`B>>s0%fxj?F*H>) zHTq==yO#)BH$M7_0+6oE;9uP-0!XtaYgD|E6_<(`RaSJD+Z_vR#W%>^L<=xe1?P&J zvLzf9Yu?*3xF%xjEh$|F8XQOH;0YIiwmD@8Nx`_o^y&gh&>Rdpue?Pz6^V^rP3m0u z(Q?&fMfWAi$(#hg(XK6bWlT}#prLI93c>6^pg~}udB+e7+W_0+xK&}J%DNx`*mwro z!d3wk7=_jjUzv`H>m>=htw9!3hrICt8*}{uD1b;S8wK4#wBe2$sIUmOfE2pv2ZehB z$8bqgIBBbZt8%fpFkrwJXK=t+)q}siK|uv-qa*p0Tqh@|NCBe$|(V88y1Eh=rc7W6~`6gfc$)L9no(u*U4D#s4uvMz=ov|E#h*(u1* zNQGv^#ZD?|AZgqhjX5JbSvrDgY|BZ-By6FDckvJbZGI&}n7*Z{MMA1`O5lnKq5)yO z$}SzjF=~Xc{7YdN{*gUlmK{YoH5*e7Nki0Y?3POkh2>-1QO;-eIcX z8;ayY#t~L3^5bI^s|@}bN;Y4zPz8_k zC@6j6SvA(7dNX^7v@ch(Aj2mbWlK!++{wR@X1_Dhj=T7c7F6A2$EdCo%8O6LTCHK- z5cwc9CZf4(bk)n-5K1y|Ek0)1E-IJImI2!vv^SRES3X!-+h4`O493*IRm=AVl;dzN zx}*%b)z_5B44=%TCZ&E(y9}>noUrOj)UQbsLI}^jjva-?LO)Bgb zXpMk~+!!?h^IvGm+6;?vKt4pIZbMq0M7-oBfH{!$SX--cE7w^)3&&4$e}G|eiwnQA za_(f;4cOu4$$TDI<~3%_GY2Iuj6hphDwv+lZsf?Yz1(*}1gO}^AI!2G#A@t+vZ6wz zwGKx38;ONlLDs6kgTUFk(tjzOl&itLOYOSsg<4%=t9);WfhbckN@A7RdD{F_gE()5> z(CEI1aGDegZ)y2hgLhjHAC6hFOg+<)mZissDuc%a4GXJ%!4gqQ*>B$Br_`t+!F!ol z^J-{sRDh`f^-7)kO60#&7r>QowPVyur`}Z7Au*;#*;|V$9W7Lg+o^YG0b31Ne9b=#khZ(raD?EXFK*Fe zMA&E9U&dpIp(25$ik3rbuoO67xq7+RA|?#Fix4;h>Z!j_G)y7Ljh}<4%oIW^6e5n- zT*1I(UJjeC{>f%*N3#R6;7naBj+Gq!yJzU+QKdn;pOI0t&xj`HMCL8*Kig zi!#cw8(CRNwPNMaJ1v8*AUa&Eg68+1h&pLI&77AkgaU&X#1_+Nt%C*?k8Y8s?ZOzi zjEWpa(4gsyz9LKrx4vNQg)+O8AP>K&oJc(zDV_f)t}rVpMf^t?g*6g_u83Fl<>XNn6_f$V<;h1tL2jZAH zh6Q3Ssjq8!<8u(*I!{!W3NU*=ab&dNPwkDVdH}kAQm8~+n9ti%^RdgFL6El>$Uq5iqY-#@N~(!k)$s_wu^Wy*h!kKx;1JmWAUKE1^r~!Ko5ALI&A<&V{ zE}<|6bS=(BG~BjnLUMFx4nfLjl~Cxk*aAZGb8TVo$sm|dZq}|`Vl49o=r8{Oh|*V< z*;nO1a=^?5Tc-i!h-XaYPRo8tSre4VcYAvxth+|z(NfS`I0YOF!S|JwsIa^-^@tGK zSpY)axnGG+E3Cv$H!6mKwJ6cp`GX0)c_3u6@dB%py65cyvlc*E7JR=@9X6l2MP$rX zQBS#O{6@oo+z9A%a{c4tQ(HLVIA7*oD{&lzOqGAkZucA9ZDWNt+)(2l<+XC}My3>~ zt!FjVe-7#eN>jg5wb|P^bBSZUu@}3FYTvZ5c7En-znNyW{6Px8v{TdKVA#}9ZZ^O7 zQCnx^i{XUPVa>-~&zEf3p*T~s;L{E6qAoib3@_$A7FOkRLs^bEg3!CK z{UHggrvY8PN)iRN2W7J#c~o;)^k4-jumTHJ?kc#^xe}Tjt95l1h~OzBIDgV5P$)Te zU|{7G$Z<>b+lgcuRbXicu4VwBf{SYQm}>PzQLJ4rK2T6&SAhrf8g&ln;)U<;D2Oc0 zj0_v0mgBh*%Zjyr4^bkPP{G@9TNwce)u~ief9*>GXhdjqUt(*ph(}vi$azn&1ier< z+^~c|Uow>pr!>rj6{Z{E5N@f70t%*qoJ3pxQi!FOXsb@wh_UX%(X0lI>kOky2p4f6 zHU)2L(%UJLs!-i+!5K)}%2E^7frS?GK4pU0WjgyWqud&1qJoTqrQ!+@$rpl)%naN* z0)iR0#juWVAQ4QNI%8M=J;bQh&w@k)z8s{-G z?RX#5cB?ev=7dx8+#M=`LlKW(9E)WuN^<)Lbkb zJ;WMrb4&(5e^Tckc~3{os1c_b7t~Ooz8!qcs2rEWET|gw_=rv$2|#VAbWZ5X&d|o1 z22m;xYLL*6liI%XnlBZduT9In>0POagYYN4Yo{3D=?YZtq96Rk_+ zCMeVQDh%*&O#3ARg4qMnn5}CWIgM22PmW`g zN{ui6+(=*<;C~TxRhn=9+zm}K1^yykHt3?&>Ix0Y*@S<%DlIp@57a|4FAl0+Te7Ls zse74Tr4CHGU3!>R6!kE>*AjzxJ$r}=pNoKsQuB^r3{~=O7;ehva3|B4rCn}T&C3Sq zdxBp$s3)wC%q0O=H3lmMrn4?{ zj%|S1tNDdDOhS4ea7q&_imzp(=MuOwRt?o2oa&`(j0%Q#bbdw{Z7_{5+)@}9Mbxh? zUc>Vpped~A)TWEXW9oN?CZ!% zQVe8l#CHLIW)4QKa>2IB)6@e%-16+gYC?*TU9OY`IeAM8$suQ`#`rKOlz|UBc>)0^zA*<3QnSoSsdf0 zXRVodieBy=%onmBaV&FD8b!HnXHm+YeMHOtk!H2r9o{Mdkjz~ErW>m!n#|95lv?vG z=S14Lfx(t8Lv~!ZFX}e_BZI$)zw4QAR5_Pt%(O83hU&A-YNEG)$5FQlHs5FZLWv^e z;xhudDY>|$BQ*wrMYk{H;-iuXQd8Kt6h_bt-x-Bg4hNXvCx;Oa2WZy=G%)BFJQRrC zM{6~8haY&|XvGD;as~h$02zv^*kacGL?Wiw{{YFI7*}j?UE1mpy78=p1|VsmufZuZ zAGaH*0JJStuT>cb6~RLe%&>t{;fQISViwVzvaZ+6SD?T&&=}mhp<5U96%$R2Vw)F; z{h*aySB!fv*%fhN00SdH%dSaJ8MDx&+oPC(gEF_0hv%YDko%LMFL1)b!ooY`x2T5$ z09Q--vasv{q|;Z;^DJ6wNH%f6+<5>>6*yqZx`{{UheA>9GRjW+SA zd8P-6y!J%yh)ts3rC!C`iRWUNIP*5U~WhZS(SmT257O{ zf7%v$0OL)wSMDPbyQo018apY2S-9#V z6pHvin6zTcL7HzveZ_JzLlk7N8;;VXu?v-JO~KKvU@5=WWoBJFXSlHnF5lAUFp5Uv zlPrdprg@0PdMSeWinDtNkE~8{mp6Zu>(FEv%-t+f?=~2LTRT93j-!Y|5=e|)reUsNlsSVf(e7g`#=6A_y``jSDrk>W62o!cr=-y?2xot(TgIj; z%Pw7v>Q_B5ELB^u?mYp?b@Nde+M2)TsHz9(KNyq?LAo4nUT2k0)*vz2Ave5y${r!X zMe{FW0~1&2xN|Cq)om*J*$2Una<740Op01B1U?&v0MQ1Q+1dbdsdATJ)V^^Ra?b%R zv|dvf2mRD&t+pwP);NPX7a?dk=2Jl*1^0N3g(bqL6XmR~Ax$il(x1$wb>7jvO7n9V z7xfl{X6egN-a#uo#^9qvsdGnOU|vOfRG=SZri`1urHatucP}HRC7N?ERA|452*Z!z zm7G=b-enEY{-UcF0auc-+y!hsCP5hYxkA`u=k*dwDE=c!w)QR}Ed;K3fGO!sL{;eW zAE{KBI<8UsOTwdo{{ZYuMiT<)7eqj*4Cxq3oOPl+Ze~l4!vnjm<{3>kR3Ge=FQ6K; zeh2BM?3rjv^@74BSIH1tuh6nD}vuh2@%&E~c9EUt(NkQCnFs5GGiW~YM;F7oJAk@rhEHD z=Hh94i`U1IABW)S(8pI3JD%U(_qS2p=CE`~al+Ez!6gSMpQ3|dck8vCY5Ho9wWjHx9Bk?GrK8jbv0CBBzVfl@4B#F=9^&6S0nx}I1hSy1^ z6a^rOV(I??sIuUYz@r~;QRSIQZ|y3GDQ%%#;Xr*sMmH;MK{d_fdxflR){Ixos|ib0 z@WViQeanV8D5-?kn*7YL6%mFt7d1BL46fnj8!Odn7y)sZmpw!t;06ag8ZM5dt8)Uh ztSG3R5xF*QgybF$WdL2VWo4TC)UjM3hlnMB>HtGfhC5??xU74K=;azgdD)k)W;v{2 z8{|K68iD543PkUi$w;~ixHz>7B5oAhO}9WDaSJFyIC`=Kz!5`Km}#G$WZqv zBo;9j`V2dQ`Nl;Xtu75zywbW$7tOF^+($gcOapjq2XPXB-=kd&u7u>unkc&7;@-B@ z6k4LJu40l?1;Z8tgNt)=!Llokt0!j>>n^gcFsd0ZCZI_ox2Z{Lits6dpr$z-uA4p1 zj{ykd6_i4hfuh}jeLnJ)eORZ>7LCLG815MqdukPSwAgJ;gd=d(2*Hw=V4CzooW-B1 zECR)$6O|&|c4qKe&|m`AE(F79sl8TIhpA5d1sMyax$agYQdW#EhkU^ii4_>#r#E~; z!TaKXySMWf4Z{m(G6W4a(-yrb(A$`DE8$bXek9iAm&pMPxf{m#K8s~5V48v_ciKIhCDDNgw5G5Q1 z+f5GZ)WEPOm>K1v%|fUlv%KM7v{slGX-(akz9wo@XgLd&NV{F99gJH5E!boqUo(hO z#e?C16{6^2LS^{4hX7Rt$54^5X^LtE$Of~A^#)qRpuIlGw1LZ|C98HUR%>{cLX0Yk z4oJnbIxLjI;Iu!mjclQ$}D57GT<@NOW)l@aaM&YJr@&{E!#}xn~7e4xflrS{z-Y5p?tn$}-gM z_4t@jS<0$mlyE;OaQZi@anRJjcjvJK%^WFAI(PrMY_rP zfKjRG-Er`s(ge8hC zKFL_+z!kjkGY-QyWrw&W>q`!twjYa*3mq+K=uGnv*KttM*=NME8?vOes}*+^IuhQ1 z8>BE@#uzn)0UahB#cXM}aHuKMaCmAAfzk_eaOeO5v$wjAfZSSA2N-ov zIE^7o5off6jV1p8%=ZpzZ(T7-4X-RyuMJ`_Qc#-;ZjLPg7{UOcz1-QIL}W_Q1Mb^| zmp%&92c+CeodWr>c>e&>C6z28VE#fmQoDyIRJ!Dv2u?;5!GHIbroFVE5$<*l|`}sC4@outida#)kVJ2mQlp5njm1z ztYc?$BW7kawGg|55b&1e`^MaJ+&$b@>yL=K{lR$W5iK>D%l_hC!!`EYUCfHS^z|qp zU{cKY4HoO$K-EB3cQiCil--UGi(lZ>vYOr?Mer9l}sWm*AQMXnVx zyMzN!9d}WdHx`d+>9>1>z=Wt2pz@bb%o#?J0fvHQb5UU?Ljo{;hGRRCt3Y8b zrOYiBqm>+RZ4P>XU7AHzo2)qApwOWdwPMaJP2I}OO4SSYjY1_iV{Td%4bUQ~z&Ml0 z8wmt$#{peTKMKt(;BRoAU|=oTfTI+|3dY$mOh0f^3br&=FWp8vN@`LbuBhO^bz)kj z*rwG?LtawQ;;*~ZvDrJ7xCfju`hh8&jrO8$+JJT)?K0b^!hBY>~KUv&`O zDz1t+3;>@dC7SBAMOwW{t8Jr}G$#^@F=9i~K#CYWoZ=1L7O`Q_Ch}GYL2CP@Nq29^ zI`s*)bjKaqV^CTf&v$;MwT+r8srM4G?nkxiy21;xr+(7zj(aZ|wrnwQE?d;I^V3J+5UyJdNy1*@<9+ zmH~|LIj-gqx=lCxA+3j4jowF|=Av3~j&-_)!PVC=yL&bQ-blW^s4Df#Fj#5otJkEs zil#2^Wx{09U(7u%Jk^h)Y)IikkDSbn?cEgLQjU%3wpP-EL$ADZ29E~DAkd)TtR<3Q zOeb&w2Dx(vEw$>1p+c8h`^*a39i=wQ4s`**G;MV;z$3*#+cR9ohwL|S1Ze4ng`&8q zfsQ@f4Qt=by5McSIEtHF+bwKc?(kehP*CG!9B<&4VI>+7c42j0#&cemlj03f`6?=+ zL*f?7@7))s);n71Zu*=^A=bZi#2Q)sx^sTyQG0KWS_*s;3beUpbulX zX3{Be4dZIG#OJFJUpeL?hpS# zRpav$icho`%oxJnVCwAn=4Dv#GSZ?AQ_V{&FocY>+aw?6DCINRHo;pj^%7cY1^R<# zad@27#N$&5roLj7>x+#B3_z?nf0*IUA#T3$Ltme zqW5ugPxCN0z+Pf!7aN)dP%@edqERlVP6|F@xM~1k`Gx>pq3Q`!4tS1jC5cq^GrZLv zBW_v?k=eu|E|Z$SMxq&z8P7fXnW(6xLCqW&H91(e@0xlpsT4V2&1vuXO;B z1Px3pk)9cBMKGkSw%vabC>es66+keVxVr@~DSgVPaVMw%vpWd&x}Xb@qaT@VEs#dA z>657VR!{*B0|?=S3If7m&rYQvdREDAvic?nWEE63>~ez;HvnCfTL`k)v9VR!LimIV z)Zi~25hhJjp>Pe(V}erPEDizAVs|(Qw}HM|i4~&Ct+B8gtEd9uS_pajDT#80N?AQ) zpyod61eCi+LbMOW4~QwqZI&aRI2NXrSxz-Fk1IN+Y+`kYfTEI(YUOA30R#(P*}PF& z)2YM3$h5Al&BqEEQebQ>mWO^gDy$UKs47@=r8~8{E)i?U>;-T5M|!bo&HF0VE>v&_ zTFMg!`@}fcfC+B7#ygZSbgcUfyNx(-+t^%*e0!Ltw2BT|#j3e*_2e9@fQe6}s2121 zV@=77!^p9sOt=B-QpGNZ0;@GfE>bA%Q1%XbnS>qTQj19T+yreb1qH=$o0l#kZcX1N z1t?m98=}7W;sqjrF?P%ryvM>O8rp)g!mvc;PVu#VK)uTr#2BsRb7mqFDVtEimE$^% z#EJyA*y{S2tq?2)D!q5i!&>iUdnSqeGrTbhBWzYXE~ zhw-MBh0^yF!-0UKuZRqs(O~0N?(xJB9DzlC={5dpQq{-2#1Z?K>nu$eQn!EjgisO| zS?L&V2eXgK9*Ifnn2)F~YfNc*714M1Wm~P1&&d~(^sJBMnle)ka$IpsQH$%`DYUL~ zl;GIAiVIQGsH;iRQOkEK)cY8So6k|2UD&asB_NK>xiNK5dWsud8em;HIbe&!=Oney zSxtT>wO`yDy|ka)E{j-zs4#WM#4w_PzH99fTT)~k-{v7_*n0H_mL7&T>Ijw#hq;v< z9TJdUh}-x}2|&h+fSzsPbV`Z{Xk5AZ;ul!DcrmaTV_}S-{i;+1Ql?~eo7}r1pw-C$M#{ph>@XiH4Jn&0`_hs>UQ)VGs>sKupLVxHRym1Nj1qP$&Sv!oWKMK&apy z3{vvFZ{F&Oxb;AkMph2aJUnpfA+#LGEE4>2VDmUIF|yFWj`^jFTTbU74xK)l5)I=} zuVI}0X;X`s;2=yCjlrachL|bgbg)VoS_n1Nj~)_WrsU~C);3bIFc&mcv~jWaSn6tv z2@9e#BQUO>R!$Dq7$t38UCXerAR5LxG&n3Wg2vF*wehgQxH>twdtiVtU0vISN*JZU zh=?#_UES#DXdMbnu0stCh6$Ovu8hzy8Y3ds2}soj3_5-heo7#|(P*Zm3qbwo)ChAy z0n;_KSaTp^OjsC$9ulGBN(rEmLm9yo;B~eSWzge7Ln0_aZZxK;E=&*D#@MIlkDyc6 z&?0oG3>qaOl)>c@Fl9yn@c}z?O|5hM@|B?c^Qz=29kNDrF zJU?V>ywd?%^LL*!-oO0URAw<42kAg<{uho|(`0R2b^ac&{srR|w}5|WpZ{CNtY2hr zT!;Sde&C|unm7M+_rr|z^%%8!!zjQCUquh`4_!5C$^3Hz*A%nV(rk=HWj0~%Nm4`L~k~&;&Z!&f3mmL2@BS74P{2S zQyKIy(4|kTb^Nvk|Mz>`-(?Zj*0F?yP_%<+5n$nIO45GcY5lbBF)r=LHKku?{`WEb zu3Oa8hF3sv9yqW#NCZ9Ozp7jOY2yChRV~jD%711={~w@Zzsc(_y2k(G!}>3l?|$1U z{6~iMiGE{podW2;aa{i&rocaD_7@ubi&6X+;Qw`l`~P?i4h!@9zc9f6Dw~rAc~5tY z)8B(Uyvy+~8RW-IKucE#u&x5{`*A1x<8}}htAhvAtO;Z9ccvuRev1NAKBrLXnh8Pv zlprQe7v9_Y9cx5v*d)Vs`rRk6u{YMIdvMk&CM9cp#p8Ez{G3g$?f7FZeBI`8Rf?;a&u^^%h?b$7v${S_Hg!fV;~fGb9TBuGWO=|JJ09fL?#$5SkUN>G`xKeLGWI+0*6v&Y8W-h2@7ys;2=i11UX@lQkX|o zj1v+ZPdS2!p8<+5u=bpS=r+dJO}O#TrQ112ckUz;mG_1!VuVi zhrUnypkBe~X;I(*J2+0s@WZkpIIkezNYdzUtP~XhbhH#l%V!Q8L@fc%Xnx=z#A5`G z1F(Qc9Ku34NDm?acNI8_Km!L3{2)3M0*)6%gAfxOFW|%i+^Nqb-GC**5~n_s2*wd( zNruBAkwHP=1uG(-Z)jwQAJfHmH5G)$_}r)wI1u6-UGM-0DS|>n0zjDaIMMtgCWoye zLW4)cqsed!2pq$6GRembqEl(i#X(L?z>b&_4=)D?z%#)Q%?UWzOp=WbV1!17O#$(N z^8*3&5L!qieB?sN)*Y4(c1{5dgoP=Q5utXp5E=vYdvKG2JU~Y_Ml3i=3`1ayLvR2F zy#C$!M@2G%JZ!x@KvZLe3m5)Wh%+;QHU+{*35xKb1WbX6P-%dV78BvXwD)j!@(m3Q zf(7z(!BdC@0z(;bmO=CYZb^xbW*!{B7zG1Pv>(l%5*Y;Rm_QWR;+lpWUf$<`r;^X` z4X_Rk3S~?xT=7x)R(9hEzyd7{4S~yAAR;u(B{G6Zo2)p3K|qmyf(rSDMgWES2|fc< zao~^Soc0JG7#da8S)8yUCmai01YADSkR@nTq2SyO4Z=XKpqas^c0xhpf_-5CW(!XA z(7*{E8fbVC01iQNf0+jZ;lW8DEF3AP<%_a`7edH^qbPI-H?kY>i@~Y046%VDcn5wz zH%AoAV@Y&bwPEr_&kjKLIlg z6FtO{A{Xq>paUP=Ax$cm(H6t0)zSVF&FM!$y?%dAct3V_DTJv*fzN$$jxNPe!gS%& zO%OOf6-I&24Pks~pl>i!eS7JuDu(W7rn*Gm8S5NoO$(&k$1!N`aSJ`DacihVKUMfN zl?6wXHV~ujPY(jCS4<3zNi|clcH6URWTfr zh&5)aUe2zV2+&B^&?CV4Gb0_mww|6A#-9O}1fxS4Yrr8aeN_-6!_VK?&4xTC5QNNB zCmqU)*3$`P1nA<3M4~PhuZzcP0}5?sEI0xaqaDIj2JvwcLiZYHn^GQhFHUiQhy*d5 zsBA!X-~~fqTw*Ao>yI!~jf|xG854c6M53V)O`D*HH_*o6{HWT#R6{>)3c-ki_cy}h z2~>irAZ9E&DuX$Fd{mG-21T1eiPi?KJpvrGU~&_H!I%Oz<1x$DoB;2>Oa=hq90E5= zG?^YmgO^Ut9h~h}8R{G2b*$aM;VGDUGM3A+BoM4>T2X>1Ayk^VB@^Qg4gii)Pr-1> zJ!rweZly#-GHB)mqW)MiCPT+5!Py&gO|VD~$Ls+IxER}*uuvu}0IW8R2^a@)Y1{*W zZbUQ9^+)-+K`z>g)1!sZm`rm`ZXzbZxMbGgupEQJ1nIz!2^xoRN!;PQaE?U5hpphW zPJ)aR1yUGcoY=T>K!U~~TpFjyV0s8#itfRop%H=b>AEq2(_pwvoDP3sD4hxR7X2cr zux6QaqnHji&KJlC1!n^3R7+nPIBo~?xpAYjo(}gLMyua2T8&rQVt6ssQ6Fm5GvpE6ak}RhCGB}NIOwxFm zOJEQ9fiV&o0oM9LfvpkCmGv`XoF$Srx}gi7-~~lF&haCBS_T)8o`CU+0Yxz(YYa6l z+fra+g+@;s)fj48HcmB6%QcFbmdP?ak}@q12Qe)RTtm~ca1hh7xJEL-vEFH!#!%C; zIfJ7DV2qiTkBj3nPUy@;Ay2BXU!i};KDGL$lkh_=PDe7eGJiwyyOd0++UaCWt>Nh? zCRg+?@xM#MC3YUZ{W_;9`Rxy5o{SEU}wU~zg z2d$WfVyaU7n&3C7n4%KXNSLY-(-2Hnh+m<96aQp&n1+3dHcW$`stms-_)QA9^*p8u z)5zdbaD}*oRk8?=&=6o!j1H`mMyF|Uzhs=yJ8tLn6aOTVX~c{VInyU$3i@~KlVagE ziHS^(OPNG9jWDj!`m+EohRftifhP{&#sigWM~?CQjQE+whQe6GKYn0z` z%(kB3|ABxj0T|!#T8T%f9k?OF1c!oY=45z9ebfS+2Fqmx%1^V7WJHZlY@BI+^vGav zIcL*4yXhy`FlN$>8V(x6SM#{jYAhZPwxWIl!__ke9G$p& z(82T?r)vNz;%E3cwR>PBe1yjxtfBfXroh&xJ`rnRM8xUhu$*U%`)9gw5#)uD!C-=C zj>qeA6UGIN(^!J}I6NI6jRJ@_GBVKnA&RLqdSG1@<#;oXwdMGqq$0<6J+XCYWfTQo&H{9O?&ZbS$6FlY!%;DdW&!H(H1vjWIf5;}qZz;Bj(pt~jaqvEDeqandR4I9$>xz;RM{Dp>xv zri8)z1g}rS!yYFYKOx3hIGJ$;%SSXXaK$4uD3Y^=LC`ZW0y?gXBjC72G(F)oa+Xe# zgD2vET3~gF1kkZ@QZgZCGTk&{CZu?V&?C%$=Kq0UT!bqv%)| z5jB-(=>!kXV7v)%cqXC7c{uAk?qH#nX0FYxmPxR2x`kkQCyEBNo(2}OK)HgxoPZ@7 zU^y;MOV1F8A9e8@$f&Ca;QF{x8iE$gWyo=jwDj}{dH@1k03jIZV>vFKa2yw zYvJ{@@B}Tqz82m<3vZ|e5~qhXv9ThMaW;5E14}(yyp65Cz9oTRWu;Fru*TvniTYr% zlcS?kYHYk79o$_wV}To}Pq4K6n=xJ=R-RuEsGK;akv2L=fvcp8oVEXe1wn}fdlS>`kiezHF(3eiE~hL_fzQ|-3<#8< zv9TJ5#bXVz1R@UDnLi=nyud&(C@|r(&YWQZgTw0U;xJfUEc_eg8Yh^{VQx#t6SM(! za4^PSm*9kPaL0JMJ5O-Hwabz35DeC!xW)tMT;Mn-!?<)DWw8dg+(CLctH|b@ffFYG z88yyCX9P!6!1_IWvmJEr9BMA?-*4ZAP1@#}vR?xbpmOxaDn?OT8v`K5K($~i1Vd+H zz~xm6ljeuf*5(uxm%=xi{UpQmIysJ>WZ90xj5z}er*#2! zoDK|E>IB@u+IoDl#Q7eCo1GO#4fLi)>XX?gkxk{d2Om5L1uN8(iMgP`UQ{EUWxeHS!}$Bce6gGJ!1> z2S!3eFb)E901t+8eK0WV>*0VOz`+2I2Lr4g7MKKJ+|p{HeF7MvjjSy3WIWNx*47G-!&+J!;A||dfXO(P;wdTn_iGQ> zou0mh0mLNT0U@|gq5H?e{l(;23myxmKgPK68PE@uaEZg9(eWQ1RVRhGNKRiw`%yBE zXsnMnhHqGm&aGg^Nt9e>FbkphQ6eZmvQL|^$+TPn9GT!~3fOr!xBS)jVEjQJ=uDx4 z9bNFD7%lEsR^ZRXjOJ*v5LhtW&B6&D{fx=G-LV?IUyTae9x( zY6R*XH&$zYRAZphU^m^I4qHvStHWsE3l|g6>3g2hQ6C&W0mo2u$B(wacE!K{`8$%o zRK|Z7*WbnUmrCF-5&x}Se;3zZDuKU5{I_=fU0i>u1pX57-`e$eas8zd_)ElpYuDe! z^_NQEFA@K(U4IwXUn+sWMEtjQ{eN3r;35+D`Vu%zVWt`lE+>6|fh2)Vi&d^}E@THM zTh8q^B-YZ#$`%Q(Oa+63Wbj6Z*HUi`x&d61;#>=ZAPSWkX6fn*e@PnxAJFF9e1!cI z&xZ%2*Q}bgVObOKf66CF4P(F;2)}|K-VfX@0vFw|z`rIsA`HM0IlwRJyN2UG4f`1$ zZq@)^4g4YjqyBra-*?pC3Huo!6M$w2rVrrwk?^H4N#9Yw9PEz(7a_qLvJMT4tR&f;37`> zB4*v1fK5b11xEtMLI|WD1pTA%gp3?%2y)2>Hy^)FzzDk_h^+-dq8Ssg`QRq6m@Wie z$@$(7iE#1_`H?`Ji0@AzYY2%%qL3&aB$9`h2gSq7#|s`lel+~>&j6o#0MCrEM`*eS z7J>lx*3mp@VKiD;R9IM8R8#~!qM{t~v6s+jXgUc1_PqiU=jSm(vrq_e2q}(0i6g#O zLvukIc@dn4TVM!~R9-$bzkuKjKyXeBLV~!FJSbjX_&e)}^#Bj?i1W@=#98u5ETW*5 z!X@$XsfYNLt%@t9-0r?p(eq_&5)hmKX)n14ARCv9*mY+0Nd<(cQyy z@e)vYRB$;qAdtSA84(#39TOY3dCS&>ZQFMwrls%6*t;(?EBo+~y!?Wr#|n?1Ia_k> z{Dso8i`S~Euh-Pp)!%4pzIXq@!$*%>p1`ypST5D-WnP#*9oZttXg z8FvL|sSuvedk<%gle2#=W1Id-g&uKnL(md z9Cs3_a?X5HS;W5Ot$SJo>%3x%Z<~{V+T|B#($$scM0S|nwze(sZI$@6m?nJ&*O^W7 zTP{(58$~7@%{3lr7WbNYS>jV8&#~4<-jvuE@khMxy@T>9v)>PWC{SMflvVN88F4A3 zYQ(d^@`T(M+~(UW>WhOziyxfGT&$!0sYBQ$XL;UjTuMNZXQif8G}h>ttX554(&-ac z)ZH>{>Rpz6poEQ^qe;#j**W+E6`cBmGgOUI4Q$*;w#YJ%ZKWr@33j||XNeLEt+A@o zb#K4+#HVB4wiIGDqdW3(^Ub_a*M$zZ7{uz!@;9H~Kn_G5InzCN>wI(oMNB0ipTK(K zbKWgW>I`{_@?J!a+#;Vcx4;a`!oU-Ic&x+t;s@tAZ27u+hkj9kkiiA-yn33+4x1oS zPp{k4gq_)I_qkQP&n`9DOul#;(;3<0ElxdfPup-oWp7Jy+P%Aa^HP+>b9w!5wA#eS z)_Q9x$+8ZG*UB|fZDZ$&b<|6%7R_I@VMf6hT=ySR4zFy_5qH*Ts>|G2J!1}oY^H|v zYVZw2sD@R|xaW%Mll8YZ&E}~u@GMn1E?i%`@~XG=jd!h*!RcX7Tfv>F{hSFfrr zC|@P4l!S~+3?kFIynGmz9oai1lU1wvb+jKjq}-^2KAzkqGWW|ITGE0GQSZVx_q~|$m=`PY@^0uM~04lNS>?EvDRE>Hndy1cS-5?Cp^@$E*3^5@@pWZGT;n( zTBz6edTikjzZdXu?wtglvM1jN2|5lKiRO_;)L<@&ZT{{(Yxb( zRD94vE~qA!)=i!MZC_vHEAD;scn|NEb*(cs{NiP!nHxGa2Xm0#N@59M2Fl*mp`-N7a3QU?8&DeAJ{=Coei~4QdS*KQ<7FX1}QLFONRPfqTSIUp6EE20-`Rv=}Md6Qj`n#;JO=?uk zkJ?pM(cP9Q-tl>kv@oXKkC_+^Evk9G``guXvmp&MlxyP868mFi_1Z;i5gIk33t0nZ zbc0#KS<37NM_``)(Kxpzg%7Gj9nE(`R62A?ASMV-%!C8yVF9st<8ue0oBk~I8v7AzFN6-lGg>P zV#-!@wB&NS#QOA`pWV?4Irmzliv3&ehREWPd}OsC`ttttis+egEgJ?k1Unhb<=>u0 z>VI(h@D>##@x?$~ht0nAHP=|wa(TuHrkTj`h%%RzXPb^V=i4pJS)%7(>mp=jk>Vzf zgTkHo<&4+1+pm?H@!Dkq}x_U6*q)s=`i^E`D@>cdLP~4@XGN}1S77Y(*BLll`CZj zQmP~z#CGz~$c`DNokP9eRWebjIj7G%=i(@NPao&SWxULLU-3N2&0z*lP!w9~QCIFh z;vVn&xjWijP(2$o2P0RkFIc5=yabYboALRQU(~6%;iqOw!Q`~ulV5h)oK0@KuH+GT zR}zvNWEuUTu<*@LYS%Ndbr!RV=Uf)NvN`~9(ePo*g+uNcSsvT)=DhD$vLbeFNn$je z)j_{IZB$z}zx*Pz%k+54%K&8+K7+uQvMU@G^Z0DC*sHmcimMNpUx{<`D0Zz5Kj^5V zDgP|tio)wTPoEwe$eYz2BQ2Lr8@}^?%Mc>;Ck#4PwIPHSbCuf zGJMj^7MAJ$>s_ywKUr|J)Qh_AM)h|{pl?~z`3rgnMihkKi@H6G)ZDW7n(7KO$*n2a zCzsO%lzXm6Q#vHiwZ1&r`Qg#4%kzqApPMjwOBboIOHRqM!fP~*OP-Qf5C@cV-#@&* zET49v*>j-Iz1+VjizP{>4t7zCBB4DWCn}=e{#` zm{um#sQDy)R(^IPez*5dsc`I3fw%U;y>_mbNY__q3Egc^Yz~)kw>nKAc-(m2q(>n8iH5jz^*-ncRC|jtG#b>+cob^Ba(yMS@e{)8k`z;f(`ojLM zZMcEV*&i$GrS{X5cU{Spd%+?WcK!)QQn^8AZBm|{zK@LAE95nt3e&Bk>B2gu8`>d2 z2fIEHRodJsBiBrd3cr0Gj6Ua`>Wb#o{^7m1CQ)y>=q0yKH`~a4==nR7>oWQSOUvwe zd)!m#>LOMCWrJZ}FOt`6T5K2;^0o9D6=k-@{-%}6F3XM5pN+Gx_y+m3tvbytNxb8x zt(4^W(T&C2+;$|&z474+v;DFj!@b$fDan+8ruSL0{qZA>?Sghjy)r5aqUC-!)$7Bk zpO@sgmEL-sbK!OyOGS7q8?r|L%ZJ}fA-0#)k8H15Ajq?-q%=ugyWVur%7>Y~wSK8- zHRhlV4OcNzm*3B560=p z?uyVL_Bv6?cF0VrcWaq#Ea~si)4AR}_iuD3W&24Th-rxP@zm^j*2L1ZSZSf>%)e8n z^TS&Y9?@s#AVPR;XCTs0rq`K&8!uxc!h@&W?&!G%2$Blw*}cXRL`C;Yvp_^uj!$$R z-cmfoHK2ziY9Ns@Gu98)m@S#&we!s>L|sdG<9nAZ==yF|Rk_?FEeEQDktx*$I?JSu zP9|!alvkqWxqqql3{vvUw6ff~qt-o_+2@AT(^9<^HE*|xo&0)dvkGck-d6AD=C-e( z>-u7)RpF>jr%$zh7&?5Lw^}shq#-W!tz3uX()h!F9Ch5VSnCFJFygC5q(TC%E5CED zj%lpl&|6RGR_9EKr}f4u9RiPXZ39ycv7I5+BllCD-Uum`f%=Y%3#>F08fH5=Q47LJ zL4?g8UE)q`r@I*`AN~B+o{!2Cush^l#qKqz+=IIyY=T_ew~`8f2G+86!ybO>d`lFO z&3|5OYq^;-q1t2M{O+tXE^&thPInGgRD2CY8Z=nevu$iQZeiIqW%4zw8q6jUPHk{c z#yO#GcBq5{+gYSZeY@4Am|9Dcxb&wANd&@`ufJ@V%_pVGTilfGLl6p!H9EwS6Z7y- zfn;i8YGvLotT2ncDT1qgX^jZOx(wu@5U-aMVQ0(6$jE#xw)WBZBjnl5Ui%qp#^UkA zLm$}!ozfNtu|s(Y*Ts`}Jz$*{zauOCfxTF|!>FIm+8Uk~V}1|1R_@YHWb>tx5Y|b9 ziBL!*+VllW3|eT}ef5(og5`4a&c+PL276iI>J64mQa5U@w-4bI87=8$jc8f>O)2xF zGSU*YJ0BIeGZ6jpKzQREUJAbk6yoq_pxCuT>o4XK8!j}lq~g9=%e-LCk+^~b%Hp9s zFTA!0D~Wj>J1m*N>+!Xf1!jJ{xc8gWZ$k>M-*h(Y;oX7siI4x(#j-k9YyOxWXpnwy z?VuA{ty`}9a}$pRik*j_UGcf0Il1i649X3>2!e;%5~uI z8!5ORcMD64h$HlYNOV&d(U?+ayeZW|ANO4EBzur&?KuVhH*W;ZXjccV)A`dYTehur-{{Z zU--4>U^*S9RCs zOr4$StVNA;<1Vap_U=6HV3K97{K@6Wr!@Ct!saGxpLU+DW}~}L=voh-IJ#pG;g!=X z@`@QFODg|VUT|(%^tmMaUFFL{91U=(xnI9STh)F2Mv@6`cHu{2+^TF5!5zHiF5WlX z8LfA1l}mPHggLTS^Wmd}aJ%y%+t4s&lU18rSjv~Pyd+v((TatRQ3ht}Y}13+=lprD zsQ7%2RBDwR&I}#*I^X#`m6&(VJnX&Uj<#1jWoI*kXZEi@z&~Vu|5bB-@X{)`{2}tj z1btznr~92(1e9jm3@YzFa12da8~v4je_@MYPR6kL@um&@MJ<-mk(xqZZ_k#l{Hl3- zulkTl2G4r7l5&cs$!tcD-1bK|hY!W)3`m)*UZ$?t&L`L0O6EIsj=2Z80%d$<+aABz!gss;&Nsd6y#58`Kl6@n?kY-GOirzm zuSt=5SteN8ps;8EX%$LqYi{eDJ5D7@OI20N9c+mOEl1_)h^=N1WQ!om3P*q837FKxDO*~b2=I!42(g{t?X%v=F+Hg)gJ`Q7f+g>*6F^?<%8!Z*Z_&oF~`P%xN z2Rl-IlTJOZ>v3D^*%|cZOB3Soa#x<2%jNu%M6R)v@NX;G0){EXc0nkn+y}YYwxaRE zWj~&G&ThV^dFW4wo!N^^Z?9Q@y0*04eEsTo}^8C-dYOnT7H@Wzt#8ox3JKt?rNq`iuSe-%6 zK}RRv#g!k~NaymAW|Z;L4*>yjBoEJ-10Ck~Dth_|8%r#&U`b}*p?pC@i72J@^7|5; zYt86h0s1fG=S#OQ?O1U(KrW2G-~el|Q2YobXSnO6mci2Gr-do%hnFeay>h^Gv7GlR zuRm&(=cfI6WtgnJe9v;*V;zC6+iL_mQr+-t*G4T$tq0>lG(zP(9nrA7izO?6M76Ep zX~l!{#c7^+vdG=*7{a{fl~1iD2E!}bn^5_Ugl@|Zn~tWY=GJ7Bq87QR?)wzk+^ox%)wf<+tB_ToZ1{!vD78kfwuxm>MBw)$J=F3@e-y=@VSGQ^n0z`(L-<5I zNp6439u;gCORt-?`Hh)+TSb6ziqUOX?@mRp$m>{4N}Q|E$*LTMp?*t&g=H@?6Z^O9 z-Um;I#eM#`V(ib-#J+v@_1m7tEL42GsV8*Jh|MSG!*oW7cdHDjw_1r*FzwOD%o^lh zAs*GfQbUlLuS^>Gww`;Kb}9VfmDS#*{mTvG>z*C_cFuVl<2&@I>7{9XWo=MXnWG`L zU#t+5QreDKyj=q+mL@7sEKsay50*hah)=@flXOj~1n9Kmu_yT}KE0lk!24u>rEcqr zBXgr=B=-c(#;IiPPKkV*ShAIIM(9I*ff9QCWuL;D*aDQy{XL<)#dmlikJO9D5AGXj zo_FTNA&gY}mqrKCy>S6XpylxdZR3fOFKp!#Lv-gu^IJFXc7)a-%|=}3lReS|3KaRf z&9;TU2kRa3pWj}GY^XI}x#bt#OZnZ)I!9c2oJ6125vmvacNqoTU+nzUwk_gq!i8`o?%J#^9J`r`OFH(km>AaKf6G zj@350A|)%Iw#9oL@D=`Or#f)BLotGqBasai#9+j0^Krt;#huAHu1Iyc)MuO25Rc5r zF?}SV!1qR5Jy9wn#H-3Gtu(vkn?H$ei-u)8ongq*mS4Bp>@Ht1!(ng;G7K2Dml zUuuh>6$2mTPQM}+pou3Rn+{a83vaJZPwGh2;bSS^d{kxXn<7&`LwN`EHXFJ-C=_Jq z%hH+^TPJ)2BydKj1~U<&iV^!r!ZQOllVm=s-tu|+@N;8AszY8to$ArmzQhBo`%Tmo zVz&z>I?O+g>xzx^mU|WjiiElnG{^q{QAa?nn~sysqPQz$^N; z^3YkA6{l4jeJ|_XGYjyYyFWjo#21%eaqT^+u8EnGt)n^1d*i;gWS`=lk!6Em-8=Da zjb%?$nhfL7=Pk$3$xM&TtV2TUx(Wr-TO(A43hK!!+xd0uoU(5pzMHQ7c)L%|S`Vhw z4aUQd32wHQb|$9rrQf09W|aONBN;ZN>*R{;t0h3?eCyY`@=)IAxbob@$-hD^Zu=OB zGWtqK9FLSJ5gH_US;jrpv#mJ(aj9t|Z&Ybbxa~IITZZ$FiC?9Kp=Aot*77$x^w(8; zIs9=Nn~+Qy*yCKeVf8Y#LenSP%nA+oB+vE*iDc#RF70k5_VkdXXY2V4tS^kuAY{p? zCPFuv*~Pd#RC75me{sL5tM*NG@lNsU^DC}O%6zsjL=G*!hbR)hdMpoZ>AT+x)y6X3 zTGMj(HBYD-6rGnTe)~emJ0n8wCXG;60WCdy|K)>1lCPhl&ta5zRmf$F&HS80z0i~? z#Frwv^j#oou}qz-dMn!WZ4W^Wa3b76<(yz)a;YJAaXAu@OsSc zo97qeJhBXMr?x*UyXdjU|JIY*n=LF2)P-!4v32TOu&1D^+Q!oDc_me>cB2tZS77hm zab7Fnl*YZ23zmqzUSJ3zvgJU9;C+NZxfEiB-RC{7*7Rp0S? ziSp11r?goMjid8;m+%OQ{3(o+qM=or&k?F`R13ZTv_i3NLgOQMXqs{bX9Inw(lI* z_?$)I!WzcZoJC>MNt7;2VExa{}bzB@PE%17BQe)GfJ z^=hSFMJnqy-FHYM{9!88*OM5H*h&`o`bu1(@yfTZ_+9nTmz+e%Iw!;o%&4(^v3G1C ztEv#M$hS^{`C(vMTTNaP|4_Lc!tN@MMQ?V7G$bB2%Zc1$Wi3G=St_2wmB3^$x?X1A zpqz-T-XXAj)@ya46rJ@~_8=(KZq-9?pL|UuIcUXDl7IxMmmpelXizA17N#Hy8u3>sPag9o7UgHfbODf`1=IHSHmURZ?e!EwVAw%kt zP#=5fP9Q>1PGRFpHH2V0AI~6|wGn0C*K-?EUoQT&{1xJw?w*c8HoC-y;c{Va6H9R*-pqWJBlNUsC?2bKOQbSK zF0v!vrohA3HBC?P<$Bf$l`O?O0_`92@YmQwZyyp^SCK*?!-YY4LFCUywNlzr%tLo+ zPt@w~bR^ygY|{EzH2>vH%w?e^62^=2=QV1U#i8tH?7d(O9c*Yz;7iG{&-W3#A&M%3 zYz81=Zx2bbjhQ3HbPC+OAy7ivvR@5Rao)H)5%Q{ZbufFSF1FmEHIki{ia5RV0ZX-{ z*{0}A)paO()@iLkWRxT;cOhROa?eAQH0aa}^@8O#5QOUJXH)3gO&{#$UE9caYvyd% zz9cu~Dm}Tv8Z~776^$%OgnM6t6+(W!+Uc9`pzgp|>jTBlXdm&cm-$%0r+>d#JF~{l zn`9Y^bz4*;N+HdDnJJ!p4`CGmZCK~ZqtPxjM5wsE*XLH$HxJ%hmrmSg&8$toKC9GV z-G%oHYGzCDHDlZ=X&M!22#g;?v+3I11@1e=-46|>y*k?FHQfv$R!>~n0c*pAN znvup~B?sO%{>fKd>W-|w8h4r5WTtrPJQD5Q(m9Z#|Cah-=QedyLzE0*{``~6XG2Nu zDmK;I(D_*Tb7I*LPa?Yy0y}~(a;4pc1+0jD8XFeN9B!vQUGP%b(8Y0wiLhplaNl#^ z@LsQMxuLVO%wh^W6L;(*uJg>x9(f%=9A2NDwX>f+*DWo0Ca-!{vuiCb3Imh%gKTN!h_bf${UJGudH zW>I}-Q%HMYZEzoHj_c!Y9$+`+&9YNYBn4IZc?_r_UtOsDOpiY*>9?!2V9SkAS>?{% zdsA*iFQJB1-gEPzn7(OM*aKZVDOwJhiWvH{qMR@AIGDB1mhrBYf>ca49*BCg52Rn~xMM&<5(gbXt}?j%6nCFT=< zX_&CTRAk_D$6y}v43-B~$L4{CS3`T%PBVz0@1<9lz9Gpq^5tI)IJmJUzV%_UX_NTT zfP!nw?vw>3u_WcdWN`6!$SH81cv@8MpJj($2^{#g`KUu^@Rw`o=JGWQb!r&2XNGCA zN6)z?-Q2oFf9AbB_b)^!wW*-WsZeE6T{QNNs8U8EK|A<`wAK;my{F^?+WCP#0oGFduKIBtZTX=lkDQScj*BX*4&3E^VV%X?b+&GrN?TF!)$ zL`d92DQR;~6rq|_-}~0Kf=ZQ(=yT$~>Wue~j6)b)y$tj55 z&K-hYs+uMTB9hCx(SwH&v#!fD5UR0B>o?{ji)X0SY}DYnE50(XQ86AejqH9`@QA-% zybg>$VnWJB{jo<+i+AJ*`pj>uEka6rB%8RCYBuV9eI@2IY=(RI;6TOpWA3T79oC4G zW%3tYQ8LWoTE0xNpf(b*a`-zW$fLL|*9e>hSQJ()Ygb80YTR;H0Abm({#%BXlB*>o z{wdp6Su=SdK88)r^yxS4$VXx{>*bjwsSi<$5`CqqEqFfq*6oRYo$u5TU+{XlnQVcX zrU!dT5=!mKW<5d&Z>pw)4t;gOhWFi9n=)rD5~%2X+vkw9?}oq0+OL!_z~0g+BFBU8Jlps8zkooBTw7#$$Dv37V>rQPdd_; zdhl}GhZ9yx=@v1=(lx+D*U74vuDFg=qSdJkOZM|D<2UMnu^I(9DKp%sw2mAP9C=35CA zBrgkw!Y8c}Y$yqFiOA*^NFT^mLpqn4cCl1kQDLBxGb4!gy~Awu_M|(-rw|tE4dsdl z4kldIrx&ggHt{MQNVBhB;v^^M=U-gtnIA#tpa15TS+v9E1*Kj=-Lu7|?hLD_)t9axnXNhqk_>mk6aK3)BGHtKNkm1<}I&J^~Ujl;b}yTb5& z*6Q_paxZtCOx+xAVp-Won(c`?4jDC=5AC00Tlb>&#*u+SnP7JmGu-Xb?PbuSs^q5{ zD$8A*oAhVe&osQiS9TN?Sl8F`TxhMe2$^B>z<{9l(8FuHRovS9jKnV111Wb|*6PJG zvZEee@fV>Bl{O``E2zmhc6shvFc2u7MbW%-%UX`F{X;=xat4)u|C1uc)Y-xZR}0E3 z`#@?u{&fk~EVK8PDvMuTf49V_i)FmV$f%7hLd@f9B_(YrsmNX~e(o3w*(sOa{evu0{nZVn5Ss;LU8>KYn8 z{G91%I56@dPkAYA=@P+>-afR3u;Bf~&veB8d992C&#Kjs5>Xp~DD`ec)c-2h4jsGiV!A6f!VzIY>MSg?7@0Pn;whsY zN77Qh5rQ;lEBT{xOPW>w(0XGWZs{PE{pOFjT%Y3AvM1Z;(9`ako;`JI^X7$4Gl{!g z-0{L0`=iyB_onWg>us%$Z&ve17_nu{uWNYZ21?akz8u+0x|y= zk+ypXjiUu>NY^8W+T$8|ckVKn&&n+B5`S=@MEs7O&vA!6L-M@#w+e3*))^`6LFC?$ zDSp(*N?4$;su9;LpD3}6e?!ROc(G0Pb!>=sWf*e28gYWLR)RD`Tn761mNW+^>aw8( zQ51Sd%_qdW_7XA;b?nStWqeU@n!WUlC%xWe!+B@f!TR$n_K1`f$%WY7wld9(`a@b; zYOSJNM_H?_?+v-Tnu86JZv=L#K-HdcBX@nAt}k#qX>-(~>Fl|kWpU4?m0|;A?F*{6 zFSV^Ye%5F6ZL>#aGYnBT6_1QW9(rYTR>CdI3Ts)i+i`EDoYt9{E@pJ4G`+5MLYr?x zwbts&;jhgCrEYGZQxeRM&Cv_-N2TbIviA1nCa^S2{DSYSPLWDX{?xGAC-IIUsn!G;Vc9OX)?Hj^JAXy3MG-{ed(-zhyw<5%TvlhHUTryn$ED(90S~YJmn--9 zZ4nzNBh4})Ch1}o&_Q>{iWQsQvov28>NYFoA8IYxer8viQsKyp6si8bE00;RJ2pEb zvYB;3BR==}H-{{A#wu%wqVi{pRc>zF;PKXHUJZI>$#OoaTC?@90(nd>ra#D(Y*h#! zX;eZAe7V{UW;QZk*rL}m`Ca2LUHE(*($#HP7a$3}>R7BA{-oa)GWPNq$QtPwSrn$> zAih#PoYIxUdCx)qhmDEV93-r zQ#_+~WeLC4W$Mv#1O=Bo`=}#iz*yEp^4fKH?%J#8aKb1#k*ppkXj6>EzH`tLAD2~4 znNsqQ?4I_nY`+rQmmfY<91TYb4a=Yo9oi(dL{;0iQmU?Y-LS%UXctc0Cqgc_L@4A| zgtR2Tuj)Lq$Xa*AVl0Ea9?a7CFYX2{PTerk(VnBuj26IfeBR(0*2ymnl}-J(9ATMJnyS5{R@a-whh0m^w9MxO;9s zR#GQM`H*Q`6A~o=PUT71kR{R^O zvXgV7*@zdl+9cs8n=hf{!BHB>hNpdfAmW8Nc5Ng9Q1}Q1ND2u`J&$Wb81%obV_WXp zro8E>vOk>1vn*M_IR`2choWv*Ur5P`F-}&;4j_9(TFLoI{dA30R!q+(a1!Rkh zqAG~qY<0)pMfY}P)umoa|JqAcM9ZuK8|s!{R{-<;f)Tn%F-iH;k|8#fykX_Gq(mOI z-4~1wcND8F7gD>CyN8uwCsPS_Gt%>7F%X#?=f9K1^9?u}VzpN{s3D?6NON6{z`FlV zv1_M@y>0nt(sb>_b|b-Ci)Tjj(F^7Cd0y==?YTX_W*7g9z|-B|p+8)o-n4&wEU~lxHR^ z=Ioix#!{CntHOJ;Hzhs!a`eCh&2{a=<{1uNPEVRo=JMZ_?3ODYRxMu;J;$K-j@5UF zpIx-0iGW6z^K4$GwQI9uM_HV2z(*gBH}$sc#lNI z8#NSPXM4_29;+_B%i_5czjtezbZ#K>v5Pu6u92|oM9j6Sy)rLS5<~VcwDX1{s8`nw zS|cARiZqj?=9SshH4qSsbk`jwZ&>awlNA}!l)m{6laxsLAp9o0hct6W-i)(Xi=ai1 zR8ux>Smg~}`ZHHLVQvPrg7Q){g-P9#?BI36B!jq;myi%}u2&>y&MCLp-G>%0|8u>DgxUoK<3zTq zhG?jqfqZQuv{X9` zZwmzwRK%7L`e#dtbxZf!3pDZV`FOZJat`@my>45MXZ52C=hZB07iG`k>1VtRE@^aa zP@SJ~t^Is^ZX8(63S*S)Stt;TGd-({q#F2gG>xJNt5RK-u5LVRCIk@`6ga@L3)A`cS zZLFTwwkL8N%)Sd^k$_(fJcjsl(|!IBqz-Il!zxYCHI0w&P%Gk%lwAMa&E3D&pe2?Y zj{L!+5pu3JW3AoHnRNH2-18cNvhyEiacqYRuW2v1$!dK2Y9#AB9)VS*-}v*s(x`a1 zB_rxRglBMIe?4wf1v!WS(H6LB1Uyt--c&cB zV*{5$UmG$U4L+zhE9>*@XufCLkBy(~-h!CVH-2x6rY#;^I13?@g> zN=g8O58o7AP6QvM;Sp`au0yj!36}2%93(Iq*#9|D?FDEA^6TWDtq2Q~TscDuoYzpG zh{+dHmtbV=3wcc~XRh84sKQWc43?NifkP$4IcRm-0@*~|F*vAB;R*n{+uQt;pxyUj zKz=0^e_2i7nCjuaI;fk&;zGfQ+7s2V13ij6YW40ofE*f-fHi)5nR_~z^?l+Ul=~wg z0iCgYa$M&>vB+bSHr!Z$=fu(7=S4su!EaK~{ zWDgEKo{L4c_vtU!$C~V<$^=|}-l(Mc*-6cK$C(^?+DUfx4QFK7v6qXr*4la{IcuYD z^H4I*AtR*wnJ9FFC?NkY1e-u(jvJ6bc3Fwv(T)Q5*x9r&xaU$UH`EJHLcnoGLtz(= zmH?)*27i6MmYNTwBE!ndBJMmST$ZG($NqmnasFf!@S2T^kIB!~i{gW-fm`q}tZ7Y6 zeb6r|7cyl2_S;s`S|41k2jm!y^z5_m%+GLQg&wKJ>H7f#%EIZO7{r&2QJMe~UyUIz zza0;`N(3%=Rr zCoUrm&KaB+o`NRY!0U|Q==Y*xV~_8kuyj&c+?axSw~5-a3lp-4vwmycQR8 z0@S=NlYDxGHB8LjmU8k;_r;3ol4k51h7czXm5V0gOA7cIld`lrrIRY0<7?hS-WLZB z?W4FtV!UZy;!s!TuB>SdhsMpX{`UO)I_ga@kbGkF_w20l2fV_3l=up;*Gav1F0K^S zLCtQ>dZYq*ubkUu&Ps$Xb)};OCHgh2TmzzllJLGwb5&Z5wP(?upKGT@HpPe-X`$_s z3isvyS2Gk31LM3Dx#Iad)8*7j@>3ytc%8ryN-2e&i-}Pca#sYoY6&ZlrB>g8)Nlf3 zJj@gLOXbl~GlujgfrC{-@7!GrT(GId$IAg1&>}APvP#R#L>xz&ZD!^&SUJtjqb%XW z903vi!0kalzWcK3wORBT6JH9q35IleKc&X7yGsfX_dE8IvV9(SMUC0I*DtrHYd02# zqt~|G;nCI|`k`&~Z@3XlBIWd~Z@h}g+Z+^6i%k|eIbUc^VX%eh593uG>5cDamT6@ZzM>hWl@VMR5jR0?1r#3KW24kJZOBq|(oK3-jA9MK2!e_pavq|-8NZ57( zpo7#5uO?GRG6Vx;x?o+37byq-tYurhQv&Mkx`w}UJ9718$B%reCEDDt)lJv!RBe4O zx9`fl(DwuESZcyjrV$~3|KqC^pd@%at*9F7VQ!oeGCKopEVQbIERCL!A#%)PzL3Ku zeQ-yYDY~MJ_G`u&!uu!cy%={h3>v*g2*ieD9+UkT_kIYDPUmN`lld4nW=!pcy~P{-y)roW zEvWHG+q()7?mXJ+g_ z)uIikbTa<^m1+?FbkmZMzgk%M^Sma6D(Sqv`PEe^10fc_O1PNPmCT1UF41Pxn}5-?DiW_4Joi zHQ7zBxKjjjFX=Q}n_RWFWGa4dl+y1cB&8y-aG)Jd&%(LRmmXEZs^D1-I+@sa-+u(j zll+p>5)IJ*0rl8{T;KrR=&pq}jW~Nf#RX#>Fx*}$fM@g~`HDXkLEKA%aU=`TDd9Ro zQ%ppODv(d1?2QBZw#=^w)HRD#3G|ZcDtFhaX@-^tO{b(8qzeTH7i-s=o?H#zHS}^( z-Yx{Uyfl=T5x;Gqf-;!H`%LYXLJP59{%KAVayK4$3CJ(0t21(QCg!(~oD4Qbg>yb& zA#NkPhqs=}ikh-0(&IkyOBuM26xl}k%qvhOqb(6t3J^I4+*~$FRy;#xmeiAQh`64^ z$VMK92S*-YSzc`%Yo@6trw!1Gx~tl%K+U-> zeo_@2pgT%ZXOu}brM z94+JYdMHD#zuWFa0ot#JC$+E;>zHp5WU3Fvs)FF%%6;=QC@;BEeaOz;F|3HD-Ux_a zcp5uPakHBG2e%Zieb_G0H4FT$i*>bxuHR8Y3KjuZM>Qk(n2v$hNJugHKOhr3ZYGF* zGatw`XiR7j-)oL$c0CqMGuVl+_Q(^6_lOr@6ne)isGpFy|hu(et4`9C5(2{ghx_i^Hf!>n{ z?m_knjK>yL`Mvt6yhXi84?7JfCBEmyQ+J}cjg3~>2XJ<@?O&2}Y}22d-}wCJ2J^@I zw46qC!WiM<$3Tih3=heFf3t>)pX4w+X*2X6Aoj8&e^XoE4C2v;J7Us0sSYSlH9-kp zQu#gIK8nE}c5`^A156$23EcEN+yVk!ZGSiNjv#4$3F?S???wok2kSc*2;^1swzx+LY z0^cDJUi1-nfNk@f-6mjXc-Yb5RnD}A#mH}wyR+7k=#pvb-B~`o;Z|uhN4odShT9X* z07AD$>qvmFv{YPLoEhNQ8Xr#I^V?GKngpf=jGVu|3_g?~MvwfKJ8N=W5;wD9ncxIe zcf*93{=HnJXUvfYunUf|gc@TqVsm8Wi`54O-dIx6uK6Z1cVd>umq&}LkYru`AHJYh zGAOC3DgbhNfi$Wa-+cK8$78=h_$<+iCh1E2;N#s(@t^y0)P2x&I0{UspR(kZnA}{g zfn&WCI$`vEp9k)CWL)fk}OX%;QqgkJht>@ll&Q8$AZNr-~KatAE2WHaA z`EA@zh&zG)vw9%{Cg}LzW7698~lQO|v4jd`!n0y;m z-k@_+$5o+@I^wjpHCdzD#Vwdbt!mG8MarNuA>#o6SxAwgdiWyDjaNw^F%kckv&5ZFm>b3OjK;6+=n0c1k3D@J=ldv}t?-N3Z(Kw= zB&thCuyg28O2+wS=v>DrYr222RcXh|bvnr_?nK!G)SyBgmEw&jDZpbTGA%I@MTSe0 zRHvXK8&g!R_wMf5=JUwD-85qx{=UT!#xHq@mOK0~dx+RnujLD{_Q3>C)4tRIYLGKL zctwW1318@VXI5XxCGeTT!!Q!Wtw1RWSF*zpeidNdP>W*A4?(9_rti9kXkgJe5RmM( zek+!PVsuF~b^9)SikfPocK+fB9?@72Yg%aJC!h(783|6Pe>ar_TY#D$-pN~daW>X| zz?jyP0RF$iQp#VzRS-u7Qb+WjfEy0WOsB2~Tn#2MD?seE)g_=8VAY`QL%WOR%7gYQ zI3ns)4fv*nx8&KqgJv1*ZZ4Z^1o~nXU0*$Cox{r($d#u6QJ13bk{Nj&DO&|Fy)#ZT zR~fCgPD5ttgyC}PYdwe^31~*!a@fxSNyyU>Uy3{7yc))K%g9hvl5%K(tfUsYHeK5; z$~Azn!3w0``ka%g6}o7+VRb8E&|>x1g14Mxd$a3Mb}y9*=G>2AykmO2L2G*#i?XiD z(^mrLlJ*UT0-#tH+(FE@-Gptf&lb1fyVBd@r|~>T@iX;+NSmcE^o6X=FojGbU@51y zu0YX!`e&IGN61tILo@J9v$n=Ijt5RZUT^;>rCfeYn2eHv2e>!MRvHMT9zJec~fWVL{86EpjO+LZRBGNNKk!zv9)klhea>OOBTU2E2A;Qi;s0w|5!Js9E%59!hu=hvL9poRF|`Jm6@ zk;!~O6^CnGVjkdF=(Xka5Jw~YuTJYz&EinmR-=HL7NdGcYXi}|NtHyKPSO3Zl(H%eG6bK6~D#*+Y-7eaV*dRp~adY8q}m_^9LW8H>=5j?rEq63t^h(4qlcm4hI4{fvHr&( zb-!geB|zZQ1RmA&_v=I|e*CFyzpUtDNL%&ES3|1xUmZU|+)D943HTp&9dvz=F_?HQ}USTsNWa|BG&n5t<_Y3V7L zQG;>f|M9J#OF+5!|IC=0-nsvzs<8sYnuDA?1Iet)SSt`W-v``Con1LJbn(5h>XHme zJ+x=d@n3Y*in<&d@Vd!s<#GXNi(g;EO`HU+GFXUJ|uC*KRD~UbN^=8*I zd-3IMLKo|OdOyPDgK2ereKG4QoZ5MZMo)*7Nzw8OX44=h>^d8L_ztuG_>S}JWERU_ z>;2SD;U@(#b@ukpI2;Exwe0gAw1v6*t0LJznu2buEN*sUN*@Q-kZh|A_9ox`^KdqA zhxef+Ck9`O;7#wmWByjExo|hcKlq=(uX{i5cfP;9EsEhqucIqN98^vhlBN$mBN}^7 zPq|YC;+}WDz?ZnPeWskfWj20wH?UPKbpKd+=lEG}ZvB|qw(i1RbZ$Lgrj$&<;k$b8 z4F z#)+HTl;5{MjZF=VE}L0>TxWf#W!Ir?we9)*64|qXF?70ivm?#WarLFZ z`lqU><*_2Phj#UUfJnAm6g8>-wl8v^`dP6HB2r!XxFPb(c;3ScF|yIgd`$HdRQ|+` zp{uyuN`C6gRaWx?$85=Q2RCxkL3@?;?}~vj+~h6s_+Ka|&gxt2jT<#&cJ<4>Jhmzi zOjO!5KOXmo%x0SpWICu{nl~qXpcCr(6E$~L0adj-9unq?S$vpVj<_kq85^*^m z69ZtEXU+?N;am*3*Su*|^ieWL0Wt;Jh&N@9!84tFN!adkkqFP_U|+0;w>aq-LMLPo zOi{V4(khXe`~&4;^kn6{ZokEV>w-l~R!ImL@P8KMkU5}Y3G*s!TTvE!&;St}3yvVu zrv{^u&Oo9`U2!R1a`~g1*O6a2HQ)1R!Sdry%vPCQDxv*~)U9{^=hwx)YvC*2 zZs#icAqX)_yLEaf=yqSu+n-x>HNx>pZ55M;*Z$q8yoYxb4F0Hd zifZ*V-mmwQ2)kfBNbMR=bR*HIhd35+u~JY9fCBy)1UP;;z`ej-_Du`W%Zks&vNc`< z*TWlWvQ)q|`yom#*5rkz;-R|a4!~)ko+b?uq54PX2MO&@I$dS+TS#5r4m|kQN6LL{ zSljFtWhr+qM97ltqn&jtJXY9%Jp|i9h#dnnL$y;h7g8_gsTJcaX}sKR^8_O-;WMN8 zKNYVs;jMy{T|SyS{nJC*7|J-jJD%BYD7*U68kac>X1k|L16US@G;;kG%xKkqZC6SJ zZL>?%ecR|HA?O)6PGs)Q#l2?=Zw9*Ky^>Iu_sd4kdn zZFXV&xGGiRV~k#6Cd1?)2s_ASzg*FSXGHda0|O1;OXzpd)ws0Jmj#O4_VB^^Ii2tt%F`@#jF=6Vj-n&w3AU+?M@=6(Xi$;Z* zvO*N-)=dgCRHn=pf+7_lf*?Oz)%4&XOA_Bb35I)j2<_Cll=p2ENLZqW+*RA>@5(p_ zx;IDjCf$@cVf-8Ql;z>fg#w`emEXlp^pMry%HCYPbk^7-ugtbrg!qNKzuzxpDFXpX zFA4KdJQ5$p0B)LrSS%G5@r_Iu&{bA-!`MRvm%Z;t7Ex9U-z{*vQs&K@q_pn~Wh*~c zfS{0PQ87|&EE}e)#TKB3E#;|3q`O45)sbOO+Y znXFK#6S0fn5|MS*8L%*RUiJ=^dXUHa8k8sLiP?nN8Fmqjm;0+fRzYaVcenx%zS~U8 z@x>~14*W?kzkW{FH1=8;zg*^&a0t`{jQ=@u0dKBY+TEJt+aEn3Xv& zjyIV?e$TKh^R3>0>I{Ub9;5n&cx+>4W@p-AlE;7j@D-8g5?C?W@K9$Lf&@G$SWkGt zQq`xpWzb{n7V(>MbvCp|T!Fyoo2-1i`YwnyQDq$l$^k9eErnpPyn&E3bnfd65g1dX z9Wb~)y96l{0yQbc?KY5qKo9Jb*6_S>xZO#AxUxsM;A`y|O6h8bnjX_IWN4i_HMvyL zH4ZahK;{uqKGV0@Hva6<7e+NZ+ICnRQ=`l|a;^2P(>5HWB|%qz)(TlajEnkT z(k~n;cv(|X1()I`HpcfSoUBdL7OYee#6E)9MxRS2q{Z->#CRNCRD?auI8mm+vJ3@s z*&j)DSfx!?s)>J_n^=_Cd}Sq*5|YO!fSGQuuo~JWTC0bx^hhI{@IX5NAyMho*<98O zO^|;Jzsqqb&CqA_lJ8LC?@r*R$kk+yut|kF8jp{+lZ4k&ccl4F{ z`0shoFy*Wc{|P?hXNqZPPnq#zZSM(tLCGplbuw$duo_! zGr!;(0pnsr1TkvP4m{?M+jF_3*yMRrACnQks)J?r+(4B6d*}yd}42n-DGQ1UpDLimZT8&?MK=u4dPPQq- zu=xr&-vtHBFXEM-w5btH8IqCPh)(cThPbM)^31GyeNWLw`uyA*mo8iqw4eJCt{c6`{Iy0<^d1>=A;r{`(v;n_$uwoO4Mtp7oo%uElj&-#_$cIP zD&vWPW?*qZqA90UPrP#{?WGnem&++nh{=_7IFdwbpH0DPM&w`rESTJ_Qkt!Xo({9G zuzS5Ahq!Mx)HO}B*y-Ek`iJm7_xW47aQ?ltveJRLf#>4YU-#_I_9a>Yw!~DrbBkS0xQpE>KWkrLzBDOZgPe{5+@Z3;Jo>vWP~9qF-Ecz3vT!X z<1KAuu${G;GF@X$>lq=oB6?Zk*BX>7VdvE(5P*GSRg4wEqmRO%lz$xfO-z$%N=V=hH8)q=0{Z zP83MY=k&72LZf^X@D(y?X&t|(sNIrOy?-26Qa^ffap2+<&D13Xe{72@{pm{q>n$5_ zOdQw3gPXxSmITt)c7>4g^ZsC$%tE&r*wj7MTbyIY-CCGJ_VgQj=9u;;&F@!st^HGk z36Dl>W>3~yg1Y)@9N#s6OK6cYd$-b;C_cmgu+`PKq5M^6T4d-B*+P!Pig1qRSNAWJ zF)kWgve~l83j6VNq$JQrto_^H+`eglri#8YxDVbSs>)1VxBOJeq=@ctI)pjzM%*YV z`0cu*l7eqV2x^EgR#O~$L6AtYmJ#Ak@+(L zH!icgg>eKYjCHtWK)r^3&)w#FJZ8LMXn7aGiN0E2PcP1a5;8}EC7=(=YeYlIS+Myk zkP`kIvWsO;oG>KA)qZ?k!2^BayI4A2zNZy{LkMUi!nl4ON8ZT`@N0W|KShy3u+E;gTGdv*%;5TP1D_SIkf50Hw_ zoWpx6o1>W5B%6hS+n+-5QDNm&?bju`GrPkl0m~`0!$i=N4CV^GRQU$G4W(fQgO8ks zX0GEM;if(~I@ypNsZ53mney+2VU^r6T6_Whg>3SJ{z!D7G;bt#aG*ffdnUbdpJk^O zw=+{zjG47p`(si&<*TXg1?>7t5yii&_cf5Ntzy&EAm``o`J)&SU}H%4S!>m&sve|- zo<7O^{oPc%7LxHs;Egp3HT-7~gt6BVh_`ApEL1#C9F+l9E3Q#!QMUHx0lroOnKlAcPHtT zKr8^Ibj$&<%YhKiY}l_QNEc%%2LP_pBEN;iHU{pXa--^hxdOt-|F_DRLh?ccHjH7YD*8>|dh0x4T&d!entOpK;VZ=G} zi;tp_QLXiF79JZynu2Z_4&?5fT`t?t7p4$sh91io$UfSK-O#^w``1S%ZwJ&t`ha zzz7)MMN964hl37+qRE(djJa<+M?(X=CVmbtvHP-OiyEtlH^VGHZqU6NYkB`o`R!v^ zr!ZT0&~(G$wq`D1+;;h=*2Wb4o2j|oq%+{e(ILgmL5Y^u2gK8(u-cCjQLv^9F;u|q z)P#ZyL1BqiK}z*52GO}I;#OETQKY8qDvz7vO~5lAi<~zrE~@^g52x|&BS zA(q}oNC|O;aiP4y?p0c%38}P(&FA(}H<&x>6GruJr~6a;jM1!yojlXVY~OiuD_H8C zm?twP8J+H5!m+XZkY7Uh8OIo@en+Yfu@m^~$KfsFPE#OFtWCN<*2(@l`J|Q|-JVwH zu3T!!YKW0xz$fy5G1e~~s)%h37xD%8yE-M1y&}&%HD*CEFF;}l-0-NsNm*c=n$Z@I zw!^g-+W20w#Ow!3$*5+_XzTpoDPc46e|N7p^FS}|C(m;M(AHn*uvc=E^;@>*6=nYU zC{r(PGmP+J*U&@M++xTV>y#BF`T8ybXq+3l0B9Wr8ZYOAAvHsVL2>G_A%CZ|_=K7PqZ7(F-@{wY16dP)@l@TTY z8CPv3J8uykHa*t!G&=9owO*tJdzj`P%gD9%`QNKS<_=oz6>R4O_&$CB={M3Hdc0>& zF-0HmVcD3?Kkh&cr%u$?!SsC)ZYBkIUSy!)O4}{;XQrKt<@ZTtew`tN-|wX&1afx2 zLR30=)9t6|yIToEAEQ}KX?WBJNwejcQf_g8z2FJmx_4TMu-9tw>=m~TvxSfXYVBUM zdNs7Lwtf^e*x-mDR`&Q^Lon^1&0@sF%P+0hEb}tG`H}K^rWx%Q#eWV(K}!7NY~eIz z=_UcD*Ug!0ww}u@rI?RZ;H(n(ZvNb?(5_$Xd&N+Xr+GON-nN#E(4V< zHbdwKZ0=5)A5$7^K_`bpwvk`OQbZDc@ds-Pv>#;?=*#Mu#pDb1U8)`j)Z4qs)K6Xi zDF9ST+l~H!C+XuKu)hPnho!#%7ZfAJzk=K-JxIA!pY1JmIz!naCIgRqHp5_tpcBdZ z8y|UmQf`*GjwVbRyGe0+KBk3DS<)6XyXv%oof|xlWW%fsYE3DinZK8LO(=@#*pW7Eh1a3Rp$D>tPr*La#3Bdc zj&h*Owy zaA8RF#E}sPgZ!^N@E05jybkf7cC}n94~t|?4UkLAO<%1pzz%`&Rnt=^*6 zUh~drZ^h8$=L|F&;lt;Kw%3L2Kb?lB{r zcIPoBcTi58VUG~i8eQ)vHa?WvtIi0=X{c+eIMDNLj=e5yTD3+QjD`HX&jS>w-pn-e zjDwIF){dC-H=<`C!8LSmiw#xSdTky6Wj=idu(Eji(w<&7EeFe`W zGQ)1-IRQ%_V5-`7R8{HQj+zgj2nI`G7G_{i-h2DiUvN;mz@*AOIcq~k62G4Pv2Q6~ z67e7U!9HIySP|$Z;rf>fP&zVa7QqWddkQ{54%1I?$-_imBS}nmt zpj?MqmwsjTC8`wQ>SV6w>CtHslT+5jeyYqXG<-c~Yeygr6PcLurcUDmtLx1F5`1}Wbe z#SycMPmEG}^-JH>W~L~|_3)O6k5HKJO?US6=NB^PzMf$hli@~HMN=iCuAWzwRKD*I zme7HEWEX;3Vd7w=r{-m2F1(yeRwbAT%fG;&T$x{RL1J`dhP5p4&%peF?E}l=;Y?y} zgjhx2Gol{qCs{x4VE~7koiK|zL&PDY30(ih{wk9%a&65VG`DD}UbT&-#qa9Ht$*-J z@&X(>)f3v+p9j)(_wy1U#761)m5d?nfpYA68;_^3%OpCVR9;+$%cwRN$L{XY$o_%TgwH<@{Mo>PWQ}_ z=ECBf21eJ=M?zV(=IVOV2`SlfBeLe|U$i(iCLF0X!!?UwymH@IBS4Bj;28@d%uvK{^qgiYwYgI^P5Q| zNs9O#fn$8fX$eV=3d1P?cE?cLhGb`AS=n5kf_F>m=tMXZSXG-Sq#6d=3HXh0GR-?c z%@W!Uc#$Nq9%GLcD5W1jnjXHo%>lWD8z#fTd?Az#OPEVL7{zDLzF-X z2iA#}R9BI^w)ndBlUk^V{KS12mZ2MbQG0YZU$HM&Zy4BZ@PgVr#$2LZL0>;Y!Bq$8 zqr7@tg`+`|*vXZYAatN339P51<#3aL&850}1?UJqZ9dRurKdu<|4MPQxu4HYil+0W zhU$YHv6!VpT;xFk){wj{mIyTr{|~UiCNkZx>VyHWAHMa(vaYv<47SRm-BeBoIcS22 zKNhTTM9Daxu57DQ$wGclq0E{CoA^uaw=9 zJM%=}F%7M@@>cX=meSgi$K(r6S7)m`i7sCdRE)S{s=eBDG^ll6!;nzs4Ts_uNVyKI z$TL~oFvm~m*wqAHIk)Pas)9!>rY|C^EBdtA+UbX2b6IJLAIGe#8l9(fV{dA>Mz5vP z+=Qrw*Se{HXI*(Jd#r#@(Rbod>S+b;#-hG4RjuW+JGJ0kHsVF=douTxYeHT$IsSfP z*z^QDUEkteRfQW31|Gwk*Hh$bEjx)<8Ifq`Zk$VSP`Eelx z%IfSN)j+=f*Gsdl9>RL7_d2YmlZ`34lWN~%ir%Kw-GA<=$2qazFKJ10$J#(i{fBkc zZDZfFaNFrXh13p(rQ@S*;(@pL38Gy+?QT^F7jf=-EEt@{VCvqi&sV@(bRCFKP3hoT zLP*hIqkd~Qg9D;Zg)HB2p(nCDpUHMVQscORDuMV-zCfp0{1K^hM^MrmO8OU%Sj^Pv z$(#|7$1)Lbi<0y~Mm`R!MFEeuU>PspC|)T8+kPA5=d&cZB}&yuRIq08>|zOeh7W{< zJ**>9T<>H@Lae_+Pe@YWIOSp)Sc2fMbGa;#KZ@w7X6=c}&M@4a!}CqEPWlH>E4*11 z=v4P@;(UVYR#*9*0$0-bO#G%2%KAa8n&& zb7q%}{`3#!x1}0Zu%-XQfSx)68~O3q{6&Yb+f*fc0RPfNh*O@UU$=Fg$`nE~RMrS= zCb=oIiO4G}4mMB#_HH%Y>j)WI!-J6Mn;RE{sUygAb!ubAS zy~r%qC~e4|ef+H0LDUSj7%gzCy!#pFH|(JJr~l0e$vCi7TNQ4p%9egzC(6=EDs4k@ zHEb(`f2GLBo9=JNs6kLCv=DMA?>J)N@jg9Z=1#(RT`-e|)mPX3siIVYkjyhn81_O3 zD8-h32XpJ|mei7j%a0~O-iZsXGdm3(25VZ}6owGM8eVev5||H{ev#HrW(qsC>=@+8 zK(b9ft&o*4(omY*)OLVAc!WSr&eiDBS)16JNDZBdb4;^`OSe40nd&m&x_6hS@QnlJ z2!Yu??Pc7V4Pr^7FTFVZ)Nu`}ge&K#=g)I7 zecyJT=gv}8ZNwn*aXD3_!lq;*-ziujv@Z#6?9V7WzOdB1i<2{I1s_<3xfY~|#J_&7 zY;s@gdcE;OwZsSSCR~>oIM)|jO;ZI;o|FWqG_A^hEm*sXoY%O{_L=66GtkPpRMUeI zj^+Voh!=)Fz5BC%}>i)zJDV0zRZ zGJryQ!aX~==#%7`;Tu!b53CV4Dy%)E)nc7izeQVnidj51ZrUn*AfEqM47Sm!%HTHT*RlRK)M0gPVJcATazW1TD0<{#3_GOu;+n zgWDgBY^8?{o3KpLvMe3``>v~)A(K? z*#j%38cuG{vB2Boh0`v|@Uq*#=jH9Mn6D#@b!5c(eW7;|L^`15oniczHAcUuJyqDI z!>{B~*Ag1fw=FPxmfRHiBoXM=$m!{?NQbd86n7o(i_}eodxfe?y85xm`;d+~Y%&Uu zq<|!48!XM3GoCM-4><{*_@j8|x-Y7#V)sA5@9)NwFt-yT9mZnx_Tfi<|Ev)RWzAeV2VOlfER*E2PM*joSw1jAfn1gNu$zsAK1+m{ z)AC2zK(vA2zUXPFqH+Nh8jFDWRX42vSdL9r#t}`4earAe{WX6K!t$16r?J6{p7FdG z3V?}|9~XK2tg?pXVbIF0nEhxwN;0b8&vSgyLo_ERe+pqcJp7>B^QRVH!DR4+&p`v< zi+hwK<|tsU{awHt?F^$D(daJU(cIB}_ZiKh;+&Z#$M21Nzmy`JBgV^GUWRN89BQ~} zZ90;wx^7h#o)HTJBL7Hsi?xXKqLe701vDkivVRN{IHv10K80ykKvgDbBFyh_tkBbk zvDT(doO>IXBchTgbK3Q{r(X&(D_oSK_&o|T2+15BQWpI~GPn|-y|Psk$|aZ(%M(%R zbld3-nUX0arP{+4h%m*=z3S1#9nlOT7%a|NY)GoAs4>JidI7v&ekU zW#6`7sgwRY^>(iqX1L!pb?x+8Wk zS#0BIcQAHi2_8is>t0Sra?@B1&|1qzqAH8}?C6Jw2F+V2k4E|1$pF|mn106?uU@P;@8c{p{v3ubB;479)_3}{jglo9;@OO@OI zFyc*2T1T8H6tr_+kxtB_3781(@O*mXTTRN`dcd(dcaJKZr%PTQ2xG@9?VZ$lTmR-N zjXI6@q{@kP^<)4a&j~l3%0v?!3FClpwsc%OnIW}`Daa2}#CFr$?kiZBZ{2nO;xD8( zI03aS4l9q#vL3=fZ3t}QGuI-UZnZ{3Vih%vNkOVS)gwLr8wF-#_JZFpgEor#WIfxw zrL%7+tLw8LC`92b@rBI(N03?PUfuo<9-sB%$0aI2dpbjwc@EFdxh@G4W%GqOeeFvf z_2Ga#x-u2$3u8Lk(BU=Qri0X`u&WIp7MPY6#zisjT{A-QI&&o6$|Ei3+3_Xr{bG90 zsmK?8(SQCj?&<>BnxBTE7H`8j8ytS&2F;+TX<(J0Z-63)7qhc^quYj(%O1=d-RCGT zDcrmy(E2=F4%h79XZ7^DWI~;?(bAwX^+Txby|V0G(Ao_vq7b*wED=_sUvWGS%sDPA zPdblFb3`>J_}q%-)W&>at`C_Eaoh*rW1eW+o~7JxqhhUb;JW_cdN`!ytKpzk`uw~?G@Uzjv__G;Sfp3Fb=U~a0;d=UD1z^BK9dP-7lB+2kfJ*p8N+~-q8600?3=&7o!fbO9i*E!nYMf4*6?-P^H{q7MML`D8q4a zBPzjGwk+l7YFuITzt%b@hSLT4J7NxP_no({=o4N$4Sc|A6qlwldn7+~Uo;{+s9aRE z(;MY`5q(N#dN~)d?8XwL%xRSE?kzkqL*WRdsku;))rb_7tZ=W?k--E{P+OolF!@_w zO#I-tv$?PJRv7YM>6|!$ANkL)mfQ(`aNucMZlYhjK^b}`3NQSuaR3-U7v^;h!LrKb zFG-I~QMDAxxz|)mbDE~8Fy$nwafW2z%z#~|&#KMsJTA2U5}p6Jkzl>JjAh5NtI7{v z=D{m6}EJ}4TsIN627Y`@z>v&%l77W867gysmx&G zylRDzQ)#KSZ-BEN(N`O@7%i3-OO|M zKRiXT*bma^CrNw=aB@sNZj4Np)q=0pC$n@{wUl^yDEb^uTeUBf3KoYiW>$F9x4VH` zs1Zf^fWeLqsXunlHCmr|>#^%-ta7H$6}Y{NkXvUZ#`q@-=SQZtl45q%wK&J0ug6b6 zk~kC%V)#DJR}y?uTr74^6IO5QiBong{wzd1^9}B;zv@NR&PkV6h}$!B%vwk?O^~06 zJbBjIv;8z8g;~lw7N)c=5Kp>QQ2OFZ@?=A_EyuOCgsT6e=)B{p`u{k7?!CD7-mWd1 zjGH~KeR1s>60UIxS(&M8WV?1Ddq#-tP?Vh&lB{GVD?3uZ-}(Mo^yu+$uX{e9_xtsF zKAjO*LA(+N(mpgk|6TXZK|O<(x`goj*Yn8TcWfZr{L|o?@gO=1&HLpZHJqt1sS~NB z(k%HSPWGo~Z3xS))a+k}qpYB{sKpX}9&3{yG*>HNk+W0mWgcTsr7z3+#JTm0+F72~ ze$ZTp5U{^*SvJ3v=-bjndm?2OxRQu6&{I{xRI7g|ARjLqo$njx0jNVkm))nuk`k)q z+m!x%T(SixNfmp>+gjCB*X5iq6iHg+D$wtcbmB?%?GhG(e;!HkZfr4XL;Dwv^5I#UHmm$O)$ zpCZyD5KA9ed{fk`e*fiqxQlx7nYGjs{|H>&vevj zGx+ngk?vqf+cuz)-~^utW4p@t_nS#2Z+iBG1A_Vka=_W*qcOsFvWElzDR$(rh*-7v z$*_l%#AQ!h&`w_!=Ar{bT>>K4BOowjcX~!$djl zekE4k-N9-y`1S4E5Q-cj{v@*wS%WoC9&)}*6f0kSTWrpl^3K~&=>c}lS)HD?C(G8y zd@8M|*RYExs0qv%*`yYRI>w|2L;O6Gm`CApqI{~-0!rRHEllXQzN+F`{fi9QQFfJo zT&+{?+Ed%F6wb?5Q9A?_D`WpBR)_0Z;xyaeR%;Yg%*Xfc=xC}=SrS%{+Tl5B_^YeA zTQ=rvlaJoLA$Vdq#v(|7q3~_rt%OH8;Xm1#m7^~%POEZ}LCoLY1_(MdZUko7aOy}< zMtYdjH6|_wicu%4L(uUXr*H0ufMY*bv$xD<}Z@#x{YbEQR zk#MwS;ScR4B9yqEm~Le_w9EJgb#+M%9*|*4gPTIkB$^8d`zzz zd=*Qui|t725BLola4G2h!!Fz_#FOaNX6cAPbST$KRawAmb{mgsFGr@PS-HxzgUauQ zSe~e#V#IQ(2+UuP-nlFHqStzIf3inH1|jPzR-%M8f0eu$1^y~!8%& z;mT}2u%LVnLaUr&GS$@$N{~Uj=mS{Z?|E6m@0zSe{+G{m;&3W2ZKHVQeJ4o0{eN4F zdVlI)7ix?M?*9P)c4__7W`3d%DsG?r;{HKO(3QFGs=~nej^87bFM!#vCk-Lt!PWeO zZ@dGU2{$h7S^2N;kx5o%c)a}W;`{*eb+nqJxnS1zWxl%%D>yzR75WLTVoT)}-FDFA zV(K}3BR?J&0&b4)3ikOvagT~RGgaMjm z5?!|m(%J+z$))J<&jN;SVYV*$0u=|A*ea2zJI`OzYcTffa}at|U$CB=_fmI&Kz)S# zLsOz+NhyoB7D%~f(w zTXKenKdm0+peDkPDKo1r!Nqq~$7bWrI!JI9}av->dzE$5|Il z!1$|}9-kUN=AhEQ#m*MZp|4QenD~^ARe(#+OO9!fjV%pUDVB0Sch8@D<+R#QoUEM^ z4F+E7bbB+}Ly&P+I7f@dcC{9}RSnfr7;)m2xj(zR#p0f-$t`9HpwW|`KioP%KGp%ecO;v$VCeuSXrs-a#q9X_I4=pgFZD=0wwso| z@p=Qte_uM{7jU|7DYn%9V)P@BQkJ`1IAP)+mXp*7BwA*Pa<(xEy@x0{*rQC4R6I6N=s%-k8%axex2TU=hBuWc5ux{ zD~Od4`tzO+pSX^Hwbo;yg}Vj6Am^v0eTHV$E&@%haqfDl_5|4-i_!EznQLa@I@c&* z`1GY&<8$$zvQgjx(O=R0js^;bK@+aoOp4UbX34H{Q(H6PB?B!9{tlYW(GJ$tPaLT& zp2%+=tU@QXykZ$cGE18RgR+_-9M-Zorjy51UQ2}yDnLu$?^Q}rCDct557#StYlU!) zBi@POAGJ`pWMBETyllo%?3l0R8F)xUlo_NYyME)~QolM&sd*b$8zRc7u-KtrE~@80 zeEl;_9Pwp-p{=do>&6FK<*4C{dU^)e3-*Wd(wkExdwN)-KBU-uO?7`0bK*%42>UIo zBLCpKS;GlG7*>}LcWKHCsh0cB*C{pwtupPHVgIesq&Ef+x2NpwC}0-VmAWT5PWMcd zOc)w7kQFs$4vAJNFmt+Lt4MCd3>l|22B#|%YCo!oOtSXTq*MS3v_=vKGeYhRf~O^` zpuMmyysKV4w26T_YzIaA7ECWhL^hq4z!WAP+X3!}j&XQi5Cj9h(sqEe!j(lMofLOO zXSE+cHe(!#PpfvU!qeP0aFU8y+QRdT&2ZNP(nFk~CEBjke}&m+-NBF%?nasH7mBMH z?Nk+lQj(J_XCQd3)ksMKG)v=OA%URXZ*zEl7^wax>Sf~wxxv{$_!Kl_!cQ6nO#YsN zUVxZT#UVyu39-(HXYrhnMH9^jX3g|SK})WCgFsh>C(#C$=ez{)2#zp?@IU2ETs0*! zSIpg3P?go3;;Oh=RQx`i=BSjspEvlgT1&4LoE7X*qoltmN7f`jV~z=6ah6|Gx^VV@ zNTF{i5OgQJo5myH4j>hgm3afS9D4sZCn0Ie`M$4Z@1CaL7B)&*SdLd6S<6bdz4%7* zo9&^x59dMEv}C!$7DIGG=W3*vK!bU(s==Ig^PSi2)O4(s(BB^y%D6Y|#-Etz=2JPzd|i6tYb z2L}^>9oo%tYTCD$K3$j|IbIE4J(-R-qtf1OrHNTcE!BQqB$nEj`~W3A6*#WfdZ1?U z#iz8hsWCcIALu;(?8;wciG8OsC*I7yZRxaFdKrFtXpXdf{bf7Fdr~mhcDytH_Sg2K zvkF*FK3~Bv%`wSt*2g`MW*^uL>nOFdpBx@Hk;QVsYvDZX8=WUCx5^aoTo% ztDvFot@ih9sV89#)rO`d``@~SxN_H8wtN^|)9hxD6h`C&-pDCzsxf**QFY{0s7Ek* zGg8lja@@Pm75_?f9X#4lX=QlY9^dD<{q?8Zn7H_-`?|exOyuZEo~Qu@gE1p6S=H>e z$<3v~Px>kQewHUwt6wy8#`f;CPFHs&R<+$3jmdw8j4KapYX7Bd=p|{b=^jM=LJF9y z_t-bsP%0)4Rjp?_Q+1Zh==UrNpt)O#*&I`N$>}hfusPGYCnl3nakr(^hK;jt3$OBR za6#DOZxfj|3i=w-Ueph{nrqpdN|dZFc=FT4_;XJJOGcVWxD6zPp?3$xzF?J@*FVXf z`|?`#9ed(%MViH@hw^T|#HSg=ZbWB0`2*vxr<>B&5?x$gy8p9J>uK>r?HdCV0gKvi zzf65}qst!bR2Vutv=a%)xR;am9$T6w;ne0C+JeS+P-c_5QJfZo+OV9P}V1;yC}A2 z+!2Jh+_AB&oDyy0JP>6~CzA$J;&}Mssz0D(GIStUx3R$lNjcYUO5jdeXB*(T730v2*L$cT179E=>7qWuDF4m3-Gd!U#A8srq~>&&5gyBj~WIbbA(vB);X{T&_r z#u?vEKr^*gga-&@A)iyG{TMt(s&FHQl6ZHdl1F^8vrSMfz}Q&N#LL92@KK@+h6Ow@ zisbW`biAR+{mr&xDm#1@XV?{;$o+J&(Ks;wXI#QaS8hn#{{Xk_#c1j!O7Qph=S-(~ z)tLWq6)zqe6HNuEd%_j>LEH=@L`q>DUIo8At&lY_${pZwPD$}UtI6!(|B8%F?-zU+ z)L`vPNSdKuD$?OmN?>&&M>$Z!*D)mBCDb^WoTnv2ig^cH^AaT&4kl{ffEKC*86^3K z9lNLo*N=W28OFWtMslm@Ytg>ES3=vC8PDD1o~ef(hffhHNB!_jKx{a1g|nj+(Qw!a zh^Xkt5~@It3LaSI(gpg z7f&P;k4$g80)wh@w{tUX^POz|=@G$)EkV=OgZqO8C72$8htOaCOnn!{EvI=o?t@=bAGfV)h9XhPchrkjax3q!=DO2 zRGQWYEOflNtIO4L!TjN=x-e~bnt`}ar)X=;Lx z7P(bPXbhh2znB)+26wsvs1~t`211~}^DxI@8UW4LjThDoLvoar0*6c5$ zoEKoPaM?7VuNzoaR8E5D^~0(JRSML)QKhyh23LHXXJ<0l1_){X7~ z+U>6gSTF5CjS_g@g6}J+-?SUuobNjS(Bi9dMc&}zt$AZ9bXRAzaf?znVoLdGd9dZ6 zY?5dCr_TF+RxByjwbtN`M_AO*rFQkUA^zntq2)5sYkkh)`hBi#3qi_XgNo>G1l4pt zw2#02uANU*{G)Fobz9?nZua9%mpi6~NlIN2ts+@-?I|hwP3HQ^kt?G1BHDF}@q!sT zFSR~Zm*`jK%^O9z_MAndY6hhXI@Msg&1@44HJxY zfKEBtMoz^%eEqiEIK6Ixyc=3y>HH-onW>eGWJU_Wp48;7xg>M9#uZ5gz%`a;g}=Eh zHa)+QebjKlN|KZ7(9E2*)$c0NhM|WX8tJZnjlT9!4Yy3e1%ewMe?>65EAz-~q>4DM zDbFT?TCK&F^89BYn*0DXDvXno<^^IrbMmNVuclb|kL?fl6|VeIWQ|fh+iESOWu_O` zFQ791lYC41CI~x`x#9-DUhWJRqa05wS=Z%lK}9~ zK_w)6Y}X>B_k;&UQj*=l_n;Q*$F#|sDkAatl9FUfaNl)GDt9u}3Tvzg{`()$Su_I7 zyu_{}fl}~Dg#)0L0)k7FNuKyF zU0oc8BqI$&9zq)%7=@w|+u5DNvwkePaG+(z=(vckNOipx}5(B!W6n11ZOLO zef(jIEouPgr#Nypd`r|?q`d5oQG@Y0ab5&u ziris8USxb%DaJuM2cp%>uU@ZRIBGD+8T;zi0`G>0f-iXF|M8$oe|8X%p?kWGSFf}z z>~B%2+P7n)G)mdtMZ1||OrD;ConM&Ug4DVycz^sN=Wpb_t3<-XLY0z^T1^7u8k>7> z#qz&t9jkOzL$H}TBE{!vY(q?SHj)+Xku)~HzP(>oHjMq)K-81Fiq{~0r}6EmHv9m+ z@6l_gv)5#DkFCA?wsy4bb9l52`6kf2K$ng?{Cc@7PcNnHT$Tn zYST8^Y|)=B0SnI;d@p<=_9qa=3{M&>hwr;_uvQVrcbq&9<;WTYBjsJl4_h`WrX=GH zH6oKmQrAud5r}H#m7a(^clQt$LzPB7>E)YOsm%78u_!u!33F=M!JH=<5Wmvelh8VL z`+%a$picK+DER0b@5;dz^+e@SHl6R9noa85+cqeD9kx9emCq&ctH6<$F0x9GVEc@G z751CGql^CYM2NvJOn#{UmRQqhRy2fr-N3x#hSM}MxkqjdtuLBM4{SVvf%tcMKfOmy z9Z#HsC*a{)Vl4*q<^U3CS9fns8Iiio4v3h7Cxt#YQ;I=~_tC1YD&v*hTcY_etE21H zs=MZT)Czofxl?7*!v>-dL_dk`Ig@NK!fIk;z!NLdK4Z)1%{-}~_BlD^Cbpuv^W=k$ z2zf^@5#EG*uEPCRaooQ}S=Dt0pLb$Y^lGgR?{TLRHw}{w+C%G1Mu$Q!k@()vD%x|3 zQ6wjyn&;_s;=)v`(mjHo@o3l2o+;jXnUi4FxxYXYzuMIQE43R7uethf4f@)gGk872 zB%88^R`^C|4NTPVVcX{VLOL7$mK@JH5~AyZaIz47VHt#^A0i&!u7ou)4#OQ!Nhh4M zCLK=!L7R+eyrlL}0}f_P5yQ4*3~FxmZ)^niHkRC(C7m?9&BxK4vzr9Gl!Qyn<+91X zDFE*(+mf9-Rch%@q!bp`|PG{?bqyTiqy zb{|FUGGi_YO!a6-n;Adx5e;3Sxs@Q1a&}gCqqD+HDBo9rUb+u=b2w-G{{Y7~*fME%F#dl{Y#X=EHGhbDf=IJih)OC?$tpMw z{PGLzq%}Ruuu{(0|2^AAdLf~<`7ry5ABuIYlkLqd=d61$G}RA}OHbh9?eV30Dho`; z$I|1~cOCr4EYqbW1dYQCw4gnY1mBr+%&H~92NxG9V>e&?^qJe(|Sk_~A~EJIlk zxRQgv|NQq~Tq9kc;#wg-)z@}|GP=j}_{qQt_)Ld}bt+D->%^kliD~|8GBDe}HBp&L zXQG<=p=1@1aDSm!k%VB{N#O_^Ru!pW5xcc>wmtQr+L^7L#ciiTaI(SG-aqq$+UNH{ zbn)?=@HQO)N;+ag(Gs!_HaQqy1qD=$k!-4m=duNQYW)oo68pOX?)kXB!O0a4QB*vy z9J7Iqv=CSp7&UWI7W553U6hc|EUIvun4xH2zWzHCvy0+<5ZADm%s6aIkcVCWfY}Y1 zCV4(g%x0Q&I6_lDRd8uj3u5JXvsSwtd(UpvA)#WMU-4yfr}(^~>n=y2oq*90qw97( zGqf{!f<2wSqB4xpfvnMu)j2IZBH2Zelqe&-v!{Z}@@~;SG_!8tj_(5N_+Rpi- zqfT>!Ax^P0r9trVrG{*Ao9%g&yODS6xw*@JBu$BbL-gAgf`Q6n?mabNO@ML;6{}{ ztH&sAD(kWR5UB=5jzz9ru_k20ifi>CSHA-rDw zhn!(Zw7#J1+&94LlC2)y&c@lB6hEy|Cd(JSKC#S=|0vH|+K7%5Ns_b9#4dIF4kPm4 zx+r3{XZ?(oECX{!6(2xA9@^!H?3%#f${3Li#Oz2ak35&l(V%e8`$0Rgu&(Dxgi4CQ zL>AF^Qaeek{5)d;R*8!Hw}09(FYFCIvKXfeX0VZqJwn>wP^8+myTjlT`zxW04;)4) z?3#aZu5#IV6X?kN)GS*OK365(X&#K^{q@$BqgYt+>a(c!$@6&amhakODgmO)NJ*Fb zdlBBTbRY*Z)Z!fH@PR`URabG{qj4Y-A%NJ1)Y(#a%4^d+jWkiLbFIS_j`6kfleDEv z{;Kw95Qb7c?;HTU?0;lVy!d)~w-j0!yPSF(8F&w-BPAfO3$IkOhlVKLTjcfX9W>Cn!X}i2O@aFf2-pCrl=T3w!^sMsPYiTp#d3QAo~$6wbJb(k z3cn17Ca?;-`i%nHwP)qJFlj=|6kWcP?ngqTFzb66DI7yEuLvQxf|>mzXt09y4u)Ns zA_Z5Z6p>_QGF7o7jr-OA(YBVjNDooBoGYn?F&Zi0?r61hy;5*=lXLT^!0FEvv%un{ zF^*kpG-@{(u<Str=$2itxUyfJ4fhZQA#Kib29IS0-lkLQ2)3-n5tO9PuDE&>J zcwqFUp)aWo{}#s^{5_qTo0``bQ)P@8j~;meNsF8NqGK|;-=}7mUNSWtx+e45i>|aZ zFiXe1__6e0$HM>~e;odv?%?d4{`5&x7?whq-6QUl7la{-vVm`% zUldEoGp~pJKZC>b+cR~VJjHBTucm8w+&T{|8$SOTO5$KjdTscpsV#k&=b1R{43vj< zB5pc{mQdCRQ0gC00d7A_^yxeweMf*CKs!{Z)htodBV+yDJ7jq>ARVJqk6YT zP8iXz#|B1G*!R}&y2OG*q+R;#U%_McwPvY5l`X`=Ccs4QXCKp24ta(}kcExg30Lti z^F@(N=v$k>aSOtJGm-xcN3et4#&Py`An}bIQ}Hw z%-lvRd9Go>@^~FCRPRINA?UGlA=AHpe@*E#Qow8E&z86%e}k8G%*`8r(wj;*byY)a zHaW*%-sWPnn&<2feu1k9uHk;pHYt$eKj3=1H}pCB9`YpT_ax8R#@y*h=N{Yl!CejmM;qhdYkIRHHHm0Vw43 zjUN`7m>~63t3(k@#P%=siQFW@V{%X8;StrV8OTdKSm|nuXXPVUu|1v5?7<)ZCx7T6R8XATIbJrx&jOtrs#k=g}{%=kXPe+%QMYJn6A z{9ZH50>Md)8>z0!&VFT zq)dnoGs_2@+Orh76H4HhI*%^AfE?`P*s@3kQL%^arOCGO`%a;!{C9?BbO2$qo2pb$ zl6V#AE7K_lC!-!6X5r8blmCt#x=sY+o*lbYi_RwCer%+tLaJ=uGXs{`M199=Ylrrm zxm&M-63g6~w?oYexLW0e`($1tXakf@nMrbN{iJZ53GJ?gQ_9xvC#Z8A$+p=!d zukQ7FEginsqNU>;RP2UI1$0A|U<=i?Amn;y$%y=J0oanX=qniZqgDzkEv>S!;@Pe@ z5dPs!`TW`Va7s+d+|)Y@MNU$qrJD-%-Wo)eHa|se_rz_pN~`I-^*6m0%RY26;xk&N zag?3Tz00Q3=cAC3v#Qwfg!L5}rO%~wMqH4yGBoAiO)=$c4S)ZPC@rUqX961xW&xS3 zlKzt?W#64nKZ-rso165)c3L1&1ak=+{#4G#D)HBns-BO#PiUXT^ z5s!idsIp`mYdiHmIt2w zFU6_gU;=`Z>Q*CSbl#A0mj+X$3U=xX=bpRWsC)cY(c-_Tzx{g&wvnYCB;9b8WNm~6 zPLHM5Wl`=xmX&Q#j17ltRiG%lO?Y(ZypL`%<2l>c5OAdi$65@Mp`ia`$p;*Y5PEP> zXpf06=z&WDoQ=UCqC^FaR~O!Ud9FGaPEbD43W4sbY(bS*kPAj0&d zO3~uMXbk2LJ4%Y+k0EyDk1N5pu>Tj^#I1Qq6!CA|9X7#I6Ic8Su@ zoST1KL5}*zrBg-+*QZC1&Tsj58d9d28c{{7CikjQXRd_ZJY2t1!YvjeuKcJh^CGH? z>*c-5uXb4v5Tb~JOcK@FS@RoBU(CyET(5^JsiLI_+wcZG*7Le?`X5fq8U;@Ud?ut# zW%K-)H5Q9#jw@IgOsBuX3{q^jXJEyFC`1<}mnS|fZw;LFu7g**;4fA3sOq=Euy@H8 zgcTC%)utUni-Wav{#nIO=FY)a#XAR zY(Rw*UTz@I=haV+&r8dh&l~U9p)~SlJgNyQd?61$7WO< zBXW{(_(DyTk+1%s7b>V)WgA@FDR4w^fsP>Aj=LfLS^`YkNJvBq3AHhu0ZalIP}e}+_q|FxP&k|n9;U(F)I ziU-nd7D~&~M?PCiHTeNM1WzhfA76d2%pnGTyxLE;B}%h7c!Mm%;62$F3+Ubw%F48d z_%@SP0g`#2ml=a1QNdya>YtwYuLpmEEB#q5mKy~mc=J*W!NEMSwK3?lZdjI1BGDWA zj!JNi>`o#YJ(kloF#u{)TRTfAMAef)1wD{BK?7=e?#O-b{W^zd&+z7C=XY)#`eW ziF9!1q&og^)8^v~Q+d&|5$<)n2p2_a>lxiVE#>G+eIl0z3vJ=VFviA*n+7!p;q3QJ z-E@SMb2@5a;nOx_5mz*JBc+A0>~(D$WKAun=XC`}l9or5W?sQXf!r%twXd}?n=YB1 zo39uoHHM*Yd|kmsBq1iv8AT1FNZUp+Xve0*|GU+G(4YQnQmles{e^eko}IHO)?7k6QU$;cQhJ3S^*aW4gqqk8w+Ne6GvxluhL*s z31G(|b}hZb83BPYQC0!$ytsC!qSF~@mp#KUBWda$`YQinpUX>orXAz8COWN)ni9qW z%J9dcDAf4XX9!GsvWHY#6GSpuSw(MJKLg)@MA~1J!$73uAlb40A&7U)G+ewia}sO0 z{3*QyKIZvP&Qt3#ig7L5Ak+)d{}{XodCuF2wa$gY)v^Pk=!)AOU!Csps+?pBZ&IYU zRCfACSlQa}goR$3D1e!iIQ`z83DqBT=Pee#t0%v0o`x_>!;bh?!D7KHak@b*z2bVn zHtr`AGzLuEbxS+nU8@(7yfl9mRfh84%U+65AssfpSSnFL9c&X1M8_ zWEQQX+Sf#cf|@n|6eb!ayriS=R|>9}`j{@2^%QgkXt#JJhi+^{jeENI-r}|TQRxJ+@HwM=e!&RbhGKD5 z_;wcBU1Gc&XOcZ{wvTpGc&0Yn+p*2BHebQlF|01Fa5cl>zJ{@(I}@OUq4li1F`@t~ z6WY2X%fL3tTUbie=fneZi{VVs^d*5|~fjWFn4 zFw*{HHQWjUd*N%}W2hzi^mvhutEcw9lf;mMb95NOs>VV4Nfe{6OkD!P$6~HBiv2^& zpYTsklDg;}%UJqOev&v@NsE{P_d)kzBSSW$>@0ITEYXcF3zCti3@e$Moial$*Gn^I zOaoaLT7Ffh#5KkK4_ct0QG+Twz0q;-ok$-0wZ$Y-V(7Y=`=+tdOqL6}o@%Tzsr^^VTBS_>P5Zu}W4}OdN3YK# zKJ0l`qpwz&T+@V{fDlF?lbPS^?5FS&<>KPaR>?U9?*}#6zQ{f74ysQ~`;2y}h7;o= z@qN=+PgBp}t8ENslpyzt=d&DN&ihLzpVJzr6pBCo0Z&*di_QviK4Oj+UnI%u5n|Kk znvs|?%i>Ci3w``qi57X*kQb05gajBTTLI0HrLz*!JpV%!9n%4|G>X&)jLfn^z^#ik zibiYz&;wJo)3I0E^-}B>Dvy;UiHz6|t-vjYG>GNowS&I*<{HE^4(k0*l7vCmlc4Lt znOfXkpjnBUqDa{kFa-yW_}sG{)DZSdCA9Gxdo4m7+Y5eGM5otx1qbO^FUqELHqItZ zY4D6&rM-Gk0rge{;jfL$1&C>qxXVx?b{B(Q{*j9kMU)U0HE(B>* z1AKOhg6;WFzD$+sJl?Y@?_QXszxQr&;H<7j_MSZd8>i`W(s&97R~*Q+Q9LlehQE>8 zeA2iIx&tD_NBDGD#`=GO5`tG@MCnotOcF~XC8XF6_=fjBvQC*<8`lejm1uve&eVFa z-2*(>dM`_xgZ3BL9xs%0lMXYdHrck!&6hoxA`5Q344-B*n38fA zMK6U%kfZJ;L~M(PRT1}du!uh<$5DP=QskLh?wvfIxV}kYP7L-8yi#VMI`Lvp71Xlv zZ)WOipE$TiO}}(<$2{YDJW9e*Qt8Kx7EBO>LQk)zh{G!RV`jt6p~8iCqZJV+D2hOs z`Xp;#33Ye`amP|SMVx9R4i-P#@=fAlZl8F4ky5(XTL0%s{Z9{X-pC`YSxeeURRqJ@ znUqrwC3x?-{SoIiV<`b#>T$-KhG{tyGaZEOA}`wm597Kq%IX-jYaq&oLw^g;n}{M>#{=uZ77Hb{~5VN?u0egXS+T!f;^Yh4L;kq6dY|baPir-{3N`; zFIfZzQe6Y!rFF?lA2}*Afom9=k|SX)BvU_IM5uTN;~`PE*e77Z4x-@2mB?Ro$=u#L z-^2eqQP$XBdBc|B>p7># zJT>0Yq1@X&KFnIuv*!vxa4qdWRuEun8u~tF0C-@>IqTQ3&1suy(pXokyE#zw>HEGT z+q&&Krygvf(Q7c?@`Q4AibUdcsTgApBljdD$z_^>XQ9~X%AS0tKhc+ zJsY=~^rJ93Q85?_eflR8iWT#W4aEwqs}_uT+2iSf)*3|{bYKI5&OndT3tx4dvig8~ zw1$^y#XBIBvw5NLNkDhzE20acBMf<_0hxeb3;CvQ0ksmt?p&Tc!^9-`e>&JaiN&7r4(33yNSo4Y8g zqCM@0OFq`?AYrYD6BQQm90u9|XX=Gr063!qsd`(oG`MpOAj$5aIQh-M!Bhj z2%E)#jkFwNJ6lz6z^D>Tr#JWQ_n7J21a=eg2zH}+PY2to+i-X#*%G@@$b!-lM(1vu zXi@jLW<%uGS(eqGsNy|4KwDV{Em>PZ63SlO-BgdU zKf|&~QyT5wVi6AuA!#x1s8e|2%Lw|xGp%AaIA1Ey%gYEB-W4ZZFPLpJ*HwH=&zaKe zQF5zT+FG{C0%64eybp_6%%4C40$yFAyxr-`NTQyd!^4f zs1i~KS1~ubZ&bJmiJPngWzirk>nd^0sBH!vKVc(vavf+BlIF;~p zvwZ#J0{nUUGHhY_TC|fxVlhRtXu7NdskGnk2AhS8RFwkxa_7Tb-A?8|2S_Wj3(|;_ z&K?N$*a$Z$`bfbTH|TH1YNKbM*J-WFa)QfP8G0%0BCp2*f*kXomF_JS>c$pg$g zYK*9@=cDd>PTyDWhH+KZ3Jm{@(WP~zjIiz}9cQ4V7KU-we|vN^eCv6l=QGSJM1=06 z=!SE_e$zplZEU8e0M%26b=F!s8QSYBa-i5LYazD*X{S@TN=azx)bsDSO`1BvvViA0 zO86h}xv1!L-=?QHz5(seV?5D~l6ow*$8rR$;3yrLt$lptcx z7N-Y3&jn2%9U2e~w*{VokcPX${vfo67YFLIc#oUE#GvRdT@j~HJiqHCBQPFQ06vBx z<|KOc07O+7Le4Oahvxok0luUmOkr|IGsWQmh>~2xL%Th`v;xxUVDLw?;$hF587B_e z#UrFQkqPy8kP8Kko!8*3aX_&YKTCR>jAnIe=>#g)F@T|snUG<(x6dx-6g$`%7 zOM$-2lEJ}zN)Xumm=`d-aS~Z*f!IDN{fKJKi&6^9^WDyWYBuRe*6t2Swen!Uj^8*t z-uIKz;74pc2IEV+o*YWGBOkH#b~gOjqFL-Q!ea~A<}3YSF7v=JhDW&m7|UZi7!aV9 z0=`+?9R0wVNGBuEO%62O=NB1mg0}*W_g#b(M{;9Lo$9uaH%x=MR=?qgW#(FJXg!2;Gk+-nb0%;bx?);k|VQ^;e}{e zZR>!)9RR?~lEh{CJSnwHe|Vu9UbEbIikH;6Y5YDJkGTZr<&*A`k)Y(5^zxztA|7_< zJzjPRhGML6Hye=BanGA~I!PiK-HdzK9;AIAX!zpUZ2AtYqlvu%FxA2INt z(Z2NVvwCC$5sM!rCAfklqHO}_LSZS zULAa{ld4X=`$JkuJG$7X=JnB!`L$4nh}5ORx9_HN@Jo0f4P@$Zky_4kw!#_*u@|X+ zk9=FrP+upDY>UJ+^@PUzz-MYp#sM2YtRA?3dq-X#?cS#QKrN@BDnp;E>w6FTJ@ixk ze~u)d2T8By=tJBSZFefL+&r@>mAr^76l<0O9H%lvVoiU7qE9Z9X@T$*yb}PYFOn|Q z^4OyiO2sUqf=8A!&}Ow2YSG@Yj%+#qnZ>KA1m7)z*Jt(g0#y@%X}+_)b=&W@F*15^G6;T)48tYETrORn9O8_7*iaA8W^&{eBiqVA9(+bKT}-G!3VXOD|`>Pz>(9>PxLlS z>s5PM!(@!qRw;dW!Yw$*z9g0_+d5sbljPR!70Vd`chbyqNT&P=*|9;)cHNmyx0Dlp zU_V1xnGCE22V%QvW};Pb9ecJc<)yVCMqG3>^A`=H<3?=oKeHRg8pwU;C7-E)T*pV* z6{PDo5A6oV0_Zh1tljdTzR5J<+H^tx1?`--mGV)2hOS%%rWMQ*AL{z;-BIC{(gFE& zj&;?CftJ<&3h9n3q*)I=G8VEc=yW1Dtt8_}7kPe)h{PneGCuidrDC0!=aEK|b;TymL?>e$;EG}dZF-#oz7Ab~^wXNtbD z-JdDL+tjkXdH?y+ID+HD|V=vzI9;3pa-z!X73c7nRkZt#6t4J3x4i$`!$? zMyJGl=O!bO$i_dbU>0eZOcRBW%CvAtoBzQHYv4j*2DNtP$+1rFp;01bs$AeoCdq+i z7UzFu(ec50w#=c*HU!5e>_q}=t$N}e-LpVutYQx2I#KVf2lZi%8k7Bx*iD%r8l zAjU7MwQABeiwy6gn4SGuM*sdU(Gi{v3V{BEty_6L-qsWv|YSp}gXW|!v z!xaBJCk;EG+K)MR^Da)$88+kb~D*FwDXq_4<=hB?TJUT zcv;UYrs#}B2jAT^vBS{Ia-9G#xx5sUn-KE-YLM|8Je!h#J7V_FYPT3tpRiOER{Zij zAx`G~v-Kh)jR(k@%L?Wsg#SA&f*Xvy-g8pUGM6bAQ7M9ykluzMrihHd0~bsuDoUp} zVW23&LUcpJ*na`%iREojr!fcDPwpRFZh!J&)ST>m^EgAxn&`kX@7ev2 z!)FzP{_JO$aq5Dy@z^4z6jPG>@dsA-%RFCWVkPw)ijPWY?y0}wu#ZDncd_NlH^r@j zE31N3O6BLKrZSYXQBf+k!~FTQtRd1)N8d`Sh)K8#L9>{<>~B-pQ2Qo0Xp__j(W@5f zQY9pD-ry~rfH;!xNecdxJ;A4lO8(taW%j$L_AA3Fc%vF%jQ_(oIDyOfD!MnQ9N?g7~Rl?UrNfFa_zdbAGgn-!1wrr?OYZ=-A932)D( ze{H{4!^FW+9PXL0m}SQ0sOR|u&R8nAR-$XkP;ujRra~aB|RO$meC_zg9gyU3ohkpVClrvPPpfd zpZ@0cS`9fCiYn>_as_trP#5lM3wpG(iDeA0<;Lqu$wz?0nJyuRvc};_Q^l<^Expd) zo=yZ}TZ4=*Nt+q3m4drbQlyoBvcA5$3aY}eyzW^|5uO=X@|!sUYSNtve>-8?4HM?- zt?Syy42IdB&wLIZ4qiqfetFq(j=zZdNutC1)Xw2%4-k045N*&VZJEwyVL)a2T*kMU zJI9=7Bv>fFiD_xOcoU$zlB(r=7!j341XV-U5>c zZ~KGCG>r7x{eDW@ufAKRQw3%WIe@OI2!iwk6*Cm7!H?`mX#lH5U>KP{WJJJEq*S_7 zC1f81=bT@U0gu@fT~S5F6FGY@14MLSy7C%0-lFSuI2=M`=r>h7N*?eLcnAcpbaxbv zwKU1EI6cbI>O}eFbSWl9rGXN|AR5io=}*!s|xA3al^SjR?jPh*l6{1$X~UZEmsDh+3G8~j?hJ;rpCO;mr;KTUt$iEkv8xl2><7kk5J z$5jq!h4WgAPL-+-=@Gmx)ong~_W<^9#SZz12;$LZN!oaa_312jg>iGH_vsbbDq@#$ z%5hn>a1jBjS^U!5z>dK}xMEdrHSuafg;90JJrhLvqFZ zsAW+c0h$ufJvOkz_VfmqW9X7T5=g1$NC4S3V#if@x<<6(7C2JG#Ct{KpbOfc9)OX{ zFy%|o(n+-p-lq~Cj2lwq2bYKEY!zsaC!6y)?ZgQY!mXR8#(xGy2Yet}ZzJ}J$QVV} zaVJ5ZLPd+Rhe6z|J{&JX-S4CDkE>9aJyAN{M=-Z8@L52k0B9vJcdv5aE67hyN!cIt zgcJ+J{_-+Rgbfa@L@hm3=Xd(#=k`qtwF5Kf_GutG+Vzhq(=po0?dE zNjCHE2lY|nLw%_mh{^1Y=YH<{zOL8R$L0NB&m|Kb z-NV*CZFJI`xj46T5t}P)OjdfXuSm-%SZKP$4EHApYOq~DD1 zV(60QmV>HW;nvZ#)NHT!Xn9YZqjYgKVYHsvQ-Q>N8;p85R!E}Tg^rM!m!W6^9O+`* z#l_bvX~*Ijm|jKa3>>)CLqGm1fxDcMyBr%1Fb) zqigyj5dHMWS`(6Q?&&gJ?yNc5joe@M5|bl2e79?;?NeOHpR^_?V}}PQcD!-7)36Uo zPlH>AaeqJS{LtsycGS=c-S)ZBHxxrqT$xmCmgU@Ly5IQOLh$c99~NT5&gKJyC*KuF zTx#yoafQ+&3rO7qDo;T7Q;~sjAZ+;ca%Fw#ncuB(B9H%vB2nQtPW(K$u%-S?efn*J z9%iaDsB~Y5vWu*pYP5Uq#L&Q{?^gidUMVlm+G*KEMbP2W)-a@43X-6)e#D6v2@1@#2lyu@4?0O>nuz zQsJHt5Z8o4x(s`n7;SLeJx`T_&YwTTqx>6=A$_ga6-%F9xKM|fuS?X14NF(uSbvo3 zD1DpXj993Yb*~D;GfNV3;^~Kctr!=fD7o^DD_AiF3TD-f?_A~x+bESiPGf3%1JB<) zFt$oZoX#3VYC#2^E6|!2ECuac#tTeN^sq+eM0u&8B81xIeEbIzj&(hCtPvLxv>Z2& zII-5vS@~#|7nMcRj@U|Pp=ZK$C=axMG+4mB``6MFJ;hRNI!=9Z%v8j4l_ zpngc-YV8;ZJ8~c;G>(Kh{4WMu!OhyJg^G1hC#*C(3Rv=tijlY!J{w(6+~9V^P;G8n z!aMIG1>-gxe#FcH%!x zToT-|mOBEp@5v8_BiLQu$enn`!QJQ8nh0W0FY9;b24W zwAYuH%U8p_Z;5H=4ZYG@XzbKt^hv67QG)72PwkZr7tE7Ykx0XRo2m9iWW{S0bhkyW zoEfyPGz|v%Gj=oDU$;-b9E$J8skC-}zZ-Hxpzl95i?jbxL)l`+n6SX5JX~SMy;~9~ zAgg`KNcpazWE_8?4=z3(s`bRe4%pfsvwd8>Oy9t~58Q`w%J&v5-IYEQqZkbNxYl2z=}8`_^)Z*Rf|T9$7K$HZY{R*?V;RTuT!O1VhD>alf- z-f%=#7`57q-9-6LQPA7Rb#KtWezZDpL=!UyJ}S36D^(KX&BY)8RrVv>c-P|szROk! zAS|9vba@m7vwYM0e)m+wXxv*KyU9m_C8MHF%X9;w*Dc=l&SE>Ls0fGHB}VLkmbXpq zsCfxa7+acP> ztX;t-zQ(vI1NPBQ!5@N<&SnJsWSnsqOs@z)q%V_zlu=3r#B?$>^NeHR1rBa-oPi4h z%uXO2AiVOH0Q&T!q$GE^h!0DaU2YfW^@tt3mR5U&P&x`jX3~+UMhbFK#{^lOXhzMj z`u~G|4MSE$kf~+&&wPc%ONj$c|6ssnLZ~It5%K?!OC%B08VI+Rp2h?hf#d{GC7Hk? znCp{10narINr`7unQ0&uVtbY(NT_{A;=QM*1!aV9fzmpI=i31#*2_qr4x{X2VR*o? zjE3~QFrv_G&;3Nw1!Ood?S1SjlM3SP_i277B!j+ziu^$77S-z@*)(hpCi&Th<^^_k2Octa% zD^@>yENK+_rUG#CS?qhFnDKYi`%BYnc%Eqe*r$;Z-$!_eWN7!Xk*aq0`C}78K`9
s%X{SSK%__sPC7$6(Sfq&;Bw=!-$N<5}^r+=)U+Tu3$)0S*~F0O|3wrLQ>0y6+qaKI1-+>CwPdsV2|hVD&wzh1bCH+MPtuN6Ygk;*b8p4IHr2I> zZR~Haq`9?VyW$~8VjH=}NymK9prf$d+uX|W%Zo*kGSpIU8I40nV?t;z6f)YE33NJY}Xq6#5y2 zZ2L;Ag5FkPgd;n~IoRhPoi`-ix{BR;9#yMrmwqC>k#$88M$#7D6}BVeIN=m=>62EK zgx$`{$HCV6!<#86G0Pk4h0)>pF&^9GCKj@>UEO)t@2DH}6=2Fu;A|RTtXAkGk6}w~gMH4E!}^WZpETN+ ziaaeetYZ>F7w3m)1Pz^wdMG_|PfAkPM9Pkvqe9Z&TvfX{59`5D*@UX?6 ze(M!o$BYq-bQLY~?*9NGrOmQEJ^TfvYBI@SwmH3k4?Zy@r(+zDSa780ovOJ5g&k`z zYSOu3Sxcp+_8Q`x%--P_g8PW;tWj@y9_`C`L~0u|{%=vav&6 zy74XScK&9SVS8|qgK!Jnq)RU2w64iUYPl1*!0u|{PB7IIDau+ib6?e?X)Qbnrru3ssJg;}TcF3DO7diEa61#t zIIf~^ro((mtoUljM!3;$qtT=$GK-5zZSLk_^7+o_`13RKe9C#x(xpY-`u+D`kldB6 zr`@T={5mo9bsva`@@QXamMeULBSnO4f3z?& z>N?{THlw&C-p5JczX^D+M6;e-eKFM)cge=~k+N_Q5)=>s1RP|ZwKAM~veYHm-m}y- zxfws=L97`$(d*#vBM?Zy~JrEmMs}GV6Jd50rezfim0_~icx9U(A710 z?UpS*=vk^wwb?CJ6=l!+pp^u6_2AH=gxNXq4~9Uvvaqtg7XfkRPkp=dSmOYJ=}9Sd zYwjCy?EdlI9`NR~tVGv(7N327VM4|$OG%FN(>V%3>x|Qs)OTqFV&2KKLtOZO;y(ym z!7q!nd(AKHA2dqk8L`v?6`8UJP}nq~Rx|ir!c^RMRxu;ibwx$BOUuZ%heS^~fC&6D z?P72k51SooxfAFvXWWNQwZDcYniC@1GPjvBM)N2D7A1m$NEq$+dY%Ohp(M{hi^T1& zX=&k)4(p5JD`=urhRt+{R#-P>oGjB7Y_CvPIsGdY8$M>O=Y7q&uDMgc$g?hsrp0d+ zwY-{rwZ`b9xSCtF7b@;~1_xDfwEg0Z$4%I$&hOXDO+N8*t91Unj9(JVro(=0{5h^% z>JvsHl-@^dkr>%B90rm1f~~;8DBW{T7i(2-oynb((cGGIVd7h{bp_SFk*~7iInB&) zMI?&23c@^vX*tVe47W7C6>ZU4N%ntnQ&5w}c6Rf#&#GH_F*3*`)hBe69#|?F7&4zh z)O%B0k86Fxe9OPya}VNCs4net0cR5^j3u3vY8!43QbF8*h~}@B+kPyUEAROoPM6|H zicM$X2`?>erd3OuX>OWm<-y|$K`ZIO{Aye}%HMHHcG~E-r}#y+2Qj6D(njjRu29BR z9D-CSa-(JkLU(?2N~OAlVRMy}!ISAyhSlz)NToP}Z#pcn9ZM>ioh{JXOat>)I_t)e;ZrXg!T}Mua!|iQ8r>EcQ z20-mI$s)JXfTHn{;aN4KE9d7lScD8~5*a5!GyNMo+F?KbyXhnDX$aSBQkz?X7 z66=_UN}lFm&R1=rZo{41000j8HBJ$ZjBm8E!KYf=jHD#!2nMp~(6g6Ag*%d_$txT?p@D`%SLXmbXo^m+S$PAOYX>r6l?d zSst6CUT7M=G+iRzMY)hR9{ysn1p{&1QyJ(+FnK+30?9Yhum{ftLWdUS}v>Pb2{d)q1;A3$*OAiQ<6DyvBpL?!YBid)ubaX zsS_zKjhxH)VBEnq-LYxjB>P0rOcZ%&cvg_J1JBdiub-ixCG|%?d4C?4`{@+h-AswM z%8)vR9YbTjduM@FxQ_-Fhr#bTOD8~C8y~VfKZIV~h?8Gpvg>f3U z$VViCdGwS5 zzK12_y(d**x{_MFcJQFyW}G{X$GT*z5jR!8<<92Aw3%r?zAyFQ;#6&T^9YRsLp? zj9%{FBddeJUK^enMYHR-mobl(yofF0Wcm+a%`_#+no0Ku9T zmlRib_Zp>;op(e`cDDicoE#Kk(ABBQ?Qg`F1h>E7b9eeY3wXAE9k`zNdLTuX*r2k_0ErM=F#;;kwPFGgc%nn~kOqyl8}!DQf$7-#aRb!6U=dKK)IwUQRg!`=>s z&90;3=!naOn%crs8vsZLbKs4@cLIk}eIxg@3K8os!09x<2KYMmQK#DYqSfV;fEH9} z#ELr*Z~-mq)e@^UuPITd2egiud=s>q^|bWWtXknhuv#~zPzpIL%uYJxM{L$_ z7Sg?+%(aJ4sxqedYbwDdowl87l66%A}<8yH$+uz3nqNFnmx44|2l|uZ21S5tlT<7NGa4(ut^!u#8Qh8K=tN#GQ89pHK zjg*n3Hn7~mcLD{JTu755zDRI|0^l45@5yg!aHjf-Q@PGBi|pftA(qi)lyY0maHr7V z5ym@btzRdZ9R5X7;!6vOlgZPdh9%27MpzfX;1(=#&pcD*eZ=MDb$%82g?*vJaLsXY zt2Mh@pCy3u0XYnePT)c3uhz4vK~L{Ag;x^A$Bu9HOdsv7STYp?Ii*5`;0?fF_3C*1 zX(}o`5IU{(XAXQ}s75ElDU#uK%RfGAs67jka1WsVRj(o=ot&}1bUR>qK>~xSjx$4c0@RvLqZ}e*ZrB+F5sFtGi1fV= zQ1Jt_I$T@4wA}2>BSk^UV(vf!l%%7$D7Udz&%^qK%iUgCMzUJl4f4(?VFu40@?PXwYE+g`WcZi%4GwYrxXfAiY z7`eBzx0$r`wz&a-Ej&@qI32T`R7qT@vw5|>R`zC&#&{rfjD*B^MPuI!j+HJc51F$c zLGe}X<(pjUQCi*HGqg=4@b5SW03jzJQ*d6MfTlL{#1oh%wOm`naAR3ww*A^j5amOt zIBlnl&Ymo|Tg&T>D@aI!?FgndU{5s;Po(L3nEu4nf3&qJqmnNsI9@cvkVBbdDx)37J?dw9EmewzqV#t$wNC_i zPs6PoekpxJP}G`5p5$q)f+CDb+w&8~?ilqW(um4a+SciCaEx?!eut%B_=?BH5JjSV zJJIaJ@RP@L4ZX9&8SCXZ;E~RA*S%z*;jG{0Xy&J+SLBZr_=9I@;r%Wx5XmcQFvtOq zay)4eCt-J9uG#21ckNveZd&v(oOyKWc*9M&g4pOkpY*K=J(Izn0oJ@)qV{;ajS!5z z&A=%GMmQ`aJZ)d%J-T&Iz z#?w5K9I;g#AmLRp#%n0jP`uvn@bWZu9PJgd{;qbv@Tv8i2%6>f+mMn0J2l)wNQnoX zgzP`^ZjpD@m_|Bq6@oSQ&rR@#hgA)?Xct)4z4&Gea=6K=C+Ju zEq1Y#r6s24SK<4Q8+d&L*8UcU$QzW48-NYlu z7@O@8eV%5XL&R|+mR2Vq^1`}SBF@rQZ{}j?-CjDQ%Jn@1QoAPiR?+Sq;{iTvc?zgp z4!sR*rn{K9vz)x}&ARN5>=H%10L<}7y?cN_;B=;)#bKkvgGjgz_VSt0vacGk93D8v za&y!3qTqWc!dqLb?-3>S$}|lCa>r{1EssLD>74YeYrk~XioA`_iJuVl%`3!Lmik51 zGA+7C2%pPY4$Xk=4#PV=0UUG{G-)nfN~=-xGmFu_D{B_lQAK++Qt9SQ&k90-kZ?32dwvzn@X|*@uM?2fJ|~#99Yw(DbL+%!iT(_&JRcNJ&uiG zE}yDj-A8htG%>|(Z!~>*0!fs*AsmpI&pcMLi*NoP`ea5{U+~98bMX_yGBxy(YI=b) z`7IbWHeiVYfWep{2^Sm$8DdWEwF(l`Z@vEjUwKYz&+bNb*NOBkb6(RDE9?7%8%7DZ z5kP+MJR}2PR2^~i5uDX1w4UGBsGO5%=yk6gPM1y+Te*_v;k=_4n(E=3jAQhr8fw7i z?nyt2H7FWr)+^N1;fzfIk~SbKe67^sNnVGy2A3jztUhMD+}qVWM0|gw=pH52e5WQG7;&D=8`iUgJ)3ED)qbngxlh_8`)L0FMtOF+`W>Y6Tic1< zSO$sW-LZ#Lx2^|a-nWhVm^&jUZjYHJXz$FJ{m>1#WrsVss?=9UZ{aID4L?}4)-1g9 zGHx+>pq1VuJC)a`AKv<7n$CA>#*lV*JiEl+F1hgxNY~c(=_*%~!D3dlT)vig$k%H49H9!J$e7iVre%_2hTQ>rd+Is~5Lxp^4%z7G7W6 zTk2XSku9bCX}nxBru?70tQYSg>4y5%!kx5k=$Xy8qB?CaQGbX57kJUUcV}<98RX$6 zL&1&5K4f2;N1ie(IWJ}B7t{4FKfLmi>PxMBOaB0bXs(~GLQ_*{R(~!9^P}2$+#hfR zF$V+=nD?a`Jld^?D!jTg%;osqe3PnM+W!Eff(e^uTLg@Z3=Tj2b+@oaUfG=*>!0wQ z+<7|Hw3=I5MzdM!4gyQ&1CYD74W#xRhcvl;n$uqBeBAr!H^y3>-k-L6tII7~+?79R zwVVsG`3!#2xx*>x@{dE-ifMVT%j6Xs?w{xLC(v$nE7;opdED6Q3VzQth3*$_?f zZ&B9Zw$X1)^4X@=o#ByVmE|9KmGA-*J9HG)1s8M5qH{WDn{#<78 z9ifgv$vMt=KGmXvU5IjJ1F5v4A3V=0qizW;;mB6?`up~$$}5*Hd_^#~7HuPW5iw+s z?N|pRk%8;!M=wz3dm8rMBevFzdVDta7NE!F?zm6m&Nn-fMhNMF*R4k_wbZNMO$p`J zd@-kpVAL+-Nv+$-5dE%aRRrOS#}rA0?l8@tN?!N$zs!0X+AoioC>E6FR(ad7Jlk*NVAhB!uJBkxFO zIpgKxuJUjCzvKE5qDQazBUsh^WoZt$KFMQm``BX}E=gh(GQXVdvmLS5ucdR;N*aHW zy*tZYj)zj$bo)zz;k`oT?zLO2!6ayjwPemfGjajrf(};{lwRva{d6hGEgt8bd`QtP z?d0>If>-wC1gjzkN%foeT70t9k zSjl5?CCp$E$dIlX2t0H=`qsL%XQ6jiyzsW69589Kn>7WW5oEKL9R2KLJ@L&b^DV*I z?0NOmXxonH<+*hL2a;9;0OzKEtyu@B*?d)lUssP)v9^jxS~P34k&;P{~p2cVX z00<9`?mw`6KYOfQUds%geXX^Pxmg1)6}-ag8H04m=DC}x4O&+9XF^b(ivIv|GH3ms zd~K)NMSbDz2Ud8@g?CS75h#IoFPM=_BS*M@3#cQ2dez4l2fJT?_4ko1G?vMpdj1>K z>;r0=zL{_mHh9_X^!X!nRR@2Vb`@Q?JGWyMvYLB8#LJPb)BBG+BTT)5ePVcIg`gOX z0akgHjy_PJ4u>Z_D@}+!J5aFDqtU*=JS%Jcrz@#Cl3m;@h_T89W@QBR`AFumN%LQu zPS!@Pt6JYPQhjqv*XB#r3prvnm-y=4-rq%QkX7W?^Kzm?&)-&3LF~*p{OdQ(6?dDNkj9LDvl4a81yE(;Z`%**yfcdA2XfMw3sjEwY5}|+9@X433%M7f4;#BV=SZJ z>sH-}O6FgSFD!f|s9tz}=soPqBRrExHv$|6RbEFU_>MaCrx$f_lC!a6K%Jn2?YBB@ zyw=vq7?qkK880%iQqC~Pj(GWap@98AQn9hPxf+dzopTM$NF$PWck*Wb7hS9{M;Ts> zdeW3{*1(;*7W`QHey4-1h^{YT0@g8U30YD?2hX`r%om_cV{g3)SR1*mq05Qf6TNzeA2`+Tvn$Dx*Js!r)!!^nqd&Iez#S?6I zR2xGTZUEiSQAf4tllz0&b!~m+`D`>TH%yM^)n5BrdD(ozlA=noDa*$bu{ps9ciqXz zII2zDPS!YOGx$>K-fOEkZe_7z%M_BKlyj9_Chf&fJe*Z-M#Pqy&C$A&?#MD-+%mf> zD-bcxcmo5B`}L**&!FkCXIoXMeFH|XT2~o(&im<#(PJ)kiEJVKe>$& z5U@~PxppLxz+J#ma3Qdc{{U2ZEo}|k+ra@XHMDN=ph1N#y8%^?893|Gi;XLk^(!l_ z@kuC{%oCU@Qpss&XP@5cax&bN0K7Bad-2K(6A z$^QUrWP|`mKmv^V9<;ee*@K|o*-0eV9wUf|=NVY-qA*6yf(cx6fKP5Z^Grsjz2Z9= zk|{Ku2GY!0g-GUUE-p9ol3&bh4c&mpr6iwMa+^Y5($Y0FB`HHCkp&8>G93It|w7+v+OL?Al z-XXOKaiqfni*}J25?D}t!?AD+ta#3LoYuB7xyqe>&fSicXP`rOcO#=L>E_Ln4l%Ij zR<26FKB7U}KM)k?Bo7fo`W?bMRwSiYaf6rndTe#~haPn^losHyiTIt^2hD)p@8@ zV|!f}?4I^#m)hG(x8W_eTB;TvaRZt~D(xFhF4v zYVgR)_D z*@>B?aT~5TAS{?Uz>H+@Ge8&o3$06~+iMbO*RNp9Y_b)NOEu9lD(nn+Qh@I1oN-en zai&|-wH-G1R2q&azEy+HzPGrLyGz?rGxoo`IJd;Kcn8=3E>LY7Du z9$bl*Wpzvp6M^$~&q`9iL86v}uUmK?%TXHWE2-T?V2<1(KbBa68CVnCV5tPtYT{1E zL1U)bU)n*a_`=fa`tDEl8ajqq5#U6b?%y#Ts#|+6ylF1Kap`^tzFiV^()?$p zL253Te)`yv5*bI!44bkE!P~o)E%LvuXHxB5Ge}uIQQPaE2`sH{AHet8l$&)xq3ma#GUe)8pO7-AdI{{UXU)~1r8mZb_OSh;3}O4IzOkXLSm=CBKY1;gt2~ zJPg%xcF;;kPkCc=HO0KY3}ODplgMURqLAGgRk+y-Di&OIAhGqxsOj%&J>H+@baUz& zlS>`fif3(O#P(4&)|z5ZE+}v|gpdxVLJv73Bi5HHTWGqJ zHuu4HnAzh6%aB5;&Nw9XJ^NKtk18f|<{|KuSF;DQmNky%808F-%8K%W2tH6JmH_jU zRM{yWae1O8#q{^ONb@|Qz2b?-nG}R^k~ldd_)Soai9BrDEY?=~4feYam$B|r_2d1+ z1Ie~TIOTa8{*^qp-rv`9oUOIbOVPeC{7uv6x7YODO7=|#(fr8`wZt(^J{NEAhb(ZX zg=Ju;kz)?Cm^v@n^(-H?pi+;U$*#UA_}fVPL`L;)nkH401xH_-90GV4=zZ&7Wf#!P+Do}1 z_`Tvb)2=mJud+h_0K1JGTgM|7L~;ue-P`zmLC-YAdT)v~t2fh!gKQ^=TFjtJI?0h9*3QyLO~7z)YHieaJ8e6| zx851j>}AmPThrm`pc9j(&XT+@C*KmpxqaUFtlLs{w!UTArN7*Cx?_0b!?*B3;oU~_ zP}FWMzR?|_2*Nnr;2Bl&yNdJv&q4vEB?&KiXjFNV(CZ}eXT^(axovJN^)z_lRwXQB zF@jW(11b=6=rdWUQu6!DbEv!h#&q_d5PWkKdVh*;Z)_3(mkQCqfs=pAJjGux10Aw` zF;tu(tZn^$;%alzl&(QQI`Oy!h%Y~_2gpgD?r$%l;B+~sCt)RXTU^z3*&!ND_PMBDSX+MP*(1J@q6@*qXb3xh4%I3V z-rs=S-q#C14Qsz-FQRCdl20iNZ(7=4G>r4MM_@2}@%Yf@y0B1hp@DCyTIusG-lQ&I zzk*H5QM|WOJDiN}?^U>yvAyBX8cCpPGTgy9+HiAuYaQYdo!qPZqdwhoL8+7!m4_L) z>;C`*+}3^}UwEcAxzz47#ef+jju^D)ZI~>NlaD1qP!Ax6$m9+VDMFHl*ZbQlRUEgs z+;CSn8dNe%HSQ)!Q9}!UpD73aT4x!@P0$lHL3?l4~teF(6RIUD;$C zNI*sh%ipo-Qz)q`OJbthdKPSTJugkT16|VNy9as}X+ufp4lyxdw19F?89j4NruJZ( zTb{G2{8aFMq2Y({zlts)m9+U+>?cT#ywDhJV2;Ter~n1zoy(l_T*{P`xue&6oer#A zZ2E0uBL4uwF?d|sS@@pDdx&n7OAYP1G=^x%1RQSwGW848j2`u*YIFQAZia53F6h+w zf#IJB=sq8hU+`Crt+j1IUKJJ*TFDH~l6~^UzVDa(K=rAmQc{(r8+qJwgi^Y9K4sP~ z<~az7qu1F}s&P0Areo*C8kNdDUdQZx(lG>IL=(F}UJjiBfCq~w<4QEb1dcqd%arxwnF z7=%7#(oG~5im{WRf@L;|wVAX9Wj%Fbvi7swrRR;rjjdpX` z15M7|KO_n_>Mw}=ICMC?$ZR!toGO(Gr#x{IIuLc z+Ukt1K~c&1G6(>52AUZx^w8X+>#@je6_1*+F;e3P3X))eH((yTbfqWQq`R5=#*i&7Wz;P<`K>;|W>we- z&+&POt`8k4rXx2@Ga{Soh(B{2M6?-YGLqN|2n#Y45M%2(Xk(7qaL0z0n}YQ^p01dx#VK$2VL19AC49E=K=RVQRM zN!sk>;)=pq76@c}vgPI*z>t()yO<6J2R*A)W=#k77usTjP4lg;m@|_D2|-cRC}43@ zsPrh_-^q7k(`m%WfyyyRHb^nwc6;}xgkFnA)GsX8ThvP!;zcgkg@PE=9A~*XJYttH z?B1pe!!5ncYYeusNW)+T{A8EAIzuwu?&nc@rebzi5#hR_;(w!$#xDwh$BC;D+W=+@wEX)HFo?7uJJ&Dj_3&g)zn&YOQ%R@j4#V8ZCOD$Zg8ude5~0%qO)?SmGvzsKE)j$ z!rCRoQeF60LB3nKE_N;2%F3cdB(jMH6<7>1m0Xo!-l|iQ_?p{cC?~Rhq@E?VReO8y z9eAnj*eMWO{i196f-Vci!OE5=Bptq#p!!BXphCT4{j=hg4v zv5cu14vOr%zHi}TcpYeNQCE}ulVFr&?G^XC65V_(*Ncr$#Bk}_PV!8WLvwE|1(=<` zEDs?c-5q^sScvSd{{TP4PK391MKv#i2adQsd(Z=~ zbmp`OV|H@Gk=u_`-hei|GaBB##-KEVtXtWDXOwUIJ+g6^mtZ4kJxR_zDks|ZxlmWu z*FCTM55!u|oonI^E*lGd24OPAa~1q{kVq~60M-#Kv91($&))tJYoFRiF3$JuYwmB! zDJ!d6)WWmz)}0c0H*@A_@QVKcJj&x43?vJJI}SbS-6znMQFSlFuG;vDAqAAdZDczd zZzv*}0Ux_pn_y`&akU9=QAw^*--Ykd z`WQYWn&$3hxqT+mBn!-L@lC>Z8w&ipeY({{)KW1uFBr|LUoNBe3nmakklMudsA7Rv zCkTs$!6!U}@0t`Wt^IxCa=&l5((t#$O?C}ZeO~8KnrqqPSWNRON>Mjw0c2KCqtQU) zic+N(tzwl%ozBuvjh-b>GTIy4M2Q$;VW(LMa5{{bxX)AVQT15%{8?XEm-LaIJ~jA? z)GXs1;`D^Jak>N$T%j&BlPOKvYU$WfAJA{lJ$*4iVrc9r=QD<0?Hnxz!B z6O((Hnoo%#7awSynm!0%TYm%C4wTv?qMDVhkZVg}C`OPrM2pr#k-_KdOb=4gd|~ka z06~C9HkYhk>R@I`?jGF3o;PiUNdEwUf_}BnDAbePCG)@DZ5csycP8;S#;X#MTj&<^ z-AKw;%+*p6V8rKs9nkC z5J>rg#zKL&pwAxFYL`pdc0{_Le{ret7fN9j!r5F0l}MIfwZdj%djRXT6R=er15eq$ z;^#!RUMSI?&P$uei7lhgm1Pd!J&13ROvHTH?}9Qh#SSk20N3CpByd{SjBYihlGPYm z+0MYNq-2PcFHe`h*RE>R68``(IW}XwQUDei)s%F`GE(ocU_oa6K11E>b~NX*vOOE&4~Qf1lli_ZlJ3d|Ebzr`W=hOR=gg2`l^sHk{MI;#Ij?rl z)$D0Pe2-tjZhC&N@l#K_w3_Kcc| z{{XUG-K6T~z)m9~CPB5xJBK41R|}C_R8GpB*O``3$MDQN5 zb>ZCtrAWw2#7i{-3CLv9(|L zo)#gjt|YgLY2S^j$l4d2XQJbpw<$%a+fMqK^2SNK>)6up=8NIUp%)s?rDdkvEZH`) z-davsMlg4v!3U<^)TdHi75?(0PA_-)8F$(}rKRoMR`!Xg#+NH`1?+N0qvlVzyGZ$W z^Z<6nTx8l^Jcw~i%;E1W^hqyn7T-#`md9ewC)7fuyMV)@mH7hh$pa*wD%I_-f@J!*ZYDsE42z^+bal3V^KU8URJ z_;&kI_)n>6NvFJ)C49LqNgy#UkGp9Y!Qc_vp|vEYpHk9sZVhzqX82YaAkre5Rno36 zt=d%$CBme`X~E}V9DRAJo7b=0OctFEzR;{zi3vJIx?C_aM$;T~&(1`BPfy0Pd-W}C z(A?9flTT}l8w-6PGbwTbkdR0?&+hm<4}Zdb*rwX{q&pGNn<+qWK)IlkrC3gtoe-fpKQhxB5KL*))kFl0z56 z1KX+2YUM+-{7H>|jeZ4x4tOH+_glL0cZbfG6{e*F+TB}DCAVxz@{keEP?Pf!oOcxG zRVB*rr(MMgZM&;#aoRfHcvAOK@Q$$^oy1mh<{2I~l}a~55k@&z$5YgUTDQ)WmGv`M zgXL!Cq2k!I%YU@V9g5swKa%z`pgzHiV~<)&o%{XeI+pGC6fJyanv20_3@`|;qLGWG zzm`>koP|4%dUeG=XJUP&&y=oPFfTt`_Zh9sOIjVsx4O2Sn`*~%9EE@cfUXWe`chzh z5vBNo!^6HIn_XR5tgL5Okyfzo`$lNd82C@##WW@W6-A1rG;DKM})8D zywmOhd+1`fjy$6tW{pS4HlMx-%JO<0D-RT=uXJr~Ztj-=v#Gg>8L%<(kcT)RlaACnb`qW4wK6AAG`00 zB!N2~v*7OpX}YeHeXVQIh~%>Ke{yAX$CRO*Ha_SifTZ$I81GossMASxHm3yBY~pmp z@a3+w+Lws*T}FKx;>|wKZKvD=bg}|+Tg+D6qywCCI@L>>+BJVYjN{9FQ@4@zPK)r% z;gV@Hc&_I9Efl@8s_D1VCH2z2-cZL6&ayI*ka=F**A%N%zbaSrS}(-xRH@qUPc8od zrg%1kq3J$2)n(AlljwE<3AU2!Pq}Y3^Y=`a;hA&QLk>q$E3S1M75DkC)aHy--M0A? z%lkasYPVOqcZD_mJ?<^6(&i{{qMpHLVIw4vM|=$V5LgU6p-DOP3&{37)`S~2J`H=*E&aPR!4H9-xV})X5W@k1<&n87#@u1pL6`o|L0CA-J`<&&M>{Y^`+!*7M+> zk$@l%sn1HXPgn3i#2*D}N_5{HSgaS~SCndKazA)}>n8^T+dNl2NKbgbk-a%XX)l@W z9vAR;hi~j{{6nU_D%zUcUtjnHrx(7SpYTr@zP^h{y-i2LdXJk3Q7WN~ z#_0VDkV)OgQ@|viD}B|Oj@uVk;x@L{GHGK_xHb}GJ-Ag=Y<0*3k?eC*?A7mWO6PX5 zz2P4X_={h(xsyQDH2W<)AW0T|LK|l#Ngy&Y2Ofu-RVJeKPwu$k2Q9xcJzGT{7_hv) z)SFGZ)X_5x*7r8?$Kw%I#!pbJePJhR(jlaZ6}{PYBSqgO}vFw zQ?*LrPJa)Z9o(CJZSoRHdHl^iD)QFGRr7zaVv^!lc$VSC!9yyLV`SxlvHPL;? zn_BqAyg_?y;wbuNnb zO&0**1>KL+r+U#e_93foX?Ry%zSL)rNU*teGO~t}WD63<>x|%%cs`k>D{c`xPZrGw zhpu6VSD8|OIQ^m8l)`dx1b9YG5B)QRl;VaU#?LOm7zY>Vd zsR5QXLQoe_M#lan2af#IIjh;Xa+F=JLt*g?QSeI33h6d_ov-gVSjz-)iCx!dVsX7d z>xkS2BauYtsr75jAyvbm?LXpgiA46dH=YU7?_o&9Fa9uRD~gyX>Epj&oF#!wY?T3j8JeJo2A2AKIFcdtvCPhyXa}2d6!$sLT2P00pQy zNBMsiZuooPzlHC_x{Me8B#O()ieDkLD~v-kE=*!sRGDK;;IQk|W|XVSJs182hZ-?@ z>-Qa3gLG>T1zKO}o*C8TxsrQT0_|dvVG03kTeC1Cea8cOV3Cd~PV=?b_2=X`d$+Ux zyu8jf8TISSg^K$3#B;)*zw)MKMU_uGB_Xkv>Xd{AWk;z}a!E=FteF6H_PNhq0bP$9a(^Egie+&E(tliCX;tO=L z)Ld+NqnRT=E^t_KG6$$0^y$``T55$lQEy!jCh=a4qv^I&*)8>z#*b`Z#AVEv4io{# zP6!z!dvqLETqNG<-|#u76t;inadO&d`b$r$>2q04Z3C(-2>x=$NG39aZVu6tyQ-7x zR-1d7y)`*~e_lxyZ((tbg<4RaN`_@2dBzSuyiQIkk`rc@nEIWX#_(K8WoaaPe|tDp z5p3KLfJs%6*K-UF+y*qAm?qAC@8TZ02D2uitv=F&jE}iDc4j&73HF4mYMRUScJhSqw(gY`INkhmh;%&s}T0q!fcjXX!0UHiZ^}SRT5=?X;?`E zCB@ajm@5X`9D6{{0UMilOmX#~4KE7nIyH*Dwf>&Ei80P2EbN|Pa6Gjk7+{9S76|6fR2xLY-c+BSjXZVj8>O~|B&9geC&VcKu&KhHU(n}?~ z62VmnW%))}E(;PqTyvUYHsscIt8s0j_+=jIIg=qwO6F+D%9c)y1`lF8(9qS$A-B}z zabb58Ez(BsEKy4wFh;of7?e|j4_(KT$9fwJ9NoRQh%^mFFD;>x2_cvm+1XCX7pXf* z7*oMCJw$B7s4lOm#{M(;?s2h98;K3qh~mcMoM)bRqSiy)-kU(OV07(X>iQe>m7Yi? zA~je`4=sowvX6&_22-0SZ zUSXpE1?*8@=3}#=>6({#?XTc9XTF6!H^xwD5KV6um!)00u-h&A$l=rzv@Cmqw_Nf# zrsICB6SqQZPZ8;tcL;nzExoDLo$o+Hr=nhc84T1PGP&3qf2DV14Dj+rHTbfqOGw0e~pB=uSnS?an*sj2Aq_tNRs zHkV=Iyk(kszRw22M&*!Txo#D+L%Kp%Z(Rvsu(Gk$2Z?mTQqoC^MG?F(21g_*-wD7N z2ZDH~Ypq4pzo7W4&9y7LPYn1;H9LomrGg}qdG|`E1(>NB2j8e4jZBuByM4vQtL^!n zSBShn;*CnqTkjR=+CPWhMQM@?$mS9q-CHI{+kyVi%rGh;CDGieMfFxZ2KQ4MfsWGS zUA}0bjELlAVG$q!<*I@X-Z(AW85OmRZeg=pUJogxo@=2Y0YFih@x}oDEcfY54({hn zzSJ$#R=0Z{62+r!=Hle}gUjRQjaMqo#yG`OiHmfon|gjr_2~s$4b2j-P(aU{;NYk~C~(B{&QQ3g_3Y zB~w+9JfDdj(eTt;}NqEh~phsIp>-=?t_-h-_-nbqv)4fR*!zo2B9UwBg-O>-60!H zld_z2;Gdg!&5kO0Te)1xSo4n`-s`tw>PNc%$h1ZROMBKtX><1)AU82q10$dWv7y#>GMFy zXSB9wU9m$`socyb%h56i0R(`rz-iq2TX7V$7) z#D&=JAhFwljAJyHGwtWxG(`sRCD(=EwDAtDs6%OKc_Tv_&2lAWaD?rX9mph(4K*~~ zgyLG!b^9$c(n~Ei`WAsu$lg39SIr7qOM4~k$7G^3B|G5m9HS!lnn znc9EDKWJ?$SXrzVh*&JqrRqG${5ISuAY^);MQ8P`Kj0Vjd;b8#hOPTCX)_roit=bU z0L2_DBmV%vUyup+AB821@+skb%eG&$H-dz5Tuc3-Z*t3wJnb`<{__o?27LuX#mmW* zu+j4|weQ)>!uOJ-T64X=@rfmlLKkxM+@u`+0j(p6eNhs_tLS+~rTZ@HT6dc_hpwTy zg9<|vha=Nz=Z{*_IGDZkGkAF|j$X(1a`DpK87wU=rMdgV%f48gF!UoB&(}3i5f!^7 zP?P@vhb?P=1->hIP=9G^T1z4y-WeYL2H%c&+~J(@+c}~bm`_Ci00t7FDDH}SFO57{ zsrGA!y@GhoB#kd;jdFSreq;pq0~Mo!eGv+8yFA)&iT)}Y^nN8erT5xmWgA{sC{YL= zSyte$9PvjYwX7V@_creSGiutFuDXt;4WyR)b~GX_tFs$h45upH$?8a_wPo0Uv;{!j15skD$l$+I;<+V0&i#w~mF`<}-46EnL zpf2ndz$i)UOb%6=YwtQpoaA7rSoUy60R?(f5o%paTzD7Gyu5g!3W}|9Apmv&6VuX_ zknYSo-A2i5+T!S3e`+GVJ-{qT$DyN{Fy&~oZ*Qhqx?WySr}^oF8MbLljQ;?5B4a+IIHK>f6@)rhhb4wf zcK*`2X=d}Jm0|;)asgs64twPKQK^yygcy6BJ|R9gceT zr+(t}JMR?g-X#`x`ev!(iLYa~*cQsx#jWro#=?sz4A}L+99B?*z3pR3$?bcdbrrYv zyc23kb+Dnv>&unPobm!7&T-$@irVITnL37*XDWy#)S(E#ozcecjC2?{&S(*u;4pQL zDP&^BQccQ;K;Rq@PvJlsT5gqpahJA+%O?OW%;bP`jNlQ^wI&C!XnL=RyghEVS6)<` zK2)C2+Q%p%w*lrlmSqQxqaRw%P*T_Y{{SOM&9CVh+ONboFCp^0MSH43^FQxmvbm9B zI2;|NitZ$3xW}amnp<1$2RrX`nO_`3Z8SH!8W($4+zr}7?8l}Yh06|44V+cl`;*OW zj{e8umbv0{<+q4q(8@Zgh_{xGn91_eIR5Y>jl=_-R$j(2>3{3Y)7r`PvFFY4Kg7yr zDX!{IYc#EddDt=M10i@HonNw#W%m*7CEb|NMXLCg^_t4@W0Zi*^IQnq>RFg{tGYz3 zPW!~K1*~w`_}UokAo-b}K$026*i&xsPlEP4&4hk9xw2YpEPfwY1)X!P{}Ou2in~*0+Ebl5lLO| zVYa$lx1#t*R`Df;$A~m5I8K_ANV$?&{OI;!x)L}5j&aj8I*B_lP;Ffqs5P4_c%(>L zIAn55yli+q4(wnK{{Tw6lVbI!j5TOm?5y%fZ@UCU#Hq(#`21;dq4P1Cmxq+P} zsnTk4X__vWw-Q}RCb9O36`>mhVjSWl^07O}``v{?ZNDO#NqL+F{*5emkjtmfB=+*3 z-vm(})o!Syo_OOpt03rfJ1s9jo$jsegsgW2Xi$wXNn!^-0U zNyy~Vj4l5F1a5aZRMepJVU?0*5yn-^+>+8U{vt>?IIFQY8n;lkK@!g>18O><1n=aM zIlxoE$0mlDj=oC`K2{N1JW{^ng=tzBOn-SBAI_thmu1k)yU-(v<7u?lg=E~S!ZyJ_ z?310u@_N%!^Am~6>Yg99MmLXf_IL+oPCpNP`c>SU8S!ZF-Vd=_-Tv{g0t2|Weg|HZ zF%{a*YgLlMIk!d0*$b#b>T&a-Iot+l1D`RqyoFpg>}@-+2V!{{&N!wAO>d~rc??=r zp^@b($rN!+`#~LYojz}BL%B7f*56RFwXvUl)VpuWuHDV^5I|O9Tk-k|6jXKxCigvSOYz5sd^w@swalkezmg$o zZ)+vAk(i=jOCK^ukRpcXNz zcZ{FLsF5F0wzD}vtCNGk;+@!zhr@b3-->Ql$HUgGHN$6W#=%cK=OlsKtwg4xuGvwC zGqODnKZd?3&{*E;cDB|wfbEjv?&2>kcXD_KEJu82+OqcXmWy9Yn)?YyeGXSqn@_jX zqq|*dId5(Um~5iAcVx~%M{I=y9OAT1x3|pArESha);mpEgfdR?`Czg|<(3~o{oJ1C zil#~}+G#OKy%`!Z&4hid5iofqp1#!X1r0(tqn=B6XM4{egjNh$Nj-Tu=}O>Dq-i%d z*HPO2s@BOIo%a_K5fmr}S>I?av<^Pe zb?x!1#&&5O_L`};mev-xf#SBeK^#hRwL+j6&pd;g$>E^)Uzwt>HM9JWAJ%+9sCa@& zFE#7Ci`m@nces$a-P0jY$}{W*Z5XKRXDK;uT+;Paf_rl$D>^AsVwWa2$7b3=Dtq9M zN*m^+Dvrva3f>S=R$3z#@2fIDv=}=A z>{A=D)N(yPtx$<1)J_SHaFswLfH*zB5kM0Czb?{W6XsyEGmM;lPw7AuXS`V)C_y3Z@$RnOjO!i$t01Cf>mZa`))f_ z;XYz9&0|uuUWu>0n?jpfwEqADvhj|Qug+RO40v|VYkO2xzW&v+v$dYqQk&N(9TcM> zU5*sxzF)jRtm(-u-uqd%fA}TNE$qE+lCkGj9s;=#q`wlSwz1OTB(1DPP2`TlJSuXa zXCJ&cQP5V-t@Mt+m*4(IN}awfKQq@nHSqhxlj#xI>QY^Ge1z%JR@djp6=$#3ux86q-j=30QF)31e3<>Vy#MV zqZ5pLk3H7xrJG5cTkzGJCW#7xCB?~w1Lq{{7~I_d01)G#>sl#U+3sT2ms=hJZ=#SH zP>rPg-(Rh4W@cX8dF>g8=EocingEXG;oVv^%MqRjGyth{7!eF@AxGZF;%EU)_A(*E zG3W>Npb4#RWWOTFVMyS(&PINm&<9#?t?VL>*eqgPVo4OSX$E=7Cj;=opbpzYN#={~ z5?D(j6SM{dBXCG;5uZWF2k#n|#*xlmjb}}QOUwHfi{>C_1w!Y5Gs)xYPTJut$FC>5}qMWl6#{qJEfc2u_cfK`!7r{2t_+LY0 zy}gmu?yjUvJS9gED;)9<-y^RJS;F$w>HTh8?Hv(&z&-`>Pl{n0u7PK!EwFDd&eWnC zNgYaOCy(M_J*sNej5jKsH!Y5b#hNdSG&oD%%c4hYjIAO?8!_JBbT0At%H-g5UQHC| z8EtT!Tz9d<>5s17>c3&oBDQ&mIgaH+q3%m$5C?y1(pI*lM|0iuUkrRnaTUr(qd+cD z?2VkpK~u{Tia34<9lO^os#9Igh{Am=cz=s^o6TnV;ME|rd;3`=SDM`$b1ZocmSdJd zjyM(52&n8~IbG^{!~9^s@RhEI{{RRjo{xIAwn%4tn`L1g%M3b|8$e;yG34aeJHsj8 zn)<%|Kdy$}-Uu_OAi`f z3x9bPE4rK8?lAQ46j@u^v=>(Gb*V|aYs)i6u>84E!(q0beMsO|%{Q@{b~}#&SZjVc z)DD>Fm$r6bJd0=;JAslyHbDUY01-U}XHsek`xj0QdL9L@>Q@&xQyoTDa}%^_<}qT3 zj6$F%vewH(C#jz=iLQmLHWreNu*lNkhUHMhu02Wo=mY6!v@aX@THF2+^QdW4pvs#; zX7SyFGUTW-g(|~8#6~|V=jM!^^)|DLvEaJTgRgY|0QjEknsxQ1wZUas=7?-^K_4p~ zy)rS@w^L7JCl<9if3fLN`6fqy-JTJZ22OL>@DH^;#Crb#h4uKat)zl$Q4xYEZY}0# zakb6|2u>T1ZrQ~qp5sj(&7{LFouyq`__Fd#nI0sP1V`A4ibG)noDWmb^U|<-y$zO& zQ_FP*@q6A+BvRc(uOw`WF8sXticDo!a3l~pAbh78>MK;E*v|6)nWgal?^dw!ZM5Df zmg3&(@kP2%a@*Vn<8j}dkKq9Hsi>DLu~geq)a}hkivO9}k1zc*A8#fjaq>+&fu+1X_CU_3AF5G&yc&wde9_EUb z^w9Ayi9Q&A09MK2x}`{uS&hIlb!_%Xr-8^}i8Zc!E1-y_0!{ zFtO}Re4~t$o_*?)u`S%6Nbwi;ZlIU9atBuVPW8bBl#H%B`f)>71nhA0LnY43c*x0M zIpA`5%`q1(bj4C)n)cNKG2G0~I0vx{-=H)Bb|lln4nV*lZr*=EXxb_?Z?2_J5%@~u!`IE?4PQ^V1flyhj~GZ&d=LbSjQrh84n1n2 zRY_SfPMeOc9!jekpl2 zEV6I=EQm)jft&(AhoPvFwz2;Jhbk`mKlo!V;{Ni^E5{mylH8-A`&E?XW11x#WDEd6 z##D|QHC9icuVVr&Uei>ZTi;7@bj}NwoUTb6w%5*g5C%PY%{y3EI|+5$Jrhr|XmtBz zx^Ztd=29ey;FPyGJeJ@R-@+<6Zucol$j|XV#LMktOOHTLCLbnAZkc0Dd9%#fW|6a& z>_9vY-31Y(qV73Va#lHuT}ky{^lLkxBJpA+T)B^sKI$;&Td?oat(l`AO4o*qCCqw+ zGR1ids;DHR206)YLHZxgjlk&N#&&vo3A{Git-aY*&B4?d24Xq+5Onk`h`;d!_v6Xcr<&y-If`kWmucjJN#tieeREcoiEig%cky25QPbB;oZP*#e=lGQr01EX5Ps>lBj+A)cLc5ONPQUQ|h}15v)(4+& z+1aGt0FZ6K1yp0F&5~O<6uDmaW9D6tO7Pc*wLci&L*Ty(_-;GRLiK#RNLBGQxn4`7 zJ1UR|C9=by^r@7TRofcZOB(mz1~u;vMzDB=E-dfhm`6RNlH12LWr6b?fHS}VE_VZ+ z-t|7&H)Z)1?3!2q03(XlJ{sOY4eWkWLed1!+C0fh1M-#_;0%$FI|I_KR8K-&8ZdQ_ z2l#j+!KnC_+Ro`5Zh-0cR|}AXIGK1Poc6~`Ip0P2pygd(;Llm`zrc-R4HEslJ0*^x zcdJ|4Ph#d+VP=eFivZ5fy>LNZG0$9962&C-zMGoI4%*YH#cCh3-n*db<6H3ogKHm} z8(9+KVEG%qR6LGG4}Ze07>LQ)5h@ajyE=ajczRtD#q>KXxTO1htgzeN+atW8(RZ?L zBVbX0`@8g~DPLZ}6`|DJ{5?Jl)n8tPEUg+xiAu>dG6V>?$^pHXJ#bEa>SI+@R@d<^ zRNNiL=>Gs3^l!Dn73Hi~C@vZ%xwi_j$Hqz6eqqS!y=rBLZ)P~xSJfKY?~Ohbe`vm` zb*frJs5~zm&X&^&StSE{7eUA%U}rcr5RF8({EBjecl`_x5BTR$(rzcX_<7^9z7mq( zW4^O#EXu(T%z!RfY{v`;-RW04N^9PZzC^;Ki?n5@nHI78NLp#yh?er-L-Eb2wrJrE z70sBoX5oouT)A&kQn0sLUO$b-@fz!Ceg_{nkMHl}hFc$nI!6XahT;)=$%f#a%P1KG z*BR@I)7iDW-{Jm5bEo!K;(51;^((v8M%L}dop3jSY&R8)an8|_&4I^KO>Y!p&p*s| z(V>n+n1&n6Zvy~z0ClD#>05mR#0#fEs;okN9_A&S7G-h}jDe0^8qc0Lw^I2Xu4if5 zj2e{i+xe4P#}j$MfiogXzjc*C1Q2`YBB`&LDA>F4X18IeMQJ~bH7o0xcBHmiex-L3 zc}k##F|Y??4nFoy4{FI%i~A{jk)x?4)xVn`b>rV0>sM=IXM1G~Qh9NiFQl0HN}nnY zUj*Rt0*;)Te#SA>J*=73Y99{#Q=nPLd*UyNwz_qr28s-6`^zyH4Bv!dUDvG?6rooUhKSh2(NWV~iT9O6t}oD$eI?f8h&%72eO{ zOFd!X)#hoWk{j6?NW+pr-l~M)<0GDUBZ`$iO)a5L9Qxl=iSZZ0J$2o$v`gqU8Kq(8 zM+{TM6p_?3s;)Ei{Hm2?_s~w0>8a%QR=SO?+`bdNA7+YaF+9wq#;!UN$_@u!ooie5 zGCrX2U&3V9zRMlIjjV236;TbftP3jq%5mmJF6>A5^y0Wm$JRNUsApU{2QT91g$3=}I`*^|~9u%ciH5>fRCYFM_U3mClSb z`_&BZGC+^yj9?holk<)FsMx*xu%*b1BB*}w@Za4=5n2c>cTQh8}GDNo$4ash?7jI%Q z$o8fOSEqQFL$kHH(={D0$+~!6HNX2LqI+pT#^9yZNy+)JK3+KHrKa^y<;kUO}o8>azlFUa};Vs@$3w)NISB4 zTyx&CYRb*-X%~G`IH-I(7Q1U@;fs0fMc$P)#PZw1q$9;V!0nP=3l+xzZ~?|@uVzl_ z#}}c{3|p5)acNQK{r=8UC=j~%Vk;H2$!D>O_8EVv;- zEzSsG`B0M`%?k@}5F3QN`+BX5#_DC2{M2aA%F&VYV>t94v}hu0_ksqW2lIedEQ`)xMrdYMdEENXk>5@t3102y{xw{Njx~cmPfY91JjrOIU^v4Vf z5(AyUhir55fVm`4^aQR?YZi}ev1wMi#CNw$Wp`L@WJ`F*mypXN?a2+n`F+JC-(kBL z+En&hWCkrqP`HCwX;@n|zFH;#VM8*I*gn94O^FzC=oj~@`j)9Js!pyU@@_7JO86t? zSjOkZKAd~eaIxCnJ&%Ff+FcCWYF3wSCu?cpe59PN##bjR#~kzc(%*dtw#L_htvpxo z`%;s|w;mm^yo^Hd&1Du zCLMax=4Fma8KyFb(m2_1g^4qrqznzijw?$tG%F2a&&Ah)b!jBiv^!g7j@&@ywuN97 z6MlJP$)dq>&8C&$_);B8^Tao{Q6oUs*?Z_n;D)B0y~u4?ng587sr?AmN9LfP4T(XQ-d5QlV}^(~xMP=fjQ zX0wz30DzB`C-LWqJZFDtqubhCSy)MSuv|-SuAo9&V;s2oc**q5b*QME&Q3<}iTo4b z-wUj%ZLbrkLmY+(ClO5~%)mwPeGoiicAi##dh;r_DrvISozA4!m~UIi7CT0KoBtP zoyt1>DRmiv;g1s8XqPwB{5_h|dsaxA0U3f z*7bpZ@gBwXT^$lYka>m#N5{&_RQ#=hf!2vfO*9&oy6R2v>gl4@(^$~-Yb3I_+_yj4 zAL$UfbtuaJ03%6`MVcyy~>I?5Y>X18{QVF|T~WsJr+-=2TH z#&Jz63A>oud|KC?7mFFmk{LXyV2gBf6vlRej!^pa??r@I*Vn^Z*cyk1;g?B9R8yfq+pk22W0U9GV!8h{L1f z7S}#S!3v-O87Kh2A&v>%*c0oH)M_%U8brFpXT$MHB-ZyEvNpMQSjZdMazM^=k7L?~ zz{l|4if*)fSUf%Uu;~|^ut7PDu0xQB1B@?o_=+qSIv9L=ePM9YTxiJ(d8*eFD|rXz z;TRM=@ll`y)o`*(9rCxzsN8ol-3x^=#p{CSr?cfae0)0{pYKNHR8lUrbgNaIr~QUtj9}UPkos z4ZU5o`G3Qm4bOvgj}=&_i{-E!jq8P1R-_BC0 zcOB$P;4Th)u)DW({`d5zoy66&GPT`b!J2iNUTQWr+Jy3x8o?wpLDQ~PPbBpO91irg zW4bo1G_7;PaDQgUb*4jWwZUT)7gCuqk_jU!hp{Iz-+?32a?ANYZq`Hpy{$*LTQJ7H>n_A6j~_H!W@KX7a3K(f-#g ztQ8H-+l}qp3Z!G`YG0_;yB3pFlH8Y$!%VY8{o2abet5_@AzAl*+8l4(Ijm1@XRF3# z)E8DZ7IO{lbY@sk z3Qfs;C}}6VFyhpFACqSWpEcCMio|W?-e)JKS+J?tbNSVK-No*eW!5hBi>Pcg`1G9# z;$U9h=H)~CWZ+=^38L2S#NGUlLxaOw<+A?(XzH4lg$2B<$IdXUpd4^OXTj;z=aX4; zr=q#1Bk~)4f8qN*HXAqb?Do=vWN7WJ;Rh($84(QU)1R#?Nxy`rWWF!J;g;*e8qMsC zn%1MJ-aJHos&_DsI)*Gkz$bzAtyR}VWbDltz7^=lQnAxDo1I?L-t{pX+gb@BV#g@L z;3-X{a!!6z_o`i2XKQKZQl_u1^*zq__G-~=Eud>Zv}$${?l&nU!6k4BKP-!YIL1N8 z&5{TlS1fU@==5hx!X>KI;q?!O{usB7>}|~U7SIzRN$+EBMoA1d5=VRk&21X8et#nw zQ;PEWo-N_nybUeS*mWqcZjq!BtkK9V)eG^LJp6$4Zn({FE^d}Fjk=kBCV_MvO`Aco zW1%{eYSYfM?*L%shSEN6nF5@A_Y|#t40}7f8@9L8{8b`(F&2HXBDAD9#&?dm><>z8 zL$w_oYO}4cfvu&MC_r7&rs-XX7%m4HC(vSzw;uZxBk;brX?V7`c5YA9p*CYR%VaUB+K^%@rH%CHWOK{{RK}55SVkqw3xv ze-mpFM;wgW8?1H-xE!NNDw!G3fKCR|4LD9y*4AEolPJbIUhm6efj1r>@~5|!!sc7C zu)!+KLaLsjlOHxmztXicJu|}oAiB}?TdfyLk}GDol_p=_a-e!+6F?CE02fVnfb4U>=RT z*V=$4xVei_xt3ccmP@IDNXsxt(F%ewi~}G!>UkLAfHXAAS#HeQZj)pFlmL!byLIx^ zXB(T5jGX5mg(mC?9*yA-66qRswxb7(bg3`i$e=G{sil)TzY3AW(MlbF86>a(R&!Es zNB9~+#VuFkW1^qLUk)XY%(k-eHKp4_A&Myun{tfXa;nmP?19rH0)47&QFi=CczON@ zA))xH!%NZNTa7|XX+o0L&`R@=M@%aP+DRa7+(Lj`J*wPw*p%#yb@9#jh}KIKovoyJ z-^;k4X;8zWvo>%D%|29x%-MkidZhB&>6%Gvx#JAq=&-!381t42rz4Iko3`Rg`yDlv z=8>kXtMLlgU1m(-tkOGp(aGy0N}Ti5aZx7U!*8Gb0;6T|T;=r{Y_9chwRmaoMxVbC zwbs{^3~&oW@{IF={c7WTYD>36Pf*e?d^>d(r*>Z3dMmG;APvVMfH^rH#Gn{`nP^l;ay&axv-H z)3;%IhL8QLY9*ITM7Oe$$NYb+Zonw(%JOl}I#X-7CRDl6W!&=VlEZR|x<;1Laf6Oo zfcZ!Rob<&P5zr^YzZL2lVtA7F+JEftkf)n)k`k^7S5@A4z~t~p6&}_p+WMF54Bi_-O4^S}|?=y1js83dPb z3%O+5g5z@IuNfJ}d93+5OJB&of92EjItjcB;~x@f$HjVghBf^{(&8{p`rN^D46aCC zOkfP;5wr}c#&Jnij5KX4e1_@DTG_I#zk>Wht7%Vpp?Enaic>Ya-&I2 zEgwc^O{1YXq123CviV<6$Vx4(7tHbdi#<0<34Qk4mblssLTD8tD8z%7$p@zx@7A`| z%;_|kbc@Xn@@s8%qShwZg3zH@B|zCB*#RsEQP?$1o4(q2DJ5<77hb#ZLDB6kHG8`` z^xIsd7UK3N*|>iUW09ZJ+K8y#*?s{lwX6J2e@)Qk)?h6q?w@BNaG@_J^3SOwf-rr} zH!E~xrE*O}!ZTX{sd=Y7NY4*gsVs)$1xpT93NSms=VNi} zN_ToEW>hrQtE17Z^-qI0O)BbM9M!F@<5DAAOQR`dZ{m@Q0vI<x~{{ zxv*CIT0E?`1UM?pHpn-eVB@cTqoFj~xYMyFq2ldZTDkjl^Gx?quE^Xw1Xby^Ks*97 z)3;hmDQJe|-mI;A;$1@hA+*1g%x&Wl!j9#NBDr7}J(Y<)dj1q7mcnl2N5o<)hPjmm z+_E`&Lp%NB!7b2|dzxZ2w67Cu(ni{Dk2T1FdaO;hIEHdE-*tYZ)VQIh(Y8J%>e_q* zPlVf_pLNX75<5(DkR8}$qMkwyGxJosX}grFG;#W$i0`$>FR0FDF59*gP`S@gssLYM z=~k7tCA*Hdu)Njbc`YrWb%P-7MGSf5jBwZ)C(uwMAvLjLcH0YBlwdhACJ7wp=FdM$ zcDNlbo3818TFrNNe-+b$BszRn+Zg+9Bd^nrYF);y)aQIltXk^Qi+d|OYdcs#L{bECJG?h7-c zcn?dsxSHB#Tbt`!NiHU3BMlzpRtgVYzmIyES!&)=( z2spze%(!gvwDLQOZdMXUc)G8TEp+vgYng?F3FiVX?Hgc-?#=`5<2?X5>4GXP3;Fsp zMa^&cCof@o-xRfI^zRjTf-OB^f=7<({{TCAIr8wkc_fpZ^c3a$weGKyCO-SsnEKw4 zYh$V}h5R+E$E-r~MG(1)7er~8?ZPV(PTc+R*PK;GO{=wGNhIu@&qde%#qgq7Vep(+ zv1_v1G*75phgFU9wb~Hso0}X4BWi>4D?ysZ8*3N{w}MN88e#|V zF5Ix)+~ap@;&de4-Ss;Cx=PB&&z>dm+Ut6v!>BYO*%o!qdQ+0 zd~eb8?J7smluxYOM)BLcL=?4I8!qjhLC5fn-syi>s?iAhR*Zq$~~w`Nn?mC*>i2Z%WpsOU*?-y8i%?5QU=T{{XKu=P55P zP=y|Fi8%nHqJ!A-F`w4D4s+D3v{Qd&70s@had?w`nGCTM`8QxYImUTo^5c=5RJmJr zQdcVYkHXV2g!va$|kYg*oCo9J34uD`5WS!!1j zC6x1^xwu$fS4ddlnIcS=U_XbstCO-OD(_RI@$Z4Oe*@|<9S2oSTTQv$BqCTI3zbNu z+lk{p>fOjJ6lV*J^HEA}OI2t6Y|5NeUXJIb_`l+&nd5H_Poqg|a&?L0Ql+1GGOGek zatj6->(h#uQgL@GRTPzuE5^PJ(EKB$+Ry(02~;}2iKUh&mrS)+@}Pl}ch2vONVy7E zr{2XlRC0SXyS~5h1t=)3?)w#VABuXfg6t&G^vf+GTT6+&@AQi(=X4}twn*PH_8@1k zN^_*7?(gz;6lyr=t@jtTPmG$sh%{5-Z9>As?9#F`HKn4*bBNC1MBKRPno**oE^U7C zx~;2e_Zws4o&K47VR2&^OL%RS!|DZ0#^N!AZu)U+AbMmp$W94$|5=C=k5E5B=a>!;PEs%*gX53eE z79bKi=Bjd0LW*tZd(N(JueGUs7vYUgEgM(3yOQY49wbYM*$2vHnSv(Lq=Aw7oK_0f z=9a7S`5Q}nEe^8d!M-fBjeg(ar+ep^LmID$G{r_@KK4p|+;u%O#%mQ)52yZ0%^W1R ze~LUa;vR?b3eQhEe~T{~^G&&NDj>hKy3W#evm`8B6$6q~C>-|{(@DYnKa)lk6qf%0 znc+8n9@KQ^S!ITGS(kia;$;lI0U7kI(TO1Nez^$?_9@i1)(pT#r21uurF1(RdTr;5 zJUY6To#DH=Ew80WW4eyoc=s4s9INExZcjl;r1u(aY<)N2T@LF&&}6)}j@hnmVvNtG z?uetJg0Haor*p^;IT-DV=BXtoZ^YgaabKbHwxy(Lx^|;Jn}2m3yTT(#;)pRtW?Yod z`y&~}btiM3s}g9MmXqO)PFvY-Zk|CKMTinCDLvJs4UGEZIQ(fzTyb_S-S~&Xx6v?$ z&SL3;v&k;`@-Rsx1yH1(fEp5g#Oz|rCx@3#X>D$ABy}5hH}3Ydt(FYIPnm)^`?$!b zsAzL{4W!JbOK4||@MIEQXOCbI04az|chW81F(tg$CL%n@UUCva+&<6_2=qUV0Ci{L z4dj=Jdu=0G!)$DSQ$ug|m)PG) zb;lXwvCTxGa+IuKc-#A9!}DIDL3O5HG;bBih-_>f(Xu$`!>7xDX~m`zO&)kPDL`wB z=5sraG04t&-S3Y|qDrZAE!2S|CwV+_c%TgnaALiS?TV9IE2%1uV=c~l_CEcn1JrDM zS8b|VUs!mm1=MuNL)==dshJjY!l#_LY-gw^9CYTP$Eqz$qdc{*BYn*TI42~GexAat zfz~z_x|}x+s@=t7Dkw3TA(m4A0PH5t27B(L#*Wv)pAFN-5VUrhzKv=2H3gdSq=?I& za5?0u>VG$N7jPX9d}LLvQ7u^J zwP<3Hy_B~EBtRJ0M1UNCFiL=Nj+Df7J|6Hkg?kD9+}4`POy~D@X6NN2z8GWjsgrAE z_}HkV_cgp#;ExU4TgILT)$ebwHvuTTw@4$~kG!QxJ$o8aa_X(~9F$hf;8yu;rwcSt zT*VU)k;y1ndfDl z&@t%)9p%mUT@nqVC zmD(cR&m3(ukZo+8fUIoUIXg#g^}9_kbr|07R&+ioi^002a9(^l)-Ud&wk^I(tu9#N zZP`1Serz0kyc6`LPE&sp{7RaS*?)RCTl;NV($%#)krlnM%EnUA0O~)9LHU#rc-#Ta zXr0X3v1?E9rO$!vBhZhBG*`Zbq|N2!y32IlZz>32R0z%rV<*?RtmR9Y-M9Car^}_6 z++CZ+6YDx;@#~Fi4Z_(xaSLeH6f1%iLMQ;T_dWWPR-$_c5tQS#@ z31e*F5a14X1K4LKn^z?Dofc~iYD zkF6rGXf5Krw!2pwl1q8kV0U10MhI;7Bhs8@aB9b%TiM)PI@sF<`$I8BMs1E;l0a6$ z{OO4HEh}5`exIhJX>jS*R@U*VnGuTI$T|YR9G3R<=Ap$s^(i(d!~3mMUbxgXN&f)T zWNbut{IaBnl_5q84WNvV#+pcK=dM)pD&sWvCQ)m1 z5%oW@T|9b5qc)AF+o(w*v$kI}X9pQL+%f*vXlnjoowhVJ%`3uQ5zr>_8~C$TyoNcV zM$_!$NFQ{K=)~|3B-AG+?A5%>af(+?{zs|WNn!9W#5P)fl;c#i)uKy@Cck96R90M& zV!&TxkC=MaHumw?Pr%at#p$j7XPfxqKN9%zTa9DGdM}4>?Uv_au7kcQ!@BNLVtFz^ zUZ)*vNLrqazn}S$JI_>?%lwZo)UEt&r`eb_i+8irV^opj+@X|iD5aH2!vm4?eAqRz zX_>pN44W9^wX+(88g13XLn7_F54UPD!9uH?{KRAHPUMa8Nntua!F&)8+YNRe}re4)}Y- zlPi{uuIFV6GP#q=X$}Jw!1UYDW~n(X+9mSzOm3Iq8ykfF(P*B+@H z_ldmgDXk>?G+ubOxqmFnw~e5pbic7_wzjPc*+Jxq z8d(Tn?C1)SjQw-kvWy#AGf7EbRCz4=%h*VD8(kky(=D!6d8409GD&p8Hu;GXF+fy+ z3X!xNkPT{=nVV-Fswao;bmZ|3^~R*v*NhrGM*&7BmS-azmiJHrJt;XPG@j?sT3?AgQ8X&OeB^B=@Z& zH`$RW`Jxu=zexgL%*Qi2Bn`!fNM}p9|gS%QfWI zMc{x9(@KUg+~5tT3>5bxk9x9CL)JVnG-wj@#aexptQ(M|cJkiKizU!F(0EJu} zu6}00CjzBOJ&JL*=0=>U_L%g$b804nUFhhmB8PPccbUmJ{{Y8Maa2j6r>2A9+q zcI*3UOPI`dw$@E5x?DLPTM~Ao1>`cGd0cm?cmBH+t<>qQtn_?g1W79v0J0>C0R)4cxjg$*uw32a+@Y00^hp?5;q^nR{a;+GKSF_uwA&9`|3tm3Z|0Onqa) zy8i%-CW6)tXT!RMovJ&8wb^MTNI@rV7a(VxcRY8YO-G{>i+xdxrF;zW6{e#Wt7>h9 z#gwtn4aLhJD7p~pS#gr5rhD_nH&!eaHe-0Vz#4tM#s0hF9~o)i+E)`j!$D;Pvu%;s zlDkF-0G>StDaL)12}ip}BW2PvXb01*jca%bCthEtq{AKpC&6=r8y9*=9N zcwXD$2BUKS0NNHaP3I&~AQ9WfR9pE<0KqI<1og&8N}Ji(rnI@!LIl5I)h~5ubu^xK zYhNl+=R(aM=SkFnPqE2dJ!em!Th}yOX>RVP zOM72AR}sdcK#@dYKqLdSa(Zqg)-tOk?7dm6X{N8=L&$ai0D-<6wRuL5Whyjm@kbmN zjSI8qnLN%%1fP(OLiGgJ@T%VCQl^&1R<)w)9}0@gVW>}i6s#jDsAf?g?!%3&xHxQ{ z{{X{^xXYapDDoaw{{RuSjb)~?zSSku?WE#IhAr639AR^ucI#Ejh~_%q3HYo25ZyXU zeHt4rQY4ejYpcjnrURC3s@d32>yBwk9NotmTd~$@BS`p*3)y&r4Ff^ZCP*(5bwszl zxiNBqG-7-bmdh`CACM zZKZiXK5Iso$ki@{gn^Uo}5Rupav z1wu>XuF=nG+U8a}=yf|k2w%ZzVR>_@_)H%r?`Q5U<=hB$`G9@-1fDqIcXLx_*O>Nx zN1y82jh3x`^7vt<8>bI#2n&_mNkPfuw+E@~#ablPyO!t6TitI}n^M%}RcY+)k>hm1 z+Ez(fdB{J(^84gcLuUQ2!`&W9OgH{Dw9*1L8s1AAiC7F|DP`c`8ktG0mHud`#Xa4= z^OW(Pf#H27CLSO0I_jF5v|*x((bXMD$s$~htUUu~t03)^_3o;Qfb(Y9XzH&z(* z&m>ez?OMevC%NSs{{Vx(;T_edztt`h=5~|Kf$fMk>$sdLXTdJL@GuQpcO|PF^@oVp zLcY4XjQOT$6~t|p-7fA2UNACpDTro`;^on9Znc|>S?0SgB#2wy%WLywlf1|CGMxR; zMJBE^?0OEP<9`a@=@2%#cj6fDu8#K8?A;`?jg@e&uW;=9*nF&gJ5;38(%-39O?CYY zJ1g5!rCj)iYqJHVyG0tnQ_PgKx!49Uy}ownJ5`Wo+4$v*LTGM0(5f0+d5UKw^o(HS zeR-e`isIhK#ZV;IR`|-0k}8;3XQ&)uy3hs>i6z(XVvEAY;_6*3nl*wMq$b%KFmOue z2;B9>D|H>-#$xy)@-?^Ap}(@47_cKQ?iE-Ne(7A`5;5;gN37XhYqoH?yZZ&kxOTK| z(*+Z4TyBuC+ni)KPLzQ1pBZ?X*Tfc~zkDj}Z~`}7z5M{D2dYavuWFY% zc8>DKq^n*lZ;j6xUU*%ic6j_12e@icrr&8DNK+gqEPc-^h8H903+j2)(RR2Wot z$=JC60BfaS>2vk`KLb@$lc(Zz9tZuTW46AM3(Ko$^pMQwe3F+L#x@riD!mTxn1NZ< z!YMB^N_dwSZik@wv%cIoO!>8^5}7#b-{esXI*4 zbk#+89~kQX4And+^J#kY5{a@2jyZtJ{{RVA=*#W}cg9Luql!^+(U~z@KB5FR_WuCs z0Bu1n*5*;^v<{TSb^0g6{{R+Er%U!t8rJ8}EP~=y+VJtnMsT1L+Zm{HOQ~uN?2Oy* z3~K%dk~=%^wA*X)75&UNN;j$drImhV?Se?nIJG69nsMCYWxv$r)MZ<{N4mV_0Fg|t zjHjMQ-afr*i8@(tuk@Ch&S>Jd-pJ<#qGlm@a+&@doZ_ZqBn+@-bV+mu!g1ktV= z*@^(z{AdFf{cY@+OsO79mIg4(v4P->sIK3AF(KX)vngU0~U0<@Cox33|RF_&U-hC+?dfr5JaQvv$!fqA1_Z`AbN zPSPbQA{oxq0ftb5Mi?HxxTK_>!*OWElHkbjUYQ0X_p0va^=TW`$7BE8G z1`JVoQ_oO3eslq^t9YvSQ@Bl9MM&ErjI#00C;~NtYe@`{JKe)6W9BI;y>K!*p2Uus zpaJx|sigCKxZEpl2(9Io&rnSOJq6{1m-1z3wz3sg1fstUj;E(_^`HufE#+2*DXun_ zVYGlqBya{fC)$8C?7TIu3oo=Sv%P>jmE?>9a&QRU&t48XQn>7Oz8H)9FblnI{^HU{ zk~su+GrCNXp*X=qvv@sKxW*|-To#9?T==&_oaa>3bsOkXKPgV5aU7(Ka7<@|#|JsA z)Ee5z(ak>R0}iIMqeG_ZGDssk1aRB=BXK+xRUjRMoc{n?*2Z@^{{R%|_R+K|+Kd;n zsuD<*gQ+JcD%tCb69$fRPVl|%w9RLu+f8*cfX=CojBpN4IL!^)a7z0Yt~47h66ti` z5MJBcUPcpqLo)^3affvTDPH3gCvdfmZF0&j8tN-Q4e2u8L|~2PxRD+~B#bliZNLeF zFh?|#24T;s+uske>K0jT{6cK&dN8)&4Gp_C>i6D2dyUUxb1VS@sELgcktfEIs9c~6dF@c zE9S0wVgWApThqD0;NsIbCVjZHuWbgm)bwqC#orCI+X(c30C;Zp z?^Hx&d;LQEfJr%5SW$UBwu~>itfLv;@@n0Z{Y@n(TFF0~GqlSIwAmomyj7`LY1(_K z0^ZyGCgiNCxlfe~06F<^&I-2-D%`KK{ShiX-|9RumRQXMrFk>!pjp6Q(B zup_qx)m#z7Fz?MLG_-d9y+KC%66hWrTg_tH4N^Q(2#S0MtD7G=^a1M^A@jP@;aR>;ntPn zn<+K_03Pc<*!Oys!8TA^TSGKXiUVdy;$YFK{{VChaDHmaRb>}wtJ{C;sibMCE6LjB z-xOKtUk(1rtmt3xjd+voj$&AsPPvX~79*1WTS`Lnh0Y1hC^u6_c-zecl7`lQCQUcQ z9~1cL=S?R^v$j)dAeZdAU~w9O%(6(zL}79FvcH+8sK%PrznlK94y32DUnF^sx8a?0 z!q!%rz4*Gbu)hS`BVKK3v%^T1%E0+&yKMrsjN>NK*5B6VP7W&lAN8@HYk4M}bshDc z#49zQmO#0;d61msM9cSErb@^{u>(1(lD>jY%;|J*i$lV?rSX;>E5sJF0;>+WrlrIo zS+_Bc4d6s~dS{LX1!pQ;%c}JLwJA>BpQ(Suo;lO}Z=qaUJYEm*?fP5`nA=R!u3^2q z+6eNuMp_u-IUI4w9_Ex_;QGH;q8pbo=)PN+ehIVibYe|U;%)J{wvBc{rCCKcn>@Wn zZd9s7qrP*RbsYAO-uisHg+5=k_kUXzo=pzoRf5M$j@@opEO5tnB!CmZS9cq*ycS{C zoM2ViuB0}ZsWR%{4zAwMLyt|CTct;mSgs?w7)H;P$;v2U%8|(G)jCw~`4sOC-6}4!jIgTJNXzfRUl!EbR4);=jdAcIDGZy-nE=86cUn|NTXjG{7x<3Gid+*T8#);4d<)-`%N+sO9s z4|zJqg)WQZd3D==4(d`Zy@<4%NWL)I@qu$U1{YEf8~_f^39KiiuNz%&y4T5dHjb*! z_I{7?=y{%z;?D#48t&rz;r_GYD7C0<=8n$hO)kKY{{VG%yRm3iL6v7!E)=%jwX2Nh zq?B#i?8!Js;cxC=(mcmq@s79gLi0}W-m!EpZal?`+S(;lja}R4ZL7C)a!VFFk2y88 zX~vRme8`nYQKZjR)&2%}cSeG3RQRgq-pa`0;^u!1-3X&mfcu&$9AQ|2jEs&!tRsnU zOE3Hh8oCK;-{8(S#`?yaairP!N5MMgiLXZ#>kXtZX*X6(tuOk?47W|?#8}`v5;Kj% z0<@-`+?s3VpX5Z^vPq}%x8`urd@S)1y0!aqX<}=g$%NKySmAlYGD>!?KaH{4tJ_D< z?qqu>{WM@+T*s%g=<3_zQg_E4$awbxLtwAU-(G(z)oMYXVW3|4rs1tTIi+6ew=pjF zwy=%nkY}MgK_DK))XGXbyLyf>a?xsMYGN${>U}d=u)DIngpW4fUeml59p6M3 znzP5SO@0`oH@Gv-{w>$%hT^X>&2S%`lZmn)HbWgqb(ds3M+a9 zKo>P>TS8m8Z%Xh&TpN4872ids>DMql&~QBInNhamXyI9pK*uzj>!D95 zw{j9f+$@N4$+#~7FMQ`LX^8Z#7snnYw9+)qFHG^Zj+JY3+B0^w?f8A?3v1y8)pc1dFLkdEpT8-(xzrvwr0Py2Xqk&Q zxZF>BeK`++)mW&}4uP-0mlU#c`9!s*`rp zQAH;8J5PujAAyC$cOD1TuXWkN?zoavM1egONL6C}*yA0AXGzKYO2y4Zd@khrMu(>O z4$2=Hc(pwHwUH;&>>!;0F_HeZTmnH;#y^XJb~3y zJu|`q)Z((0SxM=kqNfqTuhy>9y1&#;L?_B-Sk<--r4z+WYiG*%_9j1IF_;+ms z!F!|G%&;^0^T{KeC>xlm$RSspR}`yHq1PI4Tk3q-p!_`_5q0Ti(V>S*@Q<9*!z1oK zWvaeBxRX1HY-2qKb6s+&?AE%omN4gik?Q)t?Hi$Ky40FG*~<3lk-&UK`1@n=I?mrk)Mmfa^q8E@G&a`pGhEBjOA^3< zy@yWcwP{NZsp_{PrGIIoDSSHd?}jwXyDb9V=T`D3xm9f2L|36G%oXzcALdmAWwE=8 zx{1ET(`k1({{V`tCscKV8GO4~76EdMK%Eqyel&XQ(oaY^?ptQZ0kuz^= zv&kU56J}erW>4?n<2`sk(yW8j{15RfOz@PmYcNZ9{h*_2eV*D6FK8gC%!hDngOZ~- z7|%5mhc<=6T)Lc(#4j3J_`6u2Skl&Xvzuze=eo3^Q9#S>0YPJuK;yPeI7gLPic-6} zF*Hf-WYuk6dx$NgNtMjEyUZ)MkYw`yY!laQHcCB5#J&}uR+i>(?8|r$l_aTjmePuQ6V3^IgU1-b=e0~^yZ%MVd4FFs%q{*Lc$!uQ^GVfGGJuCR7bG7}h)?5Bop)b& zxgTfu9 zi|zOszYshp;>h(=E~8{`6sc=_%Ufb%nk?<}R4OY4W*{#0R>=btLUC(BPA>YDJR7MG z0bfEjtv3GKQw`>BzK&R7Dta1pMaOT%AXeXdu#ntJx0;hWu7v! zEuu((1vvzV$t-h{d-3T+7b^b%Fq6Kb{6o{G)HMq-kt4pRX>V~2oIuLNvSXp{NGBCh ze}I}fLGb$TC+#t5c5^7^E6dm*n2w;T5=aN|qnp%9Cq?0J4c};*jji+=rj4dt%pDT# z??F@qW9Bi2I6j9Uo}!eU*H%MxS3B<-=|{v+S^P)P zZNl2!75jWl#KB8aPvF> z?!=5+XaoqYRBYqu98NW9afTUm;`U(NPpZ08tO!RH(w&bO4U zxq^+(lS}XgmZfthfpd2qo!n6Q=Hkv(y0!D;1bnN< zRmjSaIqymm=G1bJE{B?H9vIXt#BXv{Jn$YN=7HuZ0D?X6dR6X5#ud~z*Be&aEUTS? zU}E49I&qRZPzA{J8|X0hkvdGSptvExILjuf=qG37SG$}EBBAo`_KbdP?Fe*<0VKRk2C?E z*UZBRRRKLQ-1E|aI?oMSO7{~=v6Yt91i-RxVa^FT8~_e^pbfjf5nUH%yAV!Yw=>NQ zY{cg|B(FK3E@Hm96jQ?_wwBI;BvOc;SS7oir>O0U0QLxeI6R?6&xZ87*yC8jdCxf! z`Dhd6+Q1BszWmlMmuAtgwDL^FviQO@JIjl^4-9BS?IY%f@h&b99)PH61`n-Mr_8N) z^3Y19x*?7689YgGBsY3qk)}l`l1V1gtX3&xkSW-#?p%c}jmNDx!idzNXHd7lE%eM~6YzH7kr6e3Nmc%;;2OYQNdRV#I^a z-)hgANotqgUo2bEzq|a7=fK_u(Db)!`^^IT#KcIg47Pq9)Kh8Q&+lY(R&0<4K*lR7 zwI6jKn*RWTX-=B$f0HkKL-DV|&j>r|z9sl|s_FWi$>&UN?bZu|r@V8SnTPw`x*lpN z!lboRO?hlw) z(`-ZN7_X>rE^KubmY`qvE%*|O&3yC@jkgWscmiAvn^~K}_qUH6cI$A^UqlM1$t8@6NoF|uXPQmh zaiw#e)qGoht=Pk(YD;8N5TRvDIMz}(;BR5njCboojfCZLEeh`UP}VFiwJWEZ#>&=k zuE?sPu-HtGu5xL#0pX7jY91A}lG4sSpV}Z@EbvLvZuj=`HqEnlU%VVhoeMJCz-Nd?ggEU3)I9X?%EW~>6fi_Dow50%DB=OY~tUrMGVYIwKeuD30kd_BIt zmDftTDFm2Jz^Cr^9RC0Zr9^4PK4iBlQ*BxFI2pB%5NaM?m=vOF)R z+d(bDGyd{Oyx}1r1c;=ZVFx~>^PEv&Ook5@c%srjvo*_G24*EA9#d|9SSV07sn6XU zdr@Q;WF8~%)$iGKchs(xt@U8dW?^Jy9$OS}6?$zwatA$VPT^}ClV9jIky~1eEBotf zXkIwxX=Al%6;CHIt1~WplS<4qI2}18)$abur*88Z^BO71&Ty-fkEVYbp&fJ*>)smF z686gZ+Ra!JT^U(e3=x5lFn9-dS}k$j#XUy)ZFf?-{?^w1$7^!x;pKOHbC0;Eo(ZMs zBTvMBJvOme+xTV(QWzDJ&$zTln{pg3())_39DshbTI0EmVXye}#Q1|opHR8mwSUoZ z7pn~H+tZVt)U1#u*_Cyr_=d*lUHHb+Q;sPEr`je*kRMz#a7KIQZ8X8AFzAQZG@fF^Ob9G~87SegzRuTQSMclEM zTwq`v05j@yP~@JM*YqhXYh#MMyzuSp&vS97+}d2M%_Jo*Op3&}%B*lWUWd7=LOOW- zAL5NN?@#d!<;A6yrP{hi)7-?dh@)bky(5u_Gf^)u1;q+&eV+DJW$*<$xrN`ucaK1bWOj zdaydh!?23sT4hrv`3PPM6Vp6;WQqXO)BGo@Yv~L=8-njq)^4HuLs_Iw(yTm(cgP%Y z4toPiQc>J#H?iox5793!C9u*wTLjmdMar`qJvD!Pvgc}~*drxyPSNd}nLRFt6{*kM zX}%xP^(}JG#1=Z9nAY28P7xbP@;v*#&~}~)pem|;u~EhHPm)@k_jXxInj6vAVv-t_QpFJ zas-RIr}plW_gcS)^cT`>Ey*kk1LY2dJjcVfGlDwfsG&Z9%DOeqv3&#C+nBAbuNAi< z?O`EPjk|uQf^oO4F&3?~*U|MmYnPrmt>bWk!=i&I7-b_l`A1p+>$UF`X|rjUaKUhr z+{mpAVH=Xesrq7oJSx`vQL?y-`o$S$Oq6Z8z`+HviU4GmI<~PY{fgFU8bjb_$*wl+#x)vt(Y(0z#zE|_m`pdrzRwiSMdJ;i+nlZXbdrFF~cp) z2_s1rqXv+k10t|~ym68{^sHq~%c-ntDD*f_5PVFBSwtQg@YeW}-+N1S3n_?(IbzY{ zE0fP{$BMYYt=Te~eGV3TSJo_lwZ)CRnzW3r=0@@na&gf10~iGJ-nBC^G@k(2_@?~n z)>g(=xOPUJt}zTvAKu%yleeeLX-U~!Xw zhwhYbFfTpS9trRI({90HyuJeQc8JWkIz`g7>E)8~0>im0jGjG5(voR|O&q+M9;v@= z?X}DW4heW97#%WlIr>u(>l$}}to%cx!L7}GYqBI|F~SIS3BfY+ki_xR9qC`78on9u z#;}%h!K0#$Ht7n;*A9scqA+B^^FN3Vc;}#@v^1_-fvwfj_GHtZYdKNT7Tz>tBy2Lh zLomm12q%ow5l_Z{67Ti0V1nhPwvTkECMz6qo~*H{>JQhRz*3A-*lt%Fr0WrCYAwkI zMvu%1pS->C?Vg61jEG^EN7nS_5^U0i!D#~{GN3B0!1l;d`E;NN#rkYEkjrl#_uSr1vrPHM0*5^Z`RzanJ;sz{V=aTt zag`}6NU*w(PB03RGsw@q08Me?1i!YL)@g0wc}K`FW()Za2pu`*fH?apY_#N9t`q$s znS)FT1Ojo~5yKyk=su zNZU_t-2RjS?OqSmw3f9tH*0G0#y&}270WMR-lR|m8{<1DY;M-;NtPpLFySL^QO8h6 zTzXIh58~^)*extIA0}&CBoM@{5)zSa+*L^#86=;nqQGunPvE=VI#si^xv|uDA1${R zQGuM5>4rQIIUQ*X!0>mEHQxYU9c#hY4P$iZVsfA|x}MC3hR0Ay$n8pSQ&xJ8GjY`) zPIzzQ4Zp;FJZL`=qqaKDtloXK+CnoZ!5ptnKZ!H7$2<|5#ZlyUkKAhN^Q%kmG<<3C zNa;4#ntimk+B|6~Vti~oT-!*>c4GiDNIqgQ zk%Pyj5ms6Qchun;<3bYsvrlQo+JX#?a#Z8lhXnm9i8&oa!+9*1AH041mv$1L`{?sb z3pyu&b#E0(9G)7}FK_ZfpCTqI54&`!l$3WWF>=_~x%geL5N#%g7;b#uvztjTA~Sh} z<7h+9e;O3i4pw#E8~ALV6qTRiHiLC@B9jq<4N@yv(T4~3AUhmzd8l*e_+R04Qjagh zzZ2EdLehLD7J2la8|XSDvZT*(a#mP&f%21uQ7ZM?-z#A9Dg*jDA(!AT6B8c;yiWnGvOYgX4+qa zJUQYkt7#-w6YDyXq(GmScHPe>PTW?M>D9ly*U1q%(|afLW@m{$9QX%Kw^^=kq>4u& z5p3pJfg3^GbAkaUCAjXRrCetx)9=ukMkw+x5$N6=(}}yXy?CzFL-uQ48CafOrEtW@ zj?4UB)v9dCob|1w3i3}DrkRl&5wv(avB1wwr1d>Osu1jrE!yKubecVi8KwC~>~pjO zkfikQ>p&E=>)V@KuR6(mt8x3xMErt#gV(R=KntnfysMOnL0o{(9&w&*s?{(lm`i-bX4`IZ~$IJyD(_2~p z0AJSQ`1%4F~uoHQrL|EX}r9Dc0S{pQj}Zn{J*OXF==)(4Y!1#fXS-r z7n;tY=E5W!S{TaYmkY^~LC|M0mGm`U_n|s^nieza{w#oK-V)I*Ev#Z0NZ^7vvH<2u zZY4iEsq2@?;|ohj>e%&`i0L(df>3x`(BJBswve;H!b#?y{4KM_LY=D$k37k^k%dw_ z?ii?zerL1$zoc8C%heo1>Xteb^V)c0Rn;`qk=2s&(^8#c3>20-BUs)|+yRgX@0z|_ z>eBm&=C;@S$k*a`kF>~l!{Y66Y~&^q?Wjsg%JQQuPb=x$iX8}cUvPU_cYk?+vRkCk zYMPlEwDL{nO%2qtGs*$ZB#<58H~THS9mQR=ve29Bc6!FM@dv|toYt1t{{Rj2Juus- z1tB+W;B z3xItCb5(wBBv(agJnTxq_ZE$S05}DI&MwwKWCSK=0ulP;+afo`)syTLRfc}yxsJhw?3bfl@tbz&9x;9{rQy{?KP!)(lxVc<>vPjJ1B#coSFTjeP6j!wT{)$@Z`RB4TAOplzKMEk`I*+5r^7q@ zr_$ij^yEpt=B295eQvN23l=u^o@+=*`EixQbCNnaMyB`qB%k8RQij&~yRXRQ^}qN> zEN>p$!zRRC%Penes6jpS5ZQqIs*8o(-zguwZ@LCR&1nm@uid76BpI*sB#-3^^&$=g$A-IB8YzTw>^d)@y4 zU)Q0=YrZbwcE}MWwpm z@Hv^U!doVvsZTJqS7%g=;|xX_fFl|Hl|-J?@bAU`8q;hWP1H1K?hG)!$hw%B<(g#v z5H=qyIQe?)UZ%0B2Hn#&r!==lH;pX3Ri@uZ;+<;N`$f`qXpPR8f@N6VGQTQ?M<-}r z3l$lvgNxI96D#krrSSV+(e!Ht{{V!QW0OUaSNnC8GEEK4j;KOO9GEetG5`g6J!w^o zdvD*M;Uu@%qvG#~F6iD7@FmUFpMszY*0yronL#)knqC)k7S4FadB$jkKea1!cL~n= zExQZhuMT)m#CmtzJWt}a)Aa)=jw?mAm*rJFyt9QW0qcd%7q2`~ImtaEe=v+<)~??p zz0v$>r8bGEXr3DJWtF<=_U3Iq%JWBse&6{wHd>^fTGq{g%T?oPcdC?CsHTryv#)hsWdEwuL1fb@jV4okt@N!uQ?|Sftjx zK|R&P@xv&KOoGlx%##6#$-EnpR32Ov&uVk#*?s>2@B%jL_kY1V?K|QWTBA>c34s7Od4P|5?k5>MElZE{Yw{^e`EI^v7o*9oYu63q3#~RSTHeZMAL+oG*uUp905eE}i3@C&UcVxNAxD zE6Zp|1bp6l+$#wiKX-1>2VB;(Qu{Xf-}E95KWhH~BI-@>n{=XUe;vbY$N+VlOqGKU zs}<9TWu>(aNb0FR!g}@A~b(rUZ4!-wUd21{swVL?n|X<*S{7# zTlR?IN4DOw+#n(}j@d9gyn(b~MgZ=5RLQDnX*sj)%|F9-Ivvf%u^dKSLgECqwN2PC zK$zOAoSYNO9y7r0Tr!)MofiIQYJ!Qv>w2t8-fV_8v9xz(0OU(7T(pFr`DYjYJpDQf z-VywNuf)buK5&l1Q22wbHQv^eH;{bn-Eq$+&<;=KT{=M=_Ht*_z8llmPl`6QRT2F0 zTAUmR&k{^|>c@ru0B0w?a#VNzzXPTU#cv&7+G#pG?WxAFY4D8Pn9fY&{#jdsIR-1w?1X>&2E6ahHz-^;HG4#meiU85l zGz;lwH+pk2+*-0Y01>sigVKOBbqfpKQsPZRU%P>CBy;AQr`rC5=shR`toj^L5{CZR zMy<+;cn92e%>ZOv=?czP86sr^=4EaG{+_(h1il{d#+9wSpWAxOI!tSgo?@8`j`-W( z(=?dTPhGInqrGcA9^~9u22}Iq0XHs2ND4{DGffGfX8d9OqWmZE2x%IAnQ?D_VW!#1 z0u5pd<#?oZR6bdYhFzfj3af`B{!0EGTFdpU1B z8{&P@>6gjnq>q#^&PD?QLBMYOdRBEKeOE%^E|00s+4xfL`*KeY+bYGWyoTLH)S@_v z2Ow|38jREl8?3e0k3UO;zdRu%K@CB8k z-|4z#_NNq($24rZkPGvUL14gpR!X$nv$FXbI#F7yznR5rzYjD`H_5xu^awFM**Vgehu)yhz+-hG`l7k>=KrKV4I*6wuonqRToF<>P~OCOjKlB>~r zb4rq$(sq7*M^VB2H%FvjYWDU%M4EN*lT1Y>Zz9;sD@PdQ016ag-y^LqR{94rTO1dO z{vJcBJXbm-S2NFlwpi`tkN2_`mWGaZN)(bD0_+jvGmWSmdzq`%LT^%b6tI z=5+y71yn)7>dM@V_8f23f|ZUFQPrX|$f6{Zb2pY@EF%E70B4*G@t$#1Nz7jxo2!Jf z&nTw>56iTA9+>`g0X@C7j-InesG`p#id6uY0x}yRj?Nh4s`Tfr0D2dNwEqABc#bx( z)&6sS;~=de+wd%URc96D7u*3}!=ayFzwdz}>BO?^I6Hyn-3;I1}(??Qb=DOZB(zVWIudfENQ zO{9D=_@(0rg|CNx9>TJ~0GD-)QHCdlIG#dV9mp6{$;C^p2=6b){D!H`^!yFIWA9;9i%WAY-XlX=I&HiF1i&jHQiQCK)uh3bSr7?(nwm&SkEj<<+99Ghcah?**tJM z(4*Nf=GSz3Hihvb_9$V~?DY*gXqS^5I%UFq?egUYG6_;}al!9VDhcY-`^$}Hw7UC; z`0vF!Z`$s(?Q2w9S^ST)Jdnrb&Wk26vOEkt%#c1=Gq)b}sY1&|{d~t#cYFT;UoFlX z{t|x)TTYhN68)sg1elr^RF-^>RfY=W^PYpJHMOPJLnhML^1UxkgHqM6^lu94^646( zMx3mZINc(USR~Pq!-K#h7^;?wVj@?*(R@v$OCFW4YfheUXIR?$;n1nh91YmPJ^g4& zJ(Bx|?zA#=y$Z)tyo%RTzn<#TAL$JhwDLMJ`=~nZ+<0!ma%r|Ck5JV0nKge8Hl3)t zHkTVftvr@jD-wi1EJd&~a0N<9F}Cb^o{RQPH&lxDON(zJCk&1DX!1ko6MmpIcx{{WcW-p2UANY#(Bk^v(a}~^&uOgYZ z{KUitcLf{{Mld>6CbsM*p5)pdi!Oz>%KGvYdF{(QZ{}@^IYArn1{)r$_|*vR{3+n~ z@cc7cU0h3N1@s9N*X4@ay0p6lVOR{d2q&EL$E`z`%xN75jJ^>60KyFowxx4#ZGB;J za4lh&Y92xdT*xNm%>!+j&E&Jkf%6iQ zDzdpfJr8QWYip|_-8L-ivcalDWeL=7-%qhdh)HCUC!FN&Cph^)Tqq=S(waca8jr-k z0%{iPr)oYQlKmJjn$AFH$E$*e^y^W{F6DDavFYCrd{1@a?+#sP{uh_~EM{nIcQ;F6~x8s_@lJ)1{I)u*~gQ~v-AukjaAW!GOo zv(`Mo%W)mHp#;pXd2=Fyj2Jh*;nI@E)7tHPnEt6g*ZH1HuY3dXhJ!Ots_0skrKD1V z%O$H6Rmk~PMbGD3M!Y4nMpC0F?wJ;?s!b%*>EGG5>u!jUw0AIKZ$3v1sE zyji=D%&{vxVV}_H%aia$GTKy(z41F zOT=<(;>I}beJw<5J?}|Rw-IR^BFE42!Syk zKp}=3?+vvQid`H2yvt7gQZVnd--TKuPBm{B-|Cmm5l0$knH2W&Nhc-JM|@)(WZ>qd zN^he1vGT!neixVq(i-55}tX#J2Ws7v}M!rJR%!g6&zO`{P$R)qFcvd)MvcGlm zi;`Qv_(rYtDJT8qqG@dvjMJ0y1|a;S7-@%^=^?=Q1wbo|zp*E?3;HZzB&+@imu) z1=WPM*G#X1Ad=+^M%#G7L4Y~V-k^b+qE0kh-Rn@JERrN>S&9h=1TiFoo-;rm>EJ(u z`nQT;H~OxtK9gZ8u!Y|OR~Y$;4fkUTGq~e-8*^Dys-xy<8g5=kXCJ^n4#TS(U2j^y zxU({C4w9;GN5PGhbGvXq!Z5g~b(>d9QoWK+&7F+DvnPe^zR=ME21M! zY|c+n_#T&%viLB=dvCem7VgU&k+PmsCjq$~@ZC78Rg(C$CDOjyoPM36U+J2VvNzw^ z*S2K;0Ha<&Wkg}dB!vCtWzGoAX}UADncb&|uT8=5=ZNLd?6j>)AsfqWXt2tRrziqo zsX6E8e0pHia$8+~W%J)duA1{r5ZJ{Pv~tBChvdJ6L>KM^HP)i zY*YOY2Jw!&H-OD zn#wlXinmtLyvVD@8P&G&=&6qVYec({-(!W7UC`~KxwX|6`&qt~LtEV3$d>RzSDbkW zSV#%(=g?xFqPiEvelC~96GN)CycRN$F%_Hw-W7;}fwg!fkG$RJinf5=&Z^%?@d(nb zHC;~jO%4fWSmL_5^HE((WC->G*xEC_Mml=Zy4h+LvC8)q7+6X{FSL?dDo%Mdl&L8@ zml}>L#rXa$U2C^8=$b5=Zkc&)0^R+;T9;+I#z+Ut2r|wA+yFfR;*+GKuD>FcM*O_k z_&zpSy|$sICaY(xJ)no|X$(^+oGAVAEiXHZeCSWgRPEywDq7qfO)PHdzB1Ew*x|VH zygv6=5O2))DQXMt&zB)+&fGpg3~+Yt=xI1L-}40|`+i5yo;~qKvlgR1fjyp$7nE@< zwhV4!a6+BSarX}-XJ{B;eJf~f)XrO+=7*x{UN4qm;X5O!t)Pu=9@SW&k@8P2dY^8z z+>+c%E$nr7KM%Y^8VIknOQ$C|UnDYt*qjgLOPzNgE9`l-zJ;jhSMlEJcDGhCM)HO; z!pj*<;R5HNJrCBXleAOz`D2CHt`hY%CSGSE?-qI#mzq=%vBfHpMiNNw)c@;Mm{eHK8fRlcf!Ge8|B&x@_@E=G^4h;E^g!X)t$LIc1jrg{9R z0~1&9+?s6d1OD+z0yo=*Voy!p-n0SOX}%1YTC?55aSq{?Xzmar9{C3%fI170hcJkN zg7@z-`F9e+uL#J=Mkp174_=0*VuE;Q zUejQQQ`6$qZS16F3v+95Ohh*Xp;Dxr^cbS)=o;=xE~$5^B1Pg&cUS`5*hJFX$k;dm zvcQHI_cSGKg7@6keOtyFa7%9s>(?)Dkg-h?2&Qx(Wy`SMdiP`esW>OPA2VAVcC{yo zXAODctNl*xHxho)bu@}V9)yqy`eK@jTM4%JIEeKL7(6it;EkbjPtb~DJ8unM>UwUY z6~vInt`td|r~{zE$l=B_{{Yvd)xfoLtzTV9BHqfju)Ok2OhHN)k+(J!aswWA^d6MJ z#JRSHS;U`djpuGoB0kS7IE-pc0hSBv^8$KMBVI2a%^QmgDC{)!epEwjjKB`3&6hiR zaz-~&BIw!`$~p_;-8Y#gX;R zXT$dJvXW4|%P<(+n>O&Q!{y0S>sUs&Hp!bhT)VVG;cpZ8L&I{7R^e{-dztNG4Fsqf z8+l7*)nsf20ArB9N_8PQ>9CgAQn!b+8{Icc&?baMC7rdoh2AnSL(b|X8UFxh80|_FQq|qErB%Hao`)Z+ zcyn2~(+074W0u+!-xTuPE3Oj?NF&JR6otp)k z=|#2OWP@(py|Al1M#6ZN_uWWjW5vqwDVTEBd2I#ya)+*!4;O0A;TT>zYKKHu5$7 zD@tgw2c52IGVYMES5vsC5#yc1B;cM#D;JECcG3KqqQk}aUo?2%jl4Ob{?E|){tWT= z_O7pY5C+RcoDU&b{pqFJ(Z~P;asHJ2T@5UC=OdFM2Ntina@s@GL8GML8oq) z^*0yd{E(9|B$7EiV;i=fCJoeoKxVOf&% zR|VEkN%J8~bykdHs!O|?QGDA!!~DkAF6;3)FA{1{Yj>M82tL7SvNuS+(Ikr;gYOSC z;FIV`$mv%dH#2&TzSE~=wbZq_;X!a2W4W4RJK`~dta8kR{{RR)eiSV<1|_A5c?q-f z?*cNnnCv{DN#GVZQhlj`(s+|wnRMpx#3qSjL*P^ z$Iw5_f87J1J;A0S{3wkGj3W%~bO4j;cJ=8%8qYn#gA}AH1qW`-5=aCbpK1W0E|wqO zJW?|9+gXo(Fhc&60RXyoa8ZE+yAzL2gVKN;(%cD2nZZIc#~}U`0a@>(x5nn==K+Bn z{U`#Q`<_(2vydd1KPWgS@##Pqv)oLqQgX*9EIH++ zvN6UoIOnwhX(ippe4A~{xcr$IVrT-)BIe(F>WneL5t0v1r2hbg0CXBYm8i`OTDG02 zY2IA9Qv=^a6zj=Q3OOCUILBIC-lMh7{{X|j1k=Hp{v&v*&%%x(4{DxS)Tg`N*h3h$ zB}8MZvoIsF)JmiKD*ph7=3HRD)3@SFpj>=2w7q$}UUjb&*ulI*X&C;`^Pldo?}N9N zjBv%7NmUre<4N)f|V2V7$?Fd%q3Ge43@TrWQ-<2<2-QUNU2SgDR|cmK+x7aaRd* zEA8a>B2ndb{EVq>P0I^?Jbk9?X>FGAWbHk3#^O2j$E{H$(^>e3La?>Cx{+Y9H!n0c z_Ykk&L4xdrbZlS)ka3VG(T`(m#J>)8-6|~}`szzb2BmBEh+?stDF}W@$ z&FfO8rGFu~v{kXzb#DNy_V$*#WyH+kB${YN)Taj~6=U+_``cIk1x>|B6uC=U@5PN{ zQ;BapL1CrMD;U8~CF2EAv*nbHl|na0$2j9PF{GojW0d)~Joj1FWbqaC$A~WU%VFco7NAbm+EsWow2s>HW*snot8-D-MdULC!(`xS&GOlfYuP$;L6M?;Rj z=Q%W#Z0-(MRymIg_+sScahW(fc7VYMCPKd#~AZFBf9Z_ zhIIb`0WF4?XChqds}YuKv~XfCA=;~se(z8ZCnF-1CCn3#E{7?rcy%nabl0^BZQ6Nm z8U{fiC(KcnYy*Nh0Oub{tMnC)lf$16BGz;7b@Ya4Iu@fqO1p7N>SV?QlS zrqi~csY)7OQl_Ecj|}M7-`PGR)%Dv65+;+)8g;e63@}%S?m1TM!13R$E6MF=^Zx*V zHx!)?YJ`&~?as zS2AhdBDxxOji=&khqbpQMo8>~g8cz*^|Myk$!ocft6tCJJ#{p%58LiZWb&--fd_1R zy?7q%deN|Meedwcz;<5`boSHWXK^Mbo!pJP@z5R)(flE^$2I5Hsm}B}sMF;(d_jD% zr`TcMo@7Pjan?J2K`YenlkTT{Zf{Cde^BsoK z1WU*d+;N7-bG2)(lI2%tEcJFrqoUZ5Miwk60f(>yZ&8kGEw*Lvx$?(}wL8y>o->cZ_5*K+ zbotsz3@jWKProY>>V8qyyCRi1-R^Tqxw{m;I{3J*t8eh~OLdD*vv?-C+M8w>Osc8Q z0tm=#W0oN1l^E%M;aXbTxApfPPid`1cMIuArq;&HywS99#_zcFEd4+|$2Gl-Zgn0X z_>tk=E;wv&Y;JDt{4kQHml*^(0n0~j1*@$XcLW(>OZ-O8%6q|AVY-x9U}IRNMH5!jxTz^vMZz$mi86UfIW zF)1fK3lHM?(fjh z1`u5q8wsY>WmLUaXx1p=20{-;B%T1E4qL8lI`bptE z8{y@Lgmg^{R&NQ(tl7nEZ)dvuIGNry-5`^9%t`2XeGe7p&Ci{+&2PZ(f`=;F=WXJB zXW>oenSX0zrFcQ-Fi6pP322Yz1v?5d;O@v61HVyO(}hIVvNW8j+1Vq*J`ihu8oIl` zi{d4YmoPRqVgsqAp^i69huC;NV{l*T&o$SIjI`yx?_-w_B(9}zneJ(G@U|e&ZwG}V zat`1HuqQsX$!ee8I=^@1e1Y+M{t>IMi5h;Bqh4D@q)aWPNc6}eYkPM=$VNf|XCvnR z?RU`T7L4U2 z&p!B1;w12$@zo{2mrl7=mN;J2?U)u`tZ~d_@IdCOapqQG7s~E?jGq=fXf59APZ`>5 zapkB>xes0m1Iyi?V0Uk3!FcStnRhBqrSCbP+-b;4d)#QJa?ue&^7CL{8yqc zk2L8e9wV_ZTTdFRXU&TvenG&>;N`tI=AmfpQ`KDK_3sf~wDM1H6F9bxBGUPcq9>Jk z`?$tf8oh}*yIm_*m@KVsSx!iDS82$}V8r$v^FST_zkxhz@fo6uM730AHuJFon{E!! zxm=aUC)+$!xuUsQ=O@5Aq_X{%Sgl0zuqvK(Yb?)o~6S^k67{B*m#dshgH&|y|mPB?B!c!xrC(B2#HoV z87DgwU@kcIH8hh-%&L!>m+bxpY0aZu_=iirlTn{cl~Yi)HijFhk(3h48Gb^OmO11P zmo*;V%_gmVpF+Kj)zjN_Won-XJT76j)?)Eg2?UY^jS?9aO~tm2=r=Neda(cj%~Gi= z+m(saR=vrztq#w?`k#|t)}Wv<7q zc!ne&Yl15~h*&al=54X&xV!&oFCJJ-UQHBD$#r zDeA=b{{SMkG9iyk)1|RpO5ad;?gO@M32R0_-~;fBjP5f zso7sSJ3h!3NaS2_RH$qYe~TIISxQrX3STow#y@K1+wTy38)%XwzSdmFg$?#q`L>J= z*icvwzg}rCY2-KT{LVW;x6u4eZ+)j&X!i3b+e+HpwX;TuxXgZZ*~;$D88Aa*oK~+x zF)sW%mUjuFwu$9kN{AZz7f}MEk-3IS?+c7)r}L+AG<7NAE87cJwANKlham_rq%jwW zll#9c;C};VEY{`w= zB#`{ubMqeEM-}TvrP1d~4Lco1q2Q^!J!NgFSn9fPytq-m(%Se*EL;BRc2F=6aKk;l z=|*>Uv-zRQHrDIpKf|6p)I2*TY_4UnoGT(;Tcl>@AlU>i^L|^} zV$1lGOuW^st@W*QS-sR`c;L6Xx3h-`WniniL$qKMkGg%STFXSf@~?NRXJ_MI7I=y& zuKpImr6#K_qz>;Tv2i#LwUXi8LO5vijBfJSx6BCQvxHOk?`!`6RxVP13BdSM!n$Kv z0pl26)@`pX)y(Dq!Ii%Dz~zZ$_9uf{N?nZO9_OQJn%{#otwABuE;RjZaLCqg1H%-m z!EqSiWaMYRIXD#-l$TZJT5*fhQpT(CD_`*Z*4j6O{vKQDVj1I!p6(bf=VV4M-ec_y zJk?=_V~wNb?^&uUTDdprqAk_s(MI2kJY&Vb6t$liTicy>%F|K1v0KYuFxsqgA3gUc z`mL%=2Z-^N$KJ`U;YmYd8P#*#==5<9hOOH)E7_Kev{55TLINY!_k`Olk01n_u1^)oN zz~j(Tac`*8OQGsM0oJ@HrCoW`>AGf-YcvcmZ?2>y#K0Y*CXI5Vo_Z29&q~UyWYzBd z5v@5!`rGDtPOsx#I>S|6LdM%oytA=0!E0@8b8;4FoHfvs1*1MTq zCUv@h#%~7PXwzs~?}wHjCkIc4VK$=)Jym2rY;pxg!+r7(_iHCgSGs<^4HZb*&3bh? zO+&>uc9xS%XCuXLa??oAU9XvrXSAQ74X!_zdo3;TAxzSg6(lrsYXhDjvjp~&M0>p&id z;qMXYUKh1{Sg+=}Uo&_j+hJBC)VCne2XAlUi%%6Z!L7yTx&`vtq#{C$I3b5XJLl9(ZBjJcCpt&^#^T-xYi;ir!BE>X+J0y}ByB zyi@ts>^cm`AY}tRM$z@G>QRkPiCnlg%ixSUZ6Hg_8&gNwf z3lr4wT+aaox8te5*JaoIj$`6i#(#-A&90H+FA!=PmX~iil~YSw;XS#Da8;U670W(x zv#R5h(yo>s5xTN|b|$51KCK@-UHHc6y!U7Kmsd<4R(EH0!TEfm#O*lwbI%piW1ORD z;%n3`aj3;Sku08Lhj7lr97oUqJ8(HPz|@z<+E%8DmU?vddW$*C?K=4g2i^VIUBQQZ zH#D^w6nd_sEJiIu%eh;I8`O|V0OfPIV>#*12AGHIGiX|y2z*Uv8ln*!2%`}Es5ao3 z{!`Pb@86m>*f%ouJtIYt3_2#JZK9Qz%8F&&o?`KqDo;4?#Rv+wIv%m5%D0+hdEr2J zlF_#^5zf{FocOVn_j4M}xE;SdtG@oYdOOLaua|a_K%Oit_dk5Z!7Tv=;_DE9>TX z;#ms;ENpVhV^!iZ0Artiy7|Mv2o`$rIRMx~wpD$w@Qt&T?JS#DqUGdhN z=4@t)Jr+5y=0muJNgHY^laHIedI}>}Ph{7vkUD8@*UM6QJ}b+oG17b+tY17{PWc}4 z&KOw82mnOPUQ7|m&OVh~iR#d~t+6hn@n=!In%7Uhw9_XpGO|l%uEC@ScGcl}^MVh| zNug6qVCQV|e-w=t((X67w)x~#c_X()hBhI&!h&{!1`aC7JI@R2-`Wd0PoRO}$(7PL zp_tpoob*=;#Ffue_mAG|N%;*kC&ktpWrdtF=$c-vE-o30G?S$8t`{O8RTYbYmM8nT zIH3*LG#j??o}m@*hczEI;#OFa>Hz2wjvE1(4yTW(p{wpB?XlQ+m&5-65xyX-_ZQL~ zLr#TN_O;Eim5QmuVVFB(zb74qLUD$h6=_S%@x3F%nzLGJ9xT!%XyDM~g)bdu5wve9 zAx1J8fg=YUJJq*s2}$l`-*}@^mf^2vyttO-l~;30>{UR(RV0=J&<+JV3A>tluBEB? z(AgV^{K@TY#j?7m&9E^)F~?oUtspY)^oewd1*WJOE)=%>fJ);XeaEFRA&zSaoh_}r z;h8qOCeZsy7}yU}*ROg2>a;B*O4THm9}j7o-lHQ%(Y$fK?8qOD!ZklCfzh#((9(Kt zG_SGUTX;W9wYg18#F|rSRwY8c%cHF8opB zI8f>H>Dq*Q;YemJX_kqO3`&@gi3uZ?&J!OuTERjOT|WN+yxq!seuh2&0K{ESK)Px5 z%{o+7mNj^uCPj*Pvd)qK8_XZY*)fi_N|KV%lIk?|M=g8f?E?De{t|gLMbdQ{6n(4A zi}y2-enQdwq!11_06Jo+LB(5j`4Z%tzRdIuUA!~nZ75H#Y8F?CY>Hykp^!%`EOCHX zsk-t6a$@)=?NJ;f6tObJKy0R*6{6vlTpVsAzYBaIr?vK=4T%N6bRN09gxT8DYAc zieYoT(mZvjc#_uF#FmypH7jp6#@(ZVqzbIKA+T_Wz>$Hh+dTHgRmeHyv`AGms%gyjk%6*noC$W4Kuj(e0ms&u9{&Jg@h02D+I60#sKo6K zpKb(V7|`4!vCi1!mwK#uJb(f8=qouw<;He7X#96?@eXPHOzCxRaU^eQ)~$DN@Q4=& z<&ZGLx%lzM!0SLA zcfsq;cRQkeFHOH>esTgHgXO?L_>|PILmG-aB*15F;8E+sj8Hk)BXYTzmNPAty|tb z_ltZ}rQBS|8ba4|&9DM^Sk4YxxBz1UwTo8K8A)4qa9U({@x+(LWST{hk-6*j^b8LN z-!){N;#%nUx|(a=BD03`Pmx4Z3%iM7h+GvVT2mL!Lu0oafd-TE8ZK$RH@ej{F{0~Q z7K;Qa=12a6YPPd%UzmRVH#r=0&p%q8OFP~DDU?oVAL)h+D1{hdZ=POvS>_*szFsk&{B@uR;yQec5JX5r^KQvz0CX7X%>Y)odtk;$70`bO90ecL z&;@eN{{SOC{0!in{{WwQ0I{cAJ@fsR+^BZw9l|b0sV5Wx=$1YKy}4p9(i>>70<%gP z3w1v-K4SCca@N?cSKtNd(Z~cX_t~ht*Kwj8QiL|zH&3cJdwbl3_HCl8(;)? z(9Uvl6MOf`?*pkm&*)=GL1r^vL>k#Q-JfyhA<7yoy4=w!)0f$4qAc5z`;efHHsKAl2fx-Drh@Ds#7x2iK-3 z0xNx2Sk(78)FO#o;!W~^`1%gsv;okKe$PsRJwIB!ibh<4Bur#EhFR@LT=og&3817wM0AY-R;2TpmQ2o`-&hTHq}k@Ldj zvV--;Ge8-V4FVTuy%#gx2j3_Ugd}w%jNtq8KpjEXJToP}`@2*i;0Q)W#vE?k4oSzp zC;`jktqVgBZKT{E<;l)N6gw9sA;4BKgqVq_voFIp%Z5~cZFctN>0|MI#lVIM2}QM@S$=NYc%^0+v2RE572k?3?`QEWF(tcOA1J|Y zQ_GOJ0hFl0V7cYEJolp33!OiJu55fZlYOeywM)6nrr4z>IO9{08*<Q^kl;Y*H zu;SA5G|$9KUk^zOUuf{!TS(95BqPb4*BDh<0LK~Y$&^^+}jqi)!}8C8BdomCj^cT*5iykOg!ae!W2Dm)1OXrLj&kmvhWt8q&5DDX=5U^azcS3p4_XdHznQn2FV1sJvvqk znLqerX5(-8bII;}1>u+kLdyRDP?WHUN(Yt}Ka_3(jtqnx;HUtMR<~w)9d?zY_!`<+ z?k}U&{?`(&L{P%kK{>mm+&-bio+?iZuC35f%w&sHV+PJ*J@6ibp(qc!>m(n2OT#r-82EE zW8hnxX7ett5X-c$1UjfZa!KU+Pz0LJg&Gk$w6jdCq1rgW9)leJ07?MST@vNA`E;w3 zZyAzhluF=+80e=MA6fvtq-&9AGTuk1+Sy#C>`4;@Ayqcg6SJg<$; zK*{&)1psE7H@B72?qJH97>xBJ(DcCepavwxK#JHG40-h<&>8@vdSsGN$s2}D3=mE+ z*YKbRd6zSh6j2gbU??1)dH{f2Ph?7!eZcd)9OQMN3BK1jCR4l3AO&K19)}&rY|sU; zx2&qj<-s}KoMS$pN&wM<)_Y`kiIwgf?v8V}zh0C9t7&SGAiKU)p5P6ET0$3lbRz?w zLE3;C^PN6fE%jJOmx4Mxo^N*N8yi%lH0^l*~NWr zI;^qZLYjrPbDX?miBWp|y>Y>+QdJ{$*W@P`2WS3gqYdR(6 zoF8mxZ5K_p%nSSEwuzX8i#YJd=3TKw&Ovrg%Yw36u4ZdVmktH>sCuQyfdZ`5^5Iddpf~qyb|{k zGNXn0nE}Dt7!J7hq}_pPdw0a&6zG~QoZb!iX=@d=sdbZ7xYNU=bGnQqVC3#ZeT$ZkKY85w~yk-PIFqAp5=GqNv!m# z@meCCe`J*O{@F65O_xAG>~ga^8D_cA(u34o^79UfHVl zVa{t=d~lM+(pa5J-CP*toQUoa7sfEa!b*t8-oe2qBQ*|!ZsS#29ew*in`=9(m4Rox zmLnKw6nTD|-*T&O1E9tadOd<4wqj@+?}R=RX%dTPyu9&E)Nx!rthGcm_?{BKTVH4@h$%Vh5jM^zr`Arz2=>&Oe0uk^8=ZrRz7K*e5zTy6~;aI ztBhQ9{=P&?N?M*lcc$9u?$)KIc;r#@?b=umQO-X)(1JU!ve`zG%8nJrR52MNI0qtt z3AHG%CHd`DrE$s0=suVf0ZK_CWqFzxiPs7QTnrQMngH9h(FM$FsVAKhIv*{i3U`sl z0LUbJnl5JtBKv@hT`tlHci~*hLdm} znH{%rPjAY{!!0-Gw@Z-gvJ9(}2O$$-DniLLND`Ef#r{2KlvCm40)QmTFDll@{ z7yLu;$HblvjyOC|WqqejA>D4baBSocp9gUS{!~JwXS29U4jZc+mDY;x0h(zxhRbY^ zB!A=F^VY1A5A0|kEj+hmmEf#7!}@*TNcW%$+E;{cHBT}%$26Ku{*e!EP8yAAoWxT$U36de@!m1dwoOR>{1a<0198&|J)4nEMSldmfL2VRP zQ+Xm}S7m7$9DLik!8r8ACc2L2QK(*cf5sYx=DBSYnr@qWbEn(fTR}3j#}3@Qsk;S< zb;jHk1m_~9T`O)kX8RFpvHUiYNUbe(PZ0}9!AJ9LqEZ*O6cg9JX(ukW8|CS8uB)qf zLNRryHlcT}+`7dLu(^g?VQz}t=W77Xw~XiTs#oeKVx6yv^h+j7yNwdY?l7Aow__w~ z7bkIYq!uLfB$N14YT{1AM~pNpRr4)8JEj=~o?;mToN@Pl_6m-JJkeme(WifoslV(zwmJo|r<*$MkqXS(b9oYtw~Z?kItXO8t-kpvPM zt;<6W#EH2q%s`b_B=5sEGq{bUR?(?-?j&a@S^Lc7e1GA6N5L2K{9Eu0&v~J0_OE4k z5;pCM>E-_bz>h|aj{~MUQA&LNn^^G6-Ppp+Kn$W^B%E#qqrh}- zjUQdTIjV8KY8VcTgF!~Yr0mB@Iwru-hD*gBF7}IIy6oLk)OEiNkuzbHJXnu zm;4KI=Gh)&sD90V5$vxev%b-wwk;%^47!D&5A$w2e|hPHnw5!z+5QY}gqKgq;YNvf z;4c#Y0Au*WPqmur#g*FHa<>-J^dVTp*mQ3DTi3X)Q&L)WGq)?$`uAV>vGB*mkZJE_ zYo>TlQ_q=mZ++p>sMtd4Hf9-OC|nWB2Ez~H$>zBuN^rjN?X8*A>cU-@%IAZ4%G1Hx z&a(Eu3L8<@G{m+S7x2YxC9)$R%#Q;xE#+q|wZ>!4+>y<6Q*yVzqyE1W38>%Q{=eWJ zA9Z;S-DOyq$$xJQfUqPIlSqUv z2Mvw6<2k66MIFkF8`#V7CXuc9N?5ElyI7%=hLr`i#CHqE6}Nc~>z^2*K|mR8zv&~~KUuJrVG-`D)dWo`X*F(1bN01b5OjkC)h6$mwqYuWvxeeERMBp;v4&zmrjBUc)rJP z@`du|Ea1o_es_SS7qbv*Z9A>4*Squ^<+oe@2U7k7()XsnZ&K&%t!Jgl1Qf=@rsnx09$+W!E+f6bN61=0Qg0PqVw8qn|V zWw-G+!+(cbg`t*5llx-ETkS!Nc_K#K;G-_?IOlN3S~-%^QeKY8627rtJx^n>_}6mU z8|eNda|FmGQ1e*{rdbf+?uq{4!1?olSBA}HEGp*akLP1mh<3C5kC!!VW5YI@lv<+O z-W9vW)#P!AVug3HVl5K|R1?>BKS7SzW*kA*BZqplw7P`aCtGCC9)z!8>5p9q#nI+Iq6jA%C#j!n`7v24t~sDGMdRHxY2Yq zA|`n6t~EP}-bG=-SZ$M%I)jtbn&g%?3GV*y^EzXNlU+XYKNEZt@n3-SYiP7T5Z%vV ztU9IL+|t2qYAzEa%i8W|BLIbMyLji)uAO+)ZtHKGx8y0&a7$eu$jQs7^+qp4dA<$!+UG?cFpEgOn@M|Dy^8KPLmS)1+g;Rd%WXe+ z51B_KVzc(Kzb)0u_ENR&puY@!d!~3#?HX3SrbDc0*X+J*Gesem7Xty2d-=5yQ`h1r{JqE63cIM;2D_RPP>JS)2xD49JiAp!(f(I@ z4M)SCB8qE0NFmHK#>mIz91M&R`2ICXr>Z5ZZg~uP!pDd<$jyv=s7d4K4KW%P_Ij=K zW_>qIzPN~EGRJK(QJ+=|#yjJYMbZS1TGPBmZ{jO8hWHP+*u?P53Y9=&P(w)RfOn|m zXYXU?AkkpC?-pMU{2St{2&`rCU)XM*1dt_`m34ai7aw_J$Oo@N7lLb^b!Qi(Z|c%F zjX2A%;MwTj75FRRj|6D{0PvJ}hs7GEnWjOy@Z4Q#hSot7U}UKd!Fo0b$nRK76(;#& zllhxR4-~H3Un7_Ji{o#BUMG!gAI5itLOjcPt+Z1#o^IWQF>xN`KYJW}-RaU*qxM(c zO-D`je{u1F(tJB{s@z2vh+TAYN0q5frc9fg8QRdPVyB-|UAo(Ek;|uZ*Zv>qo(J&# z*w-~NsQ9+b$07@F>`4|4-`^56tMe(&0ULW7%6!sRT71ioDtCJPj_qu84;J6v>M~ef z_;SIFQCUT6XjrT&xME|8oUz^6SZA;lE@&?Q05Q8s_W2FG_-CwWY4-gSQhVD7gByc+ zWi_mEZEuvLNv!{7Dx!lJ@TaYKbLA+j^{tEd_B~)h()G{cL=pcG7{`dDaT!> zx#^MZOPCV5;@&CI^xt%52o5V55@kf=-w?HPL8ZqzzMd7H*(6t(I0~d>w%ynuXPzlA z92Z4f6^Bi~^Ox=3d|G76qSuw>^%3De0+nl* znWI*oQ#1(Z7h(~#6<))>aC2KKT&Z1<>T@?`x#qexw~D?JYVd!;WhLI1s)$Oo>=yB& zx0Q0G7Dgye;4_8{xGTXmcU2aend=9xjOg$DEZ-1>_P!80{<`-}vR&NjR`J@}DZAf__f;$)Qh^dm*^#}JU8hKp%sis(n;orMLFC8 z50@KH6)>o!wf=ezRNQ-hXOYk0{{RcM{Q8CT7Zx%3ExOv`HYJ;a*G1zyKy%8*2`ipO zXs%{*T1WN|_ST;-n-#6C>J+$|<%Fe3km5v68Akw~_~3P>#EZTy@kOPa&u`&dOBpRy zi?r7fGLa!XJV;!X2PEM7^r0cMqS2?(e$Mt9)Dz38r;{U#mPJR6#_iF^v@isJ7Vqwy zPzDc-{A;HjLF{yW3L9m$Pbx%;;&zOl2$vhNyBraKzSN@@w|5(NFwcm!YpY8;+gsO) z>UnMmt4y@8@Pr9zeXU!G?wP|nM}R;`)$+TLk{O#V(<3#U zef|0uFLQ3E%omoC>&+y$=2g^WXK8L8PnvR1Qiq`@-8{L11vB#jUNmp&Ow71@MMv_T3aDFEEov-QE_dXi%Ky4z> zPRL<_BZ_rQ@`R{esyYGpuz6!!Dob~%i>TI%L(YB@+UQ#6iAIm(`JN3rMUa_--wL4o#^efBg^&N89&!eo8mit74Pb+9rs<|)n zWtl+h&>H7eDkrK|TbnpS+I86ZuKxhQA7{AxZ2th-FnJ}sza|)%2U0@~;n_|IAQ6%H zS5lSEcC35H!yD~CQ`5B{1z36TO$cpPIc{BAM`Td5sw(Ueu|d0V&N(=&YNr;Z@-?Tb zarvIv;Y+A5ZnZ06sL!gQ@*QU_`+)N&nClQAaGSQCGsfQ4&rw+?Ya7#dZ(EvvDz|Ym z3mDMe-Noe1JKzB#C+=rrdW;V(&tP+owKSi7zpJ6uU)Sn!wwh^%Rq*brsd`(?^P1un zeZvHm+y)RF{JnAp2d!->U0oTd+1Z~Qd|vofE`zJa`dg{7xduyBZZN8Tbz(n>PaKX$ z4RlkVGBBJuS;6STTJXf9Rna8-E#y}c%?XZTi@Ye?ymVkW%8|}`inp$WCvA^#@wdd^ z1bE8IPqz4bRhPs*Qb~0*AYEIeqyX`xfQQ@NLC)Ow#bZtqi``h#a*USF zhl6jv%JZDXXMQu~MpHSE;aE0uFcrHT)Ap9!IWMunTlg>H2Z6tPV{a&1qp&rjd5a=3 z3x@=8lfeuD{0Xa4OqUjpr^6Zqi5->Ark!(cw%3K886b*nuOMj2SyAeUBc(ZCO9W20!~Xyrbxl&v)4`f{YE;73cbivm>lpI`7Ih>7ILi@^DCQq2&S;(m9}ljh*0qSI`vi}Gt{`_CLCTih zxd&oLUY)T{_t;w<#m~gg2j1MrYoo%eZ8D*FEzHjQ^Y`9IY$#PHbYV$sW4%gEbsKB2 z&ll>~wmORH+GVhg*p|QmGB)xsRP*KM037pFgw8`s@w8erli%qEIBqTDB*my&t^44d z1&prD9-OeoGwX^RZ~a&kvFo}|#2*~%dTzhs4-(lfm8SU%ccrJ0ZEYTS!Cb`@j8_P! z00DuT#X>5{f5H3BT-*M%I&Eji_Zs$(YE8MjwYt5A-fL-s&kLbBS6p@4ah||}C{&bK zN~37f_=Vz&{{Rj6e(v%+O*(0XA`Q1kRTgRPn7UGRKf|qzj;!dw@E=sq6! z16=rr9nXY(D+pa-clkEV!Igs$uf9S;#uqteV}L%j6Pkj%*r>tD*&Z$|?a`PdtM^C^ zlhpcfI2B}-q=p1Q7JRT6;dm$dPy`nC!r{EnF%z~4REr~<6k(AxtQznH|Tx6OW4Jv&ZkQAS+1qKi`jihmcS}1moJ@cPIUH`s zZ`bmm4?DT=?D|}#wTPJ^BrX(ySdoxdJy#tl17gv%NJ71qoh`(HfIeexUOj~XYNv^0 zkL0zpx3&RFwj;(sJZ=ZBJ7Rz~EpPM_o84~uYl%iS!jTx%4?sS?^Z}!3taw`YY^sj~ zf_PV6*3Z&po4(^ZZMPdj8A!O6iKeBaK1JlJXG;zxx?m;u0a2M5y} ze>wn$TR$nb%CCiDPX`(FIG_oUe#nh+3I}HSRSRP$+vz|Z#g~osn;1lPGAuUx$xktc z1B^3p+2xdNC-UZiIhz}c{{TKa+bfA0>Nae^Jc$mdHS^&9YuSst_vs$6Gg~?`X zXw=BL{t+YOsGtsob)OB`>UO%8qib`i+bZt7N%6VPFgD@FaCyrx&IcHz^%~IHwu4C5 zl_b!b-%KdS7V9fZb0$uA5hmEi2OlrWJCi^i2CH-7n|pS*n_9g|BOXYzjS})#kgiT1 z60vODagyZ!0J3Raj>zI}HGOMBNTRqOXN-l~4(R2_P{an$wn+9BTatSP-jS?m`cM2M zpAju|lu2S)Z6coiCe$QG=*tK)d0^v@GiFC>%}qCDf6%uEmEZgyxbqABW5aSGn@-a2 zR^??cwo8FMx+Xcu0ZBRO$OGQ36QMJB^Gt1#TOtI982|&F<(vRh{jB3Z zT6YzXXYekc1-xlHf7PPu??>$v)J<9c(vR2Zqbs_?GZ$k&%dEI8c!{Y$@c9**#8bUEbOaSq|6!H)@ymjiY!a z=CfHTdMX(uZ8?j`gE(}O-b$bEm(&i=>j{KSls~m8b$#! zdW8V9?kY#&*={WAWX+pwuR`(xS9|NFlkA4p%YsJhN>aoP{g9__I^&w$ydbGONrk^mhxNWCO_T?ypZ0Z)RNwv2d-(W zgR#dQK}2ZRKsKe0xa5pZ1bgX|~+3gSB$@cyePXd@AMH#blr#DWduZs2j(o^y(herxizf7Gs9d|Mr_ zigh1_I!&@#cy`ys{&U?ED!bb5iX{LN9!2^09*M?3iMv*D_MLfu6G?J(zuQyh_Fvu(oLAakaNiL8TDi7KG|vKS zJ|T|X06}p!pz(R29v{h!ffyqgQq8xiCYq$5#FyRuTu!6t-`;r5x`?0tf!SCx#MJ2UTzD=_-Fbv4~ z-_K#kLdU;PS^&U>ZW8MoU+o)6C_WWoAVlj0JG`FQbPvKVuw|}+miU7}rrPQt? zwzgFp&ed|;5lQGv9^SM7j)K6*(-86@D&jXR1`aqpeR!Y?dTq2ikI8j$!imj97<(UsxXX38)*Z9jxn5iPz3r;sv^{2p5sxuu#y%o zTGk;WraEm#AzLT=)R-gNym9e^!5%l#;IP+X)h=~=Xt1-#<=SqOW(k*IZNt@idR7pn zC_OD>dDM)Sx4HAIQ0Z2!9Pm#hatsxcIW{mOryyh>LtO?3N}e&*Z55@k@eZy^Da2z^ znSswa``?vIf_)dw;qN958r}rkYYn>;OPNmqCtrHV8^xtDj!BT@5!Kf9dq&lS0@-~1Kmc6==*{{R5YxYZH-&lzh> zmbzW9nI)qC0INid><6iND%=bpHS|=BwCsAB{dE7gD=E zfnxEi#~J2TKX{ON!Tv(J)u_bfcc{;%tSn<=5QY_w%THjiMu044P%^w@{#oaDu_L{4 z%3q1q82$#$)z#E86=|cK0-;?7cVJ^Ao~4gd->K_Tkxic?Mey~!edC=&ThIbOhqSBJ zH?mJA5_!nn;yt+Di1^Ba2?K87oY!lq$rXLhMNgT#Y;xZgv_I@ER&7_s7BU39Qx&0# z_9H2lA~(oMj|CYB`8o2*`|paXa^_kSQZ{EP;a>u2zB!Hboi5RrSxMm=Zm$)Dk;oXa zQmgWn+s{mAp{kVmb$b&S^Jup{!$SBoqu<>vvv^P?luW;Ay8i%#kc2=uW?k`(*aJI9 z=U7g!D&PMAB{z*E`hGv~4=C4sbMW%k>S#1i3%v2f%(nLz7lPqHQhsGdKo0JsJu6ii zb$@}AlzK15=Rc=-%fm2FEXTt3mlmvm2xgi^A^!l0_eMuw?&AWjruveaT?%^Niu60{ zNg&WXHD#pV5~N&5b#WsAJ8g1T>S&Bw-QVsBNj;Um^Ug1?;=|qE!ftNdmXhJwimCKK zFbDa-swC?^9r#Y~$J)h)nHB|IA?Gk8h zpw^GthTZct@;rr?sod>`KPc+mxFWcu?Y4(xV|~xfKNT{=soe{9ia2GJq>QNq1!Ist zQGtx~uJeTMz65B=t9ZH#o7XT^^!aU`cD?6ClATm_uHZmW~ zn$1mK=_{1t?Pl~jYY!FtD$;IE?}ekYw$wJ^T01AVX%$9E-sqqYQP!`Pa?y*L3uER# zi5B;|mx{G}go@(nKG!BZm|dgB0aLvJ94X|J?_0xT8E$%a!2LGr2i5JoMG3XiueA2v zDRg+YuOzc89k>Uf=Ax%hQPceon)RCq?Btd`7FBqam;wnqz$5}Q*p5bPQV(3xX4Ull zDji*XV?C|A7~=aP>T-FiPZ%*SNL3wAKtC#$lj-;rn_YhruZVTYAit8&Qq)eQ@SURJ zXL-@M&&to#eiYD|&RlqsECO?aPJ83tn2h*!yLsOQ+BHLs#2g=SKpjnnlP;C^KM-BZ zD`>Y8Nf2vERyiG%0?2T3igSkJI6Vz3-$9nVYvAkqYjfgFGfrsqk2ox>w@Y=g+-^|i zc?7R^>q$$XTdCy|80Eou*pc@^;Qm!YI^8M>=F;vO))il}xRs=tqf)CO39>x=&z2yv zjNo&OWYKUmbZFtaMzOmHtm6_h0?Zg6l!hk?4|6~qv-o!4yzmT|2)=fIS;S_+6#zI&HqSdE#pe0PiePL2}_Gk8c~oo@8GC058+6 zM5kwKKhU)st<8I#55d|^lW3`|MRPo{7}rp>0gD~r?v^JYs;I~ZBj|e2n__7qSW`~$ zk}ao&{7r2&&5P!&sOBq+sbm9{f(;^@}?9=)}{)HU0y z`0lOZQ(+CV!pkJbCo;6BD;UQ+M(;sQx6l$@PDwQ@Yivs#K}jTrX7%Lt=|B)_I<$8u z&xnsKZ~_v3ynE0FkA-|f`aYnSHp(ZAsg7vN5U&&P%Ge`==|CQ*NNuRO;CJK>c&SgI*6=_*mhVQBE9uu+AouPaCD=1MzB&znxaN`+f z&!>Lf_@yN5INPb{x|DV{TGp0)DQ&08WoH|Gx(Ogf^Ht8_BxH9{#z_QzHI#1Cxua<{ zV)uz}^m%P0wU!%CD5HgTF#L<^S9VAHqpc83B-M|ed`qEP>6WnzO+wdIx^~`z5E51A zB}%W#MsRS)jB#5hb0&q+yji2!SxKjARza=c%$J&lwp!_=ApE!`RJP{fPskJ;d#0Gv z=y6efvi?>6!-QSi!2WlidG@xBL^j6{5VCt3GS-FNu5u@gL%a zy6M-KJ{{1m#mZ}1#oNn%(#lltm6h0STzr9)pYLGTO*J}j*H_Uk4tdHlmYOfT`U2bb zdH8GLc>e&lH9r*SUM%qX;KiLmEaqsANkt*cDFci$k5Fp|iJZOOR-dKOv}i?Y+H2Ow zpxDRzDR^aV^&Nc@);q;%64vQ%F1)D0+vabLT{iy!wYU;HR!{2>Ps+&Adlmlx2IQ9h zKK+`skko-5(1YNb#KH{{Rj!+@302E4}{!F{+f8Z@BO+d*fC2 zjQlxwt?9lR@P4D=KQUrx=Zr&f<_9XiUAE|?GUE(dGT;vVYo<7L7PXcC01v-w7)rB} z+BQ5h!@m#wV|eoGnr4rCYGY*)ftuFcDB!$1GEl8WqGF*x>!xVw-dqM82eSq-)Pa|?IV>P=C~v&lYnq@ zliaR7`KodyBj_vN+3(^(CX$ff%l6nIa9|t>IYF=lf}X>Ti?*> zjv8%gZ@lc!z+Z_Pt*yPE#ZMaOqfWJsDD2{vRg@5our(R9#880&_ z(n)C~{Ewa?e-T_?T-hyz8ZELi#?wu1=_Iiu{pgDin2#$NYxtcW)-m{2z3$H+ z@fXD%N5*#pRq@5{tFGExJ4F?})v`QjtVqt{5wZq2J@cC06ypztBx5>`e-pW};BScf zpTjHk)V>&AuZHKi3e64laLoh zZwT0bYe^eBTwC2tE!%fhYh?r@5%;<0wQ&CcX2reV_2zZ`dP!`L1Ngu3i^hIDyKOth zJ`3>Hjj3T0Tbo!MUN4%Ujn1-VgDK@0HyuTE(4e8LTWjz!ty#}TlKjW`4^7r~$Ko#p zKlVk)iBem;O+hW%H(Y`WGYz4L=zDb)rAHm5ua&N61uf&J&d0w=@j87nIa|jTdM}Au z<|$;F&r;QaYpI+CLil4DP^*EJzd!#G_4lQeX?%tBbxC?#Lo-sI*eLRhjdHZO;&k? zN<@*QM3KNK3vxyX!L2FAQTUz6oTDw3i0!;Vbdr6NLdhbM9^U3GsTt&QG5J=UsD#XY zZ^IrR)Mq-i<(&3cC9&t&$WcM*l7wT9v}%EzbUzI5uNVF#m%`@MXUkcmNS#kPE&c9$ z`tm5|w&JzRei-;ktwp~}*KI7W4as%hW{qbEdHvgN-OzKv{7LCIbT z&M*yK$+53};X&tlG0rE4V=Cuxl_btHf-pvVgUO~NCeKCiXNT=t^TkVhb2tQ+SHydP z?utplJbO}i8Zh-A6!>b*qkjwAPxgXC?UfVD45R8!G5zH<2<5y}<45rZ)O$-9=Ohy? zv;rq!2O-MfHhcWETElvrta_EYx9;Y6wqvOW2iGI{QxWOD4EUpYYdE*L)lIwz0ET;_ zN|sjK7jOrHdFPHf=}E@pQnBbBBAzX3@-)AFwL`AH+5M;#~;#LeKHN5c`6ggmBDWO*&o zh(fsP>(?0^)3_G34MFeL3rXKF&msu~a&Q>{^ZsYQ3br$;R)ZreUy_=(~VhL(42r~Cu6*KHWjBb%*8<~ELI za6GiPffsUZCmWr~{Q~P%L9Mk2$yK*mwzwnxC+QVxXdUf^Lv`KAXo-1J~Nm!5F z;Z&26o=EnplS^?V-o}D_Jow4u``@wO*z1fTf&Tz^eC=fjSLIbvwjs_q0c$^NP8!{Q zW&1hLxzTvz;U|jx3vc#~d2Ee}+r&(8TddFmq+m_XGFTPc$vpO_PP}St6Qbd{z_MjPSCTE6&M0ra669dK1i%%4R2UnOzt#}stYiTsAi|DsX zyQ02>ciHou&E`aM!A?JiBy-xeSL#EzL(%*tY2wW>7U#g%>33>FTbpR^MBzl-f?;Ej z#C*!w$RA8p%a!gp-E3dF@s-R_MW*~n@UPo%V2H&f^UBcNxgT-MDuux5jGj59q5QAq z(0tv|!spmfSD~K&6jRQ!ym~RCOqy69&PdUo=VOi9t%$n|8C(7=6i+oVDlIah_xn#Xj zaXLhoZ3U>ciJN&;XZc7ikOOj4?zVbLr*-dn7tgP|{{RenK9l3kPsGdie-~+1wsvu+ zn+bSo}!Q zm1dF7E@6n7Bgx^mHUnS|s>$@M{gt(k++Vc5=WMsy4y9&4u)IrgXtPSN{ht0aC}|r6 zZx4q+dgMuk^`-AE(ONa5IqgHi-YW3@+w1LhY`*-P4E0r4_y{l>e0B_RGjU`cx3;Iw*8T#y@PyD^-s(_XPcqDg-U1HL7XgST zB~R0jTG>09wPTdjz9@K`K=A&P;jJ$H(#WimAZU@~jECxyI+jo|z*9?+UgPI>vEq83 zuXU_DTRHZTGW`QvFDG0DqR*mv%6HeN1^ zQ1J)ad=+C3hat&{BDs=T0ssQXxlBd^}iENWw`-v8DZaQhbsPJypNd=7%h-18DcH6{{S;s(7x>X z!^Iu~@SlZlWk~#G4zV&5n_Ejc0m&p469Qt$`kYqLlYJ~@D5ccRw_&X5!68=}}BRR&_=c>>LGpXwuRoHQ9rm`0Mt-okr zpdDxehM%Ln@xAK?@)T~u`VOZ(IG_ycxwcG5Il&kw9R6HT1#=^jnFC{}2i|}s5xW#Z zjR5^X0>8;0Fb9Bp@jwZvSV>^pCc^?a+mbQZoO;j(YDfvsZkQd#07zsF%Ad}FCtHJ! ziNWoP0GidFb|O-6I`iM!fHdvqFgTPq-N;gZhqrnFsLv#>uBUr2=NULBtpIcuz7o}S z4YDLf2i^}M+A;j-1E*gEU7$%JLpMx>bnDy#NT3dK@lKrWX?bhq%!dUeZl0Vj0iX&V zQ|fZ0K@`eJRSKa&%>Z5%?f(Fd{{Sig$CFL6!7-B21C8sE{{W7j zXaQ#Mgro@)M2a#;%_-UlJtzaE@Xv(`T^TGdRqx^f)-?G+P=0T{_xRwBIOc#iJWXVE zapk}aXuVT*PvA!lgOiMYv;oKInue+2X_EHM@*`5EPtJ^)-SZDZe-M2r1Agz~MyLn& zgsB9kU_pqW*uDN<YN7g)WOB(}Yo%>x0E$3v0TAb&SoHu7q~oxl4y#1)UazRzi^~YXw{S{1U^nBAJN|S59sZYl zq%y~=MDQs;e;>j=_S4Xx#(+6!^^1)*Qr2>^0zu&Q_n;1v*TuK7A$Z+f5?qEs$@lfo zy#N+^>m}LM%4XrnI6GM~J8fV_JxAd{786?*^W5qemhj$OToz&GuEdKcCu*(-_zD2$ zHBD+uo1eExsE*r73Z++p#z#Y+)_^Fcrtu@I{LwsuRzPs2hfbJ0PzJ@9i0x(l&Z%h` zUZH?JKfBK~0i^P2h+=KBM+BvwO~fcFPs@RmoKOY~%V#v=EzFRUkt=1sUfEI7fHqaM z4XtY&63uYTyJvZPh){PWeqw&4fj}2@-wPR`H}=xJ@S^S_-Ih0n%V8Lo>Vv5u4?sbr z2Dq@$?biCXsWx`2~>ZEq}IS$0qfcg&91>;cEU0C1KzcB_Bo-*1M`eqYNf9l!6Q z27S#iHZSis%O#$R8HY|{0;JO{#2@b$+A+^Oa3}+y@PCMO?+x9}KBK4GU0)<`_G_E? zO~f%d7!ssKl^l+%yfXJHYGoVu`3^3_6UR$s6tU@0K{l$>30C@RWNxIARu%;jv-ft5 zpmym_!E)x4@gH2%HAL3+>-)Loju(nKCsR0xzCLtDAwd|(+mB&Om25s|x#$-E02cg0 z7+XJ#+WIMm;U(t#CXWCOnex~i{$2A>sYP@}dq(<|zu`Er({)9U#FsPP6jt*kS!2{; zF5G~G5TIw0a7|sb(3|%gseD(DSdn!5jW!G0J-H~+`ArjX%sUHnfz^TQ(vDkfE^C~o ztS)>Xb8D>X+I_SAwS4F;FAz2sONl(RRYKAd zIpioKJZFxS!1PZE{4@T|Z|$EOeT>*aEGu(mb2F^FX9UJrAzi$$KR!nTY0fGfudzvY zJKaZB@K=FumTv)Br23O#p6=#mkz&uxQUirJ91ehh2hW|=5sanre_o}wm%?&hIrzD& z>lTY+sXRg*>oO#9;1*I&OA<+8oagDT*m?>&4}?z$lYq z^MQad^&HjO#J6(}J$mNq?afwRAf>YaOFwv;~#lzFCPR_2>>gvr55nk@&@0;(b$CwvzhpKmciO zomMlApzUA0F~$k!+JW50@khiBd&Lmj>Dun4b9ZHC87(d3m6|A5C*_R^+MspHt9&H9|T|pA6~xN)PR6T^W@hDBveNkOMB~J(mM+ zc_$PBgKwigt31a?jp5UyJG|?bRaIWwoP41B3INm9{5@->L$Yg`Ma}`YQxgL&dXlU| zB7xDE4c&)&0IO@LTrIj-#^1R)Ssxi)&D@dG9q0q!ydU6S4rrw{I6PV5ePLQJn#TRE zB2;2NU`PP59V-b`ds(lz+Av$)dNZt!*TdGgG3s&YUK2~mxr%!oX5tA0Db7%Vxm&uP z4J$tH?nBXZUnXXJN!BB?)9m!UZD$kOmYYiuc!o_uZJD`ujwda%c^G5znsnoLb@S4~ zsO_Wt?s>n2^h=BF3tI7Bv!Xr35k_LOzP-O&D`;ii^Er)>y~)P`7Xx>Cxl2@&{4f6i z3`Aq2cK*Lp%!aprwc~iqu}U`VF%6-8fggyi2pgko_I@9|O-efmm~IA0l35`#fO1u& zh^v6ZAnhZ9aY^cdXm#HfJ|)NTFH?_Q(KJ0j!!{8?9k{f!nrTK?tGu%v%v;a^20NUZ znsDXP_Z+2j)3guSZ{iNSrX6cZv#`8ZPdTl|rEYGS2*_oL8Ho-2BOso7Rx-uHF3tW7 z+Bj)RU4Cf6@#nz58vHTRKjA9zhL8Q7roWb^R=Kxz-zNb|tcF5Z_6l)>p60HeA{8B? z?o8-P8p&AkDDGO~B9_*<-TZq=1dl`MTNxFhzMkPchlVtYAi&5MX*vG$XOqVi0V?Wp zL_DaPG1;8tFc`rZ_n-$`>Pc?qNYy5n0B+}wdw-1pM*6{;P?##@g;0YB*Z?}v1?zn| zr;g(4R1Wbns{uF<8lFy5`292dJ?H_~8j`tKw20m$JT4APbH?veKpj?z@aM(8B}Sgs z#qI6)e)4IG!kclSyRt9Y*NhK;$ziS7&XI>A@)nC3BZ1tT|-aieX@fV5pSfums zSV;)8yD}A6?UhLL6%=mV*aNo%Cv~R!CHZ-nZ|2$c=Yf1I{s*=LSD5M=_3|mdzLnZZ zods{&^TOAP4?=q2>Po zyx%WCXnx|qSNM5?eC@8EpONz~#orz3J}}f_@E353fC92OJNj^ zk>wqwS;F-sbW%QC^XXj_Y2E5`)v0Bn;(i(ZqAq*|q1$*@OwsKG7N_TPGl!B_>hH!g zp5E21N(yf5&K2Ahk>frq_?vsET}ZIU8Chg&hDq^op_pKm5-HoqUA=2-Sjn@f@E^qp zv`Bo}bR8<@`DJz&PLCXl%s9rv1_xn}!>vrA&DEjCR_J zOwEOgWsoATbB|p96amc14A;(wO>j(tXI0L`P{#xgaw}SOqd$e*&QNjO$@p{dy4%GXCy2aBs@>|% zCYNge0A;n(wiZbgWKDVIuu*JD+lYyma6c{wBtF|?at>6 zcp1e{Gi~2u+E&wY8NLkog6arn{?^fovI%xiswVXeGs+y0eMel;&+GRv<@Ec>f8izZ z_rnW$yc47A_xAd8D@i)vv#C^El|3p9%CY?Y&A} z38I+TUs}8qJ-ciu>;aE~TIX@aCc6Ek^fEx`J5R+0Ze37FB%g z-M4|e991WMMAfu7c$;*~G^D95)mJ?~`t$*`GWoep%o~A)BPY||fFl#j3j$N-ZWoT9 zOo{;2HWzo6vg$U*HZ{AxWtp{Mmm2w0Q5U} zUqZK%>N}N<^=MgcZNAMcZGhQaDH~5C?-2f(r(7ZKd<@}x%_Rzleul%4{%N4KpoJo;-bPT8I>uw4lwC0lYa z85|HeAmGpkUw5Huclu6@ZS?DzrgfN=NST~5enDJhejl9|9gGc6!@B01=3MGJboQ3P zmNt@DOlqv$0CR#VCJhyDbQyH}=`<^wm_^hKcZO^)13WS7k#%fjH3L z#oE57;i>ftab>C^N~mUm{?9o-F8L!|;ZMp+`uy0Y-Id8o?1I32Gw_9kT5hpsH6Ib$ zJdj>V7WP(jBo`alDO1o8IrORbo6};w)Qms)O1>LM6y8>aGPG@wrroE?_B(`~Pds+3 zvnJ^JL*d`RljC=^x6?c^Z>0YKXsBx`H5sD|bV6??G!DhK_fgM0j=1KjiB$UD+v%~q zC^`8aDe(+xUkSW!{{Y)sELV+ZX7!vq7+;}x_Yw2jf6qsc2i zg|_>ti+`id0uvLsz%hb2 zSrqWg^y^7V?!$3=nDG2O@vPSGdVD{tC5V*7)5&QfMzXI|EInn8N(7s_d%rUMQ+Bax6tc6A@IA#ejwN1N1pm9 zBhyMX<>SonYXiG&RF&gG%FobogVQvnRYhO$>Jg^o?f(D_dxekeXX4)#ytmSLi$&9P zsIA&rC%lgC-c&KUTo`3UAn}md*g?oA70*0$W6{4$8^;LWRrs7`$Ly2hBsUhm8`m_g zL|T;+fLT}O1cq4@x;o?$xlbMOiodPLOQx<*)t^fRm<6p0%jUsc9Bh8YZcIVJ@JS*9{Hj?6E9y$t(*R6;0`Z2)w|0A~LH!f>*Aa1A=#K@5u4(lRHT z6B0LW;H$3Q0ug{Y``poBJNSH2;k!LY&9c(2C$+Xznl!R#02A`E$b7|Ms>2u|K?l7{ zPQ@m!dR527h%Hj$>eaOSIq#%fwl~`1Try68G)(sC7SVzL>_GzvHAn}dRf;}EBcTd&TP&?13wAhRf zmu!r}Fzj)|4a?SuuC}mA+e_cjr||CL*4pMfjel6UvwLTGVR*FkzGh`4;zg0yDo5Zw zK@?54wAbfgg|DyWbM%+N{y&$+z73PcJ_v(K)-xs3vrL) zHRR5UjIArLOTX*P^kG`-O?_;RV_xxf?!9Swrg*X)KT%1}E$n2uTc=N5lR}Ki*P^!_ zhAT>Rlx*X5-P+%SB6S;0O3%voK7G|b6KU~laIS@+TnjT4Q%w3rz0CH=>gOfi=>aY} zzBtEDNv^on(^jwNZ_wwJJ#<=mU-dbCXW}=(O%i*n8;Cqlsoy2L+5jPjDB-wLL7Z=p z7j4!sCuBo0@6eMXy(((4!WtNfrv_=B$LmUlCcH_C;kmPp}|j@ev9 zjJQ1x)-9gcttnPj72|U{l(`+9ju!s_zcpj-ImtS7ke<>`>x>JUcH6Dm6(W*`!o z+mIh^TAFUx*SAt!8dvB^2B0U>f=ID_i_3~#{NF?$-mTXwD?}XW04*ar?^PZC zWzQ9gSJ=_M=bl~sNbtI;@~$S79D=dJ#d!B@Rj9IDk;dNqLD1ydA=71(V*)Z(B{=#V z)!FwUv~pGwXx=fM^`918Y6f(aLlBL|{{Sc)g;J}y0lRMpC%r#F^*sy0+BS=&Uc=&4 zyw-GCEq8DGP9#g7qb12MRD;pG_TW@aHmzjJjhB%hjs7WVwwk;;O!Hdm8fj<@%^j

Q7gYLDlkXl^s>_5^|pP(H(=DPK3Lz`!*^(TUUAO6kc z#+t+$oL8WMvtGEBV%%|+-v%S#`jML9sOzn*@;acYJ@51X0DyfKJ`{W#wEG{3pTk}r zf-5)OYjJ?y^ohWN|kUj^Q1_WEyvZ!9h+ zNtLCth5&X%GxL+TYJkKA!3Wbd(S?N6pE@wa$_;z1A3EwcT2+;d(cAbo!(G0ajA0&I zsN~vImX%%-3Xpgp^%%ge$wl9GzVF25QcHB7-g#Y~fq8FbeXV)X=`mX>IJMMe@>*7r zw)uAAQd&)iscap*nyzo_{K>IRb$ImnqgB*wZtr9`Yimg*EgwBvK%yc(jA^DxT2B(# zz|S_Kv99GP1FE}~VmcKW9D&pN(*c)SCWyjWV1{c;xfxDkk&#hA%P5S4%MrVAKS}_g zo(oNCc;mX(NQ{EAneEw5-U#Gm9QyPfO#pVX_ybvj$t`qSaeW+P%2%|SIhnRF-Gx>U zwDvp(>?(Q6AfE=3A4~0-ecdq?%+pckcBd?|l=) zwm75+$YjC8D-4`;ZbsT*dUl86>)!^?70-t?IW&o9-qFoxB#Q1-jD>PZ&T>KddYsaf zRJ3}HNyk)N@sI5h;}04AmhZ&ACDru^;bt3JV-hG_{EmYg*F9LDnzMxnLu8S1t0`{T z=i0^JjCFsrKEDL0u*4QGnUXUZ&DuEF-w_b=>gD zVK7M1;n;q7M8t*#m#1QC8h1~orKhEgEo0=%tExRMjRa`0o!t!@@s@O%(4){)c z9Z9TwK{DA+V%(8Qxe0yPRo#F$6VtDy7Zs0juw7?M@b&z4e{Se)Z!P?^Rd5hIYc>F3 z)INUk&1kI1wU0-Cg?=Q{^pbp4pxA0UthUQ}Yb~a)X0Dd#Lb;s_5K1vn0{1-DYO-(s z11-{P{v8|@$HVUr>6%Qs?}@d2KTg#=_li9|E>`iS3ZSzCY-9<^!1FLO(A9I@?eiy= z%X5>H!je6VI`xv1r%HUd=24Xl4hoze4U4`-rqyjA(q5MvRl5OzErX^ z?k&V%1I~KjuK;i=>DA{~WK^fh>~nfofV@dP#Fm3=iR}mvHMCiMjNyab_uT0c?7~b|T+RE0rwm-B_imi@rZsNR#H7c>)+eG8)PS8p1 zoYVGbUeTBCe`s5qyU2#C;r%A&);kMDqZmc=)x<|NpU*eC$ zdD&yq?KO=GKyacW%^w4)+DIenzV(!$H@%<8(M~J6J!-~%AH-JecMh_b_5`$!myjt{ z3;@6+E&||@#y4b|hs_?Jae6+#dN85zuY<0clS|btm`@YfI!5uaEXU?igYtrZgeY9{ zIj7GqsGdmoIQ>W91*={>fuV-e$ynk@K3PnNd1Jhg+%#AdqU|Q=3hh5{E9mJD)#T z==Rdx+u7VnBLkP26+*BbdYphxJvglhK8*0^j66G`Nf(8DH687p)S#K}@2?8m#GAoV z!reT{Pz;w{irauH)eh{dqt@-bUvH~jUHEFpR+q)v!xx?y;j*){wSr{8Sq!&;mx;mq z$b9Yw3jX(smW{c_)cpWFMc9i=&^qBuGYiDmdYlSzEVhJowKq; z>N6Na#?~3CSLuG*lI_><{`pg_r)I(X;x9_9vuF}(&UBA;&Evj%Ogj~1=(LL+$iauIUJfCQ`{7q zJI@<0^TdBKWFv}nxpOhy3{x)&e<#46!ppb8PgC7w(e#&HB7ilt&2H;Tb)M2`AYevJW3Sh!GyyfYiR6xXC!RICX$fE6l75E^ ziU8=;iRCGhssU$UrSPMv!u7=fXj{n?aJ=y>7Y?tnP!% zb~rUD(O%q!M1A{;nzR+~cT>YkK*b}xi$j`9^{gF_1`3NB%uP6s~nS z?&dQVE}8jq0-wYH1prBRs!6Iqu-?iPgO=ltI0NcFlmVQw-ET^NIk)SZ!{SeUG$8a=v2$ zk@#_+r2uAHs@^jl=WruxDwboOFfl+EBHKog9DHt=Z zatQ~HqJTJEK&g`;;{a!x0IqHtCB!5VjAs}$0d_m|jyU3ePB49_0(ZZNC@JrX0Nb*? zu#(MI`a|X;=U`mrJMw$}AB_NJ-NU8{8P-EG$V*{z0{divpUQw3)|MfoiTuWjW!<}Q z0SA(tsW2 zM60=11#o^+M_K^Ux76>DM=hPii9AvUMF-^s550qtpTdAG!*;Mc$EyhCS@&;|PI=CG z7~qrAfHP#evuA5fJ})UZ3^Qb&oZ^5Gys^5qgsh}wXFFIAd{73CrQ$79Taj)xiOt-x zMzExloz4*k6+<4N4_;`sg60Ly#KpYJleqLAp4?CZK`7njz&Ru4X6gs9pba}cT3sgU zH1lNgw*uZ%Z6s%>rhc>mu##ypq_;n6y-U&}Y9A}?jPLu&y>LH;|vrJY|o&Ik_ z{^{rOpbIw|oOg?h$pP4bRCFYsq!H5}tpHxrrF#<`iqYGW7>0Hwiuzz=jP~h370udO zO)@NtDoR6e00n{I^UvWx5c&Rl>|zlykTN(ufW-h!b!jw6ZY5G81adLox9LC`{$j`i z#{A@dIG_gGT-(6Me13CpAOhF~dSH6{8UX0;HQA7@wX7!Hcxb`kN1o`T9Q&Qe@t_LU zb7{hNpH(u>NZq&ZSjA!YT9wpHoV} zSJR=6?M=ni)N#AJa>2 zgN^~kN3xFgS1HZycViDy_>*~W47T?3{h~Pm4J1u6C?!geyPWO=JRD%3QB}$=V~4mG zy4B2=nyM_9Qf-$k6$_2OE&>2Ef!GSGSXa60{{Rm>Ks+^Rcj7GrO!KZRquFzE*H)NS zm-t1c%ul=waLLYnD>{+p(f+@gaD2M|0AF$F6MSj#z3sF3qHhmr4}127fndDTZQ?+W z9t-*QvP8wV@({;^-MdywgqD|ofBD?ES#M?cf06Q?-kqp;gHV%Jyn^oX+BQ368=Ry? z&K5GngkErJ%7Aw!SCYL{)pHSJo3QZI^T^t6mAdaxa@$og$Usg& zW68%j%}|7~(2QPG_tL`-`MkMaR>_EhGnE-Q=72pZejRFY-^*pJ@37P1xblp)(L1z^ z!*ptZb!i3)j&Q#-U~@~F`wx`%mH2s}=(e_c#-pW~?)6J>t%2i4b-ki08p}HYZ3e?r@m^VPyPz%L#T4PZ2I1-VE6ik)!oWS z$IWSgch~mTxX#W(pAGga-|V9AoNe zc6teDcnn(o-^3k$(Jx(Y-R`3ey%iLwak-C7e7QXIs@V$nKBV!Vk322lJyI*?vh(g# zVibk95{h<$U5QbF!sn64Orryi`80Nkzc*fhn z9vp|mIy8bAOl3<=*G z1n@J8=cu;r`u8`3-}L;A7wde*(Fc)v}GNHot1*~t}wSk_n$qN}`s?Z@uJGn2K*ZGfoU4R%FYTl)UG z9CFp&bUu2I$674T8(Q$)oy@91-j3+Z1~cXyknG({U>erMT;(-=UrWE$6|<;zg zgPaar@yA-mN^ff}{{Zj}7bjbuXW|Vb!?zK>qPnzK%?tTZTgAN{QM%-jhQ>Wd<69@> zX3?Q*r}!#67$rJ~+3o>dz^3O`{{VP`PpvDl*%xdyj{u8Hi``1;Cb}k83LNj0?K?LG zPy;dfa0&kadXsOUB#U1Id^4$OS2LYQy5J-)^Hga&y)MJbedS;bZWIAh8W8yD} zd@-kZh93|3wp~~3bJ*`OX}(bm=3K^DJ~BX4*FCXQ3)@S4%AK#T;Cb$~DeRJbRrFWu_ z4^1q0wwA%av+VT%ZX&j62rkhB#`Yg87TxRxLZ*|t(f(y~J6O=w{x@lHX%-$7i$rz1 z)8mO==rlmIk&bq#A9UyVkKsx%w41-kr#qyK?RVnVl-Dghi>h1ABr&qXW@1PKf3_sa zA-jbDdQ~Xco80U)ua2oKRxfHLZCYufNdDNi&|5_A*mBaus{UDAfEXMS8nbk+TBv$Y z#QkGOy0~38U9`4HwF?6&zYNB0kg$^p&=yij9Ax@>#Tc}=`4v`IIYHwu0qORBR-3GO zS7@ZHmik(!nZ^pgmR_>VjGE482@7!O>rsrS5x?)jTC>DpwjZuBirPzEK; zfM~M2fCt_zhm7~9%=)jyIaAsG2f277;ID#yBeXh}f$=iJ4N@C4n&QV(g&?`MX*e;N z9nl*kACv+@kVvjtn3>ah$I+*`yeLL{NcHFao3zW-LOgSz7mws%*O9pQ3Iv}h&o~u| z$2Im}_3|}%ME=qUzh!+pPPkn|Q}Mom{hCUn#pg#Ebq5XvoAHy9IvgIf-aWOXU-j}5 z!X>)-&0y0Q%lpK zvWHXB4eYnf$YhfCdw(iIen$Zb$P3j^euo@T(|bR_6J3v7gT(&;1N3{lTiA6CSyBjH zr?*y2kPG(WHSaWB3xd^f(BzKx`6dSog9^KWf!E}DIZWcs(43<7Ry8F3p?(=fc_jL8f#*(l$9*eW2@J9F9NQ}GP{+5J-u>!5 zg!;?#{LA*R{$K0R=DsKVaPXhRO%7iQK9PL4{{SrZH?h5}32k`51CXj2p<(j4CnJKr zDyh+w9q;+={$$jurmb(t)YtwxSlM`T)4+Z_(Dd&U%{{X$_jcD?rCp{8*n5uG$(tMeWIPCU$JJ<^r=LvXLvmj}ISmDZ+rv(PU-33#q+ zxi4<*?UYY^$K)cnx2Twi!0EX?ny-sNUM4C00Df5B@ zusj6$jyNM6(v%fNW;n^ycRW+a9~3p6Yh8n1p7|h>8D4vMwAr3GAb0!C0*3hu91=n2 ztyEx=xAgr+%amPaoC05?}+*(`leTB1*Az4$?8VW78+{6DHL zr=`Ugo98IP@Nm)cbMo_()cRB@-P!J2hL=3|Q`U9;0y&_yV+M;Q$q0_1EQ-G}ktR1| zo}iD?tb@^D_!;q`N1kip*T2tRsn9}|^__xDTT;BL+P!K_jm(O-8&7749 zoq>7b0NOhWsHGhcn{RWa@V1@eFBs1zmEhQ=XySqIq_wkS60}g`aahoR?g8KcSo45r zl#SLV-?z0m)0c2{BiQwL{7>-M{{Uy}5$bkY zdPY3vvqXkPaPg7l%@ZRl08h=pV~lPY$cCq?+^ffP=i#ULQ^a@gZ)2#S)Sl;RSX)Br zYjlnV1*FZm#>#$elW70enCp{>?GP?YSYiP_nOI-#{O6n#1P17PvXto!|DT8GF^_`4i*?HP9 zjht;hwW%jl55SEs<_Yx;3tpP%PP8Cu3HEO;;>B3t`S$zSjyW5UGB;+dy|uJz&!=be zH1>DZJFm;+Q;*?>kEPs2d#A~J;te-x4+7cGXzWIC%PS_uMc|Tm6P|+=N=^BGB)Hqm z_m2epD)?)zT7~f)ma*Y|Lhc5NMw(sGg5ZORhF7OKbqieeYSfOgw7)ZYbm1?G>+(3; zui4weejM>Gq2X^C>+LL7w$a?dEDrlvkGI%8X+s zn=5#`!F~epUWuak{{X@|9gm8%ZCW>UU0YDPf#8t|2YtGMfJh^k&Ozf8Q=I19TeDq~ z{Kq)P2{o#J*2hEe+u|p|+u-_t#4iSEeiYRaWN398c;vdYEJp%JjhqC2u{?S=T>k{{VnG9lX9A({z}%yGiyX(%NY$97z^=W_MW2GV)X= zPJ4>NIBLz^yL|3#D)f@FSNR_c`0K>p2Jv5r9X=6hx{ZaU!);4zsiSb`7#l}e!9T)F zV~X@?MoD|_@5te(;@`WXIn6TaZx7tc&<`ScVGvwK7jETzf|w%*p5u|*6`=->t?_%} z3{l6V!Qu^3H0UA`K@>A>F^-trfIsFCHE5K-%;9Ug7wL+Z8az?WRf2>9Pc1A6>pp6d=@+$fs;<+KH;<1 z?Q}catGx;s^yd+_C5aR?YzEc&c9r(Q6^yC#Ep;_hw#Ux*{{R(X@g17Q;{86xeQ{aH z*W*vJ-7IIKI=~Se3=z48?t1Z68ho!!yKae;`Ifu)>U%$fw2ccwv4dB&(bD5qkVPbS zEq`|qg=t>`cjT3^tL) zZXb8fWP6F^nS&hQW98!+991VLy}tc_AwFK0{=Ro4@aM*@TfufPcyc@2x6qOX5LuA_0iyD{|DJ8bzJOT!I8R^gpVm)8LJ}A-WwYAkeb7?N3hjL8>k~o0IeFEXm z0`d#|-$8>Ci?*5-7L(UgOI7&M47$?ZP2pV$=Fz0ZnY4y>h{nzGpDuYDb2dg;sc&J5 zl}k%D%5^o_9#`YdWBwEUL~8a{*4Ck%s>5!p5b+#IjtieRbnLW?qg{m z4E$H(D<;-FDWhE9*`qO%TW_20kPjV69)pqGQk2wpV^MEpYWO=&*L*dsN2!Pjy0;|+ zO*12s+!25Y9AsdO9+cX-DEFI>7RjzIv8H&iTv{DM-64Poc1IT0-MNPBo!+2y#}z6T zwTg1?dEEX4pHI29O>0$xEjr;IXPU|%IL8_g33X;rr<{D)9_Fg|*j77Ry$j(Un0~=? zta!ItyeDofY;B>85&;8wW>cPo0&5%8?G^K8wx+tb@;Sd8X%=1t(CxJ^4e7e2v)#LS zkE+7)yn9&fLDnWEeqvXk7{E28C4R(8Ha%0o9|pBwiyCEyyW-s{^F-60&+T^Cu^A*w z&!1|Ak1WfOG8wQNJPO9HB|}B4?by^k4=DXYVzi$97Q zEtiRHlnC*EXr5suv6$pw91L_lYn$p(PVjC%hW`LsZ%HKmPdeAUbMU6+puh0PhPC}J z_EPKQT3p3(36+;B78&r$q@I3p$3a>`H6y!ETB1)%)BGpm z9c~u8()7z{tq=|J$uu#dgNzbneA05T(z)qA6!=r(Uk+-Pz9Smmk8P@1$>!UrV|EqP zWEMmlNXHl?ip|YQTFkW@JKY%n026gziJm1fr-=1i8@p(D^J6eu95lTMvD z!)*mQxo&y3oo}dVmgZZV#tOC%SBW8FLj;ZGcVMuPeuhg$3xH(FfiqSpDY9^OzBD$vYgX#W6+ zg;GK9j1gSbt3sBtTmJxCZf{DIs%-W=pU0mEd|%-!dHhS_e-BM%J;OWP-B`R=Fe9Fv zD;=tEPB01Q(ypC&&q%X5(Udi4^1B}n>H7V>x0SBUt0&IWPi#U&M+~_Pax>I{_*SN6 z?PuYf`gOEM3kTP&nae!-ZRBzWQMctWug<(@0IqY?(aeV8ciK0^eG>iU(e;*>LzQ5X zFt@RvCXjyWPkM~lqe_crI|AoeObrnM3E z%=$mXyInS6;*B2S*GZbjJ7|D-)I{t@%;8H)WFQ1pRT(EFj+M@*2K0KH$`eafp^J6k zc{N=I(?Ha3?zCsK-*j!nf)O%1e7p0s;2dok$R{0Y-1WZXa_O#z&tDQWh`t{kEQN~d zYxqs%GP)hgs^c7%Jmt9Pf?o;$dn$utxUaf!`S8>(+p=$Z58~ zyN&=1GI#(1*E9js-rQ;MS=!oZvO7prwb&2)zcX>bP%->CJm;DK_fHIXkHNkwgZneZ z(zcJP7L8%Pk@l{5!7Qp&g&hNcbN>J>DrDN#6s+`T)B2u+sOu)c>J!DPq!##=Xrx(V zl0+C*5$^-%$Zq&yp7n%gmHHbvw{E9PcMa~XqDTFuX+5--im{|}qajsN7-mnIoR-06 z&fX3N4Q8zwX!j|m@^;xZ8O1M9k-l4%id}eM7R;yM&CJA=pDyH{_Z>Urb*mK2-0PeC>F;_h(@{le4lEa zHipX#ah4n~*aEVQ5t=MBoAC#aw1=KMTdS+>ZZtq4hj_M#%Fl-V+U_M-V6FlX-9-rj zq%}VnGDo3lHWvOKj1tql#bUyMIcGbh+B)^`#s?HwE>N|wwuWumzNvew>TyaXwM{6w zjycCZVUd9hbH_X$Xc4=m>pH)LzSjn!c$zVt-sWF6Q+IPE$5kauU}Mvu70@&rYfBA3Qe8@D z*_=l#a@s*AKt5D+<*-Nx<|GW9R!*Foz16=HMKqPI{zpfk{?%G-jjVb-_lKV1TavL| z+%&Mnj*Qqpxkbkr;AgKO)^o#iJEw2!xpBl@7ea)q;QDaS+)!w8;0~eb*Oa`eM?l^ zJ9GOwXg3kqN2qG|CjRxFN0!`1Y`m?x;%>Pcc{n&fDX8|l>9^ijvt9oH$mF8^oo)5o zH@@)htu?TUVx@2GS~g`TXg@O#n4X8GI^z{irHN3v&S;(lpW)`cb*9@|_U| zOVpsdV2s2TVDPf46&x2XM_>&%?=9LF!u8bk3r~+4KY_KlSI0g8((D%L!2557wX4fg zv3X(w-cWfJl>y(hs+N&=b@a=Y1z^2Y!xa5GMv9M`^*^#1^WDa}RujlWaoPZs#P^TnFQ&xo~o z=ALVhoSBLeFaX9;QGX>Bx>nH`w|&kkO;qw%Bx4WO7 z#+^911z~6>07!Rq=sr{Z>X}C4Qn7kj{{Xikj4UP#h)bgvR#q85b&F$>#zqD*YJ_vs zUaDLhNk4V~;h*Kn{Cj)Q1kqe1&gmaSIOCD|_n--h$0vc>fFd(R9u=4j=71@^)vijh z1QU`u9QL3L@fy3g*6T=QcL5%5r{W+D-`epboc6@IJiz=8Df~c-c2J zh^}%wDLEOS3O7Cy)-*lxUE9c!2$(r#I6s$K0Eb1@Z7nV2vbmY#iP>C)P$W4R+qxhw*tnQUi)oQ^00+`3WJu_mOk zNW^l;00WNH0he*%T_M$Cig5(JSnkd}2hG<#cr*daY8pz}g6Vk#rZwSPD%(e4)PA%9 zif)k~0RR{oAmn7w286=mH4o&lQ_kj61_1S-4DYqGz2Zr)|OGD`mdf06UnoqINwB$L3T?i)xaxa4OZhPE<2 zcR=|4;u{S+`x@{;aLP#EGO=O@-2`VGeL3$^;GU%^Smt%FiI;kTWR@rbAK_HsaoasA zi9GggQLbe3X9IUUsMKIgU)CIvWXLh#xd(a7X*!Pi)|VoH1UNQCp{)po%-YRxJY$oBf78x^C*(O^64pA~q=#a67kHJo;KNBw%(MkDi_@w!6gosWD2fO=9<8+SaO`oiYQLmsCT zk-7f(VVr&x#Bca(#J1WZJ&o;!t>wIuD-&>}vVqrW1a%Yv*WLKDLDTK+C(?B2+F2cq z%O%as4go(XK$}z?W1pUo%vpS4eI3-78f??Gm~5)u1iMuom5ht?{Ya)Gp1HfXy>Px# z$0U-Ll2~K)9e_JWJ%>sF-d#S@2+^IV+z4&paQu3n2R(bx2Q>$W^$kkt#ey`^MekXj^Rrkj4~8)o_NP<0K}TsTXIXOP^TQ9(tscm{M`PYzu`a@F@sl)}RLqh5(jPwD36m=mJQ>%^>q1%Teeu zf61T*Palx`Rk!2PfGk29OgUn?>_=~0&;ZFZNCNX8t~sCyi5c0v?&-&R0JzsTGANc< z+w9{g9D)$zuCubM{formk`?LZocQWp{1i1&e#`T4>1^dE%)HKDt` zlq|$FW0SSMVcUXx~0zsnL`KLUYN;9(&f=TEB{XJ*{2Tako3&g(D85x)5 zm`NfSwj8lkT&v^{;^VlW4vpF+aMLCZ-ZXHI_gozF*P4kz zOL3_*GUHU$CGhl-*@|>l%!GK*h|b zC-FFShe0Qi4ixMf0ElE^>?s2#(1Lke)oN`9vSvlSE zqeTraeEZ@nrqgFzOUpKf(+ebUOOy_bcqHH)H>e*<)ft|EpBlxLorG&+H}<8ByM@@* z2!qSP3ldw1#>0)FoU^mz<~Se-Y}e&E6jFSgyYL91M(Y z812VOpJk=4SG2pmjo1C8bi-_H{{XQiM#d1Nkw_J>$I8HQ>MB(qGQF;rv5_~&tpP3M zyGL#CYenb60B+ zde)iY9}4MuG&=UTs0O-7gs&Kf0!dkSDg%;OX90-Ep~X$u?2ih+)Th>@ee1cUY+z>q zlftO&=m4q_^?$*y0NHq0L#}wT-#6v44Yu+MDIEOUTVo#WgS2$!vZ&k98bNhuxN0}M zF{SCMlj_$o?~XSCqlrI?X*2vI_!Rx~?V83a`n`>t?YWtJG>-x4PpJ5gP+Xre3;fc} zDf)86pTiXH=JY1Y3sdG@N=vVaUM5XLQ;W*eqIL5jXC<5`-Cj5xk@Ed|kzEQrs>Utz zJD&0{>@+QKn+QTUw~6m3LS!06PQ_i{!ZDn4S@QEOO%qXPqUiU!J@JvCk?q8m z<~gPkG6>=sa>JY}43oSJ{dlZr86#N9Gmr4sjAQW!_NR@kV{;|SJ)VFnb(U<|In{Tr`8_$R{0f-he%$!#*0*d`YHDs10L6 z(j`U_#b>F{a4seX19}LdbqYOM!Qk;zDO;l&S2_Ox5%_k~!urfQMw_eH>#;0b{@15@ zrUqmDBh5r@%hA4EdJ|4A>h`cTVa4N&pmfege(!Am0F5yh?sZvp4<;GVDnPzkVFKV} zoE!n4T%4K!h{(G_>?DKNZca#`2S)LXe7ipHEHU_+0Q(c+-jjQx=vsN!LL1rPmh2MB z&XGwW3WNe#Lv1dbxn&^M5`4{@MOhwk@qfTKTFus<;%zqO+3$BU7$vz?a|&P&ECGT8 zXMRplkO`}&E`-iKPY;vfw}~$tU3pf>ira~6gvK+1Ml;-s(9Gw&L!oLq1mE#Acp5h+ z4-*zvZ|;CXoafYgjEVry@g&-fo%x4VQyuhCM2v(2c8JE(M{;eOVwE*EMLakTM*csT%e;(!}6$*Y5K5%U2IdM#S);*q zIpM}WUZd336qc(lm@$&V<=LgZNBNRGsMrGXbJXV< zsFba#QH{!)DbT08o5Noc;nWi6Oo5k5y|$Mzwd8!o6vtr>vM+Ir70zgt-MMYPzJVKS z&GPj;njeR$s@p~47`0SEJd!KK&^ct09OXe!cLFfL_2=5OB-4Kc+1+V^IN2>Ex0t=v z)Vuc)A=-tDe5kqkRWKO0B+?O!t#}SiH&2^Tfv#k_gAVaD4vKAY{;^nr%A6J%=Oheyzj9~8tiN-m}1N5K|qC6WPfV?R${3SLT-leN*a9Xs2I~^)H z;(?rOaWq$G74e*_0K+_kky%TcT3X*bebzLOEOo!({%5*)1LNoRl#^TC-s&^yvB&dI zcVTO3_EHxL>aa(Ep65R|2d*m`m}J(Un|J%op?|? zQpA4J!a}7{mfjVOMADpstMZSfMCiDy#>>C_KVinIZqmE${{ReT>pu+cz9rB04Oc|* z1%-{1wDL$Sk#3?z>aG};7z1!0hc!yFg57=k3DR?WKe+NOC&b$E)yKoFb{pMcY_27| zvVA=Y&v4ub4i3^)m+v7RTaYVel3d$&GEKjCf9v|t_4#jZJaDh4+xSmXoY}HNb8m35 zZi+|aJ9ivyKYQ^8vPnZ;WvQ#Y^s&!3g)a3Se&fOVkAd#nPPg(%yl9{iVV9ER?KlUF zqZ8^W`&Dc6B7K{^tj$^cCE=?J)8H*@N7JmPnKxTagkd0I$lo4HFgXEOMJlDma2K5~-+G#>85z1OPB8FgXCIDy6Dx>9me*hR^k_K~H!m^geQ>5d$%KSOh zbnO<};XF`+dz);_5~{-_u>=A9$o#J}mqsmKcwZJST3S*zyHi z=q>k1ETtfP#X&iZzlR^imB$rvp1iMr%u;m z@;pNR2{ty((W8*qI41|6&bm%>NqjqL0<+#-NrB3UVdVb+-$YObrj-_zVQ~hfXFcei zA|;9Q5)em2f*biz2dZk`DTCrg#jTyykcRFR+Lt!cgDK8AWplNcJ-UO_0;VzLDo>c^ zG%p9QiS-Me3fAdlyNEH4;ykoGbrLDVFQ!+x>P0r~sFJz#m%|I+5O^8xbzN%Vz>U+NLu#c1B_rSA|=3O z9YmP?t6AM`{d(MpS?*NTv>i6fQ;2w0^8O98MG&*qoHEMMwiC#@Ct%K3Y!0FM!tqWm zt^WW4NiK(nd9wH}`u9rlr-p6j)O`6B?X`57S|%7gEOJMm)p@6WWuqqCuT*j#CGil{ z9&5Q;D2&axTf_)ZF~D4sa53s?lDMvYeeiqXm%{H8_*u32bqkx15F2zet=*~eZ7u@> z%Yc7)q#h4aI3OD4sZw#4iCgpk03&!p5?kx}8JZ`7tTagCfv3_hucMiz7f{(T-}5j< zoRRyy92NjD#s^VbUi}%Jtajcj)N~6QX*6#ZL#Ih^Z4HlO+a76nPPn*RVJPs0BI5xiO8T~1F9c%H(`RgP#(O=qh|8i|R?SB~Qu zWd|T_U>JP7aYX4UtEShQ2-I-hU)0~#wW}RI<4w~1PpxTDtcD2h?PY>ZO)X5ajj=~0 zD6(5Rp)PRQQP-y@nosh-`HyWIUzyo_K=40@JU4T3qIgqO)_g~MJPPo%7V))>mRzV= zE+=T_bt(x{^L)JIn$C?`OIakpH}_~&N>N%xx9PGzd(=Jw-PpwUX?+#k5jrf5r_BZ2 zP?qIH?Hf0iNE{;#-Hto$8meE_jHOMl>gT9v_d2r695;z*wg9)9%1M#76SHFAuieIT z)|*75=7aE?#rm$HHNAy{%I-|Si6cb_@`PM7uo(=>Hja7DG0itLw*?l?zW)IBOZcgx zr0=fi(ZH6-T1i^&6C8i+vu?)W{n6L8WeiLuvo)3;aoru#d?C=hB_vvZi#$7VCFhY8 zjwhaT6uBI-NeS8!+xU(^6-s>S@npF2y;14s;!lNqD`eK+4Za?DZrb(*V$)t-PpB(I z{{Sw?(Cy!GyRPGm4z-e@H}OsUl184|JtDq(pDtYZPS3?!+?MgJo{BDKA+42UNTDjf zHprLEeWR)5_r-MD%ejW^f*mT?MYoqizxzqlAfL*D(i=%+d7;MPDPhxd9ie$)jzt18 z{9h!NX=<0LEDjX1q|vl)Hx54b2?Nwq16#r$1-x71$OZm@mQ8QFVSAlM+6)pilCImp z?VY$ez|ChmsvG`ImkMrserMO;3;a>6{?C@0w}E_Pb)nq&YeDVSlo` zXjWZ^l|Rbgvg{e_I~qKg17%{{RuMPlvVpixa6V{zOT4 zur!%M#p0PtutC!$f!)!0u2o8{Eo1n9ksOSt7au!j>=nd zlh=x#MY&w>W7xb8@a%rox_6)Ae;r*9?1`gEboH`Bc09$~xiaE682j=nfHCt5<*ij= z_Ky93%;}|1+wU#98h;tS5^H`3@Z5S2gZ?L2f5I~s$4x6-)uXYyS>Wg+Dq23Dz#Mv! zQ$o6%yMw=UulVjdw7FH3mAf}%!L<*AUlIN$X;!-3{5Ln6ixC)@EN=^1D*o-nz~$Vw z?6Yu2-<#8`+QJ%LBLz-V*3FsPuk7>jOIwOJZw`o-%(MZ7(5p$$-wGQfare4&OY1Q1 z9>RT(Q1EBMUlI5lNm;%kS+1R=LJX7MTf1J&yN-5d1C{_Vtck>fZzyZS4jx_qvjjCda8Gu_@(~fZ$b@d)l1o=*L}YYOw)qZ zHlJ<(038pd)5pFzi@-ndwtP8tYpUsMrwhdsNd?TdicZ{4fuofecNlT+T+Wp@K31B4 zHGjd2?#sAx&3Cf&@q272Q7;JQ8kyU{E?u9|> zdsdXHzlL15@_Lb0n%+0JriaSU@l(YSTg?ZCbqzyHieOt2PGj6yZ7jrKAD4{v$9m{- zQr#m3Cbniqk)rsA;sxk{T;1x|gtwT|UG9{HLfeO&!{q=S&5#GwfluKL&uQ>pgCBT_$T*K=%s` zs>LMehj0b>a7I6e9CoR6(|6RRHnb#*vuX%ovB@Dnl;U;q;C?Nr-8zP&69?~ zVc2Cs?@QS($&cDT-Rctho=7k z!Zo8wn{#b%H`>gxkW7x!+@Z@J2p=kr#-A&;y1%$iO8RJt^nVR_DQ&gO>oPSrSz_RhP@UXrFc~@e z(?Vok7x9maAb?qTZfkq1dsz2*cN<2?fdO#eDf`3@x%yKP>bCy?8oXQ|uN`RwX!m{~%or2@+vt#zD?u}0u>N0rS zPE8WiUetU!ZZLeCNFp}u2W-Q!fcg$7jXqs$pXNDFn@ijB{0}klHPqS`fpFLG8=2yG zqlS28jn!38F3XjZ<^vfk^5?HLs@%n+p4GfxqfOz9v7uckCe|sZKw2qH;9Z+`0htPt zMlwNG$sC#%;Lo0Pe>cQ>?T?1F31)#VXISQ4yBPrlk^uncr)<>-`d3=gH2ntF+xrII z3kzw>#3eTBWip@{VI%SY2j&-oS)NqysSAOoTUk%M zpWQ{U?mLesjGj-arX#Jh@Ne0z;lJ@_m#JP|%`ru`wb%v^-3^f3pFv50nx}>J3!}S6 z(QoZ6t<-|IB})vPoVE}EJu$~~LIa79?KW>6VZOl+!ojm1xetk7^s~!EqbEkJ7{-4Cbk+)ui7o+GpwR0Ep8(%BaQ3< zjrRZ(a{Rw5eBX^U?n_oTW7I4YQ}F(Yt~37tVqe?pR@bPUFi$<1PUb98m6Q-j0DyV) z&8Mqdnk#92jh`FniSXL`$3m9xOtNNHNUsWSQv$hTgvpg=A+SODPI{VDs(VF!M^YS) z+8;mO{6ev?zL7OF{{V!Zbce{axw|r3Lm1t-pCU7dVooW&YgtW>vsPDv+-1jc$!%a=JOKy3atw7$!Qt$yo5b~ z+}}!{XqjA$^WPbKCXYdR6iagq5U6L8MDoEn11z$UAj#+gjErp^>Z0yTRxfxj!@d`n zOq*TQG~2CSJv!nhx$_vts}_HSRN=hL@L2Fir3?_wOT_*iy(@0n0C17mHyt^JHSoFOu658GbV2Cl2anPn3+qUy$b)=D@MCaJK8F+mLf1^Qu?hbG2_>D_B%hg1E~`-|YVYvlj=XpMUY+%>Z{%+yJ3b0AAZhIM1M<1i93$EaUUS? zD94XT$m8m01J2OHs7WN2QLUU{ZYmv^amnkGKnrCAb6v!`f!l8HnIz9{+=>A0C(^XH zghcm^mIup2Fbc$V+*D)(*mX1ke@3v-wW)4(ZB^~y+MsWiW&?IHyJk5Ya1&7r@v!B95k0B?sBAhaX=j-{8dov3e}{H<5&81mStM9pyPU>Zm}hS8S0kYZ9Q2~$ zW6!R%jSkuNMRBt5f_%GO(@B6kd3^iR5n9v79v~?G9q`_%u1jGqM6ew~;uLM801>>7 zgQtF&spVVQeZ?s?)t4=N4{+%36@>QZ$}*(SaTJPNe+fq@z!S#doHjT$S0v!|jVAua zVw$~#@JyoxWsQ}&>70rHz`C*8i!R6B-@%S30=1>8Jeiy`MmsN4?VjIS0N0MukTH#8 ziZ&QK#`B5*X4`l{-b;{uFen2;+DK$v!ZGXk&;^sZmpwaB25rWn6l(3eF1v=$8Rkz5p zeK!Wj>CFIbKBuI}JliX2?XIzaQf#80$FbmWC<48%w*pHAuZZTl)O5JcWrZX$7F>PM z<17K_aX=M3Rj>GB{{YBO3ur&tJ6!pU_p;o(j0_Au0`uvU+cct|QMS4q-OK^DOK!q2 z!ysVeIqrK?5hM!C77-v|7y*IFV?Z53$E#^FLu)Ol%%qi40e@eaM^DCpIlWI(n^U|p zpEq!Qp#VL&;0gfsUk&&x#u~-6_gY*M!)9-DLEy$(r;le z{1f6$4$fI_qFZ>b3Zo6+ZaMiuAd$)GLU#tNar&QtJX55xZCgsagaAtxjj#aZvNr7S!$J(#zS{z|sfYlFbQY>KXX}9^8EmL+4&&T#W1@@Xx}F+gA`SpLHhHNT+Ma zy!gm$mf?YBJu>0GUV^8ZcmDu@RiR^qz4$ett=HJ>^&L(y`{Wm8Z64VRWQ1n~9o~a& zXsSQzVg~>tLzFe+<$*A^-u0~=% z!#@;haxAwA4cvgS4DQ(*yPi4rs!UcePk^=k@?%c(H*g4S^*y-j=|#kQPlSF7YnnZj z*B&v^QYfwz7~r{(nI$9URS1L?KKbMLt3PcQqGq1TOID62#$FcHqW7t=s?cMWl>%iilG8LIi zRnRnxR=Ks*CBBA5z*}3(W`VNZi8%YbayTcY3EUbzGvN2a9UsSfgo`$tblP-i1lMs~ zDn%5eWJEF!;zu~@D=O7}nlz(Jou5*thCBoC{{T<6e-D&PK@f&GNB3 zHo`+D?YonAEErcTWjVcn9gdd>LvQ#ebr-|=d}$HXd{d}R7M^7$%F9fZVv0DF{^-1* z7ikLNju-_efmu4<&Dtwot@kukx%GQ=Na!H=d*S0jHis1Y_4zvatCo7Zmp!*d_|HeJS{b)t*wkp30YaAB$J$|d}MQs z;BYzSp28>6`~iEROCF_Ts98sFq!8^QmtCivDb6$N*BvoH9mc2P4MF6Iu4dEP<}&g` z6tVfp!C~7ZdXb)#C1JO7H%!*G#EwgiI(Q=0Ck(}|B~sg$fLm`E1E9|x1r`gLx`cZE zzba~)wau)T0X9X6Fsi@ARZe+6v?X9}6q`v7Po8-ykN%+s50=G6oVlI^*AapMo(Uqafc}qmoejd-@}at&-eBh*D=NANa-Eo zB0Kqf4WK@GIM1d@8LHGx9Ay3rLt!?iE=rhGk1KC75s$iZ4mt1jrXmO|zRDIDquNw1 zHxSLr?%k2b2Yz_zKn$}*p7|w~bc{u}Eb7OpY9ewoH9s8qU&LYyuLnhSsNbZa?=>w$PJ+_L zG({pXV~nxjo_PT0AZCas*Ym&P5^JaV7`C1n@o$MVjYnDV_M4{PXnHD`uO^z|6-oT*RZ?V*TF8FouyIr&KCZ+NBQMmBlvt%Aay$1vTr!tJ(PWX={{YurCIzUc4AB=GLo%=C zK%fto)-8g7lto& zBaRdi&(@~a9qw=VL*aGZ*Vyha{4$p-kqgWta*@0(wof-KxpwCm+V?6@d)V-OAK?C`y8fNu z{{S7^&!L@8H)y4p2izC9%V3P~PJ8C7p6csTc`WSoI)4~^60q=)mK`HdhFRl>&VRH^ z96_6SP>IROJ#qNa8DCZ>8yuaMm#BD4ScAgeF?lrWTeTNbn`MgSifkoW0Xthho4&N~ z*ga2n*ZvqmCY=_m<6T$8Hu`*6F+J_Ijlaypgd3zeETiRI{#BZ&-ipSK7T)Js;ZFj1 zBgTsiUJ%nS1=K6%&jMcA+ucbR`9ny#ZJ?f1jB~wb?SH`Y4;6TZ!{Oeq z7lIc}*6pt1<>J59ky)C5x*Wuetf~(UoQ&46_m%FxOZ?2`?zD>auj*?K6&wM`p<$bWYOZCtnLNjS%tic z$XN?vgAC+z*!yR-YPHnO-5z79c#{7BQa@Rnw}b?79;=ZZ`8hqfh;gJ~P|PZ+B;5W3wn@W2!)7WjJLgYY&wARu3Odb^IBx z)hFBWJcHsz=ZrixaUPfAyx3n$3#H6RxK{!~2P@fhfAH~b;ng+WOHi@b zt;RmaAvar`qJ_AYXyH)Oe5d5j+%eBM$CE4!)3UQ&_W3PON;tT^UGMjvZ{iP*p9#Ea zt~5Rlmh@cf<$tsu=F#FvW{m)i?H#|>oPxylCmeH%=%q%aRh_ikU(Cj(SV`&EfA|N_ zTE&LD@T*s~wua_bmTB%Jv%33tlW!_G4dzJUNY6a0eb(b0>#a#tU!lz6;LT4N`2O-V z@YjeuD;3tSd#GtK-b}GZ_k!NwOv=hR-JGxSFGI%|#KJqLrJcP{=PjD-4ddU5{vp#Y zZl=@WzOcM60kwo$J;2-YoWYSOkr}aoyOfTcQOO8C-+5f~l03dIi#{>2wx8k5mu;q6 z+D4YrSxW*(DU&^0AfGdi8zc3r_Hl2Ush>Mbl+KgI0_NmPuG&R;G(i2Sl>$ns8OHel zP_A&>PdOlS)~zcMaV7Y;C5~vK(zGQu>{8ifvX)sIA;PL1#3F&q1AtB`a{02kjQfv@ z`u4x4T|p!k-ejxfyisX8+2h7CWx*%_`?&AOqm*3NG<+HH6UDy`ydt_ayawXUXKDV) zd2b}K+vUdQMmt&(e~c>yZV4IYrc{)j%8f>qk6h5~^=}wxc78C{^sO?&!d7W*E?~a8 zWp@litbtsJT{@WAw{kF>NHsjxc1*5YtJvzaZyf4+4b*UH64_fjF@c-xa?1n8e)7m# zQmq>fs>(NgXq_b`s79ktL!I$Y!11qWQh1Bur1w+m;z{MX(;)^Z-W3dFlGY^~2v9kV ze|g6n#V>8j?Jc|i0H67f*>fw$?*9NI#Jn?c;r(Vid#!#sZsgP9WnmnzZ!?7Zxtwm~ z4ufTE@6gE}k)i3DyRY8vLwOJSIqJe51t-~q_%S;@GqU*Z1%4q8fE zFTMW&!y9&93)K84sw~QM4-8}Hzmm^fwwB^(z$_61O5m{D!l_VL;f+tUQe9ukmF(Jm z7tI-3R-5qt+SqEIBcJ<0^%)ph*g>h4ytGW@{jNCBFU(IHWNdoku1-zaX>Tnbp(~YY z_5Qk^m4D#>0D=a{G`=Q}PD60bab)vC^ZxG}V+B>&S3MnAGY`F3drGO=-!pG#O{?GJ zcqhayL*bT@r^y$?ySb;CCdSS7AXQ;iPYc; z9z{7!<8b@bF&#y>#5ixY7_WQ_bF1k(_-o@W3&odr zS3eQt{>RlE2xrzUZ6jD1Zu1P6Q6|{_Rb8Ri8?rt|ZfiO7MSHsWKhc*Kr2XwY(Xnsw zZTugkUFeT>XX4)qIhjq2%+W$nFlF-R08Fe-Nk<$n-J(=fz3rcW>p+cH6=$mczGst9 z@ku;Pw^kOu4ASS)WVKscds**pW)@NgE@ro$Ndu#t?I5vC05Mg_`@h3qB3zec_~?2U zgnV^*;6Dr5_!`m+eJosG{jTR%mK%H4w@^1XleBq+ZUB`#wzu6lBvi_hl)0bX(5Te1 zx8i$7pQd<2Pqe?+SH!mZmZhw)n(f{dfJ-s9GbipM`4E&DV}Y09zj$$2^GfM*+QzL$ z&EEGudeHtMYMvhg+fBG=7FgIw_*cmXaHqhtOCg!KJa!&)Z83a+3jHpIfQJ9AJ;8#6*ZdPlj zPxy0sH92&Bf3AnG_`_WIT^-HTcU~xp&i?GiC7VOjFRofJgN?swks(n30K`=bXVRh$ zqUraw`X*GAA78mY)t(9BU0>l5YajshHH^G(-I!JE*LmHK3#4{f> zjlV9?8ATEIq@Ata{{Zkb345_>_wA|XUI_T@3_eDk;te9!XpCpdHi|8$atREisl#wG zGI^_=EA0OOQX^K|uh4gjKWRH{cHG!_cGB@|iOhog$yQQ?j4Q^ah$H*Qu%ewFU0(kH zFr8cIwmxv5$6B|Cf>?Me_UBE3T(E0LG0h{8GVbVi7C0Tp(zR(l%+qUQXTW|ZlK$oY z0O2cj)pxp|D^yc(l6~#UC1bu5p5TCU>qUb7&rQDY3>QVNd@nTC7YMt&nH*05d~zY3 z0F@7A+zvjpU7+0ZtMH1S-f`^ zvvlV2(#{y(IO9WM6565;K_OxQbB~)j=b91*?qYqIZ}Z@qL{=FeF)TCw*IsFe^_x8d z#ai}-aiQ7idY#jKVuy#T-f)}>z3|4;L9sccqBGnmo`}8}H1!(^O3H&#rYq0q9U!Uzl z5Vp^1U(7e+Hw^$-!vhg;2IAhmI5etCrPm_$^c)l{`Jbn$CD zoNzGfb}3^d_Od*OTK%cMC~Mo6=fsm+BWE$$K@bX_P0CdT%V}^uwMpCaibv$cU z@s_vZ2XU`znuYR~&Mq$HWylx@ZtP@w;6ak;bPW3Y|J=8IYJu8y|$P|DM+61BzR zy!?Q{xFJF9$YJO?t<;p(kM1#Xaorf-@S13s^R3OjvS}ABG!sjxSr;2XZOje0+#9A& zM;*DUv-KA@$n<#pSEK3Li{ALBQn2x3PY5$x>vP@tF$D{=%WHQkg~!b7$?Q~CP8VM9 zyXkM#(N51@eQtJI&x<}3&1WvHYw*rVHFjSv7tkiOy@L$Q5u*g*Fb4(UBzF~rY1B{S z)6HxBe9c`-ZG1ZUe_x^TcD3Q#8(mI)Ur&zfLs%verH%EB9a(2XuqA`pTdNv2s zwlBZ@1C^WeeX`_7du6Dv?#N<85J+rp18L6YAOgdaflNmut6A$BfO|_Xv-x*~hgIIv zN=f_DWSrx!Td!&W_AL=tMTJ{X@Wrh6Hdf~1JB68cx0D73TY21i2*!Ej4mg&IOyvAk zBne)Ai4l1cfA8RKXkq-K;M$`hA2k(CyMtZ8hPk?9xiCL}cR zd9f-1k%J=jUtW9FT$>#{C&F4<#}>17YLfA`CwX%o-U((4$R~r;(*v5)wOc(#@@o$a z$k!UY{$pAM%E4}d!9P5t6NMc>ISqm+1JXQY;8Wo!AinXArKMi|q2pvW_Dv{Pa7kHi zV%dgYMGSgkvxQE5zaR20aOLaw9)IDl0O|fO)-ALxCgR#F%|hU@u-Een(uE911Y-R0sIDJQ_}R)M__955k@wOKmGz z(XVW!j`HflHxS%J%Iv0OQ-yH65~N_Ba7f~mo~zVpXwR7ZNY;9N)M;x1TTHR<^CAiJ zha3^KU~`ehXhFt!2gI^?Lsf%Z^5VFKHzd~6uJx8S8(m7C4;?e!lUEvcKJ~EIFRpb6 zTTU-H)M0_qa2h#mz|PboXdws)bGK%3%8XWRB)tkvwpQ_G8p`f1Uej!$R(+o#BmtNCH?{~P zs3WCcH{3;zL&bgsy!dXGo+R+4<>KkLE3uibvxyrm(QpWCW9qn}JA;jnG1fjLc!Kio zTSb$6a^e?35c!q3JIEXpoMd*ZB>IQJT3(moZ93CXwz#y@4eCX4C57Fvk&yC$hLDMP zbvP%U!n2m8tu;BXh(05_lE&ny((f(ic=)!0V*7*fmu4=l>NhTb3aG?Vk;iL|t6xWF zY{_*vSQg{$7Wbxfw~ZTXO>qN~@$Kn@fJO+Xu!nfJQBM|W3}w{f)P>F8o^IoZWVz%V zoPoDI08|`zG$mm-b28V)pAdX5@mct0eO0Y((l`Ra43b2Fe&`@80n@+ZN>NXH6r|S2 zdEs9ic)P-ytC?@uplg^l-8;%y<|7IN>WQQHZQ4hWg;=GP@~^P7 z2WAR5#yK9;#Bw(t9@H(vBif)Z_Zxb!J-8sA^Z{ONCjJG)(MUhq&s_Z|1L>a$`05`K zTEU=SM&?wCB$PUYicc>C00K|t_;X6bx$Bqq*IM3>sZDzmU&7W?!KUgmh}!PhHb?e- z*jynembJMYV==ZEkyx*F{{UL~uhkm8RsQetf1^Ba^W7@*Z z3ESDfhjs_|MO77O{{UUds_!rBvGV?_aw5NZ-LRpvlg2pjTA7`1!hZ(c_}^Z)v5wl} zO*?Zm_c15S5Ku^9TL7KdD~&6=A8$R6jdc5|ZEW>FJ}AF@pV}6myOa~o(g6Pe z0a*L38roYQGyG5ZtKtn-!%*-)itg>_drQbAb`b*7`C#CznK;|K815@b!7Wh^ZRpOY z!X6FQG@l7ySutCCtzLN2_!l6hlWl1JS6!Z9kY{mVHk@XL^%B@kNA_{kksIv(E-iYN zrsSjAqo`fj*j**TY@Umr260lVKE*gL<^#{9=o*|Bn!c;1YBtMnM!08o;jDFFlJJAo~aUgnsLy-&l|ei*s?4wJ9M zk`a^!v-0Lb+(5Lh?*MZ9;h=kLYAVe65RKpJp(*40RdQjU8`K}Ue&TiD97XL-5=bUsD0c*qFC)eFBMTNx6 z91;1F9i`b+qi{quBN(@Nj9mPLR1ocI({?(vtzF4J{!~w_WC)x zFt*k*-N_q=QggMUAO$_T@jxTr{4w$4!FD#$ESefb3K^yadZ8|rAJ zmqW%pd*WMfh+3)CbSrPMTSv4kZpyjZOKvKs0B0wuts<<5ZtSh7c$3BYg}YhXY6fUt zHr$ryW3+uv;y`vDl*KbA|Y1LaPvqz<_Uj>jW30ZvU$Ol=$i=|BZIz_YH%16u*NeB;2&;{LE!&C6Qu`an1$1Cz+ayKaS zU=CM5tpGav#Wr^Vrh`kivz<@w+TEW3V+0j)+0R-4=jYe1H7%CY>{!9TDH4PDkO4o9 z09G(JIB~x{{U`%#N3xhql32WR%=up>quuymf(~c{LTjxo&E@L02!!N6*xbU(RN(xl za_8F=0nT1&?IZb?DB{*b`@b=lIQKks`cMO+(xq7u0SxWV)aL?#J6Svp;unQ=0bt7m z4jG+OpwBz7I&+?#CE3C5YDiq+cATEF2>G@CumU_&(bQ0Pxl-_eL;?b)x$7Ny( z1DyI&{Nq_+0U~or0Fe!-Yw4Gx|iqcDe6Ka}JUy}2H^CW`^%+Lios zNN+4*@Be>{D1keXt zqWDi#*WnlXOfWQAD~WF{qLYvMXCtd)(BhM64J(?OKCh+tPI+|i6lpPB-A5r(=0$S9 z?2K+g2dE~PiEp*{@kiS2yf5L%9?xJ=BHHenJ~?p9(2m?10OY(s;puK};)_>FY^`^w zk>rdCcCp4|jzXKyr#pQ}pbxEo;RN_wr`xsselON^J18RNT|-G1Nj!_mR5q+e@^Vyf z%=+HEbqi^2ZEt6q#b)0eb1@sb?SCnYZR4V8v93e&7ok>;Z0gUK=|#(szOpa7-5Sqx}gXD52+^2TTZ(WFWT zlCmHm466^*Y3o28K8YkuB(=H``D&jg{C|8lM+Ya5%Q>JASJ3_|YuYSdWYhIH;Epqd zjM-XB0M2(|;v+h9+_h1yjw{A~Cf59Uc$c0cF}#q+<*bPW7SV+S{{RFifRogc zx%aA!6m&wAoV8~YaOq+MNyLDHNIB2{0A8q(v0po2LU%|{2OjxD4_bA## z8>8L(**7YpjPf#gKS4>!M{%gPvHB(8pNBeMgWw4oi;JSDT0*0FVmScz9fmL~iltXC zBd(n#6Vu_-t?vfO;PTXQf_biYCXJG~$MEKoncWb`d?w{t3$xpZ5f6f!rBBEHr&-C<#PBUg*K5SIkK^kG#W-bfqc6 zYSZQW{{T^_&JW$c+Z3u$-JJDn zDJvt){2B1J{$p$7i@TP+)o!3yfGciGa6VNa_iem)9<{rumWC<~>~g;o^+|jv4~6Yy zEvU{mI-_NfKRCeX$Mh9ZcSN;q4=J(ub3MYV>W=6L&LM0S&wQMMah^Xqp$jj=d0{IA zQ%ct|u`$Ma?Edisp!ez63IM09{61|CEzhY3mGOjK!=C+nd(Z}Uk>N|NLO}7e+*_f{ zn_Z*N`vJe76adS=3~JVo<*ng)#{wmC#ZRZ8pa?FsopVM-p8EVmjq<8B$=#fF+6h08 zPSgRfZDr$aLKk=*^5!k0dMh#5zwHy9pnKyK0mk2G+QfJ7rd>lK-}Ph!Gi8@{Nm6;+ z&sqTb7Q@6h7ViSs!pRAVRpp(7$>qcX#;ivf>c;?a#UMGme-g+qUgwp!BWiEhrIlQq z`ka&7r7$;qNiT+$*)@GrR&85UmL_Omw}?g{=kCZ`acmzwQKb~>fRS8`lI9j7YD@_BEJ@<_qzefm%bS$BD$Lo_KT zmeF}En2!hdnE^{24hYX$0L+_B@Q$r=(cfCce53$KZpc;#k`xRKgY}>dG3^SQMeaj5O8KAea4DfnTfJa+n#yT5CsR9SAWXZ_O^CwgFvV2prrD~IdzdoRH2 zSU98d8s2LSFH*R%xwjXP#c?cADc}&YGUc&?cpbafuz6=`e_^8PlcQPLEv2|ZCi2{} zka}Zr&f)n`1K+{&O9_I@6G;>P=mi;Zk$^zwaUAu)pbmdi@Lsuc?O+IP%OLGG%7-K9JMRjE#Fu}=QorN2qdNb-@fcL&M_>rbbrhGHM(JeHq zH4k|&uKGzs^ zEM+`!Fb7J~7`Q`k%+6SO%YVr8i%-};Uc0qxOMO=2IRwF;R?`Vkg>YABeD3^lil>i? z{{V*)!O5Ow;}3&Z9|p{}5#GM9A~6$PO{e{w+DjhRjTE$w$IM)w003v{T{LR@MSs@k zJz89veuvY3BJp>Ge1G9q@OG!D+cu|nX%)bU?qV*TY^V@Yb(?;eYK|bR&BlLA6+>NdiR^mcmGf1)L60b?IGmvsbmwXr`UE zJ-_28i+nrbKkWTtT~$0!u1r`@wJl+kDyUt^?P%bxM<71*80*%tqMN>!U)PzfR+hKB zH9iquzs8*^=Rz8erJ=2%7Zzy+>?h7EC-1jI95H-@AU9?Y%}r~R{L zSHBE=cdGn3)8e7z1#qK2bdWGGP7)K@xt{|FmqPdHqOK+ZS^`);hiN{?d_v@ZY9-P2_dr) z+d^&8I9VeuS%N;?yknOnnxDTy{_RHV)_xe&p-W9fcxlT?wmC79@*y?32rUiJbH1 zds}z+bpE^l08I2fo%goC*U0i4kB(D(DvmD)YFcFaq_1%#P)qp96#WI!j5@+&bltcB1NREbZV3CY|W z0Z#zqn&@rxMhPRDxbUU-h_wrc@G9MFmNCd9Td1u}USP&U7~PJ}KZKG+JNM95=#JmR zKL$K^VXH@|+Uan#+JBXGnv<)9?RDiz5a zln`^1%AP&3#cL?3t36SiWa93(IbCDouD`Bpzwn;wR}lXI!bRsS;`TdOB9uzM^3&u+ z8}rq%lixH(3M-eOIX3Uq%JCy>}@ot%<_>p`^C6e348Ac0k z4$yIffW-0YC0z2iJmq>OGR)#rsFG%uVrw z#do?yws%^^#DZq>n7IsE3;+{%UA=NU_ovE<=4O|LJaeyjJHrb%gtb|11hNRPk_H$A zZYky~0=e$3jP}hEf|lrNPCFage~Y|v;u}kQ%fA=TYj1HdNc`)Dj7t9i+yXIyv~pRo zjP<3+mqGK%^*a4G!I5eTbzcztU(;-!-c${5CDr_|y+~{>)e1&9ETnOvB5{h@ z-1Gkc8eCs4iyn`y=@3~oDCl!br0^0zU3A ztHwdxGoGAP#`e^gZim?Z1o7{JwOb#zYMvUNNC=EVw>t5+w=0fI#L9BpfFYM2mCsU~ z`b+RPgrU`bCN8Z101P!Lp?K{)H>2r|EU{{~uW<9+OA8$DwYgPhSy6~3u)Q(O2~92A zeL8*U8;gAs>$&s3zomF@z}oaz-wJ$D2D56iESBZ%oh~3C^pr@VIRWSxeeUa9LQYHG zRx+AVe(Si~ZyW2L9hw{O6k4>)4DBM=+&Z9V>NB+Y!ZX1rr9%!n8m5U%?d(1!Hm{^e zwssb?>!=0Gyms4EK+}lUwGV%ElbB*HMXH^s(4z?Go?)n zHU64Hg_N+z?>xh51WAcJ2F}P^%LdlF}3gC|UMl0VYgzgNz@XNy*{-u9$ zd!^}*;#piVl(nnP3{Q>AC+^)Fc^@e!vGl2&lHJ&Fi+d}Umru8v!8N}a>C55kMV3hB z)Gco#xV3g-7AO+j7M3|zoyR**eYm5WTYq18?WN1}{5$Yol+AUcc%Il_ATQ=mwqUB9 zF)EnHU(2luPp~+y=V#&Xi8k6(T*ar}Lw##&1I*bEV)P%b4m>E&yb&G70f%Exp zoCOD_dG)E+$a)%gJ|*x}dbD?56wxHPh<@@!*GzNnAaqrYlOuN}SoEPMZGQo_lhg4! zy?f%kI^D*JrFcKXx^|q+F&dOM(1@d)$jY&Z%HmW|25=aho(UXO!kdon7Gcvi_fNuYci>5?Wna2>F`v5WsNVin6?H zylw}BSp8z#rfcjkvqpxi@bkdhd~0zxi!_}s>c%%#FfF^M+9Dt_v?Q~*BLrlhz4gQP zvV9o6n(lb-jb_oT)Qtz?8frH$Az5G+Q(LGYf$}t2j7D-c=NtpgYX;ux-!deU+27=S z0pM?j8vg)=E!R{RZQ?5#H%)tCV$eYuMLerXBNduAj-gzBfJ-L7j2O>4h< z9ux5w;I;e{%i_&4&dM7r$1}xar`;i%1ae9y(&R7$jmS>o2^?`-MrrBz*ve3AQ;VD7 z&xoxNXV-%17O;=rwd8UFyA&OzP%+#=lEH+sF*-Sp0WXS<$BPp|QlRF#Q( z?n4inBQ}CC>$p0V=LB)jwkQL5WMGaDwE$-7%-%{2obf;v z(oRl#XPnRktmKSP0&Qmdib?hvpbyXw3~Jsx9tqGiuL|5uabX#@LOjKdmBRpvcLinJ zk-#IhWZ?_8%~YjimB!upU*hM9t?#eCCClPCwp+8!znnYH6;A zjeJJ^paz$AbT10rSn4)y1Z^~}2)RaS8wFQ62Ws^g;k`CaK{`^jR%6O$o*AqTCgd)CEbDV31sN!RQY> z{VQvkSoEI%x)i&(s%mhfmae@zO#;hkTnXNg+ zZjZBkAFli>@oloj;V3l5MvbCKA`wRFFjhqX5cveM6P)$ty!png9OQ%bW&1aa&LO!?Un7%hezjORJahAwN&Qo}|0A1e6Q;h)2u z0^aI-ZC1|eZ8|87?WEniI1)?chA5&)#?y=qz!v#>9FFRBWi8WQrzGjdJ#XlFC9j1v zpAt^io)6UIStXeuglcLdGAK-)rFU`wBn~}06I*jxYGrGhdXK{I7I;(6xYBP{Z8jLp zuX2(B7SvMBpO}%1Vob`*>m6I zh&eg>{xn=?uY4Eye!d~qE^Iszad&@yAr?%mzAWicF7M$+uG#Vh5Rbx0B4aZm@BD=5!9d0=;TtRs!5CuIKs25j)N zO6`6p%KrcmwC!KQ8jMoudVTJns%g?q47V20$s5Gz+^LxX3$?SJd!Bi&l+>1*reM>H z^gL$kUcc4#Pxwjo8QT8p74CZvhHo@`>oh(inp-y+Eh?NT z8P7}-pmd_(dS(6A;{~UHHLJKF@0Dx%neFi#@}n4w~6m{O;*|n zd|#&NT8*uweoS|EjTN-&orjqo!cKZ_R`j7l+XHtzf^QAz559C4)`edx*jbbkcnshS zpUX8uJ1+s>-)I`-dZv-9!fm33;$J=9F}24+Fyn*B{{U-|%_gt7)3Np)uDjr=^jWoY zd#haQT6LzJZLA#@R3b3ZJa9~pljZL&6~{cC#DE7sEYr1>n}5?b=8d}C@xK)6*1C$5 zsN3G$z$M=u@0Qq#Hao#9#$;9;ZUwSA;MVC_#gx2h;yVu+=+?d%x1Ql5i^`f=?m~Ht zTRvNEQ-TgoMga$IXpAiGH!GN)2>5^D(V}a5=9hK-rK(ul%+L0i-Y0~r|@Z z3En7D4?T|gWsMMd_&h2}xm0j4w0kwvK<9l=V7l?Q!R=9@PZ{_@{?`=i8(mqfc8H%M zuxDFVK;w``S2c^LHMG9{e=|imJ=f{^4Dq+^C*ci4N{d3!-^7+uM>tazh16?rEO8#P z8-+7$JwgV_Jy;GXjTW8VpUYqJ2~|y5U3~ODeY^O#E0stgH&8|=h6!(i&v1z9Ncor* zToMidWHD1fFTwM?awWf^9R#YvQdg z-dl+xneIHO<1!K*NFafcj4|s&R|C2?}in1J~&8sWw`gi;xT4(mJiZ2ZF+{p1-+S^87b0{Q8(y-~Bh=Z?H7qWIFzFA(@9?&ih`ftUL|t;G9eWdx*m zB#)G13JEw|b?Z(yT0gu}v)J)34*WK^)NjS7iSJ&{-3kZtm1UR$GDt>j5WNmMeJa@~ z`g`Gr#oYtI8Y_4|PMXep6q4dqI+{ro&$)=f`#62M>IhOf#%l_cd9~_o3cR`=U#|Q| z)O8sSlcZ{IX9dw^!Zd{)WMaS^GLW48(zzJqcCEQlmCl~u;REYBY;$<8TJY>bX%^Bl z`fT&F0HE&^+7X^OZQP7^sB?GGH}@2yb-(rUJ$C2ezs1Y;vDB?KT{8IF5SH3LpLHy9 zPY4@Sv^PkK$jSzM)&vem%~<-gAIgO z+%YUj86<_rPHRF9oipKvyQ}G!el63XS+u)h=G;G=ieZeumKnnkKrO(>U#B#jlF(^f z)&Bs6oqwm=Tv=EPBwLq5AU4svFdyC|eglduBQsO+`)XFP{ew@mu+)&2n(ob7BOvTH z1F(DGPzM1u)y3m9vokq7lEj{AffmU^sgM*0p&;Pk^N(5pdaE!hfU(B|8K4d88~0>b zuI-X^3&!O6fL}w`>p&KlOpT=$?;=MluKlB&XP_N&-qZoTs%aK_b-EovsfZUwiO<;GfF$hgLK5%P|_j0}3xxE#Hurl(^RXp_kV zGOLT6obit7(1ZBX16M=PZv0!POKGM(ynAF)(Wz*anKQJ>fwLngX+HD;M?}?sv8^?K z4r*48T33lxx9uymktaO~Vc+qf4j>q2lgN@aNbpBaRl5w2)_^+2@RhHJ=P~&9-u4S= zU@vban?&K?89*B)N}S=j1%FBan>FaT{K7>tA4gUIz10E1VR$>ggQ+C~O8`_KeG+6gH*03L*#b3hR8NaWs}2glv_ z>xuyGEp9Xmc-l#A=bqykVJi)}_5=FR1#kFFC$?bPYOT6|bxGt7-KYa2QPyuY`=7Pl zgDmV6bms$r2e2Ke18Ud7+N7HV-)Jvt?ga7?P)dA!3 z8K4h5@fVBRSTe;Gm8G(?a?v1Z4n16t1h)Gf&yygB z&}5u@de8;?%hqVhwZpn7{{U84ka@u;C;3nWb{DtT(=CRb8&3J!knP>Kw;AYY1Fv5S zUD}x~JXvPeP31E}5#et!&mmb$Zc+zuI`yCmnns^CgDt(^*!0`8GJftW<}8FaeEhpu zW3G7jq`>KXOYwtP)TEx;cx@BL%VU0mr2cjTrtRxUti2KFgs^_K203dF#1R_MBxy z0C0N}0rsFnbPXPV7itjcFg>&~TrfdB+lb>pPb|%Xa5|i1(8AX~tGE4_v^$lW9|wF= z@TK;nX$whrXLz#OC}{KMn5B>q%Ds*~&b!yY%vrPnRRG>QO;u9FPTR8tPA%RQ%DLsWh*pyqV$}*1vP&ON2}5 z9Qk8xTbZ0j4^TG}cKs`3Gq>;;h5QY9adjufPZeEhmXJcm-rGvBlIG&(P(Dx#;yA}| zo3Bi$=Ci2ez7>C+i-L>zosMr>((G*Q=DO1Eovq$bA%Z}q#9Zz3T}I9RsxUn>jMj*Q zgjC3EASB~}sD8h6j+6kel~p)60OSubK7??Iez%#f+zwAHokU@wg(_a zd;1YU9dCv1e!+Gx83dsfvm25WgU2}Qj<}!)IY*jHmUfau!BC(9gFp_N?MjuHGBY2P zU=7~H_RRoMiqHFD*51M=H;jH&@=uvp+Rw}K|h&| zq(m2y+XHq#TFQ3lX%zaK{{Y${!G_-2@nuxq%zHt=>A2)pe7zJhgEQ|6D1AG8Eo#e?Xc1Cm=n&dELG zfG?j2)In{uy>h1hceOr4+D@Nz1b^ z3ZsnR6O8a{rL&zL=kWKz+Q*Ape*^eOOqcCfvBd3gs#R@bAae4uv)i}cIXFZIukR$>7Zv8+ z;+ww9W#85R09}sjEHcw~yZ-5z7+osc5${OCz@|^2$-mvmT_M zVZg;HVQTOBI~1`r?QhKE{p%%5k5TUjs%2Mi-BN#JLS&T6GS z@A;P=Nv$pU9$%w=)1MA)Whvtuom2ZwH$Y*#)2=S9?GyN7g@>3J@%za>^PfckR<$s7 zHjTdfU;6B23`{=N{{TCAf5AH|Z;PJ@_34R@TS6pJmXk}li*f98LO|$UVi6d!zG#J|l^5vGw;_eQ1=L!QZI`hUVWakb407g_)Ww+sUeEIuGe$x{8 zZYe$)cnax;sPXwah3c~wv`k~kM(;BZyx+h-+B|e&aF_Sx@?WWrBNK0SKR@z5ZTLg* zuS@YppLgOL`QW(Jomg1I=CKy?-~jgsFjybF0BpBI#dg%F;&M}`%zM|wUyJ&8!ksaE zKc_lsUNM>!fFv=fNLZ)=-ZbDb{s@<^8NjZ1Qgt2P-NAi1He3tF{#2VNff$9+@S^Nv|YKqVMW?ZRWRSr(ezC?+;A6r-+ynd3cBn2v?+P z{SFTp;ZzQ_qSS|>!s=Qj#EROst2SUlNt12^FLhDXj(E;Kf~b=R#2UQ1O}t9cNn>px zDHu_;*+Argc~E^%>p&bLc=l^3&ApAh0RI5bLK&Qq-PoRZ{3rtUoozpeHAs9&(d>=3 z?TSS%9OEA-#|k=+(=-9@T5pZKMc~_MF0?!Evf9HN2@Gs;v9Y)icx;?-bNuRM1ufB0 zn~ui~;k_$W*0l+>9X8pexV>k@g~myK9F7m(A1-?g;+rKSqtjPYzVSo+G;13euc0!A zX(rl2tb4Yzle51BC_SljX>q8w>~$A^4|OXT+DWvVW`;1tw0BWA-5mDMy$WbPFIP1r8)4c$6ORGz1bz?j% zsUk!fKo}jyIQ7mt&e^MtyRB;W`b+(wL2c&CBxZ1{ zx$sl6u>+CblXe#mY=3y z!>iv|+}j|PAjJ0KSqC684aKtD5DzrPW5-48v8Z&wJn|KRI5?&O9<_LcqZQkdF|mNf z0Bc)#yHbf&7312N+xxS}Z1R0LpbM?>8^juIv)XAFrqv}eiA*VmV2!x}ZcobG{b^Wt zKDhW@tV8h+Pt?;P@XuQiMN2#W!5v0AOXak*D9h}S3PZNnsxcn2A*F>t!Oviwc()3%FK>$|@e z-7xYkbvw0HAwy1NcR1kWjxu|YD}hq(j>l88IoY*ITXeU2t zs*|0-b-<;Il$ESJGE%x{ivH3vc$49Wi)MRk*$tiXHyUiSJ2cjjo_1Tvc|{pJcKUl( zn0YD2{{VlfooKkr@;(0mLe+d}@sC5F!#A2WhNIyd+jtV%?^BvcCS;5a_?jK^yR!~l z1>LlY#&Lxwd$jv6KO<;4)K+UxGsS!-;$IGYIn-^_!}I7invR`yJZQPr=9D}9j*hIV zShq%uj0_I-yyE7p@2{bZWTNi6dY!+=e}}&j^=m1-b>bz{?xE3^E6X|b_xnGQYbngp z6o1~n*4pE7%H@Fctf*9i_f_@p+|sokGTkL3P-xpKi{+6B-@z}k$TYI_I(j>97n-S+P9ERj&NI!5d zW9?bak2B_twexG!V&PYnS^i7)F!bNs0_RWHu5PD$-}pxSm5Sadp|neo%1PdEq9rGx z;m+IuYF-gF=kxynhbdxOeqSRi#Xq$F0EWD2X>p)Hh!$ziFLT_g_m*R_0-%G*3dL675I+ca- zk>Y`wr4hzQ%OQ;Ud&wU^mapZFo8;cjSz#+B?zeyI^8T!8h@{`WV~+5ywQ1rlHf=8Y z1ba)FN{HT9MTT;@XxJw0t0QEMtA!!AHY=i}TwT$OCCsePlm0RMA-?c6`MkNB(pxEl z7?#>X#yo;dZP)Gr)RD(tYie~A)zOtoe2&cXEhhU>@ajkXkABe09E&(;iB=M0Xxcd$ zT=g}ju0i#llXc?X2k9~EUmkoft0tFo8*HSmfXDXly);7xYRR@$OF*<^`i+PwpoW+Z2>Fl#DwDyQ#B zKO;$2rq+>XjcT6^BJpOcf2e4;cFVs{Sz$6W6DvApQ5Nh@Y z@W;cgPsN&&Xp41WrYl_~o80PGA}Au2&d?+(7=e+7AP~G0$2C%Xs{a6yF;_kA-{1$t z?}T139vXuF%SqR!wVcJa_-(v_lsTt#sUB_D<^KQ#)zXw5x}JUG zp9VpqXu58z{k5e{DNVm+vc5~!Ryk&HV*_GmqLIPiR?(L;+5FL)jk^beJ`&tsYnC=1 zIGSxcPq~UK)w+%!Jy{6_6s|^h4oJ>ab3~km2ZcTh_;2ktn#A51jwEvGhHo&)fPU{J zu?!oWAG`_2p{!i$OKbiHiZs^tJW6|Sg+2)JEv}EENvC-4!S~X;D= z8C|!GxRFS}8D49K7|F%jNxxk`BdShzK*yL+7a7leeq4%VN@vHLG8Cr{@&^01-4TeoM^`{ws^E z9_uF3Ib2%I4mTo5@rF^g@)UqU7~DG7s-XU7oz3?i8D#=^Yh1UJ#FnhKsV4a$Xwp`V z3lY{#EAjV9`8Q)D6{95$)UMl5FL2I|tdD^jDyoc<0SYj1KgbxMM~O`jzGzthII;VI@%Hf2e)uPNkZBR@DQrzkpeOVoN8a$krpO^%@h zt=kCG{Vosml|#ynrv&FbW2nFen2%u7{x?seTUuF9;nuL4GU*l7y``n9NZ@1dNfeKe zI*j)@teq?M{8_52V~Du3v+@3+CB?iF+TK5w1h6{J1CmQL+f@kPz#CKyiqUDgn|Cxc zpM|=$+up&evf64u`IghD1_`530p2(uEPAc&t>(9(X&N7j#jLVv5gTdR z>U>FX8N+$LcIF_)IE*T&!TG`3Dk73?uD{pfTX#zR51+hY@cu=#TaN~7X?te#zT0`` z7WdI?$jfXyB#i$60|Fb>7Ogh)XqJ*Z_u=n^G|g|swz^k{%YBYklg}~Cu(4%QKoSse zOAK`6@lCNK=pPWv@XN!R9qL?Yy1kaE1fm!&8uT=hl1M)z4TS(7HbzevIjrp~?ycxu z<87V&PD|m`+FkYhI<|pne|YBFM42Q$XaRxF6;LSy0B1QJdsd8uJK{fybxl6oPSbot z95YF97b$R2?o~>iphyXL@z@d%sN#gX17|sB;H1;FM$-Nws#>kOypus3(V70>bwewH ziU>K+%t_!bO&7Yl3wJrKUr*H`nXC)~*3-)^Z4KI!EO1IbT#ytVIZ_9>rXyodZzD~d z>XzDl)P<2FSy9Z3$IM|s1Y@39vj)$vGy&+|1hMdDse28-iO|?-@4}ga6O%BXD(H``Hm64f068$-W~m%ydip0 z+AV9uP{uMO)USq|yT(Ba0Y;V79)*IO=YxS*FKaH#@izV1?*9M-jQE@JKft~@w70Xd z(kG8svx+-=OR2R>i5}iHIVz}QSiG^%1Z1C^Ijt$vlwPm!B6EzkUy0$qDJFdq+TuC) zq10!I*;TTr!y%ZCp!$)T+U7*R4ZalFc>Z5AS=M9Gq2C}TOLm#|#)Y?R1To+DQ~-JF zfm1fp(Ohv!ylr&~fEHOgkAR}XLIW?6@ z&3q|8osDA%J=^<_V({m|zXSYT&~7x(gB~r^tTjm@K{32WFvv(OV{2%3v`RvjGG&7f z91HPPsx{B`JO@kOXV9B@m zm4L@;>Zesy)qXl0^QPgy;Av?-D)9$~cj=mDuDAL=qjC0&yI9N1Y{mQ?*n;;Y4arC6sRGoStdg+Y0yG_01zn z_(Nd!7TzO*=ILVHb9U%tnkhjA9^YcDPK=H72J<-eHH`W7wYh%wX{xH(5Bh~Lb zJ*g#(r0lsC%+c}cR2{#LDtVRcK38j;y4YRFbGj%{ou9mvXD5TeC#k9t^=k{_}*_4+`@ro zjM`5WSOnqguWq5pg`J1w7y-m<+rfI5?OYR zy~j{TLt5C(^^HGVzrPOwi8UDFjL7Aaaw-B8zWxCKorLl?aX=oI;O#=g#Sz@xNqYvF z1(A==GqR25On|CR4;bWeQzq8PsH>fov>q6dWVyGxmr@Y|&n2`+%TPO+K-#0!mZ-eF z3baZ(){&;cJeQia?Uja-Vu>SJr1RL#lHGw{m=TOQ>C&8J{MejNJ@FsH=;u|wcs|UR zR_z*33hYOYMi26`K9L}^y0>2~&eGAxv5q=?tZ|Lr+;yrE>N-D;FFXfraCAGV zlG{^L1;LRbXz((mt^o?ek-Pxd=xSvZEy_}H*ye5gPi=7=wo5dL6QPDg-r*WPn@$hi zJ+o9v+59~52=E;8wwwN!rb`(|)8>cOBc}n- zlFE0FoU3g`=V_{Kl9K8<{BJ$By4qY4+evD!v7v!lByzxQbY?jKlk(>trv{%vJr7yY zemHoB)<^K>m##|-d7=Xi{@crVr1f~G$ik7FaahX_32M^$Y55w)w3e6tzGtfVkM_>^ zm*6cp-(Oj1I-D-%+TT}u8Lh({W%F(vD<52peMeqpm%;a5S2z0X*JtNrP>rzNO-FV~Xt zO)kSozh@TBIQv4XWFf;~?%F`=Fk5$Qimqk3Jgn<<{{RGd-%GQG&r^X0gjrk3kiju$ zBj#x38Q6H|Yhe9oO*RcQa{eXooXu-2T9e;e#H7m_&uq*~0iA)9j^mO&&MDkhIqfUO zH~t;dmd3@VXd&Fl7;atX?&UFtUQb-p1JHD>PRGQtAidLVCB0?K70eHubonqd^%MZJ z_+HW}8_GA9t=JN>#ytlZY5<1!!#U3?AFbz6r%4)LasG$md|i&Tz#DHQ?WG20|%@#x!q z>bct8KbEBOC$nFX&)fU~@vqn*@fMw>PpG7YS}~@WuKrAJ-2O|kUzesve}v$QZmd@C z^aTd`5NnsxL2WAEM>V9A&usC>aTCJr<)+pkNC6-oGsvr2kn}k?bWK;r8nbEo6{Ppq za?<~ml{T=r%7&+f2;Eoml@6^82XQ`Sti}CsSm?lD&zhUU2E(%(!ZEw zpHE5TW@XqgeQI%8g@QfxIuORif=GGZ2*EKcF$!Q!6&s)j1MVCGOL}Lgb3h%xh4kO-cvg?Szxv$9Zz{&jGiQ zo@ZgR7~=F%7bG zWNfg=BoI3v$j}F&Xu9$?fp=n)g^`V+G3Aw?%MJ7#E-22ch(7GZY{6E1u|fVk+N6UZ>jXpPV@n9TK@n`idh-sc$)x>g20Z1 z?Vt`CIQ~*%-Hw4rIrg9qlFI(-&K;vI<>Z8NGBe5dpa^X|Ld`#$b+}{DbI;a*Iy+IP zOg_0boc=WkqwVG6sq+c&{6aaABP5@$hp1fj!F{bgJqhjod2(_^{ z4=@Mjib)uM%RoVAKDh)@U@ciidv_VsP^5<7pO)J;*atbzdM`XES^%)#5sv2CDB*Eq zaG)7lWA>8lI{-*kUY)Xir~`XTd&jf5@U6wgg~!akYY18tXyo9a+7uZv(**m`U^7R< zeHL4hWe~izY4YUE>U^aK`^M0x&>rG|D!sUD z$uxnPPeGDM`p^V$X?GXM^H@i`E;0cGf%NN-dH}a?Zq~VZ=Zy-fAu?E!eK0!E2JB}| zo+Y=qoW~$yT0n&4W2e%9HvBc>T_?krKj}I}o~y|Lu3ACC^x8-ApaWah^vm0l+CHBi zoP>tlvb>I@e{`H+AEf{{Pt-MgE2yGS^p-(9}|C0sk@Rhk8i;Apbp=|(AsLzvR~?UI$SIF z+Tk6gbp!Yn6z)HW8KHsAUD{ic>t}Q3z*)SvWZJ|7)t4s#^#e2k=pGFIz|c2booZy6 zqr{RzhA_P3pdWqn_zD2!uja6kO}>`WIyKi5-2kq4^=8|W2d`QH^u0g8J|dhxpW*FF zz#~S?SWPSfR2a$2#ya*>&(f1)vE|x_hV@$;f3?YNBzEZ7X(jnSZ%wR2AIg}HRrM*d z3cF-*J-(Cyp=)nGs1;O&5p>TTdr$_XT3NG_JB#gs8#_Y~LC0Un&;+*@w(K5g8=p?x z{{Tt==icq3R*6p>sq{Xh-hevYD^c+$imfdC0j4b1*2_7P(#aJF^PF;1ARLj`o_O}9 zwxiYPN8%kPQt)P=`VWcV38+LiyelfPM#e(1OpK1}pJUAl-%x7W5RFRR*4xOpmg;Da znLKWQA?G`HNBhFRQV8u#L{MrHNozg4s#RIh{_z8;7{(7zdH~5#uB500k~5zzyZ#@o z056t8{Hu%x$I8He%&&yN{>qKpK{_JVIuS z;esDta7U;0;(#)w)MU9`(k>Z#waHSo^jjTJq?WApg96DDGHxS~ z3MtM%QF(kdBwP~UnWqWIT)l(czw0iC$n`lWh7scKz(|iG@+jx`2 z*0M=DKb38;4=~At_ZhzE9nN}oG~ov~WWrNWS7+znj(#F)9zE2bRM+Pod}C}$oJRtB zAU~c@Q(f?ag0eWJHz#&^#+P$?@;$UOF_qDSV;I=nF!~`Gbr8|@xjJNaaq-mGO={!W@Y?F_^0CU3Hb9|mrT`fbgSEY=Rx*sgCFkE zLLtE5sXz!ABNQkpMJBEilT3BD?Md-P+`DIsYOjmp7lP}=*I>x&Aa;fg<7XIC<^9v1 zMh_rT`lUbRLG_vUWl#8OUy9q5&Ek8fP%<|~Z}+j+?f^+aw!T$;S{;ykdG{;H`%(N; zoFSLRm%T_kRw2OpN5v(Eg6M_q=iJY__}}Brb95Tdh;QdYrFQSx^7Y`LQ~3V1aitjS zkuI#CR&iQZlYQcw`1IW|T3e}@KH}UG4q4ov;T=gmYeEm92a6)`WwQJ=_(>1j{6}_i zcc{iQi4P6s_T#4W@}TLHSvd1My^R#DqC4*b{4=uneI$DCh-Qyb@f^d>a~p{o0_2UT zSP|x&9J6HO2Y^LHrsuc(Kl}ot6&?QoulOa+Q^wlU$jPTqZynvdWv_1KY}wcY-JAI2 z$3-3b^Tl7YRu?-wAH*LJX4PYF3V2rPNObFoKhp2;!h87}?=utg1@sxtI^(5Uk5U|q zJ{Qnh)*%j^3X53qNGB1o138(;TpmIU`_){NH^v_jY;=gFv$L3L8tKez<~CSuM>~W| zkQK&wZgF)U~UvPDh&dStgZ_%`|#BbGep9Z5ZC0?vu?6It-x^ctp_aN=8Wh}F*M z_JBYIPXr9`DK&AYVg4rgp{n?r?X@f9w~FdyD=d&gsM2)%#B-l zPzPHQM!RHUBxGc7C@Cz%A2N>I13(t;^ur3zc67UijTFDmv3!{s$(m{*t=u! zL&ukvbL!LRw=mj4v`E)3kZmOJesVbXqn&MV-?)dE84oxdp{^&PLrOYpg`mgNKXW_f`_;00n z&;Al~2>S%Ojos2i=I$Izx^ux?{{RhXPBky@HE)rer3+}kGT*@e01bQt@ppooS@^!b zM~Y+AriaUW-AUW*suZCy#7g|xY!GwDH5iFiQvKfFBT5RJUjG2}FCl=2D69y_m^y^xBxm!kgt_9m*1e2do+$PnusDXtozn zs^;SI=F}UXMqwdyvAH~;13jwL65IX(E=}%Q@c#hqALBm{M{nW(00Pf%r)lU!a76ae zTsoKTWM#?ZoN>iO=tgerxYm?(MmD3Mc(Yp8?EG!x%k45S_YlU{mv@mY(~!sSq-3^E zc9v`qI-V-kqoN_}t3B(*KOX#P;7=n((XDhR@TwzPK@HXPT7>UzIC!OzU!hV$mRy0i zl2*C?tr=?Xf4fs}Zz!uRzVesBjbbfKYPu$gb^DlH-P>-FUPVS?5f0PU4mUE45sKEQ zc11hvjqi*xTdtj@{6f}rZ6{t?qibDS#!I#mT3?J|)gf;)kUoB(0yA0Dd&OT(wA~d^ zZ7m)5^*ktRR+n}yt!bYQbg%67x)x&Pe%8z9vhP&So07#rJvQU1&lRdxcE99jezyF| z4deT#K1P}F`@{I;ZvM@km^blYmpwgc@_Df5@<%_XX*#amLNpLwb<2c#!kCj+* zb6$M#Jkq*$UysP`jxy1+S7*nXSH=smb$j9yrHRsPi?1p*iq~@TtPw#9Mih^53GZFb z3f4I}^|`UA{?Hnq#2*iT!V}{gSoIXYxLj%?FD~N9uK|IHHV}J;9W(1u96E!%bn@uS zm1iYpdH(=}yep=q<;I`mF?N^Hqcyas%?x5l!75noVInaD1xWPoTD$Z!R_ZOzv-U-X z>PD;^=6wk4Nx7jPHb(v+EZEBXs;+Czgzk-~h_F#|N;X#^okz#qe`jS@j)O7$UiX zLo41|$JNsWx04T2<&Jj!Ktdu6kaPCa{2!0tRz;H`Va*DG;7^2Ki&Wo^vvVvqgaIovUm$21@? zG@l1Af$v{k*L4e9jkeQ)Y`eF(JwEpYejLyTFXEkNLH){$W(zD$BtBRfgy#f&+~A&| z{uBYrSYIPQnG0=b@gl$7+k?UN>xuy1*Su+S<15%&?OJQ)kIImt+vXj_hhR7ibB}r! zfb}!AYdL&9d;OPih%W-9jDvPTVU+|BFmXUw($=)w+k0p)Ebax=E;mT=#PRt}xQ{Q9 z^AK=yI_7{rg7E(U+U+!Zck#pwnyW_sTin~M;b4#eqbv&U+x#!{4CIQJsP;VO$H6E2 zTK+8r$$Mh3JhsUy#}Rhfl7thCrz8+QY;>o7;bY7EFW{+sU43vZ+BYm6$0dLNV3;CNP|yi0CzqTgUq4{*4p(Gey)qS8pR5N%f~i zot{6N%|sFcz;NDK91)N!K3GLNNu}gll$%#d{(G1cczfaxi?wMN;+KS=I%c8!skJ+E z=0_A@lCB}$l|cCf_PNyb9Xj-0Xln6lR{%*Rq1(BE%izYU6z?nu z{_oB5*8b5g+ShM04o3QIxzXtV00-|rBV5npS@o3gr-!r%_NKdcV>j6D3jjx#9!qXx zxRCzDKYf zJhA7_wOO7)JSmV}P>DLO+}2MLntOSzU*Bz;G*m4A09`*0>$&s4#jl3XE~ovi;cpO4 z;=B1S+S300beo$+TcB`Egd-_%e)-CtpDk}rPTH${(=nWE^mp^OQ*WK zQ%fEvt@z9POHjDhRU@})qeL<1a;RQ7FPt0>y?rY}3KRIcZB6$xtdamSK`h4u9FgtE zKGXpfzPC1{k8d5~q;VYJ@CJA%lgS`;pbgIqS!y03)JB)#v;Eidb7+M3%)o4mqy*nxj4bdZMCah#3tfRW#fHeEp+?u5cszG zdt0$1${~ej4#AEUU~+*1k)*UA?6QB8#nEaot*PXxH> z)13ZQWE~xrw>^$*ZJYZxc8!rFfq_gJ8+OsvOB2xYN3{TVw~(d1qWHU5gX}hwGNRmD zTkVX5QY4WudV;?)gPp|mq?pd0@?A$&({B!wcP-|NHIR~IfO&I86R-&_#BNxswpFkR z7$YQRmV>dy_;bSgeY_H-zl`CuGPqXLT*+u>TpoPHEfDAKhah^;-*gFioezk=WPMiB zHoen4P2t0Gu_T{nz0{$BrZ4j!CR~(lymi_+>&0XBmD&BqpI2+D`_DGeJ{#(KHPW9F zUjG1Nd4WV%KkJ}i`NJfU{HzHbLE^W$m8^Xssr(St@3epI9}a5GuU@Ck{*7xJFl8H- zLj1Wep zJ|(bQvvmqGLp9R|h5V;2^Rk3jEZnZ;V}aJ4gm~On);=qSOKoUPZEz)w!uD~;u~ZB) zGO++>`@{Tci0ZUY4A}U3;wwKE>6SX2S1yYMoSJ|WFmr&+@HQeo?Z>qzuER&w_LhDC z@We7fH-w_luHu45f*a^$xEB&^=@r5qq>_F{3^@SztP+#!eR^nZc&?T(2BYww!g@WU zc$-tyJkK&@Pa{f;?a{OT^XIuQxzrvIl5zB*`%CDT-v0m~k0rHl?)^_X@el12XBL^M zcz?im-XWSvCWSQHi}{htK%f_A9F>{hKXC2Yf$LQoch%d@-`2#sofZCPgzC5cAn^>( z;{N~Ud;UGB7?=Wbu-q zft+`sM?rP)i^m$Z2G~JYo%Un~ZHXHbi1%QcPnqpy_>MfQeSZSo=8NE818TOg zc!tjM^TShb@-(*9jFO@&<;xgV7>x2!z&RBC=N%rs>>4Mwo~P)4!ha9^8P&8k@n^%$ zGekB*HoCY;B37QfQz^ynGfDs6AI($$o&OE zn_C(D6S;}yy6=H5H0yJ|5Y~X?%L^9d@(=fi z>p&djB3Nytx3=?ILH?}uBz4A42=w=$1sb-aW}-=)5LctGO!lA&C-H;CrqD)-c36X(k~v{tnX@JVY-bsKHaMt+l(zYfX|4W8MRA~bXTtU& zJXNX%)nJr6*vBqbDJ1));XQaDwpgy-)YG_{vDaKR_Jci!qwvd2(r?m5W2mtJ%IM`m zR90ZPAQGh+NZiSs8cknur(<8jrvCs|Tl?ED4Qj5c1)Ytu%wY0mRxcE&Hn1U79nqr@ zFgfCs`IzPOTN{{V5H=H4^7`uxYA%78ly zPakWRQONU_dt^WsMY%Y(X}-}J+6gMz7^WjhSf^|T)P4N#@u|u**t!{55 zol%tTQp;7epV(Z11nm_gjf%VNJScc`qg5j*x zT*n-2Sj<>YG9ljQ=Gs^dXhMDUk^rh@my;%1gqDiJ4*n1jm6kPg7;M%)d< zu6e6uCVHN-JQ<@y9rc~^>C;G`Ygn#kGDy&#g%tyCW<57B^)!=Xc07|%@ol!Ta*${+ zTwL5q&m-mJnt5vI!rBna3q$_OrgTyv0dgT*l%wdRj;tzRaeqq5G@5gM~HMY)3IvPlXDUPJR*V0DV_2J-%9!(j2-Yh&`D4|MR{dbQt% zpz&SVw4MnrWVEx5?t|UkPiUaB`7OQnZDI315cCwTuVLG%%0s71aRsDSuq^W2-OQKK zGJmTjfMr=Rv=UFsLuEg@DTvzfUyQsx;`w8bOz`A79BK-whVFTH4DseEJ4yEdRK+#B zxl(EDtaG-WAGLsalEpmob;G!cewZ0*qDLKL%l+85RAKx>a6gea{U`#Aw~FUtsL161 z02-6&f-^uDZDDvZd@YDLBp6t$ekyavwE$#l8mtq=JXdh$cF&h8s8YP}2pk#!;u)k7 z?I*r_eJ{O#pO1+13tjAiT4l(&x%aA@dNEFmIbZun6QZ>(YQZi;XTw$eAFKBw_N0z%AHt zd7uw@m*FqO9~SA>de(C5~~=yH)7Q}NnIn*wEJIy zULUwNUN6-AN-t*F=R}jfIUY^(DaC{XVZ0S zfqIuOzCy~d7>0XWX<@fpC`{5pZbsmv86bBjKDnrIY^2fV zJ|Xz=rb-=rJ7e~U9tVx5xdJvuAo8ovAYg+{L{3M_v0l7KaLcjI;yP#PR!K%l6@d)o z6Z%jEr-<2vX&GD0O~W3BfGL}|h?k9sImZVS0TGZ%jlFX~5te0QjmM<`Yg@-`pi6Yk z<_`4cp7(G7`KpHka7rVTGYAa$a31eYz;l!z4o)ILI4Yo|FM<-rD0zg%Hk3Cngiw zy5k*)930RD5^L~EB!y$zF|`7a7u=sy=|B;GY@}AJYawGYxn*O@l^?>x{3ruHdzmiB zn&f$Xqfx;8C<98z!;sutHm!ehkV2eo0K4Rz3@HBq98d%^URuL!Y+<#HreaT?LEJq8 zjPO4?0K|gTl}j_O?2nhf=Rh3}k)hq{guSiJrL!xlui7UO+4B7jLE##E^k8pwq})r?O!p=6&`~piefT{ln#5I zrhq#=I&CFZDDNb=w+w!Ei)(>_!P;r^HxLkF~Tmm!K zp2TO~n2R1Fp4(HoYySWU+szzN$+s&j95Fm>&I;|vT$9p(D**OMy{u*qTYQfH06USN zy_3@?@t_Q&;;Yz>>tXg-pXI^=p@8k4`0vdCOuDo;F-dO{DoG|7_1sQ!c^}t`0K-`o z(U6_o58_t-U{C_G1_(l)j4%*??52Pu+{-31Mt1R+1Cj5MKoG0-W^D1#%%pH}+z-}( zJFf$1)*9xdEOqTbXvn`wd}^CyQA9l-;6dIG&f)Hi9~Kynn>)drMHCzw1Dhc46BbZ zPB(1YI^%U`Dp%anHF()MO#t`?S8RUiKSmnaPgdg0pv9Zy0`Eqo&BEi#-C@3?&QaDJmH7#(p6SfU7VfhLyk8o zt~t|%AcdNI^-PL|7*!Yh0XkHN3?6koo(68I>K49gz5u!5kSd3+W zUdq9Usf`|0cCX}As`EQ1Z!?SWx5n$Q0NY&nY+YMwo+jo$wb{hN*40SC;n|DJ?VYN6 z@-bB!Dq8Hje_aJCt~zf203+i4YsOm6yvr7$eR+IxcBJzb+FOi`+z&yD=}9A=?VRwo zxSBH@EF`&%VUq-&xFCHy=9rI2vGA_1;jaw;0K#I|u)uET5yfbue5Yw3oy(o8jN}|r zzP25Vj|OPAo-5X^?R-&v7M-QXi-~5DyrOm;%dnqQ+;pM4YJn@W^b1z-4wb0f+-sLs z7P7qPj@M5beDUoJ8KiCqBL{J=NYu86OQ(HKZsXyHhcAo9GL;}KVQbL z+7s;i94^1`9&^dJj-tk5wjPO-GYFjahzu@kGeY5skv-Jf?JV!JzI<*=Q-kr#Binb*zN&Ho5Z4Wk1}EbI0v$TGl9VBYFutK>|tx)6H*oOr*}(dJ1#CQmvp4#=1X#MfO;8E`~*?T zgP8Lv<<)#@A+qwG(?v(kt%O-1zh-=MB!qQhIP3*G2+X|FwCyqG{{TpdFD=jdwV&om z1~LEy^Gpq0TjDM6@8YqT$pmqrn1O{rF^q)5s$>jga(Ov4tOtr-UQMdX^9D0dAuLEa zEuN&)17gd<>R|rUxRVy{cE`Adec#?G)TrmD_|OHG@aLVjD@%bYo`+}zu{g(ElhXo# z9KH{_%cq-!KuZD30uDV#)A>*bMW*;p??;MjyUp!v;ZdeY_ogws0~u|=^~d8t9M+@Z z>sW1Ly3_9r&n5|t&?y5MIUt^t0m$kWvRgDkm=JPCIs@EL1yVwe548Yvx+bCado_Uw zE#{Iz{_lKH2JQZ~u)>gOiXM0Qi@5nf9-gLvAdu=B)Kgv9L{6Vh+0WpcolDhUNoW1jQ@sMpb$ zO!H4al_q0nP+RH<7{vf<=~{F#*vB#zjbtp&3b5f$7lX*pTzk+2_m{Eg@VB0z1_9B3 zjI#aQ5;*J6@}LU($HZ%GLJ4i4(je-de_{ zMj5~ygSQ-dPy||^ifwQ0tgP*H=&gm4VVy~1F(72NN3{St#`-O4Ng_6pq>NRR#D{>q z6&T|OsVABM?tByROU9oJ?(XjV7jpKNcLp!FS}GKV;Sd#7ZZ{6R?IW6r(v1Eka^X?K zW86GD`()o~u+1NgbXhNM91kPxmyHZ@06&RbIb)xH!m^ebJ+%26M!Q?;N}skhxscAj z7rXOz4Zvy-v;o{M+u1KDB z&C^_4h1}7sOivvFJ&4T!Lt`GXB)HSAX0Z%L0Y(I{>SzPg{3)nwUK%$ynw{!jd88Hd zBauu*1IWPVuQXT=uSD@3&E>7nhBYamy^d|j%`9!5vW|*!I%lO%DDHR$iq_s2)F;!X zw6eLL-d~nm*=31Su*TDj`VuOHTe?jWSf`0BbQ@`;+!|Gq;zv??6+bsWg)0He`4`?7 zFce7AE5%EMb^icWBzY=xxMzc&G5Avh)ch~vyAKHK)?OmMn*HOo1hI-FMKKj2x?r$8 zVNazgE1|{NpHbfE*4{RsNb!b`aUGqO$u6V0Ftm3?%|wrEW7 zULCJIQh8Zlkyrg-rVWxZou@EYs4w^nSjt6QnJoDV8hD8w%DxNvYu z9V;62)kKpvqf?dL6uuyS(e}PJxt~Ds95$0dVudVkboOyFTy#6j5+sb|j1V~)S}D*} zwzyQR>TZ0ib8kMJ=6jjK!zn&U2dGnySE}>a*5)UtctgOi;--R4PX7Q;(=4zA*VlI_ zS}+j57U6?GZ^w$6O2tMuJp$*zUko&89`{lBjs2&06Rz8PEk0DsDd2`-wNxIt`~j@h zNw@IZ&9qyDQr`anBe~XmVc~sn>5^$aBYAa&FDn^fc%!wM0ouzx5oB2ulyobe;i<;@ z-D&y!g)3=hc}~5e_+P?;-^IV$HkV6!vf8zZLifMv2M*7@*;kD9-JXYUTC~|VN1I*v zPgmC_y^pDaYv z(JeQPwfT2DV@3~q`t<(*fP8`RZf^>BR_S!Fg_n}tq6BNphn^|qX$x$WERmA3A#a&D z-VpQByD7Ofd1!J?BC*jCR{(^W08k$n#cH z{-i0uk0pTti9IV@YjZ2?@-i@mk5-JZ z=LLN^Wkt61)6eueV^t)s_5Qac@i*-%d;#JJEN?v9?c3zLh~xKRqYW36y9#JIla&6YnC^@%*|O$Pb2_-?+@_KQh?o;hKa%$`-et(J(E!6?TW8Aj)Ab#gAJ zH#0cDhF3l;w!FL6ybt}iYjBXYxw_MBWVv!()cI|+F;Lxi5k&c3lDEtt+W2qsK9KQ0 z!2LH))O5cPd`I!+#+BmR`zbEtk5sd{L2)ovEJfUSF-AdEVxxF&F<3^smXM9o(?-7| zc~MK^c5hu%{LfbSH}HE~z1gYw1IGGwroF3(UVCfn3(J9VXBJsr&2C&xBH;e=Lb%<) zBCy0_64Ft2U7Fv{+ZxcM-m#XxpOs^^t2-C8%ILP zbGG9g?8z#HnR?{Z(w!+ZwbyI+Dx_*g`)Szt8q3AYeuMrJV>TU8UiuPDn;49jg@{Ka zf6Guej;D;*rg`Vue+%@zN5oLx_!q!G6x&GfrPRJ=m#0r^w+!3kAGwY0NgMZdOplx9 zP(iL5?ML5myXyY{;f}gDm%628*zdeydw<}q8%Fp&@jpS*C-A}|TaOSsyw?!Q!HRvF z#w8At1Jz?brCXq^sijg*q#M6&zV>NRxFrdtZs(|L{tVLmF`!xeK+&63(IL<+(*`AJ zpw(=pOfk8)oQ>?rSh1B>Xo<$+*sNhvQa-#^29K2}c!=9=RatHvL+LcayY}c>#sf|c- zJ<~Y*&jR>!z&ae7=Zoz19d73RAh^?RZJb4?c}{rqAFlI)3S=_+W~n>9K4P_&qqS>q z1d9goH^Yla-Q)z_*-aFeDQf$GRYth^&R3FoT<4`Ve!uYImAW2ryIa;n+ge(`*xmO( zk!leEIO;$hc;huhpKSOCT=;q6Ek4E%75G0+pHq^}t|4n?^Jjg4@o{cTG<%q1c;mj_ zE1IMyC+^DMFUg%0=Lq~t<%>VsyW!>5oqJ=ecxqd8TbBD3zMTw6Je`0mysT7-a#(z$ zr9;EbJE?u;dw8{~`;V49MdKYW#Fw{HX|LjGwD)b$SxbHj#hzJzcBErGfChbeuC%S# z=5FR9>)|z*xYMMZTwK5+5L}lsV5nWHUk*SS0|Wihief!)!XFAW-w|l5;;#|-fwVn6 znSo=c&vf{RHsBI0vtSNcMi)75m7MB0?632&aE14F{7pvikHU-XSX+2RVf1=2PUpm;4Vli$c(~+tt#(7ujnXZRL~A=f$dA zEQujOota3&q=%jf!5u2q`rG6~w?mxNtmLv}Ul>>zXOYS*(8gH+9UDA%I0SlC5^ZUh zH*r0MxzuO7@co40+7w|b1`U_p6L3QUK^Ph7npOh0j{H%lCx~yZv}H&%o0!Lv$s5I$ zAb#vdOKlkHnK<>p6h&#M-r{(7RrqmhWG*~SrRptqjkZYbDPiD@)Gsi1Oo-y+%I6RKnJ@HMeiD-5o4>Wxf zTGB1NMdM3by=vxpon0ipo;cPaDMA$@Ad+#OPCaT`eKaXG*Hh|yzlXmE{9C75Y5xEY z?vI78E^a)jVzsq1++8kkW0%YfRdPP?U;xhH>Byy47v@)Aanj>XduVi8?4B0*6Q;|d zc%Ji2@n(Y}F_s(q$XenxjPH&QvMFSIFxwo8tF#OmGBQSPt)~%*B$!-pSwkrQ09J%Zp}Jy;KYHF@*O#c4*DCm4 z!@}D4+HbWx{{Rr_5nEwJ#n>`o8G(_!*7DqCP74Ld?ZpyuTO|Jg0E&y=>+wAk#GeR! zC1K&)&38ial)AcK&u0a)UEX>3P$csNA~_?*S(N2OiURHA))ec_yExm=p|t45E2r4? zFAw}E@Xvx_yt~tMx7F^hOGK+Iu|PRE{oA5Ct8>+c8@**J@|RSNRT#(2@Xv@pv$Ver zZzJ*l0ET>1J&vH;XPZdWZB?Wy23VpSY0 z?7z?ak4MsV3ps6DR`CA-j{HI4_^*Vw7uN5nTIvfM&dN-Fe4Ab(poLW-j!qclRLTza zaZcN4*Wg-`wvubUw?2XJ7ma*na3+JqHa7nN*jjzE<5h}zURO8)JlKq2CPz{mlZ~L} zxa(1ZdT#n1G^)zl?7Eci{Ab`_i7{^0mP!8rv+e{$F}kys8RkaXFg9h%gS2yj&N-qq zs#AJ(^m+uULZ<%!syWF14h4D9hrS`yba-tXTrQia#`7b`B!!(BWMINMGTBn2 zb716c0<`+iGHPi*G)J(rPA#t{a{eZ|@mpTc;n=j3;%z3{(&A|KJytt*7cy=IkTgt^ zsDNZdidTR9v?OA+rlY<2Tj;N+{5ccmy{&&!!L?l~{{Y2ONB;l_FM@U5K519X^4Z20 z9A|u+V@UUMIdhIHrB9K2(oE)Xa(?P(qQ(0zYu+IUd~Nm{9qK-4+swM@>lg@s5_#vE z!dU37uFYeFlix#y_=o!)>o&1{tHE~>>X0HX>q(Sb&z0-3vSVU;^R}HlY-PTIJR@6b zc(;aP(>x!1d@J!INN9}m5X-2=I+)n;$mY7YS4TCh?9aA-6=|LXjhZhB zCYcm_4a7-nZ5m7Es3e7wQqsu8{{Xs2rEu5hOH;C!EB?RC_RU*X@Q;Ry4PR5!ttPqH zsrHMM^H{&#QVvKy++)3Rr8#tGOK^_u6fSiC00?;2Gd=$R_ATs3IGXih+Cl_<5X3i zug^oCSX;ixc9HNG;uWpkvuQpng3Q{logSqOEgjQOf}j+U*CWd(a}3~RdQ+Y*4QiY6 z2;ruljQQ`zk!q-Kd~@SO({)sjQIf*rQ&*1O>f+|v$YU%SGB6F541Q9h<>M9AO|OM% zrTq?RruBW#E%86a%?nVT*G+>%wa|3c0y~MUW|~EQ#H@3(g>}@_O-A7`4{q%1QLG zsej=+oBJsnO-p@4LAlf1+BAT{BHb4GWsEP%0337jo_Oh1a!x10KMOTBkl*UoX>{nD zZSAFe#${pv^Kp~288}``W439%0O!0xHlclWa?nX+_PRJ`mOF5%8eo7zqhPt+#sDqt zfj}Kbqx(krP{jTc&}^c+h7?!4yNo#u01f3wjj9WCik@4Q%z2Kp<6ji`)Gg17?k=w4 znTp1&#y9{Sl|~c+RF#Q(jPRd?lkLA~)ED!%Z4cUwthXDtM=Y$xh%3sEDC2|AIpU|C50RO-UkYbiHnz3BwX|^) zGsKpzcaSx^!8!VmYInGeY5W|x z^KCAo8(V96@w{PMr!JtN{7>wKWN_e`;Jz9 zL%`bV!4|3EYwbKjjH@P*s<}L$`R8_$j4x#`_|vqz{vYHQUB45z(T{^)N4fBww}`b3 z9@ca}y}i;B;$6**2bS7lg#ch-3CC(LCDA{h`GQe>e*-JS-w!24k}Vfp@YbswWxSVr z_OhMH!CkT4EJKcf5_!nOLMTUKxmIAXKATHb>j~Y$!BnmsKngd#L+qo3}**B zep0#ny{frxh0Uqj#qlS@UlT9xG%Fia)3m#|m1Vbkf{?KQu`7TKcpzkCfY=~nl8u(S zjkMmH5zpbspfTB>H|+$I6pn$RyN_-aB`1Wr!NL9+m#58Da!;IYZmeV0OxIR~2wbet zs$o@Q$UHUF%}+8bmF{)l4758h58Oi9=B1_ET3*I{=r0VCqapqR zV);><9ENU~SqyOml1p>eHUT>j~# zA#waXe<}dUcO?AhGy&4+9t*tjOp6VlmZ^fp-M9gI@G^ae6ahY`5BwnalX!ae#@ghK zq)Q^V?-Y&*IUF980d`AG3eqcNx-;qetjzBzv}Je%Y;b@8Nm4uH^yYvjit57h+{dRv z^8JMzO?2dJc4jy(dx88TtpIjfhlnKjm2R+jibzua!pI9bZKN1vMe`YC0A#)ZPzT+| z=8~}6xybxG*WXRmA6C*1b+xsgD>k}l-Wd1BRhh)2Zsk+*dN(vRa8AU7#vU)QWwIK( z!RBT*7T0G4G5PYS+kS5Rb3;jm?Xm2ae;n;RJ*NKvW=HVr!y*Y4P+UbD?mK^p@(T^e zlk-+y#oqkP*V^f8Bj)XQ#?9g@>zmVKXJ;JEk#B0gTv3d4QP0%+*2u}bm8~J3>R9Br zjwqlQ-?`9d2aEZ(={oYNCO7!7?GT0j!ghy$k_SU=4^Ag&;ub;Gx=7k&U5z_N&N)?b~<-~^(&@X zF3?&;K{=58-1iDOpa}2&9^XfqZKj35I04B**#7QC0AOEucU87s^V>TG7$rvFJ^0N4 zb5bhSSU76Mrg2>Az5Kpe?A+taD~ezXA_y8t-oIrX3l@=bzNV>$0Y5P8dtZXcMS z4vRzZ_NU^RmdnGIlHN#2D2)}>7p z;?cm}_z%S}pt-lxX1InU%(kb`KzjY<>V19ci8001&X&&lrHK=;z%$0cucriJfGG`9 zDW>!12_R98fB*;OKo>1%vsVsbDWAQxk}`U5dr$rSauu0T+FH(D2% zGiJ^`XHLF{%&|+mW?;W1%G>3-oRXyN$6T*8*o_OJ;z@2JwbS$qi@U3tibEBw4J$F~ zN~-0GulI_9j%hZQ<4L`bLe=~S@vFm%V4FbKhL>#^x&Hu(J<`u_80uOloIjH@d%`{{V@rr8q998K{2LJ~Ft{Kj9v}@fM^Y+y4L_$dIEd^a!({41n-X)Ah{@ z4+QUJf9s%~d9`bvNps_wHPyD#bnAVW>`Z^ZWtKcQpd*Iv8n-eh(XJ)%jpP@XHjvG8 zYbcsIrI5GGFjSQpUzCH_*V=$b1*kleOzj3s84Qhv;O``oN%u4XqP`Jt>}#JAOLZJ; zZ9Gx51c4zB{9`>;dU2j<0q7nC@SWF*=FQn#4KYHq+{_9|H?(_z&U%;VJ5botx$U~2 zf_xEY6xyZkR6?VC%XsJl^c-aW04_~RZIxtv;~lh~Ki0qD6YxAzErhIa*KfOOC-KVX z?kAxBW~sXpmCvm{9q2dS9kgvfU%!@kA82Tj;z<;k#??F9f|xi|04_R=ipp;LBS>GV z+<24XRfmMEjn1ay?9qnue4+%>$Uwpj^#F5|!gZ|GE0*e5_;XqKhp2ep#P(YLw(BHu z-9_X=+47@Qa8&^GCmWAe>V3K+6qS*KlX|k}itMg@6RO;5{w%Y$TisXAk~_NFR2grVl6l1m+#0dLYTh%t)}eylW{OB{H;55q5$zIVb}`qGI+~#y{u1zc z)S&+WgpX5zEto7+AC$-wsrEtqP52II1Gusc<7W}yUqPgJdKEwEQ{@EP1`;Sh2Rpv% zDC0eOq}bM{r9PKs;oRt=)9mKiw#t`G@rYD^tP&^p+knj9FdR|7z}2@n&0AQC?c`Y1 z64jlGq5`{=oT`qjv4O&_cRyC9ghg*^`n>Ugpx_Ue04g9ISo8pT57f{HqR(ZdjXLK= zvc7`O`Qc_;sY{7ub>(A?Q|1AW0Az0dBU5%(hdUjnr7fIoccAFAB4BQN3xzp60`82% zC+m`Fe8fe2u4~>Ng|(w+qfKIx#b~-+oG%kiEVPvjR0i(!ey;40=M|%$% zL1!)eeqzrZwbEOmCj%H(tP>r6+j_;dD(J{+=(NPi0H*Kpc2j~iUe zD-vJt1<5->z{nnzoT=Yiv}qca=$XdqzZ5LB+Y9?Cv?#>)ts})bxoy_v@wrqe0hc2x zt!0?K=30;4XThx93W$#!zP%F^wVx+jc4-PWUaLi_lfK%1FG=#mHn0M zUKqKwb<}5IV~v0e*%<=|sXeFzpwu+^^xMX@)#P{{9=Jt1!*xbXZw z8na#2k|>dhU9R#s%zc0df%KpbGfnW+Rt83n35z!b$jC+qTyfHX3qK25A$Ecp6~l9e z9CrYFVt_Ry)5rii&9n?0ZDIugL35>P_I8bS%OXa*a;|an9tKCP05-yQG4Egxe4O{7 z4>{NFr<&oXxKgUkw0e4APzQZ;s9R}zGV}q6Dl7q^T9dghg|+t0p>RzDR*Nh z*)06R*(G2KPqzo90CW)D=*~WPVO_v{f*Am2^bA~q*RCi7sE_*>OSduGS;(54jIk`R z%)56n>9;58^`H)STfDhw7TZyi=MF;`BmshO4rl|Cy3}Kp!v-HH*fKcaPz8&9deSJQ z%Y}WTZvIOX!Tcx!s#&YQnKL1bk@r+DC)=hd1H6LUN>b3>NfOB$AYG(`F+Eioat6`M zW`H?;PDL8fzP7{L!y+MV+zp+F*Rk(F7QA4}Oic>xJBi@roX`iT=sK)(Xpkl1#PGU= zB3XiOBaGnvC<1MESz6K!FGW?;E@cSf?POJp3-`x-j({BIfH}w0^_Ou2c!Ds^^Dzv} ztU1nDahd=CPC>E0W7z6ZL>lYFCjp311Cjvf20eXf0oHeyngoe-x5rT}_cP`IjqA78 zfI53W7FsO7Y`ua*ddddWjBtAqo^pH82b%mqwwCVbYkF|s1IE5_jTkI!ykWO@{a!}$n-P;+gdbt7P4EpxRT=E=ZQ=H?PLBhvHIlXob>J9fGx)}UR!|_c>6KQ zk>q0`M$a2LP$&bk@DGc%Ed^gkOQ&mOZ!!?hcpX3k{NjrMo;30Ht0l{Lrp|dSZ!RQL zGc1^x%D*bUF~`a_=RAy3O2cmEeu41<&UKDI5a>2KgIXvna1bPmhT)_;hVV%_93Ge= zhJhWm{{X~|8u>hntsXmFI5+Piv$nR1c7*am+_qdhdf?;Um4|c7wBHw9X}70R@UlD% zv9bWz*PI)AF(MN5mhFe+B$|FW7IiY2dkuBxzoI7-RX@pbr~ocV2U} zeQUan8j#)oXB}Fwp2+#?OV5THrTns7!*qwv@SV8f-(5>#V|eA-{5Ah z_Ex%-x{i{TH-Q9l&34KZxX4!7e`l>)Jw|^9>NnN_FKu2-`7_NA z93#glP^ls@$mA9o9D`FT$t(W=!<4Bz*yY>6ZTmg=n%hnIj~x2Hgs;|NZ#AXFkSzBe zUL%pC2LQ(4d6AsvK5}@XH9e}lbbetddpGY9>OZty%H2!kcpFBJWkYOy*1wb#&Tv7P zFFv^G#%NTZ^FPDF!0HP)f0_`Nj^Hd!Hx3vEH8TflZ@-BuFou(818A8OJvZ*})< zM54Ms^EWix7%zvJB1*lOMtRDde8Q=_616$KXF|1_R zH+~tbB#*tcajO%^0j zK}N^{hqyfc6an?0$Gs<5*C5klYaKIM)UA{3?X76@g!@QgyKUX1fHF)5GQjPAqpm9& zD}DVRPxuD4K3=Q!^E|%mMY+-05^pYBY2rZ*&AudxK!fHA;|D5uWFR>0!Od!9Zuk@8 zw!h%Zn|))$y0zw?s=;hxx4yG%yl8k4%NhADA>Gc_8`JntYKoN9)ugV9gxnp`^nH)U zzYthxl6cSJUx{=t5Zt`cU0K*!-hGDf%*s+(rNl1GtP}|&1py~;?_BQ>8`>$aJ6&70 z=R&OalfU5Zc_)oOX;$$`x0c+SYpY=3O>e1c6U@Q-rr^qUuVr1JRcPCj)%FJ3DTuEV3hqBr`a`u=C3 zd`kFD@u{QI{5ukl7M(uwEk@qxT%^x!vjD{%%!MCr&^|`w_0LM0c#2EjT3@E$fagZ0 z+n+ps(0>%?|*e3w|rkMB5h#`05KDG!@7D_)MNIveu&Pi>8kZU zM3GFu#gnyw%7cJUY>tMvF)e9vt%boNGz^)}F~`5*Kpwx~-xsEY-)PmWzqNGMb{7`1 zGX!Ygh718Cj!K*ZyPVQ!X`ZiPbKx(DSI|M=IF5;^+(hv8iQ^>)oX|k@4D@nNU{;NB|e+|?vEyAU&aWW8* z;G9U!fbE~+IO|kN^iGlSJ-j)kzlCfxSHH3IGP0YPp)fRKC3i-l^PFUoaoVB6?&T?4 zL$udCVSD23D&F_UI(C<&BQT23RlP|jxrmGuSY&_(IO+=$7r3cVQF?vFIk|85oYt-3 ztw&9I6>RCjPU%lvD#cY9SQeuTB=c^YauPO~+ohlu2o zG==j#R}&wz$noHANfk>*=O^!mjRrc^5`E94_$$Ky01{){M zTTj-lR(DrH=0%Ah&I_v$Gr>DcFi~43-m7CPC8Iu3yzvZi%F|itaar830zi!FNnhe1 z5HsBN&1ykr*Tf%eb!*W8DV>r?0Xv8Hm!Z$C08zcMf#r~1#wAzzgGA$j-<9q4pay8Z z7I`B3ZLFyG2<22i$_@s2alknBpbHl|Qu!feK+IU7kG~w}Beei>*8c!!g_Z6qQwuIv7}cLuFPj@kC-;xj^vMA&9aL~<5nvA&QKl5k;W z1Tx{d9WpxpCX>)CZIVw&JzVe~aN)jC@0){jw#sk4G~Ry6XPiAtAQBer8)3AAE1f$E{^5(N5ic z8ETB0xtM=vy%iE8;T=-K_fdI3c5?e+Rt%5nF?FqTsn;JFiZgVAaRk&r8->y0M>(zPE*tTNAdpvz&f^& zx~;{&uc%u*&lTvNIH5~*3y_S6Fy)^EgN>%Kg$c#iMfYcw{{X^M;9Yi6;vWh4 zWa+RgWZ!91Zk1j>a*;^BKyico4Y%(C4Q&`nD>ri&D7T`w%&)Ef*pmpvdM1L!;~SFa zQNCu7pH^5FFi9gPnuUg4U)*T%AJxwj@gK*J7ny13KjGg(0*Wfi23OsnhwZ9ZNX?_;G)p(mrWUVHuJdu6)1 zep`LVZK>EtcY*-Q`zG?R4te3BbVr(eCE zli}}y_BJ>3c$V|TdcLcu-P;>Uq-&okS{EUT4Y@mVGN*Rs9qXESrq#JpvAi(pYj((d zPvE~9Y1Vf-XTz(@duXSSx=(Ts+9BRRb_{nbuo>HsJ7%gip)F;<;3-m)(kGDk&*2A; zE~B-33;zJLt%5g`ua3Sad@W;Qy3Fz0!Sb71 zr&-eg;~O6*uVo^%l^9gjq-Lth8eH{_2lm6&?a`p|PJ?ZCJ}{4EGeNn#Zbl9G?KRIV z1YXX@@y0c}INuZg)LNH_M7F*!@cxH+q9||l3*=)V&p#}r?+uOtP%7bsP}#Koe?ldS za@{K)6{#HqS-KkEfS{j2vT=uwTb8(uB{;&Xw%Il|amYCLuBhE_ui#-TJ+v7vzjNWK z{{Xh)wo7eN7gbyPWD+AVJo&N9y;z@JtM8o9)$|f})c1WS$6h+|(OIs1DPyX_BMdKQ zfY`#I_1!1Po4?>BdR9EKr?YGEHByxKS3O$tEhkH~g5SqF%UfNThnJ^XUcR95mU2K) zfPAG$3!S|8BC}F$`>W?`8aSlA=kmSICt0`BEFMewbZMh#Ve)M+JYA~GZzRzoo-ASx z3hcocJoMz}6;Qj<{{Z+3{K=9_r~U;003+vZGvHf%M!cWILhbY|30^5?yT99MX|R$H zm2q%X$jjGit1%qsHLU8W==JhinZ}!!mzzBo!oLRmD<$3B-wyAh@q<~gEhvn6( z4xO#tT}UwZHeNt>+DoqVRt8a=1GsVZqnG9L3!YlP4m4{RX1MW1j;n7Rva`i`5+{-r z9Bd1WFjgEKXNq_1O|7{tzk_tmZrwEh01kMP!r~Z_y*BoEY!tN1D-&@X zY8(Au+NCY`al-W#qokgue$lNF*Gu3F?-I(sCzDc}T(!Bxk*xQug;PIuHz`$9obim* zDvCO6U$b)8a}Mvo@@c9rts=eC+-`8GFPxi?&49>qLub?2)v4Tv28}Cy560Hb@KULrNGbMh1fqF4j3QjMU&Zu+T9%QiTqik z_-fU49}?)d5TPVSn-nv@VuTPrtZCWwVsFU#_fGheZQ>ni?Jcx6TUK4$ZOoF+TeCEz z5Q;H^4i>D2c6OJV4zU%?ntk2m5i6u}Jg8pYDNjUcRDf9HfO$Q*pmrj;&~3E|B?)t< z&lmtJOSUr1M?@Gwk>8%Q2%$g2=}3*&O_$3fK4rYS@Hzrc9T)JTlP!aA9=KL0ziq=|9-i^L(Cs2;sWo5vM;q9d-I8v&1w|==4KQLMvW5iz)Ei7K% zTl<+blIgQ)MDeek7l>f^WT3fDt#2(OoSEH)C_N^OjDZIu^kRcRwu^7kFU zslXp}n$MNDa-6y!D(U(t7na&q#dno=le8dZQI{hp*zMe)pGwe!Z^w6r(5=A|eUc?# zvw7S(h#!+Xc+X?s)KCYJwS~kAUj>wPE89NZXaUyD$i`U|kULNYn7voR;07ZnK8AoN zU9&%x7cbZW{b&LUiB=aV5bp=6=|BuywNdjS45uKkpgfuY^vkajXnLjGI>wT>T7QU; zMi%8H43e~C3cFAYZpUHYngGVu{6%-GOLMI28Vc^4hMbx9#{D+}eqOy7r2t2vXqsle zziEc@*GHP%CIs^m*Afn_GBCZk=|CNSjBor^tmvz!-CODHrQ6D`_ZCSSv&f);(s^go zzB#2}JnzHS+Lg7(+wCvyw8>%wEVD`h!;BCH3FHzF6u@SoqiL2V*}QJFl=>&u$gWnwuOpvH-^Z}uL;@gXfqmt-|;71N&h?Q37q3UpG10Lbx z)r`8WnkBk4gd25YO6Q>&>OFlZ121~Q+2?RQ=mSOpd#I5NYSV&#TrB`ypGBU}XqqVy z6;gK$jQbJLPz4_@U~vi-2a*6RK=r`wKo(NQYsCv=6HhLASk#_9&uReaEPNBFUMl^k z%eEQhJ8pmbaZvS@%|$~9IJ@r zxR9)OsQEZ^D+LE6k~7F0{xkt~Ak>Y=n>FN8M!g4>hR3n(?q~w^*V0%-@}<180)Fas z{XM7xh}E>6NQ-N*rcwagBv~WVoPM+c1;>Q+d-TjOv~EvWq$)nRIUj`paN6dFrRnN+ zYJ<%kA=$l&`mayMfHZ>tfI2ZYWpSMRf`B>A zZsd-<&jX zIiL?}vi+iL?JZKzPtwy)3RDz?0~R`TP!H=<$X7AY>HakMdEzZZc!yrTku_G0Bl9j1 z)-bEk1w)Pxtt&OKD?QJk^e+KBO5 zrbAo^7i51`CypYaSY~)Mj^8l-tIzs)9ae9D~8^D@8Tj zjz`$%{6+9Pz&5tcsL5-nY3=ua(V9s}$;Zl=Y>fBKD9ygZloIZFj=As?!}@QY@%V~c zK!g$Y+kC0qG5{)bpTez4zJxfK8jtMD;#E^|qTE?s#up)#+Av49@99UhL*!=%tNao1 zwuVj3{*g04xXh5Uy7SwEO-Vh3;@0O8d!uSvV(rvyE^UF%1d%%axaO#n9K!Mt*;PL0 z8T{x1>gjj?0CqHDdi9_Utv1Qv*>!g!LPL##fh;h3fH=(nc8qRyqdoPU2$HcOt{J}o z6b?bapbTj=-Cp3dakrjSVC{Z!*Bs-T0Ol@jW`g0Rz=}`#=1IsW-hdq@r7S?llauOm z#Q-%miBlP4{n`N2kHnWjLhsCKdQb%$>+^FWh?gXc4Wl2R{b&HQge0SUXQK>}kT^c{ z0be^%wtEgT!}z}%0F{XK9bc(a+und1g3P>fHgsM(dl~>prN=^fQ{92Ppa>V@MyUI()!78Z z@?cQknHdxTXT!cUyVEs@yj5?j>sC7C2+=`zr`;H3jY^d`bCbv=O7OTfGK!M3*lJEX zqp|Ua#P1VpWBWcI82Fn~(jE=B7T42=QOk9VtON;H0A!x0sHu%8u86r*Z>v0BcY@k< zxx2S9x__%u2GW1})uEV?YR+7>vMSBDEXpyEIt=?z1^Y-fe-TQtT3gKS+1a&8BLgRD zj!zwPKn1mtm(GIP7gKGYwTEIIQHDNcVZq7c9Q#lP#iiAtSYy1ma}s%Eqh(7XkV>5M zhF%Ho4FGZ0yX{=t5I)P_YmZgvLW#ok7CjxH_V0@iXs@Zx!zDR zcJMKuPvIR&rlKb!p&a&hNC6&c~_FX#{?$#XCpuF5@-Xp@JE3bK)T~v}5>>Q}q(-{__r7tz$a8x+7Rp=G^P=w2unf zL8)HL39{1du2oU)6^Um^)GENFe8e1uSjGpb<*6x1ZYcAM>nOZQBFS$9+G)(@OM7=< z(@enR%R3%8J;~Ug?Y(NW+|BE--3Q^En%&%1a56FkX=c53DF{s9vge}uG5Ms&%Z28Y zrlPLL7;_%OAAoe2mJKVys}#1g2iaNbo$FbnER(nH7U9Vsyl8?j7{*aU9AxIHr!R&`m1ypnV%Nm}3h_*jtIyzz z$F;N@rj;d)5;2UIbS#0C4snjuoF^SQhNTzK`HxE1bk7v{sO$GJNp0a9Ssn;d%G?H= zu31Sya5KSfNEr)T^fA)sX{h+_&dL?Kw(v9-R?{*lo9*++SeY=)2_aVlf-%>hJQgQfk^S z#Q9r6)D66M`(pEhY(bXV6q0a2{w(yt;8vz*MWL9Xw|iNXG_lJi%(4d{FbTwaPXlix zp1Gh8H#&?@`^7wDoG?5J09Cz=fwKU0BzB+&L#l|C;*L_WN>|KH#X|+;1CL4o)rVNH z1w-4u7w+x3kYM_cN&wZ;yi*pBu3C7A*~fU+`Tfo0l1h>`2n3!RjxmGUlUD;>Z|2nQ zF7=z3mOnZ|;TLukAK_iuIHm;a;=7hztpXM4g(Pw5KoKX28Ac2rfR(tQ2M-Z^p#{0y z>*lt3_w=9(E8;g1{{X1YdI2MTGy#>XYt5;^mJJX<(yJ4{ISbH#_2>h7*UJdW675aH z1HNzvJemN`yYTW~7^M*0PZ$j&gc%`;-~dk@Ge8R33V*A6JBd_`1GhQI><4i`85Z6I zn^KBqioxyn9iT}j)*Z=h)B)0Ieg%@vOfI2=;DD?oJdOz<_wDIG33cFz?4w)UG%b)( zh&(Yo70(2Yv;e*amS)#9-6}MKY3I6V+F5YGmR4P@oUYvb*~bKR#Q=SA4~Oscxn$9` zU+k%-U8x<^Py$p31=0A!ZtJ)VU~yTgUtLRawwfMO<4+Y^_-DkA;VZdqZQLwP8HUaV zh?!R;voewg@~V!i;(8QqJVd&4y}{M2rg;!T-)Kl#b}7!$fH*YTxi>j|a?eB7Z;q>T zdu0v~FOhHMtRo%pdbd4kf#<$I)3j?_3u*LwxTKk9*y|go+#@;KxXuq5pbmS)*EV;s ztLYwNz!45*P^306*yo@afJuit#&$ z&zHJ23foR`#yeyR0K}Wdy3O286rNrjWr$S_Ksf_Fa3}*L>-vTH^RDgCKi%DoAI~%a zp&qra-$ZmvL`fo?6!Me?Vlmi%lRzA#RuUzou-!%F+((u|!vyW>J##=EcY^GWy7IId zg|?q_YKwz)!bq>d9D|>6Ko=p^v`s4J;?bbHGe$hHe$f*~{{Y@3Y|h{A&<1tX7OQU_ zy=gP~P|QS;Dw1PDeqGD}2cJ(`0E=0;j^@H&FCJ98Wdxt%QGt(qPzM90!m~}}+#Rtu z1os)B4cm<~WB&kWy}J)Az9d2njgmh1JcaB>K|mQ77Sri7wWeJO=z3*XdwPlhidY%} z{*tF~I63_@Kn+=%QpbfYjP2t%=x76~@cyf1qstx8Nd}=5{$fn(j|fn_0;~x<&;* z0D4db9Re|^>al66BPL+L2@e?qBbosEmq*nm(`Nq7@f^^}r%CchY(lnnwpVB%4B(vS zz9}>ayFbNSxB!mK;6h5SOR-#V3C0F-`BLOXb2GTpym6=eRnt#~yhmtdlz#FJ(7X9k zuL&}^fF=85S_P2+ z2!&XuK-)-c6F?if*TpOCcT~CY7M&y58i+0J@(>JMIqm>+FizlC($S@jA>UdLKSXp=tN9rR!cuw`%!B5al+Wq`rEC+Z{XBgb>N4-rq+x#fr&2 zwVJcY@q_Y?>_N#NN&x1q?uwV23{_Jc^*ytXPg(%n@a>h>y{X$;SVVlmGP!o$u|$72 z&5oQ30Q#EW;$vzWm9p4vw~F{r3>Okbh~~oK<80$O2LP$uje;t9M{}6cd>yO!GsBwK ziZsJ1{?C~sxU`sgit#!5C4q)WF>+bR=s7%cIa%0zx?JL{^w>3>EBj-^Y;JAs)IHok z^4$@%AdZt=AFs0<^Cy5-6OURQBGJ4kWU9AgY_M0f%VVAUyqj`4`j5` zHQNhYogrjj^!P2~H;~2rN!Un-u20Urs|wUTr(g0mr&p8u)X@0vsDHx45_pbXZ$phQ zc8hTx=FF-b2bMNn&Hfd!%lf zQyzC>J)`%lkT4G3di1NQ9%Z%snJ{*H*!Mpac+25Oh;;J~qvKDA{w=t*Pb`BRcDCV3 z$y3N69FxvXVNNv{NU!VA)^dYe$(x=R{kv{_ByF@+(PhKl(u+3V1O28lp^>qWQN~DN(BO&y_s*0x zxVwVp6mW&gg6*6pa7GBhE66ll4nI=(ZEX&{6{e9gUtD>G-ooX;xsjYPz$^kbdj{m1 zcLN2q3(HrzlSoxd%K%pH32lg$-*MZy<7^c>xCCTpr2s+U%@f2X;k;X;T%l_TW13Bl zfVRw@v{K-jf6F-74Di#F|r2;wudgRJ7GRi>rARCyEP6ij`=#Lzx4+a>4fV z>}#G{J=(Y9_niw>s#^a5R?za#i608|uN6Zz?YtKL9`Q^pK2I`Bdn>L2fTwAisUK;UO1Cm8^%0!JN1O*}+r@u#z5*Yz50)PPrpskmYlk+^f##@gTUZ3rY=`IQ& zJN5!Xk710{5oPU0j}lxpq&GJuW!>h-DexbejRBwDm1Y9^j|ppi<(+;fqE@3%PbO5?Eo2#XuoXu7X_xXOh_PyM!#J8Z8(;Sezd0XtkPdoONhzy-MJC|xJI9_q(KYE})wG>9 z+eNg$g|zFVZ7i)EcRYgY=3wk)IohM9K{P@wD>re@NxP+E=V^4?O*&I+rCpn-V34F& zAZ*@1;Hb_z`W*3AXJfR{{B?g~ml{T~Yi+D)vXnPA_mTecM2{F#Cla7Oirn?2(Mg@| zrSaRr`Wk;{cvs=Bl?$L;ol5F!qzt2~r^|uqlbXxf$?qrlBTs1_iG1$P67%+t@q?F7 z53ZHrMHk3&8gyQIFz-_#eN6zKZtI1X?$C*+1Xmg&jrS|uc&>fldz&BVPuVn zCBAQz3iKB=R?Fp~#_cD&`RZxu*7sVzn-rcF)F78ebTL|uUfo1dLavRkozY_6c8#n4qL^KiSlAH~IH@oFzr{_B1Q zpH^>XkB#sC0Q^C)c@tmK(@D0DRDthq=TEYN{{VD}Q+`*~@qymD6-dixa~V@{-$R>S zJ`@ceW0}>886qQV704w|MpKR(xb0Rz(`&UumI=6gqi3(bN&v5M6}`N%z4U1_4noSC zgO6|rB7i+A%i>m_Z)|kAvnnqUJL#FW0#|wp$<4TI|4Mpr6#denwNoOiag1{A&Z6|2tgSXt)Gs35? z--)Dg4SD_tAMs!Ip-&3PG>s!bj`CZpQ7L<=_S=+@5r7jrff?s^Dbm69Y${^9Bz|Pv zd`#D^?=Bv9hHH5xcUyUoNgQFDAyA)~1?WC%?>LNGpBZach_R)^LZF;1DiaywsQHN_ z-heQzM1n&!(lM8xn3Bhzb3h%JgXFhuLIZfW7ZVmDDB*IdUn6L20!YtLKMDZ)^FsKS z;r{>)+J9&1T10wYtei97E6kf*=0;g?TXuOHl&>7tZVm3sQntl!_)TwoV;-gd00}pU zzjXwLOIh!A2q3md&M=>6jY%h|$}h{n#WfWTkU2SS&L>9rtKt6u0bWYuSHIUq%x;oc zX_0-B)y~os$#Xbq9|s4BhH=FyCm@SaF*UE+8^rpf+e@TaY1%K@!z33bKeXMDc`jwR z-b0^MM8N4nrn>(CUm$brc(;i4`|lK7{{U(Dvr)X&uHtY*T*}Tj5;_+r104VYttB0a zZN1N~e`P&F>q?thp3JJ+goMiu*K%@CAcA(EQ-TQkR#oDptZ7DEuIJfy-wlxdY-h*p}Q^xEZ`d1^MyPXQN>}*?jzr%X)7V_Lc?IPqR;H*^f_gDj- z*r{}-9g9^XBgcGI;hziW_jCA{!_vhq&&eP5bhDVqRXd!*h@>l*3Qqo{ec&smoaFR> zfBBsCBNeLqk3R7Zu-+zXZ6f;B2A}@27_R4UI8C(Vsw)K;9XZMGTSgqZnK@rW$E3gT zpM_$JR=bMtQ->^V)U&9Zgl5Wj(8lCw6HkJ z5rMeloDTJ@Qhh#Va&2e{@fo}?qy4YOz**`Ri4WRiiPl#>aoVmDHv6QJlh{&lOiFe- zO)uhhjj2oaJ8f3lNt}?O*Z|o6?s*_{Qt6he9#P_-gBBkYHEX{aX?`GcB&;ELZQ40v zjG~1qfru-RGsk|FN_@IlmmY0V#Oi+m_1jw!;olBk!ycZjW|%2>=ed5Hq-My#A1a{v zMl;ma^P)K!!)sp;{ASv1pM!6j@?Q_wyUA~33oAgfNOJDMPFdLh022)M7!_J>Ep{&I z7mKIqYvFA#N3_xlupO9`4YreAMxR2Zv{ttoDB$XNZx>+98KGPX z{{U_9-;3k8Z7;%KZPXRkslX$GGfoq7+iv2N6nEdT^30mO&yFOHEeUOOkCnyCUAs4useq;57~JEK zKf<;~MSmA~UdqP(lSPtSt8olY^4q&g1G0ephR*ErK;Q$#0D1gI+e_9SeQryK2uBe& z?@7n;6Ug@ZPzOlzt>j=eJO#;C*NV7~cuN-G)=!x8pz>e{Hmq2`yIM z80ByWnxO7qr*3Eh_`bZ<*d1$Bp7I!w0}PV3&7**zW`H@ZS?$E-Y~%9cz`~wDKaBt+ zGDoy+-5UP@605LR$EX}o291x1Y^+?Z_K|CN0qXKdIQ$I&R66a-T|T8@9CmELst6DO zihqO?lheHbWh%7UAcD+!>&|EcMSL%HsJgmFa4sPo=k5v{!-xY&M}z>*MJnfU z$;ln)0k;~svYBC9ISMx+)MV#8=hA>J%XGnmi5xB)h2UrF$)E;8;{xl*Ic}0JG5GiT z&<23Mh;b1AYg+08!Mni(N3VzP(6Ss89K5KLO1Ea5w(|5$!G6 zj)`Vvm#3RCV72Dby8mLY$58Ae5?5i0KryN`v^xfWoGQcGM^QLowKn3l*cFwV*?gR!H_x`j2Tta^NU^e#8@}LAPal1Tr=QIE$ z&75b0)_^59OgbOy-heK}a1??t7!IL|pUhAPOQra;T+;?LtxEO~1_Gq}*YeE(clt-i zzZ>Y7L8*&{0Of9?-Ph_W91|%`qrKAq0BSvI8Pela)8U(EUnW*XJa=E^NzzPeqdO?S zX@3vusK4-#>5?NU45S2+RlRU}$_F^Qx1UPhs&DQ zF}G7WO6Q2jcXK4oH1e>IX#nHpEIo1S>sCozYZ5}sEF;UEPD3c>fI15=6y9lP$XFrg z4Z`3OdJ;!d^`H$)&k}0sG->uk-71nJUM0ZlMi29#4nFhklS=mw1mkhb7X-F`xS$Mo z-7|S;2w~SF1NEQ=eU4%XkLCdM9MA@}uAZUQXJ(87GtiTtO#c8{0O;@ZYaKRdBaP*I zi85x4fIPj&u2djGIptY3m!@Y7y!&-8ncg+-01Q zaB{<;JQGYupUbJpcZ61q9FnX_JfBn4`_KUnr7R$4C(!4ipbaF}Wx4+VM<~-47!i)= z)OVl{b@+Mk7gF&xr}mz#uczsx2eweA)4)*hzq|U`MpSXylt~W6p3e8E)*tZo0bK`w;Td=s9?kug%v}Qtl zuQ8aCe)Bw!^EoFcKD{fT#EMO2bw`rzZX_2n5X~$6*}&u9j+}l}0iUJ#i&fI^VbpDy z{jM2Rq9BG)%6P~;5KmBO1F6=$W#c~+T-@k(@HX`mJ=8Wa{L96M;H#{1y9zP1>cA+Ze!atj>py6n1Fi>o+tq{tt@ITCB2bifDOdHdvbB> zo`clT1lq)wZ6isfiBjG`HZ0gIFa~l*9e=`rHM}w5tM3!t!xoxt|RMrMog^LWNSyso@E% ztn`};BM?Izc5y_@3}g6M4coVK^822Ys!>zXj-5vhjGq?%&{~Xogpgd@`Bw=mOC#yp zh01J{9JnOzT#vdy8&5c)QAt=GR`n`tAGC#si7cB<@fM2rRxX*DUgvk15BJH8WP4E> zT)LojIkz+PuZ=PLFt%WVE=2UObK!Nlfi0la6Y+UH1}eW3|#gID9&_ zv4>05bPYyG<8=gyA#&s#l_k#w&)y(%DkTZGqb@Uw-5)V{!^ARpn^wHm=ZZK4@-s&a zDi%1?KO!g|i^tZrO32B(o^@j?`RtRSk|IeUag*Dg!#!z;?X^utD69-IMyS#*SnlJW zMfLUOfH)9Qhaae*3I5K?FsYKj5C?JEfFBKnGp>#&4bhqyL!+Cn=urK@@yv=A~Fdhj)NVj1ESQl zguJ@6(;&AI%?6(g_g+%uw6lEpJ+g>EKAh%&HCscMNwbD~h{(2-?MXKb5(Y>d{xkuX zapG9CQ1*=kvY9a3mA2qxj%WiKFBYJZ9hT_Oqi!+E>{mSX+k>2+S^(ak;v69Pji>4C zP61M~9RC30-THGt6VKv^^r?lV#)oecx}=O_X%mO&NJcyk+|ULNhO%n6uVy4|TujB{ zw}iZn7D>qiJPH8w<-2QhBy&fJR!1F5lpv6Lcc2YR9a_{xW7RzD;E2jf(JbGUc+pbm*OIHiSV zxCI%P<|qNrJ#cyo0Htvyo!-$Sp`Z;Y+|3`E z0!t)hk{BT%W32#J8mw#qRzEKXJ;CYTfDtuhjzpH!$sDn;WMR}WJT`OdKo<_ICHe15 zNhFez(ldjWBjzW$CyD^f(>y_Y;Vnu{Q^V5;=0ZenQCwk$2rA%%$EctT{aeJB`t9_( z-lrl-docz{7Bx-83=fq+9Vh}zFA-nG6uMg7NVZo)Z1D_je@u^R0PC!*<7;-)rs|*r zka#DNk7@wsbsIRWC;L1Hf(8p5eSVYy=spyN(^R*T;z0iZ+AyJrGJsW(ebKaI9_OBD z15a1dEbMPAtTo7*Rk)3AQSr7mLO+H3pW!33af$%ywGW4%4Yh3<{72yr7R_m?g3h{T zvlvMUL(0eHhEfRorH|ILQkCr2%)VIK>HL}IdUu2()GmLr4a|_N?!j(Z5#aNH%7V+t zRy=2bI@W|3m);qc-P`SQkoRQ&N&v4HhtN2VS;TBk6^R>tv**GaX=E=d{prVoSG$!cCZ_%1aAqojBaN*8@CMg#TEm1S@9>2 zY^>!;bs-g$M8wcr6hffqJ3vr)K9sB%Jv-rr{hIh{k0NHr?KBEvC1;-IL-(?diN9o^sR@% zeQU+7br*zNNVQlXlI94vvPkd)xZ+0}4?F{%#Nwh;QQWA(%VW+q z#Sl;3hRFHkEy)C6fHE`J2CS4{k3rL{EcGIDB`xn9g0JGi3iQ#P*Sl0YY;W4FZ(noJ? zb8S00o=F^S*h+$1aRHMVkNB&V;`MP+mC?|!&dIi{%v~$s{{VwD9}>;rolD}zn{BJD z-`V2Rt!=W-(>WeXzuhgLl!p7K9O9G2&eu?Xc>b>x?BtGz#-1AeoBkMGTWDS})^&YG zYlt3M;n6K)nlPC>vnEzH+%R?!*}*3jF{@f?=_Tq^snUb9ZTcF1B0mKD3#7woplE(1 z@qV#*U@=%N{lJ^cnmz012LJ$5hgAn2xTPO&C#y+%AeXX^$+mdsiM$=)FB|JRMz8Sp z+fev<;(bYOB$r5%c+IRUZ}P`GHg}`QMp`8sWCtoU*J^z5Pnq+1_5QrfrlTkB>E+P* zhvIjIwf#3=k51OKnA1=&30&Cap_y_|oK-TYNcory0r!Xm*Fute7|J$w8ut+@?N)um3LJt!#~(@(usu(F)V@4?B-Sh}zqB;X zTkUqL3~{6p%RRG|!zx`!d0hO!V*|DbtQ01m>-zFGa*I~f@jHKvx-OHdLE>vGEn863 ztf%vBq`tjHMGD)H6#>Z|Hw^QN)yC?^cj|lPr|s|KT~#hZkk583K=n-#fE-SjPK9#r*T-%@eYlx$9eW0 zR>tYIV3D2HyQcG_Co#ND9_4j7`CS;$ntG1MtJ!GYKk;N%@8UlQ>Nn2}aavnn-M`sx zRBpt3=ahzQACv|KN7kdBG3txulQgftW)BtH+!3h7W%kKm?U2ZqEYs~!OI!SSfW9jGCBKOLIjhdvl*PW(V?!OpI8r>jn8{?Eh8S(QV5cJ| zipHiYDcVTZ7f2+aU7e|{_80rT+l0M0%CplcV?-!Iydmfc1Zf3py$LE&l-aU!5JNmUDozEMv-Zl_RnA$2i_o zmE@uK>dmbfN8NJ!kD5Fq@OJO^oYVDXe~1^iUN+I4Ls)AtD%+G|cKpgo87h8d3=@sr zYkIYo9j|vs)pszbN!Gi*zGunb5WW`px8W7cnn#apFErmX_hxXrt!G^S00qMQgnl6V zS4BFJsIM1u8NtIwtZ){q97i_6&f~}ocDJT+=~hALz6tRTnWEeoyiK6lYPRI3{Z=0O<*Za6q2IUfA}bODzW4W*oQ<2dAdiU6)0bKl;89A}z!Hcd2w-z51aW)b`R zncL5PC;`4wTc+4{E`Pa~p9?-7j~d-vTk9g~-pE@QhUPRO455GvmKbgcI0lV? z^+^61Yc?$xhjokjX7J7=jI45%Si=Li(?fyd0JH8F%^vR`pho0jh9p7>@xXTTDqx&_SkbAz?Al-NS1Zf`ITXa?kKK9j=l*#m9R97spac=i_^*UpUlG8%A zk*NF&_|LAN3JVL{9bZw)#i&3Q)Ws-V`EC`AZd)7#j4pWZN?z8QzK-1o7fx>4tMxFv zZTlwbni9R|gmt@nt1%%+;nd36%*P-Njh2nUCmF)~;+;HFmW>ph1zVGC1BOR;N;i^9 zN!LiFC8SGGy1R39cS$4NhytU#ySqnsH@x5T{Q)@G#iuSDeE|%}G_+i`2iMUMl3aNIjmb=qkdMi9Xv@Gh$k3{mh!GYY;*sJXJlE?9(?=z9|G_ zvJ+LoAr(9pCw*h8ySSYTeI=vb_*@LkqH)zpl?;b<-=NDeQI^4NpSvAhF*IsVO64YF z?&r9>?)}0=ljA#CqTksE=ccVgScZG43Ll$K$e8Wpeul|PaDh_Tl{vOiL4qSYi9;<$0v6lSGSxjvxeEFNGnU=Zv( z$91$d*H6b=J5Q9O#wztn(1)y41_PK2p+B9J-0G=?d>-?)m%5Y~s_*3dQU5_#JC^3Z zRi1K?tkJ(9O`ssSan6^@q*!$j+>-BF_=v#kRv*&ik1F&j23u0K&^kNobmk5F8Zmb#}K`hZL98@2ZMP8mcGlv6D_vHL_=L< zwl^lI_4!ZJbmcj%w^pbiZ8Flw4X)gp$Ia=zpC;1HJl__nam25BehTr}W8yc{N^dhrLJ|D$Ug$o}7J+d>?thY%VRi)!pFGYI}GH^cdzxtNnH|vcn*^dfp=k zwp9kcBF5Ym|A7il*jFU3kvTU|5Z?`W5l#w|wv${ygY)KS=520{)2o3gyDoQnEw^q- zY3kn}{hMW1V(WGtr3zMUS`|yIwCwRhF)}kf5mG$nhFcZ85aOD9N~wNTX7d|s@Tf1m zQ<$Ui!XB0SZp>k!Z>>9&Z*bqa*G15wBPy=FRLuhmn3SubVtfId)CWZ;mAKx$$=UaaACVL~=`=`B5IJ z+IS%cFBSOJ1GVn*%i-9Xpni`#F?kTRQqD4AI%B9fjFs@sR5X}E1<56O)9(93BAOkb zEF-6sKaNk=;+!=vic6g2O(wK*xv7ir?#8}R= z6SWX}_9+2Io(j@>YxN~)6wdz*62lcr>WOChzLp{+{H+ht@6Fh&bl;~^LY^%q_`s&>g0G-k^vfRfyh1A zA;w7=aRV>Yl&xh^ft>TlUh;EdBND*D2y%s4lY@JTD^}mFg^fI2i&FsS$w*h>Q3w!e zjlPkM74k|L136V+$?NPeq&KZ9$vtI&d`8^~!Pt$b;>0d}F-3BA?G{}_s$4j=dDw5% zCki1{MgtVa=ZvGAl$XFH6BjQ=%tu_MG{mVvvFM?Y!E@-73Zj==MHyF=ht3{O7R%4B z`>s5!xr_b+A0k^-Wp*$=p2Jwc0?2_Gesvj`KKN`)laL%80k`TT$n*!Hqz&ZsR8$|V z&@fl~amR==MNHMd2;>y|H7|@rBnD(S!Wif65ZvD;+>+l$M87VpU4NlIC>g*_aOpa6! zd6+t_ENnIBWLs`Y5aBo9|Gy#2B0FgN0ui%u1^&0C@To%!tVXWXCk$x}?8F2_x_WQZ|?kB$pIz)b@ zHW{aIS+)a#ehY;3OUzV5`}hMiE^SQK_ePk(aQDArxdw8CRFEZ=HjXKX?D`?p6jiL@ zhLA$z4Ia23(G@?alijG^`XN;0M$zwPuh6JRRS>?1ULF8b;4ZL76@+}uQF+Xumh#;H zK;QDP2YM{c>DQ(1ayVXk#Ut)gp+8o4DwqZ7-RKD5*2aJ>I^DCkHR~A4?w5q39W6WA z|3E(&#qSw`v$NSkPvH2nF!@OS#rc;t+rYlqt!Bl=fjkWu5E+LpO6_^lu@0R3^g<~e zd`saKDv(6g?a9dlLg$lLVMT9BX%>KYbg%WV6^H6oQkA+UV^Ny^Zy;$3$_TEomLTuw z+I;vLi-^v(Rxd|%GgGX~VJjtN!54NDPnxzSQqJMOIBatgHvck{+JS&^Mqr<_ zxw;6cqN-&)_4JA|TEi2D7%O-KW@Z!W%IB;#|Ah~jJv*xVu%GsAC$f`z@evz0`E31J3LSrkxw z*=jVx;E6Esq&po$QJA_B#yG`Lf;L0zBbg_^h9R~_C4T#5B-xWVa`hW*UMHMfsaW&y zPo=*3-y{HRyc^lmiRxtAVM}Jspg_d>d$=(9Pu}RiI)_nqu84+wd;fuGit>}L--4+(>iij&u@3VKDt2i zwSNn-GBsYHIqL~rKE!5`q(*AS_u>-AEudSfZHUl>m}}O%V?JFUezhOmf3)W~?*k0C zZCnQsfKnyf<@dGd<*=mu-UPk=#Wi9X(GKOWDkvgl$~#z{PD=v>aLAcPkL%e=vI3h_ z9VsCD4a<^Y9G?!+N%bsjk+3$j3<9Y1LZY8`o+ ziop+LAkAIE{sa`}FY=J|Qi2Q9G5K>_xi|qdoY>0b&!um%*I6}>FQxDnXESCyA1OG= z9T#&Aqc8>s zJ?>165`m%LW^L;#%3LxJ`Bo(uhma9s)<=bIPXX|v2Y+8KRx1UR_$RNWJ^Rlk7Vx)6 zkAXD=5x4_Ig$@ORs@VfD-DOFa7go>L<*%tugN3|fwK2b*ZMzeJ{|eP)J=D6mgnEox zXIDpuZ2HEOCnt?x2~Qe{8jU{hqg~IlRFF9M!6vtFmwONjy?~(8`xub)ICmEyoq9|n zUV554+DUffdo3s zt1_%tujK^ECto!xuv44Hodi$0TR-Y!VG|^`MHzO_Tvr z(N|`K_bll=a#$&Qw>DWkU(qH?eiOi*lex9{S6jHRll;ki6*(>Nc5&6b4n}Nwze8EA z_1mEE$8BMM9L`idxq5S`;!n&5zaN$j7kxPE2o09uH!w@=C}*M)%y$5ZhG`o$hbNx> zoMl7+-={Es3d*)v?P~$wUg0cI-#Ei-9UOVrgU9o=#3r4Zq zAt2<3+iv?MB?RCd+t?QCYzOX);oEgeBPCO~s}0No5TsMb*A!d6XgL>-y*!HGpL1ag z|A7|7DXGJJq?=vq8tz%YD5u4Ahne_z11U@3B^(3EIRlq{9rpJLJB?UrDW}Pz(w_)| z`Z>Gu(1pUHLQc-XZ^o5{sgD{!{t_@E34x0(a|50ymc`Yw6oeK(VFbIdM*kV$N_xm5w|Jl%9$9IJztWe#+)xWlt0qy4lJf5r1h=CTpQbUSMn4$)fxk|}!6U>$l ziD&F`opfSld1y+xJWU>3Y=4|QU<)Jw?po=h8d}P-en=+OH`h37_Pv9~|2`Jk0-<2K zo$MjMpZ}7uKj(5$m;E>bp@LAYi^);|fsRL?)u8$E^8uPUyza_sQQg&=B$UdS-sum* zsJbSCL%;LmBx*&;i}w7DJHMAYnZ8!BeH}*s%vS2AtQQ`AKsX(=h>75y;(G%(s~@9B zg~IiJpuhDxr;4*?A4X{jn(^gS-I4<3z$$b1h^Mtk-3k@bDfuC(7Lx zwqMoth#g)nWG4)lt zT@5!%=-&F*l{IOJo<5qbe{bVB_YmIv#MEA1Njr8+31 zIABbiVhi|YXydYz+yoG+pk=>|6KSM^0Z;+@uNDZ08%yZx01Rx~EX}e^ z{9otA>aM;WDEwDYAgTa3&d-|Sa~)-j1^rI7U!L}nyVqHERf`k`Va9(TIc<3~8jn-$ z@aTBFx_u_MjRTf|BBFNX^J`%>C*{4?I&l6%zajDquepuOd|h4odzJY+B6}x6+Q>wi zHBA(ZEXfwB`%P#BM@ z76u9cuynHa=y$bK8xINte)KI#BQx~^utwG)ihsirn!*v}nU;vx1BlmB)0CMa-kWie zt(F&d3Og64^9gQ5uKXG5#ex)+CA2#rux&pGYoXp$H`=O7@xz?Udf4}BzqL1kOR7xw z629E6SFX{=g!+`ZOoPF?3VZ9%a zX`dAj)L}ol#!^r zsoY2Urt@anZHM_()4f6MBUYohf2{0SWWe(it2Nf-AKNU+AT^753py-^NWs>hyILUm ze&$M;JT6ic`(ms%voGiUbX`k>Gu>xf*FB2;pb+vQ;Bd73*TrN#qC<5~yK1csC-+4W zmK)YV{i62s;<<;fp}FdHGJXCLmO2&n`JHGFrvYK@J%p)*r23b%y3uOxh%;Kfre@^h ziDz}eGsAk1^WH<^$&$|58cCS%c-JIHmRso4res_Qws7jL^3sgdOywf`Z=N(- z?aGP3-a8OG4lF6svBFWvP1N#opz9p}uv^h=y(_2l2PqC#PA-3oG2L~QXA<|nFVvW# z82T^rjc?;`>(e}*&Oul&m4DBM$Rz`YHt)-_9tlr2^0u(et&5J_a~K~!Y@Q>K{+RQT zcBPb`KN6^BgAXSt_#kTXHB@pFFN^|LST%UH{?9H!bH=&rMe+Kw2!GcT;aj~g<%{ZS zZ^Oymy<4fM$Jf4$FOTgeY3O}Qs3ZmJ?G3MX#1UOGn`<23X2Zf=a&aidnwCuBoX_8%vCA$o**M^X7Q;hHM92pIKuQKahTg(ouySic^yh34eu4Us@pi&dyPcGl#~&^Wz-6obMJQ}lE75w+tksb zv`4tQ4=wt0ypU^53AUMFCJ{o>P0?I7TN37zM6TpjsJn>Mg7|EGglSZ_%7`m}*h%}G zGr`su3Br+|aU=sh6kluc8t7Z!Uve2>2?_JMs(hofXYu!KjpxpS2~5cU zCKY1HftE$^T2Ey3gFcs%tVBD>=reFo!A+p> zW)@~O)w8KvYG0lzZ}UgEHcBTj+)N!Fao!2zvgHl5I)to>tnm7jX8v7|*sQ@ly2D}B zizKtMwf~-A*ce4>v7o(2W6cO8Q{12X;nDBOd1zvP4CJXX zXqs|QK~3-S;ysDLPay%_$m!@2$7{{}(rOx21LTjq7rGU_l`nR5Q{JFFnwJTY5%&JHgmv)3s%2ZP~3=zbhFiGdjjcPkiM617W=A zj#Yj)1ZpYkboCms%gb;5yBws17iE-VwW#6~`a51m#q8G7N!Q9ZrlK_`h8{^prlR$*JDp-gpUkcA;>o8J!84)5LZw3W7;FiC8^9= zb5+!mB>SEeKi}hv*B-u!=epvuUB^2( zl4b|Oef%{vLES6lvX@vvR2_O)UqGMRO|~9cL3vxiY7upvx88V9*KVO<%=Sx2HFi&- zptD~%(AckYSMCM-<3a)(4w-L5-r0hK^eFb&u2b))36yFPY0t8j&$~?_uA5P$o6WU< z67^&`a2dM0#n%f0M&M;$5Mw_)%gicefaCfA{3#L~UvMrz^R?(2O#>qh3+F1oN+(w_;UH z(*yG=Rx<>$6SXr^{u)bJ+-7dhWt zLAblP^nf3r%^%U4{Y(tLNcCHZ(>J5>Co&tjm=c%{d^w6BC$d()Cud60v7K~slgy3S z0y>Okh~TcB6Eni<8`*)7Sygc#<8P`*#hnA$mF(ZR0kc&5^APa9-b`!MW3ap~>aHn$ zv@yG6bRzc*AoRClP_!FL?*{;#ke{Y`V^!a=z=t6Tcl zYK7lC6wHAw%k&QUP7|ZZGQ$MO+aErVMLQ?HbrB8AMq`x zMcb$Kb%{+Dp|i&~9*_wjPex0lt)(F1DQ6VTN3OZf>i=mt+aD5IPb#xuB&qkHk70-~ zZE!-3wa6^!9SBu+J=gmcJ9TS+a=ge<62MLq6Oi~pT4Ufha428M!^jwY^7~z`=$Tjf zM^|62jW)T=l&N$OMtXQU4-xV2p(2}^?<$_Zsgk!&%a5J2`2*)nYsd+Kkr;4!Wq>Yg z`8K;Ex;6vEv97f#qaIb@=*J+{y$I*xc)BU9Q)7)~h*%{gqIGa(R`*1_htqaT@&J;nBfpxWB1n~^urtg zltmo>)7q486Av7h_))vfkCTb@Wyi-!#DuS~kE@p}MWFYo9L*9}PuPHD&7sJX8jMC5 z4=Y9mGH+ zUG}&WDH=FV*$cE#duh9#T4WOVAu!rZ3WzkFOd_zqCE`1xTa_+2|AKa<7o)f)C;HMHcK3b zG&Doqu!HVzh_a@;7&Eml=;%Fks+GZgU;4CMzZXt1s(Hx}h4wm#28HB3M34j5Bk)OC9&YDwLIAw)?jp+dAj3%>xfkV9nF7n7 zKKGhFg3IuwBh&_2n@-*;C}k4`{@nynBF!hH-PH*+nK||X&R}|{AL1lP1F9RG)N6$( zQSv`ohyM^pXbDaj$XpjANjEldK6bQ8t%`#HwGWO?qKSC?@z)2qG%z)w+KCQN;cG|# z3`NiS4BYu}3=T*RxM{0>-FAg8RtZ23Bl^lHs=OEF=P7#-6$xZB3Sm_xv z5LCk>SX8@kvcA420Lzd{AFhp6Un38p6JQ=bJ}RUN&2V2-)N@K1&nB$M(iGkyhV2#WYQB58hHA4=cI?SIzj&mAGFIcoWkM0=|*kGS9&MyA8t0 zs>y!!Sd^gv##zb^+PSCeUIklu^R0-9=A8!3Tq1DgwLcgzAb60x;dZJ*zpc863Ti}K z?rSvGH^{dBg689fBYz629e~dccDk~75-rqO&^M+#W7VTAT$`;$5qq@*jJWDdhbI#b zqJ)ZNmSGKp?*pUV(IAqm0?H7OVx>om>eT!Cf1!GOP&d}g{;rov9EQO&C7d$gJCvi$ z;|)u{l7IgGTW`#$qY}KpjqOO%u{iGchwd@kB{o~L1dpj_V@i9o6k(honLFGZ6vtT)+Wz+G@k}jSrec&nHvQ~LT^IRS&ATEo!cmod+ zK$RfZ#)F_pWVsQ*q-rSJ{3A)f!v#k67BT6LEQy|OEmDMf)qD-s2o+M^Q#K3 z%nivtd7eLDam~U%{OaKB6hG>@@@o!R-i0WJ?>Y$?J1S*DHmMDN0p|DAbWwBTchTi# zZg7duKkBp{$?wBgl9!z%2cSGuyRGTUQ*i0e?DLm}M7ii+QepWtN~dcvAclmn6M5T{ zMfquyk)}}Rah#vAP1G?U)Ai4Mj);t0`}7S;GIrjRNTvZj?6*r$;ia&V*k1RiJ%})g z-|*C7xXtP;B-AeEsQ=drIAnX6PC&-x&rmMGEER6FNxNj*;k?Q~RF#)75aT z5eS9;26O{V78R|{%_daJk@aHO)8k}PHa|}yl>(oih>bT|1E3xI}ZonR5fDuZ%Cn zyx0;Q1O& z_-X-HbwPJ~o0E4K@`KhbxCd^v_HZZvp3qe^?hTiL|_v{u)U-{fRi3Nni&CxKjLY z_)fZ;OT0xH@;eOm?fZB&-;4fmS9PUimHCSQBU%}I5 z)k#S_%0J=Avl4^H-l#n?)$Qvo`P`j!T56$|B-CsBpfq}f0lynKE9ww~4;f5}PwS>h z7`s>pT@h#6PE3 z*1iUnu7dE~WUMs@A=vR(%oz6m<-K{GqJ%Gz(i-ho(YJ=@-f>DmUq`kLh$=g2U(c-VoQ0L&$Ys`NxGZ8gYa3K2@fhL zG6fGM2LJFD9a1lvN3iwKO$I2PaKKlbz_F;z!+KjeoTp-u!xc*v4zYrsyPE+$M?VV? zq5`Fz1jIg-IexWLq+|@bnAmcUV`plg18aE}9SZRlYLO)sHTt$2hmW9<$LdEjE{_+< z$(Z`57YRt~wNQ?iJ(F1^_MZN>_KLRL6I#(`GpiL@C~xm; zrp(>+S-Vu*q$;`C_AseWg{e)S$>%E*&ZaV54ej6R6H9k4iYrHemz4)>Kr2I}bgnR# zT+id&c0bn$es?vnk4W61fW+z3!=p9xoSH4m;m(Q0VPnO=QC?fm-*eluCsF+sWkX;t zWM&O%QXOr4t)MQ_J{uEXykd`7>s(YFk4yl~G-c+=J{oJ9$vOJP34ttvU^90EF8Sl{ zF3n0$*M@#*Gx)l%nJT~?k3q zbgO6n;rxOq_5y3+oDZIh1extgyU8E1m)lSc(pZUczD?{$Lavb8rC9EUY@DoC@2xdD z=?vis>{;2UJ;sae&B3uI6h_gg z^L2=*Uugf?wi?B!!N*OTn8+)@G{vc7d!zSo)`m`=w7T1(OXc?vxLeXH{PaZpmW*3H zw(`qiSQ{aGZOnYgdg=U{BjY)Ty81D^EW7r1py5rKD0w77Q6psp*RNHi z7HK0_7bDC;zTq+QwWDPYY+PdL_g+IL?yC@&F7HUi2kbQYXcGa_fpw;gSOcwmfByq5 zey+JU>avv5qj~(=Ik2_u&$6T5?qhIV*oOfmQuPL*YhCT26GKdou&wiOj+6iAoB1?_ z@>6B$ppgP2<<*B0anxM#pL(wswJ2Z$RjxAX`t&zb={X-CK5u=uqP#^m6Dv`D!kW+b<~KMoacvyvopoQ1SM&S9+~AT%`l3Bo_M2bnuQs#F};~I%12jE-MMvK zRw!O72iIpa_3$kRH)raO;3P-vPLRagzGI#kEnid%%CXKM(L!T9HO|)#VXljdr@2&) zj9BY!&H@xy^%zEpsc56h|e~asHu55FtoV=8)F;kk$ znTNG^G9vN`;pIZ4V@B$7P*m*RKvzw;81@Twso+D|rp5vRQ8q_mN_K&Yx1JzgEnQ9% zZ;FSK^;$|t_3l)b@g+;H?6J^7_p6#pEOpq$hK?m!TWL#OV`HRyq#y?V5Cubl_&e%e z{U4WVis}mMR{w#1J3H8~P2ONJb)^xzYdXtS=&U}tAzHFuTrQu80B zl(l`NrnB;=<`I!x-y0w38UCAD|4d)YpN1BUkCKjIzGwQpW1N-KSY1!loK>xL;FcqH z;oE9}VNbYps0^=Dl6e;;^L!o62~b6<=<^fu$iHw4D?O^=`)ag|k5{`Y*nNxAVXvF6D5E+3k<)34 zs$=Uv&=PE0G{~O4qT)gRN{_8;okz+uo|(48MbVXt7N$2z|)x`lgxWQ|y5mffzJ zjg3(|c;dM&ST-*Q?(;Q5Z14Y}$oVfK^U(@5t%}wbl!5wVTzbU^Z+E2OHr3vkZ#>l~ zC5Kd;Gt;A3Zg(O^v{&J(Q^64vm+~v0%^RE)KZ!_Gow!=d+0p2^hR%Bg7vJ%r5(hO& zd(i#EtD|bn-_*Ng3ya{*Zca@v=v*hLiJ=uuZaI#(d&sU5R%P!5ZM{US8ZdvT}yeozn_Je)TA7xwmQ<9vMP2_CI zbpo=sY-_v%wsMhf@q()U`Q(*|-(h&4d47uGi4jKony2^ zFOIXEtSzCTct`zb-_4cKj@Fnf*%Vx3dcGyx*WCd>oCf9&M{U0XzLJl>T21ryj@%Yi z$+nTQ)9Bv3r6Sbh^rz)qC{LS`imeBK&hc6mxp_Q2K-TmPbR-_;JziTHa{n)CiogM$DRZItTsKWDAVir4tmKu z5pm<|tzOrmNN)LA|ZZCu|xVzw1-i@%}BP`-BFE zmz3iM6AMwMH>sTdp!98yyLH;{lSlFJ_Keb8VaN-IEq;1pS65q85|d|+Tu-XjjVdY_ zfaOW8RlVF9(rIs-ROYOI_q&#nc>V1oQo3m6?k75J=fhzJ#jq^VSp@%GTP+OxVea;x zfpwq}PDTXDoRvOFzxwqYI#TA?+qZtS9wr9kAolR?x|aCuVc4f7G!R}*L}$M>c-m2K z7Ng^-!%nAC29egIz_vOp;fVae4wy8XUzg*0SRU;ke(m?YVP|TEb!$NvggC;hU-}a; zFIQLkcD|U{j;Eu`l1sXp(ON6Wu^cRHOKq>!D_?;9u3T@{gG0|pwYQ7&Wes=CXg!nYiBs^3Qx z_RBDrutmeml_-r_zIq|f9N8PZs9mDO6_W9H3!}QQvA&d*9jS&pY2`tT$@M6Z^-ud9 zoK?$KbgcM=59+|({=v<~AwmxY+tO*y+op-zpP{D*gQot!2$y?p*Am4+Ig1r)%2JQ` z+w+xop6#?8!M2+zJY_yj@6Z$4jU^y_?b2Rug&&XT*umH|WukwfDVGse=& zn&Oy9sXbhQ2Z8BB$|Y3$p~Ky_RA1+CS#g!9`@{My;j@HV{0=`{3*6yGMiPMk4%-fF-#USC_@^uDNM2; z<|z*YqtlK9c?57lWmfKFammdgqYLj*UmC$nI=zm!i;+%*5=^`L*cN{Xen35+Xg?fz z5Wv+Vht4R{D{X;GqYGc>2C3bdn!qY3E!x#U0tq!FHe}1%JN#_fqbR;0{u4<9m(n&4 z>FF{=G<}-7mv~!m17CM(N$*!aI+0`%W&5>&O)AzTQsr7|-%^g=rQTNGS&K;h@-L=T zhO3unXDG8U7w4;#`uE4ji2^OB#ez_zzsv_Fq5juU=V22q>EOWfcFz zkf`q4YoQ{Oy~FkP^({r1(4{BU9Bw>31f2h$b?JOVR3!Y8LYIJ)5&xOcN#b}y7u1lN z_%Xe6@HP*@Z{0r2-r}cW2K>RRW4sLD#?ho| z#mChP%LVlB(F4ISxL<222$uw)e0>C<)&T$9er^SFrnTAM1q1ulE}9c`h!F~$2cRJ) zU`J>#m2aNzHTlQ_VX=-Qc$qIt(|X?f5wh8|oK6)f6bBTE+7*sj zD705Te*Gj44divax)a#+4zxgEyzhB3eQhzY)|KpB62Nt)rD}}(eM>QkLg~GkjemmS z%Xek{)lL%&&lJ)5xqq{!!BL!I{r3e-Jwm~90sijOCsZ5rx2HU8D_A$NTY$;zmWNi^ zkC4VYmIUB_p0GKhC;%j|_GYx{kYl~CQ}3oPw>Sk|N0v_=wHO`H z)zN;Yf7XZsNjnHpdx2z6%_q+3Y@D2gVe1f{o5QV86TQJN@hF&Tj`}sOfak3XnwxjE zh(?Rx+`D#BG1@&*rvV-Ejyowa3U8Qi}8cVK#|rvYFAf!d*G)@gph$Wsy+cD zC*S`-=%5(8W$w1H@vv&o7l7E6uwb{$8+A&I_+fm8C54nS)KQ$sg_2n9l5#cPVk%XG zyf7vC7mVbME*fDG`v&eXBdx2=La(!%jyZv!IE1VGu^$bE^cJDSON%mA*AVVlh+?z8 z$vT|cZmn=@z~)C#>}v=oL4BK~w_ZTWk#goQzbC}bm{-9gN5CU9G4RMY%$V*|Mb!sw z$uKRx8>A`#-{+wmX87J!WNR+rQw=~V?Xs%M;m(hkaPrh*kk?(U1zoNjg_d!FXet$O($u~*|_2p(Qo z_~Rt7n0z_PvC%N{b=4Eea}h!%kcgtbnqEs1lW$7&lIaYO#jUVq)w|Of{Muxv%N5EE zzDd!`Z&!iJRH3CwYcDi+%P~NvwUT&FbMZ`(r-i0#(9*6D^pl)c^^^4O=1#P#*8z`< z5NyO8lT2z>&b>5(^wdTXnoh@4m?eWBmm(ITPMzW)m%r&8)Xk?EA*?N7#@S@|rD0l` zLd_22&Z1rAl$ks`Jv;^%C)WW~5fZ_(foaKkcVvZ@}6EVed) zF?3VBsC^{{Y=c-GrbS@~+ih`u9HGtN_bp`lIJy-#a?d>jA>QrdB;6(IA-7j1oV5k6(! z4Q7)Vc?iKK5=sm3K^R(kFwjw1+mPE~LfE6D<^&<#3Id>Zg*c>A91`2I4%*0 zTq0)mf_w8;L9%eU3rJ_rcCQu(PVl%Vil9&W0^i7dCbE7CzrBah>g@Kg)fjeA2@o<8>V7kX82Nv-V-+)Cod2ROq{rC*;B&4bxGhb z3HTidjM-=EK`jU$BbC2q!7lSq3;gL34_PSSVgn(<3d||S#H=e2#6%ecN(+R-Kas+( z{or4^SZ99cLs@XKg|(ZQ&f@5Aq|xH?qy=fAoiUG3?-GEeaaJ#iKfl&7{Oj^)1k6#T zv6WsZ-XtL`YY*~!M`HEz5aaCON_6bwg=^7SxDeN^(jf-JPrV@;PVxcKJABeWa};^a z!}FBwxA)3eynMS0x`|JU7`sEKc|vsDR~2L@%N%u+F8Aj;F;RtgIl@4V@cA^C5C3a* zY=M}-ffqKHbHd~#Qbo*r5l*^D^GL+_U0r@w5?=t2REzjcvSnFTjw#g~2JoWr6{5uYU>c*AR+|y zGsB=nPw&P@q zz&1occAKC4eaH(-ZQXO|vpo1%0R8-?zJw_3%?$dyxX!5r8ykZ~uvX*S zkOZ(OYAQF-dd`t1hUqfzfr(Cs59-D+nI!MP?Y03pnL76cT^8i@h%t=r7Aii)0sFoe zx%~>f82Jt*DIGgwsWv5`BzkE^p~U4l@pgUjDmTVy^EtKcsp%If^I&)s;9=EigK}Kd zV0~TRsi1$+Oy$CpBCo~VVnSW$fvzLm?98kMTvO1J|Ij0l6L+G`Z=DJd?-c1va^76f z^-5x*_SG{k2h900I_S>51cJ1zP5Ji~a<7~jknEU1`o zDa|Cj-1wl~JH+~LNqL6V_0WYxg=izBK$y>J8wG1)u)-@wDei)fema4Pn|Oc6j|Uzh zFBke_$8_O>JB^9nZ#%ncVG-gC-Bm809r(xU%j*zP5<`w|J zS2MHSQ)cm_k1goyQl54FI$|GI;W$zIlwI1Fb6SVUIAEKoI@W^qg6H1Z?)aeWl`xs3 z=76CSCgvPSo{VlvOThb+akG4v@lTBmo1#D|WIS2SDz|xN;~47RCxjKd{YuW)@p)lW zi{fPx&ycNxjR`kuOoDTGqGxkEQc9~QPWGtV)c>fxXsN`KH!vtsNc6Aq#j2_X_TB=q zYv1LdA|)F|w%Mk3n8q$EhmbfYBrbXZs${zcjW5i3)ql{+jv5tv^Bjge?F`YF24#mb z9G67hoCJfV%AKL^xCNz1;s|bnc?eT%%>73M61(HZ%!2)zeYN!|32I}KxIU`Bv{~&A z-`te7Gb6vtALC0k5=Y1TqH(K`Nv~4*KzuIfhnRQC^tIMzWhz_>yn1`TM%difQ-C1r&( zpyiVEn#Cj=<{m{I5;t!A=6kS5ekpUluVz8VcY5<5D1@cmvf*vo^{HIJlja)vAxQZH zUDMt;ES>QqouhXjITc)@bx`sq`av>tl+z0ota%$9DTxxDHpW=sjzM396`DNv_&)F* zb^z|Gn9uBWwOa!}X11MpCqZ`Yg&kGrA(N3ks<KS`Lk3!NuB{$HR#$Y!3l93v> zbx4X#1&wG`H)3j*Y*nQ48J-(*n~PHP_6;aQT*^l6d9o=!PEJW@E3j|DL2Ktv1L;** zpV$@wfe6XU4f6e>MeK4`V!g=qxh75WtF!j|G5U&~S!!+Jl9N)*RmnrRF*Yc}5}vX> zUNN>sjfCkp*)sFh=sH@i+U{Uw{v@Kv*ZrGX{s6mPnX69I)lzj1ZCy&OtL2bkcacBI z5iI@$BeiRIpKCobM$RPXtiIPMi3YXfKkk>wS7*Y?%JQ^4m zf$rQ?M}XVX)3>4T`Z z_DyaM>rO-SSHu7xaa4Any)DlXs#|l_lqQ~(I!;}bzTfGp_J5#0uC9uZfyRsG|3JPD z?Iq{n+_lr@P0(zUSp3J1)nWZYm4S3B<*NYcVB}kUDc(480WOwZUxx$hjki!Th2H4f zBiozcb`mAkQSdZBK#YoZ-0WhnO)Xt}{O>v|{KO$RSkBkIdX@I`^2T*b%+B>$g?`#v=pHAf52DT1tj-7$%nXmHThkWM0g68O#PFm#ctMum1menw4zuKl1Sm$ zi9STa6J@12wmBW4``xCkdi~rsFCOxzu@L*!P?EeO>%auKG>e}=bjQ&1F2%p6_OB%B{zvl%YWL!UqZB7sl;YyhOU8^-M%;MbSPsocT8N%r`+gHNh-fD@vVC-iavgqt|Jb*%F&$_?Fnc7`u(3m!}1iF zCbqz>VVu37Z-bS%1JV2AxmB{SvG;+2}D#Y6NQYUP=jBsU_r!n>1h z_ZaV-JeH#czdfI!c39j#HM$D^ql7nrI_5)u-F|XK4 z$%$Ps`~+}Y%!_5Mtco-zovd~d6DR>&WqzuWfZN8;KM=x4yxv0Q)F;2ITg}>*<~Hq5 zO9=L_hDrJ+;$y9pt~!qQC3d*P&{tV+*`#y#+#`I`mNp(XG&lqpXswiZ`#BKFC}PN7 z4${g7UslEOV;p%30~3KdpGrrf-#6iz()CJh9#h`ZR*geX(QRFE;l?Fp4fVkO;(;-J z$Y#FAkm~T)1<#ekz{^@zquzNbH9MM|WRsgAul8#h(NLb$iLh9FHbguQqGzB9xG?<= zy9%Rpa}HP?>`IEWYirSKH@?ttw?E=1% z?XHGhqR*b8-INyxU>a%8xlYlVGiH?RQLP1)WHG_Ti@p>if4ZNfft%c5(7U>5GOV%5 zKhY9_cD7@S`u2-3JY#B~CmUHRvZe~;@wLLToj-*xyUDz)Kk@6=o2sT!-7Ti)0i-gNlT(BzW+j?qlmBlMJwR(=^pC zC`&cY@A_X?Rqn=!wPW9m<;G8X(VQpZC^jjkvkn`@$+FzP{Ra~4sCgnOYuQHma{TeV z(Z9cc6EQ=6!9WrzWkwITB#v!o6CwHA=?~yK9IE6)2j;pT3CF7OX0b6WG&W**De5=&)qOa}iR2I7eU zBww%c3&BIK?l8Lo_>RwqYoFP|aBMj#1D@t#AYIOi6oaSjnaR^~-d7i#xd904g!SP4TGa2AF#)O8^rN69Q1;+!--hZy8;z-_l&D#cTm&H51?+`Y{DOX{^($n z$FRu|+kMov8_&QPrHph0>m;s_HQ)32qbLHOf5tVS?sgr4bw~%zHblG7nBIt8cq@PF zg_JzAK=EL+>6`tuNHJki80a+9K<5T32mmP1IgR}6<+tWw%9fV4%uIqXZ=*GGBoIOy z03YxsdHQ~~Ws$sN4R%y+#)h+-F{r_PGiU!*= z+qPOesnhCt`MjKq77QhM!6;fy=F{Bg)hguxMjh0@L?VVatHrXBt0Fd;Ka4g8)%x%M z<_C_w-i;c_?vP=&*pJIW?D*rAUen*VR?~l;BQhOM;8=X87d!b&T%#9(x}ESt0B69n zq3d=$Ozr{D{>giu6p^;N8W|9s)*k)da3R2ygumkozQO3bXB~C4^tV3TX15Y6g+Hkj6<8V;+H-fkh>dz2U9iXt}uck=&pTMGe zcDKkbZom}@81yF#NB-gCvsPvZAl+F1dH)0fz!=MK>I=Ec?NyaHc|H*Y8XiFP!&5h< znR}y;$-><3EIYISB?8I$Hv~+mb#wM+C9D+T1-jxE+Nq^&>N?628DicW$x8vee-HQ# zx*RPwwb~t*9OQWFD>rNMdI6YFv$8hkwxgCFHr<3U-8xBz2(Wwc;;$-DC4{JyZ;ibm z)J`~je%)&lAgRk8BOTH&tDKFT|`5 zj6g^(LuSy6(J^eXYSN!CIfEJ&83)}o`2I*yT>gP5NLP8oJEaeAzb`=qoS|8Vn7056FvxTW9V8!NLp<0o^ZR{aACReb-iKCkaN&g;!a`+k{5_GtdR zR4}m%O{ZNVmFn>bA(Y0_j|guFfK*e~5r|HN0mh@wC5*Y91ZmElF*vO?*3TQpTMbzM z-cfKdHTqk6Aq)Crfe+@00UB8tF393`TjMbjx8A;KPtdarEaALo};*-C3$bN?|R4L|4P(9fhhLANZVOlDV=ERL z=1S679hKFbd4X`rwNFrE1rf`U^Ss6N)^iQkc%c6`zFlJJ5JP^qoDAGvT$lsa4B2O& zIP;=I^=t94m2(`mg^L=;&pd~IZvymS*Buz@S*@V=y~bQ>#=p-V@&xYTye!@V2VTy% z;OpU-ysJXHBVv>`%P#G46Vp%D$ZYDe>(=hoIq6UQqz&kJXO3!ZdYx3qku^NfpRhtF>+(mTi?U z54!+y^!DRm4+9wzRadik2G}pd!2w?1(Y;1IJsj!!7~crGLnZ`M#*8_24kVtCYbAG z$jcxX*kD3MWyp*)1fny=!;3+97b5L4A)My|C=Frv6`?!fG{$KtNqC|nxV+Mg52p#M zzU)okBkA_rE3q$ng>4MU=nl$YXvbS3<04^z8{brR#<5H6FMMmDsAI4`m&%t914Fh* zb{K;_m}*HD-+`rHEzJvfj!#RtXts5gMQI>h?vSg?gD%cuxbX~+(ClHU_9!J70v%M9 z3&a0FKgZEBYlrcU!$BiKO1PTmLx_aXT(^M#wdy_wq-&YR*-meO{*z%tPXfiZtb-!H%h>QhK^nr%qs{Q;-q zjnbuA?901O;~hj_^Zjpk9x`|WWAW&UjfRzPvN_8SZVeA_L=aTw3;elHFGJMoG$#%u zgSk@+N6s|udoj)@`SkfmI8%%YuWI^bxd+;dnudyYa6>{U!)|7=qpA+R3>Zgp-+?YT z4igW?S{Cf0HdjetE!b*ooa|dQ@}$GCSw^^37(qtME>%bqH*KSIK;=b@3qq{jG|+7w z&8ZO!#a)+O(6Z!<;WpYg%@a8T|LS5H@52R3 z{(H2#K4^zJPJ_JJ2nCQ?qTcVyyehHcA(LWapD<|Vc|cq)xyagzoydbaSSbaGy|9td zIZ~i$CTb)OYXJz5vQX1R%oOh(<^ec(h0^8)jV?H{l$RiSOk;!SfOQ1~MapoNW(312 z2{=K-nYasEAAHbWQR{rZB$>Z-z&8X?zF$tYLpaE0&GDe|#xPj4jf$OvG-^v;3KagT z9eksjOrxZ2kGX9`nGJ9%mE5rHUXxV8nT!a)9gk_=6A{R9-lza~*C6dV^>Bm5 zPqog3GM}CA3w9-?8i`9vYs2I5JAwo0&R?h&V59p_XCvEkK=6P?n~w5hqWQG1Khnb) z0yr}c>pKnyK&{J#MtFoS(?y_PNjLR_Qo+Y_z9g7~@VE(ar^f;W+9va``0@2`0NUDC zqVEEM6c}=x$iutV^IFPA--#Hf9cUDZay#1ve1qLXs3Dp2Wo?>9Uq1Hf>Ks*$>Q+!A zb>x*7Tu29vc6EnnH9G~;J|qmO=EucB=?xGX6W$7tuvj`jyb$Nnr&%8#ymESMr~ zj2zhsV0n`K#2>7H`42=lKmTtlX3CcrTNdUOL#63jcP!#mJ1pBIbO(bpc9z3rgw)`Q z%P|*;Rgkd3O`ec3*a$-udC%X$S18*Hu%^^mR_h+m)6TqCi|8&R?CVanZUmE>0`oMk zy`l6-ZR5F2%_%+`){=+`%75P^fudmnLfxq%nh~4*jwXz_+n#A~vphxgPdT?-Bwop6 z%Ni!U!GXCUV%@sLewZy@d(LTy04CPM9uX6}!%K88V6gb@L$QauZ!j^2O7lL7>ht;d z)^F1nyl4_C@hjXiP(&c_(}v%CP6+_Li-PtSbm<%B(Bn=AC8hNvrq)8i5kh|+HUzMe zqdDiFj7DGEV2wyWcmaZ+A^+;4iUuq2Xt4t1o^JAK%XKpMO~XMK_xf-a&6@=H zi}#6JE4F^l3ApBjNfz%!tR1#Si z^#aCz&5|ZW0!Hge`_3bN3bM3Q5=sMN2y(tK0$7UJ1V6qzkw1^M!lK;`D|sEkoL>69 z@Mb{*?`8EKrWHG0*&a0-pS2cf#Kg4B0ik+39{O!OrrnMqx*>;M`@)qoy)zwfA z&nSOTm6b`e9cy<{X~X7J9y#n^aGccJ6Z!cUdwV`>3sc$g3PKC2JMo!K&Zmegqrr!W z3QwV>##ec?b#1ya9diYqK^Xg5=}+q-p^P2m=nls^S5Xq&;;KN58gmjtC9i4r7Iy=+ z2yX9)zuYMro3w(B56l_AAx~!OCH}(@tL%^YbDP+*_P~TmYpF##wys7_Lons6nKPIncVu*eb!55M<77?gu+`I6F;@M-h4?j3KwnW3T^e$O@ zQ6KPPR!bRKQf(ZcvwH~T3~RAREV1?y-_vufz2LUocM)s%IP%Q9mVSu7raoy832uBh zAs}K~5^oePE*_;2y|_8ZIlNP1)OEC-kvg|LbXXXW?9jj9c*64bt9afxp1gA`IJd%HRfXwpk2PXLLcv51*)&v2 z@lSroVny!mmxr~J5{^4G<#C<76P9l>(~*Hg*06~nduL|H1_P|+@o6+u+}5*27% z(H_ZfP9EPISesk$S9SF*aG){Uf}DkIKlObD5vZ=z-TsgcGzb%>D5NO+Pve^sUU$F;pMBQ3v-#wSeO(g4(y|11m{I7e_&bd}L9tz0 z+s*pdvrynpKydGK3e8eO)^8jun|*V9IRJ2zw#SwE)s${BqLyimKk=N;Pb|UVK&DW>mc9TBgVCL6b(z z?Ut8Bp5SSK(T185X>c_GVyUSLF*?G&M(K~BBl|nPOBwe48fiAy0Y0H5jWUW5<^ZpR z2EUe{1|yz^?O@jH@-0G&SAPSb$sIKDuM)`5vmnMmxx)1STs6lreT+X*XRzb8isdo> z^wt<-&8Z;4ox!;qB)fV3A1KzLLX#{w{xj@q`lC+$`}lt(oG>E@8&N2j0- z>p*5zQlXOUPtom41yWeYJzjCnL1*#x6(7A4+8lPJLXt0JZm>&Sp7m5b-POl`a!n(J zKgSFI2ZE*%u6U;tUU7bt6Cc7!_J&ISPi1-&L zUhkz^*ZY4UCjE}OgSw~KrylVIr+K)glnU}Wx<)Sd^0jdcK8c^(Om0S$?)MK^k{Zbu zb}sGs7JLk~vphUQ2NxH#`2mlCIc(e2$`09lCVkUV1kIJw%17r8+mYQQ3*^yPtD_ZS zn%QHBM;8}HUtS%^3efp}t+Aq(7qx6z;!s=jU+uTM(P!v z8u_)N3g}lU|1+T|KC1B9x%}iQ-4y-H1Mui(-TQAAV*fio6y(+^54JtcDu?z(bx03B zAWr!~!2r&93fi#}7rGir-co4kp69PSrwtgIqaLXXP2>VY-Eivow>_2zv=&x+y1BU< zMbn6qGoi253QXTukV1BM&Bp6|GBMIYMN@KI7@NLW{ZzO>3>9%nX-Z0LKUAX@_HG1l zbCv_4M2R^oLk#VZw#}Z-3_D*qo-&E4y|{nb+zJRiqI)*MT88HB`)tZ5_<0c+URjz} z+lhIS1Y<6sYLtw6?Jhql9&s*0@gW6qVskHY*W>s?`AwBfigQ{DxSWuN>W1t zzX{sP&D3khQ81);p11UxGlxAZ2o-fY{UuiTZYzt0G$8dgFp-8CLiDZ}yOSS1yJn8B zYb@>T_VwDdX65I$!;fw@iPZO_f41G{jKt^v`Fy&MGTc2?k%b@oryPtsm^AQD;<~W_ zV#9!R+U7=jPI#Mnt?_DBUEDp|9fIbt6NCB`BFeu!bMg{bzesdp5~XIdX&ohE9sXq; z8jco^19r!6P&?D`-uatoQ$FSOLz&%9N52s_-BNAywYHAi!$=gyx$=G`6*{>Ht?g@S zH#>>cxAOUy=fJz)(}ZR%e1r{i_f%Ejwnj@)j}ZIh50wF=G#%!GA4WH^e5zJ~@yv4Q zhplpKb%)vC{xzY%TDUuBl}=jM>uHGF|DC%;J6QKs6DQD>fZ*vHsbq~>4CiQhDlNTz zE5-eoCAt-xIL0orj?ZPf8Mgeb8A3pCcn=>!;P1=}*`bVb>cKy5SU!EJOh*Zk^bq!X z&!QXQGvOK8P3DjP4i!T06G3V>TKb-6SY>oWHs?*CLWjPDajf6>Ws6}BHfcJ41* zb~01i;ede(ZDpcRvf)D9sXBD&(>uAAceVx3iV~WQSJ%DxPq(FQw&oI5zqu6s0Z-GY z7dcucVwxbBo@v<=iU1kbU_4HSg&FP>;+~1A0=P$WU?f?aX*&V@s~@C$E3| z&>Ey+yh-Uyqs!@(vt*SWQ*VJdi1Vpheuz&I|NO_2B`w{2tsiwq^7VLrG9;8t5^f>1 z5_%*~MAaC9@(^!d?K-O2=9V$BW|mO2>dps)H7I8%I)}B8joLWNh5|#JUW5K1#v(~B z4KBiCzN>}enRpZ@lybh&t?Hn$^VSM8ei}oR6v{%DeTe)63!MzEcROrl!WxWYPasl0;P8s*CqKk)$jD(MM@-fJQpAldZQNSQgIs*_Tc!SH6F^ID7gc)^6T&L6}GOs=1gMz z-R|2y_eY@M!%qxWkS?XAW3tA$n$6z`!5NWf^mE+g|bfP+~2~bwi|0k=6_j$I?hIZs;GWq!oBOj3tY9} zQ``KNM9{`9vG0(shM0Yu=V^cSQ4VdXcKOSGm|*R(&e$Vbd{5xQ<(N3DN{rrdINEIa z;+E8QJI8K{U&@eaO{CNK`-qLw1TM^igWn`b#Y*k4FVLYvyb-PGM%fQI@R{*dm^%B> zqayrz1Z{P!!2nh(G>5Ch%^Qc(V??{6F^GdSX1C@a!k8q7m?2;8HC>9kJ4uFWo})eC z#)&*}xuP&a;3GH{Pq)Hzh1gc5t3z|BRV@(2oJ&GN0Fk`Ei9gRH50(6HtnK%6gLU64 z(pyO}70jg5bWn4H72DM8#0q)9Ti@Od3lxMar$0+;G}N~;*9rEVKW_W>$P6aBb^e0o zm~Ywz5lqbYnhD6`pXGMWNzh~KqsHg7G_`h!HG zFi=wF!PU$H=&P>IL?WYDL1VNd;cKQ7ZhLf**L`nCFz^uhi9w*r-54 zqeB4Ftj4ka9Qnkz4z#wT52lcjNxjtNegZHN6JSwV$zGUr&{FqYly6i?{O5^?WQmm) z@v{}&Nswvt$TEv@32_(7f&%&=y)uPo-s|;b% z^XL2HVIab=lymJM(6!of%vxaVydD79j=q2{@3t__@pDO59&6coepr>v=M91^*3Ge7 z4yfUFkuoXWzDboWI!8u=W zkWnb808dZ88X(3fuXGI*Qw-h4GfsJl9|&Np4OX73Jwn!ga6q}Pc4AEHnL(GVO5%Z_ z<%t`i3W!U%tk!5FYWF<{wrAk?yBQW`;AbI51jxCd_ZxO(0dN(_!HzUxU%=k`_;JW* zG#AC}ioZX?O6l+3fJ=R4^EK1o+T_(Cp`r*7r$GUs4>phivGK&&>A?`XEIEq$Wn=UU z)1H|rEdY){avyZV+0Sem(7UZt^~F8?LCZO4dy>bTkGLg9=~V>bJgjtR`cFKGi zb}EwVTgFJXqxnn1eIi9J3|LL-9SP}A&zjtKS5Zq~z3auzhdKOB{`QgK`nvJM@0dxx z$dfa4%@T#Up?WWZYJ}}!KjztDFWKfn6y&Dzk~EZG!%S=08tl49tf7+)T`fuK^Kt~u z0lw9rO89{d>OJFl&G+Rckjs(m3D*`063_|YPDthrK)3Co;$Z+hEH&QPAFF)0PwII< zRE2))^Bqk`fc2848)2^0={!V}Ea5VyQ?-7jS}WC*`*m8se`XVF!76|L`kqhssp?u< z`YFNZy=Vtm%FC`6RMJ1gC)33s0d1)$DZKC;_f=(mgPP6nG7t*N{JOmgJds!FH7P?% zXn{)190j|8@R^7VKEkW)qTTTXBP+t9IM2UDwnBI05E5Tt5eH4BIl0ir9?wc0&YoW<>P6WLxaau)} zrhWZP!xd!bdrCf+8QXP~l$V(Bq4r1xSvH?YFmrqxU)#u~vQkmfcpz)t{FApa7VuWQ_&tkeK`WesJMdvln`p04u^0e(!i080ifI7mYNyo6UTTx0<+br$Pj{sXlGYS;SwIo~j9sQuQ!@^;SE832aMrdkR# zTh%Rt7uS*4T3257$OdSAJV!$)2)^9AzVwnjIKMONtB#EM*A<9$M}CqWh(7Ia1= z8D^esiuHJ|V6g9}|HWTuR}&hzLvy3FB#EXu&T^e7V#XNnkEmcu^gnHiBek@s)xgyX zHcRSTl<{)KCM747w^)Jj+!wNoYK@ih1I>dauAX}g}?ux$@~ zTa2Jy?n&9*7I(?oB|+d}Z0h!aouukU!eH;k97_cQIaeQxHVxktOGX`_slORtj^#4( z#gPq`Ok3K3A~lVHJkP*aYB}90;zr7OvHb^97Qj!J?VT%P@RX6!#l^mi+<(CbUEVWb zYIU`yZ_$Q2WU~`K!ps6CkAqx`5yPG0e1}SZX-{Q@A4n|?& zbbdV20K-|4m(X9hnRl7>O%wwK&CSH$?$Al%Z9PhXwnlN7UMDiaHCeYRP+(& z(KX%TO8hOp`-8PxS+De2~6SNgZEe({CDgsOykD)JhVelu# zUpu~V;yo6i#|-_I+aY#+3vTNW!x+UyGhg#E>V)Klm|lq|Jc&sn9rj7PR+MaDCP&k<6LFT8SzC=4#eBwTB4^Vf=b%bvUj4fFug8){wToz`L`6mUP?W&Z}4*u z7BGjb7{+fN=sv-12xbS4V(#r{h|Boxp^chbpTNY~tB`3vm1Y4~XSSKj>C zlk+~cuI3oO2Vy1@$3}E&FZnO`=(ItQo6!mVGyNR@bhfcIf;AO%_&TbafVa`;I`GqS zfh?wG&k3OScvWB~LGs|NYKO@D_g!8uoFb5Hsq{VzMqf0V3vmg@@u>jTcjH92E2zdj z+tYw(GpMC_>iPoD{>aGN;k>i|6@t}1nh2epNyobVZ&94}e|t3L!AO_{Y5RXzTK!!= zzs0N|YQyE%0>yKV-~qf#F+3Sldyu@Gm>Kkh_;j4`wlCuX1561E=#oOJSQjixtyHDKrg2MHp9j(LLEUD5z8js z{|p5$s>{avJ7AnM#f7@Cnk|^?r8#yL}}; zweql*Y3R#Kyd`?A^8*UVNei~=;t5K^AQ2s{d_B+3GJ~1oF}Gp!Lo$_X5wzET9Eq-G z%w{Wn_66SqagiTa>vOa%*0T+qQwt+z(~lA#T~sjf0Xl7SX*&%jpA*{ToD=Tuf&NsL zC+X64`SNvX8fo}Fri-Xt~HfEu;dyJ3Yi$M$3^`KUQF|3 zUr47gZH$sv?b{{=8~_`2U=yIf=*7SNvK#-iCltrXDb^4 z4WG_zsLakfoxaG}S9_8++=Xr++Jy>9x?$T*IP+q)G2=IRxO+)Vr|?chP}72u{}>&g z51q}~!+NDUx)((A$(#vgq@FoQ4_P}MT}HjG#_L+X7hkHojHkW2ZWm~jua*vs=QRHH z+Gd>eH`dnHNU+HjkE6(R-mtpcG}&wm+bTt`p`&T$>_M8=ob4fwXDVQVoA6i4lK{6@ z+ip4q^Lot($J()ra=(|^=ogtyrRR3U4sn{?Hhj{b(lPoMI1 z^+dZ!_#^qH%7irh%=qWH720@c7^b13Ry_zz6G+Y@k6D1hfa7 zJ&E|rw!<8M;BO5fI@nl$5_J0VdB#0NFyQhZcxJ};gkWdF;n)SgCeSH@yNZ59?EGh3 zwxmn^7rOkiI6?ym822Fc3lIv95uc^&l!}e{D(%QX&MZjLu2uaI73ZAm&%5RahJ{op zdRWuw++~r7a83KO+MqnC?<@{ARGZmlnBOC1cvSJ77;0EI)3y6By!ZLqdRgL4CzVVZ zzqmZ#u|-;Er?lu5`2=+%U0;M*0rf(`5iy^5(~DX=@Y5Pw+cWSS!a|XF6+lq93bLH7 zJj@kJedmdW`ri4heby0h^y-&D|uP<^RCSb`i=ga@olP~9Zw}td` zb9qAwU4w+NvAXpe5J4v-{PA)vBa+^jBi zPkh>9bIx>vwCv6KGF#Q?9%7&IyJdCABRJdne+5~b(AX8r(f!V%xJiXqnI3bG%YNb^ z26E^qb#LHTgQpgmS+c8xYCqF*z13AjSLaCH=-(6Z2+^Veb7{&pwez4Q4sbv0A~=b+aQP62ckA+nDACGSI!%y z*=kj(nj~;1;c-MPTfMoz1qq;?p${M zG4e)Ld*R$*PKQCO!$s$EB+ z7T$`yewk|}25OODbY{qZo+L*{GT$2g80H~U1pcIjJ{ z=XS{U;>blQ1$tC#LMGiRHcs*N+VWS|SeUe*+5eFoTi^z?bNsVp)G=}yUk{%ue0FEk z0ehE`Xj}Sx{Q$pl)v@z`Iy1PIE20h~?^>u%ltzq;)Luze{ndi&>@w|Ct#5;$E-ioB zHh)I()u`rv`Ffd;>rLlsvI=Ohq;ig3gW~y$o1vNUsMQe z(m#ycFdr8GkU4dXSw-oU`94E?CYMvHE929sKTy}5hpNEXEs5bVVsFd04bxh9EP1lI zW`D%0#*4F6cCN)9%!9YrMW^WGVdaG_u&EmvHw>L0`6+otZXTt)mR62wT}`QsqpRxl z-P){dNZRAYCvN|P<2~ok8S&mgN_$r5Y|T1nom+6U0utyOBY7S0DrB54wv=*>cy0Dc z%RJK7t{HiH9qfVQF*N{R!)NTA9?p`7sd3Uh%5i*Mlt7tBpui-~HEie2@2V+_0XLof z@uXeA=zqZ)UM+0Go@^uPc3fP9 zUw>0Nk7LKBrNvCh$3td_Bg>sD9SZuX@W50;dtbxHY!BVHF6ZAS!St#{-RC|dH9Pz(rUQCR z3-mm?*K)4sS|;e9bYeK}#_Fk7P=^Jh`8%Xk7d(gY>7IeSWzW|)ik)*l0{zcVu5|sR zP1&wB+1y28xV1*4w3RLf@0)@TmAr*D6>neH!B#kXW%ANb>P2gEE&p0lMt_DrKiuR` zTM`pcYuO}4p!JRX`j=atA#kU5kh(=8zBbE9DscM-B8#%l4Qykz72`ZFF*i0{zweI zmpSG?kS<7P{yrj#UbSuRFn(1q+t9uzo9i9W4I25QU%H}~o%UlC1Y@!q2y@b}e9#1l z-bjcVWwo|7wlvm7KmQHO_><)xUoiz>7Kjf3qf7G=U``NcZG(%;2VIHTPsYpdN$qhk zV4e`OX!KrL6%~~G;|qR&hL`6dG$mC0Ma)ha&?&fEChR(`m{~{p=n-Dc%dwkEq?U7) zAv>=yiur38Z@mpT+r!$waW;o5I~BVkgXkpYWV?=aV36a{OU+~lQ zUa(h-A5y{C(`kBNlv&zYa3GSwW%H0c+5@^SMi$xBdu*O$QtCA}6bC|76%hJQSoFqU zIr%}c8H4=hS>%0;&@B$G0R;aEClUm<@BvBol>88@3AgZKUua6aeD zbkX?0-`QwKjgjg2>mCy-l_+*w0Vc8<-eK6M3SfD(FD|9xu1Fs+$E5mxej5SILxOH) zlkQNN{=G(|Ao+hwzRZvDjHdz^+DsFkZO-L;$vlog>VMJ(^K0yDEsC5V;57gCDR%c; zb}CS({hLh2hK^uAv;I2aNZbOnG2axWEpO;p@eGduMezuP99A_wwf~)cDS8>^g1|Ca z*-R)Ps9Rlok2xB5`D>d??1~J8m;5saEK=QN*Cv}oSkZmad5(fMj0HFOc*jYjxrPj9|d@O0EI(yKVlMRL`41y%}!>bdvS8?E%{R1Ug*eUjou1*M(ae4PRUKV zCmhEKpv&$^#}~hh?xjx{;JJXXVy;^9a*^;1JS4rRne)J}m7m@QK^jd8I}i1xFyswJ zCBFo)p~c2NbOOf1f2!2=ncQJQxrp_of0kc4H0u=uBaospA*1|{9IfD*pb$SlVtG8$ z{$-v;PDQdMXWpy7HrLtKEXMMNh_87kunSXTM#1{BNaTO>3$J1E_MD@L0c!nBj=`I10 z?rxDzX-Vns?g1o)0R~ACP`bOMbLf`t?v{}FedmAk-OdHWIWuR^-tSuLS+-S_sWq~< z0SKC7rSqg8GA%lkM07k{$l7vEe17HA=aVIxyJ_q*VqX!GxDBTSf+YT^wI-uGM2b2n zj%aGTa>mUxf{@+6{Z1IAhP=!(ZY!5uYwR;?qQ(w=tWI`s6v}0L6m;Kk9f2$cR$%Jt z2Cc8%CEni0J6Twfe0h3xRgwQOAGcVsZ@Mp|M?PCeSlmw{ES=iW!M>9E2q|jB_@uUa zXrB^!L_nQ><}H-3>fE!aDfFb=roJOV(k{`+MX_#$S;K<92qi9H5=Ee9_=0hF+MM^Q zuPhOrN`2BY23{|J?Lm#@X<$i~!YJWha6O8ZORIndrkj*C2!L_kCfAkIb_8Zw*L6Q{O$gxTxAAcWgJu*g%N` z@`Lxh{U?3Srl1R^ z-zO(iQX*Fu*FN2cD9>&*&Q~}ysPcfQhxN}Y^UU+%x;ja*jcNf%+;JLc)(ubt7lK1A}a1R|*3 zKh=Zx*6{;v_7vDX4__3Pxk;7fG%TS~N$HCZG1^g6Cs*yv7jjSqYz zs4J2a=OxZ0Kb1VDuz6Kpza19Xk7}SR>-4pyb|V!f0&4?9wV>EwpQ6g4ZW%!ooj!Pp zhQ~=^f#W{PJzGPzFR@~tP91`!b);39V@(x>Or4oRl^ncRUlNm> zJ+TnTMQ@?Z4Oh-)Z@Y+~2SR92vh)>^^lwl%1VH?%{FYjyggv?ZdI!q}K!u!IO{)Y4 za+L9e4Jsu?{Re=xyyl}_0@db@w?u3BxCCzW=%mDXBaneHUE3M2?*{D0L3*b+seP10x8G24lgI5JDewwJ zSbdUR+449e%%LYuqtqfdZaZn=mY+kAJmu>P()}Y&3gwh<2NB!Hh_VI4cXYc<K_Q&B?3m`FpN%YfxO}uME!y#`EeBMwf zhz#(D_(Q@ydy(4z40GA}f+K}avu^f*bo;MvM*%$2UQ3uL;FBH`Gw(A(P);QtMSk135K$!_@C;n-9Mu!+*v4n#D0a39(*Ajz} z#A=l%CzM@jrV=tT>h&KW^+MlRRi0JH^9J0vUfvebP2sJD!a#p2a`9zkN>G)d;?{A- zb&*};3y8^a->|ON+L?Wbp;$q()YjR3MM(*ulok3xrj4^V_nb}~ z{EJuy=0-C6isWf#uictYDdF;FGRPMgLF=%Mjg)<5SnwfHZ9!Kt;m1oh<82VOVllXWp^@@rM!y_!@-z-Q5 zFOZl*JA4vIjuyFrVqm;&7PP=dB5{!~RwZ2%hszxuXxKOrQ9Do10lE#sVWJ5JAnzXx z-tZx;e*Jn&W{qIoXW?A556S8jCGktHix9GZv7kj$oE2jOzs54=Y_3neh-&c5HC{IF z4B#5Dj>$7#U+Sm&@uRUOPgCs=#4P0PXxbpm?FReH^`pYDuZr94Wr0p{4a13O5C=%Mx z-teb#M4@qJz6>I z!7ihKq|i8GnM6G*$$vNCUvrz>45nU@ZYwqoAUzxDW+&Q|GcIh9R^aE)*8_epo}gQ{ zeOk+;&~83ZpSgtEeJ;}5tMPMA-@_p>4U{j6w8Qc}+YDHfC{s&n5ZSn;+kc{FjNyZo8+omdh zr8IMR#XxP;{dJ&A4h?U9m)7&|-=FpZ4u*$S)bPkTpI8CSv4%x89O1!R!anyGrpvt& z2E|+%H}<%Xr8)J|bk{$;x3NzXlt8-;G{h!GeNN<80bgXb^^(5tX>bpsV1V}78%ipy z2&8lPxaeXI(WR3;q^pU_*n!uZyNBxyg{# z*#F7Ywj*c}5=ouwF6voHZVEWcnnGkMi!NS5N*=y%zOzi-@{Uxb*YUJQ$A|VZg{jj9 zu{LirUbb%|JQL+!V;6TPQ0~NnHX4{vq~uoD1zgqq?zAXOaW{xA^~Q19tG=-?RJp=Uibxb=88RT zQ6xhsX-f)$t2n8%W6Dhzzt~`4`K|=lli>H>RPTS^$PM+?oAcox5W|+zFl`%%WPg{v z-3qzw#aHFQjfTu6-w$c{lrf4s-iYb+1p5p5FP^Kx1EMqyUUfp)eynY zD@LaJ7xWG}c`8tnXfDsmB82YBz?4Nku1r8(>T9;&wm7d8jk+(VOwGm2NQwA2|IxY8 z?xo|qQ&P(KNu=m-D&rAka0|{Ac;g55d-@nf{GwYp&OJG_S<)^6eWX$S#|r`GXA3_~SX)ZW8L2 zigicOt}XRG_tJ;ole>Le{=?Aj{2vG`)Xh#2!j1zEdF>luFzqDv(YK^%ilDTVT!%5d&O_gl`^uF}L2H7|xw^dv-+Bf`v0@obx}mevQX zzDy9HG9q8Z&k}98N)r);W!9%mef<9Q_vB+;w`9XFBQ}>yT-Er3ERItdRgj7ym8Du0 zRN|^>QV-h*awVBOdlJd}kTypBW9u9vkmG*a{P%e@Q(b#wqYC>$>myNrqng@PAJ+ck zk;e@G7e?L47)jNs`fat!&I_`Ky35v0$q3Kmoccha%Yy6{LZMhz8oJ44x$rO7+gd2; z$l=Z0;w@E5@rvqO@tsv|8)dH$HXeg~V}i=noek3`u)L5e= zQzfXPkw+wfumCWJcu{a-`t~d<8){rB%w-0x=v~R}dMB~U8OtEgg0t=l$e8Ur2i+4m zz6_cDjA(5CQvjn9rn>9e{Z7}sVquLR)*h@&-%Qvi&(vGo@Y+iqc`fKCoeLj&=!3R^ z&ObCAgs>H$T<$ldHmB-Ri%+MTyUX?|m9A?X&IYN1JS7OH#pt|VU-iwC{CbbiI)o(C zMAP@$g?=8zGaoYTUE95R{Hb6vur+`%CNI^Ad@)Z0*6eCy)`kXwWNj7BuV1p9I{HCk zy%MlZZAs?*xocyOEmcWH*X#x^TP<@x6TUDqd5c&V%TKI*THQl>#prIBDB<{*681w< z#Qfc{`w)A$EUPG;@9)hRda=m!Zp1WHC?ZT|)GY#8lK00tkkrZ<9)V;uSulWsV4d^9 z5o7i%3kc^MFsvsilS9CiK6v-XOG!jvj| zJ-t)~_CM^q?w6&@bP9yXS!_z9HN_7a+)KiIa0MTs#XZ03)`ZdE^8#*s#)3XeWxS_^ zH&AhbUc_Bv&!9c^hbF~0U$VDw>qUxapYm`N#jyB60j4oeZk*u~BX*Zag%OXsP-h7Qq#lD|_LtG9)&c3!^qc`T)U zaVoG*?5k0Hvzf{E)A1!IdJigg^dG2;oxri4IRngH9!IaKN4lT8UjZ_=HKG0!s2D(< zhWg8R1B>9m7@ctfB=+`ch}o7KFPWetUEkf74p)ms1m^E(NG; zoqb~x;5^^31&K5#*C}HYJD#AV!gpMke*b~mzlM11Zfq~r=I}h4qOy(Kr0jd*EfD zUm?<1bt^sJZ#8=Q03AGGMVHWSTPo-8^U_d*gCE&B59nqu)4|-6l;=Qj3yWIJw54t4&K~IvF&l^Gx zF$|*)&HKAw_fGH|wcvjiIs1kN#Bu3!Hk%@YiH~kGeWK6uF4?rC7&C=%Cf>YX_HGjP zI+CXF(T!>GBdh=Qn4@|)*$qncHEPpxba{j9`r(ZrjRay`+u~lDGS0f-;agh*?tBL? zCOQY7I?kt&;$xhthk4C4UW0r$*y~@EmKG?)lIH~dddy-7<&ATg|IAYRd3=S_*4Q!& zgVU}Y?V#&OlQ4Z!OUIpz;wGgIFLUl)^*Zlh{7d_lSDF{f+|GXRkKV zd@A?3Pn)$3tGq00D1NnmI%^@m9&r)kA{TbW*P@am|EgPBbO5v0-fF;Bt?x8N27f$( zQi~o|X`O*A??C#?y~gryxCf%h{~&^hdJn&NccJQ{>IMCLD8CG*v= zUnaid)=q7oATFJUy$XGgPNL`yJ3$LS&;R*FAv50Gy$zIj=M4&aS0)pgy8-o z5$d0q8Ab6qK4UGeU5}Siq(Xt0H~pZuB2i-?RjhOLl_hFr{|ZF21BHRpA~@-5;^|YZ3_+|Nj0yBKJPORNm)Ri{s0Y$8Ph)PrzG7 zrD9C{LgwAo7KFN8O%&L`^Z)5! zbI8nhaC z6ltkdgc42PKU|A?~i(~CSI=5{KDSDE3( zN~Ex!y<-^w^iI}e{^)1w0nfMOzRHrd7eEX`ns>-SRVhrNag)e1BMEehD*#p_No{yd4+a5)`O@4kelTuviGyY346f+X_4 z3JR)@+>4?V96cZQFuxms&4&I#F+@a`?JM!E4u?E4zyj52jd$9E&(O^YV}uojhsPyY zNZ~K86=aRL*3e;e)e6#v&U*ZhYAmDP7ODC{-8t;tLJi(NokuoLfCk!L0Z$l%+ShCd zkcys&6hjBz#kciCCoI4hT{D!-% zr0>F&Mv+jq(1~w)pfIUH`Z%{(qv*hs1FwW-3WVP1-Q?jKMbj(;Dg0KPnSAq+a`40- z)~3sfNmST)8iZ}~M!jhz;mxJwfD7sUfV5!rUq5H=AH_sOdi2g9WTEA&ZE>NBJXET< z0w(qerkaMt6^0?atC7&Qk|myiEYDJgzp56!ofk3b+jCQ|*K)WSBJz^n7lJ`@2rB90 zd(CFTZ~7CDC2!*yFv`e2V`RHsQ(AuZ$X4Z&XnW3jK?htmL{bi!Rp11-0Ypto|{i`{=uX-*f>lezMG%sjRH21zuf}OY>bjuD5 z-1?q7nWC*J%Zr&}9NbTVxb~U+Htdv6dpZVgu~Sb85u9FM+MWm2-w=}N&-@rWI$ina zO$DmVLk7kg`}WJ1<2(uo1JK{0CnCGtgP|?VYx2409(qhgO2Ug2al`l z{i|~+qV3kJbVBQus9nb^Y>?nMj=sb+>CPmI{l^4)5a3~Vjd53zXa5VJsgEN!HoV4d z!M(v!*eQJAp8}o5&#~h8TbpacWSO>GE3UQF<&xt7yk)e5V>Ul-xxMc@S$NQyyXek! zPT(ZOD(`;!#5T>}x`OYnc10nQw36o_R^s}M$=esisdfX7GPD1eKgK^|PP>vOuHGUE zKovBF`4-r6gQ#72Hh9a+SOP1;ywhjh&AZ5~S(GVJyT(A0vePu5yd%9mBT`ZUM#eN6 zDJ{)2=5zKt9e3rNw=Tx@I%3Uyq=hQ1Stnff0sy%sh5 z>#-oGES@8G0EE1X)AlP{;jd(rJ?Jn$1JB$hTaodD=ewy=1U}kIF4yh|et#`b8&(n& zBviIeT#hHQJi*o^8^ihTe6j9yIZgw@?Z#_F#^@80MQ;C+cDjnHi_ z#vM;!G?#QY4fhZrH!`Ty5i5)sh?j?nBcOD^9K--dW!<0&j#LOTF-W6uy zjT8I{gvQWU|1_Qftt?~|PJ@(`=1|ceBw9@~8+b@P@+fsq`v>9@^sGgHA)q7$NfO^a_S6A0t4bCbxRJQpZJAf6XZ&wN#5J&j0D2kF`gD#`GYCiu^SKzI zGr}|#APJ-n|2X7RDT<`7T3%Kx4lv3M&@79YDxp(;u{?sLR;c~BNPqsn3|Ha(x>0-^ z8F3QTa8Rj}`IaKP_SKtL1;$Z7okbkr<2MQ~`x{P( z;RP*Cwyy7i0ujkXBV!1iI_oITufehy9h%(AZl(x_h^ck-;## zHKE4r`w|7Gj&7d%=@5*t73@{8m}ctP z13LM%yyixjnuw(h4G`hTriAnEq2pCASIYx1{3^ZLmf0VC&wM=c*uTdg{TPVp;Xsy^ z(*i58?EQlk$}<4sK*w>WRBSt25$J?00Ds{|c<4XS7u}U#xXJWX9@hY2ID}ZqRINHC zRD+nucOckw_fU$=pd4?(c=Z*bWNMNMX59W*_bH&H#yVsW{ou;8`aLXRbR{JO6#FvK z*hiYNrf4@j$`5m=qF`yDel4r-sE@q7CIzSH=s%6h2~)QhBYzp9?(@n;jkjXjL9s{< zeeuo3)=yP@zbsdL!J!P!qoUH@O(G+7B|quRr;OENnz* zj{!v-Qq-xzJidkVmfk}}awYX3z7gX-4k7kBCR%qpci8^=8vg8wn0z5;G+(s2vT`mQ zO0W7e7P||}3p>f^dTL=wz;bEgi{sy+Idyy%YHvPXuvxF4&7A zX!Y548tbd=2w95JUpsDqz##6^bNN2bFHfiUt$B#ePEuog;_9JW)K)chWJri%Wm#gEP!1V0rIha-S+E4Uds|T z=*{8fTJYYcuB_Re64vW?NS-rhjqgrgKQOD9N1i3cCl-(R;WXO`UMaFzeR~L#rmZW z%Dv1x;Du*#pn}1KRb*+U7_8c+G}crWv45G1<1@yZh$FoZX_QO>$<5TpAt73TFBAr- z@T~d4-+Lz$R7W)xDS&MIpyzVdy)SlUi)1X#ps2ZJw52fhZ3Aa*MFXja(aR7Tp(iwS z;5G;4b2_CKj)@~_GHc$4``zSX_#n+eycA|rRzt)8!EKR9tG+oJN4M-&Lx3JS<G7qdwnB2&N6w zPf;1|unEfh-|YV-GcDTeJCpFfSb{6CXGl(ye;G9u8p-y4w^L^`g9H`F8Gd0kv<>7B zpjSq!PMRG!>J-_blq?pH;sZO6^y7-n`|I?XuaGV*|AK3gO8Q82eFhp1{N~y_HCn?c zoLWcUwLRs94go9P`N@OQiKV%p#EQ=tNF#gkr*4)7hP&UhEXek-?xD|+>gU2vBqfa_ zpmS7}*pirgI1uu<$d0dP3{h3fn*hDm!6d#R8nvASN2yu`)$ry0YZR519|3~vGEWZk zG(MRsw$B*%y$o(oOr6P&sx(gwGpCAVzl@$cG`RE<*H@VmOd9&t?{he(sB|QwuAkLM ze?W!>Kcx+Eyw%KhtTZfn{OQYd-0wpfkwdOTKl=@ZhYKcwbh{r0Ky%%e%0vrl5_uA` zHXBb-ZjC&EoJ+yI3W4LcJ66y8Bs?tK5|4QxDfB%|v`jQ+Euj2M%x(Sjjt%K}H-KuR z`RKGUdMDwK^-X`90SC>`0@x=KvRl2DOn-XKeLM%nHrH$WfOFnNs>5(9(dG$s8W~9v z{5=*T?!l~x&ZS1fkpg)Ra34yMid4n%|8UD_V1K{m<+Ze#zL6kv^bR>|LKvY0x-+Ke z5t;voQ-<1~5+Ap)?mwSI_XRv;i9&z?+Cvu40|S6`9i|~>kc>&=yw!vDGYk#KcPG0z zNF-cQG(JzVKZMLtOzfZQ#dEC5;q_9+86&a)SxD?%NE#fdO*FZ$+G6J% zFd+U`;`h3vsipt;P2){6fX_{GMN@b@zG~Xk1cdl;hh7>q_J;3rf2#N&r7^IgEgVHR zZiXJD?wF|J1$z3^rs}J3ObdR*&Eq&$S_Jq#!C!^68Hq&db`PwT;tCzB$ib33hCjIk zQU&=gt(@FpKki;zCs`p<@v6s_u)^=bOHgrg^{)nB%K6r#m#7ME6jbQ;V(6OV(@==r zc`$ZtXpwW;Gba|8%^%KN_NoA&46eh!JlhVmsls|xtE6rCCY4n(jQ}AtUZJ~3+vUAZ zKYt77V8hQNf2)E%L7CCmd7k&0I!i#12Ll%sy5B_D=U6wy(qAy{bjR9x#<{^G^HyzR zGrG%+hK9pc-2e$ew}s8B+7Q#Aywf(5{f6Pn%B9|Ls2*tq4+R9|IIW9{m+kec%6qNo z$48A6MZamtlYw3b0R}1N+1+q=8IdkZc+aA1U$$Q`E|83@dA?=~dn@sIC?Jv{X=Qun zA{Qrheju}P%@t$_)E+q1cG0T;hAYsbxD3yqfR>SD{?Y+kaML0UR$b+GGnMaVmr5^WZ+e3VHlKikC{z%Duv|cuSTYfQE7(YJ@Iy` z5~$6y|F!yn=DTUZhL^J?WqNM$)9OL-Fw<5(-*)Xy-5e+T)*tFuXK!Pc{fCJN-Cz{E zqyXvfxPrd|Y2eIrhN&rY^B3OmDYD2ALCzX0OL!u8m>(I!9?ZKUCVD9`wM#-G!jTqe zLg(o0NG!C^U3E6cb08R)yN}A1zVp-&SG;aLzhz%~r|@7G%>GIL`1L2-V9FVGzWx?w zuC_Q6Begj1Z>fHuVJzet9TKsuzZHZ5wZg6RheA&ln?Jmd)n>(%^W-h7SJc_o%^Kqk zc3 zS*(q?lZNHrgf?y82h1w58=tQJ2ZEcHxWSi0IIsD=aHC9c>f0swIx_I5KM16TEJl9% z;PIa+_eFN z4{=3xiRxEGAXRyQ;74PJ(LI}v&YmDmbxi3}bq5zh;@iYEgbzi*@v8DWty>EeX&ZBh z5JgSa%{b3(=`G)_+B~bl%ZNz(pZL_0fD(PXf6vFM@lL-omo12{kzxq2$h6&YmDFEX z9q>z^*&GGq+%I0VM8!5RYw6a{5XBLgL^qIbMPDI!PCX}#U_sb;SuCuaSLp9ufjWwe zse_P)xpJrJW5f%&;W5c7fnrg|-z7P8E)^lInW&vG-ld0i> zW3w#roEM>3n0JIWjDzc0cx#POf~L&_x`+2ah{Z^(W zjNlUICMlK~zjH!&{**iKT~t;%Un;Vq6YcoMKCP5-2IGo-o^IB+2t;k2^aR|}6#=F- zwfY1TR=PH*uj3+?N2nJt=aJHcjfy5-xGvc{DuU}E-rCV0Fe%fz87Oh3yU>c0zdZ(i z^`P2QJ6I*PsU+NCW@@5B1qBSGUCIp2xiq}1Bs)2Kqv-VW%Y!rAZI6zgRNO5q7Ia4% zOmRPQo6u5oq1PMW_qI8*&tB55EwR_ixvX102TlA0VPCqxcZ)KoV?O|I<@>^@WpUO{ z@q)gZyW;CSJkn21+fjST&^Yv*|J&2;J54=a^6ozVYw%KE4eki4hMS4U=#Lwv^_Zn< zmZds}&54uC%chOA7*AE1-VT9;{x#H@^^-dT_SMp| zGs-@N2NfZFAY7mp&yrf7c@>g-q?0A`W<5%B`K^zj)F!p^a(7IK;gr*|)ygVW{oe*mV_ru;xaNI1DkVh8nfy__Ub z!MB)+D1I%0P|T6H+V8x~`?bGZZ9BD4eBF+{Wxj5zTyt0xTfC|=Wls>Aad{GGN<4~W z{r)yqHpMJf(+sDGHcVI(SC|xGVT{I@KyY;GQ>IwqH+ht*H%;=$cTK}3{CH;Rtjs;c zkhKH%(lIVBEd{t8IV%~_DkXiH6`A2= zbS_pMZj}MZc|I3X zzN@gt12li+Vh6Bm2Ka5a#~%3>7?)zXSAT{$?iV$Hf~Ynp63k!8=0vk)+L=)hZ!z_D zO#QiD`8Qo{wAZi>6Uiza`Xx&Q=glAt%>cW+w+r3ATe|&OIc%ztsT}3#K~MZI6O_5E z@Y|@p2k-ThoO*FCc7An)+^y@QoU3RsA(-hlzT8lAGDEqz`-6}i6RHs<-d{38u)DHg zccz`76k#35cnC7kB$hH(P-aFn=>Ttp^>Sr*O%`Jq2OB|~k z*A0y~2Lix|Bkw{oa$O^)@+l|)yP(GUL$uV)Y9vj6jX;FD`=Vq|VRBGpl0?mgz@q`u zL|0R$T`Q-GJN9IAKoi+oJ5{0|~>^k`4d!FJ7kDCK4%?hTk0qeSMA7+@D<) z%G7qUmgxulAQ!plL;NBA2@N8Qo+d_F)%xanV?pbQljY-JwdtTLhmzuM-kHuq@%iIa< zBdj?p$gK~WJ_r2Hh13niiFa@2d*EV|xA5H$W((N@XY`UV=IGtM3s`X)s~vkT{Q2?? zEsMLbm=hq^4L~L0?|m*syR%U~(tK?bE*^3Xw?Mf%BbK8ll};=be-IZgKa$g2T$s*+ zuNw7SzEl+is(032RD}ofdgROcu?$hY6oKPsL2BUW&p!uv6pJtm&P8LrU1at{NbV^# zFO0VrO+JkBHj9MmQAP7xQu>cI?FR1rogmGHs1npxOyjOL4XZl>?zHNmU4Vfrw4}y6 ze=J43QL9mqzfGmS3bf3H{<;_ZI7_BU;iq3sK_8D*+bSRsAv?5RRVfLm7)a|I9eGY% zPUd^t3R%ww`_H2bOX@62Sr(Pr7C#F-2mUm%OZIZ&NGF_P-lj+|F@Bn4b%V?BdQypa zjWb8@_4;DU&oNBq%eXlwMLv4MGhPqPf7YgwTp|Qhw`}F08zAVWowhQ~s26&A7C7V3 zIJRj6ES8|WeCMRL?g&hKH&v{Aict$s8)VXr9Zo91Ge5Mcb72$9RynQU%+M^VTFRn+ z>l-TBkrYWfxB+hD#~{5jc8g654%a;jinw^(XgW!9`=wlQ|Gj_YIhVfIz+_F?iH*b8 ze5&?JuUK|P{5aOjfjzAtcSvK*{p?eMV#^aJ>}*dBp$ny$7B-v7`VCpj+Sh?9!9Lj&<}W6t(5+k zaR6edFL6*}+Ld1I71_`Yu&MS5riWimvlHvuG)AY&9v~AW-%mnB#v`JKECCSUeC{hO z(GDvzvaar26ia64Mwl(q`#1tx3!&UsJkl(k{!j`!>~7%f38vE&*@CjY$%lPq2JwOv zPJqmbPMcuivK+^%mA6b2NYq^vHVYbT2*EU|Qw%1RnB+p^hW&!Fm75SXGrt)N7IzI)mek6u3=U@-WJk+k zz!m{OFJxc?m90gnTL_Tj%s=feSj4Kvx~icM0jAM>5@#yd(^IQ@2{q7TB5>=|@=cw4 zWmjHOI`p3gva3=Z$nAeuWh~U4XtPWR=KEY8!;_Ha)|HFBa29OAtOd{Y+JuzjOM5qFVEWHIdxBjJNZVW3yY1$()DSecIYL9snXs3$yO0_a#b+%);=P`EI{ zK01kDxaK9Ydo4hSdY~ZDoIeTdWGHr;+NUbc*aKVB&D(S{bafawW+ou?GtGsN(bTJ2 z09j*eXSY-CNR8a;LC;AW9y$pKkUs;(E9`?MS{+7;^FnhQo1jCiUvyu+;=IOdt{HOF zT)<_!j4YsvYz?spr;D^s@ZTtN0$INH*Fw%t)_GqVKp=EJREqGt zqOc}a*a;`sX>%49*O4dQ4zyN$ zkD=t+;m*ZYv_O61Wv(cl|lW*q)8mN3J?;5VvHRte|R`q6-49QH4k7dqdyQeCbpad zaB-1#f{bfY_3P-JpqIcs?hUKHE${Qv) z?y%c&_P4HURi7=VmlEHSB9rf9uOdEGFiO=7!2+drQ*Emo*)krQHeYI8jOc;x&6&%6Ke0Lgn5 zDWriS04gLSMVJtCR+O0b*<9TGg#g&BApn#i?rJ}&5pFNg6Jlw6yae2imZOYuA~58* zA7srwb~4Q>y$8|i(vZK(#ZIfAd`$_~Gd-bk*~6AZpG0t2$ZpSkdo z6RPH@AkPa>!)YX zM`R(bQurO-YoLt^Y8{>>^?64fc%RV#SNS)Cno&N7^jp#ulowXC1QqrTY;d(f%{%hW z0;qf7cx2q1Qk$wKpv7S+IQcfZZGt(B^0l9FZwLA@V0_2QWLhL*Nd0iFC=|_YO?jEk zJ>g;iI^+{~IN@P$2ZrAAOvx}^z^|Y_{j0-QrwAs*K<|0pXPa;1K}nO=D3y!j@AOuG zJ0RwaJx+9i9>H?Tf{Q{t5L^!)F&QD8n=xEW5IOAp(`J^HP{;!)Spy~}LmdPjzSBz0 zI6v>2k)h%|lC9HF0Y}Ene{Tg#!gJEZxDc*DTlH5ejBAbNuP0OLZd@MM3@TlrGeV@} zKv5CS!wbcI<;xnRX=aT~zcwQAL7@vrVdz9;FQo^;yv2z+v@t{BTQF)zH%#6Sn*J;+Q-^bxW+0XNOzgaBl{4N4GVE$rzqMbV|8=lFqAaD+&9oF7= zo*zX1Ic|$wI9YzNF~zxws!MR^UPLDYFB=&{$62Zo=H(<7jI@ zNRSQ7?@$Z9 zsgf_MfMR$CgDY!OGD^{4jft`04&P*hP&)?kB?2KtMk_^Dc=9lh=*KVaf zwvq%YTnG&{?^IfSZ{H+*Qz$3x@g10#Lr%#2>P_{SEmIb#(f-Gp*N&N|kE~Cb9FV{8j$qfYMd zl)HD;1hKpzdt`@6AKxyuDd~2$xt45=$;}qTHDLz*WZ+e%&M8)8oBLcIh4OlMs0%sE zMtC8oPtZxd6td=pIs z$ksMZkJ*iqOO~)`RQGCE^$1b@nL7#i{HOHI+g5#C2{~!6h_qo)@B-k>cl%3P$h%^^ zqAGUvIcTN__IGil$6j7}tocfA7S z1L^g4agvOFqAQhWYy%^+LCd45pmZsnQAO{2m!NO|a9Gu`|9p~~&Po|+7^^zlA3}D> z7T^JXMF2~xyPL1cva!<(MO$=@Q<OE}Axv!mg5m`cGlvSRnhe~%?>X|;lv3=v zj$GNXd=2?{o~40CnHg96fljNQGP!B@MH`eV67=Vhk30~UmlC-~5g|Sy4Q#~iiUPU+ zG%#b=Q;_dqkC9V#leG9eMng*Yz!fFF#J#;Qvh8z4*ngH&A3x~!V#JD^Bt^3YT{Z#s zdFl$E%Sb>-=#yOTK$*N*<&~Q$$8P*ysEDM9T4VdgjxQ9d=)UQVTQ$|?; zCac^~iF?FAq!2op8Lv<(yzB zrAorNHKX0Y%igY$gyv%YRx5HVl<|;=a(4=zvUf636ij=irt|?B=Q$*b$`(1cW+r{G z3}0+U7zNIwrXF$uG)C4&DPOGRNYqbN+zh=LkeKe!k5BhV|F?mMkTg{SwQt<#W=;pW z_VWpvd{&^$VOjl|e{Q{Ulv_Cce zb}pUQQ)oP6pP^U#ak?`aP8Y|4k(5me6Yiq=pLU38dN4KQw~1|XttVns9el1H>3b?W z3g4eFY$56NBi}#$X8ze*Y>(UEi=tS`x|hFu)?`@YWtK+wK#McjI z%3ZZoab)i4*v&W@#U*-6tgP!74`~>|W2;MuOkgItSwHDiI2{PFz^MqNYBW`=m36H7 z4+J^OdVp;No#}W?CcW=2TYc{JElf%KdnFM#btYzZ+1p319vjSMs_L~FUa~CB;4U0V zKpB<5!nlMI(qnZ%fuWyy@KHlICW`m_T|&VN-(fJ#g?Q?BqPCBiek$22@ZmnW;;sne zax`?uMBfRa;ygk2;WAXJ1TS#c^^Wo|34C8H-%IY~`WN5*=x{qeelPG>s( zL3`%e);gYkua?s3dM)UIr`P<5Wd1HO-)Ei#r-XKS|LqErFc}Kq)8XZQfC(WBcY|z> z`~bAB99BgZNS?lW;^8hAr=z!@!1lVg{8PUZV}E(91&IdhK%cuHD;5_3Hv5OVL37U> z0uy6)_FTui_mG?AYyPA~%yR2{bM*(47C8$9#n{L;CbR$Ex#lfT!T8%W>F;{Dz2i2$fxJ;8!go(cGYa?|yvl0B>*0qk>Wm7kjDyozV*y{-RP$fmxF?(a_g4Slq* zfO;Hh{CsEp_I%Z`b^WTQ+u#?xb-C_;R$S2>SO{M5oBl23vUb7l62HQG#bGvLK|Sig z(WGsc99rZMu~N!%3k=@4991SKA0b1%$?Gxv;}i0Tlm$&)%yg@TW|Wge0paZ|Ee4>8 zA`^={=A56E8Sg$sVlph9HR<8+A+VU?mEKeP=DtkV{cg-eO&-=+kD-1qNT_|*zY z2NmLV^ZI=5aQ!YY4>^&`e@6o%>j9(L2|f8`7rs zKi(z={pbN@q?N>wG*X)1Nxge&9@RLmK(Z*ad76#i&boD~f7DwF3p0m3wvnf+)}j-G z8!mo;obg@WSE{-G^Hg?RhS)zEnNun9R6YOIe7Pebo75@kkyne`UB}s6+$)o)kDLSs zM$fxfiemLl;W;{Dz%bO^P*hxjSei29oMsTH00#thym9)-)X13^U;>Cm@q=+o z$W{7|5G;N2NgXtaqD(<=R+9s4QY#9deMf8bbvXC`0;PzSzgb%Nzr(ZX@4PSO4a?eAhi0k8V zB=P!p?fv6EDpV!mXDJ>&>641rBuh~P#TZPg(@1JbkaP?DVL^{0z$&F-G4QFw>;dqd zTz`@gvdZLlG3S*cBvEw$l*i`G6;F)#Z%^7g=1}(D5~IEXFH+rovJu2%Ap)5HXu!{g z3OGE-h90aKoDo%k9ji>?lIk`|sB?1PmdUEy^3_I_(d(|4^!%;#na2KOyC=@lRdg}M z+{5p?=F`T@eyO$p;5t5e+&2q6cAqM8jzo)EaH=lWyV4rx$%lnSDlDh#Jn#K_IO5ERVlwh$xi5_Vo*bNkc^->C* zCtQ+62B4k&i~ill+csSo9||0p_OIw8sLHhrDa#02VqRz=)GHdO%!*-uRBX`Xgb|t& z9pAvJ1)@??dXRIUEhrw-=PqjCyWm*zSzRUxmfjEg1UvKPu37LN@O`#Lwx8+On`

  • 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 z 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

    c0cdogg= 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

    1yrtM$4p~AE0azALX+H; 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 literal 0 HcmV?d00001 diff --git a/Web/src/assets/image/login-bg-03.jpg b/Web/src/assets/image/login-bg-03.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b0cdfe86a527b8533ba31e6dc19bb032e8df54d3 GIT binary patch literal 146405 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

    k*zyZ=8cFMISjuD~78s%f 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 MfEw%8Xxm2oA6GmIivR!s literal 0 HcmV?d00001 diff --git a/Web/src/assets/image/logo.png b/Web/src/assets/image/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8625b51bf1193daf43a3ef0e1c03aed6818c102b GIT binary patch literal 13518 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 IM6N<$g8nkI!~g&Q literal 0 HcmV?d00001 diff --git a/Web/src/assets/style/dark/extend.less b/Web/src/assets/style/dark/extend.less new file mode 100644 index 0000000..7f3c2c9 --- /dev/null +++ b/Web/src/assets/style/dark/extend.less @@ -0,0 +1,11 @@ +@import '~antd/dist/antd.dark.less'; +@padding-xxs: 4px; +@padding-xl: 32px; +body { + line-height: 1.42857143; +} +#root { + transition: @animation-duration-slow opacity; + + opacity: 1 !important; +} diff --git a/Web/src/assets/style/dark/index.less b/Web/src/assets/style/dark/index.less new file mode 100644 index 0000000..8697d9b --- /dev/null +++ b/Web/src/assets/style/dark/index.less @@ -0,0 +1,35 @@ +@import './extend.less'; +@import './lib/visibility.less'; +@import './lib/container.less'; +@import './lib/align.less'; +@import './lib/font-size.less'; +@import './lib/text-color.less'; +@import './lib/margin.less'; +@import './lib/width-height.less'; +@import './lib/scrollbar.less'; +@import './main.less'; +@import './lib/button.less'; +@import './lib/card.less'; +@import './lib/table.less'; +@import './lib/list.less'; +@import './lib/form.less'; +@import './lib/form-page.less'; +@import './lib/page.less'; +@import './lib/description.less'; +@import './lib/input.less'; +@import './lib/select.less'; +@import './lib/checkbox.less'; +@import './lib/radio.less'; +@import './lib/cascader.less'; +@import './lib/upload.less'; +@import './lib/dropdown.less'; +@import './lib/modal.less'; +@import './lib/tree-layout.less'; +@import './lib/authority-view.less'; +@import './lib/icon-selector.less'; +@import './lib/color-selector.less'; +@import './lib/anchor.less'; +@import './lib/disabled.less'; +@import './theme/primary.less'; +@import './public.less'; +@import './pages/index.less'; diff --git a/Web/src/assets/style/dark/lib/align.less b/Web/src/assets/style/dark/lib/align.less new file mode 100644 index 0000000..50f0bda --- /dev/null +++ b/Web/src/assets/style/dark/lib/align.less @@ -0,0 +1,9 @@ +.text-left { + text-align: left !important; +} +.text-center { + text-align: center !important; +} +.text-right { + text-align: right !important; +} diff --git a/Web/src/assets/style/dark/lib/anchor.less b/Web/src/assets/style/dark/lib/anchor.less new file mode 100644 index 0000000..e37e90f --- /dev/null +++ b/Web/src/assets/style/dark/lib/anchor.less @@ -0,0 +1,11 @@ +@import (reference) '../extend.less'; +.ant-anchor-ink-ball { + width: 2px; + height: 28px; + + transform: translate(-50%, -10px); + + border: 0; + border-radius: 0; + background-color: @primary-color; +} diff --git a/Web/src/assets/style/dark/lib/authority-view.less b/Web/src/assets/style/dark/lib/authority-view.less new file mode 100644 index 0000000..94c2f71 --- /dev/null +++ b/Web/src/assets/style/dark/lib/authority-view.less @@ -0,0 +1,53 @@ +@import (reference) '../extend.less'; +.yo-authority-view { + &--container { + >.ant-descriptions-view { + border: 0; + } + } + .ant-descriptions-item-label { + width: 150px; + } + .ant-descriptions { + clear: both; + + margin-bottom: @padding-sm; + .ant-descriptions-view { + overflow: visible; + } + &:last-child { + margin-bottom: 0; + } + } + .ant-descriptions-item-content { + padding: @padding-sm @padding-md; + .yo-authority-view--checkbox { + display: inline-block; + + width: 150px; + margin: @padding-xxs 0; + .ant-checkbox-wrapper { + margin: 0; + } + } + } + .ant-card-grid { + width: 25%; + margin-bottom: @padding-sm; + padding: @padding-xs; + + cursor: pointer; + } + .ant-card { + margin-bottom: 0; + + background-color: transparent; + &-body { + margin: -1px 0 0 -1px; + padding: 0; + } + .ant-card-grid { + margin-bottom: 0; + } + } +} diff --git a/Web/src/assets/style/dark/lib/button.less b/Web/src/assets/style/dark/lib/button.less new file mode 100644 index 0000000..c14e462 --- /dev/null +++ b/Web/src/assets/style/dark/lib/button.less @@ -0,0 +1,4 @@ +@import (reference) '../extend.less'; +.ant-btn { + box-shadow: none; +} diff --git a/Web/src/assets/style/dark/lib/card.less b/Web/src/assets/style/dark/lib/card.less new file mode 100644 index 0000000..6fdc1e2 --- /dev/null +++ b/Web/src/assets/style/dark/lib/card.less @@ -0,0 +1,14 @@ +@import (reference) '../extend.less'; +.ant-card { + margin-bottom: @padding-md; +} +.ant-card-grid-hoverable { + &:hover { + box-shadow: 1px 0 0 0 #303030, + 0 1px 0 0 #303030, + 1px 1px 0 0 #303030, + 1px 0 0 0 #303030 inset, + 0 1px 0 0 #303030 inset, + @card-shadow; + } +} diff --git a/Web/src/assets/style/dark/lib/cascader.less b/Web/src/assets/style/dark/lib/cascader.less new file mode 100644 index 0000000..88e0aee --- /dev/null +++ b/Web/src/assets/style/dark/lib/cascader.less @@ -0,0 +1,6 @@ +@import (reference) '../extend.less'; +.ant-cascader-picker-arrow { + svg { + transform: scaleY(.75); + } +} diff --git a/Web/src/assets/style/dark/lib/checkbox.less b/Web/src/assets/style/dark/lib/checkbox.less new file mode 100644 index 0000000..be80e3e --- /dev/null +++ b/Web/src/assets/style/dark/lib/checkbox.less @@ -0,0 +1,10 @@ +@import (reference) '../extend.less'; +.ant-checkbox-wrapper { + margin-right: @padding-xs; + &:last-child { + margin-right: 0; + } + +.ant-checkbox-wrapper { + margin-left: 0; + } +} diff --git a/Web/src/assets/style/dark/lib/color-selector.less b/Web/src/assets/style/dark/lib/color-selector.less new file mode 100644 index 0000000..e7da66e --- /dev/null +++ b/Web/src/assets/style/dark/lib/color-selector.less @@ -0,0 +1,18 @@ +@import (reference) '../extend.less'; +.ant-select-dropdown { + .chrome-picker { + width: auto !important; + margin: -@padding-xxs 0; + + border-radius: 0 !important; + background: transparent !important; + box-shadow: none !important; + } +} +.color-selector--palette { + width: 32px; + height: 32px; + + border-radius: @border-radius-base; + box-shadow: inset 0 0 0 @border-width-base @border-color-base, inset 0 0 0 3px @black; +} diff --git a/Web/src/assets/style/dark/lib/container.less b/Web/src/assets/style/dark/lib/container.less new file mode 100644 index 0000000..fba352e --- /dev/null +++ b/Web/src/assets/style/dark/lib/container.less @@ -0,0 +1,43 @@ +@import (reference) '../extend.less'; +@container-width: 1400px; +.container-base { + margin: 0 auto; + padding: 0 @padding-md; +} +.container { + width: @container-width; + +.container-base(); +} +@media (max-width: 1400px) { + .container { + width: auto; + } +} +.container-md { + width: @container-width - 200px; + +.container-base(); +} +.container-sm { + width: @container-width - 400px; + +.container-base(); +} +.container-xs { + width: @container-width - 600px; + +.container-base(); +} +.container-xxs { + width: @container-width - 700px; + +.container-base(); +} +.container-fluid { + .container-base(); +} +.container-flex { + display: flex; + justify-content: space-between; +} diff --git a/Web/src/assets/style/dark/lib/description.less b/Web/src/assets/style/dark/lib/description.less new file mode 100644 index 0000000..cfe090a --- /dev/null +++ b/Web/src/assets/style/dark/lib/description.less @@ -0,0 +1,10 @@ +@import (reference) '../extend.less'; +.ant-descriptions-bordered { + .ant-descriptions-view { + >table { + border-collapse: collapse; + + background-color: @component-background; + } + } +} diff --git a/Web/src/assets/style/dark/lib/disabled.less b/Web/src/assets/style/dark/lib/disabled.less new file mode 100644 index 0000000..c975e17 --- /dev/null +++ b/Web/src/assets/style/dark/lib/disabled.less @@ -0,0 +1,59 @@ +@import (reference) '../extend.less'; +.ant-btn-primary-disabled, +.ant-btn-primary.disabled, +.ant-btn-primary[disabled], +.ant-btn-primary-disabled:hover, +.ant-btn-primary.disabled:hover, +.ant-btn-primary[disabled]:hover, +.ant-btn-primary-disabled:focus, +.ant-btn-primary.disabled:focus, +.ant-btn-primary[disabled]:focus, +.ant-btn-primary-disabled:active, +.ant-btn-primary.disabled:active, +.ant-btn-primary[disabled]:active, +.ant-btn-primary-disabled.active, +.ant-btn-primary.disabled.active, +.ant-btn-primary[disabled].active { + opacity: .5; + color: @btn-primary-color; + border-color: @btn-primary-bg; + background-color: @btn-primary-bg; + box-shadow: @btn-primary-shadow; + text-shadow: @btn-text-shadow; +} +.ant-btn-danger-disabled, +.ant-btn-danger.disabled, +.ant-btn-danger[disabled], +.ant-btn-danger-disabled:hover, +.ant-btn-danger.disabled:hover, +.ant-btn-danger[disabled]:hover, +.ant-btn-danger-disabled:focus, +.ant-btn-danger.disabled:focus, +.ant-btn-danger[disabled]:focus, +.ant-btn-danger-disabled:active, +.ant-btn-danger.disabled:active, +.ant-btn-danger[disabled]:active, +.ant-btn-danger-disabled.active, +.ant-btn-danger.disabled.active, +.ant-btn-danger[disabled].active { + opacity: .5; + color: @btn-danger-color; + border-color: @btn-danger-border; + background-color: @btn-danger-bg; + box-shadow: @btn-primary-shadow; + text-shadow: @btn-text-shadow; +} +.ant-radio-button-wrapper-disabled, +.ant-radio-button-wrapper-disabled:first-child, +.ant-radio-button-wrapper-disabled:hover { + opacity: .5; + color: @radio-button-color; + background-color: @radio-button-bg; +} +.ant-radio-button-wrapper-disabled.ant-radio-button-wrapper-checked { + opacity: .5; + color: @btn-primary-color; + border-color: @btn-primary-bg; + background-color: @btn-primary-bg; + box-shadow: @btn-primary-shadow; +} diff --git a/Web/src/assets/style/dark/lib/dropdown.less b/Web/src/assets/style/dark/lib/dropdown.less new file mode 100644 index 0000000..4accbdb --- /dev/null +++ b/Web/src/assets/style/dark/lib/dropdown.less @@ -0,0 +1,6 @@ +@import (reference) '../extend.less'; +.ant-dropdown-trigger { + .anticon-down { + transform: scaleY(.75); + } +} diff --git a/Web/src/assets/style/dark/lib/font-size.less b/Web/src/assets/style/dark/lib/font-size.less new file mode 100644 index 0000000..67f8742 --- /dev/null +++ b/Web/src/assets/style/dark/lib/font-size.less @@ -0,0 +1,25 @@ +@import (reference) '../extend.less'; +h1, +.h1 { + font-size: 36px; +} +h2, +.h2 { + font-size: 32px; +} +h3, +.h3 { + font-size: 24px; +} +h4, +.h4 { + font-size: 18px; +} +h5, +.h5 { + font-size: 16px; +} +h6, +.h6 { + font-size: 14px; +} diff --git a/Web/src/assets/style/dark/lib/font-weight.less b/Web/src/assets/style/dark/lib/font-weight.less new file mode 100644 index 0000000..b24c9c7 --- /dev/null +++ b/Web/src/assets/style/dark/lib/font-weight.less @@ -0,0 +1,24 @@ +@import (reference) '../extend.less'; +body { + font-weight: 100; +} +h1, +h2, +h3, +h4, +h5, +h6 { + font-weight: 300; +} + +@btn-font-weight: 100; +.ant-card-meta-title { + font-weight: inherit; +} +.ant-table-thead { + >tr { + >th { + font-weight: 500; + } + } +} diff --git a/Web/src/assets/style/dark/lib/form-page.less b/Web/src/assets/style/dark/lib/form-page.less new file mode 100644 index 0000000..270d18a --- /dev/null +++ b/Web/src/assets/style/dark/lib/form-page.less @@ -0,0 +1,169 @@ +@import (reference) '../extend.less'; + +.yo-form-page { + position: relative; + + height: 100%; + + .yo-tab-external-mount { + display: flex; + flex-direction: column; + + height: 100%; + + >.ant-tabs { + >.ant-tabs-nav { + margin-bottom: 0; + padding: 0 @padding-md; + + background-color: @component-background; + + &.ant-tabs-card-bar { + .ant-tabs-nav-container { + height: @tabs-card-height + @padding-xs; + padding: (@tabs-card-height + @padding-xs - @btn-height-base) / 2 @padding-md; + } + + .ant-tabs-extra-content { + padding: (@tabs-card-height + @padding-xs - @btn-height-base) / 2 @padding-md; + } + + .ant-tabs-tab { + transition: none; + + .ant-btn(); + + &:hover { + border-color: @btn-default-border; + } + } + + .ant-tabs-tab { + line-height: @btn-height-base; + + margin-right: -1px; + } + + .ant-tabs-tab-active { + z-index: 2; + + color: @btn-primary-color; + border-color: @btn-primary-bg; + background-color: @btn-primary-bg; + + &:hover { + color: @btn-primary-color; + border-color: color(~`colorPalette('@{btn-primary-bg}', 5) `); + background-color: color(~`colorPalette('@{btn-primary-bg}', 5) `); + } + } + } + } + } + + >.yo-tab-external-mount-content { + position: relative; + + flex: 1; + + >.yo-tab-external-tabpane { + position: absolute; + top: 0; + left: 0; + + overflow: auto; + + width: 100%; + height: 100%; + + &.yo-tab-external-tabpane-inactive { + pointer-events: none; + + opacity: 0; + } + } + } + } + + &--bar { + position: sticky; + bottom: 0; + z-index: 200; + + &--with-tab { + position: absolute; + + display: flex; + align-items: flex-end; + + width: 100%; + height: 0; + padding-right: 7px; + + >.container-fluid { + width: 100%; + } + + ~.yo-tab-external-mount { + >.yo-tab-external-mount-content { + >.yo-tab-external-tabpane { + padding-bottom: @padding-xs * 2 + @btn-height-base + @border-width-base * 2; + } + } + } + } + } + + &--bar-inner { + display: flex; + justify-content: space-between; + + padding: @padding-xs @padding-md; + + border: @border-width-base @border-style-base @border-color-split; + background-color: fade(@component-background, 80%); + + backdrop-filter: blur(5px); + + >:first-child { + flex: 1; + } + + .ant-btn { + margin-left: @padding-sm; + } + } + + &--body { + >.ant-card-body { + padding: 0; + + >section { + padding: @padding-lg; + + >h5 { + padding-left: @padding-md; + + border-left: @padding-xs @border-style-base @primary-color; + } + } + } + } + + &-layout { + display: flex; + flex-direction: column; + + height: 100%; + + &--horizontal { + flex-direction: row; + } + } + + &--header { + padding: @padding-md 0; + + background-color: @component-background; + } +} \ No newline at end of file diff --git a/Web/src/assets/style/dark/lib/form.less b/Web/src/assets/style/dark/lib/form.less new file mode 100644 index 0000000..94afe69 --- /dev/null +++ b/Web/src/assets/style/dark/lib/form.less @@ -0,0 +1,401 @@ +@import (reference) '../extend.less'; +.yo-form { + &--fixed { + width: 660px; + margin: 0 auto; + } + .h1, + .h2, + .h3, + .h4, + .h5, + .h6 { + color: darken(@white, 40%); + } + .h3 { + font-size: 16px; + } + .h4 { + font-size: 15px; + } + .yo-form-group { + margin-bottom: @padding-md; + } + .ant-form-item { + display: flex; + justify-content: space-between; + + margin-bottom: -1px; + padding: @padding-xs @padding-md; + + border: @border-width-base @border-style-base @border-color-split; + background-color: @component-background; + + @box-shadow-focused: 0 0 0 2px fade(@primary-color, 50%); + @control-background: darken(@white, 80%) !important; + &::before, + &::after { + content: none; + } + .ant-form-item-control { + text-align: right; + } + .ant-input, + .ant-input-number, + .ant-mentions, + .ant-select-selector, + .ant-input-group-addon, + .ant-cascader-picker, + .ant-input-affix-wrapper, + .ant-picker { + z-index: 1; + + text-align: left; + + color: darken(@white, 10%); + border: 0; + background-color: @control-background; + } + .ant-mentions { + textarea { + background-color: @control-background; + } + } + .focus { + z-index: 2 !important; + + box-shadow: @box-shadow-focused; + } + .unfoucs { + z-index: 1 !important; + + box-shadow: none; + } + .ant-input { + &:focus { + .focus(); + } + } + .ant-input-affix-wrapper { + >.ant-input { + &:focus { + .unfoucs(); + } + } + } + .ant-input-number-focused, + .ant-mentions-focused { + .focus(); + } + .ant-select-focused, + .ant-select-open { + z-index: 2; + .ant-select-selection { + .focus(); + } + } + .ant-cascader-picker:focus { + .ant-cascader-input { + .focus(); + } + } + .ant-input-affix-wrapper:focus, + .ant-input-affix-wrapper-focused { + .focus(); + } + .ant-select-focused:not(.ant-select-disabled).ant-select:not(.ant-select-customize-input) { + .ant-select-selector { + .focus(); + } + } + .ant-picker-focused { + .focus(); + } + .ant-input-group { + .ant-row-flex { + .ant-select { + width: 100%; + } + } + .ant-input-group-addon { + z-index: 0; + } + } + .ant-cascader-picker-clear { + background-color: @control-background; + } + } + .ant-form-item-label { + overflow: hidden; + flex: 1 1 auto; + + margin-right: @padding-md; + + text-align: left; + text-overflow: ellipsis; + >label { + color: darken(@white, 10%); + &::after { + content: none; + } + } + } + .ant-form-item-control { + flex: 0 0 61.8%; + + width: 61.8%; + min-width: 220px; + } + .yo-form--fluid { + .ant-form-item-control { + flex: 0 0 100%; + + width: 100%; + + text-align: inherit; + } + } + .yo-form--short { + .ant-form-item-control { + flex: 0 0 38.2%; + + width: 38.2%; + } + } + // 上下布局 + .yo-form--vertical { + display: block; + .ant-form-item-control { + text-align: left; + } + &-radio { + .ant-radio-wrapper { + line-height: @padding-lg; + + display: block; + + margin-right: 0; + +.ant-radio-wrapper { + margin-top: @padding-sm; + } + } + } + .ant-form-item-control-wrapper { + margin-left: @padding-lg; + } + .ant-form-explain { + margin-left: 0; + } + } + .yo-form-link { + display: flex; + align-items: center; + + margin-bottom: -1px; + padding: @padding-md; + + cursor: pointer; + + border: @border-width-base @border-style-base @border-color-split; + background-color: @component-background; + &:hover { + background-color: lighten(@black, 1%); + } + &:active { + background-color: lighten(@black, 3%); + } + &--title { + font-size: @font-size-base + 1px; + + flex: 1; + } + &--content { + flex: 1; + + text-align: right; + + color: fade(@black, 35%); + } + &--right-icon { + margin-left: @padding-xs; + + color: fade(@black, 50%); + } + } + &.yo-form--no-border { + .ant-form-item { + padding: @padding-md 0; + + border-right: 0; + border-left: 0; + &:first-child { + border-top: 0; + } + &:last-child { + border-bottom: 0; + } + } + .yo-form-group { + margin-bottom: 0; + } + } +} +.yo-modal-form { + .ant-modal-body { + padding: 0; + } + .yo-form { + h1, + h2, + h3, + h4, + h5 { + margin: 0; + padding: @padding-sm @padding-md @padding-xs; + } + .yo-form-group { + margin-bottom: 0; + } + .ant-form-item { + border-right: 0; + border-left: 0; + &:first-child { + margin-top: -1px; + } + } + } +} +.yo-drawer-form { + .ant-drawer-wrapper-body { + display: flex; + flex-direction: column; + } + .ant-drawer-header { + flex: 0 0 auto; + } + .ant-drawer-body { + position: relative; + + flex: 1 1 100%; + + padding: 0; + } + .yo-drawer-form--body { + position: absolute; + top: 0; + bottom: @border-width-base + 20px + @padding-md * 2; + + overflow: auto; + + width: 100%; + padding: @padding-lg; + } + .ant-drawer-footer { + position: absolute; + left: 0; + bottom: 0; + + width: 100%; + padding: 10px @padding-md; + + text-align: right; + + border-top: @border-width-base @border-style-base @border-color-split; + background: @component-background; + button+button { + margin-left: @padding-xs; + } + } +} +.ant-form { + fieldset { + margin-bottom: @padding-lg; + padding: @padding-md; + + border: @border-width-base @border-style-base @border-color-split; + } + legend { + display: inline-block; + + width: auto; + margin-bottom: 0; + padding: 0 @padding-md; + + border: 0; + border-radius: @border-radius-base; + } +} +.ant-form-horizontal { + .ant-form-item-label { + line-height: 1.5; + + margin-right: @padding-xs; + + white-space: normal; + } +} +.ant-form-vertical { + .ant-form-item-label { + >label { + font-weight: bold; + } + } +} +.ant-form-item-required { + &::before { + content: '' !important; + vertical-align: middle; + + border-top: 4px solid transparent; + border-bottom: 4px solid transparent; + border-left: 5px solid @highlight-color; + background: none; + } +} +.yo-form-page { + .ant-form { + .ant-radio-button-wrapper { + margin-right: @padding-xs; + margin-bottom: @padding-xs; + + border-left: @border-width-base @border-style-base @border-color-base; + &.ant-radio-button-wrapper-checked { + border-left-color: @primary-color; + } + &:not(:first-child) { + &::before { + content: none; + } + } + } + } +} +.yo-filter-item { + display: flex; + flex-flow: row wrap; + + margin-bottom: 0; + .ant-tag-checkable { + font-size: @font-size-base; + } + .ant-radio-button-wrapper { + border: 0 !important; + background-color: transparent; + &:hover { + color: @red-6; + } + } + .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled) { + border-color: @red-6; + background-color: @red-6; + &:hover { + border-color: @red-5; + background-color: @red-5; + } + &:active { + border-color: @red-7; + background-color: @red-7; + box-shadow: none; + } + } +} diff --git a/Web/src/assets/style/dark/lib/icon-selector.less b/Web/src/assets/style/dark/lib/icon-selector.less new file mode 100644 index 0000000..3438d23 --- /dev/null +++ b/Web/src/assets/style/dark/lib/icon-selector.less @@ -0,0 +1,59 @@ +@import (reference) '../extend.less'; +.yo-icon-selector { + .ant-drawer-wrapper-body { + display: flex; + flex-direction: column; + } + .ant-drawer-body { + position: relative; + + flex: 1 1 100%; + + padding: 0; + } + .ant-tabs { + height: 100%; + .ant-tabs-content-left { + position: relative; + + height: 100%; + .ant-tabs-tabpane { + position: absolute; + top: 0; + left: 0; + + overflow-y: auto; + + width: 100%; + height: 100%; + padding: @padding-lg; + } + } + } + .ant-card { + margin: 0; + } + .ant-card-grid { + width: 25%; + + text-align: center; + >span { + font-size: @font-size-sm; + + display: block; + + margin: @padding-xxs -@padding-lg 0; + + white-space: nowrap; + + color: fade(@black, 50%); + } + &.yo-icon--selected { + color: @white; + background-color: @primary-color; + >span { + color: fade(@white, 50%); + } + } + } +} diff --git a/Web/src/assets/style/dark/lib/input.less b/Web/src/assets/style/dark/lib/input.less new file mode 100644 index 0000000..d464a3c --- /dev/null +++ b/Web/src/assets/style/dark/lib/input.less @@ -0,0 +1,4 @@ +@import (reference) '../extend.less'; +.yo-addon { + padding: 0 @padding-xs; +} diff --git a/Web/src/assets/style/dark/lib/list.less b/Web/src/assets/style/dark/lib/list.less new file mode 100644 index 0000000..2dbb2de --- /dev/null +++ b/Web/src/assets/style/dark/lib/list.less @@ -0,0 +1,95 @@ +@import (reference) '../extend.less'; +.ant-list-bordered { + border-color: @border-color-split; + background-color: @white; +} +.yo-list { + @title-color: lighten(@black, 70%); + @value-color: lighten(@black, 30%); + &-content--h { + display: flex; + align-items: center; + &--item { + margin-left: @padding-xl; + >span { + line-height: 20px; + + color: @title-color; + } + >p { + line-height: 22px; + + margin-top: @padding-xxs; + margin-bottom: 0; + + color: @value-color; + } + } + } + .ant-pagination { + margin: @padding-md 0; + } + .ant-descriptions { + .ant-descriptions-item-label { + color: @title-color; + } + .ant-descriptions-item-content { + color: @value-color; + } + .ant-descriptions-row { + &:last-child { + >td { + padding-bottom: 0; + } + } + } + } + &--scroll { + position: relative; + + overflow-x: auto; + } + .ant-list-items { + min-width: 1000px; + } + .ant-list-item { + transition: @animation-duration-slow; + transition-property: background, border-bottom-color; + &:hover { + border-bottom-color: lighten(@primary-color, 30%); + background: linear-gradient(90deg, transparent 10%, @background-color-light 70%, transparent); + } + } + &-container { + position: relative; + &::before, + &::after { + position: absolute; + top: 0; + bottom: 0; + z-index: 3; + + width: 30px; + + content: ''; + transition: box-shadow @animation-duration-slow; + pointer-events: none; + } + &::before { + left: 0; + } + &::after { + right: 0; + } + &.yo-list--ping-left { + &::before { + box-shadow: inset 10px 0 8px -8px fade(@black, 15%); + } + } + &.yo-list--ping-right { + &::after { + box-shadow: inset -10px 0 8px -8px fade(@black, 15%); + } + } + } +} diff --git a/Web/src/assets/style/dark/lib/margin.less b/Web/src/assets/style/dark/lib/margin.less new file mode 100644 index 0000000..bdc8235 --- /dev/null +++ b/Web/src/assets/style/dark/lib/margin.less @@ -0,0 +1,68 @@ +@import (reference) '../extend.less'; +@margin-padding-position: ~'', ~'-top', ~'-left', ~'-right', ~'-bottom'; +@margin-padding-position-name: ~'', ~'t', ~'l', ~'r', ~'b'; + +.margin-padding (@i) when (@i <=length(@margin-padding-position)) { + @position: extract(@margin-padding-position, @i); + @name: extract(@margin-padding-position-name, @i); + + .m@{name}-xl { + margin@{position}: @padding-xl !important; + } + + .m@{name}-lg { + margin@{position}: @padding-lg !important; + } + + .m@{name}-md { + margin@{position}: @padding-md !important; + } + + .m@{name}-sm { + margin@{position}: @padding-sm !important; + } + + .m@{name}-xs { + margin@{position}: @padding-xs !important; + } + + .m@{name}-xxs { + margin@{position}: @padding-xxs !important; + } + + .p@{name}-xl { + padding@{position}: @padding-xl !important; + } + + .p@{name}-lg { + padding@{position}: @padding-lg !important; + } + + .p@{name}-md { + padding@{position}: @padding-md !important; + } + + .p@{name}-sm { + padding@{position}: @padding-sm !important; + } + + .p@{name}-xs { + padding@{position}: @padding-xs !important; + } + + .p@{name}-xxs { + padding@{position}: @padding-xxs !important; + } + + .m@{name}-none { + margin@{position}: 0 !important; + } + + .p@{name}-none { + padding@{position}: 0 !important; + } + + .margin-padding(@i + 1); +} + +.margin-padding(1); \ No newline at end of file diff --git a/Web/src/assets/style/dark/lib/modal.less b/Web/src/assets/style/dark/lib/modal.less new file mode 100644 index 0000000..f87defd --- /dev/null +++ b/Web/src/assets/style/dark/lib/modal.less @@ -0,0 +1,41 @@ +@import (reference) '../extend.less'; +.ant-modal-content { + background-color: fade(@primary-color, 50%); + + backdrop-filter: blur(5px); +} +.ant-modal-header { + padding: @padding-sm @padding-md; + + border-bottom: 0; + background-color: transparent; +} +.ant-modal-title { + color: fade(@white, 85%); +} +.ant-modal-body { + background-color: @component-background; +} +.ant-modal-footer { + background-color: @component-background; +} +.ant-modal-close { + top: 10px; + right: 10px; + + color: fade(@white, 75%); + background-color: @error-color; + &:hover, + &:focus { + color: @white; + } +} +.ant-modal-close-x { + line-height: 26px; + + width: 26px; + height: 26px; +} +.ant-modal-mask { + backdrop-filter: blur(3px); +} diff --git a/Web/src/assets/style/dark/lib/page.less b/Web/src/assets/style/dark/lib/page.less new file mode 100644 index 0000000..bda6aa4 --- /dev/null +++ b/Web/src/assets/style/dark/lib/page.less @@ -0,0 +1,8 @@ +@import (reference) '../extend.less'; +.yo-page { + &--header { + padding: @padding-md 0; + + background-color: @white; + } +} diff --git a/Web/src/assets/style/dark/lib/radio.less b/Web/src/assets/style/dark/lib/radio.less new file mode 100644 index 0000000..ab0b99f --- /dev/null +++ b/Web/src/assets/style/dark/lib/radio.less @@ -0,0 +1,7 @@ +@import (reference) '../extend.less'; +.ant-radio-button-wrapper-checked { + &:not(.ant-radio-button-wrapper-disabled), + &:not(.ant-radio-button-wrapper-disabled):hover { + box-shadow: none; + } +} diff --git a/Web/src/assets/style/dark/lib/scrollbar.less b/Web/src/assets/style/dark/lib/scrollbar.less new file mode 100644 index 0000000..84b7c04 --- /dev/null +++ b/Web/src/assets/style/dark/lib/scrollbar.less @@ -0,0 +1,14 @@ +@import (reference) '../extend.less'; +::-webkit-scrollbar { + width: 7px; + height: 7px; + + background-color: fade(@white, 10%); +} +::-webkit-scrollbar-thumb { + border-radius: @border-radius-base; + background-color: fade(@white, 30%); +} +::-webkit-scrollbar-thumb:active { + background-color: fade(@white, 50%); +} diff --git a/Web/src/assets/style/dark/lib/select.less b/Web/src/assets/style/dark/lib/select.less new file mode 100644 index 0000000..5f80810 --- /dev/null +++ b/Web/src/assets/style/dark/lib/select.less @@ -0,0 +1,6 @@ +@import (reference) '../extend.less'; +.ant-select-arrow { + .anticon-down { + transform: scaleY(.75); + } +} diff --git a/Web/src/assets/style/dark/lib/table.less b/Web/src/assets/style/dark/lib/table.less new file mode 100644 index 0000000..72993b8 --- /dev/null +++ b/Web/src/assets/style/dark/lib/table.less @@ -0,0 +1,255 @@ +@import (reference) '../extend.less'; +.yo-query-bar { + margin-bottom: @padding-xs; + .ant-form-inline { + .ant-form-item { + margin-bottom: @padding-xs; + } + } +} +.yo-action-bar { + display: flex; + justify-content: space-between; + + margin-bottom: @padding-md; + &--actions { + >.ant-btn, + >.ant-btn-group { + +.ant-btn, + +.ant-btn-group { + margin-left: @padding-xs; + } + } + } +} +.ant-table { + .ant-table-container { + &::before, + &::after { + z-index: 3; + } + } +} +.ant-table-thead { + th.ant-table-column-has-sorters { + &:hover { + background-color: darken(@background-color-base, 5%); + } + } +} +.ant-table-tbody { + >tr { + >td { + transition-property: background, border-bottom-color; + } + } + >tr.ant-table-row:hover { + >td { + border-bottom-color: lighten(@primary-color, 30%); + } + } +} +.ant-table-small { + >.ant-table-content { + >.ant-table-body { + margin: 0; + >table { + >.ant-table-thead { + >tr { + >th { + background-color: @table-selected-row-bg; + } + } + } + } + } + } +} +.ant-table-thead { + >tr { + >th { + font-weight: bold; + } + } +} +.ant-table-sticky-scroll { + display: none; +} +.ant-table-expanded-row>td { + border-right: @border-width-base @border-style-base @table-border-color !important; +} +.yo-table { + .ant-table { + margin: 0 !important; + } + .border-right-none { + border-right-width: 0 !important; + &:last-child { + border-right-width: 1px !important; + } + } + .ant-table-content { + .ant-table-body { + overflow-x: auto !important; + >table { + >.ant-table-thead { + >tr { + >th { + .border-right-none(); + } + } + } + >.ant-table-tbody { + >tr { + >td { + .border-right-none(); + } + } + } + } + } + .ant-table-fixed-left { + .ant-table-thead { + >tr { + >th { + border-right-width: 0 !important; + } + } + } + .ant-table-tbody { + >tr { + >td { + border-right-width: 0 !important; + } + } + } + } + .ant-table-fixed-right { + .ant-table-fixed { + border-left-width: 0 !important; + } + .ant-table-thead { + >tr { + >th { + .border-right-none(); + } + } + } + .ant-table-tbody { + >tr { + >td { + .border-right-none(); + } + } + } + } + } + .ant-table-bordered { + >.ant-table-container { + border-top: @border-width-base @border-style-base @table-border-color; + } + } + &--row-no { + width: 30px !important; + + background-color: @table-header-bg; + } +} +.yo-table-actions { + display: inline-block; + + vertical-align: middle; + &--inner { + display: flex; + align-items: center; + + height: 18px; + } +} +.yo-table--column-setting { + width: 240px; + .ant-dropdown-menu-item { + display: flex; + align-items: center; + justify-content: space-between; + } + .anticon-pushpin { + transition: @animation-duration-slow; + transform: rotate(45deg); + + color: darken(@white, 40%); + } + .yo-table--fixed { + transform: rotate(-45deg); + } +} +.yo-menu-table { + .ant-table { + .ant-table-expand-icon-col { + width: 28px; + } + .ant-table-row-expand-icon-cell { + z-index: 1; + + padding-right: 0 !important; + + border-right: none !important; + +.ant-table-cell { + padding-left: 0; + } + } + .ant-table-tbody { + >.ant-table-expanded-row>td { + padding: 0; + + border-right: none !important; + .ant-table-wrapper { + margin-bottom: -1px; + + border: none; + .ant-table { + margin: 0 !important; + } + .ant-table-container { + border: none; + .ant-table-row-expand-icon-cell { + .ant-table-row-expand-icon { + left: @padding-md; + } + +.ant-table-cell { + padding-left: @padding-md; + } + } + .ant-table-tbody { + >tr { + &:last-child { + >td { + border-bottom: @border-width-base @border-style-base @table-border-color; + } + &:hover { + >td { + border-bottom-color: lighten(@primary-color, 30%); + } + } + } + } + } + } + } + } + } + } + .ant-card { + max-width: fit-content; + margin: @padding-sm @padding-xs @padding-sm @padding-xl; + + background: none; + .ant-card-grid { + width: 300px; + height: 90px; + padding: @padding-xs @padding-sm; + + background-color: @card-background; + } + } +} diff --git a/Web/src/assets/style/dark/lib/text-color.less b/Web/src/assets/style/dark/lib/text-color.less new file mode 100644 index 0000000..8b4e052 --- /dev/null +++ b/Web/src/assets/style/dark/lib/text-color.less @@ -0,0 +1,35 @@ +@import (reference) '../extend.less'; +.text-primary { + color: @primary-color !important; +} +.text-info { + color: @info-color !important; +} +.text-success { + color: @success-color !important; +} +.text-processing { + color: @processing-color !important; +} +.text-error, +.text-danger { + color: @error-color !important; +} +.text-highlight { + color: @highlight-color !important; +} +.text-warning { + color: @warning-color !important; +} +.text-gray { + color: fade(@white, 50%) !important; +} +.text-normal { + color: fade(@white, 30%) !important; +} +.text-white { + color: @white !important; +} +.text-black { + color: @black !important; +} diff --git a/Web/src/assets/style/dark/lib/tree-layout.less b/Web/src/assets/style/dark/lib/tree-layout.less new file mode 100644 index 0000000..5490376 --- /dev/null +++ b/Web/src/assets/style/dark/lib/tree-layout.less @@ -0,0 +1,83 @@ +@import (reference) '../extend.less'; +@import (reference) './text-color.less'; +.yo-tree-layout { + position: absolute; + top: 0; + left: 0; + + width: 100%; + height: 100%; + .ant-layout-sider { + background-color: @component-background; + .ant-layout-header { + height: @layout-header-height - 20px; + + background-color: @component-background; + .header-actions { + .ant-input-search { + margin: (@layout-header-height - 20px - 32px) / 2 @padding-md; + } + } + } + } + &--collapsed { + position: absolute; + top: 0; + left: 0; + bottom: 0; + z-index: 4; + + transform: translateX(-100%); + &.open { + transform: translateX(0); + + box-shadow: 2px 0 8px fade(@black , 20%); + } + } + &--bar { + line-height: 20px; + + height: 20px; + padding: 0 @padding-md; + + text-align: right; + >.anticon { + margin-left: @padding-xs; + + cursor: pointer; + + color: fade(@white, 50%); + &:hover { + color: fade(@white, 80%); + } + } + } + &--content { + position: absolute; + top: @layout-header-height; + left: 0; + bottom: 0; + + overflow-y: auto; + + width: 100%; + &::-webkit-scrollbar { + width: 5px; + height: 5px; + + background-color: @component-background; + } + &::-webkit-scrollbar-thumb { + background-color: transparent; + } + &:hover::-webkit-scrollbar-thumb { + background-color: fade(@white, 30%); + } + &::-webkit-scrollbar-thumb:active { + background-color: fade(@white, 45%); + } + } + .ant-tree { + .text-gray(); + } +} diff --git a/Web/src/assets/style/dark/lib/upload.less b/Web/src/assets/style/dark/lib/upload.less new file mode 100644 index 0000000..a2aa434 --- /dev/null +++ b/Web/src/assets/style/dark/lib/upload.less @@ -0,0 +1,29 @@ +@import (reference) '../extend.less'; +.ant-upload-list-text { + display: flex; + flex-wrap: wrap; + .ant-upload-list-item { + height: auto; + margin-right: @padding-xs; + } + .ant-upload-list-item-info { + position: relative; + + padding: @padding-xxs @padding-xs; + + border: @border-width-base @border-style-base @border-color-split; + .anticon-paper-clip { + top: 7.5px; + } + >span { + display: flex; + } + } + .ant-upload-list-item-card-actions { + position: relative; + + margin-left: @padding-xs; + + white-space: nowrap; + } +} diff --git a/Web/src/assets/style/dark/lib/visibility.less b/Web/src/assets/style/dark/lib/visibility.less new file mode 100644 index 0000000..a3d6235 --- /dev/null +++ b/Web/src/assets/style/dark/lib/visibility.less @@ -0,0 +1,45 @@ +@import (reference) '../extend.less'; +.hide { + visibility: hidden !important; +} +.hidden { + display: none !important; +} +.block { + display: block; +} +.inline-block { + display: inline-block; +} +.inline { + display: inline; +} +.inline-flex { + display: inline-flex; +} +.flex { + display: flex; +} +.ellipsis { + display: block; + overflow: hidden; + + white-space: nowrap; + text-overflow: ellipsis; +} +.ellipsis-line(@line) { + display: -webkit-box; + overflow: hidden; + -webkit-box-orient: vertical; + + text-overflow: ellipsis; + word-break: break-all; + + -webkit-line-clamp: @line; +} +.ellipsis-2 { + .ellipsis-line(2); +} +.ellipsis-3 { + .ellipsis-line(3); +} diff --git a/Web/src/assets/style/dark/lib/width-height.less b/Web/src/assets/style/dark/lib/width-height.less new file mode 100644 index 0000000..ae39ddc --- /dev/null +++ b/Web/src/assets/style/dark/lib/width-height.less @@ -0,0 +1,47 @@ +@import (reference) '../extend.less'; + +.width-height (@i) when (@i <=20) { + + @n : @i * 50; + @px : @n * 1px; + + .w-@{n} { + width: @px !important; + } + + .w-@{n}-min { + min-width: @px !important; + } + + .w-@{n}-max { + max-width: @px !important; + } + + .h-@{n} { + height: @px !important; + } + + .h-@{n}-min { + min-height: @px !important; + } + + .h-@{n}-max { + max-height: @px !important; + } + + .w-@{n}-p { + width: @n * 1% !important; + } + + .h-@{n}-p { + height: @n * 1% !important; + } + + .width-height(@i + 1); +} + +.width-height(0); + +.flex-1 { + flex: 1; +} \ No newline at end of file diff --git a/Web/src/assets/style/dark/main.less b/Web/src/assets/style/dark/main.less new file mode 100644 index 0000000..6e9fb0b --- /dev/null +++ b/Web/src/assets/style/dark/main.less @@ -0,0 +1,704 @@ +@import (reference) './extend.less'; +@import (reference) './lib/container.less'; +@import (reference) './lib/text-color.less'; +.yo-layout--spin { + position: absolute; + top: 0; + left: 0; + + width: 100%; + height: 100%; + + background-color: @layout-header-background; + >.ant-spin-nested-loading { + height: 100%; + >div>.ant-spin { + max-height: none; + @-webkit-keyframes borderScale { + 0% { + border: 5px solid white; + } + 50% { + border: 25px solid transparent; + } + 100% { + border: 5px solid white; + } + } + @keyframes borderScale { + 0% { + border: 5px solid white; + } + 50% { + border: 25px solid transparent; + } + 100% { + border: 5px solid white; + } + } + .loader-container { + position: absolute; + top: 50%; + left: 50%; + + box-sizing: content-box; + width: 200px; + height: 200px; + margin: 0 auto; + margin-right: -50%; + + transform: translate(-50%, -50%); + -webkit-animation: borderScale 1s infinite ease-in-out; + animation: borderScale 1s infinite ease-in-out; + + color: white; + border: 5px solid transparent; + border-radius: 50%; + >p { + font-family: 'Raleway', sans-serif; + font-size: 2em; + font-weight: bold; + + position: absolute; + top: 50%; + left: 50%; + + margin-right: -50%; + + transform: translate(-50%, -50%); + } + } + } + >.ant-spin-container { + width: 100%; + height: 100%; + &.ant-spin-blur { + opacity: 0; + } + } + } +} +.ant-layout-header { + .header-actions { + display: flex; + .header-action { + display: inline-block; + + padding: 0 @padding-md; + + cursor: pointer; + transition: @animation-duration-slow; + transition-property: background-color; + .anticon { + font-size: @font-size-base + 6px; + + transition: @animation-duration-slow; + transition-property: color; + } + &:active { + box-shadow: inset 1px 1px 10px rgba(0, 0, 0, .05); + } + // 特殊工具按钮 + .theme-toggle { + position: relative; + + overflow: hidden; + + width: 20px; + height: 20px; + margin: 7px 0; + + border-radius: 50%; + &--real { + position: relative; + + width: 20px; + height: 20px; + + transition: @animation-duration-slow background-color; + + border-radius: 50%; + background-color: fade(@white, 60%); + &::before { + position: absolute; + top: 5px; + left: 5px; + + width: 10px; + height: 10px; + + content: ''; + transition: @animation-duration-slow transform; + transform: scale(0); + + border: 2px solid @layout-header-background; + border-radius: 50%; + } + } + &--imaginary { + position: absolute; + top: 6px; + right: -6px; + + width: 18px; + height: 18px; + + transition: @animation-duration-slow transform; + transform: rotate(45deg) scaleY(1); + transform-origin: top right; + + border-radius: 50%; + background-color: @layout-header-background; + } + } + &:hover { + .theme-toggle { + &--real { + background-color: @white; + &::before { + transform: scale(1); + } + } + &--imaginary { + transform: rotate(45deg) scaleY(0); + } + } + } + } + .ant-select-auto-complete { + margin: (@layout-header-height - 10px - 30px) / 2 @padding-md; + .ant-input-affix-wrapper { + border: 0; + background-color: fade(@white, 15%); + &:focus, + &-focused { + background-color: fade(@white, 30%); + } + .ant-input { + color: fade(@white, 85%); + background-color: transparent; + } + .ant-input-suffix { + .anticon { + color: fade(@white, 60%); + } + } + } + } + } + .user-container { + z-index: 10; + + width: 32px + @padding-sm * 2; + height: @layout-header-height - 24px; + margin: 2px 0; + + transition: @animation-duration-slow; + .user-container-inner { + position: relative; + + transition: @animation-duration-slow; + + border-radius: @border-radius-base; + } + .user { + &--base { + line-height: @layout-header-height - 24px; + + position: relative; + + display: flex; + overflow: hidden; + align-items: center; + + width: 100%; + height: @layout-header-height - 24px; + padding: 0 @padding-sm; + + transition: @animation-duration-slow; + } + &--avatar { + box-shadow: 0 0 0 2px @white; + } + } + } +} +.ant-layout-content { + position: relative; + + overflow-y: auto; + >.yo-tab-external-mount { + position: absolute; + top: 0; + left: 0; + bottom: 0; + + display: flex; + flex-direction: column; + + width: 100%; + >.ant-tabs { + z-index: 5; + + overflow: visible; + >.ant-tabs-nav { + margin-bottom: 0; + + border-bottom: 0; + background-color: @layout-header-background; + box-shadow: 0 2px 12px fade(@black, 8%); + &::before { + content: none; + } + .ant-tabs-nav-container { + height: 30px; + margin-bottom: 0; + } + .ant-tabs-tab { + line-height: 30px; + + height: 30px; + margin-right: 0; + padding: 0; + + transition: none; + + border: 0; + background-color: transparent; + &:hover { + color: @white; + } + .ant-tabs-tab-btn { + transition: none; + } + &.ant-tabs-tab-active { + border-color: darken(@primary-color, 10%); + background-color: @primary-color; + .ant-tabs-tab-btn { + color: @white; + } + .ant-tabs-tab-remove { + color: fade(@white, 70%); + &:hover { + color: @white; + } + } + } + .yo-layout-tab-subtitle { + line-height: 1; + + display: inline-block; + overflow: hidden; + + max-width: 150px; + + transform: translateY(1px); + white-space: nowrap; + text-overflow: ellipsis; + + opacity: .75; + } + +.ant-tabs-tab { + margin-left: 0; + &::before { + position: absolute; + left: -.5px; + + width: 1px; + height: 24px; + + content: ''; + transform: scaleX(.5); + + background: linear-gradient(transparent, fade(@black, 30%), transparent); + } + } + .ant-dropdown-trigger { + padding: 0 @padding-md * 2 0 @padding-md; + } + .ant-tabs-tab-unclosable { + .ant-dropdown-trigger { + padding: 0 @padding-lg 0 @padding-md; + } + } + .ant-tabs-tab-remove { + line-height: 28px; + + position: absolute; + top: 0; + right: 0; + + margin: 0; + + transition: none; + } + } + .ant-tabs-nav-more { + padding: 5px @padding-md; + } + } + } + >.yo-tab-external-mount-content { + position: relative; + + height: 100%; + >.yo-tab-external-tabpane { + position: absolute; + top: 0; + left: 0; + + overflow-x: hidden; + overflow-y: auto; + + width: 100%; + height: 100%; + &.yo-tab-external-tabpane-inactive { + pointer-events: none; + + opacity: 0; + } + >iframe { + display: block; + + width: 100%; + height: 100%; + + border: 0; + } + } + } + } +} +.ant-layout-sider { + .ant-menu-inline { + border-right: 0; + } +} +.yo-nav { + padding-top: @padding-lg; + padding-bottom: @padding-lg; + &--row { + padding: 1px 0; + + column-gap: @padding-md; + column-count: 3; + } + &--col { + break-inside: avoid; + } + &--sub-item { + } + &--item-group { + font-size: @font-size-base; + line-height: 1.5; + + margin-bottom: @padding-xs; + padding-top: @padding-xs * 2; + + color: fade(@black, 35%); + border: @border-width-base @border-style-base transparent; + } + &--item { + font-size: @font-size-base; + line-height: 1.5; + + position: relative; + + margin-bottom: @padding-xs; + padding: @padding-xs @padding-sm; + + cursor: pointer; + transition: @animation-duration-fast; + + border: @border-width-base @border-style-base @border-color-split; + border-radius: @border-radius-base; + background-color: @white; + &:hover { + color: @white; + border-color: @primary-color; + background-color: @primary-color; + } + } +} +.yo-layout-sider { + height: 100%; + + background-color: @layout-header-background; + .ant-layout-sider-children { + display: flex; + flex-direction: column; + } + .logo { + font-size: @font-size-lg * 1.5; + font-weight: 500; + line-height: @layout-header-height + 10px; + + z-index: 11; + + display: flex; + overflow: hidden; + align-items: center; + flex: 0 0 @layout-header-height + 10px; + + height: @layout-header-height + 10px; + padding: 0 @padding-md 0 @padding-lg; + + color: @white; + box-shadow: none; + img { + max-height: 100%; + } + span { + margin-left: @padding-sm; + + transition: @animation-duration-slow; + transition-property: opacity; + } + } + &.ant-layout-sider-collapsed { + .logo { + span { + opacity: 0; + } + } + } + .yo-sider-nav { + position: relative; + z-index: 10; + + flex: 1 1 100%; + + box-shadow: 2px 0 8px fade(@black, 25%); + &--app { + font-size: @font-size-sm; + + margin-top: @padding-sm; + padding: 0 @padding-md; + +.text-gray(); + } + .ant-menu { + background-color: @layout-header-background; + } + .ant-menu-sub.ant-menu-inline { + background-color: fade(@white, 4%); + } + } + .swiper-container { + position: absolute; + top: 0; + left: 0; + bottom: 0; + + width: 100%; + .swiper-scrollbar { + transition: @animation-duration-slow; + transition-property: opacity; + + opacity: 0; + border-radius: @border-radius-base; + } + .swiper-scrollbar-drag { + border-radius: @border-radius-base; + background-color: fade(@white, 30%); + } + &:hover { + .swiper-scrollbar { + opacity: 1; + } + } + } + .swiper-slide { + height: auto; + min-height: 100%; + >.ant-spin-nested-loading { + height: 100%; + .ant-spin-blur { + &::after { + opacity: 0; + } + } + } + } +} +.yo-layout--left-menu, +.yo-layout--right-menu { + position: absolute; + top: 0; + left: 0; + + width: 100%; + height: 100%; + .ant-layout-header { + line-height: @layout-header-height - 20px; + + z-index: 6; + + height: @layout-header-height - 20px; + padding: 0; + + background-color: @white; + >section { + display: flex; + justify-content: space-between; + } + .header-actions { + .header-action { + line-height: @layout-header-height - 16px; + + height: @layout-header-height - 20px; + + color: fade(@black, 35%); + .anticon { + color: fade(@black, 35%); + } + &:hover { + color: @icon-color-hover; + background-color: fade(@black, 5%); + .anticon { + color: @icon-color-hover; + } + } + } + } + } + >section { + >.ant-layout-sider { + .yo-layout-sider(); + } + } +} +.yo-layout--top-nav { + position: absolute; + top: 0; + left: 0; + + display: flex; + flex-direction: column; + + width: 100%; + height: 100%; + + @layout-header-height: 54px; + .ant-layout-header { + line-height: @layout-header-height; + + z-index: 11; + + flex: 0 0 @layout-header-height; + + height: @layout-header-height; + padding: 0; + + background-color: @layout-header-background; + section { + display: flex; + justify-content: space-between; + + height: 100%; + } + .header-actions { + .header-action { + color: fade(@white, 60%); + .anticon { + color: fade(@white, 60%); + } + &:hover { + color: @white; + background-color: fade(@white, 20%); + .anticon { + color: @white; + } + } + } + } + .user-container { + margin: (@layout-header-height - 40px) / 2 0; + } + .logo { + font-size: @font-size-lg * 1.5; + font-weight: 500; + line-height: @layout-header-height - 10px; + + display: flex; + overflow: hidden; + align-items: center; + + height: @layout-header-height 10px; + margin: 5px @padding-lg 5px 0; + + color: @white; + img { + max-height: 100%; + } + span { + margin-left: @padding-sm; + } + } + .ant-menu-horizontal { + line-height: @layout-header-height; + + border-bottom: 0; + >.ant-menu-submenu { + top: 0; + + border-bottom: 0; + } + } + .header-actions { + .header-action { + line-height: @layout-header-height - 16px; + + margin: 10px 0; + } + } + } + &--container { + .ant-layout-header { + .ant-menu-horizontal { + width: 400px; + } + } + .ant-layout-content { + .yo-tab-external-mount { + >.ant-tabs { + >.ant-tabs-bar { + .ant-tabs-nav-container { + width: @container-width - @padding-md * 2; + margin: 0 auto; + } + } + } + } + } + } + &--container-fluid { + .ant-layout-header { + .ant-menu-horizontal { + width: 800px; + } + @media (max-width: 1400px) { + .ant-menu-horizontal { + width: 600px; + } + } + } + } +} +.yo-user-popover { + width: 280px; + padding-top: 0; + .ant-popover-arrow { + display: none; + } + .ant-popover-inner-content { + padding: 0; + } +} +.yo-popover-infinite-scroll { + .ant-popover-inner-content { + overflow-y: auto; + + max-height: 300px; + } +} diff --git a/Web/src/assets/style/dark/pages/account-base.less b/Web/src/assets/style/dark/pages/account-base.less new file mode 100644 index 0000000..6ec0db8 --- /dev/null +++ b/Web/src/assets/style/dark/pages/account-base.less @@ -0,0 +1,51 @@ +@import (reference) '../extend.less'; +.yo-avatar-info { + position: relative; + + overflow: hidden; + + width: 128px; + margin: 0 auto; + + border-radius: 50%; + &--cover { + font-size: @font-size-lg * 2; + + position: absolute; + top: 0; + left: 0; + + display: flex; + align-items: center; + justify-content: center; + + width: 100%; + height: 100%; + + cursor: pointer; + transition: @animation-duration-slow; + + opacity: 0; + color: @white; + background-color: fade(@black, 50%); + &:hover { + opacity: 1; + } + } +} +.yo-avatar-cropper { + overflow: hidden; + + border-radius: @border-radius-base; + background-color: #ccc; +} +.yo-avatar-preview { + overflow: hidden; + + width: 200px; + height: 200px; + margin: 0 auto; + + border-radius: 50%; + background: #ccc; +} diff --git a/Web/src/assets/style/dark/pages/home.less b/Web/src/assets/style/dark/pages/home.less new file mode 100644 index 0000000..e6b1a5f --- /dev/null +++ b/Web/src/assets/style/dark/pages/home.less @@ -0,0 +1,42 @@ +@import (reference) '../extend.less'; +.home-header { + margin-bottom: @padding-md; + padding: @padding-lg 0; + + background-color: @component-background; +} +.home-header-row { + display: flex; +} +.home-header-content { + margin-left: @padding-lg; + h4 { + span { + color: @primary-color; + } + } + p { + margin: 0; + } +} +.home-container { + .ant-card-meta-title { + font-size: @font-size-base + 1px; + + display: -webkit-box; + -webkit-box-orient: vertical; + + height: 42px; + + white-space: normal; + + -webkit-line-clamp: 2; + } + .ant-card-meta-description { + .ant-row { + line-height: 24px; + + height: 24px; + } + } +} diff --git a/Web/src/assets/style/dark/pages/index.less b/Web/src/assets/style/dark/pages/index.less new file mode 100644 index 0000000..7927e7a --- /dev/null +++ b/Web/src/assets/style/dark/pages/index.less @@ -0,0 +1,3 @@ +@import './login.less'; +@import './home.less'; +@import './account-base.less'; diff --git a/Web/src/assets/style/dark/pages/login.less b/Web/src/assets/style/dark/pages/login.less new file mode 100644 index 0000000..d4a7bcd --- /dev/null +++ b/Web/src/assets/style/dark/pages/login.less @@ -0,0 +1,89 @@ +@import (reference) '../extend.less'; +.yo-login { + position: fixed; + top: 0; + left: 0; + + width: 100%; + height: 100%; + >img { + display: block; + + width: 100%; + height: 100%; + + object-fit: cover; + } + &::before { + position: absolute; + top: 0; + left: 0; + + width: 100%; + height: 100%; + + content: ''; + + background: fade(@black, 30%) url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABZJREFUeNpiMLJ0+w8EDIwgAgQAAgwAUdAHrAFSJ6cAAAAASUVORK5CYII=); + } + &--placeholder { + position: absolute; + top: 50%; + left: 0; + + width: 100%; + height: 0; + .container-sm { + display: flex; + align-items: center; + justify-content: flex-end; + + height: 0; + } + } + .ant-form { + width: 300px; + padding: @padding-lg; + + border-radius: @border-radius-base + 2px; + background: linear-gradient(45deg, @component-background, fade(@component-background, 80%)); + } + .ant-form-item { + margin-bottom: 0; + } + .ant-form-item-label { + padding: @padding-xs 0 0 !important; + + transition: @animation-duration-base; + transform: translate(0); + >label { + font-weight: normal !important; + + color: fade(@white, 40%); + } + } + &--label { + .ant-form-item-label { + transform: translate(11px, 28px); + } + } + .ant-input, + .ant-input-affix-wrapper { + color: fade(@white, 85%); + border-width: 0 0 @border-width-base 0 !important; + border-color: fade(@white, 10%); + background-color: transparent; + } + .ant-input:hover, + .ant-input:focus, + .ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover, + .ant-input-affix-wrapper:focus, + .ant-input-affix-wrapper-focused { + border-width: 0 0 @border-width-base 0 !important; + border-color: @primary-color; + box-shadow: none !important; + } + .ant-input::placeholder { + font-size: @font-size-base; + } +} diff --git a/Web/src/assets/style/dark/public.less b/Web/src/assets/style/dark/public.less new file mode 100644 index 0000000..ee4716d --- /dev/null +++ b/Web/src/assets/style/dark/public.less @@ -0,0 +1,45 @@ +@import (reference) './extend.less'; +.yo-map { + &-container { + position: relative; + + padding: @padding-sm; + + border: @border-width-base @border-style-base @border-color-split; + border-radius: @border-radius-base; + background-color: @component-background; + .amap-icon { + img { + width: 25px; + } + } + } + &--search { + position: absolute; + top: @padding-md; + left: @padding-md; + z-index: 20; + + width: 25%; + min-width: 300px; + + background-color: @component-background; + box-shadow: @box-shadow-base; + } +} +.yo-adorn { + &--house-top { + height: 65px; + + background: url('~assets/image/adorn/house-top-01.png') no-repeat bottom right; + } +} +a.link-gray { + color: fade(@white, 50%); + &:hover { + color: @link-hover-color; + } + &:active { + color: @link-active-color; + } +} diff --git a/Web/src/assets/style/dark/theme/README.md b/Web/src/assets/style/dark/theme/README.md new file mode 100644 index 0000000..d6f8b27 --- /dev/null +++ b/Web/src/assets/style/dark/theme/README.md @@ -0,0 +1 @@ +/** 在此文件夹中添加控制主题颜色的less文件 **/ \ No newline at end of file diff --git a/Web/src/assets/style/dark/theme/primary.less b/Web/src/assets/style/dark/theme/primary.less new file mode 100644 index 0000000..01fb33e --- /dev/null +++ b/Web/src/assets/style/dark/theme/primary.less @@ -0,0 +1,5 @@ +@import '../index.less'; +@primary-color: #00a091; +@error-color: @red-7; +@font-size-base: 13px; +@border-radius-base: 0; diff --git a/Web/src/assets/style/default/extend.less b/Web/src/assets/style/default/extend.less new file mode 100644 index 0000000..4b038cc --- /dev/null +++ b/Web/src/assets/style/default/extend.less @@ -0,0 +1,11 @@ +@import '~antd/dist/antd.less'; +@padding-xxs: 4px; +@padding-xl: 32px; +body { + line-height: 1.42857143; +} +#root { + transition: @animation-duration-slow opacity; + + opacity: 1 !important; +} diff --git a/Web/src/assets/style/default/index.less b/Web/src/assets/style/default/index.less new file mode 100644 index 0000000..8e259cf --- /dev/null +++ b/Web/src/assets/style/default/index.less @@ -0,0 +1,36 @@ +@import './extend.less'; +@import './lib/visibility.less'; +@import './lib/container.less'; +@import './lib/align.less'; +@import './lib/font-size.less'; +@import './lib/text-color.less'; +@import './lib/margin.less'; +@import './lib/width-height.less'; +@import './lib/scrollbar.less'; +@import './main.less'; +@import './lib/button.less'; +@import './lib/card.less'; +@import './lib/table.less'; +@import './lib/list.less'; +@import './lib/form.less'; +@import './lib/form-page.less'; +@import './lib/page.less'; +@import './lib/description.less'; +@import './lib/input.less'; +@import './lib/select.less'; +@import './lib/checkbox.less'; +@import './lib/radio.less'; +@import './lib/cascader.less'; +@import './lib/upload.less'; +@import './lib/dropdown.less'; +@import './lib/modal.less'; +@import './lib/tree-layout.less'; +@import './lib/authority-view.less'; +@import './lib/icon-selector.less'; +@import './lib/color-selector.less'; +@import './lib/anchor.less'; +@import './lib/disabled.less'; +@import './lib/bs.less'; +@import './theme/primary.less'; +@import './public.less'; +@import './pages/index.less'; diff --git a/Web/src/assets/style/default/lib/align.less b/Web/src/assets/style/default/lib/align.less new file mode 100644 index 0000000..50f0bda --- /dev/null +++ b/Web/src/assets/style/default/lib/align.less @@ -0,0 +1,9 @@ +.text-left { + text-align: left !important; +} +.text-center { + text-align: center !important; +} +.text-right { + text-align: right !important; +} diff --git a/Web/src/assets/style/default/lib/anchor.less b/Web/src/assets/style/default/lib/anchor.less new file mode 100644 index 0000000..e37e90f --- /dev/null +++ b/Web/src/assets/style/default/lib/anchor.less @@ -0,0 +1,11 @@ +@import (reference) '../extend.less'; +.ant-anchor-ink-ball { + width: 2px; + height: 28px; + + transform: translate(-50%, -10px); + + border: 0; + border-radius: 0; + background-color: @primary-color; +} diff --git a/Web/src/assets/style/default/lib/authority-view.less b/Web/src/assets/style/default/lib/authority-view.less new file mode 100644 index 0000000..94c2f71 --- /dev/null +++ b/Web/src/assets/style/default/lib/authority-view.less @@ -0,0 +1,53 @@ +@import (reference) '../extend.less'; +.yo-authority-view { + &--container { + >.ant-descriptions-view { + border: 0; + } + } + .ant-descriptions-item-label { + width: 150px; + } + .ant-descriptions { + clear: both; + + margin-bottom: @padding-sm; + .ant-descriptions-view { + overflow: visible; + } + &:last-child { + margin-bottom: 0; + } + } + .ant-descriptions-item-content { + padding: @padding-sm @padding-md; + .yo-authority-view--checkbox { + display: inline-block; + + width: 150px; + margin: @padding-xxs 0; + .ant-checkbox-wrapper { + margin: 0; + } + } + } + .ant-card-grid { + width: 25%; + margin-bottom: @padding-sm; + padding: @padding-xs; + + cursor: pointer; + } + .ant-card { + margin-bottom: 0; + + background-color: transparent; + &-body { + margin: -1px 0 0 -1px; + padding: 0; + } + .ant-card-grid { + margin-bottom: 0; + } + } +} diff --git a/Web/src/assets/style/default/lib/bs.less b/Web/src/assets/style/default/lib/bs.less new file mode 100644 index 0000000..2c5418f --- /dev/null +++ b/Web/src/assets/style/default/lib/bs.less @@ -0,0 +1,81 @@ +@import (reference) '../extend.less'; +.bs-list { + &-card { + background-color: @component-background; + box-shadow: inset 0 0 0 @border-width-base @border-color-split; + } + &-title { + line-height: 32px; + + height: 32px; + padding: 0 @padding-lg 0 @padding-md; + + color: @white; + border-top-right-radius: 999px; + border-bottom-right-radius: 999px; + background: linear-gradient(90deg, @primary-color, lighten(@primary-color, 20%)); + } + &-status { + line-height: 32px; + + position: relative; + + height: 32px; + padding: 0 @padding-md 0 @padding-xs; + + color: @white; + &::before { + position: absolute; + top: 0; + left: -20px; + + content: ''; + pointer-events: none; + + border-top: 32px solid; + border-left: 20px solid transparent; + } + &.success { + background-color: @success-color; + &::before { + border-top-color: @success-color; + } + } + &.warning { + background-color: @warning-color; + &::before { + border-top-color: @warning-color; + } + } + &.error { + background-color: @error-color; + &::before { + border-top-color: @error-color; + } + } + } + &-body { + padding: @padding-md; + } + &-content { + display: flex; + align-items: center; + flex-wrap: nowrap; + + gap: 8px; + } + &-icon { + font-size: @font-size-lg + 4px; + + color: #d6e0e7; + } + &-text { + overflow: hidden; + flex: 1; + + white-space: nowrap; + text-overflow: ellipsis; + + color: fade(@black, 50%); + } +} diff --git a/Web/src/assets/style/default/lib/button.less b/Web/src/assets/style/default/lib/button.less new file mode 100644 index 0000000..c14e462 --- /dev/null +++ b/Web/src/assets/style/default/lib/button.less @@ -0,0 +1,4 @@ +@import (reference) '../extend.less'; +.ant-btn { + box-shadow: none; +} diff --git a/Web/src/assets/style/default/lib/card.less b/Web/src/assets/style/default/lib/card.less new file mode 100644 index 0000000..7ae210e --- /dev/null +++ b/Web/src/assets/style/default/lib/card.less @@ -0,0 +1,4 @@ +@import (reference) '../extend.less'; +.ant-card { + margin-bottom: @padding-md; +} diff --git a/Web/src/assets/style/default/lib/cascader.less b/Web/src/assets/style/default/lib/cascader.less new file mode 100644 index 0000000..88e0aee --- /dev/null +++ b/Web/src/assets/style/default/lib/cascader.less @@ -0,0 +1,6 @@ +@import (reference) '../extend.less'; +.ant-cascader-picker-arrow { + svg { + transform: scaleY(.75); + } +} diff --git a/Web/src/assets/style/default/lib/checkbox.less b/Web/src/assets/style/default/lib/checkbox.less new file mode 100644 index 0000000..be80e3e --- /dev/null +++ b/Web/src/assets/style/default/lib/checkbox.less @@ -0,0 +1,10 @@ +@import (reference) '../extend.less'; +.ant-checkbox-wrapper { + margin-right: @padding-xs; + &:last-child { + margin-right: 0; + } + +.ant-checkbox-wrapper { + margin-left: 0; + } +} diff --git a/Web/src/assets/style/default/lib/color-selector.less b/Web/src/assets/style/default/lib/color-selector.less new file mode 100644 index 0000000..e030c16 --- /dev/null +++ b/Web/src/assets/style/default/lib/color-selector.less @@ -0,0 +1,18 @@ +@import (reference) '../extend.less'; +.ant-select-dropdown { + .chrome-picker { + width: auto !important; + margin: -@padding-xxs 0; + + border-radius: 0 !important; + background: transparent !important; + box-shadow: none !important; + } +} +.color-selector--palette { + width: 32px; + height: 32px; + + border-radius: @border-radius-base; + box-shadow: inset 0 0 0 @border-width-base @border-color-base, inset 0 0 0 3px @white; +} diff --git a/Web/src/assets/style/default/lib/container.less b/Web/src/assets/style/default/lib/container.less new file mode 100644 index 0000000..fba352e --- /dev/null +++ b/Web/src/assets/style/default/lib/container.less @@ -0,0 +1,43 @@ +@import (reference) '../extend.less'; +@container-width: 1400px; +.container-base { + margin: 0 auto; + padding: 0 @padding-md; +} +.container { + width: @container-width; + +.container-base(); +} +@media (max-width: 1400px) { + .container { + width: auto; + } +} +.container-md { + width: @container-width - 200px; + +.container-base(); +} +.container-sm { + width: @container-width - 400px; + +.container-base(); +} +.container-xs { + width: @container-width - 600px; + +.container-base(); +} +.container-xxs { + width: @container-width - 700px; + +.container-base(); +} +.container-fluid { + .container-base(); +} +.container-flex { + display: flex; + justify-content: space-between; +} diff --git a/Web/src/assets/style/default/lib/description.less b/Web/src/assets/style/default/lib/description.less new file mode 100644 index 0000000..cfe090a --- /dev/null +++ b/Web/src/assets/style/default/lib/description.less @@ -0,0 +1,10 @@ +@import (reference) '../extend.less'; +.ant-descriptions-bordered { + .ant-descriptions-view { + >table { + border-collapse: collapse; + + background-color: @component-background; + } + } +} diff --git a/Web/src/assets/style/default/lib/disabled.less b/Web/src/assets/style/default/lib/disabled.less new file mode 100644 index 0000000..c975e17 --- /dev/null +++ b/Web/src/assets/style/default/lib/disabled.less @@ -0,0 +1,59 @@ +@import (reference) '../extend.less'; +.ant-btn-primary-disabled, +.ant-btn-primary.disabled, +.ant-btn-primary[disabled], +.ant-btn-primary-disabled:hover, +.ant-btn-primary.disabled:hover, +.ant-btn-primary[disabled]:hover, +.ant-btn-primary-disabled:focus, +.ant-btn-primary.disabled:focus, +.ant-btn-primary[disabled]:focus, +.ant-btn-primary-disabled:active, +.ant-btn-primary.disabled:active, +.ant-btn-primary[disabled]:active, +.ant-btn-primary-disabled.active, +.ant-btn-primary.disabled.active, +.ant-btn-primary[disabled].active { + opacity: .5; + color: @btn-primary-color; + border-color: @btn-primary-bg; + background-color: @btn-primary-bg; + box-shadow: @btn-primary-shadow; + text-shadow: @btn-text-shadow; +} +.ant-btn-danger-disabled, +.ant-btn-danger.disabled, +.ant-btn-danger[disabled], +.ant-btn-danger-disabled:hover, +.ant-btn-danger.disabled:hover, +.ant-btn-danger[disabled]:hover, +.ant-btn-danger-disabled:focus, +.ant-btn-danger.disabled:focus, +.ant-btn-danger[disabled]:focus, +.ant-btn-danger-disabled:active, +.ant-btn-danger.disabled:active, +.ant-btn-danger[disabled]:active, +.ant-btn-danger-disabled.active, +.ant-btn-danger.disabled.active, +.ant-btn-danger[disabled].active { + opacity: .5; + color: @btn-danger-color; + border-color: @btn-danger-border; + background-color: @btn-danger-bg; + box-shadow: @btn-primary-shadow; + text-shadow: @btn-text-shadow; +} +.ant-radio-button-wrapper-disabled, +.ant-radio-button-wrapper-disabled:first-child, +.ant-radio-button-wrapper-disabled:hover { + opacity: .5; + color: @radio-button-color; + background-color: @radio-button-bg; +} +.ant-radio-button-wrapper-disabled.ant-radio-button-wrapper-checked { + opacity: .5; + color: @btn-primary-color; + border-color: @btn-primary-bg; + background-color: @btn-primary-bg; + box-shadow: @btn-primary-shadow; +} diff --git a/Web/src/assets/style/default/lib/dropdown.less b/Web/src/assets/style/default/lib/dropdown.less new file mode 100644 index 0000000..4accbdb --- /dev/null +++ b/Web/src/assets/style/default/lib/dropdown.less @@ -0,0 +1,6 @@ +@import (reference) '../extend.less'; +.ant-dropdown-trigger { + .anticon-down { + transform: scaleY(.75); + } +} diff --git a/Web/src/assets/style/default/lib/font-size.less b/Web/src/assets/style/default/lib/font-size.less new file mode 100644 index 0000000..67f8742 --- /dev/null +++ b/Web/src/assets/style/default/lib/font-size.less @@ -0,0 +1,25 @@ +@import (reference) '../extend.less'; +h1, +.h1 { + font-size: 36px; +} +h2, +.h2 { + font-size: 32px; +} +h3, +.h3 { + font-size: 24px; +} +h4, +.h4 { + font-size: 18px; +} +h5, +.h5 { + font-size: 16px; +} +h6, +.h6 { + font-size: 14px; +} diff --git a/Web/src/assets/style/default/lib/font-weight.less b/Web/src/assets/style/default/lib/font-weight.less new file mode 100644 index 0000000..b24c9c7 --- /dev/null +++ b/Web/src/assets/style/default/lib/font-weight.less @@ -0,0 +1,24 @@ +@import (reference) '../extend.less'; +body { + font-weight: 100; +} +h1, +h2, +h3, +h4, +h5, +h6 { + font-weight: 300; +} + +@btn-font-weight: 100; +.ant-card-meta-title { + font-weight: inherit; +} +.ant-table-thead { + >tr { + >th { + font-weight: 500; + } + } +} diff --git a/Web/src/assets/style/default/lib/form-page.less b/Web/src/assets/style/default/lib/form-page.less new file mode 100644 index 0000000..270d18a --- /dev/null +++ b/Web/src/assets/style/default/lib/form-page.less @@ -0,0 +1,169 @@ +@import (reference) '../extend.less'; + +.yo-form-page { + position: relative; + + height: 100%; + + .yo-tab-external-mount { + display: flex; + flex-direction: column; + + height: 100%; + + >.ant-tabs { + >.ant-tabs-nav { + margin-bottom: 0; + padding: 0 @padding-md; + + background-color: @component-background; + + &.ant-tabs-card-bar { + .ant-tabs-nav-container { + height: @tabs-card-height + @padding-xs; + padding: (@tabs-card-height + @padding-xs - @btn-height-base) / 2 @padding-md; + } + + .ant-tabs-extra-content { + padding: (@tabs-card-height + @padding-xs - @btn-height-base) / 2 @padding-md; + } + + .ant-tabs-tab { + transition: none; + + .ant-btn(); + + &:hover { + border-color: @btn-default-border; + } + } + + .ant-tabs-tab { + line-height: @btn-height-base; + + margin-right: -1px; + } + + .ant-tabs-tab-active { + z-index: 2; + + color: @btn-primary-color; + border-color: @btn-primary-bg; + background-color: @btn-primary-bg; + + &:hover { + color: @btn-primary-color; + border-color: color(~`colorPalette('@{btn-primary-bg}', 5) `); + background-color: color(~`colorPalette('@{btn-primary-bg}', 5) `); + } + } + } + } + } + + >.yo-tab-external-mount-content { + position: relative; + + flex: 1; + + >.yo-tab-external-tabpane { + position: absolute; + top: 0; + left: 0; + + overflow: auto; + + width: 100%; + height: 100%; + + &.yo-tab-external-tabpane-inactive { + pointer-events: none; + + opacity: 0; + } + } + } + } + + &--bar { + position: sticky; + bottom: 0; + z-index: 200; + + &--with-tab { + position: absolute; + + display: flex; + align-items: flex-end; + + width: 100%; + height: 0; + padding-right: 7px; + + >.container-fluid { + width: 100%; + } + + ~.yo-tab-external-mount { + >.yo-tab-external-mount-content { + >.yo-tab-external-tabpane { + padding-bottom: @padding-xs * 2 + @btn-height-base + @border-width-base * 2; + } + } + } + } + } + + &--bar-inner { + display: flex; + justify-content: space-between; + + padding: @padding-xs @padding-md; + + border: @border-width-base @border-style-base @border-color-split; + background-color: fade(@component-background, 80%); + + backdrop-filter: blur(5px); + + >:first-child { + flex: 1; + } + + .ant-btn { + margin-left: @padding-sm; + } + } + + &--body { + >.ant-card-body { + padding: 0; + + >section { + padding: @padding-lg; + + >h5 { + padding-left: @padding-md; + + border-left: @padding-xs @border-style-base @primary-color; + } + } + } + } + + &-layout { + display: flex; + flex-direction: column; + + height: 100%; + + &--horizontal { + flex-direction: row; + } + } + + &--header { + padding: @padding-md 0; + + background-color: @component-background; + } +} \ No newline at end of file diff --git a/Web/src/assets/style/default/lib/form.less b/Web/src/assets/style/default/lib/form.less new file mode 100644 index 0000000..a53f1c6 --- /dev/null +++ b/Web/src/assets/style/default/lib/form.less @@ -0,0 +1,401 @@ +@import (reference) '../extend.less'; +.yo-form { + &--fixed { + width: 660px; + margin: 0 auto; + } + .h1, + .h2, + .h3, + .h4, + .h5, + .h6 { + color: darken(@white, 40%); + } + .h3 { + font-size: 16px; + } + .h4 { + font-size: 15px; + } + .yo-form-group { + margin-bottom: @padding-md; + } + .ant-form-item { + display: flex; + justify-content: space-between; + + margin-bottom: -1px; + padding: @padding-xs @padding-md; + + border: @border-width-base @border-style-base @border-color-split; + background-color: @component-background; + + @box-shadow-focused: 0 0 0 2px fade(@primary-color, 50%); + @control-background: lighten(@black, 95%) !important; + &::before, + &::after { + content: none; + } + .ant-form-item-control { + text-align: right; + } + .ant-input, + .ant-input-number, + .ant-mentions, + .ant-select-selector, + .ant-input-group-addon, + .ant-cascader-picker, + .ant-input-affix-wrapper, + .ant-picker { + z-index: 1; + + text-align: left; + + color: lighten(@black, 10%); + border: 0; + background-color: @control-background; + } + .ant-mentions { + textarea { + background-color: @control-background; + } + } + .focus { + z-index: 2 !important; + + box-shadow: @box-shadow-focused; + } + .unfoucs { + z-index: 1 !important; + + box-shadow: none; + } + .ant-input { + &:focus { + .focus(); + } + } + .ant-input-affix-wrapper { + >.ant-input { + &:focus { + .unfoucs(); + } + } + } + .ant-input-number-focused, + .ant-mentions-focused { + .focus(); + } + .ant-select-focused, + .ant-select-open { + z-index: 2; + .ant-select-selection { + .focus(); + } + } + .ant-cascader-picker:focus { + .ant-cascader-input { + .focus(); + } + } + .ant-input-affix-wrapper:focus, + .ant-input-affix-wrapper-focused { + .focus(); + } + .ant-select-focused:not(.ant-select-disabled).ant-select:not(.ant-select-customize-input) { + .ant-select-selector { + .focus(); + } + } + .ant-picker-focused { + .focus(); + } + .ant-input-group { + .ant-row-flex { + .ant-select { + width: 100%; + } + } + .ant-input-group-addon { + z-index: 0; + } + } + .ant-cascader-picker-clear { + background-color: @control-background; + } + } + .ant-form-item-label { + overflow: hidden; + flex: 1 1 auto; + + margin-right: @padding-md; + + text-align: left; + text-overflow: ellipsis; + >label { + color: lighten(@black, 10%); + &::after { + content: none; + } + } + } + .ant-form-item-control { + flex: 0 0 61.8%; + + width: 61.8%; + min-width: 220px; + } + .yo-form--fluid { + .ant-form-item-control { + flex: 0 0 100%; + + width: 100%; + + text-align: inherit; + } + } + .yo-form--short { + .ant-form-item-control { + flex: 0 0 38.2%; + + width: 38.2%; + } + } + // 上下布局 + .yo-form--vertical { + display: block; + .ant-form-item-control { + text-align: left; + } + &-radio { + .ant-radio-wrapper { + line-height: @padding-lg; + + display: block; + + margin-right: 0; + +.ant-radio-wrapper { + margin-top: @padding-sm; + } + } + } + .ant-form-item-control-wrapper { + margin-left: @padding-lg; + } + .ant-form-explain { + margin-left: 0; + } + } + .yo-form-link { + display: flex; + align-items: center; + + margin-bottom: -1px; + padding: @padding-md; + + cursor: pointer; + + border: @border-width-base @border-style-base @border-color-split; + background-color: @white; + &:hover { + background-color: darken(@white, 1%); + } + &:active { + background-color: darken(@white, 3%); + } + &--title { + font-size: @font-size-base + 1px; + + flex: 1; + } + &--content { + flex: 1; + + text-align: right; + + color: fade(@black, 35%); + } + &--right-icon { + margin-left: @padding-xs; + + color: fade(@black, 50%); + } + } + &.yo-form--no-border { + .ant-form-item { + padding: @padding-md 0; + + border-right: 0; + border-left: 0; + &:first-child { + border-top: 0; + } + &:last-child { + border-bottom: 0; + } + } + .yo-form-group { + margin-bottom: 0; + } + } +} +.yo-modal-form { + .ant-modal-body { + padding: 0; + } + .yo-form { + h1, + h2, + h3, + h4, + h5 { + margin: 0; + padding: @padding-sm @padding-md @padding-xs; + } + .yo-form-group { + margin-bottom: 0; + } + .ant-form-item { + border-right: 0; + border-left: 0; + &:first-child { + margin-top: -1px; + } + } + } +} +.yo-drawer-form { + .ant-drawer-wrapper-body { + display: flex; + flex-direction: column; + } + .ant-drawer-header { + flex: 0 0 auto; + } + .ant-drawer-body { + position: relative; + + flex: 1 1 100%; + + padding: 0; + } + .yo-drawer-form--body { + position: absolute; + top: 0; + bottom: @border-width-base + 20px + @padding-md * 2; + + overflow: auto; + + width: 100%; + padding: @padding-lg; + } + .ant-drawer-footer { + position: absolute; + left: 0; + bottom: 0; + + width: 100%; + padding: 10px @padding-md; + + text-align: right; + + border-top: @border-width-base @border-style-base @border-color-split; + background: @component-background; + button+button { + margin-left: @padding-xs; + } + } +} +.ant-form { + fieldset { + margin-bottom: @padding-lg; + padding: @padding-md; + + border: @border-width-base @border-style-base @border-color-split; + } + legend { + display: inline-block; + + width: auto; + margin-bottom: 0; + padding: 0 @padding-md; + + border: 0; + border-radius: @border-radius-base; + } +} +.ant-form-horizontal { + .ant-form-item-label { + line-height: 1.5; + + margin-right: @padding-xs; + + white-space: normal; + } +} +.ant-form-vertical { + .ant-form-item-label { + >label { + font-weight: bold; + } + } +} +.ant-form-item-required { + &::before { + content: '' !important; + vertical-align: middle; + + border-top: 4px solid transparent; + border-bottom: 4px solid transparent; + border-left: 5px solid @highlight-color; + background: none; + } +} +.yo-form-page { + .ant-form { + .ant-radio-button-wrapper { + margin-right: @padding-xs; + margin-bottom: @padding-xs; + + border-left: @border-width-base @border-style-base @border-color-base; + &.ant-radio-button-wrapper-checked { + border-left-color: @primary-color; + } + &:not(:first-child) { + &::before { + content: none; + } + } + } + } +} +.yo-filter-item { + display: flex; + flex-flow: row wrap; + + margin-bottom: 0; + .ant-tag-checkable { + font-size: @font-size-base; + } + .ant-radio-button-wrapper { + border: 0 !important; + background-color: transparent; + &:hover { + color: @red-6; + } + } + .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled) { + border-color: @red-6; + background-color: @red-6; + &:hover { + border-color: @red-5; + background-color: @red-5; + } + &:active { + border-color: @red-7; + background-color: @red-7; + box-shadow: none; + } + } +} diff --git a/Web/src/assets/style/default/lib/icon-selector.less b/Web/src/assets/style/default/lib/icon-selector.less new file mode 100644 index 0000000..3438d23 --- /dev/null +++ b/Web/src/assets/style/default/lib/icon-selector.less @@ -0,0 +1,59 @@ +@import (reference) '../extend.less'; +.yo-icon-selector { + .ant-drawer-wrapper-body { + display: flex; + flex-direction: column; + } + .ant-drawer-body { + position: relative; + + flex: 1 1 100%; + + padding: 0; + } + .ant-tabs { + height: 100%; + .ant-tabs-content-left { + position: relative; + + height: 100%; + .ant-tabs-tabpane { + position: absolute; + top: 0; + left: 0; + + overflow-y: auto; + + width: 100%; + height: 100%; + padding: @padding-lg; + } + } + } + .ant-card { + margin: 0; + } + .ant-card-grid { + width: 25%; + + text-align: center; + >span { + font-size: @font-size-sm; + + display: block; + + margin: @padding-xxs -@padding-lg 0; + + white-space: nowrap; + + color: fade(@black, 50%); + } + &.yo-icon--selected { + color: @white; + background-color: @primary-color; + >span { + color: fade(@white, 50%); + } + } + } +} diff --git a/Web/src/assets/style/default/lib/input.less b/Web/src/assets/style/default/lib/input.less new file mode 100644 index 0000000..d464a3c --- /dev/null +++ b/Web/src/assets/style/default/lib/input.less @@ -0,0 +1,4 @@ +@import (reference) '../extend.less'; +.yo-addon { + padding: 0 @padding-xs; +} diff --git a/Web/src/assets/style/default/lib/list.less b/Web/src/assets/style/default/lib/list.less new file mode 100644 index 0000000..2dbb2de --- /dev/null +++ b/Web/src/assets/style/default/lib/list.less @@ -0,0 +1,95 @@ +@import (reference) '../extend.less'; +.ant-list-bordered { + border-color: @border-color-split; + background-color: @white; +} +.yo-list { + @title-color: lighten(@black, 70%); + @value-color: lighten(@black, 30%); + &-content--h { + display: flex; + align-items: center; + &--item { + margin-left: @padding-xl; + >span { + line-height: 20px; + + color: @title-color; + } + >p { + line-height: 22px; + + margin-top: @padding-xxs; + margin-bottom: 0; + + color: @value-color; + } + } + } + .ant-pagination { + margin: @padding-md 0; + } + .ant-descriptions { + .ant-descriptions-item-label { + color: @title-color; + } + .ant-descriptions-item-content { + color: @value-color; + } + .ant-descriptions-row { + &:last-child { + >td { + padding-bottom: 0; + } + } + } + } + &--scroll { + position: relative; + + overflow-x: auto; + } + .ant-list-items { + min-width: 1000px; + } + .ant-list-item { + transition: @animation-duration-slow; + transition-property: background, border-bottom-color; + &:hover { + border-bottom-color: lighten(@primary-color, 30%); + background: linear-gradient(90deg, transparent 10%, @background-color-light 70%, transparent); + } + } + &-container { + position: relative; + &::before, + &::after { + position: absolute; + top: 0; + bottom: 0; + z-index: 3; + + width: 30px; + + content: ''; + transition: box-shadow @animation-duration-slow; + pointer-events: none; + } + &::before { + left: 0; + } + &::after { + right: 0; + } + &.yo-list--ping-left { + &::before { + box-shadow: inset 10px 0 8px -8px fade(@black, 15%); + } + } + &.yo-list--ping-right { + &::after { + box-shadow: inset -10px 0 8px -8px fade(@black, 15%); + } + } + } +} diff --git a/Web/src/assets/style/default/lib/margin.less b/Web/src/assets/style/default/lib/margin.less new file mode 100644 index 0000000..bdc8235 --- /dev/null +++ b/Web/src/assets/style/default/lib/margin.less @@ -0,0 +1,68 @@ +@import (reference) '../extend.less'; +@margin-padding-position: ~'', ~'-top', ~'-left', ~'-right', ~'-bottom'; +@margin-padding-position-name: ~'', ~'t', ~'l', ~'r', ~'b'; + +.margin-padding (@i) when (@i <=length(@margin-padding-position)) { + @position: extract(@margin-padding-position, @i); + @name: extract(@margin-padding-position-name, @i); + + .m@{name}-xl { + margin@{position}: @padding-xl !important; + } + + .m@{name}-lg { + margin@{position}: @padding-lg !important; + } + + .m@{name}-md { + margin@{position}: @padding-md !important; + } + + .m@{name}-sm { + margin@{position}: @padding-sm !important; + } + + .m@{name}-xs { + margin@{position}: @padding-xs !important; + } + + .m@{name}-xxs { + margin@{position}: @padding-xxs !important; + } + + .p@{name}-xl { + padding@{position}: @padding-xl !important; + } + + .p@{name}-lg { + padding@{position}: @padding-lg !important; + } + + .p@{name}-md { + padding@{position}: @padding-md !important; + } + + .p@{name}-sm { + padding@{position}: @padding-sm !important; + } + + .p@{name}-xs { + padding@{position}: @padding-xs !important; + } + + .p@{name}-xxs { + padding@{position}: @padding-xxs !important; + } + + .m@{name}-none { + margin@{position}: 0 !important; + } + + .p@{name}-none { + padding@{position}: 0 !important; + } + + .margin-padding(@i + 1); +} + +.margin-padding(1); \ No newline at end of file diff --git a/Web/src/assets/style/default/lib/modal.less b/Web/src/assets/style/default/lib/modal.less new file mode 100644 index 0000000..f87defd --- /dev/null +++ b/Web/src/assets/style/default/lib/modal.less @@ -0,0 +1,41 @@ +@import (reference) '../extend.less'; +.ant-modal-content { + background-color: fade(@primary-color, 50%); + + backdrop-filter: blur(5px); +} +.ant-modal-header { + padding: @padding-sm @padding-md; + + border-bottom: 0; + background-color: transparent; +} +.ant-modal-title { + color: fade(@white, 85%); +} +.ant-modal-body { + background-color: @component-background; +} +.ant-modal-footer { + background-color: @component-background; +} +.ant-modal-close { + top: 10px; + right: 10px; + + color: fade(@white, 75%); + background-color: @error-color; + &:hover, + &:focus { + color: @white; + } +} +.ant-modal-close-x { + line-height: 26px; + + width: 26px; + height: 26px; +} +.ant-modal-mask { + backdrop-filter: blur(3px); +} diff --git a/Web/src/assets/style/default/lib/page.less b/Web/src/assets/style/default/lib/page.less new file mode 100644 index 0000000..bda6aa4 --- /dev/null +++ b/Web/src/assets/style/default/lib/page.less @@ -0,0 +1,8 @@ +@import (reference) '../extend.less'; +.yo-page { + &--header { + padding: @padding-md 0; + + background-color: @white; + } +} diff --git a/Web/src/assets/style/default/lib/radio.less b/Web/src/assets/style/default/lib/radio.less new file mode 100644 index 0000000..ab0b99f --- /dev/null +++ b/Web/src/assets/style/default/lib/radio.less @@ -0,0 +1,7 @@ +@import (reference) '../extend.less'; +.ant-radio-button-wrapper-checked { + &:not(.ant-radio-button-wrapper-disabled), + &:not(.ant-radio-button-wrapper-disabled):hover { + box-shadow: none; + } +} diff --git a/Web/src/assets/style/default/lib/scrollbar.less b/Web/src/assets/style/default/lib/scrollbar.less new file mode 100644 index 0000000..bcdea38 --- /dev/null +++ b/Web/src/assets/style/default/lib/scrollbar.less @@ -0,0 +1,14 @@ +@import (reference) '../extend.less'; +::-webkit-scrollbar { + width: 7px; + height: 7px; + + background-color: fade(@black, 10%); +} +::-webkit-scrollbar-thumb { + border-radius: @border-radius-base; + background-color: fade(@black, 30%); +} +::-webkit-scrollbar-thumb:active { + background-color: fade(@black, 50%); +} diff --git a/Web/src/assets/style/default/lib/select.less b/Web/src/assets/style/default/lib/select.less new file mode 100644 index 0000000..5f80810 --- /dev/null +++ b/Web/src/assets/style/default/lib/select.less @@ -0,0 +1,6 @@ +@import (reference) '../extend.less'; +.ant-select-arrow { + .anticon-down { + transform: scaleY(.75); + } +} diff --git a/Web/src/assets/style/default/lib/table.less b/Web/src/assets/style/default/lib/table.less new file mode 100644 index 0000000..72993b8 --- /dev/null +++ b/Web/src/assets/style/default/lib/table.less @@ -0,0 +1,255 @@ +@import (reference) '../extend.less'; +.yo-query-bar { + margin-bottom: @padding-xs; + .ant-form-inline { + .ant-form-item { + margin-bottom: @padding-xs; + } + } +} +.yo-action-bar { + display: flex; + justify-content: space-between; + + margin-bottom: @padding-md; + &--actions { + >.ant-btn, + >.ant-btn-group { + +.ant-btn, + +.ant-btn-group { + margin-left: @padding-xs; + } + } + } +} +.ant-table { + .ant-table-container { + &::before, + &::after { + z-index: 3; + } + } +} +.ant-table-thead { + th.ant-table-column-has-sorters { + &:hover { + background-color: darken(@background-color-base, 5%); + } + } +} +.ant-table-tbody { + >tr { + >td { + transition-property: background, border-bottom-color; + } + } + >tr.ant-table-row:hover { + >td { + border-bottom-color: lighten(@primary-color, 30%); + } + } +} +.ant-table-small { + >.ant-table-content { + >.ant-table-body { + margin: 0; + >table { + >.ant-table-thead { + >tr { + >th { + background-color: @table-selected-row-bg; + } + } + } + } + } + } +} +.ant-table-thead { + >tr { + >th { + font-weight: bold; + } + } +} +.ant-table-sticky-scroll { + display: none; +} +.ant-table-expanded-row>td { + border-right: @border-width-base @border-style-base @table-border-color !important; +} +.yo-table { + .ant-table { + margin: 0 !important; + } + .border-right-none { + border-right-width: 0 !important; + &:last-child { + border-right-width: 1px !important; + } + } + .ant-table-content { + .ant-table-body { + overflow-x: auto !important; + >table { + >.ant-table-thead { + >tr { + >th { + .border-right-none(); + } + } + } + >.ant-table-tbody { + >tr { + >td { + .border-right-none(); + } + } + } + } + } + .ant-table-fixed-left { + .ant-table-thead { + >tr { + >th { + border-right-width: 0 !important; + } + } + } + .ant-table-tbody { + >tr { + >td { + border-right-width: 0 !important; + } + } + } + } + .ant-table-fixed-right { + .ant-table-fixed { + border-left-width: 0 !important; + } + .ant-table-thead { + >tr { + >th { + .border-right-none(); + } + } + } + .ant-table-tbody { + >tr { + >td { + .border-right-none(); + } + } + } + } + } + .ant-table-bordered { + >.ant-table-container { + border-top: @border-width-base @border-style-base @table-border-color; + } + } + &--row-no { + width: 30px !important; + + background-color: @table-header-bg; + } +} +.yo-table-actions { + display: inline-block; + + vertical-align: middle; + &--inner { + display: flex; + align-items: center; + + height: 18px; + } +} +.yo-table--column-setting { + width: 240px; + .ant-dropdown-menu-item { + display: flex; + align-items: center; + justify-content: space-between; + } + .anticon-pushpin { + transition: @animation-duration-slow; + transform: rotate(45deg); + + color: darken(@white, 40%); + } + .yo-table--fixed { + transform: rotate(-45deg); + } +} +.yo-menu-table { + .ant-table { + .ant-table-expand-icon-col { + width: 28px; + } + .ant-table-row-expand-icon-cell { + z-index: 1; + + padding-right: 0 !important; + + border-right: none !important; + +.ant-table-cell { + padding-left: 0; + } + } + .ant-table-tbody { + >.ant-table-expanded-row>td { + padding: 0; + + border-right: none !important; + .ant-table-wrapper { + margin-bottom: -1px; + + border: none; + .ant-table { + margin: 0 !important; + } + .ant-table-container { + border: none; + .ant-table-row-expand-icon-cell { + .ant-table-row-expand-icon { + left: @padding-md; + } + +.ant-table-cell { + padding-left: @padding-md; + } + } + .ant-table-tbody { + >tr { + &:last-child { + >td { + border-bottom: @border-width-base @border-style-base @table-border-color; + } + &:hover { + >td { + border-bottom-color: lighten(@primary-color, 30%); + } + } + } + } + } + } + } + } + } + } + .ant-card { + max-width: fit-content; + margin: @padding-sm @padding-xs @padding-sm @padding-xl; + + background: none; + .ant-card-grid { + width: 300px; + height: 90px; + padding: @padding-xs @padding-sm; + + background-color: @card-background; + } + } +} diff --git a/Web/src/assets/style/default/lib/text-color.less b/Web/src/assets/style/default/lib/text-color.less new file mode 100644 index 0000000..6b4dd9c --- /dev/null +++ b/Web/src/assets/style/default/lib/text-color.less @@ -0,0 +1,35 @@ +@import (reference) '../extend.less'; +.text-primary { + color: @primary-color !important; +} +.text-info { + color: @info-color !important; +} +.text-success { + color: @success-color !important; +} +.text-processing { + color: @processing-color !important; +} +.text-error, +.text-danger { + color: @error-color !important; +} +.text-highlight { + color: @highlight-color !important; +} +.text-warning { + color: @warning-color !important; +} +.text-gray { + color: fade(@black, 50%) !important; +} +.text-normal { + color: fade(@black, 30%) !important; +} +.text-white { + color: @white !important; +} +.text-black { + color: @black !important; +} diff --git a/Web/src/assets/style/default/lib/tree-layout.less b/Web/src/assets/style/default/lib/tree-layout.less new file mode 100644 index 0000000..5140cea --- /dev/null +++ b/Web/src/assets/style/default/lib/tree-layout.less @@ -0,0 +1,83 @@ +@import (reference) '../extend.less'; +@import (reference) './text-color.less'; +.yo-tree-layout { + position: absolute; + top: 0; + left: 0; + + width: 100%; + height: 100%; + .ant-layout-sider { + background-color: @component-background; + .ant-layout-header { + height: @layout-header-height - 20px; + + background-color: @component-background; + .header-actions { + .ant-input-search { + margin: (@layout-header-height - 20px - 32px) / 2 @padding-md; + } + } + } + } + &--collapsed { + position: absolute; + top: 0; + left: 0; + bottom: 0; + z-index: 4; + + transform: translateX(-100%); + &.open { + transform: translateX(0); + + box-shadow: 2px 0 8px fade(@black , 20%); + } + } + &--bar { + line-height: 20px; + + height: 20px; + padding: 0 @padding-md; + + text-align: right; + >.anticon { + margin-left: @padding-xs; + + cursor: pointer; + + color: fade(@black, 50%); + &:hover { + color: fade(@black, 80%); + } + } + } + &--content { + position: absolute; + top: @layout-header-height; + left: 0; + bottom: 0; + + overflow-y: auto; + + width: 100%; + &::-webkit-scrollbar { + width: 5px; + height: 5px; + + background-color: @component-background; + } + &::-webkit-scrollbar-thumb { + background-color: transparent; + } + &:hover::-webkit-scrollbar-thumb { + background-color: fade(@black, 30%); + } + &::-webkit-scrollbar-thumb:active { + background-color: fade(@black, 45%); + } + } + .ant-tree { + .text-gray(); + } +} diff --git a/Web/src/assets/style/default/lib/upload.less b/Web/src/assets/style/default/lib/upload.less new file mode 100644 index 0000000..a2aa434 --- /dev/null +++ b/Web/src/assets/style/default/lib/upload.less @@ -0,0 +1,29 @@ +@import (reference) '../extend.less'; +.ant-upload-list-text { + display: flex; + flex-wrap: wrap; + .ant-upload-list-item { + height: auto; + margin-right: @padding-xs; + } + .ant-upload-list-item-info { + position: relative; + + padding: @padding-xxs @padding-xs; + + border: @border-width-base @border-style-base @border-color-split; + .anticon-paper-clip { + top: 7.5px; + } + >span { + display: flex; + } + } + .ant-upload-list-item-card-actions { + position: relative; + + margin-left: @padding-xs; + + white-space: nowrap; + } +} diff --git a/Web/src/assets/style/default/lib/visibility.less b/Web/src/assets/style/default/lib/visibility.less new file mode 100644 index 0000000..a3d6235 --- /dev/null +++ b/Web/src/assets/style/default/lib/visibility.less @@ -0,0 +1,45 @@ +@import (reference) '../extend.less'; +.hide { + visibility: hidden !important; +} +.hidden { + display: none !important; +} +.block { + display: block; +} +.inline-block { + display: inline-block; +} +.inline { + display: inline; +} +.inline-flex { + display: inline-flex; +} +.flex { + display: flex; +} +.ellipsis { + display: block; + overflow: hidden; + + white-space: nowrap; + text-overflow: ellipsis; +} +.ellipsis-line(@line) { + display: -webkit-box; + overflow: hidden; + -webkit-box-orient: vertical; + + text-overflow: ellipsis; + word-break: break-all; + + -webkit-line-clamp: @line; +} +.ellipsis-2 { + .ellipsis-line(2); +} +.ellipsis-3 { + .ellipsis-line(3); +} diff --git a/Web/src/assets/style/default/lib/width-height.less b/Web/src/assets/style/default/lib/width-height.less new file mode 100644 index 0000000..ae39ddc --- /dev/null +++ b/Web/src/assets/style/default/lib/width-height.less @@ -0,0 +1,47 @@ +@import (reference) '../extend.less'; + +.width-height (@i) when (@i <=20) { + + @n : @i * 50; + @px : @n * 1px; + + .w-@{n} { + width: @px !important; + } + + .w-@{n}-min { + min-width: @px !important; + } + + .w-@{n}-max { + max-width: @px !important; + } + + .h-@{n} { + height: @px !important; + } + + .h-@{n}-min { + min-height: @px !important; + } + + .h-@{n}-max { + max-height: @px !important; + } + + .w-@{n}-p { + width: @n * 1% !important; + } + + .h-@{n}-p { + height: @n * 1% !important; + } + + .width-height(@i + 1); +} + +.width-height(0); + +.flex-1 { + flex: 1; +} \ No newline at end of file diff --git a/Web/src/assets/style/default/main.less b/Web/src/assets/style/default/main.less new file mode 100644 index 0000000..f4b6848 --- /dev/null +++ b/Web/src/assets/style/default/main.less @@ -0,0 +1,698 @@ +@import (reference) './extend.less'; +@import (reference) './lib/container.less'; +@import (reference) './lib/text-color.less'; +.yo-layout--spin { + position: absolute; + top: 0; + left: 0; + + width: 100%; + height: 100%; + + background-color: @layout-header-background; + >.ant-spin-nested-loading { + height: 100%; + >div>.ant-spin { + max-height: none; + @-webkit-keyframes borderScale { + 0% { + border: 5px solid white; + } + 50% { + border: 25px solid transparent; + } + 100% { + border: 5px solid white; + } + } + @keyframes borderScale { + 0% { + border: 5px solid white; + } + 50% { + border: 25px solid transparent; + } + 100% { + border: 5px solid white; + } + } + .loader-container { + position: absolute; + top: 50%; + left: 50%; + + box-sizing: content-box; + width: 200px; + height: 200px; + margin: 0 auto; + margin-right: -50%; + + transform: translate(-50%, -50%); + -webkit-animation: borderScale 1s infinite ease-in-out; + animation: borderScale 1s infinite ease-in-out; + + color: white; + border: 5px solid transparent; + border-radius: 50%; + >p { + font-family: 'Raleway', sans-serif; + font-size: 2em; + font-weight: bold; + + position: absolute; + top: 50%; + left: 50%; + + margin-right: -50%; + + transform: translate(-50%, -50%); + } + } + } + >.ant-spin-container { + width: 100%; + height: 100%; + &.ant-spin-blur { + opacity: 0; + } + } + } +} +.ant-layout-header { + .header-actions { + display: flex; + .header-action { + display: inline-block; + + padding: 0 @padding-md; + + cursor: pointer; + transition: @animation-duration-slow; + transition-property: background-color; + .anticon { + font-size: @font-size-base + 6px; + + transition: @animation-duration-slow; + transition-property: color; + } + &:active { + box-shadow: inset 1px 1px 10px rgba(0, 0, 0, .05); + } + // 特殊工具按钮 + .theme-toggle { + position: relative; + + overflow: hidden; + + width: 20px; + height: 20px; + margin: 7px 0; + + border-radius: 50%; + &--real { + position: relative; + + width: 100%; + height: 100%; + + transition: @animation-duration-slow background-color; + + border-radius: 50%; + background-color: fade(@white, 60%); + &::before { + position: absolute; + top: 5px; + left: 5px; + + width: 10px; + height: 10px; + + content: ''; + transition: @animation-duration-slow transform; + transform: scale(1); + + border: 2px solid @layout-header-background; + border-radius: 50%; + } + } + &--imaginary { + position: absolute; + top: 6px; + right: -6px; + + width: 18px; + height: 18px; + + transition: @animation-duration-slow transform; + transform: rotate(45deg) scaleY(0); + transform-origin: top right; + + border-radius: 50%; + background-color: #334454; + } + } + &:hover { + .theme-toggle { + &--real { + background-color: @white; + &::before { + transform: scale(0); + } + } + &--imaginary { + transform: rotate(45deg) scaleY(1); + } + } + } + } + .ant-select-auto-complete { + margin: (@layout-header-height - 10px - 30px) / 2 @padding-md; + .ant-input-affix-wrapper { + border: 0; + background-color: fade(@white, 15%); + &:focus, + &-focused { + background-color: fade(@white, 30%); + } + .ant-input { + color: fade(@white, 85%); + background-color: transparent; + } + .ant-input-suffix { + .anticon { + color: fade(@white, 60%); + } + } + } + } + } + .user-container { + z-index: 10; + + width: 32px + @padding-sm * 2; + height: @layout-header-height - 24px; + margin: 2px 0; + + transition: @animation-duration-slow; + .user-container-inner { + position: relative; + + transition: @animation-duration-slow; + + border-radius: @border-radius-base; + } + .user { + &--base { + line-height: @layout-header-height - 24px; + + position: relative; + + display: flex; + overflow: hidden; + align-items: center; + + width: 100%; + height: @layout-header-height - 24px; + padding: 0 @padding-sm; + + transition: @animation-duration-slow; + } + &--avatar { + box-shadow: 0 0 0 2px @white; + } + } + } +} +.ant-layout-content { + position: relative; + + overflow-y: auto; + >.yo-tab-external-mount { + position: absolute; + top: 0; + left: 0; + bottom: 0; + + display: flex; + flex-direction: column; + + width: 100%; + >.ant-tabs { + z-index: 5; + + overflow: visible; + >.ant-tabs-nav { + margin-bottom: 0; + + border-bottom: 0; + background-color: @card-background; + box-shadow: 0 2px 12px fade(@black, 8%); + &::before { + content: none; + } + .ant-tabs-nav-container { + height: 30px; + margin-bottom: 0; + } + .ant-tabs-tab { + line-height: 30px; + + height: 30px; + margin-right: 0; + padding: 0; + + transition: none; + + border: 0; + background-color: transparent; + &:hover { + color: @black; + } + .ant-tabs-tab-btn { + transition: none; + } + &.ant-tabs-tab-active { + border-color: darken(@primary-color, 10%); + background-color: @primary-color; + .ant-tabs-tab-btn { + color: @white; + } + .ant-tabs-tab-remove { + color: fade(@white, 70%); + &:hover { + color: @white; + } + } + } + .yo-layout-tab-subtitle { + line-height: 1; + + display: inline-block; + overflow: hidden; + + max-width: 150px; + + transform: translateY(1px); + white-space: nowrap; + text-overflow: ellipsis; + + opacity: .75; + } + +.ant-tabs-tab { + margin-left: 0; + &::before { + position: absolute; + left: -.5px; + + width: 1px; + height: 24px; + + content: ''; + transform: scaleX(.5); + + background: linear-gradient(transparent, fade(@black, 30%), transparent); + } + } + .ant-dropdown-trigger { + padding: 0 @padding-md * 2 0 @padding-md; + } + .ant-tabs-tab-unclosable { + .ant-dropdown-trigger { + padding: 0 @padding-lg 0 @padding-md; + } + } + .ant-tabs-tab-remove { + line-height: 28px; + + position: absolute; + top: 0; + right: 0; + + margin: 0; + + transition: none; + } + } + .ant-tabs-nav-more { + padding: 5px @padding-md; + } + } + } + >.yo-tab-external-mount-content { + position: relative; + + height: 100%; + >.yo-tab-external-tabpane { + position: absolute; + top: 0; + left: 0; + + overflow-x: hidden; + overflow-y: auto; + + width: 100%; + height: 100%; + &.yo-tab-external-tabpane-inactive { + pointer-events: none; + + opacity: 0; + } + >iframe { + display: block; + + width: 100%; + height: 100%; + + border: 0; + } + } + } + } +} +.ant-layout-sider { + .ant-menu-inline { + border-right: 0; + } +} +.yo-nav { + padding-top: @padding-lg; + padding-bottom: @padding-lg; + &--row { + padding: 1px 0; + + column-gap: @padding-md; + column-count: 3; + } + &--col { + break-inside: avoid; + } + &--sub-item { + } + &--item-group { + font-size: @font-size-base; + line-height: 1.5; + + margin-bottom: @padding-xs; + padding-top: @padding-xs * 2; + + color: fade(@black, 35%); + border: @border-width-base @border-style-base transparent; + } + &--item { + font-size: @font-size-base; + line-height: 1.5; + + position: relative; + + margin-bottom: @padding-xs; + padding: @padding-xs @padding-sm; + + cursor: pointer; + transition: @animation-duration-fast; + + border: @border-width-base @border-style-base @border-color-split; + border-radius: @border-radius-base; + background-color: @white; + &:hover { + color: @white; + border-color: @primary-color; + background-color: @primary-color; + } + } +} +.yo-layout-sider { + height: 100%; + + background-color: @white; + .ant-layout-sider-children { + display: flex; + flex-direction: column; + } + .logo { + font-size: @font-size-lg * 1.5; + font-weight: 500; + line-height: @layout-header-height + 10px; + + z-index: 11; + + display: flex; + overflow: hidden; + align-items: center; + flex: 0 0 @layout-header-height + 10px; + + height: @layout-header-height + 10px; + padding: 0 @padding-md 0 @padding-lg; + + color: @white; + box-shadow: none; + img { + max-height: 100%; + } + span { + margin-left: @padding-sm; + + transition: @animation-duration-slow; + transition-property: opacity; + } + } + &.ant-layout-sider-collapsed { + .logo { + span { + opacity: 0; + } + } + } + .yo-sider-nav { + position: relative; + z-index: 10; + + flex: 1 1 100%; + + box-shadow: 2px 0 8px fade(@black, 25%); + &--app { + font-size: @font-size-sm; + + margin-top: @padding-sm; + padding: 0 @padding-md; + +.text-gray(); + } + } + .swiper-container { + position: absolute; + top: 0; + left: 0; + bottom: 0; + + width: 100%; + .swiper-scrollbar { + transition: @animation-duration-slow; + transition-property: opacity; + + opacity: 0; + border-radius: @border-radius-base; + } + .swiper-scrollbar-drag { + border-radius: @border-radius-base; + background-color: fade(@black, 30%); + } + &:hover { + .swiper-scrollbar { + opacity: 1; + } + } + } + .swiper-slide { + height: auto; + min-height: 100%; + >.ant-spin-nested-loading { + height: 100%; + .ant-spin-blur { + &::after { + opacity: 0; + } + } + } + } +} +.yo-layout--left-menu, +.yo-layout--right-menu { + position: absolute; + top: 0; + left: 0; + + width: 100%; + height: 100%; + .ant-layout-header { + line-height: @layout-header-height - 20px; + + z-index: 6; + + height: @layout-header-height - 20px; + padding: 0; + + background-color: @white; + >section { + display: flex; + justify-content: space-between; + } + .header-actions { + .header-action { + line-height: @layout-header-height - 16px; + + height: @layout-header-height - 20px; + + color: fade(@black, 35%); + .anticon { + color: fade(@black, 35%); + } + &:hover { + color: @icon-color-hover; + background-color: fade(@black, 5%); + .anticon { + color: @icon-color-hover; + } + } + } + } + } + >section { + >.ant-layout-sider { + .yo-layout-sider(); + } + } +} +.yo-layout--top-nav { + position: absolute; + top: 0; + left: 0; + + display: flex; + flex-direction: column; + + width: 100%; + height: 100%; + + @layout-header-height: 54px; + .ant-layout-header { + line-height: @layout-header-height; + + z-index: 11; + + flex: 0 0 @layout-header-height; + + height: @layout-header-height; + padding: 0; + + background-color: @layout-header-background; + section { + display: flex; + justify-content: space-between; + + height: 100%; + } + .header-actions { + .header-action { + color: fade(@white, 60%); + .anticon { + color: fade(@white, 60%); + } + &:hover { + color: @white; + background-color: fade(@white, 20%); + .anticon { + color: @white; + } + } + } + } + .user-container { + margin: (@layout-header-height - 40px) / 2 0; + } + .logo { + font-size: @font-size-lg * 1.5; + font-weight: 500; + line-height: @layout-header-height - 10px; + + display: flex; + overflow: hidden; + align-items: center; + + height: @layout-header-height 10px; + margin: 5px @padding-lg 5px 0; + + color: @white; + img { + max-height: 100%; + } + span { + margin-left: @padding-sm; + } + } + .ant-menu-horizontal { + line-height: @layout-header-height; + + border-bottom: 0; + >.ant-menu-submenu { + top: 0; + + border-bottom: 0; + } + } + .header-actions { + .header-action { + line-height: @layout-header-height - 16px; + + margin: 10px 0; + } + } + } + &--container { + .ant-layout-header { + .ant-menu-horizontal { + width: 400px; + } + } + .ant-layout-content { + .yo-tab-external-mount { + >.ant-tabs { + >.ant-tabs-bar { + .ant-tabs-nav-container { + width: @container-width - @padding-md * 2; + margin: 0 auto; + } + } + } + } + } + } + &--container-fluid { + .ant-layout-header { + .ant-menu-horizontal { + width: 800px; + } + @media (max-width: 1400px) { + .ant-menu-horizontal { + width: 600px; + } + } + } + } +} +.yo-user-popover { + width: 280px; + padding-top: 0; + .ant-popover-arrow { + display: none; + } + .ant-popover-inner-content { + padding: 0; + } +} +.yo-popover-infinite-scroll { + .ant-popover-inner-content { + overflow-y: auto; + + max-height: 300px; + } +} diff --git a/Web/src/assets/style/default/pages/account-base.less b/Web/src/assets/style/default/pages/account-base.less new file mode 100644 index 0000000..6ec0db8 --- /dev/null +++ b/Web/src/assets/style/default/pages/account-base.less @@ -0,0 +1,51 @@ +@import (reference) '../extend.less'; +.yo-avatar-info { + position: relative; + + overflow: hidden; + + width: 128px; + margin: 0 auto; + + border-radius: 50%; + &--cover { + font-size: @font-size-lg * 2; + + position: absolute; + top: 0; + left: 0; + + display: flex; + align-items: center; + justify-content: center; + + width: 100%; + height: 100%; + + cursor: pointer; + transition: @animation-duration-slow; + + opacity: 0; + color: @white; + background-color: fade(@black, 50%); + &:hover { + opacity: 1; + } + } +} +.yo-avatar-cropper { + overflow: hidden; + + border-radius: @border-radius-base; + background-color: #ccc; +} +.yo-avatar-preview { + overflow: hidden; + + width: 200px; + height: 200px; + margin: 0 auto; + + border-radius: 50%; + background: #ccc; +} diff --git a/Web/src/assets/style/default/pages/home.less b/Web/src/assets/style/default/pages/home.less new file mode 100644 index 0000000..e6b1a5f --- /dev/null +++ b/Web/src/assets/style/default/pages/home.less @@ -0,0 +1,42 @@ +@import (reference) '../extend.less'; +.home-header { + margin-bottom: @padding-md; + padding: @padding-lg 0; + + background-color: @component-background; +} +.home-header-row { + display: flex; +} +.home-header-content { + margin-left: @padding-lg; + h4 { + span { + color: @primary-color; + } + } + p { + margin: 0; + } +} +.home-container { + .ant-card-meta-title { + font-size: @font-size-base + 1px; + + display: -webkit-box; + -webkit-box-orient: vertical; + + height: 42px; + + white-space: normal; + + -webkit-line-clamp: 2; + } + .ant-card-meta-description { + .ant-row { + line-height: 24px; + + height: 24px; + } + } +} diff --git a/Web/src/assets/style/default/pages/index.less b/Web/src/assets/style/default/pages/index.less new file mode 100644 index 0000000..7927e7a --- /dev/null +++ b/Web/src/assets/style/default/pages/index.less @@ -0,0 +1,3 @@ +@import './login.less'; +@import './home.less'; +@import './account-base.less'; diff --git a/Web/src/assets/style/default/pages/login.less b/Web/src/assets/style/default/pages/login.less new file mode 100644 index 0000000..636988c --- /dev/null +++ b/Web/src/assets/style/default/pages/login.less @@ -0,0 +1,89 @@ +@import (reference) '../extend.less'; +.yo-login { + position: fixed; + top: 0; + left: 0; + + width: 100%; + height: 100%; + >img { + display: block; + + width: 100%; + height: 100%; + + object-fit: cover; + } + &::before { + position: absolute; + top: 0; + left: 0; + + width: 100%; + height: 100%; + + content: ''; + + background: fade(@black, 30%) url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABZJREFUeNpiMLJ0+w8EDIwgAgQAAgwAUdAHrAFSJ6cAAAAASUVORK5CYII=); + } + &--placeholder { + position: absolute; + top: 50%; + left: 0; + + width: 100%; + height: 0; + .container-sm { + display: flex; + align-items: center; + justify-content: flex-end; + + height: 0; + } + } + .ant-form { + width: 300px; + padding: @padding-lg; + + border-radius: @border-radius-base + 2px; + background: linear-gradient(45deg, @component-background, fade(@component-background, 80%)); + } + .ant-form-item { + margin-bottom: 0; + } + .ant-form-item-label { + padding: @padding-xs 0 0 !important; + + transition: @animation-duration-base; + transform: translate(0); + >label { + font-weight: normal !important; + + color: fade(@black, 40%); + } + } + &--label { + .ant-form-item-label { + transform: translate(11px, 28px); + } + } + .ant-input, + .ant-input-affix-wrapper { + color: fade(@black, 85%); + border-width: 0 0 @border-width-base 0 !important; + border-color: fade(@black, 10%); + background-color: transparent; + } + .ant-input:hover, + .ant-input:focus, + .ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover, + .ant-input-affix-wrapper:focus, + .ant-input-affix-wrapper-focused { + border-width: 0 0 @border-width-base 0 !important; + border-color: @primary-color; + box-shadow: none !important; + } + .ant-input::placeholder { + font-size: @font-size-base; + } +} diff --git a/Web/src/assets/style/default/public.less b/Web/src/assets/style/default/public.less new file mode 100644 index 0000000..16a4aed --- /dev/null +++ b/Web/src/assets/style/default/public.less @@ -0,0 +1,45 @@ +@import (reference) './extend.less'; +.yo-map { + &-container { + position: relative; + + padding: @padding-sm; + + border: @border-width-base @border-style-base @border-color-split; + border-radius: @border-radius-base; + background-color: @component-background; + .amap-icon { + img { + width: 25px; + } + } + } + &--search { + position: absolute; + top: @padding-md; + left: @padding-md; + z-index: 20; + + width: 25%; + min-width: 300px; + + background-color: @component-background; + box-shadow: @box-shadow-base; + } +} +.yo-adorn { + &--house-top { + height: 65px; + + background: url('~assets/image/adorn/house-top-01.png') no-repeat bottom right; + } +} +a.link-gray { + color: fade(@black, 50%); + &:hover { + color: @link-hover-color; + } + &:active { + color: @link-active-color; + } +} diff --git a/Web/src/assets/style/default/theme/README.md b/Web/src/assets/style/default/theme/README.md new file mode 100644 index 0000000..d6f8b27 --- /dev/null +++ b/Web/src/assets/style/default/theme/README.md @@ -0,0 +1 @@ +/** 在此文件夹中添加控制主题颜色的less文件 **/ \ No newline at end of file diff --git a/Web/src/assets/style/default/theme/primary.less b/Web/src/assets/style/default/theme/primary.less new file mode 100644 index 0000000..5b6f5a8 --- /dev/null +++ b/Web/src/assets/style/default/theme/primary.less @@ -0,0 +1,5 @@ +@import '../index.less'; +@primary-color: #007bff; +@font-size-base: 13px; +@border-radius-base: 0; +@border-color-split: hsv(0, 0, 90%); diff --git a/Web/src/common/api/index.js b/Web/src/common/api/index.js new file mode 100644 index 0000000..e9d7915 --- /dev/null +++ b/Web/src/common/api/index.js @@ -0,0 +1,196 @@ +/** + * api + * v1.2 + */ + +import axios from 'axios' +import { token } from 'common/token' +import status from './status' +/** + * 最终直接根据url名称调用接口方法 + * 例如 + * import { api } from '@/api' + * api.getItemGroupType(parmas).then(...) + */ +import urls from './requests' +import { message as Message, notification } from 'antd' + +const STATUS = status + +axios.defaults.baseURL = process.env.NODE_ENV === 'development' ? '/api' : process.env.REACT_APP_BASE_URL + +const initInstance = (options) => { + const instance = axios + .create({ + headers: { + Authorization: 'Bearer ' + token.value + }, + ...options + }) + + instance.interceptors.response.use((res) => { + if (res.data.status === STATUS.Unauthorized) { + handlerUnauthorized() + } + return res + }, (err) => { + return Promise.reject(err) + }) + return instance +} + +const errerCodes = [STATUS.BadRequest, STATUS.InternalServerError, STATUS.Forbidden] + +const errorNotification = ({ code, message }) => { + switch (message.constructor) { + case Array: + message.forEach(p => { + setTimeout(() => { + notification.error({ + duration: 30, + message: p.field, + description: p.messages.join('/'), + }) + }) + }) + break + default: + notification.error({ + duration: 30, + message: code || '错误', + description: message, + }) + break + } +} + +const errorMessage = (message) => { + Message.error(message) +} + +const handlerUnauthorized = () => { + token.value = '' + window.location.replace('/login') +} + +const api = {} + +for (let key in urls) { + + const item = urls[key] + let url = '', + method = 'get', + options = {} + if (item.constructor === String) { + url = item + } else if (item.constructor === Array) { + url = item[0] + if (item[1]) { + method = item[1].toLowerCase() + } + if (item[2]) { + options = item[2] + } + } else if (item.constructor === Object) { + url = item.url + if (item.method) { + method = item.method.toLowerCase() + } + } + + api[`${key}Await`] = function (params = {}) { + if (method === 'post') { + return initInstance(options).post(url, params) + } else { + let _params = [], + _url = url + Object.keys(params).forEach(key => { + const value = params[key] + if (value) { + switch (value.constructor) { + case Array: + _params.push(...value.map(p => `${key}=${p}`)) + break + default: + _params.push(`${key}=${value}`) + break + } + } + }) + if (_params.length) { + _url += '?' + _params.join('&') + } + return initInstance(options).get(_url) + } + } + + api[key] = function (params = {}) { + return new Promise((reslove, reject) => { + api[`${key}Await`](params) + .then((res) => { + const { data } = res + const isFile = [ArrayBuffer, Blob].includes(data.constructor) + const result = isFile ? res : data + + // 错误的返回码,以通知的形式弹出 + if (errerCodes.indexOf(data.code) >= 0) { + errorNotification(data) + reject(result) + } + + // 非文件,返回码正确,但是结果失败,以消息的形式弹出 + else if (!isFile && !data.success) { + errorMessage(data.message) + reject(result) + } + + // 未登录 + else if (data.code === STATUS.Unauthorized) { + handlerUnauthorized() + } + + else { + reslove(result) + } + }) + .catch(({ response }) => { + const { data, status } = response + if (data.constructor === String) { + errorNotification({ + message: data, + code: status + }) + } else { + errorNotification(data) + } + if (data.code === STATUS.Unauthorized) { + handlerUnauthorized() + } + reject(data) + }) + }) + } + + api[key].url = axios.defaults.baseURL + url + api[key].key = key +} + +/** + * 并发请求,与axios.all方式相同 + * 但是使用的接口函数为this.$api.[接口名]E + */ +api.$queue = function (queue) { + return new Promise((reslove) => { + axios.all(queue).then((results) => { + const res = results.map(p => p.data) + reslove(res) + }) + }) +} + +export { + axios, + urls, + api, + STATUS +} diff --git a/Web/src/common/api/requests/business/houseSafety/houseCode.js b/Web/src/common/api/requests/business/houseSafety/houseCode.js new file mode 100644 index 0000000..67c442a --- /dev/null +++ b/Web/src/common/api/requests/business/houseSafety/houseCode.js @@ -0,0 +1,9 @@ +const urls = { + houseCodeAdd: ['/houseCode/add', 'post'], + houseCodeEdit: ['/houseCode/edit', 'post'], + houseCodePage: ['/houseCode/page', 'post'], + houseCodeNo: '/houseCode/getNextNoByCode', + houseCodeDetail: '/houseCode/detail' +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/requests/business/houseSafety/houseCompany.js b/Web/src/common/api/requests/business/houseSafety/houseCompany.js new file mode 100644 index 0000000..c8dee9c --- /dev/null +++ b/Web/src/common/api/requests/business/houseSafety/houseCompany.js @@ -0,0 +1,10 @@ +const urls = { + houseCompanyPage: ['/houseCompany/page', 'post'], + houseCompanyAdd: ['/houseCompany/add', 'post'], + houseCompanyEdit: ['/houseCompany/edit', 'post'], + houseCompanyDelete: ['/houseCompany/delete', 'post'], + houseCompanyDetail: '/houseCompany/detail', + houseCompanyList: '/houseCompany/list' +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/requests/business/houseSafety/houseInfo.js b/Web/src/common/api/requests/business/houseSafety/houseInfo.js new file mode 100644 index 0000000..8e51acd --- /dev/null +++ b/Web/src/common/api/requests/business/houseSafety/houseInfo.js @@ -0,0 +1,8 @@ +const urls = { + houseInfoGetByTaskId: ['/houseInfo/getByTaskId', 'get'], + houseInfoSave: ['houseInfo/save', 'post'], + houseInfoCheck: ['houseInfo/check', 'post'], + houseInfoSubmitToCheck: ['/houseInfo/submitToCheck', 'post'] +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/requests/business/houseSafety/houseLog.js b/Web/src/common/api/requests/business/houseSafety/houseLog.js new file mode 100644 index 0000000..4a1702d --- /dev/null +++ b/Web/src/common/api/requests/business/houseSafety/houseLog.js @@ -0,0 +1,7 @@ +const urls = { + houseLogList: '/houseLog/list', + houseLogListByInfoId: '/houseLog/listByInfoId', + houseLogListByTaskId: '/houseLog/listByTaskId', +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/requests/business/houseSafety/houseMember.js b/Web/src/common/api/requests/business/houseSafety/houseMember.js new file mode 100644 index 0000000..74654c3 --- /dev/null +++ b/Web/src/common/api/requests/business/houseSafety/houseMember.js @@ -0,0 +1,15 @@ +const urls = { + houseMemberPage: ['/houseMember/page', 'post'], + houseMemberAdd: ['/houseMember/add', 'post'], + houseMemberEdit: ['/houseMember/edit', 'post'], + houseMemberDelete: ['/houseMember/delete', 'post'], + houseMemberDetail: ['/houseMember/detail', 'detail'], + houseMemberOwnRole: ['/houseMember/ownRole', 'get'], + houseMemberOwnData: ['/houseMember/ownData', 'get'], + houseMemberGrantData: ['/houseMember/grantData', 'post'], + houseMemberChangeStatus: ['/houseMember/changeStatus', 'post'], + houseMemberDefaultRole: ['/houseMember/defaultRole', 'get'], + houseMemberDefaultRoleList: ['/houseMember/defaultRoleRange', 'get'] +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/requests/business/houseSafety/houseProjectInfo.js b/Web/src/common/api/requests/business/houseSafety/houseProjectInfo.js new file mode 100644 index 0000000..2ab0b53 --- /dev/null +++ b/Web/src/common/api/requests/business/houseSafety/houseProjectInfo.js @@ -0,0 +1,12 @@ +const urls = { + getHouseProjectPage: ['/houseProjectInfo/page', 'post'], + houseProejctAdd: ['/houseProjectInfo/add', 'post'], + houseProejctEdit: ['/houseProjectInfo/edit', 'post'], + houseProejctDelete: ['/houseProjectInfo/delete', 'post'], + houseProejctDetail: ['/houseProjectInfo/detail', 'get'], + houseProjectNextSort: ['/houseProjectInfo/nextSort', 'get'], + houseProjectList: ['houseProjectInfo/list', 'get'], + houseProjectGetById: ['houseProjectInfo/getById', 'get'] +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/requests/business/houseSafety/houseQuery.js b/Web/src/common/api/requests/business/houseSafety/houseQuery.js new file mode 100644 index 0000000..4749d9d --- /dev/null +++ b/Web/src/common/api/requests/business/houseSafety/houseQuery.js @@ -0,0 +1,6 @@ +const urls = { + houseQueryPage: ['/houseQuery/page', 'post'], + houseQueryDetail: ['/houseQuery/detail', 'get'], +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/requests/business/houseSafety/houseSelector.js b/Web/src/common/api/requests/business/houseSafety/houseSelector.js new file mode 100644 index 0000000..2653a44 --- /dev/null +++ b/Web/src/common/api/requests/business/houseSafety/houseSelector.js @@ -0,0 +1,8 @@ +const urls = { + houseSelect: ['/houseSelector/select', 'post'], + houseSelectRevoke: ['/houseSelector/revoke', 'post'], + houseSelectorPage: ['/houseSelector/selectorPage', 'post'], + houseSelectedPage: ['/houseSelector/selectedPage', 'post'], +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/requests/business/houseSafety/houseTask.js b/Web/src/common/api/requests/business/houseSafety/houseTask.js new file mode 100644 index 0000000..638b9f1 --- /dev/null +++ b/Web/src/common/api/requests/business/houseSafety/houseTask.js @@ -0,0 +1,6 @@ +const urls = { + houseTaskPage: ['/houseTask/page', 'post'], + houseTaskEdit: ['/houseTask/edit', 'post'], +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/requests/business/houseSafety/houseZone.js b/Web/src/common/api/requests/business/houseSafety/houseZone.js new file mode 100644 index 0000000..29f4a98 --- /dev/null +++ b/Web/src/common/api/requests/business/houseSafety/houseZone.js @@ -0,0 +1,15 @@ +const urls = { + /** + * 获取机构列表 + * + */ + houseZonePage: ['/houseZone/page', 'post'], + + houseZoneList: '/houseZone/list', + houseZoneAutoIncrement: '/houseZone/autoIncrement', + houseZoneAdd: ['/houseZone/add', 'post'], + houseZoneEdit: ['/houseZone/edit', 'post'], + houseZoneGetById: ['/houseZone/getById', 'get'] +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/requests/business/houseSafety/index.js b/Web/src/common/api/requests/business/houseSafety/index.js new file mode 100644 index 0000000..284c5f2 --- /dev/null +++ b/Web/src/common/api/requests/business/houseSafety/index.js @@ -0,0 +1,25 @@ +import houseProjectInfo from './houseProjectInfo' +import houseZone from './houseZone' +import houseCode from './houseCode' +import houseMember from './houseMember' +import houseSelector from './houseSelector' +import houseTask from './houseTask' +import houseInfo from './houseInfo' +import houseQuery from './houseQuery' +import houseCompany from './houseCompany' +import houseLog from './houseLog' + +const urls = { + ...houseProjectInfo, + ...houseZone, + ...houseCode, + ...houseMember, + ...houseSelector, + ...houseTask, + ...houseInfo, + ...houseQuery, + ...houseCompany, + ...houseLog +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/requests/business/index.js b/Web/src/common/api/requests/business/index.js new file mode 100644 index 0000000..8a479b2 --- /dev/null +++ b/Web/src/common/api/requests/business/index.js @@ -0,0 +1,9 @@ +import houseSafety from './houseSafety' +import inspection from './inspection' + +const urls = { + ...houseSafety, + ...inspection +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/requests/business/inspection/index.js b/Web/src/common/api/requests/business/inspection/index.js new file mode 100644 index 0000000..6685c2d --- /dev/null +++ b/Web/src/common/api/requests/business/inspection/index.js @@ -0,0 +1,9 @@ +import inspectionOrg from './inspectionOrg' +import inspectionOrgDir from './inspectionOrgDir' + +const urls = { + ...inspectionOrg, + ...inspectionOrgDir +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/requests/business/inspection/inspectionOrg.js b/Web/src/common/api/requests/business/inspection/inspectionOrg.js new file mode 100644 index 0000000..23280f5 --- /dev/null +++ b/Web/src/common/api/requests/business/inspection/inspectionOrg.js @@ -0,0 +1,14 @@ +const urls = { + inspectionOrgReviewPage: ['/inspectionOrg/reviewPage', 'post'], + inspectionOrgReviewUpdatePage: ['/inspectionOrg/reviewUpdatePage', 'post'], + inspectionOrgNewCode: ['/inspectionOrg/newCode', 'get'], + inspectionOrgRegisterStatus: ['/inspectionOrg/registerStatus', 'get'], + inspectionOrgRegister: ['/inspectionOrg/register', 'post'], + inspectionOrgUpdate: ['/inspectionOrg/update', 'post'], + inspectionOrgDetail: ['/inspectionOrg/detail', 'get'], + inspectionOrgReviewApproved: ['/inspectionOrg/reviewApproved', 'post'], + inspectionOrgReviewNotApproved: ['/inspectionOrg/reviewNotApproved', 'post'], + inspectionOrgHistory: ['/inspectionOrg/history', 'get'], +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/requests/business/inspection/inspectionOrgDir.js b/Web/src/common/api/requests/business/inspection/inspectionOrgDir.js new file mode 100644 index 0000000..6865200 --- /dev/null +++ b/Web/src/common/api/requests/business/inspection/inspectionOrgDir.js @@ -0,0 +1,11 @@ +const urls = { + inspectionOrgDirPage: ['/inspectionOrgDir/page', 'post'], + inspectionOrgDirListScore: ['/inspectionOrgDir/listScore', 'post'], + inspectionOrgDirDetail: ['/inspectionOrgDir/detail', 'get'], + inspectionOrgDirSaveScore: ['/inspectionOrgDir/saveScore', 'post'], + + inspectionOrgDirPreview: ['/inspectionOrgDir/preview', 'get'], + inspectionOrgDirPublish: ['/inspectionOrgDir/publish', 'post'], +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/requests/index.js b/Web/src/common/api/requests/index.js new file mode 100644 index 0000000..67c8c1a --- /dev/null +++ b/Web/src/common/api/requests/index.js @@ -0,0 +1,22 @@ +/** + * 接口的3种配置方式 + * 1.string + * 如login: '/login'\ + * 将会默认已POST方式请求接口/login + * 2.array + * 如login: ['/login', 'post'] + * 数组[0]必填,为接口地址,[1]选填,为请求方式(不区分大小写),默认为POST + * 3.object + * 如login: { url: '/login', method: 'post' } + * [url]必填,为接口地址,[method]选填,为请求方式(不区分大小写),默认为POST + */ + +import sys from './sys' +import business from './business' + +const urls = { + ...sys, + ...business +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/requests/sys/appManage.js b/Web/src/common/api/requests/sys/appManage.js new file mode 100644 index 0000000..0596537 --- /dev/null +++ b/Web/src/common/api/requests/sys/appManage.js @@ -0,0 +1,34 @@ +const urls = { + /** + * 系统应用列表 + */ + getAppPage: ['/sysApp/page', 'post'], + /** + * 系统应用列表 + */ + getAppList: ['/sysApp/list', 'get'], + /** + * 新增系统应用 + */ + sysAppAdd: ['/sysApp/add', 'post'], + /** + * 编辑系统应用 + * + */ + sysAppEdit: ['/sysApp/edit', 'post'], + /** + * 删除系统应用 + */ + sysAppDelete: ['/sysApp/delete', 'post'], + /** + * 设为默认应用 + */ + sysAppSetAsDefault: ['/sysApp/setAsDefault', 'post'], + /** + * 修改应用状态 + */ + sysAppChangeStatus: ['/sysApp/changeStatus', 'post'], + sysAppDetail: ['/sysApp/detail', 'get'] +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/requests/sys/areaManage.js b/Web/src/common/api/requests/sys/areaManage.js new file mode 100644 index 0000000..3044653 --- /dev/null +++ b/Web/src/common/api/requests/sys/areaManage.js @@ -0,0 +1,9 @@ +const urls = { + getAreaTree: ['/sysArea/tree', 'get'], + sysAreaPage: ['/sysArea/page', 'post'], + sysAreaAdd: ['/sysArea/add', 'post'], + sysAreaEdit: ['/sysArea/edit', 'post'], + sysAreaDelete: ['/sysArea/delete', 'post'], +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/requests/sys/configManage.js b/Web/src/common/api/requests/sys/configManage.js new file mode 100644 index 0000000..2730dd8 --- /dev/null +++ b/Web/src/common/api/requests/sys/configManage.js @@ -0,0 +1,28 @@ +const urls = { + /** + * 分页查询配置列表 + */ + sysConfigPage: ['/sysConfig/page', 'post'], + /** + * 添加系统参数配置 + */ + sysConfigAdd: ['/sysConfig/add', 'post'], + /** + * 编辑系统参数配置 + */ + sysConfigEdit: ['/sysConfig/edit', 'post'], + /** + * 删除系统参数配置 + */ + sysConfigDelete: ['/sysConfig/delete', 'post'], + /** + * 获取字典类型下所有字典,举例,返回格式为:[{code:"M",value:"男"},{code:"F",value:"女"}] + */ + sysDictTypeDropDown: ['/sysDictType/dropDown', 'get'], + /** + * 获取系统的所有任务列表 + */ + sysTimersGetActionClasses: ['/sysTimers/getActionClasses', 'get'], +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/requests/sys/dictDataManage.js b/Web/src/common/api/requests/sys/dictDataManage.js new file mode 100644 index 0000000..ee27492 --- /dev/null +++ b/Web/src/common/api/requests/sys/dictDataManage.js @@ -0,0 +1,24 @@ +const urls = { + /** + * 查询系统字典值 + */ + sysDictDataPage: ['/sysDictData/page', 'post'], + /** + * 添加系统字典值 + */ + sysDictDataAdd: ['/sysDictData/add', 'post'], + /** + * 编辑系统字典值 + */ + sysDictDataEdit: ['/sysDictData/edit', 'post'], + /** + * 删除系统字典值 + */ + sysDictDataDelete: ['/sysDictData/delete', 'post'], + /** + * 批量删除系统字典值 + */ + sysDictDataDeleteBatch: ['/sysDictData/deleteBatch', 'post'], +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/requests/sys/dictManage.js b/Web/src/common/api/requests/sys/dictManage.js new file mode 100644 index 0000000..ff0ff96 --- /dev/null +++ b/Web/src/common/api/requests/sys/dictManage.js @@ -0,0 +1,32 @@ +const urls = { + /** + * 分页查询系统字典类型 + */ + sysDictTypePage: ['/sysDictType/page', 'post'], + /** + * 添加系统字典类型 + */ + sysDictTypeAdd: ['/sysDictType/add', 'post'], + /** + * 编辑系统字典类型 + */ + sysDictTypeEdit: ['/sysDictType/edit', 'post'], + /** + * 删除系统字典类型 + */ + sysDictTypeDelete: ['/sysDictType/delete', 'post'], + /** + * 获取字典类型下所有字典,举例,返回格式为:[{code:"M",value:"男"},{code:"F",value:"女"}] + */ + sysDictTypeDropDown: ['/sysDictType/dropDown', 'get'], + /** + * 获取字典类型下所有的字典,可批量获取 + */ + sysDictTypeDropDowns: ['/sysDictType/dropDowns', 'get'], + /** + * 获取所有字典树 + */ + sysDictTypeTree: ['/sysDictType/tree', 'get'], +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/requests/sys/emailManage.js b/Web/src/common/api/requests/sys/emailManage.js new file mode 100644 index 0000000..96f6b11 --- /dev/null +++ b/Web/src/common/api/requests/sys/emailManage.js @@ -0,0 +1,12 @@ +const urls = { + /** + * 发送邮件 + */ + emailSendEmail: ['/email/sendEmail', 'post'], + /** + * 发送html邮件 + */ + emailSendEmailHtml: ['/email/sendEmailHtml', 'post'], +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/requests/sys/fileManage.js b/Web/src/common/api/requests/sys/fileManage.js new file mode 100644 index 0000000..87a5503 --- /dev/null +++ b/Web/src/common/api/requests/sys/fileManage.js @@ -0,0 +1,38 @@ +const urls = { + /** + * 分页查询文件信息表 + */ + sysFileInfoPage: ['/sysFileInfo/page', 'post'], + /** + * 获取全部文件信息表 + */ + sysFileInfoList: ['/sysFileInfo/list', 'get'], + /** + * 上传文件 + */ + sysFileInfoUpload: ['/sysFileInfo/upload', 'post'], + /** + * 下载文件 + */ + sysFileInfoDownload: ['/sysFileInfo/download', 'get', { + responseType: 'blob' + }], + + /** + * 查看图片 + */ + sysFileInfoPreview: ['/sysFileInfo/preview', 'get', { + responseType: 'arraybuffer' + }], + + /** + * 查看详情文件信息表 + */ + sysFileInfoDetail: ['/sysFileInfo/detail', 'get'], + /** + * 删除文件信息表 + */ + sysFileInfoDelete: ['/sysFileInfo/delete', 'post'], +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/requests/sys/index.js b/Web/src/common/api/requests/sys/index.js new file mode 100644 index 0000000..4f94a58 --- /dev/null +++ b/Web/src/common/api/requests/sys/index.js @@ -0,0 +1,47 @@ +import appManage from './appManage' +import configManage from './configManage' +import dictDataManage from './dictDataManage' +import dictManage from './dictManage' +import emailManage from './emailManage' +import fileManage from './fileManage' +import loginManage from './loginManage' +import logManage from './logManage' +import machineManage from './machineManage' +import menuManage from './menuManage' +import noticeManage from './noticeManage' +import noticeReceiveManage from './noticeReceiveManage' +import onlineUserManage from './onlineUserManage' +import orgManage from './orgManage' +import posManage from './posManage' +import roleManage from './roleManage' +import smsManage from './smsManage' +import tenantManage from './tenantManage' +import timersManage from './timersManage' +import userManage from './userManage' +import areaManage from './areaManage' + +const urls = { + ...appManage, + ...configManage, + ...dictDataManage, + ...dictManage, + ...emailManage, + ...fileManage, + ...loginManage, + ...logManage, + ...machineManage, + ...menuManage, + ...noticeManage, + ...noticeReceiveManage, + ...onlineUserManage, + ...orgManage, + ...posManage, + ...roleManage, + ...smsManage, + ...tenantManage, + ...timersManage, + ...userManage, + ...areaManage, +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/requests/sys/logManage.js b/Web/src/common/api/requests/sys/logManage.js new file mode 100644 index 0000000..978b54c --- /dev/null +++ b/Web/src/common/api/requests/sys/logManage.js @@ -0,0 +1,25 @@ +const urls = { + + /** + * 查询访问日志 + */ + sysVisLogPage: ['/sysVisLog/page', 'post'], + + /** + * 查询操作日志 + */ + sysOpLogPage: ['/sysOpLog/page', 'post'], + + /** + * 清空访问日志 + */ + sysVisLogDelete: ['/sysVisLog/delete', 'post'], + + /** + * 清空登录日志 + */ + sysOpLogDelete: ['/sysOpLog/delete', 'post'], + +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/requests/sys/loginManage.js b/Web/src/common/api/requests/sys/loginManage.js new file mode 100644 index 0000000..216a8e4 --- /dev/null +++ b/Web/src/common/api/requests/sys/loginManage.js @@ -0,0 +1,40 @@ +const urls = { + /** + * 登录 + */ + login: ['/login', 'post'], + /** + * 登录时修改密码 + */ + loginPass: ['/loginPass', 'post'], + /** + * 登出 + */ + logout: ['/logout', 'post'], + /** + * 获取登录用户信息 + */ + getLoginUser: ['/getLoginUser', 'get'], + /** + * 获取租户开关 + */ + getTenantOpen: ['/getTenantOpen', 'get'], + /** + * 获取短信验证码 + */ + getSmsCaptcha: ['/getSmsCaptcha', 'get'], + /** + * 获取验证码开关 + */ + getCaptchaOpen: ['/getCaptchaOpen', 'get'], + /** + * 获取验证图片 以及token + */ + reqGet: ['/captcha/get', 'post'], + /** + * 滑动或者点选验证 + */ + reqCheck: ['/captcha/check', 'post'], +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/requests/sys/machineManage.js b/Web/src/common/api/requests/sys/machineManage.js new file mode 100644 index 0000000..632282a --- /dev/null +++ b/Web/src/common/api/requests/sys/machineManage.js @@ -0,0 +1,12 @@ +const urls = { + /** + * + * 系统属性监控 + * + */ + sysMachineUse: ['/sysMachine/use', 'get'], + sysMachineBase: ['/sysMachine/base', 'get'], + sysMachineNetwork: ['/sysMachine/network', 'get'] +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/requests/sys/menuManage.js b/Web/src/common/api/requests/sys/menuManage.js new file mode 100644 index 0000000..d923007 --- /dev/null +++ b/Web/src/common/api/requests/sys/menuManage.js @@ -0,0 +1,68 @@ +const urls = { + /** + * 获取菜单列表 + * + * @author yubaoshan + * @param parameter + * @returns {*} + */ + getMenuList: ['/sysMenu/list', 'get'], + + /** + * 获取系统菜单树,用于新增,编辑时选择上级节点 + * + * @author yubaoshan + * @date 2020/4/23 12:22 + */ + getMenuTree: ['/sysMenu/tree', 'get'], + + /** + * 增加菜单 + * + * @author yubaoshan + * @date 2020/4/24 23:23 + */ + sysMenuAdd: ['/sysMenu/add', 'post'], + + /** + * 增加菜单 + * + * @author yubaoshan + * @date 2020/4/24 23:23 + */ + sysMenuDelete: ['/sysMenu/delete', 'post'], + + /** + * 查看菜单详情 + * + * @author yubaoshan + * @date 2020/4/25 01:11 + */ + sysMenuDetail: ['/sysMenu/detail', 'post'], + + /** + * 编辑系统菜单 + * + * @author yubaoshan + * @date 2020/4/25 01:11 + */ + sysMenuEdit: ['/sysMenu/edit', 'post'], + + /** + * 获取系统菜单树,用于给角色授权时选择 + * + * @author yubaoshan + * @date 2020/6/2 17:30 + */ + SysMenuTreeForGrant: ['/sysMenu/treeForGrant', 'get'], + /** + * 根据系统切换菜单 + * + * @author yubaoshan + * @date 2020/6/28 15:25 + */ + sysMenuChange: ['/sysMenu/change', 'post'], + +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/requests/sys/noticeManage.js b/Web/src/common/api/requests/sys/noticeManage.js new file mode 100644 index 0000000..c1c692f --- /dev/null +++ b/Web/src/common/api/requests/sys/noticeManage.js @@ -0,0 +1,33 @@ +const urls = { + /** + * 查询系统通知公告 + */ + sysNoticePage: ['/sysNotice/page', 'post'], + + /** + * 添加系统通知公告 + */ + sysNoticeAdd: ['/sysNotice/add', 'post'], + + /** + * 编辑系统通知公告 + */ + sysNoticeEdit: ['/sysNotice/edit', 'post'], + + /** + * 删除系统通知公告 + */ + sysNoticeDelete: ['/sysNotice/delete', 'post'], + + /** + * 通知公告详情 + */ + sysNoticeDetail: ['/sysNotice/detail', 'get'], + + /** + * 修改状态 + */ + sysNoticeChangeStatus: ['/sysNotice/changeStatus', 'post'], +} + +export default urls diff --git a/Web/src/common/api/requests/sys/noticeReceiveManage.js b/Web/src/common/api/requests/sys/noticeReceiveManage.js new file mode 100644 index 0000000..85d50ef --- /dev/null +++ b/Web/src/common/api/requests/sys/noticeReceiveManage.js @@ -0,0 +1,12 @@ +const urls = { + /** + * 获取接收到的通知公告总数 + */ + sysNoticeUnread: ['/sysNotice/unread', 'get'], + /** + * 查询我收到的系统通知公告 + */ + sysNoticeReceived: ['/sysNotice/received', 'post'], +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/requests/sys/onlineUserManage.js b/Web/src/common/api/requests/sys/onlineUserManage.js new file mode 100644 index 0000000..e87053f --- /dev/null +++ b/Web/src/common/api/requests/sys/onlineUserManage.js @@ -0,0 +1,14 @@ +const urls = { + /** + * 在线用户列表 + */ + sysOnlineUserList: ['/sysOnlineUser/list', 'get'], + + /** + * 强制下线 + */ + sysOnlineUserForceExist: ['/sysOnlineUser/forceExist', 'post'], + +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/requests/sys/orgManage.js b/Web/src/common/api/requests/sys/orgManage.js new file mode 100644 index 0000000..a253956 --- /dev/null +++ b/Web/src/common/api/requests/sys/orgManage.js @@ -0,0 +1,40 @@ +const urls = { + /** + * 获取机构树 + * + */ + getOrgTree: ['/sysOrg/tree', 'get'], + + /** + * 获取机构列表 + * + */ + getOrgList: ['/sysOrg/list', 'get'], + + /** + * 获取机构列表 + * + */ + getOrgPage: ['/sysOrg/page', 'post'], + + /** + * 新增机构 + * + */ + sysOrgAdd: ['/sysOrg/add', 'post'], + + /** + * 编辑机构 + * + */ + sysOrgEdit: ['/sysOrg/edit', 'post'], + + /** + * 删除机构 + * + */ + sysOrgDelete: ['/sysOrg/delete', 'post'], + +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/requests/sys/posManage.js b/Web/src/common/api/requests/sys/posManage.js new file mode 100644 index 0000000..c222df7 --- /dev/null +++ b/Web/src/common/api/requests/sys/posManage.js @@ -0,0 +1,34 @@ +const urls = { + /** + * 查询系统职位 + * + */ + sysPosPage: ['/sysPos/page', 'post'], + + /** + * 系统职位列表 + * + */ + sysPosList: ['/sysPos/list', 'get'], + + /** + * 添加系统职位 + * + */ + sysPosAdd: ['/sysPos/add', 'post'], + + /** + * 编辑系统职位 + * + */ + sysPosEdit: ['/sysPos/edit', 'post'], + + /** + * 删除系统职位 + * + */ + sysPosDelete: ['/sysPos/delete', 'post'], + +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/requests/sys/roleManage.js b/Web/src/common/api/requests/sys/roleManage.js new file mode 100644 index 0000000..ae4f795 --- /dev/null +++ b/Web/src/common/api/requests/sys/roleManage.js @@ -0,0 +1,64 @@ +const urls = { + /** + * 获取角色列表 + */ + getRolePage: ['/sysRole/page', 'post'], + + + /** + * 增加角色 + */ + sysRoleAdd: ['/sysRole/add', 'post'], + + + /** + * 编辑角色 + */ + sysRoleEdit: ['/sysRole/edit', 'post'], + + + /** + * 删除角色 + */ + sysRoleDelete: ['/sysRole/delete', 'post'], + + + /** + * 删除角色 + */ + sysRoleDeteil: ['/sysRole/detail', 'get'], + + + /** + * 获取授权角色列表 + */ + sysRoleDropDown: ['/sysRole/dropDown', 'get'], + + + /** + * 拥有菜单 + */ + sysRoleOwnMenu: ['/sysRole/ownMenu', 'get'], + + + /** + * 授权菜单 + */ + sysRoleGrantMenu: ['/sysRole/grantMenu', 'post'], + + + /** + * 拥有数据 + */ + sysRoleOwnData: ['/sysRole/ownData', 'get'], + + + /** + * 授权数据 + */ + sysRoleGrantData: ['/sysRole/grantData', 'post'], + + +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/requests/sys/smsManage.js b/Web/src/common/api/requests/sys/smsManage.js new file mode 100644 index 0000000..b7a3462 --- /dev/null +++ b/Web/src/common/api/requests/sys/smsManage.js @@ -0,0 +1,19 @@ +const urls = { + /** + * 发送记录查询 + */ + smsPage: ['/sms/page', 'get'], + + /** + * 验证短信验证码 + */ + sysSendLoginMessage: ['/sms/sendLoginMessage', 'post'], + + /** + * 验证短信验证码 + */ + sysValidateMessage: ['/sms/validateMessage', 'post'], + +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/requests/sys/tenantManage.js b/Web/src/common/api/requests/sys/tenantManage.js new file mode 100644 index 0000000..5ac3f16 --- /dev/null +++ b/Web/src/common/api/requests/sys/tenantManage.js @@ -0,0 +1,28 @@ +const urls = { + /** + * 租户列表 + * + */ + sysTenantPage: ['/sysTenant/page', 'post'], + + /** + * 新增租户 + * + */ + sysTenantAdd: ['/sysTenant/add', 'post'], + + /** + * 删除租户 + * + */ + sysTenantDelete: ['/sysTenant/delete', 'post'], + + /** + * 编辑租户 + * + */ + sysTenantEdit: ['/sysTenant/edit', 'post'], + +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/requests/sys/timersManage.js b/Web/src/common/api/requests/sys/timersManage.js new file mode 100644 index 0000000..2e64678 --- /dev/null +++ b/Web/src/common/api/requests/sys/timersManage.js @@ -0,0 +1,58 @@ +const urls = { + /** + * 分页查询定时任务 + */ + sysTimersPage: ['/sysTimers/page', 'post'], + + + /** + * 获取全部定时任务 + */ + sysTimersList: ['/sysTimers/list', 'get'], + + + /** + * 查看详情定时任务 + */ + sysTimersDetail: ['/sysTimers/detail', 'get'], + + + /** + * 添加定时任务 + */ + sysTimersAdd: ['/sysTimers/add', 'post'], + + + /** + * 删除定时任务 + */ + sysTimersDelete: ['/sysTimers/delete', 'post'], + + + /** + * 编辑定时任务 + */ + sysTimersEdit: ['/sysTimers/edit', 'post'], + + + /** + * 获取系统的所有任务列表 + */ + sysTimersGetActionClasses: ['/sysTimers/getActionClasses', 'post'], + + + /** + * 启动定时任务 + */ + sysTimersStart: ['/sysTimers/start', 'post'], + + + /** + * 停止定时任务 + */ + sysTimersStop: ['/sysTimers/stop', 'post'], + + +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/requests/sys/userManage.js b/Web/src/common/api/requests/sys/userManage.js new file mode 100644 index 0000000..8307459 --- /dev/null +++ b/Web/src/common/api/requests/sys/userManage.js @@ -0,0 +1,95 @@ +const urls = { + /** + * 获取用户列表 + */ + getUserPage: ['/sysUser/page', 'post'], + + /** + * 增加用户 + */ + sysUserAdd: ['/sysUser/add', 'post'], + + /** + * 编辑用户 + */ + sysUserEdit: ['/sysUser/edit', 'post'], + + /** + * 获取用户详情 + */ + sysUserDetail: ['/sysUser/detail', 'get'], + + /** + * 删除用户 + */ + sysUserDelete: ['/sysUser/delete', 'post'], + + /** + * 拥有角色 + */ + sysUserOwnRole: ['/sysUser/ownRole', 'get'], + + /** + * 授权角色 + */ + sysUserGrantRole: ['/sysUser/grantRole', 'post'], + + /** + * 拥有数据 + */ + sysUserOwnData: ['/sysUser/ownData', 'get'], + + /** + * 授权数据 + */ + sysUserGrantData: ['/sysUser/grantData', 'post'], + + /** + * 修改状态 + */ + sysUserChangeStatus: ['/sysUser/changeStatus', 'post'], + + /** + * 重置密码 + */ + sysUserResetPwd: ['/sysUser/resetPwd', 'post'], + + /** + * 修改密码 + */ + sysUserUpdatePwd: ['/sysUser/updatePwd', 'post'], + + /** + * 用户选择器 + */ + sysUserSelector: ['/sysUser/selector', 'get'], + + /** + * 修改头像 + */ + sysUserUpdateAvatar: ['/sysUser/updateAvatar', 'post'], + + /** + * 更新基本信息 + */ + sysUserUpdateInfo: ['/sysUser/updateInfo', 'post'], + + + /** + * 发送验证码 + */ + sysUserSendCode: ['/sysUser/sendCode', 'post'], + + /** + * 绑定/验证 + */ + sysUserCheckBindcode: ['/sysUser/checkBindcode', 'post'], + + /** + * 获取密码验证配置 + */ + getPwdRule: ['/sysUser/getPwdRule', 'post'], + +} + +export default urls \ No newline at end of file diff --git a/Web/src/common/api/status.js b/Web/src/common/api/status.js new file mode 100644 index 0000000..9c7c915 --- /dev/null +++ b/Web/src/common/api/status.js @@ -0,0 +1,208 @@ +const status = { + // + // 摘要: + // 等效于 HTTP 状态 100。 System.Net.HttpStatusCode.Continue 指示客户端可以继续其请求。 + Continue: 100, + // + // 摘要: + // 等效于 HTTP 状态为 101。 System.Net.HttpStatusCode.SwitchingProtocols 指示正在更改的协议版本或协议。 + SwitchingProtocols: 101, + // + // 摘要: + // 等效于 HTTP 状态 200。 System.Net.HttpStatusCode.OK 指示请求成功,且请求的信息包含在响应中。 这是要接收的最常见状态代码。 + OK: 200, + // + // 摘要: + // 等效于 HTTP 状态 201。 System.Net.HttpStatusCode.Created 指示请求导致已发送响应之前创建一个新的资源。 + Created: 201, + // + // 摘要: + // 等效于 HTTP 状态 202。 System.Net.HttpStatusCode.Accepted 指示请求已被接受进行进一步处理。 + Accepted: 202, + // + // 摘要: + // 等效于 HTTP 状态 203。 System.Net.HttpStatusCode.NonAuthoritativeInformation 指示返回的元信息来自而不是原始服务器的缓存副本,因此可能不正确。 + NonAuthoritativeInformation: 203, + // + // 摘要: + // 等效于 HTTP 状态 204。 System.Net.HttpStatusCode.NoContent 指示已成功处理请求和响应是有意留为空白。 + NoContent: 204, + // + // 摘要: + // 等效于 HTTP 状态 205。 System.Net.HttpStatusCode.ResetContent 指示客户端应重置 (而不是重新加载) 的当前资源。 + ResetContent: 205, + // + // 摘要: + // 等效于 HTTP 206 状态。 System.Net.HttpStatusCode.PartialContent 指示根据包括字节范围的 GET 请求的请求的响应是部分响应。 + PartialContent: 206, + // + // 摘要: + // 等效于 HTTP 状态 300。 System.Net.HttpStatusCode.MultipleChoices 指示所需的信息有多种表示形式。 默认操作是将此状态视为一个重定向,并按照与此响应关联的位置标头的内容。 + MultipleChoices: 300, + // + // 摘要: + // 等效于 HTTP 状态 300。 System.Net.HttpStatusCode.Ambiguous 指示所需的信息有多种表示形式。 默认操作是将此状态视为一个重定向,并按照与此响应关联的位置标头的内容。 + Ambiguous: 300, + // + // 摘要: + // 等效于 HTTP 状态 301。 System.Net.HttpStatusCode.MovedPermanently 指示已将所需的信息移动到的位置标头中指定的 + // URI。 当收到此状态时的默认操作是遵循与响应关联的位置标头。 + MovedPermanently: 301, + // + // 摘要: + // 等效于 HTTP 状态 301。 System.Net.HttpStatusCode.Moved 指示已将所需的信息移动到的位置标头中指定的 URI。 当收到此状态时的默认操作是遵循与响应关联的位置标头。 + // 当原始请求方法是 POST 时,重定向的请求将使用 GET 方法。 + Moved: 301, + // + // 摘要: + // 等效于 HTTP 状态 302。 System.Net.HttpStatusCode.Found 指示所需的信息位于的位置标头中指定的 URI。 当收到此状态时的默认操作是遵循与响应关联的位置标头。 + // 当原始请求方法是 POST 时,重定向的请求将使用 GET 方法。 + Found: 302, + // + // 摘要: + // 等效于 HTTP 状态 302。 System.Net.HttpStatusCode.Redirect 指示所需的信息位于的位置标头中指定的 URI。 当收到此状态时的默认操作是遵循与响应关联的位置标头。 + // 当原始请求方法是 POST 时,重定向的请求将使用 GET 方法。 + Redirect: 302, + // + // 摘要: + // 等效于 HTTP 状态 303。 System.Net.HttpStatusCode.SeeOther 自动将客户端重定向到的位置标头中指定作为公告的结果的 + // URI。 对指定的位置标头的资源的请求将会执行与 GET。 + SeeOther: 303, + // + // 摘要: + // 等效于 HTTP 状态 303。 System.Net.HttpStatusCode.RedirectMethod 自动将客户端重定向到的位置标头中指定作为公告的结果的 + // URI。 对指定的位置标头的资源的请求将会执行与 GET。 + RedirectMethod: 303, + // + // 摘要: + // 等效于 HTTP 状态 304。 System.Net.HttpStatusCode.NotModified 指示客户端的缓存的副本是最新。 不会传输资源的内容。 + NotModified: 304, + // + // 摘要: + // 等效于 HTTP 状态 305。 System.Net.HttpStatusCode.UseProxy 指示该请求应使用的位置标头中指定的 uri 的代理服务器。 + UseProxy: 305, + // + // 摘要: + // 等效于 HTTP 状态 306。 System.Net.HttpStatusCode.Unused 是对未完全指定的 HTTP/1.1 规范建议的扩展。 + Unused: 306, + // + // 摘要: + // 等效于 HTTP 状态 307。 System.Net.HttpStatusCode.TemporaryRedirect 指示请求信息位于的位置标头中指定的 + // URI。 当收到此状态时的默认操作是遵循与响应关联的位置标头。 当原始请求方法是 POST 时,重定向的请求还将使用 POST 方法。 + TemporaryRedirect: 307, + // + // 摘要: + // 等效于 HTTP 状态 307。 System.Net.HttpStatusCode.RedirectKeepVerb 指示请求信息位于的位置标头中指定的 + // URI。 当收到此状态时的默认操作是遵循与响应关联的位置标头。 当原始请求方法是 POST 时,重定向的请求还将使用 POST 方法。 + RedirectKeepVerb: 307, + // + // 摘要: + // 等效于 HTTP 状态 400。 System.Net.HttpStatusCode.BadRequest 指示无法由服务器理解此请求。 System.Net.HttpStatusCode.BadRequest + // 如果没有其他错误适用,或者如果具体的错误是未知的或不具有其自己的错误代码发送。 + BadRequest: 400, + // + // 摘要: + // 等效于 HTTP 状态 401。 System.Net.HttpStatusCode.Unauthorized 指示所请求的资源需要身份验证。 Www-authenticate + // 标头包含如何执行身份验证的详细信息。 + Unauthorized: 401, + // + // 摘要: + // 等效于 HTTP 状态 402。 System.Net.HttpStatusCode.PaymentRequired 已保留供将来使用。 + PaymentRequired: 402, + // + // 摘要: + // 等效于 HTTP 状态 403。 System.Net.HttpStatusCode.Forbidden 指示服务器拒绝无法完成请求。 + Forbidden: 403, + // + // 摘要: + // 等效于 HTTP 状态 404。 System.Net.HttpStatusCode.NotFound 指示所请求的资源不存在的服务器上。 + NotFound: 404, + // + // 摘要: + // 等效于 HTTP 状态 405。 System.Net.HttpStatusCode.MethodNotAllowed 指示请求方法 (POST 或 GET) + // 不允许对所请求的资源。 + MethodNotAllowed: 405, + // + // 摘要: + // 等效于 HTTP 状态 406。 System.Net.HttpStatusCode.NotAcceptable 表示客户端已指定使用 Accept 标头,它将不接受任何可用的资源表示。 + NotAcceptable: 406, + // + // 摘要: + // 等效于 HTTP 状态 407。 System.Net.HttpStatusCode.ProxyAuthenticationRequired 指示请求的代理要求身份验证。 + // 代理服务器进行身份验证标头包含如何执行身份验证的详细信息。 + ProxyAuthenticationRequired: 407, + // + // 摘要: + // 等效于 HTTP 状态 408。 System.Net.HttpStatusCode.RequestTimeout 指示客户端的服务器预期请求的时间内没有未发送请求。 + RequestTimeout: 408, + // + // 摘要: + // 等效于 HTTP 状态 409。 System.Net.HttpStatusCode.Conflict 指示该请求可能不会执行由于在服务器上发生冲突。 + Conflict: 409, + // + // 摘要: + // 等效于 HTTP 状态 410。 System.Net.HttpStatusCode.Gone 指示所请求的资源不再可用。 + Gone: 410, + // + // 摘要: + // 等效于 HTTP 状态 411。 System.Net.HttpStatusCode.LengthRequired 指示缺少必需的内容长度标头。 + LengthRequired: 411, + // + // 摘要: + // 等效于 HTTP 状态 412。 System.Net.HttpStatusCode.PreconditionFailed 表示失败,此请求的设置的条件,无法执行请求。 + // 使用条件请求标头,如果匹配项,如设置条件无-If-match,或如果-修改-自从。 + PreconditionFailed: 412, + // + // 摘要: + // 等效于 HTTP 状态 413。 System.Net.HttpStatusCode.RequestEntityTooLarge 指示请求来说太大的服务器能够处理。 + RequestEntityTooLarge: 413, + // + // 摘要: + // 等效于 HTTP 状态 414。 System.Net.HttpStatusCode.RequestUriTooLong 指示 URI 太长。 + RequestUriTooLong: 414, + // + // 摘要: + // 等效于 HTTP 状态 415。 System.Net.HttpStatusCode.UnsupportedMediaType 指示该请求是不受支持的类型。 + UnsupportedMediaType: 415, + // + // 摘要: + // 等效于 HTTP 416 状态。 System.Net.HttpStatusCode.RequestedRangeNotSatisfiable 指示从资源请求的数据范围不能返回,或者因为范围的开始处,然后该资源的开头或范围的末尾后在资源的结尾。 + RequestedRangeNotSatisfiable: 416, + // + // 摘要: + // 等效于 HTTP 状态 417。 System.Net.HttpStatusCode.ExpectationFailed 指示无法由服务器满足 Expect + // 标头中给定。 + ExpectationFailed: 417, + // + // 摘要: + // 等效于 HTTP 状态 426。 System.Net.HttpStatusCode.UpgradeRequired 指示客户端应切换到不同的协议,例如 + // TLS/1.0。 + UpgradeRequired: 426, + // + // 摘要: + // 等效于 HTTP 状态 500。 System.Net.HttpStatusCode.InternalServerError 表示在服务器上发生一般性错误。 + InternalServerError: 500, + // + // 摘要: + // 等效于 HTTP 状态 501。 System.Net.HttpStatusCode.NotImplemented 指示服务器不支持所请求的功能。 + NotImplemented: 501, + // + // 摘要: + // 等效于 HTTP 状态 502。 System.Net.HttpStatusCode.BadGateway 指示中间代理服务器从另一个代理或原始服务器接收到错误响应。 + BadGateway: 502, + // + // 摘要: + // 等效于 HTTP 状态 503。 System.Net.HttpStatusCode.ServiceUnavailable 指示将服务器暂时不可用,通常是由于高负载或维护。 + ServiceUnavailable: 503, + // + // 摘要: + // 等效于 HTTP 状态 504。 System.Net.HttpStatusCode.GatewayTimeout 指示中间代理服务器在等待来自另一个代理或原始服务器的响应时已超时。 + GatewayTimeout: 504, + // + // 摘要: + // 等效于 HTTP 状态 505。 System.Net.HttpStatusCode.HttpVersionNotSupported 指示服务器不支持请求的 + // HTTP 版本。 + HttpVersionNotSupported: 505 +} + +export default status \ No newline at end of file diff --git a/Web/src/common/login/index.js b/Web/src/common/login/index.js new file mode 100644 index 0000000..dd853bd --- /dev/null +++ b/Web/src/common/login/index.js @@ -0,0 +1,65 @@ +import { api } from 'common/api' +import { token } from 'common/token' +//import { encryptByDES, decryptByDES } from 'util/des' +import { encryptByRSA } from 'util/rsa' +import { removeGlobal, RSA_PUBLIC_KEY } from 'util/global' +import { message as Message } from 'antd' +import { Redirect } from 'react-router-dom' + +const doLogin = (args) => { + return new Promise((resolve, reject) => { + let { account, password } = args + password = encryptByRSA(password, RSA_PUBLIC_KEY) + api.login({ account, password }).then(({ success, data, message }) => { + if (success) { + token.value = data + Message.success('登录成功') + // if (app.$route.query.return) { + // const r = decryptByDES(app.$route.query.return) + // app.$router.replace(r) + // } else { + // app.$router.replace('/') + // } + return + } else { + Message.error(message) + reject() + } + }).catch(({ message }) => { + if (typeof message === 'object' && message[0]) { + Message.error(message[0].messages[0]) + } + reject() + }) + }) +} + +const doLogout = () => { + return new Promise((resolve, reject) => { + api.logout().then(({ success, message }) => { + if (success) { + removeGlobal() + token.value = '' + // if (app.$route.path === '/') { + // app.$router.replace('/login') + // } else { + // app.$router.replace({ + // path: '/login', + // query: { + // return: decodeURIComponent(encryptByDES(app.$route.path)) + // } + // }) + // } + resolve() + } else { + message.error(message) + reject() + } + }) + }) +} + +export { + doLogin, + doLogout, +} \ No newline at end of file diff --git a/Web/src/common/storage/index.js b/Web/src/common/storage/index.js new file mode 100644 index 0000000..444d5c1 --- /dev/null +++ b/Web/src/common/storage/index.js @@ -0,0 +1,10 @@ +const SESSION_KEY = '__SESSION' +const SETTING_KEY = '__SETTINGS' +const GLOBAL_INFO_KEY = '__GLOBAL_INFO' +const COUNT_DWON_KEY = '__COUNT_DWON' +export { + SESSION_KEY, + SETTING_KEY, + GLOBAL_INFO_KEY, + COUNT_DWON_KEY +} \ No newline at end of file diff --git a/Web/src/common/token/index.js b/Web/src/common/token/index.js new file mode 100644 index 0000000..b489162 --- /dev/null +++ b/Web/src/common/token/index.js @@ -0,0 +1,19 @@ +import { SESSION_KEY } from '../storage' + +const token = { + get value() { + return window.localStorage.getItem(SESSION_KEY) + }, + set value(token) { + if (!token) { + window.localStorage.removeItem(SESSION_KEY) + } else { + window.localStorage.setItem(SESSION_KEY, token) + } + } +} + +export { + SESSION_KEY, + token +} diff --git a/Web/src/components/ant-icon/index.jsx b/Web/src/components/ant-icon/index.jsx new file mode 100644 index 0000000..c2d1e22 --- /dev/null +++ b/Web/src/components/ant-icon/index.jsx @@ -0,0 +1,30 @@ +import React, { Component } from 'react' +import * as Icon from '@ant-design/icons' + +export default class AntIcon extends Component { + render() { + const type = (this.props.type || '').toUpperCase() + + if (type) { + if ( + type.indexOf('OUTLINED') >= 0 || + type.indexOf('FILLED') >= 0 || + type.indexOf('TWOTONE') >= 0 + ) { + const I = Icon[this.props.type] + return I ? : false + } else { + const t = + type + .split('-') + .map(p => { + return p[0] + p.slice(1).toLowerCase() + }) + .join('') + 'Outlined' + const I = Icon[t] + return I ? : false + } + } + return <> + } +} diff --git a/Web/src/components/authority-view/index.jsx b/Web/src/components/authority-view/index.jsx new file mode 100644 index 0000000..0bac500 --- /dev/null +++ b/Web/src/components/authority-view/index.jsx @@ -0,0 +1,257 @@ +import React, { Component } from 'react' +import { Card, Checkbox, Descriptions, Empty, Popover, Spin, Tooltip } from 'antd' +import { AntIcon } from 'components' +import { EMPTY_ID } from 'util/global' + +function generateList(data) { + data.forEach(item => { + if (item.children && item.children.length) { + generateList.call(this, item.children) + } + this.list.push(item) + }) +} + +function getVisible() { + const checked = this.list.filter(item => item.checked) + const caseChildren = checked.filter(item => item.visibleParent || item.type != 2) + const visibleParents = [] + // 递归寻找父级 + const findVisibleParents = children => { + const parents = [] + children.forEach(item => { + if (item.parentId) { + const parent = this.list.find(p => p.id === item.parentId) + if (parent) { + parents.push(parent) + visibleParents.push(parent) + } + } + }) + if (parents.length) { + findVisibleParents(parents) + } + } + + findVisibleParents(caseChildren) + + const checkedIds = checked.map(item => item.id) + const visibleParentsIds = visibleParents.map(item => item.id) + + const result = checkedIds + visibleParentsIds.forEach(item => { + if (!result.includes(item)) { + result.push(item) + } + }) + + return result +} + +function renderDescriptions(data) { + return data.map(item => { + return item.children && item.children.length + ? renderItem.call(this, item) + : renderCheckbox.call(this, item) + }) +} + +function renderItem(data) { + return ( + + this.onChange(e, data)} + > + {data.title} + + } + > + {renderDescriptions.call(this, data.children)} + + + ) +} + +function renderCheckbox(data) { + const grid = ( +

    + + ) + return data.remark ? ( + + {grid} + + ) : ( + grid + ) +} + +export default class AuthorityView extends Component { + state = { + loading: false, + dataSource: [], + } + + list = [] + + constructor(props) { + super(props) + + this.autoLoad = typeof this.props.autoLoad === 'boolean' ? this.props.autoLoad : true + this.loadData = + typeof this.props.loadData === 'function' ? this.props.loadData : async () => {} + } + + /** + * 自动加载数据 + */ + componentDidMount() { + if (this.autoLoad) { + this.onLoadData() + } + } + + onLoadData = async () => { + this.setState({ loading: true }) + + const res = await this.loadData() + + this.list = [] + generateList.call(this, res) + + if (this.props.defaultSelectedKeys) { + this.list.map(item => { + if ( + this.props.defaultSelectedKeys.includes(item.id) && + (!item.children || !item.children.length) + ) { + this.onSelect(true, item) + } + }) + } + + this.setState({ + dataSource: res, + loading: false, + }) + + this.onChange() + } + + onReloadData = () => { + this.onLoadData() + } + + onChange = (e, item) => { + if (e && item) { + this.onSelect(e.target.checked, item) + } + + const visible = getVisible.call(this) + + if (this.props.onSelect) { + this.props.onSelect( + // 返回所有选中 + this.list.filter(p => p.checked).map(p => p.id), + // 返回所有选中和半选 + this.list.filter(p => p.checked || p.indeterminate).map(p => p.id), + // 返回所有选中和半选,但是不返回没有子级选中visibleParent的半选 + visible + ) + } + } + + onSelect = (check, item) => { + item.checked = check + item.indeterminate = false + if (item.children && item.children.length) { + this.onChangeChildren(item.checked, item.children) + } + if (item.parentId) { + this.onChangeParent(item.checked, item.parentId) + } + + this.setState({ + dataSource: this.list.filter(p => p.parentId === EMPTY_ID), + }) + } + + onChangeParent = (checked, parentId) => { + const parent = this.list.find(p => p.id === parentId) + if (parent) { + const checkedCount = parent.children.filter(p => p.checked).length + const indeterminateCount = parent.children.filter(p => p.indeterminate).length + if (checkedCount === parent.children.length) { + // 全选 + parent.checked = true + parent.indeterminate = false + } else if (!checkedCount && !indeterminateCount) { + // 全不选 + parent.checked = false + parent.indeterminate = false + } else { + // 半选 + parent.checked = false + parent.indeterminate = true + } + this.onChangeParent(checked, parent.parentId) + } + } + + onChangeChildren = (checked, children) => { + children.forEach(p => { + p.checked = checked + p.indeterminate = false + if (p.children && p.children.length) { + this.onChangeChildren(checked, p.children) + } + }) + } + + render() { + return ( +
    + }> + {!this.state.loading ? ( + + {this.state.dataSource.map(item => { + return ( + this.onChange(e, item)} + > + {item.title} + + } + > + {renderDescriptions.call(this, item.children)} + + ) + })} + + ) : ( + + )} + +
    + ) + } +} diff --git a/Web/src/components/authorized/handler.js b/Web/src/components/authorized/handler.js new file mode 100644 index 0000000..e17026a --- /dev/null +++ b/Web/src/components/authorized/handler.js @@ -0,0 +1,141 @@ +import store from 'store' + +const { getState } = store + +const stroePath = 'user' + +const authByArray = (auth, permissions) => { + + const flags = [] + + auth.forEach(p => { + switch (p.constructor) { + case String: + flags.push([permissions.includes(p), '&&']) + break + case Array: + flags.push([authByArray(p, permissions), '||']) + break + case Boolean: + flags.push([p, '&&']) + break + default: + break + } + }) + + let result + + flags.forEach((p, i) => { + if (p[1] === '&&') { + if (i === 0) { + result = true + } + if (result) { + result = p[0] + } + } else { + if (i === 0) { + result = false + } + if (!result) { + result = p[0] + } + } + //result = p[1] === '&&' ? result && p[0] : result || p[0] + }) + + return result +} + +const authByJson = (auth, permissions) => { + + let result = true + + const flags = [] + + const deepName = (arr, key) => { + arr.forEach((p, i) => { + switch (p.constructor) { + case String: + arr[i] = `${key}:${p}` + break + case Array: + p = deepName(p, key) + break + default: + break + } + }) + return arr + } + + for (let key in auth) { + const app = auth[key] + switch (app.constructor) { + case String: + flags.push(permissions.includes(`${key}:${app}`)) + break + case Array: + flags.push(authByArray(deepName(app, key), permissions)) + break + default: + break + } + } + + flags.forEach(p => { + result = result && p + }) + + return result + +} + +const auth = (auth, force = false) => { + + let info = this + + if (!info || !Object.keys(info).length) { + info = getState(stroePath) + } + + if (!info) { + return false + } + + /** + * 超级管理员 + */ + if (info.adminType === 1 && !force) { + return true + } + + const permissions = info.permissions + + if (!permissions) { + return false + } + + let flag = false + + if (auth) { + switch (auth.constructor) { + case String: + flag = permissions.includes(auth) + break + case Array: + flag = authByArray(auth, permissions) + break + case Object: + flag = authByJson(auth, permissions) + break + default: + break + } + } + + return flag +} + +export default auth \ No newline at end of file diff --git a/Web/src/components/authorized/index.jsx b/Web/src/components/authorized/index.jsx new file mode 100644 index 0000000..4b75a8e --- /dev/null +++ b/Web/src/components/authorized/index.jsx @@ -0,0 +1,72 @@ +/** + * auth: 允许的权限 + * authExclude: 排除的权限 + * + * auth的几种传值方式 + * 1.String + * 例: auth="sysApp:page" + * 直接传入字符串,对单项权限进行验证 + * + * 2.Array + * 2.1.单项权限 + * 例: auth={['sysApp:page']} + * 2.2.并且关系多项权限 + * 例: auth={['sysApp:page', 'sysApp:add']} + * 数组中传入多个字符串 + * 此时验证的是同时拥有"sysApp:page"和"sysApp:add"两项权限才会渲染 + * 2.3.或者关系多项权限 + * 例: auth={[['sysApp:page', 'sysApp:add'], ['sysApp:edit']]} + * 二维数组结构,内部数组之间为并且关系 + * 此时验证的是"sysApp:page"&"sysApp:add"||"sysApp:edit" + * 注意:或者的条件必须包括在数组中,暴露在外则判定为并且 + * 2.4.可直接传入布尔值 + * 例: auth={['sysApp:page', 1 === 1]} + * auth={[['sysApp:page', 'sysApp:add'], [1 === 1]]} + * + * 3.Json + * 如果觉得多项权限时每次都要写应用编号比较繁琐,可对Array形式进行简化 + * 3.1.单项权限 + * 例: auth={{ sysApp: 'page' }} + * 3.2.并且关系多项权限 + * 例: auth={{ sysApp: ['page', 'add'] }} + * 3.3.或者关系多项权限 + * 例: auth={{ sysApp: [['page', 'add'], ['edit']]}} + * 3.4.可直接传入布尔值 + * 例: auth={{ sysApp: ['page', 1 === 1] }} + * auth={{ sysApp: [['page', 'add'], [1 === 1]] }} + * + */ + +import React, { Component } from 'react' +import store from 'store' +import auth from './handler' + +const { getState, subscribe } = store + +const stroePath = 'user' + +export default class Auth extends Component { + state = getState(stroePath) + + constructor(props) { + super(props) + + this.unsubscribe = subscribe(stroePath, () => { + this.setState(getState(stroePath)) + }) + } + + componentWillUnmount() { + this.unsubscribe() + } + + render() { + const flag = auth.call(this.state, this.props.auth, this.props.force) + + if (flag) { + return this.props.children || <> + } + + return <> + } +} diff --git a/Web/src/components/business/house-log/index.jsx b/Web/src/components/business/house-log/index.jsx new file mode 100644 index 0000000..2fd9638 --- /dev/null +++ b/Web/src/components/business/house-log/index.jsx @@ -0,0 +1,143 @@ +import React, { Component } from 'react' +import { Button, Descriptions, Spin, Steps, Timeline } from 'antd' +import { AntIcon } from 'components' +import { api } from 'common/api' +import getDictData from 'util/dic' +import { toCamelCase } from 'util/format' + +const ellipsisType = [3, 4, 6] + +export default class houseLog extends Component { + state = { + loading: true, + codes: { + houseLogType: [], + }, + data: [], + ellipsis: true, + } + + ellipsisFlag = [] + + async componentDidMount() { + const { id, infoId, taskId } = this.props + const state = { loading: false } + + state.codes = await getDictData('house_log_type') + + if (id) { + const { data } = await api.houseLogList({ id }) + state.data = data + } else if (infoId) { + const { data } = await api.houseLogListByInfoId({ id: infoId }) + state.data = data + } else if (taskId) { + const { data } = await api.houseLogListByTaskId({ id: taskId }) + state.data = data + } + this.setState(state) + } + + bindCodeValue(code, name) { + name = toCamelCase(name) + const codes = this.state.codes[name] + if (codes) { + const c = codes.find(p => p.code == code) + if (c) { + return c.value + } + } + return null + } + + render() { + const { loading, data, ellipsis } = this.state + + let button = false + + return ( + } className="h-400-min"> + + {data.map((item, i) => { + let show = true + if ( + ellipsisType.includes(item.type) && + !this.ellipsisFlag.includes(item.type) + ) { + this.ellipsisFlag.push(item.type) + } else if ( + ellipsisType.includes(item.type) && + this.ellipsisFlag.includes(item.type) + ) { + show = false + } + if (show || !ellipsis) { + return ( + + ) : ( + [ + , + , + , + ][item.status] + ) + } + > +
    + + {['等待', '正在', ''][item.status] + + this.bindCodeValue(item.type, 'house_log_type')} + +
    +

    {item.finishedTime}

    + + {item.remark && ( + {item.remark} + )} + + {item.targetUserNames.split(',').join(' / ')} + + {item.finishedUserName && ( + + {item.finishedUserName} + + )} + +
    + ) + } else if (!button) { + button = true + return ( + } + onClick={() => this.setState({ ellipsis: false })} + /> + } + > +
    +
    + ) + } + + return <> + })} +
    +
    + ) + } +} diff --git a/Web/src/components/component-dynamic/index.jsx b/Web/src/components/component-dynamic/index.jsx new file mode 100644 index 0000000..45d447c --- /dev/null +++ b/Web/src/components/component-dynamic/index.jsx @@ -0,0 +1,49 @@ +import React, { Component } from 'react' +import { cloneDeep } from 'lodash' + +export default class ComponentDynamic extends Component { + + state = { + key: null, + component: null + } + + componentDidMount() { + this.loadComponent() + } + + async loadComponent() { + let component; + + try { + if (this.props.is) { + if (this.props.is.constructor === Function) { + // 导入函数 + component = await this.props.is() + } else { + // 导入路径,必须是src以下节点,如 pages/home + component = await import(`../../${this.props.is}`) + } + } + } catch { + component = await import(`views/error/404`) + } + + this.setState({ + key: Math.random().toString(16).slice(2), + component: component.default + }) + } + + render() { + + const props = cloneDeep(this.props) + + delete props.is + + if (this.state.component) { + return + } + return <> + } +} \ No newline at end of file diff --git a/Web/src/components/container/index.jsx b/Web/src/components/container/index.jsx new file mode 100644 index 0000000..c2edbdc --- /dev/null +++ b/Web/src/components/container/index.jsx @@ -0,0 +1,23 @@ +import React, { Component } from 'react' + +export default class Container extends Component { + getMode(mode) { + const c = 'container' + const modes = ['xxs', 'xs', 'sm', 'md', 'fluid'] + if (modes.includes(mode)) { + return `${c}-${mode}` + } + return c + } + + render() { + const { mode, className, children } = this.props + + let containerName = this.getMode(mode) + if (className) { + containerName = [containerName, className].join(' ') + } + + return
    {children}
    + } +} diff --git a/Web/src/components/form/braft-editor/index.jsx b/Web/src/components/form/braft-editor/index.jsx new file mode 100644 index 0000000..957dd3a --- /dev/null +++ b/Web/src/components/form/braft-editor/index.jsx @@ -0,0 +1,58 @@ +import React, { Component } from 'react' +import BraftEditor from 'braft-editor' +import 'braft-editor/dist/index.css' + +export default class index extends Component { + state = { + editorState: '', + outputHTML: '', + } + + /** + * mount后回调 + */ + componentDidMount() { + this.isLivinig = true + this.toParent() + } + componentWillUnmount() { + this.isLivinig = false + } + handleChange = editorState => { + const outputHTML = editorState.toHTML() + + const { onChange } = this.props + + this.setState({ + editorState: editorState, + outputHTML, + }) + + onChange && onChange(outputHTML) + } + + setEditorContentAsync = () => { + this.isLivinig && + this.setState({ + editorState: BraftEditor.createEditorState(this.props.value), + }) + } + + //给父控件 调用这个方法 因为只有父控件才能掌握页面加载完的时间 + toParent = () => { + this.props.parent.getChildrenMsg(this.setEditorContentAsync) + } + render() { + const { editorState } = this.state + const controls = ['bold', 'italic', 'underline', 'text-color', 'separator'] + + return ( + + ) + } +} diff --git a/Web/src/components/form/color-selector/index.jsx b/Web/src/components/form/color-selector/index.jsx new file mode 100644 index 0000000..3d67ab9 --- /dev/null +++ b/Web/src/components/form/color-selector/index.jsx @@ -0,0 +1,55 @@ +import React, { Component } from 'react' +import { Col, Row, Select } from 'antd' +import { ChromePicker } from 'react-color' + +export default class index extends Component { + select = React.createRef() + + state = { + color: null, + } + + onChange(color) { + this.setState({ color: color.hex }) + } + + onChangeComplete(color) { + this.props.onChange && this.props.onChange(color.hex) + } + + render() { + const { color } = this.state + + const { value } = this.props + + return ( + + + + {options.projects.map(item => ( + + {item.name}({item.note}) + + ))} + + + + + + + + + + + + + + + + + + value.padStart(3, '0')} + max={999} + min={1} + precision={0} + step={1} + className="w-100-p" + placeholder="请输入房屋序号" + /> + + + {showIndustry && -} + + + {houseCode && ( + + + {houseCode} + + + )} + 房屋编码说明

    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 z�?qMv+-h-p)roYApCfmmvD*%l`B(0MfxSYPvd!S!13C+aZ75J5_%Sesz<)nO5w) zQH6=)3P+J3a(@~jUu=ggN=OG&*U-}DB~nNw&gA6}r>#}mLIvK0{3pHFrn&I)1Gj5r`C^I!!*uN+k*1Wg^kT%3QhV8%gEhp= zSCN+|2iB=J@+sO?fg?B~z1%R$;OFH^zQJYkU(YguEzIt!a-p1@A8Lx-$|N%UM7#5y z!H#q5Rfr@Ys8%QCUKa8YS82%Pj2d?swV3mU4Fds!-2$D>SjsDQJ+k zOY)#~#R=TD+a zM?<@%QQa|IVDar<5i!8WPik9oJHaAO12Z>1X1S0+~Bxk<_0$>deA!^Z}nCQk5!0Zr!uJ`7`&WSLKc? zvD|EV7@#4>G3i`c$}=_wTB0Q)BOV7_=gx`&tSIT(;#2QUK5^<6jG0TzV{F;TMbFIh zR7#RZ9+?6Tc7jGc*yfE^S@n4(UXX4$`3zGUJ>hLZ<&6E!+q1|x;8u3w9hd+zPD#hD zHMMt3EBRb_uoX%5CWN=t+REXij@k#4JTtC#{JEsg|bFDtF9T0?!=ICNUp2GEEp7axGn%~!)D)?T-6Xc?CeLo?+#8|Ir&u@ zyG=Ht$HlZ906nR;kQNIK$BZUUKN`+Ye=|$o05ar}#UxYUePATF(dM5Sk@J8@Ja8*L z65YuvE+3WwkELjJIoiiZhBDY@z`-4S%`VbpdyC{zf(MDHK>Zq9D<{A07KvdPCO?Q* zl&R>e$o}rs4)ZJ?Mj2_&ByS~e78`!H`Q3K=K0$KP9IeWRvHFR^#+vri;GXTimi{D=6OSv(qXt zznLF}VaOxpUr+rW57j-5*Y&64e%o{>(LrX%)QU-48Zq6nzB-R;Z>Jx0KEd?s`R0&f zuW5VPT1P%6C7Ao3Y6K}c4e!UDChds&r(yume?~gCuBE#$nsg4!{eCUuQ*>P`iHKlHV5ntiUFpu+zEWp5hB20W2*{AtJ7 zBjul5ijFhT*Sc3gB=9-*q$BHpqo@Xt*ez39kN|FEF{vl^5OevH_*cqqE*|3MONJ-B zk;{|rPHXEuwjbG_(bkutsRBlYRzc^vyiNS;e`cw1>PsL2P*o(Dd)fd;;}`X18^cABoVK?LH~Bai(}{{Y(1pFn*zWZyF? zIat^Bq&Xn{1$@u7TJL8q`$KtWd7-_{%njX}n|Z`wo~Mj*dBM$n2uzk1Q{GJ3iUetx zpD?38%k!_!7g~(hw|5tEjLS5QD<4u$O(ztKa&&H^?N4Tq0}p29f@NUKBvXajM?;RE zl{dQmCMEr`hT})Klw%v@wSd3k0Or0@w=6IM3Yfo?54gNjTS?r{r}kbAAGG)LK{b=C zFpcbG0|z_>8vrBLtkm_M%;*};)}Ec5kPCTw6_TYYwGpZ!yb8vnvC~ zo@&JHWN8d>2Gs≈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 `wvL-h|UBXw9 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%0DA?f(A&W9U|TO54M4Z+B~_Y@N&Zr(-tW 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

    } + description={ + <> + 房屋所在市 + + + + + —县(市、区) + + + —街道(乡、镇) + + + + —社区、居(村)委会) + + + + —项目 + + + + —实物幢序号 + + + 。 + 根据省厅既有建筑物编号规则,房屋所在区域编号按照市、县(市、区)、街道(乡、镇)、社区、居(村)委会)、项目分类,其中市、县(市)区部分按照《中华人民共和国行政区划代码》(GB2260)标准编码,街道(乡、镇)按《县以下行政区划代码编码规则》(GB10114-88)标准编码,社区、居(村)委会部分按照统计局提供编码设定。各地上报各街道社区名称后,上述编号由系统自动生成。 +
    + 各社区下辖项目由各地负责统一编码,住宅项目序号一般一个小区一号,采用3位数,001号起编,范围为001~999。实物幢序号由各地负责统一编码,以幢为单位,采用3位数,001号起编,范围为001~999。 + + } + /> +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) + } +} diff --git a/Web/src/pages/business/house/code/index.jsx b/Web/src/pages/business/house/code/index.jsx new file mode 100644 index 0000000..e58140a --- /dev/null +++ b/Web/src/pages/business/house/code/index.jsx @@ -0,0 +1,369 @@ +import React, { Component } from 'react' +import { + Button, + Card, + Cascader, + Form, + Input, + Tag, + Popconfirm, + message as Message, + Radio, + Select, + Drawer, +} from 'antd' +import { isEqual } from 'lodash' +import { AntIcon, Auth, Container, HouseLog, QueryTable, QueryTableActions } from 'components' +import { api } from 'common/api' +import getDictData from 'util/dic' +import auth from 'components/authorized/handler' +import { toCamelCase } from 'util/format' +import { getSearchInfo } from 'util/query' + +// 配置页面所需接口函数 +const apiAction = { + page: api.houseCodePage, +} + +// 用于弹窗标题 +const name = '房屋编码' + +export default class index extends Component { + state = { + codes: { + houseType: [], + houseIndustry: [], + }, + + options: { + areaTree: [], + }, + + type: '', + + visibleLog: false, + } + + // 表格实例 + table = React.createRef() + + // 表格字段 + columns = [ + { + title: '房屋编码', + dataIndex: 'houseCode', + sorter: true, + width: 400, + render: (text, record) => ( + <> + {`${record.areaName}-${record.roadName}-${record.commName}-${ + record.fullProjName + }-${record.no.toString().padStart(3, '0')}`} +
    + {text} + + ), + }, + { + title: '房屋性质及行业', + dataIndex: 'type', + sorter: true, + width: 150, + render: (text, record) => + this.bindCodeValue(text, 'house_type') + + (text === 2 ? `(${this.bindCodeValue(record.industry, 'house_industry')})` : ''), + }, + { + title: '地址', + dataIndex: 'address', + sorter: true, + }, + { + title: '登记时间', + width: 180, + dataIndex: 'createdTime', + sorter: true, + }, + ] + + /** + * 构造函数,在渲染前动态添加操作字段等 + * @param {*} props + */ + constructor(props) { + super(props) + + const flag = auth({ houseCode: [['edit'], ['delete']] }) + + if (flag) { + this.columns.push({ + title: '操作', + width: 180, + dataIndex: 'actions', + render: (text, record) => ( + + +
    this.onOpen(record)}>编辑 + + + this.onDelete(record)} + > + 删除 + + + this.onShowLog(record.id)}>日志 + + ), + }) + } + } + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * 加载字典数据,之后开始加载表格数据 + * 如果必须要加载字典数据,可直接对表格设置autoLoad=true + */ + componentDidMount() { + const { onLoading, onLoadData } = this.table.current + onLoading() + getDictData('house_type', 'house_industry').then(async res => { + const { data } = await api.getAreaTree() + this.setState( + { + codes: res, + options: { + areaTree: data, + }, + }, + () => { + onLoadData() + } + ) + }) + } + + /** + * 调用加载数据接口,可在调用前对query进行处理 + * [异步,必要] + * @param {*} params + * @param {*} query + * @returns + */ + loadData = async (params, query) => { + if (query.areaCode) { + query.areaCode = query.areaCode.pop() + } + + const searchInfo = getSearchInfo({ + query, + queryType: { + areaCode: '=', + houseCode: 'like', + type: '=', + address: 'like', + }, + }) + + const { data } = await apiAction.page({ + ...params, + searchInfo, + }) + return data + } + + /** + * 绑定字典数据 + * @param {*} code + * @param {*} name + * @returns + */ + bindCodeValue(code, name) { + name = toCamelCase(name) + const codes = this.state.codes[name] + if (codes) { + const c = codes.find(p => p.code == code) + if (c) { + return c.value + } + } + return null + } + + /** + * 打开新增/编辑弹窗 + * @param {*} modal + * @param {*} record + */ + onOpen(record) { + const path = 'business/house/code/form' + window.openContentWindow({ + key: record ? record.id : path, + title: record ? '修改房屋编码' : '新增房屋编码', + subTitle: + record && + `${record.areaName}-${record.roadName}-${record.commName}-${record.note}-${record.no + .toString() + .padStart(3, '0')}`, + path, + param: { + id: record && record.id, + }, + }) + // modal.current.open({ + // record + // }) + } + + /** + * 对表格上的操作进行统一处理 + * [异步] + * @param {*} action + * @param {*} successMessage + */ + async onAction(action, successMessage) { + const { onLoading, onLoaded, onReloadData } = this.table.current + onLoading() + try { + if (action) { + await action + } + if (successMessage) { + Message.success(successMessage) + } + onReloadData() + } catch { + onLoaded() + } + } + + /** + * 删除 + * @param {*} record + */ + onDelete(record) { + this.onAction(apiAction.delete(record), '删除成功') + } + + //#region 自定义方法 + onShowLog(id) { + this.setState({ visibleLog: id }) + } + //#endregion + + render() { + const { options, codes, type, visibleLog } = this.state + + return ( + +
    + + { + if (values.hasOwnProperty('type')) { + this.setState({ type: values.type }) + } + }} + query={ + + + labels.join(' - ')} + fieldNames={{ + label: 'name', + value: 'code', + children: 'children', + }} + options={options.areaTree} + className="w-400" + expandTrigger="hover" + placeholder="请选择所在区域" + /> + + + + + {/* + value && value.padStart(3, '0')} + max={999} + min={1} + precision={0} + step={1} + placeholder="请输入房屋序号" + /> + */} + + + 全部 + {codes.houseType.map(item => ( + + {item.value} + + ))} + + + {type == 2 && ( + + + + )} + + + + + } + operator={ + + + + } + /> + + this.setState({ visibleLog: false })} + destroyOnClose + > + + +
    + ) + } +} diff --git a/Web/src/pages/business/house/company/form.jsx b/Web/src/pages/business/house/company/form.jsx new file mode 100644 index 0000000..80646d0 --- /dev/null +++ b/Web/src/pages/business/house/company/form.jsx @@ -0,0 +1,180 @@ +import React, { Component } from 'react' +import { Button, Col, Form, Input, Row, Select, Spin } from 'antd' +import { AntIcon } from 'components' +import { api } from 'common/api' +import getDictData from 'util/dic' + +const initialValues = {} + +export default class form extends Component { + state = { + // 加载状态 + loading: true, + + codes: { + houseCompanyType: [], + }, + } + + // 表单实例 + form = React.createRef() + + // 初始化数据 + record = {} + + /** + * mount后回调 + */ + componentDidMount() { + this.props.created && this.props.created(this) + } + + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + const state = { loading: false } + //#region 从后端转换成前段所需格式,也可以在此处调用获取详细数据接口 + state.codes = await getDictData('house_company_type') + if (params.id) { + this.record = (await api.houseCompanyDetail({ id: params.id })).data + const { type, info } = this.record + if (type) { + this.record.type = type.split(',') + } + } + //#endregion + this.form.current.setFieldsValue(this.record) + + this.setState(state) + } + + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + if (this.record) { + postData.id = this.record.id + } + //#region 从前段转换后端所需格式 + const { type, info } = postData + if (Array.isArray(type)) { + postData.type = type.join(',') + } + //#endregion + return postData + } + } + + //#region 自定义方法 + //#endregion + + render() { + const { codes } = this.state + + return ( +
    + }> +
    + + + + + + +
    + + {(fields, { add, remove }) => ( + <> + {fields.map(({ key, name, fieldKey, ...restField }) => ( + + + remove(name)} + /> + + + + + + + + + + + + + ))} + + + + + )} + +
    +
    +
    +
    + ) + } +} diff --git a/Web/src/pages/business/house/company/index.jsx b/Web/src/pages/business/house/company/index.jsx new file mode 100644 index 0000000..c49000a --- /dev/null +++ b/Web/src/pages/business/house/company/index.jsx @@ -0,0 +1,295 @@ +import React, { Component } from 'react' +import { + Button, + Card, + Descriptions, + Form, + Input, + message as Message, + Popconfirm, + Select, +} from 'antd' +import { AntIcon, Auth, Container, ModalForm, QueryTable, QueryTableActions } from 'components' +import { api } from 'common/api' +import auth from 'components/authorized/handler' +import { isEqual } from 'lodash' +import getDictData from 'util/dic' +import { toCamelCase } from 'util/format' +import FormBody from './form' + +/** + * 注释段[\/**\/]为必须要改 + */ + +/** + * 配置页面所需接口函数 + */ +const apiAction = { + page: api.houseCompanyPage, + add: api.houseCompanyAdd, + edit: api.houseCompanyEdit, + delete: api.houseCompanyDelete, +} + +/** + * 用于弹窗标题 + * [必要] + */ +const name = '单位' + +/** + * 统一配置权限标识 + * [必要] + */ +const authName = 'houseCompany' + +export default class index extends Component { + state = { + codes: { + houseCompanyType: [], + }, + } + + // 表格实例 + table = React.createRef() + + // 新增窗口实例 + addForm = React.createRef() + // 编辑窗口实例 + editForm = React.createRef() + + columns = [ + { + title: '名称', + width: 300, + dataIndex: 'name', + }, + { + title: '类型', + width: 300, + dataIndex: 'type', + render: text => + text + .split(',') + .map(p => this.bindCodeValue(p, 'house_company_type')) + .join(' / '), + }, + ] + + /** + * 构造函数,在渲染前动态添加操作字段等 + * @param {*} props + */ + constructor(props) { + super(props) + + const flag = auth({ [authName]: [['edit'], ['delete']] }) + + if (flag) { + this.columns.push({ + title: '操作', + width: 150, + dataIndex: 'actions', + render: (text, { id }) => ( + + + this.onOpen(this.editForm, id)}>编辑 + + + this.onDelete(id)} + > + 删除 + + + + ), + }) + } + } + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * 加载字典数据,之后开始加载表格数据 + * 如果必须要加载字典数据,可直接对表格设置autoLoad=true + */ + componentDidMount() { + const { onLoading, onLoadData } = this.table.current + onLoading() + api.houseCompanyList({ type: '1' }) + getDictData('house_company_type').then(codes => { + this.setState({ codes }, () => { + onLoadData() + }) + }) + } + + /** + * 调用加载数据接口,可在调用前对query进行处理 + * [异步,必要] + * @param {*} params + * @param {*} query + * @returns + */ + loadData = async (params, query) => { + const { data } = await apiAction.page({ + ...params, + ...query, + }) + return data + } + + /** + * 绑定字典数据 + * @param {*} code + * @param {*} name + * @returns + */ + bindCodeValue(code, name) { + name = toCamelCase(name) + const codes = this.state.codes[name] + if (codes) { + const c = codes.find(p => p.code == code) + if (c) { + return c.value + } + } + return null + } + + /** + * 打开新增/编辑弹窗 + * @param {*} modal + * @param {*} id + */ + onOpen(modal, id) { + modal.current.open({ id }) + } + + /** + * 对表格上的操作进行统一处理 + * [异步] + * @param {*} action + * @param {*} successMessage + */ + async onAction(action, successMessage) { + const { onLoading, onLoaded, onReloadData } = this.table.current + onLoading() + try { + if (action) { + await action + } + if (successMessage) { + Message.success(successMessage) + } + onReloadData() + } catch { + onLoaded() + } + } + + /** + * 删除 + * @param {*} id + */ + onDelete(id) { + this.onAction(apiAction.delete({ id }), '删除成功') + } + + //#region 自定义方法 + //#endregion + + render() { + const { codes } = this.state + + return ( + +
    + + + + + + + + + + } + operator={ + + + + } + expandedRowRender={record => ( + + {record.info.map((item, i) => ( + + {item.value} + + ))} + + )} + /> + + + + this.table.current.onReloadData()} + > + + + + + + this.table.current.onReloadData()} + > + + + +
    + ) + } +} diff --git a/Web/src/pages/business/house/info/form/base/aspect.jsx b/Web/src/pages/business/house/info/form/base/aspect.jsx new file mode 100644 index 0000000..021ac46 --- /dev/null +++ b/Web/src/pages/business/house/info/form/base/aspect.jsx @@ -0,0 +1,230 @@ +import React, { Component } from 'react' +import { Form, Spin, Upload } from 'antd' +import { AntIcon, PhotoPreview } from 'components' +import { cloneDeep, isEqual } from 'lodash' +import { BlobToBase64, GetFileName, PreviewFile } from 'util/file' +import { api } from 'common/api' + +const initialValues = {} + +const layout = { + labelCol: { flex: '150px' }, + wrapperCol: { flex: '1' }, +} + +export default class aspect extends Component { + state = { + loading: true, + codes: {}, + options: {}, + } + + // 表单实例 + form = React.createRef() + + photoPreview = React.createRef() + + // 初始化数据 + record = {} + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * 绑定数据 + */ + componentDidMount() { + this.fillData({ + record: this.props.record, + }) + } + + /** + * DOM加载完成钩子,在此将自身传递给父级 + */ + call() { + if (this.props.onRef) { + this.props.onRef(this) + } + } + + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + this.record = cloneDeep(params.record) + //#region 从后端转换成前段所需格式 + if (this.record) { + const { houseInfo } = this.record + const fileValue = [] + const fileList = + !houseInfo.facadePhoto || !houseInfo.facadePhoto.length + ? [] + : houseInfo.facadePhoto.split(',') + for (const fileId of fileList) { + try { + const file = await PreviewFile(fileId) + const base64 = await BlobToBase64(file) + fileValue.push({ + uid: fileId, + response: fileId, + name: file.name, + url: base64, + status: 'done', + }) + } catch { + const { data: file } = await api.sysFileInfoDetail({ id: fileId }) + fileValue.push({ + uid: fileId, + response: '文件已丢失', + name: file.fileOriginName, + status: 'error', + }) + } + } + + houseInfo.facadePhoto = fileValue + } + //#endregion + this.form.current && this.form.current.setFieldsValue(this.record) + + this.setState({ loading: false }) + this.call() + } + + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + //#region 从前段转换后端所需格式 + postData.houseInfo.facadePhoto = postData.houseInfo.facadePhoto + .map(item => (item.uid.startsWith('rc-upload') ? item.response : item.uid)) + .join(',') + //#endregion + return postData + } + } + + //#region 自定义方法 + /** + * 表单change事件处理,包括了所有字段的change + * [异步,非必要] + * @param {*} changedValues + * @param {*} allValues + */ + async onValuesChange(changedValues, allValues) {} + + async onFileUpload({ file, onProgress, onSuccess, onError }) { + onProgress({ + percent: 0, + }) + const fd = new FormData() + fd.append('file', file) + try { + const { data: fileId } = await api.sysFileInfoUpload(fd) + onSuccess(fileId) + } catch { + onError() + } + } + + async onFilePreview(file, key) { + const fileList = this.form.current + .getFieldValue(['houseInfo', key]) + .filter(p => p.status === 'done') + const items = [] + for (const _file of fileList) { + const img = new Image() + const src = _file.url || _file.thumbUrl + img.src = src + items.push({ + src, + w: img.naturalWidth, + h: img.naturalHeight, + }) + } + this.photoPreview.current.initPhotoSwipe(items, { + index: fileList.indexOf(file), + }) + } + + async onFileDownload(file) { + const { data, headers } = await api.sysFileInfoDownload({ id: file.response }) + const url = window.URL.createObjectURL(data) + const fileName = GetFileName(headers['content-disposition']) + const a = document.createElement('a') + a.href = url + a.download = fileName + a.click() + window.URL.revokeObjectURL(url) + a.remove() + } + //#endregion + + render() { + const { loading } = this.state + + return ( + }> +
    + this.onValuesChange(changedValues, allValues) + } + > + { + if (Array.isArray(e)) { + return e + } + return e && e.fileList + }} + > + this.onFileUpload(e)} + showUploadList={{ + showRemoveIcon: true, + showDownloadIcon: true, + }} + onPreview={file => this.onFilePreview(file, 'facadePhoto')} + onDownload={file => this.onFileDownload(file)} + > +
    + +
    外立面照片
    +
    +
    +
    +
    + + +
    + ) + } +} diff --git a/Web/src/pages/business/house/info/form/base/attachments.jsx b/Web/src/pages/business/house/info/form/base/attachments.jsx new file mode 100644 index 0000000..b9ac6ce --- /dev/null +++ b/Web/src/pages/business/house/info/form/base/attachments.jsx @@ -0,0 +1,238 @@ +import React, { Component } from 'react' +import { Button, Form, Spin, Upload } from 'antd' +import { AntIcon } from 'components' +import { cloneDeep, isEqual } from 'lodash' +import { BlobToBase64, GetFileName, PreviewFile } from 'util/file' +import { api } from 'common/api' + +const initialValues = {} + +const layout = { + labelCol: { flex: '150px' }, + wrapperCol: { flex: '1' }, +} + +const uploads = [ + { + key: 'anEntryDocument', + label: '立项文件', + }, + { + key: 'planningPermission', + label: '规划许可', + }, + { + key: 'completionRecord', + label: '竣工验收备案', + }, + { + key: 'monitorDocument', + label: '监理文件', + }, + { + key: 'identificationReport', + label: '鉴定报告', + }, + { + key: 'otherDocument', + label: '其他附件', + }, +] + +export default class attachments extends Component { + state = { + loading: true, + codes: {}, + options: {}, + } + + // 表单实例 + form = React.createRef() + + // 初始化数据 + record = {} + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * 绑定数据 + */ + componentDidMount() { + this.fillData({ + record: this.props.record, + }) + } + + /** + * DOM加载完成钩子,在此将自身传递给父级 + */ + call() { + if (this.props.onRef) { + this.props.onRef(this) + } + } + + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + this.record = cloneDeep(params.record) + //#region 从后端转换成前段所需格式 + if (this.record) { + const { houseInfo } = this.record + const keys = uploads.map(p => p.key) + for (const key of keys) { + const fileValue = [] + const fileList = + !houseInfo[key] || !houseInfo[key].length ? [] : houseInfo[key].split(',') + for (const fileId of fileList) { + try { + const file = await PreviewFile(fileId) + const base64 = await BlobToBase64(file) + fileValue.push({ + uid: fileId, + response: fileId, + name: file.name, + url: base64, + status: 'done', + }) + } catch { + const { data: file } = await api.sysFileInfoDetail({ id: fileId }) + fileValue.push({ + uid: fileId, + response: '文件已丢失', + name: file.fileOriginName, + status: 'error', + }) + } + } + + houseInfo[key] = fileValue + } + } + //#endregion + this.form.current && this.form.current.setFieldsValue(this.record) + + this.setState({ loading: false }) + this.call() + } + + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + //#region 从前段转换后端所需格式 + const { houseInfo } = postData + for (const key in houseInfo) { + houseInfo[key] = houseInfo[key] + .map(item => (item.uid.startsWith('rc-upload') ? item.response : item.uid)) + .join(',') + } + //#endregion + return postData + } + } + + //#region 自定义方法 + /** + * 表单change事件处理,包括了所有字段的change + * [异步,非必要] + * @param {*} changedValues + * @param {*} allValues + */ + async onValuesChange(changedValues, allValues) {} + + async onFileUpload({ file, onProgress, onSuccess, onError }) { + onProgress({ + percent: 0, + }) + const fd = new FormData() + fd.append('file', file) + try { + const { data: fileId } = await api.sysFileInfoUpload(fd) + onSuccess(fileId) + } catch { + onError() + } + } + + async onFileDownload(file) { + const { data, headers } = await api.sysFileInfoDownload({ id: file.response }) + const url = window.URL.createObjectURL(data) + const fileName = GetFileName(headers['content-disposition']) + const a = document.createElement('a') + a.href = url + a.download = fileName + a.click() + window.URL.revokeObjectURL(url) + a.remove() + } + //#endregion + + render() { + const { loading } = this.state + + return ( + }> +
    + this.onValuesChange(changedValues, allValues) + } + > + {uploads.map((item, i) => ( + { + if (Array.isArray(e)) { + return e + } + return e && e.fileList + }} + > + this.onFileUpload(e)} + showUploadList={{ + showRemoveIcon: true, + showDownloadIcon: true, + }} + onPreview={() => false} + onDownload={file => this.onFileDownload(file)} + > + + + + ))} +
    +
    + ) + } +} diff --git a/Web/src/pages/business/house/info/form/base/building.jsx b/Web/src/pages/business/house/info/form/base/building.jsx new file mode 100644 index 0000000..9977b3d --- /dev/null +++ b/Web/src/pages/business/house/info/form/base/building.jsx @@ -0,0 +1,955 @@ +import React, { Component } from 'react' +import { + Button, + Row, + Col, + Form, + Input, + InputNumber, + Radio, + Checkbox, + Switch, + DatePicker, + Spin, +} from 'antd' +import { cloneDeep, first, isEqual, last, sortBy } from 'lodash' +import { AntIcon } from 'components' +import getDictData from 'util/dic' +import moment from 'moment' +import { CITY } from 'util/global' +import store from 'store' + +const initialValues = { + houseInfo: { + houseUsedStatus: 1, + landAttribute: 1, + curtainWall: 0, + faceBrick: 0, + coating: 0, + painting: 0, + elevator: '0', + }, +} + +const { getState, dispatch } = store + +const layout = { + labelCol: { flex: '150px' }, + wrapperCol: { flex: '1' }, +} + +const checkboxKeys = ['insulationMaterial', 'wallMaterial'] + +export default class building extends Component { + state = { + loading: true, + codes: { + houseUsedStatus: [], + landAttribute: [], + houseStructureType: [], + houseAseismicGrade: [], + houseBaseInfo: [], + houseInsulationMaterial: [], + houseWallMaterial: [], + houseFireproofGrade: [], + houseBuildingCurtainWall: [], + houseElevator: [], + }, + + showMap: false, + showKeepWarmMaterialText: false, + + theme: getState('layout').theme, + } + + form = React.createRef() + + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + componentDidMount() { + this.fillData({ + record: this.props.record, + }) + } + + componentWillUnmount() { + dispatch({ + type: 'PATROL_REMOVE_INIT_GRADE_BY_COMPLETED_DATE', + id: this.props.id, + }) + } + + call() { + if (this.props.onRef) { + this.props.onRef(this) + } + } + + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + this.record = cloneDeep(params.record) + const _state = { loading: false } + //#region 从后端转换成前段所需格式 + if (this.record) { + const { houseInfo } = this.record + if (houseInfo.completedDate) { + houseInfo.completedDate = moment(houseInfo.completedDate) + dispatch({ + type: 'PATROL_INIT_GRADE_BY_COMPLETED_DATE', + date: { + id: this.props.id, + value: +houseInfo.completedDate.format('YYYY'), + }, + }) + } + + // checkbox + checkboxKeys.forEach(key => { + if (houseInfo[key]) { + houseInfo[key] = houseInfo[key].split(',') + } + }) + + if (houseInfo.insulationMaterial) { + _state.showKeepWarmMaterialText = houseInfo.insulationMaterial.includes('100') + } + } + _state.codes = await getDictData( + 'house_used_status', + 'land_attribute', + 'house_structure_type', + 'house_aseismic_grade', + 'house_base_info', + 'house_insulation_material', + 'house_wall_material', + 'house_fireproof_grade', + 'house_building_curtain_wall', + 'house_elevator' + ) + + //#endregion + this.form.current && this.form.current.setFieldsValue(this.record) + + this.setState(_state) + this.call() + } + + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + //#region 从前段转换后端所需格式 + const { houseInfo } = postData + if (houseInfo.completedDate) { + houseInfo.completedDate = houseInfo.completedDate.format('YYYY-MM-DD') + } + + // checkbox + checkboxKeys.forEach(key => { + if (houseInfo[key]) { + houseInfo[key] = sortBy(houseInfo[key], p => +p).join(',') + } + }) + //#endregion + return postData + } + } + + onValuesChange(changedValues, allValues) { + const form = this.form.current + const { houseInfo } = changedValues + if (houseInfo) { + if ( + houseInfo.hasOwnProperty('landFloorCount') || + houseInfo.hasOwnProperty('underFloorCount') + ) { + const { + houseInfo: { landFloorCount, underFloorCount }, + } = allValues + form.setFieldsValue({ + houseInfo: { + totalFloor: +landFloorCount + +underFloorCount, + }, + }) + } + + if (houseInfo.hasOwnProperty('insulationMaterial')) { + const value = this.checkedNone(houseInfo.insulationMaterial, 'insulationMaterial') + this.setState({ + showKeepWarmMaterialText: value.includes('100'), + }) + } + + if (houseInfo.hasOwnProperty('completedDate')) { + dispatch({ + type: 'PATROL_INIT_GRADE_BY_COMPLETED_DATE', + date: { + id: this.props.id, + value: +houseInfo.completedDate.format('YYYY'), + }, + }) + } + } + } + + //#region 自定义方法 + onShowMap() { + this.setState({ showMap: true }, async () => { + await this.initMap() + const { lng, lat } = this.record.houseCode + const position = [lng, lat] + this.setMarker(position) + this.map.setCenter(position) + }) + } + + initMap() { + // eslint-disable-next-line no-undef + const amap = AMap + + return new Promise(resolve => { + const city = CITY + + const district = new amap.DistrictSearch({ + subdistrict: 0, + extensions: 'all', + level: 'city', + }) + + district.search(city, (status, result) => { + const bounds = result.districtList[0].boundaries, + mask = [] + for (let i = 0; i < bounds.length; i += 1) { + mask.push([bounds[i]]) + } + + const geocoder = new amap.Geocoder({ city }) + geocoder.getLocation(city, (status, result) => { + if (status !== 'complete' || !(result.geocodes && result.geocodes.length)) + return + + this.citycode = result.geocodes[0].addressComponent.citycode + + this.map = new amap.Map(this.refs.map, { + mask, + zoom: 12, + center: result.geocodes[0].location, + mapStyle: `amap://styles/${this.state.theme}`, + }) + + this.map.on('click', e => { + this.setMarker(e.lnglat, geocoder) + }) + + this.map.on('complete', () => { + this.map.setFitView() + this.map.setZoom(12) + + for (const path of bounds) { + new amap.Polyline({ + path, + strokeColor: '#ccc', + strokeWeight: 4, + map: this.map, + }) + } + + resolve() + }) + + const auto = new amap.AutoComplete({ + input: this.refs['map-search'].input, + city, + citylimit: true, + }) + + const placeSearch = new amap.PlaceSearch({ + city, + citylimit: true, + pageSize: 1, + }) + + auto.on('select', ({ poi: { name: keywords, adcode } }) => { + placeSearch.search(keywords, async (status, result) => { + const { + poiList: { pois }, + } = result + for (const poi of pois) { + await this.setMarker(poi.location, geocoder) + this.map.setCenter(poi.location) + } + }) + }) + }) + }) + }) + } + + setMarker(position, geocoder) { + const set = position => { + if (this.marker) { + this.marker.setPosition(position) + } else { + this.marker = new amap.Marker({ + map: this.map, + icon: '//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png', + position, + offset: new amap.Pixel(-13, -30), + }) + } + } + + // eslint-disable-next-line no-undef + const amap = AMap + + return new Promise((resolve, reject) => { + if (geocoder) { + geocoder.getAddress(position, (status, result) => { + if (status === 'complete' && result.regeocode) { + if (result.regeocode.addressComponent.citycode !== this.citycode) { + // 如果选到了别的城市,则中断 + return + } + this.setPosition(result.regeocode.formattedAddress, position) + + set(position) + resolve(position) + } else { + console.error('根据经纬度查询地址失败') + + reject() + } + }) + } else { + set(position) + resolve(position) + } + }) + } + + setPosition(address, { lng, lat }) { + this.form.current.setFieldsValue({ houseCode: { address, lng, lat } }) + } + + checkedNone(value, key) { + const form = this.form.current + if (first(value) == 0 && value.length > 1) { + // 在'无'之后选中其他值 + value.shift() + form.setFieldsValue({ + houseInfo: { [key]: value }, + }) + } else if (last(value) == 0 && value.length > 1) { + // 在其他值之后选中'无' + value = ['0'] + form.setFieldsValue({ + houseInfo: { [key]: value }, + }) + } + return value + } + //#endregion + + render() { + const { loading, codes, showMap, showKeepWarmMaterialText } = this.state + + return ( + }> +
    + this.onValuesChange(changedValues, allValues) + } + > + + + + + + + + + + + + + + + {codes.houseUsedStatus.map(item => ( + + {item.value} + + ))} + + + + + + + {codes.landAttribute.map(item => { + return ( + + {item.value} + + ) + })} + + + + + + + + + + + + + + + + + + + + {showMap ? ( +
    +
    + +
    +
    +
    + ) : ( + + )} +
    + + + {codes.houseStructureType.map(item => { + return ( + + {item.value} + + ) + })} + + + + + + + {codes.houseAseismicGrade.map(item => { + return ( + + {item.value} + + ) + })} + + + + + + + {codes.houseBaseInfo.map(item => { + return ( + + {item.value} + + ) + })} + + + + + + + + {codes.houseInsulationMaterial.map(item => { + return ( + + {item.value} + + ) + })} + + + {showKeepWarmMaterialText && ( + + + + )} + + + {codes.houseWallMaterial.map(item => { + return ( + + {item.value} + + ) + })} + + + + 外墙外保温材料 +
    + 防火等级 + + } + name={['houseInfo', 'fireproofGrade']} + > + + {codes.houseFireproofGrade.map(item => { + return ( + + {item.value} + + ) + })} + +
    + + + {codes.houseBuildingCurtainWall.map(item => { + return ( + + {item.value} + + ) + })} + + + + + + + + + + + + + + + + + + + + + + {codes.houseElevator.map(item => { + return ( + + {item.value} + + ) + })} + + + + + + { + /*$root.transfer.completedYear = date.format('YYYY') */ + }} + className="w-100-p" + placeholder="请选择竣工日期" + /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    层;
    +
    + + + + + + +
    层;
    +
    + + + + + + +
    +
    + +
    +
    + + + + 地上第 + + + + + + + + 层,至 + + + + + + + + 层为商业用房; + + + 地上 + + + + + + + + 层为车棚层; + + + 地上第 + + + + + + + + 层,至 + + + + + + + + 层为住宅 + + + + + + + + + + + + + + + + + + + + + + + + + + + + 单元 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + ) + } +} diff --git a/Web/src/pages/business/house/info/form/base/drawing.jsx b/Web/src/pages/business/house/info/form/base/drawing.jsx new file mode 100644 index 0000000..4204403 --- /dev/null +++ b/Web/src/pages/business/house/info/form/base/drawing.jsx @@ -0,0 +1,167 @@ +import React, { Component } from 'react' +import { Checkbox, Col, Form, Input, Row, Spin } from 'antd' +import { AntIcon } from 'components' +import { cloneDeep, isEqual, sortBy } from 'lodash' +import getDictData from 'util/dic' + +const initialValues = {} + +const layout = { + labelCol: { flex: '150px' }, + wrapperCol: { flex: '1' }, +} + +export default class drawing extends Component { + state = { + loading: true, + codes: { + houseStorageOfDrawings: [], + }, + options: {}, + + showDrawingMaterialText: false, + } + + // 表单实例 + form = React.createRef() + + // 初始化数据 + record = {} + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * DOM加载完成钩子,绑定数据 + */ + componentDidMount() { + this.fillData({ + record: this.props.record, + }) + } + + /** + * 加载完成,通知父级组件并传递自身 + */ + call() { + const { onRef } = this.props + if (onRef) onRef(this) + } + + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + this.record = cloneDeep(params.record) + //#region 从后端转换成前段所需格式 + if (this.record) { + const { houseInfo } = this.record + // checkbox + if (houseInfo.drawingMaterial) { + houseInfo.drawingMaterial = houseInfo.drawingMaterial.split(',') + } + this.setState({ + showDrawingMaterialText: + !!houseInfo.drawingMaterial && houseInfo.drawingMaterial.includes('100'), + }) + } + const codes = await getDictData('house_storage_of_drawings') + console.log(codes) + this.setState({ codes }) + //#endregion + this.form.current && this.form.current.setFieldsValue(this.record) + + this.setState({ loading: false }) + this.call() + } + + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + //#region 从前段转换后端所需格式 + const { houseInfo } = postData + // checkbox + if (houseInfo.drawingMaterial) { + houseInfo.drawingMaterial = sortBy(houseInfo.drawingMaterial, p => +p).join(',') + } + //#endregion + return postData + } + } + + //#region 自定义方法 + /** + * 表单change事件处理,包括了所有字段的change + * [异步,非必要] + * @param {*} changedValues + * @param {*} allValues + */ + async onValuesChange(changedValues, allValues) { + const { houseInfo } = changedValues + if (houseInfo.hasOwnProperty('drawingMaterial')) { + this.setState({ showDrawingMaterialText: houseInfo.drawingMaterial.includes('100') }) + } + } + //#endregion + + render() { + const { loading, codes, showDrawingMaterialText } = this.state + + return ( + }> +
    + this.onValuesChange(changedValues, allValues) + } + > + + + {codes.houseStorageOfDrawings.map(item => ( + + {item.value} + + ))} + + + {showDrawingMaterialText && ( + + + + )} +
    +
    + ) + } +} diff --git a/Web/src/pages/business/house/info/form/base/identification.jsx b/Web/src/pages/business/house/info/form/base/identification.jsx new file mode 100644 index 0000000..ef818e1 --- /dev/null +++ b/Web/src/pages/business/house/info/form/base/identification.jsx @@ -0,0 +1,155 @@ +import React, { Component } from 'react' +import { Form, Radio, Spin } from 'antd' +import { AntIcon } from 'components' +import { cloneDeep, isEqual } from 'lodash' +import getDictData from 'util/dic' + +const initialValues = {} + +const layout = { + labelCol: { flex: '150px' }, + wrapperCol: { flex: '1' }, +} + +export default class identification extends Component { + state = { + loading: true, + codes: { + houseIdentification: [], + houseGovernment: [], + houseUsedStatus: [], + houseGrade: [], + }, + options: {}, + } + + // 表单实例 + form = React.createRef() + + // 初始化数据 + record = {} + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * DOM加载完成钩子,绑定数据 + */ + componentDidMount() { + this.fillData({ + record: this.props.record, + }) + } + + /** + * 加载完成,通知父级组件并传递自身 + */ + call() { + const { onRef } = this.props + if (onRef) onRef(this) + } + + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + this.record = cloneDeep(params.record) + //#region 从后端转换成前段所需格式 + const codes = await getDictData( + 'house_identification', + 'house_government', + 'house_used_status', + 'house_grade' + ) + this.setState({ codes }) + //#endregion + this.form.current && this.form.current.setFieldsValue(this.record) + + this.setState({ loading: false }) + this.call() + } + + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + //#region 从前段转换后端所需格式 + //#endregion + return postData + } + } + + //#region 自定义方法 + /** + * 表单change事件处理,包括了所有字段的change + * [异步,非必要] + * @param {*} changedValues + * @param {*} allValues + */ + async onValuesChange(changedValues, allValues) {} + //#endregion + + render() { + const { loading, codes } = this.state + + return ( + }> +
    + this.onValuesChange(changedValues, allValues) + } + > + + + {codes.houseUsedStatus.map(item => ( + + {item.value} + + ))} + + + {/* + + {codes.houseGrade.map(item => ( + + {item.value} + + ))} + + */} +
    +
    + ) + } +} diff --git a/Web/src/pages/business/house/info/form/base/index.jsx b/Web/src/pages/business/house/info/form/base/index.jsx new file mode 100644 index 0000000..66a2477 --- /dev/null +++ b/Web/src/pages/business/house/info/form/base/index.jsx @@ -0,0 +1,126 @@ +import React, { Component } from 'react' +import ReactDOM from 'react-dom' +import { Row, Col, Card, Anchor, Spin, Divider } from 'antd' +import { merge } from 'lodash' +import { AntIcon, ComponentDynamic, Container } from 'components' + +const parts = [ + { + title: '建筑物基本信息', + component: () => import('./building'), + }, + { + title: '权属情况', + component: () => import('./ownership'), + }, + // { + // title: '调查情况', + // component: () => import('./investigation'), + // }, + // { + // title: '鉴定治理', + // component: () => import('./identification'), + // }, + { + title: '图纸资料存档处', + component: () => import('./drawing'), + }, + { + title: '相关附件资料', + component: () => import('./attachments'), + }, + { + title: '建筑概貌', + component: () => import('./aspect'), + }, + { + title: '调查单位', + component: () => import('./unit'), + }, +] + +export default class index extends Component { + container = window + + children = [] + + formData = {} + + shouldComponentUpdate(props) { + return this.props.loading !== props.loading + } + + // 通知上层组件已加载完毕 + call(child, index) { + this.children[index] = child + if (this.children.filter(p => p).length === parts.length) { + if (this.props.onRef) { + this.props.onRef(this) + } + } + } + + setContainer = container => { + this.container = (ReactDOM.findDOMNode(container) || {}).parentNode + } + + async getData() { + for (const child of this.children) { + const data = await child.getData() + merge(this.formData, data) + } + + return this.formData + } + + render() { + const { id, loading } = this.props + + return ( + + + +
    +
    + + {parts.map((part, i) => ( + +
    + {part.title &&
    {part.title}
    } + } + wrapperClassName={loading && 'h-400-min'} + > + {!loading && ( + this.call(child, i)} + /> + )} + +
    + {i < parts.length - 1 && } +
    + ))} +
    + + + this.container} + offsetTop={24} + targetOffset={100} + wrapperStyle={{ backgroundColor: 'transparent' }} + onClick={e => e.preventDefault()} + > + {parts.map((part, i) => ( + + ))} + + + + + ) + } +} diff --git a/Web/src/pages/business/house/info/form/base/investigation.jsx b/Web/src/pages/business/house/info/form/base/investigation.jsx new file mode 100644 index 0000000..623a8d1 --- /dev/null +++ b/Web/src/pages/business/house/info/form/base/investigation.jsx @@ -0,0 +1,312 @@ +import React, { Component } from 'react' +import { Checkbox, Form, Input, Radio, Spin } from 'antd' +import { AntIcon } from 'components' +import { cloneDeep, first, isEqual, last, sortBy } from 'lodash' +import getDictData from 'util/dic' + +const initialValues = { + houseInfo: { + houseSite: ['1'], + adjacentConstruction: ['0'], + chemicalErosion: ['0'], + structuralDismantling: 0, + addingLayer: 0, + repairAndReinforce: ['0'], + historicalCalamity: ['0'], + functionalChange: ['0'], + }, +} + +const layout = { + labelCol: { flex: '150px' }, + wrapperCol: { flex: '1' }, +} + +const checkboxKeys = [ + 'houseSite', + 'adjacentConstruction', + 'chemicalErosion', + 'repairAndReinforce', + 'historicalCalamity', + 'functionalChange', +] + +export default class investigation extends Component { + state = { + loading: true, + codes: { + houseHouseSite: [], + houseAdjacentConstruction: [], + houseChemicalErosion: [], + houseStructuralDismantling: [], + houseAddingLayer: [], + houseRepairAndReinforce: [], + houseHistoricalCalamity: [], + houseFunctionalChange: [], + }, + options: {}, + } + + // 表单实例 + form = React.createRef() + + // 初始化数据 + record = {} + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * DOM加载完成钩子,绑定数据 + */ + componentDidMount() { + this.fillData({ + record: this.props.record, + }) + } + + /** + * 加载完成,通知父级组件并传递自身 + */ + call() { + const { onRef } = this.props + if (onRef) onRef(this) + } + + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + this.record = cloneDeep(params.record) + //#region 从后端转换成前段所需格式 + if (this.record) { + const { houseInfo } = this.record + // checkbox + checkboxKeys.forEach(key => { + if (houseInfo[key]) { + houseInfo[key] = houseInfo[key].split(',') + } + }) + } + const codes = await getDictData( + 'house_house_site', + 'house_adjacent_construction', + 'house_chemical_erosion', + 'house_structural_dismantling', + 'house_adding_layer', + 'house_repair_and_reinforce', + 'house_historical_calamity', + 'house_functional_change' + ) + this.setState({ codes }) + //#endregion + this.form.current.setFieldsValue(this.record) + + this.setState({ loading: false }) + this.call() + } + + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + //#region 从前段转换后端所需格式 + const { houseInfo } = postData + // checkbox + checkboxKeys.forEach(key => { + if (houseInfo[key]) { + houseInfo[key] = sortBy(houseInfo[key], p => +p).join(',') + } + }) + //#endregion + return postData + } + } + + //#region 自定义方法 + /** + * 表单change事件处理,包括了所有字段的change + * [异步,非必要] + * @param {*} changedValues + * @param {*} allValues + */ + async onValuesChange(changedValues, allValues) { + const { houseInfo } = changedValues + const key = Object.keys(houseInfo).shift() + if ( + [ + 'adjacentConstruction', + 'chemicalErosion', + 'repairAndReinforce', + 'historicalCalamity', + 'functionalChange', + ].includes(key) + ) { + this.checkedNone(houseInfo[key], key) + } + } + + checkedNone(value, key) { + const form = this.form.current + if (first(value) == 0 && value.length > 1) { + // 在'无'之后选中其他值 + value.shift() + form.setFieldsValue({ + houseInfo: { [key]: value }, + }) + } else if (last(value) == 0 && value.length > 1) { + // 在其他值之后选中'无' + value = ['0'] + form.setFieldsValue({ + houseInfo: { [key]: value }, + }) + } + return value + } + //#endregion + + render() { + const { loading, codes } = this.state + + return ( + }> +
    + this.onValuesChange(changedValues, allValues) + } + > + + + {codes.houseHouseSite.map(item => ( + + {item.value} + + ))} + + + + + {codes.houseAdjacentConstruction.map(item => ( + + {item.value} + + ))} + + + + + {codes.houseChemicalErosion.map(item => ( + + {item.value} + + ))} + + + + + {codes.houseStructuralDismantling.map(item => ( + + {item.value} + + ))} + + + + + {codes.houseAddingLayer.map(item => ( + + {item.value} + + ))} + + + + + {codes.houseRepairAndReinforce.map(item => ( + + {item.value} + + ))} + + + + + {codes.houseHistoricalCalamity.map(item => ( + + {item.value} + + ))} + + + + + {codes.houseFunctionalChange.map(item => ( + + {item.value} + + ))} + + + + + +
    +
    + ) + } +} diff --git a/Web/src/pages/business/house/info/form/base/ownership.jsx b/Web/src/pages/business/house/info/form/base/ownership.jsx new file mode 100644 index 0000000..9307940 --- /dev/null +++ b/Web/src/pages/business/house/info/form/base/ownership.jsx @@ -0,0 +1,305 @@ +import React, { Component } from 'react' +import { Col, Form, Input, InputNumber, Radio, Row, Spin } from 'antd' +import { AntIcon } from 'components' +import { cloneDeep, isEqual } from 'lodash' +import getDictData from 'util/dic' + +const initialValues = { + houseInfo: { + straightHouseCount: 0, + selfHouseCount: 0, + privateHouseCount: 0, + businessCount: 0, + changeHouseCount: 0, + resettlementHouseCount: 0, + otherCount: 0, + houseCount: 0, + }, +} + +const layout = { + labelCol: { flex: '150px' }, + wrapperCol: { flex: '1' }, +} + +export default class ownership extends Component { + state = { + loading: true, + codes: { + housePropertyRights: [], + }, + options: {}, + } + + // 表单实例 + form = React.createRef() + + // 初始化数据 + record = {} + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * DOM加载完成钩子,绑定数据 + */ + componentDidMount() { + this.fillData({ + record: this.props.record, + }) + } + + /** + * 加载完成,通知父级组件并传递自身 + */ + call() { + const { onRef } = this.props + if (onRef) onRef(this) + } + + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + this.record = cloneDeep(params.record) + //#region 从后端转换成前段所需格式 + const codes = await getDictData('house_property_rights') + this.setState({ codes }) + //#endregion + this.form.current && this.form.current.setFieldsValue(this.record) + + this.setState({ loading: false }) + this.call() + } + + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + //#region 从前段转换后端所需格式 + //#endregion + return postData + } + } + + //#region 自定义方法 + /** + * 表单change事件处理,包括了所有字段的change + * [异步,非必要] + * @param {*} changedValues + * @param {*} allValues + */ + async onValuesChange(changedValues, allValues) { + const form = this.form.current + const { houseInfo } = changedValues + + if ( + houseInfo.hasOwnProperty('straightHouseCount') || + houseInfo.hasOwnProperty('selfHouseCount') || + houseInfo.hasOwnProperty('otherCount') || + houseInfo.hasOwnProperty('businessCount') || + houseInfo.hasOwnProperty('changeHouseCount') || + houseInfo.hasOwnProperty('resettlementHouseCount') || + houseInfo.hasOwnProperty('privateHouseCount') + ) { + const { + houseInfo: { + straightHouseCount, + selfHouseCount, + otherCount, + businessCount, + changeHouseCount, + resettlementHouseCount, + privateHouseCount, + }, + } = allValues + form.setFieldsValue({ + houseInfo: { + houseCount: + +straightHouseCount + + +selfHouseCount + + +otherCount + + +businessCount + + +changeHouseCount + + +resettlementHouseCount + + +privateHouseCount, + }, + }) + } + } + //#endregion + + render() { + const { loading, codes } = this.state + + return ( + }> +
    + this.onValuesChange(changedValues, allValues) + } + > + + + {codes.housePropertyRights.map(item => ( + + {item.value} + + ))} + + + + + + + + + +
    套;
    +
    + + + + + + +
    套;
    +
    + + + + + + +
    套;
    +
    + +
    + + + + + + +
    套;
    +
    + + + + + + +
    套;
    +
    + + + + + + +
    套;
    +
    + +
    + + + + + + +
    套;
    +
    + + + + + + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + ) + } +} diff --git a/Web/src/pages/business/house/info/form/base/unit.jsx b/Web/src/pages/business/house/info/form/base/unit.jsx new file mode 100644 index 0000000..59d5bb3 --- /dev/null +++ b/Web/src/pages/business/house/info/form/base/unit.jsx @@ -0,0 +1,154 @@ +import React, { Component } from 'react' +import { Col, Form, Input, Row, Spin } from 'antd' +import { AntIcon } from 'components' +import { cloneDeep, isEqual } from 'lodash' + +const initialValues = {} + +const layout = { + labelCol: { flex: '150px' }, + wrapperCol: { flex: '1' }, +} + +export default class unit extends Component { + state = { + loading: true, + codes: {}, + options: {}, + } + + // 表单实例 + form = React.createRef() + + // 初始化数据 + record = {} + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * DOM加载完成钩子,绑定数据 + */ + componentDidMount() { + this.fillData({ + record: this.props.record, + }) + } + + /** + * 加载完成,通知父级组件并传递自身 + */ + call() { + const { onRef } = this.props + if (onRef) onRef(this) + } + + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + this.record = cloneDeep(params.record) + //#region 从后端转换成前段所需格式 + //#endregion + this.form.current && this.form.current.setFieldsValue(this.record) + + this.setState({ loading: false }) + this.call() + } + + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + //#region 从前段转换后端所需格式 + //#endregion + return postData + } + } + + //#region 自定义方法 + /** + * 表单change事件处理,包括了所有字段的change + * [异步,非必要] + * @param {*} changedValues + * @param {*} allValues + */ + async onValuesChange(changedValues, allValues) {} + //#endregion + + render() { + const { loading } = this.state + + return ( + }> +
    + this.onValuesChange(changedValues, allValues) + } + > + + + + + + + + + + + + + + + + + + + + + + +
    +
    + ) + } +} diff --git a/Web/src/pages/business/house/info/form/index.jsx b/Web/src/pages/business/house/info/form/index.jsx new file mode 100644 index 0000000..65a255b --- /dev/null +++ b/Web/src/pages/business/house/info/form/index.jsx @@ -0,0 +1,369 @@ +import React, { Component } from 'react' +import { Form, Button, Input, Descriptions, message as Message, Modal, Spin, Tabs } from 'antd' +import { merge, isEqual, pickBy } from 'lodash' +import { AntIcon, ComponentDynamic, Container, Auth } from 'components' +import { api } from 'common/api' + +const tabs = [ + { + title: '房屋基本情况', + component: () => import('./base'), + active: true, + show: true, + }, + // { + // title: '幕墙信息', + // name: 'curtainWall', + // path: 'curtainWall', + // active: false, + // show: false, + // }, + // { + // title: '面砖信息', + // name: 'faceBrick', + // path: 'faceBrick', + // active: false, + // show: false, + // }, + // { + // title: '墙面粉刷信息', + // name: 'whiteWash', + // path: 'whiteWash', + // active: false, + // show: false, + // }, + // { + // title: '墙面涂料信息', + // name: 'coating', + // path: 'coating', + // active: false, + // show: false, + // }, + { + title: '巡查登记', + component: () => import('./patrol'), + active: false, + show: true, + }, +] +const actions = { + save: { + action: 'houseInfoSave', + remark: '保存', + after: 'reload', + }, + submit: { + action: 'houseInfoSubmitToCheck', + remark: '提交', + after: 'close', + }, + check: { + action: 'houseInfoCheck', + remark: '审核', + after: 'close', + }, +} + +export default class index extends Component { + state = { + actived: '0', + + loading: true, + record: null, + + saveDisabled: true, + saving: false, + taskStatus: 0, + } + + children = [] + + formData = {} + checkForm = React.createRef() + + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + componentDidMount() { + // 获取详细数据 + this.onLoadInitData() + } + + call(child, index) { + this.children[index] = child + if (this.children.filter(p => p).length === tabs.filter(p => p.show).length) { + this.setState({ saveDisabled: false }) + } + } + + onLoadInitData() { + this.setState({ + loading: true, + }) + const { taskId } = this.props.param + if (taskId) { + api.houseInfoGetByTaskId({ taskId }).then(({ data }) => { + // 删除空节点 + for (const key in data) { + data[key] = pickBy(data[key], p => p !== null && p !== undefined) + } + this.setState({ + taskStatus: data.patrolInfo.status, + record: data, + loading: false, + }) + }) + } + } + + async onSave() { + await this.onPostData(actions.save) + } + + async onSubmit() { + Modal.confirm({ + content: '确认提交审核吗?', + onOk: () => { + this.onPostData(actions.submit) + }, + onCancel: () => {}, + }) + } + + async onCheck(pass_or_back) { + const form = this.checkForm.current + const valid = await form.validateFields() + + Modal.confirm({ + content: '审核结果即将提交,请确认', + onOk: () => { + if (valid) { + var checkRecord = { + taskCheckRecord: { + taskId: this.props.param.taskId, + passOrBack: +pass_or_back, + content: form.getFieldValue(['taskCheckRecord', 'content']), + }, + } + this.onPostData(actions.check, checkRecord) + } + }, + onCancel: () => {}, + }) + } + + async onPostData(action, append) { + for (const child of this.children) { + try { + const data = await child.getData() + merge(this.formData, data) + } catch (e) { + return e + } + } + + //#region 提交数据 + + if (append) { + this.formData = { + ...this.formData, + ...append, + } + } + if (this.formData.houseCode) { + this.formData.houseCode.id = this.state.record.houseCode.id + } + + if (this.formData.patrolInfo && this.props.param.taskId) { + this.formData.patrolInfo.id = this.props.param.taskId + } + + this.setState({ saving: true }) + + if (action) { + try { + const { success } = await api[action.action](this.formData) + if (success) { + Message.success(action.remark + '成功') + this.setState({ saving: false }) + if (this.props.param.table.current) { + this.props.param.table.current.onReloadData() + } + switch (action.after) { + case 'close': + window.closeContentWindow() + break + default: + this.onLoadInitData() + break + } + } + } finally { + this.setState({ saving: false }) + } + } + + // setTimeout(() => { + // Message.success('提交成功') + // this.setState({ saving: false }) + // }, 3000) + //#endregion + } + + render() { + const { loading, record, saveDisabled, saving } = this.state + + return ( +
    +
    + {/* 底部工具栏(需放在前面) */} +
    + +
    + + + {this.state.taskStatus == 3 && ( +
    + + + + + + + +
    + )} +
    +
    + + {this.state.taskStatus >= -1 && this.state.taskStatus < 3 && ( + + )} + {this.state.taskStatus == 2 && ( + + )} + + +
    +
    +
    +
    + + }> + + + {record && record.houseCode.areaName} + + + {record && record.houseCode.roadName} + + + {record && record.houseCode.commName} + + + {record && record.houseCode.zoneName} + + + {record && + `${record.houseCode.areaName}-${ + record.houseCode.roadName + }-${record.houseCode.commName}-${ + record.houseCode.fullProjName + }-${record.houseCode.no.toString().padStart(3, '0')}`} + + + {record && record.houseCode.houseCode} + + + + +
    +
    + { + this.setState({ actived: activeKey }) + }} + > + {tabs.map((tab, i) => { + if (tab.show) { + return ( + + ) + } + return <> + })} + +
    + {tabs.map((tab, i) => { + if (tab.show) { + return ( +
    + this.call(child, i)} + /> +
    + ) + } + return <> + })} +
    +
    +
    +
    + ) + } +} diff --git a/Web/src/pages/business/house/info/form/patrol/base.jsx b/Web/src/pages/business/house/info/form/patrol/base.jsx new file mode 100644 index 0000000..e231a6d --- /dev/null +++ b/Web/src/pages/business/house/info/form/patrol/base.jsx @@ -0,0 +1,112 @@ +import React, { Component } from 'react' +import { Row, Col, Form, Input, DatePicker, Spin } from 'antd' +import { cloneDeep, isEqual } from 'lodash' +import { AntIcon } from 'components' +import moment from 'moment' +import { CITY } from 'util/global' + +const layout = { + labelCol: { flex: '150px' }, + wrapperCol: { flex: '1' }, +} + +export default class base extends Component { + state = { + loading: true, + } + + form = React.createRef() + + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + componentDidMount() { + this.fillData({ + record: this.props.record, + }) + } + + call() { + if (this.props.onRef) { + this.props.onRef(this) + } + } + + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + this.record = cloneDeep(params.record) + //#region 从后端转换成前段所需格式 + if (this.record) { + const { patrolDate } = this.record.patrolInfo + this.record.patrolInfo.patrolDate = patrolDate ? moment(patrolDate) : patrolDate + } + //#endregion + this.form.current && this.form.current.setFieldsValue(this.record) + + this.setState({ loading: false }) + this.call() + } + + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + //#region 从前段转换后端所需格式 + if (postData.patrolInfo.patrolDate) { + postData.patrolInfo.patrolDate = postData.patrolInfo.patrolDate.format('YYYY-MM-DD') + } + //#endregion + return postData + } + } + + render() { + const { loading } = this.state + return ( + }> +
    + + + + { + /*$root.transfer.completedYear = date.format('YYYY') */ + }} + className="w-100-p" + placeholder="请选择巡查日期" + /> + + + + + + + + +
    +
    + ) + } +} diff --git a/Web/src/pages/business/house/info/form/patrol/grade.jsx b/Web/src/pages/business/house/info/form/patrol/grade.jsx new file mode 100644 index 0000000..1cf1c44 --- /dev/null +++ b/Web/src/pages/business/house/info/form/patrol/grade.jsx @@ -0,0 +1,182 @@ +import React, { Component } from 'react' +import { Form, Tooltip, Radio, Spin } from 'antd' +import { AntIcon } from 'components' +import { cloneDeep, first, isEqual, last, sortBy } from 'lodash' +import getDictData from 'util/dic' +import store from 'store' + +const { getState, subscribe } = store + +const layout = { + labelCol: { flex: '150px' }, + wrapperCol: { flex: '1' }, +} + +export default class handling extends Component { + state = { + loading: true, + codes: { + housePatrolInitGrade: [], + housePatrolDamageGrade: [], + houseGrade: [], + }, + } + form = React.createRef() + + constructor(props) { + super(props) + + this.unsubscribe = subscribe('business', business => { + const initGrade = this.getInitGrade(business.completedDate) + this.form.current.setFieldsValue({ + patrolInfo: { + initGrade, + }, + }) + }) + } + + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + componentDidMount() { + this.fillData({ + record: this.props.record, + }) + } + + componentWillUnmount() { + this.unsubscribe() + } + + call() { + if (this.props.onRef) { + this.props.onRef(this) + } + } + + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + this.record = cloneDeep(params.record) + + const _state = { loading: false } + //#region 从后端转换成前段所需格式 + if (this.record) { + const { patrolInfo } = this.record + if (this.record.houseInfo.completedDate) + patrolInfo.initGrade = this.getInitGrade(getState('business').completedDate) + } + _state.codes = await getDictData( + 'house_patrol_init_grade', + 'house_patrol_damage_grade', + 'house_grade' + ) + //#endregion + this.form.current && this.form.current.setFieldsValue(this.record) + + this.setState(_state) + this.call() + } + + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + //#region 从前段转换后端所需格式 + + //#endregion + return postData + } + } + + getInitGrade(completedDate) { + const date = completedDate.find(p => p.id === this.props.id) + if (date) { + const { value: year } = date + if (year > 1999) { + return 1 + } + if (year > 1994 && year < 2000) { + return 2 + } + if (year > 1979 && year < 1995) { + return 3 + } + if (year < 1980) { + return 4 + } + } + } + + render() { + const { loading, codes, initGradeValue } = this.state + return ( + }> +
    + + + {codes.housePatrolInitGrade.map(item => { + return ( + + {item.value} + + ) + })} + + + + + + {codes.housePatrolDamageGrade.map(item => { + return ( + + {item.value} + + ) + })} + + + + + + {codes.houseGrade.map(item => { + return ( + + {item.value} + + ) + })} + + +
    +
    + ) + } +} diff --git a/Web/src/pages/business/house/info/form/patrol/handling.jsx b/Web/src/pages/business/house/info/form/patrol/handling.jsx new file mode 100644 index 0000000..0bce3c6 --- /dev/null +++ b/Web/src/pages/business/house/info/form/patrol/handling.jsx @@ -0,0 +1,131 @@ +import React, { Component } from 'react' +import { Form, Input, Radio, Spin } from 'antd' +import { AntIcon } from 'components' +import { cloneDeep, first, isEqual, last, sortBy } from 'lodash' +import getDictData from 'util/dic' + +const layout = { + labelCol: { flex: '150px' }, + wrapperCol: { flex: '1' }, +} + +export default class handling extends Component { + state = { + loading: true, + codes: { + housePatrolHandlingOpinion: [], + housePatrolRectifyReform: [], + }, + } + form = React.createRef() + + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + componentDidMount() { + this.fillData({ + record: this.props.record, + }) + } + + call() { + if (this.props.onRef) { + this.props.onRef(this) + } + } + + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + this.record = cloneDeep(params.record) + const _state = { loading: false } + //#region 从后端转换成前段所需格式 + _state.codes = await getDictData( + 'house_patrol_handling_opinion', + 'house_patrol_rectify_Reform' + ) + //#endregion + this.form.current && this.form.current.setFieldsValue(this.record) + + this.setState(_state) + this.call() + } + + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + //#region 从前段转换后端所需格式 + + //#endregion + return postData + } + } + render() { + const { loading, codes } = this.state + return ( + }> +
    + + + {codes.housePatrolHandlingOpinion.map(item => { + return ( + + {item.value} + + ) + })} + + + + + + + + + + {codes.housePatrolRectifyReform.map(item => { + return ( + + {item.value} + + ) + })} + + + + + + +
    +
    + ) + } +} diff --git a/Web/src/pages/business/house/info/form/patrol/index.jsx b/Web/src/pages/business/house/info/form/patrol/index.jsx new file mode 100644 index 0000000..ac4c4b5 --- /dev/null +++ b/Web/src/pages/business/house/info/form/patrol/index.jsx @@ -0,0 +1,150 @@ +import React, { Component } from 'react' +import ReactDOM from 'react-dom' +import { Anchor, Card, Col, Divider, Row, Spin } from 'antd' +import { AntIcon, ComponentDynamic, Container } from 'components' +import { isEqual, merge } from 'lodash' + +const parts = [ + { + title: '巡查基本情况', + component: () => import('./base'), + }, + { + title: '房屋检查', + component: () => import('./inspection'), + }, + { + title: '等级划分', + component: () => import('./grade'), + }, + { + title: '调查情况', + component: () => import('./investigation'), + }, + { + title: '处理情况', + component: () => import('./handling'), + }, + { + title: '本期巡查结果', + component: () => import('./result'), + }, +] + +export default class index extends Component { + // 子表单实例集合 + children = [] + + // 整合提交数据 + formData = {} + + // 锚点挂载DOM + container = window + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) || this.props.loading !== props.loading + } + + /** + * 加载完成,通知父级组件并传递自身 + */ + call(child, index) { + this.children[index] = child + if (this.children.filter(p => p).length === parts.length) { + const { onRef } = this.props + if (onRef) onRef(this) + } + } + + /** + * 从下级组件获取表单数据,并传递给更上级组件 + * [异步,必要] + * @returns + */ + async getData() { + for (const child of this.children) { + const data = await child.getData() + merge(this.formData, data) + } + return this.formData + } + + /** + * 设置锚点容器 + * [非必要] + * @param {*} container + */ + setContainer = container => { + this.container = (ReactDOM.findDOMNode(container) || {}).parentNode + } + + /** + * 渲染 + * 当前渲染结构已完善,非必要可以不用修改 + * [必要] + * @returns + */ + render() { + const { id, loading } = this.props + + return ( + + + +
    +
    + + {parts.map((item, i) => ( + +
    + {item.title &&
    {item.title}
    } + } + wrapperClassName={loading && 'h-400-min'} + > + {!loading && ( + this.call(child, i)} + /> + )} + +
    + {i < parts.length - 1 && } +
    + ))} +
    + + {/* 锚点,如果不需要可以删除以下节点 */} + + this.container} + offsetTop={24} + targetOffset={100} + wrapperStyle={{ backgroundColor: 'transparent' }} + onClick={e => e.preventDefault()} + > + {parts.map((part, i) => ( + + ))} + + + + + ) + } +} diff --git a/Web/src/pages/business/house/info/form/patrol/inspection.jsx b/Web/src/pages/business/house/info/form/patrol/inspection.jsx new file mode 100644 index 0000000..088f61b --- /dev/null +++ b/Web/src/pages/business/house/info/form/patrol/inspection.jsx @@ -0,0 +1,291 @@ +import React, { Component } from 'react' +import { Col, Form, Input, Row, Spin, Upload } from 'antd' +import { AntIcon, PhotoPreview } from 'components' +import { cloneDeep, isEqual } from 'lodash' +import { BlobToBase64, GetFileName, PreviewFile } from 'util/file' +import { api } from 'common/api' + +const initialValues = {} + +const layout = { + labelCol: { flex: '150px' }, + wrapperCol: { flex: '1' }, +} + +const imageUploads = [{ key: 'settlementTiltFiles' }, { key: 'otherInfoFiles' }] + +export default class inspection extends Component { + state = { + loading: true, + codes: {}, + options: {}, + } + + // 表单实例 + form = React.createRef() + + photoPreview = React.createRef() + + // 初始化数据 + record = {} + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * DOM加载完成钩子,绑定数据 + */ + componentDidMount() { + this.fillData({ + record: this.props.record, + }) + } + + /** + * 加载完成,通知父级组件并传递自身 + */ + call() { + const { onRef } = this.props + if (onRef) onRef(this) + } + + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + this.record = cloneDeep(params.record) + //#region 从后端转换成前段所需格式 + if (this.record) { + const { patrolInfo } = this.record + const keys = imageUploads.map(p => p.key) + for (const key of keys) { + const fileValue = [] + const fileList = + !patrolInfo[key] || !patrolInfo[key].length ? [] : patrolInfo[key].split(',') + for (const fileId of fileList) { + try { + const file = await PreviewFile(fileId) + const base64 = await BlobToBase64(file) + fileValue.push({ + uid: fileId, + response: fileId, + name: file.name, + url: base64, + status: 'done', + }) + } catch { + const { data: file } = await api.sysFileInfoDetail({ id: fileId }) + fileValue.push({ + uid: fileId, + response: '文件已丢失', + name: file.fileOriginName, + status: 'error', + }) + } + } + + patrolInfo[key] = fileValue + } + } + //#endregion + this.form.current && this.form.current.setFieldsValue(this.record) + + this.setState({ loading: false }) + this.call() + } + + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + //#region 从前段转换后端所需格式 + const { patrolInfo } = postData + const keys = imageUploads.map(p => p.key) + for (const key of keys) { + patrolInfo[key] = patrolInfo[key] + .map(item => (item.uid.startsWith('rc-upload') ? item.response : item.uid)) + .join(',') + } + //#endregion + return postData + } + } + + //#region 自定义方法 + /** + * 表单change事件处理,包括了所有字段的change + * [异步,非必要] + * @param {*} changedValues + * @param {*} allValues + */ + async onValuesChange(changedValues, allValues) {} + + async onFileUpload({ file, onProgress, onSuccess, onError }) { + onProgress({ + percent: 0, + }) + const fd = new FormData() + fd.append('file', file) + try { + const { data: fileId } = await api.sysFileInfoUpload(fd) + onSuccess(fileId) + } catch { + onError() + } + } + + async onFilePreview(file, key) { + const fileList = this.form.current + .getFieldValue(['patrolInfo', key]) + .filter(p => p.status === 'done') + const items = [] + for (const _file of fileList) { + const img = new Image() + const src = _file.url || _file.thumbUrl + img.src = src + items.push({ + src, + w: img.naturalWidth, + h: img.naturalHeight, + }) + } + this.photoPreview.current.initPhotoSwipe(items, { + index: fileList.indexOf(file), + }) + } + + async onFileDownload(file) { + const { data, headers } = await api.sysFileInfoDownload({ id: file.response }) + const url = window.URL.createObjectURL(data) + const fileName = GetFileName(headers['content-disposition']) + const a = document.createElement('a') + a.href = url + a.download = fileName + a.click() + window.URL.revokeObjectURL(url) + a.remove() + } + //#endregion + + render() { + const { loading } = this.state + + return ( + }> +
    + this.onValuesChange(changedValues, allValues) + } + > + + + + + + + + { + if (Array.isArray(e)) { + return e + } + return e && e.fileList + }} + > + this.onFileUpload(e)} + showUploadList={{ + showRemoveIcon: true, + showDownloadIcon: true, + }} + onPreview={file => + this.onFilePreview(file, 'settlementTiltFiles') + } + onDownload={file => this.onFileDownload(file)} + > +
    + +
    沉降倾斜照片
    +
    +
    +
    + + + + + + + + { + if (Array.isArray(e)) { + return e + } + return e && e.fileList + }} + > + this.onFileUpload(e)} + showUploadList={{ + showRemoveIcon: true, + showDownloadIcon: true, + }} + onPreview={file => this.onFilePreview(file, 'otherInfoFiles')} + onDownload={file => this.onFileDownload(file)} + > +
    + +
    其他情况照片
    +
    +
    +
    + +
    + + + +
    + + +
    + ) + } +} diff --git a/Web/src/pages/business/house/info/form/patrol/investigation.jsx b/Web/src/pages/business/house/info/form/patrol/investigation.jsx new file mode 100644 index 0000000..620f437 --- /dev/null +++ b/Web/src/pages/business/house/info/form/patrol/investigation.jsx @@ -0,0 +1,312 @@ +import React, { Component } from 'react' +import { Checkbox, Form, Input, Radio, Spin } from 'antd' +import { AntIcon } from 'components' +import { cloneDeep, first, isEqual, last, sortBy } from 'lodash' +import getDictData from 'util/dic' + +const initialValues = { + patrolInfo: { + houseSite: ['1'], + adjacentConstruction: ['0'], + chemicalErosion: ['0'], + structuralDismantling: 0, + addingLayer: 0, + repairAndReinforce: ['0'], + historicalCalamity: ['0'], + functionalChange: ['0'], + }, +} + +const layout = { + labelCol: { flex: '150px' }, + wrapperCol: { flex: '1' }, +} + +const checkboxKeys = [ + 'houseSite', + 'adjacentConstruction', + 'chemicalErosion', + 'repairAndReinforce', + 'historicalCalamity', + 'functionalChange', +] + +export default class investigation extends Component { + state = { + loading: true, + codes: { + houseHouseSite: [], + houseAdjacentConstruction: [], + houseChemicalErosion: [], + houseStructuralDismantling: [], + houseAddingLayer: [], + houseRepairAndReinforce: [], + houseHistoricalCalamity: [], + houseFunctionalChange: [], + }, + options: {}, + } + + // 表单实例 + form = React.createRef() + + // 初始化数据 + record = {} + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * DOM加载完成钩子,绑定数据 + */ + componentDidMount() { + this.fillData({ + record: this.props.record, + }) + } + + /** + * 加载完成,通知父级组件并传递自身 + */ + call() { + const { onRef } = this.props + if (onRef) onRef(this) + } + + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + this.record = cloneDeep(params.record) + //#region 从后端转换成前段所需格式 + if (this.record) { + const { patrolInfo } = this.record + // checkbox + checkboxKeys.forEach(key => { + if (patrolInfo[key]) { + patrolInfo[key] = patrolInfo[key].split(',') + } + }) + } + const codes = await getDictData( + 'house_house_site', + 'house_adjacent_construction', + 'house_chemical_erosion', + 'house_structural_dismantling', + 'house_adding_layer', + 'house_repair_and_reinforce', + 'house_historical_calamity', + 'house_functional_change' + ) + this.setState({ codes }) + //#endregion + this.form.current.setFieldsValue(this.record) + + this.setState({ loading: false }) + this.call() + } + + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + //#region 从前段转换后端所需格式 + const { patrolInfo } = postData + // checkbox + checkboxKeys.forEach(key => { + if (patrolInfo[key]) { + patrolInfo[key] = sortBy(patrolInfo[key], p => +p).join(',') + } + }) + //#endregion + return postData + } + } + + //#region 自定义方法 + /** + * 表单change事件处理,包括了所有字段的change + * [异步,非必要] + * @param {*} changedValues + * @param {*} allValues + */ + async onValuesChange(changedValues, allValues) { + const { patrolInfo } = changedValues + const key = Object.keys(patrolInfo).shift() + if ( + [ + 'adjacentConstruction', + 'chemicalErosion', + 'repairAndReinforce', + 'historicalCalamity', + 'functionalChange', + ].includes(key) + ) { + this.checkedNone(patrolInfo[key], key) + } + } + + checkedNone(value, key) { + const form = this.form.current + if (first(value) == 0 && value.length > 1) { + // 在'无'之后选中其他值 + value.shift() + form.setFieldsValue({ + patrolInfo: { [key]: value }, + }) + } else if (last(value) == 0 && value.length > 1) { + // 在其他值之后选中'无' + value = ['0'] + form.setFieldsValue({ + patrolInfo: { [key]: value }, + }) + } + return value + } + //#endregion + + render() { + const { loading, codes } = this.state + + return ( + }> +
    + this.onValuesChange(changedValues, allValues) + } + > + + + {codes.houseHouseSite.map(item => ( + + {item.value} + + ))} + + + + + {codes.houseAdjacentConstruction.map(item => ( + + {item.value} + + ))} + + + + + {codes.houseChemicalErosion.map(item => ( + + {item.value} + + ))} + + + + + {codes.houseStructuralDismantling.map(item => ( + + {item.value} + + ))} + + + + + {codes.houseAddingLayer.map(item => ( + + {item.value} + + ))} + + + + + {codes.houseRepairAndReinforce.map(item => ( + + {item.value} + + ))} + + + + + {codes.houseHistoricalCalamity.map(item => ( + + {item.value} + + ))} + + + + + {codes.houseFunctionalChange.map(item => ( + + {item.value} + + ))} + + + + + +
    +
    + ) + } +} diff --git a/Web/src/pages/business/house/info/form/patrol/result.jsx b/Web/src/pages/business/house/info/form/patrol/result.jsx new file mode 100644 index 0000000..6fbd040 --- /dev/null +++ b/Web/src/pages/business/house/info/form/patrol/result.jsx @@ -0,0 +1,102 @@ +import React, { Component } from 'react' +import { Form, Input, Radio, Spin } from 'antd' +import { AntIcon } from 'components' +import { cloneDeep, first, isEqual, last, sortBy } from 'lodash' + +const layout = { + labelCol: { flex: '150px' }, + wrapperCol: { flex: '1' }, +} + +export default class result extends Component { + state = { + loading: true, + codes: { + patrolResult: [ + { code: '0', value: '正常' }, + { code: '-1', value: '异常' }, + ], + }, + } + form = React.createRef() + + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + componentDidMount() { + this.fillData({ + record: this.props.record, + }) + } + + call() { + if (this.props.onRef) { + this.props.onRef(this) + } + } + + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + this.record = cloneDeep(params.record) + //#region 从后端转换成前段所需格式 + + //#endregion + this.form.current && this.form.current.setFieldsValue(this.record) + + this.setState({ loading: false }) + this.call() + } + + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + //#region 从前段转换后端所需格式 + + //#endregion + return postData + } + } + render() { + const { loading, codes } = this.state + + return ( + }> +
    + + + {codes.patrolResult.map(item => { + return ( + + {item.value} + + ) + })} + + + + + +
    +
    + ) + } +} diff --git a/Web/src/pages/business/house/info/index.jsx b/Web/src/pages/business/house/info/index.jsx new file mode 100644 index 0000000..93544ba --- /dev/null +++ b/Web/src/pages/business/house/info/index.jsx @@ -0,0 +1,15 @@ +import React, { Component } from 'react' +import { Button } from 'antd' + +export default class index extends Component { + render() { + return ( +
    + +
    + ) + } +} diff --git a/Web/src/pages/business/house/member/data.jsx b/Web/src/pages/business/house/member/data.jsx new file mode 100644 index 0000000..7a22985 --- /dev/null +++ b/Web/src/pages/business/house/member/data.jsx @@ -0,0 +1,115 @@ +import React, { Component } from 'react' +import { Form, Spin, TreeSelect } from 'antd' +import { AntIcon } from 'components' +import { cloneDeep } from 'lodash' +import { api } from 'common/api' + +export default class dataForm extends Component { + state = { + // 加载状态 + loading: true, + + options: { + orgData: [], + areaData: [], + orgCheckedKeys: [], + }, + } + + // 表单实例 + form = React.createRef() + + // 初始化数据 + id = '' + + /** + * mount后回调 + */ + componentDidMount() { + this.props.created && this.props.created(this) + } + async fillData(params) { + this.id = params.id + //#region 从后端转换成前段所需格式 + const orgData = await this.loadOrgData() + const areaData = await this.loadAreaData() + const orgCheckedKeys = await this.loadMemberOwn(this.id) + this.setState({ + options: { + orgData, + areaData, + orgCheckedKeys, + }, + }) + this.form.current.setFieldsValue({ + id: this.id, + grantOrgIdList: orgCheckedKeys, + grantAreaCodeList: [], + }) + + this.setState({ + loading: false, + }) + } + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + if (this.id) { + postData.id = this.id + } + //#region 从前段转换后端所需格式 + //#endregion + return postData + } + } + + //#region 自定义方法 + async loadOrgData() { + const { data } = await api.getOrgTree() + return data + } + + async loadAreaData() { + const { data } = await api.getAreaTree() + return data + } + async loadMemberOwn(id) { + const { data } = await api.houseMemberOwnData({ id }) + return data + } + render() { + return ( +
    + }> +
    + + + + + + +
    +
    +
    + ) + } +} diff --git a/Web/src/pages/business/house/member/form.jsx b/Web/src/pages/business/house/member/form.jsx new file mode 100644 index 0000000..262d9fd --- /dev/null +++ b/Web/src/pages/business/house/member/form.jsx @@ -0,0 +1,294 @@ +import React, { Component } from 'react' +import { Form, Input, DatePicker, Select, Radio, Spin, TreeSelect } from 'antd' +import { AntIcon } from 'components' +import { cloneDeep } from 'lodash' +import { api } from 'common/api' +import moment from 'moment' + +const initialValues = { + sex: 0, + sysEmpParam: {}, +} + +export default class form extends Component { + state = { + // 加载状态 + loading: true, + lockRole: false, + options: { + orgData: [], + roleData: [], + }, + } + + // 表单实例 + form = React.createRef() + + // 初始化数据 + record = {} + + /** + * mount后回调 + */ + componentDidMount() { + this.props.created && this.props.created(this) + } + + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + //#region 从后端转换成前段所需格式 + if (params.id) { + this.record = (await api.houseMemberDetail({ id: params.id })).data + } + const orgData = await this.loadOrgData() + const roleData = await this.LoadRoleData() + + // 日期特殊处理 + if (this.record.birthday) { + this.record.birthday = moment(this.record.birthday) + } + + // 提交的时候是"param",而获取下来却是"info",在这里转换一下 + if (this.record.sysEmpInfo) { + this.record.sysEmpParam = this.record.sysEmpInfo + delete this.record.sysEmpInfo + } else if (!this.record.sysEmpParam) { + this.record.sysEmpParam = { + extIds: [], + } + } + + if (params.orgId) { + this.record.sysEmpParam.orgId = params.orgId + } + const defaultRole = params.id + ? await this.loadOwnRole(params.id) + : await this.loadDefaultRole(params.orgId) + if (defaultRole.constructor === Array) { + this.record.roleId = defaultRole[0] + } else { + this.record.roleId = defaultRole.id + } + const lockRole = this.doLockRole(defaultRole) + + this.setState({ + options: { + orgData, + roleData, + }, + lockRole, + }) + + this.record = { + ...this.record, + } + //#endregion + this.form.current.setFieldsValue(this.record) + + this.setState({ + loading: false, + }) + } + + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + if (this.record) { + postData.id = this.record.id + } + //#region 从前段转换后端所需格式 + //console.log(postData) + //#endregion + return postData + } + } + + //#region 自定义方法 + async loadOrgData() { + const { data } = await api.getOrgTree() + return data + } + + async LoadRoleData() { + const { data } = await api.houseMemberDefaultRoleList() + return data + } + async loadOwnRole(id) { + const { data } = await api.houseMemberOwnRole({ id }) + return data + } + async loadDefaultRole(orgId) { + const { data } = await api.houseMemberDefaultRole({ orgId }) + return data + } + async onOrgChange(orgId) { + this.setState({ loading: true }) + const defaultRole = await this.loadDefaultRole(orgId) + const lockRole = this.doLockRole(defaultRole) + this.setState({ loading: false, lockRole }) + } + + doLockRole(defaultRole) { + if (defaultRole.constructor === Array) { + this.form.current.setFieldsValue({ + roleId: defaultRole[0].id, + }) + return true + } else { + this.form.current.setFieldsValue({ + roleId: defaultRole.id, + }) + return defaultRole.code === 'zone_manager' + } + } + + render() { + return ( +
    + }> +
    + + this.onOrgChange(value)} + /> + + + + + + + + + + + {/* {this.props.mode == 'add' && ( + <> + + + + + + + + )} */} + + + + + + + + + + + 保密 + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + ) + } +} diff --git a/Web/src/pages/business/house/member/index.jsx b/Web/src/pages/business/house/member/index.jsx new file mode 100644 index 0000000..02dd057 --- /dev/null +++ b/Web/src/pages/business/house/member/index.jsx @@ -0,0 +1,417 @@ +import React, { Component } from 'react' +import { + Button, + Card, + Descriptions, + Divider, + Form, + Input, + List, + message as Message, + Popconfirm, + Select, + Switch, + Tag, +} from 'antd' +import { + AntIcon, + Auth, + Container, + Image, + ModalForm, + QueryList, + QueryTableActions, + QueryTreeLayout, +} from 'components' +import { api } from 'common/api' +import { toCamelCase } from 'util/format' +import { isEqual } from 'lodash' +import getDictData from 'util/dic' +import FormBody from './form' +import Selector from './selector' +import DataForm from './data' + +// 配置页面所需接口函数 +const apiAction = { + tree: api.getOrgTree, + page: api.houseMemberPage, + add: api.houseMemberAdd, + edit: api.houseMemberEdit, + delete: api.houseMemberDelete, + + changeStatus: api.houseMemberChangeStatus, + resetPwd: api.sysUserResetPwd, + + grantData: api.houseMemberGrantData, +} + +// 用于弹窗标题 +const name = '人员' + +export default class index extends Component { + state = { + codes: { + sex: [], + commonStatus: [], + }, + } + + // 表格实例 + list = React.createRef() + + // 新增窗口实例 + addForm = React.createRef() + // 编辑窗口实例 + editForm = React.createRef() + + dataForm = React.createRef() + // 树选中节点 + selectId = undefined + + selectorModal = React.createRef() + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * 加载字典数据,之后开始加载表格数据 + * 如果必须要加载字典数据,可直接对表格设置autoLoad=true + */ + componentDidMount() { + this.list.current.onLoading() + getDictData('sex', 'common_status').then(codes => { + this.setState({ codes }, () => { + this.list.current.onLoadData() + }) + }) + } + + /** + * 调用加载数据接口,可在调用前对query进行处理 + * [异步,必要] + * @param {*} params + * @param {*} query + * @returns + */ + loadData = async (params, query) => { + query = { + ...query, + sysEmpParam: { + orgId: this.selectId, + }, + } + + const { data } = await apiAction.page({ + ...params, + ...query, + }) + return data + } + + /** + * 调用树结构数据接口 + * [异步,必要] + * @returns + */ + loadTreeData = async () => { + const { data } = await apiAction.tree() + return data + } + + /** + * 树节点选中事件 + * [必要] + * @param {*} id + */ + onSelectTree(id) { + this.selectId = id + this.list.current.onReloadData() + } + + /** + * 绑定字典数据 + * @param {*} code + * @param {*} name + * @returns + */ + bindCodeValue(code, name) { + name = toCamelCase(name) + const codes = this.state.codes[name] + if (codes) { + const c = codes.find(p => p.code == code) + if (c) { + return c.value + } + } + return null + } + + /** + * 打开新增/编辑弹窗 + * @param {*} modal + * @param {*} id + */ + onOpen(modal, id) { + modal.current.open({ + orgId: this.selectId, + id, + }) + } + + /** + * 对表格上的操作进行统一处理 + * [异步] + * @param {*} action + * @param {*} successMessage + */ + async onAction(action, successMessage) { + this.list.current.onLoading() + try { + await action + Message.success(successMessage) + this.list.current.onReloadData() + } catch { + this.list.current.onLoaded() + } + } + + /** + * 删除 + * @param {*} id + */ + onDelete(id) { + this.onAction(apiAction.delete({ id }), '删除成功') + } + + //#region 自定义方法 + renderItem(record) { + const { + id, + account, + name, + nickName, + avatar, + sex, + phone, + email, + status, + roleCode, + roleName, + orgName, + } = record + return ( + + + this.onOpen(this.editForm, id)}>编辑 + + + this.onDelete(id)} + > + 删除 + + + + this.onResetPassword(id)}>重置密码 + + + this.onOpen(this.dataForm, id)}>授权额外数据 + + , + ]} + > + + } + /> + {roleCode && roleCode.includes('house_security_manager') && ( + + )} + + } + title={ + <> + {nickName || name} + {roleName && + roleName.split(',').map((item, i) => ( + + + {item} + + ))} + + } + description={account} + /> + + {orgName} + + {this.bindCodeValue(sex, 'sex')} + + {phone || '未设置'} + {email || '未设置'} + +
    + +
    + this.onSetUserStatus(id, checked)} + /> +
    +
    +
    +
    + ) + } + + onSetUserStatus(id, checked) { + this.onAction( + apiAction.changeStatus({ + id, + status: +!checked, + }), + '设置成功' + ) + } + + onResetPassword(id) { + this.onAction(apiAction.resetPwd({ id }), '重置成功') + } + //#endregion + + render() { + return ( + this.onSelectTree(key)} + > + + + + + + + + + + + + + + } + operator={ + + } + renderItem={record => this.renderItem(record)} + /> + + + + this.list.current.onReloadData()} + > + + + + this.list.current.onReloadData()} + > + + + + this.list.current.onReloadData()} + > + + + + + + + + ) + } +} diff --git a/Web/src/pages/business/house/member/selector/index.jsx b/Web/src/pages/business/house/member/selector/index.jsx new file mode 100644 index 0000000..13bbe4e --- /dev/null +++ b/Web/src/pages/business/house/member/selector/index.jsx @@ -0,0 +1,66 @@ +import React, { Component } from 'react' +import { Tabs } from 'antd' +import SelectorList from './selector-list' +import SelectedList from './selected-list' + +export default class index extends Component { + state = { + userId: '', + } + + selectorList = React.createRef() + selectedList = React.createRef() + + /** + * mount后回调 + */ + componentDidMount() { + this.props.created && this.props.created(this) + } + + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + this.setState({ + userId: params.id, + }) + } + + //#region 自定义方法 + onReloadAll() { + if (this.selectorList.current) { + this.selectorList.current.table.current.onReloadData() + } + if (this.selectedList.current) { + this.selectedList.current.table.current.onReloadData() + } + } + //#endregion + + render() { + const { userId } = this.state + + return ( + + + this.onReloadAll()} + /> + + + this.onReloadAll()} + /> + + + ) + } +} diff --git a/Web/src/pages/business/house/member/selector/selected-list.jsx b/Web/src/pages/business/house/member/selector/selected-list.jsx new file mode 100644 index 0000000..8c36e4c --- /dev/null +++ b/Web/src/pages/business/house/member/selector/selected-list.jsx @@ -0,0 +1,263 @@ +import React, { Component } from 'react' +import { Button, Card, Form, Input, InputNumber, message as Message, Radio, Select } from 'antd' +import { AntIcon, Auth, Container, QueryTable } from 'components' +import { api } from 'common/api' +import { isEqual } from 'lodash' +import getDictData from 'util/dic' +import { toCamelCase } from 'util/format' +import { getSearchInfo } from 'util/query' + +/** + * 注释段[\/**\/]为必须要改 + */ + +/** + * 配置页面所需接口函数 + */ +const apiAction = { + page: api.houseSelectedPage, +} + +/** + * 统一配置权限标识 + * [必要] + */ +const authName = 'houseSelector' + +export default class index extends Component { + state = { + codes: { + houseType: [], + houseIndustry: [], + }, + + saving: false, + + type: '', + + selectedRowKeys: [], + } + + // 表格实例 + table = React.createRef() + + columns = [ + { + title: '房屋编码', + dataIndex: 'houseCode', + sorter: true, + width: 300, + render: (text, record) => + `${record.areaName}-${record.roadName}-${record.commName}-${ + record.fullProjName + }-${record.no.toString().padStart(3, '0')}`, + }, + { + title: '房屋性质及行业', + dataIndex: 'type', + sorter: true, + width: 150, + render: text => this.bindCodeValue(text, 'house_type'), + }, + { + title: '地址', + dataIndex: 'address', + sorter: true, + }, + { + title: '登记时间', + dataIndex: 'createdTime', + sorter: true, + width: 150, + }, + ] + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * 加载字典数据,之后开始加载表格数据 + * 如果必须要加载字典数据,可直接对表格设置autoLoad=true + */ + componentDidMount() { + const { onLoading, onLoadData } = this.table.current + onLoading() + getDictData('house_type', 'house_industry').then(codes => { + this.setState({ codes }, () => { + onLoadData() + }) + }) + } + + /** + * 调用加载数据接口,可在调用前对query进行处理 + * [异步,必要] + * @param {*} params + * @param {*} query + * @returns + */ + loadData = async (params, query) => { + const searchInfo = getSearchInfo({ + query, + queryType: { type: '=' }, + }) + + const { data } = await apiAction.page({ + ...params, + searchInfo, + userId: this.props.userId, + }) + return data + } + + /** + * 绑定字典数据 + * @param {*} code + * @param {*} name + * @returns + */ + bindCodeValue(code, name) { + name = toCamelCase(name) + const codes = this.state.codes[name] + if (codes) { + const c = codes.find(p => p.code === code) + if (c) { + return c.value + } + } + return null + } + + /** + * 对表格上的操作进行统一处理 + * [异步] + * @param {*} action + * @param {*} successMessage + */ + async onAction(action, successMessage) { + const { onLoading, onLoaded, onReloadData } = this.table.current + onLoading() + try { + if (action) { + await action + } + if (successMessage) { + Message.success(successMessage) + } + onReloadData() + } catch { + onLoaded() + } + } + + //#region 自定义方法 + async onHouseSelectRevoke() { + const { selectedRowKeys } = this.state + const { userId, onReloadAll } = this.props + this.setState({ saving: true }) + await this.onAction( + api.houseSelectRevoke({ + ids: selectedRowKeys, + userId, + }), + '撤销成功' + ) + this.setState({ + saving: false, + selectedRowKeys: [], + }) + if (onReloadAll) { + onReloadAll() + } + } + //#endregion + + render() { + const { codes, saving, type, selectedRowKeys } = this.state + + return ( + + this.setState({ selectedRowKeys }), + }} + queryInitialValues={{ + type: '', + }} + onQueryChange={values => { + if (values.hasOwnProperty('type')) { + this.setState({ type: values.type }) + } + }} + query={ + + + value && value.padStart(3, '0')} + max={999} + min={1} + precision={0} + step={1} + placeholder="请输入房屋序号" + /> + + + + 全部 + {codes.houseType.map(item => ( + + {item.value} + + ))} + + + {type == 2 && ( + + + + )} + + + + + + + + } + operator={ + + + + } + /> + + ) + } +} diff --git a/Web/src/pages/business/house/member/selector/selector-list.jsx b/Web/src/pages/business/house/member/selector/selector-list.jsx new file mode 100644 index 0000000..3a9e355 --- /dev/null +++ b/Web/src/pages/business/house/member/selector/selector-list.jsx @@ -0,0 +1,263 @@ +import React, { Component } from 'react' +import { Button, Card, Form, Input, InputNumber, message as Message, Radio, Select } from 'antd' +import { AntIcon, Auth, Container, QueryTable } from 'components' +import { api } from 'common/api' +import { isEqual } from 'lodash' +import getDictData from 'util/dic' +import { toCamelCase } from 'util/format' +import { getSearchInfo } from 'util/query' + +/** + * 注释段[\/**\/]为必须要改 + */ + +/** + * 配置页面所需接口函数 + */ +const apiAction = { + page: api.houseSelectorPage, +} + +/** + * 统一配置权限标识 + * [必要] + */ +const authName = 'houseSelector' + +export default class index extends Component { + state = { + codes: { + houseType: [], + houseIndustry: [], + }, + + saving: false, + + type: '', + + selectedRowKeys: [], + } + + // 表格实例 + table = React.createRef() + + columns = [ + { + title: '房屋编码', + dataIndex: 'houseCode', + sorter: true, + width: 300, + render: (text, record) => + `${record.areaName}-${record.roadName}-${record.commName}-${ + record.fullProjName + }-${record.no.toString().padStart(3, '0')}`, + }, + { + title: '房屋性质及行业', + dataIndex: 'type', + sorter: true, + width: 150, + render: text => this.bindCodeValue(text, 'house_type'), + }, + { + title: '地址', + dataIndex: 'address', + sorter: true, + }, + { + title: '登记时间', + dataIndex: 'createdTime', + sorter: true, + width: 150, + }, + ] + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * 加载字典数据,之后开始加载表格数据 + * 如果必须要加载字典数据,可直接对表格设置autoLoad=true + */ + componentDidMount() { + const { onLoading, onLoadData } = this.table.current + onLoading() + getDictData('house_type', 'house_industry').then(codes => { + this.setState({ codes }, () => { + onLoadData() + }) + }) + } + + /** + * 调用加载数据接口,可在调用前对query进行处理 + * [异步,必要] + * @param {*} params + * @param {*} query + * @returns + */ + loadData = async (params, query) => { + const searchInfo = getSearchInfo({ + query, + queryType: { type: '=' }, + }) + + const { data } = await apiAction.page({ + ...params, + searchInfo, + userId: this.props.userId, + }) + return data + } + + /** + * 绑定字典数据 + * @param {*} code + * @param {*} name + * @returns + */ + bindCodeValue(code, name) { + name = toCamelCase(name) + const codes = this.state.codes[name] + if (codes) { + const c = codes.find(p => p.code === code) + if (c) { + return c.value + } + } + return null + } + + /** + * 对表格上的操作进行统一处理 + * [异步] + * @param {*} action + * @param {*} successMessage + */ + async onAction(action, successMessage) { + const { onLoading, onLoaded, onReloadData } = this.table.current + onLoading() + try { + if (action) { + await action + } + if (successMessage) { + Message.success(successMessage) + } + onReloadData() + } catch { + onLoaded() + } + } + + //#region 自定义方法 + async onHouseSelect() { + const { selectedRowKeys } = this.state + const { userId, onReloadAll } = this.props + this.setState({ saving: true }) + await this.onAction( + api.houseSelect({ + ids: selectedRowKeys, + userId, + }), + '选房成功' + ) + this.setState({ + saving: false, + selectedRowKeys: [], + }) + if (onReloadAll) { + onReloadAll() + } + } + //#endregion + + render() { + const { codes, saving, type, selectedRowKeys } = this.state + + return ( + + this.setState({ selectedRowKeys }), + }} + queryInitialValues={{ + type: '', + }} + onQueryChange={values => { + if (values.hasOwnProperty('type')) { + this.setState({ type: values.type }) + } + }} + query={ + + + value && value.padStart(3, '0')} + max={999} + min={1} + precision={0} + step={1} + placeholder="请输入房屋序号" + /> + + + + 全部 + {codes.houseType.map(item => ( + + {item.value} + + ))} + + + {type == 2 && ( + + + + )} + + + + + + + + } + operator={ + + + + } + /> + + ) + } +} diff --git a/Web/src/pages/business/house/project/form.jsx b/Web/src/pages/business/house/project/form.jsx new file mode 100644 index 0000000..cee85f4 --- /dev/null +++ b/Web/src/pages/business/house/project/form.jsx @@ -0,0 +1,273 @@ +import React, { Component } from 'react' +import { Cascader, Form, Input, InputNumber, Radio, Spin, TreeSelect } from 'antd' +import { AntIcon } from 'components' +import { cloneDeep } from 'lodash' +import { api } from 'common/api' +import { numberToChinese } from 'util/format' + +const initialValues = { + sort: 100, + type: 1, +} +export default class form extends Component { + state = { + // 加载状态 + loading: true, + exist: false, + + options: { + areaData: [], + }, + } + areaCode = '' + houseType = 1 + // 表单实例 + form = React.createRef() + + // 初始化数据 + record = {} + initRecord = {} + /** + * mount后回调 + */ + componentDidMount() { + this.props.created && this.props.created(this) + } + + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + let areaCodeDefault = params.pid ? params.pid : '' + this.houseType = params.record ? params.record.type : 1 + if (params.id) { + this.setState({ + loading: true, + }) + + api.houseProjectGetById({ projectId: params.id }).then(({ data }) => { + areaCodeDefault = data.areaCode + this.record = data + + this.setState({ + loading: false, + }) + }) + } + // this.record = cloneDeep(params.record) + this.initRecord = cloneDeep(params.record) + //#region 从后端转换成前段所需格式 + const areaData = await this.loadAreaData() + + this.setState({ + exist: !!params.id, + options: { areaData }, + }) + + const areaCode = [] + const findCode = (data, level) => { + level = level || 0 + for (let i = 0; i < data.length; i++) { + const item = data[i] + areaCode[level] = item.code + + if (item.code === areaCodeDefault) { + areaCode.length = level + 1 + return true + } + + if (item.children && item.children.length) { + const found = findCode(item.children, level + 1) + if (found) { + return true + } + } + } + } + + if (areaCodeDefault) { + findCode(areaData) + this.areaCode = areaCodeDefault + if (!this.state.exist) { + this.nextSort(this.areaCode, this.houseType) + } + } + + this.record = { + pid: params.pid, + ...this.record, + areaCode: + areaCode.length > 0 && areaCode[areaCode.length - 1].length == 12 ? areaCode : [], + } + //#endregion + + this.form.current.setFieldsValue(this.record) + + this.setState({ + loading: false, + }) + } + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + if (this.record) { + postData.id = this.record.id + } + //#region 从前段转换后端所需格式 + postData.areaCode = postData.areaCode[postData.areaCode.length - 1] + //#endregion + return postData + } + } + + async loadAreaData() { + const { data } = await api.getAreaTree() + console.log(data) + const clearChiildren = data => { + data.forEach(item => { + if (item.children && item.children.length) { + clearChiildren(item.children) + } else { + delete item.children + } + }) + } + clearChiildren(data) + return data + } + + async nextSort(areaCode, houseType) { + this.loading = true + if ( + !!this.initRecord && + this.initRecord.areaCode == areaCode && + this.initRecord.type == houseType + ) { + this.form.current.setFieldsValue({ + name: this.initRecord.name, + sort: this.initRecord.sort, + }) + } else if (areaCode.length < 12) { + this.form.current.setFieldsValue({ + name: '', + sort: 0, + areaCode: [], + }) + } else { + await api + .houseProjectNextSort({ areaCode, type: houseType }) + .then(({ data }) => { + this.form.current.setFieldsValue({ + name: `项目${numberToChinese(data)}`, + sort: data, + }) + }) + .catch(() => { + this.form.current.setFieldsValue({ + name: '', + sort: 0, + areaCode: [], + }) + }) + .finally(() => { + this.loading = false + }) + } + } + + onHouseTypeChange(e) { + this.houseType = e.target.value + if (this.areaCode != '') { + this.nextSort(this.areaCode, this.houseType) + } + } + + onAreaCodeChange(value) { + this.areaCode = value[value.length - 1] + if (this.houseType > 0) { + this.nextSort(this.areaCode, this.houseType) + } + } + + render() { + return ( +
    + }> +
    + + this.onHouseTypeChange(e)} + > + + 住宅 + + + 非住宅 + + + + + this.onAreaCodeChange(val)} + /> + + + + + + + + + + +
    +
    +
    + ) + } +} diff --git a/Web/src/pages/business/house/project/index.jsx b/Web/src/pages/business/house/project/index.jsx new file mode 100644 index 0000000..1f6d8f7 --- /dev/null +++ b/Web/src/pages/business/house/project/index.jsx @@ -0,0 +1,313 @@ +import React, { Component } from 'react' +import { Button, Radio, Card, Form, Input, message as Message, Popconfirm } from 'antd' +import { + AntIcon, + Auth, + Container, + ModalForm, + QueryTable, + QueryTableActions, + QueryTreeLayout, +} from 'components' +import { api } from 'common/api' +import auth from 'components/authorized/handler' +import { toCamelCase } from 'util/format' +import { isEqual } from 'lodash' +import getDictData from 'util/dic' +import FormBody from './form' + +const apiAction = { + tree: api.getAreaTree, + page: api.getHouseProjectPage, + add: api.houseProejctAdd, + edit: api.houseProejctEdit, + delete: api.houseProejctDelete, +} + +const name = '项目' + +export default class index extends Component { + state = { + codes: { + houseType: [], + }, + type: 1, + } + + // 表格实例 + table = React.createRef() + + // 新增窗口实例 + addForm = React.createRef() + // 编辑窗口实例 + editForm = React.createRef() + + // 树选中节点 + selectCode = undefined + columns = [ + { + title: '项目名称', + dataIndex: 'name', + width: 150, + sorter: true, + }, + { + title: '社区', + dataIndex: 'areaName', + width: 100, + sorter: true, + }, + { + title: '备注', + dataIndex: 'note', + width: 150, + sorter: true, + }, + { + title: '类型', + dataIndex: 'type', + sorter: true, + width: 80, + render: text => <>{this.bindCodeValue(text, 'house_type')}, + }, + ] + /** + * 构造函数,在渲染前动态添加操作字段等 + * @param {*} props + */ + constructor(props) { + super(props) + + const flag = auth({ houseProjectInfo: [['edit'], ['delete']] }) + + if (flag) { + this.columns.push({ + title: '操作', + width: 150, + dataIndex: 'actions', + render: (text, record) => ( + + + this.onOpen(this.editForm, record.id)}>编辑 + + + this.onDelete(record)} + > + 删除 + + + + ), + }) + } + } + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * 加载字典数据,之后开始加载表格数据 + * 如果必须要加载字典数据,可直接对表格设置autoLoad=true + */ + componentDidMount() { + this.table.current.onLoading() + getDictData('house_type').then(res => { + this.setState( + { + codes: res, + }, + () => { + this.table.current.onLoadData() + } + ) + }) + } + /** + * 调用加载数据接口,可在调用前对query进行处理 + * [异步,必要] + * @param {*} params + * @param {*} query + * @returns + */ + loadData = async (params, query) => { + query = { + ...query, + pid: this.selectCode, + } + //首次加载根据code列升序排序 + // if (!params.sortField) { + // params.sortField = 'code'; + // params.sortOrder = 'ascend'; + // } + const { data } = await apiAction.page({ + ...params, + ...query, + }) + return data + } + + /** + * 调用树结构数据接口 + * [异步,必要] + * @returns + */ + loadTreeData = async () => { + const { data } = await apiAction.tree() + return data + } + + /** + * 树节点选中事件 + * [必要] + * @param {*} id + */ + onSelectTree(code) { + this.selectCode = code + this.table.current.onReloadData() + } + + /** + * 绑定字典数据 + * @param {*} code + * @param {*} name + * @returns + */ + bindCodeValue(code, name) { + name = toCamelCase(name) + const codes = this.state.codes[name] + if (codes) { + const c = codes.find(p => +p.code === code) + if (c) { + return c.value + } + } + return null + } + + /** + * 打开新增/编辑弹窗 + * @param {*} modal + * @param {*} record + */ + onOpen(modal, id) { + modal.current.open({ + pid: this.selectCode, + // record, + id, + }) + } + + /** + * 对表格上的操作进行统一处理 + * [异步] + * @param {*} action + * @param {*} successMessage + */ + async onAction(action, successMessage) { + this.table.current.onLoading() + try { + await action + Message.success(successMessage) + this.table.current.onReloadData() + } catch { + this.table.current.onLoaded() + } + } + + /** + * 删除 + * @param {*} record + */ + onDelete(record) { + this.onAction(apiAction.delete(record), '删除成功') + } + + render() { + return ( + this.onSelectTree(key)} + replaceFields={{ value: 'code', title: 'name', children: 'children' }} + > + + + { + if (values.hasOwnProperty('type')) { + this.setState({ type: values.type }) + } + }} + query={ + + + + 全部 + + 住宅 + + + 非住宅 + + + + + + + + + + + } + operator={ + + + + } + > + + + this.table.current.onReloadData()} + > + + + + this.table.current.onReloadData()} + > + + + + ) + } +} diff --git a/Web/src/pages/business/house/query/detail.jsx b/Web/src/pages/business/house/query/detail.jsx new file mode 100644 index 0000000..60c4d18 --- /dev/null +++ b/Web/src/pages/business/house/query/detail.jsx @@ -0,0 +1,35 @@ +import React, { Component } from 'react' +import { Card } from 'antd' +import Container from 'components/container' +import { api } from 'common/api' +import ReactJson from 'react-json-view' + +export default class detail extends Component { + state = { + loading: false, + record: null, + } + + componentDidMount() { + // 获取详细数据 + const { id } = this.props.param + if (id) { + api.houseQueryDetail({ id }).then(({ data }) => { + this.setState({ + record: data, + loading: false, + }) + }) + } + } + + render() { + return ( + + + + + + ) + } +} diff --git a/Web/src/pages/business/house/query/index.jsx b/Web/src/pages/business/house/query/index.jsx new file mode 100644 index 0000000..937dc5b --- /dev/null +++ b/Web/src/pages/business/house/query/index.jsx @@ -0,0 +1,571 @@ +import React, { Component } from 'react' +import { + Button, + Card, + Checkbox, + Col, + DatePicker, + Form, + Input, + InputNumber, + message as Message, + Row, + Tag, +} from 'antd' +import { + AntIcon, + Auth, + Container, + InputNumberRange, + QueryTable, + QueryTableActions, +} from 'components' +import { api } from 'common/api' +import auth from 'components/authorized/handler' +import { first, isEqual, last } from 'lodash' +import getDictData from 'util/dic' +import { toCamelCase } from 'util/format' +import { getSearchDateRange, getSearchInfo, QueryType } from 'util/query' + +/** + * 注释段[\/**\/]为必须要改 + */ + +/** + * 配置页面所需接口函数 + */ +const apiAction = { + page: api.houseQueryPage, +} + +/** + * 用于弹窗标题 + * [必要] + */ +const name = '/**/' + +/** + * 统一配置权限标识 + * [必要] + */ +const authName = 'houseQuery' + +export default class index extends Component { + state = { + codes: { + houseStatus: [], + houseType: [], + houseIndustry: [], + houseUsedStatus: [], + housePropertyRights: [], + landAttribute: [], + houseBaseInfo: [], + houseStructureType: [], + houseStorageOfDrawings: [], + houseGrade: [], + }, + + showDrawingMaterialText: false, + } + + // 表格实例 + table = React.createRef() + + // 新增窗口实例 + addForm = React.createRef() + // 编辑窗口实例 + editForm = React.createRef() + + columns = [ + { + title: '房屋编码', + dataIndex: 'houseCode', + sorter: true, + width: 300, + render: (text, record) => ( + <> + {`${record.areaName}-${record.roadName}-${record.commName}-${ + record.note + }-${record.no.toString().padStart(3, '0')}`} +
    + {text} + + ), + }, + { + title: '房屋性质及行业', + dataIndex: 'type', + sorter: true, + width: 150, + render: text => this.bindCodeValue(text, 'house_type'), + }, + { + title: '地址', + dataIndex: 'address', + sorter: true, + }, + { + title: '建档状态', + dataIndex: 'state', + sorter: true, + width: 100, + render: text => this.bindCodeValue(text, 'house_status'), + }, + ] + + /** + * 构造函数,在渲染前动态添加操作字段等 + * @param {*} props + */ + constructor(props) { + super(props) + + const flag = auth({ [authName]: 'detail' }) + + if (flag) { + this.columns.push({ + title: '操作', + width: 150, + dataIndex: 'actions', + render: (text, record) => ( + + + this.onOpen(record.id)}>查看 + + + ), + }) + } + } + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * 加载字典数据,之后开始加载表格数据 + * 如果必须要加载字典数据,可直接对表格设置autoLoad=true + */ + componentDidMount() { + const { onLoading, onLoadData } = this.table.current + onLoading() + getDictData( + 'house_status', + 'house_type', + 'house_industry', + 'house_used_status', + 'house_property_rights', + 'land_attribute', + 'house_base_info', + 'house_structure_type', + 'house_storage_of_drawings', + 'house_grade' + ).then(codes => { + this.setState({ codes }, () => { + onLoadData() + }) + }) + } + + /** + * 调用加载数据接口,可在调用前对query进行处理 + * [异步,必要] + * @param {*} params + * @param {*} query + * @returns + */ + loadData = async (params, query) => { + query.completedDate = getSearchDateRange(query.completedDate) + query.createdTime = getSearchDateRange(query.createdTime) + + const searchInfo = getSearchInfo({ + query, + queryType: { + areaCode: QueryType.Like, + completedDate: [QueryType.GreaterThanOrEqual, QueryType.LessThan], + createdTime: [QueryType.GreaterThanOrEqual, QueryType.LessThan], + totalArea: [QueryType.GreaterThanOrEqual, QueryType.LessThanOrEqual], + totalFloor: [QueryType.GreaterThanOrEqual, QueryType.LessThanOrEqual], + }, + }) + + const { data } = await apiAction.page({ + ...params, + searchInfo, + }) + return data + } + + /** + * 绑定字典数据 + * @param {*} code + * @param {*} name + * @returns + */ + bindCodeValue(code, name) { + name = toCamelCase(name) + const codes = this.state.codes[name] + if (codes) { + const c = codes.find(p => p.code == code) + if (c) { + return c.value + } + } + return null + } + + /** + * 打开新增/编辑弹窗 + * @param {*} modal + * @param {*} id + */ + onOpen(id) { + window.openContentWindow({ + title: '房屋详情', + path: 'business/house/query/detail', + param: { id }, + }) + } + + /** + * 对表格上的操作进行统一处理 + * [异步] + * @param {*} action + * @param {*} successMessage + */ + async onAction(action, successMessage) { + const { onLoading, onLoaded, onReloadData } = this.table.current + onLoading() + try { + if (action) { + await action + } + if (successMessage) { + Message.success(successMessage) + } + onReloadData() + } catch { + onLoaded() + } + } + + /** + * 删除 + * @param {*} id + */ + onDelete(id) { + this.onAction(apiAction.delete({ id }), '删除成功') + } + + //#region 自定义方法 + rednerMoreQuery() { + const { codes, showDrawingMaterialText } = this.state + + return ( + + + + + {codes.houseUsedStatus.map(item => ( + + {item.value} + + ))} + + + + + + + 全部 + + + + + + + + + 全部 + + + + + + + + + 全部 + + + + + + + + + 全部 + + + + + + + + + + + + + + + + + + + 全部 + {codes.housePropertyRights.map(item => ( + + {item.value} + + ))} + + + + + + + 全部 + {codes.landAttribute.map(item => ( + + {item.value} + + ))} + + + + + + + 全部 + {codes.houseBaseInfo.map(item => ( + + {item.value} + + ))} + + + + + + + 全部 + {codes.houseStructureType.map(item => ( + + {item.value} + + ))} + + + + + + + + {codes.houseStorageOfDrawings.map(item => ( + + {item.value} + + ))} + + + {showDrawingMaterialText && ( + + + + )} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 全部 + {codes.houseGrade.map(item => ( + + {item.value} + + ))} + + + + + ) + } + + onQueryChange(changedValues, allValues) { + console.log(changedValues) + if (changedValues.hasOwnProperty('drawingMaterial') && changedValues.drawingMaterial) { + this.setState({ + showDrawingMaterialText: changedValues.drawingMaterial.includes('100'), + }) + return + } + + // 全部 + const { codes } = this.state + const key = first(Object.keys(changedValues)) + const mapCount = { + curtainWall: 2, + faceBrick: 2, + coating: 2, + painting: 2, + propertyRights: codes.housePropertyRights.length, + landAttribute: codes.landAttribute.length, + baseInfo: codes.houseBaseInfo.length, + structureType: codes.houseStructureType.length, + houseGrade: codes.houseGrade.length, + } + if (Object.keys(mapCount).includes(key)) { + return { + [key]: this.checkedNone(changedValues[key], mapCount[key]), + } + } + } + + checkedNone(value, count) { + if (first(value) == '' && value.length > 1) { + // 在'无'之后选中其他值 + value.shift() + } else if ((last(value) == '' && value.length > 1) || value.length === count) { + // 在其他值之后选中'无' + value = [''] + } + return value + } + //#endregion + + render() { + const { codes, type } = this.state + + return ( + +
    + + + + + + + + + + } + moreQuery={ + {this.rednerMoreQuery()} + } + onQueryChange={(changedValues, allValues) => + this.onQueryChange(changedValues, allValues) + } + operator={ + + + + } + /> + +
    + ) + } +} diff --git a/Web/src/pages/business/house/task/check/index.jsx b/Web/src/pages/business/house/task/check/index.jsx new file mode 100644 index 0000000..dd804ff --- /dev/null +++ b/Web/src/pages/business/house/task/check/index.jsx @@ -0,0 +1,338 @@ +import React, { Component } from 'react' +import { + Button, + Card, + Drawer, + Form, + Input, + message as Message, + Popconfirm, + Radio, + Select, + Tag, +} from 'antd' +import { + AntIcon, + Auth, + Container, + HouseLog, + ModalForm, + QueryTable, + QueryTableActions, +} from 'components' +import { api } from 'common/api' +import auth from 'components/authorized/handler' +import { isEqual } from 'lodash' +import getDictData from 'util/dic' +import { toCamelCase } from 'util/format' +import { getSearchInfo } from 'util/query' + +/** + * 注释段[\/**\/]为必须要改 + */ + +/** + * 配置页面所需接口函数 + */ +const apiAction = { + page: api.houseTaskPage, +} + +/** + * 统一配置权限标识 + * [必要] + */ +const authName = 'houseTask' + +export default class index extends Component { + state = { + codes: { + status: [ + { code: 3, value: '审核中' }, + { code: 6, value: '审核通过' }, + ], + houseType: [], + houseIndustry: [], + }, + + type: '', + + visibleLog: false, + } + + // 表格实例 + table = React.createRef() + + // 新增窗口实例 + addForm = React.createRef() + // 编辑窗口实例 + editForm = React.createRef() + + columns = [ + { + title: '房屋编码', + dataIndex: 'houseCode', + sorter: true, + width: 300, + render: (text, record) => ( + <> + {`${record.areaName}-${record.roadName}-${record.commName}-${ + record.fullProjName + }-${record.no.toString().padStart(3, '0')}`} +
    + {text} + + ), + }, + { + title: '房屋性质及行业', + dataIndex: 'type', + sorter: true, + width: 150, + render: (text, record) => + this.bindCodeValue(text, 'house_type') + + (text === 2 ? `(${this.bindCodeValue(record.industry, 'house_industry')})` : ''), + }, + { + title: '地址', + dataIndex: 'address', + sorter: true, + }, + { + title: '任务截止时间', + dataIndex: 'endTime', + sorter: true, + width: 150, + }, + { + title: '审核状态', + dataIndex: 'status', + sorter: true, + width: 100, + render: text => this.bindCodeValue(text, 'status'), + }, + ] + + /** + * 构造函数,在渲染前动态添加操作字段等 + * @param {*} props + */ + constructor(props) { + super(props) + + const flag = auth({ houseInfo: 'getByTaskId' }) + + if (flag) { + this.columns.push({ + title: '操作', + width: 150, + dataIndex: 'actions', + render: (text, record) => ( + + + this.onOpen(record.id)}> + {record.state === 3 ? `审核` : `查看`} + + + this.onShowLog(record.id)}>日志 + + ), + }) + } + } + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * 加载字典数据,之后开始加载表格数据 + * 如果必须要加载字典数据,可直接对表格设置autoLoad=true + */ + componentDidMount() { + const { onLoading, onLoadData } = this.table.current + onLoading() + getDictData('house_type', 'house_industry').then(codes => { + this.setState({ codes: { ...this.state.codes, ...codes } }, () => { + onLoadData() + }) + }) + } + + /** + * 调用加载数据接口,可在调用前对query进行处理 + * [异步,必要] + * @param {*} params + * @param {*} query + * @returns + */ + loadData = async (params, query) => { + const searchInfo = getSearchInfo({ + query, + queryType: { + type: '=', + industry: '=', + address: 'like', + houseCode: 'like', + status: '=', + }, + }) + + const { data } = await apiAction.page({ + ...params, + searchInfo, + }) + return data + } + + /** + * 绑定字典数据 + * @param {*} code + * @param {*} name + * @returns + */ + bindCodeValue(code, name) { + name = toCamelCase(name) + const codes = this.state.codes[name] + if (codes) { + const c = codes.find(p => p.code == code) + if (c) { + return c.value + } + } + return null + } + + /** + * 打开新增/编辑弹窗 + * @param {*} modal + * @param {*} record + */ + onOpen(taskId) { + window.openContentWindow({ + title: '房屋登记', + path: 'business/house/info/form', + param: { + taskId, + table: this.table, + }, + }) + } + + /** + * 对表格上的操作进行统一处理 + * [异步] + * @param {*} action + * @param {*} successMessage + */ + async onAction(action, successMessage) { + const { onLoading, onLoaded, onReloadData } = this.table.current + onLoading() + try { + if (action) { + await action + } + if (successMessage) { + Message.success(successMessage) + } + onReloadData() + } catch { + onLoaded() + } + } + + //#region 自定义方法 + onShowLog(id) { + this.setState({ visibleLog: id }) + } + //#endregion + + render() { + const { codes, type, visibleLog } = this.state + + return ( + +
    + + { + if (values.hasOwnProperty('type')) { + this.setState({ type: values.type }) + } + }} + query={ + + + + 全部 + {codes.houseType.map(item => ( + + {item.value} + + ))} + + + {type == 2 && ( + + + + )} + + + + + + + + + 全部 + {codes.status.map(item => ( + + {item.value} + + ))} + + + + } + /> + + + this.setState({ visibleLog: false })} + destroyOnClose + > + + +
    + ) + } +} diff --git a/Web/src/pages/business/house/task/index.jsx b/Web/src/pages/business/house/task/index.jsx new file mode 100644 index 0000000..95f95ff --- /dev/null +++ b/Web/src/pages/business/house/task/index.jsx @@ -0,0 +1,331 @@ +import React, { Component } from 'react' +import { Card, Checkbox, Drawer, Form, Input, message as Message, Radio, Select, Tag } from 'antd' +import { Auth, Container, HouseLog, QueryTable, QueryTableActions } from 'components' +import { api } from 'common/api' +import auth from 'components/authorized/handler' +import { isEqual } from 'lodash' +import getDictData from 'util/dic' +import { toCamelCase } from 'util/format' +import { getSearchInfo } from 'util/query' +import { checkboxCheckedNone } from 'util/tool' + +/** + * 注释段[\/**\/]为必须要改 + */ + +/** + * 配置页面所需接口函数 + */ +const apiAction = { + page: api.houseTaskPage, +} + +/** + * 统一配置权限标识 + * [必要] + */ +const authName = 'houseTask' + +export default class index extends Component { + state = { + codes: { + houseStatus: [], + houseType: [], + houseIndustry: [], + }, + + type: '', + + visibleLog: false, + } + + // 表格实例 + table = React.createRef() + + // 新增窗口实例 + addForm = React.createRef() + // 编辑窗口实例 + editForm = React.createRef() + + columns = [ + { + title: '房屋编码', + dataIndex: 'houseCode', + sorter: true, + width: 400, + render: (text, record) => ( + <> + {`${record.areaName}-${record.roadName}-${record.commName}-${ + record.fullProjName + }-${record.no.toString().padStart(3, '0')}`} +
    + {text} + + ), + }, + { + title: '房屋性质及行业', + dataIndex: 'type', + sorter: true, + width: 150, + render: (text, record) => + this.bindCodeValue(text, 'house_type') + + (text === 2 ? `(${this.bindCodeValue(record.industry, 'house_industry')})` : ''), + }, + { + title: '地址', + dataIndex: 'address', + sorter: true, + }, + { + title: '任务截止时间', + dataIndex: 'endTime', + sorter: true, + width: 150, + }, + { + title: '建档状态', + dataIndex: 'state', + sorter: true, + width: 100, + render: text => this.bindCodeValue(text, 'house_status'), + }, + ] + + /** + * 构造函数,在渲染前动态添加操作字段等 + * @param {*} props + */ + constructor(props) { + super(props) + + const flag = auth({ houseInfo: 'getByTaskId' }) + + if (flag) { + this.columns.push({ + title: '操作', + width: 150, + dataIndex: 'actions', + render: (text, record) => ( + + + this.onOpen(record.id)}> + {record.state === -1 || record.state === 1 || record.state === 2 + ? `修改` + : record.state === 3 || record.state === 6 + ? `查看` + : `登记`} + + + this.onShowLog(record.id)}>日志 + + ), + }) + } + } + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * 加载字典数据,之后开始加载表格数据 + * 如果必须要加载字典数据,可直接对表格设置autoLoad=true + */ + componentDidMount() { + const { onLoading, onLoadData } = this.table.current + onLoading() + getDictData('house_status', 'house_type', 'house_industry').then(codes => { + this.setState({ codes: { ...this.state.codes, ...codes } }, () => { + onLoadData() + }) + }) + } + + /** + * 调用加载数据接口,可在调用前对query进行处理 + * [异步,必要] + * @param {*} params + * @param {*} query + * @returns + */ + loadData = async (params, query) => { + const searchInfo = getSearchInfo({ + query, + queryType: { + type: '=', + industry: '=', + address: 'like', + houseCode: 'like', + state: '=', + }, + }) + + const { data } = await apiAction.page({ + ...params, + searchInfo, + }) + return data + } + + /** + * 绑定字典数据 + * @param {*} code + * @param {*} name + * @returns + */ + bindCodeValue(code, name) { + name = toCamelCase(name) + const codes = this.state.codes[name] + if (codes) { + const c = codes.find(p => p.code == code) + if (c) { + return c.value + } + } + return null + } + + /** + * 打开新增/编辑弹窗 + * @param {*} modal + * @param {*} record + */ + onOpen(taskId) { + window.openContentWindow({ + title: '房屋登记', + path: 'business/house/info/form', + param: { + taskId, + table: this.table, + }, + }) + } + + /** + * 对表格上的操作进行统一处理 + * [异步] + * @param {*} action + * @param {*} successMessage + */ + async onAction(action, successMessage) { + const { onLoading, onLoaded, onReloadData } = this.table.current + onLoading() + try { + if (action) { + await action + } + if (successMessage) { + Message.success(successMessage) + } + onReloadData() + } catch { + onLoaded() + } + } + + //#region 自定义方法 + onShowLog(id) { + this.setState({ visibleLog: id }) + } + //#endregion + + render() { + const { codes, type, visibleLog } = this.state + + return ( + +
    + + { + if (values.hasOwnProperty('type')) { + this.setState({ type: values.type }) + } + if (values.hasOwnProperty('state')) { + const value = checkboxCheckedNone({ + value: values.state, + length: codes.houseStatus.length, + required: true, + }) + return { + state: value, + } + } + }} + query={ + + + + 全部 + {codes.houseType.map(item => ( + + {item.value} + + ))} + + + {type == 2 && ( + + + + )} + + + + + + + + + 全部 + {codes.houseStatus.map(item => ( + + {item.value} + + ))} + + + + } + /> + + + this.setState({ visibleLog: false })} + destroyOnClose + > + + +
    + ) + } +} diff --git a/Web/src/pages/business/house/zone/form.jsx b/Web/src/pages/business/house/zone/form.jsx new file mode 100644 index 0000000..b97e82a --- /dev/null +++ b/Web/src/pages/business/house/zone/form.jsx @@ -0,0 +1,194 @@ +import React, { Component } from 'react' +import { Form, Input, InputNumber, Spin, TreeSelect } from 'antd' +import { AntIcon } from 'components' +import { cloneDeep, pickBy } from 'lodash' +import { api } from 'common/api' +import { numberToChinese } from 'util/format' +import store from 'store' + +const { getState, subscribe } = store +const storePath = 'user' +const initialValues = { + sort: 100, +} +export default class form extends Component { + state = { + // 加载状态 + loading: true, + exist: false, + options: { + orgData: [], + }, + user: getState(storePath), + } + + constructor(props) { + super(props) + + this.unsubscribe = subscribe(storePath, () => { + this.setState({ + user: getState(storePath), + }) + }) + } + // 表单实例 + form = React.createRef() + + // 初始化数据 + record = {} + + /** + * mount后回调 + */ + componentDidMount() { + this.props.created && this.props.created(this) + } + componentWillUnmount() { + this.unsubscribe() + } + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + const { user } = this.state + if (params.id) { + this.setState({ + loading: true, + }) + + api.houseZoneGetById({ zoneId: params.id }).then(({ data }) => { + this.record = data + + this.setState({ + loading: false, + }) + }) + } + // this.record = cloneDeep(params.record) + //#region 从后端转换成前段所需格式 + const orgData = await this.loadOrgData() + + this.setState({ + exist: !!params.id, + options: { orgData }, + }) + + //街道角色新增,不管左侧树选中与否,默认值均为本街道 + if (user.adminType === 2) { + user.roles.map(role => { + if (role.code == 'road_manager') { + params.orgId = user.loginEmpInfo.orgId + } + }) + } + + this.record = { + pid: params.orgId, + ...this.record, + } + + //#endregion + if (!params.id && !!params.orgId) { + this.onOrgIdChanged(params.orgId) + } + this.form.current.setFieldsValue(this.record) + + this.setState({ + loading: false, + }) + } + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + if (this.record) { + postData.id = this.record.id + } + //#region 从前段转换后端所需格 + //#endregion + return postData + } + } + + async loadOrgData() { + const { data } = await api.getOrgTree({ type: 4 }) + return data + } + + onOrgIdChanged(value) { + this.loading = true + + api.houseZoneAutoIncrement({ roadId: value }) + .then(({ data }) => { + this.form.current.setFieldsValue({ + name: `片区${numberToChinese(data)}`, + sort: data, + }) + }) + .catch(() => { + this.form.current.setFieldsValue({ + name: '', + sort: 0, + }) + }) + .finally(() => { + this.loading = false + }) + } + + render() { + return ( +
    + }> +
    + + this.onOrgIdChanged(value)} + disabled={this.state.exist} + /> + + + + + + + + + + + +
    +
    +
    + ) + } +} diff --git a/Web/src/pages/business/house/zone/index.jsx b/Web/src/pages/business/house/zone/index.jsx new file mode 100644 index 0000000..bf84083 --- /dev/null +++ b/Web/src/pages/business/house/zone/index.jsx @@ -0,0 +1,277 @@ +import React, { Component } from 'react' +import { Button, Card, Form, Input, message as Message, Popconfirm } from 'antd' +import { + AntIcon, + Auth, + Container, + ModalForm, + QueryTable, + QueryTableActions, + QueryTreeLayout, +} from 'components' +import { api } from 'common/api' +import auth from 'components/authorized/handler' +import { toCamelCase } from 'util/format' +import { isEqual } from 'lodash' +import getDictData from 'util/dic' +import FormBody from './form' + +const apiAction = { + tree: api.getOrgTree, + page: api.houseZonePage, + add: api.houseZoneAdd, + edit: api.houseZoneEdit, + delete: api.sysOrgDelete, +} + +const name = '片区' + +export default class index extends Component { + // 树框架实例 + treeLayout = React.createRef() + + // 表格实例 + table = React.createRef() + + // 新增窗口实例 + addForm = React.createRef() + // 编辑窗口实例 + editForm = React.createRef() + + // 树选中节点 + selectId = undefined + + // 表格字段 + columns = [ + { + title: '片区名称', + width: '400px', + dataIndex: 'name', + sorter: true, + }, + { + title: '排序', + width: '80px', + dataIndex: 'sort', + sorter: true, + }, + { + title: '备注', + width: '80px', + dataIndex: 'remark', + sorter: true, + }, + ] + + /** + * 构造函数,在渲染前动态添加操作字段等 + * @param {*} props + */ + constructor(props) { + super(props) + + const flag = auth({ houseZone: [['edit'], ['delete']] }) + + if (flag) { + this.columns.push({ + title: '操作', + width: 150, + dataIndex: 'actions', + render: (text, record) => ( + + + this.onOpen(this.editForm, record.id)}>编辑 + + + this.onDelete(record)} + > + 删除 + + + + ), + }) + } + } + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * 加载字典数据,之后开始加载表格数据 + * 如果必须要加载字典数据,可直接对表格设置autoLoad=true + */ + componentDidMount() { + this.table.current.onLoading() + } + + /** + * 调用加载数据接口,可在调用前对query进行处理 + * [异步,必要] + * @param {*} params + * @param {*} query + * @returns + */ + loadData = async (params, query) => { + query = { + ...query, + pid: this.selectId, + } + + const { data } = await apiAction.page({ + ...params, + ...query, + }) + return data + } + + /** + * 调用树结构数据接口 + * [异步,必要] + * @returns + */ + loadTreeData = async () => { + const { data } = await apiAction.tree({ type: 4 }) + return data + } + + /** + * 树节点选中事件 + * [必要] + * @param {*} id + */ + onSelectTree(id) { + this.selectId = id + this.table.current.onReloadData() + } + + /** + * 绑定字典数据 + * @param {*} code + * @param {*} name + * @returns + */ + bindCodeValue(code, name) { + name = toCamelCase(name) + const codes = this.state.codes[name] + if (codes) { + const c = codes.find(p => p.code === code) + if (c) { + return c.value + } + } + return null + } + + /** + * 打开新增/编辑弹窗 + * @param {*} modal + * @param {*} record + */ + onOpen(modal, id) { + modal.current.open({ + orgId: this.selectId, + // record, + id, + }) + } + + /** + * 对表格上的操作进行统一处理 + * [异步] + * @param {*} action + * @param {*} successMessage + */ + async onAction(action, successMessage) { + this.table.current.onLoading() + try { + if (action) { + await action + } + if (successMessage) { + Message.success(successMessage) + } + this.treeLayout.current.onReloadData() + this.table.current.onReloadData() + } catch { + this.table.current.onLoaded() + } + } + + /** + * 删除 + * @param {*} record + */ + onDelete(record) { + this.onAction(apiAction.delete(record), '删除成功') + } + + //#region 自定义方法 + //#endregion + + render() { + return ( + this.onSelectTree(key)} + > + + + + + + + + } + operator={ + + } + /> + + + + this.onAction()} + > + + + + this.onAction()} + > + + + + ) + } +} diff --git a/Web/src/pages/business/inspection/dir/index.jsx b/Web/src/pages/business/inspection/dir/index.jsx new file mode 100644 index 0000000..fd6c200 --- /dev/null +++ b/Web/src/pages/business/inspection/dir/index.jsx @@ -0,0 +1,273 @@ +import React, { Component } from 'react' +import { + Button, + Card, + Checkbox, + Col, + Form, + Input, + Modal, + Row, + Space, + Tooltip, + Typography, +} from 'antd' +import { AntIcon, Auth, Container, ModalForm, QueryList } from 'components' +import { isEqual } from 'lodash' +import getDictData from 'util/dic' +import { toCamelCase } from 'util/format' +import { getSearchInfo, QueryType } from 'util/query' +import { api } from 'common/api' +import moment from 'moment' + +import PreviewBody from './preview' + +/** + * 注释段[\/**\/]为必须要改 + */ + +/** + * 配置页面所需接口函数 + */ +const apiAction = { + page: api.inspectionOrgDirPage, + publish: api.inspectionOrgDirPublish, +} + +/** + * 用于弹窗标题 + * [必要] + */ +const name = '' + +/** + * 统一配置权限标识 + * [必要] + */ +const authName = 'inspectionOrgDir' + +export default class index extends Component { + state = { + codes: {}, + } + + // 表格实例 + list = React.createRef() + + preview = React.createRef() + + columns = [] + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * 加载字典数据,之后开始加载表格数据 + * 如果必须要加载字典数据,可直接对表格设置autoLoad=true + */ + componentDidMount() { + const { onLoading, onLoadData } = this.list.current + onLoading() + getDictData(/**/).then(codes => { + this.setState({ codes }, () => { + onLoadData() + }) + }) + } + + /** + * 调用加载数据接口,可在调用前对query进行处理 + * [异步,必要] + * @param {*} params + * @param {*} query + * @returns + */ + loadData = async (params, query) => { + const searchInfo = getSearchInfo({ + query, + queryType: { + no: QueryType.Like, + }, + }) + const { data } = await apiAction.page({ + ...params, + searchInfo, + }) + return data + } + + /** + * 绑定字典数据 + * @param {*} code + * @param {*} name + * @returns + */ + bindCodeValue(code, name) { + name = toCamelCase(name) + const codes = this.state.codes[name] + if (codes) { + const c = codes.find(p => p.code == code) + if (c) { + return c.value + } + } + return null + } + + /** + * 打开新增/编辑弹窗 + * @param {*} modal + * @param {*} id + */ + onOpen(modal, id) { + modal.current.open({ id }) + } + + //#region 自定义方法 + renderStatus(type, status) { + const STYLE = { + success: { + class: 'success', + label: '已过审', + }, + warning: { + class: 'warning', + label: '待审核', + }, + error: { + class: 'error', + label: '未通过', + }, + } + let style + switch (status) { + case -2: + case 2: + default: + style = STYLE.success + break + case 1: + style = STYLE.warning + break + case -1: + style = STYLE.error + break + } + return
    {style.label}
    + } + + renderItem(record) { + const { id, no, orgAmount, removedOrgAmount, newOrgAmount, publishTime } = record + return ( +
    +
    + +
    + + 名录发布期号:{no} + +
    +
    +
    +
    + + + + +
    + + 包含机构数量 + {orgAmount} +
    + + +
    + + 被除名机构数量 + {removedOrgAmount} +
    + + +
    + + 同比上一年新入或回归机构数量 + {newOrgAmount} +
    + + +
    + + 发布日期 + + {moment(publishTime).format('YYYY-MM-DD')} + +
    + +
    + + + + +
    +
    +
    + ) + } + //#endregion + + render() { + return ( + +
    + + + + + + + } + operator={ + + } + renderItem={record => this.renderItem(record)} + /> + + + this.list.current.onReloadData()} + > + + +
    + ) + } +} diff --git a/Web/src/pages/business/inspection/dir/preview.jsx b/Web/src/pages/business/inspection/dir/preview.jsx new file mode 100644 index 0000000..7d6934e --- /dev/null +++ b/Web/src/pages/business/inspection/dir/preview.jsx @@ -0,0 +1,141 @@ +import React, { Component } from 'react' +import { Alert, Col, Empty, Row, Table, Tag } from 'antd' +import { AntIcon, Container } from 'components' +import { api } from 'common/api' + +export default class preview extends Component { + state = { + loading: { + indicator: , + }, + data: [], + stage: null, + count: 0, + } + + columns = [ + { + align: 'center', + width: 80, + render: (text, record) => { + switch (record.status) { + case 1: + return NEW + case 0: + default: + return null + case -1: + return + } + }, + }, + { + dataIndex: 'code', + title: '机构备案编号', + render: (text, record) => { + switch (record.status) { + case 1: + case 0: + default: + return text + case -1: + return {text} + } + }, + }, + { + dataIndex: 'name', + title: '机构名称', + }, + { + dataIndex: 'address', + title: '地址', + }, + ] + + componentDidMount() { + this.props.created && this.props.created(this) + } + + async fillData() { + const state = { + loading: false, + } + const { data } = await api.inspectionOrgDirPreview() + + if (data) { + const { stage, count, list } = data + Object.assign(state, { + data: list, + stage, + count, + }) + } + + this.setState(state) + } + + async getData() { + return null + } + + render() { + const { loading, data, stage, count, publishing } = this.state + + if (stage) { + return ( + <> +
    + + +
    + 新名录发布期号{stage.no} + ,机构合计 + {count}个 +
    + +
    +
    +
    + record.id} + /> +
    + + + + + 红牌将除名机构在名录发布时会删除 + + + NEW + 今年新增或回归机构 + + + +
    + + ) + } else { + return ( + <> +
    + +
    + + ) + } + } +} diff --git a/Web/src/pages/business/inspection/dir/score.jsx b/Web/src/pages/business/inspection/dir/score.jsx new file mode 100644 index 0000000..251ff9b --- /dev/null +++ b/Web/src/pages/business/inspection/dir/score.jsx @@ -0,0 +1,381 @@ +import React, { Component } from 'react' +import { + Alert, + Button, + Card, + Form, + Input, + InputNumber, + message as Message, + Popconfirm, + Space, + Tag, + Typography, +} from 'antd' +import { AntIcon, Auth, Container, ModalForm, QueryTable, QueryTableActions } from 'components' +import { api } from 'common/api' +import auth from 'components/authorized/handler' +import { isEqual } from 'lodash' +import getDictData from 'util/dic' +import { toCamelCase } from 'util/format' + +/** + * 注释段[\/**\/]为必须要改 + */ + +/** + * 配置页面所需接口函数 + */ +const apiAction = { + page: api.inspectionOrgDirListScore, +} + +/** + * 用于弹窗标题 + * [必要] + */ +const name = '' + +/** + * 统一配置权限标识 + * [必要] + */ +const authName = 'inspectionOrgDir' + +export default class score extends Component { + state = { + codes: {}, + + disabled: true, + saving: false, + } + + // 表格实例 + table = React.createRef() + + stageForm = React.createRef() + + tableForm = React.createRef() + + columns = [ + { + dataIndex: 'code', + title: '机构备案编号', + width: 120, + }, + { + dataIndex: 'name', + title: '鉴定机构名称', + width: 300, + render: (text, record) => ( + + {text} + {!!record.isNew && NEW} + + ), + }, + { + dataIndex: 'prevScoreResult', + title: '往期名录信用评价', + width: 120, + render: text => + this.bindCodeValue(text || 0, 'inspection_dir_result', ({ value, extCode }) => { + return {value} + }), + }, + { + dataIndex: 'score', + title: '本期名录信用评分', + width: 180, + render: (text, record, index) => ( + + + + ), + }, + { + dataIndex: 'scoreResult', + title: '本期名录信用评价结果', + width: 120, + render: (text, record, index) => ( + <> + + {this.bindCodeValue( + text || 0, + 'inspection_dir_result', + ({ value, extCode }) => { + return {value} + } + )} + + + ), + }, + ] + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * 加载字典数据,之后开始加载表格数据 + * 如果必须要加载字典数据,可直接对表格设置autoLoad=true + */ + async componentDidMount() { + const { onLoading, onLoadData } = this.table.current + onLoading() + + const { data } = await api.inspectionOrgDirDetail() + if (data) { + this.stageForm.current.setFieldsValue(data) + } + + getDictData('inspection_dir_result').then(codes => { + this.setState({ codes }, () => { + onLoadData() + + this.setState({ + disabled: false, + }) + }) + }) + } + + /** + * 调用加载数据接口,可在调用前对query进行处理 + * [异步,必要] + * @param {*} params + * @param {*} query + * @returns + */ + loadData = async (params, query) => { + const { data } = await apiAction.page({ + ...params, + ...query, + }) + + const values = {} + data.forEach((item, index) => { + values[index] = item + }) + + this.tableForm.current.setFieldsValue(values) + + return data + } + + /** + * 绑定字典数据 + * @param {*} code + * @param {*} name + * @returns + */ + bindCodeValue(code, name, formatter) { + name = toCamelCase(name) + const codes = this.state.codes[name] + if (codes) { + const c = codes.find(p => p.code == code) + if (c) { + if (formatter) { + return formatter(c) + } else { + return c.value + } + } + } + return null + } + + /** + * 打开新增/编辑弹窗 + * @param {*} modal + * @param {*} id + */ + onOpen(modal, id) { + modal.current.open({ id }) + } + + /** + * 对表格上的操作进行统一处理 + * [异步] + * @param {*} action + * @param {*} successMessage + */ + async onAction(action, successMessage) { + const { onLoading, onLoaded, onReloadData } = this.table.current + onLoading() + try { + if (action) { + await action + } + if (successMessage) { + Message.success(successMessage) + } + onReloadData() + } catch { + onLoaded() + } + } + + /** + * 删除 + * @param {*} id + */ + onDelete(id) { + this.onAction(apiAction.delete({ id }), '删除成功') + } + + //#region 自定义方法 + onChangeScore(key, changedValues, record) { + const score = changedValues[key].score, + codes = this.state.codes.inspectionDirResult + let scoreResult = 0 + for (const code of codes) { + if (code.extCode) { + const { range } = code.extCode + if (score >= range[0] && score < (range[1] || Infinity)) { + scoreResult = code.code + break + } + } + } + + /** + * 特殊逻辑处理 + * 如果往期和本期皆为黄牌,直接设定本期为红牌 + */ + if (record.prevScoreResult == 3 && scoreResult == 3) { + scoreResult = 4 + } + this.table.current.onChangeData(key, { scoreResult }) + } + + async onFinish(values) { + const detail = [], + scores = this.tableForm.current.getFieldsValue() + + for (const key in scores) { + const item = scores[key] + if (item.score !== null) { + item.orgId = item.id + detail.push(item) + } + } + + this.setState({ saving: true }) + try { + await api.inspectionOrgDirSaveScore({ + ...values, + detail, + }) + + Message.success('保存评价成功') + } finally { + this.setState({ saving: false }) + } + } + //#endregion + + render() { + const { disabled, saving } = this.state + + return ( + +
    + + 考核标准参考 +
      +
    • 考核结果评分10分的,信用评级为优秀
    • +
    • 评分达到8分以上(含8分)、10分以下的,信用评级为合格
    • +
    • + 评分为6分以上(含6分)、8分以下的,挂黄牌警告, + + 连续两年挂黄牌警告的,将视作红牌 + +
    • +
    • + 评分为6分以下的, + 挂红牌,将移除鉴定机构名录 +
    • +
    + + } + /> +
    + + } + editable + form={this.tableForm} + formProps={{ + onValuesChange: changedValues => { + Object.keys(changedValues).forEach(key => { + this.onChangeScore( + key, + changedValues, + this.table.current.getRecord(key) + ) + }) + }, + }} + operator={ + +
    this.onFinish(values)} + > + + + + + + + + + + +
    + } + /> +
    +
    + ) + } +} diff --git a/Web/src/pages/business/inspection/register/detail.jsx b/Web/src/pages/business/inspection/register/detail.jsx new file mode 100644 index 0000000..8ef73c7 --- /dev/null +++ b/Web/src/pages/business/inspection/register/detail.jsx @@ -0,0 +1,314 @@ +import React, { Component } from 'react' +import { + Button, + Card, + Col, + Divider, + Form, + Input, + message as Message, + Modal, + Row, + Space, + Spin, + Tag, + Typography, + Upload, +} from 'antd' +import { AntIcon, Auth, Container } from 'components' +import { api } from 'common/api' +import { BlobToBase64, GetFileName, PreviewFile } from 'util/file' +import { isEqual } from 'lodash' + +export default class detail extends Component { + state = { + loading: false, + saving: false, + record: {}, + updateRecord: {}, + } + + form = React.createRef() + + componentDidMount() { + this.fillData() + } + + async fillData() { + this.setState({ loading: true }) + const { data, uploads, action } = this.props + const keys = uploads.map(p => p.key) + let record = {}, + updateRecord = {} + if (action === 'review') { + record = data.updateRecord + } else if (action === 'updateReview') { + record = data.record + updateRecord = data.updateRecord + } else { + record = data.record || data.updateRecord + } + + for (const key of keys) { + const fileValue = [] + const item = record[key] + if (!Array.isArray(item)) { + const fileList = !item || !item.length ? [] : item.split(',') + for (const fileId of fileList) { + try { + const file = await PreviewFile(fileId) + const base64 = await BlobToBase64(file) + fileValue.push({ + uid: fileId, + response: fileId, + name: file.name, + url: base64, + status: 'done', + }) + } catch { + const { data: file } = await api.sysFileInfoDetail({ id: fileId }) + fileValue.push({ + uid: fileId, + response: '文件已丢失', + name: file.fileOriginName, + status: 'error', + }) + } + } + } + + record[key] = fileValue + + const updateFileValue = [] + const updateItem = updateRecord[key] + if (!Array.isArray(updateItem)) { + const fileList = !updateItem || !updateItem.length ? [] : updateItem.split(',') + for (const fileId of fileList) { + try { + const file = await PreviewFile(fileId) + const base64 = await BlobToBase64(file) + updateFileValue.push({ + uid: fileId, + response: fileId, + name: file.name, + url: base64, + status: 'done', + }) + } catch { + const { data: file } = await api.sysFileInfoDetail({ id: fileId }) + updateFileValue.push({ + uid: fileId, + response: '文件已丢失', + name: file.fileOriginName, + status: 'error', + }) + } + } + } + + updateRecord[key] = updateFileValue + } + + this.setState({ + loading: false, + record, + updateRecord, + }) + } + + onFinish(approved = false) { + const remark = this.form.current.getFieldValue('remark') + if (!approved && !remark) { + Message.error('请输入退回理由') + return + } + + Modal.confirm({ + title: '提示', + content: '是否确定' + ['退回', '审核通过'][+approved], + onOk: async () => { + this.setState({ saving: true }) + try { + const { id } = this.props.data + if (approved) { + await api.inspectionOrgReviewApproved({ id }) + } else { + await api.inspectionOrgReviewNotApproved({ id, remark }) + } + + // 提交成功时应该关闭当前页并且等待 + Modal.info({ + title: '提示', + content: '审核已完成', + onOk: () => { + if (this.props.list) { + this.props.list.current.onReloadData() + } + window.closeContentWindow() + }, + }) + } finally { + this.setState({ saving: false }) + } + }, + }) + } + + async onFileDownload(file) { + const { data, headers } = await api.sysFileInfoDownload({ id: file.response }) + const url = window.URL.createObjectURL(data) + const fileName = GetFileName(headers['content-disposition']) + const a = document.createElement('a') + a.href = url + a.download = fileName + a.click() + window.URL.revokeObjectURL(url) + a.remove() + } + + compareTo(scoure, target, type) { + if (type === 'file') { + const s = scoure.map(p => p.uid), + t = target.map(p => p.uid) + + return isEqual(s.sort(), t.sort()) + } else { + return scoure === target + } + } + + renderDetail(record, compare) { + const { loading } = this.state + + const { uploads } = this.props + + return ( + <> + 详细信息 + +
    +
    申请材料
    + }> + } direction="vertical"> + {uploads.map((item, i) => { + let fileList = [] + if ( + record && + record[item.key] && + Array.isArray(record[item.key]) + ) { + fileList = record[item.key] + } + + let compareResult = true + if (compare) { + compareResult = this.compareTo( + fileList, + compare[item.key] || [], + 'file' + ) + } + + return ( +
    + +
    + {item.label} + false} + onDownload={file => + this.onFileDownload(file) + } + fileList={fileList} + /> + + {compare && !loading && ( + + {compareResult ? ( + 未修改 + ) : ( + 已修改 + )} + + )} + + + ) + })} + + + + + + ) + } + + render() { + const { loading, saving, record, updateRecord } = this.state + + const { uploads, action } = this.props + + return ( + +
    + + {action === 'updateReview' ? ( + <> +
    + 修改前 + {this.renderDetail(record)} + + + 修改后 + {this.renderDetail(updateRecord, record)} + + + ) : ( + {this.renderDetail(record)} + )} + + 历史记录 + + {['review', 'updateReview'].includes(action) && ( +
    + +
    +
    退回理由
    + + + +
    + + + + +
    +
    +
    + + )} +
    + + ) + } +} diff --git a/Web/src/pages/business/inspection/register/form.jsx b/Web/src/pages/business/inspection/register/form.jsx new file mode 100644 index 0000000..6018e7f --- /dev/null +++ b/Web/src/pages/business/inspection/register/form.jsx @@ -0,0 +1,329 @@ +import React, { Component } from 'react' +import { + Alert, + Button, + Card, + Col, + Divider, + Form, + Input, + Modal, + Row, + Space, + Spin, + Upload, +} from 'antd' +import { AntIcon, Container } from 'components' +import { api } from 'common/api' +import moment from 'moment' +import { BlobToBase64, GetFileName, PreviewFile } from 'util/file' + +const layout = { + labelCol: { flex: '140px' }, + wrapperCol: { flex: '1' }, +} + +export default class form extends Component { + state = { + loading: false, + saving: false, + code: '', + date: '', + record: {}, + } + + form = React.createRef() + + componentDidMount() { + this.fillData() + } + + async fillData() { + this.setState({ loading: true }) + const { data, uploads } = this.props + const record = data && (data.updateRecord || data.record) + if (record) { + const keys = uploads.map(p => p.key) + for (const key of keys) { + const fileValue = [] + const item = record[key] + if (!Array.isArray(item)) { + const fileList = !item || !item.length ? [] : item.split(',') + for (const fileId of fileList) { + try { + const file = await PreviewFile(fileId) + const base64 = await BlobToBase64(file) + fileValue.push({ + uid: fileId, + response: fileId, + name: file.name, + url: base64, + status: 'done', + }) + } catch { + const { data: file } = await api.sysFileInfoDetail({ id: fileId }) + fileValue.push({ + uid: fileId, + response: '文件已丢失', + name: file.fileOriginName, + status: 'error', + }) + } + } + } + + record[key] = fileValue + } + + this.form.current.setFieldsValue(record) + + this.setState({ + loading: false, + code: data.code, + date: moment(data.createdTime).format('YYYY年MM月DD日'), + record, + }) + } else { + const { data: code } = await api.inspectionOrgNewCode() + this.setState({ + loading: false, + code, + date: moment().format('YYYY年MM月DD日'), + }) + } + } + + async onFinish(values) { + this.setState({ saving: true }) + const { uploads, action } = this.props + try { + for (const upload of uploads) { + values[upload.key] = (values[upload.key] || []) + .map(item => (item.uid.startsWith('rc-upload') ? item.response : item.uid)) + .join(',') + } + if (action === 'edit') { + await api.inspectionOrgUpdate(values) + } else { + await api.inspectionOrgRegister(values) + } + + // 提交成功时应该关闭当前页并且等待 + Modal.info({ + title: '提示', + content: '备案已提交申请,请等待上级部门审核', + onOk() { + window.closeContentWindow() + }, + }) + } finally { + this.setState({ saving: false }) + } + } + + async onFileUpload({ file, onProgress, onSuccess, onError }) { + onProgress({ + percent: 0, + }) + const fd = new FormData() + fd.append('file', file) + try { + const { data: fileId } = await api.sysFileInfoUpload(fd) + onSuccess(fileId) + } catch { + onError() + } + } + + async onFileDownload(file) { + const { data, headers } = await api.sysFileInfoDownload({ id: file.response }) + const url = window.URL.createObjectURL(data) + const fileName = GetFileName(headers['content-disposition']) + const a = document.createElement('a') + a.href = url + a.download = fileName + a.click() + window.URL.revokeObjectURL(url) + a.remove() + } + + render() { + const { loading, saving, code, date, record } = this.state + + const { uploads, action } = this.props + + return ( + +
    +
    this.onFinish(values)}> + {record.updateStatus === -1 && ( + <> + +
    + + )} + +
    +
    基本信息
    + }> + +
    + + {code} + + + + + {date} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    申请材料
    + }> + } direction="vertical"> + {uploads.map((item, i) => ( +
    + { + if (Array.isArray(e)) { + return e + } + return e && e.fileList + }} + rules={[ + { + required: item.required, + message: `请上传${item.label}`, + }, + ]} + > + this.onFileUpload(e)} + showUploadList={{ + showRemoveIcon: true, + showDownloadIcon: true, + }} + onPreview={() => false} + onDownload={file => this.onFileDownload(file)} + > + + + +
    + ))} +
    +
    +
    +
    + +
    +
    + + + + ) + } +} diff --git a/Web/src/pages/business/inspection/register/index.jsx b/Web/src/pages/business/inspection/register/index.jsx new file mode 100644 index 0000000..6c6b3d8 --- /dev/null +++ b/Web/src/pages/business/inspection/register/index.jsx @@ -0,0 +1,94 @@ +import React, { Component } from 'react' + +import { api } from 'common/api' + +import FormBody from './form' +import DetailBody from './detail' +import { Spin } from 'antd' +import { AntIcon } from 'components' + +const uploads = [ + { + key: 'applicationFormFiles', + label: '名录申请表', + required: true, + }, + { + key: 'orgBusinessLicenseFiles', + label: '机构营业执照和法人证书', + required: true, + }, + { + key: 'inspectionQualificationCertificateFiles', + label: '建设工程质量检测资质证书或检验检测机构资质认定证书', + required: true, + }, + { + key: 'officeInformationFiles', + label: '办公场所资料(房产证、不动产登记证或房屋租赁合同等)', + required: true, + }, + { + key: 'employeeCertificateFiles', + label: '符合条件的从业人员职称证明、学历证明、劳动合同、社保证明等', + required: true, + }, + { + key: 'calibrationCertificateFiles', + label: '开展房屋安全鉴定工作必要的设备计量检定证书、校准证书', + required: true, + }, + { + key: 'otherFiles', + label: '其他资料', + }, +] + +export default class index extends Component { + state = { + loading: true, + data: {}, + } + + componentDidMount() { + this.fillData() + } + + async fillData() { + this.setState({ loading: true }) + const id = this.props.param && this.props.param.id + const { data } = await api.inspectionOrgDetail({ id }) + this.setState({ + loading: false, + data, + }) + } + + render() { + const { loading, data } = this.state + + const { param } = this.props + + const editable = + !data || + (!data.record && !data.updateRecord) || // 没有记录时需登记 + ([0, 1].includes(data.status) && data.updateStatus === -1) || // 登记中或已登记时,被退回的状态 + (param && ['register', 'edit', 'reRegistration'].includes(param.action)) // 参数标识可修改 + + return ( + } style={{ height: 400 }}> + {!loading && + (editable ? ( + + ) : ( + + ))} + + ) + } +} diff --git a/Web/src/pages/business/inspection/review/history.jsx b/Web/src/pages/business/inspection/review/history.jsx new file mode 100644 index 0000000..218beac --- /dev/null +++ b/Web/src/pages/business/inspection/review/history.jsx @@ -0,0 +1,122 @@ +import React, { Component } from 'react' +import { Form, Space, Spin, Table, Tabs, Typography } from 'antd' +import { AntIcon, Container } from 'components' +import { api } from 'common/api' + +const columns = [ + { + dataIndex: 'type', + title: '备案类型', + width: 120, + render: text => (text === 1 ? '登记备案' : '修改备案'), + }, + { + dataIndex: 'createdTime', + title: '提交时间', + width: 200, + }, + { + dataIndex: 'updatedTime', + title: '审核时间', + width: 200, + }, + { + dataIndex: 'status', + title: '审核结果', + width: 200, + render: text => + text === 2 ? ( + + 通过 + + ) : ( + + 未通过 + + ), + }, + { + dataIndex: 'remark', + title: '未通过理由', + }, +] + +export default class history extends Component { + state = { + // 加载状态 + loading: { + indicator: , + }, + code: '', + data: [], + } + + // 表单实例 + form = React.createRef() + + // 初始化数据 + record = {} + + /** + * mount后回调 + */ + componentDidMount() { + this.props.created && this.props.created(this) + } + + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + const state = { loading: false } + //#region 从后端转换成前段所需格式,也可以在此处调用获取详细数据接口 + if (params.id) { + const { data } = await api.inspectionOrgHistory({ id: params.id }) + state.data = data + + state.code = params.code + } + //#endregion + + this.setState(state) + } + + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() {} + + //#region 自定义方法 + //#endregion + + render() { + const { loading, data, code } = this.state + + const props = { + loading, + pagination: false, + columns, + dataSource: data, + bordered: true, + size: 'middle', + rowKey: record => record.id, + } + + return ( + <> +
    + + 机构备案编号:{code} + +
    +
    + + ) + } +} diff --git a/Web/src/pages/business/inspection/review/index.jsx b/Web/src/pages/business/inspection/review/index.jsx new file mode 100644 index 0000000..2517b9c --- /dev/null +++ b/Web/src/pages/business/inspection/review/index.jsx @@ -0,0 +1,14 @@ +import React, { Component } from 'react' +import { api } from 'common/api' + +import ListBody from './list' + +const apiAction = { + page: api.inspectionOrgReviewPage, +} + +export default class index extends Component { + render() { + return + } +} diff --git a/Web/src/pages/business/inspection/review/list.jsx b/Web/src/pages/business/inspection/review/list.jsx new file mode 100644 index 0000000..6450820 --- /dev/null +++ b/Web/src/pages/business/inspection/review/list.jsx @@ -0,0 +1,305 @@ +import React, { Component } from 'react' +import { Button, Card, Checkbox, Col, Form, Input, Row, Space, Tooltip, Typography } from 'antd' +import { AntIcon, Auth, Container, ModalForm, QueryList } from 'components' +import { isEqual } from 'lodash' +import getDictData from 'util/dic' +import { toCamelCase } from 'util/format' +import { getSearchInfo, QueryType } from 'util/query' + +import HistoryBody from './history' + +const { Link } = Typography + +/** + * 注释段[\/**\/]为必须要改 + */ + +/** + * 用于弹窗标题 + * [必要] + */ +const name = '' + +/** + * 统一配置权限标识 + * [必要] + */ +const authName = 'inspectionOrg' + +export default class list extends Component { + state = { + codes: {}, + } + + // 表格实例 + list = React.createRef() + + history = React.createRef() + + columns = [] + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * 加载字典数据,之后开始加载表格数据 + * 如果必须要加载字典数据,可直接对表格设置autoLoad=true + */ + componentDidMount() { + const { onLoading, onLoadData } = this.list.current + onLoading() + getDictData(/**/).then(codes => { + this.setState({ codes }, () => { + onLoadData() + }) + }) + } + + /** + * 调用加载数据接口,可在调用前对query进行处理 + * [异步,必要] + * @param {*} params + * @param {*} query + * @returns + */ + loadData = async (params, query) => { + const searchInfo = getSearchInfo({ + query, + queryType: { + code: QueryType.Like, + updateStatus: QueryType.Equal, + }, + }) + const { data } = await this.props.api({ + ...params, + searchInfo, + }) + return data + } + + /** + * 绑定字典数据 + * @param {*} code + * @param {*} name + * @returns + */ + bindCodeValue(code, name) { + name = toCamelCase(name) + const codes = this.state.codes[name] + if (codes) { + const c = codes.find(p => p.code == code) + if (c) { + return c.value + } + } + return null + } + + /** + * 打开新增/编辑弹窗 + * @param {*} modal + * @param {*} id + */ + onOpen(modal, id, code) { + modal.current.open({ id, code }) + } + + //#region 自定义方法 + renderStatus(type, status) { + const STYLE = { + success: { + class: 'success', + label: '已过审', + }, + warning: { + class: 'warning', + label: '待审核', + }, + error: { + class: 'error', + label: '未通过', + }, + } + let style + switch (status) { + case -2: + case 2: + default: + style = STYLE.success + break + case 1: + style = STYLE.warning + break + case -1: + style = STYLE.error + break + } + return
    {style.label}
    + } + + renderItem(record) { + const { + id, + code, + name, + creditCode, + address, + contacts, + contactsPhone, + legalPerson, + orgTelephone, + status, + updateType, + updateStatus, + updateCount, + updatedTime, + } = record + return ( +
    +
    + +
    + + 机构备案编号:{code} + {name} + +
    + {this.renderStatus(updateType, updateStatus)} +
    +
    +
    + +
    + + +
    + + 备案资料更新日期 + {updatedTime} +
    + + +
    + + 机构地址 + + {address} + +
    + + +
    + + 联系人手机号 + {contactsPhone} +
    + + +
    + + 历史审核记录 + this.onOpen(this.history, id, code)}> + 查看记录({updateCount}条) + +
    + + + + + + {updateStatus === 1 && ( + + )} + + {[-2, 2].includes(updateStatus) && ( + + )} + + + + + ) + } + //#endregion + + render() { + return ( + +
    + + + + + + + + 未通过 + 待审核 + 已过审 + + + + } + renderItem={record => this.renderItem(record)} + /> + + + + + +
    + ) + } +} diff --git a/Web/src/pages/business/inspection/review/update.jsx b/Web/src/pages/business/inspection/review/update.jsx new file mode 100644 index 0000000..2baefc5 --- /dev/null +++ b/Web/src/pages/business/inspection/review/update.jsx @@ -0,0 +1,14 @@ +import React, { Component } from 'react' +import { api } from 'common/api' + +import ListBody from './list' + +const apiAction = { + page: api.inspectionOrgReviewUpdatePage, +} + +export default class update extends Component { + render() { + return + } +} diff --git a/Web/src/pages/business/statistics/summary/index.jsx b/Web/src/pages/business/statistics/summary/index.jsx new file mode 100644 index 0000000..37fba3b --- /dev/null +++ b/Web/src/pages/business/statistics/summary/index.jsx @@ -0,0 +1,88 @@ +import React, { Component } from 'react' +import { Radio, Tabs } from 'antd' +import { ComponentDynamic } from 'components' +import AntIcon from 'components/ant-icon' + +const tabs = [ + { + title: '按房屋等级', + component: () => import('./tab1'), + }, + { + title: '按房屋结构', + component: () => import('./tab2'), + }, +] + +export default class index extends Component { + + state = { + activeKey: '0', + types: ['charts', 'charts'] + } + + render() { + + const { activeKey, types } = this.state + + return ( +
    +
    +
    + { + const t = [...types] + t[activeKey] = e.target.value + this.setState({ + types: t + }) + }} + > + + + + + + + + } + onChange={(activeKey) => this.setState({ activeKey })} + > + { + tabs.map((item, i) => ( + + )) + } + +
    + { + tabs.map((item, i) => ( +
    + +
    + )) + } +
    +
    +
    +
    + ) + } +} diff --git a/Web/src/pages/business/statistics/summary/tab1/charts.jsx b/Web/src/pages/business/statistics/summary/tab1/charts.jsx new file mode 100644 index 0000000..c6be21d --- /dev/null +++ b/Web/src/pages/business/statistics/summary/tab1/charts.jsx @@ -0,0 +1,202 @@ +import React, { Component } from 'react' +import { Card, Col, Row } from 'antd' +import * as echarts from 'echarts' + +const echartsColors = [ + { from: '#14dbff', to: '#007dff' }, + { from: '#45f4a6', to: '#3bb27d' }, + { from: '#fbb456', to: '#f1961b' }, + { from: '#fa7148', to: '#ef5932' }, +] + +function itemColor(index) { + return { + type: 'linear', + x: 0, + y: 0, + x2: 1, + y2: 1, + colorStops: [ + { + offset: 0, + color: echartsColors[index % echartsColors.length].from, + }, + { + offset: 1, + color: echartsColors[index % echartsColors.length].to, + }, + ], + } +} + +function initChart1(dom) { + const chart = echarts.init(dom); + chart.setOption({ + legend: { + top: 'bottom', + }, + tooltip: { + formatter: '{b} : {c}幢 ({d}%)', + }, + toolbox: { + show: true, + feature: { + mark: { show: true }, + restore: { show: true }, + saveAsImage: { show: true }, + }, + }, + series: [ + { + name: '面积模式', + type: 'pie', + radius: [50, 150], + startAngle: 110, + center: ['50%', '50%'], + roseType: 'area', + label: { + formatter: '{d}', + }, + data: [ + { + value: 70, + name: 'A级', + itemStyle: { + color: itemColor(0), + }, + }, + { + value: 38, + name: 'B级', + itemStyle: { + color: itemColor(1), + }, + }, + { + value: 32, + name: 'C级', + itemStyle: { + color: itemColor(2), + }, + }, + { + value: 30, + name: 'D级', + itemStyle: { + color: itemColor(3), + }, + }, + ], + }, + ], + }); +} + +function initChart2(dom) { + const chart = echarts.init(dom); + chart.setOption({ + tooltip: { + formatter: '{b} : {c}幢', + }, + toolbox: { + show: true, + feature: { + mark: { show: true }, + restore: { show: true }, + saveAsImage: { show: true }, + }, + }, + xAxis: { + type: 'category', + data: ['A级', 'B级', 'C级', 'D级'], + }, + yAxis: { + type: 'value', + }, + series: [ + { + barWidth: 20, + itemStyle: { + color: itemColor(0), + borderRadius: 10, + }, + data: [120, 200, 150, 80], + type: 'bar', + }, + ], + }); +} + +function initChart3(dom) { + const chart = echarts.init(dom); + chart.setOption({ + tooltip: { + formatter: '{b} : {c}幢', + }, + toolbox: { + show: true, + feature: { + mark: { show: true }, + restore: { show: true }, + saveAsImage: { show: true }, + }, + }, + xAxis: { + type: 'category', + data: ['A级', 'B级', 'C级', 'D级'], + }, + yAxis: { + type: 'value', + }, + series: [ + { + data: [820, 932, 800, 900], + showSymbol: false, + lineStyle: { + width: 5, + shadowBlur: 5, + shadowOffsetY: 3, + shadowColor: echartsColors[0].from, + opacity: 0.5, + cap: 'round', + }, + itemStyle: { + color: itemColor(0), + }, + type: 'line', + smooth: true, + }, + ], + }); +} + +export default class charts extends Component { + + componentDidMount() { + initChart1(this.refs['chart-1']) + initChart2(this.refs['chart-2']) + initChart3(this.refs['chart-3']) + } + + render() { + return ( + <> + +
    + +
    +
    + + + +
    +
    + + + +
    +
    + + ) + } +} diff --git a/Web/src/pages/business/statistics/summary/tab1/index.jsx b/Web/src/pages/business/statistics/summary/tab1/index.jsx new file mode 100644 index 0000000..b8329fe --- /dev/null +++ b/Web/src/pages/business/statistics/summary/tab1/index.jsx @@ -0,0 +1,68 @@ +import React, { Component } from 'react' +import { Button, Card, Cascader, Divider, Form, Radio } from 'antd' +import { Container } from 'components' + +import StatisticsCharts from './charts' +import StatisticsTable from './table' + +export default class index extends Component { + + state = { + render: 'charts' + } + + static getDerivedStateFromProps(props) { + return { + render: props.type + } + } + + render() { + return ( + + +
    + + + 全部 + 住宅 + 非住宅 + + + + + + 全部 + 待建档 + 暂存 + 待提交 + 退回 + 待审核 + 审核通过 + + + + + + 全部 + 国有土地 + 集体土地 + + + + + + + +
    + + +
    + +
    + {this.state.render == 'charts' && } + {this.state.render == 'table' && } +
    + ) + } +} diff --git a/Web/src/pages/business/statistics/summary/tab1/table.jsx b/Web/src/pages/business/statistics/summary/tab1/table.jsx new file mode 100644 index 0000000..6c5bd7e --- /dev/null +++ b/Web/src/pages/business/statistics/summary/tab1/table.jsx @@ -0,0 +1,209 @@ +import React, { Component } from 'react' +import { Card, Table } from 'antd' +import { isEqual } from 'lodash' + +const columns = [ + { + title: '区域', + dataIndex: 'area', + width: 150, + fixed: true + }, + { + title: '总数', + children: [ + { + title: '幢数(占比)', + dataIndex: 'z', + width: 120, + }, + { + title: '建筑面积(占比)', + dataIndex: 'j', + width: 120, + }, + { + title: '户数', + dataIndex: 'h', + width: 80, + }, + ], + }, + { + title: '房屋等级', + children: [ + { + title: '一级', + children: [ + { + title: '幢数', + dataIndex: 'z1', + width: 80, + }, + { + title: '建筑面积', + dataIndex: 'j1', + width: 80, + }, + { + title: '户数', + dataIndex: 'h1', + width: 80, + }, + ], + }, + { + title: '二级', + children: [ + { + title: '幢数', + dataIndex: 'z2', + width: 80, + }, + { + title: '建筑面积', + dataIndex: 'j2', + width: 80, + }, + { + title: '户数', + dataIndex: 'h2', + width: 80, + }, + ], + }, + { + title: '三级', + children: [ + { + title: '幢数', + dataIndex: 'z3', + width: 80, + }, + { + title: '建筑面积', + dataIndex: 'j3', + width: 80, + }, + { + title: '户数', + dataIndex: 'h3', + width: 80, + }, + ], + }, + { + title: '四级', + children: [ + { + title: '幢数', + dataIndex: 'z4', + width: 80, + }, + { + title: '建筑面积', + dataIndex: 'j4', + width: 80, + }, + { + title: '户数', + dataIndex: 'h4', + width: 80, + }, + ], + }, + { + title: 'C级', + children: [ + { + title: '幢数', + dataIndex: 'zc', + width: 80, + }, + { + title: '建筑面积', + dataIndex: 'jc', + width: 80, + }, + { + title: '户数', + dataIndex: 'hc', + width: 80, + }, + ], + }, + { + title: 'D级', + children: [ + { + title: '幢数', + dataIndex: 'zd', + width: 80, + }, + { + title: '建筑面积', + dataIndex: 'jd', + width: 80, + }, + { + title: '户数', + dataIndex: 'hd', + width: 80, + }, + ], + }, + ], + }, +] + +const data = [] +for (let i = 0; i < 30; i++) { + data.push({ + key: i, + area: 'John Brown', + z: 100, + j: 1222.33, + h: 39, + z1: 20, + j1: 20, + h1: 20, + z2: 20, + j2: 20, + h2: 20, + z3: 20, + j3: 20, + h3: 20, + z4: 20, + j4: 20, + h4: 20, + zc: 20, + jc: 20, + hc: 20, + zd: 20, + jd: 20, + hd: 20, + }) +} + +export default class table extends Component { + + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + render() { + return ( + +
    + + ) + } +} diff --git a/Web/src/pages/business/statistics/summary/tab2/charts.jsx b/Web/src/pages/business/statistics/summary/tab2/charts.jsx new file mode 100644 index 0000000..e69de29 diff --git a/Web/src/pages/business/statistics/summary/tab2/index.jsx b/Web/src/pages/business/statistics/summary/tab2/index.jsx new file mode 100644 index 0000000..70b0147 --- /dev/null +++ b/Web/src/pages/business/statistics/summary/tab2/index.jsx @@ -0,0 +1,11 @@ +import React, { Component } from 'react' + +export default class index extends Component { + render() { + return ( +
    + 1 +
    + ) + } +} diff --git a/Web/src/pages/business/statistics/summary/tab2/table.jsx b/Web/src/pages/business/statistics/summary/tab2/table.jsx new file mode 100644 index 0000000..e69de29 diff --git a/Web/src/pages/home/business/inspection.jsx b/Web/src/pages/home/business/inspection.jsx new file mode 100644 index 0000000..2f6de36 --- /dev/null +++ b/Web/src/pages/home/business/inspection.jsx @@ -0,0 +1,144 @@ +import React, { Component } from 'react' +import { Card, Space, Typography } from 'antd' +import { api } from 'common/api' +import moment from 'moment' + +const { Title, Text, Link } = Typography + +export default class inspection extends Component { + state = { + status: {}, + } + + async componentDidMount() { + const { data: status } = await api.inspectionOrgRegisterStatus() + this.setState({ status }) + } + + render() { + const { status } = this.state + + const { beginDate, endDate, inspectionOrg } = status + + if (inspectionOrg === null) + // 未登记 + return ( + + + + 您的机构资质尚未于市住建管理部门备案 + + + 提交备案资料时间:{moment(beginDate).format('MM月DD日')}至 + {moment(endDate).format('MM月DD日')}, + + window.openContentWindowByMenuName('inspection_org_register') + } + > + 前往登记 + + + + + ) + else if (inspectionOrg) { + if (inspectionOrg.status === 0) { + if (inspectionOrg.updateStatus === 1) { + // 登记审核中 + return ( + + + 备案登记审核中… + + + ) + } else if (inspectionOrg.updateStatus === -1) { + // 登记退回 + return ( + + + + 备案登记未通过 + + 未通过理由:{inspectionOrg.remark} + + + window.openContentWindowByMenuName( + 'inspection_org_register' + ) + } + > + 前往登记 + + + + + ) + } + } else if (inspectionOrg.status === 1) { + if (inspectionOrg.updateStatus === 2 || inspectionOrg.updateStatus === -2) { + // 已登记, 可修改 + return ( + + + 您的机构资质已通过了市住建管理部门审核 + + + 如有信息变更,您可以 + + window.openContentWindowByMenuName( + 'inspection_org_register', + { action: 'edit' } + ) + } + > + 修改备案信息 + + + + ) + } else if (inspectionOrg.updateStatus === 1) { + // 修改审核中 + return ( + + + 修改备案信息审核中… + + + ) + } else if (inspectionOrg.updateStatus === -1) { + // 修改审核退回 + return ( + + + + 修改备案信息未通过 + + 未通过理由:{inspectionOrg.remark} + + 您可以 + + window.openContentWindowByMenuName( + 'inspection_org_register', + { action: 'edit' } + ) + } + > + 继续修改 + + 或放弃修改 + + + + ) + } + } + } + + return <> + } +} diff --git a/Web/src/pages/home/charts.jsx b/Web/src/pages/home/charts.jsx new file mode 100644 index 0000000..8f63b22 --- /dev/null +++ b/Web/src/pages/home/charts.jsx @@ -0,0 +1,115 @@ +import React, { Component } from 'react' +import { Card, Dropdown, Form, Menu } from 'antd' +import { AntIcon } from 'components' +import * as echarts from 'echarts' + +const options = { + tooltip: { + trigger: 'axis', + }, + legend: { + show: false, + }, + grid: { + left: '3%', + right: '4%', + bottom: '3%', + containLabel: true, + }, + xAxis: { + type: 'category', + boundaryGap: false, + data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'], + }, + yAxis: { + type: 'value', + }, + series: [ + { + name: '邮件营销', + type: 'line', + stack: '总量', + data: [120, 132, 101, 134, 90, 230, 210], + }, + { + name: '联盟广告', + type: 'line', + stack: '总量', + data: [220, 182, 191, 234, 290, 330, 310], + }, + { + name: '视频广告', + type: 'line', + stack: '总量', + data: [150, 232, 201, 154, 190, 330, 410], + }, + { + name: '直接访问', + type: 'line', + stack: '总量', + data: [320, 332, 301, 334, 390, 330, 320], + }, + { + name: '搜索引擎', + type: 'line', + stack: '总量', + data: [820, 932, 901, 934, 1290, 1330, 1320], + }, + ] +} + +export default class charts extends Component { + + componentDidMount() { + const chartDom = this.refs.chart + const myChart = echarts.init(chartDom) + myChart.setOption(options) + window.addEventListener('resize', () => { + myChart.resize() + }) + } + + render() { + return ( + +
    + + + 宁波市 + 鄞州区 + + } + > + + 宁波市 + + + + + + + 2021 + 2020 + 2019 + + } + > + + 2021 + + + + + +
    + + ) + } +} diff --git a/Web/src/pages/home/index.jsx b/Web/src/pages/home/index.jsx new file mode 100644 index 0000000..f783ac5 --- /dev/null +++ b/Web/src/pages/home/index.jsx @@ -0,0 +1,109 @@ +import React, { Component } from 'react' +import { Row, Col, Divider } from 'antd' +import { isEqual } from 'lodash' +import store from 'store' +import { Container, Image, AntIcon, Auth } from 'components' +import moment from 'moment' + +import Statistics from './statistics' +import Task from './task' +import List from './list' +import Notice from './notice' +import Charts from './charts' + +import Inspection from './business/inspection' + +const { getState, subscribe } = store + +const storePath = 'user' + +export default class index extends Component { + state = { + [storePath]: getState(storePath), + } + + constructor(props) { + super(props) + + this.unsubscribe = subscribe(storePath, () => { + this.setState(getState(storePath)) + }) + } + + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + componentWillUnmount() { + this.unsubscribe() + } + + render() { + return ( + <> +
    + + +
    +
    +
    + } + type="avatar" + /> +
    +
    +

    + {moment().format('A')}好, + + {this.state.user.nickName || this.state.user.name} + + ,欢迎您登录系统! +

    +
    + 上次IP:{this.state.user.lastLoginIp} + + + 上次登录时间:{this.state.user.lastLoginTime} + +
    +
    +
    + + + + 您有0封未读邮件,请尽快查收! + + + + + + + + + + + + + + + + + + + + + + + + + + ) + } +} diff --git a/Web/src/pages/home/list.jsx b/Web/src/pages/home/list.jsx new file mode 100644 index 0000000..e1884d3 --- /dev/null +++ b/Web/src/pages/home/list.jsx @@ -0,0 +1,103 @@ +import React, { Component } from 'react' +import { Card, Table } from 'antd' + +const tabList = [ + { + key: '1', + tab: '新建项目', + }, + { + key: '2', + tab: '正在签约项目', + }, + { + key: '3', + tab: '完成签约项目', + }, + { + key: '4', + tab: '项目进度', + }, +] + +const columns = [ + { + title: '区域', + dataIndex: 'area', + }, + { + title: '项目名称', + dataIndex: 'title', + }, + { + title: '户数', + dataIndex: 'count', + }, + { + title: '时间', + dataIndex: 'date', + }, +] + +const data = [ + { + key: '1', + area: '海曙区', + title: '曙光电影院地块', + count: 13, + date: '2021-01-01', + }, + { + key: '2', + area: '江北区', + title: '大庆新村地块旧城区改建项目', + count: 322, + date: '2021-01-01', + }, + { + key: '3', + area: '宁海县', + title: '桥头胡街道旧城区改造华驰文教地块', + count: 1, + date: '2021-01-01', + }, + { + key: '4', + area: '慈溪市', + title: '七二三南延道路工程', + count: 1, + date: '2021-01-01', + }, + { + key: '5', + area: '北仑区', + title: '原粮食局宿舍楼1号、2号楼(太河路北延工程)', + count: 32, + date: '2021-01-01', + }, +] + +export default class list extends Component { + + state = { + key: '1' + } + + render() { + return ( + this.setState({ key })} + > +
    + + ) + } +} diff --git a/Web/src/pages/home/notice.jsx b/Web/src/pages/home/notice.jsx new file mode 100644 index 0000000..6cbe72f --- /dev/null +++ b/Web/src/pages/home/notice.jsx @@ -0,0 +1,34 @@ +import React, { Component } from 'react' +import { Card, List } from 'antd' +import { AntIcon } from 'components' +import moment from 'moment' + +const data = [ + { title: '关于2020年度房屋征收评估机构信用考核情况的通报' }, + { title: '关于2020年度房屋征收评估机构信用考核情况的通报' }, + { title: '关于2020年度房屋征收评估机构信用考核情况的通报' }, +] + +export default class notice extends Component { + render() { + return ( + 更多} + > + ( + + } + /> + + ) + } /> + + ) + } +} diff --git a/Web/src/pages/home/statistics.jsx b/Web/src/pages/home/statistics.jsx new file mode 100644 index 0000000..a28f01b --- /dev/null +++ b/Web/src/pages/home/statistics.jsx @@ -0,0 +1,61 @@ +import React, { Component } from 'react' +import { Card, Col, Dropdown, Menu, Row, Statistic } from 'antd' +import { AntIcon } from 'components' + +export default class statistics extends Component { + render() { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + 当月活跃用户 + 当年活跃用户 + + } + > + + 当月活跃用户 + + + + } + prefix={ + + } + > + + + + + + ) + } +} diff --git a/Web/src/pages/home/task.jsx b/Web/src/pages/home/task.jsx new file mode 100644 index 0000000..992f039 --- /dev/null +++ b/Web/src/pages/home/task.jsx @@ -0,0 +1,65 @@ +import React, { Component } from 'react' +import { Avatar, Card, Col, Row, Tooltip } from 'antd' + +const data = [ + { + title: '市区雷公巷地块项目选择评估机构及上传相关材料(软件开发人员)', + avatar: 'https://tb1.bdstatic.com/tb/steam.jpeg', + }, + { + title: '宁海县山河岭6号地块备案(胡靖)', + avatar: + 'https://gss0.bdstatic.com/6LZ1dD3d1sgCo2Kml5_Y_D3/sys/portrait/item/tb.1.ac342cde.2vNGrtpPcIUN6lJpSnty3g?t=1615176031', + }, + { title: '宁海县盛宁线力洋至胡陈段公路工程田交朱村 地块备案(胡靖)' }, + { + title: '慈溪市慈溪市危旧房改造一期(西门小区A1区块)项目备案(陆承)', + avatar: + 'https://gss0.bdstatic.com/6LZ1dD3d1sgCo2Kml5_Y_D3/sys/portrait/item/tb.1.54e2faca.uBtqRshdnVUXL9XFfQMTwg?t=1604074726', + }, + { title: '江北区孔浦成片危旧住宅区改造项目(六号区块)备案(成薇)' }, + { title: '镇海区宁镇路改扩建工程(庄市段)备案(董力)' }, + { title: '鄞州区茶桃公路(同谷路—金峨路延伸段)项目备案(软件开发人员)' }, + { title: '鄞州区咸祥大嵩湖工程备案(软件开发人员)' }, + { title: '江北区三官堂大桥及接线工程项目备案(成薇)' }, +] + +export default class list extends Component { + render() { + return ( + 更多}> + { + data.map((item, i) => { + return ( + + + {item.title} + + } + description={ + + { + item.avatar && + + + + } + + + 软件开发人员 + 2020-01-01 + + + + } + /> + + ) + }) + } + + ) + } +} diff --git a/Web/src/pages/system/account/base.jsx b/Web/src/pages/system/account/base.jsx new file mode 100644 index 0000000..c44719d --- /dev/null +++ b/Web/src/pages/system/account/base.jsx @@ -0,0 +1,193 @@ +import React, { Component } from 'react' +import { Button, Card, Col, Descriptions, Modal, Row, Spin, Tooltip, Upload } from 'antd' +import { AntIcon, Image } from 'components' +import { Cropper } from 'react-cropper' +import 'cropperjs/dist/cropper.css' +import { BlobToFile } from 'util/file' + +import { api } from 'common/api' + +export default class base extends Component { + state = { + img: true, + + cropperVisible: false, + loadingAvatar: false, + } + + cropper = React.createRef() + + avatarFile = null + + async onOpenAvatarCropper() { + this.setState({ cropperVisible: true }) + } + + onCloseAvatarCropper() { + this.setState({ cropperVisible: false }, () => { + setTimeout(() => { + const cropper = this.cropper.current && this.cropper.current.cropper + if (cropper) { + cropper.destroy() + } + this.avatarFile = null + this.setState({ img: true }) + }, 300) + }) + } + + onUploadAvatar() { + this.setState({ loadingAvatar: true }) + const canvas = this.cropper.current.cropper.getCroppedCanvas() + canvas.toBlob(async data => { + try { + const file = BlobToFile(data, this.avatarFile.name, this.avatarFile.type) + const fd = new FormData() + fd.append('file', file) + const { data: avatar } = await api.sysFileInfoUpload(fd) + await api.sysUserUpdateInfo({ avatar }) + this.onCloseAvatarCropper() + this.props.loadData() + } finally { + this.setState({ loadingAvatar: false }) + } + }) + } + + render() { + const { user } = this.props + + const { img, cropperVisible, loadingAvatar } = this.state + + const cropper = this.cropper.current && this.cropper.current.cropper + + return ( + <> + +
    + +
    this.onOpenAvatarCropper()} + className="yo-avatar-info--cover" + > + +
    +
    +
    + + {user.name} + {user.nickName} + {user.account} + + {user.sex === 0 + ? '保密' + : user.sex === 1 + ? '男性' + : user.sex === 2 + ? '女性' + : '保密'} + + + {user.birthday && + (typeof user.birthday === 'string' + ? user.birthday + : user.birthday.format('YYYY-MM-DD'))} + + +
    + this.onCloseAvatarCropper()} + > + }> + + +
    + +
    + + +
    + +
    + { + this.avatarFile = file + const reader = new FileReader() + reader.readAsDataURL(file) + reader.onload = () => { + this.setState({ img: reader.result }) + } + return false + }} + showUploadList={false} + className="mr-xs" + > + + + + + + + + + + + + + + ) + } +} diff --git a/Web/src/pages/system/account/index.jsx b/Web/src/pages/system/account/index.jsx new file mode 100644 index 0000000..4ba41f6 --- /dev/null +++ b/Web/src/pages/system/account/index.jsx @@ -0,0 +1,113 @@ +import React, { Component } from 'react' +import ReactDOM from 'react-dom' +import { Anchor, Card, Col, Row, Spin } from 'antd' +import { AntIcon, Container } from 'components' +import moment from 'moment' +import store from 'store' +import { api } from 'common/api' + +import Base from './base' +import Info from './setting/info' +import Safety from './setting/satety' + +const { getState, dispatch, subscribe } = store + +const navs = [ + { title: '基本信息', component: Info }, + { title: '安全设置', component: Safety }, +] + +export default class index extends Component { + state = { + loading: false, + user: getState('user'), + } + + container = window + + constructor(props) { + super(props) + + this.unsubscribe = subscribe('user', user => { + this.setState({ user }) + }) + } + + componentDidMount() { + this.loadData() + } + + componentWillUnmount() { + this.unsubscribe() + } + + loadData = async () => { + this.setState({ loading: true }) + try { + const { data } = await api.getLoginUser() + if (data.birthday) { + data.birthday = moment(data.birthday) + } + dispatch({ + type: 'SET_USER_ACCOUNT', + user: data, + }) + } finally { + this.setState({ loading: false }) + } + } + + setContainer = container => { + this.container = (ReactDOM.findDOMNode(container) || {}).parentNode + } + + render() { + const { loadData } = this + + const { loading, user } = this.state + + return ( + } ref={this.setContainer}> + + + + this.container} + offsetTop={24} + targetOffset={100} + wrapperStyle={{ backgroundColor: 'transparent' }} + onClick={e => e.preventDefault()} + > + {navs.map((item, i) => ( + + ))} + + + + + +
    + + + + {navs.map((item, i) => ( +
    +
    + + + +
    + ))} + + + + + + + ) + } +} diff --git a/Web/src/pages/system/account/setting/info.jsx b/Web/src/pages/system/account/setting/info.jsx new file mode 100644 index 0000000..8af5300 --- /dev/null +++ b/Web/src/pages/system/account/setting/info.jsx @@ -0,0 +1,87 @@ +import React, { Component } from 'react' +import { Button, DatePicker, Form, Input, message as Message, Radio } from 'antd' +import { AntIcon } from 'components' +import { api } from 'common/api' +import moment from 'moment' + +export default class index extends Component { + state = { + saving: false, + } + + form = React.createRef() + + componentDidMount() { + const { user } = this.props + if (user.birthday) { + user.birthday = moment(user.birthday) + } + this.form.current.setFieldsValue(user) + } + + async onSvaeInfo() { + this.setState({ saving: true }) + try { + await api.sysUserUpdateInfo(this.form.current.getFieldsValue()) + await this.props.loadData() + Message.success('更新个人信息成功') + } finally { + this.setState({ saving: false }) + } + } + onAvatarStart() {} + + render() { + const { user } = this.props + + const { saving } = this.state + + return ( + <> + +
    + + + + + {user.name} + + + + + + + + + 保密 + + + + + + + + + + + + + + +
    + + + + ) + } +} diff --git a/Web/src/pages/system/account/setting/satety/index.jsx b/Web/src/pages/system/account/setting/satety/index.jsx new file mode 100644 index 0000000..d5f276b --- /dev/null +++ b/Web/src/pages/system/account/setting/satety/index.jsx @@ -0,0 +1,126 @@ +import React, { Component } from 'react' +import { List } from 'antd' +import { api } from 'common/api' +import { AntIcon, ModalForm, QueryTableActions } from 'components' +import PasswordForm from './password' + +import Mail from './mail' +import Phone from './phone' + +const apiAction = { + updatePwd: api.sysUserUpdatePwd, +} + +export default class form extends Component { + updatePwdForm = React.createRef() + mailForm = React.createRef() + mhoneForm = React.createRef() + + onOpen(modal) { + modal.current.open() + } + + render() { + const { user, loadData } = this.props + + const index = [] + //密码 + index.push({ + title: '登录密码', + description: + '安全性高的密码可以使帐号更安全。建议您定期更换密码,设置一个包含字母,符号或数字中至少两项且长度超过6位的密码。', + // extra: ( + //
    + // 当前密码强度为: + // { + // [ + // , + // , + // , + // ][user.securityLevel - 1] + // } + //
    + // ), + done: true, + action: () => { + this.onOpen(this.updatePwdForm) + }, + }) + //手机 + index.push({ + title: '手机绑定', + description: ( +
    + 手机号可以直接用于登录、找回密码等。 + {user.phone && ( + <> + 您已绑定了手机{user.phone} + + )} +
    + ), + done: !!user.phone, + action: () => { + this.onOpen(this.mhoneForm) + }, + }) + //邮箱 + index.push({ + title: '邮箱绑定', + description: ( +
    + 安全邮箱可以直接用于登录、找回密码等。 + {user.email && ( + <> + 您已绑定了邮箱{user.email} + + )} +
    + ), + done: !!user.email, + action: () => { + this.onOpen(this.mailForm) + }, + }) + + return ( + <> + ( + + + + 已设置 + + 修改 + + ) : ( + + + + 未设置 + + 设置 + + ), + ]} + > + + + )} + /> + {/* */} + + {/* */} + + + + ) + } +} diff --git a/Web/src/pages/system/account/setting/satety/mail.jsx b/Web/src/pages/system/account/setting/satety/mail.jsx new file mode 100644 index 0000000..4bdb602 --- /dev/null +++ b/Web/src/pages/system/account/setting/satety/mail.jsx @@ -0,0 +1,376 @@ +import React, { Component } from 'react' +import { Form, Input, Modal, Spin, Steps, Button, Row, Col, message as Message, Select } from 'antd' +import { AntIcon } from 'components' +import { api } from 'common/api' +import { COUNT_DWON_KEY } from 'common/storage' +import store from 'store' +import { cloneDeep } from 'lodash' + +const { getState } = store + +const steps = [ + { + title: '验证', + }, + { + title: '绑定', + }, +] + +const reg = /^([a-zA-Z]|[0-9])(\w|)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/ + +const initState = { + visible: false, + loading: false, + + // 可用于验证的类型 + types: [], + // 当前步骤 + currentStep: 0, + + nextDisabled: true, + // 正在发送验证码 + sendingCode: false, + // 冷却时间 + countDown: 0, +} + +export default class form extends Component { + state = cloneDeep(initState) + + form = React.createRef() + + orgCode = '' + + //打开窗口 + open = () => { + this.setState({ visible: true }) + + this.showCountDown() + + const data = getState('user') + const types = [] + data.phone && + types.push({ + title: `使用手机号${data.phone}进行验证`, + value: 1, + }) + data.email && + types.push({ + title: `使用邮箱${data.email}进行验证`, + value: 2, + }) + + this.setState({ types }) + } + + close() { + this.setState(cloneDeep(initState)) + } + + /** + * 将倒计时添加入到本地 + */ + addTime() { + const now = Date.now() + 60 * 1000 + window.localStorage.setItem(COUNT_DWON_KEY, now) + } + /** + * 显示倒计时 + */ + showCountDown() { + const surplusTime = window.localStorage.getItem(COUNT_DWON_KEY) + const nowTime = Date.now() + if (surplusTime >= nowTime) { + this.setState({ + countDown: parseInt((surplusTime - nowTime) / 1000), + }) + setTimeout(() => { + this.showCountDown() + }, 1000) + } else { + this.setState({ countDown: 0 }) + } + } + + //发送验证码 + async onSendCode() { + const form = this.form.current + + const valid = await form.validateFields() + if (!valid) { + return + } + + this.setState({ sendingCode: true }) + + const data = form.getFieldsValue() + try { + await api.sysUserSendCode(data) + const typeName = data.type ? [, '手机', '邮箱'][data.type] : '邮箱' + Message.success(`已发送验证码到${typeName},请注意查收`) + this.addTime() + this.showCountDown() + } finally { + this.setState({ sendingCode: false }) + } + } + + // 下一步 + async onNext() { + this.setState({ loading: true }) + const data = this.form.current.getFieldsValue() + this.orgCode = data.orgCode + + try { + await api.sysUserCheckBindcode(data) + window.localStorage.removeItem(COUNT_DWON_KEY) + this.setState({ + nextDisabled: true, + currentStep: this.state.currentStep + 1, + }) + } finally { + this.setState({ loading: false }) + } + } + + // 上一步 + onPrev() { + window.localStorage.removeItem(COUNT_DWON_KEY) + this.setState({ + currentStep: this.state.currentStep - 1, + }) + } + + //完成 + async onComplete() { + this.setState({ loading: true }) + try { + await api.sysUserCheckBindcode({ + ...this.form.current.getFieldsValue(), + orgCode: this.orgCode, + }) + await this.props.loadData() + window.localStorage.removeItem(COUNT_DWON_KEY) + Message.success('绑定邮箱成功') + this.close() + } finally { + this.setState({ loading: false }) + } + } + + renderForm() { + const { nextDisabled, sendingCode, countDown } = this.state + + return ( +
    +
    { + this.setState({ + nextDisabled: !(allValues.target && allValues.code), + }) + }} + > + + + + + +
    + + + + + + {countDown ? ( + + ) : ( + + )} + + + + +
    + +
    + + ) + } + + renderStepForm() { + const { types, currentStep, sendingCode, countDown } = this.state + + return ( +
    + +
    + + {steps.map(item => ( + + ))} + + + + { + this.setState({ + nextDisabled: !( + allValues.orgCode || + (allValues.target && allValues.code) + ), + }) + }} + > + {currentStep === 0 && ( + <> + + + + + + + + + + + + {countDown ? ( + + ) : ( + + )} + + + + + )} + {currentStep === 1 && ( + <> + + + + + + + + + + + + {countDown ? ( + + ) : ( + + )} + + + + + )} + +
    + {currentStep === 0 && ( + <> + + + )} + {currentStep === 1 && ( + <> + + + + )} +
    + + ) + } + + render() { + const { visible, loading, types } = this.state + + return ( + this.close()} + visible={visible} + className="yo-modal-form" + title="绑定邮箱" + > + }> +
    + {types.length ? this.renderStepForm() : this.renderForm()} +
    +
    +
    + ) + } +} diff --git a/Web/src/pages/system/account/setting/satety/password.jsx b/Web/src/pages/system/account/setting/satety/password.jsx new file mode 100644 index 0000000..8393f03 --- /dev/null +++ b/Web/src/pages/system/account/setting/satety/password.jsx @@ -0,0 +1,145 @@ +import React, { Component } from 'react' +import { Form, Input, message as Message, Modal } from 'antd' +import { api } from 'common/api' +import { RSA_PUBLIC_KEY } from 'util/global' +import { cloneDeep } from 'lodash' +import { Button } from 'antd/lib/radio' +import { encryptByRSA } from 'util/rsa' + +const initData = { + exist: false, + pattern: '', + descriptions: '', + visible: false, +} + +export default class form extends Component { + state = cloneDeep(initData) + // 表单实例 + form = React.createRef() + + // 初始化数据 + record = {} + + open = () => { + this.setState({ visible: true }) + api.getPwdRule({}).then(({ success, data, message }) => { + if (success) { + const { pattern, descriptions } = data + this.setState({ + pattern, + descriptions, + }) + } else { + Message.Error(message) + } + }) + } + + /** + * mount后回调 + */ + componentDidMount() { + this.props.created && this.props.created(this) + } + + updatePwd(values) { + let { password, newPassword } = values.current.getFieldsValue() + password = encryptByRSA(password, RSA_PUBLIC_KEY) + newPassword = encryptByRSA(newPassword, RSA_PUBLIC_KEY) + const confirm = newPassword + api.sysUserUpdatePwd({ password, newPassword, confirm }).then( + ({ success, data, message }) => { + if (success) { + Message.success('密码修改完成') + this.close() + } else { + Message.warn(message) + } + } + ) + } + + close() { + this.setState(cloneDeep(initData)) + } + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData() {} + + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + //#region 从前段转换后端所需格式 + //#endregion + return postData + } + } + + render() { + const { pattern, descriptions, visible } = this.state + return ( + this.close()} + onOk={() => this.updatePwd(this.form)} + visible={visible} + className="yo-modal-form" + title="更新密码" + > +
    +
    + + + + + + + ({ + validator(_, value) { + if (!value || getFieldValue('newPassword') === value) { + return Promise.resolve() + } + return Promise.reject(new Error('确认新密码不匹配')) + }, + }), + ]} + name="confirm" + > + + +
    + +
    + ) + } +} diff --git a/Web/src/pages/system/account/setting/satety/phone.jsx b/Web/src/pages/system/account/setting/satety/phone.jsx new file mode 100644 index 0000000..f0bb4e9 --- /dev/null +++ b/Web/src/pages/system/account/setting/satety/phone.jsx @@ -0,0 +1,376 @@ +import React, { Component } from 'react' +import { Form, Input, Modal, Spin, Steps, Button, Row, Col, message as Message, Select } from 'antd' +import { AntIcon } from 'components' +import { api } from 'common/api' +import { COUNT_DWON_KEY } from 'common/storage' +import store from 'store' +import { cloneDeep } from 'lodash' + +const { getState } = store + +const steps = [ + { + title: '验证', + }, + { + title: '绑定', + }, +] + +const reg = /^((13[0-9])|(14[5,7])|(15[^4,\\D])|(17[0,1,3,6-8])|(18[0-9])|(19[8,9])|(166))[0-9]{8}$/ + +const initState = { + visible: false, + loading: false, + + // 可用于验证的类型 + types: [], + // 当前步骤 + currentStep: 0, + + nextDisabled: true, + // 正在发送验证码 + sendingCode: false, + // 冷却时间 + countDown: 0, +} + +export default class form extends Component { + state = cloneDeep(initState) + + form = React.createRef() + + orgCode = '' + + //打开窗口 + open = () => { + this.setState({ visible: true }) + + this.showCountDown() + + const data = getState('user') + const types = [] + data.phone && + types.push({ + title: `使用手机号${data.phone}进行验证`, + value: 1, + }) + data.email && + types.push({ + title: `使用邮箱${data.email}进行验证`, + value: 2, + }) + + this.setState({ types }) + } + + close() { + this.setState(cloneDeep(initState)) + } + + /** + * 将倒计时添加入到本地 + */ + addTime() { + const now = Date.now() + 60 * 1000 + window.localStorage.setItem(COUNT_DWON_KEY, now) + } + /** + * 显示倒计时 + */ + showCountDown() { + const surplusTime = window.localStorage.getItem(COUNT_DWON_KEY) + const nowTime = Date.now() + if (surplusTime >= nowTime) { + this.setState({ + countDown: parseInt((surplusTime - nowTime) / 1000), + }) + setTimeout(() => { + this.showCountDown() + }, 1000) + } else { + this.setState({ countDown: 0 }) + } + } + + //发送验证码 + async onSendCode() { + const form = this.form.current + + const valid = await form.validateFields() + if (!valid) { + return + } + + this.setState({ sendingCode: true }) + + const data = form.getFieldsValue() + try { + await api.sysUserSendCode(data) + const typeName = data.type ? [, '手机', '邮箱'][data.type] : '手机' + Message.success(`已发送验证码到${typeName},请注意查收`) + this.addTime() + this.showCountDown() + } finally { + this.setState({ sendingCode: false }) + } + } + + // 下一步 + async onNext() { + this.setState({ loading: true }) + const data = this.form.current.getFieldsValue() + this.orgCode = data.orgCode + + try { + await api.sysUserCheckBindcode(data) + window.localStorage.removeItem(COUNT_DWON_KEY) + this.setState({ + nextDisabled: true, + currentStep: this.state.currentStep + 1, + }) + } finally { + this.setState({ loading: false }) + } + } + + // 上一步 + onPrev() { + window.localStorage.removeItem(COUNT_DWON_KEY) + this.setState({ + currentStep: this.state.currentStep - 1, + }) + } + + //完成 + async onComplete() { + this.setState({ loading: true }) + try { + await api.sysUserCheckBindcode({ + ...this.form.current.getFieldsValue(), + orgCode: this.orgCode, + }) + await this.props.loadData() + window.localStorage.removeItem(COUNT_DWON_KEY) + Message.success('绑定手机号成功') + this.close() + } finally { + this.setState({ loading: false }) + } + } + + renderForm() { + const { nextDisabled, sendingCode, countDown } = this.state + + return ( +
    +
    { + this.setState({ + nextDisabled: !(allValues.target && allValues.code), + }) + }} + > + + + + + +
    + + + + + + {countDown ? ( + + ) : ( + + )} + + + + +
    + +
    + + ) + } + + renderStepForm() { + const { types, currentStep, sendingCode, countDown } = this.state + + return ( +
    + +
    + + {steps.map(item => ( + + ))} + + + + { + this.setState({ + nextDisabled: !( + allValues.orgCode || + (allValues.target && allValues.code) + ), + }) + }} + > + {currentStep === 0 && ( + <> + + + + + + + + + + + + {countDown ? ( + + ) : ( + + )} + + + + + )} + {currentStep === 1 && ( + <> + + + + + + + + + + + + {countDown ? ( + + ) : ( + + )} + + + + + )} + +
    + {currentStep === 0 && ( + <> + + + )} + {currentStep === 1 && ( + <> + + + + )} +
    + + ) + } + + render() { + const { visible, loading, types } = this.state + + return ( + this.close()} + visible={visible} + className="yo-modal-form" + title="绑定手机" + > + }> +
    + {types.length ? this.renderStepForm() : this.renderForm()} +
    +
    +
    + ) + } +} diff --git a/Web/src/pages/system/app/form.jsx b/Web/src/pages/system/app/form.jsx new file mode 100644 index 0000000..f2e0fc4 --- /dev/null +++ b/Web/src/pages/system/app/form.jsx @@ -0,0 +1,133 @@ +import React, { Component } from 'react' +import { Form, Input, InputNumber, Spin } from 'antd' +import { AntIcon, ColorSelector, IconSelector } from 'components' +import { api } from 'common/api' + +const initialValues = { + sort: 100, +} + +export default class form extends Component { + state = { + // 加载状态 + loading: true, + } + + // 表单实例 + form = React.createRef() + + iconSelector = React.createRef() + + // 初始化数据 + record = {} + + /** + * mount后回调 + */ + componentDidMount() { + this.props.created && this.props.created(this) + } + + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + //#region 从后端转换成前段所需格式 + if (params.id) { + this.record = (await api.sysAppDetail({ id: params.id })).data + } + //#endregion + this.form.current.setFieldsValue(this.record) + + this.setState({ + loading: false, + }) + } + + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + if (this.record) { + postData.id = this.record.id + } + //#region 从前段转换后端所需格式 + //#endregion + return postData + } + } + + //#region 自定义方法 + //#endregion + + render() { + return ( + + }> +
    + + + + + + + + + this.iconSelector.current.open( + this.form.current.getFieldValue('icon') + ) + } + /> + } + /> + + + + + + + +
    +
    + + this.form.current.setFieldsValue({ + icon, + }) + } + /> + + ) + } +} diff --git a/Web/src/pages/system/app/index.jsx b/Web/src/pages/system/app/index.jsx new file mode 100644 index 0000000..4f1e853 --- /dev/null +++ b/Web/src/pages/system/app/index.jsx @@ -0,0 +1,323 @@ +import React, { Component } from 'react' +import { Button, Card, Form, Input, Popconfirm, message as Message } from 'antd' +import { isEqual } from 'lodash' +import { AntIcon, Auth, Container, ModalForm, QueryTable, QueryTableActions } from 'components' +import { api } from 'common/api' +import getDictData from 'util/dic' +import auth from 'components/authorized/handler' +import { toCamelCase } from 'util/format' +import FormBody from './form' + +// 配置页面所需接口函数 +const apiAction = { + page: api.getAppPage, + add: api.sysAppAdd, + edit: api.sysAppEdit, + delete: api.sysAppDelete, + + setDefault: api.sysAppSetAsDefault, +} + +// 用于弹窗标题 +const name = '应用' + +export default class index extends Component { + state = { + codes: { + commonStatus: [], + }, + } + + // 表格实例 + table = React.createRef() + + // 新增窗口实例 + addForm = React.createRef() + // 编辑窗口实例 + editForm = React.createRef() + + // 表格字段 + columns = [ + { + title: '图标', + dataIndex: 'icon', + width: 32, + render: (text, record) => ( +
    + +
    + ), + }, + { + title: '应用名称', + dataIndex: 'name', + width: 300, + sorter: true, + }, + { + title: '唯一编码', + dataIndex: 'code', + width: 300, + sorter: true, + }, + { + title: '是否默认', + dataIndex: 'active', + width: 200, + sorter: true, + render: (text, record) => ( + <> + {text ? '是' : '否'} + {!record.active && ( + + + + this.onSetDefault(record)} + > + 设为默认 + + + + )} + + ), + }, + { + title: '状态', + dataIndex: 'status', + width: 100, + sorter: true, + render: text => <>{this.bindCodeValue(text, 'common_status')}, + }, + { + title: '排序', + dataIndex: 'sort', + width: 100, + sorter: true, + defaultSortOrder: 'ascend', + }, + ] + + /** + * 构造函数,在渲染前动态添加操作字段等 + * @param {*} props + */ + constructor(props) { + super(props) + + const flag = auth({ sysApp: [['edit'], ['delete']] }) + + if (flag) { + this.columns.push({ + title: '操作', + width: 150, + dataIndex: 'actions', + render: (text, record) => ( + + + this.onOpen(this.editForm, record.id)}>编辑 + + + this.onDelete(record)} + > + 删除 + + + + ), + }) + } + } + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * 加载字典数据,之后开始加载表格数据 + * 如果必须要加载字典数据,可直接对表格设置autoLoad=true + */ + componentDidMount() { + const { onLoading, onLoadData } = this.table.current + onLoading() + getDictData('common_status').then(res => { + this.setState( + { + codes: res, + }, + () => { + onLoadData() + } + ) + }) + } + + /** + * 调用加载数据接口,可在调用前对query进行处理 + * [异步,必要] + * @param {*} params + * @param {*} query + * @returns + */ + loadData = async (params, query) => { + const { data } = await apiAction.page({ + ...params, + ...query, + }) + return data + } + + /** + * 绑定字典数据 + * @param {*} code + * @param {*} name + * @returns + */ + bindCodeValue(code, name) { + name = toCamelCase(name) + const codes = this.state.codes[name] + if (codes) { + const c = codes.find(p => p.code == code) + if (c) { + return c.value + } + } + return null + } + + /** + * 打开新增/编辑弹窗 + * @param {*} modal + * @param {*} id + */ + onOpen(modal, id) { + modal.current.open({ + id, + }) + } + + /** + * 对表格上的操作进行统一处理 + * [异步] + * @param {*} action + * @param {*} successMessage + */ + async onAction(action, successMessage) { + const { onLoading, onLoaded, onReloadData } = this.table.current + onLoading() + try { + if (action) { + await action + } + if (successMessage) { + Message.success(successMessage) + } + onReloadData() + } catch { + onLoaded() + } + } + + /** + * 删除 + * @param {*} record + */ + onDelete(record) { + this.onAction(apiAction.delete(record), '删除成功') + } + + //#region 自定义方法 + async onSetDefault(record) { + this.onAction(apiAction.setDefault(record), '设置成功') + } + //#endregion + + render() { + return ( + +
    + + + + + + + + + + } + operator={ + + + + } + /> + + + + this.table.current.onReloadData()} + > + + + + + + this.table.current.onReloadData()} + > + + + +
    + ) + } +} diff --git a/Web/src/pages/system/area/form.jsx b/Web/src/pages/system/area/form.jsx new file mode 100644 index 0000000..af531b0 --- /dev/null +++ b/Web/src/pages/system/area/form.jsx @@ -0,0 +1,143 @@ +import React, { Component } from 'react' +import { Form, Input, InputNumber, Select, Spin } from 'antd' +import { AntIcon } from 'components' +import { cloneDeep } from 'lodash' +import getDictData from 'util/dic' + +const initialValues = { + sort: 100, +} +export default class form extends Component { + state = { + // 加载状态 + loading: true, + exist: false, + codes: { + areacodeType: [], + }, + } + // 表单实例 + form = React.createRef() + + // 初始化数据 + record = {} + + /** + * mount后回调 + */ + componentDidMount() { + this.props.created && this.props.created(this) + } + + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + this.record = cloneDeep(params.record) + //#region 从后端转换成前段所需格式 + + const codes = await getDictData('areacode_type') + const exist = !!params.record + this.setState({ + codes, + exist, + }) + + this.record = { + ...this.record, + } + //#endregion + + this.form.current.setFieldsValue(this.record) + + this.setState({ + loading: false, + }) + } + + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + if (this.record) { + postData.id = this.record.id + } + //#region 从前段转换后端所需格式 + //#endregion + return postData + } + } + + render() { + return ( +
    + }> +
    + {/* 表单控件 */} + + + + + + + + } + > + + + + + + + + + + + {/* ... */} +
    +
    + + ) + } +} diff --git a/Web/src/pages/system/area/index.jsx b/Web/src/pages/system/area/index.jsx new file mode 100644 index 0000000..adf0f75 --- /dev/null +++ b/Web/src/pages/system/area/index.jsx @@ -0,0 +1,305 @@ +import React, { Component } from 'react' +import { Button, Card, Form, Input, message as Message, Popconfirm } from 'antd' +import { + AntIcon, + Auth, + Container, + ModalForm, + QueryTable, + QueryTableActions, + QueryTreeLayout, +} from 'components' +import { api } from 'common/api' +import auth from 'components/authorized/handler' +import { toCamelCase } from 'util/format' +import { isEqual } from 'lodash' +import getDictData from 'util/dic' +import FormBody from './form' + +const apiAction = { + tree: api.getAreaTree, + page: api.sysAreaPage, + add: api.sysAreaAdd, + edit: api.sysAreaEdit, + delete: api.sysAreaDelete, +} + +const name = '区域' + +export default class index extends Component { + state = { + codes: { + areacodeType: [], + }, + } + + // 表格实例 + table = React.createRef() + + // 新增窗口实例 + addForm = React.createRef() + // 编辑窗口实例 + editForm = React.createRef() + + // 树选中节点 + selectCode = undefined + columns = [ + { + title: '区域类型', + dataIndex: 'levelType', + sorter: true, + width: 100, + render: text => <>{this.bindCodeValue(text, 'areacode_type')}, + }, + { + title: '区域名称', + dataIndex: 'name', + width: 100, + sorter: true, + }, + { + title: '区域编号', + dataIndex: 'code', + width: 100, + sorter: true, + }, + { + title: '行政编号', + dataIndex: 'adCode', + width: 100, + sorter: true, + defaultSortOrder: 'ascend', + }, + { + title: '描述', + dataIndex: 'note', + width: 200, + sorter: false, + }, + { + title: '排序', + dataIndex: 'sort', + width: 80, + sorter: true, + }, + ] + /** + * 构造函数,在渲染前动态添加操作字段等 + * @param {*} props + */ + constructor(props) { + super(props) + + const flag = auth({ sysArea: [['edit'], ['delete']] }) + + if (flag) { + this.columns.push({ + title: '操作', + width: 150, + dataIndex: 'actions', + render: (text, record) => ( + + + this.onOpen(this.editForm, record)}>编辑 + + + this.onDelete(record)} + > + 删除 + + + + ), + }) + } + } + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * 加载字典数据,之后开始加载表格数据 + * 如果必须要加载字典数据,可直接对表格设置autoLoad=true + */ + componentDidMount() { + this.table.current.onLoading() + getDictData('areacode_type').then(res => { + this.setState( + { + codes: res, + }, + () => { + this.table.current.onLoadData() + } + ) + }) + } + /** + * 调用加载数据接口,可在调用前对query进行处理 + * [异步,必要] + * @param {*} params + * @param {*} query + * @returns + */ + loadData = async (params, query) => { + query = { + ...query, + pcode: this.selectCode, + } + //首次加载根据code列升序排序 + if (!params.sortField) { + params.sortField = 'code' + params.sortOrder = 'ascend' + } + const { data } = await apiAction.page({ + ...params, + ...query, + }) + return data + } + + /** + * 调用树结构数据接口 + * [异步,必要] + * @returns + */ + loadTreeData = async () => { + const { data } = await apiAction.tree() + return data + } + + /** + * 树节点选中事件 + * [必要] + * @param {*} id + */ + onSelectTree(code) { + this.selectCode = code + this.table.current.onReloadData() + } + + /** + * 绑定字典数据 + * @param {*} code + * @param {*} name + * @returns + */ + bindCodeValue(code, name) { + name = toCamelCase(name) + const codes = this.state.codes[name] + if (codes) { + const c = codes.find(p => +p.code === code) + if (c) { + return c.value + } + } + return null + } + + /** + * 打开新增/编辑弹窗 + * @param {*} modal + * @param {*} record + */ + onOpen(modal, record) { + modal.current.open({ + pcode: this.pcode, + record, + }) + } + + /** + * 对表格上的操作进行统一处理 + * [异步] + * @param {*} action + * @param {*} successMessage + */ + async onAction(action, successMessage) { + this.table.current.onLoading() + try { + await action + Message.success(successMessage) + this.table.current.onReloadData() + } catch { + this.table.current.onLoaded() + } + } + + /** + * 删除 + * @param {*} record + */ + onDelete(record) { + this.onAction(apiAction.delete(record), '删除成功') + } + + render() { + return ( + this.onSelectTree(key)} + replaceFields={{ value: 'code', title: 'name', children: 'children' }} + > + + + + + + + + + + + } + operator={ + + + + } + > + + + this.table.current.onReloadData()} + > + + + + this.table.current.onReloadData()} + > + + + + ) + } +} diff --git a/Web/src/pages/system/config/form.jsx b/Web/src/pages/system/config/form.jsx new file mode 100644 index 0000000..0321461 --- /dev/null +++ b/Web/src/pages/system/config/form.jsx @@ -0,0 +1,134 @@ +import React, { Component } from 'react' +import { Form, Input, Radio, Select, Spin } from 'antd' +import { AntIcon } from 'components' +import { cloneDeep } from 'lodash' +import getDictData from 'util/dic' + +const initialValues = {} + +export default class form extends Component { + state = { + // 加载状态 + loading: true, + + codes: { + constsType: [], + }, + } + + // 表单实例 + form = React.createRef() + + // 初始化数据 + record = {} + + /** + * mount后回调 + */ + componentDidMount() { + this.props.created && this.props.created(this) + } + + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + this.record = cloneDeep(params.record) + //#region 从后端转换成前段所需格式,也可以在此处调用获取详细数据接口 + const codes = await getDictData('consts_type') + this.setState({ codes }) + //#endregion + this.form.current.setFieldsValue(this.record) + + this.setState({ + loading: false, + }) + } + + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + if (this.record) { + postData.id = this.record.id + } + //#region 从前段转换后端所需格式 + //#endregion + return postData + } + } + + //#region 自定义方法 + //#endregion + + render() { + const { codes } = this.state + + return ( +
    + }> +
    + + + + + + + + + + + + + + + + + + + + + +
    +
    + + ) + } +} diff --git a/Web/src/pages/system/config/index.jsx b/Web/src/pages/system/config/index.jsx new file mode 100644 index 0000000..53a0b7a --- /dev/null +++ b/Web/src/pages/system/config/index.jsx @@ -0,0 +1,277 @@ +import React, { Component } from 'react' +import { Button, Card, Form, Input, message as Message, Popconfirm, Tooltip } from 'antd' +import { AntIcon, Auth, Container, ModalForm, QueryTable, QueryTableActions } from 'components' +import { api } from 'common/api' +import auth from 'components/authorized/handler' +import { isEqual } from 'lodash' +import getDictData from 'util/dic' +import { toCamelCase } from 'util/format' +import FormBody from './form' + +// 配置页面所需接口函数 +const apiAction = { + page: api.sysConfigPage, + add: api.sysConfigAdd, + edit: api.sysConfigEdit, + delete: api.sysConfigDelete, +} + +// 用于弹窗标题 +const name = '应用' + +// 统一配置权限标识 +const authName = 'sysConfig' + +export default class index extends Component { + state = { + codes: { + constsType: [], + }, + } + + // 表格实例 + table = React.createRef() + + // 新增窗口实例 + addForm = React.createRef() + // 编辑窗口实例 + editForm = React.createRef() + + columns = [ + { + title: '参数名称', + dataIndex: 'name', + width: 200, + sorter: true, + }, + { + title: '唯一编码', + dataIndex: 'code', + width: 200, + sorter: true, + ellipsis: { + showTitle: false, + }, + render: text => {text}, + }, + { + title: '参数值', + dataIndex: 'value', + width: 200, + sorter: true, + }, + { + title: '所属分类', + dataIndex: 'groupCode', + width: 140, + sorter: true, + render: text => this.bindCodeValue(text, 'consts_type'), + }, + { + title: '备注', + dataIndex: 'remark', + width: 400, + sorter: true, + ellipsis: { + showTitle: false, + }, + render: text => {text}, + }, + ] + + /** + * 构造函数,在渲染前动态添加操作字段等 + * @param {*} props + */ + constructor(props) { + super(props) + + const flag = auth({ [authName]: [['edit'], ['delete']] }) + + if (flag) { + this.columns.push({ + title: '操作', + width: 150, + dataIndex: 'actions', + render: (text, record) => ( + + + this.onOpen(this.editForm, record)}>编辑 + + + this.onDelete(record)} + > + 删除 + + + + ), + }) + } + } + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * 加载字典数据,之后开始加载表格数据 + * 如果必须要加载字典数据,可直接对表格设置autoLoad=true + */ + componentDidMount() { + const { onLoading, onLoadData } = this.table.current + onLoading() + getDictData('consts_type').then(codes => { + this.setState({ codes }, () => { + onLoadData() + }) + }) + } + + /** + * 调用加载数据接口,可在调用前对query进行处理 + * [异步,必要] + * @param {*} params + * @param {*} query + * @returns + */ + loadData = async (params, query) => { + const { data } = await apiAction.page({ + ...params, + ...query, + }) + return data + } + + /** + * 绑定字典数据 + * @param {*} code + * @param {*} name + * @returns + */ + bindCodeValue(code, name) { + name = toCamelCase(name) + const codes = this.state.codes[name] + if (codes) { + const c = codes.find(p => p.code === code) + if (c) { + return c.value + } + } + return null + } + + /** + * 打开新增/编辑弹窗 + * @param {*} modal + * @param {*} record + */ + onOpen(modal, record) { + modal.current.open({ + record, + }) + } + + /** + * 对表格上的操作进行统一处理 + * [异步] + * @param {*} action + * @param {*} successMessage + */ + async onAction(action, successMessage) { + const { onLoading, onLoaded, onReloadData } = this.table.current + onLoading() + try { + if (action) { + await action + } + if (successMessage) { + Message.success(successMessage) + } + onReloadData() + } catch { + onLoaded() + } + } + + /** + * 删除 + * @param {*} record + */ + onDelete(record) { + this.onAction(apiAction.delete(record), '删除成功') + } + + //#region 自定义方法 + //#endregion + + render() { + return ( + +
    + + + + + + + + + + } + operator={ + + + + } + /> + + + + this.table.current.onReloadData()} + > + + + + + + this.table.current.onReloadData()} + > + + + +
    + ) + } +} diff --git a/Web/src/pages/system/dict/dictdata/form.jsx b/Web/src/pages/system/dict/dictdata/form.jsx new file mode 100644 index 0000000..764cd99 --- /dev/null +++ b/Web/src/pages/system/dict/dictdata/form.jsx @@ -0,0 +1,110 @@ +import React, { Component } from 'react' +import { Form, message as Message, Spin } from 'antd' +import { AntIcon } from 'components' +import { cloneDeep } from 'lodash' +import MonacoEditor from 'react-monaco-editor' +import store from 'store' + +const { getState } = store + +const initialValues = {} + +export default class form extends Component { + state = { + // 加载状态 + loading: true, + ...getState('layout'), + } + + // 表单实例 + form = React.createRef() + + code = React.createRef() + + // 初始化数据 + record = {} + + /** + * mount后回调 + */ + componentDidMount() { + this.props.created && this.props.created(this) + } + + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + this.record = cloneDeep(params.record) + //#region 从后端转换成前段所需格式 + this.code.current.editor.setValue(this.record.extCode || '') + setTimeout(() => { + this.code.current.editor.getAction(['editor.action.formatDocument'])._run() + }, 100) + //#endregion + this.form.current.setFieldsValue(this.record) + + this.setState({ + loading: false, + }) + } + + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + if (this.record) { + postData.id = this.record.id + } + //#region 从前段转换后端所需格式 + try { + const code = JSON.parse(this.code.current.editor.getValue()) + if (code.constructor === Object) { + postData.extCode = JSON.stringify(code) + } else { + throw new Error(0) + } + } catch { + Message.error('错误的JSON格式') + } + //#endregion + return postData + } + } + + //#region 自定义方法 + //#endregion + + render() { + const { theme } = this.state + + return ( +
    + }> +
    + +
    +
    + + ) + } +} diff --git a/Web/src/pages/system/dict/dictdata/index.jsx b/Web/src/pages/system/dict/dictdata/index.jsx new file mode 100644 index 0000000..ddc22b1 --- /dev/null +++ b/Web/src/pages/system/dict/dictdata/index.jsx @@ -0,0 +1,436 @@ +import React, { Component } from 'react' +import { Button, Card, Form, Input, Popconfirm, message as Message, InputNumber } from 'antd' +import { isEqual } from 'lodash' +import { AntIcon, Auth, Container, ModalForm, QueryTable, QueryTableActions } from 'components' +import { api } from 'common/api' +import getDictData from 'util/dic' +import auth from 'components/authorized/handler' +import { toCamelCase } from 'util/format' +import FormBody from './form' + +// 配置页面所需接口函数 +const apiAction = { + page: api.sysDictDataPage, + add: api.sysDictDataAdd, + edit: api.sysDictDataEdit, + delete: api.sysDictDataDelete, + deleteBatch: api.sysDictDataDeleteBatch, +} + +// 用于弹窗标题 +const name = '字典值' + +export default class index extends Component { + state = { + codes: { + commonStatus: [], + }, + + selectedRowKeys: [], + } + + // 表格实例 + table = React.createRef() + + form = React.createRef() + + // JSON编辑窗口实例 + jsonForm = React.createRef() + + // 表格字段 + columns = [ + { + title: '文本', + dataIndex: 'value', + sorter: true, + width: 200, + render: (text, record, index) => ( + + + + ), + }, + { + title: '字典值', + dataIndex: 'code', + sorter: true, + width: 200, + render: (text, record, index) => ( + + + + ), + }, + { + title: '扩展值', + dataIndex: 'extCode', + width: 80, + align: 'center', + render: (text, record, index) => ( + <> + + + + {auth('sysDictData:edit') ? ( + this.onOpen(this.jsonForm, record)} + style={{ + fontWeight: 'bold', + display: 'inline-block', + transform: 'scaleY(.85)', + color: 'transparent', + backgroundImage: 'linear-gradient(135deg, #007bff, #52c41a)', + WebkitBackgroundClip: 'text', + }} + > + JSON + + ) : ( + <>{text} + )} + + ), + }, + { + title: '排序', + dataIndex: 'sort', + sorter: true, + width: 100, + render: (text, record, index) => ( + + + + ), + defaultSortOrder: 'ascend', + }, + { + title: '备注', + dataIndex: 'remark', + sorter: true, + render: (text, record, index) => ( + + + + ), + }, + { + title: '状态', + dataIndex: 'status', + sorter: true, + width: 80, + render: text => this.bindCodeValue(text, 'common_status'), + }, + ] + + /** + * 构造函数,在渲染前动态添加操作字段等 + * @param {*} props + */ + constructor(props) { + super(props) + + const flag = auth({ sysDictData: [['edit'], ['delete']] }) + + if (flag) { + this.columns.push({ + title: '操作', + width: 150, + dataIndex: 'actions', + render: (text, record, index) => ( + + {record.id !== -1 ? ( + + this.onEdit(index)}>保存编辑 + + ) : ( + + this.onAdd(index)}>保存新增 + + )} + + this.onDelete(record)} + > + 删除 + + + + ), + }) + } + } + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * 加载字典数据,之后开始加载表格数据 + * 如果必须要加载字典数据,可直接对表格设置autoLoad=true + */ + componentDidMount() { + this.table.current.onLoading() + getDictData('common_status').then(res => { + this.setState( + { + codes: res, + }, + () => { + this.table.current.onLoadData() + } + ) + }) + } + + /** + * 调用加载数据接口,可在调用前对query进行处理 + * [异步,必要] + * @param {*} params + * @param {*} query + * @returns + */ + loadData = async (params, query) => { + query = { + ...query, + typeId: this.props.type.id, + } + + const { data } = await apiAction.page({ + ...params, + ...query, + }) + + const values = {} + data.items.forEach((item, index) => { + values[index] = item + }) + + this.form.current.setFieldsValue(values) + + return data + } + + /** + * 绑定字典数据 + * @param {*} code + * @param {*} name + * @returns + */ + bindCodeValue(code, name) { + name = toCamelCase(name) + const codes = this.state.codes[name] + if (codes) { + const c = codes.find(p => p.code == code) + if (c) { + return c.value + } + } + return null + } + + /** + * 打开新增/编辑弹窗 + * @param {*} modal + * @param {*} record + */ + onOpen(modal, record) { + modal.current.open({ + record, + }) + } + + /** + * 对表格上的操作进行统一处理 + * [异步] + * @param {*} action + * @param {*} successMessage + */ + async onAction(action, successMessage, reload = true) { + const table = this.table.current + table.onLoading() + try { + await action + Message.success(successMessage) + if (reload) { + table.onReloadData() + } else { + table.onLoaded() + } + } catch { + table.onLoaded() + } + } + + /** + * 删除 + * @param {*} record + */ + onDelete(record) { + this.onAction(apiAction.delete(record), '删除成功') + } + + //#region 自定义方法 + onAddRow() { + const record = { + // 为了正常显示checkbox,默认给id赋予了-1 + id: -1, + value: '', + code: '', + typeId: this.props.type.id, + sort: 100, + status: 0, + remark: null, + } + const index = this.table.current.onAddRow(record) + if (index !== false) { + this.form.current.setFieldsValue({ + [index]: record, + }) + } + } + + async onAdd(index) { + const form = this.form.current + try { + await form.validateFields() + } catch (err) { + const e = err.errorFields.filter(item => item.name.includes(index)) + if (e.length) { + return + } + } + const record = form.getFieldsValue([index])[index] + // 为了正常显示checkbox,默认给id赋予了-1,在这里删除id以表示新增 + record.id = undefined + this.onAction(apiAction.add(record), '新增成功') + } + + async onEdit(index) { + const form = this.form.current + try { + await form.validateFields() + } catch (err) { + const e = err.errorFields.filter(item => item.name.includes(index)) + if (e.length) { + return + } + } + const record = form.getFieldsValue([index])[index] + this.onAction(apiAction.edit(record), '编辑成功', false) + } + + async onDeleteBatch() { + await this.onAction(apiAction.deleteBatch(this.state.selectedRowKeys), '删除成功') + + this.setState({ + selectedRowKeys: [], + }) + } + + onSaveExtCode = ({ id, extCode }) => { + const table = this.table.current, + { dataSource } = table.state, + data = dataSource.find(item => item.id === id), + index = dataSource.indexOf(data) + this.form.current.setFieldsValue({ + [index]: { + extCode, + }, + }) + dataSource[index].extCode = extCode + table.setState({ dataSource }) + } + //#endregion + + render() { + const { selectedRowKeys } = this.state + + return ( + +
    + + this.setState({ selectedRowKeys }), + getCheckboxProps: record => ({ + disabled: record.id === -1, + }), + }} + query={ + + + + + + + + + } + operator={ + + this.onDeleteBatch()} + > + + + + } + footer={() => ( + + + + )} + /> + + + + + +
    + ) + } +} diff --git a/Web/src/pages/system/dict/form.jsx b/Web/src/pages/system/dict/form.jsx new file mode 100644 index 0000000..e80f2ec --- /dev/null +++ b/Web/src/pages/system/dict/form.jsx @@ -0,0 +1,166 @@ +import React, { Component } from 'react' +import { Form, Input, Radio, InputNumber, TreeSelect, Spin } from 'antd' +import { AntIcon } from 'components' +import { cloneDeep } from 'lodash' +import getDictData from 'util/dic' +import { EMPTY_ID } from 'util/global' +import { api } from 'common/api' + +const initialValues = { + type: 1, + sort: 100 +} +export default class form extends Component { + + state = { + // 加载状态 + loading: true, + options: { + dicTreeData: [] + } + } + + // 表单实例 + form = React.createRef() + + // 初始化数据 + record = {} + + /** + * mount后回调 + */ + componentDidMount() { + this.props.created && this.props.created(this) + } + + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + this.record = cloneDeep(params.record) + const treeData = await this.loadDicTreeData() + this.setState({ + options: { + dicTreeData: treeData + } + }) + + this.record = { + pid: params.pid, + ...this.record + } + + if (this.record.code) { + this.record.type = 2; + this.setState({ + type: 2 + }) + } + + this.form.current.setFieldsValue(this.record) + + this.setState({ + loading: false + }) + } + + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + if (this.record) { + postData.id = this.record.id + } + //#region 从前段转换后端所需格式 + //#endregion + return postData + } + } + //#region 自定义方法 + async loadDicTreeData() { + const { data } = await api.sysDictTypeTree() + return [{ + id: EMPTY_ID, + parentId: undefined, + title: '顶级', + value: EMPTY_ID, + pid: undefined, + children: data, + }] + } + + //#endregion + + render() { + return ( +
    { + if (changeValues.hasOwnProperty('type')) { + this.setState({ + type: changeValues.type + }) + } + }} + > + }> +
    + {/* 表单控件 */} + + + + + + + 目录 + + + 字典类型 + + + + + + + {this.state.type == 2 && + <> + + + + + } + + + + + + + {/* ... */} +
    +
    + + ) + } +} diff --git a/Web/src/pages/system/dict/index.jsx b/Web/src/pages/system/dict/index.jsx new file mode 100644 index 0000000..8c46ab5 --- /dev/null +++ b/Web/src/pages/system/dict/index.jsx @@ -0,0 +1,324 @@ +import React, { Component } from 'react' +import { Button, Card, Form, Input, message as Message, Popconfirm, Radio } from 'antd' +import { + AntIcon, + Auth, + Container, + ModalForm, + QueryTable, + QueryTableActions, + QueryTreeLayout, +} from 'components' +import { api } from 'common/api' +import auth from 'components/authorized/handler' +import { toCamelCase } from 'util/format' +import { isEqual } from 'lodash' +import getDictData from 'util/dic' +import FormBody from './form' +import DictData from './dictdata' + +const apiAction = { + tree: api.sysDictTypeTree, + page: api.sysDictTypePage, + add: api.sysDictTypeAdd, + edit: api.sysDictTypeEdit, + delete: api.sysDictTypeDelete, +} + +const name = '字典' + +export default class index extends Component { + state = { + codes: { + commonStatus: [], + }, + } + + // 表格实例 + table = React.createRef() + + // 新增窗口实例 + addForm = React.createRef() + // 编辑窗口实例 + editForm = React.createRef() + + // 树选中节点 + selectId = undefined + + // 表格字段 + columns = [ + { + title: '字典名称', + dataIndex: 'name', + width: 200, + sorter: true, + }, + { + title: '类型', + key: 'type', + dataIndex: 'code', + width: 120, + sorter: true, + render: text => (text ? '字典类型' : '目录'), + }, + { + title: '唯一编码', + dataIndex: 'code', + width: 120, + sorter: true, + }, + { + title: '排序', + dataIndex: 'sort', + width: 80, + sorter: true, + defaultSortOrder: 'ascend', + }, + { + title: '备注', + dataIndex: 'remark', + width: 200, + sorter: true, + }, + { + title: '状态', + dataIndex: 'status', + width: 80, + sorter: true, + render: text => this.bindCodeValue(text, 'common_status'), + }, + ] + + /** + * 构造函数,在渲染前动态添加操作字段等 + * @param {*} props + */ + constructor(props) { + super(props) + + const flag = auth({ sysDict: [['edit'], ['delete']] }) + + if (flag) { + this.columns.push({ + title: '操作', + width: 150, + dataIndex: 'actions', + render: (text, record) => ( + + + this.onOpen(this.editForm, record)}>编辑 + + + this.onDelete(record)} + > + 删除 + + + + ), + }) + } + } + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * 加载字典数据,之后开始加载表格数据 + * 如果必须要加载字典数据,可直接对表格设置autoLoad=true + */ + componentDidMount() { + this.table.current.onLoading() + getDictData('common_status').then(res => { + this.setState( + { + codes: res, + }, + () => { + this.table.current.onLoadData() + } + ) + }) + } + + /** + * 调用加载数据接口,可在调用前对query进行处理 + * [异步,必要] + * @param {*} params + * @param {*} query + * @returns + */ + loadData = async (params, query) => { + query = { + ...query, + pid: this.selectId, + } + + const { data } = await apiAction.page({ + ...params, + ...query, + }) + return data + } + + /** + * 调用树结构数据接口 + * [异步,必要] + * @returns + */ + loadTreeData = async () => { + const { data } = await apiAction.tree() + return data + } + + /** + * 树节点选中事件 + * [必要] + * @param {*} id + */ + onSelectTree(id) { + this.selectId = id + this.table.current.onReloadData() + } + + /** + * 绑定字典数据 + * @param {*} code + * @param {*} name + * @returns + */ + bindCodeValue(code, name) { + name = toCamelCase(name) + const codes = this.state.codes[name] + if (codes) { + const c = codes.find(p => p.code == code) + if (c) { + return c.value + } + } + return null + } + + /** + * 打开新增/编辑弹窗 + * @param {*} modal + * @param {*} record + */ + onOpen(modal, record) { + modal.current.open({ + pid: this.selectId, + record, + }) + } + + /** + * 对表格上的操作进行统一处理 + * [异步] + * @param {*} action + * @param {*} successMessage + */ + async onAction(action, successMessage) { + this.table.current.onLoading() + try { + await action + Message.success(successMessage) + this.table.current.onReloadData() + } catch { + this.table.current.onLoaded() + } + } + + /** + * 删除 + * @param {*} record + */ + onDelete(record) { + this.onAction(apiAction.delete(record), '删除成功') + } + + //#region 自定义方法 + //#endregion + + render() { + return ( + this.onSelectTree(key)} + > + + + + + + + + + + + + 目录 + 字典类型 + + + + } + operator={ + + + + } + expandable={{ + expandedRowRender: record => , + rowExpandable: record => !!record.code, + }} + /> + + + this.table.current.onReloadData()} + > + + + + this.table.current.onReloadData()} + > + + + + ) + } +} diff --git a/Web/src/pages/system/doc/back-end/application/dto.jsx b/Web/src/pages/system/doc/back-end/application/dto.jsx new file mode 100644 index 0000000..c258272 --- /dev/null +++ b/Web/src/pages/system/doc/back-end/application/dto.jsx @@ -0,0 +1,35 @@ +import React, { Component } from 'react' +import { Space, Tag, Typography } from 'antd' +import Highlighter from 'pages/system/doc/highlighter' + +const { Text } = Typography + +export default class dto extends Component { + render() { + return ( + + + 数据传输类型直接将前端的JSON序列化为实体类,可以在接口中很方便地获取到前端带过来的参数。 + + + 放置到 + + Service/区域(可无)/业务模块/Dto + + 文件夹下。 + + + 推荐将输入类型和输出类型区分,既输入Dto + + Input + + 和输出Dto + + Output + + + + + ) + } +} diff --git a/Web/src/pages/system/doc/back-end/application/entity.jsx b/Web/src/pages/system/doc/back-end/application/entity.jsx new file mode 100644 index 0000000..d7cf886 --- /dev/null +++ b/Web/src/pages/system/doc/back-end/application/entity.jsx @@ -0,0 +1,33 @@ +import React, { Component } from 'react' +import { Space, Tag, Typography } from 'antd' +import Highlighter from 'pages/system/doc/highlighter' + +const { Text } = Typography + +export default class entity extends Component { + render() { + return ( + + + 实体关系到数据库表的建立以及映射,放置到 + + Entity + + 文件夹下。 + + + 需要注意的是,必须添加特性 + + Table + + ;必须继承类 + + Core.DEntityBase + + 。 + + + + ) + } +} diff --git a/Web/src/pages/system/doc/back-end/application/index.jsx b/Web/src/pages/system/doc/back-end/application/index.jsx new file mode 100644 index 0000000..96a9837 --- /dev/null +++ b/Web/src/pages/system/doc/back-end/application/index.jsx @@ -0,0 +1,35 @@ +import React, { Component } from 'react' +import { Space, Tag, Typography } from 'antd' + +const { Text } = Typography + +export default class index extends Component { + render() { + return ( + + + 所有业务实现均写在Ewide.Application类库中 + + 其中 +
      +
    • +

      + Entity存放业务相关表实体类。 +

      +
    • +
    • +

      + Enum存放业务相关枚举。 +

      +
    • +
    • +

      + Service存放业务接口及其实现。 +

      +
    • +
    + 在这里创建一个简单的业务实现。 +
    + ) + } +} diff --git a/Web/src/pages/system/doc/back-end/application/interface.jsx b/Web/src/pages/system/doc/back-end/application/interface.jsx new file mode 100644 index 0000000..89c5e24 --- /dev/null +++ b/Web/src/pages/system/doc/back-end/application/interface.jsx @@ -0,0 +1,19 @@ +import React, { Component } from 'react' +import { Space, Tag, Typography } from 'antd' +import Highlighter from 'pages/system/doc/highlighter' + +const { Text } = Typography + +export default class _interface extends Component { + render() { + return ( + + 定义接口,具体作用我也不熟悉,推荐后端来写此说明。 + + + ) + } +} diff --git a/Web/src/pages/system/doc/back-end/application/service.jsx b/Web/src/pages/system/doc/back-end/application/service.jsx new file mode 100644 index 0000000..84be861 --- /dev/null +++ b/Web/src/pages/system/doc/back-end/application/service.jsx @@ -0,0 +1,40 @@ +import React, { Component } from 'react' +import { Space, Tag, Typography } from 'antd' +import Highlighter from 'pages/system/doc/highlighter' + +const { Text } = Typography + +export default class service extends Component { + render() { + return ( + + + 须要继承三个接口,首先是上文定义的业务相关接口 + + Interface + + ,动态Api控制器依赖接口 + + IDynamicApiController + + 以及瞬时服务注册依赖 + + ITransient + + 。 + + + 特性 + + ApiDescriptionSettings + + 用于Swagger显示接口,非必须。 + + + + ) + } +} diff --git a/Web/src/pages/system/doc/back-end/database/index.jsx b/Web/src/pages/system/doc/back-end/database/index.jsx new file mode 100644 index 0000000..5d095ca --- /dev/null +++ b/Web/src/pages/system/doc/back-end/database/index.jsx @@ -0,0 +1,7 @@ +import React, { Component } from 'react' + +export default class index extends Component { + render() { + return
    + } +} diff --git a/Web/src/pages/system/doc/back-end/database/migrations.jsx b/Web/src/pages/system/doc/back-end/database/migrations.jsx new file mode 100644 index 0000000..56e55bc --- /dev/null +++ b/Web/src/pages/system/doc/back-end/database/migrations.jsx @@ -0,0 +1,83 @@ +import React, { Component } from 'react' +import { Breadcrumb, Space, Tag, Typography } from 'antd' +import Highlighter from 'pages/system/doc/highlighter' + +const { Title, Text } = Typography + +export default class migrations extends Component { + render() { + return ( + + 在建立或修改了实体类之后,可以将实体类更新到数据库。 + + 在Visual Studio中选择 + + 工具 + NuGet 包管理器 + 程序包管理控制台 + + 之后在打开的程序包管理控制台中,默认项目选择 + + Ewide.Database.Migrations + + ,并在控制台中输入命令。 + + 生成迁移文件 + + 其中 +
      +
    • +

      + add-migration是固定的命令。 +

      +
    • +
    • +

      + init是自定义的数据库版本号。 +

      +
    • +
    • +

      + -c是固定的参数。 +

      +
    • +
    • +

      + 'DefaultDbContext'是对应的DbContext。 +

      +
    • +
    +

    更新迁移到数据库

    + + 在确保 + + Ewide.Database.Migrations + + 中已经生成迁移文件之后,可以运行更新命令。 + + + 其中 +
      +
    • +

      + update-database是固定的命令。 +

      +
    • +
    • +

      + -context是固定的参数。 +

      +
    • +
    • +

      + 'DefaultDbContext'是对应的DbContext。 +

      +
    • +
    +
    + ) + } +} diff --git a/Web/src/pages/system/doc/back-end/index.jsx b/Web/src/pages/system/doc/back-end/index.jsx new file mode 100644 index 0000000..ea9a23c --- /dev/null +++ b/Web/src/pages/system/doc/back-end/index.jsx @@ -0,0 +1,157 @@ +import React, { Component } from 'react' +import { Anchor, Card, Col, Row, Typography } from 'antd' +import { Container } from 'components' + +import Database from './database' +import DatabaseMigrations from './database/migrations' + +import Application from './application' +import ApplicationEntity from './application/entity' +import ApplicationDto from './application/dto' +import ApplicationInterface from './application/interface' +import ApplicationService from './application/service' + +const { Title, Link } = Typography + +const docs = [ + { + title: '数据库', + component: Database, + children: [ + { + title: '实体(N)', + }, + { + title: '迁移', + component: DatabaseMigrations, + }, + ], + }, + { + title: '业务实现', + component: Application, + children: [ + { + title: '实体', + component: ApplicationEntity, + }, + { + title: '数据传输对象', + component: ApplicationDto, + }, + { + title: '接口', + component: ApplicationInterface, + }, + { + title: '业务实现', + component: ApplicationService, + }, + ], + }, +] + +export default class index extends Component { + container = window + + setContainer = container => { + this.container = (container || { parentNode: window }).parentNode + } + + render() { + return ( +
    + + + +
    + + + + + + + + + + +
    + + + + {docs.map((item, i) => ( + +
    + {item.title} + {item.component && ( + + )} + {item.children && ( + <> +
    +
    + {item.children.map((citem, ci) => ( + +
    + + {citem.title} + + {citem.component && ( + + )} +
    +
    +
    + ))} + + )} +
    +
    +
    + ))} +
    + + + this.container} + offsetTop={24} + onClick={e => e.preventDefault()} + > + {docs.map((item, i) => ( + + {item.children && + item.children.map((citem, ci) => ( + + ))} + + ))} + + + + {this.props.supportInfo} + + + + ) + } +} diff --git a/Web/src/pages/system/doc/front-end/api/index.jsx b/Web/src/pages/system/doc/front-end/api/index.jsx new file mode 100644 index 0000000..98d40ae --- /dev/null +++ b/Web/src/pages/system/doc/front-end/api/index.jsx @@ -0,0 +1,14 @@ +import React, { Component } from 'react' +import { Space, Typography } from 'antd' + +const { Text } = Typography + +export default class index extends Component { + render() { + return ( + + 在本框架中,只需要进行简单的接口配置,就可以实现调用。 + + ) + } +} diff --git a/Web/src/pages/system/doc/front-end/api/setting.jsx b/Web/src/pages/system/doc/front-end/api/setting.jsx new file mode 100644 index 0000000..7b7f179 --- /dev/null +++ b/Web/src/pages/system/doc/front-end/api/setting.jsx @@ -0,0 +1,26 @@ +import React, { Component } from 'react' +import { Space, Tag, Typography } from 'antd' +import Highlighter from 'pages/system/doc/highlighter' + +const { Text } = Typography + +export default class setting extends Component { + render() { + return ( + + + 维护接口地址在 + + /src/common/api/requests + + 中,通过每个子目录的 + + index.js + + 引入 + + + + ) + } +} diff --git a/Web/src/pages/system/doc/front-end/api/usage.jsx b/Web/src/pages/system/doc/front-end/api/usage.jsx new file mode 100644 index 0000000..3f5cb04 --- /dev/null +++ b/Web/src/pages/system/doc/front-end/api/usage.jsx @@ -0,0 +1,17 @@ +import React, { Component } from 'react' +import { Space, Typography } from 'antd' +import Highlighter from 'pages/system/doc/highlighter' + +const { Text } = Typography + +export default class usage extends Component { + render() { + return ( + + 调用时需先引入。 + 接口的函数名对应到上面配置的接口名称即可。 + + + ) + } +} diff --git a/Web/src/pages/system/doc/front-end/auth/index.jsx b/Web/src/pages/system/doc/front-end/auth/index.jsx new file mode 100644 index 0000000..977f6e5 --- /dev/null +++ b/Web/src/pages/system/doc/front-end/auth/index.jsx @@ -0,0 +1,27 @@ +import React, { Component } from 'react' +import { Space, Tag, Typography } from 'antd' +import Highlighter from 'pages/system/doc/highlighter' + +const { Text } = Typography + +export default class index extends Component { + render() { + return ( + + + 在不少业务组件中,时常需要做到权限控制一些按钮的显示隐藏。如果只使用样式来隐藏按钮,是不安全的。 + + 所以在本框架中,推荐将按钮用全局的权限组件包裹来控制是否渲染。 + + + 权限标识会读取全局用户信息中的 + + permissions + + 进行比对。 + + 权限组件内可以是任何元素,只要不符合条件,将不会渲染。 + + ) + } +} diff --git a/Web/src/pages/system/doc/front-end/index.jsx b/Web/src/pages/system/doc/front-end/index.jsx new file mode 100644 index 0000000..27a816c --- /dev/null +++ b/Web/src/pages/system/doc/front-end/index.jsx @@ -0,0 +1,213 @@ +import React, { Component } from 'react' +import { Anchor, Card, Col, Row, Typography } from 'antd' +import { Container } from 'components' + +import Window from './window' +import WindowOpen from './window/open' +import WindowClose from './window/close' +import WindowReload from './window/reload' + +import Api from './api' +import ApiSetting from './api/setting' +import ApiUsage from './api/usage' + +import Auth from './auth' + +import Seed from './seed' + +import Util from './util' +import UtilStyle from './util/style' +import UtilDict from './util/dict' +import UtilGlobal from './util/global' +import UtilFormat from './util/format' +import UtilFile from './util/file' +import UtilQuery from './util/query' + +const { Title, Link } = Typography + +const docs = [ + { + title: '窗口', + component: Window, + children: [ + { title: '打开窗口', component: WindowOpen }, + { title: '关闭窗口', component: WindowClose }, + { title: '重新加载窗口', component: WindowReload }, + ], + }, + { + title: '接口', + component: Api, + children: [ + { title: '配置', component: ApiSetting }, + { title: '调用', component: ApiUsage }, + ], + }, + { + title: '权限渲染', + component: Auth, + }, + { + title: '种子模版', + component: Seed, + }, + { + title: '工具', + component: Util, + children: [ + { title: '通用样式', component: UtilStyle }, + { title: '读取字典', component: UtilDict }, + { title: '全局常量', component: UtilGlobal }, + { title: '字符串格式转化', component: UtilFormat }, + { title: '文件', component: UtilFile }, + { title: '查询相关', component: UtilQuery }, + ], + }, +] + +export default class index extends Component { + container = window + + setContainer = container => { + this.container = (container || { parentNode: window }).parentNode + } + + render() { + return ( +
    + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + {docs.map((item, i) => ( + +
    + {item.title} + {item.component && ( + + )} + {item.children && ( + <> +
    +
    + {item.children.map((citem, ci) => ( + +
    + + {citem.title} + + {citem.component && ( + + )} +
    +
    +
    + ))} + + )} +
    +
    +
    + ))} +
    + + + this.container} + offsetTop={24} + onClick={e => e.preventDefault()} + > + {docs.map((item, i) => ( + + {item.children && + item.children.map((citem, ci) => ( + + ))} + + ))} + + + + {this.props.supportInfo} + + + + ) + } +} diff --git a/Web/src/pages/system/doc/front-end/seed/index.jsx b/Web/src/pages/system/doc/front-end/seed/index.jsx new file mode 100644 index 0000000..376d87b --- /dev/null +++ b/Web/src/pages/system/doc/front-end/seed/index.jsx @@ -0,0 +1,70 @@ +import React, { Component } from 'react' +import { Space, Tag, Typography } from 'antd' + +const { Title, Text } = Typography + +export default class index extends Component { + render() { + return ( + + + 种子模版已经提供了业务组件通用的架构,可以在{' '} + + /seed + + 中获取架构代码。 + + 模版解释 +
      +
    • + /seed/query-table/index.jsx + 通用查询表格模版。 +
    • +
    • + /seed/query-table-form/form.jsx + 简单的编辑弹出框内表单,配合外部使用 + + modal-form + + 。 +
    • +
    • + /seed/form +
        +
      • + /index.jsx + 大型表单主页。可在此调用数据详情接口并分配给各个分片表单,统合分片表单。 +
      • +
      • + /part.jsx + 大型表单分片。主要考虑到一个文件中维护的表单字段过多,所以在此拆分。 +
      • +
      +
    • +
    • + /seed/form-tabe +
        +
      • + /index.jsx + 大型标签页-表单主页。可在此调用数据详情接口并分配给各个标签页及以下分片表单。 +
      • +
      • + /tab +
          +
        • + /index.jsx + 单个标签页内主页,在此统合分片表单并传递数据。 +
        • +
        • + /part.jsx + 大型表单分片。同上。 +
        • +
        +
      • +
      +
    • +
    +
    + ) + } +} diff --git a/Web/src/pages/system/doc/front-end/util/dict.jsx b/Web/src/pages/system/doc/front-end/util/dict.jsx new file mode 100644 index 0000000..be5892d --- /dev/null +++ b/Web/src/pages/system/doc/front-end/util/dict.jsx @@ -0,0 +1,22 @@ +import React, { Component } from 'react' +import { Space, Tag, Typography } from 'antd' +import Highlighter from 'pages/system/doc/highlighter' + +const { Text } = Typography + +export default class dict extends Component { + render() { + return ( + + + /dic + getDictData + + + 通过传入字典编码快速查找并返回字典数据。默认从Redux中读取,如果Redux中不存在,则会调用接口从数据库获取。需要注意的是,获取字典所需的是下划线形式的编码,而返回的字典JSON中键名称必定为驼峰形式。 + + + + ) + } +} diff --git a/Web/src/pages/system/doc/front-end/util/file.jsx b/Web/src/pages/system/doc/front-end/util/file.jsx new file mode 100644 index 0000000..ef74d07 --- /dev/null +++ b/Web/src/pages/system/doc/front-end/util/file.jsx @@ -0,0 +1,90 @@ +import React, { Component } from 'react' +import { Space, Tag, Typography } from 'antd' + +const { Text } = Typography + +export default class file extends Component { + render() { + return ( + + + /file + +
      +
    • +

      + ArrayBufferToBase64 + (arrayBuffer: ArrayBuffer) => String + ArrayBuffer转成Base64。 +

      +
    • +
    • +

      + ArrayBufferToBlob + (arrayBuffer: ArrayBuffer) => Blob + ArrayBuffer转成Blob。 +

      +
    • +
    • +

      + Base64ToBlob + (base64: String) => Blob + Base64转成Blob。 +

      +
    • +
    • +

      + BlobToBase64 + (blob: Blob) => String + Blob转成Base64。 +

      +
    • +
    • +

      + BlobToFile + + (blob: Blob, fileName: String, fileType: String) => File + + Blob转成File对象。 +

      +
    • +
    • +

      + Base64ToFile + (base64: String, fileName: String) => File + Base64转成File对象。 +

      +
    • +
    • +

      + PreviewFileResponse + (id: String) => Response + 根据文件ID从接口获取文件信息。 +

      +
    • +
    • +

      + PreviewFileArrayBuffer + (id: String) => ArrayBuffer + 根据文件ID从接口获取文件ArrayBuffer。 +

      +
    • +
    • +

      + PreviewFileBase64 + (id: String) => String + 根据文件ID从接口获取文件Base64。 +

      +
    • +
    • +

      + PreviewFile + (id: String) => File + 根据文件ID从接口获取文件对象。 +

      +
    • +
    +
    + ) + } +} diff --git a/Web/src/pages/system/doc/front-end/util/format.jsx b/Web/src/pages/system/doc/front-end/util/format.jsx new file mode 100644 index 0000000..9aa3b2c --- /dev/null +++ b/Web/src/pages/system/doc/front-end/util/format.jsx @@ -0,0 +1,39 @@ +import React, { Component } from 'react' +import { Space, Tag, Typography } from 'antd' + +const { Text } = Typography + +export default class format extends Component { + render() { + return ( + + + /format + +
      +
    • +

      + numberToChinese + (number: [Number, String]) => String + 将数字转换为中文数字。 +

      +
    • +
    • +

      + toCamelCase + (str: String) => String + 下划线转驼峰。 +

      +
    • +
    • +

      + toUnderScoreCase + (str: String) => String + 驼峰转下划线。 +

      +
    • +
    +
    + ) + } +} diff --git a/Web/src/pages/system/doc/front-end/util/global.jsx b/Web/src/pages/system/doc/front-end/util/global.jsx new file mode 100644 index 0000000..2dddacb --- /dev/null +++ b/Web/src/pages/system/doc/front-end/util/global.jsx @@ -0,0 +1,54 @@ +import React, { Component } from 'react' +import { Space, Tag, Typography } from 'antd' + +const { Text } = Typography + +export default class global extends Component { + render() { + return ( + + + /global + +
      +
    • +

      + EMPTY_ID + 一个空GUID字符串,一般用于判断树节点的顶层。 +

      +
    • +
    • +

      + PERVIEW_URL + 文件预览地址,只在文件预览接口开放匿名后可以直接通过src引用。 +

      +
    • +
    • +

      + RSA_PUBLIC_KEY + 前后端非对称加密的公钥。 +

      +
    • +
    • +

      + AMAP_WEBAPI_KEY + 高德地图Webapi所使用的key。 +

      +
    • +
    • +

      + CITY + 城市名称,一般用于地图定位城市。 +

      +
    • +
    • +

      + SIDER_BREAK_POINT + 响应式小屏幕响应宽度。 +

      +
    • +
    +
    + ) + } +} diff --git a/Web/src/pages/system/doc/front-end/util/index.jsx b/Web/src/pages/system/doc/front-end/util/index.jsx new file mode 100644 index 0000000..47b336b --- /dev/null +++ b/Web/src/pages/system/doc/front-end/util/index.jsx @@ -0,0 +1,21 @@ +import React, { Component } from 'react' +import { Space, Tag, Typography } from 'antd' +import Highlighter from 'pages/system/doc/highlighter' + +const { Title, Text } = Typography + +export default class index extends Component { + render() { + return ( + + + 在 + + /util + + 中,默认已提供了许多工具函数。也可以自行进行添加。 + + + ) + } +} diff --git a/Web/src/pages/system/doc/front-end/util/query.jsx b/Web/src/pages/system/doc/front-end/util/query.jsx new file mode 100644 index 0000000..7bdf762 --- /dev/null +++ b/Web/src/pages/system/doc/front-end/util/query.jsx @@ -0,0 +1,119 @@ +import React, { Component } from 'react' +import { Space, Tag, Typography } from 'antd' +import Highlighter from 'pages/system/doc/highlighter' + +const { Text } = Typography + +export default class query extends Component { + render() { + return ( + + + /query + +
      +
    • + + + QueryType + 获取查询类型字符串,与后端对应。 + +
        +
      • +

        + GreaterThan:{' '} + > +

        +
      • +
      • +

        + GreaterThanOrEqual:{' '} + >= +

        +
      • +
      • +

        + LessThan:{' '} + < +

        +
      • +
      • +

        + LessThanOrEqual:{' '} + <= +

        +
      • +
      • +

        + LikeLIKE +

        +
      • +
      • +

        + Equal= +

        +
      • +
      • +

        + StartWith:{' '} + STRAT +

        +
      • +
      • +

        + EndWithEND +

        +
      • +
      +
      +
    • +
    • + + + getSearchDateRange + + (range: Array, format: String = 'YYYY-MM-DD', unit: String = + 'days') => Array + + + 获取查询用时间范围数组,在这里会自动将第二个时间增加1天。 + + 如果选择的日期范围为2021-01-01~2021-01-10,最终需要取得 + >=2021-01-01 and <2021-01-11 的结果 + + +
    • +
    • + + + getSearchInfo + + ({'{'}query: Object, queryType: Object{'}'}) => Array + + + 从键值对的query类型转换成数组类型。 + 键:自动作为field值 + 值:得到一个数组作为value的值 + + queryType:一个JSON类型,已query的键为键, + + QueryType + + 为值。 如果是一个 + + QueryType + + 的数组,则自动对应到value中的各个值。 + + 示例: + + +
    • +
    +
    + ) + } +} diff --git a/Web/src/pages/system/doc/front-end/util/style.jsx b/Web/src/pages/system/doc/front-end/util/style.jsx new file mode 100644 index 0000000..c20edd2 --- /dev/null +++ b/Web/src/pages/system/doc/front-end/util/style.jsx @@ -0,0 +1,197 @@ +import React, { Component } from 'react' +import { Space, Tag, Tooltip, Typography } from 'antd' + +const { Text } = Typography + +export default class style extends Component { + render() { + return ( + + 在标签中使用一些已经定义好的class可以快速调整你想要的样式。 +
      +
    • + + + 字体大小 + + /lib/font-size.less + + + + + .h1 + + + .h2 + + + .h3 + + ... + + + + .f-12 + + + .f-13 + + + .f-14 + + ... + + +
    • +
    • + + + 文字颜色 + + /lib/text-color.less + + + + + .text-primary + + + .text-info + + + .text-success + + + .text-error.text-danger + + + .text-warning + + + .text-white + + + .text-black + + + .text-gray + + + .text-normal + + ... + + +
    • +
    • + + + 显示 + + /lib/visibility.less + + + + + .hide + + + .hidden + + + .block + + + .inline-block + + + .inline + + + .flex + + + .inline-flex + + + .ellipsis + + + .ellipsis-2 + + + .ellipsis-3 + + ... + + +
    • +
    • + + + 内外边距 + + /lib/margin.less + + + + + .m-none + + + .m-xxs + + + .m-xs + + + .m-sm + + + .m-md + + + .m-lg + + + .m-xl + + ... + + + + .mt-md + + ... + + + + .mr-md + + ... + + + + .mb-md + + ... + + + + .ml-md + + ... + + + + .p-md + + ... + + +
    • +
    +
    + ) + } +} diff --git a/Web/src/pages/system/doc/front-end/window/close.jsx b/Web/src/pages/system/doc/front-end/window/close.jsx new file mode 100644 index 0000000..ff865d2 --- /dev/null +++ b/Web/src/pages/system/doc/front-end/window/close.jsx @@ -0,0 +1,21 @@ +import React, { Component } from 'react' +import { Space, Tag, Typography } from 'antd' +import Highlighter from 'pages/system/doc/highlighter' + +const { Title, Text } = Typography + +export default class close extends Component { + render() { + return ( + + 可调用全局方法关闭窗口 + + + + String | Number + 非必传参数。指定关闭窗口的键。如果未指定键,则关闭当前选中的窗口。 + + + ) + } +} diff --git a/Web/src/pages/system/doc/front-end/window/index.jsx b/Web/src/pages/system/doc/front-end/window/index.jsx new file mode 100644 index 0000000..ebc80db --- /dev/null +++ b/Web/src/pages/system/doc/front-end/window/index.jsx @@ -0,0 +1,28 @@ +import React, { Component } from 'react' +import { Space, Tag, Typography } from 'antd' + +const { Text } = Typography + +export default class index extends Component { + render() { + return ( + + + 本框架是以 + 页签 + 形式打开业务组件(一般意义上的页面)。当然其中也有使用到路由,但只用于登录与主页的跳转。 + + + 所有业务组件都放置于 + + /src/pages + + 目录下,打开窗口时默认只读取该目录下的组件。 + + + 目前已对打开和关闭窗口的方法进行了全局化处理,可以在任何组件内轻松地使用。 + + + ) + } +} diff --git a/Web/src/pages/system/doc/front-end/window/open.jsx b/Web/src/pages/system/doc/front-end/window/open.jsx new file mode 100644 index 0000000..43b9651 --- /dev/null +++ b/Web/src/pages/system/doc/front-end/window/open.jsx @@ -0,0 +1,80 @@ +import React, { Component } from 'react' +import { Space, Tag, Typography } from 'antd' +import Highlighter from 'pages/system/doc/highlighter' + +const { Title, Text } = Typography + +export default class open extends Component { + render() { + return ( + + 可调用全局方法打开窗口 + + 配置 +
      +
    • +

      + key + String | Number + 非必要,窗口的唯一键。当下一次打开同键的窗口时,只切换到该窗口。如果未指定唯一键,将会自动生成随机键。 +

      +
    • +
    • +

      + icon + String非必要,窗口页签的图标。 +

      +
    • +
    • +

      + title + String + 非必要,窗口页签的标题。如果不指定标题,讲会以“新建窗口”显示。 +

      +
    • +
    • +

      + subTitle + String + 非必要,窗口页签的副标题。 +

      +
    • +
    • +

      + path + String必要,组件路径。 +

      +
    • +
    • +

      + param + Object非必要,传递参数。在业务组件中通过 + + props + + 接收。 +

      +
    • +
    • +

      + openType + Number + 打开类型:1、组件,2、iframe,3、新浏览器窗口。 +

      +
    • +
    • +

      + closable + Boolean非必要,设置是否可关闭窗口。默认为可关闭。 +

      +
    • +
    + 通过菜单名打开窗口 + +
    + ) + } +} diff --git a/Web/src/pages/system/doc/front-end/window/reload.jsx b/Web/src/pages/system/doc/front-end/window/reload.jsx new file mode 100644 index 0000000..add4e72 --- /dev/null +++ b/Web/src/pages/system/doc/front-end/window/reload.jsx @@ -0,0 +1,21 @@ +import React, { Component } from 'react' +import { Space, Tag, Typography } from 'antd' +import Highlighter from 'pages/system/doc/highlighter' + +const { Title, Text } = Typography + +export default class reload extends Component { + render() { + return ( + + 可调用全局方法刷新窗口 + + + + String | Number + 非必传参数。指定刷新窗口的键。如果未指定键,则刷新当前选中的窗口。 + + + ) + } +} diff --git a/Web/src/pages/system/doc/highlighter.jsx b/Web/src/pages/system/doc/highlighter.jsx new file mode 100644 index 0000000..cf86115 --- /dev/null +++ b/Web/src/pages/system/doc/highlighter.jsx @@ -0,0 +1,88 @@ +import React, { Component } from 'react' +import { Button, message as Message, Space } from 'antd' +import MonacoEditor from 'react-monaco-editor' + +const baseCopy = content => { + try { + const $textarea = document.createElement('textarea') + $textarea.style = 'opacity: 0;position: fixed;top: -10000;left: -10000' + document.body.append($textarea) + $textarea.value = content + $textarea.select() + document.execCommand('copy') + $textarea.remove() + Message.success('已复制到剪贴板') + } catch { + Message.error('复制失败') + } +} + +const copy = code => { + baseCopy(code) +} + +const copyTemplate = code => { + code = + '"' + + code + // 转义双引号 => \" + .replace(/"/g, '\\"') + // 转义$ => $$ + .replace(/\$/g, '$$$$') + // 替换行首 => " + .replace(/\n/g, '"') + // 替换行末 = ", + .replace(/\r/g, '",\r') + + '"' + let flag = true + while (flag) { + const p = code.match(/\$\${.*?}/) + if (p && p[0]) { + code = code.replace(p[0], `$\{${p[0].slice(1)}}`) + } else { + flag = false + } + } + baseCopy(code) +} + +export default class highlighter extends Component { + onEditorDidMount(editor) { + editor.setValue(this.props.code) + } + + render() { + const { code, copyTemplate } = this.props + + const line = code.split('\r\n').length + const height = line > 20 ? 400 : line * 20 + + return ( +
    + this.onEditorDidMount(editor)} + /> +
    + + {copyTemplate && ( + + )} + + +
    +
    + ) + } +} diff --git a/Web/src/pages/system/doc/index.jsx b/Web/src/pages/system/doc/index.jsx new file mode 100644 index 0000000..e295d47 --- /dev/null +++ b/Web/src/pages/system/doc/index.jsx @@ -0,0 +1,78 @@ +import React, { Component } from 'react' +import { Tabs } from 'antd' +import BackEnd from './back-end' +import FrontEnd from './front-end' + +const tabs = [ + { + title: '后端', + component: BackEnd, + }, + { + title: '前端', + component: FrontEnd, + }, +] + +export default class index extends Component { + state = { + activeKey: '0', + } + + codes = {} + + constructor(props) { + super(props) + + // 读取doc-code下所有文件内容 + const files = require.context( + '../../../../public/doc-code', + true, + /\.(txt|js|jsx|html|vue|css|less|json|cs)(\?.*)?$/ + ) + const codes = {} + files.keys().forEach(p => { + const filepath = p.slice(2) + const xhr = new XMLHttpRequest() + xhr.open('GET', `./doc-code/${filepath}`, false) + xhr.overrideMimeType('text/plain;charset=utf-8') + xhr.send(null) + codes[filepath] = xhr.responseText + }) + + this.codes = codes + } + + render() { + const { activeKey } = this.state + + return ( +
    +
    +
    + this.setState({ activeKey })} centered> + {tabs.map((item, i) => ( + + ))} + +
    + {tabs.map((item, i) => ( +
    + +
    + ))} +
    +
    +
    +
    + ) + } +} diff --git a/Web/src/pages/system/file/index.jsx b/Web/src/pages/system/file/index.jsx new file mode 100644 index 0000000..f5db6e0 --- /dev/null +++ b/Web/src/pages/system/file/index.jsx @@ -0,0 +1,398 @@ +import React, { Component } from 'react' +import { + Button, + Card, + Form, + Input, + message as Message, + Popconfirm, + Select, + Tag, + Tooltip, + Upload, +} from 'antd' +import { AntIcon, Auth, Container, PhotoPreview, QueryTable, QueryTableActions } from 'components' +import { api } from 'common/api' +import auth from 'components/authorized/handler' +import { isEqual } from 'lodash' +import getDictData from 'util/dic' +import { toCamelCase } from 'util/format' +import { ArrayBufferToBase64, GetFileName, PreviewFileArrayBuffer } from 'util/file' + +/** + * 注释段[\/**\/]为必须要改 + */ + +/** + * 配置页面所需接口函数 + */ +const apiAction = { + page: api.sysFileInfoPage, + delete: api.sysFileInfoDelete, +} + +/** + * 用于弹窗标题 + * [必要] + */ +const name = '/**/' + +/** + * 统一配置权限标识 + * [必要] + */ +const authName = 'sysFileInfo' + +export default class index extends Component { + state = { + codes: { + fileStorageLocation: [], + }, + + uploading: false, + } + + // 表格实例 + table = React.createRef() + + photoPreview = React.createRef() + + columns = [ + { + title: '文件名称', + dataIndex: 'fileOriginName', + width: 300, + ellipsis: { + showTitle: false, + }, + sorter: true, + render: text => {text}, + }, + { + title: '文件后缀', + dataIndex: 'fileSuffix', + width: 120, + sorter: true, + render: text => {text}, + }, + { + title: '文件大小', + dataIndex: 'fileSizeKb', + width: 120, + sorter: true, + render: text => ( + <> + {text} + KB + + ), + }, + { + title: '存储位置', + dataIndex: 'fileLocation', + width: 120, + sorter: true, + render: text => this.bindCodeValue(text, 'file_storage_location'), + }, + { + title: '文件仓库', + dataIndex: 'fileBucket', + width: 200, + ellipsis: { + showTitle: false, + }, + sorter: true, + render: text => {text}, + }, + { + title: '唯一标识id', + dataIndex: 'fileObjectName', + width: 250, + ellipsis: { + showTitle: false, + }, + sorter: true, + render: text => {text}, + }, + { + title: '上传时间', + dataIndex: 'createdTime', + width: 200, + sorter: true, + defaultSortOrder: 'descend', + }, + ] + + /** + * 构造函数,在渲染前动态添加操作字段等 + * @param {*} props + */ + constructor(props) { + super(props) + + const flag = auth({ [authName]: 'delete' }) + + if (flag) { + this.columns.push({ + title: '操作', + width: 150, + dataIndex: 'actions', + render: (text, record) => ( + + this.onFileDownload(record)}>下载 + + this.onDelete(record)} + > + 删除 + + + {['png', 'jpeg', 'jpg', 'gif', 'tif', 'bmp'].includes( + record.fileSuffix + ) && this.onFilePreview(record)}>预览} + + ), + }) + } + } + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * 加载字典数据,之后开始加载表格数据 + * 如果必须要加载字典数据,可直接对表格设置autoLoad=true + */ + componentDidMount() { + const { onLoading, onLoadData } = this.table.current + onLoading() + getDictData('file_storage_location').then(codes => { + this.setState({ codes }, () => { + onLoadData() + }) + }) + } + + /** + * 调用加载数据接口,可在调用前对query进行处理 + * [异步,必要] + * @param {*} params + * @param {*} query + * @returns + */ + loadData = async (params, query) => { + const { data } = await apiAction.page({ + ...params, + ...query, + }) + return data + } + + /** + * 绑定字典数据 + * @param {*} code + * @param {*} name + * @returns + */ + bindCodeValue(code, name) { + name = toCamelCase(name) + const codes = this.state.codes[name] + if (codes) { + const c = codes.find(p => p.code == code) + if (c) { + return c.value + } + } + return null + } + + /** + * 打开新增/编辑弹窗 + * @param {*} modal + * @param {*} record + */ + onOpen(modal, record) { + modal.current.open({ + record, + }) + } + + /** + * 对表格上的操作进行统一处理 + * [异步] + * @param {*} action + * @param {*} successMessage + */ + async onAction(action, successMessage) { + const { onLoading, onLoaded, onReloadData } = this.table.current + onLoading() + try { + if (action) { + await action + } + if (successMessage) { + Message.success(successMessage) + } + onReloadData() + } catch { + onLoaded() + } + } + + /** + * 删除 + * @param {*} record + */ + onDelete(record) { + this.onAction(apiAction.delete(record), '删除成功') + } + + //#region 自定义方法 + async onFileUpload({ file }) { + this.setState({ uploading: true }) + const table = this.table.current + table.onLoading() + const fd = new FormData() + fd.append('file', file) + try { + await api.sysFileInfoUpload(fd) + table.onReloadData() + } catch { + table.onLoaded() + } finally { + this.setState({ uploading: false }) + } + } + + async onFilePreview({ id }) { + const key = Math.random().toString(16).slice(2) + const hide = Message.loading({ + key, + content: '正在获取文件...', + duration: 0, + }) + const file = await PreviewFileArrayBuffer(id) + if (file) { + const base64 = await ArrayBufferToBase64(file) + var img = new Image() + img.onload = () => { + const items = [ + { + src: base64, + w: img.naturalWidth, + h: img.naturalHeight, + }, + ] + this.photoPreview.current.initPhotoSwipe(items) + + hide() + } + img.onerror = () => { + Message.error({ + key, + content: '获取文件失败', + }) + } + img.src = base64 + } else { + Message.error({ + key, + content: '获取文件失败', + }) + } + } + + async onFileDownload({ id }) { + const key = Math.random().toString(16).slice(2) + const hide = Message.loading({ + key, + content: '正在获取文件...', + duration: 0, + }) + try { + const { data, headers } = await api.sysFileInfoDownload({ id }) + const url = window.URL.createObjectURL(data) + const fileName = GetFileName(headers['content-disposition']) + const a = document.createElement('a') + a.href = url + a.download = fileName + a.click() + window.URL.revokeObjectURL(url) + a.remove() + hide() + } catch { + Message.error({ + key, + content: '下载文件失败', + }) + } + } + //#endregion + + render() { + const { codes, uploading } = this.state + + return ( + +
    + + + + + + + + + + + + + } + operator={ + + this.onFileUpload(e)} fileList={[]}> + + + + } + /> + + + +
    + ) + } +} diff --git a/Web/src/pages/system/log/oplog/index.jsx b/Web/src/pages/system/log/oplog/index.jsx new file mode 100644 index 0000000..6c18cd7 --- /dev/null +++ b/Web/src/pages/system/log/oplog/index.jsx @@ -0,0 +1,274 @@ +import React, { Component } from 'react' +import { + Alert, + Button, + Card, + Descriptions, + Form, + Popconfirm, + Input, + message as Message, + Select, + DatePicker, + Tag, +} from 'antd' +import { Auth, Container, QueryTable } from 'components' +import { api } from 'common/api' +import { toCamelCase } from 'util/format' +import { isEqual } from 'lodash' +import getDictData from 'util/dic' +import moment from 'moment' +import ReactJson from 'react-json-view' + +const { RangePicker } = DatePicker + +const apiAction = { + page: api.sysOpLogPage, + delete: api.sysOpLogDelete, +} + +const methodColor = { + POST: 'orange', + GET: 'green', +} + +export default class index extends Component { + state = { + codes: { + opType: [], + }, + } + // 表格实例 + table = React.createRef() + // 表格字段 + columns = [ + { + title: '日志名称', + dataIndex: 'name', + width: 200, + sorter: true, + }, + { + title: '请求地址', + dataIndex: 'url', + width: 300, + sorter: true, + render: (text, record) => ( + <> + + {record.reqMethod} + {' '} + {text} + + ), + }, + { + title: '是否成功', + dataIndex: 'success', + width: 100, + render: text => ( + <> + {text ? ( + + ) : ( + + )} + + ), + sorter: true, + }, + { + title: 'ip', + dataIndex: 'ip', + width: 120, + sorter: true, + }, + { + title: '操作时间', + dataIndex: 'opTime', + width: 140, + sorter: true, + defaultSortOrder: 'descend', + }, + { + title: '操作人', + width: 140, + dataIndex: 'account', + sorter: true, + }, + ] + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * 加载字典数据,之后开始加载表格数据 + * 如果必须要加载字典数据,可直接对表格设置autoLoad=true + */ + componentDidMount() {} + + /** + * 调用加载数据接口,可在调用前对query进行处理 + * [异步,必要] + * @param {*} params + * @param {*} query + * @returns + */ + loadData = async (params, query) => { + if (query.dates && query.dates.length) { + query.searchBeginTime = moment(query.dates[0]).format('YYYY-MM-DD HH:mm:ss') + query.searchEndTime = moment(query.dates[1]).format('YYYY-MM-DD HH:mm:ss') + delete query.dates + } + const { data } = await apiAction.page({ + ...params, + ...query, + }) + return data + } + /** + * 绑定字典数据 + * @param {*} code + * @param {*} name + * @returns + */ + bindCodeValue(code, name) { + name = toCamelCase(name) + const codes = this.state.codes[name] + if (codes) { + const c = codes.find(p => +p.code === code) + if (c) { + return c.value + } + } + return null + } + + /** + * 对表格上的操作进行统一处理 + * [异步] + * @param {*} action + * @param {*} successMessage + */ + async onAction(action, successMessage) { + this.table.current.onLoading() + try { + await action + Message.success(successMessage) + this.table.current.onReloadData() + } catch { + this.table.current.onLoaded() + } + } + + onOpLogClear() { + this.onAction(apiAction.delete(), '清空成功') + } + + render() { + return ( + +
    + +
    后端bug:任何操作的操作类型都是增加
    +
    没有记录请求参数.返回结果等信息
    + + } + /> +
    + + + + + + + + + + + + + } + operator={ + + this.onOpLogClear()} + > + + + + } + expandable={{ + expandedRowRender: record => ( + + + {record.methodName} + + + {record.location} + + + {record.browser} + + + {record.os} + + + {record.className} + + + + + + + + + {record.message} + + + ), + }} + /> + +
    + ) + } +} diff --git a/Web/src/pages/system/log/vislog/index.jsx b/Web/src/pages/system/log/vislog/index.jsx new file mode 100644 index 0000000..3f5cafa --- /dev/null +++ b/Web/src/pages/system/log/vislog/index.jsx @@ -0,0 +1,266 @@ +import React, { Component } from 'react' +import { + Alert, + Button, + Card, + Descriptions, + Form, + Popconfirm, + Input, + message as Message, + Select, + DatePicker, +} from 'antd' +import { Auth, Container, QueryTable } from 'components' +import { api } from 'common/api' +import { toCamelCase } from 'util/format' +import { isEqual } from 'lodash' +import getDictData from 'util/dic' +import moment from 'moment' + +const { RangePicker } = DatePicker + +const apiAction = { + page: api.sysVisLogPage, + delete: api.sysVisLogDelete, +} +export default class index extends Component { + state = { + codes: { + visType: [], + }, + } + // 表格实例 + table = React.createRef() + // 表格字段 + columns = [ + { + title: '日志名称', + dataIndex: 'name', + width: 200, + sorter: true, + }, + { + title: '访问类型', + dataIndex: 'visType', + width: 120, + render: text => <>{this.bindCodeValue(text, 'vis_type')}, + sorter: true, + }, + { + title: '是否成功', + dataIndex: 'success', + width: 120, + render: text => ( + <> + {text ? ( + + ) : ( + + )} + + ), + sorter: true, + }, + { + title: 'ip', + dataIndex: 'ip', + width: 180, + sorter: true, + }, + { + title: '浏览器', + dataIndex: 'browser', + width: 180, + sorter: true, + }, + { + title: '访问时间', + dataIndex: 'visTime', + width: 180, + sorter: true, + defaultSortOrder: 'descend', + }, + { + title: '访问人', + dataIndex: 'account', + width: 180, + sorter: true, + }, + ] + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * 加载字典数据,之后开始加载表格数据 + * 如果必须要加载字典数据,可直接对表格设置autoLoad=true + */ + componentDidMount() { + this.table.current.onLoading() + getDictData('vis_type').then(res => { + this.setState( + { + codes: res, + }, + () => { + this.table.current.onLoadData() + } + ) + }) + } + + /** + * 调用加载数据接口,可在调用前对query进行处理 + * [异步,必要] + * @param {*} params + * @param {*} query + * @returns + */ + loadData = async (params, query) => { + if (query.dates && query.dates.length) { + query.searchBeginTime = moment(query.dates[0]).format('YYYY-MM-DD HH:mm:ss') + query.searchEndTime = moment(query.dates[1]).format('YYYY-MM-DD HH:mm:ss') + delete query.dates + } + const { data } = await apiAction.page({ + ...params, + ...query, + }) + return data + } + /** + * 绑定字典数据 + * @param {*} code + * @param {*} name + * @returns + */ + bindCodeValue(code, name) { + name = toCamelCase(name) + const codes = this.state.codes[name] + if (codes) { + const c = codes.find(p => +p.code === code) + if (c) { + return c.value + } + } + return null + } + + /** + * 对表格上的操作进行统一处理 + * [异步] + * @param {*} action + * @param {*} successMessage + */ + async onAction(action, successMessage) { + this.table.current.onLoading() + try { + await action + Message.success(successMessage) + this.table.current.onReloadData() + } catch { + this.table.current.onLoaded() + } + } + + onVisLogClear() { + this.onAction(apiAction.delete(), '清空成功') + } + + render() { + return ( + +
    + +
    + + + + + + + + + + + + + + + + } + operator={ + + this.onVisLogClear()} + > + + + + } + expandable={{ + expandedRowRender: record => ( + + + {record.message} + + + ), + }} + /> + +
    + ) + } +} diff --git a/Web/src/pages/system/machine/base.jsx b/Web/src/pages/system/machine/base.jsx new file mode 100644 index 0000000..47403fe --- /dev/null +++ b/Web/src/pages/system/machine/base.jsx @@ -0,0 +1,33 @@ +import React, { Component } from 'react' +import { Card, Col, Descriptions } from 'antd' + +export default class base extends Component { + render() { + const { base } = this.props + + const { hostName, systemOs, wanIp, lanIp, osArchitecture, frameworkDescription } = base + + return ( + <> + + + + {hostName} + {systemOs} + {wanIp} + {lanIp} + {osArchitecture} + + {frameworkDescription} + + + + + + ) + } +} diff --git a/Web/src/pages/system/machine/disk-charts.jsx b/Web/src/pages/system/machine/disk-charts.jsx new file mode 100644 index 0000000..0024161 --- /dev/null +++ b/Web/src/pages/system/machine/disk-charts.jsx @@ -0,0 +1,107 @@ +import React, { Component } from 'react' +import { Card, Col, Row } from 'antd' +import * as echarts from 'echarts' + +export default class diskCharts extends Component { + diskInfo = [] + + diskChart1 = [] + diskChart2 = [] + diskChart3 = [] + diskChart4 = [] + + constructor(props) { + super(props) + + const { base } = props + + this.diskInfo = base.diskInfo + } + + componentDidMount() { + this.diskInfo.forEach(({ size, freeSpace }, i) => { + const dom = this.refs[`disk-chart-${i}`] + this[`diskChart${i}`] = echarts.init(dom) + + const usedSpace = size - freeSpace + const sizeGB = (size / 1024 / 1024 / 1024).toFixed(1) + const usedGB = (usedSpace / 1024 / 1024 / 1024).toFixed(1) + const freeGB = (freeSpace / 1024 / 1024 / 1024).toFixed(1) + + const option = { + tooltip: false, + series: [ + { + name: '磁盘使用量', + type: 'pie', + radius: ['70%', '100%'], + label: { + show: true, + fontSize: '14', + position: 'center', + formatter: `共 ${sizeGB} GB`, + }, + emphasis: { + label: { + show: true, + fontSize: '14', + formatter: '{b}{c}GB({d}%)', + }, + }, + labelLine: { + show: false, + }, + data: [ + { + value: usedGB, + name: '已用', + itemStyle: { + color: usedGB / sizeGB >= 0.85 ? '#ff4d4f' : '#007bff', + }, + }, + { + value: freeGB, + name: '可用', + itemStyle: { color: '#e0e0e0' }, + }, + ], + hoverAnimation: false, + animation: false, + }, + ], + } + this[`diskChart${i}`].setOption(option) + }) + + window.addEventListener('resize', this.onResizeCharts) + } + + componentWillUnmount() { + window.removeEventListener('resize', this.onResizeCharts) + } + + onResizeCharts = () => { + this.diskInfo.forEach((item, i) => { + this[`diskChart${i}`].resize() + }) + } + + render() { + const { diskInfo } = this + + return ( + <> + {diskInfo.map((item, i) => ( + + +
    + {item.description}({item.name}) +
    +
    +
    + + ))} + + ) + } +} diff --git a/Web/src/pages/system/machine/index.jsx b/Web/src/pages/system/machine/index.jsx new file mode 100644 index 0000000..55155a3 --- /dev/null +++ b/Web/src/pages/system/machine/index.jsx @@ -0,0 +1,46 @@ +import React, { Component } from 'react' +import { Card, Col, Descriptions, Row, Statistic } from 'antd' +import { api } from 'common/api' +import { Container } from 'components' +import { isEqual } from 'lodash' +import moment from 'moment' + +import Base from './base' +import UseCharts from './use-charts' +import DiskCharts from './disk-charts' + +export default class index extends Component { + state = { + loading: true, + base: {}, + network: {}, + } + + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) || this.props.paneActived !== props.paneActived + } + + async componentDidMount() { + try { + const { data: base } = await api.sysMachineBase() + this.setState({ loading: false, base }) + } catch {} + } + + render() { + const { paneActived } = this.props + + const { loading } = this.state + + return ( + +
    + + {!loading && } + {!loading && } + {!loading && } + +
    + ) + } +} diff --git a/Web/src/pages/system/machine/use-charts.jsx b/Web/src/pages/system/machine/use-charts.jsx new file mode 100644 index 0000000..22f903b --- /dev/null +++ b/Web/src/pages/system/machine/use-charts.jsx @@ -0,0 +1,304 @@ +import React, { Component } from 'react' +import { Card, Col, Descriptions, Row, Statistic } from 'antd' +import * as echarts from 'echarts' +import moment from 'moment' +import { api } from 'common/api' + +export default class useCharts extends Component { + state = { + use: {}, + + nowMoment: moment(), + } + + timer = null + timerMoment = null + + actived = true + + systemStart = moment() + + now = Date.now() + + cpuChart = null + cpuData = [] + + ramChart = null + ramData = [] + + shouldComponentUpdate(props) { + // 当前页签未选中时停止获取状态 + if (this.props.actived !== props.actived) { + this.actived = props.actived + if (props.actived) { + this.start() + } else { + this.stop() + } + } + return true + } + + componentDidMount() { + this.systemStart = moment().add(-this.props.base.runTime) + this.initCpuChart() + this.initRamChart() + + this.start() + + window.addEventListener('resize', this.onResizeCharts) + } + + componentWillUnmount() { + this.stop() + + window.removeEventListener('resize', this.onResizeCharts) + } + + start() { + this.actived = true + this.refreshData() + this.timerMoment = setInterval(() => { + this.setState({ nowMoment: moment() }) + }, 1000) + } + + stop() { + this.actived = false + clearTimeout(this.timer) + clearInterval(this.timerMoment) + } + + async refreshData() { + const { data: use } = await api.sysMachineUse() + + this.now = Date.now() + + this.cpuData.shift() + this.cpuData.push({ + name: this.now, + value: [this.now, use.cpuRate], + }) + this.cpuChart.setOption({ + series: [{ data: this.cpuData }], + }) + + this.ramData.shift() + this.ramData.push({ + name: this.now, + value: [this.now, use.ramRate], + }) + this.ramChart.setOption({ + series: [{ data: this.ramData }], + }) + + this.setState({ use }) + + if (this.actived) + this.timer = setTimeout(() => { + this.refreshData() + }, 3000) + } + + initCpuChart() { + for (let i = 0; i < 60; i++) { + const past = this.now - (60 - i) * 1000 + this.cpuData.push({ + name: past, + value: [past, -1], + }) + } + + const dom = this.refs['cpu-chart'] + this.cpuChart = echarts.init(dom) + const option = { + grid: { + show: true, + top: 0, + left: 0, + right: 0, + bottom: 0, + borderColor: 'rgba(0, 123, 255, 1)', + borderWidth: 2, + zlevel: 2, + }, + tooltip: false, + xAxis: { + type: 'time', + axisTick: { + show: false, + }, + axisLabel: { + show: false, + }, + axisLine: { + show: false, + }, + }, + yAxis: { + type: 'value', + max: 100, + min: 0, + axisLabel: { + show: false, + }, + }, + series: [ + { + type: 'line', + showSymbol: false, + hoverAnimation: false, + animation: false, + data: this.cpuData, + lineStyle: { + width: 1, + color: 'rgba(0, 123, 255, .8)', + }, + areaStyle: { + color: 'rgba(0, 123, 255, .3)', + }, + }, + ], + } + this.cpuChart.setOption(option) + } + + initRamChart() { + for (let i = 0; i < 60; i++) { + const past = this.now - (60 - i) * 1000 + this.ramData.push({ + name: past, + value: [past, -1], + }) + } + + const dom = this.refs['ram-chart'] + this.ramChart = echarts.init(dom) + const option = { + grid: { + show: true, + top: 0, + left: 0, + right: 0, + bottom: 0, + borderColor: 'rgba(83, 29, 171, 1)', + borderWidth: 2, + zlevel: 2, + }, + tooltip: false, + xAxis: { + type: 'time', + axisTick: { + show: false, + }, + axisLabel: { + show: false, + }, + axisLine: { + show: false, + }, + }, + yAxis: { + type: 'value', + max: 100, + min: 0, + axisLabel: { + show: false, + }, + }, + series: [ + { + type: 'line', + showSymbol: false, + hoverAnimation: false, + animation: false, + data: this.ramData, + lineStyle: { + width: 1, + color: 'rgba(83, 29, 171, .8)', + }, + areaStyle: { + color: 'rgba(83, 29, 171, .3)', + }, + }, + ], + } + this.ramChart.setOption(option) + } + + onResizeCharts = () => { + this.cpuChart.resize() + this.ramChart.resize() + } + + render() { + const { base } = this.props + const { use, nowMoment } = this.state + const { cpuName, cpuBaseSpeed, processorCount, totalRam } = base + const { cpuRate, ramRate } = use + + const diffDays = nowMoment.diff(this.systemStart, 'days') + const diff = + diffDays + ':' + moment(nowMoment.diff(this.systemStart)).utc().format('HH:mm:ss') + + return ( + <> + + + +
    CPU
    +
    {cpuName}
    +
    +
    + +
    + + + + + + + {((cpuBaseSpeed || 0) / 1000).toFixed(2)} GHz + + + {processorCount || 0} + + + + + + + + + +
    内存
    +
    {((totalRam || 0) / 1024).toFixed(1)} GB
    +
    +
    + +
    + + + + + + + + ) + } +} diff --git a/Web/src/pages/system/menu/form.jsx b/Web/src/pages/system/menu/form.jsx new file mode 100644 index 0000000..88dfd54 --- /dev/null +++ b/Web/src/pages/system/menu/form.jsx @@ -0,0 +1,416 @@ +import React, { Component } from 'react' +import { Form, Input, InputNumber, Radio, Select, Spin, Switch, TreeSelect } from 'antd' +import { AntIcon, IconSelector } from 'components' +import { cloneDeep } from 'lodash' +import getDictData from 'util/dic' +import { api } from 'common/api' +import { EMPTY_ID } from 'util/global' + +const initialValues = { + type: 1, + openType: 1, + weight: '2', + visible: true, + sort: 100, +} + +export default class form extends Component { + state = { + // 加载状态 + loading: true, + codes: { + menuType: [], + openType: [], + menuWeight: [], + }, + options: { + appList: [], + parentTreeData: [], + }, + + addType: [], + type: initialValues.type, + openType: initialValues.openType, + icon: '', + } + + // 表单实例 + form = React.createRef() + + iconSelector = React.createRef() + + // 初始化数据 + record = {} + + /** + * mount后回调 + */ + componentDidMount() { + this.props.created && this.props.created(this) + } + + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + const form = this.form.current + this.record = cloneDeep(params.record) + //#region 从后端转换成前段所需格式 + const codes = await getDictData('menu_type', 'open_type', 'menu_weight') + const appList = await this.onLoadSysApplist() + let parentTreeData = [] + if (params.isParent) { + parentTreeData = await this.onLoadMenuTree(params.parent.application) + } + + if (params.record) { + parentTreeData = await this.onLoadMenuTree(params.record.application) + } else { + this.setState({ addType: params.addType }) + if (params.addType.length) { + form.setFieldsValue({ + type: params.addType[0], + }) + } + } + const icon = params.record && params.record.icon + this.setState({ + codes, + options: { + appList, + parentTreeData, + }, + icon, + }) + //#endregion + if (params.isParent) { + form.setFieldsValue({ + pid: params.parent.id, + application: params.parent.application, + }) + } else { + form.setFieldsValue(this.record) + } + + this.setState({ loading: false }) + + this.onTypeChange() + } + + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + if (this.record) { + postData.id = this.record.id + } + //#region 从前段转换后端所需格式 + // 目录的pic必须为空 + if (!postData.type) { + postData.pid = EMPTY_ID + } + //#endregion + return postData + } + } + + //#region 自定义方法 + async onLoadSysApplist() { + const { data } = await api.getAppList() + return data + } + + async onLoadMenuTree(application) { + const { data } = await api.getMenuTree({ application }) + return [ + { + id: EMPTY_ID, + parentId: undefined, + title: '顶级', + value: EMPTY_ID, + pid: undefined, + children: data, + }, + ] + } + + onTypeChange() { + this.onTypeChangeGroup() + // const form = this.form.current + // const { type } = form.getFieldsValue() + // if ([0, 2].includes(type)) { + // form.setFieldsValue({ + // openType: 0, + // }) + // } else { + // form.setFieldsValue({ + // openType: 1, + // }) + // } + } + + onOpenTypeChange() { + this.onTypeChangeGroup() + } + + onTypeChangeGroup() { + const form = this.form.current + const { type, openType } = form.getFieldsValue() + // if (type == 1 && openType == 2) { + // form.setFieldsValue({ + // component: 'iframe' + // }) + // } else { + // form.setFieldsValue({ + // component: '' + // }) + // } + + this.setState({ + type, + openType, + }) + } + + async onApplicationChange(value) { + this.setState({ + loading: true, + }) + const parentTreeData = await this.onLoadMenuTree(value) + this.setState({ + loading: false, + options: { + ...this.state.options, + parentTreeData, + }, + }) + this.form.current.setFieldsValue({ + pid: undefined, + }) + } + + onSelectIcon(icon) { + this.form.current.setFieldsValue({ + icon, + }) + this.setState({ icon }) + } + //#endregion + + render() { + const { loading, codes, options, addType, type, openType, icon } = this.state + + return ( +
    + }> +
    +

    基本信息

    +
    + + 目录:一级菜单,默认添加在顶级 +
    + 菜单:二级菜单 +
    + 按钮:菜单中对应到接口的功能 + + } + rules={[{ required: true, message: '请选择菜单类型' }]} + > + this.onTypeChange(e)}> + {codes.menuType.map(item => { + return ( + + {item.value} + + ) + })} + +
    + + + + + + + + + + {type != 0 && ( + + + + )} + + 系统权重:菜单/功能任何角色可用 +
    + 业务权重:菜单/功能为超级管理员不可用,可防止管理员误操作 + + } + rules={[{ required: true, message: '请选择权重' }]} + > + + {codes.menuWeight.map(item => { + return ( + + {item.value} + + ) + })} + +
    +
    +

    扩展信息

    +
    + {type == 1 && ( + + this.onOpenTypeChange(e)}> + {codes.openType.map(item => { + return ( + + {item.value} + + ) + })} + + + )} + {type == 1 && openType == 1 && ( + + + + )} + {type == 1 && openType == 2 && ( + + + + )} + {type == 1 && openType == 3 && ( + + + + )} + {type == 2 && ( + + + + )} + {type == 2 && ( + + + + )} + + + + {type != 2 && ( + + } + addonAfter={ + + this.iconSelector.current.open( + this.form.current.getFieldValue('icon') + ) + } + /> + } + /> + + )} + + + + + + +
    +
    +
    + + this.onSelectIcon(icon)} /> + + ) + } +} diff --git a/Web/src/pages/system/menu/index.jsx b/Web/src/pages/system/menu/index.jsx new file mode 100644 index 0000000..a7566f3 --- /dev/null +++ b/Web/src/pages/system/menu/index.jsx @@ -0,0 +1,415 @@ +import React, { Component } from 'react' +import { Button, Table, Card, Popconfirm, message as Message, Row, Col, Tooltip, Tag } from 'antd' +import { isEqual } from 'lodash' +import { AntIcon, Auth, Container, ModalForm, QueryTable, QueryTableActions } from 'components' +import { api } from 'common/api' +import getDictData from 'util/dic' +import auth from 'components/authorized/handler' +import { toCamelCase } from 'util/format' +import FormBody from './form' + +// 配置页面所需接口函数 +const apiAction = { + page: api.getMenuList, + add: api.sysMenuAdd, + edit: api.sysMenuEdit, + delete: api.sysMenuDelete, +} + +// 用于弹窗标题 +const name = '菜单' + +export default class index extends Component { + state = { + codes: { + menuType: [], + menuWeight: [], + openType: [], + }, + } + + // 表格实例 + table = React.createRef() + + // 新增窗口实例 + addForm = React.createRef() + // 编辑窗口实例 + editForm = React.createRef() + + // 表格字段 + columns = [ + { + title: '菜单名称', + width: 220, + dataIndex: 'name', + }, + { + title: '菜单类型', + width: 100, + dataIndex: 'type', + render: text => this.bindCodeValue(text, 'menu_type'), + }, + { + title: '图标', + width: 100, + dataIndex: 'icon', + render: text => text && , + }, + { + title: '连接', + width: 220, + dataIndex: 'openType', + render: (text, record) => { + switch (text) { + case 1: + return ( + <> + {this.bindCodeValue(text, 'open_type')}{' '} + {record.component} + + ) + case 2: + return ( + <> + {this.bindCodeValue(text, 'open_type')}{' '} + {record.link} + + ) + case 3: + return ( + <> + {this.bindCodeValue(text, 'open_type')}{' '} + {record.redirect} + + ) + default: + return '' + } + }, + }, + { + title: '排序', + width: 100, + dataIndex: 'sort', + }, + ] + + /** + * 构造函数,在渲染前动态添加操作字段等 + * @param {*} props + */ + constructor(props) { + super(props) + + const flag = auth({ sysApp: [['edit'], ['delete']] }) + + if (flag) { + this.columns.push({ + title: '操作', + width: 220, + dataIndex: 'actions', + render: (text, record) => ( + + + this.onOpen({ modal: this.editForm, record })}> + 编辑 + + + + this.onDelete(record)} + > + 删除 + + + {record.type < 2 && ( + + + this.onOpen({ + modal: this.addForm, + record, + isParent: true, + addType: record.type == 0 ? [1] : [2], + }) + } + > + {record.type == 0 ? '新增子菜单' : '新增功能'} + + + )} + + ), + }) + } + } + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * 加载字典数据,之后开始加载表格数据 + * 如果必须要加载字典数据,可直接对表格设置autoLoad=true + */ + componentDidMount() { + this.table.current.onLoading() + getDictData('menu_type', 'menu_weight', 'open_type').then(res => { + this.setState( + { + codes: res, + }, + () => { + this.table.current.onLoadData() + } + ) + }) + } + + /** + * 调用加载数据接口,可在调用前对query进行处理 + * [异步,必要] + * @param {*} params + * @param {*} query + * @returns + */ + loadData = async (params, query) => { + const { data } = await apiAction.page({ + ...params, + ...query, + }) + return data + } + + /** + * 绑定字典数据 + * @param {*} code + * @param {*} name + * @returns + */ + bindCodeValue(code, name) { + name = toCamelCase(name) + const codes = this.state.codes[name] + if (codes) { + const c = codes.find(p => p.code == code) + if (c) { + return c.value + } + } + return null + } + + /** + * 打开新增/编辑弹窗 + * @param {*} modal + * @param {*} record + */ + onOpen({ modal, record, isParent = false, addType = [] }) { + const params = isParent + ? { + parent: record, + isParent, + addType, + } + : { + record, + isParent, + addType, + } + + modal.current.open(params) + } + + /** + * 对表格上的操作进行统一处理 + * [异步] + * @param {*} action + * @param {*} successMessage + */ + async onAction(action, successMessage) { + this.table.current.onLoading() + try { + await action + Message.success(successMessage) + this.table.current.onReloadData() + } catch { + this.table.current.onLoaded() + } + } + + /** + * 删除 + * @param {*} record + */ + onDelete(record) { + this.onAction(apiAction.delete(record), '删除成功') + } + + //#region 自定义方法 + /** + * 绘制新的扩展行 + * @param {*} record + */ + onRowRender(record) { + const grids = [] + let isFunction = false + record.children.map(item => { + if (!(item.children && item.children.length) && item.type == 2) { + isFunction = true + const grid = ( + +

    + {item.visibleParent && ( + + + + )} + {item.name} +

    + {item.permission} +
    + + + + + this.onOpen({ modal: this.editForm, record: item }) + } + > + + + + + + this.onDelete(item)} + > + + + + + + + + +
    +
    + ) + grids.push(grid) + } else if ( + (item.children && item.children.length) || + (!(item.children && item.children.length) && item.type == 1) + ) { + grids.push(item) + } + }) + if (isFunction) { + grids.push( + + this.onOpen({ modal: this.addForm, record, isParent: true, addType: [2] }) + } + > +
    + +
    + 新增功能 +
    + ) + return {grids} + } else { + return ( +
    record.id} + expandable={{ + expandedRowRender: record => this.onRowRender(record), + rowExpandable: record => record.children && record.children.length, + }} + childrenColumnName="none" + bordered={true} + pagination={false} + /> + ) + } + } + //#endregion + + render() { + return ( + +
    + + this.onRowRender(record), + rowExpandable: record => record.children && record.children.length, + }} + operator={ + + + + } + /> + + + this.table.current.onReloadData()} + > + + + + this.table.current.onReloadData()} + > + + +
    + ) + } +} diff --git a/Web/src/pages/system/notice/form.jsx b/Web/src/pages/system/notice/form.jsx new file mode 100644 index 0000000..2f12894 --- /dev/null +++ b/Web/src/pages/system/notice/form.jsx @@ -0,0 +1,251 @@ +import React, { Component } from 'react' +import { Form, Spin, Input, Radio, Select, Upload, Button } from 'antd' +import { api } from 'common/api' +import { AntIcon, BraftEditor } from 'components' +import getDictData from 'util/dic' +import { BlobToBase64, GetFileName, PreviewFile } from 'util/file' +import { cloneDeep } from 'lodash' + +const initialValues = {} + +export default class form extends Component { + state = { + // 加载状态 + loading: true, + options: { + userList: [], + }, + codes: { + noticeType: [], + noticeStatus: [], + }, + funloader: Object, + } + + // 表单实例 + form = React.createRef() + + // 初始化数据 + record = {} + + /** + * mount后回调 + */ + componentDidMount() { + this.props.created && this.props.created(this) + } + + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + this.record = cloneDeep(params.record) + //#region 从后端转换成前段所需格式,也可以在此处调用获取详细数据接口 + if (params.id) { + this.record = (await api.sysNoticeDetail({ id: params.id })).data + } + const { + data: { items: userList }, + } = await this.onLoadUser() + const codes = await getDictData('notice_status', 'notice_type') + + if (this.record) { + const { attachments } = this.record + if (attachments) { + const fileValue = [] + const fileList = attachments.split(',') + for (const fileId of fileList) { + try { + const file = await PreviewFile(fileId) + const base64 = await BlobToBase64(file) + fileValue.push({ + uid: fileId, + response: fileId, + name: file.name, + url: base64, + status: 'done', + }) + } catch { + const { data: file } = await api.sysFileInfoDetail({ id: fileId }) + fileValue.push({ + uid: fileId, + response: '文件已丢失', + name: file.fileOriginName, + status: 'error', + }) + } + } + this.record.attachments = fileValue + } + } + //#endregion + this.form.current.setFieldsValue(this.record) + + this.setState({ + loading: false, + options: { + userList, + }, + codes, + }) + //加载 BraftEditor 富文本插件 + this.state.funloader() + } + + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + if (this.record) { + postData.id = this.record.id + postData.status = 0 + } else { + postData.status = 1 + } + //#region 从前段转换后端所需格式 + postData.attachments = postData.attachments.map(item => + item.uid.startsWith('rc-upload') ? item.response : item.uid + ) + //#endregion + return postData + } + } + + //#region 自定义方法 + /** + * 接受子组件传过来的方法 + * 等页面加载完毕后调用 + */ + getChildrenMsg = funLoad => { + this.setState({ + funloader: funLoad, + }) + } + async onLoadUser() { + const data = await api.getUserPage() + return data + } + async onFileUpload({ file, onProgress, onSuccess, onError }) { + onProgress({ + percent: 0, + }) + const fd = new FormData() + fd.append('file', file) + try { + const { data: fileId } = await api.sysFileInfoUpload(fd) + onSuccess(fileId) + } catch { + onError() + } + } + async onFileDownload(file) { + const { data, headers } = await api.sysFileInfoDownload({ id: file.response }) + const url = window.URL.createObjectURL(data) + const fileName = GetFileName(headers['content-disposition']) + const a = document.createElement('a') + a.href = url + a.download = fileName + a.click() + window.URL.revokeObjectURL(url) + a.remove() + } + //#endregion + + render() { + const { options, codes } = this.state + + return ( + + }> +
    + + + + + + {codes.noticeType.map(item => ( + + {item.value} + + ))} + + + { + const v = value.replace(/<\/?.+?\/?>/g, '') + if (!v) { + throw Error('请输入内容') + } + }, + }, + ]} + > + + + { + if (Array.isArray(e)) { + return e + } + return e && e.fileList + }} + > + this.onFileUpload(e)} + showUploadList={{ + showRemoveIcon: true, + showDownloadIcon: true, + }} + onPreview={() => false} + onDownload={file => this.onFileDownload(file)} + > + + + + + + +
    +
    + + ) + } +} diff --git a/Web/src/pages/system/notice/index.jsx b/Web/src/pages/system/notice/index.jsx new file mode 100644 index 0000000..26cfa4a --- /dev/null +++ b/Web/src/pages/system/notice/index.jsx @@ -0,0 +1,371 @@ +import React, { Component } from 'react' +import { Button, Card, Form, Input, message as Message, Popconfirm, Select } from 'antd' +import { AntIcon, Auth, Container, ModalForm, QueryTable, QueryTableActions } from 'components' +import { api } from 'common/api' +import auth from 'components/authorized/handler' +import { isEqual } from 'lodash' +import getDictData from 'util/dic' +import { toCamelCase } from 'util/format' +import FormBody from './form' + +/** + * 注释段[\/**\/]为必须要改 + */ + +/** + * 配置页面所需接口函数 + */ +const apiAction = { + page: api.sysNoticePage, + add: api.sysNoticeAdd, + edit: api.sysNoticeEdit, + delete: api.sysNoticeDelete, + status: api.sysNoticeChangeStatus, +} + +/** + * 用于弹窗标题 + * [必要] + */ +const name = '通知公告' + +/** + * 统一配置权限标识 + * [必要] + */ +const authName = 'sysNotice' + +export default class index extends Component { + state = { + codes: { + noticeStatus: [], + noticeType: [], + }, + } + + // 表格实例 + table = React.createRef() + + // 新增窗口实例 + addForm = React.createRef() + // 编辑窗口实例 + editForm = React.createRef() + + columns = [ + { + title: '标题', + dataIndex: 'title', + width: 300, + sorter: true, + }, + { + title: '发布人', + dataIndex: 'publicUserName', + width: 120, + sorter: true, + }, + { + title: '发布时间', + dataIndex: 'createdTime', + width: 150, + sorter: true, + }, + { + title: '发布单位', + dataIndex: 'publicOrgName', + width: 150, + sorter: true, + }, + { + title: '类型', + dataIndex: 'type', + width: 120, + sorter: true, + render: text => this.bindCodeValue(text, 'notice_type'), + }, + { + title: '状态', + dataIndex: 'status', + width: 120, + render: text => this.bindCodeValue(text, 'notice_status'), + }, + ] + + /** + * 构造函数,在渲染前动态添加操作字段等 + * @param {*} props + */ + constructor(props) { + super(props) + + const flag = auth({ [authName]: [['edit'], ['changeStatus']] }) + + if (flag) { + this.columns.push({ + title: '操作', + width: 200, + dataIndex: 'actions', + render: (text, record) => ( + + {record.status === 1 ? ( + + this.onGoBack(record.id)} + > + 撤回 + + + ) : ( + [ + + this.onOpen(this.editForm, record.id)}> + 编辑 + + , + + this.onPublish(record.id)} + > + 发布 + + , + + this.onDelete(record.id)} + > + 删除 + + , + ] + )} + + ), + }) + } + } + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * 加载字典数据,之后开始加载表格数据 + * 如果必须要加载字典数据,可直接对表格设置autoLoad=true + */ + componentDidMount() { + const { onLoading, onLoadData } = this.table.current + onLoading() + getDictData('notice_status', 'notice_type').then(codes => { + this.setState({ codes }, () => { + onLoadData() + }) + }) + } + + subUniqueKey(text, index) { + return text.substr(index, 5) + } + /** + * 调用加载数据接口,可在调用前对query进行处理 + * [异步,必要] + * @param {*} params + * @param {*} query + * @returns + */ + loadData = async (params, query) => { + const { data } = await apiAction.page({ + ...params, + ...query, + }) + return data + } + + /** + * 绑定字典数据 + * @param {*} code + * @param {*} name + * @returns + */ + bindCodeValue(code, name) { + name = toCamelCase(name) + const codes = this.state.codes[name] + if (codes) { + const c = codes.find(p => p.code == code) + if (c) { + return c.value + } + } + return null + } + + /** + * 打开新增/编辑弹窗 + * @param {*} modal + * @param {*} id + */ + onOpen(modal, id) { + modal.current.open({ + id, + }) + } + + /** + * 对表格上的操作进行统一处理 + * [异步] + * @param {*} action + * @param {*} successMessage + */ + async onAction(action, successMessage) { + const { onLoading, onLoaded, onReloadData } = this.table.current + onLoading() + try { + if (action) { + await action + } + if (successMessage) { + Message.success(successMessage) + } + onReloadData() + } catch { + onLoaded() + } + } + + /** + * 删除 + * @param {*} id + */ + onDelete(id) { + this.onAction(apiAction.status({ id, status: 3 }), '删除成功') + } + /** + * 发布 + * @param {*} id + */ + onPublish(id) { + this.onAction(apiAction.status({ id, status: 1 }), '发布成功') + } + /** + * 撤回 + * @param {*} id + */ + onGoBack(id) { + this.onAction(apiAction.status({ id, status: 2 }), '撤回成功') + } // + + render() { + const { codes } = this.state + return ( + +
    + + + + + + + + + + } + operator={ + record.id} auth={{ [authName]: 'add' }}> + + + } + /> + + + + ( + + ), + }, + ]} + ref={this.addForm} + onSuccess={() => this.table.current.onReloadData()} + > + + + + + + this.table.current.onReloadData()} + > + + + +
    + ) + } +} diff --git a/Web/src/pages/system/noticeReceived/index.jsx b/Web/src/pages/system/noticeReceived/index.jsx new file mode 100644 index 0000000..3f99595 --- /dev/null +++ b/Web/src/pages/system/noticeReceived/index.jsx @@ -0,0 +1,218 @@ +import React, { Component } from 'react' +import { Card, Form, Input, Select } from 'antd' +import { Auth, Container, NoticeDetail, QueryTable } from 'components' +import { api } from 'common/api' +import auth from 'components/authorized/handler' +import { isEqual } from 'lodash' +import getDictData from 'util/dic' +import { toCamelCase } from 'util/format' +import { getSearchInfo, QueryType } from 'util/query' + +/** + * 统一配置权限标识 + * [必要] + */ +const authName = 'sysNotice' + +export default class index extends Component { + state = { + codes: { + noticeStatus: [], + noticeType: [], + readStatus: [], + }, + } + + // 表格实例 + table = React.createRef() + + detail = React.createRef() + + columns = [ + { + title: '标题', + dataIndex: 'title', + width: 300, + sorter: true, + }, + { + title: '发布人', + dataIndex: 'publicUserName', + width: 150, + sorter: true, + }, + { + title: '发布时间', + dataIndex: 'createdTime', + width: 200, + sorter: true, + }, + { + title: '发布单位', + dataIndex: 'publicOrgName', + width: 200, + sorter: true, + }, + { + title: '类型', + dataIndex: 'type', + width: 120, + render: text => this.bindCodeValue(text, 'notice_type'), + }, + { + title: '已读未读', + dataIndex: 'readStatus', + width: 120, + render: text => this.bindCodeValue(text, 'read_status'), + }, + ] + + /** + * 构造函数,在渲染前动态添加操作字段等 + * @param {*} props + */ + constructor(props) { + super(props) + const flag = auth({ [authName]: 'received' }) + if (flag) { + this.columns.push({ + title: '操作', + width: 150, + dataIndex: 'actions', + render: (text, record) => ( + + this.detail.current.onOpenDetail(record.id)}>查看 + + ), + }) + } + } + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * 加载字典数据,之后开始加载表格数据 + * 如果必须要加载字典数据,可直接对表格设置autoLoad=true + */ + componentDidMount() { + const { onLoading, onLoadData } = this.table.current + onLoading() + getDictData('notice_status', 'notice_type', 'read_status').then(codes => { + this.setState({ codes }, () => { + onLoadData() + }) + }) + } + + /** + * 调用加载数据接口,可在调用前对query进行处理 + * [异步,必要] + * @param {*} params + * @param {*} query + * @returns + */ + loadData = async (params, query) => { + const searchInfo = getSearchInfo({ + query, + queryType: { + type: QueryType.Equal, + title: QueryType.Like, + readStatus: QueryType.Equal, + }, + }) + + const { data } = await api.sysNoticeReceived({ + ...params, + searchInfo, + }) + return data + } + + /** + * 绑定字典数据 + * @param {*} code + * @param {*} name + * @returns + */ + bindCodeValue(code, name) { + name = toCamelCase(name) + const codes = this.state.codes[name] + if (codes) { + const c = codes.find(p => p.code == code) + if (c) { + return c.value + } + } + return null + } + + /** + * 打开新增/编辑弹窗 + * @param {*} modal + * @param {*} id + */ + onOpen(modal, id) { + modal.current.onOpenDetail(id) + } + + render() { + const { codes } = this.state + return ( + +
    + + + + + + + + + + + + + } + /> + + +
    + ) + } +} diff --git a/Web/src/pages/system/org/form.jsx b/Web/src/pages/system/org/form.jsx new file mode 100644 index 0000000..627bdec --- /dev/null +++ b/Web/src/pages/system/org/form.jsx @@ -0,0 +1,227 @@ +import React, { Component } from 'react' +import { Cascader, Form, Input, InputNumber, Select, Spin, TreeSelect } from 'antd' +import { AntIcon } from 'components' +import { cloneDeep } from 'lodash' +import getDictData from 'util/dic' +import { EMPTY_ID } from 'util/global' +import { api } from 'common/api' + +const initialValues = { + sort: 100 +} + +export default class form extends Component { + + state = { + // 加载状态 + loading: true, + + codes: { + orgType: [] + }, + + options: { + orgData: [], + areaData: [] + } + } + + // 表单实例 + form = React.createRef() + + // 初始化数据 + record = {} + + /** + * mount后回调 + */ + componentDidMount() { + this.props.created && this.props.created(this) + } + + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + + this.record = cloneDeep(params.record) + //#region 从后端转换成前段所需格式 + const orgData = await this.loadOrgData() + const areaData = await this.loadAreaData() + + const codes = await getDictData('org_type') + this.setState({ + codes, + options: { + orgData, + areaData + } + }) + + const areaCode = []; + const findCode = (data, level) => { + level = level || 0; + for (let i = 0; i < data.length; i++) { + const item = data[i]; + areaCode[level] = item.code; + + if (item.code === params.record.areaCode) { + areaCode.length = level + 1; + return true; + } + + if (item.children && item.children.length) { + const found = findCode(item.children, level + 1); + if (found) { + return true; + } + } + } + }; + + if (params.record && params.record.areaCode) { + findCode(areaData); + } + + this.record = { + pid: params.orgId, + ...this.record, + areaCode + } + this.record.areaCode = areaCode + //#endregion + + this.form.current.setFieldsValue(this.record) + + this.setState({ + loading: false + }) + } + + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + if (this.record) { + postData.id = this.record.id + } + //#region 从前段转换后端所需格式 + postData.areaCode = postData.areaCode[postData.areaCode.length - 1] + //#endregion + return postData + } + } + + //#region 自定义方法 + async loadOrgData() { + const { data } = await api.getOrgTree() + return [{ + id: EMPTY_ID, + parentId: undefined, + title: '顶级', + value: EMPTY_ID, + pid: undefined, + children: data, + }] + } + + async loadAreaData() { + const { data } = await api.getAreaTree() + const clearChiildren = (data) => { + data.forEach((item) => { + if (item.children && item.children.length) { + clearChiildren(item.children); + } else { + delete item.children; + } + }); + }; + clearChiildren(data); + return data + } + + onAreaCodeChange(selectedOptions) { + const data = selectedOptions[selectedOptions.length - 1] + this.form.current.setFieldsValue({ + name: data.name, + code: data.code + }) + } + //#endregion + + render() { + return ( + + }> +
    + + this.onAreaCodeChange(selectedOptions)} + /> + + + + + + + + + + + + + + + + + + + +
    +
    + + ) + } +} diff --git a/Web/src/pages/system/org/index.jsx b/Web/src/pages/system/org/index.jsx new file mode 100644 index 0000000..76ac8f1 --- /dev/null +++ b/Web/src/pages/system/org/index.jsx @@ -0,0 +1,321 @@ +import React, { Component } from 'react' +import { Button, Card, Form, Input, message as Message, Popconfirm, Select } from 'antd' +import { + AntIcon, + Auth, + Container, + ModalForm, + QueryTable, + QueryTableActions, + QueryTreeLayout, +} from 'components' +import { api } from 'common/api' +import auth from 'components/authorized/handler' +import { toCamelCase } from 'util/format' +import { isEqual } from 'lodash' +import getDictData from 'util/dic' +import FormBody from './form' + +const apiAction = { + tree: api.getOrgTree, + page: api.getOrgPage, + add: api.sysOrgAdd, + edit: api.sysOrgEdit, + delete: api.sysOrgDelete, +} + +const name = '机构' + +export default class index extends Component { + state = { + codes: { + orgType: [], + }, + } + + // 树框架实例 + treeLayout = React.createRef() + + // 表格实例 + table = React.createRef() + + // 新增窗口实例 + addForm = React.createRef() + // 编辑窗口实例 + editForm = React.createRef() + + // 树选中节点 + selectId = undefined + + // 表格字段 + columns = [ + { + title: '机构名称', + width: 400, + dataIndex: 'name', + sorter: true, + }, + { + title: '唯一编码', + width: 200, + dataIndex: 'code', + sorter: true, + }, + { + title: '机构类型', + dataIndex: 'type', + width: 120, + sorter: true, + render: text => <>{this.bindCodeValue(text, 'org_type')}, + }, + { + title: '排序', + width: 80, + dataIndex: 'sort', + sorter: true, + defaultSortOrder: 'ascend', + }, + { + title: '备注', + dataIndex: 'remark', + width: 400, + sorter: true, + }, + ] + + /** + * 构造函数,在渲染前动态添加操作字段等 + * @param {*} props + */ + constructor(props) { + super(props) + + const flag = auth({ sysOrg: [['edit'], ['delete']] }) + + if (flag) { + this.columns.push({ + title: '操作', + width: 150, + dataIndex: 'actions', + render: (text, record) => ( + + + this.onOpen(this.editForm, record)}>编辑 + + + this.onDelete(record)} + > + 删除 + + + + ), + }) + } + } + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * 加载字典数据,之后开始加载表格数据 + * 如果必须要加载字典数据,可直接对表格设置autoLoad=true + */ + componentDidMount() { + this.table.current.onLoading() + getDictData('org_type').then(res => { + this.setState( + { + codes: res, + }, + () => { + this.table.current.onLoadData() + } + ) + }) + } + + /** + * 调用加载数据接口,可在调用前对query进行处理 + * [异步,必要] + * @param {*} params + * @param {*} query + * @returns + */ + loadData = async (params, query) => { + query = { + ...query, + pid: this.selectId, + } + if (params) { + params.sortField = 'areaCode' + params.sortOrder = 'ascend' + } + const { data } = await apiAction.page({ + ...params, + ...query, + }) + return data + } + + /** + * 调用树结构数据接口 + * [异步,必要] + * @returns + */ + loadTreeData = async () => { + const { data } = await apiAction.tree() + return data + } + + /** + * 树节点选中事件 + * [必要] + * @param {*} id + */ + onSelectTree(id) { + this.selectId = id + this.table.current.onReloadData() + } + + /** + * 绑定字典数据 + * @param {*} code + * @param {*} name + * @returns + */ + bindCodeValue(code, name) { + name = toCamelCase(name) + const codes = this.state.codes[name] + if (codes) { + const c = codes.find(p => p.code == code) + if (c) { + return c.value + } + } + return null + } + + /** + * 打开新增/编辑弹窗 + * @param {*} modal + * @param {*} record + */ + onOpen(modal, record) { + modal.current.open({ + orgId: this.selectId, + record, + }) + } + + /** + * 对表格上的操作进行统一处理 + * [异步] + * @param {*} action + * @param {*} successMessage + */ + async onAction(action, successMessage) { + this.table.current.onLoading() + try { + if (action) { + await action + } + if (successMessage) { + Message.success(successMessage) + } + this.treeLayout.current.onReloadData() + this.table.current.onReloadData() + } catch { + this.table.current.onLoaded() + } + } + + /** + * 删除 + * @param {*} record + */ + onDelete(record) { + this.onAction(apiAction.delete(record), '删除成功') + } + + //#region 自定义方法 + //#endregion + + render() { + return ( + this.onSelectTree(key)} + > + + + + + + + + + + + } + operator={ + + } + /> + + + + this.onAction()} + > + + + + this.onAction()} + > + + + + ) + } +} diff --git a/Web/src/pages/system/pos/form.jsx b/Web/src/pages/system/pos/form.jsx new file mode 100644 index 0000000..ac8ded9 --- /dev/null +++ b/Web/src/pages/system/pos/form.jsx @@ -0,0 +1,101 @@ +import React, { Component } from 'react' +import { Form, Input, InputNumber, Spin } from 'antd' +import { AntIcon, IconSelector } from 'components' +import { cloneDeep } from 'lodash' + +const initialValues = { + sort: 100 +} + +export default class form extends Component { + state = { + // 加载状态 + loading: true, + } + + // 表单实例 + form = React.createRef() + + iconSelector = React.createRef() + // 初始化数据 + record = {} + + /** + * mount后回调 + */ + componentDidMount() { + this.props.created && this.props.created(this) + } + + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + + this.record = cloneDeep(params.record) + //#region 从后端转换成前段所需格式 + //#endregion + this.form.current.setFieldsValue(this.record) + + this.setState({ + loading: false + }) + } + + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + if (this.record) { + postData.id = this.record.id + } + //#region 从前段转换后端所需格式 + //#endregion + return postData + } + } + + render() { + return ( + + }> +
    + + + + + + + + + + + + + +
    +
    + + ) + } +} \ No newline at end of file diff --git a/Web/src/pages/system/pos/index.jsx b/Web/src/pages/system/pos/index.jsx new file mode 100644 index 0000000..e59dda6 --- /dev/null +++ b/Web/src/pages/system/pos/index.jsx @@ -0,0 +1,203 @@ +import React, { Component } from 'react' +import { Button, Card, Form, Input, Popconfirm, message as Message } from 'antd' +import { isEqual } from 'lodash' +import { AntIcon, Auth, Container, ModalForm, QueryTable, QueryTableActions } from 'components' +import { api } from 'common/api' +import auth from 'components/authorized/handler' +import FormBody from './form' + +// 配置页面所需接口函数 +const apiAction = { + page: api.sysPosPage, + add: api.sysPosAdd, + edit: api.sysPosEdit, + delete: api.sysPosDelete, +} + +// 用于弹窗标题 +const name = '职位' + +export default class index extends Component { + // 表格实例 + table = React.createRef() + + // 新增窗口实例 + addForm = React.createRef() + // 编辑窗口实例 + editForm = React.createRef() + + columns = [ + { + title: '职位名称', + dataIndex: 'name', + width: 400, + sorter: true, + }, + { + title: '唯一编码', + dataIndex: 'code', + width: 400, + sorter: true, + }, + { + title: '排序', + dataIndex: 'sort', + width: 80, + sorter: true, + defaultSortOrder: 'ascend', + }, + { + title: '备注', + dataIndex: 'remark', + width: 400, + sorter: true, + }, + ] + + /** + * 构造函数,在渲染前动态添加操作字段等 + * @param {*} props + */ + constructor(props) { + super(props) + + const flag = auth({ sysPos: [['edit'], ['delete']] }) + + if (flag) { + this.columns.push({ + title: '操作', + width: 150, + dataIndex: 'actions', + render: (text, record) => ( + + + this.onOpen(this.editForm, record)}>编辑 + + + this.onDelete(record)} + > + 删除 + + + + ), + }) + } + } + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * 调用加载数据接口,可在调用前对query进行处理 + * [异步,必要] + * @param {*} params + * @param {*} query + * @returns + */ + loadData = async (params, query) => { + const { data } = await apiAction.page({ + ...params, + ...query, + }) + return data + } + + /** + * 打开新增/编辑弹窗 + * @param {*} modal + * @param {*} record + */ + onOpen(modal, record) { + modal.current.open({ + record, + }) + } + + /** + * 对表格上的操作进行统一处理 + * [异步] + * @param {*} action + * @param {*} successMessage + */ + async onAction(action, successMessage) { + this.table.current.onLoading() + try { + await action + Message.success(successMessage) + this.table.current.onReloadData() + } catch { + this.table.current.onLoaded() + } + } + + /** + * 删除 + * @param {*} record + */ + onDelete(record) { + this.onAction(apiAction.delete(record), '删除成功') + } + + render() { + return ( + +
    + + + + + + + + + + } + operator={ + + } + > + + this.table.current.onReloadData()} + > + + + + this.table.current.onReloadData()} + > + + +
    + ) + } +} diff --git a/Web/src/pages/system/role/data.jsx b/Web/src/pages/system/role/data.jsx new file mode 100644 index 0000000..d6c08ec --- /dev/null +++ b/Web/src/pages/system/role/data.jsx @@ -0,0 +1,166 @@ +import React, { Component } from 'react' +import { Form, Select, Spin, TreeSelect } from 'antd' +import { AntIcon } from 'components' +import { cloneDeep } from 'lodash' +import { api } from 'common/api' +import getDictData from 'util/dic' + +const { SHOW_PARENT } = TreeSelect + +const initialValues = {} + +export default class data extends Component { + state = { + // 加载状态 + loading: true, + dataScopeType: [], + orgTreeData: [], + arerTreeData: [], + orgCheckedKeys: [], + + isDefine: false, + } + + // 表单实例 + form = React.createRef() + + // 初始化数据 + record = {} + + /** + * mount后回调 + */ + componentDidMount() { + this.props.created && this.props.created(this) + } + + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + this.record = cloneDeep(params.record) + //#region 从后端转换成前段所需格式 + const { dataScopeType } = await getDictData('data_scope_type') + const orgTreeData = await this.onLoadOrgTreeData() + const arerTreeData = await this.onLoadAreaTreeData() + const orgCheckedKeys = await this.onLoadRoleOwn(this.record.id) + this.setState({ + dataScopeType, + orgTreeData, + arerTreeData, + orgCheckedKeys, + }) + //#endregion + this.form.current.setFieldsValue({ + dataScopeType: this.record.dataScopeType.toString(), + }) + + this.onChange(this.record.dataScopeType) + + this.setState({ + loading: false, + }) + } + + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + if (this.record) { + postData.id = this.record.id + } + //#region 从前段转换后端所需格式 + //#endregion + return postData + } + } + + //#region 自定义方法 + async onLoadOrgTreeData() { + const { data } = await api.getOrgTree() + return data + } + + async onLoadAreaTreeData() { + const { data } = await api.getAreaTree() + return data + } + + async onLoadRoleOwn(id) { + const { data } = await api.sysRoleOwnData({ id }) + return data + } + + onChange(value) { + if (value == 5) { + this.setState({ + isDefine: true, + }) + } else { + this.setState({ + isDefine: false, + }) + } + } + //#endregion + + render() { + return ( + + }> +
    + + + + {this.state.isDefine && ( + <> + + + + + + + + )} +
    +
    + + ) + } +} diff --git a/Web/src/pages/system/role/form.jsx b/Web/src/pages/system/role/form.jsx new file mode 100644 index 0000000..594deee --- /dev/null +++ b/Web/src/pages/system/role/form.jsx @@ -0,0 +1,104 @@ +import React, { Component } from 'react' +import { Form, Input, InputNumber, Spin } from 'antd' +import { AntIcon } from 'components' +import { cloneDeep } from 'lodash' + +const initialValues = { + sort: 100 +} + +export default class form extends Component { + + state = { + // 加载状态 + loading: true, + } + + // 表单实例 + form = React.createRef() + + // 初始化数据 + record = {} + + /** + * mount后回调 + */ + componentDidMount() { + this.props.created && this.props.created(this) + } + + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + + this.record = cloneDeep(params.record) + //#region 从后端转换成前段所需格式 + //#endregion + this.form.current.setFieldsValue(this.record) + + this.setState({ + loading: false + }) + } + + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + if (this.record) { + postData.id = this.record.id + } + //#region 从前段转换后端所需格式 + //#endregion + return postData + } + } + + //#region 自定义方法 + //#endregion + + render() { + return ( + + }> +
    + + + + + + + + + + + + +
    +
    + + ) + } +} diff --git a/Web/src/pages/system/role/index.jsx b/Web/src/pages/system/role/index.jsx new file mode 100644 index 0000000..865db78 --- /dev/null +++ b/Web/src/pages/system/role/index.jsx @@ -0,0 +1,266 @@ +import React, { Component } from 'react' +import { Button, Card, Dropdown, Form, Input, Menu, message as Message, Popconfirm } from 'antd' +import { AntIcon, Auth, Container, ModalForm, QueryTable, QueryTableActions } from 'components' +import { api } from 'common/api' +import auth from 'components/authorized/handler' +import { isEqual } from 'lodash' +import FormBody from './form' +import MenuForm from './menu' +import DataForm from './data' + +// 配置页面所需接口函数 +const apiAction = { + page: api.getRolePage, + add: api.sysRoleAdd, + edit: api.sysRoleEdit, + delete: api.sysRoleDelete, + + grantMenu: api.sysRoleGrantMenu, + grantData: api.sysRoleGrantData, +} + +// 用于弹窗标题 +const name = '角色' + +export default class index extends Component { + // 表格实例 + table = React.createRef() + + // 新增窗口实例 + addForm = React.createRef() + // 编辑窗口实例 + editForm = React.createRef() + + menuForm = React.createRef() + dataForm = React.createRef() + + columns = [ + { + title: '角色名', + dataIndex: 'name', + width: 400, + sorter: true, + }, + { + title: '唯一编码', + dataIndex: 'code', + width: 400, + sorter: true, + }, + { + title: '排序', + dataIndex: 'sort', + width: 80, + sorter: true, + defaultSortOrder: 'ascend', + }, + ] + + /** + * 构造函数,在渲染前动态添加操作字段等 + * @param {*} props + */ + constructor(props) { + super(props) + + const flag = auth({ sysRole: [['edit'], ['delete']] }) + + if (flag) { + this.columns.push({ + title: '操作', + width: 150, + dataIndex: 'actions', + render: (text, record) => ( + + + this.onOpen(this.editForm, record)}>编辑 + + + this.onDelete(record)} + > + 删除 + + + + + + + + this.onOpen(this.menuForm, record) + } + > + 授权菜单 + + + + + + + this.onOpen(this.dataForm, record) + } + > + 授权数据 + + + + + } + > + + 授权 + + + + + + ), + }) + } + } + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * 调用加载数据接口,可在调用前对query进行处理 + * [异步,必要] + * @param {*} params + * @param {*} query + * @returns + */ + loadData = async (params, query) => { + const { data } = await apiAction.page({ + ...params, + ...query, + }) + return data + } + + /** + * 打开新增/编辑弹窗 + * @param {*} modal + * @param {*} record + */ + onOpen(modal, record) { + modal.current.open({ + record, + }) + } + + /** + * 对表格上的操作进行统一处理 + * [异步] + * @param {*} action + * @param {*} successMessage + */ + async onAction(action, successMessage) { + this.table.current.onLoading() + try { + await action + Message.success(successMessage) + this.table.current.onReloadData() + } catch { + this.table.current.onLoaded() + } + } + + /** + * 删除 + * @param {*} record + */ + onDelete(record) { + this.onAction(apiAction.delete(record), '删除成功') + } + + //#region 自定义方法 + //#endregion + + render() { + return ( + +
    + + + + + + + + + + } + operator={ + + + + } + /> + + + this.table.current.onReloadData()} + > + + + + this.table.current.onReloadData()} + > + + + + this.table.current.onReloadData()} + > + + + + this.table.current.onReloadData()} + > + + +
    + ) + } +} diff --git a/Web/src/pages/system/role/menu.jsx b/Web/src/pages/system/role/menu.jsx new file mode 100644 index 0000000..6c3eb76 --- /dev/null +++ b/Web/src/pages/system/role/menu.jsx @@ -0,0 +1,89 @@ +import React, { Component } from 'react' +import { cloneDeep } from 'lodash' +import { AntIcon, AuthorityView } from 'components' +import { api } from 'common/api' +import { Empty, Spin } from 'antd' + +export default class form extends Component { + + state = { + // 加载状态 + loading: true, + defaultSelectedKeys: [] + } + + selectedKeys = [] + + view = React.createRef() + + // 初始化数据 + record = {} + + /** + * mount后回调 + */ + componentDidMount() { + this.props.created && this.props.created(this) + } + + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + + this.record = cloneDeep(params.record) + //#region 从后端转换成前段所需格式 + const { data } = await api.sysRoleOwnMenu({ id: this.record.id }) + this.setState({ + defaultSelectedKeys: data + }) + this.view.current.onLoadData() + //#endregion + + this.setState({ + loading: false + }) + } + + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const postData = {} + if (this.record) { + postData.id = this.record.id + } + //#region 从前段转换后端所需格式 + postData.grantMenuIdList = this.selectedKeys + //#endregion + return postData + } + + //#region 自定义方法 + async loadData() { + const { data } = await api.SysMenuTreeForGrant() + return data + } + //#endregion + + render() { + return ( + }> + this.selectedKeys = s3} + ref={this.view} + /> + { this.state.loading && } + + ) + } +} diff --git a/Web/src/pages/system/timers/form.jsx b/Web/src/pages/system/timers/form.jsx new file mode 100644 index 0000000..1c567ea --- /dev/null +++ b/Web/src/pages/system/timers/form.jsx @@ -0,0 +1,243 @@ +import React, { Component } from 'react' +import { Row, Col, Form, Input, Spin, Radio, Switch } from 'antd' +import { AntIcon } from 'components' +import { cloneDeep } from 'lodash' +import { api } from 'common/api' + +const initialValues = { requestType: 2, startNow: 0, doOnce: 1, timerType: 1, executeType: 1 } + +export default class form extends Component { + state = { + // 加载状态 + loading: true, + timerType: 1, + requestType: 2, + } + // 表单实例 + form = React.createRef() + + // 初始化数据 + record = {} + + /** + * mount后回调 + */ + componentDidMount() { + this.props.created && this.props.created(this) + } + + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + if (params.id) { + this.record = (await api.sysTimersDetail({ id: params.id })).data + } + this.record = { + ...this.record, + } + //#region 从后端转换成前段所需格式 + //#endregion + this.form.current && this.form.current.setFieldsValue(this.record) + + this.setState({ + loading: false, + }) + } + + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + if (this.record) { + postData.id = this.record.id + } + //#region 从前段转换后端所需格式 + //#endregion + return postData + } + } + + render() { + const { requestType, timerType } = this.state + return ( + }> +
    +
    + +
    + + + + + + + + + + + + this.setState({ requestType: e.target.value })} + > + {/* + Run + */} + + Get + + + Post + + + Put + + + Delete + + + + {requestType != 0 && ( + + + + )} + + + + + + + + this.setState({ timerType: e.target.value })} + > + + 间隔方式 + + + Cron表达式 + + + + + + {timerType == 1 && ( + + + + )} + {timerType == 2 && ( + + + 参考 + + } + /> + + )} + + + + + + + + + + + + + + + + + + this.onHouseTypeChange(e)} + > + + 并行方式 + + + 串行方式 + + + + + + + + + + + + + + ) + } +} diff --git a/Web/src/pages/system/timers/index.jsx b/Web/src/pages/system/timers/index.jsx new file mode 100644 index 0000000..210818d --- /dev/null +++ b/Web/src/pages/system/timers/index.jsx @@ -0,0 +1,318 @@ +import React, { Component } from 'react' +import { Button, Card, Form, Input, message as Message, Popconfirm } from 'antd' +import { AntIcon, Auth, Container, ModalForm, QueryTable, QueryTableActions } from 'components' +import { api } from 'common/api' +import auth from 'components/authorized/handler' +import { isEqual } from 'lodash' +import getDictData from 'util/dic' +import { toCamelCase } from 'util/format' +import FormBody from './form' + +/** + * 配置页面所需接口函数 + */ +const apiAction = { + page: api.sysTimersPage, + add: api.sysTimersAdd, + edit: api.sysTimersEdit, + delete: api.sysTimersDelete, + start: api.sysTimersStart, + stop: api.sysTimersStop, +} + +const name = '任务计划' +const authName = 'sysTimers' +export default class index extends Component { + state = { + codes: { + requestType: [ + { code: '0', value: 'Run' }, + { code: '1', value: 'Get' }, + { code: '2', value: 'Post' }, + { code: '3', value: 'Put' }, + { code: '4', value: 'Delete' }, + ], + timerStatus: [ + { code: '0', value: '运行中' }, + { code: '1', value: '已停止' }, + { code: '2', value: '执行失败' }, + { code: '3', value: '已取消' }, + ], + }, + } + // 表格实例 + table = React.createRef() + + // 新增窗口实例 + addForm = React.createRef() + // 编辑窗口实例 + editForm = React.createRef() + + columns = [ + { + title: '任务名称', + width: 80, + dataIndex: 'jobName', + }, + { + title: '请求地址', + width: 300, + dataIndex: 'requestUrl', + }, + { + title: '请求类型', + width: 80, + dataIndex: 'requestType', + render: text => <>{this.bindCodeValue(text, 'request_type')}, + }, + { + title: '请求参数', + width: 300, + dataIndex: 'requestParameters', + }, + { + title: '间隔时间', + width: 80, + dataIndex: 'interval', + }, + { + title: 'Cron', + width: 300, + dataIndex: 'cron', + }, + { + title: '执行次数', + width: 80, + dataIndex: 'runNumber', + }, + { + title: '状态', + width: 80, + dataIndex: 'timerStatus', + render: (text, record) => ( + <> + {(text == 0 || text == 1 || text == 2) && ( + + text == 0 + ? this.onStop(record.jobName) + : this.onStart(record.jobName) + } + > + {this.bindCodeValue(text, 'timer_status')} + + )} + {text == 3 && this.bindCodeValue(text, 'timer_status')} + + ), + }, + { + title: '备注', + width: 120, + dataIndex: 'remark', + }, + ] + + /** + * 构造函数,在渲染前动态添加操作字段等 + * @param {*} props + */ + constructor(props) { + super(props) + + const flag = auth({ [authName]: [['edit'], ['delete']] }) + + if (flag) { + this.columns.push({ + title: '操作', + width: 150, + dataIndex: 'actions', + render: (text, { id }) => ( + + + this.onOpen(this.editForm, id)}>编辑 + + + this.onDelete(id)} + > + 删除 + + + + ), + }) + } + } + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * 加载字典数据,之后开始加载表格数据 + * 如果必须要加载字典数据,可直接对表格设置autoLoad=true + */ + componentDidMount() { + const { onLoading, onLoadData } = this.table.current + onLoading() + onLoadData() + // getDictData('house_company_type').then(codes => { + // this.setState({ codes }, () => { + // onLoadData() + // }) + // }) + } + + /** + * 调用加载数据接口,可在调用前对query进行处理 + * [异步,必要] + * @param {*} params + * @param {*} query + * @returns + */ + loadData = async (params, query) => { + const { data } = await apiAction.page({ + ...params, + ...query, + }) + return data + } + + /** + * 绑定字典数据 + * @param {*} code + * @param {*} name + * @returns + */ + bindCodeValue(code, name) { + name = toCamelCase(name) + const codes = this.state.codes[name] + if (codes) { + const c = codes.find(p => p.code == code) + if (c) { + return c.value + } + } + return null + } + + /** + * 打开新增/编辑弹窗 + * @param {*} modal + * @param {*} id + */ + onOpen(modal, id) { + modal.current.open({ id }) + } + + /** + * 对表格上的操作进行统一处理 + * [异步] + * @param {*} action + * @param {*} successMessage + */ + async onAction(action, successMessage) { + const { onLoading, onLoaded, onReloadData } = this.table.current + onLoading() + try { + if (action) { + await action + } + if (successMessage) { + Message.success(successMessage) + } + onReloadData() + } catch { + onLoaded() + } + } + + /** + * 删除 + * @param {*} id + */ + onDelete(id) { + this.onAction(apiAction.delete({ id }), '删除成功') + } + + onStart(jobName) { + this.onAction(apiAction.start({ jobName }), '启动成功') + } + onStop(jobName) { + this.onAction(apiAction.stop({ jobName }), '停止成功') + } + + render() { + return ( + +
    + + + + + + + } + operator={ + + + + } + /> + + + + this.table.current.onReloadData()} + > + + + + + + this.table.current.onReloadData()} + > + + + +
    + ) + } +} diff --git a/Web/src/pages/system/user/data.jsx b/Web/src/pages/system/user/data.jsx new file mode 100644 index 0000000..2e5d0b7 --- /dev/null +++ b/Web/src/pages/system/user/data.jsx @@ -0,0 +1,115 @@ +import React, { Component } from 'react' +import { Form, Spin, TreeSelect } from 'antd' +import { AntIcon } from 'components' +import { cloneDeep } from 'lodash' +import { api } from 'common/api' + +export default class data extends Component { + state = { + // 加载状态 + loading: true, + + options: { + orgData: [], + areaData: [], + orgCheckedKeys: [], + }, + } + + // 表单实例 + form = React.createRef() + + // 初始化数据 + id = '' + + /** + * mount后回调 + */ + componentDidMount() { + this.props.created && this.props.created(this) + } + async fillData(params) { + this.id = params.id + //#region 从后端转换成前段所需格式 + const orgData = await this.loadOrgData() + const areaData = await this.loadAreaData() + const orgCheckedKeys = await this.loadMemberOwn(this.id) + this.setState({ + options: { + orgData, + areaData, + orgCheckedKeys, + }, + }) + this.form.current.setFieldsValue({ + id: this.id, + grantOrgIdList: orgCheckedKeys, + grantAreaCodeList: [], + }) + + this.setState({ + loading: false, + }) + } + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + if (this.id) { + postData.id = this.id + } + //#region 从前段转换后端所需格式 + //#endregion + return postData + } + } + + //#region 自定义方法 + async loadOrgData() { + const { data } = await api.getOrgTree() + return data + } + + async loadAreaData() { + const { data } = await api.getAreaTree() + return data + } + async loadMemberOwn(id) { + const { data } = await api.sysUserOwnData({ id }) + return data + } + render() { + return ( + + }> +
    + + + + + + +
    +
    + + ) + } +} diff --git a/Web/src/pages/system/user/form.jsx b/Web/src/pages/system/user/form.jsx new file mode 100644 index 0000000..2b47441 --- /dev/null +++ b/Web/src/pages/system/user/form.jsx @@ -0,0 +1,276 @@ +import React, { Component } from 'react' +import { + Button, + Row, + Col, + Form, + Input, + DatePicker, + Radio, + Table, + Select, + Spin, + TreeSelect, +} from 'antd' +import { AntIcon } from 'components' +import { cloneDeep } from 'lodash' +import getDictData from 'util/dic' +import { EMPTY_ID } from 'util/global' +import { api } from 'common/api' +import moment from 'moment' + +const initialValues = { + sex: 0, + sysEmpParam: {}, +} + +export default class form extends Component { + state = { + // 加载状态 + loading: true, + codes: { + orgType: [], + }, + + options: { + orgData: [], + posData: [], + }, + sysEmpParam: { + extIds: [], + }, + } + + // 表单实例 + form = React.createRef() + + // 初始化数据 + record = {} + + /** + * mount后回调 + */ + componentDidMount() { + this.props.created && this.props.created(this) + } + + /** + * 填充数据 + * 可以在设置this.record之后对其作出数据结构调整 + * [异步,必要] + * @param {*} params + */ + async fillData(params) { + //#region 从后端转换成前段所需格式 + if (params.id) { + this.record = (await api.sysUserDetail({ id: params.id })).data + } + const orgData = await this.loadOrgData() + const posData = await this.loadPosData() + const codes = await getDictData('org_type') + + // 日期特殊处理 + if (this.record.birthday) { + this.record.birthday = moment(this.record.birthday) + } + + // 提交的时候是"param",而获取下来却是"info",在这里转换一下 + if (this.record.sysEmpInfo) { + this.record.sysEmpParam = this.record.sysEmpInfo + delete this.record.sysEmpInfo + } else if (!this.record.sysEmpParam) { + this.record.sysEmpParam = { + extIds: [], + } + } + + // 转换职位信息列表 + if (this.record.sysEmpParam.positions) { + this.record.sysEmpParam.posIdList = this.record.sysEmpParam.positions.map(p => p.posId) + } + + // 附加信息 + if (this.record.sysEmpParam.extOrgPos) { + this.record.sysEmpParam.extIds = this.record.sysEmpParam.extOrgPos.map((p, i) => { + return { + key: i, + orgId: p.orgId, + posId: p.posId, + } + }) + } + + if (params.orgId) { + this.record.sysEmpParam.orgId = params.orgId + } + + this.setState({ + codes, + options: { + ...this.state.options, + orgData, + posData, + }, + sysEmpParam: { + ...this.record.sysEmpParam, + }, + }) + + this.record = { + ...this.record, + } + //#endregion + this.form.current.setFieldsValue(this.record) + + this.setState({ + loading: false, + }) + } + + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + if (this.record) { + postData.id = this.record.id + } + //#region 从前段转换后端所需格式 + //#endregion + return postData + } + } + + //#region 自定义方法 + async loadOrgData() { + const { data } = await api.getOrgTree() + return data + } + async loadPosData() { + const { data } = await api.sysPosList() + return data + } + //#endregion + + render() { + return ( + + }> +

    基本信息

    +
    + + + + + + + + + + + + + + + + + 保密 + + + + + + + + + + + + + + + + + + + + +
    +

    员工信息

    +
    + + + + + + + + + +
    +
    + + ) + } +} diff --git a/Web/src/pages/system/user/index.jsx b/Web/src/pages/system/user/index.jsx new file mode 100644 index 0000000..d87b3ad --- /dev/null +++ b/Web/src/pages/system/user/index.jsx @@ -0,0 +1,389 @@ +import React, { Component } from 'react' +import { + Button, + Card, + Descriptions, + Form, + Input, + List, + message as Message, + Popconfirm, + Select, + Switch, + Dropdown, + Menu, +} from 'antd' +import { AntIcon, Auth, Container, Image, ModalForm, QueryList, QueryTreeLayout } from 'components' +import { api } from 'common/api' +import { toCamelCase } from 'util/format' +import { isEqual } from 'lodash' +import getDictData from 'util/dic' +import FormBody from './form' +import RoleForm from './role' +import DataForm from './data' +import auth from 'components/authorized/handler' + +// 配置页面所需接口函数 +const apiAction = { + tree: api.getOrgTree, + page: api.getUserPage, + add: api.sysUserAdd, + edit: api.sysUserEdit, + delete: api.sysUserDelete, + + changeStatus: api.sysUserChangeStatus, + resetPwd: api.sysUserResetPwd, + + grantRole: api.sysUserGrantRole, + grantData: api.sysUserGrantData, +} + +// 用于弹窗标题 +const name = '用户' + +export default class index extends Component { + state = { + codes: { + sex: [], + commonStatus: [], + }, + } + + // 表格实例 + list = React.createRef() + + // 新增窗口实例 + addForm = React.createRef() + // 编辑窗口实例 + editForm = React.createRef() + + roleForm = React.createRef() + dataForm = React.createRef() + // 树选中节点 + selectId = undefined + + /** + * 阻止外部组件引发的渲染,提升性能 + * 可自行添加渲染条件 + * [必要] + * @param {*} props + * @param {*} state + * @returns + */ + shouldComponentUpdate(props, state) { + return !isEqual(this.state, state) + } + + /** + * 加载字典数据,之后开始加载表格数据 + * 如果必须要加载字典数据,可直接对表格设置autoLoad=true + */ + componentDidMount() { + this.list.current.onLoading() + getDictData('sex', 'common_status').then(res => { + this.setState( + { + codes: res, + }, + () => { + this.list.current.onLoadData() + } + ) + }) + } + + /** + * 调用加载数据接口,可在调用前对query进行处理 + * [异步,必要] + * @param {*} params + * @param {*} query + * @returns + */ + loadData = async (params, query) => { + query = { + ...query, + sysEmpParam: { + orgId: this.selectId, + }, + } + + const { data } = await apiAction.page({ + ...params, + ...query, + }) + return data + } + + /** + * 调用树结构数据接口 + * [异步,必要] + * @returns + */ + loadTreeData = async () => { + const { data } = await apiAction.tree() + return data + } + + /** + * 树节点选中事件 + * [必要] + * @param {*} id + */ + onSelectTree(id) { + this.selectId = id + this.list.current.onReloadData() + } + + /** + * 绑定字典数据 + * @param {*} code + * @param {*} name + * @returns + */ + bindCodeValue(code, name) { + name = toCamelCase(name) + const codes = this.state.codes[name] + if (codes) { + const c = codes.find(p => p.code == code) + if (c) { + return c.value + } + } + return null + } + + /** + * 打开新增/编辑弹窗 + * @param {*} modal + * @param {*} id + */ + onOpen(modal, id) { + modal.current.open({ + orgId: this.selectId, + id, + }) + } + + /** + * 对表格上的操作进行统一处理 + * [异步] + * @param {*} action + * @param {*} successMessage + */ + async onAction(action, successMessage) { + this.list.current.onLoading() + try { + await action + Message.success(successMessage) + this.list.current.onReloadData() + } catch { + this.list.current.onLoaded() + } + } + + /** + * 删除 + * @param {*} id + */ + onDelete(id) { + this.onAction(apiAction.delete({ id }), '删除成功') + } + + //#region 自定义方法 + renderItem(record) { + const { id, account, name, nickName, avatar, sex, phone, email, status } = record + return ( + + this.onOpen(this.editForm, id)}>编辑 + , + + this.onDelete(id)} + > + 删除 + + , + + this.onResetPassword(id)}>重置密码 + , + + + {auth('sysUser:grantRole') && ( + + this.onOpen(this.roleForm, id)}> + 授权角色 + + + )} + {auth('sysUser:grantData') && ( + + this.onOpen(this.dataForm, id)}> + 授权额外数据 + + + )} + + } + > + + 授权 + + + + , + ]} + > + } + /> + } + title={nickName || name} + description={account} + /> + + + {this.bindCodeValue(sex, 'sex')} + + {phone || '未设置'} + {email || '未设置'} + +
    + +
    + this.onSetUserStatus(id, checked)} + /> +
    +
    +
    +
    + ) + } + + onSetUserStatus(id, checked) { + this.onAction(apiAction.changeStatus({ id, status: +!checked }), '设置成功') + } + + onResetPassword(id) { + this.onAction(apiAction.resetPwd({ id }), '重置成功') + } + //#endregion + + render() { + return ( + this.onSelectTree(key)} + > + + + + + + + + + + + + + + } + operator={ + + } + renderItem={record => this.renderItem(record)} + /> + + + + this.list.current.onReloadData()} + > + + + + this.list.current.onReloadData()} + > + + + + this.list.current.onReloadData()} + > + + + + this.list.current.onReloadData()} + > + + + + ) + } +} diff --git a/Web/src/pages/system/user/role.jsx b/Web/src/pages/system/user/role.jsx new file mode 100644 index 0000000..131cc68 --- /dev/null +++ b/Web/src/pages/system/user/role.jsx @@ -0,0 +1,99 @@ +import React, { Component } from 'react' +import { Form, Spin, Select } from 'antd' +import { AntIcon } from 'components' +import { cloneDeep } from 'lodash' +import { api } from 'common/api' + +export default class role extends Component { + state = { + // 加载状态 + loading: true, + + options: { + roleData: [], + }, + roles: [], + } + + // 表单实例 + form = React.createRef() + + // 初始化数据 + id = '' + + /** + * mount后回调 + */ + componentDidMount() { + this.props.created && this.props.created(this) + } + async fillData(params) { + this.id = params.id + //#region 从后端转换成前段所需格式 + const roleData = await this.loadRoleData() + const roles = await this.loadRole(this.id) + this.setState({ + options: { + roleData, + }, + roles, + }) + this.form.current.setFieldsValue({ + id: this.id, + grantRoleIdList: roles, + }) + + this.setState({ + loading: false, + }) + } + /** + * 获取数据 + * 可以对postData进行数据结构调整 + * [异步,必要] + * @returns + */ + async getData() { + const form = this.form.current + + const valid = await form.validateFields() + if (valid) { + const postData = form.getFieldsValue() + if (this.id) { + postData.id = this.id + } + //#region 从前段转换后端所需格式 + //#endregion + return postData + } + } + async loadRoleData() { + const { data } = await api.getRolePage() + return data.items + } + async loadRole(id) { + const { data } = await api.sysUserOwnRole({ id }) + return data + } + render() { + return ( + + }> +
    + + + +
    +
    + + ) + } +} diff --git a/Web/src/reportWebVitals.js b/Web/src/reportWebVitals.js new file mode 100644 index 0000000..5253d3a --- /dev/null +++ b/Web/src/reportWebVitals.js @@ -0,0 +1,13 @@ +const reportWebVitals = onPerfEntry => { + if (onPerfEntry && onPerfEntry instanceof Function) { + import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { + getCLS(onPerfEntry); + getFID(onPerfEntry); + getFCP(onPerfEntry); + getLCP(onPerfEntry); + getTTFB(onPerfEntry); + }); + } +}; + +export default reportWebVitals; diff --git a/Web/src/router/config.js b/Web/src/router/config.js new file mode 100644 index 0000000..ef515d8 --- /dev/null +++ b/Web/src/router/config.js @@ -0,0 +1,11 @@ +import Main from '../views/main' +import Login from '../views/login' +import Error404 from '../views/error/404' + +var routes = [ + { path: '/', name: 'main', component: Main, auth: true }, + { path: '/login', name: 'login', component: Login }, + { path: '/404', name: '404', component: Error404 } +] +// auth 是否需要登录 +export default routes; \ No newline at end of file diff --git a/Web/src/router/index.jsx b/Web/src/router/index.jsx new file mode 100644 index 0000000..f381887 --- /dev/null +++ b/Web/src/router/index.jsx @@ -0,0 +1,16 @@ +import React from 'react'; +import { Switch, BrowserRouter } from 'react-router-dom' +import NavigationGuards from './navigationGuards' +import RouterConfig from './config' + +const router = () => { + return ( + + + + + + ) +} + +export default router \ No newline at end of file diff --git a/Web/src/router/navigationGuards.jsx b/Web/src/router/navigationGuards.jsx new file mode 100644 index 0000000..1fee369 --- /dev/null +++ b/Web/src/router/navigationGuards.jsx @@ -0,0 +1,26 @@ +import React, { Component } from 'react' +import { Route, Redirect } from 'react-router-dom' + +import { token } from '../common/token' + +export default class navigationGuards extends Component { + render() { + const { routerConfig, location } = this.props + const { pathname } = location + + const targetRouterConfig = routerConfig.find((item) => { + return item.path.replace(/\s*/g, '') === pathname + }) + + if (token.value) { + if (pathname === '/login') { + return + } + } else if (!token.value && pathname !== '/login') { + return + } + + const { component } = targetRouterConfig; + return + } +} \ No newline at end of file diff --git a/Web/src/store/index.js b/Web/src/store/index.js new file mode 100644 index 0000000..0dae1fe --- /dev/null +++ b/Web/src/store/index.js @@ -0,0 +1,54 @@ +import { createStore } from 'redux' +import { cloneDeep, result, isEqual } from 'lodash' +import reducer from './reducer' + +const _store = createStore(reducer) + +const store = cloneDeep(_store) + +/** + * 允许传入第一个参数path,只监听指定属性路径的对象 + * @param {...any} args + * @returns + */ +store.subscribe = (...args) => { + let path, + listener, + snapshot + + if (typeof args[0] === 'string' && typeof args[1] === 'function') { + path = args[0] + listener = args[1] + snapshot = cloneDeep(result(_store.getState(), path)) + } else { + listener = args[0] + } + + return _store.subscribe((...args) => { + const state = _store.getState() + if (path) { + const resultState = cloneDeep(result(state, path)) + if (!isEqual(snapshot, resultState)) { + listener.apply(this, [resultState, ...args]) + } + snapshot = resultState + } else { + listener.apply(this, [state, ...args]) + } + }) +} + +/** + * 允许传入参数path,只返回指定属性路径的对象 + * @param {*} path + * @returns + */ +store.getState = (path) => { + if (path) { + return result(_store.getState(), path) + } + + return _store.getState() +} + +export default store \ No newline at end of file diff --git a/Web/src/store/reducer/business.js b/Web/src/store/reducer/business.js new file mode 100644 index 0000000..cad0e2a --- /dev/null +++ b/Web/src/store/reducer/business.js @@ -0,0 +1,33 @@ +const business = (state = {}, action) => { + switch (action.type) { + case 'PATROL_INIT_GRADE_BY_COMPLETED_DATE': + { + const completedDate = state.completedDate || [] + const { date } = action + const record = completedDate.find(p => p.id === date.id) + if (record) { + record.value = date.value + } else { + completedDate.push(date) + } + const _state = { ...state, completedDate } + return _state + } + case 'PATROL_REMOVE_INIT_GRADE_BY_COMPLETED_DATE': + { + const completedDate = state.completedDate || [] + const record = completedDate.find(p => p.id === action.id) + if (!record) { + return state + } else { + completedDate.splice(completedDate.indexOf(record), 1) + const _state = { ...state, completedDate } + return _state + } + } + default: + return state + } +} + +export default business \ No newline at end of file diff --git a/Web/src/store/reducer/dict-data.js b/Web/src/store/reducer/dict-data.js new file mode 100644 index 0000000..da7a016 --- /dev/null +++ b/Web/src/store/reducer/dict-data.js @@ -0,0 +1,11 @@ +const dictData = (state = {}, action) => { + switch (action.type) { + case 'ADD_DICT_DATA': + const _state = { ...state, ...action.value } + return _state + default: + return state + } +} + +export default dictData \ No newline at end of file diff --git a/Web/src/store/reducer/index.js b/Web/src/store/reducer/index.js new file mode 100644 index 0000000..506ebbb --- /dev/null +++ b/Web/src/store/reducer/index.js @@ -0,0 +1,18 @@ +import { combineReducers } from 'redux' +import user from './user' +import layout from './layout' +import nav from './nav' +import dictData from './dict-data' +import notice from './notice' +import business from './business' + +const combine = combineReducers({ + user, + layout, + nav, + dictData, + notice, + business +}) + +export default combine \ No newline at end of file diff --git a/Web/src/store/reducer/layout.js b/Web/src/store/reducer/layout.js new file mode 100644 index 0000000..776fdc9 --- /dev/null +++ b/Web/src/store/reducer/layout.js @@ -0,0 +1,62 @@ +import { SETTING_KEY } from "common/storage" +import { SIDER_BREAK_POINT } from "util/global" + +const defaultState = { + siderCollapsed: false, + allowSiderCollapsed: true, + theme: 'default' +} + +const localStorageState = () => { + return JSON.parse(window.localStorage.getItem(SETTING_KEY)) || {} +} + +const mergeState = { + ...defaultState, + ...localStorageState() +} + +const layout = (state = mergeState, action) => { + switch (action.type) { + // 打开窗口 + case 'OPEN_WINDOW': + return state + // 关闭窗口 + case 'CLOSE_WINDOW': + return state + // 重新加载窗口 + case 'RELOAD_WINDOW': + return state + // 侧边收起状态 + case 'TOGGLE_COLLAPSED': + { + if (window.innerWidth <= SIDER_BREAK_POINT) { + return state + } + const _state = { ...state, siderCollapsed: action.siderCollapsed } + window.localStorage.setItem(SETTING_KEY, JSON.stringify(_state)) + return _state + } + // 自动收起侧边 + case 'AUTO_TOGGLE_COLLAPSED': + { + const _state = { + ...state, + siderCollapsed: localStorageState().siderCollapsed || action.siderCollapsed, + allowSiderCollapsed: !action.siderCollapsed + } + return _state + } + // 切换主题 + case 'SET_THEME': + { + const _state = { ...state, theme: action.theme } + window.localStorage.setItem(SETTING_KEY, JSON.stringify(_state)) + return _state + } + default: + return state + } +} + +export default layout \ No newline at end of file diff --git a/Web/src/store/reducer/nav.js b/Web/src/store/reducer/nav.js new file mode 100644 index 0000000..22f8086 --- /dev/null +++ b/Web/src/store/reducer/nav.js @@ -0,0 +1,16 @@ +const defaultState = { nav: [] } + +const nav = (state = defaultState, action) => { + // 写入各种action对应的操作 + switch (action.type) { + case 'SET_NAV': + const _state = { ...state, nav: action.nav } + return _state + case 'RESET_NAV': + return defaultState + default: + return state + } +} + +export default nav \ No newline at end of file diff --git a/Web/src/store/reducer/notice.js b/Web/src/store/reducer/notice.js new file mode 100644 index 0000000..eaa4370 --- /dev/null +++ b/Web/src/store/reducer/notice.js @@ -0,0 +1,40 @@ +const defaultState = { + count: 0, + list: [] +} + +const layout = (state = defaultState, action) => { + switch (action.type) { + case 'SET_NOTICE_COUNT': + { + const _state = { + ...state, + count: action.count + } + return _state + } + case 'SET_NOTICE_LIST': + { + const _state = { + ...state, + list: action.list + } + return _state + } + case 'READ_NOTICE': + { + const notice = state.list.find(p => p.id === action.id) + if (notice && !notice.readStatus) { + notice.readStatus = 1 + state.count -= 1 + } + return { + ...state + } + } + default: + return state + } +} + +export default layout \ No newline at end of file diff --git a/Web/src/store/reducer/pane.js b/Web/src/store/reducer/pane.js new file mode 100644 index 0000000..e69de29 diff --git a/Web/src/store/reducer/user.js b/Web/src/store/reducer/user.js new file mode 100644 index 0000000..1bdacea --- /dev/null +++ b/Web/src/store/reducer/user.js @@ -0,0 +1,16 @@ +const defaultState = {} + +const user = (state = defaultState, action) => { + // 写入各种action对应的操作 + switch (action.type) { + case 'SET_USER_ACCOUNT': + const _state = { ...state, ...action.user } + return _state + case 'RESET_USER_ACCOUNT': + return defaultState + default: + return state + } +} + +export default user \ No newline at end of file diff --git a/Web/src/util/des/index.js b/Web/src/util/des/index.js new file mode 100644 index 0000000..3ae482f --- /dev/null +++ b/Web/src/util/des/index.js @@ -0,0 +1,34 @@ +import { + TripleDES, + enc, + mode, + pad +} from 'crypto-js'; + +const KEY = process.env.VUE_APP_DEV_KEY; +const key = enc.Utf8.parse(KEY); + +//TripleDES加密 +const encryptByDES = (message) => { + let encrypted = TripleDES.encrypt(message, key, { + mode: mode.ECB, + padding: pad.Pkcs7 + }); + return encrypted.toString(); +} + +//TripleDES解密 +const decryptByDES = (ciphertext) => { + let decrypted = TripleDES.decrypt({ + ciphertext: enc.Base64.parse(ciphertext) + }, key, { + mode: mode.ECB, + }); + const value = decrypted.toString(enc.Utf8); + return value; +} + +export { + encryptByDES, + decryptByDES +} diff --git a/Web/src/util/dic/index.js b/Web/src/util/dic/index.js new file mode 100644 index 0000000..ba3e28e --- /dev/null +++ b/Web/src/util/dic/index.js @@ -0,0 +1,45 @@ +import { api } from 'common/api' +import { mapKeys } from 'lodash' +import store from 'store' +import { toCamelCase } from 'util/format' + +const { getState, dispatch } = store + +const getDictData = async (...args) => { + const dictData = getState('dictData') + let dict = {} + const code = [] + for (let i = 0; i < args.length; i++) { + const codeName = toCamelCase(args[i]) + if (!dictData.hasOwnProperty(codeName)) { + code.push(args[i]) + } else { + dict[codeName] = dictData[codeName] + } + } + + if (code.length) { + try { + const value = mapKeys((await api.sysDictTypeDropDowns({ code })).data, (value, key) => { + return toCamelCase(key) + }) + + dispatch({ + type: 'ADD_DICT_DATA', + value + }) + + dict = { ...dict, ...value } + } + catch { } + } + + const result = {} + args.forEach(p => { + const codeName = toCamelCase(p) + result[codeName] = dict[codeName] + }) + return result +} + +export default getDictData \ No newline at end of file diff --git a/Web/src/util/file/index.js b/Web/src/util/file/index.js new file mode 100644 index 0000000..5b73342 --- /dev/null +++ b/Web/src/util/file/index.js @@ -0,0 +1,125 @@ +import { api } from 'common/api' + +const _getFileTypeByBase64 = (base64) => { + let arr = base64.split(','), + fileType = arr[0].match(/:(.*?);/)[1] + return fileType +} + +/** + * ArrayBuffer转Base64 + * @param {*} arrayBuffer + * @returns + */ +export const ArrayBufferToBase64 = async (arrayBuffer) => { + const blob = ArrayBufferToBlob(arrayBuffer) + const base64 = await BlobToBase64(blob) + return base64 +} + +/** + * ArrayBuffer转Blob + * @param {*} arrayBuffer + * @returns + */ +export const ArrayBufferToBlob = (arrayBuffer) => { + return new Blob([arrayBuffer]) +} + +/** + * Base64转Blob + * @param {*} base64 + * @returns + */ +export const Base64ToBlob = (base64) => { + let arr = base64.split(','), + fileType = _getFileTypeByBase64(base64), + bstr = atob(arr[1]), + n = bstr.length, + u8arr = new Uint8Array(n) + + while (n--) { + u8arr[n] = bstr.charCodeAt(n) + } + return new Blob([u8arr], { type: fileType }) +} + +/** + * Blob转文件 + * @param {*} blob + * @param {*} fileName + * @param {*} fileType + * @returns + */ +export const BlobToFile = (blob, fileName, fileType) => { + blob.lastModifiedDate = new Date() + blob.name = fileName + const file = new File([blob], fileName, { type: fileType }) + return file +} + +/** + * Base64转文件 + * @param {*} base64 + * @param {*} fileName + * @returns + */ +export const Base64ToFile = (base64, fileName) => { + const blob = Base64ToBlob(base64) + const fileType = _getFileTypeByBase64(base64) + const file = BlobToFile(blob, fileName, fileType) + return file +} + +/** + * Blob转Base64 + * @param {*} blob + * @returns + */ +export const BlobToBase64 = async (blob) => { + return new Promise(resolve => { + const reader = new FileReader() + reader.readAsDataURL(blob) + reader.onload = (e) => { + resolve(e.target.result) + } + }) +} + +export const GetFileName = (disposition) => { + const dispositionSplit = disposition.split(';') + const fileName = decodeURI( + dispositionSplit[1].split('=')[1], + dispositionSplit[2].match(/(?<=\*=).*?(?=')/)[0] + ) + return fileName +} + +export const PreviewFileResponse = async (id) => { + return api.sysFileInfoPreview({ id }).then((res) => { + return res + }) +} + +export const PreviewFileArrayBuffer = async (id) => { + const response = await PreviewFileResponse(id) + return response.data +} + +export const PreviewFileBase64 = async (id) => { + const file = await PreviewFile(id) + if (!file) return + const base64 = await BlobToBase64(file) + return base64 +} + +export const PreviewFile = async (id) => { + const response = await PreviewFileResponse(id) + const arrayBuffer = response.data + const blob = ArrayBufferToBlob(arrayBuffer) + const disposition = response.headers['content-disposition'] + if (!disposition) return + const fileName = GetFileName(disposition) + const file = BlobToFile(blob, fileName, response.headers['content-type']) + return file +} \ No newline at end of file diff --git a/Web/src/util/format/index.js b/Web/src/util/format/index.js new file mode 100644 index 0000000..238c7fe --- /dev/null +++ b/Web/src/util/format/index.js @@ -0,0 +1,50 @@ +export const numberToChinese = (val) => { + const num = parseInt(val) + const changeNum = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'] + const unit = ['', '十', '百', '千', '万'] + const getWan = (temp) => { + const strArr = temp.toString().split('').reverse() + let newNum = '' + for (var i = 0; i < strArr.length; i++) { + newNum = (i === 0 && strArr[i] === '0' ? '' : i > 0 && strArr[i] === '0' && strArr[i - 1] === '0' ? '' : changeNum[strArr[i]] + (strArr[i] === '0' ? unit[0] : unit[i])) + newNum + } + return newNum + } + const overWan = Math.floor(num / 10000) + let noWan = num % 10000 + if (noWan.toString().length < 4) noWan = '0' + noWan + + const chinanum = overWan ? getWan(overWan) + '万' + getWan(noWan) : getWan(num) + return chinanum +} + +/** + * 下划线转驼峰 + * @param {String} str + */ +export const toCamelCase = (str) => { + if (typeof str === 'string') { + return str.toLowerCase().split('_').map((p, i) => { + if (i > 0) { + return p[0].toUpperCase() + p.slice(1) + } else { + return p + } + }).join('') + } + return str +} + +/** + * 驼峰转下划线 + * @param {String} str + */ +export const toUnderScoreCase = (str) => { + if (typeof str === 'string') { + str = str.replace(/[A-Z]/g, (match) => { + return `_${match}` + }).toLowerCase() + return str.startsWith('_') ? str.slice(1) : str + } + return str +} \ No newline at end of file diff --git a/Web/src/util/global/index.js b/Web/src/util/global/index.js new file mode 100644 index 0000000..bd5639a --- /dev/null +++ b/Web/src/util/global/index.js @@ -0,0 +1,49 @@ +import { urls } from 'common/api' +import { GLOBAL_INFO_KEY } from 'common/storage' +import { encryptByDES, decryptByDES } from 'util/des' + +/** + * 空GUID + */ +export const EMPTY_ID = '00000000-0000-0000-0000-000000000000' + +/** + * 文件预览地址 + */ +export const PERVIEW_URL = process.env.REACT_APP_BASE_URL + urls.sysFileInfoPreview[0] + + +/** + * 全局信息设置 + */ +export const setGlobal = (info) => { + //app.$set(app.global, 'info', info) + window.sessionStorage.setItem(GLOBAL_INFO_KEY, encryptByDES(JSON.stringify(info))) +} +export const removeGlobal = () => { + //app.$set(app.global, 'info', undefined) + window.sessionStorage.removeItem(GLOBAL_INFO_KEY) +} +export const getGlobal = () => { + return JSON.parse(decryptByDES(window.sessionStorage.getItem(GLOBAL_INFO_KEY))) +} + +/** + * RSA公钥 + */ +export const RSA_PUBLIC_KEY = '-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC273zAyijb3uX6O66VThrdfHtzZJn3d/SBM8qiETS7PijyNY3zNecAB+F/owxOWSB/6ojBo5Eu0FCiENxfpenTZB7sKrYu6NVH5gkfHLa6jz4pNzlGP93Q6RON4KjMZolAfRevBQ7vD6sOfJfMDnYi8xk+dRXcqc6PWY8fQiGs5QIDAQAB-----END PUBLIC KEY-----' + +/** + * 城市名称 + */ +export const CITY = '黄石市' + +/** + * + */ +export const AMAP_WEBAPI_KEY = 'ca01719fe09757131a1249c273619a17' + +/** + * 响应式响应宽度 + */ +export const SIDER_BREAK_POINT = 1366 \ No newline at end of file diff --git a/Web/src/util/query/index.js b/Web/src/util/query/index.js new file mode 100644 index 0000000..cd5050c --- /dev/null +++ b/Web/src/util/query/index.js @@ -0,0 +1,109 @@ +import moment from 'moment' + +/** + * 从键值对的query类型转换成数组类型 + * 键:自动作为field值 + * 值:得到一个数组作为value的值 + * queryType:一个json类型,已query的键为键,QueryType为值. 如果是一个QueryType的数组,则自动对应到value中的各个值 + * 示例: + * + getSearchInfo({ + query: { + value: '123', + text: '123', + code: 'abc', + check: ['1', '2', '3'], + range: [1, 10] + }, + queryType: { + text: QueryType.Equal, + code: QueryType.Like, + check: QueryType.Equal, + range: [QueryType.GreaterThanOrEqual, QueryType.LessThan] + } + }) + + => + + [ + { field: 'value', value: ['123'] }, + { field: 'text', value: ['123'], type: '=' }, + { field: 'code', value: ['abc'], type: 'like' }, + { field: 'check', value: ['1', '2', '3'], type: '=' }, + { field: 'range', value: [1], type: '>=' }, + { field: 'range', value: [10], type: '<' } + ] + * @param {*} param0 + * @returns [{ field: '', value: [], type: '' } ...] + */ +export const getSearchInfo = ({ query, queryType }) => { + const searchInfo = [] + Object.keys(query).forEach((p) => { + if (queryType && queryType.hasOwnProperty(p) && queryType[p].constructor === Array) { + queryType[p].forEach((q, i) => { + if (query[p] !== null && query[p] !== undefined) { + const _searchInfo = { + field: p, + value: [query[p][i]], + type: q, + } + searchInfo.push(_searchInfo) + } + }) + } else { + const _searchInfo = { + field: p, + value: [], + type: undefined, + } + + if (query[p] !== null && query[p] !== undefined) { + if (query[p].constructor === Array) { + _searchInfo.value = query[p] + } else { + _searchInfo.value = [query[p]] + } + } else { + return false + } + + if (queryType && queryType.hasOwnProperty(p)) { + _searchInfo.type = queryType[p] + } + + searchInfo.push(_searchInfo) + } + }) + + return searchInfo +} + +/** + * 获取查询用时间范围数组 + * 在这里会自动将第二个时间增加1天 + * 如果选择的日期范围为2021-01-01~2021-01-10,最终需要取得 >=2021-01-01 and <2021-01-11 的结果 + * @param {*} range 时间范围数组 + * @param {*} format 格式化 + * @returns + */ +export const getSearchDateRange = (range, format = 'YYYY-MM-DD', unit = 'days') => { + if (Array.isArray(range) && range.length === 2) { + range[1] = moment(range[1]).add(1, unit) + range = range.map(p => moment(p).format(format)) + } + return range +} + +/** + * 查询条件类型 + */ +export const QueryType = { + GreaterThan: '>', + GreaterThanOrEqual: '>=', + LessThan: '<', + LessThanOrEqual: '<=', + Like: 'LIKE', + Equal: '=', + StartWith: 'STRAT', + EndWith: 'END' +} \ No newline at end of file diff --git a/Web/src/util/rsa/index.js b/Web/src/util/rsa/index.js new file mode 100644 index 0000000..8047452 --- /dev/null +++ b/Web/src/util/rsa/index.js @@ -0,0 +1,13 @@ +import { JSEncrypt } from 'jsencrypt' +/** + * RSA加解密 + */ +const encryptByRSA = (message, publicKey) => { + const Encrypt = new JSEncrypt() + Encrypt.setPublicKey(publicKey) + return Encrypt.encrypt(message) +} + +export { + encryptByRSA +} \ No newline at end of file diff --git a/Web/src/util/tool/index.js b/Web/src/util/tool/index.js new file mode 100644 index 0000000..239faaf --- /dev/null +++ b/Web/src/util/tool/index.js @@ -0,0 +1,23 @@ +import { first, last } from "lodash" + +export const checkboxCheckedNone = (arg) => { + let { value, length, noneValue, required } = arg + if (length === undefined) length = 2 + if (noneValue === undefined) noneValue = '' + if (required === undefined) required = false + + if (first(value) === noneValue && value.length > 1) { + // 在'无'之后选中其他值 + value.shift() + } else if ( + value.length >= length + || + (last(value) === noneValue && value.length > 1) + || + (!value.length && required) + ) { + // 在其他值之后选中'无' + value = [noneValue] + } + return value +} \ No newline at end of file diff --git a/Web/src/views/error/404.jsx b/Web/src/views/error/404.jsx new file mode 100644 index 0000000..e0354a3 --- /dev/null +++ b/Web/src/views/error/404.jsx @@ -0,0 +1,11 @@ +import React, { Component } from 'react' + +export default class index extends Component { + render() { + return ( +
    + 404 +
    + ) + } +} diff --git a/Web/src/views/login/index.jsx b/Web/src/views/login/index.jsx new file mode 100644 index 0000000..0e9b331 --- /dev/null +++ b/Web/src/views/login/index.jsx @@ -0,0 +1,235 @@ +import React, { Component } from 'react' +import { Alert, Button, Form, Input, message as Message, Modal } from 'antd' +import Container from 'components/container' +import { encryptByRSA } from 'util/rsa' +import { RSA_PUBLIC_KEY } from 'util/global' +import { api } from 'common/api' +import { token } from 'common/token' + +export default class index extends Component { + state = { + loading: false, + + focusUser: false, + focusPassword: false, + + btnDisabled: true, + + pattern: '', + descriptions: '', + visible: false, + } + + backgroundImage = require(`assets/image/login-bg-0${Math.floor(Math.random() * 4)}.jpg`) + + focus = { + user: false, + password: false, + } + + form = React.createRef() + + onLogin = values => { + this.setState({ loading: true }) + + let { account, password } = values + password = encryptByRSA(password, RSA_PUBLIC_KEY) + api.login({ account, password }) + .then(({ success, data, message }) => { + if (success) { + const { passed, pattern, descriptions, token } = data + // 简单密码需要更改 + if (!passed) { + this.setState({ + visible: true, + loading: false, + btnDisabled: true, + pattern, + descriptions, + }) + } else { + this.onLoginSuccess(token) + } + } else { + this.setState({ loading: false }) + Message.error(message) + } + }) + .catch(({ message }) => { + if (typeof message === 'object' && message[0]) { + Message.error(message[0].messages[0]) + } + this.setState({ loading: false }) + }) + } + + onLoginPass = values => { + this.setState({ loading: true }) + const account = this.form.current.getFieldValue('account') + let { password, newPassword } = values + password = encryptByRSA(password, RSA_PUBLIC_KEY) + newPassword = encryptByRSA(newPassword, RSA_PUBLIC_KEY) + const confirm = newPassword // 前端验证两次密码即可.不需要加密 + + api.loginPass({ account, password, newPassword, confirm }) + .then(({ success, data, message }) => { + if (success) { + const { passed, pattern, descriptions, token } = data + // 简单密码需要更改 + if (!passed) { + this.setState({ + visible: true, + loading: false, + btnDisabled: true, + pattern, + descriptions, + }) + } else { + this.onLoginSuccess(token) + } + } else { + this.setState({ loading: false }) + Message.error(message) + } + }) + .catch(({ message }) => { + if (typeof message === 'object' && message[0]) { + Message.error(message[0].messages[0]) + } + this.setState({ loading: false }) + }) + } + + onLoginSuccess(jwtToken) { + token.value = jwtToken + Message.success('登录成功') + this.props.history.replace('/') + } + + render() { + const { loading, focusUser, focusPassword, btnDisabled, visible, pattern, descriptions } = + this.state + + return ( +
    + +
    + +
    { + this.setState({ + btnDisabled: !values.account || !values.password, + }) + }} + > + + { + this.setState({ + focusUser: !!this.form.current.getFieldValue('account'), + }) + }} + onFocus={() => { + this.setState({ focusUser: true }) + }} + size="large" + autoComplete="off" + placeholder={focusUser && '请输入用户名/手机号/邮箱'} + /> + + + { + this.setState({ + focusPassword: + !!this.form.current.getFieldValue('password'), + }) + }} + onFocus={() => { + this.setState({ focusPassword: true }) + }} + size="large" + autoComplete="off" + placeholder={focusPassword && '请输入密码'} + /> + + + + + +
    +
    + + +
    +
    +
    + + + + + + + ({ + validator(_, value) { + if (!value || getFieldValue('newPassword') === value) { + return Promise.resolve() + } + return Promise.reject(new Error('确认新密码不匹配')) + }, + }), + ]} + name="confirm" + > + + +
    + + + + +
    +
    + ) + } +} diff --git a/Web/src/views/main/_layout/content/index.jsx b/Web/src/views/main/_layout/content/index.jsx new file mode 100644 index 0000000..b806188 --- /dev/null +++ b/Web/src/views/main/_layout/content/index.jsx @@ -0,0 +1,252 @@ +import React, { Component } from 'react' +import { Divider, Layout, Tabs, Menu, Dropdown } from 'antd' +import NProgress from 'nprogress' +import 'nprogress/nprogress.css' +import AntIcon from 'components/ant-icon' +import { Container } from 'components' + +NProgress.configure({ + parent: '.ant-layout-content > .yo-tab-external-mount > .yo-tab-external-mount-content', +}) + +class ComponentDynamic extends Component { + state = { + // 组件内部组件的key,用于刷新 + key: null, + component: null, + } + + shouldComponentUpdate() { + if (this.props.onRef) { + this.props.onRef(this) + } + return true + } + + componentDidMount() { + this.loadComponent() + } + + loadComponent() { + NProgress.start() + + // 在这里使用setTimeout调用,是防止打开窗口时卡顿 + setTimeout(async () => { + let component + + try { + component = await import(`../../../../pages${this.props.path}`) + } catch { + component = await import('views/error/404') + } + + this.setState( + { + key: Math.random().toString(16).slice(2), + component: component.default, + }, + () => { + NProgress.done() + } + ) + }) + } + + render() { + if (this.state.component) { + return ( + + + Ewide Core ©2021 v1.0 + + + } + /> + ) + } + return <> + } +} + +class Iframe extends Component { + shouldComponentUpdate() { + if (this.props.onRef) { + this.props.onRef(this) + } + return true + } + + componentDidMount() { + if (this.props.onRef) { + this.props.onRef(this) + } + this.loadComponent() + } + + loadComponent() { + NProgress.start() + const iframe = this.refs.content + iframe.onload = () => { + NProgress.done() + } + iframe.onerror = () => { + NProgress.done() + } + iframe.src = this.props.src + } + + render() { + const { title } = this.props + + return
  • diQ8^7)|wY1yMDVNu#G8)8q4hq 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.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