From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Pip Cet Newsgroups: gmane.emacs.devel Subject: Re: master d582356: * src/fns.c (Frandom): Handle bignum `limit`s Date: Sat, 6 Mar 2021 13:22:10 +0000 Message-ID: References: <20210305170955.27732.27579@vcs0.savannah.gnu.org> <20210305170957.AF99920E1B@vcs0.savannah.gnu.org> <83sg58wu0v.fsf@gnu.org> <83k0qkwnwt.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="000000000000bf718305bcde18a7" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="37256"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Stefan Monnier , emacs-devel@gnu.org To: Eli Zaretskii Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Sat Mar 06 14:24:18 2021 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lIWuo-0009aE-KW for ged-emacs-devel@m.gmane-mx.org; Sat, 06 Mar 2021 14:24:18 +0100 Original-Received: from localhost ([::1]:34230 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lIWun-0008C6-Jb for ged-emacs-devel@m.gmane-mx.org; Sat, 06 Mar 2021 08:24:17 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:39004) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lIWtR-0007l2-38 for emacs-devel@gnu.org; Sat, 06 Mar 2021 08:22:53 -0500 Original-Received: from mail-oi1-x236.google.com ([2607:f8b0:4864:20::236]:37218) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lIWtN-0007AT-2Y; Sat, 06 Mar 2021 08:22:52 -0500 Original-Received: by mail-oi1-x236.google.com with SMTP id u198so861446oia.4; Sat, 06 Mar 2021 05:22:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=FEFOlGp5b7tazdZq+mHrPQSPhKb8zBrlACneVbRXnIk=; b=al8HdgakZzavFlduuq3/NaLNXHslqNrVONmBzQC2OqT+z4QBMCI70wlFS8IeKI8Q5A 81MvWaHCT1XLvozXKn5k6wapMhm5Bhbn5p4+OI7p1XoOIoPJItttvS9ldIIy2xNOfD0m 2YZMf7JqJRV8sTXUqgrfor7ka0/H3egqAFDGZPF3Z67hT9PAP6akjb5kfNezAIPDi1Tx FsQhE+HMvYRwuP6HM+Ea4+5iAGapgbfHfPvsrhqUZ8g9U1Sw7NsColZMffsoCfk46bP2 Dqlqa3IAU70xt9F69il9C0MuS4DYh5hRbPrCinqtwrKesyOyg16hSnGyBcQhtH546lo6 Xkaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=FEFOlGp5b7tazdZq+mHrPQSPhKb8zBrlACneVbRXnIk=; b=cI01VJFSaExSSibfBiBHj13iYZGzebHeJx24NHpbjsgtC2CER8b4bzpWFpx89fF60d Fz09B2YmIWQ4NApahS+mxwyvpDJ32DAqblXs7ASjLZL931h1JhpFRo87L/taxiUu886k /4TU4H2sp5m6BQaCPUlaWz/8W9NA0T7pZnQSeV3+im3UYIFDQzLNsDheOwap6hxKrOdb JBeAWNqK9yHKiWqRWq2ccQCDBqSjr8lRTSPOEfeu87vYfINyVzGopaOyQkUDPqX7ldTU La/6iXuh7NWdqVNotWmsFof9ROK8FwXsjh0S1azfj2+GCXDO9c7uBPssM+r/Bn9btOnw 5tJA== X-Gm-Message-State: AOAM531ECxdIS3MsshgOhyaXS0YGFQLu38VgIY5tSxVuBBIDk7EKfJA6 x9sVPUD9lSTVNfajAvXhBp+0LRhmOEC7rw9gLZsk8juPPBY= X-Google-Smtp-Source: ABdhPJwreT6Y1PAK3PlwLKfPxTSzBIxmUFVwPSz0aliqxqCEnIdg9l547jbjaHc2ZCIQbRqFD+nbzf2+zlL6vDLnBYg= X-Received: by 2002:aca:aad6:: with SMTP id t205mr10839062oie.122.1615036967507; Sat, 06 Mar 2021 05:22:47 -0800 (PST) In-Reply-To: <83k0qkwnwt.fsf@gnu.org> Received-SPF: pass client-ip=2607:f8b0:4864:20::236; envelope-from=pipcet@gmail.com; helo=mail-oi1-x236.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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-mx.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.io gmane.emacs.devel:266070 Archived-At: --000000000000bf718305bcde18a7 Content-Type: text/plain; charset="UTF-8" On Sat, Mar 6, 2021 at 10:57 AM Eli Zaretskii wrote: > > From: Pip Cet > > Date: Sat, 6 Mar 2021 09:44:18 +0000 > > Cc: Stefan Monnier , emacs-devel@gnu.org > > > > I thought this code in code_conversion_save was safe: > > > > Lisp_Object name > > = Fgenerate_new_buffer_name (Vcode_conversion_workbuf_name, Qnil); > > workbuf = Fget_buffer_create (name, Qt); > > > > but I had misread the second argument to Fget_buffer_create: it's > > inhibit-hooks, not run-hooks. > > > > So I'm not sure whether code_conversion_save is allowed to call Lisp. > I'd rather it didn't, for more than one reason. But we can side-step > this by making Fgenerate_new_buffer_name use random-fixnum, which is > still a pure-C implementation. Here's a patch which makes it use get_random() directly. > > It would really help to document the "doesn't call Lisp" and "doesn't > > quit" restrictions somewhere (but I'm not volunteering...) > > I agree, on both counts. Actually, I think it would be best to have these restrictions represented in the code. I see two ways of doing that: 1. Have FUNCTION_MAY_GC etc. translate into a GCC attribute in debug builds so we can statically check that a function that says it never calls GC doesn't call a function that says it may call GC. 2. Have a statement at the beginning of non-GCing functions which sets a flag that is then checked by garbage-collecting functions, so that we may dynamically check this. (1) seems easy to implement, but has a high rate of false negatives as many functions are safe to call from non-GCing functions as long as the arguments are correct. (2) is difficult to implement, and would only trigger at runtime. So I say we should do (1) in preference to (2), but maybe we should do both. Pip --000000000000bf718305bcde18a7 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Implement-random-in-Lisp-exposing-only-random-fixnum.patch" Content-Disposition: attachment; filename="0001-Implement-random-in-Lisp-exposing-only-random-fixnum.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_klxr860o0 RnJvbSA3NTVkOWZlOWEyNTZhNzJmOGNhYzllNmEwMDYxNTFiZDZjYzRjNDZlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQaXAgQ2V0IDxwaXBjZXRAZ21haWwuY29tPgpEYXRlOiBTYXQs IDYgTWFyIDIwMjEgMDc6Mzc6MjIgKzAwMDAKU3ViamVjdDogW1BBVENIXSBJbXBsZW1lbnQgcmFu ZG9tIGluIExpc3AsIGV4cG9zaW5nIG9ubHkgcmFuZG9tLWZpeG51bSBmcm9tIEMKCiogc3JjL2J1 ZmZlci5jIChGZ2VuZXJhdGVfbmV3X2J1ZmZlcl9uYW1lKTogQ2FsbCBnZXRfcmFuZG9tKCkuCiog c3JjL2Zucy5jIChGcmFuZG9tKTogUmVuYW1lIHRvIEZyYW5kb21fZml4bnVtIGFuZCBzaW1wbGlm eS4KKGNjYWxsMik6IFJlbW92ZSBmdW5jdGlvbi4KKHJhbmRvbV9iaWdudW0pOiBSZW1vdmUgZnVu Y3Rpb24uCihzeW1zX29mX2Zucyk6IFJlZ2lzdGVyIHJhbmRvbS1maXhudW0sIG5vdCByYW5kb20u CiogbGlzcC9zdWJyLmVsIChyYW5kb20pOiBOZXcgZnVuY3Rpb24uCi0tLQogbGlzcC9zdWJyLmVs IHwgNDMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2J1ZmZlci5jIHwgMTUgKysr KysrKystLQogc3JjL2Zucy5jICAgIHwgODAgKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMyBmaWxlcyBjaGFuZ2VkLCA2MiBpbnNlcnRpb25zKCsp LCA3NiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9saXNwL3N1YnIuZWwgYi9saXNwL3N1YnIu ZWwKaW5kZXggMGI1NjM0NzM5OTkzZi4uZmQ3YmMwMjgzODc1YiAxMDA2NDQKLS0tIGEvbGlzcC9z dWJyLmVsCisrKyBiL2xpc3Avc3Vici5lbApAQCAtNjIzOCw0ICs2MjM4LDQ3IEBAIGludGVybmFs LS1mb3JtYXQtZG9jc3RyaW5nLWxpbmUKIFRoaXMgaXMgaW50ZW5kZWQgZm9yIGludGVybmFsIHVz ZSBvbmx5LiIKICAgKGludGVybmFsLS1maWxsLXN0cmluZy1zaW5nbGUtbGluZSAoYXBwbHkgIydm b3JtYXQgc3RyaW5nIG9iamVjdHMpKSkKIAorKGRlZnVuIHJhbmRvbSAoJm9wdGlvbmFsIGxpbWl0 KQorICAiUmV0dXJuIGEgcHNldWRvLXJhbmRvbSBpbnRlZ2VyLgorQnkgZGVmYXVsdCwgcmV0dXJu IGEgZml4bnVtOyBhbGwgZml4bnVtcyBhcmUgZXF1YWxseSBsaWtlbHkuCitXaXRoIHBvc2l0aXZl IGludGVnZXIgTElNSVQsIHJldHVybiByYW5kb20gaW50ZWdlciBpbiBpbnRlcnZhbCBbMCxMSU1J VCkuCitXaXRoIGZsb2F0IGFyZ3VtZW50IExJTUlULCByZXR1cm4gYSBmbG9hdCBiZXR3ZWVuIDAg YW5kIExJTUlULgorV2l0aCBhcmd1bWVudCB0LCBzZXQgdGhlIHJhbmRvbSBudW1iZXIgc2VlZCBm cm9tIHRoZSBzeXN0ZW0ncyBlbnRyb3B5Citwb29sIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZy b20gbGVzcy1yYW5kb20gdm9sYXRpbGUgZGF0YSBzdWNoIGFzIHRoZSB0aW1lLgorV2l0aCBhIHN0 cmluZyBhcmd1bWVudCwgc2V0IHRoZSBzZWVkIGJhc2VkIG9uIHRoZSBzdHJpbmcncyBjb250ZW50 cy4KKworU2VlIEluZm8gbm9kZSBgKGVsaXNwKVJhbmRvbSBOdW1iZXJzJyBmb3IgbW9yZSBkZXRh aWxzLiIKKyAgKGNvbmQKKyAgICgobnVsbCBsaW1pdCkKKyAgICAocmFuZG9tLWZpeG51bSkpCisg ICAoKG5hdG51bXAgbGltaXQpCisgICAgKGlmICg8PSBsaW1pdCAwKQorICAgICAgICAoZXJyb3Ig Ik5vbi1wb3NpdGl2ZSBhcmd1bWVudCIpKQorICAgIChsZXQgKG9rYXkgcmVtYWluZGVyKQorICAg ICAgKHdoaWxlIChub3Qgb2theSkKKyAgICAgICAgKGxldCAoKHZhbCAwKQorICAgICAgICAgICAg ICAobGltIGxpbWl0KQorICAgICAgICAgICAgICAoYml0cyAwKQorICAgICAgICAgICAgICAoYml0 cy1wZXItaXRlcmF0aW9uICgxLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo dHJ1bmNhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb2cgKDErIG1v c3QtcG9zaXRpdmUtZml4bnVtKSAyKSkpKSkKKyAgICAgICAgICAod2hpbGUgKG5vdCAoemVyb3Ag bGltKSkKKyAgICAgICAgICAgIChsZXQgKChyYW5kIChsb2dhbmQgKDEtIChsc2ggMSBiaXRzLXBl ci1pdGVyYXRpb24pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmFuZG9tLWZp eG51bSkpKSkKKyAgICAgICAgICAgICAgKHNldHEgYml0cyAoKyBiaXRzIGJpdHMtcGVyLWl0ZXJh dGlvbikpCisgICAgICAgICAgICAgIChzZXRxIHZhbCAobG9naW9yIChsc2ggdmFsIGJpdHMtcGVy LWl0ZXJhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZCkpCisgICAg ICAgICAgICAgIChzZXRxIGxpbSAobHNoIGxpbSAoLSBiaXRzLXBlci1pdGVyYXRpb24pKSkpKQor ICAgICAgICAgIChzZXRxIHJlbWFpbmRlciAoJSB2YWwgbGltaXQpKQorICAgICAgICAgIChzZXRx IG9rYXkgKDw9ICgtIHZhbCByZW1haW5kZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgKC0g KGxzaCAxIGJpdHMpIGxpbWl0KSkpKSkKKyAgICAgIHJlbWFpbmRlcikpCisgICgoZmxvYXRwIGxp bWl0KQorICAgKCogKHJhbmRvbS1pbnRlZ2VyIChsc2ggMSA2NCkpCisgICAgICAoLyAxLjAgKGZs b2F0IChsc2ggMSA2NCkpKQorICAgICAgbGltaXQpKQorICAoKGVxIGxpbWl0IHQpIChyYW5kb20t Zml4bnVtIGxpbWl0KSkKKyAgKChzdHJpbmdwIGxpbWl0KSAocmFuZG9tLWZpeG51bSBsaW1pdCkp CisgICgoZXJyb3IgImludmFsaWQgbGltaXQgJVMiIGxpbWl0KSkpKQorCiA7Ozsgc3Vici5lbCBl bmRzIGhlcmUKZGlmZiAtLWdpdCBhL3NyYy9idWZmZXIuYyBiL3NyYy9idWZmZXIuYwppbmRleCAw M2MxMGNjN2FlNWJhLi42YmRjODU3YmZmMGIwIDEwMDY0NAotLS0gYS9zcmMvYnVmZmVyLmMKKysr IGIvc3JjL2J1ZmZlci5jCkBAIC0xMTQ5LDEwICsxMTQ5LDE5IEBAIERFRlVOICgiZ2VuZXJhdGUt bmV3LWJ1ZmZlci1uYW1lIiwgRmdlbmVyYXRlX25ld19idWZmZXJfbmFtZSwKICAgICAgIGNoYXIg bnVtYmVyW3NpemVvZiAiLTk5OTk5OSJdOwogCiAgICAgICAvKiBVc2UgWEZJWE5VTSBpbnN0ZWFk IG9mIFhGSVhOQVQgdG8gd29yayBhcm91bmQgR0NDIGJ1ZyA4MDc3Ni4gICovCi0gICAgICBpbnQg aSA9IFhGSVhOVU0gKEZyYW5kb20gKG1ha2VfZml4bnVtICgxMDAwMDAwKSkpOwotICAgICAgZWFz c3VtZSAoMCA8PSBpICYmIGkgPCAxMDAwMDAwKTsKKyAgICAgIEVNQUNTX0lOVCByYW5kb21fZml4 bnVtOworICAgICAgaW50IHJhbmRvbTsKKyAgICAgIGRvCisJeworCSAgcmFuZG9tX2ZpeG51bSA9 IGdldF9yYW5kb20gKCk7CisJICByYW5kb20gPSByYW5kb21fZml4bnVtICUgMTAwMDAwMDsKKwl9 CisgICAgICB3aGlsZSAocmFuZG9tX2ZpeG51bSAtIHJhbmRvbSA+PSBJTlRNQVNLICsgMSAtIDEw MDAwMDApOworICAgICAgLyogR0NDIHNvbWV0aW1lcyBkb2Vzbid0IGdyb2sgdGhpcyBpZiB3cml0 dGVuIGFzIGEgc2luZ2xlIGVhc3N1bWUuICovCisgICAgICBlYXNzdW1lICgwIDw9IHJhbmRvbSk7 CisgICAgICBlYXNzdW1lIChyYW5kb20gPCAxMDAwMDAwKTsKIAotICAgICAgQVVUT19TVFJJTkdf V0lUSF9MRU4gKGxudW1iZXIsIG51bWJlciwgc3ByaW50ZiAobnVtYmVyLCAiLSVkIiwgaSkpOwor ICAgICAgQVVUT19TVFJJTkdfV0lUSF9MRU4gKGxudW1iZXIsIG51bWJlciwgc3ByaW50ZiAobnVt YmVyLCAiLSVkIiwgcmFuZG9tKSk7CiAgICAgICBnZW5iYXNlID0gY29uY2F0MiAobmFtZSwgbG51 bWJlcik7CiAgICAgICBpZiAoTklMUCAoRmdldF9idWZmZXIgKGdlbmJhc2UpKSkKIAlyZXR1cm4g Z2VuYmFzZTsKZGlmZiAtLWdpdCBhL3NyYy9mbnMuYyBiL3NyYy9mbnMuYwppbmRleCBiMTkzYWQ2 NDhhOTZjLi5hNjVhNWQ4OGQ0ZTRhIDEwMDY0NAotLS0gYS9zcmMvZm5zLmMKKysrIGIvc3JjL2Zu cy5jCkBAIC01NCw4OCArNTQsMjIgQEAgREVGVU4gKCJpZGVudGl0eSIsIEZpZGVudGl0eSwgU2lk ZW50aXR5LCAxLCAxLCAwLAogICByZXR1cm4gYXJndW1lbnQ7CiB9CiAKLXN0YXRpYyBMaXNwX09i amVjdAotY2NhbGwyIChMaXNwX09iamVjdCAoZikgKHB0cmRpZmZfdCBuYXJncywgTGlzcF9PYmpl Y3QgKmFyZ3MpLAotICAgICAgICBMaXNwX09iamVjdCBhcmcxLCBMaXNwX09iamVjdCBhcmcyKQot ewotICBMaXNwX09iamVjdCBhcmdzWzJdID0ge2FyZzEsIGFyZzJ9OwotICByZXR1cm4gZiAoMiwg YXJncyk7Ci19Ci0KLXN0YXRpYyBMaXNwX09iamVjdAotZ2V0X3JhbmRvbV9iaWdudW0gKExpc3Bf T2JqZWN0IGxpbWl0KQotewotICAvKiBUaGlzIGlzIGEgbmFpdmUgdHJhbnNjcmlwdGlvbiBpbnRv IGJpZ251bXMgb2YgdGhlIGZpeG51bSBhbGdvcml0aG0uCi0gICAgIEknZCBiZSBxdWl0ZSBzdXJw cmlzZWQgaWYgdGhhdCdzIGFueXdoZXJlIG5lYXIgdGhlIGJlc3QgYWxnb3JpdGhtCi0gICAgIGZv ciBpdC4gICovCi0gIHdoaWxlICh0cnVlKQotICAgIHsKLSAgICAgIExpc3BfT2JqZWN0IHZhbCA9 IG1ha2VfZml4bnVtICgwKTsKLSAgICAgIExpc3BfT2JqZWN0IGxpbSA9IGxpbWl0OwotICAgICAg aW50IGJpdHMgPSAwOwotICAgICAgaW50IGJpdHNwZXJpdGVyYXRpb24gPSBGSVhOVU1fQklUUyAt IDE7Ci0gICAgICBkbwotICAgICAgICB7Ci0gICAgICAgICAgLyogU2hpZnQgYnkgb25lIHNvIGl0 IGlzIGEgdmFsaWQgcG9zaXRpdmUgZml4bnVtLiAgKi8KLSAgICAgICAgICBFTUFDU19JTlQgcmFu ZCA9IGdldF9yYW5kb20gKCkgPj4gMTsKLSAgICAgICAgICBMaXNwX09iamVjdCBscmFuZCA9IG1h a2VfZml4bnVtIChyYW5kKTsKLSAgICAgICAgICBiaXRzICs9IGJpdHNwZXJpdGVyYXRpb247Ci0g ICAgICAgICAgdmFsID0gY2NhbGwyIChGbG9naW9yLAotICAgICAgICAgICAgICAgICAgICAgICAg RmFzaCAodmFsLCBtYWtlX2ZpeG51bSAoYml0c3Blcml0ZXJhdGlvbikpLAotICAgICAgICAgICAg ICAgICAgICAgICAgbHJhbmQpOwotICAgICAgICAgIGxpbSA9IEZhc2ggKGxpbSwgbWFrZV9maXhu dW0gKC0gYml0c3Blcml0ZXJhdGlvbikpOwotICAgICAgICB9Ci0gICAgICB3aGlsZSAoIUVRIChs aW0sIG1ha2VfZml4bnVtICgwKSkpOwotICAgICAgLyogUmV0dXJuIHRoZSByZW1haW5kZXIsIGV4 Y2VwdCByZWplY3QgdGhlIHJhcmUgY2FzZSB3aGVyZQotCSBnZXRfcmFuZG9tIHJldHVybnMgYSBu dW1iZXIgc28gY2xvc2UgdG8gSU5UTUFTSyB0aGF0IHRoZQotCSByZW1haW5kZXIgaXNuJ3QgcmFu ZG9tLiAgKi8KLSAgICAgIExpc3BfT2JqZWN0IHJlbWFpbmRlciA9IEZyZW0gKHZhbCwgbGltaXQp OwotICAgICAgaWYgKCFOSUxQIChjY2FsbDIgKEZsZXEsCi0JICAgICAgICAgICAgICAgICBjY2Fs bDIgKEZtaW51cywgdmFsLCByZW1haW5kZXIpLAotCSAgICAgICAgICAgICAgICAgY2NhbGwyIChG bWludXMsCi0JICAgICAgICAgICAgICAgICAgICAgICAgIEZhc2ggKG1ha2VfZml4bnVtICgxKSwg bWFrZV9maXhudW0gKGJpdHMpKSwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQpKSkp Ci0JcmV0dXJuIHJlbWFpbmRlcjsKLSAgICB9Ci19Ci0KLURFRlVOICgicmFuZG9tIiwgRnJhbmRv bSwgU3JhbmRvbSwgMCwgMSwgMCwKK0RFRlVOICgicmFuZG9tLWZpeG51bSIsIEZyYW5kb21fZml4 bnVtLCBTcmFuZG9tX2ZpeG51bSwgMCwgMSwgMCwKICAgICAgICBkb2M6IC8qIFJldHVybiBhIHBz ZXVkby1yYW5kb20gaW50ZWdlci4KLUJ5IGRlZmF1bHQsIHJldHVybiBhIGZpeG51bTsgYWxsIGZp eG51bXMgYXJlIGVxdWFsbHkgbGlrZWx5LgotV2l0aCBwb3NpdGl2ZSBpbnRlZ2VyIExJTUlULCBy ZXR1cm4gcmFuZG9tIGludGVnZXIgaW4gaW50ZXJ2YWwgWzAsTElNSVQpLgotV2l0aCBhcmd1bWVu dCB0LCBzZXQgdGhlIHJhbmRvbSBudW1iZXIgc2VlZCBmcm9tIHRoZSBzeXN0ZW0ncyBlbnRyb3B5 Ci1wb29sIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZyb20gbGVzcy1yYW5kb20gdm9sYXRpbGUg ZGF0YSBzdWNoIGFzIHRoZSB0aW1lLgotV2l0aCBhIHN0cmluZyBhcmd1bWVudCwgc2V0IHRoZSBz ZWVkIGJhc2VkIG9uIHRoZSBzdHJpbmcncyBjb250ZW50cy4KK1JldHVybiBhIGZpeG51bTsgYWxs IGZpeG51bXMgYXJlIGVxdWFsbHkgbGlrZWx5LiAgV2l0aCBhcmd1bWVudCB0LCBhbHNvIHNldAor dGhlIHJhbmRvbSBudW1iZXIgc2VlZCBmcm9tIHRoZSBzeXN0ZW0ncyBlbnRyb3B5IHBvb2wgaWYg YXZhaWxhYmxlLCBvdGhlcndpc2UKK2Zyb20gbGVzcy1yYW5kb20gdm9sYXRpbGUgZGF0YSBzdWNo IGFzIHRoZSB0aW1lLgorV2l0aCBhIHN0cmluZyBhcmd1bWVudCwgYWxzbyBzZXQgdGhlIHNlZWQg YmFzZWQgb24gdGhlIHN0cmluZydzIGNvbnRlbnRzLgogCiBTZWUgSW5mbyBub2RlIGAoZWxpc3Ap UmFuZG9tIE51bWJlcnMnIGZvciBtb3JlIGRldGFpbHMuICAqLykKICAgKExpc3BfT2JqZWN0IGxp bWl0KQogewotICBFTUFDU19JTlQgdmFsOwotCiAgIGlmIChFUSAobGltaXQsIFF0KSkKICAgICBp bml0X3JhbmRvbSAoKTsKICAgZWxzZSBpZiAoU1RSSU5HUCAobGltaXQpKQogICAgIHNlZWRfcmFu ZG9tIChTU0RBVEEgKGxpbWl0KSwgU0JZVEVTIChsaW1pdCkpOwotICBpZiAoQklHTlVNUCAobGlt aXQpKQotICAgIHsKLSAgICAgIGlmICgwID4gbXB6X3NnbiAoKnhiaWdudW1fdmFsIChsaW1pdCkp KQotICAgICAgICB4c2lnbmFsMiAoUXdyb25nX3R5cGVfYXJndW1lbnQsIFFuYXRudW1wLCBsaW1p dCk7Ci0gICAgICByZXR1cm4gZ2V0X3JhbmRvbV9iaWdudW0gKGxpbWl0KTsKLSAgICB9CiAKLSAg dmFsID0gZ2V0X3JhbmRvbSAoKTsKLSAgaWYgKEZJWE5VTVAgKGxpbWl0KSAmJiAwIDwgWEZJWE5V TSAobGltaXQpKQotICAgIHdoaWxlICh0cnVlKQotICAgICAgewotCS8qIFJldHVybiB0aGUgcmVt YWluZGVyLCBleGNlcHQgcmVqZWN0IHRoZSByYXJlIGNhc2Ugd2hlcmUKLQkgICBnZXRfcmFuZG9t IHJldHVybnMgYSBudW1iZXIgc28gY2xvc2UgdG8gSU5UTUFTSyB0aGF0IHRoZQotCSAgIHJlbWFp bmRlciBpc24ndCByYW5kb20uICAqLwotCUVNQUNTX0lOVCByZW1haW5kZXIgPSB2YWwgJSBYRklY TlVNIChsaW1pdCk7Ci0JaWYgKHZhbCAtIHJlbWFpbmRlciA8PSBJTlRNQVNLIC0gWEZJWE5VTSAo bGltaXQpICsgMSkKLQkgIHJldHVybiBtYWtlX2ZpeG51bSAocmVtYWluZGVyKTsKLQl2YWwgPSBn ZXRfcmFuZG9tICgpOwotICAgICAgfQotICByZXR1cm4gbWFrZV91Zml4bnVtICh2YWwpOworICBy ZXR1cm4gbWFrZV91Zml4bnVtIChnZXRfcmFuZG9tICgpKTsKIH0KIAwKIC8qIFJhbmRvbSBkYXRh LXN0cnVjdHVyZSBmdW5jdGlvbnMuICAqLwpAQCAtNTk2OCw3ICs1OTAyLDcgQEAgc3ltc19vZl9m bnMgKHZvaWQpCiAgIHVzZV9zaG9ydF9hbnN3ZXJzID0gZmFsc2U7CiAKICAgZGVmc3ViciAoJlNp ZGVudGl0eSk7Ci0gIGRlZnN1YnIgKCZTcmFuZG9tKTsKKyAgZGVmc3ViciAoJlNyYW5kb21fZml4 bnVtKTsKICAgZGVmc3ViciAoJlNsZW5ndGgpOwogICBkZWZzdWJyICgmU3NhZmVfbGVuZ3RoKTsK ICAgZGVmc3ViciAoJlNsZW5ndGhfbGVzcyk7Ci0tIAoyLjMwLjEKCg== --000000000000bf718305bcde18a7--