一种能在源代码文件中嵌入可视化格式文档的方法

著录项
  • CN202110860836.9
  • 20210729
  • CN115686478A
  • 20230203
  • 高妍
  • 高妍
  • G06F8/33
  • G06F8/33 G06F8/34 G06F40/169 G06F21/60 G06F21/64

  • 北京市石景山区模式口西里小区31号楼1门503
  • 北京(11)
摘要
本发明实施例涉及用于将确定格式的二进制数据以源代码注释的方式植入到目标源代码文本中,以本发明实施例的文本编辑器还原并可视化输出,同时保持源代码逻辑本身不受影响。使源代码维护者能够以可视化方式表达和阅读源代码注释,从而更加准确记述和理解源代码设计逻辑。涉及本发明实施例的文本编辑器,通过将可视化的媒体数据,包括格式文档,图文图表,视频动画等,进行压缩编码或加密处理之后,以文本注释方式嵌入到目标代码中。通过反编码解压或解密,还原成格式化二进制数据,并以可视化嵌入输出到本发明实施例的文本编辑器中。
权利要求

1.一种能在源代码文件中嵌入可视化格式文档的方法,是一种将设计文档或者其它可视化二进制格式数据经过特定的处理之后,嵌入到编程语言源代码中的方法,其特征为:

以源代码注解的方式向源代码数据文件中嵌入其编码数据。

源代码文件中嵌入编码数据之后,本身并不影响该源文件的编译,解释或者运行。

应用本发明实施例的源代码编辑器,可直接显示或者编辑格式文档,与此同时,源代码文件中的代码部分也能够正常显示和编辑。

本发明文书中所述的源代码,既包括研发时用于编译生成软件的源代码语言,例如C/C++,JAVA,C#,Python等,也包括用于芯片研发时所使用的机器指令,例如FPGA等代码,也包括用于矢量数据等数据描述语言,例如PDF,PS等。

5.依据权利要求1,权利要求2和权利要求4,以源代码注解方式嵌入在代码中的数据文本被成功读取,并且完成校验和匹配之后,数据被解密,解码,解码之后的源数据包含数据头,以定义数据内容的数据格式,原数据长度,以及其它头信息数据等。

6.依据权利要求5,解码之后的源数据可能是点阵光栅图片,矢量图片,数据表格,多媒体动画,可执行程序段等。支持本发明的源代码编辑器自行定义数据格式标识符。

10.依据权利要求1和权利要求4,本发明实施例的编辑器载入数据块,经过验证解码之后,可以通过用户权限确定该可视化数据是否允许被现实输出。

2.二进制数据具有不定的数据长度,不可直接作为文本显示等特征。根据权利要求1,将二进制数据特殊处理,编码之后的目标结果,以文本数据的内容存在。并以源代码注解的方式嵌入到源代码文本中。保持既有源代码程序逻辑不发生变更,同时支持该源代码的编辑器,代码解释器,编译器对源代码的识别不受影响。

3.根据权利1的要求,对于不支持本发明的文本编辑器,所嵌入的格式数据仍然以文本注释的方式直接显示。

4.根据权利1和权利2的要求,嵌入到源代码的格式数据,通过加密,压缩,编码等处理之后,计算出校验和,并将校验和的数据编码成文本字符串之后,也保存到注解数据块的特殊位置,如数据头或者数据尾。支持本发明的源代码编辑器或者文本编辑器在读取该数据块时,首先检查校验和是否匹配,如果匹配成功,则以权利要求1的方案执行;否则,以权利要求3的方案执行。

7.依据权利要求4,读取嵌入在源代码中的编码数据,在验证校验和过程中,解码器依据校验和以及数据格式内容完成解码纠错,如果纠错失败,则源代码编辑器依然以原代码注解的方式呈现在所嵌入的编码数据。

8.以权利要求4为基础,以源代码注解方式嵌入到源代码中的编码数据,可以以多个数据块的方式嵌入在源代码的一个或多个不同的地方。具体要求以程序编码人员对源代码程序逻辑表达的需求而定。

9.依据权利要求4和权利要求8,对于以源代码注释方式嵌入到源文件不同位置的二进制数据快,在数据编码时,通过定义数据ID对数据进行定位标识,以便将不同源文件中的嵌入二进制数进行寻址。最终实现各个可视化数据块形成逻辑关系链。

