From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Kahola, Mika" Subject: Re: [PATCH i-g-t v2] tests/kms_concurrent: Concurrent and interruptible subtests for atomic Date: Tue, 11 Apr 2017 07:42:40 +0000 Message-ID: References: <1489567424-29474-1-git-send-email-mika.kahola@intel.com> <1491826264.9258.66.camel@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7F2D36E43A for ; Tue, 11 Apr 2017 07:42:43 +0000 (UTC) In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Maarten Lankhorst , "intel-gfx@lists.freedesktop.org" List-Id: intel-gfx@lists.freedesktop.org DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTWFhcnRlbiBMYW5raG9y c3QgW21haWx0bzptYWFydGVuLmxhbmtob3JzdEBsaW51eC5pbnRlbC5jb21dDQo+IFNlbnQ6IE1v bmRheSwgQXByaWwgMTAsIDIwMTcgMzozOSBQTQ0KPiBUbzogS2Fob2xhLCBNaWthIDxtaWthLmth aG9sYUBpbnRlbC5jb20+OyBpbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnDQo+IFN1Ympl Y3Q6IFJlOiBbUEFUQ0ggaS1nLXQgdjJdIHRlc3RzL2ttc19jb25jdXJyZW50OiBDb25jdXJyZW50 IGFuZCBpbnRlcnJ1cHRpYmxlDQo+IHN1YnRlc3RzIGZvciBhdG9taWMNCj4gDQo+IE9wIDEwLTA0 LTE3IG9tIDE0OjExIHNjaHJlZWYgTWlrYSBLYWhvbGE6DQo+ID4gT24gV2VkLCAyMDE3LTAzLTI5 IGF0IDExOjUzICswMjAwLCBNYWFydGVuIExhbmtob3JzdCB3cm90ZToNCj4gPj4gT3AgMTUtMDMt MTcgb20gMDk6NDMgc2NocmVlZiBNaWthIEthaG9sYToNCj4gPj4+IFRoaXMgdGVzdCBjYXNlIGlu dHJvZHVjZXMgY29uY3VycmVudGx5IHJ1bm5pbmcgdGVzdCBjYXNlcyBmb3IgYXRvbWljDQo+ID4+ PiBtb2Rlc2V0dGluZy4NCj4gPj4+DQo+ID4+PiBUaGUgZmlyc3QgdGVzdCBvciB0aHJlYWQgZHJh d3MgYmx1ZSBiYWNrcm91bmQgd2l0aCBibGFjayBob2xlcyBvbg0KPiA+Pj4gaXQuDQo+ID4+PiBU aGVzZSBob2xlcyBhcmUgY292ZXJlZCBieSByZWN0YW5ndWxhciwgYmx1ZSBwbGFuZXMgdGhhdCBh cmUgcGxhY2VkDQo+ID4+PiByYW5kb21seSBsaWtlIGluIHRlc3QgY2FzZSAna21zX3BsYW5lX211 bHRpcGxlJy4NCj4gPj4+DQo+ID4+PiBUaGUgc2Vjb25kIHRocmVhZCBjaGFuZ2VzIHJlc29sdXRp b24gZnJvbSBoaWdoZXIgdG8gbG93ZXIgb25lIGFuZA0KPiA+Pj4gYmFjay4NCj4gPj4+IFRoZSBk ZWxheSBiZXR3ZWVuIHJlc29sdXRpb24gY2hhbmdlcyBpcyByYW5kb21seSBzZWxlY3RlZCBiZXR3 ZWVuDQo+ID4+PiAyMCBhbmQNCj4gPj4+IDUwIG1pbGxpc2Vjb25kcy4NCj4gPj4+DQo+ID4+PiBU aGUgdGVzdCBydW5zIGJ5IGRlZmF1bHQgMzIgaXRlcmF0aW9ucyB0byBpbmNyZWFzZSB0aGUgY292 ZXJhZ2UuDQo+ID4+Pg0KPiA+Pj4gdjI6IHVzZSBpZ3RfZm9yayBpbnN0ZWFkIG9mIHB0aHJlYWRz IHRvIGNyZWF0ZSBjb25jdXJyZW50IHRlc3QgcnVucw0KPiA+Pj4gKE1hYXJ0ZW4pDQo+ID4+Pg0K PiA+Pj4gU2lnbmVkLW9mZi1ieTogTWlrYSBLYWhvbGEgPG1pa2Eua2Fob2xhQGludGVsLmNvbT4N Cj4gPj4+IC0tLQ0KPiA+Pj4gIHRlc3RzL01ha2VmaWxlLnNvdXJjZXMgfCAgIDEgKw0KPiA+Pj4g IHRlc3RzL2ttc19jb25jdXJyZW50LmMgfCA2MzANCj4gPj4+ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gPj4+ICAyIGZpbGVzIGNoYW5nZWQsIDYz MSBpbnNlcnRpb25zKCspDQo+ID4+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2ttc19jb25j dXJyZW50LmMNCj4gPj4+DQo+ID4+PiA8c25pcD4NCj4gPj4+ICtzdGF0aWMgaW50DQo+ID4+PiAr ZGlzcGxheV9jb21taXRfbW9kZShkYXRhX3QgKmRhdGEsIGlndF9jcmNfdCAqY3JjKSB7DQo+ID4+ PiArCWNoYXIgYnVmWzI1Nl07DQo+ID4+PiArCXN0cnVjdCBkcm1fZXZlbnQgKmUgPSAodm9pZCAq KWJ1ZjsNCj4gPj4+ICsJaW50IG4sIHJldDsNCj4gPj4+ICsJaW50IGZsYWdzID0gRFJNX01PREVf UEFHRV9GTElQX0VWRU5UIHwNCj4gPj4+IERSTV9NT0RFX0FUT01JQ19BTExPV19NT0RFU0VUIHwN Cj4gRFJNX01PREVfQVRPTUlDX05PTkJMT0NLOw0KPiA+Pj4gKw0KPiA+Pj4gKwlyZXQgPSBpZ3Rf ZGlzcGxheV90cnlfY29tbWl0X2F0b21pYygmZGF0YS0+ZGlzcGxheSwNCj4gPj4+ICsJCQkJCSAg ICBmbGFncywNCj4gPj4+ICsJCQkJCSAgICBOVUxMKTsNCj4gPj4+ICsJaWd0X3NraXBfb24ocmV0 ICE9IDApOw0KPiA+Pj4gKw0KPiA+Pj4gKwlpZ3Rfc2V0X3RpbWVvdXQoMSwgIlN0dWNrIG9uIHBh Z2UgZmxpcCIpOw0KPiA+Pj4gKwlyZXQgPSByZWFkKGRhdGEtPmRpc3BsYXkuZHJtX2ZkLCBidWYs IHNpemVvZihidWYpKTsNCj4gPj4+ICsJaWd0X2Fzc2VydChyZXQgPj0gMCk7DQo+ID4+PiArDQo+ ID4+PiArCWlndF9hc3NlcnRfZXEoZS0+dHlwZSwgRFJNX0VWRU5UX0ZMSVBfQ09NUExFVEUpOw0K PiA+Pj4gKwlpZ3RfcmVzZXRfdGltZW91dCgpOw0KPiA+Pj4gKw0KPiA+Pj4gKwlyZXR1cm4gbjsN Cj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+PiArc3RhdGljIHZvaWQNCj4gPj4+ICt0ZXN0X2dyYWJf Y3JjKGRhdGFfdCAqZGF0YSwgY29sb3JfdCAqY29sb3IsIGlndF9jcmNfdCAqY3JjIC8qIG91dA0K PiA+Pj4gKi8pDQo+ID4+PiArew0KPiA+Pj4gKwlkcm1Nb2RlTW9kZUluZm8gKm1vZGU7DQo+ID4+ PiArCWlndF9wbGFuZV90ICpwcmltYXJ5Ow0KPiA+Pj4gKwlpbnQgcmV0Ow0KPiA+Pj4gKw0KPiA+ Pj4gKwlpZ3Rfb3V0cHV0X3NldF9waXBlKGRhdGEtPm91dHB1dCwgZGF0YS0+cGlwZSk7DQo+ID4+ PiArDQo+ID4+PiArCXByaW1hcnkgPSBpZ3Rfb3V0cHV0X2dldF9wbGFuZV90eXBlKGRhdGEtPm91 dHB1dCwNCj4gPj4+IERSTV9QTEFORV9UWVBFX1BSSU1BUlkpOw0KPiA+Pj4gKwlkYXRhLT5wbGFu ZVtwcmltYXJ5LT5pbmRleF0gPSBwcmltYXJ5Ow0KPiA+Pj4gKw0KPiA+Pj4gKwltb2RlID0gaWd0 X291dHB1dF9nZXRfbW9kZShkYXRhLT5vdXRwdXQpOw0KPiA+Pj4gKw0KPiA+Pj4gKwlpZ3RfY3Jl YXRlX2NvbG9yX2ZiKGRhdGEtPmRybV9mZCwgbW9kZS0+aGRpc3BsYXksIG1vZGUtDQo+ID4+Pj4g dmRpc3BsYXksDQo+ID4+PiArCQkJICAgIERSTV9GT1JNQVRfWFJHQjg4ODgsDQo+ID4+PiArCQkJ ICAgIExPQ0FMX0k5MTVfRk9STUFUX01PRF9YX1RJTEVELA0KPiA+Pj4gKwkJCSAgICBjb2xvci0+ cmVkLCBjb2xvci0+Z3JlZW4sIGNvbG9yLT5ibHVlLA0KPiA+Pj4gKwkJCSAgICAmZGF0YS0+ZmJb cHJpbWFyeS0+aW5kZXhdKTsNCj4gPj4+ICsNCj4gPj4+ICsJaWd0X3BsYW5lX3NldF9mYihkYXRh LT5wbGFuZVtwcmltYXJ5LT5pbmRleF0sICZkYXRhLQ0KPiA+Pj4+IGZiW3ByaW1hcnktPmluZGV4 XSk7DQo+ID4+PiArDQo+ID4+PiArCXJldCA9IGlndF9kaXNwbGF5X3RyeV9jb21taXQyKCZkYXRh LT5kaXNwbGF5LA0KPiA+Pj4gQ09NTUlUX0FUT01JQyk7DQo+ID4+PiArCWlndF9za2lwX29uKHJl dCAhPSAwKTsNCj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+PiArLyoNCj4gPj4+ICsgKiBNdWx0aXBs ZSBwbGFuZSBwb3NpdGlvbiB0ZXN0Lg0KPiA+Pj4gKyAqICAgLSBXZSBzdGFydCBieSBncmFiYmlu ZyBhIHJlZmVyZW5jZSBDUkMgb2YgYSBmdWxsIGJsdWUgZmINCj4gPj4+IGJlaW5nIHNjYW5uZWQN Cj4gPj4+ICsgKiAgICAgb3V0IG9uIHRoZSBwcmltYXJ5IHBsYW5lDQo+ID4+PiArICogICAtIFRo ZW4gd2Ugc2Nhbm5vdXQgbnVtYmVyIG9mIHBsYW5lczoNCj4gPj4+ICsgKiAgICAgICogdGhlIHBy aW1hcnkgcGxhbmUgdXNlcyBhIGJsdWUgZmIgd2l0aCBhIGJsYWNrIHJlY3RhbmdsZQ0KPiA+Pj4g aG9sZQ0KPiA+Pj4gKyAqICAgICAgKiBwbGFuZXMsIG9uIHRvcCBvZiB0aGUgcHJpbWFyeSBwbGFu ZSwgd2l0aCBhIGJsdWUgZmIgdGhhdA0KPiA+Pj4gaXMgc2V0LXVwDQo+ID4+PiArICogICAgICAg IHRvIGNvdmVyIHRoZSBibGFjayByZWN0YW5nbGVzIG9mIHRoZSBwcmltYXJ5IHBsYW5lIGZiDQo+ ID4+PiArICogICAgIFRoZSByZXN1bHRpbmcgQ1JDIHNob3VsZCBiZSBpZGVudGljYWwgdG8gdGhl IHJlZmVyZW5jZSBDUkMNCj4gPj4+ICsgKi8NCj4gPj4+ICsNCj4gPj4+ICtzdGF0aWMgdm9pZA0K PiA+Pj4gK2NyZWF0ZV9mYl9mb3JfbW9kZV9wb3NpdGlvbihkYXRhX3QgKmRhdGEsIGRybU1vZGVN b2RlSW5mbyAqbW9kZSwNCj4gPj4+ICsJCQkgICAgY29sb3JfdCAqY29sb3IsIGludCAqcmVjdF94 LCBpbnQNCj4gPj4+ICpyZWN0X3ksDQo+ID4+PiArCQkJICAgIGludCAqcmVjdF93LCBpbnQgKnJl Y3RfaCwgdWludDY0X3QNCj4gPj4+IHRpbGluZywNCj4gPj4+ICsJCQkgICAgaW50IG1heF9wbGFu ZXMpDQo+ID4+PiArew0KPiA+Pj4gKwl1bnNpZ25lZCBpbnQgZmJfaWQ7DQo+ID4+PiArCWNhaXJv X3QgKmNyOw0KPiA+Pj4gKwlpZ3RfcGxhbmVfdCAqcHJpbWFyeTsNCj4gPj4+ICsNCj4gPj4+ICsJ cHJpbWFyeSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lX3R5cGUoZGF0YS0+b3V0cHV0LA0KPiA+Pj4g RFJNX1BMQU5FX1RZUEVfUFJJTUFSWSk7DQo+ID4+PiArDQo+ID4+PiArCWZiX2lkID0gaWd0X2Ny ZWF0ZV9mYihkYXRhLT5kcm1fZmQsDQo+ID4+PiArCQkJICAgICAgbW9kZS0+aGRpc3BsYXksIG1v ZGUtPnZkaXNwbGF5LA0KPiA+Pj4gKwkJCSAgICAgIERSTV9GT1JNQVRfWFJHQjg4ODgsDQo+ID4+ PiArCQkJICAgICAgdGlsaW5nLA0KPiA+Pj4gKwkJCSAgICAgICZkYXRhLT5mYltwcmltYXJ5LT5p bmRleF0pOw0KPiA+Pj4gKwlpZ3RfYXNzZXJ0KGZiX2lkKTsNCj4gPj4+ICsNCj4gPj4+ICsJY3Ig PSBpZ3RfZ2V0X2NhaXJvX2N0eChkYXRhLT5kcm1fZmQsICZkYXRhLT5mYltwcmltYXJ5LQ0KPiA+ Pj4+IGluZGV4XSk7DQo+ID4+PiArCWlndF9wYWludF9jb2xvcihjciwgcmVjdF94WzBdLCByZWN0 X3lbMF0sDQo+ID4+PiArCQkJbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5LA0KPiA+Pj4g KwkJCWNvbG9yLT5yZWQsIGNvbG9yLT5ncmVlbiwgY29sb3ItPmJsdWUpOw0KPiA+Pj4gKw0KPiA+ Pj4gKwlmb3IgKGludCBpID0gMDsgaSA8IG1heF9wbGFuZXM7IGkrKykgew0KPiA+Pj4gKwkJaWYg KGRhdGEtPnBsYW5lW2ldLT50eXBlID09DQo+ID4+PiBEUk1fUExBTkVfVFlQRV9QUklNQVJZKQ0K PiA+Pj4gKwkJCWNvbnRpbnVlOw0KPiA+Pj4gKwkJaWd0X3BhaW50X2NvbG9yKGNyLCByZWN0X3hb aV0sIHJlY3RfeVtpXSwNCj4gPj4+ICsJCQkJcmVjdF93W2ldLCByZWN0X2hbaV0sIDAuMCwgMC4w LA0KPiA+Pj4gMC4wKTsNCj4gPj4+ICsJfQ0KPiA+Pj4gKw0KPiA+Pj4gKwlpZ3RfYXNzZXJ0KGNh aXJvX3N0YXR1cyhjcikgPT0gMCk7DQo+ID4+PiArCWNhaXJvX2Rlc3Ryb3koY3IpOw0KPiA+Pj4g K30NCj4gPj4+ICsNCj4gPj4+ICtzdGF0aWMgdm9pZA0KPiA+Pj4gK3ByZXBhcmVfcGxhbmVzKGRh dGFfdCAqZGF0YSwgY29sb3JfdCAqY29sb3IsIGludCBtYXhfcGxhbmVzKSB7DQo+ID4+PiArCWRy bU1vZGVNb2RlSW5mbyAqbW9kZTsNCj4gPj4+ICsJaWd0X3BpcGVfdCAqcGlwZTsNCj4gPj4+ICsJ aWd0X3BsYW5lX3QgKnByaW1hcnk7DQo+ID4+PiArCWludCAqeDsNCj4gPj4+ICsJaW50ICp5Ow0K PiA+Pj4gKwlpbnQgKnNpemU7DQo+ID4+PiArCWludCBpOw0KPiA+Pj4gKw0KPiA+Pj4gKwlpZ3Rf b3V0cHV0X3NldF9waXBlKGRhdGEtPm91dHB1dCwgZGF0YS0+cGlwZSk7DQo+ID4+PiArCXByaW1h cnkgPSBpZ3Rfb3V0cHV0X2dldF9wbGFuZV90eXBlKGRhdGEtPm91dHB1dCwNCj4gPj4+IERSTV9Q TEFORV9UWVBFX1BSSU1BUlkpOw0KPiA+Pj4gKwlwaXBlID0gcHJpbWFyeS0+cGlwZTsNCj4gPj4+ ICsNCj4gPj4+ICsJeCA9IG1hbGxvYyhwaXBlLT5uX3BsYW5lcyAqIHNpemVvZigqeCkpOw0KPiA+ Pj4gKwlpZ3RfYXNzZXJ0X2YoeCwgIkZhaWxlZCB0byBhbGxvY2F0ZSAlbGQgYnl0ZXMgZm9yIHZh cmlhYmxlDQo+ID4+PiB4XG4iLCAobG9uZyBpbnQpIChwaXBlLT5uX3BsYW5lcyAqIHNpemVvZigq eCkpKTsNCj4gPj4+ICsJeSA9IG1hbGxvYyhwaXBlLT5uX3BsYW5lcyAqIHNpemVvZigqeSkpOw0K PiA+Pj4gKwlpZ3RfYXNzZXJ0X2YoeSwgIkZhaWxlZCB0byBhbGxvY2F0ZSAlbGQgYnl0ZXMgZm9y IHZhcmlhYmxlDQo+ID4+PiB5XG4iLCAobG9uZyBpbnQpIChwaXBlLT5uX3BsYW5lcyAqIHNpemVv ZigqeSkpKTsNCj4gPj4+ICsJc2l6ZSA9IG1hbGxvYyhwaXBlLT5uX3BsYW5lcyAqIHNpemVvZigq c2l6ZSkpOw0KPiA+Pj4gKwlpZ3RfYXNzZXJ0X2Yoc2l6ZSwgIkZhaWxlZCB0byBhbGxvY2F0ZSAl bGQgYnl0ZXMgZm9yDQo+ID4+PiB2YXJpYWJsZSBzaXplXG4iLCAobG9uZyBpbnQpIChwaXBlLT5u X3BsYW5lcyAqIHNpemVvZigqc2l6ZSkpKTsNCj4gPj4+ICsNCj4gPj4+ICsJbW9kZSA9IGlndF9v dXRwdXRfZ2V0X21vZGUoZGF0YS0+b3V0cHV0KTsNCj4gPj4+ICsNCj4gPj4+ICsJLyogcGxhbmVz IHdpdGggcmFuZG9tIHBvc2l0aW9ucyAqLw0KPiA+Pj4gKwl4W3ByaW1hcnktPmluZGV4XSA9IDA7 DQo+ID4+PiArCXlbcHJpbWFyeS0+aW5kZXhdID0gMDsNCj4gPj4+ICsJZm9yIChpID0gMDsgaSA8 IG1heF9wbGFuZXM7IGkrKykgew0KPiA+Pj4gKwkJaWd0X3BsYW5lX3QgKnBsYW5lID0gaWd0X291 dHB1dF9nZXRfcGxhbmUoZGF0YS0NCj4gPj4+PiBvdXRwdXQsIGkpOw0KPiA+Pj4gKw0KPiA+Pj4g KwkJaWYgKHBsYW5lLT50eXBlID09IERSTV9QTEFORV9UWVBFX1BSSU1BUlkpDQo+ID4+PiArCQkJ Y29udGludWU7DQo+ID4+PiArCQllbHNlIGlmIChwbGFuZS0+dHlwZSA9PSBEUk1fUExBTkVfVFlQ RV9DVVJTT1IpDQo+ID4+PiArCQkJc2l6ZVtpXSA9IFNJWkVfQ1VSU09SOw0KPiA+Pj4gKwkJZWxz ZQ0KPiA+Pj4gKwkJCXNpemVbaV0gPSBTSVpFX1BMQU5FOw0KPiA+Pj4gKw0KPiA+Pj4gKwkJeFtp XSA9IHJhbmQoKSAlIChtb2RlLT5oZGlzcGxheSAtIHNpemVbaV0pOw0KPiA+Pj4gKwkJeVtpXSA9 IHJhbmQoKSAlIChtb2RlLT52ZGlzcGxheSAtIHNpemVbaV0pOw0KPiA+Pj4gKw0KPiA+Pj4gKwkJ ZGF0YS0+cGxhbmVbaV0gPSBwbGFuZTsNCj4gPj4+ICsNCj4gPj4+ICsJCWlndF9jcmVhdGVfY29s b3JfZmIoZGF0YS0+ZHJtX2ZkLA0KPiA+Pj4gKwkJCQkgICAgc2l6ZVtpXSwgc2l6ZVtpXSwNCj4g Pj4+ICsJCQkJICAgIGRhdGEtPnBsYW5lW2ldLT50eXBlID09DQo+ID4+PiBEUk1fUExBTkVfVFlQ RV9DVVJTT1IgPyBEUk1fRk9STUFUX0FSR0I4ODg4IDoNCj4gRFJNX0ZPUk1BVF9YUkdCODg4OCwN Cj4gPj4+ICsJCQkJICAgIGRhdGEtPnBsYW5lW2ldLT50eXBlID09DQo+ID4+PiBEUk1fUExBTkVf VFlQRV9DVVJTT1IgPyBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FIDoNCj4gPj4+IExPQ0FMX0k5 MTVfRk9STUFUX01PRF9YX1RJTEVELA0KPiA+Pj4gKwkJCQkgICAgY29sb3ItPnJlZCwgY29sb3It PmdyZWVuLA0KPiA+Pj4gY29sb3ItPmJsdWUsDQo+ID4+PiArCQkJCSAgICAmZGF0YS0+ZmJbaV0p Ow0KPiA+Pj4gKw0KPiA+Pj4gKwkJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihkYXRhLT5wbGFuZVtp XSwgeFtpXSwNCj4gPj4+IHlbaV0pOw0KPiA+Pj4gKwkJaWd0X3BsYW5lX3NldF9mYihkYXRhLT5w bGFuZVtpXSwgJmRhdGEtPmZiW2ldKTsNCj4gPj4+ICsJfQ0KPiA+Pj4gKw0KPiA+Pj4gKwkvKiBw cmltYXJ5IHBsYW5lICovDQo+ID4+PiArCWRhdGEtPnBsYW5lW3ByaW1hcnktPmluZGV4XSA9IHBy aW1hcnk7DQo+ID4+PiArCWNyZWF0ZV9mYl9mb3JfbW9kZV9wb3NpdGlvbihkYXRhLCBtb2RlLCBj b2xvciwgeCwgeSwgc2l6ZSwNCj4gPj4+IHNpemUsDQo+ID4+PiArCQkJCSAgICBMT0NBTF9JOTE1 X0ZPUk1BVF9NT0RfWF9USUxFRCwNCj4gPj4+IG1heF9wbGFuZXMpOw0KPiA+Pj4gKwlpZ3RfcGxh bmVfc2V0X2ZiKGRhdGEtPnBsYW5lW3ByaW1hcnktPmluZGV4XSwgJmRhdGEtDQo+ID4+Pj4gZmJb cHJpbWFyeS0+aW5kZXhdKTsNCj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+PiArc3RhdGljIHZvaWQN Cj4gPj4+ICt0ZXN0X3BsYW5lX3Bvc2l0aW9uX3dpdGhfb3V0cHV0KGRhdGFfdCAqZGF0YSkgew0K PiA+Pj4gKwlpZ3RfY3JjX3QgKmNyYzsNCj4gPj4+ICsJY29sb3JfdCBibHVlICA9IHsgMC4wZiwg MC4wZiwgMS4wZiB9Ow0KPiA+Pj4gKwlpbnQgaTsNCj4gPj4+ICsJaW50IGl0ZXJhdGlvbnMgPSBv cHQuaXRlcmF0aW9ucyA8IDEgPyAxIDogb3B0Lml0ZXJhdGlvbnM7DQo+ID4+PiArCWJvb2wgbG9v cF9mb3JldmVyOw0KPiA+Pj4gKwljaGFyIGluZm9bMjU2XTsNCj4gPj4+ICsJaW50IG1heF9wbGFu ZXMgPSBkYXRhLT5kaXNwbGF5LnBpcGVzW2RhdGEtPnBpcGVdLm5fcGxhbmVzOw0KPiA+Pj4gKw0K PiA+Pj4gKwlpZiAob3B0Lml0ZXJhdGlvbnMgPT0gTE9PUF9GT1JFVkVSKSB7DQo+ID4+PiArCQls b29wX2ZvcmV2ZXIgPSB0cnVlOw0KPiA+Pj4gKwkJc3ByaW50ZihpbmZvLCAiZm9yZXZlciIpOw0K PiA+Pj4gKwl9IGVsc2Ugew0KPiA+Pj4gKwkJbG9vcF9mb3JldmVyID0gZmFsc2U7DQo+ID4+PiAr CQlzcHJpbnRmKGluZm8sICJmb3IgJWQgJXMiLA0KPiA+Pj4gKwkJCWl0ZXJhdGlvbnMsIGl0ZXJh dGlvbnMgPiAxID8gIml0ZXJhdGlvbnMiDQo+ID4+PiA6ICJpdGVyYXRpb24iKTsNCj4gPj4+ICsJ fQ0KPiA+Pj4gKw0KPiA+Pj4gKwlpZ3RfaW5mbygiVGVzdGluZyBjb25uZWN0b3IgJXMgdXNpbmcg cGlwZSAlcyB3aXRoICVkDQo+ID4+PiBwbGFuZXMgJXMgd2l0aCBzZWVkICVkXG4iLA0KPiA+Pj4g KwkJIGlndF9vdXRwdXRfbmFtZShkYXRhLT5vdXRwdXQpLA0KPiA+Pj4ga21zdGVzdF9waXBlX25h bWUoZGF0YS0+cGlwZSksIG1heF9wbGFuZXMsDQo+ID4+PiArCQkgaW5mbywgb3B0LnNlZWQpOw0K PiA+Pj4gKw0KPiA+Pj4gKwlpID0gMDsNCj4gPj4+ICsJd2hpbGUgKGkgPCBpdGVyYXRpb25zIHx8 IGxvb3BfZm9yZXZlcikgew0KPiA+Pj4gKwkJcHJlcGFyZV9wbGFuZXMoZGF0YSwgJmJsdWUsIG1h eF9wbGFuZXMpOw0KPiA+Pj4gKw0KPiA+Pj4gKwkJZGlzcGxheV9jb21taXRfbW9kZShkYXRhLCBj cmMpOw0KPiA+Pj4gKw0KPiA+Pj4gKwkJaSsrOw0KPiA+Pj4gKwl9DQo+ID4+PiArfQ0KPiA+Pj4g Kw0KPiA+Pj4gK3N0YXRpYyBkcm1Nb2RlQ29ubmVjdG9yICoNCj4gPj4+ICtnZXRfY29ubmVjdG9y X2Nvbm5lY3RlZChpbnQgZHJtX2ZkKSB7DQo+ID4+PiArCWRybU1vZGVSZXMgKnJlc291cmNlcyA9 IGRybU1vZGVHZXRSZXNvdXJjZXMoZHJtX2ZkKTsNCj4gPj4+ICsJZHJtTW9kZUNvbm5lY3RvciAq Y29ubmVjdG9yOw0KPiA+Pj4gKwlpbnQgaTsNCj4gPj4+ICsNCj4gPj4+ICsJZm9yIChpID0gMDsg aSA8IHJlc291cmNlcy0+Y291bnRfY29ubmVjdG9yczsgaSsrKSB7DQo+ID4+PiArCQljb25uZWN0 b3IgPSBkcm1Nb2RlR2V0Q29ubmVjdG9yKGRybV9mZCwNCj4gPj4+ICsJCQkJCQlyZXNvdXJjZXMt DQo+ID4+Pj4gY29ubmVjdG9yc1tpXSk7DQo+ID4+PiArDQo+ID4+PiArCQlpZiAoY29ubmVjdG9y LT5jb25uZWN0aW9uID09IERSTV9NT0RFX0NPTk5FQ1RFRCkNCj4gPj4+ICsJCQlicmVhazsNCj4g Pj4+ICsNCj4gPj4+ICsJCWRybU1vZGVGcmVlQ29ubmVjdG9yKGNvbm5lY3Rvcik7DQo+ID4+PiAr CQljb25uZWN0b3IgPSBOVUxMOw0KPiA+Pj4gKwl9DQo+ID4+PiArDQo+ID4+PiArCWRybU1vZGVG cmVlUmVzb3VyY2VzKHJlc291cmNlcyk7DQo+ID4+PiArDQo+ID4+PiArCXJldHVybiBjb25uZWN0 b3I7DQo+ID4+PiArfQ0KPiA+Pj4gKw0KPiA+Pj4gK3N0YXRpYyBpbnQgZ2V0X2NydGNfZm9yX2Vu Y29kZXIoZHJtTW9kZVJlcyAqcmVzb3VyY2VzLA0KPiA+Pj4gKwkJCQlkcm1Nb2RlRW5jb2RlciAq ZW5jb2RlcikNCj4gPj4+ICt7DQo+ID4+PiArCWludCBtYXNrLCBpZDsNCj4gPj4+ICsJaW50IGk7 DQo+ID4+PiArCWJvb2wgZm91bmQ7DQo+ID4+PiArDQo+ID4+PiArCWZvciAoaSA9IDA7IGkgPCBy ZXNvdXJjZXMtPmNvdW50X2NydGNzOyBpKyspIHsNCj4gPj4+ICsJCW1hc2sgPSAxIDw8IGk7DQo+ ID4+PiArCQlpZCA9IHJlc291cmNlcy0+Y3J0Y3NbaV07DQo+ID4+PiArDQo+ID4+PiArCQlmb3Vu ZCA9IGVuY29kZXItPnBvc3NpYmxlX2NydGNzICYgbWFzazsNCj4gPj4+ICsJCWlmIChmb3VuZCkN Cj4gPj4+ICsJCQlicmVhazsNCj4gPj4+ICsJfQ0KPiA+Pj4gKw0KPiA+Pj4gKwlpZiAoIWZvdW5k KQ0KPiA+Pj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4+PiArDQo+ID4+PiArCXJldHVybiBpZDsN Cj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+PiArc3RhdGljIGludCBnZXRfY3J0Y19mb3JfY29ubmVj dG9yKGludCBkcm1fZmQsIGRybU1vZGVSZXMNCj4gPj4+ICpyZXNvdXJjZXMsDQo+ID4+PiArCQkJ CSAgZHJtTW9kZUNvbm5lY3RvciAqY29ubmVjdG9yKQ0KPiA+Pj4gK3sNCj4gPj4+ICsJZHJtTW9k ZUVuY29kZXIgKmVuY29kZXI7DQo+ID4+PiArCWludCBlbmNvZGVyX2lkOw0KPiA+Pj4gKwlpbnQg Y3J0Y19pZDsNCj4gPj4+ICsJaW50IGk7DQo+ID4+PiArDQo+ID4+PiArCWZvciAoaSA9IDA7IGkg PCBjb25uZWN0b3ItPmNvdW50X2VuY29kZXJzOyBpKyspIHsNCj4gPj4+ICsJCWVuY29kZXJfaWQg PSBjb25uZWN0b3ItPmVuY29kZXJzW2ldOw0KPiA+Pj4gKwkJZW5jb2RlciA9IGRybU1vZGVHZXRF bmNvZGVyKGRybV9mZCwgZW5jb2Rlcl9pZCk7DQo+ID4+PiArDQo+ID4+PiArCQlpZiAoZW5jb2Rl cikgew0KPiA+Pj4gKwkJCWNydGNfaWQgPSBnZXRfY3J0Y19mb3JfZW5jb2RlcihyZXNvdXJjZXMs DQo+ID4+PiBlbmNvZGVyKTsNCj4gPj4+ICsNCj4gPj4+ICsJCQlkcm1Nb2RlRnJlZUVuY29kZXIo ZW5jb2Rlcik7DQo+ID4+PiArDQo+ID4+PiArCQkJaWYgKGNydGNfaWQgIT0gMCkNCj4gPj4+ICsJ CQkJYnJlYWs7DQo+ID4+PiArCQl9DQo+ID4+PiArCX0NCj4gPj4+ICsNCj4gPj4+ICsJaWYgKGNy dGNfaWQgPT0gMCkNCj4gPj4+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+Pj4gKw0KPiA+Pj4gKwly ZXR1cm4gY3J0Y19pZDsNCj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+PiArc3RhdGljIGludCBnZXRf Y3J0YyhpbnQgZHJtX2ZkKQ0KPiA+Pj4gK3sNCj4gPj4+ICsJZHJtTW9kZVJlcyAqcmVzb3VyY2Vz Ow0KPiA+Pj4gKwlkcm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0b3I7DQo+ID4+PiArCWRybU1vZGVF bmNvZGVyICplbmNvZGVyOw0KPiA+Pj4gKwlpbnQgaSwgaWQ7DQo+ID4+PiArDQo+ID4+PiArCXJl c291cmNlcyA9IGRybU1vZGVHZXRSZXNvdXJjZXMoZHJtX2ZkKTsNCj4gPj4+ICsJY29ubmVjdG9y ID0gZ2V0X2Nvbm5lY3Rvcl9jb25uZWN0ZWQoZHJtX2ZkKTsNCj4gPj4+ICsNCj4gPj4+ICsJZm9y IChpID0gMDsgaSA8IHJlc291cmNlcy0+Y291bnRfZW5jb2RlcnM7IGkrKykgew0KPiA+Pj4gKwkJ ZW5jb2RlciA9IGRybU1vZGVHZXRFbmNvZGVyKGRybV9mZCwgcmVzb3VyY2VzLQ0KPiA+Pj4+IGVu Y29kZXJzW2ldKTsNCj4gPj4+ICsNCj4gPj4+ICsJCWlmIChlbmNvZGVyLT5lbmNvZGVyX2lkID09 IGNvbm5lY3Rvci0+ZW5jb2Rlcl9pZCkNCj4gPj4+ICsJCQlicmVhazsNCj4gPj4+ICsNCj4gPj4+ ICsJCWRybU1vZGVGcmVlRW5jb2RlcihlbmNvZGVyKTsNCj4gPj4+ICsJCWVuY29kZXIgPSBOVUxM Ow0KPiA+Pj4gKwl9DQo+ID4+PiArDQo+ID4+PiArCWlmIChlbmNvZGVyKQ0KPiA+Pj4gKwkJcmV0 dXJuIGVuY29kZXItPmNydGNfaWQ7DQo+ID4+PiArDQo+ID4+PiArCWlkID0gZ2V0X2NydGNfZm9y X2Nvbm5lY3Rvcihkcm1fZmQsIHJlc291cmNlcywgY29ubmVjdG9yKTsNCj4gPj4+ICsJaWd0X2Fz c2VydChpZCAhPSAwKTsNCj4gPj4+ICsNCj4gPj4+ICsJcmV0dXJuIGlkOw0KPiA+Pj4gK30NCj4g Pj4+ICsNCj4gPj4+ICtzdGF0aWMgZHJtTW9kZU1vZGVJbmZvICoNCj4gPj4+ICtnZXRfbG93cmVz X21vZGUoZGF0YV90ICpkYXRhLCBkcm1Nb2RlTW9kZUluZm8gKm1vZGVfZGVmYXVsdCkgew0KPiA+ Pj4gKwlkcm1Nb2RlUmVzICpyZXNvdXJjZXMgPSBkcm1Nb2RlR2V0UmVzb3VyY2VzKGRhdGEtPmRy bV9mZCk7DQo+ID4+PiArCWRybU1vZGVNb2RlSW5mbyBzdGRfMTAyNF9tb2RlID0gew0KPiA+Pj4g KwkJLmNsb2NrID0gNjUwMDAsDQo+ID4+PiArCQkuaGRpc3BsYXkgPSAxMDI0LA0KPiA+Pj4gKwkJ LmhzeW5jX3N0YXJ0ID0gMTA0OCwNCj4gPj4+ICsJCS5oc3luY19lbmQgPSAxMTg0LA0KPiA+Pj4g KwkJLmh0b3RhbCA9IDEzNDQsDQo+ID4+PiArCQkuaHNrZXcgPSAwLA0KPiA+Pj4gKwkJLnZkaXNw bGF5ID0gNzY4LA0KPiA+Pj4gKwkJLnZzeW5jX3N0YXJ0ID0gNzcxLA0KPiA+Pj4gKwkJLnZzeW5j X2VuZCA9IDc3NywNCj4gPj4+ICsJCS52dG90YWwgPSA4MDYsDQo+ID4+PiArCQkudnNjYW4gPSAw LA0KPiA+Pj4gKwkJLnZyZWZyZXNoID0gNjAsDQo+ID4+PiArCQkuZmxhZ3MgPSAweEEsDQo+ID4+ PiArCQkudHlwZSA9IDB4NDAsDQo+ID4+PiArCQkubmFtZSA9ICJDdXN0b20gMTAyNHg3NjgiLA0K PiA+Pj4gKwl9Ow0KPiA+Pj4gKwlkcm1Nb2RlTW9kZUluZm8gKm1vZGU7DQo+ID4+PiArCWRybU1v ZGVDb25uZWN0b3IgKmNvbm5lY3RvcjsNCj4gPj4+ICsJYm9vbCBmb3VuZDsNCj4gPj4+ICsJaW50 IGxpbWl0ID0gbW9kZV9kZWZhdWx0LT52ZGlzcGxheS1TSVpFX1BMQU5FOw0KPiA+Pj4gKwlpbnQg aSwgajsNCj4gPj4+ICsNCj4gPj4+ICsJaWYgKCFyZXNvdXJjZXMpIHsNCj4gPj4+ICsJCWlndF93 YXJuKCJkcm1Nb2RlR2V0UmVzb3VyY2VzIGZhaWxlZDogJXNcbiIsDQo+ID4+PiBzdHJlcnJvcihl cnJubykpOw0KPiA+Pj4gKwkJcmV0dXJuIG1vZGU7DQo+ID4+PiArCX0NCj4gPj4+ICsNCj4gPj4+ ICsJZm91bmQgPSBmYWxzZTsNCj4gPj4+ICsJZm9yIChpID0gMDsgaSA8IHJlc291cmNlcy0+Y291 bnRfY29ubmVjdG9yczsgaSsrKSB7DQo+ID4+PiArDQo+ID4+PiArCQljb25uZWN0b3IgPSBkcm1N b2RlR2V0Q29ubmVjdG9yQ3VycmVudChkYXRhLQ0KPiA+Pj4+IGRybV9mZCwNCj4gPj4+ICsJCQkJ CQkgICAgICAgcmVzb3VyY2VzLQ0KPiA+Pj4+IGNvbm5lY3RvcnNbaV0pOw0KPiA+Pj4gKw0KPiA+ Pj4gKwkJaWYgKCFjb25uZWN0b3IpIHsNCj4gPj4+ICsJCQlpZ3Rfd2FybigiY291bGQgbm90IGdl dCBjb25uZWN0b3IgJWk6DQo+ID4+PiAlc1xuIiwNCj4gPj4+ICsJCQkJIHJlc291cmNlcy0+Y29u bmVjdG9yc1tpXSwNCj4gPj4+IHN0cmVycm9yKGVycm5vKSk7DQo+ID4+PiArCQkJY29udGludWU7 DQo+ID4+PiArCQl9DQo+ID4+PiArDQo+ID4+PiArCQlpZiAoIWNvbm5lY3Rvci0+Y291bnRfbW9k ZXMpDQo+ID4+PiArCQkJY29udGludWU7DQo+ID4+PiArDQo+ID4+PiArCQlmb3IgKGogPSAwOyBq IDwgY29ubmVjdG9yLT5jb3VudF9tb2RlczsgaisrKSB7DQo+ID4+PiArCQkJbW9kZSA9ICZjb25u ZWN0b3ItPm1vZGVzW2pdOw0KPiA+Pj4gKw0KPiA+Pj4gKwkJCWlmIChtb2RlLT52ZGlzcGxheSA8 IGxpbWl0KSB7DQo+ID4+PiArCQkJCWZvdW5kID0gdHJ1ZTsNCj4gPj4+ICsJCQkJYnJlYWs7DQo+ ID4+PiArCQkJfQ0KPiA+Pj4gKwkJfQ0KPiA+Pj4gKw0KPiA+Pj4gKwkJZHJtTW9kZUZyZWVDb25u ZWN0b3IoY29ubmVjdG9yKTsNCj4gPj4+ICsJfQ0KPiA+Pj4gKw0KPiA+Pj4gKwlkcm1Nb2RlRnJl ZVJlc291cmNlcyhyZXNvdXJjZXMpOw0KPiA+Pj4gKw0KPiA+Pj4gKwlpZiAoIWZvdW5kKQ0KPiA+ Pj4gKwkJbW9kZSA9ICZzdGRfMTAyNF9tb2RlOw0KPiA+Pj4gKw0KPiA+Pj4gKwlyZXR1cm4gbW9k ZTsNCj4gPj4+ICt9DQo+ID4+IFN0aWxsIG5vdCBjb21wbGV0ZWx5IGhhcHB5IGFib3V0IHRoaXMg cGFydC4NCj4gPj4NCj4gPj4gSSB3b3VsZCBsb29rIGF0IGRhdGEtPm91dHB1dC0+Y29uZmlnLmNv bm5lY3RvciBmb3IgbW9kZXMsIGFuZCByZXR1cm4NCj4gPj4gMTAyNCBtb2RlIGlmIG5vdGhpbmcn cyBmb3VuZC4NCj4gPj4NCj4gPj4gU2F2ZXMgYSB3aG9sZSBsb3Qgb2YgZHJtIGNhbGxzLg0KPiA+ IFRydWUuIEEgbG90IG9mIGxpbmVzIGNhbiBiZSBjbGVhbmVkIG91dC4NCj4gPj4+ICtzdGF0aWMg dm9pZA0KPiA+Pj4gK3Rlc3RfcmVzb2x1dGlvbl93aXRoX291dHB1dChkYXRhX3QgKmRhdGEpIHsN Cj4gPj4+ICsJZHJtTW9kZU1vZGVJbmZvICptb2RlX2hpLCAqbW9kZV9sbzsNCj4gPj4+ICsJaW50 IHJldDsNCj4gPj4+ICsJaW50IGl0ZXJhdGlvbnMgPSBvcHQuaXRlcmF0aW9ucyA8IDEgPyAxIDog b3B0Lml0ZXJhdGlvbnM7DQo+ID4+PiArCWJvb2wgbG9vcF9mb3JldmVyOw0KPiA+Pj4gKwlpbnQg aTsNCj4gPj4+ICsNCj4gPj4+ICsJaWYgKG9wdC5pdGVyYXRpb25zID09IExPT1BfRk9SRVZFUikN Cj4gPj4+ICsJCWxvb3BfZm9yZXZlciA9IHRydWU7DQo+ID4+PiArCWVsc2UNCj4gPj4+ICsJCWxv b3BfZm9yZXZlciA9IGZhbHNlOw0KPiA+Pj4gKw0KPiA+Pj4gKwlpZ3RfaW5mbygiVGVzdGluZyBy ZXNvbHV0aW9uIHdpdGggY29ubmVjdG9yICVzIHVzaW5nIHBpcGUNCj4gPj4+ICVzIHdpdGggc2Vl ZCAlZFxuIiwNCj4gPj4+ICsJCSBpZ3Rfb3V0cHV0X25hbWUoZGF0YS0+b3V0cHV0KSwNCj4gPj4+ IGttc3Rlc3RfcGlwZV9uYW1lKGRhdGEtPnBpcGUpLCBvcHQuc2VlZCk7DQo+ID4+PiArDQo+ID4+ PiArCW1vZGVfaGkgPSBpZ3Rfb3V0cHV0X2dldF9tb2RlKGRhdGEtPm91dHB1dCk7DQo+ID4+PiAr CW1vZGVfbG8gPSBnZXRfbG93cmVzX21vZGUoZGF0YSwgbW9kZV9oaSk7DQo+ID4+PiArDQo+ID4+ PiArCWkgPSAwOw0KPiA+Pj4gKwl3aGlsZSAoaSA8IGl0ZXJhdGlvbnMgfHwgbG9vcF9mb3JldmVy KSB7DQo+ID4+PiArCQkvKiBzd2l0Y2ggdG8gbG93ZXIgcmVzb2x1dGlvbiAqLw0KPiA+Pj4gKwkJ cmV0ID0gZHJtTW9kZVNldENydGMoZGF0YS0+ZHJtX2ZkLCBkYXRhLT5jcnRjX2lkLA0KPiA+Pj4g ZGF0YS0+ZmItPmZiX2lkLCAwLCAwLA0KPiA+Pj4gKwkJCQkgICAgICZkYXRhLT5jb25uZWN0b3Jf aWQsIDEsDQo+ID4+PiBtb2RlX2xvKTsNCj4gPj4+ICsJCWlndF9hc3NlcnRfZXEocmV0LCAwKTsN Cj4gPj4+ICsNCj4gPj4+ICsJCS8qIHN3aXRjaCBiYWNrIHRvIGhpZ2hlciByZXNvbHV0aW9uICov DQo+ID4+PiArCQlyZXQgPSBkcm1Nb2RlU2V0Q3J0YyhkYXRhLT5kcm1fZmQsIGRhdGEtPmNydGNf aWQsDQo+ID4+PiBkYXRhLT5mYi0+ZmJfaWQsIDAsIDAsDQo+ID4+PiArCQkJCSAgICAgJmRhdGEt PmNvbm5lY3Rvcl9pZCwgMSwNCj4gPj4+IG1vZGVfaGkpOw0KPiA+Pj4gKwkJaWd0X2Fzc2VydF9l cShyZXQsIDApOw0KPiA+Pj4gKw0KPiA+Pj4gKwkJaSsrOw0KPiA+Pj4gKwl9DQo+ID4+PiArfQ0K PiA+PiBVc2UgaWd0X291dHB1dF9vdmVycmlkZV9tb2RlICsgaWd0X2Rpc3BsYXkgY2FsbHM/IFdp dGggdGhlIHRocmVhZA0KPiA+PiBiZWluZyBhIGZvcmsgbm93LCB5b3UgY2FuIHVzZSBpZ3RfZGlz cGxheS4gOikNCj4gPiBGb3Igc29tZSByZWFzb24gSSBrZWVwIHJlY2VpdmluZyBhbiBlcnJvciB3 aGVuIHVzaW5nDQo+ID4gaWd0X291dHB1dF9vdmVycmlkZV9tb2RlICsgaWd0X2Rpc3BsYXkgY2Fs bHMuIFRoZSBlcnJvciBpcw0KPiA+DQo+ID4gaWd0LWttcy1DUklUSUNBTDogRmFpbGVkIGFzc2Vy dGlvbjoNCj4gPiBkcm1Nb2RlRGVzdHJveVByb3BlcnR5QmxvYihkaXNwbGF5LQ0KPiA+PiBkcm1f ZmQsICpibG9iKSA9PSAwDQo+ID4gaWd0LWttcy1DUklUSUNBTDogTGFzdCBlcnJubzogMSwgT3Bl cmF0aW9uIG5vdCBwZXJtaXR0ZWQNCj4gPg0KPiA+IE1heWJlIGJvdGggdGhyZWFkcyB0cnkgdG8g YWNjZXNzIHRoaXMgYW5kIHRoaXMgcmVxdWVzdCBpcyBub3QgZ3JhbnRlZD8NCj4gPiBXaXRoIGRy bU1vZGVTZXRDcnRjKCkgY2FsbCBJIGRvbid0IHNlZSB0aGlzIGJlaGF2aW9yLiBNYXliZSBzdGlj ayB3aXRoDQo+ID4gcmF3IGNhbGxzIGluc3RlYWQ/DQo+IA0KPiBkYXRhLT5kaXNwbGF5LnBpcGVz W3BpcGVdLm1vZGVfYmxvYiA9IDA7IGluIG9uZSBvZiB0aGUgZm9ya3Mgb2YgdGhlIHRlc3Qgc2hv dWxkDQo+IGZpeCBpdC4NClRoaXMgc2VlbXMgdG8gZml4IHRoZSBpc3N1ZS4gSSdsbCB0aHJvdyBh IHJldmlzZWQgcGF0Y2ggb2YgdGhlIHRlc3Qgc2hvcnRseS4NCg0KPiANCj4gLUVQRVJNIG1lYW5z IHRoYXQgdGhlIGJsb2Igd2FzIGFscmVhZHkgZGVzdHJveWVkIGJ5IHRoaXMgZmQsIGJ1dCBzdGls bCB1c2VkDQo+IGdsb2JhbGx5Lg0KPiANCj4ga21zX3JtZmIgZG9lcyBzaW1pbGFyLCBtYXliZSB3 ZSBzaG91bGQgaWdub3JlIGZhaWx1cmVzPw0KTWF5YmUgd2UgY291bGQgaWdub3JlIHRoZXNlIGZh aWx1cmVzLiBBbnkgaGFybSBkb25lIGVsc2V3aGVyZSBpZiB3ZSBkbyBzbz8NCg0KLU1pa2EtDQo+ IA0KPiB+TWFhcnRlbg0KDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRl bC1nZngK