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 1vxaFT-00GwjB-14 for pgsql-hackers@arkaria.postgresql.org; Wed, 04 Mar 2026 00:37:59 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vxaFR-009Mo9-1p for pgsql-hackers@arkaria.postgresql.org; Wed, 04 Mar 2026 00:37:58 +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 1vxaFR-009Mny-0E for pgsql-hackers@lists.postgresql.org; Wed, 04 Mar 2026 00:37:57 +0000 Received: from mail-qk1-x743.google.com ([2607:f8b0:4864:20::743]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vxaFN-00000000KyW-3P9I for pgsql-hackers@lists.postgresql.org; Wed, 04 Mar 2026 00:37:56 +0000 Received: by mail-qk1-x743.google.com with SMTP id af79cd13be357-8cb3dfb3461so627839685a.3 for ; Tue, 03 Mar 2026 16:37:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dunslane-net.20230601.gappssmtp.com; s=20230601; t=1772584671; x=1773189471; darn=lists.postgresql.org; h=in-reply-to:autocrypt:content-language:from:references:cc:to :subject:user-agent:mime-version:date:message-id:from:to:cc:subject :date:message-id:reply-to; bh=pxiKQrLLTCfBM90+ngtDhxuyAR4qfgFPwLZXG3CTQPA=; b=iOceok5J3iBcSDRQZ2rP7/lswMtsMwRroHJGXzIbfNdsMfCCLOlPEFjpo3+Te5DGhy 5vW4EpBf9BCrEqfk5JGNWrreUscO+JX5Gkpev6FwMuh2wlVOupVjzZboqXazLA2oloDL QQ9lxhZqsyHpyMAmVimrdh5wfKy+Jy8BDysae7ro2IH0ZxvkgYy9qWOS7PyYrEjf8HHW YsP+HSrOIQS4Tu4VIi3mg4Fl2jMWtxfV84RTO91MXDVqD9SLU/Fc/WRNqhu2dZ45Mu+O NaHY5+A14RZxoWrL+X5wvqjIuylZKeuDsnMODui3lrGVcPHDLPhRioMqz8iuWIMcprhW 3sjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772584671; x=1773189471; h=in-reply-to:autocrypt:content-language:from:references:cc:to :subject:user-agent:mime-version:date:message-id:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=pxiKQrLLTCfBM90+ngtDhxuyAR4qfgFPwLZXG3CTQPA=; b=VfFWMsRDSx4cs5dFChPimv7hVGpzSXpzHsTiYk4YCh56Q9Ltj5nmCIbLKFDJRt3TqI EU4JNwkHnSc79QMrFUG6yJehppUQSsNqBBSyJ5US9i2x2gXu1vRi0Pt9oQYjzvTAF0MO QpNxyjFJfJafO/8XjlR4dyGlskZgOpunL6OAaW24Rn30J0t1+SZgNe6dY+uDmREciRGo 1y91eQ8+nAmjDUNLFOgxyVyIg+TOEZj4RHfs8ycRrx8/7xvMWYd1J5ohdITTtIjpzobn HYChsKYwiqHOWYsLbskk8Wrx/XyonCC8pegHDBNGlIqbQ/e7D5ttHuhxhMaXHkrMcB2r XPBg== X-Forwarded-Encrypted: i=1; AJvYcCUCRQ+xNvhMzkACwS6MglspsksFyZm7fANvvfZzwinjQuo6zCk/Gjgi8FhRxapZO6NpQCFHGRxgBagHRvPH@lists.postgresql.org X-Gm-Message-State: AOJu0YyzoGJFkhGmHAOlIR+IVJsgKCM0HZt3rZnfJQFw1Z7pN2egO0ZW k5m5RzJh4oOL85RFPSBJBSCImGzv9L+ZrogeMTazaJzOSVC+QqLR62cd1IRCiOU/tdc= X-Gm-Gg: ATEYQzwvzixrXyi5l03/gNijAvVSNXmBpvljf5m9Nf0iPo97IegiVAeDHCSi2HqUist lzHgCS/7XgR5d3qTVSX/XBzuOniOEaxBi3vw/JIhqeid1neyBnERo7e/rvIgrQ11CDWYuGON1y3 mQxTOPsyYvJIUksvJT0FGZ1UN9N5RJ//MAxaWbWYoTrMiLBsMTAHQ7Xao8VmIxXPhHj2cQfonNA +XPaJXPoA1PYAuaq6rjOUP4jjg4hEjOiOipFq7ZVlJsFbS1AXqaVlf5m6+Vmn6Hievd2qBu22q9 AuCiKyphbPhXnAl5fE8nsGUwSQqExbUp21yg6rHeWZmvueTC9u75ZMvfgYtN4dhsc+LurX8XBan c0C2rRkuYjUAoDYvb5Cc2Rf/+udF7kFOxYHdlaM1GqiBLWI5dcbFTVVDXb+gOpidWBZfSW5Y++u PqBMKXshb/gu55GmxwOfczO6wei4Ud9Q== X-Received: by 2002:a05:620a:29d1:b0:8ca:3c67:8921 with SMTP id af79cd13be357-8cd5af775f0mr42101485a.44.1772584670465; Tue, 03 Mar 2026 16:37:50 -0800 (PST) Received: from ?IPV6:2605:a601:a6b0:500::1cb? ([2605:a601:a6b0:500::1cb]) by smtp.googlemail.com with ESMTPSA id af79cd13be357-8cbbf658f70sm1492623885a.7.2026.03.03.16.37.49 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 03 Mar 2026 16:37:49 -0800 (PST) Content-Type: multipart/mixed; boundary="------------QBiPm97TtTa3QyiKnHig0Cdj" Message-ID: Date: Tue, 3 Mar 2026 19:37:48 -0500 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: pg_waldump: support decoding of WAL inside tarfile To: Amul Sul , Robert Haas Cc: Chao Li , Jakub Wartak , PostgreSQL Hackers References: From: Andrew Dunstan Content-Language: en-US Autocrypt: addr=andrew@dunslane.net; keydata= xsBNBE7KWFkBCAClridxur2AIc7eW2AR7izbfp3EnNefie2HbLF0izW5Ik5UjX2HBXBx4syI gY6b0ugohXrr274+baoAlvSbq6cAoQuEVrk5IZFzt20b1Xkx65FwGSEj526yiKLocqkJceSq Xr9xcA5SGY+FZv441chh5SU92v4q6z+6LPpoHOh97ptAVXZYNTtU0LevyvD5lja0TzbvJm6C eFXitJfnm1pLEr0DGJCR/iUOl/N62Kh4855zZC7NHIjQHPOvV5Stz/l5ilDhvGVk+xkXFPys SjZoUr1rXhYLpiyi5sR0X9FHXT0KnGuz1F5ERO7ZTLSSQ6fJwPj6gOk9K+vvoKvoeql5ABEB AAHNJEFuZHJldyBEdW5zdGFuIDxhbmRyZXdAZHVuc2xhbmUubmV0PsLAlwQTAQgAQQIbAwIX gAIZAQULCQgHAwUVCgkICwUWAgMBAAIeBRYhBOQ+WEYd/Hy/RGkVpZn6f8tZ/DuBBQJoGNGd BQkdEO8nAAoJEJn6f8tZ/DuBq74H/jkTR4Zi3stbw+xC7v2u3QozssK7MYPL2AsVfh7OealS h182fiWXpfvmmAB7WUHbhk9GC2RAOnHI/2d2jgKaMLAHsGYOT0YopTVIwRY43fCw/mK67yxc wmDcX+zyKfLaivNbf5A7QPLNwda98bEAMSJ8Sn652Uc6cA8t3uKGsVzbRBQOoYzjgvBCfSrE 9ql3PDNg0l4BfAqabd2f70ZUm9VAMEPrgv/v2xI7M2XiL4g5BVmqLCOwxLM8RMCotCuoweUr VO43DeBCIDwLxotMJKvGWDjBzQYlU1NPUAtNcz/gN9ITUe1VUGjyvGj4u1lxBOcQQUw7l1+T 5moZ4iZxXzvOwE0ETspYWQEIANGc4zQULOxhbqO2dyD51YhqCNRmm9oKWaqf+wmW4tpDe/VV cxAnNizd4LWCHfzpb5cHAtGkOPePMfzWVf6nvdF7d3eglbtf59+zG7O7llV0xSSoFiieQBsr GvqDInXYX/4mRRXMtyhM353/tixC9RWLs1oofyYmCPPXXY7h9R7en3B8BoVrRFcdzlIY/NFN hFGW/9dkEiGjgna2Rk6e15kln4ZvFBWUg23p93w/pqXcxY6+k/8TEk+C4R+M6w7o2PLGOjdZ +kPiUcw5H85zf/yZJwQXzisXaNduwWB6Vads9YC9dj6kPR1c4VGRqAaYL++LAEOqrlvm2Tvq QqZRtnEAEQEAAcLAfAQYAQgAJgIbDBYhBOQ+WEYd/Hy/RGkVpZn6f8tZ/DuBBQJoGNI2BQkd EODdAAoJEJn6f8tZ/DuBfw0IAKTsfD40teP/pp+bsLLMSxPXUYrrprTj7WFB5v61p6dkpSr/ qXmMlyahdxQFaPmfVgVirB1Vk/kHiWNnnGjfUV9nB2Zg9LI0Xb9/ts3LsUiRWXzG3tkMY6XL vsVOxW4XFRND9l2q+WW93aZ1DZl+fqWfYgMvsusFRhmGFOKTRfKPta2Pkv+AhA24N4+PrR5p bU4k2MO8PAGiK8eaYKGFG1bHKuAvoDoF7WXJ3FHxuWqLnKEt4dfOLm5pAe3zq1Lt6q8azT9i QWGpSAK5vQUWQHBHpiDjdPeqKZ6HiAXIIKfSmb+jrvXBqoP+D6/K7rUjG2aXiRtTIAXms9sm VRu7cmw= In-Reply-To: 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. --------------QBiPm97TtTa3QyiKnHig0Cdj Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 2026-03-02 Mo 8:00 AM, Amul Sul wrote: > On Wed, Feb 18, 2026 at 12:28 PM Amul Sul wrote: >> On Tue, Feb 10, 2026 at 3:06 PM Amul Sul wrote: >>> On Wed, Feb 4, 2026 at 6:39 PM Amul Sul wrote: >>>> On Wed, Jan 28, 2026 at 2:41 AM Robert Haas wrote: >>>>> On Tue, Jan 27, 2026 at 7:07 AM Amul Sul wrote: >>>>>> In the attached version, I am using the WAL segment name as the hash >>>>>> key, which is much more straightforward. I have rewritten >>>>>> read_archive_wal_page(), and it looks much cleaner than before. The >>>>>> logic to discard irrelevant WAL files is still within >>>>>> get_archive_wal_entry. I added an explanation for setting cur_wal to >>>>>> NULL, which is now handled in the separate function I mentioned >>>>>> previously. >>>>>> >>>>>> Kindly have a look at the attached version; let me know if you are >>>>>> still not happy with the current approach for filtering/discarding >>>>>> irrelevant WAL segments. It isn't much different from the previous >>>>>> version, but I have tried to keep it in a separate routine for better >>>>>> code readability, with comments to make it easier to understand. I >>>>>> also added a comment for ArchivedWALFile. >>>>> I feel like the division of labor between get_archive_wal_entry() and >>>>> read_archive_wal_page() is odd. I noticed this in the last version, >>>>> too, and it still seems to be the case. get_archive_wal_entry() first >>>>> calls ArchivedWAL_lookup(). If that finds an entry, it just returns. >>>>> If it doesn't, it loops until an entry for the requested file shows up >>>>> and then returns it. Then control returns to read_archive_wal_page() >>>>> which loops some more until we have all the data we need for the >>>>> requested file. But it seems odd to me to have two separate loops >>>>> here. I think that the first loop is going to call read_archive_file() >>>>> until we find the beginning of the file that we care about and then >>>>> the second one is going to call read_archive_file() some more until we >>>>> have read enough of it to satisfy the request. It feels odd to me to >>>>> do it that way, as if we told somebody to first wait until 9 o'clock >>>>> and then wait another 30 minutes, instead of just telling them to wait >>>>> until 9:30. I realize it's not quite the same thing, because apart >>>>> from calling read_archive_file(), the two loops do different things, >>>>> but I still think it looks odd. >>>>> >>>>> + /* >>>>> + * Ignore if the timeline is different or the current segment is not >>>>> + * the desired one. >>>>> + */ >>>>> + XLogFromFileName(entry->fname, &curSegTimeline, &curSegNo, WalSegSz); >>>>> + if (privateInfo->timeline != curSegTimeline || >>>>> + privateInfo->startSegNo > curSegNo || >>>>> + privateInfo->endSegNo < curSegNo || >>>>> + segno > curSegNo) >>>>> + { >>>>> + free_archive_wal_entry(entry->fname, privateInfo); >>>>> + continue; >>>>> + } >>>>> >>>>> The comment doesn't match the code. If it did, the test would be >>>>> (privateInfo->timeline != curSegTimeline || segno != curSegno). But >>>>> instead the segno test is > rather than !=, and the checks against >>>>> startSegNo and endSegNo aren't explained at all. I think I understand >>>>> why the segno test uses > rather than !=, but it's the point of the >>>>> comment to explain things like that, rather than leaving the reader to >>>>> guess. And I don't know why we also need to test startSegNo and >>>>> endSegNo. >>>>> >>>>> I also wonder what the point is of doing XLogFromFileName() on the >>>>> fname provided by the caller and then again on entry->fname. Couldn't >>>>> you just compare the strings? >>>>> >>>>> Again, the division of labor is really odd here. It's the job of >>>>> astreamer_waldump_content() to skip things that aren't WAL files at >>>>> all, but it's the job of get_archive_wal_entry() to skip things that >>>>> are WAL files but not the one we want. I disagree with putting those >>>>> checks in completely separate parts of the code. >>>>> >>>> Keeping the timeline and segment start-end range checks inside the >>>> archive streamer creates a circular dependency that cannot be resolved >>>> without a 'dirty hack'. We must read the first available WAL file page >>>> to determine the wal_segment_size before it can calculate the target >>>> segment range. Moving the checks inside the streamer would make it >>>> impossible to process that initial file, as the necessary filtering >>>> parameters -- would still be unknown which would need to be skipped >>>> for the first read somehow. What if later we realized that the first >>>> WAL file which was allowed to be streamed by skipping that check is >>>> irrelevant and doesn't fall under the start-end segment range? >>>> >>> Please have a look at the attached version, specifically patch 0005. >>> In astreamer_waldump_content(), I have moved the WAL file filtration >>> check from get_archive_wal_entry(). This check will be skipped during >>> the initial read in init_archive_reader(), which instead performs it >>> explicitly once it determines the WAL segment size and the start/end >>> segments. >>> >>> To access the WAL segment size inside astreamer_waldump_content(), I >>> have moved the WAL segment size variable into the XLogDumpPrivate >>> structure in the separate 0004 patch. >> Attached is an updated version including the aforesaid changes. It >> includes a new refactoring patch (0001) that moves the logic for >> identifying tar archives and their compression types from >> pg_basebackup and pg_verifybackup into a separate-reusable function, >> per a suggestion from Euler [1]. Additionally, I have added a test >> for the contrecord decoding to the main patch (now 0006). >> >> 1] http://postgr.es/m/3c8e7b02-2152-495a-a0b6-e37cf9286a70@app.fastmail.com >> > Rebased against the latest master, fixed typos in code comments, and > replaced palloc0 with palloc0_object. > Hi Amul. I think this looks in pretty good shape. Attached are patches for a few things I think could be fixed. They are mostly self-explanatory. The TAP test fix is the only sane way I could come up with stopping the skip code you had from reporting a wildly inaccurate number of tests skipped. The sane way to do this from a Test::More perspective is a subtest, but unfortunately meson does not like subtest output, which is why we don't use it elsewhere, so the only way I could come up with was to split this out into a separate test. Of course, we might just say we don't care about the misreport, in which case we could just live with things as they are. cheers andrew -- Andrew Dunstan EDB: https://www.enterprisedb.com --------------QBiPm97TtTa3QyiKnHig0Cdj Content-Type: text/plain; charset=UTF-8; name="cf5955-tar-wal-test.patch.no-cfbot" Content-Disposition: attachment; filename="cf5955-tar-wal-test.patch.no-cfbot" Content-Transfer-Encoding: base64 RnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgRHVuc3RhbiA8YW5kcmV3QGR1bnNsYW5l Lm5ldD4KRGF0ZTogVHVlLCAzIE1hciAyMDI2IDAwOjAwOjAwICswMDAwClN1YmplY3Q6IFtQ QVRDSF0gQWRkIHBnX3ZlcmlmeWJhY2t1cCB0ZXN0IGZvciB0YXItZm9ybWF0IFdBTCB2ZXJp ZmljYXRpb24KClRoZSBuZXcgdGFyLWZvcm1hdCBXQUwgdmVyaWZpY2F0aW9uIGluIHBnX3Zl cmlmeWJhY2t1cCBoYWQgbm8gdGVzdApjb3ZlcmFnZSBmb3IgdGhlIGNhc2Ugd2hlcmUgcGdf YmFzZWJhY2t1cCBwcm9kdWNlcyBhIHNlcGFyYXRlCnBnX3dhbC50YXIgKC0tZm9ybWF0PXRh ciAtLXdhbC1tZXRob2Q9c3RyZWFtKS4gIEFkZCBhIHRlc3QgdGhhdCB0YWtlcwphIHRhci1m b3JtYXQgYmFja3VwIGFuZCB2ZXJpZmllcyBpdC4KLS0tCiBzcmMvYmluL3BnX3ZlcmlmeWJh Y2t1cC90LzAwN193YWwucGwgfCAxNiArKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdl ZCwgMTYgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdmVyaWZ5YmFj a3VwL3QvMDA3X3dhbC5wbCBiL3NyYy9iaW4vcGdfdmVyaWZ5YmFja3VwL3QvMDA3X3dhbC5w bAppbmRleCA4YWQyMjM0NDUzZC4uMGUwMzc3YmZhY2MgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4v cGdfdmVyaWZ5YmFja3VwL3QvMDA3X3dhbC5wbAorKysgYi9zcmMvYmluL3BnX3ZlcmlmeWJh Y2t1cC90LzAwN193YWwucGwKQEAgLTkwLDQgKzkwLDIwIEBAIGNvbW1hbmRfb2soCiAJWyAn cGdfdmVyaWZ5YmFja3VwJywgJGJhY2t1cF9wYXRoMiBdLAogCSd2YWxpZCBiYXNlIGJhY2t1 cCB3aXRoIHRpbWVsaW5lID4gMScpOwogCisjIFRlc3QgV0FMIHZlcmlmaWNhdGlvbiBmb3Ig YSB0YXItZm9ybWF0IGJhY2t1cCB3aXRoIGEgc2VwYXJhdGUgcGdfd2FsLnRhciwKKyMgYXMg cHJvZHVjZWQgYnkgcGdfYmFzZWJhY2t1cCAtLWZvcm1hdD10YXIgLS13YWwtbWV0aG9kPXN0 cmVhbS4KK215ICRiYWNrdXBfcGF0aDMgPSAkcHJpbWFyeS0+YmFja3VwX2RpciAuICcvdGVz dF90YXJfd2FsJzsKKyRwcmltYXJ5LT5jb21tYW5kX29rKAorCVsKKwkJJ3BnX2Jhc2ViYWNr dXAnLAorCQknLS1wZ2RhdGEnID0+ICRiYWNrdXBfcGF0aDMsCisJCSctLW5vLXN5bmMnLAor CQknLS1mb3JtYXQnID0+ICd0YXInLAorCQknLS1jaGVja3BvaW50JyA9PiAnZmFzdCcKKwld LAorCSJ0YXIgYmFja3VwIHdpdGggc2VwYXJhdGUgcGdfd2FsLnRhciIpOworY29tbWFuZF9v aygKKwlbICdwZ192ZXJpZnliYWNrdXAnLCAkYmFja3VwX3BhdGgzIF0sCisJJ1dBTCB2ZXJp ZmljYXRpb24gc3VjY2VlZHMgd2l0aCBzZXBhcmF0ZSBwZ193YWwudGFyJyk7CisKIGRvbmVf dGVzdGluZygpOwo= --------------QBiPm97TtTa3QyiKnHig0Cdj Content-Type: text/plain; charset=UTF-8; name="cf5955-tap-test-fix.patch.no-cfbot" Content-Disposition: attachment; filename="cf5955-tap-test-fix.patch.no-cfbot" Content-Transfer-Encoding: base64 RnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgRHVuc3RhbiA8YW5kcmV3QGR1bnNsYW5l Lm5ldD4KRGF0ZTogVHVlLCAzIE1hciAyMDI2IDAwOjAwOjAwICswMDAwClN1YmplY3Q6IFtQ QVRDSF0gU3BsaXQgcGdfd2FsZHVtcCBUQVAgdGVzdHMgaW50byBkaXJlY3RvcnkgYW5kIGFy Y2hpdmUgZmlsZXMKClRoZSBvcmlnaW5hbCAwMDFfYmFzaWMucGwgbWl4ZWQgZGlyZWN0b3J5 IGFuZCB0YXIgYXJjaGl2ZSB0ZXN0cyBpbiBhCnNpbmdsZSBTS0lQIGxvb3Agd2l0aCBhIGhh cmRjb2RlZCBza2lwIGNvdW50IG9mIDMsIGJ1dCBlYWNoIHNjZW5hcmlvCmFjdHVhbGx5IHJ1 bnMgfjE5IGFzc2VydGlvbnMuICBXaGVuIHRhciBpcyB1bmF2YWlsYWJsZSB0aGUgc2tpcCBj b3VudAp3YXMgd3JvbmcsIGFuZCB0aGUgZGlyZWN0b3J5IHNjZW5hcmlvIHdhcyBhbHNvIHdy b25nbHkgZ3VhcmRlZCBieSB0aGUKdGFyLWF2YWlsYWJpbGl0eSBjaGVjay4KCk1vdmUgYWxs IGFyY2hpdmUtcmVsYXRlZCB0ZXN0cyAodGFyLCB0YXIuZ3opIGludG8gYSBuZXcKMDAzX2Fy Y2hpdmUucGwgdGhhdCB1c2VzIHBsYW4gc2tpcF9hbGwgd2hlbiB0YXIgaXMgdW5hdmFpbGFi bGUsCmNsZWFubHkgc2tpcHBpbmcgdGhlIGVudGlyZSBmaWxlLiAgMDAxX2Jhc2ljLnBsIHJl dGFpbnMgb25seQpkaXJlY3RvcnktYmFzZWQgdGVzdHMgd2l0aCBubyBTS0lQIGJsb2NrcyBu ZWVkZWQuCi0tLQogc3JjL2Jpbi9wZ193YWxkdW1wL21lc29uLmJ1aWxkICAgICAgIHwgICAx ICsKIHNyYy9iaW4vcGdfd2FsZHVtcC90LzAwMV9iYXNpYy5wbCAgICB8IDIyMSArKysrKysr KysrLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9iaW4vcGdfd2FsZHVtcC90LzAwM19hcmNoaXZl LnBsICB8IDMyMCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxl cyBjaGFuZ2VkLCAzOTYgaW5zZXJ0aW9ucygrKSwgMTQ2IGRlbGV0aW9ucygtKQogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfd2FsZHVtcC90LzAwM19hcmNoaXZlLnBsCgpkaWZm IC0tZ2l0IGEvc3JjL2Jpbi9wZ193YWxkdW1wL21lc29uLmJ1aWxkIGIvc3JjL2Jpbi9wZ193 YWxkdW1wL21lc29uLmJ1aWxkCmluZGV4IDUyOTZmMjFiODJjLi5kMmI0YmQwYzA0OCAxMDA2 NDQKLS0tIGEvc3JjL2Jpbi9wZ193YWxkdW1wL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iaW4v cGdfd2FsZHVtcC9tZXNvbi5idWlsZApAQCAtMzQsNiArMzQsNyBAQCB0ZXN0cyArPSB7CiAg ICAgJ3Rlc3RzJzogWwogICAgICAgJ3QvMDAxX2Jhc2ljLnBsJywKICAgICAgICd0LzAwMl9z YXZlX2Z1bGxwYWdlLnBsJywKKyAgICAgICd0LzAwM19hcmNoaXZlLnBsJywKICAgICBdLAog ICB9LAogfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ193YWxkdW1wL3QvMDAxX2Jhc2ljLnBs IGIvc3JjL2Jpbi9wZ193YWxkdW1wL3QvMDAxX2Jhc2ljLnBsCmluZGV4IDk4NTRjOTM5MDA3 Li4yODJjOWEzNzIyMSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ193YWxkdW1wL3QvMDAxX2Jh c2ljLnBsCisrKyBiL3NyYy9iaW4vcGdfd2FsZHVtcC90LzAwMV9iYXNpYy5wbApAQCAtMywx MyArMyw5IEBACiAKIHVzZSBzdHJpY3Q7CiB1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7 Ci11c2UgQ3dkOwogdXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7CiB1c2UgUG9zdGdy ZVNRTDo6VGVzdDo6VXRpbHM7CiB1c2UgVGVzdDo6TW9yZTsKLXVzZSBMaXN0OjpVdGlsIHF3 KHNodWZmbGUpOwotCi1teSAkdGFyID0gJEVOVntUQVJ9OwogCiBwcm9ncmFtX2hlbHBfb2so J3BnX3dhbGR1bXAnKTsKIHByb2dyYW1fdmVyc2lvbl9vaygncGdfd2FsZHVtcCcpOwpAQCAt MTk1LDggKzE5MSw4IEBAIEVORAogJCQ7CiB9KTsKIAotbXkgJGNvbnRyZWNvcmRfbHNuID0g JG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSdTRUxFQ1QgcGdfY3VycmVudF93YWxf aW5zZXJ0X2xzbigpJyk7CitteSAkY29udHJlY29yZF9sc24gPQorICAkbm9kZS0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICdTRUxFQ1QgcGdfY3VycmVudF93YWxfaW5zZXJ0X2xzbigpJyk7 CiAjIEdlbmVyYXRlIGNvbnRyZWNvcmQgcmVjb3JkCiAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCiAJcXF7U0VMRUNUIHBnX2xvZ2ljYWxfZW1pdF9tZXNzYWdlKHRydWUsICd0ZXN0 IDAyNicsIHJlcGVhdCgneHl6eHonLCAxMjM0NTYpKX0KQEAgLTI5OSwxNDUgKzI5NSw3OCBA QCBzdWIgdGVzdF9wZ193YWxkdW1wCiAJcmV0dXJuIEBsaW5lczsKIH0KIAotIyBDcmVhdGUg YSB0YXIgYXJjaGl2ZSwgc29ydGluZyB0aGUgZmlsZSBvcmRlcgotc3ViIGdlbmVyYXRlX2Fy Y2hpdmUKLXsKLQlteSAoJGFyY2hpdmUsICRkaXJlY3RvcnksICRjb21wcmVzc2lvbl9mbGFn cykgPSBAXzsKLQotCW15IEBmaWxlczsKLQlvcGVuZGlyIG15ICRkaCwgJGRpcmVjdG9yeSBv ciBkaWUgIm9wZW5kaXI6ICQhIjsKLQl3aGlsZSAobXkgJGVudHJ5ID0gcmVhZGRpciAkZGgp IHsKLQkJIyBTa2lwICcuJyBhbmQgJy4uJwotCQluZXh0IGlmICRlbnRyeSBlcSAnLicgfHwg JGVudHJ5IGVxICcuLic7Ci0JCXB1c2ggQGZpbGVzLCAkZW50cnk7Ci0JfQotCWNsb3NlZGly ICRkaDsKLQotCUBmaWxlcyA9IHNodWZmbGUgQGZpbGVzOwotCi0JIyBtb3ZlIGludG8gdGhl IFdBTCBkaXJlY3RvcnkgYmVmb3JlIGFyY2hpdmluZyBmaWxlcwotCW15ICRjd2QgPSBnZXRj d2Q7Ci0JY2hkaXIoJGRpcmVjdG9yeSkgfHwgZGllICJjaGRpcjogJCEiOwotCWNvbW1hbmRf b2soWyR0YXIsICRjb21wcmVzc2lvbl9mbGFncywgJGFyY2hpdmUsIEBmaWxlc10pOwotCWNo ZGlyKCRjd2QpIHx8IGRpZSAiY2hkaXI6ICQhIjsKLX0KLQotbXkgJHRtcF9kaXIgPSBQb3N0 Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGVtcGRpcl9zaG9ydCgpOwotCi1teSBAc2NlbmFyaW9z ID0gKAotCXsKLQkJJ3BhdGgnID0+ICRub2RlLT5kYXRhX2RpciwKLQkJJ2lzX2FyY2hpdmUn ID0+IDAsCi0JCSdlbmFibGVkJyA9PiAxCi0JfSwKLQl7Ci0JCSdwYXRoJyA9PiAiJHRtcF9k aXIvcGdfd2FsLnRhciIsCi0JCSdjb21wcmVzc2lvbl9tZXRob2QnID0+ICdub25lJywKLQkJ J2NvbXByZXNzaW9uX2ZsYWdzJyA9PiAnLWNmJywKLQkJJ2lzX2FyY2hpdmUnID0+IDEsCi0J CSdlbmFibGVkJyA9PiAxCi0JfSwKLQl7Ci0JCSdwYXRoJyA9PiAiJHRtcF9kaXIvcGdfd2Fs LnRhci5neiIsCi0JCSdjb21wcmVzc2lvbl9tZXRob2QnID0+ICdnemlwJywKLQkJJ2NvbXBy ZXNzaW9uX2ZsYWdzJyA9PiAnLWN6ZicsCi0JCSdpc19hcmNoaXZlJyA9PiAxLAotCQknZW5h YmxlZCcgPT4gY2hlY2tfcGdfY29uZmlnKCIjZGVmaW5lIEhBVkVfTElCWiAxIikKLQl9KTsK LQotZm9yIG15ICRzY2VuYXJpbyAoQHNjZW5hcmlvcykKLXsKLQlteSAkcGF0aCA9ICRzY2Vu YXJpby0+eydwYXRoJ307Ci0KLQlTS0lQOgotCXsKLQkJc2tpcCAidGFyIGNvbW1hbmQgaXMg bm90IGF2YWlsYWJsZSIsIDMKLQkJICBpZiAhZGVmaW5lZCAkdGFyOwotCQlza2lwICIkc2Nl bmFyaW8tPnsnY29tcHJlc3Npb25fbWV0aG9kJ30gY29tcHJlc3Npb24gbm90IHN1cHBvcnRl ZCBieSB0aGlzIGJ1aWxkIiwgMwotCQkgIGlmICEkc2NlbmFyaW8tPnsnZW5hYmxlZCd9ICYm ICRzY2VuYXJpby0+eydpc19hcmNoaXZlJ307Ci0KLQkJICAjIGNyZWF0ZSBwZ193YWwgYXJj aGl2ZQotCQkgIGlmICgkc2NlbmFyaW8tPnsnaXNfYXJjaGl2ZSd9KQotCQkgIHsKLQkJCSAg Z2VuZXJhdGVfYXJjaGl2ZSgkcGF0aCwKLQkJCQkgICRub2RlLT5kYXRhX2RpciAuICcvcGdf d2FsJywKLQkJCQkgICRzY2VuYXJpby0+eydjb21wcmVzc2lvbl9mbGFncyd9KTsKLQkJICB9 Ci0KLQkJY29tbWFuZF9mYWlsc19saWtlKAotCQkJWyAncGdfd2FsZHVtcCcsICctLXBhdGgn ID0+ICRwYXRoIF0sCi0JCQlxci9lcnJvcjogbm8gc3RhcnQgV0FMIGxvY2F0aW9uIGdpdmVu LywKLQkJCSdwYXRoIG9wdGlvbiByZXF1aXJlcyBzdGFydCBsb2NhdGlvbicpOwotCQljb21t YW5kX2xpa2UoCi0JCQlbCi0JCQkJJ3BnX3dhbGR1bXAnLAotCQkJCSctLXBhdGgnID0+ICRw YXRoLAotCQkJCSctLXN0YXJ0JyA9PiAkc3RhcnRfbHNuLAotCQkJCSctLWVuZCcgPT4gJGVu ZF9sc24sCi0JCQldLAotCQkJcXIvLi8sCi0JCQkncnVucyB3aXRoIHBhdGggb3B0aW9uIGFu ZCBzdGFydCBhbmQgZW5kIGxvY2F0aW9ucycpOwotCQljb21tYW5kX2ZhaWxzX2xpa2UoCi0J CQlbCi0JCQkJJ3BnX3dhbGR1bXAnLAotCQkJCSctLXBhdGgnID0+ICRwYXRoLAotCQkJCSct LXN0YXJ0JyA9PiAkc3RhcnRfbHNuLAotCQkJXSwKLQkJCXFyL2Vycm9yOiBlcnJvciBpbiBX QUwgcmVjb3JkIGF0LywKLQkJCSdmYWxsaW5nIG9mZiB0aGUgZW5kIG9mIHRoZSBXQUwgcmVz dWx0cyBpbiBhbiBlcnJvcicpOwotCi0JCWNvbW1hbmRfZmFpbHNfbGlrZSgKLQkJCVsKLQkJ CQkncGdfd2FsZHVtcCcsICctLXF1aWV0JywKLQkJCQknLS1wYXRoJyA9PiAkcGF0aCwKLQkJ CQknLS1zdGFydCcgPT4gJHN0YXJ0X2xzbgotCQkJXSwKLQkJCXFyL2Vycm9yOiBlcnJvciBp biBXQUwgcmVjb3JkIGF0LywKLQkJCSdlcnJvcnMgYXJlIHNob3duIHdpdGggLS1xdWlldCcp OwotCi0JCXRlc3RfcGdfd2FsZHVtcF9za2lwX2J5dGVzKCRwYXRoLCAkc3RhcnRfbHNuLCAk ZW5kX2xzbik7Ci0KLQkJbXkgQGxpbmVzID0gdGVzdF9wZ193YWxkdW1wKCRwYXRoLCAkc3Rh cnRfbHNuLCAkZW5kX2xzbik7Ci0JCWlzKGdyZXAoIS9ecm1ncjogXHcvLCBAbGluZXMpLCAw LCAnYWxsIG91dHB1dCBsaW5lcyBhcmUgcm1nciBsaW5lcycpOwotCi0JCUBsaW5lcyA9IHRl c3RfcGdfd2FsZHVtcCgkcGF0aCwgJGNvbnRyZWNvcmRfbHNuLCAkZW5kX2xzbik7Ci0JCWlz KGdyZXAoIS9ecm1ncjogXHcvLCBAbGluZXMpLCAwLCAnYWxsIG91dHB1dCBsaW5lcyBhcmUg cm1nciBsaW5lcycpOwotCi0JCXRlc3RfcGdfd2FsZHVtcF9za2lwX2J5dGVzKCRwYXRoLCAk Y29udHJlY29yZF9sc24sICRlbmRfbHNuKTsKLQotCQlAbGluZXMgPSB0ZXN0X3BnX3dhbGR1 bXAoJHBhdGgsICRzdGFydF9sc24sICRlbmRfbHNuLCAnLS1saW1pdCcgPT4gNik7Ci0JCWlz KEBsaW5lcywgNiwgJ2xpbWl0IG9wdGlvbiBvYnNlcnZlZCcpOwotCi0JCUBsaW5lcyA9IHRl c3RfcGdfd2FsZHVtcCgkcGF0aCwgJHN0YXJ0X2xzbiwgJGVuZF9sc24sICctLWZ1bGxwYWdl Jyk7Ci0JCWlzKGdyZXAoIS9ecm1ncjouKlxiRlBXXGIvLCBAbGluZXMpLCAwLCAnYWxsIG91 dHB1dCBsaW5lcyBhcmUgRlBXJyk7Ci0KLQkJQGxpbmVzID0gdGVzdF9wZ193YWxkdW1wKCRw YXRoLCAkc3RhcnRfbHNuLCAkZW5kX2xzbiwgJy0tc3RhdHMnKTsKLQkJbGlrZSgkbGluZXNb MF0sIHFyL1dBTCBzdGF0aXN0aWNzLywgInN0YXRpc3RpY3Mgb24gc3Rkb3V0Iik7Ci0JCWlz KGdyZXAoL15ybWdyOi8sIEBsaW5lcyksIDAsICdubyBybWdyIGxpbmVzIG91dHB1dCcpOwot Ci0JCUBsaW5lcyA9IHRlc3RfcGdfd2FsZHVtcCgkcGF0aCwgJHN0YXJ0X2xzbiwgJGVuZF9s c24sICctLXN0YXRzPXJlY29yZCcpOwotCQlsaWtlKCRsaW5lc1swXSwgcXIvV0FMIHN0YXRp c3RpY3MvLCAic3RhdGlzdGljcyBvbiBzdGRvdXQiKTsKLQkJaXMoZ3JlcCgvXnJtZ3I6Lywg QGxpbmVzKSwgMCwgJ25vIHJtZ3IgbGluZXMgb3V0cHV0Jyk7Ci0KLQkJQGxpbmVzID0gdGVz dF9wZ193YWxkdW1wKCRwYXRoLCAkc3RhcnRfbHNuLCAkZW5kX2xzbiwgJy0tcm1ncicgPT4g J0J0cmVlJyk7Ci0JCWlzKGdyZXAoIS9ecm1ncjogQnRyZWUvLCBAbGluZXMpLCAwLCAnb25s eSBCdHJlZSBsaW5lcycpOwotCi0JCUBsaW5lcyA9IHRlc3RfcGdfd2FsZHVtcCgkcGF0aCwg JHN0YXJ0X2xzbiwgJGVuZF9sc24sICctLWZvcmsnID0+ICdpbml0Jyk7Ci0JCWlzKGdyZXAo IS9mb3JrIGluaXQvLCBAbGluZXMpLCAwLCAnb25seSBpbml0IGZvcmsgbGluZXMnKTsKLQot CQlAbGluZXMgPSB0ZXN0X3BnX3dhbGR1bXAoJHBhdGgsICRzdGFydF9sc24sICRlbmRfbHNu LAotCQkJJy0tcmVsYXRpb24nID0+ICIkZGVmYXVsdF90c19vaWQvJHBvc3RncmVzX2RiX29p ZC8kcmVsX3QxX29pZCIpOwotCQlpcyhncmVwKCEvcmVsICRkZWZhdWx0X3RzX29pZFwvJHBv c3RncmVzX2RiX29pZFwvJHJlbF90MV9vaWQvLCBAbGluZXMpLAotCQkJMCwgJ29ubHkgbGlu ZXMgZm9yIHNlbGVjdGVkIHJlbGF0aW9uJyk7Ci0KLQkJQGxpbmVzID0gdGVzdF9wZ193YWxk dW1wKCRwYXRoLCAkc3RhcnRfbHNuLCAkZW5kX2xzbiwKLQkJCSctLXJlbGF0aW9uJyA9PiAi JGRlZmF1bHRfdHNfb2lkLyRwb3N0Z3Jlc19kYl9vaWQvJHJlbF9pMWFfb2lkIiwKLQkJCSct LWJsb2NrJyA9PiAxKTsKLQkJaXMoZ3JlcCghL1xiYmxrIDFcYi8sIEBsaW5lcyksIDAsICdv bmx5IGxpbmVzIGZvciBzZWxlY3RlZCBibG9jaycpOwotCi0JCSMgQ2xlYW51cC4KLQkJdW5s aW5rICRwYXRoIGlmICRzY2VuYXJpby0+eydpc19hcmNoaXZlJ307Ci0JfQotfQorbXkgJHBh dGggPSAkbm9kZS0+ZGF0YV9kaXI7CisKK2NvbW1hbmRfZmFpbHNfbGlrZSgKKwlbICdwZ193 YWxkdW1wJywgJy0tcGF0aCcgPT4gJHBhdGggXSwKKwlxci9lcnJvcjogbm8gc3RhcnQgV0FM IGxvY2F0aW9uIGdpdmVuLywKKwkncGF0aCBvcHRpb24gcmVxdWlyZXMgc3RhcnQgbG9jYXRp b24nKTsKK2NvbW1hbmRfbGlrZSgKKwlbCisJCSdwZ193YWxkdW1wJywKKwkJJy0tcGF0aCcg PT4gJHBhdGgsCisJCSctLXN0YXJ0JyA9PiAkc3RhcnRfbHNuLAorCQknLS1lbmQnID0+ICRl bmRfbHNuLAorCV0sCisJcXIvLi8sCisJJ3J1bnMgd2l0aCBwYXRoIG9wdGlvbiBhbmQgc3Rh cnQgYW5kIGVuZCBsb2NhdGlvbnMnKTsKK2NvbW1hbmRfZmFpbHNfbGlrZSgKKwlbCisJCSdw Z193YWxkdW1wJywKKwkJJy0tcGF0aCcgPT4gJHBhdGgsCisJCSctLXN0YXJ0JyA9PiAkc3Rh cnRfbHNuLAorCV0sCisJcXIvZXJyb3I6IGVycm9yIGluIFdBTCByZWNvcmQgYXQvLAorCSdm YWxsaW5nIG9mZiB0aGUgZW5kIG9mIHRoZSBXQUwgcmVzdWx0cyBpbiBhbiBlcnJvcicpOwor Citjb21tYW5kX2ZhaWxzX2xpa2UoCisJWworCQkncGdfd2FsZHVtcCcsICctLXF1aWV0JywK KwkJJy0tcGF0aCcgPT4gJHBhdGgsCisJCSctLXN0YXJ0JyA9PiAkc3RhcnRfbHNuCisJXSwK Kwlxci9lcnJvcjogZXJyb3IgaW4gV0FMIHJlY29yZCBhdC8sCisJJ2Vycm9ycyBhcmUgc2hv d24gd2l0aCAtLXF1aWV0Jyk7CisKK3Rlc3RfcGdfd2FsZHVtcF9za2lwX2J5dGVzKCRwYXRo LCAkc3RhcnRfbHNuLCAkZW5kX2xzbik7CisKK215IEBsaW5lcyA9IHRlc3RfcGdfd2FsZHVt cCgkcGF0aCwgJHN0YXJ0X2xzbiwgJGVuZF9sc24pOworaXMoZ3JlcCghL15ybWdyOiBcdy8s IEBsaW5lcyksIDAsICdhbGwgb3V0cHV0IGxpbmVzIGFyZSBybWdyIGxpbmVzJyk7CisKK0Bs aW5lcyA9IHRlc3RfcGdfd2FsZHVtcCgkcGF0aCwgJGNvbnRyZWNvcmRfbHNuLCAkZW5kX2xz bik7CitpcyhncmVwKCEvXnJtZ3I6IFx3LywgQGxpbmVzKSwgMCwgJ2FsbCBvdXRwdXQgbGlu ZXMgYXJlIHJtZ3IgbGluZXMnKTsKKwordGVzdF9wZ193YWxkdW1wX3NraXBfYnl0ZXMoJHBh dGgsICRjb250cmVjb3JkX2xzbiwgJGVuZF9sc24pOworCitAbGluZXMgPSB0ZXN0X3BnX3dh bGR1bXAoJHBhdGgsICRzdGFydF9sc24sICRlbmRfbHNuLCAnLS1saW1pdCcgPT4gNik7Citp cyhAbGluZXMsIDYsICdsaW1pdCBvcHRpb24gb2JzZXJ2ZWQnKTsKKworQGxpbmVzID0gdGVz dF9wZ193YWxkdW1wKCRwYXRoLCAkc3RhcnRfbHNuLCAkZW5kX2xzbiwgJy0tZnVsbHBhZ2Un KTsKK2lzKGdyZXAoIS9ecm1ncjouKlxiRlBXXGIvLCBAbGluZXMpLCAwLCAnYWxsIG91dHB1 dCBsaW5lcyBhcmUgRlBXJyk7CisKK0BsaW5lcyA9IHRlc3RfcGdfd2FsZHVtcCgkcGF0aCwg JHN0YXJ0X2xzbiwgJGVuZF9sc24sICctLXN0YXRzJyk7CitsaWtlKCRsaW5lc1swXSwgcXIv V0FMIHN0YXRpc3RpY3MvLCAic3RhdGlzdGljcyBvbiBzdGRvdXQiKTsKK2lzKGdyZXAoL15y bWdyOi8sIEBsaW5lcyksIDAsICdubyBybWdyIGxpbmVzIG91dHB1dCcpOworCitAbGluZXMg PSB0ZXN0X3BnX3dhbGR1bXAoJHBhdGgsICRzdGFydF9sc24sICRlbmRfbHNuLCAnLS1zdGF0 cz1yZWNvcmQnKTsKK2xpa2UoJGxpbmVzWzBdLCBxci9XQUwgc3RhdGlzdGljcy8sICJzdGF0 aXN0aWNzIG9uIHN0ZG91dCIpOworaXMoZ3JlcCgvXnJtZ3I6LywgQGxpbmVzKSwgMCwgJ25v IHJtZ3IgbGluZXMgb3V0cHV0Jyk7CisKK0BsaW5lcyA9IHRlc3RfcGdfd2FsZHVtcCgkcGF0 aCwgJHN0YXJ0X2xzbiwgJGVuZF9sc24sICctLXJtZ3InID0+ICdCdHJlZScpOworaXMoZ3Jl cCghL15ybWdyOiBCdHJlZS8sIEBsaW5lcyksIDAsICdvbmx5IEJ0cmVlIGxpbmVzJyk7CisK K0BsaW5lcyA9IHRlc3RfcGdfd2FsZHVtcCgkcGF0aCwgJHN0YXJ0X2xzbiwgJGVuZF9sc24s ICctLWZvcmsnID0+ICdpbml0Jyk7CitpcyhncmVwKCEvZm9yayBpbml0LywgQGxpbmVzKSwg MCwgJ29ubHkgaW5pdCBmb3JrIGxpbmVzJyk7CisKK0BsaW5lcyA9IHRlc3RfcGdfd2FsZHVt cCgkcGF0aCwgJHN0YXJ0X2xzbiwgJGVuZF9sc24sCisJJy0tcmVsYXRpb24nID0+ICIkZGVm YXVsdF90c19vaWQvJHBvc3RncmVzX2RiX29pZC8kcmVsX3QxX29pZCIpOworaXMoZ3JlcCgh L3JlbCAkZGVmYXVsdF90c19vaWRcLyRwb3N0Z3Jlc19kYl9vaWRcLyRyZWxfdDFfb2lkLywg QGxpbmVzKSwKKwkwLCAnb25seSBsaW5lcyBmb3Igc2VsZWN0ZWQgcmVsYXRpb24nKTsKKwor QGxpbmVzID0gdGVzdF9wZ193YWxkdW1wKAorCSRwYXRoLCAkc3RhcnRfbHNuLCAkZW5kX2xz biwKKwknLS1yZWxhdGlvbicgPT4gIiRkZWZhdWx0X3RzX29pZC8kcG9zdGdyZXNfZGJfb2lk LyRyZWxfaTFhX29pZCIsCisJJy0tYmxvY2snID0+IDEpOworaXMoZ3JlcCghL1xiYmxrIDFc Yi8sIEBsaW5lcyksIDAsICdvbmx5IGxpbmVzIGZvciBzZWxlY3RlZCBibG9jaycpOwogCiBk b25lX3Rlc3RpbmcoKTsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LmM2MTU3MTNlZmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ193YWxkdW1wL3Qv MDAzX2FyY2hpdmUucGwKQEAgLTAsMCArMSwzMjAgQEAKKworIyBDb3B5cmlnaHQgKGMpIDIw MjEtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworIyBUZXN0 IHBnX3dhbGR1bXAncyBhYmlsaXR5IHRvIHJlYWQgV0FMIGZyb20gdGFyIGFyY2hpdmVzLgor Cit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOwordXNlIEN3ZDsK K3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6 OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7Cit1c2UgTGlzdDo6VXRpbCBxdyhzaHVmZmxlKTsK KworbXkgJHRhciA9ICRFTlZ7VEFSfTsKKworaWYgKCFkZWZpbmVkICR0YXIpCit7CisJcGxh biBza2lwX2FsbCA9PiAndGFyIGNvbW1hbmQgaXMgbm90IGF2YWlsYWJsZSc7Cit9CisKK215 ICRub2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdtYWluJyk7Ciskbm9k ZS0+aW5pdDsKKyRub2RlLT5hcHBlbmRfY29uZigKKwkncG9zdGdyZXNxbC5jb25mJywgcXsK K2F1dG92YWN1dW0gPSBvZmYKK2NoZWNrcG9pbnRfdGltZW91dCA9IDFoCisKKyMgZm9yIHN0 YW5kYnlkZXNjCithcmNoaXZlX21vZGU9b24KK2FyY2hpdmVfY29tbWFuZD0nJworCisjIGZv ciBYTE9HX0hFQVBfVFJVTkNBVEUKK3dhbF9sZXZlbD1sb2dpY2FsCit9KTsKKyRub2RlLT5z dGFydDsKKworbXkgKCRzdGFydF9sc24sICRzdGFydF93YWxmaWxlKSA9IHNwbGl0IC9cfC8s CisgICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwlxe1NFTEVDVCBwZ19jdXJyZW50 X3dhbF9pbnNlcnRfbHNuKCksIHBnX3dhbGZpbGVfbmFtZShwZ19jdXJyZW50X3dhbF9pbnNl cnRfbHNuKCkpfQorICApOworCiskbm9kZS0+c2FmZV9wc3FsKAorCSdwb3N0Z3JlcycsIHF7 CistLSBoZWFwLCBidHJlZSwgaGFzaCwgc2VxdWVuY2UKK0NSRUFURSBUQUJMRSB0MSAoYSBp bnQgR0VORVJBVEVEIEFMV0FZUyBBUyBJREVOVElUWSwgYiB0ZXh0KTsKK0NSRUFURSBJTkRF WCBpMWEgT04gdDEgVVNJTkcgYnRyZWUgKGEpOworQ1JFQVRFIElOREVYIGkxYiBPTiB0MSBV U0lORyBoYXNoIChiKTsKK0lOU0VSVCBJTlRPIHQxIFZBTFVFUyAoZGVmYXVsdCwgJ29uZScp LCAoZGVmYXVsdCwgJ3R3bycpOworREVMRVRFIEZST00gdDEgV0hFUkUgYiA9ICdvbmUnOwor VFJVTkNBVEUgdDE7CisKKy0tIGFib3J0CitTVEFSVCBUUkFOU0FDVElPTjsKK0lOU0VSVCBJ TlRPIHQxIFZBTFVFUyAoZGVmYXVsdCwgJ3RocmVlJyk7CitST0xMQkFDSzsKKworLS0gdW5s b2dnZWQvaW5pdCBmb3JrCitDUkVBVEUgVU5MT0dHRUQgVEFCTEUgdDIgKHggaW50KTsKK0NS RUFURSBJTkRFWCBpMiBPTiB0MiBVU0lORyBidHJlZSAoeCk7CitJTlNFUlQgSU5UTyB0MiBT RUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDEwKTsKKworLS0gZ2luCitDUkVBVEUgVEFCTEUg Z2luX2lkeF90YmwgKGlkIGJpZ3NlcmlhbCBQUklNQVJZIEtFWSwgZGF0YSBqc29uYik7CitD UkVBVEUgSU5ERVggZ2luX2lkeCBPTiBnaW5faWR4X3RibCBVU0lORyBnaW4gKGRhdGEpOwor SU5TRVJUIElOVE8gZ2luX2lkeF90YmwKKyAgICBXSVRIIHJhbmRvbV9qc29uIEFTICgKKyAg ICAgICAgU0VMRUNUIGpzb25fb2JqZWN0X2FnZyhrZXksIHRydW5jKHJhbmRvbSgpICogMTAp KSBhcyBqc29uX2RhdGEKKyAgICAgICAgICAgIEZST00gdW5uZXN0KGFycmF5WydhJywgJ2In LCAnYyddKSBhcyB1KGtleSkpCisgICAgICAgICAgU0VMRUNUIGdlbmVyYXRlX3Nlcmllcygx LDUwMCksIGpzb25fZGF0YSBGUk9NIHJhbmRvbV9qc29uOworCistLSBnaXN0LCBzcGdpc3QK K0NSRUFURSBUQUJMRSBnaXN0X2lkeF90YmwgKHAgcG9pbnQpOworQ1JFQVRFIElOREVYIGdp c3RfaWR4IE9OIGdpc3RfaWR4X3RibCBVU0lORyBnaXN0IChwKTsKK0NSRUFURSBJTkRFWCBz cGdpc3RfaWR4IE9OIGdpc3RfaWR4X3RibCBVU0lORyBzcGdpc3QgKHApOworSU5TRVJUIElO VE8gZ2lzdF9pZHhfdGJsIChwKSBWQUxVRVMgKHBvaW50ICcoMSwgMSknKSwgKHBvaW50ICco MywgMiknKSwgKHBvaW50ICcoNiwgMyknKTsKKworLS0gYnJpbgorQ1JFQVRFIFRBQkxFIGJy aW5faWR4X3RibCAoY29sMSBpbnQsIGNvbDIgdGV4dCwgY29sMyB0ZXh0ICk7CitDUkVBVEUg SU5ERVggYnJpbl9pZHggT04gYnJpbl9pZHhfdGJsIFVTSU5HIGJyaW4gKGNvbDEsIGNvbDIs IGNvbDMpIFdJVEggKGF1dG9zdW1tYXJpemU9b24pOworSU5TRVJUIElOVE8gYnJpbl9pZHhf dGJsIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMDApLCAnZHVtbXknLCAnZHVtbXkn OworVVBEQVRFIGJyaW5faWR4X3RibCBTRVQgY29sMiA9ICd1cGRhdGVkJyBXSEVSRSBjb2wx IEJFVFdFRU4gMSBBTkQgNTAwMDsKK1NFTEVDVCBicmluX3N1bW1hcml6ZV9yYW5nZSgnYnJp bl9pZHgnLCAwKTsKK1NFTEVDVCBicmluX2Rlc3VtbWFyaXplX3JhbmdlKCdicmluX2lkeCcs IDApOworCitWQUNVVU07CisKKy0tIGxvZ2ljYWwgbWVzc2FnZQorU0VMRUNUIHBnX2xvZ2lj YWxfZW1pdF9tZXNzYWdlKHRydWUsICdmb28nLCAnYmFyJyk7CisKKy0tIHJlbG1hcAorVkFD VVVNIEZVTEwgcGdfYXV0aGlkOworCistLSBkYXRhYmFzZQorQ1JFQVRFIERBVEFCQVNFIGQx OworRFJPUCBEQVRBQkFTRSBkMTsKK30pOworCitteSAkdGJsc3BjX3BhdGggPSBQb3N0Z3Jl U1FMOjpUZXN0OjpVdGlsczo6dGVtcGRpcl9zaG9ydCgpOworCiskbm9kZS0+c2FmZV9wc3Fs KAorCSdwb3N0Z3JlcycsIHFxeworQ1JFQVRFIFRBQkxFU1BBQ0UgdHMxIExPQ0FUSU9OICck dGJsc3BjX3BhdGgnOworRFJPUCBUQUJMRVNQQUNFIHRzMTsKK30pOworCisjIENvbnN1bWUg YWxsIHJlbWFpbmluZyByb29tIGluIHRoZSBjdXJyZW50IFdBTCBzZWdtZW50LCBsZWF2aW5n IHNwYWNlIGVub3VnaAorIyBvbmx5IGZvciB0aGUgc3RhcnQgb2YgYSBsYXJnaXNoIHJlY29y ZCwgdG8gdGVzdCBjb250cmVjb3JkIGRlY29kaW5nLgorJG5vZGUtPnNhZmVfcHNxbCgKKwkn cG9zdGdyZXMnLCBxeworRE8gJCQKK0RFQ0xBUkUKKyAgICB3YWxfc2Vnc2l6ZSBpbnQgOj0g c2V0dGluZzo6aW50IEZST00gcGdfc2V0dGluZ3MgV0hFUkUgbmFtZSA9ICd3YWxfc2VnbWVu dF9zaXplJzsKKyAgICByZW1haW4gaW50OworICAgIGl0ZXJzICBpbnQgOj0gMDsKK0JFR0lO CisgICAgTE9PUAorICAgICAgICBJTlNFUlQgaW50byB0MShiKQorICAgICAgICBzZWxlY3Qg cmVwZWF0KGVuY29kZShzaGEyNTYoZzo6dGV4dDo6Ynl0ZWEpLCAnaGV4JyksIChyYW5kb20o KSAqIDE1ICsgMSk6OmludCkKKyAgICAgICAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAp IGc7CisKKyAgICAgICAgcmVtYWluIDo9IHdhbF9zZWdzaXplIC0gKHBnX2N1cnJlbnRfd2Fs X2luc2VydF9sc24oKSAtICcwLzAnKSAlIHdhbF9zZWdzaXplOworICAgICAgICBJRiByZW1h aW4gPCAyICogc2V0dGluZzo6aW50IGZyb20gcGdfc2V0dGluZ3Mgd2hlcmUgbmFtZSA9ICdi bG9ja19zaXplJyBUSEVOCisgICAgICAgICAgICBSQUlTRSBsb2cgJ2V4aXRpbmcgYWZ0ZXIg JSBpdGVyYXRpb25zLCAlIGJ5dGVzIHRvIGVuZCBvZiBXQUwgc2VnbWVudCcsIGl0ZXJzLCBy ZW1haW47CisgICAgICAgICAgICBFWElUOworICAgICAgICBFTkQgSUY7CisgICAgICAgIGl0 ZXJzIDo9IGl0ZXJzICsgMTsKKyAgICBFTkQgTE9PUDsKK0VORAorJCQ7Cit9KTsKKworbXkg JGNvbnRyZWNvcmRfbHNuID0KKyAgJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnU0VM RUNUIHBnX2N1cnJlbnRfd2FsX2luc2VydF9sc24oKScpOworJG5vZGUtPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCXFxe1NFTEVDVCBwZ19sb2dpY2FsX2VtaXRfbWVzc2FnZSh0cnVlLCAn dGVzdCAwMjYnLCByZXBlYXQoJ3h5enh6JywgMTIzNDU2KSl9CispOworCitteSAoJGVuZF9s c24sICRlbmRfd2FsZmlsZSkgPSBzcGxpdCAvXHwvLAorICAkbm9kZS0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisJcXtTRUxFQ1QgcGdfY3VycmVudF93YWxfaW5zZXJ0X2xzbigpLCBwZ193 YWxmaWxlX25hbWUocGdfY3VycmVudF93YWxfaW5zZXJ0X2xzbigpKX0KKyAgKTsKKworJG5v ZGUtPnN0b3A7CisKKworc3ViIHRlc3RfcGdfd2FsZHVtcF9za2lwX2J5dGVzCit7CisJbXkg KCRwYXRoLCAkc3RhcnRsc24sICRlbmRsc24pID0gQF87CisKKwlteSAoJHBhcnQxLCAkcGFy dDIpID0gc3BsaXQgcXJ7L30sICRzdGFydGxzbjsKKwlteSAkbHNuMiA9IGhleCAkcGFydDI7 CisJJGxzbjIrKzsKKwlteSAkbmV3X3N0YXJ0ID0gc3ByaW50ZigiJXMvJVgiLCAkcGFydDEs ICRsc24yKTsKKworCW15ICgkc3Rkb3V0LCAkc3RkZXJyKTsKKworCW15ICRyZXN1bHQgPSBJ UEM6OlJ1bjo6cnVuIFsKKwkJJ3BnX3dhbGR1bXAnLAorCQknLS1zdGFydCcgPT4gJG5ld19z dGFydCwKKwkJJy0tZW5kJyA9PiAkZW5kbHNuLAorCQknLS1wYXRoJyA9PiAkcGF0aCwKKwkg IF0sCisJICAnPicgPT4gXCRzdGRvdXQsCisJICAnMj4nID0+IFwkc3RkZXJyOworCW9rKCRy ZXN1bHQsICJydW5zIHdpdGggc3RhcnQgc2VnbWVudCBhbmQgc3RhcnQgTFNOIHNwZWNpZmll ZCIpOworCWxpa2UoJHN0ZGVyciwgcXIvZmlyc3QgcmVjb3JkIGlzIGFmdGVyLywgJ2luZm8g bWVzc2FnZSBwcmludGVkJyk7Cit9CisKK3N1YiB0ZXN0X3BnX3dhbGR1bXAKK3sKKwlsb2Nh bCAkVGVzdDo6QnVpbGRlcjo6TGV2ZWwgPSAkVGVzdDo6QnVpbGRlcjo6TGV2ZWwgKyAxOwor CW15ICgkcGF0aCwgJHN0YXJ0bHNuLCAkZW5kbHNuLCBAb3B0cykgPSBAXzsKKworCW15ICgk c3Rkb3V0LCAkc3RkZXJyKTsKKworCW15ICRyZXN1bHQgPSBJUEM6OlJ1bjo6cnVuIFsKKwkJ J3BnX3dhbGR1bXAnLAorCQknLS1zdGFydCcgPT4gJHN0YXJ0bHNuLAorCQknLS1lbmQnID0+ ICRlbmRsc24sCisJCSctLXBhdGgnID0+ICRwYXRoLAorCQlAb3B0cworCSAgXSwKKwkgICc+ JyA9PiBcJHN0ZG91dCwKKwkgICcyPicgPT4gXCRzdGRlcnI7CisJb2soJHJlc3VsdCwgInBn X3dhbGR1bXAgQG9wdHM6IHJ1bnMgb2siKTsKKwlpcygkc3RkZXJyLCAnJywgInBnX3dhbGR1 bXAgQG9wdHM6IG5vIHN0ZGVyciIpOworCW15IEBsaW5lcyA9IHNwbGl0IC9cbi8sICRzdGRv dXQ7CisJb2soQGxpbmVzID4gMCwgInBnX3dhbGR1bXAgQG9wdHM6IHNvbWUgbGluZXMgYXJl IG91dHB1dCIpOworCXJldHVybiBAbGluZXM7Cit9CisKK3N1YiBnZW5lcmF0ZV9hcmNoaXZl Cit7CisJbXkgKCRhcmNoaXZlLCAkZGlyZWN0b3J5LCAkY29tcHJlc3Npb25fZmxhZ3MpID0g QF87CisKKwlteSBAZmlsZXM7CisJb3BlbmRpciBteSAkZGgsICRkaXJlY3Rvcnkgb3IgZGll ICJvcGVuZGlyOiAkISI7CisJd2hpbGUgKG15ICRlbnRyeSA9IHJlYWRkaXIgJGRoKQorCXsK KwkJbmV4dCBpZiAkZW50cnkgZXEgJy4nIHx8ICRlbnRyeSBlcSAnLi4nOworCQlwdXNoIEBm aWxlcywgJGVudHJ5OworCX0KKwljbG9zZWRpciAkZGg7CisKKwlAZmlsZXMgPSBzaHVmZmxl IEBmaWxlczsKKworCW15ICRjd2QgPSBnZXRjd2Q7CisJY2hkaXIoJGRpcmVjdG9yeSkgfHwg ZGllICJjaGRpcjogJCEiOworCWNvbW1hbmRfb2soWyAkdGFyLCAkY29tcHJlc3Npb25fZmxh Z3MsICRhcmNoaXZlLCBAZmlsZXMgXSwKKwkJImNyZWF0ZSBhcmNoaXZlICRhcmNoaXZlIik7 CisJY2hkaXIoJGN3ZCkgfHwgZGllICJjaGRpcjogJCEiOworfQorCisKK215ICR0bXBfZGly ID0gUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRlbXBkaXJfc2hvcnQoKTsKKworbXkgQHNj ZW5hcmlvcyA9ICgKKwl7CisJCSdwYXRoJyA9PiAiJHRtcF9kaXIvcGdfd2FsLnRhciIsCisJ CSdjb21wcmVzc2lvbl9tZXRob2QnID0+ICdub25lJywKKwkJJ2NvbXByZXNzaW9uX2ZsYWdz JyA9PiAnLWNmJywKKwkJJ2VuYWJsZWQnID0+IDEsCisJfSwKKwl7CisJCSdwYXRoJyA9PiAi JHRtcF9kaXIvcGdfd2FsLnRhci5neiIsCisJCSdjb21wcmVzc2lvbl9tZXRob2QnID0+ICdn emlwJywKKwkJJ2NvbXByZXNzaW9uX2ZsYWdzJyA9PiAnLWN6ZicsCisJCSdlbmFibGVkJyA9 PiBjaGVja19wZ19jb25maWcoIiNkZWZpbmUgSEFWRV9MSUJaIDEiKSwKKwl9KTsKKworZm9y IG15ICRzY2VuYXJpbyAoQHNjZW5hcmlvcykKK3sKKwlteSAkcGF0aCA9ICRzY2VuYXJpby0+ eydwYXRoJ307CisJbXkgJG1ldGhvZCA9ICRzY2VuYXJpby0+eydjb21wcmVzc2lvbl9tZXRo b2QnfTsKKworICBTS0lQOgorCXsKKwkJc2tpcCAiJG1ldGhvZCBjb21wcmVzc2lvbiBub3Qg c3VwcG9ydGVkIGJ5IHRoaXMgYnVpbGQiLCAxCisJCSAgaWYgISRzY2VuYXJpby0+eydlbmFi bGVkJ307CisKKwkJZ2VuZXJhdGVfYXJjaGl2ZSgKKwkJCSRwYXRoLAorCQkJJG5vZGUtPmRh dGFfZGlyIC4gJy9wZ193YWwnLAorCQkJJHNjZW5hcmlvLT57J2NvbXByZXNzaW9uX2ZsYWdz J30pOworCisJCWNvbW1hbmRfZmFpbHNfbGlrZSgKKwkJCVsgJ3BnX3dhbGR1bXAnLCAnLS1w YXRoJyA9PiAkcGF0aCBdLAorCQkJcXIvZXJyb3I6IG5vIHN0YXJ0IFdBTCBsb2NhdGlvbiBn aXZlbi8sCisJCQkiJG1ldGhvZDogcGF0aCBvcHRpb24gcmVxdWlyZXMgc3RhcnQgbG9jYXRp b24iKTsKKwkJY29tbWFuZF9saWtlKAorCQkJWworCQkJCSdwZ193YWxkdW1wJywKKwkJCQkn LS1wYXRoJyA9PiAkcGF0aCwKKwkJCQknLS1zdGFydCcgPT4gJHN0YXJ0X2xzbiwKKwkJCQkn LS1lbmQnID0+ICRlbmRfbHNuLAorCQkJXSwKKwkJCXFyLy4vLAorCQkJIiRtZXRob2Q6IHJ1 bnMgd2l0aCBwYXRoIG9wdGlvbiBhbmQgc3RhcnQgYW5kIGVuZCBsb2NhdGlvbnMiKTsKKwkJ Y29tbWFuZF9mYWlsc19saWtlKAorCQkJWworCQkJCSdwZ193YWxkdW1wJywKKwkJCQknLS1w YXRoJyA9PiAkcGF0aCwKKwkJCQknLS1zdGFydCcgPT4gJHN0YXJ0X2xzbiwKKwkJCV0sCisJ CQlxci9lcnJvcjogZXJyb3IgaW4gV0FMIHJlY29yZCBhdC8sCisJCQkiJG1ldGhvZDogZmFs bGluZyBvZmYgdGhlIGVuZCBvZiB0aGUgV0FMIHJlc3VsdHMgaW4gYW4gZXJyb3IiKTsKKwor CQljb21tYW5kX2ZhaWxzX2xpa2UoCisJCQlbCisJCQkJJ3BnX3dhbGR1bXAnLCAnLS1xdWll dCcsCisJCQkJJy0tcGF0aCcgPT4gJHBhdGgsCisJCQkJJy0tc3RhcnQnID0+ICRzdGFydF9s c24KKwkJCV0sCisJCQlxci9lcnJvcjogZXJyb3IgaW4gV0FMIHJlY29yZCBhdC8sCisJCQki JG1ldGhvZDogZXJyb3JzIGFyZSBzaG93biB3aXRoIC0tcXVpZXQiKTsKKworCQl0ZXN0X3Bn X3dhbGR1bXBfc2tpcF9ieXRlcygkcGF0aCwgJHN0YXJ0X2xzbiwgJGVuZF9sc24pOworCisJ CW15IEBsaW5lcyA9IHRlc3RfcGdfd2FsZHVtcCgkcGF0aCwgJHN0YXJ0X2xzbiwgJGVuZF9s c24pOworCQlpcyhncmVwKCEvXnJtZ3I6IFx3LywgQGxpbmVzKSwKKwkJCTAsICIkbWV0aG9k OiBhbGwgb3V0cHV0IGxpbmVzIGFyZSBybWdyIGxpbmVzIik7CisKKwkJQGxpbmVzID0gdGVz dF9wZ193YWxkdW1wKCRwYXRoLCAkY29udHJlY29yZF9sc24sICRlbmRfbHNuKTsKKwkJaXMo Z3JlcCghL15ybWdyOiBcdy8sIEBsaW5lcyksCisJCQkwLCAiJG1ldGhvZDogY29udHJlY29y ZCAtIGFsbCBvdXRwdXQgbGluZXMgYXJlIHJtZ3IgbGluZXMiKTsKKworCQl0ZXN0X3BnX3dh bGR1bXBfc2tpcF9ieXRlcygkcGF0aCwgJGNvbnRyZWNvcmRfbHNuLCAkZW5kX2xzbik7CisK KwkJQGxpbmVzID0gdGVzdF9wZ193YWxkdW1wKCRwYXRoLCAkc3RhcnRfbHNuLCAkZW5kX2xz biwgJy0tbGltaXQnID0+IDYpOworCQlpcyhAbGluZXMsIDYsICIkbWV0aG9kOiBsaW1pdCBv cHRpb24gb2JzZXJ2ZWQiKTsKKworCQlAbGluZXMgPSB0ZXN0X3BnX3dhbGR1bXAoJHBhdGgs ICRzdGFydF9sc24sICRlbmRfbHNuLCAnLS1mdWxscGFnZScpOworCQlpcyhncmVwKCEvXnJt Z3I6LipcYkZQV1xiLywgQGxpbmVzKSwKKwkJCTAsICIkbWV0aG9kOiBhbGwgb3V0cHV0IGxp bmVzIGFyZSBGUFciKTsKKworCQlAbGluZXMgPSB0ZXN0X3BnX3dhbGR1bXAoJHBhdGgsICRz dGFydF9sc24sICRlbmRfbHNuLCAnLS1zdGF0cycpOworCQlsaWtlKCRsaW5lc1swXSwgcXIv V0FMIHN0YXRpc3RpY3MvLCAiJG1ldGhvZDogc3RhdGlzdGljcyBvbiBzdGRvdXQiKTsKKwkJ aXMoZ3JlcCgvXnJtZ3I6LywgQGxpbmVzKSwgMCwgIiRtZXRob2Q6IG5vIHJtZ3IgbGluZXMg b3V0cHV0Iik7CisKKwkJQGxpbmVzID0KKwkJICB0ZXN0X3BnX3dhbGR1bXAoJHBhdGgsICRz dGFydF9sc24sICRlbmRfbHNuLCAnLS1zdGF0cz1yZWNvcmQnKTsKKwkJbGlrZSgkbGluZXNb MF0sIHFyL1dBTCBzdGF0aXN0aWNzLywKKwkJCSIkbWV0aG9kOiBzdGF0cz1yZWNvcmQgb24g c3Rkb3V0Iik7CisJCWlzKGdyZXAoL15ybWdyOi8sIEBsaW5lcyksCisJCQkwLCAiJG1ldGhv ZDogbm8gcm1nciBsaW5lcyB3aXRoIHN0YXRzPXJlY29yZCIpOworCisJCUBsaW5lcyA9CisJ CSAgdGVzdF9wZ193YWxkdW1wKCRwYXRoLCAkc3RhcnRfbHNuLCAkZW5kX2xzbiwgJy0tcm1n cicgPT4gJ0J0cmVlJyk7CisJCWlzKGdyZXAoIS9ecm1ncjogQnRyZWUvLCBAbGluZXMpLCAw LCAiJG1ldGhvZDogb25seSBCdHJlZSBsaW5lcyIpOworCisJCUBsaW5lcyA9CisJCSAgdGVz dF9wZ193YWxkdW1wKCRwYXRoLCAkc3RhcnRfbHNuLCAkZW5kX2xzbiwgJy0tZm9yaycgPT4g J2luaXQnKTsKKwkJaXMoZ3JlcCghL2ZvcmsgaW5pdC8sIEBsaW5lcyksIDAsICIkbWV0aG9k OiBvbmx5IGluaXQgZm9yayBsaW5lcyIpOworCisJCSMgQ2xlYW51cC4KKwkJdW5saW5rICRw YXRoOworCX0KK30KKworZG9uZV90ZXN0aW5nKCk7Cg== --------------QBiPm97TtTa3QyiKnHig0Cdj Content-Type: text/plain; charset=UTF-8; name="cf5955-docs.patch.no-cfbot" Content-Disposition: attachment; filename="cf5955-docs.patch.no-cfbot" Content-Transfer-Encoding: base64 RnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgRHVuc3RhbiA8YW5kcmV3QGR1bnNsYW5l Lm5ldD4KRGF0ZTogVHVlLCAzIE1hciAyMDI2IDAwOjAwOjAwICswMDAwClN1YmplY3Q6IFtQ QVRDSF0gRml4IGRvY3VtZW50YXRpb24gZm9yIHBnX3dhbGR1bXAgdGFyIGFyY2hpdmUgc3Vw cG9ydAoKVHdvIGRvY3VtZW50YXRpb24gaXNzdWVzIHdpdGggdGhlIHRhciBhcmNoaXZlIHJl YWRpbmcgZmVhdHVyZToKCi0gcGdfd2FsZHVtcC5zZ21sOiBXaGVuIHJlYWRpbmcgV0FMIGZy b20gYSB0YXIgYXJjaGl2ZSB3aXRoCiAgb3V0LW9mLW9yZGVyIHNlZ21lbnRzLCBwZ193YWxk dW1wIHNwaWxscyB0byB0ZW1wb3JhcnkgZmlsZXMuICBUTVBESVIKICBjb250cm9scyB3aGVy ZSB0aG9zZSBmaWxlcyBhcmUgY3JlYXRlZCwgYnV0IHRoaXMgd2FzIG5vdCBkb2N1bWVudGVk CiAgaW4gdGhlIEVudmlyb25tZW50IHNlY3Rpb24uCgotIHBnX3ZlcmlmeWJhY2t1cC5zZ21s OiBUaGUgLS13YWwtcGF0aCBvcHRpb24gZGVzY3JpcHRpb24gc3RpbGwgb25seQogIHNhaWQg ImRpcmVjdG9yeSIgZXZlbiB0aG91Z2ggaXQgbm93IGFsc28gYWNjZXB0cyB0YXIgYXJjaGl2 ZXMuCi0tLQogZG9jL3NyYy9zZ21sL3JlZi9wZ192ZXJpZnliYWNrdXAuc2dtbCB8ICA3ICsr KystLS0KIGRvYy9zcmMvc2dtbC9yZWYvcGdfd2FsZHVtcC5zZ21sICAgICAgfCAxMSArKysr KysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfdmVyaWZ5YmFja3VwLnNn bWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX3ZlcmlmeWJhY2t1cC5zZ21sCmluZGV4IDE2YjUw YjVhNGRmLi4xNjk1Y2ZlOTFjOCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9wZ192 ZXJpZnliYWNrdXAuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX3ZlcmlmeWJhY2t1 cC5zZ21sCkBAIC0yNjEsOSArMjYxLDEwIEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgog ICAgICAgPHRlcm0+PG9wdGlvbj4tLXdhbC1wYXRoPTxyZXBsYWNlYWJsZSBjbGFzcz0icGFy YW1ldGVyIj5wYXRoPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CiAgICAgICA8bGlz dGl0ZW0+CiAgICAgICAgPHBhcmE+Ci0gICAgICAgIFRyeSB0byBwYXJzZSBXQUwgZmlsZXMg c3RvcmVkIGluIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5LCByYXRoZXIgdGhhbgotICAgICAg ICBpbiA8bGl0ZXJhbD5wZ193YWw8L2xpdGVyYWw+LiBUaGlzIG1heSBiZSB1c2VmdWwgaWYg dGhlIGJhY2t1cCBpcwotICAgICAgICBzdG9yZWQgaW4gYSBzZXBhcmF0ZSBsb2NhdGlvbiBm cm9tIHRoZSBXQUwgYXJjaGl2ZS4KKyAgICAgICAgVHJ5IHRvIHBhcnNlIFdBTCBmaWxlcyBz dG9yZWQgaW4gdGhlIHNwZWNpZmllZCBkaXJlY3Rvcnkgb3IgdGFyCisgICAgICAgIGFyY2hp dmUsIHJhdGhlciB0aGFuIGluIDxsaXRlcmFsPnBnX3dhbDwvbGl0ZXJhbD4uIFRoaXMgbWF5 IGJlCisgICAgICAgIHVzZWZ1bCBpZiB0aGUgYmFja3VwIGlzIHN0b3JlZCBpbiBhIHNlcGFy YXRlIGxvY2F0aW9uIGZyb20gdGhlIFdBTAorICAgICAgICBhcmNoaXZlLgogICAgICAgIDwv cGFyYT4KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgpkaWZmIC0t Z2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ193YWxkdW1wLnNnbWwgYi9kb2Mvc3JjL3NnbWwv cmVmL3BnX3dhbGR1bXAuc2dtbAppbmRleCBiMzYzMjNkZGU5Mi4uOWJiYjRiZDU3NzIgMTAw NjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfd2FsZHVtcC5zZ21sCisrKyBiL2RvYy9z cmMvc2dtbC9yZWYvcGdfd2FsZHVtcC5zZ21sCkBAIC0zOTEsNiArMzkxLDE3IEBAIFBvc3Rn cmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICA8L3BhcmE+CiAgICAgPC9saXN0aXRlbT4KICAg IDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPjxlbnZh cj5UTVBESVI8L2VudmFyPjwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgor ICAgICAgRGlyZWN0b3J5IGluIHdoaWNoIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZXMgd2hl biByZWFkaW5nIFdBTCBmcm9tIGEKKyAgICAgIHRhciBhcmNoaXZlIHdpdGggb3V0LW9mLW9y ZGVyIHNlZ21lbnQgZmlsZXMuIElmIG5vdCBzZXQsIHRoZSB0ZW1wb3JhcnkKKyAgICAgIGRp cmVjdG9yeSBpcyBjcmVhdGVkIHdpdGhpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIHRh ciBhcmNoaXZlLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlz dGVudHJ5PgogICA8L3ZhcmlhYmxlbGlzdD4KICA8L3JlZnNlY3QxPgogCg== --------------QBiPm97TtTa3QyiKnHig0Cdj Content-Type: text/plain; charset=UTF-8; name="cf5955-fixes.patch.no-cfbot" Content-Disposition: attachment; filename="cf5955-fixes.patch.no-cfbot" Content-Transfer-Encoding: base64 RnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgRHVuc3RhbiA8YW5kcmV3QGR1bnNsYW5l Lm5ldD4KRGF0ZTogVHVlLCAzIE1hciAyMDI2IDAwOjAwOjAwICswMDAwClN1YmplY3Q6IFtQ QVRDSF0gRml4IGJ1Z3MgaW4gcGdfd2FsZHVtcCB0YXIgYXJjaGl2ZSBzdXBwb3J0CgpGaXgg c2V2ZXJhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlIHBnX3dhbGR1bXAgYXJjaGl2ZSBXQUwg cmVhZGluZwpmZWF0dXJlOgoKLSBwZ193YWxkdW1wLmM6IFRoZSBlcnJvciBwYXRoIGZvciB2 ZXJpZnlfZGlyZWN0b3J5KCkgcHJpbnRlZCB3YWxkaXIKICAod2hpY2ggaXMgTlVMTCB3aGVu IC0tcGF0aCBpcyB1c2VkKSBpbnN0ZWFkIG9mIHdhbHBhdGguCgotIGFyY2hpdmVfd2FsZHVt cC5jOiBUaGUgZXJyb3IgbWVzc2FnZSBmb3Igc2hvcnQgcmVhZHMgaGFkIGFuIG9wZXJhdG9y CiAgcHJlY2VkZW5jZSBidWc6IChsb25nIGxvbmcgaW50KSBjb3VudCAtIG5ieXRlcyBjYXN0 IG9ubHkgY291bnQsIG5vdAogIHRoZSBzdWJ0cmFjdGlvbiByZXN1bHQuICBBbHNvIHJlcG9y dGVkIG5ieXRlcyAodGhlIHJlcXVlc3RlZCBhbW91bnQpCiAgaW5zdGVhZCBvZiBjb3VudCAo dGhlIHRvdGFsIGZpbGUgc2l6ZSkgZm9yIHRoZSAib2YiIHBvcnRpb24uCgotIGFyY2hpdmVf d2FsZHVtcC5jOiBUaGUgImlnbm9yaW5nIGR1cGxpY2F0ZSBXQUwiIGNvZGUgcGF0aCBsZWFr ZWQKICBmbmFtZSAoYWxsb2NhdGVkIHZpYSBwbnN0cmR1cC9wYWxsb2MpLiAgQWxzbyBjaGFu Z2VkIHRoZSBleGlzdGluZwogIGZyZWUoZm5hbWUpIHRvIHBmcmVlKGZuYW1lKSBmb3IgY29u c2lzdGVuY3kuCgotIHBnX3ZlcmlmeWJhY2t1cC5jOiBUaGUgcmVuYW1lIGZyb20gLS13YWwt ZGlyZWN0b3J5IHRvIC0td2FsLXBhdGgKICBkaWRuJ3QgcHJlc2VydmUgdGhlIG9sZCBzcGVs bGluZyBhcyBhIGJhY2t3YXJkLWNvbXBhdGlibGUgYWxpYXMuCgotIHBnX3ZlcmlmeWJhY2t1 cC5jOiBGaXggZG91YmxlIHNwYWNlIGJlZm9yZSAiT3IiIGluIC0td2FsLXBhdGgKICBlcnJv ciBoaW50IG1lc3NhZ2UuCi0tLQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ192ZXJpZnliYWNr dXAvcGdfdmVyaWZ5YmFja3VwLmMgYi9zcmMvYmluL3BnX3ZlcmlmeWJhY2t1cC9wZ192ZXJp ZnliYWNrdXAuYwppbmRleCA5MzVhYjhmYWZhOC4uYjBiNzY0OTEzY2YgMTAwNjQ0Ci0tLSBh L3NyYy9iaW4vcGdfdmVyaWZ5YmFja3VwL3BnX3ZlcmlmeWJhY2t1cC5jCisrKyBiL3NyYy9i aW4vcGdfdmVyaWZ5YmFja3VwL3BnX3ZlcmlmeWJhY2t1cC5jCkBAIC0xMzEsNiArMTMxLDcg QEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXsicXVpZXQiLCBub19hcmd1bWVu dCwgTlVMTCwgJ3EnfSwKIAkJeyJza2lwLWNoZWNrc3VtcyIsIG5vX2FyZ3VtZW50LCBOVUxM LCAncyd9LAogCQl7IndhbC1wYXRoIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICd3J30s CisJCXsid2FsLWRpcmVjdG9yeSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAndyd9LAog CQl7TlVMTCwgMCwgTlVMTCwgMH0KIAl9OwogCkBAIC0zNzYsNyArMzc3LDcgQEAgbWFpbihp bnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCWVsc2UKIAkJewogCQkJcGdfbG9nX2Vycm9yKCJX QUwgYXJjaGl2ZSBub3QgZm91bmQiKTsKLQkJCXBnX2xvZ19lcnJvcl9oaW50KCJTcGVjaWZ5 IHRoZSBjb3JyZWN0IHBhdGggdXNpbmcgdGhlIG9wdGlvbiAtdy8tLXdhbC1wYXRoLiAgIgor CQkJcGdfbG9nX2Vycm9yX2hpbnQoIlNwZWNpZnkgdGhlIGNvcnJlY3QgcGF0aCB1c2luZyB0 aGUgb3B0aW9uIC13Ly0td2FsLXBhdGguICIKIAkJCQkJCQkgICJPciB5b3UgbXVzdCB1c2Ug LW4vLS1uby1wYXJzZS13YWwgd2hlbiB2ZXJpZnlpbmcgYSB0YXItZm9ybWF0IGJhY2t1cC4i KTsKIAkJCWV4aXQoMSk7CiAJCX0KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfd2FsZHVtcC9h cmNoaXZlX3dhbGR1bXAuYyBiL3NyYy9iaW4vcGdfd2FsZHVtcC9hcmNoaXZlX3dhbGR1bXAu YwppbmRleCBjNWE0NDg1YjViMS4uMTQ3OWVmZTYxZjUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4v cGdfd2FsZHVtcC9hcmNoaXZlX3dhbGR1bXAuYworKysgYi9zcmMvYmluL3BnX3dhbGR1bXAv YXJjaGl2ZV93YWxkdW1wLmMKQEAgLTM0NCw4ICszNDQsOCBAQCByZWFkX2FyY2hpdmVfd2Fs X3BhZ2UoWExvZ0R1bXBQcml2YXRlICpwcml2YXRlSW5mbywgWExvZ1JlY1B0ciB0YXJnZXRQ YWdlUHRyLAogCQkJCXJlYWRfYXJjaGl2ZV9maWxlKHByaXZhdGVJbmZvLCBSRUFEX0NIVU5L X1NJWkUpID09IDApCiAJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCByZWFkIGZpbGUgXCIlc1wi IGZyb20gYXJjaGl2ZSBcIiVzXCI6IHJlYWQgJWxsZCBvZiAlbGxkIiwKIAkJCQkJCSBmbmFt ZSwgcHJpdmF0ZUluZm8tPmFyY2hpdmVfbmFtZSwKLQkJCQkJCSAobG9uZyBsb25nIGludCkg Y291bnQgLSBuYnl0ZXMsCi0JCQkJCQkgKGxvbmcgbG9uZyBpbnQpIG5ieXRlcyk7CisJCQkJ CQkgKGxvbmcgbG9uZyBpbnQpIChjb3VudCAtIG5ieXRlcyksCisJCQkJCQkgKGxvbmcgbG9u ZyBpbnQpIGNvdW50KTsKIAkJfQogCX0KIApAQCAtNjY0LDcgKzY2NCw3IEBAIGFzdHJlYW1l cl93YWxkdW1wX2NvbnRlbnQoYXN0cmVhbWVyICpzdHJlYW1lciwgYXN0cmVhbWVyX21lbWJl ciAqbWVtYmVyLAogCQkJCQkJcHJpdmF0ZUluZm8tPnN0YXJ0X3NlZ25vID4gc2Vnbm8gfHwK IAkJCQkJCXByaXZhdGVJbmZvLT5lbmRfc2Vnbm8gPCBzZWdubykKIAkJCQkJewotCQkJCQkJ ZnJlZShmbmFtZSk7CisJCQkJCQlwZnJlZShmbmFtZSk7CiAJCQkJCQlicmVhazsKIAkJCQkJ fQogCQkJCX0KQEAgLTY4MCw2ICs2ODAsNyBAQCBhc3RyZWFtZXJfd2FsZHVtcF9jb250ZW50 KGFzdHJlYW1lciAqc3RyZWFtZXIsIGFzdHJlYW1lcl9tZW1iZXIgKm1lbWJlciwKIAkJCQl7 CiAJCQkJCXBnX2xvZ193YXJuaW5nKCJpZ25vcmluZyBkdXBsaWNhdGUgV0FMIFwiJXNcIiBm b3VuZCBpbiBhcmNoaXZlIFwiJXNcIiIsCiAJCQkJCQkJCSAgIG1lbWJlci0+cGF0aG5hbWUs IHByaXZhdGVJbmZvLT5hcmNoaXZlX25hbWUpOworCQkJCQlwZnJlZShmbmFtZSk7CiAJCQkJ CWJyZWFrOwogCQkJCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ193YWxkdW1wL3BnX3dh bGR1bXAuYyBiL3NyYy9iaW4vcGdfd2FsZHVtcC9wZ193YWxkdW1wLmMKaW5kZXggMTE0OTY5 MjE3ZDguLjRiNDM4YjUzZWFkIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3dhbGR1bXAvcGdf d2FsZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfd2FsZHVtcC9wZ193YWxkdW1wLmMKQEAgLTEy MjMsNyArMTIyMyw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkvKiB2YWxp ZGF0ZSBwYXRoIHBvaW50cyB0byBkaXJlY3RvcnkgKi8KIAkJZWxzZSBpZiAoIXZlcmlmeV9k aXJlY3Rvcnkod2FscGF0aCkpCiAJCXsKLQkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IG9w ZW4gZGlyZWN0b3J5IFwiJXNcIjogJW0iLCB3YWxkaXIpOworCQkJcGdfbG9nX2Vycm9yKCJj b3VsZCBub3Qgb3BlbiBkaXJlY3RvcnkgXCIlc1wiOiAlbSIsIHdhbHBhdGgpOwogCQkJZ290 byBiYWRfYXJndW1lbnQ7CiAJCX0KIAl9Cg== --------------QBiPm97TtTa3QyiKnHig0Cdj--