From 53745d5688e12504b7bdbc132d0598e645554ee3 Mon Sep 17 00:00:00 2001 From: zhangye <654600784@qq.com> Date: Fri, 13 Mar 2020 16:41:27 +0800 Subject: [PATCH] ct --- ct/pom.xml | 73 ++ .../java/com/ccsens/ct/CtApplication.java | 24 + .../com/ccsens/ct/api/BusinessController.java | 54 + .../com/ccsens/ct/api/ClockController.java | 51 + .../com/ccsens/ct/api/DebugController.java | 56 + .../com/ccsens/ct/api/SiteController.java | 79 ++ .../com/ccsens/ct/bean/dto/BusinessDto.java | 57 + .../java/com/ccsens/ct/bean/dto/ClockDto.java | 22 + .../java/com/ccsens/ct/bean/dto/SiteDto.java | 56 + .../java/com/ccsens/ct/bean/po/Business.java | 161 +++ .../ccsens/ct/bean/po/BusinessExample.java | 1051 +++++++++++++++++ .../main/java/com/ccsens/ct/bean/po/Site.java | 118 ++ .../com/ccsens/ct/bean/po/SiteClockIn.java | 118 ++ .../ccsens/ct/bean/po/SiteClockInExample.java | 742 ++++++++++++ .../com/ccsens/ct/bean/po/SiteExample.java | 762 ++++++++++++ .../com/ccsens/ct/bean/po/SiteQrcode.java | 106 ++ .../ccsens/ct/bean/po/SiteQrcodeExample.java | 701 +++++++++++ .../com/ccsens/ct/bean/vo/BusinessVo.java | 29 + .../java/com/ccsens/ct/bean/vo/ClockVo.java | 19 + .../java/com/ccsens/ct/bean/vo/SiteVo.java | 44 + .../java/com/ccsens/ct/config/BeanConfig.java | 31 + .../com/ccsens/ct/config/SpringConfig.java | 164 +++ .../ccsens/ct/config/SwaggerConfigure.java | 56 + .../ct/intercept/MybatisInterceptor.java | 154 +++ .../ccsens/ct/persist/dao/BusinessDao.java | 8 + .../ccsens/ct/persist/dao/SiteClockInDao.java | 14 + .../com/ccsens/ct/persist/dao/SiteDao.java | 8 + .../ccsens/ct/persist/dao/SiteQrcodeDao.java | 9 + .../ct/persist/mapper/BusinessMapper.java | 30 + .../ct/persist/mapper/SiteClockInMapper.java | 30 + .../ccsens/ct/persist/mapper/SiteMapper.java | 30 + .../ct/persist/mapper/SiteQrcodeMapper.java | 30 + .../ccsens/ct/service/BusinessService.java | 170 +++ .../com/ccsens/ct/service/ClockService.java | 58 + .../ccsens/ct/service/IBusinessService.java | 13 + .../com/ccsens/ct/service/IClockService.java | 14 + .../com/ccsens/ct/service/ISiteService.java | 21 + .../com/ccsens/ct/service/SiteService.java | 230 ++++ ct/src/main/resources/application-common.yml | 30 + ct/src/main/resources/application-dev.yml | 29 + ct/src/main/resources/application-test.yml | 31 + ct/src/main/resources/application.yml | 4 + ct/src/main/resources/druid-dev.yml | 33 + ct/src/main/resources/druid-prod.yml | 33 + ct/src/main/resources/druid-test.yml | 33 + ct/src/main/resources/logback-spring.xml | 196 +++ .../resources/mapper_dao/SiteClockInDao.xml | 29 + ct/src/main/resources/mapper_dao/SiteDao.xml | 28 + .../resources/mapper_raw/BusinessMapper.xml | 338 ++++++ .../mapper_raw/SiteClockInMapper.xml | 275 +++++ .../main/resources/mapper_raw/SiteMapper.xml | 276 +++++ .../resources/mapper_raw/SiteQrcodeMapper.xml | 258 ++++ .../main/resources/mybatis/mybatis-config.xml | 61 + pom.xml | 1 + .../java/com/ccsens/util/Base64FileUtil.java | 1 + .../main/java/com/ccsens/util/CodeEnum.java | 2 + .../main/java/com/ccsens/util/QrCodeUtil.java | 34 +- .../java/com/ccsens/util/WebConstant.java | 1 + .../test/java/com/ccsens/util/Base64Test.java | 28 +- .../test/java/com/ccsens/util/TestQrCord.java | 34 + 60 files changed, 7129 insertions(+), 19 deletions(-) create mode 100644 ct/pom.xml create mode 100644 ct/src/main/java/com/ccsens/ct/CtApplication.java create mode 100644 ct/src/main/java/com/ccsens/ct/api/BusinessController.java create mode 100644 ct/src/main/java/com/ccsens/ct/api/ClockController.java create mode 100644 ct/src/main/java/com/ccsens/ct/api/DebugController.java create mode 100644 ct/src/main/java/com/ccsens/ct/api/SiteController.java create mode 100644 ct/src/main/java/com/ccsens/ct/bean/dto/BusinessDto.java create mode 100644 ct/src/main/java/com/ccsens/ct/bean/dto/ClockDto.java create mode 100644 ct/src/main/java/com/ccsens/ct/bean/dto/SiteDto.java create mode 100644 ct/src/main/java/com/ccsens/ct/bean/po/Business.java create mode 100644 ct/src/main/java/com/ccsens/ct/bean/po/BusinessExample.java create mode 100644 ct/src/main/java/com/ccsens/ct/bean/po/Site.java create mode 100644 ct/src/main/java/com/ccsens/ct/bean/po/SiteClockIn.java create mode 100644 ct/src/main/java/com/ccsens/ct/bean/po/SiteClockInExample.java create mode 100644 ct/src/main/java/com/ccsens/ct/bean/po/SiteExample.java create mode 100644 ct/src/main/java/com/ccsens/ct/bean/po/SiteQrcode.java create mode 100644 ct/src/main/java/com/ccsens/ct/bean/po/SiteQrcodeExample.java create mode 100644 ct/src/main/java/com/ccsens/ct/bean/vo/BusinessVo.java create mode 100644 ct/src/main/java/com/ccsens/ct/bean/vo/ClockVo.java create mode 100644 ct/src/main/java/com/ccsens/ct/bean/vo/SiteVo.java create mode 100644 ct/src/main/java/com/ccsens/ct/config/BeanConfig.java create mode 100644 ct/src/main/java/com/ccsens/ct/config/SpringConfig.java create mode 100644 ct/src/main/java/com/ccsens/ct/config/SwaggerConfigure.java create mode 100644 ct/src/main/java/com/ccsens/ct/intercept/MybatisInterceptor.java create mode 100644 ct/src/main/java/com/ccsens/ct/persist/dao/BusinessDao.java create mode 100644 ct/src/main/java/com/ccsens/ct/persist/dao/SiteClockInDao.java create mode 100644 ct/src/main/java/com/ccsens/ct/persist/dao/SiteDao.java create mode 100644 ct/src/main/java/com/ccsens/ct/persist/dao/SiteQrcodeDao.java create mode 100644 ct/src/main/java/com/ccsens/ct/persist/mapper/BusinessMapper.java create mode 100644 ct/src/main/java/com/ccsens/ct/persist/mapper/SiteClockInMapper.java create mode 100644 ct/src/main/java/com/ccsens/ct/persist/mapper/SiteMapper.java create mode 100644 ct/src/main/java/com/ccsens/ct/persist/mapper/SiteQrcodeMapper.java create mode 100644 ct/src/main/java/com/ccsens/ct/service/BusinessService.java create mode 100644 ct/src/main/java/com/ccsens/ct/service/ClockService.java create mode 100644 ct/src/main/java/com/ccsens/ct/service/IBusinessService.java create mode 100644 ct/src/main/java/com/ccsens/ct/service/IClockService.java create mode 100644 ct/src/main/java/com/ccsens/ct/service/ISiteService.java create mode 100644 ct/src/main/java/com/ccsens/ct/service/SiteService.java create mode 100644 ct/src/main/resources/application-common.yml create mode 100644 ct/src/main/resources/application-dev.yml create mode 100644 ct/src/main/resources/application-test.yml create mode 100644 ct/src/main/resources/application.yml create mode 100644 ct/src/main/resources/druid-dev.yml create mode 100644 ct/src/main/resources/druid-prod.yml create mode 100644 ct/src/main/resources/druid-test.yml create mode 100644 ct/src/main/resources/logback-spring.xml create mode 100644 ct/src/main/resources/mapper_dao/SiteClockInDao.xml create mode 100644 ct/src/main/resources/mapper_dao/SiteDao.xml create mode 100644 ct/src/main/resources/mapper_raw/BusinessMapper.xml create mode 100644 ct/src/main/resources/mapper_raw/SiteClockInMapper.xml create mode 100644 ct/src/main/resources/mapper_raw/SiteMapper.xml create mode 100644 ct/src/main/resources/mapper_raw/SiteQrcodeMapper.xml create mode 100644 ct/src/main/resources/mybatis/mybatis-config.xml create mode 100644 util/src/test/java/com/ccsens/util/TestQrCord.java diff --git a/ct/pom.xml b/ct/pom.xml new file mode 100644 index 00000000..98d1965c --- /dev/null +++ b/ct/pom.xml @@ -0,0 +1,73 @@ + + + + ccsenscloud + com.ccsens + 1.0-SNAPSHOT + + 4.0.0 + + ct + + + + 1.8 + + + + + + + cloudutil + com.ccsens + 1.0-SNAPSHOT + + + + util + com.ccsens + 1.0-SNAPSHOT + + + + + + + + + org.mybatis.generator + mybatis-generator-maven-plugin + 1.3.7 + + ${basedir}/src/main/resources/mbg.xml + true + + + + mysql + mysql-connector-java + 5.1.34 + + + + + org.springframework.boot + spring-boot-maven-plugin + + com.ccsens.ct.CtApplication + + + + + + repackage + + + + + + + + + diff --git a/ct/src/main/java/com/ccsens/ct/CtApplication.java b/ct/src/main/java/com/ccsens/ct/CtApplication.java new file mode 100644 index 00000000..9dc3b46b --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/CtApplication.java @@ -0,0 +1,24 @@ +package com.ccsens.ct; + +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.servlet.ServletComponentScan; +import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.scheduling.annotation.EnableAsync; + +@MapperScan(basePackages = {"com.ccsens.ct.persist.*"}) +@ServletComponentScan +@EnableAsync +//开启断路器功能 +@EnableCircuitBreaker +@EnableFeignClients(basePackages = "com.ccsens.cloudutil.feign") +@SpringBootApplication(scanBasePackages = "com.ccsens") +public class CtApplication { + + public static void main(String[] args) { + SpringApplication.run(CtApplication.class, args); + } + +} diff --git a/ct/src/main/java/com/ccsens/ct/api/BusinessController.java b/ct/src/main/java/com/ccsens/ct/api/BusinessController.java new file mode 100644 index 00000000..5023efec --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/api/BusinessController.java @@ -0,0 +1,54 @@ +package com.ccsens.ct.api; + +import com.ccsens.cloudutil.annotation.MustLogin; +import com.ccsens.ct.bean.dto.BusinessDto; +import com.ccsens.ct.bean.vo.BusinessVo; +import com.ccsens.ct.service.IBusinessService; +import com.ccsens.util.JsonResponse; +import com.ccsens.util.bean.dto.QueryDto; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; +@Slf4j +@Api(tags = "商户相关" , description = "") +@RestController +@RequestMapping("/business") +public class BusinessController { + @Autowired + private IBusinessService businessService; + + @MustLogin + @ApiOperation(value = "上传商户信息", notes = "") + @RequestMapping(value = "upload", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse uploadBusiness(@ApiParam @Validated @RequestBody QueryDto params) throws Exception { + log.info("上传商户信息:{}",params); + BusinessVo.BusinessInfo businessInfo = businessService.uploadBusiness(params); + return JsonResponse.newInstance().ok(businessInfo); + } + + @MustLogin + @ApiOperation(value = "查询商户信息", notes = "") + @RequestMapping(value = "info", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse selectBusiness(@ApiParam @Validated @RequestBody QueryDto params) throws Exception { + log.info("查询商户信息:{}",params); + BusinessVo.BusinessInfo businessInfo = businessService.selectBusiness(params); + return JsonResponse.newInstance().ok(businessInfo); + } + + @MustLogin + @ApiOperation(value = "修改商户信息", notes = "") + @RequestMapping(value = "update", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse updateBusiness(@ApiParam @Validated @RequestBody QueryDto params) throws Exception { + log.info("修改商户信息:{}",params); + BusinessVo.BusinessInfo businessInfo = businessService.updateBusiness(params); + + return JsonResponse.newInstance().ok(businessInfo); + } +} diff --git a/ct/src/main/java/com/ccsens/ct/api/ClockController.java b/ct/src/main/java/com/ccsens/ct/api/ClockController.java new file mode 100644 index 00000000..820b26f6 --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/api/ClockController.java @@ -0,0 +1,51 @@ +package com.ccsens.ct.api; + +import com.ccsens.cloudutil.annotation.MustLogin; +import com.ccsens.ct.bean.dto.BusinessDto; +import com.ccsens.ct.bean.dto.ClockDto; +import com.ccsens.ct.bean.dto.SiteDto; +import com.ccsens.ct.bean.vo.ClockVo; +import com.ccsens.ct.bean.vo.SiteVo; +import com.ccsens.ct.service.IClockService; +import com.ccsens.util.JsonResponse; +import com.ccsens.util.bean.dto.QueryDto; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@Slf4j +@Api(tags = "打卡相关" , description = "") +@RestController +@RequestMapping("/clock") +public class ClockController { + @Autowired + private IClockService clockService; + + @MustLogin + @ApiOperation(value = "打卡", notes = "") + @RequestMapping(value = "", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse clockIn(@ApiParam @Validated @RequestBody QueryDto params) throws Exception { + log.info("打卡:{}",params); + clockService.clockIn(params); + return JsonResponse.newInstance().ok(); + } + + @MustLogin + @ApiOperation(value = "统计", notes = "") + @RequestMapping(value = "statistics", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse> clockStatistics(@ApiParam @Validated @RequestBody QueryDto params) throws Exception { + log.info("打卡:{}",params); + List clockStatisticsList = clockService.clockStatistics(params.getParam().getId(),params.getUserId()); + return JsonResponse.newInstance().ok(clockStatisticsList); + } + +} diff --git a/ct/src/main/java/com/ccsens/ct/api/DebugController.java b/ct/src/main/java/com/ccsens/ct/api/DebugController.java new file mode 100644 index 00000000..03b26cb8 --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/api/DebugController.java @@ -0,0 +1,56 @@ +package com.ccsens.ct.api; + +import com.ccsens.util.Base64FileUtil; +import com.ccsens.util.JsonResponse; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@Api(tags = "DEBUG" , description = "DebugController | ") +@RestController +@RequestMapping("/debug") +public class DebugController { + + + @ApiOperation(value = "/测试",notes = "") + @ApiImplicitParams({ + }) + @RequestMapping(value="",method = RequestMethod.GET,produces = {"application/json;charset=UTF-8"}) + public JsonResponse debug(HttpServletRequest request) throws Exception { + + return JsonResponse.newInstance().ok("测试"); + } + + + @ApiOperation(value = "/测试",notes = "") + @ApiImplicitParams({ + }) + @RequestMapping(value="base",method = RequestMethod.GET,produces = {"application/json;charset=UTF-8"}) + public JsonResponse base(HttpServletRequest request) throws Exception { + String aaa = Base64FileUtil.base64ToFile("iVBORw0KGgoAAAANSUhEUgAAB4AAAANZCAYAAADu3CMyAAAgAElEQVR4Xuzd26ttWX4X8F/23ud01Ul3p6ra9C1qgiImJgEvREVBieBLK/hiKybaBp9MGlEICvoHKKiIgp34JCZqhCQPviSCDwYFhUggQdsWxVvU9C12dfWlTlXXOUdl1Fmza5199t5rzjVvY/zGZ0NT1XXmmnP8Pr/fPuy1v2vM+Q3hiwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRSCHxDiioUQYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIhADYEBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQSCIgAE7SSGUQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBAAGwGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkERAAJykkcogQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAANgMECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIImAADhJI5VBgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAbAZIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQBIBAXCSRiqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECAmAzQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgSQCAuAkjVQGAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEBMBmgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkkEBMBJGqkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQICIDNAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJIICICTNFIZBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQEACbAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCQREAAnaaQyCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgIAA2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEEgiIABO0khlECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAQABsBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJBEQACcpJHKIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgADYDBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCCJgAA4SSOVQYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQGwGSBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEASAQFwkkYqgwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgJgM0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEkAgLgJI1UBgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBATAZoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJJBATASRqpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECAiAzQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSSCAiAkzRSGQQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBAAmwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgkERAAJ2mkMggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQICAANgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBIIiAATtJIZRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQEAAbAYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCQREAAnKSRyiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAA2AwQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEAgiYAAOEkjlUGAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEBsBkgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAEgEBcJJGKoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQICYDNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBJAIC4CSNVAYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQEwGaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECSQQEwEkaqQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgIgM0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEkggIgJM0UhkECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAQAJsBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIJBEQACdppDIIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAgADYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQSCIgAE7SSGUQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBAAGwGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkERAAJykkcogQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAANgMECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIImAADhJI5VBgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAbAZIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQBIBAXCSRiqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECAmAzQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgSQCAuAkjVQGAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEBMBmgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkkEBMBJGqkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQICIDNAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJIICICTNFIZBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQEACbAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCQREAAnaaQyCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgIAA2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEEgiIABO0khlECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAQABsBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJBEQACcpJHKIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgADYDBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCCJgAA4SSOVQYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQGwGSBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEASAQFwkkYqgwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgJgM0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEkAgLgJI1UBgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBATAZoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJJBATASRqpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECAiAzQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSSCAiAkzRSGQQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBAAmwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgkERAAJ2mkMggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQICAANgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBIIiAATtJIZRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQEAAbAYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCQREAAnKSRyiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAA2AwQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEAgiYAAOEkjlUGAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEBsBkgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAEgEBcJJGKoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQICYDNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBJAIC4CSNVAYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQEwGaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECSQQEwEkaqQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgIgM0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEkggIgJM0UhkECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAQAJsBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIJBEQACdppDIIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAgADYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQSCIgAE7SSGUQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBAAGwGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkERAAJykkcogQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAANgMECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIImAADhJI5VBgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAbAZIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQBIBAXCSRiqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECAmAzQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgSQCAuAkjVQGAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEBMBmgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkkEBMBJGqkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQICIDNAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJIICICTNFIZBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQEACbAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCQREAAnaaQyCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgIAA2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEEgiIABO0khlECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAQABsBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJBEQACcpJHKIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgADYDBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCCJgAA4SSOVQYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQGwGSBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEASAQFwkkYqgwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgJgM0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEkAgLgJI1UBgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBATAZoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJJBATASRqpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECAiAzQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSSCAiAkzRSGQQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBAAmwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgkERAAJ2mkMggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQICAANgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBIIiAATtJIZRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQEAAbAYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCQREAAnKSRyiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAA2AwQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEAgiYAAOEkjlUGAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEBsBkgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAEgEBcJJGKoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQICYDNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBJAIC4CSNVAYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQEwGaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECSQQEwEkaqQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgIgM0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEkggIgJM0UhkECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAQAJsBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIJBEQACdppDIIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAgADYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQSCIgAE7SSGUQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBAAGwGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkERAAJykkcogQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAANgMECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIImAADhJI5VBgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAbAZIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQBIBAXCSRiqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECAmAzQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgSQCAuAkjVQGAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEBMBmgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkkEBMBJGqkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQICIDNAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJIICICTNFIZBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQEACbAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCQREAAnaaQyCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgIAA2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEEgiIABO0khlECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAQABsBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJBEQACcpJHKIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgADYDBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCCJgAA4SSOVQYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQGwGSBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEASAQFwkkYqgwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgJg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AQIECOwucFt4uFWouDtA4wvYOqwfQuDCVmbkzYh40Lih5RMgQIAAAQIECBAgQIAAAQIE7hQQABsQAgQIECBAgACBlgTueg5w+bOLlorpcK173a77OAgewmCz0uEAKpkAAQIECBAgQIAAAQIECPQgIADuoctqJECAAAECBAjkESghb/m6/vYoxuoAACAASURBVHPsXsFiHtltKtni+b93VfIwIl44mh8fGtim765CgAABAgQIECBAgAABAgQIbCggAN4Q26UIECBAgAABAgRmC9wWAJcT7x0uzi4u+QleP9x++Y1KbsPs9tDJB055BAgQIECAAAECBAgQIECgVwEBcK+dVzcBAgQIECBAoE2BuwJgu4Dr7mmt/XF76LrnxuoIECBAgAABAgQIECBAgACBiQIC4IlgDidAgAABAgQIENhV4K4AuCzMLuBd23PnxWvvjdtD1zs7VkaAAAECBAgQIECAAAECBAhMEBAAT8ByKAECBAgQIECAwO4CpwLgWneZ7g638wJKuPpiRNRy++dTHNdvD13+/9WpF/lzAgQIECBAgAABAgQIECBAgEANAgLgGrpgDQQIECBAgAABAmMFTgXAX46I90TEVyLivWNP6rjVBVoN5q/fHrpAlRkUCK8+Mi5AgAABAgQIECBAgAABAgQInCsgAD5XzusIECBAgAABAgT2EDgVAA8BXTnuYo8FuuaNArXf/nlM2x4fZur6eyizNkbPMQQIECBAgAABAgQIECBAgMBmAgLgzahdiAABAgQIECBAYAGBMQFwq7tNF+Cp8hSt3f55LOL1QFgQPFbOcQQIECBAgAABAgQIECBAgMCqAgLgVXmdnAABAgQIECBAYGGBMQFwuWSGHacL0+12uh4Cec8M3m28XJgAAQIECBAgQIAAAQIECBC4LiAANhMECBAgQIAAAQItCUwJgEtdft7dv7s9hfG3PTPY7cj3n0MrIECAAAECBAgQIECAAAEC3Qj4hVg3rVYoAQIECBAgQCCFgAC4vTaWnpXbJd9rb+mzVnx8i2i3h55F6cUECBAgQIAAAQIECBAgQIDAFAEB8BQtxxIgQIAAAQIECOwtMDYAHnZiCt727diTiCi7X3t+32EW951BVydAgAABAgQIECBAgAABAt0J9PyLmO6arWACBAgQIECAQAKBsQFwKVXwtn/Dp/Rr/9Wut4LjWSz/frXepZyZAAECBAgQIECAAAECBAgQ6F1AANz7BKifAAECBAgQINCWwNRAcQje/Ny7T59Lv0oPLve5fFVXve35wG9GxIOqVmoxBAgQIECAAAECBAgQIECAQNMCfhHWdPssngABAgQIECDQncDUAPgLEfFKRLwaEe/rTmvfgh8ddrp6z/F8H46fDzz8aZltYfC+M+vqBAgQIECAAAECBAgQIEAghYBfxqRooyIIECBAgAABAt0ITA2AC0x5jWcBbz8idl+PM389Il689pxk8zrOzlEECBAgQIAAAQIECBAgQIDADQICYGNBgAABAgQIECDQksA5AbAgcp8OC96nuz+MiBeOwmBB8HRDryBAgAABAgQIECBAgAABAt0LCIC7HwEABAgQIECAAIGmBM4JgEuBwsht2yx0n+99/MxgQfB8T2cgQIAAAQIECBAgQIAAAQLdCAiAu2m1QgkQIECAAAECKQTODYCHME2Qtv4YlOfbXkbEk8MzgNe/Yu4rHAfBpVKuufutOgIECBAgQIAAAQIECBAgMFtAADyb0AkIECBAgAABAgQ2FDg3AC5LtCt1m0bZbb2O8xCsD2f3YYZ1nJ2VAAECBAgQIECAAAECBAg0LyAAbr6FCiBAgAABAgQIdCUwJwD+fER8c0T8akS8vyu17YoVsm9j7fbQ2zi7CgECBAgQIECAAAECBAgQaFJAANxk2yyaAAECBAgQINCtwJwAuKDZnbru6PBd1/f62QXB23q7GgECBAgQIECAAAECBAgQaEJAANxEmyySAAECBAgQIEDgIDA3APYs4PVG6dHhmb8fjYifXu8yznyDgCDYWBAgQIAAAQIECBAgQIAAAQJfFxAAGwYCBAgQIECAAIGWBOYGwKVWIfA6HXf753Vcp5z1OAg+fp3nBU9RdCwBAgQIECBAgAABAgQIEGhcQADceAMtnwABAgQIECDQmcASAbAQeJ2hKb0pAeTlOqd31gkCguAJWA4lQIAAAQIECBAgQIAAAQLZBATA2TqqHgIECBAgQIBAboGlAuDjENjPxPNn5klEXEQEy/mWa53h+m2i34yIB2tdzHkJECBAgAABAgQIECBAgACB/QT8gmY/e1cmQIAAAQIECBCYLrBkAPzZiPhARHwuIj44fSlecSRQ+uI2w22MxPXdwfrWRt+skgABAgQIECBAgAABAgQIjBYQAI+mciABAgQI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banaqRgCBAgQIECAQFMCQzBZbgF9v6mV17vYm8JeYVa9/bKy+gTc/rm+nlgRAQIECBAgQIAAAQIECEwUEABPBHM4AQIECBAgQIDAYgKCycUonznRlyLivYf/Up5h6lmm6zg7a04Bt3/O2VdVESBAgAABAgQIECBAoCsBAXBX7VYsAQIECBAgQKAagccRcenWz6v2Y7i9drnIk4i4WvVqTk4gh4APpuTooyoIECBAgAABAgQIECDQtYAAuOv2K54AAQIECBAgsJuAZ/9uQ38cAg9XLP/tYpvLuwqBpgTs/m2qXRZLgAABAgQIECBAgAABArcJCIDNBgECBAgQIECAwB4CJYS0K3Vd+ethVtl1XYLf4T1A+fOyC9sXAQJPBez+NQkECBAgQIAAAQIECBAgkEJAAJyijYogQIAAAQIECDQlYJfd+u16dLjl8227fYcelJV8KiK+c/0luQKBqgX8vVR1eyyOAAECBAgQIECAAAECBKYICICnaDmWAAECBAgQIEBgrsCrEfHyYaed2xDP1bz99WN2Mpbg9zsOp3Bb6PV64cxtCIz5nmmjEqskQIAAAQIECBAgQIAAge4FBMDdjwAAAgQIECBAgMCmAp79uz73VONyK+7rYbxAeP0+uUI9AuX26OV26N4f19MTKyFAgAABAgQIECBAgACBGQLe4M7A81ICBAgQIECAAIFJAsMtVl877AKe9GIHjxIYjMstoO+PesU7Bx3fFnr4r4LgiYgOb1Jg6ocmmizSogkQIECAAAECBAgQIECgHwEBcD+9VikBAgQIECBAYE8Bt35eX38IcJcKbY8D4aXOub6CKxCYLlDmu+yEv5r+Uq8gQIAAAQIECBAgQIAAAQL1CQiA6+uJFREgQIAAAQIEMgrYYbduV5cOf49Xe31n8FsR8a51y3F2ApsJDPPtvfFm5C5EgAABAgQIECBAgAABAmsLeJO7trDzEyBAgAABAgQIuPXz+jNQAva1d+l+7dptpde+3vpqrkDg6feNWTYJBAgQIECAAAECBAgQIJBKQACcqp2KIUCAAAECBAhUKSBgWbcte+xgvH576Dci4hvXLdPZCSwusMf3zuJFOCEBAgQIECBAgAABAgQIELguIAA2EwQIECBAgAABAmsKuPXzmroRjw7PLd1rB+P120OXastafjwifmDd0p2dwGwBH06ZTegEBAgQIECA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IECAAAECBAgQIECAAIFnBQTAJoIAAQIECBAgQOC6gJByvZmwO/F22z8SEf/U86bXG74OzuwDBB00WYkECBAgQIAAAQIECBAgcFpAAHzayBEECBAgQIAAgd4EhJTrdFw4dberW46vM3c9ndXfXT11W60ECBAgQIAAAQIECBAgcKuAANhwECBAgAABAgQIHAsIKdebB+HU7bbD3H00In56vRY4c2KBhxHxots/J+6w0ggQIECAAAECBAgQIEBgtIAAeDSVAwkQIECAAAECXQgIKddps2D9bldzt87c9XRW32M9dVutBAgQIECAAAECBAgQIHCngADYgBAgQIAAAQIECAwCdtCtMwvDrY3LPy/WuUTzZy02n46Ib2m+EgXsJeBDBHvJuy4BAgQIECBAgAABAgQIVCcgAK6uJRZEgAABAgQIENhNwA665emFv6dNfyUiPhwR3puctnLEzQKPI+LSDBkPAgQIECBAgAABAgQIECDwVMAvWUwCAQIECBAgQIBAEXg1Il6OCLtUl52HIQD2c/ftrj54sOzM9Xg232c9dl3NBAgQIECAAAECBAgQIHCrgF9EGQ4CBAgQIECAAIEiIEBZZw6Em3e7Dj4+eLDO/PVy1jI/TyLiqpeC1UmAAAECBAgQIECAAAECBO4SEACbDwIECBAgQIAAgSGEe+2wC5jIsgKeTXqzp/B32Tnr9Ww+ZNFr59VNgAABAgQIECBAgAABArcKCIANBwECBAgQIECAgIBy3RkYAqpylZ+MiD++7uWaObu5a6ZVVS/UHFXdHosjQIAAAQIECBAgQIAAgT0EBMB7qLsmAQIECBAgQKAeAbvntulFCX4/eriU2x0/hSgOX4iIX7NNC1wlqYAAOGljlUWAAAECBAgQIECAAAEC5wsIgM+380oCBAgQIECAQAYB4cm2XXTb46fe/yci3hcR3o9sO38Zr1b+DnsUEfczFqcmAgQIECBAgAABAgQIECBwjoBfuJyj5jUECBAgQIAAgRwCdv/u00chcITZ22f2sl31rYi454ME2dqqHgIECBAgQIAAAQIECBCYKyAAnivo9QQIECBAgACBNgXKjrmrw214L9osoelV9x4C23ne9PhWs3gfJKimFRZCgAABAgQIECBAgAABAjUJCIBr6oa1ECBAgAABAgS2ExDAbWd925V6DYE/ERE/FBE/EhEf378NVtCw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cm+BMo9u5b13F1yfAAECBAgQIECAAAECBNIIZPmFT5qGKIQAAQIECBAgcBAYArryzwsqBBYUyHDr59s4fN8sOCgbnerxYRe696YbgbsMAQIECBAgQIAAAQIECOQX8CY7f49VSIAAAQIECLQr4Na27fau5pVnv92u75uap+/5tWX+QEJbnbBaAgQIECBAgAABAgQIEEgjIABO00qFECBAgAABAkkF3BI6aWN3KquXsO34ltDl31/aydtlTwtk/0DCaQFHECBAgAABAgQIECBAgACBhQUEwAuDOh0BAgQIECBAYCUBt7ZdCbaj0w632u3pWau+b+oe8F4+kFB3F6yOAAECBAgQIECAAAECBNIJCIDTtVRBBAgQIECAQGKBISwpJXo2cOJGr1Rarzstj79vvhgRr6zk67TTBYaA3vvS6XZeQYAAAQIECBAgQIAAAQIEbhXwRttwECBAgAABAgTaExAEt9ezvVdsp+XTD02ULx+e2Hsa37m+ALieXlgJAQIECBAgQIAAAQIECCQSEAAnaqZSCBAgQIAAge4EBMHdtfzsgnvd/XsdrNz++uLwH8v3z+XZol64hIAAeAlF5yBAgAABAgQIECBAgAABAtcEBMBGggABAgQIECDQvsAQBNvZ2H4v16jA7t/nVY8/POE90RpTN+6cAuBxTo4iQIAAAQIECBAgQIAAAQKTBPyyYxKXgwkQIECAAAEC1QoIgattza4L+x8R8a0RYbfr8214NSJePvxnH57YZ0wFwPu4uyoBAgQIECBAgAABAgQIJBcQACdvsPIIECBAgACBrgSEwF21e1SxArbTTL5vThutdYT5XEvWeQkQIECAAAECBAgQIECgawEBcNftVzwBAgQIECCQUECYlbCpZ5Y0PO/2lyPi2848Ry8vO342sPdI23VdALydtSsRIECAAAECBAgQIECAQEcCfrnRUbOVSoAAAQIECHQjcPx80xJsXXVTuUKPBUq45tbG42fiH0fE9x0O/4mI+P7xL3XkmQJm9Ew4LyNAgAABAgQIECBAgAABAncJCIDNBwECBAgQIEAgr4DdwHl7e6qyofd+3j8l9fyfD7tSPTd5ut2UV/xKRHw4Ij4dEd8y5YWOJUCAAAECBAgQIECAAAECBO4W8AshE0KAAAECBAgQyC3wOCIuDyXaDZq718fV2Vk5r9c+PDHPb8yrfUhhjJJj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+Pjw5K/kggQIECBAgAABAgQIECBAgMDZAgrgswldgAABAgQIECBAYMUCU90FfDPJtST/SvLuFXs4OoF7Cfw+yaeTPLP7pP1/qREgQIAAAQIECBAgQIAAAQILElAALygMRyFAgAABAgQIEJhFYIq7gKe4xizDe1ECBAgQIECAAAECBAgQIECAAIEuAQVwV56mIUCAAAECBAgQOF5gfxfwKHHHXbzHfkx1F/Gxr+vzCRAgQIAAAQIECBAgQIAAAQIECLxDQAFsKQgQIECAAAECBAgk55TA7v61QQQIECBAgAABAgQIECBAgAABAosRUAAvJgoHIUCAAAECBAgQmFng1BJYATxzcF6eAAECBAgQIECAAAECBAgQIEDgloAC2DYQIECAAAECBAgQuCVwyuOcRwH8ZpKHQRIgQIAAAQIECBAgQIAAAQIECBCYW0ABPHcCXp8AAQIECBAgQGBpAsfc0ftGkoeS+Ll6aSk6DwECBAgQIECAAAECBAgQIEBgowL+oWqjwRubAAECBAgQIEDgSoFj7gI+5nOREyBAgAABAgQIECBAgAABAgQIELi4gAL44sRegAABAgQIECBAYIUCh94FrABeYbiOTIAAAQIECBAgQIAAAQIECBBoFlAAN6drNgIECBAgQIAAgVMFDi12Dy2KTz2HryNAgAABAgQIECBAgAABAgQIECBwlIAC+Cgun0yAAAECBAgQILAhgfuVu4eWxBsiMyoBAgQIECBAgAABAgQIECBAgMDcAgrguRPw+gQIECBAgAABAksV2Be8owi+dpdD3q8gXupczkWAAAECBAgQIECAAAECBAgQIFAsoAAuDtdoBAgQIECAAAECZwuMknd83Plzs7t/z6Z1AQIECBAgQIAAAQIECBAgQIAAgUsIKIAvoeqaBAgQIECAAAECLQJX3QXs7t+WhM1BgAABAgQIECBAgAABAgQIECgTUACXBWocAgQIECBAgACByQXuvAvY3b+TE7sgAQIECBAgQIAAAQIECBAgQIDAVAIK4KkkXYcAAQIECBAgQKBV4M67gN3925q0uQgQIECAAAECBAgQIECAAAECBQIK4IIQjUCAAAECBAgQIHBxgf1dwOO/42doP0dfnNwLECBAgAABAgQIECBAgAABAgQInCLgH65OUfM1BAgQIECAAAECWxS4vQS+tkUAMxMgQIAAAQIECBAgQIAAAQIECCxfQAG8/IyckAABAgQIECBAYDkC43HQyt/l5OEkBAgQIECAAAECBAgQIECAAAECdwgogK0EAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIKxD0W4AABspSURBVECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRKB/wJpvi3SoNa7CwAAAABJRU5ErkJggg==\n", + "/home","2233552"); + return JsonResponse.newInstance().ok(aaa); + } + +// @ApiOperation(value = "/测试二维码",notes = "") +// @ApiImplicitParams({ +// }) +// @RequestMapping(value="qrcode",method = RequestMethod.GET,produces = {"application/json;charset=UTF-8"}) +// public JsonResponse qrcode(HttpServletRequest request) throws Exception { +// WxXcxUtil.LineColor color = new WxXcxUtil.LineColor(); +// color.r = "243"; +// color.g = "139"; +// color.b = "0"; +// WxXcxUtil.getWxCode("pages/index/index" +// ,"d=1218855229722857472",color,"/home/cloud/tall/uploads/qrCode/00112.png"); +//// WxXcxUtil.getWxCodeTest("pages/index/index?t=eyJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE1ODM4MDc3MzcsInN1YiI6IjEyMTg4NTUyMjk3MjI4NTc0NzIiLCJhdXRoSWQiOiIxMTc3MDQwNjY" +//// ,"d=1217647686598135808",color,"/home/cloud/tall/uploads/qrCode/158357267174.png"); +// +// return JsonResponse.newInstance().ok("完成"); +// } +} diff --git a/ct/src/main/java/com/ccsens/ct/api/SiteController.java b/ct/src/main/java/com/ccsens/ct/api/SiteController.java new file mode 100644 index 00000000..d6403e44 --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/api/SiteController.java @@ -0,0 +1,79 @@ +package com.ccsens.ct.api; + +import com.ccsens.cloudutil.annotation.MustLogin; +import com.ccsens.ct.bean.dto.BusinessDto; +import com.ccsens.ct.bean.dto.SiteDto; +import com.ccsens.ct.bean.po.Site; +import com.ccsens.ct.bean.vo.BusinessVo; +import com.ccsens.ct.bean.vo.SiteVo; +import com.ccsens.ct.service.ISiteService; +import com.ccsens.util.JsonResponse; +import com.ccsens.util.bean.dto.QueryDto; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@Slf4j +@Api(tags = "场所相关" , description = "") +@RestController +@RequestMapping("/sites") +public class SiteController { + @Autowired + private ISiteService siteService; + + @MustLogin + @ApiOperation(value = "添加场所", notes = "") + @RequestMapping(value = "", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse uploadSite(@ApiParam @Validated @RequestBody QueryDto params) throws Exception { + log.info("添加场所:{}",params); + SiteVo.SiteInfoVo siteInfoVo = siteService.addSite(params); + return JsonResponse.newInstance().ok(siteInfoVo); + } + + @MustLogin + @ApiOperation(value = "透过id查看单个场所的信息", notes = "") + @RequestMapping(value = "siteId", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse selectSite(@ApiParam @Validated @RequestBody QueryDto params) throws Exception { + log.info("透过id查看单个场所的信息:{}",params); + SiteVo.SiteInfo siteInfo = siteService.selectSiteById(params.getParam().getId()); + return JsonResponse.newInstance().ok(siteInfo); + } + + @MustLogin + @ApiOperation(value = "修改场所信息", notes = "") + @RequestMapping(value = "update", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse updateSiteInfo(@ApiParam @Validated @RequestBody QueryDto params) throws Exception { + log.info("修改场所信息:{}",params); + SiteVo.SiteInfo siteInfoVo = siteService.updateSiteInfo(params); + return JsonResponse.newInstance().ok(siteInfoVo); + } + + + + @MustLogin + @ApiOperation(value = "透过商户id查看所有场所的信息", notes = "") + @RequestMapping(value = "siteAll", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse selectSiteAllByBusinessId(@ApiParam @Validated @RequestBody QueryDto params) throws Exception { + log.info("透过商户id查看所有场所的信息:{}",params); + SiteVo.SiteInfoVo siteInfoVo = siteService.selectSiteAllByBusinessId(params); + return JsonResponse.newInstance().ok(siteInfoVo); + } + +// @MustLogin +// @ApiOperation(value = "下载二维码", notes = "") +// @RequestMapping(value = "qrcode", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) +// public JsonResponse downloadQrCode(@ApiParam @Validated @RequestBody QueryDto params) throws Exception { +// log.info("下载二维码:{}",params); +// String path = siteService.downloadQrCode(params.getParam().getId()); +// return JsonResponse.newInstance().ok(path); +// } +} diff --git a/ct/src/main/java/com/ccsens/ct/bean/dto/BusinessDto.java b/ct/src/main/java/com/ccsens/ct/bean/dto/BusinessDto.java new file mode 100644 index 00000000..2fa886bd --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/bean/dto/BusinessDto.java @@ -0,0 +1,57 @@ +package com.ccsens.ct.bean.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class BusinessDto { + + @Data + @ApiModel("上传商户信息") + public static class BusinessInfo{ + @ApiModelProperty("商户名称") + private String name; + @ApiModelProperty("详细地址") + private String address; + @ApiModelProperty("申请人姓名") + private String applicantName; + @ApiModelProperty("身份证号") + private String idCard; + @ApiModelProperty("手机号") + private String phone; + @ApiModelProperty("营业执照") + private String businessLicense; + @ApiModelProperty("公众号二维码") + private String qrCode; + } + + @Data + @ApiModel("商户id") + public static class BusinessId{ + @ApiModelProperty("商户id") + private Long id; + } + + + @Data + @ApiModel("修改商户信息") + public static class UpdateBusiness{ + @ApiModelProperty("商户id") + private Long id; + @ApiModelProperty("商户名称") + private String name; + @ApiModelProperty("详细地址") + private String address; + @ApiModelProperty("申请人姓名") + private String applicantName; + @ApiModelProperty("身份证号") + private String idCard; + @ApiModelProperty("手机号") + private String phone; + @ApiModelProperty("营业执照") + private String businessLicense; + @ApiModelProperty("公众号二维码") + private String qrCode; + } +} diff --git a/ct/src/main/java/com/ccsens/ct/bean/dto/ClockDto.java b/ct/src/main/java/com/ccsens/ct/bean/dto/ClockDto.java new file mode 100644 index 00000000..73f99406 --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/bean/dto/ClockDto.java @@ -0,0 +1,22 @@ +package com.ccsens.ct.bean.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class ClockDto { + + @Data + @ApiModel("打卡") + public static class ClockIn{ + @ApiModelProperty("二维码的id") + private Long id; + @ApiModelProperty("经度") + private BigDecimal longitude; + @ApiModelProperty("纬度") + private BigDecimal latitude; + } +} diff --git a/ct/src/main/java/com/ccsens/ct/bean/dto/SiteDto.java b/ct/src/main/java/com/ccsens/ct/bean/dto/SiteDto.java new file mode 100644 index 00000000..0b29541e --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/bean/dto/SiteDto.java @@ -0,0 +1,56 @@ +package com.ccsens.ct.bean.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.util.List; + +@Data +public class SiteDto { + @Data + @ApiModel("添加场所") + public static class SiteInfoDto{ + @ApiModelProperty("所属商户id") + @NotNull(message = "商户id不能为空") + private Long id; + @ApiModelProperty("场所信息") + private List siteInfo; + } + + @Data + @ApiModel("添加场所") + public static class SiteInfo{ + @ApiModelProperty("场所名") + @NotEmpty(message = "场所名不能为空") + private String siteName; + @ApiModelProperty("经度") + private BigDecimal longitude; + @ApiModelProperty("纬度") + private BigDecimal latitude; + } + + @Data + @ApiModel("修改场所信息") + public static class UpdateSite{ + @ApiModelProperty("场所id") + private Long id; + @ApiModelProperty("场所名") + private String siteName; + @ApiModelProperty("经度") + private BigDecimal longitude; + @ApiModelProperty("纬度") + private BigDecimal latitude; + } + + + @Data + @ApiModel("场所id") + public static class SiteId{ + @ApiModelProperty("场所id") + private Long id; + } +} diff --git a/ct/src/main/java/com/ccsens/ct/bean/po/Business.java b/ct/src/main/java/com/ccsens/ct/bean/po/Business.java new file mode 100644 index 00000000..4e1c9af4 --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/bean/po/Business.java @@ -0,0 +1,161 @@ +package com.ccsens.ct.bean.po; + +import java.io.Serializable; +import java.util.Date; + +public class Business implements Serializable { + private Long id; + + private String name; + + private String address; + + private String applicantName; + + private String applicantIdCard; + + private String applicantPhone; + + private String businessLicense; + + private String qrCord; + + private Long userId; + + private Byte passed; + + private Date createdAt; + + private Date updatedAt; + + private Byte recStatus; + + private static final long serialVersionUID = 1L; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name == null ? null : name.trim(); + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address == null ? null : address.trim(); + } + + public String getApplicantName() { + return applicantName; + } + + public void setApplicantName(String applicantName) { + this.applicantName = applicantName == null ? null : applicantName.trim(); + } + + public String getApplicantIdCard() { + return applicantIdCard; + } + + public void setApplicantIdCard(String applicantIdCard) { + this.applicantIdCard = applicantIdCard == null ? null : applicantIdCard.trim(); + } + + public String getApplicantPhone() { + return applicantPhone; + } + + public void setApplicantPhone(String applicantPhone) { + this.applicantPhone = applicantPhone == null ? null : applicantPhone.trim(); + } + + public String getBusinessLicense() { + return businessLicense; + } + + public void setBusinessLicense(String businessLicense) { + this.businessLicense = businessLicense == null ? null : businessLicense.trim(); + } + + public String getQrCord() { + return qrCord; + } + + public void setQrCord(String qrCord) { + this.qrCord = qrCord == null ? null : qrCord.trim(); + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public Byte getPassed() { + return passed; + } + + public void setPassed(Byte passed) { + this.passed = passed; + } + + public Date getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Date createdAt) { + this.createdAt = createdAt; + } + + public Date getUpdatedAt() { + return updatedAt; + } + + public void setUpdatedAt(Date updatedAt) { + this.updatedAt = updatedAt; + } + + public Byte getRecStatus() { + return recStatus; + } + + public void setRecStatus(Byte recStatus) { + this.recStatus = recStatus; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(getClass().getSimpleName()); + sb.append(" ["); + sb.append("Hash = ").append(hashCode()); + sb.append(", id=").append(id); + sb.append(", name=").append(name); + sb.append(", address=").append(address); + sb.append(", applicantName=").append(applicantName); + sb.append(", applicantIdCard=").append(applicantIdCard); + sb.append(", applicantPhone=").append(applicantPhone); + sb.append(", businessLicense=").append(businessLicense); + sb.append(", qrCord=").append(qrCord); + sb.append(", userId=").append(userId); + sb.append(", passed=").append(passed); + sb.append(", createdAt=").append(createdAt); + sb.append(", updatedAt=").append(updatedAt); + sb.append(", recStatus=").append(recStatus); + sb.append("]"); + return sb.toString(); + } +} \ No newline at end of file diff --git a/ct/src/main/java/com/ccsens/ct/bean/po/BusinessExample.java b/ct/src/main/java/com/ccsens/ct/bean/po/BusinessExample.java new file mode 100644 index 00000000..fa1a8862 --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/bean/po/BusinessExample.java @@ -0,0 +1,1051 @@ +package com.ccsens.ct.bean.po; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class BusinessExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public BusinessExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andNameIsNull() { + addCriterion("name is null"); + return (Criteria) this; + } + + public Criteria andNameIsNotNull() { + addCriterion("name is not null"); + return (Criteria) this; + } + + public Criteria andNameEqualTo(String value) { + addCriterion("name =", value, "name"); + return (Criteria) this; + } + + public Criteria andNameNotEqualTo(String value) { + addCriterion("name <>", value, "name"); + return (Criteria) this; + } + + public Criteria andNameGreaterThan(String value) { + addCriterion("name >", value, "name"); + return (Criteria) this; + } + + public Criteria andNameGreaterThanOrEqualTo(String value) { + addCriterion("name >=", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLessThan(String value) { + addCriterion("name <", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLessThanOrEqualTo(String value) { + addCriterion("name <=", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLike(String value) { + addCriterion("name like", value, "name"); + return (Criteria) this; + } + + public Criteria andNameNotLike(String value) { + addCriterion("name not like", value, "name"); + return (Criteria) this; + } + + public Criteria andNameIn(List values) { + addCriterion("name in", values, "name"); + return (Criteria) this; + } + + public Criteria andNameNotIn(List values) { + addCriterion("name not in", values, "name"); + return (Criteria) this; + } + + public Criteria andNameBetween(String value1, String value2) { + addCriterion("name between", value1, value2, "name"); + return (Criteria) this; + } + + public Criteria andNameNotBetween(String value1, String value2) { + addCriterion("name not between", value1, value2, "name"); + return (Criteria) this; + } + + public Criteria andAddressIsNull() { + addCriterion("address is null"); + return (Criteria) this; + } + + public Criteria andAddressIsNotNull() { + addCriterion("address is not null"); + return (Criteria) this; + } + + public Criteria andAddressEqualTo(String value) { + addCriterion("address =", value, "address"); + return (Criteria) this; + } + + public Criteria andAddressNotEqualTo(String value) { + addCriterion("address <>", value, "address"); + return (Criteria) this; + } + + public Criteria andAddressGreaterThan(String value) { + addCriterion("address >", value, "address"); + return (Criteria) this; + } + + public Criteria andAddressGreaterThanOrEqualTo(String value) { + addCriterion("address >=", value, "address"); + return (Criteria) this; + } + + public Criteria andAddressLessThan(String value) { + addCriterion("address <", value, "address"); + return (Criteria) this; + } + + public Criteria andAddressLessThanOrEqualTo(String value) { + addCriterion("address <=", value, "address"); + return (Criteria) this; + } + + public Criteria andAddressLike(String value) { + addCriterion("address like", value, "address"); + return (Criteria) this; + } + + public Criteria andAddressNotLike(String value) { + addCriterion("address not like", value, "address"); + return (Criteria) this; + } + + public Criteria andAddressIn(List values) { + addCriterion("address in", values, "address"); + return (Criteria) this; + } + + public Criteria andAddressNotIn(List values) { + addCriterion("address not in", values, "address"); + return (Criteria) this; + } + + public Criteria andAddressBetween(String value1, String value2) { + addCriterion("address between", value1, value2, "address"); + return (Criteria) this; + } + + public Criteria andAddressNotBetween(String value1, String value2) { + addCriterion("address not between", value1, value2, "address"); + return (Criteria) this; + } + + public Criteria andApplicantNameIsNull() { + addCriterion("applicant_name is null"); + return (Criteria) this; + } + + public Criteria andApplicantNameIsNotNull() { + addCriterion("applicant_name is not null"); + return (Criteria) this; + } + + public Criteria andApplicantNameEqualTo(String value) { + addCriterion("applicant_name =", value, "applicantName"); + return (Criteria) this; + } + + public Criteria andApplicantNameNotEqualTo(String value) { + addCriterion("applicant_name <>", value, "applicantName"); + return (Criteria) this; + } + + public Criteria andApplicantNameGreaterThan(String value) { + addCriterion("applicant_name >", value, "applicantName"); + return (Criteria) this; + } + + public Criteria andApplicantNameGreaterThanOrEqualTo(String value) { + addCriterion("applicant_name >=", value, "applicantName"); + return (Criteria) this; + } + + public Criteria andApplicantNameLessThan(String value) { + addCriterion("applicant_name <", value, "applicantName"); + return (Criteria) this; + } + + public Criteria andApplicantNameLessThanOrEqualTo(String value) { + addCriterion("applicant_name <=", value, "applicantName"); + return (Criteria) this; + } + + public Criteria andApplicantNameLike(String value) { + addCriterion("applicant_name like", value, "applicantName"); + return (Criteria) this; + } + + public Criteria andApplicantNameNotLike(String value) { + addCriterion("applicant_name not like", value, "applicantName"); + return (Criteria) this; + } + + public Criteria andApplicantNameIn(List values) { + addCriterion("applicant_name in", values, "applicantName"); + return (Criteria) this; + } + + public Criteria andApplicantNameNotIn(List values) { + addCriterion("applicant_name not in", values, "applicantName"); + return (Criteria) this; + } + + public Criteria andApplicantNameBetween(String value1, String value2) { + addCriterion("applicant_name between", value1, value2, "applicantName"); + return (Criteria) this; + } + + public Criteria andApplicantNameNotBetween(String value1, String value2) { + addCriterion("applicant_name not between", value1, value2, "applicantName"); + return (Criteria) this; + } + + public Criteria andApplicantIdCardIsNull() { + addCriterion("applicant_id_card is null"); + return (Criteria) this; + } + + public Criteria andApplicantIdCardIsNotNull() { + addCriterion("applicant_id_card is not null"); + return (Criteria) this; + } + + public Criteria andApplicantIdCardEqualTo(String value) { + addCriterion("applicant_id_card =", value, "applicantIdCard"); + return (Criteria) this; + } + + public Criteria andApplicantIdCardNotEqualTo(String value) { + addCriterion("applicant_id_card <>", value, "applicantIdCard"); + return (Criteria) this; + } + + public Criteria andApplicantIdCardGreaterThan(String value) { + addCriterion("applicant_id_card >", value, "applicantIdCard"); + return (Criteria) this; + } + + public Criteria andApplicantIdCardGreaterThanOrEqualTo(String value) { + addCriterion("applicant_id_card >=", value, "applicantIdCard"); + return (Criteria) this; + } + + public Criteria andApplicantIdCardLessThan(String value) { + addCriterion("applicant_id_card <", value, "applicantIdCard"); + return (Criteria) this; + } + + public Criteria andApplicantIdCardLessThanOrEqualTo(String value) { + addCriterion("applicant_id_card <=", value, "applicantIdCard"); + return (Criteria) this; + } + + public Criteria andApplicantIdCardLike(String value) { + addCriterion("applicant_id_card like", value, "applicantIdCard"); + return (Criteria) this; + } + + public Criteria andApplicantIdCardNotLike(String value) { + addCriterion("applicant_id_card not like", value, "applicantIdCard"); + return (Criteria) this; + } + + public Criteria andApplicantIdCardIn(List values) { + addCriterion("applicant_id_card in", values, "applicantIdCard"); + return (Criteria) this; + } + + public Criteria andApplicantIdCardNotIn(List values) { + addCriterion("applicant_id_card not in", values, "applicantIdCard"); + return (Criteria) this; + } + + public Criteria andApplicantIdCardBetween(String value1, String value2) { + addCriterion("applicant_id_card between", value1, value2, "applicantIdCard"); + return (Criteria) this; + } + + public Criteria andApplicantIdCardNotBetween(String value1, String value2) { + addCriterion("applicant_id_card not between", value1, value2, "applicantIdCard"); + return (Criteria) this; + } + + public Criteria andApplicantPhoneIsNull() { + addCriterion("applicant_phone is null"); + return (Criteria) this; + } + + public Criteria andApplicantPhoneIsNotNull() { + addCriterion("applicant_phone is not null"); + return (Criteria) this; + } + + public Criteria andApplicantPhoneEqualTo(String value) { + addCriterion("applicant_phone =", value, "applicantPhone"); + return (Criteria) this; + } + + public Criteria andApplicantPhoneNotEqualTo(String value) { + addCriterion("applicant_phone <>", value, "applicantPhone"); + return (Criteria) this; + } + + public Criteria andApplicantPhoneGreaterThan(String value) { + addCriterion("applicant_phone >", value, "applicantPhone"); + return (Criteria) this; + } + + public Criteria andApplicantPhoneGreaterThanOrEqualTo(String value) { + addCriterion("applicant_phone >=", value, "applicantPhone"); + return (Criteria) this; + } + + public Criteria andApplicantPhoneLessThan(String value) { + addCriterion("applicant_phone <", value, "applicantPhone"); + return (Criteria) this; + } + + public Criteria andApplicantPhoneLessThanOrEqualTo(String value) { + addCriterion("applicant_phone <=", value, "applicantPhone"); + return (Criteria) this; + } + + public Criteria andApplicantPhoneLike(String value) { + addCriterion("applicant_phone like", value, "applicantPhone"); + return (Criteria) this; + } + + public Criteria andApplicantPhoneNotLike(String value) { + addCriterion("applicant_phone not like", value, "applicantPhone"); + return (Criteria) this; + } + + public Criteria andApplicantPhoneIn(List values) { + addCriterion("applicant_phone in", values, "applicantPhone"); + return (Criteria) this; + } + + public Criteria andApplicantPhoneNotIn(List values) { + addCriterion("applicant_phone not in", values, "applicantPhone"); + return (Criteria) this; + } + + public Criteria andApplicantPhoneBetween(String value1, String value2) { + addCriterion("applicant_phone between", value1, value2, "applicantPhone"); + return (Criteria) this; + } + + public Criteria andApplicantPhoneNotBetween(String value1, String value2) { + addCriterion("applicant_phone not between", value1, value2, "applicantPhone"); + return (Criteria) this; + } + + public Criteria andBusinessLicenseIsNull() { + addCriterion("business_license is null"); + return (Criteria) this; + } + + public Criteria andBusinessLicenseIsNotNull() { + addCriterion("business_license is not null"); + return (Criteria) this; + } + + public Criteria andBusinessLicenseEqualTo(String value) { + addCriterion("business_license =", value, "businessLicense"); + return (Criteria) this; + } + + public Criteria andBusinessLicenseNotEqualTo(String value) { + addCriterion("business_license <>", value, "businessLicense"); + return (Criteria) this; + } + + public Criteria andBusinessLicenseGreaterThan(String value) { + addCriterion("business_license >", value, "businessLicense"); + return (Criteria) this; + } + + public Criteria andBusinessLicenseGreaterThanOrEqualTo(String value) { + addCriterion("business_license >=", value, "businessLicense"); + return (Criteria) this; + } + + public Criteria andBusinessLicenseLessThan(String value) { + addCriterion("business_license <", value, "businessLicense"); + return (Criteria) this; + } + + public Criteria andBusinessLicenseLessThanOrEqualTo(String value) { + addCriterion("business_license <=", value, "businessLicense"); + return (Criteria) this; + } + + public Criteria andBusinessLicenseLike(String value) { + addCriterion("business_license like", value, "businessLicense"); + return (Criteria) this; + } + + public Criteria andBusinessLicenseNotLike(String value) { + addCriterion("business_license not like", value, "businessLicense"); + return (Criteria) this; + } + + public Criteria andBusinessLicenseIn(List values) { + addCriterion("business_license in", values, "businessLicense"); + return (Criteria) this; + } + + public Criteria andBusinessLicenseNotIn(List values) { + addCriterion("business_license not in", values, "businessLicense"); + return (Criteria) this; + } + + public Criteria andBusinessLicenseBetween(String value1, String value2) { + addCriterion("business_license between", value1, value2, "businessLicense"); + return (Criteria) this; + } + + public Criteria andBusinessLicenseNotBetween(String value1, String value2) { + addCriterion("business_license not between", value1, value2, "businessLicense"); + return (Criteria) this; + } + + public Criteria andQrCordIsNull() { + addCriterion("qr_cord is null"); + return (Criteria) this; + } + + public Criteria andQrCordIsNotNull() { + addCriterion("qr_cord is not null"); + return (Criteria) this; + } + + public Criteria andQrCordEqualTo(String value) { + addCriterion("qr_cord =", value, "qrCord"); + return (Criteria) this; + } + + public Criteria andQrCordNotEqualTo(String value) { + addCriterion("qr_cord <>", value, "qrCord"); + return (Criteria) this; + } + + public Criteria andQrCordGreaterThan(String value) { + addCriterion("qr_cord >", value, "qrCord"); + return (Criteria) this; + } + + public Criteria andQrCordGreaterThanOrEqualTo(String value) { + addCriterion("qr_cord >=", value, "qrCord"); + return (Criteria) this; + } + + public Criteria andQrCordLessThan(String value) { + addCriterion("qr_cord <", value, "qrCord"); + return (Criteria) this; + } + + public Criteria andQrCordLessThanOrEqualTo(String value) { + addCriterion("qr_cord <=", value, "qrCord"); + return (Criteria) this; + } + + public Criteria andQrCordLike(String value) { + addCriterion("qr_cord like", value, "qrCord"); + return (Criteria) this; + } + + public Criteria andQrCordNotLike(String value) { + addCriterion("qr_cord not like", value, "qrCord"); + return (Criteria) this; + } + + public Criteria andQrCordIn(List values) { + addCriterion("qr_cord in", values, "qrCord"); + return (Criteria) this; + } + + public Criteria andQrCordNotIn(List values) { + addCriterion("qr_cord not in", values, "qrCord"); + return (Criteria) this; + } + + public Criteria andQrCordBetween(String value1, String value2) { + addCriterion("qr_cord between", value1, value2, "qrCord"); + return (Criteria) this; + } + + public Criteria andQrCordNotBetween(String value1, String value2) { + addCriterion("qr_cord not between", value1, value2, "qrCord"); + return (Criteria) this; + } + + public Criteria andUserIdIsNull() { + addCriterion("user_id is null"); + return (Criteria) this; + } + + public Criteria andUserIdIsNotNull() { + addCriterion("user_id is not null"); + return (Criteria) this; + } + + public Criteria andUserIdEqualTo(Long value) { + addCriterion("user_id =", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdNotEqualTo(Long value) { + addCriterion("user_id <>", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdGreaterThan(Long value) { + addCriterion("user_id >", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdGreaterThanOrEqualTo(Long value) { + addCriterion("user_id >=", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdLessThan(Long value) { + addCriterion("user_id <", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdLessThanOrEqualTo(Long value) { + addCriterion("user_id <=", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdIn(List values) { + addCriterion("user_id in", values, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdNotIn(List values) { + addCriterion("user_id not in", values, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdBetween(Long value1, Long value2) { + addCriterion("user_id between", value1, value2, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdNotBetween(Long value1, Long value2) { + addCriterion("user_id not between", value1, value2, "userId"); + return (Criteria) this; + } + + public Criteria andPassedIsNull() { + addCriterion("passed is null"); + return (Criteria) this; + } + + public Criteria andPassedIsNotNull() { + addCriterion("passed is not null"); + return (Criteria) this; + } + + public Criteria andPassedEqualTo(Byte value) { + addCriterion("passed =", value, "passed"); + return (Criteria) this; + } + + public Criteria andPassedNotEqualTo(Byte value) { + addCriterion("passed <>", value, "passed"); + return (Criteria) this; + } + + public Criteria andPassedGreaterThan(Byte value) { + addCriterion("passed >", value, "passed"); + return (Criteria) this; + } + + public Criteria andPassedGreaterThanOrEqualTo(Byte value) { + addCriterion("passed >=", value, "passed"); + return (Criteria) this; + } + + public Criteria andPassedLessThan(Byte value) { + addCriterion("passed <", value, "passed"); + return (Criteria) this; + } + + public Criteria andPassedLessThanOrEqualTo(Byte value) { + addCriterion("passed <=", value, "passed"); + return (Criteria) this; + } + + public Criteria andPassedIn(List values) { + addCriterion("passed in", values, "passed"); + return (Criteria) this; + } + + public Criteria andPassedNotIn(List values) { + addCriterion("passed not in", values, "passed"); + return (Criteria) this; + } + + public Criteria andPassedBetween(Byte value1, Byte value2) { + addCriterion("passed between", value1, value2, "passed"); + return (Criteria) this; + } + + public Criteria andPassedNotBetween(Byte value1, Byte value2) { + addCriterion("passed not between", value1, value2, "passed"); + return (Criteria) this; + } + + public Criteria andCreatedAtIsNull() { + addCriterion("created_at is null"); + return (Criteria) this; + } + + public Criteria andCreatedAtIsNotNull() { + addCriterion("created_at is not null"); + return (Criteria) this; + } + + public Criteria andCreatedAtEqualTo(Date value) { + addCriterion("created_at =", value, "createdAt"); + return (Criteria) this; + } + + public Criteria andCreatedAtNotEqualTo(Date value) { + addCriterion("created_at <>", value, "createdAt"); + return (Criteria) this; + } + + public Criteria andCreatedAtGreaterThan(Date value) { + addCriterion("created_at >", value, "createdAt"); + return (Criteria) this; + } + + public Criteria andCreatedAtGreaterThanOrEqualTo(Date value) { + addCriterion("created_at >=", value, "createdAt"); + return (Criteria) this; + } + + public Criteria andCreatedAtLessThan(Date value) { + addCriterion("created_at <", value, "createdAt"); + return (Criteria) this; + } + + public Criteria andCreatedAtLessThanOrEqualTo(Date value) { + addCriterion("created_at <=", value, "createdAt"); + return (Criteria) this; + } + + public Criteria andCreatedAtIn(List values) { + addCriterion("created_at in", values, "createdAt"); + return (Criteria) this; + } + + public Criteria andCreatedAtNotIn(List values) { + addCriterion("created_at not in", values, "createdAt"); + return (Criteria) this; + } + + public Criteria andCreatedAtBetween(Date value1, Date value2) { + addCriterion("created_at between", value1, value2, "createdAt"); + return (Criteria) this; + } + + public Criteria andCreatedAtNotBetween(Date value1, Date value2) { + addCriterion("created_at not between", value1, value2, "createdAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtIsNull() { + addCriterion("updated_at is null"); + return (Criteria) this; + } + + public Criteria andUpdatedAtIsNotNull() { + addCriterion("updated_at is not null"); + return (Criteria) this; + } + + public Criteria andUpdatedAtEqualTo(Date value) { + addCriterion("updated_at =", value, "updatedAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtNotEqualTo(Date value) { + addCriterion("updated_at <>", value, "updatedAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtGreaterThan(Date value) { + addCriterion("updated_at >", value, "updatedAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtGreaterThanOrEqualTo(Date value) { + addCriterion("updated_at >=", value, "updatedAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtLessThan(Date value) { + addCriterion("updated_at <", value, "updatedAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtLessThanOrEqualTo(Date value) { + addCriterion("updated_at <=", value, "updatedAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtIn(List values) { + addCriterion("updated_at in", values, "updatedAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtNotIn(List values) { + addCriterion("updated_at not in", values, "updatedAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtBetween(Date value1, Date value2) { + addCriterion("updated_at between", value1, value2, "updatedAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtNotBetween(Date value1, Date value2) { + addCriterion("updated_at not between", value1, value2, "updatedAt"); + return (Criteria) this; + } + + public Criteria andRecStatusIsNull() { + addCriterion("rec_status is null"); + return (Criteria) this; + } + + public Criteria andRecStatusIsNotNull() { + addCriterion("rec_status is not null"); + return (Criteria) this; + } + + public Criteria andRecStatusEqualTo(Byte value) { + addCriterion("rec_status =", value, "recStatus"); + return (Criteria) this; + } + + public Criteria andRecStatusNotEqualTo(Byte value) { + addCriterion("rec_status <>", value, "recStatus"); + return (Criteria) this; + } + + public Criteria andRecStatusGreaterThan(Byte value) { + addCriterion("rec_status >", value, "recStatus"); + return (Criteria) this; + } + + public Criteria andRecStatusGreaterThanOrEqualTo(Byte value) { + addCriterion("rec_status >=", value, "recStatus"); + return (Criteria) this; + } + + public Criteria andRecStatusLessThan(Byte value) { + addCriterion("rec_status <", value, "recStatus"); + return (Criteria) this; + } + + public Criteria andRecStatusLessThanOrEqualTo(Byte value) { + addCriterion("rec_status <=", value, "recStatus"); + return (Criteria) this; + } + + public Criteria andRecStatusIn(List values) { + addCriterion("rec_status in", values, "recStatus"); + return (Criteria) this; + } + + public Criteria andRecStatusNotIn(List values) { + addCriterion("rec_status not in", values, "recStatus"); + return (Criteria) this; + } + + public Criteria andRecStatusBetween(Byte value1, Byte value2) { + addCriterion("rec_status between", value1, value2, "recStatus"); + return (Criteria) this; + } + + public Criteria andRecStatusNotBetween(Byte value1, Byte value2) { + addCriterion("rec_status not between", value1, value2, "recStatus"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/ct/src/main/java/com/ccsens/ct/bean/po/Site.java b/ct/src/main/java/com/ccsens/ct/bean/po/Site.java new file mode 100644 index 00000000..ccf9998d --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/bean/po/Site.java @@ -0,0 +1,118 @@ +package com.ccsens.ct.bean.po; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +public class Site implements Serializable { + private Long id; + + private Long businessId; + + private String siteName; + + private String siteCode; + + private BigDecimal longitude; + + private BigDecimal latitude; + + private Date createdAt; + + private Date updatedAt; + + private Byte recStatus; + + private static final long serialVersionUID = 1L; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getBusinessId() { + return businessId; + } + + public void setBusinessId(Long businessId) { + this.businessId = businessId; + } + + public String getSiteName() { + return siteName; + } + + public void setSiteName(String siteName) { + this.siteName = siteName == null ? null : siteName.trim(); + } + + public String getSiteCode() { + return siteCode; + } + + public void setSiteCode(String siteCode) { + this.siteCode = siteCode == null ? null : siteCode.trim(); + } + + public BigDecimal getLongitude() { + return longitude; + } + + public void setLongitude(BigDecimal longitude) { + this.longitude = longitude; + } + + public BigDecimal getLatitude() { + return latitude; + } + + public void setLatitude(BigDecimal latitude) { + this.latitude = latitude; + } + + public Date getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Date createdAt) { + this.createdAt = createdAt; + } + + public Date getUpdatedAt() { + return updatedAt; + } + + public void setUpdatedAt(Date updatedAt) { + this.updatedAt = updatedAt; + } + + public Byte getRecStatus() { + return recStatus; + } + + public void setRecStatus(Byte recStatus) { + this.recStatus = recStatus; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(getClass().getSimpleName()); + sb.append(" ["); + sb.append("Hash = ").append(hashCode()); + sb.append(", id=").append(id); + sb.append(", businessId=").append(businessId); + sb.append(", siteName=").append(siteName); + sb.append(", siteCode=").append(siteCode); + sb.append(", longitude=").append(longitude); + sb.append(", latitude=").append(latitude); + sb.append(", createdAt=").append(createdAt); + sb.append(", updatedAt=").append(updatedAt); + sb.append(", recStatus=").append(recStatus); + sb.append("]"); + return sb.toString(); + } +} \ No newline at end of file diff --git a/ct/src/main/java/com/ccsens/ct/bean/po/SiteClockIn.java b/ct/src/main/java/com/ccsens/ct/bean/po/SiteClockIn.java new file mode 100644 index 00000000..7fd026a0 --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/bean/po/SiteClockIn.java @@ -0,0 +1,118 @@ +package com.ccsens.ct.bean.po; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +public class SiteClockIn implements Serializable { + private Long id; + + private Long qrcodeId; + + private Long time; + + private BigDecimal longitude; + + private BigDecimal latitude; + + private Long userId; + + private Date createdAt; + + private Date updatedAt; + + private Byte recStatus; + + private static final long serialVersionUID = 1L; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getQrcodeId() { + return qrcodeId; + } + + public void setQrcodeId(Long qrcodeId) { + this.qrcodeId = qrcodeId; + } + + public Long getTime() { + return time; + } + + public void setTime(Long time) { + this.time = time; + } + + public BigDecimal getLongitude() { + return longitude; + } + + public void setLongitude(BigDecimal longitude) { + this.longitude = longitude; + } + + public BigDecimal getLatitude() { + return latitude; + } + + public void setLatitude(BigDecimal latitude) { + this.latitude = latitude; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public Date getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Date createdAt) { + this.createdAt = createdAt; + } + + public Date getUpdatedAt() { + return updatedAt; + } + + public void setUpdatedAt(Date updatedAt) { + this.updatedAt = updatedAt; + } + + public Byte getRecStatus() { + return recStatus; + } + + public void setRecStatus(Byte recStatus) { + this.recStatus = recStatus; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(getClass().getSimpleName()); + sb.append(" ["); + sb.append("Hash = ").append(hashCode()); + sb.append(", id=").append(id); + sb.append(", qrcodeId=").append(qrcodeId); + sb.append(", time=").append(time); + sb.append(", longitude=").append(longitude); + sb.append(", latitude=").append(latitude); + sb.append(", userId=").append(userId); + sb.append(", createdAt=").append(createdAt); + sb.append(", updatedAt=").append(updatedAt); + sb.append(", recStatus=").append(recStatus); + sb.append("]"); + return sb.toString(); + } +} \ No newline at end of file diff --git a/ct/src/main/java/com/ccsens/ct/bean/po/SiteClockInExample.java b/ct/src/main/java/com/ccsens/ct/bean/po/SiteClockInExample.java new file mode 100644 index 00000000..3e09cad5 --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/bean/po/SiteClockInExample.java @@ -0,0 +1,742 @@ +package com.ccsens.ct.bean.po; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class SiteClockInExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public SiteClockInExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andQrcodeIdIsNull() { + addCriterion("qrcode_id is null"); + return (Criteria) this; + } + + public Criteria andQrcodeIdIsNotNull() { + addCriterion("qrcode_id is not null"); + return (Criteria) this; + } + + public Criteria andQrcodeIdEqualTo(Long value) { + addCriterion("qrcode_id =", value, "qrcodeId"); + return (Criteria) this; + } + + public Criteria andQrcodeIdNotEqualTo(Long value) { + addCriterion("qrcode_id <>", value, "qrcodeId"); + return (Criteria) this; + } + + public Criteria andQrcodeIdGreaterThan(Long value) { + addCriterion("qrcode_id >", value, "qrcodeId"); + return (Criteria) this; + } + + public Criteria andQrcodeIdGreaterThanOrEqualTo(Long value) { + addCriterion("qrcode_id >=", value, "qrcodeId"); + return (Criteria) this; + } + + public Criteria andQrcodeIdLessThan(Long value) { + addCriterion("qrcode_id <", value, "qrcodeId"); + return (Criteria) this; + } + + public Criteria andQrcodeIdLessThanOrEqualTo(Long value) { + addCriterion("qrcode_id <=", value, "qrcodeId"); + return (Criteria) this; + } + + public Criteria andQrcodeIdIn(List values) { + addCriterion("qrcode_id in", values, "qrcodeId"); + return (Criteria) this; + } + + public Criteria andQrcodeIdNotIn(List values) { + addCriterion("qrcode_id not in", values, "qrcodeId"); + return (Criteria) this; + } + + public Criteria andQrcodeIdBetween(Long value1, Long value2) { + addCriterion("qrcode_id between", value1, value2, "qrcodeId"); + return (Criteria) this; + } + + public Criteria andQrcodeIdNotBetween(Long value1, Long value2) { + addCriterion("qrcode_id not between", value1, value2, "qrcodeId"); + return (Criteria) this; + } + + public Criteria andTimeIsNull() { + addCriterion("time is null"); + return (Criteria) this; + } + + public Criteria andTimeIsNotNull() { + addCriterion("time is not null"); + return (Criteria) this; + } + + public Criteria andTimeEqualTo(Long value) { + addCriterion("time =", value, "time"); + return (Criteria) this; + } + + public Criteria andTimeNotEqualTo(Long value) { + addCriterion("time <>", value, "time"); + return (Criteria) this; + } + + public Criteria andTimeGreaterThan(Long value) { + addCriterion("time >", value, "time"); + return (Criteria) this; + } + + public Criteria andTimeGreaterThanOrEqualTo(Long value) { + addCriterion("time >=", value, "time"); + return (Criteria) this; + } + + public Criteria andTimeLessThan(Long value) { + addCriterion("time <", value, "time"); + return (Criteria) this; + } + + public Criteria andTimeLessThanOrEqualTo(Long value) { + addCriterion("time <=", value, "time"); + return (Criteria) this; + } + + public Criteria andTimeIn(List values) { + addCriterion("time in", values, "time"); + return (Criteria) this; + } + + public Criteria andTimeNotIn(List values) { + addCriterion("time not in", values, "time"); + return (Criteria) this; + } + + public Criteria andTimeBetween(Long value1, Long value2) { + addCriterion("time between", value1, value2, "time"); + return (Criteria) this; + } + + public Criteria andTimeNotBetween(Long value1, Long value2) { + addCriterion("time not between", value1, value2, "time"); + return (Criteria) this; + } + + public Criteria andLongitudeIsNull() { + addCriterion("longitude is null"); + return (Criteria) this; + } + + public Criteria andLongitudeIsNotNull() { + addCriterion("longitude is not null"); + return (Criteria) this; + } + + public Criteria andLongitudeEqualTo(BigDecimal value) { + addCriterion("longitude =", value, "longitude"); + return (Criteria) this; + } + + public Criteria andLongitudeNotEqualTo(BigDecimal value) { + addCriterion("longitude <>", value, "longitude"); + return (Criteria) this; + } + + public Criteria andLongitudeGreaterThan(BigDecimal value) { + addCriterion("longitude >", value, "longitude"); + return (Criteria) this; + } + + public Criteria andLongitudeGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("longitude >=", value, "longitude"); + return (Criteria) this; + } + + public Criteria andLongitudeLessThan(BigDecimal value) { + addCriterion("longitude <", value, "longitude"); + return (Criteria) this; + } + + public Criteria andLongitudeLessThanOrEqualTo(BigDecimal value) { + addCriterion("longitude <=", value, "longitude"); + return (Criteria) this; + } + + public Criteria andLongitudeIn(List values) { + addCriterion("longitude in", values, "longitude"); + return (Criteria) this; + } + + public Criteria andLongitudeNotIn(List values) { + addCriterion("longitude not in", values, "longitude"); + return (Criteria) this; + } + + public Criteria andLongitudeBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("longitude between", value1, value2, "longitude"); + return (Criteria) this; + } + + public Criteria andLongitudeNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("longitude not between", value1, value2, "longitude"); + return (Criteria) this; + } + + public Criteria andLatitudeIsNull() { + addCriterion("latitude is null"); + return (Criteria) this; + } + + public Criteria andLatitudeIsNotNull() { + addCriterion("latitude is not null"); + return (Criteria) this; + } + + public Criteria andLatitudeEqualTo(BigDecimal value) { + addCriterion("latitude =", value, "latitude"); + return (Criteria) this; + } + + public Criteria andLatitudeNotEqualTo(BigDecimal value) { + addCriterion("latitude <>", value, "latitude"); + return (Criteria) this; + } + + public Criteria andLatitudeGreaterThan(BigDecimal value) { + addCriterion("latitude >", value, "latitude"); + return (Criteria) this; + } + + public Criteria andLatitudeGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("latitude >=", value, "latitude"); + return (Criteria) this; + } + + public Criteria andLatitudeLessThan(BigDecimal value) { + addCriterion("latitude <", value, "latitude"); + return (Criteria) this; + } + + public Criteria andLatitudeLessThanOrEqualTo(BigDecimal value) { + addCriterion("latitude <=", value, "latitude"); + return (Criteria) this; + } + + public Criteria andLatitudeIn(List values) { + addCriterion("latitude in", values, "latitude"); + return (Criteria) this; + } + + public Criteria andLatitudeNotIn(List values) { + addCriterion("latitude not in", values, "latitude"); + return (Criteria) this; + } + + public Criteria andLatitudeBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("latitude between", value1, value2, "latitude"); + return (Criteria) this; + } + + public Criteria andLatitudeNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("latitude not between", value1, value2, "latitude"); + return (Criteria) this; + } + + public Criteria andUserIdIsNull() { + addCriterion("user_id is null"); + return (Criteria) this; + } + + public Criteria andUserIdIsNotNull() { + addCriterion("user_id is not null"); + return (Criteria) this; + } + + public Criteria andUserIdEqualTo(Long value) { + addCriterion("user_id =", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdNotEqualTo(Long value) { + addCriterion("user_id <>", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdGreaterThan(Long value) { + addCriterion("user_id >", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdGreaterThanOrEqualTo(Long value) { + addCriterion("user_id >=", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdLessThan(Long value) { + addCriterion("user_id <", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdLessThanOrEqualTo(Long value) { + addCriterion("user_id <=", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdIn(List values) { + addCriterion("user_id in", values, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdNotIn(List values) { + addCriterion("user_id not in", values, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdBetween(Long value1, Long value2) { + addCriterion("user_id between", value1, value2, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdNotBetween(Long value1, Long value2) { + addCriterion("user_id not between", value1, value2, "userId"); + return (Criteria) this; + } + + public Criteria andCreatedAtIsNull() { + addCriterion("created_at is null"); + return (Criteria) this; + } + + public Criteria andCreatedAtIsNotNull() { + addCriterion("created_at is not null"); + return (Criteria) this; + } + + public Criteria andCreatedAtEqualTo(Date value) { + addCriterion("created_at =", value, "createdAt"); + return (Criteria) this; + } + + public Criteria andCreatedAtNotEqualTo(Date value) { + addCriterion("created_at <>", value, "createdAt"); + return (Criteria) this; + } + + public Criteria andCreatedAtGreaterThan(Date value) { + addCriterion("created_at >", value, "createdAt"); + return (Criteria) this; + } + + public Criteria andCreatedAtGreaterThanOrEqualTo(Date value) { + addCriterion("created_at >=", value, "createdAt"); + return (Criteria) this; + } + + public Criteria andCreatedAtLessThan(Date value) { + addCriterion("created_at <", value, "createdAt"); + return (Criteria) this; + } + + public Criteria andCreatedAtLessThanOrEqualTo(Date value) { + addCriterion("created_at <=", value, "createdAt"); + return (Criteria) this; + } + + public Criteria andCreatedAtIn(List values) { + addCriterion("created_at in", values, "createdAt"); + return (Criteria) this; + } + + public Criteria andCreatedAtNotIn(List values) { + addCriterion("created_at not in", values, "createdAt"); + return (Criteria) this; + } + + public Criteria andCreatedAtBetween(Date value1, Date value2) { + addCriterion("created_at between", value1, value2, "createdAt"); + return (Criteria) this; + } + + public Criteria andCreatedAtNotBetween(Date value1, Date value2) { + addCriterion("created_at not between", value1, value2, "createdAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtIsNull() { + addCriterion("updated_at is null"); + return (Criteria) this; + } + + public Criteria andUpdatedAtIsNotNull() { + addCriterion("updated_at is not null"); + return (Criteria) this; + } + + public Criteria andUpdatedAtEqualTo(Date value) { + addCriterion("updated_at =", value, "updatedAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtNotEqualTo(Date value) { + addCriterion("updated_at <>", value, "updatedAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtGreaterThan(Date value) { + addCriterion("updated_at >", value, "updatedAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtGreaterThanOrEqualTo(Date value) { + addCriterion("updated_at >=", value, "updatedAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtLessThan(Date value) { + addCriterion("updated_at <", value, "updatedAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtLessThanOrEqualTo(Date value) { + addCriterion("updated_at <=", value, "updatedAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtIn(List values) { + addCriterion("updated_at in", values, "updatedAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtNotIn(List values) { + addCriterion("updated_at not in", values, "updatedAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtBetween(Date value1, Date value2) { + addCriterion("updated_at between", value1, value2, "updatedAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtNotBetween(Date value1, Date value2) { + addCriterion("updated_at not between", value1, value2, "updatedAt"); + return (Criteria) this; + } + + public Criteria andRecStatusIsNull() { + addCriterion("rec_status is null"); + return (Criteria) this; + } + + public Criteria andRecStatusIsNotNull() { + addCriterion("rec_status is not null"); + return (Criteria) this; + } + + public Criteria andRecStatusEqualTo(Byte value) { + addCriterion("rec_status =", value, "recStatus"); + return (Criteria) this; + } + + public Criteria andRecStatusNotEqualTo(Byte value) { + addCriterion("rec_status <>", value, "recStatus"); + return (Criteria) this; + } + + public Criteria andRecStatusGreaterThan(Byte value) { + addCriterion("rec_status >", value, "recStatus"); + return (Criteria) this; + } + + public Criteria andRecStatusGreaterThanOrEqualTo(Byte value) { + addCriterion("rec_status >=", value, "recStatus"); + return (Criteria) this; + } + + public Criteria andRecStatusLessThan(Byte value) { + addCriterion("rec_status <", value, "recStatus"); + return (Criteria) this; + } + + public Criteria andRecStatusLessThanOrEqualTo(Byte value) { + addCriterion("rec_status <=", value, "recStatus"); + return (Criteria) this; + } + + public Criteria andRecStatusIn(List values) { + addCriterion("rec_status in", values, "recStatus"); + return (Criteria) this; + } + + public Criteria andRecStatusNotIn(List values) { + addCriterion("rec_status not in", values, "recStatus"); + return (Criteria) this; + } + + public Criteria andRecStatusBetween(Byte value1, Byte value2) { + addCriterion("rec_status between", value1, value2, "recStatus"); + return (Criteria) this; + } + + public Criteria andRecStatusNotBetween(Byte value1, Byte value2) { + addCriterion("rec_status not between", value1, value2, "recStatus"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/ct/src/main/java/com/ccsens/ct/bean/po/SiteExample.java b/ct/src/main/java/com/ccsens/ct/bean/po/SiteExample.java new file mode 100644 index 00000000..4a53111b --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/bean/po/SiteExample.java @@ -0,0 +1,762 @@ +package com.ccsens.ct.bean.po; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class SiteExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public SiteExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andBusinessIdIsNull() { + addCriterion("business_id is null"); + return (Criteria) this; + } + + public Criteria andBusinessIdIsNotNull() { + addCriterion("business_id is not null"); + return (Criteria) this; + } + + public Criteria andBusinessIdEqualTo(Long value) { + addCriterion("business_id =", value, "businessId"); + return (Criteria) this; + } + + public Criteria andBusinessIdNotEqualTo(Long value) { + addCriterion("business_id <>", value, "businessId"); + return (Criteria) this; + } + + public Criteria andBusinessIdGreaterThan(Long value) { + addCriterion("business_id >", value, "businessId"); + return (Criteria) this; + } + + public Criteria andBusinessIdGreaterThanOrEqualTo(Long value) { + addCriterion("business_id >=", value, "businessId"); + return (Criteria) this; + } + + public Criteria andBusinessIdLessThan(Long value) { + addCriterion("business_id <", value, "businessId"); + return (Criteria) this; + } + + public Criteria andBusinessIdLessThanOrEqualTo(Long value) { + addCriterion("business_id <=", value, "businessId"); + return (Criteria) this; + } + + public Criteria andBusinessIdIn(List values) { + addCriterion("business_id in", values, "businessId"); + return (Criteria) this; + } + + public Criteria andBusinessIdNotIn(List values) { + addCriterion("business_id not in", values, "businessId"); + return (Criteria) this; + } + + public Criteria andBusinessIdBetween(Long value1, Long value2) { + addCriterion("business_id between", value1, value2, "businessId"); + return (Criteria) this; + } + + public Criteria andBusinessIdNotBetween(Long value1, Long value2) { + addCriterion("business_id not between", value1, value2, "businessId"); + return (Criteria) this; + } + + public Criteria andSiteNameIsNull() { + addCriterion("site_name is null"); + return (Criteria) this; + } + + public Criteria andSiteNameIsNotNull() { + addCriterion("site_name is not null"); + return (Criteria) this; + } + + public Criteria andSiteNameEqualTo(String value) { + addCriterion("site_name =", value, "siteName"); + return (Criteria) this; + } + + public Criteria andSiteNameNotEqualTo(String value) { + addCriterion("site_name <>", value, "siteName"); + return (Criteria) this; + } + + public Criteria andSiteNameGreaterThan(String value) { + addCriterion("site_name >", value, "siteName"); + return (Criteria) this; + } + + public Criteria andSiteNameGreaterThanOrEqualTo(String value) { + addCriterion("site_name >=", value, "siteName"); + return (Criteria) this; + } + + public Criteria andSiteNameLessThan(String value) { + addCriterion("site_name <", value, "siteName"); + return (Criteria) this; + } + + public Criteria andSiteNameLessThanOrEqualTo(String value) { + addCriterion("site_name <=", value, "siteName"); + return (Criteria) this; + } + + public Criteria andSiteNameLike(String value) { + addCriterion("site_name like", value, "siteName"); + return (Criteria) this; + } + + public Criteria andSiteNameNotLike(String value) { + addCriterion("site_name not like", value, "siteName"); + return (Criteria) this; + } + + public Criteria andSiteNameIn(List values) { + addCriterion("site_name in", values, "siteName"); + return (Criteria) this; + } + + public Criteria andSiteNameNotIn(List values) { + addCriterion("site_name not in", values, "siteName"); + return (Criteria) this; + } + + public Criteria andSiteNameBetween(String value1, String value2) { + addCriterion("site_name between", value1, value2, "siteName"); + return (Criteria) this; + } + + public Criteria andSiteNameNotBetween(String value1, String value2) { + addCriterion("site_name not between", value1, value2, "siteName"); + return (Criteria) this; + } + + public Criteria andSiteCodeIsNull() { + addCriterion("site_code is null"); + return (Criteria) this; + } + + public Criteria andSiteCodeIsNotNull() { + addCriterion("site_code is not null"); + return (Criteria) this; + } + + public Criteria andSiteCodeEqualTo(String value) { + addCriterion("site_code =", value, "siteCode"); + return (Criteria) this; + } + + public Criteria andSiteCodeNotEqualTo(String value) { + addCriterion("site_code <>", value, "siteCode"); + return (Criteria) this; + } + + public Criteria andSiteCodeGreaterThan(String value) { + addCriterion("site_code >", value, "siteCode"); + return (Criteria) this; + } + + public Criteria andSiteCodeGreaterThanOrEqualTo(String value) { + addCriterion("site_code >=", value, "siteCode"); + return (Criteria) this; + } + + public Criteria andSiteCodeLessThan(String value) { + addCriterion("site_code <", value, "siteCode"); + return (Criteria) this; + } + + public Criteria andSiteCodeLessThanOrEqualTo(String value) { + addCriterion("site_code <=", value, "siteCode"); + return (Criteria) this; + } + + public Criteria andSiteCodeLike(String value) { + addCriterion("site_code like", value, "siteCode"); + return (Criteria) this; + } + + public Criteria andSiteCodeNotLike(String value) { + addCriterion("site_code not like", value, "siteCode"); + return (Criteria) this; + } + + public Criteria andSiteCodeIn(List values) { + addCriterion("site_code in", values, "siteCode"); + return (Criteria) this; + } + + public Criteria andSiteCodeNotIn(List values) { + addCriterion("site_code not in", values, "siteCode"); + return (Criteria) this; + } + + public Criteria andSiteCodeBetween(String value1, String value2) { + addCriterion("site_code between", value1, value2, "siteCode"); + return (Criteria) this; + } + + public Criteria andSiteCodeNotBetween(String value1, String value2) { + addCriterion("site_code not between", value1, value2, "siteCode"); + return (Criteria) this; + } + + public Criteria andLongitudeIsNull() { + addCriterion("longitude is null"); + return (Criteria) this; + } + + public Criteria andLongitudeIsNotNull() { + addCriterion("longitude is not null"); + return (Criteria) this; + } + + public Criteria andLongitudeEqualTo(BigDecimal value) { + addCriterion("longitude =", value, "longitude"); + return (Criteria) this; + } + + public Criteria andLongitudeNotEqualTo(BigDecimal value) { + addCriterion("longitude <>", value, "longitude"); + return (Criteria) this; + } + + public Criteria andLongitudeGreaterThan(BigDecimal value) { + addCriterion("longitude >", value, "longitude"); + return (Criteria) this; + } + + public Criteria andLongitudeGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("longitude >=", value, "longitude"); + return (Criteria) this; + } + + public Criteria andLongitudeLessThan(BigDecimal value) { + addCriterion("longitude <", value, "longitude"); + return (Criteria) this; + } + + public Criteria andLongitudeLessThanOrEqualTo(BigDecimal value) { + addCriterion("longitude <=", value, "longitude"); + return (Criteria) this; + } + + public Criteria andLongitudeIn(List values) { + addCriterion("longitude in", values, "longitude"); + return (Criteria) this; + } + + public Criteria andLongitudeNotIn(List values) { + addCriterion("longitude not in", values, "longitude"); + return (Criteria) this; + } + + public Criteria andLongitudeBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("longitude between", value1, value2, "longitude"); + return (Criteria) this; + } + + public Criteria andLongitudeNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("longitude not between", value1, value2, "longitude"); + return (Criteria) this; + } + + public Criteria andLatitudeIsNull() { + addCriterion("latitude is null"); + return (Criteria) this; + } + + public Criteria andLatitudeIsNotNull() { + addCriterion("latitude is not null"); + return (Criteria) this; + } + + public Criteria andLatitudeEqualTo(BigDecimal value) { + addCriterion("latitude =", value, "latitude"); + return (Criteria) this; + } + + public Criteria andLatitudeNotEqualTo(BigDecimal value) { + addCriterion("latitude <>", value, "latitude"); + return (Criteria) this; + } + + public Criteria andLatitudeGreaterThan(BigDecimal value) { + addCriterion("latitude >", value, "latitude"); + return (Criteria) this; + } + + public Criteria andLatitudeGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("latitude >=", value, "latitude"); + return (Criteria) this; + } + + public Criteria andLatitudeLessThan(BigDecimal value) { + addCriterion("latitude <", value, "latitude"); + return (Criteria) this; + } + + public Criteria andLatitudeLessThanOrEqualTo(BigDecimal value) { + addCriterion("latitude <=", value, "latitude"); + return (Criteria) this; + } + + public Criteria andLatitudeIn(List values) { + addCriterion("latitude in", values, "latitude"); + return (Criteria) this; + } + + public Criteria andLatitudeNotIn(List values) { + addCriterion("latitude not in", values, "latitude"); + return (Criteria) this; + } + + public Criteria andLatitudeBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("latitude between", value1, value2, "latitude"); + return (Criteria) this; + } + + public Criteria andLatitudeNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("latitude not between", value1, value2, "latitude"); + return (Criteria) this; + } + + public Criteria andCreatedAtIsNull() { + addCriterion("created_at is null"); + return (Criteria) this; + } + + public Criteria andCreatedAtIsNotNull() { + addCriterion("created_at is not null"); + return (Criteria) this; + } + + public Criteria andCreatedAtEqualTo(Date value) { + addCriterion("created_at =", value, "createdAt"); + return (Criteria) this; + } + + public Criteria andCreatedAtNotEqualTo(Date value) { + addCriterion("created_at <>", value, "createdAt"); + return (Criteria) this; + } + + public Criteria andCreatedAtGreaterThan(Date value) { + addCriterion("created_at >", value, "createdAt"); + return (Criteria) this; + } + + public Criteria andCreatedAtGreaterThanOrEqualTo(Date value) { + addCriterion("created_at >=", value, "createdAt"); + return (Criteria) this; + } + + public Criteria andCreatedAtLessThan(Date value) { + addCriterion("created_at <", value, "createdAt"); + return (Criteria) this; + } + + public Criteria andCreatedAtLessThanOrEqualTo(Date value) { + addCriterion("created_at <=", value, "createdAt"); + return (Criteria) this; + } + + public Criteria andCreatedAtIn(List values) { + addCriterion("created_at in", values, "createdAt"); + return (Criteria) this; + } + + public Criteria andCreatedAtNotIn(List values) { + addCriterion("created_at not in", values, "createdAt"); + return (Criteria) this; + } + + public Criteria andCreatedAtBetween(Date value1, Date value2) { + addCriterion("created_at between", value1, value2, "createdAt"); + return (Criteria) this; + } + + public Criteria andCreatedAtNotBetween(Date value1, Date value2) { + addCriterion("created_at not between", value1, value2, "createdAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtIsNull() { + addCriterion("updated_at is null"); + return (Criteria) this; + } + + public Criteria andUpdatedAtIsNotNull() { + addCriterion("updated_at is not null"); + return (Criteria) this; + } + + public Criteria andUpdatedAtEqualTo(Date value) { + addCriterion("updated_at =", value, "updatedAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtNotEqualTo(Date value) { + addCriterion("updated_at <>", value, "updatedAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtGreaterThan(Date value) { + addCriterion("updated_at >", value, "updatedAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtGreaterThanOrEqualTo(Date value) { + addCriterion("updated_at >=", value, "updatedAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtLessThan(Date value) { + addCriterion("updated_at <", value, "updatedAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtLessThanOrEqualTo(Date value) { + addCriterion("updated_at <=", value, "updatedAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtIn(List values) { + addCriterion("updated_at in", values, "updatedAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtNotIn(List values) { + addCriterion("updated_at not in", values, "updatedAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtBetween(Date value1, Date value2) { + addCriterion("updated_at between", value1, value2, "updatedAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtNotBetween(Date value1, Date value2) { + addCriterion("updated_at not between", value1, value2, "updatedAt"); + return (Criteria) this; + } + + public Criteria andRecStatusIsNull() { + addCriterion("rec_status is null"); + return (Criteria) this; + } + + public Criteria andRecStatusIsNotNull() { + addCriterion("rec_status is not null"); + return (Criteria) this; + } + + public Criteria andRecStatusEqualTo(Byte value) { + addCriterion("rec_status =", value, "recStatus"); + return (Criteria) this; + } + + public Criteria andRecStatusNotEqualTo(Byte value) { + addCriterion("rec_status <>", value, "recStatus"); + return (Criteria) this; + } + + public Criteria andRecStatusGreaterThan(Byte value) { + addCriterion("rec_status >", value, "recStatus"); + return (Criteria) this; + } + + public Criteria andRecStatusGreaterThanOrEqualTo(Byte value) { + addCriterion("rec_status >=", value, "recStatus"); + return (Criteria) this; + } + + public Criteria andRecStatusLessThan(Byte value) { + addCriterion("rec_status <", value, "recStatus"); + return (Criteria) this; + } + + public Criteria andRecStatusLessThanOrEqualTo(Byte value) { + addCriterion("rec_status <=", value, "recStatus"); + return (Criteria) this; + } + + public Criteria andRecStatusIn(List values) { + addCriterion("rec_status in", values, "recStatus"); + return (Criteria) this; + } + + public Criteria andRecStatusNotIn(List values) { + addCriterion("rec_status not in", values, "recStatus"); + return (Criteria) this; + } + + public Criteria andRecStatusBetween(Byte value1, Byte value2) { + addCriterion("rec_status between", value1, value2, "recStatus"); + return (Criteria) this; + } + + public Criteria andRecStatusNotBetween(Byte value1, Byte value2) { + addCriterion("rec_status not between", value1, value2, "recStatus"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/ct/src/main/java/com/ccsens/ct/bean/po/SiteQrcode.java b/ct/src/main/java/com/ccsens/ct/bean/po/SiteQrcode.java new file mode 100644 index 00000000..f3bc6467 --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/bean/po/SiteQrcode.java @@ -0,0 +1,106 @@ +package com.ccsens.ct.bean.po; + +import java.io.Serializable; +import java.util.Date; + +public class SiteQrcode implements Serializable { + private Long id; + + private Long siteId; + + private Byte outOrIn; + + private String qrcodePath; + + private String bigQrcodePath; + + private Date createdAt; + + private Date updatedAt; + + private Byte recStatus; + + private static final long serialVersionUID = 1L; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getSiteId() { + return siteId; + } + + public void setSiteId(Long siteId) { + this.siteId = siteId; + } + + public Byte getOutOrIn() { + return outOrIn; + } + + public void setOutOrIn(Byte outOrIn) { + this.outOrIn = outOrIn; + } + + public String getQrcodePath() { + return qrcodePath; + } + + public void setQrcodePath(String qrcodePath) { + this.qrcodePath = qrcodePath == null ? null : qrcodePath.trim(); + } + + public String getBigQrcodePath() { + return bigQrcodePath; + } + + public void setBigQrcodePath(String bigQrcodePath) { + this.bigQrcodePath = bigQrcodePath == null ? null : bigQrcodePath.trim(); + } + + public Date getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(Date createdAt) { + this.createdAt = createdAt; + } + + public Date getUpdatedAt() { + return updatedAt; + } + + public void setUpdatedAt(Date updatedAt) { + this.updatedAt = updatedAt; + } + + public Byte getRecStatus() { + return recStatus; + } + + public void setRecStatus(Byte recStatus) { + this.recStatus = recStatus; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(getClass().getSimpleName()); + sb.append(" ["); + sb.append("Hash = ").append(hashCode()); + sb.append(", id=").append(id); + sb.append(", siteId=").append(siteId); + sb.append(", outOrIn=").append(outOrIn); + sb.append(", qrcodePath=").append(qrcodePath); + sb.append(", bigQrcodePath=").append(bigQrcodePath); + sb.append(", createdAt=").append(createdAt); + sb.append(", updatedAt=").append(updatedAt); + sb.append(", recStatus=").append(recStatus); + sb.append("]"); + return sb.toString(); + } +} \ No newline at end of file diff --git a/ct/src/main/java/com/ccsens/ct/bean/po/SiteQrcodeExample.java b/ct/src/main/java/com/ccsens/ct/bean/po/SiteQrcodeExample.java new file mode 100644 index 00000000..1d441323 --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/bean/po/SiteQrcodeExample.java @@ -0,0 +1,701 @@ +package com.ccsens.ct.bean.po; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class SiteQrcodeExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public SiteQrcodeExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Long value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Long value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Long value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Long value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Long value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Long value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Long value1, Long value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Long value1, Long value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andSiteIdIsNull() { + addCriterion("site_id is null"); + return (Criteria) this; + } + + public Criteria andSiteIdIsNotNull() { + addCriterion("site_id is not null"); + return (Criteria) this; + } + + public Criteria andSiteIdEqualTo(Long value) { + addCriterion("site_id =", value, "siteId"); + return (Criteria) this; + } + + public Criteria andSiteIdNotEqualTo(Long value) { + addCriterion("site_id <>", value, "siteId"); + return (Criteria) this; + } + + public Criteria andSiteIdGreaterThan(Long value) { + addCriterion("site_id >", value, "siteId"); + return (Criteria) this; + } + + public Criteria andSiteIdGreaterThanOrEqualTo(Long value) { + addCriterion("site_id >=", value, "siteId"); + return (Criteria) this; + } + + public Criteria andSiteIdLessThan(Long value) { + addCriterion("site_id <", value, "siteId"); + return (Criteria) this; + } + + public Criteria andSiteIdLessThanOrEqualTo(Long value) { + addCriterion("site_id <=", value, "siteId"); + return (Criteria) this; + } + + public Criteria andSiteIdIn(List values) { + addCriterion("site_id in", values, "siteId"); + return (Criteria) this; + } + + public Criteria andSiteIdNotIn(List values) { + addCriterion("site_id not in", values, "siteId"); + return (Criteria) this; + } + + public Criteria andSiteIdBetween(Long value1, Long value2) { + addCriterion("site_id between", value1, value2, "siteId"); + return (Criteria) this; + } + + public Criteria andSiteIdNotBetween(Long value1, Long value2) { + addCriterion("site_id not between", value1, value2, "siteId"); + return (Criteria) this; + } + + public Criteria andOutOrInIsNull() { + addCriterion("out_or_in is null"); + return (Criteria) this; + } + + public Criteria andOutOrInIsNotNull() { + addCriterion("out_or_in is not null"); + return (Criteria) this; + } + + public Criteria andOutOrInEqualTo(Byte value) { + addCriterion("out_or_in =", value, "outOrIn"); + return (Criteria) this; + } + + public Criteria andOutOrInNotEqualTo(Byte value) { + addCriterion("out_or_in <>", value, "outOrIn"); + return (Criteria) this; + } + + public Criteria andOutOrInGreaterThan(Byte value) { + addCriterion("out_or_in >", value, "outOrIn"); + return (Criteria) this; + } + + public Criteria andOutOrInGreaterThanOrEqualTo(Byte value) { + addCriterion("out_or_in >=", value, "outOrIn"); + return (Criteria) this; + } + + public Criteria andOutOrInLessThan(Byte value) { + addCriterion("out_or_in <", value, "outOrIn"); + return (Criteria) this; + } + + public Criteria andOutOrInLessThanOrEqualTo(Byte value) { + addCriterion("out_or_in <=", value, "outOrIn"); + return (Criteria) this; + } + + public Criteria andOutOrInIn(List values) { + addCriterion("out_or_in in", values, "outOrIn"); + return (Criteria) this; + } + + public Criteria andOutOrInNotIn(List values) { + addCriterion("out_or_in not in", values, "outOrIn"); + return (Criteria) this; + } + + public Criteria andOutOrInBetween(Byte value1, Byte value2) { + addCriterion("out_or_in between", value1, value2, "outOrIn"); + return (Criteria) this; + } + + public Criteria andOutOrInNotBetween(Byte value1, Byte value2) { + addCriterion("out_or_in not between", value1, value2, "outOrIn"); + return (Criteria) this; + } + + public Criteria andQrcodePathIsNull() { + addCriterion("qrcode_path is null"); + return (Criteria) this; + } + + public Criteria andQrcodePathIsNotNull() { + addCriterion("qrcode_path is not null"); + return (Criteria) this; + } + + public Criteria andQrcodePathEqualTo(String value) { + addCriterion("qrcode_path =", value, "qrcodePath"); + return (Criteria) this; + } + + public Criteria andQrcodePathNotEqualTo(String value) { + addCriterion("qrcode_path <>", value, "qrcodePath"); + return (Criteria) this; + } + + public Criteria andQrcodePathGreaterThan(String value) { + addCriterion("qrcode_path >", value, "qrcodePath"); + return (Criteria) this; + } + + public Criteria andQrcodePathGreaterThanOrEqualTo(String value) { + addCriterion("qrcode_path >=", value, "qrcodePath"); + return (Criteria) this; + } + + public Criteria andQrcodePathLessThan(String value) { + addCriterion("qrcode_path <", value, "qrcodePath"); + return (Criteria) this; + } + + public Criteria andQrcodePathLessThanOrEqualTo(String value) { + addCriterion("qrcode_path <=", value, "qrcodePath"); + return (Criteria) this; + } + + public Criteria andQrcodePathLike(String value) { + addCriterion("qrcode_path like", value, "qrcodePath"); + return (Criteria) this; + } + + public Criteria andQrcodePathNotLike(String value) { + addCriterion("qrcode_path not like", value, "qrcodePath"); + return (Criteria) this; + } + + public Criteria andQrcodePathIn(List values) { + addCriterion("qrcode_path in", values, "qrcodePath"); + return (Criteria) this; + } + + public Criteria andQrcodePathNotIn(List values) { + addCriterion("qrcode_path not in", values, "qrcodePath"); + return (Criteria) this; + } + + public Criteria andQrcodePathBetween(String value1, String value2) { + addCriterion("qrcode_path between", value1, value2, "qrcodePath"); + return (Criteria) this; + } + + public Criteria andQrcodePathNotBetween(String value1, String value2) { + addCriterion("qrcode_path not between", value1, value2, "qrcodePath"); + return (Criteria) this; + } + + public Criteria andBigQrcodePathIsNull() { + addCriterion("big_qrcode_path is null"); + return (Criteria) this; + } + + public Criteria andBigQrcodePathIsNotNull() { + addCriterion("big_qrcode_path is not null"); + return (Criteria) this; + } + + public Criteria andBigQrcodePathEqualTo(String value) { + addCriterion("big_qrcode_path =", value, "bigQrcodePath"); + return (Criteria) this; + } + + public Criteria andBigQrcodePathNotEqualTo(String value) { + addCriterion("big_qrcode_path <>", value, "bigQrcodePath"); + return (Criteria) this; + } + + public Criteria andBigQrcodePathGreaterThan(String value) { + addCriterion("big_qrcode_path >", value, "bigQrcodePath"); + return (Criteria) this; + } + + public Criteria andBigQrcodePathGreaterThanOrEqualTo(String value) { + addCriterion("big_qrcode_path >=", value, "bigQrcodePath"); + return (Criteria) this; + } + + public Criteria andBigQrcodePathLessThan(String value) { + addCriterion("big_qrcode_path <", value, "bigQrcodePath"); + return (Criteria) this; + } + + public Criteria andBigQrcodePathLessThanOrEqualTo(String value) { + addCriterion("big_qrcode_path <=", value, "bigQrcodePath"); + return (Criteria) this; + } + + public Criteria andBigQrcodePathLike(String value) { + addCriterion("big_qrcode_path like", value, "bigQrcodePath"); + return (Criteria) this; + } + + public Criteria andBigQrcodePathNotLike(String value) { + addCriterion("big_qrcode_path not like", value, "bigQrcodePath"); + return (Criteria) this; + } + + public Criteria andBigQrcodePathIn(List values) { + addCriterion("big_qrcode_path in", values, "bigQrcodePath"); + return (Criteria) this; + } + + public Criteria andBigQrcodePathNotIn(List values) { + addCriterion("big_qrcode_path not in", values, "bigQrcodePath"); + return (Criteria) this; + } + + public Criteria andBigQrcodePathBetween(String value1, String value2) { + addCriterion("big_qrcode_path between", value1, value2, "bigQrcodePath"); + return (Criteria) this; + } + + public Criteria andBigQrcodePathNotBetween(String value1, String value2) { + addCriterion("big_qrcode_path not between", value1, value2, "bigQrcodePath"); + return (Criteria) this; + } + + public Criteria andCreatedAtIsNull() { + addCriterion("created_at is null"); + return (Criteria) this; + } + + public Criteria andCreatedAtIsNotNull() { + addCriterion("created_at is not null"); + return (Criteria) this; + } + + public Criteria andCreatedAtEqualTo(Date value) { + addCriterion("created_at =", value, "createdAt"); + return (Criteria) this; + } + + public Criteria andCreatedAtNotEqualTo(Date value) { + addCriterion("created_at <>", value, "createdAt"); + return (Criteria) this; + } + + public Criteria andCreatedAtGreaterThan(Date value) { + addCriterion("created_at >", value, "createdAt"); + return (Criteria) this; + } + + public Criteria andCreatedAtGreaterThanOrEqualTo(Date value) { + addCriterion("created_at >=", value, "createdAt"); + return (Criteria) this; + } + + public Criteria andCreatedAtLessThan(Date value) { + addCriterion("created_at <", value, "createdAt"); + return (Criteria) this; + } + + public Criteria andCreatedAtLessThanOrEqualTo(Date value) { + addCriterion("created_at <=", value, "createdAt"); + return (Criteria) this; + } + + public Criteria andCreatedAtIn(List values) { + addCriterion("created_at in", values, "createdAt"); + return (Criteria) this; + } + + public Criteria andCreatedAtNotIn(List values) { + addCriterion("created_at not in", values, "createdAt"); + return (Criteria) this; + } + + public Criteria andCreatedAtBetween(Date value1, Date value2) { + addCriterion("created_at between", value1, value2, "createdAt"); + return (Criteria) this; + } + + public Criteria andCreatedAtNotBetween(Date value1, Date value2) { + addCriterion("created_at not between", value1, value2, "createdAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtIsNull() { + addCriterion("updated_at is null"); + return (Criteria) this; + } + + public Criteria andUpdatedAtIsNotNull() { + addCriterion("updated_at is not null"); + return (Criteria) this; + } + + public Criteria andUpdatedAtEqualTo(Date value) { + addCriterion("updated_at =", value, "updatedAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtNotEqualTo(Date value) { + addCriterion("updated_at <>", value, "updatedAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtGreaterThan(Date value) { + addCriterion("updated_at >", value, "updatedAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtGreaterThanOrEqualTo(Date value) { + addCriterion("updated_at >=", value, "updatedAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtLessThan(Date value) { + addCriterion("updated_at <", value, "updatedAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtLessThanOrEqualTo(Date value) { + addCriterion("updated_at <=", value, "updatedAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtIn(List values) { + addCriterion("updated_at in", values, "updatedAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtNotIn(List values) { + addCriterion("updated_at not in", values, "updatedAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtBetween(Date value1, Date value2) { + addCriterion("updated_at between", value1, value2, "updatedAt"); + return (Criteria) this; + } + + public Criteria andUpdatedAtNotBetween(Date value1, Date value2) { + addCriterion("updated_at not between", value1, value2, "updatedAt"); + return (Criteria) this; + } + + public Criteria andRecStatusIsNull() { + addCriterion("rec_status is null"); + return (Criteria) this; + } + + public Criteria andRecStatusIsNotNull() { + addCriterion("rec_status is not null"); + return (Criteria) this; + } + + public Criteria andRecStatusEqualTo(Byte value) { + addCriterion("rec_status =", value, "recStatus"); + return (Criteria) this; + } + + public Criteria andRecStatusNotEqualTo(Byte value) { + addCriterion("rec_status <>", value, "recStatus"); + return (Criteria) this; + } + + public Criteria andRecStatusGreaterThan(Byte value) { + addCriterion("rec_status >", value, "recStatus"); + return (Criteria) this; + } + + public Criteria andRecStatusGreaterThanOrEqualTo(Byte value) { + addCriterion("rec_status >=", value, "recStatus"); + return (Criteria) this; + } + + public Criteria andRecStatusLessThan(Byte value) { + addCriterion("rec_status <", value, "recStatus"); + return (Criteria) this; + } + + public Criteria andRecStatusLessThanOrEqualTo(Byte value) { + addCriterion("rec_status <=", value, "recStatus"); + return (Criteria) this; + } + + public Criteria andRecStatusIn(List values) { + addCriterion("rec_status in", values, "recStatus"); + return (Criteria) this; + } + + public Criteria andRecStatusNotIn(List values) { + addCriterion("rec_status not in", values, "recStatus"); + return (Criteria) this; + } + + public Criteria andRecStatusBetween(Byte value1, Byte value2) { + addCriterion("rec_status between", value1, value2, "recStatus"); + return (Criteria) this; + } + + public Criteria andRecStatusNotBetween(Byte value1, Byte value2) { + addCriterion("rec_status not between", value1, value2, "recStatus"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/ct/src/main/java/com/ccsens/ct/bean/vo/BusinessVo.java b/ct/src/main/java/com/ccsens/ct/bean/vo/BusinessVo.java new file mode 100644 index 00000000..aa4593a8 --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/bean/vo/BusinessVo.java @@ -0,0 +1,29 @@ +package com.ccsens.ct.bean.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class BusinessVo { + @Data + @ApiModel("返回商户的信息") + public static class BusinessInfo{ + @ApiModelProperty("id") + private Long id; + @ApiModelProperty("商户名称") + private String name; + @ApiModelProperty("详细地址") + private String address; + @ApiModelProperty("申请人姓名") + private String applicantName; + @ApiModelProperty("身份证号") + private String idCard; + @ApiModelProperty("手机号") + private String phone; + @ApiModelProperty("营业执照") + private String businessLicense; + @ApiModelProperty("公众号二维码") + private String qrCode; + } +} diff --git a/ct/src/main/java/com/ccsens/ct/bean/vo/ClockVo.java b/ct/src/main/java/com/ccsens/ct/bean/vo/ClockVo.java new file mode 100644 index 00000000..4c90784b --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/bean/vo/ClockVo.java @@ -0,0 +1,19 @@ +package com.ccsens.ct.bean.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class ClockVo { + @Data + @ApiModel("打卡统计") + public static class ClockStatistics{ + @ApiModelProperty("场所名称") + private String siteName; + @ApiModelProperty("进or出 0进 1出") + private Integer type; + @ApiModelProperty("打卡时间") + private Long time; + } +} diff --git a/ct/src/main/java/com/ccsens/ct/bean/vo/SiteVo.java b/ct/src/main/java/com/ccsens/ct/bean/vo/SiteVo.java new file mode 100644 index 00000000..567d7014 --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/bean/vo/SiteVo.java @@ -0,0 +1,44 @@ +package com.ccsens.ct.bean.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +@Data +public class SiteVo { + + @Data + @ApiModel("返回场所信息") + public static class SiteInfoVo{ + @ApiModelProperty("所属商户id") + private Long businessId; + @ApiModelProperty("所属商户名称") + private String businessName; + @ApiModelProperty("统计页面的链接") + private String path; + @ApiModelProperty("打包下载二维码路径") + private String downloadPath; + @ApiModelProperty("场所信息") + private List site; + } + + @Data + @ApiModel("场所信息") + public static class SiteInfo{ + @ApiModelProperty("场所id") + private Long id; + @ApiModelProperty("场所名称") + private String name; + @ApiModelProperty("进二维码") + private String outQrCode; + @ApiModelProperty("出二维码") + private String inQrCode; + @ApiModelProperty("经度") + private BigDecimal longitude; + @ApiModelProperty("纬度") + private BigDecimal latitude; + } +} diff --git a/ct/src/main/java/com/ccsens/ct/config/BeanConfig.java b/ct/src/main/java/com/ccsens/ct/config/BeanConfig.java new file mode 100644 index 00000000..c4434c3c --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/config/BeanConfig.java @@ -0,0 +1,31 @@ +package com.ccsens.ct.config; + +import com.ccsens.ct.intercept.MybatisInterceptor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @description: + * @author: wuHuiJuan + * @create: 2019/12/03 18:01 + */ +@Configuration +public class BeanConfig { +// @Bean +// public static PropertySourcesPlaceholderConfigurer properties(){ +// PropertySourcesPlaceholderConfigurer conf = new PropertySourcesPlaceholderConfigurer(); +// YamlPropertiesFactoryBean yml = new YamlPropertiesFactoryBean(); +// yml.setResources(new ClassPathResource("business.yml")); +// conf.setProperties(yml.getObject()); +// return conf; +// } + + /** + * 注册拦截器 + */ + @Bean + public MybatisInterceptor mybatisInterceptor() { + MybatisInterceptor interceptor = new MybatisInterceptor(); + return interceptor; + } +} diff --git a/ct/src/main/java/com/ccsens/ct/config/SpringConfig.java b/ct/src/main/java/com/ccsens/ct/config/SpringConfig.java new file mode 100644 index 00000000..bd24e547 --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/config/SpringConfig.java @@ -0,0 +1,164 @@ +package com.ccsens.ct.config; + + +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; +import com.ccsens.util.config.DruidProps; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.MediaType; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.StringHttpMessageConverter; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.web.servlet.config.annotation.*; + +import javax.sql.DataSource; +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.List; + +@Configuration +//public class SpringConfig extends WebMvcConfigurationSupport { +public class SpringConfig implements WebMvcConfigurer { + @Autowired + private DruidProps druidPropsUtil; + @Value("${spring.snowflake.workerId}") + private String workerId; + @Value("${spring.snowflake.datacenterId}") + private String datacenterId; + + /** + * 配置Converter + * @return + */ + @Bean + public HttpMessageConverter responseStringConverter() { + StringHttpMessageConverter converter = new StringHttpMessageConverter( + Charset.forName("UTF-8")); + return converter; + } + + @Bean + public HttpMessageConverter responseJsonConverter(){ + MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); + List mediaTypeList = new ArrayList<>(); + mediaTypeList.add(MediaType.TEXT_HTML); + mediaTypeList.add(MediaType.APPLICATION_JSON_UTF8); + converter.setSupportedMediaTypes(mediaTypeList); + + //converter.setObjectMapper(); + ObjectMapper objectMapper = new ObjectMapper(); + SimpleModule simpleModule = new SimpleModule(); + simpleModule.addSerializer(Long.class, ToStringSerializer.instance); + simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance); + objectMapper.registerModule(simpleModule); + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + converter.setObjectMapper(objectMapper); + + return converter; + } + + @Override + public void configureMessageConverters(List> converters) { + //super.configureMessageConverters(converters); + converters.add(responseStringConverter()); + converters.add(responseJsonConverter()); + } + + @Override + public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { + configurer.favorPathExtension(false); + } + + + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**").allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS"); + } + + /** + * 配置视图解析器 SpringBoot建议使用Thymeleaf代替jsp,动态页面默认路径:resources/template,静态页面默认路径: resources/static + * @return + */ +// @Bean +// public ViewResolver getViewResolver() { +// InternalResourceViewResolver resolver = new InternalResourceViewResolver(); +// resolver.setPrefix("/WEB-INF/views/"); +// resolver.setSuffix(".jsp"); +// return resolver; +// } +// @Override +// public void configureDefaultServletHandling( +// DefaultServletHandlerConfigurer configurer) { +// configurer.enable(); +// } + + + /** + * 配置静态资源 + */ + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("swagger-ui.html") + .addResourceLocations("classpath:/META-INF/resources/"); + registry.addResourceHandler("/webjars/**") + .addResourceLocations("classpath:/META-INF/resources/webjars/"); + + registry.addResourceHandler("/uploads/**") + .addResourceLocations("file:///home/cloud/tall/uploads/"); + //super.addResourceHandlers(registry); + } + + /** + * 配置拦截器 + * @param registry + */ + @Override + public void addInterceptors(InterceptorRegistry registry) { + //addPathPatterns 用于添加拦截规则 + //excludePathPatterns 用于排除拦截 +// registry.addInterceptor(tokenInterceptor()) +// .addPathPatterns("/projects/**") +// .addPathPatterns("/messages/**") +// .addPathPatterns("/users/**") +// .excludePathPatterns("/users/signin") +// .excludePathPatterns("/users/smscode") +// .excludePathPatterns("/users/signup") +// .excludePathPatterns("/users/password") +// .excludePathPatterns("/users/account") +// .excludePathPatterns("/users/token") +// .excludePathPatterns("/users/claims") +// .addPathPatterns("/plugins/**") +// .addPathPatterns("/delivers/**") +// .addPathPatterns("/tasks/**") +// .addPathPatterns("/members/**") +// .addPathPatterns("/templates/**") +// .addPathPatterns("/hardware/**"); + //super.addInterceptors(registry); + } +// +// @Bean +// public TokenInterceptor tokenInterceptor(){ +// return new TokenInterceptor(); +// } + + /** + * 配置数据源(单数据源) + */ + @Bean + public DataSource dataSource(){ + return druidPropsUtil.createDruidDataSource(); + } + + @Bean + public Snowflake snowflake(){ +// return new Snowflake(Long.valueOf(workerId),Long.valueOf(datacenterId)); + return IdUtil.createSnowflake(Long.valueOf(workerId),Long.valueOf(datacenterId)); + } +} \ No newline at end of file diff --git a/ct/src/main/java/com/ccsens/ct/config/SwaggerConfigure.java b/ct/src/main/java/com/ccsens/ct/config/SwaggerConfigure.java new file mode 100644 index 00000000..58cc54a6 --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/config/SwaggerConfigure.java @@ -0,0 +1,56 @@ +package com.ccsens.ct.config; + +import com.ccsens.util.WebConstant; +import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import springfox.documentation.builders.ParameterBuilder; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.schema.ModelRef; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.service.Parameter; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +import java.util.ArrayList; +import java.util.List; + +@Configuration +@EnableSwagger2 +@ConditionalOnExpression("${swagger.enable}") +//public class SwaggerConfigure extends WebMvcConfigurationSupport { +public class SwaggerConfigure /*implements WebMvcConfigurer*/ { + @Bean + public Docket customDocket() { + // + return new Docket(DocumentationType.SWAGGER_2) + .apiInfo(apiInfo()) + .select() + .apis(RequestHandlerSelectors + .basePackage("com.ccsens.ct.api")) + .build() + .globalOperationParameters(setHeaderToken()); + } + + private ApiInfo apiInfo() { + return new ApiInfo("Swagger Tall-game",//大标题 title + "This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters.",//小标题 + "1.0.0",//版本 + "http://swagger.io/terms/",//termsOfServiceUrl + "zhangsan",//作者 + "Apache 2.0",//链接显示文字 + "http://www.apache.org/licenses/LICENSE-2.0.html"//网站链接 + ); + } + + private List setHeaderToken() { + ParameterBuilder tokenPar = new ParameterBuilder(); + List pars = new ArrayList<>(); + tokenPar.name(WebConstant.HEADER_KEY_TOKEN).description("token") + .defaultValue(WebConstant.HEADER_KEY_TOKEN_PREFIX) + .modelRef(new ModelRef("string")).parameterType("header").required(false).build(); + pars.add(tokenPar.build()); + return pars; + } +} diff --git a/ct/src/main/java/com/ccsens/ct/intercept/MybatisInterceptor.java b/ct/src/main/java/com/ccsens/ct/intercept/MybatisInterceptor.java new file mode 100644 index 00000000..386c4c2b --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/intercept/MybatisInterceptor.java @@ -0,0 +1,154 @@ +package com.ccsens.ct.intercept; + +import cn.hutool.core.collection.CollectionUtil; +import com.ccsens.util.WebConstant; +import org.apache.ibatis.executor.Executor; +import org.apache.ibatis.mapping.*; +import org.apache.ibatis.plugin.*; +import org.apache.ibatis.reflection.DefaultReflectorFactory; +import org.apache.ibatis.reflection.MetaObject; +import org.apache.ibatis.reflection.factory.DefaultObjectFactory; +import org.apache.ibatis.reflection.wrapper.DefaultObjectWrapperFactory; +import org.apache.ibatis.session.ResultHandler; +import org.apache.ibatis.session.RowBounds; + +import java.lang.reflect.Method; +import java.util.List; +import java.util.Properties; + +/** + * @description: + * @author: wuHuiJuan + * @create: 2019/12/11 10:58 + */ +@Intercepts({ + @Signature( + type = Executor.class, + method = "query", + args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class} + ) +}) +public class MybatisInterceptor implements Interceptor { + @Override + public Object intercept(Invocation invocation) throws Throwable { + + + String selectByExample = "selectByExample"; + String selectByPrimaryKey = "selectByPrimaryKey"; + + Object[] args = invocation.getArgs(); + MappedStatement statement = (MappedStatement) args[0]; + if (statement.getId().endsWith(selectByExample)) { + //XXXExample + Object example = args[1]; + Method method = example.getClass().getMethod("getOredCriteria", null); + //获取到条件数组,第一个是Criteria + List list = (List)method.invoke(example); + if (CollectionUtil.isEmpty(list)) { + Class clazz = ((ResultMap)statement.getResultMaps().get(0)).getType(); + String exampleName = clazz.getName() + "Example"; + Object paramExample = Class.forName(exampleName).newInstance(); + Method createCriteria = paramExample.getClass().getMethod("createCriteria"); + Object criteria = createCriteria.invoke(paramExample); + Method andIsDelEqualTo = criteria.getClass().getMethod("andRecStatusEqualTo", Byte.class); + andIsDelEqualTo.invoke(criteria, WebConstant.REC_STATUS.Normal.value); + list.add(criteria); + } else { + Object criteria = list.get(0); + Method getCriteria = criteria.getClass().getMethod("getCriteria"); + List params = (List)getCriteria.invoke(criteria); + boolean hasDel = false; + for(Object param: params) { + Method getCondition = param.getClass().getMethod("getCondition"); + Object condition = getCondition.invoke(param); + if ("iis_del =".equals(condition)) { + hasDel = true; + } + } + if (!hasDel) { + Method andIsDelEqualTo = criteria.getClass().getMethod("andRecStatusEqualTo", Byte.class); + andIsDelEqualTo.invoke(criteria, WebConstant.REC_STATUS.Normal.value); + } + + } + + + } else if (statement.getId().endsWith(selectByPrimaryKey)) { + BoundSql boundSql = statement.getBoundSql(args[1]); + String sql = boundSql.getSql() + " and rec_status = 0"; + MappedStatement newStatement = newMappedStatement(statement, new BoundSqlSqlSource(boundSql)); + MetaObject msObject = MetaObject.forObject(newStatement, new DefaultObjectFactory(), new DefaultObjectWrapperFactory(),new DefaultReflectorFactory()); + msObject.setValue("sqlSource.boundSql.sql", sql); + args[0] = newStatement; + } + + return invocation.proceed(); + } + + @Override + public Object plugin(Object target) { + return Plugin.wrap(target, this); + } + + @Override + public void setProperties(Properties properties) { + + } + + private MappedStatement newMappedStatement(MappedStatement ms, SqlSource newSqlSource) { + MappedStatement.Builder builder = + new MappedStatement.Builder(ms.getConfiguration(), ms.getId(), newSqlSource, ms.getSqlCommandType()); + builder.resource(ms.getResource()); + builder.fetchSize(ms.getFetchSize()); + builder.statementType(ms.getStatementType()); + builder.keyGenerator(ms.getKeyGenerator()); + if (ms.getKeyProperties() != null && ms.getKeyProperties().length != 0) { + StringBuilder keyProperties = new StringBuilder(); + for (String keyProperty : ms.getKeyProperties()) { + keyProperties.append(keyProperty).append(","); + } + keyProperties.delete(keyProperties.length() - 1, keyProperties.length()); + builder.keyProperty(keyProperties.toString()); + } + builder.timeout(ms.getTimeout()); + builder.parameterMap(ms.getParameterMap()); + builder.resultMaps(ms.getResultMaps()); + builder.resultSetType(ms.getResultSetType()); + builder.cache(ms.getCache()); + builder.flushCacheRequired(ms.isFlushCacheRequired()); + builder.useCache(ms.isUseCache()); + + return builder.build(); + } + + private String getOperateType(Invocation invocation) { + final Object[] args = invocation.getArgs(); + MappedStatement ms = (MappedStatement) args[0]; + SqlCommandType commondType = ms.getSqlCommandType(); + if (commondType.compareTo(SqlCommandType.SELECT) == 0) { + return "select"; + } + if (commondType.compareTo(SqlCommandType.INSERT) == 0) { + return "insert"; + } + if (commondType.compareTo(SqlCommandType.UPDATE) == 0) { + return "update"; + } + if (commondType.compareTo(SqlCommandType.DELETE) == 0) { + return "delete"; + } + return null; + } + // 定义一个内部辅助类,作用是包装sq + class BoundSqlSqlSource implements SqlSource { + private BoundSql boundSql; + public BoundSqlSqlSource(BoundSql boundSql) { + this.boundSql = boundSql; + } + @Override + public BoundSql getBoundSql(Object parameterObject) { + return boundSql; + } + } + +} diff --git a/ct/src/main/java/com/ccsens/ct/persist/dao/BusinessDao.java b/ct/src/main/java/com/ccsens/ct/persist/dao/BusinessDao.java new file mode 100644 index 00000000..32f7c9f0 --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/persist/dao/BusinessDao.java @@ -0,0 +1,8 @@ +package com.ccsens.ct.persist.dao; + +import com.ccsens.ct.persist.mapper.BusinessMapper; +import org.springframework.stereotype.Repository; + +@Repository +public interface BusinessDao extends BusinessMapper { +} diff --git a/ct/src/main/java/com/ccsens/ct/persist/dao/SiteClockInDao.java b/ct/src/main/java/com/ccsens/ct/persist/dao/SiteClockInDao.java new file mode 100644 index 00000000..be33e260 --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/persist/dao/SiteClockInDao.java @@ -0,0 +1,14 @@ +package com.ccsens.ct.persist.dao; + +import com.ccsens.ct.bean.po.SiteClockIn; +import com.ccsens.ct.bean.vo.ClockVo; +import com.ccsens.ct.persist.mapper.SiteClockInMapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface SiteClockInDao extends SiteClockInMapper { + List selectClockStatistics(@Param("businessId") Long businessId, @Param("userId") Long userId); +} diff --git a/ct/src/main/java/com/ccsens/ct/persist/dao/SiteDao.java b/ct/src/main/java/com/ccsens/ct/persist/dao/SiteDao.java new file mode 100644 index 00000000..6d2d9bb1 --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/persist/dao/SiteDao.java @@ -0,0 +1,8 @@ +package com.ccsens.ct.persist.dao; + +import com.ccsens.ct.persist.mapper.SiteMapper; +import org.springframework.stereotype.Repository; + +@Repository +public interface SiteDao extends SiteMapper { +} diff --git a/ct/src/main/java/com/ccsens/ct/persist/dao/SiteQrcodeDao.java b/ct/src/main/java/com/ccsens/ct/persist/dao/SiteQrcodeDao.java new file mode 100644 index 00000000..ab9a763b --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/persist/dao/SiteQrcodeDao.java @@ -0,0 +1,9 @@ +package com.ccsens.ct.persist.dao; + +import com.ccsens.ct.bean.po.SiteQrcode; +import com.ccsens.ct.persist.mapper.SiteQrcodeMapper; +import org.springframework.stereotype.Repository; + +@Repository +public interface SiteQrcodeDao extends SiteQrcodeMapper { +} diff --git a/ct/src/main/java/com/ccsens/ct/persist/mapper/BusinessMapper.java b/ct/src/main/java/com/ccsens/ct/persist/mapper/BusinessMapper.java new file mode 100644 index 00000000..529ada93 --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/persist/mapper/BusinessMapper.java @@ -0,0 +1,30 @@ +package com.ccsens.ct.persist.mapper; + +import com.ccsens.ct.bean.po.Business; +import com.ccsens.ct.bean.po.BusinessExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface BusinessMapper { + long countByExample(BusinessExample example); + + int deleteByExample(BusinessExample example); + + int deleteByPrimaryKey(Long id); + + int insert(Business record); + + int insertSelective(Business record); + + List selectByExample(BusinessExample example); + + Business selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") Business record, @Param("example") BusinessExample example); + + int updateByExample(@Param("record") Business record, @Param("example") BusinessExample example); + + int updateByPrimaryKeySelective(Business record); + + int updateByPrimaryKey(Business record); +} \ No newline at end of file diff --git a/ct/src/main/java/com/ccsens/ct/persist/mapper/SiteClockInMapper.java b/ct/src/main/java/com/ccsens/ct/persist/mapper/SiteClockInMapper.java new file mode 100644 index 00000000..1efa9342 --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/persist/mapper/SiteClockInMapper.java @@ -0,0 +1,30 @@ +package com.ccsens.ct.persist.mapper; + +import com.ccsens.ct.bean.po.SiteClockIn; +import com.ccsens.ct.bean.po.SiteClockInExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface SiteClockInMapper { + long countByExample(SiteClockInExample example); + + int deleteByExample(SiteClockInExample example); + + int deleteByPrimaryKey(Long id); + + int insert(SiteClockIn record); + + int insertSelective(SiteClockIn record); + + List selectByExample(SiteClockInExample example); + + SiteClockIn selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") SiteClockIn record, @Param("example") SiteClockInExample example); + + int updateByExample(@Param("record") SiteClockIn record, @Param("example") SiteClockInExample example); + + int updateByPrimaryKeySelective(SiteClockIn record); + + int updateByPrimaryKey(SiteClockIn record); +} \ No newline at end of file diff --git a/ct/src/main/java/com/ccsens/ct/persist/mapper/SiteMapper.java b/ct/src/main/java/com/ccsens/ct/persist/mapper/SiteMapper.java new file mode 100644 index 00000000..37aadd83 --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/persist/mapper/SiteMapper.java @@ -0,0 +1,30 @@ +package com.ccsens.ct.persist.mapper; + +import com.ccsens.ct.bean.po.Site; +import com.ccsens.ct.bean.po.SiteExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface SiteMapper { + long countByExample(SiteExample example); + + int deleteByExample(SiteExample example); + + int deleteByPrimaryKey(Long id); + + int insert(Site record); + + int insertSelective(Site record); + + List selectByExample(SiteExample example); + + Site selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") Site record, @Param("example") SiteExample example); + + int updateByExample(@Param("record") Site record, @Param("example") SiteExample example); + + int updateByPrimaryKeySelective(Site record); + + int updateByPrimaryKey(Site record); +} \ No newline at end of file diff --git a/ct/src/main/java/com/ccsens/ct/persist/mapper/SiteQrcodeMapper.java b/ct/src/main/java/com/ccsens/ct/persist/mapper/SiteQrcodeMapper.java new file mode 100644 index 00000000..0891e7a9 --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/persist/mapper/SiteQrcodeMapper.java @@ -0,0 +1,30 @@ +package com.ccsens.ct.persist.mapper; + +import com.ccsens.ct.bean.po.SiteQrcode; +import com.ccsens.ct.bean.po.SiteQrcodeExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface SiteQrcodeMapper { + long countByExample(SiteQrcodeExample example); + + int deleteByExample(SiteQrcodeExample example); + + int deleteByPrimaryKey(Long id); + + int insert(SiteQrcode record); + + int insertSelective(SiteQrcode record); + + List selectByExample(SiteQrcodeExample example); + + SiteQrcode selectByPrimaryKey(Long id); + + int updateByExampleSelective(@Param("record") SiteQrcode record, @Param("example") SiteQrcodeExample example); + + int updateByExample(@Param("record") SiteQrcode record, @Param("example") SiteQrcodeExample example); + + int updateByPrimaryKeySelective(SiteQrcode record); + + int updateByPrimaryKey(SiteQrcode record); +} \ No newline at end of file diff --git a/ct/src/main/java/com/ccsens/ct/service/BusinessService.java b/ct/src/main/java/com/ccsens/ct/service/BusinessService.java new file mode 100644 index 00000000..9e29dbda --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/service/BusinessService.java @@ -0,0 +1,170 @@ +package com.ccsens.ct.service; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.ccsens.ct.bean.dto.BusinessDto; +import com.ccsens.ct.bean.po.Business; +import com.ccsens.ct.bean.po.BusinessExample; +import com.ccsens.ct.bean.vo.BusinessVo; +import com.ccsens.ct.persist.dao.BusinessDao; +import com.ccsens.util.Base64FileUtil; +import com.ccsens.util.CodeEnum; +import com.ccsens.util.WebConstant; +import com.ccsens.util.bean.dto.QueryDto; +import com.ccsens.util.exception.BaseException; +import com.ccsens.util.wx.WxXcxUtil; +import net.bytebuddy.asm.Advice; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class BusinessService implements IBusinessService{ + @Autowired + private Snowflake snowflake; + @Autowired + private BusinessDao businessDao; + + + /** + * 上传商户的信息 + * @param params + * @return + */ + @Override + public BusinessVo.BusinessInfo uploadBusiness(QueryDto params) throws Exception { + BusinessDto.BusinessInfo businessInfo = params.getParam(); + Long userId = params.getUserId(); + //将base64转化为文件并存入服务器,将路径存入商户信息 + String path = WebConstant.UPLOAD_PATH_BASE + "/business/"; + String fileName = DateUtil.today() + "/"; + //营业执照 + String businessLicensePath = ""; + if(StrUtil.isNotEmpty(businessInfo.getBusinessLicense())) { + String businessLicenseName = Base64FileUtil.base64ToFile(businessInfo.getBusinessLicense(), path, fileName); + businessLicensePath = WebConstant.TEST_URL_BASE_CT + "/business/" + businessLicenseName; + } + //公众号二维码 + String qrCodePath = ""; + if(StrUtil.isNotEmpty(businessInfo.getQrCode())) { + String qrCodeName = Base64FileUtil.base64ToFile(businessInfo.getQrCode(), path, fileName); + qrCodePath = WebConstant.TEST_URL_BASE_CT + "/business/" + qrCodeName; + } + //将商户信息存入数据库 + Business business = new Business(); + business.setId(snowflake.nextId()); + business.setName(businessInfo.getName()); + business.setAddress(businessInfo.getAddress()); + business.setApplicantName(businessInfo.getApplicantName()); + business.setApplicantIdCard(businessInfo.getIdCard()); + business.setApplicantPhone(businessInfo.getPhone()); + business.setBusinessLicense(businessLicensePath); + business.setQrCord(qrCodePath); + business.setUserId(userId); + businessDao.insertSelective(business); + //返回 + BusinessVo.BusinessInfo businessInfoVo = new BusinessVo.BusinessInfo(); + businessInfoVo.setId(business.getId()); + businessInfoVo.setName(business.getName()); + businessInfoVo.setAddress(business.getAddress()); + businessInfoVo.setApplicantName(business.getApplicantName()); + businessInfoVo.setIdCard(business.getApplicantIdCard()); + businessInfoVo.setPhone(business.getApplicantPhone()); + businessInfoVo.setBusinessLicense(business.getBusinessLicense()); + businessInfoVo.setQrCode(business.getQrCord()); + + return businessInfoVo; + } + + /** + * 查询商户的信息 + * @param params + * @return + */ + @Override + public BusinessVo.BusinessInfo selectBusiness(QueryDto params) { + BusinessVo.BusinessInfo businessInfo = null; + + Long userId = params.getUserId(); + BusinessExample businessExample = new BusinessExample(); + businessExample.createCriteria().andUserIdEqualTo(userId); + List businessList = businessDao.selectByExample(businessExample); + if(CollectionUtil.isNotEmpty(businessList)){ + Business business = businessList.get(0); + businessInfo = new BusinessVo.BusinessInfo(); + businessInfo.setId(business.getId()); + businessInfo.setName(business.getName()); + businessInfo.setAddress(business.getAddress()); + businessInfo.setIdCard(business.getApplicantIdCard()); + businessInfo.setApplicantName(business.getApplicantName()); + businessInfo.setPhone(business.getApplicantPhone()); + businessInfo.setBusinessLicense(business.getBusinessLicense()); + businessInfo.setQrCode(business.getQrCord()); + } + return businessInfo; + } + + /** + * 修改商户的信息 + * @param params + * @return + */ + @Override + public BusinessVo.BusinessInfo updateBusiness(QueryDto params) throws Exception { + BusinessDto.UpdateBusiness updateBusiness = params.getParam(); + //查找到原来的商户信息 + Business business = businessDao.selectByPrimaryKey(updateBusiness.getId()); + if(ObjectUtil.isNull(business)){ + throw new BaseException(CodeEnum.NOT_BUSINESS); + } + + if(StrUtil.isNotEmpty(updateBusiness.getName())){ + business.setName(updateBusiness.getName()); + } + if(StrUtil.isNotEmpty(updateBusiness.getAddress())){ + business.setAddress(updateBusiness.getAddress()); + } + if(StrUtil.isNotEmpty(updateBusiness.getApplicantName())){ + business.setApplicantName(updateBusiness.getApplicantName()); + } + if(StrUtil.isNotEmpty(updateBusiness.getIdCard())){ + business.setApplicantIdCard(updateBusiness.getIdCard()); + } + if(StrUtil.isNotEmpty(updateBusiness.getPhone())){ + business.setApplicantPhone(updateBusiness.getPhone()); + } + //如果文件重新上传 重新生成图片和路径 + String path = WebConstant.UPLOAD_PATH_BASE + "/business/"; + String fileName = DateUtil.today() + "/"; + //营业执照 + if(StrUtil.isNotEmpty(updateBusiness.getBusinessLicense())){ + String businessLicenseName = Base64FileUtil.base64ToFile(updateBusiness.getBusinessLicense(),path,fileName); + String businessLicensePath = WebConstant.TEST_URL_BASE_CT + "/business/" + businessLicenseName; + + business.setBusinessLicense(businessLicensePath); + } + //公众号二维码 + if(StrUtil.isNotEmpty(updateBusiness.getQrCode())){ + String qrCodeName = Base64FileUtil.base64ToFile(updateBusiness.getQrCode(),path,fileName); + String qrCodePath = WebConstant.TEST_URL_BASE_CT + "/business/" + qrCodeName; + business.setQrCord(qrCodePath); + } + businessDao.updateByPrimaryKeySelective(business); + //返回 + BusinessVo.BusinessInfo businessInfoVo = new BusinessVo.BusinessInfo(); + businessInfoVo.setId(business.getId()); + businessInfoVo.setName(business.getName()); + businessInfoVo.setApplicantName(business.getApplicantName()); + businessInfoVo.setAddress(business.getAddress()); + businessInfoVo.setIdCard(business.getApplicantIdCard()); + businessInfoVo.setPhone(business.getApplicantPhone()); + businessInfoVo.setBusinessLicense(business.getBusinessLicense()); + businessInfoVo.setQrCode(business.getQrCord()); + + return businessInfoVo; + } +} diff --git a/ct/src/main/java/com/ccsens/ct/service/ClockService.java b/ct/src/main/java/com/ccsens/ct/service/ClockService.java new file mode 100644 index 00000000..f4322a93 --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/service/ClockService.java @@ -0,0 +1,58 @@ +package com.ccsens.ct.service; + +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.ObjectUtil; +import com.ccsens.ct.bean.dto.BusinessDto; +import com.ccsens.ct.bean.dto.ClockDto; +import com.ccsens.ct.bean.po.Business; +import com.ccsens.ct.bean.po.SiteClockIn; +import com.ccsens.ct.bean.vo.ClockVo; +import com.ccsens.ct.persist.dao.SiteClockInDao; +import com.ccsens.util.bean.dto.QueryDto; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class ClockService implements IClockService{ + + @Autowired + private SiteClockInDao siteClockInDao; + @Autowired + private Snowflake snowflake; + + /** + * 打卡 + * @param params + */ + @Override + public void clockIn(QueryDto params) { + ClockDto.ClockIn clockIn = params.getParam(); + Long userId = params.getUserId(); + //TODO 判断用户是否在打卡的场所附近 + + //添加打卡记录 + SiteClockIn siteClockIn = new SiteClockIn(); + siteClockIn.setId(snowflake.nextId()); + siteClockIn.setQrcodeId(clockIn.getId()); + siteClockIn.setUserId(userId); + siteClockIn.setTime(System.currentTimeMillis()); + siteClockIn.setLongitude(clockIn.getLongitude()); + siteClockIn.setLatitude(clockIn.getLatitude()); + siteClockInDao.insertSelective(siteClockIn); + } + + /** + * 统计打卡记录 + * @param + * @return + */ + @Override + public List clockStatistics(Long businessId,Long userId) { + //如果商户id不为空,则查询用户在此商户下的打卡记录,否则查询此用户所有的打卡记录 + List clockStatisticsList = siteClockInDao.selectClockStatistics(businessId,userId); + + return clockStatisticsList; + } +} diff --git a/ct/src/main/java/com/ccsens/ct/service/IBusinessService.java b/ct/src/main/java/com/ccsens/ct/service/IBusinessService.java new file mode 100644 index 00000000..0064d0da --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/service/IBusinessService.java @@ -0,0 +1,13 @@ +package com.ccsens.ct.service; + +import com.ccsens.ct.bean.dto.BusinessDto; +import com.ccsens.ct.bean.vo.BusinessVo; +import com.ccsens.util.bean.dto.QueryDto; + +public interface IBusinessService { + BusinessVo.BusinessInfo uploadBusiness(QueryDto params) throws Exception; + + BusinessVo.BusinessInfo selectBusiness(QueryDto params); + + BusinessVo.BusinessInfo updateBusiness(QueryDto params) throws Exception; +} diff --git a/ct/src/main/java/com/ccsens/ct/service/IClockService.java b/ct/src/main/java/com/ccsens/ct/service/IClockService.java new file mode 100644 index 00000000..fb969021 --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/service/IClockService.java @@ -0,0 +1,14 @@ +package com.ccsens.ct.service; + +import com.ccsens.ct.bean.dto.BusinessDto; +import com.ccsens.ct.bean.dto.ClockDto; +import com.ccsens.ct.bean.vo.ClockVo; +import com.ccsens.util.bean.dto.QueryDto; + +import java.util.List; + +public interface IClockService { + void clockIn(QueryDto params); + + List clockStatistics(Long businessId,Long userId); +} diff --git a/ct/src/main/java/com/ccsens/ct/service/ISiteService.java b/ct/src/main/java/com/ccsens/ct/service/ISiteService.java new file mode 100644 index 00000000..38a1e46a --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/service/ISiteService.java @@ -0,0 +1,21 @@ +package com.ccsens.ct.service; + +import com.ccsens.ct.bean.dto.BusinessDto; +import com.ccsens.ct.bean.dto.SiteDto; +import com.ccsens.ct.bean.vo.SiteVo; +import com.ccsens.util.bean.dto.QueryDto; + +import java.io.IOException; +import java.util.List; + +public interface ISiteService { + SiteVo.SiteInfoVo addSite(QueryDto params) throws IOException; + + SiteVo.SiteInfo selectSiteById(Long siteId); + + SiteVo.SiteInfo updateSiteInfo(QueryDto params); + + SiteVo.SiteInfoVo selectSiteAllByBusinessId(QueryDto params); + + String downloadQrCode(Long businessId); +} diff --git a/ct/src/main/java/com/ccsens/ct/service/SiteService.java b/ct/src/main/java/com/ccsens/ct/service/SiteService.java new file mode 100644 index 00000000..f96ac2e7 --- /dev/null +++ b/ct/src/main/java/com/ccsens/ct/service/SiteService.java @@ -0,0 +1,230 @@ +package com.ccsens.ct.service; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.ccsens.ct.bean.dto.BusinessDto; +import com.ccsens.ct.bean.dto.SiteDto; +import com.ccsens.ct.bean.po.*; +import com.ccsens.ct.bean.vo.SiteVo; +import com.ccsens.ct.persist.dao.BusinessDao; +import com.ccsens.ct.persist.dao.SiteDao; +import com.ccsens.ct.persist.dao.SiteQrcodeDao; +import com.ccsens.util.CodeEnum; +import com.ccsens.util.QrCodeUtil; +import com.ccsens.util.WebConstant; +import com.ccsens.util.bean.dto.QueryDto; +import com.ccsens.util.exception.BaseException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +@Service +public class SiteService implements ISiteService { + @Autowired + private SiteDao siteDao; + @Autowired + private Snowflake snowflake; + @Autowired + private SiteQrcodeDao siteQrcodeDao; + @Autowired + private BusinessDao businessDao; + + + /** + * 添加场所 + * + * @param params + * @return + */ + @Override + public SiteVo.SiteInfoVo addSite(QueryDto params) throws IOException { + SiteVo.SiteInfoVo siteInfoVo = new SiteVo.SiteInfoVo(); + List siteInfos = new ArrayList<>(); + + SiteDto.SiteInfoDto siteInfoDto = params.getParam(); + if (CollectionUtil.isNotEmpty(siteInfoDto.getSiteInfo())){ + if(siteInfoDto.getSiteInfo().size() > 5){ + throw new BaseException(CodeEnum.SITE_EXCEED); + } + //查找该商户下已有场所 + SiteExample siteExample = new SiteExample(); + siteExample.createCriteria().andBusinessIdEqualTo(siteInfoDto.getId()); + List siteList = siteDao.selectByExample(siteExample); + //目前一个商户只能添加五个场所 + if(CollectionUtil.isNotEmpty(siteList)) { + if (siteInfoDto.getSiteInfo().size() + siteList.size() > 5) { + throw new BaseException(CodeEnum.SITE_EXCEED); + } + } + //添加场所 + for (SiteDto.SiteInfo siteInfo : siteInfoDto.getSiteInfo()) { + Site site = new Site(); + site.setId(snowflake.nextId()); + site.setBusinessId(siteInfoDto.getId()); + site.setSiteName(siteInfo.getSiteName()); + site.setLongitude(siteInfo.getLongitude()); + site.setLatitude(siteInfo.getLatitude()); + siteDao.insertSelective(site); + + String path = WebConstant.UPLOAD_PATH_BASE + "/"; + //生成进二维码 + SiteQrcode inSiteQrcode = new SiteQrcode(); + inSiteQrcode.setId(snowflake.nextId()); + inSiteQrcode.setSiteId(site.getId()); + inSiteQrcode.setOutOrIn((byte) 0); + String inFileName = QrCodeUtil.urlToQRCodeWithSize("https://test.tall.wiki/ct-dev?id=" + inSiteQrcode.getId(), path,200); + String bigInFileName = QrCodeUtil.urlToQRCodeWithSize("https://test.tall.wiki/ct-dev?id=" + inSiteQrcode.getId(), path,1000); + + inSiteQrcode.setQrcodePath(WebConstant.TEST_URL_BASE_CT + inFileName); + inSiteQrcode.setBigQrcodePath(WebConstant.TEST_URL_BASE_CT + bigInFileName); + siteQrcodeDao.insertSelective(inSiteQrcode); + //生成出二维码 + SiteQrcode outSiteQrcode = new SiteQrcode(); + outSiteQrcode.setId(snowflake.nextId()); + outSiteQrcode.setSiteId(site.getId()); + outSiteQrcode.setOutOrIn((byte) 0); + String outFileName = QrCodeUtil.urlToQRCodeWithSize("https://test.tall.wiki/ct-dev/sign?id=" + outSiteQrcode.getId(), path,200); + String bigOutFileName = QrCodeUtil.urlToQRCodeWithSize("https://test.tall.wiki/ct-dev/sign?id=" + outSiteQrcode.getId(), path,1000); + + outSiteQrcode.setQrcodePath(WebConstant.TEST_URL_BASE_CT + outFileName); + outSiteQrcode.setBigQrcodePath(WebConstant.TEST_URL_BASE_CT + bigOutFileName); + siteQrcodeDao.insertSelective(outSiteQrcode); + //获取返回的场所信息 + SiteVo.SiteInfo siteInfo1 = new SiteVo.SiteInfo(); + siteInfo1.setId(site.getId()); + siteInfo1.setName(site.getSiteName()); + siteInfo1.setLongitude(site.getLongitude()); + siteInfo1.setLatitude(site.getLatitude()); + siteInfo1.setInQrCode(inSiteQrcode.getQrcodePath()); + siteInfo1.setOutQrCode(outSiteQrcode.getQrcodePath()); + siteInfos.add(siteInfo1); + } + } + + //查找商户信息 + Business business = businessDao.selectByPrimaryKey(siteInfoDto.getId()); + siteInfoVo.setBusinessId(business.getId()); + siteInfoVo.setBusinessName(business.getName()); + siteInfoVo.setSite(siteInfos); + //TODO + siteInfoVo.setPath("http://test.tall.wiki/ct-dev/sign-history"); + + return siteInfoVo; + } + + /** + * 通过id查找场所信息 + * + * @param siteId + * @return + */ + @Override + public SiteVo.SiteInfo selectSiteById(Long siteId) { + SiteVo.SiteInfo siteInfo = new SiteVo.SiteInfo(); + String inQrCode = ""; + String outQrCode = ""; + Site site = siteDao.selectByPrimaryKey(siteId); + if (ObjectUtil.isNotNull(site)) { + //进二维码 + SiteQrcodeExample inQrcodeExample = new SiteQrcodeExample(); + inQrcodeExample.createCriteria().andSiteIdEqualTo(site.getId()).andOutOrInEqualTo((byte) 0); + List inQrcodeList = siteQrcodeDao.selectByExample(inQrcodeExample); + if (CollectionUtil.isNotEmpty(inQrcodeList)) { + inQrCode = inQrcodeList.get(0).getQrcodePath(); + } + //进二维码 + SiteQrcodeExample outQrcodeExample = new SiteQrcodeExample(); + outQrcodeExample.createCriteria().andSiteIdEqualTo(site.getId()); + List outQrcodeList = siteQrcodeDao.selectByExample(outQrcodeExample); + if (CollectionUtil.isNotEmpty(outQrcodeList)) { + outQrCode = outQrcodeList.get(0).getQrcodePath(); + } + } + siteInfo.setId(site.getId()); + siteInfo.setName(site.getSiteName()); + siteInfo.setLongitude(site.getLongitude()); + siteInfo.setLatitude(site.getLatitude()); + siteInfo.setInQrCode(inQrCode); + siteInfo.setOutQrCode(outQrCode); + return siteInfo; + } + + /** + * 修改场所的信息 + * + * @param params + * @return + */ + @Override + public SiteVo.SiteInfo updateSiteInfo(QueryDto params) { + SiteDto.UpdateSite updateSite = params.getParam(); + //查找场所信息 + Site site = siteDao.selectByPrimaryKey(updateSite.getId()); + if (ObjectUtil.isNull(site)) { + throw new BaseException(CodeEnum.NOT_SITE); + } + //修改场所信息 + if (StrUtil.isNotEmpty(updateSite.getSiteName())) { + site.setSiteName(updateSite.getSiteName()); + } + if (ObjectUtil.isNotNull(updateSite.getLongitude())) { + site.setLongitude(updateSite.getLongitude()); + } + if (ObjectUtil.isNotNull(updateSite.getLatitude())) { + site.setLongitude(updateSite.getLatitude()); + } + siteDao.updateByPrimaryKeySelective(site); + //获取返回值 + SiteVo.SiteInfo siteInfo = selectSiteById(site.getId()); + return siteInfo; + } + + /** + * 通过商户id查询所有的场所信息 + * + * @param params + * @return + */ + @Override + public SiteVo.SiteInfoVo selectSiteAllByBusinessId(QueryDto params) { + SiteVo.SiteInfoVo siteInfoVo = new SiteVo.SiteInfoVo(); + //获取商户信息 + Business business = businessDao.selectByPrimaryKey(params.getParam().getId()); + if (ObjectUtil.isNull(business)) { + throw new BaseException(CodeEnum.NOT_BUSINESS); + } + siteInfoVo.setBusinessId(business.getId()); + siteInfoVo.setBusinessName(business.getName()); + //TODO + siteInfoVo.setPath("http://test.tall.wiki/ct-dev/sign-history"); + //获取场所信息 + List siteInfoList = new ArrayList<>(); + SiteExample siteExample = new SiteExample(); + siteExample.createCriteria().andBusinessIdEqualTo(business.getId()); + List siteList = siteDao.selectByExample(siteExample); + if (CollectionUtil.isNotEmpty(siteList)) { + for (Site site : siteList) { + SiteVo.SiteInfo siteInfo = selectSiteById(site.getId()); + siteInfoList.add(siteInfo); + } + } + siteInfoVo.setSite(siteInfoList); + return siteInfoVo; + } + + /** + * 下载商户下的所有场所的二维码 + * + * @param businessId + * @return + */ + @Override + public String downloadQrCode(Long businessId) { + return null; + } +} diff --git a/ct/src/main/resources/application-common.yml b/ct/src/main/resources/application-common.yml new file mode 100644 index 00000000..40efee80 --- /dev/null +++ b/ct/src/main/resources/application-common.yml @@ -0,0 +1,30 @@ +logging: + level: + com: + favorites: DEBUG + org: + hibernate: ERROR + springframework: + web: DEBUG +mybatis: + config-location: classpath:mybatis/mybatis-config.xml + mapper-locations: classpath*:mapper_*/*.xml + type-aliases-package: com.ccsens.mtpro.bean +#server: +# tomcat: +# uri-encoding: UTF-8 +spring: + http: + encoding: + charset: UTF-8 + enabled: true + force: true + log-request-details: true + servlet: + multipart: + max-file-size: 10MB + max-request-size: 100MB + snowflake: + datacenterId: 1 + workerId: 1 + diff --git a/ct/src/main/resources/application-dev.yml b/ct/src/main/resources/application-dev.yml new file mode 100644 index 00000000..24cfd7a7 --- /dev/null +++ b/ct/src/main/resources/application-dev.yml @@ -0,0 +1,29 @@ +server: + port: 7090 + servlet: + context-path: +spring: + application: + name: ct + datasource: + type: com.alibaba.druid.pool.DruidDataSource + rabbitmq: + host: 49.233.89.188 + password: 111111 + port: 5672 + username: admin + redis: + database: 0 + host: 127.0.0.1 + jedis: + pool: + max-active: 200 + max-idle: 10 + max-wait: -1ms + min-idle: 0 + password: '' + port: 6379 + timeout: 1000ms +swagger: + enable: true + diff --git a/ct/src/main/resources/application-test.yml b/ct/src/main/resources/application-test.yml new file mode 100644 index 00000000..895bf3e7 --- /dev/null +++ b/ct/src/main/resources/application-test.yml @@ -0,0 +1,31 @@ +server: + port: 7090 + servlet: + context-path: +spring: + application: + name: ct + datasource: + type: com.alibaba.druid.pool.DruidDataSource + rabbitmq: + host: api.ccsens.com + password: 111111 + port: 5672 + username: admin + redis: + database: 0 + host: 127.0.0.1 + jedis: + pool: + max-active: 200 + max-idle: 10 + max-wait: -1ms + min-idle: 0 + password: '' + port: 6379 + timeout: 1000ms +swagger: + enable: true +eureka: + instance: + ip-address: 119.28.76.62 \ No newline at end of file diff --git a/ct/src/main/resources/application.yml b/ct/src/main/resources/application.yml new file mode 100644 index 00000000..5889ff7f --- /dev/null +++ b/ct/src/main/resources/application.yml @@ -0,0 +1,4 @@ +spring: + profiles: + active: test + include: common, util-test \ No newline at end of file diff --git a/ct/src/main/resources/druid-dev.yml b/ct/src/main/resources/druid-dev.yml new file mode 100644 index 00000000..5a1b1e2b --- /dev/null +++ b/ct/src/main/resources/druid-dev.yml @@ -0,0 +1,33 @@ +spring: + datasource: + druid: + connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 + driverClassName: com.mysql.cj.jdbc.Driver + dynamicUrl: jdbc:mysql://localhost:3306/${schema} + filterExclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*' + filterName: druidFilter + filterProfileEnable: true + filterUrlPattern: /* + filters: stat,wall + initialSize: 5 + maxActive: 20 + maxPoolPreparedStatementPerConnectionSize: 20 + maxWait: 60000 + minEvictableIdleTimeMillis: 300000 + minIdle: 5 + password: 37080c1f223685592316b02dad8816c019290a476e54ebb638f9aa3ba8b6bdb9 + poolPreparedStatements: true + servletLogSlowSql: true + servletLoginPassword: 111111 + servletLoginUsername: druid + servletName: druidServlet + servletResetEnable: true + servletUrlMapping: /druid/* + testOnBorrow: false + testOnReturn: false + testWhileIdle: true + timeBetweenEvictionRunsMillis: 60000 + url: jdbc:mysql://49.233.89.188:3306/ct?useUnicode=true&characterEncoding=UTF-8 + username: root + validationQuery: SELECT 1 FROM DUAL + env: CCSENS_GAME \ No newline at end of file diff --git a/ct/src/main/resources/druid-prod.yml b/ct/src/main/resources/druid-prod.yml new file mode 100644 index 00000000..e38249c2 --- /dev/null +++ b/ct/src/main/resources/druid-prod.yml @@ -0,0 +1,33 @@ +spring: + datasource: + druid: + connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 + driverClassName: com.mysql.cj.jdbc.Driver + dynamicUrl: jdbc:mysql://localhost:3306/${schema} + filterExclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*' + filterName: druidFilter + filterProfileEnable: true + filterUrlPattern: /* + filters: stat,wall + initialSize: 5 + maxActive: 20 + maxPoolPreparedStatementPerConnectionSize: 20 + maxWait: 60000 + minEvictableIdleTimeMillis: 300000 + minIdle: 5 + password: + poolPreparedStatements: true + servletLogSlowSql: true + servletLoginPassword: 111111 + servletLoginUsername: druid + servletName: druidServlet + servletResetEnable: true + servletUrlMapping: /druid/* + testOnBorrow: false + testOnReturn: false + testWhileIdle: true + timeBetweenEvictionRunsMillis: 60000 + url: jdbc:mysql://127.0.0.1/ct?useUnicode=true&characterEncoding=UTF-8 + username: root + validationQuery: SELECT 1 FROM DUAL + env: CCSENS_GAME \ No newline at end of file diff --git a/ct/src/main/resources/druid-test.yml b/ct/src/main/resources/druid-test.yml new file mode 100644 index 00000000..d881a454 --- /dev/null +++ b/ct/src/main/resources/druid-test.yml @@ -0,0 +1,33 @@ +spring: + datasource: + druid: + connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 + driverClassName: com.mysql.cj.jdbc.Driver + dynamicUrl: jdbc:mysql://localhost:3306/${schema} + filterExclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*' + filterName: druidFilter + filterProfileEnable: true + filterUrlPattern: /* + filters: stat,wall + initialSize: 5 + maxActive: 20 + maxPoolPreparedStatementPerConnectionSize: 20 + maxWait: 60000 + minEvictableIdleTimeMillis: 300000 + minIdle: 5 + password: 37080c1f223685592316b02dad8816c019290a476e54ebb638f9aa3ba8b6bdb9 + poolPreparedStatements: true + servletLogSlowSql: true + servletLoginPassword: 111111 + servletLoginUsername: druid + servletName: druidServlet + servletResetEnable: true + servletUrlMapping: /druid/* + testOnBorrow: false + testOnReturn: false + testWhileIdle: true + timeBetweenEvictionRunsMillis: 60000 + url: jdbc:mysql://49.233.89.188/ct?useUnicode=true&characterEncoding=UTF-8 + username: root + validationQuery: SELECT 1 FROM DUAL + env: CCSENS_GAME \ No newline at end of file diff --git a/ct/src/main/resources/logback-spring.xml b/ct/src/main/resources/logback-spring.xml new file mode 100644 index 00000000..3c1c8023 --- /dev/null +++ b/ct/src/main/resources/logback-spring.xml @@ -0,0 +1,196 @@ + + + + + + + + + + logback + + + + + + + + + + + + + + + + + info + + + ${CONSOLE_LOG_PATTERN} + + UTF-8 + + + + + + + + + + ${log.path}/log_debug.log + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + UTF-8 + + + + + ${log.path}/debug/log-debug-%d{yyyy-MM-dd}.%i.log + + 100MB + + + 15 + + + + debug + ACCEPT + DENY + + + + + + + ${log.path}/log_info.log + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + UTF-8 + + + + + ${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log + + 100MB + + + 15 + + + + info + ACCEPT + DENY + + + + + + + ${log.path}/log_warn.log + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + UTF-8 + + + + ${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log + + 100MB + + + 15 + + + + warn + ACCEPT + DENY + + + + + + + + ${log.path}/log_error.log + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + UTF-8 + + + + ${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.log + + 100MB + + + 15 + + + + ERROR + ACCEPT + DENY + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ct/src/main/resources/mapper_dao/SiteClockInDao.xml b/ct/src/main/resources/mapper_dao/SiteClockInDao.xml new file mode 100644 index 00000000..10013f6b --- /dev/null +++ b/ct/src/main/resources/mapper_dao/SiteClockInDao.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/ct/src/main/resources/mapper_dao/SiteDao.xml b/ct/src/main/resources/mapper_dao/SiteDao.xml new file mode 100644 index 00000000..f4e47127 --- /dev/null +++ b/ct/src/main/resources/mapper_dao/SiteDao.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ct/src/main/resources/mapper_raw/BusinessMapper.xml b/ct/src/main/resources/mapper_raw/BusinessMapper.xml new file mode 100644 index 00000000..7945c348 --- /dev/null +++ b/ct/src/main/resources/mapper_raw/BusinessMapper.xml @@ -0,0 +1,338 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, name, address, applicant_name, applicant_id_card, applicant_phone, business_license, + qr_cord, user_id, passed, created_at, updated_at, rec_status + + + + + delete from t_business + where id = #{id,jdbcType=BIGINT} + + + delete from t_business + + + + + + insert into t_business (id, name, address, + applicant_name, applicant_id_card, applicant_phone, + business_license, qr_cord, user_id, + passed, created_at, updated_at, + rec_status) + values (#{id,jdbcType=BIGINT}, #{name,jdbcType=VARCHAR}, #{address,jdbcType=VARCHAR}, + #{applicantName,jdbcType=VARCHAR}, #{applicantIdCard,jdbcType=VARCHAR}, #{applicantPhone,jdbcType=VARCHAR}, + #{businessLicense,jdbcType=VARCHAR}, #{qrCord,jdbcType=VARCHAR}, #{userId,jdbcType=BIGINT}, + #{passed,jdbcType=TINYINT}, #{createdAt,jdbcType=TIMESTAMP}, #{updatedAt,jdbcType=TIMESTAMP}, + #{recStatus,jdbcType=TINYINT}) + + + insert into t_business + + + id, + + + name, + + + address, + + + applicant_name, + + + applicant_id_card, + + + applicant_phone, + + + business_license, + + + qr_cord, + + + user_id, + + + passed, + + + created_at, + + + updated_at, + + + rec_status, + + + + + #{id,jdbcType=BIGINT}, + + + #{name,jdbcType=VARCHAR}, + + + #{address,jdbcType=VARCHAR}, + + + #{applicantName,jdbcType=VARCHAR}, + + + #{applicantIdCard,jdbcType=VARCHAR}, + + + #{applicantPhone,jdbcType=VARCHAR}, + + + #{businessLicense,jdbcType=VARCHAR}, + + + #{qrCord,jdbcType=VARCHAR}, + + + #{userId,jdbcType=BIGINT}, + + + #{passed,jdbcType=TINYINT}, + + + #{createdAt,jdbcType=TIMESTAMP}, + + + #{updatedAt,jdbcType=TIMESTAMP}, + + + #{recStatus,jdbcType=TINYINT}, + + + + + + update t_business + + + id = #{record.id,jdbcType=BIGINT}, + + + name = #{record.name,jdbcType=VARCHAR}, + + + address = #{record.address,jdbcType=VARCHAR}, + + + applicant_name = #{record.applicantName,jdbcType=VARCHAR}, + + + applicant_id_card = #{record.applicantIdCard,jdbcType=VARCHAR}, + + + applicant_phone = #{record.applicantPhone,jdbcType=VARCHAR}, + + + business_license = #{record.businessLicense,jdbcType=VARCHAR}, + + + qr_cord = #{record.qrCord,jdbcType=VARCHAR}, + + + user_id = #{record.userId,jdbcType=BIGINT}, + + + passed = #{record.passed,jdbcType=TINYINT}, + + + created_at = #{record.createdAt,jdbcType=TIMESTAMP}, + + + updated_at = #{record.updatedAt,jdbcType=TIMESTAMP}, + + + rec_status = #{record.recStatus,jdbcType=TINYINT}, + + + + + + + + update t_business + set id = #{record.id,jdbcType=BIGINT}, + name = #{record.name,jdbcType=VARCHAR}, + address = #{record.address,jdbcType=VARCHAR}, + applicant_name = #{record.applicantName,jdbcType=VARCHAR}, + applicant_id_card = #{record.applicantIdCard,jdbcType=VARCHAR}, + applicant_phone = #{record.applicantPhone,jdbcType=VARCHAR}, + business_license = #{record.businessLicense,jdbcType=VARCHAR}, + qr_cord = #{record.qrCord,jdbcType=VARCHAR}, + user_id = #{record.userId,jdbcType=BIGINT}, + passed = #{record.passed,jdbcType=TINYINT}, + created_at = #{record.createdAt,jdbcType=TIMESTAMP}, + updated_at = #{record.updatedAt,jdbcType=TIMESTAMP}, + rec_status = #{record.recStatus,jdbcType=TINYINT} + + + + + + update t_business + + + name = #{name,jdbcType=VARCHAR}, + + + address = #{address,jdbcType=VARCHAR}, + + + applicant_name = #{applicantName,jdbcType=VARCHAR}, + + + applicant_id_card = #{applicantIdCard,jdbcType=VARCHAR}, + + + applicant_phone = #{applicantPhone,jdbcType=VARCHAR}, + + + business_license = #{businessLicense,jdbcType=VARCHAR}, + + + qr_cord = #{qrCord,jdbcType=VARCHAR}, + + + user_id = #{userId,jdbcType=BIGINT}, + + + passed = #{passed,jdbcType=TINYINT}, + + + created_at = #{createdAt,jdbcType=TIMESTAMP}, + + + updated_at = #{updatedAt,jdbcType=TIMESTAMP}, + + + rec_status = #{recStatus,jdbcType=TINYINT}, + + + where id = #{id,jdbcType=BIGINT} + + + update t_business + set name = #{name,jdbcType=VARCHAR}, + address = #{address,jdbcType=VARCHAR}, + applicant_name = #{applicantName,jdbcType=VARCHAR}, + applicant_id_card = #{applicantIdCard,jdbcType=VARCHAR}, + applicant_phone = #{applicantPhone,jdbcType=VARCHAR}, + business_license = #{businessLicense,jdbcType=VARCHAR}, + qr_cord = #{qrCord,jdbcType=VARCHAR}, + user_id = #{userId,jdbcType=BIGINT}, + passed = #{passed,jdbcType=TINYINT}, + created_at = #{createdAt,jdbcType=TIMESTAMP}, + updated_at = #{updatedAt,jdbcType=TIMESTAMP}, + rec_status = #{recStatus,jdbcType=TINYINT} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/ct/src/main/resources/mapper_raw/SiteClockInMapper.xml b/ct/src/main/resources/mapper_raw/SiteClockInMapper.xml new file mode 100644 index 00000000..bdadc6cb --- /dev/null +++ b/ct/src/main/resources/mapper_raw/SiteClockInMapper.xml @@ -0,0 +1,275 @@ + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, qrcode_id, time, longitude, latitude, user_id, created_at, updated_at, rec_status + + + + + delete from t_site_clock_in + where id = #{id,jdbcType=BIGINT} + + + delete from t_site_clock_in + + + + + + insert into t_site_clock_in (id, qrcode_id, time, + longitude, latitude, user_id, + created_at, updated_at, rec_status + ) + values (#{id,jdbcType=BIGINT}, #{qrcodeId,jdbcType=BIGINT}, #{time,jdbcType=BIGINT}, + #{longitude,jdbcType=DECIMAL}, #{latitude,jdbcType=DECIMAL}, #{userId,jdbcType=BIGINT}, + #{createdAt,jdbcType=TIMESTAMP}, #{updatedAt,jdbcType=TIMESTAMP}, #{recStatus,jdbcType=TINYINT} + ) + + + insert into t_site_clock_in + + + id, + + + qrcode_id, + + + time, + + + longitude, + + + latitude, + + + user_id, + + + created_at, + + + updated_at, + + + rec_status, + + + + + #{id,jdbcType=BIGINT}, + + + #{qrcodeId,jdbcType=BIGINT}, + + + #{time,jdbcType=BIGINT}, + + + #{longitude,jdbcType=DECIMAL}, + + + #{latitude,jdbcType=DECIMAL}, + + + #{userId,jdbcType=BIGINT}, + + + #{createdAt,jdbcType=TIMESTAMP}, + + + #{updatedAt,jdbcType=TIMESTAMP}, + + + #{recStatus,jdbcType=TINYINT}, + + + + + + update t_site_clock_in + + + id = #{record.id,jdbcType=BIGINT}, + + + qrcode_id = #{record.qrcodeId,jdbcType=BIGINT}, + + + time = #{record.time,jdbcType=BIGINT}, + + + longitude = #{record.longitude,jdbcType=DECIMAL}, + + + latitude = #{record.latitude,jdbcType=DECIMAL}, + + + user_id = #{record.userId,jdbcType=BIGINT}, + + + created_at = #{record.createdAt,jdbcType=TIMESTAMP}, + + + updated_at = #{record.updatedAt,jdbcType=TIMESTAMP}, + + + rec_status = #{record.recStatus,jdbcType=TINYINT}, + + + + + + + + update t_site_clock_in + set id = #{record.id,jdbcType=BIGINT}, + qrcode_id = #{record.qrcodeId,jdbcType=BIGINT}, + time = #{record.time,jdbcType=BIGINT}, + longitude = #{record.longitude,jdbcType=DECIMAL}, + latitude = #{record.latitude,jdbcType=DECIMAL}, + user_id = #{record.userId,jdbcType=BIGINT}, + created_at = #{record.createdAt,jdbcType=TIMESTAMP}, + updated_at = #{record.updatedAt,jdbcType=TIMESTAMP}, + rec_status = #{record.recStatus,jdbcType=TINYINT} + + + + + + update t_site_clock_in + + + qrcode_id = #{qrcodeId,jdbcType=BIGINT}, + + + time = #{time,jdbcType=BIGINT}, + + + longitude = #{longitude,jdbcType=DECIMAL}, + + + latitude = #{latitude,jdbcType=DECIMAL}, + + + user_id = #{userId,jdbcType=BIGINT}, + + + created_at = #{createdAt,jdbcType=TIMESTAMP}, + + + updated_at = #{updatedAt,jdbcType=TIMESTAMP}, + + + rec_status = #{recStatus,jdbcType=TINYINT}, + + + where id = #{id,jdbcType=BIGINT} + + + update t_site_clock_in + set qrcode_id = #{qrcodeId,jdbcType=BIGINT}, + time = #{time,jdbcType=BIGINT}, + longitude = #{longitude,jdbcType=DECIMAL}, + latitude = #{latitude,jdbcType=DECIMAL}, + user_id = #{userId,jdbcType=BIGINT}, + created_at = #{createdAt,jdbcType=TIMESTAMP}, + updated_at = #{updatedAt,jdbcType=TIMESTAMP}, + rec_status = #{recStatus,jdbcType=TINYINT} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/ct/src/main/resources/mapper_raw/SiteMapper.xml b/ct/src/main/resources/mapper_raw/SiteMapper.xml new file mode 100644 index 00000000..432a133b --- /dev/null +++ b/ct/src/main/resources/mapper_raw/SiteMapper.xml @@ -0,0 +1,276 @@ + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, business_id, site_name, site_code, longitude, latitude, created_at, updated_at, + rec_status + + + + + delete from t_site + where id = #{id,jdbcType=BIGINT} + + + delete from t_site + + + + + + insert into t_site (id, business_id, site_name, + site_code, longitude, latitude, + created_at, updated_at, rec_status + ) + values (#{id,jdbcType=BIGINT}, #{businessId,jdbcType=BIGINT}, #{siteName,jdbcType=VARCHAR}, + #{siteCode,jdbcType=VARCHAR}, #{longitude,jdbcType=DECIMAL}, #{latitude,jdbcType=DECIMAL}, + #{createdAt,jdbcType=TIMESTAMP}, #{updatedAt,jdbcType=TIMESTAMP}, #{recStatus,jdbcType=TINYINT} + ) + + + insert into t_site + + + id, + + + business_id, + + + site_name, + + + site_code, + + + longitude, + + + latitude, + + + created_at, + + + updated_at, + + + rec_status, + + + + + #{id,jdbcType=BIGINT}, + + + #{businessId,jdbcType=BIGINT}, + + + #{siteName,jdbcType=VARCHAR}, + + + #{siteCode,jdbcType=VARCHAR}, + + + #{longitude,jdbcType=DECIMAL}, + + + #{latitude,jdbcType=DECIMAL}, + + + #{createdAt,jdbcType=TIMESTAMP}, + + + #{updatedAt,jdbcType=TIMESTAMP}, + + + #{recStatus,jdbcType=TINYINT}, + + + + + + update t_site + + + id = #{record.id,jdbcType=BIGINT}, + + + business_id = #{record.businessId,jdbcType=BIGINT}, + + + site_name = #{record.siteName,jdbcType=VARCHAR}, + + + site_code = #{record.siteCode,jdbcType=VARCHAR}, + + + longitude = #{record.longitude,jdbcType=DECIMAL}, + + + latitude = #{record.latitude,jdbcType=DECIMAL}, + + + created_at = #{record.createdAt,jdbcType=TIMESTAMP}, + + + updated_at = #{record.updatedAt,jdbcType=TIMESTAMP}, + + + rec_status = #{record.recStatus,jdbcType=TINYINT}, + + + + + + + + update t_site + set id = #{record.id,jdbcType=BIGINT}, + business_id = #{record.businessId,jdbcType=BIGINT}, + site_name = #{record.siteName,jdbcType=VARCHAR}, + site_code = #{record.siteCode,jdbcType=VARCHAR}, + longitude = #{record.longitude,jdbcType=DECIMAL}, + latitude = #{record.latitude,jdbcType=DECIMAL}, + created_at = #{record.createdAt,jdbcType=TIMESTAMP}, + updated_at = #{record.updatedAt,jdbcType=TIMESTAMP}, + rec_status = #{record.recStatus,jdbcType=TINYINT} + + + + + + update t_site + + + business_id = #{businessId,jdbcType=BIGINT}, + + + site_name = #{siteName,jdbcType=VARCHAR}, + + + site_code = #{siteCode,jdbcType=VARCHAR}, + + + longitude = #{longitude,jdbcType=DECIMAL}, + + + latitude = #{latitude,jdbcType=DECIMAL}, + + + created_at = #{createdAt,jdbcType=TIMESTAMP}, + + + updated_at = #{updatedAt,jdbcType=TIMESTAMP}, + + + rec_status = #{recStatus,jdbcType=TINYINT}, + + + where id = #{id,jdbcType=BIGINT} + + + update t_site + set business_id = #{businessId,jdbcType=BIGINT}, + site_name = #{siteName,jdbcType=VARCHAR}, + site_code = #{siteCode,jdbcType=VARCHAR}, + longitude = #{longitude,jdbcType=DECIMAL}, + latitude = #{latitude,jdbcType=DECIMAL}, + created_at = #{createdAt,jdbcType=TIMESTAMP}, + updated_at = #{updatedAt,jdbcType=TIMESTAMP}, + rec_status = #{recStatus,jdbcType=TINYINT} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/ct/src/main/resources/mapper_raw/SiteQrcodeMapper.xml b/ct/src/main/resources/mapper_raw/SiteQrcodeMapper.xml new file mode 100644 index 00000000..2483f18c --- /dev/null +++ b/ct/src/main/resources/mapper_raw/SiteQrcodeMapper.xml @@ -0,0 +1,258 @@ + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, site_id, out_or_in, qrcode_path, big_qrcode_path, created_at, updated_at, rec_status + + + + + delete from t_site_qrcode + where id = #{id,jdbcType=BIGINT} + + + delete from t_site_qrcode + + + + + + insert into t_site_qrcode (id, site_id, out_or_in, + qrcode_path, big_qrcode_path, created_at, + updated_at, rec_status) + values (#{id,jdbcType=BIGINT}, #{siteId,jdbcType=BIGINT}, #{outOrIn,jdbcType=TINYINT}, + #{qrcodePath,jdbcType=VARCHAR}, #{bigQrcodePath,jdbcType=VARCHAR}, #{createdAt,jdbcType=TIMESTAMP}, + #{updatedAt,jdbcType=TIMESTAMP}, #{recStatus,jdbcType=TINYINT}) + + + insert into t_site_qrcode + + + id, + + + site_id, + + + out_or_in, + + + qrcode_path, + + + big_qrcode_path, + + + created_at, + + + updated_at, + + + rec_status, + + + + + #{id,jdbcType=BIGINT}, + + + #{siteId,jdbcType=BIGINT}, + + + #{outOrIn,jdbcType=TINYINT}, + + + #{qrcodePath,jdbcType=VARCHAR}, + + + #{bigQrcodePath,jdbcType=VARCHAR}, + + + #{createdAt,jdbcType=TIMESTAMP}, + + + #{updatedAt,jdbcType=TIMESTAMP}, + + + #{recStatus,jdbcType=TINYINT}, + + + + + + update t_site_qrcode + + + id = #{record.id,jdbcType=BIGINT}, + + + site_id = #{record.siteId,jdbcType=BIGINT}, + + + out_or_in = #{record.outOrIn,jdbcType=TINYINT}, + + + qrcode_path = #{record.qrcodePath,jdbcType=VARCHAR}, + + + big_qrcode_path = #{record.bigQrcodePath,jdbcType=VARCHAR}, + + + created_at = #{record.createdAt,jdbcType=TIMESTAMP}, + + + updated_at = #{record.updatedAt,jdbcType=TIMESTAMP}, + + + rec_status = #{record.recStatus,jdbcType=TINYINT}, + + + + + + + + update t_site_qrcode + set id = #{record.id,jdbcType=BIGINT}, + site_id = #{record.siteId,jdbcType=BIGINT}, + out_or_in = #{record.outOrIn,jdbcType=TINYINT}, + qrcode_path = #{record.qrcodePath,jdbcType=VARCHAR}, + big_qrcode_path = #{record.bigQrcodePath,jdbcType=VARCHAR}, + created_at = #{record.createdAt,jdbcType=TIMESTAMP}, + updated_at = #{record.updatedAt,jdbcType=TIMESTAMP}, + rec_status = #{record.recStatus,jdbcType=TINYINT} + + + + + + update t_site_qrcode + + + site_id = #{siteId,jdbcType=BIGINT}, + + + out_or_in = #{outOrIn,jdbcType=TINYINT}, + + + qrcode_path = #{qrcodePath,jdbcType=VARCHAR}, + + + big_qrcode_path = #{bigQrcodePath,jdbcType=VARCHAR}, + + + created_at = #{createdAt,jdbcType=TIMESTAMP}, + + + updated_at = #{updatedAt,jdbcType=TIMESTAMP}, + + + rec_status = #{recStatus,jdbcType=TINYINT}, + + + where id = #{id,jdbcType=BIGINT} + + + update t_site_qrcode + set site_id = #{siteId,jdbcType=BIGINT}, + out_or_in = #{outOrIn,jdbcType=TINYINT}, + qrcode_path = #{qrcodePath,jdbcType=VARCHAR}, + big_qrcode_path = #{bigQrcodePath,jdbcType=VARCHAR}, + created_at = #{createdAt,jdbcType=TIMESTAMP}, + updated_at = #{updatedAt,jdbcType=TIMESTAMP}, + rec_status = #{recStatus,jdbcType=TINYINT} + where id = #{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/ct/src/main/resources/mybatis/mybatis-config.xml b/ct/src/main/resources/mybatis/mybatis-config.xml new file mode 100644 index 00000000..06ec6488 --- /dev/null +++ b/ct/src/main/resources/mybatis/mybatis-config.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index d801622f..93a7517a 100644 --- a/pom.xml +++ b/pom.xml @@ -13,6 +13,7 @@ game mt health + ct com.ccsens diff --git a/util/src/main/java/com/ccsens/util/Base64FileUtil.java b/util/src/main/java/com/ccsens/util/Base64FileUtil.java index 4fbc0ed1..cf06e56f 100644 --- a/util/src/main/java/com/ccsens/util/Base64FileUtil.java +++ b/util/src/main/java/com/ccsens/util/Base64FileUtil.java @@ -42,4 +42,5 @@ public class Base64FileUtil { out.close(); return fileName; } + } diff --git a/util/src/main/java/com/ccsens/util/CodeEnum.java b/util/src/main/java/com/ccsens/util/CodeEnum.java index a71dc944..c0b115b7 100644 --- a/util/src/main/java/com/ccsens/util/CodeEnum.java +++ b/util/src/main/java/com/ccsens/util/CodeEnum.java @@ -99,6 +99,8 @@ public enum CodeEnum { ALREADY_REAL_AUTH(82,"您已经完成认证",true), LACK_CONFIG(83,"缺少配置",true), ANIMAL_HEAT_ERROR(84,"体温异常,请选择正确的健康状态",true), + NOT_BUSINESS(85,"未找到商户信息",true), + SITE_EXCEED(86,"您所添加的场所数量已超出上限,请联系客服提高场所上限",true), ; public CodeEnum addMsg(String msg){ diff --git a/util/src/main/java/com/ccsens/util/QrCodeUtil.java b/util/src/main/java/com/ccsens/util/QrCodeUtil.java index 306ca3ad..deb58d0e 100644 --- a/util/src/main/java/com/ccsens/util/QrCodeUtil.java +++ b/util/src/main/java/com/ccsens/util/QrCodeUtil.java @@ -1,6 +1,7 @@ package com.ccsens.util; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; import net.glxn.qrgen.core.image.ImageType; import net.glxn.qrgen.javase.QRCode; @@ -41,7 +42,34 @@ public class QrCodeUtil { return fileName; } -// public static void main(String[] args) throws IOException { -// System.out.println(urlToQRCode("321321321", "")); -// } + + /** + * 根据文件路径生成二维码(可以调整大小) + * @param url + * @param parentPath + * @return + * @throws IOException + */ + public static String urlToQRCodeWithSize(String url, String parentPath,Integer size) throws IOException { + size = size == null ? 200 : size; + String fileName = "qrCode/" + DateUtil.today() + "/" + System.currentTimeMillis() + ".png"; + ByteArrayOutputStream stream = QRCode.from(url).to(ImageType.BMP).withSize(size,size).stream(); + byte[] codeByte = stream.toByteArray(); + File file = new File(parentPath, fileName); + if (!file.getParentFile().exists()) { + file.getParentFile().mkdirs(); + } + OutputStream out = null; + try { + out = new FileOutputStream(file); + out.write(codeByte); + out.flush(); + } finally { + if ( out!= null) { + out.close(); + } + } + return fileName; + } + } diff --git a/util/src/main/java/com/ccsens/util/WebConstant.java b/util/src/main/java/com/ccsens/util/WebConstant.java index d4bc7235..ad446c81 100644 --- a/util/src/main/java/com/ccsens/util/WebConstant.java +++ b/util/src/main/java/com/ccsens/util/WebConstant.java @@ -83,6 +83,7 @@ public class WebConstant { public static final String TEST_URL_BASE_MT = TEST_URL + "gateway/mt/uploads/"; public static final String TEST_URL_BASE_HEALTH = TEST_URL + "gateway/health/uploads/"; + public static final String TEST_URL_BASE_CT = TEST_URL + "gateway/ct/uploads/"; public static final String QRCODE_HEALTH = "pages/user-code/user-code"; public static final String QRCODE_SITE = "pages/sign/sign"; diff --git a/util/src/test/java/com/ccsens/util/Base64Test.java b/util/src/test/java/com/ccsens/util/Base64Test.java index 59d0db75..e17d7762 100644 --- a/util/src/test/java/com/ccsens/util/Base64Test.java +++ b/util/src/test/java/com/ccsens/util/Base64Test.java @@ -11,6 +11,7 @@ import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; +import java.util.List; /** * @description: @@ -18,24 +19,19 @@ import java.io.IOException; * @create: 2019/12/17 17:26 */ public class Base64Test { -// @Test -// public void test01() throws Exception{ -//// File file = new File("d:"+File.separator+"1.png"); -//// //data:image/png;base64, -//// String valueData = "iVBORw0KGgoAAAANSUhEUgAAB4AAAANZCAYAAADu3CMyAAAgAElEQVR4Xuzd26ttWX4X8F/23ud01Ul3p6ra9C1qgiImJgEvREVBieBLK/hiKybaBp9MGlEICvoHKKiIgp34JCZqhCQPviSCDwYFhUggQdsWxVvU9C12dfWlTlXXOUdl1Fmza5199t5rzjVvY/zGZ0NT1XXmmnP8Pr/fPuy1v2vM+Q3hiwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRSCHxDiioUQYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIhADYEBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQSCIgAE7SSGUQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBAAGwGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkERAAJykkcogQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAANgMECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIImAADhJI5VBgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAbAZIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQBIBAXCSRiqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECAmAzQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgSQCAuAkjVQGAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEBMBmgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkkEBMBJGqkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQICIDNAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJIICICTNFIZBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQEACbAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCQREAAnaaQyCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgIAA2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEEgiIABO0khlECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAQABsBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJBEQACcpJHKIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgADYDBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCCJgAA4SSOVQYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQGwGSBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEASAQFwkkYqgwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgJgM0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEkAgLgJI1UBgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBATAZoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJJBATASRqpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECAiAzQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSSCAiAkzRSGQQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBAAmwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgkERAAJ2mkMggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQICAANgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBIIiAATtJIZRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQEAAbAYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCQREAAnKSRyiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAA2AwQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEAgiYAAOEkjlUGAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEBsBkgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAEgEBcJJGKoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQICYDNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBJAIC4CSNVAYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQEwGaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECSQQEwEkaqQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgIgM0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEkggIgJM0UhkECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAQAJsBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIJBEQACdppDIIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAgADYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQSCIgAE7SSGUQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBAAGwGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkERAAJykkcogQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAANgMECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIImAADhJI5VBgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAbAZIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQBIBAXCSRiqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECAmAzQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgSQCAuAkjVQGAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEBMBmgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkkEBMBJGqkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQICIDNAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJIICICTNFIZBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQEACbAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCQREAAnaaQyCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgIAA2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEEgiIABO0khlECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAQABsBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJBEQACcpJHKIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgADYDBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCCJgAA4SSOVQYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQGwGSBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEASAQFwkkYqgwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgJgM0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEkAgLgJI1UBgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBATAZoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJJBATASRqpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECAiAzQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSSCAiAkzRSGQQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBAAmwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgkERAAJ2mkMggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQICAANgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBIIiAATtJIZRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQEAAbAYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCQREAAnKSRyiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAA2AwQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEAgiYAAOEkjlUGAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEBsBkgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAEgEBcJJGKoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQICYDNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBJAIC4CSNVAYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQEwGaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECSQQEwEkaqQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgIgM0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEkggIgJM0UhkECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAQAJsBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIJBEQACdppDIIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAgADYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQSCIgAE7SSGUQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBAAGwGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkERAAJykkcogQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAANgMECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIImAADhJI5VBgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAbAZIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQBIBAXCSRiqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECAmAzQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgSQCAuAkjVQGAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEBMBmgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkkEBMBJGqkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQICIDNAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJIICICTNFIZBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQEACbAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCQREAAnaaQyCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgIAA2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEEgiIABO0khlECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAQABsBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJBEQACcpJHKIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgADYDBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCCJgAA4SSOVQYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQGwGSBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEASAQFwkkYqgwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgJgM0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEkAgLgJI1UBgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBATAZoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJJBATASRqpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECAiAzQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSSCAiAkzRSGQQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBAAmwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgkERAAJ2mkMggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQICAANgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBIIiAATtJIZRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQEAAbAYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCQREAAnKSRyiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAA2AwQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEAgiYAAOEkjlUGAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEBsBkgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAEgEBcJJGKoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQICYDNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBJAIC4CSNVAYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQEwGaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECSQQEwEkaqQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgIgM0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEkggIgJM0UhkECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAQAJsBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIJBEQACdppDIIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAgADYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQSCIgAE7SSGUQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBAAGwGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkERAAJykkcogQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAANgMECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIImAADhJI5VBgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAbAZIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQBIBAXCSRiqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECAmAzQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgSQCAuAkjVQGAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEBMBmgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkkEBMBJGqkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQICIDNAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJIICICTNFIZBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQEACbAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCQREAAnaaQyCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgIAA2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEEgiIABO0khlECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAQABsBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJBEQACcpJHKIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgADYDBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCCJgAA4SSOVQYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQGwGSBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEASAQFwkkYqgwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgJg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AQIECOwucFt4uFWouDtA4wvYOqwfQuDCVmbkzYh40Lih5RMgQIAAAQIECBAgQIAAAQIE7hQQABsQAgQIECBAgACBlgTueg5w+bOLlorpcK173a77OAgewmCz0uEAKpkAAQIECBAgQIAAAQIECPQgIADuoctqJECAAAECBAjkESghb/m6/vYoxuoAACAASURBVHPsXsFiHtltKtni+b93VfIwIl44mh8fGtim765CgAABAgQIECBAgAABAgQIbCggAN4Q26UIECBAgAABAgRmC9wWAJcT7x0uzi4u+QleP9x++Y1KbsPs9tDJB055BAgQIECAAAECBAgQIECgVwEBcK+dVzcBAgQIECBAoE2BuwJgu4Dr7mmt/XF76LrnxuoIECBAgAABAgQIECBAgACBiQIC4IlgDidAgAABAgQIENhV4K4AuCzMLuBd23PnxWvvjdtD1zs7VkaAAAECBAgQIECAAAECBAhMEBAAT8ByKAECBAgQIECAwO4CpwLgWneZ7g638wJKuPpiRNRy++dTHNdvD13+/9WpF/lzAgQIECBAgAABAgQIECBAgEANAgLgGrpgDQQIECBAgAABAmMFTgXAX46I90TEVyLivWNP6rjVBVoN5q/fHrpAlRkUCK8+Mi5AgAABAgQIECBAgAABAgQInCsgAD5XzusIECBAgAABAgT2EDgVAA8BXTnuYo8FuuaNArXf/nlM2x4fZur6eyizNkbPMQQIECBAgAABAgQIECBAgMBmAgLgzahdiAABAgQIECBAYAGBMQFwq7tNF+Cp8hSt3f55LOL1QFgQPFbOcQQIECBAgAABAgQIECBAgMCqAgLgVXmdnAABAgQIECBAYGGBMQFwuWSGHacL0+12uh4Cec8M3m28XJgAAQIECBAgQIAAAQIECBC4LiAANhMECBAgQIAAAQItCUwJgEtdft7dv7s9hfG3PTPY7cj3n0MrIECAAAECBAgQIECAAAEC3Qj4hVg3rVYoAQIECBAgQCCFgAC4vTaWnpXbJd9rb+mzVnx8i2i3h55F6cUECBAgQIAAAQIECBAgQIDAFAEB8BQtxxIgQIAAAQIECOwtMDYAHnZiCt727diTiCi7X3t+32EW951BVydAgAABAgQIECBAgAABAt0J9PyLmO6arWACBAgQIECAQAKBsQFwKVXwtn/Dp/Rr/9Wut4LjWSz/frXepZyZAAECBAgQIECAAAECBAgQ6F1AANz7BKifAAECBAgQINCWwNRAcQje/Ny7T59Lv0oPLve5fFVXve35wG9GxIOqVmoxBAgQIECAAAECBAgQIECAQNMCfhHWdPssngABAgQIECDQncDUAPgLEfFKRLwaEe/rTmvfgh8ddrp6z/F8H46fDzz8aZltYfC+M+vqBAgQIECAAAECBAgQIEAghYBfxqRooyIIECBAgAABAt0ITA2AC0x5jWcBbz8idl+PM389Il689pxk8zrOzlEECBAgQIAAAQIECBAgQIDADQICYGNBgAABAgQIECDQksA5AbAgcp8OC96nuz+MiBeOwmBB8HRDryBAgAABAgQIECBAgAABAt0LCIC7HwEABAgQIECAAIGmBM4JgEuBwsht2yx0n+99/MxgQfB8T2cgQIAAAQIECBAgQIAAAQLdCAiAu2m1QgkQIECAAAECKQTODYCHME2Qtv4YlOfbXkbEk8MzgNe/Yu4rHAfBpVKuufutOgIECBAgQIAAAQIECBAgMFtAADyb0AkIECBAgAABAgQ2FDg3AC5LtCt1m0bZbb2O8xCsD2f3YYZ1nJ2VAAECBAgQIECAAAECBAg0LyAAbr6FCiBAgAABAgQIdCUwJwD+fER8c0T8akS8vyu17YoVsm9j7fbQ2zi7CgECBAgQIECAAAECBAgQaFJAANxk2yyaAAECBAgQINCtwJwAuKDZnbru6PBd1/f62QXB23q7GgECBAgQIECAAAECBAgQaEJAANxEmyySAAECBAgQIEDgIDA3APYs4PVG6dHhmb8fjYifXu8yznyDgCDYWBAgQIAAAQIECBAgQIAAAQJfFxAAGwYCBAgQIECAAIGWBOYGwKVWIfA6HXf753Vcp5z1OAg+fp3nBU9RdCwBAgQIECBAgAABAgQIEGhcQADceAMtnwABAgQIECDQmcASAbAQeJ2hKb0pAeTlOqd31gkCguAJWA4lQIAAAQIECBAgQIAAAQLZBATA2TqqHgIECBAgQIBAboGlAuDjENjPxPNn5klEXEQEy/mWa53h+m2i34yIB2tdzHkJECBAgAABAgQIECBAgACB/QT8gmY/e1cmQIAAAQIECBCYLrBkAPzZiPhARHwuIj44fSlecSRQ+uI2w22MxPXdwfrWRt+skgABAgQIECBAgAABAgQIjBYQAI+mciABAgQI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banaqRgCBAgQIECAQFMCQzBZbgF9v6mV17vYm8JeYVa9/bKy+gTc/rm+nlgRAQIECBAgQIAAAQIECEwUEABPBHM4AQIECBAgQIDAYgKCycUonznRlyLivYf/Up5h6lmm6zg7a04Bt3/O2VdVESBAgAABAgQIECBAoCsBAXBX7VYsAQIECBAgQKAagccRcenWz6v2Y7i9drnIk4i4WvVqTk4gh4APpuTooyoIECBAgAABAgQIECDQtYAAuOv2K54AAQIECBAgsJuAZ/9uQ38cAg9XLP/tYpvLuwqBpgTs/m2qXRZLgAABAgQIECBAgAABArcJCIDNBgECBAgQIECAwB4CJYS0K3Vd+ethVtl1XYLf4T1A+fOyC9sXAQJPBez+NQkECBAgQIAAAQIECBAgkEJAAJyijYogQIAAAQIECDQlYJfd+u16dLjl8227fYcelJV8KiK+c/0luQKBqgX8vVR1eyyOAAECBAgQIECAAAECBKYICICnaDmWAAECBAgQIEBgrsCrEfHyYaed2xDP1bz99WN2Mpbg9zsOp3Bb6PV64cxtCIz5nmmjEqskQIAAAQIECBAgQIAAge4FBMDdjwAAAgQIECBAgMCmAp79uz73VONyK+7rYbxAeP0+uUI9AuX26OV26N4f19MTKyFAgAABAgQIECBAgACBGQLe4M7A81ICBAgQIECAAIFJAsMtVl877AKe9GIHjxIYjMstoO+PesU7Bx3fFnr4r4LgiYgOb1Jg6ocmmizSogkQIECAAAECBAgQIECgHwEBcD+9VikBAgQIECBAYE8Bt35eX38IcJcKbY8D4aXOub6CKxCYLlDmu+yEv5r+Uq8gQIAAAQIECBAgQIAAAQL1CQiA6+uJFREgQIAAAQIEMgrYYbduV5cOf49Xe31n8FsR8a51y3F2ApsJDPPtvfFm5C5EgAABAgQIECBAgAABAmsLeJO7trDzEyBAgAABAgQIuPXz+jNQAva1d+l+7dptpde+3vpqrkDg6feNWTYJBAgQIECAAAECBAgQIJBKQACcqp2KIUCAAAECBAhUKSBgWbcte+xgvH576Dci4hvXLdPZCSwusMf3zuJFOCEBAgQIECBAgAABAgQIELguIAA2EwQIECBAgAABAmsKuPXzmroRjw7PLd1rB+P120OXastafjwifmDd0p2dwGwBH06ZTegEBAgQIECA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IECAAAECBAgQIECAAIFnBQTAJoIAAQIECBAgQOC6gJByvZmwO/F22z8SEf/U86bXG74OzuwDBB00WYkECBAgQIAAAQIECBAgcFpAAHzayBEECBAgQIAAgd4EhJTrdFw4dberW46vM3c9ndXfXT11W60ECBAgQIAAAQIECBAgcKuAANhwECBAgAABAgQIHAsIKdebB+HU7bbD3H00In56vRY4c2KBhxHxots/J+6w0ggQIECAAAECBAgQIEBgtIAAeDSVAwkQIECAAAECXQgIKddps2D9bldzt87c9XRW32M9dVutBAgQIECAAAECBAgQIHCngADYgBAgQIAAAQIECAwCdtCtMwvDrY3LPy/WuUTzZy02n46Ib2m+EgXsJeBDBHvJuy4BAgQIECBAgAABAgQIVCcgAK6uJRZEgAABAgQIENhNwA665emFv6dNfyUiPhwR3puctnLEzQKPI+LSDBkPAgQIECBAgAABAgQIECDwVMAvWUwCAQIECBAgQIBAEXg1Il6OCLtUl52HIQD2c/ftrj54sOzM9Xg232c9dl3NBAgQIECAAAECBAgQIHCrgF9EGQ4CBAgQIECAAIEiIEBZZw6Em3e7Dj4+eLDO/PVy1jI/TyLiqpeC1UmAAAECBAgQIECAAAECBO4SEACbDwIECBAgQIAAgSGEe+2wC5jIsgKeTXqzp/B32Tnr9Ww+ZNFr59VNgAABAgQIECBAgAABArcKCIANBwECBAgQIECAgIBy3RkYAqpylZ+MiD++7uWaObu5a6ZVVS/UHFXdHosjQIAAAQIECBAgQIAAgT0EBMB7qLsmAQIECBAgQKAeAbvntulFCX4/eriU2x0/hSgOX4iIX7NNC1wlqYAAOGljlUWAAAECBAgQIECAAAEC5wsIgM+380oCBAgQIECAQAYB4cm2XXTb46fe/yci3hcR3o9sO38Zr1b+DnsUEfczFqcmAgQIECBAgAABAgQIECBwjoBfuJyj5jUECBAgQIAAgRwCdv/u00chcITZ22f2sl31rYi454ME2dqqHgIECBAgQIAAAQIECBCYKyAAnivo9QQIECBAgACBNgXKjrmrw214L9osoelV9x4C23ne9PhWs3gfJKimFRZCgAABAgQIECBAgAABAjUJCIBr6oa1ECBAgAABAgS2ExDAbWd925V6DYE/ERE/FBE/EhEf378NVtCw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cm+BMo9u5b13F1yfAAECBAgQIECAAAECBNIIZPmFT5qGKIQAAQIECBAgcBAYArryzwsqBBYUyHDr59s4fN8sOCgbnerxYRe696YbgbsMAQIECBAgQIAAAQIECOQX8CY7f49VSIAAAQIECLQr4Na27fau5pVnv92u75uap+/5tWX+QEJbnbBaAgQIECBAgAABAgQIEEgjIABO00qFECBAgAABAkkF3BI6aWN3KquXsO34ltDl31/aydtlTwtk/0DCaQFHECBAgAABAgQIECBAgACBhQUEwAuDOh0BAgQIECBAYCUBt7ZdCbaj0w632u3pWau+b+oe8F4+kFB3F6yOAAECBAgQIECAAAECBNIJCIDTtVRBBAgQIECAQGKBISwpJXo2cOJGr1Rarzstj79vvhgRr6zk67TTBYaA3vvS6XZeQYAAAQIECBAgQIAAAQIEbhXwRttwECBAgAABAgTaExAEt9ezvVdsp+XTD02ULx+e2Hsa37m+ALieXlgJAQIECBAgQIAAAQIECCQSEAAnaqZSCBAgQIAAge4EBMHdtfzsgnvd/XsdrNz++uLwH8v3z+XZol64hIAAeAlF5yBAgAABAgQIECBAgAABAtcEBMBGggABAgQIECDQvsAQBNvZ2H4v16jA7t/nVY8/POE90RpTN+6cAuBxTo4iQIAAAQIECBAgQIAAAQKTBPyyYxKXgwkQIECAAAEC1QoIgattza4L+x8R8a0RYbfr8214NSJePvxnH57YZ0wFwPu4uyoBAgQIECBAgAABAgQIJBcQACdvsPIIECBAgACBrgSEwF21e1SxArbTTL5vThutdYT5XEvWeQkQIECAAAECBAgQIECgawEBcNftVzwBAgQIECCQUECYlbCpZ5Y0PO/2lyPi2848Ry8vO342sPdI23VdALydtSsRIECAAAECBAgQIECAQEcCfrnRUbOVSoAAAQIECHQjcPx80xJsXXVTuUKPBUq45tbG42fiH0fE9x0O/4mI+P7xL3XkmQJm9Ew4LyNAgAABAgQIECBAgAABAncJCIDNBwECBAgQIEAgr4DdwHl7e6qyofd+3j8l9fyfD7tSPTd5ut2UV/xKRHw4Ij4dEd8y5YWOJUCAAAECBAgQIECAAAECBO4W8AshE0KAAAECBAgQyC3wOCIuDyXaDZq718fV2Vk5r9c+PDHPb8yrfUhhjJJj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+Pjw5K/kggQIECBAgAABAgQIECBAgMDZAgrgswldgAABAgQIECBAYMUCU90FfDPJtST/SvLuFXs4OoF7Cfw+yaeTPLP7pP1/qREgQIAAAQIECBAgQIAAAQILElAALygMRyFAgAABAgQIEJhFYIq7gKe4xizDe1ECBAgQIECAAAECBAgQIECAAIEuAQVwV56mIUCAAAECBAgQOF5gfxfwKHHHXbzHfkx1F/Gxr+vzCRAgQIAAAQIECBAgQIAAAQIECLxDQAFsKQgQIECAAAECBAgk55TA7v61QQQIECBAgAABAgQIECBAgAABAosRUAAvJgoHIUCAAAECBAgQmFng1BJYATxzcF6eAAECBAgQIECAAAECBAgQIEDgloAC2DYQIECAAAECBAgQuCVwyuOcRwH8ZpKHQRIgQIAAAQIECBAgQIAAAQIECBCYW0ABPHcCXp8AAQIECBAgQGBpAsfc0ftGkoeS+Ll6aSk6DwECBAgQIECAAAECBAgQIEBgowL+oWqjwRubAAECBAgQIEDgSoFj7gI+5nOREyBAgAABAgQIECBAgAABAgQIELi4gAL44sRegAABAgQIECBAYIUCh94FrABeYbiOTIAAAQIECBAgQIAAAQIECBBoFlAAN6drNgIECBAgQIAAgVMFDi12Dy2KTz2HryNAgAABAgQIECBAgAABAgQIECBwlIAC+Cgun0yAAAECBAgQILAhgfuVu4eWxBsiMyoBAgQIECBAgAABAgQIECBAgMDcAgrguRPw+gQIECBAgAABAksV2Be8owi+dpdD3q8gXupczkWAAAECBAgQIECAAAECBAgQIFAsoAAuDtdoBAgQIECAAAECZwuMknd83Plzs7t/z6Z1AQIECBAgQIAAAQIECBAgQIAAgUsIKIAvoeqaBAgQIECAAAECLQJX3QXs7t+WhM1BgAABAgQIECBAgAABAgQIECgTUACXBWocAgQIECBAgACByQXuvAvY3b+TE7sgAQIECBAgQIAAAQIECBAgQIDAVAIK4KkkXYcAAQIECBAgQKBV4M67gN3925q0uQgQIECAAAECBAgQIECAAAECBQIK4IIQjUCAAAECBAgQIHBxgf1dwOO/42doP0dfnNwLECBAgAABAgQIECBAgAABAgQInCLgH65OUfM1BAgQIECAAAECWxS4vQS+tkUAMxMgQIAAAQIECBAgQIAAAQIECCxfQAG8/IyckAABAgQIECBAYDkC43HQyt/l5OEkBAgQIECAAAECBAgQIECAAAECdwgogK0EAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIKxD0W4AABspSURBVECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRKB/wJpvi3SoNa7CwAAAABJRU5ErkJggg==\n"; -////// Base64.decodeToFile(valueData, file); -//// byte[] decode = Base64.decode(valueData); -//// -//// FileOutputStream out = new FileOutputStream(file); -//// out.write(decode); -//// out.close(); -// System.out.println(System.currentTimeMillis()); -// - @Test - public void test01() throws Exception{ + public void test01() throws Exception { + File file = new File("d:"+File.separator+"1.png"); + //data:image/png;base64, + String valueData = "iVBORw0KGgoAAAANSUhEUgAAB4AAAANZCAYAAADu3CMyAAAgAElEQVR4Xuzd26ttWX4X8F/23ud01Ul3p6ra9C1qgiImJgEvREVBieBLK/hiKybaBp9MGlEICvoHKKiIgp34JCZqhCQPviSCDwYFhUggQdsWxVvU9C12dfWlTlXXOUdl1Fmza5199t5rzjVvY/zGZ0NT1XXmmnP8Pr/fPuy1v2vM+Q3hiwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRSCHxDiioUQYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIhADYEBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQSCIgAE7SSGUQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBAAGwGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkERAAJykkcogQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAANgMECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIImAADhJI5VBgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAbAZIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQBIBAXCSRiqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECAmAzQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgSQCAuAkjVQGAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEBMBmgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkkEBMBJGqkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQICIDNAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJIICICTNFIZBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQEACbAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCQREAAnaaQyCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgIAA2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEEgiIABO0khlECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAQABsBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJBEQACcpJHKIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgADYDBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCCJgAA4SSOVQYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQGwGSBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEASAQFwkkYqgwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgJgM0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEkAgLgJI1UBgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBATAZoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJJBATASRqpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECAiAzQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSSCAiAkzRSGQQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBAAmwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgkERAAJ2mkMggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQICAANgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBIIiAATtJIZRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQEAAbAYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCQREAAnKSRyiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAA2AwQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEAgiYAAOEkjlUGAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEBsBkgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAEgEBcJJGKoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQICYDNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBJAIC4CSNVAYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQEwGaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECSQQEwEkaqQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgIgM0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEkggIgJM0UhkECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAQAJsBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIJBEQACdppDIIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAgADYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQSCIgAE7SSGUQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBAAGwGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkERAAJykkcogQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAANgMECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIImAADhJI5VBgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAbAZIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQBIBAXCSRiqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECAmAzQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgSQCAuAkjVQGAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEBMBmgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkkEBMBJGqkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQICIDNAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJIICICTNFIZBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQEACbAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCQREAAnaaQyCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgIAA2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEEgiIABO0khlECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAQABsBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJBEQACcpJHKIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgADYDBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCCJgAA4SSOVQYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQGwGSBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEASAQFwkkYqgwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgJgM0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEkAgLgJI1UBgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBATAZoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJJBATASRqpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECAiAzQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSSCAiAkzRSGQQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBAAmwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgkERAAJ2mkMggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQICAANgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBIIiAATtJIZRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQEAAbAYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCQREAAnKSRyiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAA2AwQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEAgiYAAOEkjlUGAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEBsBkgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAEgEBcJJGKoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQICYDNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBJAIC4CSNVAYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQEwGaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECSQQEwEkaqQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgIgM0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEkggIgJM0UhkECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAQAJsBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIJBEQACdppDIIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAgADYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQSCIgAE7SSGUQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBAAGwGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkERAAJykkcogQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAANgMECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIImAADhJI5VBgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAbAZIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQBIBAXCSRiqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECAmAzQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgSQCAuAkjVQGAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEBMBmgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkkEBMBJGqkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQICIDNAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJIICICTNFIZBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQEACbAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCQREAAnaaQyCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgIAA2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEEgiIABO0khlECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAQABsBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJBEQACcpJHKIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgADYDBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCCJgAA4SSOVQYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQGwGSBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEASAQFwkkYqgwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgJgM0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEkAgLgJI1UBgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBATAZoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJJBATASRqpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECAiAzQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSSCAiAkzRSGQQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBAAmwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgkERAAJ2mkMggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQICAANgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBIIiAATtJIZRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQEAAbAYIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCQREAAnKSRyiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAA2AwQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEAgiYAAOEkjlUGAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEBsBkgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAEgEBcJJGKoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQICYDNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBJAIC4CSNVAYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQEwGaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECSQQEwEkaqQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgIgM0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEkggIgJM0UhkECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAQAJsBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIJBEQACdppDIIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAgADYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQSCIgAE7SSGUQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBAAGwGCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgkERAAJykkcogQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAANgMECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAIImAADhJI5VBgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAbAZIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQBIBAXCSRiqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECAmAzQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgSQCAuAkjVQGAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEBMBmgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkkEBMBJGqkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQICIDNAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJIICICTNFIZBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQEACbAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCQREAAnaaQyCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgIAA2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEEgiIABO0khlECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAQABsBggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJBEQACcpJHKIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgADYDBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQCCJgAA4SSOVQYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQGwGSBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEASAQFwkkYqgwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgJg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AQIECOwucFt4uFWouDtA4wvYOqwfQuDCVmbkzYh40Lih5RMgQIAAAQIECBAgQIAAAQIE7hQQABsQAgQIECBAgACBlgTueg5w+bOLlorpcK173a77OAgewmCz0uEAKpkAAQIECBAgQIAAAQIECPQgIADuoctqJECAAAECBAjkESghb/m6/vYoxuoAACAASURBVHPsXsFiHtltKtni+b93VfIwIl44mh8fGtim765CgAABAgQIECBAgAABAgQIbCggAN4Q26UIECBAgAABAgRmC9wWAJcT7x0uzi4u+QleP9x++Y1KbsPs9tDJB055BAgQIECAAAECBAgQIECgVwEBcK+dVzcBAgQIECBAoE2BuwJgu4Dr7mmt/XF76LrnxuoIECBAgAABAgQIECBAgACBiQIC4IlgDidAgAABAgQIENhV4K4AuCzMLuBd23PnxWvvjdtD1zs7VkaAAAECBAgQIECAAAECBAhMEBAAT8ByKAECBAgQIECAwO4CpwLgWneZ7g638wJKuPpiRNRy++dTHNdvD13+/9WpF/lzAgQIECBAgAABAgQIECBAgEANAgLgGrpgDQQIECBAgAABAmMFTgXAX46I90TEVyLivWNP6rjVBVoN5q/fHrpAlRkUCK8+Mi5AgAABAgQIECBAgAABAgQInCsgAD5XzusIECBAgAABAgT2EDgVAA8BXTnuYo8FuuaNArXf/nlM2x4fZur6eyizNkbPMQQIECBAgAABAgQIECBAgMBmAgLgzahdiAABAgQIECBAYAGBMQFwq7tNF+Cp8hSt3f55LOL1QFgQPFbOcQQIECBAgAABAgQIECBAgMCqAgLgVXmdnAABAgQIECBAYGGBMQFwuWSGHacL0+12uh4Cec8M3m28XJgAAQIECBAgQIAAAQIECBC4LiAANhMECBAgQIAAAQItCUwJgEtdft7dv7s9hfG3PTPY7cj3n0MrIECAAAECBAgQIECAAAEC3Qj4hVg3rVYoAQIECBAgQCCFgAC4vTaWnpXbJd9rb+mzVnx8i2i3h55F6cUECBAgQIAAAQIECBAgQIDAFAEB8BQtxxIgQIAAAQIECOwtMDYAHnZiCt727diTiCi7X3t+32EW951BVydAgAABAgQIECBAgAABAt0J9PyLmO6arWACBAgQIECAQAKBsQFwKVXwtn/Dp/Rr/9Wut4LjWSz/frXepZyZAAECBAgQIECAAAECBAgQ6F1AANz7BKifAAECBAgQINCWwNRAcQje/Ny7T59Lv0oPLve5fFVXve35wG9GxIOqVmoxBAgQIECAAAECBAgQIECAQNMCfhHWdPssngABAgQIECDQncDUAPgLEfFKRLwaEe/rTmvfgh8ddrp6z/F8H46fDzz8aZltYfC+M+vqBAgQIECAAAECBAgQIEAghYBfxqRooyIIECBAgAABAt0ITA2AC0x5jWcBbz8idl+PM389Il689pxk8zrOzlEECBAgQIAAAQIECBAgQIDADQICYGNBgAABAgQIECDQksA5AbAgcp8OC96nuz+MiBeOwmBB8HRDryBAgAABAgQIECBAgAABAt0LCIC7HwEABAgQIECAAIGmBM4JgEuBwsht2yx0n+99/MxgQfB8T2cgQIAAAQIECBAgQIAAAQLdCAiAu2m1QgkQIECAAAECKQTODYCHME2Qtv4YlOfbXkbEk8MzgNe/Yu4rHAfBpVKuufutOgIECBAgQIAAAQIECBAgMFtAADyb0AkIECBAgAABAgQ2FDg3AC5LtCt1m0bZbb2O8xCsD2f3YYZ1nJ2VAAECBAgQIECAAAECBAg0LyAAbr6FCiBAgAABAgQIdCUwJwD+fER8c0T8akS8vyu17YoVsm9j7fbQ2zi7CgECBAgQIECAAAECBAgQaFJAANxk2yyaAAECBAgQINCtwJwAuKDZnbru6PBd1/f62QXB23q7GgECBAgQIECAAAECBAgQaEJAANxEmyySAAECBAgQIEDgIDA3APYs4PVG6dHhmb8fjYifXu8yznyDgCDYWBAgQIAAAQIECBAgQIAAAQJfFxAAGwYCBAgQIECAAIGWBOYGwKVWIfA6HXf753Vcp5z1OAg+fp3nBU9RdCwBAgQIECBAgAABAgQIEGhcQADceAMtnwABAgQIECDQmcASAbAQeJ2hKb0pAeTlOqd31gkCguAJWA4lQIAAAQIECBAgQIAAAQLZBATA2TqqHgIECBAgQIBAboGlAuDjENjPxPNn5klEXEQEy/mWa53h+m2i34yIB2tdzHkJECBAgAABAgQIECBAgACB/QT8gmY/e1cmQIAAAQIECBCYLrBkAPzZiPhARHwuIj44fSlecSRQ+uI2w22MxPXdwfrWRt+skgABAgQIECBAgAABAgQIjBYQAI+mciABAgQIECBAgEAFAksGwKUcweX8pv7RiPipiHgcEffmn84ZNhJ4GBEvHO3a/mJEvLLRtV2GAAECBAgQIECAAAECBAgQWFFAALwirlMTIECAAAECBAgsLrB0ADzshvRz8fmtYni+XQ2vfDUiXj4sxG7gGjpiDQQIECBAgAABAgQIECBAYKaAX3TNBPRyAgQIECBAgACBTQWWDoDL4u0CntdCfvP8anm1ZwTX0gnrIECAAAECBAgQIECAAAECMwUEwDMBvZwAAQIECBAgQGBTgTXCxiH4svvxvFYWt2J4ed7LvaoygZueEVz+21Vl67QcAgQIECBAgAABAgQIECBA4BYBAbDRIECAAAECBAgQaElgjQC41C8EPm8K/kVEfG9E/FxE/IHzTuFVlQpcf0bwsMzyPfhmRDyodN2WRYAAAQIECBAgQIAAAQIEuhcQAHc/AgAIECBAgAABAk0JlPDpyUq7EYXA00eh9OIiIryvmG7X2ise39Bru+Zb66L1EiBAgAABAgQIECBAgEAXAn5R00WbFUmAAAECBAgQSCEw7Db9VxHx+1eqaAiB/1lEfGSla2Q67eDlfUWmrp6u5fruYEHwaTNHECBAgAABAgQIECBAgACBzQT8omYzahciQIAAAQIECBCYKVB2IJbnzK79M2wJs8rX2teZyVHFy9e6JXcVxVnEKIHjZwYLgkeROYgAAQIECBAgQIAAAQIECKwr4Jda6/o6OwECBAgQIECAwHICW+02/ecR8QcjQph1d++26sdyE+RMawoIgtfUdW4CBAgQIECAAAECBAgQIDBBQAA8AcuhBAgQIECAAAECuwpsGTh6HvDdrR52Y6/1POZdB83FZwkIgmfxeTEBAgQIECBAgAABAgQIEJgvIACeb+gMBAgQIECAAAEC2whsfbthIfDtfd26F9tMmKssKXA9CH4zIh4seQHnIkCAAAECBAgQIECAAAECBG4WEACbDAIECBAgQIAAgVYE9ggdhcDPT8eWO7FbmU3rvF3gOAguR7m1umkhQIAAAQIECBAgQIAAAQIrCwiAVwZ2egIECBAgQIAAgcUESnD0KCLuL3bGcScSAj/rtEcQP65TjqpZ4GFEvBARw3tQQXDN3bI2AgQIECBAgAABAgQIEGhaQADcdPssngABAgQIECDQjcBbEXHvKDzaunAh8FNxu3+3nryc17MrOGdfVUWAAAECBAgQIECAAAEClQgIgCtphGUQIECAAAECBAjcKVBD8FjDGvYeE7t/9+5ArutfD4JLdXYG5+qxaggQIECAAAECBAgQIEBgBwEB8A7oLkmAAAECBAgQIDBZoJbwtecAtJYeTB4eL2hC4DgMFgI30TKLJECAAAECBAgQIECAAIFaBQTAtXbGuggQIECAAAECBI4Faglee74VdC098J2RW8DtoXP3V3UECBAgQIAAAQIECBAgsIGAAHgDZJcgQIAAAQIECBCYJfAwIl6MiDci4sGsMy3z4h5DYLt/l5kdZxkn4NbQ45wcRYAAAQIECBAgQIAAAQIEbhQQABsMAgQIECBAgACB2gVqDB97C4Ht/q39uyT3+q7fHrr8/6vcJauOAAECBAgQIECAAAECBAicLyAAPt/OKwkQIECAAAECBLYRKOFj+artZ9deQuAaA/htJs9VahOwM7i2jlgPAQIECBAgQIAAAQIECFQpUNsv0apEsigCBAgQIECAAIFdBWoNgAvKcSCV9Wdru393HX8Xv0XgcURcHH0wpMxp+f++CBAgQIAAAQIECBAgQIBA9wJZf0nVfWMBECBAgAABAgQSCdQeQP5yRPz6g3cJhC8T2dv9m6iZiUu5fotoQXDiZiuNAAECBAgQIECAAAECBE4LCIBPGzmCAAECBAgQIEBgX4ESAD9p4Jmf2W4J/ehgbmflvvPv6uMFBMHjrRxJgAABAgQIECBAgAABAokFBMCJm6s0AgQIECBAgEACgXKb17KjtpWfW4f1FvoWQuu7RqT2ndcJxlsJKwlcf1Zw69+LKzE5LQECBAgQIECAAAECBAhkFWjlF2lZ/dVFgAABAgQIECBwt0CrtyBufTdwzc9d9j1DYKzA8QcyymvKXL8ZEQ/GnsBxBAgQIECAAAECBAgQIECgRQEBcItds2YCBAgQIECAQD8CLe9CLbsOh2eR/s+I+NZG2jaE1+UW0PcbWbNlEjglcH1XsDD4lJg/J0CAAAECBAgQIECAAIFmBQTAzbbOwgkQIECAAAEC6QVa3f17vTHDbtoWnqX7HyPi2w87JYfwOv2gKbArgdcj4sVrt5Uv35vl75urriQUS4AAAQIECBAgQIAAAQJpBQTAaVurMAIECBAgQIBA8wIt7/69jn+8+/AfRcSfqrQ7bv1caWMsaxWBhxHxwg3PGG/hwxqrgDgpAQIECBAgQIAAAQIECOQQEADn6KMqCBAgQIAAAQLZBLLs/j3uSwl+v//wH2oMmAbz/xwRvznbQKmHwAiB8szgsvO9vE+u8Xt0RAkOIUCAAAECBAgQIECAAAECT9/Y+iJAgAABAgQIECBQm0Cm3b/XbY93A/9YRPxABfifiojvEHpV0AlLqEHg+vOCvW+uoSvWQIAAAQIECBAgQIAAAQKjBbyRHU3lQAIECBAgQIAAgY0Eyi68yxtuy7rR5Te5TAl+P3a4Ug07Dd36eZO2u0hjAsdBsPfOjTXPcgkQIECAAAECBAgQINCzgDexPXdf7QQIECBAgACBOgV6CiOPA6a9guBhDf8lIn5TnSNhVQR2E+jp76PdkF2YAAECBAgQIECAAAECBJYVEAAv6+lsBAgQIECAAAEC8wVK4FJCybILuJevvYLg4bp7hc+99Fed7Qpkvh19u12xcgIECBAgQIAAAQIECBC4U0AAbEAIECBAgAABAgRqEhgCyV5/Tt0yCBb+1jT51lKjwMOIeDEi3oiIBzUu0JoIECBAgAABAgQIECBAgMBNAr3+Ys00ECBAgAABAgQI1Clgt93TvhwHwX8vIn5w4XYJfxcGdbqUAr1/ICVlUxVFgAABAgQIECBAgACBHgQEwD10WY0ECBAgQIAAgTYEHh9u++xn1Kf9+rsR8fFD65a+RbOgvY3vCavcV8Dzf/f1d3UCBAgQIECAAAECBAgQOFPAL9fOhPMyAgQIECBAgACBxQWELTeTHu8GLqHwn5spb1fjTEAv70bA30ndtFqhBAgQIECAAAECBAgQyCUgAM7VT9UQIECAAAECBFoWKGFLCScvWy5ipbX/aET82cO55+4Gtvt3pSY5bSoBt0lP1U7FECBAgAABAgQIECBAoC8BAXBf/VYtAQIECBAgQKBWAbtSx3XmeDfwOUEw53HOjiLggxJmgAABAgQIECBAgAABAgSaFRAAN9s6CydAgAABAgQIpBF4FBFXEXFOoJkGYWIh5wTBdjRORHZ4twIPI+LFiHgjIh50q6BwAgQIECBAgAABAgQIEGhWQADcbOssnAABAgQIECCQRsBOu/NbOTYIFv6eb+yV/QnYKd9fz1VMgAABAgQIECBAgACBVAIC4FTtVAwBAgQIECBAoDmBEv6WLz+XzmvdXUGw8HeerVf3J+BDKf31XMUECBAgQIAAAQIECBBIJeAXbanaqRgCBAgQIECAQFMCQzBZbgF9v6mV17vYm8JeYVa9/bKy+gTc/rm+nlgRAQIECBAgQIAAAQIECEwUEABPBHM4AQIECBAgQIDAYgKCycUonznRlyLivYf/Up5h6lmm6zg7a04Bt3/O2VdVESBAgAABAgQIECBAoCsBAXBX7VYsAQIECBAgQKAagccRcenWz6v2Y7i9drnIk4i4WvVqTk4gh4APpuTooyoIECBAgAABAgQIECDQtYAAuOv2K54AAQIECBAgsJuAZ/9uQ38cAg9XLP/tYpvLuwqBpgTs/m2qXRZLgAABAgQIECBAgAABArcJCIDNBgECBAgQIECAwB4CJYS0K3Vd+ethVtl1XYLf4T1A+fOyC9sXAQJPBez+NQkECBAgQIAAAQIECBAgkEJAAJyijYogQIAAAQIECDQlYJfd+u16dLjl8227fYcelJV8KiK+c/0luQKBqgX8vVR1eyyOAAECBAgQIECAAAECBKYICICnaDmWAAECBAgQIEBgrsCrEfHyYaed2xDP1bz99WN2Mpbg9zsOp3Bb6PV64cxtCIz5nmmjEqskQIAAAQIECBAgQIAAge4FBMDdjwAAAgQIECBAgMCmAp79uz73VONyK+7rYbxAeP0+uUI9AuX26OV26N4f19MTKyFAgAABAgQIECBAgACBGQLe4M7A81ICBAgQIECAAIFJAsMtVl877AKe9GIHjxIYjMstoO+PesU7Bx3fFnr4r4LgiYgOb1Jg6ocmmizSogkQIECAAAECBAgQIECgHwEBcD+9VikBAgQIECBAYE8Bt35eX38IcJcKbY8D4aXOub6CKxCYLlDmu+yEv5r+Uq8gQIAAAQIECBAgQIAAAQL1CQiA6+uJFREgQIAAAQIEMgrYYbduV5cOf49Xe31n8FsR8a51y3F2ApsJDPPtvfFm5C5EgAABAgQIECBAgAABAmsLeJO7trDzEyBAgAABAgQIuPXz+jNQAva1d+l+7dptpde+3vpqrkDg6feNWTYJBAgQIECAAAECBAgQIJBKQACcqp2KIUCAAAECBAhUKSBgWbcte+xgvH576Dci4hvXLdPZCSwusMf3zuJFOCEBAgQIECBAgAABAgQIELguIAA2EwQIECBAgAABAmsKuPXzmroRjw7PLd1rB+P120OXastafjwifmDd0p2dwGwBH06ZTegEBAgQIECA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IECAAAECBAgQIECAAIFnBQTAJoIAAQIECBAgQOC6gJByvZmwO/F22z8SEf/U86bXG74OzuwDBB00WYkECBAgQIAAAQIECBAgcFpAAHzayBEECBAgQIAAgd4EhJTrdFw4dberW46vM3c9ndXfXT11W60ECBAgQIAAAQIECBAgcKuAANhwECBAgAABAgQIHAsIKdebB+HU7bbD3H00In56vRY4c2KBhxHxots/J+6w0ggQIECAAAECBAgQIEBgtIAAeDSVAwkQIECAAAECXQgIKddps2D9bldzt87c9XRW32M9dVutBAgQIECAAAECBAgQIHCngADYgBAgQIAAAQIECAwCdtCtMwvDrY3LPy/WuUTzZy02n46Ib2m+EgXsJeBDBHvJuy4BAgQIECBAgAABAgQIVCcgAK6uJRZEgAABAgQIENhNwA665emFv6dNfyUiPhwR3puctnLEzQKPI+LSDBkPAgQIECBAgAABAgQIECDwVMAvWUwCAQIECBAgQIBAEXg1Il6OCLtUl52HIQD2c/ftrj54sOzM9Xg232c9dl3NBAgQIECAAAECBAgQIHCrgF9EGQ4CBAgQIECAAIEiIEBZZw6Em3e7Dj4+eLDO/PVy1jI/TyLiqpeC1UmAAAECBAgQIECAAAECBO4SEACbDwIECBAgQIAAgSGEe+2wC5jIsgKeTXqzp/B32Tnr9Ww+ZNFr59VNgAABAgQIECBAgAABArcKCIANBwECBAgQIECAgIBy3RkYAqpylZ+MiD++7uWaObu5a6ZVVS/UHFXdHosjQIAAAQIECBAgQIAAgT0EBMB7qLsmAQIECBAgQKAeAbvntulFCX4/eriU2x0/hSgOX4iIX7NNC1wlqYAAOGljlUWAAAECBAgQIECAAAEC5wsIgM+380oCBAgQIECAQAYB4cm2XXTb46fe/yci3hcR3o9sO38Zr1b+DnsUEfczFqcmAgQIECBAgAABAgQIECBwjoBfuJyj5jUECBAgQIAAgRwCdv/u00chcITZ22f2sl31rYi454ME2dqqHgIECBAgQIAAAQIECBCYKyAAnivo9QQIECBAgACBNgXKjrmrw214L9osoelV9x4C23ne9PhWs3gfJKimFRZCgAABAgQIECBAgAABAjUJCIBr6oa1ECBAgAABAgS2ExDAbWd925V6DYE/ERE/FBE/EhEf378NVtCwgAC44eZZOgECBAgQIECAAAECBAisJyAAXs/WmQkQIECAAAECtQqU8Ld8+Vlw/w4NAVZZyT+JiO/bf0mrr0BotzpxNxfwQZZuWq1QAgQIECBAgAABAgQIEJgi4Jd+U7QcS4AAAQIECBBoX2AI38otoO+3X06KCv5hRPzJQyUl0Mp+S26hXYqx3b2IxxFx6YMsu/fBAggQIECAAAECBAgQIECgQgEBcIVNsSQCBAgQIECAwIoCwrcVcWee+ng3cAmFPzbzfDW+3O7fGrvS5prcyaDNvlk1AQIECBAgQIAAAQIECGwgIADeANklCBAgRRj8jAAAIABJREFUQIAAAQKVCAjfKmnEHcv4iYj4E4c/z7gb2AcQ6p/BVlZYZulJRFy1smDrJECAAAECBAgQIECAAAECWwkIgLeSdh0CBAgQIECAwP4Cwrf9ezB2BUNYnykE9gGEsd133CkBs3RKyJ8TIECAAAECBAgQIECAQNcCAuCu2694AgQIECBAoCMBgUl7zX4zIt51WPbXIuKF9kp4ZsU+gNB4AytavlmqqBmWQoAAAQIECBAgQIAAAQL1CQiA6+uJFREgQIAAAQIElhbIuJt0aaOazzc867Tl3cA+gFDzhLW3Nrd/bq9nVkyAAAECBAgQIECAAAECGwoIgDfEdikCBAgQIECAwA4Cwt8d0Fe4ZOt9tGNzhaHo9JSPI+IyIryX7XQAlE2AAAECBAgQIECAAAECpwW8aT5t5AgCBAgQIECAQKsCrYeGrbqvte5Wbwlt9+9aE9Hnec1Tn31XNQECBAgQIECAAAECBAhMEBAAT8ByKAECBAgQIECgIQHhb0PNmrjU1m4JbffvxAY7/E4B82RACBAgQIAAAQIECBAgQIDACQEBsBEhQIAAAQIECOQTEP7m6+n1ioYel//+JCKuKi3Zbs1KG9PossxTo42zbAIECBAgQIAAAQIECBDYVkAAvK23qxEgQIAAAQIE1hYQ/q4tXNf5a++33Zp1zUvrqzFPrXfQ+gkQIECAAAECBAgQIEBgEwEB8CbMLkKAAAECBAgQ2ESg9jBwE4QOL/I4Ii4PdZeA7KISA7s1K2lEkmWYpySNVAYBAgQIECBAgAABAgQIrC8gAF7f2BUIECBAgAABAmsLvBUR9w4XKWHg8O9rX9f56xKo6bbQPxwRfzMiagqk6+qW1UwVGJ597T3sVDnHEyBAgAABAgQIECBAgEB3At48d9dyBRMgQIAAAQLJBI5DPz/bJWvumeXUsBNcWHdm87zsVgEzZTgIECBAgAABAgQIECBAgMBIAb8kHAnlMAIECBAgQIBAhQI1BH0VslhSROx5W+hhLv9KRPw13SCwkIAAeCFIpyFAgAABAgQIECBAgACB/AIC4Pw9ViEBAgQIECCQT8Atn/P1dK2Ktr4ttFs/r9VJ5xUAmwECBAgQIECAAAECBAgQIDBSQAA8EsphBAgQIECAAIFKBNzyuZJGNLaMrXaLC+kaG4yGlltmyzOlG2qYpRIgQIAAAQIECBAgQIDAfgIC4P3sXZkAAQIECBAgMFVgqxBv6roc34bA2reFduvnNuagxVUOs+X9a4vds2YCBAgQIECAAAECBAgQ2FzAG+jNyV2QAAECBAgQIHCWgPD3LDYvukFgjdtCfzoiPmSHpnlbScDu35VgnZYAAQIECBAgQIAAAQIEcgoIgHP2VVUECBAgQIBALgHhb65+1lLNknPl1s+1dDXfOuz+zddTFREgQIAAAQIECBAgQIDAygIC4JWBnZ4AAQIECBAgMFNgyZBu5lK8PKHAEreFFtAlHIyKSrL7t6JmWAoBAgQIECBAgAABAgQItCEgAG6jT1ZJgAABAgQI9CdwfJveEoBc9Eeg4g0Fzp234XWfiYgPb7hel+pHoPz99yQirvopWaUECBAgQIAAAQIECBAgQGCegAB4np9XEyBAgAABAgSWFjg3iFt6Hc7Xp8Dx/JV/vzzBYHdmn3OyVdXDDnXvW7cSdx0CBAgQIECAAAECBAgQSCHgjXSKNiqCAAECBAgQSCAg+E3QxEQlHM/jo4i4f0Ntbv2cqOGVlmLGKm2MZREgQIAAAQIECBAgQIBA3QIC4Lr7Y3UECBAgQIBAfgHBb/4et1rhL0bEbz1a/C9FxG87+v92/7ba2XbWbcba6ZWVEiBAgAABAgQIECBAgEBFAgLgipphKQQIECBAgEBXAoLfrtrddLFvRcS9QwXD86jtzGy6pc0s3vN/m2mVhRIgQIAAAQIECBAgQIBATQIC4Jq6YS0ECBAgQIBADwKC3x66nLPGJxFxcVTaEAbnrFZVewt4/u/eHXB9AgQIECBAgAABAgQIEGhWQADcbOssnAABAgQIEGhMQPDbWMMs91YBs2w4thCwy3wLZdcgQIAAAQIECBAgQIAAgZQCAuCUbVUUAQIECBAgUJGAsKyiZljKIgLDc1nLycr7CTuBF2F1kmsCnv9rJAgQIECAAAECBAgQIECAwJkCAuAz4byMAAECBAgQIDBCYAh/BWQjsBzShMBwG+jhfcRXI+IbDyt/PSLe3UQVFtmCgOf/ttAlayRAgAABAgQIECBAgACBKgUEwFW2xaIIECBAgACBxgXeioh7hxrKcyyHf2+8LMsn8PZu35s+0FD+W/nyYQdDsoSA5/8uoegcBAgQIECAAAECBAgQINCtgAC429YrnAABAgQIEFhJ4PiWz37WWgnZaXcR+K8R8Rsi4r9FxG+8YQV2vO/SlpQX9fzflG1VFAECBAgQIECAAAECBAhsJeCXkltJuw4BAgQIECCQXcCzfrN3WH1jQjm3hDYnSwh4/u8Sis5BgAABAgQIECBAgAABAt0KCIC7bb3CCRAgQIAAgYUEBL8LQTpN9QIllCvzfjlipW4JPQLJITcKfDEiXoqI1yLiZUYECBAgQIAAAQIECBAgQIDAdAEB8HQzryBAgAABAgQIFIFXj8IJzz01E9kFxuz+vW7gdujZp2Kd+s6ZtXVW4qwECBAgQIAAAQIECBAgQKBRAQFwo42zbAIECBAgQGBXgeNgq+xWe2XX1bg4gfUFzr0lr1tCr9+bbFc4d9ayOaiHAAECBAgQIECAAAECBAicLSAAPpvOCwkQIECAAIFOBYbw167fTgegw7KX2JHpltAdDs6ZJZdZeRIRV2e+3ssIECBAgAABAgQIECBAgED3AgLg7kcAAAECBAgQIDBBQPg7AcuhaQSW2pHpltBpRmK1Qh4fnjHtfepqxE5MgAABAgQIECBAgAABAj0IeGPdQ5fVSIAAAQIECCwhYAfjEorO0ZrAErt/j2v+XES8//Af7PJsbRrWX+/S87b+il2BAAECBAgQIECAAAECBAhUKCAArrAplkSAAAECBAhUJyD8ra4lFrSRwFK7f68v1276jRrY2GXWmrfGGCyXAAECBAgQIECAAAECBAjMExAAz/PzagIECBAgQKAPAQFwH31W5bMCa+/GLDuALw6X/F0R8W81oHsBz//tfgQAECBAgAABAgQIECBAgMASAgLgJRSdgwABAgQIEOhB4HjH4psR8aCHotXYtcAWuzG/5yj4Ld9jl12L91285//23X/VEyBAgAABAgQIECBAgMCCAgLgBTGdigABAgQIEEgvMITAQ6ElIBt2MKYvXoFdCay9+/c6pltCdzVeNxa79cwRJ0CAAAECBAgQIECAAAECaQUEwGlbqzACBAgQIEBgRYGHEfFCRJSfpYTAK0I79S4CfzUi/vIOsz3sAC1Ffz4iPrBL9S66l8Bwq33vUffqgOsSIECAAAECBAgQIECAQBoBb67TtFIhBAgQIECAwA4Cdi3ugO6SqwvsHcR55vbqLa7yAnvPXZUoFkWAAAECBAgQIECAAAECBM4REACfo+Y1BAgQIECAAIF3BI5D4PLvV3AINCwwzPPfiogf3rEOH67YEX+nSwuAd4J3WQIECBAgQIAAAQIECBDIJyAAztdTFREgQIAAAQLbC1x/NnBZgVtDb98HV5wnsNetn29b9fEtob1vmdfbFl4tAG6hS9ZIgAABAgQIECBAgAABAk0I+EVKE22ySAIECBAgQKAhgRJaXRyeDywIbqhxlvr2hxbKV03vET4aET95WNevRsT79SmtQI3zlxZbYQQIECBAgAABAgQIECCQW6CmX+7kllYdAQIECBAg0KPA8c5gO4J7nIB2aq7l1s+3iQ3hYFnnZTusVjpBoPTY35MTwBxKgAABAgQIECBAgAABAgRuExAAmw0CBAgQIECAwPoCguD1jV1hnkAL4ZvnAs/rce2vbmEGaze0PgIECBAgQIAAAQIECBAg8LaAANggECBAgAABAgS2ExAEb2ftSuMFWrr17pPDLda9lxnf31aOLHP4KCLut7Jg6yRAgAABAgQIECBAgAABArUKCIBr7Yx1ESBAgAABApkFBMGZu9tWbUOg+qWIeKmRpX8+Ir75sNY/FhE/1ci6LfN2gbci4p4PKBsRAgQIECBAgAABAgQIECCwjIAAeBlHZyFAgAABAgQInCMgCD5HzWuWFGj5trvDzuUSYl8tieJcmwsMfxd6f7o5vQsSIECAAAECBAgQIECAQEYBb7AzdlVNBAgQIECAQGsCguDWOpZjvRlCN88FNos5BFRBgAABAgQIECBAgAABAgQWFBAAL4jpVAQIECBAgACBmQLCrJmAXj5a4LWI+KaIKDN3OfpVdR7o+6bOvkxZVcs70afU6VgCBAgQIECAAAECBAgQILCJgAB4E2YXIUCAAAECBAiMFnh0dDvb8u/3R7/SgQTGCwy3T87yfqA8w/i9h/K/fAi3x2s4cm+BMo9u5b13F1yfAAECBAgQIECAAAECBNIIZPmFT5qGKIQAAQIECBAgcBAYArryzwsqBBYUyHDr59s4fN8sOCgbnerxYRe696YbgbsMAQIECBAgQIAAAQIECOQX8CY7f49VSIAAAQIECLQr4Na27fau5pVnv92u75uap+/5tWX+QEJbnbBaAgQIECBAgAABAgQIEEgjIABO00qFECBAgAABAkkF3BI6aWN3KquXsO34ltDl31/aydtlTwtk/0DCaQFHECBAgAABAgQIECBAgACBhQUEwAuDOh0BAgQIECBAYCUBt7ZdCbaj0w632u3pWau+b+oe8F4+kFB3F6yOAAECBAgQIECAAAECBNIJCIDTtVRBBAgQIECAQGKBISwpJXo2cOJGr1Rarzstj79vvhgRr6zk67TTBYaA3vvS6XZeQYAAAQIECBAgQIAAAQIEbhXwRttwECBAgAABAgTaExAEt9ezvVdsp+XTD02ULx+e2Hsa37m+ALieXlgJAQIECBAgQIAAAQIECCQSEAAnaqZSCBAgQIAAge4EBMHdtfzsgnvd/XsdrNz++uLwH8v3z+XZol64hIAAeAlF5yBAgAABAgQIECBAgAABAtcEBMBGggABAgQIECDQvsAQBNvZ2H4v16jA7t/nVY8/POE90RpTN+6cAuBxTo4iQIAAAQIECBAgQIAAAQKTBPyyYxKXgwkQIECAAAEC1QoIgattza4L+x8R8a0RYbfr8214NSJePvxnH57YZ0wFwPu4uyoBAgQIECBAgAABAgQIJBcQACdvsPIIECBAgACBrgSEwF21e1SxArbTTL5vThutdYT5XEvWeQkQIECAAAECBAgQIECgawEBcNftVzwBAgQIECCQUECYlbCpZ5Y0PO/2lyPi2848Ry8vO342sPdI23VdALydtSsRIECAAAECBAgQIECAQEcCfrnRUbOVSoAAAQIECHQjcPx80xJsXXVTuUKPBUq45tbG42fiH0fE9x0O/4mI+P7xL3XkmQJm9Ew4LyNAgAABAgQIECBAgAABAncJCIDNBwECBAgQIEAgr4DdwHl7e6qyofd+3j8l9fyfD7tSPTd5ut2UV/xKRHw4Ij4dEd8y5YWOJUCAAAECBAgQIECAAAECBO4W8AshE0KAAAECBAgQyC3wOCIuDyXaDZq718fV2Vk5r9c+PDHPb8yrfUhhjJJjCBAgQIAAAQIECBAgQIDAGQIC4DPQvIQAAQIECBAg0KDA8W2hP3PYeddgGZY8QmAI/f2sPwLrjkOEwPP8Tr3ahxROCflzAgQIECBAgAABAgQIECBwpoBfCp0J52UECBAgQIAAgQYF/ldE/NrDuu0GbrCBI5c83MLYz/ojwe44rDxD++Lw5zznew5n+N+H2z6X20APfyctd3ZnIkCAAAECBAgQIECAAAECnQv4JUbnA6B8AgQIECBAoEuB493AJYj5dV0q5C26BMAluLzKW+Kmlf1YRHzscMUfj4g/venVc17M7Z9z9lVVBAgQIECAAAECBAgQIFCJgAC4kkZYBgECBAgQIEBgY4FPR8SHDte0G3hj/BUvJ1hbD3fYWV2Mh+dqr3e13Ge2Sz13f1VHgAABAgQIECBAgAABAjsLCIB3boDLEyBAgAABAgR2FvCc050bsPDlPVd1YdBrp/P9soyvAHgZR2chQIAAAQIECBAgQIAAAQI3CgiADQYBAgQIECBAgIDnnOaYgaGPfsZft59C4Pm+Pqgw39AZCBAgQIAAAQIECBAgQIDArQJ+OWQ4CBAgQIAAAQIEisBXIuLdB4qvRsR7sDQnIFTbrmVC4HnWnlM9z8+rCRAgQIAAAQIECBAgQIDAnQICYANCgAABAgQIECBwLOA5p23Owxci4pWIeDUi3tdmCc2tWgh8XsseH56h7L3oeX5eRYAAAQIECBAgQIAAAQIETgp4032SyAEECBAgQIAAge4EBFvttXzomZ/vt+2d75Xp3mZ1uplXECBAgAABAgQIECBAgACBSQJ+QTSJy8EECBAgQIAAgW4EBFtttbrs3C49u2xr2SlW63tlWhvdqnyal6MJECBAgAABAgQIECBAgMBkAQHwZDIvIECAAAECBAh0IyDYaqPVdlTu3yffK+N74Pm/460cSYAAAQIECBAgQIAAAQIEzhIQAJ/F5kUECBAgQIAAgW4EBFv1t9qOyjp65HvldB88//e0kSMIECBAgAABAgQIECBAgMBsAQHwbEInIECAAAECBAikFxBs1dtiu3/r6o3vlbv7YV7rmlerIUCAAAECBAgQIECAAIGkAgLgpI1VFgECBAgQIEBgYQHB1sKgC5zu0xHxIc/+XUBy2VP4Xrnd0271ZWfN2QgQIECAAAECBAgQIECAwI0CAmCDQYAAAQIECBAgMFZAsDVWapvjSphWvvxMv433lKv4XrlZSwA8ZYocS4AAAQIECBAgQIAAAQIEzhTwy6Iz4byMAAECBAgQINCpgGCrjsY/iYiLiPhMRHy4jiVZxTWB4XvlUUTcp/O2QAmAeRgGAgQIECBAgAABAgQIECCwsoAAeGVgpydAgAABAgQIJBQYwsdSmp8n92mwnZT7uE+96hAC/0hEfHzqi5Md/1ZE3PN3RrKuKocAAQIECBAgQIAAAQIEqhTwC7sq22JRBAgQIECAAIHqBb4SEe8+rPKrEfGe6lecZ4FDqOhn+TZ66lbdT/tkbtuYV6skQIAAAQIECBAgQIAAgQQCfmmUoIlKIECAAAECBAjsKDCEWyXcudxxHT1d2u7f9rotBBYAtze1VkyAAAECBAgQIECAAAECzQoIgJttnYUTIECAAAECBKoR8Fzg7VpRnp96FRHfHRGf3O6yrjRT4BMR8UOHZ+CWZzf3+OWDCz12Xc0ECBAgQIAAAQIECBAgsIuAAHgXdhclQIAAAQIECKQTEAJv01K30d3GeY2rDM/ALUFojyFwqbs8P7x8gMEXAQIECBAgQIAAAQIECBAgsKKAAHhFXKcmQIAAAQIECHQmUMKdIdjyc+Y6zS8hmtttr2O7xVmHAL+Ewe/a4oKVXOPx4Rbx/l6opCGWQYAAAQIECBAgQIAAAQK5BbwBz91f1REgQIAAAQIEthb4SkS8+3DRr0bEe7ZeQOLrDQG7n+HbbvIQAv+diPgLbZcyevV2ro+mciABAgQIECBAgAABAgQIEJgv4JdH8w2dgQABAgQIECBA4HmBslO1fNmtutx0eIbqcpZ7n2n4/ujl/ZjZ3XviXJ8AAQIECBAgQIAAAQIEuhLo5RcOXTVVsQQIECBAgACBSgQ8F3i5RnxXRPz7iCi30r233GmdaUeBnkJgz//dcdBcmgABAgQIECBAgAABAgT6ExAA99dzFRMgQIAAAQIEthQQAi+j7Ra6yzjWdJa/HRF/PiJKODo8O7um9S21Fs//XUrSeQgQIECAAAECBAgQIECAwEgBAfBIKIcRIECAAAECBAicLfAoIq4Ory7/fv/sM/X7QrfQzdn7rx2+HzKHwD68kHN2VUWAAAECBAgQIECAAAECFQsIgCtujqURIECAAAECBJIJDLe8zRx2rdGyJ4cdon52X0N3/3NmD0h7utX1/tNkBQQIECBAgAABAgQIECBAICL8EskYECBAgAABAgQIbCkwhF0l1Bx2BW95/RavZfdvi12btubMPRYAT5sFRxMgQIAAAQIECBAgQIAAgdkCAuDZhE5AgAABAgQIECAwUSD7jseJHHce/lpEfFNEfCkiXlryxM5VlUDm7wkBcFWjZjEECBAgQIAAAQIECBAg0IOAALiHLquRAAECBAgQIFCfgFBoXE8yB4PjBPo5KusuYN/r/cywSgkQIECAAAECBAgQIECgEgEBcCWNsAwCBAgQIECAQIcCWQOvJVtZjEoIfLnkSZ2rSoGsYb/v8yrHzaIIECBAgAABAgQIECBAILOAADhzd9VGgAABAgQIEKhb4PEh2CwB0UXdS91ldVkDwV0wG7loxrC01OSZ340MoGUSIECAAAECBAgQIECAQA4BAXCOPqqCAAECBAgQINCqwBByCoGf72DGMLDVOd1q3dlC/+FDHt53bjVBrkOAAAECBAgQIECAAAECBCLCG3FjQIAAAQIECBAgsLeAEPj5DnwyIr4zIj51+OfePXL97QQyBf/ZAu3tpsCVCBAgQIAAAQIECBAgQIDADAEB8Aw8LyVAgAABAgQIEFhMQAj8LKXgbLHRau5Emb4XMoXZzQ2SBRMgQIAAAQIECBAgQIBAvwIC4H57r3ICBAgQIECAQG0CQ/DleaERgrPapnPb9WQJgT3/d9u5cTUCBAgQIECAAAECBAgQIPC2gADYIBAgQIAAAQIECNQkYOdrxH+IiN/i9s81jeUua2k9BPb8313GxkUJECBAgAABAgQIECBAgIAA2AwQIECAAAECBAjUJ1B2DZavXj+sKASvbyb3WlHLIbA53mtqXJcAAQIECBAgQIAAAQIEuhfo9Zdq3TceAAECBAgQIECgcoGeb4Hcc+2Vj+Uuy2s1BDbHu4yLixIgQIAAAQIECBAgQIAAgX53Veg9AQIECBAgQIBA3QLD7WNLiHRR91IXXd1w++fyz+9a9MxO1rJAa7tpW1tvy7Nh7QQIECBAgAABAgQIECBA4DkBO4ANBQECBAgQIECAQK0CPYZIPdZc6/zVtq6WdtT2fhv32mbHeggQIECAAAECBAgQIECgMwEBcGcNVy4BAgQIECBAoDGBlkKvJWh7q3cJs17O8bWIuB8RPxsRf6jyogXAlTfI8ggQIECAAAECBAgQIEAgt4AAOHd/VUeAAAECBAgQaF2gpx2xTw63u/YzeutTu976WwlWW1nnep1yZgIECBAgQIAAAQIECBAgsKOAXy7tiO/SBAgQIECAAAECowR62RXbS52jmu6gGwV+JiI+EhFvRcS7KjYyyxU3x9IIECBAgAABAgQIECBAIL+AADh/j1VIgAABAgQIEGhdYNgF/J8i4ttbL+aW9X85Iv5/e3ezYtlZRgF40d1JBiYRFYeKRiUq+IPegMGJojjwNlTUeYSAzhXUG5GIGQjmBlQUIRGJTpypwZgI5qdBPj0n3XS6us/PPr33XvupSQhU7fO9z3oLqnrV3uexJK8mebx0RmNNI7D0u+KXfr5pUnAVAgQIECBAgAABAgQIECCwYAEF8ILDcTQCBAgQIECAAIG3BdofKas0s+zHCCz5Dtv279VjcvK5BAgQIECAAAECBAgQIEBgFgEF8CzsXpQAAQIECBAgQOBIgZeSPJFklEvXjvzaNXz6mGuUwNfXcFhnnF1g/wcDr+3uHJ/9QLcdQAG8pDSchQABAgQIECBAgAABAgQ2KaAA3mTshiZAgAABAgQIrFKg9VHQ7v5d5TrOfuj93nwvyQ9mP82tAyz57uQFMTkKAQIECBAgQIAAAQIECBC4nIAC+HK2rkyAAAECBAgQIDC9QOPdhQqz6fdkK1dc4vfDONPNJDe2EoI5CRAgQIAAAQIECBAgQIDA0gQUwEtLxHkIECBAgAABAgTuJdD2KOhRlI1HWvu53N6fKrCkEvit3WPM7fOpafo6AgQIECBAgAABAgQIECAwgYBfzCdAdAkCBAgQIECAAIEHKtD0yGR3/z7Q1al8saeTfH8h74/d9L1ZuSyGIkCAAAECBAgQIECAAIFtCCiAt5GzKQkQIECAAAECbQINxemrSR5N8lqSx9oCMs8DFdjv0vi+GHeUz/WxpLuR5zLwugQIECBAgAABAgQIECBAYHYBBfDsETgAAQIECBAgQIDACQL7R82u+b1G3S15QvC+5EqB/T7NWQIrgC0oAQIECBAgQIAAAQIECBBYgIACeAEhOAIBAgQIECBAgMBJAmsvUEdZNma4ftL0vojAOwXmLoEb7sy3VwQIECBAgAABAgQIECBAYPUCCuDVR2gAAgQIECBAgMCmBdZaOK29vN700i18+LlKYDu98MVwPAIECBAgQIAAAQIECBDYjoACeDtZm5QAAQIECBAg0CiwL51eSPLJFQ241uJ6RcSbPuocJbDHP2965QxPgAABAgQIECBAgAABAksSUAAvKQ1nIUCAAAECBAgQOEVgbcXTeN/ia0n8LH5K2r7mUIF9Cfxykvcd+kVnfN7avg/PGNWXEiBAgAABAgQIECBAgACBZQv4R6dl5+N0BAgQIECAAAEC9xf4U5KPJhkF1ChWl/7h7t+lJ9Rzvn0J/N0kP7rwWArgCwO7PAECBAgQIECAAAECBAgQOFRAAXyolM8jQIAAAQIECBBYssBaHgX9VpLrSZ5P8tSSQZ2tRmDKYnbcSfyPK2T8YUPNyhiEAAECBAgQIECAAAECBNYuoABee4LOT4AAAQIECBAgsBeYsui6lOoaznip2V13PoEp9u7buzvtv3WXMfZ/gOH3y/ky9soECBAgQIAAAQIECBAgQOBtAb+gWwYCBAgQIECAAIEWgaU/CvpXSb6QZLyiFcShAAAgAElEQVQH8I0WdHOsQuA7SX545mPSv5Lkm0m+fJeJpyiYVwHpkAQIECBAgAABAgQIECBAYA0CCuA1pOSMBAgQIECAAAEChwos+U7EJZ/tUF+ft16B8ejm955RAj+Z5NkkH1MAr3cJnJwAAQIECBAgQIAAAQIEtiGgAN5GzqYkQIAAAQIECGxJYKnvRTrONUrg8R7APgjMIbD/I4Q/J/nIkQcYezvew3rcvT7uYr/9Y6nfc0eO6NMJECBAgAABAgQIECBAgECHgAK4I0dTECBAgAABAgQI3BIY5dS1JG8keWQhMO7+XUgQjvG/P0IYvwee8rvgeMz6V5P88TbHc64nDgIECBAgQIAAAQIECBAgQOACAqf80n+BY7gkAQIECBAgQIAAgUkFlvaepO6QnDReFztT4NTvj18k+UmSn9/2+qde68wRfDkBAgQIECBAgAABAgQIECBwlYAC2G4QIECAAAECBAg0Cvxnd/fvEh65/ObusbmfT/KbRmwzrVLglD9K+HGSV5I8rQBeZeYOTYAAAQIECBAgQIAAAQIbEVAAbyRoYxIgQIAAAQIENiiwlEfTLuUcG1wBI99D4KUkTyQZRfB4ZPohH88m+UCSz+w+eb/bx1zjkNfxOQQIECBAgAABAgQIECBAgMAZAgrgM/B8KQECBAgQIECAwOIFTrnLceqhxhmWcCfy1HO53voFjv3jhGeSfCPJ+3eje/zz+nfABAQIECBAgAABAgQIECBQKKAALgzVSAQIECBAgAABAm8LHFtwTU13c3d3pZ+7p5Z1vakEjvkjiS8l+VmShxXAU/G7DgECBAgQIECAAAECBAgQmF7AP0RNb+qKBAgQIECAAAECyxI4puCa+uRzvvbUs7hep8ALST6e5MUkn7jPiKP4fX33/tpv7B4fPb7E75Wdu2EqAgQIECBAgAABAgQIEFipgF/UVxqcYxMgQIAAAQIECBws8FaS60nG3bg3Dv6q8z/xc0l+nWS8/kPnX84VCFxM4Jg75Ufx+7UkzymAL5aHCxMgQIAAAQIECBAgQIAAgbMEFMBn8fliAgQIECBAgACBlQgcU3BNNdIcrznV2V1newKH3q3+tyQ/TTLeD9h7AG9vT0xMgAABAgQIECBAgAABAisQUACvICRHJECAAAECBAgQmETg0IJrkhfblWPjNa9NdUHXIXBBgf0fLIw7fB+5x+v8LslLSb6+2/HxdeMOex8ECBAgQIAAAQIECBAgQIDAQgQUwAsJwjEIECBAgAABAgQuLrAvuP6Q5FMXfrX9Y6f9vH1haJefVGC8v+94n997lcB/TfJmkg/u/rjBjk8agYsRIECAAAECBAgQIECAAIHzBfyyfr6hKxAgQIAAAQIECKxH4EE9svZBvc565J10LQL7Eviqu9f/shvkQ7v/+p1yLck6JwECBAgQIECAAAECBAhsRsAv65uJ2qAECBAgQIAAAQJJXkzy5O7RtZd8NPMoz24muUGdwAoF9nfLP5Xk+TvOrwBeYaCOTIAAAQIECBAgQIAAAQLbElAAbytv0xIgQIAAAQIECCSXfhT0/vp+1rZtaxa46i72V5K8nMQdwGtO19kJECBAgAABAgQIECBAoFrAP0pVx2s4AgQIECBAgACBKwQu+Yjmce2rHp8rEAJrEfhikl/eZZfH+1uPj+tJ/pnkPWsZyDkJECBAgAABAgQIECBAgMBWBBTAW0nanAQIECBAgAABArcLXOpR0O7+tWdNAvt9/neSR5N8Nslvd6Xw+F3S75NNaZuFAAECBAgQIECAAAECBGoE/MJeE6VBCBAgQIAAAQIEjhSYuqwdj8Z9PP9/xPS4O9IHgQaB15K8azfI67v3tX519//u/m1I2AwECBAgQIAAAQIECBAgUCegAK6L1EAECBAgQIAAAQJHCEz5uOZLPlb6iJF8KoHJBW4vgf+eZPz/+Pjw5K/kggQIECBAgAABAgQIECBAgMDZAgrgswldgAABAgQIECBAYMUCU90FfDPJtST/SvLuFXs4OoF7Cfw+yaeTPLP7pP1/qREgQIAAAQIECBAgQIAAAQILElAALygMRyFAgAABAgQIEJhFYIq7gKe4xizDe1ECBAgQIECAAAECBAgQIECAAIEuAQVwV56mIUCAAAECBAgQOF5gfxfwKHHHXbzHfkx1F/Gxr+vzCRAgQIAAAQIECBAgQIAAAQIECLxDQAFsKQgQIECAAAECBAgk55TA7v61QQQIECBAgAABAgQIECBAgAABAosRUAAvJgoHIUCAAAECBAgQmFng1BJYATxzcF6eAAECBAgQIECAAAECBAgQIEDgloAC2DYQIECAAAECBAgQuCVwyuOcRwH8ZpKHQRIgQIAAAQIECBAgQIAAAQIECBCYW0ABPHcCXp8AAQIECBAgQGBpAsfc0ftGkoeS+Ll6aSk6DwECBAgQIECAAAECBAgQIEBgowL+oWqjwRubAAECBAgQIEDgSoFj7gI+5nOREyBAgAABAgQIECBAgAABAgQIELi4gAL44sRegAABAgQIECBAYIUCh94FrABeYbiOTIAAAQIECBAgQIAAAQIECBBoFlAAN6drNgIECBAgQIAAgVMFDi12Dy2KTz2HryNAgAABAgQIECBAgAABAgQIECBwlIAC+Cgun0yAAAECBAgQILAhgfuVu4eWxBsiMyoBAgQIECBAgAABAgQIECBAgMDcAgrguRPw+gQIECBAgAABAksV2Be8owi+dpdD3q8gXupczkWAAAECBAgQIECAAAECBAgQIFAsoAAuDtdoBAgQIECAAAECZwuMknd83Plzs7t/z6Z1AQIECBAgQIAAAQIECBAgQIAAgUsIKIAvoeqaBAgQIECAAAECLQJX3QXs7t+WhM1BgAABAgQIECBAgAABAgQIECgTUACXBWocAgQIECBAgACByQXuvAvY3b+TE7sgAQIECBAgQIAAAQIECBAgQIDAVAIK4KkkXYcAAQIECBAgQKBV4M67gN3925q0uQgQIECAAAECBAgQIECAAAECBQIK4IIQjUCAAAECBAgQIHBxgf1dwOO/42doP0dfnNwLECBAgAABAgQIECBAgAABAgQInCLgH65OUfM1BAgQIECAAAECWxS4vQS+tkUAMxMgQIAAAQIECBAgQIAAAQIECCxfQAG8/IyckAABAgQIECBAYDkC43HQyt/l5OEkBAgQIECAAAECBAgQIECAAAECdwgogK0EAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIKxD0W4AABspSURBVECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRIBBXBJkMYgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAAtgOECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoERAAVwSpDEIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCgALYDBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBFQAJcEaQwCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgogO0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgQUwCVBGoMAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIKYDtAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBEgEFcEmQxiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgIAC2A4QIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgREABXBKkMQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIKAAtgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoEVAAlwRpDAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCiA7QABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBBTAJUEagwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgpgO0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIESAQVwSZDGIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAgALYDhAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBEQAFcEqQxCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgoAC2AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgRUACXBGkMAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIKIDtAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoEFMAlQRqDAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCmA7QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgRKB/wJpvi3SoNa7CwAAAABJRU5ErkJggg==\n"; + Base64.decodeToFile(valueData, file); + byte[] decode = Base64.decode(valueData); - } + FileOutputStream out = new FileOutputStream(file); + out.write(decode); + out.close(); + System.out.println(System.currentTimeMillis()); + } } diff --git a/util/src/test/java/com/ccsens/util/TestQrCord.java b/util/src/test/java/com/ccsens/util/TestQrCord.java new file mode 100644 index 00000000..5142794c --- /dev/null +++ b/util/src/test/java/com/ccsens/util/TestQrCord.java @@ -0,0 +1,34 @@ +package com.ccsens.util; + +import cn.hutool.core.date.DateUtil; +import net.glxn.qrgen.core.image.ImageType; +import net.glxn.qrgen.javase.QRCode; +import org.junit.Test; + +import java.io.*; + +public class TestQrCord { + + + @Test + public void test01() throws Exception { + String fileName = "zzz/" + DateUtil.today() + "/" + System.currentTimeMillis() + ".png"; + ByteArrayOutputStream stream = QRCode.from("112233").to(ImageType.BMP).withSize(1000,1000).stream(); + byte[] codeByte = stream.toByteArray(); + File file = new File(WebConstant.UPLOAD_PATH_BASE + "/", fileName); + if (!file.getParentFile().exists()) { + file.getParentFile().mkdirs(); + } + OutputStream out = null; + try { + out = new FileOutputStream(file); + out.write(codeByte); + out.flush(); + } finally { + if ( out!= null) { + out.close(); + } + } + } + +}