说明书

一种能在源代码文件中嵌入可视化格式文档的方法

技术领域

本发明涉及用于各种编程语言的源代码编辑器,通过利用本发明的技术方案,可以将复杂的源代码设计逻辑以可视化的图片,图表等格式呈现在源代码编辑器中。程序编码设计人员甚至可以直接将程序设计UML图嵌入至源代码中,并使源代码本身保持既有的可编译或可解释执行能力不变。以本发明各项权利要求为基础,在未来软件或者芯片设计领域,使计算机实现智能设计,智能编码和智能调试成为可能,也让计算机对软件或者芯片设计过程中的bug,实现智能自我修复成为可能。

通过利用源代码注释文本标识,将可视化二进制数据进行格式化编码,使二进制数据转换成字符串文本,并以源代码文本注释的方式嵌入到源代码中。

通过本发明实施例的源代码文本编辑器,对该注释文本字符串进行解码并识别,以指定的可视化方式格式输出。

背景技术

所有的编程语言,包括我们常用的编程语言,如C/C++,JAVA,C#,Python,FPGA,DSP代码,CPU微代码等,都能在源代码中增加代码注释,甚至包括Linux/Unix系统shell脚本程序,以及Windows系统的批处理命令行程序,也能支持对源代码的注释,可以说,所有编程语言,都能支持本身不参与编译或运行的源代码注释。目的是为程序编码人员对相应的程序逻辑做解释说明,即利用常规源代码文本编辑器或者集成开发环境,以纯文本叙述的方式进行注明,解释和说明,而无法完成图片,图表,示意图等可视化文档表达。给程序编码设计人员带来的最大困扰就是,源代码本身在随着程序调试和维护在不断更新,但是相应的逻辑叙述文档却没有跟着及时更新,就算能够更新,到下次维护,所间隔的时间过长以后,或者软件维护人员发生变更,就很难到文档叙述的内容与源代码之间的对应逻辑关系。软件编码人员,或者后继的软件维护人员,在缺少逻辑文档叙述的条件下,无法对源代码最初的设计方案做出准确的理解,以至于让软件维护工作变得难以充成。

于是,利用本发明的技术方案,可以在源代码中嵌入任何可视化格式数据。即利用源代码注释的方式,在源代码中插入经过编码之后的可视化二进制数据,包括图形,图像,图表以及逻辑流程示意图等。利用本发明实施例的源代码编辑器,可视化内容与源代码本身一起直接显示输出。

利用本发明的技术方案,可以将可执行代码植入源代码注解中,通过本发明实施例的源代码编辑器软件,便可执行这段代码,并以此为基础,让软件本身实现自动编码,自动调试,测试成为可能。

本发明的实施例尽管能够使源代码本身和设计逻辑文档统一表达,甚至实现智能自动编码和调试,但也自然带来了信息保密的要求。因而,依据本发明权利要求5,可视化编码数据具备加密和解密的能力。为软件技术文档提供安全保障。

发明类容

101.本发明的目的在于,实现一种方法,以源代码注释的方式,在程序语言源代码的文本中,实现可视化文档的编辑存储以及显示输出。

102.为了实现这一目的,允许程序源代码设计人员运用本发明实施例的源代码编辑器,插入可视化文档,例如图像,表格,视频等静态或动态媒体数据,并且利用本发明所叙述的技术方案,直接嵌入式显示输出在源代码文本编辑器中。

为了实现这样的技术目的,整个逻辑处理分为两个过程:

103.第一,处理二进制数据文本化过程,首先将多媒体可视化格式二进制数据进行加工,加密,压缩,生成校验码,BASE64再编码文本化,目标数据格式头定义等数据处理过程,将二进制数据转换成可打印文本流,并以源代码注释的方式插入到指定的源代码文本中。

104.第二,嵌入在源代码中的注释文本还原成二进制数据并可视化输出的过程,本发明所述的源代码文本被载入到源代码编辑器时,将可识别的注释文本块进行BASE64解码,将解码之后的二进制数据做校验码验证,验证通过之后,在进行解压,解密,完成可视化数据的反向加工处理,最后将可视化二进制数据传送至相应的标准或非标准的格式输出组件,例如图像输出组件,音视频播放组件,PDF等格式输出组件,(可视化输出组件不在本发明所定义的权利要求之列),并以相应的权限要求嵌入显示的方式输出在文本编辑器中。

