Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp1386745ybz; Wed, 22 Apr 2020 20:16:38 -0700 (PDT) X-Google-Smtp-Source: APiQypI9lf0AoIrBTMbzcSI9FijBmHhvcpd/+bEVN4XeNeHzx3ktivRsfuxbYhqENwuPAPjzyANE X-Received: by 2002:a17:906:548:: with SMTP id k8mr1002279eja.259.1587611798001; Wed, 22 Apr 2020 20:16:38 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1587611797; cv=pass; d=google.com; s=arc-20160816; b=TCoDF1L8eJTiO47Kfct2LLN3IUH7lXxtox+n1Rqa1gNYNjSWh3UazeJ0o/6j/cs8BX 4Ib1xHW4erL3VqRxfC0Z0HRjODcCT25yZky63Nie2zUthwBP6znYwcjoJ40bUUBG5hLt 3wvPRvaDQkvXiK/Gff4y9pEO8UPjr8MrEBahtwRmy4U6UE2z+ulJXAiKbJ3jkOEAe3x4 dj1ln7F6GEBOnhBg59djT3SjEJAjqM2RgHqJAyDTmgFgqrzGr2xmWezWHmb/qida0zO6 zqUOEU4mxLfpewJyBnacks71vpAdksOFzlBblfAVQVP8We3HoCjaPdy6OwtH+qXDJ7yu pYIQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from:dkim-signature; bh=Sob0KfxGeuk3McKrdEDT2gfhJ7dzN6FEjrQL17+PXEc=; b=OszZPo5NFeimWY2S3sdiD7n0gxu37/s1yF+UEZ4vcDdwId0ji/UrbFlyZ4h/iHDNc5 ilKL9cbwpnIcJoC1J4XV0ejnnLNW5c7gKIsFBIDFpulXlWg68g9L4NN9Q9EC96v3ZsbA 94dUGZ+u8NBsb1ov2D8jJ5kfGlIG3CT+IswOu8A5LGd0iVC3YMbDDjyFZVOeWsd3V6BE j8TjnCJAiElQUqmpX7RP+1TTsSCK0Q3E/aFbmZPBAiQ8rgmV8GgeY3xsSIYyPN88MXDt TWh1ZoSu6bflETfdPhRPrGygxFDedVzqM1C4qt38pPUqUTPLDTAZnARPM/s1lvSYq8x2 XVkA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b=BUYiwcCH; arc=pass (i=1 spf=pass spfdomain=nxp.com dkim=pass dkdomain=nxp.com dmarc=pass fromdomain=nxp.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id z1si511486edp.481.2020.04.22.20.16.14; Wed, 22 Apr 2020 20:16:37 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b=BUYiwcCH; arc=pass (i=1 spf=pass spfdomain=nxp.com dkim=pass dkdomain=nxp.com dmarc=pass fromdomain=nxp.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726695AbgDWDOO (ORCPT + 99 others); Wed, 22 Apr 2020 23:14:14 -0400 Received: from mail-eopbgr80070.outbound.protection.outlook.com ([40.107.8.70]:16099 "EHLO EUR04-VI1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726454AbgDWDON (ORCPT ); Wed, 22 Apr 2020 23:14:13 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PjJoBEDVyvdgZ3T5xmng3OsKgd8tbYCd9a6RirqWfmTYTj6U/eP86MWjgITzVSn2JDEqjVKwLaotvdzzZgPk47iuAj0dqYZqsygkOK4MYMCNap4rTwbk/lEkbn9AZaI7bVh50tUWuHCCx7n+3PL9oB9yOMXnghs2ovs5/IveI0oGdGt/LJlqZhW9c+SBPKXivZueEwyXz1DwjdLgUKH/3caxNHqkvqIUzoTDmo/rH17xKplJ2Arbp0PpxA7KHjUDAoTfHEHiY+a2eFDRBpR+bVvB86o05XVMhRJPw3btla+uKkx/1bC3bXZhMsocHMdXPiAQY8Fxh4mH4MfwqkP4Dg== 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=Sob0KfxGeuk3McKrdEDT2gfhJ7dzN6FEjrQL17+PXEc=; b=Gx3NBl1EJseduokZPLnGridU8vDnoye3ZWG1X2mvTGpCcXzAFGBHPmlvbw+jLuDRUFLHh1UBMrIkjgtvpICZ+ZSkTxuQHq4gegXtA2JLsizl8Lm2PwjanjmnQGwvVif5FiGc2U0GKB4FYX9z8jQS13iuKh8ua9LgO6VAQLC9VLkC+Z2eiwqjJTu9ukkGn8Blga3GOiae5YoAaFlWva8C0ptN6zeIdCP9ok9bo/9jOxQMmAXb9YKGhrOwMQWSZfOFUyhfd72t063isucTjgZiC2JWGIaw47yNFWRzr3MRe3GaDtBwhtZNs2Z/HaxAjrL+5PZeWEtecsh7mk0EfGZc+Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Sob0KfxGeuk3McKrdEDT2gfhJ7dzN6FEjrQL17+PXEc=; b=BUYiwcCHX05cW2di1JMf7OCi7Rgw3bXL6bUgKwRc0txnkX7xhd2qhJlw3AVrB/6O9vjO+UgvSBZoQ4mcedPkbFoCXA11dm5h8Rd220bx5U1vTatDu9pZ/4YkLFf1H/a0jMBi1uUnoNsTLo5SRuS5mxbnWq0ZrNXp3xAj400hAu0= Received: from VE1PR04MB6496.eurprd04.prod.outlook.com (2603:10a6:803:11c::29) by VE1PR04MB6495.eurprd04.prod.outlook.com (2603:10a6:803:11d::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2921.29; Thu, 23 Apr 2020 03:14:01 +0000 Received: from VE1PR04MB6496.eurprd04.prod.outlook.com ([fe80::1479:38ea:d4f7:a173]) by VE1PR04MB6496.eurprd04.prod.outlook.com ([fe80::1479:38ea:d4f7:a173%7]) with mapi id 15.20.2921.032; Thu, 23 Apr 2020 03:14:01 +0000 From: Po Liu To: Vlad Buslov CC: "davem@davemloft.net" , "linux-kernel@vger.kernel.org" , "netdev@vger.kernel.org" , "vinicius.gomes@intel.com" , Claudiu Manoil , Vladimir Oltean , Alexandru Marginean , "michael.chan@broadcom.com" , "vishal@chelsio.com" , "saeedm@mellanox.com" , "leon@kernel.org" , "jiri@mellanox.com" , "idosch@mellanox.com" , "alexandre.belloni@bootlin.com" , "UNGLinuxDriver@microchip.com" , "kuba@kernel.org" , "jhs@mojatatu.com" , "xiyou.wangcong@gmail.com" , "simon.horman@netronome.com" , "pablo@netfilter.org" , "moshe@mellanox.com" , "m-karicheri2@ti.com" , "andre.guedes@linux.intel.com" , "stephen@networkplumber.org" Subject: RE: [EXT] Re: [v3,net-next 1/4] net: qos: introduce a gate control flow action Thread-Topic: [EXT] Re: [v3,net-next 1/4] net: qos: introduce a gate control flow action Thread-Index: AQHWGFNl1uy1t0tlFE2NuiTq9Lz8sqiFIacAgADVg0A= Date: Thu, 23 Apr 2020 03:14:01 +0000 Message-ID: References: <20200418011211.31725-5-Po.Liu@nxp.com> <20200422024852.23224-1-Po.Liu@nxp.com> <20200422024852.23224-2-Po.Liu@nxp.com> <877dy7bqo7.fsf@buslov.dev> In-Reply-To: <877dy7bqo7.fsf@buslov.dev> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=po.liu@nxp.com; x-originating-ip: [221.221.133.215] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: e2540fbb-5586-4905-50cb-08d7e7345f0f x-ms-traffictypediagnostic: VE1PR04MB6495:|VE1PR04MB6495: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-forefront-prvs: 03827AF76E x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6496.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(10009020)(4636009)(366004)(396003)(376002)(39860400002)(136003)(346002)(8936002)(478600001)(33656002)(53546011)(6506007)(7696005)(44832011)(186003)(26005)(81156014)(6916009)(8676002)(5660300002)(2906002)(7416002)(4326008)(71200400001)(316002)(86362001)(9686003)(30864003)(55016002)(54906003)(66556008)(64756008)(66446008)(76116006)(66476007)(66946007)(52536014)(559001)(579004);DIR:OUT;SFP:1101; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: inxQdF52VQ8BqX8VtiiEckMQdw3pF94XwDdyrAs/XzXDmgYd824cqQY4x/dGXB7A4KSwgG56Kj2zZAxHdgNPEj9Ptsj6JYZCizmJDA5vZXzGy6KlIAp7PCSG/JjuaAb57rfRzI+c+fJC391L5g8E4KK9DrmGuA/OTGgL5fwZVd8MHo29F0Na4JpKZtdl61rspTCJCbhHOr8eFIw3Lhk+s1WZDBNt+javRIdIBJ7StjPqPMARgx0AISdDuShOSLhRefVtmxkCQgBJBGY1I4R36cMtmRjDAxLEsK0XwoRRbuak4+i8cc51pl3CTbRY23Lb7xGE0ZeNpsMTCxrhcglP2TDjVZzZScAJWhR2g6tNMbqhXH/6Ky52GLZb5GAKxP/XfYXWxzoeC4ggI0hhX8/8dGtw87Fx4Z+kzibY0yHFS/K1yCXS5CcDc9773hK1eY9i x-ms-exchange-antispam-messagedata: +sXwLpoTW1wAgtSQOy4rHjeksTONMsAXiTJyzXA6aHcI8k1vsPi4X2LDRQMZAppWxlsiLaZHPBBws+B2Pd6TpKp88wAHAADGdDecxEh41d29SVS4AHBHfOR2fwnjDu38T+oOITHl7zfeH6s2whz1IA== Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: e2540fbb-5586-4905-50cb-08d7e7345f0f X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Apr 2020 03:14:01.3360 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: VxqaaXmMOuivt166K1+y4wm4lkZCyosVz28GoB5qZO1aPQWnXfIOcPZ/V51pCIul X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR04MB6495 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgVmxhZCBCdXNsb3YsDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTog VmxhZCBCdXNsb3YgPHZsYWRAYnVzbG92LmRldj4NCj4gU2VudDogMjAyMMTqNNTCMjLI1SAyMToy Mw0KPiBUbzogUG8gTGl1IDxwby5saXVAbnhwLmNvbT4NCj4gQ2M6IGRhdmVtQGRhdmVtbG9mdC5u ZXQ7IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7DQo+IG5ldGRldkB2Z2VyLmtlcm5lbC5v cmc7IHZpbmljaXVzLmdvbWVzQGludGVsLmNvbTsgQ2xhdWRpdSBNYW5vaWwNCj4gPGNsYXVkaXUu bWFub2lsQG54cC5jb20+OyBWbGFkaW1pciBPbHRlYW4gPHZsYWRpbWlyLm9sdGVhbkBueHAuY29t PjsNCj4gQWxleGFuZHJ1IE1hcmdpbmVhbiA8YWxleGFuZHJ1Lm1hcmdpbmVhbkBueHAuY29tPjsN Cj4gbWljaGFlbC5jaGFuQGJyb2FkY29tLmNvbTsgdmlzaGFsQGNoZWxzaW8uY29tOw0KPiBzYWVl ZG1AbWVsbGFub3guY29tOyBsZW9uQGtlcm5lbC5vcmc7IGppcmlAbWVsbGFub3guY29tOw0KPiBp ZG9zY2hAbWVsbGFub3guY29tOyBhbGV4YW5kcmUuYmVsbG9uaUBib290bGluLmNvbTsNCj4gVU5H TGludXhEcml2ZXJAbWljcm9jaGlwLmNvbTsga3ViYUBrZXJuZWwub3JnOyBqaHNAbW9qYXRhdHUu Y29tOw0KPiB4aXlvdS53YW5nY29uZ0BnbWFpbC5jb207IHNpbW9uLmhvcm1hbkBuZXRyb25vbWUu Y29tOw0KPiBwYWJsb0BuZXRmaWx0ZXIub3JnOyBtb3NoZUBtZWxsYW5veC5jb207IG0ta2FyaWNo ZXJpMkB0aS5jb207DQo+IGFuZHJlLmd1ZWRlc0BsaW51eC5pbnRlbC5jb207IHN0ZXBoZW5AbmV0 d29ya3BsdW1iZXIub3JnDQo+IFN1YmplY3Q6IFtFWFRdIFJlOiBbdjMsbmV0LW5leHQgMS80XSBu ZXQ6IHFvczogaW50cm9kdWNlIGEgZ2F0ZSBjb250cm9sIGZsb3cNCj4gYWN0aW9uDQo+IA0KPiBD YXV0aW9uOiBFWFQgRW1haWwNCj4gDQo+IEhpIFBvLA0KPiANCj4gT24gV2VkIDIyIEFwciAyMDIw IGF0IDA1OjQ4LCBQbyBMaXUgPFBvLkxpdUBueHAuY29tPiB3cm90ZToNCj4gPiBJbnRyb2R1Y2Ug YSBpbmdyZXNzIGZyYW1lIGdhdGUgY29udHJvbCBmbG93IGFjdGlvbi4NCj4gPiBUYyBnYXRlIGFj dGlvbiBkb2VzIHRoZSB3b3JrIGxpa2UgdGhpczoNCj4gPiBBc3N1bWUgdGhlcmUgaXMgYSBnYXRl IGFsbG93IHNwZWNpZmllZCBpbmdyZXNzIGZyYW1lcyBjYW4gYmUgcGFzc2VkIGF0DQo+ID4gc3Bl Y2lmaWMgdGltZSBzbG90LCBhbmQgYmUgZHJvcHBlZCBhdCBzcGVjaWZpYyB0aW1lIHNsb3QuIFRj IGZpbHRlcg0KPiA+IGNob29zZXMgdGhlIGluZ3Jlc3MgZnJhbWVzLCBhbmQgdGMgZ2F0ZSBhY3Rp b24gd291bGQgc3BlY2lmeSB3aGF0IHNsb3QNCj4gPiBkb2VzIHRoZXNlIGZyYW1lcyBjYW4gYmUg cGFzc2VkIHRvIGRldmljZSBhbmQgd2hhdCB0aW1lIHNsb3Qgd291bGQgYmUNCj4gPiBkcm9wcGVk Lg0KPiA+IFRjIGdhdGUgYWN0aW9uIHdvdWxkIHByb3ZpZGUgYW4gZW50cnkgbGlzdCB0byB0ZWxs IGhvdyBtdWNoIHRpbWUgZ2F0ZQ0KPiA+IGtlZXAgb3BlbiBhbmQgaG93IG11Y2ggdGltZSBnYXRl IGtlZXAgc3RhdGUgY2xvc2UuIEdhdGUgYWN0aW9uIGFsc28NCj4gPiBhc3NpZ24gYSBzdGFydCB0 aW1lIHRvIHRlbGwgd2hlbiB0aGUgZW50cnkgbGlzdCBzdGFydC4gVGhlbiBkcml2ZXINCj4gPiB3 b3VsZCByZXBlYXQgdGhlIGdhdGUgZW50cnkgbGlzdCBjeWNsaWNhbGx5Lg0KPiA+IEZvciB0aGUg c29mdHdhcmUgc2ltdWxhdGlvbiwgZ2F0ZSBhY3Rpb24gcmVxdWlyZXMgdGhlIHVzZXIgYXNzaWdu IGENCj4gPiB0aW1lIGNsb2NrIHR5cGUuDQo+ID4NCj4gPiBCZWxvdyBpcyB0aGUgc2V0dGluZyBl eGFtcGxlIGluIHVzZXIgc3BhY2UuIFRjIGZpbHRlciBhIHN0cmVhbSBzb3VyY2UNCj4gPiBpcCBh ZGRyZXNzIGlzIDE5Mi4xNjguMC4yMCBhbmQgZ2F0ZSBhY3Rpb24gb3duIHR3byB0aW1lIHNsb3Rz LiBPbmUgaXMNCj4gPiBsYXN0IDIwMG1zIGdhdGUgb3BlbiBsZXQgZnJhbWUgcGFzcyBhbm90aGVy IGlzIGxhc3QgMTAwbXMgZ2F0ZSBjbG9zZQ0KPiA+IGxldCBmcmFtZXMgZHJvcHBlZC4gV2hlbiB0 aGUgZnJhbWVzIGhhdmUgcGFzc2VkIHRvdGFsIGZyYW1lcyBvdmVyDQo+ID4gODAwMDAwMCBieXRl cywgZnJhbWVzIHdpbGwgYmUgZHJvcHBlZCBpbiBvbmUgMjAwMDAwMDAwbnMgdGltZSBzbG90Lg0K PiA+DQo+ID4+IHRjIHFkaXNjIGFkZCBkZXYgZXRoMCBpbmdyZXNzDQo+ID4NCj4gPj4gdGMgZmls dGVyIGFkZCBkZXYgZXRoMCBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgXA0KPiA+ICAgICAgICAg IGZsb3dlciBzcmNfaXAgMTkyLjE2OC4wLjIwIFwNCj4gPiAgICAgICAgICBhY3Rpb24gZ2F0ZSBp bmRleCAyIGNsb2NraWQgQ0xPQ0tfVEFJIFwNCj4gPiAgICAgICAgICBzY2hlZC1lbnRyeSBvcGVu IDIwMDAwMDAwMCAtMSA4MDAwMDAwIFwNCj4gPiAgICAgICAgICBzY2hlZC1lbnRyeSBjbG9zZSAx MDAwMDAwMDAgLTEgLTENCj4gPg0KPiA+PiB0YyBjaGFpbiBkZWwgZGV2IGV0aDAgaW5ncmVzcyBj aGFpbiAwDQo+ID4NCj4gPiAic2NoZWQtZW50cnkiIGZvbGxvdyB0aGUgbmFtZSB0YXByaW8gc3R5 bGUuIEdhdGUgc3RhdGUgaXMNCj4gPiAib3BlbiIvImNsb3NlIi4gRm9sbG93IHdpdGggcGVyaW9k IG5hbm9zZWNvbmQuIFRoZW4gbmV4dCBpdGVtIGlzDQo+ID4gaW50ZXJuYWwgcHJpb3JpdHkgdmFs dWUgbWVhbnMgd2hpY2ggaW5ncmVzcyBxdWV1ZSBzaG91bGQgcHV0LiAiLTEiDQo+ID4gbWVhbnMg d2lsZGNhcmQuIFRoZSBsYXN0IHZhbHVlIG9wdGlvbmFsIHNwZWNpZmllcyB0aGUgbWF4aW11bSBu dW1iZXINCj4gPiBvZiBNU0RVIG9jdGV0cyB0aGF0IGFyZSBwZXJtaXR0ZWQgdG8gcGFzcyB0aGUg Z2F0ZSBkdXJpbmcgdGhlDQo+ID4gc3BlY2lmaWVkIHRpbWUgaW50ZXJ2YWwuDQo+ID4gQmFzZS10 aW1lIGlzIG5vdCBzZXQgd2lsbCBiZSAwIGFzIGRlZmF1bHQsIGFzIHJlc3VsdCBzdGFydCB0aW1l IHdvdWxkDQo+ID4gYmUgKChOICsgMSkgKiBjeWNsZXRpbWUpIHdoaWNoIGlzIHRoZSBtaW5pbWFs IG9mIGZ1dHVyZSB0aW1lLg0KPiA+DQo+ID4gQmVsb3cgZXhhbXBsZSBzaG93cyBmaWx0ZXJpbmcg YSBzdHJlYW0gd2l0aCBkZXN0aW5hdGlvbiBtYWMgYWRkcmVzcyBpcw0KPiA+IDEwOjAwOjgwOjAw OjAwOjAwIGFuZCBpcCB0eXBlIGlzIElDTVAsIGZvbGxvdyB0aGUgYWN0aW9uIGdhdGUuIFRoZQ0K PiA+IGdhdGUgYWN0aW9uIHdvdWxkIHJ1biB3aXRoIG9uZSBjbG9zZSB0aW1lIHNsb3Qgd2hpY2gg bWVhbnMgYWx3YXlzIGtlZXANCj4gY2xvc2UuDQo+ID4gVGhlIHRpbWUgY3ljbGUgaXMgdG90YWwg MjAwMDAwMDAwbnMuIFRoZSBiYXNlLXRpbWUgd291bGQgY2FsY3VsYXRlIGJ5Og0KPiA+DQo+ID4g IDEzNTcwMDAwMDAwMDAgKyAoTiArIDEpICogY3ljbGV0aW1lDQo+ID4NCj4gPiBXaGVuIHRoZSB0 b3RhbCB2YWx1ZSBpcyB0aGUgZnV0dXJlIHRpbWUsIGl0IHdpbGwgYmUgdGhlIHN0YXJ0IHRpbWUu DQo+ID4gVGhlIGN5Y2xldGltZSBoZXJlIHdvdWxkIGJlIDIwMDAwMDAwMG5zIGZvciB0aGlzIGNh c2UuDQo+ID4NCj4gPj4gdGMgZmlsdGVyIGFkZCBkZXYgZXRoMCBwYXJlbnQgZmZmZjogIHByb3Rv Y29sIGlwIFwNCj4gPiAgICAgICAgICBmbG93ZXIgc2tpcF9odyBpcF9wcm90byBpY21wIGRzdF9t YWMgMTA6MDA6ODA6MDA6MDA6MDAgXA0KPiA+ICAgICAgICAgIGFjdGlvbiBnYXRlIGluZGV4IDEy IGJhc2UtdGltZSAxMzU3MDAwMDAwMDAwIFwNCj4gPiAgICAgICAgICBzY2hlZC1lbnRyeSBjbG9z ZSAyMDAwMDAwMDAgLTEgLTEgXA0KPiA+ICAgICAgICAgIGNsb2NraWQgQ0xPQ0tfVEFJDQo+ID4N Cj4gPiBTaWduZWQtb2ZmLWJ5OiBQbyBMaXUgPFBvLkxpdUBueHAuY29tPg0KPiA+IC0tLQ0KPiA+ ICBpbmNsdWRlL25ldC90Y19hY3QvdGNfZ2F0ZS5oICAgICAgICB8ICA1NCArKysNCj4gPiAgaW5j bHVkZS91YXBpL2xpbnV4L3BrdF9jbHMuaCAgICAgICAgfCAgIDEgKw0KPiA+ICBpbmNsdWRlL3Vh cGkvbGludXgvdGNfYWN0L3RjX2dhdGUuaCB8ICA0NyArKw0KPiA+ICBuZXQvc2NoZWQvS2NvbmZp ZyAgICAgICAgICAgICAgICAgICB8ICAxMyArDQo+ID4gIG5ldC9zY2hlZC9NYWtlZmlsZSAgICAg ICAgICAgICAgICAgIHwgICAxICsNCj4gPiAgbmV0L3NjaGVkL2FjdF9nYXRlLmMgICAgICAgICAg ICAgICAgfCA2NDcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiA+ICA2IGZpbGVzIGNo YW5nZWQsIDc2MyBpbnNlcnRpb25zKCspDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRl L25ldC90Y19hY3QvdGNfZ2F0ZS5oICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4gPiBpbmNsdWRlL3Vh cGkvbGludXgvdGNfYWN0L3RjX2dhdGUuaA0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbmV0L3Nj aGVkL2FjdF9nYXRlLmMNCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y19hY3Qv dGNfZ2F0ZS5oDQo+ID4gYi9pbmNsdWRlL25ldC90Y19hY3QvdGNfZ2F0ZS5oIG5ldyBmaWxlIG1v ZGUgMTAwNjQ0IGluZGV4DQo+ID4gMDAwMDAwMDAwMDAwLi5iMGFjZTU1YjJhYWENCj4gPiAtLS0g L2Rldi9udWxsDQo+ID4gKysrIGIvaW5jbHVkZS9uZXQvdGNfYWN0L3RjX2dhdGUuaA0KPiA+IEBA IC0wLDAgKzEsNTQgQEANCj4gPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAt b3ItbGF0ZXIgKi8NCj4gPiArLyogQ29weXJpZ2h0IDIwMjAgTlhQICovDQo+ID4gKw0KPiA+ICsj aWZuZGVmIF9fTkVUX1RDX0dBVEVfSA0KPiA+ICsjZGVmaW5lIF9fTkVUX1RDX0dBVEVfSA0KPiA+ ICsNCj4gPiArI2luY2x1ZGUgPG5ldC9hY3RfYXBpLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC90 Y19hY3QvdGNfZ2F0ZS5oPg0KPiA+ICsNCj4gPiArc3RydWN0IHRjZmdfZ2F0ZV9lbnRyeSB7DQo+ ID4gKyAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgaW5kZXg7DQo+ID4gKyAgICAgdTggICAg ICAgICAgICAgICAgICAgICAgZ2F0ZV9zdGF0ZTsNCj4gPiArICAgICB1MzIgICAgICAgICAgICAg ICAgICAgICBpbnRlcnZhbDsNCj4gPiArICAgICBzMzIgICAgICAgICAgICAgICAgICAgICBpcHY7 DQo+ID4gKyAgICAgczMyICAgICAgICAgICAgICAgICAgICAgbWF4b2N0ZXRzOw0KPiA+ICsgICAg IHN0cnVjdCBsaXN0X2hlYWQgICAgICAgIGxpc3Q7DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1 Y3QgdGNmX2dhdGVfcGFyYW1zIHsNCj4gPiArICAgICBzMzIgICAgICAgICAgICAgICAgICAgICB0 Y2ZnX3ByaW9yaXR5Ow0KPiA+ICsgICAgIHU2NCAgICAgICAgICAgICAgICAgICAgIHRjZmdfYmFz ZXRpbWU7DQo+ID4gKyAgICAgdTY0ICAgICAgICAgICAgICAgICAgICAgdGNmZ19jeWNsZXRpbWU7 DQo+ID4gKyAgICAgdTY0ICAgICAgICAgICAgICAgICAgICAgdGNmZ19jeWNsZXRpbWVfZXh0Ow0K PiA+ICsgICAgIHUzMiAgICAgICAgICAgICAgICAgICAgIHRjZmdfZmxhZ3M7DQo+ID4gKyAgICAg czMyICAgICAgICAgICAgICAgICAgICAgdGNmZ19jbG9ja2lkOw0KPiA+ICsgICAgIHNpemVfdCAg ICAgICAgICAgICAgICAgIG51bV9lbnRyaWVzOw0KPiA+ICsgICAgIHN0cnVjdCBsaXN0X2hlYWQg ICAgICAgIGVudHJpZXM7DQo+ID4gK307DQo+ID4gKw0KPiA+ICsjZGVmaW5lIEdBVEVfQUNUX0dB VEVfT1BFTiAgIEJJVCgwKQ0KPiA+ICsjZGVmaW5lIEdBVEVfQUNUX1BFTkRJTkcgICAgIEJJVCgx KQ0KPiA+ICtzdHJ1Y3QgZ2F0ZV9hY3Rpb24gew0KPiA+ICsgICAgIHN0cnVjdCB0Y2ZfZ2F0ZV9w YXJhbXMgcGFyYW07DQo+ID4gKyAgICAgc3BpbmxvY2tfdCBlbnRyeV9sb2NrOw0KPiA+ICsgICAg IHU4IGN1cnJlbnRfZ2F0ZV9zdGF0dXM7DQo+ID4gKyAgICAga3RpbWVfdCBjdXJyZW50X2Nsb3Nl X3RpbWU7DQo+ID4gKyAgICAgdTMyIGN1cnJlbnRfZW50cnlfb2N0ZXRzOw0KPiA+ICsgICAgIHMz MiBjdXJyZW50X21heF9vY3RldHM7DQo+ID4gKyAgICAgc3RydWN0IHRjZmdfZ2F0ZV9lbnRyeSBf X3JjdSAqbmV4dF9lbnRyeTsNCj4gPiArICAgICBzdHJ1Y3QgaHJ0aW1lciBoaXRpbWVyOw0KPiA+ ICsgICAgIGVudW0gdGtfb2Zmc2V0cyB0a19vZmZzZXQ7DQo+ID4gKyAgICAgc3RydWN0IHJjdV9o ZWFkIHJjdTsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCB0Y2ZfZ2F0ZSB7DQo+ID4gKyAg ICAgc3RydWN0IHRjX2FjdGlvbiAgICAgICAgICAgICAgICBjb21tb247DQo+ID4gKyAgICAgc3Ry dWN0IGdhdGVfYWN0aW9uIF9fcmN1ICAgICAgICAqYWN0ZzsNCj4gPiArfTsNCj4gPiArI2RlZmlu ZSB0b19nYXRlKGEpICgoc3RydWN0IHRjZl9nYXRlICopYSkNCj4gPiArDQo+ID4gKyNkZWZpbmUg Z2V0X2dhdGVfcGFyYW0oYWN0KSAoKHN0cnVjdCB0Y2ZfZ2F0ZV9wYXJhbXMgKilhY3QpICNkZWZp bmUNCj4gPiArZ2V0X2dhdGVfYWN0aW9uKHApICgoc3RydWN0IGdhdGVfYWN0aW9uICopcCkNCj4g PiArDQo+ID4gKyNlbmRpZg0KPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcGt0 X2Nscy5oDQo+ID4gYi9pbmNsdWRlL3VhcGkvbGludXgvcGt0X2Nscy5oIGluZGV4IDlmMDZkMjlj YWI3MC4uZmM2NzJiMjMyNDM3DQo+IDEwMDY0NA0KPiA+IC0tLSBhL2luY2x1ZGUvdWFwaS9saW51 eC9wa3RfY2xzLmgNCj4gPiArKysgYi9pbmNsdWRlL3VhcGkvbGludXgvcGt0X2Nscy5oDQo+ID4g QEAgLTEzNCw2ICsxMzQsNyBAQCBlbnVtIHRjYV9pZCB7DQo+ID4gICAgICAgVENBX0lEX0NUSU5G TywNCj4gPiAgICAgICBUQ0FfSURfTVBMUywNCj4gPiAgICAgICBUQ0FfSURfQ1QsDQo+ID4gKyAg ICAgVENBX0lEX0dBVEUsDQo+ID4gICAgICAgLyogb3RoZXIgYWN0aW9ucyBnbyBoZXJlICovDQo+ ID4gICAgICAgX19UQ0FfSURfTUFYID0gMjU1DQo+ID4gIH07DQo+ID4gZGlmZiAtLWdpdCBhL2lu Y2x1ZGUvdWFwaS9saW51eC90Y19hY3QvdGNfZ2F0ZS5oDQo+ID4gYi9pbmNsdWRlL3VhcGkvbGlu dXgvdGNfYWN0L3RjX2dhdGUuaA0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXgg MDAwMDAwMDAwMDAwLi5mMjE0YjNhNmQ0NGYNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIv aW5jbHVkZS91YXBpL2xpbnV4L3RjX2FjdC90Y19nYXRlLmgNCj4gPiBAQCAtMCwwICsxLDQ3IEBA DQo+ID4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKyBXSVRIIExpbnV4LXN5 c2NhbGwtbm90ZSAqLw0KPiA+ICsvKiBDb3B5cmlnaHQgMjAyMCBOWFAgKi8NCj4gPiArDQo+ID4g KyNpZm5kZWYgX19MSU5VWF9UQ19HQVRFX0gNCj4gPiArI2RlZmluZSBfX0xJTlVYX1RDX0dBVEVf SA0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPGxpbnV4L3BrdF9jbHMuaD4NCj4gPiArDQo+ID4gK3N0 cnVjdCB0Y19nYXRlIHsNCj4gPiArICAgICB0Y19nZW47DQo+ID4gK307DQo+ID4gKw0KPiA+ICtl bnVtIHsNCj4gPiArICAgICBUQ0FfR0FURV9FTlRSWV9VTlNQRUMsDQo+ID4gKyAgICAgVENBX0dB VEVfRU5UUllfSU5ERVgsDQo+ID4gKyAgICAgVENBX0dBVEVfRU5UUllfR0FURSwNCj4gPiArICAg ICBUQ0FfR0FURV9FTlRSWV9JTlRFUlZBTCwNCj4gPiArICAgICBUQ0FfR0FURV9FTlRSWV9JUFYs DQo+ID4gKyAgICAgVENBX0dBVEVfRU5UUllfTUFYX09DVEVUUywNCj4gPiArICAgICBfX1RDQV9H QVRFX0VOVFJZX01BWCwNCj4gPiArfTsNCj4gPiArI2RlZmluZSBUQ0FfR0FURV9FTlRSWV9NQVgg KF9fVENBX0dBVEVfRU5UUllfTUFYIC0gMSkNCj4gPiArDQo+ID4gK2VudW0gew0KPiA+ICsgICAg IFRDQV9HQVRFX09ORV9FTlRSWV9VTlNQRUMsDQo+ID4gKyAgICAgVENBX0dBVEVfT05FX0VOVFJZ LA0KPiA+ICsgICAgIF9fVENBX0dBVEVfT05FX0VOVFJZX01BWCwNCj4gPiArfTsNCj4gPiArI2Rl ZmluZSBUQ0FfR0FURV9PTkVfRU5UUllfTUFYIChfX1RDQV9HQVRFX09ORV9FTlRSWV9NQVgNCj4g LSAxKQ0KPiA+ICsNCj4gPiArZW51bSB7DQo+ID4gKyAgICAgVENBX0dBVEVfVU5TUEVDLA0KPiA+ ICsgICAgIFRDQV9HQVRFX1RNLA0KPiA+ICsgICAgIFRDQV9HQVRFX1BBUk1TLA0KPiA+ICsgICAg IFRDQV9HQVRFX1BBRCwNCj4gPiArICAgICBUQ0FfR0FURV9QUklPUklUWSwNCj4gPiArICAgICBU Q0FfR0FURV9FTlRSWV9MSVNULA0KPiA+ICsgICAgIFRDQV9HQVRFX0JBU0VfVElNRSwNCj4gPiAr ICAgICBUQ0FfR0FURV9DWUNMRV9USU1FLA0KPiA+ICsgICAgIFRDQV9HQVRFX0NZQ0xFX1RJTUVf RVhULA0KPiA+ICsgICAgIFRDQV9HQVRFX0ZMQUdTLA0KPiA+ICsgICAgIFRDQV9HQVRFX0NMT0NL SUQsDQo+ID4gKyAgICAgX19UQ0FfR0FURV9NQVgsDQo+ID4gK307DQo+ID4gKyNkZWZpbmUgVENB X0dBVEVfTUFYIChfX1RDQV9HQVRFX01BWCAtIDEpDQo+ID4gKw0KPiA+ICsjZW5kaWYNCj4gPiBk aWZmIC0tZ2l0IGEvbmV0L3NjaGVkL0tjb25maWcgYi9uZXQvc2NoZWQvS2NvbmZpZyBpbmRleA0K PiA+IGJmYmVmYjdiZmY5ZC4uMTMxNDU0OWM3NTY3IDEwMDY0NA0KPiA+IC0tLSBhL25ldC9zY2hl ZC9LY29uZmlnDQo+ID4gKysrIGIvbmV0L3NjaGVkL0tjb25maWcNCj4gPiBAQCAtOTgxLDYgKzk4 MSwxOSBAQCBjb25maWcgTkVUX0FDVF9DVA0KPiA+ICAgICAgICAgVG8gY29tcGlsZSB0aGlzIGNv ZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQ0KPiA+ICAgICAgICAgbW9kdWxlIHdp bGwgYmUgY2FsbGVkIGFjdF9jdC4NCj4gPg0KPiA+ICtjb25maWcgTkVUX0FDVF9HQVRFDQo+ID4g KyAgICAgdHJpc3RhdGUgIkZyYW1lIGdhdGUgZW50cnkgbGlzdCBjb250cm9sIHRjIGFjdGlvbiIN Cj4gPiArICAgICBkZXBlbmRzIG9uIE5FVF9DTFNfQUNUDQo+ID4gKyAgICAgaGVscA0KPiA+ICsg ICAgICAgU2F5IFkgaGVyZSB0byBhbGxvdyB0byBjb250cm9sIHRoZSBpbmdyZXNzIGZsb3cgdG8g YmUgcGFzc2VkIGF0DQo+ID4gKyAgICAgICBzcGVjaWZpYyB0aW1lIHNsb3QgYW5kIGJlIGRyb3Bw ZWQgYXQgb3RoZXIgc3BlY2lmaWMgdGltZSBzbG90IGJ5DQo+ID4gKyAgICAgICB0aGUgZ2F0ZSBl bnRyeSBsaXN0LiBUaGUgbWFuaXB1bGF0aW9uIHdpbGwgc2ltdWxhdGUgdGhlIElFRUUNCj4gPiAr ICAgICAgIDgwMi4xUWNpIHN0cmVhbSBnYXRlIGNvbnRyb2wgYmVoYXZpb3IuDQo+ID4gKw0KPiA+ ICsgICAgICAgSWYgdW5zdXJlLCBzYXkgTi4NCj4gPiArICAgICAgIFRvIGNvbXBpbGUgdGhpcyBj b2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUNCj4gPiArICAgICAgIG1vZHVsZSB3 aWxsIGJlIGNhbGxlZCBhY3RfZ2F0ZS4NCj4gPiArDQo+ID4gIGNvbmZpZyBORVRfSUZFX1NLQk1B UksNCj4gPiAgICAgICB0cmlzdGF0ZSAiU3VwcG9ydCB0byBlbmNvZGluZyBkZWNvZGluZyBza2Ig bWFyayBvbiBJRkUgYWN0aW9uIg0KPiA+ICAgICAgIGRlcGVuZHMgb24gTkVUX0FDVF9JRkUNCj4g PiBkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL01ha2VmaWxlIGIvbmV0L3NjaGVkL01ha2VmaWxlIGlu ZGV4DQo+ID4gMzFjMzY3YTZjZDA5Li42NmJiZjlhOThmOWUgMTAwNjQ0DQo+ID4gLS0tIGEvbmV0 L3NjaGVkL01ha2VmaWxlDQo+ID4gKysrIGIvbmV0L3NjaGVkL01ha2VmaWxlDQo+ID4gQEAgLTMw LDYgKzMwLDcgQEAgb2JqLSQoQ09ORklHX05FVF9JRkVfU0tCUFJJTykgICAgICAgKz0NCj4gYWN0 X21ldGFfc2ticHJpby5vDQo+ID4gIG9iai0kKENPTkZJR19ORVRfSUZFX1NLQlRDSU5ERVgpICAg ICArPSBhY3RfbWV0YV9za2J0Y2luZGV4Lm8NCj4gPiAgb2JqLSQoQ09ORklHX05FVF9BQ1RfVFVO TkVMX0tFWSkrPSBhY3RfdHVubmVsX2tleS5vDQo+ID4gIG9iai0kKENPTkZJR19ORVRfQUNUX0NU KSAgICAgKz0gYWN0X2N0Lm8NCj4gPiArb2JqLSQoQ09ORklHX05FVF9BQ1RfR0FURSkgICArPSBh Y3RfZ2F0ZS5vDQo+ID4gIG9iai0kKENPTkZJR19ORVRfU0NIX0ZJRk8pICAgKz0gc2NoX2ZpZm8u bw0KPiA+ICBvYmotJChDT05GSUdfTkVUX1NDSF9DQlEpICAgICs9IHNjaF9jYnEubw0KPiA+ICBv YmotJChDT05GSUdfTkVUX1NDSF9IVEIpICAgICs9IHNjaF9odGIubw0KPiA+IGRpZmYgLS1naXQg YS9uZXQvc2NoZWQvYWN0X2dhdGUuYyBiL25ldC9zY2hlZC9hY3RfZ2F0ZS5jIG5ldyBmaWxlIG1v ZGUNCj4gPiAxMDA2NDQgaW5kZXggMDAwMDAwMDAwMDAwLi5lOTMyZjQwMmI0ZjENCj4gPiAtLS0g L2Rldi9udWxsDQo+ID4gKysrIGIvbmV0L3NjaGVkL2FjdF9nYXRlLmMNCj4gPiBAQCAtMCwwICsx LDY0NyBAQA0KPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRl cg0KPiA+ICsvKiBDb3B5cmlnaHQgMjAyMCBOWFAgKi8NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxs aW51eC9tb2R1bGUuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+DQo+ID4gKyNpbmNs dWRlIDxsaW51eC9rZXJuZWwuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPg0KPiA+ ICsjaW5jbHVkZSA8bGludXgvZXJybm8uaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5o Pg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51 eC9pbml0Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+DQo+ID4gKyNpbmNsdWRlIDxu ZXQvYWN0X2FwaS5oPg0KPiA+ICsjaW5jbHVkZSA8bmV0L25ldGxpbmsuaD4NCj4gPiArI2luY2x1 ZGUgPG5ldC9wa3RfY2xzLmg+DQo+ID4gKyNpbmNsdWRlIDxuZXQvdGNfYWN0L3RjX2dhdGUuaD4N Cj4gPiArDQo+ID4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2F0ZV9uZXRfaWQ7DQo+ID4gK3N0YXRp YyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfZ2F0ZV9vcHM7DQo+ID4gKw0KPiA+ICtzdGF0aWMg a3RpbWVfdCBnYXRlX2dldF90aW1lKHN0cnVjdCBnYXRlX2FjdGlvbiAqZ2FjdCkgew0KPiA+ICsg ICAgIGt0aW1lX3QgbW9ubyA9IGt0aW1lX2dldCgpOw0KPiA+ICsNCj4gPiArICAgICBzd2l0Y2gg KGdhY3QtPnRrX29mZnNldCkgew0KPiA+ICsgICAgIGNhc2UgVEtfT0ZGU19NQVg6DQo+ID4gKyAg ICAgICAgICAgICByZXR1cm4gbW9ubzsNCj4gPiArICAgICBkZWZhdWx0Og0KPiA+ICsgICAgICAg ICAgICAgcmV0dXJuIGt0aW1lX21vbm9fdG9fYW55KG1vbm8sIGdhY3QtPnRrX29mZnNldCk7DQo+ ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gS1RJTUVfTUFYOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtzdGF0aWMgaW50IGdhdGVfZ2V0X3N0YXJ0X3RpbWUoc3RydWN0IGdhdGVfYWN0 aW9uICpnYWN0LCBrdGltZV90DQo+ID4gKypzdGFydCkgew0KPiA+ICsgICAgIHN0cnVjdCB0Y2Zf Z2F0ZV9wYXJhbXMgKnBhcmFtID0gZ2V0X2dhdGVfcGFyYW0oZ2FjdCk7DQo+ID4gKyAgICAga3Rp bWVfdCBub3csIGJhc2UsIGN5Y2xlOw0KPiA+ICsgICAgIHU2NCBuOw0KPiA+ICsNCj4gPiArICAg ICBiYXNlID0gbnNfdG9fa3RpbWUocGFyYW0tPnRjZmdfYmFzZXRpbWUpOw0KPiA+ICsgICAgIG5v dyA9IGdhdGVfZ2V0X3RpbWUoZ2FjdCk7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChrdGltZV9hZnRl cihiYXNlLCBub3cpKSB7DQo+ID4gKyAgICAgICAgICAgICAqc3RhcnQgPSBiYXNlOw0KPiA+ICsg ICAgICAgICAgICAgcmV0dXJuIDA7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBjeWNs ZSA9IHBhcmFtLT50Y2ZnX2N5Y2xldGltZTsNCj4gPiArDQo+ID4gKyAgICAgLyogY3ljbGUgdGlt ZSBzaG91bGQgbm90IGJlIHplcm8gKi8NCj4gPiArICAgICBpZiAoV0FSTl9PTighY3ljbGUpKQ0K PiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7DQo+IA0KPiBMb29raW5nIGF0IHRoZSBp bml0IGNvZGUgaXQgc2VlbXMgdGhhdCB0aGlzIHZhbHVlIGNhbiBiZSBzZXQgdG8gMCBkaXJlY3Rs eQ0KPiBmcm9tIG5ldGxpbmsgcGFja2V0IHdpdGhvdXQgZnVydGhlciB2YWxpZGF0aW9uLCB3aGlj aCB3b3VsZCBhbGxvdyB1c2VyIHRvDQo+IHRyaWdnZXIgd2FybmluZyBoZXJlLg0KDQpZZXMsICB3 aWxsIGF2b2lkIGF0IGFoZWFkIHBvaW50Lg0KDQo+IA0KPiA+ICsNCj4gPiArICAgICBuID0gZGl2 NjRfdTY0KGt0aW1lX3N1Yl9ucyhub3csIGJhc2UpLCBjeWNsZSk7DQo+ID4gKyAgICAgKnN0YXJ0 ID0ga3RpbWVfYWRkX25zKGJhc2UsIChuICsgMSkgKiBjeWNsZSk7DQo+ID4gKyAgICAgcmV0dXJu IDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIGdhdGVfc3RhcnRfdGltZXIoc3Ry dWN0IGdhdGVfYWN0aW9uICpnYWN0LCBrdGltZV90IHN0YXJ0KQ0KPiA+ICt7DQo+ID4gKyAgICAg a3RpbWVfdCBleHBpcmVzOw0KPiA+ICsNCj4gPiArICAgICBleHBpcmVzID0gaHJ0aW1lcl9nZXRf ZXhwaXJlcygmZ2FjdC0+aGl0aW1lcik7DQo+ID4gKyAgICAgaWYgKGV4cGlyZXMgPT0gMCkNCj4g PiArICAgICAgICAgICAgIGV4cGlyZXMgPSBLVElNRV9NQVg7DQo+ID4gKw0KPiA+ICsgICAgIHN0 YXJ0ID0gbWluX3Qoa3RpbWVfdCwgc3RhcnQsIGV4cGlyZXMpOw0KPiA+ICsNCj4gPiArICAgICBo cnRpbWVyX3N0YXJ0KCZnYWN0LT5oaXRpbWVyLCBzdGFydCwgSFJUSU1FUl9NT0RFX0FCUyk7IH0N Cj4gPiArDQo+ID4gK3N0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBnYXRlX3RpbWVyX2Z1bmMo c3RydWN0IGhydGltZXIgKnRpbWVyKSB7DQo+ID4gKyAgICAgc3RydWN0IGdhdGVfYWN0aW9uICpn YWN0ID0gY29udGFpbmVyX29mKHRpbWVyLCBzdHJ1Y3QgZ2F0ZV9hY3Rpb24sDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpdGltZXIpOw0KPiA+ICsg ICAgIHN0cnVjdCB0Y2ZfZ2F0ZV9wYXJhbXMgKnAgPSBnZXRfZ2F0ZV9wYXJhbShnYWN0KTsNCj4g PiArICAgICBzdHJ1Y3QgdGNmZ19nYXRlX2VudHJ5ICpuZXh0Ow0KPiA+ICsgICAgIGt0aW1lX3Qg Y2xvc2VfdGltZSwgbm93Ow0KPiA+ICsNCj4gPiArICAgICBzcGluX2xvY2soJmdhY3QtPmVudHJ5 X2xvY2spOw0KPiA+ICsNCj4gPiArICAgICBuZXh0ID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3Rl ZChnYWN0LT5uZXh0X2VudHJ5LA0KPiA+ICsNCj4gPiArIGxvY2tkZXBfaXNfaGVsZCgmZ2FjdC0+ ZW50cnlfbG9jaykpOw0KPiA+ICsNCj4gPiArICAgICAvKiBjeWNsZSBzdGFydCwgY2xlYXIgcGVu ZGluZyBiaXQsIGNsZWFyIHRvdGFsIG9jdGV0cyAqLw0KPiA+ICsgICAgIGdhY3QtPmN1cnJlbnRf Z2F0ZV9zdGF0dXMgPSBuZXh0LT5nYXRlX3N0YXRlID8NCj4gR0FURV9BQ1RfR0FURV9PUEVOIDog MDsNCj4gPiArICAgICBnYWN0LT5jdXJyZW50X2VudHJ5X29jdGV0cyA9IDA7DQo+ID4gKyAgICAg Z2FjdC0+Y3VycmVudF9tYXhfb2N0ZXRzID0gbmV4dC0+bWF4b2N0ZXRzOw0KPiA+ICsNCj4gPiAr ICAgICBnYWN0LT5jdXJyZW50X2Nsb3NlX3RpbWUgPSBrdGltZV9hZGRfbnMoZ2FjdC0+Y3VycmVu dF9jbG9zZV90aW1lLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBuZXh0LT5pbnRlcnZhbCk7DQo+ID4gKw0KPiA+ICsgICAgIGNsb3NlX3RpbWUgPSBn YWN0LT5jdXJyZW50X2Nsb3NlX3RpbWU7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChsaXN0X2lzX2xh c3QoJm5leHQtPmxpc3QsICZwLT5lbnRyaWVzKSkNCj4gPiArICAgICAgICAgICAgIG5leHQgPSBs aXN0X2ZpcnN0X2VudHJ5KCZwLT5lbnRyaWVzLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IHRjZmdfZ2F0ZV9lbnRyeSwgbGlzdCk7DQo+ID4gKyAgICAg ZWxzZQ0KPiA+ICsgICAgICAgICAgICAgbmV4dCA9IGxpc3RfbmV4dF9lbnRyeShuZXh0LCBsaXN0 KTsNCj4gPiArDQo+ID4gKyAgICAgbm93ID0gZ2F0ZV9nZXRfdGltZShnYWN0KTsNCj4gPiArDQo+ ID4gKyAgICAgaWYgKGt0aW1lX2FmdGVyKG5vdywgY2xvc2VfdGltZSkpIHsNCj4gPiArICAgICAg ICAgICAgIGt0aW1lX3QgY3ljbGUsIGJhc2U7DQo+ID4gKyAgICAgICAgICAgICB1NjQgbjsNCj4g PiArDQo+ID4gKyAgICAgICAgICAgICBjeWNsZSA9IHAtPnRjZmdfY3ljbGV0aW1lOw0KPiA+ICsg ICAgICAgICAgICAgYmFzZSA9IG5zX3RvX2t0aW1lKHAtPnRjZmdfYmFzZXRpbWUpOw0KPiA+ICsg ICAgICAgICAgICAgbiA9IGRpdjY0X3U2NChrdGltZV9zdWJfbnMobm93LCBiYXNlKSwgY3ljbGUp Ow0KPiA+ICsgICAgICAgICAgICAgY2xvc2VfdGltZSA9IGt0aW1lX2FkZF9ucyhiYXNlLCAobiAr IDEpICogY3ljbGUpOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgcmN1X2Fzc2lnbl9w b2ludGVyKGdhY3QtPm5leHRfZW50cnksIG5leHQpOw0KPiA+ICsgICAgIHNwaW5fdW5sb2NrKCZn YWN0LT5lbnRyeV9sb2NrKTsNCj4gDQo+IEkgaGF2ZSBjb3VwbGUgb2YgcXVlc3Rpb24gYWJvdXQg c3luY2hyb25pemF0aW9uIGhlcmU6DQo+IA0KPiAtIFdoeSBkbyB5b3UgbmVlZCBuZXh0X2VudHJ5 IHRvIGJlIHJjdSBwb2ludGVyPyBJdCBpcyBvbmx5IGFzc2lnbmVkIGhlcmUNCj4gd2l0aCBlbnRy eV9sb2NrIHByb3RlY3Rpb24gYW5kIGluIGluaXQgY29kZSBiZWZvcmUgYWN0aW9uIGlzIHZpc2li bGUgdG8NCj4gY29uY3VycmVudCB1c2Vycy4gSSBkb24ndCBzZWUgYW55IHVubG9ja2VkIHJjdS1w cm90ZWN0ZWQgcmVhZGVycyBoZXJlIHRoYXQNCj4gY291bGQgYmVuZWZpdCBmcm9tIGl0Lg0KPiAN Cj4gLSBXaHkgY3JlYXRlIGRlZGljYXRlZCBlbnRyeV9sb2NrIGluc3RlYWQgb2YgdXNpbmcgYWxy ZWFkeSBleGlzdGluZyBwZXItDQo+IGFjdGlvbiB0Y2ZfbG9jaz8NCg0KV2lsbCB0cnkgdG8gdXNl IHRoZSB0Y2ZfbG9jayBmb3IgdmVyaWZpY2F0aW9uLg0KVGhlIHRob3VnaHRzIGNhbWUgZnJvbSB0 aGF0IHRoZSB0aW1lciBwZXJpb2QgYXJyaXZlZCB0aGVuIGNoZWNrIHRocm91Z2ggdGhlIGxpc3Qg YW5kIHRoZW4gdXBkYXRlIG5leHQgdGltZSB3b3VsZCB0YWtlIG11Y2ggbW9yZSB0aW1lLiAgQWN0 aW9uIGZ1bmN0aW9uIHdvdWxkIGJlIGJ1c3kgd2hlbiB0cmFmZmljLiBTbyB1c2UgYSBzZXBhcmF0 ZSBsb2NrIGhlcmUgZm9yICANCg0KPiANCj4gPiArDQo+ID4gKyAgICAgaHJ0aW1lcl9zZXRfZXhw aXJlcygmZ2FjdC0+aGl0aW1lciwgY2xvc2VfdGltZSk7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVy biBIUlRJTUVSX1JFU1RBUlQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgdGNmX2dh dGVfYWN0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0Y2ZfcmVzdWx0ICpyZXMpIHsNCj4gPiAr ICAgICBzdHJ1Y3QgdGNmX2dhdGUgKmcgPSB0b19nYXRlKGEpOw0KPiA+ICsgICAgIHN0cnVjdCBn YXRlX2FjdGlvbiAqZ2FjdDsNCj4gPiArICAgICBpbnQgYWN0aW9uOw0KPiA+ICsNCj4gPiArICAg ICB0Y2ZfbGFzdHVzZV91cGRhdGUoJmctPnRjZl90bSk7DQo+ID4gKyAgICAgYnN0YXRzX2NwdV91 cGRhdGUodGhpc19jcHVfcHRyKGctPmNvbW1vbi5jcHVfYnN0YXRzKSwgc2tiKTsNCj4gPiArDQo+ ID4gKyAgICAgYWN0aW9uID0gUkVBRF9PTkNFKGctPnRjZl9hY3Rpb24pOw0KPiA+ICsgICAgIHJj dV9yZWFkX2xvY2soKTsNCj4gDQo+IEFjdGlvbiBmYXN0cGF0aCBpcyBhbHJlYWR5IHJjdSByZWFk IGxvY2sgcHJvdGVjdGVkLCB5b3UgZG9uJ3QgbmVlZCB0bw0KPiBtYW51YWxseSBvYnRhaW4gaXQu DQoNCldpbGwgYmUgcmVtb3ZlZC4NCg0KPiANCj4gPiArICAgICBnYWN0ID0gcmN1X2RlcmVmZXJl bmNlX2JoKGctPmFjdGcpOw0KPiA+ICsgICAgIGlmICh1bmxpa2VseShnYWN0LT5jdXJyZW50X2dh dGVfc3RhdHVzICYgR0FURV9BQ1RfUEVORElORykpIHsNCj4gDQo+IENhbid0IGN1cnJlbnRfZ2F0 ZV9zdGF0dXMgYmUgY29uY3VycmVudGx5IG1vZGlmaWVkIGJ5IHRpbWVyIGNhbGxiYWNrPw0KPiBU aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgdXNlIGVudHJ5X2xvY2sgdG8gc3luY2hyb25pemUgd2l0aCB0 aW1lci4NCg0KV2lsbCB0cnkgdGNmX2xvY2sgZWl0aGVyLg0KDQo+IA0KPiA+ICsgICAgICAgICAg ICAgcmN1X3JlYWRfdW5sb2NrKCk7DQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gYWN0aW9uOw0K PiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgaWYgKCEoZ2FjdC0+Y3VycmVudF9nYXRlX3N0 YXR1cyAmIEdBVEVfQUNUX0dBVEVfT1BFTikpDQo+IA0KPiAuLi5hbmQgaGVyZQ0KPiANCj4gPiAr ICAgICAgICAgICAgIGdvdG8gZHJvcDsNCj4gPiArDQo+ID4gKyAgICAgaWYgKGdhY3QtPmN1cnJl bnRfbWF4X29jdGV0cyA+PSAwKSB7DQo+ID4gKyAgICAgICAgICAgICBnYWN0LT5jdXJyZW50X2Vu dHJ5X29jdGV0cyArPSBxZGlzY19wa3RfbGVuKHNrYik7DQo+ID4gKyAgICAgICAgICAgICBpZiAo Z2FjdC0+Y3VycmVudF9lbnRyeV9vY3RldHMgPg0KPiA+ICsgZ2FjdC0+Y3VycmVudF9tYXhfb2N0 ZXRzKSB7DQo+IA0KPiBoZXJlIGFsc28uDQo+IA0KPiA+ICsNCj4gPiArIHFzdGF0c19vdmVybGlt aXRfaW5jKHRoaXNfY3B1X3B0cihnLT5jb21tb24uY3B1X3FzdGF0cykpOw0KPiANCj4gUGxlYXNl IHVzZSB0Y2ZfYWN0aW9uX2luY19vdmVybGltaXRfcXN0YXRzKCkgYW5kIG90aGVyIHdyYXBwZXJz IGZvciBzdGF0cy4NCj4gT3RoZXJ3aXNlIGl0IHdpbGwgY3Jhc2ggaWYgdXNlciBwYXNzZXMgVENB X0FDVF9GTEFHU19OT19QRVJDUFVfU1RBVFMNCj4gZmxhZy4NCg0KVGhlIHRjZl9hY3Rpb25faW5j X292ZXJsaW1pdF9xc3RhdHMoKSBjYW4ndCBzaG93IGxpbWl0IGNvdW50cyBpbiB0YyBzaG93IGNv bW1hbmQuIElzIHRoZXJlIGFueXRoaW5nIG5lZWQgdG8gZG8/IA0KDQo+IA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICBnb3RvIGRyb3A7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKyAgICAg fQ0KPiA+ICsgICAgIHJjdV9yZWFkX3VubG9jaygpOw0KPiA+ICsNCj4gPiArICAgICByZXR1cm4g YWN0aW9uOw0KPiA+ICtkcm9wOg0KPiA+ICsgICAgIHJjdV9yZWFkX3VubG9jaygpOw0KPiA+ICsg ICAgIHFzdGF0c19kcm9wX2luYyh0aGlzX2NwdV9wdHIoZy0+Y29tbW9uLmNwdV9xc3RhdHMpKTsN Cj4gPiArICAgICByZXR1cm4gVENfQUNUX1NIT1Q7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBlbnRyeV9wb2xpY3lbVENBX0dBVEVfRU5UUllfTUFY ICsgMV0NCj4gPSB7DQo+ID4gKyAgICAgW1RDQV9HQVRFX0VOVFJZX0lOREVYXSAgICAgICAgICA9 IHsgLnR5cGUgPSBOTEFfVTMyIH0sDQo+ID4gKyAgICAgW1RDQV9HQVRFX0VOVFJZX0dBVEVdICAg ICAgICAgICA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LA0KPiA+ICsgICAgIFtUQ0FfR0FURV9FTlRS WV9JTlRFUlZBTF0gICAgICAgPSB7IC50eXBlID0gTkxBX1UzMiB9LA0KPiA+ICsgICAgIFtUQ0Ff R0FURV9FTlRSWV9JUFZdICAgICAgICAgICAgPSB7IC50eXBlID0gTkxBX1MzMiB9LA0KPiA+ICsg ICAgIFtUQ0FfR0FURV9FTlRSWV9NQVhfT0NURVRTXSAgICAgPSB7IC50eXBlID0gTkxBX1MzMiB9 LA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGdh dGVfcG9saWN5W1RDQV9HQVRFX01BWCArIDFdID0gew0KPiA+ICsgICAgIFtUQ0FfR0FURV9QQVJN U10gICAgICAgICAgICAgICAgPSB7IC5sZW4gPSBzaXplb2Yoc3RydWN0IHRjX2dhdGUpLA0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50eXBlID0gTkxBX0VY QUNUX0xFTiB9LA0KPiA+ICsgICAgIFtUQ0FfR0FURV9QUklPUklUWV0gICAgICAgICAgICAgPSB7 IC50eXBlID0gTkxBX1MzMiB9LA0KPiA+ICsgICAgIFtUQ0FfR0FURV9FTlRSWV9MSVNUXSAgICAg ICAgICAgPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LA0KPiA+ICsgICAgIFtUQ0FfR0FURV9CQVNF X1RJTUVdICAgICAgICAgICAgPSB7IC50eXBlID0gTkxBX1U2NCB9LA0KPiA+ICsgICAgIFtUQ0Ff R0FURV9DWUNMRV9USU1FXSAgICAgICAgICAgPSB7IC50eXBlID0gTkxBX1U2NCB9LA0KPiA+ICsg ICAgIFtUQ0FfR0FURV9DWUNMRV9USU1FX0VYVF0gICAgICAgPSB7IC50eXBlID0gTkxBX1U2NCB9 LA0KPiA+ICsgICAgIFtUQ0FfR0FURV9GTEFHU10gICAgICAgICAgICAgICAgPSB7IC50eXBlID0g TkxBX1UzMiB9LA0KPiA+ICsgICAgIFtUQ0FfR0FURV9DTE9DS0lEXSAgICAgICAgICAgICAgPSB7 IC50eXBlID0gTkxBX1MzMiB9LA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGludCBmaWxs X2dhdGVfZW50cnkoc3RydWN0IG5sYXR0ciAqKnRiLCBzdHJ1Y3QgdGNmZ19nYXRlX2VudHJ5ICpl bnRyeSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2Fj ayAqZXh0YWNrKSB7DQo+ID4gKyAgICAgdTMyIGludGVydmFsID0gMDsNCj4gPiArDQo+ID4gKyAg ICAgZW50cnktPmdhdGVfc3RhdGUgPSBubGFfZ2V0X2ZsYWcodGJbVENBX0dBVEVfRU5UUllfR0FU RV0pOw0KPiA+ICsNCj4gPiArICAgICBpZiAodGJbVENBX0dBVEVfRU5UUllfSU5URVJWQUxdKQ0K PiA+ICsgICAgICAgICAgICAgaW50ZXJ2YWwgPSBubGFfZ2V0X3UzMih0YltUQ0FfR0FURV9FTlRS WV9JTlRFUlZBTF0pOw0KPiA+ICsNCj4gPiArICAgICBpZiAoaW50ZXJ2YWwgPT0gMCkgew0KPiA+ ICsgICAgICAgICAgICAgTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAiSW52YWxpZCBpbnRlcnZhbCBm b3Igc2NoZWR1bGUgZW50cnkiKTsNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0K PiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgZW50cnktPmludGVydmFsID0gaW50ZXJ2YWw7 DQo+ID4gKw0KPiA+ICsgICAgIGlmICh0YltUQ0FfR0FURV9FTlRSWV9JUFZdKQ0KPiA+ICsgICAg ICAgICAgICAgZW50cnktPmlwdiA9IG5sYV9nZXRfczMyKHRiW1RDQV9HQVRFX0VOVFJZX0lQVl0p Ow0KPiA+ICsgICAgIGVsc2UNCj4gPiArICAgICAgICAgICAgIGVudHJ5LT5pcHYgPSAtMTsNCj4g PiArDQo+ID4gKyAgICAgaWYgKHRiW1RDQV9HQVRFX0VOVFJZX01BWF9PQ1RFVFNdKQ0KPiA+ICsg ICAgICAgICAgICAgZW50cnktPm1heG9jdGV0cyA9DQo+IG5sYV9nZXRfczMyKHRiW1RDQV9HQVRF X0VOVFJZX01BWF9PQ1RFVFNdKTsNCj4gPiArICAgICBlbHNlDQo+ID4gKyAgICAgICAgICAgICBl bnRyeS0+bWF4b2N0ZXRzID0gLTE7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiAwOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHBhcnNlX2dhdGVfZW50cnkoc3RydWN0IG5sYXR0ciAq biwgc3RydWN0ICB0Y2ZnX2dhdGVfZW50cnkNCj4gKmVudHJ5LA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IGluZGV4LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spIHsN Cj4gPiArICAgICBzdHJ1Y3QgbmxhdHRyICp0YltUQ0FfR0FURV9FTlRSWV9NQVggKyAxXSA9IHsg fTsNCj4gPiArICAgICBpbnQgZXJyOw0KPiANCj4gPiArICAgICBlcnIgPSBubGFfcGFyc2VfbmVz dGVkKHRiLCBUQ0FfR0FURV9FTlRSWV9NQVgsIG4sIGVudHJ5X3BvbGljeSwNCj4gZXh0YWNrKTsN Cj4gPiArICAgICBpZiAoZXJyIDwgMCkgew0KPiA+ICsgICAgICAgICAgICAgTkxfU0VUX0VSUl9N U0coZXh0YWNrLCAiQ291bGQgbm90IHBhcnNlIG5lc3RlZCBlbnRyeSIpOw0KPiA+ICsgICAgICAg ICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBlbnRy eS0+aW5kZXggPSBpbmRleDsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIGZpbGxfZ2F0ZV9lbnRy eSh0YiwgZW50cnksIGV4dGFjayk7IH0NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgcGFyc2VfZ2F0 ZV9saXN0KHN0cnVjdCBubGF0dHIgKmxpc3RfYXR0ciwNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHRjZl9nYXRlX3BhcmFtcyAqc2NoZWQsDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykgew0KPiA+ICsgICAgIHN0 cnVjdCB0Y2ZnX2dhdGVfZW50cnkgKmVudHJ5LCAqZTsNCj4gPiArICAgICBzdHJ1Y3QgbmxhdHRy ICpuOw0KPiA+ICsgICAgIGludCBlcnIsIHJlbTsNCj4gPiArICAgICBpbnQgaSA9IDA7DQo+ID4g Kw0KPiA+ICsgICAgIGlmICghbGlzdF9hdHRyKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1F SU5WQUw7DQo+ID4gKw0KPiA+ICsgICAgIG5sYV9mb3JfZWFjaF9uZXN0ZWQobiwgbGlzdF9hdHRy LCByZW0pIHsNCj4gPiArICAgICAgICAgICAgIGlmIChubGFfdHlwZShuKSAhPSBUQ0FfR0FURV9P TkVfRU5UUlkpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgTkxfU0VUX0VSUl9NU0coZXh0 YWNrLCAiQXR0cmlidXRlIGlzbid0IHR5cGUgJ2VudHJ5JyIpOw0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICBjb250aW51ZTsNCj4gPiArICAgICAgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAg ICAgICAgICBlbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9LRVJORUwpOw0KPiA+ ICsgICAgICAgICAgICAgaWYgKCFlbnRyeSkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBO TF9TRVRfRVJSX01TRyhleHRhY2ssICJOb3QgZW5vdWdoIG1lbW9yeSBmb3IgZW50cnkiKTsNCj4g PiArICAgICAgICAgICAgICAgICAgICAgZXJyID0gLUVOT01FTTsNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgZ290byByZWxlYXNlX2xpc3Q7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKw0K PiA+ICsgICAgICAgICAgICAgZXJyID0gcGFyc2VfZ2F0ZV9lbnRyeShuLCBlbnRyeSwgaSwgZXh0 YWNrKTsNCj4gPiArICAgICAgICAgICAgIGlmIChlcnIgPCAwKSB7DQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgIGtmcmVlKGVudHJ5KTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgZ290byBy ZWxlYXNlX2xpc3Q7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgICAg ICAgbGlzdF9hZGRfdGFpbCgmZW50cnktPmxpc3QsICZzY2hlZC0+ZW50cmllcyk7DQo+ID4gKyAg ICAgICAgICAgICBpKys7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBzY2hlZC0+bnVt X2VudHJpZXMgPSBpOw0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gaTsNCj4gPiArDQo+ID4gK3Jl bGVhc2VfbGlzdDoNCj4gPiArICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIGUs ICZzY2hlZC0+ZW50cmllcywgbGlzdCkgew0KPiA+ICsgICAgICAgICAgICAgbGlzdF9kZWwoJmVu dHJ5LT5saXN0KTsNCj4gPiArICAgICAgICAgICAgIGtmcmVlKGVudHJ5KTsNCj4gPiArICAgICB9 DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiBlcnI7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyBpbnQgdGNmX2dhdGVfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSwN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBubGF0dHIgKmVzdCwgc3RydWN0IHRj X2FjdGlvbiAqKmEsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICBpbnQgb3ZyLCBpbnQgYmlu ZCwgYm9vbCBydG5sX2hlbGQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGNm X3Byb3RvICp0cCwgdTMyIGZsYWdzLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKSB7DQo+ID4gKyAgICAgc3RydWN0IHRjX2FjdGlvbl9u ZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCBnYXRlX25ldF9pZCk7DQo+ID4gKyAgICAgZW51bSB0 a19vZmZzZXRzIHRrX29mZnNldCA9IFRLX09GRlNfVEFJOw0KPiA+ICsgICAgIHN0cnVjdCBubGF0 dHIgKnRiW1RDQV9HQVRFX01BWCArIDFdOw0KPiA+ICsgICAgIHN0cnVjdCB0Y2ZfY2hhaW4gKmdv dG9fY2ggPSBOVUxMOw0KPiA+ICsgICAgIHN0cnVjdCB0Y2ZnX2dhdGVfZW50cnkgKm5leHQ7DQo+ ID4gKyAgICAgc3RydWN0IHRjZl9nYXRlX3BhcmFtcyAqcDsNCj4gPiArICAgICBzdHJ1Y3QgZ2F0 ZV9hY3Rpb24gKmdhY3Q7DQo+ID4gKyAgICAgczMyIGNsb2NraWQgPSBDTE9DS19UQUk7DQo+ID4g KyAgICAgc3RydWN0IHRjX2dhdGUgKnBhcm07DQo+ID4gKyAgICAgc3RydWN0IHRjZl9nYXRlICpn Ow0KPiA+ICsgICAgIGludCByZXQgPSAwLCBlcnI7DQo+ID4gKyAgICAgdTY0IGJhc2V0aW1lID0g MDsNCj4gPiArICAgICB1MzIgZ2ZsYWdzID0gMDsNCj4gPiArICAgICBzMzIgcHJpbyA9IC0xOw0K PiA+ICsgICAgIGt0aW1lX3Qgc3RhcnQ7DQo+ID4gKyAgICAgdTMyIGluZGV4Ow0KPiA+ICsNCj4g PiArICAgICBpZiAoIW5sYSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ ICsNCj4gPiArICAgICBlcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBUQ0FfR0FURV9NQVgsIG5s YSwgZ2F0ZV9wb2xpY3ksIGV4dGFjayk7DQo+ID4gKyAgICAgaWYgKGVyciA8IDApDQo+ID4gKyAg ICAgICAgICAgICByZXR1cm4gZXJyOw0KPiA+ICsNCj4gPiArICAgICBpZiAoIXRiW1RDQV9HQVRF X1BBUk1TXSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICsgICAgIHBh cm0gPSBubGFfZGF0YSh0YltUQ0FfR0FURV9QQVJNU10pOw0KPiA+ICsgICAgIGluZGV4ID0gcGFy bS0+aW5kZXg7DQo+ID4gKyAgICAgZXJyID0gdGNmX2lkcl9jaGVja19hbGxvYyh0biwgJmluZGV4 LCBhLCBiaW5kKTsNCj4gPiArICAgICBpZiAoZXJyIDwgMCkNCj4gPiArICAgICAgICAgICAgIHJl dHVybiBlcnI7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChlcnIgJiYgYmluZCkNCj4gPiArICAgICAg ICAgICAgIHJldHVybiAwOw0KPiA+ICsNCj4gPiArICAgICBpZiAoIWVycikgew0KPiA+ICsgICAg ICAgICAgICAgcmV0ID0gdGNmX2lkcl9jcmVhdGVfZnJvbV9mbGFncyh0biwgaW5kZXgsIGVzdCwg YSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFj dF9nYXRlX29wcywgYmluZCwgZmxhZ3MpOw0KPiA+ICsgICAgICAgICAgICAgaWYgKHJldCkgew0K PiA+ICsgICAgICAgICAgICAgICAgICAgICB0Y2ZfaWRyX2NsZWFudXAodG4sIGluZGV4KTsNCj4g PiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gPiArICAgICAgICAgICAgIH0N Cj4gPiArDQo+ID4gKyAgICAgICAgICAgICByZXQgPSBBQ1RfUF9DUkVBVEVEOw0KPiA+ICsgICAg IH0gZWxzZSBpZiAoIW92cikgew0KPiA+ICsgICAgICAgICAgICAgdGNmX2lkcl9yZWxlYXNlKCph LCBiaW5kKTsNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUVYSVNUOw0KPiA+ICsgICAgIH0N Cj4gPiArDQo+ID4gKyAgICAgaWYgKHRiW1RDQV9HQVRFX1BSSU9SSVRZXSkNCj4gPiArICAgICAg ICAgICAgIHByaW8gPSBubGFfZ2V0X3MzMih0YltUQ0FfR0FURV9QUklPUklUWV0pOw0KPiA+ICsN Cj4gPiArICAgICBpZiAodGJbVENBX0dBVEVfQkFTRV9USU1FXSkNCj4gPiArICAgICAgICAgICAg IGJhc2V0aW1lID0gbmxhX2dldF91NjQodGJbVENBX0dBVEVfQkFTRV9USU1FXSk7DQo+ID4gKw0K PiA+ICsgICAgIGlmICh0YltUQ0FfR0FURV9GTEFHU10pDQo+ID4gKyAgICAgICAgICAgICBnZmxh Z3MgPSBubGFfZ2V0X3UzMih0YltUQ0FfR0FURV9GTEFHU10pOw0KPiA+ICsNCj4gPiArICAgICBp ZiAodGJbVENBX0dBVEVfQ0xPQ0tJRF0pIHsNCj4gPiArICAgICAgICAgICAgIGNsb2NraWQgPSBu bGFfZ2V0X3MzMih0YltUQ0FfR0FURV9DTE9DS0lEXSk7DQo+ID4gKyAgICAgICAgICAgICBzd2l0 Y2ggKGNsb2NraWQpIHsNCj4gPiArICAgICAgICAgICAgIGNhc2UgQ0xPQ0tfUkVBTFRJTUU6DQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgIHRrX29mZnNldCA9IFRLX09GRlNfUkVBTDsNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgICAgICAgICBjYXNlIENMT0NL X01PTk9UT05JQzoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgdGtfb2Zmc2V0ID0gVEtfT0ZG U19NQVg7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICAgICAg ICAgY2FzZSBDTE9DS19CT09UVElNRToNCj4gPiArICAgICAgICAgICAgICAgICAgICAgdGtfb2Zm c2V0ID0gVEtfT0ZGU19CT09UOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4g PiArICAgICAgICAgICAgIGNhc2UgQ0xPQ0tfVEFJOg0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICB0a19vZmZzZXQgPSBUS19PRkZTX1RBSTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgYnJl YWs7DQo+ID4gKyAgICAgICAgICAgICBkZWZhdWx0Og0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICBOTF9TRVRfRVJSX01TRyhleHRhY2ssICJJbnZhbGlkICdjbG9ja2lkJyIpOw0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICBnb3RvIHJlbGVhc2VfaWRyOw0KPiA+ICsgICAgICAgICAgICAgfQ0K PiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgZXJyID0gdGNmX2FjdGlvbl9jaGVja19jdHJs YWN0KHBhcm0tPmFjdGlvbiwgdHAsICZnb3RvX2NoLCBleHRhY2spOw0KPiA+ICsgICAgIGlmIChl cnIgPCAwKQ0KPiA+ICsgICAgICAgICAgICAgZ290byByZWxlYXNlX2lkcjsNCj4gPiArDQo+ID4g KyAgICAgZyA9IHRvX2dhdGUoKmEpOw0KPiA+ICsNCj4gPiArICAgICBnYWN0ID0ga3phbGxvYyhz aXplb2YoKmdhY3QpLCBHRlBfS0VSTkVMKTsNCj4gPiArICAgICBpZiAoIWdhY3QpIHsNCj4gPiAr ICAgICAgICAgICAgIGVyciA9IC1FTk9NRU07DQo+ID4gKyAgICAgICAgICAgICBnb3RvIHB1dF9j aGFpbjsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIHAgPSBnZXRfZ2F0ZV9wYXJhbShn YWN0KTsNCj4gPiArDQo+ID4gKyAgICAgSU5JVF9MSVNUX0hFQUQoJnAtPmVudHJpZXMpOw0KPiA+ ICsgICAgIGlmICh0YltUQ0FfR0FURV9FTlRSWV9MSVNUXSkgew0KPiA+ICsgICAgICAgICAgICAg ZXJyID0gcGFyc2VfZ2F0ZV9saXN0KHRiW1RDQV9HQVRFX0VOVFJZX0xJU1RdLCBwLCBleHRhY2sp Ow0KPiA+ICsgICAgICAgICAgICAgaWYgKGVyciA8IDApDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgIGdvdG8gcmVsZWFzZV9tZW07DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBpZiAo dGJbVENBX0dBVEVfQ1lDTEVfVElNRV0pIHsNCj4gPiArICAgICAgICAgICAgIHAtPnRjZmdfY3lj bGV0aW1lID0gbmxhX2dldF91NjQodGJbVENBX0dBVEVfQ1lDTEVfVElNRV0pOw0KPiA+ICsgICAg IH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICBzdHJ1Y3QgdGNmZ19nYXRlX2VudHJ5ICplbnRy eTsNCj4gPiArICAgICAgICAgICAgIGt0aW1lX3QgY3ljbGUgPSAwOw0KPiA+ICsNCj4gPiArICAg ICAgICAgICAgIGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZwLT5lbnRyaWVzLCBsaXN0KQ0K PiA+ICsgICAgICAgICAgICAgICAgICAgICBjeWNsZSA9IGt0aW1lX2FkZF9ucyhjeWNsZSwgZW50 cnktPmludGVydmFsKTsNCj4gPiArICAgICAgICAgICAgIHAtPnRjZmdfY3ljbGV0aW1lID0gY3lj bGU7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBpZiAodGJbVENBX0dBVEVfQ1lDTEVf VElNRV9FWFRdKQ0KPiA+ICsgICAgICAgICAgICAgcC0+dGNmZ19jeWNsZXRpbWVfZXh0ID0NCj4g PiArICAgICAgICAgICAgICAgICAgICAgbmxhX2dldF91NjQodGJbVENBX0dBVEVfQ1lDTEVfVElN RV9FWFRdKTsNCj4gPiArDQo+ID4gKyAgICAgcC0+dGNmZ19wcmlvcml0eSA9IHByaW87DQo+ID4g KyAgICAgcC0+dGNmZ19iYXNldGltZSA9IGJhc2V0aW1lOw0KPiA+ICsgICAgIHAtPnRjZmdfY2xv Y2tpZCA9IGNsb2NraWQ7DQo+ID4gKyAgICAgcC0+dGNmZ19mbGFncyA9IGdmbGFnczsNCj4gPiAr DQo+ID4gKyAgICAgZ2FjdC0+dGtfb2Zmc2V0ID0gdGtfb2Zmc2V0Ow0KPiA+ICsgICAgIHNwaW5f bG9ja19pbml0KCZnYWN0LT5lbnRyeV9sb2NrKTsNCj4gPiArICAgICBocnRpbWVyX2luaXQoJmdh Y3QtPmhpdGltZXIsIGNsb2NraWQsIEhSVElNRVJfTU9ERV9BQlMpOw0KPiA+ICsgICAgIGdhY3Qt PmhpdGltZXIuZnVuY3Rpb24gPSBnYXRlX3RpbWVyX2Z1bmM7DQo+ID4gKw0KPiA+ICsgICAgIGVy ciA9IGdhdGVfZ2V0X3N0YXJ0X3RpbWUoZ2FjdCwgJnN0YXJ0KTsNCj4gPiArICAgICBpZiAoZXJy IDwgMCkgew0KPiA+ICsgICAgICAgICAgICAgTkxfU0VUX0VSUl9NU0coZXh0YWNrLA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIkludGVybmFsIGVycm9yOiBmYWlsZWQgZ2V0IHN0 YXJ0IHRpbWUiKTsNCj4gPiArICAgICAgICAgICAgIGdvdG8gcmVsZWFzZV9tZW07DQo+ID4gKyAg ICAgfQ0KPiA+ICsNCj4gPiArICAgICBnYWN0LT5jdXJyZW50X2Nsb3NlX3RpbWUgPSBzdGFydDsN Cj4gPiArICAgICBnYWN0LT5jdXJyZW50X2dhdGVfc3RhdHVzID0gR0FURV9BQ1RfR0FURV9PUEVO IHwNCj4gPiArIEdBVEVfQUNUX1BFTkRJTkc7DQo+ID4gKw0KPiA+ICsgICAgIG5leHQgPSBsaXN0 X2ZpcnN0X2VudHJ5KCZwLT5lbnRyaWVzLCBzdHJ1Y3QgdGNmZ19nYXRlX2VudHJ5LCBsaXN0KTsN Cj4gPiArICAgICByY3VfYXNzaWduX3BvaW50ZXIoZ2FjdC0+bmV4dF9lbnRyeSwgbmV4dCk7DQo+ ID4gKw0KPiA+ICsgICAgIGdhdGVfc3RhcnRfdGltZXIoZ2FjdCwgc3RhcnQpOw0KPiA+ICsNCj4g PiArICAgICBzcGluX2xvY2tfYmgoJmctPnRjZl9sb2NrKTsNCj4gPiArICAgICBnb3RvX2NoID0g dGNmX2FjdGlvbl9zZXRfY3RybGFjdCgqYSwgcGFybS0+YWN0aW9uLCBnb3RvX2NoKTsNCj4gPiAr ICAgICBnYWN0ID0gcmN1X3JlcGxhY2VfcG9pbnRlcihnLT5hY3RnLCBnYWN0LA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tkZXBfaXNfaGVsZCgmZy0+dGNmX2xvY2sp KTsNCj4gPiArICAgICBzcGluX3VubG9ja19iaCgmZy0+dGNmX2xvY2spOw0KPiA+ICsNCj4gPiAr ICAgICBpZiAoZ290b19jaCkNCj4gPiArICAgICAgICAgICAgIHRjZl9jaGFpbl9wdXRfYnlfYWN0 KGdvdG9fY2gpOw0KPiA+ICsgICAgIGlmIChnYWN0KQ0KPiA+ICsgICAgICAgICAgICAga2ZyZWVf cmN1KGdhY3QsIHJjdSk7DQo+IA0KPiBUaGlzIGxlYWtzIGVudHJpZXMuIEZvciBleGFtcGxlLCB0 dW5uZWwga2V5IGFjdGlvbiBpbXBsZW1lbnRzDQo+IHR1bm5lbF9rZXlfcmVsZWFzZV9wYXJhbXMo KSBoZWxwZXIgdGhhdCBpcyB1c2VkIGJ5IGJvdGggaW5pdCBhbmQgcmVsZWFzZQ0KPiBjb2RlLiBJ IGd1ZXNzIHRoYXQgd291bGQgYmUgdGhlIGJlc3QgYXBwcm9hY2ggaGVyZSBhcyB3ZWxsLg0KPiAN Cg0KV2lsbCByZWZlciB0aGUgdHVubmVsIGFjdGlvbi4gVGhhbmtzIGZvciBwb2ludGluZyBvdXQu DQoNCj4gPiArDQo+ID4gKyAgICAgaWYgKHJldCA9PSBBQ1RfUF9DUkVBVEVEKQ0KPiA+ICsgICAg ICAgICAgICAgdGNmX2lkcl9pbnNlcnQodG4sICphKTsNCj4gPiArICAgICByZXR1cm4gcmV0Ow0K PiA+ICsNCj4gPiArcmVsZWFzZV9tZW06DQo+ID4gKyAgICAga2ZyZWUoZ2FjdCk7DQo+ID4gK3B1 dF9jaGFpbjoNCj4gPiArICAgICBpZiAoZ290b19jaCkNCj4gPiArICAgICAgICAgICAgIHRjZl9j aGFpbl9wdXRfYnlfYWN0KGdvdG9fY2gpOw0KPiA+ICtyZWxlYXNlX2lkcjoNCj4gPiArICAgICB0 Y2ZfaWRyX3JlbGVhc2UoKmEsIGJpbmQpOw0KPiA+ICsgICAgIHJldHVybiBlcnI7DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHRjZl9nYXRlX2NsZWFudXAoc3RydWN0IHRjX2FjdGlv biAqYSkgew0KPiA+ICsgICAgIHN0cnVjdCB0Y2ZfZ2F0ZSAqZyA9IHRvX2dhdGUoYSk7DQo+ID4g KyAgICAgc3RydWN0IHRjZmdfZ2F0ZV9lbnRyeSAqZW50cnksICpuOw0KPiA+ICsgICAgIHN0cnVj dCB0Y2ZfZ2F0ZV9wYXJhbXMgKnA7DQo+ID4gKyAgICAgc3RydWN0IGdhdGVfYWN0aW9uICpnYWN0 Ow0KPiA+ICsNCj4gPiArICAgICBzcGluX2xvY2tfYmgoJmctPnRjZl9sb2NrKTsNCj4gPiArICAg ICBnYWN0ID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChnLT5hY3RnLA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tkZXBfaXNfaGVsZCgmZy0+dGNmX2xv Y2spKTsNCj4gPiArICAgICBocnRpbWVyX2NhbmNlbCgmZ2FjdC0+aGl0aW1lcik7DQo+ID4gKw0K PiA+ICsgICAgIHAgPSBnZXRfZ2F0ZV9wYXJhbShnYWN0KTsNCj4gPiArICAgICBsaXN0X2Zvcl9l YWNoX2VudHJ5X3NhZmUoZW50cnksIG4sICZwLT5lbnRyaWVzLCBsaXN0KSB7DQo+ID4gKyAgICAg ICAgICAgICBsaXN0X2RlbCgmZW50cnktPmxpc3QpOw0KPiA+ICsgICAgICAgICAgICAga2ZyZWUo ZW50cnkpOw0KPiA+ICsgICAgIH0NCj4gPiArICAgICBzcGluX3VubG9ja19iaCgmZy0+dGNmX2xv Y2spOw0KPiA+ICsNCj4gPiArICAgICBrZnJlZV9yY3UoZ2FjdCwgcmN1KTsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIGludCBkdW1waW5nX2VudHJ5KHN0cnVjdCBza19idWZmICpza2IsDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGNmZ19nYXRlX2VudHJ5ICplbnRyeSkg ew0KPiA+ICsgICAgIHN0cnVjdCBubGF0dHIgKml0ZW07DQo+ID4gKw0KPiA+ICsgICAgIGl0ZW0g PSBubGFfbmVzdF9zdGFydF9ub2ZsYWcoc2tiLCBUQ0FfR0FURV9PTkVfRU5UUlkpOw0KPiA+ICsg ICAgIGlmICghaXRlbSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRU5PU1BDOw0KPiA+ICsN Cj4gPiArICAgICBpZiAobmxhX3B1dF91MzIoc2tiLCBUQ0FfR0FURV9FTlRSWV9JTkRFWCwgZW50 cnktPmluZGV4KSkNCj4gPiArICAgICAgICAgICAgIGdvdG8gbmxhX3B1dF9mYWlsdXJlOw0KPiA+ ICsNCj4gPiArICAgICBpZiAoZW50cnktPmdhdGVfc3RhdGUgJiYgbmxhX3B1dF9mbGFnKHNrYiwg VENBX0dBVEVfRU5UUllfR0FURSkpDQo+ID4gKyAgICAgICAgICAgICBnb3RvIG5sYV9wdXRfZmFp bHVyZTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKG5sYV9wdXRfdTMyKHNrYiwgVENBX0dBVEVfRU5U UllfSU5URVJWQUwsIGVudHJ5LT5pbnRlcnZhbCkpDQo+ID4gKyAgICAgICAgICAgICBnb3RvIG5s YV9wdXRfZmFpbHVyZTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKG5sYV9wdXRfczMyKHNrYiwgVENB X0dBVEVfRU5UUllfTUFYX09DVEVUUywgZW50cnktDQo+ID5tYXhvY3RldHMpKQ0KPiA+ICsgICAg ICAgICAgICAgZ290byBubGFfcHV0X2ZhaWx1cmU7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChubGFf cHV0X3MzMihza2IsIFRDQV9HQVRFX0VOVFJZX0lQViwgZW50cnktPmlwdikpDQo+ID4gKyAgICAg ICAgICAgICBnb3RvIG5sYV9wdXRfZmFpbHVyZTsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIG5s YV9uZXN0X2VuZChza2IsIGl0ZW0pOw0KPiA+ICsNCj4gPiArbmxhX3B1dF9mYWlsdXJlOg0KPiA+ ICsgICAgIG5sYV9uZXN0X2NhbmNlbChza2IsIGl0ZW0pOw0KPiA+ICsgICAgIHJldHVybiAtMTsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB0Y2ZfZ2F0ZV9kdW1wKHN0cnVjdCBza19i dWZmICpza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmEsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICBpbnQgYmluZCwgaW50IHJlZikgew0KPiA+ICsgICAgIHVuc2lnbmVkIGNoYXIgKmIgPSBza2Jf dGFpbF9wb2ludGVyKHNrYik7DQo+ID4gKyAgICAgc3RydWN0IHRjZl9nYXRlICpnID0gdG9fZ2F0 ZShhKTsNCj4gPiArICAgICBzdHJ1Y3QgdGNfZ2F0ZSBvcHQgPSB7DQo+ID4gKyAgICAgICAgICAg ICAuaW5kZXggICAgPSBnLT50Y2ZfaW5kZXgsDQo+ID4gKyAgICAgICAgICAgICAucmVmY250ICAg PSByZWZjb3VudF9yZWFkKCZnLT50Y2ZfcmVmY250KSAtIHJlZiwNCj4gPiArICAgICAgICAgICAg IC5iaW5kY250ICA9IGF0b21pY19yZWFkKCZnLT50Y2ZfYmluZGNudCkgLSBiaW5kLA0KPiA+ICsg ICAgIH07DQo+ID4gKyAgICAgc3RydWN0IHRjZmdfZ2F0ZV9lbnRyeSAqZW50cnk7DQo+ID4gKyAg ICAgc3RydWN0IGdhdGVfYWN0aW9uICpnYWN0Ow0KPiA+ICsgICAgIHN0cnVjdCB0Y2ZfZ2F0ZV9w YXJhbXMgKnA7DQo+ID4gKyAgICAgc3RydWN0IG5sYXR0ciAqZW50cnlfbGlzdDsNCj4gPiArICAg ICBzdHJ1Y3QgdGNmX3QgdDsNCj4gPiArDQo+ID4gKyAgICAgc3Bpbl9sb2NrX2JoKCZnLT50Y2Zf bG9jayk7DQo+ID4gKyAgICAgb3B0LmFjdGlvbiA9IGctPnRjZl9hY3Rpb247DQo+ID4gKyAgICAg Z2FjdCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZy0+YWN0ZywNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZGVwX2lzX2hlbGQoJmctPnRjZl9sb2Nr KSk7DQo+ID4gKw0KPiA+ICsgICAgIHAgPSBnZXRfZ2F0ZV9wYXJhbShnYWN0KTsNCj4gPiArDQo+ ID4gKyAgICAgaWYgKG5sYV9wdXQoc2tiLCBUQ0FfR0FURV9QQVJNUywgc2l6ZW9mKG9wdCksICZv cHQpKQ0KPiA+ICsgICAgICAgICAgICAgZ290byBubGFfcHV0X2ZhaWx1cmU7DQo+ID4gKw0KPiA+ ICsgICAgIGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIFRDQV9HQVRFX0JBU0VfVElNRSwNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgcC0+dGNmZ19iYXNldGltZSwgVENBX0dBVEVf UEFEKSkNCj4gPiArICAgICAgICAgICAgIGdvdG8gbmxhX3B1dF9mYWlsdXJlOw0KPiA+ICsNCj4g PiArICAgICBpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBUQ0FfR0FURV9DWUNMRV9USU1FLA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBwLT50Y2ZnX2N5Y2xldGltZSwgVENBX0dB VEVfUEFEKSkNCj4gPiArICAgICAgICAgICAgIGdvdG8gbmxhX3B1dF9mYWlsdXJlOw0KPiA+ICsN Cj4gPiArICAgICBpZiAobmxhX3B1dF91NjRfNjRiaXQoc2tiLCBUQ0FfR0FURV9DWUNMRV9USU1F X0VYVCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgcC0+dGNmZ19jeWNsZXRpbWVf ZXh0LCBUQ0FfR0FURV9QQUQpKQ0KPiA+ICsgICAgICAgICAgICAgZ290byBubGFfcHV0X2ZhaWx1 cmU7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChubGFfcHV0X3MzMihza2IsIFRDQV9HQVRFX0NMT0NL SUQsIHAtPnRjZmdfY2xvY2tpZCkpDQo+ID4gKyAgICAgICAgICAgICBnb3RvIG5sYV9wdXRfZmFp bHVyZTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKG5sYV9wdXRfdTMyKHNrYiwgVENBX0dBVEVfRkxB R1MsIHAtPnRjZmdfZmxhZ3MpKQ0KPiA+ICsgICAgICAgICAgICAgZ290byBubGFfcHV0X2ZhaWx1 cmU7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChubGFfcHV0X3MzMihza2IsIFRDQV9HQVRFX1BSSU9S SVRZLCBwLT50Y2ZnX3ByaW9yaXR5KSkNCj4gPiArICAgICAgICAgICAgIGdvdG8gbmxhX3B1dF9m YWlsdXJlOw0KPiA+ICsNCj4gPiArICAgICBlbnRyeV9saXN0ID0gbmxhX25lc3Rfc3RhcnRfbm9m bGFnKHNrYiwgVENBX0dBVEVfRU5UUllfTElTVCk7DQo+ID4gKyAgICAgaWYgKCFlbnRyeV9saXN0 KQ0KPiA+ICsgICAgICAgICAgICAgZ290byBubGFfcHV0X2ZhaWx1cmU7DQo+ID4gKw0KPiA+ICsg ICAgIGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZwLT5lbnRyaWVzLCBsaXN0KSB7DQo+ID4g KyAgICAgICAgICAgICBpZiAoZHVtcGluZ19lbnRyeShza2IsIGVudHJ5KSA8IDApDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgIGdvdG8gbmxhX3B1dF9mYWlsdXJlOw0KPiA+ICsgICAgIH0NCj4g PiArDQo+ID4gKyAgICAgbmxhX25lc3RfZW5kKHNrYiwgZW50cnlfbGlzdCk7DQo+ID4gKw0KPiA+ ICsgICAgIHRjZl90bV9kdW1wKCZ0LCAmZy0+dGNmX3RtKTsNCj4gPiArICAgICBpZiAobmxhX3B1 dF82NGJpdChza2IsIFRDQV9HQVRFX1RNLCBzaXplb2YodCksICZ0LCBUQ0FfR0FURV9QQUQpKQ0K PiA+ICsgICAgICAgICAgICAgZ290byBubGFfcHV0X2ZhaWx1cmU7DQo+ID4gKyAgICAgc3Bpbl91 bmxvY2tfYmgoJmctPnRjZl9sb2NrKTsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIHNrYi0+bGVu Ow0KPiA+ICsNCj4gPiArbmxhX3B1dF9mYWlsdXJlOg0KPiA+ICsgICAgIHNwaW5fdW5sb2NrX2Jo KCZnLT50Y2ZfbG9jayk7DQo+ID4gKyAgICAgbmxtc2dfdHJpbShza2IsIGIpOw0KPiA+ICsgICAg IHJldHVybiAtMTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB0Y2ZfZ2F0ZV93YWxr ZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLA0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsIGludCB0eXBlLA0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uX29wcyAqb3Bz LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpl eHRhY2spIHsNCj4gPiArICAgICBzdHJ1Y3QgdGNfYWN0aW9uX25ldCAqdG4gPSBuZXRfZ2VuZXJp YyhuZXQsIGdhdGVfbmV0X2lkKTsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIHRjZl9nZW5lcmlj X3dhbGtlcih0biwgc2tiLCBjYiwgdHlwZSwgb3BzLCBleHRhY2spOyB9DQo+ID4gKw0KPiA+ICtz dGF0aWMgdm9pZCB0Y2ZfZ2F0ZV9zdGF0c191cGRhdGUoc3RydWN0IHRjX2FjdGlvbiAqYSwgdTY0 IGJ5dGVzLCB1MzINCj4gcGFja2V0cywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHU2NCBsYXN0dXNlLCBib29sIGh3KSB7DQo+ID4gKyAgICAgc3RydWN0IHRjZl9nYXRlICpn ID0gdG9fZ2F0ZShhKTsNCj4gPiArICAgICBzdHJ1Y3QgdGNmX3QgKnRtID0gJmctPnRjZl90bTsN Cj4gPiArDQo+ID4gKyAgICAgdGNmX2FjdGlvbl91cGRhdGVfc3RhdHMoYSwgYnl0ZXMsIHBhY2tl dHMsIGZhbHNlLCBodyk7DQo+ID4gKyAgICAgdG0tPmxhc3R1c2UgPSBtYXhfdCh1NjQsIHRtLT5s YXN0dXNlLCBsYXN0dXNlKTsgfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB0Y2ZfZ2F0ZV9zZWFy Y2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNfYWN0aW9uICoqYSwgdTMyDQo+ID4gK2luZGV4 KSB7DQo+ID4gKyAgICAgc3RydWN0IHRjX2FjdGlvbl9uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0 LCBnYXRlX25ldF9pZCk7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiB0Y2ZfaWRyX3NlYXJjaCh0 biwgYSwgaW5kZXgpOyB9DQo+ID4gKw0KPiA+ICtzdGF0aWMgc2l6ZV90IHRjZl9nYXRlX2dldF9m aWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KSB7DQo+ID4gKyAgICAgcmV0dXJu IG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgdGNfZ2F0ZSkpOyB9DQo+ID4gKw0KPiA+ICtz dGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2dhdGVfb3BzID0gew0KPiA+ICsgICAgIC5r aW5kICAgICAgICAgICA9ICAgICAgICJnYXRlIiwNCj4gPiArICAgICAuaWQgICAgICAgICAgICAg PSAgICAgICBUQ0FfSURfR0FURSwNCj4gPiArICAgICAub3duZXIgICAgICAgICAgPSAgICAgICBU SElTX01PRFVMRSwNCj4gPiArICAgICAuYWN0ICAgICAgICAgICAgPSAgICAgICB0Y2ZfZ2F0ZV9h Y3QsDQo+ID4gKyAgICAgLmR1bXAgICAgICAgICAgID0gICAgICAgdGNmX2dhdGVfZHVtcCwNCj4g PiArICAgICAuaW5pdCAgICAgICAgICAgPSAgICAgICB0Y2ZfZ2F0ZV9pbml0LA0KPiA+ICsgICAg IC5jbGVhbnVwICAgICAgICA9ICAgICAgIHRjZl9nYXRlX2NsZWFudXAsDQo+ID4gKyAgICAgLndh bGsgICAgICAgICAgID0gICAgICAgdGNmX2dhdGVfd2Fsa2VyLA0KPiA+ICsgICAgIC5zdGF0c191 cGRhdGUgICA9ICAgICAgIHRjZl9nYXRlX3N0YXRzX3VwZGF0ZSwNCj4gPiArICAgICAuZ2V0X2Zp bGxfc2l6ZSAgPSAgICAgICB0Y2ZfZ2F0ZV9nZXRfZmlsbF9zaXplLA0KPiA+ICsgICAgIC5sb29r dXAgICAgICAgICA9ICAgICAgIHRjZl9nYXRlX3NlYXJjaCwNCj4gPiArICAgICAuc2l6ZSAgICAg ICAgICAgPSAgICAgICBzaXplb2Yoc3RydWN0IGdhdGVfYWN0aW9uKSwNCj4gPiArfTsNCj4gPiAr DQo+ID4gK3N0YXRpYyBfX25ldF9pbml0IGludCBnYXRlX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5l dCkgew0KPiA+ICsgICAgIHN0cnVjdCB0Y19hY3Rpb25fbmV0ICp0biA9IG5ldF9nZW5lcmljKG5l dCwgZ2F0ZV9uZXRfaWQpOw0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gdGNfYWN0aW9uX25ldF9p bml0KG5ldCwgdG4sICZhY3RfZ2F0ZV9vcHMpOyB9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBf X25ldF9leGl0IGdhdGVfZXhpdF9uZXQoc3RydWN0IGxpc3RfaGVhZCAqbmV0X2xpc3QpIHsNCj4g PiArICAgICB0Y19hY3Rpb25fbmV0X2V4aXQobmV0X2xpc3QsIGdhdGVfbmV0X2lkKTsgfQ0KPiA+ ICsNCj4gPiArc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBnYXRlX25ldF9vcHMgPSB7 DQo+ID4gKyAgICAgLmluaXQgPSBnYXRlX2luaXRfbmV0LA0KPiA+ICsgICAgIC5leGl0X2JhdGNo ID0gZ2F0ZV9leGl0X25ldCwNCj4gPiArICAgICAuaWQgICA9ICZnYXRlX25ldF9pZCwNCj4gPiAr ICAgICAuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdGNfYWN0aW9uX25ldCksIH07DQo+ID4gKw0KPiA+ ICtzdGF0aWMgaW50IF9faW5pdCBnYXRlX2luaXRfbW9kdWxlKHZvaWQpIHsNCj4gPiArICAgICBy ZXR1cm4gdGNmX3JlZ2lzdGVyX2FjdGlvbigmYWN0X2dhdGVfb3BzLCAmZ2F0ZV9uZXRfb3BzKTsg fQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgX19leGl0IGdhdGVfY2xlYW51cF9tb2R1bGUodm9p ZCkgew0KPiA+ICsgICAgIHRjZl91bnJlZ2lzdGVyX2FjdGlvbigmYWN0X2dhdGVfb3BzLCAmZ2F0 ZV9uZXRfb3BzKTsgfQ0KPiA+ICsNCj4gPiArbW9kdWxlX2luaXQoZ2F0ZV9pbml0X21vZHVsZSk7 DQo+ID4gK21vZHVsZV9leGl0KGdhdGVfY2xlYW51cF9tb2R1bGUpOw0KPiA+ICtNT0RVTEVfTElD RU5TRSgiR1BMIHYyIik7DQoNClRoYW5rcyBhIGxvdC4NCg0KQnIsDQpQbyBMaXUNCg0K