From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM03-DM3-obe.outbound.protection.outlook.com (mail-dm3nam03on0044.outbound.protection.outlook.com [104.47.41.44]) by dpdk.org (Postfix) with ESMTP id 372D1374F for ; Tue, 2 May 2017 13:20:40 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=HKFCaEk0lEzbQweB+pJlhMzDN0sodYcsN96bLco+HF0=; b=j7ZBQY2Jk8S8YnGinMggtV+3hb8dBhWZoowsm7B50xY+Ey+JVSkJ63qT6kGAOgT1qs2YaraPgOPLp+Qtl5a8EPZbjokv1V2DTUENucz87zDSD94/stLJnF6UWz63W/YiaEt1VahSLMDXZ4yMQAqokyQKm9EUjlqr1K8ZxUgFRIc= Received: from BY2PR07MB2421.namprd07.prod.outlook.com (10.166.115.13) by CY1PR0701MB1726.namprd07.prod.outlook.com (10.163.21.140) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1061.12; Tue, 2 May 2017 11:20:37 +0000 Received: from BY2PR07MB2421.namprd07.prod.outlook.com ([10.166.115.13]) by BY2PR07MB2421.namprd07.prod.outlook.com ([10.166.115.13]) with mapi id 15.01.1061.021; Tue, 2 May 2017 11:20:36 +0000 From: "Sekhar, Ashwin" To: "tomasz.kantecki@intel.com" , "Jacob, Jerin" , "jianbo.liu@linaro.org" , "dev@dpdk.org" Thread-Topic: [dpdk-dev] [PATCH 5/5] examples/l3fwd: add neon support for l3fwd Thread-Index: AQHSwxPnlhzLheq8a0ug8EcIZ8+t0qHg5hSA Date: Tue, 2 May 2017 11:20:35 +0000 Message-ID: <1493724035.3602.14.camel@caviumnetworks.com> References: <1493709255-8887-1-git-send-email-jianbo.liu@linaro.org> <1493709255-8887-5-git-send-email-jianbo.liu@linaro.org> In-Reply-To: <1493709255-8887-5-git-send-email-jianbo.liu@linaro.org> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=cavium.com; x-originating-ip: [111.93.218.67] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; CY1PR0701MB1726; 7:uqkW5HX1K0ScDuw1swKyfZ2JgIiN6RT7PVxbxAySvxwKpmmtB+mYCxvPAQicyj2nkajnDxwQIchqO1tfiz5xln+E+nViYmO9OaBswsRz5532rehFVy8EZ0YdxEetmYkkIgwGNcWndT3lYSG3Zv4DdRmw/treT++8sQWq6j4v6wFFvs0oJzy2PoO4iaVGP84sXwb8sTZr/RytRh/hX2VQu5MJNijLjV1U8IWTEykHT6W63GdOHXfenRXc6wVYqMJzIXKKmHAf72ZSLT7BT01EJvhRABx+USz2SNpq/Xmv1B5ySQFUhrj/y/HRQQ+6z2IOPfj0gW5JjC9JsZhb2Bktlg== x-forefront-antispam-report: SFV:SKI; SCL:-1SFV:NSPM; SFS:(10009020)(6009001)(39450400003)(39410400002)(39400400002)(39850400002)(39840400002)(24454002)(377424004)(53946003)(7736002)(2906002)(99286003)(77096006)(103116003)(6506006)(66066001)(305945005)(6512007)(9686003)(3660700001)(3280700002)(8676002)(81166006)(189998001)(53936002)(33646002)(478600001)(76176999)(102836003)(50986999)(6436002)(6246003)(3846002)(6486002)(38730400002)(6116002)(54356999)(229853002)(36756003)(25786009)(575784001)(86362001)(8936002)(2950100002)(2201001)(5660300001)(122556002)(32563001)(579004)(473944003); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR0701MB1726; H:BY2PR07MB2421.namprd07.prod.outlook.com; FPR:; SPF:None; MLV:sfv; LANG:en; x-ms-office365-filtering-correlation-id: b4e1c43f-41f4-4c30-9202-08d4914d4158 x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(2017030254075)(201703131423075)(201703031133081); SRVR:CY1PR0701MB1726; x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040450)(601004)(2401047)(8121501046)(5005006)(93006095)(93001095)(10201501046)(3002001)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123560025)(20161123555025)(20161123564025)(20161123562025)(6072148); SRVR:CY1PR0701MB1726; BCL:0; PCL:0; RULEID:; SRVR:CY1PR0701MB1726; x-forefront-prvs: 02951C14DC spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="utf-8" Content-ID: <1A628205B1AE2A418E3DF3207C4246B6@namprd07.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-originalarrivaltime: 02 May 2017 11:20:35.9040 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR0701MB1726 Subject: Re: [dpdk-dev] [PATCH 5/5] examples/l3fwd: add neon support for l3fwd X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 May 2017 11:20:40 -0000 SGksDQoNClBsZWFzZSBmaW5kIGNvbW1lbnRzIGlubGluZS4NCg0KT24gVHVlLCAyMDE3LTA1LTAy IGF0IDE1OjE0ICswODAwLCBKaWFuYm8gTGl1IHdyb3RlOg0KPiBVc2UgQVJNIE5FT04gaW50cmlu c2ljcyB0byBhY2NlbGVyYXRlIGwzIGZvd2FyZGluZy4NCj4gDQo+IFNpZ25lZC1vZmYtYnk6IEpp YW5ibyBMaXUgPGppYW5iby5saXVAbGluYXJvLm9yZz4NCj4gLS0tDQo+IMKgZXhhbXBsZXMvbDNm d2QvbDNmd2QuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqDCoDQgLQ0KPiDCoGV4YW1w bGVzL2wzZndkL2wzZndkX2VtLmPCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgwqA0ICstDQo+IMKg ZXhhbXBsZXMvbDNmd2QvbDNmd2RfZW1faGxtLmjCoMKgwqDCoMKgwqB8wqDCoMKgNSArDQo+IMKg ZXhhbXBsZXMvbDNmd2QvbDNmd2RfZW1faGxtX25lb24uaCB8wqDCoDc0ICsrKysrKysrKysrDQo+ IMKgZXhhbXBsZXMvbDNmd2QvbDNmd2RfZW1fc2luZ2xlLmjCoMKgwqB8wqDCoMKgNCArDQo+IMKg ZXhhbXBsZXMvbDNmd2QvbDNmd2RfbHBtLmPCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoMKgNCArLQ0K PiDCoGV4YW1wbGVzL2wzZndkL2wzZndkX2xwbV9uZW9uLmjCoMKgwqDCoHwgMTU3ICsrKysrKysr KysrKysrKysrKysrKysNCj4gwqBleGFtcGxlcy9sM2Z3ZC9sM2Z3ZF9uZW9uLmjCoMKgwqDCoMKg wqDCoMKgfCAyNTkNCj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiDC oDggZmlsZXMgY2hhbmdlZCwgNTA0IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pDQo+IMKg Y3JlYXRlIG1vZGUgMTAwNjQ0IGV4YW1wbGVzL2wzZndkL2wzZndkX2VtX2hsbV9uZW9uLmgNCj4g wqBjcmVhdGUgbW9kZSAxMDA2NDQgZXhhbXBsZXMvbDNmd2QvbDNmd2RfbHBtX25lb24uaA0KPiDC oGNyZWF0ZSBtb2RlIDEwMDY0NCBleGFtcGxlcy9sM2Z3ZC9sM2Z3ZF9uZW9uLmgNCj4gDQo+IGRp ZmYgLS1naXQgYS9leGFtcGxlcy9sM2Z3ZC9sM2Z3ZC5oIGIvZXhhbXBsZXMvbDNmd2QvbDNmd2Qu aA0KPiBpbmRleCAwMTFiYTE0Li5jNDU1ODlhIDEwMDY0NA0KPiAtLS0gYS9leGFtcGxlcy9sM2Z3 ZC9sM2Z3ZC5oDQo+ICsrKyBiL2V4YW1wbGVzL2wzZndkL2wzZndkLmgNCj4gQEAgLTQwLDEwICs0 MCw2IEBADQo+IMKgDQo+IMKgI2RlZmluZSBSVEVfTE9HVFlQRV9MM0ZXRCBSVEVfTE9HVFlQRV9V U0VSMQ0KPiDCoA0KPiAtI2lmICFkZWZpbmVkKE5PX0hBU0hfTVVMVElfTE9PS1VQKSAmJg0KPiBk ZWZpbmVkKFJURV9NQUNISU5FX0NQVUZMQUdfTkVPTikNCj4gLSNkZWZpbmUgTk9fSEFTSF9NVUxU SV9MT09LVVAgMQ0KPiAtI2VuZGlmDQo+IC0NCj4gwqAjZGVmaW5lIE1BWF9QS1RfQlVSU1TCoMKg wqDCoMKgMzINCj4gwqAjZGVmaW5lIEJVUlNUX1RYX0RSQUlOX1VTIDEwMCAvKiBUWCBkcmFpbiBl dmVyeSB+MTAwdXMgKi8NCj4gwqANCj4gZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2wzZndkL2wzZndk X2VtLmMgYi9leGFtcGxlcy9sM2Z3ZC9sM2Z3ZF9lbS5jDQo+IGluZGV4IGNjY2Y3OTcuLmFjMWUy ZTAgMTAwNjQ0DQo+IC0tLSBhL2V4YW1wbGVzL2wzZndkL2wzZndkX2VtLmMNCj4gKysrIGIvZXhh bXBsZXMvbDNmd2QvbDNmd2RfZW0uYw0KPiBAQCAtMzI4LDcgKzMyOCw3IEBAIHN0cnVjdCBpcHY2 X2wzZndkX2VtX3JvdXRlIHsNCj4gwqAJcmV0dXJuICh1aW50OF90KSgocmV0IDwgMCkgPyBwb3J0 aWQgOg0KPiBpcHY2X2wzZndkX291dF9pZltyZXRdKTsNCj4gwqB9DQo+IMKgDQo+IC0jaWYgZGVm aW5lZChfX1NTRTRfMV9fKQ0KPiArI2lmIGRlZmluZWQoX19TU0U0XzFfXykgfHwgZGVmaW5lZChS VEVfTUFDSElORV9DUFVGTEFHX05FT04pDQo+IMKgI2lmIGRlZmluZWQoTk9fSEFTSF9NVUxUSV9M T09LVVApDQo+IMKgI2luY2x1ZGUgImwzZndkX2VtX3NpbmdsZS5oIg0KPiDCoCNlbHNlDQo+IEBA IC03MDksNyArNzA5LDcgQEAgc3RydWN0IGlwdjZfbDNmd2RfZW1fcm91dGUgew0KPiDCoAkJCWlm IChuYl9yeCA9PSAwKQ0KPiDCoAkJCQljb250aW51ZTsNCj4gwqANCj4gLSNpZiBkZWZpbmVkKF9f U1NFNF8xX18pDQo+ICsjaWYgZGVmaW5lZChfX1NTRTRfMV9fKSB8fCBkZWZpbmVkKFJURV9NQUNI SU5FX0NQVUZMQUdfTkVPTikNCj4gwqAJCQlsM2Z3ZF9lbV9zZW5kX3BhY2tldHMobmJfcngsIHBr dHNfYnVyc3QsDQo+IMKgCQkJCQkJCXBvcnRpZCwNCj4gcWNvbmYpOw0KPiDCoCNlbHNlDQo+IGRp ZmYgLS1naXQgYS9leGFtcGxlcy9sM2Z3ZC9sM2Z3ZF9lbV9obG0uaA0KPiBiL2V4YW1wbGVzL2wz ZndkL2wzZndkX2VtX2hsbS5oDQo+IGluZGV4IDYzNmRlYTQuLjMzMjljMWEgMTAwNjQ0DQo+IC0t LSBhL2V4YW1wbGVzL2wzZndkL2wzZndkX2VtX2hsbS5oDQo+ICsrKyBiL2V4YW1wbGVzL2wzZndk L2wzZndkX2VtX2hsbS5oDQo+IEBAIC0zNSw4ICszNSwxMyBAQA0KPiDCoCNpZm5kZWYgX19MM0ZX RF9FTV9ITE1fSF9fDQo+IMKgI2RlZmluZSBfX0wzRldEX0VNX0hMTV9IX18NCj4gwqANCj4gKyNp ZiBkZWZpbmVkKF9fU1NFNF8xX18pDQo+IMKgI2luY2x1ZGUgImwzZndkX3NzZS5oIg0KPiDCoCNp bmNsdWRlICJsM2Z3ZF9lbV9obG1fc3NlLmgiDQo+ICsjZWxpZiBkZWZpbmVkKFJURV9NQUNISU5F X0NQVUZMQUdfTkVPTikNCj4gKyNpbmNsdWRlICJsM2Z3ZF9uZW9uLmgiDQo+ICsjaW5jbHVkZSAi bDNmd2RfZW1faGxtX25lb24uaCINCj4gKyNlbmRpZg0KPiDCoA0KPiDCoHN0YXRpYyBpbmxpbmUg X19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIHZvaWQNCj4gwqBlbV9nZXRfZHN0X3BvcnRf aXB2NHg4KHN0cnVjdCBsY29yZV9jb25mICpxY29uZiwgc3RydWN0IHJ0ZV9tYnVmDQo+ICptWzhd LA0KPiBkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvbDNmd2QvbDNmd2RfZW1faGxtX25lb24uaA0KPiBi L2V4YW1wbGVzL2wzZndkL2wzZndkX2VtX2hsbV9uZW9uLmgNCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCj4gaW5kZXggMDAwMDAwMC4uZGFlMWFjZg0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2V4 YW1wbGVzL2wzZndkL2wzZndkX2VtX2hsbV9uZW9uLmgNCj4gQEAgLTAsMCArMSw3NCBAQA0KPiAr LyotDQo+ICsgKsKgwqDCoEJTRCBMSUNFTlNFDQo+ICsgKg0KPiArICrCoMKgwqBDb3B5cmlnaHQo YykgMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gKyAqwqDC oMKgQ29weXJpZ2h0KGMpIDIwMTcsIExpbmFybyBMaW1pdGVkDQo+ICsgKsKgwqDCoEFsbCByaWdo dHMgcmVzZXJ2ZWQuDQo+ICsgKg0KPiArICrCoMKgwqBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yDQo+IHdpdGhvdXQNCj4gKyAqwqDCoMKg bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZw0K PiBjb25kaXRpb25zDQo+ICsgKsKgwqDCoGFyZSBtZXQ6DQo+ICsgKg0KPiArICrCoMKgwqDCoMKg KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlDQo+ IGNvcHlyaWdodA0KPiArICrCoMKgwqDCoMKgwqDCoG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcNCj4gZGlzY2xhaW1lci4NCj4gKyAqwqDCoMKgwqDCoCog UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQ0K PiBjb3B5cmlnaHQNCj4gKyAqwqDCoMKgwqDCoMKgwqBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nDQo+IGRpc2NsYWltZXIgaW4NCj4gKyAqwqDCoMKgwqDC oMKgwqB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp dGggdGhlDQo+ICsgKsKgwqDCoMKgwqDCoMKgZGlzdHJpYnV0aW9uLg0KPiArICrCoMKgwqDCoMKg KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2Yg aXRzDQo+ICsgKsKgwqDCoMKgwqDCoMKgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cw0KPiBkZXJpdmVkDQo+ICsgKsKgwqDCoMKgwqDCoMKgZnJv bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbg0KPiBwZXJtaXNz aW9uLg0KPiArICoNCj4gKyAqwqDCoMKgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg Q09QWVJJR0hUIEhPTERFUlMgQU5EDQo+IENPTlRSSUJVVE9SUw0KPiArICrCoMKgwqAiQVMgSVMi IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUDQo+ IE5PVA0KPiArICrCoMKgwqBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQNCj4gRklUTkVTUyBGT1INCj4gKyAqwqDCoMKgQSBQQVJUSUNVTEFS IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQ0KPiBDT1BZUklH SFQNCj4gKyAqwqDCoMKgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ UkVDVCwgSU5ESVJFQ1QsDQo+IElOQ0lERU5UQUwsDQo+ICsgKsKgwqDCoFNQRUNJQUwsIEVYRU1Q TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVA0KPiBOT1QNCj4g KyAqwqDCoMKgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT RVJWSUNFUzsgTE9TUw0KPiBPRiBVU0UsDQo+ICsgKsKgwqDCoERBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EDQo+IE9OIEFOWQ0KPiAr ICrCoMKgwqBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg TElBQklMSVRZLCBPUg0KPiBUT1JUDQo+ICsgKsKgwqDCoChJTkNMVURJTkcgTkVHTElHRU5DRSBP UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YNCj4gVEhFIFVTRQ0KPiArICrC oMKgwqBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ IE9GIFNVQ0gNCj4gREFNQUdFLg0KPiArICovDQo+ICsNCj4gKyNpZm5kZWYgX19MM0ZXRF9FTV9I TE1fTkVPTl9IX18NCj4gKyNkZWZpbmUgX19MM0ZXRF9FTV9ITE1fTkVPTl9IX18NCj4gKw0KPiAr I2luY2x1ZGUgPGFybV9uZW9uLmg+DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgdm9pZA0KPiArZ2V0 X2lwdjRfNXR1cGxlKHN0cnVjdCBydGVfbWJ1ZiAqbTAsIGludDMyeDRfdCBtYXNrMCwNCj4gKwkJ dW5pb24gaXB2NF81dHVwbGVfaG9zdCAqa2V5KQ0KPiArew0KPiArCWludDMyeDRfdCB0bXBkYXRh MCA9IHZsZDFxX3MzMihydGVfcGt0bWJ1Zl9tdG9kX29mZnNldChtMCwNCj4gaW50MzJfdCAqLA0K PiArCQkJCXNpemVvZihzdHJ1Y3QgZXRoZXJfaGRyKSArDQo+ICsJCQkJb2Zmc2V0b2Yoc3RydWN0 IGlwdjRfaGRyLA0KPiB0aW1lX3RvX2xpdmUpKSk7DQo+ICsNCj4gKwlrZXktPnhtbSA9IHZhbmRx X3MzMih0bXBkYXRhMCwgbWFzazApOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW5saW5lIHZvaWQN Cj4gK2dldF9pcHY2XzV0dXBsZShzdHJ1Y3QgcnRlX21idWYgKm0wLCBpbnQzMng0X3QgbWFzazAs DQo+ICsJCWludDMyeDRfdCBtYXNrMSwgdW5pb24gaXB2Nl81dHVwbGVfaG9zdCAqa2V5KQ0KPiAr ew0KPiArCWludDMyeDRfdCB0bXBkYXRhMCA9IHZsZDFxX3MzMigNCj4gKwkJCXJ0ZV9wa3RtYnVm X210b2Rfb2Zmc2V0KG0wLCBpbnQgKiwNCj4gKwkJCQlzaXplb2Yoc3RydWN0IGV0aGVyX2hkcikg Kw0KPiArCQkJCW9mZnNldG9mKHN0cnVjdCBpcHY2X2hkciwNCj4gcGF5bG9hZF9sZW4pKSk7DQo+ ICsNCj4gKwlpbnQzMng0X3QgdG1wZGF0YTEgPSB2bGQxcV9zMzIoDQo+ICsJCQlydGVfcGt0bWJ1 Zl9tdG9kX29mZnNldChtMCwgaW50ICosDQo+ICsJCQkJc2l6ZW9mKHN0cnVjdCBldGhlcl9oZHIp ICsNCj4gKwkJCQlvZmZzZXRvZihzdHJ1Y3QgaXB2Nl9oZHIsDQo+IHBheWxvYWRfbGVuKSArIDgp KTsNCj4gKw0KPiArCWludDMyeDRfdCB0bXBkYXRhMiA9IHZsZDFxX3MzMigNCj4gKwkJCXJ0ZV9w a3RtYnVmX210b2Rfb2Zmc2V0KG0wLCBpbnQgKiwNCj4gKwkJCQlzaXplb2Yoc3RydWN0IGV0aGVy X2hkcikgKw0KPiArCQkJCW9mZnNldG9mKHN0cnVjdCBpcHY2X2hkciwNCj4gcGF5bG9hZF9sZW4p ICsgMTYpKTsNCj4gKw0KPiArCWtleS0+eG1tWzBdID0gdmFuZHFfczMyKHRtcGRhdGEwLCBtYXNr MCk7DQo+ICsJa2V5LT54bW1bMV0gPSB0bXBkYXRhMTsNCj4gKwlrZXktPnhtbVsyXSA9IHZhbmRx X3MzMih0bXBkYXRhMiwgbWFzazEpOw0KPiArfQ0KPiArI2VuZGlmIC8qIF9fTDNGV0RfRU1fSExN X05FT05fSF9fICovDQo+IGRpZmYgLS1naXQgYS9leGFtcGxlcy9sM2Z3ZC9sM2Z3ZF9lbV9zaW5n bGUuaA0KPiBiL2V4YW1wbGVzL2wzZndkL2wzZndkX2VtX3NpbmdsZS5oDQo+IGluZGV4IGMwYTk3 MjUuLjg2MDQ1NzEgMTAwNjQ0DQo+IC0tLSBhL2V4YW1wbGVzL2wzZndkL2wzZndkX2VtX3Npbmds ZS5oDQo+ICsrKyBiL2V4YW1wbGVzL2wzZndkL2wzZndkX2VtX3NpbmdsZS5oDQo+IEBAIC00Myw3 ICs0MywxMSBAQA0KPiDCoCAqIGNvbXBpbGF0aW9uIHRpbWUuDQo+IMKgICovDQo+IMKgDQo+ICsj aWYgZGVmaW5lZChfX1NTRTRfMV9fKQ0KPiDCoCNpbmNsdWRlICJsM2Z3ZF9zc2UuaCINCj4gKyNl bGlmIGRlZmluZWQoUlRFX01BQ0hJTkVfQ1BVRkxBR19ORU9OKQ0KPiArI2luY2x1ZGUgImwzZndk X25lb24uaCINCj4gKyNlbmRpZg0KPiDCoA0KPiDCoHN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVf XygoYWx3YXlzX2lubGluZSkpIHVpbnQxNl90DQo+IMKgZW1fZ2V0X2RzdF9wb3J0KGNvbnN0IHN0 cnVjdCBsY29yZV9jb25mICpxY29uZiwgc3RydWN0IHJ0ZV9tYnVmDQo+ICpwa3QsDQo+IGRpZmYg LS1naXQgYS9leGFtcGxlcy9sM2Z3ZC9sM2Z3ZF9scG0uYyBiL2V4YW1wbGVzL2wzZndkL2wzZndk X2xwbS5jDQo+IGluZGV4IGZjNTU0ZmMuLmRkZWYyNTAgMTAwNjQ0DQo+IC0tLSBhL2V4YW1wbGVz L2wzZndkL2wzZndkX2xwbS5jDQo+ICsrKyBiL2V4YW1wbGVzL2wzZndkL2wzZndkX2xwbS5jDQo+ IEBAIC0xODksNiArMTg5LDggQEAgc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNf aW5saW5lKSkNCj4gdWludDE2X3QNCj4gwqANCj4gwqAjaWYgZGVmaW5lZChfX1NTRTRfMV9fKQ0K PiDCoCNpbmNsdWRlICJsM2Z3ZF9scG1fc3NlLmgiDQo+ICsjZWxpZiBkZWZpbmVkKFJURV9NQUNI SU5FX0NQVUZMQUdfTkVPTikNCj4gKyNpbmNsdWRlICJsM2Z3ZF9scG1fbmVvbi5oIg0KPiDCoCNl bHNlDQo+IMKgI2luY2x1ZGUgImwzZndkX2xwbS5oIg0KPiDCoCNlbmRpZg0KPiBAQCAtMjYxLDcg KzI2Myw3IEBAIHN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpDQo+ IHVpbnQxNl90DQo+IMKgCQkJaWYgKG5iX3J4ID09IDApDQo+IMKgCQkJCWNvbnRpbnVlOw0KPiDC oA0KPiAtI2lmIGRlZmluZWQoX19TU0U0XzFfXykNCj4gKyNpZiBkZWZpbmVkKF9fU1NFNF8xX18p IHx8IGRlZmluZWQoUlRFX01BQ0hJTkVfQ1BVRkxBR19ORU9OKQ0KPiDCoAkJCWwzZndkX2xwbV9z ZW5kX3BhY2tldHMobmJfcngsIHBrdHNfYnVyc3QsDQo+IMKgCQkJCQkJcG9ydGlkLCBxY29uZik7 DQo+IMKgI2Vsc2UNCj4gZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2wzZndkL2wzZndkX2xwbV9uZW9u LmgNCj4gYi9leGFtcGxlcy9sM2Z3ZC9sM2Z3ZF9scG1fbmVvbi5oDQo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAuLjc3MmU1NGINCj4gLS0tIC9kZXYvbnVsbA0KPiArKysg Yi9leGFtcGxlcy9sM2Z3ZC9sM2Z3ZF9scG1fbmVvbi5oDQo+IEBAIC0wLDAgKzEsMTU3IEBADQo+ ICsvKi0NCj4gKyAqwqDCoMKgQlNEIExJQ0VOU0UNCj4gKyAqDQo+ICsgKsKgwqDCoENvcHlyaWdo dChjKSAyMDEwLTIwMTYgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQo+ ICsgKsKgwqDCoENvcHlyaWdodChjKSAyMDE3LCBMaW5hcm8gTGltaXRlZA0KPiArICrCoMKgwqBB bGwgcmlnaHRzIHJlc2VydmVkLg0KPiArICoNCj4gKyAqwqDCoMKgUmVkaXN0cmlidXRpb24gYW5k IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcg0KPiB3aXRob3V0DQo+ICsg KsKgwqDCoG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcNCj4gY29uZGl0aW9ucw0KPiArICrCoMKgwqBhcmUgbWV0Og0KPiArICoNCj4gKyAqwqDC oMKgwqDCoCogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh Ym92ZQ0KPiBjb3B5cmlnaHQNCj4gKyAqwqDCoMKgwqDCoMKgwqBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nDQo+IGRpc2NsYWltZXIuDQo+ICsgKsKgwqDC oMKgwqAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg YWJvdmUNCj4gY29weXJpZ2h0DQo+ICsgKsKgwqDCoMKgwqDCoMKgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZw0KPiBkaXNjbGFpbWVyIGluDQo+ICsgKsKg wqDCoMKgwqDCoMKgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92 aWRlZCB3aXRoIHRoZQ0KPiArICrCoMKgwqDCoMKgwqDCoGRpc3RyaWJ1dGlvbi4NCj4gKyAqwqDC oMKgwqDCoCogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5h bWVzIG9mIGl0cw0KPiArICrCoMKgwqDCoMKgwqDCoGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0 byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMNCj4gZGVyaXZlZA0KPiArICrCoMKgwqDCoMKg wqDCoGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4NCj4g cGVybWlzc2lvbi4NCj4gKyAqDQo+ICsgKsKgwqDCoFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORA0KPiBDT05UUklCVVRPUlMNCj4gKyAqwqDCoMKg IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs IEJVVA0KPiBOT1QNCj4gKyAqwqDCoMKgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EDQo+IEZJVE5FU1MgRk9SDQo+ICsgKsKgwqDCoEEgUEFS VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUNCj4g Q09QWVJJR0hUDQo+ICsgKsKgwqDCoE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S IEFOWSBESVJFQ1QsIElORElSRUNULA0KPiBJTkNJREVOVEFMLA0KPiArICrCoMKgwqBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQNCj4g Tk9UDQo+ICsgKsKgwqDCoExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P RFMgT1IgU0VSVklDRVM7IExPU1MNCj4gT0YgVVNFLA0KPiArICrCoMKgwqBEQVRBLCBPUiBQUk9G SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORA0KPiBPTiBB TlkNCj4gKyAqwqDCoMKgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg U1RSSUNUIExJQUJJTElUWSwgT1INCj4gVE9SVA0KPiArICrCoMKgwqAoSU5DTFVESU5HIE5FR0xJ R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GDQo+IFRIRSBVU0UN Cj4gKyAqwqDCoMKgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT SUJJTElUWSBPRiBTVUNIDQo+IERBTUFHRS4NCj4gKyAqLw0KPiArDQo+ICsjaWZuZGVmIF9fTDNG V0RfTFBNX05FT05fSF9fDQo+ICsjZGVmaW5lIF9fTDNGV0RfTFBNX05FT05fSF9fDQo+ICsNCj4g KyNpbmNsdWRlIDxhcm1fbmVvbi5oPg0KPiArDQo+ICsjaW5jbHVkZSAibDNmd2RfbmVvbi5oIg0K PiArDQo+ICsvKg0KPiArICogUmVhZCBwYWNrZXRfdHlwZSBhbmQgZGVzdGluYXRpb24gSVBWNCBh ZGRyZXNzZXMgZnJvbSA0IG1idWZzLg0KPiArICovDQo+ICtzdGF0aWMgaW5saW5lIHZvaWQNCj4g K3Byb2Nlc3N4NF9zdGVwMShzdHJ1Y3QgcnRlX21idWYgKnBrdFtGV0RTVEVQXSwNCj4gKwkJaW50 MzJ4NF90ICpkaXAsDQo+ICsJCXVpbnQzMl90ICppcHY0X2ZsYWcpDQo+ICt7DQo+ICsJc3RydWN0 IGlwdjRfaGRyICppcHY0X2hkcjsNCj4gKwlzdHJ1Y3QgZXRoZXJfaGRyICpldGhfaGRyOw0KPiAr CWludDMyX3QgZHN0W0ZXRFNURVBdOw0KPiArDQo+ICsJZXRoX2hkciA9IHJ0ZV9wa3RtYnVmX210 b2QocGt0WzBdLCBzdHJ1Y3QgZXRoZXJfaGRyICopOw0KPiArCWlwdjRfaGRyID0gKHN0cnVjdCBp cHY0X2hkciAqKShldGhfaGRyICsgMSk7DQo+ICsJZHN0WzBdID0gaXB2NF9oZHItPmRzdF9hZGRy Ow0KPiArCWlwdjRfZmxhZ1swXSA9IHBrdFswXS0+cGFja2V0X3R5cGUgJiBSVEVfUFRZUEVfTDNf SVBWNDsNCj4gKw0KPiArCWV0aF9oZHIgPSBydGVfcGt0bWJ1Zl9tdG9kKHBrdFsxXSwgc3RydWN0 IGV0aGVyX2hkciAqKTsNCj4gKwlpcHY0X2hkciA9IChzdHJ1Y3QgaXB2NF9oZHIgKikoZXRoX2hk ciArIDEpOw0KPiArCWRzdFsxXSA9IGlwdjRfaGRyLT5kc3RfYWRkcjsNCj4gKwlpcHY0X2ZsYWdb MF0gJj0gcGt0WzFdLT5wYWNrZXRfdHlwZTsNCj4gKw0KPiArCWV0aF9oZHIgPSBydGVfcGt0bWJ1 Zl9tdG9kKHBrdFsyXSwgc3RydWN0IGV0aGVyX2hkciAqKTsNCj4gKwlpcHY0X2hkciA9IChzdHJ1 Y3QgaXB2NF9oZHIgKikoZXRoX2hkciArIDEpOw0KPiArCWRzdFsyXSA9IGlwdjRfaGRyLT5kc3Rf YWRkcjsNCj4gKwlpcHY0X2ZsYWdbMF0gJj0gcGt0WzJdLT5wYWNrZXRfdHlwZTsNCj4gKw0KPiAr CWV0aF9oZHIgPSBydGVfcGt0bWJ1Zl9tdG9kKHBrdFszXSwgc3RydWN0IGV0aGVyX2hkciAqKTsN Cj4gKwlpcHY0X2hkciA9IChzdHJ1Y3QgaXB2NF9oZHIgKikoZXRoX2hkciArIDEpOw0KPiArCWRz dFszXSA9IGlwdjRfaGRyLT5kc3RfYWRkcjsNCj4gKwlpcHY0X2ZsYWdbMF0gJj0gcGt0WzNdLT5w YWNrZXRfdHlwZTsNCj4gKw0KPiArCWRpcFswXSA9IHZsZDFxX3MzMihkc3QpOw0KPiArfQ0KPiAr DQo+ICsvKg0KPiArICogTG9va3VwIGludG8gTFBNIGZvciBkZXN0aW5hdGlvbiBwb3J0Lg0KPiAr ICogSWYgbG9va3VwIGZhaWxzLCB1c2UgaW5jb21pbmcgcG9ydCAocG9ydGlkKSBhcyBkZXN0aW5h dGlvbiBwb3J0Lg0KPiArICovDQo+ICtzdGF0aWMgaW5saW5lIHZvaWQNCj4gK3Byb2Nlc3N4NF9z dGVwMihjb25zdCBzdHJ1Y3QgbGNvcmVfY29uZiAqcWNvbmYsDQo+ICsJCWludDMyeDRfdCBkaXAs DQo+ICsJCXVpbnQzMl90IGlwdjRfZmxhZywNCj4gKwkJdWludDhfdCBwb3J0aWQsDQo+ICsJCXN0 cnVjdCBydGVfbWJ1ZiAqcGt0W0ZXRFNURVBdLA0KPiArCQl1aW50MTZfdCBkcHJ0W0ZXRFNURVBd KQ0KPiArew0KPiArCXJ0ZV94bW1fdCBkc3Q7DQo+ICsJdWludDh4MTZfdCBic3dhcF9tYXNrID0g ezMsIDIsIDEsIDAsIDcsIDYsIDUsIDQsIDExLCAxMCwgOSwNCj4gOCwNCj4gKwkJCQnCoDE1LCAx NCwgMTMsIDEyfTsNCj4gKw0KPiArCS8qIEJ5dGUgc3dhcCA0IElQVjQgYWRkcmVzc2VzLiAqLw0K PiArCWRpcCA9DQo+IHZyZWludGVycHJldHFfczMyX3U4KHZxdGJsMXFfdTgodnJlaW50ZXJwcmV0 cV91OF9zMzIoZGlwKSwNCj4gKwkJCQkJwqDCoMKgwqDCoMKgYnN3YXBfbWFzaykpOw0KPiArDQpU aGlzIGNhbiBiZSBlYXNpbHkgZG9uZSBiecKgdnJldjMycV91OC4gV2l0aCB0aGlzIHdlIGNhbiBh dm9pZCB0aGUgbmVlZA0KZm9yIGJzd2FwX21hc2suIEFsc28gVEJMIGluc3RydWN0aW9uIGhhcyBo aWdoZXIgbGF0ZW5jeSBjb21wYXJlZCB0byB0aGUNCnJldjMyIGluc3RydWN0aW9uIGluIHRodW5k ZXJ4LCB0aHVuZGVyeDJ0OTkgYW5kIGNvcnRleGE1Ny7CoA0KDQo+ICsJLyogaWYgYWxsIDQgcGFj a2V0cyBhcmUgSVBWNC4gKi8NCj4gKwlpZiAobGlrZWx5KGlwdjRfZmxhZykpIHsNCj4gKwkJcnRl X2xwbV9sb29rdXB4NChxY29uZi0+aXB2NF9sb29rdXBfc3RydWN0LCBkaXAsDQo+IGRzdC51MzIs DQo+ICsJCQlwb3J0aWQpOw0KPiArCQkvKiBnZXQgcmlkIG9mIHVudXNlZCB1cHBlciAxNiBiaXQg Zm9yIGVhY2ggZHBvcnQuICovDQo+ICsJCXZzdDFfczE2KChpbnQxNl90ICopZHBydCwgdnFtb3Zu X3MzMihkc3QueCkpOw0KPiArCX0gZWxzZSB7DQo+ICsJCWRzdC54ID0gZGlwOw0KPiArCQlkcHJ0 WzBdID0gbHBtX2dldF9kc3RfcG9ydF93aXRoX2lwdjQocWNvbmYsIHBrdFswXSwNCj4gKwkJCQkJ CcKgwqDCoMKgwqBkc3QudTMyWzBdLA0KPiBwb3J0aWQpOw0KPiArCQlkcHJ0WzFdID0gbHBtX2dl dF9kc3RfcG9ydF93aXRoX2lwdjQocWNvbmYsIHBrdFsxXSwNCj4gKwkJCQkJCcKgwqDCoMKgwqBk c3QudTMyWzFdLA0KPiBwb3J0aWQpOw0KPiArCQlkcHJ0WzJdID0gbHBtX2dldF9kc3RfcG9ydF93 aXRoX2lwdjQocWNvbmYsIHBrdFsyXSwNCj4gKwkJCQkJCcKgwqDCoMKgwqBkc3QudTMyWzJdLA0K PiBwb3J0aWQpOw0KPiArCQlkcHJ0WzNdID0gbHBtX2dldF9kc3RfcG9ydF93aXRoX2lwdjQocWNv bmYsIHBrdFszXSwNCj4gKwkJCQkJCcKgwqDCoMKgwqBkc3QudTMyWzNdLA0KPiBwb3J0aWQpOw0K PiArCX0NCj4gK30NCj4gKw0KPiArLyoNCj4gKyAqIEJ1ZmZlciBvcHRpbWl6ZWQgaGFuZGxpbmcg b2YgcGFja2V0cywgaW52b2tlZA0KPiArICogZnJvbSBtYWluX2xvb3AuDQo+ICsgKi8NCj4gK3N0 YXRpYyBpbmxpbmUgdm9pZA0KPiArbDNmd2RfbHBtX3NlbmRfcGFja2V0cyhpbnQgbmJfcngsIHN0 cnVjdCBydGVfbWJ1ZiAqKnBrdHNfYnVyc3QsDQo+ICsJCQl1aW50OF90IHBvcnRpZCwgc3RydWN0 IGxjb3JlX2NvbmYgKnFjb25mKQ0KPiArew0KPiArCWludDMyX3QgajsNCj4gKwl1aW50MTZfdCBk c3RfcG9ydFtNQVhfUEtUX0JVUlNUXTsNCj4gKwlpbnQzMng0X3QgZGlwW01BWF9QS1RfQlVSU1Qg LyBGV0RTVEVQXTsNCj4gKwl1aW50MzJfdCBpcHY0X2ZsYWdbTUFYX1BLVF9CVVJTVCAvIEZXRFNU RVBdOw0KPiArCWNvbnN0IGludDMyX3QgayA9IFJURV9BTElHTl9GTE9PUihuYl9yeCwgRldEU1RF UCk7DQo+ICsNCj4gKwlmb3IgKGogPSAwOyBqICE9IGs7IGogKz0gRldEU1RFUCkNCj4gKwkJcHJv Y2Vzc3g0X3N0ZXAxKCZwa3RzX2J1cnN0W2pdLCAmZGlwW2ogLyBGV0RTVEVQXSwNCj4gKwkJCQkm aXB2NF9mbGFnW2ogLyBGV0RTVEVQXSk7DQo+ICsNCj4gKwlmb3IgKGogPSAwOyBqICE9IGs7IGog Kz0gRldEU1RFUCkNCj4gKwkJcHJvY2Vzc3g0X3N0ZXAyKHFjb25mLCBkaXBbaiAvIEZXRFNURVBd LA0KPiArCQkJCWlwdjRfZmxhZ1tqIC8gRldEU1RFUF0sIHBvcnRpZCwNCj4gJnBrdHNfYnVyc3Rb al0sDQo+ICsJCQkJJmRzdF9wb3J0W2pdKTsNCj4gKw0KPiArCS8qIENsYXNzaWZ5IGxhc3QgdXAg dG8gMyBwYWNrZXRzIG9uZSBieSBvbmUgKi8NCj4gKwlzd2l0Y2ggKG5iX3J4ICUgRldEU1RFUCkg ew0KPiArCWNhc2UgMzoNCj4gKwkJZHN0X3BvcnRbal0gPSBscG1fZ2V0X2RzdF9wb3J0KHFjb25m LCBwa3RzX2J1cnN0W2pdLA0KPiBwb3J0aWQpOw0KPiArCQlqKys7DQo+ICsJCS8qIGZhbGx0aHJv dWdoICovDQo+ICsJY2FzZSAyOg0KPiArCQlkc3RfcG9ydFtqXSA9IGxwbV9nZXRfZHN0X3BvcnQo cWNvbmYsIHBrdHNfYnVyc3Rbal0sDQo+IHBvcnRpZCk7DQo+ICsJCWorKzsNCj4gKwkJLyogZmFs bHRocm91Z2ggKi8NCj4gKwljYXNlIDE6DQo+ICsJCWRzdF9wb3J0W2pdID0gbHBtX2dldF9kc3Rf cG9ydChxY29uZiwgcGt0c19idXJzdFtqXSwNCj4gcG9ydGlkKTsNCj4gKwkJaisrOw0KPiArCX0N Cj4gKw0KPiArCXNlbmRfcGFja2V0c19tdWx0aShxY29uZiwgcGt0c19idXJzdCwgZHN0X3BvcnQs IG5iX3J4KTsNCj4gK30NCj4gKw0KPiArI2VuZGlmIC8qIF9fTDNGV0RfTFBNX05FT05fSF9fICov DQo+IGRpZmYgLS1naXQgYS9leGFtcGxlcy9sM2Z3ZC9sM2Z3ZF9uZW9uLmgNCj4gYi9leGFtcGxl cy9sM2Z3ZC9sM2Z3ZF9uZW9uLmgNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAw MDAwMC4uNzVjODk3Ng0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2V4YW1wbGVzL2wzZndkL2wz ZndkX25lb24uaA0KPiBAQCAtMCwwICsxLDI1OSBAQA0KPiArLyotDQo+ICsgKsKgwqDCoEJTRCBM SUNFTlNFDQo+ICsgKg0KPiArICrCoMKgwqBDb3B5cmlnaHQoYykgMjAxNiBJbnRlbCBDb3Jwb3Jh dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gKyAqwqDCoMKgQ29weXJpZ2h0KGMpIDIwMTcs IExpbmFybyBMaW1pdGVkDQo+ICsgKsKgwqDCoEFsbCByaWdodHMgcmVzZXJ2ZWQuDQo+ICsgKg0K PiArICrCoMKgwqBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv cm1zLCB3aXRoIG9yDQo+IHdpdGhvdXQNCj4gKyAqwqDCoMKgbW9kaWZpY2F0aW9uLCBhcmUgcGVy bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZw0KPiBjb25kaXRpb25zDQo+ICsgKsKg wqDCoGFyZSBtZXQ6DQo+ICsgKg0KPiArICrCoMKgwqDCoMKgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlDQo+IGNvcHlyaWdodA0KPiArICrCoMKg wqDCoMKgwqDCoG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcNCj4gZGlzY2xhaW1lci4NCj4gKyAqwqDCoMKgwqDCoCogUmVkaXN0cmlidXRpb25zIGluIGJp bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQ0KPiBjb3B5cmlnaHQNCj4gKyAqwqDC oMKgwqDCoMKgwqBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nDQo+IGRpc2NsYWltZXIgaW4NCj4gKyAqwqDCoMKgwqDCoMKgwqB0aGUgZG9jdW1lbnRhdGlv biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlDQo+ICsgKsKgwqDCoMKg wqDCoMKgZGlzdHJpYnV0aW9uLg0KPiArICrCoMKgwqDCoMKgKiBOZWl0aGVyIHRoZSBuYW1lIG9m IEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzDQo+ICsgKsKgwqDCoMKgwqDC oMKgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0 cw0KPiBkZXJpdmVkDQo+ICsgKsKgwqDCoMKgwqDCoMKgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbg0KPiBwZXJtaXNzaW9uLg0KPiArICoNCj4gKyAqwqDC oMKgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E DQo+IENPTlRSSUJVVE9SUw0KPiArICrCoMKgwqAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUDQo+IE5PVA0KPiArICrCoMKgwqBMSU1J VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQNCj4g RklUTkVTUyBGT1INCj4gKyAqwqDCoMKgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQ0KPiBDT1BZUklHSFQNCj4gKyAqwqDCoMKgT1dORVIg T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsDQo+IElO Q0lERU5UQUwsDQo+ICsgKsKgwqDCoFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVA0KPiBOT1QNCj4gKyAqwqDCoMKgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUw0KPiBPRiBV U0UsDQo+ICsgKsKgwqDCoERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP TikgSE9XRVZFUiBDQVVTRUQgQU5EDQo+IE9OIEFOWQ0KPiArICrCoMKgwqBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUg0KPiBUT1JU DQo+ICsgKsKgwqDCoChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg SU4gQU5ZIFdBWSBPVVQgT0YNCj4gVEhFIFVTRQ0KPiArICrCoMKgwqBPRiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gNCj4gREFNQUdFLg0K PiArICovDQo+ICsNCj4gKw0KPiArI2lmbmRlZiBfTDNGV0RfTkVPTl9IXw0KPiArI2RlZmluZSBf TDNGV0RfTkVPTl9IXw0KPiArDQo+ICsjaW5jbHVkZSAibDNmd2QuaCINCj4gKyNpbmNsdWRlICJs M2Z3ZF9jb21tb24uaCINCj4gKw0KPiArLyoNCj4gKyAqIFVwZGF0ZSBzb3VyY2UgYW5kIGRlc3Rp bmF0aW9uIE1BQyBhZGRyZXNzZXMgaW4gdGhlIGV0aGVybmV0DQo+IGhlYWRlci4NCj4gKyAqIFBl cmZvcm0gUkZDMTgxMiBjaGVja3MgYW5kIHVwZGF0ZXMgZm9yIElQVjQgcGFja2V0cy4NCj4gKyAq Lw0KPiArc3RhdGljIGlubGluZSB2b2lkDQo+ICtwcm9jZXNzeDRfc3RlcDMoc3RydWN0IHJ0ZV9t YnVmICpwa3RbRldEU1RFUF0sIHVpbnQxNl90DQo+IGRzdF9wb3J0W0ZXRFNURVBdKQ0KPiArew0K PiArCXVpbnQzMng0X3QgdGVbRldEU1RFUF07DQo+ICsJdWludDMyeDRfdCB2ZVtGV0RTVEVQXTsN Cj4gKwl1aW50MzJfdCAqcFtGV0RTVEVQXTsNCj4gKw0KPiArCXBbMF0gPSBydGVfcGt0bWJ1Zl9t dG9kKHBrdFswXSwgdWludDMyX3QgKik7DQo+ICsJcFsxXSA9IHJ0ZV9wa3RtYnVmX210b2QocGt0 WzFdLCB1aW50MzJfdCAqKTsNCj4gKwlwWzJdID0gcnRlX3BrdG1idWZfbXRvZChwa3RbMl0sIHVp bnQzMl90ICopOw0KPiArCXBbM10gPSBydGVfcGt0bWJ1Zl9tdG9kKHBrdFszXSwgdWludDMyX3Qg Kik7DQo+ICsNCj4gKwl2ZVswXSA9IHZyZWludGVycHJldHFfdTMyX3MzMih2YWxfZXRoW2RzdF9w b3J0WzBdXSk7DQo+ICsJdGVbMF0gPSB2bGQxcV91MzIocFswXSk7DQo+ICsNCj4gKwl2ZVsxXSA9 IHZyZWludGVycHJldHFfdTMyX3MzMih2YWxfZXRoW2RzdF9wb3J0WzFdXSk7DQo+ICsJdGVbMV0g PSB2bGQxcV91MzIocFsxXSk7DQo+ICsNCj4gKwl2ZVsyXSA9IHZyZWludGVycHJldHFfdTMyX3Mz Mih2YWxfZXRoW2RzdF9wb3J0WzJdXSk7DQo+ICsJdGVbMl0gPSB2bGQxcV91MzIocFsyXSk7DQo+ ICsNCj4gKwl2ZVszXSA9IHZyZWludGVycHJldHFfdTMyX3MzMih2YWxfZXRoW2RzdF9wb3J0WzNd XSk7DQo+ICsJdGVbM10gPSB2bGQxcV91MzIocFszXSk7DQo+ICsNCj4gKwkvKiBVcGRhdGUgbGFz dCA0IGJ5dGVzICovDQo+ICsJdmVbMF0gPSB2c2V0cV9sYW5lX3UzMih2Z2V0cV9sYW5lX3UzMih0 ZVswXSwgMyksIHZlWzBdLCAzKTsNCj4gKwl2ZVsxXSA9IHZzZXRxX2xhbmVfdTMyKHZnZXRxX2xh bmVfdTMyKHRlWzFdLCAzKSwgdmVbMV0sIDMpOw0KPiArCXZlWzJdID0gdnNldHFfbGFuZV91MzIo dmdldHFfbGFuZV91MzIodGVbMl0sIDMpLCB2ZVsyXSwgMyk7DQo+ICsJdmVbM10gPSB2c2V0cV9s YW5lX3UzMih2Z2V0cV9sYW5lX3UzMih0ZVszXSwgMyksIHZlWzNdLCAzKTsNCj4gKw0KPiArCXZz dDFxX3UzMihwWzBdLCB2ZVswXSk7DQo+ICsJdnN0MXFfdTMyKHBbMV0sIHZlWzFdKTsNCj4gKwl2 c3QxcV91MzIocFsyXSwgdmVbMl0pOw0KPiArCXZzdDFxX3UzMihwWzNdLCB2ZVszXSk7DQo+ICsN Cj4gKwlyZmMxODEyX3Byb2Nlc3MoKHN0cnVjdCBpcHY0X2hkciAqKSgoc3RydWN0IGV0aGVyX2hk ciAqKXBbMF0NCj4gKyAxKSwNCj4gKwkJJmRzdF9wb3J0WzBdLCBwa3RbMF0tPnBhY2tldF90eXBl KTsNCj4gKwlyZmMxODEyX3Byb2Nlc3MoKHN0cnVjdCBpcHY0X2hkciAqKSgoc3RydWN0IGV0aGVy X2hkciAqKXBbMV0NCj4gKyAxKSwNCj4gKwkJJmRzdF9wb3J0WzFdLCBwa3RbMV0tPnBhY2tldF90 eXBlKTsNCj4gKwlyZmMxODEyX3Byb2Nlc3MoKHN0cnVjdCBpcHY0X2hkciAqKSgoc3RydWN0IGV0 aGVyX2hkciAqKXBbMl0NCj4gKyAxKSwNCj4gKwkJJmRzdF9wb3J0WzJdLCBwa3RbMl0tPnBhY2tl dF90eXBlKTsNCj4gKwlyZmMxODEyX3Byb2Nlc3MoKHN0cnVjdCBpcHY0X2hkciAqKSgoc3RydWN0 IGV0aGVyX2hkciAqKXBbM10NCj4gKyAxKSwNCj4gKwkJJmRzdF9wb3J0WzNdLCBwa3RbM10tPnBh Y2tldF90eXBlKTsNCj4gK30NCj4gKw0KPiArLyoNCj4gKyAqIEdyb3VwIGNvbnNlY3V0aXZlIHBh Y2tldHMgd2l0aCB0aGUgc2FtZSBkZXN0aW5hdGlvbiBwb3J0IGluDQo+IGJ1cnN0cyBvZiA0Lg0K PiArICogU3VwcG9zZSB3ZSBoYXZlIGFycmF5IG9mIGRlc3Rpb25hdGlvbiBwb3J0czoNCj4gKyAq IGRzdF9wb3J0W10gPSB7YSwgYiwgYywgZCwsIGUsIC4uLiB9DQo+ICsgKiBkcDEgc2hvdWxkIGNv bnRhaW46IDxhLCBiLCBjLCBkPiwgZHAyOiA8YiwgYywgZCwgZT4uDQo+ICsgKiBXZSBkb2luZyA0 IGNvbXBhcmlzaW9ucyBhdCBvbmNlIGFuZCB0aGUgcmVzdWx0IGlzIDQgYml0IG1hc2suDQo+ICsg KiBUaGlzIG1hc2sgaXMgdXNlZCBhcyBhbiBpbmRleCBpbnRvIHByZWJ1aWxkIGFycmF5IG9mIHBu dW0gdmFsdWVzLg0KPiArICovDQo+ICtzdGF0aWMgaW5saW5lIHVpbnQxNl90ICoNCj4gK3BvcnRf Z3JvdXB4NCh1aW50MTZfdCBwbltGV0RTVEVQICsgMV0sIHVpbnQxNl90ICpscCwgdWludDE2eDhf dCBkcDEsDQo+ICsJwqDCoMKgwqDCoHVpbnQxNng4X3QgZHAyKQ0KPiArew0KPiArCXVuaW9uIHsN Cj4gKwkJdWludDE2X3QgdTE2W0ZXRFNURVAgKyAxXTsNCj4gKwkJdWludDY0X3QgdTY0Ow0KPiAr CX0gKnBudW0gPSAodm9pZCAqKXBuOw0KPiArDQo+ICsJaW50MzJfdCB2Ow0KPiArCXVpbnQxNng4 X3QgbWFzayA9IHsxLCAyLCA0LCA4LCAwLCAwLCAwLCAwfTsNCj4gKw0KPiArCWRwMSA9IHZjZXFx X3UxNihkcDEsIGRwMik7DQo+ICsJZHAxID0gdmFuZHFfdTE2KGRwMSwgbWFzayk7DQo+ICsJdiA9 IHZhZGR2cV91MTYoZHAxKTsNCj4gKw0KPiArCS8qIHVwZGF0ZSBsYXN0IHBvcnQgY291bnRlci4g Ki8NCj4gKwlscFswXSArPSBncHRibFt2XS5scHY7DQo+ICsNCj4gKwkvKiBpZiBkZXN0IHBvcnQg dmFsdWUgaGFzIGNoYW5nZWQuICovDQo+ICsJaWYgKHYgIT0gR1JQTVNLKSB7DQo+ICsJCXBudW0t PnU2NCA9IGdwdGJsW3ZdLnBudW07DQo+ICsJCXBudW0tPnUxNltGV0RTVEVQXSA9IDE7DQo+ICsJ CWxwID0gcG51bS0+dTE2ICsgZ3B0Ymxbdl0uaWR4Ow0KPiArCX0NCj4gKw0KPiArCXJldHVybiBs cDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBQcm9jZXNzIG9uZSBwYWNrZXQ6DQo+ICsgKiBV cGRhdGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBNQUMgYWRkcmVzc2VzIGluIHRoZSBldGhlcm5l dA0KPiBoZWFkZXIuDQo+ICsgKiBQZXJmb3JtIFJGQzE4MTIgY2hlY2tzIGFuZCB1cGRhdGVzIGZv ciBJUFY0IHBhY2tldHMuDQo+ICsgKi8NCj4gK3N0YXRpYyBpbmxpbmUgdm9pZA0KPiArcHJvY2Vz c19wYWNrZXQoc3RydWN0IHJ0ZV9tYnVmICpwa3QsIHVpbnQxNl90ICpkc3RfcG9ydCkNCj4gK3sN Cj4gKwlzdHJ1Y3QgZXRoZXJfaGRyICpldGhfaGRyOw0KPiArCXVpbnQzMng0X3QgdGUsIHZlOw0K PiArDQo+ICsJZXRoX2hkciA9IHJ0ZV9wa3RtYnVmX210b2QocGt0LCBzdHJ1Y3QgZXRoZXJfaGRy ICopOw0KPiArDQo+ICsJdGUgPSB2bGQxcV91MzIoKHVpbnQzMl90ICopZXRoX2hkcik7DQo+ICsJ dmUgPSB2cmVpbnRlcnByZXRxX3UzMl9zMzIodmFsX2V0aFtkc3RfcG9ydFswXV0pOw0KPiArDQo+ ICsNCj4gKwlyZmMxODEyX3Byb2Nlc3MoKHN0cnVjdCBpcHY0X2hkciAqKShldGhfaGRyICsgMSks IGRzdF9wb3J0LA0KPiArCQkJcGt0LT5wYWNrZXRfdHlwZSk7DQo+ICsNCj4gKwl2ZSA9IHZzZXRx X2xhbmVfdTMyKHZnZXRxX2xhbmVfdTMyKHRlLCAzKSwgdmUsIDMpOw0KPiArCXZzdDFxX3UzMigo dWludDMyX3QgKilldGhfaGRyLCB2ZSk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogU2VuZCBw YWNrZXRzIGJ1cnN0IGZyb20gcGt0c19idXJzdCB0byB0aGUgcG9ydHMgaW4gZHN0X3BvcnQgYXJy YXkNCj4gKyAqLw0KPiArc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5l KSkgdm9pZA0KPiArc2VuZF9wYWNrZXRzX211bHRpKHN0cnVjdCBsY29yZV9jb25mICpxY29uZiwg c3RydWN0IHJ0ZV9tYnVmDQo+ICoqcGt0c19idXJzdCwNCj4gKwkJdWludDE2X3QgZHN0X3BvcnRb TUFYX1BLVF9CVVJTVF0sIGludCBuYl9yeCkNCj4gK3sNCj4gKwlpbnQzMl90IGs7DQo+ICsJaW50 IGogPSAwOw0KPiArCXVpbnQxNl90IGRscDsNCj4gKwl1aW50MTZfdCAqbHA7DQo+ICsJdWludDE2 X3QgcG51bVtNQVhfUEtUX0JVUlNUICsgMV07DQo+ICsNCj4gKwkvKg0KPiArCcKgKiBGaW5pc2gg cGFja2V0IHByb2Nlc3NpbmcgYW5kIGdyb3VwIGNvbnNlY3V0aXZlDQo+ICsJwqAqIHBhY2tldHMg d2l0aCB0aGUgc2FtZSBkZXN0aW5hdGlvbiBwb3J0Lg0KPiArCcKgKi8NCj4gKwlrID0gUlRFX0FM SUdOX0ZMT09SKG5iX3J4LCBGV0RTVEVQKTsNCj4gKwlpZiAoayAhPSAwKSB7DQo+ICsJCXVpbnQx Nng4X3QgZHAxLCBkcDI7DQo+ICsNCj4gKwkJbHAgPSBwbnVtOw0KPiArCQlscFswXSA9IDE7DQo+ ICsNCj4gKwkJcHJvY2Vzc3g0X3N0ZXAzKHBrdHNfYnVyc3QsIGRzdF9wb3J0KTsNCj4gKw0KPiAr CQkvKiBkcDE6IDxkWzBdLCBkWzFdLCBkWzJdLCBkWzNdLCAuLi4gPiAqLw0KPiArCQlkcDEgPSB2 bGQxcV91MTYoZHN0X3BvcnQpOw0KPiArDQo+ICsJCWZvciAoaiA9IEZXRFNURVA7IGogIT0gazsg aiArPSBGV0RTVEVQKSB7DQo+ICsJCQlwcm9jZXNzeDRfc3RlcDMoJnBrdHNfYnVyc3Rbal0sDQo+ ICZkc3RfcG9ydFtqXSk7DQo+ICsNCj4gKwkJCS8qDQo+ICsJCQnCoCogZHAyOg0KPiArCQkJwqAq IDxkW2otM10sIGRbai0yXSwgZFtqLTFdLCBkW2pdLCAuLi4gPg0KPiArCQkJwqAqLw0KPiArCQkJ ZHAyID0gdmxkMXFfdTE2KCZkc3RfcG9ydFtqIC0gRldEU1RFUCArIDFdKTsNCj4gKwkJCWxwwqDC oD0gcG9ydF9ncm91cHg0KCZwbnVtW2ogLSBGV0RTVEVQXSwgbHAsDQo+IGRwMSwgZHAyKTsNCj4g Kw0KPiArCQkJLyoNCj4gKwkJCcKgKiBkcDE6DQo+ICsJCQnCoCogPGRbal0sIGRbaisxXSwgZFtq KzJdLCBkW2orM10sIC4uLiA+DQo+ICsJCQnCoCovDQo+ICsJCQlkcDEgPSB2ZXh0cV91MTYoZHAx LCBkcDEsIEZXRFNURVAgLSAxKTsNCj4gKwkJfQ0KPiArDQo+ICsJCS8qDQo+ICsJCcKgKiBkcDI6 IDxkW2otM10sIGRbai0yXSwgZFtqLTFdLCBkW2otMV0sIC4uLiA+DQo+ICsJCcKgKi8NCj4gKwkJ ZHAyID0gdmV4dHFfdTE2KGRwMSwgZHAxLCAxKTsNCj4gKwkJZHAyID0gdnNldHFfbGFuZV91MTYo dmdldHFfbGFuZV91MTYoZHAyLCAyKSwgZHAyLA0KPiAzKTsNCj4gKwkJbHDCoMKgPSBwb3J0X2dy b3VweDQoJnBudW1baiAtIEZXRFNURVBdLCBscCwgZHAxLA0KPiBkcDIpOw0KPiArDQo+ICsJCS8q DQo+ICsJCcKgKiByZW1vdmUgdmFsdWVzIGFkZGVkIGJ5IHRoZSBsYXN0IHJlcGVhdGVkDQo+ICsJ CcKgKiBkc3QgcG9ydC4NCj4gKwkJwqAqLw0KPiArCQlscFswXS0tOw0KPiArCQlkbHAgPSBkc3Rf cG9ydFtqIC0gMV07DQo+ICsJfSBlbHNlIHsNCj4gKwkJLyogc2V0IGRscCBhbmQgbHAgdG8gdGhl IG5ldmVyIHVzZWQgdmFsdWVzLiAqLw0KPiArCQlkbHAgPSBCQURfUE9SVCAtIDE7DQo+ICsJCWxw ID0gcG51bSArIE1BWF9QS1RfQlVSU1Q7DQo+ICsJfQ0KPiArDQo+ICsJLyogUHJvY2VzcyB1cCB0 byBsYXN0IDMgcGFja2V0cyBvbmUgYnkgb25lLiAqLw0KPiArCXN3aXRjaCAobmJfcnggJSBGV0RT VEVQKSB7DQo+ICsJY2FzZSAzOg0KPiArCQlwcm9jZXNzX3BhY2tldChwa3RzX2J1cnN0W2pdLCBk c3RfcG9ydCArIGopOw0KPiArCQlHUk9VUF9QT1JUX1NURVAoZGxwLCBkc3RfcG9ydCwgbHAsIHBu dW0sIGopOw0KPiArCQlqKys7DQo+ICsJCS8qIGZhbGx0aHJvdWdoICovDQo+ICsJY2FzZSAyOg0K PiArCQlwcm9jZXNzX3BhY2tldChwa3RzX2J1cnN0W2pdLCBkc3RfcG9ydCArIGopOw0KPiArCQlH Uk9VUF9QT1JUX1NURVAoZGxwLCBkc3RfcG9ydCwgbHAsIHBudW0sIGopOw0KPiArCQlqKys7DQo+ ICsJCS8qIGZhbGx0aHJvdWdoICovDQo+ICsJY2FzZSAxOg0KPiArCQlwcm9jZXNzX3BhY2tldChw a3RzX2J1cnN0W2pdLCBkc3RfcG9ydCArIGopOw0KPiArCQlHUk9VUF9QT1JUX1NURVAoZGxwLCBk c3RfcG9ydCwgbHAsIHBudW0sIGopOw0KPiArCQlqKys7DQo+ICsJfQ0KPiArDQo+ICsJLyoNCj4g KwnCoCogU2VuZCBwYWNrZXRzIG91dCwgdGhyb3VnaCBkZXN0aW5hdGlvbiBwb3J0Lg0KPiArCcKg KiBDb25zZWN1dGl2ZSBwYWNrZXRzIHdpdGggdGhlIHNhbWUgZGVzdGluYXRpb24gcG9ydA0KPiAr CcKgKiBhcmUgYWxyZWFkeSBncm91cGVkIHRvZ2V0aGVyLg0KPiArCcKgKiBJZiBkZXN0aW5hdGlv biBwb3J0IGZvciB0aGUgcGFja2V0IGVxdWFscyBCQURfUE9SVCwNCj4gKwnCoCogdGhlbiBmcmVl IHRoZSBwYWNrZXQgd2l0aG91dCBzZW5kaW5nIGl0IG91dC4NCj4gKwnCoCovDQo+ICsJZm9yIChq ID0gMDsgaiA8IG5iX3J4OyBqICs9IGspIHsNCj4gKw0KPiArCQlpbnQzMl90IG07DQo+ICsJCXVp bnQxNl90IHBuOw0KPiArDQo+ICsJCXBuID0gZHN0X3BvcnRbal07DQo+ICsJCWsgPSBwbnVtW2pd Ow0KPiArDQo+ICsJCWlmIChsaWtlbHkocG4gIT0gQkFEX1BPUlQpKQ0KPiArCQkJc2VuZF9wYWNr ZXRzeDQocWNvbmYsIHBuLCBwa3RzX2J1cnN0ICsgaiwNCj4gayk7DQo+ICsJCWVsc2UNCj4gKwkJ CWZvciAobSA9IGo7IG0gIT0gaiArIGs7IG0rKykNCj4gKwkJCQlydGVfcGt0bWJ1Zl9mcmVlKHBr dHNfYnVyc3RbbV0pOw0KPiArDQo+ICsJfQ0KPiArfQ0KPiArDQo+ICsjZW5kaWYgLyogX0wzRldE X05FT05fSF8gKi8NCg0KVGhhbmtzIGFuZCBSZWdhcmRzDQpBc2h3aW4=