105.关于二进制数据文本化过程处理,首先完成对二进制数据头结构的定义,二进制数据头结构所包含的数据项包括:可视化二进制数据ID标识符;可视化二进制数据通过ID标识符所表达的前后依赖关系;可视化二进制数据在加密之前原始可视化二进制数据格式;可视化二进制数据被加密编码之后的数据长度;用于指定该可视化数据块的加密和显示输出权限的规范定义;可视化二进制数据输出引擎的寻址;用于对原始可视化二进制数据做完整性验证的校验码/哈希代码;等。

106.定义二进制数据头结构,确定当前可视化二进制数据块ID标识符,可以使用32位或者64位整数数值标识,定义整数0为无效ID标识,该ID标识符必须标注为有效ID值,即为非0整数值。在同一个源代码文件中,该ID标识符的值必须保持唯一性,即不可重复。

107.为了确定当前可视化二进制数据块通过ID标识符所表达的前后依赖关系,需定义前一个可视化二进制数据块的ID标识符,如果不存在前一个可视化二进制数据块,可定义该ID标识符为无效,即ID值为0。定义后一个可视化二进制数据块ID标识符,如果不存在后一个可视化二进制数据块,也需要将该ID标识符定义为无效,也即ID值为0。

108.定义二进制数据头结构中加密之前的原始数据格式和加密之后的二进制数据长度。需要先对二进制文本进行格式识别,将使用UTF8编码的定长字符串表达数据格式信息。以便在后期显示输出时,选择与之对应的可视化显示输出引擎。例如,如果该可视化数据块为JPEG格式,则选择的输出引擎为JPEG解码器。与此同时,在数据头中原始数据栏位的下一个栏位,将占用一个32比特位的整数表达当前可视化二进制数据块在完成加密之后的数据长度。

109.在二进制数头结构中,定义二进制数据加密方式。对于保护数据安全所采取的数据加密算法,不涉及本发明所定义的技术方案,可参考与数据加密相关发明或技术专利。二进制数据头结构中的数据加密方法栏位,用于描述原始可视化二进制数据的加密解密算法引擎,如果指定该栏位描述为空,则表示该原始可视化二进制数据为不加密的明码方式存储。对于加解密过程中所使用到的密钥,包括公钥和私钥,也不保存在本栏位中,而是依据本发明实施例的源代码编辑器的配置参数来决定。对于二进制加解密的算法引擎,在本栏位位置,可通过注册模块ID,算法模块地址,GUID全局模块标识等方法实现,可在本发明实施例中灵活安排。

110.在二进制数头结构中,定义二进制数据显示或访问权限。通常,数据访问权限以用户名加口令或者公钥加私钥的方式保存在数据库中。对于有显示权限要求的数据安排,在二进制数据头结构中的本栏位,可通过本发明实施例的用户配置数据,指定数据显示或访问权限的远程数据库访问方式,包括远程数据库地址,以及其他数据细节访问方式,或者通过HTTP/HTTPS的URL地址直接访问。

111.在二进制数头结构中,需定义可视化二进制数据显示输出引擎的寻址。对于原始可视化二进制数据,最终目标是以可视化的形式,以嵌入方式显示在本发明实施例编辑器源文件中相应的位置,对于不同的二进制数据格式,就需要不同的解码运算并实现显示输出的引擎。正如本发明说明书,发明类容的108章节中所述,以文本字符串描述的方式表达可视化二进制数据格式。但这并不足以指定具体的可视化二进制数据显示输出引擎。对于已知的通用数据格式,依据表达数据格式的文本字符串,可以完成对显示输出引擎的选择,例如JPEG,PDF等。然而,对于非标准的,由本发明实施例作者自定义的原始可视化二进制数据,则需要在数据头中的本栏位指定在本发明实施例中具体定义的显示输出引擎。同样,关于显示输出算法引擎在本栏位的表达方式,仍然可以通过注册模块ID,算法模块地址,GUID全局模块标识等方法实现,同样可在本发明实施例中灵活安排。

