Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1whNwm-000BwA-2f for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Jul 2026 08:48:01 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1whNwk-006EKt-1P for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Jul 2026 08:47:59 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1whNwj-006EKj-2f for pgsql-hackers@lists.postgresql.org; Wed, 08 Jul 2026 08:47:58 +0000 Received: from mail-ej1-x632.google.com ([2a00:1450:4864:20::632]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1whNwh-000000007q1-1mXH for pgsql-hackers@postgresql.org; Wed, 08 Jul 2026 08:47:57 +0000 Received: by mail-ej1-x632.google.com with SMTP id a640c23a62f3a-c126fe7d0f3so51064466b.0 for ; Wed, 08 Jul 2026 01:47:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jeltef.nl; s=google; t=1783500474; x=1784105274; darn=postgresql.org; h=in-reply-to:references:mime-version:to:subject:cc:from:message-id :date:content-type:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Ux2B6awDF7X58JX8eyrAEUhtDs1VzCVpPgvutvGPup4=; b=WapWb95549VTywNPzx8hkHhIhT8t7bljVnlpw4L6l5co1TycFVEv63pa0gzdih4sKM sDEz4XCtRhKg1vDS+bmJVxrwMZAnX5isweFkDXJfpk5u+d8OqQxKpF5beCQe3ANfFEm8 LIli1VWNNQj5uJxrlenqNOTUeCyw2tr8MuQXeD4jatRV/kByNbiPlm2QDK02n0hsvi+a LIgRw470T1SZ4hFBiw1W1h+FjPtNhWCJpMzuCAyyDO3oVfxhLeuaAYQc0bZFangC/2+h 4BrfIFVRxSrsDCKcbw3LVRoDBCK+IHRiv0NSBg8x8ZqPF+VFRuRLpHMFWXotpJA+bhno CrxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783500474; x=1784105274; h=in-reply-to:references:mime-version:to:subject:cc:from:message-id :date:content-type:x-gm-gg:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=Ux2B6awDF7X58JX8eyrAEUhtDs1VzCVpPgvutvGPup4=; b=cLiI9cyJwy5GZAydCpyGsYgcti83ChHHwPKD7bwnAT1SmEynK7YbOYyeKl9ng92YYv YsCzxWwgaaci7AfGizbkc2BDLggg7KhfYSlaSdCYNyOJEGY2VAkch1owQG8vNUmDVAd8 3DO55PECj7j7xSlt+xkv6BFd5aVffJqd5hvuIK/cHU9yKmNxoQR+RDoNM/YvOlenL6Y+ wD6AkgHdUFTKcqgHk332T9avjcC3N0zHipndUe1yk1HzWdKrXRaQdqh+sw1upc3PLpQP eD40ImMnuInKB7g+dwzY0rfGTuh2bfC3jWQ0tiNTbn0SUSnBrUm4nrR2cCODQiwFxOYN CJgA== X-Forwarded-Encrypted: i=1; AHgh+RqQoX8oV/c00+mh0jcgPx742tznVY33PF9xM0BEjayupDSnS/xp59K+JPqM8g4H50e4K/YjwBNDSUpteOBe@postgresql.org X-Gm-Message-State: AOJu0YzxejhPN+he7taFsxJhK+J0cG3dk0Vgv03E+Gvhg84y7P1LepqF AFS7IdayYakMDyqpmdrR+AabpFIAZmRX3Z63V2//K7fMTAdV8GEPfshqab+n+IMhOQk= X-Gm-Gg: AfdE7clPro+gP/NHdZMzIsxtuswdA5AicIAI9Cd0VdEsVhTUOuwu+y7yheApt3O+jpr kA6ee6UdTY9FEBoAzrDmAEQTtobYLnarsGD2SLfZUBXxwK3lDSU+W0pmFWF4ptdjcoIz2XWtdEF 5GXOxw5602Wo1QCYWoY46BaKatFjskAF4DZQ46kGDDeKJlAT86MA2k+BCK6x1wE39lCmEqPGoy5 CizOhQAe1DzjA3JilwVT7NVqrGs5Vw5o/9z1JmwX5Hl2OfRGKw9p0kxu1upGZN37vxrgIEl7LwQ punpxOjkDVDMUR1bKibuNEOEDzq6RRczFMuywDx10HHaF0KSgpDbmEaOqGaXxUjPUpw5JLGmlB/ yGTeboW6TpTZetJjmkZLGrbApLYIH1jusqtGxyhN7TwuuYF1/HB5JYiEzvqbXdLff+wT4yT/vwv RgGpSIdiMN1Czht7spVEPhVUc64ROQoa2EnzoY1w== X-Received: by 2002:a17:907:d15:b0:c15:9350:dfa6 with SMTP id a640c23a62f3a-c15ce21e09dmr68810166b.60.1783500473983; Wed, 08 Jul 2026 01:47:53 -0700 (PDT) Received: from localhost (145-53-221-196.fixed.kpn.net. [145.53.221.196]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-c15b7561db1sm218102966b.12.2026.07.08.01.47.53 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 08 Jul 2026 01:47:53 -0700 (PDT) Content-Type: multipart/mixed; boundary=245f069b0939b22d80b00921116f1eaeb86b1c3ab8338347811ae4c2b9db Date: Wed, 08 Jul 2026 10:47:52 +0200 Message-Id: From: "Jelte Fennema-Nio" Cc: "Heikki Linnakangas" , "Bryan Green" , "pgsql-hackers" , "Tom Lane" , "Kyotaro Horiguchi" Subject: Re: Can we get rid of TerminateThread() in pg_dump? To: "Thomas Munro" MIME-Version: 1.0 References: <56821e0d-bfd5-4619-b13f-12e28c78289b@iki.fi> <5e4a28ec-d5e1-4817-889c-b8aefe5f48ed@iki.fi> <400c93d2-0b81-4a0b-ac60-0fd6512d5b5d@iki.fi> In-Reply-To: X-TUID: Igfb64N0WOwH List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --245f069b0939b22d80b00921116f1eaeb86b1c3ab8338347811ae4c2b9db Content-Type: multipart/alternative; boundary=f5966566ed18fa7c1876855cf57fc91e40df917c8b6945ff3f3a68527ff9 --f5966566ed18fa7c1876855cf57fc91e40df917c8b6945ff3f3a68527ff9 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8; format=Flowed On Wed, Jul 8, 2026, 01:41 Thomas Munro wrote: > On Tue, Jul 7, 2026 at 9:23=E2=80=AFAM Heikki Linnakangas wrote: > > In this case, though, I think all we need is a "volatile sigatomic_t" > > flag. Sending the query cancellation over the network surely acts as a > > full compiler and memory barrier in the cancelling thread. And similarl= y > > receiving the error message from the network acts as a full barrier in > > the other threads that might receive the cancellation error from the > > backend. > > You're right. So basically Jelte's patch, except it doesn't need the > Win32 atomics stuff, just volatile, and a comment to explain that > assumption. (Then some later version could use an explicit barrier > instead of a comment, I guess, just to be clearer.) Without any synchronization primitives there's still room for a data-race, right? But I guess in practice that doesn't matter for the messages we actually care about. Attached is a patch with that change, altough I'm using "volatile bool" instead of "volatile sigatomic_t" since there are no signal handlers involved here. I also added !is_cancel_in_progress() checks in a few more places to silence the places that Bryan had found. To be clear: putting all of these threads together I'd like to remove this function again completely. Instead I'd like this to use CancelRequested for this, but that requires my PQblockingCancel patchset to be merged first. And then I'd like to make CancelRequested a C11 atomic_flag instead of a volatile. --f5966566ed18fa7c1876855cf57fc91e40df917c8b6945ff3f3a68527ff9-- --245f069b0939b22d80b00921116f1eaeb86b1c3ab8338347811ae4c2b9db Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v3-0001-pg_dump-Remove-TerminateThread-call.patch Content-Type: text/x-patch; charset=utf-8; name=v3-0001-pg_dump-Remove-TerminateThread-call.patch RnJvbSBjZmExNzY0Y2NjMTY1NTI5ODhjMGRlYjcxOTBjMGI4ZmZiNWIyMjE1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWx0ZSBGZW5uZW1hLU5pbyA8cG9zdGdyZXNAamVsdGVmLm5s PgpEYXRlOiBTYXQsIDQgSnVsIDIwMjYgMTE6MTE6MDkgKzAyMDAKU3ViamVjdDogW1BBVENIIHYz XSBwZ19kdW1wOiBSZW1vdmUgVGVybWluYXRlVGhyZWFkKCkgY2FsbAoKV2hlbiBwZ19kdW1wIG9y IHBnX3Jlc3RvcmUgLS1qb2JzIE4gaXMgaW50ZXJydXB0ZWQgd2l0aCBeQyBvbiBXaW5kb3dzLAp3 ZSBjYW5jZWwgYWxsIHF1ZXJpZXMsIGJ1dCB3ZSBkb24ndCB3YW50IHRoZSBjYW5jZWxsYXRpb25z IHRvIGJlCnJlcG9ydGVkIGFzIGVycm9ycyB0byB0aGUgdXNlciBpbiB0aGUgc2hvcnQgdGltZSBi ZWZvcmUgdGhlIHdob2xlCnByb2Nlc3MgZXhpdHMuCgpUaGF0IHdhcyBwcmV2aW91c2x5IGFjaGll dmVkIGJ5IGNhbGxpbmcgVGVybWluYXRlVGhyZWFkKCkgb24gZWFjaCB3b3JrZXIKdGhyZWFkIGJl Zm9yZSBzZW5kaW5nIHRoZSBjYW5jZWwgbWVzc2FnZSwgYnV0IHRoYXQgZG9lc24ndCBhcHBlYXIg dG8gYmUKMTAwJSBzYWZlOiB0aGUgaW1wbGVtZW50YXRpb25zIG9mIHdyaXRlKCkgYW5kIHRoZSBz b2NrZXQgY2FsbHMgaW5zaWRlClBRY2FuY2VsKCkgbWlnaHQgYWNxdWlyZSB1c2VyIHNwYWNlIGxv Y2tzIHRoYXQgd2VyZSBoZWxkIGJ5IHRoZQp0ZXJtaW5hdGVkIHRocmVhZHMuICAod3JpdGUoKSBj ZXJ0YWlubHkgZG9lcyB0aGF0LikKCkluc3RlYWQgb2Ygc2lsZW5jaW5nIHRoZSB0aHJlYWRzIGlu IHN1Y2ggYSBza2V0Y2h5IHdheSB0aGlzIG5vdyBzZXRzIGEKdm9sYXRpbGUgZmxhZyAoYmVmb3Jl IHNlbmRpbmcgYW55IGNhbmNlbCByZXF1ZXN0cykgdGhhdCB0ZWxscyB0aGUKdGhyZWFkcyB0byBu b3QgbG9nIGVycm9ycyBhbnltb3JlLiBJbnN0ZWFkIG9mIGEgdm9sYXRpbGUsIGl0IHdvdWxkIGJl CmJldHRlciB0byB1c2UgYW4gYXRvbWljIG9wZXJhdGlvbiBoZXJlLCB0aGF0IGhhcyB0byB3YWl0 IHVudGlsIHdlIGFkZApzdXBwb3J0IGZvciBhdG9taWNzIG9uIHRoZSBmcm9udGVuZCB0aG91Z2gu CgpOb3RlIHRoYXQgdGhpcyBhbHNvIHN0b3BzIHVzaW5nIHBnX2ZhdGFsIGFuZCBleGl0IHRvIGV4 aXQgZnJvbSB3b3JrZXJzCm9uIGZhaWx1cmUgYW5kIGluc3RlYWQgdXNlIHBnX2xvZ19lcnJvciBj b21iaW5lZCB3aXRoIGV4aXRfbmljZWx5LiBJZiBhCnF1ZXJ5IGZhaWxzIGluIGEgd29ya2VyIHdl IHdhbnQgaXQgdG8ga2lsbCB0aGUgd29ya2VyIG5vdCB0aGUgd2hvbGUKcHJvY2Vzcy4gT24gVW5p eCB0aGF0J3MgY3VycmVudGx5IHRoZSBzYW1lIHRoaW5nLCBidXQgb24gV2luZG93cyB3b3JrZXJz CmFyZSB0aHJlYWRzLgotLS0KIHNyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jICAgICAgICAgICB8 IDUwICsrKysrKysrKystLS0tLS0tLS0tCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hp dmVyLmMgfCA2OSArKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tCiBzcmMvYmluL3BnX2R1bXAv cGdfYmFja3VwX2RiLmMgICAgICAgfCAzMCArKysrKysrKy0tLS0KIHNyYy9iaW4vcGdfZHVtcC9w Z19iYWNrdXBfdXRpbHMuYyAgICB8IDM2ICsrKysrKysrKysrKysrKwogc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cF91dGlscy5oICAgIHwgMjEgKysrKysrKysrCiA1IGZpbGVzIGNoYW5nZWQsIDEz OSBpbnNlcnRpb25zKCspLCA2NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2R1bXAvcGFyYWxsZWwuYyBiL3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jCmluZGV4IGI3N2Qy NjUwZGYwLi4xYmJjZjkxY2QxZiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVs LmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMKQEAgLTUzMSwxMSArNTMxLDEyIEBA IFdhaXRGb3JUZXJtaW5hdGluZ1dvcmtlcnMoUGFyYWxsZWxTdGF0ZSAqcHN0YXRlKQogICogbWln aHQgYmUgdGhhdCBvbmx5IHRoZSBsZWFkZXIgZ2V0cyBzaWduYWxlZC4KICAqCiAgKiBPbiBXaW5k b3dzLCB0aGUgY2FuY2VsIGhhbmRsZXIgcnVucyBpbiBhIHNlcGFyYXRlIHRocmVhZCwgYmVjYXVz ZSB0aGF0J3MKLSAqIGhvdyBTZXRDb25zb2xlQ3RybEhhbmRsZXIgd29ya3MuICBXZSBtYWtlIGl0 IHN0b3Agd29ya2VyIHRocmVhZHMsIHNlbmQKLSAqIGNhbmNlbHMgb24gYWxsIGFjdGl2ZSBjb25u ZWN0aW9ucywgYW5kIHRoZW4gcmV0dXJuIEZBTFNFLCB3aGljaCB3aWxsIGFsbG93Ci0gKiB0aGUg cHJvY2VzcyB0byBkaWUuICBGb3Igc2FmZXR5J3Mgc2FrZSwgd2UgdXNlIGEgY3JpdGljYWwgc2Vj dGlvbiB0bwotICogcHJvdGVjdCB0aGUgUEdjYW5jZWwgc3RydWN0dXJlcyBhZ2FpbnN0IGJlaW5n IGNoYW5nZWQgd2hpbGUgdGhlIHNpZ25hbAotICogdGhyZWFkIHJ1bnMuCisgKiBob3cgU2V0Q29u c29sZUN0cmxIYW5kbGVyIHdvcmtzLiAgQmVjYXVzZSB0aGUgd29ya2VycyBhcmUgdGhyZWFkcyBp biB0aGlzCisgKiBzYW1lIHByb2Nlc3MsIHdlIHNldCBhIGZsYWcgKGlzX2NhbmNlbF9pbl9wcm9n cmVzcygpKSBzbyB0aGV5IHN0YXkgcXVpZXQgYWJvdXQKKyAqIHRoZSBxdWVyeSBjYW5jZWxsYXRp b25zIGluc3RlYWQgb2YgY2x1dHRlcmluZyB0aGUgc2NyZWVuLCB0aGVuIHNlbmQgY2FuY2Vscwor ICogb24gYWxsIGFjdGl2ZSBjb25uZWN0aW9ucyBhbmQgcmV0dXJuIEZBTFNFLCB3aGljaCB3aWxs IGFsbG93IHRoZSBwcm9jZXNzIHRvCisgKiBkaWUuICBGb3Igc2FmZXR5J3Mgc2FrZSwgd2UgdXNl IGEgY3JpdGljYWwgc2VjdGlvbiB0byBwcm90ZWN0IHRoZSBQR2NhbmNlbAorICogc3RydWN0dXJl cyBhZ2FpbnN0IGJlaW5nIGNoYW5nZWQgd2hpbGUgdGhlIHNpZ25hbCB0aHJlYWQgcnVucy4KICAq LwogCiAjaWZuZGVmIFdJTjMyCkBAIC02NDEsMzQgKzY0MiwzMCBAQCBjb25zb2xlSGFuZGxlcihE V09SRCBkd0N0cmxUeXBlKQogCWlmIChkd0N0cmxUeXBlID09IENUUkxfQ19FVkVOVCB8fAogCQlk d0N0cmxUeXBlID09IENUUkxfQlJFQUtfRVZFTlQpCiAJeworCQkvKgorCQkgKiBUZWxsIHdvcmtl ciB0aHJlYWRzIHRvIHN0YXkgcXVpZXQgYWJvdXQgdGhlIHF1ZXJ5IGNhbmNlbGxhdGlvbnMKKwkJ ICogd2UncmUgYWJvdXQgdG8gc2VuZCB0aGVtOyBvdGhlcndpc2UgdGhleSdkIHJlcG9ydCB0aGVt IGFzIGVycm9ycworCQkgKiBhbmQgY2x1dHRlciB0aGUgdXNlcidzIHNjcmVlbi4gIFRoaXMgbXVz dCBiZSBzZXQgYmVmb3JlIHdlIHNlbmQgYW55CisJCSAqIGNhbmNlbCwgc28gdGhhdCBhIHdvcmtl ciBpcyBndWFyYW50ZWVkIHRvIHNlZSBpdCBieSB0aGUgdGltZSBpdHMKKwkJICogcXVlcnkgZmFp bHMgYXMgYSByZXN1bHQuCisJCSAqLworCQlzZXRfY2FuY2VsX2luX3Byb2dyZXNzKCk7CisKIAkJ LyogQ3JpdGljYWwgc2VjdGlvbiBwcmV2ZW50cyBjaGFuZ2luZyBkYXRhIHdlIGxvb2sgYXQgaGVy ZSAqLwogCQlFbnRlckNyaXRpY2FsU2VjdGlvbigmc2lnbmFsX2luZm9fbG9jayk7CiAKIAkJLyoK LQkJICogSWYgaW4gcGFyYWxsZWwgbW9kZSwgc3RvcCB3b3JrZXIgdGhyZWFkcyBhbmQgc2VuZCBR dWVyeUNhbmNlbCB0bwotCQkgKiB0aGVpciBjb25uZWN0ZWQgYmFja2VuZHMuICBUaGUgbWFpbiBw b2ludCBvZiBzdG9wcGluZyB0aGUgd29ya2VyCi0JCSAqIHRocmVhZHMgaXMgdG8ga2VlcCB0aGVt IGZyb20gcmVwb3J0aW5nIHRoZSBxdWVyeSBjYW5jZWxzIGFzIGVycm9ycywKLQkJICogd2hpY2gg d291bGQgY2x1dHRlciB0aGUgdXNlcidzIHNjcmVlbi4gIFdlIG5lZWRuJ3Qgc3RvcCB0aGUgbGVh ZGVyCi0JCSAqIHRocmVhZCBzaW5jZSBpdCB3b24ndCBiZSBkb2luZyBtdWNoIGFueXdheS4gIERv IHRoaXMgYmVmb3JlCi0JCSAqIGNhbmNlbGluZyB0aGUgbWFpbiB0cmFuc2FjdGlvbiwgZWxzZSB3 ZSBtaWdodCBnZXQgaW52YWxpZC1zbmFwc2hvdAotCQkgKiBlcnJvcnMgcmVwb3J0ZWQgYmVmb3Jl IHdlIGNhbiBzdG9wIHRoZSB3b3JrZXJzLiAgSWdub3JlIGVycm9ycywKLQkJICogdGhlcmUncyBu b3QgbXVjaCB3ZSBjYW4gZG8gYWJvdXQgdGhlbSBhbnl3YXkuCisJCSAqIElmIGluIHBhcmFsbGVs IG1vZGUsIHNlbmQgUXVlcnlDYW5jZWwgdG8gZWFjaCB3b3JrZXIncyBjb25uZWN0ZWQKKwkJICog YmFja2VuZC4gIERvIHRoaXMgYmVmb3JlIGNhbmNlbGluZyB0aGUgbWFpbiB0cmFuc2FjdGlvbiwg ZWxzZSB3ZQorCQkgKiBtaWdodCBnZXQgaW52YWxpZC1zbmFwc2hvdCBlcnJvcnMgcmVwb3J0ZWQg YmVmb3JlIHdlIGNhbiBzdG9wIHRoZQorCQkgKiB3b3JrZXJzLiAgSWdub3JlIGVycm9ycywgdGhl cmUncyBub3QgbXVjaCB3ZSBjYW4gZG8gYWJvdXQgdGhlbQorCQkgKiBhbnl3YXkuCiAJCSAqLwog CQlpZiAoc2lnbmFsX2luZm8ucHN0YXRlICE9IE5VTEwpCiAJCXsKIAkJCWZvciAoaSA9IDA7IGkg PCBzaWduYWxfaW5mby5wc3RhdGUtPm51bVdvcmtlcnM7IGkrKykKIAkJCXsKLQkJCQlQYXJhbGxl bFNsb3QgKnNsb3QgPSAmKHNpZ25hbF9pbmZvLnBzdGF0ZS0+cGFyYWxsZWxTbG90W2ldKTsKLQkJ CQlBcmNoaXZlSGFuZGxlICpBSCA9IHNsb3QtPkFIOwotCQkJCUhBTkRMRQkJaFRocmVhZCA9IChI QU5ETEUpIHNsb3QtPmhUaHJlYWQ7Ci0KLQkJCQkvKgotCQkJCSAqIFVzaW5nIFRlcm1pbmF0ZVRo cmVhZCBoZXJlIG1heSBsZWF2ZSBzb21lIHJlc291cmNlcyBsZWFrZWQsCi0JCQkJICogYnV0IGl0 IGRvZXNuJ3QgbWF0dGVyIHNpbmNlIHdlJ3JlIGFib3V0IHRvIGVuZCB0aGUgd2hvbGUKLQkJCQkg KiBwcm9jZXNzLgotCQkJCSAqLwotCQkJCWlmIChoVGhyZWFkICE9IElOVkFMSURfSEFORExFX1ZB TFVFKQotCQkJCQlUZXJtaW5hdGVUaHJlYWQoaFRocmVhZCwgMCk7CisJCQkJQXJjaGl2ZUhhbmRs ZSAqQUggPSBzaWduYWxfaW5mby5wc3RhdGUtPnBhcmFsbGVsU2xvdFtpXS5BSDsKIAogCQkJCWlm IChBSCAhPSBOVUxMICYmIEFILT5jb25uQ2FuY2VsICE9IE5VTEwpCiAJCQkJCSh2b2lkKSBQUWNh bmNlbChBSC0+Y29ubkNhbmNlbCwgZXJyYnVmLCBzaXplb2YoZXJyYnVmKSk7CkBAIC02ODcsOSAr Njg0LDggQEAgY29uc29sZUhhbmRsZXIoRFdPUkQgZHdDdHJsVHlwZSkKIAogCQkvKgogCQkgKiBS ZXBvcnQgd2UncmUgcXVpdHRpbmcsIHVzaW5nIG5vdGhpbmcgbW9yZSBjb21wbGljYXRlZCB0aGFu Ci0JCSAqIHdyaXRlKDIpLiAgKFdlIG1pZ2h0IGJlIGFibGUgdG8gZ2V0IGF3YXkgd2l0aCB1c2lu ZyBwZ19sb2dfKigpCi0JCSAqIGhlcmUsIGJ1dCBzaW5jZSB3ZSB0ZXJtaW5hdGVkIG90aGVyIHRo cmVhZHMgdW5jbGVhbmx5IGFib3ZlLCBpdAotCQkgKiBzZWVtcyBiZXR0ZXIgdG8gYXNzdW1lIGFz IGxpdHRsZSBhcyBwb3NzaWJsZS4pCisJCSAqIHdyaXRlKDIpLiBXZSBzaG91bGQgYmUgYWJsZSB0 byB1c2UgcGdfbG9nXyooKSBoZXJlLCBidXQgZm9yIG5vdyB3ZQorCQkgKiBzdGF5IGFsaWduZWQg d2l0aCB0aGUgc2lnVGVybUhhbmRsZXIgYmVoYXZpb3IuCiAJCSAqLwogCQlpZiAocHJvZ25hbWUp CiAJCXsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyBi L3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwppbmRleCAwNTU3ZWI2ZDZlZC4u NzdjYzUwZTA2MDcgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2 ZXIuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKQEAgLTE4OTYs NDcgKzE4OTYsNTIgQEAgYWh3cml0ZShjb25zdCB2b2lkICpwdHIsIHNpemVfdCBzaXplLCBzaXpl X3Qgbm1lbWIsIEFyY2hpdmVIYW5kbGUgKkFIKQogdm9pZAogd2Fybl9vcl9leGl0X2hvcnJpYmx5 KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKLQl2YV9saXN0CQlh cDsKLQotCXN3aXRjaCAoQUgtPnN0YWdlKQorCS8qIFN0YXkgcXVpZXQgaWYgdGhpcyBpcyBhIHJl c3VsdCBvZiBvdXIgb3duIGNhbmNlbGxhdGlvbi4gKi8KKwlpZiAoIWlzX2NhbmNlbF9pbl9wcm9n cmVzcygpKQogCXsKKwkJdmFfbGlzdAkJYXA7CiAKLQkJY2FzZSBTVEFHRV9OT05FOgotCQkJLyog RG8gbm90aGluZyBzcGVjaWFsICovCi0JCQlicmVhazsKKwkJc3dpdGNoIChBSC0+c3RhZ2UpCisJ CXsKIAotCQljYXNlIFNUQUdFX0lOSVRJQUxJWklORzoKLQkJCWlmIChBSC0+c3RhZ2UgIT0gQUgt Pmxhc3RFcnJvclN0YWdlKQotCQkJCXBnX2xvZ19pbmZvKCJ3aGlsZSBJTklUSUFMSVpJTkc6Iik7 Ci0JCQlicmVhazsKKwkJCWNhc2UgU1RBR0VfTk9ORToKKwkJCQkvKiBEbyBub3RoaW5nIHNwZWNp YWwgKi8KKwkJCQlicmVhazsKIAotCQljYXNlIFNUQUdFX1BST0NFU1NJTkc6Ci0JCQlpZiAoQUgt PnN0YWdlICE9IEFILT5sYXN0RXJyb3JTdGFnZSkKLQkJCQlwZ19sb2dfaW5mbygid2hpbGUgUFJP Q0VTU0lORyBUT0M6Iik7Ci0JCQlicmVhazsKKwkJCWNhc2UgU1RBR0VfSU5JVElBTElaSU5HOgor CQkJCWlmIChBSC0+c3RhZ2UgIT0gQUgtPmxhc3RFcnJvclN0YWdlKQorCQkJCQlwZ19sb2dfaW5m bygid2hpbGUgSU5JVElBTElaSU5HOiIpOworCQkJCWJyZWFrOwogCi0JCWNhc2UgU1RBR0VfRklO QUxJWklORzoKLQkJCWlmIChBSC0+c3RhZ2UgIT0gQUgtPmxhc3RFcnJvclN0YWdlKQotCQkJCXBn X2xvZ19pbmZvKCJ3aGlsZSBGSU5BTElaSU5HOiIpOwotCQkJYnJlYWs7Ci0JfQotCWlmIChBSC0+ Y3VycmVudFRFICE9IE5VTEwgJiYgQUgtPmN1cnJlbnRURSAhPSBBSC0+bGFzdEVycm9yVEUpCi0J ewotCQlwZ19sb2dfaW5mbygiZnJvbSBUT0MgZW50cnkgJWQ7ICV1ICV1ICVzICVzICVzIiwKLQkJ CQkJQUgtPmN1cnJlbnRURS0+ZHVtcElkLAotCQkJCQlBSC0+Y3VycmVudFRFLT5jYXRhbG9nSWQu dGFibGVvaWQsCi0JCQkJCUFILT5jdXJyZW50VEUtPmNhdGFsb2dJZC5vaWQsCi0JCQkJCUFILT5j dXJyZW50VEUtPmRlc2MgPyBBSC0+Y3VycmVudFRFLT5kZXNjIDogIihubyBkZXNjKSIsCi0JCQkJ CUFILT5jdXJyZW50VEUtPnRhZyA/IEFILT5jdXJyZW50VEUtPnRhZyA6ICIobm8gdGFnKSIsCi0J CQkJCUFILT5jdXJyZW50VEUtPm93bmVyID8gQUgtPmN1cnJlbnRURS0+b3duZXIgOiAiKG5vIG93 bmVyKSIpOworCQkJY2FzZSBTVEFHRV9QUk9DRVNTSU5HOgorCQkJCWlmIChBSC0+c3RhZ2UgIT0g QUgtPmxhc3RFcnJvclN0YWdlKQorCQkJCQlwZ19sb2dfaW5mbygid2hpbGUgUFJPQ0VTU0lORyBU T0M6Iik7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgU1RBR0VfRklOQUxJWklORzoKKwkJCQlpZiAo QUgtPnN0YWdlICE9IEFILT5sYXN0RXJyb3JTdGFnZSkKKwkJCQkJcGdfbG9nX2luZm8oIndoaWxl IEZJTkFMSVpJTkc6Iik7CisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKEFILT5jdXJyZW50VEUgIT0g TlVMTCAmJiBBSC0+Y3VycmVudFRFICE9IEFILT5sYXN0RXJyb3JURSkKKwkJeworCQkJcGdfbG9n X2luZm8oImZyb20gVE9DIGVudHJ5ICVkOyAldSAldSAlcyAlcyAlcyIsCisJCQkJCQlBSC0+Y3Vy cmVudFRFLT5kdW1wSWQsCisJCQkJCQlBSC0+Y3VycmVudFRFLT5jYXRhbG9nSWQudGFibGVvaWQs CisJCQkJCQlBSC0+Y3VycmVudFRFLT5jYXRhbG9nSWQub2lkLAorCQkJCQkJQUgtPmN1cnJlbnRU RS0+ZGVzYyA/IEFILT5jdXJyZW50VEUtPmRlc2MgOiAiKG5vIGRlc2MpIiwKKwkJCQkJCUFILT5j dXJyZW50VEUtPnRhZyA/IEFILT5jdXJyZW50VEUtPnRhZyA6ICIobm8gdGFnKSIsCisJCQkJCQlB SC0+Y3VycmVudFRFLT5vd25lciA/IEFILT5jdXJyZW50VEUtPm93bmVyIDogIihubyBvd25lciki KTsKKwkJfQorCisJCXZhX3N0YXJ0KGFwLCBmbXQpOworCQlwZ19sb2dfZ2VuZXJpY192KFBHX0xP R19FUlJPUiwgUEdfTE9HX1BSSU1BUlksIGZtdCwgYXApOworCQl2YV9lbmQoYXApOwogCX0KKwog CUFILT5sYXN0RXJyb3JTdGFnZSA9IEFILT5zdGFnZTsKIAlBSC0+bGFzdEVycm9yVEUgPSBBSC0+ Y3VycmVudFRFOwogCi0JdmFfc3RhcnQoYXAsIGZtdCk7Ci0JcGdfbG9nX2dlbmVyaWNfdihQR19M T0dfRVJST1IsIFBHX0xPR19QUklNQVJZLCBmbXQsIGFwKTsKLQl2YV9lbmQoYXApOwotCiAJaWYg KEFILT5wdWJsaWMuZXhpdF9vbl9lcnJvcikKIAkJZXhpdF9uaWNlbHkoMSk7CiAJZWxzZQpkaWZm IC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kYi5jIGIvc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cF9kYi5jCmluZGV4IGVjMGRkZjFkNzE4Li4xN2MwYjdjYmRmMiAxMDA2NDQKLS0t IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kYi5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9w Z19iYWNrdXBfZGIuYwpAQCAtMjA3LDEwICsyMDcsMTQgQEAgbm90aWNlX3Byb2Nlc3Nvcih2b2lk ICphcmcsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiBzdGF0aWMgdm9pZAogZGllX29uX3F1ZXJ5X2Zh aWx1cmUoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKnF1ZXJ5KQogewotCXBnX2xvZ19l cnJvcigicXVlcnkgZmFpbGVkOiAlcyIsCi0JCQkJIFBRZXJyb3JNZXNzYWdlKEFILT5jb25uZWN0 aW9uKSk7Ci0JcGdfbG9nX2Vycm9yX2RldGFpbCgiUXVlcnkgd2FzOiAlcyIsIHF1ZXJ5KTsKLQll eGl0KDEpOworCWlmICghaXNfY2FuY2VsX2luX3Byb2dyZXNzKCkpCisJeworCQlwZ19sb2dfZXJy b3IoInF1ZXJ5IGZhaWxlZDogJXMiLAorCQkJCQkgUFFlcnJvck1lc3NhZ2UoQUgtPmNvbm5lY3Rp b24pKTsKKwkJcGdfbG9nX2Vycm9yX2RldGFpbCgiUXVlcnkgd2FzOiAlcyIsIHF1ZXJ5KTsKKwl9 CisKKwlleGl0X25pY2VseSgxKTsKIH0KIAogdm9pZApAQCAtMzk2LDggKzQwMCwxMyBAQCBFeGVj dXRlU3FsQ29tbWFuZEJ1ZihBcmNoaXZlICpBSFgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1 ZkxlbikKIAkJICovCiAJCWlmIChBSC0+cGdDb3B5SW4gJiYKIAkJCVBRcHV0Q29weURhdGEoQUgt PmNvbm5lY3Rpb24sIGJ1ZiwgYnVmTGVuKSA8PSAwKQotCQkJcGdfZmF0YWwoImVycm9yIHJldHVy bmVkIGJ5IFBRcHV0Q29weURhdGE6ICVzIiwKLQkJCQkJIFBRZXJyb3JNZXNzYWdlKEFILT5jb25u ZWN0aW9uKSk7CisJCXsKKwkJCS8qIFN0YXkgcXVpZXQgaWYgdGhpcyBpcyBhIHJlc3VsdCBvZiBv dXIgb3duIGNhbmNlbGxhdGlvbi4gKi8KKwkJCWlmICghaXNfY2FuY2VsX2luX3Byb2dyZXNzKCkp CisJCQkJcGdfbG9nX2Vycm9yKCJlcnJvciByZXR1cm5lZCBieSBQUXB1dENvcHlEYXRhOiAlcyIs CisJCQkJCQkJIFBRZXJyb3JNZXNzYWdlKEFILT5jb25uZWN0aW9uKSk7CisJCQlleGl0X25pY2Vs eSgxKTsKKwkJfQogCX0KIAllbHNlIGlmIChBSC0+b3V0cHV0S2luZCA9PSBPVVRQVVRfT1RIRVJE QVRBKQogCXsKQEAgLTQ0NSw4ICs0NTQsMTMgQEAgRW5kREJDb3B5TW9kZShBcmNoaXZlICpBSFgs IGNvbnN0IGNoYXIgKnRvY0VudHJ5VGFnKQogCQlQR3Jlc3VsdCAgICpyZXM7CiAKIAkJaWYgKFBR cHV0Q29weUVuZChBSC0+Y29ubmVjdGlvbiwgTlVMTCkgPD0gMCkKLQkJCXBnX2ZhdGFsKCJlcnJv ciByZXR1cm5lZCBieSBQUXB1dENvcHlFbmQ6ICVzIiwKLQkJCQkJIFBRZXJyb3JNZXNzYWdlKEFI LT5jb25uZWN0aW9uKSk7CisJCXsKKwkJCS8qIFN0YXkgcXVpZXQgaWYgdGhpcyBpcyBhIHJlc3Vs dCBvZiBvdXIgb3duIGNhbmNlbGxhdGlvbi4gKi8KKwkJCWlmICghaXNfY2FuY2VsX2luX3Byb2dy ZXNzKCkpCisJCQkJcGdfbG9nX2Vycm9yKCJlcnJvciByZXR1cm5lZCBieSBQUXB1dENvcHlFbmQ6 ICVzIiwKKwkJCQkJCQkgUFFlcnJvck1lc3NhZ2UoQUgtPmNvbm5lY3Rpb24pKTsKKwkJCWV4aXRf bmljZWx5KDEpOworCQl9CiAKIAkJLyogQ2hlY2sgY29tbWFuZCBzdGF0dXMgYW5kIHJldHVybiB0 byBub3JtYWwgbGlicHEgc3RhdGUgKi8KIAkJcmVzID0gUFFnZXRSZXN1bHQoQUgtPmNvbm5lY3Rp b24pOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5jIGIvc3Jj L2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5jCmluZGV4IDAzNjhmNzYyM2E3Li5hMjkxYjk5 NTNlNiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5jCisrKyBi L3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdXRpbHMuYwpAQCAtMjEsNiArMjEsNDIgQEAKIC8q IEdsb2JhbHMgZXhwb3J0ZWQgYnkgdGhpcyBmaWxlICovCiBjb25zdCBjaGFyICpwcm9nbmFtZSA9 IE5VTEw7CiAKKyNpZmRlZiBXSU4zMgorCisvKgorICogRmxhZyB0ZWxsaW5nIHdvcmtlciB0aHJl YWRzIHRvIHN0YXkgcXVpZXQgYWJvdXQgcXVlcnkgZmFpbHVyZXMgYmVjYXVzZSB3ZSdyZQorICog Y2FuY2VsbGluZyB0aGVpciBxdWVyaWVzIGFzIHBhcnQgb2YgdGVhcmluZyBkb3duIHRoZSBwcm9j ZXNzLiAgU2VlIHRoZQorICogY29tbWVudCBpbiBwZ19iYWNrdXBfdXRpbHMuaC4KKyAqCisgKiBU aGUgY2FuY2VsIHRocmVhZCB3cml0ZXMgaXQgd2hpbGUgd29ya2VyIHRocmVhZHMgcmVhZCBpdCwg c28gaXQncyBtYXJrZWQKKyAqIHZvbGF0aWxlIHRvIGtlZXAgdGhlIGNvbXBpbGVyIGZyb20gY2Fj aGluZyB0aGUgdmFsdWUuICBBIHBsYWluIHZvbGF0aWxlIGJvb2wKKyAqIGlzbid0IGEgcmVhbCBt ZW1vcnkgYmFycmllciwgYnV0IGl0J3MgZ29vZCBlbm91Z2ggaGVyZTogdGhlIGZsYWcgaXMgb25s eSBldmVyCisgKiBmbGlwcGVkIG9uZSB3YXkgKGZhbHNlIHRvIHRydWUpIGFuZCBhIHdvcmtlciBi cmllZmx5IG9ic2VydmluZyB0aGUgc3RhbGUKKyAqIGZhbHNlIGp1c3QgbWVhbnMgaXQgcHJpbnRz IG9uZSBlcnJvciBiZWZvcmUgdGhlIHByb2Nlc3MgZGllcy4gVGhlIG9ubHkgZ29hbAorICogb2Yg dGhpcyBmbGFnIGlzIHRvIG1ha2Ugc3VyZSB3b3JrZXJzIGRvbid0IGxvZyAicXVlcnkgY2FuY2Vs bGVkIiBlcnJvcnMKKyAqIGR1cmluZyB0aGUgc2h1dGRvd24gcHJvY2Vzcy4gV2hlbiBzdWNoIGFu IGVycm9yIGlzIHJlY2VpdmVkIHRoYXQgYWN0cyBhcyBhCisgKiBmdWxsIGJhcnJpZXIgc28gZm9y IHRoZSBtZXNzYWdlcyB0aGF0IHdlIGNhcmUgYWJvdXQgYSBzdGFsZSB2YWx1ZSB3b24ndCBiZQor ICogb2JzZXJ2ZWQuCisgKgorICogWFhYOiBUaGlzIHNob3VsZCBiZSBzd2FwcGVkIG91dCBmb3Ig YSBwcm9wZXIgYXRvbWljIHdoZW4gd2UgaGF2ZSB0aG9zZSBpbgorICogdGhlIGZyb250ZW5kIGNv ZGUuCisgKi8KK3N0YXRpYyB2b2xhdGlsZSBib29sIGNhbmNlbEluUHJvZ3Jlc3MgPSBmYWxzZTsK Kwordm9pZAorc2V0X2NhbmNlbF9pbl9wcm9ncmVzcyh2b2lkKQoreworCWNhbmNlbEluUHJvZ3Jl c3MgPSB0cnVlOworfQorCitib29sCitpc19jYW5jZWxfaW5fcHJvZ3Jlc3Modm9pZCkKK3sKKwly ZXR1cm4gY2FuY2VsSW5Qcm9ncmVzczsKK30KKworI2VuZGlmCQkJCQkJCS8qIFdJTjMyICovCisK ICNkZWZpbmUgTUFYX09OX0VYSVRfTklDRUxZCQkJCTIwCiAKIHN0YXRpYyBzdHJ1Y3QKZGlmZiAt LWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdXRpbHMuaCBiL3NyYy9iaW4vcGdfZHVt cC9wZ19iYWNrdXBfdXRpbHMuaAppbmRleCA5ZTk4ZWQxMTYxOS4uMzFlNjZiNjExOTggMTAwNjQ0 Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdXRpbHMuaAorKysgYi9zcmMvYmluL3Bn X2R1bXAvcGdfYmFja3VwX3V0aWxzLmgKQEAgLTMxLDYgKzMxLDI3IEBAIGV4dGVybiB2b2lkIHNl dF9kdW1wX3NlY3Rpb24oY29uc3QgY2hhciAqYXJnLCBpbnQgKmR1bXBTZWN0aW9ucyk7CiBleHRl cm4gdm9pZCBvbl9leGl0X25pY2VseShvbl9leGl0X25pY2VseV9jYWxsYmFjayBmdW5jdGlvbiwg dm9pZCAqYXJnKTsKIHBnX25vcmV0dXJuIGV4dGVybiB2b2lkIGV4aXRfbmljZWx5KGludCBjb2Rl KTsKIAorLyoKKyAqIE9uIFdpbmRvd3MgdGhlIHBhcmFsbGVsIHdvcmtlcnMgYXJlIHRocmVhZHMg aW5zaWRlIHRoZSBsZWFkZXIgcHJvY2Vzcy4gIFdoZW4KKyAqIGEgY2FuY2VsIGlzIHByb2Nlc3Nl ZCB0aGVyZSwgdGhlIGxlYWRlciBzZW5kcyBjYW5jZWxzIHRvIHRoZSB3b3JrZXJzJworICogaW4t ZmxpZ2h0IHF1ZXJpZXM7IHdpdGhvdXQgdGhpcyBmbGFnIGVhY2ggd29ya2VyIHdvdWxkIHRoZW4g cmVwb3J0IHRoZQorICogcmVzdWx0aW5nICJjYW5jZWxpbmcgc3RhdGVtZW50IGR1ZSB0byB1c2Vy IHJlcXVlc3QiIGVycm9yIGFuZCBjbHV0dGVyIHRoZQorICogc2NyZWVuIGluIHRoZSBicmllZiB3 aW5kb3cgYmVmb3JlIHRoZSB3aG9sZSBwcm9jZXNzIGV4aXRzLiAgVGhlIGNhbmNlbAorICogdGhy ZWFkIHNldHMgdGhpcyBmbGFnIGJlZm9yZSBzZW5kaW5nIGFueSBjYW5jZWwsIGFuZCB3b3JrZXIg dGhyZWFkcyBjaGVjayBpdAorICogYmVmb3JlIHJlcG9ydGluZyBhIHF1ZXJ5IGZhaWx1cmUuICBJ dCdzIHdyaXR0ZW4gYW5kIHJlYWQgZnJvbSBkaWZmZXJlbnQKKyAqIHRocmVhZHMsIHNvIGl0J3Mg bWFya2VkIHZvbGF0aWxlOyBzZWUgdGhlIGNvbW1lbnQgaW4gcGdfYmFja3VwX3V0aWxzLmMuCisg KgorICogT24gb3RoZXIgcGxhdGZvcm1zIHRoZSB3b3JrZXJzIGFyZSBzZXBhcmF0ZSBwcm9jZXNz ZXMgdGhhdCBqdXN0IF9leGl0KCkgd2hlbgorICogY2FuY2VsbGVkLCBzbyB0aGV5IG5ldmVyIHJl YWNoIHRoZSBlcnJvci1yZXBvcnRpbmcgY29kZTsgdGhlcmUgdGhlIGNoZWNrIGlzCisgKiBjb21w aWxlZCBvdXQgdG8gYSBjb25zdGFudCBmYWxzZSBhbmQgdGhlIGZsYWcgZG9lc24ndCBleGlzdC4K KyAqLworI2lmZGVmIFdJTjMyCitleHRlcm4gdm9pZCBzZXRfY2FuY2VsX2luX3Byb2dyZXNzKHZv aWQpOworZXh0ZXJuIGJvb2wgaXNfY2FuY2VsX2luX3Byb2dyZXNzKHZvaWQpOworI2Vsc2UKKyNk ZWZpbmUgaXNfY2FuY2VsX2luX3Byb2dyZXNzKCkgZmFsc2UKKyNlbmRpZgorCiAvKiBJbiBwZ19k dW1wLCB3ZSBtb2RpZnkgcGdfZmF0YWwgdG8gY2FsbCBleGl0X25pY2VseSBpbnN0ZWFkIG9mIGV4 aXQgKi8KICN1bmRlZiBwZ19mYXRhbAogI2RlZmluZSBwZ19mYXRhbCguLi4pIGRvIHsgXAoKYmFz ZS1jb21taXQ6IDA3MjExZjY0YWNlMDE1MGM5MmEwMDc2OWExY2ZlOGI5MzA1YjllNzgKLS0gCjIu NTQuMAoK --245f069b0939b22d80b00921116f1eaeb86b1c3ab8338347811ae4c2b9db--