From 0fda2354ebf6779e02d331cbc351c0f9529c1367 Mon Sep 17 00:00:00 2001 From: xy <748613696@qq.com> Date: Tue, 16 Sep 2025 18:31:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=91=E5=8D=8F=E8=AE=AE?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../access/api/AskDeviceDataFeignClient.java | 2 +- .../AskDeviceDataClientFallbackFactory.java | 2 +- .../controller/AskDeviceDataController.java | 7 +- .../listener/RedisKeyExpirationListener.java | 8 + .../access/service/AskDeviceDataService.java | 2 +- .../impl/AskDeviceDataServiceImpl.java | 7 +- .../service/impl/CsDevModelServiceImpl.java | 10 +- .../service/impl/CsDeviceServiceImpl.java | 18 +- .../src/test/java/com/njcn/AppTest.java | 484 +++++++++++++++--- .../src/test/java/com/njcn/Test.java | 191 +++++++ .../src/test/java/com/njcn/TestXianCheng.java | 61 +++ .../njcn/rt/service/impl/RtServiceImpl.java | 2 +- .../stat/service/impl/StatServiceImpl.java | 16 +- .../src/test/java/com/njcn/AppTest.java | 44 ++ iot-message/message-boot/pom.xml | 11 + .../consumer/CldDevRunFlagConsumer.java | 135 +++++ .../message/consumer/CldHeartConsumer.java | 132 +++++ 17 files changed, 1027 insertions(+), 105 deletions(-) create mode 100644 iot-access/access-boot/src/test/java/com/njcn/Test.java create mode 100644 iot-access/access-boot/src/test/java/com/njcn/TestXianCheng.java create mode 100644 iot-message/message-boot/src/main/java/com/njcn/message/consumer/CldDevRunFlagConsumer.java create mode 100644 iot-message/message-boot/src/main/java/com/njcn/message/consumer/CldHeartConsumer.java diff --git a/iot-access/access-api/src/main/java/com/njcn/access/api/AskDeviceDataFeignClient.java b/iot-access/access-api/src/main/java/com/njcn/access/api/AskDeviceDataFeignClient.java index 2584b2d..b738e34 100644 --- a/iot-access/access-api/src/main/java/com/njcn/access/api/AskDeviceDataFeignClient.java +++ b/iot-access/access-api/src/main/java/com/njcn/access/api/AskDeviceDataFeignClient.java @@ -35,6 +35,6 @@ public interface AskDeviceDataFeignClient { HttpResult askRealData(@RequestParam("nDid") String nDid, @RequestParam("idx") Integer idx, @RequestParam("clDId") Integer clDId); @PostMapping("/askCldRealData") - HttpResult askCldRealData(@RequestParam("devId") String devId, @RequestParam("lineId") String lineId); + HttpResult askCldRealData(@RequestParam("devId") String devId, @RequestParam("lineId") String lineId, @RequestParam("nodeId") String nodeId); } diff --git a/iot-access/access-api/src/main/java/com/njcn/access/api/fallback/AskDeviceDataClientFallbackFactory.java b/iot-access/access-api/src/main/java/com/njcn/access/api/fallback/AskDeviceDataClientFallbackFactory.java index a53bd82..cafce2d 100644 --- a/iot-access/access-api/src/main/java/com/njcn/access/api/fallback/AskDeviceDataClientFallbackFactory.java +++ b/iot-access/access-api/src/main/java/com/njcn/access/api/fallback/AskDeviceDataClientFallbackFactory.java @@ -75,7 +75,7 @@ public class AskDeviceDataClientFallbackFactory implements FallbackFactory askCldRealData(String devId, String lineId) { + public HttpResult askCldRealData(String devId, String lineId, String nodeId) { log.error("{}异常,降级处理,异常为:{}","询问云前置实时数据",cause.toString()); throw new BusinessException(finalExceptionEnum); } diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/controller/AskDeviceDataController.java b/iot-access/access-boot/src/main/java/com/njcn/access/controller/AskDeviceDataController.java index 99ecc1c..0223c49 100644 --- a/iot-access/access-boot/src/main/java/com/njcn/access/controller/AskDeviceDataController.java +++ b/iot-access/access-boot/src/main/java/com/njcn/access/controller/AskDeviceDataController.java @@ -128,11 +128,12 @@ public class AskDeviceDataController extends BaseController { @ApiOperation("询问云前置实时数据") @ApiImplicitParams({ @ApiImplicitParam(name = "devId", value = "装置id"), - @ApiImplicitParam(name = "lineId", value = "监测点id") + @ApiImplicitParam(name = "lineId", value = "监测点id"), + @ApiImplicitParam(name = "nodeId", value = "前置id") }) - public HttpResult askCldRealData(@RequestParam("devId") String devId, @RequestParam("lineId") String lineId){ + public HttpResult askCldRealData(@RequestParam("devId") String devId, @RequestParam("lineId") String lineId, @RequestParam("nodeId") String nodeId){ String methodDescribe = getMethodDescribe("askCldRealData"); - askDeviceDataService.askCldRealData(devId,lineId); + askDeviceDataService.askCldRealData(devId,lineId,nodeId); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); } diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/listener/RedisKeyExpirationListener.java b/iot-access/access-boot/src/main/java/com/njcn/access/listener/RedisKeyExpirationListener.java index bd0e13e..0919124 100644 --- a/iot-access/access-boot/src/main/java/com/njcn/access/listener/RedisKeyExpirationListener.java +++ b/iot-access/access-boot/src/main/java/com/njcn/access/listener/RedisKeyExpirationListener.java @@ -19,6 +19,7 @@ import com.njcn.csdevice.pojo.dto.DevDetailDTO; import com.njcn.csdevice.pojo.dto.PqsCommunicateDto; import com.njcn.csdevice.pojo.po.CsEquipmentDeliveryPO; import com.njcn.redis.pojo.enums.AppRedisKey; +import com.njcn.redis.pojo.enums.RedisKeyEnum; import com.njcn.redis.utils.RedisUtil; import com.njcn.rt.pojo.dto.BaseRealDataSet; import com.njcn.user.api.AppUserFeignClient; @@ -120,6 +121,13 @@ public class RedisKeyExpirationListener extends KeyExpirationEventMessageListene }); } } + //云前置设备心跳丢失处理 + if(expiredKey.startsWith(RedisKeyEnum.CLD_HEART_BEAT_KEY.getKey())){ + String node = expiredKey.split(":")[1]; + String nodeId = node.substring(0, node.length() - 1); + int processNo = Integer.parseInt(node.substring(node.length() - 1)); + equipmentFeignClient.updateCldDevStatus(nodeId,processNo); + } } //主任务 diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/service/AskDeviceDataService.java b/iot-access/access-boot/src/main/java/com/njcn/access/service/AskDeviceDataService.java index e16342f..f9c4188 100644 --- a/iot-access/access-boot/src/main/java/com/njcn/access/service/AskDeviceDataService.java +++ b/iot-access/access-boot/src/main/java/com/njcn/access/service/AskDeviceDataService.java @@ -22,5 +22,5 @@ public interface AskDeviceDataService { */ void askRealData(String nDid, Integer idx, Integer size); - void askCldRealData(String devId, String lineId); + void askCldRealData(String devId, String lineId, String nodeId); } diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/service/impl/AskDeviceDataServiceImpl.java b/iot-access/access-boot/src/main/java/com/njcn/access/service/impl/AskDeviceDataServiceImpl.java index c317ab3..86602d3 100644 --- a/iot-access/access-boot/src/main/java/com/njcn/access/service/impl/AskDeviceDataServiceImpl.java +++ b/iot-access/access-boot/src/main/java/com/njcn/access/service/impl/AskDeviceDataServiceImpl.java @@ -213,14 +213,15 @@ public class AskDeviceDataServiceImpl implements AskDeviceDataService { } @Override - public void askCldRealData(String devId, String lineId) { + public void askCldRealData(String devId, String lineId, String nodeId) { RealDataMessage realDataMessage = new RealDataMessage(); realDataMessage.setDevSeries(devId); - realDataMessage.setLine(lineId); + int lastDigit = Character.getNumericValue(lineId.charAt(lineId.length() - 1)); + realDataMessage.setLine(lastDigit); realDataMessage.setRealData(true); realDataMessage.setSoeData(true); realDataMessage.setLimit(20); - realDataMessageTemplate.sendMember(realDataMessage); + realDataMessageTemplate.sendMember(realDataMessage,nodeId); } public Object getDeviceMid(String nDid) { diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/service/impl/CsDevModelServiceImpl.java b/iot-access/access-boot/src/main/java/com/njcn/access/service/impl/CsDevModelServiceImpl.java index a3ed28f..17e2e95 100644 --- a/iot-access/access-boot/src/main/java/com/njcn/access/service/impl/CsDevModelServiceImpl.java +++ b/iot-access/access-boot/src/main/java/com/njcn/access/service/impl/CsDevModelServiceImpl.java @@ -849,12 +849,18 @@ public class CsDevModelServiceImpl implements ICsDevModelService { * 解析数据集、详细数据 */ private void analysisDataSet(TemplateDto templateDto,String pId){ + String code; List setList = new ArrayList<>(); List arrayList = new ArrayList<>(); List dataSetList = templateDto.getDataSet(); String devType = templateDto.getDevType(); - DictTreeVO dictTreeVO = dictTreeFeignClient.queryByCode(devType).getData(); - String code = dictTreeFeignClient.queryById(dictTreeVO.getPid()).getData().getCode(); + if (!DicDataEnum.DEV_CLD.getCode().equals(devType)){ + DictTreeVO dictTreeVO = dictTreeFeignClient.queryByCode(devType).getData(); + code = dictTreeFeignClient.queryById(dictTreeVO.getPid()).getData().getCode(); + } else { + code = null; + } + //逻辑设备录入 if (CollectionUtil.isNotEmpty(dataSetList)){ dataSetList.forEach(item1->{ diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/service/impl/CsDeviceServiceImpl.java b/iot-access/access-boot/src/main/java/com/njcn/access/service/impl/CsDeviceServiceImpl.java index a7d9e0a..0641bcc 100644 --- a/iot-access/access-boot/src/main/java/com/njcn/access/service/impl/CsDeviceServiceImpl.java +++ b/iot-access/access-boot/src/main/java/com/njcn/access/service/impl/CsDeviceServiceImpl.java @@ -371,7 +371,7 @@ public class CsDeviceServiceImpl implements ICsDeviceService { } @Override -// @Transactional(rollbackFor = Exception.class) + @Transactional(rollbackFor = Exception.class) public String wlDevRegister(String nDid) { String result = "fail"; // 设备状态判断 @@ -404,7 +404,7 @@ public class CsDeviceServiceImpl implements ICsDeviceService { Thread.sleep(2000); List modelList = channelObjectUtil.objectToList(redisUtil.getObjectByKey(AppRedisKey.MODEL + nDid),CsModelDto.class); if (CollUtil.isEmpty(modelList)) { - throwExceptionAndLog(AccessResponseEnum.MODEL_ERROR, logDto); + throwExceptionAndLog(nDid,AccessResponseEnum.MODEL_ERROR, logDto); } List list = csDataSetService.getDataSetData(modelList.get(0).getModelId()); list.forEach(item->{ @@ -459,6 +459,7 @@ public class CsDeviceServiceImpl implements ICsDeviceService { logDto.setResult(0); logDto.setFailReason(e.getMessage()); csLogsFeignClient.addUserLog(logDto); + resetFactory(nDid); throw new BusinessException(AccessResponseEnum.ACCESS_ERROR); } return result; @@ -478,18 +479,18 @@ public class CsDeviceServiceImpl implements ICsDeviceService { DeviceLogDTO logDto = createLogDto("当前设备"+nDid+"状态判断"); CsEquipmentDeliveryVO csEquipmentDeliveryVO = csEquipmentDeliveryService.queryEquipmentBynDid(nDid); if (Objects.isNull(csEquipmentDeliveryVO.getNdid())) { - throwExceptionAndLog(AccessResponseEnum.NDID_NO_FIND, logDto); + throwExceptionAndLog(nDid,AccessResponseEnum.NDID_NO_FIND, logDto); } SysDicTreePO sysDicTreePo = dictTreeFeignClient.queryById(csEquipmentDeliveryVO.getDevType()).getData(); if (Objects.isNull(sysDicTreePo)) { - throwExceptionAndLog(AccessResponseEnum.DEV_NOT_FIND, logDto); + throwExceptionAndLog(nDid,AccessResponseEnum.DEV_NOT_FIND, logDto); } String code = sysDicTreePo.getCode(); if (!Objects.equals(code, DicDataEnum.PORTABLE.getCode())) { - throwExceptionAndLog(AccessResponseEnum.DEV_IS_NOT_PORTABLE, logDto); + throwExceptionAndLog(nDid,AccessResponseEnum.DEV_IS_NOT_PORTABLE, logDto); } if (!mqttUtil.judgeClientOnline("NJCN-" + nDid.substring(nDid.length() - 6))) { - throwExceptionAndLog(AccessResponseEnum.MISSING_CLIENT, logDto); + throwExceptionAndLog(nDid,AccessResponseEnum.MISSING_CLIENT, logDto); } } @@ -503,7 +504,7 @@ public class CsDeviceServiceImpl implements ICsDeviceService { CsEquipmentDeliveryVO csEquipmentDeliveryVO = csEquipmentDeliveryService.queryEquipmentBynDid(nDid); SysDicTreePO dictData = dictTreeFeignClient.queryById(csEquipmentDeliveryVO.getDevModel()).getData(); if (Objects.isNull(dictData)) { - throwExceptionAndLog(AccessResponseEnum.DEV_MODEL_NOT_FIND, logDto); + throwExceptionAndLog(nDid,AccessResponseEnum.DEV_MODEL_NOT_FIND, logDto); } String devModel = dictData.getCode(); zhiLianRegister(nDid,devModel); @@ -518,10 +519,11 @@ public class CsDeviceServiceImpl implements ICsDeviceService { return logDto; } - private void throwExceptionAndLog(AccessResponseEnum responseEnum, DeviceLogDTO logDto) { + private void throwExceptionAndLog(String nDid,AccessResponseEnum responseEnum, DeviceLogDTO logDto) { logDto.setResult(0); logDto.setFailReason(responseEnum.getMessage()); csLogsFeignClient.addUserLog(logDto); + resetFactory(nDid); throw new BusinessException(responseEnum); } diff --git a/iot-access/access-boot/src/test/java/com/njcn/AppTest.java b/iot-access/access-boot/src/test/java/com/njcn/AppTest.java index a0d959b..3921ae8 100644 --- a/iot-access/access-boot/src/test/java/com/njcn/AppTest.java +++ b/iot-access/access-boot/src/test/java/com/njcn/AppTest.java @@ -1,49 +1,37 @@ package com.njcn; -import static org.junit.Assert.assertTrue; - -import cn.hutool.core.util.IdUtil; -import com.alibaba.nacos.shaded.com.google.common.reflect.TypeToken; -import com.alibaba.nacos.shaded.com.google.gson.Gson; +import cn.hutool.core.collection.CollUtil; import com.github.tocrhz.mqtt.publisher.MqttPublisher; -import com.graphbuilder.math.func.EFunction; import com.njcn.access.AccessBootApplication; import com.njcn.access.enums.AccessEnum; -import com.njcn.access.enums.TypeEnum; -import com.njcn.access.pojo.dto.ReqAndResDto; -import com.njcn.access.pojo.dto.mqtt.MqttClientDto; import com.njcn.access.service.ICsEquipmentDeliveryService; +import com.njcn.access.service.ICsTopicService; import com.njcn.access.service.impl.CsDeviceServiceImpl; import com.njcn.access.utils.MqttUtil; import com.njcn.common.pojo.enums.response.CommonResponseEnum; import com.njcn.common.pojo.exception.BusinessException; -import com.njcn.common.utils.PubUtils; -import com.njcn.csdevice.pojo.po.CsLinePO; +import com.njcn.csdevice.pojo.po.CsEquipmentDeliveryPO; import com.njcn.oss.utils.FileStorageUtil; +import com.njcn.redis.pojo.enums.AppRedisKey; import com.njcn.redis.utils.RedisUtil; -import io.lettuce.core.protocol.CompleteableCommand; +import com.njcn.system.api.DictTreeFeignClient; +import com.njcn.system.enums.DicDataEnum; +import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; -import okhttp3.Credentials; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; +import org.eclipse.paho.client.mqttv3.*; +import org.junit.After; import org.junit.Test; import org.junit.runner.RunWith; +import org.springframework.boot.ApplicationArguments; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.web.WebAppConfiguration; import javax.annotation.Resource; -import java.io.BufferedReader; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.lang.reflect.Array; -import java.nio.charset.StandardCharsets; import java.util.*; import java.util.concurrent.*; -import java.util.stream.Collectors; -import java.util.zip.CRC32; + +import static org.junit.Assert.assertTrue; /** * Unit test for simple App. @@ -81,72 +69,410 @@ public class AppTest private MqttUtil mqttUtil; @Test - public void lossTest() { - final int[] mid = {2}; - for (int i = 0; i < 2; i++) { - mid[0] = mid[0] + 1; + public void deleteRedis() { + redisUtil.deleteKeysByString("devModelKey:00B78DA800B011avg"); + } + ScheduledFuture runnableFuture = null; + @Resource + private ICsTopicService csTopicService; + ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + ExecutorService executor = Executors.newFixedThreadPool(10); + private static final long ACCESS_TIME = 20L; + + @Resource + private DictTreeFeignClient dictTreeFeignClient; + + /** + * 测试下载文件 + */ + @Test + public void run1() { + ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + Runnable task = () -> { + System.out.println("轮询定时任务执行中!"); + }; + scheduler.scheduleAtFixedRate(task, 0, 1, TimeUnit.SECONDS); + } + + + @Test + public void run() { + Runnable task = () -> { + log.info("轮询定时任务执行中!"); + + CsEquipmentDeliveryPO po = new CsEquipmentDeliveryPO(); + po.setNdid("00B78DA80103"); + po.setDevType("8b45cf6b7f5266e777d07c166ad5fa77"); + po.setStatus(2); + List list = Collections.singletonList(po); + + if (CollUtil.isNotEmpty(list)) { + ExecutorService executor = Executors.newFixedThreadPool(10); + // 将任务平均分配给10个子列表 + List> subLists = new ArrayList<>(); + int partitionSize = list.size() / 10; + for (int i = 0; i < 10; i++) { + int start = i * partitionSize; + int end = (i == 9) ? list.size() : start + partitionSize; + subLists.add(list.subList(start, end)); + } + // 创建一个ExecutorService来处理这些任务 + List> futures = new ArrayList<>(); + // 提交任务给线程池执行 + for (int i = 0; i < 10; i++) { + int index = i; + futures.add(executor.submit(new Callable() { + @Override + public Void call() { +// accessDev(subLists.get(index)); + System.out.println("123"); + return null; + } + })); + } + // 等待所有任务完成 + for (Future future : futures) { + try { + future.get(); + } catch (InterruptedException | ExecutionException e) { + throw new RuntimeException(e); + } + } + // 关闭ExecutorService + executor.shutdown(); + } + }; + //第一次执行的时间为120s,然后每隔120s执行一次 + scheduler.scheduleAtFixedRate(task,0,20,TimeUnit.SECONDS); + } + + public void accessDev(List list) { + if (CollUtil.isNotEmpty(list)) { + list.forEach(item->{ + System.out.println(Thread.currentThread().getName() + ": auto : nDid : " + item.getNdid()); + //判断设备类型 便携式设备需要特殊处理 未注册的要先注册、再接入;已注册的直接重新接入 + String code = dictTreeFeignClient.queryById(item.getDevType()).getData().getCode(); + if (Objects.equals(code, DicDataEnum.PORTABLE.getCode()) && Objects.equals(item.getStatus(),1)) { + //csDeviceService.wlDevRegister(item.getNdid()); + log.info("请先手动注册、接入"); + } else { + String version = csTopicService.getVersion(item.getNdid()); + if (Objects.isNull(version)) { + version = "V1"; + } + csDeviceService.devAccessAskTemplate(item.getNdid(),version,1); + } + redisUtil.saveByKey(AppRedisKey.DEVICE_MID + item.getNdid(),1); + }); } - System.out.println("mid==:" + mid[0]); - } - - @Test - public void test1() { - String clientName = "NJCN-A801C8"; - boolean mqttClient = mqttUtil.judgeClientOnline(clientName); - System.out.println("mqttClient==:" + mqttClient); } - @Test - public void test() { -// ReqAndResDto reqAndResParam = new ReqAndResDto(); -// reqAndResParam.setMid(1); -// reqAndResParam.setDid(0); -// reqAndResParam.setPri(AccessEnum.FIRST_CHANNEL.getCode()); -// reqAndResParam.setType(4866); -// publisher.send("/Dev/Data1/V1/123", new Gson().toJson(reqAndResParam),1,false); -// String key = String.valueOf(IdUtil.getSnowflake().nextId()); -// System.out.println("key==:" + key); - -// List csLinePoList = new ArrayList<>(); -// CsLinePO po1 = new CsLinePO(); -// po1.setPosition("1"); -// CsLinePO po2= new CsLinePO(); -// po2.setPosition("2"); -// CsLinePO po3= new CsLinePO(); -// po3.setPosition("3"); -// CsLinePO po4= new CsLinePO(); -// po4.setPosition("1"); +// @Test +// public void lossTest() { +// final int[] mid = {2}; +// for (int i = 0; i < 2; i++) { +// mid[0] = mid[0] + 1; +// } +// System.out.println("mid==:" + mid[0]); +// } // -// csLinePoList.add(po1); -// csLinePoList.add(po2); -// csLinePoList.add(po3); -// csLinePoList.add(po4); -// List l = csLinePoList.stream().map(CsLinePO::getPosition).collect(Collectors.toList()); -// System.out.println("l===:" + l); -// List lineList = l.stream().filter(e-> Collections.frequency(l,e) > 1).distinct().collect(Collectors.toList()); -// System.out.println("lineList==:" + lineList); +// @Test +// public void test1() { +// String clientName = "NJCN-016AB3"; +// boolean mqttClient = mqttUtil.judgeClientOnline(clientName); +// System.out.println("mqttClient==:" + mqttClient); +// } +// +// @Test +// public void testAutoAccess() { +// List list = new ArrayList<>(); +// //项目启动60s后发起自动接入 +// Runnable task = () -> { +// long time1 = System.currentTimeMillis(); +// List list1 = csEquipmentDeliveryService.getAll(); +// for (int i = 0; i < 100; i++) { +// list.addAll(list1); +// } +// if (CollUtil.isNotEmpty(list)) { +// // 将任务平均分配给10个子列表 +// List> subLists = new ArrayList<>(); +// int partitionSize = list.size() / 10; +// for (int i = 0; i < 10; i++) { +// int start = i * partitionSize; +// int end = (i == 9) ? list.size() : start + partitionSize; +// subLists.add(list.subList(start, end)); +// } +// +// // 创建一个ExecutorService来处理这些任务 +// List> futures = new ArrayList<>(); +// // 提交任务给线程池执行 +// for (int i = 0; i < 10; i++) { +// int index = i; +// futures.add(executor.submit(new Callable() { +// @Override +// public Void call() throws Exception { +// accessDev(subLists.get(index)); +// return null; +// } +// })); +// } +// // 等待所有任务完成 +// for (Future future : futures) { +// try { +// future.get(); +// } catch (InterruptedException | ExecutionException e) { +// throw new RuntimeException(e); +// } +// } +// // 关闭ExecutorService +// executor.shutdown(); +// scheduler.shutdown(); +// } +// long time2 = System.currentTimeMillis(); +// System.out.println("执行时间==:" + (time2 - time1)); +// }; +// scheduler.schedule(task, ACCESS_TIME, TimeUnit.SECONDS); +// } -// String text = "TkosUFEsMTk5OQ0KNiw2QSwwRA0KMSxBz+C159G5LEEstefRuSxWLDAuMDYyMjU2LDAuMDAwMDAwLDAuMDAwMDAwLC0zMjc2NywzMjc2NywzODAsMzgwLFMNCjIsQs/gtefRuSxCLLXn0bksViwwLjA2MjI1NiwwLjAwMDAwMCwwLjAwMDAwMCwtMzI3NjcsMzI3NjcsMzgwLDM4MCxTDQozLEPP4LXn0bksQyy159G5LFYsMC4wNjIyNTYsMC4wMDAwMDAsMC4wMDAwMDAsLTMyNzY3LDMyNzY3LDM4MCwzODAsUw0KNCxBz+C158H3LEEstefB9yxBLDAuMDE1MjU5LDAuMDAwMDAwLDAuMDAwMDAwLC0zMjc2NywzMjc2NywyMDAsNSxTDQo1LELP4LXnwfcsQiy158H3LEEsMC4wMTUyNTksMC4wMDAwMDAsMC4wMDAwMDAsLTMyNzY3LDMyNzY3LDIwMCw1LFMNCjYsQ8/gtefB9yxDLLXnwfcsQSwwLjAxNTI1OSwwLjAwMDAwMCwwLjAwMDAwMCwtMzI3NjcsMzI3NjcsMjAwLDUsUw0KNTANCjENCjEyODAwLDcxNjgNCjA1LzA5LzIwMjMsMTU6NTQ6MDIuMTM2MDAwDQowNS8wOS8yMDIzLDE1OjU0OjAyLjIzNjAwMA0KQklOQVJZDQoxDQo="; -// byte[] byteArray = Base64.getDecoder().decode(text); -// InputStream inputStream = new ByteArrayInputStream(byteArray); -// fileStorageUtil.uploadStreamSpecifyName(inputStream, "configuration/","xuyang.cfg"); +// public void accessDev(List list) { +// list.forEach(item->{ +// try { +// System.out.println(Thread.currentThread().getName() + ": processing data " + item.getNdid()); +// Thread.sleep(2000); +// String version = csTopicService.getVersion(item.getNdid()); +// if (!Objects.isNull(version)){ +// csDeviceService.devAccessAskTemplate(item.getNdid(),version,1); +// redisUtil.saveByKey(AppRedisKey.DEVICE_MID + item.getNdid(),1); +// } +// } catch (InterruptedException e) { +// throw new RuntimeException(e); +// } +// }); +// } + +// @Test +// @After +// public void test() { +// String nDid = "00B78D016AB5"; +// String version = "V1"; // try { -// inputStream.close(); -// } catch (IOException e) { +//// //装置没有心跳,则立马发起接入请求 +//// csDeviceService.devAccessAskTemplate(nDid,version,1); +//// log.info("装置掉线3分钟发送接入请求"); +//// Integer status = csEquipmentDeliveryService.queryEquipmentBynDid(nDid).getRunStatus(); +//// if (Objects.equals(status,AccessEnum.ONLINE.getCode())){ +//// throw new BusinessException(CommonResponseEnum.SUCCESS); +//// } +//// //心跳断连立马发起接入失败后,1分钟再次发起请求,请求3次 +//// for (int i = 2; i < 5; i++) { +//// //接入再次失败,则定时发起接入请求 +//// Thread.sleep(1000 * 6); +//// csDeviceService.devAccessAskTemplate(nDid,version,i); +//// status = csEquipmentDeliveryService.queryEquipmentBynDid(nDid).getRunStatus(); +//// if (Objects.equals(status,AccessEnum.ONLINE.getCode())){ +//// break; +//// } +//// log.info("装置定时1分钟发送接入请求,第" + i + "次尝试"); +//// } +// Integer status = csEquipmentDeliveryService.queryEquipmentBynDid(nDid).getRunStatus(); +// if (!Objects.isNull(status) && Objects.equals(status,AccessEnum.OFFLINE.getCode())){ +// final int[] mid = {5}; +// runnableFuture = executor.scheduleAtFixedRate(() -> { +// csDeviceService.devAccessAskTemplate(nDid,version, mid[0]); +// Integer status2 = csEquipmentDeliveryService.queryEquipmentBynDid(nDid).getRunStatus(); +// if (Objects.equals(status2,AccessEnum.ONLINE.getCode())){ +// runnableFuture.cancel(false); +// } else { +// mid[0] = mid[0] + 1; +// } +// //记录日志 +// log.info("装置掉线,定时10分钟发送接入请求,装置为:" + nDid + ",请求的时间戳为:" + System.currentTimeMillis()); +// }, 1, 1, TimeUnit.SECONDS); +// } +// } catch (Exception e) { // e.printStackTrace(); // } +// } + + +// @Test +// @After +// public void test2() { +// String nDid = "00B78D016AB5"; +// String version = "V1"; +// try { +// //装置没有心跳,则立马发起接入请求 +// csDeviceService.devAccessAskTemplate(nDid,version,1); +// log.info("装置掉线3分钟发送接入请求"); +// Integer status = csEquipmentDeliveryService.queryEquipmentBynDid(nDid).getRunStatus(); +// if (Objects.equals(status,AccessEnum.ONLINE.getCode())){ +// throw new BusinessException(CommonResponseEnum.SUCCESS); +// } +// //心跳断连立马发起接入失败后,1分钟再次发起请求,请求3次 +// for (int i = 2; i < 5; i++) { +// //接入再次失败,则定时发起接入请求 +// Thread.sleep(1000 * 6); +// csDeviceService.devAccessAskTemplate(nDid,version,i); +// status = csEquipmentDeliveryService.queryEquipmentBynDid(nDid).getRunStatus(); +// if (Objects.equals(status,AccessEnum.ONLINE.getCode())){ +// break; +// } +// log.info("装置定时1分钟发送接入请求,第" + i + "次尝试"); +// } +// if (!Objects.isNull(status) && Objects.equals(status,AccessEnum.OFFLINE.getCode())){ +// final int[] mid = {5}; +// ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1); +// runnableFuture = executor.scheduleAtFixedRate(() -> { +// csDeviceService.devAccessAskTemplate(nDid,version, mid[0]); +// Integer status2 = csEquipmentDeliveryService.queryEquipmentBynDid(nDid).getRunStatus(); +// if (Objects.equals(status2,AccessEnum.ONLINE.getCode())){ +// runnableFuture.cancel(true); +// } else { +// mid[0] = mid[0] + 1; +// } +// //记录日志 +// log.info("装置掉线,定时10分钟发送接入请求,装置为:" + nDid + ",请求的时间戳为:" + System.currentTimeMillis()); +// }, 1, 1, TimeUnit.SECONDS); +// } +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } +// +// @Test +// @After +// public void testDeviceAccess() { +// String nDid = "00B78D016AB5"; +// String version = "V1"; +// try { +// // 初次接入请求 +// initiateDeviceAccess(nDid, version, 1); +// // 检查设备状态 +// Integer status = checkDeviceStatus(nDid); +// if (status != null && Objects.equals(status, AccessEnum.ONLINE.getCode())) { +// throw new BusinessException(CommonResponseEnum.SUCCESS); +// } +// // 重试接入请求,最多尝试3次 +// attemptReconnect(nDid, version); +// // 如果设备仍然离线,开始定时任务发起接入请求 +// if (status != null && Objects.equals(status, AccessEnum.OFFLINE.getCode())) { +// startScheduledReconnection(nDid, version); +// } +// } catch (Exception e) { +// log.error("Device access error", e); +// } +// } +// +// private static final String BROKER_URL = "tcp://192.168.1.27:1885"; +// private static final String CLIENT_ID = "JavaAsyncPublisher"; +// private static final int QOS = 1; // Quality of Service +// private static final int NUM_DEVICES = 10; +// private static final String TOPIC_PREFIX = "/Dev/Data/V1/"; +// private static final int DEV_NUMS = 20; +// +// @Test +// public void test11() { +// MqttClient client = null; +// ExecutorService executor = Executors.newFixedThreadPool(NUM_DEVICES); +// +// try { +// client = new MqttClient(BROKER_URL, CLIENT_ID); +// MqttConnectOptions options = new MqttConnectOptions(); +// options.setCleanSession(true); +// client.connect(options); +// +// client.setCallback(new MqttCallback() { +// @Override +// public void connectionLost(Throwable cause) { +// // Handle connection loss +// } +// +// @Override +// public void messageArrived(String topic, MqttMessage message) throws Exception { +// // Handle incoming messages (not used in this example) +// } +// +// @Override +// public void deliveryComplete(IMqttDeliveryToken token) { +// // Handle delivery completion +// System.out.println("Message delivery completed for token: " + token.isComplete()); +// } +// }); +// +// // Submit tasks to the executor service to send messages to each device +// for (int i = 1; i <= DEV_NUMS; i++) { +// final String deviceId = "00B78DA8000" + i; +// MqttClient finalClient = client; +// executor.submit(() -> { +// try { +// String topic = TOPIC_PREFIX + deviceId; +// String payload = "Message for device " + deviceId; +// MqttMessage message = new MqttMessage(payload.getBytes()); +// message.setQos(QOS); +// finalClient.publish(topic, message); +// System.out.println("Sent message to topic: " + topic + " Message: " + payload); +// } catch (MqttException e) { +// e.printStackTrace(); +// } +// }); +// } +// } catch (MqttException e) { +// e.printStackTrace(); +// } finally { +// if (client != null && client.isConnected()) { +// try { +// client.disconnect(); +// } catch (MqttException e) { +// e.printStackTrace(); +// } +// } +// } +// } +// +// private void initiateDeviceAccess(String nDid, String version, int attempt) { +// csDeviceService.devAccessAskTemplate(nDid, version, attempt); +// log.info("装置掉线3分钟发送接入请求"); +// } +// +// private Integer checkDeviceStatus(String nDid) { +// return csEquipmentDeliveryService.queryEquipmentBynDid(nDid).getRunStatus(); +// } +// +// private void attemptReconnect(String nDid, String version) throws InterruptedException { +// for (int i = 2; i < 5; i++) { +// Thread.sleep(1000 * 6); // 每 6 秒重试一次 +// initiateDeviceAccess(nDid, version, i); +// +// Integer status = checkDeviceStatus(nDid); +// if (status != null && Objects.equals(status, AccessEnum.ONLINE.getCode())) { +// break; +// } +// log.info("装置定时1分钟发送接入请求,第" + i + "次尝试"); +// } +// } +// +// private void startScheduledReconnection(String nDid, String version) { +// final int[] attemptCounter = {5}; +// ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1); +// +// Runnable reconnectTask = () -> { +// initiateDeviceAccess(nDid, version, attemptCounter[0]); +// +// Integer status = checkDeviceStatus(nDid); +// if (status != null && Objects.equals(status, AccessEnum.ONLINE.getCode())) { +// executor.shutdown(); // 关闭调度器 +// } else { +// attemptCounter[0]++; +// } +// log.info("装置掉线,定时10分钟发送接入请求,装置为:" + nDid +// + ",请求的时间戳为:" + System.currentTimeMillis()); +// }; +// +// executor.scheduleAtFixedRate(reconnectTask, 1, 1, TimeUnit.SECONDS); +// } - // 要计算CRC32的数据 - String data = "Hello, World!"; - CRC32 crc32 = new CRC32(); - crc32.update(data.getBytes()); - long crc32Value = crc32.getValue(); - // 将CRC32校验值转换为16进制字符串 - String crc32Str = String.format("%08X", crc32Value); - System.out.println("CRC32校验值为: " + crc32Str); - } } diff --git a/iot-access/access-boot/src/test/java/com/njcn/Test.java b/iot-access/access-boot/src/test/java/com/njcn/Test.java new file mode 100644 index 0000000..58f8a8e --- /dev/null +++ b/iot-access/access-boot/src/test/java/com/njcn/Test.java @@ -0,0 +1,191 @@ +package com.njcn; + +import cn.hutool.core.collection.CollUtil; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.njcn.access.pojo.dto.AutoDataDto; +import com.njcn.common.utils.PubUtils; +import com.njcn.csdevice.pojo.po.CsEquipmentDeliveryPO; +import org.eclipse.paho.client.mqttv3.MqttClient; +import org.eclipse.paho.client.mqttv3.MqttConnectOptions; +import org.eclipse.paho.client.mqttv3.MqttException; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; + +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Base64; +import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +public class Test { + private static final String BROKER_URL = "tcp://192.168.1.27:1885"; + private static final String USERNAME = "t_user"; + private static final String PASSWORD = "njcnpqs"; + private static final Integer POOL = 10; + private static final Integer numberOfDevices = 50; + + + public static void main(String[] args) { +// String data = "AAA0OgAAbDoAAAY7AABDOwAAMDoAAGg7AAD/OwAAZTwAII48AACguAAAoLgAAKC4Vg5JQFYOSUBWDklAAAAAAAAASEIAgLs9AIC7PQAAwDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkDkAAJg5AACYOQAAmDkAAJA5AACYOQAAmDkAAJA5AACYOQAAkDkAAJA5AACQOQAAkDkAAJg5AACYOQAAmDkAAMg5AACQOQAAmDkAAJA5AACYOQAAmDkAAJg5AACQOQAAkDkAAJg5AACYOQAAmDkAAJg5AACYOQAAmDkAAJA5AACQOQAAkDkAAJA5AACQOQAAkDkAAJg5AACYOQAAmDkAAJA5AACYOQAAmDkAAJA5AACgOQAAkDkAAJg5AACQOQAAkDkAAJA5AACQOQAAkDkAAKA5AACQOQAAmDkAAJg5AACQOQAAkDkAAJA5AACQOQAAkDkAAJg5AACQOQAAmDkAAJA5AADAOQAAkDkAAJA5AACQOQAAkDkAAJA5AACQOQAAkDkAAJA5AACQOQAAmDkAAJg5AACQOQAAkDkAAJg5AACQOQAAkDkAAJA5AACQOQAAmDkAAJg5AACYOQAAkDkAAJA5AACYOQAAmDkAAJA5AACQOQAAmDkAAJg5AACYOQAAmDkAAJA5AACQOQAAkDkAAJg5AAC4OQAAkDkAAJA5AACQOQAAmDkAAJA5AACQOQAAkDkAAJA5AACQOQAAkDkAAJg5AACQOQAA4DkAAJA5AACQOQAAkDkAAJg5AACQOQAAkDkAAJg5AACQOQAAkDkAAJg5AACQOQAAmDkAAIg5AACYOQAAkDkAAJA5AACYOQAAmDkAAJA5AACQOQAAkDkAAJg5AACQOQAAkDkAAJA5AACQOQAAkDkAAJg5AACYOQAAkDkAAJg5AACQOQAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAIA3AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQAAAkDkAAIg5AACIOQAAgDkAAIg5AACAOQAAkDkAAJA5AACQOQAAiDkAAJA5AACIOQAAiDkAAIA5AACIOQAAiDkAAIA5AACIOQAAiDkAAIg5AACIOQAAmDkAAIA5AACIOQAAcDkAAJA5AACIOQAAiDkAAIg5AACQOQAAiDkAAIA5AACQOQAAiDkAAJA5AACIOQAAiDkAAJA5AACIOQAA2DkAAIg5AACIOQAAiDkAAIg5AACAOQAAiDkAAJA5AACAOQAAiDkAAIg5AACIOQAAgDkAAIg5AACIOQAAgDkAAIg5AACQOQAAgDkAAIA5AACAOQAAgDkAAIA5AACAOQAAgDkAAIA5AACQOQAAgDkAAIg5AACAOQAAiDkAAIA5AACQOQAAiDkAAIg5AACAOQAAgDkAAIA5AACIOQAAiDkAAJA5AACAOQAAiDkAAIg5AACAOQAAgDkAAIA5AACAOQAAgDkAAIA5AADgOQAAiDkAAIA5AACAOQAAkDkAAIg5AACIOQAAkDkAAIg5AACAOQAAiDkAAJA5AACIOQAAgDkAAJA5AACIOQAAiDkAAIg5AACIOQAAiDkAAIA5AACQOQAAiDkAAIA5AACAOQAAgDkAAIg5AACIOQAAkDkAAJA5AACIOQAAgDkAAKA5AACAOQAAiDkAAIA5AACAOQAAgDkAAJA5AACQOQAAkDkAAIg5AACAOQAAgDkAAIA5AACIOQAAkDkAAIA5AACIOQAAgDkAAAQ6AACIOQAAiDkAAIg5AACQOQAAiDkAAIg5AACIOQAAiDkAAIA5AACAOQAAADgAAIA3AACANwAAgDcAAIA3AACANwAAgDcAAIA3AACANwAAgDcAAIA3AACANwAAgDcAAIA3AACANwAAgDcAAIA3AACANwAAgDcAAIA3AACANwAAADgAAIA3AACANwAAgDcAAIA3AACANwAAgDcAAIA3AACANwAAgDcAAIA3AACANwAAgDcAAIA3AACANwAAgDcAAAA4AACANwAAADkAAIA3AAAAOAAAgDcAAIA3AACANwAAgDcAAIA3AACANwAAgDcAAIA3AAAAOAAAgDcAAIA3AACANwAAgDcAAIA3AACANwAAgDcAAIA3AACANwAAgDcAAIA3AACANwAAgDcAAIA3AAAAOAAAgDcAAIA3AACANwAAgDcAAAA4AAAAOAAAgDcAAIA3AACANwAAgDcAAIA3AACANwAAgDcAAIA3AACANwAAgDcAAIA3AACANwAAgDcAAIA3AACANwAAADgAAIA3AAAAOQAAgDcAAAA4AACANwAAgDcAAIA3AACANwAAgDcAAIA3AACANwAAgDcAAAA4AACANwAAgDcAAIA3AACANwAAgDcAAIA3AACANwAAgDcAAIA3AACANwAAgDcAAIA3AACANwAAgDcAAIA3AACANwAAgDcAAIA3AACANwAAgDcAAIA3AACANwAAgDcAAIA3AACANwAAgDcAAIA3AACANwAAgDcAAIA3AACANwAAgDcAAIA3AACANwAAgDcAAIA3AAAAOAAAgDcAAAA5AACANwAAADgAAIA3AAAAOAAAgDcAAIA3AACANwAAgDcAAIA3AACAN1YOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFYOSUBWDklAVg5JQAAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AAAAAAAAAAAAAAAAVg5JQFYOSUBWDklAAAAAAAAAAAAAAAAAVg5JQFYOSUBWDklAAAAAAAAAAAAAAAAAVg5JQFYOSUBWDklA"; + String data = "qANoQhQPaEL0IWhCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVg5JQFYOSUBWDklAABjuPgAK+D4ALwQ/AIB3PJgPSEJRmGJHANYDQQBAIjwAAAAAAAAAAAAAAAAAAAAAAAAAAFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIuT0AyLo9AACCOgAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIi5PQCIuj0AAGQ6AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkLk9AKC6PQAAeDoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQFYOSUBWDklAVg5JQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArXIz3NzAw/CtejPMP1KD8K16M8CtejPQrXozzhehQ/CtejPM3MTD4K1yM8exSuPgrXIzzhepQ+j8L1PLgeBT+PwvU8pHC9Po/C9TwK1yM/j8L1POF6FD8K16M87FE4PgrXozwfhWs+CtejPMP1qD4K1yM8CtcjPgrXIzwpXA8+AAAAAOxROD4AAAAAj8J1PQAAAACPwnU9AAAAAArXoz0AAAAACtejPAAAAACPwvU8AAAAAArXIz0AAAAACtcjPQAAAAAK1yM9zcwMPwrXozzD9Sg/CtejPArXoz0K16M84XoUPwrXozzNzEw+CtcjPHsUrj4K1yM84XqUPo/C9Ty4HgU/j8L1PKRwvT6PwvU8CtcjP4/C9TzhehQ/CtejPOxROD4K16M8H4VrPgrXozzD9ag+CtcjPArXIz4K1yM8KVwPPgAAAADsUTg+AAAAAI/CdT0AAAAAj8J1PQAAAAAK16M9AAAAAArXozwAAAAAj8L1PAAAAAAK1yM9AAAAAArXIz0AAAAACtcjPc3MDD8K16M8w/UoPwrXozwK16M9CtejPOF6FD8K16M8zcxMPgrXIzx7FK4+CtcjPOF6lD6PwvU8uB4FP4/C9TykcL0+j8L1PArXIz+PwvU84XoUPwrXozzsUTg+CtejPB+Faz4K16M8w/WoPgrXIzwK1yM+CtcjPClcDz4AAAAA7FE4PgAAAACPwnU9AAAAAI/CdT0AAAAACtejPQAAAAAK16M8AAAAAI/C9TwAAAAACtcjPQAAAAAK1yM9AAAAAFYOSUBWDklAVg5JQAAAAAAAAAAAAAAAAD0K1z89Ctc/PQrXPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVg5JQFYOSUBWDklAUI1XP8l2Xj+q8VI/Vg5JQFYOSUBWDklAmpkZPrx0Ez4rhxY+Vg5JQFYOSUBWDklAK4cWPphuEj7hehQ+"; + List floats = PubUtils.byteArrayToFloatList(Base64.getDecoder().decode(data)); + System.out.println(floats); + System.out.println(floats.size()); + + } + + + public static void test(long time) { + ExecutorService executorService = Executors.newFixedThreadPool(POOL); + + AutoDataDto dataDto = new AutoDataDto(); + dataDto.setMid(-1); + dataDto.setDid(1); + dataDto.setPri(1); + dataDto.setType(4866); + + AutoDataDto.Msg msg = new AutoDataDto.Msg(); + msg.setClDid(1); + msg.setDataType(0); + msg.setDataAttr(2); + msg.setDsNameIdx(11); + + List dataArrays = new ArrayList<>(); + AutoDataDto.DataArray dataArray1 = new AutoDataDto.DataArray(); + dataArray1.setDataAttr(1); + dataArray1.setDataTimeSec(time); + dataArray1.setDataTimeUSec(0); + dataArray1.setDataTag(1); + dataArray1.setData("AABIQgAAAAAl3Zo8casTPGgX2Dyi/ks8gUGhPJ+lMDyYH5U7c6iEO/xJgjsAAAAAAAAAAAAAAACTyeY89F71PMDV1Dy8bUg6w7ZLOn74UDoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2XyI7rFcTO91bHjsAAAAAAAAAABmPPzhlmTU4RPglOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgSw0OcQ4Mjkhky05MoHZNyA55DdTvvU30vNBOTSBQDmlwzo5hm9WNhw58zViaxA2AAAAAAAAAAAAAAAAhm9WNhw58zViaxA2AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/2R/9OZDhijj76gg6AACAPwAAgD8AAIA/bt77OZDhijjGVgg69+1JNmq8+zW9XIg2C8LaNcueBTZu7Ow1U2GINiwA6jW3RxM2wTfgNeO7lzbrHxc2tkcTNhrTATaCGpo2sYDiNVDSPjaKScA1tul+Niq5HzYhmlI2FFAyNq0C6jepOIA2rDRoNi8X+DX4q5I2PernNcOiMjaJexM2+VicNyZQ/TVNDjo2dweHNmlvDzcHJA428UE/Npvd9jX58ok2fFEFNk/qHDbP19k191KTNjbzADYH4Sg2hOcvNr9VlDfb0m02gEMgNgQMWzaCPdM1RIl+NjFMvDXQgx82vLwSNhYJlzaC9fI1cX0XNknv7DW9PYo2DWk7Np2bLzYPsA02RJ5/NusE1TWG6i42TPUCNgyugDb/Lfw1rPRZNhx8GTbDVMw3jqZ2Nl4rSza7zBA23C9eNmY73jU93zA2di96NmSllDf0rP411fJTNpXzczYKWxE3y4UINjzoMDag/981IrKMNrxm7jX0PiI2pgTRNZZZhDZh/vU1/YALNuoaLDZhRJE38IBeNpNyJzbh6Tc2y1nhNc+JizYFueg1jbYNNslSHTb5NIw2C1bzNV8WCzZ27cg1g1loNt3H9DW5mBA2SZj0NYHBgzbyJ9w1jUMTNuaq5zXCzXQ2fsP3Ne/VUDbKRyY2NafUN4gCXDaiwJU25UoeNq6JkTaemdc1UMNQNlz8TzYGF5Y34mv6NfwRPDYW2k42Qds0N2E9OTYu60M2navjNatlijZOIAY2MysoNth22zWQ7Z024n77NQm2BjbpEhg2fqKcN63lRjYXUUk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApA9zcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOs+g3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU771NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9+1JNmq8+zW9XIg2C8LaNcueBTZu7Ow1U2GINiwA6jW3RxM2wTfgNeO7lzbrHxc2tkcTNhrTATaCGpo2sYDiNVDSPjaKScA1tul+Niq5HzYhmlI2FFAyNgf5EDipOIA2rDRoNi8X+DX4q5I2PernNcOiMjaJexM2BLjONyZQ/TVNDjo2dweHNmlvDzcHJA428UE/Npvd9jX58ok2fFEFNk/qHDbP19k191KTNjbzADYH4Sg2hOcvNr9VlDfb0m02gEMgNgQMWzaCPdM1RIl+NjFMvDXQgx82vLwSNhYJlzaC9fI1cX0XNknv7DW9PYo2DWk7Np2bLzYPsA02RJ5/NusE1TWG6i42TPUCNgyugDb/Lfw1rPRZNhx8GTaTbx44jqZ2Nl4rSza7zBA23C9eNmY73jU93zA2di96NsKqvjf0rP411fJTNpXzczYKWxE3y4UINjzoMDag/981IrKMNrxm7jX0PiI2pgTRNZZZhDZh/vU1/YALNuoaLDZhRJE38IBeNpNyJzbh6Tc2y1nhNc+JizYFueg1jbYNNslSHTb5NIw2C1bzNV8WCzZ27cg1g1loNt3H9DW5mBA2SZj0NYHBgzbyJ9w1jUMTNuaq5zXCzXQ2fsP3Ne/VUDbKRyY2d1X5N4gCXDaiwJU25UoeNq6JkTaemdc1UMNQNlz8TzacLbk34mv6NfwRPDYW2k42Qds0N2E9OTYu60M2navjNatlijZOIAY2MysoNth22zWQ7Z024n77NQm2BjbpEhg2fqKcN63lRjYXUUk2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnn6KOujeHzruT586bNYVOvJmSzo4WyI6ECepOogQIjrP9zk6PbwVOhmskzpruS86wEpYOlcSLjqbe6o6q1c6Ovq8gToNnB06pTOeOgw7SDoon4I6NzlsOsSaBzz+95Q6NI6EOsdrPzrj+6o6ldwvOkW9YjqtZI86J9nmOz1oMTo28Hs6MPCgOgdxMjs9u1g6Rs18OsMqRjrobKc6GcczOot/UTrKABY60PCrOuULFToAlD06raNPOuo+mztxjGE60clgOlbljTqn9iI6x9WjOjmKCTqIlEk6JmwiOpFNrDpYEiQ6YNY8OhMrHzomfI86jjsnOrR5Uzpx2TI6R260OpY/Mzqk9Hw6WmEmOtk9nTqdfUk6Dhd+Ons6ezrwPQY8Qg+WOlruhTpFckk6IUOrOvW3LzpMM1o6twWNOkuM5Tt/UzE6QDeBOrq4njrBQjA7S25XOqnCgDoWrDQ6FCapOudEMTqs9006On0SOrdyqToQeSA6hL9FOp9iTDpR4Jk75F5oOlcTazpHb4w6x00bOjf5nzq87BA6rrtROl1rJDps4ag6DtcoOtpERzpPpxg6POSTOu8vNjoBjFc69eMwOrqbqDoKWDw6FkCGOtXaHjqN1KA6mp08Ok2EgzrZ5G46rQEHPMJbljritIc6Nlw9OlIhqjoCnC46gFNfOvfjkTrhTeY7HEczOh5KgjqSNqY6brouO5gzSjoW/oE6bj86OnzIqTrG0S862vpLOmeJEzqBqqc6KkIZOmcfPTp0dU86i6SbOwmTaTr4tmc6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJDIM0MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4L6kQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIcDNDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBypEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmCgzQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgoaVCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqN5uOoq6SjrkkEE696RHOp9LWDpp2VQ6ctZdOov5QjrZs0k6hOhAOkI3SzoMDFE6Hl1AOkKqPzr6ri86JWJDOsc0fzqjQkc6PtJtOk4kRTpKR046bI92OhvYpzqRXRk77ZAaO7cfmjoNE3k6HJhwOodWYTrLKWM65rdjOmwKszocLbM6m+GDOtyKYDppq306DUaPOkaeTTocKFY6FUZROvH0RzoicXg6PDdGOkmBVjowV0o6WItJOoFgcjokBaQ6VtKoOjivgTrA9GQ6ErRHOpeuQjqu+ks6YXReOtRDUTqn8V86rx05OvPmQzqg6jM6yU9FOuArWjoYjEA6pCJEOrP7OzpjWVY6bclvOqRvSDrLSlQ68HBROtynPzpEQ2o6iTStOsSnGzshYxg7Tg6ZOmOpcDpiQ2k6cIBlOkDjXjpYv2s6nsqsOiUYrDqbhYI6ZkFrOpR5gjrsopE6GVtPOqx3SzoY3Us6odZMOmN0ZzoGnEA6ySxYOueHUToK60k6fP95OmZurTro/po6nQiEOgkngDqeXEQ6EPFCOhjuQjqvv1g67KlVOoaxVzql/Eg6v1BLOrJyPDoQIUU6HEFXOvamPjr8zT463iY6OtcJRTogQnE6dIVMOqNOXTpg6EE6NpBBOicsZDq/4aU6iEYaO5R6Gzsfm5k6kSl3OiGaZzoMzWE69DNoOs6FZToaA646qimpOjszgjpRo2Y6Mk58OqAbjjo/OEs6YiZROloQSjqdg1I6XxdxOlx4OjqynFo6KMlWOiWRSjqEV3s6GT6sOjxnojq59oU6"); + + AutoDataDto.DataArray dataArray2 = new AutoDataDto.DataArray(); + dataArray2.setDataAttr(2); + dataArray2.setDataTimeSec(time); + dataArray2.setDataTimeUSec(0); + dataArray2.setDataTag(1); + dataArray2.setData("AABIQgAAAABJNJE8DW/6O65TzTwhqjA8TTuQPE07EDzckoY6DolVOteaFjoAAAAAAAAAAAAAAADy37s8jdjOPHGRqTwkedU4YkbSOO3FzDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD0lNY4n2z2N9MSEDgAAAAAAAAAAMgWoDXE6oU1X1VCNwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1XGcOF59mDjGy5s4e+gyuIlSI7guWyi41XGcOF59mDjGy5s447A5NJPbEjTOyhM0AAAAAAAAAAAAAAAA47A5NJPbEjTOyhM0AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/e11oOdZozLh7XWg5AACAPwAAgD8AAIA/AHNmOdZozLgAc2Y5Al6wM29MBjQmI1k0WgLbM7qCYTRWcik0WyXxMyp0UzTSNhQ0QeOmMw2TNjS62wg0h/z8M72fZDSwTHs0G1LBM+nMHDQLriM0p+k5NBnHEjQICY00SrcRNJFGELhvwnY0mB03NBJ96jP284M09pkLNOy+BTSmI2A0RDOsNW0BrzNwoAo0WHCSNGNhwDQxkzw0CjAUNC4+/zP0gbk07fogNGbVRDSLbrMzUkNpNFngCjTuEJE0Wfv0Mw26aDR8jq8zHT2TNPUexDMVYxs0Ub6bNEK/UzQh3sAzb3cONFOuODSTauszAXIwNLd4PzTo4UI03HgoNPqbGTR/DEs0FAhuNLyMkDMQuV40H88uNMR2BTSoFZ4zUDFnNIfMoDMebRG49TdoNJI2dzQ+Jd8zh3OYNFoupzPTjmQ0xQJAND2tiTWkeAg0rg9pNEDGojTNH4s0Lz88NAMoGjRMd/UzhF+DNGL8ITT+Dnw02AT2M+1DpTRVKwE0LWQ/NNmGWTTCuok0picFNOM7KDR34CQ01GdLNGMZmDReNAU0syiXM8ImjjMF5no0+hANNKA8ETSBjSw0NZpgNFR7QTSbrDM0388UNA9BQDQtx6EzLdc9NHQ3FDTVa180JNrQMx9McTSZd0A0T8jTtzpVZzRlKkA0xHkaNJtQyDT+7tczFssqNCPgpzOjHZU1UDr+MzD1MTSSiZQ0gqzwNOJigDQrdTo0gAu0M+AMbjSRRjk0eRsONNjwrjMpJG80zFwBND+gIjRfcQ80ujukNAvqZjRiP0s0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJo7ALgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhXGxtwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQSwS4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHi/srcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJ7NtwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADNtZq3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAl6wM29MBjQmI1k0WgLbM7qCYTRWcik0WyXxMyp0UzTSNhQ0QeOmMw2TNjS62wg0h/z8M72fZDSwTHs0G1LBM+nMHDQLriM0p+k5NBnHEjQICY00SrcRNIy4mjRvwnY0mB03NBJ96jP284M09pkLNOy+BTSmI2A08RnRNW0BrzNwoAo0WHCSNGNhwDQxkzw0CjAUNC4+/zP0gbk07fogNGbVRDSLbrMzUkNpNFngCjTuEJE0Wfv0Mw26aDR8jq8zHT2TNPUexDMVYxs0Ub6bNEK/UzQh3sAzb3cONFOuODSTauszAXIwNLd4PzTo4UI03HgoNPqbGTR/DEs0FAhuNLyMkDMQuV40H88uNMR2BTSoFZ4zUDFnNIfMoDOy6J009TdoNJI2dzQ+Jd8zh3OYNFoupzPTjmQ0xQJANF3Q8DWkeAg0rg9pNEDGojTNH4s0Lz88NAMoGjRMd/UzhF+DNGL8ITT+Dnw02AT2M+1DpTRVKwE0LWQ/NNmGWTTCuok0picFNOM7KDR34CQ01GdLNGMZmDReNAU0syiXM8ImjjMF5no0+hANNKA8ETSBjSw0NZpgNFR7QTSbrDM0388UNA9BQDQtx6EzLdc9NHQ3FDTVa180JNrQMx9McTSZd0A0dPhYNDpVZzRlKkA0xHkaNJtQyDT+7tczFssqNCPgpzNs8Lk1UDr+MzD1MTSSiZQ0gqzwNOJigDQrdTo0gAu0M+AMbjSRRjk0eRsONNjwrjMpJG80zFwBND+gIjRfcQ80ujukNAvqZjRiP0s0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgWWkOK2tpTiahyo5C5rXOOb/1Dgzvtc4kQXEOInb8Dg8qMM4z0HhOL3XBTlDrZ84pEy+OLWlADmbpFM5L6J6OApH1TjowwU5OBrcOGAZpjiaRww5YWkVOb9lIDnGCeQ4wvIMOVokxzi6UjI5w/EFOTHd0zjoOwA5DSGBOlHOeTgZNQs5WbZuOR6fQTkBp9g49OToOBRK4Dh/Zxw5maz+OElCEDmFVYU4sWjdOPLhuzhMxBI5jgqYOF80VTmGXMg41LHOOFPP1jh1mNo4EUEpOYmT2zhKpvE4lgTQOCNA2zjWVYc49aCuOC1S2jjktBI5lESxOEp8/zgXAvY4xjkmOTeKIjhR9AI5mS3EOFf4kDilk8M41fgJOUwb7jhZmQk5oJzdOM642zhz0884BkU4OYnv5zh/Jx45SU8QOaLshzrzl7s44KYMOXhLVzn4BT05TunOOEIl5ThPks44tHWzOPs7+zgCJOI4m5RWOJYNCjmSKNo4RgAJOToRrzgr2T05M97XOJnt1jhImus4YTOaOA3NOTnRKu842Y5IOISWszjyv804T8fOOJfGuTivuNU4Av0YOTbywzhUJ/04QengOKbnLjkmZRI4W5idOMuJ7TjqktY40dCUOJPeFTm0aP84vEr9OKzp3Tg4ZRU53PK3ODnzNjkMVcw4BukUOYMUDjmko4g6TtbAOFlMAjlYwms5Z1g8OaT/0jjAbcg4YYSxONuxGzl67t44R1AAOTCKpTgesuY4krdXODWOzTiuHMM4J7QaOUy91TgPnAM5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALiyMMMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgADHDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwFYxwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbosiOQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7NKDmOMzQ5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0gTM5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALRKKTkAAAAANXFEOQrvMzlx/iw5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbrUlOcW/KDkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUnjQ5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnNklOXA4JTnyaC45/u1AOYwPIjkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKgcITmIrzM5rtFNOQAAAAAAAAAAAAAAAHfBITkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4DIzkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJRnU56zw0OSbIYDmHwyo5"); + + AutoDataDto.DataArray dataArray3 = new AutoDataDto.DataArray(); + dataArray3.setDataAttr(3); + dataArray3.setDataTimeSec(time); + dataArray3.setDataTimeUSec(0); + dataArray3.setDataTag(1); + dataArray3.setData("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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALV71OUXdqDk0CCw6CLGiOXL2xTklQKs5T28/Ok27sDkKk8E5+eSoOdsfEzo6fbA5CfPUOZ6kuDmWoUA6iPWcOf5T4jl7DaU5nYUuOmoAuTlNvhE6Tm8DOtIN7Ts4CjU6U4IYOipMxTkfOkg6N2CpOf0A8DlIetA5o/GcO6t5uzk7qP45qeUeOiq59jo0mco5OeboOd5crjnMJUg6LImmOWAB3jkUhJ45eUVCOl79oTknS9I5S07iOZlafzuUTfY5cEXkORXV8zlYvKg5SvYpOjGZoTm4JMQ5//qrOXk5PzpAA645iuzAOYmApzlgdBI6S9KvOYZh0zn+sbc5R58+OiGbnDnhHuI5Z6ulORm9LDrOHLo58JMQOnTzAjrf5Oo75zA0OlWzFjpwQcU5WQZIOpFVqjkFPu45phTQOWRMnDukDLw59yD+OcOJHjpKCvQ6fonMOZaJ6Dkedq45PMZGOumHpjm6yNs5pFyfORf9QDrDraA5NvnSOWEL4zmF2X87GZT2OUOk5Dkcg/Y5/IOoOY7DKjqvMqQ5YefFOZGBrDlFX0E6reevOZFpwjk3s6k5up4TOn1SsTnPntQ5bpy5OeVKPzr/rJs5TMbjOTURpTmr0Cw6cLe4OSNYEjrD3wI6VVjrO73XNDp4YRc60k7GOcE4SjoSRas5U03xOWnE0TmaEJ07z5+6OXxW/zm4th86Mzb0OoCCzDmDHuo5682uOdQfRzpNnqg5TNLcOd5RnzlrGUE61YajOajN0zlmP+M55bKBO2/V+DkXl+U5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOjY274AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkRy2QQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADN+Bu/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE2Xr0EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY7KDvwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABlAbdBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF7/6OYBk6DlXWNk501LoOcMUAzpjjeA5pPsDOqVH8zndous5GUTqOaJg3TnLnd45UUrnOQpc4zlwKtY5aJP5ObWRATq3WOM56I0BOi5X6TlFtvQ5pzUYOhchWDr5Kp865NB5OkixUTpdvhQ6WS4COvjYADrvjwg6uIoEOouqEjpyGBM6JcwDOtpd6DlPeyE6OYUXOmj78TnvG/05fcb/OVl0ATpWAgU6bw/qOdDIATo3IN05eLvwOaf0GzrShjk6Rn47OhrWFzr8Mfk51brlOYav1jnEhug56jkCOuru3zka4wI6P/bxOSZR6zlM8uk5b+jfOVgX3jkEy+U5GKnhOQAd1jkox/Y5jUQAOtTA5DmENQE6QfDoOdwv9TmyBxc6gGVXOt+3nTpL6nc6IcJPOtyBEjqanQE65IAAOnqwBzqFIgU6BFMSOq6dEzr/DAM6XoPmOX4MITqalBY6mI3xOQdV/TkX4P45Nm4AOkVJBDq61eY5rrEAOrpP3Dm7QvI5RbcbOk+DOTquizs6om4YOpNW+zkTnOY5SAPYOTaZ6jlivgM6khTiOfZ7Azo6VvI5+SbuOR8w7TnqVd85ovrgOSUD6TnXjuM5sF/YOcK9+DkQFwE6uBrlOdaUATqrDus5IN/0OeaNFzoxHVc62VCeOvnpdzr/T1E6TH0UOjLRATpHDgI6/O4IOqnjBDpk2xM6+CkUOp26BDp6w+g5izUiOnJZFzrMi/E5bz/8OVc9ADqoXwE6FmAFOvjO6jnLcAI6HzLdObMK8jnbuR06Eqs7OsafPjo5SBk6"); + + AutoDataDto.DataArray dataArray4 = new AutoDataDto.DataArray(); + dataArray4.setDataAttr(4); + dataArray4.setDataTimeSec(time); + dataArray4.setDataTimeUSec(0); + dataArray4.setDataTag(1); + dataArray4.setData("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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0BlJOjEh+DlNw4I6VW/0Ob8SGTrAOPw5SxWLOmlBBDoDzBU6FZf2OciycDpGWAg6t/wpOhmQAjpX1ow6zFvoOWsnJjoTZfI5t1+COhVhFDrO1l46X3s6OvMvAjwo6IM6D/pkOtlLFDq1SpU62NL5OcALOToj/yM6qX3WO4WtDjqYFEk6nSlfOiqVHjsgmxk6OHwzOsmTAjq6apA6SNT+OdDQLzr2P+45nU6VOpy35zna0CA6WXgrOp9TkjsjAkU6qIY1Ok+NSzplgPE5j/2AOnMb8TmsDBY6rtb9OfkFizptEwM6nZYSOpEU9jn0w3A6ZfYEOtPeKjp6M/85PfiOOgn15jkFfyU6Gqf3OSSlgTqqDBE62cRdOuPJOzpl3QA8umKCOoGPYzp8EBI6UYaUOiIL/DlmLjg6f/QhOvRz1jtuuxA6WJFHOvBlXjrdHh07NT4bOlcUMjoi8wU6XYuNOveg/jmEki46KBvvOSEDkjqBUuw5Gw8kOoK5LzqvVZI7yCRAOg4gNzp2V1A6NJP2OQRchDqxuPQ5bW4bOvr2+DkBmIs6hh0COnldGjpqqPk5fN1yOvt8CjqXIi06SxgCOtrhjzrKEeU5seImOmGg9znDpoI6zqEUOjKQXDqCxTo6DD4BPNT6gTpU2WQ6JEoTOhY3lzpDG/059KY3Ot1SITrHfdc7rmUROuqyRDr/I1s6Za4dO1LFGDpSVi465wgFOhlRjzpXHwI6CHotOvii8DkO7pE6+5XuOcyXIToiqS06AwGUO9ElQTr82TQ6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKhRIUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4FOTQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4KiFDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBxk0IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQLEgQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgepRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASIkyOnLfJjoyoRg6TzYfOg6BNzr4NSA6qXI7Oh7lKDpWcSM6SoMfOg99GjqsESE6BUEfOvUSHzqdMRY65TErOhDDNDqbVSE68ZM1OpiFKDprFig6A8JEOvc9jjrCwMQ67eafOnYhhDpFPE86Q+00Ouq9Njp+Zjs6b9A/OoT/TzoKKUw6BC03OjgJJTqHFFw6Z4JdOiY3JjqVzDg6ss8uOoNtLzr3hkA6P/gkOmGNOTroniE6BRYoOnFcUzpLBHU6aqV3OufhTDqN4TE6QoEjOtBXFjpvuCE6yPozOhMkHzoHDDk6SaMoOpB7Izq0DCA6MjccOs/sHjppZiE6hQggOqBbFTrIlyk6fiIzOrcsJDrKFDI6Tu8pOtMXLDorgUU6sxyOOoL1wTp4hZ06yw6GOj8DTTqvaDM6x0o0OlAxOzo14Ds6HipKOueFSjptKjs6f08jOrViXDqsMl46B3QmOkLINzpd1Ss6wuwvOvtvPTqD6SI6QT02Oj4sITrruSY6p1hVOohOdzoSGXo6QdxOOtD2NTo3LCU6+YQZOoq6IzpEhzY6SPciOgsiPDrTOCg6hMQnOqEkIjoxqB06/QkgOhw1HzqyHh464m0aOjanKDrlYTQ6pLggOnzNNDqURCg6ucopOky4RTpeM486ODzEOuFWoTqVxoY69shNOhE0NTpoKzM6gFo8OjNXOzrbwEs6gVhNOvNqPjrYjyM6/25ZOsAkXDqj8iY64W03OgMDLzqILTE6isc9OhYTKzrw2zQ6ThkgOq9QLDq5kVc6yKN2OgDcfjoZIU46"); + + dataArrays.add(dataArray1); + dataArrays.add(dataArray2); + dataArrays.add(dataArray3); + dataArrays.add(dataArray4); + msg.setDataArray(dataArrays); + dataDto.setMsg(msg); + + AutoDataDto dataDto2 = new AutoDataDto(); + dataDto2.setMid(-1); + dataDto2.setDid(1); + dataDto2.setPri(1); + dataDto2.setType(4866); + + AutoDataDto.Msg msg2 = new AutoDataDto.Msg(); + msg2.setClDid(2); + msg2.setDataType(0); + msg2.setDataAttr(2); + msg2.setDsNameIdx(22); + + List dataArrays2 = new ArrayList<>(); + AutoDataDto.DataArray dataArray12 = new AutoDataDto.DataArray(); + dataArray12.setDataAttr(1); + dataArray12.setDataTimeSec(time); + dataArray12.setDataTimeUSec(0); + dataArray12.setDataTag(1); + dataArray12.setData("AABIQgAAAAAVIPY8PRt/POLljjyDxg88HCPKO32KAjzbGZA8q2SdPIIchTzvTGA6B+JeOvTYbzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqXpA7Tx5tO38hVTQAAAAAAAAAAPHeiThDnkY4kplCOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmu93OQAAAABWoge5GJsVOAAAAABRI0o433Z9OQAAAAClgII5WC9/NgAAAAAQxly0AAAAAAAAAAAyUk4kWC9/NgAAAACSE5M2AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/ckwDOG4Ymzc+bbg4AACAPwAAgD8AAIA/MCsEOG4YmzfqPPY5JFWDNti4SDYPQdg2rv0kNpxOhDZmaVA2M1cCNyHrMDYI21Q2sDZyNl0wtTYyy0Y2uQx+NtNVQzaL8LY26N9UNljThzZhgRo2dhKpNubCHTZxAJ02RsJzNltlGjgupp02iYK3Nu1KPzaLn9k2OXk4Nn3NfDZy+Vk2LUi0N8MkVja3ocY2wTReNkkyVDfT+VU2mhxhNmeFPzZO1bA2SQ06Nj07NDZI2TI2Ugq9NhkBNDZ/o2M29cBZNgLf1zcr7242UyqENgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMTsO0566UtCzaB7VLgQW0XW8qtCJ8gLT/4fS038satHiKtbTlrVq0MH6DtA5no7QHCkq0gchltF3e5bS5boy0C2Dbs8a54LOntKK0yR6GtBPKkrSL9ay0/+0SOMdCALUUGLW0+gGjtNgpybSES4m00djss7u6LbSM2lI2D2kmtK0olLRAdy20DLoctsO/X7RMOHy0Gx43tDgelLRSbBy0oNJOtMbpHLRV7um0IOkrtKIFurNEpaa01RKvN8L1sbRTT0a0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK6hDjgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAZLNwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0tUDcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfaUEkoZHtIwuvuCSAFv8j44sgJFqK3iOIrbgkzcUNJEWFQCSRevcjmldtJFCeCiSg5jwkBVEYJJ9zeyQIbvQjqKAEJHw9zyPzH0okMd/XIz+vMyT/qhAkuzEkODtISSSnmoAkAnAUJCT5lSTxbfAjVZsSJL04ECTBiqY3RGwNJHJeRCSzZBIk994WJSvvDSTj4AokG8/eIwc1hiR1LAEk5U/7I8uB6iP/pokklRT5IxQwDyR5+S4k79OlN1a1GyQ/5UckJFWDNti4SDYPQdg2rv0kNpxOhDZmaVA2M1cCNyHrMDYI21Q2sDZyNl0wtTYyy0Y2uQx+NtNVQzaL8LY26N9UNljThzZhgRo2dhKpNubCHTZxAJ02RsJzNkyJMTgupp02iYK3Nu1KPzaLn9k2OXk4Nn3NfDZy+Vk2nIO/N8MkVja3ocY2wTReNkkyVDfT+VU2mhxhNmeFPzZO1bA2SQ06Nj07NDZI2TI2Ugq9NhkBNDZ/o2M29cBZNgLf1zcr7242UyqENgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADm34k2/FkpNvmmAzcJ1zU2TORkNnKjHjblpQM3PSBKNh49iTZyajA2nzCpNv+gRTaOqIY2hihZNnU/szYKPi42dRY9Nky7EzbLFZA2fuIZNqsWgDb3QE42QKMnOAR8jzb6Wbc2yaBTNkfR1TYEZCs2lwRRNhCeTTZuIbk3lqBJNmf7izaztlA27xhXNzdbSjbp/0U2ddQeNvhWvzbZKTg2/SUzNjorJzZmQMQ2uo4xNr0kTDZCdnk2h43uN33+XTb3fo42AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3teFOitdKDqWDsQ6g6oUOpQfTDr/RDU658a3OiGSLTr7EE06n7cxOofwojpgxk06z7SNOr3uHDobM6Y6fuEQOo49PToydyc6/J+SOi9WJTolqoU6ZbZzOt/UCjyz/5Y62JeZOs3vMDox8686GIsvOkjMUzqE2E86Npa2O/kfQDoDM2o6p8haOmdlLTsRCUM6aAdzOoqDIzqfFrY6yEIXOgv5LDqa4B46om+pOo2aNjocWWE64UE+OhiIqjuNdmw6ENJ0Og8fizpAbTA6RKrKOuHCGjprW0g6M58rOgwluDrQRzM6n+tSOvYwOTolaKM6CZNFOreYjTqmACE6xlabOjIwGzqQdD86DYQfOjVwlTr/EyY6Tip6On3vdTq2sAs8UgqYOjCJmjpoujQ68L2xOkSpJjrCtlE6laxQOve5tjsDjDg6x8dhOsKYWDoiPyw7WiI1OneVdDoTSBI67kW+Ot64GDrflSc6hZcaOthyrDqKi0k65fdWOsELQTr3Wao7fVhoOqnIejoyMIw6cxAnOiLPvzqKSxU6+QdFOhcrLTrFmrg6IVI+On9QWTq9zTQ68kqiOu5PVzpVzI06ysYkOgcKpDp65BU6WcpGOh9yHTq5vpQ6QIUsOigAhTrCtHE69JgLPNeCljpz8Jk6ufI2OgGorjpA4i46JOpSOoVFVDqCkLc7IRY3OqM4Yjrw6lM62XstO7/gNzoLFnE6pSMYOp3Dtzq+GiQ64fcsOg8AHzqd4K46P1o5Ovz+Wzogozg69wOrO2HYXjoFan06AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAi3MkMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYJixQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAXl0IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIlTJDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACasUIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOZZCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoCkzQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADggbFCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOKVQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzI90OnyTSDoB4jk6VgFWOn8+ZDrD4UU6CNtXOqzkSToa6mE6sXY4OmcRYTqMR2U6riBkOklUSDpqPDw6v5ZGOh5cVDo/hDE65ItwOiiOUjrhjkM6Q3FzOkG4tTqHgdU6G0bFOrxMkjo4bWk6f59POuINfzoVTVM61qZYOu9fvjoOycA6Px5nOnB7RjqgIYI6zAFgOnCaXDo534A6uuZjOtQxWzrld1k6aMJaOk7zQjruflM6NnJgOq+7hjrKT5I6dU2jOneRgDoBU3U6TYFLOjCnLjpJTk866H5fOqBFTDoNc1Q6bZk/OtSwUzqXYzo65EpdOsc9ZTrZMFc6IJhKOjmbQDohBkk6TBZWOuRsKTplnW86FEBEOnjkSjoj6nw6c6S3OrePzDqsBMM6RKCTOpZzdjoaQkc6tt1vOqXbTzoG31w6aH22OgIdwToctG06/a1SOkKafzoOg2Y6ZtlYOh05hTqMaWE6s4BkOtoFTzp+Wl46heVJOprMUzqN6GU6McODOqzpjzp766A6iWmEOlqBczqEzkU6iusvOt1OSjraFlk6bL5HOuFHWzrh/TQ6kYhgOvOWNzq8FVs6noJoOtWFUDq9JU86YuRGOoiKSzrZfFw603w4OrIBbjoBeUs6R6pGOlkvczqML7c6p3/ROi8PyjpMyJI6Hn9lOnq7TjqC+HY6T3tMOg+eXzopd7Y6T2rFOmf4azpv2Ew6phuBOvwqaDr1kl860/2IOqdHcTpRdWE6c+pcOjmQVTr3KVA68CtTOqkGVDogeIQ6/x2ROpX8oDrtL4I6"); + + AutoDataDto.DataArray dataArray22 = new AutoDataDto.DataArray(); + dataArray22.setDataAttr(2); + dataArray22.setDataTimeSec(time); + dataArray22.setDataTimeUSec(0); + dataArray22.setDataTag(1); + dataArray22.setData("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"); + + AutoDataDto.DataArray dataArray32 = new AutoDataDto.DataArray(); + dataArray32.setDataAttr(3); + dataArray32.setDataTimeSec(time); + dataArray32.setDataTimeUSec(0); + dataArray32.setDataTag(1); + dataArray32.setData("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"); + + AutoDataDto.DataArray dataArray42 = new AutoDataDto.DataArray(); + dataArray42.setDataAttr(4); + dataArray42.setDataTimeSec(time); + dataArray42.setDataTimeUSec(0); + dataArray42.setDataTag(1); + dataArray42.setData("AABIQgAAAABSKPM8C/B6PAHlizwARs87I7+XOx72vjur4os83hKaPOZCgDy2YA06e30TOq7vDjoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARUzE7Rkc4O7O2FDQAAAAAAAAAAKpRDzhCtwo4y5n5OQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFnFjOQAAAABlPR25os7UNwAAAAAhQOc3IKBvOQAAAABNlmo5PbUpNgAAAABM1xC1AAAAAAAAAAD6WuQjPbUpNgAAAACdyCI2AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/j/KmN8hkKjeaGpw4AACAPwAAgD8AAIA/yPWkN8hkKjeUY+g5IqEuNkwiADbv3qk2xCf5NW29IDbKiAk28iuZNh39ATZu3x02spMENo5CcDb66AY2TF0XNm6/7jWOEl82MmjnNQyJFzaa49M1VqNJNnk+4DUlelY2CbMcNtsFzzct7Vg2oIxuNqgd8DV8p5Y2PssGNhwoLjagoCk2+WeKN49iCzbKjR02aHkaNo45IzfUnAs2AwAJNuqf9jURY3w2zhLuNRHvCzZFeN81mCFxNu/a3jU0RRs2tbsRNsUFozc62Sk2hLIqNgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA83Sy1NLPOtJVfYbXO3+G0sxbvtDAz/LRMEXu1ti3qtHQVCrVbVsm0d6pLtanr77RU1du0/9fotGtXK7W1v8u0GOcAtWCPuLQZHh21I7rUtC33RbVF0Re1gVLPN72VaLXyRE21ZKjltMdodbXP7Pu0gZwVtWVD77QyyPe18fQBtW4vA7VWfgu1B+FftqEy77RbXdi091zitPfBRLUl9Na0r8/itKkaz7SMpWy1FaTMtNrg1LT22BK1dB/EtlrMCbUQhBi1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGZ70jcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACXEfMjBdO1I1kUYSTBoLcjYDfVIx4RriP3B0UkfkuoI1No4CPJsbEjtc8rJJ8/uCMXDMkjfDqxI7J0KyRQ+6gjEJfdI5h9niN7UQMkNjOXIweIECSYMd8jIUDnN/c6HyRyvB0kcp23I0PhXCSa3bIjJ3rnI2mU5yP0WEglSInDIzVVzyMcN9AjMkzlJDXCxyNjYLUjZgWwI30OOSRcV5wjX9G5Izh7pyMaHDkkq2SdI5fpxyOzc8Ij9INqJTPp5SOxj+4jIqEuNkwiADbv3qk2xCf5NW29IDbKiAk28iuZNh39ATZu3x02spMENo5CcDb66AY2TF0XNm6/7jWOEl82MmjnNQyJFzaa49M1VqNJNnk+4DUlelY2CbMcNmj+CTgt7Vg2oIxuNqgd8DV8p5Y2PssGNhwoLjagoCk2YSqQN49iCzbKjR02aHkaNo45IzfUnAs2AwAJNuqf9jURY3w2zhLuNRHvCzZFeN81mCFxNu/a3jU0RRs2tbsRNt54ozc62Sk2hLIqNgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACnRS02Jp0BNsxyoDZM5gI24v0XNvwq+DU+dIw2VfDvNSv4Hzb+Vv01xvN0NoxXAzYlUQ826Kz8NQRydDb/6vA1BPYdNvX14TWYODs2DJHXNRwPTjaqGh82S20NOPEDYzaV4mA28OMCNmt0nTZyAv81TwIlNgcVJTbkqIg3cmMLNjXMEzY+bRQ2kXQjN/1lDjZvSwE2PvT6NQPrgzZ85d4173UENmXH7jW39IM2cWXgNRCCDjaSnQo2lUOoN33kIzYYDyo2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdCswOhF79Dm8R6U6ZJ3qOYbCGDrZfwg6Pw6bOqyVCDo3Iyo6amwROvu9fjosEgg6oQcaOjUaAzpaVG46rZ/3OYK0JDpnGek5kgJYOnHe9zmqdFc6rHUrOs0HBTyhpnI6AdZ2OgNpCzpXTZ86dmANOrUeMzpdfCA6RqOhO2pMFDp0/yQ6qQgeOiwYIjt1xhc6KiwXOin9+TnZsZE6IRz4OTtjCDqV6fg580SGOuoD8jkWsh86pl0WOgPtmzukODY6JLdAOikhLzqJAfI5zNylOu4o9DkvLho6sW0KOsZynDqeQwc6/DUuOh2UFDpKJ4A6rpsLOpOrHDqKHQE6mbxpOvm89DkmfCI6Hs3rOa8YWjqMevY5iVFVOqdzKzq1QAU8OSdwOoyodzqAgQ06TNigOq2oDjrvrTM6dXUqOo4Coju83hI6HDYoOjhCHjoiiiE7gsYcOp5PFjqnYfo5SJOPOu369TkJmwg6P0j4OcRShzoIefI5/TAiOo8iFjoab507dr4zOhjZRTo2iy46ZRT3OQXrojqwM/g5tOEZOnzqCDrqGZ06Ix4IOiBWLjrsMBA6UUiBOgDuCDq5EB86cR0EOjMkcTqur/Y5XU4jOgqt8zm241Y601L/OSNCWTpzfy46KUUFPCAabTrBung6IF4HOl0toTof+g46RFc1OtpVJDpfRaI72lkTOnZ5KjoL0Bk6G0kgO9ZrHTobiBk6bpb6Oc8ckTr1gfQ5i00GOul59jm6BIo6BAn4OVHcHzrcRBQ6Bn2dO/GmNjqURUQ6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBMI0MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIkSJDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyPQiQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVV8/OgMNIjoIwBU6XygkOqfGMDpiPxs6KscsOl1cHjrV/SE6QM4hOqhYHjrOTj06yLUnOuU4IzosrRY6/R8tOqdVMTpkyxU6R7guOqhKLDqiViU6gWRTOniYojqEcrc6DY+oOhGffzrhqzs6SWMuOr1YOzqb7Tk6mPMtOt4MTTpUU206nyo8Omh/Jzq55VI66QBBOvOdKTqhiSg6H8k0Ok82KzpkRjk6y2Q5OpKULzq/BCQ6T24nOpjTYjqJeHo6Sep/OjVQUjqvSz0611AgOqZHEjoblSU6kh0wOrprITpcBy06WiEbOotZIjryCiQ6FcUeOu3GOzqxrCo6OR4jOi9ZGTpFBCo6uyUzOtS6GTpMBjE6QCMrOoF7JjruwFU6f7yiOiC/ujqa0Kg63JCCOtyzPjpBgC46p+s/OpT1NzpyiC46l+dSOr8QazrgTDs6TzMoOpxwUjqbEkM6X3stOjASKzoHSDE6aH4sOmdkMjp+xDk6ZEgsOmtmJzqbTCg6q6pfOrvfezqoiYE6X9BVOny8PDpxASQ6jKUWOs3yJToFbzM6dw4bOkyDLTou9R86GfEhOiAhIjpTiBs6eIE7Oud8JzrXrCI6WTocOo7pLDp2yDI6FjIaOr6oMTpeXis69AMnOqCRVTox5qU6DOO3OspeqTr2t4E6lYtAOnexLzrrQ0A6Wis2OsE7LDqd41Q6/P5rOnGiODrVXig6yZNSOsGUQTrpkSg6BT8sOgKhNDquty06CF40OnJHPTrDZCw6nPwnOhONKDoFkWE6ub95Ol1HgToEdFc6"); + + dataArrays2.add(dataArray12); + dataArrays2.add(dataArray22); + dataArrays2.add(dataArray32); + dataArrays2.add(dataArray42); + msg2.setDataArray(dataArrays2); + dataDto2.setMsg(msg2); + + for (int i = 1; i <= numberOfDevices; i++) { + final int deviceId = i; + final String dev; + if (i<=9) { + dev = "00B78DA8000" + i; + } else { + dev = "00B78DA800" + i; + } + executorService.submit(() -> { + try { + MqttClient client = new MqttClient(BROKER_URL, dev, new MemoryPersistence()); + + MqttConnectOptions options = new MqttConnectOptions(); + options.setCleanSession(true); + options.setUserName(USERNAME); + options.setPassword(PASSWORD.toCharArray()); + client.connect(options); + + String topic = "/Dev/Data/V1/" + dev; + + ObjectMapper objectMapper = new ObjectMapper(); + String jsonStr = objectMapper.writeValueAsString(dataDto); + byte[] data = jsonStr.getBytes(StandardCharsets.UTF_8); + MqttMessage message = new MqttMessage(data); + message.setQos(1); + client.publish(topic, message); + + ObjectMapper objectMapper2 = new ObjectMapper(); + String jsonStr2 = objectMapper2.writeValueAsString(dataDto2); + byte[] data2 = jsonStr2.getBytes(StandardCharsets.UTF_8); + MqttMessage message2 = new MqttMessage(data2); + message2.setQos(1); + client.publish(topic, message2); + + System.out.println("Message sent to device " + deviceId); + System.out.println("Message2 sent to device " + deviceId); + client.disconnect(); + } catch (MqttException e) { + e.printStackTrace(); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + }); + } + executorService.shutdown(); + } + + +} + diff --git a/iot-access/access-boot/src/test/java/com/njcn/TestXianCheng.java b/iot-access/access-boot/src/test/java/com/njcn/TestXianCheng.java new file mode 100644 index 0000000..0bbdc23 --- /dev/null +++ b/iot-access/access-boot/src/test/java/com/njcn/TestXianCheng.java @@ -0,0 +1,61 @@ +package com.njcn; + +import cn.hutool.core.collection.CollUtil; +import com.njcn.csdevice.pojo.po.CsEquipmentDeliveryPO; +import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.*; + +@Component +@Slf4j +@RequiredArgsConstructor +public class TestXianCheng { + + + private static final long AUTO_TIME = 120L; + + + public static void main(String[] args) { + ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + Runnable task = () -> { + log.info("轮询定时任务执行中!"); + ExecutorService executor = Executors.newFixedThreadPool(10); + // 创建一个ExecutorService来处理这些任务 + List> futures = new ArrayList<>(); + // 提交任务给线程池执行 + for (int i = 0; i < 10; i++) { + int index = i; + futures.add(executor.submit(new Callable() { + @Override + public Void call() { + access(); + return null; + } + })); + } + // 等待所有任务完成 + for (Future future : futures) { + try { + future.get(); + } catch (InterruptedException | ExecutionException e) { + throw new RuntimeException(e); + } + } + // 关闭ExecutorService + executor.shutdown(); + }; + //第一次执行的时间为120s,然后每隔120s执行一次 + scheduler.scheduleAtFixedRate(task,0,1,TimeUnit.SECONDS); + } + + + public static void access() { + System.out.println("123"); + } + +} diff --git a/iot-analysis/analysis-rt/rt-boot/src/main/java/com/njcn/rt/service/impl/RtServiceImpl.java b/iot-analysis/analysis-rt/rt-boot/src/main/java/com/njcn/rt/service/impl/RtServiceImpl.java index bfa860b..26a2ee6 100644 --- a/iot-analysis/analysis-rt/rt-boot/src/main/java/com/njcn/rt/service/impl/RtServiceImpl.java +++ b/iot-analysis/analysis-rt/rt-boot/src/main/java/com/njcn/rt/service/impl/RtServiceImpl.java @@ -88,7 +88,7 @@ public class RtServiceImpl implements IRtService { long timestamp = item.getDataTimeSec() - 8*3600; baseRealDataSet.setDataTime(getTime(timestamp)); publisher.send("/Web/RealData/" + lineId, new Gson().toJson(baseRealDataSet), 1, false); - } else if (dataSet.getName().contains("实时数据集合")) { + } else if (dataSet.getName().contains("实时数据")) { //用户Id Object redisObject = redisUtil.getObjectByKey("rtDataUserId:"+lineId); if (ObjectUtil.isNotNull(redisObject)) { diff --git a/iot-analysis/analysis-stat/stat-boot/src/main/java/com/njcn/stat/service/impl/StatServiceImpl.java b/iot-analysis/analysis-stat/stat-boot/src/main/java/com/njcn/stat/service/impl/StatServiceImpl.java index 85d7538..30af952 100644 --- a/iot-analysis/analysis-stat/stat-boot/src/main/java/com/njcn/stat/service/impl/StatServiceImpl.java +++ b/iot-analysis/analysis-stat/stat-boot/src/main/java/com/njcn/stat/service/impl/StatServiceImpl.java @@ -101,6 +101,7 @@ public class StatServiceImpl implements IStatService { //云前置设备 else if (Objects.equals(DicDataEnum.DEV_CLD.getCode(),code)) { lineId = appAutoDataMessage.getId() + appAutoDataMessage.getMsg().getClDid(); + } //获取当前设备信息 @@ -127,7 +128,8 @@ public class StatServiceImpl implements IStatService { default: break; } - String key = AppRedisKey.DEV_MODEL.concat(dataArrayParam.getId() + dataArrayParam.getDid() + dataArrayParam.getCldId() + dataArrayParam.getStatMethod() + dataArrayParam.getIdx()); + int clDid = Objects.equals(DicDataEnum.DEV_CLD.getCode(),code)?1:appAutoDataMessage.getMsg().getClDid(); + String key = AppRedisKey.DEV_MODEL.concat(dataArrayParam.getId() + dataArrayParam.getDid() + clDid + dataArrayParam.getStatMethod() + dataArrayParam.getIdx()); Object object = redisUtil.getObjectByKey(key); List dataArrayList; if (Objects.isNull(object)){ @@ -135,10 +137,11 @@ public class StatServiceImpl implements IStatService { } else { dataArrayList = objectToList(object); } - List result = assembleData(lineId,dataArrayList,item,appAutoDataMessage.getMsg().getClDid(),dataArrayParam.getStatMethod(),po.getProcess()); + List result = assembleData(lineId,dataArrayList,item,appAutoDataMessage.getMsg().getClDid(),dataArrayParam.getStatMethod(),po.getProcess(),code); recordList.addAll(result); //获取时间 - time = Instant.ofEpochSecond(item.getDataTimeSec()-8*3600) + long devTime = Objects.equals(DicDataEnum.DEV_CLD.getCode(),code)?item.getDataTimeSec():item.getDataTimeSec()-8*3600; + time = Instant.ofEpochSecond(devTime) .atZone(ZoneId.systemDefault()) .toLocalDateTime(); } @@ -196,7 +199,7 @@ public class StatServiceImpl implements IStatService { /** * influxDB数据组装 */ - public List assembleData(String lineId,List dataArrayList,AppAutoDataMessage.DataArray item,Integer clDid,String statMethod,Integer process) { + public List assembleData(String lineId,List dataArrayList,AppAutoDataMessage.DataArray item,Integer clDid,String statMethod,Integer process,String devType) { List records = new ArrayList(); //解码 List floats = PubUtils.byteArrayToFloatList(Base64.getDecoder().decode(item.getData())); @@ -217,10 +220,11 @@ public class StatServiceImpl implements IStatService { tags.put(InfluxDBTableConstant.CL_DID,clDid.toString()); tags.put(InfluxDBTableConstant.PROCESS,process.toString()); Map fields = new HashMap<>(); - fields.put(dataArrayList.get(i).getName(),floats.get(i)); + //这边特殊处理,如果数据为3.14159,则将数据置为null + fields.put(dataArrayList.get(i).getName(),Objects.equals(floats.get(i),3.14159f) ? null:floats.get(i)); fields.put(InfluxDBTableConstant.IS_ABNORMAL,item.getDataTag()); //fixme 这边前置传递的应该是UTC时间,但是前置说是传递的北京时间,讨论了一下没太理解。这边暂时先这样处理,influx入库处理成北京时间,减去8小时。 - Point point = influxDbUtils.pointBuilder(tableName, item.getDataTimeSec()-8*3600, TimeUnit.SECONDS, tags, fields); + Point point = influxDbUtils.pointBuilder(tableName, Objects.equals(DicDataEnum.DEV_CLD.getCode(),devType)?item.getDataTimeSec():item.getDataTimeSec()-8*3600, TimeUnit.SECONDS, tags, fields); BatchPoints batchPoints = BatchPoints.database(influxDbUtils.getDbName()).retentionPolicy("").consistency(InfluxDB.ConsistencyLevel.ALL).build(); batchPoints.point(point); records.add(batchPoints.lineProtocol()); diff --git a/iot-analysis/analysis-zl-event/zl-event-boot/src/test/java/com/njcn/AppTest.java b/iot-analysis/analysis-zl-event/zl-event-boot/src/test/java/com/njcn/AppTest.java index 7eb0efb..d445428 100644 --- a/iot-analysis/analysis-zl-event/zl-event-boot/src/test/java/com/njcn/AppTest.java +++ b/iot-analysis/analysis-zl-event/zl-event-boot/src/test/java/com/njcn/AppTest.java @@ -2,6 +2,10 @@ package com.njcn; import com.alibaba.fastjson.JSON; import com.alibaba.nacos.shaded.com.google.gson.Gson; +import com.github.tocrhz.mqtt.publisher.MqttPublisher; +import com.njcn.access.enums.AccessEnum; +import com.njcn.access.enums.TypeEnum; +import com.njcn.access.pojo.dto.ReqAndResDto; import com.njcn.csharmonic.api.WavePicFeignClient; import com.njcn.influx.pojo.constant.InfluxDBTableConstant; import com.njcn.influx.utils.InfluxDbUtils; @@ -15,6 +19,8 @@ import com.njcn.zlevent.ZlEventBootApplication; import com.njcn.zlevent.pojo.constant.ZlConstant; import com.njcn.zlevent.pojo.dto.FileStreamDto; import com.njcn.zlevent.pojo.dto.WaveTimeDto; +import com.njcn.zlevent.service.ICsWaveService; +import net.sf.json.JSONObject; import org.influxdb.InfluxDB; import org.influxdb.dto.BatchPoints; import org.influxdb.dto.Point; @@ -59,6 +65,11 @@ public class AppTest { @Resource private InfluxDbUtils influxDbUtils; + @Resource + private MqttPublisher publisher; + @Resource + private ICsWaveService csWaveService; + /** * Rigorous Test :-) */ @@ -68,6 +79,39 @@ public class AppTest { assertTrue( true ); } + @Test + public void test00() { + long time = 1726237055L; + long subtleTime = 889000L; + Double millisecond = 1430.0; + + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + time = time - 8*3600; + // 将millisecond转换为长整型,并乘以1000以获取微秒 + long millisecondValue = millisecond.longValue() * 1000; + long time1 = time * 1000000 + subtleTime; + long time2 = time * 1000000 + subtleTime + millisecondValue; + String time1String = String.valueOf(time1); + String time2String = String.valueOf(time2); + + String time11 = time1String.substring(time1String.length() - 6); + String time111 = time1String.substring(0,time1String.length() - 6); + String formatTime1 = format.format(Long.parseLong(time111) * 1000); + + String time22 = time2String.substring(time2String.length() - 6); + String time222 = time2String.substring(0,time2String.length() - 6); + String formatTime2 = format.format(Long.parseLong(time222) * 1000); + System.out.println(formatTime1 + "." + time11); + System.out.println(formatTime2 + "." + time22); + } + + @Test + public void test11() { + String fileName = "/bd0/comtrade/PQS_PQM1_000063_20241029_101442_886"; + boolean result = csWaveService.findCountByName(fileName); + System.out.println("result==:" + result); + } + @Test public void test3() { List records = new ArrayList(); diff --git a/iot-message/message-boot/pom.xml b/iot-message/message-boot/pom.xml index 36f731f..171829d 100644 --- a/iot-message/message-boot/pom.xml +++ b/iot-message/message-boot/pom.xml @@ -81,6 +81,17 @@ dynamic-datasource-spring-boot-starter 3.5.1 + + com.njcn + cs-device-api + ${project.version} + + + com.njcn + common-device-biz + + + diff --git a/iot-message/message-boot/src/main/java/com/njcn/message/consumer/CldDevRunFlagConsumer.java b/iot-message/message-boot/src/main/java/com/njcn/message/consumer/CldDevRunFlagConsumer.java new file mode 100644 index 0000000..92440b3 --- /dev/null +++ b/iot-message/message-boot/src/main/java/com/njcn/message/consumer/CldDevRunFlagConsumer.java @@ -0,0 +1,135 @@ +package com.njcn.message.consumer; + +import com.njcn.csdevice.api.EquipmentFeignClient; +import com.njcn.middle.rocket.constant.EnhanceMessageConstant; +import com.njcn.middle.rocket.handler.EnhanceConsumerMessageHandler; +import com.njcn.mq.constant.BusinessTopic; +import com.njcn.mq.constant.MessageStatus; +import com.njcn.mq.message.CldDeviceRunFlagMessage; +import com.njcn.redis.pojo.enums.AppRedisKey; +import com.njcn.redis.pojo.enums.RedisKeyEnum; +import com.njcn.redis.utils.RedisUtil; +import com.njcn.system.api.RocketMqLogFeignClient; +import com.njcn.system.pojo.po.RocketmqMsgErrorLog; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; +import org.apache.rocketmq.spring.core.RocketMQListener; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Objects; + +/** + * 类的介绍:云前置状态反转 + * + * @author xuyang + * @version 1.0.0 + * @createTime 2025/9/16 + */ +@Service +@RocketMQMessageListener( + topic = BusinessTopic.DEVICE_RUN_FLAG_TOPIC, + consumerGroup = BusinessTopic.DEVICE_RUN_FLAG_TOPIC, + consumeThreadNumber = 10, + enableMsgTrace = true +) +@Slf4j +public class CldDevRunFlagConsumer extends EnhanceConsumerMessageHandler implements RocketMQListener { + + @Resource + private RedisUtil redisUtil; + @Resource + private RocketMqLogFeignClient rocketMqLogFeignClient; + @Resource + private EquipmentFeignClient equipmentFeignClient; + + @Override + protected void handleMessage(CldDeviceRunFlagMessage cldDeviceRunFlagMessage) { + log.info("分发至翻转设备状态"); + int status = Objects.equals(cldDeviceRunFlagMessage.getStatus(),"0") ? 1 : 2; + equipmentFeignClient.flipCldDevStatus(cldDeviceRunFlagMessage.getId(), status); + } + + + /*** + * 通过redis分布式锁判断当前消息所处状态 + * 1、null 查不到该key的数据,属于第一次消费,放行 + * 2、fail 上次消息消费时发生异常,放行 + * 3、being processed 正在处理,打回去 + * 4、success 最近72小时消费成功,避免重复消费,打回去 + */ + @Override + public boolean filter(CldDeviceRunFlagMessage message) { + String keyStatus = redisUtil.getStringByKey(AppRedisKey.RMQ_CONSUME_KEY.concat(message.getKey())); + if (Objects.isNull(keyStatus) || keyStatus.equalsIgnoreCase(MessageStatus.FAIL)) { + redisUtil.saveByKeyWithExpire(AppRedisKey.RMQ_CONSUME_KEY.concat(message.getKey()), MessageStatus.BEING_PROCESSED, 60L); + return false; + } + return true; + } + + /** + * 消费成功,缓存到redis72小时,避免重复消费 + */ + @Override + protected void consumeSuccess(CldDeviceRunFlagMessage message) { + redisUtil.saveByKeyWithExpire(AppRedisKey.RMQ_CONSUME_KEY.concat(message.getKey()), MessageStatus.SUCCESS, RedisKeyEnum.ROCKET_MQ_KEY.getTime()); + } + + /** + * 发生异常时,进行错误信息入库保存 + * 默认没有实现类,子类可以实现该方法,调用feign接口进行入库保存 + */ + @Override + protected void saveExceptionMsgLog(CldDeviceRunFlagMessage message, String identity, Exception exception) { + redisUtil.saveByKeyWithExpire(AppRedisKey.RMQ_CONSUME_KEY.concat(message.getKey()), MessageStatus.FAIL, RedisKeyEnum.ROCKET_MQ_KEY.getTime()); + RocketmqMsgErrorLog rocketmqMsgErrorLog = new RocketmqMsgErrorLog(); + rocketmqMsgErrorLog.setMsgKey(message.getKey()); + rocketmqMsgErrorLog.setResource(message.getSource()); + if (identity.equalsIgnoreCase(EnhanceMessageConstant.IDENTITY_SINGLE)) { + //数据库字段配置长度200,避免插入失败,大致分析异常原因 + String exceptionMsg = exception.getMessage(); + if(exceptionMsg.length() > 200){ + exceptionMsg = exceptionMsg.substring(0,180); + } + rocketmqMsgErrorLog.setRecord(exceptionMsg); + //如果是当前消息重试的则略过 + if(!message.getSource().startsWith(EnhanceMessageConstant.RETRY_PREFIX)){ + //单次消费异常 + rocketMqLogFeignClient.add(rocketmqMsgErrorLog); + } + } else { + rocketmqMsgErrorLog.setRecord("重试消费" + super.getMaxRetryTimes() + "次,依旧消费失败。"); + //重试N次后,依然消费异常 + rocketMqLogFeignClient.add(rocketmqMsgErrorLog); + } + } + + + /*** + * 处理失败后,是否重试 + * 一般开启 + */ + @Override + protected boolean isRetry() { + return true; + } + + + /*** + * 消费失败是否抛出异常,抛出异常后就不再消费了 + */ + @Override + protected boolean throwException() { + return false; + } + + + /*** + * 调用父类handler处理消息的元信息 + */ + @Override + public void onMessage(CldDeviceRunFlagMessage appAutoDataMessage) { + super.dispatchMessage(appAutoDataMessage); + } +} diff --git a/iot-message/message-boot/src/main/java/com/njcn/message/consumer/CldHeartConsumer.java b/iot-message/message-boot/src/main/java/com/njcn/message/consumer/CldHeartConsumer.java new file mode 100644 index 0000000..1b256fc --- /dev/null +++ b/iot-message/message-boot/src/main/java/com/njcn/message/consumer/CldHeartConsumer.java @@ -0,0 +1,132 @@ +package com.njcn.message.consumer; + +import com.njcn.middle.rocket.constant.EnhanceMessageConstant; +import com.njcn.middle.rocket.handler.EnhanceConsumerMessageHandler; +import com.njcn.mq.constant.BusinessTopic; +import com.njcn.mq.constant.MessageStatus; +import com.njcn.mq.message.CldHeartBeatMessage; +import com.njcn.redis.pojo.enums.AppRedisKey; +import com.njcn.redis.pojo.enums.RedisKeyEnum; +import com.njcn.redis.utils.RedisUtil; +import com.njcn.system.api.RocketMqLogFeignClient; +import com.njcn.system.pojo.po.RocketmqMsgErrorLog; +import lombok.extern.slf4j.Slf4j; +import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; +import org.apache.rocketmq.spring.core.RocketMQListener; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Objects; + +/** + * 类的介绍: 云前置心跳消息 + * + * @author xuyang + * @version 1.0.0 + * @createTime 2025/9/16 + */ +@Service +@RocketMQMessageListener( + topic = BusinessTopic.HEART_BEAT_TOPIC, + consumerGroup = BusinessTopic.HEART_BEAT_TOPIC, + consumeThreadNumber = 10, + enableMsgTrace = true +) +@Slf4j +public class CldHeartConsumer extends EnhanceConsumerMessageHandler implements RocketMQListener { + + @Resource + private RedisUtil redisUtil; + @Resource + private RocketMqLogFeignClient rocketMqLogFeignClient; + + @Override + protected void handleMessage(CldHeartBeatMessage cldHeartBeatMessage) { + log.info("分发至云前置心跳数据"); + String key = RedisKeyEnum.CLD_HEART_BEAT_KEY.getKey().concat(cldHeartBeatMessage.getNodeId() + cldHeartBeatMessage.getProcessNo()); + redisUtil.saveByKeyWithExpire(key, cldHeartBeatMessage.getNodeId() + cldHeartBeatMessage.getProcessNo(), RedisKeyEnum.CLD_HEART_BEAT_KEY.getTime()); + } + + + /*** + * 通过redis分布式锁判断当前消息所处状态 + * 1、null 查不到该key的数据,属于第一次消费,放行 + * 2、fail 上次消息消费时发生异常,放行 + * 3、being processed 正在处理,打回去 + * 4、success 最近72小时消费成功,避免重复消费,打回去 + */ + @Override + public boolean filter(CldHeartBeatMessage message) { + String keyStatus = redisUtil.getStringByKey(AppRedisKey.RMQ_CONSUME_KEY.concat(message.getKey())); + if (Objects.isNull(keyStatus) || keyStatus.equalsIgnoreCase(MessageStatus.FAIL)) { + redisUtil.saveByKeyWithExpire(AppRedisKey.RMQ_CONSUME_KEY.concat(message.getKey()), MessageStatus.BEING_PROCESSED, 60L); + return false; + } + return true; + } + + /** + * 消费成功,缓存到redis72小时,避免重复消费 + */ + @Override + protected void consumeSuccess(CldHeartBeatMessage message) { + redisUtil.saveByKeyWithExpire(AppRedisKey.RMQ_CONSUME_KEY.concat(message.getKey()), MessageStatus.SUCCESS, RedisKeyEnum.ROCKET_MQ_KEY.getTime()); + } + + /** + * 发生异常时,进行错误信息入库保存 + * 默认没有实现类,子类可以实现该方法,调用feign接口进行入库保存 + */ + @Override + protected void saveExceptionMsgLog(CldHeartBeatMessage message, String identity, Exception exception) { + redisUtil.saveByKeyWithExpire(AppRedisKey.RMQ_CONSUME_KEY.concat(message.getKey()), MessageStatus.FAIL, RedisKeyEnum.ROCKET_MQ_KEY.getTime()); + RocketmqMsgErrorLog rocketmqMsgErrorLog = new RocketmqMsgErrorLog(); + rocketmqMsgErrorLog.setMsgKey(message.getKey()); + rocketmqMsgErrorLog.setResource(message.getSource()); + if (identity.equalsIgnoreCase(EnhanceMessageConstant.IDENTITY_SINGLE)) { + //数据库字段配置长度200,避免插入失败,大致分析异常原因 + String exceptionMsg = exception.getMessage(); + if(exceptionMsg.length() > 200){ + exceptionMsg = exceptionMsg.substring(0,180); + } + rocketmqMsgErrorLog.setRecord(exceptionMsg); + //如果是当前消息重试的则略过 + if(!message.getSource().startsWith(EnhanceMessageConstant.RETRY_PREFIX)){ + //单次消费异常 + rocketMqLogFeignClient.add(rocketmqMsgErrorLog); + } + } else { + rocketmqMsgErrorLog.setRecord("重试消费" + super.getMaxRetryTimes() + "次,依旧消费失败。"); + //重试N次后,依然消费异常 + rocketMqLogFeignClient.add(rocketmqMsgErrorLog); + } + } + + + /*** + * 处理失败后,是否重试 + * 一般开启 + */ + @Override + protected boolean isRetry() { + return true; + } + + + /*** + * 消费失败是否抛出异常,抛出异常后就不再消费了 + */ + @Override + protected boolean throwException() { + return false; + } + + + /*** + * 调用父类handler处理消息的元信息 + */ + @Override + public void onMessage(CldHeartBeatMessage cldHeartBeatMessage) { + super.dispatchMessage(cldHeartBeatMessage); + } +}