|
|
@ -157,158 +157,7 @@ public class ConvertTaskServiceImpl implements ConvertTaskService { |
|
|
//识别中 -- 放回队列 |
|
|
//识别中 -- 放回队列 |
|
|
ConfigCache.resultQueue.put(task); |
|
|
ConfigCache.resultQueue.put(task); |
|
|
}else if (progress == 100) { |
|
|
}else if (progress == 100) { |
|
|
//文件类型 |
|
|
|
|
|
String fileType = (String) task.get(Constants.DOC_TYPE); |
|
|
|
|
|
//识别成功 -- 获取请求结果 |
|
|
|
|
|
String lastQueryUrl = queryUrl; |
|
|
|
|
|
lastQueryUrl = lastQueryUrl.replace(Constants.IDRENAME,jobId); |
|
|
|
|
|
log.info("queryUrl:{}",lastQueryUrl); |
|
|
|
|
|
String queryResStr = DownLoadUtil.doGet(lastQueryUrl); |
|
|
|
|
|
Map<String, Object> queryRes = JSONObject.parseObject(queryResStr); |
|
|
|
|
|
List<Map<String, Object>> jobDocuments = (List<Map<String, Object>>) queryRes.get(Constants.JOBDOCUMENTS); |
|
|
|
|
|
List<Map<String, Object>> outputDocuments = (List<Map<String, Object>>) jobDocuments.get(0).get(Constants.OutputDocuments); |
|
|
|
|
|
List<Map<String, Object>> files = (List<Map<String, Object>>) outputDocuments.get(0).get(Constants.FILES); |
|
|
|
|
|
for (int i =0;i<files.size();i++) { |
|
|
|
|
|
Map<String, Object> map = files.get(i); |
|
|
|
|
|
String fileContents = (String) map.get(Constants.FILECONTENTS); |
|
|
|
|
|
String fileName = (String) map.get(Constants.F_ILENAME); |
|
|
|
|
|
if(fileType.contains(Constants.HTML)) { |
|
|
|
|
|
/*******html********/ |
|
|
|
|
|
//拆分文件名,一部分是文件夹名称,一部分是文件名 |
|
|
|
|
|
String[] arr = fileName.split("\\\\"); |
|
|
|
|
|
String lastConvertFilePathPrefix = convertFilePathPrefix + arr[0]; |
|
|
|
|
|
boolean isInputFile = base64ToFile(fileContents, lastConvertFilePathPrefix, arr[1]); |
|
|
|
|
|
if (isInputFile) { |
|
|
|
|
|
log.info("html相关文件转换成功,fileName:{}",arr[1]); |
|
|
|
|
|
if(i == files.size() -1 ) { |
|
|
|
|
|
log.info("最后的文件转换成功,准备压缩文件夹,path={}", lastConvertFilePathPrefix); |
|
|
|
|
|
try { |
|
|
|
|
|
// 生成 zip 文件名 |
|
|
|
|
|
String zipFileName = UUID.randomUUID().toString().replace("-", "") + ".zip"; |
|
|
|
|
|
String zipFilePath = convertFilePathPrefix + zipFileName; |
|
|
|
|
|
|
|
|
|
|
|
// 压缩文件夹 |
|
|
|
|
|
ZipUtil.zipDirectory(lastConvertFilePathPrefix, zipFilePath); |
|
|
|
|
|
|
|
|
|
|
|
log.info("文件夹压缩成功,zipPath={}", zipFilePath); |
|
|
|
|
|
|
|
|
|
|
|
// === 后续你如果要:上传 / 回传结果,可继续写 === |
|
|
|
|
|
String responseBody = DownLoadUtil.upLoadFile(zipFilePath, gofastUrl); |
|
|
|
|
|
//删除目录 |
|
|
|
|
|
FileUtil.deleteDir(new File(lastConvertFilePathPrefix)); |
|
|
|
|
|
//删除压缩包 |
|
|
|
|
|
FileUtil.delFile(zipFilePath); |
|
|
|
|
|
// 解析返回 JSON |
|
|
|
|
|
JSONObject json = JSONObject.parseObject(responseBody); |
|
|
|
|
|
// ⚠️ 根据你 GoFast 实际返回字段调整 |
|
|
|
|
|
String path = json.getString(Constants.PATH); |
|
|
|
|
|
String url = gofastAccessPrefix + path; |
|
|
|
|
|
//成功 发送结果 |
|
|
|
|
|
AppResultDoc entity = new AppResultDoc(); |
|
|
|
|
|
entity.setInput(task); |
|
|
|
|
|
entity.setTaskId((String)task.get(Constants.TASKID)); |
|
|
|
|
|
entity.setAppId((Integer)task.get(Constants.ID)); |
|
|
|
|
|
long now = System.currentTimeMillis(); |
|
|
|
|
|
entity.setCreateTime(now); |
|
|
|
|
|
Map<String, Object> result = new HashMap<String, Object>(16); |
|
|
|
|
|
result.put(Constants.FILEURL, url); |
|
|
|
|
|
result.put(Constants.FILENAME, zipFileName); |
|
|
|
|
|
entity.setResult(result); |
|
|
|
|
|
entity.setStatus(1); |
|
|
|
|
|
entity.setDel(0); |
|
|
|
|
|
//回传给api服务保存 |
|
|
|
|
|
DownLoadUtil.doPost(saveUrl, JSONObject.toJSONString(entity)); |
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
|
log.error("HTML 文件夹压缩失败", e); |
|
|
|
|
|
|
|
|
|
|
|
// 压缩失败,按失败处理 |
|
|
|
|
|
AppResultDoc entity = new AppResultDoc(); |
|
|
|
|
|
entity.setInput(task); |
|
|
|
|
|
entity.setTaskId((String) task.get(Constants.TASKID)); |
|
|
|
|
|
entity.setAppId((Integer) task.get(Constants.ID)); |
|
|
|
|
|
long now = System.currentTimeMillis(); |
|
|
|
|
|
entity.setCreateTime(now); |
|
|
|
|
|
|
|
|
|
|
|
Map<String, Object> result = new HashMap<>(16); |
|
|
|
|
|
result.put(Constants.ERROR, "HTML 文件夹压缩失败"); |
|
|
|
|
|
entity.setResult(result); |
|
|
|
|
|
entity.setStatus(2); |
|
|
|
|
|
entity.setDel(0); |
|
|
|
|
|
|
|
|
|
|
|
DownLoadUtil.doPost(saveUrl, JSONObject.toJSONString(entity)); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
}else { |
|
|
|
|
|
//识别异常 |
|
|
|
|
|
log.error("html文档转换异常:{}",resStr); |
|
|
|
|
|
//发送失败结果 |
|
|
|
|
|
AppResultDoc entity = new AppResultDoc(); |
|
|
|
|
|
entity.setInput(task); |
|
|
|
|
|
entity.setTaskId((String)task.get(Constants.TASKID)); |
|
|
|
|
|
entity.setAppId((Integer)task.get(Constants.ID)); |
|
|
|
|
|
long now = System.currentTimeMillis(); |
|
|
|
|
|
entity.setCreateTime(now); |
|
|
|
|
|
Map<String, Object> result = new HashMap<String, Object>(16); |
|
|
|
|
|
result.put(Constants.ERROR, "转换失败"); |
|
|
|
|
|
entity.setResult(result); |
|
|
|
|
|
entity.setStatus(2); |
|
|
|
|
|
entity.setDel(0); |
|
|
|
|
|
//回传给api服务保存 |
|
|
|
|
|
DownLoadUtil.doPost(saveUrl, JSONObject.toJSONString(entity)); |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
}else { |
|
|
|
|
|
/******其他类型**********/ |
|
|
|
|
|
//输出文件 |
|
|
|
|
|
boolean isInputFile = base64ToFile(fileContents, convertFilePathPrefix, fileName); |
|
|
|
|
|
if (isInputFile) { |
|
|
|
|
|
//转换成功 --上传文件 |
|
|
|
|
|
String fileAddr = convertFilePathPrefix+fileName; |
|
|
|
|
|
//上传 |
|
|
|
|
|
String responseBody = DownLoadUtil.upLoadFile(fileAddr, gofastUrl); |
|
|
|
|
|
//删除源文件 |
|
|
|
|
|
FileUtil.delFile(fileAddr); |
|
|
|
|
|
// 解析返回 JSON |
|
|
|
|
|
JSONObject json = JSONObject.parseObject(responseBody); |
|
|
|
|
|
// ⚠️ 根据你 GoFast 实际返回字段调整 |
|
|
|
|
|
String path = json.getString(Constants.PATH); |
|
|
|
|
|
String url = gofastAccessPrefix + path; |
|
|
|
|
|
//成功 发送结果 |
|
|
|
|
|
AppResultDoc entity = new AppResultDoc(); |
|
|
|
|
|
entity.setTaskId((String)task.get(Constants.TASKID)); |
|
|
|
|
|
entity.setAppId((Integer)task.get(Constants.ID)); |
|
|
|
|
|
long now = System.currentTimeMillis(); |
|
|
|
|
|
entity.setCreateTime(now); |
|
|
|
|
|
Map<String, Object> result = new HashMap<String, Object>(16); |
|
|
|
|
|
result.put(Constants.FILEURL, url); |
|
|
|
|
|
result.put(Constants.FILENAME, fileName); |
|
|
|
|
|
entity.setResult(result); |
|
|
|
|
|
entity.setStatus(1); |
|
|
|
|
|
entity.setDel(0); |
|
|
|
|
|
entity.setInput(task); |
|
|
|
|
|
//回传给api服务保存 |
|
|
|
|
|
DownLoadUtil.doPost(saveUrl, JSONObject.toJSONString(entity)); |
|
|
|
|
|
}else { |
|
|
|
|
|
//识别异常 |
|
|
|
|
|
log.error("文档转换异常:{}",resStr); |
|
|
|
|
|
//发送失败结果 |
|
|
|
|
|
AppResultDoc entity = new AppResultDoc(); |
|
|
|
|
|
entity.setInput(task); |
|
|
|
|
|
entity.setTaskId((String)task.get(Constants.TASKID)); |
|
|
|
|
|
entity.setAppId((Integer)task.get(Constants.ID)); |
|
|
|
|
|
long now = System.currentTimeMillis(); |
|
|
|
|
|
entity.setCreateTime(now); |
|
|
|
|
|
Map<String, Object> result = new HashMap<String, Object>(16); |
|
|
|
|
|
result.put(Constants.ERROR, "转换失败"); |
|
|
|
|
|
entity.setResult(result); |
|
|
|
|
|
entity.setStatus(2); |
|
|
|
|
|
entity.setDel(0); |
|
|
|
|
|
//回传给api服务保存 |
|
|
|
|
|
DownLoadUtil.doPost(saveUrl, JSONObject.toJSONString(entity)); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
parseOcrRes(task,jobId); |
|
|
}else { |
|
|
}else { |
|
|
//识别异常 |
|
|
//识别异常 |
|
|
log.error("文档转换异常:{}",resStr); |
|
|
log.error("文档转换异常:{}",resStr); |
|
|
@ -415,6 +264,176 @@ public class ConvertTaskServiceImpl implements ConvertTaskService { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 解析查询结果 |
|
|
|
|
|
* @param task |
|
|
|
|
|
* @param jobId |
|
|
|
|
|
*/ |
|
|
|
|
|
private void parseOcrRes(Map<String, Object> task,String jobId) { |
|
|
|
|
|
//文件类型 |
|
|
|
|
|
String fileType = (String) task.get(Constants.DOC_TYPE); |
|
|
|
|
|
//识别成功 -- 获取请求结果 |
|
|
|
|
|
String lastQueryUrl = queryUrl; |
|
|
|
|
|
lastQueryUrl = lastQueryUrl.replace(Constants.IDRENAME,jobId); |
|
|
|
|
|
log.info("queryUrl:{}",lastQueryUrl); |
|
|
|
|
|
String queryResStr = DownLoadUtil.doGet(lastQueryUrl); |
|
|
|
|
|
Map<String, Object> queryRes = JSONObject.parseObject(queryResStr); |
|
|
|
|
|
List<Map<String, Object>> jobDocuments = (List<Map<String, Object>>) queryRes.get(Constants.JOBDOCUMENTS); |
|
|
|
|
|
List<Map<String, Object>> outputDocuments = null; |
|
|
|
|
|
List<Map<String, Object>> files = null; |
|
|
|
|
|
if(jobDocuments != null && jobDocuments.size() > 0) { |
|
|
|
|
|
outputDocuments = (List<Map<String, Object>>) jobDocuments.get(0).get(Constants.OUTPUTDOCUMENTS); |
|
|
|
|
|
files = (List<Map<String, Object>>) outputDocuments.get(0).get(Constants.FILES); |
|
|
|
|
|
}else { |
|
|
|
|
|
List<Map<String, Object>> InputFiles = (List<Map<String, Object>>) queryRes.get(Constants.INPUTFILES); |
|
|
|
|
|
outputDocuments = (List<Map<String, Object>>)InputFiles.get(0).get(Constants.OUTPUTDOCUMENTS); |
|
|
|
|
|
files = (List<Map<String, Object>>) outputDocuments.get(outputDocuments.size() - 1).get(Constants.FILES); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
for (int i =0;i<files.size();i++) { |
|
|
|
|
|
Map<String, Object> map = files.get(i); |
|
|
|
|
|
String fileContents = (String) map.get(Constants.FILECONTENTS); |
|
|
|
|
|
String fileName = (String) map.get(Constants.F_ILENAME); |
|
|
|
|
|
if(fileType.contains(Constants.HTML)) { |
|
|
|
|
|
/*******html********/ |
|
|
|
|
|
//拆分文件名,一部分是文件夹名称,一部分是文件名 |
|
|
|
|
|
String[] arr = fileName.split("\\\\"); |
|
|
|
|
|
String lastConvertFilePathPrefix = convertFilePathPrefix + arr[0]; |
|
|
|
|
|
boolean isInputFile = base64ToFile(fileContents, lastConvertFilePathPrefix, arr[1]); |
|
|
|
|
|
if (isInputFile) { |
|
|
|
|
|
log.info("html相关文件转换成功,fileName:{}",arr[1]); |
|
|
|
|
|
if(i == files.size() -1 ) { |
|
|
|
|
|
log.info("最后的文件转换成功,准备压缩文件夹,path={}", lastConvertFilePathPrefix); |
|
|
|
|
|
try { |
|
|
|
|
|
// 生成 zip 文件名 |
|
|
|
|
|
String zipFileName = UUID.randomUUID().toString().replace("-", "") + ".zip"; |
|
|
|
|
|
String zipFilePath = convertFilePathPrefix + zipFileName; |
|
|
|
|
|
|
|
|
|
|
|
// 压缩文件夹 |
|
|
|
|
|
ZipUtil.zipDirectory(lastConvertFilePathPrefix, zipFilePath); |
|
|
|
|
|
|
|
|
|
|
|
log.info("文件夹压缩成功,zipPath={}", zipFilePath); |
|
|
|
|
|
|
|
|
|
|
|
// === 后续你如果要:上传 / 回传结果,可继续写 === |
|
|
|
|
|
String responseBody = DownLoadUtil.upLoadFile(zipFilePath, gofastUrl); |
|
|
|
|
|
//删除目录 |
|
|
|
|
|
FileUtil.deleteDir(new File(lastConvertFilePathPrefix)); |
|
|
|
|
|
//删除压缩包 |
|
|
|
|
|
FileUtil.delFile(zipFilePath); |
|
|
|
|
|
// 解析返回 JSON |
|
|
|
|
|
JSONObject json = JSONObject.parseObject(responseBody); |
|
|
|
|
|
// ⚠️ 根据你 GoFast 实际返回字段调整 |
|
|
|
|
|
String path = json.getString(Constants.PATH); |
|
|
|
|
|
String url = gofastAccessPrefix + path; |
|
|
|
|
|
//成功 发送结果 |
|
|
|
|
|
AppResultDoc entity = new AppResultDoc(); |
|
|
|
|
|
entity.setInput(task); |
|
|
|
|
|
entity.setTaskId((String)task.get(Constants.TASKID)); |
|
|
|
|
|
entity.setAppId((Integer)task.get(Constants.ID)); |
|
|
|
|
|
long now = System.currentTimeMillis(); |
|
|
|
|
|
entity.setCreateTime(now); |
|
|
|
|
|
Map<String, Object> result = new HashMap<String, Object>(16); |
|
|
|
|
|
result.put(Constants.FILEURL, url); |
|
|
|
|
|
result.put(Constants.FILENAME, zipFileName); |
|
|
|
|
|
entity.setResult(result); |
|
|
|
|
|
entity.setStatus(1); |
|
|
|
|
|
entity.setDel(0); |
|
|
|
|
|
//回传给api服务保存 |
|
|
|
|
|
DownLoadUtil.doPost(saveUrl, JSONObject.toJSONString(entity)); |
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
|
log.error("HTML 文件夹压缩失败", e); |
|
|
|
|
|
|
|
|
|
|
|
// 压缩失败,按失败处理 |
|
|
|
|
|
AppResultDoc entity = new AppResultDoc(); |
|
|
|
|
|
entity.setInput(task); |
|
|
|
|
|
entity.setTaskId((String) task.get(Constants.TASKID)); |
|
|
|
|
|
entity.setAppId((Integer) task.get(Constants.ID)); |
|
|
|
|
|
long now = System.currentTimeMillis(); |
|
|
|
|
|
entity.setCreateTime(now); |
|
|
|
|
|
|
|
|
|
|
|
Map<String, Object> result = new HashMap<>(16); |
|
|
|
|
|
result.put(Constants.ERROR, "HTML 文件夹压缩失败"); |
|
|
|
|
|
entity.setResult(result); |
|
|
|
|
|
entity.setStatus(2); |
|
|
|
|
|
entity.setDel(0); |
|
|
|
|
|
|
|
|
|
|
|
DownLoadUtil.doPost(saveUrl, JSONObject.toJSONString(entity)); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
}else { |
|
|
|
|
|
//识别异常 |
|
|
|
|
|
log.error("html文档转换异常:{}",queryResStr); |
|
|
|
|
|
//发送失败结果 |
|
|
|
|
|
AppResultDoc entity = new AppResultDoc(); |
|
|
|
|
|
entity.setInput(task); |
|
|
|
|
|
entity.setTaskId((String)task.get(Constants.TASKID)); |
|
|
|
|
|
entity.setAppId((Integer)task.get(Constants.ID)); |
|
|
|
|
|
long now = System.currentTimeMillis(); |
|
|
|
|
|
entity.setCreateTime(now); |
|
|
|
|
|
Map<String, Object> result = new HashMap<String, Object>(16); |
|
|
|
|
|
result.put(Constants.ERROR, "转换失败"); |
|
|
|
|
|
entity.setResult(result); |
|
|
|
|
|
entity.setStatus(2); |
|
|
|
|
|
entity.setDel(0); |
|
|
|
|
|
//回传给api服务保存 |
|
|
|
|
|
DownLoadUtil.doPost(saveUrl, JSONObject.toJSONString(entity)); |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
}else { |
|
|
|
|
|
/******其他类型**********/ |
|
|
|
|
|
//输出文件 |
|
|
|
|
|
boolean isInputFile = base64ToFile(fileContents, convertFilePathPrefix, fileName); |
|
|
|
|
|
if (isInputFile) { |
|
|
|
|
|
//转换成功 --上传文件 |
|
|
|
|
|
String fileAddr = convertFilePathPrefix+fileName; |
|
|
|
|
|
//上传 |
|
|
|
|
|
String responseBody = DownLoadUtil.upLoadFile(fileAddr, gofastUrl); |
|
|
|
|
|
//删除源文件 |
|
|
|
|
|
FileUtil.delFile(fileAddr); |
|
|
|
|
|
// 解析返回 JSON |
|
|
|
|
|
JSONObject json = JSONObject.parseObject(responseBody); |
|
|
|
|
|
// ⚠️ 根据你 GoFast 实际返回字段调整 |
|
|
|
|
|
String path = json.getString(Constants.PATH); |
|
|
|
|
|
String url = gofastAccessPrefix + path; |
|
|
|
|
|
//成功 发送结果 |
|
|
|
|
|
AppResultDoc entity = new AppResultDoc(); |
|
|
|
|
|
entity.setTaskId((String)task.get(Constants.TASKID)); |
|
|
|
|
|
entity.setAppId((Integer)task.get(Constants.ID)); |
|
|
|
|
|
long now = System.currentTimeMillis(); |
|
|
|
|
|
entity.setCreateTime(now); |
|
|
|
|
|
Map<String, Object> result = new HashMap<String, Object>(16); |
|
|
|
|
|
result.put(Constants.FILEURL, url); |
|
|
|
|
|
result.put(Constants.FILENAME, fileName); |
|
|
|
|
|
entity.setResult(result); |
|
|
|
|
|
entity.setStatus(1); |
|
|
|
|
|
entity.setDel(0); |
|
|
|
|
|
entity.setInput(task); |
|
|
|
|
|
//回传给api服务保存 |
|
|
|
|
|
DownLoadUtil.doPost(saveUrl, JSONObject.toJSONString(entity)); |
|
|
|
|
|
}else { |
|
|
|
|
|
//识别异常 |
|
|
|
|
|
log.error("文档转换异常:{}",queryResStr); |
|
|
|
|
|
//发送失败结果 |
|
|
|
|
|
AppResultDoc entity = new AppResultDoc(); |
|
|
|
|
|
entity.setInput(task); |
|
|
|
|
|
entity.setTaskId((String)task.get(Constants.TASKID)); |
|
|
|
|
|
entity.setAppId((Integer)task.get(Constants.ID)); |
|
|
|
|
|
long now = System.currentTimeMillis(); |
|
|
|
|
|
entity.setCreateTime(now); |
|
|
|
|
|
Map<String, Object> result = new HashMap<String, Object>(16); |
|
|
|
|
|
result.put(Constants.ERROR, "转换失败"); |
|
|
|
|
|
entity.setResult(result); |
|
|
|
|
|
entity.setStatus(2); |
|
|
|
|
|
entity.setDel(0); |
|
|
|
|
|
//回传给api服务保存 |
|
|
|
|
|
DownLoadUtil.doPost(saveUrl, JSONObject.toJSONString(entity)); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
public static void main(String[] args) throws Exception { |
|
|
public static void main(String[] args) throws Exception { |
|
|
// OcrTaskServiceImpl ocrTaskServiceImpl = new OcrTaskServiceImpl(); |
|
|
// OcrTaskServiceImpl ocrTaskServiceImpl = new OcrTaskServiceImpl(); |
|
|
// String base64Word = "77u/VGFibGUgMS4gRGlzdHJpYnV0aW9uIG9mIGNvbmZpcm1lZCBhbnRocmF4IGNhc2VzIGJ5IGNvdW50cnkgYW5kIHllYXIsIEVVL0VFQSwgMjAxNS0yMDE5DQpDb3VudHJ5CTIwMTUJMjAxNgkyMDE3CTIwMTgJMjAxOQ0KCU51bWJlcglOdW1iZXIJTnVtYmVyCU51bWJlcglOdW1iZXINCkF1c3RyaWEJMAkwCTAJMAkwDQpCZWxnaXVtCTAJMAkwCTAJMA0KQnVsZ2FyaWEJMgkwCTEJMAkwDQpDcm9hdGlhCTAJMAkwCTAJMA0KQ3lwcnVzCTAJMAkwCTAJMA0KQ3plY2hpYQkwCTAJMAkwCTANCkRlbm1hcmsJMAkwCTAJMAkwDQpFc3RvbmlhCTAJMAkwCTAJMA0KRmlubGFuZAkwCTAJMAkwCTANCkZyYW5jZQkwCTAJMAkwCTANCkdlcm1hbnkJMAkwCTAJMAkwDQpHcmVlY2UJMAkwCTAJMAkwDQpIdW5nYXJ5CTAJMAkwCTAJMQ0KSWNlbGFuZAkwCTAJMAkwCTANCklyZWxhbmQJMAkwCTAJMAkwDQpJdGFseQkwCTAJMAkwCTANCkxhdHZpYQkwCTAJMAkwCTANClVlY2h0ZW5zdGVpbgnigKIJ4oCiCeKAognigKIJ4oCiDQpVdGh1YW5pYQkwCTAJMAkwCTANCkx1eGVtYm91cmcJMAkwCTAJMAkwDQpNYWx0YQkwCTAJMAkwCTANCk5ldGhlcmxhbmRzCTAJMAkwCTEJMA=="; |
|
|
// String base64Word = "77u/VGFibGUgMS4gRGlzdHJpYnV0aW9uIG9mIGNvbmZpcm1lZCBhbnRocmF4IGNhc2VzIGJ5IGNvdW50cnkgYW5kIHllYXIsIEVVL0VFQSwgMjAxNS0yMDE5DQpDb3VudHJ5CTIwMTUJMjAxNgkyMDE3CTIwMTgJMjAxOQ0KCU51bWJlcglOdW1iZXIJTnVtYmVyCU51bWJlcglOdW1iZXINCkF1c3RyaWEJMAkwCTAJMAkwDQpCZWxnaXVtCTAJMAkwCTAJMA0KQnVsZ2FyaWEJMgkwCTEJMAkwDQpDcm9hdGlhCTAJMAkwCTAJMA0KQ3lwcnVzCTAJMAkwCTAJMA0KQ3plY2hpYQkwCTAJMAkwCTANCkRlbm1hcmsJMAkwCTAJMAkwDQpFc3RvbmlhCTAJMAkwCTAJMA0KRmlubGFuZAkwCTAJMAkwCTANCkZyYW5jZQkwCTAJMAkwCTANCkdlcm1hbnkJMAkwCTAJMAkwDQpHcmVlY2UJMAkwCTAJMAkwDQpIdW5nYXJ5CTAJMAkwCTAJMQ0KSWNlbGFuZAkwCTAJMAkwCTANCklyZWxhbmQJMAkwCTAJMAkwDQpJdGFseQkwCTAJMAkwCTANCkxhdHZpYQkwCTAJMAkwCTANClVlY2h0ZW5zdGVpbgnigKIJ4oCiCeKAognigKIJ4oCiDQpVdGh1YW5pYQkwCTAJMAkwCTANCkx1eGVtYm91cmcJMAkwCTAJMAkwDQpNYWx0YQkwCTAJMAkwCTANCk5ldGhlcmxhbmRzCTAJMAkwCTEJMA=="; |
|
|
|