From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CD543C0650F for ; Thu, 8 Aug 2019 20:48:03 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 65CEF20B7C for ; Thu, 8 Aug 2019 20:48:03 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=fb.com header.i=@fb.com header.b="ikPFAyHe"; dkim=pass (1024-bit key) header.d=fb.onmicrosoft.com header.i=@fb.onmicrosoft.com header.b="BKTV7ScF" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390186AbfHHUsC (ORCPT ); Thu, 8 Aug 2019 16:48:02 -0400 Received: from mx0a-00082601.pphosted.com ([67.231.145.42]:17320 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729780AbfHHUsB (ORCPT ); Thu, 8 Aug 2019 16:48:01 -0400 Received: from pps.filterd (m0044008.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x78KjIJx030735; Thu, 8 Aug 2019 13:47:49 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-id : content-transfer-encoding : mime-version; s=facebook; bh=EYpF9bSSRjnYxmxJ45U+onyFbW6H1cqRn7AJFHR6GFI=; b=ikPFAyHe7YNrwP2CrCoLNMoex/z0NhLpl6QdF/zGTs0k3j0PY8jmnkGk43aiFpBsUMbl PEHBiISpG9WsuKV4SY0awV1WkItOD2ghponq37V4XMuAJiQSKHuHURv8Cx0mAwvc9ev+ 7fNz3QPBvk9CoNywTGVkmM/QQ1FNfDyPBTU= Received: from mail.thefacebook.com (mailout.thefacebook.com [199.201.64.23]) by mx0a-00082601.pphosted.com with ESMTP id 2u8q76s0k4-8 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Thu, 08 Aug 2019 13:47:48 -0700 Received: from prn-mbx07.TheFacebook.com (2620:10d:c081:6::21) by prn-hub01.TheFacebook.com (2620:10d:c081:35::125) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.1.1713.5; Thu, 8 Aug 2019 13:47:16 -0700 Received: from prn-hub06.TheFacebook.com (2620:10d:c081:35::130) by prn-mbx07.TheFacebook.com (2620:10d:c081:6::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.1.1713.5; Thu, 8 Aug 2019 13:47:16 -0700 Received: from NAM03-CO1-obe.outbound.protection.outlook.com (192.168.54.28) by o365-in.thefacebook.com (192.168.16.30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.1.1713.5 via Frontend Transport; Thu, 8 Aug 2019 13:47:16 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=j1494d4l/FgRBxoRBHaC4Ufa3Tk2qA0FOdQYBqEe+vJgysYHmKGmOhkrlZz03nPd2TsQTQUTFe9dVE+ZMOsIjH1EwWBGWMe6Z+X+yFA+hM5SH4Cd0GBhIAsAN8h2nPBYHpl3T8DNJz5RDGrjOAWug/xT55FxjJ/9b3Mw8O8oNeLMmfIqkQhp/MMhVIKjmUvLjXgErfPclZLMz9SlGEkMolivGXS/93uTjAi9t2yZXBYBOLRWq7LXoAn2OzJWW8XAFk0sH7F3rtQDAO1rJBGMJs+4hjQrBRfVUzZrfWGRVl7kPCNIdwrHBoVsqHIRWQW2tDL1vpL4SGzzluPR3bS+HA== 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=EYpF9bSSRjnYxmxJ45U+onyFbW6H1cqRn7AJFHR6GFI=; b=mjCkdOX8fzVWzOSiUkiBo6bSnGyNoRE3/EWjEEyFdAK7cvxCY+6UNPK3q9/6788kEeQDljDp/HPYZX2Lzbm21HmR6S3lxubfYHlato/HWqTo23sdUfJzTyW4MLot8GHj8c0jG+GkhF4muJz7P7XFt5kYk7KyZ8wgCGcYQUVYufYtaN0DDbkM1KsN3LuDPuCOXcpeycd2NUbe4YuLeMApnsV4Wj3CIaZUcCGG3U0PXo47ZMfGqIrajQqKv7SqjZYsJgMFFD7IUD7fUecib1Kz4IV1PvK6x4ao1/z2ZoGlfu2iG9HpqiYl0deJWAECQiqBnfKZR/VNfh/pRIXib2vJ8g== ARC-Authentication-Results: i=1; mx.microsoft.com 1;spf=pass smtp.mailfrom=fb.com;dmarc=pass action=none header.from=fb.com;dkim=pass header.d=fb.com;arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.onmicrosoft.com; s=selector2-fb-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=EYpF9bSSRjnYxmxJ45U+onyFbW6H1cqRn7AJFHR6GFI=; b=BKTV7ScFZHFjfuxeLNiGGv+Q+Om3NpbegN6WfXBUCYldGJmvhcporKmDkVCh4mIB48WQnb7vnru02MoMKFXyUadRYRPYfnqYUsA0v98gUUTWPKvKFfszAwYG/cjo+LtsRUlJyuBpa4TGoQZtDUNxT8pQn4566KeSqKpW4S8TbFA= Received: from BYAPR15MB3384.namprd15.prod.outlook.com (20.179.59.17) by BYAPR15MB2278.namprd15.prod.outlook.com (52.135.197.26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2115.13; Thu, 8 Aug 2019 20:47:15 +0000 Received: from BYAPR15MB3384.namprd15.prod.outlook.com ([fe80::e499:ecba:ec04:abac]) by BYAPR15MB3384.namprd15.prod.outlook.com ([fe80::e499:ecba:ec04:abac%5]) with mapi id 15.20.2136.022; Thu, 8 Aug 2019 20:47:15 +0000 From: Yonghong Song To: carlos antonio neira bustos , Y Song CC: "netdev@vger.kernel.org" , "ebiederm@xmission.com" , "brouer@redhat.com" , "quentin.monnet@netronome.com" Subject: Re: [PATCH v5 bpf-next] BPF: helpers: New helper to obtain namespacedata from current task Thread-Topic: [PATCH v5 bpf-next] BPF: helpers: New helper to obtain namespacedata from current task Thread-Index: AQHVTieQJmjZOrhniEiesemZ8uBquabxuJgA Date: Thu, 8 Aug 2019 20:47:14 +0000 Message-ID: <1c24077d-ed17-86b6-8d3f-81994105f302@fb.com> References: <20190808012240.htbgpv2mhktvig5h@dev00> <96c7ea2e-7acf-e81a-61dc-a4d4562c736a@fb.com> <20190808174848.poybtaagg5ctle7t@dev00> <5d4c856b.1c69fb81.2aa4f.32dd@mx.google.com> In-Reply-To: <5d4c856b.1c69fb81.2aa4f.32dd@mx.google.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: MWHPR14CA0062.namprd14.prod.outlook.com (2603:10b6:300:81::24) To BYAPR15MB3384.namprd15.prod.outlook.com (2603:10b6:a03:10e::17) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [2620:10d:c090:200::3:8bce] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 9ebf9feb-e06c-43a8-1540-08d71c419820 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(2017052603328)(7193020);SRVR:BYAPR15MB2278; x-ms-traffictypediagnostic: BYAPR15MB2278: x-ms-exchange-purlcount: 1 x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:1002; x-forefront-prvs: 012349AD1C x-forefront-antispam-report: SFV:NSPM;SFS:(10019020)(346002)(39860400002)(366004)(136003)(376002)(396003)(199004)(189003)(31696002)(7736002)(6116002)(53546011)(386003)(81166006)(2616005)(64756008)(446003)(11346002)(25786009)(71200400001)(53946003)(71190400001)(66446008)(99286004)(486006)(6506007)(36756003)(66946007)(53936002)(256004)(5660300002)(966005)(66556008)(186003)(316002)(476003)(31686004)(5024004)(14444005)(81156014)(6512007)(46003)(66476007)(6246003)(102836004)(8676002)(8936002)(4326008)(6306002)(110136005)(6436002)(478600001)(305945005)(54906003)(2906002)(14454004)(229853002)(6486002)(86362001)(52116002)(76176011)(30864003)(2004002)(559001)(569006);DIR:OUT;SFP:1102;SCL:1;SRVR:BYAPR15MB2278;H:BYAPR15MB3384.namprd15.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: fb.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: 7tVfh3n9dtUzE4prhz+35Pq5CBthasjjgqjdrlkKtDbNKawfJlQtHopzovv3Mug7+KCXtbxaeRhb1+8EW5ych/BRkHd21RsaIq1ueImGlRIrr9kZaLHEvz8Kzy6Qch5gYMcS66Uvpsy0ZVeSDQ173BdARdse1HrH9rKjP1o/wna/rYhcENtUjX/WmY41iaKw+cvWltKYN1O5Ri/DceZx1mfz2fg/xTKC5rdybC7SDRDkkcv3h3t0XgkQHbrMDfdNhuW1Fjd49xTM4T12k5vLlLdMzNNqB8qAGbJhCA/kZKxI12JfVtHKzoPD84+Or/nVKeJs3I72gtnw5OvghIRUKZ5tEw+zTS8PiKC/dycAsIY+288z4jJ9mdboO0dEJuA7G1FO6oU/rNdSrt287DOU0L1GDMvtUFBGPcU3ukaF62E= Content-Type: text/plain; charset="utf-8" Content-ID: <54C284179137BF46BB4EF9E56288A964@namprd15.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 9ebf9feb-e06c-43a8-1540-08d71c419820 X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Aug 2019 20:47:14.8854 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 8ae927fe-1255-47a7-a2af-5f3a069daaa2 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: yhs@fb.com X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR15MB2278 X-OriginatorOrg: fb.com X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:,, definitions=2019-08-08_08:,, signatures=0 X-Proofpoint-Spam-Details: rule=fb_default_notspam policy=fb_default score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1906280000 definitions=main-1908080182 X-FB-Internal: deliver Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org DQoNCk9uIDgvOC8xOSAxOjI2IFBNLCBjYXJsb3MgYW50b25pbyBuZWlyYSBidXN0b3Mgd3JvdGU6 DQo+IEhpIFlvbmdob25nLA0KPiANCj4gSeKAmW0gc29ycnksIGp1c3QgdG8gYmUgc3VyZSwgSeKA mW0ganVzdCBtaXNzaW5nIHRoZSBlcnJvciBjb2RlcyBmcm9tIA0KPiBmaWxlbmFtZV9sb29rdXAo KSByaWdodCA/Lg0KDQogRnJvbSBrZXJuZWwgZnVuY3Rpb25hbGl0eSBwb2ludCBvZiB2aWV3LiBZ ZXMsIEkgYW0gdGFsa2luZyBhYm91dA0KZXJyb3IgY29kZXMgcmV0dXJuZWQgYnkgZmlsZW5hbWVf bG9va3VwKCkuDQpGb3IgZXhhbXBsZSwgaWYgQ09ORklHX1BJRF9OUyBvciBDT05GSUdfTkFNRVNQ QUNFUyBpcyBub3QNCmRlZmluZWQgaW4gdGhlIGNvbmZpZywgdGhlIHBhdGggIi9wcm9jL3NlbGYv bnMvcGlkIiB3aWxsIG5vdCBleGlzdCwNCnRoZSBlcnJvciBjb2RlIHdpbGwgcmV0dXJuLiBJdCBt YXkgYmUgLUVOT1RESVINCmlmIENPTkZJR19OQU1FU1BBQ0VTIG5vdCBkZWZpbmVkIG9yIC1FQ0hJ TEQgaWYgQ09ORklHX1BJRF9OUw0KaXMgbm90IGRlZmluZWQuIFBsZWFzZSBkb3VibGUgY2hlY2su DQoNClBsZWFzZSBkbyBmb2xsb3cgdGhlIGFkdmljZSBpbg0KID4gaHR0cHM6Ly9sb3JlLmtlcm5l bC5vcmcvbmV0ZGV2LzIwMTkwODA4MTc0ODQ4LnBveWJ0YWFnZzVjdGxlN3RAZGV2MDAvVC8jdA0K dG8gYnJlYWsgdGhlIHNpbmdsZSBwYXRjaCB0byBtdWx0aXBsZSBwYXRjaGVzLg0KDQpJIG9ubHkg cmV2aWV3ZWQgdGhlIGtlcm5lbCBjb2RlLiBXaWxsIHJldmlldyB0b29scy8gY29kZQ0KaW4gdGhl IG5leHQgcHJvcGVybHktZm9ybWF0dGVkIChicm9rZW4tdXApIGNvbW1pdHMuDQoNCkFsc28sIHBs ZWFzZSBhbHNvIGNjIGNvbW1pdHMgdG8gYnBmIG1haWxpbmcgbGlzdCBhdA0KYnBmQHZnZXIua2Vy bmVsLm9yZw0KDQo+IA0KPiBCZXN0cw0KPiANCj4gTWF5YmUgc29tZSBvdGhlciBlcnJvciBjb2Rl cyBpbiBmaWxlbmFtZV9sb29rdXAoKSBmdW5jdGlvbj8NCj4gDQo+ICA+ICsgKg0KPiANCj4gID4g KyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIElmIHVuYWJsZSB0 byBnZXQgdGhlIGlub2RlIGZyb20gDQo+IC9wcm9jL3NlbGYvbnMvcGlkIGFuIGVycm9yIGNvZGUN Cj4gDQo+ICA+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB3 aWxsIGJlIHJldHVybmVkLg0KPiANCj4gKkZyb206ICpZIFNvbmcgPG1haWx0bzp5czExNDMyMUBn bWFpbC5jb20+DQo+ICpTZW50OiAqMDggQXVndXN0IDIwMTkgMTU6NDQNCj4gKlRvOiAqQ2FybG9z IEFudG9uaW8gTmVpcmEgQnVzdG9zIDxtYWlsdG86Y25laXJhYnVzdG9zQGdtYWlsLmNvbT4NCj4g KkNjOiAqWW9uZ2hvbmcgU29uZyA8bWFpbHRvOnloc0BmYi5jb20+OyBuZXRkZXZAdmdlci5rZXJu ZWwub3JnIA0KPiA8bWFpbHRvOm5ldGRldkB2Z2VyLmtlcm5lbC5vcmc+OyBlYmllZGVybUB4bWlz c2lvbi5jb20gDQo+IDxtYWlsdG86ZWJpZWRlcm1AeG1pc3Npb24uY29tPjsgYnJvdWVyQHJlZGhh dC5jb20gDQo+IDxtYWlsdG86YnJvdWVyQHJlZGhhdC5jb20+OyBxdWVudGluLm1vbm5ldEBuZXRy b25vbWUuY29tIA0KPiA8bWFpbHRvOnF1ZW50aW4ubW9ubmV0QG5ldHJvbm9tZS5jb20+DQo+ICpT dWJqZWN0OiAqUmU6IFtQQVRDSCB2NSBicGYtbmV4dF0gQlBGOiBoZWxwZXJzOiBOZXcgaGVscGVy IHRvIG9idGFpbiANCj4gbmFtZXNwYWNlZGF0YSBmcm9tIGN1cnJlbnQgdGFzaw0KPiANCj4gT24g VGh1LCBBdWcgOCwgMjAxOSBhdCAxMDo1MiBBTSBDYXJsb3MgQW50b25pbyBOZWlyYSBCdXN0b3MN Cj4gDQo+IDxjbmVpcmFidXN0b3NAZ21haWwuY29tPiB3cm90ZToNCj4gDQo+ICA+DQo+IA0KPiAg PiBZb25naG9uZywNCj4gDQo+ICA+DQo+IA0KPiAgPiBJIGhhdmUgbW9kaWZpZWQgdGhlIHBhdGNo IGZvbGxvd2luZyB5b3VyIGZlZWRiYWNrLg0KPiANCj4gID4gTGV0IG1lIGtub3cgaWYgSSdtIG1p c3Npbmcgc29tZXRoaW5nLg0KPiANCj4gWWVzLCBJIGhhdmUgc29tZSBvdGhlciByZXF1ZXN0cyBh Ym91dCBmb3JtYXRpbmcuDQo+IA0KPiBodHRwczovL2xvcmUua2VybmVsLm9yZy9uZXRkZXYvMjAx OTA4MDgxNzQ4NDgucG95YnRhYWdnNWN0bGU3dEBkZXYwMC9ULyN0DQo+IA0KPiBDb3VsZCB5b3Ug YWRkcmVzcyBpdCBhcyB3ZWxsPw0KPiANCj4gID4NCj4gDQo+ICA+IEJlc3RzDQo+IA0KPiAgPg0K PiANCj4gID4gRnJvbSA3MGY4ZDU1ODQ3MDBjOWNmYzgyYzAwNjkwMWQ4ZWU5NTk1YzUzZjE1IE1v biBTZXAgMTcgMDA6MDA6MDAgMjAwMQ0KPiANCj4gID4gRnJvbTogQ2FybG9zIDxjbmVpcmFidXN0 b3NAZ21haWwuY29tPg0KPiANCj4gID4gRGF0ZTogV2VkLCA3IEF1ZyAyMDE5IDIwOjA0OjMwIC0w NDAwDQo+IA0KPiAgPiBTdWJqZWN0OiBbUEFUQ0hdIFtQQVRDSCB2NiBicGYtbmV4dF0gQlBGOiBO ZXcgaGVscGVyIHRvIG9idGFpbiANCj4gbmFtZXNwYWNlIGRhdGENCj4gDQo+ICA+wqAgZnJvbSBj dXJyZW50IHRhc2sNCj4gDQo+ICA+DQo+IA0KPiAgPiBUaGlzIGhlbHBlciBvYnRhaW5zIHRoZSBh Y3RpdmUgbmFtZXNwYWNlIGZyb20gY3VycmVudCBhbmQgcmV0dXJucyANCj4gcGlkLCB0Z2lkLA0K PiANCj4gID4gZGV2aWNlIGFuZCBuYW1lc3BhY2UgaWQgYXMgc2VlbiBmcm9tIHRoYXQgbmFtZXNw YWNlLCBhbGxvd2luZyB0byANCj4gaW5zdHJ1bWVudA0KPiANCj4gID4gYSBwcm9jZXNzIGluc2lk ZSBhIGNvbnRhaW5lci4NCj4gDQo+ICA+IERldmljZSBpcyByZWFkIGZyb20gL3Byb2Mvc2VsZi9u cy9waWQsIGFzIGluIHRoZSBmdXR1cmUgaXQncyBwb3NzaWJsZSANCj4gdGhhdA0KPiANCj4gID4g ZGlmZmVyZW50IHBpZF9ucyBmaWxlcyBtYXkgYmVsb25nIHRvIGRpZmZlcmVudCBkZXZpY2VzLCBh Y2NvcmRpbmcNCj4gDQo+ICA+IHRvIHRoZSBkaXNjdXNzaW9uIGJldHdlZW4gRXJpYyBCaWVkZXJt YW4gYW5kIFlvbmdob25nIGluIDIwMTcgbGludXggDQo+IHBsdW1iZXJzDQo+IA0KPiAgPiBjb25m ZXJlbmNlLg0KPiANCj4gID4gQ3VycmVudGx5IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpLCBp cyB1c2VkIHRvIGRvIHBpZCBmaWx0ZXJpbmcgaW4gDQo+IGJjYydzDQo+IA0KPiAgPiBzY3JpcHRz IGJ1dCB0aGlzIGhlbHBlciByZXR1cm5zIHRoZSBwaWQgYXMgc2VlbiBieSB0aGUgcm9vdCBuYW1l c3BhY2UgDQo+IHdoaWNoIGlzDQo+IA0KPiAgPiBmaW5lIHdoZW4gYSBiY2Mgc2NyaXB0IGlzIG5v dCBleGVjdXRlZCBpbnNpZGUgYSBjb250YWluZXIuDQo+IA0KPiAgPiBXaGVuIHRoZSBwcm9jZXNz IG9mIGludGVyZXN0IGlzIGluc2lkZSBhIGNvbnRhaW5lciwgcGlkIGZpbHRlcmluZyANCj4gd2ls bCBub3Qgd29yaw0KPiANCj4gID4gaWYgYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgaXMgdXNl ZC4gVGhpcyBoZWxwZXIgYWRkcmVzc2VzIHRoaXMgDQo+IGxpbWl0YXRpb24NCj4gDQo+ICA+IHJl dHVybmluZyB0aGUgcGlkIGFzIGl0J3Mgc2VlbiBieSB0aGUgY3VycmVudCBuYW1lc3BhY2Ugd2hl cmUgdGhlIA0KPiBzY3JpcHQgaXMNCj4gDQo+ICA+IGV4ZWN1dGluZy4NCj4gDQo+ICA+DQo+IA0K PiAgPiBUaGlzIGhlbHBlciBoYXMgdGhlIHNhbWUgdXNlIGNhc2VzIGFzIGJwZl9nZXRfY3VycmVu dF9waWRfdGdpZCgpIGFzIA0KPiBpdCBjYW4gYmUNCj4gDQo+ICA+IHVzZWQgdG8gZG8gcGlkIGZp bHRlcmluZyBldmVuIGluc2lkZSBhIGNvbnRhaW5lci4NCj4gDQo+ICA+DQo+IA0KPiAgPiBGb3Ig ZXhhbXBsZSBhIGJjYyBzY3JpcHQgdXNpbmcgYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgDQo+ ICh0b29scy9mdW5jY291bnQucHkpOg0KPiANCj4gID4NCj4gDQo+ICA+wqDCoMKgwqDCoMKgwqDC oCB1MzIgcGlkID0gYnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgPj4gMzI7DQo+IA0KPiAgPsKg wqDCoMKgwqDCoMKgwqAgaWYgKHBpZCAhPSA8cGlkX2FyZ19wYXNzZWRfaW4+KQ0KPiANCj4gID7C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsNCj4gDQo+ICA+IENvdWxk IGJlIG1vZGlmaWVkIHRvIHVzZSBicGZfZ2V0X2N1cnJlbnRfcGlkbnNfaW5mbygpIGFzIGZvbGxv d3M6DQo+IA0KPiAgPg0KPiANCj4gID7CoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBicGZfcGlkbnMg cGlkbnM7DQo+IA0KPiAgPsKgwqDCoMKgwqAgwqDCoMKgYnBmX2dldF9jdXJyZW50X3BpZG5zX2lu Zm8oJnBpZG5zLCBzaXplb2Yoc3RydWN0IGJwZl9waWRucykpOw0KPiANCj4gID7CoMKgwqDCoMKg wqDCoMKgIHUzMiBwaWQgPSBwaWRucy50Z2lkOw0KPiANCj4gID7CoMKgwqDCoMKgwqDCoMKgIHUz MiBuc2lkID0gcGlkbnMubnNpZDsNCj4gDQo+ICA+wqDCoMKgwqDCoMKgwqDCoCBpZiAoKHBpZCAh PSA8cGlkX2FyZ19wYXNzZWRfaW4+KSAmJiAobnNpZCAhPSANCj4gPG5zaWRfYXJnX3Bhc3NlZF9p bj4pKQ0KPiANCj4gID7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsN Cj4gDQo+ICA+DQo+IA0KPiAgPiBUbyBmaW5kIG91dCB0aGUgbmFtZSBQSUQgbmFtZXNwYWNlIGlk IG9mIGEgcHJvY2VzcywgeW91IGNvdWxkIHVzZSANCj4gdGhpcyBjb21tYW5kOg0KPiANCj4gID4N Cj4gDQo+ICA+ICQgcHMgLWggLW8gcGlkbnMgLXAgPHBpZF9vZl9pbnRlcmVzdD4NCj4gDQo+ICA+ DQo+IA0KPiAgPiBPciB0aGlzIG90aGVyIGNvbW1hbmQ6DQo+IA0KPiAgPg0KPiANCj4gID4gJCBs cyAtTGkgL3Byb2MvPHBpZF9vZl9pbnRlcmVzdD4vbnMvcGlkDQo+IA0KPiAgPg0KPiANCj4gID4g U2lnbmVkLW9mZi1ieTogQ2FybG9zIE5laXJhIDxjbmVpcmFidXN0b3NAZ21haWwuY29tPg0KPiAN Cj4gID4gLS0tDQo+IA0KPiAgPsKgIGZzL2ludGVybmFsLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDC oCAyIC0NCj4gDQo+ICA+wqAgZnMvbmFtZWkuY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKg IDEgLQ0KPiANCj4gID7CoCBpbmNsdWRlL2xpbnV4L2JwZi5owqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMSArDQo+IA0K PiAgPsKgIGluY2x1ZGUvbGludXgvbmFtZWkuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgNCArDQo+IA0KPiAgPsKgIGluY2x1 ZGUvdWFwaS9saW51eC9icGYuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgfMKgIDI3ICsrKy0NCj4gDQo+ICA+wqAga2VybmVsL2JwZi9jb3JlLmPC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgfMKgwqAgMSArDQo+IA0KPiAgPsKgIGtlcm5lbC9icGYvaGVscGVycy5jwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzC oCA2NCArKysrKysrKysrDQo+IA0KPiAgPsKgIGtlcm5lbC90cmFjZS9icGZfdHJhY2UuY8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMiAr DQo+IA0KPiAgPsKgIHNhbXBsZXMvYnBmL01ha2VmaWxlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDMgKw0KPiANCj4gID7C oCBzYW1wbGVzL2JwZi90cmFjZV9uc19pbmZvX3VzZXIuY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB8wqAgMzUgKysrKysrDQo+IA0KPiAgPsKgIHNhbXBsZXMvYnBmL3RyYWNl X25zX2luZm9fdXNlcl9rZXJuLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAgNDQgKysr KysrKw0KPiANCj4gID4gwqB0b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmjCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCAyNyArKystDQo+IA0KPiAgPsKgIHRv b2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgfMKgwqAgMiArLQ0KPiANCj4gID7CoCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYv YnBmX2hlbHBlcnMuaMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAzICsNCj4gDQo+ICA+wqAgLi4u L3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3BpZG5zX2tlcm4uY8KgIHzCoCA1MSAr KysrKysrKw0KPiANCj4gID7CoCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9waWRu cy5jwqDCoMKgwqDCoMKgwqDCoMKgwqAgfCAxMzggDQo+ICsrKysrKysrKysrKysrKysrKysrKw0K PiANCj4gID7CoCAxNiBmaWxlcyBjaGFuZ2VkLCAzOTkgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlv bnMoLSkNCj4gDQo+ICA+wqAgY3JlYXRlIG1vZGUgMTAwNjQ0IHNhbXBsZXMvYnBmL3RyYWNlX25z X2luZm9fdXNlci5jDQo+IA0KPiAgPsKgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzYW1wbGVzL2JwZi90 cmFjZV9uc19pbmZvX3VzZXJfa2Vybi5jDQo+IA0KPiAgPsKgIGNyZWF0ZSBtb2RlIDEwMDY0NCB0 b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9waWRuc19rZXJuLmMNCj4gDQo+ ICA+wqAgY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0 X3BpZG5zLmMNCj4gDQo+ICA+DQo+IA0KPiAgPiBkaWZmIC0tZ2l0IGEvZnMvaW50ZXJuYWwuaCBi L2ZzL2ludGVybmFsLmgNCj4gDQo+ICA+IGluZGV4IDMxNWZjZDhkMjM3Yy4uNjY0N2UxNWRkNDE5 IDEwMDY0NA0KPiANCj4gID4gLS0tIGEvZnMvaW50ZXJuYWwuaA0KPiANCj4gID4gKysrIGIvZnMv aW50ZXJuYWwuaA0KPiANCj4gID4gQEAgLTU5LDggKzU5LDYgQEAgZXh0ZXJuIGludCBmaW5pc2hf Y2xlYW5fY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpOw0KPiANCj4gID7CoCAvKg0KPiAN Cj4gID7CoMKgICogbmFtZWkuYw0KPiANCj4gID7CoMKgICovDQo+IA0KPiAgPiAtZXh0ZXJuIGlu dCBmaWxlbmFtZV9sb29rdXAoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCB1bnNpZ25l ZCANCj4gZmxhZ3MsDQo+IA0KPiAgPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBwYXRoICpyb290KTsN Cj4gDQo+ICA+wqAgZXh0ZXJuIGludCB1c2VyX3BhdGhfbW91bnRwb2ludF9hdChpbnQsIGNvbnN0 IGNoYXIgX191c2VyICosIA0KPiB1bnNpZ25lZCBpbnQsIHN0cnVjdCBwYXRoICopOw0KPiANCj4g ID7CoCBleHRlcm4gaW50IHZmc19wYXRoX2xvb2t1cChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCB2 ZnNtb3VudCAqLA0KPiANCj4gID7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgY29uc3QgY2hhciAqLCB1bnNpZ25lZCBpbnQsIHN0cnVjdCBwYXRo ICopOw0KPiANCj4gID4gZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jDQo+IA0K PiAgPiBpbmRleCAyMDljNTFhNTIyNmMuLmE4OWZjNzJhNGExMCAxMDA2NDQNCj4gDQo+ICA+IC0t LSBhL2ZzL25hbWVpLmMNCj4gDQo+ICA+ICsrKyBiL2ZzL25hbWVpLmMNCj4gDQo+ICA+IEBAIC0x OSw3ICsxOSw2IEBADQo+IA0KPiAgPsKgICNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4NCj4gDQo+ ICA+wqAgI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KPiANCj4gID7CoCAjaW5jbHVkZSA8bGlu dXgvc2xhYi5oPg0KPiANCj4gID4gLSNpbmNsdWRlIDxsaW51eC9mcy5oPg0KPiANCj4gID7CoCAj aW5jbHVkZSA8bGludXgvbmFtZWkuaD4NCj4gDQo+ICA+wqAgI2luY2x1ZGUgPGxpbnV4L3BhZ2Vt YXAuaD4NCj4gDQo+ICA+wqAgI2luY2x1ZGUgPGxpbnV4L2Zzbm90aWZ5Lmg+DQo+IA0KPiAgPiBk aWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGYuaCBiL2luY2x1ZGUvbGludXgvYnBmLmgNCj4g DQo+ICA+IGluZGV4IGY5YTUwNjE0N2M4YS4uZTRhZGY1ZTA1YWZkIDEwMDY0NA0KPiANCj4gID4g LS0tIGEvaW5jbHVkZS9saW51eC9icGYuaA0KPiANCj4gID4gKysrIGIvaW5jbHVkZS9saW51eC9i cGYuaA0KPiANCj4gID4gQEAgLTEwNTAsNiArMTA1MCw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3Qg YnBmX2Z1bmNfcHJvdG8gDQo+IGJwZl9nZXRfbG9jYWxfc3RvcmFnZV9wcm90bzsNCj4gDQo+ICA+ wqAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc3RydG9sX3Byb3RvOw0K PiANCj4gID7CoCBleHRlcm4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zdHJ0b3Vs X3Byb3RvOw0KPiANCj4gID7CoCBleHRlcm4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJw Zl90Y3Bfc29ja19wcm90bzsNCj4gDQo+ICA+ICtleHRlcm4gY29uc3Qgc3RydWN0IGJwZl9mdW5j X3Byb3RvIGJwZl9nZXRfY3VycmVudF9waWRuc19pbmZvX3Byb3RvOw0KPiANCj4gID4NCj4gDQo+ ICA+wqAgLyogU2hhcmVkIGhlbHBlcnMgYW1vbmcgY0JQRiBhbmQgZUJQRi4gKi8NCj4gDQo+ICA+ wqAgdm9pZCBicGZfdXNlcl9ybmRfaW5pdF9vbmNlKHZvaWQpOw0KPiANCj4gID4gZGlmZiAtLWdp dCBhL2luY2x1ZGUvbGludXgvbmFtZWkuaCBiL2luY2x1ZGUvbGludXgvbmFtZWkuaA0KPiANCj4g ID4gaW5kZXggOTEzOGI0NDcxZGJmLi5iNDVjOGI2ZjdjYjQgMTAwNjQ0DQo+IA0KPiAgPiAtLS0g YS9pbmNsdWRlL2xpbnV4L25hbWVpLmgNCj4gDQo+ICA+ICsrKyBiL2luY2x1ZGUvbGludXgvbmFt ZWkuaA0KPiANCj4gID4gQEAgLTYsNiArNiw3IEBADQo+IA0KPiAgPsKgICNpbmNsdWRlIDxsaW51 eC9wYXRoLmg+DQo+IA0KPiAgPsKgICNpbmNsdWRlIDxsaW51eC9mY250bC5oPg0KPiANCj4gID7C oCAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4NCj4gDQo+ICA+ICsjaW5jbHVkZSA8bGludXgvZnMu aD4NCj4gDQo+ICA+DQo+IA0KPiAgPsKgIGVudW0geyBNQVhfTkVTVEVEX0xJTktTID0gOCB9Ow0K PiANCj4gID4NCj4gDQo+ICA+IEBAIC05Nyw2ICs5OCw5IEBAIGV4dGVybiB2b2lkIHVubG9ja19y ZW5hbWUoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgDQo+IGRlbnRyeSAqKTsNCj4gDQo+ICA+DQo+ IA0KPiAgPsKgIGV4dGVybiB2b2lkIG5kX2p1bXBfbGluayhzdHJ1Y3QgcGF0aCAqcGF0aCk7DQo+ IA0KPiAgPg0KPiANCj4gID4gK2V4dGVybiBpbnQgZmlsZW5hbWVfbG9va3VwKGludCBkZmQsIHN0 cnVjdCBmaWxlbmFtZSAqbmFtZSwgdW5zaWduZWQgDQo+IGZsYWdzLA0KPiANCj4gID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBwYXRo ICpwYXRoLCBzdHJ1Y3QgcGF0aCAqcm9vdCk7DQo+IA0KPiAgPiArDQo+IA0KPiAgPsKgIHN0YXRp YyBpbmxpbmUgdm9pZCBuZF90ZXJtaW5hdGVfbGluayh2b2lkICpuYW1lLCBzaXplX3QgbGVuLCBz aXplX3QgDQo+IG1heGxlbikNCj4gDQo+ICA+wqAgew0KPiANCj4gID7CoMKgwqDCoMKgwqDCoMKg ICgoY2hhciAqKSBuYW1lKVttaW4obGVuLCBtYXhsZW4pXSA9ICdcMCc7DQo+IA0KPiAgPiBkaWZm IC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2Jw Zi5oDQo+IA0KPiAgPiBpbmRleCA0MzkzYmQ0YjI0MTkuLmIwZDQ4NjlmYjg2MCAxMDA2NDQNCj4g DQo+ICA+IC0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaA0KPiANCj4gID4gKysrIGIvaW5j bHVkZS91YXBpL2xpbnV4L2JwZi5oDQo+IA0KPiAgPiBAQCAtMjc0MSw2ICsyNzQxLDI0IEBAIHVu aW9uIGJwZl9hdHRyIHsNCj4gDQo+ICA+wqDCoCAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICoq LUVPUE5PVFNVUFAqKiBrZXJuZWwgY29uZmlndXJhdGlvbiBkb2VzIG5vdCBlbmFibGUgDQo+IFNZ TiBjb29raWVzDQo+IA0KPiAgPsKgwqAgKg0KPiANCj4gID7CoMKgICrCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgKiotRVBST1RPTk9TVVBQT1JUKiogSVAgcGFja2V0IHZlcnNpb24gaXMgbm90IDQg b3IgNg0KPiANCj4gID4gKyAqDQo+IA0KPiAgPiArICogaW50IGJwZl9nZXRfY3VycmVudF9waWRu c19pbmZvKHN0cnVjdCBicGZfcGlkbnNfaW5mbyAqcGlkbnMsIHUzMiANCj4gc2l6ZV9vZl9waWRu cykNCj4gDQo+ICA+ICsgKsKgwqDCoMKgIERlc2NyaXB0aW9uDQo+IA0KPiAgPiArICrCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgQ29waWVzIGludG8gKnBpZG5zKiBwaWQsIG5hbWVzcGFjZSBpZCBh bmQgdGdpZCBhcyANCj4gc2VlbiBieSB0aGUNCj4gDQo+ICA+ICsgKsKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBjdXJyZW50IG5hbWVzcGFjZSBhbmQgYWxzbyBkZXZpY2UgZnJvbSAvcHJvYy9zZWxm L25zL3BpZC4NCj4gDQo+ICA+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqc2l6ZV9vZl9w aWRucyogbXVzdCBiZSB0aGUgc2l6ZSBvZiAqcGlkbnMqDQo+IA0KPiAgPiArICoNCj4gDQo+ICA+ ICsgKsKgwqDCoMKgwqDCoMKgwqAgwqDCoMKgwqBUaGlzIGhlbHBlciBpcyB1c2VkIHdoZW4gcGlk IGZpbHRlcmluZyBpcyBuZWVkZWQgaW5zaWRlIGENCj4gDQo+ICA+ICsgKsKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBjb250YWluZXIgYXMgYnBmX2dldF9jdXJyZW50X3RnaWQoKSBoZWxwZXIgcmV0 dXJucyANCj4gYWx3YXlzIHRoZQ0KPiANCj4gID4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHBpZCBpZCBhcyBzZWVuIGJ5IHRoZSByb290IG5hbWVzcGFjZS4NCj4gDQo+ICA+ICsgKsKgwqDC oMKgIFJldHVybg0KPiANCj4gID4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDAgb24gc3Vj Y2Vzcw0KPiANCj4gID4gKyAqDQo+IA0KPiAgPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg KiotRUlOVkFMKiogaWYgKnNpemVfb2ZfcGlkbnMqIGlzIG5vdCB2YWxpZCBvciB1bmFibGUgDQo+ IHRvIGdldCBucywgcGlkDQo+IA0KPiAgPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb3Ig dGdpZCBvZiB0aGUgY3VycmVudCB0YXNrLg0KPiANCj4gID4gKyAqDQo+IA0KPiAgPiArICrCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgKiotRU5PTUVNKirCoCBpZiBhbGxvY2F0aW9uIGZhaWxzLg0K PiANCj4gID4gKyAqDQo+IA0KPiAgPsKgwqAgKi8NCj4gDQo+ICA+wqAgI2RlZmluZSBfX0JQRl9G VU5DX01BUFBFUihGTinCoMKgwqDCoMKgwqDCoMKgwqAgXA0KPiANCj4gID7CoMKgwqDCoMKgwqDC oMKgIEZOKHVuc3BlYykswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBc DQo+IA0KPiAgPiBAQCAtMjg1Myw3ICsyODcxLDggQEAgdW5pb24gYnBmX2F0dHIgew0KPiANCj4g ID7CoMKgwqDCoMKgwqDCoMKgIEZOKHNrX3N0b3JhZ2VfZ2V0KSzCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgXA0KPiANCj4gID7CoMKgwqDCoMKgwqDCoMKgIEZOKHNrX3N0b3JhZ2VfZGVsZXRlKSzC oMKgwqDCoMKgwqDCoMKgwqAgXA0KPiANCj4gID7CoMKgwqDCoMKgwqDCoMKgIEZOKHNlbmRfc2ln bmFsKSzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXA0KPiANCj4gID4gLcKgwqDCoMKg wqDCoCBGTih0Y3BfZ2VuX3N5bmNvb2tpZSksDQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgIEZOKHRj cF9nZW5fc3luY29va2llKSzCoMKgwqDCoMKgwqDCoMKgwqAgXA0KPiANCj4gID4gK8KgwqDCoMKg wqDCoCBGTihnZXRfY3VycmVudF9waWRuc19pbmZvKSwNCj4gDQo+ICA+DQo+IA0KPiAgPsKgIC8q IGludGVnZXIgdmFsdWUgaW4gJ2ltbScgZmllbGQgb2YgQlBGX0NBTEwgaW5zdHJ1Y3Rpb24gc2Vs ZWN0cyANCj4gd2hpY2ggaGVscGVyDQo+IA0KPiAgPsKgwqAgKiBmdW5jdGlvbiBlQlBGIHByb2dy YW0gaW50ZW5kcyB0byBjYWxsDQo+IA0KPiAgPiBAQCAtMzYwNCw0ICszNjIzLDEwIEBAIHN0cnVj dCBicGZfc29ja29wdCB7DQo+IA0KPiAgPsKgwqDCoMKgwqDCoMKgwqAgX19zMzLCoMKgIHJldHZh bDsNCj4gDQo+ICA+wqAgfTsNCj4gDQo+ICA+DQo+IA0KPiAgPiArc3RydWN0IGJwZl9waWRuc19p bmZvIHsNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqAgX191MzIgZGV2Ow0KPiANCj4gID4gK8KgwqDC oMKgwqDCoCBfX3UzMiBuc2lkOw0KPiANCj4gID4gK8KgwqDCoMKgwqDCoCBfX3UzMiB0Z2lkOw0K PiANCj4gID4gK8KgwqDCoMKgwqDCoCBfX3UzMiBwaWQ7DQo+IA0KPiAgPiArfTsNCj4gDQo+ICA+ wqAgI2VuZGlmIC8qIF9VQVBJX19MSU5VWF9CUEZfSF9fICovDQo+IA0KPiAgPiBkaWZmIC0tZ2l0 IGEva2VybmVsL2JwZi9jb3JlLmMgYi9rZXJuZWwvYnBmL2NvcmUuYw0KPiANCj4gID4gaW5kZXgg ODE5MWE3ZGIyNzc3Li4zMTU5ZjJhMDE4OGMgMTAwNjQ0DQo+IA0KPiAgPiAtLS0gYS9rZXJuZWwv YnBmL2NvcmUuYw0KPiANCj4gID4gKysrIGIva2VybmVsL2JwZi9jb3JlLmMNCj4gDQo+ICA+IEBA IC0yMDM4LDYgKzIwMzgsNyBAQCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gDQo+IGJwZl9n ZXRfY3VycmVudF91aWRfZ2lkX3Byb3RvIF9fd2VhazsNCj4gDQo+ICA+wqAgY29uc3Qgc3RydWN0 IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfY3VycmVudF9jb21tX3Byb3RvIF9fd2VhazsNCj4gDQo+ ICA+wqAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfY3VycmVudF9jZ3JvdXBf aWRfcHJvdG8gX193ZWFrOw0KPiANCj4gID7CoCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8g YnBmX2dldF9sb2NhbF9zdG9yYWdlX3Byb3RvIF9fd2VhazsNCj4gDQo+ICA+ICtjb25zdCBzdHJ1 Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9jdXJyZW50X3BpZG5zX2luZm8gX193ZWFrOw0KPiAN Cj4gID4NCj4gDQo+ICA+wqAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvICogX193ZWFrIGJw Zl9nZXRfdHJhY2VfcHJpbnRrX3Byb3RvKHZvaWQpDQo+IA0KPiAgPsKgIHsNCj4gDQo+ICA+IGRp ZmYgLS1naXQgYS9rZXJuZWwvYnBmL2hlbHBlcnMuYyBiL2tlcm5lbC9icGYvaGVscGVycy5jDQo+ IA0KPiAgPiBpbmRleCA1ZTI4NzE4OTI4Y2EuLjQxZmJmMWYyOGE0OCAxMDA2NDQNCj4gDQo+ICA+ IC0tLSBhL2tlcm5lbC9icGYvaGVscGVycy5jDQo+IA0KPiAgPiArKysgYi9rZXJuZWwvYnBmL2hl bHBlcnMuYw0KPiANCj4gID4gQEAgLTExLDYgKzExLDEyIEBADQo+IA0KPiAgPsKgICNpbmNsdWRl IDxsaW51eC91aWRnaWQuaD4NCj4gDQo+ICA+wqAgI2luY2x1ZGUgPGxpbnV4L2ZpbHRlci5oPg0K PiANCj4gID7CoCAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4NCj4gDQo+ICA+ICsjaW5jbHVkZSA8 bGludXgvcGlkX25hbWVzcGFjZS5oPg0KPiANCj4gID4gKyNpbmNsdWRlIDxsaW51eC9tYWpvci5o Pg0KPiANCj4gID4gKyNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+DQo+IA0KPiAgPiArI2luY2x1ZGUg PGxpbnV4L25hbWVpLmg+DQo+IA0KPiAgPiArI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4NCj4g DQo+ICA+ICsNCj4gDQo+ICA+DQo+IA0KPiAgPsKgICNpbmNsdWRlICIuLi8uLi9saWIva3N0cnRv eC5oIg0KPiANCj4gID4NCj4gDQo+ICA+IEBAIC0zMTIsNiArMzE4LDY0IEBAIHZvaWQgY29weV9t YXBfdmFsdWVfbG9ja2VkKHN0cnVjdCBicGZfbWFwICptYXAsIA0KPiB2b2lkICpkc3QsIHZvaWQg KnNyYywNCj4gDQo+ICA+wqDCoMKgwqDCoMKgwqDCoCBwcmVlbXB0X2VuYWJsZSgpOw0KPiANCj4g ID7CoCB9DQo+IA0KPiAgPg0KPiANCj4gID4gK0JQRl9DQUxMXzIoYnBmX2dldF9jdXJyZW50X3Bp ZG5zX2luZm8sIHN0cnVjdCBicGZfcGlkbnNfaW5mbyAqLCANCj4gcGlkbnNfaW5mbywgdTMyLA0K PiANCj4gID4gK8KgwqDCoMKgwqDCoMKgIHNpemUpDQo+IA0KPiAgPiArew0KPiANCj4gID4gK8Kg wqDCoMKgwqDCoCBjb25zdCBjaGFyICpwaWRuc19wYXRoID0gIi9wcm9jL3NlbGYvbnMvcGlkIjsN Cj4gDQo+ICA+ICvCoMKgwqDCoMKgwqAgc3RydWN0IHBpZF9uYW1lc3BhY2UgKnBpZG5zID0gTlVM TDsNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqAgc3RydWN0IGZpbGVuYW1lICp0bXAgPSBOVUxMOw0K PiANCj4gID4gK8KgwqDCoMKgwqDCoCBzdHJ1Y3QgaW5vZGUgKmlub2RlOw0KPiANCj4gID4gK8Kg wqDCoMKgwqDCoCBzdHJ1Y3QgcGF0aCBrcDsNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqAgcGlkX3Qg dGdpZCA9IDA7DQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgIHBpZF90IHBpZCA9IDA7DQo+IA0KPiAg PiArwqDCoMKgwqDCoMKgIGludCByZXQ7DQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgIGludCBsZW47 DQo+IA0KPiAgPiArDQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgIGlmICh1bmxpa2VseShzaXplICE9 IHNpemVvZihzdHJ1Y3QgYnBmX3BpZG5zX2luZm8pKSkNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOw0KPiANCj4gID4gK8KgwqDCoMKgwqDCoCBw aWRucyA9IHRhc2tfYWN0aXZlX3BpZF9ucyhjdXJyZW50KTsNCj4gDQo+ICA+ICvCoMKgwqDCoMKg wqAgaWYgKHVubGlrZWx5KCFwaWRucykpDQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgwqDCoMKgIMKg wqDCoMKgwqBnb3RvIGNsZWFyOw0KPiANCj4gID4gK8KgwqDCoMKgwqDCoCBwaWRuc19pbmZvLT5u c2lkID3CoCBwaWRucy0+bnMuaW51bTsNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqAgcGlkID0gdGFz a19waWRfbnJfbnMoY3VycmVudCwgcGlkbnMpOw0KPiANCj4gID4gK8KgwqDCoMKgwqDCoCBpZiAo dW5saWtlbHkoIXBpZCkpDQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBn b3RvIGNsZWFyOw0KPiANCj4gID4gK8KgwqDCoMKgwqDCoCB0Z2lkID0gdGFza190Z2lkX25yX25z KGN1cnJlbnQsIHBpZG5zKTsNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqAgaWYgKHVubGlrZWx5KCF0 Z2lkKSkNCj4gDQo+ICA+ICsgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gY2xlYXI7 DQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgIHBpZG5zX2luZm8tPnRnaWQgPSAodTMyKSB0Z2lkOw0K PiANCj4gID4gK8KgwqDCoMKgwqDCoCBwaWRuc19pbmZvLT5waWQgPSAodTMyKSBwaWQ7DQo+IA0K PiAgPiArwqDCoMKgwqDCoMKgIHRtcCA9IGttZW1fY2FjaGVfYWxsb2MobmFtZXNfY2FjaGVwLCBH RlBfQVRPTUlDKTsNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqAgaWYgKHVubGlrZWx5KCF0bXApKSB7 DQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtZW1zZXQoKHZvaWQgKilw aWRuc19pbmZvLCAwLCAoc2l6ZV90KSBzaXplKTsNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOw0KPiANCj4gID4gK8KgwqDCoMKgwqDCoCB9DQo+ IA0KPiAgPiArwqDCoMKgwqDCoMKgIGxlbiA9IHN0cmxlbihwaWRuc19wYXRoKSArIDE7DQo+IA0K PiAgPiArwqDCoMKgwqDCoMKgIG1lbWNweSgoY2hhciAqKXRtcC0+bmFtZSwgcGlkbnNfcGF0aCwg bGVuKTsNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqAgdG1wLT51cHRyID0gTlVMTDsNCj4gDQo+ICA+ ICvCoMKgwqDCoMKgwqAgdG1wLT5hbmFtZSA9IE5VTEw7DQo+IA0KPiAgPiArwqDCoMKgwqDCoMKg IHRtcC0+cmVmY250ID0gMTsNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqAgcmV0ID0gZmlsZW5hbWVf bG9va3VwKEFUX0ZEQ1dELCB0bXAsIDAsICZrcCwgTlVMTCk7DQo+IA0KPiAgPiArwqDCoMKgwqDC oMKgIGlmIChyZXQpIHsNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1l bXNldCgodm9pZCAqKXBpZG5zX2luZm8sIDAsIChzaXplX3QpIHNpemUpOw0KPiANCj4gID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsNCj4gDQo+ICA+ICvCoMKgwqDC oMKgwqAgfQ0KPiANCj4gID4gK8KgwqDCoMKgwqDCoCBpbm9kZSA9IGRfYmFja2luZ19pbm9kZShr cC5kZW50cnkpOw0KPiANCj4gID4gK8KgwqDCoMKgwqDCoCBwaWRuc19pbmZvLT5kZXYgPSBpbm9k ZS0+aV9zYi0+c19kZXY7DQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgIHJldHVybiAwOw0KPiANCj4g ID4gK2NsZWFyOg0KPiANCj4gID4gK8KgwqDCoMKgwqDCoCBtZW1zZXQoKHZvaWQgKilwaWRuc19p bmZvLCAwLCAoc2l6ZV90KSBzaXplKTsNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqAgcmV0dXJuIC1F SU5WQUw7DQo+IA0KPiAgPiArfQ0KPiANCj4gID4gKw0KPiANCj4gID4gK2NvbnN0IHN0cnVjdCBi cGZfZnVuY19wcm90byBicGZfZ2V0X2N1cnJlbnRfcGlkbnNfaW5mb19wcm90byA9IHsNCj4gDQo+ ICA+ICvCoMKgwqDCoMKgwqAgLmZ1bmPCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IGJwZl9nZXRfY3Vy cmVudF9waWRuc19pbmZvLA0KPiANCj4gID4gK8KgwqDCoMKgwqDCoCAuZ3BsX29ubHnCoMKgwqDC oMKgwqAgPSBmYWxzZSwNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqAgLnJldF90eXBlwqDCoMKgwqDC oMKgID0gUkVUX0lOVEVHRVIsDQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgIC5hcmcxX3R5cGXCoMKg wqDCoMKgID0gQVJHX1BUUl9UT19VTklOSVRfTUVNLA0KPiANCj4gID4gK8KgwqDCoMKgwqDCoCAu YXJnMl90eXBlwqDCoMKgwqDCoCA9IEFSR19DT05TVF9TSVpFLA0KPiANCj4gID4gK307DQo+IA0K PiAgPiArDQo+IA0KPiAgPsKgICNpZmRlZiBDT05GSUdfQ0dST1VQUw0KPiANCj4gID7CoCBCUEZf Q0FMTF8wKGJwZl9nZXRfY3VycmVudF9jZ3JvdXBfaWQpDQo+IA0KPiAgPsKgIHsNCj4gDQo+ICA+ IGRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYnBm X3RyYWNlLmMNCj4gDQo+ICA+IGluZGV4IGNhMTI1NWQxNDU3Ni4uNWUxZGMyMjc2NWE1IDEwMDY0 NA0KPiANCj4gID4gLS0tIGEva2VybmVsL3RyYWNlL2JwZl90cmFjZS5jDQo+IA0KPiAgPiArKysg Yi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMNCj4gDQo+ICA+IEBAIC03MDksNiArNzA5LDggQEAg dHJhY2luZ19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgDQo+IGNvbnN0IHN0 cnVjdCBicGZfcHJvZyAqcHJvZykNCj4gDQo+ICA+wqAgI2VuZGlmDQo+IA0KPiAgPsKgwqDCoMKg wqDCoMKgwqAgY2FzZSBCUEZfRlVOQ19zZW5kX3NpZ25hbDoNCj4gDQo+ICA+wqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuICZicGZfc2VuZF9zaWduYWxfcHJvdG87DQo+IA0K PiAgPiArwqDCoMKgwqDCoMKgIGNhc2UgQlBGX0ZVTkNfZ2V0X2N1cnJlbnRfcGlkbnNfaW5mbzoN Cj4gDQo+ICA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgwqDCoHJldHVybiAmYnBmX2dldF9j dXJyZW50X3BpZG5zX2luZm9fcHJvdG87DQo+IA0KPiAgPsKgwqDCoMKgwqDCoMKgwqAgZGVmYXVs dDoNCj4gDQo+ICA+wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIE5VTEw7 DQo+IA0KPiAgPsKgwqDCoMKgwqDCoMKgwqAgfQ0KPiANCj4gID4gZGlmZiAtLWdpdCBhL3NhbXBs ZXMvYnBmL01ha2VmaWxlIGIvc2FtcGxlcy9icGYvTWFrZWZpbGUNCj4gDQo+ICA+IGluZGV4IDFk OWJlMjZiNGVkZC4uMjM4NDUzZmYyN2QyIDEwMDY0NA0KPiANCj4gID4gLS0tIGEvc2FtcGxlcy9i cGYvTWFrZWZpbGUNCj4gDQo+ICA+ICsrKyBiL3NhbXBsZXMvYnBmL01ha2VmaWxlDQo+IA0KPiAg PiBAQCAtNTMsNiArNTMsNyBAQCBob3N0cHJvZ3MteSArPSB0YXNrX2ZkX3F1ZXJ5DQo+IA0KPiAg PsKgIGhvc3Rwcm9ncy15ICs9IHhkcF9zYW1wbGVfcGt0cw0KPiANCj4gID7CoCBob3N0cHJvZ3Mt eSArPSBpYnVtYWQNCj4gDQo+ICA+wqAgaG9zdHByb2dzLXkgKz0gaGJtDQo+IA0KPiAgPiAraG9z dHByb2dzLXkgKz0gdHJhY2VfbnNfaW5mbw0KPiANCj4gID4NCj4gDQo+ICA+wqAgIyBMaWJicGYg ZGVwZW5kZW5jaWVzDQo+IA0KPiAgPsKgIExJQkJQRiA9ICQoVE9PTFNfUEFUSCkvbGliL2JwZi9s aWJicGYuYQ0KPiANCj4gID4gQEAgLTEwOSw2ICsxMTAsNyBAQCB0YXNrX2ZkX3F1ZXJ5LW9ianMg Oj0gYnBmX2xvYWQubyANCj4gdGFza19mZF9xdWVyeV91c2VyLm8gJChUUkFDRV9IRUxQRVJTKQ0K PiANCj4gID7CoCB4ZHBfc2FtcGxlX3BrdHMtb2JqcyA6PSB4ZHBfc2FtcGxlX3BrdHNfdXNlci5v ICQoVFJBQ0VfSEVMUEVSUykNCj4gDQo+ICA+wqAgaWJ1bWFkLW9ianMgOj0gYnBmX2xvYWQubyBp YnVtYWRfdXNlci5vICQoVFJBQ0VfSEVMUEVSUykNCj4gDQo+ICA+wqAgaGJtLW9ianMgOj0gYnBm X2xvYWQubyBoYm0ubyAkKENHUk9VUF9IRUxQRVJTKQ0KPiANCj4gID4gK3RyYWNlX25zX2luZm8t b2JqcyA6PSBicGZfbG9hZC5vIHRyYWNlX25zX2luZm9fdXNlci5vDQo+IA0KPiAgPg0KPiANCj4g ID7CoCAjIFRlbGwga2J1aWxkIHRvIGFsd2F5cyBidWlsZCB0aGUgcHJvZ3JhbXMNCj4gDQo+ICA+ wqAgYWx3YXlzIDo9ICQoaG9zdHByb2dzLXkpDQo+IA0KPiAgPiBAQCAtMTcwLDYgKzE3Miw3IEBA IGFsd2F5cyArPSB4ZHBfc2FtcGxlX3BrdHNfa2Vybi5vDQo+IA0KPiAgPsKgIGFsd2F5cyArPSBp YnVtYWRfa2Vybi5vDQo+IA0KPiAgPsKgIGFsd2F5cyArPSBoYm1fb3V0X2tlcm4ubw0KPiANCj4g ID7CoCBhbHdheXMgKz0gaGJtX2VkdF9rZXJuLm8NCj4gDQo+ICA+ICthbHdheXMgKz0gdHJhY2Vf bnNfaW5mb191c2VyX2tlcm4ubw0KPiANCj4gID4NCj4gDQo+ICA+wqAgS0JVSUxEX0hPU1RDRkxB R1MgKz0gLUkkKG9ianRyZWUpL3Vzci9pbmNsdWRlDQo+IA0KPiAgPsKgIEtCVUlMRF9IT1NUQ0ZM QUdTICs9IC1JJChzcmN0cmVlKS90b29scy9saWIvYnBmLw0KPiANCj4gID4gZGlmZiAtLWdpdCBh L3NhbXBsZXMvYnBmL3RyYWNlX25zX2luZm9fdXNlci5jIA0KPiBiL3NhbXBsZXMvYnBmL3RyYWNl X25zX2luZm9fdXNlci5jDQo+IA0KPiAgPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiANCj4gID4g aW5kZXggMDAwMDAwMDAwMDAwLi5lMDZkMDhkYjZmMzANCj4gDQo+ICA+IC0tLSAvZGV2L251bGwN Cj4gDQo+ICA+ICsrKyBiL3NhbXBsZXMvYnBmL3RyYWNlX25zX2luZm9fdXNlci5jDQo+IA0KPiAg PiBAQCAtMCwwICsxLDM1IEBADQo+IA0KPiAgPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjANCj4gDQo+ICA+ICsvKiBDb3B5cmlnaHQgKGMpIDIwMTggQ2FybG9zIE5laXJhIGNu ZWlyYWJ1c3Rvc0BnbWFpbC5jb20NCj4gDQo+ICA+ICsgKg0KPiANCj4gID4gKyAqIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCj4g DQo+ICA+ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljDQo+IA0KPiAgPiArICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4NCj4gDQo+ICA+ICsgKi8NCj4gDQo+ICA+ICsN Cj4gDQo+ICA+ICsjaW5jbHVkZSA8c3RkaW8uaD4NCj4gDQo+ICA+ICsjaW5jbHVkZSA8bGludXgv YnBmLmg+DQo+IA0KPiAgPiArI2luY2x1ZGUgPHVuaXN0ZC5oPg0KPiANCj4gID4gKyNpbmNsdWRl ICJicGYvbGliYnBmLmgiDQo+IA0KPiAgPiArI2luY2x1ZGUgImJwZl9sb2FkLmgiDQo+IA0KPiAg PiArDQo+IA0KPiAgPiArLyogVGhpcyBjb2RlIHdhcyB0YWtlbiB2ZXJiYXRpbSBmcm9tIHRyYWNl eDFfdXNlci5jLCBpdCdzIHVzZWQNCj4gDQo+ICA+ICsgKiB0byBleGVyY2l6ZSBicGZfZ2V0X2N1 cnJlbnRfcGlkbnNfaW5mbygpIGhlbHBlciBjYWxsLg0KPiANCj4gID4gKyAqLw0KPiANCj4gID4g K2ludCBtYWluKGludCBhYywgY2hhciAqKmFyZ3YpDQo+IA0KPiAgPiArew0KPiANCj4gID4gK8Kg wqDCoMKgwqDCoCBGSUxFICpmOw0KPiANCj4gID4gK8KgwqDCoMKgwqDCoCBjaGFyIGZpbGVuYW1l WzI1Nl07DQo+IA0KPiAgPiArDQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgIHNucHJpbnRmKGZpbGVu YW1lLCBzaXplb2YoZmlsZW5hbWUpLCAiJXNfdXNlcl9rZXJuLm8iLCBhcmd2WzBdKTsNCj4gDQo+ ICA+ICvCoMKgwqDCoMKgwqAgcHJpbnRmKCJsb2FkaW5nICVzXG4iLCBmaWxlbmFtZSk7DQo+IA0K PiAgPiArDQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgIGlmIChsb2FkX2JwZl9maWxlKGZpbGVuYW1l KSkgew0KPiANCj4gID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJpbnRmKCIlcyIs IGJwZl9sb2dfYnVmKTsNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJl dHVybiAxOw0KPiANCj4gID4gK8KgwqDCoMKgwqDCoCB9DQo+IA0KPiAgPiArDQo+IA0KPiAgPiAr wqDCoMKgwqDCoMKgIGYgPSBwb3BlbigidGFza3NldCAxIHBpbmfCoCBsb2NhbGhvc3QiLCAiciIp Ow0KPiANCj4gID4gK8KgwqDCoMKgwqDCoCAodm9pZCkgZjsNCj4gDQo+ICA+ICvCoMKgwqDCoMKg wqAgcmVhZF90cmFjZV9waXBlKCk7DQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgIHJldHVybiAwOw0K PiANCj4gID4gK30NCj4gDQo+ICA+IGRpZmYgLS1naXQgYS9zYW1wbGVzL2JwZi90cmFjZV9uc19p bmZvX3VzZXJfa2Vybi5jIA0KPiBiL3NhbXBsZXMvYnBmL3RyYWNlX25zX2luZm9fdXNlcl9rZXJu LmMNCj4gDQo+ICA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IA0KPiAgPiBpbmRleCAwMDAwMDAw MDAwMDAuLjk2Njc1ZTAyYjcwNw0KPiANCj4gID4gLS0tIC9kZXYvbnVsbA0KPiANCj4gID4gKysr IGIvc2FtcGxlcy9icGYvdHJhY2VfbnNfaW5mb191c2VyX2tlcm4uYw0KPiANCj4gID4gQEAgLTAs MCArMSw0NCBAQA0KPiANCj4gID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w DQo+IA0KPiAgPiArLyogQ29weXJpZ2h0IChjKSAyMDE4IENhcmxvcyBOZWlyYSBjbmVpcmFidXN0 b3NAZ21haWwuY29tDQo+IA0KPiAgPiArICoNCj4gDQo+ICA+ICsgKiBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQo+IA0KPiAgPiAr ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYw0KPiANCj4gID4gKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24uDQo+IA0KPiAgPiArICovDQo+IA0KPiAgPiArI2luY2x1ZGUg PGxpbnV4L3NrYnVmZi5oPg0KPiANCj4gID4gKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4N Cj4gDQo+ICA+ICsjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPg0KPiANCj4gID4gKyNpbmNsdWRl IDx1YXBpL2xpbnV4L2JwZi5oPg0KPiANCj4gID4gKyNpbmNsdWRlICJicGZfaGVscGVycy5oIg0K PiANCj4gID4gKw0KPiANCj4gID4gK3R5cGVkZWYgX191NjQgdTY0Ow0KPiANCj4gID4gK3R5cGVk ZWYgX191MzIgdTMyOw0KPiANCj4gID4gKw0KPiANCj4gID4gKw0KPiANCj4gID4gKy8qIGtwcm9i ZSBpcyBOT1QgYSBzdGFibGUgQUJJDQo+IA0KPiAgPiArICoga2VybmVsIGZ1bmN0aW9ucyBjYW4g YmUgcmVtb3ZlZCwgcmVuYW1lZCBvciBjb21wbGV0ZWx5IGNoYW5nZSANCj4gc2VtYW50aWNzLg0K PiANCj4gID4gKyAqIE51bWJlciBvZiBhcmd1bWVudHMgYW5kIHRoZWlyIHBvc2l0aW9ucyBjYW4g Y2hhbmdlLCBldGMuDQo+IA0KPiAgPiArICogSW4gc3VjaCBjYXNlIHRoaXMgYnBmK2twcm9iZSBl eGFtcGxlIHdpbGwgbm8gbG9uZ2VyIGJlIG1lYW5pbmdmdWwNCj4gDQo+ICA+ICsgKi8NCj4gDQo+ ICA+ICsNCj4gDQo+ICA+ICsvKiBUaGlzIHdpbGwgY2FsbCBicGZfZ2V0X2N1cnJlbnRfcGlkbnNf aW5mbygpIHRvIGRpc3BsYXkgcGlkIGFuZCBucyANCj4gdmFsdWVzDQo+IA0KPiAgPiArICogYXMg c2VlbiBieSB0aGUgY3VycmVudCBuYW1lc3BhY2UsIG9uIHRoZSBmYXIgbGVmdCB5b3Ugd2lsbCBz ZWUgDQo+IHRoZSBwaWQgYXMNCj4gDQo+ICA+ICsgKiBzZWVuIGFzIGJ5IHRoZSByb290IG5hbWVz cGFjZS4NCj4gDQo+ICA+ICsgKi8NCj4gDQo+ICA+ICsNCj4gDQo+ICA+ICtTRUMoImtwcm9iZS9f X25ldGlmX3JlY2VpdmVfc2tiX2NvcmUiKQ0KPiANCj4gID4gK2ludCBicGZfcHJvZzEoc3RydWN0 IHB0X3JlZ3MgKmN0eCkNCj4gDQo+ICA+ICt7DQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgIGNoYXIg Zm10W10gPSAibnNpZDoldSwgZGV2OiAldSzCoCBwaWQ6JXVcbiI7DQo+IA0KPiAgPiArwqDCoMKg wqDCoMKgIHN0cnVjdCBicGZfcGlkbnNfaW5mbyBuc2luZm87DQo+IA0KPiAgPiArwqDCoMKgwqDC oMKgIGludCBvayA9IDA7DQo+IA0KPiAgPiArDQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgIG9rID0g YnBmX2dldF9jdXJyZW50X3BpZG5zX2luZm8oJm5zaW5mbywgc2l6ZW9mKG5zaW5mbykpOw0KPiAN Cj4gID4gK8KgwqDCoMKgwqDCoCBpZiAob2sgPT0gMCkNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGJwZl90cmFjZV9wcmludGsoZm10LCBzaXplb2YoZm10KSwgKHUzMilu c2luZm8ubnNpZCwNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgwqDCoMKgwqDCoMKgwqAodTMyKSBuc2luZm8uZGV2LCAodTMyKW5zaW5m by5waWQpOw0KPiANCj4gID4gKw0KPiANCj4gID4gK8KgwqDCoMKgwqDCoCByZXR1cm4gMDsNCj4g DQo+ICA+ICt9DQo+IA0KPiAgPiArY2hhciBfbGljZW5zZVtdIFNFQygibGljZW5zZSIpID0gIkdQ TCI7DQo+IA0KPiAgPiArdTMyIF92ZXJzaW9uIFNFQygidmVyc2lvbiIpID0gTElOVVhfVkVSU0lP Tl9DT0RFOw0KPiANCj4gID4gZGlmZiAtLWdpdCBhL3Rvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9i cGYuaCANCj4gYi90b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgNCj4gDQo+ICA+IGluZGV4 IDQzOTNiZDRiMjQxOS4uYjBkNDg2OWZiODYwIDEwMDY0NA0KPiANCj4gID4gLS0tIGEvdG9vbHMv aW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oDQo+IA0KPiAgPiArKysgYi90b29scy9pbmNsdWRlL3Vh cGkvbGludXgvYnBmLmgNCj4gDQo+ICA+IEBAIC0yNzQxLDYgKzI3NDEsMjQgQEAgdW5pb24gYnBm X2F0dHIgew0KPiANCj4gID7CoMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiotRU9QTk9U U1VQUCoqIGtlcm5lbCBjb25maWd1cmF0aW9uIGRvZXMgbm90IGVuYWJsZSANCj4gU1lOIGNvb2tp ZXMNCj4gDQo+ICA+wqDCoCAqDQo+IA0KPiAgPsKgwqAgKsKgwqDCoMKgwqDCoMKgwqAgwqDCoMKg wqAqKi1FUFJPVE9OT1NVUFBPUlQqKiBJUCBwYWNrZXQgdmVyc2lvbiBpcyBub3QgNCBvciA2DQo+ IA0KPiAgPiArICoNCj4gDQo+ICA+ICsgKiBpbnQgYnBmX2dldF9jdXJyZW50X3BpZG5zX2luZm8o c3RydWN0IGJwZl9waWRuc19pbmZvICpwaWRucywgdTMyIA0KPiBzaXplX29mX3BpZG5zKQ0KPiAN Cj4gID4gKyAqwqDCoMKgwqAgRGVzY3JpcHRpb24NCj4gDQo+ICA+ICsgKsKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBDb3BpZXMgaW50byAqcGlkbnMqIHBpZCwgbmFtZXNwYWNlIGlkIGFuZCB0Z2lk IGFzIA0KPiBzZWVuIGJ5IHRoZQ0KPiANCj4gID4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGN1cnJlbnQgbmFtZXNwYWNlIGFuZCBhbHNvIGRldmljZSBmcm9tIC9wcm9jL3NlbGYvbnMvcGlk Lg0KPiANCj4gID4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICpzaXplX29mX3BpZG5zKiBt dXN0IGJlIHRoZSBzaXplIG9mICpwaWRucyoNCj4gDQo+ICA+ICsgKg0KPiANCj4gID4gKyAqwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIFRoaXMgaGVscGVyIGlzIHVzZWQgd2hlbiBwaWQgZmlsdGVy aW5nIGlzIG5lZWRlZCBpbnNpZGUgYQ0KPiANCj4gID4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGNvbnRhaW5lciBhcyBicGZfZ2V0X2N1cnJlbnRfdGdpZCgpIGhlbHBlciByZXR1cm5zIA0K PiBhbHdheXMgdGhlDQo+IA0KPiAgPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGlkIGlk IGFzIHNlZW4gYnkgdGhlIHJvb3QgbmFtZXNwYWNlLg0KPiANCj4gID4gKyAqwqDCoMKgwqAgUmV0 dXJuDQo+IA0KPiAgPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMCBvbiBzdWNjZXNzDQo+ IA0KPiAgPiArICoNCj4gDQo+ICA+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqKi1FSU5W QUwqKiBpZiAqc2l6ZV9vZl9waWRucyogaXMgbm90IHZhbGlkIG9yIHVuYWJsZSANCj4gdG8gZ2V0 IG5zLCBwaWQNCj4gDQo+ICA+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBvciB0Z2lkIG9m IHRoZSBjdXJyZW50IHRhc2suDQo+IA0KPiAgPiArICoNCj4gDQo+ICA+ICsgKsKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAqKi1FTk9NRU0qKsKgIGlmIGFsbG9jYXRpb24gZmFpbHMuDQo+IA0KPiAg PiArICoNCj4gDQo+ICA+wqDCoCAqLw0KPiANCj4gID7CoCAjZGVmaW5lIF9fQlBGX0ZVTkNfTUFQ UEVSKEZOKcKgwqDCoMKgwqDCoMKgwqDCoCBcDQo+IA0KPiAgPsKgwqDCoMKgwqDCoMKgwqAgRk4o dW5zcGVjKSzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFwNCj4gDQo+ ICA+IEBAIC0yODUzLDcgKzI4NzEsOCBAQCB1bmlvbiBicGZfYXR0ciB7DQo+IA0KPiAgPsKgwqDC oMKgwqDCoMKgwqAgRk4oc2tfc3RvcmFnZV9nZXQpLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBc DQo+IA0KPiAgPsKgwqDCoMKgwqDCoMKgwqAgRk4oc2tfc3RvcmFnZV9kZWxldGUpLMKgwqDCoMKg wqDCoMKgwqDCoCBcDQo+IA0KPiAgPsKgwqDCoMKgwqDCoMKgwqAgRk4oc2VuZF9zaWduYWwpLMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcDQo+IA0KPiAgPiAtwqDCoMKgwqDCoMKgIEZO KHRjcF9nZW5fc3luY29va2llKSwNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqAgRk4odGNwX2dlbl9z eW5jb29raWUpLMKgwqDCoMKgwqDCoMKgwqDCoCBcDQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgIEZO KGdldF9jdXJyZW50X3BpZG5zX2luZm8pLA0KPiANCj4gID4NCj4gDQo+ICA+wqAgLyogaW50ZWdl ciB2YWx1ZSBpbiAnaW1tJyBmaWVsZCBvZiBCUEZfQ0FMTCBpbnN0cnVjdGlvbiBzZWxlY3RzIA0K PiB3aGljaCBoZWxwZXINCj4gDQo+ICA+wqDCoCAqIGZ1bmN0aW9uIGVCUEYgcHJvZ3JhbSBpbnRl bmRzIHRvIGNhbGwNCj4gDQo+ICA+IEBAIC0zNjA0LDQgKzM2MjMsMTAgQEAgc3RydWN0IGJwZl9z b2Nrb3B0IHsNCj4gDQo+ICA+wqDCoMKgwqDCoMKgwqDCoCBfX3MzMsKgwqAgcmV0dmFsOw0KPiAN Cj4gID7CoCB9Ow0KPiANCj4gID4NCj4gDQo+ICA+ICtzdHJ1Y3QgYnBmX3BpZG5zX2luZm8gew0K PiANCj4gID4gK8KgwqDCoMKgwqDCoCBfX3UzMiBkZXY7DQo+IA0KPiAgPiArwqDCoMKgwqDCoMKg IF9fdTMyIG5zaWQ7DQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgIF9fdTMyIHRnaWQ7DQo+IA0KPiAg PiArwqDCoMKgwqDCoMKgIF9fdTMyIHBpZDsNCj4gDQo+ICA+ICt9Ow0KPiANCj4gID7CoCAjZW5k aWYgLyogX1VBUElfX0xJTlVYX0JQRl9IX18gKi8NCj4gDQo+ICA+IGRpZmYgLS1naXQgYS90b29s cy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvTWFrZWZpbGUgDQo+IGIvdG9vbHMvdGVzdGluZy9zZWxm dGVzdHMvYnBmL01ha2VmaWxlDQo+IA0KPiAgPiBpbmRleCAzYmQwZjRhMDMzNmEuLjFmOTdiNTcx YjU4MSAxMDA2NDQNCj4gDQo+ICA+IC0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9N YWtlZmlsZQ0KPiANCj4gID4gKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL01ha2Vm aWxlDQo+IA0KPiAgPiBAQCAtMjksNyArMjksNyBAQCBURVNUX0dFTl9QUk9HUyA9IHRlc3RfdmVy aWZpZXIgdGVzdF90YWcgdGVzdF9tYXBzIA0KPiB0ZXN0X2xydV9tYXAgdGVzdF9scG1fbWFwIHRl c3QNCj4gDQo+ICA+wqDCoMKgwqDCoMKgwqDCoCB0ZXN0X2Nncm91cF9zdG9yYWdlIHRlc3Rfc2Vs ZWN0X3JldXNlcG9ydCB0ZXN0X3NlY3Rpb25fbmFtZXMgXA0KPiANCj4gID7CoMKgwqDCoMKgwqDC oMKgIHRlc3RfbmV0Y250IHRlc3RfdGNwbm90aWZ5X3VzZXIgdGVzdF9zb2NrX2ZpZWxkcyB0ZXN0 X3N5c2N0bCANCj4gdGVzdF9oYXNobWFwIFwNCj4gDQo+ICA+wqDCoMKgwqDCoMKgwqDCoCB0ZXN0 X2J0Zl9kdW1wIHRlc3RfY2dyb3VwX2F0dGFjaCB4ZHBpbmcgdGVzdF9zb2Nrb3B0IA0KPiB0ZXN0 X3NvY2tvcHRfc2sgXA0KPiANCj4gID4gLcKgwqDCoMKgwqDCoCB0ZXN0X3NvY2tvcHRfbXVsdGkg dGVzdF90Y3BfcnR0DQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgIHRlc3Rfc29ja29wdF9tdWx0aSB0 ZXN0X3RjcF9ydHQgdGVzdF9waWRucw0KPiANCj4gID4NCj4gDQo+ICA+wqAgQlBGX09CSl9GSUxF UyA9ICQocGF0c3Vic3QgJS5jLCUubywgJChub3RkaXIgJCh3aWxkY2FyZCBwcm9ncy8qLmMpKSkN Cj4gDQo+ICA+wqAgVEVTVF9HRU5fRklMRVMgPSAkKEJQRl9PQkpfRklMRVMpDQo+IA0KPiAgPiBk aWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9oZWxwZXJzLmggDQo+ IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9oZWxwZXJzLmgNCj4gDQo+ICA+IGlu ZGV4IDEyMGFhODZjNThkMy4uYzk2Nzk1YTlkOTgzIDEwMDY0NA0KPiANCj4gID4gLS0tIGEvdG9v bHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9oZWxwZXJzLmgNCj4gDQo+ICA+ICsrKyBiL3Rv b2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfaGVscGVycy5oDQo+IA0KPiAgPiBAQCAtMjMx LDYgKzIzMSw5IEBAIHN0YXRpYyBpbnQgKCpicGZfc2VuZF9zaWduYWwpKHVuc2lnbmVkIHNpZykg PSANCj4gKHZvaWQgKilCUEZfRlVOQ19zZW5kX3NpZ25hbDsNCj4gDQo+ICA+wqAgc3RhdGljIGxv bmcgbG9uZyAoKmJwZl90Y3BfZ2VuX3N5bmNvb2tpZSkoc3RydWN0IGJwZl9zb2NrICpzaywgdm9p ZCAqaXAsDQo+IA0KPiAgPsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQgaXBfbGVuLCB2 b2lkICp0Y3AsIGludCANCj4gdGNwX2xlbikgPQ0KPiANCj4gID7CoMKgwqDCoMKgwqDCoMKgICh2 b2lkICopIEJQRl9GVU5DX3RjcF9nZW5fc3luY29va2llOw0KPiANCj4gID4gK3N0YXRpYyBpbnQg KCpicGZfZ2V0X2N1cnJlbnRfcGlkbnNfaW5mbykoc3RydWN0IGJwZl9waWRuc19pbmZvICpidWYs DQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGludCBidWZfc2l6ZSkg PQ0KPiANCj4gID4gK8KgwqDCoMKgwqDCoCAodm9pZCAqKSBCUEZfRlVOQ19nZXRfY3VycmVudF9w aWRuc19pbmZvOw0KPiANCj4gID4NCj4gDQo+ICA+wqAgLyogbGx2bSBidWlsdGluIGZ1bmN0aW9u cyB0aGF0IGVCUEYgQyBwcm9ncmFtIG1heSB1c2UgdG8NCj4gDQo+ICA+wqDCoCAqIGVtaXQgQlBG X0xEX0FCUyBhbmQgQlBGX0xEX0lORCBpbnN0cnVjdGlvbnMNCj4gDQo+ICA+IGRpZmYgLS1naXQg YS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdGVzdF9waWRuc19rZXJuLmMgDQo+ IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfcGlkbnNfa2Vybi5jDQo+ IA0KPiAgPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiANCj4gID4gaW5kZXggMDAwMDAwMDAwMDAw Li5lMWQyZmFjZmE3NjINCj4gDQo+ICA+IC0tLSAvZGV2L251bGwNCj4gDQo+ICA+ICsrKyBiL3Rv b2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3BpZG5zX2tlcm4uYw0KPiANCj4g ID4gQEAgLTAsMCArMSw1MSBAQA0KPiANCj4gID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wDQo+IA0KPiAgPiArLyogQ29weXJpZ2h0IChjKSAyMDE4IENhcmxvcyBOZWlyYSBj bmVpcmFidXN0b3NAZ21haWwuY29tDQo+IA0KPiAgPiArICoNCj4gDQo+ICA+ICsgKiBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQo+ IA0KPiAgPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYw0KPiANCj4gID4gKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uDQo+IA0KPiAgPiArICovDQo+IA0KPiAgPiAr DQo+IA0KPiAgPiArI2luY2x1ZGUgPGxpbnV4L2JwZi5oPg0KPiANCj4gID4gKyNpbmNsdWRlIDxl cnJuby5oPg0KPiANCj4gID4gKyNpbmNsdWRlICJicGZfaGVscGVycy5oIg0KPiANCj4gID4gKw0K PiANCj4gID4gK3N0cnVjdCBicGZfbWFwX2RlZiBTRUMoIm1hcHMiKSBuc2lkbWFwID0gew0KPiAN Cj4gID4gK8KgwqDCoMKgwqDCoCAudHlwZSA9IEJQRl9NQVBfVFlQRV9BUlJBWSwNCj4gDQo+ICA+ ICvCoMKgwqDCoMKgwqAgLmtleV9zaXplID0gc2l6ZW9mKF9fdTMyKSwNCj4gDQo+ICA+ICvCoMKg wqDCoMKgwqAgLnZhbHVlX3NpemUgPSBzaXplb2YoX191MzIpLA0KPiANCj4gID4gK8KgwqDCoMKg wqDCoCAubWF4X2VudHJpZXMgPSAxLA0KPiANCj4gID4gK307DQo+IA0KPiAgPiArDQo+IA0KPiAg PiArc3RydWN0IGJwZl9tYXBfZGVmIFNFQygibWFwcyIpIHBpZG1hcCA9IHsNCj4gDQo+ICA+ICvC oMKgwqDCoMKgwqAgLnR5cGUgPSBCUEZfTUFQX1RZUEVfQVJSQVksDQo+IA0KPiAgPiArwqDCoMKg wqDCoMKgIC5rZXlfc2l6ZSA9IHNpemVvZihfX3UzMiksDQo+IA0KPiAgPiArwqDCoMKgwqDCoMKg IC52YWx1ZV9zaXplID0gc2l6ZW9mKF9fdTMyKSwNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqAgLm1h eF9lbnRyaWVzID0gMSwNCj4gDQo+ICA+ICt9Ow0KPiANCj4gID4gKw0KPiANCj4gID4gK1NFQygi dHJhY2Vwb2ludC9zeXNjYWxscy9zeXNfZW50ZXJfbmFub3NsZWVwIikNCj4gDQo+ICA+ICtpbnQg dHJhY2Uodm9pZCAqY3R4KQ0KPiANCj4gID4gK3sNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqAgc3Ry dWN0IGJwZl9waWRuc19pbmZvIG5zaW5mbzsNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqAgX191MzIg a2V5ID0gMCwgKmV4cGVjdGVkX3BpZCwgKnZhbDsNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqAgY2hh ciBmbXRbXSA9ICJFUlJPUiBuc3BpZDolZFxuIjsNCj4gDQo+ICA+ICsNCj4gDQo+ICA+ICvCoMKg wqDCoMKgwqAgaWYgKGJwZl9nZXRfY3VycmVudF9waWRuc19pbmZvKCZuc2luZm8sIHNpemVvZihu c2luZm8pKSkNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAt RUlOVkFMOw0KPiANCj4gID4gKw0KPiANCj4gID4gK8KgwqDCoMKgwqDCoCBleHBlY3RlZF9waWQg PSBicGZfbWFwX2xvb2t1cF9lbGVtKCZwaWRtYXAsICZrZXkpOw0KPiANCj4gID4gKw0KPiANCj4g ID4gKw0KPiANCj4gID4gK8KgwqDCoMKgwqDCoCBpZiAoIWV4cGVjdGVkX3BpZCB8fCAqZXhwZWN0 ZWRfcGlkICE9IG5zaW5mby5waWQpDQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCByZXR1cm4gMDsNCj4gDQo+ICA+ICsNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqAgdmFsID0g YnBmX21hcF9sb29rdXBfZWxlbSgmbnNpZG1hcCwgJmtleSk7DQo+IA0KPiAgPiArwqDCoMKgwqDC oMKgIGlmICh2YWwpDQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqdmFs ID0gbnNpbmZvLm5zaWQ7DQo+IA0KPiAgPiArDQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgIHJldHVy biAwOw0KPiANCj4gID4gK30NCj4gDQo+ICA+ICsNCj4gDQo+ICA+ICtjaGFyIF9saWNlbnNlW10g U0VDKCJsaWNlbnNlIikgPSAiR1BMIjsNCj4gDQo+ICA+ICtfX3UzMiBfdmVyc2lvbiBTRUMoInZl cnNpb24iKSA9IDE7DQo+IA0KPiAgPiBkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVz dHMvYnBmL3Rlc3RfcGlkbnMuYyANCj4gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVz dF9waWRucy5jDQo+IA0KPiAgPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiANCj4gID4gaW5kZXgg MDAwMDAwMDAwMDAwLi5hNzI1NDA1NWYyOTQNCj4gDQo+ICA+IC0tLSAvZGV2L251bGwNCj4gDQo+ ICA+ICsrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X3BpZG5zLmMNCj4gDQo+ ICA+IEBAIC0wLDAgKzEsMTM4IEBADQo+IA0KPiAgPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjANCj4gDQo+ICA+ICsvKiBDb3B5cmlnaHQgKGMpIDIwMTggQ2FybG9zIE5laXJh IGNuZWlyYWJ1c3Rvc0BnbWFpbC5jb20NCj4gDQo+ICA+ICsgKg0KPiANCj4gID4gKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IN Cj4gDQo+ICA+ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljDQo+IA0KPiAgPiArICogTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4NCj4gDQo+ICA+ICsgKi8NCj4gDQo+ICA+ ICsNCj4gDQo+ICA+ICsjaW5jbHVkZSA8c3RkaW8uaD4NCj4gDQo+ICA+ICsjaW5jbHVkZSA8c3Rk bGliLmg+DQo+IA0KPiAgPiArI2luY2x1ZGUgPHN0cmluZy5oPg0KPiANCj4gID4gKyNpbmNsdWRl IDxlcnJuby5oPg0KPiANCj4gID4gKyNpbmNsdWRlIDxmY250bC5oPg0KPiANCj4gID4gKyNpbmNs dWRlIDxzeXNjYWxsLmg+DQo+IA0KPiAgPiArI2luY2x1ZGUgPHVuaXN0ZC5oPg0KPiANCj4gID4g KyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+DQo+IA0KPiAgPiArI2luY2x1ZGUgPHN5cy9p b2N0bC5oPg0KPiANCj4gID4gKyNpbmNsdWRlIDxzeXMvdGltZS5oPg0KPiANCj4gID4gKyNpbmNs dWRlIDxzeXMvdHlwZXMuaD4NCj4gDQo+ICA+ICsjaW5jbHVkZSA8c3lzL3N0YXQuaD4NCj4gDQo+ ICA+ICsNCj4gDQo+ICA+ICsjaW5jbHVkZSA8bGludXgvYnBmLmg+DQo+IA0KPiAgPiArI2luY2x1 ZGUgPGJwZi9icGYuaD4NCj4gDQo+ICA+ICsjaW5jbHVkZSA8YnBmL2xpYmJwZi5oPg0KPiANCj4g ID4gKw0KPiANCj4gID4gKyNpbmNsdWRlICJjZ3JvdXBfaGVscGVycy5oIg0KPiANCj4gID4gKyNp bmNsdWRlICJicGZfcmxpbWl0LmgiDQo+IA0KPiAgPiArDQo+IA0KPiAgPiArI2RlZmluZSBDSEVD Syhjb25kaXRpb24sIHRhZywgZm9ybWF0Li4uKSAoe8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXA0K PiANCj4gID4gK8KgwqDCoMKgwqDCoCBpbnQgX19yZXQgPSAhIShjb25kaXRpb24pO8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcDQo+IA0KPiAgPiArwqDCoMKgwqDC oMKgIGlmIChfX3JldCkge8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXA0KPiANCj4gID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcHJpbnRmKCIlczpGQUlMOiVzICIsIF9fZnVuY19fLCB0YWcpO8KgwqAg XA0KPiANCj4gID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCDCoMKgcHJpbnRmKGZvcm1hdCk7 wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFwNCj4gDQo+ ICA+ICvCoMKgwqDCoMKgwqAgfSBlbHNlIHvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXA0KPiANCj4g ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJpbnRmKCIlczpQQVNTOiVzXG4iLCBf X2Z1bmNfXywgdGFnKTvCoCBcDQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgIH3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcDQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgIF9fcmV0O8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgXA0KPiANCj4gID4gK30pDQo+IA0KPiAgPiArDQo+IA0K PiAgPiArc3RhdGljIGludCBicGZfZmluZF9tYXAoY29uc3QgY2hhciAqdGVzdCwgc3RydWN0IGJw Zl9vYmplY3QgKm9iaiwNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBjb25zdCBjaGFyICpuYW1lKQ0KPiANCj4gID4gK3sNCj4gDQo+ICA+ICvC oMKgwqDCoMKgwqAgc3RydWN0IGJwZl9tYXAgKm1hcDsNCj4gDQo+ICA+ICsNCj4gDQo+ICA+ICvC oMKgwqDCoMKgwqAgbWFwID0gYnBmX29iamVjdF9fZmluZF9tYXBfYnlfbmFtZShvYmosIG5hbWUp Ow0KPiANCj4gID4gK8KgwqDCoMKgIMKgwqBpZiAoIW1hcCkNCj4gDQo+ICA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtMTsNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqAgcmV0 dXJuIGJwZl9tYXBfX2ZkKG1hcCk7DQo+IA0KPiAgPiArfQ0KPiANCj4gID4gKw0KPiANCj4gID4g Kw0KPiANCj4gID4gK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikNCj4gDQo+ICA+ICt7 DQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgIGNvbnN0IGNoYXIgKnByb2JlX25hbWUgPSAic3lzY2Fs bHMvc3lzX2VudGVyX25hbm9zbGVlcCI7DQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgIGNvbnN0IGNo YXIgKmZpbGUgPSAidGVzdF9waWRuc19rZXJuLm8iOw0KPiANCj4gID4gK8KgwqDCoMKgwqDCoCBp bnQgZXJyLCBieXRlcywgZWZkLCBwcm9nX2ZkLCBwbXVfZmQ7DQo+IA0KPiAgPiArwqDCoMKgwqDC oMKgIGludCBwaWRtYXBfZmQsIG5zaWRtYXBfZmQ7DQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgIHN0 cnVjdCBwZXJmX2V2ZW50X2F0dHIgYXR0ciA9IHt9Ow0KPiANCj4gID4gK8KgwqDCoMKgwqDCoCBz dHJ1Y3QgYnBmX29iamVjdCAqb2JqOw0KPiANCj4gID4gK8KgwqDCoMKgwqDCoCBfX3UzMiBrbnNp ZCA9IDA7DQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgIF9fdTMyIGtleSA9IDAsIHBpZDsNCj4gDQo+ ICA+ICvCoMKgwqDCoMKgwqAgaW50IGV4aXRfY29kZSA9IDE7DQo+IA0KPiAgPiArwqDCoMKgwqDC oMKgIHN0cnVjdCBzdGF0IHN0Ow0KPiANCj4gID4gK8KgwqDCoMKgwqDCoCBjaGFyIGJ1ZlsyNTZd Ow0KPiANCj4gID4gKw0KPiANCj4gID4gK8KgwqDCoMKgwqDCoCBlcnIgPSBicGZfcHJvZ19sb2Fk KGZpbGUsIEJQRl9QUk9HX1RZUEVfVFJBQ0VQT0lOVCwgJm9iaiwgDQo+ICZwcm9nX2ZkKTsNCj4g DQo+ICA+ICvCoMKgwqDCoMKgwqAgaWYgKENIRUNLKGVyciwgImJwZl9wcm9nX2xvYWQiLCAiZXJy ICVkIGVycm5vICVkXG4iLCBlcnIsIGVycm5vKSkNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGdvdG8gY2xlYW51cF9jZ3JvdXBfZW52Ow0KPiANCj4gID4gKw0KPiANCj4g ID4gK8KgwqDCoMKgwqDCoCBuc2lkbWFwX2ZkID0gYnBmX2ZpbmRfbWFwKF9fZnVuY19fLCBvYmos ICJuc2lkbWFwIik7DQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgIGlmIChDSEVDSyhuc2lkbWFwX2Zk IDwgMCwgImJwZl9maW5kX21hcCIsICJlcnIgJWQgZXJybm8gJWRcbiIsDQo+IA0KPiAgPiArwqDC oMKgwqDCoCDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbnNpZG1hcF9mZCwgZXJybm8pKQ0KPiANCj4g ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBjbG9zZV9wcm9nOw0KPiANCj4g ID4gKw0KPiANCj4gID4gK8KgwqDCoMKgwqDCoCBwaWRtYXBfZmQgPSBicGZfZmluZF9tYXAoX19m dW5jX18sIG9iaiwgInBpZG1hcCIpOw0KPiANCj4gID4gK8KgwqDCoMKgwqDCoCBpZiAoQ0hFQ0so cGlkbWFwX2ZkIDwgMCwgImJwZl9maW5kX21hcCIsICJlcnIgJWQgZXJybm8gJWRcbiIsDQo+IA0K PiAgPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGlkbWFwX2ZkLCBlcnJubykp DQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgwqDCoMKgwqBnb3RvIGNsb3NlX3Byb2c7 DQo+IA0KPiAgPiArDQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgIHBpZCA9IGdldHBpZCgpOw0KPiAN Cj4gID4gK8KgwqDCoMKgwqDCoCBicGZfbWFwX3VwZGF0ZV9lbGVtKHBpZG1hcF9mZCwgJmtleSwg JnBpZCwgMCk7DQo+IA0KPiAgPiArDQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgIHNucHJpbnRmKGJ1 Ziwgc2l6ZW9mKGJ1ZiksDQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2V2ZW50cy8lcy9pZCIsIHByb2JlX25hbWUpOw0K PiANCj4gID4gK8KgwqDCoMKgwqDCoCBlZmQgPSBvcGVuKGJ1ZiwgT19SRE9OTFksIDApOw0KPiAN Cj4gID4gK8KgwqDCoMKgwqDCoCBpZiAoQ0hFQ0soZWZkIDwgMCwgIm9wZW4iLCAiZXJyICVkIGVy cm5vICVkXG4iLCBlZmQsIGVycm5vKSkNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGdvdG8gY2xvc2VfcHJvZzsNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqAgYnl0ZXMgPSBy ZWFkKGVmZCwgYnVmLCBzaXplb2YoYnVmKSk7DQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgIGNsb3Nl KGVmZCk7DQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgIGlmIChDSEVDSyhieXRlcyA8PSAwIHx8IGJ5 dGVzID49IHNpemVvZihidWYpLCAicmVhZCIsDQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgImJ5dGVzICVkIGVycm5vICVkXG4iLCBieXRlcywgZXJybm8pKQ0KPiAN Cj4gID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBjbG9zZV9wcm9nOw0KPiAN Cj4gID4gKw0KPiANCj4gID4gK8KgwqDCoMKgwqDCoCBhdHRyLmNvbmZpZyA9IHN0cnRvbChidWYs IE5VTEwsIDApOw0KPiANCj4gID4gK8KgwqDCoMKgwqDCoCBhdHRyLnR5cGUgPSBQRVJGX1RZUEVf VFJBQ0VQT0lOVDsNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqAgYXR0ci5zYW1wbGVfdHlwZSA9IFBF UkZfU0FNUExFX1JBVzsNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqAgYXR0ci5zYW1wbGVfcGVyaW9k ID0gMTsNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqAgYXR0ci53YWtldXBfZXZlbnRzID0gMTsNCj4g DQo+ICA+ICsNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqAgcG11X2ZkID0gc3lzY2FsbChfX05SX3Bl cmZfZXZlbnRfb3BlbiwgJmF0dHIsIGdldHBpZCgpLCAtMSwgDQo+IC0xLCAwKTsNCj4gDQo+ICA+ ICvCoMKgwqDCoMKgwqAgaWYgKENIRUNLKHBtdV9mZCA8IDAsICJwZXJmX2V2ZW50X29wZW4iLCAi ZXJyICVkIGVycm5vICVkXG4iLCANCj4gcG11X2ZkLA0KPiANCj4gID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGVycm5vKSkNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGdvdG8gY2xvc2VfcHJvZzsNCj4gDQo+ICA+ICsNCj4gDQo+ICA+ICvCoMKgwqDC oMKgwqAgZXJyID0gaW9jdGwocG11X2ZkLCBQRVJGX0VWRU5UX0lPQ19FTkFCTEUsIDApOw0KPiAN Cj4gID4gK8KgwqDCoMKgwqDCoCBpZiAoQ0hFQ0soZXJyLCAicGVyZl9ldmVudF9pb2NfZW5hYmxl IiwgImVyciAlZCBlcnJubyAlZFxuIiwgZXJyLA0KPiANCj4gID4gK8KgwqDCoMKgIMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGVycm5vKSkNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGdvdG8gY2xvc2VfcG11Ow0KPiANCj4gID4gKw0KPiANCj4gID4gK8KgwqDCoMKgwqDC oCBlcnIgPSBpb2N0bChwbXVfZmQsIFBFUkZfRVZFTlRfSU9DX1NFVF9CUEYsIHByb2dfZmQpOw0K PiANCj4gID4gK8KgwqDCoMKgwqDCoCBpZiAoQ0hFQ0soZXJyLCAicGVyZl9ldmVudF9pb2Nfc2V0 X2JwZiIsICJlcnIgJWQgZXJybm8gJWRcbiIsIA0KPiBlcnIsDQo+IA0KPiAgPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZXJybm8pKQ0KPiANCj4gID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgZ290byBjbG9zZV9wbXU7DQo+IA0KPiAgPiArDQo+IA0KPiAgPiArwqDC oMKgwqDCoMKgIC8qIHRyaWdnZXIgc29tZSBzeXNjYWxscyAqLw0KPiANCj4gID4gK8KgwqDCoMKg wqDCoCBzbGVlcCgxKTsNCj4gDQo+ICA+ICsNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqAgZXJyID0g YnBmX21hcF9sb29rdXBfZWxlbShuc2lkbWFwX2ZkLCAma2V5LCAma25zaWQpOw0KPiANCj4gID4g K8KgwqDCoMKgwqDCoCBpZiAoQ0hFQ0soZXJyLCAiYnBmX21hcF9sb29rdXBfZWxlbSIsICJlcnIg JWQgZXJybm8gJWRcbiIsIA0KPiBlcnIsIGVycm5vKSkNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGdvdG8gY2xvc2VfcG11Ow0KPiANCj4gID4gKw0KPiANCj4gID4gK8Kg wqDCoMKgwqDCoCBpZiAoc3RhdCgiL3Byb2Mvc2VsZi9ucy9waWQiLCAmc3QpKQ0KPiANCj4gID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBjbG9zZV9wbXU7DQo+IA0KPiAgPiAr DQo+IA0KPiAgPiArwqDCoMKgwqDCoMKgIGlmIChDSEVDSyhrbnNpZCAhPSAoX191MzIpIHN0LnN0 X2lubywgImNvbXBhcmVfbmFtZXNwYWNlX2lkIiwNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAia2VybiBrbnNpZCAldSB1c2VyIHVuc2lkICV1XG4iLCBrbnNpZCwg KF9fdTMyKSANCj4gc3Quc3RfaW5vKSkNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGdvdG8gY2xvc2VfcG11Ow0KPiANCj4gID4gKw0KPiANCj4gID4gK8KgwqDCoMKgwqDC oCBleGl0X2NvZGUgPSAwOw0KPiANCj4gID4gK8KgwqDCoMKgwqDCoCBwcmludGYoIiVzOlBBU1Nc biIsIGFyZ3ZbMF0pOw0KPiANCj4gID4gKw0KPiANCj4gID4gK2Nsb3NlX3BtdToNCj4gDQo+ICA+ ICvCoMKgwqDCoMKgwqAgY2xvc2UocG11X2ZkKTsNCj4gDQo+ICA+ICtjbG9zZV9wcm9nOg0KPiAN Cj4gID4gK8KgwqDCoMKgwqDCoCBicGZfb2JqZWN0X19jbG9zZShvYmopOw0KPiANCj4gID4gK2Ns ZWFudXBfY2dyb3VwX2VudjoNCj4gDQo+ICA+ICvCoMKgwqDCoMKgwqAgcmV0dXJuIGV4aXRfY29k ZTsNCj4gDQo+ICA+ICt9DQo+IA0KPiAgPiAtLQ0KPiANCj4gID4gMi4xMS4wDQo+IA0KPiAgPg0K PiANCj4gID4NCj4gDQo+ICA+DQo+IA0KPiAgPg0KPiANCj4gID4NCj4gDQo+ICA+DQo+IA0KPiAg PiBPbiBUaHUsIEF1ZyAwOCwgMjAxOSBhdCAwNTowOTo1MUFNICswMDAwLCBZb25naG9uZyBTb25n IHdyb3RlOg0KPiANCj4gID4gPg0KPiANCj4gID4gPg0KPiANCj4gID4gPiBPbiA4LzcvMTkgNjoy MiBQTSwgQ2FybG9zIEFudG9uaW8gTmVpcmEgQnVzdG9zIHdyb3RlOg0KPiANCj4gID4gPiA+IFRo ZSBjb2RlIGhhcyBiZWVuIG1vZGlmaWVkIHRvIGF2b2lkIHN5c2NhbGxzIHRoYXQgY291bGQgc2xl ZXAuDQo+IA0KPiAgPiA+ID4gUGxlYXNlIGxldCBtZSBrbm93IGlmIGFueSBvdGhlciBtb2RpZmlj YXRpb24gaXMgbmVlZGVkLg0KPiANCj4gID4gPiA+DQo+IA0KPiAgPiA+ID7CoCBGcm9tIGJlMDM4 NGMwZmEyMDlhNzhjMTU2NzkzNmU4ZGI0ZTM1YjlhN2MwZjggTW9uIFNlcCAxNyANCj4gMDA6MDA6 MDAgMjAwMQ0KPiANCj4gID4gPiA+IEZyb206IENhcmxvcyA8Y25laXJhYnVzdG9zQGdtYWlsLmNv bT4NCj4gDQo+ICA+ID4gPiBEYXRlOiBXZWQsIDcgQXVnIDIwMTkgMjA6MDQ6MzAgLTA0MDANCj4g DQo+ICA+ID4gPiBTdWJqZWN0OiBbUEFUQ0hdIFtQQVRDSCB2NSBicGYtbmV4dF0gQlBGOiBOZXcg aGVscGVyIHRvIG9idGFpbiANCj4gbmFtZXNwYWNlIGRhdGENCj4gDQo+ICA+ID4gPsKgwqAgZnJv bSBjdXJyZW50IHRhc2sNCj4gDQo+ICA+ID4gPg0KPiANCj4gID4gPiA+IFRoaXMgaGVscGVyIG9i dGFpbnMgdGhlIGFjdGl2ZSBuYW1lc3BhY2UgZnJvbSBjdXJyZW50IGFuZCByZXR1cm5zIA0KPiBw aWQsIHRnaWQsDQo+IA0KPiAgPiA+ID4gZGV2aWNlIGFuZCBuYW1lc3BhY2UgaWQgYXMgc2VlbiBm cm9tIHRoYXQgbmFtZXNwYWNlLCBhbGxvd2luZyB0byANCj4gaW5zdHJ1bWVudA0KPiANCj4gID4g PiA+IGEgcHJvY2VzcyBpbnNpZGUgYSBjb250YWluZXIuDQo+IA0KPiAgPiA+ID4gRGV2aWNlIGlz IHJlYWQgZnJvbSAvcHJvYy9zZWxmL25zL3BpZCwgYXMgaW4gdGhlIGZ1dHVyZSBpdCdzIA0KPiBw b3NzaWJsZSB0aGF0DQo+IA0KPiAgPiA+ID4gZGlmZmVyZW50IHBpZF9ucyBmaWxlcyBtYXkgYmVs b25nIHRvIGRpZmZlcmVudCBkZXZpY2VzLCBhY2NvcmRpbmcNCj4gDQo+ICA+ID4gPiB0byB0aGUg ZGlzY3Vzc2lvbiBiZXR3ZWVuIEVyaWMgQmllZGVybWFuIGFuZCBZb25naG9uZyBpbiAyMDE3IA0K PiBsaW51eCBwbHVtYmVycw0KPiANCj4gID4gPiA+IGNvbmZlcmVuY2UuDQo+IA0KPiAgPiA+ID4g Q3VycmVudGx5IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpLCBpcyB1c2VkIHRvIGRvIHBpZCBm aWx0ZXJpbmcgDQo+IGluIGJjYydzDQo+IA0KPiAgPiA+ID4gc2NyaXB0cyBidXQgdGhpcyBoZWxw ZXIgcmV0dXJucyB0aGUgcGlkIGFzIHNlZW4gYnkgdGhlIHJvb3QgDQo+IG5hbWVzcGFjZSB3aGlj aCBpcw0KPiANCj4gID4gPiA+IGZpbmUgd2hlbiBhIGJjYyBzY3JpcHQgaXMgbm90IGV4ZWN1dGVk IGluc2lkZSBhIGNvbnRhaW5lci4NCj4gDQo+ICA+ID4gPiBXaGVuIHRoZSBwcm9jZXNzIG9mIGlu dGVyZXN0IGlzIGluc2lkZSBhIGNvbnRhaW5lciwgcGlkIGZpbHRlcmluZyANCj4gd2lsbCBub3Qg d29yaw0KPiANCj4gID4gPiA+IGlmIGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIGlzIHVzZWQu IFRoaXMgaGVscGVyIGFkZHJlc3NlcyB0aGlzIA0KPiBsaW1pdGF0aW9uDQo+IA0KPiAgPiA+ID4g cmV0dXJuaW5nIHRoZSBwaWQgYXMgaXQncyBzZWVuIGJ5IHRoZSBjdXJyZW50IG5hbWVzcGFjZSB3 aGVyZSB0aGUgDQo+IHNjcmlwdCBpcw0KPiANCj4gID4gPiA+IGV4ZWN1dGluZy4NCj4gDQo+ICA+ ID4gPg0KPiANCj4gID4gPiA+IFRoaXMgaGVscGVyIGhhcyB0aGUgc2FtZSB1c2UgY2FzZXMgYXMg YnBmX2dldF9jdXJyZW50X3BpZF90Z2lkKCkgDQo+IGFzIGl0IGNhbiBiZQ0KPiANCj4gID4gPiA+ IHVzZWQgdG8gZG8gcGlkIGZpbHRlcmluZyBldmVuIGluc2lkZSBhIGNvbnRhaW5lci4NCj4gDQo+ ICA+ID4gPg0KPiANCj4gID4gPiA+IEZvciBleGFtcGxlIGEgYmNjIHNjcmlwdCB1c2luZyBicGZf Z2V0X2N1cnJlbnRfcGlkX3RnaWQoKSANCj4gKHRvb2xzL2Z1bmNjb3VudC5weSk6DQo+IA0KPiAg PiA+ID4NCj4gDQo+ICA+ID4gPsKgwqDCoMKgwqDCoMKgwqDCoCB1MzIgcGlkID0gYnBmX2dldF9j dXJyZW50X3BpZF90Z2lkKCkgPj4gMzI7DQo+IA0KPiAgPiA+ID7CoMKgwqDCoMKgwqDCoMKgwqAg aWYgKHBpZCAhPSA8cGlkX2FyZ19wYXNzZWRfaW4+KQ0KPiANCj4gID4gPiA+wqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsNCj4gDQo+ICA+ID4gPiBDb3VsZCBiZSBt b2RpZmllZCB0byB1c2UgYnBmX2dldF9jdXJyZW50X3BpZG5zX2luZm8oKSBhcyBmb2xsb3dzOg0K PiANCj4gID4gPiA+DQo+IA0KPiAgPiA+ID7CoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGJwZl9w aWRucyBwaWRuczsNCj4gDQo+ICA+ID4gPsKgwqDCoMKgwqDCoMKgwqDCoCBicGZfZ2V0X2N1cnJl bnRfcGlkbnNfaW5mbygmcGlkbnMsIHNpemVvZihzdHJ1Y3QgDQo+IGJwZl9waWRucykpOw0KPiAN Cj4gID4gPiA+wqDCoMKgwqDCoMKgwqDCoMKgIHUzMiBwaWQgPSBwaWRucy50Z2lkOw0KPiANCj4g ID4gPiA+wqDCoMKgwqDCoMKgwqDCoMKgIHUzMiBuc2lkID0gcGlkbnMubnNpZDsNCj4gDQo+ICA+ ID4gPsKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoKHBpZCAhPSA8cGlkX2FyZ19wYXNzZWRfaW4+KSAm JiAobnNpZCAhPSANCj4gPG5zaWRfYXJnX3Bhc3NlZF9pbj4pKQ0KPiANCj4gID4gPiA+wqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsNCj4gDQo+ICA+ID4gPg0KPiAN Cj4gID4gPiA+IFRvIGZpbmQgb3V0IHRoZSBuYW1lIFBJRCBuYW1lc3BhY2UgaWQgb2YgYSBwcm9j ZXNzLCB5b3UgY291bGQgdXNlIA0KPiB0aGlzIGNvbW1hbmQ6DQo+IA0KPiAgPiA+ID4NCj4gDQo+ ICA+ID4gPiAkIHBzIC1oIC1vIHBpZG5zIC1wIDxwaWRfb2ZfaW50ZXJlc3Q+DQo+IA0KPiAgPiA+ ID4NCj4gDQo+ICA+ID4gPiBPciB0aGlzIG90aGVyIGNvbW1hbmQ6DQo+IA0KPiAgPiA+ID4NCj4g DQo+ICA+ID4gPiAkIGxzIC1MaSAvcHJvYy88cGlkX29mX2ludGVyZXN0Pi9ucy9waWQNCj4gDQo+ ICA+ID4gPg0KPiANCj4gID4gPiA+IFNpZ25lZC1vZmYtYnk6IENhcmxvcyBOZWlyYSA8Y25laXJh YnVzdG9zQGdtYWlsLmNvbT4NCj4gDQo+ICA+ID4gPiAtLS0NCj4gDQo+ICA+ID4gPsKgwqAgZnMv bmFtZWkuY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDIgKy0NCj4gDQo+ICA+ID4gPsKg wqAgaW5jbHVkZS9saW51eC9icGYuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDEgKw0KPiANCj4gID4gPiA+wqDCoCBp bmNsdWRlL2xpbnV4L25hbWVpLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDQgKw0KPiANCj4gID4gPiA+wqDCoCBpbmNsdWRl L3VhcGkvbGludXgvYnBmLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHzCoCAyOSArKysrLQ0KPiANCj4gID4gPiA+wqDCoCBrZXJuZWwvYnBmL2Nv cmUuY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB8wqDCoCAxICsNCj4gDQo+ICA+ID4gPsKgwqAga2VybmVsL2JwZi9oZWxw ZXJzLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCDCoMKgwqDC oMKgwqDCoMKgfMKgIDc4IA0KPiArKysrKysrKysrKysNCj4gDQo+ICA+ID4gPsKgwqAga2VybmVs L3RyYWNlL2JwZl90cmFjZS5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB8wqDCoCAyICsNCj4gDQo+ICA+ID4gPsKgwqAgc2FtcGxlcy9icGYvTWFr ZWZpbGXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgfMKgwqAgMyArDQo+IA0KPiAgPiA+ID7CoMKgIHNhbXBsZXMvYnBmL3RyYWNlX25z X2luZm9fdXNlci5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCAzNSAr KysrKysNCj4gDQo+ICA+ID4gPsKgwqAgc2FtcGxlcy9icGYvdHJhY2VfbnNfaW5mb191c2VyX2tl cm4uY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCA0NCArKysrKysrDQo+IA0KPiAgPiA+ ID7CoMKgIHRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgIDI5ICsrKystDQo+IA0KPiAgPiA+ID7CoMKgIHRvb2xz L3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9NYWtlZmlsZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgfMKgwqAgMiArLQ0KPiANCj4gID4gPiA+wqDCoCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9i cGYvYnBmX2hlbHBlcnMuaMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAzICsNCj4gDQo+ICA+ID4g PsKgwqAgLi4uL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy90ZXN0X3BpZG5zX2tlcm4uY8Kg IHzCoCA1MSArKysrKysrKw0KPiANCj4gID4gPiA+wqDCoCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0 cy9icGYvdGVzdF9waWRucy5jwqDCoMKgwqDCoMKgwqDCoMKgwqAgfCAxMzggDQo+ICsrKysrKysr KysrKysrKysrKysrKw0KPiANCj4gID4gPiA+wqDCoCAxNSBmaWxlcyBjaGFuZ2VkLCA0MTggaW5z ZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkNCj4gDQo+ICA+ID4gPsKgwqAgY3JlYXRlIG1vZGUg MTAwNjQ0IHNhbXBsZXMvYnBmL3RyYWNlX25zX2luZm9fdXNlci5jDQo+IA0KPiAgPiA+ID7CoMKg IGNyZWF0ZSBtb2RlIDEwMDY0NCBzYW1wbGVzL2JwZi90cmFjZV9uc19pbmZvX3VzZXJfa2Vybi5j DQo+IA0KPiAgPiA+ID7CoMKgIGNyZWF0ZSBtb2RlIDEwMDY0NCANCj4gdG9vbHMvdGVzdGluZy9z ZWxmdGVzdHMvYnBmL3Byb2dzL3Rlc3RfcGlkbnNfa2Vybi5jDQo+IA0KPiAgPiA+ID7CoMKgIGNy ZWF0ZSBtb2RlIDEwMDY0NCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9waWRucy5j DQo+IA0KPiAgPiA+ID4NCj4gDQo+ICA+ID4gPiBkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2Zz L25hbWVpLmMNCj4gDQo+ICA+ID4gPiBpbmRleCAyMDljNTFhNTIyNmMuLmQxZWNhMzY5NzJkMiAx MDA2NDQNCj4gDQo+ICA+ID4gPiAtLS0gYS9mcy9uYW1laS5jDQo+IA0KPiAgPiA+ID4gKysrIGIv ZnMvbmFtZWkuYw0KPiANCj4gID4gPiA+IEBAIC0xOSw3ICsxOSw2IEBADQo+IA0KPiAgPiA+ID7C oMKgICNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4NCj4gDQo+ICA+ID4gPsKgwqAgI2luY2x1ZGUg PGxpbnV4L2tlcm5lbC5oPg0KPiANCj4gID4gPiA+wqDCoCAjaW5jbHVkZSA8bGludXgvc2xhYi5o Pg0KPiANCj4gID4gPiA+IC0jaW5jbHVkZSA8bGludXgvZnMuaD4NCj4gDQo+ICA+ID4gPsKgwqAg I2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+DQo+IA0KPiAgPiA+ID7CoMKgICNpbmNsdWRlIDxsaW51 eC9wYWdlbWFwLmg+DQo+IA0KPiAgPiA+ID7CoMKgICNpbmNsdWRlIDxsaW51eC9mc25vdGlmeS5o Pg0KPiANCj4gID4gPiA+IEBAIC0yMzU1LDYgKzIzNTQsNyBAQCBpbnQgZmlsZW5hbWVfbG9va3Vw KGludCBkZmQsIHN0cnVjdCANCj4gZmlsZW5hbWUgKm5hbWUsIHVuc2lnbmVkIGZsYWdzLA0KPiAN Cj4gID4gPiA+wqDCoMKgwqAgcHV0bmFtZShuYW1lKTsNCj4gDQo+ICA+ID4gPsKgwqDCoMKgIHJl dHVybiByZXR2YWw7DQo+IA0KPiAgPiA+ID7CoMKgIH0NCj4gDQo+ICA+ID4gPiArRVhQT1JUX1NZ TUJPTChmaWxlbmFtZV9sb29rdXApOw0KPiANCj4gID4gPg0KPiANCj4gID4gPiBObyBuZWVkIHRv IGV4cG9ydCBzeW1ib2xzLiBicGYgdXNlcyBpdCBhbmQgYnBmIGlzIGluIHRoZSBjb3JlLCBub3Qg aW4NCj4gDQo+ICA+ID4gbW9kdWxlcy4NCj4gDQo+ICA+ID4NCj4gDQo+ICA+ID4gPg0KPiANCj4g ID4gPiA+wqDCoCAvKiBSZXR1cm5zIDAgYW5kIG5kIHdpbGwgYmUgdmFsaWQgb24gc3VjY2Vzczsg UmV0dW5zIGVycm9yLCANCj4gb3RoZXJ3aXNlLiAqLw0KPiANCj4gID4gPiA+wqDCoCBzdGF0aWMg aW50IHBhdGhfcGFyZW50YXQoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHVuc2lnbmVkIGZsYWdzLA0K PiANCj4gID4gPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZi5oIGIvaW5jbHVkZS9s aW51eC9icGYuaA0KPiANCj4gID4gPiA+IGluZGV4IGY5YTUwNjE0N2M4YS4uZTRhZGY1ZTA1YWZk IDEwMDY0NA0KPiANCj4gID4gPiA+IC0tLSBhL2luY2x1ZGUvbGludXgvYnBmLmgNCj4gDQo+ICA+ ID4gPiArKysgYi9pbmNsdWRlL2xpbnV4L2JwZi5oDQo+IA0KPiAgPiA+ID4gQEAgLTEwNTAsNiAr MTA1MCw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gDQo+IGJwZl9nZXRf bG9jYWxfc3RvcmFnZV9wcm90bzsNCj4gDQo+ICA+ID4gPsKgwqAgZXh0ZXJuIGNvbnN0IHN0cnVj dCBicGZfZnVuY19wcm90byBicGZfc3RydG9sX3Byb3RvOw0KPiANCj4gID4gPiA+wqDCoCBleHRl cm4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zdHJ0b3VsX3Byb3RvOw0KPiANCj4g ID4gPiA+wqDCoCBleHRlcm4gY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y3Bfc29j a19wcm90bzsNCj4gDQo+ICA+ID4gPiArZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90 byBicGZfZ2V0X2N1cnJlbnRfcGlkbnNfaW5mb19wcm90bzsNCj4gDQo+ICA+ID4gPg0KPiANCj4g ID4gPiA+wqDCoCAvKiBTaGFyZWQgaGVscGVycyBhbW9uZyBjQlBGIGFuZCBlQlBGLiAqLw0KPiAN Cj4gID4gPiA+wqDCoCB2b2lkIGJwZl91c2VyX3JuZF9pbml0X29uY2Uodm9pZCk7DQo+IA0KPiAg PiA+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmFtZWkuaCBiL2luY2x1ZGUvbGludXgv bmFtZWkuaA0KPiANCj4gID4gPiA+IGluZGV4IDkxMzhiNDQ3MWRiZi4uMmMyNGU4YzcxZDQ2IDEw MDY0NA0KPiANCj4gID4gPiA+IC0tLSBhL2luY2x1ZGUvbGludXgvbmFtZWkuaA0KPiANCj4gID4g PiA+ICsrKyBiL2luY2x1ZGUvbGludXgvbmFtZWkuaA0KPiANCj4gID4gPiA+IEBAIC02LDYgKzYs NyBAQA0KPiANCj4gID4gPiA+wqDCoCAjaW5jbHVkZSA8bGludXgvcGF0aC5oPg0KPiANCj4gID4g PiA+wqDCoCAjaW5jbHVkZSA8bGludXgvZmNudGwuaD4NCj4gDQo+ICA+ID4gPsKgwqAgI2luY2x1 ZGUgPGxpbnV4L2Vycm5vLmg+DQo+IA0KPiAgPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9mcy5oPg0K PiANCj4gID4gPiA+DQo+IA0KPiAgPiA+ID7CoMKgIGVudW0geyBNQVhfTkVTVEVEX0xJTktTID0g OCB9Ow0KPiANCj4gID4gPiA+DQo+IA0KPiAgPiA+ID4gQEAgLTk3LDYgKzk4LDkgQEAgZXh0ZXJu IHZvaWQgdW5sb2NrX3JlbmFtZShzdHJ1Y3QgZGVudHJ5ICosIA0KPiBzdHJ1Y3QgZGVudHJ5ICop Ow0KPiANCj4gID4gPiA+DQo+IA0KPiAgPiA+ID7CoMKgIGV4dGVybiB2b2lkIG5kX2p1bXBfbGlu ayhzdHJ1Y3QgcGF0aCAqcGF0aCk7DQo+IA0KPiAgPiA+ID4NCj4gDQo+ICA+ID4gPiArZXh0ZXJu IGludCBmaWxlbmFtZV9sb29rdXAoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCANCj4g dW5zaWduZWQgaW50IGZsYWdzLA0KPiANCj4gID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgcGF0aCAqcm9vdCk7DQo+IA0KPiAgPiA+ DQo+IA0KPiAgPiA+IFRoZSBwcmV2aW91cyBkZWZpbml0aW9uIGluIGZzL2ludGVybmFsLmggc2hv dWxkIGJlIHJlbW92ZWQuDQo+IA0KPiAgPiA+DQo+IA0KPiAgPiA+ID4gKw0KPiANCj4gID4gPiA+ wqDCoCBzdGF0aWMgaW5saW5lIHZvaWQgbmRfdGVybWluYXRlX2xpbmsodm9pZCAqbmFtZSwgc2l6 ZV90IGxlbiwgDQo+IHNpemVfdCBtYXhsZW4pDQo+IA0KPiAgPiA+ID7CoMKgIHsNCj4gDQo+ICA+ ID4gPsKgwqDCoMKgICgoY2hhciAqKSBuYW1lKVttaW4obGVuLCBtYXhsZW4pXSA9ICdcMCc7DQo+ IA0KPiAgPiA+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaCBiL2luY2x1 ZGUvdWFwaS9saW51eC9icGYuaA0KPiANCj4gID4gPiA+IGluZGV4IDQzOTNiZDRiMjQxOS4uNmY2 MDFmNzEwNmUyIDEwMDY0NA0KPiANCj4gID4gPiA+IC0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9i cGYuaA0KPiANCj4gID4gPiA+ICsrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaA0KPiANCj4g ID4gPiA+IEBAIC0yNzQxLDYgKzI3NDEsMjYgQEAgdW5pb24gYnBmX2F0dHIgew0KPiANCj4gID4g PiA+wqDCoMKgICrCoMKgwqDCoMKgwqDCoMKgIMKgwqDCoMKgwqDCoMKgKiotRU9QTk9UU1VQUCoq IGtlcm5lbCBjb25maWd1cmF0aW9uIGRvZXMgbm90IA0KPiBlbmFibGUgU1lOIGNvb2tpZXMNCj4g DQo+ICA+ID4gPsKgwqDCoCAqDQo+IA0KPiAgPiA+ID7CoMKgwqAgKsKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAqKi1FUFJPVE9OT1NVUFBPUlQqKiBJUCBwYWNrZXQgdmVyc2lvbiBpcyBu b3QgDQo+IDQgb3IgNg0KPiANCj4gID4gPiA+ICsgKg0KPiANCj4gID4gPiA+ICsgKiBpbnQgYnBm X2dldF9jdXJyZW50X3BpZG5zX2luZm8oc3RydWN0IGJwZl9waWRuc19pbmZvICpwaWRucywgDQo+ IHUzMiBzaXplX29mX3BpZG5zKQ0KPiANCj4gID4gPiA+ICsgKiBEZXNjcmlwdGlvbg0KPiANCj4g ID4gPiA+ICsgKsKgwqDCoMKgwqDCoMKgwqAgQ29waWVzIGludG8gKnBpZG5zKiBwaWQsIG5hbWVz cGFjZSBpZCBhbmQgdGdpZCBhcyANCj4gc2VlbiBieSB0aGUNCj4gDQo+ICA+ID4gPiArICrCoMKg wqDCoMKgwqDCoMKgIGN1cnJlbnQgbmFtZXNwYWNlIGFuZCBhbHNvIGRldmljZSBmcm9tIC9wcm9j L3NlbGYvbnMvcGlkLg0KPiANCj4gID4gPiA+ICsgKsKgwqDCoMKgwqDCoMKgwqAgKnNpemVfb2Zf cGlkbnMqIG11c3QgYmUgdGhlIHNpemUgb2YgKnBpZG5zKg0KPiANCj4gID4gPiA+ICsgKg0KPiAN Cj4gID4gPiA+ICsgKsKgwqDCoMKgwqDCoMKgwqAgVGhpcyBoZWxwZXIgaXMgdXNlZCB3aGVuIHBp ZCBmaWx0ZXJpbmcgaXMgbmVlZGVkIGluc2lkZSBhDQo+IA0KPiAgPiA+ID4gKyAqwqDCoMKgwqDC oMKgwqDCoCBjb250YWluZXIgYXMgYnBmX2dldF9jdXJyZW50X3RnaWQoKSBoZWxwZXIgcmV0dXJu cyANCj4gYWx3YXlzIHRoZQ0KPiANCj4gID4gPiA+ICsgKsKgwqDCoMKgwqDCoMKgwqAgcGlkIGlk IGFzIHNlZW4gYnkgdGhlIHJvb3QgbmFtZXNwYWNlLg0KPiANCj4gID4gPiA+ICsgKiBSZXR1cm4N Cj4gDQo+ICA+ID4gPiArICrCoMKgwqDCoMKgwqDCoMKgIDAgb24gc3VjY2Vzcw0KPiANCj4gID4g PiA+ICsgKg0KPiANCj4gID4gPiA+ICsgKsKgwqDCoMKgwqDCoMKgwqAgKiotRUlOVkFMKirCoCBp ZiB1bmFibGUgdG8gZ2V0IG5zLCBwaWQgb3IgdGdpZCBvZiANCj4gY3VycmVudCB0YXNrLg0KPiAN Cj4gID4gPiA+ICsgKsKgwqDCoMKgwqDCoMKgwqAgT3IgaWYgc2l6ZV9vZl9waWRucyBpcyBub3Qg dmFsaWQuDQo+IA0KPiAgPiA+DQo+IA0KPiAgPiA+IE1heWJlIHJld29yZCBieSBmb2xsb3dpbmcg dGhlIGNvZGUgc2VxdWVuY2UuDQo+IA0KPiAgPiA+wqDCoMKgwqAgaWYgKnNpemVfb2ZfcGlkbnMq IGlzIG5vdCB2YWxpZCBvciB1bmFibGUgdG8gZ2V0IG5zLCBwaWQgb3IgdGdpZCBvZg0KPiANCj4g ID4gPsKgwqDCoMKgIHRoZSBjdXJyZW50IHRhc2suDQo+IA0KPiAgPiA+DQo+IA0KPiAgPiA+ID4g KyAqDQo+IA0KPiAgPiA+ID4gKyAqwqDCoMKgwqDCoMKgwqDCoCAqKi1FTk9NRU0qKsKgIGlmIGFs bG9jYXRpb24gZmFpbHMuDQo+IA0KPiAgPiA+DQo+IA0KPiAgPiA+IE1heWJlIHNvbWUgb3RoZXIg ZXJyb3IgY29kZXMgaW4gZmlsZW5hbWVfbG9va3VwKCkgZnVuY3Rpb24/DQo+IA0KPiAgPiA+DQo+ IA0KPiAgPiA+ID4gKyAqDQo+IA0KPiAgPiA+ID4gKyAqwqDCoMKgwqDCoMKgwqDCoCBJZiB1bmFi bGUgdG8gZ2V0IHRoZSBpbm9kZSBmcm9tIC9wcm9jL3NlbGYvbnMvcGlkIGFuIA0KPiBlcnJvciBj b2RlDQo+IA0KPiAgPiA+ID4gKyAqwqDCoMKgwqDCoMKgwqDCoCB3aWxsIGJlIHJldHVybmVkLg0K PiANCj4gID4gPg0KPiANCj4gID4gPiBZb3UgZG8gbm90IG5lZWQgdGhpcy4gVGhlIGRlc2NyaXB0 aW9uIG9mIGVycm9yIGNvZGUgY2FzZXMgc2hvdWxkIA0KPiBjb3ZlciB0aGlzLg0KPiANCj4gID4g Pg0KPiANCj4gID4gPiA+wqDCoMKgICovDQo+IA0KPiAgPiA+ID7CoMKgICNkZWZpbmUgX19CUEZf RlVOQ19NQVBQRVIoRk4pwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFwNCj4gDQo+ICA+ID4gPsKg wqDCoMKgIEZOKHVuc3BlYykswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBcDQo+IA0KPiAgPiA+ID4gQEAgLTI4NTMsNyArMjg3Myw4IEBAIHVuaW9uIGJwZl9hdHRyIHsN Cj4gDQo+ICA+ID4gPsKgwqDCoMKgIEZOKHNrX3N0b3JhZ2VfZ2V0KSzCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgXA0KPiANCj4gID4gPiA+wqDCoMKgwqAgRk4oc2tfc3RvcmFnZV9kZWxldGUpLMKg wqDCoMKgwqDCoMKgwqDCoCBcDQo+IA0KPiAgPiA+ID7CoMKgwqDCoCBGTihzZW5kX3NpZ25hbCks wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFwNCj4gDQo+ICA+ID4gPiAtwqDCoCBGTih0 Y3BfZ2VuX3N5bmNvb2tpZSksDQo+IA0KPiAgPiA+ID4gK8KgwqAgRk4odGNwX2dlbl9zeW5jb29r aWUpLMKgwqDCoMKgwqDCoMKgwqDCoCBcDQo+IA0KPiAgPiA+ID4gK8KgwqAgRk4oZ2V0X2N1cnJl bnRfcGlkbnNfaW5mbyksDQo+IA0KPiAgPiA+ID4NCj4gDQo+ICA+ID4gPsKgwqAgLyogaW50ZWdl ciB2YWx1ZSBpbiAnaW1tJyBmaWVsZCBvZiBCUEZfQ0FMTCBpbnN0cnVjdGlvbiBzZWxlY3RzIA0K PiB3aGljaCBoZWxwZXINCj4gDQo+ICA+ID4gPsKgwqDCoCAqIGZ1bmN0aW9uIGVCUEYgcHJvZ3Jh bSBpbnRlbmRzIHRvIGNhbGwNCj4gDQo+ICA+ID4gPiBAQCAtMzYwNCw0ICszNjI1LDEwIEBAIHN0 cnVjdCBicGZfc29ja29wdCB7DQo+IA0KPiAgPiA+ID7CoMKgwqDCoCBfX3MzMsKgwqAgcmV0dmFs Ow0KPiANCj4gID4gPiA+wqDCoCB9Ow0KPiANCj4gID4gPiA+DQo+IA0KPiAgPiA+ID4gK3N0cnVj dCBicGZfcGlkbnNfaW5mbyB7DQo+IA0KPiAgPiA+ID4gK8KgwqAgX191MzIgZGV2Ow0KPiANCj4g ID4gPiA+ICvCoMKgIF9fdTMyIG5zaWQ7DQo+IA0KPiAgPiA+ID4gK8KgwqAgX191MzIgdGdpZDsN Cj4gDQo+ICA+ID4gPiArwqDCoCBfX3UzMiBwaWQ7DQo+IA0KPiAgPiA+ID4gK307DQo+IA0KPiAg PiA+ID7CoMKgICNlbmRpZiAvKiBfVUFQSV9fTElOVVhfQlBGX0hfXyAqLw0KPiANCj4gID4gPiA+ IGRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2NvcmUuYyBiL2tlcm5lbC9icGYvY29yZS5jDQo+IA0K PiAgPiA+ID4gaW5kZXggODE5MWE3ZGIyNzc3Li4zMTU5ZjJhMDE4OGMgMTAwNjQ0DQo+IA0KPiAg PiA+ID4gLS0tIGEva2VybmVsL2JwZi9jb3JlLmMNCj4gDQo+ICA+ID4gPiArKysgYi9rZXJuZWwv YnBmL2NvcmUuYw0KPiANCj4gID4gPiA+IEBAIC0yMDM4LDYgKzIwMzgsNyBAQCBjb25zdCBzdHJ1 Y3QgYnBmX2Z1bmNfcHJvdG8gDQo+IGJwZl9nZXRfY3VycmVudF91aWRfZ2lkX3Byb3RvIF9fd2Vh azsNCj4gDQo+ICA+ID4gPsKgwqAgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRf Y3VycmVudF9jb21tX3Byb3RvIF9fd2VhazsNCj4gDQo+ICA+ID4gPsKgwqAgY29uc3Qgc3RydWN0 IGJwZl9mdW5jX3Byb3RvIGJwZl9nZXRfY3VycmVudF9jZ3JvdXBfaWRfcHJvdG8gX193ZWFrOw0K PiANCj4gID4gPiA+wqDCoCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2dldF9sb2Nh bF9zdG9yYWdlX3Byb3RvIF9fd2VhazsNCj4gDQo+ICA+ID4gPiArY29uc3Qgc3RydWN0IGJwZl9m dW5jX3Byb3RvIGJwZl9nZXRfY3VycmVudF9waWRuc19pbmZvIF9fd2VhazsNCj4gDQo+ICA+ID4g Pg0KPiANCj4gID4gPiA+wqDCoCBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKiBfX3dlYWsg DQo+IGJwZl9nZXRfdHJhY2VfcHJpbnRrX3Byb3RvKHZvaWQpDQo+IA0KPiAgPiA+ID7CoMKgIHsN Cj4gDQo+ICA+ID4gPiBkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oZWxwZXJzLmMgYi9rZXJuZWwv YnBmL2hlbHBlcnMuYw0KPiANCj4gID4gPiA+IGluZGV4IDVlMjg3MTg5MjhjYS4uNTcxZjI0MDc3 ZGIyIDEwMDY0NA0KPiANCj4gID4gPiA+IC0tLSBhL2tlcm5lbC9icGYvaGVscGVycy5jDQo+IA0K PiAgPiA+ID4gKysrIGIva2VybmVsL2JwZi9oZWxwZXJzLmMNCj4gDQo+ICA+ID4gPiBAQCAtMTEs NiArMTEsMTIgQEANCj4gDQo+ICA+ID4gPsKgwqAgI2luY2x1ZGUgPGxpbnV4L3VpZGdpZC5oPg0K PiANCj4gID4gPiA+wqDCoCAjaW5jbHVkZSA8bGludXgvZmlsdGVyLmg+DQo+IA0KPiAgPiA+ID7C oMKgICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPg0KPiANCj4gID4gPiA+ICsjaW5jbHVkZSA8bGlu dXgvcGlkX25hbWVzcGFjZS5oPg0KPiANCj4gID4gPiA+ICsjaW5jbHVkZSA8bGludXgvbWFqb3Iu aD4NCj4gDQo+ICA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4NCj4gDQo+ICA+ID4gPiAr I2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+DQo+IA0KPiAgPiA+ID4gKyNpbmNsdWRlIDxsaW51eC92 ZXJzaW9uLmg+DQo+IA0KPiAgPiA+ID4gKw0KPiANCj4gID4gPiA+DQo+IA0KPiAgPiA+ID7CoMKg ICNpbmNsdWRlICIuLi8uLi9saWIva3N0cnRveC5oIg0KPiANCj4gID4gPiA+DQo+IA0KPiAgPiA+ ID4gQEAgLTMxMiw2ICszMTgsNzggQEAgdm9pZCBjb3B5X21hcF92YWx1ZV9sb2NrZWQoc3RydWN0 IGJwZl9tYXAgDQo+ICptYXAsIHZvaWQgKmRzdCwgdm9pZCAqc3JjLA0KPiANCj4gID4gPiA+wqDC oMKgwqAgcHJlZW1wdF9lbmFibGUoKTsNCj4gDQo+ICA+ID4gPsKgwqAgfQ0KPiANCj4gID4gPiA+ DQo+IA0KPiAgPiA+ID4gK0JQRl9DQUxMXzIoYnBmX2dldF9jdXJyZW50X3BpZG5zX2luZm8sIHN0 cnVjdCBicGZfcGlkbnNfaW5mbyAqLCANCj4gcGlkbnNfaW5mbywgdTMyLA0KPiANCj4gID4gPiA+ ICvCoMKgwqAgc2l6ZSkNCj4gDQo+ICA+ID4gPiArew0KPiANCj4gID4gPiA+ICvCoMKgIGNvbnN0 IGNoYXIgKm5hbWUgPSAiL3Byb2Mvc2VsZi9ucy9waWQiOw0KPiANCj4gID4gPg0KPiANCj4gID4g PiBtYXliZSByZW5hbWUgdGhpcyB2YXJpYWJsZSB0byBwaWRuc19wYXRoPw0KPiANCj4gID4gPg0K PiANCj4gID4gPiA+ICvCoMKgIHN0cnVjdCBwaWRfbmFtZXNwYWNlICpwaWRucyA9IE5VTEw7DQo+ IA0KPiAgPiA+ID4gK8KgwqAgc3RydWN0IGZpbGVuYW1lICp0bXAgPSBOVUxMOw0KPiANCj4gID4g Pg0KPiANCj4gID4gPiBNYXliZSByZW5hbWUgdGhpcyB2YXJpYWJsZSB0byBuYW1lPw0KPiANCj4g ID4gPg0KPiANCj4gID4gPiA+ICvCoMKgIGludCBsZW4gPSBzdHJsZW4obmFtZSkgKyAxOw0KPiAN Cj4gID4gPg0KPiANCj4gID4gPiBXZSBjYW4gZGVsYXkgdGhpcyBhc3NpZ25tZW50IGxhdGVyIHVu dGlsIGl0IGlzIG5lZWRlZC4NCj4gDQo+ICA+ID4NCj4gDQo+ICA+ID4gPiArwqDCoCBzdHJ1Y3Qg aW5vZGUgKmlub2RlOw0KPiANCj4gID4gPiA+ICvCoMKgIHN0cnVjdCBwYXRoIGtwOw0KPiANCj4g ID4gPiA+ICvCoMKgIHBpZF90IHRnaWQgPSAwOw0KPiANCj4gID4gPiA+ICvCoMKgIHBpZF90IHBp ZCA9IDA7DQo+IA0KPiAgPiA+ID4gK8KgwqAgaW50IHJldDsNCj4gDQo+ICA+ID4gPiArDQo+IA0K PiAgPiA+ID4gK8KgwqAgaWYgKHVubGlrZWx5KHNpemUgIT0gc2l6ZW9mKHN0cnVjdCBicGZfcGlk bnNfaW5mbykpKQ0KPiANCj4gID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJ TlZBTDsNCj4gDQo+ICA+ID4gPiArDQo+IA0KPiAgPiA+ID4gK8KgwqAgcGlkbnMgPSB0YXNrX2Fj dGl2ZV9waWRfbnMoY3VycmVudCk7DQo+IA0KPiAgPiA+ID4gKw0KPiANCj4gID4gPg0KPiANCj4g ID4gPiB3ZSBjYW4gc2F2ZSBhbiBlbXB0eSBsaW5lIGhlcmUuDQo+IA0KPiAgPiA+DQo+IA0KPiAg PiA+ID4gK8KgwqAgaWYgKHVubGlrZWx5KCFwaWRucykpDQo+IA0KPiAgPiA+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgIGdvdG8gY2xlYXI7DQo+IA0KPiAgPiA+ID4gKw0KPiANCj4gID4gPiA+ICvC oMKgIHBpZG5zX2luZm8tPm5zaWQgPcKgIHBpZG5zLT5ucy5pbnVtOw0KPiANCj4gID4gPiA+ICvC oMKgIHBpZCA9IHRhc2tfcGlkX25yX25zKGN1cnJlbnQsIHBpZG5zKTsNCj4gDQo+ICA+ID4gPiAr DQo+IA0KPiAgPiA+DQo+IA0KPiAgPiA+IFdlIGNhbiBzYXZlIGFuIGVtcHR5IGxpbmUgaGVyZS4N Cj4gDQo+ICA+ID4NCj4gDQo+ICA+ID4gPiArwqDCoCBpZiAodW5saWtlbHkoIXBpZCkpDQo+IA0K PiAgPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gY2xlYXI7DQo+IA0KPiAgPiA+ID4g Kw0KPiANCj4gID4gPiA+ICvCoMKgIHRnaWQgPSB0YXNrX3RnaWRfbnJfbnMoY3VycmVudCwgcGlk bnMpOw0KPiANCj4gID4gPiA+ICsNCj4gDQo+ICA+ID4gZGl0dG8uIHNhdmUgYW4gZW1wdHkgbGlu ZS4NCj4gDQo+ICA+ID4gPiArwqDCoCBpZiAodW5saWtlbHkoIXRnaWQpKQ0KPiANCj4gID4gPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGNsZWFyOw0KPiANCj4gID4gPiA+ICsNCj4gDQo+ ICA+ID4gPiArwqDCoCBwaWRuc19pbmZvLT50Z2lkID0gKHUzMikgdGdpZDsNCj4gDQo+ICA+ID4g PiArwqDCoCBwaWRuc19pbmZvLT5waWQgPSAodTMyKSBwaWQ7DQo+IA0KPiAgPiA+ID4gKw0KPiAN Cj4gID4gPiA+ICvCoMKgIHRtcCA9IGttZW1fY2FjaGVfYWxsb2MobmFtZXNfY2FjaGVwLCBHRlBf QVRPTUlDKTsNCj4gDQo+ICA+ID4gPiArwqDCoCBpZiAodW5saWtlbHkoIXRtcCkpIHsNCj4gDQo+ ICA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgbWVtc2V0KCh2b2lkICopcGlkbnNfaW5mbywg MCwgKHNpemVfdCkgc2l6ZSk7DQo+IA0KPiAgPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIHJl dHVybiAtRU5PTUVNOw0KPiANCj4gID4gPiA+ICvCoMKgIH0NCj4gDQo+ICA+ID4gPiArDQo+IA0K PiAgPiA+ID4gK8KgwqAgbWVtY3B5KChjaGFyICopdG1wLT5uYW1lLCBuYW1lLCBsZW4pOw0KPiAN Cj4gID4gPiA+ICvCoMKgIHRtcC0+dXB0ciA9IE5VTEw7DQo+IA0KPiAgPiA+ID4gK8KgwqAgdG1w LT5hbmFtZSA9IE5VTEw7DQo+IA0KPiAgPiA+ID4gK8KgwqAgdG1wLT5yZWZjbnQgPSAxOw0KPiAN Cj4gID4gPiA+ICsNCj4gDQo+ICA+ID4gZGl0dG8uIHNhdmUgYW4gZW1wdHkgbGluZS4NCj4gDQo+ ICA+ID4gPiArwqDCoCByZXQgPSBmaWxlbmFtZV9sb29rdXAoQVRfRkRDV0QsIHRtcCwgMCwgJmtw LCBOVUxMKTsNCj4gDQo+ICA+ID4gPiArDQo+IA0KPiAgPiA+IGRpdHRvLiBzYXZlIGFuIGVtcHR5 IGxpbmUuDQo+IA0KPiAgPiA+ID4gK8KgwqAgaWYgKHJldCkgew0KPiANCj4gID4gPiA+ICvCoCDC oMKgwqDCoMKgwqDCoMKgwqBtZW1zZXQoKHZvaWQgKilwaWRuc19pbmZvLCAwLCAoc2l6ZV90KSBz aXplKTsNCj4gDQo+ICA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsNCj4g DQo+ICA+ID4gPiArwqDCoCB9DQo+IA0KPiAgPiA+ID4gKw0KPiANCj4gID4gPiA+ICvCoMKgIGlu b2RlID0gZF9iYWNraW5nX2lub2RlKGtwLmRlbnRyeSk7DQo+IA0KPiAgPiA+ID4gK8KgwqAgcGlk bnNfaW5mby0+ZGV2ID0gaW5vZGUtPmlfc2ItPnNfZGV2Ow0KPiANCj4gID4gPiA+ICsNCj4gDQo+ ICA+ID4gPiArwqDCoCByZXR1cm4gMDsNCj4gDQo+ICA+ID4gPiArDQo+IA0KPiAgPiA+ID4gK2Ns ZWFyOg0KPiANCj4gID4gPiA+ICvCoMKgIG1lbXNldCgodm9pZCAqKXBpZG5zX2luZm8sIDAsIChz aXplX3QpIHNpemUpOw0KPiANCj4gID4gPiA+ICsNCj4gDQo+ICA+ID4gc2F2ZSBhbiBlbXB0eSBs aW5lLg0KPiANCj4gID4gPiA+ICvCoMKgIHJldHVybiAtRUlOVkFMOw0KPiANCj4gID4gPiA+ICt9 DQo+IA0KPiAgPiA+ID4gKw0KPiANCj4gID4gPiA+ICtjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJv dG8gYnBmX2dldF9jdXJyZW50X3BpZG5zX2luZm9fcHJvdG8gPSB7DQo+IA0KPiAgPiA+ID4gK8Kg wqAgLmZ1bmPCoMKgID0gYnBmX2dldF9jdXJyZW50X3BpZG5zX2luZm8sDQo+IA0KPiAgPiA+IG1h a2UgdGhlICI9ICIgYWxpZ25lZCB3aXRoIG90aGVycz8NCj4gDQo+ICA+ID4gPiArwqDCoCAuZ3Bs X29ubHnCoMKgwqDCoMKgwqAgPSBmYWxzZSwNCj4gDQo+ICA+ID4gPiArwqDCoCAucmV0X3R5cGXC oMKgwqDCoMKgwqAgPSBSRVRfSU5URUdFUiwNCj4gDQo+ICA+ID4gPiArwqDCoCAuYXJnMV90eXBl wqDCoMKgwqDCoCA9IEFSR19QVFJfVE9fVU5JTklUX01FTSwNCj4gDQo+ICA+ID4gPiArwqDCoCAu YXJnMl90eXBlwqDCoMKgwqDCoCA9IEFSR19DT05TVF9TSVpFLA0KPiANCj4gID4gPiA+ICt9Ow0K PiANCj4gID4gPiA+ICsNCj4gDQo+ICA+ID4gPsKgwqAgI2lmZGVmIENPTkZJR19DR1JPVVBTDQo+ IA0KPiAgPiA+ID7CoMKgIEJQRl9DQUxMXzAoYnBmX2dldF9jdXJyZW50X2Nncm91cF9pZCkNCj4g DQo+ICA+ID4gPsKgwqAgew0KPiANCj4gID4gPiA+IGRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2Uv YnBmX3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMNCj4gDQo+ICA+ID4gPiBpbmRl eCBjYTEyNTVkMTQ1NzYuLjVlMWRjMjI3NjVhNSAxMDA2NDQNCj4gDQo+ICA+ID4gPiAtLS0gYS9r ZXJuZWwvdHJhY2UvYnBmX3RyYWNlLmMNCj4gDQo+ICA+ID4gPiArKysgYi9rZXJuZWwvdHJhY2Uv YnBmX3RyYWNlLmMNCj4gDQo+ICA+ID4gPiBAQCAtNzA5LDYgKzcwOSw4IEBAIHRyYWNpbmdfZnVu Y19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIA0KPiBjb25zdCBzdHJ1Y3QgYnBmX3By b2cgKnByb2cpDQo+IA0KPiAgPiA+ID7CoMKgICNlbmRpZg0KPiANCj4gID4gPiA+wqDCoMKgwqAg Y2FzZSBCUEZfRlVOQ19zZW5kX3NpZ25hbDoNCj4gDQo+ICA+ID4gPsKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCByZXR1cm4gJmJwZl9zZW5kX3NpZ25hbF9wcm90bzsNCj4gDQo+ICA+ID4gPiArwqDC oCBjYXNlIEJQRl9GVU5DX2dldF9jdXJyZW50X3BpZG5zX2luZm86DQo+IA0KPiAgPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAmYnBmX2dldF9jdXJyZW50X3BpZG5zX2luZm9fcHJv dG87DQo+IA0KPiAgPiA+ID7CoMKgwqDCoCBkZWZhdWx0Og0KPiANCj4gID4gPiA+wqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHJldHVybiBOVUxMOw0KPiANCj4gID4gPiA+wqDCoMKgwqAgfQ0KPiAN Cj4gID4gPiA+IGRpZmYgLS1naXQgYS9zYW1wbGVzL2JwZi9NYWtlZmlsZSBiL3NhbXBsZXMvYnBm L01ha2VmaWxlDQo+IA0KPiAgPiA+ID4gaW5kZXggMWQ5YmUyNmI0ZWRkLi4yMzg0NTNmZjI3ZDIg MTAwNjQ0DQo+IA0KPiAgPiA+ID4gLS0tIGEvc2FtcGxlcy9icGYvTWFrZWZpbGUNCj4gDQo+ICA+ ID4gPiArKysgYi9zYW1wbGVzL2JwZi9NYWtlZmlsZQ0KPiANCj4gID4gPiA+IEBAIC01Myw2ICs1 Myw3IEBAIGhvc3Rwcm9ncy15ICs9IHRhc2tfZmRfcXVlcnkNCj4gDQo+ICA+ID4gPsKgwqAgaG9z dHByb2dzLXkgKz0geGRwX3NhbXBsZV9wa3RzDQo+IA0KPiAgPiA+ID7CoMKgIGhvc3Rwcm9ncy15 ICs9IGlidW1hZA0KPiANCj4gID4gPiA+wqDCoCBob3N0cHJvZ3MteSArPSBoYm0NCj4gDQo+ICA+ ID4gPiAraG9zdHByb2dzLXkgKz0gdHJhY2VfbnNfaW5mbw0KPiANCj4gID4gPiBbLi4uXQ0KPiAN Cg==