From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Paul Eggert Newsgroups: gmane.emacs.devel Subject: Re: Bug#38708: eq vs eql in byte-compiled code Date: Wed, 1 Jan 2020 23:52:12 -0800 Organization: UCLA Computer Science Department Message-ID: <1e0940ff-e418-bafc-66d3-72b562b2c65b@cs.ucla.edu> References: <8cd1b5b2-b94e-ce64-0d70-c1b8b012d685@cs.ucla.edu> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------04D02DF01CA5FBF8F39F5F4F" Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="20409"; mail-complaints-to="usenet@blaine.gmane.org" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.2.2 Cc: =?UTF-8?Q?Mattias_Engdeg=c3=a5rd?= , Pip Cet , emacs-devel@gnu.org To: Stefan Monnier Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Thu Jan 02 08:55:48 2020 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([209.51.188.17]) by blaine.gmane.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1imvKd-00055f-Lx for ged-emacs-devel@m.gmane.org; Thu, 02 Jan 2020 08:55:47 +0100 Original-Received: from localhost ([::1]:38014 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1imvKb-0007Uc-JN for ged-emacs-devel@m.gmane.org; Thu, 02 Jan 2020 02:55:45 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:37021) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1imvHI-0003So-Or for emacs-devel@gnu.org; Thu, 02 Jan 2020 02:52:22 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1imvHG-0005Ta-2L for emacs-devel@gnu.org; Thu, 02 Jan 2020 02:52:20 -0500 Original-Received: from zimbra.cs.ucla.edu ([131.179.128.68]:60728) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1imvHF-0005Sw-Nx for emacs-devel@gnu.org; Thu, 02 Jan 2020 02:52:18 -0500 Original-Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 772D6160054; Wed, 1 Jan 2020 23:52:15 -0800 (PST) Original-Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id 6BKeMIT3HFXs; Wed, 1 Jan 2020 23:52:13 -0800 (PST) Original-Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 714D7160058; Wed, 1 Jan 2020 23:52:13 -0800 (PST) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Original-Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id z78G5gh_jCM0; Wed, 1 Jan 2020 23:52:13 -0800 (PST) Original-Received: from [192.168.1.9] (cpe-23-242-74-103.socal.res.rr.com [23.242.74.103]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 3C21A160054; Wed, 1 Jan 2020 23:52:13 -0800 (PST) In-Reply-To: Content-Language: en-US X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 131.179.128.68 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:243853 Archived-At: This is a multi-part message in MIME format. --------------04D02DF01CA5FBF8F39F5F4F Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit On 1/1/20 7:45 AM, Stefan Monnier wrote: > We could/should do hash-consing of bignums, tho. It won't affect code > that doesn't use bignums, and should have a fairly minor performance > cost for bignums while making their semantics more clean. I did that, and surprise! it sped up 'make compile-always' by about 7% on the two platforms I tried it on (Fedora 31 and Ubuntu 18.04.3, both x86-64). Although hash-consing of bignums slows down computations that do nothing but generate new bignums (a slowdown of 38% on my microbenchmark) such computations are reasonably rare, and the benefit having 'eq' be more-compatible with traditional Emacs (as well as the abovementioned speedup in more-typical code) seems to make this tradeoff well worthwhile. Code patch against Emacs master attached. Given the performance boost, at least this should go into master; not so sure about emacs-27, though (pro: eq is more compatible; con: it's a last-minute change to emacs-27). Two or three issues: * Should we document that eq == eql on bignums, or continue to leave this stuff unspecified? * Should we try hash-consing floats too? Maybe it wouldn't be as slow as we thought, for typical computations anyway.... * The attached patch could probably be sped up a bit by supporting sets as well as mappings at the low level, since bignum_map is really just a set of bignums. Not sure it's worth the effort, though. --------------04D02DF01CA5FBF8F39F5F4F Content-Type: text/plain; charset=UTF-8; name="0001-Hash-cons-bignums.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0001-Hash-cons-bignums.txt" RnJvbSAyY2MyZDM0YTRmMGZlODY2NzE0ZjA2MmRkZTdiZmNjNDg1YjNiOWU0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQYXVsIEVnZ2VydCA8ZWdnZXJ0QGNzLnVjbGEuZWR1 PgpEYXRlOiBXZWQsIDEgSmFuIDIwMjAgMjM6MTg6NTggLTA4MDAKU3ViamVjdDogW1BBVENI XSBIYXNoLWNvbnMgYmlnbnVtcwpNSU1FLVZlcnNpb246IDEuMApDb250ZW50LVR5cGU6IHRl eHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJp dAoKU3VnZ2VzdGVkIGJ5IFN0ZWZhbiBNb25uaWVyIGluOgpodHRwczovL2xpc3RzLmdudS5v cmcvci9lbWFjcy1kZXZlbC8yMDIwLTAxL21zZzAwMDEwLmh0bWwKVGhpcyBpbXByb3ZlcyBw ZXJmb3JtYW5jZSBvZiDigJhtYWtlIGNvbXBpbGUtYWx3YXlz4oCZCmJ5IGFib3V0IDclIG9u IG15IHBsYXRmb3JtICh4ODYtNjQgVWJ1bnR1IDE4LjA0LjMpLgoqIHNyYy9hbGxvYy5jICht YWtlX3B1cmVfYmlnbnVtKTogUmVtb3ZlLCBhcyB3ZSBjYW7igJl0IGNvcHkgKG11Y2gKbGVz cyBwdXJlY29weSkgYmlnbnVtcyBhbnkgbW9yZS4gIENhbGxlciByZW1vdmVkLgoqIHNyYy9i aWdudW0uYyAobWFrZV9iaWdudW1fYml0cyk6IE1ha2Ugc3VyZSB0aGUgcmVzdWx0IGlzIHVu aXF1ZS4KKG1ha2VfYmlnbnVtX3N0cik6IExldCBtYWtlX2JpZ251bSBkbyB0aGUgd29yay4g IEFsc28sIHRoaXMKY2hlY2tzIGFnYWluc3QgY29udmVydGluZyBhIHN0cmluZyB0byBhIHRv by1iaWcgYmlnbnVtLgoqIHNyYy9mbnMuYyAoRm1lbXFsLCBGZXFsLCBpbnRlcm5hbF9lcXVh bCwgaGFzaGZuX2VxbCk6Ckp1c3QgdXNlIGVxIHRvIGNvbXBhcmUgYmlnbnVtcy4KKHN4aGFz aF9tcHopOiBSZW5hbWUgZnJvbSBzeGhhc2hfYmlnbnVtIGFuZCBjaGFuZ2UgdGhlIGFyZ3Vt ZW50CnRvIG1wel90IGNvbnN0ICouICBDYWxsZXIgY2hhbmdlZC4KKHN4aGFzaCk6IE5vIG5l ZWQgdG8gdHJlYXQgYmlnbnVtcyBzcGVjaWFsbHkgYW55IG1vcmUuCihiaWdudW1fbWFwKTog TmV3IHN0YXRpYyB2YXJpYWJsZS4KKG1ha2VfdW5pcXVlX2JpZ251bSk6IE5ldyBmdW5jdGlv biwgd2hpY2ggdXNlcyBzeGhhc2hfbXB6Lgooc3ltc19vZl9mbnMpOiBJbml0aWFsaXplIGJp Z251bV9tYXAuCiogc3JjL3BkdW1wZXIuYyAoZHVtcF9oYXNoX3RhYmxlX3N0YWJsZV9wKToK QmlnbnVtcyBhcmUgc3RhYmxlIGtleXMgbm93LgotLS0KIHNyYy9hbGxvYy5jICAgfCAgMzEg LS0tLS0tLS0tLS0tLS0tLQogc3JjL2JpZ251bS5jICB8ICAxNCArKy0tLS0tCiBzcmMvZm5z LmMgICAgIHwgMTAwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0t LS0tLS0tLS0tCiBzcmMvbGlzcC5oICAgIHwgICAxICsKIHNyYy9wZHVtcGVyLmMgfCAgIDUg Ky0tCiA1IGZpbGVzIGNoYW5nZWQsIDY4IGluc2VydGlvbnMoKyksIDgzIGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL3NyYy9hbGxvYy5jIGIvc3JjL2FsbG9jLmMKaW5kZXggMWM2YjY2 NGIyMi4uNmEyYWU2ZjZkNSAxMDA2NDQKLS0tIGEvc3JjL2FsbG9jLmMKKysrIGIvc3JjL2Fs bG9jLmMKQEAgLTUyNzksMzUgKzUyNzksNiBAQCBtYWtlX3B1cmVfZmxvYXQgKGRvdWJsZSBu dW0pCiAgIHJldHVybiBuZXc7CiB9CiAKLS8qIFZhbHVlIGlzIGEgYmlnbnVtIG9iamVjdCB3 aXRoIHZhbHVlIFZBTFVFIGFsbG9jYXRlZCBmcm9tIHB1cmUKLSAgIHNwYWNlLiAgKi8KLQot c3RhdGljIExpc3BfT2JqZWN0Ci1tYWtlX3B1cmVfYmlnbnVtIChMaXNwX09iamVjdCB2YWx1 ZSkKLXsKLSAgbXB6X3QgY29uc3QgKm4gPSB4YmlnbnVtX3ZhbCAodmFsdWUpOwotICBzaXpl X3QgaSwgbmxpbWJzID0gbXB6X3NpemUgKCpuKTsKLSAgc2l6ZV90IG5ieXRlcyA9IG5saW1i cyAqIHNpemVvZiAobXBfbGltYl90KTsKLSAgbXBfbGltYl90ICpwdXJlX2xpbWJzOwotICBt cF9zaXplX3QgbmV3X3NpemU7Ci0KLSAgc3RydWN0IExpc3BfQmlnbnVtICpiID0gcHVyZV9h bGxvYyAoc2l6ZW9mICpiLCBMaXNwX1ZlY3Rvcmxpa2UpOwotICBYU0VUUFZFQ1RZUEVTSVpF IChiLCBQVkVDX0JJR05VTSwgMCwgVkVDU0laRSAoc3RydWN0IExpc3BfQmlnbnVtKSk7Ci0K LSAgaW50IGxpbWJfYWxpZ25tZW50ID0gYWxpZ25vZiAobXBfbGltYl90KTsKLSAgcHVyZV9s aW1icyA9IHB1cmVfYWxsb2MgKG5ieXRlcywgLSBsaW1iX2FsaWdubWVudCk7Ci0gIGZvciAo aSA9IDA7IGkgPCBubGltYnM7ICsraSkKLSAgICBwdXJlX2xpbWJzW2ldID0gbXB6X2dldGxp bWJuICgqbiwgaSk7Ci0KLSAgbmV3X3NpemUgPSBubGltYnM7Ci0gIGlmIChtcHpfc2duICgq bikgPCAwKQotICAgIG5ld19zaXplID0gLW5ld19zaXplOwotCi0gIG1wel9yb2luaXRfbiAo Yi0+dmFsdWUsIHB1cmVfbGltYnMsIG5ld19zaXplKTsKLQotICByZXR1cm4gbWFrZV9saXNw X3B0ciAoYiwgTGlzcF9WZWN0b3JsaWtlKTsKLX0KLQogLyogUmV0dXJuIGEgdmVjdG9yIHdp dGggcm9vbSBmb3IgTEVOIExpc3BfT2JqZWN0cyBhbGxvY2F0ZWQgZnJvbQogICAgcHVyZSBz cGFjZS4gICovCiAKQEAgLTU0NDksOCArNTQyMCw2IEBAIHB1cmVjb3B5IChMaXNwX09iamVj dCBvYmopCiAgICAgICAvKiBEb24ndCBoYXNoLWNvbnMgaXQuICAqLwogICAgICAgcmV0dXJu IG9iajsKICAgICB9Ci0gIGVsc2UgaWYgKEJJR05VTVAgKG9iaikpCi0gICAgb2JqID0gbWFr ZV9wdXJlX2JpZ251bSAob2JqKTsKICAgZWxzZQogICAgIHsKICAgICAgIEFVVE9fU1RSSU5H IChmbXQsICJEb24ndCBrbm93IGhvdyB0byBwdXJpZnk6ICVTIik7CmRpZmYgLS1naXQgYS9z cmMvYmlnbnVtLmMgYi9zcmMvYmlnbnVtLmMKaW5kZXggNTFkOTBmZmFlZi4uMGUzZjVkYjhk OSAxMDA2NDQKLS0tIGEvc3JjL2JpZ251bS5jCisrKyBiL3NyYy9iaWdudW0uYwpAQCAtODks MTIgKzg5LDcgQEAgbWFrZV9iaWdudW1fYml0cyAoc2l6ZV90IGJpdHMpCiAgICAgIHRpbWVz dGFtcHMuICAqLwogICBpZiAoaW50ZWdlcl93aWR0aCA8IGJpdHMgJiYgMiAqIG1heCAoSU5U TUFYX1dJRFRILCBVSU5UTUFYX1dJRFRIKSA8IGJpdHMpCiAgICAgb3ZlcmZsb3dfZXJyb3Ig KCk7Ci0KLSAgc3RydWN0IExpc3BfQmlnbnVtICpiID0gQUxMT0NBVEVfUExBSU5fUFNFVURP VkVDVE9SIChzdHJ1Y3QgTGlzcF9CaWdudW0sCi0JCQkJCQkgICAgICAgUFZFQ19CSUdOVU0p OwotICBtcHpfaW5pdCAoYi0+dmFsdWUpOwotICBtcHpfc3dhcCAoYi0+dmFsdWUsIG1welsw XSk7Ci0gIHJldHVybiBtYWtlX2xpc3BfcHRyIChiLCBMaXNwX1ZlY3Rvcmxpa2UpOworICBy ZXR1cm4gbWFrZV91bmlxdWVfYmlnbnVtICgpOwogfQogCiAvKiBSZXR1cm4gYSBMaXNwIGlu dGVnZXIgZXF1YWwgdG8gbXB6WzBdLCB3aGljaCBtdXN0IG5vdCBiZSBpbiBmaXhudW0gcmFu Z2UuCkBAIC00MjQsMTAgKzQxOSw3IEBAIGJpZ251bV90b19zdHJpbmcgKExpc3BfT2JqZWN0 IG51bSwgaW50IGJhc2UpCiBMaXNwX09iamVjdAogbWFrZV9iaWdudW1fc3RyIChjaGFyIGNv bnN0ICpudW0sIGludCBiYXNlKQogewotICBzdHJ1Y3QgTGlzcF9CaWdudW0gKmIgPSBBTExP Q0FURV9QTEFJTl9QU0VVRE9WRUNUT1IgKHN0cnVjdCBMaXNwX0JpZ251bSwKLQkJCQkJCSAg ICAgICBQVkVDX0JJR05VTSk7Ci0gIG1wel9pbml0IChiLT52YWx1ZSk7Ci0gIGludCBjaGVj ayA9IG1wel9zZXRfc3RyIChiLT52YWx1ZSwgbnVtLCBiYXNlKTsKKyAgaW50IGNoZWNrID0g bXB6X3NldF9zdHIgKG1welswXSwgbnVtLCBiYXNlKTsKICAgZWFzc2VydCAoY2hlY2sgPT0g MCk7Ci0gIHJldHVybiBtYWtlX2xpc3BfcHRyIChiLCBMaXNwX1ZlY3Rvcmxpa2UpOworICBy ZXR1cm4gbWFrZV9iaWdudW0gKCk7CiB9CmRpZmYgLS1naXQgYS9zcmMvZm5zLmMgYi9zcmMv Zm5zLmMKaW5kZXggM2I1ZmVhY2U1Mi4uODBlMGVhYzcxYyAxMDA2NDQKLS0tIGEvc3JjL2Zu cy5jCisrKyBiL3NyYy9mbnMuYwpAQCAtMTU3NSwyOSArMTU3NSwxNyBAQCBERUZVTiAoIm1l bXFsIiwgRm1lbXFsLCBTbWVtcWwsIDIsIDIsIDAsCiBUaGUgdmFsdWUgaXMgYWN0dWFsbHkg dGhlIHRhaWwgb2YgTElTVCB3aG9zZSBjYXIgaXMgRUxULiAgKi8pCiAgIChMaXNwX09iamVj dCBlbHQsIExpc3BfT2JqZWN0IGxpc3QpCiB7CisgIGlmICghRkxPQVRQIChlbHQpKQorICAg IHJldHVybiBGbWVtcSAoZWx0LCBsaXN0KTsKKwogICBMaXNwX09iamVjdCB0YWlsID0gbGlz dDsKIAotICBpZiAoRkxPQVRQIChlbHQpKQotICAgIHsKLSAgICAgIEZPUl9FQUNIX1RBSUwg KHRhaWwpCi0gICAgICAgIHsKLSAgICAgICAgICBMaXNwX09iamVjdCB0ZW0gPSBYQ0FSICh0 YWlsKTsKLSAgICAgICAgICBpZiAoRkxPQVRQICh0ZW0pICYmIHNhbWVfZmxvYXQgKGVsdCwg dGVtKSkKLSAgICAgICAgICAgIHJldHVybiB0YWlsOwotICAgICAgICB9Ci0gICAgfQotICBl bHNlIGlmIChCSUdOVU1QIChlbHQpKQorICBGT1JfRUFDSF9UQUlMICh0YWlsKQogICAgIHsK LSAgICAgIEZPUl9FQUNIX1RBSUwgKHRhaWwpCi0gICAgICAgIHsKLSAgICAgICAgICBMaXNw X09iamVjdCB0ZW0gPSBYQ0FSICh0YWlsKTsKLSAgICAgICAgICBpZiAoQklHTlVNUCAodGVt KQotCSAgICAgICYmIG1wel9jbXAgKCp4YmlnbnVtX3ZhbCAoZWx0KSwgKnhiaWdudW1fdmFs ICh0ZW0pKSA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIHRhaWw7Ci0gICAgICAgIH0KKyAg ICAgIExpc3BfT2JqZWN0IHRlbSA9IFhDQVIgKHRhaWwpOworICAgICAgaWYgKEZMT0FUUCAo dGVtKSAmJiBzYW1lX2Zsb2F0IChlbHQsIHRlbSkpCisJcmV0dXJuIHRhaWw7CiAgICAgfQot ICBlbHNlCi0gICAgcmV0dXJuIEZtZW1xIChlbHQsIGxpc3QpOwogCiAgIENIRUNLX0xJU1Rf RU5EICh0YWlsLCBsaXN0KTsKICAgcmV0dXJuIFFuaWw7CkBAIC0yMzAwLDE0ICsyMjg4LDkg QEAgREVGVU4gKCJlcWwiLCBGZXFsLCBTZXFsLCAyLCAyLCAwLAogXChlcWwgMC4wZStOYU4g MC4wZStOYU4pIHJldHVybnMgdCwgd2hlcmVhcyBgPScgZG9lcyB0aGUgb3Bwb3NpdGUuICAq LykKICAgKExpc3BfT2JqZWN0IG9iajEsIExpc3BfT2JqZWN0IG9iajIpCiB7Ci0gIGlmIChG TE9BVFAgKG9iajEpKQotICAgIHJldHVybiBGTE9BVFAgKG9iajIpICYmIHNhbWVfZmxvYXQg KG9iajEsIG9iajIpID8gUXQgOiBRbmlsOwotICBlbHNlIGlmIChCSUdOVU1QIChvYmoxKSkK LSAgICByZXR1cm4gKChCSUdOVU1QIChvYmoyKQotCSAgICAgJiYgbXB6X2NtcCAoKnhiaWdu dW1fdmFsIChvYmoxKSwgKnhiaWdudW1fdmFsIChvYmoyKSkgPT0gMCkKLQkgICAgPyBRdCA6 IFFuaWwpOwotICBlbHNlCi0gICAgcmV0dXJuIEVRIChvYmoxLCBvYmoyKSA/IFF0IDogUW5p bDsKKyAgcmV0dXJuICgoRVEgKG9iajEsIG9iajIpCisJICAgfHwgKEZMT0FUUCAob2JqMSkg JiYgRkxPQVRQIChvYmoyKSAmJiBzYW1lX2Zsb2F0IChvYmoxLCBvYmoyKSkpCisJICA/IFF0 IDogUW5pbCk7CiB9CiAKIERFRlVOICgiZXF1YWwiLCBGZXF1YWwsIFNlcXVhbCwgMiwgMiwg MCwKQEAgLTI0MzMsOCArMjQxNiw2IEBAIGludGVybmFsX2VxdWFsIChMaXNwX09iamVjdCBv MSwgTGlzcF9PYmplY3QgbzIsIGVudW0gZXF1YWxfa2luZCBlcXVhbF9raW5kLAogCSAgIHNh bWUgc2l6ZS4gICovCiAJaWYgKEFTSVpFIChvMikgIT0gc2l6ZSkKIAkgIHJldHVybiBmYWxz ZTsKLQlpZiAoQklHTlVNUCAobzEpKQotCSAgcmV0dXJuIG1wel9jbXAgKCp4YmlnbnVtX3Zh bCAobzEpLCAqeGJpZ251bV92YWwgKG8yKSkgPT0gMDsKIAlpZiAoT1ZFUkxBWVAgKG8xKSkK IAkgIHsKIAkgICAgaWYgKCFpbnRlcm5hbF9lcXVhbCAoT1ZFUkxBWV9TVEFSVCAobzEpLCBP VkVSTEFZX1NUQVJUIChvMiksCkBAIC00MDMxLDcgKzQwMTIsNyBAQCBoYXNoZm5fZXF1YWwg KExpc3BfT2JqZWN0IGtleSwgc3RydWN0IExpc3BfSGFzaF9UYWJsZSAqaCkKIExpc3BfT2Jq ZWN0CiBoYXNoZm5fZXFsIChMaXNwX09iamVjdCBrZXksIHN0cnVjdCBMaXNwX0hhc2hfVGFi bGUgKmgpCiB7Ci0gIHJldHVybiAoRkxPQVRQIChrZXkpIHx8IEJJR05VTVAgKGtleSkgPyBo YXNoZm5fZXF1YWwgOiBoYXNoZm5fZXEpIChrZXksIGgpOworICByZXR1cm4gKEZMT0FUUCAo a2V5KSA/IGhhc2hmbl9lcXVhbCA6IGhhc2hmbl9lcSkgKGtleSwgaCk7CiB9CiAKIC8qIEdp dmVuIEhULCByZXR1cm4gYSBoYXNoIGNvZGUgZm9yIEtFWSB3aGljaCB1c2VzIGEgdXNlci1k ZWZpbmVkCkBAIC00NjU1LDE2ICs0NjM2LDE1IEBAIHN4aGFzaF9ib29sX3ZlY3RvciAoTGlz cF9PYmplY3QgdmVjKQogICByZXR1cm4gU1hIQVNIX1JFRFVDRSAoaGFzaCk7CiB9CiAKLS8q IFJldHVybiBhIGhhc2ggZm9yIGEgYmlnbnVtLiAgKi8KKy8qIFJldHVybiBhIGhhc2ggZm9y IGFuIGludGVnZXIuICAqLwogCiBzdGF0aWMgRU1BQ1NfVUlOVAotc3hoYXNoX2JpZ251bSAo TGlzcF9PYmplY3QgYmlnbnVtKQorc3hoYXNoX21weiAobXB6X3QgY29uc3QgKm4pCiB7Ci0g IG1wel90IGNvbnN0ICpuID0geGJpZ251bV92YWwgKGJpZ251bSk7Ci0gIHNpemVfdCBpLCBu bGltYnMgPSBtcHpfc2l6ZSAoKm4pOworICBzaXplX3QgbmxpbWJzID0gbXB6X3NpemUgKCpu KTsKICAgRU1BQ1NfVUlOVCBoYXNoID0gMDsKIAotICBmb3IgKGkgPSAwOyBpIDwgbmxpbWJz OyArK2kpCisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmxpbWJzOyBpKyspCiAgICAgaGFz aCA9IHN4aGFzaF9jb21iaW5lIChoYXNoLCBtcHpfZ2V0bGltYm4gKCpuLCBpKSk7CiAKICAg cmV0dXJuIFNYSEFTSF9SRURVQ0UgKGhhc2gpOwpAQCAtNDY5OCw5ICs0Njc4LDcgQEAgc3ho YXNoIChMaXNwX09iamVjdCBvYmosIGludCBkZXB0aCkKIAogICAgICAgLyogVGhpcyBjYW4g YmUgZXZlcnl0aGluZyBmcm9tIGEgdmVjdG9yIHRvIGFuIG92ZXJsYXkuICAqLwogICAgIGNh c2UgTGlzcF9WZWN0b3JsaWtlOgotICAgICAgaWYgKEJJR05VTVAgKG9iaikpCi0JaGFzaCA9 IHN4aGFzaF9iaWdudW0gKG9iaik7Ci0gICAgICBlbHNlIGlmIChWRUNUT1JQIChvYmopIHx8 IFJFQ09SRFAgKG9iaikpCisgICAgICBpZiAoVkVDVE9SUCAob2JqKSB8fCBSRUNPUkRQIChv YmopKQogCS8qIEFjY29yZGluZyB0byB0aGUgQ0wgSHlwZXJTcGVjLCB0d28gYXJyYXlzIGFy ZSBlcXVhbCBvbmx5IGlmCiAJICAgdGhleSBhcmUgYGVxJywgZXhjZXB0IGZvciBzdHJpbmdz IGFuZCBiaXQtdmVjdG9ycy4gIEluCiAJICAgRW1hY3MsIHRoaXMgd29ya3MgZGlmZmVyZW50 bHkuICBXZSBoYXZlIHRvIGNvbXBhcmUgZWxlbWVudApAQCAtNTA2Niw2ICs1MDQ0LDQ3IEBA IERFRlVOICgiZGVmaW5lLWhhc2gtdGFibGUtdGVzdCIsIEZkZWZpbmVfaGFzaF90YWJsZV90 ZXN0LAogICByZXR1cm4gRnB1dCAobmFtZSwgUWhhc2hfdGFibGVfdGVzdCwgbGlzdDIgKHRl c3QsIGhhc2gpKTsKIH0KIAorDAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJCQkgICAgSGFzaGVk IGJpZ251bXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogV2VhayBoYXNoIHRhYmxlIG9m IGFsbCBjdXJyZW50IGJpZ251bSBvYmplY3RzLCB0byBwcmV2ZW50IGR1cGxpY2F0ZXMuICAq LworCitzdGF0aWMgTGlzcF9PYmplY3QgYmlnbnVtX21hcDsKKworLyogUmV0dXJuIHRoZSB1 bmlxdWUgYmlnbnVtIHdpdGggdmFsdWUgZXF1YWwgdG8gbXB6WzBdLCB3aGljaCBtdXN0IG5v dAorICAgYmUgaW4gZml4bnVtIHJhbmdlLiAgU2V0IG1welswXSB0byBhIGp1bmsgdmFsdWUu ICAqLworCitMaXNwX09iamVjdAorbWFrZV91bmlxdWVfYmlnbnVtICh2b2lkKQoreworICBz dHJ1Y3QgTGlzcF9IYXNoX1RhYmxlICpoID0gWEhBU0hfVEFCTEUgKGJpZ251bV9tYXApOwor CisgIC8qIElmIG1welswXSdzIHZhbHVlIGlzIGFscmVhZHkgaGFzaGVkLCByZXR1cm4gdGhl IGNvcnJlc3BvbmRpbmcgYmlnbnVtLgorICAgICBUaGlzIGlzIGxpa2UgaGFzaF9sb29rdXAs IGV4Y2VwdCB3aXRoIHNwZWNpYWwgaGFzaGluZyBhbmQKKyAgICAgY29tcGFyaXNvbiBmb3Ig YmlnbnVtcy4gIGhhc2hfcmVoYXNoX2lmX25lZWRlZCB3b3VsZCBiZSByZWR1bmRhbnQKKyAg ICAgc2luY2Ugc3hoYXNoX21weiBpcyBzdGFibGUuICAqLworICBFTUFDU19VSU5UIGhhc2gg PSBzeGhhc2hfbXB6ICgmbXB6WzBdKTsKKyAgTGlzcF9PYmplY3QgaGFzaF9jb2RlID0gbWFr ZV91Zml4bnVtIChoYXNoKTsKKyAgcHRyZGlmZl90IHN0YXJ0X29mX2J1Y2tldCA9IGhhc2gg JSBBU0laRSAoaC0+aW5kZXgpOworICBmb3IgKHB0cmRpZmZfdCBpID0gSEFTSF9JTkRFWCAo aCwgc3RhcnRfb2ZfYnVja2V0KTsKKyAgICAgICAwIDw9IGk7IGkgPSBIQVNIX05FWFQgKGgs IGkpKQorICAgIGlmIChFUSAoaGFzaF9jb2RlLCBIQVNIX0hBU0ggKGgsIGkpKSkKKyAgICAg IHsKKwlMaXNwX09iamVjdCBudW0gPSBIQVNIX0tFWSAoaCwgaSk7CisJaWYgKG1wel9jbXAg KG1welswXSwgKnhiaWdudW1fdmFsIChudW0pKSA9PSAwKQorCSAgcmV0dXJuIG51bTsKKyAg ICAgIH0KKworICBzdHJ1Y3QgTGlzcF9CaWdudW0gKmIgPSBBTExPQ0FURV9QTEFJTl9QU0VV RE9WRUNUT1IgKHN0cnVjdCBMaXNwX0JpZ251bSwKKwkJCQkJCSAgICAgICBQVkVDX0JJR05V TSk7CisgIG1wel9pbml0IChiLT52YWx1ZSk7CisgIG1wel9zd2FwIChiLT52YWx1ZSwgbXB6 WzBdKTsKKyAgTGlzcF9PYmplY3QgYmlnbnVtID0gbWFrZV9saXNwX3B0ciAoYiwgTGlzcF9W ZWN0b3JsaWtlKTsKKyAgaGFzaF9wdXQgKGgsIGJpZ251bSwgUW5pbCwgaGFzaF9jb2RlKTsK KyAgcmV0dXJuIGJpZ251bTsKK30KIAogDAogLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTY2 NSw0ICs1Njg0LDkgQEAgc3ltc19vZl9mbnMgKHZvaWQpCiAgIGRlZnN1YnIgKCZTc2VjdXJl X2hhc2gpOwogICBkZWZzdWJyICgmU2J1ZmZlcl9oYXNoKTsKICAgZGVmc3ViciAoJlNsb2Nh bGVfaW5mbyk7CisKKyAgYmlnbnVtX21hcCA9IG1ha2VfaGFzaF90YWJsZSAoaGFzaHRlc3Rf ZXEsIERFRkFVTFRfSEFTSF9TSVpFLAorCQkJCURFRkFVTFRfUkVIQVNIX1NJWkUsIERFRkFV TFRfUkVIQVNIX1RIUkVTSE9MRCwKKwkJCQlRa2V5LCBmYWxzZSk7CisgIHN0YXRpY3BybyAo JmJpZ251bV9tYXApOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2xpc3AuaCBiL3NyYy9saXNwLmgK aW5kZXggODY3NGZlMTFhNi4uZTA2NjA4NTUxNCAxMDA2NDQKLS0tIGEvc3JjL2xpc3AuaAor KysgYi9zcmMvbGlzcC5oCkBAIC0zNjQ5LDYgKzM2NDksNyBAQCAjZGVmaW5lIENPTlNfVE9f SU5URUdFUihjb25zLCB0eXBlLCB2YXIpCQkJCVwKIGV4dGVybiBFTUFDU19JTlQgbmV4dF9h bG1vc3RfcHJpbWUgKEVNQUNTX0lOVCkgQVRUUklCVVRFX0NPTlNUOwogZXh0ZXJuIExpc3Bf T2JqZWN0IGxhcmdlcl92ZWN0b3IgKExpc3BfT2JqZWN0LCBwdHJkaWZmX3QsIHB0cmRpZmZf dCk7CiBleHRlcm4gYm9vbCBzd2VlcF93ZWFrX3RhYmxlIChzdHJ1Y3QgTGlzcF9IYXNoX1Rh YmxlICosIGJvb2wpOworZXh0ZXJuIExpc3BfT2JqZWN0IG1ha2VfdW5pcXVlX2JpZ251bSAo dm9pZCk7CiBleHRlcm4gdm9pZCBoZXhidWZfZGlnZXN0IChjaGFyICosIHZvaWQgY29uc3Qg KiwgaW50KTsKIGV4dGVybiBjaGFyICpleHRyYWN0X2RhdGFfZnJvbV9vYmplY3QgKExpc3Bf T2JqZWN0LCBwdHJkaWZmX3QgKiwgcHRyZGlmZl90ICopOwogRU1BQ1NfVUlOVCBoYXNoX3N0 cmluZyAoY2hhciBjb25zdCAqLCBwdHJkaWZmX3QpOwpkaWZmIC0tZ2l0IGEvc3JjL3BkdW1w ZXIuYyBiL3NyYy9wZHVtcGVyLmMKaW5kZXggM2VlMTE0NjA0MC4uYWIwNDYxY2NiNiAxMDA2 NDQKLS0tIGEvc3JjL3BkdW1wZXIuYworKysgYi9zcmMvcGR1bXBlci5jCkBAIC0yNjMyLDEx ICsyNjMyLDEwIEBAIGR1bXBfaGFzaF90YWJsZV9zdGFibGVfcCAoY29uc3Qgc3RydWN0IExp c3BfSGFzaF9UYWJsZSAqaGFzaCkKICAgICAgIGlmICghRVEgKGtleSwgUXVuYm91bmQpKQog ICAgICAgICB7CiAJICBib29sIGtleV9zdGFibGUgPSAoZHVtcF9idWlsdGluX3N5bWJvbF9w IChrZXkpCi0JCQkgICAgIHx8IEZJWE5VTVAgKGtleSkKKwkJCSAgICAgfHwgSU5URUdFUlAg KGtleSkKIAkJCSAgICAgfHwgKGlzX2VxdWFsCiAJCQkgICAgICAgICAmJiAoU1RSSU5HUCAo a2V5KSB8fCBCT09MX1ZFQ1RPUl9QIChrZXkpKSkKLQkJCSAgICAgfHwgKChpc19lcXVhbCB8 fCBpc19lcWwpCi0JCQkgICAgICAgICAmJiAoRkxPQVRQIChrZXkpIHx8IEJJR05VTVAgKGtl eSkpKSk7CisJCQkgICAgIHx8ICgoaXNfZXF1YWwgfHwgaXNfZXFsKSAmJiBGTE9BVFAgKGtl eSkpKTsKICAgICAgICAgICBpZiAoIWtleV9zdGFibGUpCiAgICAgICAgICAgICByZXR1cm4g ZmFsc2U7CiAgICAgICAgIH0KLS0gCjIuMTcuMQoK --------------04D02DF01CA5FBF8F39F5F4F--