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.96) (envelope-from ) id 1wATXL-0000bv-0R for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Apr 2026 14:05:44 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wATWK-00011z-1c for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Apr 2026 14:04:41 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wATWK-00011r-0B for pgsql-hackers@lists.postgresql.org; Wed, 08 Apr 2026 14:04:41 +0000 Received: from udcm-wwu2.uni-muenster.de ([128.176.118.28]) by magus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1wATWI-000000000sM-1zhr for pgsql-hackers@postgresql.org; Wed, 08 Apr 2026 14:04:40 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=uni-muenster.de; i=@uni-muenster.de; q=dns/txt; s=uniout; t=1775657079; x=1807193079; h=message-id:date:mime-version:subject:from:to:cc: references:in-reply-to; bh=PwoOYEOrlVqLO+Sy1lVFWfRiLpcJ6N16Iy3gRBqm1I0=; b=CLfse4m9dvwQ7HsJvIRV9VpB4mohsPJoBOwpv6yyRgsALT6LCro9ResC PZWA6RJzIMnxo2cq+Z8I262Yg2gYgsIPLetUgOoMhvuOOTcq3hcGqycTA 1WXEiwo3dyDiuudZcoppm2CPPJeXq+b2KjTj2TBbAxkTrzP6Jbhym1W63 YwF6/S292l3u+nXBkaa6wUQsROMelCVlrRRBN+mON+7IzJ3paIE2OCZpr e153QvGWr+NaVsKg/MrOcLVukr4WZ0YKT/eeoGs/wOs6h9g0WNmXtZxtU nA8EKzUk4Mfytn5WMHnTsn42V7992avNji0zYi+OwmEEQmorXV6oNc2gv g==; X-CSE-ConnectionGUID: LJusztmWRM2lsSJwxnAlog== X-CSE-MsgGUID: vrSOUMuQQlyaLxkScPDNYg== X-IronPort-AV: E=Sophos;i="6.23,167,1770591600"; d="scan'208,223";a="390040525" Received: from secmail.uni-muenster.de ([128.176.118.4]) by UDCM-RELAY2.UNI-MUENSTER.DE with ESMTP; 08 Apr 2026 16:04:38 +0200 Received: from [192.168.178.27] (dynamic-093-133-216-166.93.133.pool.telefonica.de [93.133.216.166]) by SECMAIL.UNI-MUENSTER.DE (Postfix) with ESMTPSA id 64EEB20ADF04; Wed, 8 Apr 2026 16:04:36 +0200 (CEST) Content-Type: multipart/mixed; boundary="------------W6XIpmH5nr2UJX51K8K1ZAcj" Message-ID: Date: Wed, 8 Apr 2026 16:04:35 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Fix bug with accessing to temporary tables of other sessions From: Jim Jones To: Soumya S Murali , Daniil Davydov <3danissimo@gmail.com> Cc: Tom Lane , Stepan Neretin , PostgreSQL Hackers References: <2f3fa419-9000-4e2a-b070-6e35d5de0e4c@uni-muenster.de> <751a6cb8-cac8-46c4-8c64-9e23f663e926@uni-muenster.de> <1a32fc83-df78-4774-97dc-2bb06dbb16e9@uni-muenster.de> <3529398.1774273446@sss.pgh.pa.us> <4075754.1774378690@sss.pgh.pa.us> <67637cf8-8cbf-4f86-8775-52aa0329972d@uni-muenster.de> Content-Language: de-DE, en-GB In-Reply-To: <67637cf8-8cbf-4f86-8775-52aa0329972d@uni-muenster.de> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------W6XIpmH5nr2UJX51K8K1ZAcj Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi, I did some digging: It seems that b7b0f3f2724 is what actually broke it. By switching from ReadBufferExtended() to read_stream_next_buffer(), it silently routed all SELECT/UPDATE/DELETE/COPY away from the check that was sitting in ReadBufferExtended(). @@ -528,25 +599,23 @@ heap_fetch_next_buffer(HeapScanDesc scan, ScanDirection dir) */ CHECK_FOR_INTERRUPTS(); - if (unlikely(!scan->rs_inited)) + /* + * If the scan direction is changing, reset the prefetch block to the + * current block. Otherwise, we will incorrectly prefetch the blocks + * between the prefetch block and the current block again before + * prefetching blocks in the new, correct scan direction. + */ + if (unlikely(scan->rs_dir != dir)) { - scan->rs_cblock = heapgettup_initial_block(scan, dir); + scan->rs_prefetch_block = scan->rs_cblock; + read_stream_reset(scan->rs_read_stream); + } - /* ensure rs_cbuf is invalid when we get InvalidBlockNumber */ - Assert(scan->rs_cblock != InvalidBlockNumber || - !BufferIsValid(scan->rs_cbuf)); + scan->rs_dir = dir; - scan->rs_inited = true; - } - else - scan->rs_cblock = heapgettup_advance_block(scan, scan->rs_cblock, - dir); - - /* read block if valid */ - if (BlockNumberIsValid(scan->rs_cblock)) - scan->rs_cbuf = ReadBufferExtended(scan->rs_base.rs_rd, MAIN_FORKNUM, - scan->rs_cblock, RBM_NORMAL, - scan->rs_strategy); + scan->rs_cbuf = read_stream_next_buffer(scan->rs_read_stream, NULL); + if (BufferIsValid(scan->rs_cbuf)) + scan->rs_cblock = BufferGetBlockNumber(scan->rs_cbuf); } It simply builds upon 210622c60e1 (introduces StartReadBuffers -> PinBufferForBlock) and b5a9b18cd0b (builds read_stream_begin_relation on top of it). So I thought we can explore the option of adding this check directly in read_stream_begin_relation(): if (RELATION_IS_OTHER_TEMP(rel)) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("cannot access temporary relations of other sessions"))); Thoughts? See v15 attached. Daniil, feel free to revert it to your last patch if you disagree with this approach. Best, Jim --------------W6XIpmH5nr2UJX51K8K1ZAcj Content-Type: text/x-patch; charset=UTF-8; name="v15-0001-Prevent-access-to-other-sessions-temporary-table.patch" Content-Disposition: attachment; filename*0="v15-0001-Prevent-access-to-other-sessions-temporary-table.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBiZDE1YmU3MzE1NmFjYzI1OGZkMDZjN2I3N2E4NzVmYjJlMTU0ZmU4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKaW0gSm9uZXMgPGppbS5qb25lc0B1bmktbXVlbnN0 ZXIuZGU+CkRhdGU6IFdlZCwgOCBBcHIgMjAyNiAxNDo1MzowNiArMDIwMApTdWJqZWN0OiBb UEFUQ0ggdjE1IDEvMl0gUHJldmVudCBhY2Nlc3MgdG8gb3RoZXIgc2Vzc2lvbnMnIHRlbXBv cmFyeSB0YWJsZXMKCi0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0u YyB8IDEwICsrKysrKysrKysKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5j ICAgfCAxNCArKysrKysrKysrKystLQogMiBmaWxlcyBjaGFuZ2VkLCAyMiBpbnNlcnRpb25z KCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YWlvL3JlYWRfc3RyZWFtLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVh bS5jCmluZGV4IGI2ZmNlNGU3Y2M2Li5lNjRjNzQwNDBlOCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYworKysgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2Fpby9yZWFkX3N0cmVhbS5jCkBAIC05NzIsNiArOTcyLDE2IEBAIHJlYWRfc3RyZWFt X2JlZ2luX3JlbGF0aW9uKGludCBmbGFncywKIAkJCQkJCSAgIHZvaWQgKmNhbGxiYWNrX3By aXZhdGVfZGF0YSwKIAkJCQkJCSAgIHNpemVfdCBwZXJfYnVmZmVyX2RhdGFfc2l6ZSkKIHsK KwkvKgorCSAqIFJlamVjdCBhdHRlbXB0cyB0byByZWFkIG5vbi1sb2NhbCB0ZW1wb3Jhcnkg cmVsYXRpb25zOyB3ZSB3b3VsZCBiZQorCSAqIGxpa2VseSB0byBnZXQgd3JvbmcgZGF0YSBz aW5jZSB3ZSBoYXZlIG5vIHZpc2liaWxpdHkgaW50byB0aGUgb3duaW5nCisJICogc2Vzc2lv bidzIGxvY2FsIGJ1ZmZlcnMuCisJICovCisJaWYgKFJFTEFUSU9OX0lTX09USEVSX1RFTVAo cmVsKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVf Tk9UX1NVUFBPUlRFRCksCisJCQkJIGVycm1zZygiY2Fubm90IGFjY2VzcyB0ZW1wb3Jhcnkg cmVsYXRpb25zIG9mIG90aGVyIHNlc3Npb25zIikpKTsKKwogCXJldHVybiByZWFkX3N0cmVh bV9iZWdpbl9pbXBsKGZsYWdzLAogCQkJCQkJCQkgIHN0cmF0ZWd5LAogCQkJCQkJCQkgIHJl bCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKaW5kZXggM2NjMGIwYmRkOTIu LjRjNDY0ZDUxZjNjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9i dWZtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwpAQCAt Nzk1LDcgKzc5NSw3IEBAIFByZWZldGNoQnVmZmVyKFJlbGF0aW9uIHJlbG4sIEZvcmtOdW1i ZXIgZm9ya051bSwgQmxvY2tOdW1iZXIgYmxvY2tOdW0pCiAJCWlmIChSRUxBVElPTl9JU19P VEhFUl9URU1QKHJlbG4pKQogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJS Q09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAotCQkJCQkgZXJybXNnKCJjYW5ub3QgYWNj ZXNzIHRlbXBvcmFyeSB0YWJsZXMgb2Ygb3RoZXIgc2Vzc2lvbnMiKSkpOworCQkJCQkgZXJy bXNnKCJjYW5ub3QgYWNjZXNzIHRlbXBvcmFyeSByZWxhdGlvbnMgb2Ygb3RoZXIgc2Vzc2lv bnMiKSkpOwogCiAJCS8qIHBhc3MgaXQgb2ZmIHRvIGxvY2FsYnVmLmMgKi8KIAkJcmV0dXJu IFByZWZldGNoTG9jYWxCdWZmZXIoUmVsYXRpb25HZXRTbWdyKHJlbG4pLCBmb3JrTnVtLCBi bG9ja051bSk7CkBAIC05MzYsNyArOTM2LDcgQEAgUmVhZEJ1ZmZlckV4dGVuZGVkKFJlbGF0 aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya051bSwgQmxvY2tOdW1iZXIgYmxvY2tOdW0sCiAJ aWYgKFJFTEFUSU9OX0lTX09USEVSX1RFTVAocmVsbikpCiAJCWVyZXBvcnQoRVJST1IsCiAJ CQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAotCQkJCSBlcnJt c2coImNhbm5vdCBhY2Nlc3MgdGVtcG9yYXJ5IHRhYmxlcyBvZiBvdGhlciBzZXNzaW9ucyIp KSk7CisJCQkJIGVycm1zZygiY2Fubm90IGFjY2VzcyB0ZW1wb3JhcnkgcmVsYXRpb25zIG9m IG90aGVyIHNlc3Npb25zIikpKTsKIAogCS8qCiAJICogUmVhZCB0aGUgYnVmZmVyLCBhbmQg dXBkYXRlIHBnc3RhdCBjb3VudGVycyB0byByZWZsZWN0IGEgY2FjaGUgaGl0IG9yCkBAIC0x MzE3LDYgKzEzMTcsMTYgQEAgUmVhZEJ1ZmZlcl9jb21tb24oUmVsYXRpb24gcmVsLCBTTWdy UmVsYXRpb24gc21nciwgY2hhciBzbWdyX3BlcnNpc3RlbmNlLAogCWVsc2UKIAkJcGVyc2lz dGVuY2UgPSBzbWdyX3BlcnNpc3RlbmNlOwogCisJLyoKKwkgKiBTYWZldHkgbmV0IGZvciBj YWxsZXJzIChlLmcuIHZpYSBFeHRlbmRCdWZmZXJlZFJlbFRvKSB0aGF0IHJlYWNoIGhlcmUK KwkgKiB3aXRob3V0IGdvaW5nIHRocm91Z2ggUmVhZEJ1ZmZlckV4dGVuZGVkLiAgU2VlIFJl YWRCdWZmZXJFeHRlbmRlZCBmb3IKKwkgKiB0aGUgcHJpbWFyeSBjaGVjayBhbmQgZnVsbCBl eHBsYW5hdGlvbi4KKwkgKi8KKwlpZiAocmVsICE9IE5VTEwgJiYgUkVMQVRJT05fSVNfT1RI RVJfVEVNUChyZWwpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVf RkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkgZXJybXNnKCJjYW5ub3QgYWNjZXNzIHRl bXBvcmFyeSByZWxhdGlvbnMgb2Ygb3RoZXIgc2Vzc2lvbnMiKSkpOworCiAJaWYgKHVubGlr ZWx5KG1vZGUgPT0gUkJNX1pFUk9fQU5EX0NMRUFOVVBfTE9DSyB8fAogCQkJCSBtb2RlID09 IFJCTV9aRVJPX0FORF9MT0NLKSkKIAl7Ci0tIAoyLjQzLjAKCg== --------------W6XIpmH5nr2UJX51K8K1ZAcj Content-Type: text/x-patch; charset=UTF-8; name="v15-0002-Test-cross-session-access-on-temporary-tables.patch" Content-Disposition: attachment; filename*0="v15-0002-Test-cross-session-access-on-temporary-tables.patch" Content-Transfer-Encoding: base64 RnJvbSAzYTQ2M2Y5YzNlZmY4YWFiODM4ZWZlMWI1NzFhOTExN2I5NjEwNmNkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKaW0gSm9uZXMgPGppbS5qb25lc0B1bmktbXVlbnN0 ZXIuZGU+CkRhdGU6IFdlZCwgOCBBcHIgMjAyNiAxNDo1Njo1NyArMDIwMApTdWJqZWN0OiBb UEFUQ0ggdjE1IDIvMl0gVGVzdCBjcm9zcy1zZXNzaW9uIGFjY2VzcyBvbiB0ZW1wb3Jhcnkg dGFibGVzCgotLS0KIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL21lc29uLmJ1aWxkICAg ICAgICB8ICAgMSArCiAuLi4vdGVzdF9taXNjL3QvMDEyX3RlbXBfb2JqX211bHRpc2Vzc2lv bi5wbCAgfCAxMTcgKysrKysrKysrKysrKysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDExOCBp bnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X21pc2MvdC8wMTJfdGVtcF9vYmpfbXVsdGlzZXNzaW9uLnBsCgpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfbWlzYy9tZXNvbi5idWlsZAppbmRleCAxYjI1ZDk4ZjdmMy4uYTU0NTk5Y2MzMDEg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL21lc29uLmJ1aWxkCisr KyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL21lc29uLmJ1aWxkCkBAIC0yMCw2ICsy MCw3IEBAIHRlc3RzICs9IHsKICAgICAgICd0LzAwOV9sb2dfdGVtcF9maWxlcy5wbCcsCiAg ICAgICAndC8wMTBfaW5kZXhfY29uY3VycmVudGx5X3Vwc2VydC5wbCcsCiAgICAgICAndC8w MTFfbG9ja19zdGF0cy5wbCcsCisgICAgICAndC8wMTJfdGVtcF9vYmpfbXVsdGlzZXNzaW9u LnBsJywKICAgICBdLAogICAgICMgVGhlIGluamVjdGlvbiBwb2ludHMgYXJlIGNsdXN0ZXIt d2lkZSwgc28gZGlzYWJsZSBpbnN0YWxsY2hlY2sKICAgICAncnVubmluZ2NoZWNrJzogZmFs c2UsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy90LzAxMl90ZW1w X29ial9tdWx0aXNlc3Npb24ucGwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy90LzAx Ml90ZW1wX29ial9tdWx0aXNlc3Npb24ucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjRkNTk5MTUyNzQwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X21pc2MvdC8wMTJfdGVtcF9vYmpfbXVsdGlzZXNzaW9uLnBsCkBAIC0w LDAgKzEsMTE3IEBACisjIENvcHlyaWdodCAoYykgMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBQ b3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxz OwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkJhY2tncm91bmRQc3FsOwordXNlIFRlc3Q6Ok1v cmU7CisKKyMgU2V0IHVwIGEgZnJlc2ggbm9kZQorbXkgJG5vZGUgPSBQb3N0Z3JlU1FMOjpU ZXN0OjpDbHVzdGVyLT5uZXcoJ3RlbXBfbG9jaycpOworJG5vZGUtPmluaXQ7Ciskbm9kZS0+ c3RhcnQ7CisKKyMgQ3JlYXRlIGEgbG9uZy1saXZlZCBzZXNzaW9uCitteSAkcHNxbDEgPSAk bm9kZS0+YmFja2dyb3VuZF9wc3FsKCdwb3N0Z3JlcycpOworCiskcHNxbDEtPnF1ZXJ5X3Nh ZmUoCisJcShDUkVBVEUgVEVNUCBUQUJMRSBmb28gQVMgU0VMRUNUIDQyIEFTIHZhbDspKTsK KworIyBDcmVhdGUgYW4gaW5kZXggc28gdGhlIGluZGV4LXNjYW4gcGF0aCAoUmVhZEJ1ZmZl ckV4dGVuZGVkKSBjYW4gYmUgdGVzdGVkCiskcHNxbDEtPnF1ZXJ5X3NhZmUoCisJcShDUkVB VEUgSU5ERVggT04gZm9vKHZhbCk7KSk7CisKK215ICR0ZW1wc2NoZW1hID0gJG5vZGUtPnNh ZmVfcHNxbCgKKyAgICAncG9zdGdyZXMnLAorICAgIHF7CisgICAgICBTRUxFQ1Qgbi5uc3Bu YW1lCisgICAgICBGUk9NIHBnX2NsYXNzIGMKKyAgICAgIEpPSU4gcGdfbmFtZXNwYWNlIG4g T04gbi5vaWQgPSBjLnJlbG5hbWVzcGFjZQorICAgICAgV0hFUkUgcmVsbmFtZSA9ICdmb28n IEFORCByZWxwZXJzaXN0ZW5jZSA9ICd0JzsKKyAgICB9CispOworY2hvbXAgJHRlbXBzY2hl bWE7CitvaygkdGVtcHNjaGVtYSA9fiAvXnBnX3RlbXBfXGQrJC8sICJnb3QgdGVtcCBzY2hl bWE6ICR0ZW1wc2NoZW1hIik7CisKKworIyBTRUxFQ1QgVEVNUE9SQVJZIFRBQkxFIGZyb20g b3RoZXIgc2Vzc2lvbgorbXkgKCRzdGRvdXQsICRzdGRlcnIpOworJG5vZGUtPnBzcWwoCisg ICAgJ3Bvc3RncmVzJywKKyAgICAiU0VMRUNUIHZhbCBGUk9NICR0ZW1wc2NoZW1hLmZvbzsi LAorICAgIHN0ZG91dCA9PiBcJHN0ZG91dCwKKyAgICBzdGRlcnIgPT4gXCRzdGRlcnIKKyk7 CitsaWtlKCRzdGRlcnIsIHFyL2Nhbm5vdCBhY2Nlc3MgdGVtcG9yYXJ5IHJlbGF0aW9ucyBv ZiBvdGhlciBzZXNzaW9ucy8sCisgICAgICdTRUxFQ1Qgb24gb3RoZXIgc2Vzc2lvbiB0ZW1w IHRhYmxlIGlzIG5vdCBhbGxvd2VkJyk7CisKKyMgVVBEQVRFIFRFTVBPUkFSWSBUQUJMRSBm cm9tIG90aGVyIHNlc3Npb24KKyRub2RlLT5wc3FsKAorICAgICdwb3N0Z3JlcycsCisgICAg IlVQREFURSAkdGVtcHNjaGVtYS5mb28gU0VUIHZhbCA9IE5VTEw7IiwKKyAgICBzdGRlcnIg PT4gXCRzdGRlcnIKKyk7CitsaWtlKCRzdGRlcnIsIHFyL2Nhbm5vdCBhY2Nlc3MgdGVtcG9y YXJ5IHJlbGF0aW9ucyBvZiBvdGhlciBzZXNzaW9ucy8sCisgICAgICdVUERBVEUgb24gb3Ro ZXIgc2Vzc2lvbiB0ZW1wIHRhYmxlIGlzIG5vdCBhbGxvd2VkJyk7CisKKyMgREVMRVRFIHJl Y29yZHMgZnJvbSBURU1QT1JBUlkgVEFCTEUgZnJvbSBvdGhlciBzZXNzaW9uCiskbm9kZS0+ cHNxbCgKKyAgICAncG9zdGdyZXMnLAorICAgICJERUxFVEUgRlJPTSAkdGVtcHNjaGVtYS5m b287IiwKKyAgICBzdGRlcnIgPT4gXCRzdGRlcnIKKyk7CitsaWtlKCRzdGRlcnIsIHFyL2Nh bm5vdCBhY2Nlc3MgdGVtcG9yYXJ5IHJlbGF0aW9ucyBvZiBvdGhlciBzZXNzaW9ucy8sCisg ICAgICdERUxFVEUgb24gb3RoZXIgc2Vzc2lvbiB0ZW1wIHRhYmxlIGlzIG5vdCBhbGxvd2Vk Jyk7CisKKyMgVFJVTkNBVEUgVEVNUE9SQVJZIFRBQkxFIGZyb20gb3RoZXIgc2Vzc2lvbgor JG5vZGUtPnBzcWwoCisgICAgJ3Bvc3RncmVzJywKKyAgICAiVFJVTkNBVEUgVEFCTEUgJHRl bXBzY2hlbWEuZm9vOyIsCisgICAgc3RkZXJyID0+IFwkc3RkZXJyCispOworbGlrZSgkc3Rk ZXJyLCBxci9jYW5ub3QgdHJ1bmNhdGUgdGVtcG9yYXJ5IHRhYmxlcyBvZiBvdGhlciBzZXNz aW9ucy8sCisgICAgICdUUlVOQ0FURSBvbiBvdGhlciBzZXNzaW9uIHRlbXAgdGFibGUgaXMg bm90IGFsbG93ZWQnKTsKKworIyBJTlNFUlQgSU5UTyBURU1QT1JBUlkgVEFCTEUgZnJvbSBv dGhlciBzZXNzaW9uCiskbm9kZS0+cHNxbCgKKyAgICAncG9zdGdyZXMnLAorICAgICJJTlNF UlQgSU5UTyAkdGVtcHNjaGVtYS5mb28gVkFMVUVTICg3Myk7IiwKKyAgICBzdGRlcnIgPT4g XCRzdGRlcnIKKyk7CitsaWtlKCRzdGRlcnIsIHFyL2Nhbm5vdCBhY2Nlc3MgdGVtcG9yYXJ5 IHJlbGF0aW9ucyBvZiBvdGhlciBzZXNzaW9ucy8sCisgICAgICdJTlNFUlQgSU5UTyBvbiBv dGhlciBzZXNzaW9uIHRlbXAgdGFibGUgaXMgbm90IGFsbG93ZWQnKTsKKworIyBDT1BZIFRF TVBPUkFSWSBUQUJMRSBmcm9tIG90aGVyIHNlc3Npb24KKyRub2RlLT5wc3FsKAorICAgICdw b3N0Z3JlcycsCisgICAgIkNPUFkgJHRlbXBzY2hlbWEuZm9vIFRPIFNURE9VVDsiLAorICAg IHN0ZGVyciA9PiBcJHN0ZGVycgorKTsKK2xpa2UoJHN0ZGVyciwgcXIvY2Fubm90IGFjY2Vz cyB0ZW1wb3JhcnkgcmVsYXRpb25zIG9mIG90aGVyIHNlc3Npb25zLywKKyAgICAgJ0NPUFkg b24gb3RoZXIgc2Vzc2lvbiB0ZW1wIHRhYmxlIGlzIGJsb2NrZWQnKTsKKworIyBTRUxFQ1Qg dmlhIGluZGV4IHNjYW4gZnJvbSBvdGhlciBzZXNzaW9uLgorIyBTZXF1ZW50aWFsIHNjYW5z IGFyZSBibG9ja2VkIGF0IHJlYWRfc3RyZWFtX2JlZ2luX3JlbGF0aW9uKCk7IGluZGV4IHNj YW5zCisjIGJ5cGFzcyB0aGF0IHBhdGggZW50aXJlbHkgYW5kIHJlYWNoIFJlYWRCdWZmZXJF eHRlbmRlZCgpIGluIGJ1Zm1nci5jCisjIChuYnRyZWUncyBfYnRfZ2V0YnVmIGNhbGxzIFJl YWRCdWZmZXIgZGlyZWN0bHkgZm9yIGluZGl2aWR1YWwgcGFnZSBmZXRjaGVzKS4KKyMgZW5h YmxlX3NlcXNjYW49b2ZmIGZvcmNlcyB0aGUgcGxhbm5lciB0byB1c2UgdGhlIGluZGV4Lgor JG5vZGUtPnBzcWwoCisgICAgJ3Bvc3RncmVzJywKKyAgICAiU0VUIGVuYWJsZV9zZXFzY2Fu ID0gb2ZmOyBTRUxFQ1QgdmFsIEZST00gJHRlbXBzY2hlbWEuZm9vIFdIRVJFIHZhbCA9IDQy OyIsCisgICAgc3RkZXJyID0+IFwkc3RkZXJyCispOworbGlrZSgkc3RkZXJyLCBxci9jYW5u b3QgYWNjZXNzIHRlbXBvcmFyeSByZWxhdGlvbnMgb2Ygb3RoZXIgc2Vzc2lvbnMvLAorICAg ICAnaW5kZXggc2NhbiBvbiBvdGhlciBzZXNzaW9uIHRlbXAgdGFibGUgaXMgbm90IGFsbG93 ZWQgKGV4ZXJjaXNlcyBSZWFkQnVmZmVyRXh0ZW5kZWQgcGF0aCknKTsKKworIyBEUk9QIFRF TVBPUkFSWSBUQUJMRSBmcm9tIG90aGVyIHNlc3Npb24KK215ICRvayA9ICRub2RlLT5wc3Fs KAorICAgICdwb3N0Z3JlcycsCisgICAgIkRST1AgVEFCTEUgJHRlbXBzY2hlbWEuZm9vOyIK Kyk7Citvaygkb2sgPT0gMCwgJ0RST1AgVEFCTEUgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5Jyk7 CisKKyMgQ2xlYW4gdXAKKyRwc3FsMS0+cXVpdDsKKworZG9uZV90ZXN0aW5nKCk7Ci0tIAoy LjQzLjAKCg== --------------W6XIpmH5nr2UJX51K8K1ZAcj--