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 1vJJ9i-000jIp-25 for pgsql-hackers@arkaria.postgresql.org; Wed, 12 Nov 2025 22:17:33 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vJJ9g-00EtZi-1K for pgsql-hackers@arkaria.postgresql.org; Wed, 12 Nov 2025 22:17:32 +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 1vJJ9f-00EtYY-34 for pgsql-hackers@lists.postgresql.org; Wed, 12 Nov 2025 22:17:32 +0000 Received: from mail-yx1-xb12c.google.com ([2607:f8b0:4864:20::b12c]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vJJ9d-007Q63-0S for pgsql-hackers@postgresql.org; Wed, 12 Nov 2025 22:17:31 +0000 Received: by mail-yx1-xb12c.google.com with SMTP id 956f58d0204a3-640f88b8613so122214d50.2 for ; Wed, 12 Nov 2025 14:17:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762985847; x=1763590647; darn=postgresql.org; h=in-reply-to:content-language:references:cc:to:from:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=MmdDTKK9Jnthx8yEqsG9CNZu7QeRgDAl63Txiow6rNM=; b=Lrrw+sBlGkmHf/wo/BpeYTOTJHDcR6prCxt4TFiYLnLSgBQk9Ht1AfKZwwr6sYbvTS 2Hp+JpID/dnBJQZRfa2JElNjoBFq/IBniD3ZJlm3b574PKMSBip/32DPT+rorZz6iwXX Pr9ZC2BKtqOHaRhoru/BiXE4Fdq7f4PptQRs288KaVZ//s5JKkDimSd0zeyR2K4LU935 Bvh2rOJPZ0uo9aANbXaSwkSDHgonO58+rKQbrNUAHzIG1TPMN8N6Zk+d+g8q2ZTxDr6+ 1oTSv0saeeA4Q4A3394BUmJnPEAMHjTfGCfv2oPGn9fqYYUF0e2lxklYrdIp1IJBvwc6 /P/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762985847; x=1763590647; h=in-reply-to:content-language:references:cc:to:from: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=MmdDTKK9Jnthx8yEqsG9CNZu7QeRgDAl63Txiow6rNM=; b=iJaADu1ITuyZau3gwTbh8R5oelfHaCLUf9Ii1coFCKH4EQGCkYoiRHnkAel70Tq626 7OCwhYFHB4ZGu9sr1X1nfzKJ5zI29hFE7CkE5DJvsdvD0/SPZKD10WA+vfR7DvJNF3XD SkWvSAyDMp3xwGuNo7iAfoDm21h9zGf03cUlyCbrX2kj4LK+QaF79GofGfpB+ZwSqriD OaLC4q4NZc2yomYLZe6X0aTksn1BFQ1ffnSl/cPat771uX1wri6m8gX47FaMTh8Kr4St axgwR5mLwLaTWEgZmUblQH3kcJmtzvlAfk/jQcEpxoA1LZoaRqT9f1qEzgyLuYJVnxWs mu+w== X-Gm-Message-State: AOJu0YzuCvtobl2EbWMoHx2DUr4L12aXNiPdRIkdop0h7VbVon6YZWPm lITxK7Cm8L3bENs0MetwoqbiFf3WiVvQuFrVGwlZ0I/b51WV29cYFJS7nCQjx4ga X-Gm-Gg: ASbGnctPeMS8W34wMJmxKjlr9wk8A8Sq5m98IbAh4N6iKqW2JNykbGEa6m4vhNYB9HX XKdXG1LdnkenQVcDNVZiNN9Z40I/5tGD38gCBQMEGEx56OpNwzP6ikyfC06m9zslrqA0+75Fpgd cDA7l0ALp/p6Y3xtLSoSUnLzLiVXJNM2/iFRehT4LLtvpt1kw8cqnRR4uZkD9mHZmTW2/5hk6d0 jELOh9Qa+4jZ0QxgenIPGzcMZKlsukEnhnIj4P8yXhHVCrhQmZi333xQU1S1Sj1cj0Gd5jV85YG hFSOHH58lpY9YUrI0qz6XyCT0ZtjdaRNxEBKOrcGCtmH2qDfEvDy1i8m+AY+QfN+LUTX/t9q6Sl 4r/72NgGRZvkywlI3t7iirWBETnON0HUwKsALtnlZBdZuKsjF+aQhnKEPufA7L91KJ2SG+90N86 xFToMUEWO6F67LKwTeICHDwrUsssMw9n/PXuuSAHN6GvLvs3Qzn399GA== X-Google-Smtp-Source: AGHT+IGk5j1LXelt4+uMnIPIQeZJ3GyKJlGY5NTPsTAG/WVHGyjmnvBehNYwRE4nQPoi0AJ/PpcOPg== X-Received: by 2002:a05:690e:418b:b0:63f:bcec:35d with SMTP id 956f58d0204a3-64101a9a94fmr3766569d50.17.1762985846861; Wed, 12 Nov 2025 14:17:26 -0800 (PST) Received: from ?IPV6:2600:1700:8952:80:3182:f0f5:c3cb:a6c1? ([2600:1700:8952:80:3182:f0f5:c3cb:a6c1]) by smtp.gmail.com with ESMTPSA id 00721157ae682-7882219b799sm845547b3.61.2025.11.12.14.17.25 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 12 Nov 2025 14:17:25 -0800 (PST) Content-Type: multipart/mixed; boundary="------------YpSYk09FL4m0QmqxchMArFG1" Message-ID: Date: Wed, 12 Nov 2025 16:17:21 -0600 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] O_CLOEXEC not honored on Windows - handle inheritance chain From: Bryan Green To: Thomas Munro Cc: pgsql-hackers References: <7f6779d5-7a0e-44c5-a85f-b4ef265db766@gmail.com> <35f9236e-95d8-4f31-ac6b-ec54b7de4bac@gmail.com> <7412f694-7c57-41e5-ae37-71136070b0da@gmail.com> Content-Language: en-US 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. --------------YpSYk09FL4m0QmqxchMArFG1 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On 11/12/2025 4:10 PM, Bryan Green wrote: > On 11/11/2025 8:34 PM, Thomas Munro wrote: >> On Wed, Nov 12, 2025 at 2:01 PM Bryan Green wrote: >>> [v3] >> >> "The original commit included a comment suggesting that our open() >> replacement doesn't create inheritable handles, but it appears this >> may have been based on a misunderstanding of the code path. In >> practice, the code was creating inheritable handles in all cases." >> >> s/it appears this may have been been/was/ :-) >> > > Changed. > >> "To fix, define O_CLOEXEC to a nonzero value (0x80000, in the private >> use range for open() flags). Then honor it in pgwin32_open_handle()" >> > > Removed. >> Out of date, maybe skip mentioning the value in the commit message? >> Maybe add a note here about the back-branches preserving existing >> values and master cleaning up? Do you happen to have a fixup that >> supplies the difference in the back-branches so we can see it passing >> in CI? >> > > I have attached a back-patch for v16-v18. > >> + * Note: We could instead use SetHandleInformation() after CreateFile() to >> + * clear HANDLE_FLAG_INHERIT, but setting bInheritHandle=FALSE is simpler >> + * and achieves the same result. >> + */ >> >> It also wouldn't be thread-safe. That is meaningful today for >> frontend programs (and hopefully some day soon also in the backend). >> >> + sa.bInheritHandle = (fileFlags & O_CLOEXEC) ? FALSE : TRUE; >> >> Just out of sheer curiosity, I often see gratuitous FALSE and TRUE in >> Windowsian code, not false and true and not reduced to eg !(fileFlags >> & O_CLOEXEC). Is that a code convention thing from somewhere in >> Windows-land? >> > > Yes, old habits die hard. I learned this pattern on Windows. > Interestingly, enough when I am not on Windows I write the way you suggest. > >> +++ b/src/test/modules/test_cloexec/test_cloexec.c >> >> I like the test. Very helpful for people reliant on CI for Windows coverage. >> >> Independently of all this, and just on the off-chance that it might be >> interesting to you in future, I have previously tried to write tests >> for our whole Windows filesystem shim layer and found lots of bugs and >> understood lots of quirks that way, but never got it to be good enough >> for inclusion in the tree: >> >> https://www.postgresql.org/message-id/flat/CA%2BhUKG%2BajSQ_8eu2AogTncOnZ5me2D-Cn66iN_-wZnRjLN%2Bicg%40mail.gmail.com >> > > I shall take a look. > >> There is some overlap with several of your recent patches, as I was >> testing some of the same wrappers. One of the main things we've >> battled with in this project is the whole asynchronous-unlink thing, >> and generally the NT/VMS file locking concept which can't quite be >> entirely emulated away, and that was one of my main focuses there >> after we got CI and started debugging the madness. Doing so revealed >> a bunch of interesting differences in Windows versions and file >> systems, and to this day we don't really have a project policy on >> which Windows filesystems PostgreSQL supports (cf your mention of >> needing NTFS for sparse files in one of your other threads, though I >> can't imagine that ReFS AKA DevDrive doesn't have those too being a >> COW system). >> >> Speaking of file I/O, and just as an FYI, I have a bunch of >> semi-working unfinished patches that bring true scatter/gather I/O >> (instead of the simple looping fallback in pg_preadv()) and native >> async I/O (for files, but actually also pipes and sockets but let me >> stick to talking about files for now) to Windows (traditional >> OVERLAPPED and/or IoRing.h, neither can do everything we need would >> you believe). Development via trial-by-CI from the safety of my Unix >> box is slow and painful going, but... let's say a real Windows >> programmer with a systems programming bent showed up and were >> interested in this stuff, I would be more than happy to write down >> everything I think I know about those subjects and post the unfinished >> work and then I bet development would go fast... just sayin'. > > I would absolutely love to read everything you think you know about > those subjects and contribute to the work. > > Corrected master patch and back patch for v16-v18. -- Bryan Green EDB: https://www.enterprisedb.com --------------YpSYk09FL4m0QmqxchMArFG1 Content-Type: text/plain; charset=UTF-8; name="v4-0001-Fix-O_CLOEXEC-flag-handling-in-Windows-port.patch" Content-Disposition: attachment; filename*0="v4-0001-Fix-O_CLOEXEC-flag-handling-in-Windows-port.patch" Content-Transfer-Encoding: base64 RnJvbSA0NzM4YzRkOGNjOTFkNWY5ZDJkNzFiZjY4MjliYzk0MzdlMjcyOGVkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBCcnlhbiBHcmVlbiA8ZGJyeWFuLmdyZWVuQGdtYWls LmNvbT4KRGF0ZTogRnJpLCAzMSBPY3QgMjAyNSAxMDoxMTozMCAtMDYwMApTdWJqZWN0OiBb UEFUQ0ggdjRdIEZpeCBPX0NMT0VYRUMgZmxhZyBoYW5kbGluZyBpbiBXaW5kb3dzIHBvcnQu CgpQb3N0Z3JlU1FMJ3Mgc3JjL3BvcnQvb3Blbi5jIGhhcyBhbHdheXMgc2V0IGJJbmhlcml0 SGFuZGxlID0gVFJVRQp3aGVuIG9wZW5pbmcgZmlsZXMgb24gV2luZG93cywgbWFraW5nIGFs bCBmaWxlIGRlc2NyaXB0b3JzIGluaGVyaXRhYmxlCmJ5IGNoaWxkIHByb2Nlc3Nlcy4gIFRo aXMgbWVhbnQgdGhlIE9fQ0xPRVhFQyBmbGFnLCBhZGRlZCB0byBtYW55IGNhbGwKc2l0ZXMg YnkgY29tbWl0IDFkYTU2OWNhMWYsIHdhcyBzaWxlbnRseSBpZ25vcmVkLgoKVGhlIG9yaWdp bmFsIGNvbW1pdCBpbmNsdWRlZCBhIGNvbW1lbnQgc3VnZ2VzdGluZyB0aGF0IG91ciBvcGVu KCkKcmVwbGFjZW1lbnQgZG9lc24ndCBjcmVhdGUgaW5oZXJpdGFibGUgaGFuZGxlcywgYnV0 IGl0IHdhcyBhIG1pcy0KdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZSBwYXRoLiAgSW4gcHJh Y3RpY2UsIHRoZSBjb2RlIHdhcyBjcmVhdGluZyAKaW5oZXJpdGFibGUgaGFuZGxlcyBpbiBh bGwgY2FzZXMuCgpUaGlzIGhhc24ndCBjYXVzZWQgd2lkZXNwcmVhZCBwcm9ibGVtcyBiZWNh dXNlIG1vc3QgY2hpbGQgcHJvY2Vzc2VzCihhcmNoaXZlX2NvbW1hbmQsIENPUFkgUFJPR1JB TSwgZXRjLikgb3BlcmF0ZSBvbiBmaWxlIHBhdGhzIHBhc3NlZCBhcwphcmd1bWVudHMgcmF0 aGVyIHRoYW4gaW5oZXJpdGVkIGZpbGUgZGVzY3JpcHRvcnMuICBFdmVuIGlmIGEgY2hpbGQK d2FudGVkIHRvIHVzZSBhbiBpbmhlcml0ZWQgaGFuZGxlLCBpdCB3b3VsZCBuZWVkIHRvIGxl YXJuIHRoZSBudW1lcmljCmhhbmRsZSB2YWx1ZSwgd2hpY2ggaXNuJ3QgcGFzc2VkIHRocm91 Z2ggb3VyIElQQyBtZWNoYW5pc21zLgoKTm9uZXRoZWxlc3MsIHRoZSBjdXJyZW50IGJlaGF2 aW9yIGlzIHdyb25nLiAgSXQgdmlvbGF0ZXMgZG9jdW1lbnRlZApPX0NMT0VYRUMgc2VtYW50 aWNzLCBjb250cmFkaWN0cyBvdXIgb3duIGNvZGUgY29tbWVudHMsIGFuZCBtYWtlcwpQb3N0 Z3JlU1FMIGJlaGF2ZSBkaWZmZXJlbnRseSBvbiBXaW5kb3dzIHRoYW4gb24gVW5peC4gIEl0 IGFsc28gY3JlYXRlcwpwb3RlbnRpYWwgaXNzdWVzIHdpdGggZnV0dXJlIGNvZGUgb3Igc2Vj dXJpdHkgYXVkaXRpbmcgdG9vbHMuCgpUbyBmaXgsIGRlZmluZSBPX0NMT0VYRUMgdG8gX09f Tk9JTkhFUklUIGluIG1hc3Rlci4gV2Ugd2lsbCBkZWZpbmUgaXQgCnRvIGEgaGlnaCBhdmFp bGFibGUgdmFsdWUgZm9yIGJhY2sgYnJhbmNoZXMuIEluIHBnd2luMzJfb3Blbl9oYW5kbGUo KQp3ZSBzZXQgYkluaGVyaXRIYW5kbGUgYWNjb3JkaW5nIHRvIHdoZXRoZXIgT19DTE9FWEVD IGlzIHNwZWNpZmllZC4KV2Ugc2V0IGJJbmhlcml0SGFuZGxlIGRpcmVjdGx5IGluIFNFQ1VS SVRZX0FUVFJJQlVURVMgcmF0aGVyIHRoYW4gdXNpbmcKU2V0SGFuZGxlSW5mb3JtYXRpb24o KSBhZnRlcndhcmRzLCBhcyB0aGUgZm9ybWVyIGlzIHNpbXBsZXIuCgpBdXRob3I6IEJyeWFu IEdyZWVuIDxkYnJ5YW4uZ3JlZW5AZ21haWwuY29tPgotLS0KIHNyYy9pbmNsdWRlL3BvcnQv d2luMzJfcG9ydC5oICAgICAgICAgICAgICAgICB8ICAxNyArLQogc3JjL3BvcnQvb3Blbi5j ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEzICstCiBzcmMvdGVzdC9tb2R1 bGVzL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL3Rlc3QvbW9k dWxlcy9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy90ZXN0L21v ZHVsZXMvdGVzdF9jbG9leGVjL01ha2VmaWxlICAgICAgICB8ICAzMCArKwogc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2Nsb2V4ZWMvbWVzb24uYnVpbGQgICAgIHwgIDI2ICsrCiAuLi4vbW9k dWxlcy90ZXN0X2Nsb2V4ZWMvdC8wMDFfY2xvZXhlYy5wbCAgICAgfCAgNjAgKysrKwogc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2Nsb2V4ZWMvdGVzdF9jbG9leGVjLmMgIHwgMjY3ICsrKysr KysrKysrKysrKysrKwogOCBmaWxlcyBjaGFuZ2VkLCA0MDQgaW5zZXJ0aW9ucygrKSwgMTEg ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2Nsb2V4ZWMvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVz L3Rlc3RfY2xvZXhlYy9tZXNvbi5idWlsZAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0 L21vZHVsZXMvdGVzdF9jbG9leGVjL3QvMDAxX2Nsb2V4ZWMucGwKIGNyZWF0ZSBtb2RlIDEw MDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY2xvZXhlYy90ZXN0X2Nsb2V4ZWMuYwoKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3BvcnQvd2luMzJfcG9ydC5oIGIvc3JjL2luY2x1ZGUv cG9ydC93aW4zMl9wb3J0LmgKaW5kZXggZmY3MDI4YmRjOC4uYWQ0NDJlMWRlNyAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvcG9ydC93aW4zMl9wb3J0LmgKKysrIGIvc3JjL2luY2x1ZGUv cG9ydC93aW4zMl9wb3J0LmgKQEAgLTMzNSwxOSArMzM1LDE4IEBAIGV4dGVybiBpbnQJX3Bn bHN0YXQ2NChjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqYnVmKTsKIAogLyoKICAq IFN1cHBsZW1lbnQgdG8gPGZjbnRsLmg+LgotICogVGhpcyBpcyB0aGUgc2FtZSB2YWx1ZSBh cyBfT19OT0lOSEVSSVQgaW4gdGhlIE1TIGhlYWRlciBmaWxlLiBUaGlzIGlzCi0gKiB0byBl bnN1cmUgdGhhdCB3ZSBkb24ndCBjb2xsaWRlIHdpdGggYSBmdXR1cmUgZGVmaW5pdGlvbi4g SXQgbWVhbnMKLSAqIHdlIGNhbm5vdCB1c2UgX09fTk9JTkhFUklUIG91cnNlbHZlcy4KKyAq CiAgKi8KLSNkZWZpbmUgT19EU1lOQyAweDAwODAKKyNkZWZpbmUJT19ESVJFQ1QJMHg4MDAw MDAwMAorI2RlZmluZQlPX0RTWU5DCQkweDA0MDAwMDAwCiAKIC8qCi0gKiBPdXIgb3Blbigp IHJlcGxhY2VtZW50IGRvZXMgbm90IGNyZWF0ZSBpbmhlcml0YWJsZSBoYW5kbGVzLCBzbyBp dCBpcyBzYWZlIHRvCi0gKiBpZ25vcmUgT19DTE9FWEVDLiAgKElmIHdlIHdlcmUgdXNpbmcg V2luZG93cycgb3duIG9wZW4oKSwgaXQgbWlnaHQgYmUKLSAqIG5lY2Vzc2FyeSB0byBjb252 ZXJ0IHRoaXMgdG8gX09fTk9JTkhFUklULikKKyAqIE1hcCBPX0NMT0VYRUMgdG8gV2luZG93 cycgX09fTk9JTkhFUklUIGZsYWcuICBPdXIgc3JjL3BvcnQvb3Blbi5jCisgKiBleHBsaWNp dGx5IGNoZWNrcyBmb3IgdGhpcyBmbGFnIGFuZCBzZXRzIGJJbmhlcml0SGFuZGxlIGFjY29y ZGluZ2x5CisgKiB3aGVuIGNhbGxpbmcgQ3JlYXRlRmlsZSgpLiAgTm90ZSB0aGF0IENyZWF0 ZUZpbGUoKSBkb2Vzbid0IHVuZGVyc3RhbmQKKyAqIHRoaXMgZmxhZyBuYXRpdmVseSAtIHdl IG11c3QgaGFuZGxlIGl0IGluIG91ciB3cmFwcGVyLgogICovCi0jZGVmaW5lIE9fQ0xPRVhF QyAwCi0KKyNkZWZpbmUJT19DTE9FWEVDCV9PX05PSU5IRVJJVAogLyoKICAqIFN1cHBsZW1l bnQgdG8gPGVycm5vLmg+LgogICoKZGlmZiAtLWdpdCBhL3NyYy9wb3J0L29wZW4uYyBiL3Ny Yy9wb3J0L29wZW4uYwppbmRleCA0YTMxYzVkN2I3Li43MTM0NGI5OTE3IDEwMDY0NAotLS0g YS9zcmMvcG9ydC9vcGVuLmMKKysrIGIvc3JjL3BvcnQvb3Blbi5jCkBAIC03NCwxMyArNzQs MjIgQEAgcGd3aW4zMl9vcGVuX2hhbmRsZShjb25zdCBjaGFyICpmaWxlTmFtZSwgaW50IGZp bGVGbGFncywgYm9vbCBiYWNrdXBfc2VtYW50aWNzKQogCS8qIENoZWNrIHRoYXQgd2UgY2Fu IGhhbmRsZSB0aGUgcmVxdWVzdCAqLwogCWFzc2VydCgoZmlsZUZsYWdzICYgKChPX1JET05M WSB8IE9fV1JPTkxZIHwgT19SRFdSKSB8IE9fQVBQRU5EIHwKIAkJCQkJCSAoT19SQU5ET00g fCBPX1NFUVVFTlRJQUwgfCBPX1RFTVBPUkFSWSkgfAotCQkJCQkJIF9PX1NIT1JUX0xJVkVE IHwgT19EU1lOQyB8IE9fRElSRUNUIHwKKwkJCQkJCSBfT19TSE9SVF9MSVZFRCB8IE9fRFNZ TkMgfCBPX0RJUkVDVCB8IE9fQ0xPRVhFQyB8CiAJCQkJCQkgKE9fQ1JFQVQgfCBPX1RSVU5D IHwgT19FWENMKSB8IChPX1RFWFQgfCBPX0JJTkFSWSkpKSA9PSBmaWxlRmxhZ3MpOwogCiAJ c2Eubkxlbmd0aCA9IHNpemVvZihzYSk7Ci0Jc2EuYkluaGVyaXRIYW5kbGUgPSBUUlVFOwog CXNhLmxwU2VjdXJpdHlEZXNjcmlwdG9yID0gTlVMTDsKIAorCS8qCisJICogSWYgT19DTE9F WEVDIGlzIHNwZWNpZmllZCwgY3JlYXRlIGEgbm9uLWluaGVyaXRhYmxlIGhhbmRsZS4gIE90 aGVyd2lzZSwKKwkgKiBjcmVhdGUgYW4gaW5oZXJpdGFibGUgaGFuZGxlICh0aGUgZGVmYXVs dCBXaW5kb3dzIGJlaGF2aW9yKS4KKwkgKgorCSAqIE5vdGU6IFdlIGNvdWxkIGluc3RlYWQg dXNlIFNldEhhbmRsZUluZm9ybWF0aW9uKCkgYWZ0ZXIgQ3JlYXRlRmlsZSgpIHRvCisJICog Y2xlYXIgSEFORExFX0ZMQUdfSU5IRVJJVCwgYnV0IHNldHRpbmcgYkluaGVyaXRIYW5kbGU9 RkFMU0UgaXMgc2ltcGxlcgorCSAqIGFuZCBhY2hpZXZlcyB0aGUgc2FtZSByZXN1bHQuCisJ ICovCisJc2EuYkluaGVyaXRIYW5kbGUgPSAhKGZpbGVGbGFncyAmIE9fQ0xPRVhFQyk7CisK IAl3aGlsZSAoKGggPSBDcmVhdGVGaWxlKGZpbGVOYW1lLAogCS8qIGNhbm5vdCB1c2UgT19S RE9OTFksIGFzIGl0ID09IDAgKi8KIAkJCQkJCSAgIChmaWxlRmxhZ3MgJiBPX1JEV1IpID8g KEdFTkVSSUNfV1JJVEUgfCBHRU5FUklDX1JFQUQpIDoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L21vZHVsZXMvTWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCmluZGV4IDkw MmE3OTU0MTAuLjNhOGUyNWZhZmQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvTWFr ZWZpbGUKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQpAQCAtMTgsNiArMTgsNyBA QCBTVUJESVJTID0gXAogCQkgIHRlc3RfYmluYXJ5aGVhcCBcCiAJCSAgdGVzdF9iaXRtYXBz ZXQgXAogCQkgIHRlc3RfYmxvb21maWx0ZXIgXAorCQkgIHRlc3RfY2xvZXhlYyBcCiAJCSAg dGVzdF9jb3B5X2NhbGxiYWNrcyBcCiAJCSAgdGVzdF9jdXN0b21fcm1ncnMgXAogCQkgIHRl c3RfZGRsX2RlcGFyc2UgXApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5i dWlsZCBiL3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQKaW5kZXggMTRmYzc2MWM0Yy4u ZTkzMDllY2IzZSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZAor KysgYi9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCkBAIC0xNyw2ICsxNyw3IEBAIHN1 YmRpcigndGVzdF9haW8nKQogc3ViZGlyKCd0ZXN0X2JpbmFyeWhlYXAnKQogc3ViZGlyKCd0 ZXN0X2JpdG1hcHNldCcpCiBzdWJkaXIoJ3Rlc3RfYmxvb21maWx0ZXInKQorc3ViZGlyKCd0 ZXN0X2Nsb2V4ZWMnKQogc3ViZGlyKCd0ZXN0X2NvcHlfY2FsbGJhY2tzJykKIHN1YmRpcign dGVzdF9jdXN0b21fcm1ncnMnKQogc3ViZGlyKCd0ZXN0X2RkbF9kZXBhcnNlJykKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jbG9leGVjL01ha2VmaWxlIGIvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2Nsb2V4ZWMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMC4uNzBkMzg1NzVlMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90 ZXN0L21vZHVsZXMvdGVzdF9jbG9leGVjL01ha2VmaWxlCkBAIC0wLDAgKzEsMzAgQEAKKyMg c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Nsb2V4ZWMvTWFrZWZpbGUKKworIyBUaGlzIG1vZHVs ZSBpcyBmb3IgV2luZG93cyBvbmx5CitpZmVxICgkKFBPUlROQU1FKSx3aW4zMikKKworTU9E VUxFX2JpZyA9IHRlc3RfY2xvZXhlYworT0JKUyA9IFwKKwkkKFdJTjMyUkVTKSBcCisJdGVz dF9jbG9leGVjLm8KKworUEdGSUxFREVTQyA9ICJ0ZXN0X2Nsb2V4ZWMgLSB0ZXN0IE9fQ0xP RVhFQyBmbGFnIGhhbmRsaW5nIgorCisjIEJ1aWxkIGFzIGEgc3RhbmRhbG9uZSBwcm9ncmFt LCBub3QgYSBzaGFyZWQgbGlicmFyeQorUFJPR1JBTSA9IHRlc3RfY2xvZXhlYworb3ZlcnJp ZGUgQ1BQRkxBR1MgOj0gLUkkKGxpYnBxX3NyY2RpcikgJChDUFBGTEFHUykKKworVEFQX1RF U1RTID0gMQorCitlbmRpZgorCitpZmRlZiBVU0VfUEdYUworUEdfQ09ORklHID0gcGdfY29u ZmlnCitQR1hTIDo9ICQoc2hlbGwgJChQR19DT05GSUcpIC0tcGd4cykKK2luY2x1ZGUgJChQ R1hTKQorZWxzZQorc3ViZGlyID0gc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Nsb2V4ZWMKK3Rv cF9idWlsZGRpciA9IC4uLy4uLy4uLy4uCitpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMv TWFrZWZpbGUuZ2xvYmFsCitpbmNsdWRlICQodG9wX3NyY2RpcikvY29udHJpYi9jb250cmli LWdsb2JhbC5taworZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9j bG9leGVjL21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Nsb2V4ZWMvbWVz b24uYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNjNjODY1 OGIwNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jbG9leGVj L21lc29uLmJ1aWxkCkBAIC0wLDAgKzEsMjYgQEAKKyMgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2Nsb2V4ZWMvbWVzb24uYnVpbGQKKworIyBUaGlzIHRlc3QgaXMgV2luZG93cy1vbmx5Citp ZiBob3N0X3N5c3RlbSAhPSAnd2luZG93cycKKyAgc3ViZGlyX2RvbmUoKQorZW5kaWYKKwor dGVzdF9jbG9leGVjX3NvdXJjZXMgPSBmaWxlcygndGVzdF9jbG9leGVjLmMnKQorCit0ZXN0 X2Nsb2V4ZWMgPSBleGVjdXRhYmxlKCd0ZXN0X2Nsb2V4ZWMnLAorICB0ZXN0X2Nsb2V4ZWNf c291cmNlcywKKyAgZGVwZW5kZW5jaWVzOiBbZnJvbnRlbmRfY29kZV0sCisgIGxpbmtfd2l0 aDogW3BncG9ydFsnJ10sIHBnY29tbW9uWycnXV0sCisgIGt3YXJnczogZGVmYXVsdF9iaW5f YXJncywKKykKKwordGVzdHMgKz0geworICAnbmFtZSc6ICd0ZXN0X2Nsb2V4ZWMnLAorICAn c2QnOiBtZXNvbi5jdXJyZW50X3NvdXJjZV9kaXIoKSwKKyAgJ2JkJzogbWVzb24uY3VycmVu dF9idWlsZF9kaXIoKSwKKyAgJ3RhcCc6IHsKKyAgICAndGVzdHMnOiBbCisgICAgICAndC8w MDFfY2xvZXhlYy5wbCcsCisgICAgXSwKKyAgfSwKK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9jbG9leGVjL3QvMDAxX2Nsb2V4ZWMucGwgYi9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfY2xvZXhlYy90LzAwMV9jbG9leGVjLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAuLjRjNTZlYjNhNGIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfY2xvZXhlYy90LzAwMV9jbG9leGVjLnBsCkBAIC0wLDAgKzEs NjAgQEAKKyMgVGVzdCBPX0NMT0VYRUMgZmxhZyBoYW5kbGluZyBvbiBXaW5kb3dzCisjCisj IFRoaXMgdGVzdCB2ZXJpZmllcyB0aGF0IGZpbGUgaGFuZGxlcyBvcGVuZWQgd2l0aCBPX0NM T0VYRUMgYXJlIG5vdAorIyBpbmhlcml0ZWQgYnkgY2hpbGQgcHJvY2Vzc2VzLCB3aGlsZSBo YW5kbGVzIG9wZW5lZCB3aXRob3V0IE9fQ0xPRVhFQworIyBhcmUgaW5oZXJpdGVkLgorCit1 c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOwordXNlIFBvc3RncmVT UUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7Cit1c2UgSVBDOjpSdW4gcXcocnVu KTsKK3VzZSBGaWxlOjpTcGVjOwordXNlIEN3ZCAnYWJzX3BhdGgnOworCitpZiAoISRQb3N0 Z3JlU1FMOjpUZXN0OjpVdGlsczo6d2luZG93c19vcykKK3sKKwlwbGFuIHNraXBfYWxsID0+ ICd0ZXN0IGlzIFdpbmRvd3Mtc3BlY2lmaWMnOworfQorCitwbGFuIHRlc3RzID0+IDE7CisK K215ICR0ZXN0X3Byb2c7Citmb3JlYWNoIG15ICRkaXIgKHNwbGl0KC8kQ29uZmlnOjpDb25m aWd7cGF0aF9zZXB9LywgJEVOVntQQVRIfSkpCit7CisJbXkgJGNhbmRpZGF0ZSA9IEZpbGU6 OlNwZWMtPmNhdGZpbGUoJGRpciwgJ3Rlc3RfY2xvZXhlYy5leGUnKTsKKwlpZiAoLWYgJGNh bmRpZGF0ZSAmJiAteCAkY2FuZGlkYXRlKQorCXsKKwkJJHRlc3RfcHJvZyA9ICRjYW5kaWRh dGU7CisJCWxhc3Q7CisJfQorfQorCitpZiAoISR0ZXN0X3Byb2cpCit7CisJJHRlc3RfcHJv ZyA9ICcuL3Rlc3RfY2xvZXhlYy5leGUnOworfQorCitpZiAoIS1mICR0ZXN0X3Byb2cpCit7 CisJQkFJTF9PVVQoInRlc3QgcHJvZ3JhbSBub3QgZm91bmQ6ICR0ZXN0X3Byb2ciKTsKK30K Kworbm90ZSgiVXNpbmcgdGVzdCBwcm9ncmFtOiAkdGVzdF9wcm9nIik7CisKK215ICgkc3Rk b3V0LCAkc3RkZXJyKTsKK215ICRyZXN1bHQgPSBydW4gWyAkdGVzdF9wcm9nIF0sICc+Jywg XCRzdGRvdXQsICcyPicsIFwkc3RkZXJyOworCitub3RlKCJUZXN0IHByb2dyYW0gb3V0cHV0 OiIpOworbm90ZSgkc3Rkb3V0KSBpZiAkc3Rkb3V0OworCitpZiAoJHN0ZGVycikKK3sKKwlk aWFnKCJUZXN0IHByb2dyYW0gc3RkZXJyOiIpOworCWRpYWcoJHN0ZGVycik7Cit9CisKK29r KCRyZXN1bHQgJiYgJHN0ZG91dCA9fiAvU1VDQ0VTUy4qT19DTE9FWEVDIGJlaGF2aW9yIHZl cmlmaWVkL3MsCisgICAiT19DTE9FWEVDIHByZXZlbnRzIGhhbmRsZSBpbmhlcml0YW5jZSIp OworCitkb25lX3Rlc3RpbmcoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYg LS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY2xvZXhlYy90ZXN0X2Nsb2V4ZWMuYyBi L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jbG9leGVjL3Rlc3RfY2xvZXhlYy5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjk2Y2JkOWM4MGUKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY2xvZXhlYy90ZXN0X2Nsb2V4ZWMuYwpA QCAtMCwwICsxLDI2NyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogdGVzdF9j bG9leGVjLmMKKyAqCQlUZXN0IE9fQ0xPRVhFQyBmbGFnIGhhbmRsaW5nIG9uIFdpbmRvd3MK KyAqCisgKiBUaGlzIHByb2dyYW0gdGVzdHMgdGhhdDoKKyAqIDEuIEZpbGUgaGFuZGxlcyBv cGVuZWQgd2l0aCBPX0NMT0VYRUMgYXJlIE5PVCBpbmhlcml0ZWQgYnkgY2hpbGQgcHJvY2Vz c2VzCisgKiAyLiBGaWxlIGhhbmRsZXMgb3BlbmVkIHdpdGhvdXQgT19DTE9FWEVDIEFSRSBp bmhlcml0ZWQgYnkgY2hpbGQgcHJvY2Vzc2VzCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0 IChjKSAxOTk2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgi CisKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNpZmRl ZiBXSU4zMgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiY29t bW9uL2ZpbGVfdXRpbHMuaCIKKyNpbmNsdWRlICJwb3J0LmgiCisKK3N0YXRpYyB2b2lkIHJ1 bl9wYXJlbnRfdGVzdHMoY29uc3QgY2hhciAqdGVzdGZpbGUxLCBjb25zdCBjaGFyICp0ZXN0 ZmlsZTIpOworc3RhdGljIHZvaWQgcnVuX2NoaWxkX3Rlc3RzKGNvbnN0IGNoYXIgKmhhbmRs ZTFfc3RyLCBjb25zdCBjaGFyICpoYW5kbGUyX3N0cik7CitzdGF0aWMgYm9vbCB0cnlfd3Jp dGVfdG9faGFuZGxlKEhBTkRMRSBoLCBjb25zdCBjaGFyICpsYWJlbCk7CisKK2ludAorbWFp bihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWNoYXIJCXRlc3RmaWxlMVtNQVhQR1BB VEhdOworCWNoYXIJCXRlc3RmaWxlMltNQVhQR1BBVEhdOworCisJLyogV2luZG93cy1vbmx5 IHRlc3QgKi8KKyNpZm5kZWYgV0lOMzIKKwlmcHJpbnRmKHN0ZGVyciwgIlRoaXMgdGVzdCBv bmx5IHJ1bnMgb24gV2luZG93c1xuIik7CisJcmV0dXJuIDA7CisjZW5kaWYKKworCWlmIChh cmdjID09IDMpCisJeworCQkvKgorCQkgKiBDaGlsZCBtb2RlOiByZWNlaXZlcyB0d28gaGFu ZGxlIHZhbHVlcyBhcyBoZXggc3RyaW5ncworCQkgKiBhbmQgYXR0ZW1wdHMgdG8gd3JpdGUg dG8gdGhlbQorCQkgKi8KKwkJcnVuX2NoaWxkX3Rlc3RzKGFyZ3ZbMV0sIGFyZ3ZbMl0pOwor CQlyZXR1cm4gMDsKKwl9CisJZWxzZSBpZiAoYXJnYyA9PSAxKQorCXsKKwkJLyoKKwkJICog UGFyZW50IG1vZGU6IG9wZW5zIGZpbGVzIGFuZCBzcGF3bnMgY2hpbGQKKwkJICovCisJCXNu cHJpbnRmKHRlc3RmaWxlMSwgc2l6ZW9mKHRlc3RmaWxlMSksICJ0ZXN0X2Nsb2V4ZWNfMV8l ZC50bXAiLCAoaW50KSBnZXRwaWQoKSk7CisJCXNucHJpbnRmKHRlc3RmaWxlMiwgc2l6ZW9m KHRlc3RmaWxlMiksICJ0ZXN0X2Nsb2V4ZWNfMl8lZC50bXAiLCAoaW50KSBnZXRwaWQoKSk7 CisKKwkJcnVuX3BhcmVudF90ZXN0cyh0ZXN0ZmlsZTEsIHRlc3RmaWxlMik7CisKKwkJLyog Q2xlYW4gdXAgdGVzdCBmaWxlcyAqLworCQl1bmxpbmsodGVzdGZpbGUxKTsKKwkJdW5saW5r KHRlc3RmaWxlMik7CisKKwkJcmV0dXJuIDA7CisJfQorCWVsc2UKKwl7CisJCWZwcmludGYo c3RkZXJyLCAiVXNhZ2U6ICVzIFtoYW5kbGUxX2hleCBoYW5kbGUyX2hleF1cbiIsIGFyZ3Zb MF0pOworCQlyZXR1cm4gMTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitydW5fcGFyZW50X3Rl c3RzKGNvbnN0IGNoYXIgKnRlc3RmaWxlMSwgY29uc3QgY2hhciAqdGVzdGZpbGUyKQorewor I2lmZGVmIFdJTjMyCisJaW50CQkJZmQxLAorCQkJCWZkMjsKKwlIQU5ETEUJCWgxLAorCQkJ CWgyOworCWNoYXIJCWNtZGxpbmVbMTAyNF07CisJU1RBUlRVUElORk8gc2k7CisJUFJPQ0VT U19JTkZPUk1BVElPTiBwaTsKKwlEV09SRAkJZXhpdF9jb2RlOworCisJcHJpbnRmKCJQYXJl bnQ6IE9wZW5pbmcgdGVzdCBmaWxlcy4uLlxuIik7CisKKwkvKgorCSAqIE9wZW4gZmlyc3Qg ZmlsZSBXSVRIIE9fQ0xPRVhFQyAtIHNob3VsZCBOT1QgYmUgaW5oZXJpdGVkCisJICovCisJ ZmQxID0gb3Blbih0ZXN0ZmlsZTEsIE9fUkRXUiB8IE9fQ1JFQVQgfCBPX1RSVU5DIHwgT19D TE9FWEVDLCAwNjAwKTsKKwlpZiAoZmQxIDwgMCkKKwl7CisJCWZwcmludGYoc3RkZXJyLCAi RmFpbGVkIHRvIG9wZW4gJXM6ICVzXG4iLCB0ZXN0ZmlsZTEsIHN0cmVycm9yKGVycm5vKSk7 CisJCWV4aXQoMSk7CisJfQorCisJLyoKKwkgKiBPcGVuIHNlY29uZCBmaWxlIFdJVEhPVVQg T19DTE9FWEVDIC0gc2hvdWxkIGJlIGluaGVyaXRlZAorCSAqLworCWZkMiA9IG9wZW4odGVz dGZpbGUyLCBPX1JEV1IgfCBPX0NSRUFUIHwgT19UUlVOQywgMDYwMCk7CisJaWYgKGZkMiA8 IDApCisJeworCQlmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBvcGVuICVzOiAlc1xuIiwg dGVzdGZpbGUyLCBzdHJlcnJvcihlcnJubykpOworCQljbG9zZShmZDEpOworCQlleGl0KDEp OworCX0KKworCS8qIEdldCBXaW5kb3dzIEhBTkRMRXMgZnJvbSBmaWxlIGRlc2NyaXB0b3Jz ICovCisJaDEgPSAoSEFORExFKSBfZ2V0X29zZmhhbmRsZShmZDEpOworCWgyID0gKEhBTkRM RSkgX2dldF9vc2ZoYW5kbGUoZmQyKTsKKworCWlmIChoMSA9PSBJTlZBTElEX0hBTkRMRV9W QUxVRSB8fCBoMiA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKwl7CisJCWZwcmludGYoc3Rk ZXJyLCAiRmFpbGVkIHRvIGdldCBPUyBoYW5kbGVzXG4iKTsKKwkJY2xvc2UoZmQxKTsKKwkJ Y2xvc2UoZmQyKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlwcmludGYoIlBhcmVudDogZmQxPSVk IChPX0NMT0VYRUMpIC0+IEhBTkRMRT0lcFxuIiwgZmQxLCBoMSk7CisJcHJpbnRmKCJQYXJl bnQ6IGZkMj0lZCAobm8gT19DTE9FWEVDKSAtPiBIQU5ETEU9JXBcbiIsIGZkMiwgaDIpOwor CisJLyoKKwkgKiBTcGF3biBjaGlsZCBwcm9jZXNzIHdpdGggYkluaGVyaXRIYW5kbGVzPVRS VUUsIHBhc3NpbmcgaGFuZGxlIHZhbHVlcworCSAqIGFzIGhleCBzdHJpbmdzCisJICovCisJ c25wcmludGYoY21kbGluZSwgc2l6ZW9mKGNtZGxpbmUpLCAiXCIlc1wiICVwICVwIiwKKwkJ CSBHZXRDb21tYW5kTGluZSgpLCBoMSwgaDIpOworCisJLyoKKwkgKiBGaW5kIHRoZSBhY3R1 YWwgZXhlY3V0YWJsZSBwYXRoIGJ5IHJlbW92aW5nIGFueSBhcmd1bWVudHMgZnJvbQorCSAq IEdldENvbW1hbmRMaW5lKCkKKwkgKi8KKwl7CisJCWNoYXIJCWV4ZV9wYXRoW01BWF9QQVRI XTsKKwkJY2hhcgkgICAqc3BhY2VfcG9zOworCisJCUdldE1vZHVsZUZpbGVOYW1lKE5VTEws IGV4ZV9wYXRoLCBzaXplb2YoZXhlX3BhdGgpKTsKKwkJc25wcmludGYoY21kbGluZSwgc2l6 ZW9mKGNtZGxpbmUpLCAiXCIlc1wiICVwICVwIiwKKwkJCQkgZXhlX3BhdGgsIGgxLCBoMik7 CisJfQorCisJbWVtc2V0KCZzaSwgMCwgc2l6ZW9mKHNpKSk7CisJc2kuY2IgPSBzaXplb2Yo c2kpOworCW1lbXNldCgmcGksIDAsIHNpemVvZihwaSkpOworCisJcHJpbnRmKCJQYXJlbnQ6 IFNwYXduaW5nIGNoaWxkIHByb2Nlc3MuLi5cbiIpOworCXByaW50ZigiUGFyZW50OiBDb21t YW5kIGxpbmU6ICVzXG4iLCBjbWRsaW5lKTsKKworCWlmICghQ3JlYXRlUHJvY2VzcyhOVUxM LAkJLyogYXBwbGljYXRpb24gbmFtZSAqLworCQkJCQkgICBjbWRsaW5lLAkJLyogY29tbWFu ZCBsaW5lICovCisJCQkJCSAgIE5VTEwsCQkvKiBwcm9jZXNzIHNlY3VyaXR5IGF0dHJpYnV0 ZXMgKi8KKwkJCQkJICAgTlVMTCwJCS8qIHRocmVhZCBzZWN1cml0eSBhdHRyaWJ1dGVzICov CisJCQkJCSAgIFRSVUUsCQkvKiBiSW5oZXJpdEhhbmRsZXMgLSBDUklUSUNBTCEgKi8KKwkJ CQkJICAgMCwJCQkvKiBjcmVhdGlvbiBmbGFncyAqLworCQkJCQkgICBOVUxMLAkJLyogZW52 aXJvbm1lbnQgKi8KKwkJCQkJICAgTlVMTCwJCS8qIGN1cnJlbnQgZGlyZWN0b3J5ICovCisJ CQkJCSAgICZzaSwJCQkvKiBzdGFydHVwIGluZm8gKi8KKwkJCQkJICAgJnBpKSkJCS8qIHBy b2Nlc3MgaW5mb3JtYXRpb24gKi8KKwl7CisJCWZwcmludGYoc3RkZXJyLCAiQ3JlYXRlUHJv Y2VzcyBmYWlsZWQ6ICVsdVxuIiwgR2V0TGFzdEVycm9yKCkpOworCQljbG9zZShmZDEpOwor CQljbG9zZShmZDIpOworCQlleGl0KDEpOworCX0KKworCXByaW50ZigiUGFyZW50OiBXYWl0 aW5nIGZvciBjaGlsZCBwcm9jZXNzLi4uXG4iKTsKKworCS8qIFdhaXQgZm9yIGNoaWxkIHRv IGNvbXBsZXRlICovCisJV2FpdEZvclNpbmdsZU9iamVjdChwaS5oUHJvY2VzcywgSU5GSU5J VEUpOworCUdldEV4aXRDb2RlUHJvY2VzcyhwaS5oUHJvY2VzcywgJmV4aXRfY29kZSk7CisK KwlDbG9zZUhhbmRsZShwaS5oUHJvY2Vzcyk7CisJQ2xvc2VIYW5kbGUocGkuaFRocmVhZCk7 CisKKwljbG9zZShmZDEpOworCWNsb3NlKGZkMik7CisKKwlwcmludGYoIlBhcmVudDogQ2hp bGQgZXhpdCBjb2RlOiAlbHVcbiIsIGV4aXRfY29kZSk7CisKKwlpZiAoZXhpdF9jb2RlID09 IDApCisJCXByaW50ZigiUGFyZW50OiBTVUNDRVNTIC0gT19DTE9FWEVDIGJlaGF2aW9yIHZl cmlmaWVkXG4iKTsKKwllbHNlCisJeworCQlwcmludGYoIlBhcmVudDogRkFJTFVSRSAtIE9f Q0xPRVhFQyBub3Qgd29ya2luZyBjb3JyZWN0bHlcbiIpOworCQlleGl0KDEpOworCX0KKyNl bmRpZgorfQorCitzdGF0aWMgdm9pZAorcnVuX2NoaWxkX3Rlc3RzKGNvbnN0IGNoYXIgKmhh bmRsZTFfc3RyLCBjb25zdCBjaGFyICpoYW5kbGUyX3N0cikKK3sKKyNpZmRlZiBXSU4zMgor CUhBTkRMRQkJaDEsCisJCQkJaDI7CisJYm9vbAkJaDFfd29ya2VkLAorCQkJCWgyX3dvcmtl ZDsKKworCS8qIFBhcnNlIGhhbmRsZSB2YWx1ZXMgZnJvbSBoZXggc3RyaW5ncyAqLworCWlm IChzc2NhbmYoaGFuZGxlMV9zdHIsICIlcCIsICZoMSkgIT0gMSB8fAorCQlzc2NhbmYoaGFu ZGxlMl9zdHIsICIlcCIsICZoMikgIT0gMSkKKwl7CisJCWZwcmludGYoc3RkZXJyLCAiQ2hp bGQ6IEZhaWxlZCB0byBwYXJzZSBoYW5kbGUgdmFsdWVzXG4iKTsKKwkJZXhpdCgxKTsKKwl9 CisKKwlwcmludGYoIkNoaWxkOiBSZWNlaXZlZCBIQU5ETEUxPSVwIChzaG91bGQgZmFpbCAt IE9fQ0xPRVhFQylcbiIsIGgxKTsKKwlwcmludGYoIkNoaWxkOiBSZWNlaXZlZCBIQU5ETEUy PSVwIChzaG91bGQgd29yayAtIG5vIE9fQ0xPRVhFQylcbiIsIGgyKTsKKworCS8qCisJICog VHJ5IHRvIHdyaXRlIHRvIGJvdGggaGFuZGxlcworCSAqLworCWgxX3dvcmtlZCA9IHRyeV93 cml0ZV90b19oYW5kbGUoaDEsICJIQU5ETEUxIik7CisJaDJfd29ya2VkID0gdHJ5X3dyaXRl X3RvX2hhbmRsZShoMiwgIkhBTkRMRTIiKTsKKworCXByaW50ZigiQ2hpbGQ6IEhBTkRMRTEg KE9fQ0xPRVhFQyk6ICVzXG4iLAorCQkgICBoMV93b3JrZWQgPyAiQUNDRVNTSUJMRSAoQkFE ISkiIDogIk5PVCBBQ0NFU1NJQkxFIChHT09EISkiKTsKKwlwcmludGYoIkNoaWxkOiBIQU5E TEUyIChubyBPX0NMT0VYRUMpOiAlc1xuIiwKKwkJICAgaDJfd29ya2VkID8gIkFDQ0VTU0lC TEUgKEdPT0QhKSIgOiAiTk9UIEFDQ0VTU0lCTEUgKEJBRCEpIik7CisKKwkvKgorCSAqIEZv ciBPX0NMT0VYRUMgdG8gd29yayBjb3JyZWN0bHk6CisJICogLSBoMSBzaG91bGQgTk9UIGJl IGFjY2Vzc2libGUgKGgxX3dvcmtlZCA9PSBmYWxzZSkKKwkgKiAtIGgyIFNIT1VMRCBiZSBh Y2Nlc3NpYmxlIChoMl93b3JrZWQgPT0gdHJ1ZSkKKwkgKi8KKwlpZiAoIWgxX3dvcmtlZCAm JiBoMl93b3JrZWQpCisJeworCQlwcmludGYoIkNoaWxkOiBUZXN0IFBBU1NFRCAtIE9fQ0xP RVhFQyB3b3JraW5nIGNvcnJlY3RseVxuIik7CisJCWV4aXQoMCk7CisJfQorCWVsc2UKKwl7 CisJCXByaW50ZigiQ2hpbGQ6IFRlc3QgRkFJTEVEIC0gT19DTE9FWEVDIG5vdCB3b3JraW5n IGNvcnJlY3RseVxuIik7CisJCWV4aXQoMSk7CisJfQorI2VuZGlmCit9CisKK3N0YXRpYyBi b29sCit0cnlfd3JpdGVfdG9faGFuZGxlKEhBTkRMRSBoLCBjb25zdCBjaGFyICpsYWJlbCkK K3sKKyNpZmRlZiBXSU4zMgorCWNvbnN0IGNoYXIgKnRlc3RfZGF0YSA9ICJ0ZXN0XG4iOwor CURXT1JECQlieXRlc193cml0dGVuOworCUJPT0wJCXJlc3VsdDsKKworCXJlc3VsdCA9IFdy aXRlRmlsZShoLCB0ZXN0X2RhdGEsIHN0cmxlbih0ZXN0X2RhdGEpLCAmYnl0ZXNfd3JpdHRl biwgTlVMTCk7CisKKwlpZiAocmVzdWx0ICYmIGJ5dGVzX3dyaXR0ZW4gPT0gc3RybGVuKHRl c3RfZGF0YSkpCisJeworCQlwcmludGYoIkNoaWxkOiBTdWNjZXNzZnVsbHkgd3JvdGUgdG8g JXNcbiIsIGxhYmVsKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCWVsc2UKKwl7CisJCXByaW50 ZigiQ2hpbGQ6IEZhaWxlZCB0byB3cml0ZSB0byAlcyAoZXJyb3IgJWx1KVxuIiwKKwkJCSAg IGxhYmVsLCBHZXRMYXN0RXJyb3IoKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisjZWxzZQor CXJldHVybiBmYWxzZTsKKyNlbmRpZgorfQotLSAKMi40Ni4wLndpbmRvd3MuMQoK --------------YpSYk09FL4m0QmqxchMArFG1 Content-Type: text/plain; charset=UTF-8; name="0001-Fix-O_CLOEXEC-v16-v17-v18.patch.txt" Content-Disposition: attachment; filename="0001-Fix-O_CLOEXEC-v16-v17-v18.patch.txt" Content-Transfer-Encoding: base64 RnJvbSA4N2VmYWY4MjhkMTRlZDcwODE5YmE2NjBjMmQ0NTg2MDYxZTIyYTJkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBCcnlhbiBHcmVlbiA8ZGJyeWFuLmdyZWVuQGdtYWls LmNvbT4KRGF0ZTogV2VkLCAxMiBOb3YgMjAyNSAxMzoxMDozNSAtMDYwMApTdWJqZWN0OiBb UEFUQ0hdIEZpeCBPX0NMT0VYRUMgZmxhZyBoYW5kbGluZyBpbiBXaW5kb3dzIHBvcnQKClBv c3RncmVTUUwncyBzcmMvcG9ydC9vcGVuLmMgaGFzIGFsd2F5cyBzZXQgYkluaGVyaXRIYW5k bGUgPSBUUlVFCndoZW4gb3BlbmluZyBmaWxlcyBvbiBXaW5kb3dzLCBtYWtpbmcgYWxsIGZp bGUgZGVzY3JpcHRvcnMgaW5oZXJpdGFibGUKYnkgY2hpbGQgcHJvY2Vzc2VzLiAgVGhpcyBt ZWFudCB0aGUgT19DTE9FWEVDIGZsYWcsIGFkZGVkIHRvIG1hbnkgY2FsbApzaXRlcyBieSBj b21taXQgMWRhNTY5Y2ExZiwgd2FzIHNpbGVudGx5IGlnbm9yZWQuCgpUaGUgb3JpZ2luYWwg Y29tbWl0IGluY2x1ZGVkIGEgY29tbWVudCBzdWdnZXN0aW5nIHRoYXQgb3VyIG9wZW4oKQpy ZXBsYWNlbWVudCBkb2Vzbid0IGNyZWF0ZSBpbmhlcml0YWJsZSBoYW5kbGVzLCBidXQgaXQg d2FzIGEgbWlzLQp1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlIHBhdGguICBJbiBwcmFjdGlj ZSwgdGhlIGNvZGUgd2FzIGNyZWF0aW5nCmluaGVyaXRhYmxlIGhhbmRsZXMgaW4gYWxsIGNh c2VzLgoKVGhpcyBoYXNuJ3QgY2F1c2VkIHdpZGVzcHJlYWQgcHJvYmxlbXMgYmVjYXVzZSBt b3N0IGNoaWxkIHByb2Nlc3NlcwooYXJjaGl2ZV9jb21tYW5kLCBDT1BZIFBST0dSQU0sIGV0 Yy4pIG9wZXJhdGUgb24gZmlsZSBwYXRocyBwYXNzZWQgYXMKYXJndW1lbnRzIHJhdGhlciB0 aGFuIGluaGVyaXRlZCBmaWxlIGRlc2NyaXB0b3JzLiAgRXZlbiBpZiBhIGNoaWxkCndhbnRl ZCB0byB1c2UgYW4gaW5oZXJpdGVkIGhhbmRsZSwgaXQgd291bGQgbmVlZCB0byBsZWFybiB0 aGUgbnVtZXJpYwpoYW5kbGUgdmFsdWUsIHdoaWNoIGlzbid0IHBhc3NlZCB0aHJvdWdoIG91 ciBJUEMgbWVjaGFuaXNtcy4KCk5vbmV0aGVsZXNzLCB0aGUgY3VycmVudCBiZWhhdmlvciBp cyB3cm9uZy4gIEl0IHZpb2xhdGVzIGRvY3VtZW50ZWQKT19DTE9FWEVDIHNlbWFudGljcywg Y29udHJhZGljdHMgb3VyIG93biBjb2RlIGNvbW1lbnRzLCBhbmQgbWFrZXMKUG9zdGdyZVNR TCBiZWhhdmUgZGlmZmVyZW50bHkgb24gV2luZG93cyB0aGFuIG9uIFVuaXguICBJdCBhbHNv IGNyZWF0ZXMKcG90ZW50aWFsIGlzc3VlcyB3aXRoIGZ1dHVyZSBjb2RlIG9yIHNlY3VyaXR5 IGF1ZGl0aW5nIHRvb2xzLgoKVG8gZml4LCBob25vciBPX0NMT0VYRUMgaW4gcGd3aW4zMl9v cGVuX2hhbmRsZSgpIGJ5IHNldHRpbmcKYkluaGVyaXRIYW5kbGUgYmFzZWQgb24gd2hldGhl ciBPX0NMT0VYRUMgaXMgc3BlY2lmaWVkLiBXZSBzZXQKYkluaGVyaXRIYW5kbGUgZGlyZWN0 bHkgaW4gU0VDVVJJVFlfQVRUUklCVVRFUyByYXRoZXIgdGhhbiB1c2luZwpTZXRIYW5kbGVJ bmZvcm1hdGlvbigpIGFmdGVyd2FyZHMsIGFzIHRoZSBmb3JtZXIgaXMgc2ltcGxlci4KCkZv ciB0aGlzIGJhY2twYXRjaCwgd2UgdXNlIDB4MDQwMDAwMDAgYXMgdGhlIE9fQ0xPRVhFQyB2 YWx1ZSB0byBhdm9pZApjaGFuZ2luZyBleGlzdGluZyBmbGFnIGRlZmluaXRpb25zLiBNYXN0 ZXIgd2lsbCB1c2UgX09fTk9JTkhFUklUCmFuZCByZW9yZ2FuaXplIHRoZSBmbGFncyBjbGVh bmx5LgoKLS0tCiBzcmMvaW5jbHVkZS9wb3J0L3dpbjMyX3BvcnQuaCAgICAgICAgICAgICAg ICAgfCAgMTcgKy0KIHNyYy9wb3J0L29wZW4uYyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAxMyArLQogc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZCAgICAgICAgICAg ICAgICAgIHwgICAxICsKIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9jbG9leGVjL01ha2VmaWxl ICAgICAgICB8ICAzMCArKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Nsb2V4ZWMvbWVzb24u YnVpbGQgICAgIHwgIDI2ICsrCiAuLi4vbW9kdWxlcy90ZXN0X2Nsb2V4ZWMvdC8wMDFfY2xv ZXhlYy5wbCAgICAgfCAgNjAgKysrKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Nsb2V4ZWMv dGVzdF9jbG9leGVjLmMgIHwgMjY3ICsrKysrKysrKysrKysrKysrKwogNyBmaWxlcyBjaGFu Z2VkLCA0MDIgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Nsb2V4ZWMvTWFrZWZpbGUKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY2xvZXhlYy9tZXNvbi5idWlsZAog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9jbG9leGVjL3QvMDAx X2Nsb2V4ZWMucGwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf Y2xvZXhlYy90ZXN0X2Nsb2V4ZWMuYwoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3BvcnQv d2luMzJfcG9ydC5oIGIvc3JjL2luY2x1ZGUvcG9ydC93aW4zMl9wb3J0LmgKaW5kZXggZmU5 MjUzZDliMWYuLmI5MTlmNjRlOWE4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wb3J0L3dp bjMyX3BvcnQuaAorKysgYi9zcmMvaW5jbHVkZS9wb3J0L3dpbjMyX3BvcnQuaApAQCAtMzUx LDE4ICszNTEsMTUgQEAgZXh0ZXJuIGludAlfcGdsc3RhdDY0KGNvbnN0IGNoYXIgKm5hbWUs IHN0cnVjdCBzdGF0ICpidWYpOwogCiAvKgogICogU3VwcGxlbWVudCB0byA8ZmNudGwuaD4u Ci0gKiBUaGlzIGlzIHRoZSBzYW1lIHZhbHVlIGFzIF9PX05PSU5IRVJJVCBpbiB0aGUgTVMg aGVhZGVyIGZpbGUuIFRoaXMgaXMKLSAqIHRvIGVuc3VyZSB0aGF0IHdlIGRvbid0IGNvbGxp ZGUgd2l0aCBhIGZ1dHVyZSBkZWZpbml0aW9uLiBJdCBtZWFucwotICogd2UgY2Fubm90IHVz ZSBfT19OT0lOSEVSSVQgb3Vyc2VsdmVzLgogICovCi0jZGVmaW5lIE9fRFNZTkMgMHgwMDgw Ci0KLS8qCi0gKiBPdXIgb3BlbigpIHJlcGxhY2VtZW50IGRvZXMgbm90IGNyZWF0ZSBpbmhl cml0YWJsZSBoYW5kbGVzLCBzbyBpdCBpcyBzYWZlIHRvCi0gKiBpZ25vcmUgT19DTE9FWEVD LiAgKElmIHdlIHdlcmUgdXNpbmcgV2luZG93cycgb3duIG9wZW4oKSwgaXQgbWlnaHQgYmUK LSAqIG5lY2Vzc2FyeSB0byBjb252ZXJ0IHRoaXMgdG8gX09fTk9JTkhFUklULikKKyNkZWZp bmUgT19ESVJFQ1QgICAgMHg4MDAwMDAwMAorLyogT3VyIHNyYy9wb3J0L29wZW4uYyBleHBs aWNpdGx5IGNoZWNrcyBmb3IgT19DTE9FWEVDIGFuZCBzZXRzCisgKiBiSW5oZXJpdEhhbmRs ZSBhY2NvcmRpbmdseSB3aGVuIGNhbGxpbmcgQ3JlYXRlRmlsZSgpLgorICogICBOb3RlIHRo YXQgQ3JlYXRlRmlsZSgpIGRvZXNuJ3QgdW5kZXJzdGFuZCB0aGlzIGZsYWcgbmF0aXZlbHkg LSB3ZSBtdXN0CisgKiBoYW5kbGUgaXQgaW4gb3VyIHdyYXBwZXIuCiAgKi8KLSNkZWZpbmUg T19DTE9FWEVDIDAKKyNkZWZpbmUgT19DTE9FWEVDICAgMHgwNDAwMDAwMAorI2RlZmluZSBP X0RTWU5DICAgICAweDAwODAKIAogLyoKICAqIFN1cHBsZW1lbnQgdG8gPGVycm5vLmg+Lgpk aWZmIC0tZ2l0IGEvc3JjL3BvcnQvb3Blbi5jIGIvc3JjL3BvcnQvb3Blbi5jCmluZGV4IDBi ZDk3NTUwMDYzLi44MWIzNTZmZjdhZSAxMDA2NDQKLS0tIGEvc3JjL3BvcnQvb3Blbi5jCisr KyBiL3NyYy9wb3J0L29wZW4uYwpAQCAtNzQsMTMgKzc0LDIyIEBAIHBnd2luMzJfb3Blbl9o YW5kbGUoY29uc3QgY2hhciAqZmlsZU5hbWUsIGludCBmaWxlRmxhZ3MsIGJvb2wgYmFja3Vw X3NlbWFudGljcykKIAkvKiBDaGVjayB0aGF0IHdlIGNhbiBoYW5kbGUgdGhlIHJlcXVlc3Qg Ki8KIAlhc3NlcnQoKGZpbGVGbGFncyAmICgoT19SRE9OTFkgfCBPX1dST05MWSB8IE9fUkRX UikgfCBPX0FQUEVORCB8CiAJCQkJCQkgKE9fUkFORE9NIHwgT19TRVFVRU5USUFMIHwgT19U RU1QT1JBUlkpIHwKLQkJCQkJCSBfT19TSE9SVF9MSVZFRCB8IE9fRFNZTkMgfCBPX0RJUkVD VCB8CisJCQkJCQkgX09fU0hPUlRfTElWRUQgfCBPX0RTWU5DIHwgT19ESVJFQ1QgfCBPX0NM T0VYRUMgfAogCQkJCQkJIChPX0NSRUFUIHwgT19UUlVOQyB8IE9fRVhDTCkgfCAoT19URVhU IHwgT19CSU5BUlkpKSkgPT0gZmlsZUZsYWdzKTsKIAogCXNhLm5MZW5ndGggPSBzaXplb2Yo c2EpOwotCXNhLmJJbmhlcml0SGFuZGxlID0gVFJVRTsKIAlzYS5scFNlY3VyaXR5RGVzY3Jp cHRvciA9IE5VTEw7CiAKKwkvKgorCSAqIElmIE9fQ0xPRVhFQyBpcyBzcGVjaWZpZWQsIGNy ZWF0ZSBhIG5vbi1pbmhlcml0YWJsZSBoYW5kbGUuICBPdGhlcndpc2UsCisJICogY3JlYXRl IGFuIGluaGVyaXRhYmxlIGhhbmRsZSAodGhlIGRlZmF1bHQgV2luZG93cyBiZWhhdmlvciku CisJICoKKwkgKiBOb3RlOiBXZSBjb3VsZCBpbnN0ZWFkIHVzZSBTZXRIYW5kbGVJbmZvcm1h dGlvbigpIGFmdGVyIENyZWF0ZUZpbGUoKSB0bworCSAqIGNsZWFyIEhBTkRMRV9GTEFHX0lO SEVSSVQsIGJ1dCBzZXR0aW5nIGJJbmhlcml0SGFuZGxlPUZBTFNFIGlzIHNpbXBsZXIKKwkg KiBhbmQgYWNoaWV2ZXMgdGhlIHNhbWUgcmVzdWx0LgorCSAqLworCXNhLmJJbmhlcml0SGFu ZGxlID0gIShmaWxlRmxhZ3MgJiBPX0NMT0VYRUMpOworCiAJd2hpbGUgKChoID0gQ3JlYXRl RmlsZShmaWxlTmFtZSwKIAkvKiBjYW5ub3QgdXNlIE9fUkRPTkxZLCBhcyBpdCA9PSAwICov CiAJCQkJCQkgICAoZmlsZUZsYWdzICYgT19SRFdSKSA/IChHRU5FUklDX1dSSVRFIHwgR0VO RVJJQ19SRUFEKSA6CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL21lc29uLmJ1aWxk IGIvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZAppbmRleCA5NTU2YmFjNGFkNC4uNTVl YzBiZjkwM2IgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQKKysr IGIvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZApAQCAtMTUsMyArMTUsNCBAQCBzdWJk aXIoJ3Rlc3RfYmxvb21maWx0ZXInKQorc3ViZGlyKCd0ZXN0X2Nsb2V4ZWMnKQogc3ViZGly KCd0ZXN0X2NvcHlfY2FsbGJhY2tzJykKIHN1YmRpcigndGVzdF9jdXN0b21fcm1ncnMnKQog c3ViZGlyKCd0ZXN0X2RkbF9kZXBhcnNlJykKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9jbG9leGVjL01ha2VmaWxlIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Nsb2V4 ZWMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjcw ZDM4NTc1ZTI2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Ns b2V4ZWMvTWFrZWZpbGUKQEAgLTAsMCArMSwzMCBAQAorIyBzcmMvdGVzdC9tb2R1bGVzL3Rl c3RfY2xvZXhlYy9NYWtlZmlsZQorCisjIFRoaXMgbW9kdWxlIGlzIGZvciBXaW5kb3dzIG9u bHkKK2lmZXEgKCQoUE9SVE5BTUUpLHdpbjMyKQorCitNT0RVTEVfYmlnID0gdGVzdF9jbG9l eGVjCitPQkpTID0gXAorCSQoV0lOMzJSRVMpIFwKKwl0ZXN0X2Nsb2V4ZWMubworCitQR0ZJ TEVERVNDID0gInRlc3RfY2xvZXhlYyAtIHRlc3QgT19DTE9FWEVDIGZsYWcgaGFuZGxpbmci CisKKyMgQnVpbGQgYXMgYSBzdGFuZGFsb25lIHByb2dyYW0sIG5vdCBhIHNoYXJlZCBsaWJy YXJ5CitQUk9HUkFNID0gdGVzdF9jbG9leGVjCitvdmVycmlkZSBDUFBGTEFHUyA6PSAtSSQo bGlicHFfc3JjZGlyKSAkKENQUEZMQUdTKQorCitUQVBfVEVTVFMgPSAxCisKK2VuZGlmCisK K2lmZGVmIFVTRV9QR1hTCitQR19DT05GSUcgPSBwZ19jb25maWcKK1BHWFMgOj0gJChzaGVs bCAkKFBHX0NPTkZJRykgLS1wZ3hzKQoraW5jbHVkZSAkKFBHWFMpCitlbHNlCitzdWJkaXIg PSBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY2xvZXhlYwordG9wX2J1aWxkZGlyID0gLi4vLi4v Li4vLi4KK2luY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKK2lu Y2x1ZGUgJCh0b3Bfc3JjZGlyKS9jb250cmliL2NvbnRyaWItZ2xvYmFsLm1rCitlbmRpZgpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Nsb2V4ZWMvbWVzb24uYnVpbGQg Yi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY2xvZXhlYy9tZXNvbi5idWlsZApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjNjODY1OGIwNGUKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY2xvZXhlYy9tZXNvbi5idWlsZApAQCAt MCwwICsxLDI2IEBACisjIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9jbG9leGVjL21lc29uLmJ1 aWxkCisKKyMgVGhpcyB0ZXN0IGlzIFdpbmRvd3Mtb25seQoraWYgaG9zdF9zeXN0ZW0gIT0g J3dpbmRvd3MnCisgIHN1YmRpcl9kb25lKCkKK2VuZGlmCisKK3Rlc3RfY2xvZXhlY19zb3Vy Y2VzID0gZmlsZXMoJ3Rlc3RfY2xvZXhlYy5jJykKKwordGVzdF9jbG9leGVjID0gZXhlY3V0 YWJsZSgndGVzdF9jbG9leGVjJywKKyAgdGVzdF9jbG9leGVjX3NvdXJjZXMsCisgIGRlcGVu ZGVuY2llczogW2Zyb250ZW5kX2NvZGVdLAorICBsaW5rX3dpdGg6IFtwZ3BvcnRbJyddLCBw Z2NvbW1vblsnJ11dLAorICBrd2FyZ3M6IGRlZmF1bHRfYmluX2FyZ3MsCispCisKK3Rlc3Rz ICs9IHsKKyAgJ25hbWUnOiAndGVzdF9jbG9leGVjJywKKyAgJ3NkJzogbWVzb24uY3VycmVu dF9zb3VyY2VfZGlyKCksCisgICdiZCc6IG1lc29uLmN1cnJlbnRfYnVpbGRfZGlyKCksCisg ICd0YXAnOiB7CisgICAgJ3Rlc3RzJzogWworICAgICAgJ3QvMDAxX2Nsb2V4ZWMucGwnLAor ICAgIF0sCisgIH0sCit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY2xv ZXhlYy90LzAwMV9jbG9leGVjLnBsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Nsb2V4ZWMv dC8wMDFfY2xvZXhlYy5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uNGM1NmViM2E0YmUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfY2xvZXhlYy90LzAwMV9jbG9leGVjLnBsCkBAIC0wLDAgKzEsNjAgQEAKKyMgVGVzdCBP X0NMT0VYRUMgZmxhZyBoYW5kbGluZyBvbiBXaW5kb3dzCisjCisjIFRoaXMgdGVzdCB2ZXJp ZmllcyB0aGF0IGZpbGUgaGFuZGxlcyBvcGVuZWQgd2l0aCBPX0NMT0VYRUMgYXJlIG5vdAor IyBpbmhlcml0ZWQgYnkgY2hpbGQgcHJvY2Vzc2VzLCB3aGlsZSBoYW5kbGVzIG9wZW5lZCB3 aXRob3V0IE9fQ0xPRVhFQworIyBhcmUgaW5oZXJpdGVkLgorCit1c2Ugc3RyaWN0OwordXNl IHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxz OwordXNlIFRlc3Q6Ok1vcmU7Cit1c2UgSVBDOjpSdW4gcXcocnVuKTsKK3VzZSBGaWxlOjpT cGVjOwordXNlIEN3ZCAnYWJzX3BhdGgnOworCitpZiAoISRQb3N0Z3JlU1FMOjpUZXN0OjpV dGlsczo6d2luZG93c19vcykKK3sKKwlwbGFuIHNraXBfYWxsID0+ICd0ZXN0IGlzIFdpbmRv d3Mtc3BlY2lmaWMnOworfQorCitwbGFuIHRlc3RzID0+IDE7CisKK215ICR0ZXN0X3Byb2c7 Citmb3JlYWNoIG15ICRkaXIgKHNwbGl0KC8kQ29uZmlnOjpDb25maWd7cGF0aF9zZXB9Lywg JEVOVntQQVRIfSkpCit7CisJbXkgJGNhbmRpZGF0ZSA9IEZpbGU6OlNwZWMtPmNhdGZpbGUo JGRpciwgJ3Rlc3RfY2xvZXhlYy5leGUnKTsKKwlpZiAoLWYgJGNhbmRpZGF0ZSAmJiAteCAk Y2FuZGlkYXRlKQorCXsKKwkJJHRlc3RfcHJvZyA9ICRjYW5kaWRhdGU7CisJCWxhc3Q7CisJ fQorfQorCitpZiAoISR0ZXN0X3Byb2cpCit7CisJJHRlc3RfcHJvZyA9ICcuL3Rlc3RfY2xv ZXhlYy5leGUnOworfQorCitpZiAoIS1mICR0ZXN0X3Byb2cpCit7CisJQkFJTF9PVVQoInRl c3QgcHJvZ3JhbSBub3QgZm91bmQ6ICR0ZXN0X3Byb2ciKTsKK30KKworbm90ZSgiVXNpbmcg dGVzdCBwcm9ncmFtOiAkdGVzdF9wcm9nIik7CisKK215ICgkc3Rkb3V0LCAkc3RkZXJyKTsK K215ICRyZXN1bHQgPSBydW4gWyAkdGVzdF9wcm9nIF0sICc+JywgXCRzdGRvdXQsICcyPics IFwkc3RkZXJyOworCitub3RlKCJUZXN0IHByb2dyYW0gb3V0cHV0OiIpOworbm90ZSgkc3Rk b3V0KSBpZiAkc3Rkb3V0OworCitpZiAoJHN0ZGVycikKK3sKKwlkaWFnKCJUZXN0IHByb2dy YW0gc3RkZXJyOiIpOworCWRpYWcoJHN0ZGVycik7Cit9CisKK29rKCRyZXN1bHQgJiYgJHN0 ZG91dCA9fiAvU1VDQ0VTUy4qT19DTE9FWEVDIGJlaGF2aW9yIHZlcmlmaWVkL3MsCisgICAi T19DTE9FWEVDIHByZXZlbnRzIGhhbmRsZSBpbmhlcml0YW5jZSIpOworCitkb25lX3Rlc3Rp bmcoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfY2xvZXhlYy90ZXN0X2Nsb2V4ZWMuYyBiL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9jbG9leGVjL3Rlc3RfY2xvZXhlYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi45NmNiZDljODBlNgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90 ZXN0L21vZHVsZXMvdGVzdF9jbG9leGVjL3Rlc3RfY2xvZXhlYy5jCkBAIC0wLDAgKzEsMjY3 IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiB0ZXN0X2Nsb2V4ZWMuYworICoJ CVRlc3QgT19DTE9FWEVDIGZsYWcgaGFuZGxpbmcgb24gV2luZG93cworICoKKyAqIFRoaXMg cHJvZ3JhbSB0ZXN0cyB0aGF0OgorICogMS4gRmlsZSBoYW5kbGVzIG9wZW5lZCB3aXRoIE9f Q0xPRVhFQyBhcmUgTk9UIGluaGVyaXRlZCBieSBjaGlsZCBwcm9jZXNzZXMKKyAqIDIuIEZp bGUgaGFuZGxlcyBvcGVuZWQgd2l0aG91dCBPX0NMT0VYRUMgQVJFIGluaGVyaXRlZCBieSBj aGlsZCBwcm9jZXNzZXMKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAy NSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUg PGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2lmZGVmIFdJTjMyCisjaW5j bHVkZSA8d2luZG93cy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJjb21tb24vZmlsZV91dGls cy5oIgorI2luY2x1ZGUgInBvcnQuaCIKKworc3RhdGljIHZvaWQgcnVuX3BhcmVudF90ZXN0 cyhjb25zdCBjaGFyICp0ZXN0ZmlsZTEsIGNvbnN0IGNoYXIgKnRlc3RmaWxlMik7CitzdGF0 aWMgdm9pZCBydW5fY2hpbGRfdGVzdHMoY29uc3QgY2hhciAqaGFuZGxlMV9zdHIsIGNvbnN0 IGNoYXIgKmhhbmRsZTJfc3RyKTsKK3N0YXRpYyBib29sIHRyeV93cml0ZV90b19oYW5kbGUo SEFORExFIGgsIGNvbnN0IGNoYXIgKmxhYmVsKTsKKworaW50CittYWluKGludCBhcmdjLCBj aGFyICphcmd2W10pCit7CisJY2hhcgkJdGVzdGZpbGUxW01BWFBHUEFUSF07CisJY2hhcgkJ dGVzdGZpbGUyW01BWFBHUEFUSF07CisKKwkvKiBXaW5kb3dzLW9ubHkgdGVzdCAqLworI2lm bmRlZiBXSU4zMgorCWZwcmludGYoc3RkZXJyLCAiVGhpcyB0ZXN0IG9ubHkgcnVucyBvbiBX aW5kb3dzXG4iKTsKKwlyZXR1cm4gMDsKKyNlbmRpZgorCisJaWYgKGFyZ2MgPT0gMykKKwl7 CisJCS8qCisJCSAqIENoaWxkIG1vZGU6IHJlY2VpdmVzIHR3byBoYW5kbGUgdmFsdWVzIGFz IGhleCBzdHJpbmdzCisJCSAqIGFuZCBhdHRlbXB0cyB0byB3cml0ZSB0byB0aGVtCisJCSAq LworCQlydW5fY2hpbGRfdGVzdHMoYXJndlsxXSwgYXJndlsyXSk7CisJCXJldHVybiAwOwor CX0KKwllbHNlIGlmIChhcmdjID09IDEpCisJeworCQkvKgorCQkgKiBQYXJlbnQgbW9kZTog b3BlbnMgZmlsZXMgYW5kIHNwYXducyBjaGlsZAorCQkgKi8KKwkJc25wcmludGYodGVzdGZp bGUxLCBzaXplb2YodGVzdGZpbGUxKSwgInRlc3RfY2xvZXhlY18xXyVkLnRtcCIsIChpbnQp IGdldHBpZCgpKTsKKwkJc25wcmludGYodGVzdGZpbGUyLCBzaXplb2YodGVzdGZpbGUyKSwg InRlc3RfY2xvZXhlY18yXyVkLnRtcCIsIChpbnQpIGdldHBpZCgpKTsKKworCQlydW5fcGFy ZW50X3Rlc3RzKHRlc3RmaWxlMSwgdGVzdGZpbGUyKTsKKworCQkvKiBDbGVhbiB1cCB0ZXN0 IGZpbGVzICovCisJCXVubGluayh0ZXN0ZmlsZTEpOworCQl1bmxpbmsodGVzdGZpbGUyKTsK KworCQlyZXR1cm4gMDsKKwl9CisJZWxzZQorCXsKKwkJZnByaW50ZihzdGRlcnIsICJVc2Fn ZTogJXMgW2hhbmRsZTFfaGV4IGhhbmRsZTJfaGV4XVxuIiwgYXJndlswXSk7CisJCXJldHVy biAxOworCX0KK30KKworc3RhdGljIHZvaWQKK3J1bl9wYXJlbnRfdGVzdHMoY29uc3QgY2hh ciAqdGVzdGZpbGUxLCBjb25zdCBjaGFyICp0ZXN0ZmlsZTIpCit7CisjaWZkZWYgV0lOMzIK KwlpbnQJCQlmZDEsCisJCQkJZmQyOworCUhBTkRMRQkJaDEsCisJCQkJaDI7CisJY2hhcgkJ Y21kbGluZVsxMDI0XTsKKwlTVEFSVFVQSU5GTyBzaTsKKwlQUk9DRVNTX0lORk9STUFUSU9O IHBpOworCURXT1JECQlleGl0X2NvZGU7CisKKwlwcmludGYoIlBhcmVudDogT3BlbmluZyB0 ZXN0IGZpbGVzLi4uXG4iKTsKKworCS8qCisJICogT3BlbiBmaXJzdCBmaWxlIFdJVEggT19D TE9FWEVDIC0gc2hvdWxkIE5PVCBiZSBpbmhlcml0ZWQKKwkgKi8KKwlmZDEgPSBvcGVuKHRl c3RmaWxlMSwgT19SRFdSIHwgT19DUkVBVCB8IE9fVFJVTkMgfCBPX0NMT0VYRUMsIDA2MDAp OworCWlmIChmZDEgPCAwKQorCXsKKwkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gb3Bl biAlczogJXNcbiIsIHRlc3RmaWxlMSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZXhpdCgxKTsK Kwl9CisKKwkvKgorCSAqIE9wZW4gc2Vjb25kIGZpbGUgV0lUSE9VVCBPX0NMT0VYRUMgLSBz aG91bGQgYmUgaW5oZXJpdGVkCisJICovCisJZmQyID0gb3Blbih0ZXN0ZmlsZTIsIE9fUkRX UiB8IE9fQ1JFQVQgfCBPX1RSVU5DLCAwNjAwKTsKKwlpZiAoZmQyIDwgMCkKKwl7CisJCWZw cmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIG9wZW4gJXM6ICVzXG4iLCB0ZXN0ZmlsZTIsIHN0 cmVycm9yKGVycm5vKSk7CisJCWNsb3NlKGZkMSk7CisJCWV4aXQoMSk7CisJfQorCisJLyog R2V0IFdpbmRvd3MgSEFORExFcyBmcm9tIGZpbGUgZGVzY3JpcHRvcnMgKi8KKwloMSA9IChI QU5ETEUpIF9nZXRfb3NmaGFuZGxlKGZkMSk7CisJaDIgPSAoSEFORExFKSBfZ2V0X29zZmhh bmRsZShmZDIpOworCisJaWYgKGgxID09IElOVkFMSURfSEFORExFX1ZBTFVFIHx8IGgyID09 IElOVkFMSURfSEFORExFX1ZBTFVFKQorCXsKKwkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQg dG8gZ2V0IE9TIGhhbmRsZXNcbiIpOworCQljbG9zZShmZDEpOworCQljbG9zZShmZDIpOwor CQlleGl0KDEpOworCX0KKworCXByaW50ZigiUGFyZW50OiBmZDE9JWQgKE9fQ0xPRVhFQykg LT4gSEFORExFPSVwXG4iLCBmZDEsIGgxKTsKKwlwcmludGYoIlBhcmVudDogZmQyPSVkIChu byBPX0NMT0VYRUMpIC0+IEhBTkRMRT0lcFxuIiwgZmQyLCBoMik7CisKKwkvKgorCSAqIFNw YXduIGNoaWxkIHByb2Nlc3Mgd2l0aCBiSW5oZXJpdEhhbmRsZXM9VFJVRSwgcGFzc2luZyBo YW5kbGUgdmFsdWVzCisJICogYXMgaGV4IHN0cmluZ3MKKwkgKi8KKwlzbnByaW50ZihjbWRs aW5lLCBzaXplb2YoY21kbGluZSksICJcIiVzXCIgJXAgJXAiLAorCQkJIEdldENvbW1hbmRM aW5lKCksIGgxLCBoMik7CisKKwkvKgorCSAqIEZpbmQgdGhlIGFjdHVhbCBleGVjdXRhYmxl IHBhdGggYnkgcmVtb3ZpbmcgYW55IGFyZ3VtZW50cyBmcm9tCisJICogR2V0Q29tbWFuZExp bmUoKQorCSAqLworCXsKKwkJY2hhcgkJZXhlX3BhdGhbTUFYX1BBVEhdOworCQljaGFyCSAg ICpzcGFjZV9wb3M7CisKKwkJR2V0TW9kdWxlRmlsZU5hbWUoTlVMTCwgZXhlX3BhdGgsIHNp emVvZihleGVfcGF0aCkpOworCQlzbnByaW50ZihjbWRsaW5lLCBzaXplb2YoY21kbGluZSks ICJcIiVzXCIgJXAgJXAiLAorCQkJCSBleGVfcGF0aCwgaDEsIGgyKTsKKwl9CisKKwltZW1z ZXQoJnNpLCAwLCBzaXplb2Yoc2kpKTsKKwlzaS5jYiA9IHNpemVvZihzaSk7CisJbWVtc2V0 KCZwaSwgMCwgc2l6ZW9mKHBpKSk7CisKKwlwcmludGYoIlBhcmVudDogU3Bhd25pbmcgY2hp bGQgcHJvY2Vzcy4uLlxuIik7CisJcHJpbnRmKCJQYXJlbnQ6IENvbW1hbmQgbGluZTogJXNc biIsIGNtZGxpbmUpOworCisJaWYgKCFDcmVhdGVQcm9jZXNzKE5VTEwsCQkvKiBhcHBsaWNh dGlvbiBuYW1lICovCisJCQkJCSAgIGNtZGxpbmUsCQkvKiBjb21tYW5kIGxpbmUgKi8KKwkJ CQkJICAgTlVMTCwJCS8qIHByb2Nlc3Mgc2VjdXJpdHkgYXR0cmlidXRlcyAqLworCQkJCQkg ICBOVUxMLAkJLyogdGhyZWFkIHNlY3VyaXR5IGF0dHJpYnV0ZXMgKi8KKwkJCQkJICAgVFJV RSwJCS8qIGJJbmhlcml0SGFuZGxlcyAtIENSSVRJQ0FMISAqLworCQkJCQkgICAwLAkJCS8q IGNyZWF0aW9uIGZsYWdzICovCisJCQkJCSAgIE5VTEwsCQkvKiBlbnZpcm9ubWVudCAqLwor CQkJCQkgICBOVUxMLAkJLyogY3VycmVudCBkaXJlY3RvcnkgKi8KKwkJCQkJICAgJnNpLAkJ CS8qIHN0YXJ0dXAgaW5mbyAqLworCQkJCQkgICAmcGkpKQkJLyogcHJvY2VzcyBpbmZvcm1h dGlvbiAqLworCXsKKwkJZnByaW50ZihzdGRlcnIsICJDcmVhdGVQcm9jZXNzIGZhaWxlZDog JWx1XG4iLCBHZXRMYXN0RXJyb3IoKSk7CisJCWNsb3NlKGZkMSk7CisJCWNsb3NlKGZkMik7 CisJCWV4aXQoMSk7CisJfQorCisJcHJpbnRmKCJQYXJlbnQ6IFdhaXRpbmcgZm9yIGNoaWxk IHByb2Nlc3MuLi5cbiIpOworCisJLyogV2FpdCBmb3IgY2hpbGQgdG8gY29tcGxldGUgKi8K KwlXYWl0Rm9yU2luZ2xlT2JqZWN0KHBpLmhQcm9jZXNzLCBJTkZJTklURSk7CisJR2V0RXhp dENvZGVQcm9jZXNzKHBpLmhQcm9jZXNzLCAmZXhpdF9jb2RlKTsKKworCUNsb3NlSGFuZGxl KHBpLmhQcm9jZXNzKTsKKwlDbG9zZUhhbmRsZShwaS5oVGhyZWFkKTsKKworCWNsb3NlKGZk MSk7CisJY2xvc2UoZmQyKTsKKworCXByaW50ZigiUGFyZW50OiBDaGlsZCBleGl0IGNvZGU6 ICVsdVxuIiwgZXhpdF9jb2RlKTsKKworCWlmIChleGl0X2NvZGUgPT0gMCkKKwkJcHJpbnRm KCJQYXJlbnQ6IFNVQ0NFU1MgLSBPX0NMT0VYRUMgYmVoYXZpb3IgdmVyaWZpZWRcbiIpOwor CWVsc2UKKwl7CisJCXByaW50ZigiUGFyZW50OiBGQUlMVVJFIC0gT19DTE9FWEVDIG5vdCB3 b3JraW5nIGNvcnJlY3RseVxuIik7CisJCWV4aXQoMSk7CisJfQorI2VuZGlmCit9CisKK3N0 YXRpYyB2b2lkCitydW5fY2hpbGRfdGVzdHMoY29uc3QgY2hhciAqaGFuZGxlMV9zdHIsIGNv bnN0IGNoYXIgKmhhbmRsZTJfc3RyKQoreworI2lmZGVmIFdJTjMyCisJSEFORExFCQloMSwK KwkJCQloMjsKKwlib29sCQloMV93b3JrZWQsCisJCQkJaDJfd29ya2VkOworCisJLyogUGFy c2UgaGFuZGxlIHZhbHVlcyBmcm9tIGhleCBzdHJpbmdzICovCisJaWYgKHNzY2FuZihoYW5k bGUxX3N0ciwgIiVwIiwgJmgxKSAhPSAxIHx8CisJCXNzY2FuZihoYW5kbGUyX3N0ciwgIiVw IiwgJmgyKSAhPSAxKQorCXsKKwkJZnByaW50ZihzdGRlcnIsICJDaGlsZDogRmFpbGVkIHRv IHBhcnNlIGhhbmRsZSB2YWx1ZXNcbiIpOworCQlleGl0KDEpOworCX0KKworCXByaW50Zigi Q2hpbGQ6IFJlY2VpdmVkIEhBTkRMRTE9JXAgKHNob3VsZCBmYWlsIC0gT19DTE9FWEVDKVxu IiwgaDEpOworCXByaW50ZigiQ2hpbGQ6IFJlY2VpdmVkIEhBTkRMRTI9JXAgKHNob3VsZCB3 b3JrIC0gbm8gT19DTE9FWEVDKVxuIiwgaDIpOworCisJLyoKKwkgKiBUcnkgdG8gd3JpdGUg dG8gYm90aCBoYW5kbGVzCisJICovCisJaDFfd29ya2VkID0gdHJ5X3dyaXRlX3RvX2hhbmRs ZShoMSwgIkhBTkRMRTEiKTsKKwloMl93b3JrZWQgPSB0cnlfd3JpdGVfdG9faGFuZGxlKGgy LCAiSEFORExFMiIpOworCisJcHJpbnRmKCJDaGlsZDogSEFORExFMSAoT19DTE9FWEVDKTog JXNcbiIsCisJCSAgIGgxX3dvcmtlZCA/ICJBQ0NFU1NJQkxFIChCQUQhKSIgOiAiTk9UIEFD Q0VTU0lCTEUgKEdPT0QhKSIpOworCXByaW50ZigiQ2hpbGQ6IEhBTkRMRTIgKG5vIE9fQ0xP RVhFQyk6ICVzXG4iLAorCQkgICBoMl93b3JrZWQgPyAiQUNDRVNTSUJMRSAoR09PRCEpIiA6 ICJOT1QgQUNDRVNTSUJMRSAoQkFEISkiKTsKKworCS8qCisJICogRm9yIE9fQ0xPRVhFQyB0 byB3b3JrIGNvcnJlY3RseToKKwkgKiAtIGgxIHNob3VsZCBOT1QgYmUgYWNjZXNzaWJsZSAo aDFfd29ya2VkID09IGZhbHNlKQorCSAqIC0gaDIgU0hPVUxEIGJlIGFjY2Vzc2libGUgKGgy X3dvcmtlZCA9PSB0cnVlKQorCSAqLworCWlmICghaDFfd29ya2VkICYmIGgyX3dvcmtlZCkK Kwl7CisJCXByaW50ZigiQ2hpbGQ6IFRlc3QgUEFTU0VEIC0gT19DTE9FWEVDIHdvcmtpbmcg Y29ycmVjdGx5XG4iKTsKKwkJZXhpdCgwKTsKKwl9CisJZWxzZQorCXsKKwkJcHJpbnRmKCJD aGlsZDogVGVzdCBGQUlMRUQgLSBPX0NMT0VYRUMgbm90IHdvcmtpbmcgY29ycmVjdGx5XG4i KTsKKwkJZXhpdCgxKTsKKwl9CisjZW5kaWYKK30KKworc3RhdGljIGJvb2wKK3RyeV93cml0 ZV90b19oYW5kbGUoSEFORExFIGgsIGNvbnN0IGNoYXIgKmxhYmVsKQoreworI2lmZGVmIFdJ TjMyCisJY29uc3QgY2hhciAqdGVzdF9kYXRhID0gInRlc3RcbiI7CisJRFdPUkQJCWJ5dGVz X3dyaXR0ZW47CisJQk9PTAkJcmVzdWx0OworCisJcmVzdWx0ID0gV3JpdGVGaWxlKGgsIHRl c3RfZGF0YSwgc3RybGVuKHRlc3RfZGF0YSksICZieXRlc193cml0dGVuLCBOVUxMKTsKKwor CWlmIChyZXN1bHQgJiYgYnl0ZXNfd3JpdHRlbiA9PSBzdHJsZW4odGVzdF9kYXRhKSkKKwl7 CisJCXByaW50ZigiQ2hpbGQ6IFN1Y2Nlc3NmdWxseSB3cm90ZSB0byAlc1xuIiwgbGFiZWwp OworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJZWxzZQorCXsKKwkJcHJpbnRmKCJDaGlsZDogRmFp bGVkIHRvIHdyaXRlIHRvICVzIChlcnJvciAlbHUpXG4iLAorCQkJICAgbGFiZWwsIEdldExh c3RFcnJvcigpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKyNlbHNlCisJcmV0dXJuIGZhbHNl OworI2VuZGlmCit9Ci0tIAoyLjQ2LjAud2luZG93cy4xCgo= --------------YpSYk09FL4m0QmqxchMArFG1--