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=-4.0 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=no 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 EB611C433E4 for ; Fri, 24 Jul 2020 03:35:06 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id BF30420737 for ; Fri, 24 Jul 2020 03:35:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726737AbgGXDfG (ORCPT ); Thu, 23 Jul 2020 23:35:06 -0400 Received: from szxga01-in.huawei.com ([45.249.212.187]:2659 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726483AbgGXDfF (ORCPT ); Thu, 23 Jul 2020 23:35:05 -0400 Received: from nkgeml704-chm.china.huawei.com (unknown [172.30.72.57]) by Forcepoint Email with ESMTP id BA98E470467B6D1830A6; Fri, 24 Jul 2020 11:35:02 +0800 (CST) Received: from nkgeml708-chm.china.huawei.com (10.98.57.160) by nkgeml704-chm.china.huawei.com (10.98.57.158) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1913.5; Fri, 24 Jul 2020 11:35:02 +0800 Received: from nkgeml708-chm.china.huawei.com ([10.98.57.160]) by nkgeml708-chm.china.huawei.com ([10.98.57.160]) with mapi id 15.01.1913.007; Fri, 24 Jul 2020 11:35:02 +0800 From: "Guodeqing (A)" To: Eric Dumazet CC: David Miller , "kuba@kernel.org" , "maheshb@google.com" , "netdev@vger.kernel.org" Subject: =?utf-8?B?562U5aSNOiBbUEFUQ0gsdjJdIGlwdmxhbjogYWRkIHRoZSBjaGVjayBvZiBp?= =?utf-8?Q?p_header_checksum?= Thread-Topic: [PATCH,v2] ipvlan: add the check of ip header checksum Thread-Index: AQHWYAm+rUNsYHTSi0meLRdQUe+OMKkTgFQAgADaT6D//41agIACK6Qw Date: Fri, 24 Jul 2020 03:35:02 +0000 Message-ID: <7bb7522a2bda40b8b4a9aac54ea1098b@huawei.com> References: <1595409499-25008-1-git-send-email-geffrey.guo@huawei.com> <20200722.130408.2000579366934431355.davem@davemloft.net> <6c050a3a1111445287edc52ca6cb056d@huawei.com> In-Reply-To: Accept-Language: zh-CN, en-US Content-Language: zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.164.122.165] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-CFilter-Loop: Reflected Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org VGhlIGlobCBjaGVjayBtYXliZSBub3Qgc3VpdGFibGUgaW4gaXBfZmFzdF9jc3VtLCB0aGUgY29y cmVjdCBvZiB0aGUgaWhsIHZhbHVlIGNhbiBiZSBjaGVja2VkIGJlZm9yZSBjYWxsaW5nIHRoZSBp cF9mYXN0X2NzdW0uDQoNClRoZSBpbXBsZW1lbnRhdGlvbiBvZiBpcF9mYXN0X2NzdW0gaXMgZGlm ZmVyZW50IGluIGRpZmZlcmVudCBjcHUgYXJjaGl0ZWN0dXJlLiB0aGUgSVAgcGFja2V0IHdpbGwg ZG8gaXAgZm9yd2FyZCBpbiB0aGUgaXB2bGFuIGwzL2wzcyBtb2RlIGFuZCB0aGUgY29ycnVwdGVk IGlwIHBhY2tldA0KDQpzaG91bGQgYmUgZGlzY2FyZGVkIGFzIHNvb24gYXMgcG9zc2libGUuIFRo YW5rcy4NCg0KDQotLS0tLemCruS7tuWOn+S7ti0tLS0tDQrlj5Hku7bkuro6IEVyaWMgRHVtYXpl dCBbbWFpbHRvOmVkdW1hemV0QGdvb2dsZS5jb21dIA0K5Y+R6YCB5pe26Ze0OiBUaHVyc2RheSwg SnVseSAyMywgMjAyMCAxMDoxNQ0K5pS25Lu25Lq6OiBHdW9kZXFpbmcgKEEpIDxnZWZmcmV5Lmd1 b0BodWF3ZWkuY29tPg0K5oqE6YCBOiBEYXZpZCBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+ OyBrdWJhQGtlcm5lbC5vcmc7IG1haGVzaGJAZ29vZ2xlLmNvbTsgbmV0ZGV2QHZnZXIua2VybmVs Lm9yZw0K5Li76aKYOiBSZTogW1BBVENILHYyXSBpcHZsYW46IGFkZCB0aGUgY2hlY2sgb2YgaXAg aGVhZGVyIGNoZWNrc3VtDQoNCk9uIFdlZCwgSnVsIDIyLCAyMDIwIGF0IDY6NTkgUE0gR3VvZGVx aW5nIChBKSA8Z2VmZnJleS5ndW9AaHVhd2VpLmNvbT4gd3JvdGU6DQo+DQo+IEkgYW0gc29ycnks IHRoZSBtYWlsIGlzIG5vdCBzZW50IHRvIHlvdSBkaXJlY3RseTsNCj4NCj4gSWYgZG8gdGhlIGZv bGxvd2luZyB0ZXN0LHRoaXMgd2lsbCBjYXVzZSBhIHBhbmljIGluIGEgYXJtNjQgVk0uIHRoaXMg Y2FuIGJlIHJlcHJvZHVjZWQgZWFzaWx5Lg0KPg0KPiBMaW51eCBvc2MgNS44LjAtcmM2KyAjMyBT TVAgVGh1IEp1bCAyMyAwMTo0MDo0NyBVVEMgMjAyMCBhYXJjaDY0DQo+DQo+IFRoZSBwcm9ncmFt cyBpbmNsdWRlZCB3aXRoIHRoZSBEZWJpYW4gR05VL0xpbnV4IHN5c3RlbSBhcmUgZnJlZSANCj4g c29mdHdhcmU7IHRoZSBleGFjdCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGVhY2ggcHJvZ3JhbSBh cmUgZGVzY3JpYmVkIA0KPiBpbiB0aGUgaW5kaXZpZHVhbCBmaWxlcyBpbiAvdXNyL3NoYXJlL2Rv Yy8qL2NvcHlyaWdodC4NCj4NCj4gRGViaWFuIEdOVS9MaW51eCBjb21lcyB3aXRoIEFCU09MVVRF TFkgTk8gV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgDQo+IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxl IGxhdy4NCj4gcm9vdEBvc2M6fiMgaWZjb25maWcgZXRoMCB1cA0KPiByb290QG9zYzp+IyBpcCBu ZXRucyBhZGQgbnMxDQo+IHJvb3RAb3NjOn4jIGlwIGxpbmsgYWRkIGd3IGxpbmsgZXRoMCB0eXBl IGlwdmxhbiByb290QG9zYzp+IyBpcCBhZGRyIA0KPiBhZGQgMTY4LjE2LjAuMS8yNCBkZXYgZ3cg cm9vdEBvc2M6fiMgaXAgbGluayBzZXQgZGV2IGd3IHVwIHJvb3RAb3NjOn4jIA0KPiBpcCBsaW5r IGFkZCBpcDEgbGluayBldGgwIHR5cGUgaXB2bGFuIHJvb3RAb3NjOn4jIGlwIGxpbmsgc2V0IGlw MSANCj4gbmV0bnMgbnMxIHJvb3RAb3NjOn4jIGlwIG5ldG5zIGV4ZWMgbnMxIGlwIGxpbmsgc2V0 IGlwMSB1cCByb290QG9zYzp+IyANCj4gaXAgbmV0bnMgZXhlYyBuczEgaXAgYWRkciBhZGQgMTY4 LjE2LjAuMi8yNCBkZXYgaXAxIHJvb3RAb3NjOn4jIGlwIA0KPiBuZXRucyBleGVjIG5zMSBpcCBs aW5rIHNldCBsbyB1cCByb290QG9zYzp+IyBpcCBuZXRucyBleGVjIG5zMSBpcCBhZGRyIA0KPiBh ZGQgMTI3LjAuMC4xLzggZGV2IGxvIFJUTkVUTElOSyBhbnN3ZXJzOiBGaWxlIGV4aXN0cyByb290 QG9zYzp+IyBpcCANCj4gbmV0bnMgZXhlYyBuczEgdGMgcWRpc2MgYWRkIGRldiBpcDEgcm9vdCBu ZXRlbSBjb3JydXB0IDEwMCUgDQo+IHJvb3RAb3NjOn4jIGlwIG5ldG5zIGV4ZWMgbnMxIHBpbmcg MTY4LjE2LjAuMSBQSU5HIDE2OC4xNi4wLjEgDQo+ICgxNjguMTYuMC4xKSA1Nig4NCkgYnl0ZXMg b2YgZGF0YS4NCj4gRnJvbSAxNjguMTYuMC4xIGljbXBfc2VxPTIgRGVzdGluYXRpb24gSG9zdCBV bnJlYWNoYWJsZSBGcm9tIA0KPiAxNjguMTYuMC4xIGljbXBfc2VxPTEyIERlc3RpbmF0aW9uIEhv c3QgVW5yZWFjaGFibGUgRnJvbSAxNjguMTYuMC4xIA0KPiBpY21wX3NlcT0zMCBEZXN0aW5hdGlv biBIb3N0IFVucmVhY2hhYmxlDQo+IDY0IGJ5dGVzIGZyb20gMTY4LjE2LjAuMTogaWNtcF9zZXE9 NDggdHRsPTY0IHRpbWU9MC4wNTIgbXMNCj4gNjQgYnl0ZXMgZnJvbSAxNjguMTYuMC4xOiBpY21w X3NlcT02NSB0dGw9NjQgdGltZT0wLjA2MCBtcyBGcm9tIA0KPiAxNjguMTYuMC4xIGljbXBfc2Vx PTgwIERlc3RpbmF0aW9uIEhvc3QgVW5yZWFjaGFibGUgRnJvbSAxNjguMTYuMC4xIA0KPiBpY21w X3NlcT05NyBEZXN0aW5hdGlvbiBIb3N0IFVucmVhY2hhYmxlDQo+IDY0IGJ5dGVzIGZyb20gMTY4 LjE2LjAuMTogaWNtcF9zZXE9MTAwIHR0bD02NCB0aW1lPTAuMDIyIG1zDQo+IDY0IGJ5dGVzIGZy b20gMTY4LjE2LjAuMTogaWNtcF9zZXE9MTAxIHR0bD02NCB0aW1lPTAuMDU0IG1zDQo+IDY0IGJ5 dGVzIGZyb20gMTY4LjE2LjAuMTogaWNtcF9zZXE9MTAzIHR0bD02NCB0aW1lPTAuMDUzIG1zIEZy b20gDQo+IDE2OC4xNi4wLjEgaWNtcF9zZXE9MTAyIERlc3RpbmF0aW9uIEhvc3QgVW5yZWFjaGFi bGUgRnJvbSAxNjguMTYuMC4xIA0KPiBpY21wX3NlcT0xMjcgRGVzdGluYXRpb24gSG9zdCBVbnJl YWNoYWJsZQ0KPiA2NCBieXRlcyBmcm9tIDE2OC4xNi4wLjE6IGljbXBfc2VxPTEzMiB0dGw9NjQg dGltZT0wLjA1NyBtcw0KPiA2NCBieXRlcyBmcm9tIDE2OC4xNi4wLjE6IGljbXBfc2VxPTEzNSB0 dGw9NjQgdGltZT0wLjA1MSBtcw0KPiA2NCBieXRlcyBmcm9tIDE2OC4xNi4wLjE6IGljbXBfc2Vx PTE0MSB0dGw9NjQgdGltZT0wLjA1MSBtcyBGcm9tIA0KPiAxNjguMTYuMC4xIGljbXBfc2VxPTE0 MCBEZXN0aW5hdGlvbiBIb3N0IFVucmVhY2hhYmxlIEZyb20gMTY4LjE2LjAuMSANCj4gaWNtcF9z ZXE9MTQyIERlc3RpbmF0aW9uIEhvc3QgVW5yZWFjaGFibGUgRnJvbSAxNjguMTYuMC4xIGljbXBf c2VxPTE1MCANCj4gRGVzdGluYXRpb24gSG9zdCBVbnJlYWNoYWJsZSBGcm9tIDE2OC4xNi4wLjEg aWNtcF9zZXE9MTU0IERlc3RpbmF0aW9uIA0KPiBIb3N0IFVucmVhY2hhYmxlIEZyb20gMTY4LjE2 LjAuMSBpY21wX3NlcT0xNjQgRGVzdGluYXRpb24gSG9zdCANCj4gVW5yZWFjaGFibGUgRnJvbSAx NjguMTYuMC4xIGljbXBfc2VxPTE2OSBEZXN0aW5hdGlvbiBIb3N0IFVucmVhY2hhYmxlDQo+IDY0 IGJ5dGVzIGZyb20gMTY4LjE2LjAuMTogaWNtcF9zZXE9MTczIHR0bD02NCB0aW1lPTAuMDU2IG1z DQo+IDY0IGJ5dGVzIGZyb20gMTY4LjE2LjAuMTogaWNtcF9zZXE9MTg1IHR0bD02NCB0aW1lPTAu MDU4IG1zDQo+IDY0IGJ5dGVzIGZyb20gMTY4LjE2LjAuMTogaWNtcF9zZXE9MjAyIHR0bD02NCB0 aW1lPTAuMDU2IG1zDQo+IDY0IGJ5dGVzIGZyb20gMTY4LjE2LjAuMTogaWNtcF9zZXE9MjAzIHR0 bD02NCB0aW1lPTAuMDU3IG1zDQo+IDY0IGJ5dGVzIGZyb20gMTY4LjE2LjAuMTogaWNtcF9zZXE9 MjE5IHR0bD02NCB0aW1lPTAuMDUwIG1zDQo+IDY0IGJ5dGVzIGZyb20gMTY4LjE2LjAuMTogaWNt cF9zZXE9MjI3IHR0bD02NCB0aW1lPTAuMDU3IG1zDQo+IDY0IGJ5dGVzIGZyb20gMTY4LjE2LjAu MTogaWNtcF9zZXE9MjI4IHR0bD02NCB0aW1lPTAuMDQ0IG1zIEZyb20gDQo+IDE2OC4xNi4wLjEg aWNtcF9zZXE9MjM3IERlc3RpbmF0aW9uIEhvc3QgVW5yZWFjaGFibGUgRnJvbSAxNjguMTYuMC4x IA0KPiBpY21wX3NlcT0yMzkgRGVzdGluYXRpb24gSG9zdCBVbnJlYWNoYWJsZQ0KPiA2NCBieXRl cyBmcm9tIDE2OC4xNi4wLjE6IGljbXBfc2VxPTI0MyB0dGw9NjQgdGltZT0wLjA1MyBtcyBGcm9t IA0KPiAxNjguMTYuMC4xIGljbXBfc2VxPTI0MiBEZXN0aW5hdGlvbiBIb3N0IFVucmVhY2hhYmxl DQo+IDY0IGJ5dGVzIGZyb20gMTY4LjE2LjAuMTogaWNtcF9zZXE9MjQ2IHR0bD02NCB0aW1lPTAu MDU2IG1zDQo+IDY0IGJ5dGVzIGZyb20gMTY4LjE2LjAuMTogaWNtcF9zZXE9MjU0IHR0bD02NCB0 aW1lPTAuMDU2IG1zDQo+IDY0IGJ5dGVzIGZyb20gMTY4LjE2LjAuMTogaWNtcF9zZXE9MjU1IHR0 bD02NCB0aW1lPTAuMDU0IG1zIEZyb20gDQo+IDE2OC4xNi4wLjEgaWNtcF9zZXE9MjYzIERlc3Rp bmF0aW9uIEhvc3QgVW5yZWFjaGFibGUgRnJvbSAxNjguMTYuMC4xIA0KPiBpY21wX3NlcT0yNjkg RGVzdGluYXRpb24gSG9zdCBVbnJlYWNoYWJsZSBGcm9tIDE2OC4xNi4wLjEgaWNtcF9zZXE9Mjcz IA0KPiBEZXN0aW5hdGlvbiBIb3N0IFVucmVhY2hhYmxlDQo+IDY0IGJ5dGVzIGZyb20gMTY4LjE2 LjAuMTogaWNtcF9zZXE9Mjc5IHR0bD02NCB0aW1lPTAuMDU3IG1zIEZyb20gDQo+IDE2OC4xNi4w LjEgaWNtcF9zZXE9Mjg0IERlc3RpbmF0aW9uIEhvc3QgVW5yZWFjaGFibGUgRnJvbSAxNjguMTYu MC4xIA0KPiBpY21wX3NlcT0yODYgRGVzdGluYXRpb24gSG9zdCBVbnJlYWNoYWJsZQ0KPiA2NCBi eXRlcyBmcm9tIDE2OC4xNi4wLjE6IGljbXBfc2VxPTI5MSB0dGw9NjQgdGltZT0wLjA1NCBtcw0K PiA2NCBieXRlcyBmcm9tIDE2OC4xNi4wLjE6IGljbXBfc2VxPTI5MyB0dGw9NjQgdGltZT0wLjA1 OCBtcyBGcm9tIA0KPiAxNjguMTYuMC4xIGljbXBfc2VxPTI5NCBEZXN0aW5hdGlvbiBIb3N0IFVu cmVhY2hhYmxlIEZyb20gMTY4LjE2LjAuMSANCj4gaWNtcF9zZXE9Mjk4IERlc3RpbmF0aW9uIEhv c3QgVW5yZWFjaGFibGUNCj4gNjQgYnl0ZXMgZnJvbSAxNjguMTYuMC4xOiBpY21wX3NlcT0zMDkg dHRsPTY0IHRpbWU9MC4wNTYgbXMgRnJvbSANCj4gMTY4LjE2LjAuMSBpY21wX3NlcT0zMTAgRGVz dGluYXRpb24gSG9zdCBVbnJlYWNoYWJsZSBGcm9tIDE2OC4xNi4wLjEgDQo+IGljbXBfc2VxPTMx MiBEZXN0aW5hdGlvbiBIb3N0IFVucmVhY2hhYmxlDQo+IDY0IGJ5dGVzIGZyb20gMTY4LjE2LjAu MTogaWNtcF9zZXE9MzMyIHR0bD02NCB0aW1lPTAuMDU1IG1zIEZyb20gDQo+IDE2OC4xNi4wLjEg aWNtcF9zZXE9MzM0IERlc3RpbmF0aW9uIEhvc3QgVW5yZWFjaGFibGUNCj4gNjQgYnl0ZXMgZnJv bSAxNjguMTYuMC4xOiBpY21wX3NlcT0zNDAgdHRsPTY0IHRpbWU9MC4wNTUgbXMNCj4gNjQgYnl0 ZXMgZnJvbSAxNjguMTYuMC4xOiBpY21wX3NlcT0zNDQgdHRsPTY0IHRpbWU9MC4wNTAgbXMNCj4g NjQgYnl0ZXMgZnJvbSAxNjguMTYuMC4xOiBpY21wX3NlcT0zNTUgdHRsPTY0IHRpbWU9MC4wNTcg bXMNCj4gNjQgYnl0ZXMgZnJvbSAxNjguMTYuMC4xOiBpY21wX3NlcT0zNTggdHRsPTY0IHRpbWU9 MC4wNTAgbXMgRnJvbSANCj4gMTY4LjE2LjAuMSBpY21wX3NlcT0zNTYgRGVzdGluYXRpb24gSG9z dCBVbnJlYWNoYWJsZSBGcm9tIDE2OC4xNi4wLjEgDQo+IGljbXBfc2VxPTM2OSBEZXN0aW5hdGlv biBIb3N0IFVucmVhY2hhYmxlDQo+IDY0IGJ5dGVzIGZyb20gMTY4LjE2LjAuMTogaWNtcF9zZXE9 MzgyIHR0bD02NCB0aW1lPTAuMDUzIG1zIEZyb20gDQo+IDE2OC4xNi4wLjEgaWNtcF9zZXE9Mzgx IERlc3RpbmF0aW9uIEhvc3QgVW5yZWFjaGFibGUgRnJvbSAxNjguMTYuMC4xIA0KPiBpY21wX3Nl cT0zOTYgRGVzdGluYXRpb24gSG9zdCBVbnJlYWNoYWJsZQ0KPiA2NCBieXRlcyBmcm9tIDE2OC4x Ni4wLjE6IGljbXBfc2VxPTQwMCB0dGw9NjQgdGltZT0wLjA1OCBtcyBGcm9tIA0KPiAxNjguMTYu MC4xIGljbXBfc2VxPTQwNiBEZXN0aW5hdGlvbiBIb3N0IFVucmVhY2hhYmxlIEZyb20gMTY4LjE2 LjAuMSANCj4gaWNtcF9zZXE9NDE0IERlc3RpbmF0aW9uIEhvc3QgVW5yZWFjaGFibGUgRnJvbSAx NjguMTYuMC4xIGljbXBfc2VxPTQxNyANCj4gRGVzdGluYXRpb24gSG9zdCBVbnJlYWNoYWJsZQ0K PiA2NCBieXRlcyBmcm9tIDE2OC4xNi4wLjE6IGljbXBfc2VxPTQyMiB0dGw9NjQgdGltZT0wLjAx OCBtcw0KPiA2NCBieXRlcyBmcm9tIDE2OC4xNi4wLjE6IGljbXBfc2VxPTQyMyB0dGw9NjQgdGlt ZT0wLjA1OCBtcw0KPiA2NCBieXRlcyBmcm9tIDE2OC4xNi4wLjE6IGljbXBfc2VxPTQyOSB0dGw9 NjQgdGltZT0wLjA1NiBtcw0KPiA2NCBieXRlcyBmcm9tIDE2OC4xNi4wLjE6IGljbXBfc2VxPTQ0 NSB0dGw9NjQgdGltZT0wLjA0OSBtcyBGcm9tIA0KPiAxNjguMTYuMC4xIGljbXBfc2VxPTQ0NCBE ZXN0aW5hdGlvbiBIb3N0IFVucmVhY2hhYmxlIEZyb20gMTY4LjE2LjAuMSANCj4gaWNtcF9zZXE9 NDUzIERlc3RpbmF0aW9uIEhvc3QgVW5yZWFjaGFibGUgRnJvbSAxNjguMTYuMC4xIGljbXBfc2Vx PTQ1NSANCj4gRGVzdGluYXRpb24gSG9zdCBVbnJlYWNoYWJsZQ0KPiA2NCBieXRlcyBmcm9tIDE2 OC4xNi4wLjE6IGljbXBfc2VxPTQ1NiB0dGw9NjQgdGltZT0wLjAyNCBtcw0KPiA2NCBieXRlcyBm cm9tIDE2OC4xNi4wLjE6IGljbXBfc2VxPTQ2OSB0dGw9NjQgdGltZT0wLjA1OCBtcyBGcm9tIA0K PiAxNjguMTYuMC4xIGljbXBfc2VxPTQ3NSBEZXN0aW5hdGlvbiBIb3N0IFVucmVhY2hhYmxlDQo+ IDY0IGJ5dGVzIGZyb20gMTY4LjE2LjAuMTogaWNtcF9zZXE9NDgzIHR0bD02NCB0aW1lPTAuMDU0 IG1zIEZyb20gDQo+IDE2OC4xNi4wLjEgaWNtcF9zZXE9NDg4IERlc3RpbmF0aW9uIEhvc3QgVW5y ZWFjaGFibGUNCj4gNjQgYnl0ZXMgZnJvbSAxNjguMTYuMC4xOiBpY21wX3NlcT01MDQgdHRsPTY0 IHRpbWU9MC4wNTYgbXMNCj4gNjQgYnl0ZXMgZnJvbSAxNjguMTYuMC4xOiBpY21wX3NlcT01MDUg dHRsPTY0IHRpbWU9MC4wNTUgbXMgRnJvbSANCj4gMTY4LjE2LjAuMSBpY21wX3NlcT01MTAgRGVz dGluYXRpb24gSG9zdCBVbnJlYWNoYWJsZSBGcm9tIDE2OC4xNi4wLjEgDQo+IGljbXBfc2VxPTUx MSBEZXN0aW5hdGlvbiBIb3N0IFVucmVhY2hhYmxlDQo+IDY0IGJ5dGVzIGZyb20gMTY4LjE2LjAu MTogaWNtcF9zZXE9NTE2IHR0bD02NCB0aW1lPTAuMDU1IG1zIEZyb20gDQo+IDE2OC4xNi4wLjEg aWNtcF9zZXE9NTE5IERlc3RpbmF0aW9uIEhvc3QgVW5yZWFjaGFibGUgWyAgNTgyLjM2ODkzOF0g DQo+IFVuYWJsZSB0byBoYW5kbGUga2VybmVsIHBhZ2luZyByZXF1ZXN0IGF0IHZpcnR1YWwgYWRk cmVzcyANCj4gZmZmZjAwMDBmODVmMDAwMCBbICA1ODIuMzY5NzMyXSBNZW0gYWJvcnQgaW5mbzoN Cj4gWyAgNTgyLjM2OTk4N10gICBFU1IgPSAweDk2MDAwMDA3DQo+IFsgIDU4Mi4zNzAyNjZdICAg RUMgPSAweDI1OiBEQUJUIChjdXJyZW50IEVMKSwgSUwgPSAzMiBiaXRzDQo+IFsgIDU4Mi4zNzA4 MzNdICAgU0VUID0gMCwgRm5WID0gMA0KPiBbICA1ODIuMzcxMTEzXSAgIEVBID0gMCwgUzFQVFcg PSAwDQo+IFsgIDU4Mi4zNzEzOTFdIERhdGEgYWJvcnQgaW5mbzoNCj4gWyAgNTgyLjM3MTY3MV0g ICBJU1YgPSAwLCBJU1MgPSAweDAwMDAwMDA3DQo+IFsgIDU4Mi4zNzIwMTddICAgQ00gPSAwLCBX blIgPSAwDQo+IFsgIDU4Mi4zNzIyOTldIHN3YXBwZXIgcGd0YWJsZTogNGsgcGFnZXMsIDQ4LWJp dCBWQXMsIA0KPiBwZ2RwPTAwMDAwMDAxMmRhYjcwMDAgWyAgNTgyLjM3Mjg5Nl0gW2ZmZmYwMDAw Zjg1ZjAwMDBdIA0KPiBwZ2Q9MDAwMDAwMDEzZmZmODAwMywgcDRkPTAwMDAwMDAxM2ZmZjgwMDMs IHB1ZD0wMDAwMDAwMTNmOWY0MDAzLCANCj4gcG1kPTAwMDAwMDAxM2Y4MzgwMDMsIHB0ZT0wMDAw MDAwMDAwMDAwMDAwIFsgIDU4Mi4zNzQwMzNdIEludGVybmFsIGVycm9yOiBPb3BzOiA5NjAwMDAw NyBbIzFdIFNNUCBbICA1ODIuMzc0NDY4XSBNb2R1bGVzIGxpbmtlZCBpbjoNCj4gWyAgNTgyLjM3 NDc5NV0gQ1BVOiAxIFBJRDogNTI1IENvbW06IHBpbmcgTm90IHRhaW50ZWQgNS44LjAtcmM2KyAj MyBbICANCj4gNTgyLjM3NTQ2OF0gSGFyZHdhcmUgbmFtZTogUUVNVSBLVk0gVmlydHVhbCBNYWNo aW5lLCBCSU9TIDAuMC4wIA0KPiAwMi8wNi8yMDE1IFsgIDU4Mi4zNzYyMTVdIHBzdGF0ZTogMjA0 MDAwMDUgKG56Q3YgZGFpZiArUEFOIC1VQU8gDQo+IEJUWVBFPS0tKSBbICA1ODIuMzc2ODA1XSBw YyA6IF9faXBfbG9jYWxfb3V0KzB4ODQvMHgxODggWyAgNTgyLjM3NzIzNF0gDQo+IGxyIDogaXBf bG9jYWxfb3V0KzB4MzQvMHg2OCBbICA1ODIuMzc3NjM1XSBzcCA6IGZmZmY4MDAwMTMyNjM0NDAg WyAgDQo+IDU4Mi4zNzc5ODZdIHgyOTogZmZmZjgwMDAxMzI2MzQ0MCB4Mjg6IDAwMDAwMDAwMDAw MDAwMDEgWyAgNTgyLjM3ODUzNl0gDQo+IHgyNzogZmZmZjgwMDAxMTFkMjAxOCB4MjY6IGZmZmY4 MDAwMTE0Y2JhODAgWyAgNTgyLjM3OTA5M10geDI1OiANCj4gZmZmZjAwMDBlYzRlNzQwMCB4MjQ6 IDAwMDAwMDAwMDAwMDAwMDAgWyAgNTgyLjM3OTY1M10geDIzOiANCj4gMDAwMDAwMDAwMDAwMDA2 MiB4MjI6IGZmZmY4MDAwMTE0YzkwMDAgWyAgNTgyLjM4MDIyMV0geDIxOiANCj4gZmZmZjAwMDBk OTdhYzYwMCB4MjA6IGZmZmYwMDAwZWM1MTkwMDAgWyAgNTgyLjM4MDc3OF0geDE5OiANCj4gZmZm ZjgwMDAxMTViNWJjMCB4MTg6IDAwMDAwMDAwMDAwMDAwMDAgWyAgNTgyLjM4MTMyNF0geDE3OiAN Cj4gMDAwMDAwMDAwMDAwMDAwMCB4MTY6IDAwMDAwMDAwMDAwMDAwMDAgWyAgNTgyLjM4MTg3Nl0g eDE1OiANCj4gMDAwMDAwMDAwMDAwMDAwMCB4MTQ6IDAwMDAwMDAwMDAwMDAwMDAgWyAgNTgyLjM4 MjQzMV0geDEzOiANCj4gMDAwMDAwMDAwMDAwMDAwMCB4MTI6IDAwMDAwMDAwMDAwMDAwMDEgWyAg NTgyLjM4Mjk4Nl0geDExOiANCj4gZmZmZjgwMDAxMGQyMTgzOCB4MTA6IDAwMDAwMDAwMDAwMDAw MDEgWyAgNTgyLjM4MzU2N10geDkgOiANCj4gMDAwMDAwMDAwMDAwMDAwMSB4OCA6IDAwMDAwMDAw MDAwMDAwMDAgWyAgNTgyLjM4NDEzNl0geDcgOiANCj4gMDAwMDAwMDAwMDAwMDAwMCB4NiA6IGZm ZmYwMDAwZWM0ZTVlMDAgWyAgNTgyLjM4NDY5M10geDUgOiANCj4gMDI0MDc5Y2E1NDAwMDE4NCB4 NCA6IGZmZmYwMDAwZWM0ZTVlMTAgWyAgNTgyLjM4NTI0Nl0geDMgOiANCj4gMDAwMDAwMDAwMDAw MDAwMCB4MiA6IGZmZmYwMDA0ZWM0ZTVlMjAgWyAgNTgyLjM4NTgwOF0geDEgOiANCj4gZmZmZjAw MDBmODVmMDAwMCB4MCA6IDAzMWQwNzk2MjZhOWM3YWUgWyAgNTgyLjM4NjM2NV0gQ2FsbCB0cmFj ZToNCj4gWyAgNTgyLjM4NjYyOV0gIF9faXBfbG9jYWxfb3V0KzB4ODQvMHgxODggWyAgNTgyLjM4 NzAzMF0gIA0KPiBpcF9sb2NhbF9vdXQrMHgzNC8weDY4IFsgIDU4Mi4zODc0MDBdICBpcHZsYW5f cXVldWVfeG1pdCsweDU0OC8weDVjMCBbICANCj4gNTgyLjM4Nzg0NV0gIGlwdmxhbl9zdGFydF94 bWl0KzB4MmMvMHg5MCBbICA1ODIuMzg4MjgzXSAgDQo+IGRldl9oYXJkX3N0YXJ0X3htaXQrMHhi NC8weDI2MCBbICA1ODIuMzg4NzMyXSAgDQo+IHNjaF9kaXJlY3RfeG1pdCsweDFiNC8weDU1MCBb ICA1ODIuMzg5MTQ1XSAgX19xZGlzY19ydW4rMHgxNDAvMHg2NDggWyAgDQo+IDU4Mi4zODk1MjRd ICBfX2Rldl9xdWV1ZV94bWl0KzB4NmE0LzB4OGI4IFsgIDU4Mi4zODk5NDhdICANCj4gZGV2X3F1 ZXVlX3htaXQrMHgyNC8weDMwIFsgIDU4Mi4zOTAzMzldICBpcF9maW5pc2hfb3V0cHV0MisweDMy NC8weDU4MCANCj4gWyAgNTgyLjM5MDc3MF0gIF9faXBfZmluaXNoX291dHB1dCsweDEzMC8weDIx OCBbICA1ODIuMzkxMjE4XSAgDQo+IGlwX2ZpbmlzaF9vdXRwdXQrMHgzOC8weGQwIFsgIDU4Mi4z OTE2MzNdICBpcF9vdXRwdXQrMHhiNC8weDEzMCBbICANCj4gNTgyLjM5MTk4NF0gIGlwX2xvY2Fs X291dCsweDU4LzB4NjggWyAgNTgyLjM5MjM2OV0gIA0KPiBpcF9zZW5kX3NrYisweDJjLzB4ODgg WyAgNTgyLjM5MjcyOV0gIGlwX3B1c2hfcGVuZGluZ19mcmFtZXMrMHg0NC8weDUwIA0KPiBbICA1 ODIuMzkzMTg5XSAgcmF3X3NlbmRtc2crMHg3YTQvMHg5ODggWyAgNTgyLjM5MzU2OV0gIA0KPiBp bmV0X3NlbmRtc2crMHg0Yy8weDc4IFsgIDU4Mi4zOTM5NDJdICBzb2NrX3NlbmRtc2crMHg1OC8w eDY4IFsgIA0KPiA1ODIuMzk0MzExXSAgX19fX3N5c19zZW5kbXNnKzB4Mjg0LzB4MmMwIFsgIDU4 Mi4zOTQ3MjFdICANCj4gX19fc3lzX3NlbmRtc2crMHg5MC8weGQwIFsgIDU4Mi4zOTUxMTNdICBf X3N5c19zZW5kbXNnKzB4NzgvMHhkMCBbICANCj4gNTgyLjM5NTUwNF0gIF9fYXJtNjRfc3lzX3Nl bmRtc2crMHgyYy8weDM4IFsgIDU4Mi4zOTU5NDJdICANCj4gZWwwX3N2Y19jb21tb24uY29uc3Rw cm9wLjIrMHg3MC8weDEyOA0KPiBbICA1ODIuMzk2NDcyXSAgZG9fZWwwX3N2YysweDM0LzB4YTAN Cj4gWyAgNTgyLjM5NjgzNF0gIGVsMF9zeW5jX2hhbmRsZXIrMHhlYy8weDEyOCBbICA1ODIuMzk3 MjQ5XSAgDQo+IGVsMF9zeW5jKzB4MTQwLzB4MTgwIFsgIDU4Mi4zOTc2MTFdIENvZGU6IGFiMDMw MDA1IDkxMDAxNDQyIDlhMDMwMDAwIA0KPiA4YjAyMDg4MiAoYjg0MDQ0MjMpIFsgIDU4Mi4zOTgy NjRdIC0tLVsgZW5kIHRyYWNlIDkyYWRiNTRjODYxMWY4YzUgDQo+IF0tLS0gWyAgNTgyLjM5ODc1 NF0gS2VybmVsIHBhbmljIC0gbm90IHN5bmNpbmc6IEZhdGFsIGV4Y2VwdGlvbiBpbiANCj4gaW50 ZXJydXB0IFsgIDU4Mi4zOTk0ODFdIFNNUDogc3RvcHBpbmcgc2Vjb25kYXJ5IENQVXMgWyAgNTgy LjM5OTkyM10gDQo+IEtlcm5lbCBPZmZzZXQ6IDB4YzAwMDAgZnJvbSAweGZmZmY4MDAwMTAwMDAw MDAgWyAgNTgyLjQwMDU2MV0gDQo+IFBIWVNfT0ZGU0VUOiAweDQwMDAwMDAwIFsgIDU4Mi40MDA5 MzldIENQVSBmZWF0dXJlczogMHgwNDAwMDIsMjJhMDgyMzggDQo+IFsgIDU4Mi40MDEzODBdIE1l bW9yeSBMaW1pdDogbm9uZSBbICA1ODIuNDAxNzEwXSAtLS1bIGVuZCBLZXJuZWwgcGFuaWMgDQo+ IC0gbm90IHN5bmNpbmc6IEZhdGFsIGV4Y2VwdGlvbiBpbiBpbnRlcnJ1cHQgXS0tLQ0KPg0KPiBU aGlzIHBhbmljIGlzIGJlY2F1c2UgdGhlIGlwIGhlYWRlciBpcyBjb3JydXB0ZWQuIFRoZSBpaGwg b2YgdGhlIGlwIGhlYWRlciBpcyBlcnJvcu+8jHRoaXMgY2F1c2UgaXBfZmFzdF9jc3VtIGFjY2Vz cyB0aGUgaWxsZWdhbCBhZGRyZXNzLg0KPiAyMyBzdGF0aWMgaW5saW5lIF9fc3VtMTYgaXBfZmFz dF9jc3VtKGNvbnN0IHZvaWQgKmlwaCwgdW5zaWduZWQgaW50IA0KPiBpaGwpDQo+ICAyNCB7DQo+ ICAyNSAgICAgX191aW50MTI4X3QgdG1wOw0KPiAgMjYgICAgIHU2NCBzdW07DQo+ICAyNw0KPiAg MjggICAgIHRtcCA9ICooY29uc3QgX191aW50MTI4X3QgKilpcGg7DQo+ICAyOSAgICAgaXBoICs9 IDE2Ow0KPiAgMzAgICAgIGlobCAtPSA0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAtLS0tLWhlcmUsIGlmIGlobCBpcyBzbWFsbGVyIHRoYW4gNSwgdGhlIG5leHQg d2lsbCBhY2Nlc3MgdGhlIGlsbGVnYWwgYWRkcmVzcy4NCg0KDQpXZWxsLCB0aGUgYnVnIGlzIHRo ZXJlIHRoZW4uDQoNCkNvZGUgZm9yIG90aGVyIGFyY2hlcyBpcyBkaWZmZXJlbnQuDQoNCng4NiBm b3IgaW5zdGFuY2UgaGFzIGEgdGVzdCBmb3Igc2lsbHkgaWhsDQoNCnN0YXRpYyBpbmxpbmUgX19z dW0xNiBpcF9mYXN0X2NzdW0oY29uc3Qgdm9pZCAqaXBoLCB1bnNpZ25lZCBpbnQgaWhsKSB7IHVu c2lnbmVkIGludCBzdW07DQoNCmFzbSgiICBtb3ZsICglMSksICUwXG4iDQogICAgIiAgc3VibCAk NCwgJTJcbiINCiAgICAiICBqYmUgMmZcbiIgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLSBo ZXJlDQogICAgIiAgYWRkbCA0KCUxKSwgJTBcbiINCiAgICAiICBhZGNsIDgoJTEpLCAlMFxuIg0K ICAgICIgIGFkY2wgMTIoJTEpLCAlMFxuIg0KICAgICIxOiBhZGNsIDE2KCUxKSwgJTBcbiINCiAg ICAiICBsZWEgNCglMSksICUxXG4iDQogICAgIiAgZGVjbCAlMlxuIg0KICAgICIgIGpuZSAxYlxu Ig0KICAgICIgIGFkY2wgJDAsICUwXG4iDQogICAgIiAgbW92bCAlMCwgJTJcbiINCiAgICAiICBz aHJsICQxNiwgJTBcbiINCiAgICAiICBhZGR3ICV3MiwgJXcwXG4iDQogICAgIiAgYWRjbCAkMCwg JTBcbiINCiAgICAiICBub3RsICUwXG4iDQogICAgIjI6Ig0KLyogU2luY2UgdGhlIGlucHV0IHJl Z2lzdGVycyB3aGljaCBhcmUgbG9hZGVkIHdpdGggaXBoIGFuZCBpaGwNCiAgIGFyZSBtb2RpZmll ZCwgd2UgbXVzdCBhbHNvIHNwZWNpZnkgdGhlbSBhcyBvdXRwdXRzLCBvciBnY2MNCiAgIHdpbGwg YXNzdW1lIHRoZXkgY29udGFpbiB0aGVpciBvcmlnaW5hbCB2YWx1ZXMuICovDQogICAgOiAiPXIi IChzdW0pLCAiPXIiIChpcGgpLCAiPXIiIChpaGwpDQogICAgOiAiMSIgKGlwaCksICIyIiAoaWhs KQ0KICAgIDogIm1lbW9yeSIpOw0KcmV0dXJuIChfX2ZvcmNlIF9fc3VtMTYpc3VtOw0KfQ0KDQoN Cj4gIDMxICAgICB0bXAgKz0gKCh0bXAgPj4gNjQpIHwgKHRtcCA8PCA2NCkpOw0KPiAgMzIgICAg IHN1bSA9IHRtcCA+PiA2NDsNCj4gIDMzICAgICBkbyB7DQo+ICAzNCAgICAgICAgIHN1bSArPSAq KGNvbnN0IHUzMiAqKWlwaDsNCj4gIDM1ICAgICAgICAgaXBoICs9IDQ7DQo+ICAzNiAgICAgfSB3 aGlsZSAoLS1paGwpOw0KPiAgMzcNCj4gIDM4ICAgICBzdW0gKz0gKChzdW0gPj4gMzIpIHwgKHN1 bSA8PCAzMikpOw0KPiAgMzkgICAgIHJldHVybiBjc3VtX2ZvbGQoKF9fZm9yY2UgdTMyKShzdW0g Pj4gMzIpKTsNCj4gIDQwIH0NCj4NCj4gSSB0aGluayB0aGlzIHBhbmljIG1heSBiZSBhIHByb2Js ZW0sIHRoYW5rcy4NCj4NCj4NCj4NCj4gLS0tLS3pgq7ku7bljp/ku7YtLS0tLQ0KPiDlj5Hku7bk uro6IENvbmcgV2FuZyBbbWFpbHRvOnhpeW91Lndhbmdjb25nQGdtYWlsLmNvbV0NCj4g5Y+R6YCB 5pe26Ze0OiBXZWRuZXNkYXksIEp1bHkgMjIsIDIwMjAgMzozOQ0KPiDmlLbku7bkuro6IEd1b2Rl cWluZyAoQSkgPGdlZmZyZXkuZ3VvQGh1YXdlaS5jb20+DQo+IOaKhOmAgTogRGF2aWQgTWlsbGVy IDxkYXZlbUBkYXZlbWxvZnQubmV0PjsgSmFrdWIgS2ljaW5za2kgDQo+IDxrdWJhQGtlcm5lbC5v cmc+OyBNYWhlc2ggQmFuZGV3YXIgPG1haGVzaGJAZ29vZ2xlLmNvbT47IEVyaWMgRHVtYXpldCAN Cj4gPGVkdW1hemV0QGdvb2dsZS5jb20+OyBMaW51eCBLZXJuZWwgTmV0d29yayBEZXZlbG9wZXJz IA0KPiA8bmV0ZGV2QHZnZXIua2VybmVsLm9yZz4NCj4g5Li76aKYOiBSZTogW1BBVENIXSBpcHZs YW46IGFkZCB0aGUgY2hlY2sgb2YgaXAgaGVhZGVyIGNoZWNrc3VtDQo+DQo+IE9uIFR1ZSwgSnVs IDIxLCAyMDIwIGF0IDY6MTcgQU0gZ3VvZGVxaW5nIDxnZWZmcmV5Lmd1b0BodWF3ZWkuY29tPiB3 cm90ZToNCj4gPg0KPiA+IFRoZSBpcCBoZWFkZXIgY2hlY2tzdW0gY2FuIGJlIGVycm9yIGluIHRo ZSBmb2xsb3dpbmcgc3RlcHMuDQo+ID4gJCBpcCBuZXRucyBhZGQgbnMxDQo+ID4gJCBpcCBsaW5r IGFkZCBndyBsaW5rIGV0aDAgdHlwZSBpcHZsYW4gJCBpcCBhZGRyIGFkZCAxNjguMTYuMC4xLzI0 IA0KPiA+IGRldiBndyAkIGlwIGxpbmsgc2V0IGRldiBndyB1cCAkIGlwIGxpbmsgYWRkIGlwMSBs aW5rIGV0aDAgdHlwZSANCj4gPiBpcHZsYW4gJCBpcCBsaW5rIHNldCBpcDEgbmV0bnMgbnMxICQg aXAgbmV0bnMgZXhlYyBuczEgaXAgbGluayBzZXQgDQo+ID4gaXAxIHVwICQgaXAgbmV0bnMgZXhl YyBuczEgaXAgYWRkciBhZGQgMTY4LjE2LjAuMi8yNCBkZXYgaXAxICQgaXAgDQo+ID4gbmV0bnMg ZXhlYyBuczEgdGMgcWRpc2MgYWRkIGRldiBpcDEgcm9vdCBuZXRlbSBjb3JydXB0IDUwJSAkIGlw IA0KPiA+IG5ldG5zIGV4ZWMgbnMxIHBpbmcNCj4gPiAxNjguMTYuMC4xDQo+ID4NCj4gPiBUaGUg aXAgaGVhZGVyIG9mIGEgcGFja2V0IG1heWJlIG1vZGlmaWVkIHdoZW4gaXQgc3RlcHMgaW4gDQo+ ID4gaXB2bGFuX3Byb2Nlc3NfdjRfb3V0Ym91bmQgYmVjYXVzZSBvZiB0aGUgbmV0ZW0sIHRoZSBj b3JydXB0dGVkIA0KPiA+IHBhY2tldHMgc2hvdWxkIGJlIGRyb3BwZWQuDQo+DQo+IFRoaXMgZG9l cyBub3QgbWFrZSBtdWNoIHNlbnNlLCBhcyB5b3UgaW50ZW50aW9uYWxseSBjb3JydXB0IHRoZSBo ZWFkZXIuIE1vcmUgaW1wb3J0YW50bHksIHRoZSBjaGVjayB5b3UgYWRkIGlzIHRvbyBsYXRlLCBy aWdodD8NCj4gaXB2bGFuX3htaXRfbW9kZV9sMygpIGFscmVhZHkgZG9lcyB0aGUgYWRkciBsb29r dXAgd2l0aCBJUCBoZWFkZXIsDQo+DQo+IFRoYW5rcy4NCj4NCj4gLS0tLS3pgq7ku7bljp/ku7Yt LS0tLQ0KPiDlj5Hku7bkuro6IERhdmlkIE1pbGxlciBbbWFpbHRvOmRhdmVtQGRhdmVtbG9mdC5u ZXRdDQo+IOWPkemAgeaXtumXtDogVGh1cnNkYXksIEp1bHkgMjMsIDIwMjAgNDowNA0KPiDmlLbk u7bkuro6IEd1b2RlcWluZyAoQSkgPGdlZmZyZXkuZ3VvQGh1YXdlaS5jb20+DQo+IOaKhOmAgTog a3ViYUBrZXJuZWwub3JnOyBtYWhlc2hiQGdvb2dsZS5jb207IGVkdW1hemV0QGdvb2dsZS5jb207 IA0KPiBuZXRkZXZAdmdlci5rZXJuZWwub3JnDQo+IOS4u+mimDogUmU6IFtQQVRDSCx2Ml0gaXB2 bGFuOiBhZGQgdGhlIGNoZWNrIG9mIGlwIGhlYWRlciBjaGVja3N1bQ0KPg0KPiBGcm9tOiBndW9k ZXFpbmcgPGdlZmZyZXkuZ3VvQGh1YXdlaS5jb20+DQo+IERhdGU6IFdlZCwgMjIgSnVsIDIwMjAg MTc6MTg6MTkgKzA4MDANCj4NCj4gPiBUaGUgaXAgaGVhZGVyIGNoZWNrc3VtIGNhbiBiZSBlcnJv ciBpbiB0aGUgZm9sbG93aW5nIHN0ZXBzLg0KPg0KPiBZb3UgZGlkIG5vdCByZXNwb25kIHRvIG15 IGZlZWRiYWNrIGZyb20geW91ciBwcmV2aW91cyBzdWJtaXNzaW9ucy4NCj4NCj4gUGFja2V0cyBj cmVhdGVkIGluc2lkZSBvZiB0aGUga2VybmVsIGhhdmUgY29ycmVjdCBjaGVja3N1bXMsIGFuZCB0 aGUgaXB2bGFuIGRyaXZlciBjYW4gZGVwZW5kIHVwb24gdGhpcyBwcmVjb25kaXRpb24uDQo+DQo+ IEkgYW0gbm90IGFwcGx5aW5nIHRoaXMgcGF0Y2gsIHNvcnJ5Lg0K