From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by dpdk.org (Postfix) with ESMTP id 02F4D2C01 for ; Fri, 22 Sep 2017 10:49:17 +0200 (CEST) Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 22 Sep 2017 01:49:16 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.42,427,1500966000"; d="scan'208";a="131294256" Received: from kmsmsx153.gar.corp.intel.com ([172.21.73.88]) by orsmga004.jf.intel.com with ESMTP; 22 Sep 2017 01:49:15 -0700 Received: from pgsmsx103.gar.corp.intel.com ([169.254.2.203]) by KMSMSX153.gar.corp.intel.com ([169.254.5.166]) with mapi id 14.03.0319.002; Fri, 22 Sep 2017 16:49:14 +0800 From: "Zhao1, Wei" To: "Chilikin, Andrey" , "dev@dpdk.org" CC: "Yigit, Ferruh" , "Xing, Beilei" , "Wu, Jingjing" Thread-Topic: [dpdk-dev] [PATCH v3 1/2] net/i40e: queue region set and flush Thread-Index: AQHTLdIoeqU7BZgiK0uTHIs5i75GdaK/RMAAgAFPq0A= Date: Fri, 22 Sep 2017 08:49:13 +0000 Message-ID: References: <1505282644-40415-1-git-send-email-wei.zhao1@intel.com> <1505445188-70251-1-git-send-email-wei.zhao1@intel.com> <1505445188-70251-2-git-send-email-wei.zhao1@intel.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 10.0.102.7 dlp-reaction: no-action x-originating-ip: [172.30.20.206] Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v3 1/2] net/i40e: queue region set and flush 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: Fri, 22 Sep 2017 08:49:19 -0000 SGmjrEFuZHJleQ0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IENoaWxp a2luLCBBbmRyZXkNCj4gU2VudDogRnJpZGF5LCBTZXB0ZW1iZXIgMjIsIDIwMTcgMzo1MyBBTQ0K PiBUbzogWmhhbzEsIFdlaSA8d2VpLnpoYW8xQGludGVsLmNvbT47IGRldkBkcGRrLm9yZw0KPiBD YzogWmhhbzEsIFdlaSA8d2VpLnpoYW8xQGludGVsLmNvbT47IFlpZ2l0LCBGZXJydWgNCj4gPGZl cnJ1aC55aWdpdEBpbnRlbC5jb20+OyBYaW5nLCBCZWlsZWkgPGJlaWxlaS54aW5nQGludGVsLmNv bT47IFd1LCBKaW5namluZw0KPiA8amluZ2ppbmcud3VAaW50ZWwuY29tPg0KPiBTdWJqZWN0OiBS RTogW2RwZGstZGV2XSBbUEFUQ0ggdjMgMS8yXSBuZXQvaTQwZTogcXVldWUgcmVnaW9uIHNldCBh bmQgZmx1c2gNCj4gDQo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiBGcm9tOiBk ZXYgW21haWx0bzpkZXYtYm91bmNlc0BkcGRrLm9yZ10gT24gQmVoYWxmIE9mIFdlaSBaaGFvDQo+ ID4gU2VudDogRnJpZGF5LCBTZXB0ZW1iZXIgMTUsIDIwMTcgNDoxMyBBTQ0KPiA+IFRvOiBkZXZA ZHBkay5vcmcNCj4gPiBDYzogWmhhbzEsIFdlaSA8d2VpLnpoYW8xQGludGVsLmNvbT4NCj4gPiBT dWJqZWN0OiBbZHBkay1kZXZdIFtQQVRDSCB2MyAxLzJdIG5ldC9pNDBlOiBxdWV1ZSByZWdpb24g c2V0IGFuZA0KPiA+IGZsdXNoDQo+ID4NCj4gPiBUaGlzIGZlYXR1cmUgZW5hYmxlIHF1ZXVlIHJl Z2lvbnMgY29uZmlndXJhdGlvbiBmb3IgUlNTIGluIFBGL1ZGLCBzbw0KPiA+IHRoYXQgZGlmZmVy ZW50IHRyYWZmaWMgY2xhc3NlcyBvciBkaWZmZXJlbnQgcGFja2V0IGNsYXNzaWZpY2F0aW9uDQo+ ID4gdHlwZXMgY2FuIGJlIHNlcGFyYXRlZCB0byBkaWZmZXJlbnQgcXVldWVzIGluIGRpZmZlcmVu dCBxdWV1ZQ0KPiA+IHJlZ2lvbnMuVGhpcyBwYXRjaCBjYW4gc2V0IHF1ZXVlIHJlZ2lvbiByYW5n ZSwgaXQgaW5jbHVkZSBxdWV1ZSBudW1iZXINCj4gPiBpbiBhIHJlZ2lvbiBhbmQgdGhlIGluZGV4 IG9mIGZpcnN0IHF1ZXVlLg0KPiA+IFRoaXMgcGF0Y2ggZW5hYmxlIG1hcHBpbmcgYmV0d2VlbiBk aWZmZXJlbnQgcHJpb3JpdGllcyAoVVApIGFuZA0KPiA+IGRpZmZlcmVudCB0cmFmZmljIGNsYXNz ZXMuSXQgYWxzbyBlbmFibGUgbWFwcGluZyBiZXR3ZWVuIGEgcmVnaW9uDQo+ID4gaW5kZXggYW5k IGEgc2VwY2lmaWMgZmxvd3R5cGUoUENUWVBFKS5JdCBhbHNvIHByb3ZpZGUgdGhlIHNvbHV0aW9u IG9mDQo+ID4gZmx1c2ggYWxsIGNvbmZpZ3VyYXRpb24gYWJvdXQgcXVldWUgcmVnaW9uIHRoZSBh Ym92ZSBkZXNjcmliZWQuDQo+ID4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBXZWkgWmhhbyA8d2VpLnpo YW8xQGludGVsLmNvbT4NCj4gPiAtLS0NCj4gPiAgZHJpdmVycy9uZXQvaTQwZS9pNDBlX2V0aGRl di5jICAgICAgICAgICAgfCAgMTkgKy0NCj4gPiAgZHJpdmVycy9uZXQvaTQwZS9pNDBlX2V0aGRl di5oICAgICAgICAgICAgfCAgMzAgKysNCj4gPiAgZHJpdmVycy9uZXQvaTQwZS9ydGVfcG1kX2k0 MGUuYyAgICAgICAgICAgfCA0ODINCj4gPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysN Cj4gPiAgZHJpdmVycy9uZXQvaTQwZS9ydGVfcG1kX2k0MGUuaCAgICAgICAgICAgfCAgMzggKysr DQo+ID4gIGRyaXZlcnMvbmV0L2k0MGUvcnRlX3BtZF9pNDBlX3ZlcnNpb24ubWFwIHwgICAxICsN Cj4gPiAgNSBmaWxlcyBjaGFuZ2VkLCA1NjYgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkN Cj4gPg0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pNDBlL2k0MGVfZXRoZGV2LmMNCj4g PiBiL2RyaXZlcnMvbmV0L2k0MGUvaTQwZV9ldGhkZXYuYyBpbmRleCA4ZTA1ODBjLi4xNjYzZmMw IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvbmV0L2k0MGUvaTQwZV9ldGhkZXYuYw0KPiA+ICsr KyBiL2RyaXZlcnMvbmV0L2k0MGUvaTQwZV9ldGhkZXYuYw0KPiA+IEBAIC0xMzcsMTAgKzEzNyw2 IEBADQo+ID4gICNkZWZpbmUgSTQwRV9QUlRUU1lOX1RTWU5UWVBFICAgIDB4MGUwMDAwMDANCj4g PiAgI2RlZmluZSBJNDBFX0NZQ0xFQ09VTlRFUl9NQVNLICAgMHhmZmZmZmZmZmZmZmZmZmZmVUxM DQo+ID4NCj4gPiAtI2RlZmluZSBJNDBFX01BWF9QRVJDRU5UICAgICAgICAgICAgMTAwDQo+ID4g LSNkZWZpbmUgSTQwRV9ERUZBVUxUX0RDQl9BUFBfTlVNICAgIDENCj4gPiAtI2RlZmluZSBJNDBF X0RFRkFVTFRfRENCX0FQUF9QUklPICAgMw0KPiA+IC0NCj4gPiAgLyoqDQo+ID4gICAqIEJlbG93 IGFyZSB2YWx1ZXMgZm9yIHdyaXRpbmcgdW4tZXhwb3NlZCByZWdpc3RlcnMgc3VnZ2VzdGVkDQo+ ID4gICAqIGJ5IHNpbGljb24gZXhwZXJ0cw0KPiA+IEBAIC0xMDM0LDYgKzEwMzAsMTUgQEAgaTQw ZV9pbml0X2ZkaXJfZmlsdGVyX2xpc3Qoc3RydWN0IHJ0ZV9ldGhfZGV2DQo+ICpkZXYpDQo+ID4g IAlyZXR1cm4gcmV0Ow0KPiA+ICB9DQo+ID4NCj4gPiArc3RhdGljIHZvaWQNCj4gPiAraTQwZV9p bml0X3F1ZXVlX3JlZ2lvbl9jb25mKHN0cnVjdCBydGVfZXRoX2RldiAqZGV2KSB7DQo+ID4gKwlz dHJ1Y3QgaTQwZV9wZiAqcGYgPSBJNDBFX0RFVl9QUklWQVRFX1RPX1BGKGRldi0+ZGF0YS0NCj4g PiA+ZGV2X3ByaXZhdGUpOw0KPiA+ICsJc3RydWN0IGk0MGVfcXVldWVfcmVnaW9uX2luZm8gKmlu Zm8gPSAmcGYtPnF1ZXVlX3JlZ2lvbjsNCj4gPiArDQo+ID4gKwltZW1zZXQoaW5mbywgMCwgc2l6 ZW9mKHN0cnVjdCBpNDBlX3F1ZXVlX3JlZ2lvbl9pbmZvKSk7IH0NCj4gPiArDQo+ID4gIHN0YXRp YyBpbnQNCj4gPiAgZXRoX2k0MGVfZGV2X2luaXQoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYpICB7 IEBAIC0xMzA5LDYgKzEzMTQsOSBAQA0KPiA+IGV0aF9pNDBlX2Rldl9pbml0KHN0cnVjdCBydGVf ZXRoX2RldiAqZGV2KQ0KPiA+ICAJaWYgKHJldCA8IDApDQo+ID4gIAkJZ290byBlcnJfaW5pdF9m ZGlyX2ZpbHRlcl9saXN0Ow0KPiA+DQo+ID4gKwkvKiBpbml0aWFsaXplIHF1ZXVlIHJlZ2lvbiBj b25maWd1cmF0aW9uICovDQo+ID4gKwlpNDBlX2luaXRfcXVldWVfcmVnaW9uX2NvbmYoZGV2KTsN Cj4gPiArDQo+ID4gIAlyZXR1cm4gMDsNCj4gPg0KPiA+ICBlcnJfaW5pdF9mZGlyX2ZpbHRlcl9s aXN0Og0KPiA+IEBAIC0xNDY0LDYgKzE0NzIsOSBAQCBldGhfaTQwZV9kZXZfdW5pbml0KHN0cnVj dCBydGVfZXRoX2RldiAqZGV2KQ0KPiA+ICAJLyogUmVtb3ZlIGFsbCBUcmFmZmljIE1hbmFnZXIg Y29uZmlndXJhdGlvbiAqLw0KPiA+ICAJaTQwZV90bV9jb25mX3VuaW5pdChkZXYpOw0KPiA+DQo+ ID4gKwkvKiBSZW1vdmUgYWxsIHRoZSBxdWV1ZSByZWdpb24gY29uZmlndXJhdGlvbiAqLw0KPiA+ ICsJaTQwZV9mbHVzaF9yZWdpb25fYWxsX2NvbmYoaHcsIHBmLCAwKTsNCj4gPiArDQo+ID4gIAly ZXR1cm4gMDsNCj4gPiAgfQ0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2k0MGUv aTQwZV9ldGhkZXYuaA0KPiA+IGIvZHJpdmVycy9uZXQvaTQwZS9pNDBlX2V0aGRldi5oIGluZGV4 IGFkODBmMGYuLmQ2MTI4ODYgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9uZXQvaTQwZS9pNDBl X2V0aGRldi5oDQo+ID4gKysrIGIvZHJpdmVycy9uZXQvaTQwZS9pNDBlX2V0aGRldi5oDQo+ID4g QEAgLTI2MCw2ICsyNjAsMTYgQEAgZW51bSBpNDBlX2ZseHBsZF9sYXllcl9pZHggeyAgI2RlZmlu ZQ0KPiA+IEk0MEVfUU9TX0JXX1dFSUdIVF9NSU4gMQ0KPiA+ICAvKiBUaGUgbWF4IGJhbmR3aWR0 aCB3ZWlnaHQgaXMgMTI3LiAqLyAgI2RlZmluZQ0KPiA+IEk0MEVfUU9TX0JXX1dFSUdIVF9NQVgg MTI3DQo+ID4gKy8qIFRoZSBtYXggcXVldWUgcmVnaW9uIGluZGV4IGlzIDcuICovICNkZWZpbmUN Cj4gSTQwRV9SRUdJT05fTUFYX0lOREVYDQo+ID4gKzcNCj4gPiArLyogVGhlIG1heCBxdWV1ZSBy ZWdpb24gdXNlcnByaW9yaXR5IGlzIDcuICovICNkZWZpbmUNCj4gPiArSTQwRV9SRUdJT05fVVNF UlBSSU9SSVRZX01BWF9JTkRFWCA3DQo+ID4gKy8qIFRoZSBtYXggcGN0eXBlIGluZGV4IGlzIDYz LiAqLw0KPiA+ICsjZGVmaW5lIEk0MEVfUkVHSU9OX1BDVFlQRV9NQVhfSU5ERVggNjMNCj4gPiAr DQo+ID4gKyNkZWZpbmUgSTQwRV9NQVhfUEVSQ0VOVCAgICAgICAgICAgIDEwMA0KPiA+ICsjZGVm aW5lIEk0MEVfREVGQVVMVF9EQ0JfQVBQX05VTSAgICAxDQo+ID4gKyNkZWZpbmUgSTQwRV9ERUZB VUxUX0RDQl9BUFBfUFJJTyAgIDMNCj4gPg0KPiA+ICAvKioNCj4gPiAgICogVGhlIG92ZXJoZWFk IGZyb20gTVRVIHRvIG1heCBmcmFtZSBzaXplLg0KPiA+IEBAIC01NDEsNiArNTUxLDIyIEBAIHN0 cnVjdCBpNDBlX2V0aGVydHlwZV9ydWxlIHsNCj4gPiAgCXN0cnVjdCBydGVfaGFzaCAqaGFzaF90 YWJsZTsNCj4gPiAgfTsNCj4gPg0KPiA+ICsvKiBxdWV1ZSByZWdpb24gaW5mbyAqLw0KPiA+ICtz dHJ1Y3QgaTQwZV9yZWdpb25faW5mbyB7DQo+ID4gKwl1aW50OF90IHJlZ2lvbl9pZDsNCj4gPiAr CXVpbnQ4X3QgcXVldWVfc3RhcnRfaW5kZXg7DQo+ID4gKwl1aW50OF90IHF1ZXVlX251bTsNCj4g PiArCXVpbnQ4X3QgdXNlcl9wcmlvcml0eV9udW07DQo+ID4gKwl1aW50OF90IHVzZXJfcHJpb3Jp dHlbSTQwRV9NQVhfVVNFUl9QUklPUklUWV07DQo+ID4gKwl1aW50OF90IGZsb3d0eXBlX251bTsN Cj4gPiArCXVpbnQ4X3QgaHdfZmxvd3R5cGVbSTQwRV9GSUxURVJfUENUWVBFX01BWF07DQo+ID4g K307DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgaTQwZV9xdWV1ZV9yZWdpb25faW5mbyB7DQo+ID4gKwl1 aW50MTZfdCBxdWV1ZV9yZWdpb25fbnVtYmVyOw0KPiA+ICsJc3RydWN0IGk0MGVfcmVnaW9uX2lu Zm8gcmVnaW9uW0k0MEVfUkVHSU9OX01BWF9JTkRFWCArIDFdOyB9Ow0KPiA+ICsNCj4gPiAgLyog VHVubmVsIGZpbHRlciBudW1iZXIgSFcgc3VwcG9ydHMgKi8gICNkZWZpbmUNCj4gPiBJNDBFX01B WF9UVU5ORUxfRklMVEVSX05VTSA0MDANCj4gPg0KPiA+IEBAIC03NzYsNiArODAyLDcgQEAgc3Ry dWN0IGk0MGVfcGYgew0KPiA+ICAJc3RydWN0IGk0MGVfZmRpcl9pbmZvIGZkaXI7IC8qIGZsb3cg ZGlyZWN0b3IgaW5mbyAqLw0KPiA+ICAJc3RydWN0IGk0MGVfZXRoZXJ0eXBlX3J1bGUgZXRoZXJ0 eXBlOyAvKiBFdGhlcnR5cGUgZmlsdGVyIHJ1bGUgKi8NCj4gPiAgCXN0cnVjdCBpNDBlX3R1bm5l bF9ydWxlIHR1bm5lbDsgLyogVHVubmVsIGZpbHRlciBydWxlICovDQo+ID4gKwlzdHJ1Y3QgaTQw ZV9xdWV1ZV9yZWdpb25faW5mbyBxdWV1ZV9yZWdpb247IC8qIHF1ZXVlIHJlZ2lvbiBpbmZvDQo+ ID4gKi8NCj4gPiAgCXN0cnVjdCBpNDBlX2ZjX2NvbmYgZmNfY29uZjsgLyogRmxvdyBjb250cm9s IGNvbmYgKi8NCj4gPiAgCXN0cnVjdCBpNDBlX21pcnJvcl9ydWxlX2xpc3QgbWlycm9yX2xpc3Q7 DQo+ID4gIAl1aW50MTZfdCBuYl9taXJyb3JfcnVsZTsgICAvKiBUaGUgbnVtYmVyIG9mIG1pcnJv ciBydWxlcyAqLw0KPiA+IEBAIC0xMDAzLDYgKzEwMzAsOSBAQCB2b2lkIGk0MGVfY2hlY2tfd3Jp dGVfcmVnKHN0cnVjdCBpNDBlX2h3ICpodywNCj4gPiB1aW50MzJfdCBhZGRyLCB1aW50MzJfdCB2 YWwpOyAgaW50IGk0MGVfdG1fb3BzX2dldChzdHJ1Y3QgcnRlX2V0aF9kZXYNCj4gPiAqZGV2LCB2 b2lkICpvcHMpOyAgdm9pZCBpNDBlX3RtX2NvbmZfaW5pdChzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRl dik7DQo+ID4gdm9pZCBpNDBlX3RtX2NvbmZfdW5pbml0KHN0cnVjdCBydGVfZXRoX2RldiAqZGV2 KTsNCj4gPiAraW50IGk0MGVfZmx1c2hfcmVnaW9uX2FsbF9jb25mKHN0cnVjdCBpNDBlX2h3ICpo dywNCj4gPiArCQkJCXN0cnVjdCBpNDBlX3BmICpwZiwgdWludDE2X3Qgb24pOw0KPiA+ICsNCj4g Pg0KPiA+ICAjZGVmaW5lIEk0MEVfREVWX1RPX1BDSShldGhfZGV2KSBcDQo+ID4gIAlSVEVfREVW X1RPX1BDSSgoZXRoX2RldiktPmRldmljZSkNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQv aTQwZS9ydGVfcG1kX2k0MGUuYw0KPiA+IGIvZHJpdmVycy9uZXQvaTQwZS9ydGVfcG1kX2k0MGUu YyBpbmRleCBkNjlhNDcyLi45YTc1ZjIxIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvbmV0L2k0 MGUvcnRlX3BtZF9pNDBlLmMNCj4gPiArKysgYi9kcml2ZXJzL25ldC9pNDBlL3J0ZV9wbWRfaTQw ZS5jDQo+ID4gQEAgLTM1LDYgKzM1LDcgQEANCj4gPiAgI2luY2x1ZGUgPHJ0ZV90YWlscS5oPg0K PiA+DQo+ID4gICNpbmNsdWRlICJiYXNlL2k0MGVfcHJvdG90eXBlLmgiDQo+ID4gKyNpbmNsdWRl ICJiYXNlL2k0MGVfZGNiLmgiDQo+ID4gICNpbmNsdWRlICJpNDBlX2V0aGRldi5oIg0KPiA+ICAj aW5jbHVkZSAiaTQwZV9wZi5oIg0KPiA+ICAjaW5jbHVkZSAiaTQwZV9yeHR4LmgiDQo+ID4gQEAg LTIxNjEsMyArMjE2Miw0ODQgQEAgcnRlX3BtZF9pNDBlX2FkZF92Zl9tYWNfYWRkcih1aW50OF90 IHBvcnQsDQo+ID4gdWludDE2X3QgdmZfaWQsDQo+ID4NCj4gPiAgCXJldHVybiAwOw0KPiA+ICB9 DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50DQo+ID4gK2k0MGVfdnNpX3VwZGF0ZV9xdWV1ZV9yZWdp b25fbWFwcGluZyhzdHJ1Y3QgaTQwZV9odyAqaHcsDQo+ID4gKwkJCSAgICAgIHN0cnVjdCBpNDBl X3BmICpwZikNCj4gPiArew0KPiA+ICsJdWludDE2X3QgaTsNCj4gPiArCXN0cnVjdCBpNDBlX3Zz aSAqdnNpID0gcGYtPm1haW5fdnNpOw0KPiA+ICsJdWludDE2X3QgcXVldWVfb2Zmc2V0LCBic2Ys IHRjX2luZGV4Ow0KPiA+ICsJc3RydWN0IGk0MGVfdnNpX2NvbnRleHQgY3R4dDsNCj4gPiArCXN0 cnVjdCBpNDBlX2FxY192c2lfcHJvcGVydGllc19kYXRhICp2c2lfaW5mbzsNCj4gPiArCXN0cnVj dCBpNDBlX3F1ZXVlX3JlZ2lvbl9pbmZvICpyZWdpb25faW5mbyA9DQo+ID4gKwkJCQkmcGYtPnF1 ZXVlX3JlZ2lvbjsNCj4gPiArCXVpbnQzMl90IHJldCA9IC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsJ aWYgKCFyZWdpb25faW5mby0+cXVldWVfcmVnaW9uX251bWJlcikgew0KPiA+ICsJCVBNRF9JTklU X0xPRyhFUlIsICJ0aGVyZSBpcyBubyB0aGF0IHJlZ2lvbiBpZCBiZWVuIHNldA0KPiA+IGJlZm9y ZSIpOw0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJbWVtc2V0KCZj dHh0LCAwLCBzaXplb2Yoc3RydWN0IGk0MGVfdnNpX2NvbnRleHQpKTsNCj4gPiArDQo+ID4gKwkv KiBVcGRhdGUgUXVldWUgUGFpcnMgTWFwcGluZyBmb3IgY3VycmVudGx5IGVuYWJsZWQgVVBzICov DQo+ID4gKwljdHh0LnNlaWQgPSB2c2ktPnNlaWQ7DQo+ID4gKwljdHh0LnBmX251bSA9IGh3LT5w Zl9pZDsNCj4gPiArCWN0eHQudmZfbnVtID0gMDsNCj4gPiArCWN0eHQudXBsaW5rX3NlaWQgPSB2 c2ktPnVwbGlua19zZWlkOw0KPiA+ICsJY3R4dC5pbmZvID0gdnNpLT5pbmZvOw0KPiA+ICsJdnNp X2luZm8gPSAmY3R4dC5pbmZvOw0KPiA+ICsNCj4gPiArCW1lbXNldCh2c2lfaW5mby0+dGNfbWFw cGluZywgMCwgc2l6ZW9mKHVpbnQxNl90KSAqIDgpOw0KPiA+ICsJbWVtc2V0KHZzaV9pbmZvLT5x dWV1ZV9tYXBwaW5nLCAwLCBzaXplb2YodWludDE2X3QpICogMTYpOw0KPiA+ICsNCj4gPiArCS8q Kg0KPiA+ICsJICogQ29uZmlndXJlIHF1ZXVlIHJlZ2lvbiBhbmQgcXVldWUgbWFwcGluZyBwYXJh bWV0ZXJzLA0KPiA+ICsJICogZm9yIGVuYWJsZWQgcXVldWUgcmVnaW9uLCBhbGxvY2F0ZSBxdWV1 ZXMgdG8gdGhpcyByZWdpb24uDQo+ID4gKwkgKi8NCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBp IDwgcmVnaW9uX2luZm8tPnF1ZXVlX3JlZ2lvbl9udW1iZXI7IGkrKykgew0KPiA+ICsJCXRjX2lu ZGV4ID0gcmVnaW9uX2luZm8tPnJlZ2lvbltpXS5yZWdpb25faWQ7DQo+ID4gKwkJYnNmID0gcnRl X2JzZjMyKHJlZ2lvbl9pbmZvLT5yZWdpb25baV0ucXVldWVfbnVtKTsNCj4gPiArCQlxdWV1ZV9v ZmZzZXQgPSByZWdpb25faW5mby0+cmVnaW9uW2ldLnF1ZXVlX3N0YXJ0X2luZGV4Ow0KPiA+ICsJ CXZzaV9pbmZvLT50Y19tYXBwaW5nW3RjX2luZGV4XSA9IHJ0ZV9jcHVfdG9fbGVfMTYoDQo+ID4g KwkJCShxdWV1ZV9vZmZzZXQgPDwNCj4gPiBJNDBFX0FRX1ZTSV9UQ19RVUVfT0ZGU0VUX1NISUZU KSB8DQo+ID4gKwkJCQkoYnNmIDw8DQo+ID4gSTQwRV9BUV9WU0lfVENfUVVFX05VTUJFUl9TSElG VCkpOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIEFzc29jaWF0ZSBxdWV1ZSBudW1iZXIgd2l0 aCBWU0ksIEtlZXAgdnNpLT5uYl9xcHMgdW5jaGFuZ2VkDQo+ID4gKi8NCj4gPiArCWlmICh2c2kt PnR5cGUgPT0gSTQwRV9WU0lfU1JJT1YpIHsNCj4gPiArCQl2c2lfaW5mby0+bWFwcGluZ19mbGFn cyB8PQ0KPiA+ICsNCj4gPiAJcnRlX2NwdV90b19sZV8xNihJNDBFX0FRX1ZTSV9RVUVfTUFQX05P TkNPTlRJRyk7DQo+ID4gKwkJZm9yIChpID0gMDsgaSA8IHZzaS0+bmJfcXBzOyBpKyspDQo+ID4g KwkJCXZzaV9pbmZvLT5xdWV1ZV9tYXBwaW5nW2ldID0NCj4gPiArCQkJCXJ0ZV9jcHVfdG9fbGVf MTYodnNpLT5iYXNlX3F1ZXVlICsgaSk7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCXZzaV9pbmZv LT5tYXBwaW5nX2ZsYWdzIHw9DQo+ID4gKw0KPiA+IAlydGVfY3B1X3RvX2xlXzE2KEk0MEVfQVFf VlNJX1FVRV9NQVBfQ09OVElHKTsNCj4gPiArCQl2c2lfaW5mby0+cXVldWVfbWFwcGluZ1swXSA9 IHJ0ZV9jcHVfdG9fbGVfMTYodnNpLQ0KPiA+ID5iYXNlX3F1ZXVlKTsNCj4gPiArCX0NCj4gPiAr CXZzaV9pbmZvLT52YWxpZF9zZWN0aW9ucyB8PQ0KPiA+ICsNCj4gPiAJcnRlX2NwdV90b19sZV8x NihJNDBFX0FRX1ZTSV9QUk9QX1FVRVVFX01BUF9WQUxJRCk7DQo+ID4gKw0KPiA+ICsJLyogVXBk YXRlIHRoZSBWU0kgYWZ0ZXIgdXBkYXRpbmcgdGhlIFZTSSBxdWV1ZS1tYXBwaW5nDQo+ID4gaW5m b3JtYXRpb24gKi8NCj4gPiArCXJldCA9IGk0MGVfYXFfdXBkYXRlX3ZzaV9wYXJhbXMoaHcsICZj dHh0LCBOVUxMKTsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlQTURfSU5JVF9MT0coRVJSLCAi RmFpbGVkIHRvIGNvbmZpZ3VyZSBxdWV1ZSByZWdpb24gIg0KPiA+ICsJCQkibWFwcGluZyA9ICVk ICIsIGh3LT5hcS5hc3FfbGFzdF9zdGF0dXMpOw0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9 DQo+ID4gKwkvKiB1cGRhdGUgdGhlIGxvY2FsIFZTSSBpbmZvIHdpdGggdXBkYXRlZCBxdWV1ZSBt YXAgKi8NCj4gPiArCSh2b2lkKXJ0ZV9tZW1jcHkoJnZzaS0+aW5mby50Y19tYXBwaW5nLCAmY3R4 dC5pbmZvLnRjX21hcHBpbmcsDQo+ID4gKwkJCQkJc2l6ZW9mKHZzaS0+aW5mby50Y19tYXBwaW5n KSk7DQo+ID4gKwkodm9pZClydGVfbWVtY3B5KCZ2c2ktPmluZm8ucXVldWVfbWFwcGluZywNCj4g PiArCQkJJmN0eHQuaW5mby5xdWV1ZV9tYXBwaW5nLA0KPiA+ICsJCXNpemVvZih2c2ktPmluZm8u cXVldWVfbWFwcGluZykpOw0KPiA+ICsJdnNpLT5pbmZvLm1hcHBpbmdfZmxhZ3MgPSBjdHh0Lmlu Zm8ubWFwcGluZ19mbGFnczsNCj4gPiArCXZzaS0+aW5mby52YWxpZF9zZWN0aW9ucyA9IDA7DQo+ ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKw0KPiA+ICtzdGF0aWMg aW50DQo+ID4gK2k0MGVfc2V0X3F1ZXVlX3JlZ2lvbihzdHJ1Y3QgaTQwZV9wZiAqcGYsDQo+ID4g KwkJCQlzdHJ1Y3QgcnRlX2k0MGVfcnNzX3JlZ2lvbl9jb25mICpjb25mX3B0cikgew0KPiA+ICsJ dWludDE2X3QgdGNfc2l6ZV90Yls3XSA9IHsxLCAyLCA0LCA4LCAxNiwgMzIsIDY0fTsNCj4gPiAr CXVpbnQxNl90IGk7DQo+ID4gKwlzdHJ1Y3QgaTQwZV92c2kgKm1haW5fdnNpID0gcGYtPm1haW5f dnNpOw0KPiA+ICsJc3RydWN0IGk0MGVfcXVldWVfcmVnaW9uX2luZm8gKmluZm8gPSAmcGYtPnF1 ZXVlX3JlZ2lvbjsNCj4gPiArCXVpbnQzMl90IHJldCA9IC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsJ Zm9yIChpID0gMDsgaSA8IEk0MEVfUkVHSU9OX01BWF9JTkRFWDsgaSsrKQ0KPiA+ICsJCWlmIChj b25mX3B0ci0+cXVldWVfbnVtID09IHRjX3NpemVfdGJbaV0pDQo+ID4gKwkJCWJyZWFrOw0KPiA+ ICsNCj4gPiArCWlmIChpID09IEk0MEVfUkVHSU9OX01BWF9JTkRFWCkgew0KPiA+ICsJCXByaW50 ZigiVGhlIHJlZ2lvbiBzaXplcyBzaG91bGQgYmUgYW55IG9mIHRoZSBmb2xsb3dpbmcgIg0KPiA+ ICsJCSJ2YWx1ZXM6IDEsIDIsIDQsIDgsIDE2LCAzMiwgNjQgYXMgbG9uZyBhcyB0aGUgIg0KPiA+ ICsJCSJ0b3RhbCBudW1iZXIgb2YgcXVldWVzIGRvIG5vdCBleGNlZWQgdGhlIFZTSSBhbGxvY2F0 aW9uIik7DQo+IA0KPiBwcmludGY/DQo+IA0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ ID4gKw0KPiA+ICsJaWYgKGNvbmZfcHRyLT5yZWdpb25faWQgPj0gSTQwRV9SRUdJT05fTUFYX0lO REVYKSB7DQo+ID4gKwkJUE1EX0lOSVRfTE9HKEVSUiwgInRoZSBxdWV1ZSByZWdpb24gbWF4IGlu ZGV4IGlzIDciKTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlm ICgoY29uZl9wdHItPnF1ZXVlX3N0YXJ0X2luZGV4ICsgY29uZl9wdHItPnF1ZXVlX251bSkNCj4g PiArCQkJCQk+IG1haW5fdnNpLT5uYl91c2VkX3Fwcykgew0KPiA+ICsJCVBNRF9JTklUX0xPRyhF UlIsICJ0aGUgcXVldWUgaW5kZXggZXhjZWVkcyB0aGUgVlNJDQo+ID4gcmFuZ2UiKTsNCj4gPiAr CQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChpbmZvLT5xdWV1ZV9yZWdp b25fbnVtYmVyKSB7DQo+ID4gKwkJZm9yIChpID0gMDsgaSA8IGluZm8tPnF1ZXVlX3JlZ2lvbl9u dW1iZXI7IGkrKykNCj4gPiArCQkJaWYgKGNvbmZfcHRyLT5yZWdpb25faWQgPT0gaW5mby0+cmVn aW9uW2ldLnJlZ2lvbl9pZCkNCj4gPiArCQkJCWJyZWFrOw0KPiA+ICsNCj4gPiArCQlpZiAoKGkg PT0gaW5mby0+cXVldWVfcmVnaW9uX251bWJlcikgJiYNCj4gPiArCQkJKGkgPD0gSTQwRV9SRUdJ T05fTUFYX0lOREVYKSkgew0KPiA+ICsJCQlpbmZvLT5yZWdpb25baV0ucmVnaW9uX2lkID0gY29u Zl9wdHItPnJlZ2lvbl9pZDsNCj4gPiArCQkJaW5mby0+cmVnaW9uW2ldLnF1ZXVlX251bSA9IGNv bmZfcHRyLQ0KPiA+ID5xdWV1ZV9udW07DQo+ID4gKwkJCWluZm8tPnJlZ2lvbltpXS5xdWV1ZV9z dGFydF9pbmRleCA9DQo+ID4gKwkJCQljb25mX3B0ci0+cXVldWVfc3RhcnRfaW5kZXg7DQo+ID4g KwkJCWluZm8tPnF1ZXVlX3JlZ2lvbl9udW1iZXIrKzsNCj4gPiArCQl9IGVsc2Ugew0KPiA+ICsJ CQlQTURfSU5JVF9MT0coRVJSLCAicXVldWUgcmVnaW9uIG51bWJlciAiDQo+ID4gKwkJCQkiZXhj ZWVkcyBtYXhudW0gOCBvciB0aGUgIg0KPiA+ICsJCQkJInF1ZXVlIHJlZ2lvbiBpZCBoYXMgIg0K PiA+ICsJCQkJImJlZW4gc2V0IGJlZm9yZSIpOw0KPiA+ICsJCQlyZXR1cm4gcmV0Ow0KPiA+ICsJ CX0NCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJaW5mby0+cmVnaW9uWzBdLnJlZ2lvbl9pZCA9IGNv bmZfcHRyLT5yZWdpb25faWQ7DQo+ID4gKwkJaW5mby0+cmVnaW9uWzBdLnF1ZXVlX251bSA9IGNv bmZfcHRyLT5xdWV1ZV9udW07DQo+ID4gKwkJaW5mby0+cmVnaW9uWzBdLnF1ZXVlX3N0YXJ0X2lu ZGV4ID0NCj4gPiArCQkJY29uZl9wdHItPnF1ZXVlX3N0YXJ0X2luZGV4Ow0KPiA+ICsJCWluZm8t PnF1ZXVlX3JlZ2lvbl9udW1iZXIrKzsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludA0KPiA+ICtpNDBlX3NldF9yZWdpb25fZmxv d3R5cGVfcGYoc3RydWN0IGk0MGVfaHcgKmh3LA0KPiA+ICsJCXN0cnVjdCBpNDBlX3BmICpwZiwg c3RydWN0IHJ0ZV9pNDBlX3Jzc19yZWdpb25fY29uZg0KPiA+ICpjb25mX3B0cikNCj4gPiArew0K PiA+ICsJdWludDMyX3QgcGZxZl9ocmVnaW9uOw0KPiA+ICsJdWludDMyX3QgcmV0ID0gLUVJTlZB TDsNCj4gPiArCXN0cnVjdCBpNDBlX3F1ZXVlX3JlZ2lvbl9pbmZvICppbmZvID0gJnBmLT5xdWV1 ZV9yZWdpb247DQo+ID4gKwl1aW50MTZfdCBpLCBqLCBpbmRleCwgZmxvd3R5cGVfc2V0ID0gMDsN Cj4gPiArCXVpbnQxNl90IHJlZ2lvbl9pbmRleCwgZmxvd3R5cGVfaW5kZXg7DQo+ID4gKw0KPiA+ ICsJaWYgKGNvbmZfcHRyLT5yZWdpb25faWQgPiBJNDBFX1BGUUZfSFJFR0lPTl9NQVhfSU5ERVgp IHsNCj4gPiArCQlQTURfSU5JVF9MT0coRVJSLCAidGhlIHF1ZXVlIHJlZ2lvbiBtYXggaW5kZXgg aXMgNyIpOw0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKGNv bmZfcHRyLT5od19mbG93dHlwZSA+PSBJNDBFX0ZJTFRFUl9QQ1RZUEVfTUFYKSB7DQo+ID4gKwkJ UE1EX0lOSVRfTE9HKEVSUiwgInRoZSBod19mbG93dHlwZSBvciBQQ1RZUEUgbWF4IGluZGV4DQo+ ID4gaXMgNjMiKTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlm IChpbmZvLT5xdWV1ZV9yZWdpb25fbnVtYmVyKSB7DQo+ID4gKwkJZm9yIChpID0gMDsgaSA8IGlu Zm8tPnF1ZXVlX3JlZ2lvbl9udW1iZXI7IGkrKykNCj4gPiArCQkJaWYgKGNvbmZfcHRyLT5yZWdp b25faWQgPT0gaW5mby0+cmVnaW9uW2ldLnJlZ2lvbl9pZCkNCj4gPiArCQkJCWJyZWFrOw0KPiA+ ICsNCj4gPiArCQlpZiAoaSA9PSBpbmZvLT5xdWV1ZV9yZWdpb25fbnVtYmVyKSB7DQo+ID4gKwkJ CVBNRF9JTklUX0xPRyhFUlIsICJ0aGF0IHJlZ2lvbiBpZCBoYXMgbm90ICINCj4gPiArCQkJCSJi ZWVuIHNldCBiZWZvcmUiKTsNCj4gPiArCQkJcmV0dXJuIHJldDsNCj4gPiArCQl9DQo+ID4gKwkJ cmVnaW9uX2luZGV4ID0gaTsNCj4gPiArDQo+ID4gKwkJZm9yIChpID0gMDsgaSA8IGluZm8tPnF1 ZXVlX3JlZ2lvbl9udW1iZXI7IGkrKykgew0KPiA+ICsJCQlmb3IgKGogPSAwOyBqIDwgaW5mby0+ cmVnaW9uW2ldLmZsb3d0eXBlX251bTsgaisrKSB7DQo+ID4gKwkJCQlpZiAoY29uZl9wdHItPmh3 X2Zsb3d0eXBlID09DQo+ID4gKwkJCQkJaW5mby0+cmVnaW9uW2ldLmh3X2Zsb3d0eXBlW2pdKSB7 DQo+ID4gKwkJCQkJZmxvd3R5cGVfc2V0ID0gMTsNCj4gPiArCQkJCQlicmVhazsNCj4gPiArCQkJ CX0NCj4gPiArCQkJfQ0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJaWYgKGZsb3d0eXBlX3NldCkg ew0KPiA+ICsJCQlQTURfSU5JVF9MT0coRVJSLCAidGhhdCBod19mbG93dHlwZSAiDQo+ID4gKwkJ CQkiaGFzIGJlZW4gc2V0IGJlZm9yZSIpOw0KPiA+ICsJCQlyZXR1cm4gcmV0Ow0KPiA+ICsJCX0N Cj4gPiArCQlmbG93dHlwZV9pbmRleCA9IGluZm8tDQo+ID4gPnJlZ2lvbltyZWdpb25faW5kZXhd LmZsb3d0eXBlX251bTsNCj4gPiArCQlpbmZvLT5yZWdpb25bcmVnaW9uX2luZGV4XS5od19mbG93 dHlwZVtmbG93dHlwZV9pbmRleF0gPQ0KPiA+ICsJCQkJCQljb25mX3B0ci0+aHdfZmxvd3R5cGU7 DQo+ID4gKwkJaW5mby0+cmVnaW9uW3JlZ2lvbl9pbmRleF0uZmxvd3R5cGVfbnVtKys7DQo+ID4g Kwl9IGVsc2UgIHsNCj4gPiArCQlQTURfSU5JVF9MT0coRVJSLCAidGhlcmUgaXMgbm8gdGhhdCBy ZWdpb24gaWQgYmVlbiBzZXQNCj4gPiBiZWZvcmUiKTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ ICsJfQ0KPiA+ICsNCj4gPiArCWluZGV4ID0gY29uZl9wdHItPmh3X2Zsb3d0eXBlID4+IDM7DQo+ ID4gKwlwZnFmX2hyZWdpb24gPSBpNDBlX3JlYWRfcnhfY3RsKGh3LCBJNDBFX1BGUUZfSFJFR0lP TihpbmRleCkpOw0KPiA+ICsNCj4gPiArCWlmICgoY29uZl9wdHItPmh3X2Zsb3d0eXBlICYgMHg3 KSA9PSAwKSB7DQo+ID4gKwkJcGZxZl9ocmVnaW9uIHw9IGNvbmZfcHRyLT5yZWdpb25faWQgPDwN Cj4gPiArCQkJCUk0MEVfUEZRRl9IUkVHSU9OX1JFR0lPTl8wX1NISUZUOw0KPiA+ICsJCXBmcWZf aHJlZ2lvbiB8PSAxIDw8DQo+ID4gSTQwRV9QRlFGX0hSRUdJT05fT1ZFUlJJREVfRU5BXzBfU0hJ RlQ7DQo+ID4gKwl9IGVsc2UgaWYgKChjb25mX3B0ci0+aHdfZmxvd3R5cGUgJiAweDcpID09IDEp IHsNCj4gPiArCQlwZnFmX2hyZWdpb24gfD0gY29uZl9wdHItPnJlZ2lvbl9pZCA8PA0KPiA+ICsJ CQkJSTQwRV9QRlFGX0hSRUdJT05fUkVHSU9OXzFfU0hJRlQ7DQo+ID4gKwkJcGZxZl9ocmVnaW9u IHw9IDEgPDwNCj4gPiBJNDBFX1BGUUZfSFJFR0lPTl9PVkVSUklERV9FTkFfMV9TSElGVDsNCj4g PiArCX0gZWxzZSBpZiAoKGNvbmZfcHRyLT5od19mbG93dHlwZSAmIDB4NykgPT0gMikgew0KPiA+ ICsJCXBmcWZfaHJlZ2lvbiB8PSBjb25mX3B0ci0+cmVnaW9uX2lkIDw8DQo+ID4gKwkJCQlJNDBF X1BGUUZfSFJFR0lPTl9SRUdJT05fMl9TSElGVDsNCj4gPiArCQlwZnFmX2hyZWdpb24gfD0gMSA8 PA0KPiA+IEk0MEVfUEZRRl9IUkVHSU9OX09WRVJSSURFX0VOQV8yX1NISUZUOw0KPiA+ICsJfSBl bHNlIGlmICgoY29uZl9wdHItPmh3X2Zsb3d0eXBlICYgMHg3KSA9PSAzKSB7DQo+ID4gKwkJcGZx Zl9ocmVnaW9uIHw9IGNvbmZfcHRyLT5yZWdpb25faWQgPDwNCj4gPiArCQkJCUk0MEVfUEZRRl9I UkVHSU9OX1JFR0lPTl8zX1NISUZUOw0KPiA+ICsJCXBmcWZfaHJlZ2lvbiB8PSAxIDw8DQo+ID4g STQwRV9QRlFGX0hSRUdJT05fT1ZFUlJJREVfRU5BXzNfU0hJRlQ7DQo+ID4gKwl9IGVsc2UgaWYg KChjb25mX3B0ci0+aHdfZmxvd3R5cGUgJiAweDcpID09IDQpIHsNCj4gPiArCQlwZnFmX2hyZWdp b24gfD0gY29uZl9wdHItPnJlZ2lvbl9pZCA8PA0KPiA+ICsJCQkJSTQwRV9QRlFGX0hSRUdJT05f UkVHSU9OXzRfU0hJRlQ7DQo+ID4gKwkJcGZxZl9ocmVnaW9uIHw9IDEgPDwNCj4gPiBJNDBFX1BG UUZfSFJFR0lPTl9PVkVSUklERV9FTkFfNF9TSElGVDsNCj4gPiArCX0gZWxzZSBpZiAoKGNvbmZf cHRyLT5od19mbG93dHlwZSAmIDB4NykgPT0gNSkgew0KPiA+ICsJCXBmcWZfaHJlZ2lvbiB8PSBj b25mX3B0ci0+cmVnaW9uX2lkIDw8DQo+ID4gKwkJCQlJNDBFX1BGUUZfSFJFR0lPTl9SRUdJT05f NV9TSElGVDsNCj4gPiArCQlwZnFmX2hyZWdpb24gfD0gMSA8PA0KPiA+IEk0MEVfUEZRRl9IUkVH SU9OX09WRVJSSURFX0VOQV81X1NISUZUOw0KPiA+ICsJfSBlbHNlIGlmICgoY29uZl9wdHItPmh3 X2Zsb3d0eXBlICYgMHg3KSA9PSA2KSB7DQo+ID4gKwkJcGZxZl9ocmVnaW9uIHw9IGNvbmZfcHRy LT5yZWdpb25faWQgPDwNCj4gPiArCQkJCUk0MEVfUEZRRl9IUkVHSU9OX1JFR0lPTl82X1NISUZU Ow0KPiA+ICsJCXBmcWZfaHJlZ2lvbiB8PSAxIDw8DQo+ID4gSTQwRV9QRlFGX0hSRUdJT05fT1ZF UlJJREVfRU5BXzZfU0hJRlQ7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCXBmcWZfaHJlZ2lvbiB8 PSBjb25mX3B0ci0+cmVnaW9uX2lkIDw8DQo+ID4gKwkJCQlJNDBFX1BGUUZfSFJFR0lPTl9SRUdJ T05fN19TSElGVDsNCj4gPiArCQlwZnFmX2hyZWdpb24gfD0gMSA8PA0KPiA+IEk0MEVfUEZRRl9I UkVHSU9OX09WRVJSSURFX0VOQV83X1NISUZUOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWk0MGVf d3JpdGVfcnhfY3RsKGh3LCBJNDBFX1BGUUZfSFJFR0lPTihpbmRleCksIHBmcWZfaHJlZ2lvbik7 DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQN Cj4gPiAraTQwZV9zZXRfdXBfcmVnaW9uKHN0cnVjdCBpNDBlX3BmICpwZiwNCj4gPiArCQkJCXN0 cnVjdCBydGVfaTQwZV9yc3NfcmVnaW9uX2NvbmYgKmNvbmZfcHRyKSB7DQo+ID4gKwlzdHJ1Y3Qg aTQwZV9xdWV1ZV9yZWdpb25faW5mbyAqaW5mbyA9ICZwZi0+cXVldWVfcmVnaW9uOw0KPiA+ICsJ dWludDMyX3QgcmV0ID0gLUVJTlZBTDsNCj4gPiArCXVpbnQxNl90IGksIGosIHJlZ2lvbl9pbmRl eCwgdXBfc2V0ID0gMDsNCj4gPiArDQo+ID4gKwlpZiAoY29uZl9wdHItPnVzZXJfcHJpb3JpdHkg Pg0KPiA+IEk0MEVfUkVHSU9OX1VTRVJQUklPUklUWV9NQVhfSU5ERVgpIHsNCj4gPiArCQlQTURf SU5JVF9MT0coRVJSLCAidGhlIHF1ZXVlIHJlZ2lvbiBtYXggaW5kZXggaXMgNyIpOw0KPiA+ICsJ CXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKGNvbmZfcHRyLT5yZWdpb25f aWQgPj0gSTQwRV9SRUdJT05fTUFYX0lOREVYKSB7DQo+ID4gKwkJUE1EX0lOSVRfTE9HKEVSUiwg InRoZSByZWdpb25faWQgbWF4IGluZGV4IGlzIDciKTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChpbmZvLT5xdWV1ZV9yZWdpb25fbnVtYmVyKSB7DQo+ID4g KwkJZm9yIChpID0gMDsgaSA8IGluZm8tPnF1ZXVlX3JlZ2lvbl9udW1iZXI7IGkrKykNCj4gPiAr CQkJaWYgKGNvbmZfcHRyLT5yZWdpb25faWQgPT0gaW5mby0+cmVnaW9uW2ldLnJlZ2lvbl9pZCkN Cj4gPiArCQkJCWJyZWFrOw0KPiA+ICsNCj4gPiArCQlpZiAoaSA9PSBpbmZvLT5xdWV1ZV9yZWdp b25fbnVtYmVyKSB7DQo+ID4gKwkJCVBNRF9JTklUX0xPRyhFUlIsICJ0aGF0IHJlZ2lvbiBpZCAi DQo+ID4gKwkJCQkiaGFzIG5vdCBiZWVuIHNldCBiZWZvcmUiKTsNCj4gPiArCQkJcmV0dXJuIHJl dDsNCj4gPiArCQl9DQo+ID4gKwkJcmVnaW9uX2luZGV4ID0gaTsNCj4gPiArDQo+ID4gKwkJZm9y IChpID0gMDsgaSA8IGluZm8tPnF1ZXVlX3JlZ2lvbl9udW1iZXI7IGkrKykgew0KPiA+ICsJCQlm b3IgKGogPSAwOyBqIDwNCj4gPiArCQkJCWluZm8tPnJlZ2lvbltpXS51c2VyX3ByaW9yaXR5X251 bTsgaisrKSB7DQo+ID4gKwkJCQlpZiAoaW5mby0+cmVnaW9uW2ldLnVzZXJfcHJpb3JpdHlbal0g PT0NCj4gPiArCQkJCQljb25mX3B0ci0+dXNlcl9wcmlvcml0eSkgew0KPiA+ICsJCQkJCXVwX3Nl dCA9IDE7DQo+ID4gKwkJCQkJYnJlYWs7DQo+ID4gKwkJCQl9DQo+ID4gKwkJCX0NCj4gPiArCQl9 DQo+ID4gKw0KPiA+ICsJCWlmICh1cF9zZXQpIHsNCj4gPiArCQkJUE1EX0lOSVRfTE9HKEVSUiwg InRoYXQgdXNlciBwcmlvcml0eSAiDQo+ID4gKwkJCQkiaGFzIGJlZW4gc2V0IGJlZm9yZSIpOw0K PiA+ICsJCQlyZXR1cm4gcmV0Ow0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJaiA9IGluZm8tPnJl Z2lvbltyZWdpb25faW5kZXhdLnVzZXJfcHJpb3JpdHlfbnVtOw0KPiA+ICsJCWluZm8tPnJlZ2lv bltyZWdpb25faW5kZXhdLnVzZXJfcHJpb3JpdHlbal0gPQ0KPiA+ICsJCQkJCQljb25mX3B0ci0+ dXNlcl9wcmlvcml0eTsNCj4gPiArCQlpbmZvLT5yZWdpb25bcmVnaW9uX2luZGV4XS51c2VyX3By aW9yaXR5X251bSsrOw0KPiA+ICsJfSBlbHNlIHsNCj4gPiArCQlQTURfSU5JVF9MT0coRVJSLCAi dGhlcmUgaXMgbm8gdGhhdCByZWdpb24gaWQgYmVlbiBzZXQNCj4gPiBiZWZvcmUiKTsNCj4gPiAr CQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtzdGF0aWMgaW50DQo+ID4gK2k0MGVfcXVldWVfcmVnaW9uX2RjYl9jb25maWd1 cmUoc3RydWN0IGk0MGVfaHcgKmh3LA0KPiA+ICsJCQkJc3RydWN0IGk0MGVfcGYgKnBmKQ0KPiA+ ICt7DQo+ID4gKwlzdHJ1Y3QgaTQwZV9kY2J4X2NvbmZpZyBkY2JfY2ZnX2xvY2FsOw0KPiA+ICsJ c3RydWN0IGk0MGVfZGNieF9jb25maWcgKmRjYl9jZmc7DQo+ID4gKwlzdHJ1Y3QgaTQwZV9xdWV1 ZV9yZWdpb25faW5mbyAqaW5mbyA9ICZwZi0+cXVldWVfcmVnaW9uOw0KPiA+ICsJc3RydWN0IGk0 MGVfZGNieF9jb25maWcgKm9sZF9jZmcgPSAmaHctPmxvY2FsX2RjYnhfY29uZmlnOw0KPiA+ICsJ dWludDMyX3QgcmV0ID0gLUVJTlZBTDsNCj4gPiArCXVpbnQxNl90IGksIGosIHByaW9faW5kZXgs IHJlZ2lvbl9pbmRleDsNCj4gPiArCXVpbnQ4X3QgdGNfbWFwLCB0Y19idywgYndfbGY7DQo+ID4g Kw0KPiA+ICsJaWYgKCFpbmZvLT5xdWV1ZV9yZWdpb25fbnVtYmVyKSB7DQo+ID4gKwkJUE1EX0lO SVRfTE9HKEVSUiwgInRoZXJlIGlzIG5vIHRoYXQgcmVnaW9uIGlkIGJlZW4gc2V0DQo+ID4gYmVm b3JlIik7DQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlkY2JfY2Zn ID0gJmRjYl9jZmdfbG9jYWw7DQo+ID4gKwltZW1zZXQoZGNiX2NmZywgMCwgc2l6ZW9mKHN0cnVj dCBpNDBlX2RjYnhfY29uZmlnKSk7DQo+ID4gKw0KPiA+ICsJLyogYXNzdW1lIGVhY2ggdGMgaGFz IHRoZSBzYW1lIGJ3ICovDQo+ID4gKwl0Y19idyA9IEk0MEVfTUFYX1BFUkNFTlQgLyBpbmZvLT5x dWV1ZV9yZWdpb25fbnVtYmVyOw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IGluZm8tPnF1ZXVlX3Jl Z2lvbl9udW1iZXI7IGkrKykNCj4gPiArCQlkY2JfY2ZnLT5ldHNjZmcudGNid3RhYmxlW2ldID0g dGNfYnc7DQo+ID4gKwkvKiB0byBlbnN1cmUgdGhlIHN1bSBvZiB0Y2J3IGlzIGVxdWFsIHRvIDEw MCAqLw0KPiA+ICsJYndfbGYgPSBJNDBFX01BWF9QRVJDRU5UICUgIGluZm8tPnF1ZXVlX3JlZ2lv bl9udW1iZXI7DQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgYndfbGY7IGkrKykNCj4gPiArCQlkY2Jf Y2ZnLT5ldHNjZmcudGNid3RhYmxlW2ldKys7DQo+ID4gKw0KPiA+ICsJLyogYXNzdW1lIGVhY2gg dGMgaGFzIHRoZSBzYW1lIFRyYW5zbWlzc2lvbiBTZWxlY3Rpb24gQWxnb3JpdGhtICovDQo+ID4g Kwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+cXVldWVfcmVnaW9uX251bWJlcjsgaSsrKQ0KPiA+ICsJ CWRjYl9jZmctPmV0c2NmZy50c2F0YWJsZVtpXSA9IEk0MEVfSUVFRV9UU0FfRVRTOw0KPiA+ICsN Cj4gPiArCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5xdWV1ZV9yZWdpb25fbnVtYmVyOyBpKyspIHsN Cj4gPiArCQlmb3IgKGogPSAwOyBqIDwgaW5mby0+cmVnaW9uW2ldLnVzZXJfcHJpb3JpdHlfbnVt OyBqKyspIHsNCj4gPiArCQkJcHJpb19pbmRleCA9IGluZm8tPnJlZ2lvbltpXS51c2VyX3ByaW9y aXR5W2pdOw0KPiA+ICsJCQlyZWdpb25faW5kZXggPSBpbmZvLT5yZWdpb25baV0ucmVnaW9uX2lk Ow0KPiA+ICsJCQlkY2JfY2ZnLT5ldHNjZmcucHJpb3JpdHl0YWJsZVtwcmlvX2luZGV4XSA9DQo+ ID4gKwkJCQkJCXJlZ2lvbl9pbmRleDsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJ LyogRlcgbmVlZHMgb25lIEFwcCB0byBjb25maWd1cmUgSFcgKi8NCj4gPiArCWRjYl9jZmctPm51 bWFwcHMgPSBJNDBFX0RFRkFVTFRfRENCX0FQUF9OVU07DQo+ID4gKwlkY2JfY2ZnLT5hcHBbMF0u c2VsZWN0b3IgPSBJNDBFX0FQUF9TRUxfRVRIVFlQRTsNCj4gPiArCWRjYl9jZmctPmFwcFswXS5w cmlvcml0eSA9IEk0MEVfREVGQVVMVF9EQ0JfQVBQX1BSSU87DQo+ID4gKwlkY2JfY2ZnLT5hcHBb MF0ucHJvdG9jb2xpZCA9IEk0MEVfQVBQX1BST1RPSURfRkNPRTsNCj4gPiArDQo+ID4gKwl0Y19t YXAgPSBSVEVfTEVOMk1BU0soaW5mby0+cXVldWVfcmVnaW9uX251bWJlciwgdWludDhfdCk7DQo+ ID4gKw0KPiA+ICsJZGNiX2NmZy0+cGZjLndpbGxpbmcgPSAwOw0KPiA+ICsJZGNiX2NmZy0+cGZj LnBmY2NhcCA9IEk0MEVfTUFYX1RSQUZGSUNfQ0xBU1M7DQo+ID4gKwlkY2JfY2ZnLT5wZmMucGZj ZW5hYmxlID0gdGNfbWFwOw0KPiA+ICsNCj4gPiArCS8qIENvcHkgdGhlIG5ldyBjb25maWcgdG8g dGhlIGN1cnJlbnQgY29uZmlnICovDQo+ID4gKwkqb2xkX2NmZyA9ICpkY2JfY2ZnOw0KPiA+ICsJ b2xkX2NmZy0+ZXRzcmVjID0gb2xkX2NmZy0+ZXRzY2ZnOw0KPiA+ICsJcmV0ID0gaTQwZV9zZXRf ZGNiX2NvbmZpZyhodyk7DQo+ID4gKw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCVBNRF9JTklU X0xPRyhFUlIsICJTZXQgcXVldWUgcmVnaW9uIERDQiBDb25maWcgZmFpbGVkLA0KPiA+IGVyciIN Cj4gPiArCQkJIiAlcyBhcV9lcnIgJXMiLA0KPiA+ICsJCQkgaTQwZV9zdGF0X3N0cihodywgcmV0 KSwNCj4gPiArCQkJIGk0MGVfYXFfc3RyKGh3LCBody0+YXEuYXNxX2xhc3Rfc3RhdHVzKSk7DQo+ ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIGludA0KPiA+ICtpNDBlX3F1ZXVlX3JlZ2lvbl9kY2JfY29u ZmlndXJlX2RlZmF1bHQoc3RydWN0IGk0MGVfaHcgKmh3KSB7DQo+ID4gKwl1aW50MTZfdCBpOw0K PiA+ICsJdWludDMyX3QgcmV0ID0gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwltZW1zZXQoJmh3LT5s b2NhbF9kY2J4X2NvbmZpZywgMCwNCj4gPiArCXNpemVvZihzdHJ1Y3QgaTQwZV9kY2J4X2NvbmZp ZykpOw0KPiA+ICsJLyogc2V0IGRjYiBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKi8NCj4gPiArCWh3 LT5sb2NhbF9kY2J4X2NvbmZpZy5ldHNjZmcud2lsbGluZyA9IDA7DQo+ID4gKwlody0+bG9jYWxf ZGNieF9jb25maWcuZXRzY2ZnLm1heHRjcyA9IDA7DQo+ID4gKwlody0+bG9jYWxfZGNieF9jb25m aWcuZXRzY2ZnLnRjYnd0YWJsZVswXSA9IDEwMDsNCj4gPiArCWh3LT5sb2NhbF9kY2J4X2NvbmZp Zy5ldHNjZmcudHNhdGFibGVbMF0gPQ0KPiA+ICsJCQlJNDBFX0lFRUVfVFNBX0VUUzsNCj4gPiAr CS8qIGFsbCBVUHMgbWFwcGluZyB0byByZWdpb24gMCAqLw0KPiA+ICsJZm9yIChpID0gMDsgaSA8 IEk0MEVfTUFYX1VTRVJfUFJJT1JJVFk7IGkrKykNCj4gPiArCQlody0+bG9jYWxfZGNieF9jb25m aWcuZXRzY2ZnLnByaW9yaXR5dGFibGVbaV0gPSAwOw0KPiA+ICsJaHctPmxvY2FsX2RjYnhfY29u ZmlnLmV0c3JlYyA9DQo+ID4gKwkJaHctPmxvY2FsX2RjYnhfY29uZmlnLmV0c2NmZzsNCj4gPiAr CWh3LT5sb2NhbF9kY2J4X2NvbmZpZy5wZmMud2lsbGluZyA9IDA7DQo+ID4gKwlody0+bG9jYWxf ZGNieF9jb25maWcucGZjLnBmY2NhcCA9DQo+ID4gKwkJCUk0MEVfTUFYX1RSQUZGSUNfQ0xBU1M7 DQo+ID4gKwkvKiBGVyBuZWVkcyBvbmUgQXBwIHRvIGNvbmZpZ3VyZSBIVyAqLw0KPiA+ICsJaHct PmxvY2FsX2RjYnhfY29uZmlnLm51bWFwcHMgPSAxOw0KPiA+ICsJaHctPmxvY2FsX2RjYnhfY29u ZmlnLmFwcFswXS5zZWxlY3RvciA9DQo+ID4gKwkJCUk0MEVfQVBQX1NFTF9FVEhUWVBFOw0KPiA+ ICsJaHctPmxvY2FsX2RjYnhfY29uZmlnLmFwcFswXS5wcmlvcml0eSA9IDM7DQo+ID4gKwlody0+ bG9jYWxfZGNieF9jb25maWcuYXBwWzBdLnByb3RvY29saWQgPQ0KPiA+ICsJCQlJNDBFX0FQUF9Q Uk9UT0lEX0ZDT0U7DQo+ID4gKwlyZXQgPSBpNDBlX3NldF9kY2JfY29uZmlnKGh3KTsNCj4gPiAr CWlmIChyZXQpIHsNCj4gPiArCQlQTURfSU5JVF9MT0coRVJSLA0KPiA+ICsJCSJkZWZhdWx0IGRj YiBjb25maWcgZmFpbHMuIGVyciA9ICVkLCBhcV9lcnIgPSAlZC4iLA0KPiA+ICsJCQlyZXQsIGh3 LT5hcS5hc3FfbGFzdF9zdGF0dXMpOw0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4g Kw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK2ludA0KPiA+ICtpNDBlX2Zs dXNoX3JlZ2lvbl9hbGxfY29uZihzdHJ1Y3QgaTQwZV9odyAqaHcsIHN0cnVjdCBpNDBlX3BmICpw ZiwNCj4gPiArCQkJCXVpbnQxNl90IG9uKQ0KPiA+ICt7DQo+ID4gKwl1aW50MTZfdCBpOw0KPiA+ ICsJc3RydWN0IGk0MGVfcXVldWVfcmVnaW9uX2luZm8gKmluZm8gPSAmcGYtPnF1ZXVlX3JlZ2lv bjsNCj4gPiArDQo+ID4gKwlpZiAob24pIHsNCj4gPiArCQlpNDBlX3ZzaV91cGRhdGVfcXVldWVf cmVnaW9uX21hcHBpbmcoaHcsIHBmKTsNCj4gPiArCQlpNDBlX3F1ZXVlX3JlZ2lvbl9kY2JfY29u ZmlndXJlKGh3LCBwZik7DQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJ aW5mby0+cXVldWVfcmVnaW9uX251bWJlciA9IDE7DQo+ID4gKwlpbmZvLT5yZWdpb25bMF0ucXVl dWVfbnVtID0gNjQ7DQo+ID4gKwlpbmZvLT5yZWdpb25bMF0ucXVldWVfc3RhcnRfaW5kZXggPSAw Ow0KPiA+ICsNCj4gPiArCWk0MGVfdnNpX3VwZGF0ZV9xdWV1ZV9yZWdpb25fbWFwcGluZyhodywg cGYpOw0KPiA+ICsJaTQwZV9xdWV1ZV9yZWdpb25fZGNiX2NvbmZpZ3VyZV9kZWZhdWx0KGh3KTsN Cj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgSTQwRV9QRlFGX0hSRUdJT05fTUFYX0lOREVY OyBpKyspDQo+ID4gKwkJaTQwZV93cml0ZV9yeF9jdGwoaHcsIEk0MEVfUEZRRl9IUkVHSU9OKGkp LCAwKTsNCj4gPiArDQo+ID4gKwltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBpNDBlX3F1 ZXVlX3JlZ2lvbl9pbmZvKSk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiAr DQo+ID4gK2ludCBydGVfcG1kX2k0MGVfcXVldWVfcmVnaW9uX2NvbmYodWludDhfdCBwb3J0LA0K PiA+ICsJCQlzdHJ1Y3QgcnRlX2k0MGVfcnNzX3JlZ2lvbl9jb25mICpjb25mX3B0cikgew0KPiA+ ICsJc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYgPSAmcnRlX2V0aF9kZXZpY2VzW3BvcnRdOw0KPiA+ ICsJc3RydWN0IGk0MGVfcGYgKnBmID0gSTQwRV9ERVZfUFJJVkFURV9UT19QRihkZXYtPmRhdGEt DQo+ID4gPmRldl9wcml2YXRlKTsNCj4gPiArCXN0cnVjdCBpNDBlX2h3ICpodyA9IEk0MEVfREVW X1BSSVZBVEVfVE9fSFcoZGV2LT5kYXRhLQ0KPiA+ID5kZXZfcHJpdmF0ZSk7DQo+ID4gKwllbnVt IHJ0ZV9wbWRfaTQwZV9xdWV1ZV9yZWdpb25fb3Agb3BfdHlwZSA9IGNvbmZfcHRyLT5vcDsNCj4g PiArCXVpbnQzMl90IHJldDsNCj4gPiArDQo+ID4gKwlpZiAoIWlzX2k0MGVfc3VwcG9ydGVkKGRl dikpDQo+ID4gKwkJcmV0dXJuIC1FTk9UU1VQOw0KPiA+ICsNCj4gPiArCXN3aXRjaCAob3BfdHlw ZSkgew0KPiA+ICsJY2FzZSBSVEVfUE1EX0k0MEVfUVVFVUVfUkVHSU9OX1NFVDoNCj4gPiArCQly ZXQgPSBpNDBlX3NldF9xdWV1ZV9yZWdpb24ocGYsIGNvbmZfcHRyKTsNCj4gPiArCQlicmVhazsN Cj4gPiArCWNhc2UgUlRFX1BNRF9JNDBFX1JFR0lPTl9GTE9XVFlQRV9QRl9TRVQ6DQo+ID4gKwkJ cmV0ID0gaTQwZV9zZXRfcmVnaW9uX2Zsb3d0eXBlX3BmKGh3LCBwZiwgY29uZl9wdHIpOw0KPiA+ ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBSVEVfUE1EX0k0MEVfUkVHSU9OX0ZMT1dUWVBFX1ZGX1NF VDoNCj4gPiArCQlyZXQgPSAtRUlOVkFMOw0KPiA+ICsJCWJyZWFrOw0KPiANCj4gV2h5IHNldHRp bmcgb2YgZmxvd3R5cGUgbWFwcGluZyBpcyBzZXBhcmF0ZWQgdG8gdHdvIGRpZmZlcmVudCBvcHRp b24/DQo+IERvZXMgaXQgbWVhbiB0aGF0IGFwcGxpY2F0aW9uIHdpbGwgbmVlZCB0byBkZXRlY3Qg d2hpY2ggZHJpdmVyIGl0IHVzZXMgYmVmb3JlDQo+IGNhbGxpbmcgdGhpcyBBUEk/IEFwcGxpY2F0 aW9uIHNob3VsZCBub3QgY2FyZSB3aGljaCBkcml2ZXIgaXMgaW4gdXNlLCBpdCB0cmFja3MgdGhl DQo+IG51bWJlciBvZiBxdWV1ZXMgdXNlZCBmb3IgUlNTIGFuZCBqdXN0IGNvbmZpZ3VyZXMgdGhl c2UgcXVldWVzIHRvDQo+IGRpZmZlcmVudCByZWdpb25zLCByZWdhcmRsZXNzIGlmIGl0IHJ1bnMg b24gdG9wIG9mIFBGIG9yIFZGLiBEaWZmZXJlbmNlIGluDQo+IGNvbmZpZ3VyYXRpb24gZm9yIFBG L1ZGIHNob3VsZCBiZSBoaWRkZW4gZnJvbSBhcHBsaWNhdGlvbiwgc28gb25seSBzaW5nbGUNCj4g UlRFX1BNRF9JNDBFX1JFR0lPTl9GTE9XVFlQRV9TRVQgc2hvdWxkIGJlIHVzZWQuDQoNCkJ5IG5v dyAsIHdlIG9ubHkgc3VwcG9ydCBwZiBmb3IgdGhpcyBjb25maWcuIA0KQnV0IEkgdGhpbmsgd2hh dCB5b3Ugc2FpZCBpcyB2ZXJ5IHJlYXNvbmFibGUuIEkgY2FuIGNoYW5nZSBjb2RlIHRvIGEgbmV3 IHNjaGVtZToNCkRQREsgaTQwZSBkcml2ZXIgdXNlICAgcnRlX2V0aF9kZXYgLT5kZXZpY2UtPm5h bWUgdG8gZGV0ZWN0ICB3aGV0aGVyIGhpcyBuYW1lIGlzIA0KIiBuZXRfaTQwZV92ZiAiIG9yICIg bmV0X2k0MGUiICBpdHNlbGYsIHRoZW4gIHdlICBjYW4gUE1EIGRyaXZlciBkZWNpZGUgdG8gY29u ZmlnIFBGUUZfSFJFR0lPTiBvciBWRlFGX0hSRUdJT04uDQpJIHdpbGwgbWFrZSBjaGFuZ2UgaW4g djQgbGF0ZXIuIA0KDQo+IA0KPiBBbGwgb3RoZXIgb3B0aW9ucyBkbyBub3QgaGF2ZSBzZXBhcmF0 ZSBjaGVjay4NCj4gV2lsbCB0aGV5IHdvcmsgb24gYm90aCBQRiBhbmQgVkY/DQoNCk5vLCBvbmx5 IFdPUksgb24gUEYuIFRoZSByZWFzb24gd2UgaGF2ZSB0YWxrIGluIG90aGVyIG1haWwgYmVmb3Jl Lg0KDQo+IA0KPiA+ICsJY2FzZSBSVEVfUE1EX0k0MEVfVVBfUkVHSU9OX1NFVDoNCj4gPiArCQly ZXQgPSBpNDBlX3NldF91cF9yZWdpb24ocGYsIGNvbmZfcHRyKTsNCj4gPiArCQlicmVhazsNCj4g PiArCWNhc2UgUlRFX1BNRF9JNDBFX1JFR0lPTl9BTExfRkxVU0hfT046DQo+ID4gKwkJcmV0ID0g aTQwZV9mbHVzaF9yZWdpb25fYWxsX2NvbmYoaHcsIHBmLCAxKTsNCj4gPiArCQlicmVhazsNCj4g PiArCWNhc2UgUlRFX1BNRF9JNDBFX1JFR0lPTl9BTExfRkxVU0hfT0ZGOg0KPiA+ICsJCXJldCA9 IGk0MGVfZmx1c2hfcmVnaW9uX2FsbF9jb25mKGh3LCBwZiwgMCk7DQo+ID4gKwkJYnJlYWs7DQo+ ID4gKw0KPiA+ICsJZGVmYXVsdDoNCj4gPiArCQlQTURfRFJWX0xPRyhXQVJOSU5HLCAib3AgdHlw ZSAoJWQpIG5vdCBzdXBwb3J0ZWQiLA0KPiA+ICsJCQkgICAgb3BfdHlwZSk7DQo+ID4gKwkJcmV0 ID0gLUVJTlZBTDsNCj4gPiArCQlicmVhazsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlJNDBFX1dS SVRFX0ZMVVNIKGh3KTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+IA0KDQo+ IEhvdyB0aGlzIEFQSSBjYW4gYmUgdGVzdGVkLCBpcyB0aGVyZSBhIHNlcGFyYXRlIHRlc3RwbWQg cGF0Y2g/DQoNClllcywgdGVzdHBtZCBoYXMgYWRkIG5ldyBDTEkgY29tbWFuZHMgdG8gc3VwcG9y dCBpdCwgYWxzbyBjYW4gYmUgdXNlIGJ5IGN1c3RvbWVyLg0KDQo+IA0KPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL25ldC9pNDBlL3J0ZV9wbWRfaTQwZS5oDQo+ID4gYi9kcml2ZXJzL25ldC9pNDBl L3J0ZV9wbWRfaTQwZS5oIGluZGV4IDE1NWI3ZTguLmExMzI5ZjQgMTAwNjQ0DQo+ID4gLS0tIGEv ZHJpdmVycy9uZXQvaTQwZS9ydGVfcG1kX2k0MGUuaA0KPiA+ICsrKyBiL2RyaXZlcnMvbmV0L2k0 MGUvcnRlX3BtZF9pNDBlLmgNCj4gPiBAQCAtOTEsNiArOTEsMjAgQEAgZW51bSBydGVfcG1kX2k0 MGVfcGFja2FnZV9pbmZvIHsNCj4gPiAgCVJURV9QTURfSTQwRV9QS0dfSU5GT19NQVggPSAweEZG RkZGRkZGICB9Ow0KPiA+DQo+ID4gKy8qKg0KPiA+ICsgKiAgT3B0aW9uIHR5cGVzIG9mIHF1ZXVl IHJlZ2lvbi4NCj4gPiArICovDQo+ID4gK2VudW0gcnRlX3BtZF9pNDBlX3F1ZXVlX3JlZ2lvbl9v cCB7DQo+ID4gKwlSVEVfUE1EX0k0MEVfUkVHSU9OX1VOREVGSU5FRCA9IDAsDQo+ID4gKwlSVEVf UE1EX0k0MEVfUVVFVUVfUkVHSU9OX1NFVCwgICAgICAvKio8IGFkZCBxdWV1ZSByZWdpb24NCj4g PiBzZXQqLw0KPiA+ICsJUlRFX1BNRF9JNDBFX1JFR0lPTl9GTE9XVFlQRV9QRl9TRVQsICAgLyoq PCBhZGQgcGYgcmVnaW9uDQo+ID4gcGN0eXBlIHNldCAqLw0KPiA+ICsJUlRFX1BNRF9JNDBFX1JF R0lPTl9GTE9XVFlQRV9WRl9TRVQsICAgLyoqPCBhZGQgdmYgcmVnaW9uDQo+ID4gcGN0eXBlIHNl dCAqLw0KPiA+ICsJUlRFX1BNRF9JNDBFX1VQX1JFR0lPTl9TRVQsICAgLyoqPCBhZGQgcXVldWUg cmVnaW9uIHBjdHlwZQ0KPiA+IHNldCAqLw0KPiA+ICsJUlRFX1BNRF9JNDBFX1JFR0lPTl9BTExf RkxVU0hfT04sICAgLyoqPCBmbHVzaCBvbiBhbGwNCj4gPiBjb25maWd1cmF0aW9uICovDQo+ID4g KwlSVEVfUE1EX0k0MEVfUkVHSU9OX0FMTF9GTFVTSF9PRkYsICAgLyoqPCBmbHVzaCBvZmYgYWxs DQo+ID4gY29uZmlndXJhdGlvbiAqLw0KPiA+ICsJUlRFX1BNRF9JNDBFX1FVRVVFX1JFR0lPTl9P UF9NQVgNCj4gPiArfTsNCj4gPiArDQo+ID4gICNkZWZpbmUgUlRFX1BNRF9JNDBFX0REUF9OQU1F X1NJWkUgMzINCj4gPg0KPiA+ICAvKioNCj4gPiBAQCAtMTQ2LDYgKzE2MCwxOCBAQCBzdHJ1Y3Qg cnRlX3BtZF9pNDBlX3B0eXBlX21hcHBpbmcgeyAgfTsNCj4gPg0KPiA+ICAvKioNCj4gPiArICog UXVldWUgcmVnaW9uIGluZm9ybWF0aW9uIGdldCBmcm9tIENMSS4NCj4gPiArICovDQo+ID4gK3N0 cnVjdCBydGVfaTQwZV9yc3NfcmVnaW9uX2NvbmYgew0KPiA+ICsJdWludDhfdCByZWdpb25faWQ7 DQo+ID4gKwl1aW50OF90IGh3X2Zsb3d0eXBlOw0KPiA+ICsJdWludDhfdCBxdWV1ZV9zdGFydF9p bmRleDsNCj4gPiArCXVpbnQ4X3QgcXVldWVfbnVtOw0KPiA+ICsJdWludDhfdCB1c2VyX3ByaW9y aXR5Ow0KPiA+ICsJZW51bSBydGVfcG1kX2k0MGVfcXVldWVfcmVnaW9uX29wICBvcDsgfTsNCj4g PiArDQo+ID4gKy8qKg0KPiA+ICAgKiBOb3RpZnkgVkYgd2hlbiBQRiBsaW5rIHN0YXR1cyBjaGFu Z2VzLg0KPiA+ICAgKg0KPiA+ICAgKiBAcGFyYW0gcG9ydA0KPiA+IEBAIC02NTcsNCArNjgzLDE2 IEBAIGludA0KPiBydGVfcG1kX2k0MGVfcHR5cGVfbWFwcGluZ19yZXBsYWNlKHVpbnQ4X3QNCj4g PiBwb3J0LA0KPiA+ICBpbnQgcnRlX3BtZF9pNDBlX2FkZF92Zl9tYWNfYWRkcih1aW50OF90IHBv cnQsIHVpbnQxNl90IHZmX2lkLA0KPiA+ICAJCQkJIHN0cnVjdCBldGhlcl9hZGRyICptYWNfYWRk cik7DQo+ID4NCj4gPiArLyoqDQo+ID4gKyAqIEdldCBSU1MgcXVldWUgcmVnaW9uIGluZm8gZnJv bSBDTEkgYW5kIGRvIGNvbmZpZ3VyYXRpb24gZm9yDQo+ID4gKyAqIHRoYXQgcG9ydCBhcyB0aGUg Y29tbWFuZCBvdGlvbiB0eXBlDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbSBwb3J0DQo+ID4gKyAq ICAgIHBvaW50ZXIgdG8gcG9ydCBpZGVudGlmaWVyIG9mIHRoZSBkZXZpY2UNCj4gPiArICogQHBh cmFtIGNvbmZfcHRyDQo+ID4gKyAqICAgIHBvaW50ZXIgdG8gdGhlIHN0cnVjdCB0aGF0IGNvbnRh aW4gYWxsIHRoZQ0KPiA+ICsgKiAgICByZWdpb24gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzDQo+ ID4gKyAqLw0KPiA+ICtpbnQgcnRlX3BtZF9pNDBlX3F1ZXVlX3JlZ2lvbl9jb25mKHVpbnQ4X3Qg cG9ydCwNCj4gPiArCQlzdHJ1Y3QgcnRlX2k0MGVfcnNzX3JlZ2lvbl9jb25mICpjb25mX3B0cik7 DQo+ID4gICNlbmRpZiAvKiBfUE1EX0k0MEVfSF8gKi8NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9uZXQvaTQwZS9ydGVfcG1kX2k0MGVfdmVyc2lvbi5tYXANCj4gPiBiL2RyaXZlcnMvbmV0L2k0 MGUvcnRlX3BtZF9pNDBlX3ZlcnNpb24ubWFwDQo+ID4gaW5kZXggZWY4ODgyYi4uYzNlZTJkYSAx MDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL25ldC9pNDBlL3J0ZV9wbWRfaTQwZV92ZXJzaW9uLm1h cA0KPiA+ICsrKyBiL2RyaXZlcnMvbmV0L2k0MGUvcnRlX3BtZF9pNDBlX3ZlcnNpb24ubWFwDQo+ ID4gQEAgLTUwLDUgKzUwLDYgQEAgRFBES18xNy4xMSB7DQo+ID4gIAlnbG9iYWw6DQo+ID4NCj4g PiAgCXJ0ZV9wbWRfaTQwZV9hZGRfdmZfbWFjX2FkZHI7DQo+ID4gKwlydGVfcG1kX2k0MGVfcXVl dWVfcmVnaW9uX2NvbmY7DQo+ID4NCj4gPiAgfSBEUERLXzE3LjA4Ow0KPiA+IC0tDQo+ID4gMi45 LjMNCj4gDQoNCg==