From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id C75184D43D for ; Sun, 1 Jun 2025 08:21:23 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id C1B6768D22A; Sun, 1 Jun 2025 11:21:19 +0300 (EEST) Received: from mout-p-103.mailbox.org (mout-p-103.mailbox.org [80.241.56.161]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id C7A3E68D096 for ; Sun, 1 Jun 2025 11:21:12 +0300 (EEST) Received: from smtp2.mailbox.org (smtp2.mailbox.org [10.196.197.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-103.mailbox.org (Postfix) with ESMTPS id 4b990j4DYtz9sbL for ; Sun, 1 Jun 2025 10:21:09 +0200 (CEST) Message-ID: <101aecd0-2b82-4a20-8742-6824db01551f@gyani.pro> Date: Sun, 1 Jun 2025 13:51:05 +0530 MIME-Version: 1.0 To: ffmpeg-devel@ffmpeg.org References: Content-Language: en-US From: Gyan Doshi In-Reply-To: Subject: Re: [FFmpeg-devel] [PATCH] avfilter: add vf_yazf filter 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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: CgpPbiAyMDI1LTA1LTMxIDA4OjE5IHBtLCBRdWVudGluIFJFTkFSRCB3cm90ZToKPiB6b29tcGFu IGZpbHRlciB3aXRoIGZsb2F0aW5nIHBvaW50IHByZWNpc2lvbgoKSWYgdGhpcyBmaWx0ZXIgaXMg bWVhbnQgdG8gYmUgc2FtZSBhcyBleGlzdGluZyB6b29tcGFuIGJ1dCBtb3JlIHByZWNpc2UsIAp0 aGVuIHlvdSBzaG91bGQgbW9kaWZ5IHRoZSBvcmlnaW5hbCBmaWx0ZXIgd2l0aCBhIG1vZGUgb3B0 aW9uIGZvciBGUCB1c2UuCgpSZWdhcmRzLApHeWFuCgoKPgo+ICAgCj4KPiBTaWduZWQtb2ZmLWJ5 OiBRdWVudGluIFJlbmFyZCA8Y29udGFjdC1naXRodWJAYXN0aWNvZGUuY29tPgo+Cj4gLS0tCj4K PiAgIENoYW5nZWxvZ8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAxICsKPgo+ ICAgZG9jL2ZpbHRlcnMudGV4acKgwqDCoMKgwqDCoMKgwqAgfMKgIDU5ICsrKysrKysKPgo+ICAg bGliYXZmaWx0ZXIvTWFrZWZpbGXCoMKgwqDCoCB8wqDCoCAxICsKPgo+ICAgbGliYXZmaWx0ZXIv YWxsZmlsdGVycy5jIHzCoMKgIDEgKwo+Cj4gICBsaWJhdmZpbHRlci92Zl95YXpmLmPCoMKgwqAg fCAzNjAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4KPiAgIDUgZmls ZXMgY2hhbmdlZCwgNDIyIGluc2VydGlvbnMoKykKPgo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxp YmF2ZmlsdGVyL3ZmX3lhemYuYwo+Cj4gICAKPgo+IGRpZmYgLS1naXQgYS9DaGFuZ2Vsb2cgYi9D aGFuZ2Vsb2cKPgo+IGluZGV4IDQyMTc0NDk0MzguLjYzMmQwZTAzZDEgMTAwNjQ0Cj4KPiAtLS0g YS9DaGFuZ2Vsb2cKPgo+ICsrKyBiL0NoYW5nZWxvZwo+Cj4gQEAgLTE4LDYgKzE4LDcgQEAgdmVy c2lvbiA8bmV4dD46Cj4KPiAgIC0gQVBWIGVuY29kaW5nIHN1cHBvcnQgdGhyb3VnaCBhIGxpYm9w ZW5hcHYgd3JhcHBlcgo+Cj4gICAtIFZWQyBkZWNvZGVyIHN1cHBvcnRzIGFsbCBjb250ZW50IG9m IFNDQyAoU2NyZWVuIENvbnRlbnQgQ29kaW5nKToKPgo+ICDCoMKgIElCQyAoSW50ZXIgQmxvY2sg Q29weSksIFBhbGV0dGUgTW9kZSBhbmQgQUNUIChBZGFwdGl2ZSBDb2xvciBUcmFuc2Zvcm0KPgo+ ICstIHlhemYgZmlsdGVyCj4KPiAgIAo+Cj4gICAKPgo+ICDCoHZlcnNpb24gNy4xOgo+Cj4gZGlm ZiAtLWdpdCBhL2RvYy9maWx0ZXJzLnRleGkgYi9kb2MvZmlsdGVycy50ZXhpCj4KPiBpbmRleCA2 M2Y1NWY1Nzk0Li40ZmE1YmU5ZTk0IDEwMDY0NAo+Cj4gLS0tIGEvZG9jL2ZpbHRlcnMudGV4aQo+ Cj4gKysrIGIvZG9jL2ZpbHRlcnMudGV4aQo+Cj4gQEAgLTI1OTg2LDYgKzI1OTg2LDY1IEBAIFNl dCBibHVyIHN0cmVuZ3RoLiBEZWZhdWx0IHZhbHVlIGlzIDEyOC4KPgo+ICAgQHN1YnNlY3Rpb24g Q29tbWFuZHMKPgo+ICAgVGhpcyBmaWx0ZXIgc3VwcG9ydHMgc2FtZSBAcmVme2NvbW1hbmRzfSBh cyBvcHRpb25zLgo+Cj4gICAKPgo+ICtAc2VjdGlvbiB5YXpmCj4KPiArCj4KPiArQXBwbHkgWm9v bSAmIFBhbiBlZmZlY3Qgd2l0aCBmbG9hdGluZyBwb2ludCBwcmVjaXNpb24gKCJ5YXpmIiBtZWFu cyAieWV0IGFub3RoZXIgem9vbXBhbiBmaWx0ZXIiKS4KPgo+ICsKPgo+ICtUaGlzIGZpbHRlciBh Y2NlcHRzIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKPgo+ICsKPgo+ICtAdGFibGUgQG9wdGlvbgo+ Cj4gK0BpdGVtIHoKPgo+ICtTZXQgdGhlIHpvb20gZXhwcmVzc2lvbi4gUmFuZ2UgaXMgMS0xMC4g RGVmYXVsdCBpcyAxLgo+Cj4gKwo+Cj4gK0BpdGVtIHgKPgo+ICtAaXRlbSB5Cj4KPiArU2V0IHRo ZSB4IGFuZCB5IGV4cHJlc3Npb24uIERlZmF1bHQgaXMgMC4KPgo+ICsKPgo+ICtAaXRlbSB3Cj4K PiArQGl0ZW0gaAo+Cj4gK1NldCB0aGUgb3V0cHV0IGZyYW1lIHdpZHRoIGFuZCBoZWlnaHQgZXhw cmVzc2lvbi4gRGVmYXVsdCBpcyAxLgo+Cj4gK0BlbmQgdGFibGUKPgo+ICsKPgo+ICtFYWNoIGV4 cHJlc3Npb24gY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBjb25zdGFudHM6Cj4KPiArCj4KPiAr QHRhYmxlIEBvcHRpb24KPgo+ICtAaXRlbSBpbl93LCBpdwo+Cj4gK0lucHV0IHdpZHRoLgo+Cj4g Kwo+Cj4gK0BpdGVtIGluX2gsIGloCj4KPiArSW5wdXQgaGVpZ2h0Lgo+Cj4gKwo+Cj4gK0BpdGVt IG4KPgo+ICtJbnB1dCBmcmFtZSBjb3VudC4KPgo+ICsKPgo+ICtAaXRlbSB0Cj4KPiArVGhlIGlu cHV0IHRpbWVzdGFtcCBleHByZXNzZWQgaW4gc2Vjb25kcy4KPgo+ICtAZW5kIHRhYmxlCj4KPiAr Cj4KPiArQWRkaXRpb25hbGx5IHggYW5kIHkgZXhwcmVzc2lvbnMgY2FuIGNvbnRhaW4gdGhlIGZv bGxvd2luZyBjb25zdGFudHM6Cj4KPiArCj4KPiArQHRhYmxlIEBvcHRpb24KPgo+ICtAaXRlbSB6 Cj4KPiArTGFzdCBjYWxjdWxhdGVkIHpvb20gZnJvbSAneicgZXhwcmVzc2lvbiBmb3IgY3VycmVu dCBpbnB1dCBmcmFtZS4KPgo+ICsKPgo+ICtAaXRlbSB6dwo+Cj4gK0xhc3QgY2FsY3VsYXRlZCB6 b29tIHdpZHRoIGZvciBjdXJyZW50IGlucHV0IGZyYW1lLgo+Cj4gKwo+Cj4gK0BpdGVtIHpoCj4K PiArTGFzdCBjYWxjdWxhdGVkIHpvb20gaGVpZ2h0IGZvciBjdXJyZW50IGlucHV0IGZyYW1lLgo+ Cj4gK0BlbmQgdGFibGUKPgo+ICsKPgo+ICtAc3Vic2VjdGlvbiBFeGFtcGxlcwo+Cj4gKwo+Cj4g K0BpdGVtaXplCj4KPiArQGl0ZW0KPgo+ICtab29tIGluIDJ4IGludG8gY2VudGVyIG9mIHBpY3R1 cmUgZm9yIGZpcnN0IDMwIGZyYW1lczoKPgo+ICtAZXhhbXBsZQo+Cj4gK3lhemY9eD0nKGl3LzIp LSh6dy8yKSc6eT0nKGloLzIpLSh6aC8yKSc6ej0nbWluKDIsIDErbiovMzApJzp3PTEwODA6aD0x MDgwIgo+Cj4gK0BlbmQgZXhhbXBsZQo+Cj4gKwo+Cj4gK0BlbmQgaXRlbWl6ZQo+Cj4gKwo+Cj4g ICBAc2VjdGlvbiB6b29tcGFuCj4KPiAgIAo+Cj4gIMKgQXBwbHkgWm9vbSAmIFBhbiBlZmZlY3Qu Cj4KPiBkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvTWFrZWZpbGUgYi9saWJhdmZpbHRlci9NYWtl ZmlsZQo+Cj4gaW5kZXggOTdmOGYxNzI3Mi4uNDA5YTlmMTBkYyAxMDA2NDQKPgo+IC0tLSBhL2xp YmF2ZmlsdGVyL01ha2VmaWxlCj4KPiArKysgYi9saWJhdmZpbHRlci9NYWtlZmlsZQo+Cj4gQEAg LTU4Miw2ICs1ODIsNyBAQCBPQkpTLSQoQ09ORklHX1lBRElGX1ZJREVPVE9PTEJPWF9GSUxURVIp wqDCoMKgwqAgKz0gdmZfeWFkaWZfdmlkZW90b29sYm94Lm8gXAo+Cj4gIMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtZXRhbC91dGlscy5vIFwKPgo+ICDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgeWFkaWZfY29tbW9uLm8KPgo+ICAgT0JKUy0k KENPTkZJR19ZQUVQQkxVUl9GSUxURVIpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArPSB2 Zl95YWVwYmx1ci5vCj4KPiArT0JKUy0kKENPTkZJR19ZQVpGX0ZJTFRFUinCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKz0gdmZfeWF6Zi5vCj4KPiAgIE9CSlMtJChDT05GSUdf Wk1RX0ZJTFRFUinCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArPSBmX3pt cS5vCj4KPiAgIE9CSlMtJChDT05GSUdfWk9PTVBBTl9GSUxURVIpwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICs9IHZmX3pvb21wYW4ubwo+Cj4gICBPQkpTLSQoQ09ORklHX1pTQ0FMRV9G SUxURVIpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKz0gdmZfenNjYWxlLm8KPgo+ IGRpZmYgLS1naXQgYS9saWJhdmZpbHRlci9hbGxmaWx0ZXJzLmMgYi9saWJhdmZpbHRlci9hbGxm aWx0ZXJzLmMKPgo+IGluZGV4IDNiYzA0NWIyOGYuLjVmYzgwMzAzZjUgMTAwNjQ0Cj4KPiAtLS0g YS9saWJhdmZpbHRlci9hbGxmaWx0ZXJzLmMKPgo+ICsrKyBiL2xpYmF2ZmlsdGVyL2FsbGZpbHRl cnMuYwo+Cj4gQEAgLTU0NCw2ICs1NDQsNyBAQCBleHRlcm4gY29uc3QgRkZGaWx0ZXIgZmZfdmZf eWFkaWY7Cj4KPiAgIGV4dGVybiBjb25zdCBGRkZpbHRlciBmZl92Zl95YWRpZl9jdWRhOwo+Cj4g ICBleHRlcm4gY29uc3QgRkZGaWx0ZXIgZmZfdmZfeWFkaWZfdmlkZW90b29sYm94Owo+Cj4gICBl eHRlcm4gY29uc3QgRkZGaWx0ZXIgZmZfdmZfeWFlcGJsdXI7Cj4KPiArZXh0ZXJuIGNvbnN0IEZG RmlsdGVyIGZmX3ZmX3lhemY7Cj4KPiAgIGV4dGVybiBjb25zdCBGRkZpbHRlciBmZl92Zl96bXE7 Cj4KPiAgIGV4dGVybiBjb25zdCBGRkZpbHRlciBmZl92Zl96b29tcGFuOwo+Cj4gICBleHRlcm4g Y29uc3QgRkZGaWx0ZXIgZmZfdmZfenNjYWxlOwo+Cj4gZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVy L3ZmX3lhemYuYyBiL2xpYmF2ZmlsdGVyL3ZmX3lhemYuYwo+Cj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPgo+IGluZGV4IDAwMDAwMDAwMDAuLjM2YzE1OGZkMzIKPgo+IC0tLSAvZGV2L251bGwKPgo+ ICsrKyBiL2xpYmF2ZmlsdGVyL3ZmX3lhemYuYwo+Cj4gQEAgLTAsMCArMSwzNjAgQEAKPgo+ICsv Kgo+Cj4gKyAqIENvcHlyaWdodCAoYykgMjAyNSBRdWVudGluIFJlbmFyZAo+Cj4gKyAqCj4KPiAr ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgo+Cj4gKyAqCj4KPiArICogRkZtcGVnIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+Cj4gKyAqIG1v ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK Pgo+ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIKPgo+ICsgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPgo+ICsgKgo+Cj4gKyAqIEZGbXBlZyBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+Cj4gKyAqIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCj4KPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLsKgIFNlZSB0aGUgR05VCj4KPiArICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KPgo+ICsgKgo+Cj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKPgo+ICsgKiBMaWNl bnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl Cj4KPiArICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v ciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQo+Cj4gKyAqLwo+Cj4gKwo+Cj4gKyNpbmNsdWRl ICJsaWJhdnV0aWwvZXZhbC5oIgo+Cj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvb3B0LmgiCj4KPiAr I2luY2x1ZGUgInZpZGVvLmgiCj4KPiArCj4KPiArc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHZh cl9uYW1lc1tdID0gewo+Cj4gK8KgwqDCoCAiaW5fdyIswqDCoCAiaXciLAo+Cj4gK8KgwqDCoCAi aW5faCIswqDCoCAiaWgiLAo+Cj4gK8KgwqDCoCAieiIsCj4KPiArwqDCoMKgICJ6dyIsCj4KPiAr wqDCoMKgICJ6aCIsCj4KPiArwqDCoMKgICJuIiwKPgo+ICvCoMKgwqAgInQiLAo+Cj4gK8KgwqDC oCBOVUxMCj4KPiArfTsKPgo+ICsKPgo+ICtlbnVtIHZhcl9uYW1lIHsKPgo+ICvCoMKgwqAgVkFS X0lOX1cswqDCoCBWQVJfSVcsCj4KPiArwqDCoMKgIFZBUl9JTl9ILMKgwqAgVkFSX0lILAo+Cj4g K8KgwqDCoCBWQVJfWiwKPgo+ICvCoMKgwqAgVkFSX1pXLAo+Cj4gK8KgwqDCoCBWQVJfWkgsCj4K PiArwqDCoMKgIFZBUl9OLAo+Cj4gK8KgwqDCoCBWQVJfVCwKPgo+ICvCoMKgwqAgVkFSU19OQgo+ Cj4gK307Cj4KPiArCj4KPiArdHlwZWRlZiBzdHJ1Y3QgWUFaRkNvbnRleHQgewo+Cj4gK8KgwqDC oCBjb25zdCBBVkNsYXNzICpjbGFzczsKPgo+ICvCoMKgwqAgY2hhciAqeF9leHByX3N0ciwgKnlf ZXhwcl9zdHIsICp3X2V4cHJfc3RyLCAqaF9leHByX3N0ciwgKnpvb21fZXhwcl9zdHI7Cj4KPiAr wqDCoMKgIEFWRXhwciAqeF9leHByLCAqeV9leHByLCAqd19leHByLCAqaF9leHByLCAqem9vbV9l eHByOwo+Cj4gK8KgwqDCoCBkb3VibGUgdmFyX3ZhbHVlc1tWQVJTX05CXTsKPgo+ICt9IFlBWkZD b250ZXh0Owo+Cj4gKwo+Cj4gK3R5cGVkZWYgc3RydWN0IFRocmVhZERhdGEgewo+Cj4gK8KgwqDC oCBBVkZyYW1lICppbiwgKm91dDsKPgo+ICvCoMKgwqAgZmxvYXQgY3JvcF9oLCBjcm9wX3gsIGNy b3BfeSwgY3JvcF93Owo+Cj4gK8KgwqDCoCBpbnQgdywgaDsKPgo+ICt9IFRocmVhZERhdGE7Cj4K PiArCj4KPiArc3RhdGljIGF2X2NvbGQgaW50IGluaXQoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCj4K PiArewo+Cj4gK8KgwqDCoCBZQVpGQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKPgo+ICvCoMKgwqAg aW50IHJldDsKPgo+ICsKPgo+ICvCoMKgwqAgcmV0ID0gYXZfZXhwcl9wYXJzZSgmcy0+eF9leHBy LCBzLT54X2V4cHJfc3RyLCB2YXJfbmFtZXMsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIDAsIGN0 eCk7Cj4KPiArwqDCoMKgIGlmIChyZXQgPCAwKQo+Cj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBy ZXQ7Cj4KPiArCj4KPiArwqDCoMKgIHJldCA9IGF2X2V4cHJfcGFyc2UoJnMtPnlfZXhwciwgcy0+ eV9leHByX3N0ciwgdmFyX25hbWVzLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAwLCBjdHgpOwo+ Cj4gK8KgwqDCoCBpZiAocmV0IDwgMCkKPgo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+ Cj4gKwo+Cj4gK8KgwqDCoCByZXQgPSBhdl9leHByX3BhcnNlKCZzLT53X2V4cHIsIHMtPndfZXhw cl9zdHIsIHZhcl9uYW1lcywgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgMCwgY3R4KTsKPgo+ICvC oMKgwqAgaWYgKHJldCA8IDApCj4KPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPgo+ICsK Pgo+ICvCoMKgwqAgcmV0ID0gYXZfZXhwcl9wYXJzZSgmcy0+aF9leHByLCBzLT5oX2V4cHJfc3Ry LCB2YXJfbmFtZXMsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIDAsIGN0eCk7Cj4KPiArwqDCoMKg IGlmIChyZXQgPCAwKQo+Cj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4KPiArCj4KPiAr wqDCoMKgIHJldCA9IGF2X2V4cHJfcGFyc2UoJnMtPnpvb21fZXhwciwgcy0+em9vbV9leHByX3N0 ciwgdmFyX25hbWVzLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAwLCBjdHgpOwo+Cj4gK8KgwqDC oCBpZiAocmV0IDwgMCkKPgo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+Cj4gKwo+Cj4g K8KgwqDCoCByZXR1cm4gMDsKPgo+ICt9Cj4KPiArCj4KPiArc3RhdGljIGludCBjb25maWdfcHJv cHMoQVZGaWx0ZXJMaW5rICpvdXRsaW5rKQo+Cj4gK3sKPgo+ICvCoMKgwqAgQVZGaWx0ZXJDb250 ZXh0ICpjdHggPSBvdXRsaW5rLT5zcmM7Cj4KPiArwqDCoMKgIEFWRmlsdGVyTGluayAqaW5saW5r ID0gY3R4LT5pbnB1dHNbMF07Cj4KPiArwqDCoMKgIFlBWkZDb250ZXh0ICpzID0gY3R4LT5wcml2 Owo+Cj4gKwo+Cj4gK8KgwqDCoCBzLT52YXJfdmFsdWVzW1ZBUl9JTl9XXSA9IHMtPnZhcl92YWx1 ZXNbVkFSX0lXXSA9IGlubGluay0+dzsKPgo+ICvCoMKgwqAgcy0+dmFyX3ZhbHVlc1tWQVJfSU5f SF0gPSBzLT52YXJfdmFsdWVzW1ZBUl9JSF0gPSBpbmxpbmstPmg7Cj4KPiArCj4KPiArwqDCoMKg IG91dGxpbmstPncgPSBGRk1BWChhdl9leHByX2V2YWwocy0+d19leHByLCBzLT52YXJfdmFsdWVz LCBOVUxMKSwgMSk7Cj4KPiArwqDCoMKgIG91dGxpbmstPmggPSBGRk1BWChhdl9leHByX2V2YWwo cy0+aF9leHByLCBzLT52YXJfdmFsdWVzLCBOVUxMKSwgMSk7Cj4KPiArwqDCoMKgIHJldHVybiAw Owo+Cj4gK30KPgo+ICsKPgo+ICtzdGF0aWMgaW5saW5lIHVpbnQ4X3Qgem9vbXBhbl9waXhlbChj b25zdCB1aW50OF90ICpzcmMsIGNvbnN0IGludCBzcmNfc3RyaWRlLAo+Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgY29uc3QgaW50IHNyY193LCBjb25zdCBpbnQgc3JjX2gsCj4KPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBj b25zdCBmbG9hdCB4LCBjb25zdCBmbG9hdCB5KQo+Cj4gK3sKPgo+ICvCoMKgwqAgaW50IHgwID0g KGludClmbG9vcmYoeCk7Cj4KPiArwqDCoMKgIGludCB5MCA9IChpbnQpZmxvb3JmKHkpOwo+Cj4g K8KgwqDCoCBpbnQgeDEgPSB4MCArIDE7Cj4KPiArwqDCoMKgIGludCB5MSA9IHkwICsgMTsKPgo+ ICsKPgo+ICvCoMKgwqAgZmxvYXQgZnggPSB4IC0geDA7Cj4KPiArwqDCoMKgIGZsb2F0IGZ5ID0g eSAtIHkwOwo+Cj4gKwo+Cj4gK8KgwqDCoCB4MCA9IEZGTUFYKDAsIEZGTUlOKHgwLCBzcmNfdyAt IDEpKTsKPgo+ICvCoMKgwqAgeDEgPSBGRk1BWCgwLCBGRk1JTih4MSwgc3JjX3cgLSAxKSk7Cj4K PiArwqDCoMKgIHkwID0gRkZNQVgoMCwgRkZNSU4oeTAsIHNyY19oIC0gMSkpOwo+Cj4gK8KgwqDC oCB5MSA9IEZGTUFYKDAsIEZGTUlOKHkxLCBzcmNfaCAtIDEpKTsKPgo+ICsKPgo+ICvCoMKgwqAg ZmxvYXQgcDAwID0gc3JjW3kwICogc3JjX3N0cmlkZSArIHgwXTsKPgo+ICvCoMKgwqAgZmxvYXQg cDEwID0gc3JjW3kwICogc3JjX3N0cmlkZSArIHgxXTsKPgo+ICvCoMKgwqAgZmxvYXQgcDAxID0g c3JjW3kxICogc3JjX3N0cmlkZSArIHgwXTsKPgo+ICvCoMKgwqAgZmxvYXQgcDExID0gc3JjW3kx ICogc3JjX3N0cmlkZSArIHgxXTsKPgo+ICsKPgo+ICvCoMKgwqAgcmV0dXJuICgxIC0gZngpICog KDEgLSBmeSkgKiBwMDAgKwo+Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGZ4ICogKDEgLSBmeSkg KiBwMTAgKwo+Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgICgxIC0gZngpICogZnkgKiBwMDEgKwo+ Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIGZ4ICogZnkgKiBwMTE7Cj4KPiArfQo+Cj4gKwo+Cj4g K3N0YXRpYyB2b2lkIHpvb21wYW5fcGxhbmUoY29uc3QgdWludDhfdCAqc3JjLCBjb25zdCBpbnQg c3JjX3N0cmlkZSwKPgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgY29uc3QgaW50IHNyY193LCBjb25zdCBpbnQgc3JjX2gsIGNvbnN0IGZs b2F0IGNyb3BfeCwKPgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgY29uc3QgZmxvYXQgY3JvcF95LCBjb25zdCBmbG9hdCBjcm9wX3csCj4K PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGNvbnN0IGZsb2F0IGNyb3BfaCwgdWludDhfdCAqZHN0LAo+Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25zdCBpbnQgZHN0X3N0cmlk ZSwgY29uc3QgaW50IGRzdF93LCBjb25zdCBpbnQgZHN0X2gsCj4KPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0IGludCBkc3RfeV9z dGFydCwgY29uc3QgaW50IGRzdF95X2VuZCkKPgo+ICt7Cj4KPiArwqDCoMKgIGZsb2F0IHUsIHYs IHgsIHksIHZhbDsKPgo+ICvCoMKgwqAgZm9yIChpbnQgZHN0X3kgPSBkc3RfeV9zdGFydDsgZHN0 X3kgPCBkc3RfeV9lbmQ7IGRzdF95KyspIHsKPgo+ICvCoMKgwqDCoMKgwqDCoCBmb3IgKGludCBk c3RfeCA9IDA7IGRzdF94IDwgZHN0X3c7IGRzdF94KyspIHsKPgo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHUgPSAoZHN0X3cgPiAxKSA/IChmbG9hdClkc3RfeCAvIChmbG9hdCkoZHN0X3cgLSAx KSA6IDAuMGY7Cj4KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB2ID0gKGRzdF9oID4gMSkgPyAo ZmxvYXQpZHN0X3kgLyAoZmxvYXQpKGRzdF9oIC0gMSkgOiAwLjBmOwo+Cj4gKwo+Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgeCA9IGNyb3BfeCArIHUgKiBjcm9wX3c7Cj4KPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB5ID0gY3JvcF95ICsgdiAqIGNyb3BfaDsKPgo+ICsKPgo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHZhbCA9IHpvb21wYW5fcGl4ZWwoc3JjLCBzcmNfc3RyaWRlLCBzcmNf dywgc3JjX2gsIHgsIHkpOwo+Cj4gKwo+Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZHN0W2Rz dF95ICogZHN0X3N0cmlkZSArIGRzdF94XSA9IEZGTUlOKEZGTUFYKHZhbCwgMCksIDI1NSk7Cj4K PiArwqDCoMKgwqDCoMKgwqAgfQo+Cj4gK8KgwqDCoCB9Cj4KPiArfQo+Cj4gKwo+Cj4gK3N0YXRp YyBpbnQgem9vbXBhbl9zbGljZShBVkZpbHRlckNvbnRleHQgKmN0eCwgdm9pZCAqYXJnLCBpbnQg am9ibnIsIGludCBuYl9qb2JzKQo+Cj4gK3sKPgo+ICvCoMKgwqAgQVZGaWx0ZXJMaW5rICppbmxp bmsgPSBjdHgtPmlucHV0c1swXTsKPgo+ICvCoMKgwqAgVGhyZWFkRGF0YSAqdGQgPSBhcmc7Cj4K PiArCj4KPiArwqDCoMKgIGNvbnN0IGludCBzbGljZV9zdGFydCA9ICh0ZC0+b3V0LT5oZWlnaHQg KiBqb2JucikgLyBuYl9qb2JzOwo+Cj4gK8KgwqDCoCBjb25zdCBpbnQgc2xpY2VfZW5kID0gKHRk LT5vdXQtPmhlaWdodCAqIChqb2JucisxKSkgLyBuYl9qb2JzOwo+Cj4gKwo+Cj4gK8KgwqDCoCBp bnQgbmJfcGxhbmVzID0gNDsKPgo+ICvCoMKgwqAgc3RydWN0IHsKPgo+ICvCoMKgwqDCoMKgwqDC oCBpbnQgcmVzb2x1dGlvbl93Owo+Cj4gK8KgwqDCoMKgwqDCoMKgIGludCByZXNvbHV0aW9uX2g7 Cj4KPiArwqDCoMKgIH0gcGxhbmVzWzRdID0gewo+Cj4gK8KgwqDCoMKgwqDCoMKgIHsucmVzb2x1 dGlvbl9oID0gMSwgLnJlc29sdXRpb25fdyA9IDF9LAo+Cj4gK8KgwqDCoMKgwqDCoMKgIHsucmVz b2x1dGlvbl9oID0gMSwgLnJlc29sdXRpb25fdyA9IDF9LAo+Cj4gK8KgwqDCoMKgwqDCoMKgIHsu cmVzb2x1dGlvbl9oID0gMSwgLnJlc29sdXRpb25fdyA9IDF9LAo+Cj4gK8KgwqDCoMKgwqDCoMKg IHsucmVzb2x1dGlvbl9oID0gMSwgLnJlc29sdXRpb25fdyA9IDF9LAo+Cj4gK8KgwqDCoCB9Owo+ Cj4gK8KgwqDCoCBzd2l0Y2ggKGlubGluay0+Zm9ybWF0KSB7Cj4KPiArwqDCoMKgwqDCoMKgwqAg Y2FzZSBBVl9QSVhfRk1UX1lVVjQxMFA6Cj4KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBuYl9w bGFuZXMgPSAzOwo+Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGxhbmVzWzFdLnJlc29sdXRp b25faCA9IDQ7Cj4KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwbGFuZXNbMV0ucmVzb2x1dGlv bl93ID0gNDsKPgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBsYW5lc1syXS5yZXNvbHV0aW9u X2ggPSA0Owo+Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGxhbmVzWzJdLnJlc29sdXRpb25f dyA9IDQ7Cj4KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPgo+ICvCoMKgwqDCoMKg wqDCoCBjYXNlIEFWX1BJWF9GTVRfWVVWNDExUDoKPgo+ICvCoMKgwqDCoMKgwqDCoCBjYXNlIEFW X1BJWF9GTVRfWVVWSjQxMVA6Cj4KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBuYl9wbGFuZXMg PSAzOwo+Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGxhbmVzWzFdLnJlc29sdXRpb25fdyA9 IDQ7Cj4KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwbGFuZXNbMl0ucmVzb2x1dGlvbl93ID0g NDsKPgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+Cj4gK8KgwqDCoMKgwqDCoMKg IGNhc2UgQVZfUElYX0ZNVF9ZVVY0MjBQOgo+Cj4gK8KgwqDCoMKgwqDCoMKgIGNhc2UgQVZfUElY X0ZNVF9ZVVZKNDIwUDoKPgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG5iX3BsYW5lcyA9IDM7 Cj4KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwbGFuZXNbMV0ucmVzb2x1dGlvbl9oID0gMjsK Pgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBsYW5lc1sxXS5yZXNvbHV0aW9uX3cgPSAyOwo+ Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGxhbmVzWzJdLnJlc29sdXRpb25faCA9IDI7Cj4K PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwbGFuZXNbMl0ucmVzb2x1dGlvbl93ID0gMjsKPgo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+Cj4gK8KgwqDCoMKgwqDCoMKgIGNhc2Ug QVZfUElYX0ZNVF9ZVVZBNDIwUDoKPgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG5iX3BsYW5l cyA9IDQ7Cj4KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwbGFuZXNbMV0ucmVzb2x1dGlvbl9o ID0gMjsKPgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBsYW5lc1sxXS5yZXNvbHV0aW9uX3cg PSAyOwo+Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGxhbmVzWzJdLnJlc29sdXRpb25faCA9 IDI7Cj4KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwbGFuZXNbMl0ucmVzb2x1dGlvbl93ID0g MjsKPgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+Cj4gK8KgwqDCoMKgwqDCoMKg IGNhc2UgQVZfUElYX0ZNVF9ZVVY0MjJQOgo+Cj4gK8KgwqDCoMKgwqDCoMKgIGNhc2UgQVZfUElY X0ZNVF9ZVVZKNDIyUDoKPgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG5iX3BsYW5lcyA9IDM7 Cj4KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwbGFuZXNbMV0ucmVzb2x1dGlvbl93ID0gMjsK Pgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBsYW5lc1syXS5yZXNvbHV0aW9uX3cgPSAyOwo+ Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4KPiArwqDCoMKgwqDCoMKgwqAgY2Fz ZSBBVl9QSVhfRk1UX1lVVkE0MjJQOgo+Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbmJfcGxh bmVzID0gNDsKPgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBsYW5lc1sxXS5yZXNvbHV0aW9u X3cgPSAyOwo+Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGxhbmVzWzJdLnJlc29sdXRpb25f dyA9IDI7Cj4KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPgo+ICvCoMKgwqDCoMKg wqDCoCBjYXNlIEFWX1BJWF9GTVRfWVVWNDQwUDoKPgo+ICvCoMKgwqDCoMKgwqDCoCBjYXNlIEFW X1BJWF9GTVRfWVVWSjQ0MFA6Cj4KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBuYl9wbGFuZXMg PSAzOwo+Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGxhbmVzWzFdLnJlc29sdXRpb25faCA9 IDI7Cj4KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwbGFuZXNbMl0ucmVzb2x1dGlvbl9oID0g MjsKPgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+Cj4gK8KgwqDCoMKgwqDCoMKg IGNhc2UgQVZfUElYX0ZNVF9ZVVY0NDRQOgo+Cj4gK8KgwqDCoMKgwqDCoMKgIGNhc2UgQVZfUElY X0ZNVF9ZVVZKNDQ0UDoKPgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG5iX3BsYW5lcyA9IDM7 Cj4KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPgo+ICvCoMKgwqDCoMKgwqDCoCBj YXNlIEFWX1BJWF9GTVRfWVVWQTQ0NFA6Cj4KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBuYl9w bGFuZXMgPSA0Owo+Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4KPiArwqDCoMKg IH0KPgo+ICsKPgo+ICvCoMKgwqAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9wbGFuZXM7IGkrKykg ewo+Cj4gK8KgwqDCoMKgwqDCoMKgIHpvb21wYW5fcGxhbmUodGQtPmluLT5kYXRhW2ldLCB0ZC0+ aW4tPmxpbmVzaXplW2ldLCB0ZC0+aW4tPndpZHRoL3BsYW5lc1tpXS5yZXNvbHV0aW9uX3csCj4K PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdGQtPmluLT5oZWlnaHQv cGxhbmVzW2ldLnJlc29sdXRpb25faCwgdGQtPmNyb3BfeC9wbGFuZXNbaV0ucmVzb2x1dGlvbl93 LAo+Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRkLT5jcm9wX3kv cGxhbmVzW2ldLnJlc29sdXRpb25faCwgdGQtPmNyb3Bfdy9wbGFuZXNbaV0ucmVzb2x1dGlvbl93 LAo+Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRkLT5jcm9wX2gv cGxhbmVzW2ldLnJlc29sdXRpb25faCwgdGQtPm91dC0+ZGF0YVtpXSwgdGQtPm91dC0+bGluZXNp emVbaV0sCj4KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdGQtPm91 dC0+d2lkdGgvcGxhbmVzW2ldLnJlc29sdXRpb25fdywgdGQtPm91dC0+aGVpZ2h0L3BsYW5lc1tp XS5yZXNvbHV0aW9uX2gsCj4KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc2xpY2Vfc3RhcnQvcGxhbmVzW2ldLnJlc29sdXRpb25faCwgc2xpY2VfZW5kL3BsYW5lc1tp XS5yZXNvbHV0aW9uX2gpOwo+Cj4gK8KgwqDCoCB9Cj4KPiArwqDCoMKgIHJldHVybiAwOwo+Cj4g K30KPgo+ICsKPgo+ICtzdGF0aWMgaW50IGZpbHRlcl9mcmFtZShBVkZpbHRlckxpbmsgKmlubGlu aywgQVZGcmFtZSAqaW4pCj4KPiArewo+Cj4gK8KgwqDCoCBBVkZpbHRlckNvbnRleHQgKmN0eCA9 IGlubGluay0+ZHN0Owo+Cj4gK8KgwqDCoCBZQVpGQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKPgo+ ICvCoMKgwqAgQVZGaWx0ZXJMaW5rICpvdXRsaW5rID0gY3R4LT5vdXRwdXRzWzBdOwo+Cj4gK8Kg wqDCoCBpbnQgcmV0Owo+Cj4gK8KgwqDCoCBBVkZyYW1lICpvdXQgPSBOVUxMOwo+Cj4gK8KgwqDC oCBUaHJlYWREYXRhIHRkOwo+Cj4gK8KgwqDCoCBmbG9hdCB6b29tLCBhOwo+Cj4gKwo+Cj4gK8Kg wqDCoCBpbmxpbmstPncgPSBpbi0+d2lkdGg7Cj4KPiArwqDCoMKgIGlubGluay0+aCA9IGluLT5o ZWlnaHQ7Cj4KPiArwqDCoMKgIHMtPnZhcl92YWx1ZXNbVkFSX05dID0gZmZfZmlsdGVyX2xpbmso aW5saW5rKS0+ZnJhbWVfY291bnRfb3V0Owo+Cj4gK8KgwqDCoCBzLT52YXJfdmFsdWVzW1ZBUl9U XSA9IFRTMlQoaW4tPnB0cywgaW5saW5rLT50aW1lX2Jhc2UpOwo+Cj4gKwo+Cj4gK8KgwqDCoCBp ZiAoKHJldCA9IGNvbmZpZ19wcm9wcyhvdXRsaW5rKSkgPCAwKQo+Cj4gK8KgwqDCoMKgwqDCoMKg IGdvdG8gZXJyOwo+Cj4gKwo+Cj4gK8KgwqDCoCB0ZC53ID0gb3V0bGluay0+dzsKPgo+ICvCoMKg wqAgdGQuaCA9IG91dGxpbmstPmg7Cj4KPiArwqDCoMKgIGEgPSAoZmxvYXQpb3V0bGluay0+dyAv IChmbG9hdClvdXRsaW5rLT5oOwo+Cj4gKwo+Cj4gK8KgwqDCoCBzLT52YXJfdmFsdWVzW1ZBUl9a XSA9IHpvb20gPSBhdl9jbGlwZChhdl9leHByX2V2YWwocy0+em9vbV9leHByLCBzLT52YXJfdmFs dWVzLCBOVUxMKSwgMSwgMTApOwo+Cj4gKwo+Cj4gK8KgwqDCoCB0ZC5jcm9wX3cgPSAoZmxvYXQp aW5saW5rLT53IC8gem9vbTsKPgo+ICvCoMKgwqAgdGQuY3JvcF9oID0gdGQuY3JvcF93IC8gYTsK Pgo+ICvCoMKgwqAgaWYgKHRkLmNyb3BfaCA+IGlubGluay0+aCkgewo+Cj4gK8KgwqDCoMKgwqDC oMKgIHRkLmNyb3BfaCA9IGlubGluay0+aDsKPgo+ICvCoMKgwqDCoMKgwqDCoCB0ZC5jcm9wX3cg PSB0ZC5jcm9wX2ggKiBhOwo+Cj4gK8KgwqDCoCB9Cj4KPiArwqDCoMKgIHMtPnZhcl92YWx1ZXNb VkFSX1pXXSA9IHRkLmNyb3BfdzsKPgo+ICvCoMKgwqAgcy0+dmFyX3ZhbHVlc1tWQVJfWkhdID0g dGQuY3JvcF9oOwo+Cj4gKwo+Cj4gK8KgwqDCoCB0ZC5jcm9wX3ggPSBhdl9jbGlwZChhdl9leHBy X2V2YWwocy0+eF9leHByLCBzLT52YXJfdmFsdWVzLCBOVUxMKSwgMCwgRkZNQVgoaW5saW5rLT53 IC0gdGQuY3JvcF93LCAwKSk7Cj4KPiArwqDCoMKgIHRkLmNyb3BfeSA9IGF2X2NsaXBkKGF2X2V4 cHJfZXZhbChzLT55X2V4cHIsIHMtPnZhcl92YWx1ZXMsIE5VTEwpLCAwLCBGRk1BWChpbmxpbmst PmggLSB0ZC5jcm9wX2gsIDApKTsKPgo+ICsKPgo+ICvCoMKgwqAgb3V0ID0gZmZfZ2V0X3ZpZGVv X2J1ZmZlcihvdXRsaW5rLCBvdXRsaW5rLT53LCBvdXRsaW5rLT5oKTsKPgo+ICvCoMKgwqAgaWYg KCFvdXQpIHsKPgo+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSBBVkVSUk9SKEVOT01FTSk7Cj4KPiAr wqDCoMKgwqDCoMKgwqAgZ290byBlcnI7Cj4KPiArwqDCoMKgIH0KPgo+ICsKPgo+ICvCoMKgwqAg aWYgKChyZXQgPSBhdl9mcmFtZV9jb3B5X3Byb3BzKG91dCwgaW4pKSA8IDApCj4KPiArwqDCoMKg wqDCoMKgwqAgZ290byBlcnI7Cj4KPiArCj4KPiArwqDCoMKgIHRkLm91dCA9IG91dCwgdGQuaW4g PSBpbjsKPgo+ICvCoMKgwqAgaWYgKChyZXQgPSBmZl9maWx0ZXJfZXhlY3V0ZShjdHgsIHpvb21w YW5fc2xpY2UsICZ0ZCwgTlVMTCwKPgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBGRk1JTih0ZC5oLCBmZl9maWx0ZXJfZ2V0 X25iX3RocmVhZHMoY3R4KSkpKSA8IDApCj4KPiArwqDCoMKgwqDCoMKgwqAgZ290byBlcnI7Cj4K PiArCj4KPiArwqDCoMKgIGF2X2ZyYW1lX2ZyZWUoJmluKTsKPgo+ICvCoMKgwqAgcmV0dXJuIGZm X2ZpbHRlcl9mcmFtZShvdXRsaW5rLCBvdXQpOwo+Cj4gKwo+Cj4gK2VycjoKPgo+ICvCoMKgwqAg YXZfZnJhbWVfZnJlZSgmaW4pOwo+Cj4gK8KgwqDCoCBhdl9mcmFtZV9mcmVlKCZvdXQpOwo+Cj4g K8KgwqDCoCByZXR1cm4gcmV0Owo+Cj4gK30KPgo+ICsKPgo+ICtzdGF0aWMgY29uc3QgZW51bSBB VlBpeGVsRm9ybWF0IHBpeF9mbXRzW10gPSB7Cj4KPiArwqDCoMKgIEFWX1BJWF9GTVRfWVVWNDEw UCwgQVZfUElYX0ZNVF9ZVVY0MTFQLAo+Cj4gK8KgwqDCoCBBVl9QSVhfRk1UX1lVVjQyMFAsIEFW X1BJWF9GTVRfWVVWNDIyUCwKPgo+ICvCoMKgwqAgQVZfUElYX0ZNVF9ZVVY0NDBQLCBBVl9QSVhf Rk1UX1lVVjQ0NFAsCj4KPiArwqDCoMKgIEFWX1BJWF9GTVRfWVVWSjQxMVAsIEFWX1BJWF9GTVRf WVVWSjQyMFAsCj4KPiArwqDCoMKgIEFWX1BJWF9GTVRfWVVWSjQyMlAsIEFWX1BJWF9GTVRfWVVW SjQ0MFAsCj4KPiArwqDCoMKgIEFWX1BJWF9GTVRfWVVWSjQ0NFAsCj4KPiArwqDCoMKgIEFWX1BJ WF9GTVRfWVVWQTQyMFAsIEFWX1BJWF9GTVRfWVVWQTQyMlAsCj4KPiArwqDCoMKgIEFWX1BJWF9G TVRfWVVWQTQ0NFAsCj4KPiArwqDCoMKgIEFWX1BJWF9GTVRfTk9ORQo+Cj4gK307Cj4KPiArCj4K PiArc3RhdGljIGF2X2NvbGQgdm9pZCB1bmluaXQoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCj4KPiAr ewo+Cj4gK8KgwqDCoCBZQVpGQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKPgo+ICsKPgo+ICvCoMKg wqAgYXZfZXhwcl9mcmVlKHMtPnhfZXhwcik7Cj4KPiArwqDCoMKgIGF2X2V4cHJfZnJlZShzLT55 X2V4cHIpOwo+Cj4gK8KgwqDCoCBhdl9leHByX2ZyZWUocy0+em9vbV9leHByKTsKPgo+ICvCoMKg wqAgYXZfZXhwcl9mcmVlKHMtPndfZXhwcik7Cj4KPiArwqDCoMKgIGF2X2V4cHJfZnJlZShzLT5o X2V4cHIpOwo+Cj4gK30KPgo+ICsKPgo+ICsjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihZQVpG Q29udGV4dCwgeCkKPgo+ICsjZGVmaW5lIEZMQUdTIEFWX09QVF9GTEFHX1ZJREVPX1BBUkFNfEFW X09QVF9GTEFHX0ZJTFRFUklOR19QQVJBTQo+Cj4gKwo+Cj4gK3N0YXRpYyBjb25zdCBBVk9wdGlv biB5YXpmX29wdGlvbnNbXSA9IHsKPgo+ICvCoMKgwqAgeyAieiIsICJzZXQgdGhlIHpvb20gZXhw cmVzc2lvbiIsIE9GRlNFVCh6b29tX2V4cHJfc3RyKSwgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0 ciA9ICIxIiB9LCAuZmxhZ3MgPSBGTEFHUyB9LAo+Cj4gK8KgwqDCoCB7ICJ4IiwgInNldCB0aGUg em9vbSB4IGV4cHJlc3Npb24iLCBPRkZTRVQoeF9leHByX3N0ciksIEFWX09QVF9UWVBFX1NUUklO Rywgey5zdHIgPSAiMCIgfSwgLmZsYWdzID0gRkxBR1MgfSwKPgo+ICvCoMKgwqAgeyAieSIsICJz ZXQgdGhlIHpvb20geSBleHByZXNzaW9uIiwgT0ZGU0VUKHlfZXhwcl9zdHIpLCBBVl9PUFRfVFlQ RV9TVFJJTkcsIHsuc3RyID0gIjAiIH0sIC5mbGFncyA9IEZMQUdTIH0sCj4KPiArwqDCoMKgIHsg InciLCAic2V0IHRoZSBvdXRwdXQgdyBleHByZXNzaW9uIiwgT0ZGU0VUKHdfZXhwcl9zdHIpLCBB Vl9PUFRfVFlQRV9TVFJJTkcsIHsuc3RyID0gIjEiIH0sIC5mbGFncyA9IEZMQUdTIH0sCj4KPiAr wqDCoMKgIHsgImgiLCAic2V0IHRoZSBvdXRwdXQgaCBleHByZXNzaW9uIiwgT0ZGU0VUKGhfZXhw cl9zdHIpLCBBVl9PUFRfVFlQRV9TVFJJTkcsIHsuc3RyID0gIjEiIH0sIC5mbGFncyA9IEZMQUdT IH0sCj4KPiArwqDCoMKgIHsgTlVMTCB9Cj4KPiArfTsKPgo+ICsKPgo+ICtBVkZJTFRFUl9ERUZJ TkVfQ0xBU1MoeWF6Zik7Cj4KPiArCj4KPiArc3RhdGljIGNvbnN0IEFWRmlsdGVyUGFkIGF2Zmls dGVyX3ZmX3lhemZfaW5wdXRzW10gPSB7Cj4KPiArwqDCoMKgIHsKPgo+ICvCoMKgwqDCoMKgwqDC oCAubmFtZcKgwqDCoMKgwqDCoMKgwqAgPSAiZGVmYXVsdCIsCj4KPiArwqDCoMKgwqDCoMKgwqAg LnR5cGXCoMKgwqDCoMKgwqDCoMKgID0gQVZNRURJQV9UWVBFX1ZJREVPLAo+Cj4gK8KgwqDCoMKg wqDCoMKgIC5maWx0ZXJfZnJhbWUgPSBmaWx0ZXJfZnJhbWUsCj4KPiArwqDCoMKgIH0sCj4KPiAr fTsKPgo+ICsKPgo+ICtzdGF0aWMgY29uc3QgQVZGaWx0ZXJQYWQgYXZmaWx0ZXJfdmZfeWF6Zl9v dXRwdXRzW10gPSB7Cj4KPiArwqDCoMKgIHsKPgo+ICvCoMKgwqDCoMKgwqDCoCAubmFtZcKgwqDC oMKgwqDCoMKgwqAgPSAiZGVmYXVsdCIsCj4KPiArwqDCoMKgwqDCoMKgwqAgLnR5cGXCoMKgwqDC oMKgwqDCoMKgID0gQVZNRURJQV9UWVBFX1ZJREVPLAo+Cj4gK8KgwqDCoMKgwqDCoMKgIC5jb25m aWdfcHJvcHMgPSBjb25maWdfcHJvcHMsCj4KPiArwqDCoMKgIH0sCj4KPiArfTsKPgo+ICsKPgo+ ICtjb25zdCBGRkZpbHRlciBmZl92Zl95YXpmID0gewo+Cj4gK8KgwqDCoCAucC5uYW1lwqDCoMKg wqDCoMKgwqDCoMKgID0gInlhemYiLAo+Cj4gK8KgwqDCoCAucC5kZXNjcmlwdGlvbsKgwqAgPSBO VUxMX0lGX0NPTkZJR19TTUFMTCgiQXBwbHkgWm9vbSAmIFBhbiBlZmZlY3Qgd2l0aCBmbG9hdGlu ZyBwb2ludCBwcmVjaXNpb24uIiksCj4KPiArwqDCoMKgIC5wLnByaXZfY2xhc3PCoMKgwqAgPSAm eWF6Zl9jbGFzcywKPgo+ICvCoMKgwqAgLnAuZmxhZ3PCoMKgwqDCoMKgwqDCoMKgID0gQVZGSUxU RVJfRkxBR19TTElDRV9USFJFQURTLAo+Cj4gK8KgwqDCoCAuaW5pdMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgPSBpbml0LAo+Cj4gK8KgwqDCoCAucHJpdl9zaXplwqDCoMKgwqDCoMKgID0gc2l6ZW9m KFlBWkZDb250ZXh0KSwKPgo+ICvCoMKgwqAgLnVuaW5pdMKgwqDCoMKgwqDCoMKgwqDCoCA9IHVu aW5pdCwKPgo+ICvCoMKgwqAgRklMVEVSX0lOUFVUUyhhdmZpbHRlcl92Zl95YXpmX2lucHV0cyks Cj4KPiArwqDCoMKgIEZJTFRFUl9PVVRQVVRTKGF2ZmlsdGVyX3ZmX3lhemZfb3V0cHV0cyksCj4K PiArwqDCoMKgIEZJTFRFUl9QSVhGTVRTX0FSUkFZKHBpeF9mbXRzKSwKPgo+ICt9Owo+CgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwg bWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsg YWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJq ZWN0ICJ1bnN1YnNjcmliZSIuCg==