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=-13.5 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 80D4CC433B4 for ; Tue, 13 Apr 2021 15:00:11 +0000 (UTC) Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by mail.kernel.org (Postfix) with ESMTP id 83BF4613B3 for ; Tue, 13 Apr 2021 15:00:10 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 83BF4613B3 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=dev-bounces@dpdk.org Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 89E2B1610BE; Tue, 13 Apr 2021 17:00:09 +0200 (CEST) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by mails.dpdk.org (Postfix) with ESMTP id 7D4491608B1 for ; Tue, 13 Apr 2021 17:00:06 +0200 (CEST) IronPort-SDR: vpAz9+GNcVggyM7SSUvQSuC3UxruEYaUypnWDtPfepKYjaLHrzvVTpELpr4S2KV3FtADfDpS7h 1L8/6yV/K0Tw== X-IronPort-AV: E=McAfee;i="6200,9189,9953"; a="214910282" X-IronPort-AV: E=Sophos;i="5.82,219,1613462400"; d="scan'208";a="214910282" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Apr 2021 08:00:03 -0700 IronPort-SDR: 6BuAD+xGayrvnOBfK224g0Zr12lqQV7eJU2nrMih3+w6riWXmdeBxX0IErNKZHooXitpGgcQYq ZJXcDdC8f1qg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.82,219,1613462400"; d="scan'208";a="451986181" Received: from orsmsx606.amr.corp.intel.com ([10.22.229.19]) by fmsmga002.fm.intel.com with ESMTP; 13 Apr 2021 08:00:03 -0700 Received: from orsmsx612.amr.corp.intel.com (10.22.229.25) by ORSMSX606.amr.corp.intel.com (10.22.229.19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2; Tue, 13 Apr 2021 08:00:02 -0700 Received: from orsmsx604.amr.corp.intel.com (10.22.229.17) by ORSMSX612.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2; Tue, 13 Apr 2021 08:00:02 -0700 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by orsmsx604.amr.corp.intel.com (10.22.229.17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2106.2 via Frontend Transport; Tue, 13 Apr 2021 08:00:02 -0700 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.102) 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.2106.2; Tue, 13 Apr 2021 08:00:00 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Kt3NVZdzgP8wt40mvC7ACiXlEcKty864Ug0OYbDQ6Z/4tD1Vy6BQRsgLhFDaa+0nUjiR6Ap4gt4XMpEiS7qYKD0A2f7U49vu8YPUdJOuI4Dl2wOSx1ic9+7+YRPx+yOmhItxqTS1EFv/a0TY+POk69wLj1wY1skouiN41KZXnyN20oOSvrpx6CMKf/xPx2cc/JYac+lWRelJXBxYmWIF6K3VHbbOm0cXvAMvPI9tSH1s7ZVimTrtgju2Gefu55NeJ2cJLTyk4jFiMKsA35wa5P7KUJxIZP3YCNvqxYLC2O3MfA4vQE53d4ro600SpMUBfEJX/NV4Sy1CoDgupsXlzA== 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=RgE7VcYmH3dX7JZn5nZoknJflTr2o5qLqPyMW5+Gndo=; b=CkZbl0+XZbfrEdcqg6EajnMLLZk+ko0Z8zAWnz/Z5XN0X254cngN1thOOgwtK6hz5/rl6z0uYBECkyYnABX0amknC4nuwoFJ+BwuAoBmTFve0dQB/vI+6AGHCS3FcFZyJJtJJ7Vo1mxPWbfgGwNPw1eF0Rywl2dAXJz+L7uXzzbXUrnAcO04r1xrYztPVbb/BkBOdwiq0bJZ+M8enmSNvDvixfTUSqy2gp4HY7fJQaNvd2UYkJ1dsgjQQ2cJcBFvJshg3zj2dhPv7koxUI0ht1zwzNOT7E6jmd5w+eb9Fqxv7j/dCcM/8qGUdJKu2aCe2EMbWStgePFj3bob7mkQvA== 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=RgE7VcYmH3dX7JZn5nZoknJflTr2o5qLqPyMW5+Gndo=; b=sdPvaAVS91lkVoyuWVitwN8yQzPup3VUAib0HhGcTY90h/WlYla9FigVi65O6ENAn5YUJz7uzWHRG7jqT9QBzpO7ZIJd8N8CYHax8ZvwgNiZ1dpvIzihrThG9kZUIvw25eg87aye0lXqDH7IY8Ofo/KhaiJghkPr6PukXxEVW64= Received: from DM6PR11MB2796.namprd11.prod.outlook.com (2603:10b6:5:c8::23) by DM4PR11MB5504.namprd11.prod.outlook.com (2603:10b6:5:39d::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4020.18; Tue, 13 Apr 2021 14:59:56 +0000 Received: from DM6PR11MB2796.namprd11.prod.outlook.com ([fe80::d099:834d:f5ad:39c9]) by DM6PR11MB2796.namprd11.prod.outlook.com ([fe80::d099:834d:f5ad:39c9%3]) with mapi id 15.20.4020.022; Tue, 13 Apr 2021 14:59:56 +0000 From: "Dumitrescu, Cristian" To: Li Zhang , "dekelp@nvidia.com" , "orika@nvidia.com" , "viacheslavo@nvidia.com" , "matan@nvidia.com" , "shahafs@nvidia.com" , "lironh@marvell.com" , Wisam Jaddo , "Li, Xiaoyun" , "Singh, Jasvinder" , Thomas Monjalon , "Yigit, Ferruh" , Andrew Rybchenko , Ray Kinsella , Neil Horman , "Jerin Jacob" , Hemant Agrawal CC: "dev@dpdk.org" , "rasland@nvidia.com" , "roniba@nvidia.com" , Haifei Luo , Jiawei Wang Thread-Topic: [PATCH v3 1/2] ethdev: add pre-defined meter policy API Thread-Index: AQHXL/oEJ/IoRAOPZEi67RsT/ofW/aqyhLDQ Date: Tue, 13 Apr 2021 14:59:56 +0000 Message-ID: References: <20210318085815.804896-1-lizh@nvidia.com> <20210413001428.1999959-1-lizh@nvidia.com> <20210413001428.1999959-2-lizh@nvidia.com> In-Reply-To: <20210413001428.1999959-2-lizh@nvidia.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-version: 11.5.1.3 dlp-reaction: no-action dlp-product: dlpe-windows authentication-results: nvidia.com; dkim=none (message not signed) header.d=none;nvidia.com; dmarc=none action=none header.from=intel.com; x-originating-ip: [109.79.26.31] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: fab615dc-c1a1-43d2-48f7-08d8fe8ccd66 x-ms-traffictypediagnostic: DM4PR11MB5504: 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:12; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: HVl1xLn3yFZwir1AV+TWXbR4utyLvGhk7M1ivrayLg4rBtHsDrkp0jxeaOYihbwaW1OFLtDUJYwMZlWbdRGcUX7v7Y0FczXkaqO6JJjLLn6TPA5oPpL3cbJGeRJkkq1tHl0RDQg0uzXGDJkRnPWutqm3uzZW+HEcKDs0ZfmNPvOgZlvM1K2Wn547DGp5UbCWazx5Je0L6oRsPRiYLhjyC3OOeA6laaN8+DDVFrQHb40eDUnM3U3W7i+3+2sTmyzKB1d+/t6MfQ2klJU+yaczfcOa/dw7rcs+QdsXJ/i0M9K1pFzyEFgB7A55iCaBZATsxq70SIU7pVO1EWIFgcUfoEXbKqVegiZ37SrrDPbu5MSpfZyZ4XBdq3SbYWM3e8McQO2892l0U9RhuzDtQnyPNjidxHdjCl4r9pXm/iUl4l4/sPKxW2E6gjApfsfCgiRcRJaV9+p/+uTUz91ZxnDXs3SDD21bdK/2AR2VzVy4Rkt2BIRiwkNvTPhNiNWTmKJ4RDdwblI+e+ImVIvys7dWeY22UxC97uX7h/vIFUy9JAGW235HBk3vGAMss1RjXQd5Ol2H3mHFt7zb1SnrPzAuk/P9elT0VaYafoy7bLgU09Md4jdiQPh5X3h3vkR5WqozADmNQsvm1OSvykj/yTBT7EtvewWpyz+V7CFpVnAQ2Qc= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM6PR11MB2796.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(396003)(366004)(39850400004)(346002)(376002)(136003)(316002)(5660300002)(66556008)(66946007)(66446008)(9686003)(921005)(122000001)(6506007)(2906002)(64756008)(52536014)(8936002)(4326008)(86362001)(7416002)(83380400001)(186003)(110136005)(55016002)(38100700002)(54906003)(71200400001)(76116006)(53546011)(66476007)(33656002)(30864003)(8676002)(7696005)(26005)(478600001)(559001)(579004)(309714004); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata: =?utf-8?B?TmxKUWlJekl0OE9xVnZVNUJuMDh6aWdTU1d0U0JCc0sxWTEvUWFld241UWxX?= =?utf-8?B?WUpvOGpKamU5SkpsV1JQL1JNTmhkK2o0bVV6WUhSYVdJd01JT0xhSjlNUjNn?= =?utf-8?B?dkZHNHNQY3loSGlmNGhIc2QzbEpDY0NUNWE2Q2pzU2dXTHR3SnBFUVNYOWRr?= =?utf-8?B?aGtsd2M5ck9JNmdiSThsK1pTM29HM2hzSzZQOWNLVkxrTE1GUG1jSXBZelpi?= =?utf-8?B?dnd1L2hFNGRZVUJsSmljM21WQ0JtU29WSmQ2YWprNWhGd3c3NmtPZlRNYmJZ?= =?utf-8?B?b0ROODNuQ1A3NmRxdHErczNhbmdvMnJhSUpLNVllOElucDVyNFR0WkkyVWps?= =?utf-8?B?a2pNSHlxanR4b21iLzRyMDB2T1F0NE9mUE1IVzZQZTR0ajB5YWdrd3BNM3Fz?= =?utf-8?B?NmhhTVJrZ3lEa2U2ZlJQeFg3SGFFcmhTT3FMcUkzU0JSb3pMUkRQVXZvZHN0?= =?utf-8?B?ajN5ajdyUFdFM0paMlVHNHFVL1RMVEg0N3RIL3ZTdFBEQmlIMi9BVEE0Qi9h?= =?utf-8?B?eWpIdWlCMzhWa3dkcTF6eFJMYkZSdnl3MTdlU015azEzak9rUzB6eGFpMC9Z?= =?utf-8?B?QlRoTS9GaHNxSE9KTGJGa0MvWHF5L3RjamxnblA3NnZ3MEJNVXU1K1BPdWdz?= =?utf-8?B?N0pvWldjZGlCWkZORHlwV0MzZGJ2U1ROc3pZL1U3cHFCMlZxTWF4aUl4aE4x?= =?utf-8?B?VlFGYWo4eU1BaW82dHlwbzEvcmNxeG1BL1RYRys5aTZNVHMyOWJQNDArMnhk?= =?utf-8?B?Z08ybWhlb3RjSFpPSWIvRUhwV2pkU1BKODBQTmttaDU5OUZiU1MyNVc3Zk85?= =?utf-8?B?UWN2enN1V1oyNTRIUjdQT2JvRXRLZjZ3ZlNwNVRYakdLQ1AxTVhoZTBFek1m?= =?utf-8?B?QUJ5eXNpa0JTL3dvU3lTOHA4NW9aWVJhS2V5RHlRcllQYUJRSWlaWGh3eEYy?= =?utf-8?B?VzBBOVp2SDkrelNYM1dWSW96RTl4M2lweUZ1M1NoR3hzZkc5M21YNGJiRU05?= =?utf-8?B?d3Q4OWdUOEJZYXd6RjFlM3dYNmZCVVJCcUhXNkZ4cjBVU1o4M0Zqb0lmcGJs?= =?utf-8?B?Y1VVRmgrVXRaNmZJRzBzOHNmM2NlL0dzQTNNcWVvZGNQcS80a0tBV3RYYlpm?= =?utf-8?B?N2Z4M0wyaVhIWTZxV1VWWWZCSU11a1dVQWxydmNiRGhsdmVLTG0zYW5Fby9k?= =?utf-8?B?ay9ycmdzcndKMDNHWldJVm50UGZjbnVORERoaTZNMU1FclJLNXZJL0ZrL2dK?= =?utf-8?B?T2tyQW5LOFVwdE12OUc0bWVEb0pwRlF6c29DNXUzbDJ6dThVdlBncm5mamto?= =?utf-8?B?NEhqZGczRWF0d2YvS3c0MFJ6UEE3MEpZZUk4aHk2MTVPdWttVjAwRGdBYWhW?= =?utf-8?B?dHVrUUM1ZjcweFdWSkl3ZHZreUl5d1ZlT29aMUZCcmFKQWVKSDcrbmpCNStr?= =?utf-8?B?WVJwSFdIQ1ZCcHArbWV5RlFILzNMeDZhMkFGUjFQUXFPVWwwbHQ3VHcrWUNa?= =?utf-8?B?N0g2Zk9zK3lwMGZVaGMzV2pEZFo1SEd2ZGhVZ2VtelJzdS8zZmhuaTNCU01D?= =?utf-8?B?ZHpzVmxvMXJHZjVkWXliR2hBdFc5UUFrVlcvb0JpbTA1ejY1TkdOZm4yd2FX?= =?utf-8?B?L0Z2d1RyeFRFSzdhb2ZPYURuKzZUZlE4RDRSbFhBWjJKVklNR29sUFNmcndI?= =?utf-8?B?ZThuWWRJQThKVTZacnJ0U0ZzRHJGR0hUTXFtVjRWdVJmb1JiOVp1Tzh2NUpi?= =?utf-8?Q?v29I/rh9CU17SB0QWlL06pSAe1w8j1IHMiDA1SK?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM6PR11MB2796.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: fab615dc-c1a1-43d2-48f7-08d8fe8ccd66 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Apr 2021 14:59:56.6235 (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: NFvWCk69RUNM3gJyH+ucKlb2PX/2hV85DRlga3ziMHBA2SWaPEy8zpsN9Yt2NafQBQCV7tWXSNcrkWyAJNPrCUGlA81sxIinZHHAc0UotDw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR11MB5504 X-OriginatorOrg: intel.com Subject: Re: [dpdk-dev] [PATCH v3 1/2] ethdev: add pre-defined meter policy API X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" SGkgTGksDQoNCkhlcmUgYXJlIHNvbWUgaW5pdGlhbCBjb21tZW50cyB3aGlsZSB3YWl0aW5nIGZv ciBhIG5ldyB2ZXJzaW9uIHRoYXQgYXBwbGllcyBjbGVhbmx5Lg0KDQo+IC0tLS0tT3JpZ2luYWwg TWVzc2FnZS0tLS0tDQo+IEZyb206IExpIFpoYW5nIDxsaXpoQG52aWRpYS5jb20+DQo+IFNlbnQ6 IFR1ZXNkYXksIEFwcmlsIDEzLCAyMDIxIDE6MTQgQU0NCj4gVG86IGRla2VscEBudmlkaWEuY29t OyBvcmlrYUBudmlkaWEuY29tOyB2aWFjaGVzbGF2b0BudmlkaWEuY29tOw0KPiBtYXRhbkBudmlk aWEuY29tOyBzaGFoYWZzQG52aWRpYS5jb207IER1bWl0cmVzY3UsIENyaXN0aWFuDQo+IDxjcmlz dGlhbi5kdW1pdHJlc2N1QGludGVsLmNvbT47IGxpcm9uaEBtYXJ2ZWxsLmNvbTsgV2lzYW0gSmFk ZG8NCj4gPHdpc2FtbUBudmlkaWEuY29tPjsgTGksIFhpYW95dW4gPHhpYW95dW4ubGlAaW50ZWwu Y29tPjsgU2luZ2gsIEphc3ZpbmRlcg0KPiA8amFzdmluZGVyLnNpbmdoQGludGVsLmNvbT47IFRo b21hcyBNb25qYWxvbiA8dGhvbWFzQG1vbmphbG9uLm5ldD47DQo+IFlpZ2l0LCBGZXJydWggPGZl cnJ1aC55aWdpdEBpbnRlbC5jb20+OyBBbmRyZXcgUnliY2hlbmtvDQo+IDxhbmRyZXcucnliY2hl bmtvQG9rdGV0bGFicy5ydT47IFJheSBLaW5zZWxsYSA8bWRyQGFzaHJvZS5ldT47IE5laWwNCj4g SG9ybWFuIDxuaG9ybWFuQHR1eGRyaXZlci5jb20+DQo+IENjOiBkZXZAZHBkay5vcmc7IHJhc2xh bmRAbnZpZGlhLmNvbTsgcm9uaWJhQG52aWRpYS5jb207IEhhaWZlaSBMdW8NCj4gPGhhaWZlaWxA bnZpZGlhLmNvbT47IEppYXdlaSBXYW5nIDxqaWF3ZWl3QG52aWRpYS5jb20+DQo+IFN1YmplY3Q6 IFtQQVRDSCB2MyAxLzJdIGV0aGRldjogYWRkIHByZS1kZWZpbmVkIG1ldGVyIHBvbGljeSBBUEkN Cj4gDQo+IEN1cnJlbnRseSwgdGhlIGZsb3cgbWV0ZXIgcG9saWN5IGRvZXMgbm90IHN1cHBvcnQg bXVsdGlwbGUgYWN0aW9ucw0KPiBwZXIgY29sb3I7IGFsc28gdGhlIGFsbG93ZWQgYWN0aW9uIHR5 cGVzIHBlciBjb2xvciBhcmUgdmVyeSBsaW1pdGVkLg0KPiBJbiBhZGRpdGlvbiwgdGhlIHBvbGlj eSBjYW5ub3QgYmUgcHJlLWRlZmluZWQuDQo+IA0KPiBEdWUgdG8gdGhlIGdyb3dpbmcgaW4gZmxv dyBhY3Rpb25zIG9mZmxvYWQgYWJpbGl0aWVzIHRoZXJlIGlzIGEgcG90ZW50aWFsDQo+IGZvciB0 aGUgdXNlciB0byB1c2UgdmFyaWV0eSBvZiBhY3Rpb25zIHBlciBjb2xvciBkaWZmZXJlbnRseS4N Cj4gVGhpcyBuZXcgbWV0ZXIgcG9saWN5IEFQSSBjb21lcyB0byBhbGxvdyB0aGlzIHBvdGVudGlh bCBpbiB0aGUgbW9zdCBldGhkZXYNCj4gY29tbW9uIHdheSB1c2luZyBydGVfZmxvdyBhY3Rpb24g ZGVmaW5pdGlvbi4NCj4gQSBsaXN0IG9mIHJ0ZV9mbG93IGFjdGlvbnMgd2lsbCBiZSBwcm92aWRl ZCBieSB0aGUgdXNlciBwZXIgY29sb3INCj4gaW4gb3JkZXIgdG8gY3JlYXRlIGEgbWV0ZXIgcG9s aWN5Lg0KPiBJbiBhZGRpdGlvbiwgdGhlIEFQSSBmb3JjZXMgdG8gcHJlLWRlZmluZSB0aGUgcG9s aWN5IGJlZm9yZQ0KPiB0aGUgbWV0ZXJzIGNyZWF0aW9uIGluIG9yZGVyIHRvIGFsbG93IHNoYXJp bmcgb2Ygc2luZ2xlIHBvbGljeQ0KPiB3aXRoIG11bHRpcGxlIG1ldGVycyBlZmZpY2llbnRseS4N Cj4gDQo+IG1ldGVyX3BvbGljeV9pZCBpcyBhZGRlZCBpbnRvIHN0cnVjdCBydGVfbXRyX3BhcmFt cy4NCj4gU28gdGhhdCBpdCBjYW4gZ2V0IHRoZSBwb2xpY3kgZHVyaW5nIHRoZSBtZXRlcnMgY3Jl YXRpb24uDQo+IA0KPiBBbGxvdyBjb2xvcmluZyB0aGUgcGFja2V0IHVzaW5nIGEgbmV3IHJ0ZV9m bG93X2FjdGlvbl9jb2xvcg0KPiBhcyBjb3VsZCBiZSBkb25lIGJ5IHRoZSBvbGQgcG9saWN5IEFQ SS4NCj4gDQo+IFRoZSBuZXh0IEFQSSBmdW5jdGlvbiB3ZXJlIGFkZGVkOg0KPiAtIHJ0ZV9tdHJf bWV0ZXJfcG9saWN5X2NyZWF0ZQ0KPiAtIHJ0ZV9tdHJfbWV0ZXJfcG9saWN5X2RlbGV0ZQ0KPiAt IHJ0ZV9tdHJfbWV0ZXJfcG9saWN5X3VwZGF0ZQ0KPiAtIHJ0ZV9tdHJfbWV0ZXJfcG9saWN5X3Zh bGlkYXRlDQo+IFRoZSBuZXh0IHN0cnVjdCB3YXMgY2hhbmdlZDoNCj4gLSBydGVfbXRyX3BhcmFt cw0KPiAtIHJ0ZV9tdHJfY2FwYWJpbGl0aWVzDQo+IFRoZSBuZXh0IEFQSSB3YXMgZGVsZXRlZDoN Cj4gLSBydGVfbXRyX3BvbGljZXJfYWN0aW9uc191cGRhdGUNCj4gDQo+IFRvIHN1cHBvcnQgdGhp cyBBUEkgdGhlIGZvbGxvd2luZyBhcHAgd2VyZSBjaGFuZ2VkOg0KPiBhcHAvdGVzdC1mbG93LXBl cmY6IGNsZWFuIG1ldGVyIHBvbGljZXINCj4gYXBwL3Rlc3RwbWQ6IGNsZWFuIG1ldGVyIHBvbGlj ZXINCj4gDQo+IFRvIHN1cHBvcnQgdGhpcyBBUEkgdGhlIGZvbGxvd2luZyBkcml2ZXJzIHdlcmUg Y2hhbmdlZDoNCj4gbmV0L3NvZnRuaWM6IHN1cHBvcnQgbWV0ZXIgcG9saWN5IEFQSQ0KPiAxLiBj bGVhbnMgbWV0ZXIgcnRlX210cl9wb2xpY2VyX2FjdGlvbi4NCj4gMi4gU3VwcG9ydCBwb2xpY3kg QVBJIHRvIGdldCBjb2xvciBhY3Rpb24gYXMgcG9saWNlciBhY3Rpb24gZGlkLg0KPiAgICBUaGUg Y29sb3IgYWN0aW9uIHdpbGwgYmUgbWFwcGVkIGludG8gcnRlX3RhYmxlX2FjdGlvbl9wb2xpY2Vy Lg0KPiANCj4gbmV0L21seDU6IGNsZWFuIG1ldGVyIGNyZWF0aW9uIG1hbmFnZW1lbnQNCj4gQ2xl YW5zIGFuZCBicmVha3MgcGFydCBvZiB0aGUgY3VycmVudCBtZXRlciBtYW5hZ2VtZW50DQo+IGlu IG9yZGVyIHRvIGFsbG93IGJldHRlciBkZXNpZ24gd2l0aCBwb2xpY3kgQVBJLg0KPiANCj4gU2ln bmVkLW9mZi1ieTogTGkgWmhhbmcgPGxpemhAbnZpZGlhLmNvbT4NCj4gU2lnbmVkLW9mZi1ieTog SGFpZmVpIEx1byA8aGFpZmVpbEBudmlkaWEuY29tPg0KPiBTaWduZWQtb2ZmLWJ5OiBKaWF3ZWkg V2FuZyA8amlhd2Vpd0BudmlkaWEuY29tPg0KPiBBY2tlZC1ieTogTWF0YW4gQXpyYWQgPG1hdGFu QG52aWRpYS5jb20+DQo+IC0tLQ0KPiAgYXBwL3Rlc3QtZmxvdy1wZXJmL21haW4uYyAgICAgICAg ICAgICAgICAgICAgIHwgICA3IC0NCj4gIGFwcC90ZXN0LXBtZC9jbWRsaW5lLmMgICAgICAgICAg ICAgICAgICAgICAgICB8ICAgMSAtDQo+ICBhcHAvdGVzdC1wbWQvY21kbGluZV9tdHIuYyAgICAg ICAgICAgICAgICAgICAgfCAxNzIgLS0tLS0tLQ0KPiAgYXBwL3Rlc3QtcG1kL2NtZGxpbmVfbXRy LmggICAgICAgICAgICAgICAgICAgIHwgICAxIC0NCj4gIGRvYy9ndWlkZXMvcHJvZ19ndWlkZS9y dGVfZmxvdy5yc3QgICAgICAgICAgICB8ICAyMSArDQo+ICAuLi4vdHJhZmZpY19tZXRlcmluZ19h bmRfcG9saWNpbmcucnN0ICAgICAgICAgfCAgMTYgKy0NCj4gIGRvYy9ndWlkZXMvcmVsX25vdGVz L3JlbGVhc2VfMjFfMDUucnN0ICAgICAgICB8ICAyMiArLQ0KPiAgZG9jL2d1aWRlcy90ZXN0cG1k X2FwcF91Zy90ZXN0cG1kX2Z1bmNzLnJzdCAgIHwgIDE4IC0NCj4gIGRyaXZlcnMvbmV0L21seDUv bWx4NS5oICAgICAgICAgICAgICAgICAgICAgICB8ICAyNCArLQ0KPiAgZHJpdmVycy9uZXQvbWx4 NS9tbHg1X2Zsb3cuYyAgICAgICAgICAgICAgICAgIHwgIDQ2IC0tDQo+ICBkcml2ZXJzL25ldC9t bHg1L21seDVfZmxvdy5oICAgICAgICAgICAgICAgICAgfCAgMTggKy0NCj4gIGRyaXZlcnMvbmV0 L21seDUvbWx4NV9mbG93X2Fzby5jICAgICAgICAgICAgICB8ICAgOCArLQ0KPiAgZHJpdmVycy9u ZXQvbWx4NS9tbHg1X2Zsb3dfZHYuYyAgICAgICAgICAgICAgIHwgNDYxICstLS0tLS0tLS0tLS0t LS0tLQ0KPiAgZHJpdmVycy9uZXQvbWx4NS9tbHg1X2Zsb3dfbWV0ZXIuYyAgICAgICAgICAgIHwg MzY5ICstLS0tLS0tLS0tLS0tDQo+ICBkcml2ZXJzL25ldC9zb2Z0bmljL3J0ZV9ldGhfc29mdG5p Y19mbG93LmMgICAgfCAgMTkgKy0NCj4gIC4uLi9uZXQvc29mdG5pYy9ydGVfZXRoX3NvZnRuaWNf aW50ZXJuYWxzLmggICB8ICAxOCArLQ0KPiAgZHJpdmVycy9uZXQvc29mdG5pYy9ydGVfZXRoX3Nv ZnRuaWNfbWV0ZXIuYyAgIHwgMjY0ICsrKysrKystLS0NCj4gIGxpYi9saWJydGVfZXRoZGV2L3J0 ZV9mbG93LmggICAgICAgICAgICAgICAgICB8ICAyMiArDQo+ICBsaWIvbGlicnRlX2V0aGRldi9y dGVfbXRyLmMgICAgICAgICAgICAgICAgICAgfCAgNTUgKystDQo+ICBsaWIvbGlicnRlX2V0aGRl di9ydGVfbXRyLmggICAgICAgICAgICAgICAgICAgfCAyMTUgKysrKysrLS0NCj4gIGxpYi9saWJy dGVfZXRoZGV2L3J0ZV9tdHJfZHJpdmVyLmggICAgICAgICAgICB8ICA0NCArLQ0KPiAgbGliL2xp YnJ0ZV9ldGhkZXYvdmVyc2lvbi5tYXAgICAgICAgICAgICAgICAgIHwgICA1ICstDQo+ICAyMiBm aWxlcyBjaGFuZ2VkLCA1NjggaW5zZXJ0aW9ucygrKSwgMTI1OCBkZWxldGlvbnMoLSkNCj4gDQo+ IGRpZmYgLS1naXQgYS9hcHAvdGVzdC1mbG93LXBlcmYvbWFpbi5jIGIvYXBwL3Rlc3QtZmxvdy1w ZXJmL21haW4uYw0KPiBpbmRleCAwYWVmNzY3MzUwLi5jMWYzOGNiZWM1IDEwMDY0NA0KPiAtLS0g YS9hcHAvdGVzdC1mbG93LXBlcmYvbWFpbi5jDQo+ICsrKyBiL2FwcC90ZXN0LWZsb3ctcGVyZi9t YWluLmMNCj4gQEAgLTkyMSwxMyArOTIxLDYgQEAgY3JlYXRlX21ldGVyX3J1bGUoaW50IHBvcnRf aWQsIHVpbnQzMl90IGNvdW50ZXIpDQo+IA0KPiAgCS8qY3JlYXRlIG1ldGVyKi8NCj4gIAlwYXJh bXMubWV0ZXJfcHJvZmlsZV9pZCA9IGRlZmF1bHRfcHJvZl9pZDsNCj4gLQlwYXJhbXMuYWN0aW9u W1JURV9DT0xPUl9HUkVFTl0gPQ0KPiAtCQlNVFJfUE9MSUNFUl9BQ1RJT05fQ09MT1JfR1JFRU47 DQo+IC0JcGFyYW1zLmFjdGlvbltSVEVfQ09MT1JfWUVMTE9XXSA9DQo+IC0JCU1UUl9QT0xJQ0VS X0FDVElPTl9DT0xPUl9ZRUxMT1c7DQo+IC0JcGFyYW1zLmFjdGlvbltSVEVfQ09MT1JfUkVEXSA9 DQo+IC0JCU1UUl9QT0xJQ0VSX0FDVElPTl9EUk9QOw0KPiAtDQo+ICAJcmV0ID0gcnRlX210cl9j cmVhdGUocG9ydF9pZCwgY291bnRlciwgJnBhcmFtcywgMSwgJmVycm9yKTsNCj4gIAlpZiAocmV0 ICE9IDApIHsNCj4gIAkJcHJpbnRmKCJQb3J0ICV1IGNyZWF0ZSBtZXRlciBpZHgoJWQpIGVycm9y KCVkKSBtZXNzYWdlOg0KPiAlc1xuIiwNCj4gZGlmZiAtLWdpdCBhL2FwcC90ZXN0LXBtZC9jbWRs aW5lLmMgYi9hcHAvdGVzdC1wbWQvY21kbGluZS5jDQo+IGluZGV4IGY0NDExNmIwODcuLmZhZTc5 ZDRjODUgMTAwNjQ0DQo+IC0tLSBhL2FwcC90ZXN0LXBtZC9jbWRsaW5lLmMNCj4gKysrIGIvYXBw L3Rlc3QtcG1kL2NtZGxpbmUuYw0KPiBAQCAtMTcwNzEsNyArMTcwNzEsNiBAQCBjbWRsaW5lX3Bh cnNlX2N0eF90IG1haW5fY3R4W10gPSB7DQo+ICAJKGNtZGxpbmVfcGFyc2VfaW5zdF90ICopJmNt ZF9kZWxfcG9ydF9tZXRlciwNCj4gIAkoY21kbGluZV9wYXJzZV9pbnN0X3QgKikmY21kX3NldF9w b3J0X21ldGVyX3Byb2ZpbGUsDQo+ICAJKGNtZGxpbmVfcGFyc2VfaW5zdF90ICopJmNtZF9zZXRf cG9ydF9tZXRlcl9kc2NwX3RhYmxlLA0KPiAtCShjbWRsaW5lX3BhcnNlX2luc3RfdCAqKSZjbWRf c2V0X3BvcnRfbWV0ZXJfcG9saWNlcl9hY3Rpb24sDQo+ICAJKGNtZGxpbmVfcGFyc2VfaW5zdF90 ICopJmNtZF9zZXRfcG9ydF9tZXRlcl9zdGF0c19tYXNrLA0KPiAgCShjbWRsaW5lX3BhcnNlX2lu c3RfdCAqKSZjbWRfc2hvd19wb3J0X21ldGVyX3N0YXRzLA0KPiAgCShjbWRsaW5lX3BhcnNlX2lu c3RfdCAqKSZjbWRfbWNhc3RfYWRkciwNCj4gZGlmZiAtLWdpdCBhL2FwcC90ZXN0LXBtZC9jbWRs aW5lX210ci5jIGIvYXBwL3Rlc3QtcG1kL2NtZGxpbmVfbXRyLmMNCj4gaW5kZXggMzk4Mjc4N2Qy MC4uNDQzOTRlM2VhMSAxMDA2NDQNCj4gLS0tIGEvYXBwL3Rlc3QtcG1kL2NtZGxpbmVfbXRyLmMN Cj4gKysrIGIvYXBwL3Rlc3QtcG1kL2NtZGxpbmVfbXRyLmMNCj4gQEAgLTE0Niw1MyArMTQ2LDYg QEAgcGFyc2VfbWV0ZXJfY29sb3Jfc3RyKGNoYXIgKmNfc3RyLCB1aW50MzJfdA0KPiAqdXNlX3By ZXZfbWV0ZXJfY29sb3IsDQo+ICAJcmV0dXJuIDA7DQo+ICB9DQo+IA0KPiAtc3RhdGljIGludA0K PiAtc3RyaW5nX3RvX3BvbGljZXJfYWN0aW9uKGNoYXIgKnMpDQo+IC17DQo+IC0JaWYgKChzdHJj bXAocywgIkciKSA9PSAwKSB8fCAoc3RyY21wKHMsICJnIikgPT0gMCkpDQo+IC0JCXJldHVybiBN VFJfUE9MSUNFUl9BQ1RJT05fQ09MT1JfR1JFRU47DQo+IC0NCj4gLQlpZiAoKHN0cmNtcChzLCAi WSIpID09IDApIHx8IChzdHJjbXAocywgInkiKSA9PSAwKSkNCj4gLQkJcmV0dXJuIE1UUl9QT0xJ Q0VSX0FDVElPTl9DT0xPUl9ZRUxMT1c7DQo+IC0NCj4gLQlpZiAoKHN0cmNtcChzLCAiUiIpID09 IDApIHx8IChzdHJjbXAocywgInIiKSA9PSAwKSkNCj4gLQkJcmV0dXJuIE1UUl9QT0xJQ0VSX0FD VElPTl9DT0xPUl9SRUQ7DQo+IC0NCj4gLQlpZiAoKHN0cmNtcChzLCAiRCIpID09IDApIHx8IChz dHJjbXAocywgImQiKSA9PSAwKSkNCj4gLQkJcmV0dXJuIE1UUl9QT0xJQ0VSX0FDVElPTl9EUk9Q Ow0KPiAtDQo+IC0JcmV0dXJuIC0xOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgaW50DQo+IC1wYXJz ZV9wb2xpY2VyX2FjdGlvbl9zdHJpbmcoY2hhciAqcF9zdHIsIHVpbnQzMl90IGFjdGlvbl9tYXNr LA0KPiAtCWVudW0gcnRlX210cl9wb2xpY2VyX2FjdGlvbiBhY3Rpb25zW10pDQo+IC17DQo+IC0J Y2hhciAqdG9rZW47DQo+IC0JaW50IGNvdW50ID0gX19idWlsdGluX3BvcGNvdW50KGFjdGlvbl9t YXNrKTsNCj4gLQlpbnQgZ19jb2xvciA9IDAsIHlfY29sb3IgPSAwLCBhY3Rpb24sIGk7DQo+IC0N Cj4gLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgew0KPiAtCQl0b2tlbiA9IHN0cnRva19y KHBfc3RyLCBQQVJTRV9ERUxJTUlURVIsICZwX3N0cik7DQo+IC0JCWlmICh0b2tlbiA9PSAgTlVM TCkNCj4gLQkJCXJldHVybiAtMTsNCj4gLQ0KPiAtCQlhY3Rpb24gPSBzdHJpbmdfdG9fcG9saWNl cl9hY3Rpb24odG9rZW4pOw0KPiAtCQlpZiAoYWN0aW9uID09IC0xKQ0KPiAtCQkJcmV0dXJuIC0x Ow0KPiAtDQo+IC0JCWlmIChnX2NvbG9yID09IDAgJiYgKGFjdGlvbl9tYXNrICYgMHgxKSkgew0K PiAtCQkJYWN0aW9uc1tSVEVfQ09MT1JfR1JFRU5dID0gYWN0aW9uOw0KPiAtCQkJZ19jb2xvciA9 IDE7DQo+IC0JCX0gZWxzZSBpZiAoeV9jb2xvciA9PSAwICYmIChhY3Rpb25fbWFzayAmIDB4Mikp IHsNCj4gLQkJCWFjdGlvbnNbUlRFX0NPTE9SX1lFTExPV10gPSBhY3Rpb247DQo+IC0JCQl5X2Nv bG9yID0gMTsNCj4gLQkJfSBlbHNlDQo+IC0JCQlhY3Rpb25zW1JURV9DT0xPUl9SRURdID0gYWN0 aW9uOw0KPiAtCX0NCj4gLQlyZXR1cm4gMDsNCj4gLX0NCj4gLQ0KPiAgc3RhdGljIGludA0KPiAg cGFyc2VfbXVsdGlfdG9rZW5fc3RyaW5nKGNoYXIgKnRfc3RyLCB1aW50MTZfdCAqcG9ydF9pZCwN Cj4gIAl1aW50MzJfdCAqbXRyX2lkLCBlbnVtIHJ0ZV9jb2xvciAqKmRzY3BfdGFibGUpDQo+IEBA IC0zMDIsMTAgKzI1NSw2IEBAIHN0YXRpYyB2b2lkIGNtZF9zaG93X3BvcnRfbWV0ZXJfY2FwX3Bh cnNlZCh2b2lkDQo+ICpwYXJzZWRfcmVzdWx0LA0KPiAgCQljYXAuY29sb3JfYXdhcmVfdHJ0Y21f cmZjMjY5OF9zdXBwb3J0ZWQpOw0KPiAgCXByaW50ZigiY2FwLmNvbG9yX2F3YXJlX3RydGNtX3Jm YzQxMTVfc3VwcG9ydGVkICUiIFBSSWQzMiAiXG4iLA0KPiAgCQljYXAuY29sb3JfYXdhcmVfdHJ0 Y21fcmZjNDExNV9zdXBwb3J0ZWQpOw0KPiAtCXByaW50ZigiY2FwLnBvbGljZXJfYWN0aW9uX3Jl Y29sb3Jfc3VwcG9ydGVkICUiIFBSSWQzMiAiXG4iLA0KPiAtCQljYXAucG9saWNlcl9hY3Rpb25f cmVjb2xvcl9zdXBwb3J0ZWQpOw0KPiAtCXByaW50ZigiY2FwLnBvbGljZXJfYWN0aW9uX2Ryb3Bf c3VwcG9ydGVkICUiIFBSSWQzMiAiXG4iLA0KPiAtCQljYXAucG9saWNlcl9hY3Rpb25fZHJvcF9z dXBwb3J0ZWQpOw0KPiAgCXByaW50ZigiY2FwLnN0YXRzX21hc2sgJSIgUFJJeDY0ICJcbiIsIGNh cC5zdGF0c19tYXNrKTsNCj4gIH0NCj4gDQo+IEBAIC04MDgsMTIgKzc1Nyw2IEBAIHN0YXRpYyB2 b2lkIGNtZF9jcmVhdGVfcG9ydF9tZXRlcl9wYXJzZWQodm9pZA0KPiAqcGFyc2VkX3Jlc3VsdCwN Cj4gIAllbHNlDQo+ICAJCXBhcmFtcy5tZXRlcl9lbmFibGUgPSAwOw0KPiANCj4gLQlwYXJhbXMu YWN0aW9uW1JURV9DT0xPUl9HUkVFTl0gPQ0KPiAtCQlzdHJpbmdfdG9fcG9saWNlcl9hY3Rpb24o cmVzLT5nX2FjdGlvbik7DQo+IC0JcGFyYW1zLmFjdGlvbltSVEVfQ09MT1JfWUVMTE9XXSA9DQo+ IC0JCXN0cmluZ190b19wb2xpY2VyX2FjdGlvbihyZXMtPnlfYWN0aW9uKTsNCj4gLQlwYXJhbXMu YWN0aW9uW1JURV9DT0xPUl9SRURdID0NCj4gLQkJc3RyaW5nX3RvX3BvbGljZXJfYWN0aW9uKHJl cy0+cl9hY3Rpb24pOw0KPiAgCXBhcmFtcy5zdGF0c19tYXNrID0gcmVzLT5zdGF0aXN0aWNzX21h c2s7DQo+IA0KPiAgCXJldCA9IHJ0ZV9tdHJfY3JlYXRlKHBvcnRfaWQsIG10cl9pZCwgJnBhcmFt cywgc2hhcmVkLCAmZXJyb3IpOw0KPiBAQCAtMTE4MSwxMjEgKzExMjQsNiBAQCBjbWRsaW5lX3Bh cnNlX2luc3RfdA0KPiBjbWRfc2V0X3BvcnRfbWV0ZXJfZHNjcF90YWJsZSA9IHsNCj4gIAl9LA0K PiAgfTsNCj4gDQo+IC0vKiAqKiogU2V0IFBvcnQgTWV0ZXIgUG9saWNlciBBY3Rpb24gKioqICov DQo+IC1zdHJ1Y3QgY21kX3NldF9wb3J0X21ldGVyX3BvbGljZXJfYWN0aW9uX3Jlc3VsdCB7DQo+ IC0JY21kbGluZV9maXhlZF9zdHJpbmdfdCBzZXQ7DQo+IC0JY21kbGluZV9maXhlZF9zdHJpbmdf dCBwb3J0Ow0KPiAtCWNtZGxpbmVfZml4ZWRfc3RyaW5nX3QgbWV0ZXI7DQo+IC0JY21kbGluZV9m aXhlZF9zdHJpbmdfdCBwb2xpY2VyOw0KPiAtCWNtZGxpbmVfZml4ZWRfc3RyaW5nX3QgYWN0aW9u Ow0KPiAtCXVpbnQxNl90IHBvcnRfaWQ7DQo+IC0JdWludDMyX3QgbXRyX2lkOw0KPiAtCXVpbnQz Ml90IGFjdGlvbl9tYXNrOw0KPiAtCWNtZGxpbmVfbXVsdGlfc3RyaW5nX3QgcG9saWNlcl9hY3Rp b247DQo+IC19Ow0KPiAtDQo+IC1jbWRsaW5lX3BhcnNlX3Rva2VuX3N0cmluZ190IGNtZF9zZXRf cG9ydF9tZXRlcl9wb2xpY2VyX2FjdGlvbl9zZXQgPQ0KPiAtCVRPS0VOX1NUUklOR19JTklUSUFM SVpFUigNCj4gLQkJc3RydWN0IGNtZF9zZXRfcG9ydF9tZXRlcl9wb2xpY2VyX2FjdGlvbl9yZXN1 bHQsIHNldCwNCj4gInNldCIpOw0KPiAtY21kbGluZV9wYXJzZV90b2tlbl9zdHJpbmdfdCBjbWRf c2V0X3BvcnRfbWV0ZXJfcG9saWNlcl9hY3Rpb25fcG9ydCA9DQo+IC0JVE9LRU5fU1RSSU5HX0lO SVRJQUxJWkVSKA0KPiAtCQlzdHJ1Y3QgY21kX3NldF9wb3J0X21ldGVyX3BvbGljZXJfYWN0aW9u X3Jlc3VsdCwgcG9ydCwNCj4gInBvcnQiKTsNCj4gLWNtZGxpbmVfcGFyc2VfdG9rZW5fc3RyaW5n X3QgY21kX3NldF9wb3J0X21ldGVyX3BvbGljZXJfYWN0aW9uX21ldGVyDQo+ID0NCj4gLQlUT0tF Tl9TVFJJTkdfSU5JVElBTElaRVIoDQo+IC0JCXN0cnVjdCBjbWRfc2V0X3BvcnRfbWV0ZXJfcG9s aWNlcl9hY3Rpb25fcmVzdWx0LCBtZXRlciwNCj4gLQkJIm1ldGVyIik7DQo+IC1jbWRsaW5lX3Bh cnNlX3Rva2VuX3N0cmluZ190DQo+IGNtZF9zZXRfcG9ydF9tZXRlcl9wb2xpY2VyX2FjdGlvbl9w b2xpY2VyID0NCj4gLQlUT0tFTl9TVFJJTkdfSU5JVElBTElaRVIoDQo+IC0JCXN0cnVjdCBjbWRf c2V0X3BvcnRfbWV0ZXJfcG9saWNlcl9hY3Rpb25fcmVzdWx0LCBwb2xpY2VyLA0KPiAtCQkicG9s aWNlciIpOw0KPiAtY21kbGluZV9wYXJzZV90b2tlbl9zdHJpbmdfdCBjbWRfc2V0X3BvcnRfbWV0 ZXJfcG9saWNlcl9hY3Rpb25fYWN0aW9uDQo+ID0NCj4gLQlUT0tFTl9TVFJJTkdfSU5JVElBTEla RVIoDQo+IC0JCXN0cnVjdCBjbWRfc2V0X3BvcnRfbWV0ZXJfcG9saWNlcl9hY3Rpb25fcmVzdWx0 LCBhY3Rpb24sDQo+IC0JCSJhY3Rpb24iKTsNCj4gLWNtZGxpbmVfcGFyc2VfdG9rZW5fbnVtX3QN Cj4gY21kX3NldF9wb3J0X21ldGVyX3BvbGljZXJfYWN0aW9uX3BvcnRfaWQgPQ0KPiAtCVRPS0VO X05VTV9JTklUSUFMSVpFUigNCj4gLQkJc3RydWN0IGNtZF9zZXRfcG9ydF9tZXRlcl9wb2xpY2Vy X2FjdGlvbl9yZXN1bHQsIHBvcnRfaWQsDQo+IC0JCVJURV9VSU5UMTYpOw0KPiAtY21kbGluZV9w YXJzZV90b2tlbl9udW1fdCBjbWRfc2V0X3BvcnRfbWV0ZXJfcG9saWNlcl9hY3Rpb25fbXRyX2lk DQo+ID0NCj4gLQlUT0tFTl9OVU1fSU5JVElBTElaRVIoDQo+IC0JCXN0cnVjdCBjbWRfc2V0X3Bv cnRfbWV0ZXJfcG9saWNlcl9hY3Rpb25fcmVzdWx0LCBtdHJfaWQsDQo+IC0JCVJURV9VSU5UMzIp Ow0KPiAtY21kbGluZV9wYXJzZV90b2tlbl9udW1fdA0KPiBjbWRfc2V0X3BvcnRfbWV0ZXJfcG9s aWNlcl9hY3Rpb25fYWN0aW9uX21hc2sgPQ0KPiAtCVRPS0VOX05VTV9JTklUSUFMSVpFUigNCj4g LQkJc3RydWN0IGNtZF9zZXRfcG9ydF9tZXRlcl9wb2xpY2VyX2FjdGlvbl9yZXN1bHQsDQo+IGFj dGlvbl9tYXNrLA0KPiAtCQlSVEVfVUlOVDMyKTsNCj4gLWNtZGxpbmVfcGFyc2VfdG9rZW5fc3Ry aW5nX3QNCj4gY21kX3NldF9wb3J0X21ldGVyX3BvbGljZXJfYWN0aW9uX3BvbGljZXJfYWN0aW9u ID0NCj4gLQlUT0tFTl9TVFJJTkdfSU5JVElBTElaRVIoDQo+IC0JCXN0cnVjdCBjbWRfc2V0X3Bv cnRfbWV0ZXJfcG9saWNlcl9hY3Rpb25fcmVzdWx0LA0KPiAtCQlwb2xpY2VyX2FjdGlvbiwgVE9L RU5fU1RSSU5HX01VTFRJKTsNCj4gLQ0KPiAtc3RhdGljIHZvaWQgY21kX3NldF9wb3J0X21ldGVy X3BvbGljZXJfYWN0aW9uX3BhcnNlZCh2b2lkDQo+ICpwYXJzZWRfcmVzdWx0LA0KPiAtCV9fcnRl X3VudXNlZCBzdHJ1Y3QgY21kbGluZSAqY2wsDQo+IC0JX19ydGVfdW51c2VkIHZvaWQgKmRhdGEp DQo+IC17DQo+IC0Jc3RydWN0IGNtZF9zZXRfcG9ydF9tZXRlcl9wb2xpY2VyX2FjdGlvbl9yZXN1 bHQgKnJlcyA9DQo+IHBhcnNlZF9yZXN1bHQ7DQo+IC0JZW51bSBydGVfbXRyX3BvbGljZXJfYWN0 aW9uICphY3Rpb25zOw0KPiAtCXN0cnVjdCBydGVfbXRyX2Vycm9yIGVycm9yOw0KPiAtCXVpbnQz Ml90IG10cl9pZCA9IHJlcy0+bXRyX2lkOw0KPiAtCXVpbnQzMl90IGFjdGlvbl9tYXNrID0gcmVz LT5hY3Rpb25fbWFzazsNCj4gLQl1aW50MTZfdCBwb3J0X2lkID0gcmVzLT5wb3J0X2lkOw0KPiAt CWNoYXIgKnBfc3RyID0gcmVzLT5wb2xpY2VyX2FjdGlvbjsNCj4gLQlpbnQgcmV0Ow0KPiAtDQo+ IC0JaWYgKHBvcnRfaWRfaXNfaW52YWxpZChwb3J0X2lkLCBFTkFCTEVEX1dBUk4pKQ0KPiAtCQly ZXR1cm47DQo+IC0NCj4gLQkvKiBDaGVjazogYWN0aW9uIG1hc2sgKi8NCj4gLQlpZiAoYWN0aW9u X21hc2sgPT0gMCB8fCAoYWN0aW9uX21hc2sgJiAofjB4N1VMKSkpIHsNCj4gLQkJcHJpbnRmKCIg UG9saWNlciBhY3Rpb24gbWFzayBub3QgY29ycmVjdCAoZXJyb3IpXG4iKTsNCj4gLQkJcmV0dXJu Ow0KPiAtCX0NCj4gLQ0KPiAtCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgcG9saWNlciBhY3Rpb25z ICovDQo+IC0JYWN0aW9ucyA9IChlbnVtIHJ0ZV9tdHJfcG9saWNlcl9hY3Rpb24gKiltYWxsb2Mo UlRFX0NPTE9SUyAqDQo+IC0JCXNpemVvZihlbnVtIHJ0ZV9tdHJfcG9saWNlcl9hY3Rpb24pKTsN Cj4gLQlpZiAoYWN0aW9ucyA9PSBOVUxMKSB7DQo+IC0JCXByaW50ZigiTWVtb3J5IGZvciBwb2xp Y2VyIGFjdGlvbnMgbm90IGFsbG9jYXRlZCAoZXJyb3IpXG4iKTsNCj4gLQkJcmV0dXJuOw0KPiAt CX0NCj4gLQkvKiBQYXJzZSBwb2xpY2VyIGFjdGlvbiBzdHJpbmcgKi8NCj4gLQlyZXQgPSBwYXJz ZV9wb2xpY2VyX2FjdGlvbl9zdHJpbmcocF9zdHIsIGFjdGlvbl9tYXNrLCBhY3Rpb25zKTsNCj4g LQlpZiAocmV0KSB7DQo+IC0JCXByaW50ZigiIFBvbGljZXIgYWN0aW9uIHN0cmluZyBwYXJzZSBl cnJvclxuIik7DQo+IC0JCWZyZWUoYWN0aW9ucyk7DQo+IC0JCXJldHVybjsNCj4gLQl9DQo+IC0N Cj4gLQlyZXQgPSBydGVfbXRyX3BvbGljZXJfYWN0aW9uc191cGRhdGUocG9ydF9pZCwgbXRyX2lk LA0KPiAtCQlhY3Rpb25fbWFzaywgYWN0aW9ucywgJmVycm9yKTsNCj4gLQlpZiAocmV0ICE9IDAp IHsNCj4gLQkJZnJlZShhY3Rpb25zKTsNCj4gLQkJcHJpbnRfZXJyX21zZygmZXJyb3IpOw0KPiAt CQlyZXR1cm47DQo+IC0JfQ0KPiAtDQo+IC0JZnJlZShhY3Rpb25zKTsNCj4gLX0NCj4gLQ0KPiAt Y21kbGluZV9wYXJzZV9pbnN0X3QgY21kX3NldF9wb3J0X21ldGVyX3BvbGljZXJfYWN0aW9uID0g ew0KPiAtCS5mID0gY21kX3NldF9wb3J0X21ldGVyX3BvbGljZXJfYWN0aW9uX3BhcnNlZCwNCj4g LQkuZGF0YSA9IE5VTEwsDQo+IC0JLmhlbHBfc3RyID0gInNldCBwb3J0IG1ldGVyIHBvbGljZXIg YWN0aW9uIDxwb3J0X2lkPiA8bXRyX2lkPiAiDQo+IC0JCSI8YWN0aW9uX21hc2s+IDxhY3Rpb24w PiBbPGFjdGlvbjE+IDxhY3Rpb24yPl0iLA0KPiAtCS50b2tlbnMgPSB7DQo+IC0JCSh2b2lkICop JmNtZF9zZXRfcG9ydF9tZXRlcl9wb2xpY2VyX2FjdGlvbl9zZXQsDQo+IC0JCSh2b2lkICopJmNt ZF9zZXRfcG9ydF9tZXRlcl9wb2xpY2VyX2FjdGlvbl9wb3J0LA0KPiAtCQkodm9pZCAqKSZjbWRf c2V0X3BvcnRfbWV0ZXJfcG9saWNlcl9hY3Rpb25fbWV0ZXIsDQo+IC0JCSh2b2lkICopJmNtZF9z ZXRfcG9ydF9tZXRlcl9wb2xpY2VyX2FjdGlvbl9wb2xpY2VyLA0KPiAtCQkodm9pZCAqKSZjbWRf c2V0X3BvcnRfbWV0ZXJfcG9saWNlcl9hY3Rpb25fYWN0aW9uLA0KPiAtCQkodm9pZCAqKSZjbWRf c2V0X3BvcnRfbWV0ZXJfcG9saWNlcl9hY3Rpb25fcG9ydF9pZCwNCj4gLQkJKHZvaWQgKikmY21k X3NldF9wb3J0X21ldGVyX3BvbGljZXJfYWN0aW9uX210cl9pZCwNCj4gLQkJKHZvaWQgKikmY21k X3NldF9wb3J0X21ldGVyX3BvbGljZXJfYWN0aW9uX2FjdGlvbl9tYXNrLA0KPiAtCQkodm9pZA0K PiAqKSZjbWRfc2V0X3BvcnRfbWV0ZXJfcG9saWNlcl9hY3Rpb25fcG9saWNlcl9hY3Rpb24sDQo+ IC0JCU5VTEwsDQo+IC0JfSwNCj4gLX07DQo+IC0NCj4gIC8qICoqKiBTZXQgUG9ydCBNZXRlciBT dGF0cyBNYXNrICoqKiAqLw0KPiAgc3RydWN0IGNtZF9zZXRfcG9ydF9tZXRlcl9zdGF0c19tYXNr X3Jlc3VsdCB7DQo+ICAJY21kbGluZV9maXhlZF9zdHJpbmdfdCBzZXQ7DQo+IGRpZmYgLS1naXQg YS9hcHAvdGVzdC1wbWQvY21kbGluZV9tdHIuaCBiL2FwcC90ZXN0LXBtZC9jbWRsaW5lX210ci5o DQo+IGluZGV4IGU2OWQ2ZGEwMjMuLjdlMjcxM2NlYTMgMTAwNjQ0DQo+IC0tLSBhL2FwcC90ZXN0 LXBtZC9jbWRsaW5lX210ci5oDQo+ICsrKyBiL2FwcC90ZXN0LXBtZC9jbWRsaW5lX210ci5oDQo+ IEBAIC0xNyw3ICsxNyw2IEBAIGV4dGVybiBjbWRsaW5lX3BhcnNlX2luc3RfdCBjbWRfZGlzYWJs ZV9wb3J0X21ldGVyOw0KPiAgZXh0ZXJuIGNtZGxpbmVfcGFyc2VfaW5zdF90IGNtZF9kZWxfcG9y dF9tZXRlcjsNCj4gIGV4dGVybiBjbWRsaW5lX3BhcnNlX2luc3RfdCBjbWRfc2V0X3BvcnRfbWV0 ZXJfcHJvZmlsZTsNCj4gIGV4dGVybiBjbWRsaW5lX3BhcnNlX2luc3RfdCBjbWRfc2V0X3BvcnRf bWV0ZXJfZHNjcF90YWJsZTsNCj4gLWV4dGVybiBjbWRsaW5lX3BhcnNlX2luc3RfdCBjbWRfc2V0 X3BvcnRfbWV0ZXJfcG9saWNlcl9hY3Rpb247DQo+ICBleHRlcm4gY21kbGluZV9wYXJzZV9pbnN0 X3QgY21kX3NldF9wb3J0X21ldGVyX3N0YXRzX21hc2s7DQo+ICBleHRlcm4gY21kbGluZV9wYXJz ZV9pbnN0X3QgY21kX3Nob3dfcG9ydF9tZXRlcl9zdGF0czsNCj4gDQo+IGRpZmYgLS1naXQgYS9k b2MvZ3VpZGVzL3Byb2dfZ3VpZGUvcnRlX2Zsb3cucnN0DQo+IGIvZG9jL2d1aWRlcy9wcm9nX2d1 aWRlL3J0ZV9mbG93LnJzdA0KPiBpbmRleCBlMWI5M2VjZWRmLi4yZjVhNmUwYzMxIDEwMDY0NA0K PiAtLS0gYS9kb2MvZ3VpZGVzL3Byb2dfZ3VpZGUvcnRlX2Zsb3cucnN0DQo+ICsrKyBiL2RvYy9n dWlkZXMvcHJvZ19ndWlkZS9ydGVfZmxvdy5yc3QNCj4gQEAgLTI4NDEsNiArMjg0MSwyNyBAQCBm b3IgYGBSVEVfRkxPV19GSUVMRF9WQUxVRWBgIGFuZA0KPiBgYFJURV9GTE9XX0ZJRUxEX1BPSU5U RVJgYCByZXNwZWN0aXZlbHkuDQo+ICAgICB8IGBgdmFsdWVgYCAgICAgfCBpbW1lZGlhdGUgdmFs dWUgb3IgYSBwb2ludGVyIHRvIHRoaXMgdmFsdWUgICAgICAgICAgICAgICB8DQo+ICAgICArLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rDQo+IA0KPiArQWN0aW9uOiBgYE1FVEVSX0NPTE9SYGANCj4gK15eXl5e Xl5eXl5eXl5eXl5eXl5eXl5eDQo+ICsNCj4gK0NvbG9yIHRoZSBwYWNrZXQgdG8gcmVmbGVjdCB0 aGUgbWV0ZXIgY29sb3IgcmVzdWx0Lg0KPiArDQo+ICtUaGUgbWV0ZXIgYWN0aW9uIG11c3QgYmUg Y29uZmlndXJlZCBiZWZvcmUgbWV0ZXIgY29sb3IgYWN0aW9uLg0KPiArTWV0ZXIgY29sb3IgYWN0 aW9uIGlzIHNldCB0byBhIGNvbG9yIHRvIHJlZmxlY3QgdGhlIG1ldGVyIGNvbG9yIHJlc3VsdC4N Cj4gK1NldCB0aGUgbWV0ZXIgY29sb3IgaW4gdGhlIG1idWYgdG8gdGhlIHNlbGVjdGVkIGNvbG9y Lg0KPiArVGhlIG1ldGVyIGNvbG9yIGFjdGlvbiBvdXRwdXQgY29sb3IgaXMgdGhlIG91dHB1dCBj b2xvciBvZiB0aGUgcGFja2V0LA0KPiArd2hpY2ggaXMgc2V0IGluIHRoZSBwYWNrZXQgbWV0YS1k YXRhIChpLmUuIHN0cnVjdCBgYHJ0ZV9tYnVmOjpzY2hlZDo6Y29sb3JgYCkNCj4gKw0KPiArLi4g X3RhYmxlX3J0ZV9mbG93X2FjdGlvbl9tZXRlcl9jb2xvcjoNCj4gKw0KPiArLi4gdGFibGU6OiBN RVRFUl9DT0xPUg0KPiArDQo+ICsgICArLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0r DQo+ICsgICB8IEZpZWxkICAgICAgICAgICB8IFZhbHVlICAgICAgICB8DQo+ICsgICArPT09PT09 PT09PT09PT09PT0rPT09PT09PT09PT09PT0rDQo+ICsgICB8IGBgbWV0ZXJfY29sb3JgYCB8IFBh Y2tldCBjb2xvciB8DQo+ICsgICArLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rDQo+ ICsNCj4gIE5lZ2F0aXZlIHR5cGVzDQo+ICB+fn5+fn5+fn5+fn5+fg0KPiANCj4gZGlmZiAtLWdp dCBhL2RvYy9ndWlkZXMvcHJvZ19ndWlkZS90cmFmZmljX21ldGVyaW5nX2FuZF9wb2xpY2luZy5y c3QNCj4gYi9kb2MvZ3VpZGVzL3Byb2dfZ3VpZGUvdHJhZmZpY19tZXRlcmluZ19hbmRfcG9saWNp bmcucnN0DQo+IGluZGV4IDkwYzc4MWViMWQuLmMwNTM3ZTY1M2MgMTAwNjQ0DQo+IC0tLSBhL2Rv Yy9ndWlkZXMvcHJvZ19ndWlkZS90cmFmZmljX21ldGVyaW5nX2FuZF9wb2xpY2luZy5yc3QNCj4g KysrIGIvZG9jL2d1aWRlcy9wcm9nX2d1aWRlL3RyYWZmaWNfbWV0ZXJpbmdfYW5kX3BvbGljaW5n LnJzdA0KPiBAQCAtNTYsMTggKzU2LDEwIEBAIFRoZSBwcm9jZXNzaW5nIGRvbmUgZm9yIGVhY2gg aW5wdXQgcGFja2V0IGhpdHRpbmcgYW4NCj4gTVRSIG9iamVjdCBpczoNCj4gICAgY29sb3IgYmxp bmQgbW9kZSwgd2hpY2ggaXMgZXF1aXZhbGVudCB0byBjb25zaWRlcmluZyBhbGwgaW5wdXQgcGFj a2V0cw0KPiAgICBpbml0aWFsbHkgY29sb3JlZCBhcyBncmVlbi4NCj4gDQo+IC0qIFBvbGljaW5n OiBUaGVyZSBpcyBhIHNlcGFyYXRlIHBvbGljZXIgYWN0aW9uIGNvbmZpZ3VyZWQgZm9yIGVhY2gg bWV0ZXINCj4gLSAgb3V0cHV0IGNvbG9yLCB3aGljaCBjYW46DQo+IC0NCj4gLSAgKiBEcm9wIHRo ZSBwYWNrZXQuDQo+IC0NCj4gLSAgKiBLZWVwIHRoZSBzYW1lIHBhY2tldCBjb2xvcjogdGhlIHBv bGljZXIgb3V0cHV0IGNvbG9yIG1hdGNoZXMgdGhlIG1ldGVyDQo+IC0gICAgb3V0cHV0IGNvbG9y IChlc3NlbnRpYWxseSBhIG5vLW9wIGFjdGlvbikuDQo+IC0NCj4gLSAgKiBSZWNvbG9yIHRoZSBw YWNrZXQ6IHRoZSBwb2xpY2VyIG91dHB1dCBjb2xvciBpcyBzZXQgdG8gYSBkaWZmZXJlbnQgY29s b3INCj4gLSAgICB0aGFuIHRoZSBtZXRlciBvdXRwdXQgY29sb3IuIFRoZSBwb2xpY2VyIG91dHB1 dCBjb2xvciBpcyB0aGUgb3V0cHV0IGNvbG9yDQo+IC0gICAgb2YgdGhlIHBhY2tldCwgd2hpY2gg aXMgc2V0IGluIHRoZSBwYWNrZXQgbWV0YS1kYXRhIChpLmUuIHN0cnVjdA0KPiAtICAgIGBgcnRl X21idWY6OnNjaGVkOjpjb2xvcmBgKS4NCj4gKyogVGhlcmUgaXMgYSBtZXRlciBwb2xpY3kgQVBJ IHRvIG1hbmFnZSBwcmUtZGVmaW5lZCBwb2xpY2llcyBmb3IgbWV0ZXIuDQo+ICsgIEFueSBydGVf ZmxvdyBhY3Rpb24gbGlzdCBjYW4gYmUgY29uZmlndXJlZCBwZXIgY29sb3IgZm9yIGVhY2ggcG9s aWN5Lg0KPiArICBBIG1ldGVyIG9iamVjdCBjb25maWd1cmVkIHdpdGggYSBwb2xpY3kgZXhlY3V0 ZXMgdGhlIGFjdGlvbnMgcGVyIHBhY2tldA0KPiArICBhY2NvcmRpbmcgdG8gdGhlIHBhY2tldCBj b2xvci4NCj4gDQo+ICAqIFN0YXRpc3RpY3M6IFRoZSBzZXQgb2YgY291bnRlcnMgbWFpbnRhaW5l ZCBmb3IgZWFjaCBNVFIgb2JqZWN0IGlzDQo+ICAgIGNvbmZpZ3VyYWJsZSBhbmQgc3ViamVjdCB0 byB0aGUgaW1wbGVtZW50YXRpb24gc3VwcG9ydC4gVGhpcyBzZXQgaW5jbHVkZXMNCj4gZGlmZiAt LWdpdCBhL2RvYy9ndWlkZXMvcmVsX25vdGVzL3JlbGVhc2VfMjFfMDUucnN0DQo+IGIvZG9jL2d1 aWRlcy9yZWxfbm90ZXMvcmVsZWFzZV8yMV8wNS5yc3QNCj4gaW5kZXggMTEzYjM3Y2RkYy4uMWIx YjQzNjhmNiAxMDA2NDQNCj4gLS0tIGEvZG9jL2d1aWRlcy9yZWxfbm90ZXMvcmVsZWFzZV8yMV8w NS5yc3QNCj4gKysrIGIvZG9jL2d1aWRlcy9yZWxfbm90ZXMvcmVsZWFzZV8yMV8wNS5yc3QNCj4g QEAgLTE2MSw3ICsxNjEsMjcgQEAgTmV3IEZlYXR1cmVzDQo+ICAgICAgYGBkcGRrLXRlc3RwbWQg LS0gLS1ldGgtbGluay1zcGVlZCBOYGANCj4gICAgKiBBZGRlZCBjb21tYW5kIHRvIGRpc3BsYXkg UnggcXVldWUgdXNlZCBkZXNjcmlwdG9yIGNvdW50Lg0KPiAgICAgIGBgc2hvdyBwb3J0IChwb3J0 X2lkKSByeHEgKHF1ZXVlX2lkKSBkZXNjIHVzZWQgY291bnRgYA0KPiAtDQo+ICsgICogZGVsZXRl ZCB0aGUgcG9ydCBtZXRlciBwb2xpY2VyIGFjdGlvbiBjb21tYW5kIC4NCj4gKyAgICBgYHNldCBw b3J0IG1ldGVyIHBvbGljZXIgYWN0aW9uIChwb3J0X2lkKSAobXRyX2lkKSAoYWN0aW9uX21hc2sp IC4uLmBgDQo+ICsgICogQWRkZWQgY29tbWFuZCB0byBjcmVhdGUgbWV0ZXIgcG9saWN5Lg0KPiAr ICAgIGBgYWRkIHBvcnQgbWV0ZXIgcG9saWN5IChwb3J0X2lkKSAocG9saWN5X2lkKSBnX2FjdGlv bnMge2FjdGlvbn0gZW5kDQo+IHlfYWN0aW9ucyB7YWN0aW9ufSBlbmQgcl9hY3Rpb25zIHthY3Rp b259IGVuZGBgDQo+ICsgICogQWRkZWQgY29tbWFuZCB0byBkZWxldGUgbWV0ZXIgcG9saWN5Lg0K PiArICAgIGBgZGVsIHBvcnQgbWV0ZXIgcG9saWN5IChwb3J0X2lkKSAocG9saWN5X2lkKWBgDQo+ ICsNCj4gKyogKipVcGRhdGVkIG1ldGVyIEFQSS4qKg0KPiArDQo+ICsgICogZXRoZGV2OiBEZWxl dGVkIG1ldGVyIHBvbGljZXIgQVBJIHRvIHN1cHBvcnQgcG9saWN5IEFQSS4NCj4gKyAgICBgYHJ0 ZV9tdHJfcG9saWNlcl9hY3Rpb25zX3VwZGF0ZSgpYGANCj4gKyAgKiBldGhkZXY6IEFkZGVkIG1l dGVyIEFQSSB0byBzdXBwb3J0IHByZS1kZWZpbmVkIHBvbGljeSwgcnRlX2Zsb3cgYWN0aW9uDQo+ IGxpc3QgcGVyIGNvbG9yLg0KPiArICAgIGBgcnRlX210cl9tZXRlcl9wb2xpY3lfY3JlYXRlKClg YCwgYGBydGVfbXRyX21ldGVyX3BvbGljeV9kZWxldGUoKWBgDQo+IGFuZA0KPiArICAgIGBgcnRl X210cl9jcmVhdGVfd2l0aF9wb2xpY3koKWBgDQo+ICsgICogZXRoZGV2OiBSZW1vdmVkIHJ0ZV9t dHJfcG9saWNlcl9hY3Rpb24gZnJvbSBydGVfbXRyX3BhcmFtcw0KPiBzdHJ1Y3R1cmVzLg0KPiAr ICAqIGV0aGRldjogQWRkZWQgcnRlX210cl9tZXRlcl9wb2xpY3lfcGFyYW1zIHN0cnVjdHVyZXMg dG8gc3VwcG9ydA0KPiBwb2xpY3kgQVBJLg0KPiArICAqIGV0aGRldjogQWRkZWQgbWV0ZXJfcG9s aWN5X2lkIGludG8gcnRlX210cl9wYXJhbXMgc3RydWN0dXJlcy4NCj4gKyAgKiBldGhkZXY6IFJl bW92ZWQgcG9saWNlcl9hY3Rpb25fcmVjb2xvcl9zdXBwb3J0ZWQgYW5kDQo+IHBvbGljZXJfYWN0 aW9uX2Ryb3Bfc3VwcG9ydGVkIGZyb20gcnRlX210cl9jYXBhYmlsaXRpZXMgc3RydWN0dXJlcy4N Cj4gKyAgKiBldGhkZXY6IEFkZGVkIG1ldGVyX3BvbGljeV9uX21heCBpbnRvIHJ0ZV9tdHJfY2Fw YWJpbGl0aWVzDQo+IHN0cnVjdHVyZXMuDQo+ICsgICogZXRoZGV2OiBBZGRlZCBSVEVfRkxPV19B Q1RJT05fVFlQRV9NRVRFUl9DT0xPUiBpbiBlbnVtDQo+IHJ0ZV9mbG93X2FjdGlvbl90eXBlLg0K PiArICAqIGV0aGRldjogQWRkZWQgUlRFX01UUl9FUlJPUl9UWVBFX01FVEVSX1BPTElDWV9JRCBh bmQNCj4gUlRFX01UUl9FUlJPUl9UWVBFX01FVEVSX1BPTElDWV9JRCBpbnRvIHJ0ZV9tdHJfZXJy b3JfdHlwZS4NCj4gDQo+ICBSZW1vdmVkIEl0ZW1zDQo+ICAtLS0tLS0tLS0tLS0tDQo+IGRpZmYg LS1naXQgYS9kb2MvZ3VpZGVzL3Rlc3RwbWRfYXBwX3VnL3Rlc3RwbWRfZnVuY3MucnN0DQo+IGIv ZG9jL2d1aWRlcy90ZXN0cG1kX2FwcF91Zy90ZXN0cG1kX2Z1bmNzLnJzdA0KPiBpbmRleCAzNmYw YTMyOGE1Li4zZjdhMWMwZTMzIDEwMDY0NA0KPiAtLS0gYS9kb2MvZ3VpZGVzL3Rlc3RwbWRfYXBw X3VnL3Rlc3RwbWRfZnVuY3MucnN0DQo+ICsrKyBiL2RvYy9ndWlkZXMvdGVzdHBtZF9hcHBfdWcv dGVzdHBtZF9mdW5jcy5yc3QNCj4gQEAgLTI4MzAsMjQgKzI4MzAsNiBAQCBTZXQgbWV0ZXIgZHNj cCB0YWJsZSBmb3IgdGhlIGV0aGVybmV0IGRldmljZTo6DQo+ICAgICB0ZXN0cG1kPiBzZXQgcG9y dCBtZXRlciBkc2NwIHRhYmxlIChwb3J0X2lkKSAobXRyX2lkKSBbKGRzY3BfdGJsX2VudHJ5MCkg XA0KPiAgICAgKGRzY3BfdGJsX2VudHJ5MSkuLi4oZHNjcF90YmxfZW50cnk2MyldDQo+IA0KPiAt c2V0IHBvcnQgbWV0ZXIgcG9saWNlciBhY3Rpb24NCj4gLX5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+DQo+IC0NCj4gLVNldCBtZXRlciBwb2xpY2VyIGFjdGlvbiBmb3IgdGhlIGV0aGVybmV0 IGRldmljZTo6DQo+IC0NCj4gLSAgIHRlc3RwbWQ+IHNldCBwb3J0IG1ldGVyIHBvbGljZXIgYWN0 aW9uIChwb3J0X2lkKSAobXRyX2lkKSAoYWN0aW9uX21hc2spIFwNCj4gLSAgIChhY3Rpb24wKSBb KGFjdGlvbjEpIChhY3Rpb24xKV0NCj4gLQ0KPiAtd2hlcmU6DQo+IC0NCj4gLSogYGBhY3Rpb25f bWFza2BgOiBCaXQgbWFzayBpbmRpY2F0aW5nIHdoaWNoIHBvbGljZXIgYWN0aW9ucyBuZWVkIHRv IGJlDQo+IC0gIHVwZGF0ZWQuIE9uZSBvciBtb3JlIHBvbGljZXIgYWN0aW9ucyBjYW4gYmUgdXBk YXRlZCBpbiBhIHNpbmdsZSBmdW5jdGlvbg0KPiAtICBpbnZvY2F0aW9uLiBUbyB1cGRhdGUgdGhl IHBvbGljZXIgYWN0aW9uIGFzc29jaWF0ZWQgd2l0aCBjb2xvciBDLCBiaXQNCj4gLSAgKDEgPDwg QykgbmVlZHMgdG8gYmUgc2V0IGluICphY3Rpb25fbWFzayogYW5kIGVsZW1lbnQgYXQgcG9zaXRp b24gQw0KPiAtICBpbiB0aGUgKmFjdGlvbnMqIGFycmF5IG5lZWRzIHRvIGJlIHZhbGlkLg0KPiAt KiBgYGFjdGlvbnhgYDogUG9saWNlciBhY3Rpb24gZm9yIHRoZSBjb2xvciB4LA0KPiAtICBSVEVf TVRSX0dSRUVOIDw9IHggPCBSVEVfTVRSX0NPTE9SUw0KPiAtDQo+ICBzZXQgcG9ydCBtZXRlciBz dGF0cyBtYXNrDQo+ICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+DQo+IA0KPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9uZXQvbWx4NS9tbHg1LmggYi9kcml2ZXJzL25ldC9tbHg1L21seDUuaA0KPiBp bmRleCA5YTAyYWE0NDg4Li5hOGUxMTAyM2NjIDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL25ldC9t bHg1L21seDUuaA0KPiArKysgYi9kcml2ZXJzL25ldC9tbHg1L21seDUuaA0KPiBAQCAtNTg0LDE0 ICs1ODQsNiBAQCBzdHJ1Y3QgbWx4NV9kZXZfc2hhcmVkX3BvcnQgew0KPiAgLyogTW9kaWZ5IHRo aXMgdmFsdWUgaWYgZW51bSBydGVfbXRyX2NvbG9yIGNoYW5nZXMuICovDQo+ICAjZGVmaW5lIFJU RV9NVFJfRFJPUFBFRCBSVEVfQ09MT1JTDQo+IA0KPiAtLyogTWV0ZXIgcG9saWNlciBzdGF0aXN0 aWNzICovDQo+IC1zdHJ1Y3QgbWx4NV9mbG93X3BvbGljZXJfc3RhdHMgew0KPiAtCXVpbnQzMl90 IHBhc3NfY250Ow0KPiAtCS8qKjwgQ29sb3IgY291bnRlciBmb3IgcGFzcy4gKi8NCj4gLQl1aW50 MzJfdCBkcm9wX2NudDsNCj4gLQkvKio8IENvbG9yIGNvdW50ZXIgZm9yIGRyb3AuICovDQo+IC19 Ow0KPiAtDQo+ICAvKiBNZXRlciB0YWJsZSBzdHJ1Y3R1cmUuICovDQo+ICBzdHJ1Y3QgbWx4NV9t ZXRlcl9kb21haW5faW5mbyB7DQo+ICAJc3RydWN0IG1seDVfZmxvd190YmxfcmVzb3VyY2UgKnRi bDsNCj4gQEAgLTYzMCwyNCArNjIyLDEyIEBAIHN0cnVjdCBtbHg1X21ldGVyX2RvbWFpbnNfaW5m b3Mgew0KPiANCj4gIC8qIE1ldGVyIHBhcmFtZXRlciBzdHJ1Y3R1cmUuICovDQo+ICBzdHJ1Y3Qg bWx4NV9mbG93X21ldGVyX2luZm8gew0KPiAtCXVpbnQzMl90IG1ldGVyX2lkOw0KPiAtCS8qKjwg TWV0ZXIgaWQuICovDQo+ICAJc3RydWN0IG1seDVfZmxvd19tZXRlcl9wcm9maWxlICpwcm9maWxl Ow0KPiAgCS8qKjwgTWV0ZXIgcHJvZmlsZSBwYXJhbWV0ZXJzLiAqLw0KPiAgCXJ0ZV9zcGlubG9j a190IHNsOyAvKio8IE1ldGVyIGFjdGlvbiBzcGlubG9jay4gKi8NCj4gLQkvKiogUG9saWNlciBh Y3Rpb25zIChwZXIgbWV0ZXIgb3V0cHV0IGNvbG9yKS4gKi8NCj4gLQllbnVtIHJ0ZV9tdHJfcG9s aWNlcl9hY3Rpb24gYWN0aW9uW1JURV9DT0xPUlNdOw0KPiAgCS8qKiBTZXQgb2Ygc3RhdHMgY291 bnRlcnMgdG8gYmUgZW5hYmxlZC4NCj4gIAkgKiBAc2VlIGVudW0gcnRlX210cl9zdGF0c190eXBl DQo+ICAJICovDQo+IC0JdWludDMyX3QgZ3JlZW5fYnl0ZXM6MTsNCj4gLQkvKiogU2V0IGdyZWVu IGJ5dGVzIHN0YXRzIHRvIGJlIGVuYWJsZWQuICovDQo+IC0JdWludDMyX3QgZ3JlZW5fcGt0czox Ow0KPiAtCS8qKiBTZXQgZ3JlZW4gcGFja2V0cyBzdGF0cyB0byBiZSBlbmFibGVkLiAqLw0KPiAt CXVpbnQzMl90IHJlZF9ieXRlczoxOw0KPiAtCS8qKiBTZXQgcmVkIGJ5dGVzIHN0YXRzIHRvIGJl IGVuYWJsZWQuICovDQo+IC0JdWludDMyX3QgcmVkX3BrdHM6MTsNCj4gLQkvKiogU2V0IHJlZCBw YWNrZXRzIHN0YXRzIHRvIGJlIGVuYWJsZWQuICovDQo+ICAJdWludDMyX3QgYnl0ZXNfZHJvcHBl ZDoxOw0KPiAgCS8qKiBTZXQgYnl0ZXMgZHJvcHBlZCBzdGF0cyB0byBiZSBlbmFibGVkLiAqLw0K PiAgCXVpbnQzMl90IHBrdHNfZHJvcHBlZDoxOw0KPiBAQCAtNjgyLDggKzY2Miw4IEBAIHN0cnVj dCBtbHg1X2Zsb3dfbWV0ZXJfaW5mbyB7DQo+ICAJdWludDMyX3QgdHJhbnNmZXI6MTsNCj4gIAlz dHJ1Y3QgbWx4NV9tZXRlcl9kb21haW5zX2luZm9zICptZnRzOw0KPiAgCS8qKjwgRmxvdyB0YWJs ZSBjcmVhdGVkIGZvciB0aGlzIG1ldGVyLiAqLw0KPiAtCXN0cnVjdCBtbHg1X2Zsb3dfcG9saWNl cl9zdGF0cyBwb2xpY2VyX3N0YXRzOw0KPiAtCS8qKjwgTWV0ZXIgcG9saWNlciBzdGF0aXN0aWNz LiAqLw0KPiArCXVpbnQzMl90IGRyb3BfY250Ow0KPiArCS8qKjwgQ29sb3IgY291bnRlciBmb3Ig ZHJvcC4gKi8NCj4gIAl1aW50MzJfdCByZWZfY250Ow0KPiAgCS8qKjwgVXNlIGNvdW50LiAqLw0K PiAgCXN0cnVjdCBtbHg1X2luZGV4ZWRfcG9vbCAqZmxvd19pcG9vbDsNCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvbmV0L21seDUvbWx4NV9mbG93LmMgYi9kcml2ZXJzL25ldC9tbHg1L21seDVfZmxv dy5jDQo+IGluZGV4IDI0MmM2ZjIyODguLmVlMmMzNTE2NDkgMTAwNjQ0DQo+IC0tLSBhL2RyaXZl cnMvbmV0L21seDUvbWx4NV9mbG93LmMNCj4gKysrIGIvZHJpdmVycy9uZXQvbWx4NS9tbHg1X2Zs b3cuYw0KPiBAQCAtNjY0Nyw1MiArNjY0Nyw2IEBAIG1seDVfZmxvd19kZXN0cm95X210cl90Ymxz KHN0cnVjdCBydGVfZXRoX2Rldg0KPiAqZGV2LA0KPiAgCXJldHVybiBmb3BzLT5kZXN0cm95X210 cl90YmxzKGRldiwgdGJscyk7DQo+ICB9DQo+IA0KPiAtLyoqDQo+IC0gKiBQcmVwYXJlIHBvbGlj ZXIgcnVsZXMuDQo+IC0gKg0KPiAtICogQHBhcmFtW2luXSBkZXYNCj4gLSAqICAgUG9pbnRlciB0 byBFdGhlcm5ldCBkZXZpY2UuDQo+IC0gKiBAcGFyYW1baW5dIGZtDQo+IC0gKiAgIFBvaW50ZXIg dG8gZmxvdyBtZXRlciBzdHJ1Y3R1cmUuDQo+IC0gKiBAcGFyYW1baW5dIGF0dHINCj4gLSAqICAg UG9pbnRlciB0byBmbG93IGF0dHJpYnV0ZXMuDQo+IC0gKg0KPiAtICogQHJldHVybg0KPiAtICog ICAwIG9uIHN1Y2Nlc3MsIC0xIG90aGVyd2lzZS4NCj4gLSAqLw0KPiAtaW50DQo+IC1tbHg1X2Zs b3dfcHJlcGFyZV9wb2xpY2VyX3J1bGVzKHN0cnVjdCBydGVfZXRoX2RldiAqZGV2LA0KPiAtCQkJ ICAgICAgIHN0cnVjdCBtbHg1X2Zsb3dfbWV0ZXJfaW5mbyAqZm0sDQo+IC0JCQkgICAgICAgY29u c3Qgc3RydWN0IHJ0ZV9mbG93X2F0dHIgKmF0dHIpDQo+IC17DQo+IC0JY29uc3Qgc3RydWN0IG1s eDVfZmxvd19kcml2ZXJfb3BzICpmb3BzOw0KPiAtDQo+IC0JZm9wcyA9IGZsb3dfZ2V0X2Rydl9v cHMoTUxYNV9GTE9XX1RZUEVfRFYpOw0KPiAtCXJldHVybiBmb3BzLT5wcmVwYXJlX3BvbGljZXJf cnVsZXMoZGV2LCBmbSwgYXR0cik7DQo+IC19DQo+IC0NCj4gLS8qKg0KPiAtICogRGVzdHJveSBw b2xpY2VyIHJ1bGVzLg0KPiAtICoNCj4gLSAqIEBwYXJhbVtpbl0gZm0NCj4gLSAqICAgUG9pbnRl ciB0byBmbG93IG1ldGVyIHN0cnVjdHVyZS4NCj4gLSAqIEBwYXJhbVtpbl0gYXR0cg0KPiAtICog ICBQb2ludGVyIHRvIGZsb3cgYXR0cmlidXRlcy4NCj4gLSAqDQo+IC0gKiBAcmV0dXJuDQo+IC0g KiAgIDAgb24gc3VjY2VzcywgLTEgb3RoZXJ3aXNlLg0KPiAtICovDQo+IC1pbnQNCj4gLW1seDVf Zmxvd19kZXN0cm95X3BvbGljZXJfcnVsZXMoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYsDQo+IC0J CQkJc3RydWN0IG1seDVfZmxvd19tZXRlcl9pbmZvICpmbSwNCj4gLQkJCQljb25zdCBzdHJ1Y3Qg cnRlX2Zsb3dfYXR0ciAqYXR0cikNCj4gLXsNCj4gLQljb25zdCBzdHJ1Y3QgbWx4NV9mbG93X2Ry aXZlcl9vcHMgKmZvcHM7DQo+IC0NCj4gLQlmb3BzID0gZmxvd19nZXRfZHJ2X29wcyhNTFg1X0ZM T1dfVFlQRV9EVik7DQo+IC0JcmV0dXJuIGZvcHMtPmRlc3Ryb3lfcG9saWNlcl9ydWxlcyhkZXYs IGZtLCBhdHRyKTsNCj4gLX0NCj4gLQ0KPiAgLyoqDQo+ICAgKiBBbGxvY2F0ZSB0aGUgbmVlZGVk IGFzbyBmbG93IG1ldGVyIGlkLg0KPiAgICoNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21s eDUvbWx4NV9mbG93LmggYi9kcml2ZXJzL25ldC9tbHg1L21seDVfZmxvdy5oDQo+IGluZGV4IGNi MjgwM2QwODAuLjdmYTE1ZWVmN2IgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvbmV0L21seDUvbWx4 NV9mbG93LmgNCj4gKysrIGIvZHJpdmVycy9uZXQvbWx4NS9tbHg1X2Zsb3cuaA0KPiBAQCAtODM5 LDYgKzgzOSw4IEBAIHN0cnVjdCBtbHg1X2xlZ2FjeV9mbG93X21ldGVyIHsNCj4gIAkvKiBNdXN0 IGJlIHRoZSBmaXJzdCBpbiBzdHJ1Y3QuICovDQo+ICAJVEFJTFFfRU5UUlkobWx4NV9sZWdhY3lf Zmxvd19tZXRlcikgbmV4dDsNCj4gIAkvKio8IFBvaW50ZXIgdG8gdGhlIG5leHQgZmxvdyBtZXRl ciBzdHJ1Y3R1cmUuICovDQo+ICsJdWludDMyX3QgbWV0ZXJfaWQ7DQo+ICsJLyoqPCBNZXRlciBp ZC4gKi8NCj4gIAl1aW50MzJfdCBpZHg7IC8qIEluZGV4IHRvIG1ldGVyIG9iamVjdC4gKi8NCj4g IH07DQo+IA0KPiBAQCAtMTA5NywxNCArMTA5OSw2IEBAIHR5cGVkZWYgc3RydWN0IG1seDVfbWV0 ZXJfZG9tYWluc19pbmZvcw0KPiAqKCptbHg1X2Zsb3dfY3JlYXRlX210cl90YmxzX3QpDQo+ICAJ CQkJCSAgICAoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYpOw0KPiAgdHlwZWRlZiBpbnQgKCptbHg1 X2Zsb3dfZGVzdHJveV9tdHJfdGJsc190KShzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldiwNCj4gIAkJ CQkJc3RydWN0IG1seDVfbWV0ZXJfZG9tYWluc19pbmZvcw0KPiAqdGJscyk7DQo+IC10eXBlZGVm IGludCAoKm1seDVfZmxvd19jcmVhdGVfcG9saWNlcl9ydWxlc190KQ0KPiAtCQkJCQkoc3RydWN0 IHJ0ZV9ldGhfZGV2ICpkZXYsDQo+IC0JCQkJCSBzdHJ1Y3QgbWx4NV9mbG93X21ldGVyX2luZm8g KmZtLA0KPiAtCQkJCQkgY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2F0dHIgKmF0dHIpOw0KPiAtdHlw ZWRlZiBpbnQgKCptbHg1X2Zsb3dfZGVzdHJveV9wb2xpY2VyX3J1bGVzX3QpDQo+IC0JCQkJCShz dHJ1Y3QgcnRlX2V0aF9kZXYgKmRldiwNCj4gLQkJCQkJIGNvbnN0IHN0cnVjdCBtbHg1X2Zsb3df bWV0ZXJfaW5mbw0KPiAqZm0sDQo+IC0JCQkJCSBjb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfYXR0ciAq YXR0cik7DQo+ICB0eXBlZGVmIHVpbnQzMl90ICgqbWx4NV9mbG93X210cl9hbGxvY190KQ0KPiAg CQkJCQkgICAgKHN0cnVjdCBydGVfZXRoX2RldiAqZGV2KTsNCj4gIHR5cGVkZWYgdm9pZCAoKm1s eDVfZmxvd19tdHJfZnJlZV90KShzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldiwNCj4gQEAgLTExNjEs OCArMTE1NSw2IEBAIHN0cnVjdCBtbHg1X2Zsb3dfZHJpdmVyX29wcyB7DQo+ICAJbWx4NV9mbG93 X3F1ZXJ5X3QgcXVlcnk7DQo+ICAJbWx4NV9mbG93X2NyZWF0ZV9tdHJfdGJsc190IGNyZWF0ZV9t dHJfdGJsczsNCj4gIAltbHg1X2Zsb3dfZGVzdHJveV9tdHJfdGJsc190IGRlc3Ryb3lfbXRyX3Ri bHM7DQo+IC0JbWx4NV9mbG93X2NyZWF0ZV9wb2xpY2VyX3J1bGVzX3QgcHJlcGFyZV9wb2xpY2Vy X3J1bGVzOw0KPiAtCW1seDVfZmxvd19kZXN0cm95X3BvbGljZXJfcnVsZXNfdCBkZXN0cm95X3Bv bGljZXJfcnVsZXM7DQo+ICAJbWx4NV9mbG93X210cl9hbGxvY190IGNyZWF0ZV9tZXRlcjsNCj4g IAltbHg1X2Zsb3dfbXRyX2ZyZWVfdCBmcmVlX21ldGVyOw0KPiAgCW1seDVfZmxvd19jb3VudGVy X2FsbG9jX3QgY291bnRlcl9hbGxvYzsNCj4gQEAgLTEzOTIsMTIgKzEzODQsNiBAQCBzdHJ1Y3Qg bWx4NV9tZXRlcl9kb21haW5zX2luZm9zDQo+ICptbHg1X2Zsb3dfY3JlYXRlX210cl90YmxzDQo+ ICAJCQkJCShzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldik7DQo+ICBpbnQgbWx4NV9mbG93X2Rlc3Ry b3lfbXRyX3RibHMoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYsDQo+ICAJCQkgICAgICAgc3RydWN0 IG1seDVfbWV0ZXJfZG9tYWluc19pbmZvcyAqdGJsKTsNCj4gLWludCBtbHg1X2Zsb3dfcHJlcGFy ZV9wb2xpY2VyX3J1bGVzKHN0cnVjdCBydGVfZXRoX2RldiAqZGV2LA0KPiAtCQkJCSAgIHN0cnVj dCBtbHg1X2Zsb3dfbWV0ZXJfaW5mbyAqZm0sDQo+IC0JCQkJICAgY29uc3Qgc3RydWN0IHJ0ZV9m bG93X2F0dHIgKmF0dHIpOw0KPiAtaW50IG1seDVfZmxvd19kZXN0cm95X3BvbGljZXJfcnVsZXMo c3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYsDQo+IC0JCQkJICAgIHN0cnVjdCBtbHg1X2Zsb3dfbWV0 ZXJfaW5mbyAqZm0sDQo+IC0JCQkJICAgIGNvbnN0IHN0cnVjdCBydGVfZmxvd19hdHRyICphdHRy KTsNCj4gIGludCBtbHg1X2Zsb3dfbWV0ZXJfZmx1c2goc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYs DQo+ICAJCQkgIHN0cnVjdCBydGVfbXRyX2Vycm9yICplcnJvcik7DQo+ICBpbnQgbWx4NV9mbG93 X2R2X2Rpc2NvdmVyX2NvdW50ZXJfb2Zmc2V0X3N1cHBvcnQoc3RydWN0IHJ0ZV9ldGhfZGV2DQo+ ICpkZXYpOw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NS9tbHg1X2Zsb3dfYXNvLmMN Cj4gYi9kcml2ZXJzL25ldC9tbHg1L21seDVfZmxvd19hc28uYw0KPiBpbmRleCBjZDJjYzAxNmI5 Li42MmQyZGYwNTRiIDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL25ldC9tbHg1L21seDVfZmxvd19h c28uYw0KPiArKysgYi9kcml2ZXJzL25ldC9tbHg1L21seDVfZmxvd19hc28uYw0KPiBAQCAtODA4 LDggKzgwOCw4IEBAIG1seDVfYXNvX21ldGVyX3VwZGF0ZV9ieV93cWUoc3RydWN0DQo+IG1seDVf ZGV2X2N0eF9zaGFyZWQgKnNoLA0KPiAgCQkvKiBXYWl0aW5nIGZvciB3cWUgcmVzb3VyY2UuICov DQo+IA0KPiAJcnRlX2RlbGF5X3VzX3NsZWVwKE1MWDVfQVNPX1dRRV9DUUVfUkVTUE9OU0VfREVM QVkpOw0KPiAgCX0gd2hpbGUgKC0tcG9sbF93cWVfdGltZXMpOw0KPiAtCURSVl9MT0coRVJSLCAi RmFpbCB0byBzZW5kIFdRRSBmb3IgQVNPIG1ldGVyICVkIiwNCj4gLQkJCW10ci0+Zm0ubWV0ZXJf aWQpOw0KPiArCURSVl9MT0coRVJSLCAiRmFpbCB0byBzZW5kIFdRRSBmb3IgQVNPIG1ldGVyIG9m ZnNldCAlZCIsDQo+ICsJCQltdHItPm9mZnNldCk7DQo+ICAJcmV0dXJuIC0xOw0KPiAgfQ0KPiAN Cj4gQEAgLTg0NCw3ICs4NDQsNyBAQCBtbHg1X2Fzb19tdHJfd2FpdChzdHJ1Y3QgbWx4NV9kZXZf Y3R4X3NoYXJlZA0KPiAqc2gsDQo+ICAJCS8qIFdhaXRpbmcgZm9yIENRRSByZWFkeS4gKi8NCj4g DQo+IAlydGVfZGVsYXlfdXNfc2xlZXAoTUxYNV9BU09fV1FFX0NRRV9SRVNQT05TRV9ERUxBWSk7 DQo+ICAJfSB3aGlsZSAoLS1wb2xsX2NxZV90aW1lcyk7DQo+IC0JRFJWX0xPRyhFUlIsICJGYWls IHRvIHBvbGwgQ1FFIHJlYWR5IGZvciBBU08gbWV0ZXIgJWQiLA0KPiAtCQkJbXRyLT5mbS5tZXRl cl9pZCk7DQo+ICsJRFJWX0xPRyhFUlIsICJGYWlsIHRvIHBvbGwgQ1FFIHJlYWR5IGZvciBBU08g bWV0ZXIgb2Zmc2V0ICVkIiwNCj4gKwkJCW10ci0+b2Zmc2V0KTsNCj4gIAlyZXR1cm4gLTE7DQo+ ICB9DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg1L21seDVfZmxvd19kdi5jDQo+IGIv ZHJpdmVycy9uZXQvbWx4NS9tbHg1X2Zsb3dfZHYuYw0KPiBpbmRleCBkOGVhNDQwNjY4Li5hZjMz OTdmYjU1IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL25ldC9tbHg1L21seDVfZmxvd19kdi5jDQo+ ICsrKyBiL2RyaXZlcnMvbmV0L21seDUvbWx4NV9mbG93X2R2LmMNCj4gQEAgLTE4NCwzMSArMTg0 LDYgQEAgZmxvd19kdl9hdHRyX2luaXQoY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2l0ZW0gKml0ZW0s DQo+IHVuaW9uIGZsb3dfZHZfYXR0ciAqYXR0ciwNCj4gIAlhdHRyLT52YWxpZCA9IDE7DQo+ICB9 DQo+IA0KPiAtLyoqDQo+IC0gKiBDb252ZXJ0IHJ0ZV9tdHJfY29sb3IgdG8gbWx4NSBjb2xvci4N Cj4gLSAqDQo+IC0gKiBAcGFyYW1baW5dIHJjb2wNCj4gLSAqICAgcnRlX210cl9jb2xvci4NCj4g LSAqDQo+IC0gKiBAcmV0dXJuDQo+IC0gKiAgIG1seDUgY29sb3IuDQo+IC0gKi8NCj4gLXN0YXRp YyBpbnQNCj4gLXJ0ZV9jb2xfMl9tbHg1X2NvbChlbnVtIHJ0ZV9jb2xvciByY29sKQ0KPiAtew0K PiAtCXN3aXRjaCAocmNvbCkgew0KPiAtCWNhc2UgUlRFX0NPTE9SX0dSRUVOOg0KPiAtCQlyZXR1 cm4gTUxYNV9GTE9XX0NPTE9SX0dSRUVOOw0KPiAtCWNhc2UgUlRFX0NPTE9SX1lFTExPVzoNCj4g LQkJcmV0dXJuIE1MWDVfRkxPV19DT0xPUl9ZRUxMT1c7DQo+IC0JY2FzZSBSVEVfQ09MT1JfUkVE Og0KPiAtCQlyZXR1cm4gTUxYNV9GTE9XX0NPTE9SX1JFRDsNCj4gLQlkZWZhdWx0Og0KPiAtCQli cmVhazsNCj4gLQl9DQo+IC0JcmV0dXJuIE1MWDVfRkxPV19DT0xPUl9VTkRFRklORUQ7DQo+IC19 DQo+IC0NCj4gIHN0cnVjdCBmaWVsZF9tb2RpZnlfaW5mbyB7DQo+ICAJdWludDMyX3Qgc2l6ZTsg LyogU2l6ZSBvZiBmaWVsZCBpbiBwcm90b2NvbCBoZWFkZXIsIGluIGJ5dGVzLiAqLw0KPiAgCXVp bnQzMl90IG9mZnNldDsgLyogT2Zmc2V0IG9mIGZpZWxkIGluIHByb3RvY29sIGhlYWRlciwgaW4g Ynl0ZXMuICovDQo+IEBAIC02MDI1LDEyICs2MDAwLDEwIEBAIGZsb3dfZHZfbXRyX3Bvb2xfY3Jl YXRlKHN0cnVjdCBydGVfZXRoX2Rldg0KPiAqZGV2LA0KPiAgCW10cm1uZy0+bl92YWxpZCsrOw0K PiAgCWZvciAoaSA9IDE7IGkgPCBNTFg1X0FTT19NVFJTX1BFUl9QT09MOyArK2kpIHsNCj4gIAkJ cG9vbC0+bXRyc1tpXS5vZmZzZXQgPSBpOw0KPiAtCQlwb29sLT5tdHJzW2ldLmZtLm1ldGVyX2lk ID0gVUlOVDMyX01BWDsNCj4gIAkJTElTVF9JTlNFUlRfSEVBRCgmbXRybW5nLT5tZXRlcnMsDQo+ ICAJCQkJCQkmcG9vbC0+bXRyc1tpXSwgbmV4dCk7DQo+ICAJfQ0KPiAgCXBvb2wtPm10cnNbMF0u b2Zmc2V0ID0gMDsNCj4gLQlwb29sLT5tdHJzWzBdLmZtLm1ldGVyX2lkID0gVUlOVDMyX01BWDsN Cj4gIAkqbXRyX2ZyZWUgPSAmcG9vbC0+bXRyc1swXTsNCj4gIAlyZXR1cm4gcG9vbDsNCj4gIH0N Cj4gQEAgLTYwNTQsNyArNjAyNyw2IEBAIGZsb3dfZHZfYXNvX210cl9yZWxlYXNlX3RvX3Bvb2wo c3RydWN0DQo+IHJ0ZV9ldGhfZGV2ICpkZXYsIHVpbnQzMl90IG10cl9pZHgpDQo+ICAJcnRlX3Nw aW5sb2NrX2xvY2soJm10cm1uZy0+bXRyc2wpOw0KPiAgCW1lbXNldCgmYXNvX210ci0+Zm0sIDAs IHNpemVvZihzdHJ1Y3QgbWx4NV9mbG93X21ldGVyX2luZm8pKTsNCj4gIAlhc29fbXRyLT5zdGF0 ZSA9IEFTT19NRVRFUl9GUkVFOw0KPiAtCWFzb19tdHItPmZtLm1ldGVyX2lkID0gVUlOVDMyX01B WDsNCj4gIAlMSVNUX0lOU0VSVF9IRUFEKCZtdHJtbmctPm1ldGVycywgYXNvX210ciwgbmV4dCk7 DQo+ICAJcnRlX3NwaW5sb2NrX3VubG9jaygmbXRybW5nLT5tdHJzbCk7DQo+ICB9DQo+IEBAIC02 MDk0LDggKzYwNjYsOCBAQCBmbG93X2R2X210cl9hbGxvYyhzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRl dikNCj4gIAltdHJfZnJlZS0+c3RhdGUgPSBBU09fTUVURVJfV0FJVDsNCj4gIAlydGVfc3Bpbmxv Y2tfdW5sb2NrKCZtdHJtbmctPm10cnNsKTsNCj4gIAlwb29sID0gY29udGFpbmVyX29mKG10cl9m cmVlLA0KPiAtCQkJCQlzdHJ1Y3QgbWx4NV9hc29fbXRyX3Bvb2wsDQo+IC0JCQkJCW10cnNbbXRy X2ZyZWUtPm9mZnNldF0pOw0KPiArCQkJc3RydWN0IG1seDVfYXNvX210cl9wb29sLA0KPiArCQkJ bXRyc1ttdHJfZnJlZS0+b2Zmc2V0XSk7DQo+ICAJbXRyX2lkeCA9IE1MWDVfTUFLRV9NVFJfSURY KHBvb2wtPmluZGV4LCBtdHJfZnJlZS0+b2Zmc2V0KTsNCj4gIAlpZiAoIW10cl9mcmVlLT5mbS5t ZXRlcl9hY3Rpb24pIHsNCj4gICNpZmRlZiBIQVZFX01MWDVfRFJfQ1JFQVRFX0FDVElPTl9BU08N Cj4gQEAgLTEzNzAyLDQzMyArMTM2NzQsNiBAQCBmbG93X2R2X2NyZWF0ZV9tdHJfdGJsKHN0cnVj dCBydGVfZXRoX2Rldg0KPiAqZGV2KQ0KPiAgCXJldHVybiBOVUxMOw0KPiAgfQ0KPiANCj4gLS8q Kg0KPiAtICogRGVzdHJveSB0aGUgbWV0ZXIgdGFibGUgbWF0Y2hlcnMuDQo+IC0gKiBMb2NrIGZy ZWUsIChtdXRleCBzaG91bGQgYmUgYWNxdWlyZWQgYnkgY2FsbGVyKS4NCj4gLSAqDQo+IC0gKiBA cGFyYW1baW5dIGRldg0KPiAtICogICBQb2ludGVyIHRvIEV0aGVybmV0IGRldmljZS4NCj4gLSAq IEBwYXJhbVtpbixvdXRdIGR0Yg0KPiAtICogICBQb2ludGVyIHRvIERWIG1ldGVyIHRhYmxlLg0K PiAtICoNCj4gLSAqIEByZXR1cm4NCj4gLSAqICAgQWx3YXlzIDAuDQo+IC0gKi8NCj4gLXN0YXRp YyBpbnQNCj4gLWZsb3dfZHZfZGVzdHJveV9tdHJfbWF0Y2hlcnMoc3RydWN0IHJ0ZV9ldGhfZGV2 ICpkZXYsDQo+IC0JCQkgICAgIHN0cnVjdCBtbHg1X21ldGVyX2RvbWFpbl9pbmZvICpkdGIpDQo+ IC17DQo+IC0Jc3RydWN0IG1seDVfcHJpdiAqcHJpdiA9IGRldi0+ZGF0YS0+ZGV2X3ByaXZhdGU7 DQo+IC0Jc3RydWN0IG1seDVfZmxvd190YmxfZGF0YV9lbnRyeSAqdGJsOw0KPiAtDQo+IC0JaWYg KCFwcml2LT5jb25maWcuZHZfZmxvd19lbikNCj4gLQkJcmV0dXJuIDA7DQo+IC0JaWYgKGR0Yi0+ ZHJvcF9tYXRjaGVyKSB7DQo+IC0JCXRibCA9IGNvbnRhaW5lcl9vZihkdGItPmRyb3BfbWF0Y2hl ci0+dGJsLCB0eXBlb2YoKnRibCksDQo+IHRibCk7DQo+IC0JCW1seDVfY2FjaGVfdW5yZWdpc3Rl cigmdGJsLT5tYXRjaGVycywNCj4gLQkJCQkgICAgICAmZHRiLT5kcm9wX21hdGNoZXItPmVudHJ5 KTsNCj4gLQkJZHRiLT5kcm9wX21hdGNoZXIgPSBOVUxMOw0KPiAtCX0NCj4gLQlpZiAoZHRiLT5j b2xvcl9tYXRjaGVyKSB7DQo+IC0JCXRibCA9IGNvbnRhaW5lcl9vZihkdGItPmNvbG9yX21hdGNo ZXItPnRibCwgdHlwZW9mKCp0YmwpLA0KPiB0YmwpOw0KPiAtCQltbHg1X2NhY2hlX3VucmVnaXN0 ZXIoJnRibC0+bWF0Y2hlcnMsDQo+IC0JCQkJICAgICAgJmR0Yi0+Y29sb3JfbWF0Y2hlci0+ZW50 cnkpOw0KPiAtCQlkdGItPmNvbG9yX21hdGNoZXIgPSBOVUxMOw0KPiAtCX0NCj4gLQlyZXR1cm4g MDsNCj4gLX0NCj4gLQ0KPiAtLyoqDQo+IC0gKiBDcmVhdGUgdGhlIG1hdGNoZXJzIGZvciBtZXRl ciB0YWJsZS4NCj4gLSAqDQo+IC0gKiBAcGFyYW1baW5dIGRldg0KPiAtICogICBQb2ludGVyIHRv IEV0aGVybmV0IGRldmljZS4NCj4gLSAqIEBwYXJhbVtpbl0gY29sb3JfcmVnX2NfaWR4DQo+IC0g KiAgIFJlZyBDIGluZGV4IGZvciBjb2xvciBtYXRjaC4NCj4gLSAqIEBwYXJhbVtpbl0gbXRyX2lk X3JlZ19jX2lkeA0KPiAtICogICBSZWcgQyBpbmRleCBmb3IgbWV0ZXJfaWQgbWF0Y2guDQo+IC0g KiBAcGFyYW1baW5dIG10cl9pZF9tYXNrDQo+IC0gKiAgIE1hc2sgZm9yIG1ldGVyX2lkIG1hdGNo IGNyaXRlcmlhLg0KPiAtICogQHBhcmFtW2luLG91dF0gZHRiDQo+IC0gKiAgIFBvaW50ZXIgdG8g RFYgbWV0ZXIgdGFibGUuDQo+IC0gKiBAcGFyYW1bb3V0XSBlcnJvcg0KPiAtICogICBQZXJmb3Jt IHZlcmJvc2UgZXJyb3IgcmVwb3J0aW5nIGlmIG5vdCBOVUxMLg0KPiAtICoNCj4gLSAqIEByZXR1 cm4NCj4gLSAqICAgMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlIG90aGVyd2lz ZSBhbmQgcnRlX2Vycm5vIGlzIHNldC4NCj4gLSAqLw0KPiAtc3RhdGljIGludA0KPiAtZmxvd19k dl9wcmVwYXJlX210cl9tYXRjaGVycyhzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldiwNCj4gLQkJCSAg ICAgdWludDMyX3QgY29sb3JfcmVnX2NfaWR4LA0KPiAtCQkJICAgICB1aW50MzJfdCBtdHJfaWRf cmVnX2NfaWR4LA0KPiAtCQkJICAgICB1aW50MzJfdCBtdHJfaWRfbWFzaywNCj4gLQkJCSAgICAg c3RydWN0IG1seDVfbWV0ZXJfZG9tYWluX2luZm8gKmR0YiwNCj4gLQkJCSAgICAgc3RydWN0IHJ0 ZV9mbG93X2Vycm9yICplcnJvcikNCj4gLXsNCj4gLQlzdHJ1Y3QgbWx4NV9wcml2ICpwcml2ID0g ZGV2LT5kYXRhLT5kZXZfcHJpdmF0ZTsNCj4gLQlzdHJ1Y3QgbWx4NV9mbG93X3RibF9kYXRhX2Vu dHJ5ICp0YmxfZGF0YTsNCj4gLQlzdHJ1Y3QgbWx4NV9jYWNoZV9lbnRyeSAqZW50cnk7DQo+IC0J c3RydWN0IG1seDVfZmxvd19kdl9tYXRjaGVyIG1hdGNoZXIgPSB7DQo+IC0JCS5tYXNrID0gew0K PiAtCQkJLnNpemUgPSBzaXplb2YobWF0Y2hlci5tYXNrLmJ1ZikgLQ0KPiAtCQkJCU1MWDVfU1Rf U1pfQllURVMoZnRlX21hdGNoX3NldF9taXNjNCksDQo+IC0JCX0sDQo+IC0JCS50YmwgPSBkdGIt PnRibCwNCj4gLQl9Ow0KPiAtCXN0cnVjdCBtbHg1X2Zsb3dfZHZfbWF0Y2hfcGFyYW1zIHZhbHVl ID0gew0KPiAtCQkuc2l6ZSA9IHNpemVvZih2YWx1ZS5idWYpIC0NCj4gLQkJCU1MWDVfU1RfU1pf QllURVMoZnRlX21hdGNoX3NldF9taXNjNCksDQo+IC0JfTsNCj4gLQlzdHJ1Y3QgbWx4NV9mbG93 X2NiX2N0eCBjdHggPSB7DQo+IC0JCS5lcnJvciA9IGVycm9yLA0KPiAtCQkuZGF0YSA9ICZtYXRj aGVyLA0KPiAtCX07DQo+IC0JdWludDMyX3QgY29sb3JfbWFzayA9IChVSU5UMzJfQygxKSA8PCBN TFg1X01UUl9DT0xPUl9CSVRTKSAtDQo+IDE7DQo+IC0NCj4gLQl0YmxfZGF0YSA9IGNvbnRhaW5l cl9vZihkdGItPnRibCwgc3RydWN0IG1seDVfZmxvd190YmxfZGF0YV9lbnRyeSwNCj4gdGJsKTsN Cj4gLQlpZiAoIWR0Yi0+ZHJvcF9tYXRjaGVyKSB7DQo+IC0JCS8qIENyZWF0ZSBtYXRjaGVycyBm b3IgRHJvcC4gKi8NCj4gLQkJZmxvd19kdl9tYXRjaF9tZXRhX3JlZyhtYXRjaGVyLm1hc2suYnVm LCB2YWx1ZS5idWYsDQo+IC0JCQkJICAgICAgIG10cl9pZF9yZWdfY19pZHgsIDAsIG10cl9pZF9t YXNrKTsNCj4gLQkJbWF0Y2hlci5wcmlvcml0eSA9IE1MWDVfUkVHX0JJVFMgKiAyIC0gcHJpdi0+ bWF4X210cl9iaXRzOw0KPiAtCQltYXRjaGVyLmNyYyA9IHJ0ZV9yYXdfY2tzdW0oKGNvbnN0IHZv aWQNCj4gKiltYXRjaGVyLm1hc2suYnVmLA0KPiAtCQkJCQltYXRjaGVyLm1hc2suc2l6ZSk7DQo+ IC0JCWVudHJ5ID0gbWx4NV9jYWNoZV9yZWdpc3RlcigmdGJsX2RhdGEtPm1hdGNoZXJzLCAmY3R4 KTsNCj4gLQkJaWYgKCFlbnRyeSkgew0KPiAtCQkJRFJWX0xPRyhFUlIsICJGYWlsZWQgdG8gcmVn aXN0ZXIgbWV0ZXIgZHJvcA0KPiBtYXRjaGVyLiIpOw0KPiAtCQkJcmV0dXJuIC0xOw0KPiAtCQl9 DQo+IC0JCWR0Yi0+ZHJvcF9tYXRjaGVyID0NCj4gLQkJCWNvbnRhaW5lcl9vZihlbnRyeSwgc3Ry dWN0IG1seDVfZmxvd19kdl9tYXRjaGVyLA0KPiBlbnRyeSk7DQo+IC0JfQ0KPiAtCWlmICghZHRi LT5jb2xvcl9tYXRjaGVyKSB7DQo+IC0JCS8qIENyZWF0ZSBtYXRjaGVycyBmb3IgQ29sb3IgKyBt ZXRlcl9pZC4gKi8NCj4gLQkJaWYgKHByaXYtPm10cl9yZWdfc2hhcmUpIHsNCj4gLQkJCWZsb3df ZHZfbWF0Y2hfbWV0YV9yZWcobWF0Y2hlci5tYXNrLmJ1ZiwNCj4gdmFsdWUuYnVmLA0KPiAtCQkJ CQljb2xvcl9yZWdfY19pZHgsIDAsDQo+IC0JCQkJCShtdHJfaWRfbWFzayB8IGNvbG9yX21hc2sp KTsNCj4gLQkJfSBlbHNlIHsNCj4gLQkJCWZsb3dfZHZfbWF0Y2hfbWV0YV9yZWcobWF0Y2hlci5t YXNrLmJ1ZiwNCj4gdmFsdWUuYnVmLA0KPiAtCQkJCQljb2xvcl9yZWdfY19pZHgsIDAsIGNvbG9y X21hc2spOw0KPiAtCQkJZmxvd19kdl9tYXRjaF9tZXRhX3JlZyhtYXRjaGVyLm1hc2suYnVmLA0K PiB2YWx1ZS5idWYsDQo+IC0JCQkJCW10cl9pZF9yZWdfY19pZHgsIDAsIG10cl9pZF9tYXNrKTsN Cj4gLQkJfQ0KPiAtCQltYXRjaGVyLnByaW9yaXR5ID0gTUxYNV9SRUdfQklUUyAtIHByaXYtPm1h eF9tdHJfYml0czsNCj4gLQkJbWF0Y2hlci5jcmMgPSBydGVfcmF3X2Nrc3VtKChjb25zdCB2b2lk DQo+ICopbWF0Y2hlci5tYXNrLmJ1ZiwNCj4gLQkJCQkJbWF0Y2hlci5tYXNrLnNpemUpOw0KPiAt CQllbnRyeSA9IG1seDVfY2FjaGVfcmVnaXN0ZXIoJnRibF9kYXRhLT5tYXRjaGVycywgJmN0eCk7 DQo+IC0JCWlmICghZW50cnkpIHsNCj4gLQkJCURSVl9MT0coRVJSLCAiRmFpbGVkIHRvIHJlZ2lz dGVyIG1ldGVyIGNvbG9yDQo+IG1hdGNoZXIuIik7DQo+IC0JCQlyZXR1cm4gLTE7DQo+IC0JCX0N Cj4gLQkJZHRiLT5jb2xvcl9tYXRjaGVyID0NCj4gLQkJCWNvbnRhaW5lcl9vZihlbnRyeSwgc3Ry dWN0IG1seDVfZmxvd19kdl9tYXRjaGVyLA0KPiBlbnRyeSk7DQo+IC0JfQ0KPiAtCXJldHVybiAw Ow0KPiAtfQ0KPiAtDQo+IC0vKioNCj4gLSAqIERlc3Ryb3kgZG9tYWluIHBvbGljZXIgcnVsZS4N Cj4gLSAqDQo+IC0gKiBAcGFyYW1baW5dIGRldg0KPiAtICogICBQb2ludGVyIHRvIEV0aGVybmV0 IGRldmljZS4NCj4gLSAqIEBwYXJhbVtpbl0gZHQNCj4gLSAqICAgUG9pbnRlciB0byBkb21haW4g dGFibGUuDQo+IC0gKi8NCj4gLXN0YXRpYyB2b2lkDQo+IC1mbG93X2R2X2Rlc3Ryb3lfZG9tYWlu X3BvbGljZXJfcnVsZShzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldiwNCj4gLQkJCQkgICAgc3RydWN0 IG1seDVfbWV0ZXJfZG9tYWluX2luZm8gKmR0KQ0KPiAtew0KPiAtCWlmIChkdC0+ZHJvcF9ydWxl KSB7DQo+IC0JCWNsYWltX3plcm8obWx4NV9mbG93X29zX2Rlc3Ryb3lfZmxvdyhkdC0+ZHJvcF9y dWxlKSk7DQo+IC0JCWR0LT5kcm9wX3J1bGUgPSBOVUxMOw0KPiAtCX0NCj4gLQlpZiAoZHQtPmdy ZWVuX3J1bGUpIHsNCj4gLQkJY2xhaW1femVybyhtbHg1X2Zsb3dfb3NfZGVzdHJveV9mbG93KGR0 LT5ncmVlbl9ydWxlKSk7DQo+IC0JCWR0LT5ncmVlbl9ydWxlID0gTlVMTDsNCj4gLQl9DQo+IC0J Zmxvd19kdl9kZXN0cm95X210cl9tYXRjaGVycyhkZXYsIGR0KTsNCj4gLQlpZiAoZHQtPmp1bXBf YWN0bikgew0KPiAtCQljbGFpbV96ZXJvKG1seDVfZmxvd19vc19kZXN0cm95X2Zsb3dfYWN0aW9u KGR0LQ0KPiA+anVtcF9hY3RuKSk7DQo+IC0JCWR0LT5qdW1wX2FjdG4gPSBOVUxMOw0KPiAtCX0N Cj4gLX0NCj4gLQ0KPiAtLyoqDQo+IC0gKiBEZXN0cm95IHBvbGljZXIgcnVsZXMuDQo+IC0gKg0K PiAtICogQHBhcmFtW2luXSBkZXYNCj4gLSAqICAgUG9pbnRlciB0byBFdGhlcm5ldCBkZXZpY2Uu DQo+IC0gKiBAcGFyYW1baW5dIGZtDQo+IC0gKiAgIFBvaW50ZXIgdG8gZmxvdyBtZXRlciBzdHJ1 Y3R1cmUuDQo+IC0gKiBAcGFyYW1baW5dIGF0dHINCj4gLSAqICAgUG9pbnRlciB0byBmbG93IGF0 dHJpYnV0ZXMuDQo+IC0gKg0KPiAtICogQHJldHVybg0KPiAtICogICBBbHdheXMgMC4NCj4gLSAq Lw0KPiAtc3RhdGljIGludA0KPiAtZmxvd19kdl9kZXN0cm95X3BvbGljZXJfcnVsZXMoc3RydWN0 IHJ0ZV9ldGhfZGV2ICpkZXYsDQo+IC0JCQkgICAgICBjb25zdCBzdHJ1Y3QgbWx4NV9mbG93X21l dGVyX2luZm8gKmZtLA0KPiAtCQkJICAgICAgY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2F0dHIgKmF0 dHIpDQo+IC17DQo+IC0Jc3RydWN0IG1seDVfbWV0ZXJfZG9tYWluc19pbmZvcyAqbXRiID0gZm0g PyBmbS0+bWZ0cyA6IE5VTEw7DQo+IC0NCj4gLQlpZiAoIW10YikNCj4gLQkJcmV0dXJuIDA7DQo+ IC0JaWYgKGF0dHItPmVncmVzcykNCj4gLQkJZmxvd19kdl9kZXN0cm95X2RvbWFpbl9wb2xpY2Vy X3J1bGUoZGV2LCAmbXRiLT5lZ3Jlc3MpOw0KPiAtCWlmIChhdHRyLT5pbmdyZXNzKQ0KPiAtCQlm bG93X2R2X2Rlc3Ryb3lfZG9tYWluX3BvbGljZXJfcnVsZShkZXYsICZtdGItDQo+ID5pbmdyZXNz KTsNCj4gLQlpZiAoYXR0ci0+dHJhbnNmZXIpDQo+IC0JCWZsb3dfZHZfZGVzdHJveV9kb21haW5f cG9saWNlcl9ydWxlKGRldiwgJm10Yi0NCj4gPnRyYW5zZmVyKTsNCj4gLQlyZXR1cm4gMDsNCj4g LX0NCj4gLQ0KPiAtLyoqDQo+IC0gKiBDcmVhdGUgc3BlY2lmeSBkb21haW4gbWV0ZXIgcG9saWNl ciBydWxlLg0KPiAtICoNCj4gLSAqIEBwYXJhbVtpbl0gZGV2DQo+IC0gKiAgIFBvaW50ZXIgdG8g RXRoZXJuZXQgZGV2aWNlLg0KPiAtICogQHBhcmFtW2luXSBmbQ0KPiAtICogICBQb2ludGVyIHRv IGZsb3cgbWV0ZXIgc3RydWN0dXJlLg0KPiAtICogQHBhcmFtW2luXSBtdHJfaWR4DQo+IC0gKiAg IG1ldGVyIGluZGV4Lg0KPiAtICogQHBhcmFtW2luXSBtdGINCj4gLSAqICAgUG9pbnRlciB0byBE ViBtZXRlciB0YWJsZSBzZXQuDQo+IC0gKiBAcGFyYW1bb3V0XSBkcm9wX3J1bGUNCj4gLSAqICAg VGhlIGFkZHJlc3Mgb2YgcG9pbnRlciBzYXZpbmcgZHJvcCBydWxlLg0KPiAtICogQHBhcmFtW291 dF0gY29sb3JfcnVsZQ0KPiAtICogICBUaGUgYWRkcmVzcyBvZiBwb2ludGVyIHNhdmluZyBncmVl biBydWxlLg0KPiAtICoNCj4gLSAqIEByZXR1cm4NCj4gLSAqICAgMCBvbiBzdWNjZXNzLCAtMSBv dGhlcndpc2UuDQo+IC0gKi8NCj4gLXN0YXRpYyBpbnQNCj4gLWZsb3dfZHZfY3JlYXRlX3BvbGlj ZXJfZm9yd2FyZF9ydWxlKHN0cnVjdCBydGVfZXRoX2RldiAqZGV2LA0KPiAtCQkJCSAgICBzdHJ1 Y3QgbWx4NV9mbG93X21ldGVyX2luZm8gKmZtLA0KPiAtCQkJCSAgICB1aW50MzJfdCBtdHJfaWR4 LA0KPiAtCQkJCSAgICBzdHJ1Y3QgbWx4NV9tZXRlcl9kb21haW5faW5mbyAqZHRiLA0KPiAtCQkJ CSAgICB2b2lkICoqZHJvcF9ydWxlLA0KPiAtCQkJCSAgICB2b2lkICoqZ3JlZW5fcnVsZSkNCj4g LXsNCj4gLQlzdHJ1Y3QgbWx4NV9wcml2ICpwcml2ID0gZGV2LT5kYXRhLT5kZXZfcHJpdmF0ZTsN Cj4gLQlzdHJ1Y3QgbWx4NV9mbG93X2R2X21hdGNoX3BhcmFtcyBtYXRjaGVyID0gew0KPiAtCQku c2l6ZSA9IHNpemVvZihtYXRjaGVyLmJ1ZikgLQ0KPiAtCQkJTUxYNV9TVF9TWl9CWVRFUyhmdGVf bWF0Y2hfc2V0X21pc2M0KSwNCj4gLQl9Ow0KPiAtCXN0cnVjdCBtbHg1X2Zsb3dfZHZfbWF0Y2hf cGFyYW1zIHZhbHVlID0gew0KPiAtCQkuc2l6ZSA9IHNpemVvZih2YWx1ZS5idWYpIC0NCj4gLQkJ CU1MWDVfU1RfU1pfQllURVMoZnRlX21hdGNoX3NldF9taXNjNCksDQo+IC0JfTsNCj4gLQlzdHJ1 Y3QgbWx4NV9tZXRlcl9kb21haW5zX2luZm9zICptdGIgPSBmbS0+bWZ0czsNCj4gLQlzdHJ1Y3Qg cnRlX2Zsb3dfZXJyb3IgZXJyb3I7DQo+IC0JdWludDMyX3QgY29sb3JfcmVnX2MgPSBtbHg1X2Zs b3dfZ2V0X3JlZ19pZChkZXYsDQo+IE1MWDVfTVRSX0NPTE9SLA0KPiAtCQkJCQkJICAgIDAsICZl cnJvcik7DQo+IC0JdWludDMyX3QgbXRyX2lkX3JlZ19jID0gbWx4NV9mbG93X2dldF9yZWdfaWQo ZGV2LCBNTFg1X01UUl9JRCwNCj4gLQkJCQkJCSAgICAgMCwgJmVycm9yKTsNCj4gLQl1aW50OF90 IG10cl9pZF9vZmZzZXQgPSBwcml2LT5tdHJfcmVnX3NoYXJlID8NCj4gTUxYNV9NVFJfQ09MT1Jf QklUUyA6IDA7DQo+IC0JdWludDMyX3QgbXRyX2lkX21hc2sgPQ0KPiAtCQkoKFVJTlQzMl9DKDEp IDw8IHByaXYtPm1heF9tdHJfYml0cykgLSAxKSA8PCBtdHJfaWRfb2Zmc2V0Ow0KPiAtCXZvaWQg KmFjdGlvbnNbTUVURVJfQUNUSU9OU107DQo+IC0JaW50IGk7DQo+IC0JaW50IHJldCA9IDA7DQo+ IC0NCj4gLQkvKiBDcmVhdGUganVtcCBhY3Rpb24uICovDQo+IC0JaWYgKCFkdGItPmp1bXBfYWN0 bikNCj4gLQkJcmV0ID0gbWx4NV9mbG93X29zX2NyZWF0ZV9mbG93X2FjdGlvbl9kZXN0X2Zsb3df dGJsDQo+IC0JCQkJKGR0Yi0+c2Z4X3RibC0+b2JqLCAmZHRiLT5qdW1wX2FjdG4pOw0KPiAtCWlm IChyZXQpIHsNCj4gLQkJRFJWX0xPRyhFUlIsICJGYWlsZWQgdG8gY3JlYXRlIHBvbGljZXIganVt cCBhY3Rpb24uIik7DQo+IC0JCWdvdG8gZXJyb3I7DQo+IC0JfQ0KPiAtCS8qIFByZXBhcmUgbWF0 Y2hlcnMuICovDQo+IC0JaWYgKCFkdGItPmRyb3BfbWF0Y2hlciB8fCAhZHRiLT5jb2xvcl9tYXRj aGVyKSB7DQo+IC0JCXJldCA9IGZsb3dfZHZfcHJlcGFyZV9tdHJfbWF0Y2hlcnMoZGV2LCBjb2xv cl9yZWdfYywNCj4gLQkJCQkJCSAgIG10cl9pZF9yZWdfYywNCj4gbXRyX2lkX21hc2ssDQo+IC0J CQkJCQkgICBkdGIsICZlcnJvcik7DQo+IC0JCWlmIChyZXQpIHsNCj4gLQkJCURSVl9MT0coRVJS LCAiRmFpbGVkIHRvIHNldHVwIG1hdGNoZXJzIGZvciBtdHINCj4gdGFibGUuIik7DQo+IC0JCQln b3RvIGVycm9yOw0KPiAtCQl9DQo+IC0JfQ0KPiAtCS8qIENyZWF0ZSBEcm9wIGZsb3csIG1hdGNo aW5nIG1ldGVyX2lkIG9ubHkuICovDQo+IC0JaSA9IDA7DQo+IC0JZmxvd19kdl9tYXRjaF9tZXRh X3JlZyhtYXRjaGVyLmJ1ZiwgdmFsdWUuYnVmLCBtdHJfaWRfcmVnX2MsDQo+IC0JCQkgICAgICAg KG10cl9pZHggPDwgbXRyX2lkX29mZnNldCksIFVJTlQzMl9NQVgpOw0KPiAtCWlmIChtdGItPmRy b3BfY291bnQpDQo+IC0JCWFjdGlvbnNbaSsrXSA9IG10Yi0+ZHJvcF9jb3VudDsNCj4gLQlhY3Rp b25zW2krK10gPSBwcml2LT5zaC0+ZHJfZHJvcF9hY3Rpb247DQo+IC0JcmV0ID0gbWx4NV9mbG93 X29zX2NyZWF0ZV9mbG93KGR0Yi0+ZHJvcF9tYXRjaGVyLQ0KPiA+bWF0Y2hlcl9vYmplY3QsDQo+ IC0JCQkJICAgICAgICh2b2lkICopJnZhbHVlLCBpLCBhY3Rpb25zLCBkcm9wX3J1bGUpOw0KPiAt CWlmIChyZXQpIHsNCj4gLQkJRFJWX0xPRyhFUlIsICJGYWlsZWQgdG8gY3JlYXRlIG1ldGVyIHBv bGljZXIgZHJvcCBydWxlLiIpOw0KPiAtCQlnb3RvIGVycm9yOw0KPiAtCX0NCj4gLQkvKiBDcmVh dGUgZmxvdyBtYXRjaGluZyBHcmVlbiBjb2xvciArIG1ldGVyX2lkLiAqLw0KPiAtCWkgPSAwOw0K PiAtCWlmIChwcml2LT5tdHJfcmVnX3NoYXJlKSB7DQo+IC0JCWZsb3dfZHZfbWF0Y2hfbWV0YV9y ZWcobWF0Y2hlci5idWYsIHZhbHVlLmJ1ZiwNCj4gY29sb3JfcmVnX2MsDQo+IC0JCQkJICAgICAg ICgobXRyX2lkeCA8PCBtdHJfaWRfb2Zmc2V0KSB8DQo+IC0NCj4gCXJ0ZV9jb2xfMl9tbHg1X2Nv bChSVEVfQ09MT1JfR1JFRU4pKSwNCj4gLQkJCQkgICAgICAgVUlOVDMyX01BWCk7DQo+IC0JfSBl bHNlIHsNCj4gLQkJZmxvd19kdl9tYXRjaF9tZXRhX3JlZyhtYXRjaGVyLmJ1ZiwgdmFsdWUuYnVm LA0KPiBjb2xvcl9yZWdfYywNCj4gLQkJCQkgICAgICAgcnRlX2NvbF8yX21seDVfY29sKFJURV9D T0xPUl9HUkVFTiksDQo+IC0JCQkJICAgICAgIFVJTlQzMl9NQVgpOw0KPiAtCQlmbG93X2R2X21h dGNoX21ldGFfcmVnKG1hdGNoZXIuYnVmLCB2YWx1ZS5idWYsDQo+IG10cl9pZF9yZWdfYywNCj4g LQkJCQkgICAgICAgbXRyX2lkeCwgVUlOVDMyX01BWCk7DQo+IC0JfQ0KPiAtCWlmIChtdGItPmdy ZWVuX2NvdW50KQ0KPiAtCQlhY3Rpb25zW2krK10gPSBtdGItPmdyZWVuX2NvdW50Ow0KPiAtCWFj dGlvbnNbaSsrXSA9IGR0Yi0+anVtcF9hY3RuOw0KPiAtCXJldCA9IG1seDVfZmxvd19vc19jcmVh dGVfZmxvdyhkdGItPmNvbG9yX21hdGNoZXItDQo+ID5tYXRjaGVyX29iamVjdCwNCj4gLQkJCQkg ICAgICAgKHZvaWQgKikmdmFsdWUsIGksIGFjdGlvbnMsIGdyZWVuX3J1bGUpOw0KPiAtCWlmIChy ZXQpIHsNCj4gLQkJRFJWX0xPRyhFUlIsICJGYWlsZWQgdG8gY3JlYXRlIG1ldGVyIHBvbGljZXIg Y29sb3IgcnVsZS4iKTsNCj4gLQkJZ290byBlcnJvcjsNCj4gLQl9DQo+IC0JcmV0dXJuIDA7DQo+ IC1lcnJvcjoNCj4gLQlydGVfZXJybm8gPSBlcnJubzsNCj4gLQlyZXR1cm4gLTE7DQo+IC19DQo+ IC0NCj4gLS8qKg0KPiAtICogUHJlcGFyZSBwb2xpY2VyIHJ1bGVzIGZvciBhbGwgZG9tYWlucy4N Cj4gLSAqIElmIG1ldGVyIGFscmVhZHkgaW5pdGlhbGl6ZWQsIHRoaXMgd2lsbCByZXBsYWNlIGFs bCBvbGQgcnVsZXMgd2l0aCBuZXcgb25lcy4NCj4gLSAqDQo+IC0gKiBAcGFyYW1baW5dIGRldg0K PiAtICogICBQb2ludGVyIHRvIEV0aGVybmV0IGRldmljZS4NCj4gLSAqIEBwYXJhbVtpbl0gZm0N Cj4gLSAqICAgUG9pbnRlciB0byBmbG93IG1ldGVyIHN0cnVjdHVyZS4NCj4gLSAqIEBwYXJhbVtp bl0gYXR0cg0KPiAtICogICBQb2ludGVyIHRvIGZsb3cgYXR0cmlidXRlcy4NCj4gLSAqDQo+IC0g KiBAcmV0dXJuDQo+IC0gKiAgIDAgb24gc3VjY2VzcywgLTEgb3RoZXJ3aXNlLg0KPiAtICovDQo+ IC1zdGF0aWMgaW50DQo+IC1mbG93X2R2X3ByZXBhcmVfcG9saWNlcl9ydWxlcyhzdHJ1Y3QgcnRl X2V0aF9kZXYgKmRldiwNCj4gLQkJCSAgICAgIHN0cnVjdCBtbHg1X2Zsb3dfbWV0ZXJfaW5mbyAq Zm0sDQo+IC0JCQkgICAgICBjb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfYXR0ciAqYXR0cikNCj4gLXsN Cj4gLQlzdHJ1Y3QgbWx4NV9wcml2ICpwcml2ID0gZGV2LT5kYXRhLT5kZXZfcHJpdmF0ZTsNCj4g LQlzdHJ1Y3QgbWx4NV9tZXRlcl9kb21haW5zX2luZm9zICptdGIgPSBmbS0+bWZ0czsNCj4gLQli b29sIGluaXRpYWxpemVkID0gZmFsc2U7DQo+IC0Jc3RydWN0IG1seDVfZmxvd19jb3VudGVyICpj bnQ7DQo+IC0Jdm9pZCAqZWdyZXNzX2Ryb3BfcnVsZSA9IE5VTEw7DQo+IC0Jdm9pZCAqZWdyZXNz X2dyZWVuX3J1bGUgPSBOVUxMOw0KPiAtCXZvaWQgKmluZ3Jlc3NfZHJvcF9ydWxlID0gTlVMTDsN Cj4gLQl2b2lkICppbmdyZXNzX2dyZWVuX3J1bGUgPSBOVUxMOw0KPiAtCXZvaWQgKnRyYW5zZmVy X2Ryb3BfcnVsZSA9IE5VTEw7DQo+IC0Jdm9pZCAqdHJhbnNmZXJfZ3JlZW5fcnVsZSA9IE5VTEw7 DQo+IC0JdWludDMyX3QgbXRyX2lkeDsNCj4gLQlpbnQgcmV0Ow0KPiAtDQo+IC0JLyogR2V0IHRo ZSBzdGF0aXN0aWNzIGNvdW50ZXJzIGZvciBncmVlbi9kcm9wLiAqLw0KPiAtCWlmIChmbS0+cG9s aWNlcl9zdGF0cy5wYXNzX2NudCkgew0KPiAtCQljbnQgPSBmbG93X2R2X2NvdW50ZXJfZ2V0X2J5 X2lkeChkZXYsDQo+IC0JCQkJCWZtLT5wb2xpY2VyX3N0YXRzLnBhc3NfY250LA0KPiAtCQkJCQlO VUxMKTsNCj4gLQkJbXRiLT5ncmVlbl9jb3VudCA9IGNudC0+YWN0aW9uOw0KPiAtCX0gZWxzZSB7 DQo+IC0JCW10Yi0+Z3JlZW5fY291bnQgPSBOVUxMOw0KPiAtCX0NCj4gLQlpZiAoZm0tPnBvbGlj ZXJfc3RhdHMuZHJvcF9jbnQpIHsNCj4gLQkJY250ID0gZmxvd19kdl9jb3VudGVyX2dldF9ieV9p ZHgoZGV2LA0KPiAtCQkJCQlmbS0+cG9saWNlcl9zdGF0cy5kcm9wX2NudCwNCj4gLQkJCQkJTlVM TCk7DQo+IC0JCW10Yi0+ZHJvcF9jb3VudCA9IGNudC0+YWN0aW9uOw0KPiAtCX0gZWxzZSB7DQo+ IC0JCW10Yi0+ZHJvcF9jb3VudCA9IE5VTEw7DQo+IC0JfQ0KPiAtCS8qKg0KPiAtCSAqIElmIGZs b3cgbWV0ZXIgaGFzIGJlZW4gaW5pdGlhbGl6ZWQsIGFsbCBwb2xpY2VyIHJ1bGVzDQo+IC0JICog YXJlIGNyZWF0ZWQuIFNvIGNhbiBnZXQgaWYgbWV0ZXIgaW5pdGlhbGl6ZWQgYnkgY2hlY2tpbmcN Cj4gLQkgKiBhbnkgcG9saWNlciBydWxlLg0KPiAtCSAqLw0KPiAtCWlmIChtdGItPmVncmVzcy5k cm9wX3J1bGUpDQo+IC0JCWluaXRpYWxpemVkID0gdHJ1ZTsNCj4gLQlpZiAocHJpdi0+c2gtPm1l dGVyX2Fzb19lbikgew0KPiAtCQlzdHJ1Y3QgbWx4NV9hc29fbXRyICphc29fbXRyID0gTlVMTDsN Cj4gLQkJc3RydWN0IG1seDVfYXNvX210cl9wb29sICpwb29sOw0KPiAtDQo+IC0JCWFzb19tdHIg PSBjb250YWluZXJfb2YoZm0sIHN0cnVjdCBtbHg1X2Fzb19tdHIsIGZtKTsNCj4gLQkJcG9vbCA9 IGNvbnRhaW5lcl9vZihhc29fbXRyLCBzdHJ1Y3QgbWx4NV9hc29fbXRyX3Bvb2wsDQo+IC0JCQkJ ICAgIG10cnNbYXNvX210ci0+b2Zmc2V0XSk7DQo+IC0JCW10cl9pZHggPSBNTFg1X01BS0VfTVRS X0lEWChwb29sLT5pbmRleCwgYXNvX210ci0NCj4gPm9mZnNldCk7DQo+IC0JfSBlbHNlIHsNCj4g LQkJc3RydWN0IG1seDVfbGVnYWN5X2Zsb3dfbWV0ZXIgKmxlZ2FjeV9mbTsNCj4gLQ0KPiAtCQls ZWdhY3lfZm0gPSBjb250YWluZXJfb2YoZm0sIHN0cnVjdA0KPiBtbHg1X2xlZ2FjeV9mbG93X21l dGVyLCBmbSk7DQo+IC0JCW10cl9pZHggPSBsZWdhY3lfZm0tPmlkeDsNCj4gLQl9DQo+IC0JaWYg KGF0dHItPmVncmVzcykgew0KPiAtCQlyZXQgPSBmbG93X2R2X2NyZWF0ZV9wb2xpY2VyX2Zvcndh cmRfcnVsZShkZXYsDQo+IC0JCQkJZm0sIG10cl9pZHgsICZtdGItPmVncmVzcywNCj4gLQkJCQkm ZWdyZXNzX2Ryb3BfcnVsZSwgJmVncmVzc19ncmVlbl9ydWxlKTsNCj4gLQkJaWYgKHJldCkgew0K PiAtCQkJRFJWX0xPRyhFUlIsICJGYWlsZWQgdG8gY3JlYXRlIGVncmVzcyBwb2xpY2VyLiIpOw0K PiAtCQkJZ290byBlcnJvcjsNCj4gLQkJfQ0KPiAtCX0NCj4gLQlpZiAoYXR0ci0+aW5ncmVzcykg ew0KPiAtCQlyZXQgPSBmbG93X2R2X2NyZWF0ZV9wb2xpY2VyX2ZvcndhcmRfcnVsZShkZXYsDQo+ IC0JCQkJZm0sIG10cl9pZHgsICZtdGItPmluZ3Jlc3MsDQo+IC0JCQkJJmluZ3Jlc3NfZHJvcF9y dWxlLCAmaW5ncmVzc19ncmVlbl9ydWxlKTsNCj4gLQkJaWYgKHJldCkgew0KPiAtCQkJRFJWX0xP RyhFUlIsICJGYWlsZWQgdG8gY3JlYXRlIGluZ3Jlc3MgcG9saWNlci4iKTsNCj4gLQkJCWdvdG8g ZXJyb3I7DQo+IC0JCX0NCj4gLQl9DQo+IC0JaWYgKGF0dHItPnRyYW5zZmVyKSB7DQo+IC0JCXJl dCA9IGZsb3dfZHZfY3JlYXRlX3BvbGljZXJfZm9yd2FyZF9ydWxlKGRldiwNCj4gLQkJCQlmbSwg bXRyX2lkeCwgJm10Yi0+dHJhbnNmZXIsDQo+IC0JCQkJJnRyYW5zZmVyX2Ryb3BfcnVsZSwNCj4g JnRyYW5zZmVyX2dyZWVuX3J1bGUpOw0KPiAtCQlpZiAocmV0KSB7DQo+IC0JCQlEUlZfTE9HKEVS UiwgIkZhaWxlZCB0byBjcmVhdGUgdHJhbnNmZXIgcG9saWNlci4iKTsNCj4gLQkJCWdvdG8gZXJy b3I7DQo+IC0JCX0NCj4gLQl9DQo+IC0JLyogUmVwbGFjZSBvbGQgZmxvd3MgaWYgZXhpc3Rpbmcu ICovDQo+IC0JaWYgKG10Yi0+ZWdyZXNzLmRyb3BfcnVsZSkNCj4gLQkJY2xhaW1femVybyhtbHg1 X2Zsb3dfb3NfZGVzdHJveV9mbG93KG10Yi0NCj4gPmVncmVzcy5kcm9wX3J1bGUpKTsNCj4gLQlp ZiAobXRiLT5lZ3Jlc3MuZ3JlZW5fcnVsZSkNCj4gLQkJY2xhaW1femVybyhtbHg1X2Zsb3dfb3Nf ZGVzdHJveV9mbG93KG10Yi0NCj4gPmVncmVzcy5ncmVlbl9ydWxlKSk7DQo+IC0JaWYgKG10Yi0+ aW5ncmVzcy5kcm9wX3J1bGUpDQo+IC0JCWNsYWltX3plcm8obWx4NV9mbG93X29zX2Rlc3Ryb3lf ZmxvdyhtdGItDQo+ID5pbmdyZXNzLmRyb3BfcnVsZSkpOw0KPiAtCWlmIChtdGItPmluZ3Jlc3Mu Z3JlZW5fcnVsZSkNCj4gLQkJY2xhaW1femVybyhtbHg1X2Zsb3dfb3NfZGVzdHJveV9mbG93KG10 Yi0NCj4gPmluZ3Jlc3MuZ3JlZW5fcnVsZSkpOw0KPiAtCWlmIChtdGItPnRyYW5zZmVyLmRyb3Bf cnVsZSkNCj4gLQkJY2xhaW1femVybyhtbHg1X2Zsb3dfb3NfZGVzdHJveV9mbG93KG10Yi0NCj4g PnRyYW5zZmVyLmRyb3BfcnVsZSkpOw0KPiAtCWlmIChtdGItPnRyYW5zZmVyLmdyZWVuX3J1bGUp DQo+IC0JCWNsYWltX3plcm8obWx4NV9mbG93X29zX2Rlc3Ryb3lfZmxvdyhtdGItDQo+ID50cmFu c2Zlci5ncmVlbl9ydWxlKSk7DQo+IC0JbXRiLT5lZ3Jlc3MuZHJvcF9ydWxlID0gZWdyZXNzX2Ry b3BfcnVsZTsNCj4gLQltdGItPmVncmVzcy5ncmVlbl9ydWxlID0gZWdyZXNzX2dyZWVuX3J1bGU7 DQo+IC0JbXRiLT5pbmdyZXNzLmRyb3BfcnVsZSA9IGluZ3Jlc3NfZHJvcF9ydWxlOw0KPiAtCW10 Yi0+aW5ncmVzcy5ncmVlbl9ydWxlID0gaW5ncmVzc19ncmVlbl9ydWxlOw0KPiAtCW10Yi0+dHJh bnNmZXIuZHJvcF9ydWxlID0gdHJhbnNmZXJfZHJvcF9ydWxlOw0KPiAtCW10Yi0+dHJhbnNmZXIu Z3JlZW5fcnVsZSA9IHRyYW5zZmVyX2dyZWVuX3J1bGU7DQo+IC0JcmV0dXJuIDA7DQo+IC1lcnJv cjoNCj4gLQlpZiAoZWdyZXNzX2Ryb3BfcnVsZSkNCj4gLQ0KPiAJY2xhaW1femVybyhtbHg1X2Zs b3dfb3NfZGVzdHJveV9mbG93KGVncmVzc19kcm9wX3J1bGUpKTsNCj4gLQlpZiAoZWdyZXNzX2dy ZWVuX3J1bGUpDQo+IC0NCj4gCWNsYWltX3plcm8obWx4NV9mbG93X29zX2Rlc3Ryb3lfZmxvdyhl Z3Jlc3NfZ3JlZW5fcnVsZSkpOw0KPiAtCWlmIChpbmdyZXNzX2Ryb3BfcnVsZSkNCj4gLQ0KPiAJ Y2xhaW1femVybyhtbHg1X2Zsb3dfb3NfZGVzdHJveV9mbG93KGluZ3Jlc3NfZHJvcF9ydWxlKSk7 DQo+IC0JaWYgKGluZ3Jlc3NfZ3JlZW5fcnVsZSkNCj4gLQ0KPiAJY2xhaW1femVybyhtbHg1X2Zs b3dfb3NfZGVzdHJveV9mbG93KGluZ3Jlc3NfZ3JlZW5fcnVsZSkpOw0KPiAtCWlmICh0cmFuc2Zl cl9kcm9wX3J1bGUpDQo+IC0NCj4gCWNsYWltX3plcm8obWx4NV9mbG93X29zX2Rlc3Ryb3lfZmxv dyh0cmFuc2Zlcl9kcm9wX3J1bGUpKTsNCj4gLQlpZiAodHJhbnNmZXJfZ3JlZW5fcnVsZSkNCj4g LQ0KPiAJY2xhaW1femVybyhtbHg1X2Zsb3dfb3NfZGVzdHJveV9mbG93KHRyYW5zZmVyX2dyZWVu X3J1bGUpKTsNCj4gLQlpZiAoIWluaXRpYWxpemVkKQ0KPiAtCQlmbG93X2R2X2Rlc3Ryb3lfcG9s aWNlcl9ydWxlcyhkZXYsIGZtLCBhdHRyKTsNCj4gLQlyZXR1cm4gLTE7DQo+IC19DQo+IC0NCj4g IC8qKg0KPiAgICogVmFsaWRhdGUgdGhlIGJhdGNoIGNvdW50ZXIgc3VwcG9ydCBpbiByb290IHRh YmxlLg0KPiAgICoNCj4gQEAgLTE0NDIzLDggKzEzOTY4LDYgQEAgY29uc3Qgc3RydWN0IG1seDVf Zmxvd19kcml2ZXJfb3BzDQo+IG1seDVfZmxvd19kdl9kcnZfb3BzID0gew0KPiAgCS5xdWVyeSA9 IGZsb3dfZHZfcXVlcnksDQo+ICAJLmNyZWF0ZV9tdHJfdGJscyA9IGZsb3dfZHZfY3JlYXRlX210 cl90YmwsDQo+ICAJLmRlc3Ryb3lfbXRyX3RibHMgPSBmbG93X2R2X2Rlc3Ryb3lfbXRyX3RibCwN Cj4gLQkucHJlcGFyZV9wb2xpY2VyX3J1bGVzID0gZmxvd19kdl9wcmVwYXJlX3BvbGljZXJfcnVs ZXMsDQo+IC0JLmRlc3Ryb3lfcG9saWNlcl9ydWxlcyA9IGZsb3dfZHZfZGVzdHJveV9wb2xpY2Vy X3J1bGVzLA0KPiAgCS5jcmVhdGVfbWV0ZXIgPSBmbG93X2R2X210cl9hbGxvYywNCj4gIAkuZnJl ZV9tZXRlciA9IGZsb3dfZHZfYXNvX210cl9yZWxlYXNlX3RvX3Bvb2wsDQo+ICAJLmNvdW50ZXJf YWxsb2MgPSBmbG93X2R2X2NvdW50ZXJfYWxsb2NhdGUsDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L25ldC9tbHg1L21seDVfZmxvd19tZXRlci5jDQo+IGIvZHJpdmVycy9uZXQvbWx4NS9tbHg1X2Zs b3dfbWV0ZXIuYw0KPiBpbmRleCA3MTRiMzgyZDU1Li5hZjBhMWMxOGNiIDEwMDY0NA0KPiAtLS0g YS9kcml2ZXJzL25ldC9tbHg1L21seDVfZmxvd19tZXRlci5jDQo+ICsrKyBiL2RyaXZlcnMvbmV0 L21seDUvbWx4NV9mbG93X21ldGVyLmMNCj4gQEAgLTMyOSw3ICszMjksNiBAQCBtbHg1X2Zsb3df bXRyX2NhcF9nZXQoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYsDQo+ICAJY2FwLT5jaGFpbmluZ19u X210cnNfcGVyX2Zsb3dfbWF4ID0gMTsgLyogQ2hhaW5pbmcgaXMgbm90DQo+IHN1cHBvcnRlZC4g Ki8NCj4gIAljYXAtPm1ldGVyX3NydGNtX3JmYzI2OTdfbl9tYXggPSBxYXR0ci0+Zmxvd19tZXRl cl9vbGQgPyBjYXAtDQo+ID5uX21heCA6IDA7DQo+ICAJY2FwLT5tZXRlcl9yYXRlX21heCA9IDFV TEwgPDwgNDA7IC8qIDEgVGVyYSB0b2tlbnMgcGVyIHNlYy4gKi8NCj4gLQljYXAtPnBvbGljZXJf YWN0aW9uX2Ryb3Bfc3VwcG9ydGVkID0gMTsNCj4gIAljYXAtPnN0YXRzX21hc2sgPSBSVEVfTVRS X1NUQVRTX05fQllURVNfRFJPUFBFRCB8DQo+ICAJCQkgIFJURV9NVFJfU1RBVFNfTl9QS1RTX0RS T1BQRUQ7DQo+ICAJcmV0dXJuIDA7DQo+IEBAIC00MzYsOTAgKzQzNSw2IEBAIG1seDVfZmxvd19t ZXRlcl9wcm9maWxlX2RlbGV0ZShzdHJ1Y3QNCj4gcnRlX2V0aF9kZXYgKmRldiwNCj4gIAlyZXR1 cm4gMDsNCj4gIH0NCj4gDQo+IC0vKioNCj4gLSAqIENvbnZlcnQgd3JvbmcgY29sb3Igc2V0dGlu ZyBhY3Rpb24gdG8gdmVyYm9zZSBlcnJvci4NCj4gLSAqDQo+IC0gKiBAcGFyYW1baW5dIGFjdGlv bg0KPiAtICogICBQb2xpY3kgY29sb3IgYWN0aW9uLg0KPiAtICoNCj4gLSAqIEByZXR1cm4NCj4g LSAqICAgVmVyYm9zZSBtZXRlciBjb2xvciBlcnJvciB0eXBlLg0KPiAtICovDQo+IC1zdGF0aWMg aW5saW5lIGVudW0gcnRlX210cl9lcnJvcl90eXBlDQo+IC1hY3Rpb24yZXJyb3IoZW51bSBydGVf bXRyX3BvbGljZXJfYWN0aW9uIGFjdGlvbikNCj4gLXsNCj4gLQlzd2l0Y2ggKGFjdGlvbikgew0K PiAtCWNhc2UgTVRSX1BPTElDRVJfQUNUSU9OX0NPTE9SX0dSRUVOOg0KPiAtCQlyZXR1cm4gUlRF X01UUl9FUlJPUl9UWVBFX1BPTElDRVJfQUNUSU9OX0dSRUVOOw0KPiAtCWNhc2UgTVRSX1BPTElD RVJfQUNUSU9OX0NPTE9SX1lFTExPVzoNCj4gLQkJcmV0dXJuIFJURV9NVFJfRVJST1JfVFlQRV9Q T0xJQ0VSX0FDVElPTl9ZRUxMT1c7DQo+IC0JY2FzZSBNVFJfUE9MSUNFUl9BQ1RJT05fQ09MT1Jf UkVEOg0KPiAtCQlyZXR1cm4gUlRFX01UUl9FUlJPUl9UWVBFX1BPTElDRVJfQUNUSU9OX1JFRDsN Cj4gLQlkZWZhdWx0Og0KPiAtCQlicmVhazsNCj4gLQl9DQo+IC0JcmV0dXJuIFJURV9NVFJfRVJS T1JfVFlQRV9VTlNQRUNJRklFRDsNCj4gLX0NCj4gLQ0KPiAtLyoqDQo+IC0gKiBDaGVjayBtZXRl ciB2YWxpZGF0aW9uLg0KPiAtICoNCj4gLSAqIEBwYXJhbVtpbl0gcHJpdg0KPiAtICogICBQb2lu dGVyIHRvIG1seDUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZS4NCj4gLSAqIEBwYXJhbVtpbl0gbWV0 ZXJfaWQNCj4gLSAqICAgTWV0ZXIgaWQuDQo+IC0gKiBAcGFyYW1baW5dIHBhcmFtcw0KPiAtICog ICBQb2ludGVyIHRvIHJ0ZSBtZXRlciBwYXJhbWV0ZXJzLg0KPiAtICogQHBhcmFtW291dF0gZXJy b3INCj4gLSAqICAgUG9pbnRlciB0byBydGUgbWV0ZXIgZXJyb3Igc3RydWN0dXJlLg0KPiAtICoN Cj4gLSAqIEByZXR1cm4NCj4gLSAqICAgMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIHZh bHVlIG90aGVyd2lzZSBhbmQgcnRlX2Vycm5vIGlzIHNldC4NCj4gLSAqLw0KPiAtc3RhdGljIGlu dA0KPiAtbWx4NV9mbG93X21ldGVyX3ZhbGlkYXRlKHN0cnVjdCBtbHg1X3ByaXYgKnByaXYsIHVp bnQzMl90IG1ldGVyX2lkLA0KPiAtCQkJIHN0cnVjdCBydGVfbXRyX3BhcmFtcyAqcGFyYW1zLA0K PiAtCQkJIHN0cnVjdCBydGVfbXRyX2Vycm9yICplcnJvcikNCj4gLXsNCj4gLQkvKiBNZXRlciBt dXN0IHVzZSBnbG9iYWwgZHJvcCBhY3Rpb24uICovDQo+IC0JaWYgKCFwcml2LT5zaC0+ZHJfZHJv cF9hY3Rpb24pDQo+IC0JCXJldHVybiAtcnRlX210cl9lcnJvcl9zZXQoZXJyb3IsIEVOT1RTVVAs DQo+IC0NCj4gUlRFX01UUl9FUlJPUl9UWVBFX01UUl9QQVJBTVMsDQo+IC0JCQkJCSAgTlVMTCwN Cj4gLQkJCQkJICAiTm8gZHJvcCBhY3Rpb24gcmVhZHkgZm9yIG1ldGVyLiIpOw0KPiAtCS8qIE1l dGVyIHBhcmFtcyBtdXN0IG5vdCBiZSBOVUxMLiAqLw0KPiAtCWlmIChwYXJhbXMgPT0gTlVMTCkN Cj4gLQkJcmV0dXJuIC1ydGVfbXRyX2Vycm9yX3NldChlcnJvciwgRUlOVkFMLA0KPiAtDQo+IFJU RV9NVFJfRVJST1JfVFlQRV9NVFJfUEFSQU1TLA0KPiAtCQkJCQkgIE5VTEwsICJNZXRlciBvYmpl Y3QgcGFyYW1zIG51bGwuIik7DQo+IC0JLyogUHJldmlvdXMgbWV0ZXIgY29sb3IgaXMgbm90IHN1 cHBvcnRlZC4gKi8NCj4gLQlpZiAocGFyYW1zLT51c2VfcHJldl9tdHJfY29sb3IpDQo+IC0JCXJl dHVybiAtcnRlX210cl9lcnJvcl9zZXQoZXJyb3IsIEVOT1RTVVAsDQo+IC0NCj4gUlRFX01UUl9F UlJPUl9UWVBFX01UUl9QQVJBTVMsDQo+IC0JCQkJCSAgTlVMTCwNCj4gLQkJCQkJICAiUHJldmlv dXMgbWV0ZXIgY29sb3IgIg0KPiAtCQkJCQkgICJub3Qgc3VwcG9ydGVkLiIpOw0KPiAtCS8qIFZh bGlkYXRlIHBvbGljZXIgc2V0dGluZ3MuICovDQo+IC0JaWYgKHBhcmFtcy0+YWN0aW9uW1JURV9D T0xPUl9SRURdICE9DQo+IE1UUl9QT0xJQ0VSX0FDVElPTl9EUk9QKQ0KPiAtCQlyZXR1cm4gLXJ0 ZV9tdHJfZXJyb3Jfc2V0DQo+IC0JCQkJKGVycm9yLCBFTk9UU1VQLA0KPiAtCQkJCSBhY3Rpb24y ZXJyb3IocGFyYW1zLQ0KPiA+YWN0aW9uW1JURV9DT0xPUl9SRURdKSwNCj4gLQkJCQkgTlVMTCwN Cj4gLQkJCQkgIlJlZCBjb2xvciBvbmx5IHN1cHBvcnRzIGRyb3AgYWN0aW9uLiIpOw0KPiAtCWlm IChwYXJhbXMtPmFjdGlvbltSVEVfQ09MT1JfR1JFRU5dICE9DQo+IE1UUl9QT0xJQ0VSX0FDVElP Tl9DT0xPUl9HUkVFTikNCj4gLQkJcmV0dXJuIC1ydGVfbXRyX2Vycm9yX3NldA0KPiAtCQkJCShl cnJvciwgRU5PVFNVUCwNCj4gLQkJCQkgYWN0aW9uMmVycm9yKHBhcmFtcy0NCj4gPmFjdGlvbltS VEVfQ09MT1JfR1JFRU5dKSwNCj4gLQkJCQkgTlVMTCwNCj4gLQkJCQkgIkdyZWVuIGNvbG9yIG9u bHkgc3VwcG9ydHMgcmVjb2xvciBncmVlbg0KPiBhY3Rpb24uIik7DQo+IC0JLyogVmFsaWRhdGUg bWV0ZXIgaWQuICovDQo+IC0JaWYgKG1seDVfZmxvd19tZXRlcl9maW5kKHByaXYsIG1ldGVyX2lk LCBOVUxMKSkNCj4gLQkJcmV0dXJuIC1ydGVfbXRyX2Vycm9yX3NldChlcnJvciwgRUVYSVNULA0K PiAtCQkJCQkgIFJURV9NVFJfRVJST1JfVFlQRV9NVFJfSUQsDQo+IE5VTEwsDQo+IC0JCQkJCSAg Ik1ldGVyIG9iamVjdCBhbHJlYWR5IGV4aXN0cy4iKTsNCj4gLQlyZXR1cm4gMDsNCj4gLX0NCj4g LQ0KPiAgLyoqDQo+ICAgKiBNb2RpZnkgdGhlIGZsb3cgbWV0ZXIgYWN0aW9uLg0KPiAgICoNCj4g QEAgLTYyOSwxNjcgKzU0NCwxNCBAQCBzdGF0aWMgdm9pZA0KPiAgbWx4NV9mbG93X21ldGVyX3N0 YXRzX2VuYWJsZV91cGRhdGUoc3RydWN0IG1seDVfZmxvd19tZXRlcl9pbmZvICpmbSwNCj4gIAkJ CQl1aW50NjRfdCBzdGF0c19tYXNrKQ0KPiAgew0KPiAtCWZtLT5ncmVlbl9ieXRlcyA9IChzdGF0 c19tYXNrICYNCj4gUlRFX01UUl9TVEFUU19OX0JZVEVTX0dSRUVOKSA/IDEgOiAwOw0KPiAtCWZt LT5ncmVlbl9wa3RzID0gKHN0YXRzX21hc2sgJiBSVEVfTVRSX1NUQVRTX05fUEtUU19HUkVFTikN Cj4gPyAxIDogMDsNCj4gLQlmbS0+cmVkX2J5dGVzID0gKHN0YXRzX21hc2sgJiBSVEVfTVRSX1NU QVRTX05fQllURVNfUkVEKSA/IDENCj4gOiAwOw0KPiAtCWZtLT5yZWRfcGt0cyA9IChzdGF0c19t YXNrICYgUlRFX01UUl9TVEFUU19OX1BLVFNfUkVEKSA/IDEgOg0KPiAwOw0KPiAgCWZtLT5ieXRl c19kcm9wcGVkID0NCj4gIAkJKHN0YXRzX21hc2sgJiBSVEVfTVRSX1NUQVRTX05fQllURVNfRFJP UFBFRCkgPyAxIDogMDsNCj4gIAlmbS0+cGt0c19kcm9wcGVkID0gKHN0YXRzX21hc2sgJg0KPiBS VEVfTVRSX1NUQVRTX05fUEtUU19EUk9QUEVEKSA/IDEgOiAwOw0KPiAgfQ0KPiANCj4gLS8qKg0K PiAtICogQ3JlYXRlIG1ldGVyIHJ1bGVzLg0KPiAtICoNCj4gLSAqIEBwYXJhbVtpbl0gZGV2DQo+ IC0gKiAgIFBvaW50ZXIgdG8gRXRoZXJuZXQgZGV2aWNlLg0KPiAtICogQHBhcmFtW2luXSBtZXRl cl9pZA0KPiAtICogICBNZXRlciBpZC4NCj4gLSAqIEBwYXJhbVtpbl0gcGFyYW1zDQo+IC0gKiAg IFBvaW50ZXIgdG8gcnRlIG1ldGVyIHBhcmFtZXRlcnMuDQo+IC0gKiBAcGFyYW1baW5dIHNoYXJl ZA0KPiAtICogICBNZXRlciBzaGFyZWQgd2l0aCBvdGhlciBmbG93IG9yIG5vdC4NCj4gLSAqIEBw YXJhbVtvdXRdIGVycm9yDQo+IC0gKiAgIFBvaW50ZXIgdG8gcnRlIG1ldGVyIGVycm9yIHN0cnVj dHVyZS4NCj4gLSAqDQo+IC0gKiBAcmV0dXJuDQo+IC0gKiAgIDAgb24gc3VjY2VzcywgYSBuZWdh dGl2ZSBlcnJubyB2YWx1ZSBvdGhlcndpc2UgYW5kIHJ0ZV9lcnJubyBpcyBzZXQuDQo+IC0gKi8N Cj4gLXN0YXRpYyBpbnQNCj4gLW1seDVfZmxvd19tZXRlcl9jcmVhdGUoc3RydWN0IHJ0ZV9ldGhf ZGV2ICpkZXYsIHVpbnQzMl90IG1ldGVyX2lkLA0KPiAtCQkgICAgICAgc3RydWN0IHJ0ZV9tdHJf cGFyYW1zICpwYXJhbXMsIGludCBzaGFyZWQsDQo+IC0JCSAgICAgICBzdHJ1Y3QgcnRlX210cl9l cnJvciAqZXJyb3IpDQo+IC17DQo+IC0Jc3RydWN0IG1seDVfcHJpdiAqcHJpdiA9IGRldi0+ZGF0 YS0+ZGV2X3ByaXZhdGU7DQo+IC0Jc3RydWN0IG1seDVfbGVnYWN5X2Zsb3dfbWV0ZXJzICpmbXMg PSAmcHJpdi0+Zmxvd19tZXRlcnM7DQo+IC0Jc3RydWN0IG1seDVfZmxvd19tZXRlcl9wcm9maWxl ICpmbXA7DQo+IC0Jc3RydWN0IG1seDVfbGVnYWN5X2Zsb3dfbWV0ZXIgKmxlZ2FjeV9mbTsNCj4g LQlzdHJ1Y3QgbWx4NV9mbG93X21ldGVyX2luZm8gKmZtOw0KPiAtCWNvbnN0IHN0cnVjdCBydGVf Zmxvd19hdHRyIGF0dHIgPSB7DQo+IC0JCQkJLmluZ3Jlc3MgPSAxLA0KPiAtCQkJCS5lZ3Jlc3Mg PSAxLA0KPiAtCQkJCS50cmFuc2ZlciA9IHByaXYtPmNvbmZpZy5kdl9lc3dfZW4gPyAxIDogMCwN Cj4gLQkJCX07DQo+IC0Jc3RydWN0IG1seDVfaW5kZXhlZF9wb29sX2NvbmZpZyBmbG93X2lwb29s X2NmZyA9IHsNCj4gLQkJLnNpemUgPSAwLA0KPiAtCQkudHJ1bmtfc2l6ZSA9IDY0LA0KPiAtCQku bmVlZF9sb2NrID0gMSwNCj4gLQkJLnR5cGUgPSAibWx4NV9mbG93X210cl9mbG93X2lkX3Bvb2wi LA0KPiAtCX07DQo+IC0Jc3RydWN0IG1seDVfYXNvX210ciAqYXNvX210cjsNCj4gLQl1bmlvbiBt bHg1X2wzdF9kYXRhIGRhdGE7DQo+IC0JdWludDMyX3QgbXRyX2lkeDsNCj4gLQlpbnQgcmV0Ow0K PiAtCXVpbnQ4X3QgbXRyX2lkX2JpdHM7DQo+IC0JdWludDhfdCBtdHJfcmVnX2JpdHMgPSBwcml2 LT5tdHJfcmVnX3NoYXJlID8NCj4gLQkJCQlNTFg1X01UUl9JRExFX0JJVFNfSU5fQ09MT1JfUkVH IDoNCj4gTUxYNV9SRUdfQklUUzsNCj4gLQ0KPiAtCWlmICghcHJpdi0+bXRyX2VuKQ0KPiAtCQly ZXR1cm4gLXJ0ZV9tdHJfZXJyb3Jfc2V0KGVycm9yLCBFTk9UU1VQLA0KPiAtDQo+IFJURV9NVFJf RVJST1JfVFlQRV9VTlNQRUNJRklFRCwgTlVMTCwNCj4gLQkJCQkJICAiTWV0ZXIgaXMgbm90IHN1 cHBvcnRlZCIpOw0KPiAtCS8qIFZhbGlkYXRlIHRoZSBwYXJhbWV0ZXJzLiAqLw0KPiAtCXJldCA9 IG1seDVfZmxvd19tZXRlcl92YWxpZGF0ZShwcml2LCBtZXRlcl9pZCwgcGFyYW1zLCBlcnJvcik7 DQo+IC0JaWYgKHJldCkNCj4gLQkJcmV0dXJuIHJldDsNCj4gLQkvKiBNZXRlciBwcm9maWxlIG11 c3QgZXhpc3QuICovDQo+IC0JZm1wID0gbWx4NV9mbG93X21ldGVyX3Byb2ZpbGVfZmluZChwcml2 LCBwYXJhbXMtDQo+ID5tZXRlcl9wcm9maWxlX2lkKTsNCj4gLQlpZiAoZm1wID09IE5VTEwpDQo+ IC0JCXJldHVybiAtcnRlX210cl9lcnJvcl9zZXQoZXJyb3IsIEVOT0VOVCwNCj4gLQ0KPiBSVEVf TVRSX0VSUk9SX1RZUEVfTUVURVJfUFJPRklMRV9JRCwNCj4gLQkJCQkJICBOVUxMLCAiTWV0ZXIg cHJvZmlsZSBpZCBub3QgdmFsaWQuIik7DQo+IC0JLyogQWxsb2NhdGUgdGhlIGZsb3cgbWV0ZXIg bWVtb3J5LiAqLw0KPiAtCWlmIChwcml2LT5zaC0+bWV0ZXJfYXNvX2VuKSB7DQo+IC0JCW10cl9p ZHggPSBtbHg1X2Zsb3dfbXRyX2FsbG9jKGRldik7DQo+IC0JCWlmICghbXRyX2lkeCkNCj4gLQkJ CXJldHVybiAtcnRlX210cl9lcnJvcl9zZXQoZXJyb3IsIEVOT01FTSwNCj4gLQkJCQlSVEVfTVRS X0VSUk9SX1RZUEVfVU5TUEVDSUZJRUQsIE5VTEwsDQo+IC0JCQkJIk1lbW9yeSBhbGxvYyBmYWls ZWQgZm9yIG1ldGVyLiIpOw0KPiAtCQlhc29fbXRyID0gbWx4NV9hc29fbWV0ZXJfYnlfaWR4KHBy aXYsIG10cl9pZHgpOw0KPiAtCQlmbSA9ICZhc29fbXRyLT5mbTsNCj4gLQl9IGVsc2Ugew0KPiAt CQlsZWdhY3lfZm0gPSBtbHg1X2lwb29sX3ptYWxsb2MNCj4gLQkJCQkocHJpdi0+c2gtPmlwb29s W01MWDVfSVBPT0xfTVRSXSwNCj4gJm10cl9pZHgpOw0KPiAtCQlpZiAobGVnYWN5X2ZtID09IE5V TEwpDQo+IC0JCQlyZXR1cm4gLXJ0ZV9tdHJfZXJyb3Jfc2V0KGVycm9yLCBFTk9NRU0sDQo+IC0J CQkJUlRFX01UUl9FUlJPUl9UWVBFX1VOU1BFQ0lGSUVELCBOVUxMLA0KPiAtCQkJCSJNZW1vcnkg YWxsb2MgZmFpbGVkIGZvciBtZXRlci4iKTsNCj4gLQkJbGVnYWN5X2ZtLT5pZHggPSBtdHJfaWR4 Ow0KPiAtCQlmbSA9ICZsZWdhY3lfZm0tPmZtOw0KPiAtCX0NCj4gLQltdHJfaWRfYml0cyA9IE1M WDVfUkVHX0JJVFMgLSBfX2J1aWx0aW5fY2x6KG10cl9pZHgpOw0KPiAtCWlmICgobXRyX2lkX2Jp dHMgKyBwcml2LT5tYXhfbXRyX2Zsb3dfYml0cykgPiBtdHJfcmVnX2JpdHMpIHsNCj4gLQkJRFJW X0xPRyhFUlIsICJNZXRlciBudW1iZXIgZXhjZWVkcyBtYXggbGltaXQuIik7DQo+IC0JCWdvdG8g ZXJyb3I7DQo+IC0JfQ0KPiAtCWlmIChtdHJfaWRfYml0cyA+IHByaXYtPm1heF9tdHJfYml0cykN Cj4gLQkJcHJpdi0+bWF4X210cl9iaXRzID0gbXRyX2lkX2JpdHM7DQo+IC0JLyogRmlsbCB0aGUg ZmxvdyBtZXRlciBwYXJhbWV0ZXJzLiAqLw0KPiAtCWZtLT5tZXRlcl9pZCA9IG1ldGVyX2lkOw0K PiAtCWZtLT5wcm9maWxlID0gZm1wOw0KPiAtCW1lbWNweShmbS0+YWN0aW9uLCBwYXJhbXMtPmFj dGlvbiwgc2l6ZW9mKHBhcmFtcy0+YWN0aW9uKSk7DQo+IC0JbWx4NV9mbG93X21ldGVyX3N0YXRz X2VuYWJsZV91cGRhdGUoZm0sIHBhcmFtcy0+c3RhdHNfbWFzayk7DQo+IC0JLyogQWxsb2MgcG9s aWNlciBjb3VudGVycy4gKi8NCj4gLQlpZiAoZm0tPmdyZWVuX2J5dGVzIHx8IGZtLT5ncmVlbl9w a3RzKSB7DQo+IC0JCWZtLT5wb2xpY2VyX3N0YXRzLnBhc3NfY250ID0gbWx4NV9jb3VudGVyX2Fs bG9jKGRldik7DQo+IC0JCWlmICghZm0tPnBvbGljZXJfc3RhdHMucGFzc19jbnQpDQo+IC0JCQln b3RvIGVycm9yOw0KPiAtCX0NCj4gLQlpZiAoZm0tPnJlZF9ieXRlcyB8fCBmbS0+cmVkX3BrdHMg fHwNCj4gLQkgICAgZm0tPmJ5dGVzX2Ryb3BwZWQgfHwgZm0tPnBrdHNfZHJvcHBlZCkgew0KPiAt CQlmbS0+cG9saWNlcl9zdGF0cy5kcm9wX2NudCA9IG1seDVfY291bnRlcl9hbGxvYyhkZXYpOw0K PiAtCQlpZiAoIWZtLT5wb2xpY2VyX3N0YXRzLmRyb3BfY250KQ0KPiAtCQkJZ290byBlcnJvcjsN Cj4gLQl9DQo+IC0JZm0tPm1mdHMgPSBtbHg1X2Zsb3dfY3JlYXRlX210cl90YmxzKGRldik7DQo+ IC0JaWYgKCFmbS0+bWZ0cykNCj4gLQkJZ290byBlcnJvcjsNCj4gLQlyZXQgPSBtbHg1X2Zsb3df cHJlcGFyZV9wb2xpY2VyX3J1bGVzKGRldiwgZm0sICZhdHRyKTsNCj4gLQlpZiAocmV0KQ0KPiAt CQlnb3RvIGVycm9yOw0KPiAtCS8qIEFkZCB0byB0aGUgZmxvdyBtZXRlciBsaXN0LiAqLw0KPiAt CWlmICghcHJpdi0+c2gtPm1ldGVyX2Fzb19lbikNCj4gLQkJVEFJTFFfSU5TRVJUX1RBSUwoZm1z LCBsZWdhY3lfZm0sIG5leHQpOw0KPiAtCWZtLT5hY3RpdmVfc3RhdGUgPSAxOyAvKiBDb25maWcg bWV0ZXIgc3RhcnRzIGFzIGFjdGl2ZS4gKi8NCj4gLQlmbS0+aXNfZW5hYmxlID0gMTsNCj4gLQlm bS0+c2hhcmVkID0gISFzaGFyZWQ7DQo+IC0JX19hdG9taWNfYWRkX2ZldGNoKCZmbS0+cHJvZmls ZS0+cmVmX2NudCwgMSwNCj4gX19BVE9NSUNfUkVMQVhFRCk7DQo+IC0JZm0tPmZsb3dfaXBvb2wg PSBtbHg1X2lwb29sX2NyZWF0ZSgmZmxvd19pcG9vbF9jZmcpOw0KPiAtCWlmICghZm0tPmZsb3df aXBvb2wpDQo+IC0JCWdvdG8gZXJyb3I7DQo+IC0JcnRlX3NwaW5sb2NrX2luaXQoJmZtLT5zbCk7 DQo+IC0JLyogSWYgQVNPIG1ldGVyIHN1cHBvcnRlZCwgYWxsb2NhdGUgQVNPIGZsb3cgbWV0ZXIu ICovDQo+IC0JaWYgKHByaXYtPnNoLT5tZXRlcl9hc29fZW4pIHsNCj4gLQkJYXNvX210ciA9IGNv bnRhaW5lcl9vZihmbSwgc3RydWN0IG1seDVfYXNvX210ciwgZm0pOw0KPiAtCQlyZXQgPSBtbHg1 X2Fzb19tZXRlcl91cGRhdGVfYnlfd3FlKHByaXYtPnNoLCBhc29fbXRyKTsNCj4gLQkJaWYgKHJl dCkNCj4gLQkJCWdvdG8gZXJyb3I7DQo+IC0JCWRhdGEuZHdvcmQgPSBtdHJfaWR4Ow0KPiAtCQlp ZiAobWx4NV9sM3Rfc2V0X2VudHJ5KHByaXYtPm10cl9pZHhfdGJsLCBtZXRlcl9pZCwgJmRhdGEp KQ0KPiAtCQkJZ290byBlcnJvcjsNCj4gLQl9DQo+IC0JcmV0dXJuIDA7DQo+IC1lcnJvcjoNCj4g LQltbHg1X2Zsb3dfZGVzdHJveV9wb2xpY2VyX3J1bGVzKGRldiwgZm0sICZhdHRyKTsNCj4gLQlt bHg1X2Zsb3dfZGVzdHJveV9tdHJfdGJscyhkZXYsIGZtLT5tZnRzKTsNCj4gLQkvKiBGcmVlIHBv bGljZXIgY291bnRlcnMuICovDQo+IC0JaWYgKGZtLT5wb2xpY2VyX3N0YXRzLnBhc3NfY250KQ0K PiAtCQltbHg1X2NvdW50ZXJfZnJlZShkZXYsIGZtLT5wb2xpY2VyX3N0YXRzLnBhc3NfY250KTsN Cj4gLQlpZiAoZm0tPnBvbGljZXJfc3RhdHMuZHJvcF9jbnQpDQo+IC0JCW1seDVfY291bnRlcl9m cmVlKGRldiwgZm0tPnBvbGljZXJfc3RhdHMuZHJvcF9jbnQpOw0KPiAtCWlmIChwcml2LT5zaC0+ bWV0ZXJfYXNvX2VuKQ0KPiAtCQltbHg1X2Zsb3dfbXRyX2ZyZWUoZGV2LCBtdHJfaWR4KTsNCj4g LQllbHNlDQo+IC0JCW1seDVfaXBvb2xfZnJlZShwcml2LT5zaC0+aXBvb2xbTUxYNV9JUE9PTF9N VFJdLA0KPiBtdHJfaWR4KTsNCj4gLQlyZXR1cm4gLXJ0ZV9tdHJfZXJyb3Jfc2V0KGVycm9yLCAt cmV0LA0KPiAtCQkJCSAgUlRFX01UUl9FUlJPUl9UWVBFX1VOU1BFQ0lGSUVELA0KPiAtCQkJCSAg TlVMTCwgIkZhaWxlZCB0byBjcmVhdGUgZGV2eCBtZXRlci4iKTsNCj4gLX0NCj4gLQ0KPiAgc3Rh dGljIGludA0KPiAgbWx4NV9mbG93X21ldGVyX3BhcmFtc19mbHVzaChzdHJ1Y3QgcnRlX2V0aF9k ZXYgKmRldiwNCj4gIAkJCXN0cnVjdCBtbHg1X2Zsb3dfbWV0ZXJfaW5mbyAqZm0sDQo+IC0JCQlj b25zdCBzdHJ1Y3QgcnRlX2Zsb3dfYXR0ciAqYXR0ciwNCj4gIAkJCXVpbnQzMl90IG10cl9pZHgp DQo+ICB7DQo+ICAJc3RydWN0IG1seDVfcHJpdiAqcHJpdiA9IGRldi0+ZGF0YS0+ZGV2X3ByaXZh dGU7DQo+IEBAIC04MTAsMTUgKzU3MiwxMiBAQCBtbHg1X2Zsb3dfbWV0ZXJfcGFyYW1zX2ZsdXNo KHN0cnVjdA0KPiBydGVfZXRoX2RldiAqZGV2LA0KPiAgCQlsZWdhY3lfZm0gPSBjb250YWluZXJf b2YoZm0sIHN0cnVjdA0KPiBtbHg1X2xlZ2FjeV9mbG93X21ldGVyLCBmbSk7DQo+ICAJCVRBSUxR X1JFTU9WRShmbXMsIGxlZ2FjeV9mbSwgbmV4dCk7DQo+ICAJfQ0KPiAtCS8qIEZyZWUgcG9saWNl ciBjb3VudGVycy4gKi8NCj4gLQlpZiAoZm0tPnBvbGljZXJfc3RhdHMucGFzc19jbnQpDQo+IC0J CW1seDVfY291bnRlcl9mcmVlKGRldiwgZm0tPnBvbGljZXJfc3RhdHMucGFzc19jbnQpOw0KPiAt CWlmIChmbS0+cG9saWNlcl9zdGF0cy5kcm9wX2NudCkNCj4gLQkJbWx4NV9jb3VudGVyX2ZyZWUo ZGV2LCBmbS0+cG9saWNlcl9zdGF0cy5kcm9wX2NudCk7DQo+ICsJLyogRnJlZSBkcm9wIGNvdW50 ZXJzLiAqLw0KPiArCWlmIChmbS0+ZHJvcF9jbnQpDQo+ICsJCW1seDVfY291bnRlcl9mcmVlKGRl diwgZm0tPmRyb3BfY250KTsNCj4gIAkvKiBGcmVlIG1ldGVyIGZsb3cgdGFibGUuICovDQo+ICAJ aWYgKGZtLT5mbG93X2lwb29sKQ0KPiAgCQltbHg1X2lwb29sX2Rlc3Ryb3koZm0tPmZsb3dfaXBv b2wpOw0KPiAtCW1seDVfZmxvd19kZXN0cm95X3BvbGljZXJfcnVsZXMoZGV2LCBmbSwgYXR0cik7 DQo+ICAJbWx4NV9mbG93X2Rlc3Ryb3lfbXRyX3RibHMoZGV2LCBmbS0+bWZ0cyk7DQo+ICAJaWYg KHByaXYtPnNoLT5tZXRlcl9hc29fZW4pDQo+ICAJCW1seDVfZmxvd19tdHJfZnJlZShkZXYsIG10 cl9pZHgpOw0KPiBAQCAtODQ3LDExICs2MDYsNiBAQCBtbHg1X2Zsb3dfbWV0ZXJfZGVzdHJveShz dHJ1Y3QgcnRlX2V0aF9kZXYNCj4gKmRldiwgdWludDMyX3QgbWV0ZXJfaWQsDQo+ICB7DQo+ICAJ c3RydWN0IG1seDVfcHJpdiAqcHJpdiA9IGRldi0+ZGF0YS0+ZGV2X3ByaXZhdGU7DQo+ICAJc3Ry dWN0IG1seDVfZmxvd19tZXRlcl9pbmZvICpmbTsNCj4gLQljb25zdCBzdHJ1Y3QgcnRlX2Zsb3df YXR0ciBhdHRyID0gew0KPiAtCQkJCS5pbmdyZXNzID0gMSwNCj4gLQkJCQkuZWdyZXNzID0gMSwN Cj4gLQkJCQkudHJhbnNmZXIgPSBwcml2LT5jb25maWcuZHZfZXN3X2VuID8gMSA6IDAsDQo+IC0J CQl9Ow0KPiAgCXVpbnQzMl90IG10cl9pZHggPSAwOw0KPiANCj4gIAlpZiAoIXByaXYtPm10cl9l bikNCj4gQEAgLTg3Niw3ICs2MzAsNyBAQCBtbHg1X2Zsb3dfbWV0ZXJfZGVzdHJveShzdHJ1Y3Qg cnRlX2V0aF9kZXYgKmRldiwNCj4gdWludDMyX3QgbWV0ZXJfaWQsDQo+ICAJCQkJIkZhaWwgdG8g ZGVsZXRlIEFTTyBNZXRlciBpbiBpbmRleCB0YWJsZS4iKTsNCj4gIAl9DQo+ICAJLyogRGVzdHJv eSB0aGUgbWV0ZXIgcHJvZmlsZS4gKi8NCj4gLQlpZiAobWx4NV9mbG93X21ldGVyX3BhcmFtc19m bHVzaChkZXYsIGZtLCAmYXR0ciwgbXRyX2lkeCkpDQo+ICsJaWYgKG1seDVfZmxvd19tZXRlcl9w YXJhbXNfZmx1c2goZGV2LCBmbSwgbXRyX2lkeCkpDQo+ICAJCXJldHVybiAtcnRlX210cl9lcnJv cl9zZXQoZXJyb3IsIEVJTlZBTCwNCj4gDQo+IAlSVEVfTVRSX0VSUk9SX1RZUEVfTUVURVJfUFJP RklMRV9JRCwNCj4gIAkJCQkJTlVMTCwgIk1UUiBvYmplY3QgbWV0ZXIgcHJvZmlsZQ0KPiBpbnZh bGlkLiIpOw0KPiBAQCAtMTEwMiwxMyArODU2LDYgQEAgbWx4NV9mbG93X21ldGVyX3N0YXRzX3Vw ZGF0ZShzdHJ1Y3QNCj4gcnRlX2V0aF9kZXYgKmRldiwNCj4gIHsNCj4gIAlzdHJ1Y3QgbWx4NV9w cml2ICpwcml2ID0gZGV2LT5kYXRhLT5kZXZfcHJpdmF0ZTsNCj4gIAlzdHJ1Y3QgbWx4NV9mbG93 X21ldGVyX2luZm8gKmZtOw0KPiAtCWNvbnN0IHN0cnVjdCBydGVfZmxvd19hdHRyIGF0dHIgPSB7 DQo+IC0JCQkJLmluZ3Jlc3MgPSAxLA0KPiAtCQkJCS5lZ3Jlc3MgPSAxLA0KPiAtCQkJCS50cmFu c2ZlciA9IHByaXYtPmNvbmZpZy5kdl9lc3dfZW4gPyAxIDogMCwNCj4gLQkJCX07DQo+IC0JYm9v bCBuZWVkX3VwZGF0ZWQgPSBmYWxzZTsNCj4gLQlzdHJ1Y3QgbWx4NV9mbG93X3BvbGljZXJfc3Rh dHMgb2xkX3BvbGljZXJfc3RhdHM7DQo+IA0KPiAgCWlmICghcHJpdi0+bXRyX2VuKQ0KPiAgCQly ZXR1cm4gLXJ0ZV9tdHJfZXJyb3Jfc2V0KGVycm9yLCBFTk9UU1VQLA0KPiBAQCAtMTEyMCw2OSAr ODY3LDYgQEAgbWx4NV9mbG93X21ldGVyX3N0YXRzX3VwZGF0ZShzdHJ1Y3QNCj4gcnRlX2V0aF9k ZXYgKmRldiwNCj4gIAkJcmV0dXJuIC1ydGVfbXRyX2Vycm9yX3NldChlcnJvciwgRU5PRU5ULA0K PiAgCQkJCQkgIFJURV9NVFJfRVJST1JfVFlQRV9NVFJfSUQsDQo+ICAJCQkJCSAgTlVMTCwgIk1l dGVyIG9iamVjdCBpZCBub3QgdmFsaWQuIik7DQo+IC0Jb2xkX3BvbGljZXJfc3RhdHMucGFzc19j bnQgPSAwOw0KPiAtCW9sZF9wb2xpY2VyX3N0YXRzLmRyb3BfY250ID0gMDsNCj4gLQlpZiAoISEo KFJURV9NVFJfU1RBVFNfTl9QS1RTX0dSRUVOIHwNCj4gLQkJCQlSVEVfTVRSX1NUQVRTX05fQllU RVNfR1JFRU4pICYNCj4gc3RhdHNfbWFzaykgIT0NCj4gLQkJISFmbS0+cG9saWNlcl9zdGF0cy5w YXNzX2NudCkgew0KPiAtCQluZWVkX3VwZGF0ZWQgPSB0cnVlOw0KPiAtCQlpZiAoZm0tPnBvbGlj ZXJfc3RhdHMucGFzc19jbnQpIHsNCj4gLQkJCW9sZF9wb2xpY2VyX3N0YXRzLnBhc3NfY250ID0g Zm0tDQo+ID5wb2xpY2VyX3N0YXRzLnBhc3NfY250Ow0KPiAtCQkJZm0tPnBvbGljZXJfc3RhdHMu cGFzc19jbnQgPSAwOw0KPiAtCQl9IGVsc2Ugew0KPiAtCQkJZm0tPnBvbGljZXJfc3RhdHMucGFz c19jbnQgPQ0KPiAtCQkJCW1seDVfY291bnRlcl9hbGxvYyhkZXYpOw0KPiAtCQkJaWYgKCFmbS0+ cG9saWNlcl9zdGF0cy5wYXNzX2NudCkNCj4gLQkJCQlyZXR1cm4gLXJ0ZV9tdHJfZXJyb3Jfc2V0 KGVycm9yLCBFTk9NRU0sDQo+IC0NCj4gUlRFX01UUl9FUlJPUl9UWVBFX1VOU1BFQ0lGSUVELCBO VUxMLA0KPiAtCQkJCQkgICJDb3VudGVyIGFsbG9jIGZhaWxlZCBmb3IgbWV0ZXIuIik7DQo+IC0J CX0NCj4gLQl9DQo+IC0JaWYgKCEhKChSVEVfTVRSX1NUQVRTX05fUEtUU19SRUQgfA0KPiBSVEVf TVRSX1NUQVRTX05fQllURVNfUkVEIHwNCj4gLQkJUlRFX01UUl9TVEFUU19OX1BLVFNfRFJPUFBF RCB8DQo+IFJURV9NVFJfU1RBVFNfTl9CWVRFU19EUk9QUEVEKSAmDQo+IC0JCXN0YXRzX21hc2sp ICE9DQo+IC0JCSEhZm0tPnBvbGljZXJfc3RhdHMuZHJvcF9jbnQpIHsNCj4gLQkJbmVlZF91cGRh dGVkID0gdHJ1ZTsNCj4gLQkJaWYgKGZtLT5wb2xpY2VyX3N0YXRzLmRyb3BfY250KSB7DQo+IC0J CQlvbGRfcG9saWNlcl9zdGF0cy5kcm9wX2NudCA9IGZtLQ0KPiA+cG9saWNlcl9zdGF0cy5kcm9w X2NudDsNCj4gLQkJCWZtLT5wb2xpY2VyX3N0YXRzLmRyb3BfY250ID0gMDsNCj4gLQkJfSBlbHNl IHsNCj4gLQkJCWZtLT5wb2xpY2VyX3N0YXRzLmRyb3BfY250ID0NCj4gLQkJCQltbHg1X2NvdW50 ZXJfYWxsb2MoZGV2KTsNCj4gLQkJCWlmICghZm0tPnBvbGljZXJfc3RhdHMuZHJvcF9jbnQpDQo+ IC0JCQkJcmV0dXJuIC1ydGVfbXRyX2Vycm9yX3NldChlcnJvciwgRU5PTUVNLA0KPiAtDQo+IFJU RV9NVFJfRVJST1JfVFlQRV9VTlNQRUNJRklFRCwgTlVMTCwNCj4gLQkJCQkJICAiQ291bnRlciBh bGxvYyBmYWlsZWQgZm9yIG1ldGVyLiIpOw0KPiAtCQl9DQo+IC0JfQ0KPiAtCWlmIChuZWVkX3Vw ZGF0ZWQpIHsNCj4gLQkJaWYgKG1seDVfZmxvd19wcmVwYXJlX3BvbGljZXJfcnVsZXMoZGV2LCBm bSwgJmF0dHIpKSB7DQo+IC0JCQlpZiAoZm0tPnBvbGljZXJfc3RhdHMucGFzc19jbnQgJiYNCj4g LQkJCQlmbS0+cG9saWNlcl9zdGF0cy5wYXNzX2NudCAhPQ0KPiAtCQkJCW9sZF9wb2xpY2VyX3N0 YXRzLnBhc3NfY250KQ0KPiAtCQkJCW1seDVfY291bnRlcl9mcmVlKGRldiwNCj4gLQkJCQkJZm0t PnBvbGljZXJfc3RhdHMucGFzc19jbnQpOw0KPiAtCQkJZm0tPnBvbGljZXJfc3RhdHMucGFzc19j bnQgPQ0KPiAtCQkJCQlvbGRfcG9saWNlcl9zdGF0cy5wYXNzX2NudDsNCj4gLQkJCWlmIChmbS0+ cG9saWNlcl9zdGF0cy5kcm9wX2NudCAmJg0KPiAtCQkJCWZtLT5wb2xpY2VyX3N0YXRzLmRyb3Bf Y250ICE9DQo+IC0JCQkJb2xkX3BvbGljZXJfc3RhdHMuZHJvcF9jbnQpDQo+IC0JCQkJbWx4NV9j b3VudGVyX2ZyZWUoZGV2LA0KPiAtCQkJCQlmbS0+cG9saWNlcl9zdGF0cy5kcm9wX2NudCk7DQo+ IC0JCQlmbS0+cG9saWNlcl9zdGF0cy5wYXNzX2NudCA9DQo+IC0JCQkJCW9sZF9wb2xpY2VyX3N0 YXRzLnBhc3NfY250Ow0KPiAtCQkJcmV0dXJuIC1ydGVfbXRyX2Vycm9yX3NldChlcnJvciwgRU5P VFNVUCwNCj4gLQkJCQlSVEVfTVRSX0VSUk9SX1RZUEVfVU5TUEVDSUZJRUQsDQo+IC0JCQkJTlVM TCwgIkZhaWxlZCB0byBjcmVhdGUgbWV0ZXIgcG9saWNlciBydWxlcy4iKTsNCj4gLQkJfQ0KPiAt CQkvKiBGcmVlIG9sZCBwb2xpY2VyIGNvdW50ZXJzLiAqLw0KPiAtCQlpZiAob2xkX3BvbGljZXJf c3RhdHMucGFzc19jbnQpDQo+IC0JCQltbHg1X2NvdW50ZXJfZnJlZShkZXYsDQo+IC0JCQkJb2xk X3BvbGljZXJfc3RhdHMucGFzc19jbnQpOw0KPiAtCQlpZiAob2xkX3BvbGljZXJfc3RhdHMuZHJv cF9jbnQpDQo+IC0JCQltbHg1X2NvdW50ZXJfZnJlZShkZXYsDQo+IC0JCQkJb2xkX3BvbGljZXJf c3RhdHMuZHJvcF9jbnQpOw0KPiAtCX0NCj4gIAltbHg1X2Zsb3dfbWV0ZXJfc3RhdHNfZW5hYmxl X3VwZGF0ZShmbSwgc3RhdHNfbWFzayk7DQo+ICAJcmV0dXJuIDA7DQo+ICB9DQo+IEBAIC0xMjE2 LDcgKzkwMCw2IEBAIG1seDVfZmxvd19tZXRlcl9zdGF0c19yZWFkKHN0cnVjdCBydGVfZXRoX2Rl dg0KPiAqZGV2LA0KPiAgew0KPiAgCXN0cnVjdCBtbHg1X3ByaXYgKnByaXYgPSBkZXYtPmRhdGEt PmRldl9wcml2YXRlOw0KPiAgCXN0cnVjdCBtbHg1X2Zsb3dfbWV0ZXJfaW5mbyAqZm07DQo+IC0J c3RydWN0IG1seDVfZmxvd19wb2xpY2VyX3N0YXRzICpwczsNCj4gIAl1aW50NjRfdCBwa3RzOw0K PiAgCXVpbnQ2NF90IGJ5dGVzOw0KPiAgCWludCByZXQgPSAwOw0KPiBAQCAtMTIzMSwzNSArOTE0 LDE0IEBAIG1seDVfZmxvd19tZXRlcl9zdGF0c19yZWFkKHN0cnVjdCBydGVfZXRoX2Rldg0KPiAq ZGV2LA0KPiAgCQlyZXR1cm4gLXJ0ZV9tdHJfZXJyb3Jfc2V0KGVycm9yLCBFTk9FTlQsDQo+ICAJ CQkJCSAgUlRFX01UUl9FUlJPUl9UWVBFX01UUl9JRCwNCj4gIAkJCQkJICBOVUxMLCAiTWV0ZXIg b2JqZWN0IGlkIG5vdCB2YWxpZC4iKTsNCj4gLQlwcyA9ICZmbS0+cG9saWNlcl9zdGF0czsNCj4g IAkqc3RhdHNfbWFzayA9IDA7DQo+IC0JaWYgKGZtLT5ncmVlbl9ieXRlcykNCj4gLQkJKnN0YXRz X21hc2sgfD0gUlRFX01UUl9TVEFUU19OX0JZVEVTX0dSRUVOOw0KPiAtCWlmIChmbS0+Z3JlZW5f cGt0cykNCj4gLQkJKnN0YXRzX21hc2sgfD0gUlRFX01UUl9TVEFUU19OX1BLVFNfR1JFRU47DQo+ IC0JaWYgKGZtLT5yZWRfYnl0ZXMpDQo+IC0JCSpzdGF0c19tYXNrIHw9IFJURV9NVFJfU1RBVFNf Tl9CWVRFU19SRUQ7DQo+IC0JaWYgKGZtLT5yZWRfcGt0cykNCj4gLQkJKnN0YXRzX21hc2sgfD0g UlRFX01UUl9TVEFUU19OX1BLVFNfUkVEOw0KPiAgCWlmIChmbS0+Ynl0ZXNfZHJvcHBlZCkNCj4g IAkJKnN0YXRzX21hc2sgfD0gUlRFX01UUl9TVEFUU19OX0JZVEVTX0RST1BQRUQ7DQo+ICAJaWYg KGZtLT5wa3RzX2Ryb3BwZWQpDQo+ICAJCSpzdGF0c19tYXNrIHw9IFJURV9NVFJfU1RBVFNfTl9Q S1RTX0RST1BQRUQ7DQo+ICAJbWVtc2V0KHN0YXRzLCAwLCBzaXplb2YoKnN0YXRzKSk7DQo+IC0J aWYgKHBzLT5wYXNzX2NudCkgew0KPiAtCQlyZXQgPSBtbHg1X2NvdW50ZXJfcXVlcnkoZGV2LCBw cy0+cGFzc19jbnQsIGNsZWFyLCAmcGt0cywNCj4gLQkJCQkJCSAmYnl0ZXMpOw0KPiAtCQlpZiAo cmV0KQ0KPiAtCQkJZ290byBlcnJvcjsNCj4gLQkJLyogSWYgbmVlZCB0byByZWFkIHRoZSBwYWNr ZXRzLCBzZXQgaXQuICovDQo+IC0JCWlmIChmbS0+Z3JlZW5fcGt0cykNCj4gLQkJCXN0YXRzLT5u X3BrdHNbUlRFX0NPTE9SX0dSRUVOXSA9IHBrdHM7DQo+IC0JCS8qIElmIG5lZWQgdG8gcmVhZCB0 aGUgYnl0ZXMsIHNldCBpdC4gKi8NCj4gLQkJaWYgKGZtLT5ncmVlbl9ieXRlcykNCj4gLQkJCXN0 YXRzLT5uX2J5dGVzW1JURV9DT0xPUl9HUkVFTl0gPSBieXRlczsNCj4gLQl9DQo+IC0JaWYgKHBz LT5kcm9wX2NudCkgew0KPiAtCQlyZXQgPSBtbHg1X2NvdW50ZXJfcXVlcnkoZGV2LCBwcy0+ZHJv cF9jbnQsIGNsZWFyLCAmcGt0cywNCj4gKwlpZiAoZm0tPmRyb3BfY250KSB7DQo+ICsJCXJldCA9 IG1seDVfY291bnRlcl9xdWVyeShkZXYsIGZtLT5kcm9wX2NudCwgY2xlYXIsICZwa3RzLA0KPiAg CQkJCQkJICZieXRlcyk7DQo+ICAJCWlmIChyZXQpDQo+ICAJCQlnb3RvIGVycm9yOw0KPiBAQCAt MTI3MywyMCArOTM1LDE4IEBAIG1seDVfZmxvd19tZXRlcl9zdGF0c19yZWFkKHN0cnVjdCBydGVf ZXRoX2Rldg0KPiAqZGV2LA0KPiAgCXJldHVybiAwOw0KPiAgZXJyb3I6DQo+ICAJcmV0dXJuIC1y dGVfbXRyX2Vycm9yX3NldChlcnJvciwgcmV0LCBSVEVfTVRSX0VSUk9SX1RZUEVfU1RBVFMsDQo+ IE5VTEwsDQo+IC0JCQkJICJGYWlsZWQgdG8gcmVhZCBwb2xpY2VyIGNvdW50ZXJzLiIpOw0KPiAr CQkJCSAiRmFpbGVkIHRvIHJlYWQgbWV0ZXIgZHJvcCBjb3VudGVycy4iKTsNCj4gIH0NCj4gDQo+ ICBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0ZV9tdHJfb3BzIG1seDVfZmxvd19tdHJfb3BzID0gew0K PiAgCS5jYXBhYmlsaXRpZXNfZ2V0ID0gbWx4NV9mbG93X210cl9jYXBfZ2V0LA0KPiAgCS5tZXRl cl9wcm9maWxlX2FkZCA9IG1seDVfZmxvd19tZXRlcl9wcm9maWxlX2FkZCwNCj4gIAkubWV0ZXJf cHJvZmlsZV9kZWxldGUgPSBtbHg1X2Zsb3dfbWV0ZXJfcHJvZmlsZV9kZWxldGUsDQo+IC0JLmNy ZWF0ZSA9IG1seDVfZmxvd19tZXRlcl9jcmVhdGUsDQo+ICAJLmRlc3Ryb3kgPSBtbHg1X2Zsb3df bWV0ZXJfZGVzdHJveSwNCj4gIAkubWV0ZXJfZW5hYmxlID0gbWx4NV9mbG93X21ldGVyX2VuYWJs ZSwNCj4gIAkubWV0ZXJfZGlzYWJsZSA9IG1seDVfZmxvd19tZXRlcl9kaXNhYmxlLA0KPiAgCS5t ZXRlcl9wcm9maWxlX3VwZGF0ZSA9IG1seDVfZmxvd19tZXRlcl9wcm9maWxlX3VwZGF0ZSwNCj4g IAkubWV0ZXJfZHNjcF90YWJsZV91cGRhdGUgPSBOVUxMLA0KPiAtCS5wb2xpY2VyX2FjdGlvbnNf dXBkYXRlID0gTlVMTCwNCj4gIAkuc3RhdHNfdXBkYXRlID0gbWx4NV9mbG93X21ldGVyX3N0YXRz X3VwZGF0ZSwNCj4gIAkuc3RhdHNfcmVhZCA9IG1seDVfZmxvd19tZXRlcl9zdGF0c19yZWFkLA0K PiAgfTsNCj4gQEAgLTEzNDQsMTIgKzEwMDQsMTEgQEAgbWx4NV9mbG93X21ldGVyX2ZpbmQoc3Ry dWN0IG1seDVfcHJpdiAqcHJpdiwNCj4gdWludDMyX3QgbWV0ZXJfaWQsDQo+ICAJCWFzb19tdHIg PSBtbHg1X2Fzb19tZXRlcl9ieV9pZHgocHJpdiwgZGF0YS5kd29yZCk7DQo+ICAJCS8qIFJlbW92 ZSByZWZlcmVuY2UgdGFrZW4gYnkgdGhlIG1seDVfbDN0X2dldF9lbnRyeS4gKi8NCj4gIAkJbWx4 NV9sM3RfY2xlYXJfZW50cnkocHJpdi0+bXRyX2lkeF90YmwsIG1ldGVyX2lkKTsNCj4gLQkJTUxY NV9BU1NFUlQobWV0ZXJfaWQgPT0gYXNvX210ci0+Zm0ubWV0ZXJfaWQpOw0KPiAgCQlydGVfc3Bp bmxvY2tfdW5sb2NrKCZtdHJtbmctPm10cnNsKTsNCj4gIAkJcmV0dXJuICZhc29fbXRyLT5mbTsN Cj4gIAl9DQo+ICAJVEFJTFFfRk9SRUFDSChsZWdhY3lfZm0sIGZtcywgbmV4dCkNCj4gLQkJaWYg KG1ldGVyX2lkID09IGxlZ2FjeV9mbS0+Zm0ubWV0ZXJfaWQpIHsNCj4gKwkJaWYgKG1ldGVyX2lk ID09IGxlZ2FjeV9mbS0+bWV0ZXJfaWQpIHsNCj4gIAkJCWlmIChtdHJfaWR4KQ0KPiAgCQkJCSpt dHJfaWR4ID0gbGVnYWN5X2ZtLT5pZHg7DQo+ICAJCQlyZXR1cm4gJmxlZ2FjeV9mbS0+Zm07DQo+ IEBAIC0xNTE3LDExICsxMTc2LDYgQEAgbWx4NV9mbG93X21ldGVyX2ZsdXNoKHN0cnVjdCBydGVf ZXRoX2RldiAqZGV2LA0KPiBzdHJ1Y3QgcnRlX210cl9lcnJvciAqZXJyb3IpDQo+ICAJc3RydWN0 IG1seDVfbGVnYWN5X2Zsb3dfbWV0ZXIgKmxlZ2FjeV9mbTsNCj4gIAlzdHJ1Y3QgbWx4NV9mbG93 X21ldGVyX2luZm8gKmZtOw0KPiAgCXN0cnVjdCBtbHg1X2Fzb19tdHJfcG9vbCAqbXRyX3Bvb2w7 DQo+IC0JY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2F0dHIgYXR0ciA9IHsNCj4gLQkJCQkuaW5ncmVz cyA9IDEsDQo+IC0JCQkJLmVncmVzcyA9IDEsDQo+IC0JCQkJLnRyYW5zZmVyID0gcHJpdi0+Y29u ZmlnLmR2X2Vzd19lbiA/IDEgOiAwLA0KPiAtCQkJfTsNCj4gIAl2b2lkICp0bXA7DQo+ICAJdWlu dDMyX3QgaSwgb2Zmc2V0LCBtdHJfaWR4Ow0KPiANCj4gQEAgLTE1MzMsOSArMTE4Nyw4IEBAIG1s eDVfZmxvd19tZXRlcl9mbHVzaChzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldiwNCj4gc3RydWN0IHJ0 ZV9tdHJfZXJyb3IgKmVycm9yKQ0KPiAgCQkJCW9mZnNldCsrKSB7DQo+ICAJCQkJZm0gPSAmbXRy X3Bvb2wtPm10cnNbb2Zmc2V0XS5mbTsNCj4gIAkJCQltdHJfaWR4ID0gTUxYNV9NQUtFX01UUl9J RFgoaSwgb2Zmc2V0KTsNCj4gLQkJCQlpZiAoZm0tPm1ldGVyX2lkICE9IFVJTlQzMl9NQVggJiYN Cj4gLQ0KPiAJbWx4NV9mbG93X21ldGVyX3BhcmFtc19mbHVzaChkZXYsDQo+IC0JCQkJCQlmbSwg JmF0dHIsIG10cl9pZHgpKQ0KPiArCQkJCWlmIChtbHg1X2Zsb3dfbWV0ZXJfcGFyYW1zX2ZsdXNo KGRldiwNCj4gKwkJCQkJCWZtLCBtdHJfaWR4KSkNCj4gIAkJCQkJcmV0dXJuIC1ydGVfbXRyX2Vy cm9yX3NldA0KPiAgCQkJCQkoZXJyb3IsIEVJTlZBTCwNCj4gDQo+IAlSVEVfTVRSX0VSUk9SX1RZ UEVfTUVURVJfUFJPRklMRV9JRCwNCj4gQEAgLTE1NDUsNyArMTE5OCw3IEBAIG1seDVfZmxvd19t ZXRlcl9mbHVzaChzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldiwNCj4gc3RydWN0IHJ0ZV9tdHJfZXJy b3IgKmVycm9yKQ0KPiAgCX0gZWxzZSB7DQo+ICAJCVRBSUxRX0ZPUkVBQ0hfU0FGRShsZWdhY3lf Zm0sIGZtcywgbmV4dCwgdG1wKSB7DQo+ICAJCQlmbSA9ICZsZWdhY3lfZm0tPmZtOw0KPiAtCQkJ aWYgKG1seDVfZmxvd19tZXRlcl9wYXJhbXNfZmx1c2goZGV2LCBmbSwgJmF0dHIsDQo+IDApKQ0K PiArCQkJaWYgKG1seDVfZmxvd19tZXRlcl9wYXJhbXNfZmx1c2goZGV2LCBmbSwgMCkpDQo+ICAJ CQkJcmV0dXJuIC1ydGVfbXRyX2Vycm9yX3NldChlcnJvciwgRUlOVkFMLA0KPiANCj4gCVJURV9N VFJfRVJST1JfVFlQRV9NRVRFUl9QUk9GSUxFX0lELA0KPiAgCQkJCQlOVUxMLCAiTVRSIG9iamVj dCBtZXRlciBwcm9maWxlDQo+IGludmFsaWQuIik7DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25l dC9zb2Z0bmljL3J0ZV9ldGhfc29mdG5pY19mbG93LmMNCj4gYi9kcml2ZXJzL25ldC9zb2Z0bmlj L3J0ZV9ldGhfc29mdG5pY19mbG93LmMNCj4gaW5kZXggNzkyNWJhZDFjMC4uMjdlYWYzODBjZCAx MDA2NDQNCj4gLS0tIGEvZHJpdmVycy9uZXQvc29mdG5pYy9ydGVfZXRoX3NvZnRuaWNfZmxvdy5j DQo+ICsrKyBiL2RyaXZlcnMvbmV0L3NvZnRuaWMvcnRlX2V0aF9zb2Z0bmljX2Zsb3cuYw0KPiBA QCAtMTE2Niw2ICsxMTY2LDcgQEAgZmxvd19ydWxlX2FjdGlvbl9nZXQoc3RydWN0IHBtZF9pbnRl cm5hbHMNCj4gKnNvZnRuaWMsDQo+ICB7DQo+ICAJc3RydWN0IHNvZnRuaWNfdGFibGVfYWN0aW9u X3Byb2ZpbGUgKnByb2ZpbGU7DQo+ICAJc3RydWN0IHNvZnRuaWNfdGFibGVfYWN0aW9uX3Byb2Zp bGVfcGFyYW1zICpwYXJhbXM7DQo+ICsJc3RydWN0IHNvZnRuaWNfbXRyX21ldGVyX3BvbGljeSAq cG9saWN5Ow0KPiAgCWludCBuX2p1bXBfcXVldWVfcnNzX2Ryb3AgPSAwOw0KPiAgCWludCBuX2Nv dW50ID0gMDsNCj4gIAlpbnQgbl9tYXJrID0gMDsNCj4gQEAgLTE2MjEsMTUgKzE2MjIsMjUgQEAg Zmxvd19ydWxlX2FjdGlvbl9nZXQoc3RydWN0IHBtZF9pbnRlcm5hbHMNCj4gKnNvZnRuaWMsDQo+ ICAJCQkJCXJldHVybiAtMTsNCj4gIAkJCQl9DQo+ICAJCQl9DQo+IC0NCj4gKwkJCS8qIE1ldGVy IHBvbGljeSBtdXN0IGV4aXN0ICovDQo+ICsJCQlwb2xpY3kgPSBzb2Z0bmljX210cl9tZXRlcl9w b2xpY3lfZmluZChzb2Z0bmljLA0KPiArCQkJCQltLT5wYXJhbXMubWV0ZXJfcG9saWN5X2lkKTsN Cj4gKwkJCWlmIChwb2xpY3kgPT0gTlVMTCkgew0KPiArCQkJCXJ0ZV9mbG93X2Vycm9yX3NldChl cnJvciwNCj4gKwkJCQkJCUVJTlZBTCwNCj4gKw0KPiAJUlRFX0ZMT1dfRVJST1JfVFlQRV9VTlNQ RUNJRklFRCwNCj4gKwkJCQkJCU5VTEwsDQo+ICsJCQkJCQkiTUVURVI6IGZhaWwgdG8gZmluZCBt ZXRlcg0KPiBwb2xpY3kiKTsNCj4gKwkJCQlyZXR1cm4gLTE7DQo+ICsJCQl9DQo+ICAJCQkvKiBS VEVfVEFCTEVfQUNUSU9OX01FVEVSICovDQo+ICAJCQlydWxlX2FjdGlvbi0+bXRyLm10clswXS5t ZXRlcl9wcm9maWxlX2lkID0NCj4gbWV0ZXJfcHJvZmlsZV9pZDsNCj4gIAkJCXJ1bGVfYWN0aW9u LT5tdHIubXRyWzBdLnBvbGljZXJbUlRFX0NPTE9SX0dSRUVOXQ0KPiA9DQo+IC0JCQkJc29mdG5p Y190YWJsZV9hY3Rpb25fcG9saWNlcihtLQ0KPiA+cGFyYW1zLmFjdGlvbltSVEVfQ09MT1JfR1JF RU5dKTsNCj4gKwkJCQlwb2xpY3ktPnBvbGljZXJbUlRFX0NPTE9SX0dSRUVOXTsNCj4gIAkJCXJ1 bGVfYWN0aW9uLQ0KPiA+bXRyLm10clswXS5wb2xpY2VyW1JURV9DT0xPUl9ZRUxMT1ddID0NCj4g LQkJCQlzb2Z0bmljX3RhYmxlX2FjdGlvbl9wb2xpY2VyKG0tDQo+ID5wYXJhbXMuYWN0aW9uW1JU RV9DT0xPUl9ZRUxMT1ddKTsNCj4gKwkJCQlwb2xpY3ktPnBvbGljZXJbUlRFX0NPTE9SX1lFTExP V107DQo+ICAJCQlydWxlX2FjdGlvbi0+bXRyLm10clswXS5wb2xpY2VyW1JURV9DT0xPUl9SRURd ID0NCj4gLQkJCQlzb2Z0bmljX3RhYmxlX2FjdGlvbl9wb2xpY2VyKG0tDQo+ID5wYXJhbXMuYWN0 aW9uW1JURV9DT0xPUl9SRURdKTsNCj4gKwkJCQlwb2xpY3ktPnBvbGljZXJbUlRFX0NPTE9SX1JF RF07DQo+ICAJCQlydWxlX2FjdGlvbi0+bXRyLnRjX21hc2sgPSAxOw0KPiAgCQkJcnVsZV9hY3Rp b24tPmFjdGlvbl9tYXNrIHw9IDEgPDwNCj4gUlRFX1RBQkxFX0FDVElPTl9NVFI7DQo+ICAJCQli cmVhazsNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NvZnRuaWMvcnRlX2V0aF9zb2Z0bmlj X2ludGVybmFscy5oDQo+IGIvZHJpdmVycy9uZXQvc29mdG5pYy9ydGVfZXRoX3NvZnRuaWNfaW50 ZXJuYWxzLmgNCj4gaW5kZXggZmFmOTBhNWE4Yy4uMWIzMTg2ZWYwYiAxMDA2NDQNCj4gLS0tIGEv ZHJpdmVycy9uZXQvc29mdG5pYy9ydGVfZXRoX3NvZnRuaWNfaW50ZXJuYWxzLmgNCj4gKysrIGIv ZHJpdmVycy9uZXQvc29mdG5pYy9ydGVfZXRoX3NvZnRuaWNfaW50ZXJuYWxzLmgNCj4gQEAgLTgz LDYgKzgzLDE2IEBAIHN0cnVjdCBzb2Z0bmljX210cl9tZXRlcl9wcm9maWxlIHsNCj4gDQo+ICBU QUlMUV9IRUFEKHNvZnRuaWNfbXRyX21ldGVyX3Byb2ZpbGVfbGlzdCwgc29mdG5pY19tdHJfbWV0 ZXJfcHJvZmlsZSk7DQo+IA0KPiArLyogTVRSIG1ldGVyIHBvbGljeSAqLw0KPiArc3RydWN0IHNv ZnRuaWNfbXRyX21ldGVyX3BvbGljeSB7DQo+ICsJVEFJTFFfRU5UUlkoc29mdG5pY19tdHJfbWV0 ZXJfcG9saWN5KSBub2RlOw0KPiArCXVpbnQzMl90IG1ldGVyX3BvbGljeV9pZDsNCj4gKwllbnVt IHJ0ZV90YWJsZV9hY3Rpb25fcG9saWNlciBwb2xpY2VyW1JURV9DT0xPUlNdOw0KPiArCXVpbnQz Ml90IG5fdXNlcnM7DQo+ICt9Ow0KPiArDQo+ICtUQUlMUV9IRUFEKHNvZnRuaWNfbXRyX21ldGVy X3BvbGljeV9saXN0LCBzb2Z0bmljX210cl9tZXRlcl9wb2xpY3kpOw0KPiArDQo+ICAvKiBNVFIg bWV0ZXIgb2JqZWN0ICovDQo+ICBzdHJ1Y3Qgc29mdG5pY19tdHIgew0KPiAgCVRBSUxRX0VOVFJZ KHNvZnRuaWNfbXRyKSBub2RlOw0KPiBAQCAtOTUsNiArMTA1LDcgQEAgVEFJTFFfSEVBRChzb2Z0 bmljX210cl9saXN0LCBzb2Z0bmljX210cik7DQo+IA0KPiAgc3RydWN0IG10cl9pbnRlcm5hbHMg ew0KPiAgCXN0cnVjdCBzb2Z0bmljX210cl9tZXRlcl9wcm9maWxlX2xpc3QgbWV0ZXJfcHJvZmls ZXM7DQo+ICsJc3RydWN0IHNvZnRuaWNfbXRyX21ldGVyX3BvbGljeV9saXN0IG1ldGVyX3BvbGlj aWVzOw0KPiAgCXN0cnVjdCBzb2Z0bmljX210cl9saXN0IG10cnM7DQo+ICB9Ow0KPiANCj4gQEAg LTY3OCw2ICs2ODksMTAgQEAgc3RydWN0IHNvZnRuaWNfbXRyX21ldGVyX3Byb2ZpbGUgKg0KPiAg c29mdG5pY19tdHJfbWV0ZXJfcHJvZmlsZV9maW5kKHN0cnVjdCBwbWRfaW50ZXJuYWxzICpwLA0K PiAgCXVpbnQzMl90IG1ldGVyX3Byb2ZpbGVfaWQpOw0KPiANCj4gK3N0cnVjdCBzb2Z0bmljX210 cl9tZXRlcl9wb2xpY3kgKg0KPiArc29mdG5pY19tdHJfbWV0ZXJfcG9saWN5X2ZpbmQoc3RydWN0 IHBtZF9pbnRlcm5hbHMgKnAsDQo+ICsJdWludDMyX3QgbWV0ZXJfcG9saWN5X2lkKTsNCj4gKw0K PiAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBydGVfbXRyX29wcyBwbWRfbXRyX29wczsNCj4gDQo+ICAv KioNCj4gQEAgLTg0MSw5ICs4NTYsNiBAQCBzb2Z0bmljX3RhYmxlX2FjdGlvbl9wcm9maWxlX2Ny ZWF0ZShzdHJ1Y3QNCj4gcG1kX2ludGVybmFscyAqcCwNCj4gIAljb25zdCBjaGFyICpuYW1lLA0K PiAgCXN0cnVjdCBzb2Z0bmljX3RhYmxlX2FjdGlvbl9wcm9maWxlX3BhcmFtcyAqcGFyYW1zKTsN Cj4gDQo+IC1lbnVtIHJ0ZV90YWJsZV9hY3Rpb25fcG9saWNlcg0KPiAtc29mdG5pY190YWJsZV9h Y3Rpb25fcG9saWNlcihlbnVtIHJ0ZV9tdHJfcG9saWNlcl9hY3Rpb24gYWN0aW9uKTsNCj4gLQ0K PiAgLyoqDQo+ICAgKiBQaXBlbGluZQ0KPiAgICovDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25l dC9zb2Z0bmljL3J0ZV9ldGhfc29mdG5pY19tZXRlci5jDQo+IGIvZHJpdmVycy9uZXQvc29mdG5p Yy9ydGVfZXRoX3NvZnRuaWNfbWV0ZXIuYw0KPiBpbmRleCAzMWEyYTBlNmQ5Li4yYTA1YTg1Y2Ri IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL25ldC9zb2Z0bmljL3J0ZV9ldGhfc29mdG5pY19tZXRl ci5jDQo+ICsrKyBiL2RyaXZlcnMvbmV0L3NvZnRuaWMvcnRlX2V0aF9zb2Z0bmljX21ldGVyLmMN Cj4gQEAgLTY1LDI3ICs2NSw2IEBAIHNvZnRuaWNfbXRyX21ldGVyX3Byb2ZpbGVfZmluZChzdHJ1 Y3QgcG1kX2ludGVybmFscw0KPiAqcCwNCj4gIAlyZXR1cm4gTlVMTDsNCj4gIH0NCj4gDQo+IC1l bnVtIHJ0ZV90YWJsZV9hY3Rpb25fcG9saWNlcg0KPiAtc29mdG5pY190YWJsZV9hY3Rpb25fcG9s aWNlcihlbnVtIHJ0ZV9tdHJfcG9saWNlcl9hY3Rpb24gYWN0aW9uKQ0KPiAtew0KPiAtCXN3aXRj aCAoYWN0aW9uKSB7DQo+IC0JY2FzZSBNVFJfUE9MSUNFUl9BQ1RJT05fQ09MT1JfR1JFRU46DQo+ IC0JCXJldHVybiBSVEVfVEFCTEVfQUNUSU9OX1BPTElDRVJfQ09MT1JfR1JFRU47DQo+IC0NCj4g LQkJLyogRkFMTFRIUk9VR0ggKi8NCj4gLQljYXNlIE1UUl9QT0xJQ0VSX0FDVElPTl9DT0xPUl9Z RUxMT1c6DQo+IC0JCXJldHVybiBSVEVfVEFCTEVfQUNUSU9OX1BPTElDRVJfQ09MT1JfWUVMTE9X Ow0KPiAtDQo+IC0JCS8qIEZBTExUSFJPVUdIICovDQo+IC0JY2FzZSBNVFJfUE9MSUNFUl9BQ1RJ T05fQ09MT1JfUkVEOg0KPiAtCQlyZXR1cm4gUlRFX1RBQkxFX0FDVElPTl9QT0xJQ0VSX0NPTE9S X1JFRDsNCj4gLQ0KPiAtCQkvKiBGQUxMVEhST1VHSCAqLw0KPiAtCWRlZmF1bHQ6DQo+IC0JCXJl dHVybiBSVEVfVEFCTEVfQUNUSU9OX1BPTElDRVJfRFJPUDsNCj4gLQl9DQo+IC19DQo+IC0NCj4g IHN0YXRpYyBpbnQNCj4gIG1ldGVyX3Byb2ZpbGVfY2hlY2soc3RydWN0IHJ0ZV9ldGhfZGV2ICpk ZXYsDQo+ICAJdWludDMyX3QgbWV0ZXJfcHJvZmlsZV9pZCwNCj4gQEAgLTIwMCw2ICsxNzksMTI5 IEBAIHBtZF9tdHJfbWV0ZXJfcHJvZmlsZV9kZWxldGUoc3RydWN0DQo+IHJ0ZV9ldGhfZGV2ICpk ZXYsDQo+ICAJcmV0dXJuIDA7DQo+ICB9DQo+IA0KPiArc3RydWN0IHNvZnRuaWNfbXRyX21ldGVy X3BvbGljeSAqDQo+ICtzb2Z0bmljX210cl9tZXRlcl9wb2xpY3lfZmluZChzdHJ1Y3QgcG1kX2lu dGVybmFscyAqcCwNCj4gKwl1aW50MzJfdCBtZXRlcl9wb2xpY3lfaWQpDQo+ICt7DQo+ICsJc3Ry dWN0IHNvZnRuaWNfbXRyX21ldGVyX3BvbGljeV9saXN0ICptcGwgPSAmcC0NCj4gPm10ci5tZXRl cl9wb2xpY2llczsNCj4gKwlzdHJ1Y3Qgc29mdG5pY19tdHJfbWV0ZXJfcG9saWN5ICptcDsNCj4g Kw0KPiArCVRBSUxRX0ZPUkVBQ0gobXAsIG1wbCwgbm9kZSkNCj4gKwkJaWYgKG1ldGVyX3BvbGlj eV9pZCA9PSBtcC0+bWV0ZXJfcG9saWN5X2lkKQ0KPiArCQkJcmV0dXJuIG1wOw0KPiArDQo+ICsJ cmV0dXJuIE5VTEw7DQo+ICt9DQo+ICsNCj4gKy8qIE1UUiBtZXRlciBwb2xpY3kgY3JlYXRlICov DQo+ICtzdGF0aWMgaW50DQo+ICtwbWRfbXRyX21ldGVyX3BvbGljeV9jcmVhdGUoc3RydWN0IHJ0 ZV9ldGhfZGV2ICpkZXYsDQo+ICsJdWludDMyX3QgbWV0ZXJfcG9saWN5X2lkLA0KPiArCXN0cnVj dCBydGVfbXRyX21ldGVyX3BvbGljeV9wYXJhbXMgKnBvbGljeSwNCj4gKwlzdHJ1Y3QgcnRlX210 cl9lcnJvciAqZXJyb3IpDQo+ICt7DQo+ICsJc3RydWN0IHBtZF9pbnRlcm5hbHMgKnAgPSBkZXYt PmRhdGEtPmRldl9wcml2YXRlOw0KPiArCXN0cnVjdCBzb2Z0bmljX210cl9tZXRlcl9wb2xpY3lf bGlzdCAqbXBsID0gJnAtDQo+ID5tdHIubWV0ZXJfcG9saWNpZXM7DQo+ICsJc3RydWN0IHNvZnRu aWNfbXRyX21ldGVyX3BvbGljeSAqbXA7DQo+ICsJY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2FjdGlv biAqYWN0Ow0KPiArCWNvbnN0IHN0cnVjdCBydGVfZmxvd19hY3Rpb25fbWV0ZXJfY29sb3IgKnJl Y29sb3I7DQo+ICsJdWludDMyX3QgaTsNCj4gKw0KPiArCS8qIE1ldGVyIHBvbGljeSBJRCBtdXN0 IGJlIHZhbGlkLiAqLw0KPiArCWlmIChtZXRlcl9wb2xpY3lfaWQgPT0gVUlOVDMyX01BWCkNCj4g KwkJcmV0dXJuIC1ydGVfbXRyX2Vycm9yX3NldChlcnJvciwNCj4gKwkJCUVJTlZBTCwNCj4gKwkJ CVJURV9NVFJfRVJST1JfVFlQRV9NRVRFUl9QT0xJQ1lfSUQsDQo+ICsJCQlOVUxMLA0KPiArCQkJ Ik1ldGVyIHBvbGljeSBpZCBub3QgdmFsaWQiKTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBS VEVfQ09MT1JTOyBpKyspIHsNCj4gKwkJYWN0ID0gcG9saWN5LT5hY3Rpb25zW2ldOw0KPiArCQlp ZiAoYWN0ICYmIGFjdC0+dHlwZSAhPQ0KPiBSVEVfRkxPV19BQ1RJT05fVFlQRV9NRVRFUl9DT0xP UiAmJg0KPiArCQkJYWN0LT50eXBlICE9IFJURV9GTE9XX0FDVElPTl9UWVBFX0RST1ApDQo+ICsJ CQlyZXR1cm4gLXJ0ZV9tdHJfZXJyb3Jfc2V0KGVycm9yLA0KPiArCQkJCUVJTlZBTCwNCj4gKwkJ CQlSVEVfTVRSX0VSUk9SX1RZUEVfTUVURVJfUE9MSUNZLA0KPiArCQkJCU5VTEwsDQo+ICsJCQkJ IkFjdGlvbiBpbnZhbGlkIik7DQo+ICsJfQ0KPiArDQo+ICsJLyogTWVtb3J5IGFsbG9jYXRpb24g Ki8NCj4gKwltcCA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHNvZnRuaWNfbXRyX21ldGVyX3Bv bGljeSkpOw0KPiArCWlmIChtcCA9PSBOVUxMKQ0KPiArCQlyZXR1cm4gLXJ0ZV9tdHJfZXJyb3Jf c2V0KGVycm9yLA0KPiArCQkJRU5PTUVNLA0KPiArCQkJUlRFX01UUl9FUlJPUl9UWVBFX1VOU1BF Q0lGSUVELA0KPiArCQkJTlVMTCwNCj4gKwkJCSJNZW1vcnkgYWxsb2MgZmFpbGVkIik7DQo+ICsN Cj4gKwkvKiBGaWxsIGluICovDQo+ICsJbXAtPm1ldGVyX3BvbGljeV9pZCA9IG1ldGVyX3BvbGlj eV9pZDsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgUlRFX0NPTE9SUzsgaSsrKSB7DQo+ICsJCW1wLT5w b2xpY2VyW2ldID0gUlRFX1RBQkxFX0FDVElPTl9QT0xJQ0VSX0RST1A7DQo+ICsJCWFjdCA9IHBv bGljeS0+YWN0aW9uc1tpXTsNCj4gKwkJaWYgKCFhY3QpDQo+ICsJCQljb250aW51ZTsNCj4gKwkJ aWYgKGFjdC0+dHlwZSA9PSBSVEVfRkxPV19BQ1RJT05fVFlQRV9NRVRFUl9DT0xPUikgew0KPiAr CQkJcmVjb2xvciA9IGFjdC0+Y29uZjsNCj4gKwkJCXN3aXRjaCAocmVjb2xvci0+Y29sb3IpIHsN Cj4gKwkJCWNhc2UgUlRFX0NPTE9SX0dSRUVOOg0KPiArCQkJCW1wLT5wb2xpY2VyW2ldID0NCj4g Kw0KPiAJUlRFX1RBQkxFX0FDVElPTl9QT0xJQ0VSX0NPTE9SX0dSRUVOOw0KPiArCQkJCWJyZWFr Ow0KPiArCQkJY2FzZSBSVEVfQ09MT1JfWUVMTE9XOg0KPiArCQkJCW1wLT5wb2xpY2VyW2ldID0N Cj4gKw0KPiAJUlRFX1RBQkxFX0FDVElPTl9QT0xJQ0VSX0NPTE9SX1lFTExPVzsNCj4gKwkJCQli cmVhazsNCj4gKwkJCWNhc2UgUlRFX0NPTE9SX1JFRDoNCj4gKwkJCQltcC0+cG9saWNlcltpXSA9 DQo+ICsJCQkJUlRFX1RBQkxFX0FDVElPTl9QT0xJQ0VSX0NPTE9SX1JFRDsNCj4gKwkJCQlicmVh azsNCj4gKwkJCWRlZmF1bHQ6DQo+ICsJCQkJYnJlYWs7DQo+ICsJCQl9DQo+ICsJCX0NCj4gKwl9 DQo+ICsNCj4gKwkvKiBBZGQgdG8gbGlzdCAqLw0KPiArCVRBSUxRX0lOU0VSVF9UQUlMKG1wbCwg bXAsIG5vZGUpOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gKy8qIE1UUiBtZXRl ciBwb2xpY3kgZGVsZXRlICovDQo+ICtzdGF0aWMgaW50DQo+ICtwbWRfbXRyX21ldGVyX3BvbGlj eV9kZWxldGUoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYsDQo+ICsJdWludDMyX3QgbWV0ZXJfcG9s aWN5X2lkLA0KPiArCXN0cnVjdCBydGVfbXRyX2Vycm9yICplcnJvcikNCj4gK3sNCj4gKwlzdHJ1 Y3QgcG1kX2ludGVybmFscyAqcCA9IGRldi0+ZGF0YS0+ZGV2X3ByaXZhdGU7DQo+ICsJc3RydWN0 IHNvZnRuaWNfbXRyX21ldGVyX3BvbGljeSAqbXA7DQo+ICsNCj4gKwkvKiBNZXRlciBwb2xpY3kg bXVzdCBleGlzdCAqLw0KPiArCW1wID0gc29mdG5pY19tdHJfbWV0ZXJfcG9saWN5X2ZpbmQocCwg bWV0ZXJfcG9saWN5X2lkKTsNCj4gKwlpZiAobXAgPT0gTlVMTCkNCj4gKwkJcmV0dXJuIC1ydGVf bXRyX2Vycm9yX3NldChlcnJvciwNCj4gKwkJCUVJTlZBTCwNCj4gKwkJCVJURV9NVFJfRVJST1Jf VFlQRV9NRVRFUl9QT0xJQ1lfSUQsDQo+ICsJCQlOVUxMLA0KPiArCQkJIk1ldGVyIHBvbGljeSBp ZCBpbnZhbGlkIik7DQo+ICsNCj4gKwkvKiBDaGVjayB1bnVzZWQgKi8NCj4gKwlpZiAobXAtPm5f dXNlcnMpDQo+ICsJCXJldHVybiAtcnRlX210cl9lcnJvcl9zZXQoZXJyb3IsDQo+ICsJCQlFQlVT WSwNCj4gKwkJCVJURV9NVFJfRVJST1JfVFlQRV9NRVRFUl9QT0xJQ1lfSUQsDQo+ICsJCQlOVUxM LA0KPiArCQkJIk1ldGVyIHBvbGljeSBpbiB1c2UiKTsNCj4gKw0KPiArCS8qIFJlbW92ZSBmcm9t IGxpc3QgKi8NCj4gKwlUQUlMUV9SRU1PVkUoJnAtPm10ci5tZXRlcl9wb2xpY2llcywgbXAsIG5v ZGUpOw0KPiArCWZyZWUobXApOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gIHN0 cnVjdCBzb2Z0bmljX210ciAqDQo+ICBzb2Z0bmljX210cl9maW5kKHN0cnVjdCBwbWRfaW50ZXJu YWxzICpwLCB1aW50MzJfdCBtdHJfaWQpDQo+ICB7DQo+IEBAIC0yNjcsNiArMzY5LDcgQEAgcG1k X210cl9jcmVhdGUoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYsDQo+ICAJc3RydWN0IHBtZF9pbnRl cm5hbHMgKnAgPSBkZXYtPmRhdGEtPmRldl9wcml2YXRlOw0KPiAgCXN0cnVjdCBzb2Z0bmljX210 cl9saXN0ICptbCA9ICZwLT5tdHIubXRyczsNCj4gIAlzdHJ1Y3Qgc29mdG5pY19tdHJfbWV0ZXJf cHJvZmlsZSAqbXA7DQo+ICsJc3RydWN0IHNvZnRuaWNfbXRyX21ldGVyX3BvbGljeSAqcG9saWN5 Ow0KPiAgCXN0cnVjdCBzb2Z0bmljX210ciAqbTsNCj4gIAlpbnQgc3RhdHVzOw0KPiANCj4gQEAg LTI4NCw2ICszODcsMTYgQEAgcG1kX210cl9jcmVhdGUoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYs DQo+ICAJCQlOVUxMLA0KPiAgCQkJIk1ldGVyIHByb2ZpbGUgaWQgbm90IHZhbGlkIik7DQo+IA0K PiArCS8qIE1ldGVyIHBvbGljeSBtdXN0IGV4aXN0ICovDQo+ICsJcG9saWN5ID0gc29mdG5pY19t dHJfbWV0ZXJfcG9saWN5X2ZpbmQocCwgcGFyYW1zLQ0KPiA+bWV0ZXJfcG9saWN5X2lkKTsNCj4g KwlpZiAocG9saWN5ID09IE5VTEwpIHsNCj4gKwkJcmV0dXJuIC1ydGVfbXRyX2Vycm9yX3NldChl cnJvciwNCj4gKwkJCQlFSU5WQUwsDQo+ICsJCQkJUlRFX01UUl9FUlJPUl9UWVBFX01FVEVSX1BP TElDWV9JRCwNCj4gKwkJCQlOVUxMLA0KPiArCQkJCSJNZXRlciBwb2xpY3kgaWQgaW52YWxpZCIp Ow0KPiArCX0NCj4gKw0KPiAgCS8qIE1lbW9yeSBhbGxvY2F0aW9uICovDQo+ICAJbSA9IGNhbGxv YygxLCBzaXplb2Yoc3RydWN0IHNvZnRuaWNfbXRyKSk7DQo+ICAJaWYgKG0gPT0gTlVMTCkNCj4g QEAgLTMwMiw2ICs0MTUsNyBAQCBwbWRfbXRyX2NyZWF0ZShzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRl diwNCj4gDQo+ICAJLyogVXBkYXRlIGRlcGVuZGVuY2llcyAqLw0KPiAgCW1wLT5uX3VzZXJzKys7 DQo+ICsJcG9saWN5LT5uX3VzZXJzKys7DQo+IA0KPiAgCXJldHVybiAwOw0KPiAgfQ0KPiBAQCAt MzE2LDYgKzQzMCw3IEBAIHBtZF9tdHJfZGVzdHJveShzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldiwN Cj4gIAlzdHJ1Y3Qgc29mdG5pY19tdHJfbGlzdCAqbWwgPSAmcC0+bXRyLm10cnM7DQo+ICAJc3Ry dWN0IHNvZnRuaWNfbXRyX21ldGVyX3Byb2ZpbGUgKm1wOw0KPiAgCXN0cnVjdCBzb2Z0bmljX210 ciAqbTsNCj4gKwlzdHJ1Y3Qgc29mdG5pY19tdHJfbWV0ZXJfcG9saWN5ICpwb2xpY3k7DQo+IA0K PiAgCS8qIE1UUiBvYmplY3QgbXVzdCBleGlzdCAqLw0KPiAgCW0gPSBzb2Z0bmljX210cl9maW5k KHAsIG10cl9pZCk7DQo+IEBAIC0zNDMsOCArNDU4LDE4IEBAIHBtZF9tdHJfZGVzdHJveShzdHJ1 Y3QgcnRlX2V0aF9kZXYgKmRldiwNCj4gIAkJCU5VTEwsDQo+ICAJCQkiTVRSIG9iamVjdCBtZXRl ciBwcm9maWxlIGludmFsaWQiKTsNCj4gDQo+ICsJLyogTWV0ZXIgcG9saWN5IG11c3QgZXhpc3Qg Ki8NCj4gKwlwb2xpY3kgPSBzb2Z0bmljX210cl9tZXRlcl9wb2xpY3lfZmluZChwLCBtLQ0KPiA+ cGFyYW1zLm1ldGVyX3BvbGljeV9pZCk7DQo+ICsJaWYgKHBvbGljeSA9PSBOVUxMKQ0KPiArCQly ZXR1cm4gLXJ0ZV9tdHJfZXJyb3Jfc2V0KGVycm9yLA0KPiArCQkJRUlOVkFMLA0KPiArCQkJUlRF X01UUl9FUlJPUl9UWVBFX01FVEVSX1BPTElDWV9JRCwNCj4gKwkJCU5VTEwsDQo+ICsJCQkiTVRS IG9iamVjdCBtZXRlciBwb2xpY3kgaW52YWxpZCIpOw0KPiArDQo+ICAJLyogVXBkYXRlIGRlcGVu ZGVuY2llcyAqLw0KPiAgCW1wLT5uX3VzZXJzLS07DQo+ICsJcG9saWN5LT5uX3VzZXJzLS07DQo+ IA0KPiAgCS8qIFJlbW92ZSBmcm9tIGxpc3QgKi8NCj4gIAlUQUlMUV9SRU1PVkUobWwsIG0sIG5v ZGUpOw0KPiBAQCAtNTA2LDE4ICs2MzEsMTggQEAgcG1kX210cl9tZXRlcl9kc2NwX3RhYmxlX3Vw ZGF0ZShzdHJ1Y3QNCj4gcnRlX2V0aF9kZXYgKmRldiwNCj4gIAlyZXR1cm4gMDsNCj4gIH0NCj4g DQo+IC0vKiBNVFIgb2JqZWN0IHBvbGljZXIgYWN0aW9uIHVwZGF0ZSAqLw0KPiArLyogTVRSIG9i amVjdCBwb2xpY3kgdXBkYXRlICovDQo+ICBzdGF0aWMgaW50DQo+IC1wbWRfbXRyX3BvbGljZXJf YWN0aW9uc191cGRhdGUoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYsDQo+ICtwbWRfbXRyX21ldGVy X3BvbGljeV91cGRhdGUoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYsDQo+ICAJdWludDMyX3QgbXRy X2lkLA0KPiAtCXVpbnQzMl90IGFjdGlvbl9tYXNrLA0KPiAtCWVudW0gcnRlX210cl9wb2xpY2Vy X2FjdGlvbiAqYWN0aW9ucywNCj4gKwl1aW50MzJfdCBtZXRlcl9wb2xpY3lfaWQsDQo+ICAJc3Ry dWN0IHJ0ZV9tdHJfZXJyb3IgKmVycm9yKQ0KPiAgew0KPiAgCXN0cnVjdCBwbWRfaW50ZXJuYWxz ICpwID0gZGV2LT5kYXRhLT5kZXZfcHJpdmF0ZTsNCj4gIAlzdHJ1Y3Qgc29mdG5pY19tdHIgKm07 DQo+ICAJdWludDMyX3QgaTsNCj4gIAlpbnQgc3RhdHVzOw0KPiArCXN0cnVjdCBzb2Z0bmljX210 cl9tZXRlcl9wb2xpY3kgKm1wX25ldywgKm1wX29sZDsNCj4gDQo+ICAJLyogTVRSIG9iamVjdCBp ZCBtdXN0IGJlIHZhbGlkICovDQo+ICAJbSA9IHNvZnRuaWNfbXRyX2ZpbmQocCwgbXRyX2lkKTsN Cj4gQEAgLTUyNywyOSArNjUyLDE0IEBAIHBtZF9tdHJfcG9saWNlcl9hY3Rpb25zX3VwZGF0ZShz dHJ1Y3QNCj4gcnRlX2V0aF9kZXYgKmRldiwNCj4gIAkJCVJURV9NVFJfRVJST1JfVFlQRV9NVFJf SUQsDQo+ICAJCQlOVUxMLA0KPiAgCQkJIk1UUiBvYmplY3QgaWQgbm90IHZhbGlkIik7DQo+IC0N Cj4gLQkvKiBWYWxpZCBwb2xpY2VyIGFjdGlvbnMgKi8NCj4gLQlpZiAoYWN0aW9ucyA9PSBOVUxM KQ0KPiArCS8qIE1ldGVyIHBvbGljeSBtdXN0IGV4aXN0ICovDQo+ICsJbXBfbmV3ID0gc29mdG5p Y19tdHJfbWV0ZXJfcG9saWN5X2ZpbmQocCwgbWV0ZXJfcG9saWN5X2lkKTsNCj4gKwlpZiAobXBf bmV3ID09IE5VTEwpDQo+ICAJCXJldHVybiAtcnRlX210cl9lcnJvcl9zZXQoZXJyb3IsDQo+ICAJ CQlFSU5WQUwsDQo+IC0JCQlSVEVfTVRSX0VSUk9SX1RZUEVfVU5TUEVDSUZJRUQsDQo+ICsJCQlS VEVfTVRSX0VSUk9SX1RZUEVfTUVURVJfUE9MSUNZX0lELA0KPiAgCQkJTlVMTCwNCj4gLQkJCSJJ bnZhbGlkIGFjdGlvbnMiKTsNCj4gLQ0KPiAtCWZvciAoaSA9IDA7IGkgPCBSVEVfQ09MT1JTOyBp KyspIHsNCj4gLQkJaWYgKGFjdGlvbl9tYXNrICYgKDEgPDwgaSkpIHsNCj4gLQkJCWlmIChhY3Rp b25zW2ldICE9DQo+IE1UUl9QT0xJQ0VSX0FDVElPTl9DT0xPUl9HUkVFTiAgJiYNCj4gLQkJCQlh Y3Rpb25zW2ldICE9DQo+IE1UUl9QT0xJQ0VSX0FDVElPTl9DT0xPUl9ZRUxMT1cgJiYNCj4gLQkJ CQlhY3Rpb25zW2ldICE9DQo+IE1UUl9QT0xJQ0VSX0FDVElPTl9DT0xPUl9SRUQgJiYNCj4gLQkJ CQlhY3Rpb25zW2ldICE9IE1UUl9QT0xJQ0VSX0FDVElPTl9EUk9QKSB7DQo+IC0JCQkJcmV0dXJu IC1ydGVfbXRyX2Vycm9yX3NldChlcnJvciwNCj4gLQkJCQkJRUlOVkFMLA0KPiAtDQo+IAlSVEVf TVRSX0VSUk9SX1RZUEVfVU5TUEVDSUZJRUQsDQo+IC0JCQkJCU5VTEwsDQo+IC0JCQkJCSIgSW52 YWxpZCBhY3Rpb24gdmFsdWUiKTsNCj4gLQkJCX0NCj4gLQkJfQ0KPiAtCX0NCj4gKwkJCSJNZXRl ciBwb2xpY3kgaWQgaW52YWxpZCIpOw0KPiANCj4gIAkvKiBNVFIgb2JqZWN0IG93bmVyIHZhbGlk PyAqLw0KPiAgCWlmIChtLT5mbG93KSB7DQo+IEBAIC01NjEsOSArNjcxLDcgQEAgcG1kX210cl9w b2xpY2VyX2FjdGlvbnNfdXBkYXRlKHN0cnVjdA0KPiBydGVfZXRoX2RldiAqZGV2LA0KPiANCj4g IAkJLyogU2V0IGFjdGlvbiAqLw0KPiAgCQlmb3IgKGkgPSAwOyBpIDwgUlRFX0NPTE9SUzsgaSsr KQ0KPiAtCQkJaWYgKGFjdGlvbl9tYXNrICYgKDEgPDwgaSkpDQo+IC0JCQkJYWN0aW9uLm10ci5t dHJbMF0ucG9saWNlcltpXSA9DQo+IC0NCj4gCXNvZnRuaWNfdGFibGVfYWN0aW9uX3BvbGljZXIo YWN0aW9uc1tpXSk7DQo+ICsJCQlhY3Rpb24ubXRyLm10clswXS5wb2xpY2VyW2ldID0gbXBfbmV3 LT5wb2xpY2VyW2ldOw0KPiANCj4gIAkJLyogUmUtYWRkIHRoZSBydWxlICovDQo+ICAJCXN0YXR1 cyA9IHNvZnRuaWNfcGlwZWxpbmVfdGFibGVfcnVsZV9hZGQocCwNCj4gQEAgLTU4NywxMCArNjk1 LDIwIEBAIHBtZF9tdHJfcG9saWNlcl9hY3Rpb25zX3VwZGF0ZShzdHJ1Y3QNCj4gcnRlX2V0aF9k ZXYgKmRldiwNCj4gIAkJCTEsIE5VTEwsIDEpOw0KPiAgCX0NCj4gDQo+IC0JLyogTWV0ZXI6IFVw ZGF0ZSBwb2xpY2VyIGFjdGlvbnMgKi8NCj4gLQlmb3IgKGkgPSAwOyBpIDwgUlRFX0NPTE9SUzsg aSsrKQ0KPiAtCQlpZiAoYWN0aW9uX21hc2sgJiAoMSA8PCBpKSkNCj4gLQkJCW0tPnBhcmFtcy5h Y3Rpb25baV0gPSBhY3Rpb25zW2ldOw0KPiArCW1wX29sZCA9IHNvZnRuaWNfbXRyX21ldGVyX3Bv bGljeV9maW5kKHAsIG0tDQo+ID5wYXJhbXMubWV0ZXJfcG9saWN5X2lkKTsNCj4gKwlpZiAobXBf b2xkID09IE5VTEwpDQo+ICsJCXJldHVybiAtcnRlX210cl9lcnJvcl9zZXQoZXJyb3IsDQo+ICsJ CQlFSU5WQUwsDQo+ICsJCQlSVEVfTVRSX0VSUk9SX1RZUEVfTUVURVJfUE9MSUNZX0lELA0KPiAr CQkJTlVMTCwNCj4gKwkJCSJPbGQgbWV0ZXIgcG9saWN5IGlkIGludmFsaWQiKTsNCj4gKw0KPiAr CS8qIE1ldGVyOiBTZXQgbWV0ZXIgcHJvZmlsZSAqLw0KPiArCW0tPnBhcmFtcy5tZXRlcl9wb2xp Y3lfaWQgPSBtZXRlcl9wb2xpY3lfaWQ7DQo+ICsNCj4gKwkvKiBVcGRhdGUgZGVwZW5kZW5jaWVz Ki8NCj4gKwltcF9vbGQtPm5fdXNlcnMtLTsNCj4gKwltcF9uZXctPm5fdXNlcnMrKzsNCj4gDQo+ ICAJcmV0dXJuIDA7DQo+ICB9DQo+IEBAIC02MDcsMjggKzcyNSw0MCBAQCBwbWRfbXRyX3BvbGlj ZXJfYWN0aW9uc191cGRhdGUoc3RydWN0DQo+IHJ0ZV9ldGhfZGV2ICpkZXYsDQo+IA0KPiAgLyog TVRSIG9iamVjdCBzdGF0cyByZWFkICovDQo+ICBzdGF0aWMgdm9pZA0KPiAtbXRyX3N0YXRzX2Nv bnZlcnQoc3RydWN0IHNvZnRuaWNfbXRyICptLA0KPiArbXRyX3N0YXRzX2NvbnZlcnQoc3RydWN0 IHBtZF9pbnRlcm5hbHMgKnAsDQo+ICsJc3RydWN0IHNvZnRuaWNfbXRyICptLA0KPiAgCXN0cnVj dCBydGVfdGFibGVfYWN0aW9uX210cl9jb3VudGVyc190YyAqaW4sDQo+ICAJc3RydWN0IHJ0ZV9t dHJfc3RhdHMgKm91dCwNCj4gIAl1aW50NjRfdCAqb3V0X21hc2spDQo+ICB7DQo+ICsJc3RydWN0 IHNvZnRuaWNfbXRyX21ldGVyX3BvbGljeSAqbXA7DQo+ICsNCj4gIAltZW1zZXQoJm91dCwgMCwg c2l6ZW9mKG91dCkpOw0KPiAgCSpvdXRfbWFzayA9IDA7DQo+IA0KPiArCS8qIE1ldGVyIHBvbGlj eSBtdXN0IGV4aXN0ICovDQo+ICsJbXAgPSBzb2Z0bmljX210cl9tZXRlcl9wb2xpY3lfZmluZChw LCBtLQ0KPiA+cGFyYW1zLm1ldGVyX3BvbGljeV9pZCk7DQo+ICsJaWYgKG1wID09IE5VTEwpDQo+ ICsJCXJldHVybjsNCj4gKw0KPiAgCWlmIChpbi0+bl9wYWNrZXRzX3ZhbGlkKSB7DQo+ICAJCXVp bnQzMl90IGk7DQo+IA0KPiAgCQlmb3IgKGkgPSAwOyBpIDwgUlRFX0NPTE9SUzsgaSsrKSB7DQo+ IC0JCQlpZiAobS0+cGFyYW1zLmFjdGlvbltpXSA9PQ0KPiBNVFJfUE9MSUNFUl9BQ1RJT05fQ09M T1JfR1JFRU4pDQo+ICsJCQlpZiAobXAtPnBvbGljZXJbaV0gPT0NCj4gKw0KPiAJUlRFX1RBQkxF X0FDVElPTl9QT0xJQ0VSX0NPTE9SX0dSRUVOKQ0KPiAgCQkJCW91dC0+bl9wa3RzW1JURV9DT0xP Ul9HUkVFTl0gKz0gaW4tDQo+ID5uX3BhY2tldHNbaV07DQo+IA0KPiAtCQkJaWYgKG0tPnBhcmFt cy5hY3Rpb25baV0gPT0NCj4gTVRSX1BPTElDRVJfQUNUSU9OX0NPTE9SX1lFTExPVykNCj4gKwkJ CWlmIChtcC0+cG9saWNlcltpXSA9PQ0KPiArDQo+IAlSVEVfVEFCTEVfQUNUSU9OX1BPTElDRVJf Q09MT1JfWUVMTE9XKQ0KPiAgCQkJCW91dC0+bl9wa3RzW1JURV9DT0xPUl9ZRUxMT1ddICs9IGlu LQ0KPiA+bl9wYWNrZXRzW2ldOw0KPiANCj4gLQkJCWlmIChtLT5wYXJhbXMuYWN0aW9uW2ldID09 DQo+IE1UUl9QT0xJQ0VSX0FDVElPTl9DT0xPUl9SRUQpDQo+ICsJCQlpZiAobXAtPnBvbGljZXJb aV0gPT0NCj4gKwkJCQlSVEVfVEFCTEVfQUNUSU9OX1BPTElDRVJfQ09MT1JfUkVEKQ0KPiAgCQkJ CW91dC0+bl9wa3RzW1JURV9DT0xPUl9SRURdICs9IGluLQ0KPiA+bl9wYWNrZXRzW2ldOw0KPiAN Cj4gLQkJCWlmIChtLT5wYXJhbXMuYWN0aW9uW2ldID09DQo+IE1UUl9QT0xJQ0VSX0FDVElPTl9E Uk9QKQ0KPiArCQkJaWYgKG1wLT5wb2xpY2VyW2ldID09DQo+ICsJCQkJUlRFX1RBQkxFX0FDVElP Tl9QT0xJQ0VSX0RST1ApDQo+ICAJCQkJb3V0LT5uX3BrdHNfZHJvcHBlZCArPSBpbi0+bl9wYWNr ZXRzW2ldOw0KPiAgCQl9DQo+IA0KPiBAQCAtNjM5LDE2ICs3NjksMjAgQEAgbXRyX3N0YXRzX2Nv bnZlcnQoc3RydWN0IHNvZnRuaWNfbXRyICptLA0KPiAgCQl1aW50MzJfdCBpOw0KPiANCj4gIAkJ Zm9yIChpID0gMDsgaSA8IFJURV9DT0xPUlM7IGkrKykgew0KPiAtCQkJaWYgKG0tPnBhcmFtcy5h Y3Rpb25baV0gPT0NCj4gTVRSX1BPTElDRVJfQUNUSU9OX0NPTE9SX0dSRUVOKQ0KPiArCQkJaWYg KG1wLT5wb2xpY2VyW2ldID09DQo+ICsNCj4gCVJURV9UQUJMRV9BQ1RJT05fUE9MSUNFUl9DT0xP Ul9HUkVFTikNCj4gIAkJCQlvdXQtPm5fYnl0ZXNbUlRFX0NPTE9SX0dSRUVOXSArPSBpbi0NCj4g Pm5fYnl0ZXNbaV07DQo+IA0KPiAtCQkJaWYgKG0tPnBhcmFtcy5hY3Rpb25baV0gPT0NCj4gTVRS X1BPTElDRVJfQUNUSU9OX0NPTE9SX1lFTExPVykNCj4gKwkJCWlmIChtcC0+cG9saWNlcltpXSA9 PQ0KPiArDQo+IAlSVEVfVEFCTEVfQUNUSU9OX1BPTElDRVJfQ09MT1JfWUVMTE9XKQ0KPiAgCQkJ CW91dC0+bl9ieXRlc1tSVEVfQ09MT1JfWUVMTE9XXSArPSBpbi0NCj4gPm5fYnl0ZXNbaV07DQo+ IA0KPiAtCQkJaWYgKG0tPnBhcmFtcy5hY3Rpb25baV0gPT0NCj4gTVRSX1BPTElDRVJfQUNUSU9O X0NPTE9SX1JFRCkNCj4gKwkJCWlmIChtcC0+cG9saWNlcltpXSA9PQ0KPiArCQkJCVJURV9UQUJM RV9BQ1RJT05fUE9MSUNFUl9DT0xPUl9SRUQpDQo+ICAJCQkJb3V0LT5uX2J5dGVzW1JURV9DT0xP Ul9SRURdICs9IGluLQ0KPiA+bl9ieXRlc1tpXTsNCj4gDQo+IC0JCQlpZiAobS0+cGFyYW1zLmFj dGlvbltpXSA9PQ0KPiBNVFJfUE9MSUNFUl9BQ1RJT05fRFJPUCkNCj4gKwkJCWlmIChtcC0+cG9s aWNlcltpXSA9PQ0KPiArCQkJCVJURV9UQUJMRV9BQ1RJT05fUE9MSUNFUl9EUk9QKQ0KPiAgCQkJ CW91dC0+bl9ieXRlc19kcm9wcGVkICs9IGluLT5uX2J5dGVzW2ldOw0KPiAgCQl9DQo+IA0KPiBA QCAtNzE0LDcgKzg0OCw4IEBAIHBtZF9tdHJfc3RhdHNfcmVhZChzdHJ1Y3QgcnRlX2V0aF9kZXYg KmRldiwNCj4gIAkJc3RydWN0IHJ0ZV9tdHJfc3RhdHMgczsNCj4gIAkJdWludDY0X3Qgc19tYXNr ID0gMDsNCj4gDQo+IC0JCW10cl9zdGF0c19jb252ZXJ0KG0sDQo+ICsJCW10cl9zdGF0c19jb252 ZXJ0KHAsDQo+ICsJCQltLA0KPiAgCQkJJmNvdW50ZXJzLnN0YXRzWzBdLA0KPiAgCQkJJnMsDQo+ ICAJCQkmc19tYXNrKTsNCj4gQEAgLTczNSw2ICs4NzAsOSBAQCBjb25zdCBzdHJ1Y3QgcnRlX210 cl9vcHMgcG1kX210cl9vcHMgPSB7DQo+ICAJLm1ldGVyX3Byb2ZpbGVfYWRkID0gcG1kX210cl9t ZXRlcl9wcm9maWxlX2FkZCwNCj4gIAkubWV0ZXJfcHJvZmlsZV9kZWxldGUgPSBwbWRfbXRyX21l dGVyX3Byb2ZpbGVfZGVsZXRlLA0KPiANCj4gKwkubWV0ZXJfcG9saWN5X2NyZWF0ZSA9IHBtZF9t dHJfbWV0ZXJfcG9saWN5X2NyZWF0ZSwNCj4gKwkubWV0ZXJfcG9saWN5X2RlbGV0ZSA9IHBtZF9t dHJfbWV0ZXJfcG9saWN5X2RlbGV0ZSwNCj4gKw0KPiAgCS5jcmVhdGUgPSBwbWRfbXRyX2NyZWF0 ZSwNCj4gIAkuZGVzdHJveSA9IHBtZF9tdHJfZGVzdHJveSwNCj4gIAkubWV0ZXJfZW5hYmxlID0g TlVMTCwNCj4gQEAgLTc0Miw3ICs4ODAsNyBAQCBjb25zdCBzdHJ1Y3QgcnRlX210cl9vcHMgcG1k X210cl9vcHMgPSB7DQo+IA0KPiAgCS5tZXRlcl9wcm9maWxlX3VwZGF0ZSA9IHBtZF9tdHJfbWV0 ZXJfcHJvZmlsZV91cGRhdGUsDQo+ICAJLm1ldGVyX2RzY3BfdGFibGVfdXBkYXRlID0gcG1kX210 cl9tZXRlcl9kc2NwX3RhYmxlX3VwZGF0ZSwNCj4gLQkucG9saWNlcl9hY3Rpb25zX3VwZGF0ZSA9 IHBtZF9tdHJfcG9saWNlcl9hY3Rpb25zX3VwZGF0ZSwNCj4gKwkubWV0ZXJfcG9saWN5X3VwZGF0 ZSA9IHBtZF9tdHJfbWV0ZXJfcG9saWN5X3VwZGF0ZSwNCj4gIAkuc3RhdHNfdXBkYXRlID0gTlVM TCwNCj4gDQo+ICAJLnN0YXRzX3JlYWQgPSBwbWRfbXRyX3N0YXRzX3JlYWQsDQo+IGRpZmYgLS1n aXQgYS9saWIvbGlicnRlX2V0aGRldi9ydGVfZmxvdy5oIGIvbGliL2xpYnJ0ZV9ldGhkZXYvcnRl X2Zsb3cuaA0KPiBpbmRleCA2Y2M1NzEzNmFjLi5kNGZkMzZkZDBlIDEwMDY0NA0KPiAtLS0gYS9s aWIvbGlicnRlX2V0aGRldi9ydGVfZmxvdy5oDQo+ICsrKyBiL2xpYi9saWJydGVfZXRoZGV2L3J0 ZV9mbG93LmgNCj4gQEAgLTMyLDYgKzMyLDcgQEANCj4gICNpbmNsdWRlIDxydGVfZWNwcmkuaD4N Cj4gICNpbmNsdWRlIDxydGVfbWJ1Zi5oPg0KPiAgI2luY2x1ZGUgPHJ0ZV9tYnVmX2R5bi5oPg0K PiArI2luY2x1ZGUgPHJ0ZV9tZXRlci5oPg0KPiANCj4gICNpZmRlZiBfX2NwbHVzcGx1cw0KPiAg ZXh0ZXJuICJDIiB7DQo+IEBAIC0yMjY3LDYgKzIyNjgsMTQgQEAgZW51bSBydGVfZmxvd19hY3Rp b25fdHlwZSB7DQo+ICAJICogU2VlIHN0cnVjdCBydGVfZmxvd19hY3Rpb25fbW9kaWZ5X2ZpZWxk Lg0KPiAgCSAqLw0KPiAgCVJURV9GTE9XX0FDVElPTl9UWVBFX01PRElGWV9GSUVMRCwNCj4gKw0K PiArCS8qKg0KPiArCSAqIENvbG9yIHRoZSBwYWNrZXQgdG8gcmVmbGVjdCB0aGUgbWV0ZXIgY29s b3IgcmVzdWx0Lg0KPiArCSAqIFNldCB0aGUgbWV0ZXIgY29sb3IgaW4gdGhlIG1idWYgdG8gdGhl IHNlbGVjdGVkIGNvbG9yLg0KPiArCSAqDQo+ICsJICogU2VlIHN0cnVjdCBydGVfZmxvd19hY3Rp b25fbWV0ZXJfY29sb3IuDQo+ICsJICovDQo+ICsJUlRFX0ZMT1dfQUNUSU9OX1RZUEVfTUVURVJf Q09MT1IsDQo+ICB9Ow0KPiANCj4gIC8qKg0KPiBAQCAtMjg1OSw2ICsyODY4LDE5IEBAIHN0cnVj dCBydGVfZmxvd19hY3Rpb25fc2V0X2RzY3Agew0KPiAgICovDQo+ICBzdHJ1Y3QgcnRlX2Zsb3df c2hhcmVkX2FjdGlvbjsNCj4gDQo+ICsvKioNCj4gKyAqIEB3YXJuaW5nDQo+ICsgKiBAYiBFWFBF UklNRU5UQUw6IHRoaXMgc3RydWN0dXJlIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UN Cj4gKyAqDQo+ICsgKiBSVEVfRkxPV19BQ1RJT05fVFlQRV9NRVRFUl9DT0xPUg0KPiArICoNCj4g KyAqIFRoZSBtZXRlciBjb2xvciBzaG91bGQgYmUgc2V0IGluIHRoZSBwYWNrZXQgbWV0YS1kYXRh DQo+ICsgKiAoaS5lLiBzdHJ1Y3QgcnRlX21idWY6OnNjaGVkOjpjb2xvcikuDQo+ICsgKi8NCj4g K3N0cnVjdCBydGVfZmxvd19hY3Rpb25fbWV0ZXJfY29sb3Igew0KPiArCWVudW0gcnRlX2NvbG9y IGNvbG9yOyAvKio8IFBhY2tldCBjb2xvci4gKi8NCj4gK307DQo+ICsNCj4gIC8qKg0KPiAgICog RmllbGQgSURzIGZvciBNT0RJRllfRklFTEQgYWN0aW9uLg0KPiAgICovDQo+IGRpZmYgLS1naXQg YS9saWIvbGlicnRlX2V0aGRldi9ydGVfbXRyLmMgYi9saWIvbGlicnRlX2V0aGRldi9ydGVfbXRy LmMNCj4gaW5kZXggMzA3M2FjMDNmMi4uOWIwM2NmMWQ1MCAxMDA2NDQNCj4gLS0tIGEvbGliL2xp YnJ0ZV9ldGhkZXYvcnRlX210ci5jDQo+ICsrKyBiL2xpYi9saWJydGVfZXRoZGV2L3J0ZV9tdHIu Yw0KPiBAQCAtOTEsNiArOTEsNDAgQEAgcnRlX210cl9tZXRlcl9wcm9maWxlX2RlbGV0ZSh1aW50 MTZfdCBwb3J0X2lkLA0KPiAgCQltZXRlcl9wcm9maWxlX2lkLCBlcnJvcik7DQo+ICB9DQo+IA0K PiArLyogTVRSIG1ldGVyIHBvbGljeSB2YWxpZGF0ZSAqLw0KPiAraW50DQo+ICtydGVfbXRyX21l dGVyX3BvbGljeV92YWxpZGF0ZSh1aW50MTZfdCBwb3J0X2lkLA0KPiArCXN0cnVjdCBydGVfbXRy X21ldGVyX3BvbGljeV9wYXJhbXMgKnBvbGljeSwNCj4gKwlzdHJ1Y3QgcnRlX210cl9lcnJvciAq ZXJyb3IpDQo+ICt7DQo+ICsJc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYgPSAmcnRlX2V0aF9kZXZp Y2VzW3BvcnRfaWRdOw0KPiArCXJldHVybiBSVEVfTVRSX0ZVTkMocG9ydF9pZCwgbWV0ZXJfcG9s aWN5X3ZhbGlkYXRlKShkZXYsDQo+ICsJCXBvbGljeSwgZXJyb3IpOw0KPiArfQ0KPiArDQo+ICsv KiBNVFIgbWV0ZXIgcG9saWN5IGNyZWF0ZSAqLw0KPiAraW50DQo+ICtydGVfbXRyX21ldGVyX3Bv bGljeV9jcmVhdGUodWludDE2X3QgcG9ydF9pZCwNCj4gKwl1aW50MzJfdCBwb2xpY3lfaWQsDQo+ ICsJc3RydWN0IHJ0ZV9tdHJfbWV0ZXJfcG9saWN5X3BhcmFtcyAqcG9saWN5LA0KPiArCXN0cnVj dCBydGVfbXRyX2Vycm9yICplcnJvcikNCj4gK3sNCj4gKwlzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRl diA9ICZydGVfZXRoX2RldmljZXNbcG9ydF9pZF07DQo+ICsJcmV0dXJuIFJURV9NVFJfRlVOQyhw b3J0X2lkLCBtZXRlcl9wb2xpY3lfY3JlYXRlKShkZXYsDQo+ICsJCXBvbGljeV9pZCwgcG9saWN5 LCBlcnJvcik7DQo+ICt9DQo+ICsNCj4gKy8qKiBNVFIgbWV0ZXIgcG9saWN5IGRlbGV0ZSAqLw0K PiAraW50DQo+ICtydGVfbXRyX21ldGVyX3BvbGljeV9kZWxldGUodWludDE2X3QgcG9ydF9pZCwN Cj4gKwl1aW50MzJfdCBwb2xpY3lfaWQsDQo+ICsJc3RydWN0IHJ0ZV9tdHJfZXJyb3IgKmVycm9y KQ0KPiArew0KPiArCXN0cnVjdCBydGVfZXRoX2RldiAqZGV2ID0gJnJ0ZV9ldGhfZGV2aWNlc1tw b3J0X2lkXTsNCj4gKwlyZXR1cm4gUlRFX01UUl9GVU5DKHBvcnRfaWQsIG1ldGVyX3BvbGljeV9k ZWxldGUpKGRldiwNCj4gKwkJcG9saWN5X2lkLCBlcnJvcik7DQo+ICt9DQo+ICsNCj4gIC8qKiBN VFIgb2JqZWN0IGNyZWF0ZSAqLw0KPiAgaW50DQo+ICBydGVfbXRyX2NyZWF0ZSh1aW50MTZfdCBw b3J0X2lkLA0KPiBAQCAtMTQ5LDI5ICsxODMsMjggQEAgcnRlX210cl9tZXRlcl9wcm9maWxlX3Vw ZGF0ZSh1aW50MTZfdCBwb3J0X2lkLA0KPiAgCQltdHJfaWQsIG1ldGVyX3Byb2ZpbGVfaWQsIGVy cm9yKTsNCj4gIH0NCj4gDQo+IC0vKiogTVRSIG9iamVjdCBtZXRlciBEU0NQIHRhYmxlIHVwZGF0 ZSAqLw0KPiArLyoqIE1UUiBvYmplY3QgbWV0ZXIgcG9saWN5IHVwZGF0ZSAqLw0KPiAgaW50DQo+ IC1ydGVfbXRyX21ldGVyX2RzY3BfdGFibGVfdXBkYXRlKHVpbnQxNl90IHBvcnRfaWQsDQo+ICty dGVfbXRyX21ldGVyX3BvbGljeV91cGRhdGUodWludDE2X3QgcG9ydF9pZCwNCj4gIAl1aW50MzJf dCBtdHJfaWQsDQo+IC0JZW51bSBydGVfY29sb3IgKmRzY3BfdGFibGUsDQo+ICsJdWludDMyX3Qg bWV0ZXJfcG9saWN5X2lkLA0KPiAgCXN0cnVjdCBydGVfbXRyX2Vycm9yICplcnJvcikNCj4gIHsN Cj4gIAlzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldiA9ICZydGVfZXRoX2RldmljZXNbcG9ydF9pZF07 DQo+IC0JcmV0dXJuIFJURV9NVFJfRlVOQyhwb3J0X2lkLCBtZXRlcl9kc2NwX3RhYmxlX3VwZGF0 ZSkoZGV2LA0KPiAtCQltdHJfaWQsIGRzY3BfdGFibGUsIGVycm9yKTsNCj4gKwlyZXR1cm4gUlRF X01UUl9GVU5DKHBvcnRfaWQsIG1ldGVyX3BvbGljeV91cGRhdGUpKGRldiwNCj4gKwkJbXRyX2lk LCBtZXRlcl9wb2xpY3lfaWQsIGVycm9yKTsNCj4gIH0NCj4gDQo+IC0vKiogTVRSIG9iamVjdCBw b2xpY2VyIGFjdGlvbiB1cGRhdGUgKi8NCj4gKy8qKiBNVFIgb2JqZWN0IG1ldGVyIERTQ1AgdGFi bGUgdXBkYXRlICovDQo+ICBpbnQNCj4gLXJ0ZV9tdHJfcG9saWNlcl9hY3Rpb25zX3VwZGF0ZSh1 aW50MTZfdCBwb3J0X2lkLA0KPiArcnRlX210cl9tZXRlcl9kc2NwX3RhYmxlX3VwZGF0ZSh1aW50 MTZfdCBwb3J0X2lkLA0KPiAgCXVpbnQzMl90IG10cl9pZCwNCj4gLQl1aW50MzJfdCBhY3Rpb25f bWFzaywNCj4gLQllbnVtIHJ0ZV9tdHJfcG9saWNlcl9hY3Rpb24gKmFjdGlvbnMsDQo+ICsJZW51 bSBydGVfY29sb3IgKmRzY3BfdGFibGUsDQo+ICAJc3RydWN0IHJ0ZV9tdHJfZXJyb3IgKmVycm9y KQ0KPiAgew0KPiAgCXN0cnVjdCBydGVfZXRoX2RldiAqZGV2ID0gJnJ0ZV9ldGhfZGV2aWNlc1tw b3J0X2lkXTsNCj4gLQlyZXR1cm4gUlRFX01UUl9GVU5DKHBvcnRfaWQsIHBvbGljZXJfYWN0aW9u c191cGRhdGUpKGRldiwNCj4gLQkJbXRyX2lkLCBhY3Rpb25fbWFzaywgYWN0aW9ucywgZXJyb3Ip Ow0KPiArCXJldHVybiBSVEVfTVRSX0ZVTkMocG9ydF9pZCwgbWV0ZXJfZHNjcF90YWJsZV91cGRh dGUpKGRldiwNCj4gKwkJbXRyX2lkLCBkc2NwX3RhYmxlLCBlcnJvcik7DQo+ICB9DQo+IA0KPiAg LyoqIE1UUiBvYmplY3QgZW5hYmxlZCBzdGF0cyB1cGRhdGUgKi8NCj4gZGlmZiAtLWdpdCBhL2xp Yi9saWJydGVfZXRoZGV2L3J0ZV9tdHIuaCBiL2xpYi9saWJydGVfZXRoZGV2L3J0ZV9tdHIuaA0K PiBpbmRleCA5MTZhMDljNWMzLi45ZjZmNWUxYTQ1IDEwMDY0NA0KPiAtLS0gYS9saWIvbGlicnRl X2V0aGRldi9ydGVfbXRyLmgNCj4gKysrIGIvbGliL2xpYnJ0ZV9ldGhkZXYvcnRlX210ci5oDQo+ IEBAIC00OSw2ICs0OSw3IEBADQo+ICAjaW5jbHVkZSA8cnRlX2NvbXBhdC5oPg0KPiAgI2luY2x1 ZGUgPHJ0ZV9jb21tb24uaD4NCj4gICNpbmNsdWRlIDxydGVfbWV0ZXIuaD4NCj4gKyNpbmNsdWRl IDxydGVfZmxvdy5oPg0KPiANCj4gICNpZmRlZiBfX2NwbHVzcGx1cw0KPiAgZXh0ZXJuICJDIiB7 DQo+IEBAIC0xNzUsMjAgKzE3NiwxNiBAQCBzdHJ1Y3QgcnRlX210cl9tZXRlcl9wcm9maWxlIHsN Cj4gIH07DQo+IA0KPiAgLyoqDQo+IC0gKiBQb2xpY2VyIGFjdGlvbnMNCj4gKyAqIE1ldGVyIHBv bGljeQ0KPiAgICovDQo+IC1lbnVtIHJ0ZV9tdHJfcG9saWNlcl9hY3Rpb24gew0KPiAtCS8qKiBS ZWNvbG9yIHRoZSBwYWNrZXQgYXMgZ3JlZW4uICovDQo+IC0JTVRSX1BPTElDRVJfQUNUSU9OX0NP TE9SX0dSRUVOID0gMCwNCj4gLQ0KPiAtCS8qKiBSZWNvbG9yIHRoZSBwYWNrZXQgYXMgeWVsbG93 LiAqLw0KPiAtCU1UUl9QT0xJQ0VSX0FDVElPTl9DT0xPUl9ZRUxMT1csDQo+IC0NCj4gLQkvKiog UmVjb2xvciB0aGUgcGFja2V0IGFzIHJlZC4gKi8NCj4gLQlNVFJfUE9MSUNFUl9BQ1RJT05fQ09M T1JfUkVELA0KPiAtDQo+IC0JLyoqIERyb3AgdGhlIHBhY2tldC4gKi8NCj4gLQlNVFJfUE9MSUNF Ul9BQ1RJT05fRFJPUCwNCj4gK3N0cnVjdCBydGVfbXRyX21ldGVyX3BvbGljeV9wYXJhbXMgew0K PiArCS8qKg0KPiArCSAqIFBvbGljeSBhY3Rpb24gbGlzdCBwZXIgY29sb3IuDQo+ICsJICogYWN0 aW9uc1tpXSBwb3RlbnRpYWxseSByZXByZXNlbnRzIGEgY2hhaW4gb2YgcnRlX2Zsb3cgYWN0aW9u cw0KPiArCSAqIHRlcm1pbmF0ZWQgYnkgdGhlIEVORCBhY3Rpb24sIGV4YWN0bHkgYXMgc3BlY2lm aWVkIGJ5IHRoZSBydGVfZmxvdw0KPiArCSAqIEFQSSBmb3IgdGhlIGZsb3cgZGVmaW5pdGlvbiwg YW5kIG5vdCBqdXN0IGEgc2luZ2xlIGFjdGlvbi4NCj4gKwkgKi8NCj4gKwljb25zdCBzdHJ1Y3Qg cnRlX2Zsb3dfYWN0aW9uICphY3Rpb25zW1JURV9DT0xPUlNdOw0KPiAgfTsNCj4gDQo+ICAvKioN Cj4gQEAgLTIzMiwxMyArMjI5LDEzIEBAIHN0cnVjdCBydGVfbXRyX3BhcmFtcyB7DQo+ICAJICov DQo+ICAJaW50IG1ldGVyX2VuYWJsZTsNCj4gDQo+IC0JLyoqIFBvbGljZXIgYWN0aW9ucyAocGVy IG1ldGVyIG91dHB1dCBjb2xvcikuICovDQo+IC0JZW51bSBydGVfbXRyX3BvbGljZXJfYWN0aW9u IGFjdGlvbltSVEVfQ09MT1JTXTsNCj4gLQ0KPiAgCS8qKiBTZXQgb2Ygc3RhdHMgY291bnRlcnMg dG8gYmUgZW5hYmxlZC4NCj4gIAkgKiBAc2VlIGVudW0gcnRlX210cl9zdGF0c190eXBlDQo+ICAJ ICovDQo+ICAJdWludDY0X3Qgc3RhdHNfbWFzazsNCj4gKw0KPiArCS8qKiBNZXRlciBwb2xpY3kg SUQuICovDQo+ICsJdWludDMyX3QgbWV0ZXJfcG9saWN5X2lkOw0KPiAgfTsNCj4gDQo+ICAvKioN Cj4gQEAgLTMyNCw2ICszMjEsMTMgQEAgc3RydWN0IHJ0ZV9tdHJfY2FwYWJpbGl0aWVzIHsNCj4g IAkgKi8NCj4gIAl1aW50NjRfdCBtZXRlcl9yYXRlX21heDsNCj4gDQo+ICsJLyoqDQo+ICsJICog TWF4aW11bSBudW1iZXIgb2YgcG9saWN5IG9iamVjdHMgdGhhdCBjYW4gaGF2ZS4NCj4gKwkgKiBU aGUgdmFsdWUgb2YgMCBpcyBpbnZhbGlkLiBQb2xpY3kgbXVzdCBiZSBzdXBwb3J0ZWQgZm9yIG1l dGVyLg0KPiArCSAqIFRoZSBtYXhpbXVtIHZhbHVlIGlzICpuX21heCouDQo+ICsJICovDQo+ICsJ dWludDY0X3QgbWV0ZXJfcG9saWN5X25fbWF4Ow0KPiArDQo+ICAJLyoqDQo+ICAJICogV2hlbiBu b24temVybywgaXQgaW5kaWNhdGVzIHRoYXQgY29sb3IgYXdhcmUgbW9kZSBpcyBzdXBwb3J0ZWQN Cj4gZm9yDQo+ICAJICogdGhlIHNyVENNIFJGQyAyNjk3IG1ldGVyaW5nIGFsZ29yaXRobS4NCj4g QEAgLTM0MiwxOCArMzQ2LDYgQEAgc3RydWN0IHJ0ZV9tdHJfY2FwYWJpbGl0aWVzIHsNCj4gIAkg Ki8NCj4gIAlpbnQgY29sb3JfYXdhcmVfdHJ0Y21fcmZjNDExNV9zdXBwb3J0ZWQ7DQo+IA0KPiAt CS8qKiBXaGVuIG5vbi16ZXJvLCBpdCBpbmRpY2F0ZXMgdGhhdCB0aGUgcG9saWNlciBwYWNrZXQg cmVjb2xvcg0KPiBhY3Rpb25zDQo+IC0JICogYXJlIHN1cHBvcnRlZC4NCj4gLQkgKiBAc2VlIGVu dW0gcnRlX210cl9wb2xpY2VyX2FjdGlvbg0KPiAtCSAqLw0KPiAtCWludCBwb2xpY2VyX2FjdGlv bl9yZWNvbG9yX3N1cHBvcnRlZDsNCj4gLQ0KPiAtCS8qKiBXaGVuIG5vbi16ZXJvLCBpdCBpbmRp Y2F0ZXMgdGhhdCB0aGUgcG9saWNlciBwYWNrZXQgZHJvcCBhY3Rpb24gaXMNCj4gLQkgKiBzdXBw b3J0ZWQuDQo+IC0JICogQHNlZSBlbnVtIHJ0ZV9tdHJfcG9saWNlcl9hY3Rpb24NCj4gLQkgKi8N Cj4gLQlpbnQgcG9saWNlcl9hY3Rpb25fZHJvcF9zdXBwb3J0ZWQ7DQo+IC0NCj4gIAkvKiogU2V0 IG9mIHN1cHBvcnRlZCBzdGF0aXN0aWNzIGNvdW50ZXIgdHlwZXMuDQo+ICAJICogQHNlZSBlbnVt IHJ0ZV9tdHJfc3RhdHNfdHlwZQ0KPiAgCSAqLw0KPiBAQCAtMzc5LDYgKzM3MSw4IEBAIGVudW0g cnRlX210cl9lcnJvcl90eXBlIHsNCj4gIAlSVEVfTVRSX0VSUk9SX1RZUEVfU1RBVFNfTUFTSywN Cj4gIAlSVEVfTVRSX0VSUk9SX1RZUEVfU1RBVFMsDQo+ICAJUlRFX01UUl9FUlJPUl9UWVBFX1NI QVJFRCwNCj4gKwlSVEVfTVRSX0VSUk9SX1RZUEVfTUVURVJfUE9MSUNZX0lELA0KPiArCVJURV9N VFJfRVJST1JfVFlQRV9NRVRFUl9QT0xJQ1ksDQo+ICB9Ow0KPiANCj4gIC8qKg0KPiBAQCAtNDYy LDYgKzQ1NiwxMzYgQEAgcnRlX210cl9tZXRlcl9wcm9maWxlX2RlbGV0ZSh1aW50MTZfdCBwb3J0 X2lkLA0KPiAgCXVpbnQzMl90IG1ldGVyX3Byb2ZpbGVfaWQsDQo+ICAJc3RydWN0IHJ0ZV9tdHJf ZXJyb3IgKmVycm9yKTsNCj4gDQo+ICsvKioNCj4gKyAqIENoZWNrIHdoZXRoZXIgYSBtZXRlciBw b2xpY3kgY2FuIGJlIGNyZWF0ZWQgb24gYSBnaXZlbiBwb3J0Lg0KPiArICoNCj4gKyAqIFRoZSBt ZXRlciBwb2xpY3kgaXMgdmFsaWRhdGVkIGZvciBjb3JyZWN0bmVzcyBhbmQNCj4gKyAqIHdoZXRo ZXIgaXQgY291bGQgYmUgYWNjZXB0ZWQgYnkgdGhlIGRldmljZSBnaXZlbiBzdWZmaWNpZW50IHJl c291cmNlcy4NCj4gKyAqIFRoZSBwb2xpY3kgaXMgY2hlY2tlZCBhZ2FpbnN0IHRoZSBjdXJyZW50 IGNhcGFiaWxpdHkgaW5mb3JtYXRpb24NCj4gKyAqIG1ldGVyX3BvbGljeV9uX21heCBjb25maWd1 cmF0aW9uLg0KPiArICogVGhlIHBvbGljeSBtYXkgYWxzbyBvcHRpb25hbGx5IGJlIHZhbGlkYXRl ZCBhZ2FpbnN0IGV4aXN0aW5nDQo+ICsgKiBkZXZpY2UgcG9saWN5IHJlc291cmNlcy4NCj4gKyAq IFRoaXMgZnVuY3Rpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgdGFyZ2V0IGRldmljZS4NCj4gKyAq DQo+ICsgKiBAcGFyYW1baW5dIHBvcnRfaWQNCj4gKyAqICAgVGhlIHBvcnQgaWRlbnRpZmllciBv ZiB0aGUgRXRoZXJuZXQgZGV2aWNlLg0KPiArICogQHBhcmFtW2luXSBwb2xpY3kNCj4gKyAqICAg QXNzb2NpYXRlZCBhY3Rpb24gbGlzdCBwZXIgY29sb3IuDQo+ICsgKiAgIGxpc3QgTlVMTCBpcyBs ZWdhbCBhbmQgbWVhbnMgbm8gc3BlY2lhbCBhY3Rpb24uDQo+ICsgKiAgIChsaXN0IHRlcm1pbmF0 ZWQgYnkgdGhlIEVORCBhY3Rpb24pLg0KPiArICogQHBhcmFtW291dF0gZXJyb3INCj4gKyAqICAg RXJyb3IgZGV0YWlscy4gRmlsbGVkIGluIG9ubHkgb24gZXJyb3IsIHdoZW4gbm90IE5VTEwuDQo+ ICsgKiBAcmV0dXJuDQo+ICsgKiAgIDAgb24gc3VjY2Vzcywgbm9uLXplcm8gZXJyb3IgY29kZSBv dGhlcndpc2UuDQo+ICsgKi8NCj4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPiAraW50DQo+ICtydGVf bXRyX21ldGVyX3BvbGljeV92YWxpZGF0ZSh1aW50MTZfdCBwb3J0X2lkLA0KPiArCXN0cnVjdCBy dGVfbXRyX21ldGVyX3BvbGljeV9wYXJhbXMgKnBvbGljeSwNCj4gKwlzdHJ1Y3QgcnRlX210cl9l cnJvciAqZXJyb3IpOw0KPiArDQo+ICsvKioNCj4gKyAqIE1ldGVyIHBvbGljeSBhZGQNCj4gKyAq DQo+ICsgKiBDcmVhdGUgYSBuZXcgbWV0ZXIgcG9saWN5LiBUaGUgbmV3IHBvbGljeQ0KPiArICog aXMgdXNlZCB0byBjcmVhdGUgc2luZ2xlIG9yIG11bHRpcGxlIE1UUiBvYmplY3RzLg0KPiArICoN Cg0KTWF5YmUgdHdlYWsgdGhlIGV4cGxhbmF0aW9uIGEgYml0OiBUaGUgc2FtZSBwb2xpY3kgY2Fu IGJlIHVzZWQgdG8gY3JlYXRlIG11bHRpcGxlIE1UUiBvYmplY3RzLg0KDQo+ICsgKiBUd28gY29t bW9uIGV4YW1wbGVzIHRvIGRlZmluZSBtZXRlciBwb2xpY3kgYWN0aW9uIGxpc3Q6DQo+ICsgKiBF eGFtcGxlICMxOiBHUkVFTiAtIEdSRUVOLCBZRUxMT1cgLSBZRUxMT1csIFJFRCAtIFJFRA0KPiAr ICoJc3RydWN0IHJ0ZV9tdHJfbWV0ZXJfcG9saWN5X3BhcmFtcyBwb2xpY3lfMCA9DQo+ICsgKgkJ CQkJKHN0cnVjdA0KPiBydGVfbXRyX21ldGVyX3BvbGljeV9wYXJhbXMpIHsNCj4gKyAqCQkuYWN0 aW9uc1tSVEVfQ09MT1JfR1JFRU5dID0gKHN0cnVjdCBydGVfZmxvd19hY3Rpb25bXSkgew0KPiAr ICoJCQl7DQo+ICsgKgkJCQkudHlwZSA9DQo+IFJURV9GTE9XX0FDVElPTl9UWVBFX01FVEVSX0NP TE9SLA0KPiArICoJCQkJLmNvbmYgPSAmKHN0cnVjdA0KPiBydGVfZmxvd19hY3Rpb25fbWV0ZXJf Y29sb3IpIHsNCj4gKyAqCQkJCQkuY29sb3IgPSBSVEVfQ09MT1JfR1JFRU4sDQo+ICsgKgkJCQl9 LA0KPiArICoJCQl9LA0KPiArICoJCQl7DQo+ICsgKgkJCQkudHlwZSA9IFJURV9GTE9XX0FDVElP Tl9UWVBFX0VORCwNCj4gKyAqCQkJfSwNCj4gKyAqCQl9LA0KPiArICoJCS5hY3Rpb25zW1JURV9D T0xPUl9ZRUxMT1ddID0gKHN0cnVjdCBydGVfZmxvd19hY3Rpb25bXSkgew0KPiArICoJCQl7DQo+ ICsgKgkJCQkudHlwZSA9DQo+IFJURV9GTE9XX0FDVElPTl9UWVBFX01FVEVSX0NPTE9SLA0KPiAr ICoJCQkJLmNvbmYgPSAmKHN0cnVjdA0KPiBydGVfZmxvd19hY3Rpb25fbWV0ZXJfY29sb3IpIHsN Cj4gKyAqCQkJCQkuY29sb3IgPSBSVEVfQ09MT1JfWUVMTE9XLA0KPiArICoJCQkJfSwNCj4gKyAq CQkJfSwNCj4gKyAqCQkJew0KPiArICoJCQkudHlwZSA9IFJURV9GTE9XX0FDVElPTl9UWVBFX0VO RCwNCj4gKyAqCQkJfSwNCj4gKyAqCQl9LA0KPiArICoJCS5hY3Rpb25zW1JURV9DT0xPUl9SRURd ID0gKHN0cnVjdCBydGVfZmxvd19hY3Rpb25bXSkgew0KPiArICoJCQl7DQo+ICsgKgkJCQkudHlw ZSA9DQo+IFJURV9GTE9XX0FDVElPTl9UWVBFX01FVEVSX0NPTE9SLA0KPiArICoJCQkJLmNvbmYg PSAmKHN0cnVjdA0KPiBydGVfZmxvd19hY3Rpb25fbWV0ZXJfY29sb3IpIHsNCj4gKyAqCQkJCQku Y29sb3IgPSBSVEVfQ09MT1JfUkVELA0KPiArICoJCQkJfSwNCj4gKyAqCQkJfSwNCj4gKyAqCQkJ ew0KPiArICoJCQkJLnR5cGUgPSBSVEVfRkxPV19BQ1RJT05fVFlQRV9FTkQsDQo+ICsgKgkJCX0s DQo+ICsgKgkJfSwNCj4gKyAqCX07DQo+ICsgKg0KPiArICogRXhhbXBsZSAjMjogR1JFRU4gLSBE byBub3RoaW5nLCBZRUxMT1cgLSBEbyBub3RoaW5nLCBSRUQgLSBEUk9QDQo+ICsgKglzdHJ1Y3Qg cnRlX210cl9tZXRlcl9wb2xpY3lfcGFyYW1zIHBvbGljeV8xID0NCj4gKyAqCQkJCQkoc3RydWN0 DQo+IHJ0ZV9tdHJfbWV0ZXJfcG9saWN5X3BhcmFtcykgew0KPiArICoJCS5hY3Rpb25zW1JURV9D T0xPUl9HUkVFTl0gPSBOVUxMLA0KPiArICoJCS5hY3Rpb25zW1JURV9DT0xPUl9ZRUxMT1ddID0g TlVMTCwNCj4gKyAqCQkuYWN0aW9uc1tSVEVfQ09MT1JfUkVEXSA9IChzdHJ1Y3QgcnRlX2Zsb3df YWN0aW9uW10pIHsNCj4gKyAqCQkJew0KPiArICoJCQkJLnR5cGUgPSBSVEVfRkxPV19BQ1RJT05f VFlQRV9EUk9QLA0KPiArICoJCQl9LA0KPiArICoJCQl7DQo+ICsgKgkJCQkudHlwZSA9IFJURV9G TE9XX0FDVElPTl9UWVBFX0VORCwNCj4gKyAqCQkJfSwNCj4gKyAqCQl9LA0KPiArICoJfTsNCj4g KyAqDQoNClRoZXNlIHR3byBleGFtcGxlIHBvbGljaWVzIHNob3VsZCBiZSBhdmFpbGFibGUgdG8g YmUgdXNlZCBzdHJhaWdodCBhd2F5LCBwbGVhc2UgbWFrZSB0aGVtIHJlYWwgZGF0YSBzdHJ1Y3R1 cmVzLCBub3QgY29tbWVudHMuDQoNCkkgc3VnZ2VzdCB0aGVpciBuYW1lcyBhczogcGFzc19jb2xv cl9wb2xpY3lfcGFyYW1zIGFuZCBkcm9wX3JlZF9wb2xpY3lfcGFyYW1zLg0KDQo+ICsgKiBAcGFy YW1baW5dIHBvcnRfaWQNCj4gKyAqICAgVGhlIHBvcnQgaWRlbnRpZmllciBvZiB0aGUgRXRoZXJu ZXQgZGV2aWNlLg0KPiArICogQHBhcmFtW2luXSBwb2xpY3lfaWQNCj4gKyAqICAgUG9saWN5IGlk ZW50aWZpZXIgZm9yIHRoZSBuZXcgbWV0ZXIgcG9saWN5Lg0KPiArICogQHBhcmFtW2luXSBwb2xp Y3kNCj4gKyAqICAgQXNzb2NpYXRlZCBhY3Rpb25zIHBlciBjb2xvci4NCj4gKyAqICAgbGlzdCBO VUxMIGlzIGxlZ2FsIGFuZCBtZWFucyBubyBzcGVjaWFsIGFjdGlvbi4NCj4gKyAqICAgTm9uLU5V TEwgbGlzdCBtdXN0IGJlIHRlcm1pbmF0ZWQuDQo+ICsgKiAgIChsaXN0IHRlcm1pbmF0ZWQgYnkg dGhlIEVORCBhY3Rpb24pLg0KPiArICogQHBhcmFtW291dF0gZXJyb3INCj4gKyAqICAgRXJyb3Ig ZGV0YWlscy4gRmlsbGVkIGluIG9ubHkgb24gZXJyb3IsIHdoZW4gbm90IE5VTEwuDQo+ICsgKiBA cmV0dXJuDQo+ICsgKiAgIDAgb24gc3VjY2Vzcywgbm9uLXplcm8gZXJyb3IgY29kZSBvdGhlcndp c2UuDQo+ICsgKi8NCj4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPiAraW50DQo+ICtydGVfbXRyX21l dGVyX3BvbGljeV9jcmVhdGUodWludDE2X3QgcG9ydF9pZCwNCg0KVGhlIG5hbWUgb2YgdGhpcyBm dW5jdGlvbiBhdCB0aGUgdG9wIG9mIGl0cyBkZXNjcmlwdGlvbiBpcyBtZW50aW9uZWQgYXMgIm1l dGVyIHBvbGljeSBhZGQiLCB3aGlsZSB0aGlzIGZ1bmN0aW9uIG5hbWUgaGVyZSBpcyBwb2xpY3kg Y3JlYXRlLCBwbGVhc2UgYWxpZ24gdGhlIHR3by4NCg0KU2luY2Ugd2UgYWxyZWFkeSBoYXZlIG90 aGVyIEFQSSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIGZvciBwcm9maWxlcy9wb2xpY2llcyB3aXRo IHRoZSBuYW1pbmcgY29udmVudGlvbiBvZiBhZGQvZGVsZXRlIGFzIG9wcG9zZWQgdG8gY3JlYXRl L2Rlc3Ryb3kgKHJ0ZV9tdHJfbWV0ZXJfcHJvZmlsZV9hZGQgIGFuZCBydGVfbXRyX21ldGVyX3By b2ZpbGVfZGVsZXRlKSwgcGxlYXNlIGxldCdzIHVzZSB0aGUgZXhpc3RpbmcgY29udmVudGlvbiBh bmQgY2FsbCB0aGVzZSBvbmVzIHJ0ZV9tdHJfbWV0ZXJfcG9saWN5X2FkZCBhbmQgcnRlX210cl9t ZXRlcl9wb2xpY3lfZGVsZXRlLg0KDQo+ICsJdWludDMyX3QgcG9saWN5X2lkLA0KPiArCXN0cnVj dCBydGVfbXRyX21ldGVyX3BvbGljeV9wYXJhbXMgKnBvbGljeSwNCj4gKwlzdHJ1Y3QgcnRlX210 cl9lcnJvciAqZXJyb3IpOw0KPiArDQo+ICsvKioNCj4gKyAqIE1ldGVyIHBvbGljeSBkZWxldGUN Cj4gKyAqDQo+ICsgKiBEZWxldGUgYW4gZXhpc3RpbmcgbWV0ZXIgcG9saWN5LiBUaGlzIG9wZXJh dGlvbiBmYWlscyB3aGVuIHRoZXJlIGlzDQo+ICsgKiBjdXJyZW50bHkgYXQgbGVhc3Qgb25lIHVz ZXIgKGkuZS4gTVRSIG9iamVjdCkgb2YgdGhpcyBwb2xpY3kuDQo+ICsgKg0KPiArICogQHBhcmFt W2luXSBwb3J0X2lkDQo+ICsgKiAgIFRoZSBwb3J0IGlkZW50aWZpZXIgb2YgdGhlIEV0aGVybmV0 IGRldmljZS4NCj4gKyAqIEBwYXJhbVtpbl0gcG9saWN5X2lkDQo+ICsgKiAgIFBvbGljeSBpZGVu dGlmaWVyLg0KPiArICogQHBhcmFtW291dF0gZXJyb3INCj4gKyAqICAgRXJyb3IgZGV0YWlscy4g RmlsbGVkIGluIG9ubHkgb24gZXJyb3IsIHdoZW4gbm90IE5VTEwuDQo+ICsgKiBAcmV0dXJuDQo+ ICsgKiAgIDAgb24gc3VjY2Vzcywgbm9uLXplcm8gZXJyb3IgY29kZSBvdGhlcndpc2UuDQo+ICsg Ki8NCj4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPiAraW50DQo+ICtydGVfbXRyX21ldGVyX3BvbGlj eV9kZWxldGUodWludDE2X3QgcG9ydF9pZCwNCj4gKwl1aW50MzJfdCBwb2xpY3lfaWQsDQo+ICsJ c3RydWN0IHJ0ZV9tdHJfZXJyb3IgKmVycm9yKTsNCj4gKw0KPiAgLyoqDQo+ICAgKiBNVFIgb2Jq ZWN0IGNyZWF0ZQ0KPiAgICoNCj4gQEAgLTU4NywxOCArNzExLDE0IEBAIHJ0ZV9tdHJfbWV0ZXJf cHJvZmlsZV91cGRhdGUodWludDE2X3QgcG9ydF9pZCwNCj4gIAlzdHJ1Y3QgcnRlX210cl9lcnJv ciAqZXJyb3IpOw0KPiANCj4gIC8qKg0KPiAtICogTVRSIG9iamVjdCBEU0NQIHRhYmxlIHVwZGF0 ZQ0KPiArICogTVRSIG9iamVjdCBtZXRlciBwb2xpY3kgdXBkYXRlDQo+ICAgKg0KPiAgICogQHBh cmFtW2luXSBwb3J0X2lkDQo+ICAgKiAgIFRoZSBwb3J0IGlkZW50aWZpZXIgb2YgdGhlIEV0aGVy bmV0IGRldmljZS4NCj4gICAqIEBwYXJhbVtpbl0gbXRyX2lkDQo+ICAgKiAgIE1UUiBvYmplY3Qg SUQuIE5lZWRzIHRvIGJlIHZhbGlkLg0KPiAtICogQHBhcmFtW2luXSBkc2NwX3RhYmxlDQo+IC0g KiAgIFdoZW4gbm9uLU5VTEw6IGl0IHBvaW50cyB0byBhIHByZS1hbGxvY2F0ZWQgYW5kIHByZS1w b3B1bGF0ZWQgdGFibGUNCj4gd2l0aA0KPiAtICogICBleGFjdGx5IDY0IGVsZW1lbnRzIHByb3Zp ZGluZyB0aGUgaW5wdXQgY29sb3IgZm9yIGVhY2ggdmFsdWUgb2YgdGhlDQo+IC0gKiAgIElQdjQv SVB2NiBEaWZmZXJlbnRpYXRlZCBTZXJ2aWNlcyBDb2RlIFBvaW50IChEU0NQKSBpbnB1dCBwYWNr ZXQgZmllbGQuDQo+IC0gKiAgIFdoZW4gTlVMTDogaXQgaXMgZXF1aXZhbGVudCB0byBzZXR0aW5n IHRoaXMgcGFyYW1ldGVyIHRvIGFuIOKAnGFsbC1ncmVlbuKAnQ0KPiAtICogICBwb3B1bGF0ZWQg dGFibGUgKGkuZS4gdGFibGUgd2l0aCBhbGwgdGhlIDY0IGVsZW1lbnRzIHNldCB0byBncmVlbiBj b2xvcikuDQo+ICsgKiBAcGFyYW1baW5dIG1ldGVyX3BvbGljeV9pZA0KPiArICogICBNZXRlciBw b2xpY3kgSUQgZm9yIHRoZSBjdXJyZW50IE1UUiBvYmplY3QuIE5lZWRzIHRvIGJlIHZhbGlkLg0K PiAgICogQHBhcmFtW291dF0gZXJyb3INCj4gICAqICAgRXJyb3IgZGV0YWlscy4gRmlsbGVkIGlu IG9ubHkgb24gZXJyb3IsIHdoZW4gbm90IE5VTEwuDQo+ICAgKiBAcmV0dXJuDQo+IEBAIC02MDYs MjYgKzcyNiwyNCBAQCBydGVfbXRyX21ldGVyX3Byb2ZpbGVfdXBkYXRlKHVpbnQxNl90IHBvcnRf aWQsDQo+ICAgKi8NCj4gIF9fcnRlX2V4cGVyaW1lbnRhbA0KPiAgaW50DQo+IC1ydGVfbXRyX21l dGVyX2RzY3BfdGFibGVfdXBkYXRlKHVpbnQxNl90IHBvcnRfaWQsDQo+ICtydGVfbXRyX21ldGVy X3BvbGljeV91cGRhdGUodWludDE2X3QgcG9ydF9pZCwNCj4gIAl1aW50MzJfdCBtdHJfaWQsDQo+ IC0JZW51bSBydGVfY29sb3IgKmRzY3BfdGFibGUsDQo+ICsJdWludDMyX3QgbWV0ZXJfcG9saWN5 X2lkLA0KPiAgCXN0cnVjdCBydGVfbXRyX2Vycm9yICplcnJvcik7DQo+IA0KPiAgLyoqDQo+IC0g KiBNVFIgb2JqZWN0IHBvbGljZXIgYWN0aW9ucyB1cGRhdGUNCj4gKyAqIE1UUiBvYmplY3QgRFND UCB0YWJsZSB1cGRhdGUNCj4gICAqDQo+ICAgKiBAcGFyYW1baW5dIHBvcnRfaWQNCj4gICAqICAg VGhlIHBvcnQgaWRlbnRpZmllciBvZiB0aGUgRXRoZXJuZXQgZGV2aWNlLg0KPiAgICogQHBhcmFt W2luXSBtdHJfaWQNCj4gICAqICAgTVRSIG9iamVjdCBJRC4gTmVlZHMgdG8gYmUgdmFsaWQuDQo+ IC0gKiBAcGFyYW1baW5dIGFjdGlvbl9tYXNrDQo+IC0gKiAgIEJpdCBtYXNrIGluZGljYXRpbmcg d2hpY2ggcG9saWNlciBhY3Rpb25zIG5lZWQgdG8gYmUgdXBkYXRlZC4gT25lIG9yDQo+IG1vcmUN Cj4gLSAqICAgcG9saWNlciBhY3Rpb25zIGNhbiBiZSB1cGRhdGVkIGluIGEgc2luZ2xlIGZ1bmN0 aW9uIGludm9jYXRpb24uIFRvIHVwZGF0ZQ0KPiAtICogICB0aGUgcG9saWNlciBhY3Rpb24gYXNz b2NpYXRlZCB3aXRoIGNvbG9yIEMsIGJpdCAoMSA8PCBDKSBuZWVkcyB0byBiZSBzZXQgaW4NCj4g LSAqICAgKmFjdGlvbl9tYXNrKiBhbmQgZWxlbWVudCBhdCBwb3NpdGlvbiBDIGluIHRoZSAqYWN0 aW9ucyogYXJyYXkgbmVlZHMgdG8NCj4gYmUNCj4gLSAqICAgdmFsaWQuDQo+IC0gKiBAcGFyYW1b aW5dIGFjdGlvbnMNCj4gLSAqICAgUHJlLWFsbG9jYXRlZCBhbmQgcHJlLXBvcHVsYXRlZCBhcnJh eSBvZiBwb2xpY2VyIGFjdGlvbnMuDQo+ICsgKiBAcGFyYW1baW5dIGRzY3BfdGFibGUNCj4gKyAq ICAgV2hlbiBub24tTlVMTDogaXQgcG9pbnRzIHRvIGEgcHJlLWFsbG9jYXRlZCBhbmQgcHJlLXBv cHVsYXRlZCB0YWJsZQ0KPiB3aXRoDQo+ICsgKiAgIGV4YWN0bHkgNjQgZWxlbWVudHMgcHJvdmlk aW5nIHRoZSBpbnB1dCBjb2xvciBmb3IgZWFjaCB2YWx1ZSBvZiB0aGUNCj4gKyAqICAgSVB2NC9J UHY2IERpZmZlcmVudGlhdGVkIFNlcnZpY2VzIENvZGUgUG9pbnQgKERTQ1ApIGlucHV0IHBhY2tl dCBmaWVsZC4NCj4gKyAqICAgV2hlbiBOVUxMOiBpdCBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcg dGhpcyBwYXJhbWV0ZXIgdG8gYW4g4oCcYWxsLWdyZWVu4oCdDQo+ICsgKiAgIHBvcHVsYXRlZCB0 YWJsZSAoaS5lLiB0YWJsZSB3aXRoIGFsbCB0aGUgNjQgZWxlbWVudHMgc2V0IHRvIGdyZWVuIGNv bG9yKS4NCj4gICAqIEBwYXJhbVtvdXRdIGVycm9yDQo+ICAgKiAgIEVycm9yIGRldGFpbHMuIEZp bGxlZCBpbiBvbmx5IG9uIGVycm9yLCB3aGVuIG5vdCBOVUxMLg0KPiAgICogQHJldHVybg0KPiBA QCAtNjMzLDEwICs3NTEsOSBAQCBydGVfbXRyX21ldGVyX2RzY3BfdGFibGVfdXBkYXRlKHVpbnQx Nl90DQo+IHBvcnRfaWQsDQo+ICAgKi8NCj4gIF9fcnRlX2V4cGVyaW1lbnRhbA0KPiAgaW50DQo+ IC1ydGVfbXRyX3BvbGljZXJfYWN0aW9uc191cGRhdGUodWludDE2X3QgcG9ydF9pZCwNCj4gK3J0 ZV9tdHJfbWV0ZXJfZHNjcF90YWJsZV91cGRhdGUodWludDE2X3QgcG9ydF9pZCwNCj4gIAl1aW50 MzJfdCBtdHJfaWQsDQo+IC0JdWludDMyX3QgYWN0aW9uX21hc2ssDQo+IC0JZW51bSBydGVfbXRy X3BvbGljZXJfYWN0aW9uICphY3Rpb25zLA0KPiArCWVudW0gcnRlX2NvbG9yICpkc2NwX3RhYmxl LA0KPiAgCXN0cnVjdCBydGVfbXRyX2Vycm9yICplcnJvcik7DQo+IA0KPiAgLyoqDQo+IGRpZmYg LS1naXQgYS9saWIvbGlicnRlX2V0aGRldi9ydGVfbXRyX2RyaXZlci5oDQo+IGIvbGliL2xpYnJ0 ZV9ldGhkZXYvcnRlX210cl9kcml2ZXIuaA0KPiBpbmRleCBhMGRkYzJiNWY0Li40NjJhMWU4NjJj IDEwMDY0NA0KPiAtLS0gYS9saWIvbGlicnRlX2V0aGRldi9ydGVfbXRyX2RyaXZlci5oDQo+ICsr KyBiL2xpYi9saWJydGVfZXRoZGV2L3J0ZV9tdHJfZHJpdmVyLmgNCj4gQEAgLTQxLDYgKzQxLDIy IEBAIHR5cGVkZWYgaW50ICgqcnRlX210cl9tZXRlcl9wcm9maWxlX2RlbGV0ZV90KShzdHJ1Y3QN Cj4gcnRlX2V0aF9kZXYgKmRldiwNCj4gIAlzdHJ1Y3QgcnRlX210cl9lcnJvciAqZXJyb3IpOw0K PiAgLyoqPCBAaW50ZXJuYWwgTVRSIG1ldGVyIHByb2ZpbGUgZGVsZXRlICovDQo+IA0KPiArdHlw ZWRlZiBpbnQgKCpydGVfbXRyX21ldGVyX3BvbGljeV92YWxpZGF0ZV90KShzdHJ1Y3QgcnRlX2V0 aF9kZXYgKmRldiwNCj4gKwlzdHJ1Y3QgcnRlX210cl9tZXRlcl9wb2xpY3lfcGFyYW1zICpwb2xp Y3ksDQo+ICsJc3RydWN0IHJ0ZV9tdHJfZXJyb3IgKmVycm9yKTsNCj4gKy8qKjwgQGludGVybmFs IE1UUiBtZXRlciBwb2xpY3kgdmFsaWRhdGUgKi8NCj4gKw0KPiArdHlwZWRlZiBpbnQgKCpydGVf bXRyX21ldGVyX3BvbGljeV9jcmVhdGVfdCkoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYsDQo+ICsJ dWludDMyX3QgcG9saWN5X2lkLA0KPiArCXN0cnVjdCBydGVfbXRyX21ldGVyX3BvbGljeV9wYXJh bXMgKnBvbGljeSwNCj4gKwlzdHJ1Y3QgcnRlX210cl9lcnJvciAqZXJyb3IpOw0KPiArLyoqPCBA aW50ZXJuYWwgTVRSIG1ldGVyIHBvbGljeSBhZGQgKi8NCj4gKw0KPiArdHlwZWRlZiBpbnQgKCpy dGVfbXRyX21ldGVyX3BvbGljeV9kZWxldGVfdCkoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYsDQo+ ICsJdWludDMyX3QgcG9saWN5X2lkLA0KPiArCXN0cnVjdCBydGVfbXRyX2Vycm9yICplcnJvcik7 DQo+ICsvKio8IEBpbnRlcm5hbCBNVFIgbWV0ZXIgcG9saWN5IGRlbGV0ZSAqLw0KPiArDQo+ICB0 eXBlZGVmIGludCAoKnJ0ZV9tdHJfY3JlYXRlX3QpKHN0cnVjdCBydGVfZXRoX2RldiAqZGV2LA0K PiAgCXVpbnQzMl90IG10cl9pZCwNCj4gIAlzdHJ1Y3QgcnRlX210cl9wYXJhbXMgKnBhcmFtcywN Cj4gQEAgLTY5LDE4ICs4NSwxNyBAQCB0eXBlZGVmIGludA0KPiAoKnJ0ZV9tdHJfbWV0ZXJfcHJv ZmlsZV91cGRhdGVfdCkoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYsDQo+ICAJc3RydWN0IHJ0ZV9t dHJfZXJyb3IgKmVycm9yKTsNCj4gIC8qKjwgQGludGVybmFsIE1UUiBvYmplY3QgbWV0ZXIgcHJv ZmlsZSB1cGRhdGUgKi8NCj4gDQo+IC10eXBlZGVmIGludCAoKnJ0ZV9tdHJfbWV0ZXJfZHNjcF90 YWJsZV91cGRhdGVfdCkoc3RydWN0IHJ0ZV9ldGhfZGV2DQo+ICpkZXYsDQo+ICt0eXBlZGVmIGlu dCAoKnJ0ZV9tdHJfbWV0ZXJfcG9saWN5X3VwZGF0ZV90KShzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRl diwNCj4gIAl1aW50MzJfdCBtdHJfaWQsDQo+IC0JZW51bSBydGVfY29sb3IgKmRzY3BfdGFibGUs DQo+ICsJdWludDMyX3QgbWV0ZXJfcG9saWN5X2lkLA0KPiAgCXN0cnVjdCBydGVfbXRyX2Vycm9y ICplcnJvcik7DQo+IC0vKio8IEBpbnRlcm5hbCBNVFIgb2JqZWN0IG1ldGVyIERTQ1AgdGFibGUg dXBkYXRlICovDQo+ICsvKio8IEBpbnRlcm5hbCBNVFIgb2JqZWN0IG1ldGVyIHBvbGljeSB1cGRh dGUgKi8NCj4gDQo+IC10eXBlZGVmIGludCAoKnJ0ZV9tdHJfcG9saWNlcl9hY3Rpb25zX3VwZGF0 ZV90KShzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldiwNCj4gK3R5cGVkZWYgaW50ICgqcnRlX210cl9t ZXRlcl9kc2NwX3RhYmxlX3VwZGF0ZV90KShzdHJ1Y3QgcnRlX2V0aF9kZXYNCj4gKmRldiwNCj4g IAl1aW50MzJfdCBtdHJfaWQsDQo+IC0JdWludDMyX3QgYWN0aW9uX21hc2ssDQo+IC0JZW51bSBy dGVfbXRyX3BvbGljZXJfYWN0aW9uICphY3Rpb25zLA0KPiArCWVudW0gcnRlX2NvbG9yICpkc2Nw X3RhYmxlLA0KPiAgCXN0cnVjdCBydGVfbXRyX2Vycm9yICplcnJvcik7DQo+IC0vKio8IEBpbnRl cm5hbCBNVFIgb2JqZWN0IHBvbGljZXIgYWN0aW9uIHVwZGF0ZSovDQo+ICsvKio8IEBpbnRlcm5h bCBNVFIgb2JqZWN0IG1ldGVyIERTQ1AgdGFibGUgdXBkYXRlICovDQo+IA0KPiAgdHlwZWRlZiBp bnQgKCpydGVfbXRyX3N0YXRzX3VwZGF0ZV90KShzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldiwNCj4g IAl1aW50MzJfdCBtdHJfaWQsDQo+IEBAIC0xMjQsMTQgKzEzOSwyMyBAQCBzdHJ1Y3QgcnRlX210 cl9vcHMgew0KPiAgCS8qKiBNVFIgb2JqZWN0IG1ldGVyIERTQ1AgdGFibGUgdXBkYXRlICovDQo+ ICAJcnRlX210cl9tZXRlcl9kc2NwX3RhYmxlX3VwZGF0ZV90IG1ldGVyX2RzY3BfdGFibGVfdXBk YXRlOw0KPiANCj4gLQkvKiogTVRSIG9iamVjdCBwb2xpY2VyIGFjdGlvbiB1cGRhdGUgKi8NCj4g LQlydGVfbXRyX3BvbGljZXJfYWN0aW9uc191cGRhdGVfdCBwb2xpY2VyX2FjdGlvbnNfdXBkYXRl Ow0KPiAtDQo+ICAJLyoqIE1UUiBvYmplY3QgZW5hYmxlZCBzdGF0cyB1cGRhdGUgKi8NCj4gIAly dGVfbXRyX3N0YXRzX3VwZGF0ZV90IHN0YXRzX3VwZGF0ZTsNCj4gDQo+ICAJLyoqIE1UUiBvYmpl Y3Qgc3RhdHMgcmVhZCAqLw0KPiAgCXJ0ZV9tdHJfc3RhdHNfcmVhZF90IHN0YXRzX3JlYWQ7DQo+ ICsNCj4gKwkvKiogTVRSIG1ldGVyIHBvbGljeSB2YWxpZGF0ZSAqLw0KPiArCXJ0ZV9tdHJfbWV0 ZXJfcG9saWN5X3ZhbGlkYXRlX3QgbWV0ZXJfcG9saWN5X3ZhbGlkYXRlOw0KPiArDQo+ICsJLyoq IE1UUiBtZXRlciBwb2xpY3kgY3JlYXRlICovDQo+ICsJcnRlX210cl9tZXRlcl9wb2xpY3lfY3Jl YXRlX3QgbWV0ZXJfcG9saWN5X2NyZWF0ZTsNCj4gKw0KPiArCS8qKiBNVFIgbWV0ZXIgcG9saWN5 IGRlbGV0ZSAqLw0KPiArCXJ0ZV9tdHJfbWV0ZXJfcG9saWN5X2RlbGV0ZV90IG1ldGVyX3BvbGlj eV9kZWxldGU7DQo+ICsNCj4gKwkvKiogTVRSIG9iamVjdCBtZXRlciBwb2xpY3kgdXBkYXRlICov DQo+ICsJcnRlX210cl9tZXRlcl9wb2xpY3lfdXBkYXRlX3QgbWV0ZXJfcG9saWN5X3VwZGF0ZTsN Cj4gIH07DQo+IA0KPiAgLyoqDQo+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX2V0aGRldi92ZXJz aW9uLm1hcCBiL2xpYi9saWJydGVfZXRoZGV2L3ZlcnNpb24ubWFwDQo+IGluZGV4IDkzYWQzODhl OTYuLjAwNDViYWZmOGMgMTAwNjQ0DQo+IC0tLSBhL2xpYi9saWJydGVfZXRoZGV2L3ZlcnNpb24u bWFwDQo+ICsrKyBiL2xpYi9saWJydGVfZXRoZGV2L3ZlcnNpb24ubWFwDQo+IEBAIC0xMzgsNyAr MTM4LDYgQEAgRVhQRVJJTUVOVEFMIHsNCj4gIAlydGVfbXRyX21ldGVyX3Byb2ZpbGVfYWRkOw0K PiAgCXJ0ZV9tdHJfbWV0ZXJfcHJvZmlsZV9kZWxldGU7DQo+ICAJcnRlX210cl9tZXRlcl9wcm9m aWxlX3VwZGF0ZTsNCj4gLQlydGVfbXRyX3BvbGljZXJfYWN0aW9uc191cGRhdGU7DQo+ICAJcnRl X210cl9zdGF0c19yZWFkOw0KPiAgCXJ0ZV9tdHJfc3RhdHNfdXBkYXRlOw0KPiANCj4gQEAgLTI0 Niw2ICsyNDUsMTAgQEAgRVhQRVJJTUVOVEFMIHsNCj4gDQo+ICAJIyBhZGRlZCBpbiAyMS4wNQ0K PiAgCXJ0ZV9ldGhfcmVwcmVzZW50b3JfaW5mb19nZXQ7DQo+ICsJcnRlX210cl9tZXRlcl9wb2xp Y3lfY3JlYXRlOw0KPiArCXJ0ZV9tdHJfbWV0ZXJfcG9saWN5X2RlbGV0ZTsNCj4gKwlydGVfbXRy X21ldGVyX3BvbGljeV91cGRhdGU7DQo+ICsJcnRlX210cl9tZXRlcl9wb2xpY3lfdmFsaWRhdGU7 DQo+ICB9Ow0KPiANCj4gIElOVEVSTkFMIHsNCj4gLS0NCj4gMi4yNy4wDQoNClJlZ2FyZHMsDQpD cmlzdGlhbg0K