Received: by 2002:a25:c205:0:0:0:0:0 with SMTP id s5csp5001331ybf; Wed, 4 Mar 2020 15:14:31 -0800 (PST) X-Google-Smtp-Source: ADFU+vvocid5diVcWu+ejNsPi16YK44yDgo6vr1gJC/4tMZ3SOmXhsayynDbR6VvzJnuW14alCgO X-Received: by 2002:a9d:f67:: with SMTP id 94mr4277235ott.46.1583363671619; Wed, 04 Mar 2020 15:14:31 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1583363671; cv=pass; d=google.com; s=arc-20160816; b=LHkBMyzrG5x0LjCAyHHZQeuUUqAaukKAol7pjnz49R+55IGLt8PLUMH+JNgGUNTwdi ormj5Uxfcd89BWgrHvvcUMV4nBGsTFWuRxlm+ZgbMguoXUzC2fE5RdBPUsWOBO/AKLCH pzTDRNr3jQkewmyWuRUwait0Z1mzewlyny63zQjkFNpioq0CCSAKvtYOQuelC4tirqqR 61brYN76FQ21TptaXolmWNRDsUVfvm8vrwr2+DlotKSGhckZ7OfWUQObaWv54XFOt+54 50C57qpXvdvaPIfjUnP0nVdKLwg0Nhtbah1LG0nFkXm6kmbtzejc1yAxRdQvfoW3YJ/l HxGQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:dkim-signature:content-transfer-encoding :content-language:mime-version:msip_labels:accept-language :in-reply-to:references:message-id:date:thread-index:thread-topic :subject:cc:to:from; bh=j9PDfEHFbaiyxWQdXkpjJSwWnm2uEuhjf87nsmFr2dg=; b=BogfQPAwK7noTw7oEPZrsImpNIcPSIMbNQXq+A8XDwZgVpHXGCoz9TJGZh+gZk+J3a AL3oTwBBH1GMNH2/CLKGZAeeR268/VMCzKeeBYUnMH6Fct9hXMUAm1P1m3jUVjZmolc8 gpcNx4hIxvIy4Z4j1jK4zS3MiPIOBM2slvD7SYAfLsIjfOlI+FbxJrdk19EpkSyzohIC ELFiMfuIynblj5hbPuocM9BQhxHFuv064YVo6C8qXmD3U+U+BPErUiQPQc7NKgAoiGZ8 eM3cFZ1SWCDFSwy8nbDA8c+MTCjJr0M2olVMjxgNR34vg+MiLI5EM370odzeyrq5VKoN qrRA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@nvidia.com header.s=n1 header.b=FJS1kJ8V; arc=pass (i=1 spf=pass spfdomain=nvidia.com dkim=pass dkdomain=nvidia.com dmarc=pass fromdomain=nvidia.com); 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=NONE sp=NONE dis=NONE) header.from=nvidia.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f204si2076611oia.43.2020.03.04.15.14.18; Wed, 04 Mar 2020 15:14:31 -0800 (PST) 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=@nvidia.com header.s=n1 header.b=FJS1kJ8V; arc=pass (i=1 spf=pass spfdomain=nvidia.com dkim=pass dkdomain=nvidia.com dmarc=pass fromdomain=nvidia.com); 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=NONE sp=NONE dis=NONE) header.from=nvidia.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388500AbgCDXN4 (ORCPT + 99 others); Wed, 4 Mar 2020 18:13:56 -0500 Received: from nat-hk.nvidia.com ([203.18.50.4]:61583 "EHLO nat-hk.nvidia.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388425AbgCDXN4 (ORCPT ); Wed, 4 Mar 2020 18:13:56 -0500 Received: from hkpgpgate101.nvidia.com (Not Verified[10.18.92.100]) by nat-hk.nvidia.com (using TLS: TLSv1.2, DES-CBC3-SHA) id ; Thu, 05 Mar 2020 07:13:43 +0800 Received: from HKMAIL101.nvidia.com ([10.18.16.10]) by hkpgpgate101.nvidia.com (PGP Universal service); Wed, 04 Mar 2020 15:13:43 -0800 X-PGP-Universal: processed; by hkpgpgate101.nvidia.com on Wed, 04 Mar 2020 15:13:43 -0800 Received: from HKMAIL101.nvidia.com (10.18.16.10) by HKMAIL101.nvidia.com (10.18.16.10) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Wed, 4 Mar 2020 23:13:42 +0000 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.174) by HKMAIL101.nvidia.com (10.18.16.10) with Microsoft SMTP Server (TLS) id 15.0.1473.3 via Frontend Transport; Wed, 4 Mar 2020 23:13:42 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ql8ha4H9WuBLoY5hN4XfcLMDE4gp0GoLXqnXOxufw+rtWUNyWQSWbKQ8NLSkd9JNGYfIOUuUWOXv6Jl19lFvZo74q4QIR1QgG1fJb0r0mKlZgU6sGU2ruid+gSe0Qk22XLJE3/VIZU8vtsttJyRmKhMzjigCdeNAKkuu3ofrPLficcPtEf91UruAMIpA5aT+fIJXbdWYPXifCog6Wf1v3G/75yUeZHJESV0sKTdfLZWzrX2uaix9+1KkKd49jTNbpl0weGG7/a9HZ7vw66VQQ8ohkHladPQDV+EwqPTa8VTNVviSMtUPv1ccOGy7S8lHGxWxqkDLJ+aLaO9sER7/GQ== 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=j9PDfEHFbaiyxWQdXkpjJSwWnm2uEuhjf87nsmFr2dg=; b=DnzgOHrL3lxXXCV2GAGKH3Mq8xCBchAWq/SwyferbaI3ibp8AlZbwoDzeqRI8tk6Ra70Xi0evsf0zAiGXq3VFgDPVgDblXaTFcBbKwGCfgzvsa6+9GWX9W9wcKugejYuLnkmceP0QIiGgBWOk7lOs1+lxJu9/XDqOjFWuwWLMLUArbsBfFThDq3S0WGDLMerLuRJoleqxVdtk5DK08VRFQrV2dYwVKdolVAsorFmf5hZZa/WipXNRACGug00T0x4I1FgTRuf2RGGDCO+K3X3A+4x6qDVCV06o5fl0qL8SrGKEHjfKokE/KRegIWcTlrVFIH9trtAFCMVQM5xpoj7pA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none Received: from BYAPR12MB3015.namprd12.prod.outlook.com (2603:10b6:a03:df::14) by BYAPR12MB3142.namprd12.prod.outlook.com (2603:10b6:a03:de::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2772.18; Wed, 4 Mar 2020 23:13:39 +0000 Received: from BYAPR12MB3015.namprd12.prod.outlook.com ([fe80::50d4:922c:83f:534f]) by BYAPR12MB3015.namprd12.prod.outlook.com ([fe80::50d4:922c:83f:534f%7]) with mapi id 15.20.2772.019; Wed, 4 Mar 2020 23:13:39 +0000 From: Nitin Gupta To: Vlastimil Babka , Mel Gorman , Michal Hocko CC: Matthew Wilcox , Andrew Morton , Mike Kravetz , linux-kernel , linux-mm , Linux API , Joonsoo Kim , David Rientjes Subject: RE: [PATCH v2] mm: Proactive compaction Thread-Topic: [PATCH v2] mm: Proactive compaction Thread-Index: AQHV8NpA8KpdFgytgkKKwNxcIvg7mag4vP2AgABLMkA= Date: Wed, 4 Mar 2020 23:13:39 +0000 Message-ID: References: <20200302213343.2712-1-nigupta@nvidia.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_6b558183-044c-4105-8d9c-cea02a2a3d86_Enabled=True; MSIP_Label_6b558183-044c-4105-8d9c-cea02a2a3d86_SiteId=43083d15-7273-40c1-b7db-39efd9ccc17a; MSIP_Label_6b558183-044c-4105-8d9c-cea02a2a3d86_Owner=nigupta@nvidia.com; MSIP_Label_6b558183-044c-4105-8d9c-cea02a2a3d86_SetDate=2020-03-04T23:13:36.6688639Z; MSIP_Label_6b558183-044c-4105-8d9c-cea02a2a3d86_Name=Unrestricted; MSIP_Label_6b558183-044c-4105-8d9c-cea02a2a3d86_Application=Microsoft Azure Information Protection; MSIP_Label_6b558183-044c-4105-8d9c-cea02a2a3d86_ActionId=d653f56a-c49b-4813-91ca-d48d299a03d8; MSIP_Label_6b558183-044c-4105-8d9c-cea02a2a3d86_Extended_MSFT_Method=Automatic authentication-results: spf=none (sender IP is ) smtp.mailfrom=nigupta@nvidia.com; x-originating-ip: [216.228.112.21] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: b02b5b71-3ceb-47f5-6fa4-08d7c091accc x-ms-traffictypediagnostic: BYAPR12MB3142: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-forefront-prvs: 0332AACBC3 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(346002)(366004)(376002)(396003)(136003)(39860400002)(189003)(199004)(33656002)(66946007)(71200400001)(66556008)(110136005)(54906003)(6506007)(5660300002)(66446008)(64756008)(7696005)(316002)(76116006)(53546011)(52536014)(186003)(4326008)(86362001)(66476007)(478600001)(55016002)(26005)(30864003)(2906002)(7416002)(8936002)(81156014)(9686003)(8676002)(966005)(81166006)(559001)(579004);DIR:OUT;SFP:1101;SCL:1;SRVR:BYAPR12MB3142;H:BYAPR12MB3015.namprd12.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: nvidia.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: gQdlruiDIXrXELOGBjZ3AQ8VHwYOozW57tTDOrtMvqP+q7A/0gLQXYxddzEVjmIXwXj3Lt/W8NRPqZwqSjKtz6PEMJZ2retS1F7Cr2Wv+1Ej+OI7/X9mNPLvzYsZOP3+8ZO4SrKedI9NW0Bt8hEeTZ8ZwsSfvHZBnTpVhEAsEDPzj6baHh7LqOW+FnH9ZKRX+RNwPQ+FFYJA0hHhYjQcMmHUf1i/EWAWqGkFWKRCapv2Cq21MbwO5zcpIFLXr7E98IeretszECzetQEj/6BAnYWvsbgd7wOV9jnKQ00yDxI/dzYGypZtICcgODZDSy9rn7RqPeNKL/pIGHzMhjAr0n7E/7HryN1CMw58rYbZfDmfB9hcSu6DiowuA94iC8sk1g2mnAcjAv70omSmsnSZ1x2vhpLzPZUJBzbnXlP8x5IhqI+KF5HO2L93gPanHb6AD3eENOC32/kg7IcOzysmIyP8HvZfMbkT/QO+Zg8RyJ6IiFVxJsfh+X+3rtGk+v7AhQhtDzxkNgDBrj5pihwV2Q== x-ms-exchange-antispam-messagedata: 5448RhVg8xnY3+PdJJ8m7NzTKdFJjhm6z2+I+adN0w84pcc8ClU8cQfV6r/QIIjovMut5XRsP4P+rQ3qM5KqC8274UyDo5F89Oj85y/SldjP5vls8DQP/rRbDsovnl2T/VxkWRyVXVX7H9wbFf176w== x-ms-exchange-transport-forked: True MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: b02b5b71-3ceb-47f5-6fa4-08d7c091accc X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Mar 2020 23:13:39.7354 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: TZXfa6pUjAkzC6ZEBw1TvUuXmDW+QMBQ9+oFTwBM9aGRObuo+DLPp3ZjTDq8xBLwOn9rmG8QUmvo5oWTecct8A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR12MB3142 X-OriginatorOrg: Nvidia.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nvidia.com; s=n1; t=1583363623; bh=j9PDfEHFbaiyxWQdXkpjJSwWnm2uEuhjf87nsmFr2dg=; h=X-PGP-Universal:ARC-Seal:ARC-Message-Signature: ARC-Authentication-Results:From:To:CC:Subject:Thread-Topic: Thread-Index:Date:Message-ID:References:In-Reply-To: Accept-Language:X-MS-Has-Attach:X-MS-TNEF-Correlator:msip_labels: authentication-results:x-originating-ip:x-ms-publictraffictype: x-ms-office365-filtering-correlation-id:x-ms-traffictypediagnostic: x-microsoft-antispam-prvs:x-ms-oob-tlc-oobclassifiers: x-forefront-prvs:x-forefront-antispam-report:received-spf: x-ms-exchange-senderadcheck:x-microsoft-antispam: x-microsoft-antispam-message-info: x-ms-exchange-antispam-messagedata:x-ms-exchange-transport-forked: MIME-Version:X-MS-Exchange-CrossTenant-Network-Message-Id: X-MS-Exchange-CrossTenant-originalarrivaltime: X-MS-Exchange-CrossTenant-fromentityheader: X-MS-Exchange-CrossTenant-id:X-MS-Exchange-CrossTenant-mailboxtype: X-MS-Exchange-CrossTenant-userprincipalname: X-MS-Exchange-Transport-CrossTenantHeadersStamped:X-OriginatorOrg: Content-Language:Content-Type:Content-Transfer-Encoding; b=FJS1kJ8V6IQXH+eR+DsV7cGZDE8SgqHJemMQVbdg6waokON51O4TTlsNBxMEQAXjI Az3WroO5MtCRY+Eteh1rDEnRmLXTUOS+IJcc+0GVXuXZbkPZs0IH/Dfruv0Ucnd4u0 ntuVJ9CZIwWt/PyPp6jpBX+n/45uEGDNlzauAOn1Eci0+EnYYauh1kctC/Y6phhqyl 8zJibd+tuVy+JeeskQwZGn0RryqUfokzywEmo1nxgTt/eYPmgQYUwbaPQrCCxwOTkE 6bxeORHDzX8lORjYozD9niKP1vppCW0ntcUWxbvekbZYoAupMXYQgAJXaPgfVvg8H5 7JX1JRPECVO1Q== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBWbGFzdGltaWwgQmFia2EgPHZi YWJrYUBzdXNlLmN6Pg0KPiBTZW50OiBXZWRuZXNkYXksIE1hcmNoIDQsIDIwMjAgMTA6MDQgQU0N Cj4gVG86IE5pdGluIEd1cHRhIDxuaWd1cHRhQG52aWRpYS5jb20+OyBNZWwgR29ybWFuDQo+IDxt Z29ybWFuQHRlY2hzaW5ndWxhcml0eS5uZXQ+OyBNaWNoYWwgSG9ja28gPG1ob2Nrb0BzdXNlLmNv bT4NCj4gQ2M6IE1hdHRoZXcgV2lsY294IDx3aWxseUBpbmZyYWRlYWQub3JnPjsgQW5kcmV3IE1v cnRvbiA8YWtwbUBsaW51eC0NCj4gZm91bmRhdGlvbi5vcmc+OyBNaWtlIEtyYXZldHogPG1pa2Uu a3JhdmV0ekBvcmFjbGUuY29tPjsgbGludXgta2VybmVsIDxsaW51eC0NCj4ga2VybmVsQHZnZXIu a2VybmVsLm9yZz47IGxpbnV4LW1tIDxsaW51eC1tbUBrdmFjay5vcmc+OyBMaW51eCBBUEkgPGxp bnV4LQ0KPiBhcGlAdmdlci5rZXJuZWwub3JnPjsgSm9vbnNvbyBLaW0gPGlhbWpvb25zb28ua2lt QGxnZS5jb20+OyBEYXZpZCBSaWVudGplcw0KPiA8cmllbnRqZXNAZ29vZ2xlLmNvbT4NCj4gU3Vi amVjdDogUmU6IFtQQVRDSCB2Ml0gbW06IFByb2FjdGl2ZSBjb21wYWN0aW9uDQo+IA0KPiArQ0Mg bGludXgtYXBpIChuZXcgdHVuYWJsZSkgYW5kIG1vcmUgZm9sa3Mgd2hvIGhhdmUgZGlzY3Vzc2Vk IGNvbXBhY3Rpb24NCj4gK2JlZm9yZQ0KPiANCj4gT24gMy8yLzIwIDEwOjMzIFBNLCBOaXRpbiBH dXB0YSB3cm90ZToNCj4gPiBGb3Igc29tZSBhcHBsaWNhdGlvbnMgd2UgbmVlZCB0byBhbGxvY2F0 ZSBhbG1vc3QgYWxsIG1lbW9yeSBhcw0KPiA+IGh1Z2VwYWdlcy4gSG93ZXZlciwgb24gYSBydW5u aW5nIHN5c3RlbSwgaGlnaGVyIG9yZGVyIGFsbG9jYXRpb25zIGNhbg0KPiA+IGZhaWwgaWYgdGhl IG1lbW9yeSBpcyBmcmFnbWVudGVkLiBMaW51eCBrZXJuZWwgY3VycmVudGx5IGRvZXMNCj4gPiBv bi1kZW1hbmQgY29tcGFjdGlvbiBhcyB3ZSByZXF1ZXN0IG1vcmUgaHVnZXBhZ2VzIGJ1dCB0aGlz IHN0eWxlIG9mDQo+ID4gY29tcGFjdGlvbiBpbmN1cnMgdmVyeSBoaWdoIGxhdGVuY3kuIEV4cGVy aW1lbnRzIHdpdGggb25lLXRpbWUgZnVsbA0KPiA+IG1lbW9yeSBjb21wYWN0aW9uIChmb2xsb3dl ZCBieSBodWdlcGFnZSBhbGxvY2F0aW9ucykgc2hvd3MgdGhhdCBrZXJuZWwNCj4gPiBpcyBhYmxl IHRvIHJlc3RvcmUgYSBoaWdobHkgZnJhZ21lbnRlZCBtZW1vcnkgc3RhdGUgdG8gYSBmYWlybHkN Cj4gPiBjb21wYWN0ZWQgbWVtb3J5IHN0YXRlIHdpdGhpbiA8MSBzZWMgZm9yIGEgMzJHIHN5c3Rl bS4gU3VjaCBkYXRhDQo+ID4gc3VnZ2VzdHMgdGhhdCBhIG1vcmUgcHJvYWN0aXZlIGNvbXBhY3Rp b24gY2FuIGhlbHAgdXMgYWxsb2NhdGUgYSBsYXJnZQ0KPiA+IGZyYWN0aW9uIG9mIG1lbW9yeSBh cyBodWdlcGFnZXMga2VlcGluZyBhbGxvY2F0aW9uIGxhdGVuY2llcyBsb3cuDQo+IA0KPiBZZWFo LCB3ZSBzaG91bGQgaGF2ZSBzb21ldGhpbmcgbGlrZSB0aGlzLCBjdXJyZW50bHkga2NvbXBhY3Rk IGRvZXMgb25seSB2ZXJ5DQo+IGxpbWl0ZWQgd29yay4NCj4gDQo+ID4gRm9yIGEgbW9yZSBwcm9h Y3RpdmUgY29tcGFjdGlvbiwgdGhlIGFwcHJvYWNoIHRha2VuIGhlcmUgaXMgdG8gZGVmaW5lDQo+ ID4gcGVyIHBhZ2Utbm9kZSB0dW5hYmxlIGNhbGxlZCAncHJvYWN0aXZlbmVzcycgd2hpY2ggZGlj dGF0ZXMgYm91bmRzIGZvcg0KPiA+IGV4dGVybmFsIGZyYWdtZW50YXRpb24gZm9yIEhVR0VUTEJf UEFHRV9PUkRFUiBwYWdlcyB3aGljaCBrY29tcGFjdGQNCj4gPiBzaG91bGQgdHJ5IHRvIG1haW50 YWluLg0KPiA+DQo+ID4gVGhlIHR1bmFibGUgaXMgZXhwb3NlZCB0aHJvdWdoIHN5c2ZzOg0KPiA+ ICAgL3N5cy9rZXJuZWwvbW0vY29tcGFjdGlvbi9ub2RlLW4vcHJvYWN0aXZlbmVzcw0KPiA+DQo+ ID4gVGhlIHZhbHVlIG9mIHRoaXMgdHVuYWJsZSBpcyB1c2VkIHRvIGRldGVybWluZSBsb3cgYW5k IGhpZ2ggdGhyZXNob2xkcw0KPiA+IGZvciBleHRlcm5hbCBmcmFnbWVudGF0aW9uIHdydCBIVUdF VExCX1BBR0VfT1JERVIgb3JkZXIuDQo+ID4NCj4gPiBOb3RlIHRoYXQgcHJldmlvdXMgdmVyc2lv biBvZiB0aGlzIHBhdGNoIFsxXSB3YXMgZm91bmQgdG8gaW50cm9kdWNlDQo+ID4gdG9vIG1hbnkg dHVuYWJsZXMgKHBlci1vcmRlciBleHRmcmFne2xvdywgaGlnaH0pIGJ1dCB0aGlzIG9uZSByZWR1 Y2VzDQo+ID4gdGhlbSB0byBqdXN0IChwZXItbm9kZSBwcm9hY3RpdmVuZXNzKS4gQWxzbywgdGhl IG5ldyB0dW5hYmxlIGlzIGFuDQo+ID4gb3BhcXVlIHZhbHVlIGluc3RlYWQgb2YgYXNraW5nIGZv ciBzcGVjaWZpYyBib3VuZHMgb2YgImV4dGVybmFsDQo+ID4gZnJhZ21lbnRhdGlvbiIgd2hpY2gg d291bGQgaGF2ZSBiZWVuIGRpZmZpY3VsdCB0byBlc3RpbWF0ZS4gVGhlDQo+ID4gaW50ZXJuYWwg aW50ZXJwcmV0YXRpb24gb2YgdGhpcyBvcGFxdWUgdmFsdWUgYWxsb3dzIGZvciBmdXR1cmUgZmlu ZS10dW5pbmcuDQo+IA0KPiBJIGd1ZXNzIHdlIGNhbiBsaXZlIHdpdGggdGhhdCBzaW5nbGUgdHVu YWJsZSwgbGlrZSB3ZSBoYXZlIHN3YXBwaW5lc3MuIFRoZSBwZXItDQo+IG9yZGVyIHRocmVzaG9s ZHMgd291bGQgYmUgdG9vIG11Y2ggaW5kZWVkLiBCdXQgZG9lcyBpdCBoYXZlIHRvIGJlIHBlci1u b2RlPw0KPiBXb3VsZG4ndCBhIHNpbmdsZSBvbmUgYmUgZW5vdWdoPw0KPiANCg0KSSBkb24ndCBo YXZlIGEgc3Ryb25nIHJlYXNvbiBmb3IgaGF2aW5nIHBlci1ub2RlIHR1bmFibGUgZXhjZXB0IGZv ciBtYXliZSBnaXZpbmcNCnVzZXJzcGFjZSBzb21lIG1vcmUgY29udHJvbCBvdmVyIGNvbXBhY3Rp b24gcHJvY2Vzcy4gTWF5YmUgd2UgY2FuIGp1c3QNCmhhdmUgYSBzaW5nbGUgdHVuYWJsZSAoaS5l LiBub3QgcGVyLW5vZGUgYnV0IGdsb2JhbCkgYW5kIHVzZSBzb21lIGhldXJpc3RpY3MNCmludGVy bmFsbHkgdG8gYmFsYW5jZSBjb21wYWN0aW9uIGVmZm9ydCBhY3Jvc3Mgbm9kZXMuIEkgd2lsbCBw b3N0IGEgdjMgd2l0aCB0aGlzDQpjaGFuZ2UuDQoNCj4gPiBDdXJyZW50bHksIHdlIHVzZSBhIHNp bXBsZSB0cmFuc2xhdGlvbiBmcm9tIHRoaXMgdHVuYWJsZSB0byBbbG93LA0KPiA+IGhpZ2hdICJw cm9hY3RpdmUgY29tcGFjdGlvbiBzY29yZSIgdGhyZXNob2xkcyAobG93PTEwMC1wcm9hY3RpdmVu ZXNzLA0KPiA+IGhpZ2g9bG93KzEwJSkuIFRoZSBzY29yZSBmb3IgYSBub2RlIGlzIGRlZmluZWQg YXMgd2VpZ2hlZCBtZWFuIG9mDQo+ID4gcGVyLXpvbmUgZXh0ZXJuYWwgZnJhZ21lbnRhdGlvbiB3 cnQgSFVHRVRMQl9QQUdFX09SREVSLiBBIHpvbmUncw0KPiA+IHByZXNlbnRfcGFnZXMgZGV0ZXJt aW5lcyBpdHMgd2VpZ2h0LiBQcm9hY3RpdmUgY29tcGFjdGlvbiBpcyB0cmlnZ2VyZWQNCj4gPiB3 aGVuIGEgbm9kZSdzIHNjb3JlIGV4Y2VlZHMgaXRzIGhpZ2ggdGhyZXNob2xkIHZhbHVlIGFuZCBj b250aW51ZXMNCj4gPiB0aWxsIGl0IHJlYWNoZXMgaXRzIGxvdyB2YWx1ZS4NCj4gPg0KPiA+IFRv IHBlcmlvZGljYWxseSBjaGVjayBwZXItbm9kZSBzY29yZSwgd2UgcmV1c2UgcGVyLW5vZGUga2Nv bXBhY3RkDQo+ID4gdGhyZWFkcyB3aGljaCBhcmUgd29rZW4gdXAgZXZlcnkgZmV3IG1pbGxpc2Vj b25kcyB0byBjaGVjayB0aGUgc2FtZS4NCj4gPiBJZg0KPiANCj4gRmV3IG1pbGxpc2Vjb25kcyB3 b3VsZCBiZSBleGNlc3NpdmUuIFRoZSBjb2RlIHNlZW1zIHRvIGRlZmluZSB0aGF0IGFzIDUwMCwN Cj4gd2hpY2ggaXMgc29tZXdoYXQgYmV0dGVyLiBTaG91bGQgdGhlcmUgYmUgYWxzbyBhIGJhY2tv ZmYgdGhvdWdoIGlmIGl0IGZpbmRzIG91dCBpdA0KPiBoYXMgbm90aGluZyB0byBkbz8gQW5kIHBl cmhhcHMgaWYga3N3YXBkIGlzIHJ1bm5pbmcgb24gdGhlIG5vZGUsIGtjb21wYWN0ZA0KPiBzaG91 bGQgd2FpdCBzbyB0aGV5IGRvbid0IGludGVyZmVyZT8NCj4gDQoNCkkgdGhpbmsgYmFja29mZiBz aG91bGQgYmUgZG9uZSBvbmx5IHdoZW4gdGhlcmUgaXMgYSBuZWVkIGZvciBwcm9hY3RpdmUgY29t cGFjdGlvbg0KYnV0IGl0IGNvdWxkIG5vdCBtYWtlIGZvcndhcmQgcHJvZ3Jlc3MuIEJhY2tvZmYg c2ltcGx5IGJlY2F1c2UgYXQgdGhlIHRpbWUgb2YNCnNjb3JlIGNhbGN1bGF0aW9uIGl0IGhhcHBl bmVkIHRvIGJlIGxvd2VyIHRoYW4gdGhyZXNob2xkIGRvZXNuJ3Qgc2VlbSByaWdodC4NCg0KT3Ro ZXJ3aXNlLCBiYWNraW5nIG9mZiB3aGVuIGtzd2FwZCBpcyBhY3RpdmUgc291bmRzIGdvb2QgdG8g bWUuDQoNCj4gPiBhIG5vZGUncyBzY29yZSBleGNlZWRzIGl0cyBoaWdoIHRocmVzaG9sZCAoYXMg ZGVyaXZlZCBmcm9tIHVzZXINCj4gPiBwcm92aWRlZCBwcm9hY3RpdmVuZXNzIHZhbHVlKSwgcHJv YWN0aXZlIGNvbXBhY3Rpb24gaXMgc3RhcnRlZCB0aWxsDQo+ID4gaXRzIHNjb3JlIHJlYWNoZXMg aXRzIGxvdyB0aHJlc2hvbGQgdmFsdWUuIEJ5IGRlZmF1bHQsIHByb2FjdGl2ZW5lc3MNCj4gPiBp cyBzZXQgdG8gMCAoPT4gbG93PTEwMCUsIGhpZ2g9MTAwJSkgZm9yIGFsbCBub2Rlcy4NCj4gDQo+ IE1heWJlIHdlIGNhbiBnbyB3aXRoIGEgbm9uLTAgeWV0IGNvbnNlcnZhdGl2ZSBkZWZhdWx0IGFm dGVyIHNvbWUgbW9yZQ0KPiB0ZXN0aW5nLg0KDQpIbW0uLi4gbXkgdGVzdGluZyBzaG93cyBwcm9h Y3RpdmVuZXNzPTIwIGFzIGEgZ29vZCwgY29uc2VydmF0aXZlIGRlZmF1bHQuDQpJIHdpbGwgcG9z dCBtb3JlIG51bWJlcnMgd2l0aCBkaWZmZXJlbnQgcHJvYWN0aXZlbmVzcyB2YWx1ZXMgZm9yIGRp ZmZlcmVudA0Kd29ya2xvYWRzLg0KDQo+IA0KPiA+IFRoaXMgcGF0Y2ggaXMgbGFyZ2VseSBiYXNl ZCBvbiBpZGVhcyBmcm9tIE1pY2hhbCBIb2NrbyBwb3N0ZWQgaGVyZToNCj4gPiBodHRwczovL2xv cmUua2VybmVsLm9yZy9saW51eC1tbS8yMDE2MTIzMDEzMTQxMi5HSTEzMzAxQGRoY3AyMi5zdXNl LmN6DQo+ID4gLw0KPiA+DQo+ID4gUGVyZm9ybWFuY2UgZGF0YQ0KPiA+ID09PT09PT09PT09PT09 PT0NCj4gPg0KPiA+IFN5c3RlbTogeDY0XzY0LCAxVCBSQU0sIDgwIENQVSB0aHJlYWRzLg0KPiA+ IEtlcm5lbDogNS42LjAtcmMzICsgdGhpcyBwYXRjaA0KPiA+DQo+ID4gZWNobyBtYWR2aXNlIHwg c3VkbyB0ZWUgL3N5cy9rZXJuZWwvbW0vdHJhbnNwYXJlbnRfaHVnZXBhZ2UvZW5hYmxlZA0KPiA+ IGVjaG8gbWFkdmlzZSB8IHN1ZG8gdGVlIC9zeXMva2VybmVsL21tL3RyYW5zcGFyZW50X2h1Z2Vw YWdlL2RlZnJhZw0KPiA+DQo+ID4gQmVmb3JlIHN0YXJ0aW5nIHRoZSBkcml2ZXIsIHRoZSBzeXN0 ZW0gd2FzIGZyYWdtZW50ZWQgZnJvbSBhIHVzZXJzcGFjZQ0KPiA+IHByb2dyYW0gdGhhdCBhbGxv Y2F0ZXMgYWxsIG1lbW9yeSBhbmQgdGhlbiBmb3IgZWFjaCAyTSBhbGlnbmVkDQo+ID4gc2VjdGlv biwgZnJlZXMgMy80IG9mIGJhc2UgcGFnZXMgdXNpbmcgbXVubWFwLiBUaGUgd29ya2xvYWQgaXMg bWFpbmx5DQo+ID4gYW5vbnltb3VzIHVzZXJzcGFjZSBwYWdlcyB3aGljaCBhcmUgZWFzeSB0byBt b3ZlIGFyb3VuZC4gSQ0KPiA+IGludGVudGlvbmFsbHkgYXZvaWRlZCB1bm1vdmFibGUgcGFnZXMg aW4gdGhpcyB0ZXN0IHRvIHNlZSBob3cgbXVjaA0KPiA+IGxhdGVuY3kgd2UgaW5jdXIgd2hlbiBo dWdlcGFnZSBhbGxvY2F0aW9ucyBoaXQgZGlyZWN0IGNvbXBhY3Rpb24uDQo+ID4NCj4gPiAxLiBL ZXJuZWwgaHVnZXBhZ2UgYWxsb2NhdGlvbiBsYXRlbmNpZXMNCj4gPg0KPiA+IFdpdGggc3lzdGVt IGluIHN1Y2ggYSBmcmFnbWVudGVkIHN0YXRlLCBhIGtlcm5lbCBkcml2ZXIgdGhlbiBhbGxvY2F0 ZXMNCj4gPiBhcyBtYW55IGh1Z2VwYWdlcyBhcyBwb3NzaWJsZSBhbmQgbWVhc3VyZXMgYWxsb2Nh dGlvbiBsYXRlbmN5Og0KPiA+DQo+ID4gKGFsbCBsYXRlbmN5IHZhbHVlcyBhcmUgaW4gbWljcm9z ZWNvbmRzKQ0KPiA+DQo+ID4gLSBXaXRoIHZhbmlsbGEgNS42LjAtcmMzDQo+ID4NCj4gPiBlY2hv IDAgfCBzdWRvIHRlZSAvc3lzL2tlcm5lbC9tbS9jb21wYWN0aW9uL25vZGUtKi9wcm9hY3RpdmVu ZXNzDQo+ID4NCj4gPiAgIHBlcmNlbnRpbGUgbGF0ZW5jeQ0KPiA+ICAg4oCT4oCT4oCT4oCT4oCT 4oCT4oCT4oCT4oCT4oCTIOKAk+KAk+KAk+KAk+KAk+KAk+KAkw0KPiA+ICAgICAgICAgIDUgICAg Nzg5NA0KPiA+ICAgICAgICAgMTAgICAgOTQ5Ng0KPiA+ICAgICAgICAgMjUgICAxMjU2MQ0KPiA+ ICAgICAgICAgMzAgICAxNTI5NQ0KPiA+ICAgICAgICAgNDAgICAxODI0NA0KPiA+ICAgICAgICAg NTAgICAyMTIyOQ0KPiA+ICAgICAgICAgNjAgICAyNzU1Ng0KPiA+ICAgICAgICAgNzUgICAzMDE0 Nw0KPiA+ICAgICAgICAgODAgICAzMTA0Nw0KPiA+ICAgICAgICAgOTAgICAzMjg1OQ0KPiA+ICAg ICAgICAgOTUgICAzMzc5OQ0KPiA+DQo+ID4gVG90YWwgMk0gaHVnZXBhZ2VzIGFsbG9jYXRlZCA9 IDM4Mzg1OSAoNzQ5RyB3b3J0aCBvZiBodWdlcGFnZXMgb3V0IG9mDQo+ID4gNzYyRyB0b3RhbCBm cmVlID0+IDk4JSBvZiBmcmVlIG1lbW9yeSBjb3VsZCBiZSBhbGxvY2F0ZWQgYXMgaHVnZXBhZ2Vz KQ0KPiA+DQo+ID4gLSBXaXRoIDUuNi4wLXJjMyArIHRoaXMgcGF0Y2gsIHdpdGggcHJvYWN0aXZl bmVzcz0yMA0KPiA+DQo+ID4gZWNobyAyMCB8IHN1ZG8gdGVlIC9zeXMva2VybmVsL21tL2NvbXBh Y3Rpb24vbm9kZS0qL3Byb2FjdGl2ZW5lc3MNCj4gPg0KPiA+ICAgcGVyY2VudGlsZSBsYXRlbmN5 DQo+ID4gICDigJPigJPigJPigJPigJPigJPigJPigJPigJPigJMg4oCT4oCT4oCT4oCT4oCT4oCT 4oCTDQo+ID4gICAgICAgICAgNSAgICAgICAyDQo+ID4gICAgICAgICAxMCAgICAgICAyDQo+ID4g ICAgICAgICAyNSAgICAgICAzDQo+ID4gICAgICAgICAzMCAgICAgICAzDQo+ID4gICAgICAgICA0 MCAgICAgICAzDQo+ID4gICAgICAgICA1MCAgICAgICA0DQo+ID4gICAgICAgICA2MCAgICAgICA0 DQo+ID4gICAgICAgICA3NSAgICAgICA0DQo+ID4gICAgICAgICA4MCAgICAgICA0DQo+ID4gICAg ICAgICA5MCAgICAgICA1DQo+ID4gICAgICAgICA5NSAgICAgNDI5DQo+ID4NCj4gPiBUb3RhbCAy TSBodWdlcGFnZXMgYWxsb2NhdGVkID0gMTExMjAgKDIxLjdHIHdvcnRoIG9mIGh1Z2VwYWdlcyBv dXQgb2YNCj4gPiAyNUcgdG90YWwgZnJlZSA9PiA5OCUgb2YgZnJlZSBtZW1vcnkgY291bGQgYmUg YWxsb2NhdGVkIGFzIGh1Z2VwYWdlcykNCj4gDQo+IEJ5IHlvdXIgZGVzY3JpcHRpb24gaXQgc2Vl bXMgdG8gYmUgYSBvbmUtdGltZSBmcmFnbWVudGF0aW9uIGV2ZW50IGZvbGxvd2VkIGJ5IGENCj4g b25lLXRpbWUgc3RyZWFtIG9mIGFsbG9jYXRpb25zPyBTbyBrY29tcGFjdGQgcHJvYmFibHkgZGlk IHRoZSBwcm9hY3RpdmUgd29yaw0KPiBqdXN0IG9uY2U/IFRoYXQgd29ya3MgYXMgYSBzbW9rZSB0 ZXN0LCBidXQgd2hhdCBJIGd1ZXNzIHdpbGwgYmUgbW9yZSBpbXBvcnRhbnQNCj4gaXMgYmVoYXZp b3IgdW5kZXIgbW9yZSBjb21wbGV4IHdvcmtsb2Fkcywgd2hlcmUgd2Ugc2hvdWxkIGFsc28gY2hl Y2sgdGhlDQo+IHZtc3RhdA0KPiBjb21wYWN0X2RhZW1vbiogc3RhdHMgYW5kIHBvc3NpYmx5IGFs c28ga2NvbXBhY3RkIGt0aHJlYWRzIENQVSB1dGlsaXphdGlvbnMuDQo+IA0KDQpObywgcHJvYWN0 aXZlIGNvbXBhY3Rpb24gaGFwcGVucyB0aHJvdWdob3V0IHRoZSBkdXJhdGlvbiBvZiB0aGVzZSBi ZW5jaG1hcmtzLg0KVGhlIHNpdHVhdGlvbiBvZiBvbmUtdGltZSBjb21wYWN0aW9uLCBzdWZmaWNp ZW50IHRvIHN1cHBseSBodWdlcGFnZXMgZm9yIGZvbGxvd2luZw0KYWxsb2NhdGlvbiBzdHJlYW0g Y2FuIHByb2JhYmx5IGhhcHBlbiBmb3IgbW9yZSBleHRyZW1lIHZhbHVlcywgbGlrZSA4MCBvciA5 MC4gVGhhdA0KaXMgd2h5IEkgY2hvc2UgYSBzbWFsbGVyIHZhbHVlIGxpa2UgMjAgdG8gbWFrZSBz dXJlIHByb2FjdGl2ZSBjb21wYWN0aW9uIGdvZXMgb24gaW4NCnBhcmFsbGVsIHdpdGggYWxsb2Nh dGluZyBwcm9ncmFtIGZvciBtb3JlIHJlYWxpc3RpYyBudW1iZXJzLg0KDQpUbyB2ZXJpZnkgdGhh dCBjb21wYWN0aW9uIGluZGVlZCBoYXBwZW5zIGR1cmluZyBiZW5jaG1hcmtzLCBJIHVzZWQgYSBz aW1wbGUgYnBmdHJhY2UNCnNjcmlwdDoNCg0Ka3Byb2JlOnByb2FjdGl2ZV9jb21wYWN0X25vZGUg ew0KICAgIEBbZnVuY10gPSBjb3VudCgpOw0KfQ0KDQpUaGlzIGJwZnRyYWNlIGlzIGFjdGl2ZSBi ZWZvcmUgbGV0dGluZyB0aGlzIHRlc3Qga2VybmVsIG1vZHVsZSBhbGxvY2F0ZSBodWdlcGFnZXMg YW5kIGlzDQp0ZXJtaW5hdGVkIG9uY2UgdGhlIG1vZHVsZSBoaXRzIGFsbG9jYXRpb24gZmFpbHVy ZSAoYW5kIHRodXMgc3RvcHMgYW55IGZ1cnRoZXIgYWxsb2NhdGlvbnMpLg0KDQpUaGUgc2NyaXB0 IHNob3dzIHRoYXQgcHJvYWN0aXZlX2NvbXBhY3Rfbm9kZSgpIHdhcyBjYWxsZWQgNiB0aW1lcyBk dXJpbmcgfjFtaW4gcnVudGltZQ0Kb2YgdGhpcyB0ZXN0IGtlcm5lbCBtb2R1bGUuDQoNCj4gPiAy LiBKQVZBIGhlYXAgYWxsb2NhdGlvbg0KPiA+DQo+ID4gRmlyc3QgZnJhZ21lbnQgbWVtb3J5IHVz aW5nIHRoZSBzYW1lIG1ldGhvZCBhcyBmb3IgKDEpLg0KPiA+DQo+ID4gV2l0aCBtZW1vcnkgaW4g YSBmcmFnbWVudGVkIHN0YXRlLCBydW46DQo+ID4NCj4gPiAvdXNyL2Jpbi90aW1lDQo+ID4gIGph dmEgLVhtczcwMEcgLVhteDcwMEcgLVhYOitVc2VUcmFuc3BhcmVudEh1Z2VQYWdlcw0KPiA+IC1Y WDorQWx3YXlzUHJlVG91Y2gNCj4gPg0KPiA+IFRvIGFsbG9jYXRlIDcwMEcgb2YgamF2YSBoZWFw IHVzaW5nIGh1Z2VwYWdlcy4NCj4gPg0KPiA+IC0gV2l0aCB2YW5pbGxhIDUuNi4wLXJjMw0KPiA+ DQo+ID4gMTcuMzl1c2VyIDE2NjYuNDhzeXN0ZW0gMjc6MzcuODllbGFwc2VkDQo+ID4NCj4gPiAt IFdpdGggNS42LjAtcmMzICsgdGhpcyBwYXRjaCwgd2l0aCBwcm9hY3RpdmVuZXNzPTIwDQo+ID4N Cj4gPiA4LjM1dXNlciAxOTQuNThzeXN0ZW0gMzoxOS42MmVsYXBzZWQNCj4gPg0KPiA+IEVsYXBz ZWQgdGltZSByZW1haW5zIGFyb3VuZCAzOjE1IGFzIHByb2FjdGl2ZW5lc3MgaXMgZnVydGhlciBp bmNyZWFzZWQuDQo+IA0KPiBTaW1pbGFyIGNvbW1lbnQgYXMgZm9yIHRoZSBhYm92ZSB0ZXN0LiBC dXQgdGhhdCdzIGEgbGFyZ2UgcmVkdWN0aW9uLCBzbyBJIHdvbmRlcg0KPiBob3cgbXVjaCB0aW1l IGtjb21wYWN0ZCB0b29rIGZvciB0aGlzIGRlZnJhZ21lbnRhdGlvbi4gV2FzIHRoZXJlIGENCj4g Y29tcGFyYWJseSBsYXJnZSBkZWxheSBiZXR3ZWVuIHRoZSBmcmFnbWVudGF0aW9uIGFuZCB0aGUg amF2YSBhcHBsaWNhdGlvbiB0bw0KPiBsZXQga2NvbXBhY3RkIGRvIHRoZSBqb2I/IE9yIHdhcyBp dCB0aGF0IG11Y2ggbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgb25lLQ0KPiBjb21wYWN0aW9uLXBl ci1zaW5nbGUtaHVnZXBhZ2UgdGhhdCB0aGUgamF2YSBwYWdlIGZhdWx0aW5nIGNhdXNlZD8NCj4g DQo+ID4NCg0KVGhlIG9ubHkgZGVsYXkgYmV0d2VlbiBmcmFnbWVudGF0aW9uIGFuZCBydW5uaW5n IHRoaXMgamF2YSBiZW5jaG1hcmsgaXMgdGhlDQp0aW1lIEkgdG9vayB0byBzd2l0Y2ggYmV0d2Vl biB0ZXJtaW5hbHMuIEFueXdheXMsIHVzaW5nIHRoZSBzYW1lIGJwZnRyYWNlLA0KSSBzZWUgdGhh dCBwcm9hY3RpdmVfY29tcGFjdF9ub2RlIHdhcyBpbnZva2VkIDIxIHRpbWVzIGR1cmluZyB0aGUg fjM6MTUgbWludXRlDQpydW4gb2YgdGhpcyBqYXZhIGJlbmNobWFyay4NCg0KVGhpcyBpcyB3aGF0 IGhhcHBlbnMgZHVyaW5nIGFueSBvZiB0aGVzZSBiZW5jaG1hcmtzOiB3aXRoIHByb2FjdGl2ZW5l c3M9MjAsDQp0aGUgdGVzdCBzdGFydHMgd2l0aCBleHRmcmFnICh3cnQgaHVnZXBhZ2Ugb3JkZXIp IG9mIH44MCUgKG9yIGhpZ2hlciwgZGVwZW5kaW5nIG9uDQpkZWxheSBpbiBzdGFydGluZyB0aGUg YmVuY2htYXJrKS4gQXMgYmVuY2htYXJrIGNvbnN1bWVzIGh1Z2VwYWdlcywNCmV4dGZyYWcgKHBl cmNlbnRhZ2Ugb2YgZnJlZSBtZW1vcnkgbm90IGF2YWlsYWJsZSBhcyBodWdlcGFnZXMpIHF1aWNr bHkgcmlzZXMgYW5kDQpwcm9hY3RpdmUgY29tcGFjdGlvbiBzdGFydHMgYWdhaW4gd2hpY2ggKGhv cGVmdWxseSkgYnJpbmdzIGRvd24gZXh0ZnJhZyBsZXZlbHMuDQpSZXBlYXQuDQoNClRoYW5rcywN Ck5pdGluDQoNCg0KPiA+IEJhY2tvZmYgYmVoYXZpb3INCj4gPiA9PT09PT09PT09PT09PT09DQo+ ID4NCj4gPiBBYm92ZSB3b3JrbG9hZHMgcHJvZHVjZXMgYSBtZW1vcnkgc3RhdGUgd2hpY2ggaXMg ZWFzeSB0byBjb21wYWN0Lg0KPiA+IEhvd2V2ZXIsIGlmIG1lbW9yeSBpcyBmaWxsZWQgd2l0aCB1 bm1vdmFibGUgcGFnZXMsIHByb2FjdGl2ZQ0KPiA+IGNvbXBhY3Rpb24gc2hvdWxkIGVzc2VudGlh bGx5IGJhY2sgb2ZmLiBUbyB0ZXN0IHRoaXMgYXNwZWN0Og0KPiA+DQo+ID4gLSBDcmVhdGVkIGEg a2VybmVsIGRyaXZlciB0aGF0IGFsbG9jYXRlcyBhbG1vc3QgYWxsIG1lbW9yeSBhcyBodWdlcGFn ZXMNCj4gPiAgIGZvbGxvd2VkIGJ5IGZyZWVpbmcgZmlyc3QgMy80IG9mIGVhY2ggaHVnZXBhZ2Uu DQo+ID4gLSBTZXQgcHJvYWN0aXZlbmVzcz00MCAoZm9yIGFsbCBub2RlcykNCj4gPiAtIE5vdGUg dGhhdCBwcm9hY3RpdmVfY29tcGFjdF9ub2RlKCkgaXMgZGVmZXJyZWQgbWF4aW11bSBudW1iZXIg b2YgdGltZXMNCj4gPiAgIHdpdGggSFBBR0VfRlJBR19DSEVDS19JTlRFUlZBTF9NU0VDIG9mIHdh aXQgYmV0d2VlbiBlYWNoIGNoZWNrDQo+ID4gICAoPT4gfjMwIHNlY29uZHMgYmV0d2VlbiByZXRy aWVzKS4NCj4gPg0KPiA+IFsxXSBodHRwczovL3BhdGNod29yay5rZXJuZWwub3JnL3BhdGNoLzEx MDk4Mjg5Lw0KPiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogTml0aW4gR3VwdGEgPG5pZ3VwdGFAbnZp ZGlhLmNvbT4NCj4gPiBUbzogTWVsIEdvcm1hbiA8bWdvcm1hbkB0ZWNoc2luZ3VsYXJpdHkubmV0 Pg0KPiA+IFRvOiBNaWNoYWwgSG9ja28gPG1ob2Nrb0BzdXNlLmNvbT4NCj4gPiBUbzogVmxhc3Rp bWlsIEJhYmthIDx2YmFia2FAc3VzZS5jej4NCj4gPiBDQzogTWF0dGhldyBXaWxjb3ggPHdpbGx5 QGluZnJhZGVhZC5vcmc+DQo+ID4gQ0M6IEFuZHJldyBNb3J0b24gPGFrcG1AbGludXgtZm91bmRh dGlvbi5vcmc+DQo+ID4gQ0M6IE1pa2UgS3JhdmV0eiA8bWlrZS5rcmF2ZXR6QG9yYWNsZS5jb20+ DQo+ID4gQ0M6IGxpbnV4LWtlcm5lbCA8bGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZz4NCj4g PiBDQzogbGludXgtbW0gPGxpbnV4LW1tQGt2YWNrLm9yZz4NCj4gDQo+IEkgaGF2ZW4ndCBzdHVk aWVkIHRoZSBjb2RlIGluIGRldGFpbCB5ZXQsIGJ1dCBsZWF2aW5nIHRoZSBtYWlsIGZvciB0aGUg cmVmZXJlbmNlIG9mDQo+IG5ldyBDQydzLg0KPiANCj4gVGhhbmtzLA0KPiBWbGFzdGltaWwNCj4g DQo+ID4gLS0tDQo+ID4gQ2hhbmdlbG9nIHYyIHZzIHYxOg0KPiA+ICAtIEludHJvZHVjZSBwZXIt bm9kZSBhbmQgcGVyLXpvbmUgInByb2FjdGl2ZSBjb21wYWN0aW9uIHNjb3JlIi4gVGhpcw0KPiA+ ICAgIHNjb3JlIGlzIGNvbXBhcmVkIGFnYWluc3Qgd2F0ZXJtYXJrcyB3aGljaCBhcmUgc2V0IGFj Y29yZGluZyB0bw0KPiA+ICAgIHVzZXIgcHJvdmlkZWQgcHJvYWN0aXZlbmVzcyB2YWx1ZS4NCj4g PiAgLSBTZXBhcmF0ZSBjb2RlLXBhdGhzIGZvciBwcm9hY3RpdmUgY29tcGFjdGlvbiBmcm9tIHRh cmdldGVkIGNvbXBhY3Rpb24NCj4gPiAgICBpLmUuIHdoZXJlIHBnZGF0LT5rY29tcGFjdGRfbWF4 X29yZGVyIGlzIG5vbi16ZXJvLg0KPiA+ICAtIFJlbmFtZWQgaHBhZ2VfY29tcGFjdGlvbl9lZmZv cnQgLT4gcHJvYWN0aXZlbmVzcy4gSW4gZnV0dXJlIHdlIG1heQ0KPiA+ICAgIHVzZSBtb3JlIHRo YW4gZXh0ZnJhZyB3cnQgaHVnZXBhZ2Ugc2l6ZSB0byBkZXRlcm1pbmUgcHJvYWN0aXZlDQo+ID4g ICAgY29tcGFjdGlvbiBzY29yZS4NCj4gPiAtLS0NCj4gPiAgaW5jbHVkZS9saW51eC9jb21wYWN0 aW9uLmggfCAgMTAgKysNCj4gPiAgbW0vY29tcGFjdGlvbi5jICAgICAgICAgICAgfCAyNDIgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQ0KPiA+ICBtbS9pbnRlcm5hbC5oICAg ICAgICAgICAgICB8ICAgMSArDQo+ID4gIG1tL3BhZ2VfYWxsb2MuYyAgICAgICAgICAgIHwgICAx ICsNCj4gPiAgbW0vdm1zdGF0LmMgICAgICAgICAgICAgICAgfCAgMTIgKysNCj4gPiAgNSBmaWxl cyBjaGFuZ2VkLCAyNjAgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkNCj4gPg0KPiA+IGRp ZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaCBiL2luY2x1ZGUvbGludXgvY29t cGFjdGlvbi5oDQo+ID4gaW5kZXggNGI4OThjZGJkZjA1Li5jOThmNDUxMDcxNjQgMTAwNjQ0DQo+ ID4gLS0tIGEvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgNCj4gPiArKysgYi9pbmNsdWRlL2xp bnV4L2NvbXBhY3Rpb24uaA0KPiA+IEBAIC02MCw2ICs2MCwxNSBAQCBlbnVtIGNvbXBhY3RfcmVz dWx0IHsNCj4gPg0KPiA+ICBzdHJ1Y3QgYWxsb2NfY29udGV4dDsgLyogaW4gbW0vaW50ZXJuYWwu aCAqLw0KPiA+DQo+ID4gKy8vICJub2RlLSVkIg0KPiA+ICsjZGVmaW5lIENPTVBBQ1RJT05fU1RB VEVfTkFNRV9MRU4gMTYNCj4gPiArLy8gUGVyLW5vZGUgY29tcGFjdGlvbiBzdGF0ZQ0KPiA+ICtz dHJ1Y3QgY29tcGFjdGlvbl9zdGF0ZSB7DQo+ID4gKyAgICAgaW50IG5vZGVfaWQ7DQo+ID4gKyAg ICAgdW5zaWduZWQgaW50IHByb2FjdGl2ZW5lc3M7DQo+ID4gKyAgICAgY2hhciBuYW1lW0NPTVBB Q1RJT05fU1RBVEVfTkFNRV9MRU5dOyB9Ow0KPiA+ICsNCj4gPiAgLyoNCj4gPiAgICogTnVtYmVy IG9mIGZyZWUgb3JkZXItMCBwYWdlcyB0aGF0IHNob3VsZCBiZSBhdmFpbGFibGUgYWJvdmUgZ2l2 ZW4NCj4gd2F0ZXJtYXJrDQo+ID4gICAqIHRvIG1ha2Ugc3VyZSBjb21wYWN0aW9uIGhhcyByZWFz b25hYmxlIGNoYW5jZSBvZiBub3QgcnVubmluZyBvdXQNCj4gPiBvZiBmcmVlIEBAIC05MCw2ICs5 OSw3IEBAIGV4dGVybiBpbnQgc3lzY3RsX2NvbXBhY3Rpb25faGFuZGxlcihzdHJ1Y3QNCj4gPiBj dGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsICBleHRlcm4gaW50IHN5c2N0bF9leHRmcmFnX3Ro cmVzaG9sZDsNCj4gPiBleHRlcm4gaW50IHN5c2N0bF9jb21wYWN0X3VuZXZpY3RhYmxlX2FsbG93 ZWQ7DQo+ID4NCj4gPiArZXh0ZXJuIGludCBleHRmcmFnX2Zvcl9vcmRlcihzdHJ1Y3Qgem9uZSAq em9uZSwgdW5zaWduZWQgaW50IG9yZGVyKTsNCj4gPiAgZXh0ZXJuIGludCBmcmFnbWVudGF0aW9u X2luZGV4KHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQNCj4gPiBvcmRlcik7ICBleHRl cm4gZW51bSBjb21wYWN0X3Jlc3VsdCB0cnlfdG9fY29tcGFjdF9wYWdlcyhnZnBfdCBnZnBfbWFz aywNCj4gPiAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvcmRlciwgdW5zaWduZWQgaW50IGFs bG9jX2ZsYWdzLCBkaWZmIC0tZ2l0DQo+ID4gYS9tbS9jb21wYWN0aW9uLmMgYi9tbS9jb21wYWN0 aW9uLmMgaW5kZXggNjcyZDNjNzhjNmFiLi5kOTA2Y2NmZWRjZTANCj4gPiAxMDA2NDQNCj4gPiAt LS0gYS9tbS9jb21wYWN0aW9uLmMNCj4gPiArKysgYi9tbS9jb21wYWN0aW9uLmMNCj4gPiBAQCAt MjUsNiArMjUsMTAgQEANCj4gPiAgI2luY2x1ZGUgPGxpbnV4L3BzaS5oPg0KPiA+ICAjaW5jbHVk ZSAiaW50ZXJuYWwuaCINCj4gPg0KPiA+ICsjaWZkZWYgQ09ORklHX0NPTVBBQ1RJT04NCj4gPiAr c3RhdGljIHN0cnVjdCBjb21wYWN0aW9uX3N0YXRlIGNvbXBhY3Rpb25fc3RhdGVzW01BWF9OVU1O T0RFU107DQo+ID4gKyNlbmRpZg0KPiA+ICsNCj4gPiAgI2lmZGVmIENPTkZJR19DT01QQUNUSU9O DQo+ID4gIHN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9jb21wYWN0X2V2ZW50KGVudW0gdm1fZXZl bnRfaXRlbSBpdGVtKSAgeyBAQA0KPiA+IC01MCw2ICs1NCw4IEBAIHN0YXRpYyBpbmxpbmUgdm9p ZCBjb3VudF9jb21wYWN0X2V2ZW50cyhlbnVtDQo+IHZtX2V2ZW50X2l0ZW0gaXRlbSwgbG9uZyBk ZWx0YSkNCj4gPiAgI2RlZmluZSBwYWdlYmxvY2tfc3RhcnRfcGZuKHBmbikgICAgIGJsb2NrX3N0 YXJ0X3BmbihwZm4sIHBhZ2VibG9ja19vcmRlcikNCj4gPiAgI2RlZmluZSBwYWdlYmxvY2tfZW5k X3BmbihwZm4pICAgICAgICAgICAgICAgYmxvY2tfZW5kX3BmbihwZm4sDQo+IHBhZ2VibG9ja19v cmRlcikNCj4gPg0KPiA+ICtzdGF0aWMgY29uc3QgaW50IEhQQUdFX0ZSQUdfQ0hFQ0tfSU5URVJW QUxfTVNFQyA9IDUwMDsNCj4gPiArDQo+ID4gIHN0YXRpYyB1bnNpZ25lZCBsb25nIHJlbGVhc2Vf ZnJlZXBhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZyZWVsaXN0KSAgew0KPiA+ICAgICAgIHN0cnVj dCBwYWdlICpwYWdlLCAqbmV4dDsNCj4gPiBAQCAtMTg0Niw2ICsxODUyLDUxIEBAIHN0YXRpYyBp bmxpbmUgYm9vbCBpc192aWFfY29tcGFjdF9tZW1vcnkoaW50DQo+IG9yZGVyKQ0KPiA+ICAgICAg IHJldHVybiBvcmRlciA9PSAtMTsNCj4gPiAgfQ0KPiA+DQo+ID4gK3N0YXRpYyBpbnQgcHJvYWN0 aXZlX2NvbXBhY3Rpb25fc2NvcmVfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSkgew0KPiA+ICsgICAg IHVuc2lnbmVkIGxvbmcgc2NvcmU7DQo+ID4gKw0KPiA+ICsgICAgIHNjb3JlID0gem9uZS0+cHJl c2VudF9wYWdlcyAqDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGV4dGZyYWdfZm9yX29yZGVy KHpvbmUsIEhVR0VUTEJfUEFHRV9PUkRFUik7DQo+ID4gKyAgICAgc2NvcmUgPSBkaXY2NF91bChz Y29yZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgbm9kZV9wcmVzZW50X3BhZ2VzKHpvbmUt PnpvbmVfcGdkYXQtPm5vZGVfaWQpICsgMSk7DQo+ID4gKyAgICAgcmV0dXJuIHNjb3JlOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHByb2FjdGl2ZV9jb21wYWN0aW9uX3Njb3JlX25v ZGUocGdfZGF0YV90ICpwZ2RhdCkgew0KPiA+ICsgICAgIHVuc2lnbmVkIGxvbmcgc2NvcmUgPSAw Ow0KPiA+ICsgICAgIGludCB6b25laWQ7DQo+ID4gKw0KPiA+ICsgICAgIGZvciAoem9uZWlkID0g MDsgem9uZWlkIDwgTUFYX05SX1pPTkVTOyB6b25laWQrKykgew0KPiA+ICsgICAgICAgICAgICAg c3RydWN0IHpvbmUgKnpvbmU7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgem9uZSA9ICZwZ2Rh dC0+bm9kZV96b25lc1t6b25laWRdOw0KPiA+ICsgICAgICAgICAgICAgc2NvcmUgKz0gcHJvYWN0 aXZlX2NvbXBhY3Rpb25fc2NvcmVfem9uZSh6b25lKTsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ ICsgICAgIHJldHVybiBzY29yZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBwcm9h Y3RpdmVfY29tcGFjdGlvbl9zY29yZV93bWFyayhwZ19kYXRhX3QgKnBnZGF0LCBib29sDQo+ID4g K2xvdykgew0KPiA+ICsgICAgIGludCB3bWFya19sb3c7DQo+ID4gKw0KPiA+ICsgICAgIHdtYXJr X2xvdyA9IDEwMCAtIGNvbXBhY3Rpb25fc3RhdGVzW3BnZGF0LT5ub2RlX2lkXS5wcm9hY3RpdmVu ZXNzOw0KPiA+ICsgICAgIHJldHVybiBsb3cgPyB3bWFya19sb3cgOiBtaW4od21hcmtfbG93ICsg MTAsIDEwMCk7IH0NCj4gPiArDQo+ID4gK3N0YXRpYyBib29sIHNob3VsZF9wcm9hY3RpdmVfY29t cGFjdF9ub2RlKHBnX2RhdGFfdCAqcGdkYXQpIHsNCj4gPiArICAgICBpbnQgd21hcmtfaGlnaDsN Cj4gPiArDQo+ID4gKyAgICAgaWYgKCFjb21wYWN0aW9uX3N0YXRlc1twZ2RhdC0+bm9kZV9pZF0u cHJvYWN0aXZlbmVzcykNCj4gPiArICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCj4gPiArDQo+ ID4gKyAgICAgd21hcmtfaGlnaCA9IHByb2FjdGl2ZV9jb21wYWN0aW9uX3Njb3JlX3dtYXJrKHBn ZGF0LCBmYWxzZSk7DQo+ID4gKyAgICAgcmV0dXJuIHByb2FjdGl2ZV9jb21wYWN0aW9uX3Njb3Jl X25vZGUocGdkYXQpID4gd21hcmtfaGlnaDsgfQ0KPiA+ICsNCj4gPiAgc3RhdGljIGVudW0gY29t cGFjdF9yZXN1bHQgX19jb21wYWN0X2ZpbmlzaGVkKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wNCj4g PiAqY2MpICB7DQo+ID4gICAgICAgdW5zaWduZWQgaW50IG9yZGVyOw0KPiA+IEBAIC0xODcyLDYg KzE5MjMsMTkgQEAgc3RhdGljIGVudW0gY29tcGFjdF9yZXN1bHQNCj4gX19jb21wYWN0X2Zpbmlz aGVkKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKQ0KPiA+ICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gQ09NUEFDVF9QQVJUSUFMX1NLSVBQRUQ7DQo+ID4gICAgICAgfQ0KPiA+DQo+ID4g KyAgICAgaWYgKGNjLT5wcm9hY3RpdmVfY29tcGFjdGlvbikgew0KPiA+ICsgICAgICAgICAgICAg aW50IHNjb3JlLCB3bWFya19sb3c7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgc2NvcmUgPSBw cm9hY3RpdmVfY29tcGFjdGlvbl9zY29yZV96b25lKGNjLT56b25lKTsNCj4gPiArICAgICAgICAg ICAgIHdtYXJrX2xvdyA9IHByb2FjdGl2ZV9jb21wYWN0aW9uX3Njb3JlX3dtYXJrKA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2MtPnpvbmUtPnpvbmVfcGdkYXQs IHRydWUpOw0KPiA+ICsgICAgICAgICAgICAgaWYgKHNjb3JlID4gd21hcmtfbG93KQ0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICByZXQgPSBDT01QQUNUX0NPTlRJTlVFOw0KPiA+ICsgICAgICAg ICAgICAgZWxzZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICByZXQgPSBDT01QQUNUX1NVQ0NF U1M7DQo+ID4gKyAgICAgICAgICAgICBnb3RvIG91dDsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ ICAgICAgIGlmIChpc192aWFfY29tcGFjdF9tZW1vcnkoY2MtPm9yZGVyKSkNCj4gPiAgICAgICAg ICAgICAgIHJldHVybiBDT01QQUNUX0NPTlRJTlVFOw0KPiA+DQo+ID4gQEAgLTE5MzAsNiArMTk5 NCw3IEBAIHN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0DQo+IF9fY29tcGFjdF9maW5pc2hlZChz dHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYykNCj4gPiAgICAgICAgICAgICAgIH0NCj4gPiAgICAg ICB9DQo+ID4NCj4gPiArb3V0Og0KPiA+ICAgICAgIGlmIChjYy0+Y29udGVuZGVkIHx8IGZhdGFs X3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQ0KPiA+ICAgICAgICAgICAgICAgcmV0ID0gQ09NUEFD VF9DT05URU5ERUQ7DQo+ID4NCj4gPiBAQCAtMjMwMSw2ICsyMzY2LDcgQEAgc3RhdGljIGVudW0g Y29tcGFjdF9yZXN1bHQNCj4gY29tcGFjdF96b25lX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCBp bnQgb3JkZXIsDQo+ID4gICAgICAgICAgICAgICAuYWxsb2NfZmxhZ3MgPSBhbGxvY19mbGFncywN Cj4gPiAgICAgICAgICAgICAgIC5jbGFzc3pvbmVfaWR4ID0gY2xhc3N6b25lX2lkeCwNCj4gPiAg ICAgICAgICAgICAgIC5kaXJlY3RfY29tcGFjdGlvbiA9IHRydWUsDQo+ID4gKyAgICAgICAgICAg ICAucHJvYWN0aXZlX2NvbXBhY3Rpb24gPSBmYWxzZSwNCj4gPiAgICAgICAgICAgICAgIC53aG9s ZV96b25lID0gKHByaW8gPT0gTUlOX0NPTVBBQ1RfUFJJT1JJVFkpLA0KPiA+ICAgICAgICAgICAg ICAgLmlnbm9yZV9za2lwX2hpbnQgPSAocHJpbyA9PSBNSU5fQ09NUEFDVF9QUklPUklUWSksDQo+ ID4gICAgICAgICAgICAgICAuaWdub3JlX2Jsb2NrX3N1aXRhYmxlID0gKHByaW8gPT0gTUlOX0NP TVBBQ1RfUFJJT1JJVFkpDQo+ID4gQEAgLTI0MDQsNiArMjQ3MCwzNCBAQCBlbnVtIGNvbXBhY3Rf cmVzdWx0DQo+IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBp bnQgb3JkZXIsDQo+ID4gICAgICAgcmV0dXJuIHJjOw0KPiA+ICB9DQo+ID4NCj4gPiArLyogQ29t cGFjdCBhbGwgem9uZXMgd2l0aGluIGEgbm9kZSBhY2NvcmRpbmcgdG8gcHJvYWN0aXZlbmVzcyAq Lw0KPiA+ICtzdGF0aWMgdm9pZCBwcm9hY3RpdmVfY29tcGFjdF9ub2RlKHBnX2RhdGFfdCAqcGdk YXQpIHsNCj4gPiArICAgICBpbnQgem9uZWlkOw0KPiA+ICsgICAgIHN0cnVjdCB6b25lICp6b25l Ow0KPiA+ICsgICAgIHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgY2MgPSB7DQo+ID4gKyAgICAgICAg ICAgICAub3JkZXIgPSAtMSwNCj4gPiArICAgICAgICAgICAgIC5tb2RlID0gTUlHUkFURV9TWU5D X0xJR0hULA0KPiA+ICsgICAgICAgICAgICAgLmlnbm9yZV9za2lwX2hpbnQgPSB0cnVlLA0KPiA+ ICsgICAgICAgICAgICAgLndob2xlX3pvbmUgPSB0cnVlLA0KPiA+ICsgICAgICAgICAgICAgLmdm cF9tYXNrID0gR0ZQX0tFUk5FTCwNCj4gPiArICAgICAgICAgICAgIC5kaXJlY3RfY29tcGFjdGlv biA9IGZhbHNlLA0KPiA+ICsgICAgICAgICAgICAgLnByb2FjdGl2ZV9jb21wYWN0aW9uID0gdHJ1 ZSwNCj4gPiArICAgICB9Ow0KPiA+ICsNCj4gPiArICAgICBmb3IgKHpvbmVpZCA9IDA7IHpvbmVp ZCA8IE1BWF9OUl9aT05FUzsgem9uZWlkKyspIHsNCj4gPiArICAgICAgICAgICAgIHpvbmUgPSAm cGdkYXQtPm5vZGVfem9uZXNbem9uZWlkXTsNCj4gPiArICAgICAgICAgICAgIGlmICghcG9wdWxh dGVkX3pvbmUoem9uZSkpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KPiA+ ICsNCj4gPiArICAgICAgICAgICAgIGNjLnpvbmUgPSB6b25lOw0KPiA+ICsNCj4gPiArICAgICAg ICAgICAgIGNvbXBhY3Rfem9uZSgmY2MsIE5VTEwpOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAg IFZNX0JVR19PTighbGlzdF9lbXB0eSgmY2MuZnJlZXBhZ2VzKSk7DQo+ID4gKyAgICAgICAgICAg ICBWTV9CVUdfT04oIWxpc3RfZW1wdHkoJmNjLm1pZ3JhdGVwYWdlcykpOw0KPiA+ICsgICAgIH0N Cj4gPiArfQ0KPiA+DQo+ID4gIC8qIENvbXBhY3QgYWxsIHpvbmVzIHdpdGhpbiBhIG5vZGUgKi8g IHN0YXRpYyB2b2lkIGNvbXBhY3Rfbm9kZShpbnQNCj4gPiBuaWQpIEBAIC0yNDE3LDkgKzI1MTEs MTAgQEAgc3RhdGljIHZvaWQgY29tcGFjdF9ub2RlKGludCBuaWQpDQo+ID4gICAgICAgICAgICAg ICAuaWdub3JlX3NraXBfaGludCA9IHRydWUsDQo+ID4gICAgICAgICAgICAgICAud2hvbGVfem9u ZSA9IHRydWUsDQo+ID4gICAgICAgICAgICAgICAuZ2ZwX21hc2sgPSBHRlBfS0VSTkVMLA0KPiA+ ICsgICAgICAgICAgICAgLmRpcmVjdF9jb21wYWN0aW9uID0gZmFsc2UsDQo+ID4gKyAgICAgICAg ICAgICAucHJvYWN0aXZlX2NvbXBhY3Rpb24gPSBmYWxzZSwNCj4gPiAgICAgICB9Ow0KPiA+DQo+ ID4gLQ0KPiA+ICAgICAgIGZvciAoem9uZWlkID0gMDsgem9uZWlkIDwgTUFYX05SX1pPTkVTOyB6 b25laWQrKykgew0KPiA+DQo+ID4gICAgICAgICAgICAgICB6b25lID0gJnBnZGF0LT5ub2RlX3pv bmVzW3pvbmVpZF07IEBAIC0yNDkyLDYgKzI1ODcsMTE4DQo+ID4gQEAgdm9pZCBjb21wYWN0aW9u X3VucmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSkgIH0gICNlbmRpZiAvKg0KPiA+IENP TkZJR19TWVNGUyAmJiBDT05GSUdfTlVNQSAqLw0KPiA+DQo+ID4gKyNpZmRlZiBDT05GSUdfU1lT RlMNCj4gPiArDQo+ID4gKyNkZWZpbmUgQ09NUEFDVElPTl9BVFRSX1JPKF9uYW1lKSBcDQo+ID4g KyAgICAgc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBfbmFtZSMjX2F0dHIgPSBfX0FUVFJf Uk8oX25hbWUpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIENPTVBBQ1RJT05fQVRUUihfbmFtZSkgXA0K PiA+ICsgICAgIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgX25hbWUjI19hdHRyID0gXA0K PiA+ICsgICAgICAgICAgICAgX19BVFRSKF9uYW1lLCAwNjQ0LCBfbmFtZSMjX3Nob3csIF9uYW1l IyNfc3RvcmUpDQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IGtvYmplY3QgKmNvbXBhY3Rpb25f a29iajsgc3RhdGljIHN0cnVjdCBrb2JqZWN0DQo+ID4gKypjb21wYWN0aW9uX2tvYmpzW01BWF9O VU1OT0RFU107DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IGNvbXBhY3Rpb25fc3RhdGUgKmtv YmpfdG9fY29tcGFjdGlvbl9zdGF0ZShzdHJ1Y3QNCj4gPiAra29iamVjdCAqa29iaikgew0KPiA+ ICsgICAgIGludCBub2RlOw0KPiA+ICsNCj4gPiArICAgICBmb3JfZWFjaF9vbmxpbmVfbm9kZShu b2RlKSB7DQo+ID4gKyAgICAgICAgICAgICBpZiAoY29tcGFjdGlvbl9rb2Jqc1tub2RlXSA9PSBr b2JqKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJmNvbXBhY3Rpb25fc3RhdGVz W25vZGVdOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIE5VTEw7DQo+ID4g K30NCj4gPiArDQo+ID4gK3N0YXRpYyBzc2l6ZV90IHByb2FjdGl2ZW5lc3Nfc3RvcmUoc3RydWN0 IGtvYmplY3QgKmtvYmosDQo+ID4gKyAgICAgICAgICAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUg KmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90DQo+ID4gK2NvdW50KSB7DQo+ID4gKyAgICAg aW50IGVycjsNCj4gPiArICAgICB1bnNpZ25lZCBsb25nIGlucHV0Ow0KPiA+ICsgICAgIHN0cnVj dCBjb21wYWN0aW9uX3N0YXRlICpjID0ga29ial90b19jb21wYWN0aW9uX3N0YXRlKGtvYmopOw0K PiA+ICsNCj4gPiArICAgICBlcnIgPSBrc3RydG91bChidWYsIDEwLCAmaW5wdXQpOw0KPiA+ICsg ICAgIGlmIChlcnIpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gZXJyOw0KPiA+ICsgICAgIGlm IChpbnB1dCA+IDEwMCkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICsN Cj4gPiArICAgICBjLT5wcm9hY3RpdmVuZXNzID0gaW5wdXQ7DQo+ID4gKyAgICAgcmV0dXJuIGNv dW50Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3NpemVfdCBwcm9hY3RpdmVuZXNzX3No b3coc3RydWN0IGtvYmplY3QgKmtvYmosDQo+ID4gKyAgICAgICAgICAgICBzdHJ1Y3Qga29ial9h dHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zikgew0KPiA+ICsgICAgIHN0cnVjdCBjb21wYWN0aW9u X3N0YXRlICpjID0ga29ial90b19jb21wYWN0aW9uX3N0YXRlKGtvYmopOw0KPiA+ICsNCj4gPiAr ICAgICByZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgYy0+cHJvYWN0aXZlbmVzcyk7IH0NCj4g PiArDQo+ID4gK0NPTVBBQ1RJT05fQVRUUihwcm9hY3RpdmVuZXNzKTsNCj4gPiArDQo+ID4gK3N0 YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpjb21wYWN0aW9uX2F0dHJzW10gPSB7DQo+ID4gKyAgICAg JnByb2FjdGl2ZW5lc3NfYXR0ci5hdHRyLA0KPiA+ICsgICAgIE5VTEwsDQo+ID4gK307DQo+ID4g Kw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBjb21wYWN0aW9uX2F0 dHJfZ3JvdXAgPSB7DQo+ID4gKyAgICAgLmF0dHJzID0gY29tcGFjdGlvbl9hdHRycywNCj4gPiAr fTsNCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgY29tcGFjdGlvbl9zeXNmc19hZGRfbm9kZShzdHJ1 Y3QgY29tcGFjdGlvbl9zdGF0ZSAqYywNCj4gPiArICAgICBzdHJ1Y3Qga29iamVjdCAqcGFyZW50 LCBzdHJ1Y3Qga29iamVjdCAqKmNvbXBhY3Rpb25fa29ianMsDQo+ID4gKyAgICAgY29uc3Qgc3Ry dWN0IGF0dHJpYnV0ZV9ncm91cCAqY29tcGFjdGlvbl9hdHRyX2dyb3VwKSB7DQo+ID4gKyAgICAg aW50IHJldHZhbDsNCj4gPiArDQo+ID4gKyAgICAgY29tcGFjdGlvbl9rb2Jqc1tjLT5ub2RlX2lk XSA9DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGtvYmplY3RfY3JlYXRlX2FuZF9hZGQoYy0+ bmFtZSwgcGFyZW50KTsNCj4gPiArICAgICBpZiAoIWNvbXBhY3Rpb25fa29ianNbYy0+bm9kZV9p ZF0pDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsNCj4gPiArDQo+ID4gKyAgICAg cmV0dmFsID0gc3lzZnNfY3JlYXRlX2dyb3VwKGNvbXBhY3Rpb25fa29ianNbYy0+bm9kZV9pZF0s DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFjdGlvbl9hdHRyX2dyb3Vw KTsNCj4gPiArICAgICBpZiAocmV0dmFsKQ0KPiA+ICsgICAgICAgICAgICAga29iamVjdF9wdXQo Y29tcGFjdGlvbl9rb2Jqc1tjLT5ub2RlX2lkXSk7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiBy ZXR2YWw7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIF9faW5pdCBjb21wYWN0aW9u X3N5c2ZzX2luaXQodm9pZCkgew0KPiA+ICsgICAgIHN0cnVjdCBjb21wYWN0aW9uX3N0YXRlICpj Ow0KPiA+ICsgICAgIGludCBlcnIsIG5vZGU7DQo+ID4gKw0KPiA+ICsgICAgIGNvbXBhY3Rpb25f a29iaiA9IGtvYmplY3RfY3JlYXRlX2FuZF9hZGQoImNvbXBhY3Rpb24iLCBtbV9rb2JqKTsNCj4g PiArICAgICBpZiAoIWNvbXBhY3Rpb25fa29iaikNCj4gPiArICAgICAgICAgICAgIHJldHVybjsN Cj4gPiArDQo+ID4gKyAgICAgZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkgew0KPiA+ICsgICAg ICAgICAgICAgYyA9ICZjb21wYWN0aW9uX3N0YXRlc1tub2RlXTsNCj4gPiArICAgICAgICAgICAg IGVyciA9IGNvbXBhY3Rpb25fc3lzZnNfYWRkX25vZGUoYywgY29tcGFjdGlvbl9rb2JqLA0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFjdGlvbl9rb2JqcywN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb21wYWN0aW9uX2F0 dHJfZ3JvdXApOw0KPiA+ICsgICAgICAgICAgICAgaWYgKGVycikNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgcHJfZXJyKCJjb21wYWN0aW9uOiBVbmFibGUgdG8gYWRkIHN0YXRlICVzIiwgYy0+ bmFtZSk7DQo+ID4gKyAgICAgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBfX2lu aXQgY29tcGFjdGlvbl9pbml0KHZvaWQpIHsNCj4gPiArICAgICBpbnQgbm9kZTsNCj4gPiArDQo+ ID4gKyAgICAgZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkgew0KPiA+ICsgICAgICAgICAgICAg c3RydWN0IGNvbXBhY3Rpb25fc3RhdGUgKmMgPSAmY29tcGFjdGlvbl9zdGF0ZXNbbm9kZV07DQo+ ID4gKw0KPiA+ICsgICAgICAgICAgICAgYy0+bm9kZV9pZCA9IG5vZGU7DQo+ID4gKyAgICAgICAg ICAgICBjLT5wcm9hY3RpdmVuZXNzID0gMDsNCj4gPiArICAgICAgICAgICAgIHNucHJpbnRmKGMt Pm5hbWUsIENPTVBBQ1RJT05fU1RBVEVfTkFNRV9MRU4sICJub2RlLSVkIiwNCj4gbm9kZSk7DQo+ ID4gKyAgICAgfQ0KPiA+ICt9DQo+ID4gKyNlbmRpZg0KPiA+ICsNCj4gPiAgc3RhdGljIGlubGlu ZSBib29sIGtjb21wYWN0ZF93b3JrX3JlcXVlc3RlZChwZ19kYXRhX3QgKnBnZGF0KSAgew0KPiA+ ICAgICAgIHJldHVybiBwZ2RhdC0+a2NvbXBhY3RkX21heF9vcmRlciA+IDAgfHwga3RocmVhZF9z aG91bGRfc3RvcCgpOw0KPiA+IEBAIC0yNTMyLDYgKzI3MzksOCBAQCBzdGF0aWMgdm9pZCBrY29t cGFjdGRfZG9fd29yayhwZ19kYXRhX3QgKnBnZGF0KQ0KPiA+ICAgICAgICAgICAgICAgLm1vZGUg PSBNSUdSQVRFX1NZTkNfTElHSFQsDQo+ID4gICAgICAgICAgICAgICAuaWdub3JlX3NraXBfaGlu dCA9IGZhbHNlLA0KPiA+ICAgICAgICAgICAgICAgLmdmcF9tYXNrID0gR0ZQX0tFUk5FTCwNCj4g PiArICAgICAgICAgICAgIC5kaXJlY3RfY29tcGFjdGlvbiA9IGZhbHNlLA0KPiA+ICsgICAgICAg ICAgICAgLnByb2FjdGl2ZV9jb21wYWN0aW9uID0gZmFsc2UsDQo+ID4gICAgICAgfTsNCj4gPiAg ICAgICB0cmFjZV9tbV9jb21wYWN0aW9uX2tjb21wYWN0ZF93YWtlKHBnZGF0LT5ub2RlX2lkLCBj Yy5vcmRlciwNCj4gPg0KPiA+IGNjLmNsYXNzem9uZV9pZHgpOyBAQCAtMjYyOSw2ICsyODM4LDcg QEAgc3RhdGljIGludCBrY29tcGFjdGQodm9pZCAqcCkNCj4gPiB7DQo+ID4gICAgICAgcGdfZGF0 YV90ICpwZ2RhdCA9IChwZ19kYXRhX3QqKXA7DQo+ID4gICAgICAgc3RydWN0IHRhc2tfc3RydWN0 ICp0c2sgPSBjdXJyZW50Ow0KPiA+ICsgICAgIHVuc2lnbmVkIGludCBwcm9hY3RpdmVfZGVmZXIg PSAwOw0KPiA+DQo+ID4gICAgICAgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2sgPSBjcHVt YXNrX29mX25vZGUocGdkYXQtPm5vZGVfaWQpOw0KPiA+DQo+ID4gQEAgLTI2NDQsMTIgKzI4NTQs MjkgQEAgc3RhdGljIGludCBrY29tcGFjdGQodm9pZCAqcCkNCj4gPiAgICAgICAgICAgICAgIHVu c2lnbmVkIGxvbmcgcGZsYWdzOw0KPiA+DQo+ID4gICAgICAgICAgICAgICB0cmFjZV9tbV9jb21w YWN0aW9uX2tjb21wYWN0ZF9zbGVlcChwZ2RhdC0+bm9kZV9pZCk7DQo+ID4gLSAgICAgICAgICAg ICB3YWl0X2V2ZW50X2ZyZWV6YWJsZShwZ2RhdC0+a2NvbXBhY3RkX3dhaXQsDQo+ID4gLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAga2NvbXBhY3RkX3dvcmtfcmVxdWVzdGVkKHBnZGF0KSk7 DQo+ID4gKyAgICAgICAgICAgICBpZiAod2FpdF9ldmVudF9mcmVlemFibGVfdGltZW91dChwZ2Rh dC0+a2NvbXBhY3RkX3dhaXQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGtjb21wYWN0ZF93 b3JrX3JlcXVlc3RlZChwZ2RhdCksDQo+ID4gKw0KPiA+ICsgbXNlY3NfdG9famlmZmllcyhIUEFH RV9GUkFHX0NIRUNLX0lOVEVSVkFMX01TRUMpKSkgew0KPiA+DQo+ID4gLSAgICAgICAgICAgICBw c2lfbWVtc3RhbGxfZW50ZXIoJnBmbGFncyk7DQo+ID4gLSAgICAgICAgICAgICBrY29tcGFjdGRf ZG9fd29yayhwZ2RhdCk7DQo+ID4gLSAgICAgICAgICAgICBwc2lfbWVtc3RhbGxfbGVhdmUoJnBm bGFncyk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHBzaV9tZW1zdGFsbF9lbnRlcigmcGZs YWdzKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAga2NvbXBhY3RkX2RvX3dvcmsocGdkYXQp Ow0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBwc2lfbWVtc3RhbGxfbGVhdmUoJnBmbGFncyk7 DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KPiA+ICsgICAgICAgICAgICAg fQ0KPiA+ICsNCj4gPiArICAgICAgICAgICAgIGlmIChzaG91bGRfcHJvYWN0aXZlX2NvbXBhY3Rf bm9kZShwZ2RhdCkpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBy ZXZfc2NvcmUsIHNjb3JlOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgaWYgKHBy b2FjdGl2ZV9kZWZlcikgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Fj dGl2ZV9kZWZlci0tOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl Ow0KPiA+ICsgICAgICAgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgICAgICAgICAg IHByZXZfc2NvcmUgPSBwcm9hY3RpdmVfY29tcGFjdGlvbl9zY29yZV9ub2RlKHBnZGF0KTsNCj4g PiArICAgICAgICAgICAgICAgICAgICAgcHJvYWN0aXZlX2NvbXBhY3Rfbm9kZShwZ2RhdCk7DQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgIHNjb3JlID0gcHJvYWN0aXZlX2NvbXBhY3Rpb25fc2Nv cmVfbm9kZShwZ2RhdCk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHByb2FjdGl2ZV9kZWZl ciA9IHNjb3JlIDwgcHJldl9zY29yZSA/DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAwIDogMSA8PCBDT01QQUNUX01BWF9ERUZFUl9TSElGVDsNCj4gPiArICAgICAg ICAgICAgIH0NCj4gPiAgICAgICB9DQo+ID4NCj4gPiAgICAgICByZXR1cm4gMDsNCj4gPiBAQCAt MjcyNiw2ICsyOTUzLDkgQEAgc3RhdGljIGludCBfX2luaXQga2NvbXBhY3RkX2luaXQodm9pZCkN Cj4gPiAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ID4gICAgICAgfQ0KPiA+DQo+ID4gKyAg ICAgY29tcGFjdGlvbl9pbml0KCk7DQo+ID4gKyAgICAgY29tcGFjdGlvbl9zeXNmc19pbml0KCk7 DQo+ID4gKw0KPiA+ICAgICAgIGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkNCj4g PiAgICAgICAgICAgICAgIGtjb21wYWN0ZF9ydW4obmlkKTsNCj4gPiAgICAgICByZXR1cm4gMDsN Cj4gPiBkaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmggaW5kZXgNCj4g PiAzY2YyMGFiM2NhMDEuLmU2NmJhZmQ2YzdhMiAxMDA2NDQNCj4gPiAtLS0gYS9tbS9pbnRlcm5h bC5oDQo+ID4gKysrIGIvbW0vaW50ZXJuYWwuaA0KPiA+IEBAIC0yMDMsNiArMjAzLDcgQEAgc3Ry dWN0IGNvbXBhY3RfY29udHJvbCB7DQo+ID4gICAgICAgYm9vbCBub19zZXRfc2tpcF9oaW50OyAg ICAgICAgICAvKiBEb24ndCBtYXJrIGJsb2NrcyBmb3Igc2tpcHBpbmcgKi8NCj4gPiAgICAgICBi b29sIGlnbm9yZV9ibG9ja19zdWl0YWJsZTsgICAgIC8qIFNjYW4gYmxvY2tzIGNvbnNpZGVyZWQg dW5zdWl0YWJsZSAqLw0KPiA+ICAgICAgIGJvb2wgZGlyZWN0X2NvbXBhY3Rpb247ICAgICAgICAg LyogRmFsc2UgZnJvbSBrY29tcGFjdGQgb3IgL3Byb2MvLi4uICovDQo+ID4gKyAgICAgYm9vbCBw cm9hY3RpdmVfY29tcGFjdGlvbjsgICAgICAvKiBrY29tcGFjdGQgcHJvYWN0aXZlIGNvbXBhY3Rp b24gKi8NCj4gPiAgICAgICBib29sIHdob2xlX3pvbmU7ICAgICAgICAgICAgICAgIC8qIFdob2xl IHpvbmUgc2hvdWxkL2hhcyBiZWVuIHNjYW5uZWQgKi8NCj4gPiAgICAgICBib29sIGNvbnRlbmRl ZDsgICAgICAgICAgICAgICAgIC8qIFNpZ25hbCBsb2NrIG9yIHNjaGVkIGNvbnRlbnRpb24gKi8N Cj4gPiAgICAgICBib29sIHJlc2NhbjsgICAgICAgICAgICAgICAgICAgIC8qIFJlc2Nhbm5pbmcg dGhlIHNhbWUgcGFnZWJsb2NrICovDQo+ID4gZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBi L21tL3BhZ2VfYWxsb2MuYyBpbmRleA0KPiA+IDNjNGViNzUwYTE5OS4uZTkyYzcwNmU5M2VlIDEw MDY0NA0KPiA+IC0tLSBhL21tL3BhZ2VfYWxsb2MuYw0KPiA+ICsrKyBiL21tL3BhZ2VfYWxsb2Mu Yw0KPiA+IEBAIC04NDAyLDYgKzg0MDIsNyBAQCBpbnQgYWxsb2NfY29udGlnX3JhbmdlKHVuc2ln bmVkIGxvbmcgc3RhcnQsDQo+IHVuc2lnbmVkIGxvbmcgZW5kLA0KPiA+ICAgICAgICAgICAgICAg Lmlnbm9yZV9za2lwX2hpbnQgPSB0cnVlLA0KPiA+ICAgICAgICAgICAgICAgLm5vX3NldF9za2lw X2hpbnQgPSB0cnVlLA0KPiA+ICAgICAgICAgICAgICAgLmdmcF9tYXNrID0gY3VycmVudF9nZnBf Y29udGV4dChnZnBfbWFzayksDQo+ID4gKyAgICAgICAgICAgICAucHJvYWN0aXZlX2NvbXBhY3Rp b24gPSBmYWxzZSwNCj4gPiAgICAgICB9Ow0KPiA+ICAgICAgIElOSVRfTElTVF9IRUFEKCZjYy5t aWdyYXRlcGFnZXMpOw0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL21tL3Ztc3RhdC5jIGIvbW0vdm1z dGF0LmMgaW5kZXgNCj4gPiA3OGQ1MzM3OGRiOTkuLjcwZDcyNDEyMjY0MyAxMDA2NDQNCj4gPiAt LS0gYS9tbS92bXN0YXQuYw0KPiA+ICsrKyBiL21tL3Ztc3RhdC5jDQo+ID4gQEAgLTEwNzQsNiAr MTA3NCwxOCBAQCBzdGF0aWMgaW50IF9fZnJhZ21lbnRhdGlvbl9pbmRleCh1bnNpZ25lZCBpbnQN Cj4gb3JkZXIsIHN0cnVjdCBjb250aWdfcGFnZV9pbmZvICppbg0KPiA+ICAgICAgIHJldHVybiAx MDAwIC0gZGl2X3U2NCggKDEwMDArKGRpdl91NjQoaW5mby0+ZnJlZV9wYWdlcyAqDQo+ID4gMTAw MFVMTCwgcmVxdWVzdGVkKSkpLCBpbmZvLT5mcmVlX2Jsb2Nrc190b3RhbCk7ICB9DQo+ID4NCj4g PiAraW50IGV4dGZyYWdfZm9yX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQg b3JkZXIpIHsNCj4gPiArICAgICBzdHJ1Y3QgY29udGlnX3BhZ2VfaW5mbyBpbmZvOw0KPiA+ICsN Cj4gPiArICAgICBmaWxsX2NvbnRpZ19wYWdlX2luZm8oem9uZSwgb3JkZXIsICZpbmZvKTsNCj4g PiArICAgICBpZiAoaW5mby5mcmVlX3BhZ2VzID09IDApDQo+ID4gKyAgICAgICAgICAgICByZXR1 cm4gMDsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIChpbmZvLmZyZWVfcGFnZXMgLSAoaW5mby5m cmVlX2Jsb2Nrc19zdWl0YWJsZSA8PCBvcmRlcikpICogMTAwDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLw0KPiA+ICtpbmZvLmZyZWVf cGFnZXM7IH0NCj4gPiArDQo+ID4gIC8qIFNhbWUgYXMgX19mcmFnbWVudGF0aW9uIGluZGV4IGJ1 dCBhbGxvY3MgY29udGlnX3BhZ2VfaW5mbyBvbiBzdGFjaw0KPiA+ICovICBpbnQgZnJhZ21lbnRh dGlvbl9pbmRleChzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyKSAgew0KPiA+ DQoNCg==