112.定义二进制数据头结构,为了有效保证原始可视化二进制数据的完整性,保留数据校验栏位。完成对数据加密处理,压缩处理以后,通过CRC或SHA-256等计算方法,对目标二进制数据编码进行计算,得出相应的目标校验码,存储于本栏位。在后续的可视化二进制数据解码还原处理过程中,通过对比匹配本栏位的校验码来确认本段可视化二进制数据的完整性。

113.完成可视化二进制数据文本化的处理过程,其处理顺序:

第一步,定义当前二进制数据块标识ID,以及与前后二进制数据块的逻辑依赖关系,并填充相应的二进制数据头结构栏位;

第二步,确定原始可视化二进制数据的格式描述,并填充相应的二进制数据头结构栏位;

第三步,依据本发明实施例配置信息的安排,以确定是否需要对本段原始可视化二进制数据块做加密处理,如有加密要求定义,则依据加密要求完成相应的数据加密处理,以及完成相应的二进制数据可视化访问的权限定义处理。并在二进制数据头结构相应的栏位中填充数据长度,加密规范,访问权限等数据;

第四步,对原文可视化二进制数据或者密文二进制数据(依据本章节第二步确定目标数据为原文或者密文)进行校验计算,计算方法为CRC或者SHA-256等方法,可参考校验计算相关技术发明或技术方案,并将生成的目标校验码填充至相应的二进制数据头结构栏位;

第五步,完成原始可视化二进制数据的上述处理以后,同时也完成了二进制数据头结构的定义,将二进制数据头与完成上述处理之后的二进制数据结合成一体,形成目标二进制数据。

第六步,通过第五步的数据合并处理,得到目标二进制数据,以及数据长度,并以此对其进行数据压缩处理,压缩算法可参考相关技术发明或技术方案。

第七步,完成目标数据压缩处理以后,得到压缩的二进制数据以及数据长度,并以此对压缩后的二进制数据做BASE64编码处理,生成文本化的二进制数据。将该文本字符串经过适当的换行处理,以源代码注释的方式将该文本块插入源代码相应的位置,并且在这段注释文本块之前,同样以源代码注释的方式描述这段源代码注释文本的特征,包括可视化标识特征符,文本数据长度,可视化解码器版本,原始可视化数据格式,等信息。

114.将嵌入在源代码中,并以文本注释形式呈现的文本数据,逆向还原成可视化二进制数据,并以与之相匹配的可视化输出引擎,嵌入式输出在本发明实施例的源代码编辑器中,其处理步骤如下:

第一步,读取注释文本的头信息。

第二步,读取以注释形式保存的嵌入文本

第三步,对文本进行BASE64解码处理

第四步,对压缩二进制数据进行解压

第五步,检查二进制数据体是否合法

第六步,二进制数据解密和访问权限控制

第七步,二进制数据可视化输出

115.读取注释文本头信息,以确认本段注释文本块是否为本发明所定义的经过文本化处理完成的可视化数据。如果确认结果为否,则放弃本段注释文本的可视化还原处理,而以普通的源代码注释文本呈现在源代码编辑器中。如果确认结果被证实为可视化数据的文本化之后的字符串文本数据,将从本段注释文本头中解析出注释文本的数据长度值,并且继续读取该数据长度范围的字符串文本数据(即为文本化的可视化数据体)。如果本段注释的文本长度与文本注释头所定义的长度值发生冲突,则宣告本段文本化的可视化数据非法,并终止本次数据还原处理。

116.确认从源代码注释中读取的本段字符串文本为合法的目标数据以后,对本段可视化数据文本体的回车换行等控制字符做相应的过滤处理,接着完成本段可视化文本的BASE64的解码处理,如果本段文本的BASE64解码处理失败,则放弃本段注释文本的可视化还原处理,并在本发明实施例的源代码编辑器中相应的位置显示可视化解码失败结果,同时显示解码失败的基本原因。如果本次BASE64解码处理成功,则继续完成本段可视化数据解码还原的后续处理。

117.依据114小节的第四步,经过BASE64解码处理后,得到需要后续处理的压缩二进制数据。继续对本段压缩二进制数据进行解压处理,解压缩实施方案基于113小节的第六步数据压缩方案完成,当解压缩处理失败,则放弃本段注释文本的可视化还原处理,并在本发明实施例的源代码编辑器中相应的位置显示可视化解码失败结果。如果本次数据解压缩处理成功,则继续完成本段可视化数据解码还原的后续处理。

