From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.2 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0A82EC6377B for ; Wed, 21 Jul 2021 23:51:47 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id AFC816121F for ; Wed, 21 Jul 2021 23:51:46 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org AFC816121F Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 3F5DB6E933; Wed, 21 Jul 2021 23:51:46 +0000 (UTC) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 338986E933; Wed, 21 Jul 2021 23:51:45 +0000 (UTC) X-IronPort-AV: E=McAfee;i="6200,9189,10052"; a="209636039" X-IronPort-AV: E=Sophos;i="5.84,259,1620716400"; d="scan'208";a="209636039" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Jul 2021 16:51:44 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.84,259,1620716400"; d="scan'208";a="415713423" Received: from fmsmsx606.amr.corp.intel.com ([10.18.126.86]) by orsmga003.jf.intel.com with ESMTP; 21 Jul 2021 16:51:43 -0700 Received: from fmsmsx611.amr.corp.intel.com (10.18.126.91) by fmsmsx606.amr.corp.intel.com (10.18.126.86) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.10; Wed, 21 Jul 2021 16:51:42 -0700 Received: from fmsedg602.ED.cps.intel.com (10.1.192.136) by fmsmsx611.amr.corp.intel.com (10.18.126.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.10 via Frontend Transport; Wed, 21 Jul 2021 16:51:42 -0700 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.171) by edgegateway.intel.com (192.55.55.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2242.10; Wed, 21 Jul 2021 16:51:42 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SfhS/9YpoCyuFGCdPB+AZRSlcrYomKS5odJ7yg9mUi9WFAfmV4IgDsl+UyZt93raYNTmHXUcton3QHbLP06/rAcXM3RM0G9qeEn5reh9nemqDzzXUbV2yqLxZJVUC5vVAb1+/FDj2S9HCiXKk99GW+z+XH98CDxtzDMMf6aP01tlQIBwJm0E/2u+DH1c2pySh92zL85OKob+Gcl6MEudxgzF2RVJi/ZYULYQ3ICsTJRNyZXl59GdhI7sXHi+UUd8v/nu/uaiHICiUKKUCXSplQSlqPQiny90qiHpwLoNkPOF+LOhKoNl3BSt+YTPj6eL1GMEcRrhVad+M+MOVAQ8Rw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=uYJUw7L0pj6qotjy8URnu8lMM6N7otHE12zzo8sAo6w=; b=UNp7/TJhHV/FWyOFyryE65HRjVN4czz6Z+tk5s/wbuUcjc8HcqZWTetTt5KcjIJeot8Ol3L5UnVoNSbLMai/zv65hvb3FyRGh4ljww5y7rAbQNUgXP0laPqy9HMQvld51muKcSmJotllRG+GZLZjNB7ulGHr/duub9tJbpDaPvSxITPh0AHReoVM9Q0TucNQnXiqLPHxmWk2g46Cu0/p/MG7GRTV6tc4r4xYVozoETjAxU3GiDioQtpCdNp3AH2pFgzmF2am+Nj4KpCYddruc39Mp9P8mmBSkskruQMm3XVhDk7fXUunNMXvsJVQrjolIOzLLw8/T08TqMWFyh3KMw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=uYJUw7L0pj6qotjy8URnu8lMM6N7otHE12zzo8sAo6w=; b=G/3I9bsU0W9ieAcCh/QBT2q4njaWvpK181sgxDX+sEo5fNVUKh4hLihShXCZ80MfPhYHM7m2OfA/g6D1MUuo6a1hiSXXhmwpQ7PR3fP7LwPxyt9NDM97rgDczIvoOs7sPiwUkbi1u+ZrESLOpL8SWeHaDufCYaUuM+Gl2nvwWt0= Authentication-Results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=intel.com; Received: from DM4PR11MB5488.namprd11.prod.outlook.com (2603:10b6:5:39d::5) by DM6PR11MB4513.namprd11.prod.outlook.com (2603:10b6:5:2a2::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.26; Wed, 21 Jul 2021 23:51:40 +0000 Received: from DM4PR11MB5488.namprd11.prod.outlook.com ([fe80::4017:e7ce:ef66:48d7]) by DM4PR11MB5488.namprd11.prod.outlook.com ([fe80::4017:e7ce:ef66:48d7%9]) with mapi id 15.20.4331.034; Wed, 21 Jul 2021 23:51:40 +0000 To: Matthew Brost References: <20210716201724.54804-1-matthew.brost@intel.com> <20210716201724.54804-7-matthew.brost@intel.com> <2a40e75b-55ce-acb8-533e-6c5c21c7910e@intel.com> <20210720040400.GA23029@sdutt-i7> From: Daniele Ceraolo Spurio Message-ID: Date: Wed, 21 Jul 2021 16:51:38 -0700 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0 Thunderbird/78.12.0 In-Reply-To: <20210720040400.GA23029@sdutt-i7> Content-Language: en-US X-ClientProxiedBy: BY5PR04CA0014.namprd04.prod.outlook.com (2603:10b6:a03:1d0::24) To DM4PR11MB5488.namprd11.prod.outlook.com (2603:10b6:5:39d::5) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from [192.168.1.65] (99.72.232.53) by BY5PR04CA0014.namprd04.prod.outlook.com (2603:10b6:a03:1d0::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21 via Frontend Transport; Wed, 21 Jul 2021 23:51:40 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: fcca59ca-4c68-4460-9d2b-08d94ca27c79 X-MS-TrafficTypeDiagnostic: DM6PR11MB4513: X-LD-Processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:10000; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: kWFeH0ko3n5FTeRZsHgyjWrkmmC983DBErI5yRsGPm+XqxIFlGySjG3GKwzb/NdbzpeAri/ZcdotbJXaEJAB9Cy+LcR7uYaa7qi3PnPVfwaVz7/yS67eKp8NFZHN5me/ddj9wRqlipTw5p5hZxeQ3UUf0B9dHd+7bi3yTL2WuGhbWicf59+XdRQuBK92RPZyTrxIFGLer78ZQIxV3DriYAsU8T4QA9ca86Uba8A3BJ+xJtW1bBcq0H7eEgmytwskMgC6wNbkP3PIsXz0BHsEiuzS4ZLL0P9D+R3rxxJ3HLcfgwx1LG2ssKirLF+j3l8H+UoWWf6ZQkQq7Xs2pDza0tjzJhaCa5G0WkfED+OB5+AoSmjN9KBo9JvCVyp8n3gwHebqJF+pcxl6YWwZV25x6ufKVdCgxHrDNrzzdWtLGjslohX85WreQ1mjH+sxCx9Fw/teIS8htF322JrpU+syy7PCNHTps3w2DSwGE3PWXZDkRKxaKTYQdQ+5t+maWaXJ7oevHYCiJsyuwwFHuWl/zyjufN49h3DQerQCBA8BeG3mEFLGjNpM9ZQc7GG86Ff6yjelsEPS2eRPNfvqnW68vMBGyCkQTPO2FmbwciukuA8KUVKNS+AQw0Ilgha1ohcea0I9O8aZZuCqaFLmWmBN26XP86HxDquQ2Qt7jzfR1d6N0dle13breDBgzpnD/LnnDLBa6XDZ0AHkSgyb6U6kYyCZJDo7NN1ud9d94GyFnY3gZDEnOfSUhYDDLwBp1LV9n2G93lzJk28Oi9G74Gzf+fW4jLOFVv1/S8+oCtw2HvE1BOCHpdzG8uUv4bTeqA5W X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM4PR11MB5488.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(346002)(39860400002)(396003)(136003)(376002)(366004)(66946007)(316002)(2616005)(107886003)(31696002)(37006003)(36756003)(26005)(5660300002)(16576012)(66476007)(38100700002)(66556008)(30864003)(83380400001)(6636002)(6486002)(86362001)(53546011)(6862004)(4326008)(450100002)(478600001)(31686004)(8676002)(956004)(2906002)(8936002)(186003)(87944003)(21314003)(45980500001)(43740500002)(309714004); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TGlzNGVZRHZlNWRpMzMxMXl4ZDNTQlpGRkpjM2ljOVFQc09oRVZkam4vR3Rq?= =?utf-8?B?Z2xqNnhIbkcvZDBlREtBUkxSQWRvSjdYb1BaMUM2SDlQS25weWl5Skd1UVcx?= =?utf-8?B?V1U5dCtUc2FMVDVERk1ZYlkwbWlWbjhkaS9kV2VSSStJVmVDcG1CLzhWR0Ri?= =?utf-8?B?V2VGQ0NKY3VvYTJ5WVFOd1hxaUJ6WE5TNWw2cjUyV1RGOFRuYkVlbEpDUHlt?= =?utf-8?B?SVRuUXhJNmNKSU96cVBPMW52TTQvVGRmNWEyWnpSVzB0TnIvZmEwZlUvSWpC?= =?utf-8?B?YlVXR21uSlVWVEZleGxPLzlZU0JCU2N5UlJhblRtRHhTT3lQQ3IvaVdQNUdp?= =?utf-8?B?Q0M1L3BNT1FNM1BlVkhBSXljcEQwY1NJQ1ord0ZwZFJid3FoWE8vOXdTdmpD?= =?utf-8?B?NS94UWk3RzgreG1KUlh4QnNzOFJKTGhadm9Wd2tucVRValc5ZHZBaDNsMGpk?= =?utf-8?B?V0NGVEpkLzZTL0x6MGRQK0N0VEJVdi9wbFlCdnhWSFI1K0duQllOU2RMcisx?= =?utf-8?B?MGdsbFBFSlpicXRMTzd1NDZyTVViSXZuY2UwZ0pWTlFWLzY4aUNJM3Roc2lW?= =?utf-8?B?Y3NTSTJOYnBxWFVKdDdJUXk4RmZWTVp5TUYwdjBqbmFaaDBXUFBOa2N2RFRG?= =?utf-8?B?NDY1K3V5M1h2eTYvTnlZaXduMUFoTEpFZGdBdDc3akFEbEdsalpPdWdkdDky?= =?utf-8?B?T0lHQUFYZ2pITFFVTSthb2hCeDFrMDVGMDF0NWZxRUFucnExNDdINEQrdHhK?= =?utf-8?B?RWxHeWRuMkxGZ2tIVmtnMGdrK1lMV2g2bHY0TE94K0k5Y0l2TGJDQmZmcWxE?= =?utf-8?B?OVN3VXJ3cG01UTRtVkYxMEh0MzVxYWlNdlgxL2RhOXBsTm9odWtSbE5OVHRj?= =?utf-8?B?QjJGTWR5Q09OcjlaRlNENFl5MW5yTEtJaFhlVjlZeVRWODBjYnVBT21WRTFO?= =?utf-8?B?QnoxR2RWcndHbCswaDVRaUdvc2JVNmJUZkN4RFJYczdrbHcwL3lLS1RzbE1H?= =?utf-8?B?a2Y3NENRelNEOXMyRzBqbUtQZkNETHZBOXV4NXRyaWdkd1JtZ3k1V0FmTlM5?= =?utf-8?B?dHVpK3NIcUpCVjZTUWdKWDJnYjVObGVJa1FVSW1jQmZSc05MK0txcUdmV2Nz?= =?utf-8?B?c2hDeE1nclFSSUhNVXlGS2NMVitiQ0poWERhaUZ4UlBEWFVibmlVQ2QyZFB0?= =?utf-8?B?bER3VzZFdk5tRnV0TmFnN1dZVC9DdVVKWjNJVW95c2Jocys5cTFSS01XTTJ6?= =?utf-8?B?QWF3UjFBWUtwaGNYTHNiWERyWU9YVTlwTklHMFRLSXNDZmZoWktOV0lEbjlK?= =?utf-8?B?ODV6dCsweGViLy9ZN3Y5dktpb05DWVFiSHQwa1lMOUQxbmJoQmxmQWlrcnRl?= =?utf-8?B?d2NESVdmMUtjU1lLdjBjK21jREZPTi9kVGlGMzVJMXlQNlBnQ0NITVN6V0V6?= =?utf-8?B?OXNDbUNuN2FmdEk4QWduTlkvR2NVRHc4YVlSR3JhRUEvZ2NkRmgzQy8xdWMv?= =?utf-8?B?ejBIKzAxOTAwNjVTVnErMEs0TmhEOTZwUkxuV2hhbGZ3NzFaUWk5R0pvYVhT?= =?utf-8?B?VWcxYXRWS1hlVm5GVFVoQ0ZxWGNLKyt1MW5ZbFF6cnlwOWVNR3pDZExrUTEz?= =?utf-8?B?aE9XY1A3M2l0alFFNWhmb0F6bDd4dzY2cmwwdnQzVGorTkVaRjFhdGxXR3Zu?= =?utf-8?B?Wnc0RkFvNTFsVkQ3UGRvUXAyNWMxM1JOalFNWmVtbHNONGZiRmhIbklyeVB3?= =?utf-8?Q?++e8hAMLbxmukuPoGTRUMtYpThQ0f9DjqJwNlYO?= X-MS-Exchange-CrossTenant-Network-Message-Id: fcca59ca-4c68-4460-9d2b-08d94ca27c79 X-MS-Exchange-CrossTenant-AuthSource: DM4PR11MB5488.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jul 2021 23:51:40.7777 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 83OhntIy83lxBbqZ63H5TAZNypzIieViCzVsl2kJsr/2FO7PQNBdw29g/Ax35pHAd7Vmum1YSG0FRFi0cWjsUAdQ6ea4hSpCxw14fJ0ke5k= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR11MB4513 X-OriginatorOrg: intel.com Subject: Re: [Intel-gfx] [PATCH 06/51] drm/i915/guc: Implement GuC context operations for new inteface X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" CgpPbiA3LzE5LzIwMjEgOTowNCBQTSwgTWF0dGhldyBCcm9zdCB3cm90ZToKPiBPbiBNb24sIEp1 bCAxOSwgMjAyMSBhdCAwNTo1MTo0NlBNIC0wNzAwLCBEYW5pZWxlIENlcmFvbG8gU3B1cmlvIHdy b3RlOgo+Pgo+PiBPbiA3LzE2LzIwMjEgMToxNiBQTSwgTWF0dGhldyBCcm9zdCB3cm90ZToKPj4+ IEltcGxlbWVudCBHdUMgY29udGV4dCBvcGVyYXRpb25zIHdoaWNoIGluY2x1ZGVzIEd1QyBzcGVj aWZpYyBvcGVyYXRpb25zCj4+PiBhbGxvYywgcGluLCB1bnBpbiwgYW5kIGRlc3Ryb3kuCj4+Pgo+ Pj4gdjI6Cj4+PiAgICAoRGFuaWVsIFZldHRlcikKPj4+ICAgICAtIFVzZSBtc2xlZXBfaW50ZXJy dXB0aWJsZSByYXRoZXIgdGhhbiBjb25kX3Jlc2NoZWQgaW4gYnVzeSBsb29wCj4+PiAgICAoTWlj aGFsKQo+Pj4gICAgIC0gUmVtb3ZlIEMrKyBzdHlsZSBjb21tZW50Cj4+Pgo+Pj4gU2lnbmVkLW9m Zi1ieTogSm9obiBIYXJyaXNvbiA8Sm9obi5DLkhhcnJpc29uQEludGVsLmNvbT4KPj4+IFNpZ25l ZC1vZmYtYnk6IE1hdHRoZXcgQnJvc3QgPG1hdHRoZXcuYnJvc3RAaW50ZWwuY29tPgo+Pj4gLS0t Cj4+PiAgICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9jb250ZXh0LmMgICAgICAgfCAg IDUgKwo+Pj4gICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfY29udGV4dF90eXBlcy5o IHwgIDIyICstCj4+PiAgICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmNfcmVnLmgg ICAgICAgfCAgIDEgLQo+Pj4gICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3Vj LmggICAgICAgIHwgIDQwICsrCj4+PiAgICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRl bF9ndWNfY3QuYyAgICAgfCAgIDQgKwo+Pj4gICAgLi4uL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRl bF9ndWNfc3VibWlzc2lvbi5jIHwgNjY2ICsrKysrKysrKysrKysrKystLQo+Pj4gICAgZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCAgICAgICAgICAgICAgIHwgICAxICsKPj4+ICAgIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jICAgICAgICAgICB8ICAgMSArCj4+PiAg ICA4IGZpbGVzIGNoYW5nZWQsIDY4NSBpbnNlcnRpb25zKCspLCA1NSBkZWxldGlvbnMoLSkKPj4+ Cj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfY29udGV4dC5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfY29udGV4dC5jCj4+PiBpbmRleCBiZDYz ODEzYzhhODAuLjMyZmQ2NjQ3MTU0YiAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L2ludGVsX2NvbnRleHQuYwo+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv aW50ZWxfY29udGV4dC5jCj4+PiBAQCAtMzg0LDYgKzM4NCwxMSBAQCBpbnRlbF9jb250ZXh0X2lu aXQoc3RydWN0IGludGVsX2NvbnRleHQgKmNlLCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUpCj4+PiAgICAJbXV0ZXhfaW5pdCgmY2UtPnBpbl9tdXRleCk7Cj4+PiArCXNwaW5fbG9ja19p bml0KCZjZS0+Z3VjX3N0YXRlLmxvY2spOwo+Pj4gKwo+Pj4gKwljZS0+Z3VjX2lkID0gR1VDX0lO VkFMSURfTFJDX0lEOwo+Pj4gKwlJTklUX0xJU1RfSEVBRCgmY2UtPmd1Y19pZF9saW5rKTsKPj4+ ICsKPj4+ICAgIAlpOTE1X2FjdGl2ZV9pbml0KCZjZS0+YWN0aXZlLAo+Pj4gICAgCQkJIF9faW50 ZWxfY29udGV4dF9hY3RpdmUsIF9faW50ZWxfY29udGV4dF9yZXRpcmUsIDApOwo+Pj4gICAgfQo+ Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2NvbnRleHRfdHlw ZXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2NvbnRleHRfdHlwZXMuaAo+Pj4g aW5kZXggNmQ5OTYzMWQxOWI5Li42MDZjNDgwYWVjMjYgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9jb250ZXh0X3R5cGVzLmgKPj4+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L2ludGVsX2NvbnRleHRfdHlwZXMuaAo+Pj4gQEAgLTk2LDYgKzk2LDcg QEAgc3RydWN0IGludGVsX2NvbnRleHQgewo+Pj4gICAgI2RlZmluZSBDT05URVhUX0JBTk5FRAkJ CTYKPj4+ICAgICNkZWZpbmUgQ09OVEVYVF9GT1JDRV9TSU5HTEVfU1VCTUlTU0lPTgk3Cj4+PiAg ICAjZGVmaW5lIENPTlRFWFRfTk9QUkVFTVBUCQk4Cj4+PiArI2RlZmluZSBDT05URVhUX0xSQ0Ff RElSVFkJCTkKPj4+ICAgIAlzdHJ1Y3Qgewo+Pj4gICAgCQl1NjQgdGltZW91dF91czsKPj4+IEBA IC0xMzgsMTQgKzEzOSwyOSBAQCBzdHJ1Y3QgaW50ZWxfY29udGV4dCB7Cj4+PiAgICAJdTggd2Ff YmJfcGFnZTsgLyogaWYgc2V0LCBwYWdlIG51bSByZXNlcnZlZCBmb3IgY29udGV4dCB3b3JrYXJv dW5kcyAqLwo+Pj4gKwlzdHJ1Y3Qgewo+Pj4gKwkJLyoqIGxvY2s6IHByb3RlY3RzIGV2ZXJ5dGhp bmcgaW4gZ3VjX3N0YXRlICovCj4+PiArCQlzcGlubG9ja190IGxvY2s7Cj4+PiArCQkvKioKPj4+ ICsJCSAqIHNjaGVkX3N0YXRlOiBzY2hlZHVsaW5nIHN0YXRlIG9mIHRoaXMgY29udGV4dCB1c2lu ZyBHdUMKPj4+ICsJCSAqIHN1Ym1pc3Npb24KPj4+ICsJCSAqLwo+Pj4gKwkJdTggc2NoZWRfc3Rh dGU7Cj4+PiArCX0gZ3VjX3N0YXRlOwo+Pj4gKwo+Pj4gICAgCS8qIEd1QyBzY2hlZHVsaW5nIHN0 YXRlIGZsYWdzIHRoYXQgZG8gbm90IHJlcXVpcmUgYSBsb2NrLiAqLwo+Pj4gICAgCWF0b21pY190 IGd1Y19zY2hlZF9zdGF0ZV9ub19sb2NrOwo+Pj4gKwkvKiBHdUMgTFJDIGRlc2NyaXB0b3IgSUQg Ki8KPj4+ICsJdTE2IGd1Y19pZDsKPj4+ICsKPj4+ICsJLyogR3VDIExSQyBkZXNjcmlwdG9yIHJl ZmVyZW5jZSBjb3VudCAqLwo+Pj4gKwlhdG9taWNfdCBndWNfaWRfcmVmOwo+Pj4gKwo+Pj4gICAg CS8qCj4+PiAtCSAqIEd1QyBMUkMgZGVzY3JpcHRvciBJRCAtIE5vdCBhc3NpZ25lZCBpbiB0aGlz IHBhdGNoIGJ1dCBmdXR1cmUgcGF0Y2hlcwo+Pj4gLQkgKiBpbiB0aGUgc2VyaWVzIHdpbGwuCj4+ PiArCSAqIEd1QyBJRCBsaW5rIC0gaW4gbGlzdCB3aGVuIHVucGlubmVkIGJ1dCBndWNfaWQgc3Rp bGwgdmFsaWQgaW4gR3VDCj4+PiAgICAJICovCj4+PiAtCXUxNiBndWNfaWQ7Cj4+PiArCXN0cnVj dCBsaXN0X2hlYWQgZ3VjX2lkX2xpbms7Cj4+PiAgICB9Owo+Pj4gICAgI2VuZGlmIC8qIF9fSU5U RUxfQ09OVEVYVF9UWVBFU19fICovCj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvaW50ZWxfbHJjX3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJj X3JlZy5oCj4+PiBpbmRleCA0MWU1MzUwYTdhMDUuLjQ5ZDQ4NTdhZDliNyAxMDA2NDQKPj4+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xyY19yZWcuaAo+Pj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjX3JlZy5oCj4+PiBAQCAtODcsNyArODcsNiBA QAo+Pj4gICAgI2RlZmluZSBHRU4xMV9DU0JfV1JJVEVfUFRSX01BU0sJKEdFTjExX0NTQl9QVFJf TUFTSyA8PCAwKQo+Pj4gICAgI2RlZmluZSBNQVhfQ09OVEVYVF9IV19JRAkoMSA8PCAyMSkgLyog ZXhjbHVzaXZlICovCj4+PiAtI2RlZmluZSBNQVhfR1VDX0NPTlRFWFRfSFdfSUQJKDEgPDwgMjAp IC8qIGV4Y2x1c2l2ZSAqLwo+Pj4gICAgI2RlZmluZSBHRU4xMV9NQVhfQ09OVEVYVF9IV19JRAko MSA8PCAxMSkgLyogZXhjbHVzaXZlICovCj4+PiAgICAvKiBpbiBHZW4xMiBJRCAweDdGRiBpcyBy ZXNlcnZlZCB0byBpbmRpY2F0ZSBpZGxlICovCj4+PiAgICAjZGVmaW5lIEdFTjEyX01BWF9DT05U RVhUX0hXX0lECShHRU4xMV9NQVhfQ09OVEVYVF9IV19JRCAtIDEpCj4+PiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjLmggYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9ndC91Yy9pbnRlbF9ndWMuaAo+Pj4gaW5kZXggOGM3YjkyZjY5OWYxLi4zMDc3M2NkNjk5 ZjUgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWMu aAo+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjLmgKPj4+IEBA IC03LDYgKzcsNyBAQAo+Pj4gICAgI2RlZmluZSBfSU5URUxfR1VDX0hfCj4+PiAgICAjaW5jbHVk ZSA8bGludXgveGFycmF5Lmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Cj4+PiAgICAj aW5jbHVkZSAiaW50ZWxfdW5jb3JlLmgiCj4+PiAgICAjaW5jbHVkZSAiaW50ZWxfZ3VjX2Z3Lmgi Cj4+PiBAQCAtNDQsNiArNDUsMTQgQEAgc3RydWN0IGludGVsX2d1YyB7Cj4+PiAgICAJCXZvaWQg KCpkaXNhYmxlKShzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpOwo+Pj4gICAgCX0gaW50ZXJydXB0czsK Pj4+ICsJLyoKPj4+ICsJICogY29udGV4dHNfbG9jayBwcm90ZWN0cyB0aGUgcG9vbCBvZiBmcmVl IGd1YyBpZHMgYW5kIGEgbGlua2VkIGxpc3Qgb2YKPj4+ICsJICogZ3VjIGlkcyBhdmFpbGFibGUg dG8gYmUgc3RvbGVuCj4+PiArCSAqLwo+Pj4gKwlzcGlubG9ja190IGNvbnRleHRzX2xvY2s7Cj4+ PiArCXN0cnVjdCBpZGEgZ3VjX2lkczsKPj4+ICsJc3RydWN0IGxpc3RfaGVhZCBndWNfaWRfbGlz dDsKPj4+ICsKPj4+ICAgIAlib29sIHN1Ym1pc3Npb25fc2VsZWN0ZWQ7Cj4+PiAgICAJc3RydWN0 IGk5MTVfdm1hICphZHNfdm1hOwo+Pj4gQEAgLTEwMSw2ICsxMTAsMzQgQEAgaW50ZWxfZ3VjX3Nl bmRfYW5kX3JlY2VpdmUoc3RydWN0IGludGVsX2d1YyAqZ3VjLCBjb25zdCB1MzIgKmFjdGlvbiwg dTMyIGxlbiwKPj4+ICAgIAkJCQkgcmVzcG9uc2VfYnVmLCByZXNwb25zZV9idWZfc2l6ZSwgMCk7 Cj4+PiAgICB9Cj4+PiArc3RhdGljIGlubGluZSBpbnQgaW50ZWxfZ3VjX3NlbmRfYnVzeV9sb29w KHN0cnVjdCBpbnRlbF9ndWMqIGd1YywKPj4+ICsJCQkJCSAgIGNvbnN0IHUzMiAqYWN0aW9uLAo+ Pj4gKwkJCQkJICAgdTMyIGxlbiwKPj4+ICsJCQkJCSAgIGJvb2wgbG9vcCkKPj4+ICt7Cj4+PiAr CWludCBlcnI7Cj4+PiArCXVuc2lnbmVkIGludCBzbGVlcF9wZXJpb2RfbXMgPSAxOwo+Pj4gKwli b29sIG5vdF9hdG9taWMgPSAhaW5fYXRvbWljKCkgJiYgIWlycXNfZGlzYWJsZWQoKTsKPj4+ICsK Pj4+ICsJLyogTm8gc2xlZXBpbmcgd2l0aCBzcGluIGxvY2tzLCBqdXN0IGJ1c3kgbG9vcCAqLwo+ Pj4gKwltaWdodF9zbGVlcF9pZihsb29wICYmIG5vdF9hdG9taWMpOwo+Pj4gKwo+Pj4gK3JldHJ5 Ogo+Pj4gKwllcnIgPSBpbnRlbF9ndWNfc2VuZF9uYihndWMsIGFjdGlvbiwgbGVuKTsKPj4+ICsJ aWYgKHVubGlrZWx5KGVyciA9PSAtRUJVU1kgJiYgbG9vcCkpIHsKPj4+ICsJCWlmIChsaWtlbHko bm90X2F0b21pYykpIHsKPj4+ICsJCQlpZiAobXNsZWVwX2ludGVycnVwdGlibGUoc2xlZXBfcGVy aW9kX21zKSkKPj4+ICsJCQkJcmV0dXJuIC1FSU5UUjsKPj4+ICsJCQlzbGVlcF9wZXJpb2RfbXMg PSBzbGVlcF9wZXJpb2RfbXMgPDwgMTsKPj4+ICsJCX0gZWxzZSB7Cj4+PiArCQkJY3B1X3JlbGF4 KCk7Cj4+IFBvdGVudGlhbGx5IHNvbWV0aGluZyB3ZSBjYW4gY2hhbmdlIGxhdGVyLCBidXQgaWYg d2UncmUgaW4gYXRvbWljIGNvbnRleHQgd2UKPj4gY2FuJ3Qga2VlcCBsb29waW5nIHdpdGhvdXQg YSB0aW1lb3V0IHdoaWxlIHdlIGdldCAtRUJVU1ksIHdlIG5lZWQgdG8gYmFpbAo+PiBvdXQgZWFy bHkuCj4+Cj4gRXZlbnR1YWxseSBpbnRlbF9ndWNfc2VuZF9uYiB3aWxsIHBvcCB3aXRoIGEgZGlm ZmVyZW50IHJldHVybiBjb2RlIGFmdGVyCj4gMSBzZWNvbmQgSSB0aGluayBpZiB0aGUgR3VDIGlz IGh1bmcuCgpJIGtub3csIHRoZSBwb2ludCBpcyB0aGF0IDEgc2Vjb25kIGlzIHRvbyBsb25nIGlu IGF0b21pYyBjb250ZXh0LiBUaGlzIApoYXMgdG8gZWl0aGVyIGNvbXBsZXRlIHF1aWNrIGluIGF0 b21pYyBvciBiZSBmb3JrZWQgb2ZmIHRvIGEgd29ya2VyLiBDYW4gCmZpeCBhcyBhIGZvbGxvdyB1 cC4KCkRhbmllbGUKCj4gICAKPj4+ICsJCX0KPj4+ICsJCWdvdG8gcmV0cnk7Cj4+PiArCX0KPj4+ ICsKPj4+ICsJcmV0dXJuIGVycjsKPj4+ICt9Cj4+PiArCj4+PiAgICBzdGF0aWMgaW5saW5lIHZv aWQgaW50ZWxfZ3VjX3RvX2hvc3RfZXZlbnRfaGFuZGxlcihzdHJ1Y3QgaW50ZWxfZ3VjICpndWMp Cj4+PiAgICB7Cj4+PiAgICAJaW50ZWxfZ3VjX2N0X2V2ZW50X2hhbmRsZXIoJmd1Yy0+Y3QpOwo+ Pj4gQEAgLTIwMiw2ICsyMzksOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaW50ZWxfZ3VjX2Rpc2Fi bGVfbXNnKHN0cnVjdCBpbnRlbF9ndWMgKmd1YywgdTMyIG1hc2spCj4+PiAgICBpbnQgaW50ZWxf Z3VjX3Jlc2V0X2VuZ2luZShzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsCj4+PiAgICAJCQkgICBzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwo+Pj4gK2ludCBpbnRlbF9ndWNfZGVyZWdpc3Rl cl9kb25lX3Byb2Nlc3NfbXNnKHN0cnVjdCBpbnRlbF9ndWMgKmd1YywKPj4+ICsJCQkJCSAgY29u c3QgdTMyICptc2csIHUzMiBsZW4pOwo+Pj4gKwo+Pj4gICAgdm9pZCBpbnRlbF9ndWNfbG9hZF9z dGF0dXMoc3RydWN0IGludGVsX2d1YyAqZ3VjLCBzdHJ1Y3QgZHJtX3ByaW50ZXIgKnApOwo+Pj4g ICAgI2VuZGlmCj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50 ZWxfZ3VjX2N0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY3QuYwo+ Pj4gaW5kZXggODNlYzYwZWEzZjg5Li4yOGZmODJjNWJlNDUgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY3QuYwo+Pj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2N0LmMKPj4+IEBAIC05MjgsNiArOTI4LDEwIEBA IHN0YXRpYyBpbnQgY3RfcHJvY2Vzc19yZXF1ZXN0KHN0cnVjdCBpbnRlbF9ndWNfY3QgKmN0LCBz dHJ1Y3QgY3RfaW5jb21pbmdfbXNnICpyCj4+PiAgICAJY2FzZSBJTlRFTF9HVUNfQUNUSU9OX0RF RkFVTFQ6Cj4+PiAgICAJCXJldCA9IGludGVsX2d1Y190b19ob3N0X3Byb2Nlc3NfcmVjdl9tc2co Z3VjLCBwYXlsb2FkLCBsZW4pOwo+Pj4gICAgCQlicmVhazsKPj4+ICsJY2FzZSBJTlRFTF9HVUNf QUNUSU9OX0RFUkVHSVNURVJfQ09OVEVYVF9ET05FOgo+Pj4gKwkJcmV0ID0gaW50ZWxfZ3VjX2Rl cmVnaXN0ZXJfZG9uZV9wcm9jZXNzX21zZyhndWMsIHBheWxvYWQsCj4+PiArCQkJCQkJCSAgICBs ZW4pOwo+Pj4gKwkJYnJlYWs7Cj4+PiAgICAJZGVmYXVsdDoKPj4+ICAgIAkJcmV0ID0gLUVPUE5P VFNVUFA7Cj4+PiAgICAJCWJyZWFrOwo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L3VjL2ludGVsX2d1Y19zdWJtaXNzaW9uLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC91Yy9pbnRlbF9ndWNfc3VibWlzc2lvbi5jCj4+PiBpbmRleCA1M2I0YTVlYjRhODUuLmE0N2Iz ODEzYjRkMCAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVs X2d1Y19zdWJtaXNzaW9uLmMKPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2lu dGVsX2d1Y19zdWJtaXNzaW9uLmMKPj4+IEBAIC0xMyw3ICsxMyw5IEBACj4+PiAgICAjaW5jbHVk ZSAiZ3QvaW50ZWxfZ3QuaCIKPj4+ICAgICNpbmNsdWRlICJndC9pbnRlbF9ndF9pcnEuaCIKPj4+ ICAgICNpbmNsdWRlICJndC9pbnRlbF9ndF9wbS5oIgo+Pj4gKyNpbmNsdWRlICJndC9pbnRlbF9n dF9yZXF1ZXN0cy5oIgo+Pj4gICAgI2luY2x1ZGUgImd0L2ludGVsX2xyYy5oIgo+Pj4gKyNpbmNs dWRlICJndC9pbnRlbF9scmNfcmVnLmgiCj4+PiAgICAjaW5jbHVkZSAiZ3QvaW50ZWxfbW9jcy5o Igo+Pj4gICAgI2luY2x1ZGUgImd0L2ludGVsX3JpbmcuaCIKPj4+IEBAIC04NSw2ICs4Nyw3MyBA QCBzdGF0aWMgaW5saW5lIHZvaWQgY2xyX2NvbnRleHRfZW5hYmxlZChzdHJ1Y3QgaW50ZWxfY29u dGV4dCAqY2UpCj4+PiAgICAJCSAgICZjZS0+Z3VjX3NjaGVkX3N0YXRlX25vX2xvY2spOwo+Pj4g ICAgfQo+Pj4gKy8qCj4+PiArICogQmVsb3cgaXMgYSBzZXQgb2YgZnVuY3Rpb25zIHdoaWNoIGNv bnRyb2wgdGhlIEd1QyBzY2hlZHVsaW5nIHN0YXRlIHdoaWNoCj4+PiArICogcmVxdWlyZSBhIGxv Y2ssIGFzaWRlIGZyb20gdGhlIHNwZWNpYWwgY2FzZSB3aGVyZSB0aGUgZnVuY3Rpb25zIGFyZSBj YWxsZWQKPj4+ICsgKiBmcm9tIGd1Y19scmNfZGVzY19waW4oKS4gSW4gdGhhdCBjYXNlIGl0IGlz bid0IHBvc3NpYmxlIGZvciBhbnkgb3RoZXIgY29kZQo+Pj4gKyAqIHBhdGggdG8gYmUgZXhlY3V0 aW5nIG9uIHRoZSBjb250ZXh0Lgo+Pj4gKyAqLwo+PiBJcyB0aGVyZSBhIHJlYXNvbiB0byBhdm9p ZCB0YWtpbmcgdGhlIGxvY2sgaW4gZ3VjX2xyY19kZXNjX3BpbiwgZXZlbiBpZiBpdAo+PiBpc24n dCBzdHJpY3RseSBuZWVkZWQ/IEknZCBwcmVmZXIgdG8gYXZvaWQgdGhlIGFzeW1tZXRyeSBpbiB0 aGUgbG9ja2luZwo+IElmIHRoaXMgY29kZSBpcyBjYWxsZWQgZnJvbSByZWxlYXNpbmcgYSBmZW5j ZSBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgaXMKPiBjcmVhdGVkLiBPbmNlIHdlIG1vdmUgdGhlIERS TSBzY2hlZHVsZXIgdGhlIGxvY2tpbmcgYmVjb21lcyB3YXkgZWFzaWVyCj4gYW5kIHdlIGNsZWFu IHRoaXMgdXAgdGhlbi4gV2UgYWxyZWFkeSBoYXZlIHRhc2sgZm9yIGxvY2tpbmcgY2xlYW4gdXAu Cj4KPj4gc2NoZW1lIGlmIHBvc3NpYmxlLCBhcyB0aGF0IG1pZ2h0IGNhc2UgdHJvdWJsZSBpZiB0 aGluZyBjaGFuZ2UgaW4gdGhlCj4+IGZ1dHVyZS4KPiBBZ2FpbiB0aGlzIGlzIHRlbXBvcmFyeSBj b2RlLCBzbyBJIHRoaW5rIHdlIGNhbiBsaXZlIHdpdGggdGhpcyB1bnRpbCB0aGUKPiBEUk0gc2No ZWR1bGVyIGxhbmRzLgo+Cj4+PiArI2RlZmluZSBTQ0hFRF9TVEFURV9XQUlUX0ZPUl9ERVJFR0lT VEVSX1RPX1JFR0lTVEVSCUJJVCgwKQo+Pj4gKyNkZWZpbmUgU0NIRURfU1RBVEVfREVTVFJPWUVE CQkJCUJJVCgxKQo+Pj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NjaGVkX3N0YXRlKHN0cnVj dCBpbnRlbF9jb250ZXh0ICpjZSkKPj4+ICt7Cj4+PiArCS8qIE9ubHkgc2hvdWxkIGJlIGNhbGxl ZCBmcm9tIGd1Y19scmNfZGVzY19waW4oKSAqLwo+Pj4gKwlhdG9taWNfc2V0KCZjZS0+Z3VjX3Nj aGVkX3N0YXRlX25vX2xvY2ssIDApOwo+Pj4gKwljZS0+Z3VjX3N0YXRlLnNjaGVkX3N0YXRlID0g MDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGlubGluZSBib29sCj4+PiArY29udGV4dF93YWl0 X2Zvcl9kZXJlZ2lzdGVyX3RvX3JlZ2lzdGVyKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSkKPj4+ ICt7Cj4+PiArCXJldHVybiAoY2UtPmd1Y19zdGF0ZS5zY2hlZF9zdGF0ZSAmCj4+PiArCQlTQ0hF RF9TVEFURV9XQUlUX0ZPUl9ERVJFR0lTVEVSX1RPX1JFR0lTVEVSKTsKPj4gTm8gbmVlZCBmb3Ig KCkuIEJlbG93IGFzIHdlbGwuCj4+Cj4gWWVwLgo+Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBp bmxpbmUgdm9pZAo+Pj4gK3NldF9jb250ZXh0X3dhaXRfZm9yX2RlcmVnaXN0ZXJfdG9fcmVnaXN0 ZXIoc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQo+Pj4gK3sKPj4+ICsJLyogT25seSBzaG91bGQg YmUgY2FsbGVkIGZyb20gZ3VjX2xyY19kZXNjX3BpbigpICovCj4+PiArCWNlLT5ndWNfc3RhdGUu c2NoZWRfc3RhdGUgfD0KPj4+ICsJCVNDSEVEX1NUQVRFX1dBSVRfRk9SX0RFUkVHSVNURVJfVE9f UkVHSVNURVI7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbmxpbmUgdm9pZAo+Pj4gK2Nscl9j b250ZXh0X3dhaXRfZm9yX2RlcmVnaXN0ZXJfdG9fcmVnaXN0ZXIoc3RydWN0IGludGVsX2NvbnRl eHQgKmNlKQo+Pj4gK3sKPj4+ICsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmY2UtPmd1Y19zdGF0ZS5s b2NrKTsKPj4+ICsJY2UtPmd1Y19zdGF0ZS5zY2hlZF9zdGF0ZSA9Cj4+PiArCQkoY2UtPmd1Y19z dGF0ZS5zY2hlZF9zdGF0ZSAmCj4+PiArCQkgflNDSEVEX1NUQVRFX1dBSVRfRk9SX0RFUkVHSVNU RVJfVE9fUkVHSVNURVIpOwo+PiBuaXQ6IGNhbiBhbHNvIHVzZQo+Pgo+PiBjZS0+Z3VjX3N0YXRl LnNjaGVkX3N0YXRlICY9Cj4+IAl+U0NIRURfU1RBVEVfV0FJVF9GT1JfREVSRUdJU1RFUl9UT19S RUdJU1RFUgo+Pgo+IFllcC4KPiAgIAo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW5saW5lIGJv b2wKPj4+ICtjb250ZXh0X2Rlc3Ryb3llZChzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpCj4+PiAr ewo+Pj4gKwlyZXR1cm4gKGNlLT5ndWNfc3RhdGUuc2NoZWRfc3RhdGUgJiBTQ0hFRF9TVEFURV9E RVNUUk9ZRUQpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW5saW5lIHZvaWQKPj4+ICtzZXRf Y29udGV4dF9kZXN0cm95ZWQoc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQo+Pj4gK3sKPj4+ICsJ bG9ja2RlcF9hc3NlcnRfaGVsZCgmY2UtPmd1Y19zdGF0ZS5sb2NrKTsKPj4+ICsJY2UtPmd1Y19z dGF0ZS5zY2hlZF9zdGF0ZSB8PSBTQ0hFRF9TVEFURV9ERVNUUk9ZRUQ7Cj4+PiArfQo+Pj4gKwo+ Pj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBjb250ZXh0X2d1Y19pZF9pbnZhbGlkKHN0cnVjdCBpbnRl bF9jb250ZXh0ICpjZSkKPj4+ICt7Cj4+PiArCXJldHVybiAoY2UtPmd1Y19pZCA9PSBHVUNfSU5W QUxJRF9MUkNfSUQpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2Nv bnRleHRfZ3VjX2lkX2ludmFsaWQoc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQo+Pj4gK3sKPj4+ ICsJY2UtPmd1Y19pZCA9IEdVQ19JTlZBTElEX0xSQ19JRDsKPj4+ICt9Cj4+PiArCj4+PiArc3Rh dGljIGlubGluZSBzdHJ1Y3QgaW50ZWxfZ3VjICpjZV90b19ndWMoc3RydWN0IGludGVsX2NvbnRl eHQgKmNlKQo+Pj4gK3sKPj4+ICsJcmV0dXJuICZjZS0+ZW5naW5lLT5ndC0+dWMuZ3VjOwo+Pj4g K30KPj4+ICsKPj4+ICAgIHN0YXRpYyBpbmxpbmUgc3RydWN0IGk5MTVfcHJpb2xpc3QgKnRvX3By aW9saXN0KHN0cnVjdCByYl9ub2RlICpyYikKPj4+ICAgIHsKPj4+ICAgIAlyZXR1cm4gcmJfZW50 cnkocmIsIHN0cnVjdCBpOTE1X3ByaW9saXN0LCBub2RlKTsKPj4+IEBAIC0xNTUsNiArMjI0LDkg QEAgc3RhdGljIGludCBndWNfYWRkX3JlcXVlc3Qoc3RydWN0IGludGVsX2d1YyAqZ3VjLCBzdHJ1 Y3QgaTkxNV9yZXF1ZXN0ICpycSkKPj4+ICAgIAlpbnQgbGVuID0gMDsKPj4+ICAgIAlib29sIGVu YWJsZWQgPSBjb250ZXh0X2VuYWJsZWQoY2UpOwo+Pj4gKwlHRU1fQlVHX09OKCFhdG9taWNfcmVh ZCgmY2UtPmd1Y19pZF9yZWYpKTsKPj4+ICsJR0VNX0JVR19PTihjb250ZXh0X2d1Y19pZF9pbnZh bGlkKGNlKSk7Cj4+PiArCj4+PiAgICAJaWYgKCFlbmFibGVkKSB7Cj4+PiAgICAJCWFjdGlvblts ZW4rK10gPSBJTlRFTF9HVUNfQUNUSU9OX1NDSEVEX0NPTlRFWFRfTU9ERV9TRVQ7Cj4+PiAgICAJ CWFjdGlvbltsZW4rK10gPSBjZS0+Z3VjX2lkOwo+Pj4gQEAgLTQxNyw2ICs0ODksMTAgQEAgaW50 IGludGVsX2d1Y19zdWJtaXNzaW9uX2luaXQoc3RydWN0IGludGVsX2d1YyAqZ3VjKQo+Pj4gICAg CXhhX2luaXRfZmxhZ3MoJmd1Yy0+Y29udGV4dF9sb29rdXAsIFhBX0ZMQUdTX0xPQ0tfSVJRKTsK Pj4+ICsJc3Bpbl9sb2NrX2luaXQoJmd1Yy0+Y29udGV4dHNfbG9jayk7Cj4+PiArCUlOSVRfTElT VF9IRUFEKCZndWMtPmd1Y19pZF9saXN0KTsKPj4+ICsJaWRhX2luaXQoJmd1Yy0+Z3VjX2lkcyk7 Cj4+PiArCj4+PiAgICAJcmV0dXJuIDA7Cj4+PiAgICB9Cj4+PiBAQCAtNDI5LDkgKzUwNSwzMDMg QEAgdm9pZCBpbnRlbF9ndWNfc3VibWlzc2lvbl9maW5pKHN0cnVjdCBpbnRlbF9ndWMgKmd1YykK Pj4+ICAgIAlpOTE1X3NjaGVkX2VuZ2luZV9wdXQoZ3VjLT5zY2hlZF9lbmdpbmUpOwo+Pj4gICAg fQo+Pj4gLXN0YXRpYyBpbnQgZ3VjX2NvbnRleHRfYWxsb2Moc3RydWN0IGludGVsX2NvbnRleHQg KmNlKQo+Pj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBxdWV1ZV9yZXF1ZXN0KHN0cnVjdCBpOTE1X3Nj aGVkX2VuZ2luZSAqc2NoZWRfZW5naW5lLAo+Pj4gKwkJCQkgc3RydWN0IGk5MTVfcmVxdWVzdCAq cnEsCj4+PiArCQkJCSBpbnQgcHJpbykKPj4+ICAgIHsKPj4+IC0JcmV0dXJuIGxyY19hbGxvYyhj ZSwgY2UtPmVuZ2luZSk7Cj4+PiArCUdFTV9CVUdfT04oIWxpc3RfZW1wdHkoJnJxLT5zY2hlZC5s aW5rKSk7Cj4+PiArCWxpc3RfYWRkX3RhaWwoJnJxLT5zY2hlZC5saW5rLAo+Pj4gKwkJICAgICAg aTkxNV9zY2hlZF9sb29rdXBfcHJpb2xpc3Qoc2NoZWRfZW5naW5lLCBwcmlvKSk7Cj4+PiArCXNl dF9iaXQoSTkxNV9GRU5DRV9GTEFHX1BRVUVVRSwgJnJxLT5mZW5jZS5mbGFncyk7Cj4+PiArfQo+ Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgZ3VjX2J5cGFzc190YXNrbGV0X3N1Ym1pdChzdHJ1Y3QgaW50 ZWxfZ3VjICpndWMsCj4+PiArCQkJCSAgICAgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCj4+PiAr ewo+Pj4gKwlpbnQgcmV0Owo+Pj4gKwo+Pj4gKwlfX2k5MTVfcmVxdWVzdF9zdWJtaXQocnEpOwo+ Pj4gKwo+Pj4gKwl0cmFjZV9pOTE1X3JlcXVlc3RfaW4ocnEsIDApOwo+Pj4gKwo+Pj4gKwlndWNf c2V0X2xyY190YWlsKHJxKTsKPj4+ICsJcmV0ID0gZ3VjX2FkZF9yZXF1ZXN0KGd1YywgcnEpOwo+ Pj4gKwlpZiAocmV0ID09IC1FQlVTWSkKPj4+ICsJCWd1Yy0+c3RhbGxlZF9yZXF1ZXN0ID0gcnE7 Cj4+PiArCj4+PiArCXJldHVybiByZXQ7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIGd1 Y19zdWJtaXRfcmVxdWVzdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKPj4+ICt7Cj4+PiArCXN0 cnVjdCBpOTE1X3NjaGVkX2VuZ2luZSAqc2NoZWRfZW5naW5lID0gcnEtPmVuZ2luZS0+c2NoZWRf ZW5naW5lOwo+Pj4gKwlzdHJ1Y3QgaW50ZWxfZ3VjICpndWMgPSAmcnEtPmVuZ2luZS0+Z3QtPnVj Lmd1YzsKPj4+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsKPj4+ICsKPj4+ICsJLyogV2lsbCBiZSBj YWxsZWQgZnJvbSBpcnEtY29udGV4dCB3aGVuIHVzaW5nIGZvcmVpZ24gZmVuY2VzLiAqLwo+Pj4g KwlzcGluX2xvY2tfaXJxc2F2ZSgmc2NoZWRfZW5naW5lLT5sb2NrLCBmbGFncyk7Cj4+PiArCj4+ PiArCWlmIChndWMtPnN0YWxsZWRfcmVxdWVzdCB8fCAhaTkxNV9zY2hlZF9lbmdpbmVfaXNfZW1w dHkoc2NoZWRfZW5naW5lKSkKPj4+ICsJCXF1ZXVlX3JlcXVlc3Qoc2NoZWRfZW5naW5lLCBycSwg cnFfcHJpbyhycSkpOwo+Pj4gKwllbHNlIGlmIChndWNfYnlwYXNzX3Rhc2tsZXRfc3VibWl0KGd1 YywgcnEpID09IC1FQlVTWSkKPj4+ICsJCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnNjaGVkX2VuZ2lu ZS0+dGFza2xldCk7Cj4+PiArCj4+PiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjaGVkX2Vu Z2luZS0+bG9jaywgZmxhZ3MpOwo+Pj4gK30KPj4+ICsKPj4+ICsjZGVmaW5lIEdVQ19JRF9TVEFS VAk2NAkvKiBGaXJzdCA2NCBndWNfaWRzIHJlc2VydmVkICovCj4+PiArc3RhdGljIGludCBuZXdf Z3VjX2lkKHN0cnVjdCBpbnRlbF9ndWMgKmd1YykKPj4+ICt7Cj4+PiArCXJldHVybiBpZGFfc2lt cGxlX2dldCgmZ3VjLT5ndWNfaWRzLCBHVUNfSURfU1RBUlQsCj4+PiArCQkJICAgICAgR1VDX01B WF9MUkNfREVTQ1JJUFRPUlMsIEdGUF9LRVJORUwgfAo+Pj4gKwkJCSAgICAgIF9fR0ZQX1JFVFJZ X01BWUZBSUwgfCBfX0dGUF9OT1dBUk4pOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBf X3JlbGVhc2VfZ3VjX2lkKHN0cnVjdCBpbnRlbF9ndWMgKmd1Yywgc3RydWN0IGludGVsX2NvbnRl eHQgKmNlKQo+Pj4gK3sKPj4+ICsJaWYgKCFjb250ZXh0X2d1Y19pZF9pbnZhbGlkKGNlKSkgewo+ Pj4gKwkJaWRhX3NpbXBsZV9yZW1vdmUoJmd1Yy0+Z3VjX2lkcywgY2UtPmd1Y19pZCk7Cj4+PiAr CQlyZXNldF9scmNfZGVzYyhndWMsIGNlLT5ndWNfaWQpOwo+Pj4gKwkJc2V0X2NvbnRleHRfZ3Vj X2lkX2ludmFsaWQoY2UpOwo+Pj4gKwl9Cj4+PiArCWlmICghbGlzdF9lbXB0eSgmY2UtPmd1Y19p ZF9saW5rKSkKPj4+ICsJCWxpc3RfZGVsX2luaXQoJmNlLT5ndWNfaWRfbGluayk7Cj4+PiArfQo+ Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIHJlbGVhc2VfZ3VjX2lkKHN0cnVjdCBpbnRlbF9ndWMgKmd1 Yywgc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQo+Pj4gK3sKPj4+ICsJdW5zaWduZWQgbG9uZyBm bGFnczsKPj4+ICsKPj4+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmd1Yy0+Y29udGV4dHNfbG9jaywg ZmxhZ3MpOwo+Pj4gKwlfX3JlbGVhc2VfZ3VjX2lkKGd1YywgY2UpOwo+Pj4gKwlzcGluX3VubG9j a19pcnFyZXN0b3JlKCZndWMtPmNvbnRleHRzX2xvY2ssIGZsYWdzKTsKPj4+ICt9Cj4+PiArCj4+ PiArc3RhdGljIGludCBzdGVhbF9ndWNfaWQoc3RydWN0IGludGVsX2d1YyAqZ3VjKQo+Pj4gK3sK Pj4+ICsJc3RydWN0IGludGVsX2NvbnRleHQgKmNlOwo+Pj4gKwlpbnQgZ3VjX2lkOwo+Pj4gKwo+ Pj4gKwlpZiAoIWxpc3RfZW1wdHkoJmd1Yy0+Z3VjX2lkX2xpc3QpKSB7Cj4+PiArCQljZSA9IGxp c3RfZmlyc3RfZW50cnkoJmd1Yy0+Z3VjX2lkX2xpc3QsCj4+PiArCQkJCSAgICAgIHN0cnVjdCBp bnRlbF9jb250ZXh0LAo+Pj4gKwkJCQkgICAgICBndWNfaWRfbGluayk7Cj4+PiArCj4+PiArCQlH RU1fQlVHX09OKGF0b21pY19yZWFkKCZjZS0+Z3VjX2lkX3JlZikpOwo+Pj4gKwkJR0VNX0JVR19P Tihjb250ZXh0X2d1Y19pZF9pbnZhbGlkKGNlKSk7Cj4+PiArCj4+PiArCQlsaXN0X2RlbF9pbml0 KCZjZS0+Z3VjX2lkX2xpbmspOwo+Pj4gKwkJZ3VjX2lkID0gY2UtPmd1Y19pZDsKPj4+ICsJCXNl dF9jb250ZXh0X2d1Y19pZF9pbnZhbGlkKGNlKTsKPj4+ICsJCXJldHVybiBndWNfaWQ7Cj4+PiAr CX0gZWxzZSB7Cj4+PiArCQlyZXR1cm4gLUVBR0FJTjsKPj4+ICsJfQo+Pj4gK30KPj4+ICsKPj4+ ICtzdGF0aWMgaW50IGFzc2lnbl9ndWNfaWQoc3RydWN0IGludGVsX2d1YyAqZ3VjLCB1MTYgKm91 dCkKPj4+ICt7Cj4+PiArCWludCByZXQ7Cj4+PiArCj4+PiArCXJldCA9IG5ld19ndWNfaWQoZ3Vj KTsKPj4+ICsJaWYgKHVubGlrZWx5KHJldCA8IDApKSB7Cj4+PiArCQlyZXQgPSBzdGVhbF9ndWNf aWQoZ3VjKTsKPj4+ICsJCWlmIChyZXQgPCAwKQo+Pj4gKwkJCXJldHVybiByZXQ7Cj4+PiArCX0K Pj4+ICsKPj4+ICsJKm91dCA9IHJldDsKPj4+ICsJcmV0dXJuIDA7Cj4+IElzIGl0IHdvcnRoIGFk ZGluZyBzcGlubG9ja19oZWxkIGFzc2VydHMgZm9yIGd1Yy0+Y29udGV4dHNfbG9jayBpbiB0aGVz ZSBJRAo+PiBmdW5jdGlvbnM/IERvdWJsZXMgdXAgYXMgYSBkb2N1bWVudGF0aW9uIG9mIHdoYXQg bG9ja2luZyB3ZSBleHBlY3QuCj4+Cj4gTmV2ZXIgYSBiYWQgaWRlYSB0byBoYXZlIGFzc2VydHMg aW4gdGhlIGNvZGUuIFdpbGwgYWRkLgo+Cj4+PiArfQo+Pj4gKwo+Pj4gKyNkZWZpbmUgUElOX0dV Q19JRF9UUklFUwk0Cj4+PiArc3RhdGljIGludCBwaW5fZ3VjX2lkKHN0cnVjdCBpbnRlbF9ndWMg Kmd1Yywgc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQo+Pj4gK3sKPj4+ICsJaW50IHJldCA9IDA7 Cj4+PiArCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHRyaWVzID0gUElOX0dVQ19JRF9UUklFUzsKPj4+ ICsKPj4+ICsJR0VNX0JVR19PTihhdG9taWNfcmVhZCgmY2UtPmd1Y19pZF9yZWYpKTsKPj4+ICsK Pj4+ICt0cnlfYWdhaW46Cj4+PiArCXNwaW5fbG9ja19pcnFzYXZlKCZndWMtPmNvbnRleHRzX2xv Y2ssIGZsYWdzKTsKPj4+ICsKPj4+ICsJaWYgKGNvbnRleHRfZ3VjX2lkX2ludmFsaWQoY2UpKSB7 Cj4+PiArCQlyZXQgPSBhc3NpZ25fZ3VjX2lkKGd1YywgJmNlLT5ndWNfaWQpOwo+Pj4gKwkJaWYg KHJldCkKPj4+ICsJCQlnb3RvIG91dF91bmxvY2s7Cj4+PiArCQlyZXQgPSAxOwkvKiBJbmRpZGNh dGVzIG5ld2x5IGFzc2lnbmVkIGd1Y19pZCAqLwo+Pj4gKwl9Cj4+PiArCWlmICghbGlzdF9lbXB0 eSgmY2UtPmd1Y19pZF9saW5rKSkKPj4+ICsJCWxpc3RfZGVsX2luaXQoJmNlLT5ndWNfaWRfbGlu ayk7Cj4+PiArCWF0b21pY19pbmMoJmNlLT5ndWNfaWRfcmVmKTsKPj4+ICsKPj4+ICtvdXRfdW5s b2NrOgo+Pj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZndWMtPmNvbnRleHRzX2xvY2ssIGZs YWdzKTsKPj4+ICsKPj4+ICsJLyoKPj4+ICsJICogLUVBR0FJTiBpbmRpY2F0ZXMgbm8gZ3VjX2lk cyBhcmUgYXZhaWxhYmxlLCBsZXQncyByZXRpcmUgYW55Cj4+PiArCSAqIG91dHN0YW5kaW5nIHJl cXVlc3RzIHRvIHNlZSBpZiB0aGF0IGZyZWVzIHVwIGEgZ3VjX2lkLiBJZiB0aGUgZmlyc3QKPj4+ ICsJICogcmV0aXJlIGRpZG4ndCBoZWxwLCBpbnNlcnQgYSBzbGVlcCB3aXRoIHRoZSB0aW1lc2xp Y2UgZHVyYXRpb24gYmVmb3JlCj4+PiArCSAqIGF0dGVtcHRpbmcgdG8gcmV0aXJlIG1vcmUgcmVx dWVzdHMuIERvdWJsZSB0aGUgc2xlZXAgcGVyaW9kIGVhY2gKPj4+ICsJICogc3Vic2VxdWVudCBw YXNzIGJlZm9yZSBmaW5hbGx5IGdpdmluZyB1cC4gVGhlIHNsZWVwIHBlcmlvZCBoYXMgbWF4IG9m Cj4+PiArCSAqIDEwMG1zIGFuZCBtaW5pbXVtIG9mIDFtcy4KPj4+ICsJICovCj4+PiArCWlmIChy ZXQgPT0gLUVBR0FJTiAmJiAtLXRyaWVzKSB7Cj4+PiArCQlpZiAoUElOX0dVQ19JRF9UUklFUyAt IHRyaWVzID4gMSkgewo+Pj4gKwkJCXVuc2lnbmVkIGludCB0aW1lc2xpY2Vfc2hpZnRlZCA9Cj4+ PiArCQkJCWNlLT5lbmdpbmUtPnByb3BzLnRpbWVzbGljZV9kdXJhdGlvbl9tcyA8PAo+Pj4gKwkJ CQkoUElOX0dVQ19JRF9UUklFUyAtIHRyaWVzIC0gMik7Cj4+PiArCQkJdW5zaWduZWQgaW50IG1h eCA9IG1pbl90KHVuc2lnbmVkIGludCwgMTAwLAo+Pj4gKwkJCQkJCSB0aW1lc2xpY2Vfc2hpZnRl ZCk7Cj4+PiArCj4+PiArCQkJbXNsZWVwKG1heF90KHVuc2lnbmVkIGludCwgbWF4LCAxKSk7Cj4+ PiArCQl9Cj4+PiArCQlpbnRlbF9ndF9yZXRpcmVfcmVxdWVzdHMoZ3VjX3RvX2d0KGd1YykpOwo+ Pj4gKwkJZ290byB0cnlfYWdhaW47Cj4+PiArCX0KPj4+ICsKPj4+ICsJcmV0dXJuIHJldDsKPj4+ ICt9Cj4+PiArCj4+PiArc3RhdGljIHZvaWQgdW5waW5fZ3VjX2lkKHN0cnVjdCBpbnRlbF9ndWMg Kmd1Yywgc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQo+Pj4gK3sKPj4+ICsJdW5zaWduZWQgbG9u ZyBmbGFnczsKPj4+ICsKPj4+ICsJR0VNX0JVR19PTihhdG9taWNfcmVhZCgmY2UtPmd1Y19pZF9y ZWYpIDwgMCk7Cj4+PiArCj4+PiArCXNwaW5fbG9ja19pcnFzYXZlKCZndWMtPmNvbnRleHRzX2xv Y2ssIGZsYWdzKTsKPj4+ICsJaWYgKCFjb250ZXh0X2d1Y19pZF9pbnZhbGlkKGNlKSAmJiBsaXN0 X2VtcHR5KCZjZS0+Z3VjX2lkX2xpbmspICYmCj4+PiArCSAgICAhYXRvbWljX3JlYWQoJmNlLT5n dWNfaWRfcmVmKSkKPj4+ICsJCWxpc3RfYWRkX3RhaWwoJmNlLT5ndWNfaWRfbGluaywgJmd1Yy0+ Z3VjX2lkX2xpc3QpOwo+Pj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZndWMtPmNvbnRleHRz X2xvY2ssIGZsYWdzKTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCBfX2d1Y19hY3Rpb25f cmVnaXN0ZXJfY29udGV4dChzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsCj4+PiArCQkJCQkgdTMyIGd1 Y19pZCwKPj4+ICsJCQkJCSB1MzIgb2Zmc2V0KQo+Pj4gK3sKPj4+ICsJdTMyIGFjdGlvbltdID0g ewo+Pj4gKwkJSU5URUxfR1VDX0FDVElPTl9SRUdJU1RFUl9DT05URVhULAo+Pj4gKwkJZ3VjX2lk LAo+Pj4gKwkJb2Zmc2V0LAo+Pj4gKwl9Owo+Pj4gKwo+Pj4gKwlyZXR1cm4gaW50ZWxfZ3VjX3Nl bmRfYnVzeV9sb29wKGd1YywgYWN0aW9uLCBBUlJBWV9TSVpFKGFjdGlvbiksIHRydWUpOwo+Pj4g K30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IHJlZ2lzdGVyX2NvbnRleHQoc3RydWN0IGludGVsX2Nv bnRleHQgKmNlKQo+Pj4gK3sKPj4+ICsJc3RydWN0IGludGVsX2d1YyAqZ3VjID0gY2VfdG9fZ3Vj KGNlKTsKPj4+ICsJdTMyIG9mZnNldCA9IGludGVsX2d1Y19nZ3R0X29mZnNldChndWMsIGd1Yy0+ bHJjX2Rlc2NfcG9vbCkgKwo+Pj4gKwkJY2UtPmd1Y19pZCAqIHNpemVvZihzdHJ1Y3QgZ3VjX2xy Y19kZXNjKTsKPj4+ICsKPj4+ICsJcmV0dXJuIF9fZ3VjX2FjdGlvbl9yZWdpc3Rlcl9jb250ZXh0 KGd1YywgY2UtPmd1Y19pZCwgb2Zmc2V0KTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCBf X2d1Y19hY3Rpb25fZGVyZWdpc3Rlcl9jb250ZXh0KHN0cnVjdCBpbnRlbF9ndWMgKmd1YywKPj4+ ICsJCQkJCSAgIHUzMiBndWNfaWQpCj4+PiArewo+Pj4gKwl1MzIgYWN0aW9uW10gPSB7Cj4+PiAr CQlJTlRFTF9HVUNfQUNUSU9OX0RFUkVHSVNURVJfQ09OVEVYVCwKPj4+ICsJCWd1Y19pZCwKPj4+ ICsJfTsKPj4+ICsKPj4+ICsJcmV0dXJuIGludGVsX2d1Y19zZW5kX2J1c3lfbG9vcChndWMsIGFj dGlvbiwgQVJSQVlfU0laRShhY3Rpb24pLCB0cnVlKTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGlj IGludCBkZXJlZ2lzdGVyX2NvbnRleHQoc3RydWN0IGludGVsX2NvbnRleHQgKmNlLCB1MzIgZ3Vj X2lkKQo+Pj4gK3sKPj4+ICsJc3RydWN0IGludGVsX2d1YyAqZ3VjID0gY2VfdG9fZ3VjKGNlKTsK Pj4+ICsKPj4+ICsJcmV0dXJuIF9fZ3VjX2FjdGlvbl9kZXJlZ2lzdGVyX2NvbnRleHQoZ3VjLCBn dWNfaWQpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50ZWxfZW5naW5lX21hc2tfdCBhZGp1 c3RfZW5naW5lX21hc2sodTggY2xhc3MsIGludGVsX2VuZ2luZV9tYXNrX3QgbWFzaykKPj4+ICt7 Cj4+PiArCXN3aXRjaCAoY2xhc3MpIHsKPj4+ICsJY2FzZSBSRU5ERVJfQ0xBU1M6Cj4+PiArCQly ZXR1cm4gbWFzayA+PiBSQ1MwOwo+Pj4gKwljYXNlIFZJREVPX0VOSEFOQ0VNRU5UX0NMQVNTOgo+ Pj4gKwkJcmV0dXJuIG1hc2sgPj4gVkVDUzA7Cj4+PiArCWNhc2UgVklERU9fREVDT0RFX0NMQVNT Ogo+Pj4gKwkJcmV0dXJuIG1hc2sgPj4gVkNTMDsKPj4+ICsJY2FzZSBDT1BZX0VOR0lORV9DTEFT UzoKPj4+ICsJCXJldHVybiBtYXNrID4+IEJDUzA7Cj4+PiArCWRlZmF1bHQ6Cj4+PiArCQlHRU1f QlVHX09OKCJJbnZhbGlkIENsYXNzIik7Cj4+IHdlIHVzdWFsbHkgdXNlIE1JU1NJTkdfQ0FTRSBm b3IgdGhpcyB0eXBlIG9mIGVycm9ycy4KPiBBcyBzb29uIGFzIHN0YXJ0IHRhbGtpbmcgaW4gbG9n aWNhbCBzcGFjZSAoc2VyaWVzIGltbWVkaWF0bHkgYWZ0ZXIgdGhpcwo+IGdldHMgbWVyZ2VkKSB0 aGlzIGZ1bmN0aW9uIGdldHMgZGVsZXRlZCBidXQgd2lsbCBmaXguCj4KPj4+ICsJCXJldHVybiAw Owo+Pj4gKwl9Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIGd1Y19jb250ZXh0X3BvbGlj eV9pbml0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPj4+ICsJCQkJICAgIHN0cnVj dCBndWNfbHJjX2Rlc2MgKmRlc2MpCj4+PiArewo+Pj4gKwlkZXNjLT5wb2xpY3lfZmxhZ3MgPSAw Owo+Pj4gKwo+Pj4gKwlkZXNjLT5leGVjdXRpb25fcXVhbnR1bSA9IENPTlRFWFRfUE9MSUNZX0RF RkFVTFRfRVhFQ1VUSU9OX1FVQU5UVU1fVVM7Cj4+PiArCWRlc2MtPnByZWVtcHRpb25fdGltZW91 dCA9IENPTlRFWFRfUE9MSUNZX0RFRkFVTFRfUFJFRU1QVElPTl9USU1FX1VTOwo+Pj4gK30KPj4+ ICsKPj4+ICtzdGF0aWMgaW50IGd1Y19scmNfZGVzY19waW4oc3RydWN0IGludGVsX2NvbnRleHQg KmNlKQo+Pj4gK3sKPj4+ICsJc3RydWN0IGludGVsX3J1bnRpbWVfcG0gKnJ1bnRpbWVfcG0gPQo+ Pj4gKwkJJmNlLT5lbmdpbmUtPmd0LT5pOTE1LT5ydW50aW1lX3BtOwo+PiBJZiB5b3UgbW92ZSB0 aGlzIGFmdGVyIHRoZSBlbmdpbmUgdmFyIGJlbG93IHlvdSBjYW4gc2tpcCB0aGUgY2UtPmVuZ2lu ZQo+PiBqdW1wLiBBbHNvLCB5b3UgY2FuIHNob3J0ZW4gdGhlIHBvaW50ZXIgY2hhc2luZyBieSB1 c2luZwo+PiBlbmdpbmUtPnVuY29yZS0+cnBtLgo+Pgo+IFN1cmUuCj4KPj4+ICsJc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lID0gY2UtPmVuZ2luZTsKPj4+ICsJc3RydWN0IGludGVsX2d1 YyAqZ3VjID0gJmVuZ2luZS0+Z3QtPnVjLmd1YzsKPj4+ICsJdTMyIGRlc2NfaWR4ID0gY2UtPmd1 Y19pZDsKPj4+ICsJc3RydWN0IGd1Y19scmNfZGVzYyAqZGVzYzsKPj4+ICsJYm9vbCBjb250ZXh0 X3JlZ2lzdGVyZWQ7Cj4+PiArCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+Pj4gKwlpbnQgcmV0 ID0gMDsKPj4+ICsKPj4+ICsJR0VNX0JVR19PTighZW5naW5lLT5tYXNrKTsKPj4+ICsKPj4+ICsJ LyoKPj4+ICsJICogRW5zdXJlIExSQyArIENUIHZtYXMgYXJlIGlzIHNhbWUgcmVnaW9uIGFzIHdy aXRlIGJhcnJpZXIgaXMgZG9uZQo+Pj4gKwkgKiBiYXNlZCBvbiBDVCB2bWEgcmVnaW9uLgo+Pj4g KwkgKi8KPj4+ICsJR0VNX0JVR19PTihpOTE1X2dlbV9vYmplY3RfaXNfbG1lbShndWMtPmN0LnZt YS0+b2JqKSAhPQo+Pj4gKwkJICAgaTkxNV9nZW1fb2JqZWN0X2lzX2xtZW0oY2UtPnJpbmctPnZt YS0+b2JqKSk7Cj4+PiArCj4+PiArCWNvbnRleHRfcmVnaXN0ZXJlZCA9IGxyY19kZXNjX3JlZ2lz dGVyZWQoZ3VjLCBkZXNjX2lkeCk7Cj4+PiArCj4+PiArCXJlc2V0X2xyY19kZXNjKGd1YywgZGVz Y19pZHgpOwo+Pj4gKwlzZXRfbHJjX2Rlc2NfcmVnaXN0ZXJlZChndWMsIGRlc2NfaWR4LCBjZSk7 Cj4+PiArCj4+PiArCWRlc2MgPSBfX2dldF9scmNfZGVzYyhndWMsIGRlc2NfaWR4KTsKPj4+ICsJ ZGVzYy0+ZW5naW5lX2NsYXNzID0gZW5naW5lX2NsYXNzX3RvX2d1Y19jbGFzcyhlbmdpbmUtPmNs YXNzKTsKPj4+ICsJZGVzYy0+ZW5naW5lX3N1Ym1pdF9tYXNrID0gYWRqdXN0X2VuZ2luZV9tYXNr KGVuZ2luZS0+Y2xhc3MsCj4+PiArCQkJCQkJICAgICAgZW5naW5lLT5tYXNrKTsKPj4+ICsJZGVz Yy0+aHdfY29udGV4dF9kZXNjID0gY2UtPmxyYy5scmNhOwo+Pj4gKwlkZXNjLT5wcmlvcml0eSA9 IEdVQ19DTElFTlRfUFJJT1JJVFlfS01EX05PUk1BTDsKPj4+ICsJZGVzYy0+Y29udGV4dF9mbGFn cyA9IENPTlRFWFRfUkVHSVNUUkFUSU9OX0ZMQUdfS01EOwo+Pj4gKwlndWNfY29udGV4dF9wb2xp Y3lfaW5pdChlbmdpbmUsIGRlc2MpOwo+Pj4gKwlpbml0X3NjaGVkX3N0YXRlKGNlKTsKPj4+ICsK Pj4+ICsJLyoKPj4+ICsJICogVGhlIGNvbnRleHRfbG9va3VwIHhhcnJheSBpcyB1c2VkIHRvIGRl dGVybWluZSBpZiB0aGUgaGFyZHdhcmUKPj4+ICsJICogY29udGV4dCBpcyBjdXJyZW50bHkgcmVn aXN0ZXJlZC4gVGhlcmUgYXJlIHR3byBjYXNlcyBpbiB3aGljaCBpdAo+Pj4gKwkgKiBjb3VsZCBi ZSByZWdpc2dlcmVkIGVpdGhlciB0aGUgZ3VjX2lkIGhhcyBiZWVuIHN0b2xlIGZyb20gZnJvbQo+ PiB0eXBvIHJlZ2lzZ2VyZWQKPj4KPiBKb2huIGdvdCB0aGlzIG9uZS4gRml4ZWQuCj4gICAKPj4+ ICsJICogYW5vdGhlciBjb250ZXh0IG9yIHRoZSBscmMgZGVzY3JpcHRvciBhZGRyZXNzIG9mIHRo aXMgY29udGV4dCBoYXMKPj4+ICsJICogY2hhbmdlZC4gSW4gZWl0aGVyIGNhc2UgdGhlIGNvbnRl eHQgbmVlZHMgdG8gYmUgZGVyZWdpc3RlcmVkIHdpdGggdGhlCj4+PiArCSAqIEd1QyBiZWZvcmUg cmVnaXN0ZXJpbmcgdGhpcyBjb250ZXh0Lgo+Pj4gKwkgKi8KPj4+ICsJaWYgKGNvbnRleHRfcmVn aXN0ZXJlZCkgewo+Pj4gKwkJc2V0X2NvbnRleHRfd2FpdF9mb3JfZGVyZWdpc3Rlcl90b19yZWdp c3RlcihjZSk7Cj4+PiArCQlpbnRlbF9jb250ZXh0X2dldChjZSk7Cj4+PiArCj4+PiArCQkvKgo+ Pj4gKwkJICogSWYgc3RlYWxpbmcgdGhlIGd1Y19pZCwgdGhpcyBjZSBoYXMgdGhlIHNhbWUgZ3Vj X2lkIGFzIHRoZQo+Pj4gKwkJICogY29udGV4dCB3aG9zIGd1Y19pZCB3YXMgc3RvbGUuCj4+PiAr CQkgKi8KPj4+ICsJCXdpdGhfaW50ZWxfcnVudGltZV9wbShydW50aW1lX3BtLCB3YWtlcmVmKQo+ Pj4gKwkJCXJldCA9IGRlcmVnaXN0ZXJfY29udGV4dChjZSwgY2UtPmd1Y19pZCk7Cj4+PiArCX0g ZWxzZSB7Cj4+PiArCQl3aXRoX2ludGVsX3J1bnRpbWVfcG0ocnVudGltZV9wbSwgd2FrZXJlZikK Pj4+ICsJCQlyZXQgPSByZWdpc3Rlcl9jb250ZXh0KGNlKTsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwly ZXR1cm4gcmV0Owo+Pj4gICAgfQo+Pj4gICAgc3RhdGljIGludCBndWNfY29udGV4dF9wcmVfcGlu KHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKPj4+IEBAIC00NDMsMzYgKzgxMywxMzkgQEAgc3Rh dGljIGludCBndWNfY29udGV4dF9wcmVfcGluKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKPj4+ ICAgIHN0YXRpYyBpbnQgZ3VjX2NvbnRleHRfcGluKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwg dm9pZCAqdmFkZHIpCj4+PiAgICB7Cj4+PiArCWlmIChpOTE1X2dndHRfb2Zmc2V0KGNlLT5zdGF0 ZSkgIT0KPj4+ICsJICAgIChjZS0+bHJjLmxyY2EgJiBDVFhfR1RUX0FERFJFU1NfTUFTSykpCj4+ PiArCQlzZXRfYml0KENPTlRFWFRfTFJDQV9ESVJUWSwgJmNlLT5mbGFncyk7Cj4+IFNob3VsZG4n dCB0aGlzIGJlIHNldCBhZnRlciBscmNfcGluKCk/IEkgY2FuIHNlZSBjZS0+bHJjLmxyY2EgYmVp bmcKPj4gcmUtYXNzaWduZWQgaW4gdGhlcmU7IGl0IGxvb2tzIGxpa2UgaXQgY2FuIG9ubHkgY2hh bmdlIGlmIHRoZSBjb250ZXh0IGlzCj4+IG5ldywgYnV0IGZvciBmdXR1cmUtcHJvb2ZpbmcgSU1P IGJldHRlciB0byByZS1vcmRlciBoZXJlLgo+Pgo+IE5vIHRoaXMgaXMgcmlnaHQuIGNlLT5zdGF0 ZSBpcyBhc3NpZ25lZCBpbiBscl9wcmVfcGluIGFuZCBjZS0+bHJjLmxyY2EgaXMKPiBhc3NpZ25l ZCBpbiBscmNfcGluLiBUbyBjYXRjaCB0aGUgY2hhbmdlIHlvdSBoYXZlIHRvIGNoZWNrIGJldHdl ZW4KPiB0aG9zZSB0d28gZnVuY3Rpb25zLgo+Cj4+PiArCj4+PiAgICAJcmV0dXJuIGxyY19waW4o Y2UsIGNlLT5lbmdpbmUsIHZhZGRyKTsKPj4gQ291bGQgdXNlIGEgY29tbWVudCB0byBzYXkgdGhh dCB0aGUgR3VDIGNvbnRleHQgcGlubmluZyBjYWxsIGlzIGRlbGF5ZWQKPj4gdW50aWwgcmVxdWVz dCBhbGxvYyBhbmQgdG8gbG9vayBhdCB0aGUgY29tbWVudCBpbiB0aGUgbGF0dGVyIGZ1bmN0aW9u IGZvcgo+PiBkZXRhaWxzIChvciBtb3ZlIHRoZSBleHBsYW5hdGlvbiBoZXJlIGFuZCByZWZlciBo ZXJlIGZyb20gcmVxdWVzdCBhbGxvYykuCj4+Cj4gWWVzLgo+ICAgCj4+PiAgICB9Cj4+PiArc3Rh dGljIHZvaWQgZ3VjX2NvbnRleHRfdW5waW4oc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQo+Pj4g K3sKPj4+ICsJc3RydWN0IGludGVsX2d1YyAqZ3VjID0gY2VfdG9fZ3VjKGNlKTsKPj4+ICsKPj4+ ICsJdW5waW5fZ3VjX2lkKGd1YywgY2UpOwo+Pj4gKwlscmNfdW5waW4oY2UpOwo+Pj4gK30KPj4+ ICsKPj4+ICtzdGF0aWMgdm9pZCBndWNfY29udGV4dF9wb3N0X3VucGluKHN0cnVjdCBpbnRlbF9j b250ZXh0ICpjZSkKPj4+ICt7Cj4+PiArCWxyY19wb3N0X3VucGluKGNlKTsKPj4gd2h5IGRvIHdl IG5lZWQgdGhpcyBmdW5jdGlvbj8gd2UgY2FuIGp1c3QgcGFzcyBscmNfcG9zdF91bnBpbiB0byB0 aGUgb3BzCj4+IChsaWtlIHdlIGFscmVhZHkgZG8pLgo+Pgo+IFdlIGRvbid0IGJlZm9yZSBzdHls ZSByZWFzb25zIEkgdGhpbmsgaGF2aW5nIGEgR3VDIHNwZWNpZmljIHdyYXBwZXIgaXMKPiBjb3Jy ZWN0Lgo+Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBndWNfbHJjX2Rlc2Nf dW5waW4oc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQo+Pj4gK3sKPj4+ICsJc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lID0gY2UtPmVuZ2luZTsKPj4+ICsJc3RydWN0IGludGVsX2d1YyAq Z3VjID0gJmVuZ2luZS0+Z3QtPnVjLmd1YzsKPj4+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsKPj4+ ICsKPj4+ICsJR0VNX0JVR19PTighbHJjX2Rlc2NfcmVnaXN0ZXJlZChndWMsIGNlLT5ndWNfaWQp KTsKPj4+ICsJR0VNX0JVR19PTihjZSAhPSBfX2dldF9jb250ZXh0KGd1YywgY2UtPmd1Y19pZCkp Owo+Pj4gKwo+Pj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2UtPmd1Y19zdGF0ZS5sb2NrLCBmbGFn cyk7Cj4+PiArCXNldF9jb250ZXh0X2Rlc3Ryb3llZChjZSk7Cj4+PiArCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJmNlLT5ndWNfc3RhdGUubG9jaywgZmxhZ3MpOwo+Pj4gKwo+Pj4gKwlkZXJlZ2lz dGVyX2NvbnRleHQoY2UsIGNlLT5ndWNfaWQpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9p ZCBndWNfY29udGV4dF9kZXN0cm95KHN0cnVjdCBrcmVmICprcmVmKQo+Pj4gK3sKPj4+ICsJc3Ry dWN0IGludGVsX2NvbnRleHQgKmNlID0gY29udGFpbmVyX29mKGtyZWYsIHR5cGVvZigqY2UpLCBy ZWYpOwo+Pj4gKwlzdHJ1Y3QgaW50ZWxfcnVudGltZV9wbSAqcnVudGltZV9wbSA9ICZjZS0+ZW5n aW5lLT5ndC0+aTkxNS0+cnVudGltZV9wbTsKPj4gc2FtZSBhcyBhYm92ZSwgZ29pbmcgdGhyb3Vn aCBlbmdpbmUtPnVuY29yZS0+cnBtIGlzIHNob3J0ZXIKPj4KPiBTdXJlLgo+ICAgCj4+PiArCXN0 cnVjdCBpbnRlbF9ndWMgKmd1YyA9ICZjZS0+ZW5naW5lLT5ndC0+dWMuZ3VjOwo+Pj4gKwlpbnRl bF93YWtlcmVmX3Qgd2FrZXJlZjsKPj4+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsKPj4+ICsKPj4+ ICsJLyoKPj4+ICsJICogSWYgdGhlIGd1Y19pZCBpcyBpbnZhbGlkIHRoaXMgY29udGV4dCBoYXMg YmVlbiBzdG9sZW4gYW5kIHdlIGNhbiBmcmVlCj4+PiArCSAqIGl0IGltbWVkaWF0ZWx5LiBBbHNv IGNhbiBiZSBmcmVlZCBpbW1lZGlhdGVseSBpZiB0aGUgY29udGV4dCBpcyBub3QKPj4+ICsJICog cmVnaXN0ZXJlZCB3aXRoIHRoZSBHdUMuCj4+PiArCSAqLwo+Pj4gKwlpZiAoY29udGV4dF9ndWNf aWRfaW52YWxpZChjZSkgfHwKPj4+ICsJICAgICFscmNfZGVzY19yZWdpc3RlcmVkKGd1YywgY2Ut Pmd1Y19pZCkpIHsKPj4+ICsJCXJlbGVhc2VfZ3VjX2lkKGd1YywgY2UpOwo+PiBpdCBmZWVscyBh IGJpdCB3ZWlyZCB0aGF0IHdlIGNhbGwgcmVsZWFzZV9ndWNfaWQgaW4gdGhlIGNhc2Ugd2hlcmUg dGhlIGlkIGlzCj4+IGludmFsaWQuIFRoZSBjb2RlIGhhbmRsZXMgaXQgZmluZSwgYnV0IHN0aWxs IHRoZSBmbG93IGRvZXNuJ3QgZmVlbCBjbGVhbi4KPj4gTm90IGEgYmxvY2tlci4KPj4KPiBJIHVu ZGVyc3RhbmQuIExldCdzIHNlZSBpZiB0aGlzIGNhbiBnZXQgY2xlYW5lZCB1cCBhdCBzb21lIHBv aW50Lgo+Cj4+PiArCQlscmNfZGVzdHJveShrcmVmKTsKPj4+ICsJCXJldHVybjsKPj4+ICsJfQo+ Pj4gKwo+Pj4gKwkvKgo+Pj4gKwkgKiBXZSBoYXZlIHRvIGFjcXVpcmUgdGhlIGNvbnRleHQgc3Bp bmxvY2sgYW5kIGNoZWNrIGd1Y19pZCBhZ2FpbiwgaWYgaXQKPj4+ICsJICogaXMgdmFsaWQgaXQg aGFzbid0IGJlZW4gc3RvbGVuIGFuZCBuZWVkcyB0byBiZSBkZXJlZ2lzdGVyZWQuIFdlCj4+PiAr CSAqIGRlbGV0ZSB0aGlzIGNvbnRleHQgZnJvbSB0aGUgbGlzdCBvZiB1bnBpbm5lZCBndWNfaWRz IGF2YWlsYWJsZSB0bwo+Pj4gKwkgKiBzdG9sZSB0byBzZWFsIGEgcmFjZSB3aXRoIGd1Y19scmNf ZGVzY19waW4oKS4gV2hlbiB0aGUgRzJIIENUQgo+Pj4gKwkgKiByZXR1cm5zIGluZGljYXRpbmcg dGhpcyBjb250ZXh0IGhhcyBiZWVuIGRlcmVnaXN0ZXJlZCB0aGUgZ3VjX2lkIGlzCj4+PiArCSAq IHJldHVybmVkIHRvIHRoZSBwb29sIG9mIGF2YWlsYWJsZSBndWNfaWRzLgo+Pj4gKwkgKi8KPj4+ ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmd1Yy0+Y29udGV4dHNfbG9jaywgZmxhZ3MpOwo+Pj4gKwlp ZiAoY29udGV4dF9ndWNfaWRfaW52YWxpZChjZSkpIHsKPj4+ICsJCV9fcmVsZWFzZV9ndWNfaWQo Z3VjLCBjZSk7Cj4+IEJ1dCBoZXJlIHRoZSBjYWxsIHRvIF9fcmVsZWFzZV9ndWNfaWQgaXMgdW5u ZWRlZCwgcmlnaHQ/IHRoZSBjZSBkb2Vzbid0IG93bgo+PiB0aGUgSUQgYW55bW9yZSBhbmQgYm90 aCB0aGUgc3RlYWwgYW5kIHRoZSByZWxlYXNlIGZ1bmN0aW9uIGFscmVhZHkgY2xlYW4KPj4gY2Ut Pmd1Y19pZF9saW5rLCBzbyB0aGVyZSBzaG91bGQgYmUgbm90aGluZyBsZWZ0IHRvIGNsZWFuLgo+ Pgo+IFRoaXMgaXMgZGVhZCBjb2RlLiBXaWxsIGRlbGV0ZS4KPgo+Pj4gKwkJc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmZ3VjLT5jb250ZXh0c19sb2NrLCBmbGFncyk7Cj4+PiArCQlscmNfZGVzdHJv eShrcmVmKTsKPj4+ICsJCXJldHVybjsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwlpZiAoIWxpc3RfZW1w dHkoJmNlLT5ndWNfaWRfbGluaykpCj4+PiArCQlsaXN0X2RlbF9pbml0KCZjZS0+Z3VjX2lkX2xp bmspOwo+Pj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZndWMtPmNvbnRleHRzX2xvY2ssIGZs YWdzKTsKPj4+ICsKPj4+ICsJLyoKPj4+ICsJICogV2UgZGVmZXIgR3VDIGNvbnRleHQgZGVyZWdp c3RyYXRpb24gdW50aWwgdGhlIGNvbnRleHQgaXMgZGVzdHJveWVkCj4+PiArCSAqIGluIG9yZGVy IHRvIHNhdmUgb24gQ1RCcy4gV2l0aCB0aGlzIG9wdGltaXphdGlvbiBpZGVhbGx5IHdlIG9ubHkg bmVlZAo+Pj4gKwkgKiAxIENUQiB0byByZWdpc3RlciB0aGUgY29udGV4dCBkdXJpbmcgdGhlIGZp cnN0IHBpbiBhbmQgMSBDVEIgdG8KPj4+ICsJICogZGVyZWdpc3RlciB0aGUgY29udGV4dCB3aGVu IHRoZSBjb250ZXh0IGlzIGRlc3Ryb3llZC4gV2l0aG91dCB0aGlzCj4+PiArCSAqIG9wdGltaXph dGlvbiwgYSBDVEIgd291bGQgYmUgbmVlZGVkIGV2ZXJ5IHBpbiAmIHVucGluLgo+Pj4gKwkgKgo+ Pj4gKwkgKiBYWFg6IE5lZWQgdG8gYWNxaXVyZSB0aGUgcnVudGltZSB3YWtlcmVmIGFzIHRoaXMg Y2FuIGJlIHRyaWdnZXJlZAo+Pj4gKwkgKiBmcm9tIGNvbnRleHRfZnJlZV93b3JrZXIgd2hlbiBu b3QgcnVudGltZSB3YWtlcmVmIGlzIGhlbGQuCj4+PiArCSAqIGd1Y19scmNfZGVzY191bnBpbiBy ZXF1aXJlcyB0aGUgcnVudGltZSBhcyBhIEd1QyByZWdpc3RlciBpcyB3cml0dGVuCj4+PiArCSAq IGluIEgyRyBDVEIgdG8gZGVyZWdpc3RlciB0aGUgY29udGV4dC4gQSBmdXR1cmUgcGF0Y2ggbWF5 IGRlZmVyIHRoaXMKPj4+ICsJICogSDJHIENUQiBpZiB0aGUgcnVudGltZSB3YWtlcmVmIGlzIHpl cm8uCj4+PiArCSAqLwo+Pj4gKwl3aXRoX2ludGVsX3J1bnRpbWVfcG0ocnVudGltZV9wbSwgd2Fr ZXJlZikKPj4+ICsJCWd1Y19scmNfZGVzY191bnBpbihjZSk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0 YXRpYyBpbnQgZ3VjX2NvbnRleHRfYWxsb2Moc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQo+Pj4g K3sKPj4+ICsJcmV0dXJuIGxyY19hbGxvYyhjZSwgY2UtPmVuZ2luZSk7Cj4+PiArfQo+Pj4gKwo+ Pj4gICAgc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlbF9jb250ZXh0X29wcyBndWNfY29udGV4dF9v cHMgPSB7Cj4+PiAgICAJLmFsbG9jID0gZ3VjX2NvbnRleHRfYWxsb2MsCj4+PiAgICAJLnByZV9w aW4gPSBndWNfY29udGV4dF9wcmVfcGluLAo+Pj4gICAgCS5waW4gPSBndWNfY29udGV4dF9waW4s Cj4+PiAtCS51bnBpbiA9IGxyY191bnBpbiwKPj4+IC0JLnBvc3RfdW5waW4gPSBscmNfcG9zdF91 bnBpbiwKPj4+ICsJLnVucGluID0gZ3VjX2NvbnRleHRfdW5waW4sCj4+PiArCS5wb3N0X3VucGlu ID0gZ3VjX2NvbnRleHRfcG9zdF91bnBpbiwKPj4+ICAgIAkuZW50ZXIgPSBpbnRlbF9jb250ZXh0 X2VudGVyX2VuZ2luZSwKPj4+ICAgIAkuZXhpdCA9IGludGVsX2NvbnRleHRfZXhpdF9lbmdpbmUs Cj4+PiAgICAJLnJlc2V0ID0gbHJjX3Jlc2V0LAo+Pj4gLQkuZGVzdHJveSA9IGxyY19kZXN0cm95 LAo+Pj4gKwkuZGVzdHJveSA9IGd1Y19jb250ZXh0X2Rlc3Ryb3ksCj4+PiAgICB9Owo+Pj4gLXN0 YXRpYyBpbnQgZ3VjX3JlcXVlc3RfYWxsb2Moc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCkK Pj4+ICtzdGF0aWMgYm9vbCBjb250ZXh0X25lZWRzX3JlZ2lzdGVyKHN0cnVjdCBpbnRlbF9jb250 ZXh0ICpjZSwgYm9vbCBuZXdfZ3VjX2lkKQo+Pj4gICAgewo+Pj4gKwlyZXR1cm4gbmV3X2d1Y19p ZCB8fCB0ZXN0X2JpdChDT05URVhUX0xSQ0FfRElSVFksICZjZS0+ZmxhZ3MpIHx8Cj4+PiArCQkh bHJjX2Rlc2NfcmVnaXN0ZXJlZChjZV90b19ndWMoY2UpLCBjZS0+Z3VjX2lkKTsKPj4+ICt9Cj4+ PiArCj4+PiArc3RhdGljIGludCBndWNfcmVxdWVzdF9hbGxvYyhzdHJ1Y3QgaTkxNV9yZXF1ZXN0 ICpycSkKPj4+ICt7Cj4+PiArCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSA9IHJxLT5jb250ZXh0 Owo+Pj4gKwlzdHJ1Y3QgaW50ZWxfZ3VjICpndWMgPSBjZV90b19ndWMoY2UpOwo+Pj4gICAgCWlu dCByZXQ7Cj4+PiAtCUdFTV9CVUdfT04oIWludGVsX2NvbnRleHRfaXNfcGlubmVkKHJlcXVlc3Qt PmNvbnRleHQpKTsKPj4+ICsJR0VNX0JVR19PTighaW50ZWxfY29udGV4dF9pc19waW5uZWQocnEt PmNvbnRleHQpKTsKPj4+ICAgIAkvKgo+Pj4gICAgCSAqIEZsdXNoIGVub3VnaCBzcGFjZSB0byBy ZWR1Y2UgdGhlIGxpa2VsaWhvb2Qgb2Ygd2FpdGluZyBhZnRlcgo+Pj4gICAgCSAqIHdlIHN0YXJ0 IGJ1aWxkaW5nIHRoZSByZXF1ZXN0IC0gaW4gd2hpY2ggY2FzZSB3ZSB3aWxsIGp1c3QKPj4+ICAg IAkgKiBoYXZlIHRvIHJlcGVhdCB3b3JrLgo+Pj4gICAgCSAqLwo+Pj4gLQlyZXF1ZXN0LT5yZXNl cnZlZF9zcGFjZSArPSBHVUNfUkVRVUVTVF9TSVpFOwo+Pj4gKwlycS0+cmVzZXJ2ZWRfc3BhY2Ug Kz0gR1VDX1JFUVVFU1RfU0laRTsKPj4+ICAgIAkvKgo+Pj4gICAgCSAqIE5vdGUgdGhhdCBhZnRl ciB0aGlzIHBvaW50LCB3ZSBoYXZlIGNvbW1pdHRlZCB0byB1c2luZwo+Pj4gQEAgLTQ4Myw1NiAr OTU2LDQ3IEBAIHN0YXRpYyBpbnQgZ3VjX3JlcXVlc3RfYWxsb2Moc3RydWN0IGk5MTVfcmVxdWVz dCAqcmVxdWVzdCkKPj4+ICAgIAkgKi8KPj4+ICAgIAkvKiBVbmNvbmRpdGlvbmFsbHkgaW52YWxp ZGF0ZSBHUFUgY2FjaGVzIGFuZCBUTEJzLiAqLwo+Pj4gLQlyZXQgPSByZXF1ZXN0LT5lbmdpbmUt PmVtaXRfZmx1c2gocmVxdWVzdCwgRU1JVF9JTlZBTElEQVRFKTsKPj4+ICsJcmV0ID0gcnEtPmVu Z2luZS0+ZW1pdF9mbHVzaChycSwgRU1JVF9JTlZBTElEQVRFKTsKPj4+ICAgIAlpZiAocmV0KQo+ Pj4gICAgCQlyZXR1cm4gcmV0Owo+Pj4gLQlyZXF1ZXN0LT5yZXNlcnZlZF9zcGFjZSAtPSBHVUNf UkVRVUVTVF9TSVpFOwo+Pj4gLQlyZXR1cm4gMDsKPj4+IC19Cj4+PiArCXJxLT5yZXNlcnZlZF9z cGFjZSAtPSBHVUNfUkVRVUVTVF9TSVpFOwo+Pj4gLXN0YXRpYyBpbmxpbmUgdm9pZCBxdWV1ZV9y ZXF1ZXN0KHN0cnVjdCBpOTE1X3NjaGVkX2VuZ2luZSAqc2NoZWRfZW5naW5lLAo+Pj4gLQkJCQkg c3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCj4+PiAtCQkJCSBpbnQgcHJpbykKPj4+IC17Cj4+PiAt CUdFTV9CVUdfT04oIWxpc3RfZW1wdHkoJnJxLT5zY2hlZC5saW5rKSk7Cj4+PiAtCWxpc3RfYWRk X3RhaWwoJnJxLT5zY2hlZC5saW5rLAo+Pj4gLQkJICAgICAgaTkxNV9zY2hlZF9sb29rdXBfcHJp b2xpc3Qoc2NoZWRfZW5naW5lLCBwcmlvKSk7Cj4+PiAtCXNldF9iaXQoSTkxNV9GRU5DRV9GTEFH X1BRVUVVRSwgJnJxLT5mZW5jZS5mbGFncyk7Cj4+PiAtfQo+Pj4gLQo+Pj4gLXN0YXRpYyBpbnQg Z3VjX2J5cGFzc190YXNrbGV0X3N1Ym1pdChzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsCj4+PiAtCQkJ CSAgICAgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCj4+PiAtewo+Pj4gLQlpbnQgcmV0Owo+Pj4g LQo+Pj4gLQlfX2k5MTVfcmVxdWVzdF9zdWJtaXQocnEpOwo+Pj4gLQo+Pj4gLQl0cmFjZV9pOTE1 X3JlcXVlc3RfaW4ocnEsIDApOwo+Pj4gLQo+Pj4gLQlndWNfc2V0X2xyY190YWlsKHJxKTsKPj4+ IC0JcmV0ID0gZ3VjX2FkZF9yZXF1ZXN0KGd1YywgcnEpOwo+Pj4gLQlpZiAocmV0ID09IC1FQlVT WSkKPj4+IC0JCWd1Yy0+c3RhbGxlZF9yZXF1ZXN0ID0gcnE7Cj4+PiAtCj4+PiAtCXJldHVybiBy ZXQ7Cj4+PiAtfQo+Pj4gLQo+Pj4gLXN0YXRpYyB2b2lkIGd1Y19zdWJtaXRfcmVxdWVzdChzdHJ1 Y3QgaTkxNV9yZXF1ZXN0ICpycSkKPj4+IC17Cj4+PiAtCXN0cnVjdCBpOTE1X3NjaGVkX2VuZ2lu ZSAqc2NoZWRfZW5naW5lID0gcnEtPmVuZ2luZS0+c2NoZWRfZW5naW5lOwo+Pj4gLQlzdHJ1Y3Qg aW50ZWxfZ3VjICpndWMgPSAmcnEtPmVuZ2luZS0+Z3QtPnVjLmd1YzsKPj4+IC0JdW5zaWduZWQg bG9uZyBmbGFnczsKPj4+ICsJLyoKPj4+ICsJICogQ2FsbCBwaW5fZ3VjX2lkIGhlcmUgcmF0aGVy IHRoYW4gaW4gdGhlIHBpbm5pbmcgc3RlcCBhcyB3aXRoCj4+PiArCSAqIGRtYV9yZXN2LCBjb250 ZXh0cyBjYW4gYmUgcmVwZWF0ZWRseSBwaW5uZWQgLyB1bnBpbm5lZCB0cmFzaGluZyB0aGUKPj4+ ICsJICogZ3VjX2lkcyBhbmQgY3JlYXRpbmcgaG9ycmlibGUgcmFjZSBjb25kaXRpb25zLiBUaGlz IGlzIGVzcGVjaWFsbHkgYmFkCj4+PiArCSAqIHdoZW4gZ3VjX2lkcyBhcmUgYmVpbmcgc3RvbGVu IGR1ZSB0byBvdmVyIHN1YnNjcmlwdGlvbi4gQnkgdGhlIHRpbWUKPj4+ICsJICogdGhpcyBmdW5j dGlvbiBpcyByZWFjaGVkLCBpdCBpcyBndWFyYW50ZWVkIHRoYXQgdGhlIGd1Y19pZCB3aWxsIGJl Cj4+PiArCSAqIHBlcnNpc3RlbnQgdW50aWwgdGhlIGdlbmVyYXRlZCByZXF1ZXN0IGlzIHJldGly ZWQuIFRodXMsIHNlYWxpbmcgdGhlc2UKPj4+ICsJICogcmFjZSBjb25kaXRpb25zLiBJdCBpcyBz dGlsbCBzYWZlIHRvIGZhaWwgaGVyZSBpZiBndWNfaWRzIGFyZQo+Pj4gKwkgKiBleGhhdXN0ZWQg YW5kIHJldHVybiAtRUFHQUlOIHRvIHRoZSB1c2VyIGluZGljYXRpbmcgdGhhdCB0aGV5IGNhbiB0 cnkKPj4+ICsJICogYWdhaW4gaW4gdGhlIGZ1dHVyZS4KPj4+ICsJICoKPj4+ICsJICogVGhlcmUg aXMgbm8gbmVlZCBmb3IgYSBsb2NrIGhlcmUgYXMgdGhlIHRpbWVsaW5lIG11dGV4IGVuc3VyZXMg YXQKPj4+ICsJICogbW9zdCBvbmUgY29udGV4dCBjYW4gYmUgZXhlY3V0aW5nIHRoaXMgY29kZSBw YXRoIGF0IG9uY2UuIFRoZQo+Pj4gKwkgKiBndWNfaWRfcmVmIGlzIGluY3JlbWVudGVkIG9uY2Ug Zm9yIGV2ZXJ5IHJlcXVlc3QgaW4gZmxpZ2h0IGFuZAo+Pj4gKwkgKiBkZWNyZW1lbnRlZCBvbiBl YWNoIHJldGlyZS4gV2hlbiBpdCBpcyB6ZXJvLCBhIGxvY2sgYXJvdW5kIHRoZQo+Pj4gKwkgKiBp bmNyZW1lbnQgKGluIHBpbl9ndWNfaWQpIGlzIG5lZWRlZCB0byBzZWFsIGEgcmFjZSB3aXRoIHVu cGluX2d1Y19pZC4KPj4+ICsJICovCj4+PiArCWlmIChhdG9taWNfYWRkX3VubGVzcygmY2UtPmd1 Y19pZF9yZWYsIDEsIDApKQo+Pj4gKwkJcmV0dXJuIDA7Cj4+PiAtCS8qIFdpbGwgYmUgY2FsbGVk IGZyb20gaXJxLWNvbnRleHQgd2hlbiB1c2luZyBmb3JlaWduIGZlbmNlcy4gKi8KPj4+IC0Jc3Bp bl9sb2NrX2lycXNhdmUoJnNjaGVkX2VuZ2luZS0+bG9jaywgZmxhZ3MpOwo+Pj4gKwlyZXQgPSBw aW5fZ3VjX2lkKGd1YywgY2UpOwkvKiByZXR1cm5zIDEgaWYgbmV3IGd1Y19pZCBhc3NpZ25lZCAq Lwo+Pj4gKwlpZiAodW5saWtlbHkocmV0IDwgMCkpCj4+PiArCQlyZXR1cm4gcmV0OzsKPj4gdHlw byAiOzsiCj4+Cj4gWWVwLgo+Cj4+PiArCWlmIChjb250ZXh0X25lZWRzX3JlZ2lzdGVyKGNlLCAh IXJldCkpIHsKPj4+ICsJCXJldCA9IGd1Y19scmNfZGVzY19waW4oY2UpOwo+Pj4gKwkJaWYgKHVu bGlrZWx5KHJldCkpIHsJLyogdW53aW5kICovCj4+PiArCQkJYXRvbWljX2RlYygmY2UtPmd1Y19p ZF9yZWYpOwo+Pj4gKwkJCXVucGluX2d1Y19pZChndWMsIGNlKTsKPj4+ICsJCQlyZXR1cm4gcmV0 Owo+Pj4gKwkJfQo+Pj4gKwl9Cj4+PiAtCWlmIChndWMtPnN0YWxsZWRfcmVxdWVzdCB8fCAhaTkx NV9zY2hlZF9lbmdpbmVfaXNfZW1wdHkoc2NoZWRfZW5naW5lKSkKPj4+IC0JCXF1ZXVlX3JlcXVl c3Qoc2NoZWRfZW5naW5lLCBycSwgcnFfcHJpbyhycSkpOwo+Pj4gLQllbHNlIGlmIChndWNfYnlw YXNzX3Rhc2tsZXRfc3VibWl0KGd1YywgcnEpID09IC1FQlVTWSkKPj4+IC0JCXRhc2tsZXRfaGlf c2NoZWR1bGUoJnNjaGVkX2VuZ2luZS0+dGFza2xldCk7Cj4+PiArCWNsZWFyX2JpdChDT05URVhU X0xSQ0FfRElSVFksICZjZS0+ZmxhZ3MpOwo+Pgo+PiBNaWdodCBiZSB3b3J0aCBtb3ZpbmcgdGhl IHBpbm5pbmcgdG8gYSBzZXBhcmF0ZSBmdW5jdGlvbiB0byBrZWVwIHRoZQo+PiByZXF1ZXN0X2Fs bG9jIGZvY3VzZWQgb24gdGhlIHJlcXVlc3QuIENhbiBiZSBkb25lIGFzIGEgZm9sbG93IHVwLgo+ Pgo+IFN1cmUuIExldCBtZSBzZWUgaG93IHRoYXQgbG9va3MgaW4gYSBmb2xsb3cgdXAuCj4gICAK Pj4+IC0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2NoZWRfZW5naW5lLT5sb2NrLCBmbGFncyk7 Cj4+PiArCXJldHVybiAwOwo+Pj4gICAgfQo+Pj4gICAgc3RhdGljIHZvaWQgc2FuaXRpemVfaHdz cChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4+PiBAQCAtNjA2LDYgKzEwNzAsNDYg QEAgc3RhdGljIHZvaWQgZ3VjX3NldF9kZWZhdWx0X3N1Ym1pc3Npb24oc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lKQo+Pj4gICAgCWVuZ2luZS0+c3VibWl0X3JlcXVlc3QgPSBndWNfc3Vi bWl0X3JlcXVlc3Q7Cj4+PiAgICB9Cj4+PiArc3RhdGljIGlubGluZSB2b2lkIGd1Y19rZXJuZWxf Y29udGV4dF9waW4oc3RydWN0IGludGVsX2d1YyAqZ3VjLAo+Pj4gKwkJCQkJICBzdHJ1Y3QgaW50 ZWxfY29udGV4dCAqY2UpCj4+PiArewo+Pj4gKwlpZiAoY29udGV4dF9ndWNfaWRfaW52YWxpZChj ZSkpCj4+PiArCQlwaW5fZ3VjX2lkKGd1YywgY2UpOwo+Pj4gKwlndWNfbHJjX2Rlc2NfcGluKGNl KTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGlubGluZSB2b2lkIGd1Y19pbml0X2xyY19tYXBw aW5nKHN0cnVjdCBpbnRlbF9ndWMgKmd1YykKPj4+ICt7Cj4+PiArCXN0cnVjdCBpbnRlbF9ndCAq Z3QgPSBndWNfdG9fZ3QoZ3VjKTsKPj4+ICsJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l Owo+Pj4gKwllbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKPj4+ICsKPj4+ICsJLyogbWFrZSBzdXJl IGFsbCBkZXNjcmlwdG9ycyBhcmUgY2xlYW4uLi4gKi8KPj4+ICsJeGFfZGVzdHJveSgmZ3VjLT5j b250ZXh0X2xvb2t1cCk7Cj4+PiArCj4+PiArCS8qCj4+PiArCSAqIFNvbWUgY29udGV4dHMgbWln aHQgaGF2ZSBiZWVuIHBpbm5lZCBiZWZvcmUgd2UgZW5hYmxlZCBHdUMKPj4+ICsJICogc3VibWlz c2lvbiwgc28gd2UgbmVlZCB0byBhZGQgdGhlbSB0byB0aGUgR3VDIGJvb2tlZXBpbmcuCj4+PiAr CSAqIEFsc28sIGFmdGVyIGEgcmVzZXQgdGhlIEd1QyB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0 IHRoZSBpbmZvcm1hdGlvbgo+Pj4gKwkgKiBzaGFyZWQgd2l0aCBHdUMgaXMgcHJvcGVybHkgcmVz ZXQuIFRoZSBrZXJuZWwgbHJjcyBhcmUgbm90IGF0dGFjaGVkCj4+PiArCSAqIHRvIHRoZSBnZW1f Y29udGV4dCwgc28gdGhleSBuZWVkIHRvIGJlIGFkZGVkIHNlcGFyYXRlbHkuCj4+PiArCSAqCj4+ PiArCSAqIE5vdGU6IHdlIHB1cnBvc2VseSBkbyBub3QgY2hlY2sgdGhlIGVycm9yIHJldHVybiBv Zgo+Pj4gKwkgKiBndWNfbHJjX2Rlc2NfcGluLCBiZWNhdXNlIHRoYXQgZnVuY3Rpb24gY2FuIG9u bHkgZmFpbCBpbiB0d28gY2FzZXMuCj4+PiArCSAqIE9uZSwgaWYgdGhlcmUgYXJlbid0IGVub3Vn aCBmcmVlIElEcywgYnV0IHdlJ3JlIGd1YXJhbnRlZWQgdG8gaGF2ZQo+Pj4gKwkgKiBlbm91Z2gg aGVyZSAod2UncmUgZWl0aGVyIG9ubHkgcGlubmluZyBhIGhhbmRmdWwgb2YgbHJjIG9uIGZpcnN0 IGJvb3QKPj4+ICsJICogb3Igd2UncmUgcmUtcGlubmluZyBscmNzIHRoYXQgd2VyZSBhbHJlYWR5 IHBpbm5lZCBiZWZvcmUgdGhlIHJlc2V0KS4KPj4+ICsJICogVHdvLCBpZiB0aGUgR3VDIGhhcyBk aWVkIGFuZCBDVEJzIGNhbid0IG1ha2UgZm9yd2FyZCBwcm9ncmVzcy4KPj4+ICsJICogUHJlc3Vt YWJseSwgdGhlIEd1QyBzaG91bGQgYmUgYWxpdmUgYXMgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQg b24KPj4+ICsJICogZHJpdmVyIGxvYWQgb3IgYWZ0ZXIgYSByZXNldC4gRXZlbiBpZiBpdCBpcyBk ZWFkLCBhbm90aGVyIGZ1bGwgR1BVCj4+PiArCSAqIHJlc2V0IHdpbGwgYmUgdHJpZ2dlcmVkIGFu ZCB0aGlzIGZ1bmN0aW9uIHdvdWxkIGJlIGNhbGxlZCBhZ2Fpbi4KPj4+ICsJICovCj4+PiArCj4+ PiArCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGd0LCBpZCkKPj4+ICsJCWlmIChlbmdpbmUtPmtl cm5lbF9jb250ZXh0KQo+Pj4gKwkJCWd1Y19rZXJuZWxfY29udGV4dF9waW4oZ3VjLCBlbmdpbmUt Pmtlcm5lbF9jb250ZXh0KTsKPj4+ICt9Cj4+PiArCj4+PiAgICBzdGF0aWMgdm9pZCBndWNfcmVs ZWFzZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4+PiAgICB7Cj4+PiAgICAJZW5n aW5lLT5zYW5pdGl6ZSA9IE5VTEw7IC8qIG5vIGxvbmdlciBpbiBjb250cm9sLCBub3RoaW5nIHRv IHNhbml0aXplICovCj4+PiBAQCAtNzE4LDYgKzEyMjIsNyBAQCBpbnQgaW50ZWxfZ3VjX3N1Ym1p c3Npb25fc2V0dXAoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+Pj4gICAgdm9pZCBp bnRlbF9ndWNfc3VibWlzc2lvbl9lbmFibGUoc3RydWN0IGludGVsX2d1YyAqZ3VjKQo+Pj4gICAg ewo+Pj4gKwlndWNfaW5pdF9scmNfbWFwcGluZyhndWMpOwo+Pj4gICAgfQo+Pj4gICAgdm9pZCBp bnRlbF9ndWNfc3VibWlzc2lvbl9kaXNhYmxlKHN0cnVjdCBpbnRlbF9ndWMgKmd1YykKPj4+IEBA IC03NDMsMyArMTI0OCw2MiBAQCB2b2lkIGludGVsX2d1Y19zdWJtaXNzaW9uX2luaXRfZWFybHko c3RydWN0IGludGVsX2d1YyAqZ3VjKQo+Pj4gICAgewo+Pj4gICAgCWd1Yy0+c3VibWlzc2lvbl9z ZWxlY3RlZCA9IF9fZ3VjX3N1Ym1pc3Npb25fc2VsZWN0ZWQoZ3VjKTsKPj4+ICAgIH0KPj4+ICsK Pj4+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBpbnRlbF9jb250ZXh0ICoKPj4+ICtnMmhfY29udGV4 dF9sb29rdXAoc3RydWN0IGludGVsX2d1YyAqZ3VjLCB1MzIgZGVzY19pZHgpCj4+PiArewo+Pj4g KwlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2U7Cj4+PiArCj4+PiArCWlmICh1bmxpa2VseShkZXNj X2lkeCA+PSBHVUNfTUFYX0xSQ19ERVNDUklQVE9SUykpIHsKPj4+ICsJCWRybV9kYmcoJmd1Y190 b19ndChndWMpLT5pOTE1LT5kcm0sCj4+PiArCQkJIkludmFsaWQgZGVzY19pZHggJXUiLCBkZXNj X2lkeCk7Cj4+PiArCQlyZXR1cm4gTlVMTDsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwljZSA9IF9fZ2V0 X2NvbnRleHQoZ3VjLCBkZXNjX2lkeCk7Cj4+PiArCWlmICh1bmxpa2VseSghY2UpKSB7Cj4+PiAr CQlkcm1fZGJnKCZndWNfdG9fZ3QoZ3VjKS0+aTkxNS0+ZHJtLAo+Pj4gKwkJCSJDb250ZXh0IGlz IE5VTEwsIGRlc2NfaWR4ICV1IiwgZGVzY19pZHgpOwo+Pj4gKwkJcmV0dXJuIE5VTEw7Cj4+PiAr CX0KPj4+ICsKPj4+ICsJcmV0dXJuIGNlOwo+Pj4gK30KPj4+ICsKPj4+ICtpbnQgaW50ZWxfZ3Vj X2RlcmVnaXN0ZXJfZG9uZV9wcm9jZXNzX21zZyhzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsCj4+PiAr CQkJCQkgIGNvbnN0IHUzMiAqbXNnLAo+Pj4gKwkJCQkJICB1MzIgbGVuKQo+Pj4gK3sKPj4+ICsJ c3RydWN0IGludGVsX2NvbnRleHQgKmNlOwo+Pj4gKwl1MzIgZGVzY19pZHggPSBtc2dbMF07Cj4+ PiArCj4+PiArCWlmICh1bmxpa2VseShsZW4gPCAxKSkgewo+Pj4gKwkJZHJtX2RiZygmZ3VjX3Rv X2d0KGd1YyktPmk5MTUtPmRybSwgIkludmFsaWQgbGVuZ3RoICV1IiwgbGVuKTsKPj4+ICsJCXJl dHVybiAtRVBST1RPOwo+Pj4gKwl9Cj4+PiArCj4+PiArCWNlID0gZzJoX2NvbnRleHRfbG9va3Vw KGd1YywgZGVzY19pZHgpOwo+Pj4gKwlpZiAodW5saWtlbHkoIWNlKSkKPj4+ICsJCXJldHVybiAt RVBST1RPOwo+Pj4gKwo+Pj4gKwlpZiAoY29udGV4dF93YWl0X2Zvcl9kZXJlZ2lzdGVyX3RvX3Jl Z2lzdGVyKGNlKSkgewo+Pj4gKwkJc3RydWN0IGludGVsX3J1bnRpbWVfcG0gKnJ1bnRpbWVfcG0g PQo+Pj4gKwkJCSZjZS0+ZW5naW5lLT5ndC0+aTkxNS0+cnVudGltZV9wbTsKPj4+ICsJCWludGVs X3dha2VyZWZfdCB3YWtlcmVmOwo+Pj4gKwo+Pj4gKwkJLyoKPj4+ICsJCSAqIFByZXZpb3VzIG93 bmVyIG9mIHRoaXMgZ3VjX2lkIGhhcyBiZWVuIGRlcmVnaXN0ZXJlZCwgbm93IHNhZmUKPj4+ICsJ CSAqIHJlZ2lzdGVyIHRoaXMgY29udGV4dC4KPj4+ICsJCSAqLwo+Pj4gKwkJd2l0aF9pbnRlbF9y dW50aW1lX3BtKHJ1bnRpbWVfcG0sIHdha2VyZWYpCj4+PiArCQkJcmVnaXN0ZXJfY29udGV4dChj ZSk7Cj4+PiArCQljbHJfY29udGV4dF93YWl0X2Zvcl9kZXJlZ2lzdGVyX3RvX3JlZ2lzdGVyKGNl KTsKPj4+ICsJCWludGVsX2NvbnRleHRfcHV0KGNlKTsKPj4+ICsJfSBlbHNlIGlmIChjb250ZXh0 X2Rlc3Ryb3llZChjZSkpIHsKPj4+ICsJCS8qIENvbnRleHQgaGFzIGJlZW4gZGVzdHJveWVkICov Cj4+PiArCQlyZWxlYXNlX2d1Y19pZChndWMsIGNlKTsKPj4+ICsJCWxyY19kZXN0cm95KCZjZS0+ cmVmKTsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwlyZXR1cm4gMDsKPj4+ICt9Cj4+PiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfcmVnLmgKPj4+IGluZGV4IDk0M2ZlNDg1YzY2Mi4uMjA0Yzk1YzM5MzUzIDEwMDY0NAo+ Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+Pj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+Pj4gQEAgLTQxNDIsNiArNDE0Miw3IEBAIGVudW0g ewo+Pj4gICAgCUZBVUxUX0FORF9DT05USU5VRSAvKiBVbnN1cHBvcnRlZCAqLwo+Pj4gICAgfTsK Pj4+ICsjZGVmaW5lIENUWF9HVFRfQUREUkVTU19NQVNLIEdFTk1BU0soMzEsIDEyKQo+Pj4gICAg I2RlZmluZSBHRU44X0NUWF9WQUxJRCAoMSA8PCAwKQo+Pj4gICAgI2RlZmluZSBHRU44X0NUWF9G T1JDRV9QRF9SRVNUT1JFICgxIDw8IDEpCj4+PiAgICAjZGVmaW5lIEdFTjhfQ1RYX0ZPUkNFX1JF U1RPUkUgKDEgPDwgMikKPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X3JlcXVlc3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jCj4+PiBpbmRl eCA4NmI0YzlmMjYxM2QuLmI0OGM0OTA1ZDNmYyAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jCj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3JlcXVlc3QuYwo+Pj4gQEAgLTQwNyw2ICs0MDcsNyBAQCBib29sIGk5MTVfcmVxdWVzdF9y ZXRpcmUoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCj4+PiAgICAJICovCj4+PiAgICAJaWYgKCFs aXN0X2VtcHR5KCZycS0+c2NoZWQubGluaykpCj4+PiAgICAJCXJlbW92ZV9mcm9tX2VuZ2luZShy cSk7Cj4+PiArCWF0b21pY19kZWMoJnJxLT5jb250ZXh0LT5ndWNfaWRfcmVmKTsKPj4gRG9lcyB0 aGlzIHdvcmsvbWFrZSBzZW5zZcKgIGlmIEd1QyBpcyBkaXNhYmxlZD8KPj4KPiBJdCBkb2Vzbid0 IG1hdHRlciBpZiB0aGUgR3VDIGlzIGRpc2FibGVkIGFzIHRoaXMgdmFyIGlzbid0IHVzZWQgaWYg aXQKPiBpcy4gQSBmb2xsb3dpbmcgcGF0Y2ggYWRkcyBhIHZmdW5jIGhlcmUgYW5kIHB1c2hlcyB0 aGlzIGluIHRoZSBHdUMKPiBiYWNrZW5kLgo+Cj4gTWF0dAo+Cj4+IERhbmllbGUKPj4KPj4+ICAg IAlHRU1fQlVHX09OKCFsbGlzdF9lbXB0eSgmcnEtPmV4ZWN1dGVfY2IpKTsKPj4+ICAgIAlfX2xp c3RfZGVsX2VudHJ5KCZycS0+bGluayk7IC8qIHBvaXNvbiBuZWl0aGVyIHByZXYvbmV4dCAoUkNV IHdhbGtzKSAqLwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4 Cg==