From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0163189FA7 for ; Fri, 5 Apr 2019 19:23:46 +0000 (UTC) Date: Fri, 5 Apr 2019 22:23:43 +0300 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Message-ID: <20190405192343.GR3888@intel.com> References: <1551838717-5283-1-git-send-email-kevin.strasser@intel.com> <1551838717-5283-2-git-send-email-kevin.strasser@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <1551838717-5283-2-git-send-email-kevin.strasser@intel.com> Subject: Re: [igt-dev] [RFC v2 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 Cc: igt-dev@lists.freedesktop.org List-ID: T24gVHVlLCBNYXIgMDUsIDIwMTkgYXQgMDY6MTg6MzNQTSAtMDgwMCwgS2V2aW4gU3RyYXNzZXIg d3JvdGU6Cj4gUHJvYmUgZm9yIGFuZCBtYWtlIGFuIEFQSSBhdmFpbGFibGUgZm9yIHRlc3RzIHRv IHVzZSBmMTZjIGludHJpbnNpY3MgdG8KPiBnZW5lcmF0ZSBuZWVkZWQgZnAxNiBwaXhlbCBkYXRh Lgo+IAo+IEFsc28gaW1wb3J0IGEgcHVyZSBjIGZwMzIgPC0+IGZwMTYgY29udmVyc2lvbiBpbXBs ZW1lbnRhdGlvbiBmcm9tIE1lc2EKPiAxOC4zLjQsIHdoaWNoIHdpbGwgYWN0IGFzIGEgZmFsbGJh Y2sgd2hlbiBmMTZjIGlzIHVuYXZhaWxhYmxlLgoKVWdoLiBJIGp1c3QgcmVhbGl6ZWQgd2UgZGlk bid0IGdldCB0aGlzIHN0dWZmIG1lcmdlZC4gU29ycnkuIExldCdzIHRyeQp0byByZW1lZHkgdGhh dC4KCj4gCj4gcmZjMjoKPiAtIENoYW5nZSBBUEkgdG8gcmVkdWNlIG51bWJlciBvZiBmdW5jdGlv biBjYWxscyAoTWFhcnRlbikKPiAKPiBTaWduZWQtb2ZmLWJ5OiBLZXZpbiBTdHJhc3NlciA8a2V2 aW4uc3RyYXNzZXJAaW50ZWwuY29tPgo+IC0tLQo+ICBDT1BZSU5HICAgICAgICAgICAgICB8ICAy MiArKysrKwo+ICBsaWIvTWFrZWZpbGUuc291cmNlcyB8ICAgMiArCj4gIGxpYi9pZ3RfaGFsZmZs b2F0LmMgIHwgMjM0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwo+ICBsaWIvaWd0X2hhbGZmbG9hdC5oICB8ICAyNyArKysrKysKPiAgbGliL2lndF94 ODYuYyAgICAgICAgfCAgIDkgKysKPiAgbGliL2lndF94ODYuaCAgICAgICAgfCAgIDEgKwo+ICBs aWIvbWVzb24uYnVpbGQgICAgICB8ICAgMSArCj4gIDcgZmlsZXMgY2hhbmdlZCwgMjk2IGluc2Vy dGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pZ3RfaGFsZmZsb2F0LmMKPiAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGxpYi9pZ3RfaGFsZmZsb2F0LmgKPiAKPiBkaWZmIC0tZ2l0IGEvQ09Q WUlORyBiL0NPUFlJTkcKPiBpbmRleCAyOWUwMjM4Li4wZmU2NTg0IDEwMDY0NAo+IC0tLSBhL0NP UFlJTkcKPiArKysgYi9DT1BZSU5HCj4gQEAgLTEyNiwzICsxMjYsMjUgQEAgU1BFQ0lBTCwgRElS RUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCj4g IFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywg V0hFVEhFUiBJTiBBTgo+ICBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIg VE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgo+ICBPUiBJTiBDT05ORUNUSU9OIFdJVEgg VEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgo+ICsKPiArQ29weXJpZ2h0 IChDKSAxOTk5LTIwMDcgIEJyaWFuIFBhdWwgICBBbGwgUmlnaHRzIFJlc2VydmVkLgo+ICtDb3B5 cmlnaHQgMjAxNSBQaGlsaXAgVGF5bG9yIDxwaGlsaXBAemF5bmFyLmNvLnVrPgo+ICtDb3B5cmln aHQgMjAxOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCj4gKwo+ICtQZXJtaXNzaW9uIGlz IGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcg YQo+ICtjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBm aWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICt0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gK3RoZSByaWdodHMg dG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNl bnNlLAo+ICthbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0 IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBz dWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArCj4gK1RoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVk Cj4gK2luIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJl Lgo+ICsKPiArVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFO VFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKPiArT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1Qg TElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gK0ZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVO VCBTSEFMTAo+ICtUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9S IEFOWSBDTEFJTSwgREFNQUdFUyBPUgo+ICtPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g QUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKPiArQVJJU0lORyBGUk9NLCBP VVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCj4g K09USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KPiBkaWZmIC0tZ2l0IGEvbGliL01ha2Vm aWxlLnNvdXJjZXMgYi9saWIvTWFrZWZpbGUuc291cmNlcwo+IGluZGV4IGNmMjcyMDkuLjg5ZjZj ZTUgMTAwNjQ0Cj4gLS0tIGEvbGliL01ha2VmaWxlLnNvdXJjZXMKPiArKysgYi9saWIvTWFrZWZp bGUuc291cmNlcwo+IEBAIC0zMCw2ICszMCw4IEBAIGxpYl9zb3VyY2VfbGlzdCA9CSAJXAo+ICAJ aWd0X2d0LmgJCVwKPiAgCWlndF9ndnQuYwkJXAo+ICAJaWd0X2d2dC5oCQlcCj4gKwlpZ3RfaGFs ZmZsb2F0LmMJCVwKPiArCWlndF9oYWxmZmxvYXQuaAkJXAo+ICAJaWd0X21hdHJpeC5jCQlcCj4g IAlpZ3RfbWF0cml4LmgJCVwKPiAgCWlndF9wcmltZXMuYwkJXAo+IGRpZmYgLS1naXQgYS9saWIv aWd0X2hhbGZmbG9hdC5jIGIvbGliL2lndF9oYWxmZmxvYXQuYwo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4gaW5kZXggMDAwMDAwMC4uZmMwOTkzMAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9saWIv aWd0X2hhbGZmbG9hdC5jCj4gQEAgLTAsMCArMSwyMzQgQEAKPiArLyoKPiArICogQ29weXJpZ2h0 IChDKSAxOTk5LTIwMDcgIEJyaWFuIFBhdWwgICBBbGwgUmlnaHRzIFJlc2VydmVkLgo+ICsgKiBD b3B5cmlnaHQgMjAxNSBQaGlsaXAgVGF5bG9yIDxwaGlsaXBAemF5bmFyLmNvLnVrPgo+ICsgKiBD b3B5cmlnaHQgMjAxOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCj4gKyAqCj4gKyAqIFBl cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u IG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBk b2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhl IFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRp b24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gs IGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUg U29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2Fy ZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRp b25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJt aXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAo+ICsgKiBpbiBhbGwgY29waWVzIG9yIHN1 YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRX QVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVY UFJFU1MKPiArICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsg KiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJ TSwgREFNQUdFUyBPUgo+ICsgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9O IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKPiArICogQVJJU0lORyBGUk9NLCBPVVQg T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCj4gKyAq IE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8 YXNzZXJ0Lmg+Cj4gKyNpbmNsdWRlIDxtYXRoLmg+Cj4gKwo+ICsjaW5jbHVkZSAiaWd0X2hhbGZm bG9hdC5oIgo+ICsjaW5jbHVkZSAiaWd0X3g4Ni5oIgo+ICsKPiArdHlwZWRlZiB1bmlvbiB7IGZs b2F0IGY7IGludDMyX3QgaTsgdWludDMyX3QgdTsgfSBmaV90eXBlOwo+ICsKPiArLyoqCj4gKyAq IENvbnZlcnQgYSA0LWJ5dGUgZmxvYXQgdG8gYSAyLWJ5dGUgaGFsZiBmbG9hdC4KPiArICoKPiAr ICogTm90IGFsbCBmbG9hdDMyIHZhbHVlcyBjYW4gYmUgcmVwcmVzZW50ZWQgZXhhY3RseSBhcyBh IGZsb2F0MTYgdmFsdWUuIFdlCj4gKyAqIHJvdW5kIHN1Y2ggaW50ZXJtZWRpYXRlIGZsb2F0MzIg dmFsdWVzIHRvIHRoZSBuZWFyZXN0IGZsb2F0MTYuIFdoZW4gdGhlCj4gKyAqIGZsb2F0MzIgbGll cyBleGFjdGx5IGJldHdlZW4gdG8gZmxvYXQxNiB2YWx1ZXMsIHdlIHJvdW5kIHRvIHRoZSBvbmUg d2l0aAo+ICsgKiBhbiBldmVuIG1hbnRpc3NhLgo+ICsgKgo+ICsgKiBUaGlzIHJvdW5kaW5nIGJl aGF2aW9yIGhhcyBzZXZlcmFsIGJlbmVmaXRzOgo+ICsgKiAgIC0gSXQgaGFzIG5vIHNpZ24gYmlh cy4KPiArICoKPiArICogICAtIEl0IHJlcHJvZHVjZXMgdGhlIGJlaGF2aW9yIG9mIHJlYWwgaGFy ZHdhcmU6IG9wY29kZSBGMzJUTzE2IGluIEludGVsJ3MKPiArICogICAgIEdQVSBJU0EuCj4gKyAq Cj4gKyAqICAgLSBCeSByZXByb2R1Y2luZyB0aGUgYmVoYXZpb3Igb2YgdGhlIEdQVSAoYXQgbGVh c3Qgb24gSW50ZWwgaGFyZHdhcmUpLAo+ICsgKiAgICAgY29tcGlsZS10aW1lIGV2YWx1YXRpb24g b2YgY29uc3RhbnQgcGFja0hhbGYyeDE2IEdMU0wgZXhwcmVzc2lvbnMgd2lsbAo+ICsgKiAgICAg cmVzdWx0IGluIHRoZSBzYW1lIHZhbHVlIGFzIGlmIHRoZSBleHByZXNzaW9uIHdlcmUgZXhlY3V0 ZWQgb24gdGhlIEdQVS4KPiArICovCj4gK3N0YXRpYyBpbmxpbmUgdWludDE2X3QgX2Zsb2F0X3Rv X2hhbGYoZmxvYXQgdmFsKQo+ICt7Cj4gKwljb25zdCBmaV90eXBlIGZpID0ge3ZhbH07Cj4gKwlj b25zdCBpbnQgZmx0X20gPSBmaS5pICYgMHg3ZmZmZmY7Cj4gKwljb25zdCBpbnQgZmx0X2UgPSAo ZmkuaSA+PiAyMykgJiAweGZmOwo+ICsJY29uc3QgaW50IGZsdF9zID0gKGZpLmkgPj4gMzEpICYg MHgxOwo+ICsJaW50IHMsIGUsIG0gPSAwOwo+ICsJdWludDE2X3QgcmVzdWx0Owo+ICsKPiArCS8q IHNpZ24gYml0ICovCj4gKwlzID0gZmx0X3M7Cj4gKwo+ICsJLyogaGFuZGxlIHNwZWNpYWwgY2Fz ZXMgKi8KPiArCWlmICgoZmx0X2UgPT0gMCkgJiYgKGZsdF9tID09IDApKSB7Cj4gKwkJLyogemVy byAqLwo+ICsJCS8qIG0gPSAwOyAtIGFscmVhZHkgc2V0ICovCj4gKwkJZSA9IDA7Cj4gKwl9IGVs c2UgaWYgKChmbHRfZSA9PSAwKSAmJiAoZmx0X20gIT0gMCkpIHsKPiArCQkvKiBkZW5vcm0gLS0g ZGVub3JtIGZsb2F0IG1hcHMgdG8gMCBoYWxmICovCj4gKwkJLyogbSA9IDA7IC0gYWxyZWFkeSBz ZXQgKi8KPiArCQllID0gMDsKPiArCX0gZWxzZSBpZiAoKGZsdF9lID09IDB4ZmYpICYmIChmbHRf bSA9PSAwKSkgewo+ICsJCS8qIGluZmluaXR5ICovCj4gKwkJLyogbSA9IDA7IC0gYWxyZWFkeSBz ZXQgKi8KPiArCQllID0gMzE7Cj4gKwl9IGVsc2UgaWYgKChmbHRfZSA9PSAweGZmKSAmJiAoZmx0 X20gIT0gMCkpIHsKPiArCQkvKiBOYU4gKi8KPiArCQltID0gMTsKPiArCQllID0gMzE7Cj4gKwl9 IGVsc2Ugewo+ICsJCS8qIHJlZ3VsYXIgbnVtYmVyICovCj4gKwkJY29uc3QgaW50IG5ld19leHAg PSBmbHRfZSAtIDEyNzsKPiArCQlpZiAobmV3X2V4cCA8IC0xNCkgewo+ICsJCQkvKiBUaGUgZmxv YXQzMiBsaWVzIGluIHRoZSByYW5nZSAoMC4wLCBtaW5fbm9ybWFsMTYpIGFuZAo+ICsJCQkgKiBp cyByb3VuZGVkIHRvIGEgbmVhcmJ5IGZsb2F0MTYgdmFsdWUuIFRoZSByZXN1bHQgd2lsbAo+ICsJ CQkgKiBiZSBlaXRoZXIgemVybywgc3Vibm9ybWFsLCBvciBub3JtYWwuCj4gKwkJCSAqLwo+ICsJ CQllID0gMDsKPiArCQkJbSA9IGxyaW50ZigoMSA8PCAyNCkgKiBmYWJzZihmaS5mKSk7Cj4gKwkJ fSBlbHNlIGlmIChuZXdfZXhwID4gMTUpIHsKPiArCQkJLyogbWFwIHRoaXMgdmFsdWUgdG8gaW5m aW5pdHkgKi8KPiArCQkJLyogbSA9IDA7IC0gYWxyZWFkeSBzZXQgKi8KPiArCQkJZSA9IDMxOwo+ ICsJCX0gZWxzZSB7Cj4gKwkJCS8qIFRoZSBmbG9hdDMyIGxpZXMgaW4gdGhlIHJhbmdlCj4gKwkJ CSAqICAgW21pbl9ub3JtYWwxNiwgbWF4X25vcm1hbDE2ICsgbWF4X3N0ZXAxNikKPiArCQkJICog YW5kIGlzIHJvdW5kZWQgdG8gYSBuZWFyYnkgZmxvYXQxNiB2YWx1ZS4gVGhlIHJlc3VsdAo+ICsJ CQkgKiB3aWxsIGJlIGVpdGhlciBub3JtYWwgb3IgaW5maW5pdGUuCj4gKwkJCSAqLwo+ICsJCQll ID0gbmV3X2V4cCArIDE1Owo+ICsJCQltID0gbHJpbnRmKGZsdF9tIC8gKGZsb2F0KSgxIDw8IDEz KSk7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWFzc2VydCgwIDw9IG0gJiYgbSA8PSAxMDI0KTsKPiAr CWlmIChtID09IDEwMjQpIHsKPiArCQkvKiBUaGUgZmxvYXQzMiB3YXMgcm91bmRlZCB1cHdhcmRz IGludG8gdGhlIHJhbmdlIG9mIHRoZSBuZXh0Cj4gKwkJICogZXhwb25lbnQsIHNvIGJ1bXAgdGhl IGV4cG9uZW50LiBUaGlzIGNvcnJlY3RseSBoYW5kbGVzIHRoZQo+ICsJCSAqIGNhc2Ugd2hlcmUg ZjMyIHNob3VsZCBiZSByb3VuZGVkIHVwIHRvIGZsb2F0MTYgaW5maW5pdHkuCj4gKwkJICovCj4g KwkJKytlOwo+ICsJCW0gPSAwOwo+ICsJfQo+ICsKPiArCXJlc3VsdCA9IChzIDw8IDE1KSB8IChl IDw8IDEwKSB8IG07Cj4gKwlyZXR1cm4gcmVzdWx0Owo+ICt9Cj4gKwo+ICsvKioKPiArICogQ29u dmVydCBhIDItYnl0ZSBoYWxmIGZsb2F0IHRvIGEgNC1ieXRlIGZsb2F0Lgo+ICsgKiBCYXNlZCBv biBjb2RlIGZyb206Cj4gKyAqIGh0dHA6Ly93d3cub3BlbmdsLm9yZy9kaXNjdXNzaW9uX2JvYXJk cy91YmIvRm9ydW0zL0hUTUwvMDA4Nzg2Lmh0bWwKPiArICovCj4gK3N0YXRpYyBpbmxpbmUgZmxv YXQgX2hhbGZfdG9fZmxvYXQodWludDE2X3QgdmFsKQo+ICt7Cj4gKwkvKiBYWFggY291bGQgYWxz byB1c2UgYSA2NEstZW50cnkgbG9va3VwIHRhYmxlICovCj4gKwljb25zdCBpbnQgbSA9IHZhbCAm IDB4M2ZmOwo+ICsJY29uc3QgaW50IGUgPSAodmFsID4+IDEwKSAmIDB4MWY7Cj4gKwljb25zdCBp bnQgcyA9ICh2YWwgPj4gMTUpICYgMHgxOwo+ICsJaW50IGZsdF9tLCBmbHRfZSwgZmx0X3M7Cj4g KwlmaV90eXBlIGZpOwo+ICsKPiArCS8qIHNpZ24gYml0ICovCj4gKwlmbHRfcyA9IHM7Cj4gKwo+ ICsJLyogaGFuZGxlIHNwZWNpYWwgY2FzZXMgKi8KPiArCWlmICgoZSA9PSAwKSAmJiAobSA9PSAw KSkgewo+ICsJCS8qIHplcm8gKi8KPiArCQlmbHRfbSA9IDA7Cj4gKwkJZmx0X2UgPSAwOwo+ICsJ fSBlbHNlIGlmICgoZSA9PSAwKSAmJiAobSAhPSAwKSkgewo+ICsJCS8qIGRlbm9ybSAtLSBkZW5v cm0gaGFsZiB3aWxsIGZpdCBpbiBub24tZGVub3JtIHNpbmdsZSAqLwo+ICsJCWNvbnN0IGZsb2F0 IGhhbGZfZGVub3JtID0gMS4wZiAvIDE2Mzg0LjBmOyAvKiAyXi0xNCAqLwo+ICsJCWZsb2F0IG1h bnRpc3NhID0gKChmbG9hdCkgKG0pKSAvIDEwMjQuMGY7Cj4gKwkJZmxvYXQgc2lnbiA9IHMgPyAt MS4wZiA6IDEuMGY7Cj4gKwkJcmV0dXJuIHNpZ24gKiBtYW50aXNzYSAqIGhhbGZfZGVub3JtOwo+ ICsJfSBlbHNlIGlmICgoZSA9PSAzMSkgJiYgKG0gPT0gMCkpIHsKPiArCQkvKiBpbmZpbml0eSAq Lwo+ICsJCWZsdF9lID0gMHhmZjsKPiArCQlmbHRfbSA9IDA7Cj4gKwl9IGVsc2UgaWYgKChlID09 IDMxKSAmJiAobSAhPSAwKSkgewo+ICsJCS8qIE5hTiAqLwo+ICsJCWZsdF9lID0gMHhmZjsKPiAr CQlmbHRfbSA9IDE7Cj4gKwl9IGVsc2Ugewo+ICsJCS8qIHJlZ3VsYXIgKi8KPiArCQlmbHRfZSA9 IGUgKyAxMTI7Cj4gKwkJZmx0X20gPSBtIDw8IDEzOwo+ICsJfQo+ICsKPiArCWZpLmkgPSAoZmx0 X3MgPDwgMzEpIHwgKGZsdF9lIDw8IDIzKSB8IGZsdF9tOwo+ICsJcmV0dXJuIGZpLmY7Cj4gK30K PiArCj4gKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pICYmICFkZWZpbmVkKF9fY2xhbmdfXykKPiAr I3ByYWdtYSBHQ0MgcHVzaF9vcHRpb25zCj4gKyNwcmFnbWEgR0NDIHRhcmdldCgiZjE2YyIpCj4g Kwo+ICsjaW5jbHVkZSA8aW1taW50cmluLmg+Cj4gKwo+ICtzdGF0aWMgdm9pZCBmbG9hdF90b19o YWxmX2YxNmMoY29uc3QgZmxvYXQgKmYsIHVpbnQxNl90ICpoLCB1bnNpZ25lZCBpbnQgbnVtKQo+ ICt7Cj4gKwlmb3IgKGludCBpID0gMDsgaSA8IG51bTsgaSsrKQo+ICsJCWhbaV0gPSBfY3Z0c3Nf c2goZltpXSwgMCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGhhbGZfdG9fZmxvYXRfZjE2Yyhj b25zdCB1aW50MTZfdCAqaCwgZmxvYXQgKmYsIHVuc2lnbmVkIGludCBudW0pCj4gK3sKPiArCWZv ciAoaW50IGkgPSAwOyBpIDwgbnVtOyBpKyspCj4gKwkJZltpXSA9IF9jdnRzaF9zcyhoW2ldKTsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgZmxvYXRfdG9faGFsZihjb25zdCBmbG9hdCAqZiwgdWlu dDE2X3QgKmgsIHVuc2lnbmVkIGludCBudW0pCj4gK3sKPiArCWZvciAoaW50IGkgPSAwOyBpIDwg bnVtOyBpKyspCj4gKwkJaFtpXSA9IF9mbG9hdF90b19oYWxmKGZbaV0pOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBoYWxmX3RvX2Zsb2F0KGNvbnN0IHVpbnQxNl90ICpoLCBmbG9hdCAqZiwgdW5z aWduZWQgaW50IG51bSkKPiArewo+ICsJZm9yIChpbnQgaSA9IDA7IGkgPCBudW07IGkrKykKPiAr CQlmW2ldID0gX2hhbGZfdG9fZmxvYXQoaFtpXSk7Cj4gK30KPiArCj4gKyNwcmFnbWEgR0NDIHBv cF9vcHRpb25zCgpUaGF0IG5lZWRzIHRvIGJlIGJlZm9yZSB0aGUgZmFsbGJhY2sgaW1wbGVtZW50 YXRpb25zIG9yIGVsc2UgdGhlCmNvbXBpbGVyIGhhcHBpbHkgZW1pdHMgQVZYIGNvZGUgZm9yIHRo ZSBmYWxsYmFja3MuIERpZG4ndCBnbyBkb3duIHNvCndlbGwgb24gbXkgY29yZTIgOi8KCj4gKwo+ ICtzdGF0aWMgdm9pZCAoKnJlc29sdmVfZmxvYXRfdG9faGFsZih2b2lkKSkoY29uc3QgZmxvYXQg KmYsIHVpbnQxNl90ICpoLCB1bnNpZ25lZCBpbnQgbnVtKQo+ICt7Cj4gKwlpZiAoaWd0X3g4Nl9m ZWF0dXJlcygpICYgRjE2QykKPiArCQlyZXR1cm4gZmxvYXRfdG9faGFsZl9mMTZjOwo+ICsKPiAr CXJldHVybiBmbG9hdF90b19oYWxmOwo+ICt9Cj4gKwo+ICt2b2lkIGlndF9mbG9hdF90b19oYWxm KGNvbnN0IGZsb2F0ICpmLCB1aW50MTZfdCAqaCwgdW5zaWduZWQgaW50IG51bSkKPiArCV9fYXR0 cmlidXRlX18oKGlmdW5jKCJyZXNvbHZlX2Zsb2F0X3RvX2hhbGYiKSkpOwo+ICsKPiArc3RhdGlj IHZvaWQgKCpyZXNvbHZlX2hhbGZfdG9fZmxvYXQodm9pZCkpKGNvbnN0IHVpbnQxNl90ICpoLCBm bG9hdCAqZiwgdW5zaWduZWQgaW50IG51bSkKPiArewo+ICsJaWYgKGlndF94ODZfZmVhdHVyZXMo KSAmIEYxNkMpCj4gKwkJcmV0dXJuIGhhbGZfdG9fZmxvYXRfZjE2YzsKPiArCj4gKwlyZXR1cm4g aGFsZl90b19mbG9hdDsKPiArfQo+ICsKPiArdm9pZCBpZ3RfaGFsZl90b19mbG9hdChjb25zdCB1 aW50MTZfdCAqaCwgZmxvYXQgKmYsIHVuc2lnbmVkIGludCBudW0pCj4gKwlfX2F0dHJpYnV0ZV9f KChpZnVuYygicmVzb2x2ZV9oYWxmX3RvX2Zsb2F0IikpKTsKPiArCj4gKyNlbHNlCj4gKwo+ICt2 b2lkIGlndF9mbG9hdF90b19oYWxmKGNvbnN0IGZsb2F0ICpmLCB1aW50MTZfdCAqaCwgdW5zaWdu ZWQgaW50IG51bSkKPiArewo+ICsJZm9yIChpbnQgaSA9IDA7IGkgPCBudW07IGkrKykKPiArCQlo W2ldID0gX2Zsb2F0X3RvX2hhbGYoZltpXSk7Cj4gK30KPiArCj4gK2Zsb2F0IGlndF9oYWxmX3Rv X2Zsb2F0KGNvbnN0IHVpbnQxNl90ICpoLCBmbG9hdCAqZiwgdW5zaWduZWQgaW50IG51bSkKPiAr ewo+ICsJZm9yIChpbnQgaSA9IDA7IGkgPCBudW07IGkrKykKPiArCQlmW2ldID0gX2hhbGZfdG9f ZmxvYXQoaFtpXSk7Cj4gK30KPiArCj4gKyNlbmRpZgo+ICsKPiBkaWZmIC0tZ2l0IGEvbGliL2ln dF9oYWxmZmxvYXQuaCBiL2xpYi9pZ3RfaGFsZmZsb2F0LmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+IGluZGV4IDAwMDAwMDAuLjhkYjQ0OGEKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGliL2ln dF9oYWxmZmxvYXQuaAo+IEBAIC0wLDAgKzEsMjcgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IChD KSAxOTk5LTIwMDcgIEJyaWFuIFBhdWwgICBBbGwgUmlnaHRzIFJlc2VydmVkLgo+ICsgKgo+ICsg KiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBl cnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0 ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGlu IHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1p dGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJs aXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2Yg dGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29m dHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMg cGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKPiArICogaW4gYWxsIGNvcGllcyBv ciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBT T0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E LCBFWFBSRVNTCj4gKyAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8g VEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwK PiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkg Q0xBSU0sIERBTUFHRVMgT1IKPiArICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFD VElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCj4gKyAqIEFSSVNJTkcgRlJPTSwg T1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgo+ ICsgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCj4gKyAqLwo+ICsKPiArI2luY2x1 ZGUgPHN0ZGludC5oPgo+ICsKPiArdm9pZCBpZ3RfZmxvYXRfdG9faGFsZihjb25zdCBmbG9hdCAq ZiwgdWludDE2X3QgKmgsIHVuc2lnbmVkIGludCBudW0pOwo+ICt2b2lkIGlndF9oYWxmX3RvX2Zs b2F0KGNvbnN0IHVpbnQxNl90ICpoLCBmbG9hdCAqZiwgdW5zaWduZWQgaW50IG51bSk7Cj4gKwo+ IGRpZmYgLS1naXQgYS9saWIvaWd0X3g4Ni5jIGIvbGliL2lndF94ODYuYwo+IGluZGV4IDg4ZTUx NGQuLjlkMjhlNmIgMTAwNjQ0Cj4gLS0tIGEvbGliL2lndF94ODYuYwo+ICsrKyBiL2xpYi9pZ3Rf eDg2LmMKPiBAQCAtODgsNiArODgsMTAgQEAKPiAgI2RlZmluZSBiaXRfQVZYCQkoMSA8PCAyOCkK PiAgI2VuZGlmCj4gIAo+ICsjaWZuZGVmIGJpdF9GMTZDCj4gKyNkZWZpbmUgYml0X0YxNkMJKDEg PDwgMjkpCj4gKyNlbmRpZgo+ICsKPiAgI2lmbmRlZiBiaXRfQVZYMgo+ICAjZGVmaW5lIGJpdF9B VlgyCSgxPDw1KQo+ICAjZW5kaWYKPiBAQCAtMTM4LDYgKzE0Miw5IEBAIHVuc2lnbmVkIGlndF94 ODZfZmVhdHVyZXModm9pZCkKPiAgCj4gIAkJaWYgKGVkeCAmIGJpdF9TU0UyKQo+ICAJCQlmZWF0 dXJlcyB8PSBTU0UyOwo+ICsKPiArCQlpZiAoZWR4ICYgYml0X0YxNkMpCgpTaG91bGQgYmUgZWN4 CgpNeSBzbmIgZGlkbid0IGxpa2UgdGhpcyBvbmUuCgpXaXRoIHRob3NlIGZpeGVkIHRoaXMgaXMK UmV2aWV3ZWQtYnk6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5j b20+Cgo+ICsJCQlmZWF0dXJlcyB8PSBGMTZDOwo+ICAJfQo+ICAKPiAgCWlmIChtYXggPj0gNykg ewo+IEBAIC0xNzQsNiArMTgxLDggQEAgY2hhciAqaWd0X3g4Nl9mZWF0dXJlc190b19zdHJpbmco dW5zaWduZWQgZmVhdHVyZXMsIGNoYXIgKmxpbmUpCj4gIAkJbGluZSArPSBzcHJpbnRmKGxpbmUs ICIsIGF2eCIpOwo+ICAJaWYgKGZlYXR1cmVzICYgQVZYMikKPiAgCQlsaW5lICs9IHNwcmludGYo bGluZSwgIiwgYXZ4MiIpOwo+ICsJaWYgKGZlYXR1cmVzICYgRjE2QykKPiArCQlsaW5lICs9IHNw cmludGYobGluZSwgIiwgZjE2YyIpOwo+ICAKPiAgCSh2b2lkKWxpbmU7Cj4gIAo+IGRpZmYgLS1n aXQgYS9saWIvaWd0X3g4Ni5oIGIvbGliL2lndF94ODYuaAo+IGluZGV4IGQ0ZjhjMzQuLmM3Yjg0 ZGUgMTAwNjQ0Cj4gLS0tIGEvbGliL2lndF94ODYuaAo+ICsrKyBiL2xpYi9pZ3RfeDg2LmgKPiBA QCAtMzksNiArMzksNyBAQAo+ICAjZGVmaW5lIFNTRTRfMgkweDQwCj4gICNkZWZpbmUgQVZYCTB4 ODAKPiAgI2RlZmluZSBBVlgyCTB4MTAwCj4gKyNkZWZpbmUgRjE2QwkweDIwMAo+ICAKPiAgI2lm IGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2kzODZfXykKPiAgdW5zaWduZWQgaWd0 X3g4Nl9mZWF0dXJlcyh2b2lkKTsKPiBkaWZmIC0tZ2l0IGEvbGliL21lc29uLmJ1aWxkIGIvbGli L21lc29uLmJ1aWxkCj4gaW5kZXggMGViNTU4NS4uZWRmMGE2NiAxMDA2NDQKPiAtLS0gYS9saWIv bWVzb24uYnVpbGQKPiArKysgYi9saWIvbWVzb24uYnVpbGQKPiBAQCAtMTEsNiArMTEsNyBAQCBs aWJfc291cmNlcyA9IFsKPiAgCSdpZ3RfYXV4LmMnLAo+ICAJJ2lndF9ndC5jJywKPiAgCSdpZ3Rf Z3Z0LmMnLAo+ICsJJ2lndF9oYWxmZmxvYXQuYycsCj4gIAknaWd0X21hdHJpeC5jJywKPiAgCSdp Z3RfcHJpbWVzLmMnLAo+ICAJJ2lndF9yYW5kLmMnLAo+IC0tIAo+IDIuNy40CgotLSAKVmlsbGUg U3lyasOkbMOkCkludGVsCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldg==