Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1etCOe-0004Vg-KV for pgsql-hackers@arkaria.postgresql.org; Tue, 06 Mar 2018 13:12:48 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1etCOd-0002Qz-H0 for pgsql-hackers@arkaria.postgresql.org; Tue, 06 Mar 2018 13:12:47 +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.89) (envelope-from ) id 1etCOc-0002Qo-To for pgsql-hackers@lists.postgresql.org; Tue, 06 Mar 2018 13:12:47 +0000 Received: from forward102p.mail.yandex.net ([2a02:6b8:0:1472:2741:0:8b7:102]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1etCOY-0007Mu-Kq for pgsql-hackers@postgresql.org; Tue, 06 Mar 2018 13:12:45 +0000 Received: from mxback3g.mail.yandex.net (mxback3g.mail.yandex.net [IPv6:2a02:6b8:0:1472:2741:0:8b7:164]) by forward102p.mail.yandex.net (Yandex) with ESMTP id 9813143028F4; Tue, 6 Mar 2018 16:12:36 +0300 (MSK) Received: from localhost (localhost [::1]) by mxback3g.mail.yandex.net (nwsmtp/Yandex) with ESMTP id esrnJGuWuG-CVsKwAwT; Tue, 06 Mar 2018 16:12:32 +0300 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=zsrv.org; s=mail; t=1520341952; bh=aeR2OKaz7lWfN+WDYezpBjU63ffO4NadFpu8+9AqTm0=; h=From:To:Cc:In-Reply-To:References:Subject:Message-Id:Date; b=R7wXaZ4oMGMuSTl6ZjhthU88htnwSWv6gqnLSp5rUnZcU8OTMOx+Zxk640BL8l2bf Fc1HpgwUfFcv0hqS8kueQHivsVN1Xa2c0Yi7mQ44PZMqBJY66Vud7Xvt1Wzim2cBui NmZ6gSbVKCRORXxwNjVIfv9farzNhoZekvljkbxo= Authentication-Results: mxback3g.mail.yandex.net; dkim=pass header.i=@zsrv.org Received: by web57o.yandex.ru with HTTP; Tue, 06 Mar 2018 16:12:31 +0300 From: Sergei Kornilov To: Ildar Musin , Stephen Frost Cc: Robert Haas , Tom Lane , "pgsql-hackers@postgresql.org" In-Reply-To: <8fd20248-4059-4d46-b33f-c9760cb3ddb9@postgrespro.ru> 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> <354171516734367@web46g.yandex.ru> <8fd20248-4059-4d46-b33f-c9760cb3ddb9@postgrespro.ru> Subject: Re: using index or check in ALTER TABLE SET NOT NULL MIME-Version: 1.0 Message-Id: <611431520341951@web57o.yandex.ru> X-Mailer: Yamail [ http://yandex.ru ] 5.0 Date: Tue, 06 Mar 2018 16:12:31 +0300 Content-Type: multipart/mixed; boundary="----==--bound.61144.web57o.yandex.ru" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk ------==--bound.61144.web57o.yandex.ru Content-Transfer-Encoding: 7bit Content-Type: text/plain Hello thank you for review! > Adding check constraint will also force the full table scan. So I think > it would be better to rephrased it as follows: Agree. I updated docs in new attached patch slightly different > Regarding regression tests it may be useful to set client_min_messages > to 'debug1' before setting "NOT NULL" attribute for a column. In this > case you can tell for sure that NotNullImpliedByRelConstraints() > returned true (i.e. your code actually did the job) as the special debug > message is printed to the log. I can not find any debug messages in tests: grep client_min_messages -irn src/test/ Only some warning level and few error. So i verify in regression tests only top-level behavior. Or this paragraph was for other people, not for tests? regards, Sergei ------==--bound.61144.web57o.yandex.ru Content-Disposition: attachment; filename="alter_table_set_not_null_by_constraints_only_v5.patch" Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name="alter_table_set_not_null_by_constraints_only_v5.patch" ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvYWx0ZXJfdGFibGUuc2dtbCBiL2RvYy9zcmMv c2dtbC9yZWYvYWx0ZXJfdGFibGUuc2dtbAppbmRleCBhZmUyMTM5Li43ODNhMGVmIDEwMDY0NAot LS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2FsdGVyX3RhYmxlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21s L3JlZi9hbHRlcl90YWJsZS5zZ21sCkBAIC0yMTUsOCArMjE1LDE1IEBAIFdJVEggKCBNT0RVTFVT IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5udW1lcmljX2xpdGVyYWw8L3JlcGxhY2Vh YmxlPiwgUkVNCiAgICAgPGxpc3RpdGVtPgogICAgICA8cGFyYT4KICAgICAgIFRoZXNlIGZvcm1z IGNoYW5nZSB3aGV0aGVyIGEgY29sdW1uIGlzIG1hcmtlZCB0byBhbGxvdyBudWxsCi0gICAgICB2 YWx1ZXMgb3IgdG8gcmVqZWN0IG51bGwgdmFsdWVzLiAgWW91IGNhbiBvbmx5IHVzZSA8bGl0ZXJh bD5TRVQKLSAgICAgIE5PVCBOVUxMPC9saXRlcmFsPiB3aGVuIHRoZSBjb2x1bW4gY29udGFpbnMg bm8gbnVsbCB2YWx1ZXMuCisgICAgICB2YWx1ZXMgb3IgdG8gcmVqZWN0IG51bGwgdmFsdWVzLgor ICAgICA8L3BhcmE+CisKKyAgICAgPHBhcmE+CisgICAgICBZb3UgY2FuIG9ubHkgdXNlIDxsaXRl cmFsPlNFVCBOT1QgTlVMTDwvbGl0ZXJhbD4gd2hlbiB0aGUgY29sdW1uIAorICAgICAgY29udGFp bnMgbm8gbnVsbCB2YWx1ZXMuIEZ1bGwgdGFibGUgc2NhbiBpcyBwZXJmb3JtZWQgdG8gY2hlY2sg CisgICAgICB0aGlzIGNvbmRpdGlvbiB1bmxlc3MgdGhlcmUgYXJlIHZhbGlkIDxsaXRlcmFsPkNI RUNLPC9saXRlcmFsPiAKKyAgICAgIGNvbnN0cmFpbnRzIHRoYXQgcHJvaGliaXQgTlVMTCB2YWx1 ZXMgZm9yIHNwZWNpZmllZCBjb2x1bW4uCisgICAgICBJbiB0aGUgbGF0dGVyIGNhc2UgdGFibGUg c2NhbiBpcyBza2lwcGVkLgogICAgICA8L3BhcmE+CiAKICAgICAgPHBhcmE+CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jYXRhbG9nL3BhcnRpdGlvbi5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9w YXJ0aXRpb24uYwppbmRleCBmY2Y3NjU1Li40ZmVjMzZkIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9jYXRhbG9nL3BhcnRpdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGFydGl0aW9u LmMKQEAgLTEyNTgsNyArMTI1OCw3IEBAIGNoZWNrX2RlZmF1bHRfYWxsb3dzX2JvdW5kKFJlbGF0 aW9uIHBhcmVudCwgUmVsYXRpb24gZGVmYXVsdF9yZWwsCiAJICogbm90IGNvbnRhaW4gYW55IHJv dyB0aGF0IHdvdWxkIGJlbG9uZyB0byB0aGUgbmV3IHBhcnRpdGlvbiwgd2UgY2FuCiAJICogYXZv aWQgc2Nhbm5pbmcgdGhlIGRlZmF1bHQgcGFydGl0aW9uLgogCSAqLwotCWlmIChQYXJ0Q29uc3Ry YWludEltcGxpZWRCeVJlbENvbnN0cmFpbnQoZGVmYXVsdF9yZWwsIGRlZl9wYXJ0X2NvbnN0cmFp bnRzKSkKKwlpZiAoQ29uc3RyYWludEltcGxpZWRCeVJlbENvbnN0cmFpbnQoZGVmYXVsdF9yZWws IGRlZl9wYXJ0X2NvbnN0cmFpbnRzKSkKIAl7CiAJCWVyZXBvcnQoSU5GTywKIAkJCQkoZXJybXNn KCJ1cGRhdGVkIHBhcnRpdGlvbiBjb25zdHJhaW50IGZvciBkZWZhdWx0IHBhcnRpdGlvbiBcIiVz XCIgaXMgaW1wbGllZCBieSBleGlzdGluZyBjb25zdHJhaW50cyIsCkBAIC0xMzAyLDggKzEzMDIs OCBAQCBjaGVja19kZWZhdWx0X2FsbG93c19ib3VuZChSZWxhdGlvbiBwYXJlbnQsIFJlbGF0aW9u IGRlZmF1bHRfcmVsLAogCQkJICogdGhhdCBpdCB3aWxsIG5vdCBjb250YWluIGFueSByb3cgdGhh dCB3b3VsZCBiZWxvbmcgdG8gdGhlIG5ldwogCQkJICogcGFydGl0aW9uLCB3ZSBjYW4gYXZvaWQg c2Nhbm5pbmcgdGhlIGNoaWxkIHRhYmxlLgogCQkJICovCi0JCQlpZiAoUGFydENvbnN0cmFpbnRJ bXBsaWVkQnlSZWxDb25zdHJhaW50KHBhcnRfcmVsLAotCQkJCQkJCQkJCQkJCSBkZWZfcGFydF9j b25zdHJhaW50cykpCisJCQlpZiAoQ29uc3RyYWludEltcGxpZWRCeVJlbENvbnN0cmFpbnQocGFy dF9yZWwsCisJCQkJCQkJCQkJCQkgZGVmX3BhcnRfY29uc3RyYWludHMpKQogCQkJewogCQkJCWVy ZXBvcnQoSU5GTywKIAkJCQkJCShlcnJtc2coInVwZGF0ZWQgcGFydGl0aW9uIGNvbnN0cmFpbnQg Zm9yIGRlZmF1bHQgcGFydGl0aW9uIFwiJXNcIiBpcyBpbXBsaWVkIGJ5IGV4aXN0aW5nIGNvbnN0 cmFpbnRzIiwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggNzRlMDIwYi4uM2Y3MjE4ZCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKQEAgLTE2Miw3ICsxNjIsNyBAQCB0eXBlZGVmIHN0 cnVjdCBBbHRlcmVkVGFibGVJbmZvCiAJLyogSW5mb3JtYXRpb24gc2F2ZWQgYnkgUGhhc2VzIDEv MiBmb3IgUGhhc2UgMzogKi8KIAlMaXN0CSAgICpjb25zdHJhaW50czsJLyogTGlzdCBvZiBOZXdD b25zdHJhaW50ICovCiAJTGlzdAkgICAqbmV3dmFsczsJCS8qIExpc3Qgb2YgTmV3Q29sdW1uVmFs dWUgKi8KLQlib29sCQluZXdfbm90bnVsbDsJLyogVCBpZiB3ZSBhZGRlZCBuZXcgTk9UIE5VTEwg Y29uc3RyYWludHMgKi8KKwlib29sCQl2ZXJpZnlfbmV3X25vdG51bGw7IC8qIFQgaWYgd2Ugc2hv dWxkIHJlY2hlY2sgTk9UIE5VTEwgKi8KIAlpbnQJCQlyZXdyaXRlOwkJLyogUmVhc29uIGZvciBm b3JjZWQgcmV3cml0ZSwgaWYgYW55ICovCiAJT2lkCQkJbmV3VGFibGVTcGFjZTsJLyogbmV3IHRh Ymxlc3BhY2U7IDAgbWVhbnMgbm8gY2hhbmdlICovCiAJYm9vbAkJY2hnUGVyc2lzdGVuY2U7IC8q IFQgaWYgU0VUIExPR0dFRC9VTkxPR0dFRCBpcyB1c2VkICovCkBAIC0zNzcsNiArMzc3LDcgQEAg c3RhdGljIE9iamVjdEFkZHJlc3MgQVRFeGVjRHJvcE5vdE51bGwoUmVsYXRpb24gcmVsLCBjb25z dCBjaGFyICpjb2xOYW1lLCBMT0NLTU8KIHN0YXRpYyB2b2lkIEFUUHJlcFNldE5vdE51bGwoUmVs YXRpb24gcmVsLCBib29sIHJlY3Vyc2UsIGJvb2wgcmVjdXJzaW5nKTsKIHN0YXRpYyBPYmplY3RB ZGRyZXNzIEFURXhlY1NldE5vdE51bGwoQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBSZWxhdGlvbiBy ZWwsCiAJCQkJIGNvbnN0IGNoYXIgKmNvbE5hbWUsIExPQ0tNT0RFIGxvY2ttb2RlKTsKK3N0YXRp YyBib29sIE5vdE51bGxJbXBsaWVkQnlSZWxDb25zdHJhaW50cyhSZWxhdGlvbiByZWwsIEZvcm1f cGdfYXR0cmlidXRlIGF0dHIpOwogc3RhdGljIE9iamVjdEFkZHJlc3MgQVRFeGVjQ29sdW1uRGVm YXVsdChSZWxhdGlvbiByZWwsIGNvbnN0IGNoYXIgKmNvbE5hbWUsCiAJCQkJCU5vZGUgKm5ld0Rl ZmF1bHQsIExPQ0tNT0RFIGxvY2ttb2RlKTsKIHN0YXRpYyBPYmplY3RBZGRyZXNzIEFURXhlY0Fk ZElkZW50aXR5KFJlbGF0aW9uIHJlbCwgY29uc3QgY2hhciAqY29sTmFtZSwKQEAgLTQzNzEsNyAr NDM3Miw3IEBAIEFUUmV3cml0ZVRhYmxlcyhBbHRlclRhYmxlU3RtdCAqcGFyc2V0cmVlLCBMaXN0 ICoqd3F1ZXVlLCBMT0NLTU9ERSBsb2NrbW9kZSkKIAkJCSAqIFRlc3QgdGhlIGN1cnJlbnQgZGF0 YSB3aXRoaW4gdGhlIHRhYmxlIGFnYWluc3QgbmV3IGNvbnN0cmFpbnRzCiAJCQkgKiBnZW5lcmF0 ZWQgYnkgQUxURVIgVEFCTEUgY29tbWFuZHMsIGJ1dCBkb24ndCByZWJ1aWxkIGRhdGEuCiAJCQkg Ki8KLQkJCWlmICh0YWItPmNvbnN0cmFpbnRzICE9IE5JTCB8fCB0YWItPm5ld19ub3RudWxsIHx8 CisJCQlpZiAodGFiLT5jb25zdHJhaW50cyAhPSBOSUwgfHwgdGFiLT52ZXJpZnlfbmV3X25vdG51 bGwgfHwKIAkJCQl0YWItPnBhcnRpdGlvbl9jb25zdHJhaW50ICE9IE5VTEwpCiAJCQkJQVRSZXdy aXRlVGFibGUodGFiLCBJbnZhbGlkT2lkLCBsb2NrbW9kZSk7CiAKQEAgLTQ1MzIsNyArNDUzMyw3 IEBAIEFUUmV3cml0ZVRhYmxlKEFsdGVyZWRUYWJsZUluZm8gKnRhYiwgT2lkIE9JRE5ld0hlYXAs IExPQ0tNT0RFIGxvY2ttb2RlKQogCX0KIAogCW5vdG51bGxfYXR0cnMgPSBOSUw7Ci0JaWYgKG5l d3JlbCB8fCB0YWItPm5ld19ub3RudWxsKQorCWlmIChuZXdyZWwgfHwgdGFiLT52ZXJpZnlfbmV3 X25vdG51bGwpCiAJewogCQkvKgogCQkgKiBJZiB3ZSBhcmUgcmVidWlsZGluZyB0aGUgdHVwbGVz IE9SIGlmIHdlIGFkZGVkIGFueSBuZXcgTk9UIE5VTEwKQEAgLTU1NDUsNyArNTU0Niw3IEBAIEFU RXhlY0FkZENvbHVtbihMaXN0ICoqd3F1ZXVlLCBBbHRlcmVkVGFibGVJbmZvICp0YWIsIFJlbGF0 aW9uIHJlbCwKIAkJICogbnVsbCwgYnV0IHNpbmNlIGl0J3MgZmlsbGVkIHNwZWNpYWxseSwgdGhl cmUncyBubyBuZWVkIHRvIHRlc3QKIAkJICogYW55dGhpbmcuKQogCQkgKi8KLQkJdGFiLT5uZXdf bm90bnVsbCB8PSBjb2xEZWYtPmlzX25vdF9udWxsOworCQl0YWItPnZlcmlmeV9uZXdfbm90bnVs bCB8PSBjb2xEZWYtPmlzX25vdF9udWxsOwogCX0KIAogCS8qCkBAIC01OTQ4LDggKzU5NDksMTcg QEAgQVRFeGVjU2V0Tm90TnVsbChBbHRlcmVkVGFibGVJbmZvICp0YWIsIFJlbGF0aW9uIHJlbCwK IAogCQlDYXRhbG9nVHVwbGVVcGRhdGUoYXR0cl9yZWwsICZ0dXBsZS0+dF9zZWxmLCB0dXBsZSk7 CiAKLQkJLyogVGVsbCBQaGFzZSAzIGl0IG5lZWRzIHRvIHRlc3QgdGhlIGNvbnN0cmFpbnQgKi8K LQkJdGFiLT5uZXdfbm90bnVsbCA9IHRydWU7CisJCS8qCisJCSAqIFZlcmlmeWluZyB0YWJsZSBk YXRhIGNhbiBiZSBkb25lIGluIFBoYXNlIDMgd2l0aCBzaW5nbGUgdGFibGUgc2NhbgorCQkgKiBm b3IgYWxsIGNvbnN0cmFpbnQgKGJvdGggZXhpc3RpbmcgYW5kIG5ldykKKwkJICogV2UgY2FuIHNr aXAgdGhpcyBjaGVjayBvbmx5IGlmIGV2ZXJ5IG5ldyBOT1QgTlVMTCBjb250cmFpbnQKKwkJICog aW1wbGllZCBieSBleGlzdGVkIHRhYmxlIGNvbnN0cmFpbnRzCisJCSAqLworCQlpZiAoIU5vdE51 bGxJbXBsaWVkQnlSZWxDb25zdHJhaW50cyhyZWwsIChGb3JtX3BnX2F0dHJpYnV0ZSkgR0VUU1RS VUNUKHR1cGxlKSkpCisJCXsKKwkJCS8qIFRlbGwgUGhhc2UgMyBpdCBuZWVkcyB0byB0ZXN0IHRo ZSBjb25zdHJhaW50cyAqLworCQkJdGFiLT52ZXJpZnlfbmV3X25vdG51bGwgPSB0cnVlOworCQl9 CiAKIAkJT2JqZWN0QWRkcmVzc1N1YlNldChhZGRyZXNzLCBSZWxhdGlvblJlbGF0aW9uSWQsCiAJ CQkJCQkJUmVsYXRpb25HZXRSZWxpZChyZWwpLCBhdHRudW0pOwpAQCAtNTk2Niw2ICs1OTc2LDQ2 IEBAIEFURXhlY1NldE5vdE51bGwoQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBSZWxhdGlvbiByZWws CiB9CiAKIC8qCisgKiBOb3ROdWxsSW1wbGllZEJ5UmVsQ29uc3RyYWludHMKKyAqCQlEb2VzIHJl bCdzIGV4aXN0aW5nIGNvbnN0cmFpbnRzIGltcGx5IE5PVCBOVUxMIGZvciBnaXZlbiBhdHRyaWJ1 dGUKKyAqLworc3RhdGljIGJvb2wKK05vdE51bGxJbXBsaWVkQnlSZWxDb25zdHJhaW50cyhSZWxh dGlvbiByZWwsIEZvcm1fcGdfYXR0cmlidXRlIGF0dHIpCit7CisJTGlzdAkgICAqbm90TnVsbENv bnN0cmFpbnQgPSBOSUw7CisJTnVsbFRlc3QgICAqbm51bGx0ZXN0ID0gbWFrZU5vZGUoTnVsbFRl c3QpOworCisJbm51bGx0ZXN0LT5hcmcgPSAoRXhwciAqKSBtYWtlVmFyKDEsCisJCQkJCQkJCQkg IGF0dHItPmF0dG51bSwKKwkJCQkJCQkJCSAgYXR0ci0+YXR0dHlwaWQsCisJCQkJCQkJCQkgIGF0 dHItPmF0dHR5cG1vZCwKKwkJCQkJCQkJCSAgYXR0ci0+YXR0Y29sbGF0aW9uLAorCQkJCQkJCQkJ ICAwKTsKKwlubnVsbHRlc3QtPm51bGx0ZXN0dHlwZSA9IElTX05PVF9OVUxMOworCisJLyoKKwkg KiBzYW1lIHRoaW5nIGFzIGluIENvbnN0cmFpbnRJbXBsaWVkQnlSZWxDb25zdHJhaW50IGFyZ2lz cm93PWZhbHNlIGlzCisJICogY29ycmVjdCBldmVuIGZvciBhIGNvbXBvc2l0ZSBjb2x1bW4sIGJl Y2F1c2UgYXR0bm90bnVsbCBkb2VzIG5vdAorCSAqIHJlcHJlc2VudCBhIFNRTC1zcGVjIElTIE5P VCBOVUxMIHRlc3QgaW4gc3VjaCBhIGNhc2UsIGp1c3QgSVMgRElTVElOQ1QKKwkgKiBGUk9NIE5V TEwuCisJICovCisJbm51bGx0ZXN0LT5hcmdpc3JvdyA9IGZhbHNlOworCW5udWxsdGVzdC0+bG9j YXRpb24gPSAtMTsKKwlub3ROdWxsQ29uc3RyYWludCA9IGxhcHBlbmQobm90TnVsbENvbnN0cmFp bnQsIG5udWxsdGVzdCk7CisKKwlpZiAoQ29uc3RyYWludEltcGxpZWRCeVJlbENvbnN0cmFpbnQo cmVsLCBub3ROdWxsQ29uc3RyYWludCkpCisJeworCQllcmVwb3J0KERFQlVHMSwKKwkJCQkoZXJy bXNnKCJ2ZXJpZnlpbmcgdGFibGUgXCIlc1wiIE5PVCBOVUxMIGNvbnN0cmFpbnQgIgorCQkJCQkJ Im9uICVzIGF0dHJpYnV0ZSBieSBleGlzdGVkIGNvbnN0cmFpbnRzIiwKKwkJCQkJCVJlbGF0aW9u R2V0UmVsYXRpb25OYW1lKHJlbCksIE5hbWVTdHIoYXR0ci0+YXR0bmFtZSkpKSk7CisJCXJldHVy biB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoKICAqIEFMVEVSIFRBQkxFIEFM VEVSIENPTFVNTiBTRVQvRFJPUCBERUZBVUxUCiAgKgogICogUmV0dXJuIHRoZSBhZGRyZXNzIG9m IHRoZSBhZmZlY3RlZCBjb2x1bW4uCkBAIC0xMzY1MCwxNSArMTM3MDAsMTQgQEAgQ29tcHV0ZVBh cnRpdGlvbkF0dHJzKFJlbGF0aW9uIHJlbCwgTGlzdCAqcGFydFBhcmFtcywgQXR0ck51bWJlciAq cGFydGF0dHJzLAogfQogCiAvKgotICogUGFydENvbnN0cmFpbnRJbXBsaWVkQnlSZWxDb25zdHJh aW50Ci0gKgkJRG9lcyBzY2FucmVsJ3MgZXhpc3RpbmcgY29uc3RyYWludHMgaW1wbHkgdGhlIHBh cnRpdGlvbiBjb25zdHJhaW50PworICogQ29uc3RyYWludEltcGxpZWRCeVJlbENvbnN0cmFpbnQK KyAqCQlEb2VzIHNjYW5yZWwncyBleGlzdGluZyBjb25zdHJhaW50cyBpbXBseSBnaXZlbiBjb25z dHJhaW50CiAgKgotICogRXhpc3RpbmcgY29uc3RyYWludHMgaW5jbHVkZXMgaXRzIGNoZWNrIGNv bnN0cmFpbnRzIGFuZCBjb2x1bW4tbGV2ZWwKKyAqIEV4aXN0aW5nIGNvbnN0cmFpbnRzIGluY2x1 ZGVzIGl0cyBjaGVjayBjb25zdHJhaW50cywgY29sdW1uLWxldmVsCiAgKiBOT1QgTlVMTCBjb25z dHJhaW50cyBhbmQgcGFydENvbnN0cmFpbnQgZGVzY3JpYmVzIHRoZSBwYXJ0aXRpb24gY29uc3Ry YWludC4KICAqLwogYm9vbAotUGFydENvbnN0cmFpbnRJbXBsaWVkQnlSZWxDb25zdHJhaW50KFJl bGF0aW9uIHNjYW5yZWwsCi0JCQkJCQkJCQkgTGlzdCAqcGFydENvbnN0cmFpbnQpCitDb25zdHJh aW50SW1wbGllZEJ5UmVsQ29uc3RyYWludChSZWxhdGlvbiBzY2FucmVsLCBMaXN0ICp0ZXN0Q29u c3RyYWludCkKIHsKIAlMaXN0CSAgICpleGlzdENvbnN0cmFpbnQgPSBOSUw7CiAJVHVwbGVDb25z dHIgKmNvbnN0ciA9IFJlbGF0aW9uR2V0RGVzY3Ioc2NhbnJlbCktPmNvbnN0cjsKQEAgLTEzNzI4 LDcgKzEzNzc3LDcgQEAgUGFydENvbnN0cmFpbnRJbXBsaWVkQnlSZWxDb25zdHJhaW50KFJlbGF0 aW9uIHNjYW5yZWwsCiAJCWV4aXN0Q29uc3RyYWludCA9IGxpc3RfbWFrZTEobWFrZV9hbmRzX2V4 cGxpY2l0KGV4aXN0Q29uc3RyYWludCkpOwogCiAJLyogQW5kIGF3YXkgd2UgZ28gLi4uICovCi0J cmV0dXJuIHByZWRpY2F0ZV9pbXBsaWVkX2J5KHBhcnRDb25zdHJhaW50LCBleGlzdENvbnN0cmFp bnQsIHRydWUpOworCXJldHVybiBwcmVkaWNhdGVfaW1wbGllZF9ieSh0ZXN0Q29uc3RyYWludCwg ZXhpc3RDb25zdHJhaW50LCB0cnVlKTsKIH0KIAogLyoKQEAgLTEzNzU2LDcgKzEzODA1LDcgQEAg VmFsaWRhdGVQYXJ0aXRpb25Db25zdHJhaW50cyhMaXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiBzY2Fu cmVsLAogCSAqIEJhc2VkIG9uIHRoZSB0YWJsZSdzIGV4aXN0aW5nIGNvbnN0cmFpbnRzLCBkZXRl cm1pbmUgaWYgd2UgY2FuIHNraXAKIAkgKiBzY2FubmluZyB0aGUgdGFibGUgdG8gdmFsaWRhdGUg dGhlIHBhcnRpdGlvbiBjb25zdHJhaW50LgogCSAqLwotCWlmIChQYXJ0Q29uc3RyYWludEltcGxp ZWRCeVJlbENvbnN0cmFpbnQoc2NhbnJlbCwgcGFydENvbnN0cmFpbnQpKQorCWlmIChDb25zdHJh aW50SW1wbGllZEJ5UmVsQ29uc3RyYWludChzY2FucmVsLCBwYXJ0Q29uc3RyYWludCkpCiAJewog CQlpZiAoIXZhbGlkYXRlX2RlZmF1bHQpCiAJCQllcmVwb3J0KElORk8sCkBAIC0xMzgwOCw3ICsx Mzg1Nyw3IEBAIFZhbGlkYXRlUGFydGl0aW9uQ29uc3RyYWludHMoTGlzdCAqKndxdWV1ZSwgUmVs YXRpb24gc2NhbnJlbCwKIAkJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCB3aG9sZS1yb3cgcmVm ZXJlbmNlIGZvdW5kIGluIHBhcnRpdGlvbiBrZXkiKTsKIAogCQkJLyogQ2FuIHdlIHNraXAgc2Nh bm5pbmcgdGhpcyBwYXJ0X3JlbD8gKi8KLQkJCWlmIChQYXJ0Q29uc3RyYWludEltcGxpZWRCeVJl bENvbnN0cmFpbnQocGFydF9yZWwsIG15X3BhcnRjb25zdHIpKQorCQkJaWYgKENvbnN0cmFpbnRJ bXBsaWVkQnlSZWxDb25zdHJhaW50KHBhcnRfcmVsLCBteV9wYXJ0Y29uc3RyKSkKIAkJCXsKIAkJ CQlpZiAoIXZhbGlkYXRlX2RlZmF1bHQpCiAJCQkJCWVyZXBvcnQoSU5GTywKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2NvbW1hbmRzL3RhYmxlY21kcy5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMv dGFibGVjbWRzLmgKaW5kZXggMDZlNTE4MC4uOGUzZDBjMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvY29tbWFuZHMvdGFibGVjbWRzLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvdGFibGVj bWRzLmgKQEAgLTg4LDcgKzg4LDcgQEAgZXh0ZXJuIHZvaWQgUmFuZ2VWYXJDYWxsYmFja093bnNU YWJsZShjb25zdCBSYW5nZVZhciAqcmVsYXRpb24sCiAKIGV4dGVybiB2b2lkIFJhbmdlVmFyQ2Fs bGJhY2tPd25zUmVsYXRpb24oY29uc3QgUmFuZ2VWYXIgKnJlbGF0aW9uLAogCQkJCQkJCSBPaWQg cmVsSWQsIE9pZCBvbGRSZWxJZCwgdm9pZCAqbm9DYXRhbG9ncyk7Ci1leHRlcm4gYm9vbCBQYXJ0 Q29uc3RyYWludEltcGxpZWRCeVJlbENvbnN0cmFpbnQoUmVsYXRpb24gc2NhbnJlbCwKLQkJCQkJ CQkJCSBMaXN0ICpwYXJ0Q29uc3RyYWludCk7CitleHRlcm4gYm9vbCBDb25zdHJhaW50SW1wbGll ZEJ5UmVsQ29uc3RyYWludChSZWxhdGlvbiBzY2FucmVsLAorCQkJCQkJCQkgTGlzdCAqdGVzdENv bnN0cmFpbnQpOwogCiAjZW5kaWYJCQkJCQkJLyogVEFCTEVDTURTX0ggKi8KZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYWx0ZXJfdGFibGUub3V0IGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9hbHRlcl90YWJsZS5vdXQKaW5kZXggY2NkMmMzOC4uMjE3YzIyZCAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9hbHRlcl90YWJsZS5vdXQKKysrIGIv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9hbHRlcl90YWJsZS5vdXQKQEAgLTEwMzgsNiArMTAz OCw0MSBAQCBhbHRlciB0YWJsZSBteXZpZXcgYWx0ZXIgY29sdW1uIHRlc3Qgc2V0IG5vdCBudWxs OwogRVJST1I6ICAibXl2aWV3IiBpcyBub3QgYSB0YWJsZSBvciBmb3JlaWduIHRhYmxlCiBkcm9w IHZpZXcgbXl2aWV3OwogZHJvcCB0YWJsZSBhdGFjYzE7CistLSBzZXQgbm90IG51bGwgdmVyaWZp ZWQgYnkgY29uc3RyYWludHMKK2NyZWF0ZSB0YWJsZSBhdGFjYzEgKHRlc3RfYSBpbnQsIHRlc3Rf YiBpbnQpOworaW5zZXJ0IGludG8gYXRhY2MxIHZhbHVlcyAobnVsbCwgMSk7CistLSBjb25zdHJh aW50IG5vdCBjb3ZlciBhbGwgdmFsdWVzLCBzaG91bGQgZmFpbAorYWx0ZXIgdGFibGUgYXRhY2Mx IGFkZCBjb25zdHJhaW50IGF0YWNjMV9jb25zdHJfb3IgY2hlY2sodGVzdF9hIGlzIG5vdCBudWxs IG9yIHRlc3RfYiA8IDEwKTsKK2FsdGVyIHRhYmxlIGF0YWNjMSBhbHRlciB0ZXN0X2Egc2V0IG5v dCBudWxsOworRVJST1I6ICBjb2x1bW4gInRlc3RfYSIgY29udGFpbnMgbnVsbCB2YWx1ZXMKK2Fs dGVyIHRhYmxlIGF0YWNjMSBkcm9wIGNvbnN0cmFpbnQgYXRhY2MxX2NvbnN0cl9vcjsKKy0tIG5v dCB2YWxpZCBjb25zdHJhaW50LCBzaG91bGQgZmFpbAorYWx0ZXIgdGFibGUgYXRhY2MxIGFkZCBj b25zdHJhaW50IGF0YWNjMV9jb25zdHJfaW52YWxpZCBjaGVjayh0ZXN0X2EgaXMgbm90IG51bGwp IG5vdCB2YWxpZDsKK2FsdGVyIHRhYmxlIGF0YWNjMSBhbHRlciB0ZXN0X2Egc2V0IG5vdCBudWxs OworRVJST1I6ICBjb2x1bW4gInRlc3RfYSIgY29udGFpbnMgbnVsbCB2YWx1ZXMKK2FsdGVyIHRh YmxlIGF0YWNjMSBkcm9wIGNvbnN0cmFpbnQgYXRhY2MxX2NvbnN0cl9pbnZhbGlkOworLS0gd2l0 aCB2YWxpZCBjb25zdHJhaW50Cit1cGRhdGUgYXRhY2MxIHNldCB0ZXN0X2EgPSAxOworYWx0ZXIg dGFibGUgYXRhY2MxIGFkZCBjb25zdHJhaW50IGF0YWNjMV9jb25zdHJfYV92YWxpZCBjaGVjayh0 ZXN0X2EgaXMgbm90IG51bGwpOworYWx0ZXIgdGFibGUgYXRhY2MxIGFsdGVyIHRlc3RfYSBzZXQg bm90IG51bGw7CitkZWxldGUgZnJvbSBhdGFjYzE7CitpbnNlcnQgaW50byBhdGFjYzEgdmFsdWVz ICgyLCBudWxsKTsKK2FsdGVyIHRhYmxlIGF0YWNjMSBhbHRlciB0ZXN0X2EgZHJvcCBub3QgbnVs bDsKKy0tIHRlc3QgbXVsdGlwbGUgc2V0IG5vdCBudWxsIGF0IHNhbWUgdGltZQorLS0gdGVzdF9h IGNoZWNrZWQgYnkgYXRhY2MxX2NvbnN0cl9hX3ZhbGlkLCB0ZXN0X2Igc2hvdWxkIGZhaWwgYnkg dGFibGUgc2NhbgorYWx0ZXIgdGFibGUgYXRhY2MxIGFsdGVyIHRlc3RfYSBzZXQgbm90IG51bGws IGFsdGVyIHRlc3RfYiBzZXQgbm90IG51bGw7CitFUlJPUjogIGNvbHVtbiAidGVzdF9iIiBjb250 YWlucyBudWxsIHZhbHVlcworLS0gY29tbWFuZHMgb3JkZXIgaGFzIG5vIGltcG9ydGFuY2UKK2Fs dGVyIHRhYmxlIGF0YWNjMSBhbHRlciB0ZXN0X2Igc2V0IG5vdCBudWxsLCBhbHRlciB0ZXN0X2Eg c2V0IG5vdCBudWxsOworRVJST1I6ICBjb2x1bW4gInRlc3RfYiIgY29udGFpbnMgbnVsbCB2YWx1 ZXMKKy0tIHZhbGlkIG9uZSBieSB0YWJsZSBzY2FuLCBvbmUgYnkgY2hlY2sgY29uc3RyYWludHMK K3VwZGF0ZSBhdGFjYzEgc2V0IHRlc3RfYiA9IDE7CithbHRlciB0YWJsZSBhdGFjYzEgYWx0ZXIg dGVzdF9iIHNldCBub3QgbnVsbCwgYWx0ZXIgdGVzdF9hIHNldCBub3QgbnVsbDsKK2FsdGVyIHRh YmxlIGF0YWNjMSBhbHRlciB0ZXN0X2EgZHJvcCBub3QgbnVsbCwgYWx0ZXIgdGVzdF9iIGRyb3Ag bm90IG51bGw7CistLSBib3RoIGNvbHVtbiBoYXMgY2hlY2sgY29uc3RyYWludHMKK2FsdGVyIHRh YmxlIGF0YWNjMSBhZGQgY29uc3RyYWludCBhdGFjYzFfY29uc3RyX2JfdmFsaWQgY2hlY2sodGVz dF9iIGlzIG5vdCBudWxsKTsKK2FsdGVyIHRhYmxlIGF0YWNjMSBhbHRlciB0ZXN0X2Igc2V0IG5v dCBudWxsLCBhbHRlciB0ZXN0X2Egc2V0IG5vdCBudWxsOworZHJvcCB0YWJsZSBhdGFjYzE7CiAt LSB0ZXN0IGluaGVyaXRhbmNlCiBjcmVhdGUgdGFibGUgcGFyZW50IChhIGludCk7CiBjcmVhdGUg dGFibGUgY2hpbGQgKGIgdmFyY2hhcigyNTUpKSBpbmhlcml0cyAocGFyZW50KTsKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2FsdGVyX3RhYmxlLnNxbCBiL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL2FsdGVyX3RhYmxlLnNxbAppbmRleCBiNzNmNTIzLi4wYWJhMGZiIDEwMDY0NAotLS0g YS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9hbHRlcl90YWJsZS5zcWwKKysrIGIvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvYWx0ZXJfdGFibGUuc3FsCkBAIC03OTgsNiArNzk4LDQxIEBAIGRyb3AgdmlldyBt eXZpZXc7CiAKIGRyb3AgdGFibGUgYXRhY2MxOwogCistLSBzZXQgbm90IG51bGwgdmVyaWZpZWQg YnkgY29uc3RyYWludHMKK2NyZWF0ZSB0YWJsZSBhdGFjYzEgKHRlc3RfYSBpbnQsIHRlc3RfYiBp bnQpOworaW5zZXJ0IGludG8gYXRhY2MxIHZhbHVlcyAobnVsbCwgMSk7CistLSBjb25zdHJhaW50 IG5vdCBjb3ZlciBhbGwgdmFsdWVzLCBzaG91bGQgZmFpbAorYWx0ZXIgdGFibGUgYXRhY2MxIGFk ZCBjb25zdHJhaW50IGF0YWNjMV9jb25zdHJfb3IgY2hlY2sodGVzdF9hIGlzIG5vdCBudWxsIG9y IHRlc3RfYiA8IDEwKTsKK2FsdGVyIHRhYmxlIGF0YWNjMSBhbHRlciB0ZXN0X2Egc2V0IG5vdCBu dWxsOworYWx0ZXIgdGFibGUgYXRhY2MxIGRyb3AgY29uc3RyYWludCBhdGFjYzFfY29uc3RyX29y OworLS0gbm90IHZhbGlkIGNvbnN0cmFpbnQsIHNob3VsZCBmYWlsCithbHRlciB0YWJsZSBhdGFj YzEgYWRkIGNvbnN0cmFpbnQgYXRhY2MxX2NvbnN0cl9pbnZhbGlkIGNoZWNrKHRlc3RfYSBpcyBu b3QgbnVsbCkgbm90IHZhbGlkOworYWx0ZXIgdGFibGUgYXRhY2MxIGFsdGVyIHRlc3RfYSBzZXQg bm90IG51bGw7CithbHRlciB0YWJsZSBhdGFjYzEgZHJvcCBjb25zdHJhaW50IGF0YWNjMV9jb25z dHJfaW52YWxpZDsKKy0tIHdpdGggdmFsaWQgY29uc3RyYWludAordXBkYXRlIGF0YWNjMSBzZXQg dGVzdF9hID0gMTsKK2FsdGVyIHRhYmxlIGF0YWNjMSBhZGQgY29uc3RyYWludCBhdGFjYzFfY29u c3RyX2FfdmFsaWQgY2hlY2sodGVzdF9hIGlzIG5vdCBudWxsKTsKK2FsdGVyIHRhYmxlIGF0YWNj MSBhbHRlciB0ZXN0X2Egc2V0IG5vdCBudWxsOworZGVsZXRlIGZyb20gYXRhY2MxOworCitpbnNl cnQgaW50byBhdGFjYzEgdmFsdWVzICgyLCBudWxsKTsKK2FsdGVyIHRhYmxlIGF0YWNjMSBhbHRl ciB0ZXN0X2EgZHJvcCBub3QgbnVsbDsKKy0tIHRlc3QgbXVsdGlwbGUgc2V0IG5vdCBudWxsIGF0 IHNhbWUgdGltZQorLS0gdGVzdF9hIGNoZWNrZWQgYnkgYXRhY2MxX2NvbnN0cl9hX3ZhbGlkLCB0 ZXN0X2Igc2hvdWxkIGZhaWwgYnkgdGFibGUgc2NhbgorYWx0ZXIgdGFibGUgYXRhY2MxIGFsdGVy IHRlc3RfYSBzZXQgbm90IG51bGwsIGFsdGVyIHRlc3RfYiBzZXQgbm90IG51bGw7CistLSBjb21t YW5kcyBvcmRlciBoYXMgbm8gaW1wb3J0YW5jZQorYWx0ZXIgdGFibGUgYXRhY2MxIGFsdGVyIHRl c3RfYiBzZXQgbm90IG51bGwsIGFsdGVyIHRlc3RfYSBzZXQgbm90IG51bGw7CisKKy0tIHZhbGlk IG9uZSBieSB0YWJsZSBzY2FuLCBvbmUgYnkgY2hlY2sgY29uc3RyYWludHMKK3VwZGF0ZSBhdGFj YzEgc2V0IHRlc3RfYiA9IDE7CithbHRlciB0YWJsZSBhdGFjYzEgYWx0ZXIgdGVzdF9iIHNldCBu b3QgbnVsbCwgYWx0ZXIgdGVzdF9hIHNldCBub3QgbnVsbDsKKworYWx0ZXIgdGFibGUgYXRhY2Mx IGFsdGVyIHRlc3RfYSBkcm9wIG5vdCBudWxsLCBhbHRlciB0ZXN0X2IgZHJvcCBub3QgbnVsbDsK Ky0tIGJvdGggY29sdW1uIGhhcyBjaGVjayBjb25zdHJhaW50cworYWx0ZXIgdGFibGUgYXRhY2Mx IGFkZCBjb25zdHJhaW50IGF0YWNjMV9jb25zdHJfYl92YWxpZCBjaGVjayh0ZXN0X2IgaXMgbm90 IG51bGwpOworYWx0ZXIgdGFibGUgYXRhY2MxIGFsdGVyIHRlc3RfYiBzZXQgbm90IG51bGwsIGFs dGVyIHRlc3RfYSBzZXQgbm90IG51bGw7Citkcm9wIHRhYmxlIGF0YWNjMTsKKwogLS0gdGVzdCBp bmhlcml0YW5jZQogY3JlYXRlIHRhYmxlIHBhcmVudCAoYSBpbnQpOwogY3JlYXRlIHRhYmxlIGNo aWxkIChiIHZhcmNoYXIoMjU1KSkgaW5oZXJpdHMgKHBhcmVudCk7Cg== ------==--bound.61144.web57o.yandex.ru--