From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 0570E20D2C3B9 for ; Sun, 26 Mar 2017 20:15:05 -0700 (PDT) Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga105.fm.intel.com with ESMTP; 26 Mar 2017 20:15:05 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.36,229,1486454400"; d="scan'208";a="240573190" Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by fmsmga004.fm.intel.com with ESMTP; 26 Mar 2017 20:15:05 -0700 Received: from shsmsx104.ccr.corp.intel.com (10.239.4.70) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.319.2; Sun, 26 Mar 2017 20:15:05 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.212]) by SHSMSX104.ccr.corp.intel.com ([169.254.5.42]) with mapi id 14.03.0248.002; Mon, 27 Mar 2017 11:15:03 +0800 From: "Gao, Liming" To: "Song, BinX" , "edk2-devel@lists.01.org" Thread-Topic: [PATCH 0/4] MdeModulePkg/BaseTools: Add Brotli algorithm support Thread-Index: AdKje2IGWfmZZMxkSjelhcwoU5rPMQAHwqSAAMN3eiA= Date: Mon, 27 Mar 2017 03:15:02 +0000 Message-ID: <4A89E2EF3DFEDB4C8BFDE51014F606A14D702B64@shsmsx102.ccr.corp.intel.com> References: <559D2DF22BC9A3468B4FA1AA547F0EF102545F29@shsmsx102.ccr.corp.intel.com> <559D2DF22BC9A3468B4FA1AA547F0EF10254603B@shsmsx102.ccr.corp.intel.com> In-Reply-To: <559D2DF22BC9A3468B4FA1AA547F0EF10254603B@shsmsx102.ccr.corp.intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH 0/4] MdeModulePkg/BaseTools: Add Brotli algorithm support X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 27 Mar 2017 03:15:06 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Liming Gao >-----Original Message----- >From: Song, BinX >Sent: Thursday, March 23, 2017 2:05 PM >To: edk2-devel@lists.01.org >Cc: Gao, Liming >Subject: RE: [PATCH 0/4] MdeModulePkg/BaseTools: Add Brotli algorithm >support > >Hi All, > >The code is also in https://github.com/binxsong/edk2/tree/Brotli_V1 > >Best Regards, >Bell Song > >> -----Original Message----- >> From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of >Song, >> BinX >> Sent: Thursday, March 23, 2017 10:16 AM >> To: edk2-devel@lists.01.org >> Cc: Gao, Liming >> Subject: [edk2] [PATCH 0/4] MdeModulePkg/BaseTools: Add Brotli >algorithm >> support >> >> Brotli algorithm was released on the website >https://github.com/google/brotli. >> It has a little less compress ratio than Lzma, but has better decompress >> performance than it. >> Add Brotli algorithm support, include Brotli decompression library and t= ool >set. >> >> Tested on: >> OS: Windows >> Arch: IA32/X64 >> Platform: Nt32Pkg >> ToolChain: VS2015x86 >> Target: Release >> >> OS: Ubuntu >> Arch: IA32/X64 >> Platform: OvmfPkgIa32.dsc/OvmfPkgX64.dsc >> ToolChain: GCC5 >> Target: Release >> >> Cc: Liming Gao >> Contributed-under: TianoCore Contribution Agreement 1.0 >> Signed-off-by: Bell Song >> >> Bell Song (4): >> MdeModulePkg: Copy Brotli algorithm 3rd party source code for library >> MdeModulePkg: Add Brotli algorithm decompression library >> BaseTools: Copy Brotli algorithm 3rd party source code for tool >> BaseTools: Add Brotli algorithm tool >> >> BaseTools/BinWrappers/PosixLike/Brotli | 29 + >> BaseTools/BinWrappers/PosixLike/BrotliCompress | 42 + >> BaseTools/Conf/tools_def.template | 6 + >> .../Source/C/BrotliCompress/BrotliCompress.bat | 48 + >> BaseTools/Source/C/BrotliCompress/GNUmakefile | 43 + >> BaseTools/Source/C/BrotliCompress/LICENSE | 19 + >> BaseTools/Source/C/BrotliCompress/Makefile | 60 + >> BaseTools/Source/C/BrotliCompress/README.md | 26 + >> BaseTools/Source/C/BrotliCompress/ReadMe.txt | 2 + >> .../Source/C/BrotliCompress/common/constants.h | 47 + >> .../Source/C/BrotliCompress/common/dictionary.c | 9474 >> ++++++++++++++++ >> .../Source/C/BrotliCompress/common/dictionary.h | 29 + >> BaseTools/Source/C/BrotliCompress/common/port.h | 107 + >> BaseTools/Source/C/BrotliCompress/common/types.h | 58 + >> BaseTools/Source/C/BrotliCompress/dec/bit_reader.c | 48 + >> BaseTools/Source/C/BrotliCompress/dec/bit_reader.h | 383 + >> BaseTools/Source/C/BrotliCompress/dec/context.h | 251 + >> BaseTools/Source/C/BrotliCompress/dec/decode.c | 2347 ++++ >> BaseTools/Source/C/BrotliCompress/dec/decode.h | 188 + >> BaseTools/Source/C/BrotliCompress/dec/huffman.c | 357 + >> BaseTools/Source/C/BrotliCompress/dec/huffman.h | 68 + >> BaseTools/Source/C/BrotliCompress/dec/port.h | 159 + >> BaseTools/Source/C/BrotliCompress/dec/prefix.h | 751 ++ >> BaseTools/Source/C/BrotliCompress/dec/state.c | 168 + >> BaseTools/Source/C/BrotliCompress/dec/state.h | 246 + >> BaseTools/Source/C/BrotliCompress/dec/transform.h | 300 + >> .../docs/brotli-comparison-study-2015-09-22.pdf | Bin 0 -> 215208 = bytes >> .../C/BrotliCompress/enc/backward_references.c | 892 ++ >> .../C/BrotliCompress/enc/backward_references.h | 99 + >> .../C/BrotliCompress/enc/backward_references_inc.h | 147 + >> BaseTools/Source/C/BrotliCompress/enc/bit_cost.c | 35 + >> BaseTools/Source/C/BrotliCompress/enc/bit_cost.h | 63 + >> .../Source/C/BrotliCompress/enc/bit_cost_inc.h | 127 + >> .../C/BrotliCompress/enc/block_encoder_inc.h | 33 + >> .../Source/C/BrotliCompress/enc/block_splitter.c | 197 + >> .../Source/C/BrotliCompress/enc/block_splitter.h | 51 + >> .../C/BrotliCompress/enc/block_splitter_inc.h | 432 + >> .../C/BrotliCompress/enc/brotli_bit_stream.c | 1334 +++ >> .../C/BrotliCompress/enc/brotli_bit_stream.h | 107 + >> BaseTools/Source/C/BrotliCompress/enc/cluster.c | 56 + >> BaseTools/Source/C/BrotliCompress/enc/cluster.h | 48 + >> .../Source/C/BrotliCompress/enc/cluster_inc.h | 315 + >> BaseTools/Source/C/BrotliCompress/enc/command.h | 163 + >> .../C/BrotliCompress/enc/compress_fragment.c | 747 ++ >> .../C/BrotliCompress/enc/compress_fragment.h | 58 + >> .../enc/compress_fragment_two_pass.c | 557 + >> .../enc/compress_fragment_two_pass.h | 51 + >> BaseTools/Source/C/BrotliCompress/enc/compressor.h | 161 + >> BaseTools/Source/C/BrotliCompress/enc/context.h | 184 + >> .../Source/C/BrotliCompress/enc/dictionary_hash.h | 4121 +++++++ >> BaseTools/Source/C/BrotliCompress/enc/encode.c | 1562 +++ >> BaseTools/Source/C/BrotliCompress/enc/encode.h | 221 + >> .../Source/C/BrotliCompress/enc/encode_parallel.h | 27 + >> .../Source/C/BrotliCompress/enc/entropy_encode.c | 501 + >> .../Source/C/BrotliCompress/enc/entropy_encode.h | 122 + >> .../C/BrotliCompress/enc/entropy_encode_static.h | 539 + >> BaseTools/Source/C/BrotliCompress/enc/fast_log.h | 145 + >> .../C/BrotliCompress/enc/find_match_length.h | 80 + >> BaseTools/Source/C/BrotliCompress/enc/hash.h | 717 ++ >> .../BrotliCompress/enc/hash_forgetful_chain_inc.h | 249 + >> .../C/BrotliCompress/enc/hash_longest_match_inc.h | 241 + >> .../enc/hash_longest_match_quickly_inc.h | 230 + >> BaseTools/Source/C/BrotliCompress/enc/histogram.c | 95 + >> BaseTools/Source/C/BrotliCompress/enc/histogram.h | 60 + >> .../Source/C/BrotliCompress/enc/histogram_inc.h | 51 + >> .../Source/C/BrotliCompress/enc/literal_cost.c | 178 + >> .../Source/C/BrotliCompress/enc/literal_cost.h | 30 + >> BaseTools/Source/C/BrotliCompress/enc/memory.c | 181 + >> BaseTools/Source/C/BrotliCompress/enc/memory.h | 62 + >> BaseTools/Source/C/BrotliCompress/enc/metablock.c | 515 + >> BaseTools/Source/C/BrotliCompress/enc/metablock.h | 110 + >> .../Source/C/BrotliCompress/enc/metablock_inc.h | 183 + >> BaseTools/Source/C/BrotliCompress/enc/port.h | 168 + >> BaseTools/Source/C/BrotliCompress/enc/prefix.h | 52 + >> BaseTools/Source/C/BrotliCompress/enc/quality.h | 130 + >> BaseTools/Source/C/BrotliCompress/enc/ringbuffer.h | 160 + >> .../Source/C/BrotliCompress/enc/static_dict.c | 478 + >> .../Source/C/BrotliCompress/enc/static_dict.h | 37 + >> .../Source/C/BrotliCompress/enc/static_dict_lut.h | 11241 >> +++++++++++++++++++ >> BaseTools/Source/C/BrotliCompress/enc/streams.h | 121 + >> BaseTools/Source/C/BrotliCompress/enc/utf8_util.c | 85 + >> BaseTools/Source/C/BrotliCompress/enc/utf8_util.h | 32 + >> BaseTools/Source/C/BrotliCompress/enc/write_bits.h | 90 + >> BaseTools/Source/C/BrotliCompress/tools/bro.c | 538 + >> BaseTools/Source/C/BrotliCompress/tools/version.h | 14 + >> BaseTools/Source/C/GNUmakefile | 1 + >> BaseTools/Source/C/Makefile | 1 + >> .../BrotliCustomDecompressLib.inf | 56 + >> .../BrotliCustomDecompressLib/BrotliDecompress.c | 321 + >> .../BrotliDecompressLib.uni | 21 + >> .../BrotliDecompressLibInternal.h | 71 + >> .../GuidedSectionExtraction.c | 196 + >> .../Library/BrotliCustomDecompressLib/LICENSE | 19 + >> .../Library/BrotliCustomDecompressLib/README.md | 26 + >> .../Library/BrotliCustomDecompressLib/ReadMe.txt | 2 + >> .../BrotliCustomDecompressLib/common/constants.h | 47 + >> .../BrotliCustomDecompressLib/common/dictionary.c | 9474 >> ++++++++++++++++ >> .../BrotliCustomDecompressLib/common/dictionary.h | 29 + >> .../BrotliCustomDecompressLib/common/port.h | 107 + >> .../BrotliCustomDecompressLib/common/types.h | 72 + >> .../BrotliCustomDecompressLib/dec/bit_reader.c | 48 + >> .../BrotliCustomDecompressLib/dec/bit_reader.h | 384 + >> .../BrotliCustomDecompressLib/dec/context.h | 251 + >> .../Library/BrotliCustomDecompressLib/dec/decode.c | 2348 ++++ >> .../Library/BrotliCustomDecompressLib/dec/decode.h | 188 + >> .../BrotliCustomDecompressLib/dec/huffman.c | 357 + >> .../BrotliCustomDecompressLib/dec/huffman.h | 69 + >> .../Library/BrotliCustomDecompressLib/dec/port.h | 159 + >> .../Library/BrotliCustomDecompressLib/dec/prefix.h | 751 ++ >> .../Library/BrotliCustomDecompressLib/dec/state.c | 169 + >> .../Library/BrotliCustomDecompressLib/dec/state.h | 246 + >> .../BrotliCustomDecompressLib/dec/transform.h | 300 + >> .../docs/brotli-comparison-study-2015-09-22.pdf | Bin 0 -> 215208 = bytes >> MdeModulePkg/MdeModulePkg.dec | 3 + >> MdeModulePkg/MdeModulePkg.dsc | 1 + >> 115 files changed, 60196 insertions(+) >> create mode 100644 BaseTools/BinWrappers/PosixLike/Brotli >> create mode 100644 BaseTools/BinWrappers/PosixLike/BrotliCompress >> create mode 100644 >BaseTools/Source/C/BrotliCompress/BrotliCompress.bat >> create mode 100644 BaseTools/Source/C/BrotliCompress/GNUmakefile >> create mode 100644 BaseTools/Source/C/BrotliCompress/LICENSE >> create mode 100644 BaseTools/Source/C/BrotliCompress/Makefile >> create mode 100644 BaseTools/Source/C/BrotliCompress/README.md >> create mode 100644 BaseTools/Source/C/BrotliCompress/ReadMe.txt >> create mode 100644 >> BaseTools/Source/C/BrotliCompress/common/constants.h >> create mode 100644 >> BaseTools/Source/C/BrotliCompress/common/dictionary.c >> create mode 100644 >> BaseTools/Source/C/BrotliCompress/common/dictionary.h >> create mode 100644 BaseTools/Source/C/BrotliCompress/common/port.h >> create mode 100644 BaseTools/Source/C/BrotliCompress/common/types.h >> create mode 100644 BaseTools/Source/C/BrotliCompress/dec/bit_reader.c >> create mode 100644 BaseTools/Source/C/BrotliCompress/dec/bit_reader.h >> create mode 100644 BaseTools/Source/C/BrotliCompress/dec/context.h >> create mode 100644 BaseTools/Source/C/BrotliCompress/dec/decode.c >> create mode 100644 BaseTools/Source/C/BrotliCompress/dec/decode.h >> create mode 100644 BaseTools/Source/C/BrotliCompress/dec/huffman.c >> create mode 100644 BaseTools/Source/C/BrotliCompress/dec/huffman.h >> create mode 100644 BaseTools/Source/C/BrotliCompress/dec/port.h >> create mode 100644 BaseTools/Source/C/BrotliCompress/dec/prefix.h >> create mode 100644 BaseTools/Source/C/BrotliCompress/dec/state.c >> create mode 100644 BaseTools/Source/C/BrotliCompress/dec/state.h >> create mode 100644 BaseTools/Source/C/BrotliCompress/dec/transform.h >> create mode 100644 BaseTools/Source/C/BrotliCompress/docs/brotli- >> comparison-study-2015-09-22.pdf >> create mode 100644 >> BaseTools/Source/C/BrotliCompress/enc/backward_references.c >> create mode 100644 >> BaseTools/Source/C/BrotliCompress/enc/backward_references.h >> create mode 100644 >> BaseTools/Source/C/BrotliCompress/enc/backward_references_inc.h >> create mode 100644 BaseTools/Source/C/BrotliCompress/enc/bit_cost.c >> create mode 100644 BaseTools/Source/C/BrotliCompress/enc/bit_cost.h >> create mode 100644 >BaseTools/Source/C/BrotliCompress/enc/bit_cost_inc.h >> create mode 100644 >> BaseTools/Source/C/BrotliCompress/enc/block_encoder_inc.h >> create mode 100644 >BaseTools/Source/C/BrotliCompress/enc/block_splitter.c >> create mode 100644 >BaseTools/Source/C/BrotliCompress/enc/block_splitter.h >> create mode 100644 >> BaseTools/Source/C/BrotliCompress/enc/block_splitter_inc.h >> create mode 100644 >> BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.c >> create mode 100644 >> BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.h >> create mode 100644 BaseTools/Source/C/BrotliCompress/enc/cluster.c >> create mode 100644 BaseTools/Source/C/BrotliCompress/enc/cluster.h >> create mode 100644 BaseTools/Source/C/BrotliCompress/enc/cluster_inc.h >> create mode 100644 BaseTools/Source/C/BrotliCompress/enc/command.h >> create mode 100644 >> BaseTools/Source/C/BrotliCompress/enc/compress_fragment.c >> create mode 100644 >> BaseTools/Source/C/BrotliCompress/enc/compress_fragment.h >> create mode 100644 >> BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.c >> create mode 100644 >> BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.h >> create mode 100644 >BaseTools/Source/C/BrotliCompress/enc/compressor.h >> create mode 100644 BaseTools/Source/C/BrotliCompress/enc/context.h >> create mode 100644 >> BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.h >> create mode 100644 BaseTools/Source/C/BrotliCompress/enc/encode.c >> create mode 100644 BaseTools/Source/C/BrotliCompress/enc/encode.h >> create mode 100644 >> BaseTools/Source/C/BrotliCompress/enc/encode_parallel.h >> create mode 100644 >> BaseTools/Source/C/BrotliCompress/enc/entropy_encode.c >> create mode 100644 >> BaseTools/Source/C/BrotliCompress/enc/entropy_encode.h >> create mode 100644 >> BaseTools/Source/C/BrotliCompress/enc/entropy_encode_static.h >> create mode 100644 BaseTools/Source/C/BrotliCompress/enc/fast_log.h >> create mode 100644 >> BaseTools/Source/C/BrotliCompress/enc/find_match_length.h >> create mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash.h >> create mode 100644 >> BaseTools/Source/C/BrotliCompress/enc/hash_forgetful_chain_inc.h >> create mode 100644 >> BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_inc.h >> create mode 100644 >> >BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_quickly_inc.h >> create mode 100644 BaseTools/Source/C/BrotliCompress/enc/histogram.c >> create mode 100644 BaseTools/Source/C/BrotliCompress/enc/histogram.h >> create mode 100644 >BaseTools/Source/C/BrotliCompress/enc/histogram_inc.h >> create mode 100644 BaseTools/Source/C/BrotliCompress/enc/literal_cost.c >> create mode 100644 BaseTools/Source/C/BrotliCompress/enc/literal_cost.h >> create mode 100644 BaseTools/Source/C/BrotliCompress/enc/memory.c >> create mode 100644 BaseTools/Source/C/BrotliCompress/enc/memory.h >> create mode 100644 BaseTools/Source/C/BrotliCompress/enc/metablock.c >> create mode 100644 BaseTools/Source/C/BrotliCompress/enc/metablock.h >> create mode 100644 >> BaseTools/Source/C/BrotliCompress/enc/metablock_inc.h >> create mode 100644 BaseTools/Source/C/BrotliCompress/enc/port.h >> create mode 100644 BaseTools/Source/C/BrotliCompress/enc/prefix.h >> create mode 100644 BaseTools/Source/C/BrotliCompress/enc/quality.h >> create mode 100644 BaseTools/Source/C/BrotliCompress/enc/ringbuffer.h >> create mode 100644 BaseTools/Source/C/BrotliCompress/enc/static_dict.c >> create mode 100644 BaseTools/Source/C/BrotliCompress/enc/static_dict.h >> create mode 100644 >BaseTools/Source/C/BrotliCompress/enc/static_dict_lut.h >> create mode 100644 BaseTools/Source/C/BrotliCompress/enc/streams.h >> create mode 100644 BaseTools/Source/C/BrotliCompress/enc/utf8_util.c >> create mode 100644 BaseTools/Source/C/BrotliCompress/enc/utf8_util.h >> create mode 100644 BaseTools/Source/C/BrotliCompress/enc/write_bits.h >> create mode 100644 BaseTools/Source/C/BrotliCompress/tools/bro.c >> create mode 100644 BaseTools/Source/C/BrotliCompress/tools/version.h >> create mode 100644 >> >MdeModulePkg/Library/BrotliCustomDecompressLib/BrotliCustomDecompre >ss >> Lib.inf >> create mode 100644 >> MdeModulePkg/Library/BrotliCustomDecompressLib/BrotliDecompress.c >> create mode 100644 >> >MdeModulePkg/Library/BrotliCustomDecompressLib/BrotliDecompressLib.un >i >> create mode 100644 >> >MdeModulePkg/Library/BrotliCustomDecompressLib/BrotliDecompressLibInt >er >> nal.h >> create mode 100644 >> >MdeModulePkg/Library/BrotliCustomDecompressLib/GuidedSectionExtractio >n. >> c >> create mode 100644 >> MdeModulePkg/Library/BrotliCustomDecompressLib/LICENSE >> create mode 100644 >> MdeModulePkg/Library/BrotliCustomDecompressLib/README.md >> create mode 100644 >> MdeModulePkg/Library/BrotliCustomDecompressLib/ReadMe.txt >> create mode 100644 >> MdeModulePkg/Library/BrotliCustomDecompressLib/common/constants.h >> create mode 100644 >> MdeModulePkg/Library/BrotliCustomDecompressLib/common/dictionary.c >> create mode 100644 >> MdeModulePkg/Library/BrotliCustomDecompressLib/common/dictionary.h >> create mode 100644 >> MdeModulePkg/Library/BrotliCustomDecompressLib/common/port.h >> create mode 100644 >> MdeModulePkg/Library/BrotliCustomDecompressLib/common/types.h >> create mode 100644 >> MdeModulePkg/Library/BrotliCustomDecompressLib/dec/bit_reader.c >> create mode 100644 >> MdeModulePkg/Library/BrotliCustomDecompressLib/dec/bit_reader.h >> create mode 100644 >> MdeModulePkg/Library/BrotliCustomDecompressLib/dec/context.h >> create mode 100644 >> MdeModulePkg/Library/BrotliCustomDecompressLib/dec/decode.c >> create mode 100644 >> MdeModulePkg/Library/BrotliCustomDecompressLib/dec/decode.h >> create mode 100644 >> MdeModulePkg/Library/BrotliCustomDecompressLib/dec/huffman.c >> create mode 100644 >> MdeModulePkg/Library/BrotliCustomDecompressLib/dec/huffman.h >> create mode 100644 >> MdeModulePkg/Library/BrotliCustomDecompressLib/dec/port.h >> create mode 100644 >> MdeModulePkg/Library/BrotliCustomDecompressLib/dec/prefix.h >> create mode 100644 >> MdeModulePkg/Library/BrotliCustomDecompressLib/dec/state.c >> create mode 100644 >> MdeModulePkg/Library/BrotliCustomDecompressLib/dec/state.h >> create mode 100644 >> MdeModulePkg/Library/BrotliCustomDecompressLib/dec/transform.h >> create mode 100644 >> MdeModulePkg/Library/BrotliCustomDecompressLib/docs/brotli- >comparison- >> study-2015-09-22.pdf >> >> -- >> 2.10.2.windows.1 >> >> _______________________________________________ >> edk2-devel mailing list >> edk2-devel@lists.01.org >> https://lists.01.org/mailman/listinfo/edk2-devel