118.完成数据解压缩之后,依据105小节的二进制头结构的定义,分解出本段二进制数据头结构信息数据,并从二进制头结构信息中提取本段可视化二进制数据ID标识符;可视化二进制数据通过ID标识符所表达的前后依赖关系;本段原始可视化二进制数据格式;本段二进制数据体长度;用于指定该可视化数据块的加密和显示输出权限的规范定义;可视化二进制数据输出引擎的寻址;用于对原始可视化二进制数据做完整性验证的校验码/哈希代码;等。

119.依据118小节中从二进制数据头结构中读取的本段二进制数据长度,以及117小节中解压缩出来的二进制数据体(不包括二进制头结构数据),并依据113小节中第四步的计算校验码/哈希代码的计算方法,计算出新的校验码/哈希代码,与118小节中从二进制数据头结构中读取的本段二进制数据校验码/哈希代码做完全性匹配对比,如果对比结果发生差异,则放弃本段注释文本的可视化还原处理,并在本发明实施例的源代码编辑器中相应的位置显示可视化解码失败结果。如果完全匹配对比结果发为相同,则继续完成本段可视化数据解码还原的后续处理。

120.完成对本阶段还原的二进制数据做校验匹配检查以后,确定了本阶段二进制数据为合法有效。继续118小节中从二进制数据头结构中读取的本段二进制数据的加密方式。依据109小节,以及113小节中第三步中所涉及的加密算法,对本阶段二进制数据做相应的解密计算处理。如果本次解密处理失败,或者相应给定的解密密钥非法,则放弃本段注释文本的可视化还原处理,并在本发明实施例的源代码编辑器中相应的位置显示可视化解码失败结果。如果本次数据解密处理成功,则继续完成本段可视化数据解码还原的后续处理。

121.本段可视化还原数据解密成功之后,依据118小节中从二进制数据头结构中读取的本段二进制数据的可视化显示输出权限定义,以及110小节中所涉及的可视化显示输出权限处理方式,对本段二进制数据可视化显示输出做相应的控制,当所定义的权限不允许当前指定的用户获得可视化显示输出结果,则放弃本段注释文本的可视化还原处理,并在本发明实施例的源代码编辑器中相应的位置显示因权限限制而无法可视化显示输出的信息。如果所定义权限为许可,则继续完成本段可视化数据解码还原的后续处理。

122.本阶段还原二进制数据得以确认可视化显示输出权限以后,对照111小节中所涉及二进制数据头结构中关于定义可视化二进制数据格式,以及与之相匹配的显示输出引擎,以此确定本段可视化二进制数据的具体输出格式以及显示输出引擎。同样依据111小节二进制数据头结构的规范定义,对本段可视化二进制数据显示输出引擎完成模块寻址。处理本段二进制数据可视化输出引擎的模块寻址确认完成以后,将120小节中完成解密计算处理的目标数据输入到可视化输出引擎的模块,并驱动可视化输出引擎,将引擎输出结果的可视化数据(如图片,图表,动画,等)嵌入在本发明实施例的源代码编辑器中。

图例说明

123.图1所示为可视化二进制数据的文本化处理过程。将多媒体可视化格式二进制数据进行加工,加密,压缩,生成校验码,BASE64再编码文本化,并将目标文本以源代码注释的方式插入到源代码文本中。图2所示为源代码注释数据还原并显示输出的过程。将源代码中以注释文本方式存储的可视化数据,经过解码,验证,解密,格式解析等处理,将目标数据以可视化输出的方式嵌入式显示在本发明实施例的源代码编辑器中相应的位置。

在后续的章节中,将对图1和图2中各个模块标识逐一做解释说明。

124.图例201:可视化二进制数据文本转换处理初始化模块。在此步骤将准备二进制数据头结构空间,依据105,106,107小节和113小节中的第一步处理,确定二进制数据块标识ID,以及与前后二进制数的依赖关系,并将其填入相应的二进制数据头结构栏位中。

125.图例202:原始可视化二进制数据格式分析模块。依据108,111小节和113小节中的第二步处理,完成二进制数据头结构中关于数据格式栏位的填充。

126.图例203:数据加密模块。依据109小节和113小节中的第三步处理,完成二进制数据加密,并将相关加密信息填充至二进制数据头结构相应的栏位中。

