Received: by 2002:ac0:98c7:0:0:0:0:0 with SMTP id g7-v6csp6231402imd; Wed, 31 Oct 2018 08:41:12 -0700 (PDT) X-Google-Smtp-Source: AJdET5fxfxOlFEFK/XUXHTrXe05FsTHO1u9H571mUtEbNHvNj2PAdE4uvi4I1l9WuqgQ8VCREJI6 X-Received: by 2002:a62:c60a:: with SMTP id m10-v6mr3987513pfg.15.1541000472624; Wed, 31 Oct 2018 08:41:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1541000472; cv=none; d=google.com; s=arc-20160816; b=dt2dv1Ai/AygEucLY8nym9s2DHWmG/FmNH16tfimBwoxwrFTC7zNWEvoBkDLbuf5F2 wgm9Pu5HMd5vWUi6HUYuW8SkOKwyH+hEXIkCnt4i/dvXegTN6VueKebCjGpI5VVE2PWb e2nQuQXzToyWiMBAi1Ei1MViGE+60wi1Com87I9UaknpicUaCaaqsf1LWXW8taoxG+O3 WcM3bVnS6uZ4tpMYaA8a+xFP8+IwUU8dxczitGxcCv27r/duzQTyMhYSrJ+SDRTMAI7d geqDQpBj1WxdSXDi5bu5NMl4RvXgXBmWcCoQPvL+zLzV7H2KNY47c8OknUmAXqG4jDwu 0MZw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-id:spamdiagnosticmetadata:spamdiagnosticoutput :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from:dkim-signature; bh=W4f8LA4wki1cA3TplMuvoqgYusGfV7uKgfa+qzf8/f4=; b=QwBp61PRFmaCLIUzwL/wvlhKuDRwZyT1Jm6lLOyTKwd++KN1PzK0GBprU3yO6Qmgyy eIgPnDA7NzVlgFgr36e6aOmBAK3RrJF7nTIShUHHfvQJ6h5vuLGvZWqRAqjYk7NSqs5J miB0cmFHifpq7TIowXZw4bvVBnFnvZ7Kmw77drYufTKF704CMlUrQKZL3rBzJV+3SxbQ dgb9CLr/QNW83nVaobkE9AAJfv6oacG++11d6oUbjZJHFG/R1jmUbnzhJTOTzO6rZzs2 Hn3qAmre9aNen9vIblYFoh732Sj/su5r3rx+WBteEK4epjJi8GE+6TGfrygdnuCLqWul GT3Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@microsoft.com header.s=selector1 header.b=nS5aodqq; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=microsoft.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u15-v6si5198133plq.353.2018.10.31.08.40.57; Wed, 31 Oct 2018 08:41:12 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@microsoft.com header.s=selector1 header.b=nS5aodqq; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=microsoft.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729674AbeKAAip (ORCPT + 99 others); Wed, 31 Oct 2018 20:38:45 -0400 Received: from mail-eopbgr680103.outbound.protection.outlook.com ([40.107.68.103]:56982 "EHLO NAM04-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727623AbeKAAio (ORCPT ); Wed, 31 Oct 2018 20:38:44 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=W4f8LA4wki1cA3TplMuvoqgYusGfV7uKgfa+qzf8/f4=; b=nS5aodqqFlTHxjri0CFN7NsRGPryTlLAVz39o2TZ1E2JjjSXlzT/kPSi97yjJcYmtALtQKqNfX5CGtKxVrzYEwebs8IxSD3czWpL1BtJCX9j4VfOLbm1EmYpKBdN/LEluashMJacHWMOL7pG8mWidEBDVmoZmmHY1ha8ZToSKyw= Received: from DM5PR21MB0508.namprd21.prod.outlook.com (10.172.91.142) by DM5PR21MB0859.namprd21.prod.outlook.com (10.173.172.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1294.4; Wed, 31 Oct 2018 15:40:02 +0000 Received: from DM5PR21MB0508.namprd21.prod.outlook.com ([fe80::909e:78d3:5637:c4fe]) by DM5PR21MB0508.namprd21.prod.outlook.com ([fe80::909e:78d3:5637:c4fe%6]) with mapi id 15.20.1294.014; Wed, 31 Oct 2018 15:40:02 +0000 From: Pasha Tatashin To: Alexander Duyck , "linux-mm@kvack.org" , "akpm@linux-foundation.org" CC: Pasha Tatashin , "mhocko@suse.com" , "dave.jiang@intel.com" , "linux-kernel@vger.kernel.org" , "willy@infradead.org" , "davem@davemloft.net" , "yi.z.zhang@linux.intel.com" , "khalid.aziz@oracle.com" , "rppt@linux.vnet.ibm.com" , "vbabka@suse.cz" , "sparclinux@vger.kernel.org" , "dan.j.williams@intel.com" , "ldufour@linux.vnet.ibm.com" , "mgorman@techsingularity.net" , "mingo@kernel.org" , "kirill.shutemov@linux.intel.com" Subject: Re: [mm PATCH v4 3/6] mm: Use memblock/zone specific iterator for handling deferred page init Thread-Topic: [mm PATCH v4 3/6] mm: Use memblock/zone specific iterator for handling deferred page init Thread-Index: AQHUZnS64EfZUXoWUkmxUsXxcYCLGqU5kw0A Date: Wed, 31 Oct 2018 15:40:02 +0000 Message-ID: <5b937f29-a6e1-6622-b035-246229021d3e@microsoft.com> References: <20181017235043.17213.92459.stgit@localhost.localdomain> <20181017235419.17213.68425.stgit@localhost.localdomain> In-Reply-To: <20181017235419.17213.68425.stgit@localhost.localdomain> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [73.69.118.222] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;DM5PR21MB0859;6:T627lwbCfCDAi0gczBlgaA0HDJ1AU37Rc9OmIs9R66qk0zoRdptZFUHgVtpoG5qe8Xe3/nUKoVHYHDkNeiS1vwMjFi8FE9VkK/zHU0kAT2EeJ6HMUyt5n05Xr7knuT7gwLT9FmwAIq7cWpWaXGW9+fS4raQsG59QlDwrvbl/0KrPBCAb6oTogPgtFuYIhrMrEUF/E5WAOw5Kypncnc2pCp6WLB62GuLKvxeKn3j9STZ0VjDpkoX171WwSTf9cgjDRIw5LMMFY1yahzgtGncNb8t92kPmmCY1h/XhDnX/ErVYEiTTB0pre6LcjbPfN6gyH5TeRCQsaojQV09Qawt4jgPKmFmU1Od1thGP/zzsPzPbGhQaWIIadGZKlKVFqiUbydHtnCfctk54+YJvFyOe0gizhq5DGxIusiuAAjGny2PQqR/x7tb2W43JmNp1whHBkNAGsF82rLLAM3Oh5uALPw==;5:ixrJfhEwwS5e/bjXhfVayslpBM7Oy8lgxK+gNqyyCuuB//Knk7SdNjrOJOVzw0sdzW7tLfQpFnMKRq2/2zipsTODpq2xVy+HmYAJvtxJpZ6kdGVc63TowOma7BYcI0x9YHJk3uPiRxPSojK5+C3cBGWeCyrqQDky3bay28qnRp0=;7:IeyQbdYvh1Ya0u7Gtc+iHbPK74ABTGfHZI4IP+o9mKC9imMmpXnOWP2bndcNfIZtL/UU+gghGl3LlqDo2xvSks0WF1E6C5Wodmrax46DVKCIJEO8dblwsaibrBjOhfnZXrHCjnlagoTZcu18Y7al/A== x-ms-office365-filtering-correlation-id: 390a914d-35b4-420d-6e4e-08d63f471f7d x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(7020095)(4652040)(8989299)(5600074)(711020)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);SRVR:DM5PR21MB0859; x-ms-traffictypediagnostic: DM5PR21MB0859: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Pavel.Tatashin@microsoft.com; x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(228905959029699); x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(8211001083)(6040522)(8220035)(2401047)(5005006)(8121501046)(93006095)(93001095)(3231382)(944501410)(52105095)(2018427008)(3002001)(10201501046)(6055026)(148016)(149066)(150057)(6041310)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123560045)(20161123564045)(201708071742011)(7699051)(76991095);SRVR:DM5PR21MB0859;BCL:0;PCL:0;RULEID:;SRVR:DM5PR21MB0859; x-forefront-prvs: 084285FC5C x-forefront-antispam-report: SFV:NSPM;SFS:(10019020)(39860400002)(366004)(376002)(346002)(396003)(136003)(43544003)(199004)(189003)(2906002)(229853002)(2501003)(5250100002)(6246003)(446003)(2900100001)(4744004)(6436002)(71200400001)(6512007)(7736002)(71190400001)(53946003)(11346002)(476003)(14454004)(31696002)(68736007)(478600001)(72206003)(86362001)(53936002)(86612001)(186003)(2201001)(305945005)(486006)(2616005)(10290500003)(6116002)(26005)(106356001)(105586002)(22452003)(66066001)(6506007)(316002)(8936002)(54906003)(110136005)(8676002)(10090500001)(4326008)(81166006)(81156014)(25786009)(31686004)(7416002)(99286004)(256004)(14444005)(97736004)(6486002)(5660300001)(76176011)(102836004)(36756003)(53546011)(3846002);DIR:OUT;SFP:1102;SCL:1;SRVR:DM5PR21MB0859;H:DM5PR21MB0508.namprd21.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: microsoft.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: MmIxIq40jJz/PX86040Fkho+K1olYEjyBL0pT0RGSFJW12rZOiDwtsATH+1AbcSgCZ/geK/UG9txqtfRapCAGnxVBaIlZbFLaNoLxIpPam1sx1rdINjYfMLtXCrXFTygAHNivcywy+Vs88UViYox7IgPBfvaebkGF3fbqOKGali+EAPQn4ryPMh2SZorjAeyFCQlD9KivdKCZTUNbYth8A1dczcnK0W0lKNz3FSB+8Zt95+sgAkfSXOJ8LbJ9yN4+DU6djcP4YTu+rNf0G71al7E9v3IwvM7fvAIQLOH2d/LRUdKJkZivBiqY9zRHPUJViw/ujQMZ4Ri4xOGvPC30miH39qs+e8CDfZHHk29ASg= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="utf-8" Content-ID: <0CBB0709521B0046948BA091DCB31062@namprd21.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: microsoft.com X-MS-Exchange-CrossTenant-Network-Message-Id: 390a914d-35b4-420d-6e4e-08d63f471f7d X-MS-Exchange-CrossTenant-originalarrivaltime: 31 Oct 2018 15:40:02.1354 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 72f988bf-86f1-41af-91ab-2d7cd011db47 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR21MB0859 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org DQoNCk9uIDEwLzE3LzE4IDc6NTQgUE0sIEFsZXhhbmRlciBEdXljayB3cm90ZToNCj4gVGhpcyBw YXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGl0ZXJhdG9yIGZvcl9lYWNoX2ZyZWVfbWVtX3Bmbl9yYW5n ZV9pbl96b25lLg0KPiANCj4gVGhpcyBpdGVyYXRvciB3aWxsIHRha2UgY2FyZSBvZiBtYWtpbmcg c3VyZSBhIGdpdmVuIG1lbW9yeSByYW5nZSBwcm92aWRlZA0KPiBpcyBpbiBmYWN0IGNvbnRhaW5l ZCB3aXRoaW4gYSB6b25lLiBJdCB0YWtlcyBhcmUgb2YgYWxsIHRoZSBib3VuZHMgY2hlY2tpbmcN Cj4gd2Ugd2VyZSBkb2luZyBpbiBkZWZlcnJlZF9ncm93X3pvbmUsIGFuZCBkZWZlcnJlZF9pbml0 X21lbW1hcC4gSW4gYWRkaXRpb24NCj4gaXQgc2hvdWxkIGhlbHAgdG8gc3BlZWQgdXAgdGhlIHNl YXJjaCBhIGJpdCBieSBpdGVyYXRpbmcgdW50aWwgdGhlIGVuZCBvZiBhDQo+IHJhbmdlIGlzIGdy ZWF0ZXIgdGhhbiB0aGUgc3RhcnQgb2YgdGhlIHpvbmUgcGZuIHJhbmdlLCBhbmQgd2lsbCBleGl0 DQo+IGNvbXBsZXRlbHkgaWYgdGhlIHN0YXJ0IGlzIGJleW9uZCB0aGUgZW5kIG9mIHRoZSB6b25l Lg0KPiANCj4gVGhpcyBwYXRjaCBhZGRzIHlldCBhbm90aGVyIGl0ZXJhdG9yIGNhbGxlZA0KPiBm b3JfZWFjaF9mcmVlX21lbV9yYW5nZV9pbl96b25lX2Zyb20gYW5kIHRoZW4gdXNlcyBpdCB0byBz dXBwb3J0DQo+IGluaXRpYWxpemluZyBhbmQgZnJlZWluZyBwYWdlcyBpbiBncm91cHMgbm8gbGFy Z2VyIHRoYW4gTUFYX09SREVSX05SX1BBR0VTLg0KPiBCeSBkb2luZyB0aGlzIHdlIGNhbiBncmVh dGx5IGltcHJvdmUgdGhlIGNhY2hlIGxvY2FsaXR5IG9mIHRoZSBwYWdlcyB3aGlsZQ0KPiB3ZSBk byBzZXZlcmFsIGxvb3BzIG92ZXIgdGhlbSBpbiB0aGUgaW5pdCBhbmQgZnJlZWluZyBwcm9jZXNz Lg0KPiANCj4gV2UgYXJlIGFibGUgdG8gdGlnaHRlbiB0aGUgbG9vcHMgYXMgYSByZXN1bHQgc2lu Y2Ugd2Ugb25seSByZWFsbHkgbmVlZCB0aGUNCj4gY2hlY2tzIGZvciBmaXJzdF9pbml0X3BmbiBp biBvdXIgZmlyc3QgaXRlcmF0aW9uIGFuZCBhZnRlciB0aGF0IHdlIGNhbg0KPiBhc3N1bWUgdGhh dCBhbGwgZnV0dXJlIHZhbHVlcyB3aWxsIGJlIGdyZWF0ZXIgdGhhbiB0aGlzLiBTbyBJIGhhdmUg YWRkZWQgYQ0KPiBmdW5jdGlvbiBjYWxsZWQgZGVmZXJyZWRfaW5pdF9tZW1fcGZuX3JhbmdlX2lu X3pvbmUgdGhhdCBwcmltZXMgdGhlDQo+IGl0ZXJhdG9ycyBhbmQgaWYgaXQgZmFpbHMgd2UgY2Fu IGp1c3QgZXhpdC4NCj4gDQo+IE9uIG15IHg4Nl82NCB0ZXN0IHN5c3RlbSB3aXRoIDM4NEdCIG9m IG1lbW9yeSBwZXIgbm9kZSBJIHNhdyBhIHJlZHVjdGlvbiBpbg0KPiBpbml0aWFsaXphdGlvbiB0 aW1lIGZyb20gMS44NXMgdG8gMS4zOHMgYXMgYSByZXN1bHQgb2YgdGhpcyBwYXRjaC4NCj4gDQo+ IFNpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBEdXljayA8YWxleGFuZGVyLmguZHV5Y2tAbGludXgu aW50ZWwuY29tPg0KDQpIaSBBbGV4LA0KDQpDb3VsZCB5b3UgcGxlYXNlIHNwbGl0IHRoaXMgcGF0 Y2ggaW50byB0d28gcGFydHM6DQoNCjEuIEFkZCBkZWZlcnJlZF9pbml0X21heG9yZGVyKCkNCjIu IEFkZCBtZW1ibG9jayBpdGVyYXRvcj8NCg0KVGhpcyB3b3VsZCBhbGxvdyBhIGJldHRlciBiaXNl Y3RpbmcgaW4gY2FzZSBvZiBwcm9ibGVtcy4gQ2hhbmluZyB0d28NCmxvb3BzIGludG8gZGVmZXJy ZWRfaW5pdF9tYXhvcmRlcigpIHdoaWxlIGEgZ29vZCBpZGVhLCBpcyBzdGlsbA0Kbm9uLXRyaXZp YWwgYW5kIG1pZ2h0IGxlYWQgdG8gYnVncy4NCg0KVGhhbmsgeW91LA0KUGF2ZWwNCg0KPiAtLS0N Cj4gIGluY2x1ZGUvbGludXgvbWVtYmxvY2suaCB8ICAgNTggKysrKysrKysrKysrKysrDQo+ICBt bS9tZW1ibG9jay5jICAgICAgICAgICAgfCAgIDYzICsrKysrKysrKysrKysrKysNCj4gIG1tL3Bh Z2VfYWxsb2MuYyAgICAgICAgICB8ICAxNzYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KystLS0tLS0tLS0tLS0tLQ0KPiAgMyBmaWxlcyBjaGFuZ2VkLCAyNDIgaW5zZXJ0aW9ucygrKSwg NTUgZGVsZXRpb25zKC0pDQo+IA0KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1ibG9j ay5oIGIvaW5jbHVkZS9saW51eC9tZW1ibG9jay5oDQo+IGluZGV4IGFlZTI5OWE2YWE3Ni4uMmRk ZDFiYWZkZDAzIDEwMDY0NA0KPiAtLS0gYS9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgNCj4gKysr IGIvaW5jbHVkZS9saW51eC9tZW1ibG9jay5oDQo+IEBAIC0xNzgsNiArMTc4LDI1IEBAIHZvaWQg X19uZXh0X3Jlc2VydmVkX21lbV9yZWdpb24odTY0ICppZHgsIHBoeXNfYWRkcl90ICpvdXRfc3Rh cnQsDQo+ICAJCQkgICAgICBwX3N0YXJ0LCBwX2VuZCwgcF9uaWQpKQ0KPiAgDQo+ICAvKioNCj4g KyAqIGZvcl9lYWNoX21lbV9yYW5nZV9mcm9tIC0gaXRlcmF0ZSB0aHJvdWdoIG1lbWJsb2NrIGFy ZWFzIGZyb20gdHlwZV9hIGFuZCBub3QNCj4gKyAqIGluY2x1ZGVkIGluIHR5cGVfYi4gT3IganVz dCB0eXBlX2EgaWYgdHlwZV9iIGlzIE5VTEwuDQo+ICsgKiBAaTogdTY0IHVzZWQgYXMgbG9vcCB2 YXJpYWJsZQ0KPiArICogQHR5cGVfYTogcHRyIHRvIG1lbWJsb2NrX3R5cGUgdG8gaXRlcmF0ZQ0K PiArICogQHR5cGVfYjogcHRyIHRvIG1lbWJsb2NrX3R5cGUgd2hpY2ggZXhjbHVkZXMgZnJvbSB0 aGUgaXRlcmF0aW9uDQo+ICsgKiBAbmlkOiBub2RlIHNlbGVjdG9yLCAlTlVNQV9OT19OT0RFIGZv ciBhbGwgbm9kZXMNCj4gKyAqIEBmbGFnczogcGljayBmcm9tIGJsb2NrcyBiYXNlZCBvbiBtZW1v cnkgYXR0cmlidXRlcw0KPiArICogQHBfc3RhcnQ6IHB0ciB0byBwaHlzX2FkZHJfdCBmb3Igc3Rh cnQgYWRkcmVzcyBvZiB0aGUgcmFuZ2UsIGNhbiBiZSAlTlVMTA0KPiArICogQHBfZW5kOiBwdHIg dG8gcGh5c19hZGRyX3QgZm9yIGVuZCBhZGRyZXNzIG9mIHRoZSByYW5nZSwgY2FuIGJlICVOVUxM DQo+ICsgKiBAcF9uaWQ6IHB0ciB0byBpbnQgZm9yIG5pZCBvZiB0aGUgcmFuZ2UsIGNhbiBiZSAl TlVMTA0KPiArICovDQo+ICsjZGVmaW5lIGZvcl9lYWNoX21lbV9yYW5nZV9mcm9tKGksIHR5cGVf YSwgdHlwZV9iLCBuaWQsIGZsYWdzLAkJXA0KPiArCQkJICAgcF9zdGFydCwgcF9lbmQsIHBfbmlk KQkJCVwNCj4gKwlmb3IgKGkgPSAwLCBfX25leHRfbWVtX3JhbmdlKCZpLCBuaWQsIGZsYWdzLCB0 eXBlX2EsIHR5cGVfYiwJXA0KPiArCQkJCSAgICAgcF9zdGFydCwgcF9lbmQsIHBfbmlkKTsJCVwN Cj4gKwkgICAgIGkgIT0gKHU2NClVTExPTkdfTUFYOwkJCQkJXA0KPiArCSAgICAgX19uZXh0X21l bV9yYW5nZSgmaSwgbmlkLCBmbGFncywgdHlwZV9hLCB0eXBlX2IsCQlcDQo+ICsJCQkgICAgICBw X3N0YXJ0LCBwX2VuZCwgcF9uaWQpKQ0KPiArLyoqDQo+ICAgKiBmb3JfZWFjaF9tZW1fcmFuZ2Vf cmV2IC0gcmV2ZXJzZSBpdGVyYXRlIHRocm91Z2ggbWVtYmxvY2sgYXJlYXMgZnJvbQ0KPiAgICog dHlwZV9hIGFuZCBub3QgaW5jbHVkZWQgaW4gdHlwZV9iLiBPciBqdXN0IHR5cGVfYSBpZiB0eXBl X2IgaXMgTlVMTC4NCj4gICAqIEBpOiB1NjQgdXNlZCBhcyBsb29wIHZhcmlhYmxlDQo+IEBAIC0y NDgsNiArMjY3LDQ1IEBAIHZvaWQgX19uZXh0X21lbV9wZm5fcmFuZ2UoaW50ICppZHgsIGludCBu aWQsIHVuc2lnbmVkIGxvbmcgKm91dF9zdGFydF9wZm4sDQo+ICAJICAgICBpID49IDA7IF9fbmV4 dF9tZW1fcGZuX3JhbmdlKCZpLCBuaWQsIHBfc3RhcnQsIHBfZW5kLCBwX25pZCkpDQo+ICAjZW5k aWYgLyogQ09ORklHX0hBVkVfTUVNQkxPQ0tfTk9ERV9NQVAgKi8NCj4gIA0KPiArI2lmZGVmIENP TkZJR19ERUZFUlJFRF9TVFJVQ1RfUEFHRV9JTklUDQo+ICt2b2lkIF9fbmV4dF9tZW1fcGZuX3Jh bmdlX2luX3pvbmUodTY0ICppZHgsIHN0cnVjdCB6b25lICp6b25lLA0KPiArCQkJCSAgdW5zaWdu ZWQgbG9uZyAqb3V0X3NwZm4sDQo+ICsJCQkJICB1bnNpZ25lZCBsb25nICpvdXRfZXBmbik7DQo+ ICsvKioNCj4gKyAqIGZvcl9lYWNoX2ZyZWVfbWVtX3JhbmdlX2luX3pvbmUgLSBpdGVyYXRlIHRo cm91Z2ggem9uZSBzcGVjaWZpYyBmcmVlDQo+ICsgKiBtZW1ibG9jayBhcmVhcw0KPiArICogQGk6 IHU2NCB1c2VkIGFzIGxvb3AgdmFyaWFibGUNCj4gKyAqIEB6b25lOiB6b25lIGluIHdoaWNoIGFs bCBvZiB0aGUgbWVtb3J5IGJsb2NrcyByZXNpZGUNCj4gKyAqIEBwX3N0YXJ0OiBwdHIgdG8gcGh5 c19hZGRyX3QgZm9yIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIHJhbmdlLCBjYW4gYmUgJU5VTEwNCj4g KyAqIEBwX2VuZDogcHRyIHRvIHBoeXNfYWRkcl90IGZvciBlbmQgYWRkcmVzcyBvZiB0aGUgcmFu Z2UsIGNhbiBiZSAlTlVMTA0KPiArICoNCj4gKyAqIFdhbGtzIG92ZXIgZnJlZSAobWVtb3J5ICYm ICFyZXNlcnZlZCkgYXJlYXMgb2YgbWVtYmxvY2sgaW4gYSBzcGVjaWZpYw0KPiArICogem9uZS4g QXZhaWxhYmxlIGFzIHNvb24gYXMgbWVtYmxvY2sgaXMgaW5pdGlhbGl6ZWQuDQo+ICsgKi8NCj4g KyNkZWZpbmUgZm9yX2VhY2hfZnJlZV9tZW1fcGZuX3JhbmdlX2luX3pvbmUoaSwgem9uZSwgcF9z dGFydCwgcF9lbmQpCVwNCj4gKwlmb3IgKGkgPSAwLAkJCQkJCQlcDQo+ICsJICAgICBfX25leHRf bWVtX3Bmbl9yYW5nZV9pbl96b25lKCZpLCB6b25lLCBwX3N0YXJ0LCBwX2VuZCk7CVwNCj4gKwkg ICAgIGkgIT0gKHU2NClVTExPTkdfTUFYOwkJCQkJXA0KPiArCSAgICAgX19uZXh0X21lbV9wZm5f cmFuZ2VfaW5fem9uZSgmaSwgem9uZSwgcF9zdGFydCwgcF9lbmQpKQ0KPiArDQo+ICsvKioNCj4g KyAqIGZvcl9lYWNoX2ZyZWVfbWVtX3JhbmdlX2luX3pvbmVfZnJvbSAtIGl0ZXJhdGUgdGhyb3Vn aCB6b25lIHNwZWNpZmljDQo+ICsgKiBmcmVlIG1lbWJsb2NrIGFyZWFzIGZyb20gYSBnaXZlbiBw b2ludA0KPiArICogQGk6IHU2NCB1c2VkIGFzIGxvb3AgdmFyaWFibGUNCj4gKyAqIEB6b25lOiB6 b25lIGluIHdoaWNoIGFsbCBvZiB0aGUgbWVtb3J5IGJsb2NrcyByZXNpZGUNCj4gKyAqIEBwX3N0 YXJ0OiBwdHIgdG8gcGh5c19hZGRyX3QgZm9yIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIHJhbmdlLCBj YW4gYmUgJU5VTEwNCj4gKyAqIEBwX2VuZDogcHRyIHRvIHBoeXNfYWRkcl90IGZvciBlbmQgYWRk cmVzcyBvZiB0aGUgcmFuZ2UsIGNhbiBiZSAlTlVMTA0KPiArICoNCj4gKyAqIFdhbGtzIG92ZXIg ZnJlZSAobWVtb3J5ICYmICFyZXNlcnZlZCkgYXJlYXMgb2YgbWVtYmxvY2sgaW4gYSBzcGVjaWZp Yw0KPiArICogem9uZSwgY29udGludWluZyBmcm9tIGN1cnJlbnQgcG9zaXRpb24uIEF2YWlsYWJs ZSBhcyBzb29uIGFzIG1lbWJsb2NrIGlzDQo+ICsgKiBpbml0aWFsaXplZC4NCj4gKyAqLw0KPiAr I2RlZmluZSBmb3JfZWFjaF9mcmVlX21lbV9wZm5fcmFuZ2VfaW5fem9uZV9mcm9tKGksIHpvbmUs IHBfc3RhcnQsIHBfZW5kKSBcDQo+ICsJZm9yICg7IGkgIT0gKHU2NClVTExPTkdfTUFYOwkJCQkJ ICBcDQo+ICsJICAgICBfX25leHRfbWVtX3Bmbl9yYW5nZV9pbl96b25lKCZpLCB6b25lLCBwX3N0 YXJ0LCBwX2VuZCkpDQo+ICsNCj4gKyNlbmRpZiAvKiBDT05GSUdfREVGRVJSRURfU1RSVUNUX1BB R0VfSU5JVCAqLw0KPiArDQo+ICAvKioNCj4gICAqIGZvcl9lYWNoX2ZyZWVfbWVtX3JhbmdlIC0g aXRlcmF0ZSB0aHJvdWdoIGZyZWUgbWVtYmxvY2sgYXJlYXMNCj4gICAqIEBpOiB1NjQgdXNlZCBh cyBsb29wIHZhcmlhYmxlDQo+IGRpZmYgLS1naXQgYS9tbS9tZW1ibG9jay5jIGIvbW0vbWVtYmxv Y2suYw0KPiBpbmRleCBmMmVmMzkxNWEzNTYuLmFiMzU0NWUzNTZiNyAxMDA2NDQNCj4gLS0tIGEv bW0vbWVtYmxvY2suYw0KPiArKysgYi9tbS9tZW1ibG9jay5jDQo+IEBAIC0xMjM5LDYgKzEyMzks NjkgQEAgaW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19zZXRfbm9kZShwaHlzX2FkZHJfdCBi YXNlLCBwaHlzX2FkZHJfdCBzaXplLA0KPiAgCXJldHVybiAwOw0KPiAgfQ0KPiAgI2VuZGlmIC8q IENPTkZJR19IQVZFX01FTUJMT0NLX05PREVfTUFQICovDQo+ICsjaWZkZWYgQ09ORklHX0RFRkVS UkVEX1NUUlVDVF9QQUdFX0lOSVQNCj4gKy8qKg0KPiArICogX19uZXh0X21lbV9wZm5fcmFuZ2Vf aW5fem9uZSAtIGl0ZXJhdG9yIGZvciBmb3JfZWFjaF8qX3JhbmdlX2luX3pvbmUoKQ0KPiArICoN Cj4gKyAqIEBpZHg6IHBvaW50ZXIgdG8gdTY0IGxvb3AgdmFyaWFibGUNCj4gKyAqIEB6b25lOiB6 b25lIGluIHdoaWNoIGFsbCBvZiB0aGUgbWVtb3J5IGJsb2NrcyByZXNpZGUNCj4gKyAqIEBvdXRf c3RhcnQ6IHB0ciB0byB1bG9uZyBmb3Igc3RhcnQgcGZuIG9mIHRoZSByYW5nZSwgY2FuIGJlICVO VUxMDQo+ICsgKiBAb3V0X2VuZDogcHRyIHRvIHVsb25nIGZvciBlbmQgcGZuIG9mIHRoZSByYW5n ZSwgY2FuIGJlICVOVUxMDQo+ICsgKg0KPiArICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBi ZSBhIHpvbmUvcGZuIHNwZWNpZmljIHdyYXBwZXIgZm9yIHRoZQ0KPiArICogZm9yX2VhY2hfbWVt X3JhbmdlIHR5cGUgaXRlcmF0b3JzLiBTcGVjaWZpY2FsbHkgdGhleSBhcmUgdXNlZCBpbiB0aGUN Cj4gKyAqIGRlZmVycmVkIG1lbW9yeSBpbml0IHJvdXRpbmVzIGFuZCBhcyBzdWNoIHdlIHdlcmUg ZHVwbGljYXRpbmcgbXVjaCBvZg0KPiArICogdGhpcyBsb2dpYyB0aHJvdWdob3V0IHRoZSBjb2Rl LiBTbyBpbnN0ZWFkIG9mIGhhdmluZyBpdCBpbiBtdWx0aXBsZQ0KPiArICogbG9jYXRpb25zIGl0 IHNlZW1lZCBsaWtlIGl0IHdvdWxkIG1ha2UgbW9yZSBzZW5zZSB0byBjZW50cmFsaXplIHRoaXMg dG8NCj4gKyAqIG9uZSBuZXcgaXRlcmF0b3IgdGhhdCBkb2VzIGV2ZXJ5dGhpbmcgdGhleSBuZWVk Lg0KPiArICovDQo+ICt2b2lkIF9faW5pdF9tZW1ibG9jaw0KPiArX19uZXh0X21lbV9wZm5fcmFu Z2VfaW5fem9uZSh1NjQgKmlkeCwgc3RydWN0IHpvbmUgKnpvbmUsDQo+ICsJCQkgICAgIHVuc2ln bmVkIGxvbmcgKm91dF9zcGZuLCB1bnNpZ25lZCBsb25nICpvdXRfZXBmbikNCj4gK3sNCj4gKwlp bnQgem9uZV9uaWQgPSB6b25lX3RvX25pZCh6b25lKTsNCj4gKwlwaHlzX2FkZHJfdCBzcGEsIGVw YTsNCj4gKwlpbnQgbmlkOw0KPiArDQo+ICsJX19uZXh0X21lbV9yYW5nZShpZHgsIHpvbmVfbmlk LCBNRU1CTE9DS19OT05FLA0KPiArCQkJICZtZW1ibG9jay5tZW1vcnksICZtZW1ibG9jay5yZXNl cnZlZCwNCj4gKwkJCSAmc3BhLCAmZXBhLCAmbmlkKTsNCj4gKw0KPiArCXdoaWxlICgqaWR4ICE9 IFVMTE9OR19NQVgpIHsNCj4gKwkJdW5zaWduZWQgbG9uZyBlcGZuID0gUEZOX0RPV04oZXBhKTsN Cj4gKwkJdW5zaWduZWQgbG9uZyBzcGZuID0gUEZOX1VQKHNwYSk7DQo+ICsNCj4gKwkJLyoNCj4g KwkJICogVmVyaWZ5IHRoZSBlbmQgaXMgYXQgbGVhc3QgcGFzdCB0aGUgc3RhcnQgb2YgdGhlIHpv bmUgYW5kDQo+ICsJCSAqIHRoYXQgd2UgaGF2ZSBhdCBsZWFzdCBvbmUgUEZOIHRvIGluaXRpYWxp emUuDQo+ICsJCSAqLw0KPiArCQlpZiAoem9uZS0+em9uZV9zdGFydF9wZm4gPCBlcGZuICYmIHNw Zm4gPCBlcGZuKSB7DQo+ICsJCQkvKiBpZiB3ZSB3ZW50IHRvbyBmYXIganVzdCBzdG9wIHNlYXJj aGluZyAqLw0KPiArCQkJaWYgKHpvbmVfZW5kX3Bmbih6b25lKSA8PSBzcGZuKQ0KPiArCQkJCWJy ZWFrOw0KPiArDQo+ICsJCQlpZiAob3V0X3NwZm4pDQo+ICsJCQkJKm91dF9zcGZuID0gbWF4KHpv bmUtPnpvbmVfc3RhcnRfcGZuLCBzcGZuKTsNCj4gKwkJCWlmIChvdXRfZXBmbikNCj4gKwkJCQkq b3V0X2VwZm4gPSBtaW4oem9uZV9lbmRfcGZuKHpvbmUpLCBlcGZuKTsNCj4gKw0KPiArCQkJcmV0 dXJuOw0KPiArCQl9DQo+ICsNCj4gKwkJX19uZXh0X21lbV9yYW5nZShpZHgsIHpvbmVfbmlkLCBN RU1CTE9DS19OT05FLA0KPiArCQkJCSAmbWVtYmxvY2subWVtb3J5LCAmbWVtYmxvY2sucmVzZXJ2 ZWQsDQo+ICsJCQkJICZzcGEsICZlcGEsICZuaWQpOw0KPiArCX0NCj4gKw0KPiArCS8qIHNpZ25h bCBlbmQgb2YgaXRlcmF0aW9uICovDQo+ICsJKmlkeCA9IFVMTE9OR19NQVg7DQo+ICsJaWYgKG91 dF9zcGZuKQ0KPiArCQkqb3V0X3NwZm4gPSBVTE9OR19NQVg7DQo+ICsJaWYgKG91dF9lcGZuKQ0K PiArCQkqb3V0X2VwZm4gPSAwOw0KPiArfQ0KPiArDQo+ICsjZW5kaWYgLyogQ09ORklHX0RFRkVS UkVEX1NUUlVDVF9QQUdFX0lOSVQgKi8NCj4gIA0KPiAgI2lmZGVmIENPTkZJR19IQVZFX01FTUJM T0NLX1BGTl9WQUxJRA0KPiAgdW5zaWduZWQgbG9uZyBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tf bmV4dF92YWxpZF9wZm4odW5zaWduZWQgbG9uZyBwZm4pDQo+IGRpZmYgLS1naXQgYS9tbS9wYWdl X2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMNCj4gaW5kZXggYTc2NmExNWZhZDgxLi4yMGU5ZWIz NWQ3NWQgMTAwNjQ0DQo+IC0tLSBhL21tL3BhZ2VfYWxsb2MuYw0KPiArKysgYi9tbS9wYWdlX2Fs bG9jLmMNCj4gQEAgLTE1MTIsMTkgKzE1MTIsMTAzIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nICBf X2luaXQgZGVmZXJyZWRfaW5pdF9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSwNCj4gIAlyZXR1cm4g KG5yX3BhZ2VzKTsNCj4gIH0NCj4gIA0KPiArLyoNCj4gKyAqIFRoaXMgZnVuY3Rpb24gaXMgbWVh bnQgdG8gcHJlLWxvYWQgdGhlIGl0ZXJhdG9yIGZvciB0aGUgem9uZSBpbml0Lg0KPiArICogU3Bl Y2lmaWNhbGx5IGl0IHdhbGtzIHRocm91Z2ggdGhlIHJhbmdlcyB1bnRpbCB3ZSBhcmUgY2F1Z2h0 IHVwIHRvIHRoZQ0KPiArICogZmlyc3RfaW5pdF9wZm4gdmFsdWUgYW5kIGV4aXRzIHRoZXJlLiBJ ZiB3ZSBuZXZlciBlbmNvdW50ZXIgdGhlIHZhbHVlIHdlDQo+ICsgKiByZXR1cm4gZmFsc2UgaW5k aWNhdGluZyB0aGVyZSBhcmUgbm8gdmFsaWQgcmFuZ2VzIGxlZnQuDQo+ICsgKi8NCj4gK3N0YXRp YyBib29sIF9faW5pdA0KPiArZGVmZXJyZWRfaW5pdF9tZW1fcGZuX3JhbmdlX2luX3pvbmUodTY0 ICppLCBzdHJ1Y3Qgem9uZSAqem9uZSwNCj4gKwkJCQkgICAgdW5zaWduZWQgbG9uZyAqc3Bmbiwg dW5zaWduZWQgbG9uZyAqZXBmbiwNCj4gKwkJCQkgICAgdW5zaWduZWQgbG9uZyBmaXJzdF9pbml0 X3BmbikNCj4gK3sNCj4gKwl1NjQgajsNCj4gKw0KPiArCS8qDQo+ICsJICogU3RhcnQgb3V0IGJ5 IHdhbGtpbmcgdGhyb3VnaCB0aGUgcmFuZ2VzIGluIHRoaXMgem9uZSB0aGF0IGhhdmUNCj4gKwkg KiBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuIFdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcg d2l0aCB0aGVtDQo+ICsJICogc28gd2UganVzdCBuZWVkIHRvIGZsdXNoIHRoZW0gb3V0IG9mIHRo ZSBzeXN0ZW0uDQo+ICsJICovDQo+ICsJZm9yX2VhY2hfZnJlZV9tZW1fcGZuX3JhbmdlX2luX3pv bmUoaiwgem9uZSwgc3BmbiwgZXBmbikgew0KPiArCQlpZiAoKmVwZm4gPD0gZmlyc3RfaW5pdF9w Zm4pDQo+ICsJCQljb250aW51ZTsNCj4gKwkJaWYgKCpzcGZuIDwgZmlyc3RfaW5pdF9wZm4pDQo+ ICsJCQkqc3BmbiA9IGZpcnN0X2luaXRfcGZuOw0KPiArCQkqaSA9IGo7DQo+ICsJCXJldHVybiB0 cnVlOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiBmYWxzZTsNCj4gK30NCj4gKw0KPiArLyoNCj4g KyAqIEluaXRpYWxpemUgYW5kIGZyZWUgcGFnZXMuIFdlIGRvIGl0IGluIHR3byBsb29wczogZmly c3Qgd2UgaW5pdGlhbGl6ZQ0KPiArICogc3RydWN0IHBhZ2UsIHRoYW4gZnJlZSB0byBidWRkeSBh bGxvY2F0b3IsIGJlY2F1c2Ugd2hpbGUgd2UgYXJlDQo+ICsgKiBmcmVlaW5nIHBhZ2VzIHdlIGNh biBhY2Nlc3MgcGFnZXMgdGhhdCBhcmUgYWhlYWQgKGNvbXB1dGluZyBidWRkeQ0KPiArICogcGFn ZSBpbiBfX2ZyZWVfb25lX3BhZ2UoKSkuDQo+ICsgKg0KPiArICogSW4gb3JkZXIgdG8gdHJ5IGFu ZCBrZWVwIHNvbWUgbWVtb3J5IGluIHRoZSBjYWNoZSB3ZSBoYXZlIHRoZSBsb29wDQo+ICsgKiBi cm9rZW4gYWxvbmcgbWF4IHBhZ2Ugb3JkZXIgYm91bmRhcmllcy4gVGhpcyB3YXkgd2Ugd2lsbCBu b3QgY2F1c2UNCj4gKyAqIGFueSBpc3N1ZXMgd2l0aCB0aGUgYnVkZHkgcGFnZSBjb21wdXRhdGlv bi4NCj4gKyAqLw0KPiArc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0DQo+ICtkZWZlcnJlZF9p bml0X21heG9yZGVyKHU2NCAqaSwgc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgKnN0 YXJ0X3BmbiwNCj4gKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgKmVuZF9wZm4pDQo+ICt7DQo+ICsJ dW5zaWduZWQgbG9uZyBtb19wZm4gPSBBTElHTigqc3RhcnRfcGZuICsgMSwgTUFYX09SREVSX05S X1BBR0VTKTsNCj4gKwl1bnNpZ25lZCBsb25nIHNwZm4gPSAqc3RhcnRfcGZuLCBlcGZuID0gKmVu ZF9wZm47DQo+ICsJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IDA7DQo+ICsJdTY0IGogPSAqaTsN Cj4gKw0KPiArCS8qIEZpcnN0IHdlIGxvb3AgdGhyb3VnaCBhbmQgaW5pdGlhbGl6ZSB0aGUgcGFn ZSB2YWx1ZXMgKi8NCj4gKwlmb3JfZWFjaF9mcmVlX21lbV9wZm5fcmFuZ2VfaW5fem9uZV9mcm9t KGosIHpvbmUsICZzcGZuLCAmZXBmbikgew0KPiArCQl1bnNpZ25lZCBsb25nIHQ7DQo+ICsNCj4g KwkJaWYgKG1vX3BmbiA8PSBzcGZuKQ0KPiArCQkJYnJlYWs7DQo+ICsNCj4gKwkJdCA9IG1pbiht b19wZm4sIGVwZm4pOw0KPiArCQlucl9wYWdlcyArPSBkZWZlcnJlZF9pbml0X3BhZ2VzKHpvbmUs IHNwZm4sIHQpOw0KPiArDQo+ICsJCWlmIChtb19wZm4gPD0gZXBmbikNCj4gKwkJCWJyZWFrOw0K PiArCX0NCj4gKw0KPiArCS8qIFJlc2V0IHZhbHVlcyBhbmQgbm93IGxvb3AgdGhyb3VnaCBmcmVl aW5nIHBhZ2VzIGFzIG5lZWRlZCAqLw0KPiArCWogPSAqaTsNCj4gKw0KPiArCWZvcl9lYWNoX2Zy ZWVfbWVtX3Bmbl9yYW5nZV9pbl96b25lX2Zyb20oaiwgem9uZSwgc3RhcnRfcGZuLCBlbmRfcGZu KSB7DQo+ICsJCXVuc2lnbmVkIGxvbmcgdDsNCj4gKw0KPiArCQlpZiAobW9fcGZuIDw9ICpzdGFy dF9wZm4pDQo+ICsJCQlicmVhazsNCj4gKw0KPiArCQl0ID0gbWluKG1vX3BmbiwgKmVuZF9wZm4p Ow0KPiArCQlkZWZlcnJlZF9mcmVlX3BhZ2VzKCpzdGFydF9wZm4sIHQpOw0KPiArCQkqc3RhcnRf cGZuID0gdDsNCj4gKw0KPiArCQlpZiAobW9fcGZuIDwgKmVuZF9wZm4pDQo+ICsJCQlicmVhazsN Cj4gKwl9DQo+ICsNCj4gKwkvKiBTdG9yZSBvdXIgY3VycmVudCB2YWx1ZXMgdG8gYmUgcmV1c2Vk IG9uIHRoZSBuZXh0IGl0ZXJhdGlvbiAqLw0KPiArCSppID0gajsNCj4gKw0KPiArCXJldHVybiBu cl9wYWdlczsNCj4gK30NCj4gKw0KPiAgLyogSW5pdGlhbGlzZSByZW1haW5pbmcgbWVtb3J5IG9u IGEgbm9kZSAqLw0KPiAgc3RhdGljIGludCBfX2luaXQgZGVmZXJyZWRfaW5pdF9tZW1tYXAodm9p ZCAqZGF0YSkNCj4gIHsNCj4gIAlwZ19kYXRhX3QgKnBnZGF0ID0gZGF0YTsNCj4gLQlpbnQgbmlk ID0gcGdkYXQtPm5vZGVfaWQ7DQo+ICsJY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2sgPSBj cHVtYXNrX29mX25vZGUocGdkYXQtPm5vZGVfaWQpOw0KPiArCXVuc2lnbmVkIGxvbmcgc3BmbiA9 IDAsIGVwZm4gPSAwLCBucl9wYWdlcyA9IDA7DQo+ICsJdW5zaWduZWQgbG9uZyBmaXJzdF9pbml0 X3BmbiwgZmxhZ3M7DQo+ICAJdW5zaWduZWQgbG9uZyBzdGFydCA9IGppZmZpZXM7DQo+IC0JdW5z aWduZWQgbG9uZyBucl9wYWdlcyA9IDA7DQo+IC0JdW5zaWduZWQgbG9uZyBzcGZuLCBlcGZuLCBm aXJzdF9pbml0X3BmbiwgZmxhZ3M7DQo+IC0JcGh5c19hZGRyX3Qgc3BhLCBlcGE7DQo+IC0JaW50 IHppZDsNCj4gIAlzdHJ1Y3Qgem9uZSAqem9uZTsNCj4gLQljb25zdCBzdHJ1Y3QgY3B1bWFzayAq Y3B1bWFzayA9IGNwdW1hc2tfb2Zfbm9kZShwZ2RhdC0+bm9kZV9pZCk7DQo+ICAJdTY0IGk7DQo+ ICsJaW50IHppZDsNCj4gIA0KPiAgCS8qIEJpbmQgbWVtb3J5IGluaXRpYWxpc2F0aW9uIHRocmVh ZCB0byBhIGxvY2FsIG5vZGUgaWYgcG9zc2libGUgKi8NCj4gIAlpZiAoIWNwdW1hc2tfZW1wdHko Y3B1bWFzaykpDQo+IEBAIC0xNTQ5LDMxICsxNjMzLDMwIEBAIHN0YXRpYyBpbnQgX19pbml0IGRl ZmVycmVkX2luaXRfbWVtbWFwKHZvaWQgKmRhdGEpDQo+ICAJCWlmIChmaXJzdF9pbml0X3BmbiA8 IHpvbmVfZW5kX3Bmbih6b25lKSkNCj4gIAkJCWJyZWFrOw0KPiAgCX0NCj4gLQlmaXJzdF9pbml0 X3BmbiA9IG1heCh6b25lLT56b25lX3N0YXJ0X3BmbiwgZmlyc3RfaW5pdF9wZm4pOw0KPiArDQo+ ICsJLyogSWYgdGhlIHpvbmUgaXMgZW1wdHkgc29tZWJvZHkgZWxzZSBtYXkgaGF2ZSBjbGVhcmVk IG91dCB0aGUgem9uZSAqLw0KPiArCWlmICghZGVmZXJyZWRfaW5pdF9tZW1fcGZuX3JhbmdlX2lu X3pvbmUoJmksIHpvbmUsICZzcGZuLCAmZXBmbiwNCj4gKwkJCQkJCSBmaXJzdF9pbml0X3Bmbikp IHsNCj4gKwkJcGdkYXRfcmVzaXplX3VubG9jayhwZ2RhdCwgJmZsYWdzKTsNCj4gKwkJcGdkYXRf aW5pdF9yZXBvcnRfb25lX2RvbmUoKTsNCj4gKwkJcmV0dXJuIDA7DQo+ICsJfQ0KPiAgDQo+ICAJ LyoNCj4gLQkgKiBJbml0aWFsaXplIGFuZCBmcmVlIHBhZ2VzLiBXZSBkbyBpdCBpbiB0d28gbG9v cHM6IGZpcnN0IHdlIGluaXRpYWxpemUNCj4gLQkgKiBzdHJ1Y3QgcGFnZSwgdGhhbiBmcmVlIHRv IGJ1ZGR5IGFsbG9jYXRvciwgYmVjYXVzZSB3aGlsZSB3ZSBhcmUNCj4gLQkgKiBmcmVlaW5nIHBh Z2VzIHdlIGNhbiBhY2Nlc3MgcGFnZXMgdGhhdCBhcmUgYWhlYWQgKGNvbXB1dGluZyBidWRkeQ0K PiAtCSAqIHBhZ2UgaW4gX19mcmVlX29uZV9wYWdlKCkpLg0KPiArCSAqIEluaXRpYWxpemUgYW5k IGZyZWUgcGFnZXMgaW4gTUFYX09SREVSIHNpemVkIGluY3JlbWVudHMgc28NCj4gKwkgKiB0aGF0 IHdlIGNhbiBhdm9pZCBpbnRyb2R1Y2luZyBhbnkgaXNzdWVzIHdpdGggdGhlIGJ1ZGR5DQo+ICsJ ICogYWxsb2NhdG9yLg0KPiAgCSAqLw0KPiAtCWZvcl9lYWNoX2ZyZWVfbWVtX3JhbmdlKGksIG5p ZCwgTUVNQkxPQ0tfTk9ORSwgJnNwYSwgJmVwYSwgTlVMTCkgew0KPiAtCQlzcGZuID0gbWF4X3Qo dW5zaWduZWQgbG9uZywgZmlyc3RfaW5pdF9wZm4sIFBGTl9VUChzcGEpKTsNCj4gLQkJZXBmbiA9 IG1pbl90KHVuc2lnbmVkIGxvbmcsIHpvbmVfZW5kX3Bmbih6b25lKSwgUEZOX0RPV04oZXBhKSk7 DQo+IC0JCW5yX3BhZ2VzICs9IGRlZmVycmVkX2luaXRfcGFnZXMoem9uZSwgc3BmbiwgZXBmbik7 DQo+IC0JfQ0KPiAtCWZvcl9lYWNoX2ZyZWVfbWVtX3JhbmdlKGksIG5pZCwgTUVNQkxPQ0tfTk9O RSwgJnNwYSwgJmVwYSwgTlVMTCkgew0KPiAtCQlzcGZuID0gbWF4X3QodW5zaWduZWQgbG9uZywg Zmlyc3RfaW5pdF9wZm4sIFBGTl9VUChzcGEpKTsNCj4gLQkJZXBmbiA9IG1pbl90KHVuc2lnbmVk IGxvbmcsIHpvbmVfZW5kX3Bmbih6b25lKSwgUEZOX0RPV04oZXBhKSk7DQo+IC0JCWRlZmVycmVk X2ZyZWVfcGFnZXMoc3BmbiwgZXBmbik7DQo+IC0JfQ0KPiArCXdoaWxlIChzcGZuIDwgZXBmbikN Cj4gKwkJbnJfcGFnZXMgKz0gZGVmZXJyZWRfaW5pdF9tYXhvcmRlcigmaSwgem9uZSwgJnNwZm4s ICZlcGZuKTsNCj4gKw0KPiAgCXBnZGF0X3Jlc2l6ZV91bmxvY2socGdkYXQsICZmbGFncyk7DQo+ ICANCj4gIAkvKiBTYW5pdHkgY2hlY2sgdGhhdCB0aGUgbmV4dCB6b25lIHJlYWxseSBpcyB1bnBv cHVsYXRlZCAqLw0KPiAgCVdBUk5fT04oKyt6aWQgPCBNQVhfTlJfWk9ORVMgJiYgcG9wdWxhdGVk X3pvbmUoKyt6b25lKSk7DQo+ICANCj4gLQlwcl9pbmZvKCJub2RlICVkIGluaXRpYWxpc2VkLCAl bHUgcGFnZXMgaW4gJXVtc1xuIiwgbmlkLCBucl9wYWdlcywNCj4gLQkJCQkJamlmZmllc190b19t c2VjcyhqaWZmaWVzIC0gc3RhcnQpKTsNCj4gKwlwcl9pbmZvKCJub2RlICVkIGluaXRpYWxpc2Vk LCAlbHUgcGFnZXMgaW4gJXVtc1xuIiwNCj4gKwkJcGdkYXQtPm5vZGVfaWQsCW5yX3BhZ2VzLCBq aWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLSBzdGFydCkpOw0KPiAgDQo+ICAJcGdkYXRfaW5pdF9y ZXBvcnRfb25lX2RvbmUoKTsNCj4gIAlyZXR1cm4gMDsNCj4gQEAgLTE2MDQsMTQgKzE2ODcsMTEg QEAgc3RhdGljIGludCBfX2luaXQgZGVmZXJyZWRfaW5pdF9tZW1tYXAodm9pZCAqZGF0YSkNCj4g IHN0YXRpYyBub2lubGluZSBib29sIF9faW5pdA0KPiAgZGVmZXJyZWRfZ3Jvd196b25lKHN0cnVj dCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIpDQo+ICB7DQo+IC0JaW50IHppZCA9IHpv bmVfaWR4KHpvbmUpOw0KPiAtCWludCBuaWQgPSB6b25lX3RvX25pZCh6b25lKTsNCj4gLQlwZ19k YXRhX3QgKnBnZGF0ID0gTk9ERV9EQVRBKG5pZCk7DQo+ICAJdW5zaWduZWQgbG9uZyBucl9wYWdl c19uZWVkZWQgPSBBTElHTigxIDw8IG9yZGVyLCBQQUdFU19QRVJfU0VDVElPTik7DQo+IC0JdW5z aWduZWQgbG9uZyBucl9wYWdlcyA9IDA7DQo+IC0JdW5zaWduZWQgbG9uZyBmaXJzdF9pbml0X3Bm biwgc3BmbiwgZXBmbiwgdCwgZmxhZ3M7DQo+ICsJcGdfZGF0YV90ICpwZ2RhdCA9IHpvbmUtPnpv bmVfcGdkYXQ7DQo+ICAJdW5zaWduZWQgbG9uZyBmaXJzdF9kZWZlcnJlZF9wZm4gPSBwZ2RhdC0+ Zmlyc3RfZGVmZXJyZWRfcGZuOw0KPiAtCXBoeXNfYWRkcl90IHNwYSwgZXBhOw0KPiArCXVuc2ln bmVkIGxvbmcgc3BmbiwgZXBmbiwgZmxhZ3M7DQo+ICsJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9 IDA7DQo+ICAJdTY0IGk7DQo+ICANCj4gIAkvKiBPbmx5IHRoZSBsYXN0IHpvbmUgbWF5IGhhdmUg ZGVmZXJyZWQgcGFnZXMgKi8NCj4gQEAgLTE2NDAsMzcgKzE3MjAsMjMgQEAgc3RhdGljIGludCBf X2luaXQgZGVmZXJyZWRfaW5pdF9tZW1tYXAodm9pZCAqZGF0YSkNCj4gIAkJcmV0dXJuIHRydWU7 DQo+ICAJfQ0KPiAgDQo+IC0JZmlyc3RfaW5pdF9wZm4gPSBtYXgoem9uZS0+em9uZV9zdGFydF9w Zm4sIGZpcnN0X2RlZmVycmVkX3Bmbik7DQo+IC0NCj4gLQlpZiAoZmlyc3RfaW5pdF9wZm4gPj0g cGdkYXRfZW5kX3BmbihwZ2RhdCkpIHsNCj4gKwkvKiBJZiB0aGUgem9uZSBpcyBlbXB0eSBzb21l Ym9keSBlbHNlIG1heSBoYXZlIGNsZWFyZWQgb3V0IHRoZSB6b25lICovDQo+ICsJaWYgKCFkZWZl cnJlZF9pbml0X21lbV9wZm5fcmFuZ2VfaW5fem9uZSgmaSwgem9uZSwgJnNwZm4sICZlcGZuLA0K PiArCQkJCQkJIGZpcnN0X2RlZmVycmVkX3BmbikpIHsNCj4gIAkJcGdkYXRfcmVzaXplX3VubG9j ayhwZ2RhdCwgJmZsYWdzKTsNCj4gLQkJcmV0dXJuIGZhbHNlOw0KPiArCQlyZXR1cm4gdHJ1ZTsN Cj4gIAl9DQo+ICANCj4gLQlmb3JfZWFjaF9mcmVlX21lbV9yYW5nZShpLCBuaWQsIE1FTUJMT0NL X05PTkUsICZzcGEsICZlcGEsIE5VTEwpIHsNCj4gLQkJc3BmbiA9IG1heF90KHVuc2lnbmVkIGxv bmcsIGZpcnN0X2luaXRfcGZuLCBQRk5fVVAoc3BhKSk7DQo+IC0JCWVwZm4gPSBtaW5fdCh1bnNp Z25lZCBsb25nLCB6b25lX2VuZF9wZm4oem9uZSksIFBGTl9ET1dOKGVwYSkpOw0KPiAtDQo+IC0J CXdoaWxlIChzcGZuIDwgZXBmbiAmJiBucl9wYWdlcyA8IG5yX3BhZ2VzX25lZWRlZCkgew0KPiAt CQkJdCA9IEFMSUdOKHNwZm4gKyBQQUdFU19QRVJfU0VDVElPTiwgUEFHRVNfUEVSX1NFQ1RJT04p Ow0KPiAtCQkJZmlyc3RfZGVmZXJyZWRfcGZuID0gbWluKHQsIGVwZm4pOw0KPiAtCQkJbnJfcGFn ZXMgKz0gZGVmZXJyZWRfaW5pdF9wYWdlcyh6b25lLCBzcGZuLA0KPiAtCQkJCQkJCWZpcnN0X2Rl ZmVycmVkX3Bmbik7DQo+IC0JCQlzcGZuID0gZmlyc3RfZGVmZXJyZWRfcGZuOw0KPiAtCQl9DQo+ IC0NCj4gLQkJaWYgKG5yX3BhZ2VzID49IG5yX3BhZ2VzX25lZWRlZCkNCj4gLQkJCWJyZWFrOw0K PiArCS8qDQo+ICsJICogSW5pdGlhbGl6ZSBhbmQgZnJlZSBwYWdlcyBpbiBNQVhfT1JERVIgc2l6 ZWQgaW5jcmVtZW50cyBzbw0KPiArCSAqIHRoYXQgd2UgY2FuIGF2b2lkIGludHJvZHVjaW5nIGFu eSBpc3N1ZXMgd2l0aCB0aGUgYnVkZHkNCj4gKwkgKiBhbGxvY2F0b3IuDQo+ICsJICovDQo+ICsJ d2hpbGUgKHNwZm4gPCBlcGZuICYmIG5yX3BhZ2VzIDwgbnJfcGFnZXNfbmVlZGVkKSB7DQo+ICsJ CW5yX3BhZ2VzICs9IGRlZmVycmVkX2luaXRfbWF4b3JkZXIoJmksIHpvbmUsICZzcGZuLCAmZXBm bik7DQo+ICsJCWZpcnN0X2RlZmVycmVkX3BmbiA9IHNwZm47DQo+ICAJfQ0KPiAgDQo+IC0JZm9y X2VhY2hfZnJlZV9tZW1fcmFuZ2UoaSwgbmlkLCBNRU1CTE9DS19OT05FLCAmc3BhLCAmZXBhLCBO VUxMKSB7DQo+IC0JCXNwZm4gPSBtYXhfdCh1bnNpZ25lZCBsb25nLCBmaXJzdF9pbml0X3Bmbiwg UEZOX1VQKHNwYSkpOw0KPiAtCQllcGZuID0gbWluX3QodW5zaWduZWQgbG9uZywgZmlyc3RfZGVm ZXJyZWRfcGZuLCBQRk5fRE9XTihlcGEpKTsNCj4gLQkJZGVmZXJyZWRfZnJlZV9wYWdlcyhzcGZu LCBlcGZuKTsNCj4gLQ0KPiAtCQlpZiAoZmlyc3RfZGVmZXJyZWRfcGZuID09IGVwZm4pDQo+IC0J CQlicmVhazsNCj4gLQl9DQo+ICAJcGdkYXQtPmZpcnN0X2RlZmVycmVkX3BmbiA9IGZpcnN0X2Rl ZmVycmVkX3BmbjsNCj4gIAlwZ2RhdF9yZXNpemVfdW5sb2NrKHBnZGF0LCAmZmxhZ3MpOw0KPiAg DQo+IA==