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 1etEto-0008DB-20 for pgsql-hackers@arkaria.postgresql.org; Tue, 06 Mar 2018 15:53:08 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1etEtm-0007cr-T5 for pgsql-hackers@arkaria.postgresql.org; Tue, 06 Mar 2018 15:53:06 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1etEtm-0007ch-Gd for pgsql-hackers@lists.postgresql.org; Tue, 06 Mar 2018 15:53:06 +0000 Received: from forward104p.mail.yandex.net ([77.88.28.107]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1etEth-0003eG-UU for pgsql-hackers@postgresql.org; Tue, 06 Mar 2018 15:53:05 +0000 Received: from mxback7j.mail.yandex.net (mxback7j.mail.yandex.net [IPv6:2a02:6b8:0:1619::110]) by forward104p.mail.yandex.net (Yandex) with ESMTP id 2D148182CFF; Tue, 6 Mar 2018 18:53:00 +0300 (MSK) Received: from localhost (localhost [::1]) by mxback7j.mail.yandex.net (nwsmtp/Yandex) with ESMTP id ab09rWNDjP-qwXO2LB8; Tue, 06 Mar 2018 18:52:59 +0300 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=zsrv.org; s=mail; t=1520351579; bh=qddv+q1F2RXR7+oW2R8Cjq76e8EJBz1nw9S5rpIR4lA=; h=From:To:Cc:In-Reply-To:References:Subject:Message-Id:Date; b=Xc0u+MtsZZ3KVXYLaKf89zoRMapVn3PFyyXjkBXfUp4ZlBEygJgOitBgRYeNJAdJr DOeNMzEDrqhTB6JM3/fvrqRJWuO1lSsbIKnpmorc+qUJXm3VrBK8sdNpyJi/Lysc/L Nm/SIz6SYU1MXnT7EtWc110uZIfjprHg+ndkzxOg= Authentication-Results: mxback7j.mail.yandex.net; dkim=pass header.i=@zsrv.org Received: by web5j.yandex.ru with HTTP; Tue, 06 Mar 2018 18:52:58 +0300 From: Sergei Kornilov To: Ildar Musin , Stephen Frost Cc: Robert Haas , Tom Lane , "pgsql-hackers@postgresql.org" In-Reply-To: <7a6a8eb5-a36c-239a-1724-9fc8a2f29115@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> <611431520341951@web57o.yandex.ru> <7a6a8eb5-a36c-239a-1724-9fc8a2f29115@postgrespro.ru> Subject: Re: using index or check in ALTER TABLE SET NOT NULL MIME-Version: 1.0 Message-Id: <880511520351578@web5j.yandex.ru> X-Mailer: Yamail [ http://yandex.ru ] 5.0 Date: Tue, 06 Mar 2018 18:52:58 +0300 Content-Type: multipart/mixed; boundary="----==--bound.88052.web5j.yandex.ru" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk ------==--bound.88052.web5j.yandex.ru Content-Transfer-Encoding: 7bit Content-Type: text/plain Hello, Ildar Thanks. I looked ATTACH PARTITION tests and found such checks. If no one is against i will just use in my patch INFO level instead DEBUG1, similarly ATTACH PARTITION code. Updated patch attached. Or i can rewrite tests to use DEBUG1 level. regards, Sergei ------==--bound.88052.web5j.yandex.ru Content-Disposition: attachment; filename="alter_table_set_not_null_by_constraints_only_v6.patch" Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name="alter_table_set_not_null_by_constraints_only_v6.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 c3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggNzRlMDIwYi4uYzM1NTM5YSAx 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 cmVsLCBub3ROdWxsQ29uc3RyYWludCkpCisJeworCQllcmVwb3J0KElORk8sCisJCQkJKGVycm1z ZygidmVyaWZ5aW5nIHRhYmxlIFwiJXNcIiBOT1QgTlVMTCBjb25zdHJhaW50ICIKKwkJCQkJCSJv biAlcyBhdHRyaWJ1dGUgYnkgZXhpc3RlZCBjb25zdHJhaW50cyIsCisJCQkJCQlSZWxhdGlvbkdl dFJlbGF0aW9uTmFtZShyZWwpLCBOYW1lU3RyKGF0dHItPmF0dG5hbWUpKSkpOworCQlyZXR1cm4g dHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCiAgKiBBTFRFUiBUQUJMRSBBTFRF UiBDT0xVTU4gU0VUL0RST1AgREVGQVVMVAogICoKICAqIFJldHVybiB0aGUgYWRkcmVzcyBvZiB0 aGUgYWZmZWN0ZWQgY29sdW1uLgpAQCAtMTM2NTAsMTUgKzEzNzAwLDE0IEBAIENvbXB1dGVQYXJ0 aXRpb25BdHRycyhSZWxhdGlvbiByZWwsIExpc3QgKnBhcnRQYXJhbXMsIEF0dHJOdW1iZXIgKnBh cnRhdHRycywKIH0KIAogLyoKLSAqIFBhcnRDb25zdHJhaW50SW1wbGllZEJ5UmVsQ29uc3RyYWlu dAotICoJCURvZXMgc2NhbnJlbCdzIGV4aXN0aW5nIGNvbnN0cmFpbnRzIGltcGx5IHRoZSBwYXJ0 aXRpb24gY29uc3RyYWludD8KKyAqIENvbnN0cmFpbnRJbXBsaWVkQnlSZWxDb25zdHJhaW50Cisg KgkJRG9lcyBzY2FucmVsJ3MgZXhpc3RpbmcgY29uc3RyYWludHMgaW1wbHkgZ2l2ZW4gY29uc3Ry YWludAogICoKLSAqIEV4aXN0aW5nIGNvbnN0cmFpbnRzIGluY2x1ZGVzIGl0cyBjaGVjayBjb25z dHJhaW50cyBhbmQgY29sdW1uLWxldmVsCisgKiBFeGlzdGluZyBjb25zdHJhaW50cyBpbmNsdWRl cyBpdHMgY2hlY2sgY29uc3RyYWludHMsIGNvbHVtbi1sZXZlbAogICogTk9UIE5VTEwgY29uc3Ry YWludHMgYW5kIHBhcnRDb25zdHJhaW50IGRlc2NyaWJlcyB0aGUgcGFydGl0aW9uIGNvbnN0cmFp bnQuCiAgKi8KIGJvb2wKLVBhcnRDb25zdHJhaW50SW1wbGllZEJ5UmVsQ29uc3RyYWludChSZWxh dGlvbiBzY2FucmVsLAotCQkJCQkJCQkJIExpc3QgKnBhcnRDb25zdHJhaW50KQorQ29uc3RyYWlu dEltcGxpZWRCeVJlbENvbnN0cmFpbnQoUmVsYXRpb24gc2NhbnJlbCwgTGlzdCAqdGVzdENvbnN0 cmFpbnQpCiB7CiAJTGlzdAkgICAqZXhpc3RDb25zdHJhaW50ID0gTklMOwogCVR1cGxlQ29uc3Ry ICpjb25zdHIgPSBSZWxhdGlvbkdldERlc2NyKHNjYW5yZWwpLT5jb25zdHI7CkBAIC0xMzcyOCw3 ICsxMzc3Nyw3IEBAIFBhcnRDb25zdHJhaW50SW1wbGllZEJ5UmVsQ29uc3RyYWludChSZWxhdGlv biBzY2FucmVsLAogCQlleGlzdENvbnN0cmFpbnQgPSBsaXN0X21ha2UxKG1ha2VfYW5kc19leHBs aWNpdChleGlzdENvbnN0cmFpbnQpKTsKIAogCS8qIEFuZCBhd2F5IHdlIGdvIC4uLiAqLwotCXJl dHVybiBwcmVkaWNhdGVfaW1wbGllZF9ieShwYXJ0Q29uc3RyYWludCwgZXhpc3RDb25zdHJhaW50 LCB0cnVlKTsKKwlyZXR1cm4gcHJlZGljYXRlX2ltcGxpZWRfYnkodGVzdENvbnN0cmFpbnQsIGV4 aXN0Q29uc3RyYWludCwgdHJ1ZSk7CiB9CiAKIC8qCkBAIC0xMzc1Niw3ICsxMzgwNSw3IEBAIFZh bGlkYXRlUGFydGl0aW9uQ29uc3RyYWludHMoTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gc2NhbnJl bCwKIAkgKiBCYXNlZCBvbiB0aGUgdGFibGUncyBleGlzdGluZyBjb25zdHJhaW50cywgZGV0ZXJt aW5lIGlmIHdlIGNhbiBza2lwCiAJICogc2Nhbm5pbmcgdGhlIHRhYmxlIHRvIHZhbGlkYXRlIHRo ZSBwYXJ0aXRpb24gY29uc3RyYWludC4KIAkgKi8KLQlpZiAoUGFydENvbnN0cmFpbnRJbXBsaWVk QnlSZWxDb25zdHJhaW50KHNjYW5yZWwsIHBhcnRDb25zdHJhaW50KSkKKwlpZiAoQ29uc3RyYWlu dEltcGxpZWRCeVJlbENvbnN0cmFpbnQoc2NhbnJlbCwgcGFydENvbnN0cmFpbnQpKQogCXsKIAkJ aWYgKCF2YWxpZGF0ZV9kZWZhdWx0KQogCQkJZXJlcG9ydChJTkZPLApAQCAtMTM4MDgsNyArMTM4 NTcsNyBAQCBWYWxpZGF0ZVBhcnRpdGlvbkNvbnN0cmFpbnRzKExpc3QgKip3cXVldWUsIFJlbGF0 aW9uIHNjYW5yZWwsCiAJCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgd2hvbGUtcm93IHJlZmVy ZW5jZSBmb3VuZCBpbiBwYXJ0aXRpb24ga2V5Iik7CiAKIAkJCS8qIENhbiB3ZSBza2lwIHNjYW5u aW5nIHRoaXMgcGFydF9yZWw/ICovCi0JCQlpZiAoUGFydENvbnN0cmFpbnRJbXBsaWVkQnlSZWxD b25zdHJhaW50KHBhcnRfcmVsLCBteV9wYXJ0Y29uc3RyKSkKKwkJCWlmIChDb25zdHJhaW50SW1w bGllZEJ5UmVsQ29uc3RyYWludChwYXJ0X3JlbCwgbXlfcGFydGNvbnN0cikpCiAJCQl7CiAJCQkJ aWYgKCF2YWxpZGF0ZV9kZWZhdWx0KQogCQkJCQllcmVwb3J0KElORk8sCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9jb21tYW5kcy90YWJsZWNtZHMuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3Rh YmxlY21kcy5oCmluZGV4IDA2ZTUxODAuLjhlM2QwYzIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2NvbW1hbmRzL3RhYmxlY21kcy5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3RhYmxlY21k cy5oCkBAIC04OCw3ICs4OCw3IEBAIGV4dGVybiB2b2lkIFJhbmdlVmFyQ2FsbGJhY2tPd25zVGFi bGUoY29uc3QgUmFuZ2VWYXIgKnJlbGF0aW9uLAogCiBleHRlcm4gdm9pZCBSYW5nZVZhckNhbGxi YWNrT3duc1JlbGF0aW9uKGNvbnN0IFJhbmdlVmFyICpyZWxhdGlvbiwKIAkJCQkJCQkgT2lkIHJl bElkLCBPaWQgb2xkUmVsSWQsIHZvaWQgKm5vQ2F0YWxvZ3MpOwotZXh0ZXJuIGJvb2wgUGFydENv bnN0cmFpbnRJbXBsaWVkQnlSZWxDb25zdHJhaW50KFJlbGF0aW9uIHNjYW5yZWwsCi0JCQkJCQkJ CQkgTGlzdCAqcGFydENvbnN0cmFpbnQpOworZXh0ZXJuIGJvb2wgQ29uc3RyYWludEltcGxpZWRC eVJlbENvbnN0cmFpbnQoUmVsYXRpb24gc2NhbnJlbCwKKwkJCQkJCQkJIExpc3QgKnRlc3RDb25z dHJhaW50KTsKIAogI2VuZGlmCQkJCQkJCS8qIFRBQkxFQ01EU19IICovCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FsdGVyX3RhYmxlLm91dCBiL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvYWx0ZXJfdGFibGUub3V0CmluZGV4IGNjZDJjMzguLjY5MDRmZjggMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYWx0ZXJfdGFibGUub3V0CisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYWx0ZXJfdGFibGUub3V0CkBAIC0xMDM4LDYgKzEwMzgs NDcgQEAgYWx0ZXIgdGFibGUgbXl2aWV3IGFsdGVyIGNvbHVtbiB0ZXN0IHNldCBub3QgbnVsbDsK IEVSUk9SOiAgIm15dmlldyIgaXMgbm90IGEgdGFibGUgb3IgZm9yZWlnbiB0YWJsZQogZHJvcCB2 aWV3IG15dmlldzsKIGRyb3AgdGFibGUgYXRhY2MxOworLS0gc2V0IG5vdCBudWxsIHZlcmlmaWVk IGJ5IGNvbnN0cmFpbnRzCitjcmVhdGUgdGFibGUgYXRhY2MxICh0ZXN0X2EgaW50LCB0ZXN0X2Ig aW50KTsKK2luc2VydCBpbnRvIGF0YWNjMSB2YWx1ZXMgKG51bGwsIDEpOworLS0gY29uc3RyYWlu dCBub3QgY292ZXIgYWxsIHZhbHVlcywgc2hvdWxkIGZhaWwKK2FsdGVyIHRhYmxlIGF0YWNjMSBh ZGQgY29uc3RyYWludCBhdGFjYzFfY29uc3RyX29yIGNoZWNrKHRlc3RfYSBpcyBub3QgbnVsbCBv ciB0ZXN0X2IgPCAxMCk7CithbHRlciB0YWJsZSBhdGFjYzEgYWx0ZXIgdGVzdF9hIHNldCBub3Qg bnVsbDsKK0VSUk9SOiAgY29sdW1uICJ0ZXN0X2EiIGNvbnRhaW5zIG51bGwgdmFsdWVzCithbHRl ciB0YWJsZSBhdGFjYzEgZHJvcCBjb25zdHJhaW50IGF0YWNjMV9jb25zdHJfb3I7CistLSBub3Qg dmFsaWQgY29uc3RyYWludCwgc2hvdWxkIGZhaWwKK2FsdGVyIHRhYmxlIGF0YWNjMSBhZGQgY29u c3RyYWludCBhdGFjYzFfY29uc3RyX2ludmFsaWQgY2hlY2sodGVzdF9hIGlzIG5vdCBudWxsKSBu b3QgdmFsaWQ7CithbHRlciB0YWJsZSBhdGFjYzEgYWx0ZXIgdGVzdF9hIHNldCBub3QgbnVsbDsK K0VSUk9SOiAgY29sdW1uICJ0ZXN0X2EiIGNvbnRhaW5zIG51bGwgdmFsdWVzCithbHRlciB0YWJs ZSBhdGFjYzEgZHJvcCBjb25zdHJhaW50IGF0YWNjMV9jb25zdHJfaW52YWxpZDsKKy0tIHdpdGgg dmFsaWQgY29uc3RyYWludAordXBkYXRlIGF0YWNjMSBzZXQgdGVzdF9hID0gMTsKK2FsdGVyIHRh YmxlIGF0YWNjMSBhZGQgY29uc3RyYWludCBhdGFjYzFfY29uc3RyX2FfdmFsaWQgY2hlY2sodGVz dF9hIGlzIG5vdCBudWxsKTsKK2FsdGVyIHRhYmxlIGF0YWNjMSBhbHRlciB0ZXN0X2Egc2V0IG5v dCBudWxsOworSU5GTzogIHZlcmlmeWluZyB0YWJsZSAiYXRhY2MxIiBOT1QgTlVMTCBjb25zdHJh aW50IG9uIHRlc3RfYSBhdHRyaWJ1dGUgYnkgZXhpc3RlZCBjb25zdHJhaW50cworZGVsZXRlIGZy b20gYXRhY2MxOworaW5zZXJ0IGludG8gYXRhY2MxIHZhbHVlcyAoMiwgbnVsbCk7CithbHRlciB0 YWJsZSBhdGFjYzEgYWx0ZXIgdGVzdF9hIGRyb3Agbm90IG51bGw7CistLSB0ZXN0IG11bHRpcGxl IHNldCBub3QgbnVsbCBhdCBzYW1lIHRpbWUKKy0tIHRlc3RfYSBjaGVja2VkIGJ5IGF0YWNjMV9j b25zdHJfYV92YWxpZCwgdGVzdF9iIHNob3VsZCBmYWlsIGJ5IHRhYmxlIHNjYW4KK2FsdGVyIHRh YmxlIGF0YWNjMSBhbHRlciB0ZXN0X2Egc2V0IG5vdCBudWxsLCBhbHRlciB0ZXN0X2Igc2V0IG5v dCBudWxsOworSU5GTzogIHZlcmlmeWluZyB0YWJsZSAiYXRhY2MxIiBOT1QgTlVMTCBjb25zdHJh aW50IG9uIHRlc3RfYSBhdHRyaWJ1dGUgYnkgZXhpc3RlZCBjb25zdHJhaW50cworRVJST1I6ICBj b2x1bW4gInRlc3RfYiIgY29udGFpbnMgbnVsbCB2YWx1ZXMKKy0tIGNvbW1hbmRzIG9yZGVyIGhh cyBubyBpbXBvcnRhbmNlCithbHRlciB0YWJsZSBhdGFjYzEgYWx0ZXIgdGVzdF9iIHNldCBub3Qg bnVsbCwgYWx0ZXIgdGVzdF9hIHNldCBub3QgbnVsbDsKK0lORk86ICB2ZXJpZnlpbmcgdGFibGUg ImF0YWNjMSIgTk9UIE5VTEwgY29uc3RyYWludCBvbiB0ZXN0X2EgYXR0cmlidXRlIGJ5IGV4aXN0 ZWQgY29uc3RyYWludHMKK0VSUk9SOiAgY29sdW1uICJ0ZXN0X2IiIGNvbnRhaW5zIG51bGwgdmFs dWVzCistLSB2YWxpZCBvbmUgYnkgdGFibGUgc2Nhbiwgb25lIGJ5IGNoZWNrIGNvbnN0cmFpbnRz Cit1cGRhdGUgYXRhY2MxIHNldCB0ZXN0X2IgPSAxOworYWx0ZXIgdGFibGUgYXRhY2MxIGFsdGVy IHRlc3RfYiBzZXQgbm90IG51bGwsIGFsdGVyIHRlc3RfYSBzZXQgbm90IG51bGw7CitJTkZPOiAg dmVyaWZ5aW5nIHRhYmxlICJhdGFjYzEiIE5PVCBOVUxMIGNvbnN0cmFpbnQgb24gdGVzdF9hIGF0 dHJpYnV0ZSBieSBleGlzdGVkIGNvbnN0cmFpbnRzCithbHRlciB0YWJsZSBhdGFjYzEgYWx0ZXIg dGVzdF9hIGRyb3Agbm90IG51bGwsIGFsdGVyIHRlc3RfYiBkcm9wIG5vdCBudWxsOworLS0gYm90 aCBjb2x1bW4gaGFzIGNoZWNrIGNvbnN0cmFpbnRzCithbHRlciB0YWJsZSBhdGFjYzEgYWRkIGNv bnN0cmFpbnQgYXRhY2MxX2NvbnN0cl9iX3ZhbGlkIGNoZWNrKHRlc3RfYiBpcyBub3QgbnVsbCk7 CithbHRlciB0YWJsZSBhdGFjYzEgYWx0ZXIgdGVzdF9iIHNldCBub3QgbnVsbCwgYWx0ZXIgdGVz dF9hIHNldCBub3QgbnVsbDsKK0lORk86ICB2ZXJpZnlpbmcgdGFibGUgImF0YWNjMSIgTk9UIE5V TEwgY29uc3RyYWludCBvbiB0ZXN0X2IgYXR0cmlidXRlIGJ5IGV4aXN0ZWQgY29uc3RyYWludHMK K0lORk86ICB2ZXJpZnlpbmcgdGFibGUgImF0YWNjMSIgTk9UIE5VTEwgY29uc3RyYWludCBvbiB0 ZXN0X2EgYXR0cmlidXRlIGJ5IGV4aXN0ZWQgY29uc3RyYWludHMKK2Ryb3AgdGFibGUgYXRhY2Mx OwogLS0gdGVzdCBpbmhlcml0YW5jZQogY3JlYXRlIHRhYmxlIHBhcmVudCAoYSBpbnQpOwogY3Jl YXRlIHRhYmxlIGNoaWxkIChiIHZhcmNoYXIoMjU1KSkgaW5oZXJpdHMgKHBhcmVudCk7CmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9hbHRlcl90YWJsZS5zcWwgYi9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9hbHRlcl90YWJsZS5zcWwKaW5kZXggYjczZjUyMy4uMGFiYTBmYiAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvYWx0ZXJfdGFibGUuc3FsCisrKyBiL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL2FsdGVyX3RhYmxlLnNxbApAQCAtNzk4LDYgKzc5OCw0MSBAQCBkcm9wIHZp ZXcgbXl2aWV3OwogCiBkcm9wIHRhYmxlIGF0YWNjMTsKIAorLS0gc2V0IG5vdCBudWxsIHZlcmlm aWVkIGJ5IGNvbnN0cmFpbnRzCitjcmVhdGUgdGFibGUgYXRhY2MxICh0ZXN0X2EgaW50LCB0ZXN0 X2IgaW50KTsKK2luc2VydCBpbnRvIGF0YWNjMSB2YWx1ZXMgKG51bGwsIDEpOworLS0gY29uc3Ry YWludCBub3QgY292ZXIgYWxsIHZhbHVlcywgc2hvdWxkIGZhaWwKK2FsdGVyIHRhYmxlIGF0YWNj MSBhZGQgY29uc3RyYWludCBhdGFjYzFfY29uc3RyX29yIGNoZWNrKHRlc3RfYSBpcyBub3QgbnVs bCBvciB0ZXN0X2IgPCAxMCk7CithbHRlciB0YWJsZSBhdGFjYzEgYWx0ZXIgdGVzdF9hIHNldCBu b3QgbnVsbDsKK2FsdGVyIHRhYmxlIGF0YWNjMSBkcm9wIGNvbnN0cmFpbnQgYXRhY2MxX2NvbnN0 cl9vcjsKKy0tIG5vdCB2YWxpZCBjb25zdHJhaW50LCBzaG91bGQgZmFpbAorYWx0ZXIgdGFibGUg YXRhY2MxIGFkZCBjb25zdHJhaW50IGF0YWNjMV9jb25zdHJfaW52YWxpZCBjaGVjayh0ZXN0X2Eg aXMgbm90IG51bGwpIG5vdCB2YWxpZDsKK2FsdGVyIHRhYmxlIGF0YWNjMSBhbHRlciB0ZXN0X2Eg c2V0IG5vdCBudWxsOworYWx0ZXIgdGFibGUgYXRhY2MxIGRyb3AgY29uc3RyYWludCBhdGFjYzFf Y29uc3RyX2ludmFsaWQ7CistLSB3aXRoIHZhbGlkIGNvbnN0cmFpbnQKK3VwZGF0ZSBhdGFjYzEg c2V0IHRlc3RfYSA9IDE7CithbHRlciB0YWJsZSBhdGFjYzEgYWRkIGNvbnN0cmFpbnQgYXRhY2Mx X2NvbnN0cl9hX3ZhbGlkIGNoZWNrKHRlc3RfYSBpcyBub3QgbnVsbCk7CithbHRlciB0YWJsZSBh dGFjYzEgYWx0ZXIgdGVzdF9hIHNldCBub3QgbnVsbDsKK2RlbGV0ZSBmcm9tIGF0YWNjMTsKKwor aW5zZXJ0IGludG8gYXRhY2MxIHZhbHVlcyAoMiwgbnVsbCk7CithbHRlciB0YWJsZSBhdGFjYzEg YWx0ZXIgdGVzdF9hIGRyb3Agbm90IG51bGw7CistLSB0ZXN0IG11bHRpcGxlIHNldCBub3QgbnVs bCBhdCBzYW1lIHRpbWUKKy0tIHRlc3RfYSBjaGVja2VkIGJ5IGF0YWNjMV9jb25zdHJfYV92YWxp ZCwgdGVzdF9iIHNob3VsZCBmYWlsIGJ5IHRhYmxlIHNjYW4KK2FsdGVyIHRhYmxlIGF0YWNjMSBh bHRlciB0ZXN0X2Egc2V0IG5vdCBudWxsLCBhbHRlciB0ZXN0X2Igc2V0IG5vdCBudWxsOworLS0g Y29tbWFuZHMgb3JkZXIgaGFzIG5vIGltcG9ydGFuY2UKK2FsdGVyIHRhYmxlIGF0YWNjMSBhbHRl ciB0ZXN0X2Igc2V0IG5vdCBudWxsLCBhbHRlciB0ZXN0X2Egc2V0IG5vdCBudWxsOworCistLSB2 YWxpZCBvbmUgYnkgdGFibGUgc2Nhbiwgb25lIGJ5IGNoZWNrIGNvbnN0cmFpbnRzCit1cGRhdGUg YXRhY2MxIHNldCB0ZXN0X2IgPSAxOworYWx0ZXIgdGFibGUgYXRhY2MxIGFsdGVyIHRlc3RfYiBz ZXQgbm90IG51bGwsIGFsdGVyIHRlc3RfYSBzZXQgbm90IG51bGw7CisKK2FsdGVyIHRhYmxlIGF0 YWNjMSBhbHRlciB0ZXN0X2EgZHJvcCBub3QgbnVsbCwgYWx0ZXIgdGVzdF9iIGRyb3Agbm90IG51 bGw7CistLSBib3RoIGNvbHVtbiBoYXMgY2hlY2sgY29uc3RyYWludHMKK2FsdGVyIHRhYmxlIGF0 YWNjMSBhZGQgY29uc3RyYWludCBhdGFjYzFfY29uc3RyX2JfdmFsaWQgY2hlY2sodGVzdF9iIGlz IG5vdCBudWxsKTsKK2FsdGVyIHRhYmxlIGF0YWNjMSBhbHRlciB0ZXN0X2Igc2V0IG5vdCBudWxs LCBhbHRlciB0ZXN0X2Egc2V0IG5vdCBudWxsOworZHJvcCB0YWJsZSBhdGFjYzE7CisKIC0tIHRl c3QgaW5oZXJpdGFuY2UKIGNyZWF0ZSB0YWJsZSBwYXJlbnQgKGEgaW50KTsKIGNyZWF0ZSB0YWJs ZSBjaGlsZCAoYiB2YXJjaGFyKDI1NSkpIGluaGVyaXRzIChwYXJlbnQpOwo= ------==--bound.88052.web5j.yandex.ru--