Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ee3tl-0003Ih-2A for pgsql-hackers@arkaria.postgresql.org; Tue, 23 Jan 2018 19:06:21 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ee3tk-0005U5-8z for pgsql-hackers@arkaria.postgresql.org; Tue, 23 Jan 2018 19:06:20 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1ee3tj-0005To-Mu for pgsql-hackers@lists.postgresql.org; Tue, 23 Jan 2018 19:06:20 +0000 Received: from forward3j.cmail.yandex.net ([2a02:6b8:0:1630::16]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1ee3tf-0004Q7-08 for pgsql-hackers@postgresql.org; Tue, 23 Jan 2018 19:06:18 +0000 Received: from mxback7g.mail.yandex.net (mxback7g.mail.yandex.net [IPv6:2a02:6b8:0:1472:2741:0:8b7:168]) by forward3j.cmail.yandex.net (Yandex) with ESMTP id A4A2020EB2; Tue, 23 Jan 2018 22:06:09 +0300 (MSK) Received: from web46g.yandex.ru (web46g.yandex.ru [2a02:6b8:0:1402::90]) by mxback7g.mail.yandex.net (nwsmtp/Yandex) with ESMTP id 0mx0eusHRO-6708wFp6; Tue, 23 Jan 2018 22:06:08 +0300 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=zsrv.org; s=mail; t=1516734368; bh=vhMpS6dgPrgt+pGEjvkkGxyK4IJ3W/OoQXhBW6JpRaA=; h=From:To:Cc:In-Reply-To:References:Subject:Message-Id:Date; b=Kmeliv0c5V0epc9bw9mYjaXnosKVdMXo1kVypWRzi/qQ1eefH3A5IeXXsZRkoFJh+ QrK6GUQK5JLUCdtHuo31/gPXqiojqveTifcvn5ieligJdlw6cV2IJ7dzoMMH9jXElo bQYKiW9zlQ4sfDtfmx7lIZbEFTKcSqsATYmfA/zk= Authentication-Results: mxback7g.mail.yandex.net; dkim=pass header.i=@zsrv.org Received: by web46g.yandex.ru with HTTP; Tue, 23 Jan 2018 22:06:07 +0300 From: Sergei Kornilov To: Stephen Frost Cc: Robert Haas , Tom Lane , "pgsql-hackers@postgresql.org" In-Reply-To: <20180123153711.GI2416@tamriel.snowman.net> References: <81911511895540@web58j.yandex.ru> <20171129152135.GN4628@tamriel.snowman.net> <9878.1511970441@sss.pgh.pa.us> <370481511970756@web3j.yandex.ru> <491651511974381@web27j.yandex.ru> <369811512396584@web6o.yandex.ru> <20180123153711.GI2416@tamriel.snowman.net> Subject: Re: using index or check in ALTER TABLE SET NOT NULL MIME-Version: 1.0 Message-Id: <354171516734367@web46g.yandex.ru> X-Mailer: Yamail [ http://yandex.ru ] 5.0 Date: Tue, 23 Jan 2018 22:06:07 +0300 Content-Type: multipart/mixed; boundary="----==--bound.35418.web46g.yandex.ru" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk ------==--bound.35418.web46g.yandex.ru Content-Transfer-Encoding: 7bit Content-Type: text/plain Hello Stephen I changed the suggested things and added some regression tests. Also i wrote few words to the documentation. New patch is attached. Thank you for feedback! regards, Sergei ------==--bound.35418.web46g.yandex.ru Content-Disposition: attachment; filename="alter_table_set_not_null_by_constraints_only_v4.patch" Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name="alter_table_set_not_null_by_constraints_only_v4.patch" ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvYWx0ZXJfdGFibGUuc2dtbCBiL2RvYy9zcmMv c2dtbC9yZWYvYWx0ZXJfdGFibGUuc2dtbAppbmRleCAyODZjN2E4Li5jZjJjNTZmIDEwMDY0NAot LS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2FsdGVyX3RhYmxlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21s L3JlZi9hbHRlcl90YWJsZS5zZ21sCkBAIC0xODksNiArMTg5LDEzIEBAIEFMVEVSIFRBQkxFIFsg SUYgRVhJU1RTIF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2Vh YmxlPgogICAgICA8L3BhcmE+CiAKICAgICAgPHBhcmE+CisgICAgICBGdWxsIHRhYmxlIHNjYW4g aXMgcGVyZm9ybWVkIHRvIGNoZWNrIHRoYXQgbm8gZXhpc3Rpbmcgcm93CisgICAgICBpbiB0aGUg dGFibGUgaGFzIG51bGwgdmFsdWVzIGluIGdpdmVuIGNvbHVtbi4gIEl0IGlzIHBvc3NpYmxlIHRv IGF2b2lkCisgICAgICB0aGlzIHNjYW4gYnkgYWRkaW5nIGEgdmFsaWQgPGxpdGVyYWw+Q0hFQ0s8 L2xpdGVyYWw+IGNvbnN0cmFpbnQgdG8KKyAgICAgIHRoZSB0YWJsZSB0aGF0IHdvdWxkIGFsbG93 IG9ubHkgTk9UIE5VTEwgdmFsdWVzIGZvciBnaXZlbiBjb2x1bW4uCisgICAgIDwvcGFyYT4KKwor ICAgICA8cGFyYT4KICAgICAgIElmIHRoaXMgdGFibGUgaXMgYSBwYXJ0aXRpb24sIG9uZSBjYW5u b3QgcGVyZm9ybSA8bGl0ZXJhbD5EUk9QIE5PVCBOVUxMPC9saXRlcmFsPgogICAgICAgb24gYSBj b2x1bW4gaWYgaXQgaXMgbWFya2VkIDxsaXRlcmFsPk5PVCBOVUxMPC9saXRlcmFsPiBpbiB0aGUg cGFyZW50CiAgICAgICB0YWJsZS4gIFRvIGRyb3AgdGhlIDxsaXRlcmFsPk5PVCBOVUxMPC9saXRl cmFsPiBjb25zdHJhaW50IGZyb20gYWxsIHRoZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0 YWxvZy9wYXJ0aXRpb24uYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGFydGl0aW9uLmMKaW5kZXgg OGFkYzRlZS4uNmY3ZWM0YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wYXJ0aXRp b24uYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BhcnRpdGlvbi5jCkBAIC0xMjM1LDcgKzEy MzUsNyBAQCBjaGVja19kZWZhdWx0X2FsbG93c19ib3VuZChSZWxhdGlvbiBwYXJlbnQsIFJlbGF0 aW9uIGRlZmF1bHRfcmVsLAogCSAqIG5vdCBjb250YWluIGFueSByb3cgdGhhdCB3b3VsZCBiZWxv bmcgdG8gdGhlIG5ldyBwYXJ0aXRpb24sIHdlIGNhbgogCSAqIGF2b2lkIHNjYW5uaW5nIHRoZSBk ZWZhdWx0IHBhcnRpdGlvbi4KIAkgKi8KLQlpZiAoUGFydENvbnN0cmFpbnRJbXBsaWVkQnlSZWxD b25zdHJhaW50KGRlZmF1bHRfcmVsLCBkZWZfcGFydF9jb25zdHJhaW50cykpCisJaWYgKENvbnN0 cmFpbnRJbXBsaWVkQnlSZWxDb25zdHJhaW50KGRlZmF1bHRfcmVsLCBkZWZfcGFydF9jb25zdHJh aW50cykpCiAJewogCQllcmVwb3J0KElORk8sCiAJCQkJKGVycm1zZygidXBkYXRlZCBwYXJ0aXRp b24gY29uc3RyYWludCBmb3IgZGVmYXVsdCBwYXJ0aXRpb24gXCIlc1wiIGlzIGltcGxpZWQgYnkg ZXhpc3RpbmcgY29uc3RyYWludHMiLApAQCAtMTI3OSw4ICsxMjc5LDggQEAgY2hlY2tfZGVmYXVs dF9hbGxvd3NfYm91bmQoUmVsYXRpb24gcGFyZW50LCBSZWxhdGlvbiBkZWZhdWx0X3JlbCwKIAkJ CSAqIHRoYXQgaXQgd2lsbCBub3QgY29udGFpbiBhbnkgcm93IHRoYXQgd291bGQgYmVsb25nIHRv IHRoZSBuZXcKIAkJCSAqIHBhcnRpdGlvbiwgd2UgY2FuIGF2b2lkIHNjYW5uaW5nIHRoZSBjaGls ZCB0YWJsZS4KIAkJCSAqLwotCQkJaWYgKFBhcnRDb25zdHJhaW50SW1wbGllZEJ5UmVsQ29uc3Ry YWludChwYXJ0X3JlbCwKLQkJCQkJCQkJCQkJCQkgZGVmX3BhcnRfY29uc3RyYWludHMpKQorCQkJ aWYgKENvbnN0cmFpbnRJbXBsaWVkQnlSZWxDb25zdHJhaW50KHBhcnRfcmVsLAorCQkJCQkJCQkJ CQkJIGRlZl9wYXJ0X2NvbnN0cmFpbnRzKSkKIAkJCXsKIAkJCQllcmVwb3J0KElORk8sCiAJCQkJ CQkoZXJybXNnKCJ1cGRhdGVkIHBhcnRpdGlvbiBjb25zdHJhaW50IGZvciBkZWZhdWx0IHBhcnRp dGlvbiBcIiVzXCIgaXMgaW1wbGllZCBieSBleGlzdGluZyBjb25zdHJhaW50cyIsCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3RhYmxlY21kcy5jCmluZGV4IDJlNzY4ZGQuLjRmMDkxNmQgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3Rh YmxlY21kcy5jCkBAIC0xNjIsNyArMTYyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQWx0ZXJlZFRhYmxl SW5mbwogCS8qIEluZm9ybWF0aW9uIHNhdmVkIGJ5IFBoYXNlcyAxLzIgZm9yIFBoYXNlIDM6ICov CiAJTGlzdAkgICAqY29uc3RyYWludHM7CS8qIExpc3Qgb2YgTmV3Q29uc3RyYWludCAqLwogCUxp c3QJICAgKm5ld3ZhbHM7CQkvKiBMaXN0IG9mIE5ld0NvbHVtblZhbHVlICovCi0JYm9vbAkJbmV3 X25vdG51bGw7CS8qIFQgaWYgd2UgYWRkZWQgbmV3IE5PVCBOVUxMIGNvbnN0cmFpbnRzICovCisJ Ym9vbAkJdmVyaWZ5X25ld19ub3RudWxsOyAvKiBUIGlmIHdlIHNob3VsZCByZWNoZWNrIE5PVCBO VUxMICovCiAJaW50CQkJcmV3cml0ZTsJCS8qIFJlYXNvbiBmb3IgZm9yY2VkIHJld3JpdGUsIGlm IGFueSAqLwogCU9pZAkJCW5ld1RhYmxlU3BhY2U7CS8qIG5ldyB0YWJsZXNwYWNlOyAwIG1lYW5z IG5vIGNoYW5nZSAqLwogCWJvb2wJCWNoZ1BlcnNpc3RlbmNlOyAvKiBUIGlmIFNFVCBMT0dHRUQv VU5MT0dHRUQgaXMgdXNlZCAqLwpAQCAtMzc3LDYgKzM3Nyw3IEBAIHN0YXRpYyBPYmplY3RBZGRy ZXNzIEFURXhlY0Ryb3BOb3ROdWxsKFJlbGF0aW9uIHJlbCwgY29uc3QgY2hhciAqY29sTmFtZSwg TE9DS01PCiBzdGF0aWMgdm9pZCBBVFByZXBTZXROb3ROdWxsKFJlbGF0aW9uIHJlbCwgYm9vbCBy ZWN1cnNlLCBib29sIHJlY3Vyc2luZyk7CiBzdGF0aWMgT2JqZWN0QWRkcmVzcyBBVEV4ZWNTZXRO b3ROdWxsKEFsdGVyZWRUYWJsZUluZm8gKnRhYiwgUmVsYXRpb24gcmVsLAogCQkJCSBjb25zdCBj aGFyICpjb2xOYW1lLCBMT0NLTU9ERSBsb2NrbW9kZSk7CitzdGF0aWMgYm9vbCBOb3ROdWxsSW1w bGllZEJ5UmVsQ29uc3RyYWludHMoUmVsYXRpb24gcmVsLCBGb3JtX3BnX2F0dHJpYnV0ZSBhdHRy KTsKIHN0YXRpYyBPYmplY3RBZGRyZXNzIEFURXhlY0NvbHVtbkRlZmF1bHQoUmVsYXRpb24gcmVs LCBjb25zdCBjaGFyICpjb2xOYW1lLAogCQkJCQlOb2RlICpuZXdEZWZhdWx0LCBMT0NLTU9ERSBs b2NrbW9kZSk7CiBzdGF0aWMgT2JqZWN0QWRkcmVzcyBBVEV4ZWNBZGRJZGVudGl0eShSZWxhdGlv biByZWwsIGNvbnN0IGNoYXIgKmNvbE5hbWUsCkBAIC00MzY4LDcgKzQzNjksNyBAQCBBVFJld3Jp dGVUYWJsZXMoQWx0ZXJUYWJsZVN0bXQgKnBhcnNldHJlZSwgTGlzdCAqKndxdWV1ZSwgTE9DS01P REUgbG9ja21vZGUpCiAJCQkgKiBUZXN0IHRoZSBjdXJyZW50IGRhdGEgd2l0aGluIHRoZSB0YWJs ZSBhZ2FpbnN0IG5ldyBjb25zdHJhaW50cwogCQkJICogZ2VuZXJhdGVkIGJ5IEFMVEVSIFRBQkxF IGNvbW1hbmRzLCBidXQgZG9uJ3QgcmVidWlsZCBkYXRhLgogCQkJICovCi0JCQlpZiAodGFiLT5j b25zdHJhaW50cyAhPSBOSUwgfHwgdGFiLT5uZXdfbm90bnVsbCB8fAorCQkJaWYgKHRhYi0+Y29u c3RyYWludHMgIT0gTklMIHx8IHRhYi0+dmVyaWZ5X25ld19ub3RudWxsIHx8CiAJCQkJdGFiLT5w YXJ0aXRpb25fY29uc3RyYWludCAhPSBOVUxMKQogCQkJCUFUUmV3cml0ZVRhYmxlKHRhYiwgSW52 YWxpZE9pZCwgbG9ja21vZGUpOwogCkBAIC00NTI5LDcgKzQ1MzAsNyBAQCBBVFJld3JpdGVUYWJs ZShBbHRlcmVkVGFibGVJbmZvICp0YWIsIE9pZCBPSUROZXdIZWFwLCBMT0NLTU9ERSBsb2NrbW9k ZSkKIAl9CiAKIAlub3RudWxsX2F0dHJzID0gTklMOwotCWlmIChuZXdyZWwgfHwgdGFiLT5uZXdf bm90bnVsbCkKKwlpZiAobmV3cmVsIHx8IHRhYi0+dmVyaWZ5X25ld19ub3RudWxsKQogCXsKIAkJ LyoKIAkJICogSWYgd2UgYXJlIHJlYnVpbGRpbmcgdGhlIHR1cGxlcyBPUiBpZiB3ZSBhZGRlZCBh bnkgbmV3IE5PVCBOVUxMCkBAIC01NTI4LDcgKzU1MjksNyBAQCBBVEV4ZWNBZGRDb2x1bW4oTGlz dCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBSZWxhdGlvbiByZWwsCiAJCSAqIG51 bGwsIGJ1dCBzaW5jZSBpdCdzIGZpbGxlZCBzcGVjaWFsbHksIHRoZXJlJ3Mgbm8gbmVlZCB0byB0 ZXN0CiAJCSAqIGFueXRoaW5nLikKIAkJICovCi0JCXRhYi0+bmV3X25vdG51bGwgfD0gY29sRGVm LT5pc19ub3RfbnVsbDsKKwkJdGFiLT52ZXJpZnlfbmV3X25vdG51bGwgfD0gY29sRGVmLT5pc19u b3RfbnVsbDsKIAl9CiAKIAkvKgpAQCAtNTkzMCw4ICs1OTMxLDE3IEBAIEFURXhlY1NldE5vdE51 bGwoQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBSZWxhdGlvbiByZWwsCiAKIAkJQ2F0YWxvZ1R1cGxl VXBkYXRlKGF0dHJfcmVsLCAmdHVwbGUtPnRfc2VsZiwgdHVwbGUpOwogCi0JCS8qIFRlbGwgUGhh c2UgMyBpdCBuZWVkcyB0byB0ZXN0IHRoZSBjb25zdHJhaW50ICovCi0JCXRhYi0+bmV3X25vdG51 bGwgPSB0cnVlOworCQkvKgorCQkgKiBWZXJpZnlpbmcgdGFibGUgZGF0YSBjYW4gYmUgZG9uZSBp biBQaGFzZSAzIHdpdGggc2luZ2xlIHRhYmxlIHNjYW4KKwkJICogZm9yIGFsbCBjb25zdHJhaW50 IChib3RoIGV4aXN0aW5nIGFuZCBuZXcpCisJCSAqIFdlIGNhbiBza2lwIHRoaXMgY2hlY2sgb25s eSBpZiBldmVyeSBuZXcgTk9UIE5VTEwgY29udHJhaW50CisJCSAqIGltcGxpZWQgYnkgZXhpc3Rl ZCB0YWJsZSBjb25zdHJhaW50cworCQkgKi8KKwkJaWYgKCFOb3ROdWxsSW1wbGllZEJ5UmVsQ29u c3RyYWludHMocmVsLCAoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVDVCh0dXBsZSkpKQorCQl7 CisJCQkvKiBUZWxsIFBoYXNlIDMgaXQgbmVlZHMgdG8gdGVzdCB0aGUgY29uc3RyYWludHMgKi8K KwkJCXRhYi0+dmVyaWZ5X25ld19ub3RudWxsID0gdHJ1ZTsKKwkJfQogCiAJCU9iamVjdEFkZHJl c3NTdWJTZXQoYWRkcmVzcywgUmVsYXRpb25SZWxhdGlvbklkLAogCQkJCQkJCVJlbGF0aW9uR2V0 UmVsaWQocmVsKSwgYXR0bnVtKTsKQEAgLTU5NDgsNiArNTk1OCw0NiBAQCBBVEV4ZWNTZXROb3RO dWxsKEFsdGVyZWRUYWJsZUluZm8gKnRhYiwgUmVsYXRpb24gcmVsLAogfQogCiAvKgorICogTm90 TnVsbEltcGxpZWRCeVJlbENvbnN0cmFpbnRzCisgKgkJRG9lcyByZWwncyBleGlzdGluZyBjb25z dHJhaW50cyBpbXBseSBOT1QgTlVMTCBmb3IgZ2l2ZW4gYXR0cmlidXRlCisgKi8KK3N0YXRpYyBi b29sCitOb3ROdWxsSW1wbGllZEJ5UmVsQ29uc3RyYWludHMoUmVsYXRpb24gcmVsLCBGb3JtX3Bn X2F0dHJpYnV0ZSBhdHRyKQoreworCUxpc3QJICAgKm5vdE51bGxDb25zdHJhaW50ID0gTklMOwor CU51bGxUZXN0ICAgKm5udWxsdGVzdCA9IG1ha2VOb2RlKE51bGxUZXN0KTsKKworCW5udWxsdGVz dC0+YXJnID0gKEV4cHIgKikgbWFrZVZhcigxLAorCQkJCQkJCQkJICBhdHRyLT5hdHRudW0sCisJ CQkJCQkJCQkgIGF0dHItPmF0dHR5cGlkLAorCQkJCQkJCQkJICBhdHRyLT5hdHR0eXBtb2QsCisJ CQkJCQkJCQkgIGF0dHItPmF0dGNvbGxhdGlvbiwKKwkJCQkJCQkJCSAgMCk7CisJbm51bGx0ZXN0 LT5udWxsdGVzdHR5cGUgPSBJU19OT1RfTlVMTDsKKworCS8qCisJICogc2FtZSB0aGluZyBhcyBp biBDb25zdHJhaW50SW1wbGllZEJ5UmVsQ29uc3RyYWludCBhcmdpc3Jvdz1mYWxzZSBpcworCSAq IGNvcnJlY3QgZXZlbiBmb3IgYSBjb21wb3NpdGUgY29sdW1uLCBiZWNhdXNlIGF0dG5vdG51bGwg ZG9lcyBub3QKKwkgKiByZXByZXNlbnQgYSBTUUwtc3BlYyBJUyBOT1QgTlVMTCB0ZXN0IGluIHN1 Y2ggYSBjYXNlLCBqdXN0IElTIERJU1RJTkNUCisJICogRlJPTSBOVUxMLgorCSAqLworCW5udWxs dGVzdC0+YXJnaXNyb3cgPSBmYWxzZTsKKwlubnVsbHRlc3QtPmxvY2F0aW9uID0gLTE7CisJbm90 TnVsbENvbnN0cmFpbnQgPSBsYXBwZW5kKG5vdE51bGxDb25zdHJhaW50LCBubnVsbHRlc3QpOwor CisJaWYgKENvbnN0cmFpbnRJbXBsaWVkQnlSZWxDb25zdHJhaW50KHJlbCwgbm90TnVsbENvbnN0 cmFpbnQpKQorCXsKKwkJZXJlcG9ydChERUJVRzEsCisJCQkJKGVycm1zZygidmVyaWZ5aW5nIHRh YmxlIFwiJXNcIiBOT1QgTlVMTCBjb25zdHJhaW50ICIKKwkJCQkJCSJvbiAlcyBhdHRyaWJ1dGUg YnkgZXhpc3RlZCBjb25zdHJhaW50cyIsCisJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShy ZWwpLCBOYW1lU3RyKGF0dHItPmF0dG5hbWUpKSkpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwly ZXR1cm4gZmFsc2U7Cit9CisKKy8qCiAgKiBBTFRFUiBUQUJMRSBBTFRFUiBDT0xVTU4gU0VUL0RS T1AgREVGQVVMVAogICoKICAqIFJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgYWZmZWN0ZWQgY29s dW1uLgpAQCAtMTM2MjEsMTUgKzEzNjcxLDE0IEBAIENvbXB1dGVQYXJ0aXRpb25BdHRycyhSZWxh dGlvbiByZWwsIExpc3QgKnBhcnRQYXJhbXMsIEF0dHJOdW1iZXIgKnBhcnRhdHRycywKIH0KIAog LyoKLSAqIFBhcnRDb25zdHJhaW50SW1wbGllZEJ5UmVsQ29uc3RyYWludAotICoJCURvZXMgc2Nh bnJlbCdzIGV4aXN0aW5nIGNvbnN0cmFpbnRzIGltcGx5IHRoZSBwYXJ0aXRpb24gY29uc3RyYWlu dD8KKyAqIENvbnN0cmFpbnRJbXBsaWVkQnlSZWxDb25zdHJhaW50CisgKgkJRG9lcyBzY2FucmVs J3MgZXhpc3RpbmcgY29uc3RyYWludHMgaW1wbHkgZ2l2ZW4gY29uc3RyYWludAogICoKLSAqIEV4 aXN0aW5nIGNvbnN0cmFpbnRzIGluY2x1ZGVzIGl0cyBjaGVjayBjb25zdHJhaW50cyBhbmQgY29s dW1uLWxldmVsCisgKiBFeGlzdGluZyBjb25zdHJhaW50cyBpbmNsdWRlcyBpdHMgY2hlY2sgY29u c3RyYWludHMsIGNvbHVtbi1sZXZlbAogICogTk9UIE5VTEwgY29uc3RyYWludHMgYW5kIHBhcnRD b25zdHJhaW50IGRlc2NyaWJlcyB0aGUgcGFydGl0aW9uIGNvbnN0cmFpbnQuCiAgKi8KIGJvb2wK LVBhcnRDb25zdHJhaW50SW1wbGllZEJ5UmVsQ29uc3RyYWludChSZWxhdGlvbiBzY2FucmVsLAot CQkJCQkJCQkJIExpc3QgKnBhcnRDb25zdHJhaW50KQorQ29uc3RyYWludEltcGxpZWRCeVJlbENv bnN0cmFpbnQoUmVsYXRpb24gc2NhbnJlbCwgTGlzdCAqdGVzdENvbnN0cmFpbnQpCiB7CiAJTGlz dAkgICAqZXhpc3RDb25zdHJhaW50ID0gTklMOwogCVR1cGxlQ29uc3RyICpjb25zdHIgPSBSZWxh dGlvbkdldERlc2NyKHNjYW5yZWwpLT5jb25zdHI7CkBAIC0xMzY5OSw3ICsxMzc0OCw3IEBAIFBh cnRDb25zdHJhaW50SW1wbGllZEJ5UmVsQ29uc3RyYWludChSZWxhdGlvbiBzY2FucmVsLAogCQll eGlzdENvbnN0cmFpbnQgPSBsaXN0X21ha2UxKG1ha2VfYW5kc19leHBsaWNpdChleGlzdENvbnN0 cmFpbnQpKTsKIAogCS8qIEFuZCBhd2F5IHdlIGdvIC4uLiAqLwotCXJldHVybiBwcmVkaWNhdGVf aW1wbGllZF9ieShwYXJ0Q29uc3RyYWludCwgZXhpc3RDb25zdHJhaW50LCB0cnVlKTsKKwlyZXR1 cm4gcHJlZGljYXRlX2ltcGxpZWRfYnkodGVzdENvbnN0cmFpbnQsIGV4aXN0Q29uc3RyYWludCwg dHJ1ZSk7CiB9CiAKIC8qCkBAIC0xMzcyNyw3ICsxMzc3Niw3IEBAIFZhbGlkYXRlUGFydGl0aW9u Q29uc3RyYWludHMoTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gc2NhbnJlbCwKIAkgKiBCYXNlZCBv biB0aGUgdGFibGUncyBleGlzdGluZyBjb25zdHJhaW50cywgZGV0ZXJtaW5lIGlmIHdlIGNhbiBz a2lwCiAJICogc2Nhbm5pbmcgdGhlIHRhYmxlIHRvIHZhbGlkYXRlIHRoZSBwYXJ0aXRpb24gY29u c3RyYWludC4KIAkgKi8KLQlpZiAoUGFydENvbnN0cmFpbnRJbXBsaWVkQnlSZWxDb25zdHJhaW50 KHNjYW5yZWwsIHBhcnRDb25zdHJhaW50KSkKKwlpZiAoQ29uc3RyYWludEltcGxpZWRCeVJlbENv bnN0cmFpbnQoc2NhbnJlbCwgcGFydENvbnN0cmFpbnQpKQogCXsKIAkJaWYgKCF2YWxpZGF0ZV9k ZWZhdWx0KQogCQkJZXJlcG9ydChJTkZPLApAQCAtMTM3NzksNyArMTM4MjgsNyBAQCBWYWxpZGF0 ZVBhcnRpdGlvbkNvbnN0cmFpbnRzKExpc3QgKip3cXVldWUsIFJlbGF0aW9uIHNjYW5yZWwsCiAJ CQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgd2hvbGUtcm93IHJlZmVyZW5jZSBmb3VuZCBpbiBw YXJ0aXRpb24ga2V5Iik7CiAKIAkJCS8qIENhbiB3ZSBza2lwIHNjYW5uaW5nIHRoaXMgcGFydF9y ZWw/ICovCi0JCQlpZiAoUGFydENvbnN0cmFpbnRJbXBsaWVkQnlSZWxDb25zdHJhaW50KHBhcnRf cmVsLCBteV9wYXJ0Y29uc3RyKSkKKwkJCWlmIChDb25zdHJhaW50SW1wbGllZEJ5UmVsQ29uc3Ry YWludChwYXJ0X3JlbCwgbXlfcGFydGNvbnN0cikpCiAJCQl7CiAJCQkJaWYgKCF2YWxpZGF0ZV9k ZWZhdWx0KQogCQkJCQllcmVwb3J0KElORk8sCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21t YW5kcy90YWJsZWNtZHMuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3RhYmxlY21kcy5oCmluZGV4 IDA2ZTUxODAuLjhlM2QwYzIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3RhYmxl Y21kcy5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3RhYmxlY21kcy5oCkBAIC04OCw3ICs4 OCw3IEBAIGV4dGVybiB2b2lkIFJhbmdlVmFyQ2FsbGJhY2tPd25zVGFibGUoY29uc3QgUmFuZ2VW YXIgKnJlbGF0aW9uLAogCiBleHRlcm4gdm9pZCBSYW5nZVZhckNhbGxiYWNrT3duc1JlbGF0aW9u KGNvbnN0IFJhbmdlVmFyICpyZWxhdGlvbiwKIAkJCQkJCQkgT2lkIHJlbElkLCBPaWQgb2xkUmVs SWQsIHZvaWQgKm5vQ2F0YWxvZ3MpOwotZXh0ZXJuIGJvb2wgUGFydENvbnN0cmFpbnRJbXBsaWVk QnlSZWxDb25zdHJhaW50KFJlbGF0aW9uIHNjYW5yZWwsCi0JCQkJCQkJCQkgTGlzdCAqcGFydENv bnN0cmFpbnQpOworZXh0ZXJuIGJvb2wgQ29uc3RyYWludEltcGxpZWRCeVJlbENvbnN0cmFpbnQo UmVsYXRpb24gc2NhbnJlbCwKKwkJCQkJCQkJIExpc3QgKnRlc3RDb25zdHJhaW50KTsKIAogI2Vu ZGlmCQkJCQkJCS8qIFRBQkxFQ01EU19IICovCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL2FsdGVyX3RhYmxlLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYWx0 ZXJfdGFibGUub3V0CmluZGV4IGU5YTFkMzcuLjQ5MWJmNjAgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvYWx0ZXJfdGFibGUub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvYWx0ZXJfdGFibGUub3V0CkBAIC0xMDM4LDYgKzEwMzgsNDEgQEAgYWx0ZXIgdGFi bGUgbXl2aWV3IGFsdGVyIGNvbHVtbiB0ZXN0IHNldCBub3QgbnVsbDsKIEVSUk9SOiAgIm15dmll dyIgaXMgbm90IGEgdGFibGUgb3IgZm9yZWlnbiB0YWJsZQogZHJvcCB2aWV3IG15dmlldzsKIGRy b3AgdGFibGUgYXRhY2MxOworLS0gc2V0IG5vdCBudWxsIHZlcmlmaWVkIGJ5IGNvbnN0cmFpbnRz CitjcmVhdGUgdGFibGUgYXRhY2MxICh0ZXN0X2EgaW50LCB0ZXN0X2IgaW50KTsKK2luc2VydCBp bnRvIGF0YWNjMSB2YWx1ZXMgKG51bGwsIDEpOworLS0gY29uc3RyYWludCBub3QgY292ZXIgYWxs IHZhbHVlcywgc2hvdWxkIGZhaWwKK2FsdGVyIHRhYmxlIGF0YWNjMSBhZGQgY29uc3RyYWludCBh dGFjYzFfY29uc3RyX29yIGNoZWNrKHRlc3RfYSBpcyBub3QgbnVsbCBvciB0ZXN0X2IgPCAxMCk7 CithbHRlciB0YWJsZSBhdGFjYzEgYWx0ZXIgdGVzdF9hIHNldCBub3QgbnVsbDsKK0VSUk9SOiAg Y29sdW1uICJ0ZXN0X2EiIGNvbnRhaW5zIG51bGwgdmFsdWVzCithbHRlciB0YWJsZSBhdGFjYzEg ZHJvcCBjb25zdHJhaW50IGF0YWNjMV9jb25zdHJfb3I7CistLSBub3QgdmFsaWQgY29uc3RyYWlu dCwgc2hvdWxkIGZhaWwKK2FsdGVyIHRhYmxlIGF0YWNjMSBhZGQgY29uc3RyYWludCBhdGFjYzFf Y29uc3RyX2ludmFsaWQgY2hlY2sodGVzdF9hIGlzIG5vdCBudWxsKSBub3QgdmFsaWQ7CithbHRl ciB0YWJsZSBhdGFjYzEgYWx0ZXIgdGVzdF9hIHNldCBub3QgbnVsbDsKK0VSUk9SOiAgY29sdW1u ICJ0ZXN0X2EiIGNvbnRhaW5zIG51bGwgdmFsdWVzCithbHRlciB0YWJsZSBhdGFjYzEgZHJvcCBj b25zdHJhaW50IGF0YWNjMV9jb25zdHJfaW52YWxpZDsKKy0tIHdpdGggdmFsaWQgY29uc3RyYWlu dAordXBkYXRlIGF0YWNjMSBzZXQgdGVzdF9hID0gMTsKK2FsdGVyIHRhYmxlIGF0YWNjMSBhZGQg Y29uc3RyYWludCBhdGFjYzFfY29uc3RyX2FfdmFsaWQgY2hlY2sodGVzdF9hIGlzIG5vdCBudWxs KTsKK2FsdGVyIHRhYmxlIGF0YWNjMSBhbHRlciB0ZXN0X2Egc2V0IG5vdCBudWxsOworZGVsZXRl IGZyb20gYXRhY2MxOworaW5zZXJ0IGludG8gYXRhY2MxIHZhbHVlcyAoMiwgbnVsbCk7CithbHRl ciB0YWJsZSBhdGFjYzEgYWx0ZXIgdGVzdF9hIGRyb3Agbm90IG51bGw7CistLSB0ZXN0IG11bHRp cGxlIHNldCBub3QgbnVsbCBhdCBzYW1lIHRpbWUKKy0tIHRlc3RfYSBjaGVja2VkIGJ5IGF0YWNj MV9jb25zdHJfYV92YWxpZCwgdGVzdF9iIHNob3VsZCBmYWlsIGJ5IHRhYmxlIHNjYW4KK2FsdGVy IHRhYmxlIGF0YWNjMSBhbHRlciB0ZXN0X2Egc2V0IG5vdCBudWxsLCBhbHRlciB0ZXN0X2Igc2V0 IG5vdCBudWxsOworRVJST1I6ICBjb2x1bW4gInRlc3RfYiIgY29udGFpbnMgbnVsbCB2YWx1ZXMK Ky0tIGNvbW1hbmRzIG9yZGVyIGhhcyBubyBpbXBvcnRhbmNlCithbHRlciB0YWJsZSBhdGFjYzEg YWx0ZXIgdGVzdF9iIHNldCBub3QgbnVsbCwgYWx0ZXIgdGVzdF9hIHNldCBub3QgbnVsbDsKK0VS Uk9SOiAgY29sdW1uICJ0ZXN0X2IiIGNvbnRhaW5zIG51bGwgdmFsdWVzCistLSB2YWxpZCBvbmUg YnkgdGFibGUgc2Nhbiwgb25lIGJ5IGNoZWNrIGNvbnN0cmFpbnRzCit1cGRhdGUgYXRhY2MxIHNl dCB0ZXN0X2IgPSAxOworYWx0ZXIgdGFibGUgYXRhY2MxIGFsdGVyIHRlc3RfYiBzZXQgbm90IG51 bGwsIGFsdGVyIHRlc3RfYSBzZXQgbm90IG51bGw7CithbHRlciB0YWJsZSBhdGFjYzEgYWx0ZXIg dGVzdF9hIGRyb3Agbm90IG51bGwsIGFsdGVyIHRlc3RfYiBkcm9wIG5vdCBudWxsOworLS0gYm90 aCBjb2x1bW4gaGFzIGNoZWNrIGNvbnN0cmFpbnRzCithbHRlciB0YWJsZSBhdGFjYzEgYWRkIGNv bnN0cmFpbnQgYXRhY2MxX2NvbnN0cl9iX3ZhbGlkIGNoZWNrKHRlc3RfYiBpcyBub3QgbnVsbCk7 CithbHRlciB0YWJsZSBhdGFjYzEgYWx0ZXIgdGVzdF9iIHNldCBub3QgbnVsbCwgYWx0ZXIgdGVz dF9hIHNldCBub3QgbnVsbDsKK2Ryb3AgdGFibGUgYXRhY2MxOwogLS0gdGVzdCBpbmhlcml0YW5j ZQogY3JlYXRlIHRhYmxlIHBhcmVudCAoYSBpbnQpOwogY3JlYXRlIHRhYmxlIGNoaWxkIChiIHZh cmNoYXIoMjU1KSkgaW5oZXJpdHMgKHBhcmVudCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9hbHRlcl90YWJsZS5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9hbHRlcl90YWJs ZS5zcWwKaW5kZXggYjI3ZThmNi4uMWE2NGE1NSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9zcWwvYWx0ZXJfdGFibGUuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2FsdGVyX3Rh YmxlLnNxbApAQCAtNzk4LDYgKzc5OCw0MSBAQCBkcm9wIHZpZXcgbXl2aWV3OwogCiBkcm9wIHRh YmxlIGF0YWNjMTsKIAorLS0gc2V0IG5vdCBudWxsIHZlcmlmaWVkIGJ5IGNvbnN0cmFpbnRzCitj cmVhdGUgdGFibGUgYXRhY2MxICh0ZXN0X2EgaW50LCB0ZXN0X2IgaW50KTsKK2luc2VydCBpbnRv IGF0YWNjMSB2YWx1ZXMgKG51bGwsIDEpOworLS0gY29uc3RyYWludCBub3QgY292ZXIgYWxsIHZh bHVlcywgc2hvdWxkIGZhaWwKK2FsdGVyIHRhYmxlIGF0YWNjMSBhZGQgY29uc3RyYWludCBhdGFj YzFfY29uc3RyX29yIGNoZWNrKHRlc3RfYSBpcyBub3QgbnVsbCBvciB0ZXN0X2IgPCAxMCk7Cith bHRlciB0YWJsZSBhdGFjYzEgYWx0ZXIgdGVzdF9hIHNldCBub3QgbnVsbDsKK2FsdGVyIHRhYmxl IGF0YWNjMSBkcm9wIGNvbnN0cmFpbnQgYXRhY2MxX2NvbnN0cl9vcjsKKy0tIG5vdCB2YWxpZCBj b25zdHJhaW50LCBzaG91bGQgZmFpbAorYWx0ZXIgdGFibGUgYXRhY2MxIGFkZCBjb25zdHJhaW50 IGF0YWNjMV9jb25zdHJfaW52YWxpZCBjaGVjayh0ZXN0X2EgaXMgbm90IG51bGwpIG5vdCB2YWxp ZDsKK2FsdGVyIHRhYmxlIGF0YWNjMSBhbHRlciB0ZXN0X2Egc2V0IG5vdCBudWxsOworYWx0ZXIg dGFibGUgYXRhY2MxIGRyb3AgY29uc3RyYWludCBhdGFjYzFfY29uc3RyX2ludmFsaWQ7CistLSB3 aXRoIHZhbGlkIGNvbnN0cmFpbnQKK3VwZGF0ZSBhdGFjYzEgc2V0IHRlc3RfYSA9IDE7CithbHRl ciB0YWJsZSBhdGFjYzEgYWRkIGNvbnN0cmFpbnQgYXRhY2MxX2NvbnN0cl9hX3ZhbGlkIGNoZWNr KHRlc3RfYSBpcyBub3QgbnVsbCk7CithbHRlciB0YWJsZSBhdGFjYzEgYWx0ZXIgdGVzdF9hIHNl dCBub3QgbnVsbDsKK2RlbGV0ZSBmcm9tIGF0YWNjMTsKKworaW5zZXJ0IGludG8gYXRhY2MxIHZh bHVlcyAoMiwgbnVsbCk7CithbHRlciB0YWJsZSBhdGFjYzEgYWx0ZXIgdGVzdF9hIGRyb3Agbm90 IG51bGw7CistLSB0ZXN0IG11bHRpcGxlIHNldCBub3QgbnVsbCBhdCBzYW1lIHRpbWUKKy0tIHRl c3RfYSBjaGVja2VkIGJ5IGF0YWNjMV9jb25zdHJfYV92YWxpZCwgdGVzdF9iIHNob3VsZCBmYWls IGJ5IHRhYmxlIHNjYW4KK2FsdGVyIHRhYmxlIGF0YWNjMSBhbHRlciB0ZXN0X2Egc2V0IG5vdCBu dWxsLCBhbHRlciB0ZXN0X2Igc2V0IG5vdCBudWxsOworLS0gY29tbWFuZHMgb3JkZXIgaGFzIG5v IGltcG9ydGFuY2UKK2FsdGVyIHRhYmxlIGF0YWNjMSBhbHRlciB0ZXN0X2Igc2V0IG5vdCBudWxs LCBhbHRlciB0ZXN0X2Egc2V0IG5vdCBudWxsOworCistLSB2YWxpZCBvbmUgYnkgdGFibGUgc2Nh biwgb25lIGJ5IGNoZWNrIGNvbnN0cmFpbnRzCit1cGRhdGUgYXRhY2MxIHNldCB0ZXN0X2IgPSAx OworYWx0ZXIgdGFibGUgYXRhY2MxIGFsdGVyIHRlc3RfYiBzZXQgbm90IG51bGwsIGFsdGVyIHRl c3RfYSBzZXQgbm90IG51bGw7CisKK2FsdGVyIHRhYmxlIGF0YWNjMSBhbHRlciB0ZXN0X2EgZHJv cCBub3QgbnVsbCwgYWx0ZXIgdGVzdF9iIGRyb3Agbm90IG51bGw7CistLSBib3RoIGNvbHVtbiBo YXMgY2hlY2sgY29uc3RyYWludHMKK2FsdGVyIHRhYmxlIGF0YWNjMSBhZGQgY29uc3RyYWludCBh dGFjYzFfY29uc3RyX2JfdmFsaWQgY2hlY2sodGVzdF9iIGlzIG5vdCBudWxsKTsKK2FsdGVyIHRh YmxlIGF0YWNjMSBhbHRlciB0ZXN0X2Igc2V0IG5vdCBudWxsLCBhbHRlciB0ZXN0X2Egc2V0IG5v dCBudWxsOworZHJvcCB0YWJsZSBhdGFjYzE7CisKIC0tIHRlc3QgaW5oZXJpdGFuY2UKIGNyZWF0 ZSB0YWJsZSBwYXJlbnQgKGEgaW50KTsKIGNyZWF0ZSB0YWJsZSBjaGlsZCAoYiB2YXJjaGFyKDI1 NSkpIGluaGVyaXRzIChwYXJlbnQpOwo= ------==--bound.35418.web46g.yandex.ru--