From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hyun Kwon Subject: RE: [PATCH 10/10] drm: xlnx: zynqmp: Add debugfs Date: Thu, 11 Jan 2018 02:05:31 +0000 Message-ID: References: <1515117959-18068-1-git-send-email-hyun.kwon@xilinx.com> <1515117959-18068-11-git-send-email-hyun.kwon@xilinx.com> <20180109095425.GJ26573@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180109095425.GJ26573@phenom.ffwll.local> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Vetter Cc: Tejas Upadhyay , "devicetree@vger.kernel.org" , Michal Simek , "dri-devel@lists.freedesktop.org" List-Id: devicetree@vger.kernel.org SGkgRGFuaWVsLA0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IERhbmll bCBWZXR0ZXIgW21haWx0bzpkYW5pZWwudmV0dGVyQGZmd2xsLmNoXSBPbiBCZWhhbGYgT2YgRGFu aWVsDQo+IFZldHRlcg0KPiBTZW50OiBUdWVzZGF5LCBKYW51YXJ5IDA5LCAyMDE4IDE6NTQgQU0N Cj4gVG86IEh5dW4gS3dvbiA8aHl1bmtAeGlsaW54LmNvbT4NCj4gQ2M6IGRyaS1kZXZlbEBsaXN0 cy5mcmVlZGVza3RvcC5vcmc7IGRldmljZXRyZWVAdmdlci5rZXJuZWwub3JnOyBUZWphcw0KPiBV cGFkaHlheSA8VEVKQVNVQHhpbGlueC5jb20+OyBNaWNoYWwgU2ltZWsgPG1pY2hhbC5zaW1la0B4 aWxpbnguY29tPg0KPiBTdWJqZWN0OiBSZTogW1BBVENIIDEwLzEwXSBkcm06IHhsbng6IHp5bnFt cDogQWRkIGRlYnVnZnMNCj4gDQo+IE9uIFRodSwgSmFuIDA0LCAyMDE4IGF0IDA2OjA1OjU5UE0g LTA4MDAsIEh5dW4gS3dvbiB3cm90ZToNCj4gPiBEZWJ1Z2ZzIGNhbiBiZSB1c2VkIHRvIGV4cGxv aXQgc29tZSBzcGVjaWZpYyBzZXR0aW5nLiBNYWluIHB1cnBvc2UNCj4gPiBpcyBmb3IgdGVzdGlu ZyBhbmQgZGVidWcgZGlhZ25vc3RpYy4NCj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6IFRlamFzIFVw YWRoeWF5IDx0ZWphc3VAeGlsaW54LmNvbT4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBIeXVuIEt3b24g PGh5dW4ua3dvbkB4aWxpbnguY29tPg0KPiANCj4gSG0sIG5vdCBzdXJlIHdoYXQncyB0aGUgdXNl LCBpdCBzZWVtcyB0byBqdXN0IGJlIGZvciBzZXR0aW5nL2dldHRpbmcNCj4geW91ciBkcml2ZXIt cHJpdmF0ZSBwcm9wZXJ0aWVzLiBVc3VhbGx5IHBlb3BsZSB1c2UgbW9kZXRlc3QgYW5kIHNpbWls YXINCj4gdG9vbHMsIGJ1dCBpZiB0aGVyZSdzIGRlbWFuZCBmb3Igc2V0dGluZyBwcm9wZXJ0aWVz IGluIGRlYnVnZnMgKHdlIGFscmVhZHkNCj4gaGF2ZSBhbGwgdGhlIGluZnJhc3RydWN0dXJlIGZv ciBkdW1waW5nIHRoZSBlbnRpcmUga21zIHN0YXRlLCBzZWUgdGhlDQo+IHZhcmlvdXMgYXRvbWlj X3ByaW50X3N0YXRlIGNhbGxiYWNrcykgSSB0aGluayB0aGF0IHNob3VsZCBiZSBkb25lIHdpdGgN Cj4gZ2VuZXJpYyBkcm0gY29kZS4NCj4gDQo+IEknZCBkcm9wIHRoaXMgcGF0Y2ggZm9yIG5vdyAo aWYgdGhlcmUncyBubyBvdGhlciByZWFzb24gZm9yIGl0KS4NCg0KVGhhbmtzIGZvciB0aGUgaW5w dXQuIEl0J2QgYmUgaGVscGZ1bCwgZm9yIG15IG93biB1bmRlcnN0YW5kaW5nLCBpZiB0aGlzIGNh biBiZSBlbGFib3JhdGVkIGEgbGl0dGxlIG1vcmUuIFdlIGFyZSB1c2luZyBzdGFuZGFyZCB0b29s cyBhcyB3ZWxsIGFzIGN1c3RvbSBzY3JpcHQvdG9vbCwgYnV0IHNvbWUgc3BlY2lmaWMgcHJvcGVy dGllcyAvIGNvbnRyb2xzIGFyZSBoYXJkIHRvIGJlIGV4ZWN1dGVkIHdpdGggbW9kZXRlc3Qgb25s eSB1bmxlc3Mgd2UgY2hhbmdlIHRoZSBlbnRpcmUgc2V0IHVwIC8gZGVzaWduIGJldHdlZW4gZWFj aCBydW4uIFRoZSBkZWJ1Z2ZzIGlzIHVzZWQgdG8gcnVuIGFsbCAob3IgYXMgbXVjaCBhcyBwb3Nz aWJsZSkgcHJvcGVydGllcyBpbiBhIHNpbmdsZSBydW4sIGFuZCBmcm9tIHdoYXQgSSB1bmRlcnN0 YW5kLCB0aGF0IGRvZXNuJ3QgdmlvbGF0ZSBpbnRlbmRlZCBkZWJ1Z2ZzIHVzYWdlIGFzIGxvbmcg YXMgaXQncyBub3QgdHJlYXRlZCBhcyBhIHN0YWJsZSBBQkkuIFRoZSBpbnRlbnRpb24gaXMgdG8g aGVscCBpc29sYXRlIGlzc3VlcyBhbmQgZW5oYW5jZSB0aGUgZGlhZ25vc3RpY3MuIEkgYWdyZWUs IGluIHRoZSBsb25nIHRlcm0sIHRoaXMga2luZCBvZiBzdHVmZiBzaG91bGQgYmUgaGFuZGxlZCBp biBnZW5lcmljIHdheSwgYnV0IHdvdWxkIGl0IGJlIHN0aWxsIHJlYXNvbmFibGUgdG8ga2VlcCBp dCBkcml2ZXIgc3BlY2lmaWMgaW4gdGhlIG1lYW50aW1lPw0KDQpUaGFua3MsDQotaHl1bg0KDQo+ IC1EYW5pZWwNCj4gDQo+ID4gLS0tDQo+ID4gIGRyaXZlcnMvZ3B1L2RybS94bG54L0tjb25maWcg ICAgICAgfCAgMjEgKysrDQo+ID4gIGRyaXZlcnMvZ3B1L2RybS94bG54L3p5bnFtcF9kaXNwLmMg fCAzMjYNCj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiA+ICBkcml2 ZXJzL2dwdS9kcm0veGxueC96eW5xbXBfZHAuYyAgIHwgMzA0DQo+ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysNCj4gPiAgMyBmaWxlcyBjaGFuZ2VkLCA2NTEgaW5zZXJ0aW9ucygr KQ0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94bG54L0tjb25maWcgYi9k cml2ZXJzL2dwdS9kcm0veGxueC9LY29uZmlnDQo+ID4gaW5kZXggN2M1NTI5Yy4uYmVmY2UwZiAx MDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0veGxueC9LY29uZmlnDQo+ID4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL3hsbngvS2NvbmZpZw0KPiA+IEBAIC0yMSwzICsyMSwyNCBAQCBjb25m aWcgRFJNX1pZTlFNUF9EUFNVQg0KPiA+ICAJICB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhIFhp bGlueCBaeW5xTVAgU29DIHdpdGggRGlzcGxheVBvcnQNCj4gPiAgCSAgc3Vic3lzdGVtLiBUaGUg ZHJpdmVyIHByb3ZpZGVzIHRoZSBrZXJuZWwgbW9kZSBzZXR0aW5nDQo+ID4gIAkgIGZ1bmN0aW9u bGFpdGllcyBmb3IgWnlucU1QIERQIHN1YnN5c3RlbS4NCj4gPiArDQo+ID4gK2NvbmZpZyBEUk1f WllOUU1QX0RJU1BfREVCVUdfRlMNCj4gPiArCWJvb2wgIlp5bnFNUCBEaXNwbGF5IGRlYnVnZnMi DQo+ID4gKwlkZXBlbmRzIG9uIERFQlVHX0ZTICYmIERSTV9aWU5RTVBfRFBTVUINCj4gPiArCXNl bGVjdCBEUk1fWllOUU1QX0RQX0RFQlVHX0ZTDQo+ID4gKwloZWxwDQo+ID4gKwkgIEVuYWJsZSB0 aGUgZGVidWdmcyBjb2RlIGZvciBEUCBTdWIgZHJpdmVyLiBUaGUgZGVidWdmcyBjb2RlDQo+ID4g KwkgIGVuYWJsZXMgZGVidWdnaW5nIG9yIHRlc3RpbmcgcmVsYXRlZCBmZWF0dXJlcy4gSXQgZXhw b3NlcyBzb21lDQo+ID4gKwkgIGxvdyBsZXZlbCBjb250cm9scyB0byB0aGUgdXNlciBzcGFjZSB0 byBoZWxwIHRlc3RpbmcgYXV0b21hdGlvbiwNCj4gPiArCSAgYXMgd2VsbCBhcyBjYW4gZW5hYmxl IGFkZGl0aW9uYWwgZGlhZ25vc3RpYyBvciBzdGF0aXN0aWNhbA0KPiA+ICsJICBpbmZvcm1hdGlv bi4NCj4gPiArDQo+ID4gK2NvbmZpZyBEUk1fWllOUU1QX0RQX0RFQlVHX0ZTDQo+ID4gKwlib29s ICJaeW5xTVAgRFAgZGVidWdmcyINCj4gPiArCWRlcGVuZHMgb24gREVCVUdfRlMgJiYgRFJNX1pZ TlFNUF9EUFNVQg0KPiA+ICsJaGVscA0KPiA+ICsJICBFbmFibGUgdGhlIGRlYnVnZnMgY29kZSBm b3IgRFAgZHJpdmVyLiBUaGUgZGVidWdmcyBjb2RlDQo+ID4gKwkgIGVuYWJsZXMgZGVidWdnaW5n IG9yIHRlc3RpbmcgcmVsYXRlZCBmZWF0dXJlcy4gSXQgZXhwb3NlcyBzb21lDQo+ID4gKwkgIGxv dyBsZXZlbCBjb250cm9scyB0byB0aGUgdXNlciBzcGFjZSB0byBoZWxwIHRlc3RpbmcgYXV0b21h dGlvbiwNCj4gPiArCSAgYXMgd2VsbCBhcyBjYW4gZW5hYmxlIGFkZGl0aW9uYWwgZGlhZ25vc3Rp YyBvciBzdGF0aXN0aWNhbA0KPiA+ICsJICBpbmZvcm1hdGlvbi4NCj4gPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3hsbngvenlucW1wX2Rpc3AuYw0KPiBiL2RyaXZlcnMvZ3B1L2RybS94 bG54L3p5bnFtcF9kaXNwLmMNCj4gPiBpbmRleCA2OGY4MjljLi45ZmU2ZDQ5IDEwMDY0NA0KPiA+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS94bG54L3p5bnFtcF9kaXNwLmMNCj4gPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0veGxueC96eW5xbXBfZGlzcC5jDQo+ID4gQEAgLTE3LDYgKzE3LDcgQEANCj4g PiAgI2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVyLmg+DQo+ID4NCj4gPiAgI2luY2x1ZGUg PGxpbnV4L2Nsay5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPg0KPiA+ICAjaW5j bHVkZSA8bGludXgvZGV2aWNlLmg+DQo+ID4gICNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4N Cj4gPiAgI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPg0KPiA+IEBAIC01MDgsNiArNTA5LDMy NSBAQCBzdGF0aWMgdm9pZCB6eW5xbXBfZGlzcF9zZXQodm9pZCBfX2lvbWVtDQo+ICpiYXNlLCBp bnQgb2Zmc2V0LCB1MzIgc2V0KQ0KPiA+ICAJenlucW1wX2Rpc3Bfd3JpdGUoYmFzZSwgb2Zmc2V0 LCB6eW5xbXBfZGlzcF9yZWFkKGJhc2UsIG9mZnNldCkgfA0KPiBzZXQpOw0KPiA+ICB9DQo+ID4N Cj4gPiArI2lmZGVmIENPTkZJR19EUk1fWllOUU1QX0RJU1BfREVCVUdfRlMNCj4gPiArDQo+ID4g KyNkZWZpbmUgWllOUU1QX0RJU1BfREVCVUdGU19SRUFEX01BWF9TSVpFCTMyVUwNCj4gPiArI2Rl ZmluZSBaWU5RTVBfRElTUF9ERUJVR0ZTX01BWF9CR19DT0xPUl9WQUwJMHhGRkYNCj4gPiArI2Rl ZmluZSBJTl9SQU5HRSh4LCBtaW4sIG1heCkgKHsJCVwNCj4gPiArCQl0eXBlb2YoeCkgX3ggPSAo eCk7CQlcDQo+ID4gKwkJX3ggPj0gKG1pbikgJiYgX3ggPD0gKG1heCk7IH0pDQo+ID4gKw0KPiA+ ICsvKiBNYXRjaCB4aWxpbnhfZHBfdGVzdGNhc2VzIHZzIGRwX2RlYnVnZnNfcmVxc1tdIGVudHJ5 ICovDQo+ID4gK2VudW0genlucW1wX2Rpc3BfdGVzdGNhc2VzIHsNCj4gPiArCURQX1NVQl9UQ19C R19DT0xPUiwNCj4gPiArCURQX1NVQl9UQ19PVVRQVVRfRk1ULA0KPiA+ICsJRFBfU1VCX1RDX05P TkUNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCB6eW5xbXBfZGlzcF9kZWJ1Z2ZzIHsNCj4g PiArCWVudW0genlucW1wX2Rpc3BfdGVzdGNhc2VzIHRlc3RjYXNlOw0KPiA+ICsJdTE2IHJfdmFs dWU7DQo+ID4gKwl1MTYgZ192YWx1ZTsNCj4gPiArCXUxNiBiX3ZhbHVlOw0KPiA+ICsJdTMyIG91 dHB1dF9mbXQ7DQo+ID4gKwlzdHJ1Y3QgenlucW1wX2Rpc3AgKnp5bnFtcF9kaXNwOw0KPiA+ICt9 Ow0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCBkZW50cnkgKnp5bnFtcF9kaXNwX2RlYnVnZnNf ZGlyOw0KPiA+ICtzdHJ1Y3QgenlucW1wX2Rpc3BfZGVidWdmcyBkaXNwX2RlYnVnZnM7DQo+ID4g K3N0cnVjdCB6eW5xbXBfZGlzcF9kZWJ1Z2ZzX3JlcXVlc3Qgew0KPiA+ICsJY29uc3QgY2hhciAq cmVxOw0KPiA+ICsJZW51bSB6eW5xbXBfZGlzcF90ZXN0Y2FzZXMgdGM7DQo+ID4gKwlzc2l6ZV90 ICgqcmVhZF9oYW5kbGVyKShjaGFyICoqa2Vybl9idWZmKTsNCj4gPiArCXNzaXplX3QgKCp3cml0 ZV9oYW5kbGVyKShjaGFyICoqY21kKTsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lk DQo+ID4gK3p5bnFtcF9kaXNwX3NldF9vdXRwdXRfZm10KHN0cnVjdCB6eW5xbXBfZGlzcCAqZGlz cCwgdW5zaWduZWQgaW50DQo+IGlkKTsNCj4gPiArc3RhdGljIHM2NCB6eW5xbXBfZGlzcF9kZWJ1 Z2ZzX2FyZ3VtZW50X3ZhbHVlKGNoYXIgKmFyZykNCj4gPiArew0KPiA+ICsJczY0IHZhbHVlOw0K PiA+ICsNCj4gPiArCWlmICghYXJnKQ0KPiA+ICsJCXJldHVybiAtMTsNCj4gPiArDQo+ID4gKwlp ZiAoIWtzdHJ0b3M2NChhcmcsIDAsICZ2YWx1ZSkpDQo+ID4gKwkJcmV0dXJuIHZhbHVlOw0KPiA+ ICsNCj4gPiArCXJldHVybiAtMTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHNzaXplX3QN Cj4gPiArenlucW1wX2Rpc3BfZGVidWdmc19iYWNrZ3JvdW5kX2NvbG9yX3dyaXRlKGNoYXIgKipk aXNwX3Rlc3RfYXJnKQ0KPiA+ICt7DQo+ID4gKwljaGFyICpyX2NvbG9yLCAqZ19jb2xvciwgKmJf Y29sb3I7DQo+ID4gKwlzNjQgcl92YWwsIGdfdmFsLCBiX3ZhbDsNCj4gPiArDQo+ID4gKwlyX2Nv bG9yID0gc3Ryc2VwKGRpc3BfdGVzdF9hcmcsICIgIik7DQo+ID4gKwlnX2NvbG9yID0gc3Ryc2Vw KGRpc3BfdGVzdF9hcmcsICIgIik7DQo+ID4gKwliX2NvbG9yID0gc3Ryc2VwKGRpc3BfdGVzdF9h cmcsICIgIik7DQo+ID4gKw0KPiA+ICsJLyogY2hhciAqIHRvIGludCBjb252ZXJzaW9uICovDQo+ ID4gKwlyX3ZhbCA9IHp5bnFtcF9kaXNwX2RlYnVnZnNfYXJndW1lbnRfdmFsdWUocl9jb2xvcik7 DQo+ID4gKwlnX3ZhbCA9IHp5bnFtcF9kaXNwX2RlYnVnZnNfYXJndW1lbnRfdmFsdWUoZ19jb2xv cik7DQo+ID4gKwliX3ZhbCA9IHp5bnFtcF9kaXNwX2RlYnVnZnNfYXJndW1lbnRfdmFsdWUoYl9j b2xvcik7DQo+ID4gKw0KPiA+ICsJaWYgKCEoSU5fUkFOR0Uocl92YWwsIDAsDQo+IFpZTlFNUF9E SVNQX0RFQlVHRlNfTUFYX0JHX0NPTE9SX1ZBTCkgJiYNCj4gPiArCSAgICAgIElOX1JBTkdFKGdf dmFsLCAwLA0KPiBaWU5RTVBfRElTUF9ERUJVR0ZTX01BWF9CR19DT0xPUl9WQUwpICYmDQo+ID4g KwkgICAgICBJTl9SQU5HRShiX3ZhbCwgMCwNCj4gWllOUU1QX0RJU1BfREVCVUdGU19NQVhfQkdf Q09MT1JfVkFMKSkpDQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsJZGlzcF9k ZWJ1Z2ZzLnJfdmFsdWUgPSByX3ZhbDsNCj4gPiArCWRpc3BfZGVidWdmcy5nX3ZhbHVlID0gZ192 YWw7DQo+ID4gKwlkaXNwX2RlYnVnZnMuYl92YWx1ZSA9IGJfdmFsOw0KPiA+ICsNCj4gPiArCWRp c3BfZGVidWdmcy50ZXN0Y2FzZSA9IERQX1NVQl9UQ19CR19DT0xPUjsNCj4gPiArDQo+ID4gKwly ZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHNzaXplX3QNCj4gPiArenlucW1w X2Rpc3BfZGVidWdmc19vdXRwdXRfZGlzcGxheV9mb3JtYXRfd3JpdGUoY2hhcg0KPiAqKmRpc3Bf dGVzdF9hcmcpDQo+ID4gK3sNCj4gPiArCWNoYXIgKm91dHB1dF9mb3JtYXQ7DQo+ID4gKwlzdHJ1 Y3QgenlucW1wX2Rpc3AgKmRpc3AgPSBkaXNwX2RlYnVnZnMuenlucW1wX2Rpc3A7DQo+ID4gKw0K PiA+ICsJLyogUmVhZCB0aGUgdmFsdWUgZnJvbSBhIHVzZXIgdmFsdWUgKi8NCj4gPiArCW91dHB1 dF9mb3JtYXQgPSBzdHJzZXAoZGlzcF90ZXN0X2FyZywgIiAiKTsNCj4gPiArCWlmIChzdHJuY21w KG91dHB1dF9mb3JtYXQsICJyZ2IiLCAzKSA9PSAwKSB7DQo+ID4gKwkJZGlzcF9kZWJ1Z2ZzLm91 dHB1dF9mbXQgPQ0KPiA+ICsJCQlaWU5RTVBfRElTUF9WX0JMRU5EX09VVFBVVF9WSURfRk1UX1JH QjsNCj4gPiArCX0gZWxzZSBpZiAoc3RybmNtcChvdXRwdXRfZm9ybWF0LCAieWNiY3I0NDQiLCA4 KSA9PSAwKSB7DQo+ID4gKwkJZGlzcF9kZWJ1Z2ZzLm91dHB1dF9mbXQgPQ0KPiA+ICsNCj4gCVpZ TlFNUF9ESVNQX1ZfQkxFTkRfT1VUUFVUX1ZJRF9GTVRfWUNCQ1I0NDQ7DQo+ID4gKwl9IGVsc2Ug aWYgKHN0cm5jbXAob3V0cHV0X2Zvcm1hdCwgInljYmNyNDIyIiwgOCkgPT0gMCkgew0KPiA+ICsJ CWRpc3BfZGVidWdmcy5vdXRwdXRfZm10ID0NCj4gPiArDQo+IAlaWU5RTVBfRElTUF9WX0JMRU5E X09VVFBVVF9WSURfRk1UX1lDQkNSNDIyOw0KPiA+ICsJfSBlbHNlIGlmIChzdHJuY21wKG91dHB1 dF9mb3JtYXQsICJ5b25seSIsIDUpID09IDApIHsNCj4gPiArCQlkaXNwX2RlYnVnZnMub3V0cHV0 X2ZtdCA9DQo+ID4gKw0KPiAJWllOUU1QX0RJU1BfVl9CTEVORF9PVVRQVVRfVklEX0ZNVF9ZT05M WTsNCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJZGV2X2VycihkaXNwLT5kZXYsICJJbnZhbGlkIG91 dHB1dCBmb3JtYXRcbiIpOw0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsN Cj4gPiArCWRpc3BfZGVidWdmcy50ZXN0Y2FzZSA9IERQX1NVQl9UQ19PVVRQVVRfRk1UOw0KPiA+ ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3NpemVfdA0K PiA+ICt6eW5xbXBfZGlzcF9kZWJ1Z2ZzX291dHB1dF9kaXNwbGF5X2Zvcm1hdF9yZWFkKGNoYXIg KiprZXJuX2J1ZmYpDQo+ID4gK3sNCj4gPiArCXNpemVfdCBvdXRfc3RyX2xlbjsNCj4gPiArDQo+ ID4gKwlkaXNwX2RlYnVnZnMudGVzdGNhc2UgPSBEUF9TVUJfVENfTk9ORTsNCj4gPiArCWRpc3Bf ZGVidWdmcy5vdXRwdXRfZm10ID0gMDsNCj4gPiArDQo+ID4gKwlvdXRfc3RyX2xlbiA9IHN0cmxl bigiU3VjY2VzcyIpOw0KPiA+ICsJb3V0X3N0cl9sZW4gPSBtaW4oWllOUU1QX0RJU1BfREVCVUdG U19SRUFEX01BWF9TSVpFLA0KPiBvdXRfc3RyX2xlbik7DQo+ID4gKwlzbnByaW50Zigqa2Vybl9i dWZmLCBvdXRfc3RyX2xlbiwgIiVzIiwgIlN1Y2Nlc3MiKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4g MDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHNzaXplX3QNCj4gPiArenlucW1wX2Rpc3Bf ZGVidWdmc19iYWNrZ3JvdW5kX2NvbG9yX3JlYWQoY2hhciAqKmtlcm5fYnVmZikNCj4gPiArew0K PiA+ICsJc2l6ZV90IG91dF9zdHJfbGVuOw0KPiA+ICsNCj4gPiArCWRpc3BfZGVidWdmcy50ZXN0 Y2FzZSA9IERQX1NVQl9UQ19OT05FOw0KPiA+ICsJZGlzcF9kZWJ1Z2ZzLnJfdmFsdWUgPSAwOw0K PiA+ICsJZGlzcF9kZWJ1Z2ZzLmdfdmFsdWUgPSAwOw0KPiA+ICsJZGlzcF9kZWJ1Z2ZzLmJfdmFs dWUgPSAwOw0KPiA+ICsNCj4gPiArCW91dF9zdHJfbGVuID0gc3RybGVuKCJTdWNjZXNzIik7DQo+ ID4gKwlvdXRfc3RyX2xlbiA9IG1pbihaWU5RTVBfRElTUF9ERUJVR0ZTX1JFQURfTUFYX1NJWkUs DQo+IG91dF9zdHJfbGVuKTsNCj4gPiArCXNucHJpbnRmKCprZXJuX2J1ZmYsIG91dF9zdHJfbGVu LCAiJXMiLCAiU3VjY2VzcyIpOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICsvKiBNYXRjaCB4aWxpbnhfZHBfdGVzdGNhc2VzIHZzIGRwX2RlYnVnZnNfcmVxc1td IGVudHJ5ICovDQo+ID4gK3N0cnVjdCB6eW5xbXBfZGlzcF9kZWJ1Z2ZzX3JlcXVlc3QgZGlzcF9k ZWJ1Z2ZzX3JlcXNbXSA9IHsNCj4gPiArCXsiQkFDS0dST1VORF9DT0xPUiIsIERQX1NVQl9UQ19C R19DT0xPUiwNCj4gPiArCQl6eW5xbXBfZGlzcF9kZWJ1Z2ZzX2JhY2tncm91bmRfY29sb3JfcmVh ZCwNCj4gPiArCQl6eW5xbXBfZGlzcF9kZWJ1Z2ZzX2JhY2tncm91bmRfY29sb3Jfd3JpdGV9LA0K PiA+ICsJeyJPVVRQVVRfRElTUExBWV9GT1JNQVQiLCBEUF9TVUJfVENfT1VUUFVUX0ZNVCwNCj4g PiArCQl6eW5xbXBfZGlzcF9kZWJ1Z2ZzX291dHB1dF9kaXNwbGF5X2Zvcm1hdF9yZWFkLA0KPiA+ ICsJCXp5bnFtcF9kaXNwX2RlYnVnZnNfb3V0cHV0X2Rpc3BsYXlfZm9ybWF0X3dyaXRlfSwNCj4g PiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBzc2l6ZV90DQo+ID4gK3p5bnFtcF9kaXNwX2RlYnVn ZnNfd3JpdGUoc3RydWN0IGZpbGUgKmYsIGNvbnN0IGNoYXIgX191c2VyICpidWYsDQo+ID4gKwkJ CSAgc2l6ZV90IHNpemUsIGxvZmZfdCAqcG9zKQ0KPiA+ICt7DQo+ID4gKwljaGFyICprZXJuX2J1 ZmYsICpkaXNwX3Rlc3RfcmVxLCAqa2Vybl9idWZmX3N0YXJ0Ow0KPiA+ICsJaW50IHJldDsNCj4g PiArCXVuc2lnbmVkIGludCBpOw0KPiA+ICsNCj4gPiArCWlmICgqcG9zICE9IDAgfHwgc2l6ZSA8 PSAwKQ0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiArCWlmIChkaXNwX2RlYnVn ZnMudGVzdGNhc2UgIT0gRFBfU1VCX1RDX05PTkUpDQo+ID4gKwkJcmV0dXJuIC1FQlVTWTsNCj4g PiArDQo+ID4gKwlrZXJuX2J1ZmYgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOw0KPiA+ICsJ aWYgKCFrZXJuX2J1ZmYpDQo+ID4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ID4gKwlrZXJuX2J1ZmZf c3RhcnQgPSBrZXJuX2J1ZmY7DQo+ID4gKw0KPiA+ICsJcmV0ID0gc3RybmNweV9mcm9tX3VzZXIo a2Vybl9idWZmLCBidWYsIHNpemUpOw0KPiA+ICsJaWYgKHJldCA8IDApIHsNCj4gPiArCQlrZnJl ZShrZXJuX2J1ZmZfc3RhcnQpOw0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0K PiA+ICsJLyogUmVhZCB0aGUgdGVzdGNhc2UgbmFtZSBhbmQgYXJndW1lbnQgZnJvbSBhIHVzZXIg cmVxdWVzdCAqLw0KPiA+ICsJZGlzcF90ZXN0X3JlcSA9IHN0cnNlcCgma2Vybl9idWZmLCAiICIp Ow0KPiA+ICsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRpc3BfZGVidWdmc19y ZXFzKTsgaSsrKSB7DQo+ID4gKwkJaWYgKCFzdHJjYXNlY21wKGRpc3BfdGVzdF9yZXEsIGRpc3Bf ZGVidWdmc19yZXFzW2ldLnJlcSkpDQo+ID4gKwkJCWlmICghZGlzcF9kZWJ1Z2ZzX3JlcXNbaV0u d3JpdGVfaGFuZGxlcigma2Vybl9idWZmKSkNCj4gew0KPiA+ICsJCQkJa2ZyZWUoa2Vybl9idWZm X3N0YXJ0KTsNCj4gPiArCQkJCXJldHVybiBzaXplOw0KPiA+ICsJCQl9DQo+ID4gKwl9DQo+ID4g KwlrZnJlZShrZXJuX2J1ZmZfc3RhcnQpOw0KPiA+ICsJcmV0dXJuIC1FSU5WQUw7DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyBzc2l6ZV90IHp5bnFtcF9kaXNwX2RlYnVnZnNfcmVhZChzdHJ1 Y3QgZmlsZSAqZiwgY2hhciBfX3VzZXIgKmJ1ZiwNCj4gPiArCQkJCQlzaXplX3Qgc2l6ZSwgbG9m Zl90ICpwb3MpDQo+ID4gK3sNCj4gPiArCWNoYXIgKmtlcm5fYnVmZiA9IE5VTEw7DQo+ID4gKwlz aXplX3Qga2Vybl9idWZmX2xlbiwgb3V0X3N0cl9sZW47DQo+ID4gKwllbnVtIHp5bnFtcF9kaXNw X3Rlc3RjYXNlcyB0YzsNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJaWYgKHNpemUgPD0g MCkNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwlpZiAoKnBvcyAhPSAwKQ0K PiA+ICsJCXJldHVybiAwOw0KPiA+ICsNCj4gPiArCWtlcm5fYnVmZiA9IGt6YWxsb2MoWllOUU1Q X0RJU1BfREVCVUdGU19SRUFEX01BWF9TSVpFLA0KPiBHRlBfS0VSTkVMKTsNCj4gPiArCWlmICgh a2Vybl9idWZmKSB7DQo+ID4gKwkJZGlzcF9kZWJ1Z2ZzLnRlc3RjYXNlID0gRFBfU1VCX1RDX05P TkU7DQo+ID4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJdGMgPSBk aXNwX2RlYnVnZnMudGVzdGNhc2U7DQo+ID4gKwlpZiAodGMgPT0gRFBfU1VCX1RDX05PTkUpIHsN Cj4gPiArCQlvdXRfc3RyX2xlbiA9IHN0cmxlbigiTm8gdGVzdGNhc2UgZXhlY3V0ZWQiKTsNCj4g PiArCQlvdXRfc3RyX2xlbiA9DQo+IG1pbihaWU5RTVBfRElTUF9ERUJVR0ZTX1JFQURfTUFYX1NJ WkUsDQo+ID4gKwkJCQkgIG91dF9zdHJfbGVuKTsNCj4gPiArCQlzbnByaW50ZihrZXJuX2J1ZmYs IG91dF9zdHJfbGVuLCAiJXMiLCAiTm8gdGVzdGNhc2UNCj4gZXhlY3V0ZWQiKTsNCj4gPiArCX0g ZWxzZSB7DQo+ID4gKwkJcmV0ID0gZGlzcF9kZWJ1Z2ZzX3JlcXNbdGNdLnJlYWRfaGFuZGxlcigm a2Vybl9idWZmKTsNCj4gPiArCQlpZiAocmV0KSB7DQo+ID4gKwkJCWtmcmVlKGtlcm5fYnVmZik7 DQo+ID4gKwkJCXJldHVybiByZXQ7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWtl cm5fYnVmZl9sZW4gPSBzdHJsZW4oa2Vybl9idWZmKTsNCj4gPiArCXNpemUgPSBtaW4oc2l6ZSwg a2Vybl9idWZmX2xlbik7DQo+ID4gKw0KPiA+ICsJcmV0ID0gY29weV90b191c2VyKGJ1Ziwga2Vy bl9idWZmLCBzaXplKTsNCj4gPiArDQo+ID4gKwlrZnJlZShrZXJuX2J1ZmYpOw0KPiA+ICsJaWYg KHJldCkNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArCSpwb3MgPSBzaXplICsgMTsN Cj4gPiArCXJldHVybiBzaXplOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX3p5bnFtcF9kaXNwX2RiZ2ZzID0gew0KPiA+ICsJLm93 bmVyID0gVEhJU19NT0RVTEUsDQo+ID4gKwkucmVhZCA9IHp5bnFtcF9kaXNwX2RlYnVnZnNfcmVh ZCwNCj4gPiArCS53cml0ZSA9IHp5bnFtcF9kaXNwX2RlYnVnZnNfd3JpdGUsDQo+ID4gK307DQo+ ID4gKw0KPiA+ICtzdGF0aWMgaW50IHp5bnFtcF9kaXNwX2RlYnVnZnNfaW5pdChzdHJ1Y3Qgenlu cW1wX2Rpc3AgKmRpc3ApDQo+ID4gK3sNCj4gPiArCWludCBlcnI7DQo+ID4gKwlzdHJ1Y3QgZGVu dHJ5ICp6eW5xbXBfZGlzcF9kZWJ1Z2ZzX2ZpbGU7DQo+ID4gKw0KPiA+ICsJZGlzcF9kZWJ1Z2Zz LnRlc3RjYXNlID0gRFBfU1VCX1RDX05PTkU7DQo+ID4gKwlkaXNwX2RlYnVnZnMuenlucW1wX2Rp c3AgPSBkaXNwOw0KPiA+ICsNCj4gPiArCXp5bnFtcF9kaXNwX2RlYnVnZnNfZGlyID0gZGVidWdm c19jcmVhdGVfZGlyKCJkaXNwIiwgTlVMTCk7DQo+ID4gKwlpZiAoIXp5bnFtcF9kaXNwX2RlYnVn ZnNfZGlyKSB7DQo+ID4gKwkJZGV2X2VycihkaXNwLT5kZXYsICJkZWJ1Z2ZzX2NyZWF0ZV9kaXIg ZmFpbGVkXG4iKTsNCj4gPiArCQlyZXR1cm4gLUVOT0RFVjsNCj4gPiArCX0NCj4gPiArDQo+ID4g Kwl6eW5xbXBfZGlzcF9kZWJ1Z2ZzX2ZpbGUgPQ0KPiA+ICsJCWRlYnVnZnNfY3JlYXRlX2ZpbGUo InRlc3RjYXNlIiwgMDQ0NCwNCj4gPiArCQkJCSAgICB6eW5xbXBfZGlzcF9kZWJ1Z2ZzX2Rpciwg TlVMTCwNCj4gPiArCQkJCSAgICAmZm9wc196eW5xbXBfZGlzcF9kYmdmcyk7DQo+ID4gKwlpZiAo IXp5bnFtcF9kaXNwX2RlYnVnZnNfZmlsZSkgew0KPiA+ICsJCWRldl9lcnIoZGlzcC0+ZGV2LCAi ZGVidWdmc19jcmVhdGVfZmlsZSB0ZXN0Y2FzZSBmYWlsZWRcbiIpOw0KPiA+ICsJCWVyciA9IC1F Tk9ERVY7DQo+ID4gKwkJZ290byBlcnJfZGJnZnM7DQo+ID4gKwl9DQo+ID4gKwlyZXR1cm4gMDsN Cj4gPiArDQo+ID4gK2Vycl9kYmdmczoNCj4gPiArCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZSh6 eW5xbXBfZGlzcF9kZWJ1Z2ZzX2Rpcik7DQo+ID4gKwl6eW5xbXBfZGlzcF9kZWJ1Z2ZzX2RpciA9 IE5VTEw7DQo+ID4gKwlyZXR1cm4gZXJyOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9p ZCB6eW5xbXBfZGlzcF9kZWJ1Z2ZzX2V4aXQoc3RydWN0IHp5bnFtcF9kaXNwICpkaXNwKQ0KPiA+ ICt7DQo+ID4gKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoenlucW1wX2Rpc3BfZGVidWdmc19k aXIpOw0KPiA+ICsJenlucW1wX2Rpc3BfZGVidWdmc19kaXIgPSBOVUxMOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgdm9pZCB6eW5xbXBfZGlzcF9kZWJ1Z2ZzX2JnX2NvbG9yKHN0cnVjdCB6 eW5xbXBfZGlzcCAqZGlzcCkNCj4gPiArew0KPiA+ICsJaWYgKGRpc3BfZGVidWdmcy50ZXN0Y2Fz ZSA9PSBEUF9TVUJfVENfQkdfQ09MT1IpIHsNCj4gPiArCQl6eW5xbXBfZGlzcF93cml0ZShkaXNw LT5ibGVuZC5iYXNlLA0KPiA+ICsJCQkJICBaWU5RTVBfRElTUF9WX0JMRU5EX0JHX0NMUl8wLA0K PiA+ICsJCQkJICBkaXNwX2RlYnVnZnMucl92YWx1ZSk7DQo+ID4gKwkJenlucW1wX2Rpc3Bfd3Jp dGUoZGlzcC0+YmxlbmQuYmFzZSwNCj4gPiArCQkJCSAgWllOUU1QX0RJU1BfVl9CTEVORF9CR19D TFJfMSwNCj4gPiArCQkJCSAgZGlzcF9kZWJ1Z2ZzLmdfdmFsdWUpOw0KPiA+ICsJCXp5bnFtcF9k aXNwX3dyaXRlKGRpc3AtPmJsZW5kLmJhc2UsDQo+ID4gKwkJCQkgIFpZTlFNUF9ESVNQX1ZfQkxF TkRfQkdfQ0xSXzIsDQo+ID4gKwkJCQkgIGRpc3BfZGVidWdmcy5iX3ZhbHVlKTsNCj4gPiArCX0N Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQNCj4gPiArenlucW1wX2Rpc3Bfc2V0X2Rl YnVnZnNfb3V0cHV0X2ZtdChzdHJ1Y3QgenlucW1wX2Rpc3AgKmRpc3ApDQo+ID4gK3sNCj4gPiAr CWlmIChkaXNwX2RlYnVnZnMudGVzdGNhc2UgPT0gRFBfU1VCX1RDX09VVFBVVF9GTVQpDQo+ID4g KwkJenlucW1wX2Rpc3Bfc2V0X291dHB1dF9mbXQoZGlzcCwNCj4gZGlzcF9kZWJ1Z2ZzLm91dHB1 dF9mbXQpOw0KPiA+ICt9DQo+ID4gKyNlbHNlDQo+ID4gK3N0YXRpYyB2b2lkIHp5bnFtcF9kaXNw X2RlYnVnZnNfZXhpdChzdHJ1Y3QgenlucW1wX2Rpc3AgKmRpc3ApDQo+ID4gK3sNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIGludCB6eW5xbXBfZGlzcF9kZWJ1Z2ZzX2luaXQoc3RydWN0IHp5 bnFtcF9kaXNwICpkaXNwKQ0KPiA+ICt7DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArc3RhdGljIHZvaWQgenlucW1wX2Rpc3BfZGVidWdmc19iZ19jb2xvcihzdHJ1Y3Qgenlu cW1wX2Rpc3AgKmRpc3ApDQo+ID4gK3sNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQN Cj4gPiArenlucW1wX2Rpc3Bfc2V0X2RlYnVnZnNfb3V0cHV0X2ZtdChzdHJ1Y3QgenlucW1wX2Rp c3AgKmRpc3ApDQo+ID4gK3sNCj4gPiArfQ0KPiA+ICsjZW5kaWYgLyogQ09ORklHX0RQX0RFQlVH X0ZTICovDQo+ID4gKw0KPiA+ICAvKg0KPiA+ICAgKiBDbG9jayBmdW5jdGlvbnMNCj4gPiAgICov DQo+ID4gQEAgLTU5Nyw2ICs5MTcsOCBAQCB6eW5xbXBfZGlzcF9ibGVuZF9zZXRfb3V0cHV0X2Zt dChzdHJ1Y3QNCj4genlucW1wX2Rpc3BfYmxlbmQgKmJsZW5kLCB1MzIgZm10KQ0KPiA+ICAJdTMy ICpvZmZzZXRzOw0KPiA+ICAJdTMyIG9mZnNldCwgaTsNCj4gPg0KPiA+ICsJaWYgKGZtdCA9PSBa WU5RTVBfRElTUF9WX0JMRU5EX09VVFBVVF9WSURfRk1UX1lDQkNSNDIyKQ0KPiA+ICsJCWZtdCB8 PQ0KPiBaWU5RTVBfRElTUF9WX0JMRU5EX09VVFBVVF9FTl9ET1dOU0FNUExFOw0KPiA+ICAJenlu cW1wX2Rpc3Bfd3JpdGUoYmxlbmQtPmJhc2UsDQo+IFpZTlFNUF9ESVNQX1ZfQkxFTkRfT1VUUFVU X1ZJRF9GTVQsIGZtdCk7DQo+ID4gIAlpZiAoZm10ID09IFpZTlFNUF9ESVNQX1ZfQkxFTkRfT1VU UFVUX1ZJRF9GTVRfUkdCKSB7DQo+ID4gIAkJY29lZmZzID0gcmVzZXRfY29lZmZzOw0KPiA+IEBA IC0xOTQxLDYgKzIyNjMsNyBAQCBzdGF0aWMgdm9pZCB6eW5xbXBfZGlzcF9zZXRfYmdfY29sb3Io c3RydWN0DQo+IHp5bnFtcF9kaXNwICpkaXNwLA0KPiA+ICAJCQkJICAgICB1MzIgYzAsIHUzMiBj MSwgdTMyIGMyKQ0KPiA+ICB7DQo+ID4gIAl6eW5xbXBfZGlzcF9ibGVuZF9zZXRfYmdfY29sb3Io JmRpc3AtPmJsZW5kLCBjMCwgYzEsIGMyKTsNCj4gPiArCXp5bnFtcF9kaXNwX2RlYnVnZnNfYmdf Y29sb3IoZGlzcCk7DQo+ID4gIH0NCj4gPg0KPiA+ICAvKioNCj4gPiBAQCAtMjU3Miw2ICsyODk1 LDcgQEAgenlucW1wX2Rpc3BfY3J0Y19hdG9taWNfZW5hYmxlKHN0cnVjdA0KPiBkcm1fY3J0YyAq Y3J0YywNCj4gPiAgCQlyZXR1cm47DQo+ID4gIAl9DQo+ID4gIAl6eW5xbXBfZGlzcF9zZXRfb3V0 cHV0X2ZtdChkaXNwLCBkaXNwLT5jb2xvcik7DQo+ID4gKwl6eW5xbXBfZGlzcF9zZXRfZGVidWdm c19vdXRwdXRfZm10KGRpc3ApOw0KPiA+ICAJenlucW1wX2Rpc3Bfc2V0X2JnX2NvbG9yKGRpc3As IGRpc3AtPmJnX2MwLCBkaXNwLT5iZ19jMSwgZGlzcC0NCj4gPmJnX2MyKTsNCj4gPiAgCXp5bnFt cF9kaXNwX2VuYWJsZShkaXNwKTsNCj4gPiAgCS8qIERlbGF5IG9mIDMgdmJsYW5rIGludGVydmFs cyBmb3IgdGltaW5nIGdlbiB0byBiZSBzdGFibGUgKi8NCj4gPiBAQCAtMjkxMSw2ICszMjM1LDcg QEAgaW50IHp5bnFtcF9kaXNwX3Byb2JlKHN0cnVjdA0KPiBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp DQo+ID4gIAlyZXQgPSB6eW5xbXBfZGlzcF9sYXllcl9jcmVhdGUoZGlzcCk7DQo+ID4gIAlpZiAo cmV0KQ0KPiA+ICAJCWdvdG8gZXJyb3JfYWNsazsNCj4gPiArCXp5bnFtcF9kaXNwX2RlYnVnZnNf aW5pdChkaXNwKTsNCj4gPg0KPiA+ICAJcmV0dXJuIDA7DQo+ID4NCj4gPiBAQCAtMjkyNCw2ICsz MjQ5LDcgQEAgaW50IHp5bnFtcF9kaXNwX3JlbW92ZShzdHJ1Y3QNCj4gcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQ0KPiA+ICAJc3RydWN0IHp5bnFtcF9kcHN1YiAqZHBzdWIgPSBwbGF0Zm9ybV9nZXRf ZHJ2ZGF0YShwZGV2KTsNCj4gPiAgCXN0cnVjdCB6eW5xbXBfZGlzcCAqZGlzcCA9IGRwc3ViLT5k aXNwOw0KPiA+DQo+ID4gKwl6eW5xbXBfZGlzcF9kZWJ1Z2ZzX2V4aXQoZGlzcCk7DQo+ID4gIAl6 eW5xbXBfZGlzcF9sYXllcl9kZXN0cm95KGRpc3ApOw0KPiA+ICAJaWYgKGRpc3AtPmF1ZGNsaykN Cj4gPiAgCQl6eW5xbXBfZGlzcF9jbGtfZGlzYWJsZShkaXNwLT5hdWRjbGssICZkaXNwLT5hdWRj bGtfZW4pOw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGxueC96eW5xbXBfZHAu Yw0KPiBiL2RyaXZlcnMvZ3B1L2RybS94bG54L3p5bnFtcF9kcC5jDQo+ID4gaW5kZXggY2UzYzdj NS4uNjZmYmFkMCAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0veGxueC96eW5xbXBf ZHAuYw0KPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94bG54L3p5bnFtcF9kcC5jDQo+ID4gQEAg LTE2LDYgKzE2LDcgQEANCj4gPiAgI2luY2x1ZGUgPGRybS9kcm1fZHBfaGVscGVyLmg+DQo+ID4g ICNpbmNsdWRlIDxkcm0vZHJtX29mLmg+DQo+ID4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2RlYnVn ZnMuaD4NCj4gPiAgI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQo+ID4gICNpbmNsdWRlIDxsaW51 eC9kZXZpY2UuaD4NCj4gPiAgI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiA+IEBAIC0zNzEs NiArMzcyLDMwNiBAQCBzdGF0aWMgdm9pZCB6eW5xbXBfZHBfc2V0KHZvaWQgX19pb21lbQ0KPiAq YmFzZSwgaW50IG9mZnNldCwgdTMyIHNldCkNCj4gPiAgfQ0KPiA+DQo+ID4gIC8qDQo+ID4gKyAq IERlYnVnZnMgZnVuY3Rpb25zDQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArI2lmZGVmIENPTkZJR19E Uk1fWllOUU1QX0RQX0RFQlVHX0ZTDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9ERUJV R0ZTX1JFQURfTUFYX1NJWkUJMzJVTA0KPiA+ICsjZGVmaW5lIFpZTlFNUF9EUF9ERUJVR0ZTX1VJ TlQ4X01BWF9TVFIJIjI1NSINCj4gPiArI2RlZmluZSBJTl9SQU5HRSh4LCBtaW4sIG1heCkgKHsJ CVwNCj4gPiArCQl0eXBlb2YoeCkgX3ggPSAoeCk7CQlcDQo+ID4gKwkJX3ggPj0gKG1pbikgJiYg X3ggPD0gKG1heCk7IH0pDQo+ID4gKw0KPiA+ICsvKiBNYXRjaCB6eW5xbXBfZHBfdGVzdGNhc2Vz IHZzIGRlYnVnZnNfcmVxc1tdIGVudHJ5ICovDQo+ID4gK2VudW0genlucW1wX2RwX3Rlc3RjYXNl cyB7DQo+ID4gKwlEUF9UQ19MSU5LX1JBVEUsDQo+ID4gKwlEUF9UQ19MQU5FX0NPVU5ULA0KPiA+ ICsJRFBfVENfT1VUUFVUX0ZNVCwNCj4gPiArCURQX1RDX05PTkUNCj4gPiArfTsNCj4gPiArDQo+ ID4gK3N0cnVjdCB6eW5xbXBfZHBfZGVidWdmcyB7DQo+ID4gKwllbnVtIHp5bnFtcF9kcF90ZXN0 Y2FzZXMgdGVzdGNhc2U7DQo+ID4gKwl1OCBsaW5rX3JhdGU7DQo+ID4gKwl1OCBsYW5lX2NudDsN Cj4gPiArCXU4IG9sZF9vdXRwdXRfZm10Ow0KPiA+ICsJc3RydWN0IHp5bnFtcF9kcCAqZHA7DQo+ ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IGRlbnRyeSAqenlucW1wX2RwX2RlYnVn ZnNfZGlyOw0KPiA+ICtzdGF0aWMgc3RydWN0IHp5bnFtcF9kcF9kZWJ1Z2ZzIGRwX2RlYnVnZnM7 DQo+ID4gK3N0cnVjdCB6eW5xbXBfZHBfZGVidWdmc19yZXF1ZXN0IHsNCj4gPiArCWNvbnN0IGNo YXIgKnJlcTsNCj4gPiArCWVudW0genlucW1wX2RwX3Rlc3RjYXNlcyB0YzsNCj4gPiArCXNzaXpl X3QgKCpyZWFkX2hhbmRsZXIpKGNoYXIgKiprZXJuX2J1ZmYpOw0KPiA+ICsJc3NpemVfdCAoKndy aXRlX2hhbmRsZXIpKGNoYXIgKipjbWQpOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIHM2 NCB6eW5xbXBfZHBfZGVidWdmc19hcmd1bWVudF92YWx1ZShjaGFyICphcmcpDQo+ID4gK3sNCj4g PiArCXM2NCB2YWx1ZTsNCj4gPiArDQo+ID4gKwlpZiAoIWFyZykNCj4gPiArCQlyZXR1cm4gLTE7 DQo+ID4gKw0KPiA+ICsJaWYgKCFrc3RydG9zNjQoYXJnLCAwLCAmdmFsdWUpKQ0KPiA+ICsJCXJl dHVybiB2YWx1ZTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gLTE7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyBzc2l6ZV90IHp5bnFtcF9kcF9kZWJ1Z2ZzX21heF9saW5rcmF0ZV93cml0ZShjaGFy DQo+ICoqZHBfdGVzdF9hcmcpDQo+ID4gK3sNCj4gPiArCWNoYXIgKmxpbmtfcmF0ZV9hcmc7DQo+ ID4gKwlzNjQgbGlua19yYXRlOw0KPiA+ICsNCj4gPiArCWxpbmtfcmF0ZV9hcmcgPSBzdHJzZXAo ZHBfdGVzdF9hcmcsICIgIik7DQo+ID4gKwlsaW5rX3JhdGUgPSB6eW5xbXBfZHBfZGVidWdmc19h cmd1bWVudF92YWx1ZShsaW5rX3JhdGVfYXJnKTsNCj4gPiArCWlmIChsaW5rX3JhdGUgPCAwIHx8 IChsaW5rX3JhdGUgIT0gRFBfSElHSF9CSVRfUkFURTIgJiYNCj4gPiArCQkJICAgICAgbGlua19y YXRlICE9IERQX0hJR0hfQklUX1JBVEUgJiYNCj4gPiArCQkJICAgICAgbGlua19yYXRlICE9IERQ X1JFRFVDRURfQklUX1JBVEUpKQ0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiAr CWRwX2RlYnVnZnMubGlua19yYXRlID0gZHJtX2RwX2xpbmtfcmF0ZV90b19id19jb2RlKGxpbmtf cmF0ZSk7DQo+ID4gKwlkcF9kZWJ1Z2ZzLnRlc3RjYXNlID0gRFBfVENfTElOS19SQVRFOw0KPiA+ ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3NpemVfdCB6 eW5xbXBfZHBfZGVidWdmc19tYXhfbGFuZWNudF93cml0ZShjaGFyDQo+ICoqZHBfdGVzdF9hcmcp DQo+ID4gK3sNCj4gPiArCWNoYXIgKmxhbmVfY250X2FyZzsNCj4gPiArCXM2NCBsYW5lX2NvdW50 Ow0KPiA+ICsNCj4gPiArCWxhbmVfY250X2FyZyA9IHN0cnNlcChkcF90ZXN0X2FyZywgIiAiKTsN Cj4gPiArCWxhbmVfY291bnQgPSB6eW5xbXBfZHBfZGVidWdmc19hcmd1bWVudF92YWx1ZShsYW5l X2NudF9hcmcpOw0KPiA+ICsJaWYgKGxhbmVfY291bnQgPCAwIHx8ICFJTl9SQU5HRShsYW5lX2Nv dW50LCAxLA0KPiA+ICsJCQkJCVpZTlFNUF9EUF9NQVhfTEFORVMpKQ0KPiA+ICsJCXJldHVybiAt RUlOVkFMOw0KPiA+ICsNCj4gPiArCWRwX2RlYnVnZnMubGFuZV9jbnQgPSBsYW5lX2NvdW50Ow0K PiA+ICsJZHBfZGVidWdmcy50ZXN0Y2FzZSA9IERQX1RDX0xBTkVfQ09VTlQ7DQo+ID4gKw0KPiA+ ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBzc2l6ZV90IHp5bnFtcF9k cF9kZWJ1Z2ZzX21heF9saW5rcmF0ZV9yZWFkKGNoYXIgKiprZXJuX2J1ZmYpDQo+ID4gK3sNCj4g PiArCXN0cnVjdCB6eW5xbXBfZHAgKmRwID0gZHBfZGVidWdmcy5kcDsNCj4gPiArCXNpemVfdCBv dXRwdXRfc3RyX2xlbjsNCj4gPiArCXU4IGRwY2RfbGlua19idzsNCj4gPiArCWludCByZXQ7DQo+ ID4gKw0KPiA+ICsJZHBfZGVidWdmcy50ZXN0Y2FzZSA9IERQX1RDX05PTkU7DQo+ID4gKwlkcF9k ZWJ1Z2ZzLmxpbmtfcmF0ZSA9IDA7DQo+ID4gKw0KPiA+ICsJLyogR2V0dGluZyBTaW5rIFNpZGUg TGluayBSYXRlICovDQo+ID4gKwlyZXQgPSBkcm1fZHBfZHBjZF9yZWFkYigmZHAtPmF1eCwgRFBf TElOS19CV19TRVQsDQo+ICZkcGNkX2xpbmtfYncpOw0KPiA+ICsJaWYgKHJldCA8IDApIHsNCj4g PiArCQlkZXZfZXJyKGRwLT5kZXYsICJGYWlsZWQgdG8gcmVhZCBsaW5rIHJhdGUgdmlhIEFVWC5c biIpOw0KPiA+ICsJCWtmcmVlKCprZXJuX2J1ZmYpOw0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4g Kwl9DQo+ID4gKw0KPiA+ICsJb3V0cHV0X3N0cl9sZW4gPSBzdHJsZW4oWllOUU1QX0RQX0RFQlVH RlNfVUlOVDhfTUFYX1NUUik7DQo+ID4gKwlvdXRwdXRfc3RyX2xlbiA9IG1pbihaWU5RTVBfRFBf REVCVUdGU19SRUFEX01BWF9TSVpFLA0KPiBvdXRwdXRfc3RyX2xlbik7DQo+ID4gKwlzbnByaW50 Zigqa2Vybl9idWZmLCBvdXRwdXRfc3RyX2xlbiwgIiV1IiwgZHBjZF9saW5rX2J3KTsNCj4gPiAr DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHNzaXplX3Qgenlu cW1wX2RwX2RlYnVnZnNfbWF4X2xhbmVjbnRfcmVhZChjaGFyICoqa2Vybl9idWZmKQ0KPiA+ICt7 DQo+ID4gKwlzdHJ1Y3QgenlucW1wX2RwICpkcCA9IGRwX2RlYnVnZnMuZHA7DQo+ID4gKwlzaXpl X3Qgb3V0cHV0X3N0cl9sZW47DQo+ID4gKwl1OCBkcGNkX2xhbmVfY250Ow0KPiA+ICsJaW50IHJl dDsNCj4gPiArDQo+ID4gKwlkcF9kZWJ1Z2ZzLnRlc3RjYXNlID0gRFBfVENfTk9ORTsNCj4gPiAr CWRwX2RlYnVnZnMubGFuZV9jbnQgPSAwOw0KPiA+ICsNCj4gPiArCS8qIEdldHRpbmcgU2luayBT aWRlIExhbmUgQ291bnQgKi8NCj4gPiArCXJldCA9IGRybV9kcF9kcGNkX3JlYWRiKCZkcC0+YXV4 LCBEUF9MQU5FX0NPVU5UX1NFVCwNCj4gJmRwY2RfbGFuZV9jbnQpOw0KPiA+ICsJaWYgKHJldCA8 IDApIHsNCj4gPiArCQlkZXZfZXJyKGRwLT5kZXYsICJGYWlsZWQgdG8gcmVhZCBsaW5rIHJhdGUg dmlhIEFVWC5cbiIpOw0KPiA+ICsJCWtmcmVlKCprZXJuX2J1ZmYpOw0KPiA+ICsJCXJldHVybiBy ZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJZHBjZF9sYW5lX2NudCAmPSBEUF9MQU5FX0NPVU5U X01BU0s7DQo+ID4gKwlvdXRwdXRfc3RyX2xlbiA9IHN0cmxlbihaWU5RTVBfRFBfREVCVUdGU19V SU5UOF9NQVhfU1RSKTsNCj4gPiArCW91dHB1dF9zdHJfbGVuID0gbWluKFpZTlFNUF9EUF9ERUJV R0ZTX1JFQURfTUFYX1NJWkUsDQo+IG91dHB1dF9zdHJfbGVuKTsNCj4gPiArCXNucHJpbnRmKCpr ZXJuX2J1ZmYsIG91dHB1dF9zdHJfbGVuLCAiJXUiLCBkcGNkX2xhbmVfY250KTsNCj4gPiArDQo+ ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogTWF0Y2ggenlucW1wX2RwX3Rl c3RjYXNlcyB2cyBkcF9kZWJ1Z2ZzX3JlcXNbXSBlbnRyeSAqLw0KPiA+ICtzdGF0aWMgc3RydWN0 IHp5bnFtcF9kcF9kZWJ1Z2ZzX3JlcXVlc3QgZGVidWdmc19yZXFzW10gPSB7DQo+ID4gKwl7IkxJ TktfUkFURSIsIERQX1RDX0xJTktfUkFURSwNCj4gPiArCQkJenlucW1wX2RwX2RlYnVnZnNfbWF4 X2xpbmtyYXRlX3JlYWQsDQo+ID4gKwkJCXp5bnFtcF9kcF9kZWJ1Z2ZzX21heF9saW5rcmF0ZV93 cml0ZX0sDQo+ID4gKwl7IkxBTkVfQ09VTlQiLCBEUF9UQ19MQU5FX0NPVU5ULA0KPiA+ICsJCQl6 eW5xbXBfZHBfZGVidWdmc19tYXhfbGFuZWNudF9yZWFkLA0KPiA+ICsJCQl6eW5xbXBfZHBfZGVi dWdmc19tYXhfbGFuZWNudF93cml0ZX0sDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3Np emVfdCB6eW5xbXBfZHBfZGVidWdmc19yZWFkKHN0cnVjdCBmaWxlICpmLCBjaGFyIF9fdXNlciAq YnVmLA0KPiA+ICsJCQkJICAgICAgc2l6ZV90IHNpemUsIGxvZmZfdCAqcG9zKQ0KPiA+ICt7DQo+ ID4gKwljaGFyICprZXJuX2J1ZmYgPSBOVUxMOw0KPiA+ICsJc2l6ZV90IGtlcm5fYnVmZl9sZW4s IG91dF9zdHJfbGVuOw0KPiA+ICsJZW51bSB6eW5xbXBfZHBfdGVzdGNhc2VzIHRjOw0KPiA+ICsJ aW50IHJldDsNCj4gPiArDQo+ID4gKwlpZiAoc2l6ZSA8PSAwKQ0KPiA+ICsJCXJldHVybiAtRUlO VkFMOw0KPiA+ICsNCj4gPiArCWlmICgqcG9zICE9IDApDQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4g Kw0KPiA+ICsJa2Vybl9idWZmID0ga3phbGxvYyhaWU5RTVBfRFBfREVCVUdGU19SRUFEX01BWF9T SVpFLA0KPiBHRlBfS0VSTkVMKTsNCj4gPiArCWlmICgha2Vybl9idWZmKSB7DQo+ID4gKwkJZHBf ZGVidWdmcy50ZXN0Y2FzZSA9IERQX1RDX05PTkU7DQo+ID4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ ID4gKwl9DQo+ID4gKw0KPiA+ICsJdGMgPSBkcF9kZWJ1Z2ZzLnRlc3RjYXNlOw0KPiA+ICsJaWYg KHRjID09IERQX1RDX05PTkUpIHsNCj4gPiArCQlvdXRfc3RyX2xlbiA9IHN0cmxlbigiTm8gdGVz dGNhc2UgZXhlY3V0ZWQiKTsNCj4gPiArCQlvdXRfc3RyX2xlbiA9IG1pbihaWU5RTVBfRFBfREVC VUdGU19SRUFEX01BWF9TSVpFLA0KPiBvdXRfc3RyX2xlbik7DQo+ID4gKwkJc25wcmludGYoa2Vy bl9idWZmLCBvdXRfc3RyX2xlbiwgIiVzIiwgIk5vIHRlc3RjYXNlDQo+IGV4ZWN1dGVkIik7DQo+ ID4gKwl9IGVsc2Ugew0KPiA+ICsJCXJldCA9IGRlYnVnZnNfcmVxc1t0Y10ucmVhZF9oYW5kbGVy KCZrZXJuX2J1ZmYpOw0KPiA+ICsJCWlmIChyZXQpIHsNCj4gPiArCQkJa2ZyZWUoa2Vybl9idWZm KTsNCj4gPiArCQkJcmV0dXJuIHJldDsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJ a2Vybl9idWZmX2xlbiA9IHN0cmxlbihrZXJuX2J1ZmYpOw0KPiA+ICsJc2l6ZSA9IG1pbihzaXpl LCBrZXJuX2J1ZmZfbGVuKTsNCj4gPiArDQo+ID4gKwlyZXQgPSBjb3B5X3RvX3VzZXIoYnVmLCBr ZXJuX2J1ZmYsIHNpemUpOw0KPiA+ICsNCj4gPiArCWtmcmVlKGtlcm5fYnVmZik7DQo+ID4gKwlp ZiAocmV0KQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJKnBvcyA9IHNpemUgKyAx Ow0KPiA+ICsJcmV0dXJuIHNpemU7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBzc2l6ZV90 DQo+ID4gK3p5bnFtcF9kcF9kZWJ1Z2ZzX3dyaXRlKHN0cnVjdCBmaWxlICpmLCBjb25zdCBjaGFy IF9fdXNlciAqYnVmLA0KPiA+ICsJCQlzaXplX3Qgc2l6ZSwgbG9mZl90ICpwb3MpDQo+ID4gK3sN Cj4gPiArCWNoYXIgKmtlcm5fYnVmZiwgKmtlcm5fYnVmZl9zdGFydDsNCj4gPiArCWNoYXIgKmRw X3Rlc3RfcmVxOw0KPiA+ICsJaW50IHJldDsNCj4gPiArCWludCBpOw0KPiA+ICsNCj4gPiArCWlm ICgqcG9zICE9IDAgfHwgc2l6ZSA8PSAwKQ0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsN Cj4gPiArCWlmIChkcF9kZWJ1Z2ZzLnRlc3RjYXNlICE9IERQX1RDX05PTkUpDQo+ID4gKwkJcmV0 dXJuIC1FQlVTWTsNCj4gPiArDQo+ID4gKwlrZXJuX2J1ZmYgPSBremFsbG9jKHNpemUsIEdGUF9L RVJORUwpOw0KPiA+ICsJaWYgKCFrZXJuX2J1ZmYpDQo+ID4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ ID4gKwlrZXJuX2J1ZmZfc3RhcnQgPSBrZXJuX2J1ZmY7DQo+ID4gKw0KPiA+ICsJcmV0ID0gc3Ry bmNweV9mcm9tX3VzZXIoa2Vybl9idWZmLCBidWYsIHNpemUpOw0KPiA+ICsJaWYgKHJldCA8IDAp IHsNCj4gPiArCQlrZnJlZShrZXJuX2J1ZmZfc3RhcnQpOw0KPiA+ICsJCXJldHVybiByZXQ7DQo+ ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogUmVhZCB0aGUgdGVzdGNhc2UgbmFtZSBhbmQgYXJndW1l bnQgZnJvbSBhIHVzZXIgcmVxdWVzdCAqLw0KPiA+ICsJZHBfdGVzdF9yZXEgPSBzdHJzZXAoJmtl cm5fYnVmZiwgIiAiKTsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShk ZWJ1Z2ZzX3JlcXMpOyBpKyspIHsNCj4gPiArCQlpZiAoIXN0cmNhc2VjbXAoZHBfdGVzdF9yZXEs IGRlYnVnZnNfcmVxc1tpXS5yZXEpKQ0KPiA+ICsJCQlpZiAoIWRlYnVnZnNfcmVxc1tpXS53cml0 ZV9oYW5kbGVyKCZrZXJuX2J1ZmYpKSB7DQo+ID4gKwkJCQlrZnJlZShrZXJuX2J1ZmZfc3RhcnQp Ow0KPiA+ICsJCQkJcmV0dXJuIHNpemU7DQo+ID4gKwkJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4g KwlrZnJlZShrZXJuX2J1ZmZfc3RhcnQpOw0KPiA+ICsJcmV0dXJuIC1FSU5WQUw7DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfenlu cW1wX2RwX2RiZ2ZzID0gew0KPiA+ICsJLm93bmVyID0gVEhJU19NT0RVTEUsDQo+ID4gKwkucmVh ZCA9IHp5bnFtcF9kcF9kZWJ1Z2ZzX3JlYWQsDQo+ID4gKwkud3JpdGUgPSB6eW5xbXBfZHBfZGVi dWdmc193cml0ZSwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgenlucW1wX2RwX2Rl YnVnZnNfaW5pdChzdHJ1Y3QgenlucW1wX2RwICpkcCkNCj4gPiArew0KPiA+ICsJaW50IGVycjsN Cj4gPiArCXN0cnVjdCBkZW50cnkgKnp5bnFtcF9kcF9kZWJ1Z2ZzX2ZpbGU7DQo+ID4gKw0KPiA+ ICsJZHBfZGVidWdmcy50ZXN0Y2FzZSA9IERQX1RDX05PTkU7DQo+ID4gKwlkcF9kZWJ1Z2ZzLmRw ID0gZHA7DQo+ID4gKw0KPiA+ICsJenlucW1wX2RwX2RlYnVnZnNfZGlyID0gZGVidWdmc19jcmVh dGVfZGlyKCJkcCIsIE5VTEwpOw0KPiA+ICsJaWYgKCF6eW5xbXBfZHBfZGVidWdmc19kaXIpIHsN Cj4gPiArCQlkZXZfZXJyKGRwLT5kZXYsICJkZWJ1Z2ZzX2NyZWF0ZV9kaXIgZmFpbGVkXG4iKTsN Cj4gPiArCQlyZXR1cm4gLUVOT0RFVjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwl6eW5xbXBfZHBf ZGVidWdmc19maWxlID0NCj4gPiArCQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ0ZXN0Y2FzZSIsIDA0 NDQsDQo+IHp5bnFtcF9kcF9kZWJ1Z2ZzX2RpciwNCj4gPiArCQkJCSAgICBOVUxMLCAmZm9wc196 eW5xbXBfZHBfZGJnZnMpOw0KPiA+ICsJaWYgKCF6eW5xbXBfZHBfZGVidWdmc19maWxlKSB7DQo+ ID4gKwkJZGV2X2VycihkcC0+ZGV2LCAiZGVidWdmc19jcmVhdGVfZmlsZSB0ZXN0Y2FzZSBmYWls ZWRcbiIpOw0KPiA+ICsJCWVyciA9IC1FTk9ERVY7DQo+ID4gKwkJZ290byBlcnJfZGJnZnM7DQo+ ID4gKwl9DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArDQo+ID4gK2Vycl9kYmdmczoNCj4gPiArCWRl YnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZSh6eW5xbXBfZHBfZGVidWdmc19kaXIpOw0KPiA+ICsJenlu cW1wX2RwX2RlYnVnZnNfZGlyID0gTlVMTDsNCj4gPiArCXJldHVybiBlcnI7DQo+ID4gK30NCj4g PiArDQo+ID4gK3N0YXRpYyB2b2lkIHp5bnFtcF9kcF9kZWJ1Z2ZzX2V4aXQoc3RydWN0IHp5bnFt cF9kcCAqZHApDQo+ID4gK3sNCj4gPiArCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZSh6eW5xbXBf ZHBfZGVidWdmc19kaXIpOw0KPiA+ICsJenlucW1wX2RwX2RlYnVnZnNfZGlyID0gTlVMTDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgenlucW1wX2RwX2RlYnVnZnNfbW9kZV9jb25m aWcoc3RydWN0IHp5bnFtcF9kcCAqZHApDQo+ID4gK3sNCj4gPiArCWRwLT5tb2RlLmJ3X2NvZGUg PQ0KPiA+ICsJCWRwX2RlYnVnZnMubGlua19yYXRlID8gZHBfZGVidWdmcy5saW5rX3JhdGUgOiBk cC0NCj4gPm1vZGUuYndfY29kZTsNCj4gPiArCWRwLT5tb2RlLmxhbmVfY250ID0NCj4gPiArCQlk cF9kZWJ1Z2ZzLmxhbmVfY250ID8gZHBfZGVidWdmcy5sYW5lX2NudCA6IGRwLQ0KPiA+bW9kZS5s YW5lX2NudDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArI2Vsc2UgLyogRFJNX1pZTlFNUF9EUF9ERUJV R19GUyAqLw0KPiA+ICsNCj4gPiArc3RhdGljIGludCB6eW5xbXBfZHBfZGVidWdmc19pbml0KHN0 cnVjdCB6eW5xbXBfZHAgKmRwKQ0KPiA+ICt7DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIHZvaWQgenlucW1wX2RwX2RlYnVnZnNfZXhpdChzdHJ1Y3QgenlucW1w X2RwICpkcCkNCj4gPiArew0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCB6eW5xbXBf ZHBfZGVidWdmc19tb2RlX2NvbmZpZyhzdHJ1Y3QgenlucW1wX2RwICpkcCkNCj4gPiArew0KPiA+ ICt9DQo+ID4gKw0KPiA+ICsjZW5kaWYgLyogRFJNX1pZTlFNUF9EUF9ERUJVR19GUyAqLw0KPiA+ ICsNCj4gPiArLyoNCj4gPiAgICogSW50ZXJuYWwgZnVuY3Rpb25zOiB1c2VkIGJ5IHp5bnFtcF9k aXNwLmMNCj4gPiAgICovDQo+ID4NCj4gPiBAQCAtNTk3LDYgKzg5OCw3IEBAIHN0YXRpYyBpbnQg enlucW1wX2RwX21vZGVfY29uZmlndXJlKHN0cnVjdA0KPiB6eW5xbXBfZHAgKmRwLCBpbnQgcGNs b2NrLA0KPiA+ICAJCQlkcC0+bW9kZS5id19jb2RlID0gYndzW2ldOw0KPiA+ICAJCQlkcC0+bW9k ZS5sYW5lX2NudCA9IGxhbmVfY250Ow0KPiA+ICAJCQlkcC0+bW9kZS5wY2xvY2sgPSBwY2xvY2s7 DQo+ID4gKwkJCXp5bnFtcF9kcF9kZWJ1Z2ZzX21vZGVfY29uZmlnKGRwKTsNCj4gPiAgCQkJcmV0 dXJuIGRwLT5tb2RlLmJ3X2NvZGU7DQo+ID4gIAkJfQ0KPiA+ICAJfQ0KPiA+IEBAIC0xODQwLDYg KzIxNDIsNyBAQCBpbnQgenlucW1wX2RwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UNCj4g KnBkZXYpDQo+ID4gIAlkcHN1YiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOw0KPiA+ICAJ ZHBzdWItPmRwID0gZHA7DQo+ID4gIAlkcC0+ZHBzdWIgPSBkcHN1YjsNCj4gPiArCXp5bnFtcF9k cF9kZWJ1Z2ZzX2luaXQoZHApOw0KPiA+DQo+ID4gIAlyZXR1cm4gMDsNCj4gPg0KPiA+IEBAIC0x ODU1LDYgKzIxNTgsNyBAQCBpbnQgenlucW1wX2RwX3JlbW92ZShzdHJ1Y3QNCj4gcGxhdGZvcm1f ZGV2aWNlICpwZGV2KQ0KPiA+ICAJc3RydWN0IHp5bnFtcF9kcHN1YiAqZHBzdWIgPSBwbGF0Zm9y bV9nZXRfZHJ2ZGF0YShwZGV2KTsNCj4gPiAgCXN0cnVjdCB6eW5xbXBfZHAgKmRwID0gZHBzdWIt PmRwOw0KPiA+DQo+ID4gKwl6eW5xbXBfZHBfZGVidWdmc19leGl0KGRwKTsNCj4gPiAgCXp5bnFt cF9kcF93cml0ZShkcC0+aW9tZW0sIFpZTlFNUF9EUF9UWF9FTkFCTEUsIDApOw0KPiA+ICAJZHJt X2RwX2F1eF91bnJlZ2lzdGVyKCZkcC0+YXV4KTsNCj4gPiAgCXp5bnFtcF9kcF9leGl0X3BoeShk cCk7DQo+ID4gLS0NCj4gPiAyLjcuNA0KPiA+DQo+ID4gX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18NCj4gPiBkcmktZGV2ZWwgbWFpbGluZyBsaXN0DQo+ID4g ZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZw0KPiA+IGh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsDQo+IA0KPiAtLQ0KPiBEYW5pZWwg VmV0dGVyDQo+IFNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbg0KPiBodHRwOi8v YmxvZy5mZndsbC5jaA0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRl dmVsCg==