From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5AF9389E39 for ; Wed, 28 Aug 2019 22:33:35 +0000 (UTC) Date: Wed, 28 Aug 2019 15:35:14 -0700 From: Manasi Navare Message-ID: <20190828223513.GI701@intel.com> References: <20190823182351.25822-1-madhumitha.tolakanahalli.pradeep@intel.com> <20190823182351.25822-3-madhumitha.tolakanahalli.pradeep@intel.com> <44a51c697ed71dbf239322e20e9de0b18bc0b42c.camel@intel.com> <20190827212949.GF701@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20190827212949.GF701@intel.com> Subject: Re: [igt-dev] [PATCH i-g-t v2 2/2] igt/tests/kms_dp_tiled_display: kms test for display port tiled displays List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: "Ser, Simon" Cc: "igt-dev@lists.freedesktop.org" , "madhumitha.tp@gmail.com" , "Latvala, Petri" List-ID: T24gVHVlLCBBdWcgMjcsIDIwMTkgYXQgMDI6Mjk6NDlQTSAtMDcwMCwgTWFuYXNpIE5hdmFyZSB3 cm90ZToKPiBPbiBUdWUsIEF1ZyAyNywgMjAxOSBhdCAwMzo0OTozOEFNIC0wNzAwLCBTZXIsIFNp bW9uIHdyb3RlOgo+ID4gVGhhbmtzIGZvciB0aGUgbmV3IHZlcnNpb24hIEhlcmUgYXJlIHNvbWUg bW9yZSBjb21tZW50cy4gU29tZSBvZiB0aGVtCj4gPiBhcmUgbml0cywgc29tZSBvZiB0aGVtIGFy ZSBtb3JlIHNlcmlvdXMgcXVlc3Rpb25zLiBGZWVsIGZyZWUgdG8gbGV0IG1lCj4gPiBrbm93IGlm IEknbSBtaXN0YWtlbiBvciBpZiB5b3UgZG9uJ3QgdW5kZXJzdGFuZCBvbmUgb2YgdGhlbS4KPiAK PiBUaGFua3MgZm9yIHRoZSByZXZpZXcgY29tbWVudHMgU2ltb24uIEkgd2lsbCBiZSB3b3JraW5n IG9uIGFkZHJlc3NpbmcgdGhlIGZvbGxvd2luZwo+IHJldmlldyBjb21tZW50cyBhbmQgd2lsbCB0 YWtlIG92ZXIgdGhpcyBwYXRjaCBzaW5jZSBNYWRodW1pdGhhJ3MgaW50ZXJuc2hpcCBoYXMgZW5k ZWQuCj4gSSByZWFsbHkgYXBwcmVjaWF0ZSBhbGwgeW91ciBoZWxwIGFuZCBmZWVkYmFjayBvbiB0 aGlzLgo+IAo+IFBsZWFzZSBmaW5kIG15IGFuc3dlcnMgYmVsb3c6Cj4gCj4gPiAKPiA+IE9uIEZy aSwgMjAxOS0wOC0yMyBhdCAxMToyMyAtMDcwMCwgTWFkaHVtaXRoYSBUb2xha2FuYWhhbGxpIFBy YWRlZXAgd3JvdGU6Cj4gPiA+IFRoaXMgdGVzdCB2YWxpZGF0ZXMgdGhlIHRpbGVkIERQIGRpc3Bs YXlzIHRvIGRpc3BsYXkgYSB0ZXN0IHBhdHRlcm4KPiA+ID4gc2VhbWxlc3NseSBhY3Jvc3MgdGhl IHR3byB0aWxlcy4gSXQgdmFsaWRhdGVzIHRoZSB0cmFuc2NvZGVyIHBvcnQKPiA+ID4gc3luYyBm ZWF0dXJlIG9uIGk5MTUgdG8gZ2V0IGEgdGVhcmZyZWUgdGlsZWQgZGlzcGxheSBvdXRwdXQuCj4g PiA+IAo+ID4gPiBSZWxhdGVkIGtlcm5lbCB3b3JrIHBhdGNoZXMtCj4gPiA+IGh0dHBzOi8vcGF0 Y2h3b3JrLmZyZWVkZXNrdG9wLm9yZy9zZXJpZXMvNTk4MzcvI3JldjQuCj4gPiA+IAo+ID4gPiBU aGlzIHRlc3QgY2FuIGV2ZW50dWFsbHkgYmUgZXh0ZW5kZWQgdG8gY292ZXIgdGlsZWQgZGlzcGxh eSBzdXBwb3J0Cj4gPiA+IG9uIG90aGVyIGNvbm5lY3RvciB0eXBlcy4KPiA+ID4gCj4gPiA+IHYy OiBBZGRlZCBhIGNoZWNrIGZvciBjaGVja2luZyBwYWdlZmxpcCBldmVudCB0aW1lc3RhbXBzIChT aW1vbiwgTWFuYXNpKQo+ID4gPiAgICAgTWlub3Igc3R5bGUgY2hhbmdlcyAoU2ltb24pCj4gPiA+ ICAgIENvZGUgY2xlYW4tdXAgYW5kIHJlb3JkZXJpbmcKPiA+ID4gCj4gPiA+IAo+ID4gPiBDYzog TWFuYXNpIE5hdmFyZSA8bWFuYXNpLmQubmF2YXJlQGludGVsLmNvbT4KPiA+ID4gQ2M6IFBldHJp IExhdHZhbGEgPHBldHJpLmxhdHZhbGFAaW50ZWwuY29tPgo+ID4gPiBDYzogU2ltb24gU2VyIDxz aW1vbi5zZXJAaW50ZWwuY29tPgo+ID4gPiAKPiA+ID4gQ2M6IDxtYWRodW1pdGhhLnRwQGdtYWls LmNvbT4KPiA+ID4gCj4gPiA+IFNpZ25lZC1vZmYtYnk6IE1hZGh1bWl0aGEgVG9sYWthbmFoYWxs aSBQcmFkZWVwIDxtYWRodW1pdGhhLnRvbGFrYW5haGFsbGkucHJhZGVlcEBpbnRlbC5jb20+Cj4g PiA+IC0tLQo+ID4gPiAgdGVzdHMvTWFrZWZpbGUuc291cmNlcyAgICAgICB8ICAgMSArCj4gPiA+ ICB0ZXN0cy9rbXNfZHBfdGlsZWRfZGlzcGxheS5jIHwgMzQ2ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCj4gPiA+ICB0ZXN0cy9tZXNvbi5idWlsZCAgICAgICAgICAgIHwgICAx ICsKPiA+ID4gIDMgZmlsZXMgY2hhbmdlZCwgMzQ4IGluc2VydGlvbnMoKykKPiA+ID4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCB0ZXN0cy9rbXNfZHBfdGlsZWRfZGlzcGxheS5jCj4gPiA+IAo+ID4gPiBk aWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJj ZXMKPiA+ID4gaW5kZXggYzAyZTRkOTQuLjc1NjFhYjliIDEwMDY0NAo+ID4gPiAtLS0gYS90ZXN0 cy9NYWtlZmlsZS5zb3VyY2VzCj4gPiA+ICsrKyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiA+ ID4gQEAgLTQxLDYgKzQxLDcgQEAgVEVTVFNfcHJvZ3MgPSBcCj4gPiA+ICAJa21zX2N1cnNvcl9l ZGdlX3dhbGsgXAo+ID4gPiAgCWttc19jdXJzb3JfbGVnYWN5IFwKPiA+ID4gIAlrbXNfZHBfZHNj IFwKPiA+ID4gKwlrbXNfZHBfdGlsZWRfZGlzcGxheSBcCj4gPiA+ICAJa21zX2RyYXdfY3JjIFwK PiA+ID4gIAlrbXNfZmJjb25fZmJ0IFwKPiA+ID4gIAlrbXNfZmVuY2VfcGluX2xlYWsgXAo+ID4g PiBkaWZmIC0tZ2l0IGEvdGVzdHMva21zX2RwX3RpbGVkX2Rpc3BsYXkuYyBiL3Rlc3RzL2ttc19k cF90aWxlZF9kaXNwbGF5LmMKPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+ID4gaW5kZXgg MDAwMDAwMDAuLjE2MmZiZGQ5Cj4gPiA+IC0tLSAvZGV2L251bGwKPiA+ID4gKysrIGIvdGVzdHMv a21zX2RwX3RpbGVkX2Rpc3BsYXkuYwo+ID4gPiBAQCAtMCwwICsxLDM0NiBAQAo+ID4gPiArLyoK PiA+ID4gKyAqIENvcHlyaWdodCDCqSAyMDE4IEludGVsIENvcnBvcmF0aW9uCj4gPiA+ICsgKgo+ ID4gPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv IGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiA+ID4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gPiA+ ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRp bmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gPiA+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwg bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiA+ID4gKyAq IGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29u cyB0byB3aG9tIHRoZQo+ID4gPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBz dWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiA+ID4gKyAqCj4gPiA+ICsgKiBU aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5j bHVkaW5nIHRoZSBuZXh0Cj4gPiA+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGlu IGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gPiA+ICsgKiBTb2Z0 d2FyZS4KPiA+ID4gKyAqCj4gPiA+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ID4gPiArICogSU1Q TElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFksCj4gPiA+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB TkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiA+ID4gKyAqIFRIRSBBVVRI T1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VT IE9SIE9USEVSCj4gPiA+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ID4gPiArICogRlJPTSwgT1VUIE9G IE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBE RUFMSU5HUwo+ID4gPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ID4gPiArICoKPiA+ID4gKyAqIEF1 dGhvcnM6Cj4gPiA+ICsgKiAgTWFkaHVtaXRoYSBUb2xha2FuYWhhbGxpIFByYWRlZXAKPiA+ID4g KyAqICAgICAgPG1hZGh1bWl0aGEudG9sYWthbmFoYWxsaS5wcmFkZWVwQGludGVsLmNvbT4KPiA+ ID4gKyAqCj4gPiA+ICsgKiBEaXNwbGF5IFBvcnQgVGlsZWQgRGlzcGxheSBUZXN0Cj4gPiA+ICsg KiBUaGlzIHRlc3QgcGFyc2VzIHRoZSB0aWxlIGluZm9ybWF0aW9uIG9mIHRoZSBjb25uZWN0b3Jz IHRoYXQgaGF2ZSBUSUxFCj4gPiA+ICsgKiBwcm9wZXJ0eSBzZXQsIHNldHMgdXAgdGhlIGZyYW1l YnVmZmVyIHdpdGggY29ycmVjdCBvZmZzZXRzIGNvcnJlc3BvbmRpbmcgdG8KPiA+ID4gKyAqIHRo ZSB0aWxlIG9mZnNldHMgYW5kIGRvZXMgYW4gYXRvbWljIG1vZGVzZXQgd2l0aCB0d28gQ1JUQ3Mg Zm9yIHR3bwo+ID4gPiArICogY29ubmVjdG9ycy4gUGFnZSBmbGlwIGV2ZW50IHRpbWVzdGFtcCBm cm9tIGVhY2ggQ1JUQyBpcyBjb2xsZWN0ZWQgYW5kCj4gPiA+ICsgKiBjb21wYXJlZCB0byBtYWtl IHN1cmUgdGhhdCB0aGV5IG9jY3VycmVkIGluIGEgc3luY2hyb25vdXMgbWFubmVyLgo+ID4gPiAr ICoKPiA+ID4gKyAqIFRoaXMgdGVzdCBjdXJyZW50bHkgc3VwcG9ydHMgb25seSBob3Jpem9udGFs bHkgdGlsZWQgZGlzcGxheXMsIGluIGxpbmUgd2l0aAo+ID4gPiArICogdGhlIGRpc3BsYXlzIHN1 cHBvcnRlZCBieSB0aGUga2VybmVsIGF0IHRoZSBtb21lbnQuCj4gPiA+ICsgKi8KPiA+ID4gKwo+ ID4gPiArI2luY2x1ZGUgImlndC5oIgo+ID4gPiArI2luY2x1ZGUgInBvbGwuaCIKPiA+ID4gKyNp bmNsdWRlICJkcm1fbW9kZS5oIgo+ID4gPiArI2luY2x1ZGUgImRybV9mb3VyY2MuaCIKPiA+ID4g Kwo+ID4gPiArSUdUX1RFU1RfREVTQ1JJUFRJT04oIlRlc3QgZm9yIERpc3BsYXkgUG9ydCBUaWxl ZCBEaXNwbGF5cyIpOwo+ID4gPiArCj4gPiA+ICt0eXBlZGVmIHN0cnVjdCB7Cj4gPiA+ICsJaW50 IGRybV9mZDsKPiA+ID4gKwlpbnQgbnVtX2hfdGlsZXM7Cj4gPiA+ICsJaWd0X2Rpc3BsYXlfdCAq ZGlzcGxheTsKPiA+ID4gKwllbnVtIGlndF9jb21taXRfc3R5bGUgY29tbWl0Owo+ID4gPiArfSBk YXRhX3Q7Cj4gPiA+ICsKPiA+ID4gK3R5cGVkZWYgc3RydWN0IHsKPiA+ID4gKwlpZ3Rfb3V0cHV0 X3QgKm91dHB1dDsKPiA+ID4gKwlpZ3RfdGlsZV9pbmZvX3QgdGlsZTsKPiA+ID4gKwlpZ3RfZmJf dCBmYl90ZXN0X3BhdHRlcm47Cj4gPiA+ICsJZW51bSBwaXBlIHBpcGU7Cj4gPiA+ICsJZW51bSBp Z3RfY29tbWl0X3N0eWxlIGNvbW1pdDsKPiA+ID4gKwlkcm1Nb2RlQ29ubmVjdG9yUHRyIGNvbm5l Y3RvcjsKPiA+ID4gK30gZGF0YV9jb25uZWN0b3JfdDsKPiA+ID4gKwo+ID4gPiArc3RhdGljIGlu dCBkcm1fcHJvcGVydHlfaXNfdGlsZShkcm1Nb2RlUHJvcGVydHlQdHIgcHJvcCkKPiA+ID4gK3sK PiA+ID4gKwlyZXR1cm4gKHN0cmNtcChwcm9wLT5uYW1lICwgIlRJTEUiKSA/IDAgOiAxKSAmJgo+ ID4gPiArCQkJIGRybV9wcm9wZXJ0eV90eXBlX2lzKHByb3AsIERSTV9NT0RFX1BST1BfQkxPQik7 Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyB2b2lkIGdldF9jb25uZWN0b3JfdGlsZV9w cm9wcyhkYXRhX3QgKmRhdGEsIGRybU1vZGVDb25uZWN0b3JQdHIgY29ubiwKPiA+ID4gKwkJaWd0 X3RpbGVfaW5mb190ICp0aWxlKQo+ID4gPiArewo+ID4gPiArCWludCBpID0gMDsKPiA+ID4gKwlk cm1Nb2RlUHJvcGVydHlQdHIgcHJvcDsKPiA+ID4gKwlkcm1Nb2RlUHJvcGVydHlCbG9iUHRyIGJs b2I7Cj4gPiA+ICsKPiA+ID4gKwlmb3IgKGkgPSAwOyBpIDwgY29ubi0+Y291bnRfcHJvcHM7IGkr Kykgewo+ID4gPiArCQlwcm9wID0gZHJtTW9kZUdldFByb3BlcnR5KGRhdGEtPmRybV9mZCwgY29u bi0+cHJvcHNbaV0pOwo+ID4gPiArCj4gPiA+ICsJCWlndF9hc3NlcnQocHJvcCk7Cj4gPiA+ICsK PiA+ID4gKwkJaWYgKCFkcm1fcHJvcGVydHlfaXNfdGlsZShwcm9wKSkKPiA+ID4gKwkJCWNvbnRp bnVlOwo+ID4gCj4gPiBUaGlzIGJyYW5jaCBsZWFrcyBwcm9wLgo+IAo+IEZyZWVpbmcgcHJvcCBo ZXJlIGJlZm9yZSBjb250aW51aW5nIHNoZCBmaXggdGhpcywgd2lsbCBmaXggdGhpcyBpbiB0aGUg bmV4dCByZXYKPiAKPiA+IAo+ID4gPiArCQlibG9iID0gZHJtTW9kZUdldFByb3BlcnR5QmxvYihk YXRhLT5kcm1fZmQsCj4gPiA+ICsJCQkJY29ubi0+cHJvcF92YWx1ZXNbaV0pOwo+ID4gPiArCj4g PiA+ICsJCWlmICghYmxvYikKPiA+ID4gKwkJCXJldHVybjsKPiA+IAo+ID4gVGhpcyBicmFuY2gg bGVha3MgcHJvcC4KPiAKPiBBZ3JlZSwgd2lsbCBhZGQgZHJtTW9kZUZyZWVQcm9wZXJ0eUJsb2Io YmxvYik7IGJlZm9yZSByZXR1cm4KPiAKPiA+IAo+ID4gPiArCQlpZ3RfcGFyc2VfY29ubmVjdG9y X3RpbGVfYmxvYihibG9iLCB0aWxlKTsKPiA+ID4gKwkJYnJlYWs7Cj4gPiA+ICsJfQo+ID4gPiAr Cj4gPiA+ICsJZHJtTW9kZUZyZWVQcm9wZXJ0eShwcm9wKTsKPiA+ID4gKwlkcm1Nb2RlRnJlZVBy b3BlcnR5QmxvYihibG9iKTsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIHZvaWQgZ2V0 X251bWJlcl9vZl9oX3RpbGVzKGRhdGFfdCAqZGF0YSkKPiA+ID4gK3sKPiA+ID4gKwlpbnQgaTsK PiA+ID4gKwlkcm1Nb2RlUmVzUHRyIHJlczsKPiA+ID4gKwlkcm1Nb2RlQ29ubmVjdG9yUHRyIGNv bm5lY3RvcjsKPiA+ID4gKwlpZ3RfdGlsZV9pbmZvX3QgdGlsZSA9IHsubnVtX2hfdGlsZSA9IDB9 Owo+ID4gPiArCj4gPiA+ICsJaWd0X2Fzc2VydChyZXMgPSBkcm1Nb2RlR2V0UmVzb3VyY2VzKGRh dGEtPmRybV9mZCkpOwo+ID4gPiArCj4gPiA+ICsJZm9yIChpID0gMDsgaSA8IHJlcy0+Y291bnRf Y29ubmVjdG9yczsgaSsrKSB7Cj4gPiA+ICsJCWNvbm5lY3RvciA9IGRybU1vZGVHZXRDb25uZWN0 b3JDdXJyZW50KGRhdGEtPmRybV9mZCwKPiA+ID4gKwkJCQlyZXMtPmNvbm5lY3RvcnNbaV0pOwo+ ID4gPiArCj4gPiA+ICsJCWlndF9hc3NlcnQoY29ubmVjdG9yKTsKPiA+ID4gKwo+ID4gPiArCQlp ZiAoIShjb25uZWN0b3ItPmNvbm5lY3Rpb24gPT0gRFJNX01PREVfQ09OTkVDVEVEICYmCj4gPiA+ ICsJCQljb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNw bGF5UG9ydCkpCj4gPiA+ICsJCQljb250aW51ZTsKPiA+IAo+ID4gVGhpcyBjYW4gYmUgc2ltcGxp ZmllZCB0bwo+ID4gCj4gPiAgICAgY29ubmVjdGlvbiAhPSBEUk1fTU9ERV9DT05ORUNURUQgfHwK PiA+ICAgICBjb25uZWN0b3JfdHlwZSAhPSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQK PiAKPiBZZXMgd2lsbCBzaW1wbGlmeSBpbiB0aGUgbmV4dCByZXYKPiAKPiA+IAo+ID4gQWRkaXRp b25hbGx5LCB0aGlzIGJyYW5jaCBsZWFrcyB0aGUgY29ubmVjdG9yLgo+IAo+IEhtbSwgc28gY2Fs bCBkcm1Nb2RlRnJlZUNvbm5lY3Rvcihjb25uZWN0b3IpOyBiZWZvcmUgY29udGludWluZyBzaGQg YmUgZm9sbG93ZWQgaW4gZ2VuZXJhbCB0aHJvdWdob3V0Cj4gdGhlIGNvZGUgcmlnaHQ/Cj4gCj4g PiAKPiA+ID4gKwkJZ2V0X2Nvbm5lY3Rvcl90aWxlX3Byb3BzKGRhdGEsIGNvbm5lY3RvciwgJnRp bGUpOwo+ID4gPiArCQlkYXRhLT5udW1faF90aWxlcyA9IHRpbGUubnVtX2hfdGlsZTsKPiA+ID4g KwkJYnJlYWs7Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJZHJtTW9kZUZyZWVSZXNvdXJjZXMo cmVzKTsKPiA+ID4gKwlkcm1Nb2RlRnJlZUNvbm5lY3Rvcihjb25uZWN0b3IpOwo+ID4gPiArfQo+ ID4gPiArCj4gPiA+ICtzdGF0aWMgdm9pZCBnZXRfY29ubmVjdG9yKGRhdGFfdCAqZGF0YSwgZGF0 YV9jb25uZWN0b3JfdCAqY29ubikKPiA+IAo+ID4gTml0OiBzaW5jZSB0aGlzIGZpbGxzIGFsbCBj b25uZWN0b3JzLCBtYXliZSBpdCBzaG91bGQgYmUgbmFtZWQKPiA+IGdldF9jb25uZWN0b3JzICh3 aXRoIGFuIHMpLiBBbHNvIGl0J3Mgbm90IGNsZWFyIHRoYXQgY29ubiByZWZlcnMgdG8gYW4KPiA+ IGFycmF5IG9mIGNvbm5lY3RvcnMsIG1heWJlIGl0IHNob3VsZCBiZSByZW5hbWVkIHRvIGNvbm5z Lgo+IAo+IFllcyBJIGFncmVlIHRoYXQgd2lsbCBtYWtlIGl0IG1vcmUgcmVhZGFibGUsIEkgd2ls bCBmaXggaXQgaW4gbmV4dCByZXYKPiAKPiA+IAo+ID4gKEFwcGxpZXMgdG8gdGhlIHdob2xlIHBh dGNoKQo+ID4gCj4gPiA+ICt7Cj4gPiA+ICsJaW50IGNvdW50ID0gMDsKPiA+ID4gKwlpZ3Rfb3V0 cHV0X3QgKm91dHB1dDsKPiA+ID4gKwo+ID4gPiArCWZvcl9lYWNoX2Nvbm5lY3RlZF9vdXRwdXQo ZGF0YS0+ZGlzcGxheSwgb3V0cHV0KSB7Cj4gPiA+ICsJCWNvbm5bY291bnRdLmNvbm5lY3RvciA9 IGRybU1vZGVHZXRDb25uZWN0b3IoZGF0YS0+ZGlzcGxheS0+ZHJtX2ZkLAo+ID4gPiArCQkJCQkJ b3V0cHV0LT5pZCk7Cj4gPiA+ICsKPiA+ID4gKwkJaWd0X2Fzc2VydChjb25uW2NvdW50XS5jb25u ZWN0b3IpOwo+ID4gPiArCj4gPiA+ICsJCWlmICghKGNvbm5bY291bnRdLmNvbm5lY3Rvci0+Y29u bmVjdG9yX3R5cGUgPT0KPiA+ID4gKwkJCURSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCkp Cj4gPiA+ICsJCQljb250aW51ZTsKPiA+IAo+ID4gVGhpcyBjYW4gYmUgc2ltcGxpZmllZCB0bwo+ ID4gCj4gPiAgICAgaWYgKGNvbm5lY3Rvcl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNw bGF5UG9ydCkKPiA+IAo+ID4gQWRkaXRpb25hbGx5LCB0aGlzIGJyYW5jaCBsZWFrcyB0aGUgY29u bmVjdG9yLgo+ID4gCj4gPiA+ICsJCWdldF9jb25uZWN0b3JfdGlsZV9wcm9wcyhkYXRhLCBjb25u W2NvdW50XS5jb25uZWN0b3IsCj4gPiA+ICsJCQkmY29ubltjb3VudF0udGlsZSk7Cj4gPiA+ICsK PiA+ID4gKwkJLyogQ2hlY2sgaWYgdGhlIGNvbm5lY3RvcnMgYmVsb25nIHRvIHRoZSBzYW1lIHRp bGUgZ3JvdXAgKi8KPiA+ID4gKwkJaWYgKGNvdW50ID4gMCkKPiA+ID4gKwkJCWlndF9hc3NlcnQo Y29ubltjb3VudF0udGlsZS50aWxlX2dyb3VwX2lkID09Cj4gPiA+ICsJCQkJY29ubltjb3VudC0x XS50aWxlLnRpbGVfZ3JvdXBfaWQpOwo+ID4gPiArCj4gPiA+ICsJCWNvdW50Kys7Cj4gPiA+ICsJ fQo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgdm9pZAo+ID4gPiArcmVzZXRfZnJhbWVi dWZmZXIoaW50IGRybV9mZCwgaWd0X291dHB1dF90ICpvdXRwdXQsIGlndF9mYl90ICpmYikKPiA+ ID4gK3sKPiA+ID4gKwlpZ3RfcGxhbmVfdCAqcHJpbWFyeTsKPiA+ID4gKwo+ID4gPiArCXByaW1h cnkgPSBpZ3Rfb3V0cHV0X2dldF9wbGFuZV90eXBlKG91dHB1dCwgRFJNX1BMQU5FX1RZUEVfUFJJ TUFSWSk7Cj4gPiA+ICsJaWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCBOVUxMKTsKPiA+ID4gKwlp Z3RfcmVtb3ZlX2ZiKGRybV9mZCwgZmIpOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMg dm9pZCByZXNldF9vdXRwdXQoaWd0X291dHB1dF90ICpvdXRwdXQpCj4gPiA+ICt7Cj4gPiA+ICsJ aWd0X291dHB1dF9zZXRfcGlwZShvdXRwdXQsIFBJUEVfTk9ORSk7Cj4gPiA+ICt9Cj4gPiA+ICsK PiA+ID4gK3N0YXRpYyB2b2lkIHRlc3RfY2xlYW51cChkYXRhX3QgKmRhdGEsIGRhdGFfY29ubmVj dG9yX3QgKmNvbm4pCj4gPiA+ICt7Cj4gPiA+ICsJaW50IGNvdW50Owo+ID4gPiArCj4gPiA+ICsJ Zm9yIChjb3VudCA9IDA7IGNvdW50IDwgZGF0YS0+bnVtX2hfdGlsZXM7IGNvdW50KyspIHsKPiA+ ID4gKwkJaWYgKGNvbm5bY291bnRdLm91dHB1dCkgewo+ID4gPiArCQkJcmVzZXRfZnJhbWVidWZm ZXIoZGF0YS0+ZHJtX2ZkLCBjb25uW2NvdW50XS5vdXRwdXQsCj4gPiA+ICsJCQkJJmNvbm5bY291 bnRdLmZiX3Rlc3RfcGF0dGVybik7Cj4gPiA+ICsJCQlyZXNldF9vdXRwdXQoY29ubltjb3VudF0u b3V0cHV0KTsKPiA+ID4gKwkJfQo+ID4gPiArCX0KPiA+ID4gKwlpZ3RfZGlzcGxheV9jb21taXQy KGRhdGEtPmRpc3BsYXksIGRhdGEtPmNvbW1pdCk7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0 YXRpYyB2b2lkIHNldHVwX21vZGUoZGF0YV90ICpkYXRhLCBkYXRhX2Nvbm5lY3Rvcl90ICpjb25u X2RhdGEpCj4gPiAKPiA+IFRoaXMgZnVuY3Rpb24gZG9lc24ndCBhY3R1YWxseSBzZXR1cCB0aGUg b3V0cHV0IG1vZGUsIGl0IG9ubHkgc2V0cyB1cAo+ID4gdGhlIHBpcGUuIElzIHRoaXMgYW4gb3Zl cmxvb2s/Cj4gCj4geWVzIHdlIGp1c3Qgc2V0IHRoZSBwaXBlL0NSVEMgaGVyZSBhbmQgdGhlIGF0 b21pYyBjb21taXQgY2FsbCBkb2VzIGEgY29tcGxldGUKPiBtb2Rlc2V0IHdpdGggY2hlY2sgYW5k IGNvbW1pdCB3aXRob3V0IGFueSBvdXRwdXQgc2luY2Ugd2UgZGlkbnQgc2V0dXAgZmIgeWV0Lgo+ IEJ1dCBJIGFncmVlIHRoYXQgY2FsbGluZyBpdCBqdXN0IHNldHVwX3BpcGUgcm9iYWJseSBtYWtl cyBpdCBtb3JlIGludHVpdGl2ZQo+IAo+ID4gCj4gPiA+ICt7Cj4gPiA+ICsJaW50IGNvdW50ID0g MDsKPiA+ID4gKwllbnVtIHBpcGUgcGlwZTsKPiA+ID4gKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsK PiA+ID4gKwo+ID4gPiArCWZvciAoY291bnQgPSAwOyBjb3VudCA8IGRhdGEtPm51bV9oX3RpbGVz OyBjb3VudCsrKSB7Cj4gPiA+ICsJCW91dHB1dCA9IGlndF9vdXRwdXRfZnJvbV9jb25uZWN0b3Io ZGF0YS0+ZGlzcGxheSwKPiA+ID4gKwkJCQljb25uX2RhdGFbY291bnRdLmNvbm5lY3Rvcik7Cj4g PiA+ICsKPiA+ID4gKwkJLyoKPiA+ID4gKwkJICogVGhlIG91dHB1dCBpcyBzZXQgdG8gUElQRV9O T05FIGFuZCB0aGVuIGFzc2lnbmVkIGEgcGlwZS4KPiA+ID4gKwkJICogVGhpcyBpcyBkb25lIHRv IGVuc3VyZSBhIGNvbXBsZXRlIG1vZGVzZXQgb2NjdXJlcyBldmVyeQo+ID4gPiArCQkgKiB0aW1l IHRoZSB0ZXN0IGlzIHJ1bi4KPiA+ID4gKwkJICovCj4gPiA+ICsJCXJlc2V0X291dHB1dChvdXRw dXQpOwo+ID4gCj4gPiBJcyB0aGlzIG5lY2Vzc2FyeT8KPiAKPiBZZXMgdGhpcyBpcyBuZWNlc3Nh cnkgdG8gZm9yY2UgYSBjb21wbGV0ZSBtb2Rlc2V0IGZvciBlYWNoIHRlc3Qgc2luY2UgaWYgdGhl IHBpcGUKPiBhc3NpZ25tZW50cyBvciB0aGUgbW9kZSBoYXMgbm90IGNoYW5nZWQgaXQgd2lsbCBu b3Qgc2V0IG5lZWRzX21vZGVzZXQgZmxhZyBpbiBzaWRlIGtlcm5lbAo+IGFuZCB3aWxsIG5vdCBk byBhIGZ1bGwgYXRvbWljIGNoZWNrIGFuZCBjb21taXQuCgpUaGUgaWd0X2Rpc3BsYXlfY29tbWl0 MiBjYWxsIGlzIGFsc28gbmVlZGVkIGFmdGVyIHNldHRpbmcgdGhlIHBpcGUgdG8gTk9ORSB0byBl bnN1cmUgdGhhdAp3ZSBjbGVhciB0aGUgcGlwZSBhc3NpZ25tZW50cyBhbmQgdGhlbiBkbyBhIG1v ZGVzZXQuCkkganVzdCB0ZXN0ZWQgdGhhdCBhbmQgd2lsbCBhZGQgaXQgaW4gbmV4dCByZXYgYXMg YmVsb3c6CgpzdGF0aWMgdm9pZCByZXNldF9tb2RlKGRhdGFfdCAqZGF0YSwgZGF0YV9jb25uZWN0 b3JfdCAqY29ubl9kYXRhKQp7CiAgICAgICAgaW50IGNvdW50OwogICAgICAgIGlndF9vdXRwdXRf dCAqb3V0cHV0OwoKICAgICAgICBmb3IgKGNvdW50ID0gMDsgY291bnQgPCBkYXRhLT5udW1faF90 aWxlczsgY291bnQrKykgewogICAgICAgICAgICAgICAgb3V0cHV0ID0gaWd0X291dHB1dF9mcm9t X2Nvbm5lY3RvcihkYXRhLT5kaXNwbGF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbm5fZGF0YVtjb3VudF0uY29ubmVjdG9yKTsKICAgICAgICAgICAgICAgICAgICAgICBpZ3Rf b3V0cHV0X3NldF9waXBlKG91dHB1dCwgUElQRV9OT05FKTsKICAgICAgICB9CiAgICAgICAgaWd0 X2Rpc3BsYXlfY29tbWl0MihkYXRhLT5kaXNwbGF5LCBkYXRhLT5jb21taXQpOwp9CgoKTWFuYXNp Cgo+IAo+ID4gCj4gPiA+ICsJCWZvcl9lYWNoX3BpcGUoZGF0YS0+ZGlzcGxheSwgcGlwZSkgewo+ ID4gPiArCQkJaWYgKGNvdW50ID4gMCAmJiBwaXBlID09IGNvbm5fZGF0YVtjb3VudC0xXS5waXBl KQo+ID4gPiArCQkJCWNvbnRpbnVlOwo+ID4gPiArCj4gPiA+ICsJCQlpZiAoaWd0X3BpcGVfY29u bmVjdG9yX3ZhbGlkKHBpcGUsIG91dHB1dCkpIHsKPiA+ID4gKwo+ID4gPiArCQkJCWNvbm5fZGF0 YVtjb3VudF0ucGlwZSA9IHBpcGU7Cj4gPiA+ICsJCQkJY29ubl9kYXRhW2NvdW50XS5vdXRwdXQg PSBvdXRwdXQ7Cj4gPiA+ICsKPiA+ID4gKwkJCQlpZ3Rfb3V0cHV0X3NldF9waXBlKGNvbm5fZGF0 YVtjb3VudF0ub3V0cHV0LAo+ID4gPiArCQkJCQljb25uX2RhdGFbY291bnRdLnBpcGUpOwo+ID4g PiArCQkJCWJyZWFrOwo+ID4gPiArCQkJfQo+ID4gPiArCQl9Cj4gPiA+ICsJfQo+ID4gPiArCWln dF9kaXNwbGF5X2NvbW1pdF9hdG9taWMoZGF0YS0+ZGlzcGxheSwgRFJNX01PREVfQVRPTUlDX0FM TE9XX01PREVTRVQsCj4gPiA+ICsJCU5VTEwpOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0 aWMgdm9pZCBzZXR1cF9mcmFtZWJ1ZmZlcihkYXRhX3QgKmRhdGEsIGRhdGFfY29ubmVjdG9yX3Qg KmNvbm4pCj4gPiA+ICt7Cj4gPiA+ICsJaW50IGNvdW50Owo+ID4gPiArCWlndF9wbGFuZV90ICpw cmltYXJ5Owo+ID4gPiArCj4gPiA+ICsJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgZGF0YS0+bnVt X2hfdGlsZXM7IGNvdW50KyspIHsKPiA+ID4gKwo+ID4gPiArCQlpZ3RfY3JlYXRlX3BhdHRlcm5f ZmIoZGF0YS0+ZHJtX2ZkLAo+ID4gPiArCQkJKGNvbm5bY291bnRdLnRpbGUudGlsZV9oX3NpemUg Kgo+ID4gPiArCQkJZGF0YS0+bnVtX2hfdGlsZXMpLAo+ID4gCj4gPiBEbyB3ZSBuZWVkIHRvIG11 bHRpcGx5IGJ5IHRoZSBudW1iZXIgb2YgaG9yaXpvbnRhbCB0aWxlcyBoZXJlPyBJdCBzZWVtcwo+ ID4gd2Ugb25seSB1c2UgdGhlIGZpcnN0IHRpbGVfaF9zaXplIHBpeGVscyBvZiB0aGUgYnVmZmVy LiBBbSBJIG1pc3NpbmcKPiA+IHNvbWV0aGluZz8KPiA+IAo+IAo+IFllcyB3ZSBvbmx5IHVzZSB0 aGUgdGlsZV9oX3NpemUgb2YgdGhlIGJ1ZmZlciBhdCB0aGUgcHJvcGVyIG9mZnNldCBvZiB0aWxl X2hfbG9jCj4gU28gdGhpcyBiZWxvdyBsb2dpYyBzaGQgYmUgbW9kaWZpZWQgdG8gb25seSBjcmVh dGUgZmIgb2YgdGhlIHNpemUgdGlsZV9oX3NpemUgaWYgaXRzIGluIHRoZSBmb3IgbG9vcAo+IG9y IGp1c3QgY3JlYXRlIG9uZSBmYiBvdXRzaWRlIHRoZSBsb29wIG9mIHRoZSBzaXplIHRpbGVfaF9z aXplICogbnVtX3RpbGVzIGFuZCB0aGVuIGp1c3QgdXNlIHRoYXQgd2l0aCBkZmZlcmVudAo+IG9m ZnNldHMgZm9yIHR3byBDUlRDcwo+IAo+IFdoZW4gSSBkaXNjdXNzZWQgdGhpcyBvbiBkcmktZGV2 ZWwsIHBlb3BsZSBzYWlkIHRoYXQgcmVhbCB1c2Vyc3BhY2UgY2FuIGRlY2lkZSB0byBkbyBlaXRo ZXIgb25lIHNpbmdsZSBmYiBmb3IgYWxsIHRpbGVzCj4gb3Igc2VwYXJhdGUgb25lcyB3aGVyZSBl YWNoIGlzIG9mIHRoZSBzaXplIGVxdWFsIHRvIHRpbGUgc2l6ZS4KPiAKPiBMZXQgbWUga25vdyBp ZiB0aGVyZSBpcyBhIHByZWZlcmVuY2UKPiAKPiA+IEJ1dCBtYXliZSBhIHRlc3QgdGhhdCB3b3Vs ZCBiZXR0ZXIgcmVmbGVjdCByZWFsaXR5IHdvdWxkIGNyZWF0ZSBhCj4gPiBzaW5nbGUgZnJhbWVi dWZmZXIgZm9yIGFsbCB0aWxlZCBkaXNwbGF5cywgdG8gZGlzcGxheSBhIHNpbmdsZSBpbWFnZQo+ ID4gYWNyb3NzIGFsbCBvZiB0aGVtPwo+ID4gCj4gPiA+ICsJCQljb25uW2NvdW50XS50aWxlLnRp bGVfdl9zaXplLAo+ID4gPiArCQkJRFJNX0ZPUk1BVF9YQkdSODg4OCwKPiA+ID4gKwkJCUxPQ0FM X0RSTV9GT1JNQVRfTU9EX05PTkUsCj4gPiA+ICsJCQkmY29ubltjb3VudF0uZmJfdGVzdF9wYXR0 ZXJuKTsKPiA+ID4gKwo+ID4gPiArCQlwcmltYXJ5ID0gaWd0X291dHB1dF9nZXRfcGxhbmVfdHlw ZShjb25uW2NvdW50XS5vdXRwdXQsCj4gPiA+ICsJCQkJRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSk7 Cj4gPiA+ICsKPiA+ID4gKwkJaWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCAmY29ubltjb3VudF0u ZmJfdGVzdF9wYXR0ZXJuKTsKPiA+ID4gKwo+ID4gPiArCQlpZ3RfZmJfc2V0X3NpemUoJmNvbm5b Y291bnRdLmZiX3Rlc3RfcGF0dGVybiwgcHJpbWFyeSwKPiA+ID4gKwkJCQljb25uW2NvdW50XS50 aWxlLnRpbGVfaF9zaXplLAo+ID4gPiArCQkJCWNvbm5bY291bnRdLnRpbGUudGlsZV92X3NpemUp Owo+ID4gPiArCj4gPiA+ICsJCWlndF9mYl9zZXRfcG9zaXRpb24oJmNvbm5bY291bnRdLmZiX3Rl c3RfcGF0dGVybiwgcHJpbWFyeSwKPiA+ID4gKwkJCQkoY29ubltjb3VudF0udGlsZS50aWxlX2hf c2l6ZSAqCj4gPiA+ICsJCQkJY29ubltjb3VudF0udGlsZS50aWxlX2hfbG9jKSwKPiA+ID4gKwkJ CQkoY29ubltjb3VudF0udGlsZS50aWxlX3Zfc2l6ZSAqCj4gPiA+ICsJCQkJY29ubltjb3VudF0u dGlsZS50aWxlX3ZfbG9jKSk7Cj4gPiA+ICsKPiA+ID4gKwkJaWd0X3BsYW5lX3NldF9zaXplKHBy aW1hcnksCj4gPiA+ICsJCQkJY29ubltjb3VudF0udGlsZS50aWxlX2hfc2l6ZSwKPiA+ID4gKwkJ CQljb25uW2NvdW50XS50aWxlLnRpbGVfdl9zaXplKTsKPiA+ID4gKwl9Cj4gPiA+ICt9Cj4gPiA+ ICsKPiA+ID4gK3N0YXRpYyB2b2lkIHBhZ2VfZmxpcF9oYW5kbGVyKGludCBmZCwgdW5zaWduZWQg aW50IHNlcSwKPiA+ID4gKwkJdW5zaWduZWQgaW50IHR2X3NlYywgdW5zaWduZWQgaW50IHR2X3Vz ZWMsCj4gPiA+ICsJCXVuc2lnbmVkIGludCBjcnRjX2lkLCB2b2lkICpkYXRhKQo+ID4gPiArewo+ ID4gPiArCWJvb2wgZXhwciA9IGZhbHNlOwo+ID4gPiArCXN0YXRpYyB1bnNpZ25lZCBpbnQgX3R2 X3NlYywgX3R2X3VzZWM7Cj4gPiA+ICsKPiA+ID4gKwlpZ3RfZGVidWcoIlBhZ2UgRmxpcCBFdmVu dCByZWNlaXZlZCBmcm9tIENSVEM6JWQgYXQgJXU6JXVcbiIsIGNydGNfaWQsCj4gPiA+ICsJCXR2 X3NlYywgdHZfdXNlYyk7Cj4gPiAKPiA+IFdlIHNob3VsZCBhbHNvIG1ha2Ugc3VyZSB3ZSByZWNl aXZlIGV4YWN0bHkgb25lIHBhZ2UtZmxpcCBwZXIgQ1JUQy4KPiA+IEN1cnJlbnRseSB3ZSBkb24n dCB1c2UgY3J0Y19pZCAoYXBhcnQgZnJvbSBsb2dnaW5nIHB1cnBvc2VzKS4KPiAKPiBJIHNlZSBz byBzb21laG93IGhhdmUgYSBzdGF0aWMgY291bnQgb2YgZXZlbnRzIGFuZCBtYWtlIHN1cmUgcGVy IGNydGMgaWQgaXRzIHRoZSBzYW1lIGNvdW50IG9yCj4gc29tZSBzaW1pbGFyIGxvZ2ljCj4gCj4g PiAKPiA+ID4gKwkvKiBTa2lwIHRoZSBmb2xsb3dpbmcgY2hlY2tzIGZvciB0aGUgZmlyc3QgcGFn ZSBmbGlwIGV2ZW50ICovCj4gPiA+ICsJaWYgKF90dl9zZWMgPT0gMCB8fCBfdHZfdXNlYyA9PSAw KSB7Cj4gPiA+ICsJCV90dl9zZWMgPSB0dl9zZWM7Cj4gPiA+ICsJCV90dl91c2VjID0gdHZfdXNl YzsKPiA+ID4gKwkJcmV0dXJuOwo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCS8qCj4gPiA+ICsJ ICogRm9yIHNlYW1sZXNzIHRlYXItZnJlZSBkaXNwbGF5LCB0aGUgcGFnZSBmbGlwIGV2ZW50IHRp bWVzdGFtcHMKPiA+ID4gKwkgKiBmcm9tIGFsbCB0aGUgdGlsZXMgc2hvdWxkIG5vdCBkaWZmZXIg YnkgbW9yZSB0aGFuIDEwdXMuCj4gPiA+ICsJICovCj4gPiA+ICsJZXhwciA9IHR2X3NlYyA9PSBf dHZfc2VjICYmIChhYnModHZfdXNlYyAtIF90dl91c2VjKSA8IDEwKTsKPiA+IAo+ID4gTml0OiB0 aGlzIGNvdWxkIGJlIHJlbmFtZWQgdG8gZS5nLiBpc19vbl90aW1lLCBleHByIGlzIGEgcHJldHR5 IHZhZ3VlCj4gPiBuYW1lLgo+IAo+IHllcyBhZ3JlZSB3aWxsIHJlbmFtZSB0byBtYWtlIGl0IG1v cmUgcmVhZGFibGUKPiAKPiA+IAo+ID4gPiArCWlndF9mYWlsX29uX2YoIWV4cHIsICJEZWxheWVk IHBhZ2UgZmxpcCBldmVudCBmcm9tIENSVEM6JWQgYXQgJXU6JXVcbiIsCj4gPiA+ICsJCWNydGNf aWQsIHR2X3NlYywgdHZfdXNlYyk7Cj4gPiA+ICsKPiA+ID4gKwlpZiAodHZfc2VjIDwgX3R2X3Nl YykKPiA+ID4gKwkJX3R2X3NlYyA9IHR2X3NlYzsKPiA+ID4gKwlpZiAodHZfdXNlYyA8IF90dl91 c2VjKQo+ID4gPiArCQlfdHZfdXNlYyA9IHR2X3VzZWM7Cj4gPiAKPiA+IFRoaXMgdXBkYXRlcyB0 aGUgdGltZXN0YW1wIG9uIGVhY2ggcGFnZS1mbGlwLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGZpcnN0 Cj4gPiBhbmQgbGFzdCBwYWdlLWZsaXBzIGNvdWxkIGJlIGRlbGF5ZWQgYnkgbW9yZSB0aGFuIDEw wrVzIGlmIHRoZXJlIGFyZQo+ID4gaW50ZXJtZWRpYXRlIHBhZ2UtZmxpcHMuIEZvciBpbnN0YW5j ZSwgaWYgdGhlIGZpcnN0IHBhZ2UtZmxpcCBoYXBwZW5zCj4gPiBhdCB0PTDCtXMgYW5kIHRoZSBz ZWNvbmQgb25lIGhhcHBlbnMgYXQgdD05wrVzLCB0aGUgbGFzdCBvbmUgY291bGQgaGFwcGVuCj4g PiBhdCB0PTE4wrVzIHdpdGhvdXQgbWFraW5nIHRoaXMgdGVzdCBmYWlscy4gSXMgdGhpcyBzb21l dGhpbmcgd2Ugd2FudCB0bwo+ID4gYWxsb3c/Cj4gCj4gTm9wZSBhbGwgb2YgdGhlbSBzaG91bGQg aGFwcGVuIHdpdGhpbiB0aGUgc2FtZSB2Ymxhbmsgc28gdGhlIGRpZmYgYmV0d2VlbiBhbGwKPiBz aG91bGQgYmUgPDEwdXMsIHdpbGwgaGF2ZSB0byBtb2RpZnkgdGhlIGxvZ2ljIHRvIGRvIHRoYXQu Cj4gCj4gc28gYmFzaWNhbGx5IGluc3RlYWQgb2YgbWFraW5nIDwxMHVzIGNvbmRpdGlvbiBmb3Ig dGhlIGNvbnNlY3V0aXZlIG9uZXMsIGl0IHNob3VsZCBiZSBiZXR3ZWVuIHRoZSBmaXJzdCBvbmUK PiBhbmQgYWxsIG90aGVyIGV2ZW50cywgY29ycmVjdD8KPiAKPiA+IAo+ID4gPiArfQo+ID4gPiAr Cj4gPiA+ICtzdGF0aWMgdm9pZCB3YWl0X2Zvcl9wYWdlZmxpcChpbnQgZHJtX2ZkKQo+ID4gPiAr ewo+ID4gPiArCXN0cnVjdCBwb2xsZmQgcGZkOwo+ID4gPiArCWRybUV2ZW50Q29udGV4dCBkcm1f ZXZlbnQ7Cj4gPiAKPiA+IE5pdDogdG8gbWFrZSBzdXJlIGdhcmJhZ2UgaXNuJ3QgcmVhZCBmcm9t IHRoaXMgc3RydWN0ICh0aGVyZSBhcmUgb3RoZXIKPiA+IGZ1bmN0aW9uIHBvaW50ZXJzKSwgaXQn cyBwcm9iYWJseSBzYWZlciB0byB6ZXJvLWZpbGwgaXQgKD0gezB9KS4KPiAKPiBHb3QgaXQKPiAK PiA+IAo+ID4gPiArCWRybV9ldmVudC52ZXJzaW9uID0gMzsKPiA+ID4gKwlkcm1fZXZlbnQucGFn ZV9mbGlwX2hhbmRsZXIyID0gcGFnZV9mbGlwX2hhbmRsZXI7Cj4gPiA+ICsKPiA+ID4gKwlwZmQu ZmQgPSBkcm1fZmQ7Cj4gPiA+ICsJcGZkLmV2ZW50cyA9IFBPTExJTjsKPiA+ID4gKwlwZmQucmV2 ZW50cyA9IDA7Cj4gPiA+ICsKPiA+ID4gKwlwb2xsKCZwZmQsIDEsIDEwMDApOwo+ID4gCj4gPiBN YXliZSB3ZSBzaG91bGQgY2hlY2sgcG9sbCgyKSdzIHJldHVybiB2YWx1ZT8KPiAKPiBwb2xsKDIp PyBPciBqdXN0IGNoZWNrIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gcG9sbCgpIGp1c3Qg Zm9yIGVycm9yIGhhbmRsaW5nPwo+IAo+ID4gCj4gPiA+ICsJaWYgKHBmZC5yZXZlbnRzICYgUE9M TElOKQo+ID4gPiArCQlkcm1IYW5kbGVFdmVudChkcm1fZmQsICZkcm1fZXZlbnQpOwo+ID4gCj4g PiBJZiB3ZSBkb24ndCBnZXQgUE9MTElOIChlLmcuIGlmIHdlIHRpbWVvdXQpLCB3YWl0X2Zvcl9w YWdlZmxpcCB3aWxsCj4gPiBzaWxlbnRseSBkbyBub3RoaW5nLCBhbmQgdGhlIHRlc3Qgd2lsbCBw YXNzLiBJbnN0ZWFkLCB3ZSBwcm9iYWJseSB3YW50Cj4gPiB0byBmYWlsIGluIHRoaXMgY2FzZS4K PiAKPiBZZXMgdGhhdHMgY29ycmVjdCwganVzdCBhZGQgZWxzZSBjYXNlIHdpdGggaWd0X2Fzc2Vy dD8KPiAKPiA+IAo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtpZ3RfbWFpbgo+ID4gPiArewo+ID4g PiArCWlndF9kaXNwbGF5X3QgZGlzcGxheTsKPiA+ID4gKwlkYXRhX2Nvbm5lY3Rvcl90ICpjb25u X2RhdGEgPSBOVUxMOwo+ID4gPiArCWRhdGFfdCBkYXRhID0gey5kcm1fZmQgPSAwLCAubnVtX2hf dGlsZXMgPSAwLAo+ID4gPiArCQkgICAgICAgLmRpc3BsYXkgPSBOVUxMLCAuY29tbWl0ID0gQ09N TUlUX0xFR0FDWX07Cj4gPiAKPiA+IE5pdDogb25lIGNhbiBqdXN0IGRvIGFzc2lnbiB0byB7MH0g dG8gemVyby1maWxsIHRoZSBzdHJ1Y3QuCj4gCj4gR290IGl0Cj4gCj4gPiAKPiA+ID4gKwlpZ3Rf Zml4dHVyZSB7Cj4gPiA+ICsJCWRhdGEuZHJtX2ZkID0gZHJtX29wZW5fZHJpdmVyX21hc3RlcihE UklWRVJfQU5ZKTsKPiA+ID4gKwo+ID4gPiArCQlrbXN0ZXN0X3NldF92dF9ncmFwaGljc19tb2Rl KCk7Cj4gPiA+ICsJCWlndF9kaXNwbGF5X3JlcXVpcmUoJmRpc3BsYXksIGRhdGEuZHJtX2ZkKTsK PiA+ID4gKwkJaWd0X2Rpc3BsYXlfcmVzZXQoJmRpc3BsYXkpOwo+ID4gPiArCj4gPiA+ICsJCWRh dGEuZGlzcGxheSA9ICZkaXNwbGF5Owo+ID4gPiArCj4gPiA+ICsJCWdldF9udW1iZXJfb2ZfaF90 aWxlcygmZGF0YSk7Cj4gPiA+ICsJCWlndF9kZWJ1ZygiTnVtYmVyIG9mIEhvcml6b250YWwgVGls ZXM6ICVkXG4iLCBkYXRhLm51bV9oX3RpbGVzKTsKPiA+ID4gKwo+ID4gPiArCQlkYXRhLmNvbW1p dCA9IGRhdGEuZGlzcGxheS0+aXNfYXRvbWljID8gQ09NTUlUX0FUT01JQyA6IENPTU1JVF9MRUdB Q1k7Cj4gPiAKPiA+IFNob3VsZCB3ZSB0cnkgdG8gcnVuIHRoaXMgdGVzdCBhdCBhbGwgb24gZHJp dmVycyB0aGF0IGRvbid0IHN1cHBvcnQKPiA+IGF0b21pYz8KPiA+IAo+ID4gSWYgdGhlIGRyaXZl ciBkb2Vzbid0IHN1cHBvcnQgYXRvbWljLCB1c2VyLXNwYWNlIHdpbGwgc3VibWl0IHR3byBwYWdl LQo+ID4gZmxpcCByZXF1ZXN0cy4gSG93ZXZlciBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGhhcmR3 YXJlIGV4ZWN1dGVzIGEgcGFnZS0KPiA+IGZsaXAgYmV0d2VlbiBib3RoIHJlcXVlc3RzOiB1c2Vy LXNwYWNlIGNhbGxzIHRoZSBmaXJzdCBkcm1Nb2RlUGFnZUZsaXAsCj4gPiB0aGUgdmJsYW5rIGZv ciB0aGlzIHBhcnRpY3VsYXIgQ1JUQyB0cmlnZ2VycywgdGhlbiB1c2VyLXNwYWNlIGNhbGxzIHRo ZQo+ID4gc2Vjb25kIGRybU1vZGVQYWdlRmxpcC4gUGFnZS1mbGlwcyB3aWxsIGJlIG91dC1vZi1z eW5jIGJ5IG9uZSBmcmFtZS4KPiAKPiBIbW0sIHllYSBzaG91bGQgcHJvYmJhbHkgaGF2ZSBpZ3Rf cmVxdWlyZSBvbiBhdG9taWMKPiAKPiA+IAo+ID4gPiArCQlpZiAoZGF0YS5udW1faF90aWxlcyA+ IDApCj4gPiA+ICsJCQljb25uX2RhdGEgPSBtYWxsb2MoZGF0YS5udW1faF90aWxlcyAqIHNpemVv ZihkYXRhX2Nvbm5lY3Rvcl90KSk7Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJaWd0X3N1YnRl c3QoImJhc2ljLXRlc3QtcGF0dGVybiIpIHsKPiA+ID4gKwkJaWd0X3NraXBfb24oZGF0YS5udW1f aF90aWxlcyA9PSAwKTsKPiA+ID4gKwkJaWd0X2Fzc2VydChjb25uX2RhdGEpOwo+ID4gPiArCj4g PiA+ICsJCWdldF9jb25uZWN0b3IoJmRhdGEsIGNvbm5fZGF0YSk7Cj4gPiA+ICsJCXNldHVwX21v ZGUoJmRhdGEsIGNvbm5fZGF0YSk7Cj4gPiA+ICsJCXNldHVwX2ZyYW1lYnVmZmVyKCZkYXRhLCBj b25uX2RhdGEpOwo+ID4gPiArCQlpZ3RfZGlzcGxheV9jb21taXRfYXRvbWljKGRhdGEuZGlzcGxh eSwgRFJNX01PREVfQVRPTUlDX05PTkJMT0NLIHwKPiA+ID4gKwkJCURSTV9NT0RFX1BBR0VfRkxJ UF9FVkVOVCwgTlVMTCk7Cj4gPiA+ICsJCXdhaXRfZm9yX3BhZ2VmbGlwKGRhdGEuZHJtX2ZkKTsK PiA+IAo+ID4gSGVyZSB3ZSBvbmx5IHdhaXQgZm9yIGEgc2luZ2xlIHBhZ2UtZmxpcC4gVGhpcyB3 aWxsIG9ubHkgc3Rhc2ggdGhlCj4gPiB0aW1lc3RhbXAgb2YgdGhlIGZyc3QgcGFnZS1mbGlwIHdp dGhvdXQgY2hlY2tpbmcgdGhlIHRpbWUtc3RhbXAgb2YKPiA+IHN1YnNlcXVlbnQgcGFnZS1mbGlw cy4gV2Ugc2hvdWxkIHdhaXQgZm9yIGFzIG1hbnkgcGFnZS1mbGlwcyBhcyBlbmFibGVkCj4gPiB0 aWxlZCBjb25uZWN0b3JzLgo+IAo+IFRoYXQgd2FzIG91ciBpbml0aWFsIHVuZGVyc3RhbmRpbmcg YXMgd2VsbCwgYnV0IHdpdGgganVzdCBvbmUgd2FpdF9mb3JfcGFnZWZsaXAgY2FsbCB3ZQo+IHdl cmUgZ2V0aW5nIHR3byBwYWdlIGZsaXAgZXZlbnRzIGZvciB0d28gdGlsZXMKPiBEbyB3ZSBuZWVk IHRvIGNhbGwgd2FpdCBmb3IgcGFnZSBmbGlwIGV4cGxpY2l0bHkgdGhlIG51bWJlciBvZiB0aW1l cyA9IG51bWJlciBvZiB0aWxlcz8KPiAKPiBSZWdhcmRzCj4gTWFuYXNpCj4gCj4gPiAKPiA+ID4g KwkJdGVzdF9jbGVhbnVwKCZkYXRhLCBjb25uX2RhdGEpOwo+ID4gPiArCX0KPiA+ID4gKwo+ID4g PiArCWlndF9maXh0dXJlIHsKPiA+ID4gKwkJZnJlZShjb25uX2RhdGEpOwo+ID4gPiArCQljbG9z ZShkYXRhLmRybV9mZCk7Cj4gPiA+ICsJCWttc3Rlc3RfcmVzdG9yZV92dF9tb2RlKCk7Cj4gPiA+ ICsJCWlndF9kaXNwbGF5X2ZpbmkoZGF0YS5kaXNwbGF5KTsKPiA+ID4gKwl9Cj4gPiA+ICt9Cj4g PiA+IGRpZmYgLS1naXQgYS90ZXN0cy9tZXNvbi5idWlsZCBiL3Rlc3RzL21lc29uLmJ1aWxkCj4g PiA+IGluZGV4IGE3YjJiMzIyLi41MDI5MmRmOCAxMDA2NDQKPiA+ID4gLS0tIGEvdGVzdHMvbWVz b24uYnVpbGQKPiA+ID4gKysrIGIvdGVzdHMvbWVzb24uYnVpbGQKPiA+ID4gQEAgLTI2LDYgKzI2 LDcgQEAgdGVzdF9wcm9ncyA9IFsKPiA+ID4gIAkna21zX2N1cnNvcl9lZGdlX3dhbGsnLAo+ID4g PiAgCSdrbXNfY3Vyc29yX2xlZ2FjeScsCj4gPiA+ICAJJ2ttc19kcF9kc2MnLAo+ID4gPiArCSdr bXNfZHBfdGlsZWRfZGlzcGxheScsCj4gPiA+ICAJJ2ttc19kcmF3X2NyYycsCj4gPiA+ICAJJ2tt c19mYmNvbl9mYnQnLAo+ID4gPiAgCSdrbXNfZmVuY2VfcGluX2xlYWsnLAo+IF9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gaWd0LWRldiBtYWlsaW5nIGxp c3QKPiBpZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2lndC1kZXY=