From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) by sourceware.org (Postfix) with ESMTPS id 7D3863858C29 for ; Tue, 12 Dec 2023 07:03:06 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 7D3863858C29 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=linux.ibm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linux.ibm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 7D3863858C29 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=148.163.156.1 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1702364589; cv=none; b=OigGDXddi19wV5lv2rT7cfEEX5P61XbhVNPNfTi7wolpiDbdXMSUYBBxh5EBLUsS+b3BPsBTYKiN09cSrNwK8+05QTqOV7ki5cXi+r0FrDTMCDIIHRxxXW1zKL5QV8TdbbXCOX5iW45aLT+ZOXEJW3jB5DROBVkx2BSRTmduskc= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1702364589; c=relaxed/simple; bh=dre2OOo9E/7DCJ4I02M1JGmdjkOXKxGH5RYXGsjyV5o=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=OT1jA70GKOALiwtmU7yss1jIPry8R969Z0tHLh2WCMjlBLCzZT9+QZggzYuO/qfjOH86p1CVzKbOGf+hOtSzug6nBGAd5YhG3qQa1UaQW3vaPlLo6bLjxSFlgqxAR1wwhmKx7ruY6mKzB8YGXmDV3LUqKQqo1pjjUO8LD+rs+JI= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from pps.filterd (m0360083.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3BC6vv6C014556; Tue, 12 Dec 2023 07:03:01 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=content-type : message-id : date : mime-version : subject : from : to : cc : references : in-reply-to; s=pp1; bh=msJ03RxHAvZi5bizm9Cq1LXsA62bpJOQ89MUIIxGeJM=; b=ebAnW1nvji6QMCzTQjewbC2Qth6iIWajsce0vpBUt5Fc5R2Ym0QUkGsH8J/+7NvjVHxM uAc662+3COcHBgwoG7vwy5NwZ/mowegbTAtJ2aZEF3L3J4I5Wxq5pejNnOUe6nG1wnRM LWADMXUtDihylHI9K1ZoUaJo4m+WDQTgH11GyeeLDPEtG6jKZ0On3+9zD5x1zaI5oo3f a+eNLn+u+kRp1HbWRkDCsARUAusUSCm4tONTAIb4lB2X/tRsQxQrdj4Ab6Ho6GxLLgVL B/OM3kf9BLNEVQ4maH3bIzvb+JvyA7fCqjJhEqks7SrxSUw70+L1+tlpoGTbcP6UlC4y kA== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3uxjpyr5cr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 12 Dec 2023 07:03:00 +0000 Received: from m0360083.ppops.net (m0360083.ppops.net [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 3BC70KOo021695; Tue, 12 Dec 2023 07:03:00 GMT Received: from ppma13.dal12v.mail.ibm.com (dd.9e.1632.ip4.static.sl-reverse.com [50.22.158.221]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3uxjpyr5by-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 12 Dec 2023 07:03:00 +0000 Received: from pps.filterd (ppma13.dal12v.mail.ibm.com [127.0.0.1]) by ppma13.dal12v.mail.ibm.com (8.17.1.19/8.17.1.19) with ESMTP id 3BC4Gv97004390; Tue, 12 Dec 2023 07:02:59 GMT Received: from smtprelay07.fra02v.mail.ibm.com ([9.218.2.229]) by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 3uw4sk6vpu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 12 Dec 2023 07:02:59 +0000 Received: from smtpav03.fra02v.mail.ibm.com (smtpav03.fra02v.mail.ibm.com [10.20.54.102]) by smtprelay07.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 3BC72uRW17302072 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 12 Dec 2023 07:02:56 GMT Received: from smtpav03.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id DF0692004D; Tue, 12 Dec 2023 07:02:55 +0000 (GMT) Received: from smtpav03.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id DEC9820040; Tue, 12 Dec 2023 07:02:50 +0000 (GMT) Received: from [9.200.53.32] (unknown [9.200.53.32]) by smtpav03.fra02v.mail.ibm.com (Postfix) with ESMTP; Tue, 12 Dec 2023 07:02:50 +0000 (GMT) Content-Type: multipart/mixed; boundary="------------SDrx9KX09kQLj0yARpljTEYU" Message-ID: Date: Tue, 12 Dec 2023 15:02:49 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.6.1 Subject: [PATCH draft v2] sched: Don't skip empty block in scheduling [PR108273] Content-Language: en-US From: "Kewen.Lin" To: Alexander Monakov , Richard Biener Cc: Jeff Law , Maxim Kuvyrkov , GCC Patches , Richard Sandiford , Jeff Law , Vladimir Makarov , zhroma@ispras.ru, Andrey Belevantsev , Segher Boessenkool , Peter Bergner , Michael Meissner , Alexandre Oliva References: <85b4098e-a72f-d013-ff17-8097971f71ba@linux.ibm.com> <09FEFDAE-698B-4B06-A896-8088B9B31539@linaro.org> <4675c26c-f230-b6d6-27c5-bc9f74736e38@linux.ibm.com> <41a4d065-c4b6-4a67-adf0-e84e942616c7@gmail.com> <93ce3468-a1ee-e77c-cbeb-a8c67a303bf9@ispras.ru> <7eb725d9-de7c-87ba-5ebd-f2e1485c5854@ispras.ru> <475af219-f250-a0f4-78b0-998f96fb24aa@linux.ibm.com> <9874e072-747a-39e9-da5e-d88f77b275aa@linux.ibm.com> <434b7d49-808e-5254-b023-a7e1dad29f81@ispras.ru> <1f407c4c-fb0a-c9c8-6438-144cfa77fd4b@linux.ibm.com> In-Reply-To: <1f407c4c-fb0a-c9c8-6438-144cfa77fd4b@linux.ibm.com> X-TM-AS-GCONF: 00 X-Proofpoint-GUID: duMLnTwQzHO90rSvKQYBOVTKcR4iMOPi X-Proofpoint-ORIG-GUID: NHvhSHyb1RnykhDInvXfLLsb56y34OYI X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.997,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-12-12_02,2023-12-07_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 priorityscore=1501 phishscore=0 impostorscore=0 adultscore=0 malwarescore=0 lowpriorityscore=0 mlxscore=0 spamscore=0 suspectscore=0 mlxlogscore=999 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311290000 definitions=main-2312120054 X-Spam-Status: No, score=-11.8 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE 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. --------------SDrx9KX09kQLj0yARpljTEYU Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi, on 2023/11/22 17:30, Kewen.Lin wrote: > on 2023/11/17 20:55, Alexander Monakov wrote: >> >> On Fri, 17 Nov 2023, Kewen.Lin wrote: >>>> I don't think you can run cleanup_cfg after sched_init. I would suggest >>>> to put it early in schedule_insns. >>> >>> Thanks for the suggestion, I placed it at the beginning of haifa_sched_init >>> instead, since schedule_insns invokes haifa_sched_init, although the >>> calls rgn_setup_common_sched_info and rgn_setup_sched_infos are executed >>> ahead but they are all "setup" functions, shouldn't affect or be affected >>> by this placement. >> >> I was worried because sched_init invokes df_analyze, and I'm not sure if >> cfg_cleanup can invalidate it. > > Thanks for further explaining! By scanning cleanup_cfg, it seems that it > considers df, like compact_blocks checks df, try_optimize_cfg invokes > df_analyze etc., but I agree that moving cleanup_cfg before sched_init > makes more sense. > >> >>>> I suspect this may be caused by invoking cleanup_cfg too late. >>> >>> By looking into some failures, I found that although cleanup_cfg is executed >>> there would be still some empty blocks left, by analyzing a few failures there >>> are at least such cases: >>> 1. empty function body >>> 2. block holding a label for return. >>> 3. block without any successor. >>> 4. block which becomes empty after scheduling some other block. >>> 5. block which looks mergeable with its always successor but left. >>> ... >>> >>> For 1,2, there is one single successor EXIT block, I think they don't affect >>> state transition, for 3, it's the same. For 4, it depends on if we can have >>> the assumption this kind of empty block doesn't have the chance to have debug >>> insn (like associated debug insn should be moved along), I'm not sure. For 5, >>> a reduced test case is: >> >> Oh, I should have thought of cases like these, really sorry about the slip >> of attention, and thanks for showing a testcase for item 5. As Richard as >> saying in his response, cfg_cleanup cannot be a fix here. The thing to check >> would be changing no_real_insns_p to always return false, and see if the >> situation looks recoverable (if it breaks bootstrap, regtest statistics of >> a non-bootstrapped compiler are still informative). > > As you suggested, I forced no_real_insns_p to return false all the time, some > issues got exposed, almost all of them are asserting NOTE_P insn shouldn't be > encountered in those places, so the adjustments for most of them are just to > consider NOTE_P or this kind of special block and so on. One draft patch is > attached, it can be bootstrapped and regress-tested on ppc64{,le} and x86. > btw, it's without the previous cfg_cleanup adjustment (hope it can get more > empty blocks and expose more issues). The draft isn't qualified for code > review but I hope it can provide some information on what kinds of changes > are needed for the proposal. If this is the direction which we all agree on, > I'll further refine it and post a formal patch. One thing I want to note is > that this patch disable one assertion below: > > diff --git a/gcc/sched-rgn.cc b/gcc/sched-rgn.cc > index e5964f54ead..abd334864fb 100644 > --- a/gcc/sched-rgn.cc > +++ b/gcc/sched-rgn.cc > @@ -3219,7 +3219,7 @@ schedule_region (int rgn) > } > > /* Sanity check: verify that all region insns were scheduled. */ > - gcc_assert (sched_rgn_n_insns == rgn_n_insns); > + // gcc_assert (sched_rgn_n_insns == rgn_n_insns); > > sched_finish_ready_list (); > > Some cases can cause this assertion to fail, it's due to the mismatch on > to-be-scheduled and scheduled insn counts. The reason why it happens is that > one block previously has only one INSN_P but while scheduling some other blocks > it gets moved as well then we ends up with an empty block so that the only > NOTE_P insn was counted then, but since this block isn't empty initially and > NOTE_P gets skipped in a normal block, the count to-be-scheduled can't count > it in. It can be fixed with special-casing this kind of block for counting > like initially recording which block is empty and if a block isn't recorded > before then fix up the count for it accordingly. I'm not sure if someone may > have an argument that all the complication make this proposal beaten by > previous special-casing debug insn approach, looking forward to more comments. > The attached one is the improved draft patch v2 for skipping empty BB, against the previous draft, it does: 1) use NONDEBUG_INSN_P for !DEBUG_INSN_P && !NOTE_P when it's appropriate; 2) merge NOTE_P special handling into the one on DEBUG_INSN_P; 3) fix exposed issue on broad testing on EBB; 4) introduce rgn_init_empty_bb for mismatch count issue; 5) add/refine some comments; It's bootstrapped and regress-tested on x86_64-redhat-linux and powerpc64{,le}-linux-gnu. I also tested with EBB turned on by default, one issue in schedule_ebb got exposed and fixed, bootstrapped on x86_64-redhat-linux and powerpc64{,le}-linux-gnu, regress-tested on powerpc64{,le}-linux-gnu, one guality failure on x86_64-redhat-linux. With seletive-scheduling turned on by default, it's bootstrapped on x86_64-redhat-linux and a few guality failures and some failures with extra warnings (like with -fvar-tracking-assignments), those failures are trivial. Note that I'm unable to test forced seletive-scheduling on Power since it's even broken without this patch, there seems a few issues, I'll file some PRs separately. Any comments are highly appreciated. I'll go forward to make a formal patch if there is no objection this week. I think we still can keep this no_real_insns_p since in some places like free_block_dependencies it's still good for early return, we can just remove its uses in some places. BR, Kewen ---- --------------SDrx9KX09kQLj0yARpljTEYU Content-Type: text/plain; charset=UTF-8; name="0002.txt" Content-Disposition: attachment; filename="0002.txt" Content-Transfer-Encoding: base64 U3ViamVjdDogW1BBVENIIGRyYWZ0IHYyXSBzY2hlZDogRG9uJ3Qgc2tpcCBlbXB0eSBibG9j ayBpbiBzY2hlZHVsaW5nCgotLS0KIGdjYy9oYWlmYS1zY2hlZC5jYyB8IDE3MiArKysrKysr KysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0KIGdjYy9ydGwuaCAgICAg ICAgICB8ICAgNCArLQogZ2NjL3NjaGVkLWViYi5jYyAgIHwgICA3ICstCiBnY2Mvc2NoZWQt cmduLmNjICAgfCAgMjMgKysrKystCiA0IGZpbGVzIGNoYW5nZWQsIDEyNiBpbnNlcnRpb25z KCspLCA4MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9nY2MvaGFpZmEtc2NoZWQuY2Mg Yi9nY2MvaGFpZmEtc2NoZWQuY2MKaW5kZXggOGU4YWRkNzA5YjMuLjdiNGM0YTkyYmIwIDEw MDY0NAotLS0gYS9nY2MvaGFpZmEtc2NoZWQuY2MKKysrIGIvZ2NjL2hhaWZhLXNjaGVkLmNj CkBAIC0xMjA3LDYgKzEyMDcsMTEgQEAgcmVjb21wdXRlX3RvZG9fc3BlYyAocnR4X2luc24g Km5leHQsIGJvb2wgZm9yX2JhY2t0cmFjaykKICAgaW50IG5fcmVwbGFjZSA9IDA7CiAgIGJv b2wgZmlyc3RfcCA9IHRydWU7CiAKKyAgLyogU2luY2Ugd2UgZG9uJ3Qgc2tpcCBub19yZWFs X2luc25zX3AgYmxvY2sgYW55IG1vcmUsIGl0J3MKKyAgICAgcG9zc2libGUgdG8gbWVldCBO T1RFIGluc24gbm93LCBlYXJseSByZXR1cm4gaWYgc28uICAqLworICBpZiAoTk9URV9QIChu ZXh0KSkKKyAgICByZXR1cm4gMDsKKwogICBpZiAoc2RfbGlzdHNfZW1wdHlfcCAobmV4dCwg U0RfTElTVF9CQUNLKSkKICAgICAvKiBORVhUIGhhcyBhbGwgaXRzIGRlcGVuZGVuY2llcyBy ZXNvbHZlZC4gICovCiAgICAgcmV0dXJuIDA7CkBAIC0xNzI2LDYgKzE3MzEsMTEgQEAgc2V0 dXBfaW5zbl9yZWdfcHJlc3N1cmVfaW5mbyAocnR4X2luc24gKmluc24pCiAgIGludCAqbWF4 X3JlZ19wcmVzc3VyZTsKICAgc3RhdGljIGludCBkZWF0aFtOX1JFR19DTEFTU0VTXTsKIAor ICAvKiBTaW5jZSB3ZSBkb24ndCBza2lwIG5vX3JlYWxfaW5zbnNfcCBibG9jayBhbnkgbW9y ZSwgaXQncyBwb3NzaWJsZSB0bworICAgICBzY2hlZHVsZSBOT1RFIGluc24gbm93LCB3ZSBz aG91bGQgY2hlY2sgZm9yIGl0IGZpcnN0LiAgKi8KKyAgaWYgKE5PVEVfUCAoaW5zbikpCisg ICAgcmV0dXJuOworCiAgIGdjY19jaGVja2luZ19hc3NlcnQgKCFERUJVR19JTlNOX1AgKGlu c24pKTsKIAogICBleGNlc3NfY29zdF9jaGFuZ2UgPSAwOwpAQCAtNDAxNywxMCArNDAyNywx MCBAQCBzY2hlZHVsZV9pbnNuIChydHhfaW5zbiAqaW5zbikKIAogICAvKiBTY2hlZHVsaW5n IGluc3RydWN0aW9uIHNob3VsZCBoYXZlIGFsbCBpdHMgZGVwZW5kZW5jaWVzIHJlc29sdmVk IGFuZAogICAgICBzaG91bGQgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgcmVhZHkgbGlz dC4gICovCi0gIGdjY19hc3NlcnQgKHNkX2xpc3RzX2VtcHR5X3AgKGluc24sIFNEX0xJU1Rf SEFSRF9CQUNLKSk7CisgIGdjY19hc3NlcnQgKE5PVEVfUCAoaW5zbikgfHwgc2RfbGlzdHNf ZW1wdHlfcCAoaW5zbiwgU0RfTElTVF9IQVJEX0JBQ0spKTsKIAogICAvKiBSZXNldCBkZWJ1 ZyBpbnNucyBpbnZhbGlkYXRlZCBieSBtb3ZpbmcgdGhpcyBpbnNuLiAgKi8KLSAgaWYgKE1B WV9IQVZFX0RFQlVHX0JJTkRfSU5TTlMgJiYgIURFQlVHX0lOU05fUCAoaW5zbikpCisgIGlm IChNQVlfSEFWRV9ERUJVR19CSU5EX0lOU05TICYmIE5PTkRFQlVHX0lOU05fUCAoaW5zbikp CiAgICAgZm9yIChzZF9pdCA9IHNkX2l0ZXJhdG9yX3N0YXJ0IChpbnNuLCBTRF9MSVNUX0JB Q0spOwogCSBzZF9pdGVyYXRvcl9jb25kICgmc2RfaXQsICZkZXApOykKICAgICAgIHsKQEAg LTQxMDYsNjEgKzQxMTYsNjYgQEAgc2NoZWR1bGVfaW5zbiAocnR4X2luc24gKmluc24pCiAK ICAgY2hlY2tfY2xvYmJlcmVkX2NvbmRpdGlvbnMgKGluc24pOwogCi0gIC8qIFVwZGF0ZSBk ZXBlbmRlbnQgaW5zdHJ1Y3Rpb25zLiAgRmlyc3QsIHNlZSBpZiBieSBzY2hlZHVsaW5nIHRo aXMgaW5zbgotICAgICBub3cgd2UgYnJva2UgYSBkZXBlbmRlbmNlIGluIGEgd2F5IHRoYXQg cmVxdWlyZXMgdXMgdG8gY2hhbmdlIGFub3RoZXIKLSAgICAgaW5zbi4gICovCi0gIGZvciAo c2RfaXQgPSBzZF9pdGVyYXRvcl9zdGFydCAoaW5zbiwgU0RfTElTVF9TUEVDX0JBQ0spOwot ICAgICAgIHNkX2l0ZXJhdG9yX2NvbmQgKCZzZF9pdCwgJmRlcCk7IHNkX2l0ZXJhdG9yX25l eHQgKCZzZF9pdCkpCisgIC8qIFNpbmNlIHdlIGRvbid0IHNraXAgbm9fcmVhbF9pbnNuc19w IGJsb2NrIGFueSBtb3JlLCBpdCdzIHBvc3NpYmxlIHRvCisgICAgIHNjaGVkdWxlIE5PVEUg aW5zbiBub3csIHdlIHNob3VsZCBjaGVjayBmb3IgaXQgZmlyc3QuICAqLworICBpZiAoIU5P VEVfUCAoaW5zbikpCiAgICAgewotICAgICAgc3RydWN0IGRlcF9yZXBsYWNlbWVudCAqZGVz YyA9IERFUF9SRVBMQUNFIChkZXApOwotICAgICAgcnR4X2luc24gKnBybyA9IERFUF9QUk8g KGRlcCk7Ci0gICAgICBpZiAoUVVFVUVfSU5ERVggKHBybykgIT0gUVVFVUVfU0NIRURVTEVE Ci0JICAmJiBkZXNjICE9IE5VTEwgJiYgZGVzYy0+aW5zbiA9PSBwcm8pCi0JYXBwbHlfcmVw bGFjZW1lbnQgKGRlcCwgZmFsc2UpOwotICAgIH0KKyAgICAgIC8qIFVwZGF0ZSBkZXBlbmRl bnQgaW5zdHJ1Y3Rpb25zLiAgRmlyc3QsIHNlZSBpZiBieSBzY2hlZHVsaW5nIHRoaXMgaW5z bgorCSBub3cgd2UgYnJva2UgYSBkZXBlbmRlbmNlIGluIGEgd2F5IHRoYXQgcmVxdWlyZXMg dXMgdG8gY2hhbmdlIGFub3RoZXIKKwkgaW5zbi4gICovCisgICAgICBmb3IgKHNkX2l0ID0g c2RfaXRlcmF0b3Jfc3RhcnQgKGluc24sIFNEX0xJU1RfU1BFQ19CQUNLKTsKKwkgICBzZF9p dGVyYXRvcl9jb25kICgmc2RfaXQsICZkZXApOyBzZF9pdGVyYXRvcl9uZXh0ICgmc2RfaXQp KQorCXsKKwkgIHN0cnVjdCBkZXBfcmVwbGFjZW1lbnQgKmRlc2MgPSBERVBfUkVQTEFDRSAo ZGVwKTsKKwkgIHJ0eF9pbnNuICpwcm8gPSBERVBfUFJPIChkZXApOworCSAgaWYgKFFVRVVF X0lOREVYIChwcm8pICE9IFFVRVVFX1NDSEVEVUxFRCAmJiBkZXNjICE9IE5VTEwKKwkgICAg ICAmJiBkZXNjLT5pbnNuID09IHBybykKKwkgICAgYXBwbHlfcmVwbGFjZW1lbnQgKGRlcCwg ZmFsc2UpOworCX0KIAotICAvKiBHbyB0aHJvdWdoIGFuZCByZXNvbHZlIGZvcndhcmQgZGVw ZW5kZW5jaWVzLiAgKi8KLSAgZm9yIChzZF9pdCA9IHNkX2l0ZXJhdG9yX3N0YXJ0IChpbnNu LCBTRF9MSVNUX0ZPUlcpOwotICAgICAgIHNkX2l0ZXJhdG9yX2NvbmQgKCZzZF9pdCwgJmRl cCk7KQotICAgIHsKLSAgICAgIHJ0eF9pbnNuICpuZXh0ID0gREVQX0NPTiAoZGVwKTsKLSAg ICAgIGJvb2wgY2FuY2VsbGVkID0gKERFUF9TVEFUVVMgKGRlcCkgJiBERVBfQ0FOQ0VMTEVE KSAhPSAwOworICAgICAgLyogR28gdGhyb3VnaCBhbmQgcmVzb2x2ZSBmb3J3YXJkIGRlcGVu ZGVuY2llcy4gICovCisgICAgICBmb3IgKHNkX2l0ID0gc2RfaXRlcmF0b3Jfc3RhcnQgKGlu c24sIFNEX0xJU1RfRk9SVyk7CisJICAgc2RfaXRlcmF0b3JfY29uZCAoJnNkX2l0LCAmZGVw KTspCisJeworCSAgcnR4X2luc24gKm5leHQgPSBERVBfQ09OIChkZXApOworCSAgYm9vbCBj YW5jZWxsZWQgPSAoREVQX1NUQVRVUyAoZGVwKSAmIERFUF9DQU5DRUxMRUQpICE9IDA7CiAK LSAgICAgIC8qIFJlc29sdmUgdGhlIGRlcGVuZGVuY2UgYmV0d2VlbiBJTlNOIGFuZCBORVhU LgotCSBzZF9yZXNvbHZlX2RlcCAoKSBtb3ZlcyBjdXJyZW50IGRlcCB0byBhbm90aGVyIGxp c3QgdGh1cwotCSBhZHZhbmNpbmcgdGhlIGl0ZXJhdG9yLiAgKi8KLSAgICAgIHNkX3Jlc29s dmVfZGVwIChzZF9pdCk7CisJICAvKiBSZXNvbHZlIHRoZSBkZXBlbmRlbmNlIGJldHdlZW4g SU5TTiBhbmQgTkVYVC4KKwkgICAgIHNkX3Jlc29sdmVfZGVwICgpIG1vdmVzIGN1cnJlbnQg ZGVwIHRvIGFub3RoZXIgbGlzdCB0aHVzCisJICAgICBhZHZhbmNpbmcgdGhlIGl0ZXJhdG9y LiAgKi8KKwkgIHNkX3Jlc29sdmVfZGVwIChzZF9pdCk7CiAKLSAgICAgIGlmIChjYW5jZWxs ZWQpCi0JewotCSAgaWYgKG11c3RfcmVzdG9yZV9wYXR0ZXJuX3AgKG5leHQsIGRlcCkpCi0J ICAgIHJlc3RvcmVfcGF0dGVybiAoZGVwLCBmYWxzZSk7Ci0JICBjb250aW51ZTsKLQl9CisJ ICBpZiAoY2FuY2VsbGVkKQorCSAgICB7CisJICAgICAgaWYgKG11c3RfcmVzdG9yZV9wYXR0 ZXJuX3AgKG5leHQsIGRlcCkpCisJCXJlc3RvcmVfcGF0dGVybiAoZGVwLCBmYWxzZSk7CisJ ICAgICAgY29udGludWU7CisJICAgIH0KIAotICAgICAgLyogRG9uJ3QgYm90aGVyIHRyeWlu ZyB0byBtYXJrIG5leHQgYXMgcmVhZHkgaWYgaW5zbiBpcyBhIGRlYnVnCi0JIGluc24uICBJ ZiBpbnNuIGlzIHRoZSBsYXN0IGhhcmQgZGVwZW5kZW5jeSwgaXQgd2lsbCBoYXZlCi0JIGFs cmVhZHkgYmVlbiBkaXNjb3VudGVkLiAgKi8KLSAgICAgIGlmIChERUJVR19JTlNOX1AgKGlu c24pICYmICFERUJVR19JTlNOX1AgKG5leHQpKQotCWNvbnRpbnVlOworCSAgLyogRG9uJ3Qg Ym90aGVyIHRyeWluZyB0byBtYXJrIG5leHQgYXMgcmVhZHkgaWYgaW5zbiBpcyBhIGRlYnVn CisJICAgICBpbnNuLiAgSWYgaW5zbiBpcyB0aGUgbGFzdCBoYXJkIGRlcGVuZGVuY3ksIGl0 IHdpbGwgaGF2ZQorCSAgICAgYWxyZWFkeSBiZWVuIGRpc2NvdW50ZWQuICAqLworCSAgaWYg KERFQlVHX0lOU05fUCAoaW5zbikgJiYgIURFQlVHX0lOU05fUCAobmV4dCkpCisJICAgIGNv bnRpbnVlOwogCi0gICAgICBpZiAoIUlTX1NQRUNVTEFUSU9OX0JSQU5DSFlfQ0hFQ0tfUCAo aW5zbikpCi0JewotCSAgaW50IGVmZmVjdGl2ZV9jb3N0OworCSAgaWYgKCFJU19TUEVDVUxB VElPTl9CUkFOQ0hZX0NIRUNLX1AgKGluc24pKQorCSAgICB7CisJICAgICAgaW50IGVmZmVj dGl2ZV9jb3N0OwogCi0JICBlZmZlY3RpdmVfY29zdCA9IHRyeV9yZWFkeSAobmV4dCk7CisJ ICAgICAgZWZmZWN0aXZlX2Nvc3QgPSB0cnlfcmVhZHkgKG5leHQpOwogCi0JICBpZiAoZWZm ZWN0aXZlX2Nvc3QgPj0gMAotCSAgICAgICYmIFNDSEVEX0dST1VQX1AgKG5leHQpCi0JICAg ICAgJiYgYWR2YW5jZSA8IGVmZmVjdGl2ZV9jb3N0KQotCSAgICBhZHZhbmNlID0gZWZmZWN0 aXZlX2Nvc3Q7Ci0JfQotICAgICAgZWxzZQotCS8qIENoZWNrIGFsd2F5cyBoYXMgb25seSBv bmUgZm9yd2FyZCBkZXBlbmRlbmNlICh0byB0aGUgZmlyc3QgaW5zbiBpbgotCSAgIHRoZSBy ZWNvdmVyeSBibG9jayksIHRoZXJlZm9yZSwgdGhpcyB3aWxsIGJlIGV4ZWN1dGVkIG9ubHkg b25jZS4gICovCi0JewotCSAgZ2NjX2Fzc2VydCAoc2RfbGlzdHNfZW1wdHlfcCAoaW5zbiwg U0RfTElTVF9GT1JXKSk7Ci0JICBmaXhfcmVjb3ZlcnlfZGVwcyAoUkVDT1ZFUllfQkxPQ0sg KGluc24pKTsKKwkgICAgICBpZiAoZWZmZWN0aXZlX2Nvc3QgPj0gMCAmJiBTQ0hFRF9HUk9V UF9QIChuZXh0KQorCQkgICYmIGFkdmFuY2UgPCBlZmZlY3RpdmVfY29zdCkKKwkJYWR2YW5j ZSA9IGVmZmVjdGl2ZV9jb3N0OworCSAgICB9CisJICBlbHNlCisJICAgIC8qIENoZWNrIGFs d2F5cyBoYXMgb25seSBvbmUgZm9yd2FyZCBkZXBlbmRlbmNlICh0byB0aGUgZmlyc3QgaW5z bgorCSAgICAgICBpbiB0aGUgcmVjb3ZlcnkgYmxvY2spLCB0aGVyZWZvcmUsIHRoaXMgd2ls bCBiZSBleGVjdXRlZCBvbmx5CisJICAgICAgIG9uY2UuICAqLworCSAgICB7CisJICAgICAg Z2NjX2Fzc2VydCAoc2RfbGlzdHNfZW1wdHlfcCAoaW5zbiwgU0RfTElTVF9GT1JXKSk7CisJ ICAgICAgZml4X3JlY292ZXJ5X2RlcHMgKFJFQ09WRVJZX0JMT0NLIChpbnNuKSk7CisJICAg IH0KIAl9CiAgICAgfQogCkBAIC00MTcwLDkgKzQxODUsOSBAQCBzY2hlZHVsZV9pbnNuIChy dHhfaW5zbiAqaW5zbikKICAgICAgbWF5IHVzZSB0aGlzIGluZm9ybWF0aW9uIHRvIGRlY2lk ZSBob3cgdGhlIGluc3RydWN0aW9uIHNob3VsZAogICAgICBiZSBhbGlnbmVkLiAgKi8KICAg aWYgKGlzc3VlX3JhdGUgPiAxCisgICAgICAmJiBOT05ERUJVR19JTlNOX1AgKGluc24pCiAg ICAgICAmJiBHRVRfQ09ERSAoUEFUVEVSTiAoaW5zbikpICE9IFVTRQotICAgICAgJiYgR0VU X0NPREUgKFBBVFRFUk4gKGluc24pKSAhPSBDTE9CQkVSCi0gICAgICAmJiAhREVCVUdfSU5T Tl9QIChpbnNuKSkKKyAgICAgICYmIEdFVF9DT0RFIChQQVRURVJOIChpbnNuKSkgIT0gQ0xP QkJFUikKICAgICB7CiAgICAgICBpZiAocmVsb2FkX2NvbXBsZXRlZCkKIAlQVVRfTU9ERSAo aW5zbiwgY2xvY2tfdmFyID4gbGFzdF9jbG9ja192YXIgPyBUSW1vZGUgOiBWT0lEbW9kZSk7 CkBAIC01MDM2LDggKzUwNTEsMTEgQEAgZ2V0X2ViYl9oZWFkX3RhaWwgKGJhc2ljX2Jsb2Nr IGJlZywgYmFzaWNfYmxvY2sgZW5kLAogLyogUmV0dXJuIHRydWUgaWYgdGhlcmUgYXJlIG5v IHJlYWwgaW5zbnMgaW4gdGhlIHJhbmdlIFsgSEVBRCwgVEFJTCBdLiAgKi8KIAogYm9vbAot bm9fcmVhbF9pbnNuc19wIChjb25zdCBydHhfaW5zbiAqaGVhZCwgY29uc3QgcnR4X2luc24g KnRhaWwpCitub19yZWFsX2luc25zX3AgKGNvbnN0IHJ0eF9pbnNuICpoZWFkIEFUVFJJQlVU RV9VTlVTRUQsCisJCSBjb25zdCBydHhfaW5zbiAqdGFpbCBBVFRSSUJVVEVfVU5VU0VEKQog eworICByZXR1cm4gZmFsc2U7CisjaWYgMAogICB3aGlsZSAoaGVhZCAhPSBORVhUX0lOU04g KHRhaWwpKQogICAgIHsKICAgICAgIGlmICghTk9URV9QIChoZWFkKSAmJiAhTEFCRUxfUCAo aGVhZCkpCkBAIC01MDQ1LDYgKzUwNjMsNyBAQCBub19yZWFsX2luc25zX3AgKGNvbnN0IHJ0 eF9pbnNuICpoZWFkLCBjb25zdCBydHhfaW5zbiAqdGFpbCkKICAgICAgIGhlYWQgPSBORVhU X0lOU04gKGhlYWQpOwogICAgIH0KICAgcmV0dXJuIHRydWU7CisjZW5kaWYKIH0KIAogLyog UmVzdG9yZS1vdGhlci1ub3RlczogTk9URV9MSVNUIGlzIHRoZSBlbmQgb2YgYSBjaGFpbiBv ZiBub3RlcwpAQCAtNjIyNCw4ICs2MjQzLDEyIEBAIGNvbW1pdF9zY2hlZHVsZSAocnR4X2lu c24gKnByZXZfaGVhZCwgcnR4X2luc24gKnRhaWwsIGJhc2ljX2Jsb2NrICp0YXJnZXRfYmIp CiAgICAgICAgc2NoZWR1bGVkX2luc25zLml0ZXJhdGUgKGksICZpbnNuKTsKICAgICAgICBp KyspCiAgICAgewotICAgICAgaWYgKGNvbnRyb2xfZmxvd19pbnNuX3AgKGxhc3Rfc2NoZWR1 bGVkX2luc24pCi0JICB8fCBjdXJyZW50X3NjaGVkX2luZm8tPmFkdmFuY2VfdGFyZ2V0X2Ji ICgqdGFyZ2V0X2JiLCBpbnNuKSkKKyAgICAgIC8qIFNpbmNlIHdlIGRvbid0IHNraXAgbm9f cmVhbF9pbnNuc19wIGJsb2NrIGFueSBtb3JlLCBpdCdzIHBvc3NpYmxlCisJIHRvIHNjaGVk dWxlIE5PVEUgaW5zbiBub3csIHdlIHNob3VsZCBjaGVjayBmb3IgaXQgaGVyZSB0byBhdm9p ZAorCSB1bmV4cGVjdGVkIHRhcmdldCBiYiBhZHZhbmNlLiAgKi8KKyAgICAgIGlmICgoY29u dHJvbF9mbG93X2luc25fcCAobGFzdF9zY2hlZHVsZWRfaW5zbikKKwkgICB8fCBjdXJyZW50 X3NjaGVkX2luZm8tPmFkdmFuY2VfdGFyZ2V0X2JiICgqdGFyZ2V0X2JiLCBpbnNuKSkKKwkg ICYmICFOT1RFX1AgKGluc24pKQogCXsKIAkgICp0YXJnZXRfYmIgPSBjdXJyZW50X3NjaGVk X2luZm8tPmFkdmFuY2VfdGFyZ2V0X2JiICgqdGFyZ2V0X2JiLCAwKTsKIApAQCAtNjI0NSw3 ICs2MjY4LDcgQEAgY29tbWl0X3NjaGVkdWxlIChydHhfaW5zbiAqcHJldl9oZWFkLCBydHhf aW5zbiAqdGFpbCwgYmFzaWNfYmxvY2sgKnRhcmdldF9iYikKIAkoKmN1cnJlbnRfc2NoZWRf aW5mby0+YmVnaW5fbW92ZV9pbnNuKSAoaW5zbiwgbGFzdF9zY2hlZHVsZWRfaW5zbik7CiAg ICAgICBtb3ZlX2luc24gKGluc24sIGxhc3Rfc2NoZWR1bGVkX2luc24sCiAJCSBjdXJyZW50 X3NjaGVkX2luZm8tPm5leHRfdGFpbCk7Ci0gICAgICBpZiAoIURFQlVHX0lOU05fUCAoaW5z bikpCisgICAgICBpZiAoTk9OREVCVUdfSU5TTl9QIChpbnNuKSkKIAlyZWVtaXRfbm90ZXMg KGluc24pOwogICAgICAgbGFzdF9zY2hlZHVsZWRfaW5zbiA9IGluc247CiAgICAgfQpAQCAt NjI5Niw3ICs2MzE5LDcgQEAgcHJ1bmVfcmVhZHlfbGlzdCAoc3RhdGVfdCB0ZW1wX3N0YXRl LCBib29sIGZpcnN0X2N5Y2xlX2luc25fcCwKIAkgIGludCBjb3N0ID0gMDsKIAkgIGNvbnN0 IGNoYXIgKnJlYXNvbiA9ICJyZXNvdXJjZSBjb25mbGljdCI7CiAKLQkgIGlmIChERUJVR19J TlNOX1AgKGluc24pKQorCSAgaWYgKERFQlVHX0lOU05fUCAoaW5zbikgfHwgTk9URV9QIChp bnNuKSkKIAkgICAgY29udGludWU7CiAKIAkgIGlmIChzY2hlZF9ncm91cF9mb3VuZCAmJiAh U0NIRURfR1JPVVBfUCAoaW5zbikKQEAgLTY1MDQsNyArNjUyNyw3IEBAIHNjaGVkdWxlX2Js b2NrIChiYXNpY19ibG9jayAqdGFyZ2V0X2JiLCBzdGF0ZV90IGluaXRfc3RhdGUpCiAgICAg IGFuZCBjYXVzZWQgcHJvYmxlbXMgYmVjYXVzZSBzY2hlZHVsZV9ibG9jayBhbmQgY29tcHV0 ZV9mb3J3YXJkX2RlcGVuZGVuY2VzCiAgICAgIGhhZCBkaWZmZXJlbnQgbm90aW9ucyBvZiB3 aGF0IHRoZSAiaGVhZCIgaW5zbiB3YXMuICAqLwogCi0gIGdjY19hc3NlcnQgKGhlYWQgIT0g dGFpbCB8fCBJTlNOX1AgKGhlYWQpKTsKKyAgZ2NjX2Fzc2VydCAoaGVhZCAhPSB0YWlsIHx8 IElOU05fUCAoaGVhZCkgfHwgTk9URV9QIChoZWFkKSk7CiAKICAgaGFpZmFfcmVjb3Zlcnlf YmJfcmVjZW50bHlfYWRkZWRfcCA9IGZhbHNlOwogCkBAIC02NTM5LDE1ICs2NTYyLDE1IEBA IHNjaGVkdWxlX2Jsb2NrIChiYXNpY19ibG9jayAqdGFyZ2V0X2JiLCBzdGF0ZV90IGluaXRf c3RhdGUpCiAgIGlmICh0YXJnZXRtLnNjaGVkLmluaXQpCiAgICAgdGFyZ2V0bS5zY2hlZC5p bml0IChzY2hlZF9kdW1wLCBzY2hlZF92ZXJib3NlLCByZWFkeS52ZWNsZW4pOwogCisgIGdj Y19hc3NlcnQgKCgoTk9URV9QIChwcmV2X2hlYWQpIHx8IERFQlVHX0lOU05fUCAocHJldl9o ZWFkKSkKKwkgICAgICAgJiYgQkxPQ0tfRk9SX0lOU04gKHByZXZfaGVhZCkgPT0gKnRhcmdl dF9iYikKKwkgICAgICB8fCAoaGVhZCA9PSB0YWlsICYmIE5PVEVfUCAoaGVhZCkpKTsKKwog ICAvKiBXZSBzdGFydCBpbnNlcnRpbmcgaW5zbnMgYWZ0ZXIgUFJFVl9IRUFELiAgKi8KICAg bGFzdF9zY2hlZHVsZWRfaW5zbiA9IHByZXZfaGVhZDsKICAgbGFzdF9ub25kZWJ1Z19zY2hl ZHVsZWRfaW5zbiA9IE5VTEw7CiAgIG5vbnNjaGVkdWxlZF9pbnNuc19iZWdpbiA9IE5VTEw7 CiAKLSAgZ2NjX2Fzc2VydCAoKE5PVEVfUCAobGFzdF9zY2hlZHVsZWRfaW5zbikKLQkgICAg ICAgfHwgREVCVUdfSU5TTl9QIChsYXN0X3NjaGVkdWxlZF9pbnNuKSkKLQkgICAgICAmJiBC TE9DS19GT1JfSU5TTiAobGFzdF9zY2hlZHVsZWRfaW5zbikgPT0gKnRhcmdldF9iYik7Ci0K ICAgLyogSW5pdGlhbGl6ZSBJTlNOX1FVRVVFLiAgUV9TSVpFIGlzIHRoZSB0b3RhbCBudW1i ZXIgb2YgaW5zbnMgaW4gdGhlCiAgICAgIHF1ZXVlLiAgKi8KICAgcV9wdHIgPSAwOwpAQCAt NjcyNSwxNSArNjc0OCwxNiBAQCBzY2hlZHVsZV9ibG9jayAoYmFzaWNfYmxvY2sgKnRhcmdl dF9iYiwgc3RhdGVfdCBpbml0X3N0YXRlKQogCQl9CiAJICAgIH0KIAotCSAgLyogV2UgZG9u J3Qgd2FudCBtZCBzY2hlZCByZW9yZGVyIHRvIGV2ZW4gc2VlIGRlYnVnIGlzbnMsIHNvIHB1 dAotCSAgICAgdGhlbSBvdXQgcmlnaHQgYXdheS4gICovCi0JICBpZiAocmVhZHkubl9yZWFk eSAmJiBERUJVR19JTlNOX1AgKHJlYWR5X2VsZW1lbnQgKCZyZWFkeSwgMCkpCisJICAvKiBX ZSBkb24ndCB3YW50IG1kIHNjaGVkIHJlb3JkZXIgdG8gZXZlbiBzZWUgZGVidWcgYW5kIG5v dGUgaW5zbnMsCisJICAgICBzbyBwdXQgdGhlbSBvdXQgcmlnaHQgYXdheS4gICovCisJICBp ZiAocmVhZHkubl9yZWFkeQorCSAgICAgICYmICFOT05ERUJVR19JTlNOX1AgKHJlYWR5X2Vs ZW1lbnQgKCZyZWFkeSwgMCkpCiAJICAgICAgJiYgKCpjdXJyZW50X3NjaGVkX2luZm8tPnNj aGVkdWxlX21vcmVfcCkgKCkpCiAJICAgIHsKLQkgICAgICB3aGlsZSAocmVhZHkubl9yZWFk eSAmJiBERUJVR19JTlNOX1AgKHJlYWR5X2VsZW1lbnQgKCZyZWFkeSwgMCkpKQorCSAgICAg IHdoaWxlIChyZWFkeS5uX3JlYWR5ICYmICFOT05ERUJVR19JTlNOX1AgKHJlYWR5X2VsZW1l bnQgKCZyZWFkeSwgMCkpKQogCQl7CiAJCSAgcnR4X2luc24gKmluc24gPSByZWFkeV9yZW1v dmVfZmlyc3QgKCZyZWFkeSk7Ci0JCSAgZ2NjX2Fzc2VydCAoREVCVUdfSU5TTl9QIChpbnNu KSk7CisJCSAgZ2NjX2Fzc2VydCAoREVCVUdfSU5TTl9QIChpbnNuKSB8fCBOT1RFX1AgKGlu c24pKTsKIAkJICAoKmN1cnJlbnRfc2NoZWRfaW5mby0+YmVnaW5fc2NoZWR1bGVfcmVhZHkp IChpbnNuKTsKIAkJICBzY2hlZHVsZWRfaW5zbnMuc2FmZV9wdXNoIChpbnNuKTsKIAkJICBs YXN0X3NjaGVkdWxlZF9pbnNuID0gaW5zbjsKQEAgLTcxNDUsMTcgKzcxNjksMTggQEAgc2No ZWR1bGVfYmxvY2sgKGJhc2ljX2Jsb2NrICp0YXJnZXRfYmIsIHN0YXRlX3QgaW5pdF9zdGF0 ZSkKIGludAogc2V0X3ByaW9yaXRpZXMgKHJ0eF9pbnNuICpoZWFkLCBydHhfaW5zbiAqdGFp bCkKIHsKKyAgLyogU2luY2Ugd2UgZG9uJ3Qgc2tpcCBub19yZWFsX2luc25zX3AgYmxvY2sg YW55IG1vcmUsIGl0J3MKKyAgICAgcG9zc2libGUgdG8gbWVldCBOT1RFIGluc24gbm93LCB3 ZSBkb24ndCBuZWVkIHRvIGNvbXB1dGUKKyAgICAgcHJpb3JpdHkgZm9yIHN1Y2ggYmxvY2ss IHNvIGVhcmx5IHJldHVybi4gICovCisgIGlmIChoZWFkID09IHRhaWwgJiYgIUlOU05fUCAo aGVhZCkpCisgICAgcmV0dXJuIDE7CisKICAgcnR4X2luc24gKmluc247Ci0gIGludCBuX2lu c247CisgIGludCBuX2luc24gPSAwOwogICBpbnQgc2NoZWRfbWF4X2luc25zX3ByaW9yaXR5 ID0KIAljdXJyZW50X3NjaGVkX2luZm8tPnNjaGVkX21heF9pbnNuc19wcmlvcml0eTsKICAg cnR4X2luc24gKnByZXZfaGVhZDsKIAotICBpZiAoaGVhZCA9PSB0YWlsICYmICEgSU5TTl9Q IChoZWFkKSkKLSAgICBnY2NfdW5yZWFjaGFibGUgKCk7Ci0KLSAgbl9pbnNuID0gMDsKLQog ICBwcmV2X2hlYWQgPSBQUkVWX0lOU04gKGhlYWQpOwogICBmb3IgKGluc24gPSB0YWlsOyBp bnNuICE9IHByZXZfaGVhZDsgaW5zbiA9IFBSRVZfSU5TTiAoaW5zbikpCiAgICAgewpAQCAt NzY4OCw3ICs3NzEzLDggQEAgZml4X3RpY2tfcmVhZHkgKHJ0eF9pbnNuICpuZXh0KQogewog ICBpbnQgdGljaywgZGVsYXk7CiAKLSAgaWYgKCFERUJVR19JTlNOX1AgKG5leHQpICYmICFz ZF9saXN0c19lbXB0eV9wIChuZXh0LCBTRF9MSVNUX1JFU19CQUNLKSkKKyAgaWYgKE5PTkRF QlVHX0lOU05fUCAobmV4dCkKKyAgICAgICYmICFzZF9saXN0c19lbXB0eV9wIChuZXh0LCBT RF9MSVNUX1JFU19CQUNLKSkKICAgICB7CiAgICAgICBpbnQgZnVsbF9wOwogICAgICAgc2Rf aXRlcmF0b3JfZGVmIHNkX2l0OwpkaWZmIC0tZ2l0IGEvZ2NjL3J0bC5oIGIvZ2NjL3J0bC5o CmluZGV4IGU0YjZjYzBkYmI1Li4zNGIzZjMxZDFlZSAxMDA2NDQKLS0tIGEvZ2NjL3J0bC5o CisrKyBiL2djYy9ydGwuaApAQCAtMjY5NSw4ICsyNjk1LDggQEAgZG8gewkJCQkJCQkJICAg ICAgICBcCiAvKiBEdXJpbmcgc2NoZWQsIDEgaWYgUlRYIGlzIGFuIGluc24gdGhhdCBtdXN0 IGJlIHNjaGVkdWxlZCB0b2dldGhlcgogICAgd2l0aCB0aGUgcHJlY2VkaW5nIGluc24uICAq LwogI2RlZmluZSBTQ0hFRF9HUk9VUF9QKFJUWCkJCQkJCQlcCi0gIChSVExfRkxBR19DSEVD SzQgKCJTQ0hFRF9HUk9VUF9QIiwgKFJUWCksIERFQlVHX0lOU04sIElOU04sCQlcCi0JCSAg ICBKVU1QX0lOU04sIENBTExfSU5TTiktPmluX3N0cnVjdCkKKyAgKFJUTF9GTEFHX0NIRUNL NSAoIlNDSEVEX0dST1VQX1AiLCAoUlRYKSwgREVCVUdfSU5TTiwgSU5TTiwJCVwKKwkJICAg IEpVTVBfSU5TTiwgQ0FMTF9JTlNOLCBOT1RFKS0+aW5fc3RydWN0KQogCiAvKiBGb3IgYSBT RVQgcnR4LCBTRVRfREVTVCBpcyB0aGUgcGxhY2UgdGhhdCBpcyBzZXQKICAgIGFuZCBTRVRf U1JDIGlzIHRoZSB2YWx1ZSBpdCBpcyBzZXQgdG8uICAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Nj aGVkLWViYi5jYyBiL2djYy9zY2hlZC1lYmIuY2MKaW5kZXggMTEwZmNkYmNhNGQuLmMwN2U2 NTY5NmI5IDEwMDY0NAotLS0gYS9nY2Mvc2NoZWQtZWJiLmNjCisrKyBiL2djYy9zY2hlZC1l YmIuY2MKQEAgLTQ3OCwxMiArNDc4LDEwIEBAIHNjaGVkdWxlX2ViYiAocnR4X2luc24gKmhl YWQsIHJ0eF9pbnNuICp0YWlsLCBib29sIG1vZHVsb19zY2hlZHVsaW5nKQogICAgICBhIG5v dGUgb3IgdHdvLiAgKi8KICAgd2hpbGUgKGhlYWQgIT0gdGFpbCkKICAgICB7Ci0gICAgICBp ZiAoTk9URV9QIChoZWFkKSB8fCBERUJVR19JTlNOX1AgKGhlYWQpKQorICAgICAgaWYgKExB QkVMX1AgKGhlYWQpIHx8IE5PVEVfUCAoaGVhZCkgfHwgREVCVUdfSU5TTl9QIChoZWFkKSkK IAloZWFkID0gTkVYVF9JTlNOIChoZWFkKTsKICAgICAgIGVsc2UgaWYgKE5PVEVfUCAodGFp bCkgfHwgREVCVUdfSU5TTl9QICh0YWlsKSkKIAl0YWlsID0gUFJFVl9JTlNOICh0YWlsKTsK LSAgICAgIGVsc2UgaWYgKExBQkVMX1AgKGhlYWQpKQotCWhlYWQgPSBORVhUX0lOU04gKGhl YWQpOwogICAgICAgZWxzZQogCWJyZWFrOwogICAgIH0KQEAgLTQ5NCw3ICs0OTIsOCBAQCBz Y2hlZHVsZV9lYmIgKHJ0eF9pbnNuICpoZWFkLCBydHhfaW5zbiAqdGFpbCwgYm9vbCBtb2R1 bG9fc2NoZWR1bGluZykKICAgaWYgKG5vX3JlYWxfaW5zbnNfcCAoaGVhZCwgdGFpbCkpCiAg ICAgcmV0dXJuIEJMT0NLX0ZPUl9JTlNOICh0YWlsKTsKIAotICBnY2NfYXNzZXJ0IChJTlNO X1AgKGhlYWQpICYmIElOU05fUCAodGFpbCkpOworICBnY2NfYXNzZXJ0ICgoTk9URV9QICho ZWFkKSAmJiBoZWFkID09IHRhaWwpCisJICAgICAgfHwgKElOU05fUCAoaGVhZCkgJiYgSU5T Tl9QICh0YWlsKSkpOwogCiAgIGlmICghYml0bWFwX2JpdF9wICgmZG9udF9jYWxjX2RlcHMs IGZpcnN0X2JiLT5pbmRleCkpCiAgICAgewpkaWZmIC0tZ2l0IGEvZ2NjL3NjaGVkLXJnbi5j YyBiL2djYy9zY2hlZC1yZ24uY2MKaW5kZXggZTU5NjRmNTRlYWQuLjY1ODM0OWJhMmI2IDEw MDY0NAotLS0gYS9nY2Mvc2NoZWQtcmduLmNjCisrKyBiL2djYy9zY2hlZC1yZ24uY2MKQEAg LTIyOCw2ICsyMjgsOSBAQCBzdGF0aWMgZWRnZXNldCAqcG90X3NwbGl0OwogLyogRm9yIGV2 ZXJ5IGJiLCBhIHNldCBvZiBpdHMgYW5jZXN0b3IgZWRnZXMuICAqLwogc3RhdGljIGVkZ2Vz ZXQgKmFuY2VzdG9yX2VkZ2VzOwogCisvKiBJbmRpY2F0ZSB0aGUgYmIgaXMgZW1wdHkgaW5p dGlhbGx5IGlmIHNldC4gICovCitzdGF0aWMgYml0bWFwIHJnbl9pbml0X2VtcHR5X2JiOwor CiAjZGVmaW5lIElOU05fUFJPQkFCSUxJVFkoSU5TTikgKFNSQ19QUk9CIChCTE9DS19UT19C QiAoQkxPQ0tfTlVNIChJTlNOKSkpKQogCiAvKiBTcGVjdWxhdGl2ZSBzY2hlZHVsaW5nIGZ1 bmN0aW9ucy4gICovCkBAIC0zMjE2LDYgKzMyMTksMTQgQEAgc2NoZWR1bGVfcmVnaW9uIChp bnQgcmduKQogICAgICAgLyogQ2xlYW4gdXAuICAqLwogICAgICAgaWYgKGN1cnJlbnRfbnJf YmxvY2tzID4gMSkKIAlmcmVlX3RyZ19pbmZvICgpOworCisgICAgICAvKiBUaGlzIGVtcHR5 IGJsb2NrIGlzbid0IGVtcHR5IGluaXRpYWxseSwgaXQgbWVhbnMgdGhlIG9ubHkgTk9URQor CSBpbnNpZGUgd2FzIG5vdCBjb3VudGVkIHdoZW4gY29tcHV0aW5nIHJnbl9uX2luc25zLCBz byBmaXggaXQgdXAKKwkgbm93LiAgKi8KKyAgICAgIGlmIChoZWFkID09IHRhaWwKKwkgICYm IE5PVEVfUCAoaGVhZCkKKwkgICYmICFiaXRtYXBfYml0X3AgKHJnbl9pbml0X2VtcHR5X2Ji LCBiYikpCisJcmduX25faW5zbnMrKzsKICAgICB9CiAKICAgLyogU2FuaXR5IGNoZWNrOiB2 ZXJpZnkgdGhhdCBhbGwgcmVnaW9uIGluc25zIHdlcmUgc2NoZWR1bGVkLiAgKi8KQEAgLTM0 NDgsNyArMzQ1OSwxNiBAQCBzY2hlZF9yZ25fbG9jYWxfaW5pdCAoaW50IHJnbikKIAkgICAg Y29udGludWU7CiAJICBGT1JfRUFDSF9FREdFIChlLCBlaSwgYmxvY2stPnN1Y2NzKQogCSAg ICBlLT5hdXggPSBOVUxMOwotICAgICAgICB9CisJfQorICAgIH0KKworICByZ25faW5pdF9l bXB0eV9iYiA9IEJJVE1BUF9BTExPQyAoTlVMTCk7CisgIGZvciAoYmIgPSAwOyBiYiA8IGN1 cnJlbnRfbnJfYmxvY2tzOyBiYisrKQorICAgIHsKKyAgICAgIHJ0eF9pbnNuICpoZWFkLCAq dGFpbDsKKyAgICAgIGdldF9lYmJfaGVhZF90YWlsIChFQkJfRklSU1RfQkIgKGJiKSwgRUJC X0xBU1RfQkIgKGJiKSwgJmhlYWQsICZ0YWlsKTsKKyAgICAgIGlmIChoZWFkID09IHRhaWwg JiYgTk9URV9QIChoZWFkKSkKKwliaXRtYXBfc2V0X2JpdCAocmduX2luaXRfZW1wdHlfYmIs IGJiKTsKICAgICB9CiB9CiAKQEAgLTM0NjEsNiArMzQ4MSw3IEBAIHNjaGVkX3Jnbl9sb2Nh bF9mcmVlICh2b2lkKQogICBzYml0bWFwX3ZlY3Rvcl9mcmVlIChwb3Rfc3BsaXQpOwogICBz Yml0bWFwX3ZlY3Rvcl9mcmVlIChhbmNlc3Rvcl9lZGdlcyk7CiAgIGZyZWUgKHJnbl9lZGdl cyk7CisgIEJJVE1BUF9GUkVFIChyZ25faW5pdF9lbXB0eV9iYik7CiB9CiAKIC8qIEZyZWUg ZGF0YSBjb21wdXRlZCBmb3IgdGhlIGZpbmlzaGVkIHJlZ2lvbi4gICovCi0tIAoyLjM5LjMK Cg== --------------SDrx9KX09kQLj0yARpljTEYU--