From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id B583B42EDF for ; Thu, 12 May 2022 15:48:57 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6CFFA68B27E; Thu, 12 May 2022 18:48:54 +0300 (EEST) Received: from mail.jetheaddev.com (mail.jetheaddev.com [70.164.99.34]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DDF3B68B295 for ; Thu, 12 May 2022 18:48:46 +0300 (EEST) Received: from BENJAMIN.jetheaddev.com ([::1]) by cas.jetheaddev.com ([::1]) with mapi id 14.03.0513.000; Thu, 12 May 2022 08:48:45 -0700 From: John Stebbins To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [FFmpeg-devel] [PATCH 81/87] avcodec: Move all AVCodecParser.split functions to remove_extradata_bsf Thread-Index: AQHXNSfSAczw7kwvok2kYhSOMf+eb60eMOoAgAAITYCAAAFPAA== Date: Thu, 12 May 2022 15:48:44 +0000 Message-ID: <6f02af75506deace7c7b515a2ea5dfb8a84eefd7.camel@jetheaddev.com> References: <20210419141024.8174-1-jamrial@gmail.com> <20210419141024.8174-82-jamrial@gmail.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.42.4 (3.42.4-2.fc35) x-originating-ip: [192.168.13.201] Content-ID: <3F4444CB092C264FBDB8FA8B1E7ECACD@jetheaddev.com> MIME-Version: 1.0 Subject: Re: [FFmpeg-devel] [PATCH 81/87] avcodec: Move all AVCodecParser.split functions to remove_extradata_bsf X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: VGhhbmtzIGZvciB0aGUgcG9pbnRlci4gTXVjaCBhcHByZWNpYXRlZC4KCk9uIFRodSwgMjAyMi0w NS0xMiBhdCAxNzo0MyArMDIwMCwgQW5kcmVhcyBSaGVpbmhhcmR0IHdyb3RlOgo+IEpvaG4gU3Rl YmJpbnM6Cj4gPiBIaSBhbGwsCj4gPiAKPiA+IEkga25vdyB0aGlzIGhhcHBlbmVkIHF1aXRlIHNv bWUgdGltZSBhZ28sIGJ1dCB3ZSBqdXN0IG5vdGljZWQgdGhlCj4gPiBjaGFuZ2UuCj4gPiAKPiA+ IFRoaXMgZWZmZWN0aXZlbHkgZGlzYWJsZXMgdGhlIHB1YmxpYyBBUEkgQVZDb2RlY1BhcnNlci5z cGxpdCBmb3IKPiA+IHRoZXNlCj4gPiBjb2RlY3MuIEhhbmRCcmFrZSB1c2VzIHRoaXMgQVBJIHRv IHNwbGl0IG91dCBleHRyYWRhdGEgZm9yIGEgZmV3Cj4gPiBjb2RlY3MuIEFueSBjaGFuY2Ugd2Ug Y2FuIGJyaW5nIHRoZXNlIGJhY2s/wqAgT3RoZXJ3aXNlLCB3ZSB3aWxsCj4gPiBoYXZlIHRvCj4g PiByZXBsaWNhdGUgdGhpcyBjb2RlIGluIEhhbmRCcmFrZSDwn5iV77iPCj4gPiAKPiAKPiBJIGtu b3cgdGhhdCBBVkNvZGVjUGFyc2VyIHdhcyBsYWNraW5nIHRoZSB0eXBpY2FsIHB1YmxpYy1wcml2 YXRlCj4gZGVtYXJrYXRpb24sIGJ1dCB5b3UgYXJlIGFjdHVhbGx5IG5vdCBzdXBwb3NlZCB0byBj YWxsIHRoZXNlIGZ1bmN0aW9uCj4gcG9pbnRlcnMgZGlyZWN0bHkuIEluIGZhY3QsIGl0IGlzIG5v dCBwdWJsaWNhbGx5IGRvY3VtZW50ZWQgYXQgYWxsCj4gd2hhdAo+IEFWQ29kZWNQYXJzZXIuc3Bs aXQgZG9lcy4KPiBBbnl3YXksIHVzZSB0aGUgZXh0cmFjdF9leHRyYWRhdGEgQlNGLiBJdCBpcyB0 aGUgaW50ZW5kZWQgcmVwbGFjZW1lbnQKPiBmb3IgdGhpcyBmZWF0dXJlLiBJdCBpcyBhbHNvIHdo YXQgYXZmb3JtYXRfZmluZF9zdHJlYW1faW5mbygpIHVzZXMgdG8KPiBleHRyYWN0IGV4dHJhZGF0 YSBpbiBjYXNlIHRoZSBjb250YWluZXIgZG9lc24ndCBwcm92aWRlIGFueS4KPiAKPiA+IE9uIE1v biwgMjAyMS0wNC0xOSBhdCAxMToxMCAtMDMwMCwgSmFtZXMgQWxtZXIgd3JvdGU6Cj4gPiA+IEZy b206IEFuZHJlYXMgUmhlaW5oYXJkdCA8YW5kcmVhcy5yaGVpbmhhcmR0QGdtYWlsLmNvbT4KPiA+ ID4gCj4gPiA+IFRoZSByZW1vdmVfZXh0cmFkYXRhIGJzZiBpcyB0aGUgb25seSB1c2VyIG9mIHRo ZXNlIGZ1bmN0aW9ucy4KPiA+ID4gCj4gPiA+IFNpZ25lZC1vZmYtYnk6IEFuZHJlYXMgUmhlaW5o YXJkdCA8YW5kcmVhcy5yaGVpbmhhcmR0QGdtYWlsLmNvbT4KPiA+ID4gLS0tCj4gPiA+IMKgbGli YXZjb2RlYy9NYWtlZmlsZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgNCArLQo+ ID4gPiDCoGxpYmF2Y29kZWMvYXYxX3BhcnNlci5jwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgIDI1 ICstLS0KPiA+ID4gwqBsaWJhdmNvZGVjL2F2czJfcGFyc2VyLmPCoMKgwqDCoMKgwqDCoMKgwqAg fMKgwqAgMSAtCj4gPiA+IMKgbGliYXZjb2RlYy9hdnMzX3BhcnNlci5jwqDCoMKgwqDCoMKgwqDC oMKgIHzCoMKgIDEgLQo+ID4gPiDCoGxpYmF2Y29kZWMvY2F2c19wYXJzZXIuY8KgwqDCoMKgwqDC oMKgwqDCoCB8wqDCoCAxIC0KPiA+ID4gwqBsaWJhdmNvZGVjL2gyNjRfcGFyc2VyLmPCoMKgwqDC oMKgwqDCoMKgwqAgfMKgIDM4IC0tLS0tLQo+ID4gPiDCoGxpYmF2Y29kZWMvaGV2Y19wYXJzZXIu Y8KgwqDCoMKgwqDCoMKgwqDCoCB8wqAgMzQgLS0tLS0KPiA+ID4gwqBsaWJhdmNvZGVjL21wZWc0 dmlkZW9fcGFyc2VyLmPCoMKgwqAgfMKgwqAgMSAtCj4gPiA+IMKgbGliYXZjb2RlYy9tcGVndmlk ZW9fcGFyc2VyLmPCoMKgwqDCoCB8wqAgMTggLS0tCj4gPiA+IMKgbGliYXZjb2RlYy9wYXJzZXIu Y8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgIDE0IC0tLQo+ID4gPiDCoGxpYmF2Y29k ZWMvcmVtb3ZlX2V4dHJhZGF0YV9ic2YuYyB8IDIwMQo+ID4gPiArKysrKysrKysrKysrKysrKysr KysrKysrLS0tCj4gPiA+IC0tCj4gPiA+IMKgbGliYXZjb2RlYy92YzFfcGFyc2VyLmPCoMKgwqDC oMKgwqDCoMKgwqDCoCB8wqAgMTkgLS0tCj4gPiA+IMKgMTIgZmlsZXMgY2hhbmdlZCwgMTcxIGlu c2VydGlvbnMoKyksIDE4NiBkZWxldGlvbnMoLSkKPiA+ID4gCj4gPiA+IGRpZmYgLS1naXQgYS9s aWJhdmNvZGVjL01ha2VmaWxlIGIvbGliYXZjb2RlYy9NYWtlZmlsZQo+ID4gPiBpbmRleCBhNjQw YzU0OGU1Li5jMTlhM2NiNjBkIDEwMDY0NAo+ID4gPiAtLS0gYS9saWJhdmNvZGVjL01ha2VmaWxl Cj4gPiA+ICsrKyBiL2xpYmF2Y29kZWMvTWFrZWZpbGUKPiA+ID4gQEAgLTEwNzUsNyArMTA3NSw3 IEBAIE9CSlMtJChDT05GSUdfQUFDX1BBUlNFUinCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAr PQo+ID4gPiBhYWNfcGFyc2VyLm8gYWFjX2FjM19wYXJzZXIubyBcCj4gPiA+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBtcGVnNGF1ZGlvLm8KPiA+ID4gwqBPQkpTLSQoQ09ORklHX0FDM19Q QVJTRVIpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKz0gYWMzdGFiLm8KPiA+ID4gYWFjX2Fj M19wYXJzZXIubwo+ID4gPiDCoE9CSlMtJChDT05GSUdfQURYX1BBUlNFUinCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCArPSBhZHhfcGFyc2VyLm8gYWR4Lm8KPiA+ID4gLU9CSlMtJChDT05GSUdf QVYxX1BBUlNFUinCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArPSBhdjFfcGFyc2VyLm8KPiA+ ID4gYXYxX3BhcnNlLm8KPiA+ID4gK09CSlMtJChDT05GSUdfQVYxX1BBUlNFUinCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCArPSBhdjFfcGFyc2VyLm8KPiA+ID4gwqBPQkpTLSQoQ09ORklHX0FW UzJfUEFSU0VSKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArPSBhdnMyX3BhcnNlci5vCj4gPiA+ IMKgT0JKUy0kKENPTkZJR19BVlMzX1BBUlNFUinCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKz0g YXZzM19wYXJzZXIubwo+ID4gPiDCoE9CSlMtJChDT05GSUdfQk1QX1BBUlNFUinCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCArPSBibXBfcGFyc2VyLm8KPiA+ID4gQEAgLTExNTksNyArMTE1OSw3 IEBAIE9CSlMtJChDT05GSUdfTlVMTF9CU0YpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgCj4gPiA+ICs9Cj4gPiA+IG51bGxfYnNmLm8KPiA+ID4gwqBPQkpTLSQoQ09ORklHX09Q VVNfTUVUQURBVEFfQlNGKcKgwqDCoMKgwqDCoMKgwqDCoCArPSBvcHVzX21ldGFkYXRhX2JzZi5v Cj4gPiA+IMKgT0JKUy0kKENPTkZJR19QQ01fUkVDSFVOS19CU0YpwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCArPSBwY21fcmVjaHVua19ic2Yubwo+ID4gPiDCoE9CSlMtJChDT05GSUdfUFJPUkVTX01F VEFEQVRBX0JTRinCoMKgwqDCoMKgwqDCoCArPQo+ID4gPiBwcm9yZXNfbWV0YWRhdGFfYnNmLm8K PiA+ID4gLU9CSlMtJChDT05GSUdfUkVNT1ZFX0VYVFJBREFUQV9CU0YpwqDCoMKgwqDCoMKgICs9 Cj4gPiA+IHJlbW92ZV9leHRyYWRhdGFfYnNmLm8KPiA+ID4gK09CSlMtJChDT05GSUdfUkVNT1ZF X0VYVFJBREFUQV9CU0YpwqDCoMKgwqDCoMKgICs9Cj4gPiA+IHJlbW92ZV9leHRyYWRhdGFfYnNm Lm8KPiA+ID4gYXYxX3BhcnNlLm8KPiA+ID4gwqBPQkpTLSQoQ09ORklHX1NFVFRTX0JTRinCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICs9IHNldHRzX2JzZi5vCj4gPiA+IMKgT0JK Uy0kKENPTkZJR19URVhUMk1PVlNVQl9CU0YpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArPSBtb3Zz dWJfYnNmLm8KPiA+ID4gwqBPQkpTLSQoQ09ORklHX1RSQUNFX0hFQURFUlNfQlNGKcKgwqDCoMKg wqDCoMKgwqDCoCArPSB0cmFjZV9oZWFkZXJzX2JzZi5vCj4gPiA+IGRpZmYgLS1naXQgYS9saWJh dmNvZGVjL2F2MV9wYXJzZXIuYyBiL2xpYmF2Y29kZWMvYXYxX3BhcnNlci5jCj4gPiA+IGluZGV4 IDU3OGY1MjkzYzguLmI2YzgwMDRlZTMgMTAwNjQ0Cj4gPiA+IC0tLSBhL2xpYmF2Y29kZWMvYXYx X3BhcnNlci5jCj4gPiA+ICsrKyBiL2xpYmF2Y29kZWMvYXYxX3BhcnNlci5jCj4gPiA+IEBAIC0y MCw3ICsyMCw3IEBACj4gPiA+IMKgICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQo+ID4gPiAwMjExMC0xMzAxIFVTQQo+ID4gPiDC oCAqLwo+ID4gPiDCoAo+ID4gPiAtI2luY2x1ZGUgImF2MV9wYXJzZS5oIgo+ID4gPiArI2luY2x1 ZGUgImxpYmF2dXRpbC9hdmFzc2VydC5oIgo+ID4gPiDCoCNpbmNsdWRlICJjYnMuaCIKPiA+ID4g wqAjaW5jbHVkZSAiY2JzX2F2MS5oIgo+ID4gPiDCoCNpbmNsdWRlICJpbnRlcm5hbC5oIgo+ID4g PiBAQCAtMjA1LDMzICsyMDUsMTAgQEAgc3RhdGljIHZvaWQKPiA+ID4gYXYxX3BhcnNlcl9jbG9z ZShBVkNvZGVjUGFyc2VyQ29udGV4dCAqY3R4KQo+ID4gPiDCoMKgwqDCoCBmZl9jYnNfY2xvc2Uo JnMtPmNiYyk7Cj4gPiA+IMKgfQo+ID4gPiDCoAo+ID4gPiAtc3RhdGljIGludCBhdjFfcGFyc2Vy X3NwbGl0KEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiA+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25zdCB1aW50OF90ICpidWYsIGlu dCBidWZfc2l6ZSkKPiA+ID4gLXsKPiA+ID4gLcKgwqDCoCBBVjFPQlUgb2J1Owo+ID4gPiAtwqDC oMKgIGNvbnN0IHVpbnQ4X3QgKnB0ciA9IGJ1ZiwgKmVuZCA9IGJ1ZiArIGJ1Zl9zaXplOwo+ID4g PiAtCj4gPiA+IC3CoMKgwqAgd2hpbGUgKHB0ciA8IGVuZCkgewo+ID4gPiAtwqDCoMKgwqDCoMKg wqAgaW50IGxlbiA9IGZmX2F2MV9leHRyYWN0X29idSgmb2J1LCBwdHIsIGJ1Zl9zaXplLAo+ID4g PiBhdmN0eCk7Cj4gPiA+IC3CoMKgwqDCoMKgwqDCoCBpZiAobGVuIDwgMCkKPiA+ID4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4gPiA+IC0KPiA+ID4gLcKgwqDCoMKgwqDCoMKgIGlm IChvYnUudHlwZSA9PSBBVjFfT0JVX0ZSQU1FX0hFQURFUiB8fAo+ID4gPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBvYnUudHlwZSA9PSBBVjFfT0JVX0ZSQU1FKSB7Cj4gPiA+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHJldHVybiBwdHIgLSBidWY7Cj4gPiA+IC3CoMKgwqDCoMKgwqDCoCB9Cj4g PiA+IC3CoMKgwqDCoMKgwqDCoCBwdHLCoMKgwqDCoMKgICs9IGxlbjsKPiA+ID4gLcKgwqDCoMKg wqDCoMKgIGJ1Zl9zaXplIC09IGxlbjsKPiA+ID4gLcKgwqDCoCB9Cj4gPiA+IC0KPiA+ID4gLcKg wqDCoCByZXR1cm4gMDsKPiA+ID4gLX0KPiA+ID4gLQo+ID4gPiDCoGNvbnN0IEFWQ29kZWNQYXJz ZXIgZmZfYXYxX3BhcnNlciA9IHsKPiA+ID4gwqDCoMKgwqAgLmNvZGVjX2lkc8KgwqDCoMKgwqAg PSB7IEFWX0NPREVDX0lEX0FWMSB9LAo+ID4gPiDCoMKgwqDCoCAucHJpdl9kYXRhX3NpemUgPSBz aXplb2YoQVYxUGFyc2VDb250ZXh0KSwKPiA+ID4gwqDCoMKgwqAgLnBhcnNlcl9pbml0wqDCoMKg ID0gYXYxX3BhcnNlcl9pbml0LAo+ID4gPiDCoMKgwqDCoCAucGFyc2VyX2Nsb3NlwqDCoCA9IGF2 MV9wYXJzZXJfY2xvc2UsCj4gPiA+IMKgwqDCoMKgIC5wYXJzZXJfcGFyc2XCoMKgID0gYXYxX3Bh cnNlcl9wYXJzZSwKPiA+ID4gLcKgwqDCoCAuc3BsaXTCoMKgwqDCoMKgwqDCoMKgwqAgPSBhdjFf cGFyc2VyX3NwbGl0LAo+ID4gPiDCoH07Cj4gPiA+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2F2 czJfcGFyc2VyLmMgYi9saWJhdmNvZGVjL2F2czJfcGFyc2VyLmMKPiA+ID4gaW5kZXggMDU5ZmFm NzdjNS4uYjdkNWQ3Nzc0ZSAxMDA2NDQKPiA+ID4gLS0tIGEvbGliYXZjb2RlYy9hdnMyX3BhcnNl ci5jCj4gPiA+ICsrKyBiL2xpYmF2Y29kZWMvYXZzMl9wYXJzZXIuYwo+ID4gPiBAQCAtOTEsNSAr OTEsNCBAQCBjb25zdCBBVkNvZGVjUGFyc2VyIGZmX2F2czJfcGFyc2VyID0gewo+ID4gPiDCoMKg wqDCoCAucHJpdl9kYXRhX3NpemUgPSBzaXplb2YoUGFyc2VDb250ZXh0KSwKPiA+ID4gwqDCoMKg wqAgLnBhcnNlcl9wYXJzZcKgwqAgPSBhdnMyX3BhcnNlLAo+ID4gPiDCoMKgwqDCoCAucGFyc2Vy X2Nsb3NlwqDCoCA9IGZmX3BhcnNlX2Nsb3NlLAo+ID4gPiAtwqDCoMKgIC5zcGxpdMKgwqDCoMKg wqDCoMKgwqDCoCA9IGZmX21wZWc0dmlkZW9fc3BsaXQsCj4gPiA+IMKgfTsKPiA+ID4gZGlmZiAt LWdpdCBhL2xpYmF2Y29kZWMvYXZzM19wYXJzZXIuYyBiL2xpYmF2Y29kZWMvYXZzM19wYXJzZXIu Ywo+ID4gPiBpbmRleCBiMGU3MjBhODQ0Li4xYTA1ZWEwNDJlIDEwMDY0NAo+ID4gPiAtLS0gYS9s aWJhdmNvZGVjL2F2czNfcGFyc2VyLmMKPiA+ID4gKysrIGIvbGliYXZjb2RlYy9hdnMzX3BhcnNl ci5jCj4gPiA+IEBAIC0xNzUsNSArMTc1LDQgQEAgY29uc3QgQVZDb2RlY1BhcnNlciBmZl9hdnMz X3BhcnNlciA9IHsKPiA+ID4gwqDCoMKgwqAgLnByaXZfZGF0YV9zaXplID0gc2l6ZW9mKFBhcnNl Q29udGV4dCksCj4gPiA+IMKgwqDCoMKgIC5wYXJzZXJfcGFyc2XCoMKgID0gYXZzM19wYXJzZSwK PiA+ID4gwqDCoMKgwqAgLnBhcnNlcl9jbG9zZcKgwqAgPSBmZl9wYXJzZV9jbG9zZSwKPiA+ID4g LcKgwqDCoCAuc3BsaXTCoMKgwqDCoMKgwqDCoMKgwqAgPSBmZl9tcGVnNHZpZGVvX3NwbGl0LAo+ ID4gPiDCoH07Cj4gPiA+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2NhdnNfcGFyc2VyLmMgYi9s aWJhdmNvZGVjL2NhdnNfcGFyc2VyLmMKPiA+ID4gaW5kZXggMjBhZGNhMWRiYy4uMDNmMzkyYzJl NSAxMDA2NDQKPiA+ID4gLS0tIGEvbGliYXZjb2RlYy9jYXZzX3BhcnNlci5jCj4gPiA+ICsrKyBi L2xpYmF2Y29kZWMvY2F2c19wYXJzZXIuYwo+ID4gPiBAQCAtMTAyLDUgKzEwMiw0IEBAIGNvbnN0 IEFWQ29kZWNQYXJzZXIgZmZfY2F2c3ZpZGVvX3BhcnNlciA9IHsKPiA+ID4gwqDCoMKgwqAgLnBy aXZfZGF0YV9zaXplID0gc2l6ZW9mKFBhcnNlQ29udGV4dCksCj4gPiA+IMKgwqDCoMKgIC5wYXJz ZXJfcGFyc2XCoMKgID0gY2F2c3ZpZGVvX3BhcnNlLAo+ID4gPiDCoMKgwqDCoCAucGFyc2VyX2Ns b3NlwqDCoCA9IGZmX3BhcnNlX2Nsb3NlLAo+ID4gPiAtwqDCoMKgIC5zcGxpdMKgwqDCoMKgwqDC oMKgwqDCoCA9IGZmX21wZWc0dmlkZW9fc3BsaXQsCj4gPiA+IMKgfTsKPiA+ID4gZGlmZiAtLWdp dCBhL2xpYmF2Y29kZWMvaDI2NF9wYXJzZXIuYyBiL2xpYmF2Y29kZWMvaDI2NF9wYXJzZXIuYwo+ ID4gPiBpbmRleCA4ODBjY2I1MGZhLi5kM2M1NmNjMTg4IDEwMDY0NAo+ID4gPiAtLS0gYS9saWJh dmNvZGVjL2gyNjRfcGFyc2VyLmMKPiA+ID4gKysrIGIvbGliYXZjb2RlYy9oMjY0X3BhcnNlci5j Cj4gPiA+IEBAIC02NDQsNDMgKzY0NCw2IEBAIHN0YXRpYyBpbnQgaDI2NF9wYXJzZShBVkNvZGVj UGFyc2VyQ29udGV4dAo+ID4gPiAqcywKPiA+ID4gwqDCoMKgwqAgcmV0dXJuIG5leHQ7Cj4gPiA+ IMKgfQo+ID4gPiDCoAo+ID4gPiAtc3RhdGljIGludCBoMjY0X3NwbGl0KEFWQ29kZWNDb250ZXh0 ICphdmN0eCwKPiA+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBjb25zdCB1aW50OF90ICpidWYsIGludCBidWZfc2l6ZSkKPiA+ID4gLXsKPiA+ID4gLcKgwqDC oCB1aW50MzJfdCBzdGF0ZSA9IC0xOwo+ID4gPiAtwqDCoMKgIGludCBoYXNfc3BzwqDCoMKgID0g MDsKPiA+ID4gLcKgwqDCoCBpbnQgaGFzX3Bwc8KgwqDCoCA9IDA7Cj4gPiA+IC3CoMKgwqAgY29u c3QgdWludDhfdCAqcHRyID0gYnVmLCAqZW5kID0gYnVmICsgYnVmX3NpemU7Cj4gPiA+IC3CoMKg wqAgaW50IG5hbHVfdHlwZTsKPiA+ID4gLQo+ID4gPiAtwqDCoMKgIHdoaWxlIChwdHIgPCBlbmQp IHsKPiA+ID4gLcKgwqDCoMKgwqDCoMKgIHB0ciA9IGF2cHJpdl9maW5kX3N0YXJ0X2NvZGUocHRy LCBlbmQsICZzdGF0ZSk7Cj4gPiA+IC3CoMKgwqDCoMKgwqDCoCBpZiAoKHN0YXRlICYgMHhGRkZG RkYwMCkgIT0gMHgxMDApCj4gPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+ID4g PiAtwqDCoMKgwqDCoMKgwqAgbmFsdV90eXBlID0gc3RhdGUgJiAweDFGOwo+ID4gPiAtwqDCoMKg wqDCoMKgwqAgaWYgKG5hbHVfdHlwZSA9PSBIMjY0X05BTF9TUFMpIHsKPiA+ID4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgaGFzX3NwcyA9IDE7Cj4gPiA+IC3CoMKgwqDCoMKgwqDCoCB9IGVsc2Ug aWYgKG5hbHVfdHlwZSA9PSBIMjY0X05BTF9QUFMpCj4gPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGhhc19wcHMgPSAxOwo+ID4gPiAtwqDCoMKgwqDCoMKgwqAgLyogZWxzZSBpZiAobmFsdV90 eXBlID09IDB4MDEgfHwKPiA+ID4gLcKgwqDCoMKgwqDCoMKgwqAgKsKgwqDCoMKgIG5hbHVfdHlw ZSA9PSAweDAyIHx8Cj4gPiA+IC3CoMKgwqDCoMKgwqDCoMKgICrCoMKgwqDCoCBuYWx1X3R5cGUg PT0gMHgwNSkgewo+ID4gPiAtwqDCoMKgwqDCoMKgwqDCoCAqwqAgfQo+ID4gPiAtwqDCoMKgwqDC oMKgwqDCoCAqLwo+ID4gPiAtwqDCoMKgwqDCoMKgwqAgZWxzZSBpZiAoKG5hbHVfdHlwZSAhPSBI MjY0X05BTF9TRUkgfHwgaGFzX3BwcykgJiYKPiA+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgbmFsdV90eXBlICE9IEgyNjRfTkFMX0FVRCAmJiBuYWx1X3R5cGUgIT0KPiA+ ID4gSDI2NF9OQUxfU1BTX0VYVCAmJgo+ID4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBuYWx1X3R5cGUgIT0gMHgwZikgewo+ID4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBpZiAoaGFzX3Nwcykgewo+ID4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHdo aWxlIChwdHIgLSA0ID4gYnVmICYmIHB0clstNV0gPT0gMCkKPiA+ID4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHB0ci0tOwo+ID4gPiAtwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHJldHVybiBwdHIgLSA0IC0gYnVmOwo+ID4gPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB9Cj4gPiA+IC3CoMKgwqDCoMKgwqDCoCB9Cj4gPiA+IC3CoMKgwqAgfQo+ID4gPiAt Cj4gPiA+IC3CoMKgwqAgcmV0dXJuIDA7Cj4gPiA+IC19Cj4gPiA+IC0KPiA+ID4gwqBzdGF0aWMg dm9pZCBoMjY0X2Nsb3NlKEFWQ29kZWNQYXJzZXJDb250ZXh0ICpzKQo+ID4gPiDCoHsKPiA+ID4g wqDCoMKgwqAgSDI2NFBhcnNlQ29udGV4dCAqcCA9IHMtPnByaXZfZGF0YTsKPiA+ID4gQEAgLTcw OCw1ICs2NzEsNCBAQCBjb25zdCBBVkNvZGVjUGFyc2VyIGZmX2gyNjRfcGFyc2VyID0gewo+ID4g PiDCoMKgwqDCoCAucGFyc2VyX2luaXTCoMKgwqAgPSBpbml0LAo+ID4gPiDCoMKgwqDCoCAucGFy c2VyX3BhcnNlwqDCoCA9IGgyNjRfcGFyc2UsCj4gPiA+IMKgwqDCoMKgIC5wYXJzZXJfY2xvc2XC oMKgID0gaDI2NF9jbG9zZSwKPiA+ID4gLcKgwqDCoCAuc3BsaXTCoMKgwqDCoMKgwqDCoMKgwqAg PSBoMjY0X3NwbGl0LAo+ID4gPiDCoH07Cj4gPiA+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2hl dmNfcGFyc2VyLmMgYi9saWJhdmNvZGVjL2hldmNfcGFyc2VyLmMKPiA+ID4gaW5kZXggMzIwZDRl YjU2Mi4uYzk0NGE2YWFjZCAxMDA2NDQKPiA+ID4gLS0tIGEvbGliYXZjb2RlYy9oZXZjX3BhcnNl ci5jCj4gPiA+ICsrKyBiL2xpYmF2Y29kZWMvaGV2Y19wYXJzZXIuYwo+ID4gPiBAQCAtMzM2LDM5 ICszMzYsNiBAQCBzdGF0aWMgaW50IGhldmNfcGFyc2UoQVZDb2RlY1BhcnNlckNvbnRleHQKPiA+ ID4gKnMsCj4gPiA+IEFWQ29kZWNDb250ZXh0ICphdmN0eCwKPiA+ID4gwqDCoMKgwqAgcmV0dXJu IG5leHQ7Cj4gPiA+IMKgfQo+ID4gPiDCoAo+ID4gPiAtLy8gU3BsaXQgYWZ0ZXIgdGhlIHBhcmFt ZXRlciBzZXRzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmVhbQo+ID4gPiBpZgo+ID4gPiB0 aGV5IGV4aXN0Lgo+ID4gPiAtc3RhdGljIGludCBoZXZjX3NwbGl0KEFWQ29kZWNDb250ZXh0ICph dmN0eCwgY29uc3QgdWludDhfdCAqYnVmLAo+ID4gPiBpbnQKPiA+ID4gYnVmX3NpemUpCj4gPiA+ IC17Cj4gPiA+IC3CoMKgwqAgY29uc3QgdWludDhfdCAqcHRyID0gYnVmLCAqZW5kID0gYnVmICsg YnVmX3NpemU7Cj4gPiA+IC3CoMKgwqAgdWludDMyX3Qgc3RhdGUgPSAtMTsKPiA+ID4gLcKgwqDC oCBpbnQgaGFzX3ZwcyA9IDA7Cj4gPiA+IC3CoMKgwqAgaW50IGhhc19zcHMgPSAwOwo+ID4gPiAt wqDCoMKgIGludCBoYXNfcHBzID0gMDsKPiA+ID4gLcKgwqDCoCBpbnQgbnV0Owo+ID4gPiAtCj4g PiA+IC3CoMKgwqAgd2hpbGUgKHB0ciA8IGVuZCkgewo+ID4gPiAtwqDCoMKgwqDCoMKgwqAgcHRy ID0gYXZwcml2X2ZpbmRfc3RhcnRfY29kZShwdHIsIGVuZCwgJnN0YXRlKTsKPiA+ID4gLcKgwqDC oMKgwqDCoMKgIGlmICgoc3RhdGUgPj4gOCkgIT0gU1RBUlRfQ09ERSkKPiA+ID4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4gPiA+IC3CoMKgwqDCoMKgwqDCoCBudXQgPSAoc3RhdGUg Pj4gMSkgJiAweDNGOwo+ID4gPiAtwqDCoMKgwqDCoMKgwqAgaWYgKG51dCA9PSBIRVZDX05BTF9W UFMpCj4gPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGhhc192cHMgPSAxOwo+ID4gPiAtwqDC oMKgwqDCoMKgwqAgZWxzZSBpZiAobnV0ID09IEhFVkNfTkFMX1NQUykKPiA+ID4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgaGFzX3NwcyA9IDE7Cj4gPiA+IC3CoMKgwqDCoMKgwqDCoCBlbHNlIGlm IChudXQgPT0gSEVWQ19OQUxfUFBTKQo+ID4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBoYXNf cHBzID0gMTsKPiA+ID4gLcKgwqDCoMKgwqDCoMKgIGVsc2UgaWYgKChudXQgIT0gSEVWQ19OQUxf U0VJX1BSRUZJWCB8fCBoYXNfcHBzKSAmJgo+ID4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBudXQgIT0gSEVWQ19OQUxfQVVEKSB7Cj4gPiA+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGlmIChoYXNfdnBzICYmIGhhc19zcHMpIHsKPiA+ID4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB3aGlsZSAocHRyIC0gNCA+IGJ1ZiAmJiBwdHJbLTVdID09IDApCj4gPiA+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwdHItLTsKPiA+ID4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcHRyIC0gNCAtIGJ1ZjsKPiA+ID4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+ID4gPiAtwqDCoMKgwqDCoMKgwqAgfQo+ID4gPiAt wqDCoMKgIH0KPiA+ID4gLcKgwqDCoCByZXR1cm4gMDsKPiA+ID4gLX0KPiA+ID4gLQo+ID4gPiDC oHN0YXRpYyB2b2lkIGhldmNfcGFyc2VyX2Nsb3NlKEFWQ29kZWNQYXJzZXJDb250ZXh0ICpzKQo+ ID4gPiDCoHsKPiA+ID4gwqDCoMKgwqAgSEVWQ1BhcnNlckNvbnRleHQgKmN0eCA9IHMtPnByaXZf ZGF0YTsKPiA+ID4gQEAgLTM4NSw1ICszNTIsNCBAQCBjb25zdCBBVkNvZGVjUGFyc2VyIGZmX2hl dmNfcGFyc2VyID0gewo+ID4gPiDCoMKgwqDCoCAucHJpdl9kYXRhX3NpemUgPSBzaXplb2YoSEVW Q1BhcnNlckNvbnRleHQpLAo+ID4gPiDCoMKgwqDCoCAucGFyc2VyX3BhcnNlwqDCoCA9IGhldmNf cGFyc2UsCj4gPiA+IMKgwqDCoMKgIC5wYXJzZXJfY2xvc2XCoMKgID0gaGV2Y19wYXJzZXJfY2xv c2UsCj4gPiA+IC3CoMKgwqAgLnNwbGl0wqDCoMKgwqDCoMKgwqDCoMKgID0gaGV2Y19zcGxpdCwK PiA+ID4gwqB9Owo+ID4gPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9tcGVnNHZpZGVvX3BhcnNl ci5jCj4gPiA+IGIvbGliYXZjb2RlYy9tcGVnNHZpZGVvX3BhcnNlci5jCj4gPiA+IGluZGV4IGFm YTEwYzc3MjcuLjFiMGUyNTU1ZGEgMTAwNjQ0Cj4gPiA+IC0tLSBhL2xpYmF2Y29kZWMvbXBlZzR2 aWRlb19wYXJzZXIuYwo+ID4gPiArKysgYi9saWJhdmNvZGVjL21wZWc0dmlkZW9fcGFyc2VyLmMK PiA+ID4gQEAgLTE1OSw1ICsxNTksNCBAQCBjb25zdCBBVkNvZGVjUGFyc2VyIGZmX21wZWc0dmlk ZW9fcGFyc2VyID0gewo+ID4gPiDCoMKgwqDCoCAucGFyc2VyX2luaXTCoMKgwqAgPSBtcGVnNHZp ZGVvX3BhcnNlX2luaXQsCj4gPiA+IMKgwqDCoMKgIC5wYXJzZXJfcGFyc2XCoMKgID0gbXBlZzR2 aWRlb19wYXJzZSwKPiA+ID4gwqDCoMKgwqAgLnBhcnNlcl9jbG9zZcKgwqAgPSBmZl9wYXJzZV9j bG9zZSwKPiA+ID4gLcKgwqDCoCAuc3BsaXTCoMKgwqDCoMKgwqDCoMKgwqAgPSBmZl9tcGVnNHZp ZGVvX3NwbGl0LAo+ID4gPiDCoH07Cj4gPiA+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL21wZWd2 aWRlb19wYXJzZXIuYwo+ID4gPiBiL2xpYmF2Y29kZWMvbXBlZ3ZpZGVvX3BhcnNlci5jCj4gPiA+ IGluZGV4IDRlNGY1NjliMTMuLjc4NjQyMjQ2NDMgMTAwNjQ0Cj4gPiA+IC0tLSBhL2xpYmF2Y29k ZWMvbXBlZ3ZpZGVvX3BhcnNlci5jCj4gPiA+ICsrKyBiL2xpYmF2Y29kZWMvbXBlZ3ZpZGVvX3Bh cnNlci5jCj4gPiA+IEBAIC0yMTMsMjMgKzIxMyw2IEBAIHN0YXRpYyBpbnQKPiA+ID4gbXBlZ3Zp ZGVvX3BhcnNlKEFWQ29kZWNQYXJzZXJDb250ZXh0Cj4gPiA+ICpzLAo+ID4gPiDCoMKgwqDCoCBy ZXR1cm4gbmV4dDsKPiA+ID4gwqB9Cj4gPiA+IMKgCj4gPiA+IC1zdGF0aWMgaW50IG1wZWd2aWRl b19zcGxpdChBVkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgaW50 IGJ1Zl9zaXplKQo+ID4gPiAtewo+ID4gPiAtwqDCoMKgIGludCBpOwo+ID4gPiAtwqDCoMKgIHVp bnQzMl90IHN0YXRlPSAtMTsKPiA+ID4gLcKgwqDCoCBpbnQgZm91bmQ9MDsKPiA+ID4gLQo+ID4g PiAtwqDCoMKgIGZvcihpPTA7IGk8YnVmX3NpemU7IGkrKyl7Cj4gPiA+IC3CoMKgwqDCoMKgwqDC oCBzdGF0ZT0gKHN0YXRlPDw4KSB8IGJ1ZltpXTsKPiA+ID4gLcKgwqDCoMKgwqDCoMKgIGlmKHN0 YXRlID09IDB4MUIzKXsKPiA+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZm91bmQ9MTsKPiA+ ID4gLcKgwqDCoMKgwqDCoMKgIH1lbHNlIGlmKGZvdW5kICYmIHN0YXRlICE9IDB4MUI1ICYmIHN0 YXRlIDwgMHgyMDAgJiYKPiA+ID4gc3RhdGUKPiA+ID4gPiA9IDB4MTAwKQo+ID4gPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gaS0zOwo+ID4gPiAtwqDCoMKgIH0KPiA+ID4gLcKgwqDC oCByZXR1cm4gMDsKPiA+ID4gLX0KPiA+ID4gLQo+ID4gPiDCoHN0YXRpYyBpbnQgbXBlZ3ZpZGVv X3BhcnNlX2luaXQoQVZDb2RlY1BhcnNlckNvbnRleHQgKnMpCj4gPiA+IMKgewo+ID4gPiDCoMKg wqDCoCBzLT5waWN0X3R5cGUgPSBBVl9QSUNUVVJFX1RZUEVfTk9ORTsgLy8gZmlyc3QgZnJhbWUg bWlnaHQgYmUKPiA+ID4gcGFydGlhbAo+ID4gPiBAQCAtMjQyLDUgKzIyNSw0IEBAIGNvbnN0IEFW Q29kZWNQYXJzZXIgZmZfbXBlZ3ZpZGVvX3BhcnNlciA9IHsKPiA+ID4gwqDCoMKgwqAgLnBhcnNl cl9pbml0wqDCoMKgID0gbXBlZ3ZpZGVvX3BhcnNlX2luaXQsCj4gPiA+IMKgwqDCoMKgIC5wYXJz ZXJfcGFyc2XCoMKgID0gbXBlZ3ZpZGVvX3BhcnNlLAo+ID4gPiDCoMKgwqDCoCAucGFyc2VyX2Ns b3NlwqDCoCA9IGZmX3BhcnNlX2Nsb3NlLAo+ID4gPiAtwqDCoMKgIC5zcGxpdMKgwqDCoMKgwqDC oMKgwqDCoCA9IG1wZWd2aWRlb19zcGxpdCwKPiA+ID4gwqB9Owo+ID4gPiBkaWZmIC0tZ2l0IGEv bGliYXZjb2RlYy9wYXJzZXIuYyBiL2xpYmF2Y29kZWMvcGFyc2VyLmMKPiA+ID4gaW5kZXggZjgx YTYyZDU5Mi4uZmM1NzI0Njk2NSAxMDA2NDQKPiA+ID4gLS0tIGEvbGliYXZjb2RlYy9wYXJzZXIu Ywo+ID4gPiArKysgYi9saWJhdmNvZGVjL3BhcnNlci5jCj4gPiA+IEBAIC0yODUsMTcgKzI4NSwz IEBAIHZvaWQgZmZfcGFyc2VfY2xvc2UoQVZDb2RlY1BhcnNlckNvbnRleHQgKnMpCj4gPiA+IMKg Cj4gPiA+IMKgwqDCoMKgIGF2X2ZyZWVwKCZwYy0+YnVmZmVyKTsKPiA+ID4gwqB9Cj4gPiA+IC0K PiA+ID4gLWludCBmZl9tcGVnNHZpZGVvX3NwbGl0KEFWQ29kZWNDb250ZXh0ICphdmN0eCwgY29u c3QgdWludDhfdAo+ID4gPiAqYnVmLAo+ID4gPiBpbnQgYnVmX3NpemUpCj4gPiA+IC17Cj4gPiA+ IC3CoMKgwqAgdWludDMyX3Qgc3RhdGUgPSAtMTsKPiA+ID4gLcKgwqDCoCBjb25zdCB1aW50OF90 ICpwdHIgPSBidWYsICplbmQgPSBidWYgKyBidWZfc2l6ZTsKPiA+ID4gLQo+ID4gPiAtwqDCoMKg IHdoaWxlIChwdHIgPCBlbmQpIHsKPiA+ID4gLcKgwqDCoMKgwqDCoMKgIHB0ciA9IGF2cHJpdl9m aW5kX3N0YXJ0X2NvZGUocHRyLCBlbmQsICZzdGF0ZSk7Cj4gPiA+IC3CoMKgwqDCoMKgwqDCoCBp ZiAoc3RhdGUgPT0gMHgxQjMgfHwgc3RhdGUgPT0gMHgxQjYpCj4gPiA+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHJldHVybiBwdHIgLSA0IC0gYnVmOwo+ID4gPiAtwqDCoMKgIH0KPiA+ID4gLQo+ ID4gPiAtwqDCoMKgIHJldHVybiAwOwo+ID4gPiAtfQo+ID4gPiBkaWZmIC0tZ2l0IGEvbGliYXZj b2RlYy9yZW1vdmVfZXh0cmFkYXRhX2JzZi5jCj4gPiA+IGIvbGliYXZjb2RlYy9yZW1vdmVfZXh0 cmFkYXRhX2JzZi5jCj4gPiA+IGluZGV4IDU3ODNiMDc1ZjAuLjFkNWYxOTNmODkgMTAwNjQ0Cj4g PiA+IC0tLSBhL2xpYmF2Y29kZWMvcmVtb3ZlX2V4dHJhZGF0YV9ic2YuYwo+ID4gPiArKysgYi9s aWJhdmNvZGVjL3JlbW92ZV9leHRyYWRhdGFfYnNmLmMKPiA+ID4gQEAgLTIxLDkgKzIxLDEzIEBA Cj4gPiA+IMKgI2luY2x1ZGUgImxpYmF2dXRpbC9sb2cuaCIKPiA+ID4gwqAjaW5jbHVkZSAibGli YXZ1dGlsL29wdC5oIgo+ID4gPiDCoAo+ID4gPiAtI2luY2x1ZGUgImF2Y29kZWMuaCIKPiA+ID4g KyNpbmNsdWRlICJhdjFfcGFyc2UuaCIKPiA+ID4gwqAjaW5jbHVkZSAiYnNmLmgiCj4gPiA+IMKg I2luY2x1ZGUgImJzZl9pbnRlcm5hbC5oIgo+ID4gPiArI2luY2x1ZGUgImgyNjQuaCIKPiA+ID4g KyNpbmNsdWRlICJoZXZjLmgiCj4gPiA+ICsjaW5jbHVkZSAiaW50ZXJuYWwuaCIKPiA+ID4gKyNp bmNsdWRlICJ2YzFfY29tbW9uLmgiCj4gPiA+IMKgCj4gPiA+IMKgZW51bSBSZW1vdmVGcmVxIHsK PiA+ID4gwqDCoMKgwqAgUkVNT1ZFX0ZSRVFfS0VZRlJBTUUsCj4gPiA+IEBAIC0zMSw2MyArMzUs MTk2IEBAIGVudW0gUmVtb3ZlRnJlcSB7Cj4gPiA+IMKgwqDCoMKgIFJFTU9WRV9GUkVRX05PTktF WUZSQU1FLAo+ID4gPiDCoH07Cj4gPiA+IMKgCj4gPiA+ICsjZGVmaW5lIFNUQVJUX0NPREUgMHgw MDAwMDEKPiA+ID4gKwo+ID4gPiDCoHR5cGVkZWYgc3RydWN0IFJlbW92ZUV4dHJhZGF0YUNvbnRl eHQgewo+ID4gPiDCoMKgwqDCoCBjb25zdCBBVkNsYXNzICpjbGFzczsKPiA+ID4gwqDCoMKgwqAg aW50IGZyZXE7Cj4gPiA+IC0KPiA+ID4gLcKgwqDCoCBBVkNvZGVjUGFyc2VyQ29udGV4dCAqcGFy c2VyOwo+ID4gPiAtwqDCoMKgIEFWQ29kZWNDb250ZXh0ICphdmN0eDsKPiA+ID4gwqB9IFJlbW92 ZUV4dHJhZGF0YUNvbnRleHQ7Cj4gPiA+IMKgCj4gPiA+IC1zdGF0aWMgaW50IHJlbW92ZV9leHRy YWRhdGEoQVZCU0ZDb250ZXh0ICpjdHgsIEFWUGFja2V0ICpwa3QpCj4gPiA+ICtzdGF0aWMgaW50 IGF2MV9zcGxpdChjb25zdCB1aW50OF90ICpidWYsIGludCBidWZfc2l6ZSwgdm9pZAo+ID4gPiAq bG9nY3R4KQo+ID4gPiDCoHsKPiA+ID4gLcKgwqDCoCBSZW1vdmVFeHRyYWRhdGFDb250ZXh0ICpz ID0gY3R4LT5wcml2X2RhdGE7Cj4gPiA+ICvCoMKgwqAgQVYxT0JVIG9idTsKPiA+ID4gK8KgwqDC oCBjb25zdCB1aW50OF90ICpwdHIgPSBidWYsICplbmQgPSBidWYgKyBidWZfc2l6ZTsKPiA+ID4g wqAKPiA+ID4gLcKgwqDCoCBpbnQgcmV0Owo+ID4gPiArwqDCoMKgIHdoaWxlIChwdHIgPCBlbmQp IHsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgIGludCBsZW4gPSBmZl9hdjFfZXh0cmFjdF9vYnUoJm9i dSwgcHRyLCBidWZfc2l6ZSwKPiA+ID4gbG9nY3R4KTsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgIGlm IChsZW4gPCAwKQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPiA+ID4gwqAK PiA+ID4gLcKgwqDCoCByZXQgPSBmZl9ic2ZfZ2V0X3BhY2tldF9yZWYoY3R4LCBwa3QpOwo+ID4g PiAtwqDCoMKgIGlmIChyZXQgPCAwKQo+ID4gPiAtwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsK PiA+ID4gK8KgwqDCoMKgwqDCoMKgIGlmIChvYnUudHlwZSA9PSBBVjFfT0JVX0ZSQU1FX0hFQURF UiB8fAo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBvYnUudHlwZSA9PSBBVjFfT0JVX0ZS QU1FKSB7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBwdHIgLSBidWY7Cj4g PiA+ICvCoMKgwqDCoMKgwqDCoCB9Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoCBwdHLCoMKgwqDCoMKg ICs9IGxlbjsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgIGJ1Zl9zaXplIC09IGxlbjsKPiA+ID4gK8Kg wqDCoCB9Cj4gPiA+ICsKPiA+ID4gK8KgwqDCoCByZXR1cm4gMDsKPiA+ID4gK30KPiA+ID4gwqAK PiA+ID4gLcKgwqDCoCBpZiAocy0+cGFyc2VyICYmIHMtPnBhcnNlci0+cGFyc2VyLT5zcGxpdCkg ewo+ID4gPiAtwqDCoMKgwqDCoMKgwqAgaWYgKHMtPmZyZXEgPT0gUkVNT1ZFX0ZSRVFfQUxMIHx8 Cj4gPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChzLT5mcmVxID09IFJFTU9WRV9GUkVRX05P TktFWUZSQU1FICYmICEocGt0LT5mbGFncwo+ID4gPiAmCj4gPiA+IEFWX1BLVF9GTEFHX0tFWSkp IHx8Cj4gPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChzLT5mcmVxID09IFJFTU9WRV9GUkVR X0tFWUZSQU1FICYmIHBrdC0+ZmxhZ3MgJgo+ID4gPiBBVl9QS1RfRkxBR19LRVkpKSB7Cj4gPiA+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludCBpID0gcy0+cGFyc2VyLT5wYXJzZXItPnNwbGl0 KHMtPmF2Y3R4LCBwa3QtCj4gPiA+ID5kYXRhLAo+ID4gPiBwa3QtPnNpemUpOwo+ID4gPiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBwa3QtPmRhdGEgKz0gaTsKPiA+ID4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgcGt0LT5zaXplIC09IGk7Cj4gPiA+ICtzdGF0aWMgaW50IGgyNjRfc3BsaXQoY29u c3QgdWludDhfdCAqYnVmLCBpbnQgYnVmX3NpemUpCj4gPiA+ICt7Cj4gPiA+ICvCoMKgwqAgY29u c3QgdWludDhfdCAqcHRyID0gYnVmLCAqZW5kID0gYnVmICsgYnVmX3NpemU7Cj4gPiA+ICvCoMKg wqAgdWludDMyX3Qgc3RhdGUgPSAtMTsKPiA+ID4gK8KgwqDCoCBpbnQgaGFzX3Nwc8KgwqDCoCA9 IDA7Cj4gPiA+ICvCoMKgwqAgaW50IGhhc19wcHPCoMKgwqAgPSAwOwo+ID4gPiArwqDCoMKgIGlu dCBuYWx1X3R5cGU7Cj4gPiA+ICsKPiA+ID4gK8KgwqDCoCB3aGlsZSAocHRyIDwgZW5kKSB7Cj4g PiA+ICvCoMKgwqDCoMKgwqDCoCBwdHIgPSBhdnByaXZfZmluZF9zdGFydF9jb2RlKHB0ciwgZW5k LCAmc3RhdGUpOwo+ID4gPiArwqDCoMKgwqDCoMKgwqAgaWYgKChzdGF0ZSAmIDB4RkZGRkZGMDAp ICE9IDB4MTAwKQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPiA+ID4gK8Kg wqDCoMKgwqDCoMKgIG5hbHVfdHlwZSA9IHN0YXRlICYgMHgxRjsKPiA+ID4gK8KgwqDCoMKgwqDC oMKgIGlmIChuYWx1X3R5cGUgPT0gSDI2NF9OQUxfU1BTKSB7Cj4gPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGhhc19zcHMgPSAxOwo+ID4gPiArwqDCoMKgwqDCoMKgwqAgfSBlbHNlIGlmIChu YWx1X3R5cGUgPT0gSDI2NF9OQUxfUFBTKQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBo YXNfcHBzID0gMTsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgIC8qIGVsc2UgaWYgKG5hbHVfdHlwZSA9 PSAweDAxIHx8Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgICrCoMKgwqDCoCBuYWx1X3R5cGUgPT0g MHgwMiB8fAo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoCAqwqDCoMKgwqAgbmFsdV90eXBlID09IDB4 MDUpIHsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqAgKsKgIH0KPiA+ID4gK8KgwqDCoMKgwqDCoMKg wqAgKi8KPiA+ID4gK8KgwqDCoMKgwqDCoMKgIGVsc2UgaWYgKChuYWx1X3R5cGUgIT0gSDI2NF9O QUxfU0VJIHx8IGhhc19wcHMpICYmCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIG5hbHVfdHlwZSAhPSBIMjY0X05BTF9BVUQgJiYgbmFsdV90eXBlICE9Cj4gPiA+IEgy NjRfTkFMX1NQU19FWFQgJiYKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgbmFsdV90eXBlICE9IDB4MGYpIHsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYg KGhhc19zcHMpIHsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB3aGlsZSAo cHRyIC0gNCA+IGJ1ZiAmJiBwdHJbLTVdID09IDApCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBwdHItLTsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCByZXR1cm4gcHRyIC0gNCAtIGJ1ZjsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgfQo+ID4gPiDCoMKgwqDCoMKgwqDCoMKgIH0KPiA+ID4gwqDCoMKgwqAgfQo+ID4gPiDCoAo+ ID4gPiDCoMKgwqDCoCByZXR1cm4gMDsKPiA+ID4gwqB9Cj4gPiA+IMKgCj4gPiA+IC1zdGF0aWMg aW50IHJlbW92ZV9leHRyYWRhdGFfaW5pdChBVkJTRkNvbnRleHQgKmN0eCkKPiA+ID4gKy8vIFNw bGl0IGFmdGVyIHRoZSBwYXJhbWV0ZXIgc2V0cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJl YW0KPiA+ID4gaWYKPiA+ID4gdGhleSBleGlzdC4KPiA+ID4gK3N0YXRpYyBpbnQgaGV2Y19zcGxp dChjb25zdCB1aW50OF90ICpidWYsIGludCBidWZfc2l6ZSkKPiA+ID4gwqB7Cj4gPiA+IC3CoMKg wqAgUmVtb3ZlRXh0cmFkYXRhQ29udGV4dCAqcyA9IGN0eC0+cHJpdl9kYXRhOwo+ID4gPiAtwqDC oMKgIGludCByZXQ7Cj4gPiA+ICvCoMKgwqAgY29uc3QgdWludDhfdCAqcHRyID0gYnVmLCAqZW5k ID0gYnVmICsgYnVmX3NpemU7Cj4gPiA+ICvCoMKgwqAgdWludDMyX3Qgc3RhdGUgPSAtMTsKPiA+ ID4gK8KgwqDCoCBpbnQgaGFzX3ZwcyA9IDA7Cj4gPiA+ICvCoMKgwqAgaW50IGhhc19zcHMgPSAw Owo+ID4gPiArwqDCoMKgIGludCBoYXNfcHBzID0gMDsKPiA+ID4gK8KgwqDCoCBpbnQgbnV0Owo+ ID4gPiArCj4gPiA+ICvCoMKgwqAgd2hpbGUgKHB0ciA8IGVuZCkgewo+ID4gPiArwqDCoMKgwqDC oMKgwqAgcHRyID0gYXZwcml2X2ZpbmRfc3RhcnRfY29kZShwdHIsIGVuZCwgJnN0YXRlKTsKPiA+ ID4gK8KgwqDCoMKgwqDCoMKgIGlmICgoc3RhdGUgPj4gOCkgIT0gU1RBUlRfQ09ERSkKPiA+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoCBudXQg PSAoc3RhdGUgPj4gMSkgJiAweDNGOwo+ID4gPiArwqDCoMKgwqDCoMKgwqAgaWYgKG51dCA9PSBI RVZDX05BTF9WUFMpCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGhhc192cHMgPSAxOwo+ ID4gPiArwqDCoMKgwqDCoMKgwqAgZWxzZSBpZiAobnV0ID09IEhFVkNfTkFMX1NQUykKPiA+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaGFzX3NwcyA9IDE7Cj4gPiA+ICvCoMKgwqDCoMKgwqDC oCBlbHNlIGlmIChudXQgPT0gSEVWQ19OQUxfUFBTKQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBoYXNfcHBzID0gMTsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgIGVsc2UgaWYgKChudXQgIT0g SEVWQ19OQUxfU0VJX1BSRUZJWCB8fCBoYXNfcHBzKSAmJgo+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBudXQgIT0gSEVWQ19OQUxfQVVEKSB7Cj4gPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGlmIChoYXNfdnBzICYmIGhhc19zcHMpIHsKPiA+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB3aGlsZSAocHRyIC0gNCA+IGJ1ZiAmJiBwdHJbLTVdID09 IDApCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwdHItLTsK PiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcHRyIC0gNCAtIGJ1 ZjsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+ID4gPiArwqDCoMKgwqDCoMKgwqAg fQo+ID4gPiArwqDCoMKgIH0KPiA+ID4gK8KgwqDCoCByZXR1cm4gMDsKPiA+ID4gK30KPiA+ID4g wqAKPiA+ID4gLcKgwqDCoCBzLT5wYXJzZXIgPSBhdl9wYXJzZXJfaW5pdChjdHgtPnBhcl9pbi0+ Y29kZWNfaWQpOwo+ID4gPiArc3RhdGljIGludCBtcGVndmlkZW9fc3BsaXQoY29uc3QgdWludDhf dCAqYnVmLCBpbnQgYnVmX3NpemUpCj4gPiA+ICt7Cj4gPiA+ICvCoMKgwqAgdWludDMyX3Qgc3Rh dGUgPSAtMTsKPiA+ID4gK8KgwqDCoCBpbnQgZm91bmQgPSAwOwo+ID4gPiArCj4gPiA+ICvCoMKg wqAgZm9yIChpbnQgaSA9IDA7IGkgPCBidWZfc2l6ZTsgaSsrKSB7Cj4gPiA+ICvCoMKgwqDCoMKg wqDCoCBzdGF0ZSA9IChzdGF0ZSA8PCA4KSB8IGJ1ZltpXTsKPiA+ID4gK8KgwqDCoMKgwqDCoMKg IGlmIChzdGF0ZSA9PSAweDFCMykgewo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmb3Vu ZCA9IDE7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoCB9IGVsc2UgaWYgKGZvdW5kICYmIHN0YXRlICE9 IDB4MUI1ICYmIHN0YXRlIDwgMHgyMDAgJiYKPiA+ID4gc3RhdGUKPiA+ID4gPiA9IDB4MTAwKQo+ ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gaSAtIDM7Cj4gPiA+ICvCoMKgwqAg fQo+ID4gPiArwqDCoMKgIHJldHVybiAwOwo+ID4gPiArfQo+ID4gPiDCoAo+ID4gPiAtwqDCoMKg IGlmIChzLT5wYXJzZXIpIHsKPiA+ID4gLcKgwqDCoMKgwqDCoMKgIHMtPmF2Y3R4ID0gYXZjb2Rl Y19hbGxvY19jb250ZXh0MyhOVUxMKTsKPiA+ID4gLcKgwqDCoMKgwqDCoMKgIGlmICghcy0+YXZj dHgpCj4gPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7 Cj4gPiA+ICtzdGF0aWMgaW50IG1wZWc0dmlkZW9fc3BsaXQoY29uc3QgdWludDhfdCAqYnVmLCBp bnQgYnVmX3NpemUpCj4gPiA+ICt7Cj4gPiA+ICvCoMKgwqAgY29uc3QgdWludDhfdCAqcHRyID0g YnVmLCAqZW5kID0gYnVmICsgYnVmX3NpemU7Cj4gPiA+ICvCoMKgwqAgdWludDMyX3Qgc3RhdGUg PSAtMTsKPiA+ID4gwqAKPiA+ID4gLcKgwqDCoMKgwqDCoMKgIHJldCA9IGF2Y29kZWNfcGFyYW1l dGVyc190b19jb250ZXh0KHMtPmF2Y3R4LCBjdHgtCj4gPiA+ID5wYXJfaW4pOwo+ID4gPiAtwqDC oMKgwqDCoMKgwqAgaWYgKHJldCA8IDApCj4gPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJl dHVybiByZXQ7Cj4gPiA+ICvCoMKgwqAgd2hpbGUgKHB0ciA8IGVuZCkgewo+ID4gPiArwqDCoMKg wqDCoMKgwqAgcHRyID0gYXZwcml2X2ZpbmRfc3RhcnRfY29kZShwdHIsIGVuZCwgJnN0YXRlKTsK PiA+ID4gK8KgwqDCoMKgwqDCoMKgIGlmIChzdGF0ZSA9PSAweDFCMyB8fCBzdGF0ZSA9PSAweDFC NikKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHB0ciAtIDQgLSBidWY7Cj4g PiA+IMKgwqDCoMKgIH0KPiA+ID4gwqAKPiA+ID4gwqDCoMKgwqAgcmV0dXJuIDA7Cj4gPiA+IMKg fQo+ID4gPiDCoAo+ID4gPiAtc3RhdGljIHZvaWQgcmVtb3ZlX2V4dHJhZGF0YV9jbG9zZShBVkJT RkNvbnRleHQgKmN0eCkKPiA+ID4gK3N0YXRpYyBpbnQgdmMxX3NwbGl0KGNvbnN0IHVpbnQ4X3Qg KmJ1ZiwgaW50IGJ1Zl9zaXplKQo+ID4gPiArewo+ID4gPiArwqDCoMKgIGNvbnN0IHVpbnQ4X3Qg KnB0ciA9IGJ1ZiwgKmVuZCA9IGJ1ZiArIGJ1Zl9zaXplOwo+ID4gPiArwqDCoMKgIHVpbnQzMl90 IHN0YXRlID0gLTE7Cj4gPiA+ICvCoMKgwqAgaW50IGNoYXJnZWQgPSAwOwo+ID4gPiArCj4gPiA+ ICvCoMKgwqAgd2hpbGUgKHB0ciA8IGVuZCkgewo+ID4gPiArwqDCoMKgwqDCoMKgwqAgcHRyID0g YXZwcml2X2ZpbmRfc3RhcnRfY29kZShwdHIsIGVuZCwgJnN0YXRlKTsKPiA+ID4gK8KgwqDCoMKg wqDCoMKgIGlmIChzdGF0ZSA9PSBWQzFfQ09ERV9TRVFIRFIgfHwgc3RhdGUgPT0KPiA+ID4gVkMx X0NPREVfRU5UUllQT0lOVCkgewo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjaGFyZ2Vk ID0gMTsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgIH0gZWxzZSBpZiAoY2hhcmdlZCAmJiBJU19NQVJL RVIoc3RhdGUpKQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcHRyIC0gNCAt IGJ1ZjsKPiA+ID4gK8KgwqDCoCB9Cj4gPiA+ICsKPiA+ID4gK8KgwqDCoCByZXR1cm4gMDsKPiA+ ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIGludCByZW1vdmVfZXh0cmFkYXRhKEFWQlNGQ29u dGV4dCAqY3R4LCBBVlBhY2tldCAqcGt0KQo+ID4gPiDCoHsKPiA+ID4gwqDCoMKgwqAgUmVtb3Zl RXh0cmFkYXRhQ29udGV4dCAqcyA9IGN0eC0+cHJpdl9kYXRhOwo+ID4gPiDCoAo+ID4gPiAtwqDC oMKgIGF2Y29kZWNfZnJlZV9jb250ZXh0KCZzLT5hdmN0eCk7Cj4gPiA+IC3CoMKgwqAgYXZfcGFy c2VyX2Nsb3NlKHMtPnBhcnNlcik7Cj4gPiA+ICvCoMKgwqAgaW50IHJldDsKPiA+ID4gKwo+ID4g PiArwqDCoMKgIHJldCA9IGZmX2JzZl9nZXRfcGFja2V0X3JlZihjdHgsIHBrdCk7Cj4gPiA+ICvC oMKgwqAgaWYgKHJldCA8IDApCj4gPiA+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+ID4g PiArCj4gPiA+ICvCoMKgwqAgaWYgKHMtPmZyZXEgPT0gUkVNT1ZFX0ZSRVFfQUxMIHx8Cj4gPiA+ ICvCoMKgwqDCoMKgwqDCoCAocy0+ZnJlcSA9PSBSRU1PVkVfRlJFUV9OT05LRVlGUkFNRSAmJiAh KHBrdC0+ZmxhZ3MgJgo+ID4gPiBBVl9QS1RfRkxBR19LRVkpKSB8fAo+ID4gPiArwqDCoMKgwqDC oMKgwqAgKHMtPmZyZXEgPT0gUkVNT1ZFX0ZSRVFfS0VZRlJBTUUgJiYgcGt0LT5mbGFncyAmCj4g PiA+IEFWX1BLVF9GTEFHX0tFWSkpIHsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgIGludCBpOwo+ID4g PiArCj4gPiA+ICvCoMKgwqDCoMKgwqDCoCBzd2l0Y2ggKGN0eC0+cGFyX2luLT5jb2RlY19pZCkg ewo+ID4gPiArwqDCoMKgwqDCoMKgwqAgY2FzZSBBVl9DT0RFQ19JRF9BVjE6Cj4gPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGkgPSBhdjFfc3BsaXQocGt0LT5kYXRhLCBwa3QtPnNpemUsIGN0 eCk7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+ID4gPiArwqDCoMKgwqDC oMKgwqAgY2FzZSBBVl9DT0RFQ19JRF9BVlMyOgo+ID4gPiArwqDCoMKgwqDCoMKgwqAgY2FzZSBB Vl9DT0RFQ19JRF9BVlMzOgo+ID4gPiArwqDCoMKgwqDCoMKgwqAgY2FzZSBBVl9DT0RFQ19JRF9D QVZTOgo+ID4gPiArwqDCoMKgwqDCoMKgwqAgY2FzZSBBVl9DT0RFQ19JRF9NUEVHNDoKPiA+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaSA9IG1wZWc0dmlkZW9fc3BsaXQocGt0LT5kYXRhLCBw a3QtPnNpemUpOwo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPiA+ID4gK8Kg wqDCoMKgwqDCoMKgIGNhc2UgQVZfQ09ERUNfSURfSDI2NDoKPiA+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgaSA9IGgyNjRfc3BsaXQocGt0LT5kYXRhLCBwa3QtPnNpemUpOwo+ID4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgIGNhc2UgQVZf Q09ERUNfSURfSEVWQzoKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaSA9IGhldmNfc3Bs aXQocGt0LT5kYXRhLCBwa3QtPnNpemUpOwo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBi cmVhazsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgIGNhc2UgQVZfQ09ERUNfSURfTVBFRzFWSURFTzoK PiA+ID4gK8KgwqDCoMKgwqDCoMKgIGNhc2UgQVZfQ09ERUNfSURfTVBFRzJWSURFTzoKPiA+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaSA9IG1wZWd2aWRlb19zcGxpdChwa3QtPmRhdGEsIHBr dC0+c2l6ZSk7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+ID4gPiArwqDC oMKgwqDCoMKgwqAgY2FzZSBBVl9DT0RFQ19JRF9WQzE6Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGkgPSB2YzFfc3BsaXQocGt0LT5kYXRhLCBwa3QtPnNpemUpOwo+ID4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgIGRlZmF1bHQ6Cj4g PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGkgPSAwOwo+ID4gPiArwqDCoMKgwqDCoMKgwqAg fQo+ID4gPiArCj4gPiA+ICvCoMKgwqDCoMKgwqDCoCBwa3QtPmRhdGEgKz0gaTsKPiA+ID4gK8Kg wqDCoMKgwqDCoMKgIHBrdC0+c2l6ZSAtPSBpOwo+ID4gPiArwqDCoMKgIH0KPiA+ID4gKwo+ID4g PiArwqDCoMKgIHJldHVybiAwOwo+ID4gPiDCoH0KPiA+ID4gwqAKPiA+ID4gwqAjZGVmaW5lIE9G RlNFVCh4KSBvZmZzZXRvZihSZW1vdmVFeHRyYWRhdGFDb250ZXh0LCB4KQo+ID4gPiBAQCAtMTEy LDcgKzI0OSw1IEBAIGNvbnN0IEFWQml0U3RyZWFtRmlsdGVyCj4gPiA+IGZmX3JlbW92ZV9leHRy YWRhdGFfYnNmID0KPiA+ID4gewo+ID4gPiDCoMKgwqDCoCAubmFtZcKgwqDCoMKgwqDCoMKgwqDC oMKgID0gInJlbW92ZV9leHRyYSIsCj4gPiA+IMKgwqDCoMKgIC5wcml2X2RhdGFfc2l6ZSA9IHNp emVvZihSZW1vdmVFeHRyYWRhdGFDb250ZXh0KSwKPiA+ID4gwqDCoMKgwqAgLnByaXZfY2xhc3PC oMKgwqDCoCA9ICZyZW1vdmVfZXh0cmFkYXRhX2NsYXNzLAo+ID4gPiAtwqDCoMKgIC5pbml0wqDC oMKgwqDCoMKgwqDCoMKgwqAgPSByZW1vdmVfZXh0cmFkYXRhX2luaXQsCj4gPiA+IC3CoMKgwqAg LmNsb3NlwqDCoMKgwqDCoMKgwqDCoMKgID0gcmVtb3ZlX2V4dHJhZGF0YV9jbG9zZSwKPiA+ID4g wqDCoMKgwqAgLmZpbHRlcsKgwqDCoMKgwqDCoMKgwqAgPSByZW1vdmVfZXh0cmFkYXRhLAo+ID4g PiDCoH07Cj4gPiA+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3ZjMV9wYXJzZXIuYyBiL2xpYmF2 Y29kZWMvdmMxX3BhcnNlci5jCj4gPiA+IGluZGV4IDBmMTdkMjk5ZTEuLjAwODk2ZGRiMDkgMTAw NjQ0Cj4gPiA+IC0tLSBhL2xpYmF2Y29kZWMvdmMxX3BhcnNlci5jCj4gPiA+ICsrKyBiL2xpYmF2 Y29kZWMvdmMxX3BhcnNlci5jCj4gPiA+IEBAIC0yNTYsMjQgKzI1Niw2IEBAIHN0YXRpYyBpbnQg dmMxX3BhcnNlKEFWQ29kZWNQYXJzZXJDb250ZXh0Cj4gPiA+ICpzLAo+ID4gPiDCoMKgwqDCoCBy ZXR1cm4gbmV4dDsKPiA+ID4gwqB9Cj4gPiA+IMKgCj4gPiA+IC1zdGF0aWMgaW50IHZjMV9zcGxp dChBVkNvZGVjQ29udGV4dCAqYXZjdHgsCj4gPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgaW50IGJ1Zl9z aXplKQo+ID4gPiAtewo+ID4gPiAtwqDCoMKgIHVpbnQzMl90IHN0YXRlID0gLTE7Cj4gPiA+IC3C oMKgwqAgaW50IGNoYXJnZWQgPSAwOwo+ID4gPiAtwqDCoMKgIGNvbnN0IHVpbnQ4X3QgKnB0ciA9 IGJ1ZiwgKmVuZCA9IGJ1ZiArIGJ1Zl9zaXplOwo+ID4gPiAtCj4gPiA+IC3CoMKgwqAgd2hpbGUg KHB0ciA8IGVuZCkgewo+ID4gPiAtwqDCoMKgwqDCoMKgwqAgcHRyID0gYXZwcml2X2ZpbmRfc3Rh cnRfY29kZShwdHIsIGVuZCwgJnN0YXRlKTsKPiA+ID4gLcKgwqDCoMKgwqDCoMKgIGlmIChzdGF0 ZSA9PSBWQzFfQ09ERV9TRVFIRFIgfHwgc3RhdGUgPT0KPiA+ID4gVkMxX0NPREVfRU5UUllQT0lO VCkgewo+ID4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjaGFyZ2VkID0gMTsKPiA+ID4gLcKg wqDCoMKgwqDCoMKgIH0gZWxzZSBpZiAoY2hhcmdlZCAmJiBJU19NQVJLRVIoc3RhdGUpKQo+ID4g PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcHRyIC0gNCAtIGJ1ZjsKPiA+ID4gLcKg wqDCoCB9Cj4gPiA+IC0KPiA+ID4gLcKgwqDCoCByZXR1cm4gMDsKPiA+ID4gLX0KPiA+ID4gLQo+ ID4gPiDCoHN0YXRpYyBhdl9jb2xkIGludCB2YzFfcGFyc2VfaW5pdChBVkNvZGVjUGFyc2VyQ29u dGV4dCAqcykKPiA+ID4gwqB7Cj4gPiA+IMKgwqDCoMKgIFZDMVBhcnNlQ29udGV4dCAqdnBjID0g cy0+cHJpdl9kYXRhOwo+ID4gPiBAQCAtMjkzLDUgKzI3NSw0IEBAIGNvbnN0IEFWQ29kZWNQYXJz ZXIgZmZfdmMxX3BhcnNlciA9IHsKPiA+ID4gwqDCoMKgwqAgLnBhcnNlcl9pbml0wqDCoMKgID0g dmMxX3BhcnNlX2luaXQsCj4gPiA+IMKgwqDCoMKgIC5wYXJzZXJfcGFyc2XCoMKgID0gdmMxX3Bh cnNlLAo+ID4gPiDCoMKgwqDCoCAucGFyc2VyX2Nsb3NlwqDCoCA9IGZmX3BhcnNlX2Nsb3NlLAo+ ID4gPiAtwqDCoMKgIC5zcGxpdMKgwqDCoMKgwqDCoMKgwqDCoCA9IHZjMV9zcGxpdCwKPiA+ID4g wqB9Owo+ID4gCj4gCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KPiBmZm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0Cj4gZmZtcGVnLWRldmVsQGZmbXBlZy5v cmcKPiBodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKPiAK PiBUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKPiBmZm1wZWctZGV2 ZWwtcmVxdWVzdEBmZm1wZWcub3JnwqB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4KCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBt YWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21h aWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBh Ym92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1Ympl Y3QgInVuc3Vic2NyaWJlIi4K