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.94.2) (envelope-from ) id 1v3jLD-002bTR-Bu for pgsql-hackers@arkaria.postgresql.org; Tue, 30 Sep 2025 23:01:03 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1v3jLB-00DDct-1K for pgsql-hackers@arkaria.postgresql.org; Tue, 30 Sep 2025 23:01:01 +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.94.2) (envelope-from ) id 1v3jLA-00DDcl-HY for pgsql-hackers@lists.postgresql.org; Tue, 30 Sep 2025 23:01:01 +0000 Received: from mail-lf1-x130.google.com ([2a00:1450:4864:20::130]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1v3jL8-000yfG-1k for pgsql-hackers@lists.postgresql.org; Tue, 30 Sep 2025 23:01:00 +0000 Received: by mail-lf1-x130.google.com with SMTP id 2adb3069b0e04-57b7c83cc78so415542e87.1 for ; Tue, 30 Sep 2025 16:00:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1759273252; x=1759878052; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=WMkrBCG/io3Jg8XLgu1ulYjIsNxQ4H08YyiCeYMwFOM=; b=PFGUsOSe6cbwprz/B59UQpK/1E2a0WH3OFlCFCab/fncW/DbrgooNEo+77Xh6PnPfF JARm5ownMkkgTPBd5owsWuKCwE9d7vlm2dBXUFgBbJiJSLs7O+vjocPsZ6s1YSO3Ypzh PqLRfyXwe1TaRbhu906mhKS2O1F/CvneoE1fzE863kY3A19tmULNU7vqX5+/WF2df8D8 DZ5PHzXBQbg01HsmpDXHSzTXMJNg9Fh1vE4eRmx6hPOEnr7Dg4tBreAAdpYfq+/VdIcP OI0dQ9K+qc+DTAHQK17VjXi2fwWBEwVC/2tU46jErksVpRamivm4cC6hSsGsJlBkbwep 6K/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759273252; x=1759878052; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=WMkrBCG/io3Jg8XLgu1ulYjIsNxQ4H08YyiCeYMwFOM=; b=MczYdShdmjF/Bp9BoFbHcXBtyboPgZTjD5nFbJR4mHRj0m6wcpjR1IIhzbT94OIfB8 25YQo2bpxglNxLRlRIcUj0io99NxKkQ9iRGMKJpMZlFVCb2G7OQ9BVfHwCNBNng0T+Ke rwR17AAkNA4GgMvHA1zFcoC7Ohz+fEIyE7wmj9kVKTWrNKTi5Yf50JVpre6p1L5MR8BE KXv/1Hr2QPeesyVoac6Aa/sk4+iNzFmNXVyP+KmO31WDGhjiKZW5XA5d1EM1lLQaVQeR UoTZCHa49MhhFz8mJ+JwcjOnrzqjqEwt28L+JydaUolIDU8YvEX/l+y/xRbBTmC1Bf1w yCeQ== X-Forwarded-Encrypted: i=1; AJvYcCVF34R99t61cdcs+B6sa5/yKa8OeoyZ/PmIxF7tg9z5AlWo7nAky1d1sA8d8uqQqDvf9w8wjPzEPIhGPzHn@lists.postgresql.org X-Gm-Message-State: AOJu0YxuJoSZSdP+Jesk22FvvU1q8kJHJ+PPwkA7mpBX04ZIpQyDVXVL BQj5Rzo28DTsKzY3pgDK2IExXFoKAusG4EeXFiztJK8ekmnO9XL0SYv0oEMtn25y4RGnCdavv9t jGSqDXHBF5NN/YU87y++qCvX4MC5TPSo= X-Gm-Gg: ASbGncv9CXmPDFQt7ICo0Zi5x3TAGywof3PUGkTI7QN49//oEK8uTTKaujJoOfSvcZm qqZtWC3Fxr+fuxY62B8Q31rWd8PIOhmCewMxfgdWeS6eeW1U4l9Lbtkik15p0AIC2R8W71Ln8I5 GG+/paVq85YKsmYBFcuQCSeSAa0yL2kClh76eEVZL3OxEikyPAm08w/nffSvQjR4WZuz+Iye5M+ C2mQxDjqZbyMIX99ZlNA77OxO/sOjpklNPB1Htee/TuXMt9/U3RHrcczoIywUsmnKt8RBpcZj9F t6an/Y4ul1tt2FqYZ1XiZQ== X-Google-Smtp-Source: AGHT+IGL7eYsrUrd4v59VMLO9xc16UVtTt91YJZvX/LTE1gJHwVnqdbakN/FCYrCAPoXeiHp3QJLuPF2ylH4wBDTymg= X-Received: by 2002:a05:6512:3ca3:b0:57b:9526:3b71 with SMTP id 2adb3069b0e04-5897be78296mr1750277e87.2.1759273251740; Tue, 30 Sep 2025 16:00:51 -0700 (PDT) MIME-Version: 1.0 References: <76DBEF5D-EA47-4C30-8D28-97B3B88E2E2D@greg.burd.me> In-Reply-To: <76DBEF5D-EA47-4C30-8D28-97B3B88E2E2D@greg.burd.me> From: David Rowley Date: Wed, 1 Oct 2025 12:00:39 +1300 X-Gm-Features: AS18NWAYnqLYVWiXa44E-922cDIhknXQ7Axl6ZFjf1GQEvcJyJWAanxpw4O3jYE Message-ID: Subject: Re: [PATCH] Add tests for Bitmapset To: Greg Burd Cc: Michael Paquier , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000003bbb7c06400cb90a" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000003bbb7c06400cb90a Content-Type: text/plain; charset="UTF-8" On Wed, 1 Oct 2025 at 01:38, Greg Burd wrote: > v2 attached. Thanks. I looked at this and I think we can do a bit better to simplify the code and standardise what we do when faced with bogus inputs. Here's what I've done: 1. Added helper macros PG_ARG_GETBITMAPSET() and PG_RETURN_BITMAPSET_AS_TEXT(). These themselves save a few hundred lines of code and make the functions easier to read. 2. Standardised that the test function returns NULL when it receives invalid input. e.g if we aim to pass an "int" to the underlying Bitmapset function, if someone calls the test function with an SQL NULL, just return NULL rather than trying to come up with some logic on what we should do about that. 3. I couldn't quite understand the extra parameter to test_bms_get_singleton_member() so I ended up removing it and making the test function return -1 when the set isn't a singleton. I didn't search for discussion about that so I might have missed the specific reason it was done that way. 4. Wrote some comments to try to communicate the standards defined. This aims to offer guidance to callers of these functions and anyone hacking on the module itself in the future. git diff --stat looks like: 4 files changed, 233 insertions(+), 505 deletions(-) Things not done: 1. I didn't update the expected test results. 2. I didn't rationalise the tests. I feel that there's no point in the tests that purposefully pass invalid input to the module's test function. It appears that's aiming to increase coverage on the test module's C code, which I don't quite understand. In any case, due to the helper macros, I don't think removing these will lower the per-source-file line coverage of the module itself. I've not checked my work very thoroughly. I can do that, or you can if you and Michael are ok with the proposed ideas. I'm also not aiming to commandeer anything here. Writing the patch was just the easiest way to communicate the ideas I had. I also wonder how worthwhile it is to try to free the Bitmapsets. I'd have expected these allocations to be in a pretty short-lived memory context. I count 44 calls to bms_free(). David --0000000000003bbb7c06400cb90a Content-Type: application/octet-stream; name="adjustments_to_test_bitmapset_module.patch" Content-Disposition: attachment; filename="adjustments_to_test_bitmapset_module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mg75ecdw0 ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvZXhwZWN0ZWQvdGVz dF9iaXRtYXBzZXQub3V0IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC9leHBlY3Rl ZC90ZXN0X2JpdG1hcHNldC5vdXQKaW5kZXggYmU3YjYzOTljODIuLjJlMjA0ZDY4N2RmIDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L2V4cGVjdGVkL3Rlc3RfYml0 bWFwc2V0Lm91dAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L2V4cGVjdGVk L3Rlc3RfYml0bWFwc2V0Lm91dApAQCAtNjMsNyArNjMsNyBAQCBTRUxFQ1QgdGVzdF9ibXNfYWRk X21lbWJlcignKGIgMTApJywgMTApIEFTIHJlc3VsdDsKIFNFTEVDVCB0ZXN0X2Jtc19hZGRfbWVt YmVyKCcoYiknLCBOVUxMKSBBUyByZXN1bHQ7CiAgcmVzdWx0IAogLS0tLS0tLS0KLSAKKyAoYikK ICgxIHJvdykKIAogLS0gYm1zX3JlcGxhY2VfbWVtYmVycygpCkBAIC03Niw3ICs3Niw3IEBAIFNF TEVDVCB0ZXN0X2Jtc19yZXBsYWNlX21lbWJlcnMoTlVMTCwgJyhiIDEgMiAzKScpIEFTIHJlc3Vs dDsKIFNFTEVDVCB0ZXN0X2Jtc19yZXBsYWNlX21lbWJlcnMoJyhiIDEgMiAzKScsIE5VTEwpIEFT IHJlc3VsdDsKICByZXN1bHQgCiAtLS0tLS0tLQotIAorIChiKQogKDEgcm93KQogCiBTRUxFQ1Qg dGVzdF9ibXNfcmVwbGFjZV9tZW1iZXJzKCcoYiAxIDIgMyknLCAnKGIgMyA1IDYpJykgQVMgcmVz dWx0OwpAQCAtMTA4LDEzICsxMDgsMTMgQEAgU0VMRUNUIHRlc3RfYm1zX3JlcGxhY2VfbWVtYmVy cygnKGIgMSAyIDMgNCA1KScsICcoYiA1MDAgNjAwKScpIEFTIHJlc3VsdDsKIFNFTEVDVCB0ZXN0 X2Jtc19yZXBsYWNlX21lbWJlcnMoJyhiIDEgMiAzKScsIE5VTEwpIEFTIHJlc3VsdDsKICByZXN1 bHQgCiAtLS0tLS0tLQotIAorIChiKQogKDEgcm93KQogCiBTRUxFQ1QgdGVzdF9ibXNfcmVwbGFj ZV9tZW1iZXJzKCcoYiA1KScsIE5VTEwpIEFTIHJlc3VsdDsKICByZXN1bHQgCiAtLS0tLS0tLQot IAorIChiKQogKDEgcm93KQogCiBTRUxFQ1QgdGVzdF9ibXNfcmVwbGFjZV9tZW1iZXJzKE5VTEws ICcoYiA1KScpIEFTIHJlc3VsdDsKQEAgLTEyNiw3ICsxMjYsNyBAQCBTRUxFQ1QgdGVzdF9ibXNf cmVwbGFjZV9tZW1iZXJzKE5VTEwsICcoYiA1KScpIEFTIHJlc3VsdDsKIFNFTEVDVCB0ZXN0X2Jt c19yZXBsYWNlX21lbWJlcnMoTlVMTCwgTlVMTCkgQVMgcmVzdWx0OwogIHJlc3VsdCAKIC0tLS0t LS0tCi0gCisgKGIpCiAoMSByb3cpCiAKIC0tIGJtc19kZWxfbWVtYmVyKCkKQEAgLTEzNSwxMyAr MTM1LDEzIEBAIEVSUk9SOiAgbmVnYXRpdmUgYml0bWFwc2V0IG1lbWJlciBub3QgYWxsb3dlZAog U0VMRUNUIHRlc3RfYm1zX2RlbF9tZW1iZXIoJyhiKScsIDEwKSBBUyByZXN1bHQ7CiAgcmVzdWx0 IAogLS0tLS0tLS0KLSAKKyAoYikKICgxIHJvdykKIAogU0VMRUNUIHRlc3RfYm1zX2RlbF9tZW1i ZXIoJyhiIDEwKScsIDEwKSBBUyByZXN1bHQ7CiAgcmVzdWx0IAogLS0tLS0tLS0KLSAKKyAoYikK ICgxIHJvdykKIAogU0VMRUNUIHRlc3RfYm1zX2RlbF9tZW1iZXIoJyhiIDEwKScsIDUpIEFTIHJl c3VsdDsKQEAgLTE5MywyNiArMTkzLDI2IEBAIFNFTEVDVCB0ZXN0X2Jtc19kZWxfbWVtYmVyKCco YiAxIDUwIDEwMCAyMDApJywgMTAwKSBBUyByZXN1bHQ7CiBTRUxFQ1QgdGVzdF9ibXNfZGVsX21l bWJlcignKGIgNDIpJywgNDIpIEFTIHJlc3VsdDsKICByZXN1bHQgCiAtLS0tLS0tLQotIAorIChi KQogKDEgcm93KQogCiBTRUxFQ1QgdGVzdF9ibXNfZGVsX21lbWJlcignKGIgNSknLCBOVUxMKSBB UyByZXN1bHQ7CiAgcmVzdWx0IAogLS0tLS0tLS0KLSAKKyAoYiA1KQogKDEgcm93KQogCiAtLSBi bXNfZGVsX21lbWJlcnMoKQogU0VMRUNUIHRlc3RfYm1zX2RlbF9tZW1iZXJzKCcoYiknLCAnKGIg MTApJykgQVMgcmVzdWx0OwogIHJlc3VsdCAKIC0tLS0tLS0tCi0gCisgKGIpCiAoMSByb3cpCiAK IFNFTEVDVCB0ZXN0X2Jtc19kZWxfbWVtYmVycygnKGIgMTApJywgJyhiIDEwKScpIEFTIHJlc3Vs dDsKICByZXN1bHQgCiAtLS0tLS0tLQotIAorIChiKQogKDEgcm93KQogCiBTRUxFQ1QgdGVzdF9i bXNfZGVsX21lbWJlcnMoJyhiIDEwKScsICcoYiA1KScpIEFTIHJlc3VsdDsKQEAgLTI2Miw3ICsy NjIsNyBAQCBTRUxFQ1QgdGVzdF9ibXNfZGVsX21lbWJlcnMoJyhiIDUpJywgTlVMTCkgQVMgcmVz dWx0OwogU0VMRUNUIHRlc3RfYm1zX2RlbF9tZW1iZXJzKE5VTEwsICcoYiA1KScpIEFTIHJlc3Vs dDsKICByZXN1bHQgCiAtLS0tLS0tLQotIAorIChiKQogKDEgcm93KQogCiAtLSBibXNfam9pbigp CkBAIC0zMTksNyArMzE5LDcgQEAgU0VMRUNUIHRlc3RfYm1zX2pvaW4oTlVMTCwgJyhiIDUpJykg QVMgcmVzdWx0OwogU0VMRUNUIHRlc3RfYm1zX2pvaW4oTlVMTCwgTlVMTCkgQVMgcmVzdWx0Owog IHJlc3VsdCAKIC0tLS0tLS0tCi0gCisgKGIpCiAoMSByb3cpCiAKIC0tIGJtc191bmlvbigpCkBA IC0zNDEsNyArMzQxLDcgQEAgU0VMRUNUIHRlc3RfYm1zX3VuaW9uKCcoYiAxIDMgNSknLCAnKGIp JykgQVMgcmVzdWx0OwogU0VMRUNUIHRlc3RfYm1zX3VuaW9uKCcoYiknLCAnKGIpJykgQVMgcmVz dWx0OwogIHJlc3VsdCAKIC0tLS0tLS0tCi0gCisgKGIpCiAoMSByb3cpCiAKIC0tIE92ZXJsYXBw aW5nIHJhbmdlcwpAQCAtMzgzLDcgKzM4Myw3IEBAIFNFTEVDVCB0ZXN0X2Jtc191bmlvbihOVUxM LCAnKGIgNSknKSBBUyByZXN1bHQ7CiBTRUxFQ1QgdGVzdF9ibXNfdW5pb24oTlVMTCwgTlVMTCkg QVMgcmVzdWx0OwogIHJlc3VsdCAKIC0tLS0tLS0tCi0gCisgKGIpCiAoMSByb3cpCiAKIC0tIGJt c19pbnRlcnNlY3QoKQpAQCAtMzk4LDE0ICszOTgsMTQgQEAgU0VMRUNUIHRlc3RfYm1zX2ludGVy c2VjdCgnKGIgMSAzIDUpJywgJyhiIDMgNSA3KScpIEFTIHJlc3VsdDsKIFNFTEVDVCB0ZXN0X2Jt c19pbnRlcnNlY3QoJyhiIDEgMyA1KScsICcoYiAyIDQgNiknKSBBUyByZXN1bHQ7CiAgcmVzdWx0 IAogLS0tLS0tLS0KLSAKKyAoYikKICgxIHJvdykKIAogLS0gSW50ZXJzZWN0IHdpdGggZW1wdHkK IFNFTEVDVCB0ZXN0X2Jtc19pbnRlcnNlY3QoJyhiIDEgMyA1KScsICcoYiknKSBBUyByZXN1bHQ7 CiAgcmVzdWx0IAogLS0tLS0tLS0KLSAKKyAoYikKICgxIHJvdykKIAogLS0gSW50ZXJzZWN0IHdp dGggdmFycnlpbmcgd29yZCBjb3VudHMKQEAgLTQyNSwyNSArNDI1LDI1IEBAIFNFTEVDVCB0ZXN0 X2Jtc19pbnRlcnNlY3QoJyhiIDEgMiAzIDQgNSknLCAnKGIgMSAzMDApJykgQVMgcmVzdWx0Owog U0VMRUNUIHRlc3RfYm1zX2ludGVyc2VjdCgnKGIgMSknLCAnKGIgMiknKSBBUyByZXN1bHQ7CiAg cmVzdWx0IAogLS0tLS0tLS0KLSAKKyAoYikKICgxIHJvdykKIAogU0VMRUNUIHRlc3RfYm1zX2lu dGVyc2VjdCgnKGIgNSknLCBOVUxMKSBBUyByZXN1bHQ7CiAgcmVzdWx0IAogLS0tLS0tLS0KLSAK KyAoYikKICgxIHJvdykKIAogU0VMRUNUIHRlc3RfYm1zX2ludGVyc2VjdChOVUxMLCAnKGIgNSkn KSBBUyByZXN1bHQ7CiAgcmVzdWx0IAogLS0tLS0tLS0KLSAKKyAoYikKICgxIHJvdykKIAogU0VM RUNUIHRlc3RfYm1zX2ludGVyc2VjdChOVUxMLCBOVUxMKSBBUyByZXN1bHQ7CiAgcmVzdWx0IAog LS0tLS0tLS0KLSAKKyAoYikKICgxIHJvdykKIAogLS0gYm1zX2ludF9tZW1iZXJzKCkKQEAgLTQ1 OCwxNCArNDU4LDE0IEBAIFNFTEVDVCB0ZXN0X2Jtc19pbnRfbWVtYmVycygnKGIgMSAzIDUpJywg JyhiIDMgNSA3KScpIEFTIHJlc3VsdDsKIFNFTEVDVCB0ZXN0X2Jtc19pbnRfbWVtYmVycygnKGIg MSAzIDUpJywgJyhiIDIgNCA2KScpIEFTIHJlc3VsdDsKICByZXN1bHQgCiAtLS0tLS0tLQotIAor IChiKQogKDEgcm93KQogCiAtLSBJbnRlcnNlY3Qgd2l0aCBlbXB0eQogU0VMRUNUIHRlc3RfYm1z X2ludF9tZW1iZXJzKCcoYiAxIDMgNSknLCAnKGIpJykgQVMgcmVzdWx0OwogIHJlc3VsdCAKIC0t LS0tLS0tCi0gCisgKGIpCiAoMSByb3cpCiAKIC0tIE11bHRpcGxlIG1lbWJlcnMKQEAgLTQ3OSwy NSArNDc5LDI1IEBAIFNFTEVDVCB0ZXN0X2Jtc19pbnRfbWVtYmVycygnKGIgMCAzMSAzMiA2MyA2 NCknLCAnKGIgMzEgMzIgNjQgNjUpJykgQVMgcmVzdWx0OwogU0VMRUNUIHRlc3RfYm1zX2ludF9t ZW1iZXJzKCcoYiAxKScsICcoYiAyKScpIEFTIHJlc3VsdDsKICByZXN1bHQgCiAtLS0tLS0tLQot IAorIChiKQogKDEgcm93KQogCiBTRUxFQ1QgdGVzdF9ibXNfaW50X21lbWJlcnMoJyhiIDUpJywg TlVMTCkgQVMgcmVzdWx0OwogIHJlc3VsdCAKIC0tLS0tLS0tCi0gCisgKGIpCiAoMSByb3cpCiAK IFNFTEVDVCB0ZXN0X2Jtc19pbnRfbWVtYmVycyhOVUxMLCAnKGIgNSknKSBBUyByZXN1bHQ7CiAg cmVzdWx0IAogLS0tLS0tLS0KLSAKKyAoYikKICgxIHJvdykKIAogU0VMRUNUIHRlc3RfYm1zX2lu dF9tZW1iZXJzKE5VTEwsIE5VTEwpIEFTIHJlc3VsdDsKICByZXN1bHQgCiAtLS0tLS0tLQotIAor IChiKQogKDEgcm93KQogCiAtLSBibXNfZGlmZmVyZW5jZSgpCkBAIC01MTksMTQgKzUxOSwxNCBA QCBTRUxFQ1QgdGVzdF9ibXNfZGlmZmVyZW5jZSgnKGIgMSAzIDUpJywgJyhiIDIgNCA2KScpIEFT IHJlc3VsdDsKIFNFTEVDVCB0ZXN0X2Jtc19kaWZmZXJlbmNlKCcoYiAxIDMgNSknLCAnKGIgMSAz IDUpJykgQVMgcmVzdWx0OwogIHJlc3VsdCAKIC0tLS0tLS0tCi0gCisgKGIpCiAoMSByb3cpCiAK IC0tIFN1YnN0cmFjdGlvbiB0byBlbXB0eQogU0VMRUNUIHRlc3RfYm1zX2RpZmZlcmVuY2UoJyhi IDQyKScsICcoYiA0MiknKSBBUyByZXN1bHQ7CiAgcmVzdWx0IAogLS0tLS0tLS0KLSAKKyAoYikK ICgxIHJvdykKIAogLS0gU3VidHJhY3Rpb24gZWRnZSBjYXNlCkBAIC01NTYsNyArNTU2LDcgQEAg U0VMRUNUIHRlc3RfYm1zX2RpZmZlcmVuY2UoJyhiIDEgMiAxMDAgMjAwKScsICcoYiAxIDIpJykg QVMgcmVzdWx0OwogU0VMRUNUIHRlc3RfYm1zX2RpZmZlcmVuY2UoJyhiIDUpJywgJyhiIDUgMTAp JykgQVMgcmVzdWx0OwogIHJlc3VsdCAKIC0tLS0tLS0tCi0gCisgKGIpCiAoMSByb3cpCiAKIFNF TEVDVCB0ZXN0X2Jtc19kaWZmZXJlbmNlKCcoYiA1KScsIE5VTEwpIEFTIHJlc3VsdDsKQEAgLTU2 OCwxMyArNTY4LDEzIEBAIFNFTEVDVCB0ZXN0X2Jtc19kaWZmZXJlbmNlKCcoYiA1KScsIE5VTEwp IEFTIHJlc3VsdDsKIFNFTEVDVCB0ZXN0X2Jtc19kaWZmZXJlbmNlKE5VTEwsICcoYiA1KScpIEFT IHJlc3VsdDsKICByZXN1bHQgCiAtLS0tLS0tLQotIAorIChiKQogKDEgcm93KQogCiBTRUxFQ1Qg dGVzdF9ibXNfZGlmZmVyZW5jZShOVUxMLCBOVUxMKSBBUyByZXN1bHQ7CiAgcmVzdWx0IAogLS0t LS0tLS0KLSAKKyAoYikKICgxIHJvdykKIAogLS0gYm1zX2lzX21lbWJlcigpCkBAIC04ODcsMTkg Kzg4NywxOSBAQCBTRUxFQ1QgbGVuZ3RoKHRlc3RfYm1zX2FkZF9yYW5nZSgnKGIgMSAyKScsIDIw MCwgMjUwKSkgQVMgcmVzdWx0OwogU0VMRUNUIHRlc3RfYm1zX2FkZF9yYW5nZSgnKGIgNSknLCA1 LCBOVUxMKSBBUyByZXN1bHQ7CiAgcmVzdWx0IAogLS0tLS0tLS0KLSAKKyAoYiA1KQogKDEgcm93 KQogCiBTRUxFQ1QgdGVzdF9ibXNfYWRkX3JhbmdlKCcoYiA1KScsIE5VTEwsIDEwKSBBUyByZXN1 bHQ7CiAgcmVzdWx0IAogLS0tLS0tLS0KLSAKKyAoYiA1KQogKDEgcm93KQogCiBTRUxFQ1QgdGVz dF9ibXNfYWRkX3JhbmdlKCcoYiA1KScsIE5VTEwsIE5VTEwpIEFTIHJlc3VsdDsKICByZXN1bHQg CiAtLS0tLS0tLQotIAorIChiIDUpCiAoMSByb3cpCiAKIFNFTEVDVCB0ZXN0X2Jtc19hZGRfcmFu Z2UoTlVMTCwgNSwgMTApIEFTIHJlc3VsdDsKQEAgLTkxMSwxMyArOTExLDEzIEBAIFNFTEVDVCB0 ZXN0X2Jtc19hZGRfcmFuZ2UoTlVMTCwgNSwgMTApIEFTIHJlc3VsdDsKIFNFTEVDVCB0ZXN0X2Jt c19hZGRfcmFuZ2UoTlVMTCwgMTAsIDUpIEFTIHJlc3VsdDsKICByZXN1bHQgCiAtLS0tLS0tLQot IAorIChiKQogKDEgcm93KQogCiBTRUxFQ1QgdGVzdF9ibXNfYWRkX3JhbmdlKE5VTEwsIE5VTEws IE5VTEwpIEFTIHJlc3VsdDsKICByZXN1bHQgCiAtLS0tLS0tLQotIAorIChiKQogKDEgcm93KQog CiAtLSBibXNfbWVtYmVyc2hpcCgpCkBAIC0xNDIxLDcgKzE0MjEsNyBAQCBTRUxFQ1QgdGVzdF9i bXNfc3Vic2V0X2NvbXBhcmUoTlVMTCwgTlVMTCkgQVMgcmVzdWx0OwogU0VMRUNUIHRlc3RfYm1z X2NvcHkoTlVMTCkgQVMgcmVzdWx0OwogIHJlc3VsdCAKIC0tLS0tLS0tCi0gCisgKGIpCiAoMSBy b3cpCiAKIFNFTEVDVCB0ZXN0X2Jtc19jb3B5KCcoYiAxIDMgNSA3KScpIEFTIHJlc3VsdDsKQEAg LTE0MzQsNyArMTQzNCw3IEBAIFNFTEVDVCB0ZXN0X2Jtc19jb3B5KCcoYiAxIDMgNSA3KScpIEFT IHJlc3VsdDsKIFNFTEVDVCB0ZXN0X2Jtc19jb3B5KE5VTEwpIEFTIHJlc3VsdDsKICByZXN1bHQg CiAtLS0tLS0tLQotIAorIChiKQogKDEgcm93KQogCiAtLSBibXNfYWRkX21lbWJlcnMoKQpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC9zcWwvdGVzdF9iaXRtYXBz ZXQuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC9zcWwvdGVzdF9iaXRtYXBz ZXQuc3FsCmluZGV4IGM2ZTZiY2U2MGEzLi5jN2MzY2NlOTNkMyAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC9zcWwvdGVzdF9iaXRtYXBzZXQuc3FsCisrKyBiL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBzZXQvc3FsL3Rlc3RfYml0bWFwc2V0LnNxbApAQCAt MjU4LDE0ICsyNTgsMTMgQEAgU0VMRUNUIHRlc3RfYm1zX3NpbmdsZXRvbl9tZW1iZXIoJyhiIDQy KScpIEFTIHJlc3VsdDsKIFNFTEVDVCB0ZXN0X2Jtc19zaW5nbGV0b25fbWVtYmVyKE5VTEwpIEFT IHJlc3VsdDsKIAogLS0gYm1zX2dldF9zaW5nbGV0b25fbWVtYmVyKCkKLVNFTEVDVCB0ZXN0X2Jt c19nZXRfc2luZ2xldG9uX21lbWJlcignKGIpJywgMTAwMCk7CitTRUxFQ1QgdGVzdF9ibXNfZ2V0 X3NpbmdsZXRvbl9tZW1iZXIoJyhiKScpOworLS0gVHJ5IHdpdGggYW4gZW1wdHkgc2V0CitTRUxF Q1QgdGVzdF9ibXNfZ2V0X3NpbmdsZXRvbl9tZW1iZXIoTlVMTCkgQVMgcmVzdWx0OwogLS0gTm90 IGEgc2luZ2xldG9uLCByZXR1cm5zIGlucHV0IGRlZmF1bHQKLVNFTEVDVCB0ZXN0X2Jtc19nZXRf c2luZ2xldG9uX21lbWJlcignKGIgMyA2KScsIDEwMDApIEFTIHJlc3VsdDsKK1NFTEVDVCB0ZXN0 X2Jtc19nZXRfc2luZ2xldG9uX21lbWJlcignKGIgMyA2KScpIEFTIHJlc3VsdDsKIC0tIFNpbmds ZXRvbmUsIHJldHVybnMgc29sZSBtZW1iZXIKLVNFTEVDVCB0ZXN0X2Jtc19nZXRfc2luZ2xldG9u X21lbWJlcignKGIgNDAwKScsIDEwMDApIEFTIHJlc3VsdDsKLS0tIFRlc3QgbW9kdWxlIGNoZWNr cwotU0VMRUNUIHRlc3RfYm1zX2dldF9zaW5nbGV0b25fbWVtYmVyKCcnLCAxMDAwKSBBUyByZXN1 bHQ7Ci1TRUxFQ1QgdGVzdF9ibXNfZ2V0X3NpbmdsZXRvbl9tZW1iZXIoTlVMTCwgLTEpIEFTIHJl c3VsdDsKK1NFTEVDVCB0ZXN0X2Jtc19nZXRfc2luZ2xldG9uX21lbWJlcignKGIgNDAwKScpIEFT IHJlc3VsdDsKIAogLS0gYm1zX25leHRfbWVtYmVyKCkgYW5kIGJtc19wcmV2X21lbWJlcigpCiAt LSBGaXJzdCBtZW1iZXIKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9iaXRtYXBz ZXQvdGVzdF9iaXRtYXBzZXQtLTEuMC5zcWwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFw c2V0L3Rlc3RfYml0bWFwc2V0LS0xLjAuc3FsCmluZGV4IGI5NWM0ZDBkZGE1Li4yMjdlY2I1YWEz YiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC90ZXN0X2JpdG1h cHNldC0tMS4wLnNxbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L3Rlc3Rf Yml0bWFwc2V0LS0xLjAuc3FsCkBAIC02OCw3ICs2OCw3IEBAIENSRUFURSBGVU5DVElPTiB0ZXN0 X2Jtc19zaW5nbGV0b25fbWVtYmVyKHRleHQpCiBSRVRVUk5TIGludGVnZXIgU1RSSUNUCiBBUyAn TU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOwogCi1DUkVBVEUgRlVOQ1RJT04gdGVzdF9ibXNf Z2V0X3NpbmdsZXRvbl9tZW1iZXIodGV4dCwgaW50ZWdlcikKK0NSRUFURSBGVU5DVElPTiB0ZXN0 X2Jtc19nZXRfc2luZ2xldG9uX21lbWJlcih0ZXh0KQogUkVUVVJOUyBpbnRlZ2VyCiBBUyAnTU9E VUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBDOwogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfYml0bWFwc2V0L3Rlc3RfYml0bWFwc2V0LmMgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf Yml0bWFwc2V0L3Rlc3RfYml0bWFwc2V0LmMKaW5kZXggMmU4MjEzMjA4MzYuLjg4ZmQ3MWQ1NDk1 IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfYml0bWFwc2V0L3Rlc3RfYml0bWFw c2V0LmMKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2JpdG1hcHNldC90ZXN0X2JpdG1hcHNl dC5jCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAibm9kZXMvcGdfbGlzdC5oIgogI2luY2x1 ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvdGltZXN0YW1wLmgiCi0jaW5j bHVkZSAidmFyYXR0LmgiCiAKIFBHX01PRFVMRV9NQUdJQzsKIApAQCAtODQsMTA1ICs4MywxMDkg QEAgUEdfRlVOQ1RJT05fSU5GT19WMSh0ZXN0X3JhbmRvbV9vcGVyYXRpb25zKTsKIAkJCQkgI2V4 cHIsIF9fRklMRV9fLCBfX0xJTkVfXyk7IFwKIAl9IHdoaWxlICgwKQogCitzdGF0aWMgY29uc3Qg Y2hhciAqZW1wdHlzZXQgPSAiKGIpIjsKKwogLyogRW5jb2RlL0RlY29kZSB0by9mcm9tIFRFWFQg YW5kIEJpdG1hcHNldCAqLwotI2RlZmluZSBCSVRNQVBTRVRfVE9fVEVYVChibXMpIGNzdHJpbmdf dG9fdGV4dChub2RlVG9TdHJpbmcoYm1zKSkKKyNkZWZpbmUgQklUTUFQU0VUX1RPX1RFWFQoYm1z KSBjc3RyaW5nX3RvX3RleHQoYm1zID8gbm9kZVRvU3RyaW5nKGJtcykgOiBlbXB0eXNldCkKICNk ZWZpbmUgVEVYVF9UT19CSVRNQVBTRVQoc3RyKSAoKEJpdG1hcHNldCAqKSBzdHJpbmdUb05vZGUo dGV4dF90b19jc3RyaW5nKHN0cikpKQogCisvKiBIZWxwZXIgbWFjcm8gdG8gZmV0Y2ggVGV4dCBw YXJhbWV0ZXJzIGFzIEJpdG1hcHNldHMuIFNRTC1OVUxMIG1lYW5zIGVtcHR5IHNldCAqLworI2Rl ZmluZSBQR19BUkdfR0VUQklUTUFQU0VUKG4pIFwKKwkoUEdfQVJHSVNOVUxMKG4pID8gTlVMTCA6 IFRFWFRfVE9fQklUTUFQU0VUKFBHX0dFVEFSR19URVhUX1BQKG4pKSkKKworLyoKKyAqIEhlbHBl ciBtYWNybyB0byBoYW5kbGUgY29udmVydGluZyBzZXRzIGJhY2sgdG8gdGV4dCwgZnJlZWluZyB0 aGUgc2V0IGFuZAorICogcmV0dXJuaW5nIHRoZSByZXN1bHRpbmcgdGV4dCByZXByZXNlbnRhdGlv biBvZiB0aGUgc2V0LiAgQmV3YXJlIG9mIGRvdWJsZQorICogZXZhbHVhdGlvbiBoYXphcmQgb2Yg J2JtcycuCisgKi8KKyNkZWZpbmUgUEdfUkVUVVJOX0JJVE1BUFNFVF9BU19URVhUKGJtcykgXAor CWRvIHsgXAorCQl0ZXh0CSAgICpyZXN1bHQgPSBCSVRNQVBTRVRfVE9fVEVYVChibXMpOyBcCisJ CWJtc19mcmVlKGJtcyk7IFwKKwkJUEdfUkVUVVJOX1RFWFRfUChyZXN1bHQpOyBcCisJfSB3aGls ZSAoMCk7CisKIC8qCiAgKiBJbmRpdmlkdWFsIHRlc3QgZnVuY3Rpb25zIGZvciBlYWNoIGJpdG1h cHNldCBBUEkgZnVuY3Rpb24KKyAqCisgKiBQcmltYXJpbHksIHdlIGFpbSB0byBrZWVwIHRoZXNl IGFzIGNsb3NlIHRvIHNpbXBsZSB3cmFwcGVyIGZ1bmN0aW9ucyBhcworICogcG9zc2libGUgaW4g b3JkZXIgdG8gcHVibGlzaCB0aGUgZnVuY3Rpb25zIG9mIGJpdG1hcHNldC5jIHRvIHRoZSBTUUwg bGF5ZXIKKyAqIHdpdGggYXMgbGl0dGxlIGludGVyZmVyZW5jZSBhcyBwb3NzaWJsZS4gIFdlIG9w dCB0byByZXR1cm4gU1FMIE5VTEwgaW4KKyAqIGNhc2VzIHdoZXJlIHRoZSBpbnB1dCBnaXZlbiB0 byB0aGUgU1FMIGZ1bmN0aW9uIGlzbid0IHZhbGlkIHRvIHBhc3MgdG8gdGhlCisgKiB1bmRlcmx5 aW5nIGJpdG1hcHNldC5jIGZ1bmN0aW9uLiAgRm9yIGV4YW1wbGUgd2UgY2Fubm90IGRvIG11Y2gg dXNlZnVsCisgKiB0ZXN0aW5nIGlmIHNvbWVvbmUgY2FsbHMgdGVzdF9ibXNfbWFrZV9zaW5nbGV0 b24oTlVMTCkgc2luY2UKKyAqIGJtc19tYWtlX3NpbmdsZXRvbigpIGV4cGVjdHMgYW4gaW50ZWdl ciBhcmd1bWVudC4KKyAqCisgKiBGb3IgZnVuY3Rpb24gYXJndW1lbnRzIHdoaWNoIGFyZSB0byBi ZSBjb252ZXJ0ZWQgdG8gQml0bWFwc2V0cywgd2UgYWNjZXB0CisgKiBTUUwgTlVMTCBhcyBhIHZh bGlkIGFyZ3VtZW50IHRvIG1lYW4gYW4gZW1wdHkgc2V0LiAgT3B0aW9uYWxseSBjYWxsZXJzIG1h eQorICogcGFzcyAnKGIpJy4KKyAqCisgKiBGb3IgdGhlIHRlc3QgZnVuY3Rpb25zIHdoaWNoIHJl dHVybiBhIEJpdG1hcHNldCwgdGhlc2UgYXJlIGNvbnZlcnRlZCBiYWNrCisgKiB0byBUZXh0IHdp dGggZW1wdHkgc2V0cyBiZWluZyByZXByZXNlbnRlZCBhcyAnKGIpJy4KICAqLwogCiBEYXR1bQog dGVzdF9ibXNfYWRkX21lbWJlcihQR19GVU5DVElPTl9BUkdTKQogeworCUJpdG1hcHNldCAgKmJt czsKIAlpbnQJCQltZW1iZXI7Ci0JQml0bWFwc2V0ICAqYm1zID0gTlVMTDsKLQl0ZXh0CSAgICpy ZXN1bHQ7CiAKIAlpZiAoUEdfQVJHSVNOVUxMKDEpKQotCQlQR19SRVRVUk5fTlVMTCgpOwotCi0J aWYgKCFQR19BUkdJU05VTEwoMCkpCi0JCWJtcyA9IFRFWFRfVE9fQklUTUFQU0VUKFBHX0dFVEFS R19URVhUX1BQKDApKTsKKwkJUEdfUkVUVVJOX05VTEwoKTsJCS8qIGludmFsaWQgaW5wdXQgKi8K IAorCWJtcyA9IFBHX0FSR19HRVRCSVRNQVBTRVQoMCk7CiAJbWVtYmVyID0gUEdfR0VUQVJHX0lO VDMyKDEpOwotCWJtcyA9IGJtc19hZGRfbWVtYmVyKGJtcywgbWVtYmVyKTsKLQlyZXN1bHQgPSBC SVRNQVBTRVRfVE9fVEVYVChibXMpOwogCi0JaWYgKGJtcykKLQkJYm1zX2ZyZWUoYm1zKTsKKwli bXMgPSBibXNfYWRkX21lbWJlcihibXMsIG1lbWJlcik7CiAKLQlQR19SRVRVUk5fVEVYVF9QKHJl c3VsdCk7CisJUEdfUkVUVVJOX0JJVE1BUFNFVF9BU19URVhUKGJtcyk7CiB9CiAKIERhdHVtCiB0 ZXN0X2Jtc19hZGRfbWVtYmVycyhQR19GVU5DVElPTl9BUkdTKQogewotCUJpdG1hcHNldCAgKmJt czEgPSBOVUxMLAotCQkJICAgKmJtczIgPSBOVUxMOwotCXRleHQJICAgKnJlc3VsdDsKKwlCaXRt YXBzZXQgICpibXMxID0gUEdfQVJHX0dFVEJJVE1BUFNFVCgwKTsKKwlCaXRtYXBzZXQgICpibXMy ID0gUEdfQVJHX0dFVEJJVE1BUFNFVCgxKTsKIAotCWlmICghUEdfQVJHSVNOVUxMKDApKQotCQli bXMxID0gVEVYVF9UT19CSVRNQVBTRVQoUEdfR0VUQVJHX1RFWFRfUFAoMCkpOwotCi0JaWYgKCFQ R19BUkdJU05VTEwoMSkpCi0JCWJtczIgPSBURVhUX1RPX0JJVE1BUFNFVChQR19HRVRBUkdfVEVY VF9QUCgxKSk7Ci0KLQkvKiBJTVBPUlRBTlQ6IGJtc19hZGRfbWVtYmVycyBtb2RpZmllcy9mcmVl cyB0aGUgZmlyc3QgYXJndW1lbnQgKi8KKwkvKiBsZWZ0IGlucHV0IGlzIHJlY3ljbGVkICovCiAJ Ym1zMSA9IGJtc19hZGRfbWVtYmVycyhibXMxLCBibXMyKTsKKwlibXNfZnJlZShibXMyKTsKIAot CWlmIChibXMyKQotCQlibXNfZnJlZShibXMyKTsKLQotCXJlc3VsdCA9IEJJVE1BUFNFVF9UT19U RVhUKGJtczEpOwotCWJtc19mcmVlKGJtczEpOwotCi0JUEdfUkVUVVJOX1RFWFRfUChyZXN1bHQp OworCVBHX1JFVFVSTl9CSVRNQVBTRVRfQVNfVEVYVChibXMxKTsKIH0KIAogRGF0dW0KIHRlc3Rf Ym1zX2RlbF9tZW1iZXIoUEdfRlVOQ1RJT05fQVJHUykKIHsKLQlCaXRtYXBzZXQgICpibXMgPSBO VUxMOworCUJpdG1hcHNldCAgKmJtczsKIAlpbnQzMgkJbWVtYmVyOwotCXRleHQJICAgKnJlc3Vs dDsKIAogCWlmIChQR19BUkdJU05VTEwoMSkpCi0JCVBHX1JFVFVSTl9OVUxMKCk7Ci0KLQlpZiAo IVBHX0FSR0lTTlVMTCgwKSkKLQkJYm1zID0gVEVYVF9UT19CSVRNQVBTRVQoUEdfR0VUQVJHX1RF WFRfUFAoMCkpOworCQlQR19SRVRVUk5fTlVMTCgpOwkJLyogaW52YWxpZCBpbnB1dCAqLwogCisJ Ym1zID0gUEdfQVJHX0dFVEJJVE1BUFNFVCgwKTsKIAltZW1iZXIgPSBQR19HRVRBUkdfSU5UMzIo MSk7Ci0JYm1zID0gYm1zX2RlbF9tZW1iZXIoYm1zLCBtZW1iZXIpOwotCi0JaWYgKGJtc19pc19l bXB0eShibXMpKQotCQlQR19SRVRVUk5fTlVMTCgpOwogCi0JcmVzdWx0ID0gQklUTUFQU0VUX1RP X1RFWFQoYm1zKTsKLQlibXNfZnJlZShibXMpOworCWJtcyA9IGJtc19kZWxfbWVtYmVyKGJtcywg bWVtYmVyKTsKIAotCVBHX1JFVFVSTl9URVhUX1AocmVzdWx0KTsKKwlQR19SRVRVUk5fQklUTUFQ U0VUX0FTX1RFWFQoYm1zKTsKIH0KIAogRGF0dW0KIHRlc3RfYm1zX2lzX21lbWJlcihQR19GVU5D VElPTl9BUkdTKQogewotCUJpdG1hcHNldCAgKmJtcyA9IE5VTEw7CisJQml0bWFwc2V0ICAqYm1z OwogCWludDMyCQltZW1iZXI7CiAJYm9vbAkJcmVzdWx0OwogCiAJaWYgKFBHX0FSR0lTTlVMTCgx KSkKLQkJUEdfUkVUVVJOX0JPT0woZmFsc2UpOwotCi0JaWYgKCFQR19BUkdJU05VTEwoMCkpCi0J CWJtcyA9IFRFWFRfVE9fQklUTUFQU0VUKFBHX0dFVEFSR19URVhUX1BQKDApKTsKKwkJUEdfUkVU VVJOX05VTEwoKTsJCS8qIGludmFsaWQgaW5wdXQgKi8KIAorCWJtcyA9IFBHX0FSR19HRVRCSVRN QVBTRVQoMCk7CiAJbWVtYmVyID0gUEdfR0VUQVJHX0lOVDMyKDEpOwotCXJlc3VsdCA9IGJtc19p c19tZW1iZXIobWVtYmVyLCBibXMpOwogCi0JaWYgKGJtcykKLQkJYm1zX2ZyZWUoYm1zKTsKKwly ZXN1bHQgPSBibXNfaXNfbWVtYmVyKG1lbWJlciwgYm1zKTsKKwlibXNfZnJlZShibXMpOwogCiAJ UEdfUkVUVVJOX0JPT0wocmVzdWx0KTsKIH0KQEAgLTE5MCwxNiArMTkzLDExIEBAIHRlc3RfYm1z X2lzX21lbWJlcihQR19GVU5DVElPTl9BUkdTKQogRGF0dW0KIHRlc3RfYm1zX251bV9tZW1iZXJz KFBHX0ZVTkNUSU9OX0FSR1MpCiB7Ci0JQml0bWFwc2V0ICAqYm1zID0gTlVMTDsKLQlpbnQJCQly ZXN1bHQgPSAwOwotCi0JaWYgKCFQR19BUkdJU05VTEwoMCkpCi0JCWJtcyA9IFRFWFRfVE9fQklU TUFQU0VUKFBHX0dFVEFSR19URVhUX1BQKDApKTsKKwlCaXRtYXBzZXQgICpibXMgPSBQR19BUkdf R0VUQklUTUFQU0VUKDApOworCWludAkJCXJlc3VsdDsKIAogCXJlc3VsdCA9IGJtc19udW1fbWVt YmVycyhibXMpOwotCi0JaWYgKGJtcykKLQkJYm1zX2ZyZWUoYm1zKTsKKwlibXNfZnJlZShibXMp OwogCiAJUEdfUkVUVVJOX0lOVDMyKHJlc3VsdCk7CiB9CkBAIC0yMDcsNjUgKzIwNSw0MCBAQCB0 ZXN0X2Jtc19udW1fbWVtYmVycyhQR19GVU5DVElPTl9BUkdTKQogRGF0dW0KIHRlc3RfYm1zX21h a2Vfc2luZ2xldG9uKFBHX0ZVTkNUSU9OX0FSR1MpCiB7Ci0JaW50MzIJCW1lbWJlcjsKIAlCaXRt YXBzZXQgICpibXM7Ci0JdGV4dAkgICAqcmVzdWx0OworCWludDMyCQltZW1iZXI7CiAKIAlpZiAo UEdfQVJHSVNOVUxMKDApKQotCQlQR19SRVRVUk5fTlVMTCgpOworCQlQR19SRVRVUk5fTlVMTCgp OwkJLyogaW52YWxpZCBpbnB1dCAqLwogCiAJbWVtYmVyID0gUEdfR0VUQVJHX0lOVDMyKDApOwog CWJtcyA9IGJtc19tYWtlX3NpbmdsZXRvbihtZW1iZXIpOwogCi0JcmVzdWx0ID0gQklUTUFQU0VU X1RPX1RFWFQoYm1zKTsKLQlibXNfZnJlZShibXMpOwotCi0JUEdfUkVUVVJOX1RFWFRfUChyZXN1 bHQpOworCVBHX1JFVFVSTl9CSVRNQVBTRVRfQVNfVEVYVChibXMpOwogfQogCiBEYXR1bQogdGVz dF9ibXNfY29weShQR19GVU5DVElPTl9BUkdTKQogewotCXRleHQJICAgKmJtc19kYXRhOwotCUJp dG1hcHNldCAgKmJtcyA9IE5VTEw7CisJQml0bWFwc2V0ICAqYm1zID0gUEdfQVJHX0dFVEJJVE1B UFNFVCgwKTsKIAlCaXRtYXBzZXQgICpjb3B5X2JtczsKLQl0ZXh0CSAgICpyZXN1bHQ7CiAKLQlp ZiAoUEdfQVJHSVNOVUxMKDApKQotCQlQR19SRVRVUk5fTlVMTCgpOwotCi0JYm1zX2RhdGEgPSBQ R19HRVRBUkdfVEVYVF9QUCgwKTsKLQlibXMgPSBURVhUX1RPX0JJVE1BUFNFVChibXNfZGF0YSk7 CiAJY29weV9ibXMgPSBibXNfY29weShibXMpOwotCXJlc3VsdCA9IEJJVE1BUFNFVF9UT19URVhU KGNvcHlfYm1zKTsKLQotCWlmIChibXMpCi0JCWJtc19mcmVlKGJtcyk7Ci0JaWYgKGNvcHlfYm1z KQotCQlibXNfZnJlZShjb3B5X2Jtcyk7CisJYm1zX2ZyZWUoYm1zKTsKIAotCVBHX1JFVFVSTl9U RVhUX1AocmVzdWx0KTsKKwlQR19SRVRVUk5fQklUTUFQU0VUX0FTX1RFWFQoY29weV9ibXMpOwog fQogCiBEYXR1bQogdGVzdF9ibXNfZXF1YWwoUEdfRlVOQ1RJT05fQVJHUykKIHsKLQlCaXRtYXBz ZXQgICpibXMxID0gTlVMTCwKLQkJCSAgICpibXMyID0gTlVMTDsKKwlCaXRtYXBzZXQgICpibXMx ID0gUEdfQVJHX0dFVEJJVE1BUFNFVCgwKTsKKwlCaXRtYXBzZXQgICpibXMyID0gUEdfQVJHX0dF VEJJVE1BUFNFVCgxKTsKIAlib29sCQlyZXN1bHQ7CiAKLQlpZiAoIVBHX0FSR0lTTlVMTCgwKSkK LQkJYm1zMSA9IFRFWFRfVE9fQklUTUFQU0VUKFBHX0dFVEFSR19URVhUX1BQKDApKTsKLQotCWlm ICghUEdfQVJHSVNOVUxMKDEpKQotCQlibXMyID0gVEVYVF9UT19CSVRNQVBTRVQoUEdfR0VUQVJH X1RFWFRfUFAoMSkpOwotCiAJcmVzdWx0ID0gYm1zX2VxdWFsKGJtczEsIGJtczIpOwotCi0JaWYg KGJtczEpCi0JCWJtc19mcmVlKGJtczEpOwotCWlmIChibXMyKQotCQlibXNfZnJlZShibXMyKTsK KwlibXNfZnJlZShibXMxKTsKKwlibXNfZnJlZShibXMyKTsKIAogCVBHX1JFVFVSTl9CT09MKHJl c3VsdCk7CiB9CkBAIC0yNzMsNDcgKzI0NiwyNSBAQCB0ZXN0X2Jtc19lcXVhbChQR19GVU5DVElP Tl9BUkdTKQogRGF0dW0KIHRlc3RfYm1zX3VuaW9uKFBHX0ZVTkNUSU9OX0FSR1MpCiB7Ci0JQml0 bWFwc2V0ICAqYm1zMSA9IE5VTEwsCi0JCQkgICAqYm1zMiA9IE5VTEw7CisJQml0bWFwc2V0ICAq Ym1zMSA9IFBHX0FSR19HRVRCSVRNQVBTRVQoMCk7CisJQml0bWFwc2V0ICAqYm1zMiA9IFBHX0FS R19HRVRCSVRNQVBTRVQoMSk7CiAJQml0bWFwc2V0ICAqcmVzdWx0X2JtczsKLQl0ZXh0CSAgICpy ZXN1bHQ7Ci0KLQlpZiAoIVBHX0FSR0lTTlVMTCgwKSkKLQkJYm1zMSA9IFRFWFRfVE9fQklUTUFQ U0VUKFBHX0dFVEFSR19URVhUX1BQKDApKTsKLQotCWlmICghUEdfQVJHSVNOVUxMKDEpKQotCQli bXMyID0gVEVYVF9UT19CSVRNQVBTRVQoUEdfR0VUQVJHX1RFWFRfUFAoMSkpOwogCiAJcmVzdWx0 X2JtcyA9IGJtc191bmlvbihibXMxLCBibXMyKTsKKwlibXNfZnJlZShibXMxKTsKKwlibXNfZnJl ZShibXMyKTsKIAotCWlmIChibXMxKQotCQlibXNfZnJlZShibXMxKTsKLQlpZiAoYm1zMikKLQkJ Ym1zX2ZyZWUoYm1zMik7Ci0KLQlpZiAocmVzdWx0X2JtcyA9PSBOVUxMKQotCQlQR19SRVRVUk5f TlVMTCgpOwotCi0JcmVzdWx0ID0gQklUTUFQU0VUX1RPX1RFWFQocmVzdWx0X2Jtcyk7Ci0JYm1z X2ZyZWUocmVzdWx0X2Jtcyk7Ci0KLQlQR19SRVRVUk5fVEVYVF9QKHJlc3VsdCk7CisJUEdfUkVU VVJOX0JJVE1BUFNFVF9BU19URVhUKHJlc3VsdF9ibXMpOwogfQogCiBEYXR1bQogdGVzdF9ibXNf bWVtYmVyc2hpcChQR19GVU5DVElPTl9BUkdTKQogewotCUJpdG1hcHNldCAgKmJtcyA9IE5VTEw7 CisJQml0bWFwc2V0ICAqYm1zID0gUEdfQVJHX0dFVEJJVE1BUFNFVCgwKTsKIAlCTVNfTWVtYmVy c2hpcCByZXN1bHQ7CiAKLQlpZiAoUEdfQVJHSVNOVUxMKDApKQotCQlQR19SRVRVUk5fSU5UMzIo Qk1TX0VNUFRZX1NFVCk7Ci0KLQlibXMgPSBURVhUX1RPX0JJVE1BUFNFVChQR19HRVRBUkdfVEVY VF9QUCgwKSk7CiAJcmVzdWx0ID0gYm1zX21lbWJlcnNoaXAoYm1zKTsKLQotCWlmIChibXMpCi0J CWJtc19mcmVlKGJtcyk7CisJYm1zX2ZyZWUoYm1zKTsKIAogCVBHX1JFVFVSTl9JTlQzMigoaW50 MzIpIHJlc3VsdCk7CiB9CkBAIC0zMjEsMTkgKzI3MiwxOCBAQCB0ZXN0X2Jtc19tZW1iZXJzaGlw KFBHX0ZVTkNUSU9OX0FSR1MpCiBEYXR1bQogdGVzdF9ibXNfbmV4dF9tZW1iZXIoUEdfRlVOQ1RJ T05fQVJHUykKIHsKLQlCaXRtYXBzZXQgICpibXMgPSBOVUxMOworCUJpdG1hcHNldCAgKmJtczsK IAlpbnQzMgkJcHJldm1lbWJlcjsKIAlpbnQJCQlyZXN1bHQ7CiAKLQlpZiAoUEdfQVJHSVNOVUxM KDApIHx8IFBHX0FSR0lTTlVMTCgxKSkKLQkJUEdfUkVUVVJOX0lOVDMyKC0yKTsKKwlpZiAoUEdf QVJHSVNOVUxMKDEpKQorCQlQR19SRVRVUk5fTlVMTCgpOwkJLyogaW52YWxpZCBpbnB1dCAqLwog Ci0JYm1zID0gVEVYVF9UT19CSVRNQVBTRVQoUEdfR0VUQVJHX1RFWFRfUFAoMCkpOworCWJtcyA9 IFBHX0FSR19HRVRCSVRNQVBTRVQoMCk7CiAJcHJldm1lbWJlciA9IFBHX0dFVEFSR19JTlQzMigx KTsKLQlyZXN1bHQgPSBibXNfbmV4dF9tZW1iZXIoYm1zLCBwcmV2bWVtYmVyKTsKIAotCWlmIChi bXMpCi0JCWJtc19mcmVlKGJtcyk7CisJcmVzdWx0ID0gYm1zX25leHRfbWVtYmVyKGJtcywgcHJl dm1lbWJlcik7CisJYm1zX2ZyZWUoYm1zKTsKIAogCVBHX1JFVFVSTl9JTlQzMihyZXN1bHQpOwog fQpAQCAtMzQxLDgyICsyOTEsNDEgQEAgdGVzdF9ibXNfbmV4dF9tZW1iZXIoUEdfRlVOQ1RJT05f QVJHUykKIERhdHVtCiB0ZXN0X2Jtc19pbnRlcnNlY3QoUEdfRlVOQ1RJT05fQVJHUykKIHsKLQlC aXRtYXBzZXQgICpibXMxID0gTlVMTCwKLQkJCSAgICpibXMyID0gTlVMTDsKKwlCaXRtYXBzZXQg ICpibXMxID0gUEdfQVJHX0dFVEJJVE1BUFNFVCgwKTsKKwlCaXRtYXBzZXQgICpibXMyID0gUEdf QVJHX0dFVEJJVE1BUFNFVCgxKTsKIAlCaXRtYXBzZXQgICpyZXN1bHRfYm1zOwotCXRleHQJICAg KnJlc3VsdDsKLQotCWlmICghUEdfQVJHSVNOVUxMKDApKQotCQlibXMxID0gVEVYVF9UT19CSVRN QVBTRVQoUEdfR0VUQVJHX1RFWFRfUFAoMCkpOwotCi0JaWYgKCFQR19BUkdJU05VTEwoMSkpCi0J CWJtczIgPSBURVhUX1RPX0JJVE1BUFNFVChQR19HRVRBUkdfVEVYVF9QUCgxKSk7CiAKIAlyZXN1 bHRfYm1zID0gYm1zX2ludGVyc2VjdChibXMxLCBibXMyKTsKKwlibXNfZnJlZShibXMxKTsKKwli bXNfZnJlZShibXMyKTsKIAotCWlmIChibXMxKQotCQlibXNfZnJlZShibXMxKTsKLQlpZiAoYm1z MikKLQkJYm1zX2ZyZWUoYm1zMik7Ci0KLQlpZiAocmVzdWx0X2JtcyA9PSBOVUxMKQotCQlQR19S RVRVUk5fTlVMTCgpOwotCi0JcmVzdWx0ID0gQklUTUFQU0VUX1RPX1RFWFQocmVzdWx0X2Jtcyk7 Ci0JYm1zX2ZyZWUocmVzdWx0X2Jtcyk7Ci0KLQlQR19SRVRVUk5fVEVYVF9QKHJlc3VsdCk7CisJ UEdfUkVUVVJOX0JJVE1BUFNFVF9BU19URVhUKHJlc3VsdF9ibXMpOwogfQogCiBEYXR1bQogdGVz dF9ibXNfZGlmZmVyZW5jZShQR19GVU5DVElPTl9BUkdTKQogewotCUJpdG1hcHNldCAgKmJtczEg PSBOVUxMLAotCQkJICAgKmJtczIgPSBOVUxMOworCUJpdG1hcHNldCAgKmJtczEgPSBQR19BUkdf R0VUQklUTUFQU0VUKDApOworCUJpdG1hcHNldCAgKmJtczIgPSBQR19BUkdfR0VUQklUTUFQU0VU KDEpOwogCUJpdG1hcHNldCAgKnJlc3VsdF9ibXM7Ci0JdGV4dAkgICAqcmVzdWx0OwotCi0JaWYg KCFQR19BUkdJU05VTEwoMCkpCi0JCWJtczEgPSBURVhUX1RPX0JJVE1BUFNFVChQR19HRVRBUkdf VEVYVF9QUCgwKSk7Ci0KLQlpZiAoIVBHX0FSR0lTTlVMTCgxKSkKLQkJYm1zMiA9IFRFWFRfVE9f QklUTUFQU0VUKFBHX0dFVEFSR19URVhUX1BQKDEpKTsKIAogCXJlc3VsdF9ibXMgPSBibXNfZGlm ZmVyZW5jZShibXMxLCBibXMyKTsKKwlibXNfZnJlZShibXMxKTsKKwlibXNfZnJlZShibXMyKTsK IAotCWlmIChibXMxKQotCQlibXNfZnJlZShibXMxKTsKLQlpZiAoYm1zMikKLQkJYm1zX2ZyZWUo Ym1zMik7Ci0KLQlpZiAocmVzdWx0X2JtcyA9PSBOVUxMKQotCQlQR19SRVRVUk5fTlVMTCgpOwot Ci0JcmVzdWx0ID0gQklUTUFQU0VUX1RPX1RFWFQocmVzdWx0X2Jtcyk7Ci0JYm1zX2ZyZWUocmVz dWx0X2Jtcyk7Ci0KLQlQR19SRVRVUk5fVEVYVF9QKHJlc3VsdCk7CisJUEdfUkVUVVJOX0JJVE1B UFNFVF9BU19URVhUKHJlc3VsdF9ibXMpOwogfQogCiBEYXR1bQogdGVzdF9ibXNfY29tcGFyZShQ R19GVU5DVElPTl9BUkdTKQogewotCUJpdG1hcHNldCAgKmJtczEgPSBOVUxMLAotCQkJICAgKmJt czIgPSBOVUxMOworCUJpdG1hcHNldCAgKmJtczEgPSBQR19BUkdfR0VUQklUTUFQU0VUKDApOwor CUJpdG1hcHNldCAgKmJtczIgPSBQR19BUkdfR0VUQklUTUFQU0VUKDEpOwogCWludAkJCXJlc3Vs dDsKIAotCWlmICghUEdfQVJHSVNOVUxMKDApKQotCQlibXMxID0gVEVYVF9UT19CSVRNQVBTRVQo UEdfR0VUQVJHX1RFWFRfUFAoMCkpOwotCi0JaWYgKCFQR19BUkdJU05VTEwoMSkpCi0JCWJtczIg PSBURVhUX1RPX0JJVE1BUFNFVChQR19HRVRBUkdfVEVYVF9QUCgxKSk7Ci0KIAlyZXN1bHQgPSBi bXNfY29tcGFyZShibXMxLCBibXMyKTsKLQotCWlmIChibXMxKQotCQlibXNfZnJlZShibXMxKTsK LQlpZiAoYm1zMikKLQkJYm1zX2ZyZWUoYm1zMik7CisJYm1zX2ZyZWUoYm1zMSk7CisJYm1zX2Zy ZWUoYm1zMik7CiAKIAlQR19SRVRVUk5fSU5UMzIocmVzdWx0KTsKIH0KQEAgLTQyNCwxNiArMzMz LDExIEBAIHRlc3RfYm1zX2NvbXBhcmUoUEdfRlVOQ1RJT05fQVJHUykKIERhdHVtCiB0ZXN0X2Jt c19pc19lbXB0eShQR19GVU5DVElPTl9BUkdTKQogewotCUJpdG1hcHNldCAgKmJtcyA9IE5VTEw7 CisJQml0bWFwc2V0ICAqYm1zID0gUEdfQVJHX0dFVEJJVE1BUFNFVCgwKTsKIAlib29sCQlyZXN1 bHQ7CiAKLQlpZiAoIVBHX0FSR0lTTlVMTCgwKSkKLQkJYm1zID0gVEVYVF9UT19CSVRNQVBTRVQo UEdfR0VUQVJHX1RFWFRfUFAoMCkpOwotCiAJcmVzdWx0ID0gYm1zX2lzX2VtcHR5KGJtcyk7Ci0K LQlpZiAoYm1zKQotCQlibXNfZnJlZShibXMpOworCWJtc19mcmVlKGJtcyk7CiAKIAlQR19SRVRV Uk5fQk9PTChyZXN1bHQpOwogfQpAQCAtNDQxLDIyICszNDUsMTMgQEAgdGVzdF9ibXNfaXNfZW1w dHkoUEdfRlVOQ1RJT05fQVJHUykKIERhdHVtCiB0ZXN0X2Jtc19pc19zdWJzZXQoUEdfRlVOQ1RJ T05fQVJHUykKIHsKLQlCaXRtYXBzZXQgICpibXMxID0gTlVMTCwKLQkJCSAgICpibXMyID0gTlVM TDsKKwlCaXRtYXBzZXQgICpibXMxID0gUEdfQVJHX0dFVEJJVE1BUFNFVCgwKTsKKwlCaXRtYXBz ZXQgICpibXMyID0gUEdfQVJHX0dFVEJJVE1BUFNFVCgxKTsKIAlib29sCQlyZXN1bHQ7CiAKLQlp ZiAoIVBHX0FSR0lTTlVMTCgwKSkKLQkJYm1zMSA9IFRFWFRfVE9fQklUTUFQU0VUKFBHX0dFVEFS R19URVhUX1BQKDApKTsKLQotCWlmICghUEdfQVJHSVNOVUxMKDEpKQotCQlibXMyID0gVEVYVF9U T19CSVRNQVBTRVQoUEdfR0VUQVJHX1RFWFRfUFAoMSkpOwotCiAJcmVzdWx0ID0gYm1zX2lzX3N1 YnNldChibXMxLCBibXMyKTsKLQotCWlmIChibXMxKQotCQlibXNfZnJlZShibXMxKTsKLQlpZiAo Ym1zMikKLQkJYm1zX2ZyZWUoYm1zMik7CisJYm1zX2ZyZWUoYm1zMSk7CisJYm1zX2ZyZWUoYm1z Mik7CiAKIAlQR19SRVRVUk5fQk9PTChyZXN1bHQpOwogfQpAQCAtNDY0LDIyICszNTksMTMgQEAg dGVzdF9ibXNfaXNfc3Vic2V0KFBHX0ZVTkNUSU9OX0FSR1MpCiBEYXR1bQogdGVzdF9ibXNfc3Vi c2V0X2NvbXBhcmUoUEdfRlVOQ1RJT05fQVJHUykKIHsKLQlCaXRtYXBzZXQgICpibXMxID0gTlVM TCwKLQkJCSAgICpibXMyID0gTlVMTDsKKwlCaXRtYXBzZXQgICpibXMxID0gUEdfQVJHX0dFVEJJ VE1BUFNFVCgwKTsKKwlCaXRtYXBzZXQgICpibXMyID0gUEdfQVJHX0dFVEJJVE1BUFNFVCgxKTsK IAlCTVNfQ29tcGFyaXNvbiByZXN1bHQ7CiAKLQlpZiAoIVBHX0FSR0lTTlVMTCgwKSkKLQkJYm1z MSA9IFRFWFRfVE9fQklUTUFQU0VUKFBHX0dFVEFSR19URVhUX1BQKDApKTsKLQotCWlmICghUEdf QVJHSVNOVUxMKDEpKQotCQlibXMyID0gVEVYVF9UT19CSVRNQVBTRVQoUEdfR0VUQVJHX1RFWFRf UFAoMSkpOwotCiAJcmVzdWx0ID0gYm1zX3N1YnNldF9jb21wYXJlKGJtczEsIGJtczIpOwotCi0J aWYgKGJtczEpCi0JCWJtc19mcmVlKGJtczEpOwotCWlmIChibXMyKQotCQlibXNfZnJlZShibXMy KTsKKwlibXNfZnJlZShibXMxKTsKKwlibXNfZnJlZShibXMyKTsKIAogCVBHX1JFVFVSTl9JTlQz MigoaW50MzIpIHJlc3VsdCk7CiB9CkBAIC00ODcsMTYgKzM3MywxMSBAQCB0ZXN0X2Jtc19zdWJz ZXRfY29tcGFyZShQR19GVU5DVElPTl9BUkdTKQogRGF0dW0KIHRlc3RfYm1zX3NpbmdsZXRvbl9t ZW1iZXIoUEdfRlVOQ1RJT05fQVJHUykKIHsKLQlCaXRtYXBzZXQgICpibXMgPSBOVUxMOworCUJp dG1hcHNldCAgKmJtcyA9IFBHX0FSR19HRVRCSVRNQVBTRVQoMCk7CiAJaW50CQkJcmVzdWx0Owog Ci0JaWYgKCFQR19BUkdJU05VTEwoMCkpCi0JCWJtcyA9IFRFWFRfVE9fQklUTUFQU0VUKFBHX0dF VEFSR19URVhUX1BQKDApKTsKLQogCXJlc3VsdCA9IGJtc19zaW5nbGV0b25fbWVtYmVyKGJtcyk7 Ci0KLQlpZiAoYm1zKQotCQlibXNfZnJlZShibXMpOworCWJtc19mcmVlKGJtcyk7CiAKIAlQR19S RVRVUk5fSU5UMzIocmVzdWx0KTsKIH0KQEAgLTUwNCw0NyArMzg1LDM0IEBAIHRlc3RfYm1zX3Np bmdsZXRvbl9tZW1iZXIoUEdfRlVOQ1RJT05fQVJHUykKIERhdHVtCiB0ZXN0X2Jtc19nZXRfc2lu Z2xldG9uX21lbWJlcihQR19GVU5DVElPTl9BUkdTKQogewotCUJpdG1hcHNldCAgKmJtcyA9IE5V TEw7Ci0JaW50MzIJCWRlZmF1bHRfbWVtYmVyID0gUEdfR0VUQVJHX0lOVDMyKDEpOwotCWJvb2wJ CXN1Y2Nlc3M7Ci0JaW50CQkJbWVtYmVyID0gLTE7Ci0KLQlpZiAoUEdfQVJHSVNOVUxMKDApKQot CQlQR19SRVRVUk5fSU5UMzIoZGVmYXVsdF9tZW1iZXIpOwotCi0JYm1zID0gVEVYVF9UT19CSVRN QVBTRVQoUEdfR0VUQVJHX1RFWFRfUFAoMCkpOworCUJpdG1hcHNldCAgKmJtcyA9IFBHX0FSR19H RVRCSVRNQVBTRVQoMCk7CisJaW50CQkJbWVtYmVyOwogCiAJLyoKLQkgKiBibXNfZ2V0X3Npbmds ZXRvbl9tZW1iZXIgcmV0dXJucyBib29sIGFuZCBzdG9yZXMgcmVzdWx0IGluIG1lbWJlcgotCSAq IHBvaW50ZXIKKwkgKiBLZWVwIHRoaXMgc2ltcGxlLiAgUmV0dXJuIC0xIHdoZW4gd2UgZGV0ZWN0 IHRoZSBzZXQgaXNuJ3QgYSBzaW5nbGV0b24KKwkgKiBzZXQsIG90aGVyd2lzZSByZXR1cm4gdGhl IHNpbmdsZXRvbiBtZW1iZXIuCiAJICovCi0Jc3VjY2VzcyA9IGJtc19nZXRfc2luZ2xldG9uX21l bWJlcihibXMsICZtZW1iZXIpOwotCWJtc19mcmVlKGJtcyk7CisJaWYgKCFibXNfZ2V0X3Npbmds ZXRvbl9tZW1iZXIoYm1zLCAmbWVtYmVyKSkKKwkJbWVtYmVyID0gLTE7CiAKLQlpZiAoc3VjY2Vz cykKLQkJUEdfUkVUVVJOX0lOVDMyKG1lbWJlcik7CisJYm1zX2ZyZWUoYm1zKTsKIAotCVBHX1JF VFVSTl9JTlQzMihkZWZhdWx0X21lbWJlcik7CisJUEdfUkVUVVJOX0lOVDMyKG1lbWJlcik7CiB9 CiAKIERhdHVtCiB0ZXN0X2Jtc19wcmV2X21lbWJlcihQR19GVU5DVElPTl9BUkdTKQogewotCXRl eHQJICAgKmJtc19kYXRhOwotCUJpdG1hcHNldCAgKmJtcyA9IE5VTEw7CisJQml0bWFwc2V0ICAq Ym1zOwogCWludDMyCQlwcmV2bWVtYmVyOwogCWludAkJCXJlc3VsdDsKIAotCWlmIChQR19BUkdJ U05VTEwoMCkpCi0JCVBHX1JFVFVSTl9JTlQzMigtMik7CisJaWYgKFBHX0FSR0lTTlVMTCgxKSkK KwkJUEdfUkVUVVJOX05VTEwoKTsJCS8qIGludmFsaWQgaW5wdXQgKi8KIAotCWJtc19kYXRhID0g UEdfR0VUQVJHX1RFWFRfUFAoMCk7CisJYm1zID0gUEdfQVJHX0dFVEJJVE1BUFNFVCgwKTsKIAlw cmV2bWVtYmVyID0gUEdfR0VUQVJHX0lOVDMyKDEpOwogCi0JaWYgKFZBUlNJWkVfQU5ZX0VYSERS KGJtc19kYXRhKSA9PSAwKQotCQlQR19SRVRVUk5fSU5UMzIoLTIpOwotCi0JYm1zID0gVEVYVF9U T19CSVRNQVBTRVQoYm1zX2RhdGEpOwogCXJlc3VsdCA9IGJtc19wcmV2X21lbWJlcihibXMsIHBy ZXZtZW1iZXIpOwogCWJtc19mcmVlKGJtcyk7CiAKQEAgLTU1NCwyMiArNDIyLDEzIEBAIHRlc3Rf Ym1zX3ByZXZfbWVtYmVyKFBHX0ZVTkNUSU9OX0FSR1MpCiBEYXR1bQogdGVzdF9ibXNfb3Zlcmxh cChQR19GVU5DVElPTl9BUkdTKQogewotCUJpdG1hcHNldCAgKmJtczEgPSBOVUxMLAotCQkJICAg KmJtczIgPSBOVUxMOworCUJpdG1hcHNldCAgKmJtczEgPSBQR19BUkdfR0VUQklUTUFQU0VUKDAp OworCUJpdG1hcHNldCAgKmJtczIgPSBQR19BUkdfR0VUQklUTUFQU0VUKDEpOwogCWJvb2wJCXJl c3VsdDsKIAotCWlmICghUEdfQVJHSVNOVUxMKDApKQotCQlibXMxID0gVEVYVF9UT19CSVRNQVBT RVQoUEdfR0VUQVJHX1RFWFRfUFAoMCkpOwotCi0JaWYgKCFQR19BUkdJU05VTEwoMSkpCi0JCWJt czIgPSBURVhUX1RPX0JJVE1BUFNFVChQR19HRVRBUkdfVEVYVF9QUCgxKSk7Ci0KIAlyZXN1bHQg PSBibXNfb3ZlcmxhcChibXMxLCBibXMyKTsKLQotCWlmIChibXMxKQotCQlibXNfZnJlZShibXMx KTsKLQlpZiAoYm1zMikKLQkJYm1zX2ZyZWUoYm1zMik7CisJYm1zX2ZyZWUoYm1zMSk7CisJYm1z X2ZyZWUoYm1zMik7CiAKIAlQR19SRVRVUk5fQk9PTChyZXN1bHQpOwogfQpAQCAtNTc3LDUyICs0 MzYsNDcgQEAgdGVzdF9ibXNfb3ZlcmxhcChQR19GVU5DVElPTl9BUkdTKQogRGF0dW0KIHRlc3Rf Ym1zX292ZXJsYXBfbGlzdChQR19GVU5DVElPTl9BUkdTKQogewotCUJpdG1hcHNldCAgKmJtcyA9 IE5VTEw7CisJQml0bWFwc2V0ICAqYm1zOwogCUFycmF5VHlwZSAgKmFycmF5OwogCUxpc3QJICAg KmludF9saXN0ID0gTklMOwogCWJvb2wJCXJlc3VsdDsKLQlEYXR1bQkgICAqZWxlbV9kYXR1bXM7 Ci0JYm9vbAkgICAqZWxlbV9udWxsczsKKwlEYXR1bQkgICAqZWxlbV9kYXR1bXMgPSBOVUxMOwor CWJvb2wJICAgKmVsZW1fbnVsbHMgPSBOVUxMOwogCWludAkJCWVsZW1fY291bnQ7CiAJaW50CQkJ aTsKIAotCWlmIChQR19BUkdJU05VTEwoMCkpCi0JCVBHX1JFVFVSTl9CT09MKGZhbHNlKTsKKwli bXMgPSBQR19BUkdfR0VUQklUTUFQU0VUKDApOwogCi0JYm1zID0gVEVYVF9UT19CSVRNQVBTRVQo UEdfR0VUQVJHX1RFWFRfUFAoMCkpOwotCi0JaWYgKFBHX0FSR0lTTlVMTCgxKSkKKwlpZiAoIVBH X0FSR0lTTlVMTCgxKSkKIAl7Ci0JCWlmIChibXMpCi0JCQlibXNfZnJlZShibXMpOwotCQlQR19S RVRVUk5fQk9PTChmYWxzZSk7Ci0JfQotCi0JYXJyYXkgPSBQR19HRVRBUkdfQVJSQVlUWVBFX1Ao MSk7CisJCWFycmF5ID0gUEdfR0VUQVJHX0FSUkFZVFlQRV9QKDEpOwogCi0JZGVjb25zdHJ1Y3Rf YXJyYXkoYXJyYXksCi0JCQkJCSAgSU5UNE9JRCwgc2l6ZW9mKGludDMyKSwgdHJ1ZSwgJ2knLAot CQkJCQkgICZlbGVtX2RhdHVtcywgJmVsZW1fbnVsbHMsICZlbGVtX2NvdW50KTsKKwkJZGVjb25z dHJ1Y3RfYXJyYXkoYXJyYXksCisJCQkJCQkgIElOVDRPSUQsIHNpemVvZihpbnQzMiksIHRydWUs ICdpJywKKwkJCQkJCSAgJmVsZW1fZGF0dW1zLCAmZWxlbV9udWxscywgJmVsZW1fY291bnQpOwog Ci0JZm9yIChpID0gMDsgaSA8IGVsZW1fY291bnQ7IGkrKykKLQl7Ci0JCWlmICghZWxlbV9udWxs c1tpXSkKKwkJZm9yIChpID0gMDsgaSA8IGVsZW1fY291bnQ7IGkrKykKIAkJewotCQkJaW50MzIJ CW1lbWJlciA9IERhdHVtR2V0SW50MzIoZWxlbV9kYXR1bXNbaV0pOworCQkJaWYgKCFlbGVtX251 bGxzW2ldKQorCQkJeworCQkJCWludDMyCQltZW1iZXIgPSBEYXR1bUdldEludDMyKGVsZW1fZGF0 dW1zW2ldKTsKIAotCQkJaW50X2xpc3QgPSBsYXBwZW5kX2ludChpbnRfbGlzdCwgbWVtYmVyKTsK KwkJCQlpbnRfbGlzdCA9IGxhcHBlbmRfaW50KGludF9saXN0LCBtZW1iZXIpOworCQkJfQogCQl9 CiAJfQogCiAJcmVzdWx0ID0gYm1zX292ZXJsYXBfbGlzdChibXMsIGludF9saXN0KTsKIAotCWlm IChibXMpCi0JCWJtc19mcmVlKGJtcyk7CisJYm1zX2ZyZWUoYm1zKTsKIAogCWxpc3RfZnJlZShp bnRfbGlzdCk7CiAKLQlwZnJlZShlbGVtX2RhdHVtcyk7Ci0JcGZyZWUoZWxlbV9udWxscyk7CisJ aWYgKGVsZW1fZGF0dW1zKQorCQlwZnJlZShlbGVtX2RhdHVtcyk7CisKKwlpZiAoZWxlbV9udWxs cykKKwkJcGZyZWUoZWxlbV9udWxscyk7CiAKIAlQR19SRVRVUk5fQk9PTChyZXN1bHQpOwogfQpA QCAtNjMwLDIyICs0ODQsMTMgQEAgdGVzdF9ibXNfb3ZlcmxhcF9saXN0KFBHX0ZVTkNUSU9OX0FS R1MpCiBEYXR1bQogdGVzdF9ibXNfbm9uZW1wdHlfZGlmZmVyZW5jZShQR19GVU5DVElPTl9BUkdT KQogewotCUJpdG1hcHNldCAgKmJtczEgPSBOVUxMLAotCQkJICAgKmJtczIgPSBOVUxMOworCUJp dG1hcHNldCAgKmJtczEgPSBQR19BUkdfR0VUQklUTUFQU0VUKDApOworCUJpdG1hcHNldCAgKmJt czIgPSBQR19BUkdfR0VUQklUTUFQU0VUKDEpOwogCWJvb2wJCXJlc3VsdDsKIAotCWlmICghUEdf QVJHSVNOVUxMKDApKQotCQlibXMxID0gVEVYVF9UT19CSVRNQVBTRVQoUEdfR0VUQVJHX1RFWFRf UFAoMCkpOwotCi0JaWYgKCFQR19BUkdJU05VTEwoMSkpCi0JCWJtczIgPSBURVhUX1RPX0JJVE1B UFNFVChQR19HRVRBUkdfVEVYVF9QUCgxKSk7Ci0KIAlyZXN1bHQgPSBibXNfbm9uZW1wdHlfZGlm ZmVyZW5jZShibXMxLCBibXMyKTsKLQotCWlmIChibXMxKQotCQlibXNfZnJlZShibXMxKTsKLQlp ZiAoYm1zMikKLQkJYm1zX2ZyZWUoYm1zMik7CisJYm1zX2ZyZWUoYm1zMSk7CisJYm1zX2ZyZWUo Ym1zMik7CiAKIAlQR19SRVRVUk5fQk9PTChyZXN1bHQpOwogfQpAQCAtNjUzLDIyICs0OTgsMTYg QEAgdGVzdF9ibXNfbm9uZW1wdHlfZGlmZmVyZW5jZShQR19GVU5DVElPTl9BUkdTKQogRGF0dW0K IHRlc3RfYm1zX21lbWJlcl9pbmRleChQR19GVU5DVElPTl9BUkdTKQogewotCXRleHQJICAgKmJt c19kYXRhOwotCUJpdG1hcHNldCAgKmJtcyA9IE5VTEw7CisJQml0bWFwc2V0ICAqYm1zOwogCWlu dDMyCQltZW1iZXI7CiAJaW50CQkJcmVzdWx0OwogCi0JaWYgKFBHX0FSR0lTTlVMTCgwKSkKLQkJ UEdfUkVUVVJOX0lOVDMyKC0xKTsKKwlpZiAoUEdfQVJHSVNOVUxMKDEpKQorCQlQR19SRVRVUk5f TlVMTCgpOwkJLyogaW52YWxpZCBpbnB1dCAqLwogCi0JYm1zX2RhdGEgPSBQR19HRVRBUkdfVEVY VF9QUCgwKTsKKwlibXMgPSBQR19BUkdfR0VUQklUTUFQU0VUKDApOwogCW1lbWJlciA9IFBHX0dF VEFSR19JTlQzMigxKTsKIAotCWlmIChWQVJTSVpFX0FOWV9FWEhEUihibXNfZGF0YSkgPT0gMCkK LQkJUEdfUkVUVVJOX0lOVDMyKC0xKTsKLQotCWJtcyA9IFRFWFRfVE9fQklUTUFQU0VUKGJtc19k YXRhKTsKLQogCXJlc3VsdCA9IGJtc19tZW1iZXJfaW5kZXgoYm1zLCBtZW1iZXIpOwogCWJtc19m cmVlKGJtcyk7CiAKQEAgLTY3OCwxNjkgKzUxNyw4NSBAQCB0ZXN0X2Jtc19tZW1iZXJfaW5kZXgo UEdfRlVOQ1RJT05fQVJHUykKIERhdHVtCiB0ZXN0X2Jtc19hZGRfcmFuZ2UoUEdfRlVOQ1RJT05f QVJHUykKIHsKLQlCaXRtYXBzZXQgICpibXMgPSBOVUxMOworCUJpdG1hcHNldCAgKmJtczsKIAlp bnQzMgkJbG93ZXIsCiAJCQkJdXBwZXI7Ci0JdGV4dAkgICAqcmVzdWx0OwogCiAJaWYgKFBHX0FS R0lTTlVMTCgxKSB8fCBQR19BUkdJU05VTEwoMikpCi0JCVBHX1JFVFVSTl9OVUxMKCk7Ci0KLQlp ZiAoIVBHX0FSR0lTTlVMTCgwKSkKLQkJYm1zID0gVEVYVF9UT19CSVRNQVBTRVQoUEdfR0VUQVJH X1RFWFRfUFAoMCkpOworCQlQR19SRVRVUk5fTlVMTCgpOwkJLyogaW52YWxpZCBpbnB1dCAqLwog CisJYm1zID0gUEdfQVJHX0dFVEJJVE1BUFNFVCgwKTsKIAlsb3dlciA9IFBHX0dFVEFSR19JTlQz MigxKTsKIAl1cHBlciA9IFBHX0dFVEFSR19JTlQzMigyKTsKIAotCS8qIENoZWNrIGZvciBpbnZh bGlkIHJhbmdlICovCi0JaWYgKHVwcGVyIDwgbG93ZXIpCi0JewotCQlpZiAoYm1zKQotCQkJYm1z X2ZyZWUoYm1zKTsKLQkJUEdfUkVUVVJOX05VTEwoKTsKLQl9Ci0KIAlibXMgPSBibXNfYWRkX3Jh bmdlKGJtcywgbG93ZXIsIHVwcGVyKTsKIAotCXJlc3VsdCA9IEJJVE1BUFNFVF9UT19URVhUKGJt cyk7Ci0JaWYgKGJtcykKLQkJYm1zX2ZyZWUoYm1zKTsKLQotCVBHX1JFVFVSTl9URVhUX1AocmVz dWx0KTsKKwlQR19SRVRVUk5fQklUTUFQU0VUX0FTX1RFWFQoYm1zKTsKIH0KIAogRGF0dW0KIHRl c3RfYm1zX2ludF9tZW1iZXJzKFBHX0ZVTkNUSU9OX0FSR1MpCiB7Ci0JQml0bWFwc2V0ICAqYm1z MSA9IE5VTEwsCi0JCQkgICAqYm1zMiA9IE5VTEw7Ci0JdGV4dAkgICAqcmVzdWx0OwotCi0JaWYg KCFQR19BUkdJU05VTEwoMCkpCi0JCWJtczEgPSBURVhUX1RPX0JJVE1BUFNFVChQR19HRVRBUkdf VEVYVF9QUCgwKSk7Ci0KLQlpZiAoIVBHX0FSR0lTTlVMTCgxKSkKLQkJYm1zMiA9IFRFWFRfVE9f QklUTUFQU0VUKFBHX0dFVEFSR19URVhUX1BQKDEpKTsKKwlCaXRtYXBzZXQgICpibXMxID0gUEdf QVJHX0dFVEJJVE1BUFNFVCgwKTsKKwlCaXRtYXBzZXQgICpibXMyID0gUEdfQVJHX0dFVEJJVE1B UFNFVCgxKTsKIAorCS8qIGxlZnQgaW5wdXQgZ2V0cyByZWN5Y2xlZCAqLwogCWJtczEgPSBibXNf aW50X21lbWJlcnMoYm1zMSwgYm1zMik7CiAKLQlpZiAoYm1zMikKLQkJYm1zX2ZyZWUoYm1zMik7 Ci0KLQlpZiAoYm1zMSA9PSBOVUxMKQotCQlQR19SRVRVUk5fTlVMTCgpOwotCi0JcmVzdWx0ID0g QklUTUFQU0VUX1RPX1RFWFQoYm1zMSk7Ci0KLQlpZiAoYm1zMSkKLQkJYm1zX2ZyZWUoYm1zMSk7 CisJYm1zX2ZyZWUoYm1zMik7CiAKLQlQR19SRVRVUk5fVEVYVF9QKHJlc3VsdCk7CisJUEdfUkVU VVJOX0JJVE1BUFNFVF9BU19URVhUKGJtczEpOwogfQogCiBEYXR1bQogdGVzdF9ibXNfZGVsX21l bWJlcnMoUEdfRlVOQ1RJT05fQVJHUykKIHsKLQlCaXRtYXBzZXQgICpibXMxID0gTlVMTCwKLQkJ CSAgICpibXMyID0gTlVMTDsKLQlCaXRtYXBzZXQgICpyZXN1bHRfYm1zOwotCXRleHQJICAgKnJl c3VsdDsKKwlCaXRtYXBzZXQgICpibXMxID0gUEdfQVJHX0dFVEJJVE1BUFNFVCgwKTsKKwlCaXRt YXBzZXQgICpibXMyID0gUEdfQVJHX0dFVEJJVE1BUFNFVCgxKTsKIAotCWlmICghUEdfQVJHSVNO VUxMKDApKQotCQlibXMxID0gVEVYVF9UT19CSVRNQVBTRVQoUEdfR0VUQVJHX1RFWFRfUFAoMCkp OwotCi0JaWYgKCFQR19BUkdJU05VTEwoMSkpCi0JCWJtczIgPSBURVhUX1RPX0JJVE1BUFNFVChQ R19HRVRBUkdfVEVYVF9QUCgxKSk7Ci0KLQkvKiBJTVBPUlRBTlQ6IGJtc19kZWxfbWVtYmVycyBt b2RpZmllcy9mcmVlcyB0aGUgZmlyc3QgYXJndW1lbnQgKi8KLQlyZXN1bHRfYm1zID0gYm1zX2Rl bF9tZW1iZXJzKGJtczEsIGJtczIpOwotCi0JLyogYm1zMSBpcyBub3cgaW52YWxpZCwgZG8gbm90 IGZyZWUgaXQgKi8KLQotCWlmIChibXMyKQotCQlibXNfZnJlZShibXMyKTsKLQotCWlmIChyZXN1 bHRfYm1zID09IE5VTEwpCi0JCVBHX1JFVFVSTl9OVUxMKCk7Ci0KLQlyZXN1bHQgPSBCSVRNQVBT RVRfVE9fVEVYVChyZXN1bHRfYm1zKTsKLQlibXNfZnJlZShyZXN1bHRfYm1zKTsKKwkvKiBsZWZ0 IGlucHV0IGdldHMgcmVjeWNsZWQgKi8KKwlibXMxID0gYm1zX2RlbF9tZW1iZXJzKGJtczEsIGJt czIpOworCWJtc19mcmVlKGJtczIpOwogCi0JUEdfUkVUVVJOX1RFWFRfUChyZXN1bHQpOworCVBH X1JFVFVSTl9CSVRNQVBTRVRfQVNfVEVYVChibXMxKTsKIH0KIAogRGF0dW0KIHRlc3RfYm1zX3Jl cGxhY2VfbWVtYmVycyhQR19GVU5DVElPTl9BUkdTKQogewotCUJpdG1hcHNldCAgKmJtczEgPSBO VUxMLAotCQkJICAgKmJtczIgPSBOVUxMOwotCUJpdG1hcHNldCAgKnJlc3VsdF9ibXM7Ci0JdGV4 dAkgICAqcmVzdWx0OwotCi0JaWYgKCFQR19BUkdJU05VTEwoMCkpCi0JCWJtczEgPSBURVhUX1RP X0JJVE1BUFNFVChQR19HRVRBUkdfVEVYVF9QUCgwKSk7Ci0KLQlpZiAoIVBHX0FSR0lTTlVMTCgx KSkKLQkJYm1zMiA9IFRFWFRfVE9fQklUTUFQU0VUKFBHX0dFVEFSR19URVhUX1BQKDEpKTsKLQot CS8qIElNUE9SVEFOVDogYm1zX3JlcGxhY2VfbWVtYmVycyBtb2RpZmllcy9mcmVlcyB0aGUgZmly c3QgYXJndW1lbnQgKi8KLQlyZXN1bHRfYm1zID0gYm1zX3JlcGxhY2VfbWVtYmVycyhibXMxLCBi bXMyKTsKKwlCaXRtYXBzZXQgICpibXMxID0gUEdfQVJHX0dFVEJJVE1BUFNFVCgwKTsKKwlCaXRt YXBzZXQgICpibXMyID0gUEdfQVJHX0dFVEJJVE1BUFNFVCgxKTsKIAotCS8qIGJtczEgaXMgbm93 IGludmFsaWQsIGRvIG5vdCBmcmVlIGl0ICovCisJLyogbGVmdCBpbnB1dCBnZXRzIHJlY3ljbGVk ICovCisJYm1zMSA9IGJtc19yZXBsYWNlX21lbWJlcnMoYm1zMSwgYm1zMik7CiAKLQlpZiAoYm1z MikKLQkJYm1zX2ZyZWUoYm1zMik7Ci0KLQlpZiAocmVzdWx0X2JtcyA9PSBOVUxMKQotCQlQR19S RVRVUk5fTlVMTCgpOwotCi0JcmVzdWx0ID0gQklUTUFQU0VUX1RPX1RFWFQocmVzdWx0X2Jtcyk7 Ci0JYm1zX2ZyZWUocmVzdWx0X2Jtcyk7Ci0KLQlQR19SRVRVUk5fVEVYVF9QKHJlc3VsdCk7CisJ Ym1zX2ZyZWUoYm1zMik7CisJUEdfUkVUVVJOX0JJVE1BUFNFVF9BU19URVhUKGJtczEpOwogfQog CiBEYXR1bQogdGVzdF9ibXNfam9pbihQR19GVU5DVElPTl9BUkdTKQogewotCUJpdG1hcHNldCAg KmJtczEgPSBOVUxMLAotCQkJICAgKmJtczIgPSBOVUxMOworCUJpdG1hcHNldCAgKmJtczEgPSBQ R19BUkdfR0VUQklUTUFQU0VUKDApOworCUJpdG1hcHNldCAgKmJtczIgPSBQR19BUkdfR0VUQklU TUFQU0VUKDEpOwogCUJpdG1hcHNldCAgKnJlc3VsdF9ibXM7Ci0JdGV4dAkgICAqcmVzdWx0Owot Ci0JaWYgKCFQR19BUkdJU05VTEwoMCkpCi0JCWJtczEgPSBURVhUX1RPX0JJVE1BUFNFVChQR19H RVRBUkdfVEVYVF9QUCgwKSk7Ci0KLQlpZiAoIVBHX0FSR0lTTlVMTCgxKSkKLQkJYm1zMiA9IFRF WFRfVE9fQklUTUFQU0VUKFBHX0dFVEFSR19URVhUX1BQKDEpKTsKIAotCS8qIElNUE9SVEFOVDog Ym1zX2pvaW4gbWF5IHJlY3ljbGUgZWl0aGVyIGlucHV0IGFyZ3VtZW50cyAqLworCS8qIGVpdGhl ciBpbnB1dCBjYW4gYmUgcmVjeWNsZWQgKi8KIAlyZXN1bHRfYm1zID0gYm1zX2pvaW4oYm1zMSwg Ym1zMik7CiAKLQkvKiBibXMxIGFuZCBibXMyIG1heSBoYXZlIGJlZW4gcmVjeWNsZWQhIERvIG5v dCBmcmVlIGFueSBvZiB0aGVtLiAqLworCS8qIG1lbW9yeSBjbGVhbnVwIHNlZW1zIG1vcmUgdHJp Y2t5IHRoYW4gaXQncyB3b3J0aCBoZXJlICovCiAKLQlpZiAocmVzdWx0X2JtcyA9PSBOVUxMKQot CQlQR19SRVRVUk5fTlVMTCgpOwotCi0JcmVzdWx0ID0gQklUTUFQU0VUX1RPX1RFWFQocmVzdWx0 X2Jtcyk7Ci0JYm1zX2ZyZWUocmVzdWx0X2Jtcyk7Ci0KLQlQR19SRVRVUk5fVEVYVF9QKHJlc3Vs dCk7CisJUEdfUkVUVVJOX0JJVE1BUFNFVF9BU19URVhUKHJlc3VsdF9ibXMpOwogfQogCiBEYXR1 bQogdGVzdF9ibXNfaGFzaF92YWx1ZShQR19GVU5DVElPTl9BUkdTKQogewotCUJpdG1hcHNldCAg KmJtcyA9IE5VTEw7CisJQml0bWFwc2V0ICAqYm1zID0gUEdfQVJHX0dFVEJJVE1BUFNFVCgwKTsK IAl1aW50MzIJCWhhc2hfcmVzdWx0OwogCi0JaWYgKCFQR19BUkdJU05VTEwoMCkpCi0JCWJtcyA9 IFRFWFRfVE9fQklUTUFQU0VUKFBHX0dFVEFSR19URVhUX1BQKDApKTsKLQogCWhhc2hfcmVzdWx0 ID0gYm1zX2hhc2hfdmFsdWUoYm1zKTsKLQotCWlmIChibXMpCi0JCWJtc19mcmVlKGJtcyk7CisJ Ym1zX2ZyZWUoYm1zKTsKIAogCVBHX1JFVFVSTl9JTlQzMihoYXNoX3Jlc3VsdCk7CiB9CkBAIC04 NDgsMjEgKzYwMywxMiBAQCB0ZXN0X2Jtc19oYXNoX3ZhbHVlKFBHX0ZVTkNUSU9OX0FSR1MpCiBE YXR1bQogdGVzdF9iaXRtYXBfaGFzaChQR19GVU5DVElPTl9BUkdTKQogewotCUJpdG1hcHNldCAg KmJtcyA9IE5VTEw7Ci0JQml0bWFwc2V0ICAqYm1zX3B0cjsKKwlCaXRtYXBzZXQgICpibXMgPSBQ R19BUkdfR0VUQklUTUFQU0VUKDApOwogCXVpbnQzMgkJaGFzaF9yZXN1bHQ7CiAKLQlpZiAoIVBH X0FSR0lTTlVMTCgwKSkKLQkJYm1zID0gVEVYVF9UT19CSVRNQVBTRVQoUEdfR0VUQVJHX1RFWFRf UFAoMCkpOwotCi0JYm1zX3B0ciA9IGJtczsKLQogCS8qIENhbGwgYml0bWFwX2hhc2ggKi8KLQlo YXNoX3Jlc3VsdCA9IGJpdG1hcF9oYXNoKCZibXNfcHRyLCBzaXplb2YoQml0bWFwc2V0ICopKTsK LQotCS8qIENsZWFuIHVwICovCi0JaWYgKCFQR19BUkdJU05VTEwoMCkgJiYgYm1zX3B0cikKLQkJ Ym1zX2ZyZWUoYm1zX3B0cik7CisJaGFzaF9yZXN1bHQgPSBiaXRtYXBfaGFzaCgmYm1zLCBzaXpl b2YoQml0bWFwc2V0ICopKTsKKwlibXNfZnJlZShibXMpOwogCiAJUEdfUkVUVVJOX0lOVDMyKGhh c2hfcmVzdWx0KTsKIH0KQEAgLTg3MCwzMCArNjE2LDE0IEBAIHRlc3RfYml0bWFwX2hhc2goUEdf RlVOQ1RJT05fQVJHUykKIERhdHVtCiB0ZXN0X2JpdG1hcF9tYXRjaChQR19GVU5DVElPTl9BUkdT KQogewotCUJpdG1hcHNldCAgKmJtczEgPSBOVUxMLAotCQkJICAgKmJtczIgPSBOVUxMOwotCUJp dG1hcHNldCAgKmJtc19wdHIxLAotCQkJICAgKmJtc19wdHIyOworCUJpdG1hcHNldCAgKmJtczEg PSBQR19BUkdfR0VUQklUTUFQU0VUKDApOworCUJpdG1hcHNldCAgKmJtczIgPSBQR19BUkdfR0VU QklUTUFQU0VUKDEpOwogCWludAkJCW1hdGNoX3Jlc3VsdDsKIAotCWlmICghUEdfQVJHSVNOVUxM KDApKQotCQlibXMxID0gVEVYVF9UT19CSVRNQVBTRVQoUEdfR0VUQVJHX1RFWFRfUFAoMCkpOwot Ci0JaWYgKCFQR19BUkdJU05VTEwoMSkpCi0JCWJtczIgPSBURVhUX1RPX0JJVE1BUFNFVChQR19H RVRBUkdfVEVYVF9QUCgxKSk7Ci0KLQkvKiBTZXQgdXAgcG9pbnRlcnMgdG8gdGhlIEJpdG1hcHNl dHMgKi8KLQlibXNfcHRyMSA9IGJtczE7Ci0JYm1zX3B0cjIgPSBibXMyOwotCiAJLyogQ2FsbCBi aXRtYXBfbWF0Y2ggd2l0aCBhZGRyZXNzZXMgb2YgdGhlIEJpdG1hcHNldCBwb2ludGVycyAqLwot CW1hdGNoX3Jlc3VsdCA9IGJpdG1hcF9tYXRjaCgmYm1zX3B0cjEsICZibXNfcHRyMiwgc2l6ZW9m KEJpdG1hcHNldCAqKSk7Ci0KLQkvKiBDbGVhbiB1cCAqLwotCWlmIChibXMxKQotCQlibXNfZnJl ZShibXMxKTsKLQlpZiAoYm1zMikKLQkJYm1zX2ZyZWUoYm1zMik7CisJbWF0Y2hfcmVzdWx0ID0g Yml0bWFwX21hdGNoKCZibXMxLCAmYm1zMiwgc2l6ZW9mKEJpdG1hcHNldCAqKSk7CisJYm1zX2Zy ZWUoYm1zMSk7CisJYm1zX2ZyZWUoYm1zMik7CiAKIAlQR19SRVRVUk5fSU5UMzIobWF0Y2hfcmVz dWx0KTsKIH0KQEAgLTEwMzEsOCArNzYxLDcgQEAgdGVzdF9yYW5kb21fb3BlcmF0aW9ucyhQR19G VU5DVElPTl9BUkdTKQogCQl0b3RhbF9vcHMrKzsKIAl9CiAKLQlpZiAoYm1zKQotCQlibXNfZnJl ZShibXMpOworCWJtc19mcmVlKGJtcyk7CiAKIAlQR19SRVRVUk5fSU5UMzIodG90YWxfb3BzKTsK IH0K --0000000000003bbb7c06400cb90a--