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=-12.4 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, UNWANTED_LANGUAGE_BODY,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 257EEC6377A for ; Wed, 21 Jul 2021 23:58:05 +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 E0CB560E0C for ; Wed, 21 Jul 2021 23:58:04 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E0CB560E0C 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 C76A26EB9E; Wed, 21 Jul 2021 23:57:59 +0000 (UTC) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id 32EEC6EB88; Wed, 21 Jul 2021 23:57:58 +0000 (UTC) X-IronPort-AV: E=McAfee;i="6200,9189,10052"; a="191119222" X-IronPort-AV: E=Sophos;i="5.84,259,1620716400"; d="scan'208";a="191119222" Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Jul 2021 16:57:57 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.84,259,1620716400"; d="scan'208";a="433043203" Received: from orsmsx603.amr.corp.intel.com ([10.22.229.16]) by orsmga002.jf.intel.com with ESMTP; 21 Jul 2021 16:57:57 -0700 Received: from orsmsx611.amr.corp.intel.com (10.22.229.24) by ORSMSX603.amr.corp.intel.com (10.22.229.16) 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:57:56 -0700 Received: from orsmsx609.amr.corp.intel.com (10.22.229.22) by ORSMSX611.amr.corp.intel.com (10.22.229.24) 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:57:56 -0700 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by orsmsx609.amr.corp.intel.com (10.22.229.22) 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:57:56 -0700 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (104.47.70.105) by edgegateway.intel.com (134.134.137.100) 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:57:56 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jTPi3FaTBQUE9HVKNreskc6RWFZW0LjBBKVMQaWBMaeW06/ZkNBHzyT6AbERcHe6duC4HsicAggxb2QBmu8ZnHFTMDi8ZCsi+aHUwseqAI7k9RsElhUVE9Zj0yBcIW+AO21G/ehqgDa5sKBCS+/MvuF174HWJarAYsV1dJX0jNQR6VaP4VK2BsQI6B4R4PjyY977ul4rd2uho80AbWdMim2qo/AYKSs3N5v5L2KKEceBPAxBBoUAq5GjeFKJouML/WY0MjqSyWwgQbGISan2CF+Y2N8KYeYrFZL1Ex8lDgwcGK/dXO8VwMelN6M71zevaepPHcuiAH8OC9HqFvFHJg== 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=G20PCCpvd1FpT74JKVueONVmgZurAtz96MvuwRK7n7Q=; b=PJAdSRIoWcvBfPq0ax4OfDl6Rzer7GxbvxiC9Pxkb56AgzBXogmdn1AV9F4Mm8gWZPPBdtzkHyVJqwZXO1bd7ln2T+2mfmL236OXiPeH+JRRryI5cqB1XQzoyVgDPYZBoWdzIsnUnyritVinnUk8IkMgiNLcPDQqk6/Eavl3Hy4+ZHlLXn5KOD/0H7PH7rNJoA4iV6vkwAedjz9RlsdH7VSEv28nWD4T4erWyfym28V5OYRKfikbEMUqXDtfyeO0RK2vm/qfL6keWT/g0bji1eSdEHDbXfuBdVh0FdLC/TlGQc/bom//WwXOdDvZwfvqzc6KLu5eOiZWB+ZtkIz2Ug== 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=G20PCCpvd1FpT74JKVueONVmgZurAtz96MvuwRK7n7Q=; b=Ashp8l1L3sTOJc3U8FkcVCJjHAga+b2ySKlNAAprufRslYjCsQLc+y9D9nM1rE/RUMxOoMQfBstuyzdI8AfDTLchOsBTrTVgW3iLFWlHqG3nEZcoPVSiTV+JPX1iwP/aXuEiJzc0V5CAchblC1f/ErciMhEGu+f/8Tpl+g2mf18= Authentication-Results: lists.freedesktop.org; dkim=none (message not signed) header.d=none; lists.freedesktop.org; dmarc=none action=none header.from=intel.com; Received: from DM4PR11MB5488.namprd11.prod.outlook.com (2603:10b6:5:39d::5) by DM5PR1101MB2235.namprd11.prod.outlook.com (2603:10b6:4:52::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.29; Wed, 21 Jul 2021 23:57:24 +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:57:24 +0000 To: John Harrison , Matthew Brost , , References: <20210720223921.56160-1-matthew.brost@intel.com> <20210720223921.56160-7-matthew.brost@intel.com> From: Daniele Ceraolo Spurio Message-ID: Date: Wed, 21 Jul 2021 16:57:21 -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: Content-Language: en-US X-ClientProxiedBy: CO1PR15CA0052.namprd15.prod.outlook.com (2603:10b6:101:1f::20) 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 CO1PR15CA0052.namprd15.prod.outlook.com (2603:10b6:101:1f::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4352.25 via Frontend Transport; Wed, 21 Jul 2021 23:57:23 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b6227fc1-9f1c-4a56-6e6c-08d94ca348f9 X-MS-TrafficTypeDiagnostic: DM5PR1101MB2235: 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:9508; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 2TyxPRcwRDtFK7ZMcrDAYIcIiDKUBNFhn4ZESd2szXmWdVdTqbGQdFNF0qzwEuFg0q46muYBt50FqhF7XCg2HIzjqRgYOSWZmfIyHb1Zewz4Fa2fXDzhyJJ5A5xn9IyI2w8uK59OVGZtvtYm2wkhwN+BQ0FEVrAXXBrBs0518LINdwgEW78osacJ+QFyyi5z6GjE2y2bE/mvuw5XNyjwU0xXvkDdImLqw6EiWxlvz4zZ1/8GuvJctL9kORAyfC5BkRFjQP2oU+skdui88RVFUQ3uLqaeQoh2YeoCGwSQvlt94hW/2t9dDkXX/h+HZGdErtGPFI+HCjYu3H31gh990TtPyV9OCWlZHIMF8pgx24xrnejuNOsoyyMOrK2CQhMQ9ty5B/Q8uAYWeZnYUCmrgsJlCj52IeW49KvxYPPPlfcQuJuNbhyDS47yBk2RdqcgF59DTtDqCD1d3QZ9y5TLkwyGpKuXG2bEoUkcX1enPb/LvF/LvHI5G0NaMiyXnUF7WpQ7gNMSuIrPiNddZN8itD030j5OSwNMktrRS4LxIrFWP+bzGTOHxgQq2nJwK2dOLSd2OY9EdSabaHMz4WaCqJq7bpJnySWTXCOLTT7J7aNDHNiqJ6ZuVhGX3P0Dhqx16OoJ6A70g6iFOeW9S7F5beb9/oO3ro6IgYtgO5zTTAmN6xQobx+UykQu5DAUuoXW2SyMh0YgIvTnh5aaRXJZ/ojodLKde7DQ0B4GrUWpxx9oKHcH5V+gI5ll48pK80wX2Lx0W4aAaOsXQAUXmkYSefUVelUh/ifC3nfXjWkU4Xg= 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)(366004)(39860400002)(376002)(396003)(136003)(346002)(186003)(8936002)(110136005)(6486002)(316002)(66556008)(31686004)(38100700002)(2616005)(53546011)(16576012)(5660300002)(956004)(66476007)(83380400001)(8676002)(26005)(450100002)(86362001)(30864003)(36756003)(2906002)(31696002)(478600001)(66946007)(21314003)(45980500001)(43740500002)(579004)(309714004); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?NTFzeng5Ukt6Wlh6cHpDc1h0eE4yZ2lqeG14SllQSElwRHlsWlg3WlZBcGI4?= =?utf-8?B?eTN6c1pIclN2VDBQQmpSTmpSaysvd2htaGFnZ1FmaTA0ZDBXMWExZmtBRVFQ?= =?utf-8?B?Q3FVbW1ZMlU1N0Y1NGlyc1dFWHNvSXdYNEpCeU03ODNLcm5QK0N3TEtWTWxN?= =?utf-8?B?SzBtUmY0ejJGdEx5ZXQxWDNITEhZcTZsR1laV2d6Q0ZJenU1WUhLWlYwRWNO?= =?utf-8?B?a0NEQjZBUUZxalR3dXRsRDA2M1UvNnZ1RVFtbER2dnhFOVNvYXpSQWNvdXZj?= =?utf-8?B?c1JQOS9hd1Y2ZzJHSENTR2NGWE82TEU2WHpPR204ZWhhalBPdnFQMjhKc2Qw?= =?utf-8?B?Z2QyVG5uejZDaEpMMWpPNE14N3prVW1yNTh1Mm5JN0VXN09QWDhsUnlNbGlE?= =?utf-8?B?TVBkOHhvUGlxU212Wm9YM2xtWFM0MzFnT0JuVXRCRm5ZLzZOOWpBdmwxNXdp?= =?utf-8?B?ZVhXM294SUFQYkZPVlBCOHdtaWZqdmlJREFjWExSYlhOdklZYTZCdzlkOXdF?= =?utf-8?B?NUxMM1dMUEhYMWRmUnh2ZVF4WnhWUkdJWkZkMXczQVVXUGZUNzNrbFpkZHN3?= =?utf-8?B?am1jK1NtOWMyZjE4YldmSDlUcDdUSklMMnU2Y1AvL3RLUjY3cVB2V1hiWFgx?= =?utf-8?B?Mkd1ZVdlVEl2SU50cHp1cDZhd3V0U3F3Q3JwMENKZnBYRFYrTUM1Y1prRjZB?= =?utf-8?B?czdKNXN5bFpWcnF1Vy9lMUpra1ZvK1NGQ3ByOUtHbkRUN0xESm12aFpDZzNh?= =?utf-8?B?Um1JTjdjTThleXNyc1JzTUsvcjNZNUdZTjkvQzlQWFlZNzM0Zk1nNkVackZs?= =?utf-8?B?cVhSY0puclJyTDBkaHFsMmh0cWkrd05CYjZ4YjUrSkZUMFRGQjRRS0VyWFo3?= =?utf-8?B?ekF1MlhncnMrbHAyOExLZ1dGa2pqUFFuRGJMZmtlMGhWMS9GK2RkbHFhZFN5?= =?utf-8?B?QWFaVUZqdkVEY2FmN01aUmxtODRSRU0wQmhKSGRXWkl3aDE4VzA1aGs5cEln?= =?utf-8?B?bmVmRDlhcEJaS0d6NU03TFZicGxqeldFRS9JbWgvWUVtNUpBNlpnZDZLUWQ4?= =?utf-8?B?SEM0SGt4VzlJVmNIbWR5bkpIa1llZC9aYUNoY0Z6em9wcktkcWIycHZ6Zndi?= =?utf-8?B?aGpOKzlMRUNqYmhyMjI4UTVKUXdsQWE2WWxSVGNKSTVVZkIxaklDdlBFVmd5?= =?utf-8?B?bmxKdzZwL1FKQm5YdWl5cjNzZld0ZHFiUW5DRFdLQ3Z5d0JLSzNSVzlaVzFu?= =?utf-8?B?Y3IzblduY284SWNCMEF1Rlg4N2VFeWZkbGFYQ0ZSWWN6djVlakxDQjJHc01m?= =?utf-8?B?SE4zMXgyWUQ1aWpiRHVjc01uWVhFVFFkWE5EcDI5NDdNck5tbEZocHlqKzcz?= =?utf-8?B?bWdRcWQ0LytvMmNWZC9NS05mNStKZ3hjcmNRQUQ3L2hMNElSVDNOaGVXdHJP?= =?utf-8?B?d0QxdElYTGk0SFA4dm5pKzlFa3FoNU1YSk1ab0M5TWZFRlQrUU1FVmVaNlhh?= =?utf-8?B?YTdxVE5aNEdSWE9tRXN0U3dMekkrWGJBRnc1NmtvbzV0MHNiZ1hLK01hTFF2?= =?utf-8?B?ZDFBd051VDdLTEk4UlBMb0V6V2Q1MUtkQmV6bzZsVVlWV1RQbDlJaHVlLytu?= =?utf-8?B?RmtzMGNyQmtPTytoQ1YxdUFFcVQ1T2hZT2F6ZGJydzR6T0cyeUJUdmo1K0lx?= =?utf-8?B?a1NsL21PVjUrNlF5RDhvaVlPQXZKNGRwRU1vd29pREwwWVNJcENrSXRjU0lL?= =?utf-8?Q?frlE0+LmzDS7HLAkkdgmjA85/9RpcTv3uDrNHr8?= X-MS-Exchange-CrossTenant-Network-Message-Id: b6227fc1-9f1c-4a56-6e6c-08d94ca348f9 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:57:24.0070 (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: LtQFzqu/OZSa5HuAl3UUjy8ilvw3W2GlzImIoXfYJICPdBbAeZWTqYI94vwkSZsPi0efI4QdFnjvqVCCNK4KilQQR4mfTAX+EnywDzIidUU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR1101MB2235 X-OriginatorOrg: intel.com Subject: Re: [Intel-gfx] [PATCH 06/18] 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: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" CgpPbiA3LzIwLzIwMjEgNjo1MSBQTSwgSm9obiBIYXJyaXNvbiB3cm90ZToKPiBPbiA3LzIwLzIw MjEgMTU6MzksIE1hdHRoZXcgQnJvc3Qgd3JvdGU6Cj4+IEltcGxlbWVudCBHdUMgY29udGV4dCBv cGVyYXRpb25zIHdoaWNoIGluY2x1ZGVzIEd1QyBzcGVjaWZpYyBvcGVyYXRpb25zCj4+IGFsbG9j LCBwaW4sIHVucGluLCBhbmQgZGVzdHJveS4KPj4KPj4gdjI6Cj4+IMKgIChEYW5pZWwgVmV0dGVy KQo+PiDCoMKgIC0gVXNlIG1zbGVlcF9pbnRlcnJ1cHRpYmxlIHJhdGhlciB0aGFuIGNvbmRfcmVz Y2hlZCBpbiBidXN5IGxvb3AKPj4gwqAgKE1pY2hhbCkKPj4gwqDCoCAtIFJlbW92ZSBDKysgc3R5 bGUgY29tbWVudAo+PiB2MzoKPj4gwqAgKE1hdHRoZXcgQnJvc3QpCj4+IMKgwqAgLSBEcm9wIEdV Q19JRF9TVEFSVAo+PiDCoCAoSm9obiBIYXJyaXNvbikKPj4gwqDCoCAtIEZpeCBhIGJ1bmNoIG9m IHR5cG9zCj4+IMKgwqAgLSBVc2UgZHJtX2VyciByYXRoZXIgdGhhbiBkcm1fZGJnIGZvciBHMkgg ZXJyb3JzCj4+IMKgIChEYW5pZWxlKQo+PiDCoMKgIC0gRml4IDs7IHR5cG8KPj4gwqDCoCAtIENs ZWFuIHVwIHNjaGVkIHN0YXRlIGZ1bmN0aW9ucwo+PiDCoMKgIC0gQWRkIGxvY2tkZXAgZm9yIGd1 Y19pZCBmdW5jdGlvbnMKPj4gwqDCoCAtIERvbid0IGNhbGwgX19yZWxlYXNlX2d1Y19pZCB3aGVu IGd1Y19pZCBpcyBpbnZhbGlkCj4+IMKgwqAgLSBVc2UgTUlTU0lOR19DQVNFCj4+IMKgwqAgLSBB ZGQgY29tbWVudCBpbiBndWNfY29udGV4dF9waW4KPj4gwqDCoCAtIFVzZSBzaG9ydGVyIHBhdGgg dG8gcnBtCj4+IMKgIChEYW5pZWxlIC8gQ0kpCj4+IMKgwqAgLSBEb24ndCBjYWxsIHJlbGVhc2Vf Z3VjX2lkIG9uIGFuIGludmFsaWQgZ3VjX2lkIGluIGRlc3Ryb3kKPj4KPj4gU2lnbmVkLW9mZi1i eTogSm9obiBIYXJyaXNvbiA8Sm9obi5DLkhhcnJpc29uQEludGVsLmNvbT4KPj4gU2lnbmVkLW9m Zi1ieTogTWF0dGhldyBCcm9zdCA8bWF0dGhldy5icm9zdEBpbnRlbC5jb20+Cj4+IC0tLQo+PiDC oCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9jb250ZXh0LmPCoMKgwqDCoMKgwqAgfMKg wqAgNSArCj4+IMKgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2NvbnRleHRfdHlwZXMu aCB8wqAgMjIgKy0KPj4gwqAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjX3JlZy5o wqDCoMKgwqDCoMKgIHzCoMKgIDEgLQo+PiDCoCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9p bnRlbF9ndWMuaMKgwqDCoMKgwqDCoMKgIHzCoCA0MCArKwo+PiDCoCBkcml2ZXJzL2dwdS9kcm0v aTkxNS9ndC91Yy9pbnRlbF9ndWNfY3QuY8KgwqDCoMKgIHzCoMKgIDQgKwo+PiDCoCAuLi4vZ3B1 L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19zdWJtaXNzaW9uLmMgfCA2NjcgKysrKysrKysrKysr KysrKy0tCj4+IMKgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmjCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHzCoMKgIDEgKwo+PiDCoCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X3JlcXVlc3QuY8KgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDEgKwo+PiDCoCA4IGZpbGVzIGNo YW5nZWQsIDY4NiBpbnNlcnRpb25zKCspLCA1NSBkZWxldGlvbnMoLSkKPj4KPj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2NvbnRleHQuYyAKPj4gYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9jb250ZXh0LmMKPj4gaW5kZXggYmQ2MzgxM2M4YTgwLi4z MmZkNjY0NzE1NGIgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X2NvbnRleHQuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9jb250ZXh0 LmMKPj4gQEAgLTM4NCw2ICszODQsMTEgQEAgaW50ZWxfY29udGV4dF9pbml0KHN0cnVjdCBpbnRl bF9jb250ZXh0ICpjZSwgCj4+IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPj4gwqAg wqDCoMKgwqDCoCBtdXRleF9pbml0KCZjZS0+cGluX211dGV4KTsKPj4gwqAgK8KgwqDCoCBzcGlu X2xvY2tfaW5pdCgmY2UtPmd1Y19zdGF0ZS5sb2NrKTsKPj4gKwo+PiArwqDCoMKgIGNlLT5ndWNf aWQgPSBHVUNfSU5WQUxJRF9MUkNfSUQ7Cj4+ICvCoMKgwqAgSU5JVF9MSVNUX0hFQUQoJmNlLT5n dWNfaWRfbGluayk7Cj4+ICsKPj4gwqDCoMKgwqDCoCBpOTE1X2FjdGl2ZV9pbml0KCZjZS0+YWN0 aXZlLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9faW50ZWxfY29udGV4dF9hY3Rp dmUsIF9faW50ZWxfY29udGV4dF9yZXRpcmUsIDApOwo+PiDCoCB9Cj4+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9jb250ZXh0X3R5cGVzLmggCj4+IGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfY29udGV4dF90eXBlcy5oCj4+IGluZGV4IDZkOTk2MzFk MTliOS4uNjA2YzQ4MGFlYzI2IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC9pbnRlbF9jb250ZXh0X3R5cGVzLmgKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv aW50ZWxfY29udGV4dF90eXBlcy5oCj4+IEBAIC05Niw2ICs5Niw3IEBAIHN0cnVjdCBpbnRlbF9j b250ZXh0IHsKPj4gwqAgI2RlZmluZSBDT05URVhUX0JBTk5FRMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgNgo+PiDCoCAjZGVmaW5lIENPTlRFWFRfRk9SQ0VfU0lOR0xFX1NVQk1JU1NJT07CoMKgwqAg Nwo+PiDCoCAjZGVmaW5lIENPTlRFWFRfTk9QUkVFTVBUwqDCoMKgwqDCoMKgwqAgOAo+PiArI2Rl ZmluZSBDT05URVhUX0xSQ0FfRElSVFnCoMKgwqDCoMKgwqDCoCA5Cj4+IMKgIMKgwqDCoMKgwqAg c3RydWN0IHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHU2NCB0aW1lb3V0X3VzOwo+PiBAQCAtMTM4 LDE0ICsxMzksMjkgQEAgc3RydWN0IGludGVsX2NvbnRleHQgewo+PiDCoCDCoMKgwqDCoMKgIHU4 IHdhX2JiX3BhZ2U7IC8qIGlmIHNldCwgcGFnZSBudW0gcmVzZXJ2ZWQgZm9yIGNvbnRleHQgCj4+ IHdvcmthcm91bmRzICovCj4+IMKgICvCoMKgwqAgc3RydWN0IHsKPj4gK8KgwqDCoMKgwqDCoMKg IC8qKiBsb2NrOiBwcm90ZWN0cyBldmVyeXRoaW5nIGluIGd1Y19zdGF0ZSAqLwo+PiArwqDCoMKg wqDCoMKgwqAgc3BpbmxvY2tfdCBsb2NrOwo+PiArwqDCoMKgwqDCoMKgwqAgLyoqCj4+ICvCoMKg wqDCoMKgwqDCoMKgICogc2NoZWRfc3RhdGU6IHNjaGVkdWxpbmcgc3RhdGUgb2YgdGhpcyBjb250 ZXh0IHVzaW5nIEd1Qwo+PiArwqDCoMKgwqDCoMKgwqDCoCAqIHN1Ym1pc3Npb24KPj4gK8KgwqDC oMKgwqDCoMKgwqAgKi8KPj4gK8KgwqDCoMKgwqDCoMKgIHU4IHNjaGVkX3N0YXRlOwo+PiArwqDC oMKgIH0gZ3VjX3N0YXRlOwo+PiArCj4+IMKgwqDCoMKgwqAgLyogR3VDIHNjaGVkdWxpbmcgc3Rh dGUgZmxhZ3MgdGhhdCBkbyBub3QgcmVxdWlyZSBhIGxvY2suICovCj4+IMKgwqDCoMKgwqAgYXRv bWljX3QgZ3VjX3NjaGVkX3N0YXRlX25vX2xvY2s7Cj4+IMKgICvCoMKgwqAgLyogR3VDIExSQyBk ZXNjcmlwdG9yIElEICovCj4+ICvCoMKgwqAgdTE2IGd1Y19pZDsKPj4gKwo+PiArwqDCoMKgIC8q IEd1QyBMUkMgZGVzY3JpcHRvciByZWZlcmVuY2UgY291bnQgKi8KPj4gK8KgwqDCoCBhdG9taWNf dCBndWNfaWRfcmVmOwo+PiArCj4+IMKgwqDCoMKgwqAgLyoKPj4gLcKgwqDCoMKgICogR3VDIExS QyBkZXNjcmlwdG9yIElEIC0gTm90IGFzc2lnbmVkIGluIHRoaXMgcGF0Y2ggYnV0IGZ1dHVyZSAK Pj4gcGF0Y2hlcwo+PiAtwqDCoMKgwqAgKiBpbiB0aGUgc2VyaWVzIHdpbGwuCj4+ICvCoMKgwqDC oCAqIEd1QyBJRCBsaW5rIC0gaW4gbGlzdCB3aGVuIHVucGlubmVkIGJ1dCBndWNfaWQgc3RpbGwg dmFsaWQgaW4gCj4+IEd1Qwo+PiDCoMKgwqDCoMKgwqAgKi8KPj4gLcKgwqDCoCB1MTYgZ3VjX2lk Owo+PiArwqDCoMKgIHN0cnVjdCBsaXN0X2hlYWQgZ3VjX2lkX2xpbms7Cj4+IMKgIH07Cj4+IMKg IMKgICNlbmRpZiAvKiBfX0lOVEVMX0NPTlRFWFRfVFlQRVNfXyAqLwo+PiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjX3JlZy5oIAo+PiBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L2ludGVsX2xyY19yZWcuaAo+PiBpbmRleCA0MWU1MzUwYTdhMDUuLjQ5ZDQ4 NTdhZDliNyAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJj X3JlZy5oCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xyY19yZWcuaAo+ PiBAQCAtODcsNyArODcsNiBAQAo+PiDCoCAjZGVmaW5lIEdFTjExX0NTQl9XUklURV9QVFJfTUFT S8KgwqDCoCAoR0VOMTFfQ1NCX1BUUl9NQVNLIDw8IDApCj4+IMKgIMKgICNkZWZpbmUgTUFYX0NP TlRFWFRfSFdfSUTCoMKgwqAgKDEgPDwgMjEpIC8qIGV4Y2x1c2l2ZSAqLwo+PiAtI2RlZmluZSBN QVhfR1VDX0NPTlRFWFRfSFdfSUTCoMKgwqAgKDEgPDwgMjApIC8qIGV4Y2x1c2l2ZSAqLwo+PiDC oCAjZGVmaW5lIEdFTjExX01BWF9DT05URVhUX0hXX0lEwqDCoMKgICgxIDw8IDExKSAvKiBleGNs dXNpdmUgKi8KPj4gwqAgLyogaW4gR2VuMTIgSUQgMHg3RkYgaXMgcmVzZXJ2ZWQgdG8gaW5kaWNh dGUgaWRsZSAqLwo+PiDCoCAjZGVmaW5lIEdFTjEyX01BWF9DT05URVhUX0hXX0lEwqDCoMKgIChH RU4xMV9NQVhfQ09OVEVYVF9IV19JRCAtIDEpCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC91Yy9pbnRlbF9ndWMuaCAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91 Yy9pbnRlbF9ndWMuaAo+PiBpbmRleCA4YzdiOTJmNjk5ZjEuLjMwNzczY2Q2OTlmNSAxMDA2NDQK Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjLmgKPj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjLmgKPj4gQEAgLTcsNiArNyw3IEBA Cj4+IMKgICNkZWZpbmUgX0lOVEVMX0dVQ19IXwo+PiDCoCDCoCAjaW5jbHVkZSA8bGludXgveGFy cmF5Lmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KPj4gwqAgwqAgI2luY2x1ZGUgImlu dGVsX3VuY29yZS5oIgo+PiDCoCAjaW5jbHVkZSAiaW50ZWxfZ3VjX2Z3LmgiCj4+IEBAIC00NCw2 ICs0NSwxNCBAQCBzdHJ1Y3QgaW50ZWxfZ3VjIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHZvaWQg KCpkaXNhYmxlKShzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpOwo+PiDCoMKgwqDCoMKgIH0gaW50ZXJy dXB0czsKPj4gwqAgK8KgwqDCoCAvKgo+PiArwqDCoMKgwqAgKiBjb250ZXh0c19sb2NrIHByb3Rl Y3RzIHRoZSBwb29sIG9mIGZyZWUgZ3VjIGlkcyBhbmQgYSBsaW5rZWQgCj4+IGxpc3Qgb2YKPj4g K8KgwqDCoMKgICogZ3VjIGlkcyBhdmFpbGFibGUgdG8gYmUgc3RvbGVuCj4+ICvCoMKgwqDCoCAq Lwo+PiArwqDCoMKgIHNwaW5sb2NrX3QgY29udGV4dHNfbG9jazsKPj4gK8KgwqDCoCBzdHJ1Y3Qg aWRhIGd1Y19pZHM7Cj4+ICvCoMKgwqAgc3RydWN0IGxpc3RfaGVhZCBndWNfaWRfbGlzdDsKPj4g Kwo+PiDCoMKgwqDCoMKgIGJvb2wgc3VibWlzc2lvbl9zZWxlY3RlZDsKPj4gwqAgwqDCoMKgwqDC oCBzdHJ1Y3QgaTkxNV92bWEgKmFkc192bWE7Cj4+IEBAIC0xMDEsNiArMTEwLDM0IEBAIGludGVs X2d1Y19zZW5kX2FuZF9yZWNlaXZlKHN0cnVjdCBpbnRlbF9ndWMgCj4+ICpndWMsIGNvbnN0IHUz MiAqYWN0aW9uLCB1MzIgbGVuLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcmVzcG9uc2VfYnVmLCByZXNwb25zZV9idWZfc2l6ZSwgMCk7Cj4+IMKgIH0KPj4gwqAgK3N0 YXRpYyBpbmxpbmUgaW50IGludGVsX2d1Y19zZW5kX2J1c3lfbG9vcChzdHJ1Y3QgaW50ZWxfZ3Vj KiBndWMsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBj b25zdCB1MzIgKmFjdGlvbiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHUzMiBsZW4sCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBib29sIGxvb3ApCj4+ICt7Cj4+ICvCoMKgwqAgaW50IGVycjsKPj4gK8KgwqDC oCB1bnNpZ25lZCBpbnQgc2xlZXBfcGVyaW9kX21zID0gMTsKPj4gK8KgwqDCoCBib29sIG5vdF9h dG9taWMgPSAhaW5fYXRvbWljKCkgJiYgIWlycXNfZGlzYWJsZWQoKTsKPj4gKwo+PiArwqDCoMKg IC8qIE5vIHNsZWVwaW5nIHdpdGggc3BpbiBsb2NrcywganVzdCBidXN5IGxvb3AgKi8KPj4gK8Kg wqDCoCBtaWdodF9zbGVlcF9pZihsb29wICYmIG5vdF9hdG9taWMpOwo+PiArCj4+ICtyZXRyeToK Pj4gK8KgwqDCoCBlcnIgPSBpbnRlbF9ndWNfc2VuZF9uYihndWMsIGFjdGlvbiwgbGVuKTsKPj4g K8KgwqDCoCBpZiAodW5saWtlbHkoZXJyID09IC1FQlVTWSAmJiBsb29wKSkgewo+PiArwqDCoMKg wqDCoMKgwqAgaWYgKGxpa2VseShub3RfYXRvbWljKSkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBpZiAobXNsZWVwX2ludGVycnVwdGlibGUoc2xlZXBfcGVyaW9kX21zKSkKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlRSOwo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBzbGVlcF9wZXJpb2RfbXMgPSBzbGVlcF9wZXJpb2RfbXMgPDwgMTsKPj4gK8Kg wqDCoMKgwqDCoMKgIH0gZWxzZSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNwdV9yZWxh eCgpOwo+PiArwqDCoMKgwqDCoMKgwqAgfQo+PiArwqDCoMKgwqDCoMKgwqAgZ290byByZXRyeTsK Pj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gZXJyOwo+PiArfQo+PiArCj4+IMKg IHN0YXRpYyBpbmxpbmUgdm9pZCBpbnRlbF9ndWNfdG9faG9zdF9ldmVudF9oYW5kbGVyKHN0cnVj dCBpbnRlbF9ndWMgCj4+ICpndWMpCj4+IMKgIHsKPj4gwqDCoMKgwqDCoCBpbnRlbF9ndWNfY3Rf ZXZlbnRfaGFuZGxlcigmZ3VjLT5jdCk7Cj4+IEBAIC0yMDIsNiArMjM5LDkgQEAgc3RhdGljIGlu bGluZSB2b2lkIGludGVsX2d1Y19kaXNhYmxlX21zZyhzdHJ1Y3QgCj4+IGludGVsX2d1YyAqZ3Vj LCB1MzIgbWFzaykKPj4gwqAgaW50IGludGVsX2d1Y19yZXNldF9lbmdpbmUoc3RydWN0IGludGVs X2d1YyAqZ3VjLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUpOwo+PiDCoCAraW50IGludGVsX2d1Y19kZXJlZ2lzdGVyX2Rv bmVfcHJvY2Vzc19tc2coc3RydWN0IGludGVsX2d1YyAqZ3VjLAo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0IHUzMiAqbXNnLCB1MzIgbGVuKTsKPj4g Kwo+PiDCoCB2b2lkIGludGVsX2d1Y19sb2FkX3N0YXR1cyhzdHJ1Y3QgaW50ZWxfZ3VjICpndWMs IHN0cnVjdCAKPj4gZHJtX3ByaW50ZXIgKnApOwo+PiDCoCDCoCAjZW5kaWYKPj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19jdC5jIAo+PiBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19jdC5jCj4+IGluZGV4IDgzZWM2MGVhM2Y4 OS4uMjhmZjgyYzViZTQ1IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91 Yy9pbnRlbF9ndWNfY3QuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRl bF9ndWNfY3QuYwo+PiBAQCAtOTI4LDYgKzkyOCwxMCBAQCBzdGF0aWMgaW50IGN0X3Byb2Nlc3Nf cmVxdWVzdChzdHJ1Y3QgCj4+IGludGVsX2d1Y19jdCAqY3QsIHN0cnVjdCBjdF9pbmNvbWluZ19t c2cgKnIKPj4gwqDCoMKgwqDCoCBjYXNlIElOVEVMX0dVQ19BQ1RJT05fREVGQVVMVDoKPj4gwqDC oMKgwqDCoMKgwqDCoMKgIHJldCA9IGludGVsX2d1Y190b19ob3N0X3Byb2Nlc3NfcmVjdl9tc2co Z3VjLCBwYXlsb2FkLCBsZW4pOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKg wqAgY2FzZSBJTlRFTF9HVUNfQUNUSU9OX0RFUkVHSVNURVJfQ09OVEVYVF9ET05FOgo+PiArwqDC oMKgwqDCoMKgwqAgcmV0ID0gaW50ZWxfZ3VjX2RlcmVnaXN0ZXJfZG9uZV9wcm9jZXNzX21zZyhn dWMsIHBheWxvYWQsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsZW4pOwo+PiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ IMKgwqDCoMKgwqAgZGVmYXVsdDoKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IC1FT1BOT1RT VVBQOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfc3VibWlzc2lvbi5jIAo+PiBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19zdWJtaXNzaW9uLmMKPj4gaW5kZXggNTNiNGE1 ZWI0YTg1Li42OTQwYjlkNjIxMTggMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L3VjL2ludGVsX2d1Y19zdWJtaXNzaW9uLmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3QvdWMvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYwo+PiBAQCAtMTMsNyArMTMsOSBAQAo+PiDC oCAjaW5jbHVkZSAiZ3QvaW50ZWxfZ3QuaCIKPj4gwqAgI2luY2x1ZGUgImd0L2ludGVsX2d0X2ly cS5oIgo+PiDCoCAjaW5jbHVkZSAiZ3QvaW50ZWxfZ3RfcG0uaCIKPj4gKyNpbmNsdWRlICJndC9p bnRlbF9ndF9yZXF1ZXN0cy5oIgo+PiDCoCAjaW5jbHVkZSAiZ3QvaW50ZWxfbHJjLmgiCj4+ICsj aW5jbHVkZSAiZ3QvaW50ZWxfbHJjX3JlZy5oIgo+PiDCoCAjaW5jbHVkZSAiZ3QvaW50ZWxfbW9j cy5oIgo+PiDCoCAjaW5jbHVkZSAiZ3QvaW50ZWxfcmluZy5oIgo+PiDCoCBAQCAtODUsNiArODcs NzIgQEAgc3RhdGljIGlubGluZSB2b2lkIGNscl9jb250ZXh0X2VuYWJsZWQoc3RydWN0IAo+PiBp bnRlbF9jb250ZXh0ICpjZSkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZjZS0+Z3VjX3Nj aGVkX3N0YXRlX25vX2xvY2spOwo+PiDCoCB9Cj4+IMKgICsvKgo+PiArICogQmVsb3cgaXMgYSBz ZXQgb2YgZnVuY3Rpb25zIHdoaWNoIGNvbnRyb2wgdGhlIEd1QyBzY2hlZHVsaW5nIAo+PiBzdGF0 ZSB3aGljaAo+PiArICogcmVxdWlyZSBhIGxvY2ssIGFzaWRlIGZyb20gdGhlIHNwZWNpYWwgY2Fz ZSB3aGVyZSB0aGUgZnVuY3Rpb25zIAo+PiBhcmUgY2FsbGVkCj4+ICsgKiBmcm9tIGd1Y19scmNf ZGVzY19waW4oKS4gSW4gdGhhdCBjYXNlIGl0IGlzbid0IHBvc3NpYmxlIGZvciBhbnkgCj4+IG90 aGVyIGNvZGUKPj4gKyAqIHBhdGggdG8gYmUgZXhlY3V0aW5nIG9uIHRoZSBjb250ZXh0Lgo+PiAr ICovCj4+ICsjZGVmaW5lIFNDSEVEX1NUQVRFX1dBSVRfRk9SX0RFUkVHSVNURVJfVE9fUkVHSVNU RVLCoMKgwqAgQklUKDApCj4+ICsjZGVmaW5lIFNDSEVEX1NUQVRFX0RFU1RST1lFRMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCSVQoMSkKPj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0 X3NjaGVkX3N0YXRlKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSkKPj4gK3sKPj4gK8KgwqDCoCAv KiBPbmx5IHNob3VsZCBiZSBjYWxsZWQgZnJvbSBndWNfbHJjX2Rlc2NfcGluKCkgKi8KPj4gK8Kg wqDCoCBhdG9taWNfc2V0KCZjZS0+Z3VjX3NjaGVkX3N0YXRlX25vX2xvY2ssIDApOwo+PiArwqDC oMKgIGNlLT5ndWNfc3RhdGUuc2NoZWRfc3RhdGUgPSAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg aW5saW5lIGJvb2wKPj4gK2NvbnRleHRfd2FpdF9mb3JfZGVyZWdpc3Rlcl90b19yZWdpc3Rlcihz dHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpCj4+ICt7Cj4+ICvCoMKgwqAgcmV0dXJuIGNlLT5ndWNf c3RhdGUuc2NoZWRfc3RhdGUgJgo+PiArwqDCoMKgwqDCoMKgwqAgU0NIRURfU1RBVEVfV0FJVF9G T1JfREVSRUdJU1RFUl9UT19SRUdJU1RFUjsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlubGluZSB2 b2lkCj4+ICtzZXRfY29udGV4dF93YWl0X2Zvcl9kZXJlZ2lzdGVyX3RvX3JlZ2lzdGVyKHN0cnVj dCBpbnRlbF9jb250ZXh0ICpjZSkKPj4gK3sKPj4gK8KgwqDCoCAvKiBPbmx5IHNob3VsZCBiZSBj YWxsZWQgZnJvbSBndWNfbHJjX2Rlc2NfcGluKCkgKi8KPj4gK8KgwqDCoCBjZS0+Z3VjX3N0YXRl LnNjaGVkX3N0YXRlIHw9Cj4+ICvCoMKgwqDCoMKgwqDCoCBTQ0hFRF9TVEFURV9XQUlUX0ZPUl9E RVJFR0lTVEVSX1RPX1JFR0lTVEVSOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW5saW5lIHZvaWQK Pj4gK2Nscl9jb250ZXh0X3dhaXRfZm9yX2RlcmVnaXN0ZXJfdG9fcmVnaXN0ZXIoc3RydWN0IGlu dGVsX2NvbnRleHQgKmNlKQo+PiArewo+PiArwqDCoMKgIGxvY2tkZXBfYXNzZXJ0X2hlbGQoJmNl LT5ndWNfc3RhdGUubG9jayk7Cj4+ICvCoMKgwqAgY2UtPmd1Y19zdGF0ZS5zY2hlZF9zdGF0ZSAm PQo+PiArwqDCoMKgwqDCoMKgwqAgflNDSEVEX1NUQVRFX1dBSVRfRk9SX0RFUkVHSVNURVJfVE9f UkVHSVNURVI7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgYm9vbAo+PiArY29udGV4dF9k ZXN0cm95ZWQoc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQo+PiArewo+PiArwqDCoMKgIHJldHVy biBjZS0+Z3VjX3N0YXRlLnNjaGVkX3N0YXRlICYgU0NIRURfU1RBVEVfREVTVFJPWUVEOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgaW5saW5lIHZvaWQKPj4gK3NldF9jb250ZXh0X2Rlc3Ryb3llZChz dHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpCj4+ICt7Cj4+ICvCoMKgwqAgbG9ja2RlcF9hc3NlcnRf aGVsZCgmY2UtPmd1Y19zdGF0ZS5sb2NrKTsKPj4gK8KgwqDCoCBjZS0+Z3VjX3N0YXRlLnNjaGVk X3N0YXRlIHw9IFNDSEVEX1NUQVRFX0RFU1RST1lFRDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlu bGluZSBib29sIGNvbnRleHRfZ3VjX2lkX2ludmFsaWQoc3RydWN0IGludGVsX2NvbnRleHQgKmNl KQo+PiArewo+PiArwqDCoMKgIHJldHVybiAoY2UtPmd1Y19pZCA9PSBHVUNfSU5WQUxJRF9MUkNf SUQpOwo+IENvdWxkIGhhdmUgZHJvcHBlZCB0aGUgYnJhY2tldHMgZnJvbSB0aGlzIG9uZSB0b28u Cj4KPj4gK30KPj4gKwo+PiArc3RhdGljIGlubGluZSB2b2lkIHNldF9jb250ZXh0X2d1Y19pZF9p bnZhbGlkKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSkKPj4gK3sKPj4gK8KgwqDCoCBjZS0+Z3Vj X2lkID0gR1VDX0lOVkFMSURfTFJDX0lEOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW5saW5lIHN0 cnVjdCBpbnRlbF9ndWMgKmNlX3RvX2d1YyhzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpCj4+ICt7 Cj4+ICvCoMKgwqAgcmV0dXJuICZjZS0+ZW5naW5lLT5ndC0+dWMuZ3VjOwo+PiArfQo+PiArCj4+ IMKgIHN0YXRpYyBpbmxpbmUgc3RydWN0IGk5MTVfcHJpb2xpc3QgKnRvX3ByaW9saXN0KHN0cnVj dCByYl9ub2RlICpyYikKPj4gwqAgewo+PiDCoMKgwqDCoMKgIHJldHVybiByYl9lbnRyeShyYiwg c3RydWN0IGk5MTVfcHJpb2xpc3QsIG5vZGUpOwo+PiBAQCAtMTU1LDYgKzIyMyw5IEBAIHN0YXRp YyBpbnQgZ3VjX2FkZF9yZXF1ZXN0KHN0cnVjdCBpbnRlbF9ndWMgKmd1YywgCj4+IHN0cnVjdCBp OTE1X3JlcXVlc3QgKnJxKQo+PiDCoMKgwqDCoMKgIGludCBsZW4gPSAwOwo+PiDCoMKgwqDCoMKg IGJvb2wgZW5hYmxlZCA9IGNvbnRleHRfZW5hYmxlZChjZSk7Cj4+IMKgICvCoMKgwqAgR0VNX0JV R19PTighYXRvbWljX3JlYWQoJmNlLT5ndWNfaWRfcmVmKSk7Cj4+ICvCoMKgwqAgR0VNX0JVR19P Tihjb250ZXh0X2d1Y19pZF9pbnZhbGlkKGNlKSk7Cj4+ICsKPj4gwqDCoMKgwqDCoCBpZiAoIWVu YWJsZWQpIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGFjdGlvbltsZW4rK10gPSBJTlRFTF9HVUNf QUNUSU9OX1NDSEVEX0NPTlRFWFRfTU9ERV9TRVQ7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBhY3Rp b25bbGVuKytdID0gY2UtPmd1Y19pZDsKPj4gQEAgLTQxNyw2ICs0ODgsMTAgQEAgaW50IGludGVs X2d1Y19zdWJtaXNzaW9uX2luaXQoc3RydWN0IGludGVsX2d1YyAKPj4gKmd1YykKPj4gwqAgwqDC oMKgwqDCoCB4YV9pbml0X2ZsYWdzKCZndWMtPmNvbnRleHRfbG9va3VwLCBYQV9GTEFHU19MT0NL X0lSUSk7Cj4+IMKgICvCoMKgwqAgc3Bpbl9sb2NrX2luaXQoJmd1Yy0+Y29udGV4dHNfbG9jayk7 Cj4+ICvCoMKgwqAgSU5JVF9MSVNUX0hFQUQoJmd1Yy0+Z3VjX2lkX2xpc3QpOwo+PiArwqDCoMKg IGlkYV9pbml0KCZndWMtPmd1Y19pZHMpOwo+PiArCj4+IMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4+ IMKgIH0KPj4gwqAgQEAgLTQyOSw5ICs1MDQsMzA1IEBAIHZvaWQgaW50ZWxfZ3VjX3N1Ym1pc3Np b25fZmluaShzdHJ1Y3QgCj4+IGludGVsX2d1YyAqZ3VjKQo+PiDCoMKgwqDCoMKgIGk5MTVfc2No ZWRfZW5naW5lX3B1dChndWMtPnNjaGVkX2VuZ2luZSk7Cj4+IMKgIH0KPj4gwqAgLXN0YXRpYyBp bnQgZ3VjX2NvbnRleHRfYWxsb2Moc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQo+PiArc3RhdGlj IGlubGluZSB2b2lkIHF1ZXVlX3JlcXVlc3Qoc3RydWN0IGk5MTVfc2NoZWRfZW5naW5lIAo+PiAq c2NoZWRfZW5naW5lLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0 IGk5MTVfcmVxdWVzdCAqcnEsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBp bnQgcHJpbykKPj4gwqAgewo+PiAtwqDCoMKgIHJldHVybiBscmNfYWxsb2MoY2UsIGNlLT5lbmdp bmUpOwo+PiArwqDCoMKgIEdFTV9CVUdfT04oIWxpc3RfZW1wdHkoJnJxLT5zY2hlZC5saW5rKSk7 Cj4+ICvCoMKgwqAgbGlzdF9hZGRfdGFpbCgmcnEtPnNjaGVkLmxpbmssCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBpOTE1X3NjaGVkX2xvb2t1cF9wcmlvbGlzdChzY2hlZF9lbmdpbmUs IHByaW8pKTsKPj4gK8KgwqDCoCBzZXRfYml0KEk5MTVfRkVOQ0VfRkxBR19QUVVFVUUsICZycS0+ ZmVuY2UuZmxhZ3MpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGd1Y19ieXBhc3NfdGFza2xl dF9zdWJtaXQoc3RydWN0IGludGVsX2d1YyAqZ3VjLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKPj4gK3sKPj4gK8Kg wqDCoCBpbnQgcmV0Owo+PiArCj4+ICvCoMKgwqAgX19pOTE1X3JlcXVlc3Rfc3VibWl0KHJxKTsK Pj4gKwo+PiArwqDCoMKgIHRyYWNlX2k5MTVfcmVxdWVzdF9pbihycSwgMCk7Cj4+ICsKPj4gK8Kg wqDCoCBndWNfc2V0X2xyY190YWlsKHJxKTsKPj4gK8KgwqDCoCByZXQgPSBndWNfYWRkX3JlcXVl c3QoZ3VjLCBycSk7Cj4+ICvCoMKgwqAgaWYgKHJldCA9PSAtRUJVU1kpCj4+ICvCoMKgwqDCoMKg wqDCoCBndWMtPnN0YWxsZWRfcmVxdWVzdCA9IHJxOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIHJl dDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZ3VjX3N1Ym1pdF9yZXF1ZXN0KHN0cnVjdCBp OTE1X3JlcXVlc3QgKnJxKQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBpOTE1X3NjaGVkX2VuZ2lu ZSAqc2NoZWRfZW5naW5lID0gcnEtPmVuZ2luZS0+c2NoZWRfZW5naW5lOwo+PiArwqDCoMKgIHN0 cnVjdCBpbnRlbF9ndWMgKmd1YyA9ICZycS0+ZW5naW5lLT5ndC0+dWMuZ3VjOwo+PiArwqDCoMKg IHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4+ICsKPj4gK8KgwqDCoCAvKiBXaWxsIGJlIGNhbGxlZCBm cm9tIGlycS1jb250ZXh0IHdoZW4gdXNpbmcgZm9yZWlnbiBmZW5jZXMuICovCj4+ICvCoMKgwqAg c3Bpbl9sb2NrX2lycXNhdmUoJnNjaGVkX2VuZ2luZS0+bG9jaywgZmxhZ3MpOwo+PiArCj4+ICvC oMKgwqAgaWYgKGd1Yy0+c3RhbGxlZF9yZXF1ZXN0IHx8IAo+PiAhaTkxNV9zY2hlZF9lbmdpbmVf aXNfZW1wdHkoc2NoZWRfZW5naW5lKSkKPj4gK8KgwqDCoMKgwqDCoMKgIHF1ZXVlX3JlcXVlc3Qo c2NoZWRfZW5naW5lLCBycSwgcnFfcHJpbyhycSkpOwo+PiArwqDCoMKgIGVsc2UgaWYgKGd1Y19i eXBhc3NfdGFza2xldF9zdWJtaXQoZ3VjLCBycSkgPT0gLUVCVVNZKQo+PiArwqDCoMKgwqDCoMKg wqAgdGFza2xldF9oaV9zY2hlZHVsZSgmc2NoZWRfZW5naW5lLT50YXNrbGV0KTsKPj4gKwo+PiAr wqDCoMKgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjaGVkX2VuZ2luZS0+bG9jaywgZmxhZ3Mp Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IG5ld19ndWNfaWQoc3RydWN0IGludGVsX2d1YyAq Z3VjKQo+PiArewo+PiArwqDCoMKgIHJldHVybiBpZGFfc2ltcGxlX2dldCgmZ3VjLT5ndWNfaWRz LCAwLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHVUNfTUFYX0xSQ19E RVNDUklQVE9SUywgR0ZQX0tFUk5FTCB8Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIF9fR0ZQX1JFVFJZX01BWUZBSUwgfCBfX0dGUF9OT1dBUk4pOwo+PiArfQo+PiArCj4+ ICtzdGF0aWMgdm9pZCBfX3JlbGVhc2VfZ3VjX2lkKHN0cnVjdCBpbnRlbF9ndWMgKmd1Yywgc3Ry dWN0IAo+PiBpbnRlbF9jb250ZXh0ICpjZSkKPj4gK3sKPj4gK8KgwqDCoCBpZiAoIWNvbnRleHRf Z3VjX2lkX2ludmFsaWQoY2UpKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZGFfc2ltcGxlX3JlbW92 ZSgmZ3VjLT5ndWNfaWRzLCBjZS0+Z3VjX2lkKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJlc2V0X2xy Y19kZXNjKGd1YywgY2UtPmd1Y19pZCk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBzZXRfY29udGV4dF9n dWNfaWRfaW52YWxpZChjZSk7Cj4+ICvCoMKgwqAgfQo+PiArwqDCoMKgIGlmICghbGlzdF9lbXB0 eSgmY2UtPmd1Y19pZF9saW5rKSkKPj4gK8KgwqDCoMKgwqDCoMKgIGxpc3RfZGVsX2luaXQoJmNl LT5ndWNfaWRfbGluayk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHJlbGVhc2VfZ3VjX2lk KHN0cnVjdCBpbnRlbF9ndWMgKmd1Yywgc3RydWN0IAo+PiBpbnRlbF9jb250ZXh0ICpjZSkKPj4g K3sKPj4gK8KgwqDCoCB1bnNpZ25lZCBsb25nIGZsYWdzOwo+PiArCj4+ICvCoMKgwqAgc3Bpbl9s b2NrX2lycXNhdmUoJmd1Yy0+Y29udGV4dHNfbG9jaywgZmxhZ3MpOwo+PiArwqDCoMKgIF9fcmVs ZWFzZV9ndWNfaWQoZ3VjLCBjZSk7Cj4+ICvCoMKgwqAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm Z3VjLT5jb250ZXh0c19sb2NrLCBmbGFncyk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgc3Rl YWxfZ3VjX2lkKHN0cnVjdCBpbnRlbF9ndWMgKmd1YykKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3Qg aW50ZWxfY29udGV4dCAqY2U7Cj4+ICvCoMKgwqAgaW50IGd1Y19pZDsKPj4gKwo+PiArwqDCoMKg IGxvY2tkZXBfYXNzZXJ0X2hlbGQoJmd1Yy0+Y29udGV4dHNfbG9jayk7Cj4+ICsKPj4gK8KgwqDC oCBpZiAoIWxpc3RfZW1wdHkoJmd1Yy0+Z3VjX2lkX2xpc3QpKSB7Cj4+ICvCoMKgwqDCoMKgwqDC oCBjZSA9IGxpc3RfZmlyc3RfZW50cnkoJmd1Yy0+Z3VjX2lkX2xpc3QsCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGludGVsX2NvbnRleHQsCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ3VjX2lkX2xpbmsp Owo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBHRU1fQlVHX09OKGF0b21pY19yZWFkKCZjZS0+Z3Vj X2lkX3JlZikpOwo+PiArwqDCoMKgwqDCoMKgwqAgR0VNX0JVR19PTihjb250ZXh0X2d1Y19pZF9p bnZhbGlkKGNlKSk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGxpc3RfZGVsX2luaXQoJmNlLT5n dWNfaWRfbGluayk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBndWNfaWQgPSBjZS0+Z3VjX2lkOwo+PiAr wqDCoMKgwqDCoMKgwqAgc2V0X2NvbnRleHRfZ3VjX2lkX2ludmFsaWQoY2UpOwo+PiArwqDCoMKg wqDCoMKgwqAgcmV0dXJuIGd1Y19pZDsKPj4gK8KgwqDCoCB9IGVsc2Ugewo+PiArwqDCoMKgwqDC oMKgwqAgcmV0dXJuIC1FQUdBSU47Cj4+ICvCoMKgwqAgfQo+PiArfQo+PiArCj4+ICtzdGF0aWMg aW50IGFzc2lnbl9ndWNfaWQoc3RydWN0IGludGVsX2d1YyAqZ3VjLCB1MTYgKm91dCkKPj4gK3sK Pj4gK8KgwqDCoCBpbnQgcmV0Owo+PiArCj4+ICvCoMKgwqAgbG9ja2RlcF9hc3NlcnRfaGVsZCgm Z3VjLT5jb250ZXh0c19sb2NrKTsKPj4gKwo+PiArwqDCoMKgIHJldCA9IG5ld19ndWNfaWQoZ3Vj KTsKPj4gK8KgwqDCoCBpZiAodW5saWtlbHkocmV0IDwgMCkpIHsKPj4gK8KgwqDCoMKgwqDCoMKg IHJldCA9IHN0ZWFsX2d1Y19pZChndWMpOwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHJldCA8IDAp Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+ICvCoMKgwqAgfQo+PiAr Cj4+ICvCoMKgwqAgKm91dCA9IHJldDsKPj4gK8KgwqDCoCByZXR1cm4gMDsKPj4gK30KPj4gKwo+ PiArI2RlZmluZSBQSU5fR1VDX0lEX1RSSUVTwqDCoMKgIDQKPj4gK3N0YXRpYyBpbnQgcGluX2d1 Y19pZChzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSkKPj4g K3sKPj4gK8KgwqDCoCBpbnQgcmV0ID0gMDsKPj4gK8KgwqDCoCB1bnNpZ25lZCBsb25nIGZsYWdz LCB0cmllcyA9IFBJTl9HVUNfSURfVFJJRVM7Cj4+ICsKPj4gK8KgwqDCoCBHRU1fQlVHX09OKGF0 b21pY19yZWFkKCZjZS0+Z3VjX2lkX3JlZikpOwo+PiArCj4+ICt0cnlfYWdhaW46Cj4+ICvCoMKg wqAgc3Bpbl9sb2NrX2lycXNhdmUoJmd1Yy0+Y29udGV4dHNfbG9jaywgZmxhZ3MpOwo+PiArCj4+ ICvCoMKgwqAgaWYgKGNvbnRleHRfZ3VjX2lkX2ludmFsaWQoY2UpKSB7Cj4+ICvCoMKgwqDCoMKg wqDCoCByZXQgPSBhc3NpZ25fZ3VjX2lkKGd1YywgJmNlLT5ndWNfaWQpOwo+PiArwqDCoMKgwqDC oMKgwqAgaWYgKHJldCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBvdXRfdW5sb2Nr Owo+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gMTvCoMKgwqAgLyogSW5kaWRjYXRlcyBuZXdseSBh c3NpZ25lZCBndWNfaWQgKi8KPj4gK8KgwqDCoCB9Cj4+ICvCoMKgwqAgaWYgKCFsaXN0X2VtcHR5 KCZjZS0+Z3VjX2lkX2xpbmspKQo+PiArwqDCoMKgwqDCoMKgwqAgbGlzdF9kZWxfaW5pdCgmY2Ut Pmd1Y19pZF9saW5rKTsKPj4gK8KgwqDCoCBhdG9taWNfaW5jKCZjZS0+Z3VjX2lkX3JlZik7Cj4+ ICsKPj4gK291dF91bmxvY2s6Cj4+ICvCoMKgwqAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Vj LT5jb250ZXh0c19sb2NrLCBmbGFncyk7Cj4+ICsKPj4gK8KgwqDCoCAvKgo+PiArwqDCoMKgwqAg KiAtRUFHQUlOIGluZGljYXRlcyBubyBndWNfaWRzIGFyZSBhdmFpbGFibGUsIGxldCdzIHJldGly ZSBhbnkKPj4gK8KgwqDCoMKgICogb3V0c3RhbmRpbmcgcmVxdWVzdHMgdG8gc2VlIGlmIHRoYXQg ZnJlZXMgdXAgYSBndWNfaWQuIElmIHRoZSAKPj4gZmlyc3QKPj4gK8KgwqDCoMKgICogcmV0aXJl IGRpZG4ndCBoZWxwLCBpbnNlcnQgYSBzbGVlcCB3aXRoIHRoZSB0aW1lc2xpY2UgCj4+IGR1cmF0 aW9uIGJlZm9yZQo+PiArwqDCoMKgwqAgKiBhdHRlbXB0aW5nIHRvIHJldGlyZSBtb3JlIHJlcXVl c3RzLiBEb3VibGUgdGhlIHNsZWVwIHBlcmlvZCBlYWNoCj4+ICvCoMKgwqDCoCAqIHN1YnNlcXVl bnQgcGFzcyBiZWZvcmUgZmluYWxseSBnaXZpbmcgdXAuIFRoZSBzbGVlcCBwZXJpb2QgCj4+IGhh cyBtYXggb2YKPj4gK8KgwqDCoMKgICogMTAwbXMgYW5kIG1pbmltdW0gb2YgMW1zLgo+PiArwqDC oMKgwqAgKi8KPj4gK8KgwqDCoCBpZiAocmV0ID09IC1FQUdBSU4gJiYgLS10cmllcykgewo+PiAr wqDCoMKgwqDCoMKgwqAgaWYgKFBJTl9HVUNfSURfVFJJRVMgLSB0cmllcyA+IDEpIHsKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgaW50IHRpbWVzbGljZV9zaGlmdGVkID0KPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjZS0+ZW5naW5lLT5wcm9wcy50aW1lc2xp Y2VfZHVyYXRpb25fbXMgPDwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoUElO X0dVQ19JRF9UUklFUyAtIHRyaWVzIC0gMik7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVu c2lnbmVkIGludCBtYXggPSBtaW5fdCh1bnNpZ25lZCBpbnQsIDEwMCwKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0aW1lc2xpY2Vfc2hpZnRlZCk7 Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbXNsZWVwKG1heF90KHVuc2lnbmVkIGlu dCwgbWF4LCAxKSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+ICvCoMKgwqDCoMKgwqDCoCBpbnRl bF9ndF9yZXRpcmVfcmVxdWVzdHMoZ3VjX3RvX2d0KGd1YykpOwo+PiArwqDCoMKgwqDCoMKgwqAg Z290byB0cnlfYWdhaW47Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIHJldDsK Pj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgdW5waW5fZ3VjX2lkKHN0cnVjdCBpbnRlbF9ndWMg Kmd1Yywgc3RydWN0IGludGVsX2NvbnRleHQgCj4+ICpjZSkKPj4gK3sKPj4gK8KgwqDCoCB1bnNp Z25lZCBsb25nIGZsYWdzOwo+PiArCj4+ICvCoMKgwqAgR0VNX0JVR19PTihhdG9taWNfcmVhZCgm Y2UtPmd1Y19pZF9yZWYpIDwgMCk7Cj4+ICsKPj4gK8KgwqDCoCBzcGluX2xvY2tfaXJxc2F2ZSgm Z3VjLT5jb250ZXh0c19sb2NrLCBmbGFncyk7Cj4+ICvCoMKgwqAgaWYgKCFjb250ZXh0X2d1Y19p ZF9pbnZhbGlkKGNlKSAmJiBsaXN0X2VtcHR5KCZjZS0+Z3VjX2lkX2xpbmspICYmCj4+ICvCoMKg wqDCoMKgwqDCoCAhYXRvbWljX3JlYWQoJmNlLT5ndWNfaWRfcmVmKSkKPj4gK8KgwqDCoMKgwqDC oMKgIGxpc3RfYWRkX3RhaWwoJmNlLT5ndWNfaWRfbGluaywgJmd1Yy0+Z3VjX2lkX2xpc3QpOwo+ PiArwqDCoMKgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmd1Yy0+Y29udGV4dHNfbG9jaywgZmxh Z3MpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IF9fZ3VjX2FjdGlvbl9yZWdpc3Rlcl9jb250 ZXh0KHN0cnVjdCBpbnRlbF9ndWMgKmd1YywKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgdTMyIGd1Y19pZCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgdTMyIG9mZnNldCkKPj4gK3sKPj4gK8KgwqDCoCB1MzIgYWN0aW9uW10g PSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBJTlRFTF9HVUNfQUNUSU9OX1JFR0lTVEVSX0NPTlRFWFQs Cj4+ICvCoMKgwqDCoMKgwqDCoCBndWNfaWQsCj4+ICvCoMKgwqDCoMKgwqDCoCBvZmZzZXQsCj4+ ICvCoMKgwqAgfTsKPj4gKwo+PiArwqDCoMKgIHJldHVybiBpbnRlbF9ndWNfc2VuZF9idXN5X2xv b3AoZ3VjLCBhY3Rpb24sIEFSUkFZX1NJWkUoYWN0aW9uKSwgCj4+IHRydWUpOwo+PiArfQo+PiAr Cj4+ICtzdGF0aWMgaW50IHJlZ2lzdGVyX2NvbnRleHQoc3RydWN0IGludGVsX2NvbnRleHQgKmNl KQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBpbnRlbF9ndWMgKmd1YyA9IGNlX3RvX2d1YyhjZSk7 Cj4+ICvCoMKgwqAgdTMyIG9mZnNldCA9IGludGVsX2d1Y19nZ3R0X29mZnNldChndWMsIGd1Yy0+ bHJjX2Rlc2NfcG9vbCkgKwo+PiArwqDCoMKgwqDCoMKgwqAgY2UtPmd1Y19pZCAqIHNpemVvZihz dHJ1Y3QgZ3VjX2xyY19kZXNjKTsKPj4gKwo+PiArwqDCoMKgIHJldHVybiBfX2d1Y19hY3Rpb25f cmVnaXN0ZXJfY29udGV4dChndWMsIGNlLT5ndWNfaWQsIG9mZnNldCk7Cj4+ICt9Cj4+ICsKPj4g K3N0YXRpYyBpbnQgX19ndWNfYWN0aW9uX2RlcmVnaXN0ZXJfY29udGV4dChzdHJ1Y3QgaW50ZWxf Z3VjICpndWMsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB1MzIgZ3VjX2lkKQo+PiArewo+PiArwqDCoMKgIHUzMiBhY3Rpb25bXSA9IHsKPj4gK8KgwqDC oMKgwqDCoMKgIElOVEVMX0dVQ19BQ1RJT05fREVSRUdJU1RFUl9DT05URVhULAo+PiArwqDCoMKg wqDCoMKgwqAgZ3VjX2lkLAo+PiArwqDCoMKgIH07Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gaW50 ZWxfZ3VjX3NlbmRfYnVzeV9sb29wKGd1YywgYWN0aW9uLCBBUlJBWV9TSVpFKGFjdGlvbiksIAo+ PiB0cnVlKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkZXJlZ2lzdGVyX2NvbnRleHQoc3Ry dWN0IGludGVsX2NvbnRleHQgKmNlLCB1MzIgZ3VjX2lkKQo+PiArewo+PiArwqDCoMKgIHN0cnVj dCBpbnRlbF9ndWMgKmd1YyA9IGNlX3RvX2d1YyhjZSk7Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4g X19ndWNfYWN0aW9uX2RlcmVnaXN0ZXJfY29udGV4dChndWMsIGd1Y19pZCk7Cj4+ICt9Cj4+ICsK Pj4gK3N0YXRpYyBpbnRlbF9lbmdpbmVfbWFza190IGFkanVzdF9lbmdpbmVfbWFzayh1OCBjbGFz cywgCj4+IGludGVsX2VuZ2luZV9tYXNrX3QgbWFzaykKPj4gK3sKPj4gK8KgwqDCoCBzd2l0Y2gg KGNsYXNzKSB7Cj4+ICvCoMKgwqAgY2FzZSBSRU5ERVJfQ0xBU1M6Cj4+ICvCoMKgwqDCoMKgwqDC oCByZXR1cm4gbWFzayA+PiBSQ1MwOwo+PiArwqDCoMKgIGNhc2UgVklERU9fRU5IQU5DRU1FTlRf Q0xBU1M6Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gbWFzayA+PiBWRUNTMDsKPj4gK8KgwqDC oCBjYXNlIFZJREVPX0RFQ09ERV9DTEFTUzoKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBtYXNr ID4+IFZDUzA7Cj4+ICvCoMKgwqAgY2FzZSBDT1BZX0VOR0lORV9DTEFTUzoKPj4gK8KgwqDCoMKg wqDCoMKgIHJldHVybiBtYXNrID4+IEJDUzA7Cj4+ICvCoMKgwqAgZGVmYXVsdDoKPj4gK8KgwqDC oMKgwqDCoMKgIE1JU1NJTkdfQ0FTRShjbGFzcyk7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4g MDsKPj4gK8KgwqDCoCB9Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGd1Y19jb250ZXh0X3Bv bGljeV9pbml0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBndWNfbHJjX2Rlc2MgKmRlc2MpCj4+ ICt7Cj4+ICvCoMKgwqAgZGVzYy0+cG9saWN5X2ZsYWdzID0gMDsKPj4gKwo+PiArwqDCoMKgIGRl c2MtPmV4ZWN1dGlvbl9xdWFudHVtID0gCj4+IENPTlRFWFRfUE9MSUNZX0RFRkFVTFRfRVhFQ1VU SU9OX1FVQU5UVU1fVVM7Cj4+ICvCoMKgwqAgZGVzYy0+cHJlZW1wdGlvbl90aW1lb3V0ID0gCj4+ IENPTlRFWFRfUE9MSUNZX0RFRkFVTFRfUFJFRU1QVElPTl9USU1FX1VTOwo+PiArfQo+PiArCj4+ ICtzdGF0aWMgaW50IGd1Y19scmNfZGVzY19waW4oc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQo+ PiArewo+PiArwqDCoMKgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSA9IGNlLT5lbmdp bmU7Cj4+ICvCoMKgwqAgc3RydWN0IGludGVsX3J1bnRpbWVfcG0gKnJ1bnRpbWVfcG0gPSBlbmdp bmUtPnVuY29yZS0+cnBtOwo+PiArwqDCoMKgIHN0cnVjdCBpbnRlbF9ndWMgKmd1YyA9ICZlbmdp bmUtPmd0LT51Yy5ndWM7Cj4+ICvCoMKgwqAgdTMyIGRlc2NfaWR4ID0gY2UtPmd1Y19pZDsKPj4g K8KgwqDCoCBzdHJ1Y3QgZ3VjX2xyY19kZXNjICpkZXNjOwo+PiArwqDCoMKgIGJvb2wgY29udGV4 dF9yZWdpc3RlcmVkOwo+PiArwqDCoMKgIGludGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+PiArwqDC oMKgIGludCByZXQgPSAwOwo+PiArCj4+ICvCoMKgwqAgR0VNX0JVR19PTighZW5naW5lLT5tYXNr KTsKPj4gKwo+PiArwqDCoMKgIC8qCj4+ICvCoMKgwqDCoCAqIEVuc3VyZSBMUkMgKyBDVCB2bWFz IGFyZSBpcyBzYW1lIHJlZ2lvbiBhcyB3cml0ZSBiYXJyaWVyIGlzIGRvbmUKPj4gK8KgwqDCoMKg ICogYmFzZWQgb24gQ1Qgdm1hIHJlZ2lvbi4KPj4gK8KgwqDCoMKgICovCj4+ICvCoMKgwqAgR0VN X0JVR19PTihpOTE1X2dlbV9vYmplY3RfaXNfbG1lbShndWMtPmN0LnZtYS0+b2JqKSAhPQo+PiAr IGk5MTVfZ2VtX29iamVjdF9pc19sbWVtKGNlLT5yaW5nLT52bWEtPm9iaikpOwo+PiArCj4+ICvC oMKgwqAgY29udGV4dF9yZWdpc3RlcmVkID0gbHJjX2Rlc2NfcmVnaXN0ZXJlZChndWMsIGRlc2Nf aWR4KTsKPj4gKwo+PiArwqDCoMKgIHJlc2V0X2xyY19kZXNjKGd1YywgZGVzY19pZHgpOwo+PiAr wqDCoMKgIHNldF9scmNfZGVzY19yZWdpc3RlcmVkKGd1YywgZGVzY19pZHgsIGNlKTsKPj4gKwo+ PiArwqDCoMKgIGRlc2MgPSBfX2dldF9scmNfZGVzYyhndWMsIGRlc2NfaWR4KTsKPj4gK8KgwqDC oCBkZXNjLT5lbmdpbmVfY2xhc3MgPSBlbmdpbmVfY2xhc3NfdG9fZ3VjX2NsYXNzKGVuZ2luZS0+ Y2xhc3MpOwo+PiArwqDCoMKgIGRlc2MtPmVuZ2luZV9zdWJtaXRfbWFzayA9IGFkanVzdF9lbmdp bmVfbWFzayhlbmdpbmUtPmNsYXNzLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbmdpbmUtPm1hc2spOwo+PiArwqDCoMKgIGRl c2MtPmh3X2NvbnRleHRfZGVzYyA9IGNlLT5scmMubHJjYTsKPj4gK8KgwqDCoCBkZXNjLT5wcmlv cml0eSA9IEdVQ19DTElFTlRfUFJJT1JJVFlfS01EX05PUk1BTDsKPj4gK8KgwqDCoCBkZXNjLT5j b250ZXh0X2ZsYWdzID0gQ09OVEVYVF9SRUdJU1RSQVRJT05fRkxBR19LTUQ7Cj4+ICvCoMKgwqAg Z3VjX2NvbnRleHRfcG9saWN5X2luaXQoZW5naW5lLCBkZXNjKTsKPj4gK8KgwqDCoCBpbml0X3Nj aGVkX3N0YXRlKGNlKTsKPj4gKwo+PiArwqDCoMKgIC8qCj4+ICvCoMKgwqDCoCAqIFRoZSBjb250 ZXh0X2xvb2t1cCB4YXJyYXkgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgdGhlIGhhcmR3YXJlCj4+ ICvCoMKgwqDCoCAqIGNvbnRleHQgaXMgY3VycmVudGx5IHJlZ2lzdGVyZWQuIFRoZXJlIGFyZSB0 d28gY2FzZXMgaW4gd2hpY2ggaXQKPj4gK8KgwqDCoMKgICogY291bGQgYmUgcmVnaXN0ZXJlZCBl aXRoZXIgdGhlIGd1Y19pZCBoYXMgYmVlbiBzdG9sZW4gZnJvbSBmcm9tCj4+ICvCoMKgwqDCoCAq IGFub3RoZXIgY29udGV4dCBvciB0aGUgbHJjIGRlc2NyaXB0b3IgYWRkcmVzcyBvZiB0aGlzIGNv bnRleHQgCj4+IGhhcwo+PiArwqDCoMKgwqAgKiBjaGFuZ2VkLiBJbiBlaXRoZXIgY2FzZSB0aGUg Y29udGV4dCBuZWVkcyB0byBiZSBkZXJlZ2lzdGVyZWQgCj4+IHdpdGggdGhlCj4+ICvCoMKgwqDC oCAqIEd1QyBiZWZvcmUgcmVnaXN0ZXJpbmcgdGhpcyBjb250ZXh0Lgo+PiArwqDCoMKgwqAgKi8K Pj4gK8KgwqDCoCBpZiAoY29udGV4dF9yZWdpc3RlcmVkKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBz ZXRfY29udGV4dF93YWl0X2Zvcl9kZXJlZ2lzdGVyX3RvX3JlZ2lzdGVyKGNlKTsKPj4gK8KgwqDC oMKgwqDCoMKgIGludGVsX2NvbnRleHRfZ2V0KGNlKTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAg LyoKPj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBJZiBzdGVhbGluZyB0aGUgZ3VjX2lkLCB0aGlzIGNl IGhhcyB0aGUgc2FtZSBndWNfaWQgYXMgdGhlCj4+ICvCoMKgwqDCoMKgwqDCoMKgICogY29udGV4 dCB3aG9zZSBndWNfaWQgd2FzIHN0b2xlbi4KPj4gK8KgwqDCoMKgwqDCoMKgwqAgKi8KPj4gK8Kg wqDCoMKgwqDCoMKgIHdpdGhfaW50ZWxfcnVudGltZV9wbShydW50aW1lX3BtLCB3YWtlcmVmKQo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSBkZXJlZ2lzdGVyX2NvbnRleHQoY2UsIGNl LT5ndWNfaWQpOwo+PiArwqDCoMKgIH0gZWxzZSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCB3aXRoX2lu dGVsX3J1bnRpbWVfcG0ocnVudGltZV9wbSwgd2FrZXJlZikKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgcmV0ID0gcmVnaXN0ZXJfY29udGV4dChjZSk7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvC oMKgwqAgcmV0dXJuIHJldDsKPj4gwqAgfQo+PiDCoCDCoCBzdGF0aWMgaW50IGd1Y19jb250ZXh0 X3ByZV9waW4oc3RydWN0IGludGVsX2NvbnRleHQgKmNlLAo+PiBAQCAtNDQzLDM2ICs4MTQsMTQ0 IEBAIHN0YXRpYyBpbnQgZ3VjX2NvbnRleHRfcHJlX3BpbihzdHJ1Y3QgCj4+IGludGVsX2NvbnRl eHQgKmNlLAo+PiDCoCDCoCBzdGF0aWMgaW50IGd1Y19jb250ZXh0X3BpbihzdHJ1Y3QgaW50ZWxf Y29udGV4dCAqY2UsIHZvaWQgKnZhZGRyKQo+PiDCoCB7Cj4+ICvCoMKgwqAgaWYgKGk5MTVfZ2d0 dF9vZmZzZXQoY2UtPnN0YXRlKSAhPQo+PiArwqDCoMKgwqDCoMKgwqAgKGNlLT5scmMubHJjYSAm IENUWF9HVFRfQUREUkVTU19NQVNLKSkKPj4gK8KgwqDCoMKgwqDCoMKgIHNldF9iaXQoQ09OVEVY VF9MUkNBX0RJUlRZLCAmY2UtPmZsYWdzKTsKPj4gKwo+PiArwqDCoMKgIC8qCj4+ICvCoMKgwqDC oCAqIEd1QyBjb250ZXh0IGdldHMgcGlubmVkIGluIGd1Y19yZXF1ZXN0X2FsbG9jLiBTZWUgdGhh dCAKPj4gZnVuY3Rpb24gZm9yCj4+ICvCoMKgwqDCoCAqIGV4cGxhaW5hdGlvbiBvZiB3aHkuCj4+ ICvCoMKgwqDCoCAqLwo+PiArCj4+IMKgwqDCoMKgwqAgcmV0dXJuIGxyY19waW4oY2UsIGNlLT5l bmdpbmUsIHZhZGRyKTsKPj4gwqAgfQo+PiDCoCArc3RhdGljIHZvaWQgZ3VjX2NvbnRleHRfdW5w aW4oc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBpbnRl bF9ndWMgKmd1YyA9IGNlX3RvX2d1YyhjZSk7Cj4+ICsKPj4gK8KgwqDCoCB1bnBpbl9ndWNfaWQo Z3VjLCBjZSk7Cj4+ICvCoMKgwqAgbHJjX3VucGluKGNlKTsKPj4gK30KPj4gKwo+PiArc3RhdGlj IHZvaWQgZ3VjX2NvbnRleHRfcG9zdF91bnBpbihzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpCj4+ ICt7Cj4+ICvCoMKgwqAgbHJjX3Bvc3RfdW5waW4oY2UpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg aW5saW5lIHZvaWQgZ3VjX2xyY19kZXNjX3VucGluKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSkK Pj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgaW50ZWxfZ3VjICpndWMgPSBjZV90b19ndWMoY2UpOwo+ PiArwqDCoMKgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4+ICsKPj4gK8KgwqDCoCBHRU1fQlVHX09O KCFscmNfZGVzY19yZWdpc3RlcmVkKGd1YywgY2UtPmd1Y19pZCkpOwo+PiArwqDCoMKgIEdFTV9C VUdfT04oY2UgIT0gX19nZXRfY29udGV4dChndWMsIGNlLT5ndWNfaWQpKTsKPj4gKwo+PiArwqDC oMKgIHNwaW5fbG9ja19pcnFzYXZlKCZjZS0+Z3VjX3N0YXRlLmxvY2ssIGZsYWdzKTsKPj4gK8Kg wqDCoCBzZXRfY29udGV4dF9kZXN0cm95ZWQoY2UpOwo+PiArwqDCoMKgIHNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJmNlLT5ndWNfc3RhdGUubG9jaywgZmxhZ3MpOwo+PiArCj4+ICvCoMKgwqAgZGVy ZWdpc3Rlcl9jb250ZXh0KGNlLCBjZS0+Z3VjX2lkKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZv aWQgZ3VjX2NvbnRleHRfZGVzdHJveShzdHJ1Y3Qga3JlZiAqa3JlZikKPj4gK3sKPj4gK8KgwqDC oCBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UgPSBjb250YWluZXJfb2Yoa3JlZiwgdHlwZW9mKCpj ZSksIHJlZik7Cj4+ICvCoMKgwqAgc3RydWN0IGludGVsX3J1bnRpbWVfcG0gKnJ1bnRpbWVfcG0g PSBjZS0+ZW5naW5lLT51bmNvcmUtPnJwbTsKPj4gK8KgwqDCoCBzdHJ1Y3QgaW50ZWxfZ3VjICpn dWMgPSBjZV90b19ndWMoY2UpOwo+PiArwqDCoMKgIGludGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+ PiArwqDCoMKgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4+ICsKPj4gK8KgwqDCoCAvKgo+PiArwqDC oMKgwqAgKiBJZiB0aGUgZ3VjX2lkIGlzIGludmFsaWQgdGhpcyBjb250ZXh0IGhhcyBiZWVuIHN0 b2xlbiBhbmQgd2UgCj4+IGNhbiBmcmVlCj4+ICvCoMKgwqDCoCAqIGl0IGltbWVkaWF0ZWx5LiBB bHNvIGNhbiBiZSBmcmVlZCBpbW1lZGlhdGVseSBpZiB0aGUgY29udGV4dCAKPj4gaXMgbm90Cj4+ ICvCoMKgwqDCoCAqIHJlZ2lzdGVyZWQgd2l0aCB0aGUgR3VDLgo+PiArwqDCoMKgwqAgKi8KPj4g K8KgwqDCoCBpZiAoY29udGV4dF9ndWNfaWRfaW52YWxpZChjZSkpIHsKPj4gK8KgwqDCoMKgwqDC oMKgIGxyY19kZXN0cm95KGtyZWYpOwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+PiArwqDC oMKgIH0gZWxzZSBpZiAoIWxyY19kZXNjX3JlZ2lzdGVyZWQoZ3VjLCBjZS0+Z3VjX2lkKSkgewo+ PiArwqDCoMKgwqDCoMKgwqAgcmVsZWFzZV9ndWNfaWQoZ3VjLCBjZSk7Cj4+ICvCoMKgwqDCoMKg wqDCoCBscmNfZGVzdHJveShrcmVmKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybjsKPj4gK8Kg wqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCAvKgo+PiArwqDCoMKgwqAgKiBXZSBoYXZlIHRvIGFjcXVp cmUgdGhlIGNvbnRleHQgc3BpbmxvY2sgYW5kIGNoZWNrIGd1Y19pZCAKPj4gYWdhaW4sIGlmIGl0 Cj4+ICvCoMKgwqDCoCAqIGlzIHZhbGlkIGl0IGhhc24ndCBiZWVuIHN0b2xlbiBhbmQgbmVlZHMg dG8gYmUgZGVyZWdpc3RlcmVkLiBXZQo+PiArwqDCoMKgwqAgKiBkZWxldGUgdGhpcyBjb250ZXh0 IGZyb20gdGhlIGxpc3Qgb2YgdW5waW5uZWQgZ3VjX2lkcyAKPj4gYXZhaWxhYmxlIHRvCj4+ICvC oMKgwqDCoCAqIHN0ZWFsIHRvIHNlYWwgYSByYWNlIHdpdGggZ3VjX2xyY19kZXNjX3BpbigpLiBX aGVuIHRoZSBHMkggQ1RCCj4+ICvCoMKgwqDCoCAqIHJldHVybnMgaW5kaWNhdGluZyB0aGlzIGNv bnRleHQgaGFzIGJlZW4gZGVyZWdpc3RlcmVkIHRoZSAKPj4gZ3VjX2lkIGlzCj4+ICvCoMKgwqDC oCAqIHJldHVybmVkIHRvIHRoZSBwb29sIG9mIGF2YWlsYWJsZSBndWNfaWRzLgo+PiArwqDCoMKg wqAgKi8KPj4gK8KgwqDCoCBzcGluX2xvY2tfaXJxc2F2ZSgmZ3VjLT5jb250ZXh0c19sb2NrLCBm bGFncyk7Cj4+ICvCoMKgwqAgaWYgKGNvbnRleHRfZ3VjX2lkX2ludmFsaWQoY2UpKSB7Cj4+ICvC oMKgwqDCoMKgwqDCoCBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZndWMtPmNvbnRleHRzX2xvY2ss IGZsYWdzKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGxyY19kZXN0cm95KGtyZWYpOwo+PiArwqDCoMKg wqDCoMKgwqAgcmV0dXJuOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIGlmICghbGlzdF9l bXB0eSgmY2UtPmd1Y19pZF9saW5rKSkKPj4gK8KgwqDCoMKgwqDCoMKgIGxpc3RfZGVsX2luaXQo JmNlLT5ndWNfaWRfbGluayk7Cj4+ICvCoMKgwqAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Vj LT5jb250ZXh0c19sb2NrLCBmbGFncyk7Cj4+ICsKPj4gK8KgwqDCoCAvKgo+PiArwqDCoMKgwqAg KiBXZSBkZWZlciBHdUMgY29udGV4dCBkZXJlZ2lzdHJhdGlvbiB1bnRpbCB0aGUgY29udGV4dCBp cyAKPj4gZGVzdHJveWVkCj4+ICvCoMKgwqDCoCAqIGluIG9yZGVyIHRvIHNhdmUgb24gQ1RCcy4g V2l0aCB0aGlzIG9wdGltaXphdGlvbiBpZGVhbGx5IHdlIAo+PiBvbmx5IG5lZWQKPj4gK8KgwqDC oMKgICogMSBDVEIgdG8gcmVnaXN0ZXIgdGhlIGNvbnRleHQgZHVyaW5nIHRoZSBmaXJzdCBwaW4g YW5kIDEgQ1RCIHRvCj4+ICvCoMKgwqDCoCAqIGRlcmVnaXN0ZXIgdGhlIGNvbnRleHQgd2hlbiB0 aGUgY29udGV4dCBpcyBkZXN0cm95ZWQuIFdpdGhvdXQgCj4+IHRoaXMKPj4gK8KgwqDCoMKgICog b3B0aW1pemF0aW9uLCBhIENUQiB3b3VsZCBiZSBuZWVkZWQgZXZlcnkgcGluICYgdW5waW4uCj4+ ICvCoMKgwqDCoCAqCj4+ICvCoMKgwqDCoCAqIFhYWDogTmVlZCB0byBhY3FpdXJlIHRoZSBydW50 aW1lIHdha2VyZWYgYXMgdGhpcyBjYW4gYmUgCj4+IHRyaWdnZXJlZAo+PiArwqDCoMKgwqAgKiBm cm9tIGNvbnRleHRfZnJlZV93b3JrZXIgd2hlbiBydW50aW1lIHdha2VyZWYgaXMgbm90IGhlbGQu Cj4+ICvCoMKgwqDCoCAqIGd1Y19scmNfZGVzY191bnBpbiByZXF1aXJlcyB0aGUgcnVudGltZSBh cyBhIEd1QyByZWdpc3RlciBpcyAKPj4gd3JpdHRlbgo+PiArwqDCoMKgwqAgKiBpbiBIMkcgQ1RC IHRvIGRlcmVnaXN0ZXIgdGhlIGNvbnRleHQuIEEgZnV0dXJlIHBhdGNoIG1heSAKPj4gZGVmZXIg dGhpcwo+PiArwqDCoMKgwqAgKiBIMkcgQ1RCIGlmIHRoZSBydW50aW1lIHdha2VyZWYgaXMgemVy by4KPj4gK8KgwqDCoMKgICovCj4+ICvCoMKgwqAgd2l0aF9pbnRlbF9ydW50aW1lX3BtKHJ1bnRp bWVfcG0sIHdha2VyZWYpCj4+ICvCoMKgwqDCoMKgwqDCoCBndWNfbHJjX2Rlc2NfdW5waW4oY2Up Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGd1Y19jb250ZXh0X2FsbG9jKHN0cnVjdCBpbnRl bF9jb250ZXh0ICpjZSkKPj4gK3sKPj4gK8KgwqDCoCByZXR1cm4gbHJjX2FsbG9jKGNlLCBjZS0+ ZW5naW5lKTsKPj4gK30KPj4gKwo+PiDCoCBzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2NvbnRl eHRfb3BzIGd1Y19jb250ZXh0X29wcyA9IHsKPj4gwqDCoMKgwqDCoCAuYWxsb2MgPSBndWNfY29u dGV4dF9hbGxvYywKPj4gwqAgwqDCoMKgwqDCoCAucHJlX3BpbiA9IGd1Y19jb250ZXh0X3ByZV9w aW4sCj4+IMKgwqDCoMKgwqAgLnBpbiA9IGd1Y19jb250ZXh0X3BpbiwKPj4gLcKgwqDCoCAudW5w aW4gPSBscmNfdW5waW4sCj4+IC3CoMKgwqAgLnBvc3RfdW5waW4gPSBscmNfcG9zdF91bnBpbiwK Pj4gK8KgwqDCoCAudW5waW4gPSBndWNfY29udGV4dF91bnBpbiwKPj4gK8KgwqDCoCAucG9zdF91 bnBpbiA9IGd1Y19jb250ZXh0X3Bvc3RfdW5waW4sCj4+IMKgIMKgwqDCoMKgwqAgLmVudGVyID0g aW50ZWxfY29udGV4dF9lbnRlcl9lbmdpbmUsCj4+IMKgwqDCoMKgwqAgLmV4aXQgPSBpbnRlbF9j b250ZXh0X2V4aXRfZW5naW5lLAo+PiDCoCDCoMKgwqDCoMKgIC5yZXNldCA9IGxyY19yZXNldCwK Pj4gLcKgwqDCoCAuZGVzdHJveSA9IGxyY19kZXN0cm95LAo+PiArwqDCoMKgIC5kZXN0cm95ID0g Z3VjX2NvbnRleHRfZGVzdHJveSwKPj4gwqAgfTsKPj4gwqAgLXN0YXRpYyBpbnQgZ3VjX3JlcXVl c3RfYWxsb2Moc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCkKPj4gK3N0YXRpYyBib29sIGNv bnRleHRfbmVlZHNfcmVnaXN0ZXIoc3RydWN0IGludGVsX2NvbnRleHQgKmNlLCBib29sIAo+PiBu ZXdfZ3VjX2lkKQo+PiArewo+PiArwqDCoMKgIHJldHVybiBuZXdfZ3VjX2lkIHx8IHRlc3RfYml0 KENPTlRFWFRfTFJDQV9ESVJUWSwgJmNlLT5mbGFncykgfHwKPj4gK8KgwqDCoMKgwqDCoMKgICFs cmNfZGVzY19yZWdpc3RlcmVkKGNlX3RvX2d1YyhjZSksIGNlLT5ndWNfaWQpOwo+PiArfQo+PiAr Cj4+ICtzdGF0aWMgaW50IGd1Y19yZXF1ZXN0X2FsbG9jKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJx KQo+PiDCoCB7Cj4+ICvCoMKgwqAgc3RydWN0IGludGVsX2NvbnRleHQgKmNlID0gcnEtPmNvbnRl eHQ7Cj4+ICvCoMKgwqAgc3RydWN0IGludGVsX2d1YyAqZ3VjID0gY2VfdG9fZ3VjKGNlKTsKPj4g wqDCoMKgwqDCoCBpbnQgcmV0Owo+PiDCoCAtIEdFTV9CVUdfT04oIWludGVsX2NvbnRleHRfaXNf cGlubmVkKHJlcXVlc3QtPmNvbnRleHQpKTsKPj4gK8KgwqDCoCBHRU1fQlVHX09OKCFpbnRlbF9j b250ZXh0X2lzX3Bpbm5lZChycS0+Y29udGV4dCkpOwo+PiDCoCDCoMKgwqDCoMKgIC8qCj4+IMKg wqDCoMKgwqDCoCAqIEZsdXNoIGVub3VnaCBzcGFjZSB0byByZWR1Y2UgdGhlIGxpa2VsaWhvb2Qg b2Ygd2FpdGluZyBhZnRlcgo+PiDCoMKgwqDCoMKgwqAgKiB3ZSBzdGFydCBidWlsZGluZyB0aGUg cmVxdWVzdCAtIGluIHdoaWNoIGNhc2Ugd2Ugd2lsbCBqdXN0Cj4+IMKgwqDCoMKgwqDCoCAqIGhh dmUgdG8gcmVwZWF0IHdvcmsuCj4+IMKgwqDCoMKgwqDCoCAqLwo+PiAtwqDCoMKgIHJlcXVlc3Qt PnJlc2VydmVkX3NwYWNlICs9IEdVQ19SRVFVRVNUX1NJWkU7Cj4+ICvCoMKgwqAgcnEtPnJlc2Vy dmVkX3NwYWNlICs9IEdVQ19SRVFVRVNUX1NJWkU7Cj4+IMKgIMKgwqDCoMKgwqAgLyoKPj4gwqDC oMKgwqDCoMKgICogTm90ZSB0aGF0IGFmdGVyIHRoaXMgcG9pbnQsIHdlIGhhdmUgY29tbWl0dGVk IHRvIHVzaW5nCj4+IEBAIC00ODMsNTYgKzk2Miw0NyBAQCBzdGF0aWMgaW50IGd1Y19yZXF1ZXN0 X2FsbG9jKHN0cnVjdCAKPj4gaTkxNV9yZXF1ZXN0ICpyZXF1ZXN0KQo+PiDCoMKgwqDCoMKgwqAg Ki8KPj4gwqAgwqDCoMKgwqDCoCAvKiBVbmNvbmRpdGlvbmFsbHkgaW52YWxpZGF0ZSBHUFUgY2Fj aGVzIGFuZCBUTEJzLiAqLwo+PiAtwqDCoMKgIHJldCA9IHJlcXVlc3QtPmVuZ2luZS0+ZW1pdF9m bHVzaChyZXF1ZXN0LCBFTUlUX0lOVkFMSURBVEUpOwo+PiArwqDCoMKgIHJldCA9IHJxLT5lbmdp bmUtPmVtaXRfZmx1c2gocnEsIEVNSVRfSU5WQUxJREFURSk7Cj4+IMKgwqDCoMKgwqAgaWYgKHJl dCkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+IMKgIC3CoMKgwqAgcmVxdWVz dC0+cmVzZXJ2ZWRfc3BhY2UgLT0gR1VDX1JFUVVFU1RfU0laRTsKPj4gLcKgwqDCoCByZXR1cm4g MDsKPj4gLX0KPj4gLQo+PiAtc3RhdGljIGlubGluZSB2b2lkIHF1ZXVlX3JlcXVlc3Qoc3RydWN0 IGk5MTVfc2NoZWRfZW5naW5lIAo+PiAqc2NoZWRfZW5naW5lLAo+PiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCj4+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQgcHJpbykKPj4gLXsKPj4gLcKgwqDCoCBHRU1fQlVH X09OKCFsaXN0X2VtcHR5KCZycS0+c2NoZWQubGluaykpOwo+PiAtwqDCoMKgIGxpc3RfYWRkX3Rh aWwoJnJxLT5zY2hlZC5saW5rLAo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaTkxNV9z Y2hlZF9sb29rdXBfcHJpb2xpc3Qoc2NoZWRfZW5naW5lLCBwcmlvKSk7Cj4+IC3CoMKgwqAgc2V0 X2JpdChJOTE1X0ZFTkNFX0ZMQUdfUFFVRVVFLCAmcnEtPmZlbmNlLmZsYWdzKTsKPj4gLX0KPj4g LQo+PiAtc3RhdGljIGludCBndWNfYnlwYXNzX3Rhc2tsZXRfc3VibWl0KHN0cnVjdCBpbnRlbF9n dWMgKmd1YywKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3Ry dWN0IGk5MTVfcmVxdWVzdCAqcnEpCj4+IC17Cj4+IC3CoMKgwqAgaW50IHJldDsKPj4gLQo+PiAt wqDCoMKgIF9faTkxNV9yZXF1ZXN0X3N1Ym1pdChycSk7Cj4+IC0KPj4gLcKgwqDCoCB0cmFjZV9p OTE1X3JlcXVlc3RfaW4ocnEsIDApOwo+PiAtCj4+IC3CoMKgwqAgZ3VjX3NldF9scmNfdGFpbChy cSk7Cj4+IC3CoMKgwqAgcmV0ID0gZ3VjX2FkZF9yZXF1ZXN0KGd1YywgcnEpOwo+PiAtwqDCoMKg IGlmIChyZXQgPT0gLUVCVVNZKQo+PiAtwqDCoMKgwqDCoMKgwqAgZ3VjLT5zdGFsbGVkX3JlcXVl c3QgPSBycTsKPj4gLQo+PiAtwqDCoMKgIHJldHVybiByZXQ7Cj4+IC19Cj4+ICvCoMKgwqAgcnEt PnJlc2VydmVkX3NwYWNlIC09IEdVQ19SRVFVRVNUX1NJWkU7Cj4+IMKgIC1zdGF0aWMgdm9pZCBn dWNfc3VibWl0X3JlcXVlc3Qoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCj4+IC17Cj4+IC3CoMKg wqAgc3RydWN0IGk5MTVfc2NoZWRfZW5naW5lICpzY2hlZF9lbmdpbmUgPSBycS0+ZW5naW5lLT5z Y2hlZF9lbmdpbmU7Cj4+IC3CoMKgwqAgc3RydWN0IGludGVsX2d1YyAqZ3VjID0gJnJxLT5lbmdp bmUtPmd0LT51Yy5ndWM7Cj4+IC3CoMKgwqAgdW5zaWduZWQgbG9uZyBmbGFnczsKPj4gK8KgwqDC oCAvKgo+PiArwqDCoMKgwqAgKiBDYWxsIHBpbl9ndWNfaWQgaGVyZSByYXRoZXIgdGhhbiBpbiB0 aGUgcGlubmluZyBzdGVwIGFzIHdpdGgKPj4gK8KgwqDCoMKgICogZG1hX3Jlc3YsIGNvbnRleHRz IGNhbiBiZSByZXBlYXRlZGx5IHBpbm5lZCAvIHVucGlubmVkIAo+PiB0cmFzaGluZyB0aGUKPj4g K8KgwqDCoMKgICogZ3VjX2lkcyBhbmQgY3JlYXRpbmcgaG9ycmlibGUgcmFjZSBjb25kaXRpb25z LiBUaGlzIGlzIAo+PiBlc3BlY2lhbGx5IGJhZAo+PiArwqDCoMKgwqAgKiB3aGVuIGd1Y19pZHMg YXJlIGJlaW5nIHN0b2xlbiBkdWUgdG8gb3ZlciBzdWJzY3JpcHRpb24uIEJ5IAo+PiB0aGUgdGlt ZQo+PiArwqDCoMKgwqAgKiB0aGlzIGZ1bmN0aW9uIGlzIHJlYWNoZWQsIGl0IGlzIGd1YXJhbnRl ZWQgdGhhdCB0aGUgZ3VjX2lkIAo+PiB3aWxsIGJlCj4+ICvCoMKgwqDCoCAqIHBlcnNpc3RlbnQg dW50aWwgdGhlIGdlbmVyYXRlZCByZXF1ZXN0IGlzIHJldGlyZWQuIFRodXMsIAo+PiBzZWFsaW5n IHRoZXNlCj4+ICvCoMKgwqDCoCAqIHJhY2UgY29uZGl0aW9ucy4gSXQgaXMgc3RpbGwgc2FmZSB0 byBmYWlsIGhlcmUgaWYgZ3VjX2lkcyBhcmUKPj4gK8KgwqDCoMKgICogZXhoYXVzdGVkIGFuZCBy ZXR1cm4gLUVBR0FJTiB0byB0aGUgdXNlciBpbmRpY2F0aW5nIHRoYXQgdGhleSAKPj4gY2FuIHRy eQo+PiArwqDCoMKgwqAgKiBhZ2FpbiBpbiB0aGUgZnV0dXJlLgo+PiArwqDCoMKgwqAgKgo+PiAr wqDCoMKgwqAgKiBUaGVyZSBpcyBubyBuZWVkIGZvciBhIGxvY2sgaGVyZSBhcyB0aGUgdGltZWxp bmUgbXV0ZXggCj4+IGVuc3VyZXMgYXQKPj4gK8KgwqDCoMKgICogbW9zdCBvbmUgY29udGV4dCBj YW4gYmUgZXhlY3V0aW5nIHRoaXMgY29kZSBwYXRoIGF0IG9uY2UuIFRoZQo+PiArwqDCoMKgwqAg KiBndWNfaWRfcmVmIGlzIGluY3JlbWVudGVkIG9uY2UgZm9yIGV2ZXJ5IHJlcXVlc3QgaW4gZmxp Z2h0IGFuZAo+PiArwqDCoMKgwqAgKiBkZWNyZW1lbnRlZCBvbiBlYWNoIHJldGlyZS4gV2hlbiBp dCBpcyB6ZXJvLCBhIGxvY2sgYXJvdW5kIHRoZQo+PiArwqDCoMKgwqAgKiBpbmNyZW1lbnQgKGlu IHBpbl9ndWNfaWQpIGlzIG5lZWRlZCB0byBzZWFsIGEgcmFjZSB3aXRoIAo+PiB1bnBpbl9ndWNf aWQuCj4+ICvCoMKgwqDCoCAqLwo+PiArwqDCoMKgIGlmIChhdG9taWNfYWRkX3VubGVzcygmY2Ut Pmd1Y19pZF9yZWYsIDEsIDApKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4+IMKgIC3C oMKgwqAgLyogV2lsbCBiZSBjYWxsZWQgZnJvbSBpcnEtY29udGV4dCB3aGVuIHVzaW5nIGZvcmVp Z24gZmVuY2VzLiAqLwo+PiAtwqDCoMKgIHNwaW5fbG9ja19pcnFzYXZlKCZzY2hlZF9lbmdpbmUt PmxvY2ssIGZsYWdzKTsKPj4gK8KgwqDCoCByZXQgPSBwaW5fZ3VjX2lkKGd1YywgY2UpO8KgwqDC oCAvKiByZXR1cm5zIDEgaWYgbmV3IGd1Y19pZCAKPj4gYXNzaWduZWQgKi8KPj4gK8KgwqDCoCBp ZiAodW5saWtlbHkocmV0IDwgMCkpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiAr wqDCoMKgIGlmIChjb250ZXh0X25lZWRzX3JlZ2lzdGVyKGNlLCAhIXJldCkpIHsKPj4gK8KgwqDC oMKgwqDCoMKgIHJldCA9IGd1Y19scmNfZGVzY19waW4oY2UpOwo+PiArwqDCoMKgwqDCoMKgwqAg aWYgKHVubGlrZWx5KHJldCkpIHvCoMKgwqAgLyogdW53aW5kICovCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGF0b21pY19kZWMoJmNlLT5ndWNfaWRfcmVmKTsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgdW5waW5fZ3VjX2lkKGd1YywgY2UpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCByZXR1cm4gcmV0Owo+PiArwqDCoMKgwqDCoMKgwqAgfQo+PiArwqDCoMKgIH0KPj4gwqAgLcKg wqDCoCBpZiAoZ3VjLT5zdGFsbGVkX3JlcXVlc3QgfHwgCj4+ICFpOTE1X3NjaGVkX2VuZ2luZV9p c19lbXB0eShzY2hlZF9lbmdpbmUpKQo+PiAtwqDCoMKgwqDCoMKgwqAgcXVldWVfcmVxdWVzdChz Y2hlZF9lbmdpbmUsIHJxLCBycV9wcmlvKHJxKSk7Cj4+IC3CoMKgwqAgZWxzZSBpZiAoZ3VjX2J5 cGFzc190YXNrbGV0X3N1Ym1pdChndWMsIHJxKSA9PSAtRUJVU1kpCj4+IC3CoMKgwqDCoMKgwqDC oCB0YXNrbGV0X2hpX3NjaGVkdWxlKCZzY2hlZF9lbmdpbmUtPnRhc2tsZXQpOwo+PiArwqDCoMKg IGNsZWFyX2JpdChDT05URVhUX0xSQ0FfRElSVFksICZjZS0+ZmxhZ3MpOwo+PiDCoCAtwqDCoMKg IHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjaGVkX2VuZ2luZS0+bG9jaywgZmxhZ3MpOwo+PiAr wqDCoMKgIHJldHVybiAwOwo+PiDCoCB9Cj4+IMKgIMKgIHN0YXRpYyB2b2lkIHNhbml0aXplX2h3 c3Aoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+PiBAQCAtNjA2LDYgKzEwNzYsNDEg QEAgc3RhdGljIHZvaWQgZ3VjX3NldF9kZWZhdWx0X3N1Ym1pc3Npb24oc3RydWN0IAo+PiBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSkKPj4gwqDCoMKgwqDCoCBlbmdpbmUtPnN1Ym1pdF9yZXF1ZXN0 ID0gZ3VjX3N1Ym1pdF9yZXF1ZXN0Owo+PiDCoCB9Cj4+IMKgICtzdGF0aWMgaW5saW5lIHZvaWQg Z3VjX2tlcm5lbF9jb250ZXh0X3BpbihzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGludGVsX2NvbnRleHQg KmNlKQo+PiArewo+PiArwqDCoMKgIGlmIChjb250ZXh0X2d1Y19pZF9pbnZhbGlkKGNlKSkKPj4g K8KgwqDCoMKgwqDCoMKgIHBpbl9ndWNfaWQoZ3VjLCBjZSk7Cj4+ICvCoMKgwqAgZ3VjX2xyY19k ZXNjX3BpbihjZSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBndWNfaW5pdF9s cmNfbWFwcGluZyhzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0 IGludGVsX2d0ICpndCA9IGd1Y190b19ndChndWMpOwo+PiArwqDCoMKgIHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZTsKPj4gK8KgwqDCoCBlbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKPj4g Kwo+PiArwqDCoMKgIC8qIG1ha2Ugc3VyZSBhbGwgZGVzY3JpcHRvcnMgYXJlIGNsZWFuLi4uICov Cj4+ICvCoMKgwqAgeGFfZGVzdHJveSgmZ3VjLT5jb250ZXh0X2xvb2t1cCk7Cj4+ICsKPj4gK8Kg wqDCoCAvKgo+PiArwqDCoMKgwqAgKiBTb21lIGNvbnRleHRzIG1pZ2h0IGhhdmUgYmVlbiBwaW5u ZWQgYmVmb3JlIHdlIGVuYWJsZWQgR3VDCj4+ICvCoMKgwqDCoCAqIHN1Ym1pc3Npb24sIHNvIHdl IG5lZWQgdG8gYWRkIHRoZW0gdG8gdGhlIEd1QyBib29rZWVwaW5nLgo+PiArwqDCoMKgwqAgKiBB bHNvLCBhZnRlciBhIHJlc2V0IHRoZSBvZiBHdUMgd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdCB0 aGUKPiB0aGUgb2YgLT4gb2YgdGhlCj4KPj4gK8KgwqDCoMKgICogaW5mb3JtYXRpb24gc2hhcmVk IHdpdGggR3VDIGlzIHByb3Blcmx5IHJlc2V0LiBUaGUga2VybmVsIAo+PiBMUkNzIGFyZQo+PiAr wqDCoMKgwqAgKiBub3QgYXR0YWNoZWQgdG8gdGhlIGdlbV9jb250ZXh0LCBzbyB0aGV5IG5lZWQg dG8gYmUgYWRkZWQgCj4+IHNlcGFyYXRlbHkuCj4+ICvCoMKgwqDCoCAqCj4+ICvCoMKgwqDCoCAq IE5vdGU6IHdlIHB1cnBvc2VseSBkbyBub3QgY2hlY2sgdGhlIHJldHVybiBvZiBndWNfbHJjX2Rl c2NfcGluLAo+IHB1cnBvc2VmdWxseQo+Cj4gSnVzdCBhIGJ1bmNoIG9mIG5pdHMsIHNvIG1heWJl IG5vdCB3b3J0aCByZXNwaW5uaW5nLiBJIHRoaW5rIGl0IG5lZWRzIAo+IGFuIHItYiBmcm9tIERh bmllbGUgYXMgd2VsbCwgZ2l2ZW4gdGhhdCBoZSBoYWQgYSBidW5jaCBvZiBjb21tZW50cyBvbiAK PiB0aGUgcHJldmlvdXMgcmV2IHRvby4gQnV0IGFwYXJ0IGZyb20gdGhlIG5pdHMsIGxvb2tzIGdv b2QgdG8gbWUuCj4KCkkgZGlkbid0IGZ1bGx5IHJlLXJldmlldyB0aGUgcGF0Y2gsIGJ1dCBJJ3Zl IGNoZWNrZWQgdGhlIHRoaW5ncyBJIGhhZCAKY29tbWVudGVkIG9uIGFuZCBJJ20gaGFwcHkgd2l0 aCBob3cgdGhleSd2ZSBiZWVuIGFkZHJlc3NlZC4gTXkgb25seSAKcmVtYWluaW5nIGNvbmNlcm4g aXMgdGhlIHBvdGVudGlhbGx5IGxvbmcgd2FpdCBpbiBhdG9taWMgY29udGV4dCwgYnV0IAp0aGF0 IGNhbiBiZSBhZGRyZXNzZWQgYXMgYSBmb2xsb3cgdXAuCgpEYW5pZWxlCgo+IFJldmlld2VkLWJ5 OiBKb2huIEhhcnJpc29uIDxKb2huLkMuSGFycmlzb25ASW50ZWwuY29tPgo+Cj4+ICvCoMKgwqDC oCAqIGJlY2F1c2UgdGhhdCBmdW5jdGlvbiBjYW4gb25seSBmYWlsIGlmIGEgcmVzZXQgaXMganVz dCAKPj4gc3RhcnRpbmcuIFRoaXMKPj4gK8KgwqDCoMKgICogaXMgYXQgdGhlIGVuZCBvZiByZXNl dCBzbyBwcmVzdW1hYmx5IGFub3RoZXIgcmVzZXQgaXNuJ3QgCj4+IGhhcHBlbmluZwo+PiArwqDC oMKgwqAgKiBhbmQgZXZlbiBpdCBkaWQgdGhpcyBjb2RlIHdvdWxkIGJlIHJ1biBhZ2Fpbi4KPj4g K8KgwqDCoMKgICovCj4+ICsKPj4gK8KgwqDCoCBmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBndCwg aWQpCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoZW5naW5lLT5rZXJuZWxfY29udGV4dCkKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZ3VjX2tlcm5lbF9jb250ZXh0X3BpbihndWMsIGVuZ2luZS0+ a2VybmVsX2NvbnRleHQpOwo+PiArfQo+PiArCj4+IMKgIHN0YXRpYyB2b2lkIGd1Y19yZWxlYXNl KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPj4gwqAgewo+PiDCoMKgwqDCoMKgIGVu Z2luZS0+c2FuaXRpemUgPSBOVUxMOyAvKiBubyBsb25nZXIgaW4gY29udHJvbCwgbm90aGluZyB0 byAKPj4gc2FuaXRpemUgKi8KPj4gQEAgLTcxOCw2ICsxMjIzLDcgQEAgaW50IGludGVsX2d1Y19z dWJtaXNzaW9uX3NldHVwKHN0cnVjdCAKPj4gaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4+IMKg IMKgIHZvaWQgaW50ZWxfZ3VjX3N1Ym1pc3Npb25fZW5hYmxlKHN0cnVjdCBpbnRlbF9ndWMgKmd1 YykKPj4gwqAgewo+PiArwqDCoMKgIGd1Y19pbml0X2xyY19tYXBwaW5nKGd1Yyk7Cj4+IMKgIH0K Pj4gwqAgwqAgdm9pZCBpbnRlbF9ndWNfc3VibWlzc2lvbl9kaXNhYmxlKHN0cnVjdCBpbnRlbF9n dWMgKmd1YykKPj4gQEAgLTc0MywzICsxMjQ5LDYyIEBAIHZvaWQgaW50ZWxfZ3VjX3N1Ym1pc3Np b25faW5pdF9lYXJseShzdHJ1Y3QgCj4+IGludGVsX2d1YyAqZ3VjKQo+PiDCoCB7Cj4+IMKgwqDC oMKgwqAgZ3VjLT5zdWJtaXNzaW9uX3NlbGVjdGVkID0gX19ndWNfc3VibWlzc2lvbl9zZWxlY3Rl ZChndWMpOwo+PiDCoCB9Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IGludGVsX2NvbnRl eHQgKgo+PiArZzJoX2NvbnRleHRfbG9va3VwKHN0cnVjdCBpbnRlbF9ndWMgKmd1YywgdTMyIGRl c2NfaWR4KQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZTsKPj4gKwo+ PiArwqDCoMKgIGlmICh1bmxpa2VseShkZXNjX2lkeCA+PSBHVUNfTUFYX0xSQ19ERVNDUklQVE9S UykpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIGRybV9lcnIoJmd1Y190b19ndChndWMpLT5pOTE1LT5k cm0sCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJJbnZhbGlkIGRlc2NfaWR4ICV1IiwgZGVz Y19pZHgpOwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIE5VTEw7Cj4+ICvCoMKgwqAgfQo+PiAr Cj4+ICvCoMKgwqAgY2UgPSBfX2dldF9jb250ZXh0KGd1YywgZGVzY19pZHgpOwo+PiArwqDCoMKg IGlmICh1bmxpa2VseSghY2UpKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBkcm1fZXJyKCZndWNfdG9f Z3QoZ3VjKS0+aTkxNS0+ZHJtLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiQ29udGV4dCBp cyBOVUxMLCBkZXNjX2lkeCAldSIsIGRlc2NfaWR4KTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVy biBOVUxMOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIHJldHVybiBjZTsKPj4gK30KPj4g Kwo+PiAraW50IGludGVsX2d1Y19kZXJlZ2lzdGVyX2RvbmVfcHJvY2Vzc19tc2coc3RydWN0IGlu dGVsX2d1YyAqZ3VjLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGNvbnN0IHUzMiAqbXNnLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHUzMiBsZW4pCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IGludGVsX2NvbnRleHQg KmNlOwo+PiArwqDCoMKgIHUzMiBkZXNjX2lkeCA9IG1zZ1swXTsKPj4gKwo+PiArwqDCoMKgIGlm ICh1bmxpa2VseShsZW4gPCAxKSkgewo+PiArwqDCoMKgwqDCoMKgwqAgZHJtX2VycigmZ3VjX3Rv X2d0KGd1YyktPmk5MTUtPmRybSwgIkludmFsaWQgbGVuZ3RoICV1IiwgbGVuKTsKPj4gK8KgwqDC oMKgwqDCoMKgIHJldHVybiAtRVBST1RPOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIGNl ID0gZzJoX2NvbnRleHRfbG9va3VwKGd1YywgZGVzY19pZHgpOwo+PiArwqDCoMKgIGlmICh1bmxp a2VseSghY2UpKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FUFJPVE87Cj4+ICsKPj4gK8Kg wqDCoCBpZiAoY29udGV4dF93YWl0X2Zvcl9kZXJlZ2lzdGVyX3RvX3JlZ2lzdGVyKGNlKSkgewo+ PiArwqDCoMKgwqDCoMKgwqAgc3RydWN0IGludGVsX3J1bnRpbWVfcG0gKnJ1bnRpbWVfcG0gPQo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmY2UtPmVuZ2luZS0+Z3QtPmk5MTUtPnJ1bnRpbWVf cG07Cj4+ICvCoMKgwqDCoMKgwqDCoCBpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKPj4gKwo+PiAr wqDCoMKgwqDCoMKgwqAgLyoKPj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBQcmV2aW91cyBvd25lciBv ZiB0aGlzIGd1Y19pZCBoYXMgYmVlbiBkZXJlZ2lzdGVyZWQsIG5vdyAKPj4gc2FmZQo+PiArwqDC oMKgwqDCoMKgwqDCoCAqIHJlZ2lzdGVyIHRoaXMgY29udGV4dC4KPj4gK8KgwqDCoMKgwqDCoMKg wqAgKi8KPj4gK8KgwqDCoMKgwqDCoMKgIHdpdGhfaW50ZWxfcnVudGltZV9wbShydW50aW1lX3Bt LCB3YWtlcmVmKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZWdpc3Rlcl9jb250ZXh0KGNl KTsKPj4gK8KgwqDCoMKgwqDCoMKgIGNscl9jb250ZXh0X3dhaXRfZm9yX2RlcmVnaXN0ZXJfdG9f cmVnaXN0ZXIoY2UpOwo+PiArwqDCoMKgwqDCoMKgwqAgaW50ZWxfY29udGV4dF9wdXQoY2UpOwo+ PiArwqDCoMKgIH0gZWxzZSBpZiAoY29udGV4dF9kZXN0cm95ZWQoY2UpKSB7Cj4+ICvCoMKgwqDC oMKgwqDCoCAvKiBDb250ZXh0IGhhcyBiZWVuIGRlc3Ryb3llZCAqLwo+PiArwqDCoMKgwqDCoMKg wqAgcmVsZWFzZV9ndWNfaWQoZ3VjLCBjZSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBscmNfZGVzdHJv eSgmY2UtPnJlZik7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+ICt9 Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oIAo+PiBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPj4gaW5kZXggOTQzZmU0ODVjNjYyLi4yMDRj OTVjMzkzNTMgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgK Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+PiBAQCAtNDE0Miw2ICs0 MTQyLDcgQEAgZW51bSB7Cj4+IMKgwqDCoMKgwqAgRkFVTFRfQU5EX0NPTlRJTlVFIC8qIFVuc3Vw cG9ydGVkICovCj4+IMKgIH07Cj4+IMKgICsjZGVmaW5lIENUWF9HVFRfQUREUkVTU19NQVNLIEdF Tk1BU0soMzEsIDEyKQo+PiDCoCAjZGVmaW5lIEdFTjhfQ1RYX1ZBTElEICgxIDw8IDApCj4+IMKg ICNkZWZpbmUgR0VOOF9DVFhfRk9SQ0VfUERfUkVTVE9SRSAoMSA8PCAxKQo+PiDCoCAjZGVmaW5l IEdFTjhfQ1RYX0ZPUkNFX1JFU1RPUkUgKDEgPDwgMikKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfcmVxdWVzdC5jCj4+IGluZGV4IDA5ZWJlYTlhMDA5MC4uZWYyNjcyNGZlOTgwIDEwMDY0NAo+ PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYwo+PiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYwo+PiBAQCAtNDA3LDYgKzQwNyw3IEBAIGJv b2wgaTkxNV9yZXF1ZXN0X3JldGlyZShzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKPj4gwqDCoMKg wqDCoMKgICovCj4+IMKgwqDCoMKgwqAgaWYgKCFsaXN0X2VtcHR5KCZycS0+c2NoZWQubGluaykp Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZW1vdmVfZnJvbV9lbmdpbmUocnEpOwo+PiArwqDCoMKg IGF0b21pY19kZWMoJnJxLT5jb250ZXh0LT5ndWNfaWRfcmVmKTsKPj4gwqDCoMKgwqDCoCBHRU1f QlVHX09OKCFsbGlzdF9lbXB0eSgmcnEtPmV4ZWN1dGVfY2IpKTsKPj4gwqAgwqDCoMKgwqDCoCBf X2xpc3RfZGVsX2VudHJ5KCZycS0+bGluayk7IC8qIHBvaXNvbiBuZWl0aGVyIHByZXYvbmV4dCAo UkNVIAo+PiB3YWxrcykgKi8KPgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v aW50ZWwtZ2Z4Cg==