From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id C11668999A for ; Mon, 4 Mar 2019 08:16:33 +0000 (UTC) References: <1551577146-2348-1-git-send-email-kevin.strasser@intel.com> <1551577146-2348-2-git-send-email-kevin.strasser@intel.com> From: Maarten Lankhorst Message-ID: Date: Mon, 4 Mar 2019 09:16:30 +0100 MIME-Version: 1.0 In-Reply-To: <1551577146-2348-2-git-send-email-kevin.strasser@intel.com> Content-Language: en-US Subject: Re: [igt-dev] [RFC 1/5] lib: Add halffloat implementation 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: Kevin Strasser , igt-dev@lists.freedesktop.org List-ID: T3AgMDMtMDMtMjAxOSBvbSAwMjozOSBzY2hyZWVmIEtldmluIFN0cmFzc2VyOgo+IFByb2JlIGZv ciBhbmQgbWFrZSBhbiBBUEkgYXZhaWxhYmxlIGZvciB0ZXN0cyB0byB1c2UgZjE2YyBpbnRyaW5z aWNzIHRvCj4gZ2VuZXJhdGUgbmVlZGVkIGZwMTYgcGl4ZWwgZGF0YS4KPgo+IEFsc28gaW1wb3J0 IGEgcHVyZSBjIGZwMzIgPC0+IGZwMTYgY29udmVyc2lvbiBpbXBsZW1lbnRhdGlvbiBmcm9tIE1l c2EKPiAxOC4zLjQsIHdoaWNoIHdpbGwgYWN0IGFzIGEgZmFsbGJhY2sgd2hlbiBmMTZjIGlzIHVu YXZhaWxhYmxlLgo+Cj4gU2lnbmVkLW9mZi1ieTogS2V2aW4gU3RyYXNzZXIgPGtldmluLnN0cmFz c2VyQGludGVsLmNvbT4KPiAtLS0KPiAgQ09QWUlORyAgICAgICAgICAgICAgfCAgMjIgKysrKysr Cj4gIGxpYi9NYWtlZmlsZS5zb3VyY2VzIHwgICAyICsKPiAgbGliL2lndF9oYWxmZmxvYXQuYyAg fCAyMTggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Cj4gIGxpYi9pZ3RfaGFsZmZsb2F0LmggIHwgIDI3ICsrKysrKysKPiAgbGliL2lndF94ODYuYyAg ICAgICAgfCAgIDkgKysrCj4gIGxpYi9pZ3RfeDg2LmggICAgICAgIHwgICAxICsKPiAgbGliL21l c29uLmJ1aWxkICAgICAgfCAgIDEgKwo+ICA3IGZpbGVzIGNoYW5nZWQsIDI4MCBpbnNlcnRpb25z KCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaWd0X2hhbGZmbG9hdC5jCj4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBsaWIvaWd0X2hhbGZmbG9hdC5oCj4KPiBkaWZmIC0tZ2l0IGEvQ09QWUlORyBi L0NPUFlJTkcKPiBpbmRleCAyOWUwMjM4Li4wZmU2NTg0IDEwMDY0NAo+IC0tLSBhL0NPUFlJTkcK PiArKysgYi9DT1BZSU5HCj4gQEAgLTEyNiwzICsxMjYsMjUgQEAgU1BFQ0lBTCwgRElSRUNULCBJ TkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCj4gIFdIQVRT T0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhF UiBJTiBBTgo+ICBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElP VVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgo+ICBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVT RSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgo+ICsKPiArQ29weXJpZ2h0IChDKSAx OTk5LTIwMDcgIEJyaWFuIFBhdWwgICBBbGwgUmlnaHRzIFJlc2VydmVkLgo+ICtDb3B5cmlnaHQg MjAxNSBQaGlsaXAgVGF5bG9yIDxwaGlsaXBAemF5bmFyLmNvLnVrPgo+ICtDb3B5cmlnaHQgMjAx OCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCj4gKwo+ICtQZXJtaXNzaW9uIGlzIGhlcmVi eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICtj b3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAo dGhlICJTb2Z0d2FyZSIpLAo+ICt0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3Ry aWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gK3RoZSByaWdodHMgdG8gdXNl LCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ ICthbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNv bnMgdG8gd2hvbSB0aGUKPiArU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0 IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArCj4gK1RoZSBhYm92ZSBjb3B5cmlnaHQg bm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCj4gK2lu IGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgo+ICsK PiArVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg QU5ZIEtJTkQsIEVYUFJFU1MKPiArT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRF RCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gK0ZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFM TAo+ICtUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBD TEFJTSwgREFNQUdFUyBPUgo+ICtPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9O IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKPiArQVJJU0lORyBGUk9NLCBPVVQgT0Yg T1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCj4gK09USEVS IERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KPiBkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlLnNv dXJjZXMgYi9saWIvTWFrZWZpbGUuc291cmNlcwo+IGluZGV4IGNmMjcyMDkuLjg5ZjZjZTUgMTAw NjQ0Cj4gLS0tIGEvbGliL01ha2VmaWxlLnNvdXJjZXMKPiArKysgYi9saWIvTWFrZWZpbGUuc291 cmNlcwo+IEBAIC0zMCw2ICszMCw4IEBAIGxpYl9zb3VyY2VfbGlzdCA9CSAJXAo+ICAJaWd0X2d0 LmgJCVwKPiAgCWlndF9ndnQuYwkJXAo+ICAJaWd0X2d2dC5oCQlcCj4gKwlpZ3RfaGFsZmZsb2F0 LmMJCVwKPiArCWlndF9oYWxmZmxvYXQuaAkJXAo+ICAJaWd0X21hdHJpeC5jCQlcCj4gIAlpZ3Rf bWF0cml4LmgJCVwKPiAgCWlndF9wcmltZXMuYwkJXAo+IGRpZmYgLS1naXQgYS9saWIvaWd0X2hh bGZmbG9hdC5jIGIvbGliL2lndF9oYWxmZmxvYXQuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g aW5kZXggMDAwMDAwMC4uZTJhYjAwYQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9saWIvaWd0X2hh bGZmbG9hdC5jCj4gQEAgLTAsMCArMSwyMTggQEAKPiArLyoKPiArICogQ29weXJpZ2h0IChDKSAx OTk5LTIwMDcgIEJyaWFuIFBhdWwgICBBbGwgUmlnaHRzIFJlc2VydmVkLgo+ICsgKiBDb3B5cmln aHQgMjAxNSBQaGlsaXAgVGF5bG9yIDxwaGlsaXBAemF5bmFyLmNvLnVrPgo+ICsgKiBDb3B5cmln aHQgMjAxOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCj4gKyAqCj4gKyAqIFBlcm1pc3Np b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp bmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVu dGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3 YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiAr ICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3Ry aWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdh cmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBm dXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9u IG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAo+ICsgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50 aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElT IFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MK PiArICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUg QVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFN QUdFUyBPUgo+ICsgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKPiArICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1Ig SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCj4gKyAqIE9USEVS IERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8YXNzZXJ0 Lmg+Cj4gKyNpbmNsdWRlIDxtYXRoLmg+Cj4gKwo+ICsjaW5jbHVkZSAiaWd0X2hhbGZmbG9hdC5o Igo+ICsjaW5jbHVkZSAiaWd0X3g4Ni5oIgo+ICsKPiArdHlwZWRlZiB1bmlvbiB7IGZsb2F0IGY7 IGludDMyX3QgaTsgdWludDMyX3QgdTsgfSBmaV90eXBlOwo+ICsKPiArLyoqCj4gKyAqIENvbnZl cnQgYSA0LWJ5dGUgZmxvYXQgdG8gYSAyLWJ5dGUgaGFsZiBmbG9hdC4KPiArICoKPiArICogTm90 IGFsbCBmbG9hdDMyIHZhbHVlcyBjYW4gYmUgcmVwcmVzZW50ZWQgZXhhY3RseSBhcyBhIGZsb2F0 MTYgdmFsdWUuIFdlCj4gKyAqIHJvdW5kIHN1Y2ggaW50ZXJtZWRpYXRlIGZsb2F0MzIgdmFsdWVz IHRvIHRoZSBuZWFyZXN0IGZsb2F0MTYuIFdoZW4gdGhlCj4gKyAqIGZsb2F0MzIgbGllcyBleGFj dGx5IGJldHdlZW4gdG8gZmxvYXQxNiB2YWx1ZXMsIHdlIHJvdW5kIHRvIHRoZSBvbmUgd2l0aAo+ ICsgKiBhbiBldmVuIG1hbnRpc3NhLgo+ICsgKgo+ICsgKiBUaGlzIHJvdW5kaW5nIGJlaGF2aW9y IGhhcyBzZXZlcmFsIGJlbmVmaXRzOgo+ICsgKiAgIC0gSXQgaGFzIG5vIHNpZ24gYmlhcy4KPiAr ICoKPiArICogICAtIEl0IHJlcHJvZHVjZXMgdGhlIGJlaGF2aW9yIG9mIHJlYWwgaGFyZHdhcmU6 IG9wY29kZSBGMzJUTzE2IGluIEludGVsJ3MKPiArICogICAgIEdQVSBJU0EuCj4gKyAqCj4gKyAq ICAgLSBCeSByZXByb2R1Y2luZyB0aGUgYmVoYXZpb3Igb2YgdGhlIEdQVSAoYXQgbGVhc3Qgb24g SW50ZWwgaGFyZHdhcmUpLAo+ICsgKiAgICAgY29tcGlsZS10aW1lIGV2YWx1YXRpb24gb2YgY29u c3RhbnQgcGFja0hhbGYyeDE2IEdMU0wgZXhwcmVzc2lvbnMgd2lsbAo+ICsgKiAgICAgcmVzdWx0 IGluIHRoZSBzYW1lIHZhbHVlIGFzIGlmIHRoZSBleHByZXNzaW9uIHdlcmUgZXhlY3V0ZWQgb24g dGhlIEdQVS4KPiArICovCj4gK3N0YXRpYyB1aW50MTZfdCBmbG9hdF90b19oYWxmKGZsb2F0IHZh bCkKPiArewo+ICsJY29uc3QgZmlfdHlwZSBmaSA9IHt2YWx9Owo+ICsJY29uc3QgaW50IGZsdF9t ID0gZmkuaSAmIDB4N2ZmZmZmOwo+ICsJY29uc3QgaW50IGZsdF9lID0gKGZpLmkgPj4gMjMpICYg MHhmZjsKPiArCWNvbnN0IGludCBmbHRfcyA9IChmaS5pID4+IDMxKSAmIDB4MTsKPiArCWludCBz LCBlLCBtID0gMDsKPiArCXVpbnQxNl90IHJlc3VsdDsKPiArCj4gKwkvKiBzaWduIGJpdCAqLwo+ ICsJcyA9IGZsdF9zOwo+ICsKPiArCS8qIGhhbmRsZSBzcGVjaWFsIGNhc2VzICovCj4gKwlpZiAo KGZsdF9lID09IDApICYmIChmbHRfbSA9PSAwKSkgewo+ICsJCS8qIHplcm8gKi8KPiArCQkvKiBt ID0gMDsgLSBhbHJlYWR5IHNldCAqLwo+ICsJCWUgPSAwOwo+ICsJfSBlbHNlIGlmICgoZmx0X2Ug PT0gMCkgJiYgKGZsdF9tICE9IDApKSB7Cj4gKwkJLyogZGVub3JtIC0tIGRlbm9ybSBmbG9hdCBt YXBzIHRvIDAgaGFsZiAqLwo+ICsJCS8qIG0gPSAwOyAtIGFscmVhZHkgc2V0ICovCj4gKwkJZSA9 IDA7Cj4gKwl9IGVsc2UgaWYgKChmbHRfZSA9PSAweGZmKSAmJiAoZmx0X20gPT0gMCkpIHsKPiAr CQkvKiBpbmZpbml0eSAqLwo+ICsJCS8qIG0gPSAwOyAtIGFscmVhZHkgc2V0ICovCj4gKwkJZSA9 IDMxOwo+ICsJfSBlbHNlIGlmICgoZmx0X2UgPT0gMHhmZikgJiYgKGZsdF9tICE9IDApKSB7Cj4g KwkJLyogTmFOICovCj4gKwkJbSA9IDE7Cj4gKwkJZSA9IDMxOwo+ICsJfSBlbHNlIHsKPiArCQkv KiByZWd1bGFyIG51bWJlciAqLwo+ICsJCWNvbnN0IGludCBuZXdfZXhwID0gZmx0X2UgLSAxMjc7 Cj4gKwkJaWYgKG5ld19leHAgPCAtMTQpIHsKPiArCQkJLyogVGhlIGZsb2F0MzIgbGllcyBpbiB0 aGUgcmFuZ2UgKDAuMCwgbWluX25vcm1hbDE2KSBhbmQKPiArCQkJICogaXMgcm91bmRlZCB0byBh IG5lYXJieSBmbG9hdDE2IHZhbHVlLiBUaGUgcmVzdWx0IHdpbGwKPiArCQkJICogYmUgZWl0aGVy IHplcm8sIHN1Ym5vcm1hbCwgb3Igbm9ybWFsLgo+ICsJCQkgKi8KPiArCQkJZSA9IDA7Cj4gKwkJ CW0gPSBscmludGYoKDEgPDwgMjQpICogZmFic2YoZmkuZikpOwo+ICsJCX0gZWxzZSBpZiAobmV3 X2V4cCA+IDE1KSB7Cj4gKwkJCS8qIG1hcCB0aGlzIHZhbHVlIHRvIGluZmluaXR5ICovCj4gKwkJ CS8qIG0gPSAwOyAtIGFscmVhZHkgc2V0ICovCj4gKwkJCWUgPSAzMTsKPiArCQl9IGVsc2Ugewo+ ICsJCQkvKiBUaGUgZmxvYXQzMiBsaWVzIGluIHRoZSByYW5nZQo+ICsJCQkgKiAgIFttaW5fbm9y bWFsMTYsIG1heF9ub3JtYWwxNiArIG1heF9zdGVwMTYpCj4gKwkJCSAqIGFuZCBpcyByb3VuZGVk IHRvIGEgbmVhcmJ5IGZsb2F0MTYgdmFsdWUuIFRoZSByZXN1bHQKPiArCQkJICogd2lsbCBiZSBl aXRoZXIgbm9ybWFsIG9yIGluZmluaXRlLgo+ICsJCQkgKi8KPiArCQkJZSA9IG5ld19leHAgKyAx NTsKPiArCQkJbSA9IGxyaW50ZihmbHRfbSAvIChmbG9hdCkoMSA8PCAxMykpOwo+ICsJCX0KPiAr CX0KPiArCj4gKwlhc3NlcnQoMCA8PSBtICYmIG0gPD0gMTAyNCk7Cj4gKwlpZiAobSA9PSAxMDI0 KSB7Cj4gKwkJLyogVGhlIGZsb2F0MzIgd2FzIHJvdW5kZWQgdXB3YXJkcyBpbnRvIHRoZSByYW5n ZSBvZiB0aGUgbmV4dAo+ICsJCSAqIGV4cG9uZW50LCBzbyBidW1wIHRoZSBleHBvbmVudC4gVGhp cyBjb3JyZWN0bHkgaGFuZGxlcyB0aGUKPiArCQkgKiBjYXNlIHdoZXJlIGYzMiBzaG91bGQgYmUg cm91bmRlZCB1cCB0byBmbG9hdDE2IGluZmluaXR5Lgo+ICsJCSAqLwo+ICsJCSsrZTsKPiArCQlt ID0gMDsKPiArCX0KPiArCj4gKwlyZXN1bHQgPSAocyA8PCAxNSkgfCAoZSA8PCAxMCkgfCBtOwo+ ICsJcmV0dXJuIHJlc3VsdDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIENvbnZlcnQgYSAyLWJ5dGUg aGFsZiBmbG9hdCB0byBhIDQtYnl0ZSBmbG9hdC4KPiArICogQmFzZWQgb24gY29kZSBmcm9tOgo+ ICsgKiBodHRwOi8vd3d3Lm9wZW5nbC5vcmcvZGlzY3Vzc2lvbl9ib2FyZHMvdWJiL0ZvcnVtMy9I VE1MLzAwODc4Ni5odG1sCj4gKyAqLwo+ICtzdGF0aWMgZmxvYXQgaGFsZl90b19mbG9hdCh1aW50 MTZfdCB2YWwpCj4gK3sKPiArCS8qIFhYWCBjb3VsZCBhbHNvIHVzZSBhIDY0Sy1lbnRyeSBsb29r dXAgdGFibGUgKi8KPiArCWNvbnN0IGludCBtID0gdmFsICYgMHgzZmY7Cj4gKwljb25zdCBpbnQg ZSA9ICh2YWwgPj4gMTApICYgMHgxZjsKPiArCWNvbnN0IGludCBzID0gKHZhbCA+PiAxNSkgJiAw eDE7Cj4gKwlpbnQgZmx0X20sIGZsdF9lLCBmbHRfczsKPiArCWZpX3R5cGUgZmk7Cj4gKwo+ICsJ Lyogc2lnbiBiaXQgKi8KPiArCWZsdF9zID0gczsKPiArCj4gKwkvKiBoYW5kbGUgc3BlY2lhbCBj YXNlcyAqLwo+ICsJaWYgKChlID09IDApICYmIChtID09IDApKSB7Cj4gKwkJLyogemVybyAqLwo+ ICsJCWZsdF9tID0gMDsKPiArCQlmbHRfZSA9IDA7Cj4gKwl9IGVsc2UgaWYgKChlID09IDApICYm IChtICE9IDApKSB7Cj4gKwkJLyogZGVub3JtIC0tIGRlbm9ybSBoYWxmIHdpbGwgZml0IGluIG5v bi1kZW5vcm0gc2luZ2xlICovCj4gKwkJY29uc3QgZmxvYXQgaGFsZl9kZW5vcm0gPSAxLjBmIC8g MTYzODQuMGY7IC8qIDJeLTE0ICovCj4gKwkJZmxvYXQgbWFudGlzc2EgPSAoKGZsb2F0KSAobSkp IC8gMTAyNC4wZjsKPiArCQlmbG9hdCBzaWduID0gcyA/IC0xLjBmIDogMS4wZjsKPiArCQlyZXR1 cm4gc2lnbiAqIG1hbnRpc3NhICogaGFsZl9kZW5vcm07Cj4gKwl9IGVsc2UgaWYgKChlID09IDMx KSAmJiAobSA9PSAwKSkgewo+ICsJCS8qIGluZmluaXR5ICovCj4gKwkJZmx0X2UgPSAweGZmOwo+ ICsJCWZsdF9tID0gMDsKPiArCX0gZWxzZSBpZiAoKGUgPT0gMzEpICYmIChtICE9IDApKSB7Cj4g KwkJLyogTmFOICovCj4gKwkJZmx0X2UgPSAweGZmOwo+ICsJCWZsdF9tID0gMTsKPiArCX0gZWxz ZSB7Cj4gKwkJLyogcmVndWxhciAqLwo+ICsJCWZsdF9lID0gZSArIDExMjsKPiArCQlmbHRfbSA9 IG0gPDwgMTM7Cj4gKwl9Cj4gKwo+ICsJZmkuaSA9IChmbHRfcyA8PCAzMSkgfCAoZmx0X2UgPDwg MjMpIHwgZmx0X207Cj4gKwlyZXR1cm4gZmkuZjsKPiArfQo+ICsKPiArI2lmIGRlZmluZWQoX194 ODZfNjRfXykgJiYgIWRlZmluZWQoX19jbGFuZ19fKQo+ICsjcHJhZ21hIEdDQyBwdXNoX29wdGlv bnMKPiArI3ByYWdtYSBHQ0MgdGFyZ2V0KCJmMTZjIikKPiArCj4gKyNpbmNsdWRlIDxpbW1pbnRy aW4uaD4KPiArCj4gK3N0YXRpYyB1aW50MTZfdCBmbG9hdF90b19oYWxmX2YxNmMoZmxvYXQgZikK PiArewo+ICsJcmV0dXJuIF9jdnRzc19zaChmLCAwKTsKPiArfQo+ICsKPiArc3RhdGljIGZsb2F0 IGhhbGZfdG9fZmxvYXRfZjE2Yyh1aW50MTZfdCBoKQo+ICt7Cj4gKwlyZXR1cm4gX2N2dHNoX3Nz KGgpOwo+ICt9Cj4gKwo+ICsjcHJhZ21hIEdDQyBwb3Bfb3B0aW9ucwo+ICsKPiArc3RhdGljIHVp bnQxNl90ICgqcmVzb2x2ZV9mbG9hdF90b19oYWxmKHZvaWQpKShmbG9hdCBmKQo+ICt7Cj4gKwlp ZiAoaWd0X3g4Nl9mZWF0dXJlcygpICYgRjE2QykKPiArCQlyZXR1cm4gZmxvYXRfdG9faGFsZl9m MTZjOwo+ICsKPiArCXJldHVybiBmbG9hdF90b19oYWxmOwo+ICt9Cj4gKwo+ICt1aW50MTZfdCBp Z3RfZmxvYXRfdG9faGFsZihmbG9hdCBmKQo+ICsJX19hdHRyaWJ1dGVfXygoaWZ1bmMoInJlc29s dmVfZmxvYXRfdG9faGFsZiIpKSk7Cj4gKwo+ICtzdGF0aWMgZmxvYXQgKCpyZXNvbHZlX2hhbGZf dG9fZmxvYXQodm9pZCkpKHVpbnQxNl90IGgpCj4gK3sKPiArCWlmIChpZ3RfeDg2X2ZlYXR1cmVz KCkgJiBGMTZDKQo+ICsJCXJldHVybiBoYWxmX3RvX2Zsb2F0X2YxNmM7Cj4gKwo+ICsJcmV0dXJu IGhhbGZfdG9fZmxvYXQ7Cj4gK30KPiArCj4gK2Zsb2F0IGlndF9oYWxmX3RvX2Zsb2F0KHVpbnQx Nl90IGgpCj4gKwlfX2F0dHJpYnV0ZV9fKChpZnVuYygicmVzb2x2ZV9oYWxmX3RvX2Zsb2F0Iikp KTsKPiArCj4gKyNlbHNlCj4gKwo+ICtpZ3RfaGFsZiBpZ3RfZmxvYXRfdG9faGFsZihmbG9hdCBm KQo+ICt7Cj4gKwlyZXR1cm4gZmxvYXRfdG9faGFsZihmKTsKPiArfQo+ICsKPiArZmxvYXQgaWd0 X2hhbGZfdG9fZmxvYXQodWludDE2X3QgaCkKPiArewo+ICsJcmV0dXJuIGhhbGZfdG9fZmxvYXQo aCk7Cj4gK30KPiArCj4gKyNlbmRpZgo+ICsKPiBkaWZmIC0tZ2l0IGEvbGliL2lndF9oYWxmZmxv YXQuaCBiL2xpYi9pZ3RfaGFsZmZsb2F0LmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4 IDAwMDAwMDAuLjJhZTE4OWUKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGliL2lndF9oYWxmZmxv YXQuaAo+IEBAIC0wLDAgKzEsMjcgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IChDKSAxOTk5LTIw MDcgIEJyaWFuIFBhdWwgICBBbGwgUmlnaHRzIFJlc2VydmVkLgo+ICsgKgo+ICsgKiBQZXJtaXNz aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRh aW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l bnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0 d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4g KyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0 cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3 YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMg ZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoK PiArICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lv biBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKPiArICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFu dGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJ UyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNT Cj4gKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhF IEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERB TUFHRVMgT1IKPiArICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBD T05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCj4gKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9S IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgo+ICsgKiBPVEhF UiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPHN0ZGlu dC5oPgo+ICsKPiArdWludDE2X3QgaWd0X2Zsb2F0X3RvX2hhbGYoZmxvYXQgZik7Cj4gK2Zsb2F0 IGlndF9oYWxmX3RvX2Zsb2F0KHVpbnQxNl90IGgpOwo+ICsKPiBkaWZmIC0tZ2l0IGEvbGliL2ln dF94ODYuYyBiL2xpYi9pZ3RfeDg2LmMKPiBpbmRleCA4OGU1MTRkLi45ZDI4ZTZiIDEwMDY0NAo+ IC0tLSBhL2xpYi9pZ3RfeDg2LmMKPiArKysgYi9saWIvaWd0X3g4Ni5jCj4gQEAgLTg4LDYgKzg4 LDEwIEBACj4gICNkZWZpbmUgYml0X0FWWAkJKDEgPDwgMjgpCj4gICNlbmRpZgo+ICAKPiArI2lm bmRlZiBiaXRfRjE2Qwo+ICsjZGVmaW5lIGJpdF9GMTZDCSgxIDw8IDI5KQo+ICsjZW5kaWYKPiAr Cj4gICNpZm5kZWYgYml0X0FWWDIKPiAgI2RlZmluZSBiaXRfQVZYMgkoMTw8NSkKPiAgI2VuZGlm Cj4gQEAgLTEzOCw2ICsxNDIsOSBAQCB1bnNpZ25lZCBpZ3RfeDg2X2ZlYXR1cmVzKHZvaWQpCj4g IAo+ICAJCWlmIChlZHggJiBiaXRfU1NFMikKPiAgCQkJZmVhdHVyZXMgfD0gU1NFMjsKPiArCj4g KwkJaWYgKGVkeCAmIGJpdF9GMTZDKQo+ICsJCQlmZWF0dXJlcyB8PSBGMTZDOwo+ICAJfQo+ICAK PiAgCWlmIChtYXggPj0gNykgewo+IEBAIC0xNzQsNiArMTgxLDggQEAgY2hhciAqaWd0X3g4Nl9m ZWF0dXJlc190b19zdHJpbmcodW5zaWduZWQgZmVhdHVyZXMsIGNoYXIgKmxpbmUpCj4gIAkJbGlu ZSArPSBzcHJpbnRmKGxpbmUsICIsIGF2eCIpOwo+ICAJaWYgKGZlYXR1cmVzICYgQVZYMikKPiAg CQlsaW5lICs9IHNwcmludGYobGluZSwgIiwgYXZ4MiIpOwo+ICsJaWYgKGZlYXR1cmVzICYgRjE2 QykKPiArCQlsaW5lICs9IHNwcmludGYobGluZSwgIiwgZjE2YyIpOwo+ICAKPiAgCSh2b2lkKWxp bmU7Cj4gIAo+IGRpZmYgLS1naXQgYS9saWIvaWd0X3g4Ni5oIGIvbGliL2lndF94ODYuaAo+IGlu ZGV4IGQ0ZjhjMzQuLmM3Yjg0ZGUgMTAwNjQ0Cj4gLS0tIGEvbGliL2lndF94ODYuaAo+ICsrKyBi L2xpYi9pZ3RfeDg2LmgKPiBAQCAtMzksNiArMzksNyBAQAo+ICAjZGVmaW5lIFNTRTRfMgkweDQw Cj4gICNkZWZpbmUgQVZYCTB4ODAKPiAgI2RlZmluZSBBVlgyCTB4MTAwCj4gKyNkZWZpbmUgRjE2 QwkweDIwMAo+ICAKPiAgI2lmIGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2kzODZf XykKPiAgdW5zaWduZWQgaWd0X3g4Nl9mZWF0dXJlcyh2b2lkKTsKPiBkaWZmIC0tZ2l0IGEvbGli L21lc29uLmJ1aWxkIGIvbGliL21lc29uLmJ1aWxkCj4gaW5kZXggMGViNTU4NS4uZWRmMGE2NiAx MDA2NDQKPiAtLS0gYS9saWIvbWVzb24uYnVpbGQKPiArKysgYi9saWIvbWVzb24uYnVpbGQKPiBA QCAtMTEsNiArMTEsNyBAQCBsaWJfc291cmNlcyA9IFsKPiAgCSdpZ3RfYXV4LmMnLAo+ICAJJ2ln dF9ndC5jJywKPiAgCSdpZ3RfZ3Z0LmMnLAo+ICsJJ2lndF9oYWxmZmxvYXQuYycsCj4gIAknaWd0 X21hdHJpeC5jJywKPiAgCSdpZ3RfcHJpbWVzLmMnLAo+ICAJJ2lndF9yYW5kLmMnLAoKNCBmdW5j dGlvbiBjYWxscyBmb3IgZXZlcnkgcGl4ZWwgaXMgYSBiaXQgbXVjaC4gSXMgdGhlcmUgYW55IGNs ZWFuZXIgd2F5IHdlIGNvdWxkIGFjY29tcGxpc2ggdGhlIHNhbWU/Cgp2b2lkIGlndF9mbG9hdF90 b19oYWxmKGNvbnN0IGZsb2F0ICosIHVpbnQxNl90ICosIGludCBudW0pCgp2b2lkIGlndF9oYWxm X3RvX2Zsb2F0KGNvbnN0IHVpbnQxNl90ICosIGZsb2F0ICosIGludCBudW0pCgpJZiBubyBzd2l6 emxlIGlzIHJlcXVpcmVkLCBpdCBjb3VsZCBkbyBhbiBlbnRpcmUgbGluZSBpbiAxIGdvLCBlbHNl IHBlciA0IG9yIDMuCgpNaWdodCBiZSB3b3J0aCBpdCB0byBzdGlsbCBkbyBhIGxpbmUgaW4gMSBn bywgZXZlbiBmb3IgeHJnYiwgd2l0aCBmb3JtYXQgYWx3YXlzIHNldCB0byByYmExMjhmLCBoYXJk d2FyZSB3aWxsIGlnbm9yZSB0aGUgWCBjb21wb25lbnQgYW55d2F5LiA6KQoKQW5kIHRoZW4gaWYg cmVxdWlyZWQgcmVzd2l6emxlLgoKfk1hYXJ0ZW4KCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vaWd0LWRldg==