From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH i-g-t 5/5] tests/perf_pmu: Tests for i915 PMU API Date: Tue, 19 Sep 2017 09:37:35 +0100 Message-ID: References: <20170918113840.2684-1-tvrtko.ursulin@linux.intel.com> <20170918113840.2684-6-tvrtko.ursulin@linux.intel.com> <150574064280.566.8526258542604615934@mail.alporthouse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 746B76E526 for ; Tue, 19 Sep 2017 08:37:39 +0000 (UTC) In-Reply-To: <150574064280.566.8526258542604615934@mail.alporthouse.com> Content-Language: en-GB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , Tvrtko Ursulin , Intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDE4LzA5LzIwMTcgMTQ6MTcsIENocmlzIFdpbHNvbiB3cm90ZToKPiBRdW90aW5nIFR2cnRr byBVcnN1bGluICgyMDE3LTA5LTE4IDEyOjM4OjQwKQo+PiBGcm9tOiBUdnJ0a28gVXJzdWxpbiA8 dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgo+Pgo+PiBBIGJ1bmNoIG9mIHRlc3RzIGZvciB0aGUg bmV3IGk5MTUgUE1VIGZlYXR1cmUuCj4+Cj4+IFBhcnRzIG9mIHRoZSBjb2RlIHdlcmUgaW5pdGlh bHkgc2tldGNoZWQgYnkgRG1pdHJ5IFJvZ296aGtpbi4KPj4KPj4gU2lnbmVkLW9mZi1ieTogVHZy dGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KPj4gQ2M6IENocmlzIFdpbHNv biA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+PiBDYzogRG1pdHJ5IFJvZ296aGtpbiA8ZG1p dHJ5LnYucm9nb3poa2luQGludGVsLmNvbT4KPj4gLS0tCj4+ICAgbGliL2lndF9ndC5jICAgICAg ICAgICB8ICAyMyArLQo+PiAgIGxpYi9pZ3RfZ3QuaCAgICAgICAgICAgfCAgIDggKwo+PiAgIHRl c3RzL01ha2VmaWxlLnNvdXJjZXMgfCAgIDEgKwo+PiAgIHRlc3RzL3BlcmZfcG11LmMgICAgICAg fCA3MTMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ PiAgIDQgZmlsZXMgY2hhbmdlZCwgNzM4IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCj4+ ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL3BlcmZfcG11LmMKPj4KPj4gZGlmZiAtLWdpdCBh L2xpYi9pZ3RfZ3QuYyBiL2xpYi9pZ3RfZ3QuYwo+PiBpbmRleCBiM2YzYjM4MDllZWUuLjEwMmNj Mjg0MWZlYiAxMDA2NDQKPj4gLS0tIGEvbGliL2lndF9ndC5jCj4+ICsrKyBiL2xpYi9pZ3RfZ3Qu Ywo+PiBAQCAtNTM3LDE0ICs1MzcsMjMgQEAgdW5zaWduZWQgaW50ZWxfZGV0ZWN0X2FuZF9jbGVh cl9taXNzZWRfaW50ZXJydXB0cyhpbnQgZmQpCj4+ICAgICAgICAgIHJldHVybiBtaXNzZWQ7Cj4+ ICAgfQo+PiAgIAo+PiArZW51bSBkcm1faTkxNV9nZW1fZW5naW5lX2NsYXNzIHsKPj4gKyAgICAg ICBJOTE1X0VOR0lORV9DTEFTU19PVEhFUiA9IDAsCj4+ICsgICAgICAgSTkxNV9FTkdJTkVfQ0xB U1NfUkVOREVSID0gMSwKPj4gKyAgICAgICBJOTE1X0VOR0lORV9DTEFTU19DT1BZID0gMiwKPj4g KyAgICAgICBJOTE1X0VOR0lORV9DTEFTU19WSURFTyA9IDMsCj4+ICsgICAgICAgSTkxNV9FTkdJ TkVfQ0xBU1NfVklERU9fRU5IQU5DRSA9IDQsCj4+ICsgICAgICAgSTkxNV9FTkdJTkVfQ0xBU1Nf TUFYIC8qIG5vbi1BQkkgKi8KPj4gK307Cj4+ICsKPj4gICBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhl Y3V0aW9uX2VuZ2luZSBpbnRlbF9leGVjdXRpb25fZW5naW5lc1tdID0gewo+PiAtICAgICAgIHsg ImRlZmF1bHQiLCBOVUxMLCAwLCAwIH0sCj4+IC0gICAgICAgeyAicmVuZGVyIiwgInJjczAiLCBJ OTE1X0VYRUNfUkVOREVSLCAwIH0sCj4+IC0gICAgICAgeyAiYnNkIiwgInZjczAiLCBJOTE1X0VY RUNfQlNELCAwIH0sCj4+IC0gICAgICAgeyAiYnNkMSIsICJ2Y3MwIiwgSTkxNV9FWEVDX0JTRCwg MTw8MTMgLypJOTE1X0VYRUNfQlNEX1JJTkcxKi8gfSwKPj4gLSAgICAgICB7ICJic2QyIiwgInZj czEiLCBJOTE1X0VYRUNfQlNELCAyPDwxMyAvKkk5MTVfRVhFQ19CU0RfUklORzIqLyB9LAo+PiAt ICAgICAgIHsgImJsdCIsICJiY3MwIiwgSTkxNV9FWEVDX0JMVCwgMCB9LAo+PiAtICAgICAgIHsg InZlYm94IiwgInZlY3MwIiwgSTkxNV9FWEVDX1ZFQk9YLCAwIH0sCj4+ICsgICAgICAgeyAiZGVm YXVsdCIsIE5VTEwsIC0xLCAtMSwgMCwgMCB9LAo+PiArICAgICAgIHsgInJlbmRlciIsICJyY3Mw IiwgSTkxNV9FTkdJTkVfQ0xBU1NfUkVOREVSLCAwLCBJOTE1X0VYRUNfUkVOREVSLCAwIH0sCj4+ ICsgICAgICAgeyAiYnNkIiwgInZjczAiLCBJOTE1X0VOR0lORV9DTEFTU19WSURFTywgMCwgSTkx NV9FWEVDX0JTRCwgMCB9LAo+PiArICAgICAgIHsgImJzZDEiLCAidmNzMCIsIEk5MTVfRU5HSU5F X0NMQVNTX1ZJREVPLCAwLCBJOTE1X0VYRUNfQlNELCAxPDwxMyAvKkk5MTVfRVhFQ19CU0RfUklO RzEqLyB9LAo+PiArICAgICAgIHsgImJzZDIiLCAidmNzMSIsIEk5MTVfRU5HSU5FX0NMQVNTX1ZJ REVPLCAxLCBJOTE1X0VYRUNfQlNELCAyPDwxMyAvKkk5MTVfRVhFQ19CU0RfUklORzIqLyB9LAo+ PiArICAgICAgIHsgImJsdCIsICJiY3MwIiwgSTkxNV9FTkdJTkVfQ0xBU1NfQ09QWSwgMCwgSTkx NV9FWEVDX0JMVCwgMCB9LAo+PiArICAgICAgIHsgInZlYm94IiwgInZlY3MwIiwgSTkxNV9FTkdJ TkVfQ0xBU1NfVklERU9fRU5IQU5DRSwgMCwgSTkxNV9FWEVDX1ZFQk9YLCAwIH0sCj4+ICAgICAg ICAgIHsgTlVMTCwgMCwgMCB9Cj4gCj4gSSB3YXMgYW50aWNpcGF0aW5nIGEgbmV3IHN0cnVjdCBm b3IgdGhlIGV4cGxpY2l0IGludGVyZmFjZSBzbyB0aGF0IHdlCj4gY2FuIGVhc2lseSBwaGFzZSBv dXQgdGhlIG91dCB3aXRoIGl0cyBhbGlhc2luZy4KCkl0J3MgZGVmaW5pdGVseSBidWdneSBhcyBp dCBpcyBhcyBEbWl0cnkgaGFzIGRpc2NvdmVyZWQuIEknbGwgaGF2ZSBhIAp0aGluayBvbiBob3cg dG8gZG8gaXQgZWxlZ2FudGx5LiBUb28gYmFkIHdlIGNhbid0IHBpZ2d5IGJhY2sgdGhlIApjbGFz cy1pbnN0YW5jZSBleGVjYnVmIHRvIHRoaXMuLgoKPj4gICB9Owo+PiAgIAo+PiBkaWZmIC0tZ2l0 IGEvbGliL2lndF9ndC5oIGIvbGliL2lndF9ndC5oCj4+IGluZGV4IDI1NzljYmQzN2JlNy4uNDM2 MDQxY2U5Y2MwIDEwMDY0NAo+PiAtLS0gYS9saWIvaWd0X2d0LmgKPj4gKysrIGIvbGliL2lndF9n dC5oCj4+IEBAIC02Niw2ICs2Niw4IEBAIHVuc2lnbmVkIGludGVsX2RldGVjdF9hbmRfY2xlYXJf bWlzc2VkX2ludGVycnVwdHMoaW50IGZkKTsKPj4gICBleHRlcm4gY29uc3Qgc3RydWN0IGludGVs X2V4ZWN1dGlvbl9lbmdpbmUgewo+PiAgICAgICAgICBjb25zdCBjaGFyICpuYW1lOwo+PiAgICAg ICAgICBjb25zdCBjaGFyICpmdWxsX25hbWU7Cj4+ICsgICAgICAgaW50IGNsYXNzOwo+PiArICAg ICAgIGludCBpbnN0YW5jZTsKPj4gICAgICAgICAgdW5zaWduZWQgZXhlY19pZDsKPj4gICAgICAg ICAgdW5zaWduZWQgZmxhZ3M7Cj4+ICAgfSBpbnRlbF9leGVjdXRpb25fZW5naW5lc1tdOwo+PiBA QCAtNzgsNiArODAsMTIgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5n aW5lIHsKPj4gICAgICAgICAgICAgICBlX18rKykgXAo+PiAgICAgICAgICAgICAgICAgIGZvcl9p ZiAoZ2VtX2hhc19yaW5nKGZkX18sIGZsYWdzX18gPSBlX18tPmV4ZWNfaWQgfCBlX18tPmZsYWdz KSkKPj4gICAKPj4gKyNkZWZpbmUgZm9yX2VhY2hfZW5naW5lX2NsYXNzX2luc3RhbmNlKGZkX18s IGVfXykgXAo+PiArICAgICAgIGZvciAoKGVfXykgPSBpbnRlbF9leGVjdXRpb25fZW5naW5lcztc Cj4+ICsgICAgICAgICAgICAoZV9fKS0+bmFtZTsgXAo+PiArICAgICAgICAgICAgKGVfXykrKykg XAo+PiArICAgICAgICAgICAgICAgZm9yX2lmICgoZV9fKS0+Y2xhc3MgPiAwKQo+PiArCj4+ICAg Ym9vbCBnZW1fY2FuX3N0b3JlX2R3b3JkKGludCBmZCwgdW5zaWduZWQgaW50IGVuZ2luZSk7Cj4+ ICAgCj4+ICAgI2VuZGlmIC8qIElHVF9HVF9IICovCj4+IGRpZmYgLS1naXQgYS90ZXN0cy9NYWtl ZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+PiBpbmRleCBjZjU0MmRmMTgx YTguLjRiYWI2MjQ3MTUxYyAxMDA2NDQKPj4gLS0tIGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ PiArKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4+IEBAIC0yMTcsNiArMjE3LDcgQEAgVEVT VFNfcHJvZ3MgPSBcCj4+ICAgICAgICAgIGttc192YmxhbmsgXAo+PiAgICAgICAgICBtZXRhX3Rl c3QgXAo+PiAgICAgICAgICBwZXJmIFwKPj4gKyAgICAgICBwZXJmX3BtdSBcCj4+ICAgICAgICAg IHBtX2JhY2tsaWdodCBcCj4+ICAgICAgICAgIHBtX2xwc3AgXAo+PiAgICAgICAgICBwbV9yYzZf cmVzaWRlbmN5IFwKPj4gZGlmZiAtLWdpdCBhL3Rlc3RzL3BlcmZfcG11LmMgYi90ZXN0cy9wZXJm X3BtdS5jCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uMmRi ZWU1ODZkYWNjCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvdGVzdHMvcGVyZl9wbXUuYwo+PiBA QCAtMCwwICsxLDcxMyBAQAo+PiArLyoKPj4gKyAqIENvcHlyaWdodCDCqSAyMDE3IEludGVsIENv cnBvcmF0aW9uCj4+ICsgKgo+PiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJl ZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPj4gKyAqIGNvcHkgb2YgdGhp cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3 YXJlIiksCj4+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwg Y29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPj4g KyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVy c29ucyB0byB3aG9tIHRoZQo+PiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBz dWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPj4gKyAqCj4+ICsgKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5n IHRoZSBuZXh0Cj4+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3Bp ZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4+ICsgKiBTb2Z0d2FyZS4KPj4gKyAq Cj4+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5U WSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+PiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBO T1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4+ICsgKiBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4g Tk8gRVZFTlQgU0hBTEwKPj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJF IExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4+ICsgKiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJ U0lORwo+PiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB UkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+PiArICogSU4gVEhFIFNPRlRXQVJFLgo+ PiArICoKPj4gKyAqLwo+PiArCj4+ICsjaW5jbHVkZSA8c3RkbGliLmg+Cj4+ICsjaW5jbHVkZSA8 c3RkaW8uaD4KPj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4KPj4gKyNpbmNsdWRlIDxmY250bC5oPgo+ PiArI2luY2x1ZGUgPGludHR5cGVzLmg+Cj4+ICsjaW5jbHVkZSA8ZXJybm8uaD4KPj4gKyNpbmNs dWRlIDxzeXMvc3RhdC5oPgo+PiArI2luY2x1ZGUgPHN5cy90aW1lLmg+Cj4+ICsjaW5jbHVkZSA8 c3lzL3RpbWVzLmg+Cj4+ICsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cj4+ICsjaW5jbHVkZSA8ZGly ZW50Lmg+Cj4+ICsjaW5jbHVkZSA8dGltZS5oPgo+PiArI2luY2x1ZGUgPHBvbGwuaD4KPj4gKwo+ PiArI2luY2x1ZGUgImlndC5oIgo+PiArI2luY2x1ZGUgImlndF9wZXJmLmgiCj4+ICsKPj4gK0lH VF9URVNUX0RFU0NSSVBUSU9OKCJUZXN0IHRoZSBpOTE1IHBtdSBwZXJmIGludGVyZmFjZSIpOwo+ PiArCj4+ICtjb25zdCBkb3VibGUgdG9sZXJhbmNlID0gMC4wMmY7Cj4+ICtjb25zdCB1bnNpZ25l ZCBsb25nIGJhdGNoX2R1cmF0aW9uX25zID0gMTAwMCAqIDEwMDAgKiAxMDAwIC8gMjsKPj4gKwo+ PiArc3RhdGljIHZvaWQKPj4gK2luaXQoaW50IGdlbV9mZCwgY29uc3Qgc3RydWN0IGludGVsX2V4 ZWN1dGlvbl9lbmdpbmUgKmUsIHVpbnQ4X3Qgc2FtcGxlKQo+PiArewo+PiArICAgICAgIHVpbnQ2 NF90IGNvbmZpZyA9IF9fSTkxNV9QTVVfRU5HSU5FKGUtPmNsYXNzLCBlLT5pbnN0YW5jZSwgc2Ft cGxlKTsKPj4gKyAgICAgICBpbnQgZmQ7Cj4+ICsKPj4gKyAgICAgICBpZ3RfcmVxdWlyZShnZW1f aGFzX3JpbmcoZ2VtX2ZkLCBlLT5leGVjX2lkIHwgZS0+ZmxhZ3MpKTsKPiAKPiBnZW1fcmVxdWly ZV9yaW5nKCkKCk1pc3NlZCB0aGUgZXhpc3RhbmNlIG9mIGl0LgoKCj4gCj4+ICsKPj4gKyAgICAg ICBmZCA9IHBlcmZfaTkxNV9vcGVuKGNvbmZpZyk7Cj4gCj4gQWx0aG91Z2ggdGhlIGtlcm5lbCBp bnRlcmZhY2UgaXMgdGhlIGF1dGhvcml0eS4KPiAKPiBTbyB0aGlzIHNob3VsZCBiZSBpZ3RfcmVx dWlyZSwgYW5kIGlndF9hc3NlcnQoaGFzX3JpbmcpOwoKRG9uJ3QgZ2V0IHdoYXQgeW91IGFyZSBz YXlpbmcsIGlndF9yZXF1aXJlKGhhc19yaW5nKSBmb2xsb3dlZCBieSAKaWd0X2Fzc2VydChoYXNf cmluZyk/PwoKPiAKPj4gKyAgICAgICBpZ3RfYXNzZXJ0KGZkID49IDApOwo+PiArCj4+ICsgICAg ICAgY2xvc2UoZmQpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdWludDY0X3QgcG11X3JlYWRfc2lu Z2xlKGludCBmZCkKPj4gK3sKPj4gKyAgICAgICB1aW50NjRfdCBkYXRhWzJdOwo+PiArICAgICAg IHNzaXplX3QgbGVuOwo+PiArCj4+ICsgICAgICAgbGVuID0gcmVhZChmZCwgZGF0YSwgc2l6ZW9m KGRhdGEpKTsKPiAKPiBQZXJmIGlzIGEgZGF0YWdyYW0gYXBpLCByaWdodD8gQSBzaG9ydCByZWFk IGdpdmVzIHdoYXQgeW91IGFza2VkIGZvciBhbmQKPiBkaXNjYXJkcyB0aGUgcmVzdCBvZiB0aGUg cGFja2V0LCBpaXJjLgoKTm9wZSwgSSd2ZSBub3RpY2VkIG92ZXJsYXkgd2FzIGZhaWxpbmcgZHVl IHRoYXQgYXNzdW1wdGlvbiBhbmQgZXZlbiAKdHJhY2VkIHRoZSBjb2RlIGluIGNvcmUgcGVyZiB3 aGljaCBmYWlscyBzaG9ydCByZWFkcy4gSGVuY2UgdGhlIHBhdGNoIGluIAp0aGlzIHNlcmllcyB0 byBmaXggb3ZlcmxheSBpbiB0aGF0IHJlc3BlY3QuCgo+IAo+PiArICAgICAgIGlndF9hc3NlcnRf ZXEobGVuLCBzaXplb2YoZGF0YSkpOwo+PiArCj4+ICsgICAgICAgcmV0dXJuIGRhdGFbMF07Cj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHBtdV9yZWFkX211bHRpKGludCBmZCwgdW5zaWduZWQg aW50IG51bSwgdWludDY0X3QgKnZhbCkKPj4gK3sKPj4gKyAgICAgICB1aW50NjRfdCBidWZbMiAr IG51bV07Cj4+ICsgICAgICAgdW5zaWduZWQgaW50IGk7Cj4+ICsgICAgICAgc3NpemVfdCBsZW47 Cj4+ICsKPj4gKyAgICAgICBsZW4gPSByZWFkKGZkLCBidWYsIHNpemVvZihidWYpKTsKPj4gKyAg ICAgICBpZ3RfYXNzZXJ0X2VxKGxlbiwgc2l6ZW9mKGJ1ZikpOwo+PiArICAgICAgIGZvciAoaSA9 IDA7IGkgPCBudW07IGkrKykKPj4gKyAgICAgICAgICAgICAgIHZhbFtpXSA9IGJ1ZlsyICsgaV07 Cj4+ICt9Cj4+ICsKPj4gKyNkZWZpbmUgYXNzZXJ0X3dpdGhpbl9lcHNpbG9uKHgsIHJlZiwgdG9s ZXJhbmNlKSBcCj4+ICsgICAgICAgaWd0X2Fzc2VydF9mKChkb3VibGUpKHgpIDw9ICgxLjAgKyB0 b2xlcmFuY2UpICogKGRvdWJsZSlyZWYgJiYgXAo+PiArICAgICAgICAgICAgICAgICAgICAoZG91 YmxlKSh4KSA+PSAoMS4wIC0gdG9sZXJhbmNlKSAqIChkb3VibGUpcmVmLCBcCj4+ICsgICAgICAg ICAgICAgICAgICAgICInJXMnICE9ICclcycgKCVmIG5vdCB3aXRoaW4gJWYlJSB0b2xlcmFuY2Ug b2YgJWYpXG4iLFwKPj4gKyAgICAgICAgICAgICAgICAgICAgI3gsICNyZWYsIChkb3VibGUpeCwg dG9sZXJhbmNlICogMTAwLjAsIChkb3VibGUpcmVmKQo+PiArCj4+ICtzdGF0aWMgdm9pZAo+PiAr c2luZ2xlKGludCBnZW1fZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lICpl LCBib29sIGJ1c3kpCj4+ICt7Cj4+ICsgICAgICAgdWludDY0X3QgY29uZmlnID0gSTkxNV9QTVVf RU5HSU5FX0JVU1koZS0+Y2xhc3MsIGUtPmluc3RhbmNlKTsKPj4gKyAgICAgICBkb3VibGUgcmVm ID0gYnVzeSA/IGJhdGNoX2R1cmF0aW9uX25zIDogMC4wZjsKPj4gKyAgICAgICBpZ3Rfc3Bpbl90 ICpzcGluOwo+PiArICAgICAgIHVpbnQ2NF90IHZhbDsKPj4gKyAgICAgICBpbnQgZmQ7Cj4+ICsK Pj4gKyAgICAgICBpZ3RfcmVxdWlyZShnZW1faGFzX3JpbmcoZ2VtX2ZkLCBlLT5leGVjX2lkIHwg ZS0+ZmxhZ3MpKTsKPj4gKwo+PiArICAgICAgIGlmIChidXN5KSB7Cj4+ICsgICAgICAgICAgICAg ICBzcGluID0gaWd0X3NwaW5fYmF0Y2hfbmV3KGdlbV9mZCwgMCwgZS0+ZXhlY19pZCB8IGUtPmZs YWdzLCAwKTsKPj4gKyAgICAgICAgICAgICAgIGlndF9zcGluX2JhdGNoX3NldF90aW1lb3V0KHNw aW4sIGJhdGNoX2R1cmF0aW9uX25zKTsKPj4gKyAgICAgICB9IGVsc2Ugewo+PiArICAgICAgICAg ICAgICAgdXNsZWVwKGJhdGNoX2R1cmF0aW9uX25zIC8gMTAwMCk7Cj4+ICsgICAgICAgfQo+PiAr Cj4+ICsgICAgICAgZmQgPSBwZXJmX2k5MTVfb3Blbihjb25maWcpOwo+PiArICAgICAgIGlndF9h c3NlcnQoZmQgPj0gMCk7Cj4+ICsKPj4gKyAgICAgICBpZiAoYnVzeSkKPj4gKyAgICAgICAgICAg ICAgIGdlbV9zeW5jKGdlbV9mZCwgc3Bpbi0+aGFuZGxlKTsKPj4gKwo+PiArICAgICAgIHZhbCA9 IHBtdV9yZWFkX3NpbmdsZShmZCk7Cj4+ICsKPj4gKyAgICAgICBhc3NlcnRfd2l0aGluX2Vwc2ls b24odmFsLCByZWYsIHRvbGVyYW5jZSk7Cj4+ICsKPj4gKyAgICAgICBpZiAoYnVzeSkKPj4gKyAg ICAgICAgICAgICAgIGlndF9zcGluX2JhdGNoX2ZyZWUoZ2VtX2ZkLCBzcGluKTsKPj4gKyAgICAg ICBjbG9zZShmZCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkCj4+ICtidXN5X2NoZWNrX2Fs bChpbnQgZ2VtX2ZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZSAqZSwKPiAK PiBidXN5X2NoZWNrX290aGVycwo+IAo+IGJ1c3lfY2hlY2tfYWxsIEkgd291bGQgZXhwZWN0IHRv IGJlIGNoZWNraW5nIHRoYXQgYWxsIGVuZ2luZXMgYXJlCj4gY29ycmVjdGx5IHJlY29yZGVkIGFz IGJlaW5nIGJ1c3kgYXQgdGhlIHNhbWUgdGltZS4gQW5kIHRoZXJlIHNob3VsZCBhbHNvCj4gYmUg cGVybXV0YXRpb25zIG9mIChidXN5LCBpZGxlLCB3YWl0KSBhY3Jvc3MgdGhlIGVuZ2luZXMuCgpJ IGNhbiBkbyB0aGF0LCBzdXJlLiBCdXQgaXQgaXMgY2hlY2tpbmcgYWxsIGVuZ2luZXMsIGp1c3Qg c29tZSBmb3IgMTAwJSAKYnVzeSwgYW5kIHNvbWUgZm9yIDEwMCUgaWRsZS4gOikgTmFtaW5nIGl0 IG90aGVyIHdvdWxkIHRoZW4gYmUgbm90IApjb3JyZWN0IGVpdGhlci4KCj4gCj4+ICsgICAgICAg ICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBudW1fZW5naW5lcykKPj4gK3sKPj4gKyAgICAgICBj b25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZSAqZV87Cj4+ICsgICAgICAgdWludDY0 X3QgdmFsW251bV9lbmdpbmVzXTsKPj4gKyAgICAgICBpbnQgZmRbMl07Cj4+ICsgICAgICAgaWd0 X3NwaW5fdCAqc3BpbjsKPj4gKyAgICAgICB1bnNpZ25lZCBpbnQgYnVzeV9pZHgsIGk7Cj4+ICsK Pj4gKyAgICAgICBpZ3RfcmVxdWlyZShnZW1faGFzX3JpbmcoZ2VtX2ZkLCBlLT5leGVjX2lkIHwg ZS0+ZmxhZ3MpKTsKPj4gKwo+PiArICAgICAgIHNwaW4gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2Vt X2ZkLCAwLCBlLT5leGVjX2lkIHwgZS0+ZmxhZ3MsIDApOwo+PiArICAgICAgIGlndF9zcGluX2Jh dGNoX3NldF90aW1lb3V0KHNwaW4sIGJhdGNoX2R1cmF0aW9uX25zKTsKPj4gKwo+PiArICAgICAg IGkgPSAwOwo+PiArICAgICAgIGZkWzBdID0gLTE7Cj4+ICsgICAgICAgZm9yX2VhY2hfZW5naW5l X2NsYXNzX2luc3RhbmNlKGZkLCBlXykgewo+PiArICAgICAgICAgICAgICAgaWYgKCFnZW1faGFz X3JpbmcoZ2VtX2ZkLCBlXy0+ZXhlY19pZCB8IGVfLT5mbGFncykpCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgIGNvbnRpbnVlOwo+PiArCj4+ICsgICAgICAgICAgICAgICBpZiAoZSA9PSBlXykK Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgYnVzeV9pZHggPSBpOwo+PiArCj4+ICsgICAgICAg ICAgICAgICBmZFtpID09IDAgPyAwIDogMV0gPQo+PiArICAgICAgICAgICAgICAgICAgICAgICBw ZXJmX2k5MTVfb3Blbl9ncm91cChJOTE1X1BNVV9FTkdJTkVfQlVTWShlXy0+Y2xhc3MsCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGVfLT5pbnN0YW5jZSksCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGZkWzBdKTsKPj4gKyAgICAgICAgICAgICAgIGlndF9hc3NlcnQoZmRbMF0g PiAwKTsKPj4gKyAgICAgICAgICAgICAgIGlndF9hc3NlcnQoaSA9PSAwIHx8IGZkWzFdID4gMCk7 Cj4+ICsgICAgICAgICAgICAgICBpKys7Cj4+ICsgICAgICAgfQo+PiArCj4+ICsgICAgICAgZ2Vt X3N5bmMoZ2VtX2ZkLCBzcGluLT5oYW5kbGUpOwo+PiArCj4+ICsgICAgICAgcG11X3JlYWRfbXVs dGkoZmRbMF0sIG51bV9lbmdpbmVzLCB2YWwpOwo+PiArCj4+ICsgICAgICAgYXNzZXJ0X3dpdGhp bl9lcHNpbG9uKHZhbFtidXN5X2lkeF0sIGJhdGNoX2R1cmF0aW9uX25zLCB0b2xlcmFuY2UpOwo+ PiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fZW5naW5lczsgaSsrKSB7Cj4+ICsgICAgICAg ICAgICAgICBpZiAoaSA9PSBidXN5X2lkeCkKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgY29u dGludWU7Cj4+ICsgICAgICAgICAgICAgICBhc3NlcnRfd2l0aGluX2Vwc2lsb24odmFsW2ldLCAw LjBmLCB0b2xlcmFuY2UpOwo+PiArICAgICAgIH0KPj4gKwo+PiArICAgICAgIGlndF9zcGluX2Jh dGNoX2ZyZWUoZ2VtX2ZkLCBzcGluKTsKPj4gKyAgICAgICBjbG9zZShmZFswXSk7Cj4+ICt9Cj4g Cj4+ICtzdGF0aWMgdm9pZAo+PiArbm9fc2VtYShpbnQgZ2VtX2ZkLCBjb25zdCBzdHJ1Y3QgaW50 ZWxfZXhlY3V0aW9uX2VuZ2luZSAqZSwgYm9vbCBidXN5KQo+IAo+IFRoaXMgaXMganVzdCB0aGUg c2FuaXR5IGNoZWNrIGhhbGYgb2YgdGhlIHNlbWEgdGVzdC4KPiAKPiBObyB3YWl0LCBubyBxdWV1 ZWQ/CgpGb3Jnb3QgYWJvdXQgcXVldWVkIGNvbXBsZXRlbHkhCgpBbmQgc2VtYXBob3JlcyBJIGxl ZnQgZm9yIGxhdGVyLiBJIGRvbid0IGhhdmUgYW55IDxnZW45IG1hY2hpbmVzIHRvIHBsYXkgCndp dGggdGhlbSBsb2NhbGx5LgoKPiAKPj4gK3N0YXRpYyB2b2lkCj4+ICttdWx0aV9jbGllbnQoaW50 IGdlbV9mZCwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUgKmUpCj4+ICt7Cj4+ ICsgICAgICAgdWludDY0X3QgY29uZmlnID0gSTkxNV9QTVVfRU5HSU5FX0JVU1koZS0+Y2xhc3Ms IGUtPmluc3RhbmNlKTsKPj4gKyAgICAgICBpZ3Rfc3Bpbl90ICpzcGluOwo+PiArICAgICAgIHVp bnQ2NF90IHZhbFsyXTsKPj4gKyAgICAgICBpbnQgZmRbMl07Cj4+ICsKPj4gKyAgICAgICBpZ3Rf cmVxdWlyZShnZW1faGFzX3JpbmcoZ2VtX2ZkLCBlLT5leGVjX2lkIHwgZS0+ZmxhZ3MpKTsKPj4g Kwo+PiArICAgICAgIHNwaW4gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLCAwLCBlLT5leGVj X2lkIHwgZS0+ZmxhZ3MsIDApOwo+PiArICAgICAgIGlndF9zcGluX2JhdGNoX3NldF90aW1lb3V0 KHNwaW4sIGJhdGNoX2R1cmF0aW9uX25zKTsKPj4gKwo+PiArICAgICAgIGZkWzBdID0gcGVyZl9p OTE1X29wZW4oY29uZmlnKTsKPj4gKyAgICAgICBpZ3RfYXNzZXJ0KGZkWzBdID49IDApOwo+PiAr Cj4+ICsgICAgICAgdXNsZWVwKGJhdGNoX2R1cmF0aW9uX25zIC8gNDAwMCk7Cj4+ICsKPj4gKyAg ICAgICBmZFsxXSA9IHBlcmZfaTkxNV9vcGVuKGNvbmZpZyk7Cj4+ICsgICAgICAgaWd0X2Fzc2Vy dChmZFsxXSA+PSAwKTsKPj4gKwo+PiArICAgICAgIHVzbGVlcChiYXRjaF9kdXJhdGlvbl9ucyAv IDMwMDApOwo+PiArCj4+ICsgICAgICAgdmFsWzFdID0gcG11X3JlYWRfc2luZ2xlKGZkWzFdKTsK Pj4gKyAgICAgICBjbG9zZShmZFsxXSk7Cj4+ICsKPj4gKyAgICAgICBnZW1fc3luYyhnZW1fZmQs IHNwaW4tPmhhbmRsZSk7Cj4+ICsKPj4gKyAgICAgICB2YWxbMF0gPSBwbXVfcmVhZF9zaW5nbGUo ZmRbMF0pOwo+PiArCj4+ICsgICAgICAgYXNzZXJ0X3dpdGhpbl9lcHNpbG9uKHZhbFswXSwgYmF0 Y2hfZHVyYXRpb25fbnMsIHRvbGVyYW5jZSk7Cj4+ICsgICAgICAgYXNzZXJ0X3dpdGhpbl9lcHNp bG9uKHZhbFsxXSwgYmF0Y2hfZHVyYXRpb25fbnMgLyAzLCB0b2xlcmFuY2UpOwo+PiArCj4+ICsg ICAgICAgaWd0X3NwaW5fYmF0Y2hfZnJlZShnZW1fZmQsIHNwaW4pOwo+PiArICAgICAgIGNsb3Nl KGZkWzBdKTsKPj4gK30KPiAKCkZvcmdvdCB0byBjb21tZW50IG9yIGNoYW5nZWQgeW91ciBtaW5k PwoKPj4gK3N0YXRpYyB2b2lkIGNwdV9ob3RwbHVnKGludCBnZW1fZmQpCj4+ICt7Cj4+ICsgICAg ICAgc3RydWN0IHRpbWVzcGVjIHN0YXJ0LCBub3c7Cj4+ICsgICAgICAgaWd0X3NwaW5fdCAqc3Bp bjsKPj4gKyAgICAgICB1aW50NjRfdCB2YWwsIHJlZjsKPj4gKyAgICAgICBpbnQgZmQ7Cj4+ICsK Pj4gKyAgICAgICBpZ3RfcmVxdWlyZShjcHUwX2hvdHBsdWdfc3VwcG9ydCgpKTsKPj4gKwo+PiAr ICAgICAgIHNwaW4gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLCAwLCBJOTE1X0VYRUNfUkVO REVSLCAwKTsKPj4gKyAgICAgICBmZCA9IHBlcmZfaTkxNV9vcGVuKEk5MTVfUE1VX0VOR0lORV9C VVNZKEk5MTVfRU5HSU5FX0NMQVNTX1JFTkRFUiwgMCkpOwo+PiArICAgICAgIGlndF9hc3NlcnQo ZmQgPj0gMCk7Cj4+ICsKPj4gKyAgICAgICBjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywg JnN0YXJ0KTsKPj4gKwo+PiArICAgICAgIGlndF9mb3JrKGNoaWxkLCAxKSB7Cj4+ICsgICAgICAg ICAgICAgICBpbnQgY3B1ID0gMDsKPj4gKwo+PiArICAgICAgICAgICAgICAgZm9yICg7Oykgewo+ PiArICAgICAgICAgICAgICAgICAgICAgICBjaGFyIG5hbWVbMTI4XTsKPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgaW50IGNwdWZkOwo+PiArCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIHNw cmludGYobmFtZSwgIi9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSVkL29ubGluZSIsCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1KTsKPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgY3B1ZmQgPSBvcGVuKG5hbWUsIE9fV1JPTkxZKTsKPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgaWYgKGNwdWZkID09IC0xKSB7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWd0X2Fzc2VydChjcHUgPiAwKTsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgfQo+PiArICAgICAgICAgICAgICAg ICAgICAgICBpZ3RfYXNzZXJ0X2VxKHdyaXRlKGNwdWZkLCAiMCIsIDIpLCAyKTsKPj4gKwo+PiAr ICAgICAgICAgICAgICAgICAgICAgICB1c2xlZXAoMTAwMCAqIDEwMDApOwo+PiArCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgIGlndF9hc3NlcnRfZXEod3JpdGUoY3B1ZmQsICIxIiwgMiksIDIp Owo+PiArCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlKGNwdWZkKTsKPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgY3B1Kys7Cj4+ICsgICAgICAgICAgICAgICB9Cj4+ICsgICAgICAg fQo+PiArCj4+ICsgICAgICAgaWd0X3dhaXRjaGlsZHJlbigpOwo+PiArCj4+ICsgICAgICAgaWd0 X3NwaW5fYmF0Y2hfZW5kKHNwaW4pOwo+PiArICAgICAgIGdlbV9zeW5jKGdlbV9mZCwgc3Bpbi0+ aGFuZGxlKTsKPj4gKwo+PiArICAgICAgIGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAm bm93KTsKPiAKPiBEaWQgd2UgZXZlciBleHBvcnQgdGhlIGlndCByb3V0aW5lcyBmb3IgcHJvYmlu ZyBzdXBwb3J0ZWQgY2xvY2tzPwo+IEluIHRoaXMgY2FzZSwgdGhpcyBmaXRzIGludG8gaWd0X25z ZWNfZWxhcHNlZC4KCkRpZCBub3Qgc3BvdCB0aGlzIG9uZSBlaXRoZXIuCgo+IAo+PiArICAgICAg IHZhbCA9IHBtdV9yZWFkX3NpbmdsZShmZCk7Cj4+ICsKPj4gKyAgICAgICByZWYgPSBlbGFwc2Vk X25zKCZzdGFydCwgJm5vdyk7Cj4+ICsKPj4gKyAgICAgICBhc3NlcnRfd2l0aGluX2Vwc2lsb24o dmFsLCByZWYsIHRvbGVyYW5jZSk7Cj4+ICsKPj4gKyAgICAgICBpZ3Rfc3Bpbl9iYXRjaF9mcmVl KGdlbV9mZCwgc3Bpbik7Cj4+ICsgICAgICAgY2xvc2UoZmQpOwo+PiArfQo+PiArCj4+ICtzdGF0 aWMgdm9pZAo+PiArdGVzdF9pbnRlcnJ1cHRzKGludCBnZW1fZmQpCj4+ICt7Cj4+ICsgICAgICAg aWd0X3NwaW5fdCAqc3BpbjsKPj4gKyAgICAgICB1aW50NjRfdCBpZGxlLCBidXN5LCBwcmV2Owo+ PiArICAgICAgIGludCBmZDsKPj4gKwo+PiArICAgICAgIGZkID0gcGVyZl9pOTE1X29wZW4oSTkx NV9QTVVfSU5URVJSVVBUUyk7Cj4+ICsgICAgICAgaWd0X2Fzc2VydChmZCA+PSAwKTsKPj4gKwo+ PiArICAgICAgIGdlbV9xdWllc2NlbnRfZ3B1KGdlbV9mZCk7Cj4+ICsgICAgICAgc2xlZXAoMik7 Cj4+ICsgICAgICAgcHJldiA9IHBtdV9yZWFkX3NpbmdsZShmZCk7Cj4+ICsgICAgICAgdXNsZWVw KGJhdGNoX2R1cmF0aW9uX25zIC8gMTAwMCk7Cj4+ICsgICAgICAgaWRsZSA9IHBtdV9yZWFkX3Np bmdsZShmZCk7Cj4+ICsKPj4gKyAgICAgICBpZ3RfYXNzZXJ0X2VxKGlkbGUgLSBwcmV2LCAwKTsK Pj4gKwo+PiArICAgICAgIHNwaW4gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLCAwLCBJOTE1 X0VYRUNfUkVOREVSLCAwKTsKPj4gKyAgICAgICBpZ3Rfc3Bpbl9iYXRjaF9zZXRfdGltZW91dChz cGluLCBiYXRjaF9kdXJhdGlvbl9ucyk7Cj4+ICsgICAgICAgZ2VtX3N5bmMoZ2VtX2ZkLCBzcGlu LT5oYW5kbGUpOwo+IAo+IFRoZXJlJ3Mgbm8gZ3VhcmFudGVlZCBpbnRlcnJ1cHQgaGVyZS4KCkht IHllcy4uIGJ1Z2dlci4gVXNlIGZlbmNlcyBpbnN0ZWFkIG9mIHNwaW4gYmF0Y2ggdG8gZW5zdXJl IHNvbWU/IE9yIApleHRlbmQgc3BpbiBiYXRjaCBBUEkgdG8gc3VwcG9ydCBmZW5jZXM/Cgo+IAo+ PiArCj4+ICsgICAgICAgYnVzeSA9IHBtdV9yZWFkX3NpbmdsZShmZCk7Cj4+ICsgICAgICAgaWd0 X2Fzc2VydChidXN5ID4gaWRsZSk7Cj4+ICsKPj4gKyAgICAgICBpZ3Rfc3Bpbl9iYXRjaF9mcmVl KGdlbV9mZCwgc3Bpbik7Cj4+ICsgICAgICAgY2xvc2UoZmQpOwo+PiArfQo+PiArCj4+ICtzdGF0 aWMgdm9pZAo+PiArdGVzdF9mcmVxdWVuY3koaW50IGdlbV9mZCkKPj4gK3sKPj4gKyAgICAgICBp Z3Rfc3Bpbl90ICpzcGluOwo+PiArICAgICAgIHVpbnQ2NF90IGlkbGVbMl0sIGJ1c3lbMl07Cj4+ ICsgICAgICAgaW50IGZkOwo+PiArCj4+ICsgICAgICAgZmQgPSBwZXJmX2k5MTVfb3Blbl9ncm91 cChJOTE1X1BNVV9SRVFVRVNURURfRlJFUVVFTkNZLCAtMSk7Cj4+ICsgICAgICAgaWd0X2Fzc2Vy dChmZCA+PSAwKTsKPiAKPiBBc2sgdGhlIGtlcm5lbCBpZiBpdCBpcyBzdXBwb3J0ZWQuCgpZZXAu Cgo+IAo+PiArICAgICAgIGlndF9hc3NlcnQocGVyZl9pOTE1X29wZW5fZ3JvdXAoSTkxNV9QTVVf QUNUVUFMX0ZSRVFVRU5DWSwgZmQpID49IDApOwo+PiArCj4+ICsgICAgICAgZ2VtX3F1aWVzY2Vu dF9ncHUoZ2VtX2ZkKTsKPj4gKyAgICAgICB1c2xlZXAoYmF0Y2hfZHVyYXRpb25fbnMgLyAxMDAw KTsKPj4gKwo+PiArICAgICAgIHBtdV9yZWFkX211bHRpKGZkLCAyLCBpZGxlKTsKPj4gKwo+PiAr ICAgICAgIHNwaW4gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLCAwLCBJOTE1X0VYRUNfUkVO REVSLCAwKTsKPj4gKyAgICAgICBpZ3Rfc3Bpbl9iYXRjaF9zZXRfdGltZW91dChzcGluLCBiYXRj aF9kdXJhdGlvbl9ucyk7Cj4+ICsgICAgICAgZ2VtX3N5bmMoZ2VtX2ZkLCBzcGluLT5oYW5kbGUp Owo+PiArCj4+ICsgICAgICAgcG11X3JlYWRfbXVsdGkoZmQsIDIsIGJ1c3kpOwo+PiArCj4+ICsg ICAgICAgaWd0X2Fzc2VydChidXN5WzBdID4gaWRsZVswXSk7Cj4+ICsgICAgICAgaWd0X2Fzc2Vy dChidXN5WzFdID4gaWRsZVsxXSk7Cj4gCj4gTm90aGluZyBndWFyYW50ZWVzIGJ1c3lbMV0gY2hh bmdlcywgaXQgaXMgaHcvZncgZGVwZW5kZW50Lgo+IGJ1c3lbMF0gZGVwZW5kcyBvbiB1c2VyIGNv bmZpZy4KCkRvIHdlIHJlYXNvbmFibHkgZXhwZWN0IElHVCB0byBiZSByYW4gaW4gc3VjaCBlbnZp cm9ubWVudHM/IE9yIGNoYW5nZSAKdGhpcyB0byBub3QgZXhwZWN0IGEgY2hhbmdlIGJ1dCBqdXN0 IGNvbXBhcmUgYWdhaW5zdCBkZWJ1Z2ZzPwoKPiAKPj4gKwo+PiArICAgICAgIGlndF9zcGluX2Jh dGNoX2ZyZWUoZ2VtX2ZkLCBzcGluKTsKPj4gKyAgICAgICBjbG9zZShmZCk7Cj4+ICt9Cj4+ICsK PiAKPj4gK3N0YXRpYyB2b2lkCj4+ICt0ZXN0X3JjNnAoaW50IGdlbV9mZCkKPj4gK3sKPj4gKyAg ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgZGV2aWQgPSBpbnRlbF9nZXRfZHJtX2RldmlkKGdlbV9m ZCk7Cj4+ICsgICAgICAgaW50NjRfdCBkdXJhdGlvbl9ucyA9IDIgKiAxMDAwICogMTAwMCAqIDEw MDA7Cj4+ICsgICAgICAgdW5zaWduZWQgaW50IG51bV9wbXUgPSAxOwo+PiArICAgICAgIGlndF9z cGluX3QgKnNwaW47Cj4+ICsgICAgICAgdWludDY0X3QgaWRsZVszXSwgYnVzeVszXSwgcHJldlsz XTsKPj4gKyAgICAgICB1bnNpZ25lZCBpbnQgaTsKPj4gKyAgICAgICBpbnQgZmQsIHJldDsKPj4g Kwo+PiArICAgICAgIGlndF9yZXF1aXJlKGludGVsX2dlbihkZXZpZCkgPCA4ICYmICFJU19IQVNX RUxMKGRldmlkKSk7Cj4gCj4gQXNrIHRoZSBrZXJuZWwuIChBcHBsaWVzIGVxdWFsbHkgdG8gcmM2 LCByYzZwKS4KCldoYXQgaXMgdGhlIHdheSB0byBkbyB0aGlzPyBEb24ndCBzZWUgdGhlc2UgaW4g Z2V0X3BhcmFtLgoKPiBObyByYzZwcCB0ZXN0aW5nPwoKQ29weSBhbmQgcGFzdGUgZXJyb3IuCgo+ PiArCj4+ICsgICAgICAgZmQgPSBwZXJmX2k5MTVfb3Blbl9ncm91cChJOTE1X1BNVV9SQzZfUkVT SURFTkNZLCAtMSk7Cj4+ICsgICAgICAgaWd0X2Fzc2VydChmZCA+PSAwKTsKPj4gKwo+PiArICAg ICAgIHJldCA9IHBlcmZfaTkxNV9vcGVuX2dyb3VwKEk5MTVfUE1VX1JDNnBfUkVTSURFTkNZLCBm ZCk7Cj4+ICsgICAgICAgaWYgKHJldCA+IDApIHsKPj4gKyAgICAgICAgICAgICAgIG51bV9wbXUr KzsKPj4gKyAgICAgICAgICAgICAgIHJldCA9IHBlcmZfaTkxNV9vcGVuX2dyb3VwKEk5MTVfUE1V X1JDNnBfUkVTSURFTkNZLCBmZCk7Cj4+ICsgICAgICAgICAgICAgICBpZiAocmV0ID4gMCkKPj4g KyAgICAgICAgICAgICAgICAgICAgICAgbnVtX3BtdSsrOwo+PiArICAgICAgIH0KPj4gKwo+PiAr ICAgICAgIGdlbV9xdWllc2NlbnRfZ3B1KGdlbV9mZCk7Cj4+ICsgICAgICAgc2xlZXAoMik7Cj4+ ICsKPj4gKyAgICAgICBwbXVfcmVhZF9tdWx0aShmZCwgbnVtX3BtdSwgcHJldik7Cj4+ICsgICAg ICAgdXNsZWVwKGR1cmF0aW9uX25zIC8gMTAwMCk7Cj4+ICsgICAgICAgcG11X3JlYWRfbXVsdGko ZmQsIG51bV9wbXUsIGlkbGUpOwo+PiArCj4+ICsgICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9w bXU7IGkrKykKPj4gKyAgICAgICAgICAgICAgIGFzc2VydF93aXRoaW5fZXBzaWxvbihpZGxlW2ld IC0gcHJldltpXSwgZHVyYXRpb25fbnMsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdG9sZXJhbmNlKTsKPj4gKwo+PiArICAgICAgIHNwaW4gPSBpZ3Rfc3Bpbl9iYXRj aF9uZXcoZ2VtX2ZkLCAwLCBJOTE1X0VYRUNfUkVOREVSLCAwKTsKPj4gKyAgICAgICBpZ3Rfc3Bp bl9iYXRjaF9zZXRfdGltZW91dChzcGluLCBkdXJhdGlvbl9ucyk7Cj4gCj4gQXJlIHdlIHN1cmUg dGhlIEdQVSBpc24ndCBhbGxvd2VkIHRvIHNsZWVwPyBpOTE1X3VzZXJfZm9yY2V3YWtlIHdlCj4g ZXhwZWN0IHRvIGtlZXAgdGhlIEdQVSBvdXQgb2YgcmM2LgoKSSB3YXMgc3VyZSwgYnV0IHdhcyBJ IHdyb25nPyA6KQoKUmVnYXJkbGVzcywgcmVwbGFjaW5nIHNwaW4gYmF0Y2ggd2l0aCBhIGZvcmNl d2FrZSBzb3VuZHMgc2ltcGxlciBzbyBJIApjYW4gZG8gdGhhdC4KCj4gCj4+ICtpZ3RfbWFpbgo+ PiArewo+PiArICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBudW1fb3RoZXJfbWV0cmljcyA9Cj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTkxNV9QTVVfTEFTVCAtIF9fSTkxNV9Q TVVfT1RIRVIoMCkgKyAxOwo+PiArICAgICAgIHVuc2lnbmVkIGludCBudW1fZW5naW5lcyA9IDA7 Cj4+ICsgICAgICAgaW50IGZkID0gLTE7Cj4+ICsgICAgICAgY29uc3Qgc3RydWN0IGludGVsX2V4 ZWN1dGlvbl9lbmdpbmUgKmU7Cj4+ICsgICAgICAgdW5zaWduZWQgaW50IGk7Cj4+ICsKPj4gKyAg ICAgICBpZ3RfZml4dHVyZSB7Cj4+ICsgICAgICAgICAgICAgICBmZCA9IGRybV9vcGVuX2RyaXZl cl9tYXN0ZXIoRFJJVkVSX0lOVEVMKTsKPj4gKwo+PiArICAgICAgICAgICAgICAgaWd0X3JlcXVp cmVfZ2VtKGZkKTsKPj4gKyAgICAgICAgICAgICAgIGlndF9yZXF1aXJlKGk5MTVfdHlwZV9pZCgp ID4gMCk7Cj4+ICsKPj4gKyAgICAgICAgICAgICAgIGZvcl9lYWNoX2VuZ2luZV9jbGFzc19pbnN0 YW5jZShmZCwgZSkgewo+PiArICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2VtX2hhc19yaW5n KGZkLCBlLT5leGVjX2lkIHwgZS0+ZmxhZ3MpKQo+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG51bV9lbmdpbmVzKys7Cj4+ICsgICAgICAgICAgICAgICB9Cj4+ICsgICAgICAgfQo+ PiArCj4+ICsgICAgICAgLyoqCj4+ICsgICAgICAgICogVGVzdCBpbnZhbGlkIGFjY2VzcyB2aWEg cGVyZiBBUEkgaXMgcmVqZWN0ZWQuCj4+ICsgICAgICAgICovCj4gCj4gQVJHSC4gTm8gY29tbWVu dHMgb24gdGhlIGludGVudGlvbnMgb2YgdGhlIGNvZGU/CgpXaWxsIGFkZC4KClJlZ2FyZHMsCgpU dnJ0a28KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50 ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==