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.94.2) (envelope-from ) id 1vELvK-00Af6N-TO for pgsql-hackers@arkaria.postgresql.org; Thu, 30 Oct 2025 06:14:14 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1vELvJ-006G9F-Ri for pgsql-hackers@arkaria.postgresql.org; Thu, 30 Oct 2025 06:14:12 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vELvJ-006G97-C7 for pgsql-hackers@lists.postgresql.org; Thu, 30 Oct 2025 06:14:12 +0000 Received: from mail-qt1-x830.google.com ([2607:f8b0:4864:20::830]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vELvF-00512y-17 for pgsql-hackers@lists.postgresql.org; Thu, 30 Oct 2025 06:14:12 +0000 Received: by mail-qt1-x830.google.com with SMTP id d75a77b69052e-4e8856210b3so747511cf.0 for ; Wed, 29 Oct 2025 23:14:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761804847; x=1762409647; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=l59JIMZRIM+5ln1auqpbdjgSU+z79xmMUC3ZbcvzWFI=; b=DMBxpksNTSGK9xj/boxWU0ZG44n+UHciLiCB9NM5Cq4Ew4K98MnVYNi03W5c+ZQ3AE Lsg4R+I30S+LGvAb4+PDaT0Uwvb8XBzWSnyYr+s8sdwTEzCR/WdgKwO8hSPipFGkfizp dYka10hikK8aCauO+Am72OhhlXlbPmuAQDVqLlQ4Jz1RuwZp+uQDR5scDJX978UCpyKe TFb+bCfVscDUp2swC7L/36Rf5lAUobiveumbPakhkFYxt62rBmWKl7RJI3G/Wx6lOnwn /1e3sfvUuwnl2TPmgSncCuAArcGu8dFRuzlStoq2sAYeWIh55ZzJCsLURjbmNUMUUFzm UmUA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761804847; x=1762409647; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=l59JIMZRIM+5ln1auqpbdjgSU+z79xmMUC3ZbcvzWFI=; b=DtwBM7Q8yoRaYGkxRYD0hfFukpUmgT3QzEdd+1DfJh8D2BwuP89tjziA2Bg8nG/dgD rX56HWfx3MP+BoscRNpW4h3IvTKJRKv1ugbnMAVESyKMsvO+t4+Wc50y0FOp6mBvy/g9 5eXZQ9wSdXz8P0qJZDbK6+gBaBl0x/LM3iiQ8l0HlgmKLllZgGRjDYPemxVQzQpkl+Ai nkWRq54Bc6zq6i0JrLTa9c6+DrTYP7rFvfh90H5XgOH0DMRoJe7M5GpIYJaAn7xdH8lu ymD3+smYxEb6A0iNvXHNUdKZNHJ9mnLhgYOpqRK1VSVZYWsp+oTdqJiYLAimwjbbtHXQ mGgA== X-Forwarded-Encrypted: i=1; AJvYcCUbf4SMymoqebCHjQA7CvRw7UuO1uKX2l2d5OoEFsBqc0pqxu8qHDmYWqtKvx+uOCMSsceKEMBVYro5ee7u@lists.postgresql.org X-Gm-Message-State: AOJu0Yz5rS19DcbBEO4nyhwOQYwFTefxphnWqCc80UOHU4l22naVoGax rhtk0ydcPYeCaCx4sS7QmVaRH2YlFzK2W0DG+4y5cpLxsl1LAk6yTUgv/C4LtQfNoXkhmO2EYW1 0Qip9EWXNhb17OW6fyDvk/vQJhTLOzkY= X-Gm-Gg: ASbGncvt/qM4DH74rmIyTWYNpHzOqGas4emnAMJq9tlaFTRRJR6FMNbhpYoHY0iW2On D2VrL/Bh9aCnuu9y0J+jWVpQb51HRXsl4lb3C+JTJmDJHQbWZkTIyKV8P/6uQ8T/+XnDuup3afb Vn9RhnweX6DoDkXJCYsfl2EBL9SdSQHbrTm7vtOzE4aWhrdKGvt9T7y1ph9bOIyTNpByMv49tPr Kd8Lqe9ctAICSNTMdF6CPYbDyaYVY3Z3n8sSHp+A+UA/eUREHrvzekMMlHNrBvlVLxsqWQG9hAs qjNSbA== X-Google-Smtp-Source: AGHT+IFeRzNl9UkwHyg6WLoeRJXTRSBXXsbqCBgh8FiBPJlGewOPMBlcjYhK4+erQtApECun+GpIpkiXkFQH1j280i4= X-Received: by 2002:ac8:5790:0:b0:4ec:ed46:9268 with SMTP id d75a77b69052e-4ed1e188a7dmr35313011cf.13.1761804847075; Wed, 29 Oct 2025 23:14:07 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Maxim Orlov Date: Thu, 30 Oct 2025 09:13:54 +0300 X-Gm-Features: AWmQ_bmIT3jBcQHs_LxZct37tuJBUwxVIOCaLa3dkSdYvy2L50HFot6RZ5Zl2MA Message-ID: Subject: Re: POC: make mxidoff 64 bits To: Heikki Linnakangas Cc: wenhui qiu , Alexander Korotkov , Ashutosh Bapat , Postgres hackers Content-Type: multipart/mixed; boundary="00000000000012f0e906425a28f6" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000012f0e906425a28f6 Content-Type: multipart/alternative; boundary="00000000000012f0e806425a28f4" --00000000000012f0e806425a28f4 Content-Type: text/plain; charset="UTF-8" Unfortunately, I need to admit that I have messed a bit with v18. I forgot to sync the pg_upgrade portion with the rest of the patch, among other things. Here's a proper version with additional testing. pg_upgrade/t/007_mxoff.pl is not meant to be committed, it's just for test purposes. In order to run it, env var oldinstall must be set. On Tue, 28 Oct 2025 at 17:17, Heikki Linnakangas wrote: > On 27/10/2025 17:54, Maxim Orlov wrote: > > > If backend C looks up multixid 101 in between steps 3 and 4, it would > read the offset incorrectly, because 'base' isn't set yet. > > Hmm, maybe I miss something? We set page base on first write of any offset on the page, not only the first one. In other words, there should never be a case when we read an offset without a previously defined page base. Correct me if I'm wrong: 1. Backend A assigned mxact=100, offset=1000. 2. Backend B assigned mxact=101, offset=1010. 3. Backend B calls RecordNewMultiXact()/MXOffsetWrite() and set page base=1010, offset plus 0^0x80000000 bit while holding lock on the page. 4. Backend C looks up for the mxact=101 by calling MXOffsetRead() and should get exactly what he's looking for: base (1010) + offset (0) minus 0x80000000 bit. 5. Backend A calls RecordNewMultiXact() and sets his offset using existing base from step 3. -- Best regards, Maxim Orlov. --00000000000012f0e806425a28f4 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Unfortunately, I need to admit= that I have messed a bit with v18.
I forgot to sync the pg_upgra= de portion with the rest of the patch,
among other things. Here's a = proper version with additional testing.

pg_upgrade= /t/007_mxoff.pl is not meant to be comm= itted, it's just
for test purposes. In order to run it, env v= ar oldinstall must be set.

On Tue, 28 Oct 2= 025 at 17:17, Heikki Linnakangas <hli= nnaka@iki.fi> wrote:
On 27/10/2025 17:54, Maxim Orlov wrote:


If backend C looks up multixid 101 in between steps 3 and 4, it would
read the offset incorrectly, because 'base' isn't set yet.
<= br>
Hmm, maybe I miss something? We set page base on first w= rite of any
offset on the page, not only the first one. In other words, = there
should never be a case when we read an offset without a previously=
defined page base. Correct me if I'm wrong:
1. Backend A assign= ed mxact=3D100, offset=3D1000.
2.=C2=A0Backend B assigned mxact= =3D101, offset=3D1010.
3.=C2=A0Backend B calls RecordNewMultiXact= ()/MXOffsetWrite() and
=C2=A0 =C2=A0 set page base=3D1010, offset= plus 0^0x80000000 bit while
=C2=A0 =C2=A0 holding lock on the pa= ge.
4. Backend C looks up for the mxact=3D101 by calling=C2=A0MXO= ffsetRead()
=C2=A0 =C2=A0 and should get exactly what he's lo= oking for:
=C2=A0 =C2=A0 base (1010) + offset (0) minus 0x8000000= 0 bit.
5.=C2=A0Backend A calls RecordNewMultiXact() and sets his = offset using
=C2=A0 =C2=A0 existing base from step 3.
<= br clear=3D"all">

--
Best = regards,
Maxim Orlov.
--00000000000012f0e806425a28f4-- --00000000000012f0e906425a28f6 Content-Type: text/plain; charset="US-ASCII"; name="v19-0005-Add-test-for-64-bit-mxoff-in-pg_upgrade.patch.txt" Content-Disposition: attachment; filename="v19-0005-Add-test-for-64-bit-mxoff-in-pg_upgrade.patch.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhczu6024 RnJvbSBhMDE5OWVhZDMyMDAzYzRmYjRlZGI3Y2M3ZmMwMjI1YWU3NDUyMjA5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+CkRhdGU6 IFdlZCwgMjkgT2N0IDIwMjUgMTQ6MTk6NTYgKzAzMDAKU3ViamVjdDogW1BBVENIIHYxOSA1LzVd IEFkZCB0ZXN0IGZvciA2NC1iaXQgbXhvZmYgaW4gcGdfdXBncmFkZQoKLS0tCiBzcmMvYmluL3Bn X3VwZ3JhZGUvdC8wMDdfbXhvZmYucGwgfCA0NjMgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCiAxIGZpbGUgY2hhbmdlZCwgNDYzIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvYmluL3BnX3VwZ3JhZGUvdC8wMDdfbXhvZmYucGwKCmRpZmYgLS1naXQgYS9zcmMvYmlu L3BnX3VwZ3JhZGUvdC8wMDdfbXhvZmYucGwgYi9zcmMvYmluL3BnX3VwZ3JhZGUvdC8wMDdfbXhv ZmYucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMTBlNDM4Nzk1Mwot LS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS90LzAwN19teG9mZi5wbApAQCAt MCwwICsxLDQ2MyBAQAorCisjIENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5ncyBGQVRBTCA9PiAn YWxsJzsKKwordXNlIE1hdGg6OkJpZ0ludDsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVy OwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkFk anVzdER1bXA7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6QWRqdXN0VXBncmFkZTsKK3VzZSBUZXN0 OjpNb3JlOworCisjIFRoaXMgdGVzdCBpbnZvbHZlcyBkaWZmZXJlbnQgbXVsdGl0cmFuc2FjdGlv biBzdGF0ZXMsIHNpbWlsYXJseSB0byB0aGF0IG9mCisjIDAwMl9wZ191cGdyYWRlLnBsLgorCitu b3RlICJjaGVja2luZyBvbGRpbnN0YWxsIGVudmlyb25tZW50IHZhcmlhYmxlIHNldCI7Cit1bmxl c3MgKGRlZmluZWQoJEVOVntvbGRpbnN0YWxsfSkpCit7CisJZGlhZyAiU2V0IG9sZGluc3RhbGwg ZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIHByZSA2NC1iaXQgbXhvZmYgY2x1c3Rlci4iOwor CWRpZTsKK30KKworIyBUZW1wIGRpciBmb3IgYSBkdW1wcy4KK215ICR0ZW1wZGlyID0gUG9zdGdy ZVNRTDo6VGVzdDo6VXRpbHM6OnRlbXBkaXI7CisKKyMgQ2FuIGJlIGNoYW5nZWQgdG8gdGVzdCB0 aGUgb3RoZXIgbW9kZXMuCitteSAkbW9kZSA9ICRFTlZ7UEdfVEVTVF9QR19VUEdSQURFX01PREV9 IHx8ICctLWNvcHknOworCisjIEdldCBOZXh0TXVsdGlPZmZzZXQuCitzdWIgbmV4dF9teG9mZgor eworCW15ICRub2RlID0gc2hpZnQ7CisKKwlteSAkcGdfY29udHJvbGRhdGFfcGF0aCA9CisJCWRl ZmluZWQoJG5vZGUtPmluc3RhbGxfcGF0aCkgPworCQkJJG5vZGUtPmluc3RhbGxfcGF0aCAuICcv YmluL3BnX2NvbnRyb2xkYXRhJyA6CisJCQkncGdfY29udHJvbGRhdGEnOworCW15ICgkc3Rkb3V0 LCAkc3RkZXJyKSA9IHJ1bl9jb21tYW5kKFsgJHBnX2NvbnRyb2xkYXRhX3BhdGgsCisJCQkJCQkJ CQkJCSRub2RlLT5kYXRhX2RpciBdKTsKKwlteSBAY29udHJvbF9kYXRhID0gc3BsaXQoIlxuIiwg JHN0ZG91dCk7CisJbXkgJG5leHRfbXhvZmYgPSB1bmRlZjsKKworCWZvcmVhY2ggKEBjb250cm9s X2RhdGEpCisJeworCQlpZiAoJF8gPX4gL15MYXRlc3QgY2hlY2twb2ludCdzIE5leHRNdWx0aU9m ZnNldDpccyooLiopJC9tZykKKwkJeworCQkJJG5leHRfbXhvZmYgPSAkMTsKKwkJCWxhc3Q7CisJ CX0KKwl9CisJZGllICJOZXh0TXVsdGlPZmZzZXQgbm90IGZvdW5kIGluIGNvbnRyb2wgZmlsZVxu IgorCQl1bmxlc3MgZGVmaW5lZCgkbmV4dF9teG9mZik7CisKKwlyZXR1cm4gJG5leHRfbXhvZmY7 Cit9CisKKyMgQ29uc3VtZSBhcm91bmQgMTBrIG9mIG14b2Zmc2V0cy4KK3N1YiBteGFjdF9lYXRl cgoreworCW15ICRub2RlID0gc2hpZnQ7CisJbXkgJHRibCA9ICdGT08nOworCisJbXkgKCRteG9m ZjEsICRteG9mZjIpOworCisJJG14b2ZmMSA9IG5leHRfbXhvZmYoJG5vZGUpOworCSRub2RlLT5z dGFydDsKKwkkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJDUkVBVEUgVEFCTEUgJHt0 Ymx9IChJIElOVCBQUklNQVJZIEtFWSwgTl9VUERBVEVEIElOVCkgIiAuCisJCSIgICAgICAgV0lU SCAoQVVUT1ZBQ1VVTV9FTkFCTEVEPUZBTFNFKTsiIC4KKwkJIklOU0VSVCBJTlRPICR7dGJsfSBT RUxFQ1QgRywgMCBGUk9NIEdFTkVSQVRFX1NFUklFUygxLCA1MCkgRzsiKTsKKworCSMgY29uc3Vt ZSBhcm91bmQgMTBrIG14b2ZmCisJbXkgJG5jbGllbnRzID0gMTA7CisJbXkgJHVwZGF0ZV9ldmVy eSA9IDc1OworCW15IEBjb25uZWN0aW9ucyA9ICgpOworCisJZm9yICgwLi4kbmNsaWVudHMpCisJ eworCQlteSAkY29ubiA9ICRub2RlLT5iYWNrZ3JvdW5kX3BzcWwoJ3Bvc3RncmVzJyk7CisJCSRj b25uLT5xdWVyeV9zYWZlKCJCRUdJTiIpOworCisJCXB1c2goQGNvbm5lY3Rpb25zLCAkY29ubik7 CisJfQorCisJZm9yIChteSAkaSA9IDA7ICRpIDwgMTAwMDsgJGkrKykKKwl7CisJCW15ICRjb25u ID0gJGNvbm5lY3Rpb25zWyRpICUgJG5jbGllbnRzXTsKKworCQkkY29ubi0+cXVlcnlfc2FmZSgi Q09NTUlUOyIpOworCQkkY29ubi0+cXVlcnlfc2FmZSgiQkVHSU4iKTsKKworCQlpZiAoJGkgJSAk dXBkYXRlX2V2ZXJ5ID09IDApCisJCXsKKwkJCSRjb25uLT5xdWVyeV9zYWZlKAorCQkJCSJVUERB VEUgJHt0Ymx9IFNFVCAiIC4KKwkJCQkiTl9VUERBVEVEID0gTl9VUERBVEVEICsgMSAiIC4KKwkJ CQkiV0hFUkUgSSA9ICR7aX0gJSA1MCIpOworCQl9CisJCWVsc2UKKwkJeworCQkJJGNvbm4tPnF1 ZXJ5X3NhZmUoCisJCQkJIlNFTEVDVCAqIEZST00gJHt0Ymx9IEZPUiBLRVkgU0hBUkUiKTsKKwkJ fQorCX0KKworCWZvciBteSAkY29ubiAoQGNvbm5lY3Rpb25zKQorCXsKKwkJJGNvbm4tPnF1aXQo KTsKKwl9CisKKwkkbm9kZS0+c3RvcDsKKwkkbXhvZmYyID0gbmV4dF9teG9mZigkbm9kZSk7CisK KwlyZXR1cm4gJG14b2ZmMSwgJG14b2ZmMjsKK30KKworIyBDb25zdW1lIGFyb3VuZCAyTSBvZiBt eG9mZnNldHMuCitzdWIgbXhhY3RfaHVnZV9lYXRlcgoreworCW15ICRub2RlID0gc2hpZnQ7CisJ bXkgJHRibCA9ICdGT08nOworCisJbXkgKCRteG9mZjEsICRteG9mZjIpOworCisJJG14b2ZmMSA9 IG5leHRfbXhvZmYoJG5vZGUpOworCSRub2RlLT5zdGFydDsKKwkkbm9kZS0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisJCSJDUkVBVEUgVEFCTEUgJHt0Ymx9IChJIElOVCBQUklNQVJZIEtFWSwgTl9V UERBVEVEIElOVCkgIiAuCisJCSIgICAgICAgV0lUSCAoQVVUT1ZBQ1VVTV9FTkFCTEVEPUZBTFNF KTsiIC4KKwkJIklOU0VSVCBJTlRPICR7dGJsfSBTRUxFQ1QgRywgMCBGUk9NIEdFTkVSQVRFX1NF UklFUygxLCA1MCkgRzsiKTsKKworCSMgY29uc3VtZSBhcm91bmQgMU0gbXhvZmYKKwlteSAkbmNs aWVudHMgPSAxMDsKKwlteSAkdXBkYXRlX2V2ZXJ5ID0gOTU7CisJbXkgQGNvbm5lY3Rpb25zID0g KCk7CisJbXkgJHRpbWVvdXQgPSAxMCAqICRQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGltZW91 dF9kZWZhdWx0OworCisJZm9yICgwLi4kbmNsaWVudHMpCisJeworCQlteSAkY29ubiA9ICRub2Rl LT5iYWNrZ3JvdW5kX3BzcWwoJ3Bvc3RncmVzJywKKwkJCQkJCQkJCQkgIHRpbWVvdXQgPT4gJHRp bWVvdXQpOworCQkkY29ubi0+cXVlcnlfc2FmZSgiQkVHSU4iKTsKKworCQlwdXNoKEBjb25uZWN0 aW9ucywgJGNvbm4pOworCX0KKworCSMgSXQncyBhIGxvbmcgcHJvY2VzcywgYmV0dGVyIHRvIHRl bGwgYWJvdXQgcHJvZ3Jlc3MuCisJbXkgJG5fc3RlcHMgPSAyMDBfMDAwOworCW15ICRzdGVwID0g aW50KCRuX3N0ZXBzIC8gMTApOworCisJZGlhZyAiXG5zdGFydCB0byBjb25zdW1lIG14b2Zmc2V0 cyAuLi5cbiI7CisJZm9yIChteSAkaSA9IDA7ICRpIDwgJG5fc3RlcHM7ICRpKyspCisJeworCQlt eSAkY29ubiA9ICRjb25uZWN0aW9uc1skaSAlICRuY2xpZW50c107CisKKwkJJGNvbm4tPnF1ZXJ5 X3NhZmUoIkNPTU1JVDsiKTsKKwkJJGNvbm4tPnF1ZXJ5X3NhZmUoIkJFR0lOIik7CisKKwkJaWYg KCRpICUgJHVwZGF0ZV9ldmVyeSA9PSAwKQorCQl7CisJCQkjIFBlcmZvcm0gc29tZSBub24ta2V5 IFVQREFURXMgdG9vLCB0byBleGVyY2lzZSBkaWZmZXJlbnQgbXVsdGl4YWN0CisJCQkjIG1lbWJl ciBzdGF0dXNlcy4KKwkJCSRjb25uLT5xdWVyeV9zYWZlKAorCQkJCSJVUERBVEUgJHt0Ymx9IFNF VCAiIC4KKwkJCQkiTl9VUERBVEVEID0gTl9VUERBVEVEICsgMSAiIC4KKwkJCQkiV0hFUkUgSSA9 ICR7aX0gJSA1MCIpOworCQl9CisJCWVsc2UKKwkJeworCQkJJGNvbm4tPnF1ZXJ5X3NhZmUoCisJ CQkJIlNFTEVDVCAqIEZST00gJHt0Ymx9ICIgLgorCQkJCSJUQUJMRVNBTVBMRSBTWVNURU0gKDg1 KSAiIC4KKwkJCQkiRk9SIEtFWSBTSEFSRSIpOworCQl9CisKKwkJaWYgKCRpICUgJHN0ZXAgPT0g MCkKKwkJeworCQkJbXkgJGRvbmUgPSBpbnQoKCRpIC8gJG5fc3RlcHMpICogMTAwKTsKKwkJCWRp YWcgIiRkb25lJSBkb25lLi4uIjsKKwkJfQorCX0KKworCWZvciBteSAkY29ubiAoQGNvbm5lY3Rp b25zKQorCXsKKwkJJGNvbm4tPnF1aXQoKTsKKwl9CisKKwkkbm9kZS0+c3RvcDsKKwkkbXhvZmYy ID0gbmV4dF9teG9mZigkbm9kZSk7CisKKwlyZXR1cm4gJG14b2ZmMSwgJG14b2ZmMjsKK30KKwor IyBTZXQgb2xkZXN0IG11bHRpeGFjdC1vZmZzZXQKK3N1YiByZXNldF9teG9mZgoreworCW15ICRu b2RlID0gc2hpZnQ7CisJbXkgJG9mZnNldCA9IHNoaWZ0OworCisJbXkgJHBnX3Jlc2V0d2FsX3Bh dGggPSAkbm9kZS0+aW5zdGFsbF9wYXRoIC4gJy9iaW4vcGdfcmVzZXR3YWwnOworCisJIyBHZXQg YmxvY2sgc2l6ZQorCW15ICRvdXQgPSAocnVuX2NvbW1hbmQoWyAkcGdfcmVzZXR3YWxfcGF0aCwg Jy0tZHJ5LXJ1bicsCisJCQkJCQkJICRub2RlLT5kYXRhX2RpciBdKSlbMF07CisJCSRvdXQgPX4g L15EYXRhYmFzZSBibG9jayBzaXplOiAqKFxkKykkL20gb3IgZGllOworCW15ICRibGNrc3ogPSAk MTsKKworCSMgUmVzZXQgdG8gbmV3IG9mZnNldAorCW15IEBjbWQgPSAoJHBnX3Jlc2V0d2FsX3Bh dGgsICctLXBnZGF0YScgPT4gJG5vZGUtPmRhdGFfZGlyKTsKKwlwdXNoIEBjbWQsICctLW11bHRp eGFjdC1vZmZzZXQnID0+ICRvZmZzZXQ7CisJY29tbWFuZF9vayhcQGNtZCwgJ3NldCBvbGRlc3Qg bXVsdGl4YWN0LW9mZnNldCcpOworCisJIyBGaWxsIGVtcHR5IHBnX211bHRpeGFjdC9tZW1iZXJz IHNlZ21lbnQKKwlteSAkbXVsdCA9IDMyICogaW50KCRibGNrc3ogLyAyMCkgKiA0OworCW15ICRz ZWduYW1lID0gc3ByaW50ZiAiJTA0WCIsICRvZmZzZXQgLyAkbXVsdDsKKworCW15IEBkZCA9ICgn ZGQnKTsKKwlwdXNoIEBkZCwgImlmPS9kZXYvemVybyI7CisJcHVzaCBAZGQsICJvZj0iIC4gJG5v ZGUtPmRhdGFfZGlyIC4gIi9wZ19tdWx0aXhhY3QvbWVtYmVycy8iIC4gJHNlZ25hbWU7CisJcHVz aCBAZGQsICJicz0kYmxja3N6IjsKKwlwdXNoIEBkZCwgImNvdW50PTMyIjsKKwljb21tYW5kX29r KFxAZGQsICdmaWxsIGVtcHR5IG11bHRpeGFjdC1tZW1iZXJzJyk7Cit9CisKK3N1YiBnZXRfZHVt cF9mb3JfY29tcGFyaXNvbgoreworCW15ICgkbm9kZSwgJGRiLCAkZmlsZV9wcmVmaXgsICRhZGp1 c3RfY2hpbGRfY29sdW1ucykgPSBAXzsKKworCW15ICRkdW1wZmlsZSA9ICR0ZW1wZGlyIC4gJy8n IC4gJGZpbGVfcHJlZml4IC4gJy5zcWwnOworCW15ICRkdW1wX2FkanVzdGVkID0gIiR7ZHVtcGZp bGV9X2FkanVzdGVkIjsKKworCW9wZW4obXkgJGRoLCAnPicsICRkdW1wX2FkanVzdGVkKQorCSAg fHwgZGllICJjb3VsZCBub3Qgb3BlbiAkZHVtcF9hZGp1c3RlZCBmb3Igd3JpdGluZyAkISI7CisK Kwkkbm9kZS0+cnVuX2xvZygKKwkJWworCQkJJ3BnX2R1bXAnLCAnLS1uby1zeW5jJywKKwkJCSct LXJlc3RyaWN0LWtleScgPT4gJ3Rlc3QnLAorCQkJJy1kJyA9PiAkbm9kZS0+Y29ubnN0cigkZGIp LAorCQkJJy1mJyA9PiAkZHVtcGZpbGUKKwkJXSk7CisKKwlwcmludCAkZGggYWRqdXN0X3JlZ3Jl c3NfZHVtcGZpbGUoc2x1cnBfZmlsZSgkZHVtcGZpbGUpLAorCQkkYWRqdXN0X2NoaWxkX2NvbHVt bnMpOworCWNsb3NlKCRkaCk7CisKKwlyZXR1cm4gJGR1bXBfYWRqdXN0ZWQ7Cit9CisKKyMgTWFp biB0ZXN0IHdvcmtob3JzZSByb3V0aW5lLgorIyBNYWtlIHBnX3VwZ3JhZGUsIGR1bXAgZGF0YSBh bmQgY29tcGFyZSBpdC4KK3N1YiBydW5fdGVzdAoreworCW15ICR0YWcgPSBzaGlmdDsKKwlteSAk b2xkbm9kZSA9IHNoaWZ0OworCW15ICRuZXdub2RlID0gc2hpZnQ7CisKKwljb21tYW5kX29rKAor CQlbCisJCQkncGdfdXBncmFkZScsICctLW5vLXN5bmMnLAorCQkJJy0tb2xkLWRhdGFkaXInID0+ ICRvbGRub2RlLT5kYXRhX2RpciwKKwkJCSctLW5ldy1kYXRhZGlyJyA9PiAkbmV3bm9kZS0+ZGF0 YV9kaXIsCisJCQknLS1vbGQtYmluZGlyJyA9PiAkb2xkbm9kZS0+Y29uZmlnX2RhdGEoJy0tYmlu ZGlyJyksCisJCQknLS1uZXctYmluZGlyJyA9PiAkbmV3bm9kZS0+Y29uZmlnX2RhdGEoJy0tYmlu ZGlyJyksCisJCQknLS1zb2NrZXRkaXInID0+ICRuZXdub2RlLT5ob3N0LAorCQkJJy0tb2xkLXBv cnQnID0+ICRvbGRub2RlLT5wb3J0LAorCQkJJy0tbmV3LXBvcnQnID0+ICRuZXdub2RlLT5wb3J0 LAorCQkJJG1vZGUsCisJCV0sCisJCSdydW4gb2YgcGdfdXBncmFkZSBmb3IgbmV3IGluc3RhbmNl Jyk7CisJb2soICEtZCAkbmV3bm9kZS0+ZGF0YV9kaXIgLiAiL3BnX3VwZ3JhZGVfb3V0cHV0LmQi LAorCQkicGdfdXBncmFkZV9vdXRwdXQuZC8gcmVtb3ZlZCBhZnRlciBwZ191cGdyYWRlIHN1Y2Nl c3MiKTsKKworCSRvbGRub2RlLT5zdGFydDsKKwlteSAkc3JjX2R1bXAgPQorCQlnZXRfZHVtcF9m b3JfY29tcGFyaXNvbigkb2xkbm9kZSwgJ3Bvc3RncmVzJywKKwkJCQkJCQkJIm9sZG5vZGVfJHt0 YWd9X2R1bXAiLCAwKTsKKwkkb2xkbm9kZS0+c3RvcDsKKworCSRuZXdub2RlLT5zdGFydDsKKwlt eSAkZHN0X2R1bXAgPQorCQlnZXRfZHVtcF9mb3JfY29tcGFyaXNvbigkbmV3bm9kZSwgJ3Bvc3Rn cmVzJywKKwkJCQkJCQkJIm5ld25vZGVfJHt0YWd9X2R1bXAiLCAwKTsKKwkkbmV3bm9kZS0+c3Rv cDsKKworCWNvbXBhcmVfZmlsZXMoJHNyY19kdW1wLCAkZHN0X2R1bXAsCisJCSdkdW1wIG91dHB1 dHMgZnJvbSBvcmlnaW5hbCBhbmQgcmVzdG9yZWQgcmVncmVzc2lvbiBkYXRhYmFzZXMgbWF0Y2gn KTsKK30KKworc3ViIHRvX2hleAoreworCW15ICRhcmcgPSBzaGlmdDsKKworCSRhcmcgPSBNYXRo OjpCaWdJbnQtPm5ldygkYXJnKTsKKwkkYXJnID0gJGFyZy0+YXNfaGV4KCk7CisKKwlyZXR1cm4g JGFyZzsKK30KKworIyBjYXNlICMxOiBzdGFydCBvbGQgbm9kZSBmcm9tIGRlZmF1bHRzCit7CisJ bXkgJHRhZyA9IDE7CisJbXkgJG9sZCA9CisJCVBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5l dygib2xkbm9kZSR7dGFnfSIsCisJCQkJCQkJCQkgICBpbnN0YWxsX3BhdGggPT4gJEVOVntvbGRp bnN0YWxsfSk7CisJJG9sZC0+aW5pdChleHRyYSA9PiBbJy1rJ10pOworCisJbXkgKCRzdGFydF9t eG9mZiwgJGZpbmlzaF9teG9mZikgPSBteGFjdF9lYXRlcigkb2xkKTsKKworCW15ICRuZXcgPSBQ b3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoIm5ld25vZGUke3RhZ30iKTsKKwkkbmV3LT5p bml0OworCisJcnVuX3Rlc3QoJHRhZywgJG9sZCwgJG5ldyk7CisKKwkkc3RhcnRfbXhvZmYgPSB0 b19oZXgoJHN0YXJ0X214b2ZmKTsKKwkkZmluaXNoX214b2ZmID0gdG9faGV4KCRmaW5pc2hfbXhv ZmYpOworCisJbXkgJG5leHRfbXhvZmYgPSB0b19oZXgobmV4dF9teG9mZigkbmV3KSk7CisKKwlu b3RlICI+Pj4gY2FzZSAjJHt0YWd9XG4iIC4KKwkJICIgb2xkbm9kZSBteG9mZiBmcm9tICR7c3Rh cnRfbXhvZmZ9IHRvICR7ZmluaXNoX214b2ZmfVxuIiAuCisJCSAiIG5ld25vZGUgbXhvZmYgJHtu ZXh0X214b2ZmfVxuIjsKK30KKworIyBjYXNlICMyOiBzdGFydCBvbGQgbm9kZSBmcm9tIGJlZm9y ZSAzMi1iaXQgd3JhcGFyb3VuZAoreworCW15ICR0YWcgPSAyOworCW15ICRvbGQgPQorCQlQb3N0 Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoIm9sZG5vZGUke3RhZ30iLAorCQkJCQkJCQkJICAg aW5zdGFsbF9wYXRoID0+ICRFTlZ7b2xkaW5zdGFsbH0pOworCisJJG9sZC0+aW5pdChleHRyYSA9 PiBbJy1rJ10pOworCXJlc2V0X214b2ZmKCRvbGQsIDB4RkZGRjAwMDApOworCisJbXkgKCRzdGFy dF9teG9mZiwgJGZpbmlzaF9teG9mZikgPSBteGFjdF9lYXRlcigkb2xkKTsKKworCW15ICRuZXcg PSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoIm5ld25vZGUke3RhZ30iKTsKKwkkbmV3 LT5pbml0OworCisJcnVuX3Rlc3QoJHRhZywgJG9sZCwgJG5ldyk7CisKKwkkc3RhcnRfbXhvZmYg PSB0b19oZXgoJHN0YXJ0X214b2ZmKTsKKwkkZmluaXNoX214b2ZmID0gdG9faGV4KCRmaW5pc2hf bXhvZmYpOworCisJbXkgJG5leHRfbXhvZmYgPSB0b19oZXgobmV4dF9teG9mZigkbmV3KSk7CisK Kwlub3RlICI+Pj4gY2FzZSAjJHt0YWd9XG4iIC4KKwkJICIgb2xkbm9kZSBteG9mZiBmcm9tICR7 c3RhcnRfbXhvZmZ9IHRvICR7ZmluaXNoX214b2ZmfVxuIiAuCisJCSAiIG5ld25vZGUgbXhvZmYg JHtuZXh0X214b2ZmfVxuIjsKK30KKworIyBjYXNlICMzOiBzdGFydCBvbGQgbm9kZSBuZWFyIDMy LWJpdCB3cmFwYXJvdW5kIGFuZCByZWFjaCB3cmFwYXJvdW5kIHN0YXRlLgoreworCW15ICR0YWcg PSAzOworCW15ICRvbGQgPQorCQlQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoIm9sZG5v ZGUke3RhZ30iLAorCQkJCQkJCQkJICAgaW5zdGFsbF9wYXRoID0+ICRFTlZ7b2xkaW5zdGFsbH0p OworCisJJG9sZC0+aW5pdChleHRyYSA9PiBbJy1rJ10pOworCisJcmVzZXRfbXhvZmYoJG9sZCwg MHhGRkZGRUM3Nyk7CisJbXkgKCRzdGFydF9teG9mZiwgJGZpbmlzaF9teG9mZikgPSBteGFjdF9l YXRlcigkb2xkKTsKKworCW15ICRuZXcgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXco Im5ld25vZGUke3RhZ30iKTsKKwkkbmV3LT5pbml0OworCisJcnVuX3Rlc3QoJHRhZywgJG9sZCwg JG5ldyk7CisKKwkkc3RhcnRfbXhvZmYgPSB0b19oZXgoJHN0YXJ0X214b2ZmKTsKKwkkZmluaXNo X214b2ZmID0gdG9faGV4KCRmaW5pc2hfbXhvZmYpOworCisJbXkgJG5leHRfbXhvZmYgPSB0b19o ZXgobmV4dF9teG9mZigkbmV3KSk7CisKKwlub3RlICI+Pj4gY2FzZSAjJHt0YWd9XG4iIC4KKwkJ ICIgb2xkbm9kZSBteG9mZiBmcm9tICR7c3RhcnRfbXhvZmZ9IHRvICR7ZmluaXNoX214b2ZmfVxu IiAuCisJCSAiIG5ld25vZGUgbXhvZmYgJHtuZXh0X214b2ZmfVxuIjsKK30KKworIyBjYXNlICM0 OiBzdGFydCBvbGQgbm9kZSBmcm9tIGRlZmF1bHRzCit7CisJbXkgJHRhZyA9IDQ7CisJbXkgJG9s ZCA9CisJCVBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygib2xkbm9kZSR7dGFnfSIsCisJ CQkJCQkJCQkgICBpbnN0YWxsX3BhdGggPT4gJEVOVntvbGRpbnN0YWxsfSk7CisKKwkkb2xkLT5p bml0KGV4dHJhID0+IFsnLWsnXSk7CisKKwlkaWFnICJ0ZXN0ICMke3RhZ30gZm9yIG11bHRpcGxl IG14b2ZmIHNlZ21lbnRzIjsKKwlteSAoJHN0YXJ0X214b2ZmLCAkZmluaXNoX214b2ZmKSA9IG14 YWN0X2h1Z2VfZWF0ZXIoJG9sZCk7CisKKwlteSAkbmV3ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1 c3Rlci0+bmV3KCJuZXdub2RlJHt0YWd9Iik7CisJJG5ldy0+aW5pdDsKKworCXJ1bl90ZXN0KCR0 YWcsICRvbGQsICRuZXcpOworCisJJHN0YXJ0X214b2ZmID0gdG9faGV4KCRzdGFydF9teG9mZik7 CisJJGZpbmlzaF9teG9mZiA9IHRvX2hleCgkZmluaXNoX214b2ZmKTsKKworCW15ICRuZXh0X214 b2ZmID0gdG9faGV4KG5leHRfbXhvZmYoJG5ldykpOworCisJbm90ZSAiPj4+IGNhc2UgIyR7dGFn fVxuIiAuCisJCSAiIG9sZG5vZGUgbXhvZmYgZnJvbSAke3N0YXJ0X214b2ZmfSB0byAke2Zpbmlz aF9teG9mZn1cbiIgLgorCQkgIiBuZXdub2RlIG14b2ZmICR7bmV4dF9teG9mZn1cbiI7Cit9CisK KyMgY2FzZSAjNTogc3RhcnQgb2xkIG5vZGUgZnJvbSBiZWZvcmUgMzItYml0IHdyYXBhcm91bmQK K3sKKwlteSAkdGFnID0gNTsKKwlteSAkb2xkID0KKwkJUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rl ci0+bmV3KCJvbGRub2RlJHt0YWd9IiwKKwkJCQkJCQkJCSAgIGluc3RhbGxfcGF0aCA9PiAkRU5W e29sZGluc3RhbGx9KTsKKworCSRvbGQtPmluaXQoZXh0cmEgPT4gWyctayddKTsKKwlyZXNldF9t eG9mZigkb2xkLCAweEZGRkYwMDAwKTsKKworCWRpYWcgInRlc3QgIyR7dGFnfSBmb3IgbXVsdGlw bGUgbXhvZmYgc2VnbWVudHMiOworCW15ICgkc3RhcnRfbXhvZmYsICRmaW5pc2hfbXhvZmYpID0g bXhhY3RfaHVnZV9lYXRlcigkb2xkKTsKKworCW15ICRuZXcgPSBQb3N0Z3JlU1FMOjpUZXN0OjpD bHVzdGVyLT5uZXcoIm5ld25vZGUke3RhZ30iKTsKKwkkbmV3LT5pbml0OworCisJcnVuX3Rlc3Qo JHRhZywgJG9sZCwgJG5ldyk7CisKKwkkc3RhcnRfbXhvZmYgPSB0b19oZXgoJHN0YXJ0X214b2Zm KTsKKwkkZmluaXNoX214b2ZmID0gdG9faGV4KCRmaW5pc2hfbXhvZmYpOworCisJbXkgJG5leHRf bXhvZmYgPSB0b19oZXgobmV4dF9teG9mZigkbmV3KSk7CisKKwlub3RlICI+Pj4gY2FzZSAjJHt0 YWd9XG4iIC4KKwkJICIgb2xkbm9kZSBteG9mZiBmcm9tICR7c3RhcnRfbXhvZmZ9IHRvICR7Zmlu aXNoX214b2ZmfVxuIiAuCisJCSAiIG5ld25vZGUgbXhvZmYgJHtuZXh0X214b2ZmfVxuIjsKK30K KworIyBjYXNlICM2OiBzdGFydCBvbGQgbm9kZSBuZWFyIDMyLWJpdCB3cmFwYXJvdW5kIGFuZCBy ZWFjaCB3cmFwYXJvdW5kIHN0YXRlLgoreworCW15ICR0YWcgPSA2OworCW15ICRvbGQgPQorCQlQ b3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoIm9sZG5vZGUke3RhZ30iLAorCQkJCQkJCQkJ ICAgaW5zdGFsbF9wYXRoID0+ICRFTlZ7b2xkaW5zdGFsbH0pOworCisJJG9sZC0+aW5pdChleHRy YSA9PiBbJy1rJ10pOworCisJcmVzZXRfbXhvZmYoJG9sZCwgMHhGRkZGRkZGRiAtIDFfMDAwXzAw MCk7CisJbXkgKCRzdGFydF9teG9mZiwgJGZpbmlzaF9teG9mZikgPSBteGFjdF9odWdlX2VhdGVy KCRvbGQpOworCisJZGlhZyAidGVzdCAjJHt0YWd9IGZvciBtdWx0aXBsZSBteG9mZiBzZWdtZW50 cyI7CisJbXkgJG5ldyA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygibmV3bm9kZSR7 dGFnfSIpOworCSRuZXctPmluaXQ7CisKKwlydW5fdGVzdCgkdGFnLCAkb2xkLCAkbmV3KTsKKwor CSRzdGFydF9teG9mZiA9IHRvX2hleCgkc3RhcnRfbXhvZmYpOworCSRmaW5pc2hfbXhvZmYgPSB0 b19oZXgoJGZpbmlzaF9teG9mZik7CisKKwlteSAkbmV4dF9teG9mZiA9IHRvX2hleChuZXh0X214 b2ZmKCRuZXcpKTsKKworCW5vdGUgIj4+PiBjYXNlICMke3RhZ31cbiIgLgorCQkgIiBvbGRub2Rl IG14b2ZmIGZyb20gJHtzdGFydF9teG9mZn0gdG8gJHtmaW5pc2hfbXhvZmZ9XG4iIC4KKwkJICIg bmV3bm9kZSBteG9mZiAke25leHRfbXhvZmZ9XG4iOworfQorCitkb25lX3Rlc3RpbmcoKTsKLS0g CjIuNTEuMAoK --00000000000012f0e906425a28f6 Content-Type: application/octet-stream; name="v19-0003-Add-test-for-64-bit-mxoff-in-pg_resetwal.patch" Content-Disposition: attachment; filename="v19-0003-Add-test-for-64-bit-mxoff-in-pg_resetwal.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhczu5zw2 RnJvbSBiNzgwOGJlZDE5OGZkY2MwZmZlMzIxZjU0MWNjYTEzNjFiOTE4MzQ2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+CkRhdGU6 IFR1ZSwgMjggT2N0IDIwMjUgMTk6MDg6MjYgKzAzMDAKU3ViamVjdDogW1BBVENIIHYxOSAzLzVd IEFkZCB0ZXN0IGZvciA2NC1iaXQgbXhvZmYgaW4gcGdfcmVzZXR3YWwKCi0tLQogc3JjL2Jpbi9w Z19yZXNldHdhbC9tZXNvbi5idWlsZCAgICB8ICAgMSArCiBzcmMvYmluL3BnX3Jlc2V0d2FsL3Qv MDAzX214b2ZmLnBsIHwgMTcwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAyIGZpbGVz IGNoYW5nZWQsIDE3MSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9w Z19yZXNldHdhbC90LzAwM19teG9mZi5wbAoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfcmVzZXR3 YWwvbWVzb24uYnVpbGQgYi9zcmMvYmluL3BnX3Jlc2V0d2FsL21lc29uLmJ1aWxkCmluZGV4IDI5 MDgzMmIyMjkuLjFlMmRmYjM4YTUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfcmVzZXR3YWwvbWVz b24uYnVpbGQKKysrIGIvc3JjL2Jpbi9wZ19yZXNldHdhbC9tZXNvbi5idWlsZApAQCAtMjUsNiAr MjUsNyBAQCB0ZXN0cyArPSB7CiAgICAgJ3Rlc3RzJzogWwogICAgICAgJ3QvMDAxX2Jhc2ljLnBs JywKICAgICAgICd0LzAwMl9jb3JydXB0ZWQucGwnLAorICAgICAgJ3QvMDAzX214b2ZmLnBsJywK ICAgICBdLAogICB9LAogfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19yZXNldHdhbC90LzAwM19t eG9mZi5wbCBiL3NyYy9iaW4vcGdfcmVzZXR3YWwvdC8wMDNfbXhvZmYucGwKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uM2MxYjdmYTFkMwotLS0gL2Rldi9udWxsCisrKyBi L3NyYy9iaW4vcGdfcmVzZXR3YWwvdC8wMDNfbXhvZmYucGwKQEAgLTAsMCArMSwxNzAgQEAKKwor IyBDb3B5cmlnaHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7CisKK3VzZSBNYXRo OjpCaWdJbnQ7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FM OjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCitzdWIgbXhhY3RfZWF0ZXIKK3sKKwlt eSAkbm9kZSA9IHNoaWZ0OworCW15ICR0YmwgPSBzaGlmdDsKKworCSRub2RlLT5zdGFydDsKKwkk bm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJDUkVBVEUgVEFCTEUgJHt0Ymx9IChJIElO VCBQUklNQVJZIEtFWSwgTl9VUERBVEVEIElOVCkgIiAuCisJCSIgICAgICAgV0lUSCAoQVVUT1ZB Q1VVTV9FTkFCTEVEPUZBTFNFKTsiIC4KKwkJIklOU0VSVCBJTlRPICR7dGJsfSBTRUxFQ1QgRywg MCBGUk9NIEdFTkVSQVRFX1NFUklFUygxLCA1MCkgRzsiKTsKKworCSMgY29uc3VtZSBhcm91bmQg MTBrIG11bHRpeGFjdC1vZmZzZXRmcworCW15ICRuY2xpZW50cyA9IDEwOworCW15ICR1cGRhdGVf ZXZlcnkgPSA3NTsKKwlteSBAY29ubmVjdGlvbnMgPSAoKTsKKworCWZvciAoMC4uJG5jbGllbnRz KQorCXsKKwkJbXkgJGNvbm4gPSAkbm9kZS0+YmFja2dyb3VuZF9wc3FsKCdwb3N0Z3JlcycpOwor CQkkY29ubi0+cXVlcnlfc2FmZSgiQkVHSU4iKTsKKworCQlwdXNoKEBjb25uZWN0aW9ucywgJGNv bm4pOworCX0KKworCWZvciAobXkgJGkgPSAwOyAkaSA8IDEwMDA7ICRpKyspCisJeworCQlteSAk Y29ubiA9ICRjb25uZWN0aW9uc1skaSAlICRuY2xpZW50c107CisKKwkJJGNvbm4tPnF1ZXJ5X3Nh ZmUoIkNPTU1JVDsiKTsKKwkJJGNvbm4tPnF1ZXJ5X3NhZmUoIkJFR0lOIik7CisKKwkJaWYgKCRp ICUgJHVwZGF0ZV9ldmVyeSA9PSAwKQorCQl7CisJCQkkY29ubi0+cXVlcnlfc2FmZSgKKwkJCQki VVBEQVRFICR7dGJsfSBTRVQgIiAuCisJCQkJIk5fVVBEQVRFRCA9IE5fVVBEQVRFRCArIDEgIiAu CisJCQkJIldIRVJFIEkgPSAke2l9ICUgNTAiKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCSRjb25u LT5xdWVyeV9zYWZlKAorCQkJCSJTRUxFQ1QgKiBGUk9NICR7dGJsfSBGT1IgS0VZIFNIQVJFIik7 CisJCX0KKwl9CisKKwlmb3IgbXkgJGNvbm4gKEBjb25uZWN0aW9ucykKKwl7CisJCSRjb25uLT5x dWl0KCk7CisJfQorCisJJG5vZGUtPnN0b3A7Cit9CisKK3N1YiBuZXh0X214b2ZmCit7CisJbXkg JG5vZGUgPSBzaGlmdDsKKwlteSAoJHN0ZG91dCwgJHN0ZGVycikgPQorCSAgcnVuX2NvbW1hbmQo WyAncGdfY29udHJvbGRhdGEnLCAkbm9kZS0+ZGF0YV9kaXIgXSk7CisJbXkgQGNvbnRyb2xfZGF0 YSA9IHNwbGl0KCJcbiIsICRzdGRvdXQpOworCW15ICRuZXh0X214b2ZmID0gdW5kZWY7CisKKwlm b3JlYWNoIChAY29udHJvbF9kYXRhKQorCXsKKwkJaWYgKCRfID1+IC9eTGF0ZXN0IGNoZWNrcG9p bnQncyBOZXh0TXVsdGlPZmZzZXQ6XHMqKC4qKSQvbWcpCisJCXsKKwkJCSRuZXh0X214b2ZmID0g JDE7CisJCQlsYXN0OworCQl9CisJfQorCWRpZSAiTmV4dE11bHRpT2Zmc2V0IG5vdCBmb3VuZCBp biBjb250cm9sIGZpbGVcbiIKKwkJdW5sZXNzIGRlZmluZWQoJG5leHRfbXhvZmYpOworCisJcmV0 dXJuICRuZXh0X214b2ZmOworfQorCitzdWIgcmVzZXRfbXhvZmYKK3sKKwlteSAkbm9kZSA9IHNo aWZ0OworCW15ICRvZmZzZXQgPSBzaGlmdDsKKwkJJG9mZnNldCA9IE1hdGg6OkJpZ0ludC0+bmV3 KCRvZmZzZXQpOworCisJIyBHZXQgYmxvY2sgc2l6ZQorCW15ICRvdXQgPSAocnVuX2NvbW1hbmQo WyAncGdfcmVzZXR3YWwnLCAnLS1kcnktcnVuJywgJG5vZGUtPmRhdGFfZGlyIF0pKVswXTsKKwkJ JG91dCA9fiAvXkRhdGFiYXNlIGJsb2NrIHNpemU6ICooXGQrKSQvbSBvciBkaWU7CisJbXkgJGJs Y2tzeiA9ICQxOworCisJIyBSZXNldCB0byBuZXcgb2Zmc2V0CisJbXkgQGNtZCA9ICgncGdfcmVz ZXR3YWwnLCAnLS1wZ2RhdGEnID0+ICRub2RlLT5kYXRhX2Rpcik7CisJcHVzaCBAY21kLCAnLS1t dWx0aXhhY3Qtb2Zmc2V0JyA9PiAkb2Zmc2V0LT5hc19oZXgoKTsKKwljb21tYW5kX29rKFxAY21k LCAnc2V0IG9sZGVzdCBtdWx0aXhhY3Qtb2Zmc2V0Jyk7CisKKwkjIEZpbGwgZW1wdHkgcGdfbXVs dGl4YWN0L21lbWJlcnMgc2VnbWVudAorCW15ICRtdWx0ID0gMzIgKiBpbnQoJGJsY2tzeiAvIDIw KSAqIDQ7CisJbXkgJHNlZ25hbWUgPSBzcHJpbnRmICIlMDE1WCIsICRvZmZzZXQgLyAkbXVsdDsK KworCW15IEBkZCA9ICgnZGQnKTsKKwlwdXNoIEBkZCwgImlmPS9kZXYvemVybyI7CisJcHVzaCBA ZGQsICJvZj0iIC4gJG5vZGUtPmRhdGFfZGlyIC4gIi9wZ19tdWx0aXhhY3QvbWVtYmVycy8iIC4g JHNlZ25hbWU7CisJcHVzaCBAZGQsICJicz0kYmxja3N6IjsKKwlwdXNoIEBkZCwgImNvdW50PTMy IjsKKwljb21tYW5kX29rKFxAZGQsICdmaWxsIGVtcHR5IG11bHRpeGFjdC1tZW1iZXJzJyk7Cit9 CisKK215ICgkb2ZmMSwgJG9mZjIpOworCisjIHN0YXJ0IGZyb20gZGVmYXVsdHMKK215ICRub2Rl MSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbm9kZTEnKTsKKyRub2RlMS0+aW5p dDsKKyRvZmYxID0gbmV4dF9teG9mZigkbm9kZTEpOworbXhhY3RfZWF0ZXIoJG5vZGUxLCAiRk9P Iik7Ciskb2ZmMiA9IG5leHRfbXhvZmYoJG5vZGUxKTsKK25vdGUgIj4gc3RhcnQgZnJvbSAkb2Zm MSwgZmluaXNoZWQgYXQgJG9mZjJcbiI7CisKKyMgc3RhcnQgZnJvbSBiZWZvcmUgMzItYml0IHdy YXBhcm91bmQKK215ICRub2RlMiA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbm9k ZTInKTsKKyRub2RlMi0+aW5pdDsKK3Jlc2V0X214b2ZmKCRub2RlMiwgMHhGRkZGMDAwMCk7Cisk b2ZmMSA9IG5leHRfbXhvZmYoJG5vZGUyKTsKK214YWN0X2VhdGVyKCRub2RlMiwgIkZPTyIpOwor JG9mZjIgPSBuZXh0X214b2ZmKCRub2RlMik7Citub3RlICI+IHN0YXJ0IGZyb20gJG9mZjEsIGZp bmlzaGVkIGF0ICRvZmYyXG4iOworCisjIHN0YXJ0IG5lYXIgMzItYml0IHdyYXBhcm91bmQKK215 ICRub2RlMyA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbm9kZTMnKTsKKyRub2Rl My0+aW5pdDsKK3Jlc2V0X214b2ZmKCRub2RlMywgMHhGRkZGRUM3Nyk7Ciskb2ZmMSA9IG5leHRf bXhvZmYoJG5vZGUzKTsKK214YWN0X2VhdGVyKCRub2RlMywgIkZPTyIpOworJG9mZjIgPSBuZXh0 X214b2ZmKCRub2RlMyk7Citub3RlICI+IHN0YXJ0IGZyb20gJG9mZjEsIGZpbmlzaGVkIGF0ICRv ZmYyXG4iOworCisjIHN0YXJ0IG92ZXIgMzItYml0IHdyYXBhcm91bmQKK215ICRub2RlNCA9IFBv c3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbm9kZTQnKTsKKyRub2RlNC0+aW5pdDsKK3Jl c2V0X214b2ZmKCRub2RlNCwgJzB4RkZGRkZGRkYwMDAwJyk7Ciskb2ZmMSA9IG5leHRfbXhvZmYo JG5vZGU0KTsKK214YWN0X2VhdGVyKCRub2RlNCwgIkZPTyIpOworJG9mZjIgPSBuZXh0X214b2Zm KCRub2RlMyk7Citub3RlICI+IHN0YXJ0IGZyb20gJG9mZjEsIGZpbmlzaGVkIGF0ICRvZmYyXG4i OworCisjIGNoZWNrIGludmFyaWFudAorJG5vZGUxLT5zdGFydDsKKyRub2RlMi0+c3RhcnQ7Cisk bm9kZTMtPnN0YXJ0OworJG5vZGU0LT5zdGFydDsKKworbXkgJHZhcjEgPSAkbm9kZTEtPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAnVEFCTEUgRk9PJyk7CitteSAkdmFyMiA9ICRub2RlMi0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICdUQUJMRSBGT08nKTsKK215ICR2YXIzID0gJG5vZGUzLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgJ1RBQkxFIEZPTycpOworbXkgJHZhcjQgPSAkbm9kZTQtPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAnVEFCTEUgRk9PJyk7CitvaygkdmFyMSBlcSAkdmFyMiBlcSAkdmFyMyBl cSAkdmFyNCwKKwknY2hlY2sgdGFibGUgaW52YXJpYW50IGluIGFsbCBub2RlcycpOworCiskbm9k ZTQtPnN0b3A7Ciskbm9kZTMtPnN0b3A7Ciskbm9kZTItPnN0b3A7Ciskbm9kZTEtPnN0b3A7CisK K2RvbmVfdGVzdGluZygpOwotLSAKMi41MS4wCgo= --00000000000012f0e906425a28f6 Content-Type: application/octet-stream; name="v19-0001-Use-64-bit-multixact-offsets.patch" Content-Disposition: attachment; filename="v19-0001-Use-64-bit-multixact-offsets.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhczu5zl0 RnJvbSBjMWI5MTFjZmZiYmI1MmE0NDc5ZjFiNDczMThjNGQ3M2JiNjcxYmI2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+CkRhdGU6 IFdlZCwgNyBBdWcgMjAyNCAxNjozNToyMiArMDMwMApTdWJqZWN0OiBbUEFUQ0ggdjE5IDEvNV0g VXNlIDY0LWJpdCBtdWx0aXhhY3Qgb2Zmc2V0cwoKU3dpdGNoaW5nIHRvIDY0LWJpdCBtdWx0aXRy YW5zYWN0aW9uIG9mZnNldHMgcmVtb3ZlcyB3cmFwYXJvdW5kIGFuZCB0aGUKMl4zMiBsaW1pdCBv biB0aGVpciB0b3RhbCBudW1iZXIuCgpPbiB0aGUgb3RoZXIgaGFuZCwgdGhpcyBtb3ZlIGlzIGlu ZXZpdGFibGUgaW4gaW5jcmVhc2VkIGRpc2Mgc3BhY2UKdXRpbGlzYXRpb24uICBGb3J0dW5hdGVs eSwgbXVsdGl0cmFuc2FjdGlvbiBvZmZzZXRzIHJpc2UgbW9ub3RvbmljYWxseQphbmQgd2l0aG91 dCBnYXBzLiAgVG8gY29uc2VydmUgZGlzYyBzcGFjZSBjb25zdW1lZCBieSBzZWdtZW50cywgd2UK d3JpdGUgYSA2NC1iaXQgImJhc2UiIGF0IHRoZSBzdGFydCBvZiBlYWNoIHBhZ2UsIHdoaWNoIGFs c28gc2VydmVzIGFzCnRoZSBwYWdlJ3MgZmlyc3Qgb2Zmc2V0LiAgQWxsIHN1YnNlcXVlbnQgb2Zm c2V0cyBvbiB0aGUgcGFnZSBhcmUKY2FsY3VsYXRlZCByZWxhdGl2ZSB0byB0aGlzICJiYXNlIi4K CkF1dGhvcjogTWF4aW0gT3Jsb3YgPG9ybG92bWdAZ21haWwuY29tPgotLS0KIHNyYy9iYWNrZW5k L2FjY2Vzcy9ybWdyZGVzYy9teGFjdGRlc2MuYyAgIHwgICA0ICstCiBzcmMvYmFja2VuZC9hY2Nl c3Mvcm1ncmRlc2MveGxvZ2Rlc2MuYyAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0vbXVsdGl4YWN0LmMgICAgfCAzNzUgKysrKysrKy0tLS0tLS0tLS0tLS0tLQogc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMgfCAgIDIgKy0KIHNyYy9iYWNrZW5k L2NvbW1hbmRzL3ZhY3V1bS5jICAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9wb3N0 bWFzdGVyL2F1dG92YWN1dW0uYyAgICAgICB8ICAgNCArLQogc3JjL2Jpbi9wZ19jb250cm9sZGF0 YS9wZ19jb250cm9sZGF0YS5jICAgfCAgIDIgKy0KIHNyYy9iaW4vcGdfcmVzZXR3YWwvcGdfcmVz ZXR3YWwuYyAgICAgICAgIHwgICA2ICstCiBzcmMvYmluL3BnX3Jlc2V0d2FsL3QvMDAxX2Jhc2lj LnBsICAgICAgICB8ICAgMiArLQogc3JjL2luY2x1ZGUvYWNjZXNzL211bHRpeGFjdC5oICAgICAg ICAgICAgfCAgIDMgKy0KIHNyYy9pbmNsdWRlL2MuaCAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgICAyICstCiAxMSBmaWxlcyBjaGFuZ2VkLCAxMjUgaW5zZXJ0aW9ucygrKSwgMjc5IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9teGFjdGRl c2MuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9teGFjdGRlc2MuYwppbmRleCAzY2Ew NTgyZGIzLi4wNTJkZDBhNGNlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRl c2MvbXhhY3RkZXNjLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL214YWN0ZGVz Yy5jCkBAIC02NSw3ICs2NSw3IEBAIG11bHRpeGFjdF9kZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9n UmVhZGVyU3RhdGUgKnJlY29yZCkKIAkJeGxfbXVsdGl4YWN0X2NyZWF0ZSAqeGxyZWMgPSAoeGxf bXVsdGl4YWN0X2NyZWF0ZSAqKSByZWM7CiAJCWludAkJCWk7CiAKLQkJYXBwZW5kU3RyaW5nSW5m byhidWYsICIldSBvZmZzZXQgJXUgbm1lbWJlcnMgJWQ6ICIsIHhscmVjLT5taWQsCisJCWFwcGVu ZFN0cmluZ0luZm8oYnVmLCAiJXUgb2Zmc2V0ICUiIFBSSXU2NCAiIG5tZW1iZXJzICVkOiAiLCB4 bHJlYy0+bWlkLAogCQkJCQkJIHhscmVjLT5tb2ZmLCB4bHJlYy0+bm1lbWJlcnMpOwogCQlmb3Ig KGkgPSAwOyBpIDwgeGxyZWMtPm5tZW1iZXJzOyBpKyspCiAJCQlvdXRfbWVtYmVyKGJ1ZiwgJnhs cmVjLT5tZW1iZXJzW2ldKTsKQEAgLTc0LDcgKzc0LDcgQEAgbXVsdGl4YWN0X2Rlc2MoU3RyaW5n SW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCXsKIAkJeGxfbXVsdGl4YWN0X3Ry dW5jYXRlICp4bHJlYyA9ICh4bF9tdWx0aXhhY3RfdHJ1bmNhdGUgKikgcmVjOwogCi0JCWFwcGVu ZFN0cmluZ0luZm8oYnVmLCAib2Zmc2V0cyBbJXUsICV1KSwgbWVtYmVycyBbJXUsICV1KSIsCisJ CWFwcGVuZFN0cmluZ0luZm8oYnVmLCAib2Zmc2V0cyBbJXUsICV1KSwgbWVtYmVycyBbJSIgUFJJ dTY0ICIsICUiIFBSSXU2NCAiKSIsCiAJCQkJCQkgeGxyZWMtPnN0YXJ0VHJ1bmNPZmYsIHhscmVj LT5lbmRUcnVuY09mZiwKIAkJCQkJCSB4bHJlYy0+c3RhcnRUcnVuY01lbWIsIHhscmVjLT5lbmRU cnVuY01lbWIpOwogCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy94 bG9nZGVzYy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL3hsb2dkZXNjLmMKaW5kZXgg Y2Q2YzJhMmY2NS4uNDQxMDM0ZjU5MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3Jt Z3JkZXNjL3hsb2dkZXNjLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL3hsb2dk ZXNjLmMKQEAgLTY2LDcgKzY2LDcgQEAgeGxvZ19kZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9nUmVh ZGVyU3RhdGUgKnJlY29yZCkKIAkJQ2hlY2tQb2ludCAqY2hlY2twb2ludCA9IChDaGVja1BvaW50 ICopIHJlYzsKIAogCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgInJlZG8gJVgvJTA4WDsgIgotCQkJ CQkJICJ0bGkgJXU7IHByZXYgdGxpICV1OyBmcHcgJXM7IHdhbF9sZXZlbCAlczsgeGlkICV1OiV1 OyBvaWQgJXU7IG11bHRpICV1OyBvZmZzZXQgJXU7ICIKKwkJCQkJCSAidGxpICV1OyBwcmV2IHRs aSAldTsgZnB3ICVzOyB3YWxfbGV2ZWwgJXM7IHhpZCAldToldTsgb2lkICV1OyBtdWx0aSAldTsg b2Zmc2V0ICUiIFBSSXU2NCAiOyAiCiAJCQkJCQkgIm9sZGVzdCB4aWQgJXUgaW4gREIgJXU7IG9s ZGVzdCBtdWx0aSAldSBpbiBEQiAldTsgIgogCQkJCQkJICJvbGRlc3QvbmV3ZXN0IGNvbW1pdCB0 aW1lc3RhbXAgeGlkOiAldS8ldTsgIgogCQkJCQkJICJvbGRlc3QgcnVubmluZyB4aWQgJXU7ICVz IiwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMKaW5kZXggOWQ1ZjEzMGFmNy4u ZTc4NjE2MTRiZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4 YWN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMKQEAgLTg5 LDIxICs4OSwzMSBAQAogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAKIAordHlwZWRlZiBp bnQzMiBTaG9ydE11bHRpWGFjdE9mZnNldDsJLyogZm9yIGEgZGlzayBzdG9yYWdlICovCisKIC8q CiAgKiBEZWZpbmVzIGZvciBNdWx0aVhhY3RPZmZzZXQgcGFnZSBzaXplcy4gIEEgcGFnZSBpcyB0 aGUgc2FtZSBCTENLU1ogYXMgaXMKICAqIHVzZWQgZXZlcnl3aGVyZSBlbHNlIGluIFBvc3RncmVz LgogICoKLSAqIE5vdGU6IGJlY2F1c2UgTXVsdGlYYWN0T2Zmc2V0cyBhcmUgMzIgYml0cyBhbmQg d3JhcCBhcm91bmQgYXQgMHhGRkZGRkZGRiwKLSAqIE11bHRpWGFjdCBwYWdlIG51bWJlcmluZyBh bHNvIHdyYXBzIGFyb3VuZCBhdAotICogMHhGRkZGRkZGRi9NVUxUSVhBQ1RfT0ZGU0VUU19QRVJf UEFHRSwgYW5kIHNlZ21lbnQgbnVtYmVyaW5nIGF0Ci0gKiAweEZGRkZGRkZGL01VTFRJWEFDVF9P RkZTRVRTX1BFUl9QQUdFL1NMUlVfUEFHRVNfUEVSX1NFR01FTlQuICBXZSBuZWVkCi0gKiB0YWtl IG5vIGV4cGxpY2l0IG5vdGljZSBvZiB0aGF0IGZhY3QgaW4gdGhpcyBtb2R1bGUsIGV4Y2VwdCB3 aGVuIGNvbXBhcmluZwotICogc2VnbWVudCBhbmQgcGFnZSBudW1iZXJzIGluIFRydW5jYXRlTXVs dGlYYWN0IChzZWUKLSAqIE11bHRpWGFjdE9mZnNldFBhZ2VQcmVjZWRlcykuCisgKiBUaGVyZSBh cmUgdHdvIGtleSBmYWN0b3JzIHdoeSB1dGlsaXNpbmcgc3RyYWlnaHRmb3J3YXJkIDY0LWJpdCBv ZmZzZXQgdmFsdWVzCisgKiBmb3IgaXMgd2FzdGVmdWwgaW4gdGVybXMgb2YgZGlzYyBzcGFjZSB1 c2FnZToKKyAqIDEpIG9mZnNldCB2YWx1ZXMgYXJlIHJlY29yZGVkIGluIGFzY2VuZGluZyBvcmRl ciBhbmQgbm90IG92ZXJ3cml0dGVuOworICogMikgdGhlIGxhcmdlc3Qgc3VwcG9ydGVkIEJMQ0tT WiBpcyAzMmssIHdoaWNoIGNhbiBzdG9yZSB1cCB0byAyXjEzIDMyLWJpdAorICogICAgaXRlbXMg b24gYSBzaW5nbGUgcGFnZTsgIHRodXMsIHdpdGggTUFYX0JBQ0tFTkRTIGxpbWl0ZWQgdG8gMl4x OC0xIHdlIGhhdmUKKyAqICAgIDJeMTMgKiAoMl4xOC0xKSB3aGljaCBpcyBsZXNzIDJeMzEgYW5k IGZpdHMgMzItYml0cy4KKyAqCisgKiBJbiBvdGhlciB3b3JkcywgbWF4ICJkaXN0YW5jZSIgZm9y IG9mZnNldHMgb24gYSBzaW5nbGUgcGFnZSBpcyBub3QgZXhlZWRlZAorICogMzItYml0cy4gIFRv IG9wdGltaXNlIGRpc2Mgc3BhY2UgYWxsb2NhdGlvbiwgd2UgZW1wbG95IHRoZSBmb2xsb3dpbmcg c2NoZW1lLgorICogT24gZWFjaCBwYWdlLCB0aGUgYmFzaWMgNjQtYml0IG9mZnNldCwga25vd24g YXMgdGhlIHBhZ2UgYmFzZSwgaXMgbG9jYXRlZAorICogZmlyc3QuICBOZXh0LCB0aGVyZSBhcmUg MzItYml0IGRlbHRhcyByZWxhdGl2ZSB0byB0aGUgYmFzZSBlbGVtZW50IGFyZQorICogcGxhY2Vk LiAgVGh1cywgdGhlIHJlcXVpcmVkIG9mZnNldCBmb3IgdGhlIDAtdGggZWxlbWVudCBpcyB0aGUg cGFnZSdzCisgKiBiYXNlOyB0aGUgdmFsdWUgZm9yIGVhY2ggc3Vic2VxdWVudCBvZmZzZXQgb24g dGhlIHNhbWUgcGFnZSBpcyBjYWxjdWxhdGVkCisgKiBieSBhZGRpbmcgaXQgdG8gdGhlIHBhZ2Ug YmFzZSAoMC10aCkgZWxlbWVudC4KICAqLwogCi0vKiBXZSBuZWVkIGZvdXIgYnl0ZXMgcGVyIG9m ZnNldCAqLwotI2RlZmluZSBNVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRSAoQkxDS1NaIC8gc2l6 ZW9mKE11bHRpWGFjdE9mZnNldCkpCisvKiBXZSBuZWVkIGZvdXIgYnl0ZXMgcGVyIG9mZnNldCwg OCBieXRlcyBmb3IgdGhlIGJhc2UgKi8KKyNkZWZpbmUgTVVMVElYQUNUX09GRlNFVFNfUEVSX1BB R0UJCVwKKwkoKEJMQ0tTWiAtIHNpemVvZihNdWx0aVhhY3RPZmZzZXQpKSAvIHNpemVvZihTaG9y dE11bHRpWGFjdE9mZnNldCkpCiAKIHN0YXRpYyBpbmxpbmUgaW50NjQKIE11bHRpWGFjdElkVG9P ZmZzZXRQYWdlKE11bHRpWGFjdElkIG11bHRpKQpAQCAtMjA4LDEwICsyMTgsMTQgQEAgTVhPZmZz ZXRUb01lbWJlck9mZnNldChNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0KQogCQltZW1iZXJfaW5fZ3Jv dXAgKiBzaXplb2YoVHJhbnNhY3Rpb25JZCk7CiB9CiAKLS8qIE11bHRpeGFjdCBtZW1iZXJzIHdy YXBhcm91bmQgdGhyZXNob2xkcy4gKi8KLSNkZWZpbmUgTVVMVElYQUNUX01FTUJFUl9TQUZFX1RI UkVTSE9MRAkJKE1heE11bHRpWGFjdE9mZnNldCAvIDIpCi0jZGVmaW5lIE1VTFRJWEFDVF9NRU1C RVJfREFOR0VSX1RIUkVTSE9MRAlcCi0JKE1heE11bHRpWGFjdE9mZnNldCAtIE1heE11bHRpWGFj dE9mZnNldCAvIDQpCisvKgorICogTXVsdGl4YWN0IG1lbWJlcnMgd2FybmluZyB0aHJlc2hvbGQu CisgKgorICogSWYgZGlmZmVyZW5jZSBiZXR0d2VlbiBuZXh0T2Zmc2V0IGFuZCBvbGRlc3RPZmZz ZXQgZXhjZWVkIHRoaXMgdmFsdWUsIHdlCisgKiB0cmlnZ2VyIGF1dG92YWN1dW1pbiBvcmRlciB0 byByZWxlYXNlIHRoZSBkaXNrIHNwYWNlLCByZWR1Y2UgdGFibGUgYmxvYXQgaWYKKyAqIHBvc3Np YmxlLgorICovCisjZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJfQVVUT1ZBQ19USFJFU0hPTEQJCVVJ TlQ2NENPTlNUKDB4RkZGRkZGRkYpCiAKIHN0YXRpYyBpbmxpbmUgTXVsdGlYYWN0SWQKIFByZXZp b3VzTXVsdGlYYWN0SWQoTXVsdGlYYWN0SWQgbXVsdGkpCkBAIC0yMjgsNiArMjQyLDUxIEBAIHN0 YXRpYyBTbHJ1Q3RsRGF0YSBNdWx0aVhhY3RNZW1iZXJDdGxEYXRhOwogI2RlZmluZSBNdWx0aVhh Y3RPZmZzZXRDdGwJKCZNdWx0aVhhY3RPZmZzZXRDdGxEYXRhKQogI2RlZmluZSBNdWx0aVhhY3RN ZW1iZXJDdGwJKCZNdWx0aVhhY3RNZW1iZXJDdGxEYXRhKQogCisvKgorICogVG8gYXZvaWQgZGl2 aW5nIGRlZXAgaW50byBhZGRyZXNzIGFyaXRobWV0aWMsIHdlIGRlY2xhcmUgYW4gYXV4aWxpYXJ5 CisgKiBzdHJ1Y3R1cmUgdGhhdCBhY2Nlc3MgdGhlIE11bHRpWGFjdE9mZnNldCBTTFJVIHBhZ2Uu CisgKi8KK3R5cGVkZWYgc3RydWN0IE11bHRpWGFjdE9mZnNldFNMUlVQYWdlCit7CisJTXVsdGlY YWN0T2Zmc2V0CQkJYmFzZTsKKwlTaG9ydE11bHRpWGFjdE9mZnNldAlvZmZzZXRbRkxFWElCTEVf QVJSQVlfTUVNQkVSXTsKK30gTXVsdGlYYWN0T2Zmc2V0U0xSVVBhZ2U7CisKK3N0YXRpYyBpbmxp bmUgTXVsdGlYYWN0T2Zmc2V0CitNWE9mZnNldFJlYWQoaW50IGVudHJ5bm8sIGludCBzbG90bm8p Cit7CisJTXVsdGlYYWN0T2Zmc2V0U0xSVVBhZ2UgKnBhZ2UgPQorCQkoTXVsdGlYYWN0T2Zmc2V0 U0xSVVBhZ2UgKikgTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Ru b107CisKKwlpZiAocGFnZS0+b2Zmc2V0W2VudHJ5bm9dICE9IDApCisJCXJldHVybiBwYWdlLT5i YXNlICsgKHBhZ2UtPm9mZnNldFtlbnRyeW5vXSBeIDB4ODAwMDAwMDApOworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorTVhPZmZzZXRXcml0ZShpbnQgZW50cnlubywgaW50 IHNsb3RubywgTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCkKK3sKKwlNdWx0aVhhY3RPZmZzZXRTTFJV UGFnZSAqcGFnZSA9CisJCShNdWx0aVhhY3RPZmZzZXRTTFJVUGFnZSAqKSBNdWx0aVhhY3RPZmZz ZXRDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXTsKKworCWlmIChwYWdlLT5iYXNlICE9 IDApCisJCXBhZ2UtPm9mZnNldFtlbnRyeW5vXSA9IG9mZnNldCAtIHBhZ2UtPmJhc2U7CisJZWxz ZQorCXsKKwkJcGFnZS0+YmFzZSA9IG9mZnNldDsKKwkJcGFnZS0+b2Zmc2V0W2VudHJ5bm9dID0g MDsKKwl9CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB1bmluaXRl ZCB2YWx1ZSBhbmQgbm90IHlldCB3cml0dGVuIG9mZnNldC4KKwkgKiBTZWUgY2FzZSAyIGluIEdl dE11bHRpWGFjdElkTWVtYmVycy4KKwkgKgorCSAqIFNvLCBtYXJrIHRoaXMgb2Zmc2V0IGluaXRl ZC4KKwkgKi8KKwlwYWdlLT5vZmZzZXRbZW50cnlub10gXj0gMHg4MDAwMDAwMDsKK30KKwogLyoK ICAqIE11bHRpWGFjdCBzdGF0ZSBzaGFyZWQgYWNyb3NzIGFsbCBiYWNrZW5kcy4gIEFsbCB0aGlz IHN0YXRlIGlzIHByb3RlY3RlZAogICogYnkgTXVsdGlYYWN0R2VuTG9jay4gIChXZSBhbHNvIHVz ZSBTTFJVIGJhbmsncyBsb2NrIG9mIE11bHRpWGFjdE9mZnNldCBhbmQKQEAgLTI2OCw5ICszMjcs NiBAQCB0eXBlZGVmIHN0cnVjdCBNdWx0aVhhY3RTdGF0ZURhdGEKIAlNdWx0aVhhY3RJZCBtdWx0 aVN0b3BMaW1pdDsKIAlNdWx0aVhhY3RJZCBtdWx0aVdyYXBMaW1pdDsKIAotCS8qIHN1cHBvcnQg Zm9yIG1lbWJlcnMgYW50aS13cmFwYXJvdW5kIG1lYXN1cmVzICovCi0JTXVsdGlYYWN0T2Zmc2V0 IG9mZnNldFN0b3BMaW1pdDsJLyoga25vd24gaWYgb2xkZXN0T2Zmc2V0S25vd24gKi8KLQogCS8q CiAJICogVGhpcyBpcyB1c2VkIHRvIHNsZWVwIHVudGlsIGEgbXVsdGl4YWN0IG9mZnNldCBpcyB3 cml0dGVuIHdoZW4gd2Ugd2FudAogCSAqIHRvIGNyZWF0ZSB0aGUgbmV4dCBvbmUuCkBAIC00MDEs OCArNDU3LDYgQEAgc3RhdGljIGJvb2wgTXVsdGlYYWN0T2Zmc2V0UHJlY2VkZXMoTXVsdGlYYWN0 T2Zmc2V0IG9mZnNldDEsCiAJCQkJCQkJCQlNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0Mik7CiBzdGF0 aWMgdm9pZCBFeHRlbmRNdWx0aVhhY3RPZmZzZXQoTXVsdGlYYWN0SWQgbXVsdGkpOwogc3RhdGlj IHZvaWQgRXh0ZW5kTXVsdGlYYWN0TWVtYmVyKE11bHRpWGFjdE9mZnNldCBvZmZzZXQsIGludCBu bWVtYmVycyk7Ci1zdGF0aWMgYm9vbCBNdWx0aVhhY3RPZmZzZXRXb3VsZFdyYXAoTXVsdGlYYWN0 T2Zmc2V0IGJvdW5kYXJ5LAotCQkJCQkJCQkJIE11bHRpWGFjdE9mZnNldCBzdGFydCwgdWludDMy IGRpc3RhbmNlKTsKIHN0YXRpYyBib29sIFNldE9mZnNldFZhY3V1bUxpbWl0KGJvb2wgaXNfc3Rh cnR1cCk7CiBzdGF0aWMgYm9vbCBmaW5kX211bHRpeGFjdF9zdGFydChNdWx0aVhhY3RJZCBtdWx0 aSwgTXVsdGlYYWN0T2Zmc2V0ICpyZXN1bHQpOwogc3RhdGljIHZvaWQgV3JpdGVNVHJ1bmNhdGVY bG9nUmVjKE9pZCBvbGRlc3RNdWx0aURCLApAQCAtOTExLDcgKzk2NSw2IEBAIFJlY29yZE5ld011 bHRpWGFjdChNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCwKIAlpbnQ2 NAkJcHJldl9wYWdlbm87CiAJaW50CQkJZW50cnlubzsKIAlpbnQJCQlzbG90bm87Ci0JTXVsdGlY YWN0T2Zmc2V0ICpvZmZwdHI7CiAJaW50CQkJaTsKIAlMV0xvY2sJICAgKmxvY2s7CiAJTFdMb2Nr CSAgICpwcmV2bG9jayA9IE5VTEw7CkBAIC05MzAsMTAgKzk4Myw4IEBAIFJlY29yZE5ld011bHRp WGFjdChNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCwKIAkgKiB0YWtl IHRoZSB0cm91YmxlIHRvIGdlbmVyYWxpemUgdGhlIHNscnUuYyBlcnJvciByZXBvcnRpbmcgY29k ZS4KIAkgKi8KIAlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShNdWx0aVhhY3RPZmZzZXRDdGws IHBhZ2VubywgdHJ1ZSwgbXVsdGkpOwotCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQgKikgTXVs dGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107Ci0Jb2ZmcHRyICs9 IGVudHJ5bm87CiAKLQkqb2ZmcHRyID0gb2Zmc2V0OworCU1YT2Zmc2V0V3JpdGUoZW50cnlubywg c2xvdG5vLCBvZmZzZXQpOwogCiAJTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfZGly dHlbc2xvdG5vXSA9IHRydWU7CiAKQEAgLTExNTUsNzggKzEyMDYsNiBAQCBHZXROZXdNdWx0aVhh Y3RJZChpbnQgbm1lbWJlcnMsIE11bHRpWGFjdE9mZnNldCAqb2Zmc2V0KQogCWVsc2UKIAkJKm9m ZnNldCA9IG5leHRPZmZzZXQ7CiAKLQkvKi0tLS0tLS0tLS0KLQkgKiBQcm90ZWN0IGFnYWluc3Qg b3ZlcnJ1biBvZiB0aGUgbWVtYmVycyBzcGFjZSBhcyB3ZWxsLCB3aXRoIHRoZQotCSAqIGZvbGxv d2luZyBydWxlczoKLQkgKgotCSAqIElmIHdlJ3JlIHBhc3Qgb2Zmc2V0U3RvcExpbWl0LCByZWZ1 c2UgdG8gZ2VuZXJhdGUgbW9yZSBtdWx0aXMuCi0JICogSWYgd2UncmUgY2xvc2UgdG8gb2Zmc2V0 U3RvcExpbWl0LCBlbWl0IGEgd2FybmluZy4KLQkgKgotCSAqIEFyYml0cmFyaWx5LCB3ZSBzdGFy dCBlbWl0dGluZyB3YXJuaW5ncyB3aGVuIHdlJ3JlIDIwIHNlZ21lbnRzIG9yIGxlc3MKLQkgKiBm cm9tIG9mZnNldFN0b3BMaW1pdC4KLQkgKgotCSAqIE5vdGUgd2UgaGF2ZW4ndCB1cGRhdGVkIHRo ZSBzaGFyZWQgc3RhdGUgeWV0LCBzbyBpZiB3ZSBmYWlsIGF0IHRoaXMKLQkgKiBwb2ludCwgdGhl IG11bHRpeGFjdCBJRCB3ZSBncmFiYmVkIGNhbiBzdGlsbCBiZSB1c2VkIGJ5IHRoZSBuZXh0IGd1 eS4KLQkgKgotCSAqIE5vdGUgdGhhdCB0aGVyZSBpcyBubyBwb2ludCBpbiBmb3JjaW5nIGF1dG92 YWN1dW0gcnVucyBoZXJlOiB0aGUKLQkgKiBtdWx0aXhhY3QgZnJlZXplIHNldHRpbmdzIHdvdWxk IGhhdmUgdG8gYmUgcmVkdWNlZCBmb3IgdGhhdCB0byBoYXZlIGFueQotCSAqIGVmZmVjdC4KLQkg Ki0tLS0tLS0tLS0KLQkgKi8KLSNkZWZpbmUgT0ZGU0VUX1dBUk5fU0VHTUVOVFMJMjAKLQlpZiAo TXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9mZnNldEtub3duICYmCi0JCU11bHRpWGFjdE9mZnNldFdv dWxkV3JhcChNdWx0aVhhY3RTdGF0ZS0+b2Zmc2V0U3RvcExpbWl0LCBuZXh0T2Zmc2V0LAotCQkJ CQkJCQkgbm1lbWJlcnMpKQotCXsKLQkJLyogc2VlIGNvbW1lbnQgaW4gdGhlIGNvcnJlc3BvbmRp bmcgb2Zmc2V0cyB3cmFwYXJvdW5kIGNhc2UgKi8KLQkJU2VuZFBvc3RtYXN0ZXJTaWduYWwoUE1T SUdOQUxfU1RBUlRfQVVUT1ZBQ19MQVVOQ0hFUik7Ci0KLQkJZXJlcG9ydChFUlJPUiwKLQkJCQko ZXJyY29kZShFUlJDT0RFX1BST0dSQU1fTElNSVRfRVhDRUVERUQpLAotCQkJCSBlcnJtc2coIm11 bHRpeGFjdCBcIm1lbWJlcnNcIiBsaW1pdCBleGNlZWRlZCIpLAotCQkJCSBlcnJkZXRhaWxfcGx1 cmFsKCJUaGlzIGNvbW1hbmQgd291bGQgY3JlYXRlIGEgbXVsdGl4YWN0IHdpdGggJXUgbWVtYmVy cywgYnV0IHRoZSByZW1haW5pbmcgc3BhY2UgaXMgb25seSBlbm91Z2ggZm9yICV1IG1lbWJlci4i LAotCQkJCQkJCQkgICJUaGlzIGNvbW1hbmQgd291bGQgY3JlYXRlIGEgbXVsdGl4YWN0IHdpdGgg JXUgbWVtYmVycywgYnV0IHRoZSByZW1haW5pbmcgc3BhY2UgaXMgb25seSBlbm91Z2ggZm9yICV1 IG1lbWJlcnMuIiwKLQkJCQkJCQkJICBNdWx0aVhhY3RTdGF0ZS0+b2Zmc2V0U3RvcExpbWl0IC0g bmV4dE9mZnNldCAtIDEsCi0JCQkJCQkJCSAgbm1lbWJlcnMsCi0JCQkJCQkJCSAgTXVsdGlYYWN0 U3RhdGUtPm9mZnNldFN0b3BMaW1pdCAtIG5leHRPZmZzZXQgLSAxKSwKLQkJCQkgZXJyaGludCgi RXhlY3V0ZSBhIGRhdGFiYXNlLXdpZGUgVkFDVVVNIGluIGRhdGFiYXNlIHdpdGggT0lEICV1IHdp dGggcmVkdWNlZCBcInZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX21pbl9hZ2VcIiBhbmQgXCJ2YWN1 dW1fbXVsdGl4YWN0X2ZyZWV6ZV90YWJsZV9hZ2VcIiBzZXR0aW5ncy4iLAotCQkJCQkJIE11bHRp WGFjdFN0YXRlLT5vbGRlc3RNdWx0aVhhY3REQikpKTsKLQl9Ci0KLQkvKgotCSAqIENoZWNrIHdo ZXRoZXIgd2Ugc2hvdWxkIGtpY2sgYXV0b3ZhY3V1bSBpbnRvIGFjdGlvbiwgdG8gcHJldmVudCBt ZW1iZXJzCi0JICogd3JhcGFyb3VuZC4gTkIgd2UgdXNlIGEgbXVjaCBsYXJnZXIgd2luZG93IHRv IHRyaWdnZXIgYXV0b3ZhY3V1bSB0aGFuCi0JICoganVzdCB0aGUgd2FybmluZyBsaW1pdC4gVGhl IHdhcm5pbmcgaXMganVzdCBhIG1lYXN1cmUgb2YgbGFzdCByZXNvcnQgLQotCSAqIHRoaXMgaXMg aW4gbGluZSB3aXRoIEdldE5ld1RyYW5zYWN0aW9uSWQncyBiZWhhdmlvdXIuCi0JICovCi0JaWYg KCFNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0T2Zmc2V0S25vd24gfHwKLQkJKE11bHRpWGFjdFN0YXRl LT5uZXh0T2Zmc2V0IC0gTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9mZnNldAotCQkgPiBNVUxUSVhB Q1RfTUVNQkVSX1NBRkVfVEhSRVNIT0xEKSkKLQl7Ci0JCS8qCi0JCSAqIFRvIGF2b2lkIHN3YW1w aW5nIHRoZSBwb3N0bWFzdGVyIHdpdGggc2lnbmFscywgd2UgaXNzdWUgdGhlIGF1dG92YWMKLQkJ ICogcmVxdWVzdCBvbmx5IHdoZW4gY3Jvc3NpbmcgYSBzZWdtZW50IGJvdW5kYXJ5LiBXaXRoIGRl ZmF1bHQKLQkJICogY29tcGlsYXRpb24gc2V0dGluZ3MgdGhhdCdzIHJvdWdobHkgYWZ0ZXIgNTBr IG1lbWJlcnMuICBUaGlzIHN0aWxsCi0JCSAqIGdpdmVzIHBsZW50eSBvZiBjaGFuY2VzIGJlZm9y ZSB3ZSBnZXQgaW50byByZWFsIHRyb3VibGUuCi0JCSAqLwotCQlpZiAoKE1YT2Zmc2V0VG9NZW1i ZXJQYWdlKG5leHRPZmZzZXQpIC8gU0xSVV9QQUdFU19QRVJfU0VHTUVOVCkgIT0KLQkJCShNWE9m ZnNldFRvTWVtYmVyUGFnZShuZXh0T2Zmc2V0ICsgbm1lbWJlcnMpIC8gU0xSVV9QQUdFU19QRVJf U0VHTUVOVCkpCi0JCQlTZW5kUG9zdG1hc3RlclNpZ25hbChQTVNJR05BTF9TVEFSVF9BVVRPVkFD X0xBVU5DSEVSKTsKLQl9Ci0KLQlpZiAoTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9mZnNldEtub3du ICYmCi0JCU11bHRpWGFjdE9mZnNldFdvdWxkV3JhcChNdWx0aVhhY3RTdGF0ZS0+b2Zmc2V0U3Rv cExpbWl0LAotCQkJCQkJCQkgbmV4dE9mZnNldCwKLQkJCQkJCQkJIG5tZW1iZXJzICsgTVVMVElY QUNUX01FTUJFUlNfUEVSX1BBR0UgKiBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UICogT0ZGU0VUX1dB Uk5fU0VHTUVOVFMpKQotCQllcmVwb3J0KFdBUk5JTkcsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9Q Uk9HUkFNX0xJTUlUX0VYQ0VFREVEKSwKLQkJCQkgZXJybXNnX3BsdXJhbCgiZGF0YWJhc2Ugd2l0 aCBPSUQgJXUgbXVzdCBiZSB2YWN1dW1lZCBiZWZvcmUgJWQgbW9yZSBtdWx0aXhhY3QgbWVtYmVy IGlzIHVzZWQiLAotCQkJCQkJCSAgICJkYXRhYmFzZSB3aXRoIE9JRCAldSBtdXN0IGJlIHZhY3V1 bWVkIGJlZm9yZSAlZCBtb3JlIG11bHRpeGFjdCBtZW1iZXJzIGFyZSB1c2VkIiwKLQkJCQkJCQkg ICBNdWx0aVhhY3RTdGF0ZS0+b2Zmc2V0U3RvcExpbWl0IC0gbmV4dE9mZnNldCArIG5tZW1iZXJz LAotCQkJCQkJCSAgIE11bHRpWGFjdFN0YXRlLT5vbGRlc3RNdWx0aVhhY3REQiwKLQkJCQkJCQkg ICBNdWx0aVhhY3RTdGF0ZS0+b2Zmc2V0U3RvcExpbWl0IC0gbmV4dE9mZnNldCArIG5tZW1iZXJz KSwKLQkJCQkgZXJyaGludCgiRXhlY3V0ZSBhIGRhdGFiYXNlLXdpZGUgVkFDVVVNIGluIHRoYXQg ZGF0YWJhc2Ugd2l0aCByZWR1Y2VkIFwidmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWluX2FnZVwi IGFuZCBcInZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX3RhYmxlX2FnZVwiIHNldHRpbmdzLiIpKSk7 Ci0KIAlFeHRlbmRNdWx0aVhhY3RNZW1iZXIobmV4dE9mZnNldCwgbm1lbWJlcnMpOwogCiAJLyoK QEAgLTEyNTUsNyArMTIzNCw4IEBAIEdldE5ld011bHRpWGFjdElkKGludCBubWVtYmVycywgTXVs dGlYYWN0T2Zmc2V0ICpvZmZzZXQpCiAKIAlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdEdlbkxvY2sp OwogCi0JZGVidWdfZWxvZzQoREVCVUcyLCAiR2V0TmV3OiByZXR1cm5pbmcgJXUgb2Zmc2V0ICV1 IiwgcmVzdWx0LCAqb2Zmc2V0KTsKKwlkZWJ1Z19lbG9nNChERUJVRzIsICJHZXROZXc6IHJldHVy bmluZyAldSBvZmZzZXQgJSIgUFJJdTY0LCByZXN1bHQsCisJCQkJKm9mZnNldCk7CiAJcmV0dXJu IHJlc3VsdDsKIH0KIApAQCAtMTI5NCw3ICsxMjc0LDYgQEAgR2V0TXVsdGlYYWN0SWRNZW1iZXJz KE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RNZW1iZXIgKiptZW1iZXJzLAogCWludDY0CQlw cmV2X3BhZ2VubzsKIAlpbnQJCQllbnRyeW5vOwogCWludAkJCXNsb3RubzsKLQlNdWx0aVhhY3RP ZmZzZXQgKm9mZnB0cjsKIAlNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0OwogCWludAkJCWxlbmd0aDsK IAlpbnQJCQl0cnVlbGVuZ3RoOwpAQCAtMTQxOCw5ICsxMzk3LDggQEAgcmV0cnk6CiAJTFdMb2Nr QWNxdWlyZShsb2NrLCBMV19FWENMVVNJVkUpOwogCiAJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBh Z2UoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8sIHRydWUsIG11bHRpKTsKLQlvZmZwdHIgPSAo TXVsdGlYYWN0T2Zmc2V0ICopIE11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZl cltzbG90bm9dOwotCW9mZnB0ciArPSBlbnRyeW5vOwotCW9mZnNldCA9ICpvZmZwdHI7CisKKwlv ZmZzZXQgPSBNWE9mZnNldFJlYWQoZW50cnlubywgc2xvdG5vKTsKIAogCUFzc2VydChvZmZzZXQg IT0gMCk7CiAKQEAgLTE0NjcsOSArMTQ0NSw3IEBAIHJldHJ5OgogCQkJc2xvdG5vID0gU2ltcGxl THJ1UmVhZFBhZ2UoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8sIHRydWUsIHRtcE1YYWN0KTsK IAkJfQogCi0JCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQgKikgTXVsdGlYYWN0T2Zmc2V0Q3Rs LT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107Ci0JCW9mZnB0ciArPSBlbnRyeW5vOwotCQlu ZXh0TVhPZmZzZXQgPSAqb2ZmcHRyOworCQluZXh0TVhPZmZzZXQgPSBNWE9mZnNldFJlYWQoZW50 cnlubywgc2xvdG5vKTsKIAogCQlpZiAobmV4dE1YT2Zmc2V0ID09IDApCiAJCXsKQEAgLTE5NzMs NyArMTk0OSw3IEBAIE11bHRpWGFjdFNobWVtSW5pdCh2b2lkKQogCQkJCSAgInBnX211bHRpeGFj dC9tZW1iZXJzIiwgTFdUUkFOQ0hFX01VTFRJWEFDVE1FTUJFUl9CVUZGRVIsCiAJCQkJICBMV1RS QU5DSEVfTVVMVElYQUNUTUVNQkVSX1NMUlUsCiAJCQkJICBTWU5DX0hBTkRMRVJfTVVMVElYQUNU X01FTUJFUiwKLQkJCQkgIGZhbHNlKTsKKwkJCQkgIHRydWUpOwogCS8qIGRvZXNuJ3QgY2FsbCBT aW1wbGVMcnVUcnVuY2F0ZSgpIG9yIG1lZXQgY3JpdGVyaWEgZm9yIHVuaXQgdGVzdHMgKi8KIAog CS8qIEluaXRpYWxpemUgb3VyIHNoYXJlZCBzdGF0ZSBzdHJ1Y3QgKi8KQEAgLTIxNDksOSArMjEy NSwyNCBAQCBUcmltTXVsdGlYYWN0KHZvaWQpCiAJCUxXTG9ja0FjcXVpcmUobG9jaywgTFdfRVhD TFVTSVZFKTsKIAkJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoTXVsdGlYYWN0T2Zmc2V0Q3Rs LCBwYWdlbm8sIHRydWUsIG5leHRNWGFjdCk7CiAJCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQg KikgTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107Ci0JCW9m ZnB0ciArPSBlbnRyeW5vOwogCi0JCU1lbVNldChvZmZwdHIsIDAsIEJMQ0tTWiAtIChlbnRyeW5v ICogc2l6ZW9mKE11bHRpWGFjdE9mZnNldCkpKTsKKwkJaWYgKGVudHJ5bm8gPT0gMCkKKwkJCU1l bVNldChvZmZwdHIsIDAsIEJMQ0tTWik7CisJCWVsc2UKKwkJeworCQkJU2hvcnRNdWx0aVhhY3RP ZmZzZXQgKm9mZjMycHRyOworCisJCQlvZmYzMnB0ciA9IChTaG9ydE11bHRpWGFjdE9mZnNldCAq KSAob2ZmcHRyICsgMSk7CisJCQlvZmYzMnB0ciArPSBlbnRyeW5vOworCisJCQkvKgorCQkJICog S25vd2luZyB0aGF0IG9mZnB0ciBwb2ludHMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVy LAorCQkJICogYWRkcmVzcyBhcml0aG1ldGljIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUg YW1vdW50IG9mCisJCQkgKiBieXRlcyByZW1haW5pbmcuCisJCQkgKi8KKwkJCU1lbVNldChvZmYz MnB0ciwgMCwKKwkJCQkgICBCTENLU1ogLSAoKChjaGFyICopIG9mZjMycHRyIC0gKGNoYXIgKikg b2ZmcHRyKSkpOworCQl9CiAKIAkJTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfZGly dHlbc2xvdG5vXSA9IHRydWU7CiAJCUxXTG9ja1JlbGVhc2UobG9jayk7CkBAIC0yMjIzLDcgKzIy MTQsNyBAQCBNdWx0aVhhY3RHZXRDaGVja3B0TXVsdGkoYm9vbCBpc19zaHV0ZG93biwKIAlMV0xv Y2tSZWxlYXNlKE11bHRpWGFjdEdlbkxvY2spOwogCiAJZGVidWdfZWxvZzYoREVCVUcyLAotCQkJ CSJNdWx0aVhhY3Q6IGNoZWNrcG9pbnQgaXMgbmV4dE11bHRpICV1LCBuZXh0T2Zmc2V0ICV1LCBv bGRlc3RNdWx0aSAldSBpbiBEQiAldSIsCisJCQkJIk11bHRpWGFjdDogY2hlY2twb2ludCBpcyBu ZXh0TXVsdGkgJXUsIG5leHRPZmZzZXQgJSIgUFJJdTY0ICIsIG9sZGVzdE11bHRpICV1IGluIERC ICV1IiwKIAkJCQkqbmV4dE11bHRpLCAqbmV4dE11bHRpT2Zmc2V0LCAqb2xkZXN0TXVsdGksICpv bGRlc3RNdWx0aURCKTsKIH0KIApAQCAtMjI1OCw3ICsyMjQ5LDcgQEAgdm9pZAogTXVsdGlYYWN0 U2V0TmV4dE1YYWN0KE11bHRpWGFjdElkIG5leHRNdWx0aSwKIAkJCQkJICBNdWx0aVhhY3RPZmZz ZXQgbmV4dE11bHRpT2Zmc2V0KQogewotCWRlYnVnX2Vsb2c0KERFQlVHMiwgIk11bHRpWGFjdDog c2V0dGluZyBuZXh0IG11bHRpIHRvICV1IG9mZnNldCAldSIsCisJZGVidWdfZWxvZzQoREVCVUcy LCAiTXVsdGlYYWN0OiBzZXR0aW5nIG5leHQgbXVsdGkgdG8gJXUgb2Zmc2V0ICUiIFBSSXU2NCwK IAkJCQluZXh0TXVsdGksIG5leHRNdWx0aU9mZnNldCk7CiAJTFdMb2NrQWNxdWlyZShNdWx0aVhh Y3RHZW5Mb2NrLCBMV19FWENMVVNJVkUpOwogCU11bHRpWGFjdFN0YXRlLT5uZXh0TVhhY3QgPSBu ZXh0TXVsdGk7CkBAIC0yNDQ5LDcgKzI0NDAsNyBAQCBNdWx0aVhhY3RBZHZhbmNlTmV4dE1YYWN0 KE11bHRpWGFjdElkIG1pbk11bHRpLAogCX0KIAlpZiAoTXVsdGlYYWN0T2Zmc2V0UHJlY2VkZXMo TXVsdGlYYWN0U3RhdGUtPm5leHRPZmZzZXQsIG1pbk11bHRpT2Zmc2V0KSkKIAl7Ci0JCWRlYnVn X2Vsb2czKERFQlVHMiwgIk11bHRpWGFjdDogc2V0dGluZyBuZXh0IG9mZnNldCB0byAldSIsCisJ CWRlYnVnX2Vsb2czKERFQlVHMiwgIk11bHRpWGFjdDogc2V0dGluZyBuZXh0IG9mZnNldCB0byAl IiBQUklVNjQsCiAJCQkJCW1pbk11bHRpT2Zmc2V0KTsKIAkJTXVsdGlYYWN0U3RhdGUtPm5leHRP ZmZzZXQgPSBtaW5NdWx0aU9mZnNldDsKIAl9CkBAIC0yNjMzLDE1ICsyNjI0LDEzIEBAIEdldE9s ZGVzdE11bHRpWGFjdElkKHZvaWQpCiB9CiAKIC8qCi0gKiBEZXRlcm1pbmUgaG93IGFnZ3Jlc3Np dmVseSB3ZSBuZWVkIHRvIHZhY3V1bSBpbiBvcmRlciB0byBwcmV2ZW50IG1lbWJlcgotICogd3Jh cGFyb3VuZC4KKyAqIERldGVybWluZSBpZiB3ZSBuZWVkIHRvIHZhY3V1bSBmb3IgbWVtYmVyIG9y IG5vdC4KICAqCiAgKiBUbyBkbyBzbyBkZXRlcm1pbmUgd2hhdCdzIHRoZSBvbGRlc3QgbWVtYmVy IG9mZnNldCBhbmQgaW5zdGFsbCB0aGUgbGltaXQKICAqIGluZm8gaW4gTXVsdGlYYWN0U3RhdGUs IHdoZXJlIGl0IGNhbiBiZSB1c2VkIHRvIHByZXZlbnQgb3ZlcnJ1biBvZiBvbGQgZGF0YQogICog aW4gdGhlIG1lbWJlcnMgU0xSVSBhcmVhLgogICoKLSAqIFRoZSByZXR1cm4gdmFsdWUgaXMgdHJ1 ZSBpZiBlbWVyZ2VuY3kgYXV0b3ZhY3V1bSBpcyByZXF1aXJlZCBhbmQgZmFsc2UKLSAqIG90aGVy d2lzZS4KKyAqIFRoZSByZXR1cm4gdmFsdWUgaXMgdHJ1ZSBpZiBhdXRvdmFjdXVtIGlzIHJlcXVp cmVkIGFuZCBmYWxzZSBvdGhlcndpc2UuCiAgKi8KIHN0YXRpYyBib29sCiBTZXRPZmZzZXRWYWN1 dW1MaW1pdChib29sIGlzX3N0YXJ0dXApCkBAIC0yNjUzLDggKzI2NDIsNiBAQCBTZXRPZmZzZXRW YWN1dW1MaW1pdChib29sIGlzX3N0YXJ0dXApCiAJTXVsdGlYYWN0T2Zmc2V0IG5leHRPZmZzZXQ7 CiAJYm9vbAkJb2xkZXN0T2Zmc2V0S25vd24gPSBmYWxzZTsKIAlib29sCQlwcmV2T2xkZXN0T2Zm c2V0S25vd247Ci0JTXVsdGlYYWN0T2Zmc2V0IG9mZnNldFN0b3BMaW1pdCA9IDA7Ci0JTXVsdGlY YWN0T2Zmc2V0IHByZXZPZmZzZXRTdG9wTGltaXQ7CiAKIAkvKgogCSAqIE5COiBIYXZlIHRvIHBy ZXZlbnQgY29uY3VycmVudCB0cnVuY2F0aW9uLCB3ZSBtaWdodCBvdGhlcndpc2UgdHJ5IHRvCkBA IC0yNjY5LDcgKzI2NTYsNiBAQCBTZXRPZmZzZXRWYWN1dW1MaW1pdChib29sIGlzX3N0YXJ0dXAp CiAJbmV4dE9mZnNldCA9IE11bHRpWGFjdFN0YXRlLT5uZXh0T2Zmc2V0OwogCXByZXZPbGRlc3RP ZmZzZXRLbm93biA9IE11bHRpWGFjdFN0YXRlLT5vbGRlc3RPZmZzZXRLbm93bjsKIAlwcmV2T2xk ZXN0T2Zmc2V0ID0gTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9mZnNldDsKLQlwcmV2T2Zmc2V0U3Rv cExpbWl0ID0gTXVsdGlYYWN0U3RhdGUtPm9mZnNldFN0b3BMaW1pdDsKIAlBc3NlcnQoTXVsdGlY YWN0U3RhdGUtPmZpbmlzaGVkU3RhcnR1cCk7CiAJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RHZW5M b2NrKTsKIApAQCAtMjcwMCwxMSArMjY4Niw3IEBAIFNldE9mZnNldFZhY3V1bUxpbWl0KGJvb2wg aXNfc3RhcnR1cCkKIAkJb2xkZXN0T2Zmc2V0S25vd24gPQogCQkJZmluZF9tdWx0aXhhY3Rfc3Rh cnQob2xkZXN0TXVsdGlYYWN0SWQsICZvbGRlc3RPZmZzZXQpOwogCi0JCWlmIChvbGRlc3RPZmZz ZXRLbm93bikKLQkJCWVyZXBvcnQoREVCVUcxLAotCQkJCQkoZXJybXNnX2ludGVybmFsKCJvbGRl c3QgTXVsdGlYYWN0SWQgbWVtYmVyIGlzIGF0IG9mZnNldCAldSIsCi0JCQkJCQkJCQkgb2xkZXN0 T2Zmc2V0KSkpOwotCQllbHNlCisJCWlmICghb2xkZXN0T2Zmc2V0S25vd24pCiAJCQllcmVwb3J0 KExPRywKIAkJCQkJKGVycm1zZygiTXVsdGlYYWN0IG1lbWJlciB3cmFwYXJvdW5kIHByb3RlY3Rp b25zIGFyZSBkaXNhYmxlZCBiZWNhdXNlIG9sZGVzdCBjaGVja3BvaW50ZWQgTXVsdGlYYWN0ICV1 IGRvZXMgbm90IGV4aXN0IG9uIGRpc2siLAogCQkJCQkJCW9sZGVzdE11bHRpWGFjdElkKSkpOwpA QCAtMjcxNywyNCArMjY5OSw3IEBAIFNldE9mZnNldFZhY3V1bUxpbWl0KGJvb2wgaXNfc3RhcnR1 cCkKIAkgKiBvdmVycnVuIG9mIG9sZCBkYXRhIGluIHRoZSBtZW1iZXJzIFNMUlUgYXJlYS4gV2Ug Y2FuIG9ubHkgZG8gc28gaWYgdGhlCiAJICogb2xkZXN0IG9mZnNldCBpcyBrbm93biB0aG91Z2gu CiAJICovCi0JaWYgKG9sZGVzdE9mZnNldEtub3duKQotCXsKLQkJLyogbW92ZSBiYWNrIHRvIHN0 YXJ0IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNlZ21lbnQgKi8KLQkJb2Zmc2V0U3RvcExpbWl0ID0g b2xkZXN0T2Zmc2V0IC0gKG9sZGVzdE9mZnNldCAlCi0JCQkJCQkJCQkJICAoTVVMVElYQUNUX01F TUJFUlNfUEVSX1BBR0UgKiBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UKSk7Ci0KLQkJLyogYWx3YXlz IGxlYXZlIG9uZSBzZWdtZW50IGJlZm9yZSB0aGUgd3JhcGFyb3VuZCBwb2ludCAqLwotCQlvZmZz ZXRTdG9wTGltaXQgLT0gKE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFICogU0xSVV9QQUdFU19Q RVJfU0VHTUVOVCk7Ci0KLQkJaWYgKCFwcmV2T2xkZXN0T2Zmc2V0S25vd24gJiYgIWlzX3N0YXJ0 dXApCi0JCQllcmVwb3J0KExPRywKLQkJCQkJKGVycm1zZygiTXVsdGlYYWN0IG1lbWJlciB3cmFw YXJvdW5kIHByb3RlY3Rpb25zIGFyZSBub3cgZW5hYmxlZCIpKSk7Ci0KLQkJZXJlcG9ydChERUJV RzEsCi0JCQkJKGVycm1zZ19pbnRlcm5hbCgiTXVsdGlYYWN0IG1lbWJlciBzdG9wIGxpbWl0IGlz IG5vdyAldSBiYXNlZCBvbiBNdWx0aVhhY3QgJXUiLAotCQkJCQkJCQkgb2Zmc2V0U3RvcExpbWl0 LCBvbGRlc3RNdWx0aVhhY3RJZCkpKTsKLQl9Ci0JZWxzZSBpZiAocHJldk9sZGVzdE9mZnNldEtu b3duKQorCWlmIChwcmV2T2xkZXN0T2Zmc2V0S25vd24pCiAJewogCQkvKgogCQkgKiBJZiB3ZSBm YWlsZWQgdG8gZ2V0IHRoZSBvbGRlc3Qgb2Zmc2V0IHRoaXMgdGltZSwgYnV0IHdlIGhhdmUgYQpA QCAtMjc0NCw2OSArMjcwOSwxOSBAQCBTZXRPZmZzZXRWYWN1dW1MaW1pdChib29sIGlzX3N0YXJ0 dXApCiAJCSAqLwogCQlvbGRlc3RPZmZzZXQgPSBwcmV2T2xkZXN0T2Zmc2V0OwogCQlvbGRlc3RP ZmZzZXRLbm93biA9IHRydWU7Ci0JCW9mZnNldFN0b3BMaW1pdCA9IHByZXZPZmZzZXRTdG9wTGlt aXQ7CiAJfQogCiAJLyogSW5zdGFsbCB0aGUgY29tcHV0ZWQgdmFsdWVzICovCiAJTFdMb2NrQWNx dWlyZShNdWx0aVhhY3RHZW5Mb2NrLCBMV19FWENMVVNJVkUpOwogCU11bHRpWGFjdFN0YXRlLT5v bGRlc3RPZmZzZXQgPSBvbGRlc3RPZmZzZXQ7CiAJTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9mZnNl dEtub3duID0gb2xkZXN0T2Zmc2V0S25vd247Ci0JTXVsdGlYYWN0U3RhdGUtPm9mZnNldFN0b3BM aW1pdCA9IG9mZnNldFN0b3BMaW1pdDsKIAlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdEdlbkxvY2sp OwogCiAJLyoKLQkgKiBEbyB3ZSBuZWVkIGFuIGVtZXJnZW5jeSBhdXRvdmFjdXVtPwlJZiB3ZSdy ZSBub3Qgc3VyZSwgYXNzdW1lIHllcy4KKwkgKiBEbyB3ZSBuZWVkIGF1dG92YWN1dW0/CUlmIHdl J3JlIG5vdCBzdXJlLCBhc3N1bWUgeWVzLgogCSAqLwogCXJldHVybiAhb2xkZXN0T2Zmc2V0S25v d24gfHwKLQkJKG5leHRPZmZzZXQgLSBvbGRlc3RPZmZzZXQgPiBNVUxUSVhBQ1RfTUVNQkVSX1NB RkVfVEhSRVNIT0xEKTsKLX0KLQotLyoKLSAqIFJldHVybiB3aGV0aGVyIGFkZGluZyAiZGlzdGFu Y2UiIHRvICJzdGFydCIgd291bGQgbW92ZSBwYXN0ICJib3VuZGFyeSIuCi0gKgotICogV2UgdXNl IHRoaXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGFkZGl0aW9uIGlzICJ3cmFwcGluZyBhcm91 bmQiIHRoZQotICogYm91bmRhcnkgcG9pbnQsIGhlbmNlIHRoZSBuYW1lLiAgVGhlIHJlYXNvbiB3 ZSBkb24ndCB3YW50IHRvIHVzZSB0aGUgcmVndWxhcgotICogMl4zMS1tb2R1bG8gYXJpdGhtZXRp YyBoZXJlIGlzIHRoYXQgd2Ugd2FudCB0byBiZSBhYmxlIHRvIHVzZSB0aGUgd2hvbGUgb2YKLSAq IHRoZSAyXjMyLTEgc3BhY2UgaGVyZSwgYWxsb3dpbmcgZm9yIG1vcmUgbXVsdGl4YWN0cyB0aGFu IHdvdWxkIGZpdAotICogb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgYm9vbAotTXVsdGlYYWN0T2Zm c2V0V291bGRXcmFwKE11bHRpWGFjdE9mZnNldCBib3VuZGFyeSwgTXVsdGlYYWN0T2Zmc2V0IHN0 YXJ0LAotCQkJCQkJIHVpbnQzMiBkaXN0YW5jZSkKLXsKLQlNdWx0aVhhY3RPZmZzZXQgZmluaXNo OwotCi0JLyoKLQkgKiBOb3RlIHRoYXQgb2Zmc2V0IG51bWJlciAwIGlzIG5vdCB1c2VkIChzZWUg R2V0TXVsdGlYYWN0SWRNZW1iZXJzKSwgc28KLQkgKiBpZiB0aGUgYWRkaXRpb24gd3JhcHMgYXJv dW5kIHRoZSBVSU5UX01BWCBib3VuZGFyeSwgc2tpcCB0aGF0IHZhbHVlLgotCSAqLwotCWZpbmlz aCA9IHN0YXJ0ICsgZGlzdGFuY2U7Ci0JaWYgKGZpbmlzaCA8IHN0YXJ0KQotCQlmaW5pc2grKzsK LQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgKiBXaGVuIHRoZSBib3VuZGFyeSBpcyBudW1lcmljYWxs eSBncmVhdGVyIHRoYW4gdGhlIHN0YXJ0aW5nIHBvaW50LCBhbnkKLQkgKiB2YWx1ZSBudW1lcmlj YWxseSBiZXR3ZWVuIHRoZSB0d28gaXMgbm90IHdyYXBwZWQ6Ci0JICoKLQkgKgk8LS0tLVMtLS0t Qi0tLS0+Ci0JICoJWy0tLSkJCQkgPSBGIHdyYXBwZWQgcGFzdCBCIChhbmQgVUlOVF9NQVgpCi0J ICoJCSBbLS0tKQkJID0gRiBub3Qgd3JhcHBlZAotCSAqCQkJICBbLS0tLV0gPSBGIHdyYXBwZWQg cGFzdCBCCi0JICoKLQkgKiBXaGVuIHRoZSBib3VuZGFyeSBpcyBudW1lcmljYWxseSBsZXNzIHRo YW4gdGhlIHN0YXJ0aW5nIHBvaW50IChpLmUuIHRoZQotCSAqIFVJTlRfTUFYIHdyYXBhcm91bmQg b2NjdXJzIHNvbWV3aGVyZSBpbiBiZXR3ZWVuKSB0aGVuIGFsbCB2YWx1ZXMgaW4KLQkgKiBiZXR3 ZWVuIGFyZSB3cmFwcGVkOgotCSAqCi0JICoJPC0tLS1CLS0tLVMtLS0tPgotCSAqCVstLS0pCQkJ ID0gRiBub3Qgd3JhcHBlZCBwYXN0IEIgKGJ1dCB3cmFwcGVkIHBhc3QgVUlOVF9NQVgpCi0JICoJ CSBbLS0tKQkJID0gRiB3cmFwcGVkIHBhc3QgQiAoYW5kIFVJTlRfTUFYKQotCSAqCQkJICBbLS0t LV0gPSBGIG5vdCB3cmFwcGVkCi0JICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqLwotCWlmIChzdGFydCA8 IGJvdW5kYXJ5KQotCQlyZXR1cm4gZmluaXNoID49IGJvdW5kYXJ5IHx8IGZpbmlzaCA8IHN0YXJ0 OwotCWVsc2UKLQkJcmV0dXJuIGZpbmlzaCA+PSBib3VuZGFyeSAmJiBmaW5pc2ggPCBzdGFydDsK KwkJKG5leHRPZmZzZXQgLSBvbGRlc3RPZmZzZXQgPiBNVUxUSVhBQ1RfTUVNQkVSX0FVVE9WQUNf VEhSRVNIT0xEKTsKIH0KIAogLyoKQEAgLTI4MjUsNyArMjc0MCw2IEBAIGZpbmRfbXVsdGl4YWN0 X3N0YXJ0KE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RPZmZzZXQgKnJlc3VsdCkKIAlpbnQ2 NAkJcGFnZW5vOwogCWludAkJCWVudHJ5bm87CiAJaW50CQkJc2xvdG5vOwotCU11bHRpWGFjdE9m ZnNldCAqb2ZmcHRyOwogCiAJQXNzZXJ0KE11bHRpWGFjdFN0YXRlLT5maW5pc2hlZFN0YXJ0dXAp OwogCkBAIC0yODQzLDkgKzI3NTcsOSBAQCBmaW5kX211bHRpeGFjdF9zdGFydChNdWx0aVhhY3RJ ZCBtdWx0aSwgTXVsdGlYYWN0T2Zmc2V0ICpyZXN1bHQpCiAKIAkvKiBsb2NrIGlzIGFjcXVpcmVk IGJ5IFNpbXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5ICovCiAJc2xvdG5vID0gU2ltcGxlTHJ1UmVh ZFBhZ2VfUmVhZE9ubHkoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8sIG11bHRpKTsKLQlvZmZw dHIgPSAoTXVsdGlYYWN0T2Zmc2V0ICopIE11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVkLT5wYWdl X2J1ZmZlcltzbG90bm9dOwotCW9mZnB0ciArPSBlbnRyeW5vOwotCW9mZnNldCA9ICpvZmZwdHI7 CisKKwlvZmZzZXQgPSBNWE9mZnNldFJlYWQoZW50cnlubywgc2xvdG5vKTsKKwogCUxXTG9ja1Jl bGVhc2UoU2ltcGxlTHJ1R2V0QmFua0xvY2soTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8pKTsK IAogCSpyZXN1bHQgPSBvZmZzZXQ7CkBAIC0yODkzLDczICsyODA3LDYgQEAgR2V0TXVsdGlYYWN0 SW5mbyh1aW50MzIgKm11bHRpeGFjdHMsIE11bHRpWGFjdE9mZnNldCAqbWVtYmVycywKIAlyZXR1 cm4gdHJ1ZTsKIH0KIAotLyoKLSAqIE11bHRpeGFjdCBtZW1iZXJzIGNhbiBiZSByZW1vdmVkIG9u Y2UgdGhlIG11bHRpeGFjdHMgdGhhdCByZWZlciB0byB0aGVtCi0gKiBhcmUgb2xkZXIgdGhhbiBl dmVyeSBkYXRtaW5teGlkLiAgYXV0b3ZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2UgYW5k Ci0gKiB2YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV90YWJsZV9hZ2Ugd29yayB0b2dldGhlciB0byBt YWtlIHN1cmUgd2UgbmV2ZXIgaGF2ZQotICogdG9vIG1hbnkgbXVsdGl4YWN0czsgd2UgaG9wZSB0 aGF0LCBhdCBsZWFzdCB1bmRlciBub3JtYWwgY2lyY3Vtc3RhbmNlcywKLSAqIHRoaXMgd2lsbCBh bHNvIGJlIHN1ZmZpY2llbnQgdG8ga2VlcCB1cyBmcm9tIHVzaW5nIHRvbyBtYW55IG9mZnNldHMu Ci0gKiBIb3dldmVyLCBpZiB0aGUgYXZlcmFnZSBtdWx0aXhhY3QgaGFzIG1hbnkgbWVtYmVycywg d2UgbWlnaHQgZXhoYXVzdCB0aGUKLSAqIG1lbWJlcnMgc3BhY2Ugd2hpbGUgc3RpbGwgdXNpbmcg ZmV3IGVub3VnaCBtZW1iZXJzIHRoYXQgdGhlc2UgbGltaXRzIGZhaWwKLSAqIHRvIHRyaWdnZXIg cmVsbWlubXhpZCBhZHZhbmNlbWVudCBieSBWQUNVVU0uICBBdCB0aGF0IHBvaW50LCB3ZSdkIGhh dmUgbm8KLSAqIGNob2ljZSBidXQgdG8gc3RhcnQgZmFpbGluZyBtdWx0aXhhY3QtY3JlYXRpbmcg b3BlcmF0aW9ucyB3aXRoIGFuIGVycm9yLgotICoKLSAqIFRvIHByZXZlbnQgdGhhdCwgaWYgbW9y ZSB0aGFuIGEgdGhyZXNob2xkIHBvcnRpb24gb2YgdGhlIG1lbWJlcnMgc3BhY2UgaXMKLSAqIHVz ZWQsIHdlIGVmZmVjdGl2ZWx5IHJlZHVjZSBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWF4 X2FnZSBhbmQKLSAqIHRvIGEgdmFsdWUganVzdCBsZXNzIHRoYW4gdGhlIG51bWJlciBvZiBtdWx0 aXhhY3RzIGluIHVzZS4gIFdlIGhvcGUgdGhhdAotICogdGhpcyB3aWxsIHF1aWNrbHkgdHJpZ2dl ciBhdXRvdmFjdXVtaW5nIG9uIHRoZSB0YWJsZSBvciB0YWJsZXMgd2l0aCB0aGUKLSAqIG9sZGVz dCByZWxtaW5teGlkLCB0aHVzIGFsbG93aW5nIGRhdG1pbm14aWQgdmFsdWVzIHRvIGFkdmFuY2Ug YW5kIHJlbW92aW5nCi0gKiBzb21lIG1lbWJlcnMuCi0gKgotICogQXMgdGhlIGZyYWN0aW9uIG9m IHRoZSBtZW1iZXIgc3BhY2UgY3VycmVudGx5IGluIHVzZSBncm93cywgd2UgYmVjb21lCi0gKiBt b3JlIGFnZ3Jlc3NpdmUgaW4gY2xhbXBpbmcgdGhpcyB2YWx1ZS4gIFRoYXQgbm90IG9ubHkgY2F1 c2VzIGF1dG92YWN1dW0KLSAqIHRvIHJhbXAgdXAsIGJ1dCBhbHNvIG1ha2VzIGFueSBtYW51YWwg dmFjdXVtcyB0aGUgdXNlciBpc3N1ZXMgbW9yZQotICogYWdncmVzc2l2ZS4gIFRoaXMgaGFwcGVu cyBiZWNhdXNlIHZhY3V1bV9nZXRfY3V0b2ZmcygpIHdpbGwgY2xhbXAgdGhlCi0gKiBmcmVlemUg dGFibGUgYW5kIHRoZSBtaW5pbXVtIGZyZWV6ZSBhZ2UgY3V0b2ZmcyBiYXNlZCBvbiB0aGUgZWZm ZWN0aXZlCi0gKiBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSB0aGlzIGZ1bmN0 aW9uIHJldHVybnMuICBJbiB0aGUgd29yc3QKLSAqIGNhc2UsIHdlJ2xsIGNsYWltIHRoZSBmcmVl emVfbWF4X2FnZSB0byB6ZXJvLCBhbmQgZXZlcnkgdmFjdXVtIG9mIGFueQotICogdGFibGUgd2ls bCBmcmVlemUgZXZlcnkgbXVsdGl4YWN0LgotICovCi1pbnQKLU11bHRpWGFjdE1lbWJlckZyZWV6 ZVRocmVzaG9sZCh2b2lkKQotewotCU11bHRpWGFjdE9mZnNldCBtZW1iZXJzOwotCXVpbnQzMgkJ bXVsdGl4YWN0czsKLQl1aW50MzIJCXZpY3RpbV9tdWx0aXhhY3RzOwotCWRvdWJsZQkJZnJhY3Rp b247Ci0JaW50CQkJcmVzdWx0OwotCU11bHRpWGFjdElkIG9sZGVzdE11bHRpWGFjdElkOwotCU11 bHRpWGFjdE9mZnNldCBvbGRlc3RPZmZzZXQ7Ci0KLQkvKiBJZiB3ZSBjYW4ndCBkZXRlcm1pbmUg bWVtYmVyIHNwYWNlIHV0aWxpemF0aW9uLCBhc3N1bWUgdGhlIHdvcnN0LiAqLwotCWlmICghR2V0 TXVsdGlYYWN0SW5mbygmbXVsdGl4YWN0cywgJm1lbWJlcnMsICZvbGRlc3RNdWx0aVhhY3RJZCwg Jm9sZGVzdE9mZnNldCkpCi0JCXJldHVybiAwOwotCi0JLyogSWYgbWVtYmVyIHNwYWNlIHV0aWxp emF0aW9uIGlzIGxvdywgbm8gc3BlY2lhbCBhY3Rpb24gaXMgcmVxdWlyZWQuICovCi0JaWYgKG1l bWJlcnMgPD0gTVVMVElYQUNUX01FTUJFUl9TQUZFX1RIUkVTSE9MRCkKLQkJcmV0dXJuIGF1dG92 YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlOwotCi0JLyoKLQkgKiBDb21wdXRlIGEgdGFy Z2V0IGZvciByZWxtaW5teGlkIGFkdmFuY2VtZW50LiAgVGhlIG51bWJlciBvZiBtdWx0aXhhY3Rz Ci0JICogd2UgdHJ5IHRvIGVsaW1pbmF0ZSBmcm9tIHRoZSBzeXN0ZW0gaXMgYmFzZWQgb24gaG93 IGZhciB3ZSBhcmUgcGFzdAotCSAqIE1VTFRJWEFDVF9NRU1CRVJfU0FGRV9USFJFU0hPTEQuCi0J ICovCi0JZnJhY3Rpb24gPSAoZG91YmxlKSAobWVtYmVycyAtIE1VTFRJWEFDVF9NRU1CRVJfU0FG RV9USFJFU0hPTEQpIC8KLQkJKE1VTFRJWEFDVF9NRU1CRVJfREFOR0VSX1RIUkVTSE9MRCAtIE1V TFRJWEFDVF9NRU1CRVJfU0FGRV9USFJFU0hPTEQpOwotCXZpY3RpbV9tdWx0aXhhY3RzID0gbXVs dGl4YWN0cyAqIGZyYWN0aW9uOwotCi0JLyogZnJhY3Rpb24gY291bGQgYmUgPiAxLjAsIGJ1dCBs b3dlc3QgcG9zc2libGUgZnJlZXplIGFnZSBpcyB6ZXJvICovCi0JaWYgKHZpY3RpbV9tdWx0aXhh Y3RzID4gbXVsdGl4YWN0cykKLQkJcmV0dXJuIDA7Ci0JcmVzdWx0ID0gbXVsdGl4YWN0cyAtIHZp Y3RpbV9tdWx0aXhhY3RzOwotCi0JLyoKLQkgKiBDbGFtcCB0byBhdXRvdmFjdXVtX211bHRpeGFj dF9mcmVlemVfbWF4X2FnZSwgc28gdGhhdCB3ZSBuZXZlciBtYWtlCi0JICogYXV0b3ZhY3V1bSBs ZXNzIGFnZ3Jlc3NpdmUgdGhhbiBpdCB3b3VsZCBvdGhlcndpc2UgYmUuCi0JICovCi0JcmV0dXJu IE1pbihyZXN1bHQsIGF1dG92YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlKTsKLX0KLQog dHlwZWRlZiBzdHJ1Y3QgbXh0cnVuY2luZm8KIHsKIAlpbnQ2NAkJZWFybGllc3RFeGlzdGluZ1Bh Z2U7CkBAIC0zMTU5LDcgKzMwMDYsNyBAQCBUcnVuY2F0ZU11bHRpWGFjdChNdWx0aVhhY3RJZCBu ZXdPbGRlc3RNdWx0aSwgT2lkIG5ld09sZGVzdE11bHRpREIpCiAKIAllbG9nKERFQlVHMSwgInBl cmZvcm1pbmcgbXVsdGl4YWN0IHRydW5jYXRpb246ICIKIAkJICJvZmZzZXRzIFsldSwgJXUpLCBv ZmZzZXRzIHNlZ21lbnRzIFslIiBQUkl4NjQgIiwgJSIgUFJJeDY0ICIpLCAiCi0JCSAibWVtYmVy cyBbJXUsICV1KSwgbWVtYmVycyBzZWdtZW50cyBbJSIgUFJJeDY0ICIsICUiIFBSSXg2NCAiKSIs CisJCSAibWVtYmVycyBbJSIgUFJJdTY0ICIsICUiIFBSSXU2NCAiKSwgbWVtYmVycyBzZWdtZW50 cyBbJSIgUFJJeDY0ICIsICUiIFBSSXg2NCAiKSIsCiAJCSBvbGRlc3RNdWx0aSwgbmV3T2xkZXN0 TXVsdGksCiAJCSBNdWx0aVhhY3RJZFRvT2Zmc2V0U2VnbWVudChvbGRlc3RNdWx0aSksCiAJCSBN dWx0aVhhY3RJZFRvT2Zmc2V0U2VnbWVudChuZXdPbGRlc3RNdWx0aSksCkBAIC0zMjkwLDcgKzMx MzcsNyBAQCBNdWx0aVhhY3RJZFByZWNlZGVzT3JFcXVhbHMoTXVsdGlYYWN0SWQgbXVsdGkxLCBN dWx0aVhhY3RJZCBtdWx0aTIpCiBzdGF0aWMgYm9vbAogTXVsdGlYYWN0T2Zmc2V0UHJlY2VkZXMo TXVsdGlYYWN0T2Zmc2V0IG9mZnNldDEsIE11bHRpWGFjdE9mZnNldCBvZmZzZXQyKQogewotCWlu dDMyCQlkaWZmID0gKGludDMyKSAob2Zmc2V0MSAtIG9mZnNldDIpOworCWludDY0CQlkaWZmID0g KGludDY0KSAob2Zmc2V0MSAtIG9mZnNldDIpOwogCiAJcmV0dXJuIChkaWZmIDwgMCk7CiB9CkBA IC0zMzg3LDcgKzMyMzQsNyBAQCBtdWx0aXhhY3RfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29y ZCkKIAogCQllbG9nKERFQlVHMSwgInJlcGxheWluZyBtdWx0aXhhY3QgdHJ1bmNhdGlvbjogIgog CQkJICJvZmZzZXRzIFsldSwgJXUpLCBvZmZzZXRzIHNlZ21lbnRzIFslIiBQUkl4NjQgIiwgJSIg UFJJeDY0ICIpLCAiCi0JCQkgIm1lbWJlcnMgWyV1LCAldSksIG1lbWJlcnMgc2VnbWVudHMgWyUi IFBSSXg2NCAiLCAlIiBQUkl4NjQgIikiLAorCQkJICJtZW1iZXJzIFslIiBQUkl1NjQgIiwgJSIg UFJJdTY0ICIpLCBtZW1iZXJzIHNlZ21lbnRzIFslIiBQUkl4NjQgIiwgJSIgUFJJeDY0ICIpIiwK IAkJCSB4bHJlYy5zdGFydFRydW5jT2ZmLCB4bHJlYy5lbmRUcnVuY09mZiwKIAkJCSBNdWx0aVhh Y3RJZFRvT2Zmc2V0U2VnbWVudCh4bHJlYy5zdGFydFRydW5jT2ZmKSwKIAkJCSBNdWx0aVhhY3RJ ZFRvT2Zmc2V0U2VnbWVudCh4bHJlYy5lbmRUcnVuY09mZiksCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL3hsb2dyZWNvdmVyeS5jCmluZGV4IDNlM2M0ZGEwMWEuLjNiMmIwYTUyMmMgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jCkBAIC04ODUsNyArODg1LDcg QEAgSW5pdFdhbFJlY292ZXJ5KENvbnRyb2xGaWxlRGF0YSAqQ29udHJvbEZpbGUsIGJvb2wgKndh c1NodXRkb3duX3B0ciwKIAkJCQkJCQkgVTY0RnJvbUZ1bGxUcmFuc2FjdGlvbklkKGNoZWNrUG9p bnQubmV4dFhpZCksCiAJCQkJCQkJIGNoZWNrUG9pbnQubmV4dE9pZCkpKTsKIAllcmVwb3J0KERF QlVHMSwKLQkJCShlcnJtc2dfaW50ZXJuYWwoIm5leHQgTXVsdGlYYWN0SWQ6ICV1OyBuZXh0IE11 bHRpWGFjdE9mZnNldDogJXUiLAorCQkJKGVycm1zZ19pbnRlcm5hbCgibmV4dCBNdWx0aVhhY3RJ ZDogJXU7IG5leHQgTXVsdGlYYWN0T2Zmc2V0OiAlIiBQUkl1NjQsCiAJCQkJCQkJIGNoZWNrUG9p bnQubmV4dE11bHRpLCBjaGVja1BvaW50Lm5leHRNdWx0aU9mZnNldCkpKTsKIAllcmVwb3J0KERF QlVHMSwKIAkJCShlcnJtc2dfaW50ZXJuYWwoIm9sZGVzdCB1bmZyb3plbiB0cmFuc2FjdGlvbiBJ RDogJXUsIGluIGRhdGFiYXNlICV1IiwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3ZhY3V1bS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMKaW5kZXggZWQwM2UzYmQ1 MC4uMjU5ZWY2MGJkMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMK KysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMKQEAgLTExNDcsNyArMTE0Nyw3IEBA IHZhY3V1bV9nZXRfY3V0b2ZmcyhSZWxhdGlvbiByZWwsIGNvbnN0IFZhY3V1bVBhcmFtcyBwYXJh bXMsCiAJICogbm9ybWFsbHkgYXV0b3ZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2UsIGJ1 dCBtYXkgYmUgbGVzcyBpZiB3ZSBhcmUKIAkgKiBzaG9ydCBvZiBtdWx0aXhhY3QgbWVtYmVyIHNw YWNlLgogCSAqLwotCWVmZmVjdGl2ZV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2UgPSBNdWx0aVhh Y3RNZW1iZXJGcmVlemVUaHJlc2hvbGQoKTsKKwllZmZlY3RpdmVfbXVsdGl4YWN0X2ZyZWV6ZV9t YXhfYWdlID0gYXV0b3ZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2U7CiAKIAkvKgogCSAq IEFsbW9zdCByZWFkeSB0byBzZXQgZnJlZXplIG91dHB1dCBwYXJhbWV0ZXJzOyBjaGVjayBpZiBP bGRlc3RYbWluIG9yCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1 dW0uYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jCmluZGV4IDUwODRhZjdk ZmIuLjI2Mzg1NDcwYzEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3Zh Y3V1bS5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jCkBAIC0xMTUx LDcgKzExNTEsNyBAQCBkb19zdGFydF93b3JrZXIodm9pZCkKIAogCS8qIEFsc28gZGV0ZXJtaW5l IHRoZSBvbGRlc3QgZGF0bWlubXhpZCB3ZSB3aWxsIGNvbnNpZGVyLiAqLwogCXJlY2VudE11bHRp ID0gUmVhZE5leHRNdWx0aVhhY3RJZCgpOwotCW11bHRpRm9yY2VMaW1pdCA9IHJlY2VudE11bHRp IC0gTXVsdGlYYWN0TWVtYmVyRnJlZXplVGhyZXNob2xkKCk7CisJbXVsdGlGb3JjZUxpbWl0ID0g cmVjZW50TXVsdGkgLSBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZTsKIAlpZiAo bXVsdGlGb3JjZUxpbWl0IDwgRmlyc3RNdWx0aVhhY3RJZCkKIAkJbXVsdGlGb3JjZUxpbWl0IC09 IEZpcnN0TXVsdGlYYWN0SWQ7CiAKQEAgLTE5MzksNyArMTkzOSw3IEBAIGRvX2F1dG92YWN1dW0o dm9pZCkKIAkgKiBub3JtYWxseSBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSwg YnV0IG1heSBiZSBsZXNzIGlmIHdlIGFyZQogCSAqIHNob3J0IG9mIG11bHRpeGFjdCBtZW1iZXIg c3BhY2UuCiAJICovCi0JZWZmZWN0aXZlX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSA9IE11bHRp WGFjdE1lbWJlckZyZWV6ZVRocmVzaG9sZCgpOworCWVmZmVjdGl2ZV9tdWx0aXhhY3RfZnJlZXpl X21heF9hZ2UgPSBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZTsKIAogCS8qCiAJ ICogRmluZCB0aGUgcGdfZGF0YWJhc2UgZW50cnkgYW5kIHNlbGVjdCB0aGUgZGVmYXVsdCBmcmVl emUgYWdlcy4gV2UgdXNlCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2NvbnRyb2xkYXRhL3BnX2Nv bnRyb2xkYXRhLmMgYi9zcmMvYmluL3BnX2NvbnRyb2xkYXRhL3BnX2NvbnRyb2xkYXRhLmMKaW5k ZXggMTBkZTA1OGNlOS4uNTI5NTEwOGFkZSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19jb250cm9s ZGF0YS9wZ19jb250cm9sZGF0YS5jCisrKyBiL3NyYy9iaW4vcGdfY29udHJvbGRhdGEvcGdfY29u dHJvbGRhdGEuYwpAQCAtMjY0LDcgKzI2NCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKIAkJICAgQ29udHJvbEZpbGUtPmNoZWNrUG9pbnRDb3B5Lm5leHRPaWQpOwogCXByaW50Zihf KCJMYXRlc3QgY2hlY2twb2ludCdzIE5leHRNdWx0aVhhY3RJZDogICV1XG4iKSwKIAkJICAgQ29u dHJvbEZpbGUtPmNoZWNrUG9pbnRDb3B5Lm5leHRNdWx0aSk7Ci0JcHJpbnRmKF8oIkxhdGVzdCBj aGVja3BvaW50J3MgTmV4dE11bHRpT2Zmc2V0OiAgJXVcbiIpLAorCXByaW50ZihfKCJMYXRlc3Qg Y2hlY2twb2ludCdzIE5leHRNdWx0aU9mZnNldDogICUiIFBSSXU2NCAiXG4iKSwKIAkJICAgQ29u dHJvbEZpbGUtPmNoZWNrUG9pbnRDb3B5Lm5leHRNdWx0aU9mZnNldCk7CiAJcHJpbnRmKF8oIkxh dGVzdCBjaGVja3BvaW50J3Mgb2xkZXN0WElEOiAgICAgICAgJXVcbiIpLAogCQkgICBDb250cm9s RmlsZS0+Y2hlY2tQb2ludENvcHkub2xkZXN0WGlkKTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdf cmVzZXR3YWwvcGdfcmVzZXR3YWwuYyBiL3NyYy9iaW4vcGdfcmVzZXR3YWwvcGdfcmVzZXR3YWwu YwppbmRleCBhODlkNzJmYzVjLi40ZTVlZWNlZDg5IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3Jl c2V0d2FsL3BnX3Jlc2V0d2FsLmMKKysrIGIvc3JjL2Jpbi9wZ19yZXNldHdhbC9wZ19yZXNldHdh bC5jCkBAIC0yNjcsNyArMjY3LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCiAJ CQljYXNlICdPJzoKIAkJCQllcnJubyA9IDA7Ci0JCQkJc2V0X214b2ZmID0gc3RydG91bChvcHRh cmcsICZlbmRwdHIsIDApOworCQkJCXNldF9teG9mZiA9IHN0cnRvdTY0KG9wdGFyZywgJmVuZHB0 ciwgMCk7CiAJCQkJaWYgKGVuZHB0ciA9PSBvcHRhcmcgfHwgKmVuZHB0ciAhPSAnXDAnIHx8IGVy cm5vICE9IDApCiAJCQkJewogCQkJCQlwZ19sb2dfZXJyb3IoImludmFsaWQgYXJndW1lbnQgZm9y IG9wdGlvbiAlcyIsICItTyIpOwpAQCAtNzQzLDcgKzc0Myw3IEBAIFByaW50Q29udHJvbFZhbHVl cyhib29sIGd1ZXNzZWQpCiAJCSAgIENvbnRyb2xGaWxlLmNoZWNrUG9pbnRDb3B5Lm5leHRPaWQp OwogCXByaW50ZihfKCJMYXRlc3QgY2hlY2twb2ludCdzIE5leHRNdWx0aVhhY3RJZDogICV1XG4i KSwKIAkJICAgQ29udHJvbEZpbGUuY2hlY2tQb2ludENvcHkubmV4dE11bHRpKTsKLQlwcmludGYo XygiTGF0ZXN0IGNoZWNrcG9pbnQncyBOZXh0TXVsdGlPZmZzZXQ6ICAldVxuIiksCisJcHJpbnRm KF8oIkxhdGVzdCBjaGVja3BvaW50J3MgTmV4dE11bHRpT2Zmc2V0OiAgJSIgUFJJdTY0ICJcbiIp LAogCQkgICBDb250cm9sRmlsZS5jaGVja1BvaW50Q29weS5uZXh0TXVsdGlPZmZzZXQpOwogCXBy aW50ZihfKCJMYXRlc3QgY2hlY2twb2ludCdzIG9sZGVzdFhJRDogICAgICAgICV1XG4iKSwKIAkJ ICAgQ29udHJvbEZpbGUuY2hlY2tQb2ludENvcHkub2xkZXN0WGlkKTsKQEAgLTgxNyw3ICs4MTcs NyBAQCBQcmludE5ld0NvbnRyb2xWYWx1ZXModm9pZCkKIAogCWlmIChzZXRfbXhvZmYgIT0gLTEp CiAJewotCQlwcmludGYoXygiTmV4dE11bHRpT2Zmc2V0OiAgICAgICAgICAgICAgICAgICAgICAl dVxuIiksCisJCXByaW50ZihfKCJOZXh0TXVsdGlPZmZzZXQ6ICAgICAgICAgICAgICAgICAgICAg ICUiIFBSSXU2NCAiXG4iKSwKIAkJCSAgIENvbnRyb2xGaWxlLmNoZWNrUG9pbnRDb3B5Lm5leHRN dWx0aU9mZnNldCk7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3Jlc2V0d2FsL3QvMDAx X2Jhc2ljLnBsIGIvc3JjL2Jpbi9wZ19yZXNldHdhbC90LzAwMV9iYXNpYy5wbAppbmRleCBkNmJi YmQwY2VkLi4xNmI1YTYyMzkwIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3Jlc2V0d2FsL3QvMDAx X2Jhc2ljLnBsCisrKyBiL3NyYy9iaW4vcGdfcmVzZXR3YWwvdC8wMDFfYmFzaWMucGwKQEAgLTIx Myw3ICsyMTMsNyBAQCBwdXNoIEBjbWQsCiAgIHNwcmludGYoIiVkLCVkIiwgaGV4KCRmaWxlc1sw XSkgPT0gMCA/IDMgOiBoZXgoJGZpbGVzWzBdKSwgaGV4KCRmaWxlc1stMV0pKTsKIAogQGZpbGVz ID0gZ2V0X3NscnVfZmlsZXMoJ3BnX211bHRpeGFjdC9vZmZzZXRzJyk7Ci0kbXVsdCA9IDMyICog JGJsY2tzeiAvIDQ7CiskbXVsdCA9IDMyICogKCRibGNrc3ogLSA4KSAvIDQ7CiAjIC0tbXVsdGl4 YWN0LWlkcyBhcmd1bWVudCBpcyAibmV3LG9sZCIKIHB1c2ggQGNtZCwKICAgJy0tbXVsdGl4YWN0 LWlkcycgPT4gc3ByaW50ZigiJWQsJWQiLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNz L211bHRpeGFjdC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL211bHRpeGFjdC5oCmluZGV4IDgyZTRi YjkwZGQuLjE2YTA3NzIzMDggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhh Y3QuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0LmgKQEAgLTI4LDcgKzI4LDcg QEAKIAogI2RlZmluZSBNdWx0aVhhY3RJZElzVmFsaWQobXVsdGkpICgobXVsdGkpICE9IEludmFs aWRNdWx0aVhhY3RJZCkKIAotI2RlZmluZSBNYXhNdWx0aVhhY3RPZmZzZXQJKChNdWx0aVhhY3RP ZmZzZXQpIDB4RkZGRkZGRkYpCisjZGVmaW5lIE1heE11bHRpWGFjdE9mZnNldAlVSU5UNjRDT05T VCgweEZGRkZGRkZGRkZGRkZGRkYpCiAKIC8qCiAgKiBQb3NzaWJsZSBtdWx0aXhhY3QgbG9jayBt b2RlcyAoInN0YXR1cyIpLiAgVGhlIGZpcnN0IGZvdXIgbW9kZXMgYXJlIGZvcgpAQCAtMTQ3LDcg KzE0Nyw2IEBAIGV4dGVybiB2b2lkIE11bHRpWGFjdFNldE5leHRNWGFjdChNdWx0aVhhY3RJZCBu ZXh0TXVsdGksCiBleHRlcm4gdm9pZCBNdWx0aVhhY3RBZHZhbmNlTmV4dE1YYWN0KE11bHRpWGFj dElkIG1pbk11bHRpLAogCQkJCQkJCQkJICBNdWx0aVhhY3RPZmZzZXQgbWluTXVsdGlPZmZzZXQp OwogZXh0ZXJuIHZvaWQgTXVsdGlYYWN0QWR2YW5jZU9sZGVzdChNdWx0aVhhY3RJZCBvbGRlc3RN dWx0aSwgT2lkIG9sZGVzdE11bHRpREIpOwotZXh0ZXJuIGludAlNdWx0aVhhY3RNZW1iZXJGcmVl emVUaHJlc2hvbGQodm9pZCk7CiAKIGV4dGVybiB2b2lkIG11bHRpeGFjdF90d29waGFzZV9yZWNv dmVyKEZ1bGxUcmFuc2FjdGlvbklkIGZ4aWQsIHVpbnQxNiBpbmZvLAogCQkJCQkJCQkJICAgdm9p ZCAqcmVjZGF0YSwgdWludDMyIGxlbik7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jLmggYi9z cmMvaW5jbHVkZS9jLmgKaW5kZXggOWFiNWU2MTc5OS4uN2FiOWU2OGFmNiAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvYy5oCisrKyBiL3NyYy9pbmNsdWRlL2MuaApAQCAtNjY2LDcgKzY2Niw3IEBA IHR5cGVkZWYgdWludDMyIFN1YlRyYW5zYWN0aW9uSWQ7CiAvKiBNdWx0aVhhY3RJZCBtdXN0IGJl IGVxdWl2YWxlbnQgdG8gVHJhbnNhY3Rpb25JZCwgdG8gZml0IGluIHRfeG1heCAqLwogdHlwZWRl ZiBUcmFuc2FjdGlvbklkIE11bHRpWGFjdElkOwogCi10eXBlZGVmIHVpbnQzMiBNdWx0aVhhY3RP ZmZzZXQ7Cit0eXBlZGVmIHVpbnQ2NCBNdWx0aVhhY3RPZmZzZXQ7CiAKIHR5cGVkZWYgdWludDMy IENvbW1hbmRJZDsKIAotLSAKMi41MS4wCgo= --00000000000012f0e906425a28f6 Content-Type: text/plain; charset="US-ASCII"; name="v19-0004-TEST-bump-catversion.patch.txt" Content-Disposition: attachment; filename="v19-0004-TEST-bump-catversion.patch.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhczu5zz3 RnJvbSA1ZTAyYjc3NmExNzgzY2RjOWEzOWZhNjFjZGI2M2U1Mzg4MmM1MjMyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+CkRhdGU6 IEZyaSwgMjQgT2N0IDIwMjUgMTE6NDc6NTAgKzAzMDAKU3ViamVjdDogW1BBVENIIHYxOSA0LzVd IFRFU1Q6IGJ1bXAgY2F0dmVyc2lvbgoKVG8gYXZvaWQgY29uc3RhbnQgQ0YtYm90IGNvbXBsYWlu cywgbWFrZSBjYXR2ZXJzaW9uIGJ1bXAgaW4gYSBzZXBhcmF0ZQpjb21taXQuCgpOT1RFOiBrZWVw IGl0IGluIHN5bmMgd2l0aCBNVUxUSVhBQ1RPRkZTRVRfRk9STUFUQ0hBTkdFX0NBVF9WRVIKLS0t CiBzcmMvaW5jbHVkZS9jYXRhbG9nL2NhdHZlcnNpb24uaCB8IDIgKy0KIDEgZmlsZSBjaGFuZ2Vk LCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2NhdGFsb2cvY2F0dmVyc2lvbi5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9jYXR2ZXJzaW9uLmgK aW5kZXggMWIwYjE2YTM0My4uNmExM2ZhM2NkYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0 YWxvZy9jYXR2ZXJzaW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9jYXR2ZXJzaW9uLmgK QEAgLTU3LDYgKzU3LDYgQEAKICAqLwogCiAvKgkJCQkJCQl5eXl5bW1kZE4gKi8KLSNkZWZpbmUg Q0FUQUxPR19WRVJTSU9OX05PCTIwMjUxMDIyMQorI2RlZmluZSBDQVRBTE9HX1ZFUlNJT05fTk8J OTk5OTk5OTk5CiAKICNlbmRpZgotLSAKMi41MS4wCgo= --00000000000012f0e906425a28f6 Content-Type: application/octet-stream; name="v19-0002-Add-pg_upgarde-for-64-bit-multixact-offsets.patch" Content-Disposition: attachment; filename="v19-0002-Add-pg_upgarde-for-64-bit-multixact-offsets.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhczu5zq1 RnJvbSA4ZDQxYTNkZGMwY2M1NjgxYzhiYmYzZmRiNWExZTIyZGQ5YTE2NjA0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+CkRhdGU6 IEZyaSwgMjQgT2N0IDIwMjUgMTA6NTg6MzcgKzAzMDAKU3ViamVjdDogW1BBVENIIHYxOSAyLzVd IEFkZCBwZ191cGdhcmRlIGZvciA2NCBiaXQgbXVsdGl4YWN0IG9mZnNldHMKCkF1dGhvcjogTWF4 aW0gT3Jsb3YgPG9ybG92bWdAZ21haWwuY29tPgpBdXRob3I6IEhlaWtraSBMaW5uYWthbmdhcyA8 aGxpbm5ha2FAaWtpLmZpPgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFj dC5jIHwgIDM1ICstLQogc3JjL2Jpbi9wZ191cGdyYWRlL01ha2VmaWxlICAgICAgICAgICAgfCAg IDMgKwogc3JjL2Jpbi9wZ191cGdyYWRlL21lc29uLmJ1aWxkICAgICAgICAgfCAgIDMgKwogc3Jj L2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9uZXcuYyAgICAgfCAyNTMgKysrKysrKysrKysrKysr KysrKysrCiBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X25ldy5oICAgICB8ICAzMSArKysK IHNyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3Rfb2xkLmMgICAgIHwgMjk2ICsrKysrKysrKysr KysrKysrKysrKysrKysKIHNyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3Rfb2xkLmggICAgIHwg IDMxICsrKwogc3JjL2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3JhZGUuYyAgICAgICAgfCAxMDggKysr KysrKystCiBzcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5oICAgICAgICB8ICAgNSArCiBz cmMvYmluL3BnX3VwZ3JhZGUvc2xydV9pby5jICAgICAgICAgICB8IDI0MCArKysrKysrKysrKysr KysrKysrKwogc3JjL2Jpbi9wZ191cGdyYWRlL3NscnVfaW8uaCAgICAgICAgICAgfCAgMzAgKysr CiAxMSBmaWxlcyBjaGFuZ2VkLCAxMDAzIGluc2VydGlvbnMoKyksIDMyIGRlbGV0aW9ucygtKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3RfbmV3LmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X25ldy5oCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9vbGQuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3Rfb2xkLmgKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvYmluL3BnX3VwZ3JhZGUvc2xydV9pby5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL2Jpbi9wZ191cGdyYWRlL3NscnVfaW8uaAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v bXVsdGl4YWN0LmMKaW5kZXggZTc4NjE2MTRiZS4uMmQ0NGM3ODFmOSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMKQEAgLTEyNzYsNyArMTI3Niw2IEBAIEdldE11bHRpWGFj dElkTWVtYmVycyhNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0TWVtYmVyICoqbWVtYmVycywK IAlpbnQJCQlzbG90bm87CiAJTXVsdGlYYWN0T2Zmc2V0IG9mZnNldDsKIAlpbnQJCQlsZW5ndGg7 Ci0JaW50CQkJdHJ1ZWxlbmd0aDsKIAlNdWx0aVhhY3RJZCBvbGRlc3RNWGFjdDsKIAlNdWx0aVhh Y3RJZCBuZXh0TVhhY3Q7CiAJTXVsdGlYYWN0SWQgdG1wTVhhY3Q7CkBAIC0xMzc1LDE1ICsxMzc0 LDYgQEAgR2V0TXVsdGlYYWN0SWRNZW1iZXJzKE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RN ZW1iZXIgKiptZW1iZXJzLAogCSAqIHdlIGhhdmUganVzdCBmb3IgdGhpczsgdGhlIHByb2Nlc3Mg aW4gY2hhcmdlIHdpbGwgc2lnbmFsIHRoZSBDViBhcyBzb29uCiAJICogYXMgaXQgaGFzIGZpbmlz aGVkIHdyaXRpbmcgdGhlIG11bHRpeGFjdCBvZmZzZXQuCiAJICoKLQkgKiAzLiBCZWNhdXNlIEdl dE5ld011bHRpWGFjdElkIGluY3JlbWVudHMgb2Zmc2V0IHplcm8gdG8gb2Zmc2V0IG9uZSB0bwot CSAqIGhhbmRsZSBjYXNlICMyLCB0aGVyZSBpcyBhbiBhbWJpZ3VpdHkgbmVhciB0aGUgcG9pbnQg b2Ygb2Zmc2V0Ci0JICogd3JhcGFyb3VuZC4gIElmIHdlIHNlZSBuZXh0IG11bHRpeGFjdCdzIG9m ZnNldCBpcyBvbmUsIGlzIHRoYXQgb3VyCi0JICogbXVsdGl4YWN0J3MgYWN0dWFsIGVuZHBvaW50 LCBvciBkaWQgaXQgZW5kIGF0IHplcm8gd2l0aCBhIHN1YnNlcXVlbnQKLQkgKiBpbmNyZW1lbnQ/ ICBXZSBoYW5kbGUgdGhpcyB1c2luZyB0aGUga25vd2xlZGdlIHRoYXQgaWYgdGhlIHplcm8ndGgK LQkgKiBtZW1iZXIgc2xvdCB3YXNuJ3QgZmlsbGVkLCBpdCdsbCBjb250YWluIHplcm8sIGFuZCB6 ZXJvIGlzbid0IGEgdmFsaWQKLQkgKiB0cmFuc2FjdGlvbiBJRCBzbyBpdCBjYW4ndCBiZSBhIG11 bHRpeGFjdCBtZW1iZXIuICBUaGVyZWZvcmUsIGlmIHdlCi0JICogcmVhZCBhIHplcm8gZnJvbSB0 aGUgbWVtYmVycyBhcnJheSwganVzdCBpZ25vcmUgaXQuCi0JICoKIAkgKiBUaGlzIGlzIGFsbCBw cmV0dHkgbWVzc3ksIGJ1dCB0aGUgbWVzcyBvY2N1cnMgb25seSBpbiBpbmZyZXF1ZW50IGNvcm5l cgogCSAqIGNhc2VzLCBzbyBpdCBzZWVtcyBiZXR0ZXIgdGhhbiBob2xkaW5nIHRoZSBNdWx0aVhh Y3RHZW5Mb2NrIGZvciBhIGxvbmcKIAkgKiB0aW1lIG9uIGV2ZXJ5IG11bHRpeGFjdCBjcmVhdGlv bi4KQEAgLTE0NjcsNiArMTQ1Nyw5IEBAIHJldHJ5OgogCUxXTG9ja1JlbGVhc2UobG9jayk7CiAJ bG9jayA9IE5VTEw7CiAKKwkvKiBBIG11bHRpeGlkIHdpdGggemVybyBtZW1iZXJzIHNob3VsZCBu b3QgaGFwcGVuICovCisJQXNzZXJ0KGxlbmd0aCA+IDApOworCiAJLyoKIAkgKiBJZiB3ZSBzbGVw dCBhYm92ZSwgY2xlYW4gdXAgc3RhdGU7IGl0J3Mgbm8gbG9uZ2VyIG5lZWRlZC4KIAkgKi8KQEAg LTE0NzUsNyArMTQ2OCw2IEBAIHJldHJ5OgogCiAJcHRyID0gKE11bHRpWGFjdE1lbWJlciAqKSBw YWxsb2MobGVuZ3RoICogc2l6ZW9mKE11bHRpWGFjdE1lbWJlcikpOwogCi0JdHJ1ZWxlbmd0aCA9 IDA7CiAJcHJldl9wYWdlbm8gPSAtMTsKIAlmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsr LCBvZmZzZXQrKykKIAl7CkBAIC0xNTEzLDM2ICsxNTA1LDI3IEBAIHJldHJ5OgogCQl4YWN0cHRy ID0gKFRyYW5zYWN0aW9uSWQgKikKIAkJCShNdWx0aVhhY3RNZW1iZXJDdGwtPnNoYXJlZC0+cGFn ZV9idWZmZXJbc2xvdG5vXSArIG1lbWJlcm9mZik7CiAKLQkJaWYgKCFUcmFuc2FjdGlvbklkSXNW YWxpZCgqeGFjdHB0cikpCi0JCXsKLQkJCS8qIENvcm5lciBjYXNlIDM6IHdlIG11c3QgYmUgbG9v a2luZyBhdCB1bnVzZWQgc2xvdCB6ZXJvICovCi0JCQlBc3NlcnQob2Zmc2V0ID09IDApOwotCQkJ Y29udGludWU7Ci0JCX0KKwkJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKCp4YWN0cHRyKSk7 CiAKIAkJZmxhZ3NvZmYgPSBNWE9mZnNldFRvRmxhZ3NPZmZzZXQob2Zmc2V0KTsKIAkJYnNoaWZ0 ID0gTVhPZmZzZXRUb0ZsYWdzQml0U2hpZnQob2Zmc2V0KTsKIAkJZmxhZ3NwdHIgPSAodWludDMy ICopIChNdWx0aVhhY3RNZW1iZXJDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSArIGZs YWdzb2ZmKTsKIAotCQlwdHJbdHJ1ZWxlbmd0aF0ueGlkID0gKnhhY3RwdHI7Ci0JCXB0clt0cnVl bGVuZ3RoXS5zdGF0dXMgPSAoKmZsYWdzcHRyID4+IGJzaGlmdCkgJiBNWEFDVF9NRU1CRVJfWEFD VF9CSVRNQVNLOwotCQl0cnVlbGVuZ3RoKys7CisJCXB0cltpXS54aWQgPSAqeGFjdHB0cjsKKwkJ cHRyW2ldLnN0YXR1cyA9ICgqZmxhZ3NwdHIgPj4gYnNoaWZ0KSAmIE1YQUNUX01FTUJFUl9YQUNU X0JJVE1BU0s7CiAJfQogCiAJTFdMb2NrUmVsZWFzZShsb2NrKTsKIAotCS8qIEEgbXVsdGl4aWQg d2l0aCB6ZXJvIG1lbWJlcnMgc2hvdWxkIG5vdCBoYXBwZW4gKi8KLQlBc3NlcnQodHJ1ZWxlbmd0 aCA+IDApOwotCiAJLyoKIAkgKiBDb3B5IHRoZSByZXN1bHQgaW50byB0aGUgbG9jYWwgY2FjaGUu CiAJICovCi0JbVhhY3RDYWNoZVB1dChtdWx0aSwgdHJ1ZWxlbmd0aCwgcHRyKTsKKwltWGFjdENh Y2hlUHV0KG11bHRpLCBsZW5ndGgsIHB0cik7CiAKIAlkZWJ1Z19lbG9nMyhERUJVRzIsICJHZXRN ZW1iZXJzOiBubyBjYWNoZSBmb3IgJXMiLAotCQkJCW14aWRfdG9fc3RyaW5nKG11bHRpLCB0cnVl bGVuZ3RoLCBwdHIpKTsKKwkJCQlteGlkX3RvX3N0cmluZyhtdWx0aSwgbGVuZ3RoLCBwdHIpKTsK IAkqbWVtYmVycyA9IHB0cjsKLQlyZXR1cm4gdHJ1ZWxlbmd0aDsKKwlyZXR1cm4gbGVuZ3RoOwog fQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ191cGdyYWRlL01ha2VmaWxlIGIvc3JjL2Jp bi9wZ191cGdyYWRlL01ha2VmaWxlCmluZGV4IDY5ZmNmNTkzY2EuLjQyOTk1ZDUzYjAgMTAwNjQ0 Ci0tLSBhL3NyYy9iaW4vcGdfdXBncmFkZS9NYWtlZmlsZQorKysgYi9zcmMvYmluL3BnX3VwZ3Jh ZGUvTWFrZWZpbGUKQEAgLTE4LDExICsxOCwxNCBAQCBPQkpTID0gXAogCWZpbGUubyBcCiAJZnVu Y3Rpb24ubyBcCiAJaW5mby5vIFwKKwltdWx0aXhhY3RfbmV3Lm8gXAorCW11bHRpeGFjdF9vbGQu byBcCiAJb3B0aW9uLm8gXAogCXBhcmFsbGVsLm8gXAogCXBnX3VwZ3JhZGUubyBcCiAJcmVsZmls ZW51bWJlci5vIFwKIAlzZXJ2ZXIubyBcCisJc2xydV9pby5vIFwKIAl0YWJsZXNwYWNlLm8gXAog CXRhc2subyBcCiAJdXRpbC5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS9tZXNv bi5idWlsZCBiL3NyYy9iaW4vcGdfdXBncmFkZS9tZXNvbi5idWlsZAppbmRleCBhYzk5MmYwZDE0 Li4zZTQ2YzQ1MTJjIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3VwZ3JhZGUvbWVzb24uYnVpbGQK KysrIGIvc3JjL2Jpbi9wZ191cGdyYWRlL21lc29uLmJ1aWxkCkBAIC04LDExICs4LDE0IEBAIHBn X3VwZ3JhZGVfc291cmNlcyA9IGZpbGVzKAogICAnZmlsZS5jJywKICAgJ2Z1bmN0aW9uLmMnLAog ICAnaW5mby5jJywKKyAgJ211bHRpeGFjdF9uZXcuYycsCisgICdtdWx0aXhhY3Rfb2xkLmMnLAog ICAnb3B0aW9uLmMnLAogICAncGFyYWxsZWwuYycsCiAgICdwZ191cGdyYWRlLmMnLAogICAncmVs ZmlsZW51bWJlci5jJywKICAgJ3NlcnZlci5jJywKKyAgJ3NscnVfaW8uYycsCiAgICd0YWJsZXNw YWNlLmMnLAogICAndGFzay5jJywKICAgJ3V0aWwuYycsCmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X3VwZ3JhZGUvbXVsdGl4YWN0X25ldy5jIGIvc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9u ZXcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5kN2E1OGE3NWRlCi0t LSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9uZXcuYwpAQCAt MCwwICsxLDI1MyBAQAorLyoKKyAqIG11bHRpeGFjdF9uZXcuYworICoKKyAqIFJld3JpdGUgcHJl LXYxOSBtdWx0aXhhY3RzIHRvIG5ldyBmb3JtYXQgd2l0aCA2NC1iaXQgTXVsdGlYYWN0T2Zmc2V0 cworICoKKyAqIENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1l bnQgR3JvdXAKKyAqIHNyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3RfbmV3LmMKKyAqLworCisj aW5jbHVkZSAibXVsdGl4YWN0X25ldy5oIgorCisvKgorICogTk9URTogQmVsb3cgYXJlIGEgYnVu Y2ggb2YgZGVmaW5pdGlvbnMgYW5kIHNpbXBsZSBpbmxpbmUgZnVuY3Rpb25zIHRoYXQgYXJlCisg KiBjb3B5LXBhc3RlZCBmcm9tIG11bHRpeGFjdC5jCisgKi8KK3R5cGVkZWYgaW50MzIgU2hvcnRN dWx0aVhhY3RPZmZzZXQ7CisKKy8qIFdlIG5lZWQgZm91ciBieXRlcyBwZXIgb2Zmc2V0LCA4IGJ5 dGVzIGZvciB0aGUgYmFzZSAqLworI2RlZmluZSBNVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRQkJ XAorCSgoQkxDS1NaIC0gc2l6ZW9mKE11bHRpWGFjdE9mZnNldCkpIC8gc2l6ZW9mKFNob3J0TXVs dGlYYWN0T2Zmc2V0KSkKKworc3RhdGljIGlubGluZSBpbnQ2NAorTXVsdGlYYWN0SWRUb09mZnNl dFBhZ2UoTXVsdGlYYWN0SWQgbXVsdGkpCit7CisJcmV0dXJuIG11bHRpIC8gTVVMVElYQUNUX09G RlNFVFNfUEVSX1BBR0U7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitNdWx0aVhhY3RJZFRvT2Zm c2V0RW50cnkoTXVsdGlYYWN0SWQgbXVsdGkpCit7CisJcmV0dXJuIG11bHRpICUgTVVMVElYQUNU X09GRlNFVFNfUEVSX1BBR0U7Cit9CisKKy8qIFdlIG5lZWQgZWlnaHQgYml0cyBwZXIgeGFjdCwg c28gb25lIHhhY3QgZml0cyBpbiBhIGJ5dGUgKi8KKyNkZWZpbmUgTVhBQ1RfTUVNQkVSX0JJVFNf UEVSX1hBQ1QJCQk4CisjZGVmaW5lIE1YQUNUX01FTUJFUl9GTEFHU19QRVJfQllURQkJCTEKKyNk ZWZpbmUgTVhBQ1RfTUVNQkVSX1hBQ1RfQklUTUFTSwkoKDEgPDwgTVhBQ1RfTUVNQkVSX0JJVFNf UEVSX1hBQ1QpIC0gMSkKKworLyogaG93IG1hbnkgZnVsbCBieXRlcyBvZiBmbGFncyBhcmUgdGhl cmUgaW4gYSBncm91cD8gKi8KKyNkZWZpbmUgTVVMVElYQUNUX0ZMQUdCWVRFU19QRVJfR1JPVVAJ CTQKKyNkZWZpbmUgTVVMVElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQCVwKKwkoTVVMVElY QUNUX0ZMQUdCWVRFU19QRVJfR1JPVVAgKiBNWEFDVF9NRU1CRVJfRkxBR1NfUEVSX0JZVEUpCisv KiBzaXplIGluIGJ5dGVzIG9mIGEgY29tcGxldGUgZ3JvdXAgKi8KKyNkZWZpbmUgTVVMVElYQUNU X01FTUJFUkdST1VQX1NJWkUgXAorCShzaXplb2YoVHJhbnNhY3Rpb25JZCkgKiBNVUxUSVhBQ1Rf TUVNQkVSU19QRVJfTUVNQkVSR1JPVVAgKyBNVUxUSVhBQ1RfRkxBR0JZVEVTX1BFUl9HUk9VUCkK KyNkZWZpbmUgTVVMVElYQUNUX01FTUJFUkdST1VQU19QRVJfUEFHRSAoQkxDS1NaIC8gTVVMVElY QUNUX01FTUJFUkdST1VQX1NJWkUpCisjZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdF CVwKKwkoTVVMVElYQUNUX01FTUJFUkdST1VQU19QRVJfUEFHRSAqIE1VTFRJWEFDVF9NRU1CRVJT X1BFUl9NRU1CRVJHUk9VUCkKKworLyoKKyAqIEJlY2F1c2UgdGhlIG51bWJlciBvZiBpdGVtcyBw ZXIgcGFnZSBpcyBub3QgYSBkaXZpc29yIG9mIHRoZSBsYXN0IGl0ZW0KKyAqIG51bWJlciAobWVt YmVyIDB4RkZGRkZGRkYpLCB0aGUgbGFzdCBzZWdtZW50IGRvZXMgbm90IHVzZSB0aGUgbWF4aW11 bSBudW1iZXIKKyAqIG9mIHBhZ2VzLCBhbmQgbW9yZW92ZXIgdGhlIGxhc3QgdXNlZCBwYWdlIHRo ZXJlaW4gZG9lcyBub3QgdXNlIHRoZSBzYW1lCisgKiBudW1iZXIgb2YgaXRlbXMgYXMgcHJldmlv dXMgcGFnZXMuICAoQW5vdGhlciB3YXkgdG8gc2F5IGl0IGlzIHRoYXQgdGhlCisgKiAweEZGRkZG RkZGIG1lbWJlciBpcyBzb21ld2hlcmUgaW4gdGhlIG1pZGRsZSBvZiB0aGUgbGFzdCBwYWdlLCBz byB0aGUgcGFnZQorICogaGFzIHNvbWUgZW1wdHkgc3BhY2UgYWZ0ZXIgdGhhdCBpdGVtLikKKyAq CisgKiBUaGlzIGNvbnN0YW50IGlzIHRoZSBudW1iZXIgb2YgbWVtYmVycyBpbiB0aGUgbGFzdCBw YWdlIG9mIHRoZSBsYXN0IHNlZ21lbnQuCisgKi8KKyNkZWZpbmUgTUFYX01FTUJFUlNfSU5fTEFT VF9NRU1CRVJTX1BBR0UgXAorCQkoKHVpbnQzMikgKCgweEZGRkZGRkZGICUgTVVMVElYQUNUX01F TUJFUlNfUEVSX1BBR0UpICsgMSkpCisKKy8qIHBhZ2UgaW4gd2hpY2ggYSBtZW1iZXIgaXMgdG8g YmUgZm91bmQgKi8KK3N0YXRpYyBpbmxpbmUgaW50NjQKK01YT2Zmc2V0VG9NZW1iZXJQYWdlKE11 bHRpWGFjdE9mZnNldCBvZmZzZXQpCit7CisJcmV0dXJuIG9mZnNldCAvIE1VTFRJWEFDVF9NRU1C RVJTX1BFUl9QQUdFOworfQorCisvKiBMb2NhdGlvbiAoYnl0ZSBvZmZzZXQgd2l0aGluIHBhZ2Up IG9mIGZsYWcgd29yZCBmb3IgYSBnaXZlbiBtZW1iZXIgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitN WE9mZnNldFRvRmxhZ3NPZmZzZXQoTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCkKK3sKKwlNdWx0aVhh Y3RPZmZzZXQgZ3JvdXAgPSBvZmZzZXQgLyBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVSR1JP VVA7CisJaW50CQkJZ3JvdXBvbnBnID0gZ3JvdXAgJSBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBTX1BF Ul9QQUdFOworCWludAkJCWJ5dGVvZmYgPSBncm91cG9ucGcgKiBNVUxUSVhBQ1RfTUVNQkVSR1JP VVBfU0laRTsKKworCXJldHVybiBieXRlb2ZmOworfQorCitzdGF0aWMgaW5saW5lIGludAorTVhP ZmZzZXRUb0ZsYWdzQml0U2hpZnQoTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCkKK3sKKwlpbnQJCQlt ZW1iZXJfaW5fZ3JvdXAgPSBvZmZzZXQgJSBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVSR1JP VVA7CisJaW50CQkJYnNoaWZ0ID0gbWVtYmVyX2luX2dyb3VwICogTVhBQ1RfTUVNQkVSX0JJVFNf UEVSX1hBQ1Q7CisKKwlyZXR1cm4gYnNoaWZ0OworfQorCisvKiBMb2NhdGlvbiAoYnl0ZSBvZmZz ZXQgd2l0aGluIHBhZ2UpIG9mIFRyYW5zYWN0aW9uSWQgb2YgZ2l2ZW4gbWVtYmVyICovCitzdGF0 aWMgaW5saW5lIGludAorTVhPZmZzZXRUb01lbWJlck9mZnNldChNdWx0aVhhY3RPZmZzZXQgb2Zm c2V0KQoreworCWludAkJCW1lbWJlcl9pbl9ncm91cCA9IG9mZnNldCAlIE1VTFRJWEFDVF9NRU1C RVJTX1BFUl9NRU1CRVJHUk9VUDsKKworCXJldHVybiBNWE9mZnNldFRvRmxhZ3NPZmZzZXQob2Zm c2V0KSArCisJCU1VTFRJWEFDVF9GTEFHQllURVNfUEVSX0dST1VQICsKKwkJbWVtYmVyX2luX2dy b3VwICogc2l6ZW9mKFRyYW5zYWN0aW9uSWQpOworfQorCisvKgorICogVG8gYXZvaWQgZGl2aW5n IGRlZXAgaW50byBhZGRyZXNzIGFyaXRobWV0aWMsIHdlIGRlY2xhcmUgYW4gYXV4aWxpYXJ5Cisg KiBzdHJ1Y3R1cmUgdGhhdCBhY2Nlc3MgdGhlIE11bHRpWGFjdE9mZnNldCBTTFJVIHBhZ2UuCisg Ki8KK3R5cGVkZWYgc3RydWN0IE11bHRpWGFjdE9mZnNldFNMUlVQYWdlCit7CisJTXVsdGlYYWN0 T2Zmc2V0CQkJYmFzZTsKKwlTaG9ydE11bHRpWGFjdE9mZnNldAlvZmZzZXRbRkxFWElCTEVfQVJS QVlfTUVNQkVSXTsKK30gTXVsdGlYYWN0T2Zmc2V0U0xSVVBhZ2U7CisKK3N0YXRpYyBpbmxpbmUg dm9pZAorTVhPZmZzZXRXcml0ZShjaGFyICpidWYsIGludCBlbnRyeW5vLCBNdWx0aVhhY3RPZmZz ZXQgb2Zmc2V0KQoreworCU11bHRpWGFjdE9mZnNldFNMUlVQYWdlICpwYWdlID0gKE11bHRpWGFj dE9mZnNldFNMUlVQYWdlICopIGJ1ZjsKKworCWlmIChwYWdlLT5iYXNlICE9IDApCisJCXBhZ2Ut Pm9mZnNldFtlbnRyeW5vXSA9IG9mZnNldCAtIHBhZ2UtPmJhc2U7CisJZWxzZQorCXsKKwkJcGFn ZS0+YmFzZSA9IG9mZnNldDsKKwkJcGFnZS0+b2Zmc2V0W2VudHJ5bm9dID0gMDsKKwl9CisKKwkv KgorCSAqIFdlIG5lZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB1bmluaXRlZCB2YWx1ZSBhbmQg bm90IHlldCB3cml0dGVuIG9mZnNldC4KKwkgKiBTZWUgY2FzZSAyIGluIEdldE11bHRpWGFjdElk TWVtYmVycy4KKwkgKgorCSAqIFNvLCBtYXJrIHRoaXMgb2Zmc2V0IGluaXRlZC4KKwkgKi8KKwlw YWdlLT5vZmZzZXRbZW50cnlub10gXj0gMHg4MDAwMDAwMDsKK30KKworTXVsdGlYYWN0V3JpdGVy ICoKK0FsbG9jTXVsdGlYYWN0V3JpdGUoY2hhciAqcGdkYXRhLCBNdWx0aVhhY3RJZCBmaXJzdE11 bHRpLAorCQkJCQlNdWx0aVhhY3RPZmZzZXQgZmlyc3RPZmZzZXQpCit7CisJTXVsdGlYYWN0V3Jp dGVyICpzdGF0ZSA9IHN0YXRlID0gcGdfbWFsbG9jKHNpemVvZigqc3RhdGUpKTsKKwljaGFyCQkJ CWRpcltNQVhQR1BBVEhdID0gezB9OworCisJc3RhdGUtPm5leHRNWGFjdCA9IGZpcnN0TXVsdGk7 CisJc3RhdGUtPm5leHRPZmZzZXQgPSBmaXJzdE9mZnNldDsKKworCXBnX3NwcmludGYoZGlyLCAi JXMvcGdfbXVsdGl4YWN0L29mZnNldHMiLCBwZ2RhdGEpOworCXN0YXRlLT5vZmZzZXQgPSBBbGxv Y1NscnVXcml0ZShkaXIsIGZhbHNlKTsKKworCXBnX3NwcmludGYoZGlyLCAiJXMvcGdfbXVsdGl4 YWN0L21lbWJlcnMiLCBwZ2RhdGEpOworCXN0YXRlLT5tZW1iZXJzID0gQWxsb2NTbHJ1V3JpdGUo ZGlyLCB0cnVlIC8qIHVzZSBsb25nIHNlZ21lbnQgbmFtZXMgKi8pOworCisJcmV0dXJuIHN0YXRl OworfQorCisvKgorICogU2ltcGxpZmllZCBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNlcnZl ciBmdW5jdGlvbgorICovCitNdWx0aVhhY3RJZAorR2V0TmV3TXVsdGlYYWN0SWQoTXVsdGlYYWN0 V3JpdGVyICpzdGF0ZSwgaW50IG5tZW1iZXJzLCBNdWx0aVhhY3RPZmZzZXQgKm9mZnNldCkKK3sK KwlNdWx0aVhhY3RJZAkJcmVzdWx0OworCisJLyogSGFuZGxlIHdyYXBhcm91bmQgb2YgdGhlIG5l eHRNWGFjdCBjb3VudGVyICovCisJaWYgKHN0YXRlLT5uZXh0TVhhY3QgPCBGaXJzdE11bHRpWGFj dElkKQorCQlzdGF0ZS0+bmV4dE1YYWN0ID0gRmlyc3RNdWx0aVhhY3RJZDsKKworCS8qIEFzc2ln biB0aGUgTVhJRCAqLworCXJlc3VsdCA9IHN0YXRlLT5uZXh0TVhhY3Q7CisKKwkvKiBSZXNlcnZl IHRoZSBtZW1iZXJzIHNwYWNlLCBzaW1pbGFybHkgdG8gYWJvdmUuICovCisJKm9mZnNldCA9IHN0 YXRlLT5uZXh0T2Zmc2V0OworCisJLyoKKwkgKiBBZHZhbmNlIGNvdW50ZXJzLiAgQXMgaW4gR2V0 TmV3VHJhbnNhY3Rpb25JZCgpLCB0aGlzIG11c3Qgbm90IGhhcHBlbgorCSAqIHVudGlsIGFmdGVy IGZpbGUgZXh0ZW5zaW9uIGhhcyBzdWNjZWVkZWQhCisJICoKKwkgKiBXZSBkb24ndCBjYXJlIGFi b3V0IE11bHRpWGFjdElkIHdyYXBhcm91bmQgaGVyZTsgaXQgd2lsbCBiZSBoYW5kbGVkIGJ5CisJ ICogdGhlIG5leHQgaXRlcmF0aW9uLiAgQnV0IG5vdGUgdGhhdCBuZXh0TVhhY3QgbWF5IGJlIElu dmFsaWRNdWx0aVhhY3RJZAorCSAqIG9yIHRoZSBmaXJzdCB2YWx1ZSBvbiBhIHNlZ21lbnQtYmVn aW5uaW5nIHBhZ2UgYWZ0ZXIgdGhpcyByb3V0aW5lCisJICogZXhpdHMsIHNvIGFueW9uZSBlbHNl IGxvb2tpbmcgYXQgdGhlIHZhcmlhYmxlIG11c3QgYmUgcHJlcGFyZWQgdG8gZGVhbAorCSAqIHdp dGggZWl0aGVyIGNhc2UuICBTaW1pbGFybHksIG5leHRPZmZzZXQgbWF5IGJlIHplcm8sIGJ1dCB3 ZSB3b24ndCB1c2UKKwkgKiB0aGF0IGFzIHRoZSBhY3R1YWwgc3RhcnQgb2Zmc2V0IG9mIHRoZSBu ZXh0IG11bHRpeGFjdC4KKwkgKi8KKwkoc3RhdGUtPm5leHRNWGFjdCkrKzsKKworCXN0YXRlLT5u ZXh0T2Zmc2V0ICs9IG5tZW1iZXJzOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFdy aXRlIGEgbmV3IG11bHRpeGFjdCB3aXRoIG1lbWJlcnMuCisgKgorICogU2ltcGxpZmllZCB2ZXJz aW9uIG9mIHRoZSBjb3JyZXNwb2Rpbmcgc2VydmVyIGZ1bmN0aW9uLCBoZW5jZSB0aGUgbmFtZS4K KyAqLwordm9pZAorUmVjb3JkTmV3TXVsdGlYYWN0KE11bHRpWGFjdFdyaXRlciAqc3RhdGUsIE11 bHRpWGFjdE9mZnNldCBvZmZzZXQsCisJCQkJICAgTXVsdGlYYWN0SWQgbXVsdGksIGludCBubWVt YmVycywgTXVsdGlYYWN0TWVtYmVyICptZW1iZXJzKQoreworCWludDY0CQlwYWdlbm87CisJaW50 NjQJCXByZXZfcGFnZW5vOworCWludAkJCWVudHJ5bm8sCisJCQkJaTsKKwljaGFyCSAgICpidWY7 CisKKwlwYWdlbm8gPSBNdWx0aVhhY3RJZFRvT2Zmc2V0UGFnZShtdWx0aSk7CisJZW50cnlubyA9 IE11bHRpWGFjdElkVG9PZmZzZXRFbnRyeShtdWx0aSk7CisKKwlidWYgPSBTbHJ1V3JpdGVTd2l0 Y2hQYWdlKHN0YXRlLT5vZmZzZXQsIHBhZ2Vubyk7CisJTVhPZmZzZXRXcml0ZShidWYsIGVudHJ5 bm8sIG9mZnNldCk7CisKKwlwcmV2X3BhZ2VubyA9IC0xOworCisJZm9yIChpID0gMDsgaSA8IG5t ZW1iZXJzOyBpKyssIG9mZnNldCsrKQorCXsKKwkJVHJhbnNhY3Rpb25JZCAqbWVtYmVycHRyOwor CQl1aW50MzIJICAgKmZsYWdzcHRyOworCQl1aW50MzIJCWZsYWdzdmFsOworCQlpbnQJCQlic2hp ZnQ7CisJCWludAkJCWZsYWdzb2ZmOworCQlpbnQJCQltZW1iZXJvZmY7CisKKwkJQXNzZXJ0KG1l bWJlcnNbaV0uc3RhdHVzIDw9IE11bHRpWGFjdFN0YXR1c1VwZGF0ZSk7CisKKwkJcGFnZW5vID0g TVhPZmZzZXRUb01lbWJlclBhZ2Uob2Zmc2V0KTsKKwkJbWVtYmVyb2ZmID0gTVhPZmZzZXRUb01l bWJlck9mZnNldChvZmZzZXQpOworCQlmbGFnc29mZiA9IE1YT2Zmc2V0VG9GbGFnc09mZnNldChv ZmZzZXQpOworCQlic2hpZnQgPSBNWE9mZnNldFRvRmxhZ3NCaXRTaGlmdChvZmZzZXQpOworCisJ CWlmIChwYWdlbm8gIT0gcHJldl9wYWdlbm8pCisJCXsKKwkJCWJ1ZiA9IFNscnVXcml0ZVN3aXRj aFBhZ2Uoc3RhdGUtPm1lbWJlcnMsIHBhZ2Vubyk7CisJCQlwcmV2X3BhZ2VubyA9IHBhZ2VubzsK KwkJfQorCisJCW1lbWJlcnB0ciA9IChUcmFuc2FjdGlvbklkICopIChidWYgKyBtZW1iZXJvZmYp OworCisJCSptZW1iZXJwdHIgPSBtZW1iZXJzW2ldLnhpZDsKKworCQlmbGFnc3B0ciA9ICh1aW50 MzIgKikgKGJ1ZiArIGZsYWdzb2ZmKTsKKworCQlmbGFnc3ZhbCA9ICpmbGFnc3B0cjsKKwkJZmxh Z3N2YWwgJj0gfigoKDEgPDwgTVhBQ1RfTUVNQkVSX0JJVFNfUEVSX1hBQ1QpIC0gMSkgPDwgYnNo aWZ0KTsKKwkJZmxhZ3N2YWwgfD0gKG1lbWJlcnNbaV0uc3RhdHVzIDw8IGJzaGlmdCk7CisJCSpm bGFnc3B0ciA9IGZsYWdzdmFsOworCX0KK30KKwordm9pZAorRnJlZU11bHRpWGFjdFdyaXRlKE11 bHRpWGFjdFdyaXRlciAqc3RhdGUpCit7CisJRnJlZVNscnVXcml0ZShzdGF0ZS0+b2Zmc2V0KTsK KwlGcmVlU2xydVdyaXRlKHN0YXRlLT5tZW1iZXJzKTsKKworCXBmcmVlKHN0YXRlKTsKK30KZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3RfbmV3LmggYi9zcmMvYmluL3Bn X3VwZ3JhZGUvbXVsdGl4YWN0X25ldy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAuLjMzZDVkMWI4MjIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUv bXVsdGl4YWN0X25ldy5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBtdWx0aXhhY3RfbmV3LmgK KyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50 IEdyb3VwCisgKiBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X25ldy5oCisgKi8KKworI2lu Y2x1ZGUgInBvc3RncmVzX2ZlLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MvbXVsdGl4YWN0LmgiCisK KyNpbmNsdWRlICJzbHJ1X2lvLmgiCisKK3R5cGVkZWYgc3RydWN0IE11bHRpWGFjdFdyaXRlcgor eworCU11bHRpWGFjdElkCQkJbmV4dE1YYWN0OworCU11bHRpWGFjdE9mZnNldAkJbmV4dE9mZnNl dDsKKworCVNscnVTZWdTdGF0ZQkgICAqb2Zmc2V0OworCVNscnVTZWdTdGF0ZQkgICAqbWVtYmVy czsKK30gTXVsdGlYYWN0V3JpdGVyOworCitleHRlcm4gTXVsdGlYYWN0V3JpdGVyICpBbGxvY011 bHRpWGFjdFdyaXRlKGNoYXIgKnBnZGF0YSwKKwkJCQkJCQkJCQkJTXVsdGlYYWN0SWQgZmlyc3RN dWx0aSwKKwkJCQkJCQkJCQkJTXVsdGlYYWN0T2Zmc2V0IGZpcnN0T2Zmc2V0KTsKK2V4dGVybiBN dWx0aVhhY3RJZCBHZXROZXdNdWx0aVhhY3RJZChNdWx0aVhhY3RXcml0ZXIgKnN0YXRlLCBpbnQg bm1lbWJlcnMsCisJCQkJCQkJCQkgTXVsdGlYYWN0T2Zmc2V0ICpvZmZzZXQpOworZXh0ZXJuIHZv aWQgUmVjb3JkTmV3TXVsdGlYYWN0KE11bHRpWGFjdFdyaXRlciAqc3RhdGUsIE11bHRpWGFjdE9m ZnNldCBvZmZzZXQsCisJCQkJCQkJICAgTXVsdGlYYWN0SWQgbXVsdGksIGludCBubWVtYmVycywK KwkJCQkJCQkgICBNdWx0aVhhY3RNZW1iZXIgKm1lbWJlcnMpOworZXh0ZXJuIHZvaWQgRnJlZU11 bHRpWGFjdFdyaXRlKE11bHRpWGFjdFdyaXRlciAqd3JpdGVyKTsKZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdfdXBncmFkZS9tdWx0aXhhY3Rfb2xkLmMgYi9zcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4 YWN0X29sZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjZjYzM4NGQy Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X29sZC5j CkBAIC0wLDAgKzEsMjk2IEBACisvKgorICogbXVsdGl4YWN0X29sZC5jCisgKgorICogUmV3cml0 ZSBwcmUtdjE5IG11bHRpeGFjdHMgdG8gbmV3IGZvcm1hdCB3aXRoIDY0LWJpdCBNdWx0aVhhY3RP ZmZzZXRzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAorICogc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9vbGQuYworICov CisKKyNpbmNsdWRlICJtdWx0aXhhY3Rfb2xkLmgiCisKKyNpbmNsdWRlICJwZ191cGdyYWRlLmgi CisKKy8qCisgKiBOT1RFOiBiZWxvdyBhcmUgYSBidW5jaCBvZiBkZWZpbml0aW9ucyBhbmQgc2lt cGxlIHN0dGFpYyBpbmxpbmUgZnVuY3Rpb25zCisgKiB0aGF0IGFyZSBjb3B5LXBhc3RlZCBmcm9t IG11bHRpeGFjdC5jIGZyb20gdmVyc2lvbiAxOC4gIFRoZSBvbmx5IGRpZmZlcmVuY2UKKyAqIGlz IHRoYXQgd2UgdXNlIHRoZSBPbGRNdWx0aVhhY3RPZmZzZXQgdHlwZSBlcXVhbCB0byB1aW50MzIg aW5zdGVhZCBvZgorICogTXVsdGlYYWN0T2Zmc2V0IHdoaWNoIGJlY2FtZSB1aW50NjQuCisgKi8K KworLyogV2UgbmVlZCBmb3VyIGJ5dGVzIHBlciBvZmZzZXQgYW5kIDggYnl0ZXMgcGVyIGJhc2Ug Zm9yIGVhY2ggcGFnZS4gKi8KKyNkZWZpbmUgTVVMVElYQUNUX09GRlNFVFNfUEVSX1BBR0UgKEJM Q0tTWiAvIHNpemVvZihPbGRNdWx0aVhhY3RPZmZzZXQpKQorCitzdGF0aWMgaW5saW5lIGludDY0 CitNdWx0aVhhY3RJZFRvT2Zmc2V0UGFnZShNdWx0aVhhY3RJZCBtdWx0aSkKK3sKKwlyZXR1cm4g bXVsdGkgLyBNVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRTsKK30KKworc3RhdGljIGlubGluZSBp bnQKK011bHRpWGFjdElkVG9PZmZzZXRFbnRyeShNdWx0aVhhY3RJZCBtdWx0aSkKK3sKKwlyZXR1 cm4gbXVsdGkgJSBNVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRTsKK30KKworLyoKKyAqIFRoZSBz aXR1YXRpb24gZm9yIG1lbWJlcnMgaXMgYSBiaXQgbW9yZSBjb21wbGV4OiB3ZSBzdG9yZSBvbmUg Ynl0ZSBvZgorICogYWRkaXRpb25hbCBmbGFnIGJpdHMgZm9yIGVhY2ggVHJhbnNhY3Rpb25JZC4g IFRvIGRvIHRoaXMgd2l0aG91dCBnZXR0aW5nCisgKiBpbnRvIGFsaWdubWVudCBpc3N1ZXMsIHdl IHN0b3JlIGZvdXIgYnl0ZXMgb2YgZmxhZ3MsIGFuZCB0aGVuIHRoZQorICogY29ycmVzcG9uZGlu ZyA0IFhpZHMuICBFYWNoIHN1Y2ggNS13b3JkICgyMC1ieXRlKSBzZXQgd2UgY2FsbCBhICJncm91 cCIsIGFuZAorICogYXJlIHN0b3JlZCBhcyBhIHdob2xlIGluIHBhZ2VzLiAgVGh1cywgd2l0aCA4 a0IgQkxDS1NaLCB3ZSBrZWVwIDQwOSBncm91cHMKKyAqIHBlciBwYWdlLiAgVGhpcyB3YXN0ZXMg MTIgYnl0ZXMgcGVyIHBhZ2UsIGJ1dCB0aGF0J3MgT0sgLS0gc2ltcGxpY2l0eSAoYW5kCisgKiBw ZXJmb3JtYW5jZSkgdHJ1bXBzIHNwYWNlIGVmZmljaWVuY3kgaGVyZS4KKyAqCisgKiBOb3RlIHRo YXQgdGhlICJvZmZzZXQiIG1hY3JvcyB3b3JrIHdpdGggYnl0ZSBvZmZzZXQsIG5vdCBhcnJheSBp bmRleGVzLCBzbworICogYXJpdGhtZXRpYyBtdXN0IGJlIGRvbmUgdXNpbmcgImNoYXIgKiIgcG9p bnRlcnMuCisgKi8KKy8qIFdlIG5lZWQgZWlnaHQgYml0cyBwZXIgeGFjdCwgc28gb25lIHhhY3Qg Zml0cyBpbiBhIGJ5dGUgKi8KKyNkZWZpbmUgTVhBQ1RfTUVNQkVSX0JJVFNfUEVSX1hBQ1QJCQk4 CisjZGVmaW5lIE1YQUNUX01FTUJFUl9GTEFHU19QRVJfQllURQkJCTEKKyNkZWZpbmUgTVhBQ1Rf TUVNQkVSX1hBQ1RfQklUTUFTSwkoKDEgPDwgTVhBQ1RfTUVNQkVSX0JJVFNfUEVSX1hBQ1QpIC0g MSkKKworLyogaG93IG1hbnkgZnVsbCBieXRlcyBvZiBmbGFncyBhcmUgdGhlcmUgaW4gYSBncm91 cD8gKi8KKyNkZWZpbmUgTVVMVElYQUNUX0ZMQUdCWVRFU19QRVJfR1JPVVAJCTQKKyNkZWZpbmUg TVVMVElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQCVwKKwkoTVVMVElYQUNUX0ZMQUdCWVRF U19QRVJfR1JPVVAgKiBNWEFDVF9NRU1CRVJfRkxBR1NfUEVSX0JZVEUpCisvKiBzaXplIGluIGJ5 dGVzIG9mIGEgY29tcGxldGUgZ3JvdXAgKi8KKyNkZWZpbmUgTVVMVElYQUNUX01FTUJFUkdST1VQ X1NJWkUgXAorCShzaXplb2YoVHJhbnNhY3Rpb25JZCkgKiBNVUxUSVhBQ1RfTUVNQkVSU19QRVJf TUVNQkVSR1JPVVAgKyBNVUxUSVhBQ1RfRkxBR0JZVEVTX1BFUl9HUk9VUCkKKyNkZWZpbmUgTVVM VElYQUNUX01FTUJFUkdST1VQU19QRVJfUEFHRSAoQkxDS1NaIC8gTVVMVElYQUNUX01FTUJFUkdS T1VQX1NJWkUpCisjZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFCVwKKwkoTVVMVElY QUNUX01FTUJFUkdST1VQU19QRVJfUEFHRSAqIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJH Uk9VUCkKKworLyogcGFnZSBpbiB3aGljaCBhIG1lbWJlciBpcyB0byBiZSBmb3VuZCAqLworc3Rh dGljIGlubGluZSBpbnQ2NAorTVhPZmZzZXRUb01lbWJlclBhZ2UoT2xkTXVsdGlYYWN0T2Zmc2V0 IG9mZnNldCkKK3sKKwlyZXR1cm4gb2Zmc2V0IC8gTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0U7 Cit9CisKKy8qIExvY2F0aW9uIChieXRlIG9mZnNldCB3aXRoaW4gcGFnZSkgb2YgZmxhZyB3b3Jk IGZvciBhIGdpdmVuIG1lbWJlciAqLworc3RhdGljIGlubGluZSBpbnQKK01YT2Zmc2V0VG9GbGFn c09mZnNldChNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0KQoreworCU9sZE11bHRpWGFjdE9mZnNldCBn cm91cCA9IG9mZnNldCAvIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUDsKKwlpbnQJ CQlncm91cG9ucGcgPSBncm91cCAlIE1VTFRJWEFDVF9NRU1CRVJHUk9VUFNfUEVSX1BBR0U7CisJ aW50CQkJYnl0ZW9mZiA9IGdyb3Vwb25wZyAqIE1VTFRJWEFDVF9NRU1CRVJHUk9VUF9TSVpFOwor CisJcmV0dXJuIGJ5dGVvZmY7Cit9CisKKy8qIExvY2F0aW9uIChieXRlIG9mZnNldCB3aXRoaW4g cGFnZSkgb2YgVHJhbnNhY3Rpb25JZCBvZiBnaXZlbiBtZW1iZXIgKi8KK3N0YXRpYyBpbmxpbmUg aW50CitNWE9mZnNldFRvTWVtYmVyT2Zmc2V0KE9sZE11bHRpWGFjdE9mZnNldCBvZmZzZXQpCit7 CisJaW50CQkJbWVtYmVyX2luX2dyb3VwID0gb2Zmc2V0ICUgTVVMVElYQUNUX01FTUJFUlNfUEVS X01FTUJFUkdST1VQOworCisJcmV0dXJuIE1YT2Zmc2V0VG9GbGFnc09mZnNldChvZmZzZXQpICsK KwkJTVVMVElYQUNUX0ZMQUdCWVRFU19QRVJfR1JPVVAgKworCQltZW1iZXJfaW5fZ3JvdXAgKiBz aXplb2YoVHJhbnNhY3Rpb25JZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitNWE9mZnNldFRv RmxhZ3NCaXRTaGlmdChPbGRNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0KQoreworCWludAkJCW1lbWJl cl9pbl9ncm91cCA9IG9mZnNldCAlIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUDsK KwlpbnQJCQlic2hpZnQgPSBtZW1iZXJfaW5fZ3JvdXAgKiBNWEFDVF9NRU1CRVJfQklUU19QRVJf WEFDVDsKKworCXJldHVybiBic2hpZnQ7Cit9CisKKy8qCisgKiBDb25zdHJ1Y3QgcmVhZGVyIG9m IG9sZCBtdWx0aXhhY3RzLgorICoKKyAqIFJldHVybnMgdGhlIG1hbGxvY2VkIG1lbW9yeSB1c2Vk IGJ5IHRoZSBhbGwgb3RoZXIgY2FsbHMgaW4gdGhpcyBtb2R1bGUuCisgKi8KK09sZE11bHRpWGFj dFJlYWRlciAqCitBbGxvY09sZE11bHRpWGFjdFJlYWQoY2hhciAqcGdkYXRhLCBNdWx0aVhhY3RJ ZCBuZXh0TXVsdGksCisJCQkJCSAgT2xkTXVsdGlYYWN0T2Zmc2V0IG5leHRPZmZzZXQpCit7CisJ T2xkTXVsdGlYYWN0UmVhZGVyICpzdGF0ZSA9IHN0YXRlID0gcGdfbWFsbG9jKHNpemVvZigqc3Rh dGUpKTsKKwljaGFyCQkJCWRpcltNQVhQR1BBVEhdID0gezB9OworCisJc3RhdGUtPm5leHRNWGFj dCA9IG5leHRNdWx0aTsKKwlzdGF0ZS0+bmV4dE9mZnNldCA9IG5leHRPZmZzZXQ7CisKKwlwZ19z cHJpbnRmKGRpciwgIiVzL3BnX211bHRpeGFjdC9vZmZzZXRzIiwgcGdkYXRhKTsKKwlzdGF0ZS0+ b2Zmc2V0ID0gQWxsb2NTbHJ1UmVhZChkaXIpOworCisJcGdfc3ByaW50ZihkaXIsICIlcy9wZ19t dWx0aXhhY3QvbWVtYmVycyIsIHBnZGF0YSk7CisJc3RhdGUtPm1lbWJlcnMgPSBBbGxvY1NscnVS ZWFkKGRpcik7CisKKwlyZXR1cm4gc3RhdGU7Cit9CisKKy8qCisgKiBUaGlzIGlzIGEgc2ltcGxp ZmllZCB2ZXJzaW9uIG9mIHRoZSBHZXRNdWx0aVhhY3RJZE1lbWJlcnMoKSBzZXJ2ZXIgZnVuY3Rp b24uCisgKgorICogLSBPbmx5IHJldHVybiB0aGUgdXBkYXRpbmcgbWVtYmVyLCBpZiBhbnkuIFVw Z3JhZGUgb25seSBjYXJlcyBhYm91dCB0aGUKKyAqICAgdXBkYXRlcnMuIElmIHRoZXJlIGlzIG5v IHVwZGF0aW5nIG1lbWJlciwgcmV0dXJuIHRoZSBmaXJzdCBsb2NraW5nLW9ubHkKKyAqICAgbWVt YmVyLiBXZSBkb24ndCBoYXZlIGFueSB3YXkgdG8gcmVwcmVzZW50ICJubyBtZW1iZXJzIiwgYnV0 IHdlIGFsc28gZG9uJ3QKKyAqICAgbmVlZCB0byBwcmVzZXJ2ZSBhbGwgdGhlIGxvY2tpbmcgbWVt YmVycy4KKyAqCisgKiAtIFdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgbG9ja2luZyBhbmQg c29tZSBjb3JuZXIgY2FzZXMgYmVjYXVzZSB0aGVyZSdzCisgKiAgIG5vIGNvbmN1cnJlbnQgYWN0 aXZpdHkuCisgKi8KK3ZvaWQKK0dldE9sZE11bHRpWGFjdElkU2luZ2xlTWVtYmVyKE9sZE11bHRp WGFjdFJlYWRlciAqc3RhdGUsIE11bHRpWGFjdElkIG11bHRpLAorCQkJCQkJCSAgVHJhbnNhY3Rp b25JZCAqcmVzdWx0LCBNdWx0aVhhY3RTdGF0dXMgKnN0YXR1cykKK3sKKwlNdWx0aVhhY3RJZAkJ bmV4dE1YYWN0LAorCQkJCQluZXh0T2Zmc2V0LAorCQkJCQl0bXBNWGFjdDsKKwlpbnQ2NAkJCXBh Z2VubywKKwkJCQkJcHJldl9wYWdlbm87CisJaW50CQkJCWVudHJ5bm8sCisJCQkJCWxlbmd0aDsK KwljaGFyCQkgICAqYnVmOworCU9sZE11bHRpWGFjdE9mZnNldCAqb2ZmcHRyLAorCQkJCQkJb2Zm c2V0OworCVRyYW5zYWN0aW9uSWQJcmVzdWx0X3hpZCA9IEludmFsaWRUcmFuc2FjdGlvbklkOwor CWJvb2wJCQlyZXN1bHRfaXN1cGRhdGUgPSBmYWxzZTsKKworCW5leHRNWGFjdCA9IHN0YXRlLT5u ZXh0TVhhY3Q7CisJbmV4dE9mZnNldCA9IHN0YXRlLT5uZXh0T2Zmc2V0OworCisJLyoKKwkgKiBT ZWUgR2V0TXVsdGlYYWN0SWRNZW1iZXJzIGluIG11bHRpeGFjdC5jCisJICoKKwkgKiBGaW5kIG91 dCB0aGUgb2Zmc2V0IGF0IHdoaWNoIHdlIG5lZWQgdG8gc3RhcnQgcmVhZGluZyBNdWx0aVhhY3RN ZW1iZXJzCisJICogYW5kIHRoZSBudW1iZXIgb2YgbWVtYmVycyBpbiB0aGUgbXVsdGl4YWN0LiAg V2UgZGV0ZXJtaW5lIHRoZSBsYXR0ZXIgYXMKKwkgKiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRo aXMgbXVsdGl4YWN0J3Mgc3RhcnRpbmcgb2Zmc2V0IGFuZCB0aGUgbmV4dAorCSAqIG9uZSdzLiAg SG93ZXZlciwgdGhlcmUgYXJlIHNvbWUgY29ybmVyIGNhc2VzIHRvIHdvcnJ5IGFib3V0OgorCSAq CisJICogMS4gVGhpcyBtdWx0aXhhY3QgbWF5IGJlIHRoZSBsYXRlc3Qgb25lIGNyZWF0ZWQsIGlu IHdoaWNoIGNhc2UgdGhlcmUgaXMKKwkgKiBubyBuZXh0IG9uZSB0byBsb29rIGF0LiAgSW4gdGhp cyBjYXNlIHRoZSBuZXh0T2Zmc2V0IHZhbHVlIHdlIGp1c3QKKwkgKiBzYXZlZCBpcyB0aGUgY29y cmVjdCBlbmRwb2ludC4KKwkgKgorCSAqIDIuIFRoZSBuZXh0IG11bHRpeGFjdCBtYXkgc3RpbGwg YmUgaW4gcHJvY2VzcyBvZiBiZWluZyBmaWxsZWQgaW4uLi4KKwkgKiBUaGlzIGNhbm5vdCBoYXBw ZW4gZHVyaW5nIHVwZ3JhZGUuCisJICoKKwkgKiAzLiBCZWNhdXNlIEdldE5ld011bHRpWGFjdElk IGluY3JlbWVudHMgb2Zmc2V0IHplcm8gdG8gb2Zmc2V0IG9uZSB0bworCSAqIGhhbmRsZSBjYXNl ICMyLCB0aGVyZSBpcyBhbiBhbWJpZ3VpdHkgbmVhciB0aGUgcG9pbnQgb2Ygb2Zmc2V0CisJICog d3JhcGFyb3VuZC4gIElmIHdlIHNlZSBuZXh0IG11bHRpeGFjdCdzIG9mZnNldCBpcyBvbmUsIGlz IHRoYXQgb3VyCisJICogbXVsdGl4YWN0J3MgYWN0dWFsIGVuZHBvaW50LCBvciBkaWQgaXQgZW5k IGF0IHplcm8gd2l0aCBhIHN1YnNlcXVlbnQKKwkgKiBpbmNyZW1lbnQ/ICBXZSBoYW5kbGUgdGhp cyB1c2luZyB0aGUga25vd2xlZGdlIHRoYXQgaWYgdGhlIHplcm8ndGgKKwkgKiBtZW1iZXIgc2xv dCB3YXNuJ3QgZmlsbGVkLCBpdCdsbCBjb250YWluIHplcm8sIGFuZCB6ZXJvIGlzbid0IGEgdmFs aWQKKwkgKiB0cmFuc2FjdGlvbiBJRCBzbyBpdCBjYW4ndCBiZSBhIG11bHRpeGFjdCBtZW1iZXIu ICBUaGVyZWZvcmUsIGlmIHdlCisJICogcmVhZCBhIHplcm8gZnJvbSB0aGUgbWVtYmVycyBhcnJh eSwganVzdCBpZ25vcmUgaXQuCisJICovCisKKwlwYWdlbm8gPSBNdWx0aVhhY3RJZFRvT2Zmc2V0 UGFnZShtdWx0aSk7CisJZW50cnlubyA9IE11bHRpWGFjdElkVG9PZmZzZXRFbnRyeShtdWx0aSk7 CisKKwlidWYgPSBTbHJ1UmVhZFN3aXRjaFBhZ2Uoc3RhdGUtPm9mZnNldCwgcGFnZW5vKTsKKwlv ZmZwdHIgPSAoT2xkTXVsdGlYYWN0T2Zmc2V0ICopIGJ1ZjsKKwlvZmZwdHIgKz0gZW50cnlubzsK KwlvZmZzZXQgPSAqb2ZmcHRyOworCisJQXNzZXJ0KG9mZnNldCAhPSAwKTsKKworCS8qCisJICog VXNlIHRoZSBzYW1lIGluY3JlbWVudCBydWxlIGFzIEdldE5ld011bHRpWGFjdElkKCksIHRoYXQg aXMsIGRvbid0CisJICogaGFuZGxlIHdyYXBhcm91bmQgZXhwbGljaXRseSB1bnRpbCBuZWVkZWQu CisJICovCisJdG1wTVhhY3QgPSBtdWx0aSArIDE7CisKKwlpZiAobmV4dE1YYWN0ID09IHRtcE1Y YWN0KQorCXsKKwkJLyogQ29ybmVyIGNhc2UgMTogdGhlcmUgaXMgbm8gbmV4dCBtdWx0aXhhY3Qg Ki8KKwkJbGVuZ3RoID0gbmV4dE9mZnNldCAtIG9mZnNldDsKKwl9CisJZWxzZQorCXsKKwkJT2xk TXVsdGlYYWN0T2Zmc2V0IG5leHRNWE9mZnNldDsKKworCQkvKiBoYW5kbGUgd3JhcGFyb3VuZCBp ZiBuZWVkZWQgKi8KKwkJaWYgKHRtcE1YYWN0IDwgRmlyc3RNdWx0aVhhY3RJZCkKKwkJCXRtcE1Y YWN0ID0gRmlyc3RNdWx0aVhhY3RJZDsKKworCQlwcmV2X3BhZ2VubyA9IHBhZ2VubzsKKworCQlw YWdlbm8gPSBNdWx0aVhhY3RJZFRvT2Zmc2V0UGFnZSh0bXBNWGFjdCk7CisJCWVudHJ5bm8gPSBN dWx0aVhhY3RJZFRvT2Zmc2V0RW50cnkodG1wTVhhY3QpOworCisJCWlmIChwYWdlbm8gIT0gcHJl dl9wYWdlbm8pCisJCQlidWYgPSBTbHJ1UmVhZFN3aXRjaFBhZ2Uoc3RhdGUtPm9mZnNldCwgcGFn ZW5vKTsKKworCQlvZmZwdHIgPSAoT2xkTXVsdGlYYWN0T2Zmc2V0ICopIGJ1ZjsKKwkJb2ZmcHRy ICs9IGVudHJ5bm87CisJCW5leHRNWE9mZnNldCA9ICpvZmZwdHI7CisKKwkJLyoKKwkJICogQ29y bmVyIGNhc2UgMjogbmV4dCBtdWx0aXhhY3QgaXMgc3RpbGwgYmVpbmcgZmlsbGVkIGluLCB0aGlz IG11c3QKKwkJICogbm90IGhhcHBlbiBkdXJpbmcgdXBncmFkZS4KKwkJICovCisJCUFzc2VydChu ZXh0TVhPZmZzZXQgIT0gMCk7CisKKwkJbGVuZ3RoID0gbmV4dE1YT2Zmc2V0IC0gb2Zmc2V0Owor CX0KKworCXByZXZfcGFnZW5vID0gLTE7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkr Kywgb2Zmc2V0KyspCisJeworCQlUcmFuc2FjdGlvbklkICp4YWN0cHRyOworCQl1aW50MzIJICAg KmZsYWdzcHRyOworCQlpbnQJCQlmbGFnc29mZjsKKwkJaW50CQkJYnNoaWZ0OworCQlpbnQJCQlt ZW1iZXJvZmY7CisJCU11bHRpWGFjdFN0YXR1cyBzdDsKKworCQlwYWdlbm8gPSBNWE9mZnNldFRv TWVtYmVyUGFnZShvZmZzZXQpOworCQltZW1iZXJvZmYgPSBNWE9mZnNldFRvTWVtYmVyT2Zmc2V0 KG9mZnNldCk7CisKKwkJaWYgKHBhZ2VubyAhPSBwcmV2X3BhZ2VubykKKwkJeworCQkJYnVmID0g U2xydVJlYWRTd2l0Y2hQYWdlKHN0YXRlLT5tZW1iZXJzLCBwYWdlbm8pOworCQkJcHJldl9wYWdl bm8gPSBwYWdlbm87CisJCX0KKworCQl4YWN0cHRyID0gKFRyYW5zYWN0aW9uSWQgKikgKGJ1ZiAr IG1lbWJlcm9mZik7CisJCWlmICghVHJhbnNhY3Rpb25JZElzVmFsaWQoKnhhY3RwdHIpKQorCQl7 CisJCQkvKiBDb3JuZXIgY2FzZSAzOiB3ZSBtdXN0IGJlIGxvb2tpbmcgYXQgdW51c2VkIHNsb3Qg emVybyAqLworCQkJQXNzZXJ0KG9mZnNldCA9PSAwKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJ ZmxhZ3NvZmYgPSBNWE9mZnNldFRvRmxhZ3NPZmZzZXQob2Zmc2V0KTsKKwkJYnNoaWZ0ID0gTVhP ZmZzZXRUb0ZsYWdzQml0U2hpZnQob2Zmc2V0KTsKKwkJZmxhZ3NwdHIgPSAodWludDMyICopIChi dWYgKyBmbGFnc29mZik7CisKKwkJc3QgPSAoKmZsYWdzcHRyID4+IGJzaGlmdCkgJiBNWEFDVF9N RU1CRVJfWEFDVF9CSVRNQVNLOworCisJCS8qIFZlcmlmeSB0aGF0IHRoZXJlIGlzIGEgc2luZ2xl IHVwZGF0ZSBYaWQgYW1vbmcgdGhlIGdpdmVuIG1lbWJlcnMuICovCisJCWlmIChJU1VQREFURV9m cm9tX214c3RhdHVzKHN0KSkKKwkJeworCQkJaWYgKHJlc3VsdF9pc3VwZGF0ZSkKKwkJCQlwZ19m YXRhbCgibXVsdGl4YWN0ICV1IGhhcyBtb3JlIHRoYW4gb25lIHVwZGF0aW5nIG1lbWJlciIsCisJ CQkJCQkgbXVsdGkpOworCQkJcmVzdWx0X3hpZCA9ICp4YWN0cHRyOworCQkJcmVzdWx0X2lzdXBk YXRlID0gdHJ1ZTsKKwkJfQorCQllbHNlIGlmICghVHJhbnNhY3Rpb25JZElzVmFsaWQocmVzdWx0 X3hpZCkpCisJCQlyZXN1bHRfeGlkID0gKnhhY3RwdHI7CisJfQorCisJLyogQSBtdWx0aXhpZCB3 aXRoIHplcm8gbWVtYmVycyBzaG91bGQgbm90IGhhcHBlbiAqLworCUFzc2VydChUcmFuc2FjdGlv bklkSXNWYWxpZChyZXN1bHRfeGlkKSk7CisKKwkqcmVzdWx0ID0gcmVzdWx0X3hpZDsKKwkqc3Rh dHVzID0gcmVzdWx0X2lzdXBkYXRlID8gTXVsdGlYYWN0U3RhdHVzVXBkYXRlIDoKKwkJCQkJCQkJ TXVsdGlYYWN0U3RhdHVzRm9yS2V5U2hhcmU7Cit9CisKKy8qCisgKiBGcmVlcyB0aGUgbWFsbG9j ZWQgcmVhZGVyLgorICovCit2b2lkCitGcmVlT2xkTXVsdGlYYWN0UmVhZGVyKE9sZE11bHRpWGFj dFJlYWRlciAqc3RhdGUpCit7CisJRnJlZVNscnVSZWFkKHN0YXRlLT5vZmZzZXQpOworCUZyZWVT bHJ1UmVhZChzdGF0ZS0+bWVtYmVycyk7CisKKwlwZnJlZShzdGF0ZSk7Cit9CmRpZmYgLS1naXQg YS9zcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X29sZC5oIGIvc3JjL2Jpbi9wZ191cGdyYWRl L211bHRpeGFjdF9vbGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi44 ZDQ2NTliYTZhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFj dF9vbGQuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogbXVsdGl4YWN0X29sZC5oCisgKgorICog Q29weXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAor ICogc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9vbGQuaAorICovCisKKyNpbmNsdWRlICJw b3N0Z3Jlc19mZS5oIgorCisjaW5jbHVkZSAiYWNjZXNzL211bHRpeGFjdC5oIgorI2luY2x1ZGUg InNscnVfaW8uaCIKKwordHlwZWRlZiB1aW50MzIgT2xkTXVsdGlYYWN0T2Zmc2V0OworCit0eXBl ZGVmIHN0cnVjdCBPbGRNdWx0aVhhY3RSZWFkZXIKK3sKKwlNdWx0aVhhY3RJZAkJCW5leHRNWGFj dDsKKwlPbGRNdWx0aVhhY3RPZmZzZXQJbmV4dE9mZnNldDsKKworCVNscnVTZWdTdGF0ZQkgICAq b2Zmc2V0OworCVNscnVTZWdTdGF0ZQkgICAqbWVtYmVyczsKK30gT2xkTXVsdGlYYWN0UmVhZGVy OworCitleHRlcm4gT2xkTXVsdGlYYWN0UmVhZGVyICpBbGxvY09sZE11bHRpWGFjdFJlYWQoY2hh ciAqcGdkYXRhLAorCQkJCQkJCQkJCQkJIE11bHRpWGFjdElkIG5leHRNdWx0aSwKKwkJCQkJCQkJ CQkJCSBPbGRNdWx0aVhhY3RPZmZzZXQgbmV4dE9mZnNldCk7CitleHRlcm4gdm9pZCBHZXRPbGRN dWx0aVhhY3RJZFNpbmdsZU1lbWJlcihPbGRNdWx0aVhhY3RSZWFkZXIgKnN0YXRlLAorCQkJCQkJ CQkJCSAgTXVsdGlYYWN0SWQgbXVsdGksCisJCQkJCQkJCQkJICBUcmFuc2FjdGlvbklkICpyZXN1 bHQsCisJCQkJCQkJCQkJICBNdWx0aVhhY3RTdGF0dXMgKnN0YXR1cyk7CitleHRlcm4gdm9pZCBG cmVlT2xkTXVsdGlYYWN0UmVhZGVyKE9sZE11bHRpWGFjdFJlYWRlciAqcmVhZGVyKTsKZGlmZiAt LWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmMgYi9zcmMvYmluL3BnX3VwZ3Jh ZGUvcGdfdXBncmFkZS5jCmluZGV4IDQ5MGU5OGZhMjYuLjU0MzJjMDNhMmIgMTAwNjQ0Ci0tLSBh L3NyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmMKKysrIGIvc3JjL2Jpbi9wZ191cGdyYWRl L3BnX3VwZ3JhZGUuYwpAQCAtNDksNiArNDksOCBAQAogI2luY2x1ZGUgImNvbW1vbi9yZXN0cmlj dGVkX3Rva2VuLmgiCiAjaW5jbHVkZSAiZmVfdXRpbHMvc3RyaW5nX3V0aWxzLmgiCiAjaW5jbHVk ZSAicGdfdXBncmFkZS5oIgorI2luY2x1ZGUgIm11bHRpeGFjdF9vbGQuaCIKKyNpbmNsdWRlICJt dWx0aXhhY3RfbmV3LmgiCiAKIC8qCiAgKiBNYXhpbXVtIG51bWJlciBvZiBwZ19yZXN0b3JlIGFj dGlvbnMgKFRPQyBlbnRyaWVzKSB0byBwcm9jZXNzIHdpdGhpbiBvbmUKQEAgLTc2OSw2ICs3NzEs ODIgQEAgY29weV9zdWJkaXJfZmlsZXMoY29uc3QgY2hhciAqb2xkX3N1YmRpciwgY29uc3QgY2hh ciAqbmV3X3N1YmRpcikKIAljaGVja19vaygpOwogfQogCisvKgorICogQ29udmVydCBwZ19tdWx0 aXhhY3Qvb2Zmc2V0IGFuZCAvbWVtYmVycyB0byBuZXcgZm9ybWF0IHdpdGggNjQtYml0IG9mZnNl dHMuCisgKi8KK3N0YXRpYyB2b2lkCitjb252ZXJ0X211bHRpeGFjdHMoTXVsdGlYYWN0SWQgKm5l d19ueHRtdWx0aSwgTXVsdGlYYWN0T2Zmc2V0ICpuZXdfbnh0bXhvZmYpCit7CisJTXVsdGlYYWN0 SWQJCQlvbGRlc3RfbXVsdGksCisJCQkJCQluZXh0X211bHRpOworCU9sZE11bHRpWGFjdFJlYWRl ciAqb2xkX3JlYWRlcjsKKwlNdWx0aVhhY3RXcml0ZXIJICAgKm5ld193cml0ZXI7CisKKwlvbGRf cmVhZGVyID0gQWxsb2NPbGRNdWx0aVhhY3RSZWFkKG9sZF9jbHVzdGVyLnBnZGF0YSwKKwkJCQkJ CQkJCSAgIG9sZF9jbHVzdGVyLmNvbnRyb2xkYXRhLmNoa3BudF9ueHRtdWx0aSwKKwkJCQkJCQkJ CSAgIG9sZF9jbHVzdGVyLmNvbnRyb2xkYXRhLmNoa3BudF9ueHRteG9mZik7CisJbmV3X3dyaXRl ciA9IEFsbG9jTXVsdGlYYWN0V3JpdGUobmV3X2NsdXN0ZXIucGdkYXRhLAorCQkJCQkJCQkJIG9s ZF9jbHVzdGVyLmNvbnRyb2xkYXRhLmNoa3BudF9vbGRzdE11bHRpLAorCQkJCQkJCQkJIDEgLyog c2VlIGJlbG93ICovKTsKKworCW9sZGVzdF9tdWx0aSA9IG9sZF9jbHVzdGVyLmNvbnRyb2xkYXRh LmNoa3BudF9vbGRzdE11bHRpOworCW5leHRfbXVsdGkgPSBvbGRfY2x1c3Rlci5jb250cm9sZGF0 YS5jaGtwbnRfbnh0bXVsdGk7CisKKwkvKiBoYW5kbGUgd3JhcGFyb3VuZCAqLworCWlmIChuZXh0 X211bHRpIDwgRmlyc3RNdWx0aVhhY3RJZCkKKwkJbmV4dF9tdWx0aSA9IEZpcnN0TXVsdGlYYWN0 SWQ7CisKKwkvKgorCSAqIFJlYWQgbXVsdGl4aWRzIGZyb20gb2xkIGZpbGVzIG9uZSBieSBvbmUs IGFuZCB3cml0ZSB0aGVtIGJhY2sgaW4gdGhlIG5ldworCSAqIGZvcm1hdC4KKwkgKgorCSAqIFRo ZSBsb2NraW5nLW9ubHkgWElEcyB0aGF0IG1heSBiZSBwYXJ0IG9mIG11bHRpLXhpZHMgZG9uJ3Qg bWF0dGVyIGFmdGVyCisJICogdXBncmFkZSwgYXMgdGhlcmUgY2FuIGJlIG5vIHRyYW5zYWN0aW9u cyBydW5uaW5nIGFjcm9zcyB1cGdyYWRlLiAgU28gYXMKKwkgKiBhIGxpdHRsZSBvcHRpbWl6YXRp b24sIHdlIG9ubHkgcmVhZCBvbmUgbWVtYmVyIGZyb20gZWFjaCBtdWx0aXhpZDogdGhlCisJICog b25lIHVwZGF0aW5nIG9uZSwgb3IgaWYgdGhlcmUgd2FzIG5vIHVwZGF0ZSwgYXJiaXRyYXJpbHkg dGhlIGZpcnN0CisJICogbG9ja2luZyB4aWQuCisJICovCisJZm9yIChNdWx0aVhhY3RJZCBtdWx0 aSA9IG9sZGVzdF9tdWx0aTsgbXVsdGkgIT0gbmV4dF9tdWx0aTspCisJeworCQlUcmFuc2FjdGlv bklkCQl4aWQ7CisJCU11bHRpWGFjdFN0YXR1cwkJc3RhdHVzOworCQlNdWx0aVhhY3RNZW1iZXIJ CW1lbWJlcjsKKwkJTXVsdGlYYWN0SWQJCQluZXdfbXVsdGkgUEdfVVNFRF9GT1JfQVNTRVJUU19P TkxZOworCQlNdWx0aVhhY3RPZmZzZXQJCW9mZnNldDsKKworCQkvKiBSZWFkIHRoZSBvbGQgbXVs dGl4aWQgKi8KKwkJR2V0T2xkTXVsdGlYYWN0SWRTaW5nbGVNZW1iZXIob2xkX3JlYWRlciwgbXVs dGksICZ4aWQsICZzdGF0dXMpOworCisJCS8qIFdyaXRlIGl0IG91dCBpbiBuZXcgZm9ybWF0ICov CisJCW1lbWJlci54aWQgPSB4aWQ7CisJCW1lbWJlci5zdGF0dXMgPSBzdGF0dXM7CisJCW5ld19t dWx0aSA9IEdldE5ld011bHRpWGFjdElkKG5ld193cml0ZXIsIDEsICZvZmZzZXQpOworCisJCUFz c2VydChuZXdfbXVsdGkgPT0gbXVsdGkpOworCisJCVJlY29yZE5ld011bHRpWGFjdChuZXdfd3Jp dGVyLCBvZmZzZXQsIG11bHRpLCAxLCAmbWVtYmVyKTsKKworCQltdWx0aSsrOworCQkvKiBoYW5k bGUgd3JhcGFyb3VuZCAqLworCQlpZiAobXVsdGkgPCBGaXJzdE11bHRpWGFjdElkKQorCQkJbXVs dGkgPSBGaXJzdE11bHRpWGFjdElkOworCX0KKworCS8qCisJICogVXBkYXRlIHRoZSBuZXh0TVhh Y3QvT2Zmc2V0IHZhbHVlcyBpbiB0aGUgY29udHJvbCBmaWxlIHRvIG1hdGNoIHdoYXQgd2UKKwkg KiB3cm90ZS4gIFRoZSBuZXh0TVhhY3Qgc2hvdWxkIGJlIHVuY2hhbmdlZCwgYnV0IGJlY2F1c2Ug d2UgaWdub3JlZCB0aGUKKwkgKiBsb2NraW5nIFhJRHMgbWVtYmVycywgdGhlIG5leHRPZmZzZXQg d2lsbCBiZSBkaWZmZXJlbnQuCisJICovCisJQXNzZXJ0KG5ld193cml0ZXItPm5leHRNWGFjdCA9 PSBuZXh0X211bHRpKTsKKworCSpuZXdfbnh0bXVsdGkgPSBuZXh0X211bHRpOworCSpuZXdfbnh0 bXhvZmYgPSBuZXdfd3JpdGVyLT5uZXh0T2Zmc2V0OworCisJLyogUmVsZWFzZSByZXNvdXJjZXMg Ki8KKwlGcmVlTXVsdGlYYWN0V3JpdGUobmV3X3dyaXRlcik7CisJRnJlZU9sZE11bHRpWGFjdFJl YWRlcihvbGRfcmVhZGVyKTsKK30KKwogc3RhdGljIHZvaWQKIGNvcHlfeGFjdF94bG9nX3hpZCh2 b2lkKQogewpAQCAtODE2LDggKzg5NCwyOCBAQCBjb3B5X3hhY3RfeGxvZ194aWQodm9pZCkKIAlp ZiAob2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2F0X3ZlciA+PSBNVUxUSVhBQ1RfRk9STUFUQ0hB TkdFX0NBVF9WRVIgJiYKIAkJbmV3X2NsdXN0ZXIuY29udHJvbGRhdGEuY2F0X3ZlciA+PSBNVUxU SVhBQ1RfRk9STUFUQ0hBTkdFX0NBVF9WRVIpCiAJewotCQljb3B5X3N1YmRpcl9maWxlcygicGdf bXVsdGl4YWN0L29mZnNldHMiLCAicGdfbXVsdGl4YWN0L29mZnNldHMiKTsKLQkJY29weV9zdWJk aXJfZmlsZXMoInBnX211bHRpeGFjdC9tZW1iZXJzIiwgInBnX211bHRpeGFjdC9tZW1iZXJzIik7 CisJCU11bHRpWGFjdElkCQluZXdfbnh0bXVsdGkgPSBvbGRfY2x1c3Rlci5jb250cm9sZGF0YS5j aGtwbnRfbnh0bXVsdGk7CisJCU11bHRpWGFjdE9mZnNldCBuZXdfbnh0bXhvZmYgPSBvbGRfY2x1 c3Rlci5jb250cm9sZGF0YS5jaGtwbnRfbnh0bXhvZmY7CisKKwkJLyoKKwkJICogSWYgdGhlIG9s ZCBzZXJ2ZXIgaXMgYmVmb3JlIHRoZSBNVUxUSVhBQ1RPRkZTRVRfRk9STUFUQ0hBTkdFX0NBVF9W RVIKKwkJICogaXQgbXVzdCBoYXZlIDMyLWJpdCBtdWx0aXhpZCBvZmZzZXRzLCB0aHVzIGl0IHNo b3VsZCBiZSBjb252ZXJ0ZWQuCisJCSAqLworCQlpZiAob2xkX2NsdXN0ZXIuY29udHJvbGRhdGEu Y2F0X3ZlciA8IE1VTFRJWEFDVE9GRlNFVF9GT1JNQVRDSEFOR0VfQ0FUX1ZFUiAmJgorCQkJbmV3 X2NsdXN0ZXIuY29udHJvbGRhdGEuY2F0X3ZlciA+PSBNVUxUSVhBQ1RPRkZTRVRfRk9STUFUQ0hB TkdFX0NBVF9WRVIpCisJCXsKKwkJCXJlbW92ZV9uZXdfc3ViZGlyKCJwZ19tdWx0aXhhY3QvbWVt YmVycyIsIGZhbHNlKTsKKwkJCXJlbW92ZV9uZXdfc3ViZGlyKCJwZ19tdWx0aXhhY3Qvb2Zmc2V0 cyIsIGZhbHNlKTsKKworCQkJcHJlcF9zdGF0dXMoIkNvbnZlcnRpbmcgcGdfbXVsdGl4YWN0L29m ZnNldHMgdG8gNjQtYml0Iik7CisJCQljb252ZXJ0X211bHRpeGFjdHMoJm5ld19ueHRtdWx0aSwg Jm5ld19ueHRteG9mZik7CisJCQljaGVja19vaygpOworCQl9CisJCWVsc2UKKwkJeworCQkJY29w eV9zdWJkaXJfZmlsZXMoInBnX211bHRpeGFjdC9vZmZzZXRzIiwgInBnX211bHRpeGFjdC9vZmZz ZXRzIik7CisJCQljb3B5X3N1YmRpcl9maWxlcygicGdfbXVsdGl4YWN0L21lbWJlcnMiLCAicGdf bXVsdGl4YWN0L21lbWJlcnMiKTsKKwkJfQogCiAJCXByZXBfc3RhdHVzKCJTZXR0aW5nIG5leHQg bXVsdGl4YWN0IElEIGFuZCBvZmZzZXQgZm9yIG5ldyBjbHVzdGVyIik7CiAKQEAgLTgyNiwxMCAr OTI0LDggQEAgY29weV94YWN0X3hsb2dfeGlkKHZvaWQpCiAJCSAqIGNvdW50ZXJzIGhlcmUgYW5k IHRoZSBvbGRlc3QgbXVsdGkgcHJlc2VudCBvbiBzeXN0ZW0uCiAJCSAqLwogCQlleGVjX3Byb2co VVRJTElUWV9MT0dfRklMRSwgTlVMTCwgdHJ1ZSwgdHJ1ZSwKLQkJCQkgICJcIiVzL3BnX3Jlc2V0 d2FsXCIgLU8gJXUgLW0gJXUsJXUgXCIlc1wiIiwKLQkJCQkgIG5ld19jbHVzdGVyLmJpbmRpciwK LQkJCQkgIG9sZF9jbHVzdGVyLmNvbnRyb2xkYXRhLmNoa3BudF9ueHRteG9mZiwKLQkJCQkgIG9s ZF9jbHVzdGVyLmNvbnRyb2xkYXRhLmNoa3BudF9ueHRtdWx0aSwKKwkJCQkgICJcIiVzL3BnX3Jl c2V0d2FsXCIgLU8gJSIgUFJJdTY0ICIgLW0gJXUsJXUgXCIlc1wiIiwKKwkJCQkgIG5ld19jbHVz dGVyLmJpbmRpciwgbmV3X254dG14b2ZmLCBuZXdfbnh0bXVsdGksCiAJCQkJICBvbGRfY2x1c3Rl ci5jb250cm9sZGF0YS5jaGtwbnRfb2xkc3RNdWx0aSwKIAkJCQkgIG5ld19jbHVzdGVyLnBnZGF0 YSk7CiAJCWNoZWNrX29rKCk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBn cmFkZS5oIGIvc3JjL2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3JhZGUuaAppbmRleCBlODYzMzZmNGJl Li4xMjdiMmNiMDBmIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5o CisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmgKQEAgLTExNCw2ICsxMTQsMTEg QEAgZXh0ZXJuIGNoYXIgKm91dHB1dF9maWxlc1tdOwogICovCiAjZGVmaW5lIE1VTFRJWEFDVF9G T1JNQVRDSEFOR0VfQ0FUX1ZFUiAyMDEzMDEyMzEKIAorLyoKKyAqIFN3aWN0aCBmcm9tIDMyLWJp dCB0byA2NC1iaXQgZm9yIG11bHRpeGlkIG9mZnNldHMuCisgKi8KKyNkZWZpbmUgTVVMVElYQUNU T0ZGU0VUX0ZPUk1BVENIQU5HRV9DQVRfVkVSIDk5OTk5OTk5OQorCiAvKgogICogbGFyZ2Ugb2Jq ZWN0IGNodW5rIHNpemUgYWRkZWQgdG8gcGdfY29udHJvbGRhdGEsCiAgKiBjb21taXQgNWY5M2Mz NzgwNWU3NDg1NDg4NDgwOTE2YjQ1ODVlMDk4ZDNjYzg4MwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z191cGdyYWRlL3NscnVfaW8uYyBiL3NyYy9iaW4vcGdfdXBncmFkZS9zbHJ1X2lvLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNGU4MjMxOTkzMAotLS0gL2Rldi9udWxs CisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS9zbHJ1X2lvLmMKQEAgLTAsMCArMSwyNDAgQEAKKy8q CisgKiBzbHJ1X2lvLmMKKyAqCisgKiBSb3V0aW5lcyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyBT TFJVIGZpbGVzIGR1cmluZyB1cGdyYWRlLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAyNSwgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIHNyYy9iaW4vcGdfdXBncmFkZS9z bHJ1X2lvLmMKKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKworI2luY2x1ZGUgPGZj bnRsLmg+CisKKyNpbmNsdWRlICJwZ191cGdyYWRlLmgiCisjaW5jbHVkZSAic2xydV9pby5oIgor CisjaW5jbHVkZSAiY29tbW9uL2ZlX21lbXV0aWxzLmgiCisjaW5jbHVkZSAiY29tbW9uL2ZpbGVf cGVybS5oIgorI2luY2x1ZGUgImNvbW1vbi9maWxlX3V0aWxzLmgiCisjaW5jbHVkZSAicG9ydC9w Z19pb3ZlYy5oIgorCisvKgorICogU3RhdGUgZm9yIHJlYWRpbmcgb3Igd3JpdGluZyBhbiBTTFJV LCB3aXRoIGEgb25lIHBhZ2UgYnVmZmVyLgorICovCit0eXBlZGVmIHN0cnVjdCBTbHJ1U2VnU3Rh dGUKK3sKKwlib29sCQl3cml0aW5nOworCWJvb2wJCWxvbmdfc2VnbWVudF9uYW1lczsKKworCWNo YXIJICAgKmRpcjsKKwljaGFyCSAgICpmbjsKKwlpbnQJCQlmZDsKKwlpbnQ2NAkJc2Vnbm87CisJ dWludDY0CQlwYWdlbm87CisKKwlQR0FsaWduZWRCbG9jayBidWY7Cit9IFNscnVTZWdTdGF0ZTsK Kworc3RhdGljIGlubGluZSBTbHJ1U2VnU3RhdGUgKgorQWxsb2NTbHJ1U2VnU3RhdGUoY2hhciAq ZGlyKQoreworCVNscnVTZWdTdGF0ZSAqc3RhdGUgPSBwZ19tYWxsb2Moc2l6ZW9mKCpzdGF0ZSkp OworCisJc3RhdGUtPnNlZ25vID0gLTE7CisJc3RhdGUtPnBhZ2VubyA9IDA7CisJc3RhdGUtPmRp ciA9IHBzdHJkdXAoZGlyKTsKKwlzdGF0ZS0+ZmQgPSAtMTsKKwlzdGF0ZS0+Zm4gPSBOVUxMOwor CisJcmV0dXJuIHN0YXRlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK1NscnVGbHVzaChTbHJ1 U2VnU3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBpb3ZlYwlpb3ZlYyA9IHsKKwkJLmlvdl9iYXNl ID0gJnN0YXRlLT5idWYsCisJCS5pb3ZfbGVuID0gQkxDS1NaLAorCX07CisJb2ZmX3QJCQlvZmZz ZXQ7CisKKwlpZiAoc3RhdGUtPnNlZ25vID09IC0xKQorCQlyZXR1cm47CisKKwlvZmZzZXQgPSAo c3RhdGUtPnBhZ2VubyAlIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQpICogQkxDS1NaOworCisJaWYg KHBnX3B3cml0ZXZfd2l0aF9yZXRyeShzdGF0ZS0+ZmQsICZpb3ZlYywgMSwgb2Zmc2V0KSA8IDAp CisJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgd3JpdGUgZmlsZSBcIiVzXCI6ICVtIiwgc3RhdGUtPmZu KTsKK30KKworLyoKKyAqIENyZWF0ZSBzbHJ1IHJlYWRlciBmb3IgZGlyLgorICoKKyAqIFJldHVy bnMgdGhlIG1hbGxvY2VkIG1lbW9yeSB1c2VkIGJ5IHRoZSBhbGwgb3RoZXIgcmVhZCBjYWxscyBp biB0aGlzIG1vZHVsZS4KKyAqLworU2xydVNlZ1N0YXRlICoKK0FsbG9jU2xydVJlYWQoY2hhciAq ZGlyKQoreworCVNscnVTZWdTdGF0ZSAqc3RhdGUgPSBBbGxvY1NscnVTZWdTdGF0ZShkaXIpOwor CisJc3RhdGUtPndyaXRpbmcgPSBmYWxzZTsKKworCXJldHVybiBzdGF0ZTsKK30KKworLyoKKyAq IE9wZW4gZ2l2ZW4gcGFnZSBmb3IgcmVhZGluZy4KKyAqCisgKiBSZWFkaW5nIGNhbiBiZSBkb25l IGluIHJhbmRvbSBvcmRlci4KKyAqLworY2hhciAqCitTbHJ1UmVhZFN3aXRjaFBhZ2UoU2xydVNl Z1N0YXRlICpzdGF0ZSwgdWludDY0IHBhZ2VubykKK3sKKwlpbnQ2NCBzZWdubzsKKworCUFzc2Vy dCghc3RhdGUtPndyaXRpbmcpOwkvKiByZWFkIG9ubHkgbW9kZSAqLworCisJaWYgKHN0YXRlLT5z ZWdubyAhPSAtMSAmJiBwYWdlbm8gPT0gc3RhdGUtPnBhZ2VubykKKwkJcmV0dXJuIHN0YXRlLT5i dWYuZGF0YTsKKworCXNlZ25vID0gcGFnZW5vIC8gU0xSVV9QQUdFU19QRVJfU0VHTUVOVDsKKwlp ZiAoc2Vnbm8gIT0gc3RhdGUtPnNlZ25vKQorCXsKKwkJaWYgKHN0YXRlLT5zZWdubyAhPSAtMSkK KwkJeworCQkJY2xvc2Uoc3RhdGUtPmZkKTsKKwkJCXN0YXRlLT5mZCA9IC0xOworCisJCQlwZ19m cmVlKHN0YXRlLT5mbik7CisJCQlzdGF0ZS0+Zm4gPSBOVUxMOworCQl9CisKKwkJLyogT3BlbiBu ZXcgc2VnbWVudCAqLworCQlzdGF0ZS0+Zm4gPSBwc3ByaW50ZigiJXMvJTA0WCIsIHN0YXRlLT5k aXIsICh1bnNpZ25lZCBpbnQpIHNlZ25vKTsKKwkJaWYgKChzdGF0ZS0+ZmQgPSBvcGVuKHN0YXRl LT5mbiwgT19SRE9OTFkgfCBQR19CSU5BUlksIDApKSA8IDApCisJCQlwZ19mYXRhbCgiY291bGQg bm90IG9wZW4gZmlsZSBcIiVzXCI6ICVtIiwgc3RhdGUtPmZuKTsKKwl9CisKKwlzdGF0ZS0+c2Vn bm8gPSBzZWdubzsKKworCXsKKwkJc3RydWN0IGlvdmVjCWlvdmVjID0geworCQkJLmlvdl9iYXNl ID0gJnN0YXRlLT5idWYsCisJCQkuaW92X2xlbiA9IEJMQ0tTWiwKKwkJfTsKKwkJb2ZmX3QJCQlv ZmZzZXQgPSAocGFnZW5vICUgU0xSVV9QQUdFU19QRVJfU0VHTUVOVCkgKiBCTENLU1o7CisKKwkJ aWYgKHBnX3ByZWFkdihzdGF0ZS0+ZmQsICZpb3ZlYywgMSwgb2Zmc2V0KSA8IDApCisJCQlwZ19m YXRhbCgiY291bGQgbm90IHJlYWQgZmlsZSBcIiVzXCI6ICVtIiwgc3RhdGUtPmZuKTsKKworCQlz dGF0ZS0+cGFnZW5vID0gcGFnZW5vOworCX0KKworCXJldHVybiBzdGF0ZS0+YnVmLmRhdGE7Cit9 CisKKy8qCisgKiBGcmVlcyB0aGUgbWFsbG9jZWQgcmVhZGVyLgorICovCit2b2lkCitGcmVlU2xy dVJlYWQoU2xydVNlZ1N0YXRlICpzdGF0ZSkKK3sKKwlBc3NlcnQoIXN0YXRlLT53cml0aW5nKTsJ LyogcmVhZCBvbmx5IG1vZGUgKi8KKworCWNsb3NlKHN0YXRlLT5mZCk7CisJcGdfZnJlZShzdGF0 ZSk7Cit9CisKKy8qCisgKiBPcGVuIHRoZSBnaXZlbiBwYWdlIGZvciB3cml0aW5nLgorICoKKyAq IE5PVEU6IFRoaXMgdXNlcyBPX0VYQ0wgd2hlbiBzdGVwcGluZyB0byBhIG5ldyBzZWdtZW50LCBz byB0aGlzIGFzc3VtZXMgdGhhdAorICogZWFjaCBzZWdtZW50IGlzIHdyaXR0ZW4gaW4gZnVsbCBi ZWZvcmUgbW92aW5nIG9uIHRvIG5leHQgb25lLiAgVGhpcworICogbGltaXRhdGlvbiB3b3VsZCBi ZSBlYXN5IHRvIGxpZnQgaWYgbmVlZGVkLCBidXQgaXQgZml0cyB0aGUgdXNhZ2UgcGF0dGVybiBv ZgorICogY3VycmVudCBjYWxsZXJzLgorICovCitjaGFyICoKK1NscnVXcml0ZVN3aXRjaFBhZ2Uo U2xydVNlZ1N0YXRlICpzdGF0ZSwgdWludDY0IHBhZ2VubykKK3sKKwlpbnQ2NAlzZWdubyA9IHBh Z2VubyAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7CisJb2ZmX3QJb2Zmc2V0OworCisJaWYgKHN0 YXRlLT5zZWdubyAhPSAtMSAmJiBwYWdlbm8gPT0gc3RhdGUtPnBhZ2VubykKKwkJcmV0dXJuIHN0 YXRlLT5idWYuZGF0YTsKKworCXNlZ25vID0gcGFnZW5vIC8gU0xSVV9QQUdFU19QRVJfU0VHTUVO VDsKKwlvZmZzZXQgPSAocGFnZW5vICUgU0xSVV9QQUdFU19QRVJfU0VHTUVOVCkgKiBCTENLU1o7 CisKKwlTbHJ1Rmx1c2goc3RhdGUpOworCW1lbXNldChzdGF0ZS0+YnVmLmRhdGEsIDAsIEJMQ0tT Wik7CisKKwlpZiAoc2Vnbm8gIT0gc3RhdGUtPnNlZ25vKQorCXsKKwkJaWYgKHN0YXRlLT5zZWdu byAhPSAtMSkKKwkJeworCQkJY2xvc2Uoc3RhdGUtPmZkKTsKKwkJCXN0YXRlLT5mZCA9IC0xOwor CisJCQlwZ19mcmVlKHN0YXRlLT5mbik7CisJCQlzdGF0ZS0+Zm4gPSBOVUxMOworCQl9CisKKwkJ LyogQ3JlYXRlIHRoZSBzZWdtZW50ICovCisJCWlmIChzdGF0ZS0+bG9uZ19zZWdtZW50X25hbWVz KQorCQl7CisJCQlBc3NlcnQoc2Vnbm8gPj0gMCAmJiBzZWdubyA8PSBJTlQ2NENPTlNUKDB4RkZG RkZGRkZGRkZGRkZGKSk7CisJCQlzdGF0ZS0+Zm4gPSBwc3ByaW50ZigiJXMvJTAxNSIgUFJJWDY0 LCBzdGF0ZS0+ZGlyLCBzZWdubyk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlBc3NlcnQoc2Vnbm8g Pj0gMCAmJiBzZWdubyA8PSBJTlQ2NENPTlNUKDB4RkZGRkZGKSk7CisJCQlzdGF0ZS0+Zm4gPSBw c3ByaW50ZigiJXMvJTA0WCIsIHN0YXRlLT5kaXIsICh1bnNpZ25lZCBpbnQpIHNlZ25vKTsKKwkJ fQorCisJCWlmICgoc3RhdGUtPmZkID0gb3BlbihzdGF0ZS0+Zm4sIE9fUkRXUiB8IE9fQ1JFQVQg fCBPX0VYQ0wgfCBQR19CSU5BUlksCisJCQkJCQkJICBwZ19maWxlX2NyZWF0ZV9tb2RlKSkgPCAw KQorCQl7CisJCQlwZ19mYXRhbCgiY291bGQgbm90IGNyZWF0ZSBmaWxlIFwiJXNcIjogJW0iLCBz dGF0ZS0+Zm4pOworCQl9CisKKwkJc3RhdGUtPnNlZ25vID0gc2Vnbm87CisKKwkJaWYgKG9mZnNl dCA+IDAgJiYgcGdfcHdyaXRlX3plcm9zKHN0YXRlLT5mZCwgb2Zmc2V0LCAwKSA8IDApCisJCQlw Z19mYXRhbCgiY291bGQgbm90IHdyaXRlIGZpbGUgXCIlc1wiOiAlbSIsIHN0YXRlLT5mbik7CisJ fQorCisJc3RhdGUtPnBhZ2VubyA9IHBhZ2VubzsKKworCXJldHVybiBzdGF0ZS0+YnVmLmRhdGE7 Cit9CisKKy8qCisgKiBDcmVhdGUgc2xydSB3cml0ZXIgZm9yIGRpci4KKyAqCisgKiBSZXR1cm5z IHRoZSBtYWxsb2NlZCBtZW1vcnkgdXNlZCBieSB0aGUgYWxsIG90aGVyIHdyaXRlIGNhbGxzIGlu IHRoaXMgbW9kdWxlLgorICovCitTbHJ1U2VnU3RhdGUgKgorQWxsb2NTbHJ1V3JpdGUoY2hhciAq ZGlyLCBib29sIGxvbmdfc2VnbWVudF9uYW1lcykKK3sKKwlTbHJ1U2VnU3RhdGUgKnN0YXRlID0g QWxsb2NTbHJ1U2VnU3RhdGUoZGlyKTsKKworCXN0YXRlLT53cml0aW5nID0gdHJ1ZTsKKwlzdGF0 ZS0+bG9uZ19zZWdtZW50X25hbWVzID0gbG9uZ19zZWdtZW50X25hbWVzOworCisJcmV0dXJuIHN0 YXRlOworfQorCisvKgorICogRnJlZXMgdGhlIG1hbGxvY2VkIHdyaXRlci4KKyAqLwordm9pZAor RnJlZVNscnVXcml0ZShTbHJ1U2VnU3RhdGUgKnN0YXRlKQoreworCUFzc2VydChzdGF0ZS0+d3Jp dGluZyk7CisKKwlTbHJ1Rmx1c2goc3RhdGUpOworCisJY2xvc2Uoc3RhdGUtPmZkKTsKKwlwZ19m cmVlKHN0YXRlKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS9zbHJ1X2lvLmgg Yi9zcmMvYmluL3BnX3VwZ3JhZGUvc2xydV9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAuLjkyMGI4YWU4MmUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX3Vw Z3JhZGUvc2xydV9pby5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBzbHJ1X2lvLmgKKyAqCisg KiBDb3B5cmlnaHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisgKiBzcmMvYmluL3BnX3VwZ3JhZGUvc2xydV9pby5oCisgKi8KKworLyoKKyAqIFNvbWUga2lu ZCBvZiBpdGVyYXRvciBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIFNMUlUgc2VnbWVudC4g IFRoZSBpZGVhIGlzCisgKiB0byBzcGVjaWZ5IHRoZSBzZWdtZW50IGFuZCBwYWdlIG51bWJlciBh bmQgdGhlbiBtb3ZlIHRocm91Z2ggdGhlIHBhZ2VzLgorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jl c19mZS5oIgorCisvKgorICogU2VlIGFjY2Vzcy9zbHJ1LmgKKyAqCisgKiBDb3B5IGhlcmUsIHNp bmNlIHNscnUuaCBjb3VsZCBub3QgYmUgaW5jbHVkZWQgaW4gZmUgY29kZS4KKyAqLworI2RlZmlu ZSBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UIDMyCisKK3R5cGVkZWYgc3RydWN0IFNscnVTZWdTdGF0 ZSBTbHJ1U2VnU3RhdGU7CisKK2V4dGVybiBTbHJ1U2VnU3RhdGUgKkFsbG9jU2xydVJlYWQoY2hh ciAqZGlyKTsKK2V4dGVybiBjaGFyICpTbHJ1UmVhZFN3aXRjaFBhZ2UoU2xydVNlZ1N0YXRlICpz dGF0ZSwgdWludDY0IHBhZ2Vubyk7CitleHRlcm4gdm9pZCBGcmVlU2xydVJlYWQoU2xydVNlZ1N0 YXRlICpzdGF0ZSk7CisKK2V4dGVybiBTbHJ1U2VnU3RhdGUgKkFsbG9jU2xydVdyaXRlKGNoYXIg KmRpciwgYm9vbCBsb25nX3NlZ21lbnRfbmFtZXMpOworZXh0ZXJuIGNoYXIgKlNscnVXcml0ZVN3 aXRjaFBhZ2UoU2xydVNlZ1N0YXRlICpzdGF0ZSwgdWludDY0IHBhZ2Vubyk7CitleHRlcm4gdm9p ZCBGcmVlU2xydVdyaXRlKFNscnVTZWdTdGF0ZSAqc3RhdGUpOwotLSAKMi41MS4wCgo= --00000000000012f0e906425a28f6--