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 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 749BFC27C53 for ; Fri, 7 Jun 2024 08:49:32 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sFVHd-0000yO-Tb; Fri, 07 Jun 2024 04:49:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sFVHc-0000xx-9F for qemu-devel@nongnu.org; Fri, 07 Jun 2024 04:49:12 -0400 Received: from szxga01-in.huawei.com ([45.249.212.187]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sFVHX-0000Hv-VR for qemu-devel@nongnu.org; Fri, 07 Jun 2024 04:49:11 -0400 Received: from mail.maildlp.com (unknown [172.19.163.252]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4VwZWz617hzsTVH; Fri, 7 Jun 2024 16:45:03 +0800 (CST) Received: from kwepemf100003.china.huawei.com (unknown [7.202.181.217]) by mail.maildlp.com (Postfix) with ESMTPS id AB694180085; Fri, 7 Jun 2024 16:49:02 +0800 (CST) Received: from dggpemf200006.china.huawei.com (7.185.36.61) by kwepemf100003.china.huawei.com (7.202.181.217) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Fri, 7 Jun 2024 16:49:02 +0800 Received: from dggpemf200006.china.huawei.com ([7.185.36.61]) by dggpemf200006.china.huawei.com ([7.185.36.61]) with mapi id 15.02.1544.011; Fri, 7 Jun 2024 16:49:02 +0800 To: Peter Xu CC: "qemu-devel@nongnu.org" , "yu.zhang@ionos.com" , "mgalaxy@akamai.com" , "elmar.gerdes@ionos.com" , zhengchuan , "berrange@redhat.com" , "armbru@redhat.com" , "lizhijian@fujitsu.com" , "pbonzini@redhat.com" , "mst@redhat.com" , Xiexiangyou , "linux-rdma@vger.kernel.org" , "lixiao (H)" , "jinpu.wang@ionos.com" , Wangjialin , Fabiano Rosas Subject: RE: [PATCH 0/6] refactor RDMA live migration based on rsocket API Thread-Topic: [PATCH 0/6] refactor RDMA live migration based on rsocket API Thread-Index: AQHatni5B+Psi4bf8k2CmAL8rvKhtrG3eMaAgAF5NUD//8F2AIADSROQ Date: Fri, 7 Jun 2024 08:49:01 +0000 Message-ID: <2fa61f902c244211af7d1316b67fe0a1@huawei.com> References: <1717503252-51884-1-git-send-email-arei.gonglei@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.173.124.235] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Received-SPF: pass client-ip=45.249.212.187; envelope-from=arei.gonglei@huawei.com; helo=szxga01-in.huawei.com X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-to: "Gonglei (Arei)" From: "Gonglei (Arei)" via Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogUGV0ZXIgWHUgW21haWx0 bzpwZXRlcnhAcmVkaGF0LmNvbV0NCj4gU2VudDogV2VkbmVzZGF5LCBKdW5lIDUsIDIwMjQgMTA6 MTkgUE0NCj4gVG86IEdvbmdsZWkgKEFyZWkpIDxhcmVpLmdvbmdsZWlAaHVhd2VpLmNvbT4NCj4g Q2M6IHFlbXUtZGV2ZWxAbm9uZ251Lm9yZzsgeXUuemhhbmdAaW9ub3MuY29tOyBtZ2FsYXh5QGFr YW1haS5jb207DQo+IGVsbWFyLmdlcmRlc0Bpb25vcy5jb207IHpoZW5nY2h1YW4gPHpoZW5nY2h1 YW5AaHVhd2VpLmNvbT47DQo+IGJlcnJhbmdlQHJlZGhhdC5jb207IGFybWJydUByZWRoYXQuY29t OyBsaXpoaWppYW5AZnVqaXRzdS5jb207DQo+IHBib256aW5pQHJlZGhhdC5jb207IG1zdEByZWRo YXQuY29tOyBYaWV4aWFuZ3lvdQ0KPiA8eGlleGlhbmd5b3VAaHVhd2VpLmNvbT47IGxpbnV4LXJk bWFAdmdlci5rZXJuZWwub3JnOyBsaXhpYW8gKEgpDQo+IDxsaXhpYW85MUBodWF3ZWkuY29tPjsg amlucHUud2FuZ0Bpb25vcy5jb207IFdhbmdqaWFsaW4NCj4gPHdhbmdqaWFsaW4yM0BodWF3ZWku Y29tPjsgRmFiaWFubyBSb3NhcyA8ZmFyb3Nhc0BzdXNlLmRlPg0KPiBTdWJqZWN0OiBSZTogW1BB VENIIDAvNl0gcmVmYWN0b3IgUkRNQSBsaXZlIG1pZ3JhdGlvbiBiYXNlZCBvbiByc29ja2V0IEFQ SQ0KPiANCj4gT24gV2VkLCBKdW4gMDUsIDIwMjQgYXQgMTA6MDk6NDNBTSArMDAwMCwgR29uZ2xl aSAoQXJlaSkgd3JvdGU6DQo+ID4gSGkgUGV0ZXIsDQo+ID4NCj4gPiA+IC0tLS0tT3JpZ2luYWwg TWVzc2FnZS0tLS0tDQo+ID4gPiBGcm9tOiBQZXRlciBYdSBbbWFpbHRvOnBldGVyeEByZWRoYXQu Y29tXQ0KPiA+ID4gU2VudDogV2VkbmVzZGF5LCBKdW5lIDUsIDIwMjQgMzozMiBBTQ0KPiA+ID4g VG86IEdvbmdsZWkgKEFyZWkpIDxhcmVpLmdvbmdsZWlAaHVhd2VpLmNvbT4NCj4gPiA+IENjOiBx ZW11LWRldmVsQG5vbmdudS5vcmc7IHl1LnpoYW5nQGlvbm9zLmNvbTsNCj4gbWdhbGF4eUBha2Ft YWkuY29tOw0KPiA+ID4gZWxtYXIuZ2VyZGVzQGlvbm9zLmNvbTsgemhlbmdjaHVhbiA8emhlbmdj aHVhbkBodWF3ZWkuY29tPjsNCj4gPiA+IGJlcnJhbmdlQHJlZGhhdC5jb207IGFybWJydUByZWRo YXQuY29tOyBsaXpoaWppYW5AZnVqaXRzdS5jb207DQo+ID4gPiBwYm9uemluaUByZWRoYXQuY29t OyBtc3RAcmVkaGF0LmNvbTsgWGlleGlhbmd5b3UNCj4gPiA+IDx4aWV4aWFuZ3lvdUBodWF3ZWku Y29tPjsgbGludXgtcmRtYUB2Z2VyLmtlcm5lbC5vcmc7IGxpeGlhbyAoSCkNCj4gPiA+IDxsaXhp YW85MUBodWF3ZWkuY29tPjsgamlucHUud2FuZ0Bpb25vcy5jb207IFdhbmdqaWFsaW4NCj4gPiA+ IDx3YW5namlhbGluMjNAaHVhd2VpLmNvbT47IEZhYmlhbm8gUm9zYXMgPGZhcm9zYXNAc3VzZS5k ZT4NCj4gPiA+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggMC82XSByZWZhY3RvciBSRE1BIGxpdmUgbWln cmF0aW9uIGJhc2VkIG9uDQo+ID4gPiByc29ja2V0IEFQSQ0KPiA+ID4NCj4gPiA+IEhpLCBMZWks IEppYWxpbiwNCj4gPiA+DQo+ID4gPiBUaGFua3MgYSBsb3QgZm9yIHdvcmtpbmcgb24gdGhpcyEN Cj4gPiA+DQo+ID4gPiBJIHRoaW5rIHdlJ2xsIG5lZWQgdG8gd2FpdCBhIGJpdCBvbiBmZWVkYmFj a3MgZnJvbSBKaW5wdSBhbmQgaGlzDQo+ID4gPiB0ZWFtIG9uIFJETUEgc2lkZSwgYWxzbyBEYW5p ZWwgZm9yIGlvY2hhbm5lbHMuICBBbHNvLCBwbGVhc2UNCj4gPiA+IHJlbWVtYmVyIHRvIGNvcHkg RmFiaWFubyBSb3NhcyBpbiBhbnkgcmVsZXZhbnQgZnV0dXJlIHBvc3RzLiAgV2UnZA0KPiA+ID4g YWxzbyBsaWtlIHRvIGtub3cgd2hldGhlciBoZSBoYXMgYW55IGNvbW1lbnRzIHRvby4gIEkgaGF2 ZSBoaW0gY29waWVkIGluDQo+IHRoaXMgcmVwbHkuDQo+ID4gPg0KPiA+ID4gT24gVHVlLCBKdW4g MDQsIDIwMjQgYXQgMDg6MTQ6MDZQTSArMDgwMCwgR29uZ2xlaSB3cm90ZToNCj4gPiA+ID4gRnJv bTogSmlhbGluIFdhbmcgPHdhbmdqaWFsaW4yM0BodWF3ZWkuY29tPg0KPiA+ID4gPg0KPiA+ID4g PiBIaSwNCj4gPiA+ID4NCj4gPiA+ID4gVGhpcyBwYXRjaCBzZXJpZXMgYXR0ZW1wdHMgdG8gcmVm YWN0b3IgUkRNQSBsaXZlIG1pZ3JhdGlvbiBieQ0KPiA+ID4gPiBpbnRyb2R1Y2luZyBhIG5ldyBR SU9DaGFubmVsUkRNQSBjbGFzcyBiYXNlZCBvbiB0aGUgcnNvY2tldCBBUEkuDQo+ID4gPiA+DQo+ ID4gPiA+IFRoZSAvdXNyL2luY2x1ZGUvcmRtYS9yc29ja2V0LmggcHJvdmlkZXMgYSBoaWdoZXIg bGV2ZWwgcnNvY2tldA0KPiA+ID4gPiBBUEkgdGhhdCBpcyBhIDEtMSBtYXRjaCBvZiB0aGUgbm9y bWFsIGtlcm5lbCAnc29ja2V0cycgQVBJLCB3aGljaA0KPiA+ID4gPiBoaWRlcyB0aGUgZGV0YWls IG9mIHJkbWEgcHJvdG9jb2wgaW50byByc29ja2V0IGFuZCBhbGxvd3MgdXMgdG8NCj4gPiA+ID4g YWRkIHN1cHBvcnQgZm9yIHNvbWUgbW9kZXJuIGZlYXR1cmVzIGxpa2UgbXVsdGlmZCBtb3JlIGVh c2lseS4NCj4gPiA+ID4NCj4gPiA+ID4gSGVyZSBpcyB0aGUgcHJldmlvdXMgZGlzY3Vzc2lvbiBv biByZWZhY3RvcmluZyBSRE1BIGxpdmUgbWlncmF0aW9uDQo+ID4gPiA+IHVzaW5nIHRoZSByc29j a2V0IEFQSToNCj4gPiA+ID4NCj4gPiA+ID4gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvcWVtdS1k ZXZlbC8yMDI0MDMyODEzMDI1NS41MjI1Ny0xLXBoaWxtZEBsDQo+ID4gPiA+IGluYXINCj4gPiA+ ID4gby5vcmcvDQo+ID4gPiA+DQo+ID4gPiA+IFdlIGhhdmUgZW5jb3VudGVyZWQgc29tZSBidWdz IHdoZW4gdXNpbmcgcnNvY2tldCBhbmQgcGxhbiB0bw0KPiA+ID4gPiBzdWJtaXQgdGhlbSB0byB0 aGUgcmRtYS1jb3JlIGNvbW11bml0eS4NCj4gPiA+ID4NCj4gPiA+ID4gSW4gYWRkaXRpb24sIHRo ZSB1c2Ugb2YgcnNvY2tldCBtYWtlcyBvdXIgcHJvZ3JhbW1pbmcgbW9yZQ0KPiA+ID4gPiBjb252 ZW5pZW50LCBidXQgaXQgbXVzdCBiZSBub3RlZCB0aGF0IHRoaXMgbWV0aG9kIGludHJvZHVjZXMN Cj4gPiA+ID4gbXVsdGlwbGUgbWVtb3J5IGNvcGllcywgd2hpY2ggY2FuIGJlIGltYWdpbmVkIHRo YXQgdGhlcmUgd2lsbCBiZSBhDQo+ID4gPiA+IGNlcnRhaW4gcGVyZm9ybWFuY2UgZGVncmFkYXRp b24sIGhvcGluZyB0aGF0IGZyaWVuZHMgd2l0aCBSRE1BDQo+ID4gPiA+IG5ldHdvcmsgY2FyZHMg Y2FuIGhlbHAgdmVyaWZ5LA0KPiA+ID4gdGhhbmsgeW91IQ0KPiA+ID4NCj4gPiA+IEl0J2xsIGJl IGdvb2QgdG8gZWxhYm9yYXRlIGlmIHlvdSB0ZXN0ZWQgaXQgaW4taG91c2UuIFdoYXQgcGVvcGxl DQo+ID4gPiBzaG91bGQgZXhwZWN0IG9uIHRoZSBudW1iZXJzIGV4YWN0bHk/ICBJcyB0aGF0IG9r YXkgZnJvbSBIdWF3ZWkncyBQT1Y/DQo+ID4gPg0KPiA+ID4gQmVzaWRlcyB0aGF0LCB0aGUgY29k ZSBsb29rcyBwcmV0dHkgZ29vZCBhdCBhIGZpcnN0IGdsYW5jZSB0byBtZS4NCj4gPiA+IEJlZm9y ZSBvdGhlcnMgY2hpbSBpbiwgaGVyZSdyZSBzb21lIGhpZ2ggbGV2ZWwgY29tbWVudHMuLg0KPiA+ ID4NCj4gPiA+IEZpcnN0bHksIGNhbiB3ZSBhdm9pZCB1c2luZyBjb3JvdXRpbmUgd2hlbiBsaXN0 ZW4oKT8gIE1pZ2h0IGJlDQo+ID4gPiByZWxldmFudCB3aGVuIEkgc2VlIHRoYXQgcmRtYV9hY2Nl cHRfaW5jb21pbmdfbWlncmF0aW9uKCkgcnVucyBpbiBhDQo+ID4gPiBsb29wIHRvIGRvIHJhY2Nl cHQoKSwgYnV0IHdvdWxkIHRoYXQgYWxzbyBoYW5nIHRoZSBxZW11IG1haW4gbG9vcA0KPiA+ID4g ZXZlbiB3aXRoIHRoZSBjb3JvdXRpbmUsIGJlZm9yZSBhbGwgY2hhbm5lbHMgYXJlIHJlYWR5PyAg SSdtIG5vdCBhDQo+ID4gPiBjb3JvdXRpbmUgcGVyc29uLCBidXQgSSB0aGluayB0aGUgaG9wZSBp cyB0aGF0IHdlIGNhbiBtYWtlIGRlc3QgUUVNVQ0KPiA+ID4gcnVuIGluIGEgdGhyZWFkIGluIHRo ZSBmdXR1cmUganVzdCBsaWtlIHRoZSBzcmMgUUVNVSwgc28gdGhlIGxlc3MgY29yb3V0aW5lDQo+ IHRoZSBiZXR0ZXIgaW4gdGhpcyBwYXRoLg0KPiA+ID4NCj4gPg0KPiA+IEJlY2F1c2UgcnNvY2tl dCBpcyBzZXQgdG8gbm9uLWJsb2NraW5nLCByYWNjZXB0IHdpbGwgcmV0dXJuIEVBR0FJTg0KPiA+ IHdoZW4gbm8gY29ubmVjdGlvbiBpcyByZWNlaXZlZCwgY29yb3V0aW5lIHdpbGwgeWllbGQsIGFu ZCB3aWxsIG5vdCBoYW5nIHRoZQ0KPiBxZW11IG1haW4gbG9vcC4NCj4gDQo+IEFoIHRoYXQncyBv ay4gIEFuZCBhbHNvIEkganVzdCBub3RpY2VkIGl0IG1heSBub3QgYmUgYSBiaWcgZGVhbCBlaXRo ZXIgYXMgbG9uZyBhcw0KPiB3ZSdyZSBiZWZvcmUgbWlncmF0aW9uX2luY29taW5nX3Byb2Nlc3Mo KS4NCj4gDQo+IEknbSB3b25kZXJpbmcgd2hldGhlciBpdCBjYW4gZG8gaXQgc2ltaWxhcmx5IGxp a2Ugd2hhdCB3ZSBkbyB3aXRoIHNvY2tldHMgaW4NCj4gcWlvX25ldF9saXN0ZW5lcl9zZXRfY2xp ZW50X2Z1bmNfZnVsbCgpLiAgQWZ0ZXIgYWxsLCByc29ja2V0IHdhbnRzIHRvIG1pbWljIHRoZQ0K PiBzb2NrZXQgQVBJLiAgSXQnbGwgbWFrZSBzZW5zZSBpZiByc29ja2V0IGNvZGUgdHJpZXMgdG8g bWF0Y2ggd2l0aCBzb2NrZXQsIG9yDQo+IGV2ZW4gcmV1c2UuDQo+IA0KDQpBY3R1YWxseSB3ZSB0 cmllZCB0aGlzIHNvbHV0aW9uLCBidXQgaXQgZGlkbid0IHdvcmsuIFBscyBzZWUgcGF0Y2ggMy82 DQoNCktub3duIGxpbWl0YXRpb25zOiANCiAgRm9yIGEgYmxvY2tpbmcgcnNvY2tldCBmZCwgaWYg d2UgdXNlIGlvX2NyZWF0ZV93YXRjaCB0byB3YWl0IGZvcg0KICBQT0xMSU4gb3IgUE9MTE9VVCBl dmVudHMsIHNpbmNlIHRoZSByc29ja2V0IGZkIGlzIGJsb2NraW5nLCB3ZQ0KICBjYW5ub3QgZGV0 ZXJtaW5lIHdoZW4gaXQgaXMgbm90IHJlYWR5IHRvIHJlYWQvd3JpdGUgYXMgd2UgY2FuIHdpdGgN CiAgbm9uLWJsb2NraW5nIGZkcy4gVGhlcmVmb3JlLCB3aGVuIGFuIGV2ZW50IG9jY3VycywgaXQg d2lsbCBvY2N1cnMNCiAgYWx3YXlzLCBwb3RlbnRpYWxseSBsZWF2ZSB0aGUgcWVtdSBoYW5naW5n LiBTbyB3ZSBuZWVkIGJlIGNhdXRpb3VzDQogIHRvIGF2b2lkIGhhbmdpbmcgd2hlbiB1c2luZyBp b19jcmVhdGVfd2F0Y2ggLg0KDQoNClJlZ2FyZHMsDQotR29uZ2xlaQ0KDQo+ID4NCj4gPiA+IEkg dGhpbmsgSSBhbHNvIGxlZnQgYSBjb21tZW50IGVsc2V3aGVyZSBvbiB3aGV0aGVyIGl0IHdvdWxk IGJlDQo+ID4gPiBwb3NzaWJsZSB0byBhbGxvdyBpb2NoYW5uZWxzIGltcGxlbWVudCB0aGVpciBv d24gcG9sbCgpIGZ1bmN0aW9ucyB0bw0KPiA+ID4gYXZvaWQgdGhlIHBlci1jaGFubmVsIHBvbGwg dGhyZWFkIHRoYXQgaXMgcHJvcG9zZWQgaW4gdGhpcyBzZXJpZXMuDQo+ID4gPg0KPiA+ID4gaHR0 cHM6Ly9sb3JlLmtlcm5lbC5vcmcvci9abGRZMjF4VkV4dGlNZGRCQHgxbg0KPiA+ID4NCj4gPg0K PiA+IFdlIG5vdGljZWQgdGhhdCwgYW5kIGl0J3MgYSBiaWcgb3BlcmF0aW9uLiBJJ20gbm90IHN1 cmUgdGhhdCdzIGEgYmV0dGVyIHdheS4NCj4gPg0KPiA+ID4gUGVyc29uYWxseSBJIHRoaW5rIGV2 ZW4gd2l0aCB0aGUgdGhyZWFkIHByb3Bvc2FsIGl0J3MgYmV0dGVyIHRoYW4NCj4gPiA+IHRoZSBv bGQgcmRtYSBjb2RlLCBidXQgSSBqdXN0IHN0aWxsIHdhbnQgdG8gZG91YmxlIGNoZWNrIHdpdGgg eW91DQo+ID4gPiBndXlzLiAgRS5nLiwgbWF5YmUgdGhhdCBqdXN0IHdvbid0IHdvcmsgYXQgYWxs PyAgQWdhaW4sIHRoYXQnbGwgYWxzbw0KPiA+ID4gYmUgYmFzZWQgb24gdGhlIGZhY3QgdGhhdCB3 ZSBtb3ZlIG1pZ3JhdGlvbiBpbmNvbWluZyBpbnRvIGEgdGhyZWFkDQo+ID4gPiBmaXJzdCB0byBr ZWVwIHRoZSBkZXN0IFFFTVUgbWFpbiBsb29wIGludGFjdCwgSSB0aGluaywgYnV0IEkgaG9wZSB3 ZQ0KPiA+ID4gd2lsbCByZWFjaCB0aGF0IGlycmVsZXZhbnQgb2YgcmRtYSwgSU9XIGl0J2xsIGJl IG5pY2UgdG8gaGFwcGVuIGV2ZW4gZWFybGllciBpZg0KPiBwb3NzaWJsZS4NCj4gPiA+DQo+ID4g WWVwLiBUaGlzIGlzIGEgZmFpcmx5IGJpZyBjaGFuZ2UsIEkgd29uZGVyIHdoYXQgb3RoZXIgcGVv cGxlJ3Mgc3VnZ2VzdGlvbnMNCj4gYXJlPw0KPiANCj4gWWVzIHdlIGNhbiB3YWl0IGZvciBvdGhl cnMnIG9waW5pb25zLiAgQW5kIGJ0dyBJJ20gbm90IGFza2luZyBmb3IgaXQgYW5kIEkgZG9uJ3QN Cj4gdGhpbmsgaXQnbGwgYmUgYSBibG9ja2VyIGZvciB0aGlzIGFwcHJvYWNoIHRvIGxhbmQsIGFz IEkgc2FpZCB0aGlzIGlzIGJldHRlciB0aGFuIHRoZQ0KPiBjdXJyZW50IGNvZGUgc28gaXQncyBk ZWZpbml0ZWx5IGFuIGltcHJvdmVtZW50IHRvIG1lLg0KPiANCj4gSSdtIHB1cmVseSBjdXJpb3Vz LCBiZWNhdXNlIGlmIHlvdSdyZSBub3QgZ29pbmcgdG8gZG8gaXQgZm9yIHJkbWEsIG1heWJlDQo+ IHNvbWVkYXkgSSdsbCB0cnkgdG8gZG8gdGhhdCwgYW5kIEkgd2FudCB0byBrbm93IHdoYXQgImJp ZyBjaGFuZ2UiIGNvdWxkIGJlIGFzIEkNCj4gZGlkbid0IGRpZyBmdXJ0aGVyLiAgSXQgbWF5IGhl bHAgbWUgYnkgc2hhcmluZyB3aGF0IGlzc3VlcyB5b3UndmUgZm91bmQuDQo+IA0KPiBUaGFua3Ms DQo+IA0KPiAtLQ0KPiBQZXRlciBYdQ0KDQo=