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 1uRxpr-001SUN-9T for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Jun 2025 18:48:35 +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 1uRxpp-0042SD-93 for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Jun 2025 18:48:33 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uRxpo-0042S3-Jc for pgsql-hackers@lists.postgresql.org; Wed, 18 Jun 2025 18:48:33 +0000 Received: from mail-ed1-x52d.google.com ([2a00:1450:4864:20::52d]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uRxpm-002jzj-2r for pgsql-hackers@postgresql.org; Wed, 18 Jun 2025 18:48:32 +0000 Received: by mail-ed1-x52d.google.com with SMTP id 4fb4d7f45d1cf-607ec30df2bso13476274a12.1 for ; Wed, 18 Jun 2025 11:48:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1750272509; x=1750877309; darn=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=RuwMOCQw77fOkTuxazLzUrz0x0lM9vV0OKwqeV2XI+M=; b=W1xzsrCTsIPT4nTzP1xND9LrEOddrukYBqJYy4jWw3VtBtP41YJSIHEXk0IhGxS7yf yD36B4A3gUISGHZipjuSowT/rw6hmDVZAsXycNxqJzTwLhRbmM5bfkNvr60R4w4ciqxX Bt+Ie6RZ6bJb9v5J6isMH/meyTllpo4lBnlnnjn14ZEDiuIWOBJwnesRvqe6jnfqi/xB KkF6nCNm+ogpcjd633q5+gDLUd2ZE3ziOITETblTDkoj9kCiM1fHHzCV2tXZe0yUzzQE NsVPgcQyRIlfofzs4zHZ6//GyQ5O+QzSGdHF/jczs7KiAHGNgo5k8vkB0/4QmsL66HzM gRDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750272509; x=1750877309; 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=RuwMOCQw77fOkTuxazLzUrz0x0lM9vV0OKwqeV2XI+M=; b=Cvrneldjh0s6RuboRG+mz751sYSch/OhsyN9K8Ve003IBWSQiZTE0Hl1nvBw9FS2H6 sLxNt3PJ9X6iPIcQrliUb6vXKPFzXcyrFpMqQ+Xbtbz3tsNW05owaVVrDYRggojNB9W7 7dxZmYx2YJsSAH02xSdEY/6df5OjxL9EvJZZjNfdh+0UJunASH4qvI5y4dUg4QDyZhrj xWigif5kt7pysGIPokPaPBnJ/b59fvEIUv3Qmfxi/GOWca4UVHBS8u4vXxwZYfLnjSwQ aMMgo9Goh9brmEup0DE4FZ3meenIiRRf7sCI82a86x8Xtlq35PZnfwt+WTWja29IRxs0 rwaQ== X-Gm-Message-State: AOJu0Yz2YTLSuPFpp6FJZRgHkx8fg3NXdqJCtCHUwTSKzy3VNeOc0mzQ ix1pjfYYWHu4qcRAUP/CuUgq1BNE1XWSpYwrDsdkMFEGBbOABMapbPIEmbsZfh9nmIcSBKPIItB 91wZ+Q+EsAoI5YsXCRIENB+m5EvtZ9+k= X-Gm-Gg: ASbGnctTiK9BjVTYZpD3bo+DbrAgJxhyCWD/rJuSvsEGtrBmdOEtpFxHwblyFkJSual +6cKqhHULBqjfv3JAIZkXGxHLNtF0S4LIz+JqBoDiv/K8ChO6FCbp4BahvqJN/UrSsVuGmUpR6K T7jR3m11xZt5mVeWZe91FIzF/QgDR1UvpErP9oC9He+g== X-Google-Smtp-Source: AGHT+IGJw9EhhE2Lsk5XZzXmWtSDHfk+RfAOZUK+6VG2fowLWZbE4HVZauBbS0ucsRcmOo2SUCU4RcV/pF1T/3i7/Fw= X-Received: by 2002:a17:907:72cc:b0:ad8:8b51:ddb4 with SMTP id a640c23a62f3a-adfad3cf8b5mr1892899466b.25.1750272509023; Wed, 18 Jun 2025 11:48:29 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: shihao zhong Date: Wed, 18 Jun 2025 14:48:16 -0400 X-Gm-Features: AX0GCFt5st_nPWRIQ3wT2xwsnOg54bu6Bov8o1PZFM6O5HFcuNAG0PlyIU7QWD0 Message-ID: Subject: Re: Fixes inconsistent behavior in vacuum when it processes multiple relations To: Nathan Bossart Cc: PostgreSQL-development Content-Type: multipart/mixed; boundary="00000000000029527d0637dd13f1" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000029527d0637dd13f1 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable >> That leads me to think (1) might be the better option, although I'm not = too >> wild about the subtlety of the fix. Thanks for your feedback. New patch is attached. I also updated the signature of do_analyze_rel for the same reason. On Wed, Jun 18, 2025 at 12:31=E2=80=AFPM Nathan Bossart wrote: > > On Wed, Jun 18, 2025 at 11:15:31AM -0400, shihao zhong wrote: > > I investigated the code and found a small bug with how we're passing > > the VacuumParams pointer. > > > > The call flow is > > ExecVacuum -> vacuum -> vacuum_rel > > > > The initial VaccumParams pointer is set in ExecVacuum > > In vacuum_rel, this pointer might change because it needs to determine > > whether to truncate and perform index_cleanup. > > Nice find! > > My first reaction is to wonder whether we should 1) also make a similar > change to vacuum() for some future-proofing or 2) just teach vacuum_rel() > to make a local copy of the parameters that it can scribble on. In the > latter case, we might want to assert that the parameters don't change aft= er > calls to vacuum() and vacuum_rel() to prevent this problem from recurring= . > That leads me to think (1) might be the better option, although I'm not t= oo > wild about the subtlety of the fix. > > -- > nathan --00000000000029527d0637dd13f1 Content-Type: application/octet-stream; name="vacuum_tables_options_2.patch" Content-Disposition: attachment; filename="vacuum_tables_options_2.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mc2b1kzq0 ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdzdGF0dHVwbGUvZXhwZWN0ZWQvcGdzdGF0dHVwbGUub3V0 IGIvY29udHJpYi9wZ3N0YXR0dXBsZS9leHBlY3RlZC9wZ3N0YXR0dXBsZS5vdXQKaW5kZXggOTE3 NmRjOThiNmEuLjY0NmM4YzExZTZlIDEwMDY0NAotLS0gYS9jb250cmliL3Bnc3RhdHR1cGxlL2V4 cGVjdGVkL3Bnc3RhdHR1cGxlLm91dAorKysgYi9jb250cmliL3Bnc3RhdHR1cGxlL2V4cGVjdGVk L3Bnc3RhdHR1cGxlLm91dApAQCAtMzAzLDMgKzMwMywxOSBAQCBkcm9wIHZpZXcgdGVzdF92aWV3 OwogZHJvcCBmb3JlaWduIHRhYmxlIHRlc3RfZm9yZWlnbl90YWJsZTsKIGRyb3Agc2VydmVyIGR1 bW15X3NlcnZlcjsKIGRyb3AgZm9yZWlnbiBkYXRhIHdyYXBwZXIgZHVtbXk7CistLSBJTkRFWF9D TEVBTlVQIG9wdGlvbiB3aXRoIHZhY3V1bSBtb3JlIHRoYW4gMSByZWxhdGlvbgorQ1JFQVRFIFRB QkxFIHZhY19pbmRleF9jbGVhbnVwX29uKGkgSU5UIFBSSU1BUlkgS0VZKSBXSVRIIChhdXRvdmFj dXVtX2VuYWJsZWQ9ZmFsc2UsIHZhY3V1bV9pbmRleF9jbGVhbnVwPXRydWUpOworSU5TRVJUIElO VE8gdmFjX2luZGV4X2NsZWFudXBfb24gU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKTsK K0NSRUFURSBUQUJMRSB2YWNfaW5kZXhfY2xlYW51cF9vZmYoaSBJTlQgUFJJTUFSWSBLRVkpIFdJ VEggKGF1dG92YWN1dW1fZW5hYmxlZD1mYWxzZSwgdmFjdXVtX2luZGV4X2NsZWFudXA9ZmFsc2Up OworSU5TRVJUIElOVE8gdmFjX2luZGV4X2NsZWFudXBfb2ZmIFNFTEVDVCBnZW5lcmF0ZV9zZXJp ZXMoMSwgMTAwMCk7CitERUxFVEUgRlJPTSB2YWNfaW5kZXhfY2xlYW51cF9vbjsKK0RFTEVURSBG Uk9NIHZhY19pbmRleF9jbGVhbnVwX29mZjsKK1ZBQ1VVTSAoQU5BTFlaRSkgdmFjX2luZGV4X2Ns ZWFudXBfb24sIHZhY19pbmRleF9jbGVhbnVwX29mZjsKK1NFTEVDVCBkZWxldGVkX3BhZ2VzID0g MCBGUk9NIHBnc3RhdGluZGV4KCd2YWNfaW5kZXhfY2xlYW51cF9vZmZfcGtleScpOworID9jb2x1 bW4/IAorLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworRFJPUCBUQUJMRSB2YWNfaW5kZXhfY2xl YW51cF9vbjsKK0RST1AgVEFCTEUgdmFjX2luZGV4X2NsZWFudXBfb2ZmOwpkaWZmIC0tZ2l0IGEv Y29udHJpYi9wZ3N0YXR0dXBsZS9zcWwvcGdzdGF0dHVwbGUuc3FsIGIvY29udHJpYi9wZ3N0YXR0 dXBsZS9zcWwvcGdzdGF0dHVwbGUuc3FsCmluZGV4IDdlNzJjNTY3YTA2Li42NjAyODBlZTI0NyAx MDA2NDQKLS0tIGEvY29udHJpYi9wZ3N0YXR0dXBsZS9zcWwvcGdzdGF0dHVwbGUuc3FsCisrKyBi L2NvbnRyaWIvcGdzdGF0dHVwbGUvc3FsL3Bnc3RhdHR1cGxlLnNxbApAQCAtMTM2LDMgKzEzNiwx NSBAQCBkcm9wIHZpZXcgdGVzdF92aWV3OwogZHJvcCBmb3JlaWduIHRhYmxlIHRlc3RfZm9yZWln bl90YWJsZTsKIGRyb3Agc2VydmVyIGR1bW15X3NlcnZlcjsKIGRyb3AgZm9yZWlnbiBkYXRhIHdy YXBwZXIgZHVtbXk7CisKKy0tIElOREVYX0NMRUFOVVAgb3B0aW9uIHdpdGggdmFjdXVtIG1vcmUg dGhhbiAxIHJlbGF0aW9uCitDUkVBVEUgVEFCTEUgdmFjX2luZGV4X2NsZWFudXBfb24oaSBJTlQg UFJJTUFSWSBLRVkpIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZD1mYWxzZSwgdmFjdXVtX2luZGV4 X2NsZWFudXA9dHJ1ZSk7CitJTlNFUlQgSU5UTyB2YWNfaW5kZXhfY2xlYW51cF9vbiBTRUxFQ1Qg Z2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApOworQ1JFQVRFIFRBQkxFIHZhY19pbmRleF9jbGVhbnVw X29mZihpIElOVCBQUklNQVJZIEtFWSkgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkPWZhbHNlLCB2 YWN1dW1faW5kZXhfY2xlYW51cD1mYWxzZSk7CitJTlNFUlQgSU5UTyB2YWNfaW5kZXhfY2xlYW51 cF9vZmYgU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKTsKK0RFTEVURSBGUk9NIHZhY19p bmRleF9jbGVhbnVwX29uOworREVMRVRFIEZST00gdmFjX2luZGV4X2NsZWFudXBfb2ZmOworVkFD VVVNIChBTkFMWVpFKSB2YWNfaW5kZXhfY2xlYW51cF9vbiwgdmFjX2luZGV4X2NsZWFudXBfb2Zm OworU0VMRUNUIGRlbGV0ZWRfcGFnZXMgPSAwIEZST00gcGdzdGF0aW5kZXgoJ3ZhY19pbmRleF9j bGVhbnVwX29mZl9wa2V5Jyk7CitEUk9QIFRBQkxFIHZhY19pbmRleF9jbGVhbnVwX29uOworRFJP UCBUQUJMRSB2YWNfaW5kZXhfY2xlYW51cF9vZmY7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9j b21tYW5kcy9hbmFseXplLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9hbmFseXplLmMKaW5kZXgg NGZmZmI3NmU1NTcuLjQ3OWMyNDEyMjgwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5k cy9hbmFseXplLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYW5hbHl6ZS5jCkBAIC0xMDcs NyArMTA3LDcgQEAgc3RhdGljIERhdHVtIGluZF9mZXRjaF9mdW5jKFZhY0F0dHJTdGF0c1Agc3Rh dHMsIGludCByb3dudW0sIGJvb2wgKmlzTnVsbCk7CiAgKi8KIHZvaWQKIGFuYWx5emVfcmVsKE9p ZCByZWxpZCwgUmFuZ2VWYXIgKnJlbGF0aW9uLAotCQkJVmFjdXVtUGFyYW1zICpwYXJhbXMsIExp c3QgKnZhX2NvbHMsIGJvb2wgaW5fb3V0ZXJfeGFjdCwKKwkJCVZhY3V1bVBhcmFtcyBwYXJhbXMs IExpc3QgKnZhX2NvbHMsIGJvb2wgaW5fb3V0ZXJfeGFjdCwKIAkJCUJ1ZmZlckFjY2Vzc1N0cmF0 ZWd5IGJzdHJhdGVneSkKIHsKIAlSZWxhdGlvbglvbmVyZWw7CkBAIC0xMTYsNyArMTE2LDcgQEAg YW5hbHl6ZV9yZWwoT2lkIHJlbGlkLCBSYW5nZVZhciAqcmVsYXRpb24sCiAJQmxvY2tOdW1iZXIg cmVscGFnZXMgPSAwOwogCiAJLyogU2VsZWN0IGxvZ2dpbmcgbGV2ZWwgKi8KLQlpZiAocGFyYW1z LT5vcHRpb25zICYgVkFDT1BUX1ZFUkJPU0UpCisJaWYgKHBhcmFtcy5vcHRpb25zICYgVkFDT1BU X1ZFUkJPU0UpCiAJCWVsZXZlbCA9IElORk87CiAJZWxzZQogCQllbGV2ZWwgPSBERUJVRzI7CkBA IC0xMzgsOCArMTM4LDggQEAgYW5hbHl6ZV9yZWwoT2lkIHJlbGlkLCBSYW5nZVZhciAqcmVsYXRp b24sCiAJICoKIAkgKiBNYWtlIHN1cmUgdG8gZ2VuZXJhdGUgb25seSBsb2dzIGZvciBBTkFMWVpF IGluIHRoaXMgY2FzZS4KIAkgKi8KLQlvbmVyZWwgPSB2YWN1dW1fb3Blbl9yZWxhdGlvbihyZWxp ZCwgcmVsYXRpb24sIHBhcmFtcy0+b3B0aW9ucyAmIH4oVkFDT1BUX1ZBQ1VVTSksCi0JCQkJCQkJ CSAgcGFyYW1zLT5sb2dfbWluX2R1cmF0aW9uID49IDAsCisJb25lcmVsID0gdmFjdXVtX29wZW5f cmVsYXRpb24ocmVsaWQsIHJlbGF0aW9uLCBwYXJhbXMub3B0aW9ucyAmIH4oVkFDT1BUX1ZBQ1VV TSksCisJCQkJCQkJCSAgcGFyYW1zLmxvZ19taW5fZHVyYXRpb24gPj0gMCwKIAkJCQkJCQkJICBT aGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2spOwogCiAJLyogbGVhdmUgaWYgcmVsYXRpb24gY291bGQg bm90IGJlIG9wZW5lZCBvciBsb2NrZWQgKi8KQEAgLTE1NSw3ICsxNTUsNyBAQCBhbmFseXplX3Jl bChPaWQgcmVsaWQsIFJhbmdlVmFyICpyZWxhdGlvbiwKIAkgKi8KIAlpZiAoIXZhY3V1bV9pc19w ZXJtaXR0ZWRfZm9yX3JlbGF0aW9uKFJlbGF0aW9uR2V0UmVsaWQob25lcmVsKSwKIAkJCQkJCQkJ CQkgIG9uZXJlbC0+cmRfcmVsLAotCQkJCQkJCQkJCSAgcGFyYW1zLT5vcHRpb25zICYgflZBQ09Q VF9WQUNVVU0pKQorCQkJCQkJCQkJCSAgcGFyYW1zLm9wdGlvbnMgJiB+VkFDT1BUX1ZBQ1VVTSkp CiAJewogCQlyZWxhdGlvbl9jbG9zZShvbmVyZWwsIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jayk7 CiAJCXJldHVybjsKQEAgLTIyNyw3ICsyMjcsNyBAQCBhbmFseXplX3JlbChPaWQgcmVsaWQsIFJh bmdlVmFyICpyZWxhdGlvbiwKIAllbHNlCiAJewogCQkvKiBObyBuZWVkIGZvciBhIFdBUk5JTkcg aWYgd2UgYWxyZWFkeSBjb21wbGFpbmVkIGR1cmluZyBWQUNVVU0gKi8KLQkJaWYgKCEocGFyYW1z LT5vcHRpb25zICYgVkFDT1BUX1ZBQ1VVTSkpCisJCWlmICghKHBhcmFtcy5vcHRpb25zICYgVkFD T1BUX1ZBQ1VVTSkpCiAJCQllcmVwb3J0KFdBUk5JTkcsCiAJCQkJCShlcnJtc2coInNraXBwaW5n IFwiJXNcIiAtLS0gY2Fubm90IGFuYWx5emUgbm9uLXRhYmxlcyBvciBzcGVjaWFsIHN5c3RlbSB0 YWJsZXMiLAogCQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKG9uZXJlbCkpKSk7CkBAIC0y NDYsMTQgKzI0NiwxNCBAQCBhbmFseXplX3JlbChPaWQgcmVsaWQsIFJhbmdlVmFyICpyZWxhdGlv biwKIAkgKiB0YWJsZXMsIHdoaWNoIGRvbid0IGNvbnRhaW4gYW55IHJvd3MuCiAJICovCiAJaWYg KG9uZXJlbC0+cmRfcmVsLT5yZWxraW5kICE9IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCi0J CWRvX2FuYWx5emVfcmVsKG9uZXJlbCwgcGFyYW1zLCB2YV9jb2xzLCBhY3F1aXJlZnVuYywKKwkJ ZG9fYW5hbHl6ZV9yZWwob25lcmVsLCAmcGFyYW1zLCB2YV9jb2xzLCBhY3F1aXJlZnVuYywKIAkJ CQkJICAgcmVscGFnZXMsIGZhbHNlLCBpbl9vdXRlcl94YWN0LCBlbGV2ZWwpOwogCiAJLyoKIAkg KiBJZiB0aGVyZSBhcmUgY2hpbGQgdGFibGVzLCBkbyByZWN1cnNpdmUgQU5BTFlaRS4KIAkgKi8K IAlpZiAob25lcmVsLT5yZF9yZWwtPnJlbGhhc3N1YmNsYXNzKQotCQlkb19hbmFseXplX3JlbChv bmVyZWwsIHBhcmFtcywgdmFfY29scywgYWNxdWlyZWZ1bmMsIHJlbHBhZ2VzLAorCQlkb19hbmFs eXplX3JlbChvbmVyZWwsICZwYXJhbXMsIHZhX2NvbHMsIGFjcXVpcmVmdW5jLCByZWxwYWdlcywK IAkJCQkJICAgdHJ1ZSwgaW5fb3V0ZXJfeGFjdCwgZWxldmVsKTsKIAogCS8qCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3Zh Y3V1bS5jCmluZGV4IDMzYTMzYmY2YjFjLi45NDQ5YTMxYTZhNCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvdmFjdXVtLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVt LmMKQEAgLTEyMyw3ICsxMjMsNyBAQCBzdGF0aWMgdm9pZCB2YWNfdHJ1bmNhdGVfY2xvZyhUcmFu c2FjdGlvbklkIGZyb3plblhJRCwKIAkJCQkJCQkgIE11bHRpWGFjdElkIG1pbk11bHRpLAogCQkJ CQkJCSAgVHJhbnNhY3Rpb25JZCBsYXN0U2FuZUZyb3plblhpZCwKIAkJCQkJCQkgIE11bHRpWGFj dElkIGxhc3RTYW5lTWluTXVsdGkpOwotc3RhdGljIGJvb2wgdmFjdXVtX3JlbChPaWQgcmVsaWQs IFJhbmdlVmFyICpyZWxhdGlvbiwgVmFjdXVtUGFyYW1zICpwYXJhbXMsCitzdGF0aWMgYm9vbCB2 YWN1dW1fcmVsKE9pZCByZWxpZCwgUmFuZ2VWYXIgKnJlbGF0aW9uLCBWYWN1dW1QYXJhbXMgcGFy YW1zLAogCQkJCQkgICBCdWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3kpOwogc3RhdGljIGRv dWJsZSBjb21wdXRlX3BhcmFsbGVsX2RlbGF5KHZvaWQpOwogc3RhdGljIFZhY09wdFZhbHVlIGdl dF92YWNvcHR2YWxfZnJvbV9ib29sZWFuKERlZkVsZW0gKmRlZik7CkBAIC00NjQsNyArNDY0LDcg QEAgRXhlY1ZhY3V1bShQYXJzZVN0YXRlICpwc3RhdGUsIFZhY3V1bVN0bXQgKnZhY3N0bXQsIGJv b2wgaXNUb3BMZXZlbCkKIAl9CiAKIAkvKiBOb3cgZ28gdGhyb3VnaCB0aGUgY29tbW9uIHJvdXRp bmUgKi8KLQl2YWN1dW0odmFjc3RtdC0+cmVscywgJnBhcmFtcywgYnN0cmF0ZWd5LCB2YWNfY29u dGV4dCwgaXNUb3BMZXZlbCk7CisJdmFjdXVtKHZhY3N0bXQtPnJlbHMsIHBhcmFtcywgYnN0cmF0 ZWd5LCB2YWNfY29udGV4dCwgaXNUb3BMZXZlbCk7CiAKIAkvKiBGaW5hbGx5LCBjbGVhbiB1cCB0 aGUgdmFjdXVtIG1lbW9yeSBjb250ZXh0ICovCiAJTWVtb3J5Q29udGV4dERlbGV0ZSh2YWNfY29u dGV4dCk7CkBAIC00OTMsNyArNDkzLDcgQEAgRXhlY1ZhY3V1bShQYXJzZVN0YXRlICpwc3RhdGUs IFZhY3V1bVN0bXQgKnZhY3N0bXQsIGJvb2wgaXNUb3BMZXZlbCkKICAqIG1lbW9yeSBjb250ZXh0 IHRoYXQgd2lsbCBub3QgZGlzYXBwZWFyIGF0IHRyYW5zYWN0aW9uIGNvbW1pdC4KICAqLwogdm9p ZAotdmFjdXVtKExpc3QgKnJlbGF0aW9ucywgVmFjdXVtUGFyYW1zICpwYXJhbXMsIEJ1ZmZlckFj Y2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSwKK3ZhY3V1bShMaXN0ICpyZWxhdGlvbnMsIFZhY3V1bVBh cmFtcyBwYXJhbXMsIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSwKIAkgICBNZW1vcnlD b250ZXh0IHZhY19jb250ZXh0LCBib29sIGlzVG9wTGV2ZWwpCiB7CiAJc3RhdGljIGJvb2wgaW5f dmFjdXVtID0gZmFsc2U7CkBAIC01MDIsOSArNTAyLDcgQEAgdmFjdXVtKExpc3QgKnJlbGF0aW9u cywgVmFjdXVtUGFyYW1zICpwYXJhbXMsIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSwK IAl2b2xhdGlsZSBib29sIGluX291dGVyX3hhY3QsCiAJCQkJdXNlX293bl94YWN0czsKIAotCUFz c2VydChwYXJhbXMgIT0gTlVMTCk7Ci0KLQlzdG10dHlwZSA9IChwYXJhbXMtPm9wdGlvbnMgJiBW QUNPUFRfVkFDVVVNKSA/ICJWQUNVVU0iIDogIkFOQUxZWkUiOworCXN0bXR0eXBlID0gKHBhcmFt cy5vcHRpb25zICYgVkFDT1BUX1ZBQ1VVTSkgPyAiVkFDVVVNIiA6ICJBTkFMWVpFIjsKIAogCS8q CiAJICogV2UgY2Fubm90IHJ1biBWQUNVVU0gaW5zaWRlIGEgdXNlciB0cmFuc2FjdGlvbiBibG9j azsgaWYgd2Ugd2VyZSBpbnNpZGUKQEAgLTUxNCw3ICs1MTIsNyBAQCB2YWN1dW0oTGlzdCAqcmVs YXRpb25zLCBWYWN1dW1QYXJhbXMgKnBhcmFtcywgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0 ZWd5LAogCSAqCiAJICogQU5BTFlaRSAod2l0aG91dCBWQUNVVU0pIGNhbiBydW4gZWl0aGVyIHdh eS4KIAkgKi8KLQlpZiAocGFyYW1zLT5vcHRpb25zICYgVkFDT1BUX1ZBQ1VVTSkKKwlpZiAocGFy YW1zLm9wdGlvbnMgJiBWQUNPUFRfVkFDVVVNKQogCXsKIAkJUHJldmVudEluVHJhbnNhY3Rpb25C bG9jayhpc1RvcExldmVsLCBzdG10dHlwZSk7CiAJCWluX291dGVyX3hhY3QgPSBmYWxzZTsKQEAg LTUzNyw3ICs1MzUsNyBAQCB2YWN1dW0oTGlzdCAqcmVsYXRpb25zLCBWYWN1dW1QYXJhbXMgKnBh cmFtcywgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWd5LAogCSAqIEJ1aWxkIGxpc3Qgb2Yg cmVsYXRpb24ocykgdG8gcHJvY2VzcywgcHV0dGluZyBhbnkgbmV3IGRhdGEgaW4KIAkgKiB2YWNf Y29udGV4dCBmb3Igc2FmZWtlZXBpbmcuCiAJICovCi0JaWYgKHBhcmFtcy0+b3B0aW9ucyAmIFZB Q09QVF9PTkxZX0RBVEFCQVNFX1NUQVRTKQorCWlmIChwYXJhbXMub3B0aW9ucyAmIFZBQ09QVF9P TkxZX0RBVEFCQVNFX1NUQVRTKQogCXsKIAkJLyogV2UgZG9uJ3QgcHJvY2VzcyBhbnkgdGFibGVz IGluIHRoaXMgY2FzZSAqLwogCQlBc3NlcnQocmVsYXRpb25zID09IE5JTCk7CkBAIC01NTMsNyAr NTUxLDcgQEAgdmFjdXVtKExpc3QgKnJlbGF0aW9ucywgVmFjdXVtUGFyYW1zICpwYXJhbXMsIEJ1 ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSwKIAkJCUxpc3QJICAgKnN1Ymxpc3Q7CiAJCQlN ZW1vcnlDb250ZXh0IG9sZF9jb250ZXh0OwogCi0JCQlzdWJsaXN0ID0gZXhwYW5kX3ZhY3V1bV9y ZWwodnJlbCwgdmFjX2NvbnRleHQsIHBhcmFtcy0+b3B0aW9ucyk7CisJCQlzdWJsaXN0ID0gZXhw YW5kX3ZhY3V1bV9yZWwodnJlbCwgdmFjX2NvbnRleHQsIHBhcmFtcy5vcHRpb25zKTsKIAkJCW9s ZF9jb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHZhY19jb250ZXh0KTsKIAkJCW5ld3Jl bHMgPSBsaXN0X2NvbmNhdChuZXdyZWxzLCBzdWJsaXN0KTsKIAkJCU1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhvbGRfY29udGV4dCk7CkBAIC01NjEsNyArNTU5LDcgQEAgdmFjdXVtKExpc3QgKnJlbGF0 aW9ucywgVmFjdXVtUGFyYW1zICpwYXJhbXMsIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVn eSwKIAkJcmVsYXRpb25zID0gbmV3cmVsczsKIAl9CiAJZWxzZQotCQlyZWxhdGlvbnMgPSBnZXRf YWxsX3ZhY3V1bV9yZWxzKHZhY19jb250ZXh0LCBwYXJhbXMtPm9wdGlvbnMpOworCQlyZWxhdGlv bnMgPSBnZXRfYWxsX3ZhY3V1bV9yZWxzKHZhY19jb250ZXh0LCBwYXJhbXMub3B0aW9ucyk7CiAK IAkvKgogCSAqIERlY2lkZSB3aGV0aGVyIHdlIG5lZWQgdG8gc3RhcnQvY29tbWl0IG91ciBvd24g dHJhbnNhY3Rpb25zLgpAQCAtNTc3LDExICs1NzUsMTEgQEAgdmFjdXVtKExpc3QgKnJlbGF0aW9u cywgVmFjdXVtUGFyYW1zICpwYXJhbXMsIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSwK IAkgKiB0cmFuc2FjdGlvbiBibG9jaywgYW5kIGFsc28gaW4gYW4gYXV0b3ZhY3V1bSB3b3JrZXIs IHVzZSBvd24KIAkgKiB0cmFuc2FjdGlvbnMgc28gd2UgY2FuIHJlbGVhc2UgbG9ja3Mgc29vbmVy LgogCSAqLwotCWlmIChwYXJhbXMtPm9wdGlvbnMgJiBWQUNPUFRfVkFDVVVNKQorCWlmIChwYXJh bXMub3B0aW9ucyAmIFZBQ09QVF9WQUNVVU0pCiAJCXVzZV9vd25feGFjdHMgPSB0cnVlOwogCWVs c2UKIAl7Ci0JCUFzc2VydChwYXJhbXMtPm9wdGlvbnMgJiBWQUNPUFRfQU5BTFlaRSk7CisJCUFz c2VydChwYXJhbXMub3B0aW9ucyAmIFZBQ09QVF9BTkFMWVpFKTsKIAkJaWYgKEFtQXV0b1ZhY3V1 bVdvcmtlclByb2Nlc3MoKSkKIAkJCXVzZV9vd25feGFjdHMgPSB0cnVlOwogCQllbHNlIGlmIChp bl9vdXRlcl94YWN0KQpAQCAtNjMyLDEzICs2MzAsMTMgQEAgdmFjdXVtKExpc3QgKnJlbGF0aW9u cywgVmFjdXVtUGFyYW1zICpwYXJhbXMsIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSwK IAkJewogCQkJVmFjdXVtUmVsYXRpb24gKnZyZWwgPSBsZmlyc3Rfbm9kZShWYWN1dW1SZWxhdGlv biwgY3VyKTsKIAotCQkJaWYgKHBhcmFtcy0+b3B0aW9ucyAmIFZBQ09QVF9WQUNVVU0pCisJCQlp ZiAocGFyYW1zLm9wdGlvbnMgJiBWQUNPUFRfVkFDVVVNKQogCQkJewogCQkJCWlmICghdmFjdXVt X3JlbCh2cmVsLT5vaWQsIHZyZWwtPnJlbGF0aW9uLCBwYXJhbXMsIGJzdHJhdGVneSkpCiAJCQkJ CWNvbnRpbnVlOwogCQkJfQogCi0JCQlpZiAocGFyYW1zLT5vcHRpb25zICYgVkFDT1BUX0FOQUxZ WkUpCisJCQlpZiAocGFyYW1zLm9wdGlvbnMgJiBWQUNPUFRfQU5BTFlaRSkKIAkJCXsKIAkJCQkv KgogCQkJCSAqIElmIHVzaW5nIHNlcGFyYXRlIHhhY3RzLCBzdGFydCBvbmUgZm9yIGFuYWx5emUu IE90aGVyd2lzZSwKQEAgLTcwMiw4ICs3MDAsOCBAQCB2YWN1dW0oTGlzdCAqcmVsYXRpb25zLCBW YWN1dW1QYXJhbXMgKnBhcmFtcywgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWd5LAogCQlT dGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOwogCX0KIAotCWlmICgocGFyYW1zLT5vcHRpb25zICYg VkFDT1BUX1ZBQ1VVTSkgJiYKLQkJIShwYXJhbXMtPm9wdGlvbnMgJiBWQUNPUFRfU0tJUF9EQVRB QkFTRV9TVEFUUykpCisJaWYgKChwYXJhbXMub3B0aW9ucyAmIFZBQ09QVF9WQUNVVU0pICYmCisJ CSEocGFyYW1zLm9wdGlvbnMgJiBWQUNPUFRfU0tJUF9EQVRBQkFTRV9TVEFUUykpCiAJewogCQkv KgogCQkgKiBVcGRhdGUgcGdfZGF0YWJhc2UuZGF0ZnJvemVueGlkLCBhbmQgdHJ1bmNhdGUgcGdf eGFjdCBpZiBwb3NzaWJsZS4KQEAgLTE5OTcsNyArMTk5NSw3IEBAIHZhY190cnVuY2F0ZV9jbG9n KFRyYW5zYWN0aW9uSWQgZnJvemVuWElELAogICoJCUF0IGVudHJ5IGFuZCBleGl0LCB3ZSBhcmUg bm90IGluc2lkZSBhIHRyYW5zYWN0aW9uLgogICovCiBzdGF0aWMgYm9vbAotdmFjdXVtX3JlbChP aWQgcmVsaWQsIFJhbmdlVmFyICpyZWxhdGlvbiwgVmFjdXVtUGFyYW1zICpwYXJhbXMsCit2YWN1 dW1fcmVsKE9pZCByZWxpZCwgUmFuZ2VWYXIgKnJlbGF0aW9uLCBWYWN1dW1QYXJhbXMgcGFyYW1z LAogCQkgICBCdWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3kpCiB7CiAJTE9DS01PREUJbG1v ZGU7CkBAIC0yMDA5LDEyICsyMDA3LDEwIEBAIHZhY3V1bV9yZWwoT2lkIHJlbGlkLCBSYW5nZVZh ciAqcmVsYXRpb24sIFZhY3V1bVBhcmFtcyAqcGFyYW1zLAogCWludAkJCXNhdmVfc2VjX2NvbnRl eHQ7CiAJaW50CQkJc2F2ZV9uZXN0bGV2ZWw7CiAKLQlBc3NlcnQocGFyYW1zICE9IE5VTEwpOwot CiAJLyogQmVnaW4gYSB0cmFuc2FjdGlvbiBmb3IgdmFjdXVtaW5nIHRoaXMgcmVsYXRpb24gKi8K IAlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOwogCi0JaWYgKCEocGFyYW1zLT5vcHRpb25zICYg VkFDT1BUX0ZVTEwpKQorCWlmICghKHBhcmFtcy5vcHRpb25zICYgVkFDT1BUX0ZVTEwpKQogCXsK IAkJLyoKIAkJICogSW4gbGF6eSB2YWN1dW0sIHdlIGNhbiBzZXQgdGhlIFBST0NfSU5fVkFDVVVN IGZsYWcsIHdoaWNoIGxldHMKQEAgLTIwNDAsNyArMjAzNiw3IEBAIHZhY3V1bV9yZWwoT2lkIHJl bGlkLCBSYW5nZVZhciAqcmVsYXRpb24sIFZhY3V1bVBhcmFtcyAqcGFyYW1zLAogCQkgKi8KIAkJ TFdMb2NrQWNxdWlyZShQcm9jQXJyYXlMb2NrLCBMV19FWENMVVNJVkUpOwogCQlNeVByb2MtPnN0 YXR1c0ZsYWdzIHw9IFBST0NfSU5fVkFDVVVNOwotCQlpZiAocGFyYW1zLT5pc193cmFwYXJvdW5k KQorCQlpZiAocGFyYW1zLmlzX3dyYXBhcm91bmQpCiAJCQlNeVByb2MtPnN0YXR1c0ZsYWdzIHw9 IFBST0NfVkFDVVVNX0ZPUl9XUkFQQVJPVU5EOwogCQlQcm9jR2xvYmFsLT5zdGF0dXNGbGFnc1tN eVByb2MtPnBneGFjdG9mZl0gPSBNeVByb2MtPnN0YXR1c0ZsYWdzOwogCQlMV0xvY2tSZWxlYXNl KFByb2NBcnJheUxvY2spOwpAQCAtMjA2NCwxMiArMjA2MCwxMiBAQCB2YWN1dW1fcmVsKE9pZCBy ZWxpZCwgUmFuZ2VWYXIgKnJlbGF0aW9uLCBWYWN1dW1QYXJhbXMgKnBhcmFtcywKIAkgKiB2YWN1 dW0sIGJ1dCBqdXN0IFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jayBmb3IgY29uY3VycmVudCB2YWN1 dW0uIEVpdGhlcgogCSAqIHdheSwgd2UgY2FuIGJlIHN1cmUgdGhhdCBubyBvdGhlciBiYWNrZW5k IGlzIHZhY3V1bWluZyB0aGUgc2FtZSB0YWJsZS4KIAkgKi8KLQlsbW9kZSA9IChwYXJhbXMtPm9w dGlvbnMgJiBWQUNPUFRfRlVMTCkgPworCWxtb2RlID0gKHBhcmFtcy5vcHRpb25zICYgVkFDT1BU X0ZVTEwpID8KIAkJQWNjZXNzRXhjbHVzaXZlTG9jayA6IFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9j azsKIAogCS8qIG9wZW4gdGhlIHJlbGF0aW9uIGFuZCBnZXQgdGhlIGFwcHJvcHJpYXRlIGxvY2sg b24gaXQgKi8KLQlyZWwgPSB2YWN1dW1fb3Blbl9yZWxhdGlvbihyZWxpZCwgcmVsYXRpb24sIHBh cmFtcy0+b3B0aW9ucywKLQkJCQkJCQkgICBwYXJhbXMtPmxvZ19taW5fZHVyYXRpb24gPj0gMCwg bG1vZGUpOworCXJlbCA9IHZhY3V1bV9vcGVuX3JlbGF0aW9uKHJlbGlkLCByZWxhdGlvbiwgcGFy YW1zLm9wdGlvbnMsCisJCQkJCQkJICAgcGFyYW1zLmxvZ19taW5fZHVyYXRpb24gPj0gMCwgbG1v ZGUpOwogCiAJLyogbGVhdmUgaWYgcmVsYXRpb24gY291bGQgbm90IGJlIG9wZW5lZCBvciBsb2Nr ZWQgKi8KIAlpZiAoIXJlbCkKQEAgLTIwODQsOCArMjA4MCw4IEBAIHZhY3V1bV9yZWwoT2lkIHJl bGlkLCBSYW5nZVZhciAqcmVsYXRpb24sIFZhY3V1bVBhcmFtcyAqcGFyYW1zLAogCSAqIFRoaXMg aXMgb25seSBzYWZlIHRvIGRvIGJlY2F1c2Ugd2UgaG9sZCBhIHNlc3Npb24gbG9jayBvbiB0aGUg bWFpbgogCSAqIHJlbGF0aW9uIHRoYXQgcHJldmVudHMgY29uY3VycmVudCBkZWxldGlvbi4KIAkg Ki8KLQlpZiAoT2lkSXNWYWxpZChwYXJhbXMtPnRvYXN0X3BhcmVudCkpCi0JCXByaXZfcmVsaWQg PSBwYXJhbXMtPnRvYXN0X3BhcmVudDsKKwlpZiAoT2lkSXNWYWxpZChwYXJhbXMudG9hc3RfcGFy ZW50KSkKKwkJcHJpdl9yZWxpZCA9IHBhcmFtcy50b2FzdF9wYXJlbnQ7CiAJZWxzZQogCQlwcml2 X3JlbGlkID0gUmVsYXRpb25HZXRSZWxpZChyZWwpOwogCkBAIC0yMDk4LDcgKzIwOTQsNyBAQCB2 YWN1dW1fcmVsKE9pZCByZWxpZCwgUmFuZ2VWYXIgKnJlbGF0aW9uLCBWYWN1dW1QYXJhbXMgKnBh cmFtcywKIAkgKi8KIAlpZiAoIXZhY3V1bV9pc19wZXJtaXR0ZWRfZm9yX3JlbGF0aW9uKHByaXZf cmVsaWQsCiAJCQkJCQkJCQkJICByZWwtPnJkX3JlbCwKLQkJCQkJCQkJCQkgIHBhcmFtcy0+b3B0 aW9ucyAmIH5WQUNPUFRfQU5BTFlaRSkpCisJCQkJCQkJCQkJICBwYXJhbXMub3B0aW9ucyAmIH5W QUNPUFRfQU5BTFlaRSkpCiAJewogCQlyZWxhdGlvbl9jbG9zZShyZWwsIGxtb2RlKTsKIAkJUG9w QWN0aXZlU25hcHNob3QoKTsKQEAgLTIxNjksNyArMjE2NSw3IEBAIHZhY3V1bV9yZWwoT2lkIHJl bGlkLCBSYW5nZVZhciAqcmVsYXRpb24sIFZhY3V1bVBhcmFtcyAqcGFyYW1zLAogCSAqIFNldCBp bmRleF9jbGVhbnVwIG9wdGlvbiBiYXNlZCBvbiBpbmRleF9jbGVhbnVwIHJlbG9wdGlvbiBpZiBp dCB3YXNuJ3QKIAkgKiBzcGVjaWZpZWQgaW4gVkFDVVVNIGNvbW1hbmQsIG9yIHdoZW4gcnVubmlu ZyBpbiBhbiBhdXRvdmFjdXVtIHdvcmtlcgogCSAqLwotCWlmIChwYXJhbXMtPmluZGV4X2NsZWFu dXAgPT0gVkFDT1BUVkFMVUVfVU5TUEVDSUZJRUQpCisJaWYgKHBhcmFtcy5pbmRleF9jbGVhbnVw ID09IFZBQ09QVFZBTFVFX1VOU1BFQ0lGSUVEKQogCXsKIAkJU3RkUmRPcHRJbmRleENsZWFudXAg dmFjdXVtX2luZGV4X2NsZWFudXA7CiAKQEAgLTIxODAsMTQgKzIxNzYsMTQgQEAgdmFjdXVtX3Jl bChPaWQgcmVsaWQsIFJhbmdlVmFyICpyZWxhdGlvbiwgVmFjdXVtUGFyYW1zICpwYXJhbXMsCiAJ CQkJKChTdGRSZE9wdGlvbnMgKikgcmVsLT5yZF9vcHRpb25zKS0+dmFjdXVtX2luZGV4X2NsZWFu dXA7CiAKIAkJaWYgKHZhY3V1bV9pbmRleF9jbGVhbnVwID09IFNURFJEX09QVElPTl9WQUNVVU1f SU5ERVhfQ0xFQU5VUF9BVVRPKQotCQkJcGFyYW1zLT5pbmRleF9jbGVhbnVwID0gVkFDT1BUVkFM VUVfQVVUTzsKKwkJCXBhcmFtcy5pbmRleF9jbGVhbnVwID0gVkFDT1BUVkFMVUVfQVVUTzsKIAkJ ZWxzZSBpZiAodmFjdXVtX2luZGV4X2NsZWFudXAgPT0gU1REUkRfT1BUSU9OX1ZBQ1VVTV9JTkRF WF9DTEVBTlVQX09OKQotCQkJcGFyYW1zLT5pbmRleF9jbGVhbnVwID0gVkFDT1BUVkFMVUVfRU5B QkxFRDsKKwkJCXBhcmFtcy5pbmRleF9jbGVhbnVwID0gVkFDT1BUVkFMVUVfRU5BQkxFRDsKIAkJ ZWxzZQogCQl7CiAJCQlBc3NlcnQodmFjdXVtX2luZGV4X2NsZWFudXAgPT0KIAkJCQkgICBTVERS RF9PUFRJT05fVkFDVVVNX0lOREVYX0NMRUFOVVBfT0ZGKTsKLQkJCXBhcmFtcy0+aW5kZXhfY2xl YW51cCA9IFZBQ09QVFZBTFVFX0RJU0FCTEVEOworCQkJcGFyYW1zLmluZGV4X2NsZWFudXAgPSBW QUNPUFRWQUxVRV9ESVNBQkxFRDsKIAkJfQogCX0KIApAQCAtMjE5NywyOCArMjE5MywyOCBAQCB2 YWN1dW1fcmVsKE9pZCByZWxpZCwgUmFuZ2VWYXIgKnJlbGF0aW9uLCBWYWN1dW1QYXJhbXMgKnBh cmFtcywKIAkgKi8KIAlpZiAocmVsLT5yZF9vcHRpb25zICE9IE5VTEwgJiYKIAkJKChTdGRSZE9w dGlvbnMgKikgcmVsLT5yZF9vcHRpb25zKS0+dmFjdXVtX21heF9lYWdlcl9mcmVlemVfZmFpbHVy ZV9yYXRlID49IDApCi0JCXBhcmFtcy0+bWF4X2VhZ2VyX2ZyZWV6ZV9mYWlsdXJlX3JhdGUgPQor CQlwYXJhbXMubWF4X2VhZ2VyX2ZyZWV6ZV9mYWlsdXJlX3JhdGUgPQogCQkJKChTdGRSZE9wdGlv bnMgKikgcmVsLT5yZF9vcHRpb25zKS0+dmFjdXVtX21heF9lYWdlcl9mcmVlemVfZmFpbHVyZV9y YXRlOwogCiAJLyoKIAkgKiBTZXQgdHJ1bmNhdGUgb3B0aW9uIGJhc2VkIG9uIHRydW5jYXRlIHJl bG9wdGlvbiBvciBHVUMgaWYgaXQgd2Fzbid0CiAJICogc3BlY2lmaWVkIGluIFZBQ1VVTSBjb21t YW5kLCBvciB3aGVuIHJ1bm5pbmcgaW4gYW4gYXV0b3ZhY3V1bSB3b3JrZXIKIAkgKi8KLQlpZiAo cGFyYW1zLT50cnVuY2F0ZSA9PSBWQUNPUFRWQUxVRV9VTlNQRUNJRklFRCkKKwlpZiAocGFyYW1z LnRydW5jYXRlID09IFZBQ09QVFZBTFVFX1VOU1BFQ0lGSUVEKQogCXsKIAkJU3RkUmRPcHRpb25z ICpvcHRzID0gKFN0ZFJkT3B0aW9ucyAqKSByZWwtPnJkX29wdGlvbnM7CiAKIAkJaWYgKG9wdHMg JiYgb3B0cy0+dmFjdXVtX3RydW5jYXRlX3NldCkKIAkJewogCQkJaWYgKG9wdHMtPnZhY3V1bV90 cnVuY2F0ZSkKLQkJCQlwYXJhbXMtPnRydW5jYXRlID0gVkFDT1BUVkFMVUVfRU5BQkxFRDsKKwkJ CQlwYXJhbXMudHJ1bmNhdGUgPSBWQUNPUFRWQUxVRV9FTkFCTEVEOwogCQkJZWxzZQotCQkJCXBh cmFtcy0+dHJ1bmNhdGUgPSBWQUNPUFRWQUxVRV9ESVNBQkxFRDsKKwkJCQlwYXJhbXMudHJ1bmNh dGUgPSBWQUNPUFRWQUxVRV9ESVNBQkxFRDsKIAkJfQogCQllbHNlIGlmICh2YWN1dW1fdHJ1bmNh dGUpCi0JCQlwYXJhbXMtPnRydW5jYXRlID0gVkFDT1BUVkFMVUVfRU5BQkxFRDsKKwkJCXBhcmFt cy50cnVuY2F0ZSA9IFZBQ09QVFZBTFVFX0VOQUJMRUQ7CiAJCWVsc2UKLQkJCXBhcmFtcy0+dHJ1 bmNhdGUgPSBWQUNPUFRWQUxVRV9ESVNBQkxFRDsKKwkJCXBhcmFtcy50cnVuY2F0ZSA9IFZBQ09Q VFZBTFVFX0RJU0FCTEVEOwogCX0KIAogCS8qCkBAIC0yMjI3LDkgKzIyMjMsOSBAQCB2YWN1dW1f cmVsKE9pZCByZWxpZCwgUmFuZ2VWYXIgKnJlbGF0aW9uLCBWYWN1dW1QYXJhbXMgKnBhcmFtcywK IAkgKiBhdXRvbWF0aWNhbGx5IHJlYnVpbHQgYnkgY2x1c3Rlcl9yZWwgc28gd2Ugc2hvdWxkbid0 IHJlY3Vyc2UgdG8gaXQsCiAJICogdW5sZXNzIFBST0NFU1NfTUFJTiBpcyBkaXNhYmxlZC4KIAkg Ki8KLQlpZiAoKHBhcmFtcy0+b3B0aW9ucyAmIFZBQ09QVF9QUk9DRVNTX1RPQVNUKSAhPSAwICYm Ci0JCSgocGFyYW1zLT5vcHRpb25zICYgVkFDT1BUX0ZVTEwpID09IDAgfHwKLQkJIChwYXJhbXMt Pm9wdGlvbnMgJiBWQUNPUFRfUFJPQ0VTU19NQUlOKSA9PSAwKSkKKwlpZiAoKHBhcmFtcy5vcHRp b25zICYgVkFDT1BUX1BST0NFU1NfVE9BU1QpICE9IDAgJiYKKwkJKChwYXJhbXMub3B0aW9ucyAm IFZBQ09QVF9GVUxMKSA9PSAwIHx8CisJCSAocGFyYW1zLm9wdGlvbnMgJiBWQUNPUFRfUFJPQ0VT U19NQUlOKSA9PSAwKSkKIAkJdG9hc3RfcmVsaWQgPSByZWwtPnJkX3JlbC0+cmVsdG9hc3RyZWxp ZDsKIAllbHNlCiAJCXRvYXN0X3JlbGlkID0gSW52YWxpZE9pZDsKQEAgLTIyNTIsMTYgKzIyNDgs MTYgQEAgdmFjdXVtX3JlbChPaWQgcmVsaWQsIFJhbmdlVmFyICpyZWxhdGlvbiwgVmFjdXVtUGFy YW1zICpwYXJhbXMsCiAJICogdGFibGUgaXMgcmVxdWlyZWQgKGUuZy4sIFBST0NFU1NfVE9BU1Qg aXMgc2V0KSwgd2UgZm9yY2UgUFJPQ0VTU19NQUlOCiAJICogdG8gYmUgc2V0IHdoZW4gd2UgcmVj dXJzZSB0byB0aGUgVE9BU1QgdGFibGUuCiAJICovCi0JaWYgKHBhcmFtcy0+b3B0aW9ucyAmIFZB Q09QVF9QUk9DRVNTX01BSU4pCisJaWYgKHBhcmFtcy5vcHRpb25zICYgVkFDT1BUX1BST0NFU1Nf TUFJTikKIAl7CiAJCS8qCiAJCSAqIERvIHRoZSBhY3R1YWwgd29yayAtLS0gZWl0aGVyIEZVTEwg b3IgImxhenkiIHZhY3V1bQogCQkgKi8KLQkJaWYgKHBhcmFtcy0+b3B0aW9ucyAmIFZBQ09QVF9G VUxMKQorCQlpZiAocGFyYW1zLm9wdGlvbnMgJiBWQUNPUFRfRlVMTCkKIAkJewogCQkJQ2x1c3Rl clBhcmFtcyBjbHVzdGVyX3BhcmFtcyA9IHswfTsKIAotCQkJaWYgKChwYXJhbXMtPm9wdGlvbnMg JiBWQUNPUFRfVkVSQk9TRSkgIT0gMCkKKwkJCWlmICgocGFyYW1zLm9wdGlvbnMgJiBWQUNPUFRf VkVSQk9TRSkgIT0gMCkKIAkJCQljbHVzdGVyX3BhcmFtcy5vcHRpb25zIHw9IENMVU9QVF9WRVJC T1NFOwogCiAJCQkvKiBWQUNVVU0gRlVMTCBpcyBub3cgYSB2YXJpYW50IG9mIENMVVNURVI7IHNl ZSBjbHVzdGVyLmMgKi8KQEAgLTIyNzEsNyArMjI2Nyw3IEBAIHZhY3V1bV9yZWwoT2lkIHJlbGlk LCBSYW5nZVZhciAqcmVsYXRpb24sIFZhY3V1bVBhcmFtcyAqcGFyYW1zLAogCQkJcmVsID0gTlVM TDsKIAkJfQogCQllbHNlCi0JCQl0YWJsZV9yZWxhdGlvbl92YWN1dW0ocmVsLCBwYXJhbXMsIGJz dHJhdGVneSk7CisJCQl0YWJsZV9yZWxhdGlvbl92YWN1dW0ocmVsLCAmcGFyYW1zLCBic3RyYXRl Z3kpOwogCX0KIAogCS8qIFJvbGwgYmFjayBhbnkgR1VDIGNoYW5nZXMgZXhlY3V0ZWQgYnkgaW5k ZXggZnVuY3Rpb25zICovCkBAIC0yMzA3LDExICsyMzAzLDExIEBAIHZhY3V1bV9yZWwoT2lkIHJl bGlkLCBSYW5nZVZhciAqcmVsYXRpb24sIFZhY3V1bVBhcmFtcyAqcGFyYW1zLAogCQkgKiByZWxh dGlvbi4gIE5COiBUaGlzIGlzIG9ubHkgc2FmZSB0byBkbyBiZWNhdXNlIHdlIGhvbGQgYSBzZXNz aW9uCiAJCSAqIGxvY2sgb24gdGhlIG1haW4gcmVsYXRpb24gdGhhdCBwcmV2ZW50cyBjb25jdXJy ZW50IGRlbGV0aW9uLgogCQkgKi8KLQkJbWVtY3B5KCZ0b2FzdF92YWN1dW1fcGFyYW1zLCBwYXJh bXMsIHNpemVvZihWYWN1dW1QYXJhbXMpKTsKKwkJbWVtY3B5KCZ0b2FzdF92YWN1dW1fcGFyYW1z LCAmcGFyYW1zLCBzaXplb2YoVmFjdXVtUGFyYW1zKSk7CiAJCXRvYXN0X3ZhY3V1bV9wYXJhbXMu b3B0aW9ucyB8PSBWQUNPUFRfUFJPQ0VTU19NQUlOOwogCQl0b2FzdF92YWN1dW1fcGFyYW1zLnRv YXN0X3BhcmVudCA9IHJlbGlkOwogCi0JCXZhY3V1bV9yZWwodG9hc3RfcmVsaWQsIE5VTEwsICZ0 b2FzdF92YWN1dW1fcGFyYW1zLCBic3RyYXRlZ3kpOworCQl2YWN1dW1fcmVsKHRvYXN0X3JlbGlk LCBOVUxMLCB0b2FzdF92YWN1dW1fcGFyYW1zLCBic3RyYXRlZ3kpOwogCX0KIAogCS8qCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYyBiL3NyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jCmluZGV4IDQ1MWZiOTBhNjEwLi45NDc0MDk1ZjI3MSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMKKysrIGIvc3Jj L2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMKQEAgLTMxOTAsNyArMzE5MCw3IEBAIGF1 dG92YWN1dW1fZG9fdmFjX2FuYWx5emUoYXV0b3ZhY190YWJsZSAqdGFiLCBCdWZmZXJBY2Nlc3NT dHJhdGVneSBic3RyYXRlZ3kpCiAJcmVsX2xpc3QgPSBsaXN0X21ha2UxKHJlbCk7CiAJTWVtb3J5 Q29udGV4dFN3aXRjaFRvKG9sZF9jb250ZXh0KTsKIAotCXZhY3V1bShyZWxfbGlzdCwgJnRhYi0+ YXRfcGFyYW1zLCBic3RyYXRlZ3ksIHZhY19jb250ZXh0LCB0cnVlKTsKKwl2YWN1dW0ocmVsX2xp c3QsIHRhYi0+YXRfcGFyYW1zLCBic3RyYXRlZ3ksIHZhY19jb250ZXh0LCB0cnVlKTsKIAogCU1l bW9yeUNvbnRleHREZWxldGUodmFjX2NvbnRleHQpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvY29tbWFuZHMvdmFjdXVtLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy92YWN1dW0uaAppbmRl eCBiYzM3YTgwZGM3NC4uZDU3M2JmM2Y0NmQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1h bmRzL3ZhY3V1bS5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3ZhY3V1bS5oCkBAIC0zMzYs NyArMzM2LDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGludDY0IHBhcmFsbGVsX3ZhY3V1bV93b3Jr ZXJfZGVsYXlfbnM7CiAKIC8qIGluIGNvbW1hbmRzL3ZhY3V1bS5jICovCiBleHRlcm4gdm9pZCBF eGVjVmFjdXVtKFBhcnNlU3RhdGUgKnBzdGF0ZSwgVmFjdXVtU3RtdCAqdmFjc3RtdCwgYm9vbCBp c1RvcExldmVsKTsKLWV4dGVybiB2b2lkIHZhY3V1bShMaXN0ICpyZWxhdGlvbnMsIFZhY3V1bVBh cmFtcyAqcGFyYW1zLAorZXh0ZXJuIHZvaWQgdmFjdXVtKExpc3QgKnJlbGF0aW9ucywgVmFjdXVt UGFyYW1zIHBhcmFtcywKIAkJCQkgICBCdWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3ksIE1l bW9yeUNvbnRleHQgdmFjX2NvbnRleHQsCiAJCQkJICAgYm9vbCBpc1RvcExldmVsKTsKIGV4dGVy biB2b2lkIHZhY19vcGVuX2luZGV4ZXMoUmVsYXRpb24gcmVsYXRpb24sIExPQ0tNT0RFIGxvY2tt b2RlLApAQCAtMzk4LDcgKzM5OCw3IEBAIGV4dGVybiB2b2lkIHBhcmFsbGVsX3ZhY3V1bV9tYWlu KGRzbV9zZWdtZW50ICpzZWcsIHNobV90b2MgKnRvYyk7CiAKIC8qIGluIGNvbW1hbmRzL2FuYWx5 emUuYyAqLwogZXh0ZXJuIHZvaWQgYW5hbHl6ZV9yZWwoT2lkIHJlbGlkLCBSYW5nZVZhciAqcmVs YXRpb24sCi0JCQkJCQlWYWN1dW1QYXJhbXMgKnBhcmFtcywgTGlzdCAqdmFfY29scywgYm9vbCBp bl9vdXRlcl94YWN0LAorCQkJCQkJVmFjdXVtUGFyYW1zIHBhcmFtcywgTGlzdCAqdmFfY29scywg Ym9vbCBpbl9vdXRlcl94YWN0LAogCQkJCQkJQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWd5 KTsKIGV4dGVybiBib29sIHN0ZF90eXBhbmFseXplKFZhY0F0dHJTdGF0cyAqc3RhdHMpOwogCmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3ZhY3V1bS5vdXQgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3ZhY3V1bS5vdXQKaW5kZXggMGFiY2M5OTk4OWUuLjI4NGI1Mzkx YjQ4IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3ZhY3V1bS5vdXQKKysr IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC92YWN1dW0ub3V0CkBAIC02ODYsMyArNjg2LDMx IEBAIFJFU0VUIFJPTEU7CiBEUk9QIFRBQkxFIHZhY293bmVkOwogRFJPUCBUQUJMRSB2YWNvd25l ZF9wYXJ0ZWQ7CiBEUk9QIFJPTEUgcmVncmVzc192YWN1dW07CistLSBUUlVOQ0FURSBvcHRpb24g d2l0aCB2YWN1dW0gbW9yZSB0aGFuIDEgcmVsYXRpb24KK0NSRUFURSBUQUJMRSB2YWNfdHJ1bmNh dGVfb24oaSBJTlQpIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZD1mYWxzZSwgdmFjdXVtX3RydW5j YXRlPXRydWUpOworSU5TRVJUIElOVE8gdmFjX3RydW5jYXRlX29uIFNFTEVDVCBnZW5lcmF0ZV9z ZXJpZXMoMSwgMTAwMCk7CitDUkVBVEUgVEFCTEUgdmFjX3RydW5jYXRlX29mZihpIElOVCkgV0lU SCAoYXV0b3ZhY3V1bV9lbmFibGVkPWZhbHNlLCB2YWN1dW1fdHJ1bmNhdGU9ZmFsc2UpOworSU5T RVJUIElOVE8gdmFjX3RydW5jYXRlX29mZiBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDAp OworU0VMRUNUIHBnX3JlbGF0aW9uX3NpemUoJ3ZhY190cnVuY2F0ZV9vbicpID4gMDsKKyA/Y29s dW1uPyAKKy0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCBwZ19yZWxhdGlvbl9zaXpl KCd2YWNfdHJ1bmNhdGVfb2ZmJykgPiAwOworID9jb2x1bW4/IAorLS0tLS0tLS0tLQorIHQKKygx IHJvdykKKworREVMRVRFIEZST00gdmFjX3RydW5jYXRlX29uOworREVMRVRFIEZST00gdmFjX3Ry dW5jYXRlX29mZjsKK1ZBQ1VVTSAoQU5BTFlaRSkgdmFjX3RydW5jYXRlX29uLCB2YWNfdHJ1bmNh dGVfb2ZmOworU0VMRUNUIHBnX3JlbGF0aW9uX3NpemUoJ3ZhY190cnVuY2F0ZV9vZmYnKSA+IDA7 CisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitEUk9QIFRBQkxFIHZhY190 cnVuY2F0ZV9vbjsKK0RST1AgVEFCTEUgdmFjX3RydW5jYXRlX29mZjsKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL3ZhY3V1bS5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC92YWN1 dW0uc3FsCmluZGV4IGE3MmJkYjViNjE5Li45NTMzMGE1ZDQ0YSAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvcmVncmVzcy9zcWwvdmFjdXVtLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC92YWN1 dW0uc3FsCkBAIC00OTUsMyArNDk1LDE3IEBAIFJFU0VUIFJPTEU7CiBEUk9QIFRBQkxFIHZhY293 bmVkOwogRFJPUCBUQUJMRSB2YWNvd25lZF9wYXJ0ZWQ7CiBEUk9QIFJPTEUgcmVncmVzc192YWN1 dW07CisKKy0tIFRSVU5DQVRFIG9wdGlvbiB3aXRoIHZhY3V1bSBtb3JlIHRoYW4gMSByZWxhdGlv bgorQ1JFQVRFIFRBQkxFIHZhY190cnVuY2F0ZV9vbihpIElOVCkgV0lUSCAoYXV0b3ZhY3V1bV9l bmFibGVkPWZhbHNlLCB2YWN1dW1fdHJ1bmNhdGU9dHJ1ZSk7CitJTlNFUlQgSU5UTyB2YWNfdHJ1 bmNhdGVfb24gU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKTsKK0NSRUFURSBUQUJMRSB2 YWNfdHJ1bmNhdGVfb2ZmKGkgSU5UKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQ9ZmFsc2UsIHZh Y3V1bV90cnVuY2F0ZT1mYWxzZSk7CitJTlNFUlQgSU5UTyB2YWNfdHJ1bmNhdGVfb2ZmIFNFTEVD VCBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMCk7CitTRUxFQ1QgcGdfcmVsYXRpb25fc2l6ZSgndmFj X3RydW5jYXRlX29uJykgPiAwOworU0VMRUNUIHBnX3JlbGF0aW9uX3NpemUoJ3ZhY190cnVuY2F0 ZV9vZmYnKSA+IDA7CitERUxFVEUgRlJPTSB2YWNfdHJ1bmNhdGVfb247CitERUxFVEUgRlJPTSB2 YWNfdHJ1bmNhdGVfb2ZmOworVkFDVVVNIChBTkFMWVpFKSB2YWNfdHJ1bmNhdGVfb24sIHZhY190 cnVuY2F0ZV9vZmY7CitTRUxFQ1QgcGdfcmVsYXRpb25fc2l6ZSgndmFjX3RydW5jYXRlX29mZicp ID4gMDsKK0RST1AgVEFCTEUgdmFjX3RydW5jYXRlX29uOworRFJPUCBUQUJMRSB2YWNfdHJ1bmNh dGVfb2ZmOwo= --00000000000029527d0637dd13f1--