From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 7/7] lib: add igt_draw Date: Thu, 26 Mar 2015 11:19:38 +0100 Message-ID: <20150326101938.GW1349@phenom.ffwll.local> References: <1427320239-25667-1-git-send-email-przanoni@gmail.com> <1427320239-25667-7-git-send-email-przanoni@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wg0-f50.google.com (mail-wg0-f50.google.com [74.125.82.50]) by gabe.freedesktop.org (Postfix) with ESMTP id 106AC6E150 for ; Thu, 26 Mar 2015 03:17:53 -0700 (PDT) Received: by wgra20 with SMTP id a20so58410894wgr.3 for ; Thu, 26 Mar 2015 03:17:52 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1427320239-25667-7-git-send-email-przanoni@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Paulo Zanoni Cc: intel-gfx@lists.freedesktop.org, Paulo Zanoni List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCBNYXIgMjUsIDIwMTUgYXQgMDY6NTA6MzlQTSAtMDMwMCwgUGF1bG8gWmFub25pIHdy b3RlOgo+IEZyb206IFBhdWxvIFphbm9uaSA8cGF1bG8uci56YW5vbmlAaW50ZWwuY29tPgo+IAo+ IEZvciBhbGwgdGhvc2UgSUdUIHRlc3RzIHRoYXQgbmVlZCBhbiBlYXN5IHdheSB0byBkcmF3IHJl Y3RhbmdsZXMgb24KPiBidWZmZXJzIHVzaW5nIGRpZmZlcmVudCBtZXRob2RzLiBDdXJyZW50IHBs YW5uZWQgdXNlcnM6IEZCQyBhbmQgUFNSCj4gQ1JDIHRlc3RzLgo+IAo+IFRoZXJlIGlzIGFsc28g YSBsaWIvdGVzdHMvaWd0X2RyYXcgcHJvZ3JhbSB0byBjaGVjayBpZiB0aGUgbGlicmFyeSBpcwo+ IHNhbmUuCgpXZSBuZWVkIHRvIG1vdmUgdGhhdCB0byB0ZXN0cy9pZ3RfZHJhdy4gVGhlIHRlc3Rj YXNlIGluIGxpYi90ZXN0cy8qIGdldApydW4gd2l0aCBtYWtlIGNoZWNrLCB3aGljaCBtdXN0IGJl IHBvc3NpYmxlIGFzIG5vbi1yb290IG9uIGEgbm9uLWludGVsCihidWlsZCkgbWFjaGluZS4gSWYg eW91IG5lZWQgYW4gZ3B1IHRvIHJ1biB5b3VyIHRlc3QgaXQgbXVzdCBiZSBpbiB0ZXN0cy8qCmFz IGEgbm9ybWFsIGlndCBrZXJuZWwgdGVzdC4KCldydCB0aGUgbGlicmFyeSBpdHNlbGYgSSdtIHVu c3VyZSBhYm91dCB0aGUgZXhwbGljaXQgdGlsaW5nL3N3aXp6bGluZy4KWW91ciBjdXJyZW50IGNv ZGUgb25seSB3b3JrcyBvbiBnZW41LTggYW5kIG1haW50YWluaW5nIGEgZnVsbC1ibG93bgpzd2l6 emxlL3RpbGluZyBsaWJyYXJ5IGlzIHJlYWwgd29yaywgYW5kIG1lYW5zIHNvbWUgb2YgdGhlIHRl c3RzIGNhbid0IGJlCmNvbnZlcnRlZCB0byB0aGlzLiBXZSBkbyBoYXZlIGFsbCB0aGUgdGlsaW5n IG1vZGVzIGVuY29kZWQgaW4gdGhlIHRpbGluZwp0ZXN0cyB0aG91Z2gsIHNvIGlmIHlvdSBoYXZl IGEgbG90IG9mIHRpbWUgaXQgbWlnaHQgYmUgdXNlZnVsIHRvIGV4dHJhY3QKdGlsaW5nIGhlbHBl cnMgaW50byB0aGUgaWd0IGxpYnJhcnkgd2hpY2ggd29yayBvbiBhbGwgZ2VuZXJhdGlvbnMuCgpJ IHRoaW5rIHdlIHNob3VsZCBhdCBsZWFzdCBoYXZlIGEgZmFsbGJhY2sgbW9kZSB3aGljaCBhbGxv d3MgdXMgdG8gZmlsbCBhbgplbnRpcmUgYnVmZmVyIGNvbXBsZXRlbHkgKGkuZS4gbm90IGp1c3Qg dGhlIGh4dyBhcmVhKSBhbmQgdHJlYXQgaXQgYXMKdW50aWxlZC4KCk1vcmUgY29tbWVudHMgYmVs b3cuCi1EYW5pZWwKCj4gCj4gU2lnbmVkLW9mZi1ieTogUGF1bG8gWmFub25pIDxwYXVsby5yLnph bm9uaUBpbnRlbC5jb20+Cj4gLS0tCj4gIGxpYi9NYWtlZmlsZS5zb3VyY2VzICAgICAgIHwgICAy ICsKPiAgbGliL2lndF9kcmF3LmMgICAgICAgICAgICAgfCA0NjcgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIGxpYi9pZ3RfZHJhdy5oICAgICAgICAgICAg IHwgIDU0ICsrKysrKwo+ICBsaWIvdGVzdHMvLmdpdGlnbm9yZSAgICAgICB8ICAgMSArCj4gIGxp Yi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIHwgICAxICsKPiAgbGliL3Rlc3RzL2lndF9kcmF3LmMg ICAgICAgfCAyNDcgKysrKysrKysrKysrKysrKysrKysrKysrCj4gIDYgZmlsZXMgY2hhbmdlZCwg NzcyIGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pZ3RfZHJhdy5jCj4g IGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaWd0X2RyYXcuaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQg bGliL3Rlc3RzL2lndF9kcmF3LmMKPiAKPiBkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlLnNvdXJj ZXMgYi9saWIvTWFrZWZpbGUuc291cmNlcwo+IGluZGV4IDNkOTM2MjkuLjg1ZGMzMjEgMTAwNjQ0 Cj4gLS0tIGEvbGliL01ha2VmaWxlLnNvdXJjZXMKPiArKysgYi9saWIvTWFrZWZpbGUuc291cmNl cwo+IEBAIC01Miw2ICs1Miw4IEBAIGxpYmludGVsX3Rvb2xzX2xhX1NPVVJDRVMgPSAJXAo+ICAJ aWd0X2ZiLmgJCVwKPiAgCWlndF9jb3JlLmMJCVwKPiAgCWlndF9jb3JlLmgJCVwKPiArCWlndF9k cmF3LmMJCVwKPiArCWlndF9kcmF3LmgJCVwKPiAgCSQoTlVMTCkKPiAgCj4gIC5QSE9OWTogdmVy c2lvbi5oLnRtcAo+IGRpZmYgLS1naXQgYS9saWIvaWd0X2RyYXcuYyBiL2xpYi9pZ3RfZHJhdy5j Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi40ZWI3NTA3Cj4gLS0tIC9k ZXYvbnVsbAo+ICsrKyBiL2xpYi9pZ3RfZHJhdy5jCj4gQEAgLTAsMCArMSw0NjcgQEAKPiArLyoK PiArICogQ29weXJpZ2h0IMKpIDIwMTUgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogUGVy bWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24g b2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUg U29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlv bgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwg ZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBT b2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJl IGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p c3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBi ZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJ UyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElF RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05J TkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZ UklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9S IE9USEVSV0lTRSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBX SVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRI RSBTT0ZUV0FSRS4KPiArICoKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8c3lzL21tYW4uaD4KPiAr Cj4gKyNpbmNsdWRlICJpZ3RfZHJhdy5oIgo+ICsKPiArI2luY2x1ZGUgImRybXRlc3QuaCIKPiAr I2luY2x1ZGUgImludGVsX2NoaXBzZXQuaCIKPiArI2luY2x1ZGUgImlndF9jb3JlLmgiCj4gKyNp bmNsdWRlICJpZ3RfZmIuaCIKPiArI2luY2x1ZGUgImlvY3RsX3dyYXBwZXJzLmgiCj4gKwo+ICsv KioKPiArICogU0VDVElPTjppZ3RfZHJhdwo+ICsgKiBAc2hvcnRfZGVzY3JpcHRpb246IGRyYXdp bmcgaGVscGVycyBmb3IgdGVzdHMKPiArICogQHRpdGxlOiBpLWctdCBkcmF3Cj4gKyAqIEBpbmNs dWRlOiBpZ3RfZHJhdy5oCj4gKyAqCj4gKyAqIFRoaXMgbGlicmFyeSBjb250YWlucyBzb21lIGZ1 bmN0aW9ucyBmb3IgZHJhd2luZyByZWN0YW5nbGVzIG9uIGJ1ZmZlcnMgdXNpbmcKPiArICogdGhl IG1hbnkgZGlmZmVyZW50IGRyYXdpbmcgbWV0aG9kcyB3ZSBoYXZlLiBJdCBhbHNvIGNvbnRhaW5z IHNvbWUgd3JhcHBlcnMKPiArICogdGhhdCBtYWtlIHRoZSBwcm9jZXNzIGVhc2llciBpZiB5b3Ug aGF2ZSB0aGUgYWJzdHJhY3Qgb2JqZWN0cyBpbiBoYW5kLgo+ICsgKgo+ICsgKiBBbGwgZnVuY3Rp b25zIGFzc3VtZSB0aGUgYnVmZmVycyBhcmUgaW4gdGhlIFhSR0IgODo4OjggZm9ybWF0Lgo+ICsg Kgo+ICsgKi8KPiArCj4gKy8qIFNvbWUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIHRvIGF2b2lk IGhhdmluZyB0byBwYXNzIHRvbnMgb2YgcGFyYW1ldGVycwo+ICsgKiBhcm91bmQgZXZlcnl0aGlu Zy4gKi8KPiArc3RydWN0IGNtZF9kYXRhIHsKPiArCWRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1ncjsK PiArCWRybV9pbnRlbF9jb250ZXh0ICpjb250ZXh0Owo+ICt9Owo+ICsKPiArc3RydWN0IGJ1Zl9k YXRhIHsKPiArCXVpbnQzMl90IGhhbmRsZTsKPiArCXVpbnQzMl90IHNpemU7Cj4gKwl1aW50MzJf dCBzdHJpZGU7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgcmVjdCB7Cj4gKwlpbnQgeDsKPiArCWludCB5 Owo+ICsJaW50IHc7Cj4gKwlpbnQgaDsKPiArfTsKPiArCj4gK2NvbnN0IGNoYXIgKmlndF9kcmF3 X2dldF9tZXRob2RfbmFtZShlbnVtIGlndF9kcmF3X21ldGhvZCBtZXRob2QpCj4gK3sKPiArCXN3 aXRjaCAobWV0aG9kKSB7Cj4gKwljYXNlIElHVF9EUkFXX01NQVBfQ1BVOgo+ICsJCXJldHVybiAi bW1hcC1jcHUiOwo+ICsJY2FzZSBJR1RfRFJBV19NTUFQX0dUVDoKPiArCQlyZXR1cm4gIm1tYXAt Z3R0IjsKPiArCWNhc2UgSUdUX0RSQVdfUFdSSVRFOgo+ICsJCXJldHVybiAicHdyaXRlIjsKPiAr CWNhc2UgSUdUX0RSQVdfQkxUOgo+ICsJCXJldHVybiAiYmx0IjsKPiArCWNhc2UgSUdUX0RSQVdf UkVOREVSOgo+ICsJCXJldHVybiAicmVuZGVyIjsKPiArCWRlZmF1bHQ6Cj4gKwkJaWd0X2Fzc2Vy dChmYWxzZSk7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgc3dpenpsZV9hZGRyKGludCBh ZGRyLCBpbnQgc3dpenpsZSkKPiArewo+ICsJaW50IGJpdDY7Cj4gKwo+ICsJaWYgKHN3aXp6bGUg PT0gSTkxNV9CSVRfNl9TV0laWkxFXzlfMTApIHsKPiArCQliaXQ2ID0gKChhZGRyID4+IDYpICYg MSkgXiAoKGFkZHIgPj4gOSkgJiAxKSBeCj4gKwkJICAgICAgICgoYWRkciA+PiAxMCkgJiAxKTsK PiArCQlhZGRyICY9IH4oMSA8PCA2KTsKPiArCQlhZGRyIHw9IChiaXQ2IDw8IDYpOwo+ICsJfQo+ ICsKPiArCXJldHVybiBhZGRyOwo+ICt9Cj4gKwo+ICsvKiBJdCdzIGFsbCBpbiAicGl4ZWwgY29v cmRpbmF0ZXMiLCBzbyBtYWtlIHN1cmUgeW91IG11bHRpcGx5L2RpdmlkZSBieSB0aGUgYnBwCj4g KyAqIGlmIHlvdSBuZWVkIHRvLiAqLwo+ICtzdGF0aWMgaW50IGxpbmVhcl94X3lfdG9fdGlsZWRf cG9zKGludCB4LCBpbnQgeSwgdWludDMyX3Qgc3RyaWRlLCBpbnQgc3dpenpsZSkKPiArewo+ICsJ aW50IHhfdGlsZV9zaXplLCB5X3RpbGVfc2l6ZTsKPiArCWludCB4X3RpbGVfbiwgeV90aWxlX24s IHhfdGlsZV9vZmYsIHlfdGlsZV9vZmY7Cj4gKwlpbnQgbGluZV9zaXplLCB0aWxlX3NpemU7Cj4g KwlpbnQgdGlsZV9uLCB0aWxlX29mZjsKPiArCWludCB0aWxlZF9wb3MsIHRpbGVzX3Blcl9saW5l Owo+ICsJaW50IGJwcDsKPiArCj4gKwlsaW5lX3NpemUgPSBzdHJpZGU7Cj4gKwl4X3RpbGVfc2l6 ZSA9IDUxMjsKPiArCXlfdGlsZV9zaXplID0gODsKPiArCXRpbGVfc2l6ZSA9IHhfdGlsZV9zaXpl ICogeV90aWxlX3NpemU7Cj4gKwl0aWxlc19wZXJfbGluZSA9IGxpbmVfc2l6ZSAvIHhfdGlsZV9z aXplOwo+ICsJYnBwID0gc2l6ZW9mKHVpbnQzMl90KTsKPiArCj4gKwl5X3RpbGVfbiA9IHkgLyB5 X3RpbGVfc2l6ZTsKPiArCXlfdGlsZV9vZmYgPSB5ICUgeV90aWxlX3NpemU7Cj4gKwo+ICsJeF90 aWxlX24gPSAoeCAqIGJwcCkgLyB4X3RpbGVfc2l6ZTsKPiArCXhfdGlsZV9vZmYgPSAoeCAqIGJw cCkgJSB4X3RpbGVfc2l6ZTsKPiArCj4gKwl0aWxlX24gPSB5X3RpbGVfbiAqIHRpbGVzX3Blcl9s aW5lICsgeF90aWxlX247Cj4gKwl0aWxlX29mZiA9IHlfdGlsZV9vZmYgKiB4X3RpbGVfc2l6ZSAr IHhfdGlsZV9vZmY7Cj4gKwl0aWxlZF9wb3MgPSB0aWxlX24gKiB0aWxlX3NpemUgKyB0aWxlX29m ZjsKPiArCj4gKwl0aWxlZF9wb3MgPSBzd2l6emxlX2FkZHIodGlsZWRfcG9zLCBzd2l6emxlKTsK PiArCj4gKwlyZXR1cm4gdGlsZWRfcG9zIC8gYnBwOwo+ICt9Cj4gKwo+ICsvKiBJdCdzIGFsbCBp biAicGl4ZWwgY29vcmRpbmF0ZXMiLCBzbyBtYWtlIHN1cmUgeW91IG11bHRpcGx5L2RpdmlkZSBi eSB0aGUgYnBwCj4gKyAqIGlmIHlvdSBuZWVkIHRvLiAqLwo+ICtzdGF0aWMgdm9pZCB0aWxlZF9w b3NfdG9feF95X2xpbmVhcihpbnQgdGlsZWRfcG9zLCB1aW50MzJfdCBzdHJpZGUsCj4gKwkJCQkg ICAgaW50IHN3aXp6bGUsIGludCAqeCwgaW50ICp5KQo+ICt7Cj4gKwlpbnQgdGlsZV9uLCB0aWxl X29mZiwgdGlsZXNfcGVyX2xpbmUsIGxpbmVfc2l6ZTsKPiArCWludCB4X3RpbGVfb2ZmLCB5X3Rp bGVfb2ZmOwo+ICsJaW50IHhfdGlsZV9uLCB5X3RpbGVfbjsKPiArCWludCB4X3RpbGVfc2l6ZSwg eV90aWxlX3NpemUsIHRpbGVfc2l6ZTsKPiArCWludCBicHA7Cj4gKwo+ICsJdGlsZWRfcG9zID0g c3dpenpsZV9hZGRyKHRpbGVkX3Bvcywgc3dpenpsZSk7Cj4gKwo+ICsJbGluZV9zaXplID0gc3Ry aWRlOwo+ICsJeF90aWxlX3NpemUgPSA1MTI7Cj4gKwl5X3RpbGVfc2l6ZSA9IDg7Cj4gKwl0aWxl X3NpemUgPSB4X3RpbGVfc2l6ZSAqIHlfdGlsZV9zaXplOwo+ICsJdGlsZXNfcGVyX2xpbmUgPSBs aW5lX3NpemUgLyB4X3RpbGVfc2l6ZTsKPiArCWJwcCA9IHNpemVvZih1aW50MzJfdCk7Cj4gKwo+ ICsJdGlsZV9uID0gdGlsZWRfcG9zIC8gdGlsZV9zaXplOwo+ICsJdGlsZV9vZmYgPSB0aWxlZF9w b3MgJSB0aWxlX3NpemU7Cj4gKwo+ICsJeV90aWxlX29mZiA9IHRpbGVfb2ZmIC8geF90aWxlX3Np emU7Cj4gKwl4X3RpbGVfb2ZmID0gdGlsZV9vZmYgJSB4X3RpbGVfc2l6ZTsKPiArCj4gKwl4X3Rp bGVfbiA9IHRpbGVfbiAlIHRpbGVzX3Blcl9saW5lOwo+ICsJeV90aWxlX24gPSB0aWxlX24gLyB0 aWxlc19wZXJfbGluZTsKPiArCj4gKwkqeCA9ICh4X3RpbGVfbiAqIHhfdGlsZV9zaXplICsgeF90 aWxlX29mZikgLyBicHA7Cj4gKwkqeSA9IHlfdGlsZV9uICogeV90aWxlX3NpemUgKyB5X3RpbGVf b2ZmOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkcmF3X3JlY3RfbW1hcF9jcHUoaW50IGZkLCBz dHJ1Y3QgYnVmX2RhdGEgKmJ1Ziwgc3RydWN0IHJlY3QgKnJlY3QsCj4gKwkJCSAgICAgICB1aW50 MzJfdCBjb2xvcikKPiArewo+ICsJdWludDMyX3QgKnB0cjsKPiArCWludCB4LCB5LCBwb3M7Cj4g Kwl1aW50MzJfdCB0aWxpbmcsIHN3aXp6bGU7Cj4gKwo+ICsJZ2VtX3NldF9kb21haW4oZmQsIGJ1 Zi0+aGFuZGxlLCBJOTE1X0dFTV9ET01BSU5fQ1BVLAo+ICsJCSAgICAgICBJOTE1X0dFTV9ET01B SU5fQ1BVKTsKPiArCWdlbV9nZXRfdGlsaW5nKGZkLCBidWYtPmhhbmRsZSwgJnRpbGluZywgJnN3 aXp6bGUpOwo+ICsKPiArCXB0ciA9IGdlbV9tbWFwX19jcHUoZmQsIGJ1Zi0+aGFuZGxlLCAwLCBi dWYtPnNpemUsIDApOwo+ICsJaWd0X2Fzc2VydChwdHIpOwo+ICsKPiArCWZvciAoeSA9IHJlY3Qt Pnk7IHkgPCByZWN0LT55ICsgcmVjdC0+aDsgeSsrKSB7Cj4gKwkJZm9yICh4ID0gcmVjdC0+eDsg eCA8IHJlY3QtPnggKyByZWN0LT53OyB4KyspIHsKPiArCQkJaWYgKHRpbGluZykKPiArCQkJCXBv cyA9IGxpbmVhcl94X3lfdG9fdGlsZWRfcG9zKHgsIHksIGJ1Zi0+c3RyaWRlLAo+ICsJCQkJCQkJ ICAgICAgc3dpenpsZSk7Cj4gKwkJCWVsc2UKPiArCQkJCXBvcyA9ICh5ICogYnVmLT5zdHJpZGUg LyBzaXplb2YodWludDMyX3QpKSArIHg7Cj4gKwkJCXB0cltwb3NdID0gY29sb3I7Cj4gKwkJfQo+ ICsJfQo+ICsKPiArCWdlbV9zd19maW5pc2goZmQsIGJ1Zi0+aGFuZGxlKTsKPiArCj4gKwlpZ3Rf YXNzZXJ0KG11bm1hcChwdHIsIGJ1Zi0+c2l6ZSkgPT0gMCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIGRyYXdfcmVjdF9tbWFwX2d0dChpbnQgZmQsIHN0cnVjdCBidWZfZGF0YSAqYnVmLCBzdHJ1 Y3QgcmVjdCAqcmVjdCwKPiArCQkJICAgICAgIHVpbnQzMl90IGNvbG9yKQo+ICt7Cj4gKwl1aW50 MzJfdCAqcHRyOwo+ICsJaW50IHgsIHk7Cj4gKwo+ICsJcHRyID0gZ2VtX21tYXBfX2d0dChmZCwg YnVmLT5oYW5kbGUsIGJ1Zi0+c2l6ZSwKPiArCQkJICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUp Owo+ICsJaWd0X2Fzc2VydChwdHIpOwo+ICsKPiArCWZvciAoeSA9IHJlY3QtPnk7IHkgPCByZWN0 LT55ICsgcmVjdC0+aDsgeSsrKSB7Cj4gKwkJaW50IGxpbmVfYmVnaW4gPSB5ICogYnVmLT5zdHJp ZGUgLyBzaXplb2YodWludDMyX3QpOwo+ICsJCWZvciAoeCA9IHJlY3QtPng7IHggPCByZWN0LT54 ICsgcmVjdC0+dzsgeCsrKQo+ICsJCQlwdHJbbGluZV9iZWdpbiArIHhdID0gY29sb3I7Cj4gKwl9 Cj4gKwo+ICsJaWd0X2Fzc2VydChtdW5tYXAocHRyLCBidWYtPnNpemUpID09IDApOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCBkcmF3X3JlY3RfcHdyaXRlX3VudGlsZWQoaW50IGZkLCBzdHJ1Y3Qg YnVmX2RhdGEgKmJ1ZiwKPiArCQkJCSAgICAgc3RydWN0IHJlY3QgKnJlY3QsIHVpbnQzMl90IGNv bG9yKQo+ICt7Cj4gKwl1aW50MzJfdCB0bXBbcmVjdC0+d107Cj4gKwlpbnQgaSwgeSwgb2Zmc2V0 LCBicHA7Cj4gKwo+ICsJYnBwID0gc2l6ZW9mKHVpbnQzMl90KTsKPiArCj4gKwlmb3IgKGkgPSAw OyBpIDwgcmVjdC0+dzsgaSsrKQo+ICsJCXRtcFtpXSA9IGNvbG9yOwo+ICsKPiArCWZvciAoeSA9 IHJlY3QtPnk7IHkgPCByZWN0LT55ICsgcmVjdC0+aDsgeSsrKSB7Cj4gKwkJb2Zmc2V0ID0gKHkg KiBidWYtPnN0cmlkZSkgKyAocmVjdC0+eCAqIGJwcCk7Cj4gKwkJZ2VtX3dyaXRlKGZkLCBidWYt PmhhbmRsZSwgb2Zmc2V0LCB0bXAsIHJlY3QtPncgKiBicHApOwo+ICsJfQo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBkcmF3X3JlY3RfcHdyaXRlX3RpbGVkKGludCBmZCwgc3RydWN0IGJ1Zl9kYXRh ICpidWYsCj4gKwkJCQkgICBzdHJ1Y3QgcmVjdCAqcmVjdCwgdWludDMyX3QgY29sb3IsCj4gKwkJ CQkgICB1aW50MzJfdCBzd2l6emxlKQo+ICt7Cj4gKwlpbnQgaTsKPiArCWludCB0aWxlZF9wb3Ms IGJwcCwgeCwgeTsKPiArCXVpbnQzMl90IHRtcFsxMDI0XTsKPiArCWludCB0bXBfdXNlZCA9IDAs IHRtcF9zaXplID0gQVJSQVlfU0laRSh0bXApOwo+ICsJYm9vbCBmbHVzaF90bXAgPSBmYWxzZTsK PiArCWludCB0bXBfc3RhcnRfcG9zID0gMDsKPiArCj4gKwlicHAgPSBzaXplb2YodWludDMyX3Qp Owo+ICsKPiArCS8qIEluc3RlYWQgb2YgZG9pbmcgb25lIHB3cml0ZSBwZXIgcGl4ZWwsIHdlIHRy eSB0byBncm91cCB0aGUgbWF4aW11bQo+ICsJICogYW1vdW50IG9mIGNvbnNlY3V0aXZlIHBpeGVs cyB3ZSBjYW4gaW4gYSBzaW5nbGUgcHdyaXRlOiB0aGF0J3Mgd2h5IHdlCj4gKwkgKiB1c2UgdGhl ICJ0bXAiIHZhcmlhYmxlcy4gKi8KPiArCWZvciAoaSA9IDA7IGkgPCB0bXBfc2l6ZTsgaSsrKQo+ ICsJCXRtcFtpXSA9IGNvbG9yOwo+ICsKPiArCWZvciAodGlsZWRfcG9zID0gMDsgdGlsZWRfcG9z IDwgYnVmLT5zaXplOyB0aWxlZF9wb3MgKz0gYnBwKSB7Cj4gKwkJdGlsZWRfcG9zX3RvX3hfeV9s aW5lYXIodGlsZWRfcG9zLCBidWYtPnN0cmlkZSwgc3dpenpsZSwgJngsICZ5KTsKPiArCj4gKwkJ aWYgKHggPj0gcmVjdC0+eCAmJiB4IDwgcmVjdC0+eCArIHJlY3QtPncgJiYKPiArCQkgICAgeSA+ PSByZWN0LT55ICYmIHkgPCByZWN0LT55ICsgcmVjdC0+aCkgewo+ICsJCQlpZiAodG1wX3VzZWQg PT0gMCkKPiArCQkJCXRtcF9zdGFydF9wb3MgPSB0aWxlZF9wb3M7Cj4gKwkJCXRtcF91c2VkKys7 Cj4gKwkJfSBlbHNlIHsKPiArCQkJZmx1c2hfdG1wID0gdHJ1ZTsKPiArCQl9Cj4gKwo+ICsJCWlm ICh0bXBfdXNlZCA9PSB0bXBfc2l6ZSB8fCAoZmx1c2hfdG1wICYmIHRtcF91c2VkID4gMCkpIHsK PiArCQkJZ2VtX3dyaXRlKGZkLCBidWYtPmhhbmRsZSwgdG1wX3N0YXJ0X3BvcywgdG1wLAo+ICsJ CQkJICB0bXBfdXNlZCAqIGJwcCk7Cj4gKwkJCWZsdXNoX3RtcCA9IGZhbHNlOwo+ICsJCQl0bXBf dXNlZCA9IDA7Cj4gKwkJfQo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkcmF3X3JlY3Rf cHdyaXRlKGludCBmZCwgc3RydWN0IGJ1Zl9kYXRhICpidWYsCj4gKwkJCSAgICAgc3RydWN0IHJl Y3QgKnJlY3QsIHVpbnQzMl90IGNvbG9yKQo+ICt7Cj4gKwl1aW50MzJfdCB0aWxpbmcsIHN3aXp6 bGU7Cj4gKwo+ICsJZ2VtX2dldF90aWxpbmcoZmQsIGJ1Zi0+aGFuZGxlLCAmdGlsaW5nLCAmc3dp enpsZSk7Cj4gKwo+ICsJaWYgKHRpbGluZykKPiArCQlkcmF3X3JlY3RfcHdyaXRlX3RpbGVkKGZk LCBidWYsIHJlY3QsIGNvbG9yLCBzd2l6emxlKTsKPiArCWVsc2UKPiArCQlkcmF3X3JlY3RfcHdy aXRlX3VudGlsZWQoZmQsIGJ1ZiwgcmVjdCwgY29sb3IpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBkcmF3X3JlY3RfYmx0KGludCBmZCwgc3RydWN0IGNtZF9kYXRhICpjbWRfZGF0YSwKPiArCQkJ ICBzdHJ1Y3QgYnVmX2RhdGEgKmJ1Ziwgc3RydWN0IHJlY3QgKnJlY3QsCj4gKwkJCSAgdWludDMy X3QgY29sb3IpCj4gK3sKPiArCWRybV9pbnRlbF9ibyAqZHN0Owo+ICsJc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaDsKPiArCWludCBibHRfY21kX2xlbiwgYmx0X2NtZF90aWxpbmc7Cj4g Kwl1aW50MzJfdCBkZXZpZCA9IGludGVsX2dldF9kcm1fZGV2aWQoZmQpOwo+ICsJaW50IGdlbiA9 IGludGVsX2dlbihkZXZpZCk7Cj4gKwl1aW50MzJfdCB0aWxpbmcsIHN3aXp6bGU7Cj4gKwlpbnQg cGl0Y2g7Cj4gKwo+ICsJZ2VtX2dldF90aWxpbmcoZmQsIGJ1Zi0+aGFuZGxlLCAmdGlsaW5nLCAm c3dpenpsZSk7Cj4gKwo+ICsJZHN0ID0gZ2VtX2hhbmRsZV90b19saWJkcm1fYm8oY21kX2RhdGEt PmJ1Zm1nciwgZmQsICIiLCBidWYtPmhhbmRsZSk7Cj4gKwlpZ3RfYXNzZXJ0KGRzdCk7Cj4gKwo+ ICsJYmF0Y2ggPSBpbnRlbF9iYXRjaGJ1ZmZlcl9hbGxvYyhjbWRfZGF0YS0+YnVmbWdyLCBkZXZp ZCk7Cj4gKwlpZ3RfYXNzZXJ0KGJhdGNoKTsKPiArCj4gKwlibHRfY21kX2xlbiA9IChnZW4gPj0g OCkgPyAgMHg1IDogMHg0Owo+ICsJYmx0X2NtZF90aWxpbmcgPSAodGlsaW5nKSA/IFhZX0NPTE9S X0JMVF9USUxFRCA6IDA7Cj4gKwlwaXRjaCA9ICh0aWxpbmcpID8gYnVmLT5zdHJpZGUgLyA0IDog YnVmLT5zdHJpZGU7Cj4gKwo+ICsJQkVHSU5fQkFUQ0goNiwgMSk7CgpUaGlzIGJyZWFrcyBvbiBn ZW44IGJlY2F1c2UgdGhlcmUgdGhlIHJlbG9jYXRpb25zIGFyZSAyIGR3b3Jkcy4gWW91IG5lZWQK dG8gdXNlIHRoZSBtYWdpYyBtYWNyb3MgZm9yIHRoYXQuCgo+ICsJT1VUX0JBVENIKFhZX0NPTE9S X0JMVF9DTURfTk9MRU4gfCBYWV9DT0xPUl9CTFRfV1JJVEVfQUxQSEEgfAo+ICsJCSAgWFlfQ09M T1JfQkxUX1dSSVRFX1JHQiB8IGJsdF9jbWRfdGlsaW5nIHwgYmx0X2NtZF9sZW4pOwo+ICsJT1VU X0JBVENIKCgzIDw8IDI0KSB8ICgweEYwIDw8IDE2KSB8IHBpdGNoKTsKPiArCU9VVF9CQVRDSCgo cmVjdC0+eSA8PCAxNikgfCByZWN0LT54KTsKPiArCU9VVF9CQVRDSCgoKHJlY3QtPnkgKyByZWN0 LT5oKSA8PCAxNikgfCAocmVjdC0+eCArIHJlY3QtPncpKTsKPiArCWlmICh0aWxpbmcpCj4gKwkJ T1VUX1JFTE9DX0ZFTkNFRChkc3QsIDAsIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIsIDApOwo+ICsJ ZWxzZQo+ICsJCU9VVF9SRUxPQyhkc3QsIDAsIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIsIDApOwo+ ICsJT1VUX0JBVENIKGNvbG9yKTsKPiArCUFEVkFOQ0VfQkFUQ0goKTsKPiArCj4gKwlpbnRlbF9i YXRjaGJ1ZmZlcl9mbHVzaChiYXRjaCk7Cj4gKwlnZW1fc3luYyhmZCwgYnVmLT5oYW5kbGUpOwo+ ICsJaW50ZWxfYmF0Y2hidWZmZXJfZnJlZShiYXRjaCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IGRyYXdfcmVjdF9yZW5kZXIoaW50IGZkLCBzdHJ1Y3QgY21kX2RhdGEgKmNtZF9kYXRhLAo+ICsJ CQkgICAgIHN0cnVjdCBidWZfZGF0YSAqYnVmLCBzdHJ1Y3QgcmVjdCAqcmVjdCwKPiArCQkJICAg ICB1aW50MzJfdCBjb2xvcikKPiArewo+ICsJZHJtX2ludGVsX2JvICpzcmMsICpkc3Q7Cj4gKwl1 aW50MzJfdCBkZXZpZCA9IGludGVsX2dldF9kcm1fZGV2aWQoZmQpOwo+ICsJaWd0X3JlbmRlcl9j b3B5ZnVuY190IHJlbmRlcmNvcHkgPSBpZ3RfZ2V0X3JlbmRlcl9jb3B5ZnVuYyhkZXZpZCk7Cj4g KwlzdHJ1Y3QgaWd0X2J1ZiBzcmNfYnVmLCBkc3RfYnVmOwo+ICsJc3RydWN0IGludGVsX2JhdGNo YnVmZmVyICpiYXRjaDsKPiArCXVpbnQzMl90IHRpbGluZywgc3dpenpsZTsKPiArCXN0cnVjdCBi dWZfZGF0YSB0bXA7Cj4gKwo+ICsJaWd0X3NraXBfb24oIXJlbmRlcmNvcHkpOwo+ICsKPiArCWdl bV9nZXRfdGlsaW5nKGZkLCBidWYtPmhhbmRsZSwgJnRpbGluZywgJnN3aXp6bGUpOwo+ICsKPiAr CS8qIFdlIGNyZWF0ZSBhIHRlbXBvcmFyeSBidWZmZXIgYW5kIGNvcHkgZnJvbSBpdCB1c2luZyBy ZW5kZXJjb3B5LiAqLwo+ICsJdG1wLnNpemUgPSByZWN0LT53ICogcmVjdC0+aCAqIHNpemVvZih1 aW50MzJfdCk7Cj4gKwl0bXAuaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgdG1wLnNpemUpOwo+ICsJ dG1wLnN0cmlkZSA9IHJlY3QtPncgKiBzaXplb2YodWludDMyX3QpOwo+ICsJZHJhd19yZWN0X21t YXBfY3B1KGZkLCAmdG1wLCAmKHN0cnVjdCByZWN0KXswLCAwLCByZWN0LT53LCByZWN0LT5ofSwK PiArCQkJICAgY29sb3IpOwo+ICsKPiArCXNyYyA9IGdlbV9oYW5kbGVfdG9fbGliZHJtX2JvKGNt ZF9kYXRhLT5idWZtZ3IsIGZkLCAiIiwgdG1wLmhhbmRsZSk7Cj4gKwlpZ3RfYXNzZXJ0KHNyYyk7 Cj4gKwlkc3QgPSBnZW1faGFuZGxlX3RvX2xpYmRybV9ibyhjbWRfZGF0YS0+YnVmbWdyLCBmZCwg IiIsIGJ1Zi0+aGFuZGxlKTsKPiArCWlndF9hc3NlcnQoZHN0KTsKPiArCj4gKwlzcmNfYnVmLmJv ID0gc3JjOwo+ICsJc3JjX2J1Zi5zdHJpZGUgPSB0bXAuc3RyaWRlOwo+ICsJc3JjX2J1Zi50aWxp bmcgPSBJOTE1X1RJTElOR19OT05FOwo+ICsJc3JjX2J1Zi5zaXplID0gdG1wLnNpemU7Cj4gKwlk c3RfYnVmLmJvID0gZHN0Owo+ICsJZHN0X2J1Zi5zdHJpZGUgPSBidWYtPnN0cmlkZTsKPiArCWRz dF9idWYudGlsaW5nID0gdGlsaW5nOwo+ICsJZHN0X2J1Zi5zaXplID0gYnVmLT5zaXplOwo+ICsK PiArCWJhdGNoID0gaW50ZWxfYmF0Y2hidWZmZXJfYWxsb2MoY21kX2RhdGEtPmJ1Zm1nciwgZGV2 aWQpOwo+ICsJaWd0X2Fzc2VydChiYXRjaCk7Cj4gKwo+ICsJcmVuZGVyY29weShiYXRjaCwgY21k X2RhdGEtPmNvbnRleHQsICZzcmNfYnVmLCAwLCAwLCByZWN0LT53LCByZWN0LT5oLAo+ICsJCSAg ICZkc3RfYnVmLCByZWN0LT54LCByZWN0LT55KTsKPiArCj4gKwlnZW1fc3luYyhmZCwgYnVmLT5o YW5kbGUpOwo+ICsJaW50ZWxfYmF0Y2hidWZmZXJfZnJlZShiYXRjaCk7Cj4gKwlnZW1fY2xvc2Uo ZmQsIHRtcC5oYW5kbGUpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogaWd0X2RyYXdfcmVjdDoKPiAr ICogQGZkOiB0aGUgRFJNIGZpbGUgZGVzY3JpcHRvcgo+ICsgKiBAYnVmbWdyOiB0aGUgbGliZHJt IGJ1Zm1nciwgb25seSByZXF1aXJlZCBmb3IgSUdUX0RSQVdfQkxUIGFuZAo+ICsgKiAgICAgICAg ICBJR1RfRFJBV19SRU5ERVIKPiArICogQGNvbnRleHQ6IHRoZSBjb250ZXh0LCBjYW4gYmUgTlVM TCBpZiB5b3UgZG9uJ3Qgd2FudCB0byB0aGluayBhYm91dCBpdAo+ICsgKiBAYnVmX2hhbmRsZTog dGhlIGhhbmRsZSBvZiB0aGUgYnVmZmVyIHdoZXJlIHlvdSdyZSBnb2luZyB0byBkcmF3IHRvCj4g KyAqIEBidWZfc2l6ZTogdGhlIHNpemUgb2YgdGhlIGJ1ZmZlcgo+ICsgKiBAYnVmX3N0cmlkZTog dGhlIHN0cmlkZSBvZiB0aGUgYnVmZmVyCj4gKyAqIEBtZXRob2Q6IG1ldGhvZCB5b3UncmUgZ29p bmcgdG8gdXNlIHRvIHdyaXRlIHRvIHRoZSBidWZmZXIKPiArICogQHJlY3RfeDogaG9yaXpvbnRh bCBwb3NpdGlvbiBvbiB0aGUgYnVmZmVyIHdoZXJlIHlvdXIgcmVjdGFuZ2xlIHN0YXJ0cwo+ICsg KiBAcmVjdF95OiB2ZXJ0aWNhbCBwb3NpdGlvbiBvbiB0aGUgYnVmZmVyIHdoZXJlIHlvdXIgcmVj dGFuZ2xlIHN0YXJ0cwo+ICsgKiBAcmVjdF93OiB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlCj4gKyAq IEByZWN0X2g6IGhlaWdodCBvZiB0aGUgcmVjdGFuZ2xlCj4gKyAqIEBjb2xvcjogY29sb3Igb2Yg dGhlIHJlY3RhbmdsZQo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIGRyYXdzIGEgY29sb3JlZCBy ZWN0YW5nbGUgb24gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciwgYWxsb3dpbmcKPiArICogeW91IHRv IHNwZWNpZnkgdGhlIG1ldGhvZCB1c2VkIHRvIGRyYXcgdGhlIHJlY3RhbmdsZS4gV2UgYXNzdW1l IDMyIGJpdCBwaXhlbHMKPiArICogd2l0aCA4IGJpdHMgcGVyIGNvbG9yLgo+ICsgKi8KPiArdm9p ZCBpZ3RfZHJhd19yZWN0KGludCBmZCwgZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyLCBkcm1faW50 ZWxfY29udGV4dCAqY29udGV4dCwKPiArCQkgICB1aW50MzJfdCBidWZfaGFuZGxlLCB1aW50MzJf dCBidWZfc2l6ZSwgdWludDMyX3QgYnVmX3N0cmlkZSwKPiArCQkgICBlbnVtIGlndF9kcmF3X21l dGhvZCBtZXRob2QsIGludCByZWN0X3gsIGludCByZWN0X3ksCj4gKwkJICAgaW50IHJlY3Rfdywg aW50IHJlY3RfaCwgdWludDMyX3QgY29sb3IpCj4gK3sKPiArCXN0cnVjdCBjbWRfZGF0YSBjbWRf ZGF0YSA9IHsKPiArCQkuYnVmbWdyID0gYnVmbWdyLAo+ICsJCS5jb250ZXh0ID0gY29udGV4dCwK PiArCX07Cj4gKwlzdHJ1Y3QgYnVmX2RhdGEgYnVmID0gewo+ICsJCS5oYW5kbGUgPSBidWZfaGFu ZGxlLAo+ICsJCS5zaXplID0gYnVmX3NpemUsCj4gKwkJLnN0cmlkZSA9IGJ1Zl9zdHJpZGUsCj4g Kwl9Owo+ICsJc3RydWN0IHJlY3QgcmVjdCA9IHsKPiArCQkueCA9IHJlY3RfeCwKPiArCQkueSA9 IHJlY3RfeSwKPiArCQkudyA9IHJlY3RfdywKPiArCQkuaCA9IHJlY3RfaCwKPiArCX07Cj4gKwo+ ICsJc3dpdGNoIChtZXRob2QpIHsKPiArCWNhc2UgSUdUX0RSQVdfTU1BUF9DUFU6Cj4gKwkJZHJh d19yZWN0X21tYXBfY3B1KGZkLCAmYnVmLCAmcmVjdCwgY29sb3IpOwo+ICsJCWJyZWFrOwo+ICsJ Y2FzZSBJR1RfRFJBV19NTUFQX0dUVDoKPiArCQlkcmF3X3JlY3RfbW1hcF9ndHQoZmQsICZidWYs ICZyZWN0LCBjb2xvcik7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIElHVF9EUkFXX1BXUklURToKPiAr CQlkcmF3X3JlY3RfcHdyaXRlKGZkLCAmYnVmLCAmcmVjdCwgY29sb3IpOwo+ICsJCWJyZWFrOwo+ ICsJY2FzZSBJR1RfRFJBV19CTFQ6Cj4gKwkJZHJhd19yZWN0X2JsdChmZCwgJmNtZF9kYXRhLCAm YnVmLCAmcmVjdCwgY29sb3IpOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBJR1RfRFJBV19SRU5ERVI6 Cj4gKwkJZHJhd19yZWN0X3JlbmRlcihmZCwgJmNtZF9kYXRhLCAmYnVmLCAmcmVjdCwgY29sb3Ip Owo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQlpZ3RfYXNzZXJ0KGZhbHNlKTsKPiArCQli cmVhazsKPiArCX0KPiArfQo+ICsKPiArLyoqCj4gKyAqIGlndF9kcmF3X3JlY3RfZmI6Cj4gKyAq Cj4gKyAqIFRoaXMgaXMgZXhhY3RseSB0aGUgc2FtZSBhcyBpZ3RfZHJhd19yZWN0LCBidXQgeW91 IGNhbiBwYXNzIGFuIGlndF9mYiBpbnN0ZWFkCj4gKyAqIG9mIG1hbnVhbGx5IHByb3ZpZGluZyBp dHMgZGV0YWlscy4gU2VlIGlndF9kcmF3X3JlY3QuCj4gKyAqLwo+ICt2b2lkIGlndF9kcmF3X3Jl Y3RfZmIoaW50IGZkLCBkcm1faW50ZWxfYnVmbWdyICpidWZtZ3IsCj4gKwkJICAgICAgZHJtX2lu dGVsX2NvbnRleHQgKmNvbnRleHQsIHN0cnVjdCBpZ3RfZmIgKmZiLAo+ICsJCSAgICAgIGVudW0g aWd0X2RyYXdfbWV0aG9kIG1ldGhvZCwgaW50IHJlY3RfeCwgaW50IHJlY3RfeSwKPiArCQkgICAg ICBpbnQgcmVjdF93LCBpbnQgcmVjdF9oLCB1aW50MzJfdCBjb2xvcikKPiArewo+ICsJaWd0X2Ry YXdfcmVjdChmZCwgYnVmbWdyLCBjb250ZXh0LCBmYi0+Z2VtX2hhbmRsZSwgZmItPnNpemUsIGZi LT5zdHJpZGUsCj4gKwkJICAgICAgbWV0aG9kLCByZWN0X3gsIHJlY3RfeSwgcmVjdF93LCByZWN0 X2gsIGNvbG9yKTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGlndF9kcmF3X2ZpbGxfZmI6Cj4gKyAq IEBmZDogdGhlIERSTSBmaWxlIGRlc2NyaXB0b3IKPiArICogQGZiOiB0aGUgRkIgdGhhdCBpcyBn b2luZyB0byBiZSBmaWxsZWQKPiArICogQGNvbG9yOiB0aGUgY29sb3IgeW91J3JlIGdvaW5nIHRv IHBhaW50IGl0Cj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24ganVzdCBwYWludHMgYW4gaWd0X2Zi IHVzaW5nIHRoZSBwcm92aWRlZCBjb2xvci4gSXQgYXNzdW1lcyAzMgo+ICsgKiBiaXQgcGl4ZWxz IHdpdGggOCBiaXQgY29sb3JzLgo+ICsgKi8KPiArdm9pZCBpZ3RfZHJhd19maWxsX2ZiKGludCBm ZCwgc3RydWN0IGlndF9mYiAqZmIsIHVpbnQzMl90IGNvbG9yKQo+ICt7Cj4gKwlpZ3RfZHJhd19y ZWN0X2ZiKGZkLCBOVUxMLCBOVUxMLCBmYiwgSUdUX0RSQVdfTU1BUF9HVFQsCj4gKwkJCSAwLCAw LCBmYi0+d2lkdGgsIGZiLT5oZWlnaHQsIGNvbG9yKTsKPiArfQo+IGRpZmYgLS1naXQgYS9saWIv aWd0X2RyYXcuaCBiL2xpYi9pZ3RfZHJhdy5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwMDAwMDAwLi4zOTllMTdjCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYi9pZ3RfZHJhdy5o Cj4gQEAgLTAsMCArMSw1NCBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAxNSBJbnRlbCBD b3Jwb3JhdGlvbgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMg c29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2Fy ZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5 LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBh bmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMg dG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0 IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHly aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4 dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vi c3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUg U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO RCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRP IFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxM Cj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5Z IENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBB Q1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4gKyAqIEZST00s IE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1Ig T1RIRVIgREVBTElOR1MKPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ICsgKgo+ICsgKi8KPiArCj4g KyNpZm5kZWYgX19JR1RfRFJBV19IX18KPiArI2RlZmluZSBfX0lHVF9EUkFXX0hfXwo+ICsKPiAr I2luY2x1ZGUgPGludGVsX2J1Zm1nci5oPgo+ICsjaW5jbHVkZSAiaWd0X2ZiLmgiCj4gKwoKZ3Rr ZG9jIGZvciB0aGlzIGVudW0gd291bGQgYmUgbmljZSB0b28gSSB0aGluay4KCj4gK2VudW0gaWd0 X2RyYXdfbWV0aG9kIHsKPiArCUlHVF9EUkFXX01NQVBfQ1BVLAo+ICsJSUdUX0RSQVdfTU1BUF9H VFQsCj4gKwlJR1RfRFJBV19QV1JJVEUsCj4gKwlJR1RfRFJBV19CTFQsCj4gKwlJR1RfRFJBV19S RU5ERVIsCj4gKwlJR1RfRFJBV19NRVRIT0RfQ09VTlQsCj4gK307Cj4gKwo+ICtjb25zdCBjaGFy ICppZ3RfZHJhd19nZXRfbWV0aG9kX25hbWUoZW51bSBpZ3RfZHJhd19tZXRob2QgbWV0aG9kKTsK PiArCj4gK3ZvaWQgaWd0X2RyYXdfcmVjdChpbnQgZmQsIGRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1n ciwgZHJtX2ludGVsX2NvbnRleHQgKmNvbnRleHQsCj4gKwkJICAgdWludDMyX3QgYnVmX2hhbmRs ZSwgdWludDMyX3QgYnVmX3NpemUsIHVpbnQzMl90IGJ1Zl9zdHJpZGUsCj4gKwkJICAgZW51bSBp Z3RfZHJhd19tZXRob2QgbWV0aG9kLCBpbnQgcmVjdF94LCBpbnQgcmVjdF95LAo+ICsJCSAgIGlu dCByZWN0X3csIGludCByZWN0X2gsIHVpbnQzMl90IGNvbG9yKTsKPiArCj4gK3ZvaWQgaWd0X2Ry YXdfcmVjdF9mYihpbnQgZmQsIGRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1nciwKPiArCQkgICAgICBk cm1faW50ZWxfY29udGV4dCAqY29udGV4dCwgc3RydWN0IGlndF9mYiAqZmIsCj4gKwkJICAgICAg ZW51bSBpZ3RfZHJhd19tZXRob2QgbWV0aG9kLCBpbnQgcmVjdF94LCBpbnQgcmVjdF95LAo+ICsJ CSAgICAgIGludCByZWN0X3csIGludCByZWN0X2gsIHVpbnQzMl90IGNvbG9yKTsKPiArCj4gK3Zv aWQgaWd0X2RyYXdfZmlsbF9mYihpbnQgZmQsIHN0cnVjdCBpZ3RfZmIgKmZiLCB1aW50MzJfdCBj b2xvcik7Cj4gKwo+ICsjZW5kaWYgLyogX19JR1RfRFJBV19IX18gKi8KPiBkaWZmIC0tZ2l0IGEv bGliL3Rlc3RzLy5naXRpZ25vcmUgYi9saWIvdGVzdHMvLmdpdGlnbm9yZQo+IGluZGV4IGE3NDVh MjMuLjg4ZjY2OGEgMTAwNjQ0Cj4gLS0tIGEvbGliL3Rlc3RzLy5naXRpZ25vcmUKPiArKysgYi9s aWIvdGVzdHMvLmdpdGlnbm9yZQo+IEBAIC0xLDQgKzEsNSBAQAo+ICAjIFBsZWFzZSBrZWVwIHNv cnRlZCBhbHBoYWJldGljYWxseQo+ICtpZ3RfZHJhdwo+ICBpZ3RfZm9ya19oZWxwZXIKPiAgaWd0 X2ludmFsaWRfc3VidGVzdF9uYW1lCj4gIGlndF9saXN0X29ubHkKPiBkaWZmIC0tZ2l0IGEvbGli L3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMgYi9saWIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+IGlu ZGV4IGVjZDczYWUuLmZmNjZkOWQgMTAwNjQ0Cj4gLS0tIGEvbGliL3Rlc3RzL01ha2VmaWxlLnNv dXJjZXMKPiArKysgYi9saWIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+IEBAIC0xLDQgKzEsNSBA QAo+ICBjaGVja19QUk9HUkFNUyA9IFwKPiArCWlndF9kcmF3IFwKPiAgCWlndF9ub19leGl0IFwK PiAgCWlndF9ub19leGl0X2xpc3Rfb25seSBcCj4gIAlpZ3RfZm9ya19oZWxwZXIgXAo+IGRpZmYg LS1naXQgYS9saWIvdGVzdHMvaWd0X2RyYXcuYyBiL2xpYi90ZXN0cy9pZ3RfZHJhdy5jCj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi4xNjMwY2MyCj4gLS0tIC9kZXYvbnVs bAo+ICsrKyBiL2xpYi90ZXN0cy9pZ3RfZHJhdy5jCj4gQEAgLTAsMCArMSwyNDcgQEAKPiArLyoK PiArICogQ29weXJpZ2h0IMKpIDIwMTUgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogUGVy bWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24g b2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUg U29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlv bgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwg ZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBT b2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJl IGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p c3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBi ZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJ UyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElF RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05J TkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZ UklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9S IE9USEVSV0lTRSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBX SVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRI RSBTT0ZUV0FSRS4KPiArICoKPiArICovCj4gKwo+ICsvKiBUaGlzIHByb2dyYW0gdGVzdHMgd2hl dGhlciB0aGUgaWd0X2RyYXcgbGlicmFyeSBhY3R1YWxseSB3b3Jrcy4gKi8KPiArCj4gKyNpbmNs dWRlICJkcm10ZXN0LmgiCj4gKyNpbmNsdWRlICJpZ3RfYXV4LmgiCj4gKyNpbmNsdWRlICJpZ3Rf ZHJhdy5oIgo+ICsjaW5jbHVkZSAiaWd0X2RlYnVnZnMuaCIKPiArI2luY2x1ZGUgImlndF9mYi5o Igo+ICsjaW5jbHVkZSAiaWd0X2ttcy5oIgo+ICsKPiArI2RlZmluZSBNQVhfQ09OTkVDVE9SUyAz Mgo+ICsKPiArc3RydWN0IG1vZGVzZXRfcGFyYW1zIHsKPiArCXVpbnQzMl90IGNydGNfaWQ7Cj4g Kwl1aW50MzJfdCBjb25uZWN0b3JfaWQ7Cj4gKwlkcm1Nb2RlTW9kZUluZm9QdHIgbW9kZTsKPiAr fTsKPiArCj4gK2ludCBkcm1fZmQ7Cj4gK2RybU1vZGVSZXNQdHIgZHJtX3JlczsKPiArZHJtTW9k ZUNvbm5lY3RvclB0ciBkcm1fY29ubmVjdG9yc1tNQVhfQ09OTkVDVE9SU107Cj4gK2RybV9pbnRl bF9idWZtZ3IgKmJ1Zm1ncjsKPiAraWd0X3BpcGVfY3JjX3QgKnBpcGVfY3JjOwo+ICsKPiArYm9v bCBoYXNfbWV0aG9kX2Jhc2VfY3JjID0gZmFsc2U7Cj4gK2lndF9jcmNfdCBtZXRob2RfYmFzZV9j cmM7Cj4gKwo+ICtzdHJ1Y3QgbW9kZXNldF9wYXJhbXMgbXM7Cj4gKwo+ICtzdGF0aWMgdm9pZCBm aW5kX21vZGVzZXRfcGFyYW1zKHZvaWQpCj4gK3sKPiArCWludCBpOwo+ICsJdWludDMyX3QgY29u bmVjdG9yX2lkID0gMCwgY3J0Y19pZDsKPiArCWRybU1vZGVNb2RlSW5mb1B0ciBtb2RlID0gTlVM TDsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgZHJtX3Jlcy0+Y291bnRfY29ubmVjdG9yczsgaSsr KSB7Cj4gKwkJZHJtTW9kZUNvbm5lY3RvclB0ciBjID0gZHJtX2Nvbm5lY3RvcnNbaV07Cj4gKwo+ ICsJCWlmIChjLT5jb3VudF9tb2Rlcykgewo+ICsJCQljb25uZWN0b3JfaWQgPSBjLT5jb25uZWN0 b3JfaWQ7Cj4gKwkJCW1vZGUgPSAmYy0+bW9kZXNbMF07Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiAr CX0KPiArCWlndF9yZXF1aXJlKGNvbm5lY3Rvcl9pZCk7Cj4gKwo+ICsJY3J0Y19pZCA9IGRybV9y ZXMtPmNydGNzWzBdOwo+ICsJaWd0X2Fzc2VydChjcnRjX2lkKTsKPiArCWlndF9hc3NlcnQobW9k ZSk7Cj4gKwo+ICsJbXMuY29ubmVjdG9yX2lkID0gY29ubmVjdG9yX2lkOwo+ICsJbXMuY3J0Y19p ZCA9IGNydGNfaWQ7Cj4gKwltcy5tb2RlID0gbW9kZTsKPiArCj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIGdldF9tZXRob2RfY3JjKGVudW0gaWd0X2RyYXdfbWV0aG9kIG1ldGhvZCwgdWludDY0X3Qg dGlsaW5nLAo+ICsJCQkgICBpZ3RfY3JjX3QgKmNyYykKPiArewo+ICsJc3RydWN0IGlndF9mYiBm YjsKPiArCWludCByYzsKPiArCj4gKwlpZ3RfY3JlYXRlX2ZiKGRybV9mZCwgbXMubW9kZS0+aGRp c3BsYXksIG1zLm1vZGUtPnZkaXNwbGF5LAo+ICsJCSAgICAgIERSTV9GT1JNQVRfWFJHQjg4ODgs IHRpbGluZywgJmZiKTsKPiArCWlndF9kcmF3X3JlY3RfZmIoZHJtX2ZkLCBidWZtZ3IsIE5VTEws ICZmYiwgbWV0aG9kLAo+ICsJCQkgMCwgMCwgZmIud2lkdGgsIGZiLmhlaWdodCwgMHhGRik7Cj4g Kwo+ICsJaWd0X2RyYXdfcmVjdF9mYihkcm1fZmQsIGJ1Zm1nciwgTlVMTCwgJmZiLCBtZXRob2Qs Cj4gKwkJCSBmYi53aWR0aCAvIDQsIGZiLmhlaWdodCAvIDQsCj4gKwkJCSBmYi53aWR0aCAvIDIs IGZiLmhlaWdodCAvIDIsIDB4RkYwMCk7Cj4gKwlpZ3RfZHJhd19yZWN0X2ZiKGRybV9mZCwgYnVm bWdyLCBOVUxMLCAmZmIsIG1ldGhvZCwKPiArCQkJIGZiLndpZHRoIC8gOCwgZmIuaGVpZ2h0IC8g OCwKPiArCQkJIGZiLndpZHRoIC8gNCwgZmIuaGVpZ2h0IC8gNCwgMHhGRjAwMDApOwo+ICsJaWd0 X2RyYXdfcmVjdF9mYihkcm1fZmQsIGJ1Zm1nciwgTlVMTCwgJmZiLCBtZXRob2QsCj4gKwkJCSBm Yi53aWR0aCAvIDIsIGZiLmhlaWdodCAvIDIsCj4gKwkJCSBmYi53aWR0aCAvIDMsIGZiLmhlaWdo dCAvIDMsIDB4RkYwMEZGKTsKPiArCj4gKwlyYyA9IGRybU1vZGVTZXRDcnRjKGRybV9mZCwgbXMu Y3J0Y19pZCwgZmIuZmJfaWQsIDAsIDAsCj4gKwkJCSAgICAmbXMuY29ubmVjdG9yX2lkLCAxLCBt cy5tb2RlKTsKPiArCWlndF9hc3NlcnQocmMgPT0gMCk7Cj4gKwo+ICsJaWd0X2RlYnVnX3dhaXRf Zm9yX2tleXByZXNzKCJjcmMiKTsKPiArCWlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhwaXBlX2Ny YywgY3JjKTsKClNob3VsZCB3ZSBqdXN0IG1vdmUgdGhpcyBpZ3RfZGVidWdfd2FpdF9mb3Jfa2V5 cHJlc3MgaW50bwppZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmM/Cgo+ICsKPiArCWttc3Rlc3RfdW5z ZXRfYWxsX2NydGNzKGRybV9mZCwgZHJtX3Jlcyk7Cj4gKwlpZ3RfcmVtb3ZlX2ZiKGRybV9mZCwg JmZiKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHJhd19tZXRob2Rfc3VidGVzdChlbnVtIGln dF9kcmF3X21ldGhvZCBtZXRob2QsIHVpbnQ2NF90IHRpbGluZykKPiArewo+ICsJaWd0X2NyY190 IGNyYzsKPiArCj4gKwlrbXN0ZXN0X3Vuc2V0X2FsbF9jcnRjcyhkcm1fZmQsIGRybV9yZXMpOwo+ ICsKPiArCWZpbmRfbW9kZXNldF9wYXJhbXMoKTsKPiArCj4gKwkvKiBVc2UgSUdUX0RSQVdfTU1B UF9HVFQgb24gYW4gdW50aWxlZCBidWZmZXIgYXMgdGhlIHBhcmFtZXRlciBmb3IKPiArCSAqIGNv bXBhcmlzb24uIENhY2hlIHRoZSB2YWx1ZSBzbyB3ZSBkb24ndCByZWNvbXB1dGUgaXQgZm9yIGV2 ZXJ5IHNpbmdsZQo+ICsJICogc3VidGVzdC4gKi8KPiArCWlmICghaGFzX21ldGhvZF9iYXNlX2Ny Yykgewo+ICsJCWdldF9tZXRob2RfY3JjKElHVF9EUkFXX01NQVBfR1RULCBMT0NBTF9EUk1fRk9S TUFUX01PRF9OT05FLAo+ICsJCQkgICAgICAgJm1ldGhvZF9iYXNlX2NyYyk7Cj4gKwkJaGFzX21l dGhvZF9iYXNlX2NyYyA9IHRydWU7Cj4gKwl9Cj4gKwo+ICsJZ2V0X21ldGhvZF9jcmMobWV0aG9k LCB0aWxpbmcsICZjcmMpOwo+ICsJaWd0X2Fzc2VydF9jcmNfZXF1YWwoJmNyYywgJm1ldGhvZF9i YXNlX2NyYyk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGdldF9maWxsX2NyYyh1aW50NjRfdCB0 aWxpbmcsIGlndF9jcmNfdCAqY3JjKQo+ICt7Cj4gKwlzdHJ1Y3QgaWd0X2ZiIGZiOwo+ICsJaW50 IHJjOwo+ICsKPiArCWlndF9jcmVhdGVfZmIoZHJtX2ZkLCBtcy5tb2RlLT5oZGlzcGxheSwgbXMu bW9kZS0+dmRpc3BsYXksCj4gKwkJICAgICAgRFJNX0ZPUk1BVF9YUkdCODg4OCwgdGlsaW5nLCAm ZmIpOwo+ICsKPiArCWlndF9kcmF3X2ZpbGxfZmIoZHJtX2ZkLCAmZmIsIDB4RkYpOwo+ICsKPiAr CXJjID0gZHJtTW9kZVNldENydGMoZHJtX2ZkLCBtcy5jcnRjX2lkLCBmYi5mYl9pZCwgMCwgMCwK PiArCQkJICAgICZtcy5jb25uZWN0b3JfaWQsIDEsIG1zLm1vZGUpOwo+ICsJaWd0X2Fzc2VydChy YyA9PSAwKTsKPiArCj4gKwlpZ3RfZGVidWdfd2FpdF9mb3Jfa2V5cHJlc3MoImNyYyIpOwo+ICsJ aWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKHBpcGVfY3JjLCBjcmMpOwo+ICsKPiArCWttc3Rlc3Rf dW5zZXRfYWxsX2NydGNzKGRybV9mZCwgZHJtX3Jlcyk7Cj4gKwlpZ3RfcmVtb3ZlX2ZiKGRybV9m ZCwgJmZiKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZmlsbF9mYl9zdWJ0ZXN0KHZvaWQpCj4g K3sKPiArCWludCByYzsKPiArCXN0cnVjdCBpZ3RfZmIgZmI7Cj4gKwlpZ3RfY3JjX3QgYmFzZV9j cmMsIGNyYzsKPiArCj4gKwlrbXN0ZXN0X3Vuc2V0X2FsbF9jcnRjcyhkcm1fZmQsIGRybV9yZXMp Owo+ICsKPiArCWZpbmRfbW9kZXNldF9wYXJhbXMoKTsKPiArCj4gKwlpZ3RfY3JlYXRlX2ZiKGRy bV9mZCwgbXMubW9kZS0+aGRpc3BsYXksIG1zLm1vZGUtPnZkaXNwbGF5LAo+ICsJCSAgICAgIERS TV9GT1JNQVRfWFJHQjg4ODgsIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsICZmYik7Cj4gKwo+ ICsJaWd0X2RyYXdfcmVjdF9mYihkcm1fZmQsIGJ1Zm1nciwgTlVMTCwgJmZiLCBJR1RfRFJBV19N TUFQX0dUVCwKPiArCQkJIDAsIDAsIGZiLndpZHRoLCBmYi5oZWlnaHQsIDB4RkYpOwo+ICsKPiAr CXJjID0gZHJtTW9kZVNldENydGMoZHJtX2ZkLCBtcy5jcnRjX2lkLCBmYi5mYl9pZCwgMCwgMCwK PiArCQkJICAgICZtcy5jb25uZWN0b3JfaWQsIDEsIG1zLm1vZGUpOwo+ICsJaWd0X2Fzc2VydChy YyA9PSAwKTsKPiArCj4gKwlpZ3RfZGVidWdfd2FpdF9mb3Jfa2V5cHJlc3MoImNyYyIpOwo+ICsJ aWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKHBpcGVfY3JjLCAmYmFzZV9jcmMpOwo+ICsKPiArCWdl dF9maWxsX2NyYyhMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLCAmY3JjKTsKPiArCWlndF9hc3Nl cnRfY3JjX2VxdWFsKCZjcmMsICZiYXNlX2NyYyk7Cj4gKwo+ICsJZ2V0X2ZpbGxfY3JjKExPQ0FM X0k5MTVfRk9STUFUX01PRF9YX1RJTEVELCAmY3JjKTsKPiArCWlndF9hc3NlcnRfY3JjX2VxdWFs KCZjcmMsICZiYXNlX2NyYyk7Cj4gKwo+ICsJa21zdGVzdF91bnNldF9hbGxfY3J0Y3MoZHJtX2Zk LCBkcm1fcmVzKTsKPiArCWlndF9yZW1vdmVfZmIoZHJtX2ZkLCAmZmIpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBzZXR1cF9lbnZpcm9ubWVudCh2b2lkKQo+ICt7Cj4gKwlpbnQgaTsKPiArCj4g Kwlkcm1fZmQgPSBkcm1fb3Blbl9hbnlfbWFzdGVyKCk7Cj4gKwlpZ3RfcmVxdWlyZShkcm1fZmQg Pj0gMCk7Cj4gKwo+ICsJZHJtX3JlcyA9IGRybU1vZGVHZXRSZXNvdXJjZXMoZHJtX2ZkKTsKPiAr CWlndF9hc3NlcnQoZHJtX3Jlcy0+Y291bnRfY29ubmVjdG9ycyA8PSBNQVhfQ09OTkVDVE9SUyk7 Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IGRybV9yZXMtPmNvdW50X2Nvbm5lY3RvcnM7IGkrKykK PiArCQlkcm1fY29ubmVjdG9yc1tpXSA9IGRybU1vZGVHZXRDb25uZWN0b3IoZHJtX2ZkLAo+ICsJ CQkJCQkJZHJtX3Jlcy0+Y29ubmVjdG9yc1tpXSk7Cj4gKwo+ICsJa21zdGVzdF9zZXRfdnRfZ3Jh cGhpY3NfbW9kZSgpOwo+ICsKPiArCWJ1Zm1nciA9IGRybV9pbnRlbF9idWZtZ3JfZ2VtX2luaXQo ZHJtX2ZkLCA0MDk2KTsKPiArCWlndF9hc3NlcnQoYnVmbWdyKTsKPiArCWRybV9pbnRlbF9idWZt Z3JfZ2VtX2VuYWJsZV9yZXVzZShidWZtZ3IpOwo+ICsKPiArCXBpcGVfY3JjID0gaWd0X3BpcGVf Y3JjX25ldygwLCBJTlRFTF9QSVBFX0NSQ19TT1VSQ0VfQVVUTyk7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIHRlYXJkb3duX2Vudmlyb25tZW50KHZvaWQpCj4gK3sKPiArCWludCBpOwo+ICsKPiAr CWlndF9waXBlX2NyY19mcmVlKHBpcGVfY3JjKTsKPiArCj4gKwlkcm1faW50ZWxfYnVmbWdyX2Rl c3Ryb3koYnVmbWdyKTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgZHJtX3Jlcy0+Y291bnRfY29u bmVjdG9yczsgaSsrKQo+ICsJCWRybU1vZGVGcmVlQ29ubmVjdG9yKGRybV9jb25uZWN0b3JzW2ld KTsKPiArCj4gKwlkcm1Nb2RlRnJlZVJlc291cmNlcyhkcm1fcmVzKTsKPiArCWNsb3NlKGRybV9m ZCk7Cj4gK30KPiArCj4gK2lndF9tYWluCj4gK3sKPiArCWVudW0gaWd0X2RyYXdfbWV0aG9kIG1l dGhvZDsKPiArCj4gKwlpZ3RfZml4dHVyZQo+ICsJCXNldHVwX2Vudmlyb25tZW50KCk7Cj4gKwo+ ICsJZm9yIChtZXRob2QgPSAwOyBtZXRob2QgPCBJR1RfRFJBV19NRVRIT0RfQ09VTlQ7IG1ldGhv ZCsrKSB7Cj4gKwkJaWd0X3N1YnRlc3RfZigiZHJhdy1tZXRob2QtJXMtdW50aWxlZCIsCj4gKwkJ CSAgICAgIGlndF9kcmF3X2dldF9tZXRob2RfbmFtZShtZXRob2QpKQo+ICsJCQlkcmF3X21ldGhv ZF9zdWJ0ZXN0KG1ldGhvZCwgTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSk7Cj4gKwkJaWd0X3N1 YnRlc3RfZigiZHJhdy1tZXRob2QtJXMtdGlsZWQiLAo+ICsJCQkgICAgICBpZ3RfZHJhd19nZXRf bWV0aG9kX25hbWUobWV0aG9kKSkKPiArCQkJZHJhd19tZXRob2Rfc3VidGVzdChtZXRob2QsCj4g KwkJCQkJICAgIExPQ0FMX0k5MTVfRk9STUFUX01PRF9YX1RJTEVEKTsKPiArCX0KPiArCj4gKwlp Z3Rfc3VidGVzdCgiZmlsbC1mYiIpCj4gKwkJZmlsbF9mYl9zdWJ0ZXN0KCk7Cj4gKwo+ICsJaWd0 X2ZpeHR1cmUKPiArCQl0ZWFyZG93bl9lbnZpcm9ubWVudCgpOwo+ICt9Cj4gLS0gCj4gMi4xLjQK PiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IElu dGVsLWdmeCBtYWlsaW5nIGxpc3QKPiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4g aHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAoK LS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0 dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50 ZWwtZ2Z4Cg==