Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nBbUM-0007u0-Mn for pgsql-hackers@arkaria.postgresql.org; Sun, 23 Jan 2022 11:56:55 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nBbUJ-0003zn-Qj for pgsql-hackers@arkaria.postgresql.org; Sun, 23 Jan 2022 11:56:51 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nBbUJ-0003ze-AK for pgsql-hackers@lists.postgresql.org; Sun, 23 Jan 2022 11:56:51 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by magus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nBbUG-0000g6-IV for pgsql-hackers@lists.postgresql.org; Sun, 23 Jan 2022 11:56:50 +0000 Received: from falcon-note (cyclops.postgrespro.ru [93.174.131.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id BA05921C269E; Sun, 23 Jan 2022 14:56:46 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1642939006; bh=vbHD9DGVJ6+YPjjM7aw+Xccfd6kZIyPxwqK+yUnIFgE=; h=Subject:From:To:Cc:Date:In-Reply-To:References; b=fMyDpvl6Qw+LQoTXdtDdK9x2NwrG2hZXZG+iwAezi76B/XXXsw1N8KhltVqbMm1oZ 8Nwc5JMz8vuMm4xgQA4u5fnEucyulsRVgdQeNOHZfhTX1iVpRzWeBHTHgBJo3RRC03 PS71L6bfLIAfXZ1yGM9G1NLBWJfapnMMxacJ5MQ8= Message-ID: <382c3b52071a087fd4357e22959b3ddb05e524b7.camel@postgrespro.ru> Subject: Re: Fix BUG #17335: Duplicate result rows in Gather node From: Yura Sokolov To: David Rowley Cc: PostgreSQL Developers Date: Sun, 23 Jan 2022 14:56:46 +0300 In-Reply-To: References: Organization: PostgresPro Content-Type: multipart/mixed; boundary="=-F3t2xz25sBPJbEYm3crQ" User-Agent: Evolution 3.36.5-0ubuntu1 MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=-F3t2xz25sBPJbEYm3crQ Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit В Чт, 20/01/2022 в 09:32 +1300, David Rowley пишет: > On Fri, 31 Dec 2021 at 00:14, Yura Sokolov wrote: > > Suggested quick (and valid) fix in the patch attached: > > - If Append has single child, then copy its parallel awareness. > > I've been looking at this and I've gone through changing my mind about > what's the right fix quite a number of times. > > My current thoughts are that I don't really like the fact that we can > have plans in the following shape: > > Finalize Aggregate > -> Gather > Workers Planned: 1 > -> Partial Aggregate > -> Parallel Hash Left Join > Hash Cond: (gather_append_1.fk = gather_append_2.fk) > -> Index Scan using gather_append_1_ix on gather_append_1 > Index Cond: (f = true) > -> Parallel Hash > -> Parallel Seq Scan on gather_append_2 > > It's only made safe by the fact that Gather will only use 1 worker. > To me, it just seems too fragile to assume that's always going to be > the case. I feel like this fix just relies on the fact that > create_gather_path() and create_gather_merge_path() do > "pathnode->num_workers = subpath->parallel_workers;". If someone > decided that was to work a different way, then we risk this breaking > again. Additionally, today we have Gather and GatherMerge, but we may > one day end up with more node types that gather results from parallel > workers, or even a completely different way of executing plans. It seems strange parallel_aware and parallel_safe flags neither affect execution nor are properly checked. Except parallel_safe is checked in ExecSerializePlan which is called from ExecInitParallelPlan, which is called from ExecGather and ExecGatherMerge. But looks like this check doesn't affect execution as well. > > I think a safer way to fix this is to just not remove the > Append/MergeAppend node if the parallel_aware flag of the only-child > and the Append/MergeAppend don't match. I've done that in the > attached. > > I believe the code at the end of add_paths_to_append_rel() can remain as is. I found clean_up_removed_plan_level also called from set_subqueryscan_references. Is there a need to patch there as well? And there is strange state: - in the loop by subpaths, pathnode->node.parallel_safe is set to AND of all its subpath's parallel_safe (therefore there were need to copy it in my patch version), - that means, our AppendPath is parallel_aware but not parallel_safe. It is ridiculous a bit. And it is strange AppendPath could have more parallel_workers than sum of its children parallel_workers. So it looks like whole machinery around parallel_aware/parallel_safe has no enough consistency. Either way, I attach you version of fix with my tests as new patch version. regards, Yura Sokolov --=-F3t2xz25sBPJbEYm3crQ Content-Disposition: attachment; filename*0=v2-0001-Fix-duplicate-result-rows-after-Append-path-remov.pat; filename*1=ch Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="v2-0001-Fix-duplicate-result-rows-after-Append-path-remov.patch"; charset="UTF-8" RnJvbSAzNTlkZjM3YWU3NjE3MGE0NjIxY2FmZDNhZDhiMzE4NDczYzk0YTQ2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBZdXJhIFNva29sb3YgPHkuc29rb2xvdkBwb3N0Z3Jlc3Byby5y dT4KRGF0ZTogU3VuLCAyMyBKYW4gMjAyMiAxNDo1MzoyMSArMDMwMApTdWJqZWN0OiBbUEFUQ0gg djJdIEZpeCBkdXBsaWNhdGUgcmVzdWx0IHJvd3MgYWZ0ZXIgQXBwZW5kIHBhdGggcmVtb3ZhbC4K Ckl0IGNvdWxkIGhhcHBlbiBBcHBlbmQgcGF0aCBpcyBjcmVhdGVkIHdpdGggInBhcmFsbGVsX2F3 YXJlIiBmbGFnLApidXQgaXRzIHNpbmdsZSBjaGlsZCBpcyBub3QuIEFwcGVuZCBwYXRoIHBhcmVu dCAoR2F0aGVyIG9yIEdhdGhlciBNZXJnZSkKdGhpbmtzIGl0cyBjaGlsZCBpcyBwYXJhbGxlbF9h d2FyZSwgYnV0IGFmdGVyIEFwcGVuZCBwYXRoIHJlbW92YWwgR2F0aGVyJ3MKY2hpbGQgYmVjb21l IG5vdCBwYXJhbGxlbF9hd2FyZS4gVGhlbiB3aGVuIEdhdGhlci9HYXRoZXIgTWVyZ2UgZGVjaWRl cwp0byBydW4gY2hpbGQgaW4gc2V2ZXJhbCB3b3JrZXJzIG9yIHdvcmtlciArIGxlYWRlciBwYXJ0 aWNpcGF0aW9uLCBpdApnYXRoZXJzIGR1cGxpY2F0ZSByZXN1bHQgcm93cyBmcm9tIHNldmVyYWwg Y2hpbGQgcGF0aCBpbnZvY2F0aW9ucy4KClRvIGZpeCBpdCBkb24ndCByZW1vdmUgQXBwZW5kL01l cmdlQXBwZW5kIG5vZGUgaWYgaXQncyBwYXJhbGxlbF9hd2FyZSAhPQpzaW5nbGUgY2hpbGQgcGFy YWxsZWxfYXdhcmUuCgpBdXRob3JzOiBEYXZpZCBSb3dsZXksIFNva29sb3YgWXVyYS4KLS0tCiBz cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMgICAgICAgICAgfCAgMjQgKysrLQog Li4uL2V4cGVjdGVkL2dhdGhlcl9yZW1vdmVkX2FwcGVuZC5vdXQgICAgICAgIHwgMTM1ICsrKysr KysrKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSAgICAgICAg ICAgIHwgICAxICsKIC4uLi9yZWdyZXNzL3NxbC9nYXRoZXJfcmVtb3ZlZF9hcHBlbmQuc3FsICAg ICB8ICA4MiArKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCAyMzggaW5zZXJ0aW9ucygrKSwg NCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL2dhdGhlcl9yZW1vdmVkX2FwcGVuZC5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVz dC9yZWdyZXNzL3NxbC9nYXRoZXJfcmVtb3ZlZF9hcHBlbmQuc3FsCgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vc2V0cmVmcy5jCmluZGV4IGU0NGFlOTcxYjRiLi5hN2IxMWI3ZjAzYSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jCisrKyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL3NldHJlZnMuYwpAQCAtMTUxMiw4ICsxNTEyLDE2IEBAIHNldF9hcHBl bmRfcmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwKIAkJbGZpcnN0KGwpID0gc2V0X3BsYW5f cmVmcyhyb290LCAoUGxhbiAqKSBsZmlyc3QobCksIHJ0b2Zmc2V0KTsKIAl9CiAKLQkvKiBOb3cs IGlmIHRoZXJlJ3MganVzdCBvbmUsIGZvcmdldCB0aGUgQXBwZW5kIGFuZCByZXR1cm4gdGhhdCBj aGlsZCAqLwotCWlmIChsaXN0X2xlbmd0aChhcGxhbi0+YXBwZW5kcGxhbnMpID09IDEpCisJLyoK KwkgKiBTZWUgaWYgaXQncyBzYWZlIHRvIGdldCByaWQgb2YgdGhlIEFwcGVuZCBlbnRpcmVseS4g IEZvciB0aGlzIHRvIGJlCisJICogc2FmZSwgdGhlcmUgbXVzdCBiZSBvbmx5IG9uZSBjaGlsZCBw bGFuIGFuZCB0aGF0IGNoaWxkIHBsYW4ncyBwYXJhbGxlbAorCSAqIGF3YXJlbmVzcyBtdXN0IG1h dGNoIHRoYXQgb2YgdGhlIEFwcGVuZCdzLiAgVGhlIHJlYXNvbiBmb3IgdGhlIGxhdHRlcgorCSAq IGlzIHRoYXQgdGhlIGlmIHRoZSBBcHBlbmQgaXMgcGFyYWxsZWwgYXdhcmUgYW5kIHRoZSBjaGls ZCBpcyBub3QgdGhlbgorCSAqIHRoZSBjYWxsaW5nIHBsYW4gbWF5IGV4ZWN1dGUgdGhlIG5vbi1w YXJhbGxlbCBhd2FyZSBjaGlsZCBtdWx0aXBsZQorCSAqIHRpbWVzLgorCSAqLworCWlmIChsaXN0 X2xlbmd0aChhcGxhbi0+YXBwZW5kcGxhbnMpID09IDEgJiYKKwkJKChQbGFuICopIGxpbml0aWFs KGFwbGFuLT5hcHBlbmRwbGFucykpLT5wYXJhbGxlbF9hd2FyZSA9PSBhcGxhbi0+cGxhbi5wYXJh bGxlbF9hd2FyZSkKIAkJcmV0dXJuIGNsZWFuX3VwX3JlbW92ZWRfcGxhbl9sZXZlbCgoUGxhbiAq KSBhcGxhbiwKIAkJCQkJCQkJCQkgICAoUGxhbiAqKSBsaW5pdGlhbChhcGxhbi0+YXBwZW5kcGxh bnMpKTsKIApAQCAtMTU3Niw4ICsxNTg0LDE2IEBAIHNldF9tZXJnZWFwcGVuZF9yZWZlcmVuY2Vz KFBsYW5uZXJJbmZvICpyb290LAogCQlsZmlyc3QobCkgPSBzZXRfcGxhbl9yZWZzKHJvb3QsIChQ bGFuICopIGxmaXJzdChsKSwgcnRvZmZzZXQpOwogCX0KIAotCS8qIE5vdywgaWYgdGhlcmUncyBq dXN0IG9uZSwgZm9yZ2V0IHRoZSBNZXJnZUFwcGVuZCBhbmQgcmV0dXJuIHRoYXQgY2hpbGQgKi8K LQlpZiAobGlzdF9sZW5ndGgobXBsYW4tPm1lcmdlcGxhbnMpID09IDEpCisJLyoKKwkgKiBTZWUg aWYgaXQncyBzYWZlIHRvIGdldCByaWQgb2YgdGhlIE1lcmdlQXBwZW5kIGVudGlyZWx5LiAgRm9y IHRoaXMgdG8KKwkgKiBiZSBzYWZlLCB0aGVyZSBtdXN0IGJlIG9ubHkgb25lIGNoaWxkIHBsYW4g YW5kIHRoYXQgY2hpbGQgcGxhbidzCisJICogcGFyYWxsZWwgYXdhcmVuZXNzIG11c3QgbWF0Y2gg dGhhdCBvZiB0aGUgTWVyZ2VBcHBlbmQncy4gIFRoZSByZWFzb24KKwkgKiBmb3IgdGhlIGxhdHRl ciBpcyB0aGF0IHRoZSBpZiB0aGUgTWVyZ2VBcHBlbmQgaXMgcGFyYWxsZWwgYXdhcmUgYW5kIHRo ZQorCSAqIGNoaWxkIGlzIG5vdCB0aGVuIHRoZSBjYWxsaW5nIHBsYW4gbWF5IGV4ZWN1dGUgdGhl IG5vbi1wYXJhbGxlbCBhd2FyZQorCSAqIGNoaWxkIG11bHRpcGxlIHRpbWVzLgorCSAqLworCWlm IChsaXN0X2xlbmd0aChtcGxhbi0+bWVyZ2VwbGFucykgPT0gMSAmJgorCQkoKFBsYW4gKikgbGlu aXRpYWwobXBsYW4tPm1lcmdlcGxhbnMpKS0+cGFyYWxsZWxfYXdhcmUgPT0gbXBsYW4tPnBsYW4u cGFyYWxsZWxfYXdhcmUpCiAJCXJldHVybiBjbGVhbl91cF9yZW1vdmVkX3BsYW5fbGV2ZWwoKFBs YW4gKikgbXBsYW4sCiAJCQkJCQkJCQkJICAgKFBsYW4gKikgbGluaXRpYWwobXBsYW4tPm1lcmdl cGxhbnMpKTsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9nYXRoZXJf cmVtb3ZlZF9hcHBlbmQub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9nYXRoZXJfcmVt b3ZlZF9hcHBlbmQub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4x YzJkNDBkN2M3NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv Z2F0aGVyX3JlbW92ZWRfYXBwZW5kLm91dApAQCAtMCwwICsxLDEzNSBAQAorLS0gVGVzdCBjb3Jy ZWN0bmVzcyBvZiBwYXJhbGxlbCBxdWVyeSBleGVjdXRpb24gYWZ0ZXIgcmVtb3ZhbAorLS0gb2Yg QXBwZW5kIHBhdGggZHVlIHRvIHNpbmdsZSBub24tdHJpdmlhbCBjaGlsZC4KK0RST1AgVEFCTEUg SUYgRVhJU1RTIGdhdGhlcl9hcHBlbmRfMSwgZ2F0aGVyX2FwcGVuZF8yOworTk9USUNFOiAgdGFi bGUgImdhdGhlcl9hcHBlbmRfMSIgZG9lcyBub3QgZXhpc3QsIHNraXBwaW5nCitOT1RJQ0U6ICB0 YWJsZSAiZ2F0aGVyX2FwcGVuZF8yIiBkb2VzIG5vdCBleGlzdCwgc2tpcHBpbmcKK0NSRUFURSBU QUJMRSBnYXRoZXJfYXBwZW5kXzEgKAorICAgIGZrIGludCwKKyAgICBmIGJvb2wKKyk7CitJTlNF UlQgSU5UTyBnYXRoZXJfYXBwZW5kXzEgKGZrLCBmKSBTRUxFQ1QgaSwgaSU1MD0wIGZyb20gZ2Vu ZXJhdGVfc2VyaWVzKDEsIDIwMDApIGFzIGk7CitDUkVBVEUgSU5ERVggZ2F0aGVyX2FwcGVuZF8x X2l4IG9uIGdhdGhlcl9hcHBlbmRfMSAoZik7CitDUkVBVEUgVEFCTEUgZ2F0aGVyX2FwcGVuZF8y ICgKKyAgICBmayBpbnQsCisgICAgdmFsIHNlcmlhbAorKTsKK0lOU0VSVCBJTlRPIGdhdGhlcl9h cHBlbmRfMiAoZmspIFNFTEVDVCBmayBmcm9tIGdhdGhlcl9hcHBlbmRfMSwgZ2VuZXJhdGVfc2Vy aWVzKDEsIDUpIGFzIGk7CitBTkFMWVpFIGdhdGhlcl9hcHBlbmRfMSwgZ2F0aGVyX2FwcGVuZF8y OworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworLS0gRmluZCBjb3Jy ZWN0IHJvd3MgY291bnQKK1NFTEVDVCBjb3VudCgxKQorRlJPTSAoCisgIFNFTEVDVCBmayBGUk9N IGdhdGhlcl9hcHBlbmRfMSBXSEVSRSBmCisgIFVOSU9OIEFMTAorICBTRUxFQ1QgZmsgRlJPTSBn YXRoZXJfYXBwZW5kXzEgV0hFUkUgZmFsc2UKKykgYXMgdAorTEVGVCBPVVRFUiBKT0lOIGdhdGhl cl9hcHBlbmRfMgorVVNJTkcgKGZrKTsKKyBjb3VudCAKKy0tLS0tLS0KKyAgIDIwMAorKDEgcm93 KQorCitTRVQgcGFyYWxsZWxfc2V0dXBfY29zdCA9IDA7CitTRVQgcGFyYWxsZWxfdHVwbGVfY29z dCA9IDAuMTsKK1NFVCBtaW5fcGFyYWxsZWxfdGFibGVfc2Nhbl9zaXplID0gMDsKK1NFVCBtYXhf cGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMjsKK1NFTEVDVCBjb3VudCgxKQorRlJPTSAo CisgIFNFTEVDVCBmayBGUk9NIGdhdGhlcl9hcHBlbmRfMSBXSEVSRSBmCisgIFVOSU9OIEFMTAor ICBTRUxFQ1QgZmsgRlJPTSBnYXRoZXJfYXBwZW5kXzEgV0hFUkUgZmFsc2UKKykgYXMgdAorTEVG VCBPVVRFUiBKT0lOIGdhdGhlcl9hcHBlbmRfMgorVVNJTkcgKGZrKTsKKyBjb3VudCAKKy0tLS0t LS0KKyAgIDIwMAorKDEgcm93KQorCitFWFBMQUlOIChBTkFMWVpFIHRydWUsIENPU1RTIGZhbHNl LCBUSU1JTkcgZmFsc2UsIFNVTU1BUlkgZmFsc2UsIFZFUkJPU0UgZmFsc2UsIEJVRkZFUlMgZmFs c2UpCitTRUxFQ1QgY291bnQoMSkKK0ZST00gKAorICBTRUxFQ1QgZmsgRlJPTSBnYXRoZXJfYXBw ZW5kXzEgV0hFUkUgZgorICBVTklPTiBBTEwKKyAgU0VMRUNUIGZrIEZST00gZ2F0aGVyX2FwcGVu ZF8xIFdIRVJFIGZhbHNlCispIGFzIHQKK0xFRlQgT1VURVIgSk9JTiBnYXRoZXJfYXBwZW5kXzIK K1VTSU5HIChmayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIEZpbmFsaXplIEFnZ3JlZ2F0ZSAoYWN0dWFsIHJvd3M9MSBsb29wcz0xKQor ICAgLT4gIEdhdGhlciAoYWN0dWFsIHJvd3M9MiBsb29wcz0xKQorICAgICAgICAgV29ya2VycyBQ bGFubmVkOiAxCisgICAgICAgICBXb3JrZXJzIExhdW5jaGVkOiAxCisgICAgICAgICAtPiAgUGFy dGlhbCBBZ2dyZWdhdGUgKGFjdHVhbCByb3dzPTEgbG9vcHM9MikKKyAgICAgICAgICAgICAgIC0+ ICBQYXJhbGxlbCBIYXNoIExlZnQgSm9pbiAoYWN0dWFsIHJvd3M9MTAwIGxvb3BzPTIpCisgICAg ICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChnYXRoZXJfYXBwZW5kXzEuZmsgPSBnYXRoZXJf YXBwZW5kXzIuZmspCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgQXBwZW5kIChh Y3R1YWwgcm93cz0yMCBsb29wcz0yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIElu ZGV4IFNjYW4gdXNpbmcgZ2F0aGVyX2FwcGVuZF8xX2l4IG9uIGdhdGhlcl9hcHBlbmRfMSAoYWN0 dWFsIHJvd3M9NDAgbG9vcHM9MSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElu ZGV4IENvbmQ6IChmID0gdHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBI YXNoIChhY3R1YWwgcm93cz01MDAwIGxvb3BzPTIpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBCdWNrZXRzOiAxNjM4NCAgQmF0Y2hlczogMSAgTWVtb3J5IFVzYWdlOiA1NDRrQgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGdhdGhlcl9hcHBl bmRfMiAoYWN0dWFsIHJvd3M9NTAwMCBsb29wcz0yKQorKDEzIHJvd3MpCisKKy0tIFJlc3VsdCBy b3dzIGluIHJvb3Qgbm9kZSBzaG91bGQgYmUgZXF1YWwgdG8gbm9uLXBhcmFsbGVsIGNvdW50CitF WFBMQUlOIChBTkFMWVpFIHRydWUsIENPU1RTIGZhbHNlLCBUSU1JTkcgZmFsc2UsIFNVTU1BUlkg ZmFsc2UsIFZFUkJPU0UgZmFsc2UsIEJVRkZFUlMgZmFsc2UpCitTRUxFQ1QgdmFsCitGUk9NICgK KyAgU0VMRUNUIGZrIEZST00gZ2F0aGVyX2FwcGVuZF8xIFdIRVJFIGYKKyAgVU5JT04gQUxMCisg IFNFTEVDVCBmayBGUk9NIGdhdGhlcl9hcHBlbmRfMSBXSEVSRSBmYWxzZQorKSBhcyB0CitMRUZU IE9VVEVSIEpPSU4gZ2F0aGVyX2FwcGVuZF8yCitVU0lORyAoZmspCitPUkRFUiBCWSB2YWw7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEdhdGhlciBNZXJnZSAo YWN0dWFsIHJvd3M9MjAwIGxvb3BzPTEpCisgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgIFdvcmtl cnMgTGF1bmNoZWQ6IDEKKyAgIC0+ICBTb3J0IChhY3R1YWwgcm93cz0xMDAgbG9vcHM9MikKKyAg ICAgICAgIFNvcnQgS2V5OiBnYXRoZXJfYXBwZW5kXzIudmFsCisgICAgICAgICBTb3J0IE1ldGhv ZDogcXVpY2tzb3J0ICBNZW1vcnk6IDI1a0IKKyAgICAgICAgIFdvcmtlciAwOiAgU29ydCBNZXRo b2Q6IHF1aWNrc29ydCAgTWVtb3J5OiAyNWtCCisgICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaCBM ZWZ0IEpvaW4gKGFjdHVhbCByb3dzPTEwMCBsb29wcz0yKQorICAgICAgICAgICAgICAgSGFzaCBD b25kOiAoZ2F0aGVyX2FwcGVuZF8xLmZrID0gZ2F0aGVyX2FwcGVuZF8yLmZrKQorICAgICAgICAg ICAgICAgLT4gIFBhcmFsbGVsIEFwcGVuZCAoYWN0dWFsIHJvd3M9MjAgbG9vcHM9MikKKyAgICAg ICAgICAgICAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGdhdGhlcl9hcHBlbmRfMV9peCBv biBnYXRoZXJfYXBwZW5kXzEgKGFjdHVhbCByb3dzPTQwIGxvb3BzPTEpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBJbmRleCBDb25kOiAoZiA9IHRydWUpCisgICAgICAgICAgICAgICAtPiAg UGFyYWxsZWwgSGFzaCAoYWN0dWFsIHJvd3M9NTAwMCBsb29wcz0yKQorICAgICAgICAgICAgICAg ICAgICAgQnVja2V0czogMTYzODQgIEJhdGNoZXM6IDEgIE1lbW9yeSBVc2FnZTogNTc2a0IKKyAg ICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBnYXRoZXJfYXBwZW5k XzIgKGFjdHVhbCByb3dzPTUwMDAgbG9vcHM9MikKKygxNSByb3dzKQorCistLSBSZXN1bHQgcm93 cyBpbiByb290IG5vZGUgc2hvdWxkIGJlIGVxdWFsIHRvIG5vbi1wYXJhbGxlbCBjb3VudAorRVhQ TEFJTiAoQU5BTFlaRSB0cnVlLCBDT1NUUyBmYWxzZSwgVElNSU5HIGZhbHNlLCBTVU1NQVJZIGZh bHNlLCBWRVJCT1NFIGZhbHNlLCBCVUZGRVJTIGZhbHNlKQorU0VMRUNUIHZhbAorRlJPTSAoCisg IFNFTEVDVCBmayBGUk9NIGdhdGhlcl9hcHBlbmRfMSBXSEVSRSBmCisgIFVOSU9OIEFMTAorICBT RUxFQ1QgZmsgRlJPTSBnYXRoZXJfYXBwZW5kXzEgV0hFUkUgZmFsc2UKKykgYXMgdAorTEVGVCBP VVRFUiBKT0lOIGdhdGhlcl9hcHBlbmRfMgorVVNJTkcgKGZrKQorT1JERVIgQlkgdmFsOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBHYXRoZXIgTWVyZ2UgKGFj dHVhbCByb3dzPTIwMCBsb29wcz0xKQorICAgV29ya2VycyBQbGFubmVkOiAxCisgICBXb3JrZXJz IExhdW5jaGVkOiAxCisgICAtPiAgU29ydCAoYWN0dWFsIHJvd3M9MTAwIGxvb3BzPTIpCisgICAg ICAgICBTb3J0IEtleTogZ2F0aGVyX2FwcGVuZF8yLnZhbAorICAgICAgICAgU29ydCBNZXRob2Q6 IHF1aWNrc29ydCAgTWVtb3J5OiAyNWtCCisgICAgICAgICBXb3JrZXIgMDogIFNvcnQgTWV0aG9k OiBxdWlja3NvcnQgIE1lbW9yeTogMjVrQgorICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2ggTGVm dCBKb2luIChhY3R1YWwgcm93cz0xMDAgbG9vcHM9MikKKyAgICAgICAgICAgICAgIEhhc2ggQ29u ZDogKGdhdGhlcl9hcHBlbmRfMS5mayA9IGdhdGhlcl9hcHBlbmRfMi5maykKKyAgICAgICAgICAg ICAgIC0+ICBQYXJhbGxlbCBBcHBlbmQgKGFjdHVhbCByb3dzPTIwIGxvb3BzPTIpCisgICAgICAg ICAgICAgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBnYXRoZXJfYXBwZW5kXzFfaXggb24g Z2F0aGVyX2FwcGVuZF8xIChhY3R1YWwgcm93cz00MCBsb29wcz0xKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgSW5kZXggQ29uZDogKGYgPSB0cnVlKQorICAgICAgICAgICAgICAgLT4gIFBh cmFsbGVsIEhhc2ggKGFjdHVhbCByb3dzPTUwMDAgbG9vcHM9MikKKyAgICAgICAgICAgICAgICAg ICAgIEJ1Y2tldHM6IDE2Mzg0ICBCYXRjaGVzOiAxICBNZW1vcnkgVXNhZ2U6IDU0NGtCCisgICAg ICAgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ2F0aGVyX2FwcGVuZF8y IChhY3R1YWwgcm93cz01MDAwIGxvb3BzPTIpCisoMTUgcm93cykKKwpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSBiL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxs ZWxfc2NoZWR1bGUKaW5kZXggNWIwYzczZDdlMzcuLjg0ZjJmODEyNTVkIDEwMDY0NAotLS0gYS9z cmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mv cGFyYWxsZWxfc2NoZWR1bGUKQEAgLTEwMCw2ICsxMDAsNyBAQCB0ZXN0OiBydWxlcyBwc3FsIHBz cWxfY3Jvc3N0YWIgYW11dGlscyBzdGF0c19leHQgY29sbGF0ZS5saW51eC51dGY4CiB0ZXN0OiBz ZWxlY3RfcGFyYWxsZWwKIHRlc3Q6IHdyaXRlX3BhcmFsbGVsCiB0ZXN0OiB2YWN1dW1fcGFyYWxs ZWwKK3Rlc3Q6IGdhdGhlcl9yZW1vdmVkX2FwcGVuZAogCiAjIG5vIHJlbGF0aW9uIHJlbGF0ZWQg dGVzdHMgY2FuIGJlIHB1dCBpbiB0aGlzIGdyb3VwCiB0ZXN0OiBwdWJsaWNhdGlvbiBzdWJzY3Jp cHRpb24KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2dhdGhlcl9yZW1vdmVkX2Fw cGVuZC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9nYXRoZXJfcmVtb3ZlZF9hcHBlbmQuc3Fs Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kZjFiNzk2YTRmNgotLS0g L2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2dhdGhlcl9yZW1vdmVkX2FwcGVu ZC5zcWwKQEAgLTAsMCArMSw4MiBAQAorLS0gVGVzdCBjb3JyZWN0bmVzcyBvZiBwYXJhbGxlbCBx dWVyeSBleGVjdXRpb24gYWZ0ZXIgcmVtb3ZhbAorLS0gb2YgQXBwZW5kIHBhdGggZHVlIHRvIHNp bmdsZSBub24tdHJpdmlhbCBjaGlsZC4KKworRFJPUCBUQUJMRSBJRiBFWElTVFMgZ2F0aGVyX2Fw cGVuZF8xLCBnYXRoZXJfYXBwZW5kXzI7CisKK0NSRUFURSBUQUJMRSBnYXRoZXJfYXBwZW5kXzEg KAorICAgIGZrIGludCwKKyAgICBmIGJvb2wKKyk7CisKK0lOU0VSVCBJTlRPIGdhdGhlcl9hcHBl bmRfMSAoZmssIGYpIFNFTEVDVCBpLCBpJTUwPTAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgMjAw MCkgYXMgaTsKKworQ1JFQVRFIElOREVYIGdhdGhlcl9hcHBlbmRfMV9peCBvbiBnYXRoZXJfYXBw ZW5kXzEgKGYpOworCitDUkVBVEUgVEFCTEUgZ2F0aGVyX2FwcGVuZF8yICgKKyAgICBmayBpbnQs CisgICAgdmFsIHNlcmlhbAorKTsKKworSU5TRVJUIElOVE8gZ2F0aGVyX2FwcGVuZF8yIChmaykg U0VMRUNUIGZrIGZyb20gZ2F0aGVyX2FwcGVuZF8xLCBnZW5lcmF0ZV9zZXJpZXMoMSwgNSkgYXMg aTsKKworQU5BTFlaRSBnYXRoZXJfYXBwZW5kXzEsIGdhdGhlcl9hcHBlbmRfMjsKKworU0VUIG1h eF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworCistLSBGaW5kIGNvcnJlY3Qgcm93 cyBjb3VudAorU0VMRUNUIGNvdW50KDEpCitGUk9NICgKKyAgU0VMRUNUIGZrIEZST00gZ2F0aGVy X2FwcGVuZF8xIFdIRVJFIGYKKyAgVU5JT04gQUxMCisgIFNFTEVDVCBmayBGUk9NIGdhdGhlcl9h cHBlbmRfMSBXSEVSRSBmYWxzZQorKSBhcyB0CitMRUZUIE9VVEVSIEpPSU4gZ2F0aGVyX2FwcGVu ZF8yCitVU0lORyAoZmspOworCitTRVQgcGFyYWxsZWxfc2V0dXBfY29zdCA9IDA7CitTRVQgcGFy YWxsZWxfdHVwbGVfY29zdCA9IDAuMTsKK1NFVCBtaW5fcGFyYWxsZWxfdGFibGVfc2Nhbl9zaXpl ID0gMDsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMjsKKworU0VMRUNU IGNvdW50KDEpCitGUk9NICgKKyAgU0VMRUNUIGZrIEZST00gZ2F0aGVyX2FwcGVuZF8xIFdIRVJF IGYKKyAgVU5JT04gQUxMCisgIFNFTEVDVCBmayBGUk9NIGdhdGhlcl9hcHBlbmRfMSBXSEVSRSBm YWxzZQorKSBhcyB0CitMRUZUIE9VVEVSIEpPSU4gZ2F0aGVyX2FwcGVuZF8yCitVU0lORyAoZmsp OworCitFWFBMQUlOIChBTkFMWVpFIHRydWUsIENPU1RTIGZhbHNlLCBUSU1JTkcgZmFsc2UsIFNV TU1BUlkgZmFsc2UsIFZFUkJPU0UgZmFsc2UsIEJVRkZFUlMgZmFsc2UpCitTRUxFQ1QgY291bnQo MSkKK0ZST00gKAorICBTRUxFQ1QgZmsgRlJPTSBnYXRoZXJfYXBwZW5kXzEgV0hFUkUgZgorICBV TklPTiBBTEwKKyAgU0VMRUNUIGZrIEZST00gZ2F0aGVyX2FwcGVuZF8xIFdIRVJFIGZhbHNlCisp IGFzIHQKK0xFRlQgT1VURVIgSk9JTiBnYXRoZXJfYXBwZW5kXzIKK1VTSU5HIChmayk7CisKKy0t IFJlc3VsdCByb3dzIGluIHJvb3Qgbm9kZSBzaG91bGQgYmUgZXF1YWwgdG8gbm9uLXBhcmFsbGVs IGNvdW50CitFWFBMQUlOIChBTkFMWVpFIHRydWUsIENPU1RTIGZhbHNlLCBUSU1JTkcgZmFsc2Us IFNVTU1BUlkgZmFsc2UsIFZFUkJPU0UgZmFsc2UsIEJVRkZFUlMgZmFsc2UpCitTRUxFQ1QgdmFs CitGUk9NICgKKyAgU0VMRUNUIGZrIEZST00gZ2F0aGVyX2FwcGVuZF8xIFdIRVJFIGYKKyAgVU5J T04gQUxMCisgIFNFTEVDVCBmayBGUk9NIGdhdGhlcl9hcHBlbmRfMSBXSEVSRSBmYWxzZQorKSBh cyB0CitMRUZUIE9VVEVSIEpPSU4gZ2F0aGVyX2FwcGVuZF8yCitVU0lORyAoZmspCitPUkRFUiBC WSB2YWw7CisKKy0tIFJlc3VsdCByb3dzIGluIHJvb3Qgbm9kZSBzaG91bGQgYmUgZXF1YWwgdG8g bm9uLXBhcmFsbGVsIGNvdW50CitFWFBMQUlOIChBTkFMWVpFIHRydWUsIENPU1RTIGZhbHNlLCBU SU1JTkcgZmFsc2UsIFNVTU1BUlkgZmFsc2UsIFZFUkJPU0UgZmFsc2UsIEJVRkZFUlMgZmFsc2Up CitTRUxFQ1QgdmFsCitGUk9NICgKKyAgU0VMRUNUIGZrIEZST00gZ2F0aGVyX2FwcGVuZF8xIFdI RVJFIGYKKyAgVU5JT04gQUxMCisgIFNFTEVDVCBmayBGUk9NIGdhdGhlcl9hcHBlbmRfMSBXSEVS RSBmYWxzZQorKSBhcyB0CitMRUZUIE9VVEVSIEpPSU4gZ2F0aGVyX2FwcGVuZF8yCitVU0lORyAo ZmspCitPUkRFUiBCWSB2YWw7Ci0tIAoyLjM0LjEKCg== --=-F3t2xz25sBPJbEYm3crQ--