From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jim Bride Subject: Re: [PATCH IGT v2 2/6] lib: Add PSR utility functions to igt library. Date: Fri, 7 Jul 2017 06:45:51 -0700 Message-ID: <20170707134551.GA13260@shiv> References: <1498849944-26404-1-git-send-email-jim.bride@linux.intel.com> <1498849944-26404-3-git-send-email-jim.bride@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2447F6E0C2 for ; Fri, 7 Jul 2017 13:48:22 +0000 (UTC) Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Rodrigo Vivi Cc: intel-gfx , Paulo Zanoni , Rodrigo Vivi List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCBKdW4gMzAsIDIwMTcgYXQgMDE6MTE6NTJQTSAtMDcwMCwgUm9kcmlnbyBWaXZpIHdy b3RlOgo+IE9uIEZyaSwgSnVuIDMwLCAyMDE3IGF0IDEyOjEyIFBNLCBKaW0gQnJpZGUgPGppbS5i cmlkZUBsaW51eC5pbnRlbC5jb20+IHdyb3RlOgo+ID4gRmFjdG9yIG91dCBzb21lIGNvZGUgdGhh dCB3YXMgcmVwbGljYXRlZCBpbiB0aHJlZSB0ZXN0IHV0aWxpdGllcyBpbnRvCj4gPiBzb21lIG5l dyBJR1QgbGlicmFyeSBmdW5jdGlvbnMgc28gdGhhdCB3ZSBhcmUgY2hlY2tpbmcgUFNSIHN0YXR1 cyBpbgo+ID4gYSBjb25zaXN0ZW50IGZhc2hpb24gYWNyb3NzIGFsbCBvZiBvdXIgUFNSIHRlc3Rz Lgo+ID4KPiA+IHYyOiAqIEFkZCBzaW5rIENSQyBoZWxwZXIgZnVuY3Rpb24KPiA+ICAgICAqIE1p c2MuIGJ1ZyBmaXhlcwo+ID4gICAgICogUmViYXNlCj4gPgo+ID4gQ2M6IFJvZHJpZ28gVml2aSA8 cm9kcmlnby52aXZpQGludGVsLmNvbT4KPiA+IENjOiBQYXVsbyBaYW5vbmkgPHBhdWxvLnIuemFu b25pQGludGVsLmNvbT4KPiA+IFNpZ25lZC1vZmYtYnk6IEppbSBCcmlkZSA8amltLmJyaWRlQGxp bnV4LmludGVsLmNvbT4KPiA+IC0tLQo+ID4gIGxpYi9NYWtlZmlsZS5zb3VyY2VzIHwgICAyICsK PiA+ICBsaWIvaWd0LmggICAgICAgICAgICB8ICAgMSArCj4gPiAgbGliL2lndF9wc3IuYyAgICAg ICAgfCAyMzUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCj4gPiAgbGliL2lndF9wc3IuaCAgICAgICAgfCAgNDMgKysrKysrKysrKwo+ID4gIDQgZmls ZXMgY2hhbmdlZCwgMjgxIGluc2VydGlvbnMoKykKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGli L2lndF9wc3IuYwo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaWd0X3Bzci5oCj4gPgo+ID4g ZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZS5zb3VyY2VzIGIvbGliL01ha2VmaWxlLnNvdXJjZXMK PiA+IGluZGV4IDUzZmRiNTQuLjZhNzNjOGMgMTAwNjQ0Cj4gPiAtLS0gYS9saWIvTWFrZWZpbGUu c291cmNlcwo+ID4gKysrIGIvbGliL01ha2VmaWxlLnNvdXJjZXMKPiA+IEBAIC04Myw2ICs4Myw4 IEBAIGxpYl9zb3VyY2VfbGlzdCA9ICAgICAgICAgICAgIFwKPiA+ICAgICAgICAgdXdpbGRtYXQv dXdpbGRtYXQuYyAgICAgXAo+ID4gICAgICAgICBpZ3Rfa21vZC5jICAgICAgICAgICAgICBcCj4g PiAgICAgICAgIGlndF9rbW9kLmggICAgICAgICAgICAgIFwKPiA+ICsgICAgICAgaWd0X3Bzci5j ICAgICAgICAgICAgICAgXAo+ID4gKyAgICAgICBpZ3RfcHNyLmggICAgICAgICAgICAgICBcCj4g PiAgICAgICAgICQoTlVMTCkKPiA+Cj4gPiAgLlBIT05ZOiB2ZXJzaW9uLmgudG1wCj4gPiBkaWZm IC0tZ2l0IGEvbGliL2lndC5oIGIvbGliL2lndC5oCj4gPiBpbmRleCBhMDY5ZGViLi4wYjhlM2E4 IDEwMDY0NAo+ID4gLS0tIGEvbGliL2lndC5oCj4gPiArKysgYi9saWIvaWd0LmgKPiA+IEBAIC0z Nyw2ICszNyw3IEBACj4gPiAgI2luY2x1ZGUgImlndF9ndC5oIgo+ID4gICNpbmNsdWRlICJpZ3Rf a21zLmgiCj4gPiAgI2luY2x1ZGUgImlndF9wbS5oIgo+ID4gKyNpbmNsdWRlICJpZ3RfcHNyLmgi Cj4gPiAgI2luY2x1ZGUgImlndF9zdGF0cy5oIgo+ID4gICNpZmRlZiBIQVZFX0NIQU1FTElVTQo+ ID4gICNpbmNsdWRlICJpZ3RfY2hhbWVsaXVtLmgiCj4gPiBkaWZmIC0tZ2l0IGEvbGliL2lndF9w c3IuYyBiL2xpYi9pZ3RfcHNyLmMKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAw MDAwMDAwLi5hMjgyM2JmCj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9saWIvaWd0X3Bzci5j Cj4gPiBAQCAtMCwwICsxLDIzNSBAQAo+ID4gKy8qCj4gPiArICogQ29weXJpZ2h0IMKpIDIwMTcg SW50ZWwgQ29ycG9yYXRpb24KPiA+ICsgKgo+ID4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gPiArICog Y29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMg KHRoZSAiU29mdHdhcmUiKSwKPiA+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gPiArICogdGhlIHJp Z2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1 YmxpY2Vuc2UsCj4gPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gPiArICogU29mdHdhcmUgaXMgZnVybmlz aGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiA+ICsg Kgo+ID4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiA+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGlu Y2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gPiAr ICogU29mdHdhcmUuCj4gPiArICoKPiA+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFT IElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ID4gKyAqIElN UExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZLAo+ID4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO RCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ID4gKyAqIFRIRSBBVVRIT1JT IE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9S IE9USEVSCj4gPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFD VCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiA+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4g Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdT Cj4gPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ID4gKyAqLwo+ID4gKwo+ID4gKyNpbmNsdWRlICJp Z3QuaCIKPiA+ICsjaW5jbHVkZSA8c3RkaW8uaD4KPiA+ICsjaW5jbHVkZSA8c3RkYm9vbC5oPgo+ ID4gKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KPiA+ICsjaW5jbHVkZSA8c3RyaW5nLmg+Cj4gPiAr I2luY2x1ZGUgPGZjbnRsLmg+Cj4gPiArCj4gPiArLyoqCj4gPiArICogU0VDVElPTjppZ3RfcHNy Cj4gPiArICogQHNob3J0X2Rlc2NyaXB0aW9uOiBQYW5lbCBTZWxmIFJlZnJlc2ggaGVscGVycwo+ ID4gKyAqIEB0aXRsZTogUGFuZWwgU2VsZiBSZWZyZXNoCj4gPiArICogQGluY2x1ZGU6IGlndC5o Cj4gPiArICoKPiA+ICsgKiBUaGlzIGxpYnJhcnkgcHJvdmlkZXMgdmFyaW91cyBoZWxwZXJzIHRv IGVuYWJsZSBQYW5lbCBTZWxmIFJlZnJlc2gsCj4gPiArICogYXMgd2VsbCBhcyB0byBjaGVjayB0 aGUgc3RhdGUgb2YgUFNSIG9uIHRoZSBzeXN0ZW0gKGVuYWJsZWQgdnMuCj4gPiArICogZGlzYWJs ZWQsIGFjdGl2ZSB2cy4gaW5hY3RpdmUpIG9yIHRvIHdhaXQgZm9yIFBTUiB0byBiZSBhY3RpdmUK PiA+ICsgKiBvciBpbmFjdGl2ZS4KPiA+ICsgKi8KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBpZ3Rf cHNyX3NvdXJjZV9zdXBwb3J0Ogo+ID4gKyAqCj4gPiArICogUmV0dXJucyB0cnVlIGlmIHRoZSBz b3VyY2Ugc3VwcG9ydHMgUFNSLgo+ID4gKyAqLwo+ID4gK2Jvb2wgaWd0X3Bzcl9zb3VyY2Vfc3Vw cG9ydChpbnQgZmQpCj4gPiArewo+ID4gKyAgICAgICBjaGFyIGJ1Zls1MTJdOwo+ID4gKwo+ID4g KyAgICAgICBpZ3RfZGVidWdmc19yZWFkKGZkLCAiaTkxNV9lZHBfcHNyX3N0YXR1cyIsIGJ1Zik7 Cj4gPiArCj4gPiArICAgICAgIHJldHVybiBzdHJzdHIoYnVmLCAiU291cmNlX09LOiB5ZXNcbiIp Owo+ID4gK30KPiA+ICsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBpZ3RfcHNyX3Npbmtfc3VwcG9y dDoKPiA+ICsgKgo+ID4gKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBlRFAgcGFuZWwg c3VwcG9ydHMgUFNSLgo+ID4gKyAqLwo+ID4gK2Jvb2wgaWd0X3Bzcl9zaW5rX3N1cHBvcnQoaW50 IGZkKQo+ID4gK3sKPiA+ICsgICAgICAgY2hhciBidWZbMjU2XTsKPiA+ICsKPiA+ICsgICAgICAg aWd0X2RlYnVnZnNfcmVhZChmZCwgImk5MTVfZWRwX3Bzcl9zdGF0dXMiLCBidWYpOwo+ID4gKyAg ICAgICByZXR1cm4gc3Ryc3RyKGJ1ZiwgIlNpbmtfU3VwcG9ydDogeWVzXG4iKTsKPiA+ICt9Cj4g PiArCj4gPiArLyoqCj4gPiArICogaWd0X3Bzcl9wb3NzaWJsZToKPiA+ICsgKgo+ID4gKyAqIFJl dHVybnMgdHJ1ZSBpZiBib3RoIHRoZSBzb3VyY2UgYW5kIHNpbmsgc3VwcG9ydCBQU1IuCj4gPiAr ICovCj4gPiArYm9vbCBpZ3RfcHNyX3Bvc3NpYmxlKGludCBmZCkKPiA+ICt7Cj4gPiArICAgICAg IGNoYXIgYnVmWzUxMl07Cj4gPiArCj4gPiArICAgICAgIGlndF9kZWJ1Z2ZzX3JlYWQoZmQsICJp OTE1X2VkcF9wc3Jfc3RhdHVzIiwgYnVmKTsKPiA+ICsKPiA+ICsgICAgICAgcmV0dXJuIGlndF9w c3Jfc291cmNlX3N1cHBvcnQoZmQpICYmIGlndF9wc3Jfc2lua19zdXBwb3J0KGZkKTsKPiA+ICt9 Cj4gPiArCj4gPiArLyoqCj4gPiArICogaWd0X3Bzcl9hY3RpdmU6Cj4gPiArICoKPiA+ICsgKiBS ZXR1cm5zIHRydWUgaWYgUFNSIGlzIGFjdGl2ZSBvbiB0aGUgcGFuZWwuCj4gPiArICovCj4gPiAr Ym9vbCBpZ3RfcHNyX2FjdGl2ZShpbnQgZmQpCj4gPiArewo+ID4gKyAgICAgICBjaGFyIGJ1Zls1 MTJdOwo+ID4gKyAgICAgICBib29sIGFjdHJldCA9IGZhbHNlOwo+ID4gKyAgICAgICBib29sIGh3 YWN0cmV0ID0gZmFsc2U7Cj4gPiArCj4gPiArICAgICAgIGlndF9kZWJ1Z2ZzX3JlYWQoZmQsICJp OTE1X2VkcF9wc3Jfc3RhdHVzIiwgYnVmKTsKPiA+ICsgICAgICAgaHdhY3RyZXQgPSAoc3Ryc3Ry KGJ1ZiwgIkhXIEVuYWJsZWQgJiBBY3RpdmUgYml0OiB5ZXNcbiIpICE9IE5VTEwpOwo+ID4gKyAg ICAgICBhY3RyZXQgPSAoc3Ryc3RyKGJ1ZiwgIkFjdGl2ZTogeWVzXG4iKSAhPSBOVUxMKTsKPiA+ ICsgICAgICAgaWd0X2RlYnVnKCJod2FjdHJldDogJXMgYWN0cmV0OiAlc1xuIiwgaHdhY3RyZXQg PyAidHJ1ZSIgOiAiZmFsc2UiLAo+ID4gKyAgICAgICAgICAgICAgICBhY3RyZXQgPyAidHJ1ZSIg OiAiZmFsc2UiKTsKPiA+ICsgICAgICAgcmV0dXJuIGh3YWN0cmV0ICYmIGFjdHJldDsKPiA+ICt9 Cj4gPiArCj4gPiArLyoqCj4gPiArICogaWd0X3Bzcl9hd2FpdF9zdGF0dXM6Cj4gPiArICogQGFj dGl2ZTogQSBib29sZWFuIHRoYXQgY2F1c2VzIHRoZSBmdW5jdGlvbiB0byB3YWl0IGZvciBQU1Ig dG8gYWN0aXZhdGUKPiA+ICsgKiAgICAgICAgICBpZiBzZXQgdG8gdHJ1ZSwgb3IgdG8gd2FpdCBm b3IgUFNSIHRvIGRlYWN0aXZhdGUgaWYgZmFsc2UuCj4gPiArICoKPiA+ICsgKiBSZXR1cm5zIHRy dWUgaWYgdGhlIHJlcXVlc3RlZCBjb25kaXRpb24gaXMgbWV0Lgo+ID4gKyAqLwo+ID4gK2Jvb2wg aWd0X3Bzcl9hd2FpdF9zdGF0dXMoaW50IGZkLCBib29sIGFjdGl2ZSkKPiA+ICt7Cj4gPiArICAg ICAgIGNvbnN0IGludCB0aW1lb3V0ID0gMTA7Cj4gPiArICAgICAgIGludCBjb3VudCA9IDA7Cj4g PiArICAgICAgIHdoaWxlIChjb3VudCA8IHRpbWVvdXQpIHsKPiA+ICsgICAgICAgICAgICAgICBp ZiAoaWd0X3Bzcl9hY3RpdmUoZmQpID09IGFjdGl2ZSkgewo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgaWd0X2RlYnVnKCJQU1IgJXMgYWZ0ZXIgJWQgc2Vjb25kcy5cbiIsCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlID8gIkFjdGl2ZSIgOiAiSW5hY3RpdmUi LCBjb3VudCk7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKPiA+ICsg ICAgICAgICAgICAgICB9Cj4gPiArICAgICAgICAgICAgICAgY291bnQrKzsKPiA+ICsgICAgICAg ICAgICAgICBzbGVlcCgxKTsKPiA+ICsgICAgICAgfQo+ID4gKyAgICAgICByZXR1cm4gZmFsc2U7 Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGlndF9wc3JfZW5hYmxlZDoKPiA+ICsgKgo+ ID4gKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgUFNSIGZlYXR1cmUgaXMgZW5hYmxlZC4KPiA+ICsg Ki8KPiA+ICtib29sIGlndF9wc3JfZW5hYmxlZChpbnQgZmQpCj4gPiArewo+ID4gKyAgICAgICBj aGFyIGJ1ZlsyNTZdOwo+ID4gKwo+ID4gKyAgICAgICBpZ3RfZGVidWdmc19yZWFkKGZkLCAiaTkx NV9lZHBfcHNyX3N0YXR1cyIsIGJ1Zik7Cj4gPiArICAgICAgIHJldHVybiBzdHJzdHIoYnVmLCAi RW5hYmxlZDogeWVzXG4iKTsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICogaWd0X3Bzcl9w cmludF9zdGF0dXM6Cj4gPiArICoKPiA+ICsgKiBEdW1wcyB0aGUgY29udGVudHMgb2YgaTkxNV9l ZHBfcHNyX3N0YXR1cyBmcm9tIGRlYnVnZnMuCj4gPiArICovCj4gPiArdm9pZCBpZ3RfcHNyX3By aW50X3N0YXR1cyhpbnQgZmQpCj4gPiArewo+ID4gKyAgICAgICAgY2hhciBidWZbMjU2XTsKPiA+ ICsKPiA+ICsgICAgICAgIGlndF9kZWJ1Z2ZzX3JlYWQoZmQsICJpOTE1X2VkcF9wc3Jfc3RhdHVz IiwgYnVmKTsKPiA+ICsgICAgICAgIGlndF9pbmZvKCJQU1Igc3RhdHVzOlxuJXNcbiIsIGJ1Zik7 Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGlndF9wc3JfdmFsaWRfY29ubmVjdG9yOgo+ ID4gKyAqIEBjb25uZWN0b3I6IGEgZHJtTW9kZUNvbm5lY3RvciBwb2ludGVyIHRvIGNoZWNrCj4g PiArICoKPiA+ICsgKiBSZXR1cm5zIHRydWUgaWYgY29ubmVjdG9yIGlzIGFuIGVEUCBjb25uZWN0 b3IuCj4gPiArICovCj4gPiArYm9vbCBpZ3RfcHNyX3ZhbGlkX2Nvbm5lY3Rvcihkcm1Nb2RlQ29u bmVjdG9yUHRyIGNvbm5lY3RvcikKPiA+ICt7Cj4gPiArICAgICAgIHJldHVybiAoY29ubmVjdG9y LT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfZURQKTsKPiA+ICt9Cj4gPiAr Cj4gPiArLyoqCj4gPiArICogaWd0X3Bzcl9maW5kX2dvb2RfbW9kZQo+ID4gKyAqIEBjb25uZWN0 b3I6IGEgZHJtTW9kZUNvbm5lY3RvciBwb2ludGVyIHRvIGZpbmQgdGhlIG1vZGUgb24KPiA+ICsg KiBAbW9kZTogYSBkcm1Nb2RlTW9kZVB0ciBwb2ludGVyIHRoYXQgaXMgc2V0IHRvIHRoZSBtYXRj aGluZyBtb2RlCj4gPiArICoKPiA+ICsgKiBSZXR1cm5zIHRydWUgKGFuZCBwb3B1bGF0ZXMgKm1v ZGUgd2l0aCB0aGUgbWF0Y2gpIGlmIGEgdmFsaWQKPiA+ICsgKiBQU1IgbWRvZSBpcyBmb3VuZCwg YW5kIGZhbHNlIG90aGVyd2lzZS4KPiA+ICsgKi8KPiA+ICtib29sIGlndF9wc3JfZmluZF9nb29k X21vZGUoZHJtTW9kZUNvbm5lY3RvclB0ciBjb25uZWN0b3IsCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgZHJtTW9kZU1vZGVJbmZvUHRyICptb2RlKQo+ID4gK3sKPiA+ICsgICAgICAg aW50IGk7Cj4gPiArCj4gPiArICAgICAgIGlmICghY29ubmVjdG9yLT5jb3VudF9tb2Rlcykgewo+ ID4gKyAgICAgICAgICAgICAgIGlndF93YXJuKCJubyBtb2RlcyBmb3IgY29ubmVjdG9yICVkLlxu IiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3ItPmNvbm5lY3Rvcl9pZCk7 Cj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+ID4gKyAgICAgICB9IGVsc2Ugewo+ ID4gKyAgICAgICAgICAgICAgIGlndF9kZWJ1ZygiQ29ubmVjdG9yIGhhcyAlZCBtb2Rlcy5cbiIs IGNvbm5lY3Rvci0+Y291bnRfbW9kZXMpOwo+ID4gKyAgICAgICB9Cj4gPiArCj4gPiArICAgICAg IGZvciAoaSA9IDA7IGkgPCBjb25uZWN0b3ItPmNvdW50X21vZGVzOyBpKyspIHsKPiA+ICsgICAg ICAgICAgICAgICBpZiAoKGNvbm5lY3Rvci0+bW9kZXNbaV0udnRvdGFsIC0KPiA+ICsgICAgICAg ICAgICAgICAgICAgIGNvbm5lY3Rvci0+bW9kZXNbaV0udmRpc3BsYXkpID49IDM2KSB7Cj4gCj4g d2h5IDM2Pwo+IAo+IGRvZXNuJ3QgdGhpcyBkZXBlbmQgb24gdGhlIHBhbmVsIHNldHVwIHRpbWUg YW5kIG9uIG1vZGUgcmVzb2x1dGlvbj8KCldlIGFzc3VtZSB0aGUgd29yc3QgY2FzZSB0aGF0IHRo ZSBzcGVjIGFsbG93cyBmb3IgdGhpcyBjYWxjdWxhdGlvbiBhcyBmYXIKYXMgcGFuZWwgc2V0dXAg dGltZSBnb2VzLiAgSSBzaG91bGQgcHJvYmFibHkgY29uc2lkZXIgYSAjZGVmaW5lIGhlcmUgYnV0 CmJhc2ljYWxseSAzNiBsaW5lcyBpcyB3aGF0IEkgY2FtZSB1cCB3aXRoIGFzIGEgcm91Z2ggY2Fs Y3VsYXRpb24gYXMgdG8KaG93IG1hbnkgbGluZXMgb2YgdmVydGljYWwgYmxhbmsgYXJlIG5lZWRl ZCB0byBhY2NvbW1vZGF0ZSB0aGUgd29yc3QtY2FzZQpwYW5lbCBzZXR1cCB0aW1lLgoKPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgIGlndF9kZWJ1ZygiTW9kZSAlZCBnb29kIGZvciBQU1IuXG4i LCBpKTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICptb2RlID0gJihjb25uZWN0b3ItPm1v ZGVzW2ldKTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwo+ID4gKyAg ICAgICAgICAgICAgIH0gZWxzZSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBpZ3RfZGVi dWcoIlRocm93aW5nIG91dCBtb2RlICVkXG4iLCBpKTsKPiA+ICsgICAgICAgICAgICAgICB9Cj4g PiArICAgICAgIH0KPiA+ICsgICAgICAgcmV0dXJuIGZhbHNlOwo+ID4gK30KPiA+ICsKPiA+ICtp bnQgaWd0X3Bzcl9vcGVuX3NpbmtfY3JjKGludCBkcm1fZmQpCj4gPiArewo+ID4gKyAgICAgICBp bnQgY3JjX2ZkOwo+ID4gKwo+ID4gKyAgICAgICBjcmNfZmQgPSBvcGVuYXQoZHJtX2ZkLCAiaTkx NV9zaW5rX2NyY19lRFAxIiwgT19SRE9OTFkpOwo+ID4gKyAgICAgICBpZ3RfYXNzZXJ0X2x0ZSgw LCBjcmNfZmQpOwo+ID4gKyAgICAgICByZXR1cm4gY3JjX2ZkOwo+ID4gK30KPiA+ICsKPiA+ICsK PiA+ICtpbnQgaWd0X3Bzcl9nZXRfc2lua19jcmMoaW50IGZkLCBjaGFyICpkYXRhKQo+ID4gK3sK PiA+ICsgICAgICAgaW50IHJjLCBlcnJub187Cj4gPiArICAgICAgIGNoYXIgYnVmWzEzXTsKPiA+ ICsKPiA+ICsgICAgICAgbWVtc2V0KGJ1ZiwgMCwgMTMpOwo+ID4gKyAgICAgICBsc2VlayhmZCwg MCwgU0VFS19TRVQpOwo+ID4gKwo+ID4gKyAgICAgICByYyA9IHJlYWQoZmQsIGJ1ZiwgMTIpOwo+ ID4gKyAgICAgICBlcnJub18gPSBlcnJubzsKPiA+ICsKPiA+ICsgICAgICAgaWYgKHJjID09IC0x KSB7Cj4gPiArICAgICAgICAgICAgICAgaWYgKGVycm5vXyA9PSBFTk9UVFkpCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICBpZ3RfaW5mbygiU2luayBDUkMgbm90IHN1cHBvcnRlZDogcGFuZWwg ZG9lc24ndCBzdXBwb3J0IGl0XG4iKTsKPiA+ICsgICAgICAgICAgICAgICBlbHNlIGlmIChlcnJu b18gIT0gRVRJTUVET1VUKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgaWd0X2Fzc2VydF9m KHJjICE9IC0xLCAiVW5leHBlY3RlZCBlcnJvcjogJWRcbiIsCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZXJybm9fKTsKPiA+ICsgICAgICAgICAgICAgICByZXR1cm4g ZXJybm9fOwo+ID4gKyAgICAgICB9IGVsc2Ugewo+ID4gKyAgICAgICAgICAgICAgIGludCBpOwo+ ID4gKyAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB2YWwgPSBzdHJ0b3VsbChidWYs IE5VTEwsIDE2KTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICBmb3IgKGkgPSA1OyBpID49IDA7 IGktLSwgdmFsID4+PSA4KSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0g KHVuc2lnbmVkIGNoYXIpICh2YWwgJiAweGZmKTsKPiA+ICsgICAgICAgICAgICAgICB9Cj4gPiAr ICAgICAgICAgICAgICAgcmV0dXJuIDA7Cj4gPiArICAgICAgIH0KPiA+ICt9Cj4gPiBkaWZmIC0t Z2l0IGEvbGliL2lndF9wc3IuaCBiL2xpYi9pZ3RfcHNyLmgKPiA+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4gPiBpbmRleCAwMDAwMDAwLi5kOTRjZGZhCj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysg Yi9saWIvaWd0X3Bzci5oCj4gPiBAQCAtMCwwICsxLDQzIEBACj4gPiArLyoKPiA+ICsgKiBDb3B5 cmlnaHQgwqkgMjAxNyBJbnRlbCBDb3Jwb3JhdGlvbgo+ID4gKyAqCj4gPiArICogUGVybWlzc2lv biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWlu aW5nIGEKPiA+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l bnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ID4gKyAqIHRvIGRlYWwgaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24K PiA+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwg ZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiA+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhl IFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiA+ICsgKiBTb2Z0 d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25k aXRpb25zOgo+ID4gKyAqCj4gPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRo aXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ID4gKyAqIHBhcmFncmFw aCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9u cyBvZiB0aGUKPiA+ICsgKiBTb2Z0d2FyZS4KPiA+ICsgKgo+ID4gKyAqIFRIRSBTT0ZUV0FSRSBJ UyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNT IE9SCj4gPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gPiAr ICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xB SU0sIERBTUFHRVMgT1IgT1RIRVIKPiA+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNU SU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ID4gKyAqIEZST00s IE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1Ig T1RIRVIgREVBTElOR1MKPiA+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gPiArICovCj4gPiArCj4g PiArI2lmbmRlZiBJR1RfUFNSX0gKPiA+ICsjZGVmaW5lIElHVF9QU1JfSAo+ID4gKwo+ID4gKyNk ZWZpbmUgaWd0X3Bzcl9lbmFibGUoKSBpZ3Rfc2V0X21vZHVsZV9wYXJhbV9pbnQoImVuYWJsZV9w c3IiLCAxKQo+ID4gKyNkZWZpbmUgaWd0X3Bzcl9kaXNhYmxlKCkgaWd0X3NldF9tb2R1bGVfcGFy YW1faW50KCJlbmFibGVfcHNyIiwgMCkKPiA+ICsKPiA+ICtib29sIGlndF9wc3Jfc2lua19zdXBw b3J0KGludCBmZCk7Cj4gPiArYm9vbCBpZ3RfcHNyX3NvdXJjZV9zdXBwb3J0KGludCBmZCk7Cj4g PiArYm9vbCBpZ3RfcHNyX3Bvc3NpYmxlKGludCBmZCk7Cj4gPiArYm9vbCBpZ3RfcHNyX2FjdGl2 ZShpbnQgZmQpOwo+ID4gK2Jvb2wgaWd0X3Bzcl9hd2FpdF9zdGF0dXMoaW50IGZkLCBib29sIGFj dGl2ZSk7Cj4gPiArYm9vbCBpZ3RfcHNyX2VuYWJsZWQoaW50IGZkKTsKPiA+ICt2b2lkIGlndF9w c3JfcHJpbnRfc3RhdHVzKGludCBmZCk7Cj4gPiArYm9vbCBpZ3RfcHNyX3ZhbGlkX2Nvbm5lY3Rv cihkcm1Nb2RlQ29ubmVjdG9yUHRyIGNvbm5lY3Rvcik7Cj4gPiArYm9vbCBpZ3RfcHNyX2ZpbmRf Z29vZF9tb2RlKGRybU1vZGVDb25uZWN0b3JQdHIgY29ubmVjdG9yLAo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRybU1vZGVNb2RlSW5mb1B0ciAqbW9kZSk7Cj4gPiAraW50IGlndF9w c3Jfb3Blbl9zaW5rX2NyYyhpbnQgZHJtX2ZkKTsKPiA+ICtpbnQgaWd0X3Bzcl9nZXRfc2lua19j cmMoaW50IGZkLCBjaGFyICpkYXRhKTsKPiA+ICsKPiA+ICsjZW5kaWYgLyogSUdUX1BTUl9IICov Cj4gPiAtLQo+ID4gMi43LjQKPiA+Cj4gPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwo+ID4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+ID4gSW50ZWwtZ2Z4 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+ID4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngKPiAKPiAKPiAKPiAtLSAKPiBSb2RyaWdvIFZpdmkK PiBCbG9nOiBodHRwOi8vYmxvZy52aXZpLmVuZy5icgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9pbnRlbC1nZngK