127.图例204:二进制数据可视化输出权限配置模块。依据110小节和113小节115小节定义的规范,完成二进制数据可视化输出的权限配置管理,并将相关配置信息填充至二进制数据头结构相应的栏位中。

128.图例205:二进制数据体校验码计算模块。依据112小节和113小节中的第四步处理,将生成的目标校验码填充至相应的二进制数据头结构栏位。

129.图例206:二进制数据压缩处理模块。依据113小节中的第五步和第六步的处理,完成目标二进制数据的压缩。

130.图例207:压缩二进制数据的文本化处理模块。依据113小节中的第七步的处理,将目标文本以及文本头信息以源代码注释的方式插入源代码中相应位置。

131.图例301:源代码中注释文本块输入模块。即为114小节中第一步和第二步,并依据115小结所定义的逻辑规范完成源代码中注释文本块的读取。并完成基本验证(图例302)以保证将将正确的本发明所要求的注释文本输入给后续模块处理。

132.图例302:源代码中注释文本块验证模块。依据113小节中的第七步以及115小节中所定义的规范,检查本段注释文本是否具有本发明所定义的特征。如果检查结果为否,就在本发明实施例的源代码编辑器中以既有的注释显示方式现在该注释文本块。即图例315的处理步骤。

133.图例303:源代码中注释文本块的BASE64解码模块。依据113小节中第七步所定义的BASE64编码规范,以及116小节中所定义的逻辑规范,完成BASE64解码处理。

134.图例304:注释文本块的BASE64解码检查验证模块。依据116小节定义,当BASE64解码处理失败,则放弃本段注释文本后续的可视化解码还原处理,跳转执行图例314的步骤。

135.图例305:二进制数据解压缩模块。依据117小节所定义的逻辑处理规范,完成二进制数据解压缩处理。

136.图例306:二进制数据解压缩验证模块。同样依据117小节逻辑处理规范,当解压缩计算处理发生错误或者异常,则放弃本段可视化数据解码还原的后续处理,跳转执行图例314的步骤。

137.图例307:可视化二进制数据完整性检查模块。依据112小节,113小节第四步,以及119小节所定义的技术规范,完成对图例305模块解压缩产生的二进制数据做完整性检查。

138.图例308:检查二进制数据解压缩验证结果模块。依据119小节所定义的判断标准,检查本段二进制数据是否完整,如果检查结果不完整,则放弃本段可视化数据解码还原的后续处理,跳转执行图例314的步骤。

139.图例309:二进制数据解密模块。依据109小节,113小节中第三步,以及120小节中所叙述的解密算法逻辑规范,完成对本段二进制数据的解密处理。

140.图例310:二进制数据解密验证模块。在处理图例309的解密逻辑过程时,如果发生二进制数据解密计算错误或者异常,则放弃本段可视化数据解码还原的后续处理,跳转执行图例314的步骤。

141.图例311:二进制数据可视化输出权限管理模块。依据110小节,121小节中所叙述的对二进制数据可视化输出权限的定义,对本段二进制数据可视化输出作相应的管理处理。

142.图例312:二进制数据可视化输出权限逻辑判断模块。依据图例311步骤关于二进制数据可视化输出权限判断结果,决定是否可视化输出显示本段二进制数据,如果不允许,则放弃本段可视化数据解码还原的后续处理,跳转执行图例314的步骤。

143.图例313:可视化二进制数据显示输出模块。依据108,111,122小节中关于可视化二进制数据解码输出引擎的定义规范,选择与本段可视化二进制数据格式相匹配的解码处理引擎。并启动解码输出处理引擎,将本段可视化二进制数据通过该处理殷勤转换成目标可视化数据(如图像,图表,等格式数据),以嵌入式显示输出的方式插入到本发明实施例的源代码编辑器中相应的位置。当解码输出引擎在处理过程中发生错误或者异常时,则跳转至图例314的步骤执行。

144.图例314:异常发生显示输出模块。当本段可视化数据在解码还原过程中发生任何错误或者异常,都将跳转至本步骤,在本发明实施例的源代码编辑器中相应的位置显示输出错误或者异常的原因。

145.图例315:结束本段源代码注释文本解析还原的处理,以原始既有的注释输出的方式在本发明实施例的编辑器中显示。

本文发布于:2024-09-24 22:34:18,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/73177.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议