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 79EA94E789 for ; Fri, 11 Jul 2025 19:05:57 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 4607369015E; Fri, 11 Jul 2025 22:05:52 +0300 (EEST) Received: from mail-ed1-f53.google.com (mail-ed1-f53.google.com [209.85.208.53]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id EF79868DF79 for ; Fri, 11 Jul 2025 22:05:45 +0300 (EEST) Received: by mail-ed1-f53.google.com with SMTP id 4fb4d7f45d1cf-6070293103cso3709158a12.0 for ; Fri, 11 Jul 2025 12:05:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1752260745; x=1752865545; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=8LOE1FK7mnC/x06IuqrP16dG7z8R3CuW+/yyK8gdgRw=; b=gFVLnrgH3Rq9j/UALINgrumoe2GyDwuMbDcs0tmSGw060Bl+75606/kDPgqsmR8MH9 jKJnlNo1a3cUojmJt7Q7u+o6a/sf+Bu6y9YAW3sJym6U9MeN59gUR+R6TzM1ylOEcuPH 3mSzAtW/E68r9UuGilH3V0jtwNGsJjC02DjOVLLF5DGR9c2eFhIcuSAhdKDkeNKyNXQJ rANX875UZiY+e7SfabuLlWndQrfuwLrsG95WWRVxF8F4NUwB2+pWtkqT8TwReMThC2d/ ETPWBnb5NWtspP2qPx/B2ICDKfmv02nskYRma4C9ickQJucqqKsdRHglpHLLwA9bda4/ AoIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752260745; x=1752865545; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=8LOE1FK7mnC/x06IuqrP16dG7z8R3CuW+/yyK8gdgRw=; b=xBXOd51wiePdjgziwrCBQCTohBZxjZQbcUYH4BsQ/H/eCmEa1d6S/a7Z6TpiJ0ufq/ StEDNFkXzhiwgc5pfQ46E4fpCcY9dhR4dZhUwfFhqIR9C4Fkmw5lE4ERs6MqKW2taDyn lOOvcUXv94QuSV8TItQh5V5p6/jHzAXVtsSRZsvYV+gsD4fs4C8JZ+Pu2F2BP8RnJe9b Mzbl6iTq+YhFovvUy0cRnQiPV6AS09ydFdy/Fd2r+lqLiOcSHLeNpG73OLbMQkd9JA5z fYrgkQ0BzwbbGbSDluhDTwDqbs1GDfXpBtB2jHkgHb+2zpL4ED7dE9t8Jcl/EhloeGSl Oktw== X-Gm-Message-State: AOJu0YwXaBYeP9M40+Q4uq0/ASW8cKtHoHab5FH/a+T2CDUlqP5cp16m akFwloJPr2ZA696l1dokz7mh5Jq1+wXK5tl/IbCzYt+u6UI1xGJvwobxxOzNEg== X-Gm-Gg: ASbGnctlUF4yhLfiHTL3LoPe3OenbG++hb1z9hJs/XYynV2clUDcpZmJMqkzJeC91TY 2ynOxDxyUS90qcF1utjBH7jfj0bvy7pvlRa2whH4HUTV+dneP1J/nHH+bRRb3cU8LnxsDSEOznM 3uAqWGY2k9bSfzoQu9m7cIk3gR+4sXLyg8iiL8npclgZ1jK79bIEvpG7pj2QeYyDi9PCRIj69PX mv09PonrFYuYvfhpv9xZP3ha0/6gWc8HZnb4N/pAWZmmHKVP8ugY9km5RTk4SQLlA9PNCJFhCtk XoJ1K4NOq5FP/yZT25EsCdvZDzrCHqKWmaaPEfqrkcd1XBee70475Xf9lCfhfZ31ips7hEtlLVa b6T4CCaUPv6BWwggVZePykgJHivy1nixW1JZrHcEwiY97Gijb17DhMkXA14cmofi79EUMd78Ct1 8EJbOYv6TdtzFMdAz3JQLuYzs5atgND3K7oU6L X-Google-Smtp-Source: AGHT+IEW5E8pZtXVrYU4BeEHxQEKItnskRAHt7hjAjhMAF/V+sdpba9fz1E7jBYwSPnQ2obqlFeWcQ== X-Received: by 2002:a05:6402:13d0:b0:607:5987:5b90 with SMTP id 4fb4d7f45d1cf-611e7c2920dmr4057041a12.11.1752260744728; Fri, 11 Jul 2025 12:05:44 -0700 (PDT) Received: from [192.168.178.143] (p200301023701fa0039c61cc86b66e99e.dip0.t-ipconnect.de. [2003:102:3701:fa00:39c6:1cc8:6b66:e99e]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-611f6f3be91sm872179a12.26.2025.07.11.12.05.42 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 11 Jul 2025 12:05:42 -0700 (PDT) From: Marvin Scholz To: FFmpeg development discussions and patches Date: Fri, 11 Jul 2025 21:05:41 +0200 X-Mailer: MailMate Free Mode (2.0r6222) Message-ID: <26C57989-F117-424B-A6D4-CF66BC5229DA@gmail.com> In-Reply-To: <20250711090708.2156378-1-vpalmisano@gmail.com> References: <20250711090708.2156378-1-vpalmisano@gmail.com> MIME-Version: 1.0 Subject: Re: [FFmpeg-devel] [PATCH] Whisper audio 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-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: CgpPbiAxMSBKdWwgMjAyNSwgYXQgMTE6MDcsIFZpdHRvcmlvIFBhbG1pc2FubyB3cm90ZToKCj4g SXQgYWRkcyBhIG5ldyBhdWRpbyBmaWx0ZXIgZm9yIHJ1bm5pbmcgYXVkaW8gdHJhbnNjcmlwdGlv bnMgd2l0aCB0aGUgd2hpc3BlciBtb2RlbC4KPiBEb2N1bWVudGF0aW9uIGFuZCBleGFtcGxlcyBh cmUgaW5jbHVkZWQgaW50byB0aGUgcGF0Y2guCj4KPiBTaWduZWQtb2ZmLWJ5OiBWaXR0b3JpbyBQ YWxtaXNhbm8gPHZwYWxtaXNhbm9AZ21haWwuY29tPgo+IC0tLQo+ICBjb25maWd1cmUgICAgICAg ICAgICAgICAgfCAgIDUgKwo+ICBkb2MvZmlsdGVycy50ZXhpICAgICAgICAgfCAxMDUgKysrKysr KysrCj4gIGxpYmF2ZmlsdGVyL01ha2VmaWxlICAgICB8ICAgMiArCj4gIGxpYmF2ZmlsdGVyL2Fm X3doaXNwZXIuYyB8IDQ2OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK PiAgbGliYXZmaWx0ZXIvYWxsZmlsdGVycy5jIHwgICAyICsKPiAgNSBmaWxlcyBjaGFuZ2VkLCA1 ODMgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmaWx0ZXIvYWZfd2hp c3Blci5jCj4KPiBkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCj4gaW5kZXggMmNj YWZlN2MyMC4uNTczZGZjNjdkYyAxMDA3NTUKPiAtLS0gYS9jb25maWd1cmUKPiArKysgYi9jb25m aWd1cmUKPiBAQCAtMzM3LDYgKzMzNyw3IEBAIEV4dGVybmFsIGxpYnJhcnkgc3VwcG9ydDoKPiAg ICAtLWVuYWJsZS12YXBvdXJzeW50aCAgICAgZW5hYmxlIFZhcG91clN5bnRoIGRlbXV4ZXIgW25v XQo+ICAgIC0tZGlzYWJsZS14bGliICAgICAgICAgICBkaXNhYmxlIHhsaWIgW2F1dG9kZXRlY3Rd Cj4gICAgLS1kaXNhYmxlLXpsaWIgICAgICAgICAgIGRpc2FibGUgemxpYiBbYXV0b2RldGVjdF0K PiArICAtLWVuYWJsZS13aGlzcGVyICAgICAgICAgZW5hYmxlIHdoaXNwZXIgZmlsdGVyIFtub10K Pgo+ICAgIFRoZSBmb2xsb3dpbmcgbGlicmFyaWVzIHByb3ZpZGUgdmFyaW91cyBoYXJkd2FyZSBh Y2NlbGVyYXRpb24gZmVhdHVyZXM6Cj4gICAgLS1kaXNhYmxlLWFtZiAgICAgICAgICAgIGRpc2Fi bGUgQU1GIHZpZGVvIGVuY29kaW5nIGNvZGUgW2F1dG9kZXRlY3RdCj4gQEAgLTIwMDMsNiArMjAw NCw3IEBAIEVYVEVSTkFMX0xJQlJBUllfTElTVD0iCj4gICAgICBwb2NrZXRzcGhpbngKPiAgICAg IHZhcG91cnN5bnRoCj4gICAgICB2dWxrYW5fc3RhdGljCj4gKyAgICB3aGlzcGVyCj4gICIKPgo+ ICBIV0FDQ0VMX0FVVE9ERVRFQ1RfTElCUkFSWV9MSVNUPSIKPiBAQCAtNDA1OSw2ICs0MDYxLDcg QEAgeHN0YWNrX3Fzdl9maWx0ZXJfZGVwcz0ibGlibWZ4Igo+ICB4c3RhY2tfcXN2X2ZpbHRlcl9z ZWxlY3Q9InFzdnZwcCIKPiAgcGFkX3ZhYXBpX2ZpbHRlcl9kZXBzPSJ2YWFwaV8xIgo+ICBkcmF3 Ym94X3ZhYXBpX2ZpbHRlcl9kZXBzPSJ2YWFwaV8xIgo+ICt3aGlzcGVyX2ZpbHRlcl9kZXBzPSJ3 aGlzcGVyIgo+Cj4gICMgZXhhbXBsZXMKPiAgYXZpb19odHRwX3NlcnZlX2ZpbGVzX2RlcHM9ImF2 Zm9ybWF0IGF2dXRpbCBmb3JrIgo+IEBAIC03MTA4LDYgKzcxMTEsOCBAQCBlbmFibGVkIGxpYnZv X2FtcndiZW5jICAgICYmIHJlcXVpcmUgbGlidm9fYW1yd2JlbmMgdm8tYW1yd2JlbmMvZW5jX2lm LmggRV9JRl9pbgo+ICBlbmFibGVkIGxpYnZvcmJpcyAgICAgICAgICYmIHJlcXVpcmVfcGtnX2Nv bmZpZyBsaWJ2b3JiaXMgdm9yYmlzIHZvcmJpcy9jb2RlYy5oIHZvcmJpc19pbmZvX2luaXQgJiYK PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlX3BrZ19jb25maWcgbGlidm9y YmlzZW5jIHZvcmJpc2VuYyB2b3JiaXMvdm9yYmlzZW5jLmggdm9yYmlzX2VuY29kZV9pbml0Cj4K PiArZW5hYmxlZCB3aGlzcGVyICAgICAgICAgICAmJiByZXF1aXJlX3BrZ19jb25maWcgd2hpc3Bl ciAid2hpc3BlciA+PSAxLjcuNSIgd2hpc3Blci5oIHdoaXNwZXJfaW5pdF9mcm9tX2ZpbGVfd2l0 aF9wYXJhbXMKPiArCj4gIGVuYWJsZWQgbGlidnB4ICAgICAgICAgICAgJiYgewo+ICAgICAgZW5h YmxlZCBsaWJ2cHhfdnA4X2RlY29kZXIgJiYgewo+ICAgICAgICAgIGNoZWNrX3BrZ19jb25maWcg bGlidnB4X3ZwOF9kZWNvZGVyICJ2cHggPj0gMS40LjAiICJ2cHgvdnB4X2RlY29kZXIuaCB2cHgv dnA4ZHguaCIgdnB4X2NvZGVjX3ZwOF9keCB8fAo+IGRpZmYgLS1naXQgYS9kb2MvZmlsdGVycy50 ZXhpIGIvZG9jL2ZpbHRlcnMudGV4aQo+IGluZGV4IGVkMjk1NmZlNzUuLjdhZWFiMTQ5NDggMTAw NjQ0Cj4gLS0tIGEvZG9jL2ZpbHRlcnMudGV4aQo+ICsrKyBiL2RvYy9maWx0ZXJzLnRleGkKPiBA QCAtNzY4Miw2ICs3NjgyLDExMSBAQCBUaGVyZSBhcmUgNiBzYW1wbGVzIGF0IC00IGRCLCA2MiBh dCAtNSBkQiwgMjg2IGF0IC02IGRCLCBldGMuCj4gIEluIG90aGVyIHdvcmRzLCByYWlzaW5nIHRo ZSB2b2x1bWUgYnkgKzQgZEIgZG9lcyBub3QgY2F1c2UgYW55IGNsaXBwaW5nLAo+ICByYWlzaW5n IGl0IGJ5ICs1IGRCIGNhdXNlcyBjbGlwcGluZyBmb3IgNiBzYW1wbGVzLCBldGMuCj4KPiArQGFu Y2hvcnt3aGlzcGVyfQo+ICtAc2VjdGlvbiB3aGlzcGVyCj4gKwo+ICtJdCBydW5zIGEgYXV0b21h dGljIHNwZWVjaCByZWNvZ25pdGlvbiB1c2luZyB0aGUgT3BlbkFJ4oCZcyBXaGlzcGVyIG1vZGVs Lgo+ICsKPiArSXQgcmVxdWlyZXMgdGhlIHdoaXNwZXIuY3BwIGxpYnJhcnkgKGh0dHBzOi8vZ2l0 aHViLmNvbS9nZ21sLW9yZy93aGlzcGVyLmNwcCkKPiArYXMgYSBwcmUtcmVxdWlzaXRlLiBBZnRl ciBpbnN0YWxsaW5nIHRoZSBsaWJyYXJ5IGl0IGNhbiBiZSBlbmFibGVkIHVzaW5nOgo+ICtAY29k ZXsuL2NvbmZpZ3VyZSAtLWVuYWJsZS13aGlzcGVyfS4KPiArCj4gK1RoZSBmaWx0ZXIgaGFzIGZv bGxvd2luZyBvcHRpb25zOgo+ICsKPiArQHRhYmxlIEBvcHRpb24KPiArQGl0ZW0gbW9kZWwKPiAr VGhlIGZpbGUgcGF0aCBvZiB0aGUgZG93bmxvYWRlZCB3aGlzcGVyLmNwcCBtb2RlbCAobWFuZGF0 b3J5KS4KPiArCj4gK0BpdGVtIGxhbmd1YWdlCj4gK1RoZSBsYW5ndWFnZSB0byB1c2UgZm9yIHRy YW5zY3JpcHRpb24gKCdhdXRvJyBmb3IgYXV0by1kZXRlY3QpLgo+ICtEZWZhdWx0IHZhbHVlOiBA Y29kZXsiYXV0byJ9Cj4gKwo+ICtAaXRlbSBxdWV1ZQo+ICtUaGUgbWF4aW11bSBzaXplIGluIG1p bGxpc2Vjb25kcyB0aGF0IHdpbGwgYmUgcXVldWVkIGludG8gdGhlIGZpbHRlciBiZWZvcmUKPiAr cHJvY2Vzc2luZyB0aGUgYXVkaW8gd2l0aCB3aGlzcGVyCj4gK0RlZmF1bHQgdmFsdWU6IEBjb2Rl eyIzMDAwIn0KPiArCj4gK0BpdGVtIHVzZV9ncHUKPiArSWYgdGhlIEdQVSBzdXBwb3J0IHNob3Vs ZCBiZSBlbmFibGVkLgo+ICtEZWZhdWx0IHZhbHVlOiBAY29kZXsidHJ1ZSJ9Cj4gKwo+ICtAaXRl bSBncHVfZGV2aWNlCj4gK1RoZSBHUFUgZGV2aWNlIHRvIHVzZS4KPiArRGVmYXVsdCB2YWx1ZTog QGNvZGV7IjAifQo+ICsKPiArQGl0ZW0gdGhyZWFkcwo+ICtUaGUgbnVtYmVyIG9mIHRocmVhZHMg dG8gdXNlLgo+ICtEZWZhdWx0IHZhbHVlOiBAY29kZXsiNCJ9Cj4gKwo+ICtAaXRlbSBkZXN0aW5h dGlvbgo+ICtJZiBzZXQsIHRoZSB0cmFuc2NyaXB0aW9uIG91dHB1dCB3aWxsIGJlIHNlbnQgdG8g dGhlIHNwZWNpZmllZCBmaWxlIG9yIFVSTAo+ICsodXNlIG9uZSBvZiB0aGUgRkZtcGVnIEFWSU8g cHJvdG9jb2xzKTsgb3RoZXJ3aXNlLCB0aGUgb3V0cHV0IHdpbGwgYmUgbG9nZ2VkIGFzCj4gK2lu Zm8gbWVzc2FnZXMuCj4gK1RoZSBvdXRwdXQgd2lsbCBhbHNvIGJlIHNldCBpbiB0aGUgImxhdmZp LndoaXNwZXIudGV4dCIgZnJhbWUgbWV0YWRhdGEuCj4gKwo+ICtAaXRlbSBmb3JtYXQKPiArVGhl IGRlc3RpbmF0aW9uIGZvcm1hdCBzdHJpbmc7IGl0IGNvdWxkIGJlICJ0ZXh0IiAob25seSB0aGUg dHJhbnNjcmliZWQgdGV4dAo+ICt3aWxsIGJlIHNlbnQgdG8gdGhlIGRlc3RpbmF0aW9uKSwgInNy dCIgKHN1YnRpdGxlIGZvcm1hdCkgb3IgImpzb24iLgo+ICtEZWZhdWx0IHZhbHVlOiBAY29kZXsi dGV4dCJ9Cj4gKwo+ICtAaXRlbSB2YWRfbW9kZWwKPiArUGF0aCB0byB0aGUgVkFEIG1vZGVsIGZp bGUuIElmIHNldCwgdGhlIGZpbHRlciB3aWxsIGxvYWQgYW4gYWRkaXRpb25hbCB2b2ljZQo+ICth Y3Rpdml0eSBkZXRlY3Rpb24gbW9kdWxlIChodHRwczovL2dpdGh1Yi5jb20vc25ha2VyczQvc2ls ZXJvLXZhZCkgdGhhdCB3aWxsIGJlCj4gK3VzZWQgdG8gZnJhZ21lbnQgdGhlIGF1ZGlvIHF1ZXVl OyB1c2UgdGhpcyBvcHRpb24gc2V0dGluZyBhIHZhbGlkIHBhdGggb2J0YWluZWQKPiArZnJvbSB0 aGUgd2hpc3Blci5jcHAgcmVwb3NpdG9yeSAoZS5nLiAiLi4vd2hpc3Blci5jcHAvbW9kZWxzL2dn bWwtc2lsZXJvLXY1LjEuMi5iaW4iKQo+ICthbmQgaW5jcmVhc2UgdGhlIHF1ZXVlIHBhcmFtZXRl ciB0byBhbiBoaWdoZXIgdmFsdWUgKGUuZy4gMTAwMDApCj4gKwo+ICtAaXRlbSB2YWRfdGhyZXNo b2xkCj4gK1RoZSBWQUQgdGhyZXNob2xkIHRvIHVzZS4KPiArRGVmYXVsdCB2YWx1ZTogQGNvZGV7 IjAuNSJ9Cj4gKwo+ICtAaXRlbSB2YWRfbWluX3NwZWVjaF9kdXJhdGlvbgo+ICtUaGUgbWluaW11 bSBWQUQgc3BlYWtpbmcgZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzLgo+ICtEZWZhdWx0IHZhbHVl OiBAY29kZXsiNTAifQo+ICsKPiArQGl0ZW0gdmFkX21pbl9zaWxlbmNlX2R1cmF0aW9uCj4gK1Ro ZSBtaW5pbXVtIFZBRCBzaWxlbmNlIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcy4KPiArRGVmYXVs dCB2YWx1ZTogQGNvZGV7IjUwMCJ9Cj4gKwo+ICtAZW5kIHRhYmxlCj4gKwo+ICtAc3Vic2VjdGlv biBFeGFtcGxlcwo+ICtAaXRlbWl6ZQo+ICsKPiArQGl0ZW0KPiArUnVuIGEgdHJhbnNjcmlwdGlv biB3aXRoIHNydCBmaWxlIGdlbmVyYXRpb246Cj4gK0BleGFtcGxlCj4gK2ZmbXBlZyAtaSBpbnB1 dC5tcDQgLXZuIC1hZiAid2hpc3Blcj1tb2RlbD0uLi93aGlzcGVyLmNwcC9tb2RlbHMvZ2dtbC1i YXNlLmVuLmJpblwKPiArOmxhbmd1YWdlPWVuXAo+ICs6cXVldWU9MzAwMFwKPiArOmRlc3RpbmF0 aW9uPW91dHB1dC5zcnRcCj4gKzpmb3JtYXQ9c3J0IiAtZiBudWxsIC0KPiArQGVuZCBleGFtcGxl Cj4gKwo+ICtAaXRlbQo+ICtSdW4gYSB0cmFuc2NyaXB0aW9uIGFuZCBzZW5kIHRoZSBvdXRwdXQg aW4gSlNPTiBmb3JtYXQgdG8gYW4gSFRUUCBzZXJ2aWNlOgo+ICtAZXhhbXBsZQo+ICtmZm1wZWcg LWkgaW5wdXQubXA0IC12biAtYWYgIndoaXNwZXI9bW9kZWw9Li4vd2hpc3Blci5jcHAvbW9kZWxz L2dnbWwtYmFzZS5lbi5iaW5cCj4gKzpsYW5ndWFnZT1lblwKPiArOnF1ZXVlPTMwMDBcCj4gKzpk ZXN0aW5hdGlvbj1odHRwXFw6Ly9sb2NhbGhvc3RcXDozMDAwXAo+ICs6Zm9ybWF0PWpzb24nIC1m IG51bGwgLQo+ICtAZW5kIGV4YW1wbGUKPiArCj4gK0BpdGVtCj4gK1RyYW5zY3JpYmUgdGhlIG1p Y3JvcGhvbmUgaW5wdXQgdXNpbmcgdGhlIFZBRCBvcHRpb246Cj4gK0BleGFtcGxlCj4gK2ZmbXBl ZyAtbG9nbGV2ZWwgd2FybmluZyAtZiBwdWxzZSAtaSBkZWZhdWx0IFwKPiArLWFmICdoaWdocGFz cz1mPTIwMCxsb3dwYXNzPWY9MzAwMCx3aGlzcGVyPW1vZGVsPS4uL3doaXNwZXIuY3BwL21vZGVs cy9nZ21sLW1lZGl1bS5iaW5cCj4gKzpsYW5ndWFnZT1lblwKPiArOnF1ZXVlPTEwMDAwXAo+ICs6 ZGVzdGluYXRpb249LVwKPiArOmZvcm1hdD1qc29uXAo+ICs6dmFkX21vZGVsPS4uL3doaXNwZXIu Y3BwL21vZGVscy9nZ21sLXNpbGVyby12NS4xLjIuYmluJyAtZiBudWxsIC0KPiArQGVuZCBleGFt cGxlCj4gKwo+ICtAZW5kIGl0ZW1pemUKPiArCj4gIEBjIG1hbiBlbmQgQVVESU8gRklMVEVSUwo+ Cj4gIEBjaGFwdGVyIEF1ZGlvIFNvdXJjZXMKPiBkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvTWFr ZWZpbGUgYi9saWJhdmZpbHRlci9NYWtlZmlsZQo+IGluZGV4IDllOTE1M2Y1YjAuLmUxMzM0MjJj YTQgMTAwNjQ0Cj4gLS0tIGEvbGliYXZmaWx0ZXIvTWFrZWZpbGUKPiArKysgYi9saWJhdmZpbHRl ci9NYWtlZmlsZQo+IEBAIC0xODgsNiArMTg4LDggQEAgT0JKUy0kKENPTkZJR19ISUxCRVJUX0ZJ TFRFUikgICAgICAgICAgICAgICAgKz0gYXNyY19oaWxiZXJ0Lm8KPiAgT0JKUy0kKENPTkZJR19T SU5DX0ZJTFRFUikgICAgICAgICAgICAgICAgICAgKz0gYXNyY19zaW5jLm8KPiAgT0JKUy0kKENP TkZJR19TSU5FX0ZJTFRFUikgICAgICAgICAgICAgICAgICAgKz0gYXNyY19zaW5lLm8KPgo+ICtP QkpTLSQoQ09ORklHX1dISVNQRVJfRklMVEVSKSAgICAgICAgICAgICAgICArPSBhZl93aGlzcGVy Lm8KPiArCj4gIE9CSlMtJChDT05GSUdfQU5VTExTSU5LX0ZJTFRFUikgICAgICAgICAgICAgICs9 IGFzaW5rX2FudWxsc2luay5vCj4KPiAgIyB2aWRlbyBmaWx0ZXJzCj4gZGlmZiAtLWdpdCBhL2xp YmF2ZmlsdGVyL2FmX3doaXNwZXIuYyBiL2xpYmF2ZmlsdGVyL2FmX3doaXNwZXIuYwo+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMC4uYWYwM2U4NTZlMgo+IC0tLSAvZGV2 L251bGwKPiArKysgYi9saWJhdmZpbHRlci9hZl93aGlzcGVyLmMKPiBAQCAtMCwwICsxLDQ2OSBA QAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjUgVml0dG9yaW8gUGFsbWlzYW5vCj4gKyAq Cj4gKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KPiArICoKPiArICogRkZtcGVnIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+ICsgKiBtb2Rp ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UKPiArICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlcgo+ICsgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPiArICoKPiArICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKPiArICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCj4gKyAqCj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQo+ICsgKiBhbG9uZyB3aXRoIEZGbXBlZzsg aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAo+ICsg KiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEg VVNBCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPHN0ZGlvLmg+Cj4gKyNpbmNsdWRlIDxzdGRpbnQu aD4KPiArI2luY2x1ZGUgPHN0ZGxpYi5oPgo+ICsKPiArI2luY2x1ZGUgPHdoaXNwZXIuaD4KPiAr Cj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZ1dGlsLmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwv b3B0LmgiCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvY2hhbm5lbF9sYXlvdXQuaCIKPiArI2luY2x1 ZGUgImxpYmF2dXRpbC9zYW1wbGVmbXQuaCIKPiArI2luY2x1ZGUgImxpYmF2ZmlsdGVyL2F2Zmls dGVyLmgiCj4gKyNpbmNsdWRlICJsaWJhdmZpbHRlci9hdWRpby5oIgo+ICsjaW5jbHVkZSAibGli YXZ1dGlsL21lbS5oIgo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2F2c3RyaW5nLmgiCj4gKyNpbmNs dWRlICJsaWJhdnV0aWwvaW50ZXJuYWwuaCIKPiArI2luY2x1ZGUgImxpYmF2Zm9ybWF0L2F2aW8u aCIKPiArI2luY2x1ZGUgImxpYmF2dXRpbC90aHJlYWQuaCIKPiArCj4gKyNpbmNsdWRlICJmb3Jt YXRzLmgiCj4gKwo+ICt0eXBlZGVmIHN0cnVjdCBXaGlzcGVyQ29udGV4dCB7Cj4gKyAgICBjb25z dCBBVkNsYXNzICpjbGFzczsKPiArICAgIGNoYXIgKm1vZGVsX3BhdGg7Cj4gKyAgICBjaGFyICps YW5ndWFnZTsKPiArICAgIGludCB0aHJlYWRzOwo+ICsgICAgYm9vbCB1c2VfZ3B1Owo+ICsgICAg aW50IGdwdV9kZXZpY2U7Cj4gKyAgICBjaGFyICp2YWRfbW9kZWxfcGF0aDsKPiArICAgIGZsb2F0 IHZhZF90aHJlc2hvbGQ7Cj4gKyAgICBpbnQgdmFkX21pbl9zcGVlY2hfZHVyYXRpb247Cj4gKyAg ICBpbnQgdmFkX21pbl9zaWxlbmNlX2R1cmF0aW9uOwo+ICsKPiArICAgIGludCBxdWV1ZTsKPiAr ICAgIGNoYXIgKmRlc3RpbmF0aW9uOwo+ICsgICAgY2hhciAqZm9ybWF0Owo+ICsKPiArICAgIHN0 cnVjdCB3aGlzcGVyX2NvbnRleHQgKmN0eF93c3A7Cj4gKyAgICBzdHJ1Y3Qgd2hpc3Blcl92YWRf Y29udGV4dCAqY3R4X3ZhZDsKPiArICAgIHN0cnVjdCB3aGlzcGVyX3ZhZF9wYXJhbXMgdmFkX3Bh cmFtczsKPiArCj4gKyAgICBmbG9hdCAqYXVkaW9fYnVmZmVyOwo+ICsgICAgaW50IGF1ZGlvX2J1 ZmZlcl9xdWV1ZV9zaXplOwo+ICsgICAgaW50IGF1ZGlvX2J1ZmZlcl9maWxsX3NpemU7Cj4gKyAg ICBpbnQgYXVkaW9fYnVmZmVyX3ZhZF9zaXplOwo+ICsKPiArICAgIGludCBlb2Y7Cj4gKyAgICBp bnQ2NF90IG5leHRfcHRzOwo+ICsKPiArICAgIEFWSU9Db250ZXh0ICphdmlvX2NvbnRleHQ7Cj4g KyAgICBpbnQgaW5kZXg7Cj4gKyAgICBpbnQ2NF90IHRpbWVzdGFtcDsKPiArfSBXaGlzcGVyQ29u dGV4dDsKPiArCj4gK3N0YXRpYyB2b2lkIGNiX2xvZyhlbnVtIGdnbWxfbG9nX2xldmVsIGxldmVs LCBjb25zdCBjaGFyICp0ZXh0LCB2b2lkICp1c2VyX2RhdGEpCj4gK3sKPiArICAgIEFWRmlsdGVy Q29udGV4dCAqY3R4ID0gKEFWRmlsdGVyQ29udGV4dCAqKSB1c2VyX2RhdGE7Cj4gKyAgICBzd2l0 Y2ggKGxldmVsKSB7Cj4gKyAgICBjYXNlIEdHTUxfTE9HX0xFVkVMX0VSUk9SOgo+ICsgICAgICAg IGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIiVzIiwgdGV4dCk7Cj4gKyAgICAgICAgYnJlYWs7 Cj4gKyAgICBjYXNlIEdHTUxfTE9HX0xFVkVMX1dBUk46Cj4gKyAgICAgICAgYXZfbG9nKGN0eCwg QVZfTE9HX1dBUk5JTkcsICIlcyIsIHRleHQpOwo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAgY2Fz ZSBHR01MX0xPR19MRVZFTF9JTkZPOgo+ICsgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19JTkZP LCAiJXMiLCB0ZXh0KTsKPiArICAgICAgICBicmVhazsKPiArICAgIGNhc2UgR0dNTF9MT0dfTEVW RUxfREVCVUc6Cj4gKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVHLCAiJXMiLCB0ZXh0 KTsKPiArICAgICAgICBicmVhazsKPiArICAgIH0KPiArfQo+ICsKPiArc3RhdGljIGludCBpbml0 KEFWRmlsdGVyQ29udGV4dCAqY3R4KQo+ICt7Cj4gKyAgICBXaGlzcGVyQ29udGV4dCAqd2N0eCA9 IGN0eC0+cHJpdjsKPiArCj4gKyAgICBzdGF0aWMgQVZPbmNlIGluaXRfc3RhdGljX29uY2UgPSBB Vl9PTkNFX0lOSVQ7Cj4gKyAgICBmZl90aHJlYWRfb25jZSgmaW5pdF9zdGF0aWNfb25jZSwgZ2dt bF9iYWNrZW5kX2xvYWRfYWxsKTsKPiArCj4gKyAgICB3aGlzcGVyX2xvZ19zZXQoY2JfbG9nLCBj dHgpOwo+ICsKPiArICAgIC8vIEluaXQgd2hpc3BlciBjb250ZXh0Cj4gKyAgICBpZiAoIXdjdHgt Pm1vZGVsX3BhdGgpIHsKPiArICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJObyB3 aGlzcGVyIG1vZGVsIHBhdGggc3BlY2lmaWVkLiBVc2UgdGhlICdtb2RlbCcgb3B0aW9uLlxuIik7 Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiArICAgIH0KPiArCj4gKyAgICBz dHJ1Y3Qgd2hpc3Blcl9jb250ZXh0X3BhcmFtcyBwYXJhbXMgPSB3aGlzcGVyX2NvbnRleHRfZGVm YXVsdF9wYXJhbXMoKTsKPiArICAgIHBhcmFtcy51c2VfZ3B1ID0gd2N0eC0+dXNlX2dwdTsKPiAr ICAgIHBhcmFtcy5ncHVfZGV2aWNlID0gd2N0eC0+Z3B1X2RldmljZTsKPiArCj4gKyAgICB3Y3R4 LT5jdHhfd3NwID0gd2hpc3Blcl9pbml0X2Zyb21fZmlsZV93aXRoX3BhcmFtcyh3Y3R4LT5tb2Rl bF9wYXRoLCBwYXJhbXMpOwo+ICsgICAgaWYgKHdjdHgtPmN0eF93c3AgPT0gTlVMTCkgewo+ICsg ICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBpbml0aWFsaXplIHdo aXNwZXIgY29udGV4dCBmcm9tIG1vZGVsOiAlc1xuIiwgd2N0eC0+bW9kZWxfcGF0aCk7Cj4gKyAg ICAgICAgcmV0dXJuIEFWRVJST1IoRUlPKTsKPiArICAgIH0KPiArICAgIC8vIEluaXQgVkFEIG1v ZGVsIGNvbnRleHQKPiArICAgIGlmICh3Y3R4LT52YWRfbW9kZWxfcGF0aCkgewo+ICsgICAgICAg IHN0cnVjdCB3aGlzcGVyX3ZhZF9jb250ZXh0X3BhcmFtcyBjdHhfcGFyYW1zID0gd2hpc3Blcl92 YWRfZGVmYXVsdF9jb250ZXh0X3BhcmFtcygpOwo+ICsgICAgICAgIGN0eF9wYXJhbXMubl90aHJl YWRzID0gd2N0eC0+dGhyZWFkczsKPiArICAgICAgICAvLyBjdHhfcGFyYW1zLnVzZV9ncHUgPSB3 Y3R4LT51c2VfZ3B1OyBUT0RPIChzZWU6IHdoaXNwZXJfdmFkX2luaXRfY29udGV4dCkKPiArICAg ICAgICBjdHhfcGFyYW1zLmdwdV9kZXZpY2UgPSB3Y3R4LT5ncHVfZGV2aWNlOwo+ICsgICAgICAg IHdjdHgtPmN0eF92YWQgPSB3aGlzcGVyX3ZhZF9pbml0X2Zyb21fZmlsZV93aXRoX3BhcmFtcyh3 Y3R4LT52YWRfbW9kZWxfcGF0aCwgY3R4X3BhcmFtcyk7Cj4gKwo+ICsgICAgICAgIHdjdHgtPnZh ZF9wYXJhbXMgPSB3aGlzcGVyX3ZhZF9kZWZhdWx0X3BhcmFtcygpOwo+ICsgICAgICAgIHdjdHgt PnZhZF9wYXJhbXMudGhyZXNob2xkID0gd2N0eC0+dmFkX3RocmVzaG9sZDsKPiArICAgICAgICB3 Y3R4LT52YWRfcGFyYW1zLm1pbl9zcGVlY2hfZHVyYXRpb25fbXMgPSB3Y3R4LT52YWRfbWluX3Nw ZWVjaF9kdXJhdGlvbjsKPiArICAgICAgICB3Y3R4LT52YWRfcGFyYW1zLm1pbl9zaWxlbmNlX2R1 cmF0aW9uX21zID0gd2N0eC0+dmFkX21pbl9zaWxlbmNlX2R1cmF0aW9uOwo+ICsgICAgICAgIHdj dHgtPnZhZF9wYXJhbXMubWF4X3NwZWVjaF9kdXJhdGlvbl9zID0gd2N0eC0+YXVkaW9fYnVmZmVy X3F1ZXVlX3NpemUgLyAxMDAwLjBmOwo+ICsgICAgICAgIHdjdHgtPnZhZF9wYXJhbXMuc3BlZWNo X3BhZF9tcyA9IDA7Cj4gKyAgICAgICAgd2N0eC0+dmFkX3BhcmFtcy5zYW1wbGVzX292ZXJsYXAg PSAwOwo+ICsgICAgfQo+ICsgICAgLy8gSW5pdCBidWZmZXIKPiArICAgIHdjdHgtPmF1ZGlvX2J1 ZmZlcl9xdWV1ZV9zaXplID0gV0hJU1BFUl9TQU1QTEVfUkFURSAqIHdjdHgtPnF1ZXVlIC8gMTAw MDsKPiArICAgIHdjdHgtPmF1ZGlvX2J1ZmZlciA9IGF2X21hbGxvYyh3Y3R4LT5hdWRpb19idWZm ZXJfcXVldWVfc2l6ZSAqIHNpemVvZihmbG9hdCkpOwo+ICsgICAgaWYgKCF3Y3R4LT5hdWRpb19i dWZmZXIpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiArCj4gKyAgICB3Y3R4 LT5uZXh0X3B0cyA9IEFWX05PUFRTX1ZBTFVFOwo+ICsKPiArICAgIGlmICh3Y3R4LT5kZXN0aW5h dGlvbiAmJiBzdHJjbXAoIiIsIHdjdHgtPmRlc3RpbmF0aW9uKSkgewo+ICsgICAgICAgIGNvbnN0 IGNoYXIgKmRzdCA9IHdjdHgtPmRlc3RpbmF0aW9uOwo+ICsgICAgICAgIGlmICghc3RyY21wKCIt IiwgZHN0KSkKPiArICAgICAgICAgICAgZHN0ID0gInBpcGU6MSI7Cj4gKyAgICAgICAgaW50IHJl dCA9IGF2aW9fb3Blbigmd2N0eC0+YXZpb19jb250ZXh0LCBkc3QsIEFWSU9fRkxBR19XUklURSk7 Cj4gKwo+ICsgICAgICAgIGlmIChyZXQgPCAwKSB7Cj4gKyAgICAgICAgICAgIGF2X2xvZyhjdHgs IEFWX0xPR19FUlJPUiwgIkNvdWxkIG5vdCBvcGVuICVzOiAlc1xuIiwgd2N0eC0+ZGVzdGluYXRp b24sIGF2X2VycjJzdHIocmV0KSk7Cj4gKyAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICAg ICAgfQo+ICsKPiArICAgICAgICB3Y3R4LT5hdmlvX2NvbnRleHQtPmRpcmVjdCA9IEFWSU9fRkxB R19ESVJFQ1Q7Cj4gKyAgICB9Cj4gKwo+ICsgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0lORk8sCj4g KyAgICAgICAgICAgIldoaXNwZXIgZmlsdGVyIGluaXRpYWxpemVkOiBtb2RlbDogJXMgbGFuZzog JXMgcXVldWU6ICVkIG1zXG4iLAo+ICsgICAgICAgICAgIHdjdHgtPm1vZGVsX3BhdGgsIHdjdHgt Pmxhbmd1YWdlLCB3Y3R4LT5xdWV1ZSk7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIHVuaW5pdChBVkZpbHRlckNvbnRleHQgKmN0eCkKPiArewo+ICsgICAgV2hp c3BlckNvbnRleHQgKndjdHggPSBjdHgtPnByaXY7Cj4gKwo+ICsgICAgaWYgKHdjdHgtPmF1ZGlv X2J1ZmZlcl9maWxsX3NpemUgPiAwKSB7Cj4gKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX1dB Uk5JTkcsCj4gKyAgICAgICAgICAgICAgICJSZW1haW5pbmcgYXVkaW8gYnVmZmVyICVkIHNhbXBs ZXMgKCVkIHNlY29uZHMpIGFmdGVyIHN0b3BwaW5nXG4iLAo+ICsgICAgICAgICAgICAgICB3Y3R4 LT5hdWRpb19idWZmZXJfZmlsbF9zaXplLCB3Y3R4LT5hdWRpb19idWZmZXJfZmlsbF9zaXplIC8g V0hJU1BFUl9TQU1QTEVfUkFURSk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKHdjdHgtPmN0eF92 YWQpIHsKPiArICAgICAgICB3aGlzcGVyX3ZhZF9mcmVlKHdjdHgtPmN0eF92YWQpOwo+ICsgICAg ICAgIHdjdHgtPmN0eF92YWQgPSBOVUxMOwo+ICsgICAgfQo+ICsKPiArICAgIGlmICh3Y3R4LT5j dHhfd3NwKSB7Cj4gKyAgICAgICAgd2hpc3Blcl9mcmVlKHdjdHgtPmN0eF93c3ApOwo+ICsgICAg ICAgIHdjdHgtPmN0eF93c3AgPSBOVUxMOwo+ICsgICAgfQo+ICsKPiArICAgIGF2X2ZyZWVwKCZ3 Y3R4LT5hdWRpb19idWZmZXIpOwo+ICsKPiArICAgIGlmICh3Y3R4LT5hdmlvX2NvbnRleHQpCj4g KyAgICAgICAgYXZpb19jbG9zZXAoJndjdHgtPmF2aW9fY29udGV4dCk7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIHJ1bl90cmFuc2NyaXB0aW9uKEFWRmlsdGVyQ29udGV4dCAqY3R4LCBBVkRpY3Rp b25hcnkgKiptZXRhZGF0YSwgaW50IGVuZF9wb3MpCj4gK3sKPiArICAgIFdoaXNwZXJDb250ZXh0 ICp3Y3R4ID0gY3R4LT5wcml2Owo+ICsgICAgZW5kX3BvcyA9IEZGTUlOKGVuZF9wb3MsIHdjdHgt PmF1ZGlvX2J1ZmZlcl9maWxsX3NpemUpOwo+ICsKPiArICAgIGlmICghd2N0eC0+Y3R4X3dzcCB8 fCBlbmRfcG9zID09IDApCj4gKyAgICAgICAgcmV0dXJuOwo+ICsKPiArICAgIGZsb2F0IGR1cmF0 aW9uID0gKGZsb2F0KSBlbmRfcG9zIC8gV0hJU1BFUl9TQU1QTEVfUkFURTsKPiArCj4gKyAgICBh dl9sb2coY3R4LCBBVl9MT0dfSU5GTywKPiArICAgICAgICAgICAicnVuIHRyYW5zY3JpcHRpb24g JWQvJWQgc2FtcGxlcyAoJS4yZiBzZWNvbmRzKS4uLlxuIiwgZW5kX3Bvcywgd2N0eC0+YXVkaW9f YnVmZmVyX2ZpbGxfc2l6ZSwgZHVyYXRpb24pOwo+ICsKPiArICAgIHN0cnVjdCB3aGlzcGVyX2Z1 bGxfcGFyYW1zIHBhcmFtcyA9IHdoaXNwZXJfZnVsbF9kZWZhdWx0X3BhcmFtcyhXSElTUEVSX1NB TVBMSU5HX0dSRUVEWSk7Cj4gKyAgICBwYXJhbXMubGFuZ3VhZ2UgPSB3Y3R4LT5sYW5ndWFnZTsK PiArICAgIHBhcmFtcy5uX3RocmVhZHMgPSB3Y3R4LT50aHJlYWRzOwo+ICsgICAgcGFyYW1zLnBy aW50X3NwZWNpYWwgPSAwOwo+ICsgICAgcGFyYW1zLnByaW50X3Byb2dyZXNzID0gMDsKPiArICAg IHBhcmFtcy5wcmludF9yZWFsdGltZSA9IDA7Cj4gKyAgICBwYXJhbXMucHJpbnRfdGltZXN0YW1w cyA9IDA7Cj4gKwo+ICsgICAgaWYgKHdoaXNwZXJfZnVsbCh3Y3R4LT5jdHhfd3NwLCBwYXJhbXMs IHdjdHgtPmF1ZGlvX2J1ZmZlciwgZW5kX3BvcykgIT0gMCkgewo+ICsgICAgICAgIGF2X2xvZyhj dHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBwcm9jZXNzIGF1ZGlvIHdpdGggd2hpc3Blci5j cHBcbiIpOwo+ICsgICAgICAgIHJldHVybjsKPiArICAgIH0KPiArCj4gKyAgICBjb25zdCBpbnQg bl9zZWdtZW50cyA9IHdoaXNwZXJfZnVsbF9uX3NlZ21lbnRzKHdjdHgtPmN0eF93c3ApOwo+ICsg ICAgY2hhciAqc2VnbWVudHNfdGV4dCA9IE5VTEw7Cj4gKwo+ICsgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCBuX3NlZ21lbnRzOyArK2kpIHsKPiArICAgICAgICBjb25zdCBib29sIHR1cm4gPSB3aGlz cGVyX2Z1bGxfZ2V0X3NlZ21lbnRfc3BlYWtlcl90dXJuX25leHQod2N0eC0+Y3R4X3dzcCwgaSk7 Cj4gKyAgICAgICAgY29uc3QgaW50NjRfdCB0MCA9IHdoaXNwZXJfZnVsbF9nZXRfc2VnbWVudF90 MCh3Y3R4LT5jdHhfd3NwLCBpKSAqIDEwOwo+ICsgICAgICAgIGNvbnN0IGludDY0X3QgdDEgPSB3 aGlzcGVyX2Z1bGxfZ2V0X3NlZ21lbnRfdDEod2N0eC0+Y3R4X3dzcCwgaSkgKiAxMDsKPiArICAg ICAgICBjb25zdCBjaGFyICp0ZXh0ID0gd2hpc3Blcl9mdWxsX2dldF9zZWdtZW50X3RleHQod2N0 eC0+Y3R4X3dzcCwgaSk7Cj4gKyAgICAgICAgY2hhciAqdGV4dF9jbGVhbmVkID0gYXZfc3RyaXJl cGxhY2UodGV4dCArIDEsICJbQkxBTktfQVVESU9dIiwgIiIpOwo+ICsKPiArICAgICAgICBpZiAo YXZfc3Rybmxlbih0ZXh0X2NsZWFuZWQsIDEpID09IDApIHsKPiArICAgICAgICAgICAgYXZfZnJl ZXAoJnRleHRfY2xlYW5lZCk7Cj4gKyAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsgICAgICAgIH0K PiArICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfSU5GTywgIiAgWyVsZC0lbGQlc106IFwiJXNc IlxuIiwKPiArICAgICAgICAgICAgICAgd2N0eC0+dGltZXN0YW1wICsgdDAsIHdjdHgtPnRpbWVz dGFtcCArIHQxLCB0dXJuID8gIiAodHVybikiIDogIiIsIHRleHRfY2xlYW5lZCk7Cj4gKwo+ICsg ICAgICAgIGlmIChzZWdtZW50c190ZXh0KSB7Cj4gKyAgICAgICAgICAgIGNoYXIgKm5ld190ZXh0 ID0gYXZfYXNwcmludGYoIiVzJXMiLCBzZWdtZW50c190ZXh0LCB0ZXh0X2NsZWFuZWQpOwo+ICsg ICAgICAgICAgICBhdl9mcmVlcCgmc2VnbWVudHNfdGV4dCk7Cj4gKyAgICAgICAgICAgIHNlZ21l bnRzX3RleHQgPSBuZXdfdGV4dDsKPiArICAgICAgICB9IGVsc2UKPiArICAgICAgICAgICAgc2Vn bWVudHNfdGV4dCA9IGF2X3N0cmR1cCh0ZXh0X2NsZWFuZWQpOwo+ICsKPiArICAgICAgICBpZiAo d2N0eC0+YXZpb19jb250ZXh0KSB7Cj4gKyAgICAgICAgICAgIGNvbnN0IGludDY0X3Qgc3RhcnRf dCA9IHdjdHgtPnRpbWVzdGFtcCArIHQwOwo+ICsgICAgICAgICAgICBjb25zdCBpbnQ2NF90IGVu ZF90ID0gd2N0eC0+dGltZXN0YW1wICsgdDE7Cj4gKyAgICAgICAgICAgIGNoYXIgKmJ1ZiA9IE5V TEw7Cj4gKwo+ICsgICAgICAgICAgICBpZiAoIWF2X3N0cmNhc2VjbXAod2N0eC0+Zm9ybWF0LCAi c3J0IikpIHsKPiArICAgICAgICAgICAgICAgIGJ1ZiA9Cj4gKyAgICAgICAgICAgICAgICAgICAg YXZfYXNwcmludGYKPiArICAgICAgICAgICAgICAgICAgICAoIiVkXG4lMDJsZDolMDJsZDolMDJs ZC4lMDNsZCAtLT4gJTAybGQ6JTAybGQ6JTAybGQuJTAzbGRcbiVzXG5cbiIsCj4gKyAgICAgICAg ICAgICAgICAgICAgIHdjdHgtPmluZGV4LCBzdGFydF90IC8gMzYwMDAwMCwKPiArICAgICAgICAg ICAgICAgICAgICAgKHN0YXJ0X3QgLyA2MDAwMCkgJSA2MCwgKHN0YXJ0X3QgLyAxMDAwKSAlIDYw LAo+ICsgICAgICAgICAgICAgICAgICAgICBzdGFydF90ICUgMTAwMCwgZW5kX3QgLyAzNjAwMDAw LCAoZW5kX3QgLyA2MDAwMCkgJSA2MCwKPiArICAgICAgICAgICAgICAgICAgICAgKGVuZF90IC8g MTAwMCkgJSA2MCwgZW5kX3QgJSAxMDAwLCB0ZXh0X2NsZWFuZWQpOwo+ICsgICAgICAgICAgICB9 IGVsc2UgaWYgKCFhdl9zdHJjYXNlY21wKHdjdHgtPmZvcm1hdCwgImpzb24iKSkgewo+ICsgICAg ICAgICAgICAgICAgYnVmID0gYXZfYXNwcmludGYoIntcInN0YXJ0XCI6JWxkLFwiZW5kXCI6JWxk LFwidGV4dFwiOlwiJXNcIn1cbiIsIHN0YXJ0X3QsIGVuZF90LCB0ZXh0X2NsZWFuZWQpOwo+ICsg ICAgICAgICAgICB9IGVsc2UKPiArICAgICAgICAgICAgICAgIGJ1ZiA9IGF2X3N0cmR1cCh0ZXh0 X2NsZWFuZWQpOwo+ICsKPiArICAgICAgICAgICAgaWYgKGJ1Zikgewo+ICsgICAgICAgICAgICAg ICAgYXZpb193cml0ZSh3Y3R4LT5hdmlvX2NvbnRleHQsIGJ1Ziwgc3RybGVuKGJ1ZikpOwo+ICsg ICAgICAgICAgICAgICAgYXZfZnJlZXAoJmJ1Zik7Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAg ICB9Cj4gKwo+ICsgICAgICAgIGF2X2ZyZWVwKCZ0ZXh0X2NsZWFuZWQpOwo+ICsgICAgfQo+ICsK PiArICAgIHdjdHgtPmluZGV4Kys7Cj4gKyAgICB3Y3R4LT50aW1lc3RhbXAgKz0gZHVyYXRpb24g KiAxMDAwOwo+ICsKPiArICAgIGlmIChtZXRhZGF0YSAmJiBzZWdtZW50c190ZXh0KSB7Cj4gKyAg ICAgICAgYXZfZGljdF9zZXQobWV0YWRhdGEsICJsYXZmaS53aGlzcGVyLnRleHQiLCBzZWdtZW50 c190ZXh0LCAwKTsKPiArICAgICAgICBjaGFyICpkdXJhdGlvbl90ZXh0ID0gYXZfYXNwcmludGYo IiVmIiwgZHVyYXRpb24pOwo+ICsgICAgICAgIGF2X2RpY3Rfc2V0KG1ldGFkYXRhLCAibGF2Zmku d2hpc3Blci5kdXJhdGlvbiIsIGR1cmF0aW9uX3RleHQsIEFWX0RJQ1RfRE9OVF9TVFJEVVBfVkFM KTsKPiArICAgIH0KPiArICAgIGF2X2ZyZWVwKCZzZWdtZW50c190ZXh0KTsKPiArCj4gKyAgICBt ZW1jcHkod2N0eC0+YXVkaW9fYnVmZmVyLCB3Y3R4LT5hdWRpb19idWZmZXIgKyBlbmRfcG9zLCBl bmRfcG9zICogc2l6ZW9mKGZsb2F0KSk7Cj4gKyAgICB3Y3R4LT5hdWRpb19idWZmZXJfZmlsbF9z aXplIC09IGVuZF9wb3M7Cj4gKyAgICB3Y3R4LT5hdWRpb19idWZmZXJfdmFkX3NpemUgPSB3Y3R4 LT5hdWRpb19idWZmZXJfZmlsbF9zaXplOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGZpbHRlcl9m cmFtZShBVkZpbHRlckxpbmsgKmlubGluaywgQVZGcmFtZSAqZnJhbWUpCj4gK3sKPiArICAgIEFW RmlsdGVyQ29udGV4dCAqY3R4ID0gaW5saW5rLT5kc3Q7Cj4gKyAgICBXaGlzcGVyQ29udGV4dCAq d2N0eCA9IGN0eC0+cHJpdjsKPiArICAgIEFWRmlsdGVyTGluayAqb3V0bGluayA9IGN0eC0+b3V0 cHV0c1swXTsKPiArICAgIEFWRGljdGlvbmFyeSAqKm1ldGFkYXRhID0gJmZyYW1lLT5tZXRhZGF0 YTsKPiArCj4gKyAgICBjb25zdCBpbnQgc2FtcGxlcyA9IGZyYW1lLT5uYl9zYW1wbGVzOwo+ICsg ICAgY29uc3QgZmxvYXQgKmlucHV0X2RhdGEgPSAoY29uc3QgZmxvYXQgKikgZnJhbWUtPmRhdGFb MF07Cj4gKwo+ICsgICAgaWYgKHdjdHgtPmF1ZGlvX2J1ZmZlcl9maWxsX3NpemUgKyBzYW1wbGVz ID4gd2N0eC0+YXVkaW9fYnVmZmVyX3F1ZXVlX3NpemUpIHsKPiArICAgICAgICBydW5fdHJhbnNj cmlwdGlvbihjdHgsIG1ldGFkYXRhLCB3Y3R4LT5hdWRpb19idWZmZXJfZmlsbF9zaXplKTsKPiAr ICAgIH0KPiArCj4gKyAgICBtZW1jcHkod2N0eC0+YXVkaW9fYnVmZmVyICsgd2N0eC0+YXVkaW9f YnVmZmVyX2ZpbGxfc2l6ZSwgaW5wdXRfZGF0YSwgc2FtcGxlcyAqIHNpemVvZihmbG9hdCkpOwo+ ICsgICAgd2N0eC0+YXVkaW9fYnVmZmVyX2ZpbGxfc2l6ZSArPSBzYW1wbGVzOwo+ICsKPiArICAg IGlmICh3Y3R4LT5jdHhfdmFkCj4gKyAgICAgICAgJiYgKHdjdHgtPmF1ZGlvX2J1ZmZlcl9maWxs X3NpemUgLSB3Y3R4LT5hdWRpb19idWZmZXJfdmFkX3NpemUpID49Cj4gKyAgICAgICAgV0hJU1BF Ul9TQU1QTEVfUkFURSAqICh3Y3R4LT52YWRfbWluX3NwZWVjaF9kdXJhdGlvbiArIHdjdHgtPnZh ZF9taW5fc2lsZW5jZV9kdXJhdGlvbikgLyAxMDAwKSB7Cj4gKyAgICAgICAgc3RydWN0IHdoaXNw ZXJfdmFkX3NlZ21lbnRzICpzZWdtZW50cyA9IHdoaXNwZXJfdmFkX3NlZ21lbnRzX2Zyb21fc2Ft cGxlcyh3Y3R4LT5jdHhfdmFkLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2N0eC0+dmFk X3BhcmFtcywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjdHgtPmF1ZGlvX2J1ZmZlciwK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjdHgtPmF1ZGlvX2J1ZmZlcl9maWxsX3NpemUp Owo+ICsgICAgICAgIHdjdHgtPmF1ZGlvX2J1ZmZlcl92YWRfc2l6ZSA9IHdjdHgtPmF1ZGlvX2J1 ZmZlcl9maWxsX3NpemU7Cj4gKwo+ICsgICAgICAgIGlmICghc2VnbWVudHMpIHsKPiArICAgICAg ICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiZmFpbGVkIHRvIGRldGVjdCBWQURcbiIp Owo+ICsgICAgICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgICAgIGludCBuX3NlZ21lbnRzID0gd2hp c3Blcl92YWRfc2VnbWVudHNfbl9zZWdtZW50cyhzZWdtZW50cyk7Cj4gKwo+ICsgICAgICAgICAg ICBpZiAobl9zZWdtZW50cyA+IDApIHsKPiArICAgICAgICAgICAgICAgIGNvbnN0IGludDY0X3Qg c3RhcnRfbXMgPSB3aGlzcGVyX3ZhZF9zZWdtZW50c19nZXRfc2VnbWVudF90MChzZWdtZW50cywK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBuX3NlZ21lbnRzIC0gMSkgKiAxMDsKPiArICAgICAgICAg ICAgICAgIGNvbnN0IGludDY0X3QgZW5kX21zID0gd2hpc3Blcl92YWRfc2VnbWVudHNfZ2V0X3Nl Z21lbnRfdDEoc2VnbWVudHMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fc2VnbWVudHMgLSAxKSAq IDEwOwo+ICsgICAgICAgICAgICAgICAgaW50IGVuZF9wb3MgPSAoaW50KSAoZW5kX21zICogV0hJ U1BFUl9TQU1QTEVfUkFURSAvIDEwMDApOwo+ICsKPiArICAgICAgICAgICAgICAgIGlmIChlbmRf cG9zIDwgd2N0eC0+YXVkaW9fYnVmZmVyX2ZpbGxfc2l6ZSkgewo+ICsgICAgICAgICAgICAgICAg ICAgIGF2X2xvZyhjdHgsIEFWX0xPR19JTkZPLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAiVkFEIGRldGVjdGVkICVkIHNlZ21lbnRzLCBzdGFydDogJWxkIG1zLCBlbmQ6ICVsZCBtcyAo YnVmZmVyOiAlZCBtcylcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fc2VnbWVu dHMsIHN0YXJ0X21zLCBlbmRfbXMsIDEwMDAgKiB3Y3R4LT5hdWRpb19idWZmZXJfZmlsbF9zaXpl IC8gV0hJU1BFUl9TQU1QTEVfUkFURSk7Cj4gKyAgICAgICAgICAgICAgICAgICAgcnVuX3RyYW5z Y3JpcHRpb24oY3R4LCBtZXRhZGF0YSwgZW5kX3Bvcyk7Cj4gKyAgICAgICAgICAgICAgICB9Cj4g KyAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgIHdoaXNwZXJfdmFkX2ZyZWVfc2VnbWVu dHMoc2VnbWVudHMpOwo+ICsgICAgICAgIH0KPiArICAgIH0gZWxzZSBpZiAod2N0eC0+YXVkaW9f YnVmZmVyX2ZpbGxfc2l6ZSA+PSB3Y3R4LT5hdWRpb19idWZmZXJfcXVldWVfc2l6ZSkKPiArICAg ICAgICBydW5fdHJhbnNjcmlwdGlvbihjdHgsIG1ldGFkYXRhLCB3Y3R4LT5hdWRpb19idWZmZXJf ZmlsbF9zaXplKTsKPiArCj4gKyAgICB3Y3R4LT5uZXh0X3B0cyA9IGZyYW1lLT5wdHMgKyBhdl9y ZXNjYWxlX3EoZnJhbWUtPm5iX3NhbXBsZXMsIChBVlJhdGlvbmFsKSB7Cj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgaW5saW5rLT5zYW1wbGVfcmF0 ZX0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGlu bGluay0+dGltZV9iYXNlKTsKPiArICAgIHJldHVybiBmZl9maWx0ZXJfZnJhbWUob3V0bGluaywg ZnJhbWUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHB1c2hfbGFzdF9mcmFtZShBVkZpbHRlckxp bmsgKm91dGxpbmspCj4gK3sKPiArICAgIEFWRmlsdGVyQ29udGV4dCAqY3R4ID0gb3V0bGluay0+ c3JjOwo+ICsgICAgV2hpc3BlckNvbnRleHQgKndjdHggPSBjdHgtPnByaXY7Cj4gKyAgICBBVkZy YW1lICpmcmFtZTsKPiArICAgIGludCBuX291dCA9IDE7Cj4gKwo+ICsgICAgaWYgKGN0eC0+aXNf ZGlzYWJsZWQgfHwgd2N0eC0+YXVkaW9fYnVmZmVyX2ZpbGxfc2l6ZSA9PSAwKQo+ICsgICAgICAg IHJldHVybiAwOwo+ICsgICAgZnJhbWUgPSBmZl9nZXRfYXVkaW9fYnVmZmVyKG91dGxpbmssIG5f b3V0KTsKPiArICAgIGlmICghZnJhbWUpCj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVN KTsKPiArCj4gKyAgICBhdl9zYW1wbGVzX3NldF9zaWxlbmNlKGZyYW1lLT5leHRlbmRlZF9kYXRh LCAwLCBuX291dCwgZnJhbWUtPmNoX2xheW91dC5uYl9jaGFubmVscywgZnJhbWUtPmZvcm1hdCk7 Cj4gKwo+ICsgICAgZnJhbWUtPnB0cyA9IHdjdHgtPm5leHRfcHRzOwo+ICsgICAgaWYgKHdjdHgt Pm5leHRfcHRzICE9IEFWX05PUFRTX1ZBTFVFKQo+ICsgICAgICAgIHdjdHgtPm5leHRfcHRzICs9 IGF2X3Jlc2NhbGVfcShuX291dCwgKEFWUmF0aW9uYWwpIHsKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMSwgb3V0bGluay0+c2FtcGxlX3JhdGV9Cj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgb3V0bGluay0+dGltZV9iYXNlKTsKPiAr Cj4gKyAgICBydW5fdHJhbnNjcmlwdGlvbihjdHgsICZmcmFtZS0+bWV0YWRhdGEsIHdjdHgtPmF1 ZGlvX2J1ZmZlcl9maWxsX3NpemUpOwo+ICsKPiArICAgIHJldHVybiBmZl9maWx0ZXJfZnJhbWUo b3V0bGluaywgZnJhbWUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGFjdGl2YXRlKEFWRmlsdGVy Q29udGV4dCAqY3R4KQo+ICt7Cj4gKyAgICBBVkZpbHRlckxpbmsgKmlubGluayA9IGN0eC0+aW5w dXRzWzBdOwo+ICsgICAgQVZGaWx0ZXJMaW5rICpvdXRsaW5rID0gY3R4LT5vdXRwdXRzWzBdOwo+ ICsgICAgV2hpc3BlckNvbnRleHQgKndjdHggPSBjdHgtPnByaXY7Cj4gKyAgICBpbnQ2NF90IHB0 czsKPiArICAgIGludCBzdGF0dXM7Cj4gKwo+ICsgICAgRkZfRklMVEVSX0ZPUldBUkRfU1RBVFVT X0JBQ0sob3V0bGluaywgaW5saW5rKTsKPiArCj4gKyAgICBpZiAoIXdjdHgtPmVvZiAmJiBmZl9p bmxpbmtfcXVldWVkX2ZyYW1lcyhpbmxpbmspKSB7Cj4gKyAgICAgICAgQVZGcmFtZSAqZnJhbWUg PSBOVUxMOwo+ICsgICAgICAgIGludCByZXQ7Cj4gKwo+ICsgICAgICAgIHJldCA9IGZmX2lubGlu a19jb25zdW1lX2ZyYW1lKGlubGluaywgJmZyYW1lKTsKPiArICAgICAgICBpZiAocmV0IDwgMCkK PiArICAgICAgICAgICAgcmV0dXJuIHJldDsKPiArICAgICAgICBpZiAocmV0ID4gMCkKPiArICAg ICAgICAgICAgcmV0dXJuIGZpbHRlcl9mcmFtZShpbmxpbmssIGZyYW1lKTsKPiArICAgIH0KPiAr Cj4gKyAgICBpZiAoIXdjdHgtPmVvZiAmJiBmZl9pbmxpbmtfYWNrbm93bGVkZ2Vfc3RhdHVzKGlu bGluaywgJnN0YXR1cywgJnB0cykpCj4gKyAgICAgICAgd2N0eC0+ZW9mID0gc3RhdHVzID09IEFW RVJST1JfRU9GOwo+ICsKPiArICAgIGlmICh3Y3R4LT5lb2YpIHsKPiArICAgICAgICBwdXNoX2xh c3RfZnJhbWUob3V0bGluayk7Cj4gKwo+ICsgICAgICAgIGZmX291dGxpbmtfc2V0X3N0YXR1cyhv dXRsaW5rLCBBVkVSUk9SX0VPRiwgd2N0eC0+bmV4dF9wdHMpOwo+ICsgICAgICAgIHJldHVybiAw Owo+ICsgICAgfQo+ICsKPiArICAgIEZGX0ZJTFRFUl9GT1JXQVJEX1dBTlRFRChvdXRsaW5rLCBp bmxpbmspOwo+ICsKPiArICAgIHJldHVybiBGRkVSUk9SX05PVF9SRUFEWTsKPiArfQo+ICsKPiAr c3RhdGljIGludCBxdWVyeV9mb3JtYXRzKGNvbnN0IEFWRmlsdGVyQ29udGV4dCAqY3R4LAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgQVZGaWx0ZXJGb3JtYXRzQ29uZmlnICoqY2ZnX2luLAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgQVZGaWx0ZXJGb3JtYXRzQ29uZmlnICoqY2ZnX291 dCkKPiArewo+ICsgICAgc3RhdGljIGNvbnN0IGVudW0gQVZTYW1wbGVGb3JtYXQgc2FtcGxlX2Zt dHNbXSA9IHsgQVZfU0FNUExFX0ZNVF9GTFQsIEFWX1NBTVBMRV9GTVRfTk9ORSB9Owo+ICsgICAg QVZDaGFubmVsTGF5b3V0IGNobGF5b3V0c1tdID0geyBGRl9DT1VOVDJMQVlPVVQoMSksIHsgMCB9 IH07Cj4gKyAgICBpbnQgc2FtcGxlX3JhdGVzW10gPSB7IDE2MDAwLCAtMSB9Owo+ICsgICAgaW50 IHJldDsKPiArCj4gKyAgICByZXQgPSBmZl9zZXRfY29tbW9uX2Zvcm1hdHNfZnJvbV9saXN0Mihj dHgsIGNmZ19pbiwgY2ZnX291dCwgc2FtcGxlX2ZtdHMpOwo+ICsgICAgaWYgKHJldCA8IDApCj4g KyAgICAgICAgcmV0dXJuIHJldDsKPiArCj4gKyAgICByZXQgPSBmZl9zZXRfY29tbW9uX2NoYW5u ZWxfbGF5b3V0c19mcm9tX2xpc3QyKGN0eCwgY2ZnX2luLCBjZmdfb3V0LCBjaGxheW91dHMpOwo+ ICsgICAgaWYgKHJldCA8IDApCj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiArCj4gKyAgICByZXR1 cm4gZmZfc2V0X2NvbW1vbl9zYW1wbGVyYXRlc19mcm9tX2xpc3QyKGN0eCwgY2ZnX2luLCBjZmdf b3V0LCBzYW1wbGVfcmF0ZXMpOwo+ICt9Cj4gKwo+ICsjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRv ZihXaGlzcGVyQ29udGV4dCwgeCkKPiArI2RlZmluZSBGTEFHUyBBVl9PUFRfRkxBR19BVURJT19Q QVJBTSB8IEFWX09QVF9GTEFHX0ZJTFRFUklOR19QQVJBTQo+ICsKPiArc3RhdGljIGNvbnN0IEFW T3B0aW9uIHdoaXNwZXJfb3B0aW9uc1tdID0gewo+ICsgICAgeyAibW9kZWwiLCAiUGF0aCB0byB0 aGUgd2hpc3Blci5jcHAgbW9kZWwgZmlsZSIsIE9GRlNFVChtb2RlbF9wYXRoKSwgQVZfT1BUX1RZ UEVfU1RSSU5HLC5mbGFncyA9IEZMQUdTIH0sCj4gKyAgICB7ICJsYW5ndWFnZSIsICJMYW5ndWFn ZSBmb3IgdHJhbnNjcmlwdGlvbiAoJ2F1dG8nIGZvciBhdXRvLWRldGVjdCkiLCBPRkZTRVQobGFu Z3VhZ2UpLCBBVl9PUFRfVFlQRV9TVFJJTkcsCj4gKyAgICAgey5zdHIgPSAiYXV0byJ9LC5mbGFn cyA9IEZMQUdTIH0sCj4gKyAgICB7ICJxdWV1ZSIsICJBdWRpbyBxdWV1ZSBzaXplIGluIG1pbGxp c2Vjb25kcyIsIE9GRlNFVChxdWV1ZSksIEFWX09QVF9UWVBFX0lOVCwgey5pNjQgPSAzMDAwfSwg MjAsIElOVF9NQVgsLmZsYWdzID0KPiArICAgICBGTEFHUyB9LAo+ICsgICAgeyAidXNlX2dwdSIs ICJVc2UgR1BVIGZvciBwcm9jZXNzaW5nIiwgT0ZGU0VUKHVzZV9ncHUpLCBBVl9PUFRfVFlQRV9C T09MLCB7Lmk2NCA9IDF9LCAwLCAxLC5mbGFncyA9IEZMQUdTIH0sCj4gKyAgICB7ICJncHVfZGV2 aWNlIiwgIkdQVSBkZXZpY2UgdG8gdXNlIiwgT0ZGU0VUKGdwdV9kZXZpY2UpLCBBVl9PUFRfVFlQ RV9JTlQsIHsuaTY0ID0gMH0sIDAsIElOVF9NQVgsLmZsYWdzID0gRkxBR1MgfSwKPiArICAgIHsg InRocmVhZHMiLCAiTnVtYmVyIG9mIHRocmVhZHMgdG8gdXNlIiwgT0ZGU0VUKHRocmVhZHMpLCBB Vl9PUFRfVFlQRV9JTlQsIHsuaTY0ID0gNH0sIDAsIElOVF9NQVgsLmZsYWdzID0gRkxBR1MgfSwK CkkgdGhpbmsgdGhpcyBvcHRpb24gaXMgbm90IG5lY2Vzc2FyeSBhbmQgeW91IGNhbiBqdXN0IHVz ZSB0aGUgZmlsdGVyZ3JhcGggdGhyZWFkIHNldHRpbmcgYnkKcXVlcnlpbmcgZmZfZmlsdGVyX2dl dF9uYl90aHJlYWRzKCkuCgo+ICsgICAgeyAiZGVzdGluYXRpb24iLCAiT3V0cHV0IGRlc3RpbmF0 aW9uIiwgT0ZGU0VUKGRlc3RpbmF0aW9uKSwgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0ciA9ICIi fSwuZmxhZ3MgPSBGTEFHUyB9LAo+ICsgICAgeyAiZm9ybWF0IiwgIk91dHB1dCBmb3JtYXQgKHRl eHR8c3J0fGpzb24pIiwgT0ZGU0VUKGZvcm1hdCksIEFWX09QVF9UWVBFX1NUUklORywgey5zdHIg PSAidGV4dCJ9LC5mbGFncyA9IEZMQUdTIH0sCj4gKyAgICB7ICJ2YWRfbW9kZWwiLCAiUGF0aCB0 byB0aGUgVkFEIG1vZGVsIGZpbGUiLCBPRkZTRVQodmFkX21vZGVsX3BhdGgpLCBBVl9PUFRfVFlQ RV9TVFJJTkcsLmZsYWdzID0gRkxBR1MgfSwKPiArICAgIHsgInZhZF90aHJlc2hvbGQiLCAiVkFE IHRocmVzaG9sZCIsIE9GRlNFVCh2YWRfdGhyZXNob2xkKSwgQVZfT1BUX1RZUEVfRkxPQVQsIHsu ZGJsID0gMC41fSwgMC4wLCAxLjAsLmZsYWdzID0KPiArICAgICBGTEFHUyB9LAo+ICsgICAgeyAi dmFkX21pbl9zcGVlY2hfZHVyYXRpb24iLCAiTWluaW11bSBzcGVlY2ggZHVyYXRpb24gaW4gbWls bGlzZWNvbmRzIGZvciBWQUQiLCBPRkZTRVQodmFkX21pbl9zcGVlY2hfZHVyYXRpb24pLAo+ICsg ICAgIEFWX09QVF9UWVBFX0lOVCwgey5pNjQgPSA1MH0sIDIwLCBJTlRfTUFYLC5mbGFncyA9IEZM QUdTIH0sCj4gKyAgICB7ICJ2YWRfbWluX3NpbGVuY2VfZHVyYXRpb24iLCAiTWluaW11bSBzaWxl bmNlIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcyBmb3IgVkFEIiwgT0ZGU0VUKHZhZF9taW5fc2ls ZW5jZV9kdXJhdGlvbiksCj4gKyAgICAgQVZfT1BUX1RZUEVfSU5ULCB7Lmk2NCA9IDUwMH0sIDAs IElOVF9NQVgsLmZsYWdzID0gRkxBR1MgfSwKPiArICAgIHsgTlVMTCB9CgpZb3UgYXJlIHN0aWxs IG5vdCB1c2luZyBBVl9PUFRfVFlQRV9EVVJBVElPTiBmb3IgZHVyYXRpb25zIGhlcmU/Cgo+ICt9 Owo+ICsKPiArc3RhdGljIGNvbnN0IEFWQ2xhc3Mgd2hpc3Blcl9jbGFzcyA9IHsKPiArICAgIC5j bGFzc19uYW1lID0gIndoaXNwZXIiLAo+ICsgICAgLml0ZW1fbmFtZSA9IGF2X2RlZmF1bHRfaXRl bV9uYW1lLAo+ICsgICAgLm9wdGlvbiA9IHdoaXNwZXJfb3B0aW9ucywKPiArICAgIC52ZXJzaW9u ID0gTElCQVZVVElMX1ZFUlNJT05fSU5ULAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IEFWRmls dGVyUGFkIHdoaXNwZXJfb3V0cHV0c1tdID0gewo+ICsgICAgewo+ICsgICAgIC5uYW1lID0gImRl ZmF1bHQiLAo+ICsgICAgIC50eXBlID0gQVZNRURJQV9UWVBFX0FVRElPLAo+ICsgICAgICB9LAo+ ICt9Owo+ICsKPiArY29uc3QgRkZGaWx0ZXIgZmZfYWZfd2hpc3BlciA9IHsKPiArICAgIC5wLm5h bWUgPSAid2hpc3BlciIsCj4gKyAgICAucC5kZXNjcmlwdGlvbiA9IE5VTExfSUZfQ09ORklHX1NN QUxMKCJUcmFuc2NyaWJlIGF1ZGlvIHVzaW5nIHdoaXNwZXIuY3BwLiIpLAo+ICsgICAgLnAucHJp dl9jbGFzcyA9ICZ3aGlzcGVyX2NsYXNzLAo+ICsgICAgLnAuZmxhZ3MgPSBBVkZJTFRFUl9GTEFH X01FVEFEQVRBX09OTFksCj4gKyAgICAuaW5pdCA9IGluaXQsCj4gKyAgICAudW5pbml0ID0gdW5p bml0LAo+ICsgICAgLmFjdGl2YXRlID0gYWN0aXZhdGUsCj4gKyAgICAucHJpdl9zaXplID0gc2l6 ZW9mKFdoaXNwZXJDb250ZXh0KSwKPiArICAgIEZJTFRFUl9JTlBVVFMoZmZfYXVkaW9fZGVmYXVs dF9maWx0ZXJwYWQpLAo+ICsgICAgRklMVEVSX09VVFBVVFMod2hpc3Blcl9vdXRwdXRzKSwKPiAr ICAgIEZJTFRFUl9RVUVSWV9GVU5DMihxdWVyeV9mb3JtYXRzKSwKPiArfTsKPiBkaWZmIC0tZ2l0 IGEvbGliYXZmaWx0ZXIvYWxsZmlsdGVycy5jIGIvbGliYXZmaWx0ZXIvYWxsZmlsdGVycy5jCj4g aW5kZXggNDA5MDk5YmYxZi4uZWFmMGM4ZmU2ZiAxMDA2NDQKPiAtLS0gYS9saWJhdmZpbHRlci9h bGxmaWx0ZXJzLmMKPiArKysgYi9saWJhdmZpbHRlci9hbGxmaWx0ZXJzLmMKPiBAQCAtMTYzLDYg KzE2Myw4IEBAIGV4dGVybiBjb25zdCBGRkZpbHRlciBmZl9hZl92aXJ0dWFsYmFzczsKPiAgZXh0 ZXJuIGNvbnN0IEZGRmlsdGVyIGZmX2FmX3ZvbHVtZTsKPiAgZXh0ZXJuIGNvbnN0IEZGRmlsdGVy IGZmX2FmX3ZvbHVtZWRldGVjdDsKPgo+ICtleHRlcm4gY29uc3QgRkZGaWx0ZXIgZmZfYWZfd2hp c3BlcjsKPiArCj4gIGV4dGVybiBjb25zdCBGRkZpbHRlciBmZl9hc3JjX2FldmFsc3JjOwo+ICBl eHRlcm4gY29uc3QgRkZGaWx0ZXIgZmZfYXNyY19hZmRlbGF5c3JjOwo+ICBleHRlcm4gY29uc3Qg RkZGaWx0ZXIgZmZfYXNyY19hZmlyZXFzcmM7Cj4gLS0gCj4gMi40My4wCj4KPiBfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IGZmbXBlZy1kZXZlbCBtYWls aW5nIGxpc3QKPiBmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwo+IGh0dHBzOi8vZmZtcGVnLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAo+Cj4gVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxp bmsgYWJvdmUsIG9yIGVtYWlsCj4gZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRo IHN1YmplY3QgInVuc3Vic2NyaWJlIi4KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZt cGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwK ClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwt cmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=