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 D429142BFD for ; Fri, 1 Jul 2022 09:46:56 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3C79A68B84F; Fri, 1 Jul 2022 12:46:54 +0300 (EEST) Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B901968B78D for ; Fri, 1 Jul 2022 12:46:47 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 5DF57240179 for ; Fri, 1 Jul 2022 11:46:47 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id Lc65sIjkVb4L for ; Fri, 1 Jul 2022 11:46:46 +0200 (CEST) Received: from lain.khirnov.net (lain.khirnov.net [IPv6:2001:67c:1138:4306::3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "lain.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail0.khirnov.net (Postfix) with ESMTPS id 14A8F2400F5 for ; Fri, 1 Jul 2022 11:46:46 +0200 (CEST) Received: by lain.khirnov.net (Postfix, from userid 1000) id 0E7121601B2; Fri, 1 Jul 2022 11:46:46 +0200 (CEST) From: Anton Khirnov To: FFmpeg development discussions and patches In-Reply-To: <00bb01d88604$29cbc180$7d634480$@samsung.com> References: =?utf-8?q?=3CCGME20220622064904eucas1p19bbbc922c4f1b734730c48169?= =?utf-8?q?bada35a=40eucas1p1=2Esamsung=2Ecom=3E?= <00bb01d88604$29cbc180$7d634480$@samsung.com> Mail-Followup-To: FFmpeg development discussions and patches Date: Fri, 01 Jul 2022 11:46:46 +0200 Message-ID: <165666880602.10358.13818155906416078223@lain.khirnov.net> User-Agent: alot/0.8.1 MIME-Version: 1.0 Subject: Re: [FFmpeg-devel] [PATCH 2/3] Provided support for MPEG-5 EVC (Essential Video Coding) codec 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: UXVvdGluZyBEYXdpZCBLb3ppbnNraSAoMjAyMi0wNi0yMiAwODo0OTowNCkKPiAtIEFkZGVkIHhl dmUgZW5jb2RlciB3cmFwcGVyCj4gLSBBZGRlZCB4ZXZkIGRlbmNvZGVyIHdyYXBwZXIKPiAtIEFk ZGVkIGRvY3VtZW50YXRpb24gZm9yIHhldmUgYW5kIHhldmQgd3JhcHBlcnMKPiAtIEFkZGVkIHBh cnNlciBmb3IgRVZDIGZvcm1hdAo+IC0gQ2hhbmdlcyBpbiBwcm9qZWN0IGNvbmZpZ3VyYXRpb24g ZmlsZSBhbmQgbGliYXZjb2RlYyBNYWtlZmlsZQo+IAo+IFNpZ25lZC1vZmYtYnk6IERhd2lkIEtv emluc2tpIDxkLmtvemluc2tpQHNhbXN1bmcuY29tPgo+IC0tLQo+ICBjb25maWd1cmUgICAgICAg ICAgICAgICAgIHwgICA4ICsKPiAgZG9jL2RlY29kZXJzLnRleGkgICAgICAgICB8ICAyNCArKwo+ ICBkb2MvZW5jb2RlcnMudGV4aSAgICAgICAgIHwgMTEyICsrKysrKwo+ICBkb2MvZ2VuZXJhbF9j b250ZW50cy50ZXhpIHwgIDE5ICsKPiAgbGliYXZjb2RlYy9NYWtlZmlsZSAgICAgICB8ICAgMyAr Cj4gIGxpYmF2Y29kZWMvYWxsY29kZWNzLmMgICAgfCAgIDIgKwo+ICBsaWJhdmNvZGVjL2F2Y29k ZWMuaCAgICAgIHwgICAzICsKPiAgbGliYXZjb2RlYy9ldmNfcGFyc2VyLmMgICB8IDUyNyArKysr KysrKysrKysrKysrKysrKysrKysrKwo+ICBsaWJhdmNvZGVjL2xpYnhldmQuYyAgICAgIHwgNDQw ICsrKysrKysrKysrKysrKysrKysrKysKPiAgbGliYXZjb2RlYy9saWJ4ZXZlLmMgICAgICB8IDc1 MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICBsaWJhdmNvZGVjL3Bh cnNlcnMuYyAgICAgIHwgICAxICsKPiAgMTEgZmlsZXMgY2hhbmdlZCwgMTg5MiBpbnNlcnRpb25z KCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL2V2Y19wYXJzZXIuYwo+ICBjcmVh dGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy9saWJ4ZXZkLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGxpYmF2Y29kZWMvbGlieGV2ZS5jCgpOdW1lcm91cyB2aW9sYXRpb25zIG9mIG91ciBjb2Rpbmcg c3R5bGUsIHN1Y2ggYXMKLSBrZXl3b3JkcyAoaWYsIGZvciwgZXRjLikgc2hvdWxkIGJlIGZvbGxv d2VkIGJ5IGEgc3BhY2UgYmVmb3JlIHBhcmVudGhlc2VzCi0gb3BlbmluZyBicmFjZSBmb3IgYmxv Y2tzIGluc2lkZSBmdW5jdGlvbnMgc2hvdWxkIGJlIG9uIHRoZSBzYW1lIGxpbmUKICBhcyB0aGVp ciBrZXl3b3JkIChpZiwgZm9yLCBldGMuKQotIHVzZWxlc3MgZXh0cmEgcGFyZW50aGVzZXMgaW4g aWYoKXMKCkkgd2lsbCBub3QgcG9pbnQgb3V0IGVhY2ggaW5zdGFuY2UsIHBsZWFzZSBmaW5kIGFu ZCBmaXggdGhvc2UuCgo+IGRpZmYgLS1naXQgYS9kb2MvZW5jb2RlcnMudGV4aSBiL2RvYy9lbmNv ZGVycy50ZXhpCj4gaW5kZXggMTg1MGM5OWZlOS4uMjQ1ZGY2ODBkMiAxMDA2NDQKPiAtLS0gYS9k b2MvZW5jb2RlcnMudGV4aQo+ICsrKyBiL2RvYy9lbmNvZGVycy50ZXhpCj4gQEAgLTI4OTIsNiAr Mjg5MiwxMTggQEAgZmZtcGVnIC1pIGlucHV0IC1jOnYgbGlieGF2czIgLXhhdnMyLXBhcmFtcyBS ZG9xTGV2ZWw9MCBvdXRwdXQuYXZzMgo+ICBAZW5kIGV4YW1wbGUKPiAgQGVuZCB0YWJsZQo+ICAK PiArQHNlY3Rpb24gbGlieGV2ZQo+ICsKPiArZVh0cmEtZmFzdCBFc3NlbnRpYWwgVmlkZW8gRW5j b2RlciAoWEVWRSkgTVBFRy01IEVWQyBlbmNvZGVyIHdyYXBwZXIuCj4gKwo+ICtUaGlzIGVuY29k ZXIgcmVxdWlyZXMgdGhlIHByZXNlbmNlIG9mIHRoZSBsaWJ4ZXZlIGhlYWRlcnMgYW5kIGxpYnJh cnkKPiArZHVyaW5nIGNvbmZpZ3VyYXRpb24uIFlvdSBuZWVkIHRvIGV4cGxpY2l0bHkgY29uZmln dXJlIHRoZSBidWlsZCB3aXRoCj4gK0BvcHRpb257LS1lbmFibGUtbGlieGV2ZX0uCj4gKwo+ICtA ZmxvYXQgTk9URQo+ICtNYW55IGxpYnhldmUgZW5jb2RlciBvcHRpb25zIGFyZSBtYXBwZWQgdG8g RkZtcGVnIGdsb2JhbCBjb2RlYyBvcHRpb25zLAo+ICt3aGlsZSB1bmlxdWUgZW5jb2RlciBvcHRp b25zIGFyZSBwcm92aWRlZCB0aHJvdWdoIHByaXZhdGUgb3B0aW9ucy4KPiArQWRkaXRpb25hbGx5 IHRoZSB4ZXZlLXBhcmFtcyBwcml2YXRlIG9wdGlvbnMgYWxsb3dzIG9uZSB0byBwYXNzIGEgbGlz dAo+ICtvZiBrZXk9dmFsdWUgdHVwbGVzIGFzIGFjY2VwdGVkIGJ5IHRoZSBsaWJ4ZXZlIEBjb2Rl e3BhcnNlX3hldmVfcGFyYW1zfSBmdW5jdGlvbi4KPiArQGVuZCBmbG9hdAo+ICsKPiArVGhlIHhl dmUgcHJvamVjdCB3ZWJzaXRlIGlzIGF0IEB1cmx7aHR0cHM6Ly9naXRodWIuY29tL21wZWc1L3hl dmV9Lgo+ICsKPiArQHN1YnNlY3Rpb24gT3B0aW9ucwo+ICsKPiArVGhlIGZvbGxvd2luZyBvcHRp b25zIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGxpYnhldmUgd3JhcHBlci4KPiArVGhlIHhldmUtZXF1 aXZhbGVudCBvcHRpb25zIG9yIHZhbHVlcyBhcmUgbGlzdGVkIGluIHBhcmVudGhlc2VzIGZvciBl YXN5IG1pZ3JhdGlvbi4KPiArCj4gK0BmbG9hdCBOT1RFCj4gK1RvIHJlZHVjZSB0aGUgZHVwbGlj YXRpb24gb2YgZG9jdW1lbnRhdGlvbiwgb25seSB0aGUgcHJpdmF0ZSBvcHRpb25zCj4gK2FuZCBz b21lIG90aGVycyByZXF1aXJpbmcgc3BlY2lhbCBhdHRlbnRpb24gYXJlIGRvY3VtZW50ZWQgaGVy ZS4gRm9yCj4gK3RoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSB1bmRvY3VtZW50ZWQgZ2VuZXJpYyBv cHRpb25zLCBzZWUKPiArQHJlZntjb2RlYy1vcHRpb25zLCx0aGUgQ29kZWMgT3B0aW9ucyBjaGFw dGVyfS4KPiArQGVuZCBmbG9hdAo+ICsKPiArQGZsb2F0IE5PVEUKPiArVG8gZ2V0IGEgbW9yZSBh Y2N1cmF0ZSBhbmQgZXh0ZW5zaXZlIGRvY3VtZW50YXRpb24gb2YgdGhlIGxpYnhldmUgb3B0aW9u cywKPiAraW52b2tlIHRoZSBjb21tYW5kICBAY29kZXt4ZXZlX2FwcCAtLWhlbHB9IG9yIGNvbnN1 bHQgdGhlIGxpYnhldmUgZG9jdW1lbnRhdGlvbi4KPiArQGVuZCBmbG9hdAo+ICsKPiArQHRhYmxl IEBvcHRpb24KPiArQGl0ZW0gYiAoQGVtcGh7Yml0cmF0ZX0pCj4gK1NldCB0YXJnZXQgdmlkZW8g Yml0cmF0ZSBpbiBiaXRzL3MuCj4gK05vdGUgdGhhdCBGRm1wZWfDouKCrOKEonMgYiBvcHRpb24g aXMgZXhwcmVzc2VkIGluIGJpdHMvcywgd2hpbGUgeGV2ZcOi4oKs4oSicyBiaXRyYXRlIGlzIGlu IGtpbG9iaXRzL3MuCgpMb29rcyBicm9rZW4uCgo+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2xp YnhldmUuYyBiL2xpYmF2Y29kZWMvbGlieGV2ZS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBp bmRleCAwMDAwMDAwMDAwLi5lMTE1Y2U2M2QyCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYmF2 Y29kZWMvbGlieGV2ZS5jCj4gKy8qKgo+ICsgKiBUaGUgc3RydWN0dXJlIHN0b3JlcyBhbGwgdGhl IHN0YXRlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGluc3RhbmNlIG9mIFhldmUgTVBFRy01IEVWQyBl bmNvZGVyCj4gKyAqLwo+ICt0eXBlZGVmIHN0cnVjdCBYZXZlQ29udGV4dCB7Cj4gKyAgICBjb25z dCBBVkNsYXNzICpjbGFzczsKPiArCj4gKyAgICBYRVZFIGlkOyAgICAgICAgICAgIC8vIFhFVkUg aW5zdGFuY2UgaWRlbnRpZmllcgo+ICsgICAgWEVWRV9DRFNDIGNkc2M7ICAgICAvLyBjb2Rpbmcg cGFyYW1ldGVycyBpLmUgcHJvZmlsZSwgd2lkdGggJiBoZWlnaHQgb2YgaW5wdXQgZnJhbWUsIG51 bSBvZiB0aGVyYWRzLCBmcmFtZSByYXRlIC4uLgo+ICsgICAgWEVWRV9CSVRCIGJpdGI7ICAgICAv LyBiaXRzdHJlYW0gYnVmZmVyIChvdXRwdXQpCj4gKyAgICBYRVZFX1NUQVQgc3RhdDsgICAgIC8v IGVuY29kaW5nIHN0YXR1cyAob3V0cHV0KQo+ICsgICAgWEVWRV9JTUdCIGltZ2I7ICAgICAvLyBp bWFnZSBidWZmZXIgKGlucHV0KQo+ICsKPiArICAgIFN0YXRlIHN0YXRlOyAgICAgICAgLy8gZW5j b2RlciBzdGF0ZSAoc2tpcHBpbmcsIGVuY29kaW5nLCBidW1waW5nKQo+ICsKPiArICAgIC8vIENo cm9tYSBzdWJzYW1wbGluZwo+ICsgICAgaW50IHdpZHRoX2x1bWE7Cj4gKyAgICBpbnQgaGVpZ2h0 X2x1bWE7Cj4gKyAgICBpbnQgd2lkdGhfY2hyb21hOwo+ICsgICAgaW50IGhlaWdodF9jaHJvbWE7 CgpBbGwgdGhlc2UgYXJlIG9ubHkgdXNlZCBpbiBpbml0LCBubyBuZWVkIHRvIHN0b3JlIHRoZW0g aW4gdGhlIGNvbnRleHQuCgo+ICsvKioKPiArICogR2V0cyBYZXZlIHByZS1kZWZpbmVkIHByZXNl dAo+ICsgKgo+ICsgKiBAcGFyYW0gcHJlc2V0IHN0cmluZyBkZXNjcmliaW5nIFhldmUgZW5jb2Rl ciBwcmVzZXQgKGZhc3QsIG1lZGl1bSwgc2xvdywgcGxhY2VibykKPiArICogQHJldHVybiBYRVZF IHByZS1kZWZpbmVkIHByb2ZpbGUgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVy ZQo+ICsgKi8KPiArc3RhdGljIGludCBnZXRfcHJlc2V0X2lkKGNvbnN0IGNoYXIgKnByZXNldCkK PiArewo+ICsgICAgaWYoKCFzdHJjbXAocHJlc2V0LCAiZmFzdCIpKSkKPiArICAgICAgICByZXR1 cm4gWEVWRV9QUkVTRVRfRkFTVDsKPiArICAgIGVsc2UgaWYgKCFzdHJjbXAocHJlc2V0LCAibWVk aXVtIikpCj4gKyAgICAgICAgcmV0dXJuIFhFVkVfUFJFU0VUX01FRElVTTsKPiArICAgIGVsc2Ug aWYgKCFzdHJjbXAocHJlc2V0LCAic2xvdyIpKQo+ICsgICAgICAgIHJldHVybiBYRVZFX1BSRVNF VF9TTE9XOwo+ICsgICAgZWxzZSBpZiAoIXN0cmNtcChwcmVzZXQsICJwbGFjZWJvIikpCj4gKyAg ICAgICAgcmV0dXJuIFhFVkVfUFJFU0VUX1BMQUNFQk87Cj4gKyAgICBlbHNlCj4gKyAgICAgICAg cmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiArfQoKVGhpcyBwYXJzaW5nIGlzIHVubmVjZXNzYXJ5 LCBjaGFuZ2UgdGhlIHJlbGV2YW50IG9wdGlvbiBpbnRvIGFuIGludCBhbmQKYWRkIG5hbWVkIGNv bnN0YW50cyBmb3IgaXQgKHNlZSBlLmcuICJjb2RlciIgaW4gbGlieDI2NC5jIGFuZCBtYW55Cm90 aGVycykuCgpTYW1lIGZvciB0dW5lLgoKPiArLyoqCj4gKyAqIENvbnZlcnQgRkZtcGVnIHBpeGVs IGZvcm1hdCAoQVZQaXhlbEZvcm1hdCkgaW50byBYRVZFIHByZS1kZWZpbmVkIGNvbG9yIHNwYWNl Cj4gKyAqCj4gKyAqIEBwYXJhbVtpbl0gcHhfZm10IHBpeGVsIGZvcm1hdCAoQHNlZSBodHRwczov L2ZmbXBlZy5vcmcvZG94eWdlbi90cnVuay9waXhmbXRfOGguaHRtbCNhOWE4ZTMzNWNmM2JlNDcy MDQyYmM5ZjBjZjgwY2Q0YzUpCj4gKyAqCj4gKyAqIEByZXR1cm4gWEVWRSBwcmUtZGVmaW5lZCBj b2xvciBzcGFjZSAoQHNlZSB4ZXZlLmgpIG9uIHN1Y2Nlc3MsIFhFVkVfQ0ZfVU5LTk9XTiBvbiBm YWlsdXJlCj4gKyAqLwo+ICtzdGF0aWMgaW50IHhldmVfY29sb3Jfc3BhY2UoZW51bSBBVlBpeGVs Rm9ybWF0IGF2X3BpeF9mbXQpCgpJSVVDIHRoZSAieGV2ZV8iIG5hbWVzcGFjZSBpcyB1c2VkIGJ5 IHRoZSBsaWJyYXJ5LCBzbyB3ZSBzaG91bGQgbm90CmRlY2xhcmUgYW55IHN1Y2ggbmFtZXMgb3Vy c2VsdmVzLiBVc2UgImxpYnhldmVfIiBvciBzb21ldGhpbmcuCgo+ICsvKioKPiArICogUGFyc2Ug OiBzZXBhcmF0ZWQgbGlzdCBvZiBrZXk9dmFsdWUgcGFyYW1ldGVycwo+ICsgKgo+ICsgKiBAcGFy YW1baW5dIGF2Y3R4IGNvbnRleHQgZm9yIGxvZ2dlcgo+ICsgKiBAcGFyYW1baW5dIGtleQo+ICsg KiBAcGFyYW1baW5dIHZhbHVlCj4gKyAqIEBwYXJhbVtvdXRdIGNkc2MgY29udGFpbnMgYWxsIFhl dmUgTVBFRy01IEVWQyBlbmNvZGVyIGVuY29kZXIgcGFyYW1ldGVycyB0aGF0Cj4gKyAqICAgICAg ICAgICAgICAgICAgc2hvdWxkIGJlIGluaXRpYWxpemVkIGJlZm9yZSB0aGUgZW5jb2RlciBpcyB1 c2UKPiArICoKPiArICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG9uIGZh aWx1cmUKPiArICovCj4gK3N0YXRpYyBpbnQgcGFyc2VfeGV2ZV9wYXJhbXMoQVZDb2RlY0NvbnRl eHQgKmF2Y3R4LCBjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlLCBYRVZFX0NEU0Mq IGNkc2MpCgpXaGF0IGlzIHRoZSBwb2ludCBvZiBwYXJzaW5nIG9wdGlvbnMgaGVyZSBpbnN0ZWFk IG9mIGRlY2xhcmluZyB0aGVtIGFzCkFWT3B0aW9ucz8gRXNwZWNpYWxseSB3aGVuIHZidi1idWZz aXplIGNhbiBhbHJlYWR5IGJlIHNldCB1c2luZyB0aGUKZ2xvYmFsICJidWZzaXplIiBvcHRpb24u Cgo+ICsgICAgeGV2ZV9jb2xvcl9mbXQoYXZjdHgtPnBpeF9mbXQsICZ4ZWN0eC0+Y29sb3JfZm9y bWF0KTsKPiArCj4gKyNpZiBBVl9IQVZFX0JJR0VORElBTgo+ICsgICAgY2RzYy0+cGFyYW0uY3Mg PSBYRVZFX0NTX1NFVCh4ZWN0eC0+Y29sb3JfZm9ybWF0LCBjZHNjLT5wYXJhbS5jb2RlY19iaXRf ZGVwdGgsIDEpOwo+ICsjZWxzZQo+ICsgICAgY2RzYy0+cGFyYW0uY3MgPSBYRVZFX0NTX1NFVCh4 ZWN0eC0+Y29sb3JfZm9ybWF0LCBjZHNjLT5wYXJhbS5jb2RlY19iaXRfZGVwdGgsIDApOwo+ICsj ZW5kaWYKCmp1c3QgcGFzcyBBVl9IQVZFX0JJR0VORElBTiBhcyB0aGUgbGFzdCBtYWNybyBwYXJh bWV0ZXIsIG5vIG5lZWQgZm9yCiNpZnMKCj4gK3N0YXRpYyBpbnQgc2V0X2V4dHJhX2NvbmZpZyhB VkNvZGVjQ29udGV4dCogYXZjdHgsIFhFVkUgaWQsIFhldmVDb250ZXh0ICpjdHgpCj4gK3sKPiAr ICAgIGludCByZXQsIHNpemUsIHZhbHVlOwo+ICsgICAgc2l6ZSA9IDQ7Cj4gKwo+ICsgICAgLy8g ZW1iZWQgU0VJIG1lc3NhZ2VzIGlkZW50aWZ5aW5nIGVuY29kZXIgcGFyYW1ldGVycyBhbmQgY29t bWFuZCBsaW5lIGFyZ3VtZW50cwo+ICsgICAgLy8gLSAwOiBvZmZcbiIKPiArICAgIC8vIC0gMTog ZW1pdCBzZWkgaW5mbyIKPiArICAgIC8vCj4gKyAgICAvLyBTRUkgLSBTdXBwbGVtZW50YWwgZW5o YW5jZW1lbnQgaW5mb3JtYXRpb24gY29udGFpbnMgaW5mb3JtYXRpb24KPiArICAgIC8vIHRoYXQg aXMgbm90IG5lY2Vzc2FyeSB0byBkZWNvZGUgdGhlIHNhbXBsZXMgb2YgY29kZWQgcGljdHVyZXMg ZnJvbSBWQ0wgTkFMIHVuaXRzLgo+ICsgICAgLy8gU29tZSBTRUkgbWVzc2FnZSBpbmZvcm1hdGlv biBpcyByZXF1aXJlZCB0byBjaGVjayBiaXRzdHJlYW0gY29uZm9ybWFuY2UKPiArICAgIC8vIGFu ZCBmb3Igb3V0cHV0IHRpbWluZyBkZWNvZGVyIGNvbmZvcm1hbmNlLgo+ICsgICAgLy8gQHNlZSBJ U09fSUVDXzIzMDk0LTFfMjAyMCA3LjQuMy41Cj4gKyAgICAvLyBAc2VlIElTT19JRUNfMjMwOTQt MV8yMDIwIEFubmV4IEQKPiArICAgIHJldCA9IHhldmVfY29uZmlnKGlkLCBYRVZFX0NGR19TRVRf U0VJX0NNRCwgJnZhbHVlLCAmc2l6ZSk7IC8vIHNlaV9jbWRfaW5mbwoKSXMgdGhpcyBub3QgcmVh ZGluZyB2YWx1ZSwgd2hpY2ggaXMgdW5pbml0aWFsaXplZD8KCj4gKy8qKgo+ICsgICogRW5jb2Rl IHJhdyBkYXRhIGZyYW1lIGludG8gRVZDIHBhY2tldAo+ICsgICoKPiArICAqIEBwYXJhbVtpbl0g YXZjdHggY29kZWMgY29udGV4dAo+ICsgICogQHBhcmFtW291dF0gcGt0IG91dHB1dCBBVlBhY2tl dCBjb250YWluaW5nIGVuY29kZWQgZGF0YQo+ICsgICogQHBhcmFtW2luXSBmcmFtZSBBVkZyYW1l IGNvbnRhaW5pbmcgdGhlIHJhdyBkYXRhIHRvIGJlIGVuY29kZWQKPiArICAqIEBwYXJhbVtvdXRd IGdvdF9wYWNrZXQgZW5jb2RlciBzZXRzIHRvIDAgb3IgMSB0byBpbmRpY2F0ZSB0aGF0IGEKPiAr ICAqICAgICAgICAgICAgICAgICAgICAgICAgIG5vbi1lbXB0eSBwYWNrZXQgd2FzIHJldHVybmVk IGluIHBrdAo+ICsgICoKPiArICAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJv ciBjb2RlIG9uIGZhaWx1cmUKPiArICAqLwo+ICtzdGF0aWMgaW50IGxpYnhldmVfZW5jb2RlKEFW Q29kZWNDb250ZXh0ICphdmN0eCwgQVZQYWNrZXQgKmF2cGt0LAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IEFWRnJhbWUgKmZyYW1lLCBpbnQgKmdvdF9wYWNrZXQpCj4gK3sKPiAr ICAgIFhldmVDb250ZXh0ICp4ZWN0eCA9ICBhdmN0eC0+cHJpdl9kYXRhOwo+ICsgICAgaW50ICBy ZXQgPSAtMTsKPiArICAgIGludCB4ZXZlX2NzOwo+ICsKPiArICAgIGlmKHhlY3R4LT5zdGF0ZSA9 PSBTVEFURV9TS0lQUElORyAmJiBmcmFtZSApIHsKPiArICAgICAgICB4ZWN0eC0+c3RhdGUgPSBT VEFURV9FTkNPRElORzsgLy8gRW50ZXJpbmcgZW5jb2RpbmcgcHJvY2Vzcwo+ICsgICAgfSBlbHNl IGlmKHhlY3R4LT5zdGF0ZSA9PSBTVEFURV9FTkNPRElORyAmJiBmcmFtZSA9PSBOVUxMKSB7CgpU aGlzIHN0YXRlIHN3aXRjaGluZyBsb29rcyB3cm9uZy4KCmZyYW1lIHdpbGwgYmUgTlVMTCBvbmx5 IGF0IHRoZSBlbmQgb2YgZW5jb2RpbmcuIEl0IHNob3VsZCBuZXZlciBoYXBwZW4KdGhhdCBsaWJ4 ZXZlX2VuY29kZSgpIGlzIGNhbGxlZCB3aXRoIGZyYW1lPT1OVUxMIGFuZCB0aGVuIGxhdGVyIHdp dGgKZnJhbWUhPU5VTEwuCgpBbHNvLCB0aGUgbG9naWMgbWlnaHQgYmUgc2ltcGxlciBpZiB5b3Ug dXNlZCB0aGUgcmVjZWl2ZV9wYWNrZXQgY2FsbGJhY2sKcmF0aGVyIHRoYW4gZW5jb2RlLgoKPiAr ICAgICAgICBpZiAoc2V0dXBfYnVtcGluZyh4ZWN0eC0+aWQpID09IDApCj4gKyAgICAgICAgICAg IHhlY3R4LT5zdGF0ZSA9IFNUQVRFX0JVTVBJTkc7ICAvLyBFbnRlcmluZyBidW1waW5nIHByb2Nl c3MKPiArICAgICAgICBlbHNlIHsKPiArICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0df RVJST1IsICJGYWlsZWQgdG8gc2V0dXAgYnVtcGluZ1xuIik7Cj4gKyAgICAgICAgICAgIHhlY3R4 LT5zdGF0ZSA9IFNUQVRFX1NLSVBQSU5HOwo+ICsgICAgICAgIH0KPiArICAgIH0KPiArCj4gKyAg ICBpZih4ZWN0eC0+c3RhdGUgPT0gU1RBVEVfRU5DT0RJTkcpIHsKPiArICAgICAgICBjb25zdCBB VlBpeEZtdERlc2NyaXB0b3IgKnBpeGVsX2ZtdF9kZXNjID0gYXZfcGl4X2ZtdF9kZXNjX2dldCAo ZnJhbWUtPmZvcm1hdCk7Cj4gKyAgICAgICAgaWYoIXBpeGVsX2ZtdF9kZXNjKSB7Cj4gKyAgICAg ICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBwaXhlbCBmb3JtYXQg ZGVzY3JpcHRvciBmb3IgcGl4ZWwgZm9ybWF0OiAlc1xuIiwgYXZfZ2V0X3BpeF9mbXRfbmFtZShh dmN0eC0+cGl4X2ZtdCkpOwo+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFU QTsKPiArICAgICAgICB9CgpUaGlzIHNlZW1zIHVudXNlZC4KPiArCj4gKyAgICAgICAgeGV2ZV9j cyA9IHhldmVfY29sb3Jfc3BhY2UoYXZjdHgtPnBpeF9mbXQpOwo+ICsgICAgICAgIGlmKHhldmVf Y3MgIT0gWEVWRV9DU19ZQ0JDUjQyMCAmJiB4ZXZlX2NzICE9IFhFVkVfQ1NfWUNCQ1I0MjBfMTBM RSkgewo+ICsgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkludmFsaWQg cGl4ZWwgZm9ybWF0OiAlc1xuIiwgYXZfZ2V0X3BpeF9mbXRfbmFtZShhdmN0eC0+cGl4X2ZtdCkp Owo+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKPiArICAgICAgICB9 CgpUaGlzIHNob3VsZCBiZSBkb25lIG9uY2UgZHVyaW5nIGVuY29kZXIgaW5pdC4KQWxzbyBkZWNs YXJpbmcgYSBsaXN0IG9mIHN1cHBvcnRlZCBwaXhlbCBmb3JtYXRzIGluIHRoZSBGRkNvZGVjIHN0 cnVjdApndWFyYW50ZWVzIHRoYXQgeW91IHdpbGwgb25seSBnZXQgb25lIG9mIHRob3NlIGZvcm1h dHMsIHNvIHlvdSBkb24ndApuZWVkIHRvIGNoZWNrIGZvciBpdCB5b3Vyc2VsZi4KCj4gKwo+ICsg ICAgICAgIHsKPiArICAgICAgICAgICAgaW50IGk7Cj4gKyAgICAgICAgICAgIFhFVkVfSU1HQiAq aW1nYiA9IE5VTEw7Cj4gKwo+ICsgICAgICAgICAgICBpbWdiID0gJnhlY3R4LT5pbWdiOwo+ICsK PiArICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGltZ2ItPm5wOyBpKyspIHsKPiArICAgICAg ICAgICAgICAgIGltZ2ItPmFbaV0gPSBmcmFtZS0+ZGF0YVtpXTsKPiArICAgICAgICAgICAgICAg IGltZ2ItPnNbaV0gPSBmcmFtZS0+bGluZXNpemVbaV07Cj4gKyAgICAgICAgICAgIH0KCkhvdyBk b2VzIHRoZSBvd25lcnNoaXAgc2VtYW50aWNzIHdvcmsgaGVyZT8gRG9lcyBsaWJ4ZXZlIG1ha2Ug YSBjb3B5PwoKPiArICAgICAgICAgICAgaWYoeGVjdHgtPmlkID09IE5VTEwpIHsKPiArICAgICAg ICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBYRVZFIGVuY29k ZXJcbiIpOwo+ICsgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cj4g KyAgICAgICAgICAgIH0KCkNhbiB0aGlzIGhhcHBlbj8KCj4gKwo+ICsgICAgICAgICAgICBpbWdi LT50c1swXSA9IGZyYW1lLT5wdHM7Cj4gKyAgICAgICAgICAgIGltZ2ItPnRzWzFdID0gMDsKCldp bGwgYSBwcm9wZXIgZHRzIHZhbHVlIGJlIGdlbmVyYXRlZCBieSB0aGUgbGlicmFyeT8KCi0tIApB bnRvbiBLaGlybm92Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0 cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNj cmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZt cGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K