From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id A1D73A04F9; Fri, 10 Jan 2020 15:36:27 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id D32A01EA89; Fri, 10 Jan 2020 15:36:26 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by dpdk.org (Postfix) with ESMTP id 79AAD1EA81 for ; Fri, 10 Jan 2020 15:36:24 +0100 (CET) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 00AEZaLX003202; Fri, 10 Jan 2020 06:36:23 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-id : content-transfer-encoding : mime-version; s=pfpt0818; bh=Qb4zrN3SbL4yKFZ+Kop+tgs6Y+7hMAS7CUl1OKw0ue8=; b=eclFDNi2jUrIWwwO5EOuyttv8zvzBOafAREV29EwYRhdDU9Bzm2qH2xTXAiVMCps+x4E iMhYrsywQZzaMck6BIKtLixw3hewmi1/XOyAoLr00CzZnxgEHyhOLs9ysT3rMcn72zNn O1R66AN0LL29DgmYLFaY2B20xG4D2vNTN6gIBMaYYwcPzmu1P3COOViM59gUskdwgKKc 6rK7AxqmDsBTsDn0UlaI2oCT63SlabF+QOQP1PsJrBACN8+/h5LfYwnoXaN8dXdVJWHn h1lW3tDGR+gVHWhV9hicyQRlh0pfk7O1IO0Ne2pT8QPlm8s6zBYvRPG5L5Xfl1KR2QIh EQ== Received: from sc-exch01.marvell.com ([199.233.58.181]) by mx0b-0016f401.pphosted.com with ESMTP id 2xdu326t19-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Fri, 10 Jan 2020 06:36:23 -0800 Received: from SC-EXCH02.marvell.com (10.93.176.82) by SC-EXCH01.marvell.com (10.93.176.81) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 10 Jan 2020 06:36:21 -0800 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.174) by SC-EXCH02.marvell.com (10.93.176.82) with Microsoft SMTP Server (TLS) id 15.0.1497.2 via Frontend Transport; Fri, 10 Jan 2020 06:36:21 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Jrb5b5t8/XOe69nPxrhzQCooHPwZo6NWNEGcX5ocG/pX4EWsiDC6HYBeeZxgCB4YgaKJOLSGd5uy5gSUUR9Jz7s6Dutajh+mKEnq8FiDT5uPjTtSqnqh4p8SlMXquvkeRCBEhmMfD8wJpyYEYaHlUfmnXg6k+eMe9gFI94JH0jVL2CK8Ug4OLuXTDy2J/lpGaXuWKzLnEZxgeWowqQTfENCRqjUEoQc5zx/kupI+lHRfE0hCRvdJM+OUbmShScJGwuh/IIYmLAnlZ84RzrQ2XbQm+F8wJfBkVYoNCXWothuwJUkfzRZ9f5R5AF0nu/SDCleFJrsxDBB1eyidN3pXLw== 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=Qb4zrN3SbL4yKFZ+Kop+tgs6Y+7hMAS7CUl1OKw0ue8=; b=bG3kz13i+uMhoT7jEWlchKFZAc/UEFaImI6GwSVduSquFZ5or9/FM00dpQBC/y5m7m+HUwtB/QMmhD2E5twG04x7p4La6n4SiXLCuk9acLQ7KA7pRS3kCDdJuELGjLlzjwboV2Uotq17XT1hd2vXf2BGSrHK+9YtJcOHf0zogWWb0z+tF9GkYnR52zAX8pvaOWRY8d0psWRtyAf93pyRM4fkl2txmQUPoIE43vMJHZagYDo/JvVVUSN+SjqU1iS75lHB5gnUeezb1/RLZn8vRyvEDDjytIXiLyZyShkMFUrSuqaaSIwHO98WbE6oTmaui7bD/eGtvcMC9WJGkCcpaA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=marvell.com; dmarc=pass action=none header.from=marvell.com; dkim=pass header.d=marvell.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.onmicrosoft.com; s=selector1-marvell-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Qb4zrN3SbL4yKFZ+Kop+tgs6Y+7hMAS7CUl1OKw0ue8=; b=FqQCSoE06D4xIkb6ja8ykv1wsBgwl0VTZh0W57AX997avlTsx3Bxqgm6HvEo5ehvUcCUAcBYrX8hHqGy28vZesWQiPKa6SOuwp+pzIV0GeXBSTopgG6yXJDFYqAuJkJTXnk+odhZmKU0TWpbGOIneey1TfYINDlQpJphL1RIUhg= Received: from BYAPR18MB2599.namprd18.prod.outlook.com (20.179.92.16) by BYAPR18MB2711.namprd18.prod.outlook.com (20.179.58.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2623.9; Fri, 10 Jan 2020 14:36:19 +0000 Received: from BYAPR18MB2599.namprd18.prod.outlook.com ([fe80::4df3:88f0:2afd:622f]) by BYAPR18MB2599.namprd18.prod.outlook.com ([fe80::4df3:88f0:2afd:622f%4]) with mapi id 15.20.2602.016; Fri, 10 Jan 2020 14:36:19 +0000 From: Lukas Bartosik To: "Ananyev, Konstantin" , Anoob Joseph , Akhil Goyal , "Nicolau, Radu" , Thomas Monjalon CC: Jerin Jacob Kollanukkaran , "Narayana Prasad Raju Athreya" , Ankur Dwivedi , "Archana Muniganti" , Tejasree Kondoj , Vamsi Krishna Attunuru , "dev@dpdk.org" Thread-Topic: [EXT] RE: [PATCH 11/14] examples/ipsec-secgw: add app processing code Thread-Index: AQHVrcOHcEZrFcDSH06C7TNvX9KKB6fJXDsAgBrO4IA= Date: Fri, 10 Jan 2020 14:36:19 +0000 Message-ID: <63fef73a-f2d4-001d-7e2e-a21165e2eec9@marvell.com> References: <1575808249-31135-1-git-send-email-anoobj@marvell.com> <1575808249-31135-12-git-send-email-anoobj@marvell.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [199.233.58.37] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 17e3e2fc-2bbc-4c73-c93f-08d795da7536 x-ms-traffictypediagnostic: BYAPR18MB2711: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8273; x-forefront-prvs: 02788FF38E x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(366004)(136003)(346002)(396003)(376002)(39860400002)(199004)(189003)(26005)(81166006)(31696002)(81156014)(478600001)(30864003)(316002)(110136005)(8676002)(2906002)(64756008)(66556008)(66446008)(31686004)(54906003)(86362001)(53546011)(186003)(6506007)(71200400001)(8936002)(4326008)(36756003)(6512007)(66476007)(5660300002)(2616005)(6486002)(66946007)(76116006); DIR:OUT; SFP:1101; SCL:1; SRVR:BYAPR18MB2711; H:BYAPR18MB2599.namprd18.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: marvell.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: cRH0oucgSrDzs/XuP5xVzDaKZ6fYVob57mAi6KD3ecuNplOzE/DyYAj7R/dxovZBe5AEObatFQvm0Tf8jDBYGXO9EkXGvxt6MrwcSXRFi6EWg18RP4vPYTqFQDcKU2EL7ky4JGQEb2cN5PU0SQPEnufqHsfX2IdEAii4b3DEzazcprsiKLdt0Bw187UcPrT8Q9Ams85obJA1yOjETMQWk/mOlnyxvLjLP1aMV0+EWS4YTWJiUrudnFslZAgLvwKAB1o6ctH+67I+1z6BSB8iCxC/VB8J+moJHMJHCiMsNLLJ7hgYunXEFZdg4YnQxRgxaGWXY4abqCCkwNTXkNZdXZzhtDPTmgqMyOOZwqGa2B1tNWhPi+hH3pSsj42k+TEqs9AownzIEiDFCx/LYYqgl99vJrhp6zgcYYrTdub1fFjh1vfXmtcqBib3ONXaYj26 Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 17e3e2fc-2bbc-4c73-c93f-08d795da7536 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 Jan 2020 14:36:19.6159 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 70e1fb47-1155-421d-87fc-2e58f638b6e0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: VmtUuwjSCYi+ckLDD484w5eudUNIMn3vL3S7PdMTonC9ufe+XJ+QKF9UjOXtScu6A49nBuGrAzKX53sT9ChOsA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR18MB2711 X-OriginatorOrg: marvell.com X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.572 definitions=2020-01-10_01:2020-01-10, 2020-01-09 signatures=0 Subject: Re: [dpdk-dev] [EXT] RE: [PATCH 11/14] examples/ipsec-secgw: add app processing code 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" SGkgS29uc3RhbnRpbiwNCg0KUGxlYXNlIHNlZSBpbmxpbmUuDQoNClRoYW5rcywNCkx1a2Fzeg0K DQpPbiAyNC4xMi4yMDE5IDE0OjEzLCBBbmFueWV2LCBLb25zdGFudGluIHdyb3RlOg0KPiBFeHRl cm5hbCBFbWFpbA0KPiANCj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiANCj4+IC0tLSBhL2V4YW1wbGVzL2lw c2VjLXNlY2d3L2lwc2VjX3dvcmtlci5jDQo+PiArKysgYi9leGFtcGxlcy9pcHNlYy1zZWNndy9p cHNlY193b3JrZXIuYw0KPj4gQEAgLTE1LDYgKzE1LDcgQEANCj4+ICAjaW5jbHVkZSA8Y3R5cGUu aD4NCj4+ICAjaW5jbHVkZSA8c3RkYm9vbC5oPg0KPj4NCj4+ICsjaW5jbHVkZSA8cnRlX2FjbC5o Pg0KPj4gICNpbmNsdWRlIDxydGVfY29tbW9uLmg+DQo+PiAgI2luY2x1ZGUgPHJ0ZV9sb2cuaD4N Cj4+ICAjaW5jbHVkZSA8cnRlX21lbWNweS5oPg0KPj4gQEAgLTI5LDEyICszMCw1MSBAQA0KPj4g ICNpbmNsdWRlIDxydGVfZXZlbnRkZXYuaD4NCj4+ICAjaW5jbHVkZSA8cnRlX21hbGxvYy5oPg0K Pj4gICNpbmNsdWRlIDxydGVfbWJ1Zi5oPg0KPj4gKyNpbmNsdWRlIDxydGVfbHBtLmg+DQo+PiAr I2luY2x1ZGUgPHJ0ZV9scG02Lmg+DQo+Pg0KPj4gICNpbmNsdWRlICJpcHNlYy5oIg0KPj4gKyNp bmNsdWRlICJpcHNlY193b3JrZXIuaCINCj4+ICAjaW5jbHVkZSAiZXZlbnRfaGVscGVyLmgiDQo+ Pg0KPj4gIGV4dGVybiB2b2xhdGlsZSBib29sIGZvcmNlX3F1aXQ7DQo+Pg0KPj4gK3N0YXRpYyBp bmxpbmUgZW51bSBwa3RfdHlwZQ0KPj4gK3Byb2Nlc3NfaXBzZWNfZ2V0X3BrdF90eXBlKHN0cnVj dCBydGVfbWJ1ZiAqcGt0LCB1aW50OF90ICoqbmxwKQ0KPj4gK3sNCj4+ICsJc3RydWN0IHJ0ZV9l dGhlcl9oZHIgKmV0aDsNCj4+ICsNCj4+ICsJZXRoID0gcnRlX3BrdG1idWZfbXRvZChwa3QsIHN0 cnVjdCBydGVfZXRoZXJfaGRyICopOw0KPj4gKwlpZiAoZXRoLT5ldGhlcl90eXBlID09IHJ0ZV9j cHVfdG9fYmVfMTYoUlRFX0VUSEVSX1RZUEVfSVBWNCkpIHsNCj4+ICsJCSpubHAgPSBSVEVfUFRS X0FERChldGgsIFJURV9FVEhFUl9IRFJfTEVOICsNCj4+ICsJCQkJb2Zmc2V0b2Yoc3RydWN0IGlw LCBpcF9wKSk7DQo+PiArCQlpZiAoKipubHAgPT0gSVBQUk9UT19FU1ApDQo+PiArCQkJcmV0dXJu IFBLVF9UWVBFX0lQU0VDX0lQVjQ7DQo+PiArCQllbHNlDQo+PiArCQkJcmV0dXJuIFBLVF9UWVBF X1BMQUlOX0lQVjQ7DQo+PiArCX0gZWxzZSBpZiAoZXRoLT5ldGhlcl90eXBlID09IHJ0ZV9jcHVf dG9fYmVfMTYoUlRFX0VUSEVSX1RZUEVfSVBWNikpIHsNCj4+ICsJCSpubHAgPSBSVEVfUFRSX0FE RChldGgsIFJURV9FVEhFUl9IRFJfTEVOICsNCj4+ICsJCQkJb2Zmc2V0b2Yoc3RydWN0IGlwNl9o ZHIsIGlwNl9ueHQpKTsNCj4+ICsJCWlmICgqKm5scCA9PSBJUFBST1RPX0VTUCkNCj4+ICsJCQly ZXR1cm4gUEtUX1RZUEVfSVBTRUNfSVBWNjsNCj4+ICsJCWVsc2UNCj4+ICsJCQlyZXR1cm4gUEtU X1RZUEVfUExBSU5fSVBWNjsNCj4+ICsJfQ0KPj4gKw0KPj4gKwkvKiBVbmtub3duL1Vuc3VwcG9y dGVkIHR5cGUgKi8NCj4+ICsJcmV0dXJuIFBLVF9UWVBFX0lOVkFMSUQ7DQo+PiArfQ0KPiANCj4g TG9va2luZyB0aG91Z2ggdGhhdCBmaWxlLCBpdCBzZWVtcyBsaWtlIHlvdSBjaG9vc2UgdG8gY3Jl YXRlIHlvdXIgb3duIHNldCBvZg0KPiBoZWxwZXIgZnVuY3Rpb25zLCBpbnN0ZWFkIG9mIHRyeWlu ZyB0byByZXVzZSBleGlzdGluZyBvbmVzOiANCj4gDQo+IHByb2Nlc3NfaXBzZWNfZ2V0X3BrdF90 eXBlKCkgIFZTIHByZXBhcmVfb25lX3BhY2tldCgpDQo+IHVwZGF0ZV9tYWNfYWRkcnMoKSBWUyBw cmVwYXJlX3R4X3BrdCgpDQo+IGNoZWNrX3NwKCkgVlMgIGluYm91bmRfc3Bfc2EoKQ0KPiANCj4g T2J2aW91c2x5IHRoZXJlIGlzIG5vdGhpbmcgZ29vZCBpbiBjb2RlIChhbmQgcG9zc2libGUgYnVn cykgZHVwbGljYXRpb24uDQo+IEFueSByZWFzb24gd2h5IHlvdSBjYW4ndCByZXVzZSBleGlzdGlu ZyBmdW5jdGlvbnMgYW5kIG5lZWQgdG8gcmVpbnZlbnQgeW91ciBvd24/DQoNCltMdWthc3pdIFRo ZSBwcmVwYXJlX29uZV9wYWNrZXQoKSBhbmQgcHJlcGFyZV90eF9wa3QoKSBkbyBtdWNoIG1vcmUg dGhhbiB3ZSBuZWVkIGFuZCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucw0Kd2UgY3JhZnRlZCBuZXcg ZnVuY3Rpb25zLiBGb3IgZXhhbXBsZSBwcm9jZXNzX2lwc2VjX2dldF9wa3RfdHlwZSBmdW5jdGlv biByZXR1cm5zIG5scCBhbmQgd2hldGhlcg0KcGFja2V0IHR5cGUgaXMgcGxhaW4gb3IgSVBzZWMu IFRoYXQncyBhbGwuIFByZXBhcmVfb25lX3BhY2tldCgpIHByb2Nlc3MgcGFja2V0cyBpbiBjaHVu a3MgYW5kIGRvZXMgbXVjaCBtb3JlIC0NCml0IGFkanVzdHMgbWJ1ZiBhbmQgaXB2NCBsZW5ndGhz IHRoZW4gaXQgZGVtdWx0aXBsZXggcGFja2V0IGludG8gcGxhbiBhbmQgSVBzZWMgZmxvd3MgYW5k IGZpbmFsbHkgZG9lcyANCmlubGluZSBjaGVja3MuIFRoaXMgaXMgc2ltaWxhciBmb3IgdXBkYXRl X21hY19hZGRycygpIHZzIHByZXBhcmVfdHhfcGt0KCkgYW5kIGNoZWNrX3NwKCkgdnMgaW5ib3Vu ZF9zcF9zYSgpDQp0aGF0IHByZXBhcmVfdHhfcGt0KCkgYW5kIGluYm91bmRfc3Bfc2EoKSBkbyBt b3JlIHRoYXQgd2UgbmVlZCBpbiBldmVudCBtb2RlLg0KDQo+IA0KPj4gKw0KPj4gK3N0YXRpYyBp bmxpbmUgdm9pZA0KPj4gK3VwZGF0ZV9tYWNfYWRkcnMoc3RydWN0IHJ0ZV9tYnVmICpwa3QsIHVp bnQxNl90IHBvcnRpZCkNCj4+ICt7DQo+PiArCXN0cnVjdCBydGVfZXRoZXJfaGRyICpldGhoZHI7 DQo+PiArDQo+PiArCWV0aGhkciA9IHJ0ZV9wa3RtYnVmX210b2QocGt0LCBzdHJ1Y3QgcnRlX2V0 aGVyX2hkciAqKTsNCj4+ICsJbWVtY3B5KCZldGhoZHItPnNfYWRkciwgJmV0aGFkZHJfdGJsW3Bv cnRpZF0uc3JjLCBSVEVfRVRIRVJfQUREUl9MRU4pOw0KPj4gKwltZW1jcHkoJmV0aGhkci0+ZF9h ZGRyLCAmZXRoYWRkcl90YmxbcG9ydGlkXS5kc3QsIFJURV9FVEhFUl9BRERSX0xFTik7DQo+PiAr fQ0KPj4gKw0KPj4gIHN0YXRpYyBpbmxpbmUgdm9pZA0KPj4gIGlwc2VjX2V2ZW50X3ByZV9mb3J3 YXJkKHN0cnVjdCBydGVfbWJ1ZiAqbSwgdW5zaWduZWQgaW50IHBvcnRfaWQpDQo+PiAgew0KPj4g QEAgLTQ1LDYgKzg1LDE3NyBAQCBpcHNlY19ldmVudF9wcmVfZm9yd2FyZChzdHJ1Y3QgcnRlX21i dWYgKm0sIHVuc2lnbmVkIGludCBwb3J0X2lkKQ0KPj4gIAlydGVfZXZlbnRfZXRoX3R4X2FkYXB0 ZXJfdHhxX3NldChtLCAwKTsNCj4+ICB9DQo+Pg0KPj4gK3N0YXRpYyBpbmxpbmUgaW50DQo+PiAr Y2hlY2tfc3Aoc3RydWN0IHNwX2N0eCAqc3AsIGNvbnN0IHVpbnQ4X3QgKm5scCwgdWludDMyX3Qg KnNhX2lkeCkNCj4+ICt7DQo+PiArCXVpbnQzMl90IHJlczsNCj4+ICsNCj4+ICsJaWYgKHVubGlr ZWx5KHNwID09IE5VTEwpKQ0KPj4gKwkJcmV0dXJuIDA7DQo+PiArDQo+PiArCXJ0ZV9hY2xfY2xh c3NpZnkoKHN0cnVjdCBydGVfYWNsX2N0eCAqKXNwLCAmbmxwLCAmcmVzLCAxLA0KPj4gKwkJCURF RkFVTFRfTUFYX0NBVEVHT1JJRVMpOw0KPj4gKw0KPj4gKwlpZiAodW5saWtlbHkocmVzID09IDAp KSB7DQo+PiArCQkvKiBObyBtYXRjaCAqLw0KPj4gKwkJcmV0dXJuIDA7DQo+PiArCX0NCj4+ICsN Cj4+ICsJaWYgKHJlcyA9PSBESVNDQVJEKQ0KPj4gKwkJcmV0dXJuIDA7DQo+PiArCWVsc2UgaWYg KHJlcyA9PSBCWVBBU1MpIHsNCj4+ICsJCSpzYV9pZHggPSAwOw0KPj4gKwkJcmV0dXJuIDE7DQo+ PiArCX0NCj4+ICsNCj4+ICsJKnNhX2lkeCA9IFNQSTJJRFgocmVzKTsNCj4+ICsJaWYgKCpzYV9p ZHggPCBJUFNFQ19TQV9NQVhfRU5UUklFUykNCj4+ICsJCXJldHVybiAxOw0KPj4gKw0KPj4gKwkv KiBJbnZhbGlkIFNBIElEWCAqLw0KPj4gKwlyZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3Rh dGljIGlubGluZSB1aW50MTZfdA0KPj4gK3JvdXRlNF9wa3Qoc3RydWN0IHJ0ZV9tYnVmICpwa3Qs IHN0cnVjdCBydF9jdHggKnJ0X2N0eCkNCj4+ICt7DQo+PiArCXVpbnQzMl90IGRzdF9pcDsNCj4+ ICsJdWludDE2X3Qgb2Zmc2V0Ow0KPj4gKwl1aW50MzJfdCBob3A7DQo+PiArCWludCByZXQ7DQo+ PiArDQo+PiArCW9mZnNldCA9IFJURV9FVEhFUl9IRFJfTEVOICsgb2Zmc2V0b2Yoc3RydWN0IGlw LCBpcF9kc3QpOw0KPj4gKwlkc3RfaXAgPSAqcnRlX3BrdG1idWZfbXRvZF9vZmZzZXQocGt0LCB1 aW50MzJfdCAqLCBvZmZzZXQpOw0KPj4gKwlkc3RfaXAgPSBydGVfYmVfdG9fY3B1XzMyKGRzdF9p cCk7DQo+PiArDQo+PiArCXJldCA9IHJ0ZV9scG1fbG9va3VwKChzdHJ1Y3QgcnRlX2xwbSAqKXJ0 X2N0eCwgZHN0X2lwLCAmaG9wKTsNCj4+ICsNCj4+ICsJaWYgKHJldCA9PSAwKSB7DQo+PiArCQkv KiBXZSBoYXZlIGEgaGl0ICovDQo+PiArCQlyZXR1cm4gaG9wOw0KPj4gKwl9DQo+PiArDQo+PiAr CS8qIGVsc2UgKi8NCj4+ICsJcmV0dXJuIFJURV9NQVhfRVRIUE9SVFM7DQo+PiArfQ0KPj4gKw0K Pj4gKy8qIFRPRE86IFRvIGJlIHRlc3RlZCAqLw0KPj4gK3N0YXRpYyBpbmxpbmUgdWludDE2X3QN Cj4+ICtyb3V0ZTZfcGt0KHN0cnVjdCBydGVfbWJ1ZiAqcGt0LCBzdHJ1Y3QgcnRfY3R4ICpydF9j dHgpDQo+PiArew0KPj4gKwl1aW50OF90IGRzdF9pcFsxNl07DQo+PiArCXVpbnQ4X3QgKmlwNl9k c3Q7DQo+PiArCXVpbnQxNl90IG9mZnNldDsNCj4+ICsJdWludDMyX3QgaG9wOw0KPj4gKwlpbnQg cmV0Ow0KPj4gKw0KPj4gKwlvZmZzZXQgPSBSVEVfRVRIRVJfSERSX0xFTiArIG9mZnNldG9mKHN0 cnVjdCBpcDZfaGRyLCBpcDZfZHN0KTsNCj4+ICsJaXA2X2RzdCA9IHJ0ZV9wa3RtYnVmX210b2Rf b2Zmc2V0KHBrdCwgdWludDhfdCAqLCBvZmZzZXQpOw0KPj4gKwltZW1jcHkoJmRzdF9pcFswXSwg aXA2X2RzdCwgMTYpOw0KPj4gKw0KPj4gKwlyZXQgPSBydGVfbHBtNl9sb29rdXAoKHN0cnVjdCBy dGVfbHBtNiAqKXJ0X2N0eCwgZHN0X2lwLCAmaG9wKTsNCj4+ICsNCj4+ICsJaWYgKHJldCA9PSAw KSB7DQo+PiArCQkvKiBXZSBoYXZlIGEgaGl0ICovDQo+PiArCQlyZXR1cm4gaG9wOw0KPj4gKwl9 DQo+PiArDQo+PiArCS8qIGVsc2UgKi8NCj4+ICsJcmV0dXJuIFJURV9NQVhfRVRIUE9SVFM7DQo+ PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbmxpbmUgdWludDE2X3QNCj4+ICtnZXRfcm91dGUoc3Ry dWN0IHJ0ZV9tYnVmICpwa3QsIHN0cnVjdCByb3V0ZV90YWJsZSAqcnQsIGVudW0gcGt0X3R5cGUg dHlwZSkNCj4+ICt7DQo+PiArCWlmICh0eXBlID09IFBLVF9UWVBFX1BMQUlOX0lQVjQgfHwgdHlw ZSA9PSBQS1RfVFlQRV9JUFNFQ19JUFY0KQ0KPj4gKwkJcmV0dXJuIHJvdXRlNF9wa3QocGt0LCBy dC0+cnQ0X2N0eCk7DQo+PiArCWVsc2UgaWYgKHR5cGUgPT0gUEtUX1RZUEVfUExBSU5fSVBWNiB8 fCB0eXBlID09IFBLVF9UWVBFX0lQU0VDX0lQVjYpDQo+PiArCQlyZXR1cm4gcm91dGU2X3BrdChw a3QsIHJ0LT5ydDZfY3R4KTsNCj4+ICsNCj4+ICsJcmV0dXJuIFJURV9NQVhfRVRIUE9SVFM7DQo+ PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbmxpbmUgaW50DQo+PiArcHJvY2Vzc19pcHNlY19ldl9p bmJvdW5kKHN0cnVjdCBpcHNlY19jdHggKmN0eCwgc3RydWN0IHJvdXRlX3RhYmxlICpydCwNCj4+ ICsJCXN0cnVjdCBydGVfZXZlbnQgKmV2KQ0KPj4gK3sNCj4+ICsJc3RydWN0IGlwc2VjX3NhICpz YSA9IE5VTEw7DQo+PiArCXN0cnVjdCBydGVfbWJ1ZiAqcGt0Ow0KPj4gKwl1aW50MTZfdCBwb3J0 X2lkID0gMDsNCj4+ICsJZW51bSBwa3RfdHlwZSB0eXBlOw0KPj4gKwl1aW50MzJfdCBzYV9pZHg7 DQo+PiArCXVpbnQ4X3QgKm5scDsNCj4+ICsNCj4+ICsJLyogR2V0IHBrdCBmcm9tIGV2ZW50ICov DQo+PiArCXBrdCA9IGV2LT5tYnVmOw0KPj4gKw0KPj4gKwkvKiBDaGVjayB0aGUgcGFja2V0IHR5 cGUgKi8NCj4+ICsJdHlwZSA9IHByb2Nlc3NfaXBzZWNfZ2V0X3BrdF90eXBlKHBrdCwgJm5scCk7 DQo+PiArDQo+PiArCXN3aXRjaCAodHlwZSkgew0KPj4gKwljYXNlIFBLVF9UWVBFX1BMQUlOX0lQ VjQ6DQo+PiArCQlpZiAocGt0LT5vbF9mbGFncyAmIFBLVF9SWF9TRUNfT0ZGTE9BRCkNCj4+ICsJ CQlzYSA9IChzdHJ1Y3QgaXBzZWNfc2EgKikgcGt0LT51ZGF0YTY0Ow0KPj4gKw0KPj4gKwkJLyog Q2hlY2sgaWYgd2UgaGF2ZSBhIG1hdGNoICovDQo+PiArCQlpZiAoY2hlY2tfc3AoY3R4LT5zcDRf Y3R4LCBubHAsICZzYV9pZHgpID09IDApIHsNCj4+ICsJCQkvKiBObyB2YWxpZCBtYXRjaCAqLw0K Pj4gKwkJCWdvdG8gZHJvcF9wa3RfYW5kX2V4aXQ7DQo+PiArCQl9DQo+PiArCQlicmVhazsNCj4+ ICsNCj4+ICsJY2FzZSBQS1RfVFlQRV9QTEFJTl9JUFY2Og0KPj4gKwkJaWYgKHBrdC0+b2xfZmxh Z3MgJiBQS1RfUlhfU0VDX09GRkxPQUQpDQo+PiArCQkJc2EgPSAoc3RydWN0IGlwc2VjX3NhICop IHBrdC0+dWRhdGE2NDsNCj4+ICsNCj4+ICsJCS8qIENoZWNrIGlmIHdlIGhhdmUgYSBtYXRjaCAq Lw0KPj4gKwkJaWYgKGNoZWNrX3NwKGN0eC0+c3A2X2N0eCwgbmxwLCAmc2FfaWR4KSA9PSAwKSB7 DQo+PiArCQkJLyogTm8gdmFsaWQgbWF0Y2ggKi8NCj4+ICsJCQlnb3RvIGRyb3BfcGt0X2FuZF9l eGl0Ow0KPj4gKwkJfQ0KPj4gKwkJYnJlYWs7DQo+PiArDQo+PiArCWRlZmF1bHQ6DQo+PiArCQlS VEVfTE9HKEVSUiwgSVBTRUMsICJVbnN1cHBvcnRlZCBwYWNrZXQgdHlwZSA9ICVkXG4iLCB0eXBl KTsNCj4+ICsJCWdvdG8gZHJvcF9wa3RfYW5kX2V4aXQ7DQo+PiArCX0NCj4+ICsNCj4+ICsJLyog Q2hlY2sgaWYgdGhlIHBhY2tldCBoYXMgdG8gYmUgYnlwYXNzZWQgKi8NCj4+ICsJaWYgKHNhX2lk eCA9PSAwKQ0KPj4gKwkJZ290byByb3V0ZV9hbmRfc2VuZF9wa3Q7DQo+PiArDQo+PiArCS8qIEVs c2UgdGhlIHBhY2tldCBoYXMgdG8gYmUgcHJvdGVjdGVkIHdpdGggU0EgKi8NCj4+ICsNCj4+ICsJ LyogSWYgdGhlIHBhY2tldCB3YXMgSVBzZWMgcHJvY2Vzc2VkLCB0aGVuIFNBIHBvaW50ZXIgc2hv dWxkIGJlIHNldCAqLw0KPj4gKwlpZiAoc2EgPT0gTlVMTCkNCj4+ICsJCWdvdG8gZHJvcF9wa3Rf YW5kX2V4aXQ7DQo+PiArDQo+PiArCS8qIFNQSSBvbiB0aGUgcGFja2V0IHNob3VsZCBtYXRjaCB3 aXRoIHRoZSBvbmUgaW4gU0EgKi8NCj4+ICsJaWYgKHVubGlrZWx5KHNhLT5zcGkgIT0gc2FfaWR4 KSkNCj4+ICsJCWdvdG8gZHJvcF9wa3RfYW5kX2V4aXQ7DQo+PiArDQo+PiArcm91dGVfYW5kX3Nl bmRfcGt0Og0KPj4gKwlwb3J0X2lkID0gZ2V0X3JvdXRlKHBrdCwgcnQsIHR5cGUpOw0KPj4gKwlp ZiAodW5saWtlbHkocG9ydF9pZCA9PSBSVEVfTUFYX0VUSFBPUlRTKSkgew0KPj4gKwkJLyogbm8g bWF0Y2ggKi8NCj4+ICsJCWdvdG8gZHJvcF9wa3RfYW5kX2V4aXQ7DQo+PiArCX0NCj4+ICsJLyog ZWxzZSwgd2UgaGF2ZSBhIG1hdGNoaW5nIHJvdXRlICovDQo+PiArDQo+PiArCS8qIFVwZGF0ZSBt YWMgYWRkcmVzc2VzICovDQo+PiArCXVwZGF0ZV9tYWNfYWRkcnMocGt0LCBwb3J0X2lkKTsNCj4+ ICsNCj4+ICsJLyogVXBkYXRlIHRoZSBldmVudCB3aXRoIHRoZSBkZXN0IHBvcnQgKi8NCj4+ICsJ aXBzZWNfZXZlbnRfcHJlX2ZvcndhcmQocGt0LCBwb3J0X2lkKTsNCj4+ICsJcmV0dXJuIDE7DQo+ PiArDQo+PiArZHJvcF9wa3RfYW5kX2V4aXQ6DQo+PiArCVJURV9MT0coRVJSLCBJUFNFQywgIklu Ym91bmQgcGFja2V0IGRyb3BwZWRcbiIpOw0KPj4gKwlydGVfcGt0bWJ1Zl9mcmVlKHBrdCk7DQo+ PiArCWV2LT5tYnVmID0gTlVMTDsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gIC8q DQo+PiAgICogRXZlbnQgbW9kZSBleHBvc2VzIHZhcmlvdXMgb3BlcmF0aW5nIG1vZGVzIGRlcGVu ZGluZyBvbiB0aGUNCj4+ICAgKiBjYXBhYmlsaXRpZXMgb2YgdGhlIGV2ZW50IGRldmljZSBhbmQg dGhlIG9wZXJhdGluZyBtb2RlDQo+PiBAQCAtMTM0LDExICszNDUsMTEgQEAgc3RhdGljIHZvaWQN Cj4+ICBpcHNlY193cmtyX25vbl9idXJzdF9pbnRfcG9ydF9hcHBfbW9kZV9pbmIoc3RydWN0IGVo X2V2ZW50X2xpbmtfaW5mbyAqbGlua3MsDQo+PiAgCQl1aW50OF90IG5iX2xpbmtzKQ0KPj4gIHsN Cj4+ICsJc3RydWN0IGxjb3JlX2NvbmZfZXZfdHhfaW50X3BvcnRfd3JrciBsY29uZjsNCj4+ICAJ dW5zaWduZWQgaW50IG5iX3J4ID0gMDsNCj4+IC0JdW5zaWduZWQgaW50IHBvcnRfaWQ7DQo+PiAt CXN0cnVjdCBydGVfbWJ1ZiAqcGt0Ow0KPj4gIAlzdHJ1Y3QgcnRlX2V2ZW50IGV2Ow0KPj4gIAl1 aW50MzJfdCBsY29yZV9pZDsNCj4+ICsJaW50MzJfdCBzb2NrZXRfaWQ7DQo+Pg0KPj4gIAkvKiBD aGVjayBpZiB3ZSBoYXZlIGxpbmtzIHJlZ2lzdGVyZWQgZm9yIHRoaXMgbGNvcmUgKi8NCj4+ICAJ aWYgKG5iX2xpbmtzID09IDApIHsNCj4+IEBAIC0xNTEsNiArMzYyLDIxIEBAIGlwc2VjX3dya3Jf bm9uX2J1cnN0X2ludF9wb3J0X2FwcF9tb2RlX2luYihzdHJ1Y3QgZWhfZXZlbnRfbGlua19pbmZv ICpsaW5rcywNCj4+ICAJLyogR2V0IGNvcmUgSUQgKi8NCj4+ICAJbGNvcmVfaWQgPSBydGVfbGNv cmVfaWQoKTsNCj4+DQo+PiArCS8qIEdldCBzb2NrZXQgSUQgKi8NCj4+ICsJc29ja2V0X2lkID0g cnRlX2xjb3JlX3RvX3NvY2tldF9pZChsY29yZV9pZCk7DQo+PiArDQo+PiArCS8qIFNhdmUgcm91 dGluZyB0YWJsZSAqLw0KPj4gKwlsY29uZi5ydC5ydDRfY3R4ID0gc29ja2V0X2N0eFtzb2NrZXRf aWRdLnJ0X2lwNDsNCj4+ICsJbGNvbmYucnQucnQ2X2N0eCA9IHNvY2tldF9jdHhbc29ja2V0X2lk XS5ydF9pcDY7DQo+PiArCWxjb25mLmluYm91bmQuc3A0X2N0eCA9IHNvY2tldF9jdHhbc29ja2V0 X2lkXS5zcF9pcDRfaW47DQo+PiArCWxjb25mLmluYm91bmQuc3A2X2N0eCA9IHNvY2tldF9jdHhb c29ja2V0X2lkXS5zcF9pcDZfaW47DQo+PiArCWxjb25mLmluYm91bmQuc2FfY3R4ID0gc29ja2V0 X2N0eFtzb2NrZXRfaWRdLnNhX2luOw0KPj4gKwlsY29uZi5pbmJvdW5kLnNlc3Npb25fcG9vbCA9 IHNvY2tldF9jdHhbc29ja2V0X2lkXS5zZXNzaW9uX3Bvb2w7DQo+PiArCWxjb25mLm91dGJvdW5k LnNwNF9jdHggPSBzb2NrZXRfY3R4W3NvY2tldF9pZF0uc3BfaXA0X291dDsNCj4+ICsJbGNvbmYu b3V0Ym91bmQuc3A2X2N0eCA9IHNvY2tldF9jdHhbc29ja2V0X2lkXS5zcF9pcDZfb3V0Ow0KPj4g KwlsY29uZi5vdXRib3VuZC5zYV9jdHggPSBzb2NrZXRfY3R4W3NvY2tldF9pZF0uc2Ffb3V0Ow0K Pj4gKwlsY29uZi5vdXRib3VuZC5zZXNzaW9uX3Bvb2wgPSBzb2NrZXRfY3R4W3NvY2tldF9pZF0u c2Vzc2lvbl9wb29sOw0KPj4gKw0KPj4gIAlSVEVfTE9HKElORk8sIElQU0VDLA0KPj4gIAkJIkxh dW5jaGluZyBldmVudCBtb2RlIHdvcmtlciAobm9uLWJ1cnN0IC0gVHggaW50ZXJuYWwgcG9ydCAt ICINCj4+ICAJCSJhcHAgbW9kZSAtIGluYm91bmQpIG9uIGxjb3JlICVkXG4iLCBsY29yZV9pZCk7 DQo+PiBAQCAtMTc1LDEzICs0MDEsMTEgQEAgaXBzZWNfd3Jrcl9ub25fYnVyc3RfaW50X3BvcnRf YXBwX21vZGVfaW5iKHN0cnVjdCBlaF9ldmVudF9saW5rX2luZm8gKmxpbmtzLA0KPj4gIAkJaWYg KG5iX3J4ID09IDApDQo+PiAgCQkJY29udGludWU7DQo+Pg0KPj4gLQkJcG9ydF9pZCA9IGV2LnF1 ZXVlX2lkOw0KPj4gLQkJcGt0ID0gZXYubWJ1ZjsNCj4+IC0NCj4+IC0JCXJ0ZV9wcmVmZXRjaDAo cnRlX3BrdG1idWZfbXRvZChwa3QsIHZvaWQgKikpOw0KPj4gLQ0KPj4gLQkJLyogUHJvY2VzcyBw YWNrZXQgKi8NCj4+IC0JCWlwc2VjX2V2ZW50X3ByZV9mb3J3YXJkKHBrdCwgcG9ydF9pZCk7DQo+ PiArCQlpZiAocHJvY2Vzc19pcHNlY19ldl9pbmJvdW5kKCZsY29uZi5pbmJvdW5kLA0KPj4gKwkJ CQkmbGNvbmYucnQsICZldikgIT0gMSkgew0KPj4gKwkJCS8qIFRoZSBwa3QgaGFzIGJlZW4gZHJv cHBlZCAqLw0KPj4gKwkJCWNvbnRpbnVlOw0KPj4gKwkJfQ0KPj4NCj4+ICAJCS8qDQo+PiAgCQkg KiBTaW5jZSB0eCBpbnRlcm5hbCBwb3J0IGlzIGF2YWlsYWJsZSwgZXZlbnRzIGNhbiBiZQ0KPj4g ZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2lwc2VjLXNlY2d3L2lwc2VjX3dvcmtlci5oIGIvZXhhbXBs ZXMvaXBzZWMtc2VjZ3cvaXBzZWNfd29ya2VyLmgNCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ PiBpbmRleCAwMDAwMDAwLi5mZDE4YTJlDQo+PiAtLS0gL2Rldi9udWxsDQo+PiArKysgYi9leGFt cGxlcy9pcHNlYy1zZWNndy9pcHNlY193b3JrZXIuaA0KPj4gQEAgLTAsMCArMSwzOSBAQA0KPj4g Ky8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UNCj4+ICsgKiBDb3B5cmln aHQoYykgMjAxOCBDYXZpdW0sIEluYw0KPj4gKyAqLw0KPj4gKyNpZm5kZWYgX0lQU0VDX1dPUktF Ul9IXw0KPj4gKyNkZWZpbmUgX0lQU0VDX1dPUktFUl9IXw0KPj4gKw0KPj4gKyNpbmNsdWRlICJp cHNlYy5oIg0KPj4gKw0KPj4gK2VudW0gcGt0X3R5cGUgew0KPj4gKwlQS1RfVFlQRV9QTEFJTl9J UFY0ID0gMSwNCj4+ICsJUEtUX1RZUEVfSVBTRUNfSVBWNCwNCj4+ICsJUEtUX1RZUEVfUExBSU5f SVBWNiwNCj4+ICsJUEtUX1RZUEVfSVBTRUNfSVBWNiwNCj4+ICsJUEtUX1RZUEVfSU5WQUxJRA0K Pj4gK307DQo+PiArDQo+PiArc3RydWN0IHJvdXRlX3RhYmxlIHsNCj4+ICsJc3RydWN0IHJ0X2N0 eCAqcnQ0X2N0eDsNCj4+ICsJc3RydWN0IHJ0X2N0eCAqcnQ2X2N0eDsNCj4+ICt9Ow0KPj4gKw0K Pj4gKy8qDQo+PiArICogQ29uZiByZXF1aXJlZCBieSBldmVudCBtb2RlIHdvcmtlciB3aXRoIHR4 IGludGVybmFsIHBvcnQNCj4+ICsgKi8NCj4+ICtzdHJ1Y3QgbGNvcmVfY29uZl9ldl90eF9pbnRf cG9ydF93cmtyIHsNCj4+ICsJc3RydWN0IGlwc2VjX2N0eCBpbmJvdW5kOw0KPj4gKwlzdHJ1Y3Qg aXBzZWNfY3R4IG91dGJvdW5kOw0KPj4gKwlzdHJ1Y3Qgcm91dGVfdGFibGUgcnQ7DQo+PiArfSBf X3J0ZV9jYWNoZV9hbGlnbmVkOw0KPj4gKw0KPj4gKy8qIFRPRE8NCj4+ICsgKg0KPj4gKyAqIE1v dmUgdGhpcyBmdW5jdGlvbiB0byBpcHNlY193b3JrZXIuYw0KPj4gKyAqLw0KPj4gK3ZvaWQgaXBz ZWNfcG9sbF9tb2RlX3dvcmtlcih2b2lkKTsNCj4+ICsNCj4+ICtpbnQgaXBzZWNfbGF1bmNoX29u ZV9sY29yZSh2b2lkICphcmdzKTsNCj4+ICsNCj4+ICsjZW5kaWYgLyogX0lQU0VDX1dPUktFUl9I XyAqLw0KPj4gZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2lwc2VjLXNlY2d3L3NhLmMgYi9leGFtcGxl cy9pcHNlYy1zZWNndy9zYS5jDQo+PiBpbmRleCA3ZjA0NmUzLi45ZTE3YmEwIDEwMDY0NA0KPj4g LS0tIGEvZXhhbXBsZXMvaXBzZWMtc2VjZ3cvc2EuYw0KPj4gKysrIGIvZXhhbXBsZXMvaXBzZWMt c2VjZ3cvc2EuYw0KPj4gQEAgLTc3MiwxNyArNzcyLDYgQEAgcHJpbnRfb25lX3NhX3J1bGUoY29u c3Qgc3RydWN0IGlwc2VjX3NhICpzYSwgaW50IGluYm91bmQpDQo+PiAgCXByaW50ZigiXG4iKTsN Cj4+ICB9DQo+Pg0KPj4gLXN0cnVjdCBzYV9jdHggew0KPj4gLQl2b2lkICpzYXRibDsgLyogcG9p bnRlciB0byBhcnJheSBvZiBydGVfaXBzZWNfc2Egb2JqZWN0cyovDQo+PiAtCXN0cnVjdCBpcHNl Y19zYSBzYVtJUFNFQ19TQV9NQVhfRU5UUklFU107DQo+PiAtCXVuaW9uIHsNCj4+IC0JCXN0cnVj dCB7DQo+PiAtCQkJc3RydWN0IHJ0ZV9jcnlwdG9fc3ltX3hmb3JtIGE7DQo+PiAtCQkJc3RydWN0 IHJ0ZV9jcnlwdG9fc3ltX3hmb3JtIGI7DQo+PiAtCQl9Ow0KPj4gLQl9IHhmW0lQU0VDX1NBX01B WF9FTlRSSUVTXTsNCj4+IC19Ow0KPj4gLQ0KPj4gIHN0YXRpYyBzdHJ1Y3Qgc2FfY3R4ICoNCj4+ ICBzYV9jcmVhdGUoY29uc3QgY2hhciAqbmFtZSwgaW50MzJfdCBzb2NrZXRfaWQpDQo+PiAgew0K Pj4gLS0NCj4+IDIuNy40DQo+IA==