diff --git a/src/main/java/com/nis/domain/configuration/DnsIpCfg.java b/src/main/java/com/nis/domain/configuration/DnsIpCfg.java index 47c304a33..1bce2316c 100644 --- a/src/main/java/com/nis/domain/configuration/DnsIpCfg.java +++ b/src/main/java/com/nis/domain/configuration/DnsIpCfg.java @@ -1,29 +1,35 @@ /** *@Title: DnsIpConfig.java *@Package com.nis.domain.restful - *@Description TODO + *@Description 欺骗IP实体类 *@author dell *@date 2018年2月5日 下午2:57:17 *@version 版本号 */ package com.nis.domain.configuration; +import java.util.Date; + +import com.nis.domain.BaseEntity; +import com.nis.domain.SysUser; + /** * @ClassName: DnsIpConfig.java - * @Description: TODO * @author (dell) * @date 2018年2月5日 下午2:57:17 * @version V1.0 */ -public class DnsIpCfg extends BaseCfg { +public class DnsIpCfg extends BaseEntity { - /** - * @Fields serialVersionUID:TODO(用一句话描述这个变量表示什么) - * - * @since 1.0.0 - */ - private static final long serialVersionUID = -4476190616323264876L; + /** + * 配置ID + */ + private Long cfgId; + /** + * 配置描述 + */ + private String cfgDesc; /** * ip类型 */ @@ -69,171 +75,257 @@ public class DnsIpCfg extends BaseCfg { */ private Integer protocol ; /** - * ipType - * @return ipType - */ + * 有效标识 + */ + private Integer isValid; + /** + * 是否审核 + */ + private Integer isAudit; + /** + * 创建人 + */ + private SysUser creator; + /** + * 创建时间 + */ + private Date createTime; + /** + * 最后修改人 + */ + private SysUser editor; + /** + * 最后修改时间 + */ + private Date editTime; + /** + * 审核人 + */ + private SysUser auditor; + /** + * 审核时间 + */ + private Date auditTime; + /** + * 来函 + */ + private RequestInfo request; + /** + * 欺骗id + */ + private Integer fakeId; + /** + * 分类 + */ + private String classify; + /** + * 性质 + */ + private String attribute; + /** + * 标签 + */ + private String lable; + public Long getCfgId() { + return cfgId; + } + public void setCfgId(Long cfgId) { + this.cfgId = cfgId; + } + public String getCfgDesc() { + return cfgDesc; + } + public void setCfgDesc(String cfgDesc) { + this.cfgDesc = cfgDesc; + } public Integer getIpType() { return ipType; } - /** - * @param ipType the ipType to set - */ public void setIpType(Integer ipType) { this.ipType = ipType; } - /** - * srcIp - * @return srcIp - */ - public String getSrcIp() { return srcIp; } - /** - * @param srcIp the srcIp to set - */ public void setSrcIp(String srcIp) { this.srcIp = srcIp; } - /** - * srcIpMask - * @return srcIpMask - */ - public String getSrcIpMask() { - return srcIpMask; + return srcIpMask; } - /** - * @param srcIpMask the srcIpMask to set - */ public void setSrcIpMask(String srcIpMask) { this.srcIpMask = srcIpMask; } - /** - * srcPort - * @return srcPort - */ - public String getSrcPort() { return srcPort; } - /** - * @param srcPort the srcPort to set - */ public void setSrcPort(String srcPort) { this.srcPort = srcPort; } - /** - * srcPortMask - * @return srcPortMask - */ - public String getSrcPortMask() { return srcPortMask; } - /** - * @param srcPortMask the srcPortMask to set - */ public void setSrcPortMask(String srcPortMask) { this.srcPortMask = srcPortMask; } - /** - * dstIp - * @return dstIp - */ - public String getDstIp() { return dstIp; } - /** - * @param dstIp the dstIp to set - */ public void setDstIp(String dstIp) { this.dstIp = dstIp; } - /** - * dstIpMask - * @return dstIpMask - */ - public String getDstIpMask() { return dstIpMask; } - /** - * @param dstIpMask the dstIpMask to set - */ public void setDstIpMask(String dstIpMask) { this.dstIpMask = dstIpMask; } - /** - * dstPort - * @return dstPort - */ - public String getDstPort() { return dstPort; } - /** - * @param dstPort the dstPort to set - */ public void setDstPort(String dstPort) { this.dstPort = dstPort; } - /** - * dstPortMask - * @return dstPortMask - */ - public String getDstPortMask() { return dstPortMask; } - /** - * @param dstPortMask the dstPortMask to set - */ public void setDstPortMask(String dstPortMask) { this.dstPortMask = dstPortMask; } - /** - * direction - * @return direction - */ - public Integer getDirection() { return direction; } - /** - * @param direction the direction to set - */ public void setDirection(Integer direction) { this.direction = direction; } - /** - * protocol - * @return protocol - */ - public Integer getProtocol() { return protocol; } - /** - * @param protocol the protocol to set - */ public void setProtocol(Integer protocol) { this.protocol = protocol; } - /* (non-Javadoc) - * @see com.nis.domain.configuration.BaseCfg#initDefaultValue() - */ - @Override - public void initDefaultValue() { - // TODO Auto-generated method stub - super.initDefaultValue(); - this.srcIp ="0.0.0.0"; - this.srcPortMask = "65535" ; - this.dstIp = "0.0.0.0" ; - this.dstPortMask = "65535"; - this.direction = 0; + public Integer getIsValid() { + return isValid; + } + public void setIsValid(Integer isValid) { + this.isValid = isValid; + } + public Integer getIsAudit() { + return isAudit; + } + public void setIsAudit(Integer isAudit) { + this.isAudit = isAudit; + } + public SysUser getCreator() { + return creator; + } + public void setCreator(SysUser creator) { + this.creator = creator; + } + public Date getCreateTime() { + return createTime; + } + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + public SysUser getEditor() { + return editor; + } + public void setEditor(SysUser editor) { + this.editor = editor; + } + public Date getEditTime() { + return editTime; + } + public void setEditTime(Date editTime) { + this.editTime = editTime; + } + public SysUser getAuditor() { + return auditor; + } + public void setAuditor(SysUser auditor) { + this.auditor = auditor; + } + public Date getAuditTime() { + return auditTime; + } + public void setAuditTime(Date auditTime) { + this.auditTime = auditTime; + } + public RequestInfo getRequest() { + return request; + } + public void setRequest(RequestInfo request) { + this.request = request; + } + public Integer getFakeId() { + return fakeId; + } + public void setFakeId(Integer fakeId) { + this.fakeId = fakeId; + } + public String getClassify() { + return classify; + } + public void setClassify(String classify) { + this.classify = classify; + } + public String getAttribute() { + return attribute; + } + public void setAttribute(String attribute) { + this.attribute = attribute; + } + public String getLable() { + return lable; + } + public void setLable(String lable) { + this.lable = lable; + } + + private Date searchCreateTimeStart; + private Date searchCreateTimeEnd; + private Date searchEditTimeStart; + private Date searchEditTimeEnd; + private Date searchAuditTimeStart; + private Date searchAuditTimeEnd; + + public Date getSearchCreateTimeStart() { + return searchCreateTimeStart; + } + public void setSearchCreateTimeStart(Date searchCreateTimeStart) { + this.searchCreateTimeStart = searchCreateTimeStart; + } + public Date getSearchCreateTimeEnd() { + return searchCreateTimeEnd; + } + public void setSearchCreateTimeEnd(Date searchCreateTimeEnd) { + this.searchCreateTimeEnd = searchCreateTimeEnd; + } + public Date getSearchEditTimeStart() { + return searchEditTimeStart; + } + public void setSearchEditTimeStart(Date searchEditTimeStart) { + this.searchEditTimeStart = searchEditTimeStart; + } + public Date getSearchEditTimeEnd() { + return searchEditTimeEnd; + } + public void setSearchEditTimeEnd(Date searchEditTimeEnd) { + this.searchEditTimeEnd = searchEditTimeEnd; + } + public Date getSearchAuditTimeStart() { + return searchAuditTimeStart; + } + public void setSearchAuditTimeStart(Date searchAuditTimeStart) { + this.searchAuditTimeStart = searchAuditTimeStart; + } + public Date getSearchAuditTimeEnd() { + return searchAuditTimeEnd; + } + public void setSearchAuditTimeEnd(Date searchAuditTimeEnd) { + this.searchAuditTimeEnd = searchAuditTimeEnd; } } diff --git a/src/main/java/com/nis/web/controller/BaseController.java b/src/main/java/com/nis/web/controller/BaseController.java index a0266aa58..efcecff49 100644 --- a/src/main/java/com/nis/web/controller/BaseController.java +++ b/src/main/java/com/nis/web/controller/BaseController.java @@ -31,6 +31,7 @@ import com.nis.web.service.configuration.AppCfgService; import com.nis.web.service.configuration.ComplexStringCfgService; import com.nis.web.service.configuration.FtpCfgService; import com.nis.web.service.configuration.IpCfgService; +import com.nis.web.service.configuration.DnsIpCfgService; import com.nis.web.service.configuration.MailCfgService; import com.nis.web.service.configuration.MediaCfgService; import com.nis.web.service.configuration.NumCfgService; @@ -74,6 +75,9 @@ public class BaseController { @Autowired protected IpCfgService ipCfgService; + @Autowired + protected DnsIpCfgService dnsIpCfgService; + @Autowired protected WebCfgService webCfgService; diff --git a/src/main/java/com/nis/web/controller/configuration/DnsIpCfgController.java b/src/main/java/com/nis/web/controller/configuration/DnsIpCfgController.java new file mode 100644 index 000000000..0550f0467 --- /dev/null +++ b/src/main/java/com/nis/web/controller/configuration/DnsIpCfgController.java @@ -0,0 +1,98 @@ +package com.nis.web.controller.configuration; + +import java.util.Date; +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.cxf.common.util.StringUtils; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; + +import com.nis.domain.Page; +import com.nis.domain.basics.ServiceDictInfo; +import com.nis.domain.configuration.DnsIpCfg; +import com.nis.domain.configuration.RequestInfo; +import com.nis.util.StringUtil; +import com.nis.web.controller.BaseController; +import com.nis.web.security.UserUtils; + +@Controller +@RequestMapping("${adminPath}/cfg/dnsIp") +public class DnsIpCfgController extends BaseController { + + @ModelAttribute + public DnsIpCfg get(Long cfgId) { + if (!StringUtil.isEmpty(cfgId)){ + return dnsIpCfgService.get(cfgId); + }else{ + return new DnsIpCfg(); + } + } + + @RequestMapping("list") + public String list(Model model, HttpServletRequest request, HttpServletResponse response, DnsIpCfg dnsIpCfg) { + Page page = dnsIpCfgService.findPage(new Page(request, response, 30), dnsIpCfg); + model.addAttribute("page", page); + + addRequestAndServiceDictToModel(model); + return "/cfg/dnsIpCfgList"; + } + + @RequestMapping("form") + public String form(Model model, DnsIpCfg dnsIpCfg) { + addRequestAndServiceDictToModel(model); + return "/cfg/dnsIpCfgForm"; + } + + @RequestMapping("save") + public String save(Model model, DnsIpCfg dnsIpCfg, RedirectAttributes redirectAttributes) { + Date now = new Date(); + + if (dnsIpCfg.getCfgId() == null) {//新增 + dnsIpCfg.setFakeId(0); + dnsIpCfg.setIsValid(1); + dnsIpCfg.setCreateTime(now); + dnsIpCfg.setCreator(UserUtils.getUser()); + } else {//修改 + dnsIpCfg.setEditor(UserUtils.getUser()); + dnsIpCfg.setEditTime(now); + } + + dnsIpCfgService.save(dnsIpCfg); + + addMessage(redirectAttributes, "保存成功"); + return "redirect:" + adminPath + "/cfg/dnsIp/list"; + } + + @RequestMapping("delete") + public String delete(Model model, String cfgIds, RedirectAttributes redirectAttributes) { + if (!StringUtils.isEmpty(cfgIds)) { + try { + dnsIpCfgService.delete(cfgIds); + addMessage(redirectAttributes, "删除成功"); + } catch (Exception e) { + e.printStackTrace(); + addMessage(redirectAttributes, "删除失败"); + } + } else { + addMessage(redirectAttributes, "删除失败"); + } + return "redirect:" + adminPath + "/cfg/dnsIp/list"; + } + + private void addRequestAndServiceDictToModel(Model model) { + List requestInfos = requestInfoService.getAllRequestInfo(); + model.addAttribute("requestInfos", requestInfos); + List fls = serviceDictInfoService.findAllFlDict(); + model.addAttribute("fls", fls); + List xzs = serviceDictInfoService.findAllXzDict(); + model.addAttribute("xzs", xzs); + List lables = serviceDictInfoService.findAllLableDict(); + model.addAttribute("lables", lables); + } +} diff --git a/src/main/java/com/nis/web/dao/configuration/DnsIpCfgDao.java b/src/main/java/com/nis/web/dao/configuration/DnsIpCfgDao.java new file mode 100644 index 000000000..755228e15 --- /dev/null +++ b/src/main/java/com/nis/web/dao/configuration/DnsIpCfgDao.java @@ -0,0 +1,10 @@ +package com.nis.web.dao.configuration; + +import com.nis.domain.configuration.DnsIpCfg; +import com.nis.web.dao.CrudDao; +import com.nis.web.dao.MyBatisDao; + +@MyBatisDao +public interface DnsIpCfgDao extends CrudDao { + +} diff --git a/src/main/java/com/nis/web/dao/configuration/DnsIpCfgDao.xml b/src/main/java/com/nis/web/dao/configuration/DnsIpCfgDao.xml new file mode 100644 index 000000000..2b49a37ef --- /dev/null +++ b/src/main/java/com/nis/web/dao/configuration/DnsIpCfgDao.xml @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + dic.CFG_ID, dic.CFG_DESC, dic.IP_TYPE, dic.SRC_IP, dic.SRC_IP_MASK, dic.SRC_PORT, + dic.SRC_PORT_MASK, dic.DST_IP, dic.DST_IP_MASK, dic.DST_PORT, dic.DST_PORT_MASK, + dic.DIRECTION, dic.PROTOCOL, dic.IS_VALID, dic.IS_AUDIT, dic.CREATOR_ID, + dic.CREATE_TIME, dic.EDITOR_ID, dic.EDIT_TIME, dic.AUDITOR_ID, dic.AUDIT_TIME, + dic.REQUEST_ID, dic.FAKE_ID, dic.CLASSIFY, dic.ATTRIBUTE, dic.LABLE + + + + + + + + insert into dns_ip_cfg ( + cfg_desc, ip_type, src_ip, src_ip_mask, src_port, + src_port_mask, dst_ip, dst_ip_mask, dst_port, dst_port_mask, + direction, protocol, is_valid, is_audit, creator_id, + create_time, request_id, fake_id, classify, attribute, lable + ) values ( + #{cfgDesc}, #{ipType}, #{srcIp}, #{srcIpMask}, #{srcPort}, #{srcPortMask}, + #{dstIp}, #{dstIpMask}, #{dstPort}, #{dstPortMask}, #{direction}, #{protocol}, + #{isValid}, #{isAudit}, #{creator.id}, #{createTime}, #{request.id}, #{fakeId}, + #{classify}, #{attribute}, #{lable} + ) + + + + update + dns_ip_cfg + set + cfg_desc=#{cfgDesc}, ip_type=#{ipType}, src_ip=#{srcIp}, src_ip_mask=#{srcIpMask}, + src_port=#{srcPort}, src_port_mask=#{srcPortMask}, dst_ip=#{dstIp}, + dst_ip_mask=#{dstIpMask}, dst_port=#{dstPort}, dst_port_mask=#{dstPortMask}, + direction=#{direction}, protocol=#{protocol}, request_id=#{request.id}, + fake_id=#{fakeId}, classify=#{classify}, attribute=#{attribute}, lable=#{lable}, + editor_id=#{editor.id}, edit_time=#{editTime} + where cfg_id=#{cfgId} + + + + update + dns_ip_cfg + set + is_valid=0 + where cfg_id=#{cfgId} + + + \ No newline at end of file diff --git a/src/main/java/com/nis/web/service/configuration/DnsIpCfgService.java b/src/main/java/com/nis/web/service/configuration/DnsIpCfgService.java new file mode 100644 index 000000000..09c19dfb1 --- /dev/null +++ b/src/main/java/com/nis/web/service/configuration/DnsIpCfgService.java @@ -0,0 +1,31 @@ +package com.nis.web.service.configuration; + +import org.springframework.stereotype.Service; + +import com.nis.domain.configuration.DnsIpCfg; +import com.nis.web.dao.configuration.DnsIpCfgDao; +import com.nis.web.service.CrudService; + +@Service +public class DnsIpCfgService extends CrudService{ + + @Override + public void save(DnsIpCfg dnsIpCfg) { + if (dnsIpCfg.getCfgId() == null) { + dao.insert(dnsIpCfg); + } else { + dao.update(dnsIpCfg); + } + //TODO 下发流程 + } + + public void delete(String cfgIds) { + String[] cfgIdsArr = cfgIds.split(","); + for (String cfgId : cfgIdsArr) { + DnsIpCfg d = new DnsIpCfg(); + d.setCfgId(Long.valueOf(cfgId)); + dao.delete(d); + } + //TODO 下发流程 + } +} diff --git a/src/main/resources/messages/message_en.properties b/src/main/resources/messages/message_en.properties index 28df3e32b..10baf8b7c 100644 --- a/src/main/resources/messages/message_en.properties +++ b/src/main/resources/messages/message_en.properties @@ -175,6 +175,7 @@ one_more=please choose at least one ! #==========message end===================== #==========yewuliexingguanli begin===================== +all=all act=action block=block monitor=monitor diff --git a/src/main/resources/messages/message_ru.properties b/src/main/resources/messages/message_ru.properties index 28df3e32b..10baf8b7c 100644 --- a/src/main/resources/messages/message_ru.properties +++ b/src/main/resources/messages/message_ru.properties @@ -175,6 +175,7 @@ one_more=please choose at least one ! #==========message end===================== #==========yewuliexingguanli begin===================== +all=all act=action block=block monitor=monitor diff --git a/src/main/resources/messages/message_zh_CN.properties b/src/main/resources/messages/message_zh_CN.properties index 65c370e6f..7b93af1a8 100644 --- a/src/main/resources/messages/message_zh_CN.properties +++ b/src/main/resources/messages/message_zh_CN.properties @@ -174,6 +174,7 @@ one_more=\u8bf7\u81f3\u5c11\u9009\u62e9\u4e00\u6761\u6570\u636e! #==========message end===================== #==========yewuliexingguanli begin===================== +all=\u5168\u90E8 act=\u52a8\u4f5c block=\u963b\u65ad monitor=\u76d1\u6d4b diff --git a/src/main/webapp/WEB-INF/views/cfg/dnsIpCfgForm.jsp b/src/main/webapp/WEB-INF/views/cfg/dnsIpCfgForm.jsp new file mode 100644 index 000000000..c78a5649d --- /dev/null +++ b/src/main/webapp/WEB-INF/views/cfg/dnsIpCfgForm.jsp @@ -0,0 +1,473 @@ +<%@ page contentType="text/html;charset=UTF-8"%> +<%@ include file="/WEB-INF/include/taglib.jsp"%> + + +<spring:message code="${cfgName}"></spring:message> + + + + + + + + + + + + + + + + + + + + +
+ +

+ +

+ +
+
+
+
+
+ + + +
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+
+ +
+ +
+
+
+
+
+
+
+
+ +
+ +
+
+
+
+
+
+ +
+ +
+
+
+
+
+
+
+
+ +
+ +
+
+
+
+
+
+ +
+ +
+
+
+
+
+
+
+
+ +
+ +
+
+
+
+
+
+ +
+ +
+
+
+
+
+
+
+
+ +
+ +
+
+
+
+
+
+ +
+ +
+
+
+
+
+
+
+
+ +
+ +
+
+
+
+
+
+ +
+ +
+
+
+
+
+
+
+ +
+ +
+
+
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+
+
+
+
+
+ > + +
+
+
+
+
+
+
+ +
+
+
+
+
+ + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/cfg/dnsIpCfgList.jsp b/src/main/webapp/WEB-INF/views/cfg/dnsIpCfgList.jsp new file mode 100644 index 000000000..f465344f7 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/cfg/dnsIpCfgList.jsp @@ -0,0 +1,358 @@ +<%@ page contentType="text/html;charset=UTF-8"%> +<%@ include file="/WEB-INF/include/taglib.jsp"%> + + +<spring:message code="${cfgName}"></spring:message> + + + + + + + + + + + + + + + + + + + + +
+ + +

+ + +

+ +
+
+
+
+
+ + + + + + +
+
+ + + + + + + +
+
+ + + + + + +
+
+ + + + + + +
+
+ + + + + + +
+
+ + + + + + +
+
+ +
+
+ +
+
+ +
+
+ <%-- --%> + + <%--
+ + +
--%> + + + + +
+
+ + + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ " onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:true});"/> +
+ +
+ +
+
+ +
+
+ " onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:true});"/> +
+
+ +
+
+ " onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:true});"/> +
+
+ +
+
+ +
+
+ " onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:true});"/> +
+
+ +
+
+ " onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:true});"/> +
+
+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + <%-- + + --%> + + + + + + + <%-- + --%> + + + + + + + + + + + + + + + + + + <%-- + + --%> + + + + + + + <%-- + --%> + + + +
ip
${dnsIpCfg.cfgDesc }V${dnsIpCfg.ipType }${dnsIpCfg.srcIp }${dnsIpCfg.srcIpMask }${dnsIpCfg.srcPort }${dnsIpCfg.srcPortMask }${dnsIpCfg.dstIp }${dnsIpCfg.dstIpMask }${dnsIpCfg.dstPort }${dnsIpCfg.dstPortMask } + + + + + + + + + + + + + + ${dnsIpCfg.auditor.name }${dnsIpCfg.request.requestTitle } + + + + ${fl.itemValue}, + + + + ${classifyName[status]} + + + + ${xz.itemValue}, + + + + + + ${lable.itemValue}, + + + ${dnsIpCfg.creator.name }${dnsIpCfg.editor.name }
+
${page}
+
+ +
+
+
+ + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/cfg/ipCfgForm.jsp b/src/main/webapp/WEB-INF/views/cfg/ipCfgForm.jsp index 6734475d6..ef4983298 100644 --- a/src/main/webapp/WEB-INF/views/cfg/ipCfgForm.jsp +++ b/src/main/webapp/WEB-INF/views/cfg/ipCfgForm.jsp @@ -100,6 +100,7 @@ $(function(){ }, dstIp: { required: true, + checkIp: true }, dstIpMask: { required: true, diff --git a/src/main/webapp/WEB-INF/views/systemService/form.jsp b/src/main/webapp/WEB-INF/views/systemService/form.jsp index 31b979583..e2e3c42ce 100644 --- a/src/main/webapp/WEB-INF/views/systemService/form.jsp +++ b/src/main/webapp/WEB-INF/views/systemService/form.jsp @@ -170,8 +170,7 @@ '
' + '*'+''+': ' + ' ' + - '"> ' + '' + '' + '' + @@ -224,7 +223,10 @@
-
+ + + +
@@ -245,8 +247,8 @@
- - + + @@ -260,8 +262,7 @@
- - + @@ -291,7 +292,6 @@ *: