From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by sourceware.org (Postfix) with ESMTP id D44B53858CDB for ; Fri, 7 Oct 2022 14:21:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org D44B53858CDB Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id BC510106F; Fri, 7 Oct 2022 07:21:11 -0700 (PDT) Received: from [10.57.3.240] (unknown [10.57.3.240]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id EB3713F67D; Fri, 7 Oct 2022 07:21:03 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------50xwSyx1euiXmevaqkTxp3E0" Message-ID: <737c6298-8611-7026-9850-6494f93e2922@arm.com> Date: Fri, 7 Oct 2022 15:20:55 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.3.0 Subject: Re: [PATCH] Teach vectorizer to deal with bitfield accesses (was: [RFC] Teach vectorizer to deal with bitfield reads) Content-Language: en-US To: Richard Biener Cc: Richard Biener , Jakub Jelinek , Richard Sandiford , "gcc-patches@gcc.gnu.org" References: <4a6f2350-f070-1473-63a5-3232968d3a89@arm.com> <4ea91767-de43-9d30-5bd2-a9a0759760c7@arm.com> <69abe824-94f5-95b5-fb7f-6fa076973e05@arm.com> <8f805fb1-d4ae-b0e3-ff26-57fd2c1fc1f7@arm.com> <5c3e3af5-c502-fd5a-2792-4e0d1db405ef@arm.com> <42e266bd-7224-76b7-c782-c00063531917@arm.com> <29d958e5-364f-5784-5764-e9b5d364448a@arm.com> From: "Andre Vieira (lists)" In-Reply-To: X-Spam-Status: No, score=-22.1 required=5.0 tests=BAYES_00,GIT_PATCH_0,KAM_DMARC_NONE,KAM_DMARC_STATUS,KAM_LAZY_DOMAIN_SECURITY,KAM_LOTSOFHASH,NICE_REPLY_A,RCVD_IN_DNSWL_LOW,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------50xwSyx1euiXmevaqkTxp3E0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, Whilst running a bootstrap with extra options to force bitfield vectorization '-O2 -ftree-vectorize -ftree-loop-if-convert -fno-vect-cost-model' I ran into an ICE in vect-patterns where a bit_field_ref had a container that wasn't INTEGRAL_TYPE and had a E_BLKmode, which meant we failed to build an integer type with the same size. For that reason I added a check to bail out earlier if the TYPE_MODE of the container is indeed E_BLKmode. The pattern for the bitfield inserts required no change as we currently don't support containers that aren't integer typed. Also changed a testcase because in BIG-ENDIAN it was not vectorizing due to a different size of container that wasn't supported. This passes the same bootstrap and regressions on aarch64-none-linux and no regressions on aarch64_be-none-elf either. I assume you are OK with these changes Richard, but I don't like to commit on Friday in case something breaks over the weekend, so I'll leave it until Monday. Thanks, Andre On 29/09/2022 08:54, Richard Biener wrote: > On Wed, Sep 28, 2022 at 7:32 PM Andre Vieira (lists) via Gcc-patches > wrote: >> Made the change and also created the ChangeLogs. > OK if bootstrap / testing succeeds. > > Thanks, > Richard. > >> gcc/ChangeLog: >> >> * tree-if-conv.cc (if_convertible_loop_p_1): Move ordering of >> loop bb's from here... >> (tree_if_conversion): ... to here. Also call bitfield lowering >> when appropriate. >> (version_loop_for_if_conversion): Adapt to enable loop >> versioning when we only need >> to lower bitfields. >> (ifcvt_split_critical_edges): Relax condition of expected loop >> form as this is checked earlier. >> (get_bitfield_rep): New function. >> (lower_bitfield): Likewise. >> (bitfields_to_lower_p): Likewise. >> (need_to_lower_bitfields): New global boolean. >> (need_to_ifcvt): Likewise. >> * tree-vect-data-refs.cc (vect_find_stmt_data_reference): >> Improve diagnostic message. >> * tree-vect-patterns.cc (vect_recog_temp_ssa_var): Add default >> value for last parameter. >> (vect_recog_bitfield_ref_pattern): New. >> (vect_recog_bit_insert_pattern): New. >> >> gcc/testsuite/ChangeLog: >> >> * gcc.dg/vect/vect-bitfield-read-1.c: New test. >> * gcc.dg/vect/vect-bitfield-read-2.c: New test. >> * gcc.dg/vect/vect-bitfield-read-3.c: New test. >> * gcc.dg/vect/vect-bitfield-read-4.c: New test. >> * gcc.dg/vect/vect-bitfield-read-5.c: New test. >> * gcc.dg/vect/vect-bitfield-read-6.c: New test. >> * gcc.dg/vect/vect-bitfield-write-1.c: New test. >> * gcc.dg/vect/vect-bitfield-write-2.c: New test. >> * gcc.dg/vect/vect-bitfield-write-3.c: New test. >> * gcc.dg/vect/vect-bitfield-write-4.c: New test. >> * gcc.dg/vect/vect-bitfield-write-5.c: New test. >> >> On 28/09/2022 10:43, Andre Vieira (lists) via Gcc-patches wrote: >>> On 27/09/2022 13:34, Richard Biener wrote: >>>> On Mon, 26 Sep 2022, Andre Vieira (lists) wrote: >>>> >>>>> On 08/09/2022 12:51, Richard Biener wrote: >>>>>> I'm curious, why the push to redundant_ssa_names? That could use >>>>>> a comment ... >>>>> So I purposefully left a #if 0 #else #endif in there so you can see >>>>> the two >>>>> options. But the reason I used redundant_ssa_names is because ifcvt >>>>> seems to >>>>> use that as a container for all pairs of (old, new) ssa names to >>>>> replace >>>>> later. So I just piggy backed on that. I don't know if there's a >>>>> specific >>>>> reason they do the replacement at the end? Maybe some ordering >>>>> issue? Either >>>>> way both adding it to redundant_ssa_names or doing the replacement >>>>> inline work >>>>> for the bitfield lowering (or work in my testing at least). >>>> Possibly because we (in the past?) inserted/copied stuff based on >>>> predicates generated at analysis time after we decide to elide something >>>> so we need to watch for later appearing uses. But who knows ... my mind >>>> fails me here. >>>> >>>> If it works to replace uses immediately please do so. But now >>>> I wonder why we need this - the value shouldn't change so you >>>> should get away with re-using the existing SSA name for the final value? >>> Yeah... good point. A quick change and minor testing seems to agree. >>> I'm sure I had a good reason to do it initially ;) >>> >>> I'll run a full-regression on this change to make sure I didn't miss >>> anything. >>> --------------50xwSyx1euiXmevaqkTxp3E0 Content-Type: text/plain; charset=UTF-8; name="vect_bitfield6.patch" Content-Disposition: attachment; filename="vect_bitfield6.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1iaXRmaWVsZC1y ZWFkLTEuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1iaXRmaWVsZC1yZWFk LTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwLi4wMWNmMzRmYjQ0NDg0Y2E5MjZjYTVkZTk5ZWVmNzZkZDk5 YjY5ZTkyCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92 ZWN0LWJpdGZpZWxkLXJlYWQtMS5jCkBAIC0wLDAgKzEsNDAgQEAKKy8qIHsgZGctcmVxdWly ZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8KKworI2luY2x1ZGUgPHN0ZGFyZy5o PgorI2luY2x1ZGUgInRyZWUtdmVjdC5oIgorCitleHRlcm4gdm9pZCBhYm9ydCh2b2lkKTsK Kworc3RydWN0IHMgeyBpbnQgaSA6IDMxOyB9OworCisjZGVmaW5lIEVMVDAgezB9CisjZGVm aW5lIEVMVDEgezF9CisjZGVmaW5lIEVMVDIgezJ9CisjZGVmaW5lIEVMVDMgezN9CisjZGVm aW5lIE4gMzIKKyNkZWZpbmUgUkVTIDQ4CitzdHJ1Y3QgcyBBW05dCisgID0geyBFTFQwLCBF TFQxLCBFTFQyLCBFTFQzLCBFTFQwLCBFTFQxLCBFTFQyLCBFTFQzLAorICAgICAgRUxUMCwg RUxUMSwgRUxUMiwgRUxUMywgRUxUMCwgRUxUMSwgRUxUMiwgRUxUMywKKyAgICAgIEVMVDAs IEVMVDEsIEVMVDIsIEVMVDMsIEVMVDAsIEVMVDEsIEVMVDIsIEVMVDMsCisgICAgICBFTFQw LCBFTFQxLCBFTFQyLCBFTFQzLCBFTFQwLCBFTFQxLCBFTFQyLCBFTFQzfTsKKworaW50IF9f YXR0cmlidXRlX18gKChub2lwYSkpCitmKHN0cnVjdCBzICpwdHIsIHVuc2lnbmVkIG4pIHsK KyAgICBpbnQgcmVzID0gMDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkKKyAg ICAgIHJlcyArPSBwdHJbaV0uaTsKKyAgICByZXR1cm4gcmVzOworfQorCitpbnQgbWFpbiAo dm9pZCkKK3sKKyAgY2hlY2tfdmVjdCAoKTsKKworICBpZiAoZigmQVswXSwgTikgIT0gUkVT KQorICAgIGFib3J0ICgpOworCisgIHJldHVybiAwOworfQorCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi10cmVlLWR1bXAtdGltZXMgInZlY3Rvcml6ZWQgMSBsb29wcyIgMSAidmVjdCIgfSB9 ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtYml0Zmll bGQtcmVhZC0yLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtYml0ZmllbGQt cmVhZC0yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWE0YTE1NzljMTQ3OGI5NDA3YWQyMWIxOWU4ZmJk Y2E5ZjY3NGI0MgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Zl Y3QvdmVjdC1iaXRmaWVsZC1yZWFkLTIuYwpAQCAtMCwwICsxLDQzIEBACisvKiB7IGRnLXJl cXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovCisKKyNpbmNsdWRlIDxzdGRh cmcuaD4KKyNpbmNsdWRlICJ0cmVlLXZlY3QuaCIKKworZXh0ZXJuIHZvaWQgYWJvcnQodm9p ZCk7CisKK3N0cnVjdCBzIHsKKyAgICB1bnNpZ25lZCBpIDogMzE7CisgICAgY2hhciBhIDog NDsKK307CisKKyNkZWZpbmUgTiAzMgorI2RlZmluZSBFTFQwIHsweDdGRkZGRkZGVUwsIDB9 CisjZGVmaW5lIEVMVDEgezB4N0ZGRkZGRkZVTCwgMX0KKyNkZWZpbmUgRUxUMiB7MHg3RkZG RkZGRlVMLCAyfQorI2RlZmluZSBFTFQzIHsweDdGRkZGRkZGVUwsIDN9CisjZGVmaW5lIFJF UyA0OAorc3RydWN0IHMgQVtOXQorICA9IHsgRUxUMCwgRUxUMSwgRUxUMiwgRUxUMywgRUxU MCwgRUxUMSwgRUxUMiwgRUxUMywKKyAgICAgIEVMVDAsIEVMVDEsIEVMVDIsIEVMVDMsIEVM VDAsIEVMVDEsIEVMVDIsIEVMVDMsCisgICAgICBFTFQwLCBFTFQxLCBFTFQyLCBFTFQzLCBF TFQwLCBFTFQxLCBFTFQyLCBFTFQzLAorICAgICAgRUxUMCwgRUxUMSwgRUxUMiwgRUxUMywg RUxUMCwgRUxUMSwgRUxUMiwgRUxUM307CisKK2ludCBfX2F0dHJpYnV0ZV9fICgobm9pcGEp KQorZihzdHJ1Y3QgcyAqcHRyLCB1bnNpZ25lZCBuKSB7CisgICAgaW50IHJlcyA9IDA7Cisg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpCisgICAgICByZXMgKz0gcHRyW2ldLmE7 CisgICAgcmV0dXJuIHJlczsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGNoZWNrX3Zl Y3QgKCk7CisKKyAgaWYgKGYoJkFbMF0sIE4pICE9IFJFUykKKyAgICBhYm9ydCAoKTsKKwor ICByZXR1cm4gMDsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVz ICJ2ZWN0b3JpemVkIDEgbG9vcHMiIDEgInZlY3QiIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWJpdGZpZWxkLXJlYWQtMy5jIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWJpdGZpZWxkLXJlYWQtMy5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAuLjg0OWY0YTAxN2UxODE4ZWVlNGFiZDY2Mzg1NDE3YTMyNmM0OTc2OTYKLS0tIC9kZXYv bnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtYml0ZmllbGQtcmVh ZC0zLmMKQEAgLTAsMCArMSw0NCBAQAorLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJn ZXQgdmVjdF9pbnQgfSAqLworCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSAidHJl ZS12ZWN0LmgiCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorCitleHRlcm4gdm9pZCBhYm9ydCh2 b2lkKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGludCAgYzsKKyAgICBpbnQgIGI7Cisg ICAgYm9vbCBhIDogMTsKKyAgICBpbnQgIGQgOiAzMTsKK30gc3RydWN0X3Q7CisKKyNkZWZp bmUgTiAxNgorI2RlZmluZSBFTFRfRiB7IDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDAsIDB4 N0ZGRkZGRkYgfQorI2RlZmluZSBFTFRfVCB7IDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDEs IDB4N0ZGRkZGRkYgfQorCitzdHJ1Y3RfdCB2ZWN0X2ZhbHNlW05dID0geyBFTFRfRiwgRUxU X0YsIEVMVF9GLCBFTFRfRiwgRUxUX0YsIEVMVF9GLCBFTFRfRiwgRUxUX0YsCisJCQkgICBF TFRfRiwgRUxUX0YsIEVMVF9GLCBFTFRfRiwgRUxUX0YsIEVMVF9GLCBFTFRfRiwgRUxUX0Yg IH07CitzdHJ1Y3RfdCB2ZWN0X3RydWVbTl0gID0geyBFTFRfRiwgRUxUX0YsIEVMVF9ULCBF TFRfRiwgRUxUX0YsIEVMVF9GLCBFTFRfRiwgRUxUX0YsCisJCQkgICBFTFRfRiwgRUxUX0Ys IEVMVF9ULCBFTFRfRiwgRUxUX0YsIEVMVF9GLCBFTFRfRiwgRUxUX0YgIH07CitpbnQgbWFp biAodm9pZCkKK3sKKyAgdW5zaWduZWQgcmV0ID0gMDsKKyAgZm9yICh1bnNpZ25lZCBpID0g MDsgaSA8IE47IGkrKykKKyAgeworICAgICAgcmV0IHw9IHZlY3RfZmFsc2VbaV0uYTsKKyAg fQorICBpZiAocmV0KQorICAgIGFib3J0ICgpOworCisgIGZvciAodW5zaWduZWQgaSA9IDA7 IGkgPCBOOyBpKyspCisgIHsKKyAgICAgIHJldCB8PSB2ZWN0X3RydWVbaV0uYTsKKyAgfQor ICBpZiAoIXJldCkKKyAgICBhYm9ydCAoKTsKKworICByZXR1cm4gMDsKK30KKworLyogeyBk Zy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJ2ZWN0b3JpemVkIDIgbG9vcHMiIDEg InZlY3QiIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92 ZWN0LWJpdGZpZWxkLXJlYWQtNC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0 LWJpdGZpZWxkLXJlYWQtNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjViYzljNDEyZTk2MTZhZWZjYmY0 OWE0NTE4ZjE2MDMzODBhNTRiMmYKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRl L2djYy5kZy92ZWN0L3ZlY3QtYml0ZmllbGQtcmVhZC00LmMKQEAgLTAsMCArMSw0NSBAQAor LyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLworCisjaW5j bHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSAidHJlZS12ZWN0LmgiCisKK2V4dGVybiB2b2lk IGFib3J0KHZvaWQpOworCitzdHJ1Y3QgcyB7CisgICAgdW5zaWduZWQgaSA6IDMxOworICAg IGNoYXIgeCA6IDI7CisgICAgY2hhciBhIDogNDsKK307CisKKyNkZWZpbmUgTiAzMgorI2Rl ZmluZSBFTFQwIHsweDdGRkZGRkZGVUwsIDMsIDB9CisjZGVmaW5lIEVMVDEgezB4N0ZGRkZG RkZVTCwgMywgMX0KKyNkZWZpbmUgRUxUMiB7MHg3RkZGRkZGRlVMLCAzLCAyfQorI2RlZmlu ZSBFTFQzIHsweDdGRkZGRkZGVUwsIDMsIDN9CisjZGVmaW5lIFJFUyA0OAorc3RydWN0IHMg QVtOXQorICA9IHsgRUxUMCwgRUxUMSwgRUxUMiwgRUxUMywgRUxUMCwgRUxUMSwgRUxUMiwg RUxUMywKKyAgICAgIEVMVDAsIEVMVDEsIEVMVDIsIEVMVDMsIEVMVDAsIEVMVDEsIEVMVDIs IEVMVDMsCisgICAgICBFTFQwLCBFTFQxLCBFTFQyLCBFTFQzLCBFTFQwLCBFTFQxLCBFTFQy LCBFTFQzLAorICAgICAgRUxUMCwgRUxUMSwgRUxUMiwgRUxUMywgRUxUMCwgRUxUMSwgRUxU MiwgRUxUM307CisKK2ludCBfX2F0dHJpYnV0ZV9fICgobm9pcGEpKQorZihzdHJ1Y3QgcyAq cHRyLCB1bnNpZ25lZCBuKSB7CisgICAgaW50IHJlcyA9IDA7CisgICAgZm9yIChpbnQgaSA9 IDA7IGkgPCBuOyArK2kpCisgICAgICByZXMgKz0gcHRyW2ldLmE7CisgICAgcmV0dXJuIHJl czsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGNoZWNrX3ZlY3QgKCk7CisKKyAgaWYg KGYoJkFbMF0sIE4pICE9IFJFUykKKyAgICBhYm9ydCAoKTsKKworICByZXR1cm4gMDsKK30K KworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJ2ZWN0b3JpemVkIDEg bG9vcHMiIDEgInZlY3QiIH0gfSAqLworCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dj Yy5kZy92ZWN0L3ZlY3QtYml0ZmllbGQtcmVhZC01LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5k Zy92ZWN0L3ZlY3QtYml0ZmllbGQtcmVhZC01LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWRjMjRkM2Vk ZWQxOTIxNDRkYzlhZDk0NTg5YjRjNWMzZDk5OWU2NQotLS0gL2Rldi9udWxsCisrKyBiL2dj Yy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1iaXRmaWVsZC1yZWFkLTUuYwpAQCAtMCww ICsxLDQyIEBACisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9 ICovCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlICJ0cmVlLXZlY3QuaCIKKwor ZXh0ZXJuIHZvaWQgYWJvcnQodm9pZCk7CisKK3N0cnVjdCBzIHsKKyAgICB1bnNpZ25lZCBh IDogMjM7IHVuc2lnbmVkIGIgOiA5OworfTsKKworI2RlZmluZSBOIDMyCisjZGVmaW5lIEVM VDAgezB4N0ZGRkZGVUwsIDB9CisjZGVmaW5lIEVMVDEgezB4N0ZGRkZGVUwsIDF9CisjZGVm aW5lIEVMVDIgezB4N0ZGRkZGVUwsIDJ9CisjZGVmaW5lIEVMVDMgezB4N0ZGRkZGVUwsIDN9 CisjZGVmaW5lIFJFUyA0OAorc3RydWN0IHMgQVtOXQorICA9IHsgRUxUMCwgRUxUMSwgRUxU MiwgRUxUMywgRUxUMCwgRUxUMSwgRUxUMiwgRUxUMywKKyAgICAgIEVMVDAsIEVMVDEsIEVM VDIsIEVMVDMsIEVMVDAsIEVMVDEsIEVMVDIsIEVMVDMsCisgICAgICBFTFQwLCBFTFQxLCBF TFQyLCBFTFQzLCBFTFQwLCBFTFQxLCBFTFQyLCBFTFQzLAorICAgICAgRUxUMCwgRUxUMSwg RUxUMiwgRUxUMywgRUxUMCwgRUxUMSwgRUxUMiwgRUxUM307CisKK2ludCBfX2F0dHJpYnV0 ZV9fICgobm9pcGEpKQorZihzdHJ1Y3QgcyAqcHRyLCB1bnNpZ25lZCBuKSB7CisgICAgaW50 IHJlcyA9IDA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpCisgICAgICByZXMg Kz0gcHRyW2ldLmI7CisgICAgcmV0dXJuIHJlczsKK30KKworaW50IG1haW4gKHZvaWQpCit7 CisgIGNoZWNrX3ZlY3QgKCk7CisKKyAgaWYgKGYoJkFbMF0sIE4pICE9IFJFUykKKyAgICBh Ym9ydCAoKTsKKworICByZXR1cm4gMDsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJl ZS1kdW1wLXRpbWVzICJ2ZWN0b3JpemVkIDEgbG9vcHMiIDEgInZlY3QiIH0gfSAqLwpkaWZm IC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWJpdGZpZWxkLXJlYWQt Ni5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWJpdGZpZWxkLXJlYWQtNi5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAuLjdkMjRjMjk5NzU4NjU4ODNhN2NkYzdhYTA1N2ZiYjZiZjQxM2Uw YmMKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3Qt Yml0ZmllbGQtcmVhZC02LmMKQEAgLTAsMCArMSw0MiBAQAorLyogeyBkZy1yZXF1aXJlLWVm ZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLworCisjaW5jbHVkZSA8c3RkYXJnLmg+Cisj aW5jbHVkZSAidHJlZS12ZWN0LmgiCisKK2V4dGVybiB2b2lkIGFib3J0KHZvaWQpOworCitz dHJ1Y3QgcyB7CisgICAgdW5zaWduZWQgYSA6IDIzOyB1bnNpZ25lZCBiIDogODsKK307CisK KyNkZWZpbmUgTiAzMgorI2RlZmluZSBFTFQwIHsweDdGRkZGRlVMLCAwfQorI2RlZmluZSBF TFQxIHsweDdGRkZGRlVMLCAxfQorI2RlZmluZSBFTFQyIHsweDdGRkZGRlVMLCAyfQorI2Rl ZmluZSBFTFQzIHsweDdGRkZGRlVMLCAzfQorI2RlZmluZSBSRVMgNDgKK3N0cnVjdCBzIEFb Tl0KKyAgPSB7IEVMVDAsIEVMVDEsIEVMVDIsIEVMVDMsIEVMVDAsIEVMVDEsIEVMVDIsIEVM VDMsCisgICAgICBFTFQwLCBFTFQxLCBFTFQyLCBFTFQzLCBFTFQwLCBFTFQxLCBFTFQyLCBF TFQzLAorICAgICAgRUxUMCwgRUxUMSwgRUxUMiwgRUxUMywgRUxUMCwgRUxUMSwgRUxUMiwg RUxUMywKKyAgICAgIEVMVDAsIEVMVDEsIEVMVDIsIEVMVDMsIEVMVDAsIEVMVDEsIEVMVDIs IEVMVDN9OworCitpbnQgX19hdHRyaWJ1dGVfXyAoKG5vaXBhKSkKK2Yoc3RydWN0IHMgKnB0 ciwgdW5zaWduZWQgbikgeworICAgIGludCByZXMgPSAwOworICAgIGZvciAoaW50IGkgPSAw OyBpIDwgbjsgKytpKQorICAgICAgcmVzICs9IHB0cltpXS5iOworICAgIHJldHVybiByZXM7 Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBjaGVja192ZWN0ICgpOworCisgIGlmIChm KCZBWzBdLCBOKSAhPSBSRVMpCisgICAgYWJvcnQgKCk7CisKKyAgcmV0dXJuIDA7Cit9CisK Ky8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAidmVjdG9yaXplZCAxIGxv b3BzIiAxICJ2ZWN0IiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRn L3ZlY3QvdmVjdC1iaXRmaWVsZC13cml0ZS0xLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92 ZWN0L3ZlY3QtYml0ZmllbGQtd3JpdGUtMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5NjgzZDI3N2Ix YWRlMTAzNDQ5NjEzNmYxZDAzYmIyYjQ0NjkwMGYKLS0tIC9kZXYvbnVsbAorKysgYi9nY2Mv dGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtYml0ZmllbGQtd3JpdGUtMS5jCkBAIC0wLDAg KzEsMzkgQEAKKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0g Ki8KKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgInRyZWUtdmVjdC5oIgorCitl eHRlcm4gdm9pZCBhYm9ydCh2b2lkKTsKKworc3RydWN0IHMgeyBpbnQgaSA6IDMxOyB9Owor CisjZGVmaW5lIE4gMzIKKyNkZWZpbmUgViA1CitzdHJ1Y3QgcyBBW05dOworCit2b2lkIF9f YXR0cmlidXRlX18gKChub2lwYSkpCitmKHN0cnVjdCBzICpwdHIsIHVuc2lnbmVkIG4pIHsK KyAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkKKyAgICAgIHB0cltpXS5pID0gVjsK K30KKwordm9pZCBfX2F0dHJpYnV0ZV9fICgobm9pcGEpKQorY2hlY2tfZihzdHJ1Y3QgcyAq cHRyKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IE47ICsraSkKKyAgICAgIGlm IChwdHJbaV0uaSAhPSBWKQorCWFib3J0ICgpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sK KyAgY2hlY2tfdmVjdCAoKTsKKyAgX19idWlsdGluX21lbXNldCAoJkFbMF0sIDAsIHNpemVv ZihzdHJ1Y3QgcykgKiBOKTsKKworICBmKCZBWzBdLCBOKTsKKyAgY2hlY2tfZiAoJkFbMF0p OworCisgIHJldHVybiAwOworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAt dGltZXMgInZlY3Rvcml6ZWQgMSBsb29wcyIgMSAidmVjdCIgfSB9ICovCisKZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1iaXRmaWVsZC13cml0ZS0yLmMg Yi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtYml0ZmllbGQtd3JpdGUtMi5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAuLmQ1NTBkZDM1YWI3NWViNjdmNmU1M2Y4OWZiZjU1YjczMTVlNTBiYzkK LS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtYml0 ZmllbGQtd3JpdGUtMi5jCkBAIC0wLDAgKzEsNDIgQEAKKy8qIHsgZGctcmVxdWlyZS1lZmZl Y3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8KKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2lu Y2x1ZGUgInRyZWUtdmVjdC5oIgorCitleHRlcm4gdm9pZCBhYm9ydCh2b2lkKTsKKworc3Ry dWN0IHMgeworICAgIHVuc2lnbmVkIGkgOiAzMTsKKyAgICBjaGFyIGEgOiA0OworfTsKKwor I2RlZmluZSBOIDMyCisjZGVmaW5lIFYgNQorc3RydWN0IHMgQVtOXTsKKwordm9pZCBfX2F0 dHJpYnV0ZV9fICgobm9pcGEpKQorZihzdHJ1Y3QgcyAqcHRyLCB1bnNpZ25lZCBuKSB7Cisg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpCisgICAgICBwdHJbaV0uYSA9IFY7Cit9 CisKK3ZvaWQgX19hdHRyaWJ1dGVfXyAoKG5vaXBhKSkKK2NoZWNrX2Yoc3RydWN0IHMgKnB0 cikgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBOOyArK2kpCisgICAgICBpZiAo cHRyW2ldLmEgIT0gVikKKwlhYm9ydCAoKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7Cisg IGNoZWNrX3ZlY3QgKCk7CisgIF9fYnVpbHRpbl9tZW1zZXQgKCZBWzBdLCAwLCBzaXplb2Yo c3RydWN0IHMpICogTik7CisKKyAgZigmQVswXSwgTik7CisgIGNoZWNrX2YgKCZBWzBdKTsK KworICByZXR1cm4gMDsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRp bWVzICJ2ZWN0b3JpemVkIDEgbG9vcHMiIDEgInZlY3QiIH0gfSAqLworCmRpZmYgLS1naXQg YS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtYml0ZmllbGQtd3JpdGUtMy5jIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWJpdGZpZWxkLXdyaXRlLTMuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwLi4zMzAzZDI2MTBmZjk3MmQ5ODZiZTE3Mjk2MmMxMjk2MzRlZTY0MjU0Ci0t LSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWJpdGZp ZWxkLXdyaXRlLTMuYwpAQCAtMCwwICsxLDQzIEBACisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0 aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNs dWRlICJ0cmVlLXZlY3QuaCIKKworZXh0ZXJuIHZvaWQgYWJvcnQodm9pZCk7CisKK3N0cnVj dCBzIHsKKyAgICB1bnNpZ25lZCBpIDogMzE7CisgICAgY2hhciB4IDogMjsKKyAgICBjaGFy IGEgOiA0OworfTsKKworI2RlZmluZSBOIDMyCisjZGVmaW5lIFYgNQorc3RydWN0IHMgQVtO XTsKKwordm9pZCBfX2F0dHJpYnV0ZV9fICgobm9pcGEpKQorZihzdHJ1Y3QgcyAqcHRyLCB1 bnNpZ25lZCBuKSB7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpCisgICAgICBw dHJbaV0uYSA9IFY7Cit9CisKK3ZvaWQgX19hdHRyaWJ1dGVfXyAoKG5vaXBhKSkKK2NoZWNr X2Yoc3RydWN0IHMgKnB0cikgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBOOyAr K2kpCisgICAgICBpZiAocHRyW2ldLmEgIT0gVikKKwlhYm9ydCAoKTsKK30KKworaW50IG1h aW4gKHZvaWQpCit7CisgIGNoZWNrX3ZlY3QgKCk7CisgIF9fYnVpbHRpbl9tZW1zZXQgKCZB WzBdLCAwLCBzaXplb2Yoc3RydWN0IHMpICogTik7CisKKyAgZigmQVswXSwgTik7CisgIGNo ZWNrX2YgKCZBWzBdKTsKKworICByZXR1cm4gMDsKK30KKworLyogeyBkZy1maW5hbCB7IHNj YW4tdHJlZS1kdW1wLXRpbWVzICJ2ZWN0b3JpemVkIDEgbG9vcHMiIDEgInZlY3QiIH0gfSAq LworCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtYml0Zmll bGQtd3JpdGUtNC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWJpdGZpZWxk LXdyaXRlLTQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYWU2ZWEzNTU3ZGNhYmE3YjMzMGViZGFhNDcx MjgxZDMzZDJiYTE1Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv dmVjdC92ZWN0LWJpdGZpZWxkLXdyaXRlLTQuYwpAQCAtMCwwICsxLDQyIEBACisvKiB7IGRn LXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovCisKKyNpbmNsdWRlIDxz dGRhcmcuaD4KKyNpbmNsdWRlICJ0cmVlLXZlY3QuaCIKKworZXh0ZXJuIHZvaWQgYWJvcnQo dm9pZCk7CisKK3N0cnVjdCBzIHsKKyAgICB1bnNpZ25lZCBiIDogMjM7CisgICAgdW5zaWdu ZWQgYSA6IDk7Cit9OworCisjZGVmaW5lIE4gMzIKKyNkZWZpbmUgViA1CitzdHJ1Y3QgcyBB W05dOworCit2b2lkIF9fYXR0cmlidXRlX18gKChub2lwYSkpCitmKHN0cnVjdCBzICpwdHIs IHVuc2lnbmVkIG4pIHsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkKKyAgICAg IHB0cltpXS5hID0gVjsKK30KKwordm9pZCBfX2F0dHJpYnV0ZV9fICgobm9pcGEpKQorY2hl Y2tfZihzdHJ1Y3QgcyAqcHRyKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IE47 ICsraSkKKyAgICAgIGlmIChwdHJbaV0uYSAhPSBWKQorCWFib3J0ICgpOworfQorCitpbnQg bWFpbiAodm9pZCkKK3sKKyAgY2hlY2tfdmVjdCAoKTsKKyAgX19idWlsdGluX21lbXNldCAo JkFbMF0sIDAsIHNpemVvZihzdHJ1Y3QgcykgKiBOKTsKKworICBmKCZBWzBdLCBOKTsKKyAg Y2hlY2tfZiAoJkFbMF0pOworCisgIHJldHVybiAwOworfQorCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi10cmVlLWR1bXAtdGltZXMgInZlY3Rvcml6ZWQgMSBsb29wcyIgMSAidmVjdCIgfSB9 ICovCisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1iaXRm aWVsZC13cml0ZS01LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtYml0Zmll bGQtd3JpdGUtNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk5MzYwYzI5NjdiMDc2MjEyYzY3ZWI0ZjM0 YjhmZDkxNzExZDg4MjEKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5k Zy92ZWN0L3ZlY3QtYml0ZmllbGQtd3JpdGUtNS5jCkBAIC0wLDAgKzEsNDIgQEAKKy8qIHsg ZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8KKworI2luY2x1ZGUg PHN0ZGFyZy5oPgorI2luY2x1ZGUgInRyZWUtdmVjdC5oIgorCitleHRlcm4gdm9pZCBhYm9y dCh2b2lkKTsKKworc3RydWN0IHMgeworICAgIHVuc2lnbmVkIGIgOiAyMzsKKyAgICB1bnNp Z25lZCBhIDogODsKK307CisKKyNkZWZpbmUgTiAzMgorI2RlZmluZSBWIDUKK3N0cnVjdCBz IEFbTl07CisKK3ZvaWQgX19hdHRyaWJ1dGVfXyAoKG5vaXBhKSkKK2Yoc3RydWN0IHMgKnB0 ciwgdW5zaWduZWQgbikgeworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKQorICAg ICAgcHRyW2ldLmEgPSBWOworfQorCit2b2lkIF9fYXR0cmlidXRlX18gKChub2lwYSkpCitj aGVja19mKHN0cnVjdCBzICpwdHIpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg TjsgKytpKQorICAgICAgaWYgKHB0cltpXS5hICE9IFYpCisJYWJvcnQgKCk7Cit9CisKK2lu dCBtYWluICh2b2lkKQoreworICBjaGVja192ZWN0ICgpOworICBfX2J1aWx0aW5fbWVtc2V0 ICgmQVswXSwgMCwgc2l6ZW9mKHN0cnVjdCBzKSAqIE4pOworCisgIGYoJkFbMF0sIE4pOwor ICBjaGVja19mICgmQVswXSk7CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIHsgZGctZmluYWwg eyBzY2FuLXRyZWUtZHVtcC10aW1lcyAidmVjdG9yaXplZCAxIGxvb3BzIiAxICJ2ZWN0IiB9 IH0gKi8KKwpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtaWYtY29udi5jYyBiL2djYy90cmVlLWlm LWNvbnYuY2MKaW5kZXggYmFjMjlmYjU1NzQ2MmY1ZDMxOTM0ODFlZjE4MGYxNDEyZThiYzYz OS4uZTQ2OGE0NjU5ZmEyOGEzYTMxYzMzOTBjZjE5YmVlNjVmNDU5MGI4MCAxMDA2NDQKLS0t IGEvZ2NjL3RyZWUtaWYtY29udi5jYworKysgYi9nY2MvdHJlZS1pZi1jb252LmNjCkBAIC05 MSw2ICs5MSw3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJ ZiBub3Qgc2VlCiAjaW5jbHVkZSAidHJlZS1wYXNzLmgiCiAjaW5jbHVkZSAic3NhLmgiCiAj aW5jbHVkZSAiZXhwbWVkLmgiCisjaW5jbHVkZSAiZXhwci5oIgogI2luY2x1ZGUgIm9wdGFi cy1xdWVyeS5oIgogI2luY2x1ZGUgImdpbXBsZS1wcmV0dHktcHJpbnQuaCIKICNpbmNsdWRl ICJhbGlhcy5oIgpAQCAtMTIzLDYgKzEyNCw5IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhl IGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAjaW5jbHVkZSAidHJlZS12ZWN0b3JpemVy LmgiCiAjaW5jbHVkZSAidHJlZS1laC5oIgogCisvKiBGb3IgbGFuZ19ob29rcy50eXBlcy50 eXBlX2Zvcl9tb2RlLiAgKi8KKyNpbmNsdWRlICJsYW5naG9va3MuaCIKKwogLyogT25seSBo YW5kbGUgUEhJcyB3aXRoIG5vIG1vcmUgYXJndW1lbnRzIHVubGVzcyB3ZSBhcmUgYXNrZWQg dG8gYnkKICAgIHNpbWQgcHJhZ21hLiAgKi8KICNkZWZpbmUgTUFYX1BISV9BUkdfTlVNIFwK QEAgLTE0NSw2ICsxNDksMTIgQEAgc3RhdGljIGJvb2wgbmVlZF90b19yZXdyaXRlX3VuZGVm aW5lZDsKICAgIGJlZm9yZSBwaGlfY29udmVydGlibGVfYnlfZGVnZW5lcmF0aW5nX2FyZ3Mu ICAqLwogc3RhdGljIGJvb2wgYW55X2NvbXBsaWNhdGVkX3BoaTsKIAorLyogVHJ1ZSBpZiB3 ZSBoYXZlIGJpdGZpZWxkIGFjY2Vzc2VzIHdlIGNhbiBsb3dlci4gICovCitzdGF0aWMgYm9v bCBuZWVkX3RvX2xvd2VyX2JpdGZpZWxkczsKKworLyogVHJ1ZSBpZiB0aGVyZSBpcyBhbnkg aWZjdnRpbmcgdG8gYmUgZG9uZS4gICovCitzdGF0aWMgYm9vbCBuZWVkX3RvX2lmY3Z0Owor CiAvKiBIYXNoIGZvciBzdHJ1Y3QgaW5uZXJtb3N0X2xvb3BfYmVoYXZpb3IuICBJdCBkZXBl bmRzIG9uIHRoZSB1c2VyIHRvCiAgICBmcmVlIHRoZSBtZW1vcnkuICAqLwogCkBAIC0xNDEx LDE1ICsxNDIxLDYgQEAgaWZfY29udmVydGlibGVfbG9vcF9wXzEgKGNsYXNzIGxvb3AgKmxv b3AsIHZlYzxkYXRhX3JlZmVyZW5jZV9wPiAqcmVmcykKIAogICBjYWxjdWxhdGVfZG9taW5h bmNlX2luZm8gKENESV9ET01JTkFUT1JTKTsKIAotICAvKiBBbGxvdyBzdGF0ZW1lbnRzIHRo YXQgY2FuIGJlIGhhbmRsZWQgZHVyaW5nIGlmLWNvbnZlcnNpb24uICAqLwotICBpZmNfYmJz ID0gZ2V0X2xvb3BfYm9keV9pbl9pZl9jb252X29yZGVyIChsb29wKTsKLSAgaWYgKCFpZmNf YmJzKQotICAgIHsKLSAgICAgIGlmIChkdW1wX2ZpbGUgJiYgKGR1bXBfZmxhZ3MgJiBUREZf REVUQUlMUykpCi0JZnByaW50ZiAoZHVtcF9maWxlLCAiSXJyZWR1Y2libGUgbG9vcFxuIik7 Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgIGZvciAoaSA9IDA7IGkgPCBsb29w LT5udW1fbm9kZXM7IGkrKykKICAgICB7CiAgICAgICBiYXNpY19ibG9jayBiYiA9IGlmY19i YnNbaV07CkBAIC0yODk5LDE4ICsyOTAwLDIyIEBAIHZlcnNpb25fbG9vcF9mb3JfaWZfY29u dmVyc2lvbiAoY2xhc3MgbG9vcCAqbG9vcCwgdmVjPGdpbXBsZSAqPiAqcHJlZHMpCiAgIGNs YXNzIGxvb3AgKm5ld19sb29wOwogICBnaW1wbGUgKmc7CiAgIGdpbXBsZV9zdG10X2l0ZXJh dG9yIGdzaTsKLSAgdW5zaWduZWQgaW50IHNhdmVfbGVuZ3RoOworICB1bnNpZ25lZCBpbnQg c2F2ZV9sZW5ndGggPSAwOwogCiAgIGcgPSBnaW1wbGVfYnVpbGRfY2FsbF9pbnRlcm5hbCAo SUZOX0xPT1BfVkVDVE9SSVpFRCwgMiwKIAkJCQkgIGJ1aWxkX2ludF9jc3QgKGludGVnZXJf dHlwZV9ub2RlLCBsb29wLT5udW0pLAogCQkJCSAgaW50ZWdlcl96ZXJvX25vZGUpOwogICBn aW1wbGVfY2FsbF9zZXRfbGhzIChnLCBjb25kKTsKIAotICAvKiBTYXZlIEJCLT5hdXggYXJv dW5kIGxvb3BfdmVyc2lvbiBhcyB0aGF0IHVzZXMgdGhlIHNhbWUgZmllbGQuICAqLwotICBz YXZlX2xlbmd0aCA9IGxvb3AtPmlubmVyID8gbG9vcC0+aW5uZXItPm51bV9ub2RlcyA6IGxv b3AtPm51bV9ub2RlczsKLSAgdm9pZCAqKnNhdmVkX3ByZWRzID0gWEFMTE9DQVZFQyAodm9p ZCAqLCBzYXZlX2xlbmd0aCk7Ci0gIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzYXZlX2xl bmd0aDsgaSsrKQotICAgIHNhdmVkX3ByZWRzW2ldID0gaWZjX2Jic1tpXS0+YXV4OworICB2 b2lkICoqc2F2ZWRfcHJlZHMgPSBOVUxMOworICBpZiAoYW55X2NvbXBsaWNhdGVkX3BoaSB8 fCBuZWVkX3RvX3ByZWRpY2F0ZSkKKyAgICB7CisgICAgICAvKiBTYXZlIEJCLT5hdXggYXJv dW5kIGxvb3BfdmVyc2lvbiBhcyB0aGF0IHVzZXMgdGhlIHNhbWUgZmllbGQuICAqLworICAg ICAgc2F2ZV9sZW5ndGggPSBsb29wLT5pbm5lciA/IGxvb3AtPmlubmVyLT5udW1fbm9kZXMg OiBsb29wLT5udW1fbm9kZXM7CisgICAgICBzYXZlZF9wcmVkcyA9IFhBTExPQ0FWRUMgKHZv aWQgKiwgc2F2ZV9sZW5ndGgpOworICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNh dmVfbGVuZ3RoOyBpKyspCisJc2F2ZWRfcHJlZHNbaV0gPSBpZmNfYmJzW2ldLT5hdXg7Cisg ICAgfQogCiAgIGluaXRpYWxpemVfb3JpZ2luYWxfY29weV90YWJsZXMgKCk7CiAgIC8qIEF0 IHRoaXMgcG9pbnQgd2UgaW52YWxpZGF0ZSBwb3JmaWxlIGNvbmZpc3RlbmN5IHVudGlsIElG Tl9MT09QX1ZFQ1RPUklaRUQKQEAgLTI5MjIsOCArMjkyNyw5IEBAIHZlcnNpb25fbG9vcF9m b3JfaWZfY29udmVyc2lvbiAoY2xhc3MgbG9vcCAqbG9vcCwgdmVjPGdpbXBsZSAqPiAqcHJl ZHMpCiAJCQkgICBwcm9maWxlX3Byb2JhYmlsaXR5OjphbHdheXMgKCksIHRydWUpOwogICBm cmVlX29yaWdpbmFsX2NvcHlfdGFibGVzICgpOwogCi0gIGZvciAodW5zaWduZWQgaSA9IDA7 IGkgPCBzYXZlX2xlbmd0aDsgaSsrKQotICAgIGlmY19iYnNbaV0tPmF1eCA9IHNhdmVkX3By ZWRzW2ldOworICBpZiAoYW55X2NvbXBsaWNhdGVkX3BoaSB8fCBuZWVkX3RvX3ByZWRpY2F0 ZSkKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2F2ZV9sZW5ndGg7IGkrKykKKyAg ICAgIGlmY19iYnNbaV0tPmF1eCA9IHNhdmVkX3ByZWRzW2ldOwogCiAgIGlmIChuZXdfbG9v cCA9PSBOVUxMKQogICAgIHJldHVybiBOVUxMOwpAQCAtMjk5OSw3ICszMDA1LDcgQEAgaWZj dnRfc3BsaXRfY3JpdGljYWxfZWRnZXMgKGNsYXNzIGxvb3AgKmxvb3AsIGJvb2wgYWdncmVz c2l2ZV9pZl9jb252KQogICBhdXRvX3ZlYzxlZGdlPiBjcml0aWNhbF9lZGdlczsKIAogICAv KiBMb29wIGlzIG5vdCB3ZWxsIGZvcm1lZC4gICovCi0gIGlmIChudW0gPD0gMiB8fCBsb29w LT5pbm5lciB8fCAhc2luZ2xlX2V4aXQgKGxvb3ApKQorICBpZiAobG9vcC0+aW5uZXIpCiAg ICAgcmV0dXJuIGZhbHNlOwogCiAgIGJvZHkgPSBnZXRfbG9vcF9ib2R5IChsb29wKTsKQEAg LTMyNjAsNiArMzI2NiwyMDEgQEAgaWZjdnRfaG9pc3RfaW52YXJpYW50cyAoY2xhc3MgbG9v cCAqbG9vcCwgZWRnZSBwZSkKICAgZnJlZSAoYm9keSk7CiB9CiAKKy8qIFJldHVybnMgdGhl IERFQ0xfRklFTERfQklUX09GRlNFVCBvZiB0aGUgYml0ZmllbGQgYWNjZXNzZSBpbiBzdG10 IGlmZiBpdHMKKyAgIHR5cGUgbW9kZSBpcyBub3QgQkxLbW9kZS4gIElmIEJJVFBPUyBpcyBu b3QgTlVMTCBpdCB3aWxsIGhvbGQgdGhlIHBvbHlfaW50NjQKKyAgIHZhbHVlIG9mIHRoZSBE RUNMX0ZJRUxEX0JJVF9PRkZTRVQgb2YgdGhlIGJpdGZpZWxkIGFjY2VzcyBhbmQgU1RSVUNU X0VYUFIsCisgICBpZiBub3QgTlVMTCwgd2lsbCBob2xkIHRoZSB0cmVlIHJlcHJlc2VudGlu ZyB0aGUgYmFzZSBzdHJ1Y3Qgb2YgdGhpcworICAgYml0ZmllbGQuICAqLworCitzdGF0aWMg dHJlZQorZ2V0X2JpdGZpZWxkX3JlcCAoZ2Fzc2lnbiAqc3RtdCwgYm9vbCB3cml0ZSwgdHJl ZSAqYml0cG9zLAorCQkgIHRyZWUgKnN0cnVjdF9leHByKQoreworICB0cmVlIGNvbXBfcmVm ID0gd3JpdGUgPyBnaW1wbGVfYXNzaWduX2xocyAoc3RtdCkKKwkJCTogZ2ltcGxlX2Fzc2ln bl9yaHMxIChzdG10KTsKKworICB0cmVlIGZpZWxkX2RlY2wgPSBUUkVFX09QRVJBTkQgKGNv bXBfcmVmLCAxKTsKKyAgdHJlZSByZXBfZGVjbCA9IERFQ0xfQklUX0ZJRUxEX1JFUFJFU0VO VEFUSVZFIChmaWVsZF9kZWNsKTsKKworICAvKiBCYWlsIG91dCBpZiB0aGUgcmVwcmVzZW50 YXRpdmUgaXMgQkxLbW9kZSBhcyB3ZSB3aWxsIG5vdCBiZSBhYmxlIHRvCisgICAgIHZlY3Rv cml6ZSB0aGlzLiAgKi8KKyAgaWYgKFRZUEVfTU9ERSAoVFJFRV9UWVBFIChyZXBfZGVjbCkp ID09IEVfQkxLbW9kZSkKKyAgICByZXR1cm4gTlVMTF9UUkVFOworCisgIC8qIEJhaWwgb3V0 IGlmIHRoZSBERUNMX1NJWkUgb2YgdGhlIGZpZWxkX2RlY2wgaXNuJ3QgdGhlIHNhbWUgYXMg dGhlIEJGJ3MKKyAgICAgcHJlY2lzaW9uLiAgKi8KKyAgdW5zaWduZWQgSE9TVF9XSURFX0lO VCBiZl9wcmVjCisgICAgPSBUWVBFX1BSRUNJU0lPTiAoVFJFRV9UWVBFIChnaW1wbGVfYXNz aWduX2xocyAoc3RtdCkpKTsKKyAgaWYgKGNvbXBhcmVfdHJlZV9pbnQgKERFQ0xfU0laRSAo ZmllbGRfZGVjbCksIGJmX3ByZWMpICE9IDApCisgICAgcmV0dXJuIE5VTExfVFJFRTsKKwor ICBpZiAoc3RydWN0X2V4cHIpCisgICAgKnN0cnVjdF9leHByID0gVFJFRV9PUEVSQU5EIChj b21wX3JlZiwgMCk7CisKKyAgaWYgKGJpdHBvcykKKyAgICAqYml0cG9zCisgICAgICA9IGZv bGRfYnVpbGQyIChNSU5VU19FWFBSLCBiaXRzaXpldHlwZSwKKwkJICAgICBERUNMX0ZJRUxE X0JJVF9PRkZTRVQgKGZpZWxkX2RlY2wpLAorCQkgICAgIERFQ0xfRklFTERfQklUX09GRlNF VCAocmVwX2RlY2wpKTsKKworICByZXR1cm4gcmVwX2RlY2w7CisKK30KKworLyogTG93ZXJz IHRoZSBiaXRmaWVsZCBkZXNjcmliZWQgYnkgREFUQS4KKyAgIEZvciBhIHdyaXRlIGxpa2U6 CisKKyAgIHN0cnVjdC5iZiA9IF8xOworCisgICBsb3dlciB0bzoKKworICAgX19pZmNfMSA9 IHN0cnVjdC48cmVwcmVzZW50YXRpdmU+OworICAgX19pZmNfMiA9IEJJVF9JTlNFUlRfRVhQ UiAoX19pZmNfMSwgXzEsIGJpdHBvcyk7CisgICBzdHJ1Y3QuPHJlcHJlc2VudGF0aXZlPiA9 IF9faWZjXzI7CisKKyAgIEZvciBhIHJlYWQ6CisKKyAgIF8xID0gc3RydWN0LmJmOworCisg ICAgbG93ZXIgdG86CisKKyAgICBfX2lmY18xID0gc3RydWN0LjxyZXByZXNlbnRhdGl2ZT47 CisgICAgXzEgPSAgQklUX0ZJRUxEX1JFRiAoX19pZmNfMSwgYml0c2l6ZSwgYml0cG9zKTsK KworICAgIHdoZXJlIHJlcHJlc2VudGF0aXZlIGlzIGEgbGVnYWwgbG9hZCB0aGF0IGNvbnRh aW5zIHRoZSBiaXRmaWVsZCB2YWx1ZSwKKyAgICBiaXRzaXplIGlzIHRoZSBzaXplIG9mIHRo ZSBiaXRmaWVsZCBhbmQgYml0cG9zIHRoZSBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mCisgICAg dGhlIGJpdGZpZWxkIHdpdGhpbiB0aGUgcmVwcmVzZW50YXRpdmUuICAqLworCitzdGF0aWMg dm9pZAorbG93ZXJfYml0ZmllbGQgKGdhc3NpZ24gKnN0bXQsIGJvb2wgd3JpdGUpCit7Cisg IHRyZWUgc3RydWN0X2V4cHI7CisgIHRyZWUgYml0cG9zOworICB0cmVlIHJlcF9kZWNsID0g Z2V0X2JpdGZpZWxkX3JlcCAoc3RtdCwgd3JpdGUsICZiaXRwb3MsICZzdHJ1Y3RfZXhwcik7 CisgIHRyZWUgcmVwX3R5cGUgPSBUUkVFX1RZUEUgKHJlcF9kZWNsKTsKKyAgdHJlZSBiZl90 eXBlID0gVFJFRV9UWVBFIChnaW1wbGVfYXNzaWduX2xocyAoc3RtdCkpOworCisgIGdpbXBs ZV9zdG10X2l0ZXJhdG9yIGdzaSA9IGdzaV9mb3Jfc3RtdCAoc3RtdCk7CisgIGlmIChkdW1w X2ZpbGUgJiYgKGR1bXBfZmxhZ3MgJiBUREZfREVUQUlMUykpCisgICAgeworICAgICAgZnBy aW50ZiAoZHVtcF9maWxlLCAiTG93ZXJpbmc6XG4iKTsKKyAgICAgIHByaW50X2dpbXBsZV9z dG10IChkdW1wX2ZpbGUsIHN0bXQsIDAsIFRERl9TTElNKTsKKyAgICAgIGZwcmludGYgKGR1 bXBfZmlsZSwgInRvOlxuIik7CisgICAgfQorCisgIC8qIFJFUF9DT01QX1JFRiBpcyBhIENP TVBPTkVOVF9SRUYgZm9yIHRoZSByZXByZXNlbnRhdGl2ZS4gIE5FV19WQUwgaXMgaXQncwor ICAgICBkZWZpbmluZyBTU0FfTkFNRS4gICovCisgIHRyZWUgcmVwX2NvbXBfcmVmID0gYnVp bGQzIChDT01QT05FTlRfUkVGLCByZXBfdHlwZSwgc3RydWN0X2V4cHIsIHJlcF9kZWNsLAor CQkJICAgICAgTlVMTF9UUkVFKTsKKyAgdHJlZSBuZXdfdmFsID0gaWZjX3RlbXBfdmFyIChy ZXBfdHlwZSwgcmVwX2NvbXBfcmVmLCAmZ3NpKTsKKworICBpZiAoZHVtcF9maWxlICYmIChk dW1wX2ZsYWdzICYgVERGX0RFVEFJTFMpKQorICAgIHByaW50X2dpbXBsZV9zdG10IChkdW1w X2ZpbGUsIFNTQV9OQU1FX0RFRl9TVE1UIChuZXdfdmFsKSwgMCwgVERGX1NMSU0pOworCisg IGlmICh3cml0ZSkKKyAgICB7CisgICAgICBuZXdfdmFsID0gaWZjX3RlbXBfdmFyIChyZXBf dHlwZSwKKwkJCSAgICAgIGJ1aWxkMyAoQklUX0lOU0VSVF9FWFBSLCByZXBfdHlwZSwgbmV3 X3ZhbCwKKwkJCQkgICAgICB1bnNoYXJlX2V4cHIgKGdpbXBsZV9hc3NpZ25fcmhzMSAoc3Rt dCkpLAorCQkJCSAgICAgIGJpdHBvcyksICZnc2kpOworCisgICAgICBpZiAoZHVtcF9maWxl ICYmIChkdW1wX2ZsYWdzICYgVERGX0RFVEFJTFMpKQorCXByaW50X2dpbXBsZV9zdG10IChk dW1wX2ZpbGUsIFNTQV9OQU1FX0RFRl9TVE1UIChuZXdfdmFsKSwgMCwgVERGX1NMSU0pOwor CisgICAgICBnaW1wbGUgKm5ld19zdG10ID0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAodW5zaGFy ZV9leHByIChyZXBfY29tcF9yZWYpLAorCQkJCQkgICAgICBuZXdfdmFsKTsKKyAgICAgIGdp bXBsZV9tb3ZlX3ZvcHMgKG5ld19zdG10LCBzdG10KTsKKyAgICAgIGdzaV9pbnNlcnRfYmVm b3JlICgmZ3NpLCBuZXdfc3RtdCwgR1NJX1NBTUVfU1RNVCk7CisKKyAgICAgIGlmIChkdW1w X2ZpbGUgJiYgKGR1bXBfZmxhZ3MgJiBUREZfREVUQUlMUykpCisJcHJpbnRfZ2ltcGxlX3N0 bXQgKGR1bXBfZmlsZSwgbmV3X3N0bXQsIDAsIFRERl9TTElNKTsKKyAgICB9CisgIGVsc2UK KyAgICB7CisgICAgICB0cmVlIGJmciA9IGJ1aWxkMyAoQklUX0ZJRUxEX1JFRiwgYmZfdHlw ZSwgbmV3X3ZhbCwKKwkJCSBidWlsZF9pbnRfY3N0IChiaXRzaXpldHlwZSwgVFlQRV9QUkVD SVNJT04gKGJmX3R5cGUpKSwKKwkJCSBiaXRwb3MpOworICAgICAgbmV3X3ZhbCA9IGlmY190 ZW1wX3ZhciAoYmZfdHlwZSwgYmZyLCAmZ3NpKTsKKworICAgICAgZ2ltcGxlICpuZXdfc3Rt dCA9IGdpbXBsZV9idWlsZF9hc3NpZ24gKGdpbXBsZV9hc3NpZ25fbGhzIChzdG10KSwKKwkJ CQkJICAgICAgbmV3X3ZhbCk7CisgICAgICBnaW1wbGVfbW92ZV92b3BzIChuZXdfc3RtdCwg c3RtdCk7CisgICAgICBnc2lfaW5zZXJ0X2JlZm9yZSAoJmdzaSwgbmV3X3N0bXQsIEdTSV9T QU1FX1NUTVQpOworCisgICAgICBpZiAoZHVtcF9maWxlICYmIChkdW1wX2ZsYWdzICYgVERG X0RFVEFJTFMpKQorCXByaW50X2dpbXBsZV9zdG10IChkdW1wX2ZpbGUsIG5ld19zdG10LCAw LCBUREZfU0xJTSk7CisgICAgfQorCisgIGdzaV9yZW1vdmUgKCZnc2ksIHRydWUpOworfQor CisvKiBSZXR1cm4gVFJVRSBpZiB0aGVyZSBhcmUgYml0ZmllbGRzIHRvIGxvd2VyIGluIHRo aXMgTE9PUC4gIEZpbGwgVE9fTE9XRVIKKyAgIHdpdGggZGF0YSBzdHJ1Y3R1cmVzIHJlcHJl c2VudGluZyB0aGVzZSBiaXRmaWVsZHMuICAqLworCitzdGF0aWMgYm9vbAorYml0ZmllbGRz X3RvX2xvd2VyX3AgKGNsYXNzIGxvb3AgKmxvb3AsCisJCSAgICAgIHZlYyA8Z2Fzc2lnbiAq PiAmcmVhZHNfdG9fbG93ZXIsCisJCSAgICAgIHZlYyA8Z2Fzc2lnbiAqPiAmd3JpdGVzX3Rv X2xvd2VyKQoreworICBnaW1wbGVfc3RtdF9pdGVyYXRvciBnc2k7CisKKyAgaWYgKGR1bXBf ZmlsZSAmJiAoZHVtcF9mbGFncyAmIFRERl9ERVRBSUxTKSkKKyAgICB7CisgICAgICBmcHJp bnRmIChkdW1wX2ZpbGUsICJBbmFseXppbmcgbG9vcCAlZCBmb3IgYml0ZmllbGRzOlxuIiwg bG9vcC0+bnVtKTsKKyAgICB9CisKKyAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxvb3At Pm51bV9ub2RlczsgKytpKQorICAgIHsKKyAgICAgIGJhc2ljX2Jsb2NrIGJiID0gaWZjX2Ji c1tpXTsKKyAgICAgIGZvciAoZ3NpID0gZ3NpX3N0YXJ0X2JiIChiYik7ICFnc2lfZW5kX3Ag KGdzaSk7IGdzaV9uZXh0ICgmZ3NpKSkKKwl7CisJICBnYXNzaWduICpzdG10ID0gZHluX2Nh c3Q8Z2Fzc2lnbio+IChnc2lfc3RtdCAoZ3NpKSk7CisJICBpZiAoIXN0bXQpCisJICAgIGNv bnRpbnVlOworCisJICB0cmVlIG9wID0gZ2ltcGxlX2Fzc2lnbl9saHMgKHN0bXQpOworCSAg Ym9vbCB3cml0ZSA9IFRSRUVfQ09ERSAob3ApID09IENPTVBPTkVOVF9SRUY7CisKKwkgIGlm ICghd3JpdGUpCisJICAgIG9wID0gZ2ltcGxlX2Fzc2lnbl9yaHMxIChzdG10KTsKKworCSAg aWYgKFRSRUVfQ09ERSAob3ApICE9IENPTVBPTkVOVF9SRUYpCisJICAgIGNvbnRpbnVlOwor CisJICBpZiAoREVDTF9CSVRfRklFTERfVFlQRSAoVFJFRV9PUEVSQU5EIChvcCwgMSkpKQor CSAgICB7CisJICAgICAgaWYgKGR1bXBfZmlsZSAmJiAoZHVtcF9mbGFncyAmIFRERl9ERVRB SUxTKSkKKwkJcHJpbnRfZ2ltcGxlX3N0bXQgKGR1bXBfZmlsZSwgc3RtdCwgMCwgVERGX1NM SU0pOworCisJICAgICAgaWYgKCFJTlRFR1JBTF9UWVBFX1AgKFRSRUVfVFlQRSAob3ApKSkK KwkJeworCQkgIGlmIChkdW1wX2ZpbGUgJiYgKGR1bXBfZmxhZ3MgJiBUREZfREVUQUlMUykp CisJCSAgICBmcHJpbnRmIChkdW1wX2ZpbGUsICJcdCBCaXRmaWVsZCBOTyBPSyB0byBsb3dl ciwiCisJCQkJCSIgZmllbGQgdHlwZSBpcyBub3QgSW50ZWdyYWwuXG4iKTsKKwkJICByZXR1 cm4gZmFsc2U7CisJCX0KKworCSAgICAgIGlmICghZ2V0X2JpdGZpZWxkX3JlcCAoc3RtdCwg d3JpdGUsIE5VTEwsIE5VTEwpKQorCQl7CisJCSAgaWYgKGR1bXBfZmlsZSAmJiAoZHVtcF9m bGFncyAmIFRERl9ERVRBSUxTKSkKKwkJICAgIGZwcmludGYgKGR1bXBfZmlsZSwgIlx0IEJp dGZpZWxkIE5PVCBPSyB0byBsb3dlciwiCisJCQkJCSIgcmVwcmVzZW50YXRpdmUgaXMgQkxL bW9kZS5cbiIpOworCQkgIHJldHVybiBmYWxzZTsKKwkJfQorCisJICAgICAgaWYgKGR1bXBf ZmlsZSAmJiAoZHVtcF9mbGFncyAmIFRERl9ERVRBSUxTKSkKKwkJZnByaW50ZiAoZHVtcF9m aWxlLCAiXHRCaXRmaWVsZCBPSyB0byBsb3dlci5cbiIpOworCSAgICAgIGlmICh3cml0ZSkK KwkJd3JpdGVzX3RvX2xvd2VyLnNhZmVfcHVzaCAoc3RtdCk7CisJICAgICAgZWxzZQorCQly ZWFkc190b19sb3dlci5zYWZlX3B1c2ggKHN0bXQpOworCSAgICB9CisJfQorICAgIH0KKyAg cmV0dXJuICFyZWFkc190b19sb3dlci5pc19lbXB0eSAoKSB8fCAhd3JpdGVzX3RvX2xvd2Vy LmlzX2VtcHR5ICgpOworfQorCisKIC8qIElmLWNvbnZlcnQgTE9PUCB3aGVuIGl0IGlzIGxl Z2FsLiAgRm9yIHRoZSBtb21lbnQgdGhpcyBwYXNzIGhhcyBubwogICAgcHJvZml0YWJpbGl0 eSBhbmFseXNpcy4gIFJldHVybnMgbm9uLXplcm8gdG9kbyBmbGFncyB3aGVuIHNvbWV0aGlu ZwogICAgY2hhbmdlZC4gICovCkBAIC0zMjcwLDEyICszNDcxLDE2IEBAIHRyZWVfaWZfY29u dmVyc2lvbiAoY2xhc3MgbG9vcCAqbG9vcCwgdmVjPGdpbXBsZSAqPiAqcHJlZHMpCiAgIHVu c2lnbmVkIGludCB0b2RvID0gMDsKICAgYm9vbCBhZ2dyZXNzaXZlX2lmX2NvbnY7CiAgIGNs YXNzIGxvb3AgKnJsb29wOworICBhdXRvX3ZlYyA8Z2Fzc2lnbiAqLCA0PiByZWFkc190b19s b3dlcjsKKyAgYXV0b192ZWMgPGdhc3NpZ24gKiwgND4gd3JpdGVzX3RvX2xvd2VyOwogICBi aXRtYXAgZXhpdF9iYnM7CiAgIGVkZ2UgcGU7CiAKICBhZ2FpbjoKICAgcmxvb3AgPSBOVUxM OwogICBpZmNfYmJzID0gTlVMTDsKKyAgbmVlZF90b19sb3dlcl9iaXRmaWVsZHMgPSBmYWxz ZTsKKyAgbmVlZF90b19pZmN2dCA9IGZhbHNlOwogICBuZWVkX3RvX3ByZWRpY2F0ZSA9IGZh bHNlOwogICBuZWVkX3RvX3Jld3JpdGVfdW5kZWZpbmVkID0gZmFsc2U7CiAgIGFueV9jb21w bGljYXRlZF9waGkgPSBmYWxzZTsKQEAgLTMyOTEsMTYgKzM0OTYsNDIgQEAgdHJlZV9pZl9j b252ZXJzaW9uIChjbGFzcyBsb29wICpsb29wLCB2ZWM8Z2ltcGxlICo+ICpwcmVkcykKIAlh Z2dyZXNzaXZlX2lmX2NvbnYgPSB0cnVlOwogICAgIH0KIAotICBpZiAoIWlmY3Z0X3NwbGl0 X2NyaXRpY2FsX2VkZ2VzIChsb29wLCBhZ2dyZXNzaXZlX2lmX2NvbnYpKQorICBpZiAoIXNp bmdsZV9leGl0IChsb29wKSkKICAgICBnb3RvIGNsZWFudXA7CiAKLSAgaWYgKCFpZl9jb252 ZXJ0aWJsZV9sb29wX3AgKGxvb3ApCi0gICAgICB8fCAhZGJnX2NudCAoaWZfY29udmVyc2lv bl90cmVlKSkKKyAgLyogSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiB0d28gQkJzIGluIHRoZSBs b29wIHRoZW4gdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGlmCisgICAgIHRvIGNvbnZlcnQuICAq LworICBpZiAobG9vcC0+bnVtX25vZGVzID4gMgorICAgICAgJiYgIWlmY3Z0X3NwbGl0X2Ny aXRpY2FsX2VkZ2VzIChsb29wLCBhZ2dyZXNzaXZlX2lmX2NvbnYpKQogICAgIGdvdG8gY2xl YW51cDsKIAotICBpZiAoKG5lZWRfdG9fcHJlZGljYXRlIHx8IGFueV9jb21wbGljYXRlZF9w aGkpCi0gICAgICAmJiAoKCFmbGFnX3RyZWVfbG9vcF92ZWN0b3JpemUgJiYgIWxvb3AtPmZv cmNlX3ZlY3Rvcml6ZSkKLQkgIHx8IGxvb3AtPmRvbnRfdmVjdG9yaXplKSkKKyAgaWZjX2Ji cyA9IGdldF9sb29wX2JvZHlfaW5faWZfY29udl9vcmRlciAobG9vcCk7CisgIGlmICghaWZj X2JicykKKyAgICB7CisgICAgICBpZiAoZHVtcF9maWxlICYmIChkdW1wX2ZsYWdzICYgVERG X0RFVEFJTFMpKQorCWZwcmludGYgKGR1bXBfZmlsZSwgIklycmVkdWNpYmxlIGxvb3BcbiIp OworICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICBpZiAobG9vcC0+bnVtX25vZGVz ID4gMikKKyAgICB7CisgICAgICBuZWVkX3RvX2lmY3Z0ID0gdHJ1ZTsKKworICAgICAgaWYg KCFpZl9jb252ZXJ0aWJsZV9sb29wX3AgKGxvb3ApIHx8ICFkYmdfY250IChpZl9jb252ZXJz aW9uX3RyZWUpKQorCWdvdG8gY2xlYW51cDsKKworICAgICAgaWYgKChuZWVkX3RvX3ByZWRp Y2F0ZSB8fCBhbnlfY29tcGxpY2F0ZWRfcGhpKQorCSAgJiYgKCghZmxhZ190cmVlX2xvb3Bf dmVjdG9yaXplICYmICFsb29wLT5mb3JjZV92ZWN0b3JpemUpCisJICAgICAgfHwgbG9vcC0+ ZG9udF92ZWN0b3JpemUpKQorCWdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgaWYgKChmbGFn X3RyZWVfbG9vcF92ZWN0b3JpemUgfHwgbG9vcC0+Zm9yY2VfdmVjdG9yaXplKQorICAgICAg JiYgIWxvb3AtPmRvbnRfdmVjdG9yaXplKQorICAgIG5lZWRfdG9fbG93ZXJfYml0ZmllbGRz ID0gYml0ZmllbGRzX3RvX2xvd2VyX3AgKGxvb3AsIHJlYWRzX3RvX2xvd2VyLAorCQkJCQkJ ICAgIHdyaXRlc190b19sb3dlcik7CisKKyAgaWYgKCFuZWVkX3RvX2lmY3Z0ICYmICFuZWVk X3RvX2xvd2VyX2JpdGZpZWxkcykKICAgICBnb3RvIGNsZWFudXA7CiAKICAgLyogVGhlIGVk Z2UgdG8gaW5zZXJ0IGludmFyaWFudCBzdG10cyBvbi4gICovCkBAIC0zMzExLDcgKzM1NDIs OCBAQCB0cmVlX2lmX2NvbnZlcnNpb24gKGNsYXNzIGxvb3AgKmxvb3AsIHZlYzxnaW1wbGUg Kj4gKnByZWRzKQogICAgICBFaXRoZXIgdmVyc2lvbiB0aGlzIGxvb3AsIG9yIGlmIHRoZSBw YXR0ZXJuIGlzIHJpZ2h0IGZvciBvdXRlci1sb29wCiAgICAgIHZlY3Rvcml6YXRpb24sIHZl cnNpb24gdGhlIG91dGVyIGxvb3AuICBJbiB0aGUgbGF0dGVyIGNhc2Ugd2Ugd2lsbAogICAg ICBzdGlsbCBpZi1jb252ZXJ0IHRoZSBvcmlnaW5hbCBpbm5lciBsb29wLiAgKi8KLSAgaWYg KG5lZWRfdG9fcHJlZGljYXRlCisgIGlmIChuZWVkX3RvX2xvd2VyX2JpdGZpZWxkcworICAg ICAgfHwgbmVlZF90b19wcmVkaWNhdGUKICAgICAgIHx8IGFueV9jb21wbGljYXRlZF9waGkK ICAgICAgIHx8IGZsYWdfdHJlZV9sb29wX2lmX2NvbnZlcnQgIT0gMSkKICAgICB7CkBAIC0z MzUxLDEwICszNTgzLDMxIEBAIHRyZWVfaWZfY29udmVyc2lvbiAoY2xhc3MgbG9vcCAqbG9v cCwgdmVjPGdpbXBsZSAqPiAqcHJlZHMpCiAJcGUgPSBzaW5nbGVfcHJlZF9lZGdlIChnaW1w bGVfYmIgKHByZWRzLT5sYXN0ICgpKSk7CiAgICAgfQogCi0gIC8qIE5vdyBhbGwgc3RhdGVt ZW50cyBhcmUgaWYtY29udmVydGlibGUuICBDb21iaW5lIGFsbCB0aGUgYmFzaWMKLSAgICAg YmxvY2tzIGludG8gb25lIGh1Z2UgYmFzaWMgYmxvY2sgZG9pbmcgdGhlIGlmLWNvbnZlcnNp b24KLSAgICAgb24tdGhlLWZseS4gICovCi0gIGNvbWJpbmVfYmxvY2tzIChsb29wKTsKKyAg aWYgKG5lZWRfdG9fbG93ZXJfYml0ZmllbGRzKQorICAgIHsKKyAgICAgIGlmIChkdW1wX2Zp bGUgJiYgKGR1bXBfZmxhZ3MgJiBUREZfREVUQUlMUykpCisJeworCSAgZnByaW50ZiAoZHVt cF9maWxlLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJICBmcHJpbnRmIChk dW1wX2ZpbGUsICJTdGFydCBsb3dlcmluZyBiaXRmaWVsZHNcbiIpOworCX0KKyAgICAgIHdo aWxlICghcmVhZHNfdG9fbG93ZXIuaXNfZW1wdHkgKCkpCisJbG93ZXJfYml0ZmllbGQgKHJl YWRzX3RvX2xvd2VyLnBvcCAoKSwgZmFsc2UpOworICAgICAgd2hpbGUgKCF3cml0ZXNfdG9f bG93ZXIuaXNfZW1wdHkgKCkpCisJbG93ZXJfYml0ZmllbGQgKHdyaXRlc190b19sb3dlci5w b3AgKCksIHRydWUpOworCisgICAgICBpZiAoZHVtcF9maWxlICYmIChkdW1wX2ZsYWdzICYg VERGX0RFVEFJTFMpKQorCXsKKwkgIGZwcmludGYgKGR1bXBfZmlsZSwgIkRvbmUgbG93ZXJp bmcgYml0ZmllbGRzXG4iKTsKKwkgIGZwcmludGYgKGR1bXBfZmlsZSwgIi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS1cbiIpOworCX0KKyAgICB9CisgIGlmIChuZWVkX3RvX2lmY3Z0KQor ICAgIHsKKyAgICAgIC8qIE5vdyBhbGwgc3RhdGVtZW50cyBhcmUgaWYtY29udmVydGlibGUu ICBDb21iaW5lIGFsbCB0aGUgYmFzaWMKKwkgYmxvY2tzIGludG8gb25lIGh1Z2UgYmFzaWMg YmxvY2sgZG9pbmcgdGhlIGlmLWNvbnZlcnNpb24KKwkgb24tdGhlLWZseS4gICovCisgICAg ICBjb21iaW5lX2Jsb2NrcyAobG9vcCk7CisgICAgfQogCiAgIC8qIFBlcmZvcm0gbG9jYWwg Q1NFLCB0aGlzIGVzcC4gaGVscHMgdGhlIHZlY3Rvcml6ZXIgYW5hbHlzaXMgaWYgbG9hZHMK ICAgICAgYW5kIHN0b3JlcyBhcmUgaW52b2x2ZWQuICBDU0Ugb25seSB0aGUgbG9vcCBib2R5 LCBub3QgdGhlIGVudHJ5CkBAIC0zMzk0LDYgKzM2NDcsOCBAQCB0cmVlX2lmX2NvbnZlcnNp b24gKGNsYXNzIGxvb3AgKmxvb3AsIHZlYzxnaW1wbGUgKj4gKnByZWRzKQogICBpZiAocmxv b3AgIT0gTlVMTCkKICAgICB7CiAgICAgICBsb29wID0gcmxvb3A7CisgICAgICByZWFkc190 b19sb3dlci50cnVuY2F0ZSAoMCk7CisgICAgICB3cml0ZXNfdG9fbG93ZXIudHJ1bmNhdGUg KDApOwogICAgICAgZ290byBhZ2FpbjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2djYy90cmVl LXZlY3QtZGF0YS1yZWZzLmNjIGIvZ2NjL3RyZWUtdmVjdC1kYXRhLXJlZnMuY2MKaW5kZXgg ZTAzYjUwNDk4ZDE2NDE0NGRhMzIyMGRmOGVlNWJjZjQyNDhkYjgyMS4uNGEyM2Q2MTcyYWFh MTJhZDcwNDlkYzYyNmU1YzRhZmJkNWNhM2Y3NCAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtdmVj dC1kYXRhLXJlZnMuY2MKKysrIGIvZ2NjL3RyZWUtdmVjdC1kYXRhLXJlZnMuY2MKQEAgLTQz MDIsNyArNDMwMiw4IEBAIHZlY3RfZmluZF9zdG10X2RhdGFfcmVmZXJlbmNlIChsb29wX3Ag bG9vcCwgZ2ltcGxlICpzdG10LAogICAgICAgZnJlZV9kYXRhX3JlZiAoZHIpOwogICAgICAg cmV0dXJuIG9wdF9yZXN1bHQ6OmZhaWx1cmVfYXQgKHN0bXQsCiAJCQkJICAgICAibm90IHZl Y3Rvcml6ZWQ6IgotCQkJCSAgICAgIiBzdGF0ZW1lbnQgaXMgYml0ZmllbGQgYWNjZXNzICVH Iiwgc3RtdCk7CisJCQkJICAgICAiIHN0YXRlbWVudCBpcyBhbiB1bnN1cHBvcnRlZCIKKwkJ CQkgICAgICIgYml0ZmllbGQgYWNjZXNzICVHIiwgc3RtdCk7CiAgICAgfQogCiAgIGlmIChE Ul9CQVNFX0FERFJFU1MgKGRyKQpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdmVjdC1wYXR0ZXJu cy5jYyBiL2djYy90cmVlLXZlY3QtcGF0dGVybnMuY2MKaW5kZXggZDJiZDE1YjVlOTAwNWJj ZTI2MTJmMGIzMmMwYWNmNmZmZTc3NjM0My4uMGNjMzE1ZDMxMjY2N2MwNWEyN2RmNGNkZjQz NWYwZDBlNmZkNGE1MiAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtdmVjdC1wYXR0ZXJucy5jYwor KysgYi9nY2MvdHJlZS12ZWN0LXBhdHRlcm5zLmNjCkBAIC0zNSw2ICszNSw4IEBAIGFsb25n IHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAjaW5jbHVk ZSAidHJlZS1laC5oIgogI2luY2x1ZGUgImdpbXBsaWZ5LmgiCiAjaW5jbHVkZSAiZ2ltcGxl LWl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiZ2ltcGxlLWZvbGQuaCIKKyNpbmNsdWRlICJnaW1w bGlmeS1tZS5oIgogI2luY2x1ZGUgImNmZ2xvb3AuaCIKICNpbmNsdWRlICJ0cmVlLXZlY3Rv cml6ZXIuaCIKICNpbmNsdWRlICJkdW1wZmlsZS5oIgpAQCAtNjYzLDcgKzY2NSw3IEBAIHZl Y3Rfd2lkZW5lZF9vcF90cmVlICh2ZWNfaW5mbyAqdmluZm8sIHN0bXRfdmVjX2luZm8gc3Rt dF9pbmZvLCB0cmVlX2NvZGUgY29kZSwKICAgIGlzIE5VTEwsIHRoZSBjYWxsZXIgbXVzdCBz ZXQgU1NBX05BTUVfREVGX1NUTVQgZm9yIHRoZSByZXR1cm5lZCBTU0EgdmFyLiAqLwogCiBz dGF0aWMgdHJlZQotdmVjdF9yZWNvZ190ZW1wX3NzYV92YXIgKHRyZWUgdHlwZSwgZ2ltcGxl ICpzdG10KQordmVjdF9yZWNvZ190ZW1wX3NzYV92YXIgKHRyZWUgdHlwZSwgZ2ltcGxlICpz dG10ID0gTlVMTCkKIHsKICAgcmV0dXJuIG1ha2VfdGVtcF9zc2FfbmFtZSAodHlwZSwgc3Rt dCwgInBhdHQiKTsKIH0KQEAgLTE4MjksNiArMTgzMSwzMzAgQEAgdmVjdF9yZWNvZ193aWRl bl9zdW1fcGF0dGVybiAodmVjX2luZm8gKnZpbmZvLAogICByZXR1cm4gcGF0dGVybl9zdG10 OwogfQogCisvKiBGdW5jdGlvbiB2ZWN0X3JlY29nX2JpdGZpZWxkX3JlZl9wYXR0ZXJuCisK KyAgIFRyeSB0byBmaW5kIHRoZSBmb2xsb3dpbmcgcGF0dGVybjoKKworICAgYmZfdmFsdWUg PSBCSVRfRklFTERfUkVGIChjb250YWluZXIsIGJpdHNpemUsIGJpdHBvcyk7CisgICByZXN1 bHQgPSAodHlwZV9vdXQpIGJmX3ZhbHVlOworCisgICB3aGVyZSB0eXBlX291dCBpcyBhIG5v bi1iaXRmaWVsZCB0eXBlLCB0aGF0IGlzIHRvIHNheSwgaXQncyBwcmVjaXNpb24gbWF0Y2hl cworICAgMl4oVFlQRV9TSVpFKHR5cGVfb3V0KSAtIChUWVBFX1VOU0lHTkVEICh0eXBlX291 dCkgPyAxIDogMikpLgorCisgICBJbnB1dDoKKworICAgKiBTVE1UX1ZJTkZPOiBUaGUgc3Rt dCBmcm9tIHdoaWNoIHRoZSBwYXR0ZXJuIHNlYXJjaCBiZWdpbnMuCisgICBoZXJlIGl0IHN0 YXJ0cyB3aXRoOgorICAgcmVzdWx0ID0gKHR5cGVfb3V0KSBiZl92YWx1ZTsKKworICAgT3V0 cHV0OgorCisgICAqIFRZUEVfT1VUOiBUaGUgdmVjdG9yIHR5cGUgb2YgdGhlIG91dHB1dCBv ZiB0aGlzIHBhdHRlcm4uCisKKyAgICogUmV0dXJuIHZhbHVlOiBBIG5ldyBzdG10IHRoYXQg d2lsbCBiZSB1c2VkIHRvIHJlcGxhY2UgdGhlIHNlcXVlbmNlIG9mCisgICBzdG10cyB0aGF0 IGNvbnN0aXR1dGUgdGhlIHBhdHRlcm4uIElmIHRoZSBwcmVjaXNpb24gb2YgdHlwZV9vdXQg aXMgYmlnZ2VyCisgICB0aGFuIHRoZSBwcmVjaXNpb24gdHlwZSBvZiBfMSB3ZSBwZXJmb3Jt IHRoZSB3aWRlbmluZyBiZWZvcmUgdGhlIHNoaWZ0aW5nLAorICAgc2luY2UgdGhlIG5ldyBw cmVjaXNpb24gd2lsbCBiZSBsYXJnZSBlbm91Z2ggdG8gc2hpZnQgdGhlIHZhbHVlIGFuZCBt b3ZpbmcKKyAgIHdpZGVuaW5nIG9wZXJhdGlvbnMgdXAgdGhlIHN0YXRlbWVudCBjaGFpbiBl bmFibGVzIHRoZSBnZW5lcmF0aW9uIG9mCisgICB3aWRlbmluZyBsb2Fkcy4gIElmIHdlIGFy ZSB3aWRlbmluZyBhbmQgdGhlIG9wZXJhdGlvbiBhZnRlciB0aGUgcGF0dGVybiBpcworICAg YW4gYWRkaXRpb24gdGhlbiB3ZSBtYXNrIGZpcnN0IGFuZCBzaGlmdCBsYXRlciwgdG8gZW5h YmxlIHRoZSBnZW5lcmF0aW9uIG9mCisgICBzaGlmdGluZyBhZGRzLiAgSW4gdGhlIGNhc2Ug b2YgbmFycm93aW5nIHdlIHdpbGwgYWx3YXlzIG1hc2sgZmlyc3QsIHNoaWZ0CisgICBsYXN0 IGFuZCB0aGVuIHBlcmZvcm0gYSBuYXJyb3dpbmcgb3BlcmF0aW9uLiAgVGhpcyB3aWxsIGVu YWJsZSB0aGUKKyAgIGdlbmVyYXRpb24gb2YgbmFycm93aW5nIHNoaWZ0cy4KKworICAgV2lk ZW5pbmcgd2l0aCBtYXNrIGZpcnN0LCBzaGlmdCBsYXRlcjoKKyAgIGNvbnRhaW5lciA9ICh0 eXBlX291dCkgY29udGFpbmVyOworICAgbWFza2VkID0gY29udGFpbmVyICYgKCgoMSA8PCBi aXRzaXplKSAtIDEpIDw8IGJpdHBvcyk7CisgICByZXN1bHQgPSBwYXR0MiA+PiBtYXNrZWQ7 CisKKyAgIFdpZGVuaW5nIHdpdGggc2hpZnQgZmlyc3QsIG1hc2sgbGFzdDoKKyAgIGNvbnRh aW5lciA9ICh0eXBlX291dCkgY29udGFpbmVyOworICAgc2hpZnRlZCA9IGNvbnRhaW5lciA+ PiBiaXRwb3M7CisgICByZXN1bHQgPSBzaGlmdGVkICYgKCgxIDw8IGJpdHNpemUpIC0gMSk7 CisKKyAgIE5hcnJvd2luZzoKKyAgIG1hc2tlZCA9IGNvbnRhaW5lciAmICgoKDEgPDwgYml0 c2l6ZSkgLSAxKSA8PCBiaXRwb3MpOworICAgcmVzdWx0ID0gbWFza2VkID4+IGJpdHBvczsK KyAgIHJlc3VsdCA9ICh0eXBlX291dCkgcmVzdWx0OworCisgICBUaGUgc2hpZnRpbmcgaXMg YWx3YXlzIG9wdGlvbmFsIGRlcGVuZGluZyBvbiB3aGV0aGVyIGJpdHBvcyAhPSAwLgorCisq LworCitzdGF0aWMgZ2ltcGxlICoKK3ZlY3RfcmVjb2dfYml0ZmllbGRfcmVmX3BhdHRlcm4g KHZlY19pbmZvICp2aW5mbywgc3RtdF92ZWNfaW5mbyBzdG10X2luZm8sCisJCQkJIHRyZWUg KnR5cGVfb3V0KQoreworICBnYXNzaWduICpmaXJzdF9zdG10ID0gZHluX2Nhc3QgPGdhc3Np Z24gKj4gKHN0bXRfaW5mby0+c3RtdCk7CisKKyAgaWYgKCFmaXJzdF9zdG10KQorICAgIHJl dHVybiBOVUxMOworCisgIGdhc3NpZ24gKmJmX3N0bXQ7CisgIGlmIChDT05WRVJUX0VYUFJf Q09ERV9QIChnaW1wbGVfYXNzaWduX3Joc19jb2RlIChmaXJzdF9zdG10KSkKKyAgICAgICYm IFRSRUVfQ09ERSAoZ2ltcGxlX2Fzc2lnbl9yaHMxIChmaXJzdF9zdG10KSkgPT0gU1NBX05B TUUpCisgICAgeworICAgICAgZ2ltcGxlICpzZWNvbmRfc3RtdAorCT0gU1NBX05BTUVfREVG X1NUTVQgKGdpbXBsZV9hc3NpZ25fcmhzMSAoZmlyc3Rfc3RtdCkpOworICAgICAgYmZfc3Rt dCA9IGR5bl9jYXN0IDxnYXNzaWduICo+IChzZWNvbmRfc3RtdCk7CisgICAgICBpZiAoIWJm X3N0bXQKKwkgIHx8IGdpbXBsZV9hc3NpZ25fcmhzX2NvZGUgKGJmX3N0bXQpICE9IEJJVF9G SUVMRF9SRUYpCisJcmV0dXJuIE5VTEw7CisgICAgfQorICBlbHNlCisgICAgcmV0dXJuIE5V TEw7CisKKyAgdHJlZSBiZl9yZWYgPSBnaW1wbGVfYXNzaWduX3JoczEgKGJmX3N0bXQpOwor ICB0cmVlIGNvbnRhaW5lciA9IFRSRUVfT1BFUkFORCAoYmZfcmVmLCAwKTsKKworICBpZiAo IWJpdF9maWVsZF9vZmZzZXQgKGJmX3JlZikuaXNfY29uc3RhbnQgKCkKKyAgICAgIHx8ICFi aXRfZmllbGRfc2l6ZSAoYmZfcmVmKS5pc19jb25zdGFudCAoKQorICAgICAgfHwgIXRyZWVf Zml0c191aHdpX3AgKFRZUEVfU0laRSAoVFJFRV9UWVBFIChjb250YWluZXIpKSkpCisgICAg cmV0dXJuIE5VTEw7CisKKyAgaWYgKCFJTlRFR1JBTF9UWVBFX1AgKFRSRUVfVFlQRSAoYmZf cmVmKSkKKyAgICAgIHx8IFRZUEVfTU9ERSAoVFJFRV9UWVBFIChjb250YWluZXIpKSA9PSBF X0JMS21vZGUpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgZ2ltcGxlICp1c2Vfc3RtdCwgKnBh dHRlcm5fc3RtdDsKKyAgdXNlX29wZXJhbmRfcCB1c2VfcDsKKyAgdHJlZSByZXQgPSBnaW1w bGVfYXNzaWduX2xocyAoZmlyc3Rfc3RtdCk7CisgIHRyZWUgcmV0X3R5cGUgPSBUUkVFX1RZ UEUgKHJldCk7CisgIGJvb2wgc2hpZnRfZmlyc3QgPSB0cnVlOworICB0cmVlIHZlY3R5cGU7 CisKKyAgLyogSWYgdGhlIGZpcnN0IG9wZXJhbmQgb2YgdGhlIEJJVF9GSUVMRF9SRUYgaXMg bm90IGFuIElOVEVHRVIgdHlwZSwgY29udmVydAorICAgICBpdCB0byBvbmUgb2YgdGhlIHNh bWUgd2lkdGggc28gd2UgY2FuIHBlcmZvcm0gdGhlIG5lY2Vzc2FyeSBtYXNraW5nIGFuZAor ICAgICBzaGlmdGluZy4gICovCisgIGlmICghSU5URUdSQUxfVFlQRV9QIChUUkVFX1RZUEUg KGNvbnRhaW5lcikpKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgY29u dGFpbmVyX3NpemUgPQorCXRyZWVfdG9fdWh3aSAoVFlQRV9TSVpFIChUUkVFX1RZUEUgKGNv bnRhaW5lcikpKTsKKyAgICAgIHRyZWUgaW50X3R5cGUgPSBidWlsZF9ub25zdGFuZGFyZF9p bnRlZ2VyX3R5cGUgKGNvbnRhaW5lcl9zaXplLCB0cnVlKTsKKyAgICAgIHBhdHRlcm5fc3Rt dAorCT0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAodmVjdF9yZWNvZ190ZW1wX3NzYV92YXIgKGlu dF90eXBlKSwKKwkJCSAgICAgICBWSUVXX0NPTlZFUlRfRVhQUiwgY29udGFpbmVyKTsKKyAg ICAgIHZlY3R5cGUgPSBnZXRfdmVjdHlwZV9mb3Jfc2NhbGFyX3R5cGUgKHZpbmZvLCBpbnRf dHlwZSk7CisgICAgICBjb250YWluZXIgPSBnaW1wbGVfYXNzaWduX2xocyAocGF0dGVybl9z dG10KTsKKyAgICAgIGFwcGVuZF9wYXR0ZXJuX2RlZl9zZXEgKHZpbmZvLCBzdG10X2luZm8s IHBhdHRlcm5fc3RtdCwgdmVjdHlwZSk7CisgICAgfQorICBlbHNlCisgICAgdmVjdHlwZSA9 IGdldF92ZWN0eXBlX2Zvcl9zY2FsYXJfdHlwZSAodmluZm8sIFRSRUVfVFlQRSAoY29udGFp bmVyKSk7CisKKyAgLyogV2UgbW92ZSB0aGUgY29udmVyc2lvbiBlYXJsaWVyIGlmIHRoZSBs b2FkZWQgdHlwZSBpcyBzbWFsbGVyIHRoYW4gdGhlCisgICAgIHJldHVybiB0eXBlIHRvIGVu YWJsZSB0aGUgdXNlIG9mIHdpZGVuaW5nIGxvYWRzLiAgKi8KKyAgaWYgKFRZUEVfUFJFQ0lT SU9OIChUUkVFX1RZUEUgKGNvbnRhaW5lcikpIDwgVFlQRV9QUkVDSVNJT04gKHJldF90eXBl KQorICAgICAgJiYgIXVzZWxlc3NfdHlwZV9jb252ZXJzaW9uX3AgKFRSRUVfVFlQRSAoY29u dGFpbmVyKSwgcmV0X3R5cGUpKQorICAgIHsKKyAgICAgIHBhdHRlcm5fc3RtdAorCT0gZ2lt cGxlX2J1aWxkX2Fzc2lnbiAodmVjdF9yZWNvZ190ZW1wX3NzYV92YXIgKHJldF90eXBlKSwK KwkJCSAgICAgICBOT1BfRVhQUiwgY29udGFpbmVyKTsKKyAgICAgIGNvbnRhaW5lciA9IGdp bXBsZV9nZXRfbGhzIChwYXR0ZXJuX3N0bXQpOworICAgICAgYXBwZW5kX3BhdHRlcm5fZGVm X3NlcSAodmluZm8sIHN0bXRfaW5mbywgcGF0dGVybl9zdG10KTsKKyAgICB9CisgIGVsc2Ug aWYgKCF1c2VsZXNzX3R5cGVfY29udmVyc2lvbl9wIChUUkVFX1RZUEUgKGNvbnRhaW5lciks IHJldF90eXBlKSkKKyAgICAvKiBJZiB3ZSBhcmUgZG9pbmcgdGhlIGNvbnZlcnNpb24gbGFz dCB0aGVuIGFsc28gZGVsYXkgdGhlIHNoaWZ0IGFzIHdlIG1heQorICAgICAgIGJlIGFibGUg dG8gY29tYmluZSB0aGUgc2hpZnQgYW5kIGNvbnZlcnNpb24gaW4gY2VydGFpbiBjYXNlcy4g ICovCisgICAgc2hpZnRfZmlyc3QgPSBmYWxzZTsKKworICB0cmVlIGNvbnRhaW5lcl90eXBl ID0gVFJFRV9UWVBFIChjb250YWluZXIpOworCisgIC8qIElmIHRoZSBvbmx5IHVzZSBvZiB0 aGUgcmVzdWx0IG9mIHRoaXMgQklUX0ZJRUxEX1JFRiArIENPTlZFUlQgaXMgYQorICAgICBQ TFVTX0VYUFIgdGhlbiBkbyB0aGUgc2hpZnQgbGFzdCBhcyBzb21lIHRhcmdldHMgY2FuIGNv bWJpbmUgdGhlIHNoaWZ0IGFuZAorICAgICBhZGQgaW50byBhIHNpbmdsZSBpbnN0cnVjdGlv bi4gICovCisgIGlmIChzaW5nbGVfaW1tX3VzZSAoZ2ltcGxlX2Fzc2lnbl9saHMgKGZpcnN0 X3N0bXQpLCAmdXNlX3AsICZ1c2Vfc3RtdCkpCisgICAgeworICAgICAgaWYgKGdpbXBsZV9j b2RlICh1c2Vfc3RtdCkgPT0gR0lNUExFX0FTU0lHTgorCSAgJiYgZ2ltcGxlX2Fzc2lnbl9y aHNfY29kZSAodXNlX3N0bXQpID09IFBMVVNfRVhQUikKKwlzaGlmdF9maXJzdCA9IGZhbHNl OworICAgIH0KKworICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIHNoaWZ0X24gPSBiaXRfZmll bGRfb2Zmc2V0IChiZl9yZWYpLnRvX2NvbnN0YW50ICgpOworICB1bnNpZ25lZCBIT1NUX1dJ REVfSU5UIG1hc2tfd2lkdGggPSBiaXRfZmllbGRfc2l6ZSAoYmZfcmVmKS50b19jb25zdGFu dCAoKTsKKyAgdW5zaWduZWQgSE9TVF9XSURFX0lOVCBwcmVjID0gdHJlZV90b191aHdpIChU WVBFX1NJWkUgKGNvbnRhaW5lcl90eXBlKSk7CisgIGlmIChCWVRFU19CSUdfRU5ESUFOKQor ICAgIHNoaWZ0X24gPSBwcmVjIC0gc2hpZnRfbiAtIG1hc2tfd2lkdGg7CisKKyAgLyogSWYg d2UgZG9uJ3QgaGF2ZSB0byBzaGlmdCB3ZSBvbmx5IGdlbmVyYXRlIHRoZSBtYXNrLCBzbyBq dXN0IGZpeCB0aGUKKyAgICAgY29kZS1wYXRoIHRvIHNoaWZ0X2ZpcnN0LiAgKi8KKyAgaWYg KHNoaWZ0X24gPT0gMCkKKyAgICBzaGlmdF9maXJzdCA9IHRydWU7CisKKyAgdHJlZSByZXN1 bHQ7CisgIGlmIChzaGlmdF9maXJzdCkKKyAgICB7CisgICAgICB0cmVlIHNoaWZ0ZWQgPSBj b250YWluZXI7CisgICAgICBpZiAoc2hpZnRfbikKKwl7CisJICBwYXR0ZXJuX3N0bXQKKwkg ICAgPSBnaW1wbGVfYnVpbGRfYXNzaWduICh2ZWN0X3JlY29nX3RlbXBfc3NhX3ZhciAoY29u dGFpbmVyX3R5cGUpLAorCQkJCSAgIFJTSElGVF9FWFBSLCBjb250YWluZXIsCisJCQkJICAg YnVpbGRfaW50X2NzdCAoc2l6ZXR5cGUsIHNoaWZ0X24pKTsKKwkgIHNoaWZ0ZWQgPSBnaW1w bGVfYXNzaWduX2xocyAocGF0dGVybl9zdG10KTsKKwkgIGFwcGVuZF9wYXR0ZXJuX2RlZl9z ZXEgKHZpbmZvLCBzdG10X2luZm8sIHBhdHRlcm5fc3RtdCwgdmVjdHlwZSk7CisJfQorCisg ICAgICB0cmVlIG1hc2sgPSB3aWRlX2ludF90b190cmVlIChjb250YWluZXJfdHlwZSwKKwkJ CQkgICAgd2k6Om1hc2sgKG1hc2tfd2lkdGgsIGZhbHNlLCBwcmVjKSk7CisKKyAgICAgIHBh dHRlcm5fc3RtdAorCT0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAodmVjdF9yZWNvZ190ZW1wX3Nz YV92YXIgKGNvbnRhaW5lcl90eXBlKSwKKwkJCSAgICAgICBCSVRfQU5EX0VYUFIsIHNoaWZ0 ZWQsIG1hc2spOworICAgICAgcmVzdWx0ID0gZ2ltcGxlX2Fzc2lnbl9saHMgKHBhdHRlcm5f c3RtdCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgdHJlZSBtYXNrID0gd2lkZV9p bnRfdG9fdHJlZSAoY29udGFpbmVyX3R5cGUsCisJCQkJICAgIHdpOjpzaGlmdGVkX21hc2sg KHNoaWZ0X24sIG1hc2tfd2lkdGgsCisJCQkJCQkgICAgICBmYWxzZSwgcHJlYykpOworICAg ICAgcGF0dGVybl9zdG10CisJPSBnaW1wbGVfYnVpbGRfYXNzaWduICh2ZWN0X3JlY29nX3Rl bXBfc3NhX3ZhciAoY29udGFpbmVyX3R5cGUpLAorCQkJICAgICAgIEJJVF9BTkRfRVhQUiwg Y29udGFpbmVyLCBtYXNrKTsKKyAgICAgIHRyZWUgbWFza2VkID0gZ2ltcGxlX2Fzc2lnbl9s aHMgKHBhdHRlcm5fc3RtdCk7CisKKyAgICAgIGFwcGVuZF9wYXR0ZXJuX2RlZl9zZXEgKHZp bmZvLCBzdG10X2luZm8sIHBhdHRlcm5fc3RtdCwgdmVjdHlwZSk7CisgICAgICBwYXR0ZXJu X3N0bXQKKwk9IGdpbXBsZV9idWlsZF9hc3NpZ24gKHZlY3RfcmVjb2dfdGVtcF9zc2FfdmFy IChjb250YWluZXJfdHlwZSksCisJCQkgICAgICAgUlNISUZUX0VYUFIsIG1hc2tlZCwKKwkJ CSAgICAgICBidWlsZF9pbnRfY3N0IChzaXpldHlwZSwgc2hpZnRfbikpOworICAgICAgcmVz dWx0ID0gZ2ltcGxlX2Fzc2lnbl9saHMgKHBhdHRlcm5fc3RtdCk7CisgICAgfQorCisgIGlm ICghdXNlbGVzc190eXBlX2NvbnZlcnNpb25fcCAoVFJFRV9UWVBFIChyZXN1bHQpLCByZXRf dHlwZSkpCisgICAgeworICAgICAgYXBwZW5kX3BhdHRlcm5fZGVmX3NlcSAodmluZm8sIHN0 bXRfaW5mbywgcGF0dGVybl9zdG10LCB2ZWN0eXBlKTsKKyAgICAgIHBhdHRlcm5fc3RtdAor CT0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAodmVjdF9yZWNvZ190ZW1wX3NzYV92YXIgKHJldF90 eXBlKSwKKwkJCSAgICAgICBOT1BfRVhQUiwgcmVzdWx0KTsKKyAgICB9CisKKyAgKnR5cGVf b3V0ID0gU1RNVF9WSU5GT19WRUNUWVBFIChzdG10X2luZm8pOworICB2ZWN0X3BhdHRlcm5f ZGV0ZWN0ZWQgKCJiaXRmaWVsZF9yZWYgcGF0dGVybiIsIHN0bXRfaW5mby0+c3RtdCk7CisK KyAgcmV0dXJuIHBhdHRlcm5fc3RtdDsKK30KKworLyogRnVuY3Rpb24gdmVjdF9yZWNvZ19i aXRfaW5zZXJ0X3BhdHRlcm4KKworICAgVHJ5IHRvIGZpbmQgdGhlIGZvbGxvd2luZyBwYXR0 ZXJuOgorCisgICB3cml0dGVuID0gQklUX0lOU0VSVF9FWFBSIChjb250YWluZXIsIHZhbHVl LCBiaXRwb3MpOworCisgICBJbnB1dDoKKworICAgKiBTVE1UX1ZJTkZPOiBUaGUgc3RtdCB3 ZSB3YW50IHRvIHJlcGxhY2UuCisKKyAgIE91dHB1dDoKKworICAgKiBUWVBFX09VVDogVGhl IHZlY3RvciB0eXBlIG9mIHRoZSBvdXRwdXQgb2YgdGhpcyBwYXR0ZXJuLgorCisgICAqIFJl dHVybiB2YWx1ZTogQSBuZXcgc3RtdCB0aGF0IHdpbGwgYmUgdXNlZCB0byByZXBsYWNlIHRo ZSBzZXF1ZW5jZSBvZgorICAgc3RtdHMgdGhhdCBjb25zdGl0dXRlIHRoZSBwYXR0ZXJuLiBJ biB0aGlzIGNhc2UgaXQgd2lsbCBiZToKKyAgIHZhbHVlID0gKGNvbnRhaW5lcl90eXBlKSB2 YWx1ZTsJICAgIC8vIE1ha2Ugc3VyZQorICAgc2hpZnRlZCA9IHZhbHVlIDw8IGJpdHBvczsJ CSAgICAvLyBTaGlmdCB2YWx1ZSBpbnRvIHBsYWNlCisgICBtYXNrZWQgPSBzaGlmdGVkICYg KG1hc2sgPDwgYml0cG9zKTsJICAgIC8vIE1hc2sgb2ZmIHRoZSBub24tcmVsZXZhbnQgYml0 cyBpbgorCQkJCQkgICAgLy8gdGhlICd0by13cml0ZSB2YWx1ZScuCisgICBjbGVhcmVkID0g Y29udGFpbmVyICYgfihtYXNrIDw8IGJpdHBvcyk7IC8vIENsZWFyaW5nIHRoZSBiaXRzIHdl IHdhbnQgdG8KKwkJCQkJICAgIC8vIHdyaXRlIHRvIGZyb20gdGhlIHZhbHVlIHdlIHdhbnQK KwkJCQkJICAgIC8vIHRvIHdyaXRlIHRvLgorICAgd3JpdHRlbiA9IGNsZWFyZWQgfCBtYXNr ZWQ7CQkgICAgLy8gV3JpdGUgYml0cy4KKworCisgICB3aGVyZSBtYXNrID0gKCgxIDw8IFRZ UEVfUFJFQ0lTSU9OICh2YWx1ZSkpIC0gMSksIGEgbWFzayB0byBrZWVwIHRoZSBudW1iZXIg b2YKKyAgIGJpdHMgY29ycmVzcG9uZGluZyB0byB0aGUgcmVhbCBzaXplIG9mIHRoZSBiaXRm aWVsZCB2YWx1ZSB3ZSBhcmUgd3JpdGluZyB0by4KKyAgIFRoZSBzaGlmdGluZyBpcyBhbHdh eXMgb3B0aW9uYWwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgYml0cG9zICE9IDAuCisKKyovCisK K3N0YXRpYyBnaW1wbGUgKgordmVjdF9yZWNvZ19iaXRfaW5zZXJ0X3BhdHRlcm4gKHZlY19p bmZvICp2aW5mbywgc3RtdF92ZWNfaW5mbyBzdG10X2luZm8sCisJCQkgICAgICAgdHJlZSAq dHlwZV9vdXQpCit7CisgIGdhc3NpZ24gKmJmX3N0bXQgPSBkeW5fY2FzdCA8Z2Fzc2lnbiAq PiAoc3RtdF9pbmZvLT5zdG10KTsKKyAgaWYgKCFiZl9zdG10IHx8IGdpbXBsZV9hc3NpZ25f cmhzX2NvZGUgKGJmX3N0bXQpICE9IEJJVF9JTlNFUlRfRVhQUikKKyAgICByZXR1cm4gTlVM TDsKKworICB0cmVlIGNvbnRhaW5lciA9IGdpbXBsZV9hc3NpZ25fcmhzMSAoYmZfc3RtdCk7 CisgIHRyZWUgdmFsdWUgPSBnaW1wbGVfYXNzaWduX3JoczIgKGJmX3N0bXQpOworICB0cmVl IHNoaWZ0ID0gZ2ltcGxlX2Fzc2lnbl9yaHMzIChiZl9zdG10KTsKKworICB0cmVlIGJmX3R5 cGUgPSBUUkVFX1RZUEUgKHZhbHVlKTsKKyAgdHJlZSBjb250YWluZXJfdHlwZSA9IFRSRUVf VFlQRSAoY29udGFpbmVyKTsKKworICBpZiAoIUlOVEVHUkFMX1RZUEVfUCAoY29udGFpbmVy X3R5cGUpCisgICAgICB8fCAhdHJlZV9maXRzX3Vod2lfcCAoVFlQRV9TSVpFIChjb250YWlu ZXJfdHlwZSkpKQorICAgIHJldHVybiBOVUxMOworCisgIGdpbXBsZSAqcGF0dGVybl9zdG10 OworCisgIHZlY3RfdW5wcm9tb3RlZF92YWx1ZSB1bnByb207CisgIHVucHJvbS5zZXRfb3Ag KHZhbHVlLCB2ZWN0X2ludGVybmFsX2RlZik7CisgIHZhbHVlID0gdmVjdF9jb252ZXJ0X2lu cHV0ICh2aW5mbywgc3RtdF9pbmZvLCBjb250YWluZXJfdHlwZSwgJnVucHJvbSwKKwkJCSAg ICAgIGdldF92ZWN0eXBlX2Zvcl9zY2FsYXJfdHlwZSAodmluZm8sCisJCQkJCQkJICAgY29u dGFpbmVyX3R5cGUpKTsKKworICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIG1hc2tfd2lkdGgg PSBUWVBFX1BSRUNJU0lPTiAoYmZfdHlwZSk7CisgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQg cHJlYyA9IHRyZWVfdG9fdWh3aSAoVFlQRV9TSVpFIChjb250YWluZXJfdHlwZSkpOworICB1 bnNpZ25lZCBIT1NUX1dJREVfSU5UIHNoaWZ0X24gPSB0cmVlX3RvX3Vod2kgKHNoaWZ0KTsK KyAgaWYgKEJZVEVTX0JJR19FTkRJQU4pCisgICAgeworICAgICAgc2hpZnRfbiA9IHByZWMg LSBzaGlmdF9uIC0gbWFza193aWR0aDsKKyAgICAgIHNoaWZ0ID0gYnVpbGRfaW50X2NzdCAo VFJFRV9UWVBFIChzaGlmdCksIHNoaWZ0X24pOworICAgIH0KKworICBpZiAoIXVzZWxlc3Nf dHlwZV9jb252ZXJzaW9uX3AgKFRSRUVfVFlQRSAodmFsdWUpLCBjb250YWluZXJfdHlwZSkp CisgICAgeworICAgICAgcGF0dGVybl9zdG10ID0KKwlnaW1wbGVfYnVpbGRfYXNzaWduICh2 ZWN0X3JlY29nX3RlbXBfc3NhX3ZhciAoY29udGFpbmVyX3R5cGUpLAorCQkJICAgICBOT1Bf RVhQUiwgdmFsdWUpOworICAgICAgYXBwZW5kX3BhdHRlcm5fZGVmX3NlcSAodmluZm8sIHN0 bXRfaW5mbywgcGF0dGVybl9zdG10KTsKKyAgICAgIHZhbHVlID0gZ2ltcGxlX2dldF9saHMg KHBhdHRlcm5fc3RtdCk7CisgICAgfQorCisgIC8qIFNoaWZ0IFZBTFVFIGludG8gcGxhY2Uu ICAqLworICB0cmVlIHNoaWZ0ZWQgPSB2YWx1ZTsKKyAgaWYgKHNoaWZ0X24pCisgICAgewor ICAgICAgcGF0dGVybl9zdG10CisJPSBnaW1wbGVfYnVpbGRfYXNzaWduICh2ZWN0X3JlY29n X3RlbXBfc3NhX3ZhciAoY29udGFpbmVyX3R5cGUpLAorCQkJICAgICAgIExTSElGVF9FWFBS LCB2YWx1ZSwgc2hpZnQpOworICAgICAgYXBwZW5kX3BhdHRlcm5fZGVmX3NlcSAodmluZm8s IHN0bXRfaW5mbywgcGF0dGVybl9zdG10KTsKKyAgICAgIHNoaWZ0ZWQgPSBnaW1wbGVfZ2V0 X2xocyAocGF0dGVybl9zdG10KTsKKyAgICB9CisKKyAgdHJlZSBtYXNrX3QKKyAgICA9IHdp ZGVfaW50X3RvX3RyZWUgKGNvbnRhaW5lcl90eXBlLAorCQkJd2k6OnNoaWZ0ZWRfbWFzayAo c2hpZnRfbiwgbWFza193aWR0aCwgZmFsc2UsIHByZWMpKTsKKworICAvKiBDbGVhciBiaXRz IHdlIGRvbid0IHdhbnQgdG8gd3JpdGUgYmFjayBmcm9tIFNISUZURUQuICAqLworICBnaW1w bGVfc2VxIHN0bXRzID0gTlVMTDsKKyAgdHJlZSBtYXNrZWQgPSBnaW1wbGVfYnVpbGQgKCZz dG10cywgQklUX0FORF9FWFBSLCBjb250YWluZXJfdHlwZSwgc2hpZnRlZCwKKwkJCSAgICAg IG1hc2tfdCk7CisgIGlmICghZ2ltcGxlX3NlcV9lbXB0eV9wIChzdG10cykpCisgICAgewor ICAgICAgcGF0dGVybl9zdG10ID0gZ2ltcGxlX3NlcV9maXJzdF9zdG10IChzdG10cyk7Cisg ICAgICBhcHBlbmRfcGF0dGVybl9kZWZfc2VxICh2aW5mbywgc3RtdF9pbmZvLCBwYXR0ZXJu X3N0bXQpOworICAgIH0KKworICAvKiBNYXNrIG9mZiB0aGUgYml0cyBpbiB0aGUgY29udGFp bmVyIHRoYXQgd2UgYXJlIHRvIHdyaXRlIHRvLiAgKi8KKyAgbWFza190ID0gd2lkZV9pbnRf dG9fdHJlZSAoY29udGFpbmVyX3R5cGUsCisJCQkgICAgIHdpOjpzaGlmdGVkX21hc2sgKHNo aWZ0X24sIG1hc2tfd2lkdGgsIHRydWUsIHByZWMpKTsKKyAgdHJlZSBjbGVhcmVkID0gdmVj dF9yZWNvZ190ZW1wX3NzYV92YXIgKGNvbnRhaW5lcl90eXBlKTsKKyAgcGF0dGVybl9zdG10 ID0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAoY2xlYXJlZCwgQklUX0FORF9FWFBSLCBjb250YWlu ZXIsIG1hc2tfdCk7CisgIGFwcGVuZF9wYXR0ZXJuX2RlZl9zZXEgKHZpbmZvLCBzdG10X2lu Zm8sIHBhdHRlcm5fc3RtdCk7CisKKyAgLyogV3JpdGUgTUFTS0VEIGludG8gQ0xFQVJFRC4g ICovCisgIHBhdHRlcm5fc3RtdAorICAgID0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAodmVjdF9y ZWNvZ190ZW1wX3NzYV92YXIgKGNvbnRhaW5lcl90eXBlKSwKKwkJCSAgIEJJVF9JT1JfRVhQ UiwgY2xlYXJlZCwgbWFza2VkKTsKKworICAqdHlwZV9vdXQgPSBTVE1UX1ZJTkZPX1ZFQ1RZ UEUgKHN0bXRfaW5mbyk7CisgIHZlY3RfcGF0dGVybl9kZXRlY3RlZCAoImJpdF9pbnNlcnQg cGF0dGVybiIsIHN0bXRfaW5mby0+c3RtdCk7CisKKyAgcmV0dXJuIHBhdHRlcm5fc3RtdDsK K30KKworCiAvKiBSZWNvZ25pemUgY2FzZXMgaW4gd2hpY2ggYW4gb3BlcmF0aW9uIGlzIHBl cmZvcm1lZCBpbiBvbmUgdHlwZSBXVFlQRQogICAgYnV0IGNvdWxkIGJlIGRvbmUgbW9yZSBl ZmZpY2llbnRseSBpbiBhIG5hcnJvd2VyIHR5cGUgTlRZUEUuICBGb3IgZXhhbXBsZSwKICAg IGlmIHdlIGhhdmU6CkBAIC01NjIyLDYgKzU5NDgsOCBAQCBzdHJ1Y3QgdmVjdF9yZWNvZ19m dW5jCiAgICB0YWtlbiB3aGljaCBtZWFucyB1c3VhbGx5IHRoZSBtb3JlIGNvbXBsZXggb25l IG5lZWRzIHRvIHByZWNlZWQgdGhlCiAgICBsZXNzIGNvbXBsZXMgb25leCAod2lkZW5fc3Vt IG9ubHkgYWZ0ZXIgZG90X3Byb2Qgb3Igc2FkIGZvciBleGFtcGxlKS4gICovCiBzdGF0aWMg dmVjdF9yZWNvZ19mdW5jIHZlY3RfdmVjdF9yZWNvZ19mdW5jX3B0cnNbXSA9IHsKKyAgeyB2 ZWN0X3JlY29nX2JpdGZpZWxkX3JlZl9wYXR0ZXJuLCAiYml0ZmllbGRfcmVmIiB9LAorICB7 IHZlY3RfcmVjb2dfYml0X2luc2VydF9wYXR0ZXJuLCAiYml0X2luc2VydCIgfSwKICAgeyB2 ZWN0X3JlY29nX292ZXJfd2lkZW5pbmdfcGF0dGVybiwgIm92ZXJfd2lkZW5pbmciIH0sCiAg IC8qIE11c3QgY29tZSBhZnRlciBvdmVyX3dpZGVuaW5nLCB3aGljaCBuYXJyb3dzIHRoZSBz aGlmdCBhcyBtdWNoIGFzCiAgICAgIHBvc3NpYmxlIGJlZm9yZWhhbmQuICAqLwo= --------------50xwSyx1euiXmevaqkTxp3E0--