From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-3.7 required=3.0 tests=CHARSET_FARAWAY_HEADER, FROM_EXCESS_BASE64,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 17245C43381 for ; Wed, 27 Mar 2019 08:48:13 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 437B92075E for ; Wed, 27 Mar 2019 08:48:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732775AbfC0IsK (ORCPT ); Wed, 27 Mar 2019 04:48:10 -0400 Received: from asrmicro.com ([210.13.118.86]:52488 "EHLO barracuda.asrmicro.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1732821AbfC0IsK (ORCPT ); Wed, 27 Mar 2019 04:48:10 -0400 X-ASG-Debug-ID: 1553676474-12329d17f701570001-xx1T2L Received: from mail2012.asrmicro.com (mail2012.asrmicro.com [10.1.24.123]) by barracuda.asrmicro.com with ESMTP id 4ZaHzE49FOynVFrn; Wed, 27 Mar 2019 16:47:54 +0800 (CST) X-Barracuda-Envelope-From: qiaozhou@asrmicro.com Received: from mail2012.asrmicro.com (10.1.24.123) by mail2012.asrmicro.com (10.1.24.123) with Microsoft SMTP Server (TLS) id 15.0.847.32; Wed, 27 Mar 2019 16:47:53 +0800 Received: from mail2012.asrmicro.com ([fe80::7c1a:96dd:1a6b:c97b]) by mail2012.asrmicro.com ([fe80::7c1a:96dd:1a6b:c97b%16]) with mapi id 15.00.0847.030; Wed, 27 Mar 2019 16:47:53 +0800 From: =?gb2312?B?WmhvdSBRaWFvKNbcx8gp?= To: Dan Carpenter CC: Michael Turquette , Stephen Boyd , "linux-kernel@vger.kernel.org" , "linux-clk@vger.kernel.org" Subject: Re: [PATCH] clk: asr: clock driver support for ASR AquilaC Soc Thread-Topic: [PATCH] clk: asr: clock driver support for ASR AquilaC Soc X-ASG-Orig-Subj: Re: [PATCH] clk: asr: clock driver support for ASR AquilaC Soc Thread-Index: AQHU4YHopz31FtWFAkiYszGyOOeFvQ== Date: Wed, 27 Mar 2019 08:47:52 +0000 Message-ID: <06d8d3a9b8924500a95c94ad98d07a52@mail2012.asrmicro.com> References: <1553350115-2614-1-git-send-email-qiaozhou@asrmicro.com> <20190326115357.GI32613@kadam> Accept-Language: en-US, zh-CN Content-Language: zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.1.6.250] Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-Barracuda-Connect: mail2012.asrmicro.com[10.1.24.123] X-Barracuda-Start-Time: 1553676474 X-Barracuda-URL: https://10.1.24.120:443/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at asrmicro.com X-Barracuda-Scan-Msg-Size: 90699 X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.20 X-Barracuda-Spam-Status: No, SCORE=0.20 using global scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=9.0 tests=BSF_SC0_MV0713 X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.69052 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.20 BSF_SC0_MV0713 Custom rule MV0713 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org T24gMjAxOS8zLzI2IM/Czuc3OjU0LCBEYW4gQ2FycGVudGVyIHdyb3RlOgo+IE9uIFNhdCwgTWFy IDIzLCAyMDE5IGF0IDEwOjA4OjM1UE0gKzA4MDAsIHFpYW96aG91IHdyb3RlOgo+PiBGcm9tOiBR aWFvIFpob3UgPHFpYW96aG91QGFzcm1pY3JvLmNvbT4KPj4KPj4gYWRkIGNsb2NrIGRyaXZlciBz dXBwb3J0IGZvciBBU1IgQXF1aWxhQyBTb0MuCj4+Cj4+IFdlIGFkZCBjbGstZ2F0ZSwgY2xrLW1p eCwgYW5kIGNsay1wbGwgZHJpdmVyczoKPj4gMS4gY2xrLWdhdGUgZHJpdmVyIGlzIGZvciByZWdp c2VycyB3aGljaCBoYXZlIGRpZmZlcmVudCBlbmFibGUvZGlzYWJsZSBiaXRzCj4+IHRvIGNvbnRy b2wgZ2F0aW5nLgo+PiAyLiBjbGstbWl4IGRyaXZlciBpcyBmb3IgcmVnaXN0ZXJzIHdoaWNoIHJl cXVlc3QgdG8gc2V0IGRpdiBhbmQgbXV4Cj4+IGJpdHMgYXQgdGhlIHNhbWUgdGltZS4KPj4gMy4g Y2xrLXBsbCBkcml2ZXIgaXMgZm9yIHBsbCBjb25maWd1cmF0aW9uLgo+Pgo+PiBTaWduZWQtb2Zm LWJ5OiBxaWFvemhvdSA8cWlhb3pob3VAYXNybWljcm8uY29tPgo+PiAtLS0KPj4gIGRyaXZlcnMv Y2xrL0tjb25maWcgICAgICAgICAgIHwgICAxICsKPj4gIGRyaXZlcnMvY2xrL01ha2VmaWxlICAg ICAgICAgIHwgICAxICsKPj4gIGRyaXZlcnMvY2xrL2Fzci9LY29uZmlnICAgICAgIHwgIDE3ICsr Cj4+ICBkcml2ZXJzL2Nsay9hc3IvTWFrZWZpbGUgICAgICB8ICAgNiArCj4+ICBkcml2ZXJzL2Ns ay9hc3IvY2xrLWFxdWlsYWMuYyB8IDU5NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwo+PiAgZHJpdmVycy9jbGsvYXNyL2Nsay1nYXRlLmMgICAgfCAxNTEgKysrKysrKysr Kwo+PiAgZHJpdmVycy9jbGsvYXNyL2Nsay1taXguYyAgICAgfCAzOTMgKysrKysrKysrKysrKysr KysrKysrKysrKysKPj4gIGRyaXZlcnMvY2xrL2Fzci9jbGstcGxsLmMgICAgIHwgNjQyICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+PiAgZHJpdmVycy9jbGsvYXNy L2Nsay1wbGwuaCAgICAgfCAgOTEgKysrKysrCj4+ICBkcml2ZXJzL2Nsay9hc3IvY2xrLmMgICAg ICAgICB8IDIyMiArKysrKysrKysrKysrKysKPj4gIGRyaXZlcnMvY2xrL2Fzci9jbGsuaCAgICAg ICAgIHwgMjM1ICsrKysrKysrKysrKysrKysKPj4gIDExIGZpbGVzIGNoYW5nZWQsIDIzNTQgaW5z ZXJ0aW9ucygrKQo+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvY2xrL2Fzci9LY29uZmln Cj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9jbGsvYXNyL01ha2VmaWxlCj4+ICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9jbGsvYXNyL2Nsay1hcXVpbGFjLmMKPj4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2Nsay9hc3IvY2xrLWdhdGUuYwo+PiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvY2xrL2Fzci9jbGstbWl4LmMKPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2Nsay9hc3IvY2xrLXBsbC5jCj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9jbGsv YXNyL2Nsay1wbGwuaAo+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvY2xrL2Fzci9jbGsu Ywo+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvY2xrL2Fzci9jbGsuaAo+Pgo+PiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9jbGsvS2NvbmZpZyBiL2RyaXZlcnMvY2xrL0tjb25maWcKPj4gaW5k ZXggZTcwNWFhYi4uMGVhOWY3NCAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9jbGsvS2NvbmZpZwo+ PiArKysgYi9kcml2ZXJzL2Nsay9LY29uZmlnCj4+IEBAIC0zMTUsNSArMzE1LDYgQEAgc291cmNl ICJkcml2ZXJzL2Nsay90ZWdyYS9LY29uZmlnIgo+PiAgc291cmNlICJkcml2ZXJzL2Nsay90aS9L Y29uZmlnIgo+PiAgc291cmNlICJkcml2ZXJzL2Nsay91bmlwaGllci9LY29uZmlnIgo+PiAgc291 cmNlICJkcml2ZXJzL2Nsay96eW5xbXAvS2NvbmZpZyIKPj4gK3NvdXJjZSAiZHJpdmVycy9jbGsv YXNyL0tjb25maWciCj4+ICAKPj4gIGVuZG1lbnUKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xr L01ha2VmaWxlIGIvZHJpdmVycy9jbGsvTWFrZWZpbGUKPj4gaW5kZXggMWRiMTMzNi4uYTg4YjNi OSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9jbGsvTWFrZWZpbGUKPj4gKysrIGIvZHJpdmVycy9j bGsvTWFrZWZpbGUKPj4gQEAgLTExMiwzICsxMTIsNCBAQCBlbmRpZgo+PiAgb2JqLSQoQ09ORklH X0FSQ0hfWlgpCQkJKz0genRlLwo+PiAgb2JqLSQoQ09ORklHX0FSQ0hfWllOUSkJCQkrPSB6eW5x Lwo+PiAgb2JqLSQoQ09ORklHX0NPTU1PTl9DTEtfWllOUU1QKSAgICAgICAgICs9IHp5bnFtcC8K Pj4gK29iai0kKENPTkZJR19DT01NT05fQ0xLX0FTUikJCSs9IGFzci8KPj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvY2xrL2Fzci9LY29uZmlnIGIvZHJpdmVycy9jbGsvYXNyL0tjb25maWcKPj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMC4uZGVkNjhiNQo+PiAtLS0gL2Rldi9u dWxsCj4+ICsrKyBiL2RyaXZlcnMvY2xrL2Fzci9LY29uZmlnCj4+IEBAIC0wLDAgKzEsMTcgQEAK Pj4gK2NvbmZpZyBDT01NT05fQ0xLX0FTUgo+PiArCWJvb2wgIlN1cHBvcnQgZm9yIEFTUidzIGNs b2NrIGNvbnRyb2xsZXJzIgo+PiArCWRlcGVuZHMgb24gT0YKPj4gKwlkZXBlbmRzIG9uIEFSQ0hf QVNSIHx8IENPTVBJTEVfVEVTVAo+PiArCWhlbHAKPj4gKwkgIEJ1aWxkIHRoZSBjbG9jayBkcml2 ZXJzIGZvciBBU1I4NzUxQyBTb0MuIEl0IGNvbnRhaW5zIGNsb2NrLWdhdGUsCj4+ICsJICBjbG9j ay1taXgsIGNsb2NrLXBsbCBkcml2ZXJzIHdoaWNoIG1hbmFnZXMgZ2VuZXJhbCBnYXRpbmcsIGRp dmlkZXIsCj4+ICsJICBtdXgsIGFuZCBwbGwgZW5hYmxpbmcvZGlzYWJsaW5nIGNvbnRyb2xzLgo+ PiArCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gc3VwcG9ydCBjbG9jayBjb250cm9scyBvbiBBU1I4 NzUxQyBTb0NzCj4+ICsKPj4gK2NvbmZpZyBBU1JfQVFVSUxBQ19DTEsKPj4gKwlib29sICJBU1Ig QXF1aWxhQyBjbG9jayBjb250cm9sbGVyIHN1cHBvcnQiCj4+ICsJZGVwZW5kcyBvbiBPRgo+PiAr CWRlcGVuZHMgb24gQVJDSF9BU1IKPj4gKwlkZXBlbmRzIG9uIENPTU1PTl9DTEtfQVNSCj4+ICsJ aGVscAo+PiArCSAgQnVpbGQgdGhlIGNsb2NrIGRyaXZlciBmb3IgQVNSODc1MUMgQXF1aWxhQyBk ZXZlbG9wbWVudCBib2FyZC4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL2Fzci9NYWtlZmls ZSBiL2RyaXZlcnMvY2xrL2Fzci9NYWtlZmlsZQo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBp bmRleCAwMDAwMDAwLi5mNmI5YmQzCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9j bGsvYXNyL01ha2VmaWxlCj4+IEBAIC0wLDAgKzEsNiBAQAo+PiArIwo+PiArIyBNYWtlZmlsZSBm b3IgYXNyIHNwZWNpZmljIGNsawo+PiArIwo+PiArCj4+ICtvYmotJChDT05GSUdfQ09NTU9OX0NM S19BU1IpICs9IGNsay1wbGwubyBjbGstZ2F0ZS5vIGNsay1taXgubyBjbGsubwo+PiArb2JqLSQo Q09ORklHX0FTUl9BUVVJTEFDX0NMSykgKz0gY2xrLWFxdWlsYWMubwo+PiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9jbGsvYXNyL2Nsay1hcXVpbGFjLmMgYi9kcml2ZXJzL2Nsay9hc3IvY2xrLWFxdWls YWMuYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi43Mjc0YjYwCj4+ IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9jbGsvYXNyL2Nsay1hcXVpbGFjLmMKPj4g QEAgLTAsMCArMSw1OTUgQEAKPj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w Cj4+ICsvKgo+PiArICogY2xvY2sgZHJpdmVyIGZpbGUgZm9yIGFzciBBcXVpbGFDCj4+ICsgKgo+ PiArICogQ29weXJpZ2h0IChDKSAyMDE5IEFTUiBNaWNyb2VsZWN0cm9uaWNzKFNoYW5naGFpKSBD by4sIEx0ZC4KPj4gKyAqIEdhbmcgV3UgPGdhbmd3dUBhc3JtaWNyby5jb20+Cj4+ICsgKiBRaWFv CVpob3UgPHFpYW96aG91QGFzcm1pY3JvLmNvbT4KPiAgICAgICAgICAgIF5eXl5eCj4gUmVtb3Zl IGV4dHJhIHNwYWNlcy4KCkknbGwgZml4IGl0LgoKCj4KPj4gKyAqCj4+ICsgKiBUaGlzIGZpbGUg aXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKPj4g KyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3 aXRob3V0IGFueQo+PiArICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBv ciBpbXBsaWVkLgo+PiArICovCj4+ICsKPj4gKyNpbmNsdWRlIDxsaW51eC9pby5oPgo+PiArI2lu Y2x1ZGUgPGxpbnV4L2Nsay5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgo+ PiArI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2RldmZyZXEu aD4KPj4gKyNpbmNsdWRlIDxsaW51eC9vZi5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJl c3MuaD4KPj4gKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9jbG9jay9hc3I4NzUxYy1jbGsuaD4KPj4g KyNpbmNsdWRlICJjbGsuaCIKPj4gKyNpbmNsdWRlICJjbGstcGxsLmgiCj4+ICsKPj4gKy8qIEFQ QkMgcmVnaXN0ZXIgb2Zmc2V0IGZvciBhc3IgQXF1aWxhQyAqLwo+PiArI2RlZmluZSBBUEJDX1VB UlQwCQkJMHgwCj4+ICsjZGVmaW5lIEFQQkNfVUFSVDEJCQkweDQKPj4gKyNkZWZpbmUgQVBCQ19H UElPCQkJMHg4Cj4+ICsjZGVmaW5lIEFQQkNfU1NQMAkJCTB4MWMKPj4gKyNkZWZpbmUgQVBCQ19J UEMJCQkweDI0Cj4+ICsjZGVmaW5lIEFQQkNfUlRDCQkJMHgyOAo+PiArI2RlZmluZSBBUEJDX1RX U0kwCQkJMHgyYwo+PiArI2RlZmluZSBBUEJDX0tQQwkJCTB4MzAKPj4gKyNkZWZpbmUgQVBCQ19U SU1FUlMJCQkweDM0Cj4+ICsjZGVmaW5lIEFQQkNfQUlCCQkJMHgzYwo+PiArI2RlZmluZSBBUEJD X1NTUDIJCQkweDRjCj4+ICsjZGVmaW5lIEFQQkNfVFdTSTEJCQkweDYwCj4+ICsjZGVmaW5lIEFQ QkNfVEhFUk1BTAkJCTB4NmMKPj4gKyNkZWZpbmUgQVBCQ19VQVJUMgkJCTB4NzgKPj4gKyNkZWZp bmUgQVBCQ19UV1NJNAkJCTB4N2MKPj4gKyNkZWZpbmUgQVBCQ19UV1NJNQkJCTB4ODAKPj4gKyNk ZWZpbmUgQVBCQ19UV1NJNgkJCTB4ODQKPj4gKyNkZWZpbmUgQVBCQ19UV1NJNwkJCTB4ODgKPj4g KyNkZWZpbmUgQVBCQ19UV1NJOAkJCTB4OGMKPj4gKwo+PiArI2RlZmluZSBNUE1VX1VBUlRfUExM CQkJMHgxNAo+PiArI2RlZmluZSBNUE1VX1dEVFBDUgkJCTB4MjAwCj4+ICsKPj4gKyNkZWZpbmUg QVBNVV9TREgwCQkJMHg1NAo+PiArI2RlZmluZSBBUE1VX1NESDEJCQkweDU4Cj4+ICsjZGVmaW5l IEFQTVVfU0RIMgkJCTB4ZTAKPj4gKyNkZWZpbmUgQVBNVV9VU0IJCQkweDVjCj4+ICsjZGVmaW5l IEFQTVVfRE1BCQkJMHg2NAo+PiArI2RlZmluZSBBUE1VX0FFUwkJCTB4NjgKPj4gKyNkZWZpbmUg QVBNVV9UUkFDRV9DT05GSUcJCTB4MTA4Cj4+ICsKPj4gKyNkZWZpbmUgQVBCX1NQQVJFX1BMTDFD UgkJMHgxMDAKPj4gKyNkZWZpbmUgQVBCX1NQQVJFX1BMTDJDUgkJMHgxMDQKPj4gKyNkZWZpbmUg QVBCX1NQQVJFX1BMTDNDUgkJMHgxMDgKPj4gKyNkZWZpbmUgQVBCX1NQQVJFX1BMTDRDUgkJMHgx MjQKPj4gKyNkZWZpbmUgQVBCX1NQQVJFX1BMTDVDUgkJMHgxMTQKPj4gKyNkZWZpbmUgQVBCX1NQ QVJFX1BMTDZDUgkJMHgxM2MKPj4gKyNkZWZpbmUgQVBCX1NQQVJFX1BMTDZDUjIJCTB4MTQwCj4+ ICsjZGVmaW5lIEFQQl9TUEFSRV9QTEw3Q1IJCTB4MTQ4Cj4+ICsjZGVmaW5lIEFQQl9TUEFSRV9Q TEw3Q1IyCQkweDE0Ywo+PiArCj4+ICsjZGVmaW5lIE1QTVVfUExMMkNSCQkJMHgzNAo+PiArI2Rl ZmluZSBNUE1VX1BMTDNDUgkJCTB4MWMKPj4gKyNkZWZpbmUgTVBNVV9QTEw0Q1IJCQkweDUwCj4+ ICsjZGVmaW5lIE1QTVVfUExMNENSCQkJMHg1MAo+PiArI2RlZmluZSBNUE1VX1BMTDVDUgkJCTB4 NGMKPj4gKyNkZWZpbmUgTVBNVV9QT1NSCQkJMHgxMAo+PiArI2RlZmluZSBQT1NSX1BMTDFfTE9D SwkJCSgxIDw8IDI3KQo+PiArI2RlZmluZSBQT1NSX1BMTDJfTE9DSwkJCSgxIDw8IDI4KQo+PiAr I2RlZmluZSBQT1NSX1BMTDNfTE9DSwkJCSgxIDw8IDI5KQo+PiArI2RlZmluZSBQT1NSX1BMTDRf TE9DSwkJCSgxIDw8IDMwKQo+PiArI2RlZmluZSBQT1NSX1BMTDVfTE9DSwkJCSgxIDw8IDMxKQo+ PiArI2RlZmluZSBQT1NSX1BMTDZfTE9DSwkJCSgxIDw8IDMxKQo+PiArI2RlZmluZSBQT1NSX1BM TDdfTE9DSwkJCSgxIDw8IDMxKQo+PiArCj4+ICsjZGVmaW5lIE1QTVVfQUNHUgkJCTB4MTAyNAo+ PiArCj4+ICtlbnVtIHBsbCB7Cj4+ICsJUExMMiA9IDAsCj4+ICsJUExMMywKPj4gKwlQTEw0LAo+ PiArCVBMTDUsCj4+ICsJUExMNiwKPj4gKwlQTEw3LAo+PiArCU1BWF9QTExfTlVNLAo+PiArfTsK Pj4gKwo+PiArc3RydWN0IHBsYXRfcGxsX2luZm8gewo+PiArCXNwaW5sb2NrX3QgbG9jazsKPj4g Kwljb25zdCBjaGFyICp2Y29fbmFtZTsKPj4gKwkvKiBjbGsgZmxhZ3MgKi8KPj4gKwl1bnNpZ25l ZCBsb25nIHZjb19mbGFnOwo+PiArCXVuc2lnbmVkIGxvbmcgdmNvY2xrX2ZsYWc7Cj4+ICsJLyog ZHQgaW5kZXggKi8KPj4gKwl1bnNpZ25lZCBpbnQgdmNvZHRpZHg7Cj4gWW91IGNvdWxkIGp1c3Qg bmFtZSBpdCAiZHRfaWR4IiBhbmQgcmVtb3ZlIHRoZSBjb21tZW50PwoKT0suCgoKPgo+PiArfTsK Pj4gKwo+PiArc3RhdGljIHN0cnVjdCBhc3JfdmNvX3BhcmFtcyBwbGx4X3Zjb19wYXJhbXNbTUFY X1BMTF9OVU1dIF9faW5pdGRhdGEgPSB7Cj4+ICsJewo+PiArCQkudmNvX21pbiA9IDYwMDAwMDAw MFVMLAo+PiArCQkudmNvX21heCA9IDI3MDAwMDAwMDBVTCwKPj4gKwkJLmNyX29mZiA9IE1QTVVf UExMMkNSLAo+PiArCQkuc3djcl9vZmYgPSBBUEJfU1BBUkVfUExMMkNSLAo+PiArCQkubG9ja19v ZmYgPSBNUE1VX1BPU1IsCj4+ICsJCS5sb2NrX2VuYWJsZV9iaXQgPSBQT1NSX1BMTDJfTE9DSywK Pj4gKwl9LAo+PiArCXsKPj4gKwkJLnZjb19taW4gPSA2MDAwMDAwMDBVTCwKPj4gKwkJLnZjb19t YXggPSAyNzAwMDAwMDAwVUwsCj4+ICsJCS5jcl9vZmYgPSBNUE1VX1BMTDNDUiwKPj4gKwkJLnN3 Y3Jfb2ZmID0gQVBCX1NQQVJFX1BMTDNDUiwKPj4gKwkJLmxvY2tfb2ZmID0gTVBNVV9QT1NSLAo+ PiArCQkubG9ja19lbmFibGVfYml0ID0gUE9TUl9QTEwzX0xPQ0ssCj4+ICsJfSwKPj4gKwl7Cj4+ ICsJCS52Y29fbWluID0gNjAwMDAwMDAwVUwsCj4+ICsJCS52Y29fbWF4ID0gMjcwMDAwMDAwMFVM LAo+PiArCQkuY3Jfb2ZmID0gTVBNVV9QTEw0Q1IsCj4+ICsJCS5zd2NyX29mZiA9IEFQQl9TUEFS RV9QTEw0Q1IsCj4+ICsJCS5sb2NrX29mZiA9IE1QTVVfUE9TUiwKPj4gKwkJLmxvY2tfZW5hYmxl X2JpdCA9IFBPU1JfUExMNF9MT0NLLAo+PiArCX0sCj4+ICsJewo+PiArCQkudmNvX21pbiA9IDYw MDAwMDAwMFVMLAo+PiArCQkudmNvX21heCA9IDI3MDAwMDAwMDBVTCwKPj4gKwkJLmNyX29mZiA9 IE1QTVVfUExMNUNSLAo+PiArCQkuc3djcl9vZmYgPSBBUEJfU1BBUkVfUExMNUNSLAo+PiArCQku bG9ja19vZmYgPSBNUE1VX1BPU1IsCj4+ICsJCS5sb2NrX2VuYWJsZV9iaXQgPSBQT1NSX1BMTDVf TE9DSywKPj4gKwl9LAo+PiArCXsKPj4gKwkJLnZjb19taW4gPSA2MDAwMDAwMDBVTCwKPj4gKwkJ LnZjb19tYXggPSAyNzAwMDAwMDAwVUwsCj4+ICsJCS5zd2NyX29mZiA9IEFQQl9TUEFSRV9QTEw2 Q1IsCj4+ICsJCS5zd2NyX29mZiA9IEFQQl9TUEFSRV9QTEw2Q1IyLAo+PiArCQkubG9ja19vZmYg PSBBUEJfU1BBUkVfUExMNkNSMiwKPj4gKwkJLmxvY2tfZW5hYmxlX2JpdCA9IFBPU1JfUExMNl9M T0NLLAo+PiArCX0sCj4+ICsJewo+PiArCQkudmNvX21pbiA9IDYwMDAwMDAwMFVMLAo+PiArCQku dmNvX21heCA9IDI3MDAwMDAwMDBVTCwKPj4gKwkJLnN3Y3Jfb2ZmID0gQVBCX1NQQVJFX1BMTDdD UiwKPj4gKwkJLnN3Y3IyX29mZiA9IEFQQl9TUEFSRV9QTEw3Q1IyLAo+PiArCQkubG9ja19vZmYg PSBBUEJfU1BBUkVfUExMN0NSMiwKPj4gKwkJLmxvY2tfZW5hYmxlX2JpdCA9IFBPU1JfUExMN19M T0NLLAo+PiArCX0sCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgc3RydWN0IHBsYXRfcGxsX2luZm8g cGxseF9wbGF0aW5mb1tNQVhfUExMX05VTV0gX19pbml0ZGF0YSA9IHsKPj4gKwl7Cj4+ICsJCS52 Y29fbmFtZSA9ICJwbGwyX3ZjbyIsCj4+ICsJCS52Y29jbGtfZmxhZyA9IDAsCj4+ICsJCS52Y29f ZmxhZyA9IEFTUl9QTExfRlJBQ19GRUFUIHwgQVNSX1BMTF9TS0lQX0RFRl9SQVRFLAo+PiArCQku dmNvZHRpZHggPSBBU1JfQ0xLX1BMTDJfVkNPLAo+PiArCX0sCj4+ICsJewo+PiArCQkudmNvX25h bWUgPSAicGxsM192Y28iLAo+PiArCQkudmNvY2xrX2ZsYWcgPSAwLAo+PiArCQkudmNvX2ZsYWcg PSBBU1JfUExMX0ZSQUNfRkVBVCB8IEFTUl9QTExfU0tJUF9ERUZfUkFURSwKPj4gKwkJLnZjb2R0 aWR4ID0gQVNSX0NMS19QTEwzX1ZDTywKPj4gKwl9LAo+PiArCj4+ICsJewo+PiArCQkudmNvX25h bWUgPSAicGxsNF92Y28iLAo+PiArCQkudmNvY2xrX2ZsYWcgPSAwLAo+PiArCQkudmNvX2ZsYWcg PSBBU1JfUExMX0ZSQUNfRkVBVCB8IEFTUl9QTExfU0tJUF9ERUZfUkFURSwKPj4gKwkJLnZjb2R0 aWR4ID0gQVNSX0NMS19QTEw0X1ZDTywKPj4gKwl9LAo+PiArCXsKPj4gKwkJLnZjb19uYW1lID0g InBsbDVfdmNvIiwKPj4gKwkJLnZjb2Nsa19mbGFnID0gMCwKPj4gKwkJLnZjb19mbGFnID0gQVNS X1BMTF9GUkFDX0ZFQVQgfCBBU1JfUExMX1NLSVBfREVGX1JBVEUsCj4+ICsJCS52Y29kdGlkeCA9 IEFTUl9DTEtfUExMNV9WQ08sCj4+ICsJfSwKPj4gKwl7Cj4+ICsJCS52Y29fbmFtZSA9ICJwbGw2 X3ZjbyIsCj4+ICsJCS52Y29jbGtfZmxhZyA9IDAsCj4+ICsJCS52Y29fZmxhZyA9IEFTUl9QTExf RlJBQ19GRUFUIHwgQVNSX1BMTF9SRUdfTkVXIHwgQVNSX1BMTF9TS0lQX0RFRl9SQVRFLAo+PiAr CQkudmNvZHRpZHggPSBBU1JfQ0xLX1BMTDZfVkNPLAo+PiArCX0sCj4+ICsJewo+PiArCQkudmNv X25hbWUgPSAicGxsN192Y28iLAo+PiArCQkudmNvY2xrX2ZsYWcgPSAwLAo+PiArCQkudmNvX2Zs YWcgPSBBU1JfUExMX0ZSQUNfRkVBVCB8IEFTUl9QTExfRlJBQ19BVURJTyB8IEFTUl9QTExfUkVH X05FVyB8IEFTUl9QTExfU0tJUF9ERUZfUkFURSwKPj4gKwkJLnZjb2R0aWR4ID0gQVNSX0NMS19Q TEw3X1ZDTywKPj4gKwl9LAo+PiArfTsKPj4gKwo+PiArc3RhdGljIERFRklORV9TUElOTE9DSyhw bGwxX2xvY2spOwo+PiArc3RhdGljIERFRklORV9TUElOTE9DSyhwbGwyX2xvY2spOwo+PiArc3Rh dGljIERFRklORV9TUElOTE9DSyhwbGwzX2xvY2spOwo+PiArc3RhdGljIERFRklORV9TUElOTE9D SyhwbGw0X2xvY2spOwo+PiArc3RhdGljIERFRklORV9TUElOTE9DSyhwbGw1X2xvY2spOwo+PiAr c3RhdGljIERFRklORV9TUElOTE9DSyhwbGw2X2xvY2spOwo+PiArc3RhdGljIERFRklORV9TUElO TE9DSyhwbGw3X2xvY2spOwo+PiArc3RhdGljIERFRklORV9TUElOTE9DSyhwbGwxX2xvY2tfMik7 Cj4+ICtzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHVhcnQwX2xvY2spOwo+PiArc3RhdGljIERFRklO RV9TUElOTE9DSyh1YXJ0MV9sb2NrKTsKPj4gK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sodWFydDJf bG9jayk7Cj4+ICtzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHRpbWVyMF9sb2NrKTsKPj4gK3N0YXRp YyBERUZJTkVfU1BJTkxPQ0soc2RoMF9sb2NrKTsKPj4gK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0so c2RoMV9sb2NrKTsKPj4gK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2RoMl9sb2NrKTsKPj4gKwo+ PiArc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB1YXJ0X3BhcmVudFtdID0geyJwbGwxXzU4cDUi LCAidWFydF9wbGwifTsKPj4gK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYWVzX3BhcmVudFtd ID0geyJwbGwxXzIwOCIsICJwbGwxXzEwNCJ9Owo+PiArc3RhdGljIGNvbnN0IGNoYXIgKiBjb25z dCBzc3BfcGFyZW50W10gPSB7Cj4+ICsJInBsbDFfNnA1IiwgInBsbDFfMTMiLCAicGxsMV8yNiIs ICJwbGwxXzUyIn07Cj4+ICtzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRpbWVyX3BhcmVudFtd ID0gewo+PiArCSJwbGwxXzEzIiwgImNsazMyIiwgInBsbDFfNnA1IiwgInZjdGN4b18zcDI1Iiwg InZjdGN4b18xIn07Cj4+ICtzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNkaF9wYXJlbnRfbmFt ZXNbXSA9IHsKPj4gKwkicGxsMV80MTYiLCAicGxsMV82MjQiLCAicGxsNl9kMiIsICJwbGw2X2Q0 In07Cj4+ICtzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGtlZXBfb25fY2xvY2tzX3RibFtdID0g ewo+PiArCSJkbWFfY2xrIiwgImdwaW9fY2xrIiwgInBsbDFfNjI0IiwgInBsbDFfMjYifTsKPj4g K3N0YXRpYyB1bnNpZ25lZCBsb25nIHBsbF9yYXRlc1tNQVhfUExMX05VTV0gPSB7Cj4+ICsJMjEw MCAqIE1IWiwgMTkwMCAqIE1IWiwgMTQwMCAqIE1IWiwgMTU0MCAqIE1IWiwKPj4gKwkxNjAwICog TUhaLCAxNTM2ICogTUhafTsKPj4gKwo+PiArc3RhdGljIHN0cnVjdCBhc3JfY2xrX21peF9jbGtf dGFibGUgc2RoX3BwdGJsW10gPSB7Cj4+ICsJey5yYXRlID0gMjAwMDAwMDAwLCAucGFyZW50X2lu ZGV4ID0gMywgfSwKPj4gKwl7LnJhdGUgPSAyMDgwMDAwMDAsIC5wYXJlbnRfaW5kZXggPSAwLCB9 LAo+PiArCXsucmF0ZSA9IDMxMjAwMDAwMCwgLnBhcmVudF9pbmRleCA9IDEsIH0sCj4+ICsJey5y YXRlID0gNDAwMDAwMDAwLCAucGFyZW50X2luZGV4ID0gMywgfSwKPj4gKwl7LnJhdGUgPSA4MDAw MDAwMDAsIC5wYXJlbnRfaW5kZXggPSAyLCB9LAo+PiArfTsKPj4gK3N0YXRpYyBzdHJ1Y3QgYXNy X2Nsa19taXhfY29uZmlnIHNkaF9taXhfY29uZmlnID0gewo+PiArCS5yZWdfaW5mbyA9IERFRklO RV9NSVhfUkVHX0lORk8oMywgOCwgMiwgNiwgKDB4MSA8PCAxMSkpLAo+PiArCS50YWJsZSA9IHNk aF9wcHRibCwKPj4gKwkudGFibGVfc2l6ZSA9IEFSUkFZX1NJWkUoc2RoX3BwdGJsKSwKPj4gK307 Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgYXNyX3BhcmFtX211eF9jbGsgYXBiY19tdXhfY2xrc1td IF9faW5pdGRhdGEgPSB7Cj4+ICsJe0FTUl9DTEtfTVVYX1RJTUVSMCwJInRpbWVyMF9tdXgiLAl0 aW1lcl9wYXJlbnQsCUFSUkFZX1NJWkUodGltZXJfcGFyZW50KSwJQ0xLX1NFVF9SQVRFX1BBUkVO VCwJQVBCQ19USU1FUlMsCTQsIDMsIDAsICZ0aW1lcjBfbG9ja30sCj4+ICsJe0FTUl9DTEtfTVVY X1VBUlQwLAkidWFydDBfbXV4IiwJdWFydF9wYXJlbnQsCUFSUkFZX1NJWkUodWFydF9wYXJlbnQp LAlDTEtfU0VUX1JBVEVfUEFSRU5ULAlBUEJDX1VBUlQwLAk0LCAzLCAwLCAmdWFydDBfbG9ja30s Cj4+ICsJe0FTUl9DTEtfTVVYX1VBUlQxLAkidWFydDFfbXV4IiwJdWFydF9wYXJlbnQsCUFSUkFZ X1NJWkUodWFydF9wYXJlbnQpLAlDTEtfU0VUX1JBVEVfUEFSRU5ULAlBUEJDX1VBUlQxLAk0LCAz LCAwLCAmdWFydDFfbG9ja30sCj4+ICsJe0FTUl9DTEtfTVVYX1VBUlQyLAkidWFydDJfbXV4IiwJ dWFydF9wYXJlbnQsCUFSUkFZX1NJWkUodWFydF9wYXJlbnQpLAlDTEtfU0VUX1JBVEVfUEFSRU5U LAlBUEJDX1VBUlQyLAk0LCAzLCAwLCAmdWFydDJfbG9ja30sCj4+ICsJe0FTUl9DTEtfTVVYX1NT UDAsCSJzc3AwX211eCIsCXNzcF9wYXJlbnQsCUFSUkFZX1NJWkUoc3NwX3BhcmVudCksCQlDTEtf U0VUX1JBVEVfUEFSRU5ULAlBUEJDX1NTUDAsCTcsIDMsIDAsIE5VTEx9LAo+PiArCXtBU1JfQ0xL X01VWF9TU1AyLAkic3NwMl9tdXgiLAlzc3BfcGFyZW50LAlBUlJBWV9TSVpFKHNzcF9wYXJlbnQp LAkJQ0xLX1NFVF9SQVRFX1BBUkVOVCwJQVBCQ19TU1AyLAk3LCAzLCAwLCBOVUxMfSwKPj4gK307 Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgYXNyX3BhcmFtX211eF9jbGsgYXBtdV9tdXhfY2xrc1td IF9faW5pdGRhdGEgPSB7Cj4+ICsJe0FTUl9DTEtfTVVYX0FFUywJImFlc19tdXgiLAlhZXNfcGFy ZW50LAlBUlJBWV9TSVpFKGFlc19wYXJlbnQpLAkJQ0xLX1NFVF9SQVRFX1BBUkVOVCwJQVBNVV9B RVMsCTYsIDEsIDAsIE5VTEx9LAo+PiArfTsKPj4gKwo+PiArc3RhdGljIHN0cnVjdCBhc3JfcGFy YW1fZml4ZWRfcmF0ZV9jbGsgZml4ZWRfcmF0ZV9jbGtzW10gPSB7Cj4+ICsJe0FTUl9DTEtfQ0xL MzIsCQkiY2xrMzIiLAkJTlVMTCwJMCwJMzI3Njh9LAo+PiArCXtBU1JfQ0xLX1ZDVENYTywJInZj dGN4byIsCQlOVUxMLAkwLAkyNjAwMDAwMH0sCj4+ICsJe0FTUl9DTEtfVkNUQ1hPXzNQMjVNLAki dmN0Y3hvXzNwMjUiLAkJTlVMTCwJMCwJMzI1MDAwMH0sCj4+ICsJe0FTUl9DTEtfVkNUQ1hPXzFN LAkidmN0Y3hvXzEiLAkJTlVMTCwJMCwJMTAwMDAwMH0sCj4+ICsJe0FTUl9DTEtfUExMMV9WQ08s CSJwbGwxXzI0OTZfdmNvIiwJTlVMTCwJMCwJMjQ5NjAwMDAwMH0sCj4+ICt9Owo+PiArCj4+ICsv KiBnZW5lcmFsIGdhdGUgY2xrIGNvbnRyb2xsZWQgYnkgQVBCX1NQQVJFIGJhc2VkIHJlZ2lzdGVy cyAqLwo+PiArc3RhdGljIHN0cnVjdCBhc3JfcGFyYW1fZ2VuZXJhbF9nYXRlX2NsayBnZW5lcmFs X2dhdGVfY2xrc1tdIF9faW5pdGRhdGEgPSB7Cj4+ICsJe0FTUl9DTEtfUExMMV9EMV8yNDk2LAki cGxsMV9kMV8yNDk2IiwJInBsbDFfZDFfMjQ5Nl92Y28iLAlBUEJfU1BBUkVfUExMMUNSLCAyNiwg MCwgJnBsbDFfbG9jaywgMH0sCj4+ICsJe0FTUl9DTEtfUExMMV9EMl8xMjQ4LAkicGxsMV9kMl8x MjQ4IiwJInBsbDFfZDJfMTI0OF92Y28iLAlBUEJfU1BBUkVfUExMMUNSLCAyNywgMCwgJnBsbDFf bG9jaywgMH0sCj4+ICsJe0FTUl9DTEtfUExMMV9EM184MzIsCSJwbGwxX2QzXzgzMiIsCSJwbGwx X2QzXzgzMl92Y28iLAlBUEJfU1BBUkVfUExMMUNSLCAyOCwgMCwgJnBsbDFfbG9jaywgMH0sCj4+ ICsJe0FTUl9DTEtfUExMMV9ENF82MjQsCSJwbGwxX2Q0XzYyNCIsCSJwbGwxX2Q0XzYyNF92Y28i LAlBUEJfU1BBUkVfUExMMUNSLCAyOSwgMCwgJnBsbDFfbG9jaywgMH0sCj4+ICsJe0FTUl9DTEtf UExMMV9ENV80OTksCSJwbGwxX2Q1XzQ5OSIsCSJwbGwxX2Q1XzQ5OV92Y28iLAlBUEJfU1BBUkVf UExMMUNSLCAzMCwgMCwgJnBsbDFfbG9jaywgMH0sCj4+ICsKPj4gKwl7QVNSX0NMS19QTEwyX0Qx LAkicGxsMl9kMSIsCSJwbGwyX2QxX3ZjbyIsCQlBUEJfU1BBUkVfUExMMkNSLCAyNiwgMCwgJnBs bDJfbG9ja30sCj4+ICsJe0FTUl9DTEtfUExMMl9EMiwJInBsbDJfZDIiLAkicGxsMl9kMl92Y28i LAkJQVBCX1NQQVJFX1BMTDJDUiwgMjcsIDAsICZwbGwyX2xvY2t9LAo+PiArCXtBU1JfQ0xLX1BM TDJfRDMsCSJwbGwyX2QzIiwJInBsbDJfZDNfdmNvIiwJCUFQQl9TUEFSRV9QTEwyQ1IsIDI4LCAw LCAmcGxsMl9sb2NrfSwKPj4gKwl7QVNSX0NMS19QTEwyX0Q0LAkicGxsMl9kNCIsCSJwbGwyX2Q0 X3ZjbyIsCQlBUEJfU1BBUkVfUExMMkNSLCAyOSwgMCwgJnBsbDJfbG9ja30sCj4+ICsJe0FTUl9D TEtfUExMMl9ENSwJInBsbDJfZDUiLAkicGxsMl9kNV92Y28iLAkJQVBCX1NQQVJFX1BMTDJDUiwg MzAsIDAsICZwbGwyX2xvY2t9LAo+PiArCj4+ICsJe0FTUl9DTEtfUExMM19EMSwJInBsbDNfZDEi LAkicGxsM19kMV92Y28iLAkJQVBCX1NQQVJFX1BMTDNDUiwgMjYsIDAsICZwbGwzX2xvY2ssIENM S19TRVRfUkFURV9QQVJFTlR9LAo+PiArCXtBU1JfQ0xLX1BMTDNfRDIsCSJwbGwzX2QyIiwJInBs bDNfZDJfdmNvIiwJCUFQQl9TUEFSRV9QTEwzQ1IsIDI3LCAwLCAmcGxsM19sb2NrLCAwfSwKPj4g Kwl7QVNSX0NMS19QTEwzX0QzLAkicGxsM19kMyIsCSJwbGwzX2QzX3ZjbyIsCQlBUEJfU1BBUkVf UExMM0NSLCAyOCwgMCwgJnBsbDNfbG9jaywgMH0sCj4+ICsJe0FTUl9DTEtfUExMM19ENCwJInBs bDNfZDQiLAkicGxsM19kNF92Y28iLAkJQVBCX1NQQVJFX1BMTDNDUiwgMjksIDAsICZwbGwzX2xv Y2ssIDB9LAo+PiArCXtBU1JfQ0xLX1BMTDNfRDUsCSJwbGwzX2Q1IiwJInBsbDNfZDVfdmNvIiwJ CUFQQl9TUEFSRV9QTEwzQ1IsIDMwLCAwLCAmcGxsM19sb2NrLCAwfSwKPj4gKwl7QVNSX0NMS19Q TEw0X0QxLAkicGxsNF9kMSIsCSJwbGw0X2QxX3ZjbyIsCQlBUEJfU1BBUkVfUExMNENSLCAyNiwg MCwgJnBsbDRfbG9jaywgQ0xLX1NFVF9SQVRFX1BBUkVOVH0sCj4+ICsJe0FTUl9DTEtfUExMNF9E MiwJInBsbDRfZDIiLAkicGxsNF9kMl92Y28iLAkJQVBCX1NQQVJFX1BMTDRDUiwgMjcsIDAsICZw bGw0X2xvY2ssIDB9LAo+PiArCXtBU1JfQ0xLX1BMTDRfRDMsCSJwbGw0X2QzIiwJInBsbDRfZDNf dmNvIiwJCUFQQl9TUEFSRV9QTEw0Q1IsIDI4LCAwLCAmcGxsNF9sb2NrLCAwfSwKPj4gKwl7QVNS X0NMS19QTEw0X0Q0LAkicGxsNF9kNCIsCSJwbGw0X2Q0X3ZjbyIsCQlBUEJfU1BBUkVfUExMNENS LCAyOSwgMCwgJnBsbDRfbG9jaywgMH0sCj4+ICsJe0FTUl9DTEtfUExMNF9ENSwJInBsbDRfZDUi LAkicGxsNF9kNV92Y28iLAkJQVBCX1NQQVJFX1BMTDRDUiwgMzAsIDAsICZwbGw0X2xvY2ssIDB9 LAo+PiArCj4+ICsJe0FTUl9DTEtfUExMNV9EMSwJInBsbDVfZDEiLAkicGxsNV9kMV92Y28iLAkJ QVBCX1NQQVJFX1BMTDVDUiwgMjYsIDAsICZwbGw1X2xvY2ssIENMS19TRVRfUkFURV9QQVJFTlR9 LAo+PiArCXtBU1JfQ0xLX1BMTDVfRDIsCSJwbGw1X2QyIiwJInBsbDVfZDJfdmNvIiwJCUFQQl9T UEFSRV9QTEw1Q1IsIDI3LCAwLCAmcGxsNV9sb2NrfSwKPj4gKwl7QVNSX0NMS19QTEw1X0QzLAki cGxsNV9kMyIsCSJwbGw1X2QzX3ZjbyIsCQlBUEJfU1BBUkVfUExMNUNSLCAyOCwgMCwgJnBsbDVf bG9ja30sCj4+ICsJe0FTUl9DTEtfUExMNV9ENCwJInBsbDVfZDQiLAkicGxsNV9kNF92Y28iLAkJ QVBCX1NQQVJFX1BMTDVDUiwgMjksIDAsICZwbGw1X2xvY2t9LAo+PiArCXtBU1JfQ0xLX1BMTDVf RDUsCSJwbGw1X2Q1IiwJInBsbDVfZDVfdmNvIiwJCUFQQl9TUEFSRV9QTEw1Q1IsIDMwLCAwLCAm cGxsNV9sb2NrfSwKPj4gKwo+PiArCXtBU1JfQ0xLX1BMTDZfRDEsCSJwbGw2X2QxIiwJInBsbDZf ZDFfdmNvIiwJCUFQQl9TUEFSRV9QTEw2Q1IsIDI2LCAwLCAmcGxsNl9sb2NrfSwKPj4gKwl7QVNS X0NMS19QTEw2X0QyLAkicGxsNl9kMiIsCSJwbGw2X2QyX3ZjbyIsCQlBUEJfU1BBUkVfUExMNkNS LCAyNywgMCwgJnBsbDZfbG9ja30sCj4+ICsJe0FTUl9DTEtfUExMNl9EMywJInBsbDZfZDMiLAki cGxsNl9kM192Y28iLAkJQVBCX1NQQVJFX1BMTDZDUiwgMjgsIDAsICZwbGw2X2xvY2t9LAo+PiAr CXtBU1JfQ0xLX1BMTDZfRDQsCSJwbGw2X2Q0IiwJInBsbDZfZDRfdmNvIiwJCUFQQl9TUEFSRV9Q TEw2Q1IsIDI5LCAwLCAmcGxsNl9sb2NrfSwKPj4gKwl7QVNSX0NMS19QTEw2X0Q1LAkicGxsNl9k NSIsCSJwbGw2X2Q1X3ZjbyIsCQlBUEJfU1BBUkVfUExMNkNSLCAzMCwgMCwgJnBsbDZfbG9ja30s Cj4+ICsKPj4gKwl7QVNSX0NMS19QTEw3X0QxLAkicGxsN19kMSIsCSJwbGw3X2QxX3ZjbyIsCQlB UEJfU1BBUkVfUExMN0NSLCAyNiwgMCwgJnBsbDdfbG9ja30sCj4+ICsJe0FTUl9DTEtfUExMN19E MiwJInBsbDdfZDIiLAkicGxsN19kMl92Y28iLAkJQVBCX1NQQVJFX1BMTDdDUiwgMjcsIDAsICZw bGw3X2xvY2t9LAo+PiArCXtBU1JfQ0xLX1BMTDdfRDMsCSJwbGw3X2QzIiwJInBsbDdfZDNfdmNv IiwJCUFQQl9TUEFSRV9QTEw3Q1IsIDI4LCAwLCAmcGxsN19sb2NrfSwKPj4gKwl7QVNSX0NMS19Q TEw3X0Q0LAkicGxsN19kNCIsCSJwbGw3X2Q0X3ZjbyIsCQlBUEJfU1BBUkVfUExMN0NSLCAyOSwg MCwgJnBsbDdfbG9ja30sCj4+ICsJe0FTUl9DTEtfUExMN19ENSwJInBsbDdfZDUiLAkicGxsN19k NV92Y28iLAkJQVBCX1NQQVJFX1BMTDdDUiwgMzAsIDAsICZwbGw3X2xvY2t9LAo+PiArfTsKPj4g Kwo+PiArLyogZ2VuZXJhbCBnYXRlIGNsayBjb250cm9sbGQgYnkgTVBNVV9BQ0dSIGJhc2VkIHJl Z2lzdGVycyAqLwo+PiArc3RhdGljIHN0cnVjdCBhc3JfcGFyYW1fZ2VuZXJhbF9nYXRlX2NsayBn ZW5lcmFsX2dhdGVfY2xrc18yW10gX19pbml0ZGF0YSA9IHsKPj4gKwl7QVNSX0NMS19QTEwxXzQ5 OSwJInBsbDFfNDk5IiwJInBsbDFfZDVfNDk5IiwJCU1QTVVfQUNHUiwgMjEsCTAsICZwbGwxX2xv Y2tfMiwgMH0sCj4+ICsJe0FTUl9DTEtfUExMMV8xM19XRFQsCSJwbGwxXzEzX3dkdCIsCSJwbGwx X2QxOTJfMTMiLAkJTVBNVV9BQ0dSLCAxOSwJMCwgJnBsbDFfbG9ja18yLCAwfSwKPj4gKwl7QVNS X0NMS19QTEwxXzI0OSwJInBsbDFfMjQ5IiwJInBsbDFfZDEwXzI0OSIsCQlNUE1VX0FDR1IsIDE4 LAkwLCAmcGxsMV9sb2NrXzIsIDB9LAo+PiArCXtBU1JfQ0xLX1BMTDFfMTI0OCwJInBsbDFfMTI0 OCIsCSJwbGwxX2QyXzEyNDgiLAkJTVBNVV9BQ0dSLCAxNiwJMCwgJnBsbDFfbG9ja18yLCAwfSwK Pj4gKwl7QVNSX0NMS19QTEwxXzYyNCwJInBsbDFfNjI0IiwJInBsbDFfZDRfNjI0IiwJCU1QTVVf QUNHUiwgMTUsCTAsICZwbGwxX2xvY2tfMiwgMH0sCj4+ICsJe0FTUl9DTEtfUExMMV84MzIsCSJw bGwxXzgzMiIsCSJwbGwxX2QzXzgzMiIsCQlNUE1VX0FDR1IsIDE0LAkwLCAmcGxsMV9sb2NrXzIs IDB9LAo+PiArCXtBU1JfQ0xLX1BMTDFfMzEyLAkicGxsMV8zMTIiLAkicGxsMV9kOF8zMTIiLAkJ TVBNVV9BQ0dSLCAxMywJMCwgJnBsbDFfbG9ja18yLCAwfSwKPj4gKwl7QVNSX0NMS19QTEwxXzEw NCwJInBsbDFfMTA0IiwJInBsbDFfZDI0XzEwNCIsCQlNUE1VX0FDR1IsIDEyLAkwLCAmcGxsMV9s b2NrXzIsIDB9LAo+PiArCXtBU1JfQ0xLX1BMTDFfNTIsCSJwbGwxXzUyIiwJInBsbDFfZDQ4XzUy IiwJCU1QTVVfQUNHUiwgMTEsCTAsICZwbGwxX2xvY2tfMiwgMH0sCj4+ICsJe0FTUl9DTEtfUExM MV80OCwJInBsbDFfNDgiLAkicGxsMV9kNTJfNDgiLAkJTVBNVV9BQ0dSLCAxMCwJMCwgJnBsbDFf bG9ja18yLCAwfSwKPj4gKwl7QVNSX0NMS19QTEwxXzU4UDUsCSJwbGwxXzU4cDUiLAkicGxsMV9t M2QxMjhfNThwNSIsCU1QTVVfQUNHUiwgOCwJMCwgJnBsbDFfbG9ja18yLCAwfSwKPj4gKwl7QVNS X0NMS19QTEwxXzUyXzIsCSJwbGwxXzUyXzIiLAkicGxsMV9kNDhfNTIiLAkJTVBNVV9BQ0dSLCA3 LAkwLCAmcGxsMV9sb2NrXzIsIDB9LAo+PiArCXtBU1JfQ0xLX1BMTDFfMzIsCSJwbGwxXzMyIiwJ InBsbDFfZDc4XzMyIiwJCU1QTVVfQUNHUiwgNiwJMCwgJnBsbDFfbG9ja18yLCAwfSwKPj4gKwl7 QVNSX0NMS19QTEwxXzIwOCwJInBsbDFfMjA4IiwJInBsbDFfZDEyXzIwOCIsCQlNUE1VX0FDR1Is IDUsCTAsICZwbGwxX2xvY2tfMiwgMH0sCj4+ICsJe0FTUl9DTEtfUExMMV8yNiwJInBsbDFfMjYi LAkicGxsMV9kOTZfMjYiLAkJTVBNVV9BQ0dSLCA0LAkwLCAmcGxsMV9sb2NrXzIsIDB9LAo+PiAr CXtBU1JfQ0xLX1BMTDFfMTMsCSJwbGwxXzEzIiwJInBsbDFfZDE5Ml8xMyIsCQlNUE1VX0FDR1Is IDMsCTAsICZwbGwxX2xvY2tfMiwgMH0sCj4+ICsJe0FTUl9DTEtfUExMMV82UDUsCSJwbGwxXzZw NSIsCSJwbGwxX2QzODRfNnA1IiwJTVBNVV9BQ0dSLCAyLAkwLCAmcGxsMV9sb2NrXzIsIDB9LAo+ PiArCXtBU1JfQ0xLX1BMTDFfNzhfVUFSVCwJInBsbDFfdWFydCIsCSJwbGwxX2QzMl83OCIsCQlN UE1VX0FDR1IsIDEsCTAsICZwbGwxX2xvY2tfMiwgMH0sCj4+ICsJe0FTUl9DTEtfUExMMV80MTYs CSJwbGwxXzQxNiIsCSJwbGwxX2Q2XzQxNiIsCQlNUE1VX0FDR1IsIDAsCTAsICZwbGwxX2xvY2tf MiwgMH0sCj4+ICt9Owo+PiArCj4+ICsvKiBnYXRlIGNsazogZW5hYmxlL2Rpc2FibGUvcmVzZXQg Yml0cyBhcmUgZGlmZmVyZW50LCBBUEIgYmFzZWQuICovCj4+ICtzdGF0aWMgc3RydWN0IGFzcl9w YXJhbV9nYXRlX2NsayBhcGJjX2dhdGVfY2xrc1tdIF9faW5pdGRhdGEgPSB7Cj4+ICsJe0FTUl9D TEtfVFdTSTAsCQkidHdzaTBfY2xrIiwJInBsbDFfMzIiLAlDTEtfU0VUX1JBVEVfUEFSRU5ULAlB UEJDX1RXU0kwLAkweDcsCTB4MywJMHgwLCAwLAkJCQlOVUxMfSwKPj4gKwl7QVNSX0NMS19HUElP LAkJImdwaW9fY2xrIiwJInZjdGN4byIsCUNMS19TRVRfUkFURV9QQVJFTlQsCUFQQkNfR1BJTywJ MHg3LAkweDMsCTB4MCwgMCwJCQkJTlVMTH0sCj4+ICsJe0FTUl9DTEtfSVBDLAkJImlwY19jbGsi LAlOVUxMLAkJMCwJCQlBUEJDX0lQQywJMHg3LAkweDMsCTB4MCwgMCwJCQkJTlVMTH0sCj4+ICsJ e0FTUl9DTEtfVElNRVIwLAkidGltZXIwX2NsayIsCSJ0aW1lcjBfbXV4IiwJQ0xLX1NFVF9SQVRF X1BBUkVOVCwJQVBCQ19USU1FUlMsCTB4NywJMHgzLAkweDAsIDAsCQkJCSZ0aW1lcjBfbG9ja30s Cj4+ICsJe0FTUl9DTEtfQUlCLAkJImFpYl9jbGsiLAkidmN0Y3hvIiwJQ0xLX1NFVF9SQVRFX1BB UkVOVCwJQVBCQ19BSUIsCTB4NywJMHgzLAkweDAsIDAsCQkJCU5VTEx9LAo+PiArCXtBU1JfQ0xL X1VBUlQwLAkJInVhcnQwX2NsayIsCSJ1YXJ0MF9tdXgiLAlDTEtfU0VUX1JBVEVfUEFSRU5ULAlB UEJDX1VBUlQwLAkweDcsCTB4MywJMHgwLCAwLAkJCQkmdWFydDBfbG9ja30sCj4+ICsJe0FTUl9D TEtfVUFSVDEsCQkidWFydDFfY2xrIiwJInVhcnQxX211eCIsCUNMS19TRVRfUkFURV9QQVJFTlQs CUFQQkNfVUFSVDEsCTB4NywJMHgzLAkweDAsIDAsCQkJCSZ1YXJ0MV9sb2NrfSwKPj4gKwl7QVNS X0NMS19VQVJUMiwJCSJ1YXJ0Ml9jbGsiLAkidWFydDJfbXV4IiwJQ0xLX1NFVF9SQVRFX1BBUkVO VCwJQVBCQ19VQVJUMiwJMHg3LAkweDMsCTB4MCwgMCwJCQkJJnVhcnQyX2xvY2t9LAo+PiArCXtB U1JfQ0xLX0tQQywJCSJrcGNfY2xrIiwJImNsazMyIiwJQ0xLX1NFVF9SQVRFX1BBUkVOVCwJQVBC Q19LUEMsCTB4NywJMHgzLAkweDAsIEFTUl9DTEtfR0FURV9ORUVEX0RFTEFZLAlOVUxMfSwKPj4g Kwl7QVNSX0NMS19SVEMsCQkicnRjX2NsayIsCSJjbGszMiIsCUNMS19TRVRfUkFURV9QQVJFTlQs CUFQQkNfUlRDLAkweDg3LAkweDgzLAkweDAsIEFTUl9DTEtfR0FURV9ORUVEX0RFTEFZLAlOVUxM fSwKPj4gKwl7QVNSX0NMS19UV1NJMSwJCSJ0d3NpMV9jbGsiLAkicGxsMV8zMiIsCUNMS19TRVRf UkFURV9QQVJFTlQsCUFQQkNfVFdTSTEsCTB4NywJMHgzLAkweDAsIDAsCQkJCU5VTEx9LAo+PiAr CXtBU1JfQ0xLX1RIRVJNQUwsCSJ0aGVybWFsX2NsayIsCU5VTEwsCQkwLAkJCUFQQkNfVEhFUk1B TCwJMHg3LAkweDMsCTB4MCwgMCwJCQkJTlVMTH0sCj4+ICsJe0FTUl9DTEtfVFdTSTQsCQkidHdz aTRfY2xrIiwJInBsbDFfMzIiLAlDTEtfU0VUX1JBVEVfUEFSRU5ULAlBUEJDX1RXU0k0LAkweDcs CTB4MywJMHgwLCAwLAkJCQlOVUxMfSwKPj4gKwl7QVNSX0NMS19UV1NJNSwJCSJ0d3NpNV9jbGsi LAkicGxsMV8zMiIsCUNMS19TRVRfUkFURV9QQVJFTlQsCUFQQkNfVFdTSTUsCTB4NywJMHgzLAkw eDAsIDAsCQkJCU5VTEx9LAo+PiArCXtBU1JfQ0xLX1RXU0k2LAkJInR3c2k2X2NsayIsCSJwbGwx XzMyIiwJQ0xLX1NFVF9SQVRFX1BBUkVOVCwJQVBCQ19UV1NJNiwJMHg3LAkweDMsCTB4MCwgMCwJ CQkJTlVMTH0sCj4+ICsJe0FTUl9DTEtfVFdTSTcsCQkidHdzaTdfY2xrIiwJInBsbDFfMzIiLAlD TEtfU0VUX1JBVEVfUEFSRU5ULAlBUEJDX1RXU0k3LAkweDcsCTB4MywJMHgwLCAwLAkJCQlOVUxM fSwKPj4gKwl7QVNSX0NMS19UV1NJOCwJCSJ0d3NpOF9jbGsiLAkicGxsMV8zMiIsCUNMS19TRVRf UkFURV9QQVJFTlQsCUFQQkNfVFdTSTgsCTB4NywJMHgzLAkweDAsIDAsCQkJCU5VTEx9LAo+PiAr fTsKPj4gKwo+PiArLyogZ2F0ZSBjbGs6IGVuYWJsZS9kaXNhYmxlL3Jlc2V0IGJpdHMgYXJlIGRp ZmZlcmVudCwgQVBNVSBiYXNlZC4gKi8KPj4gK3N0YXRpYyBzdHJ1Y3QgYXNyX3BhcmFtX2dhdGVf Y2xrIGFwbXVfZ2F0ZV9jbGtzW10gX19pbml0ZGF0YSA9IHsKPj4gKwl7QVNSX0NMS19ETUEsCQki ZG1hX2NsayIsCU5VTEwsCQkwLAlBUE1VX0RNQSwJMHg5LAkweDksCTB4MCwgMCwJTlVMTH0sCj4+ ICsJe0FTUl9DTEtfVVNCLAkJInVzYl9jbGsiLAlOVUxMLAkJMCwJQVBNVV9VU0IsCTB4MywJMHgz LAkweDAsIDAsCU5VTEx9LAo+PiArCXtBU1JfQ0xLX1NESF9BWEksCSJzZGhfYXhpX2NsayIsCU5V TEwsCQkwLAlBUE1VX1NESDAsCTB4OSwJMHg5LAkweDAsIDAsCU5VTEx9LAo+PiArCXtBU1JfQ0xL X1NESDAsCQkic2RoMF9jbGsiLAkic2RoMF9taXhfY2xrIiwJMCwJQVBNVV9TREgwLAkweDEyLAkw eDEyLAkweDAsIDAsCSAmc2RoMF9sb2NrfSwKPj4gKwl7QVNSX0NMS19TREgxLAkJInNkaDFfY2xr IiwJInNkaDBfbWl4X2NsayIsCTAsCUFQTVVfU0RIMSwJMHgxMiwJMHgxMiwJMHgwLCAwLAkgJnNk aDFfbG9ja30sCj4+ICsJe0FTUl9DTEtfU0RIMiwJCSJzZGgyX2NsayIsCSJzZGgwX21peF9jbGsi LAkwLAlBUE1VX1NESDIsCTB4MTIsCTB4MTIsCTB4MCwgMCwJICZzZGgyX2xvY2t9LAo+PiArCXtB U1JfQ0xLX0FFUywJCSJhZXNfY2xrIiwJImFlc19tdXgiLAkwLAlBUE1VX0FFUywJMHgzMCwJMHgz MCwJMHgwLCAwLAlOVUxMfSwKPj4gK307Cj4+ICsKPj4gKy8qIGdhdGUgY2xrOiBlbmFibGUvZGlz YWJsZS9yZXNldCBiaXRzIGFyZSBkaWZmZXJlbnQsIE1QTVUgYmFzZWQuICovCj4+ICtzdGF0aWMg c3RydWN0IGFzcl9wYXJhbV9nYXRlX2NsayBtcG11X2dhdGVfY2xrc1tdIF9faW5pdGRhdGEgPSB7 Cj4+ICsJe0FTUl9DTEtfV0RULAkid2R0X2NsayIsCSJwbGwxXzI2IiwJMCwJTVBNVV9XRFRQQ1Is CTB4NywJMHgzLAkweDQsIDAsCU5VTEx9LAo+PiArfTsKPj4gKwo+PiArLyogZml4ZWQgZmFjdG9y IGNsayAqLwo+PiArc3RhdGljIHN0cnVjdCBhc3JfcGFyYW1fZml4ZWRfZmFjdG9yX2NsayBmaXhl ZF9mYWN0b3JfY2xrc1tdIF9faW5pdGRhdGEgPSB7Cj4+ICsJe0FTUl9DTEtfUExMMV9EMV8yNDk2 X1ZDTywJInBsbDFfZDFfMjQ5Nl92Y28iLAkicGxsMV8yNDk2X3ZjbyIsCTEsIDEsIDB9LAo+PiAr CXtBU1JfQ0xLX1BMTDFfRDJfMTI0OF9WQ08sCSJwbGwxX2QyXzEyNDhfdmNvIiwJInBsbDFfMjQ5 Nl92Y28iLAkxLCAyLCAwfSwKPj4gKwl7QVNSX0NMS19QTEwxX0QzXzgzMl9WQ08sCSJwbGwxX2Qz XzgzMl92Y28iLAkicGxsMV8yNDk2X3ZjbyIsCTEsIDMsIDB9LAo+PiArCXtBU1JfQ0xLX1BMTDFf RDRfNjI0X1ZDTywJInBsbDFfZDRfNjI0X3ZjbyIsCSJwbGwxXzI0OTZfdmNvIiwJMSwgNCwgMH0s Cj4+ICsJe0FTUl9DTEtfUExMMV9ENV80OTlfVkNPLAkicGxsMV9kNV80OTlfdmNvIiwJInBsbDFf MjQ5Nl92Y28iLAkxLCA1LCAwfSwKPj4gKwl7QVNSX0NMS19QTEwxX0Q2XzQxNiwJCSJwbGwxX2Q2 XzQxNiIsCQkicGxsMV9kM184MzIiLAkJMSwgMiwgMH0sCj4+ICsJe0FTUl9DTEtfUExMMV9EOF8z MTIsCQkicGxsMV9kOF8zMTIiLAkJInBsbDFfZDRfNjI0IiwJCTEsIDIsIDB9LAo+PiArCXtBU1Jf Q0xLX1BMTDFfRDEwXzI0OSwJCSJwbGwxX2QxMF8yNDkiLAkJInBsbDFfZDVfNDk5IiwJCTEsIDIs IDB9LAo+PiArCXtBU1JfQ0xLX1BMTDFfRDEyXzIwOCwJCSJwbGwxX2QxMl8yMDgiLAkJInBsbDFf ZDNfODMyIiwJCTEsIDQsIDB9LAo+PiArCXtBU1JfQ0xLX1BMTDFfRDI0XzEwNCwJCSJwbGwxX2Qy NF8xMDQiLAkJInBsbDFfZDRfNjI0IiwJCTEsIDYsIDB9LAo+PiArCXtBU1JfQ0xLX1BMTDFfRDMy Xzc4LAkJInBsbDFfZDMyXzc4IiwJCSJwbGwxX2Q0XzYyNCIsCQkxLCA4LCAwfSwKPj4gKwl7QVNS X0NMS19QTEwxX0QzMl83OF8yLAkJInBsbDFfNzgiLAkJInBsbDFfMzEyIiwJCTEsIDQsIDB9LAo+ PiArCXtBU1JfQ0xLX1BMTDFfRDQ4XzUyLAkJInBsbDFfZDQ4XzUyIiwJCSJwbGwxX2Q0XzYyNCIs CQkxLCAxMiwgMH0sCj4+ICsJe0FTUl9DTEtfUExMMV9ENTJfNDgsCQkicGxsMV9kNTJfNDgiLAkJ InBsbDFfZDRfNjI0IiwJCTEsIDEzLCAwfSwKPj4gKwl7QVNSX0NMS19QTEwxX00zRDEyOF81OFA1 LAkicGxsMV9tM2QxMjhfNThwNSIsCSJwbGwxX2Q0XzYyNCIsCQkzLCAzMiwgMH0sCj4+ICsJe0FT Ul9DTEtfUExMMV9ENzhfMzIsCQkicGxsMV9kNzhfMzIiLAkJInBsbDFfZDRfNjI0IiwJCTIsIDM5 LCAwfSwKPj4gKwl7QVNSX0NMS19QTEwxX0Q5Nl8yNiwJCSJwbGwxX2Q5Nl8yNiIsCQkicGxsMV9k NF82MjQiLAkJMSwgMjQsIDB9LAo+PiArCXtBU1JfQ0xLX1BMTDFfRDE5Ml8xMywJCSJwbGwxX2Qx OTJfMTMiLAkJInBsbDFfZDRfNjI0IiwJCTEsIDQ4LCAwfSwKPj4gKwl7QVNSX0NMS19QTEwxX0Qz ODRfNlA1LAkJInBsbDFfZDM4NF82cDUiLAkicGxsMV9kNF82MjQiLAkJMSwgOTYsIDB9LAo+PiAr Cj4+ICsJe0FTUl9DTEtfUExMMl9EMV9WQ08sCQkicGxsMl9kMV92Y28iLAkJInBsbDJfdmNvIiwJ CTEsIDEsIDB9LAo+PiArCXtBU1JfQ0xLX1BMTDJfRDJfVkNPLAkJInBsbDJfZDJfdmNvIiwJCSJw bGwyX3ZjbyIsCQkxLCAyLCAwfSwKPj4gKwl7QVNSX0NMS19QTEwyX0QzX1ZDTywJCSJwbGwyX2Qz X3ZjbyIsCQkicGxsMl92Y28iLAkJMSwgMywgMH0sCj4+ICsJe0FTUl9DTEtfUExMMl9ENF9WQ08s CQkicGxsMl9kNF92Y28iLAkJInBsbDJfdmNvIiwJCTEsIDQsIDB9LAo+PiArCXtBU1JfQ0xLX1BM TDJfRDVfVkNPLAkJInBsbDJfZDVfdmNvIiwJCSJwbGwyX3ZjbyIsCQkxLCA1LCAwfSwKPj4gKwo+ PiArCXtBU1JfQ0xLX1BMTDNfRDFfVkNPLAkJInBsbDNfZDFfdmNvIiwJCSJwbGwzX3ZjbyIsCQkx LCAxLCBDTEtfU0VUX1JBVEVfUEFSRU5UfSwKPj4gKwl7QVNSX0NMS19QTEwzX0QyX1ZDTywJCSJw bGwzX2QyX3ZjbyIsCQkicGxsM192Y28iLAkJMSwgMiwgMH0sCj4+ICsJe0FTUl9DTEtfUExMM19E M19WQ08sCQkicGxsM19kM192Y28iLAkJInBsbDNfdmNvIiwJCTEsIDMsIDB9LAo+PiArCXtBU1Jf Q0xLX1BMTDNfRDRfVkNPLAkJInBsbDNfZDRfdmNvIiwJCSJwbGwzX3ZjbyIsCQkxLCA0LCAwfSwK Pj4gKwl7QVNSX0NMS19QTEwzX0Q1X1ZDTywJCSJwbGwzX2Q1X3ZjbyIsCQkicGxsM192Y28iLAkJ MSwgNSwgMH0sCj4+ICsKPj4gKwl7QVNSX0NMS19QTEw0X0QxX1ZDTywJCSJwbGw0X2QxX3ZjbyIs CQkicGxsNF92Y28iLAkJMSwgMSwgQ0xLX1NFVF9SQVRFX1BBUkVOVH0sCj4+ICsJe0FTUl9DTEtf UExMNF9EMl9WQ08sCQkicGxsNF9kMl92Y28iLAkJInBsbDRfdmNvIiwJCTEsIDIsIDB9LAo+PiAr CXtBU1JfQ0xLX1BMTDRfRDNfVkNPLAkJInBsbDRfZDNfdmNvIiwJCSJwbGw0X3ZjbyIsCQkxLCAz LCAwfSwKPj4gKwl7QVNSX0NMS19QTEw0X0Q0X1ZDTywJCSJwbGw0X2Q0X3ZjbyIsCQkicGxsNF92 Y28iLAkJMSwgNCwgMH0sCj4+ICsJe0FTUl9DTEtfUExMNF9ENV9WQ08sCQkicGxsNF9kNV92Y28i LAkJInBsbDRfdmNvIiwJCTEsIDUsIDB9LAo+PiArCj4+ICsJe0FTUl9DTEtfUExMNV9EMV9WQ08s CQkicGxsNV9kMV92Y28iLAkJInBsbDVfdmNvIiwJCTEsIDEsIENMS19TRVRfUkFURV9QQVJFTlR9 LAo+PiArCXtBU1JfQ0xLX1BMTDVfRDJfVkNPLAkJInBsbDVfZDJfdmNvIiwJCSJwbGw1X3ZjbyIs CQkxLCAyLCAwfSwKPj4gKwl7QVNSX0NMS19QTEw1X0QzX1ZDTywJCSJwbGw1X2QzX3ZjbyIsCQki cGxsNV92Y28iLAkJMSwgMywgMH0sCj4+ICsJe0FTUl9DTEtfUExMNV9ENF9WQ08sCQkicGxsNV9k NF92Y28iLAkJInBsbDVfdmNvIiwJCTEsIDQsIDB9LAo+PiArCXtBU1JfQ0xLX1BMTDVfRDVfVkNP LAkJInBsbDVfZDVfdmNvIiwJCSJwbGw1X3ZjbyIsCQkxLCA1LCAwfSwKPj4gKwo+PiArCXtBU1Jf Q0xLX1BMTDZfRDFfVkNPLAkJInBsbDZfZDFfdmNvIiwJCSJwbGw2X3ZjbyIsCQkxLCAxLCAwfSwK Pj4gKwl7QVNSX0NMS19QTEw2X0QyX1ZDTywJCSJwbGw2X2QyX3ZjbyIsCQkicGxsNl92Y28iLAkJ MSwgMiwgMH0sCj4+ICsJe0FTUl9DTEtfUExMNl9EM19WQ08sCQkicGxsNl9kM192Y28iLAkJInBs bDZfdmNvIiwJCTEsIDMsIDB9LAo+PiArCXtBU1JfQ0xLX1BMTDZfRDRfVkNPLAkJInBsbDZfZDRf dmNvIiwJCSJwbGw2X3ZjbyIsCQkxLCA0LCAwfSwKPj4gKwl7QVNSX0NMS19QTEw2X0Q1X1ZDTywJ CSJwbGw2X2Q1X3ZjbyIsCQkicGxsNl92Y28iLAkJMSwgNSwgMH0sCj4+ICsKPj4gKwl7QVNSX0NM S19QTEw3X0QxX1ZDTywJCSJwbGw3X2QxX3ZjbyIsCQkicGxsN192Y28iLAkJMSwgMSwgMH0sCj4+ ICsJe0FTUl9DTEtfUExMN19EMl9WQ08sCQkicGxsN19kMl92Y28iLAkJInBsbDdfdmNvIiwJCTEs IDIsIDB9LAo+PiArCXtBU1JfQ0xLX1BMTDdfRDNfVkNPLAkJInBsbDdfZDNfdmNvIiwJCSJwbGw3 X3ZjbyIsCQkxLCAzLCAwfSwKPj4gKwl7QVNSX0NMS19QTEw3X0Q0X1ZDTywJCSJwbGw3X2Q0X3Zj byIsCQkicGxsN192Y28iLAkJMSwgNCwgMH0sCj4+ICsJe0FTUl9DTEtfUExMN19ENV9WQ08sCQki cGxsN19kNV92Y28iLAkJInBsbDdfdmNvIiwJCTEsIDUsIDB9LAo+PiArfTsKPj4gKwo+PiArc3Rh dGljIHZvaWQgX19pbml0IGFxdWlsYWNfZ2VuZXJhbF9jbGtfaW5pdChzdHJ1Y3QgYXNyX2Nsa19k YXRhICpjbG9ja19kYXRhKQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eXl5eXgo+IFJlbmFtZSB0aGlzIHRv ICJjbGtfZGF0YSIgb3IganVzdCAiZGF0YSIuCgpPSy4gVGhhbmtzIGZvciB0aGUgdGlwcy4KCgo+ Cj4KPj4gK3sKPj4gKwlzdHJ1Y3QgY2xrICpjbGs7Cj4+ICsJc3RydWN0IGFzcl9jbGtfdW5pdCAq dW5pdCA9ICZjbG9ja19kYXRhLT51bml0Owo+PiArCj4+ICsJYXNyX3JlZ2lzdGVyX2ZpeGVkX3Jh dGVfY2xrcyh1bml0LCBmaXhlZF9yYXRlX2Nsa3MsCj4+ICsJCUFSUkFZX1NJWkUoZml4ZWRfcmF0 ZV9jbGtzKSk7Cj4gSXQncyBiZXR0ZXIgdG8gYWxpZ24gdGhpbmdzIGxpa2UgdGhpczoKPgo+IAlh c3JfcmVnaXN0ZXJfZml4ZWRfcmF0ZV9jbGtzKHVuaXQsIGZpeGVkX3JhdGVfY2xrcywKPiAJCQkJ ICAgICBBUlJBWV9TSVpFKGZpeGVkX3JhdGVfY2xrcykpOwo+Cj4gW3RhYl1bdGFiXVt0YWJdW3Rh Yl1bc3BhY2VdW3NwYWNlXVtzcGFjZV1bc3BhY2VdW3NwYWNlXUFSUkFZX1NJWkUoLi4uCgpPSy4g VGhhbmtzIGZvciB0aGUgdGlwcy4KCgo+Cj4+ICsKPj4gKwljbGsgPSBjbGtfcmVnaXN0ZXJfZnJh Y3Rpb25hbF9kaXZpZGVyKE5VTEwsICJ1YXJ0X3BsbCIsICJwbGwxX3VhcnQiLAo+PiArCQlDTEtf U0VUX1JBVEVfUEFSRU5ULAo+PiArCQljbG9ja19kYXRhLT5tcG11X2Jhc2UgKyBNUE1VX1VBUlRf UExMLAo+PiArCQkwLCAxMywgMTYsIDEzLCAwLCBOVUxMKTsKPiAJY2xrID0gY2xrX3JlZ2lzdGVy X2ZyYWN0aW9uYWxfZGl2aWRlcihOVUxMLCAidWFydF9wbGwiLCAicGxsMV91YXJ0IiwKPiAJCQkJ CSAgICAgIENMS19TRVRfUkFURV9QQVJFTlQsCj4gCQkJCQkgICAgICBjbGtfZGF0YS0+bXBtdV9i YXNlICsgTVBNVV9VQVJUX1BMTCwKPiAJCQkJCSAgICAgIDAsIDEzLCAxNiwgMTMsIDAsIE5VTEwp Owo+Cj4KPiAJaWYgKElTX0VSUihjbGspKSA/CgpPSy4gSSdsbCByZWZpbmUgYW5kIGFkZCBlcnJv ci1jaGVjay4KCgo+Cj4+ICsJYXNyX2Nsa19hZGQodW5pdCwgQVNSX0NMS19QTEwxXzc4X1VBUlQs IGNsayk7Cj4+ICsKPj4gKwlhc3JfcmVnaXN0ZXJfZ2VuZXJhbF9nYXRlX2Nsa3ModW5pdCwgZ2Vu ZXJhbF9nYXRlX2Nsa3MsCj4+ICsJCWNsb2NrX2RhdGEtPmFwYnNfYmFzZSwgQVJSQVlfU0laRShn ZW5lcmFsX2dhdGVfY2xrcykpOwo+PiArCj4+ICsJYXNyX3JlZ2lzdGVyX2dlbmVyYWxfZ2F0ZV9j bGtzKHVuaXQsIGdlbmVyYWxfZ2F0ZV9jbGtzXzIsCj4+ICsJCWNsb2NrX2RhdGEtPm1wbXVfYmFz ZSwgQVJSQVlfU0laRShnZW5lcmFsX2dhdGVfY2xrc18yKSk7Cj4+ICsKPj4gKwlhc3JfcmVnaXN0 ZXJfZml4ZWRfZmFjdG9yX2Nsa3ModW5pdCwgZml4ZWRfZmFjdG9yX2Nsa3MsCj4+ICsJCUFSUkFZ X1NJWkUoZml4ZWRfZmFjdG9yX2Nsa3MpKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgX19p bml0IGFxdWlsYWNfcGxsX2luaXQoc3RydWN0IGFzcl9jbGtfZGF0YSAqY2xvY2tfZGF0YSkKPj4g K3sKPj4gKwlzdHJ1Y3QgY2xrICpjbGs7Cj4+ICsJc3RydWN0IGFzcl9jbGtfdW5pdCAqdW5pdCA9 ICZjbG9ja19kYXRhLT51bml0Owo+PiArCWludCBpZHg7Cj4gICAgICAgICBeXl5eXl5eCj4gSnVz dCB1c2UgImludCBpOyIgbGlrZSB0aGlzIHBhdGNoIGRvZXMgaW4gb3RoZXIgZnVuY3Rpb25zLgoK T0suCgoKPgo+IEludHJvZHVjZSBhIGNvdXBsZSB0ZW1wb3JhcnkgdmFyaWFibGVzOgo+Cj4gCXN0 cnVjdCBhc3JfdmNvX3BhcmFtcyAqcGFyYW07Cj4gCXN0cnVjdCBwbGF0X3BsbF9pbmZvICppbmZv Owo+Cj4+ICsKPj4gKwlmb3IgKGlkeCA9IDA7IGlkeCA8IE1BWF9QTExfTlVNOyBpZHgrKykgewo+ PiArCQlzcGluX2xvY2tfaW5pdCgmcGxseF9wbGF0aW5mb1tpZHhdLmxvY2spOwo+IAkJcGFyYW0g PSAmcGxseF92Y29fcGFyYW1zW2ldOwo+IAkJaW5mbyA9ICZwbGx4X3BsYXRpbmZvW2ldOwoKT0su IFRoYW5rcyBmb3IgdGhlIHN1Z2dlc3Rpb25zLgoKCj4KPj4gKwo+PiArCQlwbGx4X3Zjb19wYXJh bXNbaWR4XS5wbGxfc3djciA9IGNsb2NrX2RhdGEtPmFwYnNfYmFzZSArIHBsbHhfdmNvX3BhcmFt c1tpZHhdLnN3Y3Jfb2ZmOwo+IAkJcGFyYW0tPnBsbF9zd2NyID0gZGF0YS0+YXBic19iYXNlICsg cGFyYW0tPnN3Y3Jfb2ZmOwoKT0suCgoKPgo+PiArCQkvKiBwbGw2LzcgaGF2ZSBkaWZmZXJlbnQg YmFzZSBvZiBzb21lIHJlZ3MgKi8KPj4gKwkJaWYgKGlkeCA8IFBMTDYpIHsKPj4gKwkJCXBsbHhf dmNvX3BhcmFtc1tpZHhdLmNyX3JlZyA9IGNsb2NrX2RhdGEtPm1wbXVfYmFzZSArIHBsbHhfdmNv X3BhcmFtc1tpZHhdLmNyX29mZjsKPj4gKwkJCXBsbHhfdmNvX3BhcmFtc1tpZHhdLmxvY2tfcmVn ID0gY2xvY2tfZGF0YS0+bXBtdV9iYXNlICsgcGxseF92Y29fcGFyYW1zW2lkeF0ubG9ja19vZmY7 Cj4+ICsJCX0gZWxzZSB7Cj4+ICsJCQlwbGx4X3Zjb19wYXJhbXNbaWR4XS5wbGxfc3djcjIgPSBj bG9ja19kYXRhLT5hcGJzX2Jhc2UgKyBwbGx4X3Zjb19wYXJhbXNbaWR4XS5zd2NyMl9vZmY7Cj4+ ICsJCQlwbGx4X3Zjb19wYXJhbXNbaWR4XS5sb2NrX3JlZyA9IGNsb2NrX2RhdGEtPmFwYnNfYmFz ZSArIHBsbHhfdmNvX3BhcmFtc1tpZHhdLmxvY2tfb2ZmOwo+PiArCQl9Cj4+ICsKPj4gKwkJcGxs eF92Y29fcGFyYW1zW2lkeF0uZGVmYXVsdF9yYXRlID0gcGxsX3JhdGVzW2lkeF07Cj4+ICsKPj4g KwkJY2xrID0gYXNyX2Nsa19yZWdpc3Rlcl92Y28ocGxseF9wbGF0aW5mb1tpZHhdLnZjb19uYW1l LAo+PiArCQkJMCwgcGxseF9wbGF0aW5mb1tpZHhdLnZjb2Nsa19mbGFnLCBwbGx4X3BsYXRpbmZv W2lkeF0udmNvX2ZsYWcsCj4+ICsJCQkmcGxseF9wbGF0aW5mb1tpZHhdLmxvY2ssICZwbGx4X3Zj b19wYXJhbXNbaWR4XSk7Cj4gCQljbGsgPSBhc3JfY2xrX3JlZ2lzdGVyX3ZjbyhpbmZvLT52Y29f bmFtZSwgMCwgaW5mby0+dmNvY2xrX2ZsYWcsCj4gCQkJCQkgICBpbmZvLT52Y29fZmxhZywgJmlu Zm8tPmxvY2ssIHBhcmFtKTsKPgo+IEFkZCBzb21lIGVycm9yIGhhbmRsaW5nLgoKT0suCgoKPgo+ PiArCQlpZiAoIV9fY2xrX2lzX2VuYWJsZWQoY2xrKSkKPj4gKwkJCWNsa19zZXRfcmF0ZShjbGss IHBsbHhfdmNvX3BhcmFtc1tpZHhdLmRlZmF1bHRfcmF0ZSk7Cj4+ICsJCWFzcl9jbGtfYWRkKHVu aXQsIHBsbHhfcGxhdGluZm9baWR4XS52Y29kdGlkeCwgY2xrKTsKPj4gKwl9Cj4+ICt9Cj4+ICtz dGF0aWMgdm9pZCBfX2luaXQgYXF1aWxhY19wZXJpcGhfY2xrX2luaXQoc3RydWN0IGFzcl9jbGtf ZGF0YSAqY2xvY2tfZGF0YSkKPj4gK3sKPj4gKwlzdHJ1Y3QgYXNyX2Nsa191bml0ICp1bml0ID0g JmNsb2NrX2RhdGEtPnVuaXQ7Cj4+ICsKPj4gKwlhc3JfcmVnaXN0ZXJfbXV4X2Nsa3ModW5pdCwg YXBiY19tdXhfY2xrcywgY2xvY2tfZGF0YS0+YXBiY19iYXNlLAo+PiArCQlBUlJBWV9TSVpFKGFw YmNfbXV4X2Nsa3MpKTsKPiAJc3JfcmVnaXN0ZXJfbXV4X2Nsa3ModW5pdCwgYXBiY19tdXhfY2xr cywgZGF0YS0+YXBiY19iYXNlLAo+IAkJCSAgICAgQVJSQVlfU0laRShhcGJjX211eF9jbGtzKSkK Ck9LLgoKCj4+ICsKPj4gKwlhc3JfcmVnaXN0ZXJfbXV4X2Nsa3ModW5pdCwgYXBtdV9tdXhfY2xr cywgY2xvY2tfZGF0YS0+YXBtdV9iYXNlLAo+PiArCQlBUlJBWV9TSVpFKGFwbXVfbXV4X2Nsa3Mp KTsKPj4gKwo+PiArCWFzcl9yZWdpc3Rlcl9nYXRlX2Nsa3ModW5pdCwgYXBiY19nYXRlX2Nsa3Ms IGNsb2NrX2RhdGEtPmFwYmNfYmFzZSwKPj4gKwkJQVJSQVlfU0laRShhcGJjX2dhdGVfY2xrcykp Owo+PiArCj4+ICsJYXNyX3JlZ2lzdGVyX2dhdGVfY2xrcyh1bml0LCBhcG11X2dhdGVfY2xrcywg Y2xvY2tfZGF0YS0+YXBtdV9iYXNlLAo+PiArCQlBUlJBWV9TSVpFKGFwbXVfZ2F0ZV9jbGtzKSk7 Cj4+ICsKPj4gKwlhc3JfcmVnaXN0ZXJfZ2F0ZV9jbGtzKHVuaXQsIG1wbXVfZ2F0ZV9jbGtzLCBj bG9ja19kYXRhLT5tcG11X2Jhc2UsCj4+ICsJCUFSUkFZX1NJWkUobXBtdV9nYXRlX2Nsa3MpKTsK Pj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgX19pbml0IGFxdWlsYWNfbWl4X2Nsa19pbml0KHN0 cnVjdCBhc3JfY2xrX2RhdGEgKmNsb2NrX2RhdGEpCj4+ICt7Cj4+ICsJc2RoX21peF9jb25maWcu cmVnX2luZm8ucmVnX2Nsa19jdHJsID0gY2xvY2tfZGF0YS0+YXBtdV9iYXNlICsgQVBNVV9TREgw Owo+PiArCWFzcl9jbGtfcmVnaXN0ZXJfbWl4KE5VTEwsICJzZGgwX21peF9jbGsiLAo+PiArCQko Y29uc3QgY2hhciAqKilzZGhfcGFyZW50X25hbWVzLCBBUlJBWV9TSVpFKHNkaF9wYXJlbnRfbmFt ZXMpLAo+IEJldHRlciB0byBkZWNsYXJlIGFzcl9jbGtfcmVnaXN0ZXJfbWl4KCkgYXMgdGFraW5n IGEKPiAiY29uc3QgY2hhciAqY29uc3QgKnBhcmVudF9uYW1lcywiIHNvIHRoYXQgd2UgY2FuIHJl bW92ZSB0aGVzZSBjYXN0cy4KCk9LLiBUaGFua3MgZm9yIHRoZSB0aXBzLgoKCj4KPgo+PiArCQlD TEtfU0VUX1JBVEVfUEFSRU5ULAo+PiArCQkmc2RoX21peF9jb25maWcsICZzZGgwX2xvY2spOwo+ PiArCj4+ICsJc2RoX21peF9jb25maWcucmVnX2luZm8ucmVnX2Nsa19jdHJsID0gY2xvY2tfZGF0 YS0+YXBtdV9iYXNlICsgQVBNVV9TREgxOwo+PiArCWFzcl9jbGtfcmVnaXN0ZXJfbWl4KE5VTEws ICJzZGgxX21peF9jbGsiLAo+PiArCQkoY29uc3QgY2hhciAqKilzZGhfcGFyZW50X25hbWVzLCBB UlJBWV9TSVpFKHNkaF9wYXJlbnRfbmFtZXMpLAo+PiArCQlDTEtfU0VUX1JBVEVfUEFSRU5ULAo+ PiArCQkmc2RoX21peF9jb25maWcsICZzZGgxX2xvY2spOwo+PiArCj4+ICsJc2RoX21peF9jb25m aWcucmVnX2luZm8ucmVnX2Nsa19jdHJsID0gY2xvY2tfZGF0YS0+YXBtdV9iYXNlICsgQVBNVV9T REgyOwo+PiArCWFzcl9jbGtfcmVnaXN0ZXJfbWl4KE5VTEwsICJzZGgyX21peF9jbGsiLAo+PiAr CQkoY29uc3QgY2hhciAqKilzZGhfcGFyZW50X25hbWVzLCBBUlJBWV9TSVpFKHNkaF9wYXJlbnRf bmFtZXMpLAo+PiArCQlDTEtfU0VUX1JBVEVfUEFSRU5ULAo+PiArCQkmc2RoX21peF9jb25maWcs ICZzZGgyX2xvY2spOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IF9faW5pdCBhcXVpbGFjX2Ns a19vZl9pb21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBzdHJ1Y3QgYXNyX2Nsa19kYXRhICph Y3UpCj4gV2h5IGlzIGl0IGNhbGxlZCAiYWN1IiBoZXJlIGFuZCAiY2xvY2tfZGF0YSIgZXZlcnl3 aGVyZSBlbHNlPwoKSSBzaG91bGQgdXNlIHRoZSB1bmlmaWVkIG5hbWUuIHdpbGwgZml4IGl0LgoK Cj4KPj4gK3sKPj4gKwlhY3UtPm1wbXVfYmFzZSA9IG9mX2lvbWFwKG5wLCAwKTsKPj4gKwlpZiAo IWFjdS0+bXBtdV9iYXNlKSB7Cj4+ICsJCXByX2VycigiZmFpbGVkIHRvIG1hcCBtcG11IHJlZ2lz dGVyc1xuIik7Cj4+ICsJCWdvdG8gb3V0Owo+IFRoZXJlIGlzIG5vdGhpbmcgdG8gZnJlZSBoZXJl IHNvIGl0J3MgbW9yZSByZWFkYWJsZSB0byBqdXN0IHNheToKPgo+IAkJcmV0dXJuIC1FTk9NRU07 CgpPSy4gVGhhbmtzIGZvciB0aGUgdGlwcy4KCgo+Cj4+ICsJfQo+PiArCj4+ICsJYWN1LT5hcG11 X2Jhc2UgPSBvZl9pb21hcChucCwgMSk7Cj4+ICsJaWYgKCFhY3UtPmFwbXVfYmFzZSkgewo+PiAr CQlwcl9lcnIoImZhaWxlZCB0byBtYXAgYXBtdSByZWdpc3RlcnNcbiIpOwo+PiArCQlnb3RvIG91 dDsKPiAib3V0IiBpcyB0b28gdmFndWUgZm9yIGEgbGFiZWwgbmFtZS4gIFdlIGNhcmUgYWJvdXQg ZnVuY3Rpb24gbmFtZXMgYW5kCj4gdmFyaWFibGUgbmFtZXMgc28gd2Ugc2hvdWxkIGNhcmUgYWJv dXQgbGFiZWwgbmFtZXMuICBXZSB3YW50IHRvIGZyZWUKPiAiYWN1LT5tcG11X2Jhc2UiIHNvIHRo ZSBsYWJlbCBzaG91bGQgc2F5ICJnb3RvIGZyZWVfbXBtdTsiCgpPSy4gVGhhbmtzIGZvciB0aGUg dGlwcy4KCgo+Cj4+ICsJfQo+PiArCj4+ICsJYWN1LT5hcGJjX2Jhc2UgPSBvZl9pb21hcChucCwg Mik7Cj4+ICsJaWYgKCFhY3UtPmFwYmNfYmFzZSkgewo+PiArCQlwcl9lcnIoImZhaWxlZCB0byBt YXAgYXBiYyByZWdpc3RlcnNcbiIpOwo+PiArCQlnb3RvIG91dDsKPgo+IFdlIHdhbnQgdG8gZnJl ZSAiYXBtdV9iYXNlIiBzbyAiZ290byBmcmVlX2FwbXU7IiAgSnVzdCBhbHdheXMgZnJlZSB0aGUK PiBtb3N0IHJlY2VudCBhbGxvY2F0aW9uLgoKT0suIFRoYW5rcyBmb3IgdGhlIHRpcHMuCgoKPgo+ Cj4+ICsJfQo+PiArCj4+ICsJYWN1LT5hcGJzX2Jhc2UgPSBvZl9pb21hcChucCwgMyk7Cj4+ICsJ aWYgKCFhY3UtPmFwYnNfYmFzZSkgewo+PiArCQlwcl9lcnIoImZhaWxlZCB0byBtYXAgYXBicyBy ZWdpc3RlcnNcbiIpOwo+PiArCQlnb3RvIG91dDsKPj4gKwl9Cj4+ICsKPj4gKwlhY3UtPmNpdV9i YXNlID0gb2ZfaW9tYXAobnAsIDQpOwo+PiArCWlmICghYWN1LT5jaXVfYmFzZSkgewo+PiArCQlw cl9lcnIoImZhaWxlZCB0byBtYXAgY2l1IHJlZ2lzdGVyc1xuIik7Cj4+ICsJCWdvdG8gb3V0Owo+ PiArCX0KPj4gKwo+PiArCWFjdS0+ZGNpdV9iYXNlID0gb2ZfaW9tYXAobnAsIDUpOwo+PiArCWlm ICghYWN1LT5kY2l1X2Jhc2UpIHsKPj4gKwkJcHJfZXJyKCJmYWlsZWQgdG8gbWFwIGRyYWdvbiBj aXUgcmVnaXN0ZXJzXG4iKTsKPj4gKwkJZ290byBvdXQ7Cj4+ICsJfQo+PiArCj4+ICsJYWN1LT5k ZHJjX2Jhc2UgPSBvZl9pb21hcChucCwgNik7Cj4+ICsJaWYgKCFhY3UtPmRkcmNfYmFzZSkgewo+ PiArCQlwcl9lcnIoImZhaWxlZCB0byBtYXAgZGRyYyByZWdpc3RlcnNcbiIpOwo+PiArCQlnb3Rv IG91dDsKPj4gKwl9Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK291dDoKPj4gKwlyZXR1cm4gLUVJ TlZBTDsKPiBJdCBzaG91bGQgYmUgLUVOT01FTSBpbnN0ZWFkIG9mIC1FSU5WQUwuCj4KPiBmcmVl X2RjaXU6Cj4gCW9mX2lvdW5tYXAoYWN1LT5kY2l1X2Jhc2UpOwo+IGZyZWVfY2l1Ogo+IAlvZl9p b3VubWFwKGFjdS0+Y2l1X2Jhc2UpOwo+IGZyZWVfYXBiczoKPiAJb2ZfaW91bm1hcChhY3UtPmFw YnNfYmFzZSk7Cj4gZnJlZV9hcGJjOgo+IAlvZl9pb3VubWFwKGFjdS0+YXBiY19iYXNlKTsKPiBm cmVlX2FwbXU6Cj4gCW9mX2lvdW5tYXAoYWN1LT5hcG11X2Jhc2UpOwo+IGZyZWVfbXBtdToKPiAJ b2ZfaW91bm1hcChhY3UtPm1wbXVfYmFzZSk7Cj4KPiAJcmV0dXJuIC1FTk9NRU07CgpJdCBtYWtl cyBzZW5zZSBhbmQgaXMgYmV0dGVyLiBUaGFua3MgYSBsb3QuCgoKPgo+Cj4+ICt9Cj4gVGhlbiB5 b3UgY2FuIHRha2UgdGhlIGVycm9yIGhhbmRsaW5nLCBhZGQgb2ZfaW91bm1hcChhY3UtPmRkcmNf YmFzZSkgYW5kCj4geW91IGhhdmUgYSBhcXVpbGFjX2Nsa19vZl9pb3VubWFwKCkgZnVuY3Rpb24u Cj4KPiBzdGF0aWMgdm9pZCBhcXVpbGFjX2Nsa19vZl9pb3VubWFwKHN0cnVjdCBhc3JfY2xrX2Rh dGEgKmFjdSkKPiB7Cj4gCW9mX2lvdW5tYXAoYWN1LT5kZHJjX2Jhc2UpOwo+IAlvZl9pb3VubWFw KGFjdS0+ZGNpdV9iYXNlKTsKPiAJb2ZfaW91bm1hcChhY3UtPmNpdV9iYXNlKTsKPiAJb2ZfaW91 bm1hcChhY3UtPmFwYnNfYmFzZSk7Cj4gCW9mX2lvdW5tYXAoYWN1LT5hcGJjX2Jhc2UpOwo+IAlv Zl9pb3VubWFwKGFjdS0+YXBtdV9iYXNlKTsKPiAJb2ZfaW91bm1hcChhY3UtPm1wbXVfYmFzZSk7 Cj4gfQoKT0suCgoKPgo+PiArCj4+ICtzdGF0aWMgdm9pZCBfX2luaXQgYXF1aWxhY19jbGtfaW5p dChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQo+PiArewo+PiArCWludCByZXQ7Cj4+ICsJc3RydWN0 IGFzcl9jbGtfZGF0YSAqY2xvY2tfZGF0YTsKPj4gKwo+PiArCWNsb2NrX2RhdGEgPSBremFsbG9j KHNpemVvZigqY2xvY2tfZGF0YSksIEdGUF9LRVJORUwpOwo+PiArCWlmICghY2xvY2tfZGF0YSkK Pj4gKwkJcmV0dXJuOwo+PiArCj4+ICsJcmV0ID0gYXF1aWxhY19jbGtfb2ZfaW9tYXAobnAsIGNs b2NrX2RhdGEpOwo+PiArCWlmIChyZXQgPCAwKQo+PiArCQlnb3RvIG91dDsKPiBnb3RvIGZyZWVf ZGF0YTsKPgo+PiArCj4+ICsJcmV0ID0gYXNyX2Nsa19pbml0KG5wLCAmY2xvY2tfZGF0YS0+dW5p dCwgQVNSX05SX0NMS1MpOwo+PiArCWlmIChyZXQgPCAwKQo+PiArCQlnb3RvIG91dDsKPiBnb3Rv IHVubWFwOwo+Cj4+ICsKPj4gKwlhcXVpbGFjX2dlbmVyYWxfY2xrX2luaXQoY2xvY2tfZGF0YSk7 Cj4+ICsKPj4gKwlhcXVpbGFjX3BsbF9pbml0KGNsb2NrX2RhdGEpOwo+PiArCj4+ICsJYXF1aWxh Y19taXhfY2xrX2luaXQoY2xvY2tfZGF0YSk7Cj4+ICsKPj4gKwlhcXVpbGFjX3BlcmlwaF9jbGtf aW5pdChjbG9ja19kYXRhKTsKPj4gKwo+PiArCWFzcl9jbGtzX2VuYWJsZSgoY29uc3QgY2hhciAq KilrZWVwX29uX2Nsb2Nrc190YmwsIEFSUkFZX1NJWkUoa2VlcF9vbl9jbG9ja3NfdGJsKSk7Cj4+ ICsKPj4gKwlyZXR1cm47Cj4+ICtvdXQ6Cj4+ICsJa2ZyZWUoY2xvY2tfZGF0YSk7Cj4gdW5tYXA6 Cj4gCWFxdWlsYWNfY2xrX29mX2lvdW5tYXAoY2xvY2tfZGF0YSk7Cj4gZnJlZV9kYXRhOgo+IAlr ZnJlZShjbG9ja19kYXRhKTsKCk9LLgoKCj4KPj4gK30KPj4gK0NMS19PRl9ERUNMQVJFKGFxdWls YWNfY2xrLCAiYXNyLDg3NTFjLWNsb2NrIiwgYXF1aWxhY19jbGtfaW5pdCk7Cj4+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2Nsay9hc3IvY2xrLWdhdGUuYyBiL2RyaXZlcnMvY2xrL2Fzci9jbGstZ2F0 ZS5jCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAuLjRiYTU1ODcKPj4g LS0tIC9kZXYvbnVsbAo+PiArKysgYi9kcml2ZXJzL2Nsay9hc3IvY2xrLWdhdGUuYwo+PiBAQCAt MCwwICsxLDE1MSBAQAo+PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPj4g Ky8qCj4+ICsgKiBhc3IgZ2F0ZSBjbG9jayBvcGVyYXRpb24gc291cmNlIGZpbGUKPj4gKyAqCj4+ ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQVNSIE1pY3JvZWxlY3Ryb25pY3MoU2hhbmdoYWkpIENv LiwgTHRkLgo+PiArICogR2FuZyBXdSA8Z2FuZ3d1QGFzcm1pY3JvLmNvbT4KPj4gKyAqIFFpYW8g WmhvdSA8cWlhb3pob3VAYXNybWljcm8uY29tPgo+PiArICoKPj4gKyAqIFRoaXMgZmlsZSBpcyBs aWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwo+PiArICog TGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhv dXQgYW55Cj4+ICsgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGlt cGxpZWQuCj4+ICsgKi8KPj4gKwo+PiArI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgo+ PiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9pby5oPgo+PiAr I2luY2x1ZGUgPGxpbnV4L2Vyci5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Cj4+ICsj aW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4+ICsjaW5jbHVkZSAiY2xrLmgiCj4+ ICsKPj4gKyNkZWZpbmUgdG9fY2xrX2Fzcl9nYXRlKGh3KQljb250YWluZXJfb2YoaHcsIHN0cnVj dCBhc3JfY2xrX2dhdGUsIGh3KQo+PiArCj4+ICsjZGVmaW5lIFRJTUVPVVRfTElNSVQJCTIwMDAw Cj4+ICsjZGVmaW5lIERFTEFZX0NZQ0xFCQkyMDAwMDAwCj4+ICsKPj4gK3N0YXRpYyBpbnQgYXNy X2Nsa19nYXRlX2VuYWJsZShzdHJ1Y3QgY2xrX2h3ICpodykKPj4gK3sKPj4gKwlzdHJ1Y3QgYXNy X2Nsa19nYXRlICpnYXRlID0gdG9fY2xrX2Fzcl9nYXRlKGh3KTsKPj4gKwl1bnNpZ25lZCBsb25n IGZsYWdzID0gMDsKPj4gKwl1bnNpZ25lZCBsb25nIHJhdGU7Cj4+ICsJdTMyIHRtcDsKPj4gKwl1 MzIgdmFsID0gMDsKPiAgICAgICAgICAgICAgICBeXl5eCj4gTm8gbmVlZCB0byBpbml0aWFsaXpl LgoKT0suCgo+Cj4+ICsJaW50IHRpbWVvdXRfcG93ZXIgPSAxOwo+PiArCj4+ICsJaWYgKGdhdGUt PmxvY2spCj4+ICsJCXNwaW5fbG9ja19pcnFzYXZlKGdhdGUtPmxvY2ssIGZsYWdzKTsKPj4gKwo+ PiArCXRtcCA9IGNsa19yZWFkbChnYXRlLT5yZWcpOwo+PiArCXRtcCAmPSB+Z2F0ZS0+bWFzazsK Pj4gKwl0bXAgfD0gZ2F0ZS0+dmFsX2VuYWJsZTsKPj4gKwljbGtfd3JpdGVsKHRtcCwgZ2F0ZS0+ cmVnKTsKPj4gKwo+PiArCXZhbCA9IGNsa19yZWFkbChnYXRlLT5yZWcpOwo+PiArCXdoaWxlICgo dmFsICYgZ2F0ZS0+bWFzaykgIT0gZ2F0ZS0+dmFsX2VuYWJsZSAmJiAodGltZW91dF9wb3dlciA8 IFRJTUVPVVRfTElNSVQpKSB7Cj4+ICsJCXVkZWxheSh0aW1lb3V0X3Bvd2VyKTsKPj4gKwkJdmFs ID0gY2xrX3JlYWRsKGdhdGUtPnJlZyk7Cj4+ICsJCXRpbWVvdXRfcG93ZXIgKj0gMTA7Cj4+ICsJ fQo+PiArCj4+ICsJaWYgKHRpbWVvdXRfcG93ZXIgPiAxKSB7Cj4gICAgICAgICAgICAgXl5eXl5e Xl5eXl5eXl5eXl4KPiBTaG91bGRuJ3QgdGhpcyB0ZXN0IGJlPzoKPgo+IAlpZiAodGltZW91dF9w b3dlciA+PSBUSU1FT1VUX0xJTUlUKSB7CgpJZGVhbGx5IHRoZSByZWdpc3RlciB3cml0ZSBzdWNj ZWVkcyB3aXRob3V0IGVudGVyaW5nIHdoaWxlIGxvb3AsIHNvIGl0CnRlc3RzIGFnYWluc3QgMS4g SXQgc3RpbGwgcGFzcyBpZiBpdCByZXRyaWVzIHdpdGhpbiB0aW1lb3V0IGxpbWl0LgpvdGhlcndp c2UgaXQgZmFpbHMuIEl0J3MgY29uZnVzaW5nIGhlcmUgYW5kIEknbGwgcmVmaW5lIHRoZSB0ZXN0 LgoKCj4KPj4gKwkJaWYgKHZhbCA9PSB0bXApCj4+ICsJCQlwcl9lcnIoIndyaXRlIGNsa19nYXRl ICVzIHRpbWVvdXQgb2NjdXIsIHJlYWQgcGFzcyBhZnRlciAlZCB1cyBkZWxheVxuIiwgY2xrX2h3 X2dldF9uYW1lKGh3KSwgdGltZW91dF9wb3dlcik7Cj4+ICsJCWVsc2UKPj4gKwkJCXBhbmljKCJ3 cml0ZSBjbGtfZ2F0ZSAlcyB0aW1lb3V0IGFmdGVyICVkIHVzIVxuIiwgY2xrX2h3X2dldF9uYW1l KGh3KSwgdGltZW91dF9wb3dlcik7Cj4gUGxlYXNlIGRvbid0IGNhbGwgcGFuaWMoKSBmcm9tIGRy aXZlcnMuICBJdCBtZWFucyBjYW4ndCBkZWJ1ZyB0aGUKPiBzeXN0ZW0gYWZ0ZXIgaXQgZmFpbHMu CgpPSy4gd2lsbCByZW1vdmUgcGFuaWMuCgoKPgo+PiArCX0KPj4gKwo+PiArCWlmIChnYXRlLT5s b2NrKQo+PiArCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGdhdGUtPmxvY2ssIGZsYWdzKTsKPj4g Kwo+PiArCWlmIChnYXRlLT5mbGFncyAmIEFTUl9DTEtfR0FURV9ORUVEX0RFTEFZKSB7Cj4+ICsJ CXJhdGUgPSBjbGtfaHdfZ2V0X3JhdGUoaHcpOwo+PiArCQl1ZGVsYXkoRElWX1JPVU5EX1VQKERF TEFZX0NZQ0xFLCByYXRlKSk7Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsK Pj4gK3N0YXRpYyB2b2lkIGFzcl9jbGtfZ2F0ZV9kaXNhYmxlKHN0cnVjdCBjbGtfaHcgKmh3KQo+ PiArewo+PiArCXN0cnVjdCBhc3JfY2xrX2dhdGUgKmdhdGUgPSB0b19jbGtfYXNyX2dhdGUoaHcp Owo+PiArCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwo+PiArCXVuc2lnbmVkIGxvbmcgcmF0ZTsK Pj4gKwl1MzIgdG1wOwo+PiArCj4+ICsJaWYgKGdhdGUtPmxvY2spCj4+ICsJCXNwaW5fbG9ja19p cnFzYXZlKGdhdGUtPmxvY2ssIGZsYWdzKTsKPj4gKwo+PiArCXRtcCA9IGNsa19yZWFkbChnYXRl LT5yZWcpOwo+PiArCXRtcCAmPSB+Z2F0ZS0+bWFzazsKPj4gKwl0bXAgfD0gZ2F0ZS0+dmFsX2Rp c2FibGU7Cj4+ICsJY2xrX3dyaXRlbCh0bXAsIGdhdGUtPnJlZyk7Cj4+ICsKPj4gKwlpZiAoZ2F0 ZS0+ZmxhZ3MgJiBBU1JfQ0xLX0dBVEVfTkVFRF9ERUxBWSkgewo+PiArCQlyYXRlID0gY2xrX2h3 X2dldF9yYXRlKGh3KTsKPj4gKwkJdWRlbGF5KERJVl9ST1VORF9VUChERUxBWV9DWUNMRSwgcmF0 ZSkpOwo+PiArCX0KPj4gKwo+PiArCWlmIChnYXRlLT5sb2NrKQo+PiArCQlzcGluX3VubG9ja19p cnFyZXN0b3JlKGdhdGUtPmxvY2ssIGZsYWdzKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBh c3JfY2xrX2dhdGVfaXNfZW5hYmxlZChzdHJ1Y3QgY2xrX2h3ICpodykKPj4gK3sKPj4gKwlzdHJ1 Y3QgYXNyX2Nsa19nYXRlICpnYXRlID0gdG9fY2xrX2Fzcl9nYXRlKGh3KTsKPj4gKwl1bnNpZ25l ZCBsb25nIGZsYWdzID0gMDsKPj4gKwl1MzIgdG1wOwo+PiArCj4+ICsJaWYgKGdhdGUtPmxvY2sp Cj4+ICsJCXNwaW5fbG9ja19pcnFzYXZlKGdhdGUtPmxvY2ssIGZsYWdzKTsKPj4gKwo+PiArCXRt cCA9IGNsa19yZWFkbChnYXRlLT5yZWcpOwo+PiArCj4+ICsJaWYgKGdhdGUtPmxvY2spCj4+ICsJ CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZ2F0ZS0+bG9jaywgZmxhZ3MpOwo+PiArCj4+ICsJcmV0 dXJuICh0bXAgJiBnYXRlLT5tYXNrKSA9PSBnYXRlLT52YWxfZW5hYmxlOwo+PiArfQo+PiArCj4+ ICtjb25zdCBzdHJ1Y3QgY2xrX29wcyBhc3JfY2xrX2dhdGVfb3BzID0gewo+PiArCS5lbmFibGUg PSBhc3JfY2xrX2dhdGVfZW5hYmxlLAo+PiArCS5kaXNhYmxlID0gYXNyX2Nsa19nYXRlX2Rpc2Fi bGUsCj4+ICsJLmlzX2VuYWJsZWQgPSBhc3JfY2xrX2dhdGVfaXNfZW5hYmxlZCwKPj4gK307Cj4+ ICsKPj4gK3N0cnVjdCBjbGsgKmFzcl9jbGtfcmVnaXN0ZXJfZ2F0ZShzdHJ1Y3QgZGV2aWNlICpk ZXYsIGNvbnN0IGNoYXIgKm5hbWUsCj4+ICsJCWNvbnN0IGNoYXIgKnBhcmVudF9uYW1lLCB1bnNp Z25lZCBsb25nIGZsYWdzLAo+PiArCQl2b2lkIF9faW9tZW0gKnJlZywgdTMyIG1hc2ssIHUzMiB2 YWxfZW5hYmxlLCB1MzIgdmFsX2Rpc2FibGUsCj4+ICsJCXVuc2lnbmVkIGxvbmcgZ2F0ZV9mbGFn cywgc3BpbmxvY2tfdCAqbG9jaykKPj4gK3sKPj4gKwlzdHJ1Y3QgYXNyX2Nsa19nYXRlICpnYXRl Owo+PiArCXN0cnVjdCBjbGsgKmNsazsKPj4gKwlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0Owo+ PiArCj4+ICsJLyogYWxsb2NhdGUgdGhlIGdhdGUgKi8KPj4gKwlnYXRlID0ga3phbGxvYyhzaXpl b2YoKmdhdGUpLCBHRlBfS0VSTkVMKTsKPj4gKwlpZiAoIWdhdGUpCj4+ICsJCXJldHVybiBFUlJf UFRSKC1FTk9NRU0pOwo+PiArCj4+ICsJaW5pdC5uYW1lID0gbmFtZTsKPj4gKwlpbml0Lm9wcyA9 ICZhc3JfY2xrX2dhdGVfb3BzOwo+PiArCWluaXQuZmxhZ3MgPSBmbGFncyB8IENMS19JU19CQVNJ QzsKPj4gKwlpbml0LnBhcmVudF9uYW1lcyA9IChwYXJlbnRfbmFtZSA/ICZwYXJlbnRfbmFtZSA6 IE5VTEwpOwo+PiArCWluaXQubnVtX3BhcmVudHMgPSAocGFyZW50X25hbWUgPyAxIDogMCk7Cj4+ ICsKPj4gKwkvKiBzdHJ1Y3QgY2xrX2dhdGUgYXNzaWdubWVudHMgKi8KPj4gKwlnYXRlLT5yZWcg PSByZWc7Cj4+ICsJZ2F0ZS0+bWFzayA9IG1hc2s7Cj4+ICsJZ2F0ZS0+dmFsX2VuYWJsZSA9IHZh bF9lbmFibGU7Cj4+ICsJZ2F0ZS0+dmFsX2Rpc2FibGUgPSB2YWxfZGlzYWJsZTsKPj4gKwlnYXRl LT5mbGFncyA9IGdhdGVfZmxhZ3M7Cj4+ICsJZ2F0ZS0+bG9jayA9IGxvY2s7Cj4+ICsJZ2F0ZS0+ aHcuaW5pdCA9ICZpbml0Owo+PiArCj4+ICsJY2xrID0gY2xrX3JlZ2lzdGVyKGRldiwgJmdhdGUt Pmh3KTsKPj4gKwo+PiArCWlmIChJU19FUlIoY2xrKSkKPj4gKwkJa2ZyZWUoZ2F0ZSk7Cj4+ICsK Pj4gKwlyZXR1cm4gY2xrOwo+PiArfQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvYXNyL2Ns ay1taXguYyBiL2RyaXZlcnMvY2xrL2Fzci9jbGstbWl4LmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPj4gaW5kZXggMDAwMDAwMC4uZDA5OWE0MQo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2Ry aXZlcnMvY2xrL2Fzci9jbGstbWl4LmMKPj4gQEAgLTAsMCArMSwzOTMgQEAKPj4gKy8vIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4+ICsvKgo+PiArICogYXNyIG1peChkaXYgYW5k IG11eCkgZHJpdmVyIGZvciBhc3ItODc1MWMKPj4gKyAqCj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIw MTkgQVNSIE1pY3JvZWxlY3Ryb25pY3MoU2hhbmdoYWkpIENvLiwgTHRkLgo+PiArICogR2FuZyBX dSA8Z2FuZ3d1QGFzcm1pY3JvLmNvbT4KPj4gKyAqIFFpYW8gWmhvdSA8cWlhb3pob3VAYXNybWlj cm8uY29tPgo+PiArICoKPj4gKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwo+PiArICogTGljZW5zZSB2ZXJzaW9uIDIuIFRo aXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55Cj4+ICsgKiB3YXJyYW50 eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCj4+ICsgKi8KPj4gKwo+ PiArI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3Ns YWIuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9pby5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2Vyci5o Pgo+PiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+PiArI2luY2x1ZGUgImNs ay5oIgo+PiArCj4+ICsvKgo+PiArICogbXV4IGFuZCBkaXYgZmllbGQgY2FuJ3QgYmUgY29uZmln dXJlZCBzZXBhcmF0ZWx5IGluIHR3byBjbG9ja3MuCj4+ICsgKi8KPj4gKwo+PiArI2RlZmluZSB0 b19jbGtfbWl4KGh3KQljb250YWluZXJfb2YoaHcsIHN0cnVjdCBhc3JfY2xrX21peCwgaHcpCj4+ ICsKPj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgX2dldF9tYXhkaXYoc3RydWN0IGFzcl9jbGtfbWl4 ICptaXgpCj4+ICt7Cj4+ICsJdW5zaWduZWQgaW50IGRpdl9tYXNrID0gKDEgPDwgbWl4LT5yZWdf aW5mby53aWR0aF9kaXYpIC0gMTsKPj4gKwo+PiArCWlmIChtaXgtPmRpdl9mbGFncyAmIENMS19E SVZJREVSX09ORV9CQVNFRCkKPj4gKwkJcmV0dXJuIGRpdl9tYXNrOwo+PiArCWlmIChtaXgtPmRp dl9mbGFncyAmIENMS19ESVZJREVSX1BPV0VSX09GX1RXTykKPj4gKwkJcmV0dXJuIDEgPDwgZGl2 X21hc2s7Cj4+ICsKPj4gKwlyZXR1cm4gZGl2X21hc2sgKyAxOwo+PiArfQo+PiArCj4+ICtzdGF0 aWMgdW5zaWduZWQgaW50IF9nZXRfZGl2KHN0cnVjdCBhc3JfY2xrX21peCAqbWl4LCB1bnNpZ25l ZCBpbnQgdmFsKQo+PiArewo+PiArCj4+ICsJaWYgKG1peC0+ZGl2X2ZsYWdzICYgQ0xLX0RJVklE RVJfT05FX0JBU0VEKQo+PiArCQlyZXR1cm4gdmFsOwo+PiArCWlmIChtaXgtPmRpdl9mbGFncyAm IENMS19ESVZJREVSX1BPV0VSX09GX1RXTykKPj4gKwkJcmV0dXJuIDEgPDwgdmFsOwo+PiArCj4+ ICsJcmV0dXJuIHZhbCArIDE7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgX2dl dF9kaXZfdmFsKHN0cnVjdCBhc3JfY2xrX21peCAqbWl4LCB1bnNpZ25lZCBpbnQgZGl2KQo+PiAr ewo+PiArCWlmIChtaXgtPmRpdl9mbGFncyAmIENMS19ESVZJREVSX09ORV9CQVNFRCkKPj4gKwkJ cmV0dXJuIGRpdjsKPj4gKwlpZiAobWl4LT5kaXZfZmxhZ3MgJiBDTEtfRElWSURFUl9QT1dFUl9P Rl9UV08pCj4+ICsJCXJldHVybiBfX2ZmcyhkaXYpOwo+PiArCj4+ICsJcmV0dXJuIGRpdiAtIDE7 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIF9maWx0ZXJfY2xrX3RhYmxlKHN0cnVjdCBhc3Jf Y2xrX21peCAqbWl4LAo+PiArCQkJCXN0cnVjdCBhc3JfY2xrX21peF9jbGtfdGFibGUgKnRhYmxl LAo+PiArCQkJCXVuc2lnbmVkIGludCB0YWJsZV9zaXplKQo+PiArewo+PiArCWludCBpOwo+PiAr CXN0cnVjdCBhc3JfY2xrX21peF9jbGtfdGFibGUgKml0ZW07Cj4+ICsJc3RydWN0IGNsa19odyAq cGFyZW50LCAqaHc7Cj4+ICsJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKPj4gKwo+PiArCWh3 ID0gJm1peC0+aHc7Cj4+ICsKPj4gKwlmb3IgKGkgPSAwOyBpIDwgdGFibGVfc2l6ZTsgaSsrKSB7 Cj4+ICsJCWl0ZW0gPSAmdGFibGVbaV07Cj4+ICsJCXBhcmVudCA9IGNsa19od19nZXRfcGFyZW50 X2J5X2luZGV4KGh3LCBpdGVtLT5wYXJlbnRfaW5kZXgpOwo+PiArCQlwYXJlbnRfcmF0ZSA9IGNs a19od19nZXRfcmF0ZShwYXJlbnQpOwo+PiArCQlpZiAocGFyZW50X3JhdGUgJSBpdGVtLT5yYXRl KSB7Cj4+ICsJCQlpdGVtLT52YWxpZCA9IDA7Cj4+ICsJCX0gZWxzZSB7Cj4+ICsJCQlpdGVtLT5k aXZpc29yID0gcGFyZW50X3JhdGUgLyBpdGVtLT5yYXRlOwo+PiArCQkJaXRlbS0+dmFsaWQgPSAx Owo+PiArCQl9Cj4+ICsJfQo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IF9zZXRfcmF0ZShzdHJ1 Y3QgYXNyX2Nsa19taXggKm1peCwgdTMyIG11eF92YWwsIHUzMiBkaXZfdmFsLAo+PiArCQkJdW5z aWduZWQgaW50IGNoYW5nZV9tdXgsIHVuc2lnbmVkIGludCBjaGFuZ2VfZGl2KQo+PiArewo+PiAr CXN0cnVjdCBhc3JfY2xrX21peF9yZWdfaW5mbyAqcmkgPSAmbWl4LT5yZWdfaW5mbzsKPj4gKwl1 OCB3aWR0aCwgc2hpZnQ7Cj4+ICsJdTMyIG11eF9kaXY7Cj4+ICsJdW5zaWduZWQgbG9uZyBmbGFn cyA9IDA7Cj4+ICsKPj4gKwlpZiAoIWNoYW5nZV9tdXggJiYgIWNoYW5nZV9kaXYpCj4+ICsJCXJl dHVybiAtRUlOVkFMOwo+PiArCj4+ICsJaWYgKG1peC0+bG9jaykKPj4gKwkJc3Bpbl9sb2NrX2ly cXNhdmUobWl4LT5sb2NrLCBmbGFncyk7Cj4+ICsKPj4gKwltdXhfZGl2ID0gY2xrX3JlYWRsKHJp LT5yZWdfY2xrX2N0cmwpOwo+PiArCj4+ICsJaWYgKGNoYW5nZV9kaXYpIHsKPj4gKwkJd2lkdGgg PSByaS0+d2lkdGhfZGl2Owo+PiArCQlzaGlmdCA9IHJpLT5zaGlmdF9kaXY7Cj4+ICsJCW11eF9k aXYgJj0gfkFTUl9DTEtfQklUU19NQVNLKHdpZHRoLCBzaGlmdCk7Cj4+ICsJCW11eF9kaXYgfD0g QVNSX0NMS19CSVRTX1NFVF9WQUwoZGl2X3ZhbCwgd2lkdGgsIHNoaWZ0KTsKPj4gKwl9Cj4+ICsK Pj4gKwlpZiAoY2hhbmdlX211eCkgewo+PiArCQl3aWR0aCA9IHJpLT53aWR0aF9tdXg7Cj4+ICsJ CXNoaWZ0ID0gcmktPnNoaWZ0X211eDsKPj4gKwkJbXV4X2RpdiAmPSB+QVNSX0NMS19CSVRTX01B U0sod2lkdGgsIHNoaWZ0KTsKPj4gKwkJbXV4X2RpdiB8PSBBU1JfQ0xLX0JJVFNfU0VUX1ZBTCht dXhfdmFsLCB3aWR0aCwgc2hpZnQpOwo+PiArCX0KPj4gKwo+PiArCWNsa193cml0ZWwobXV4X2Rp diwgcmktPnJlZ19jbGtfY3RybCk7Cj4+ICsKPj4gKwlpZiAobWl4LT5sb2NrKQo+PiArCQlzcGlu X3VubG9ja19pcnFyZXN0b3JlKG1peC0+bG9jaywgZmxhZ3MpOwo+PiArCj4+ICsJcmV0dXJuIDA7 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgYXNyX2Nsa19taXhfZGV0ZXJtaW5lX3JhdGUoc3Ry dWN0IGNsa19odyAqaHcsCj4+ICsJCQkJICAgICAgc3RydWN0IGNsa19yYXRlX3JlcXVlc3QgKnJl cSkKPj4gK3sKPj4gKwlzdHJ1Y3QgYXNyX2Nsa19taXggKm1peCA9IHRvX2Nsa19taXgoaHcpOwo+ PiArCXN0cnVjdCBhc3JfY2xrX21peF9jbGtfdGFibGUgKml0ZW07Cj4+ICsJc3RydWN0IGNsa19o dyAqcGFyZW50LCAqcGFyZW50X2Jlc3Q7Cj4+ICsJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSwg bWl4X3JhdGUsIG1peF9yYXRlX2Jlc3QsIHBhcmVudF9yYXRlX2Jlc3Q7Cj4+ICsJdW5zaWduZWQg bG9uZyBnYXAsIGdhcF9iZXN0Owo+PiArCXUzMiBkaXZfdmFsX21heDsKPj4gKwl1bnNpZ25lZCBp bnQgZGl2Owo+PiArCWludCBpLCBqOwo+PiArCj4+ICsJbWl4X3JhdGVfYmVzdCA9IDA7Cj4+ICsJ cGFyZW50X3JhdGVfYmVzdCA9IDA7Cj4+ICsJZ2FwX2Jlc3QgPSBVTE9OR19NQVg7Cj4+ICsJcGFy ZW50X2Jlc3QgPSBOVUxMOwo+PiArCj4+ICsJaWYgKG1peC0+dGFibGUpIHsKPj4gKwkJZm9yIChp ID0gMDsgaSA8IG1peC0+dGFibGVfc2l6ZTsgaSsrKSB7Cj4+ICsJCQlpdGVtID0gJm1peC0+dGFi bGVbaV07Cj4+ICsJCQlpZiAoaXRlbS0+dmFsaWQgPT0gMCkKPj4gKwkJCQljb250aW51ZTsKPj4g KwkJCXBhcmVudCA9IGNsa19od19nZXRfcGFyZW50X2J5X2luZGV4KGh3LAo+PiArCQkJCQkJCWl0 ZW0tPnBhcmVudF9pbmRleCk7Cj4+ICsJCQlwYXJlbnRfcmF0ZSA9IGNsa19od19nZXRfcmF0ZShw YXJlbnQpOwo+PiArCQkJbWl4X3JhdGUgPSBwYXJlbnRfcmF0ZSAvIGl0ZW0tPmRpdmlzb3I7Cj4+ ICsJCQlnYXAgPSBhYnMobWl4X3JhdGUgLSByZXEtPnJhdGUpOwo+PiArCQkJaWYgKHBhcmVudF9i ZXN0ID09IE5VTEwgfHwgZ2FwIDwgZ2FwX2Jlc3QpIHsKPj4gKwkJCQlwYXJlbnRfYmVzdCA9IHBh cmVudDsKPj4gKwkJCQlwYXJlbnRfcmF0ZV9iZXN0ID0gcGFyZW50X3JhdGU7Cj4+ICsJCQkJbWl4 X3JhdGVfYmVzdCA9IG1peF9yYXRlOwo+PiArCQkJCWdhcF9iZXN0ID0gZ2FwOwo+PiArCQkJCWlm IChnYXBfYmVzdCA9PSAwKQo+PiArCQkJCQlnb3RvIGZvdW5kOwo+PiArCQkJfQo+PiArCQl9Cj4+ ICsJfSBlbHNlIHsKPj4gKwkJZm9yIChpID0gMDsgaSA8IGNsa19od19nZXRfbnVtX3BhcmVudHMo aHcpOyBpKyspIHsKPj4gKwkJCXBhcmVudCA9IGNsa19od19nZXRfcGFyZW50X2J5X2luZGV4KGh3 LCBpKTsKPj4gKwkJCXBhcmVudF9yYXRlID0gY2xrX2h3X2dldF9yYXRlKHBhcmVudCk7Cj4+ICsJ CQlkaXZfdmFsX21heCA9IF9nZXRfbWF4ZGl2KG1peCk7Cj4+ICsJCQlmb3IgKGogPSAwOyBqIDwg ZGl2X3ZhbF9tYXg7IGorKykgewo+PiArCQkJCWRpdiA9IF9nZXRfZGl2KG1peCwgaik7Cj4+ICsJ CQkJbWl4X3JhdGUgPSBwYXJlbnRfcmF0ZSAvIGRpdjsKPj4gKwkJCQlnYXAgPSBhYnMobWl4X3Jh dGUgLSByZXEtPnJhdGUpOwo+PiArCQkJCWlmIChwYXJlbnRfYmVzdCA9PSBOVUxMIHx8IGdhcCA8 IGdhcF9iZXN0KSB7Cj4+ICsJCQkJCXBhcmVudF9iZXN0ID0gcGFyZW50Owo+PiArCQkJCQlwYXJl bnRfcmF0ZV9iZXN0ID0gcGFyZW50X3JhdGU7Cj4+ICsJCQkJCW1peF9yYXRlX2Jlc3QgPSBtaXhf cmF0ZTsKPj4gKwkJCQkJZ2FwX2Jlc3QgPSBnYXA7Cj4+ICsJCQkJCWlmIChnYXBfYmVzdCA9PSAw KQo+PiArCQkJCQkJZ290byBmb3VuZDsKPj4gKwkJCQl9Cj4+ICsJCQl9Cj4+ICsJCX0KPj4gKwl9 Cj4+ICsKPj4gK2ZvdW5kOgo+PiArCWlmICghcGFyZW50X2Jlc3QpCj4+ICsJCXJldHVybiAtRUlO VkFMOwo+PiArCj4+ICsJcmVxLT5iZXN0X3BhcmVudF9yYXRlID0gcGFyZW50X3JhdGVfYmVzdDsK Pj4gKwlyZXEtPmJlc3RfcGFyZW50X2h3ID0gcGFyZW50X2Jlc3Q7Cj4+ICsJcmVxLT5yYXRlID0g bWl4X3JhdGVfYmVzdDsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg aW50IGFzcl9jbGtfbWl4X3NldF9yYXRlX2FuZF9wYXJlbnQoc3RydWN0IGNsa19odyAqaHcsCj4+ ICsJCQkJCQl1bnNpZ25lZCBsb25nIHJhdGUsCj4+ICsJCQkJCQl1bnNpZ25lZCBsb25nIHBhcmVu dF9yYXRlLAo+PiArCQkJCQkJdTggaW5kZXgpCj4+ICt7Cj4+ICsJc3RydWN0IGFzcl9jbGtfbWl4 ICptaXggPSB0b19jbGtfbWl4KGh3KTsKPj4gKwl1bnNpZ25lZCBpbnQgZGl2Owo+PiArCXUzMiBk aXZfdmFsOwo+PiArCj4+ICsJZGl2ID0gcGFyZW50X3JhdGUgLyByYXRlOwo+PiArCWRpdl92YWwg PSBfZ2V0X2Rpdl92YWwobWl4LCBkaXYpOwo+PiArCj4+ICsJcmV0dXJuIF9zZXRfcmF0ZShtaXgs IGluZGV4LCBkaXZfdmFsLCAxLCAxKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHU4IGFzcl9jbGtf bWl4X2dldF9wYXJlbnQoc3RydWN0IGNsa19odyAqaHcpCj4+ICt7Cj4+ICsJc3RydWN0IGFzcl9j bGtfbWl4ICptaXggPSB0b19jbGtfbWl4KGh3KTsKPj4gKwlzdHJ1Y3QgYXNyX2Nsa19taXhfcmVn X2luZm8gKnJpID0gJm1peC0+cmVnX2luZm87Cj4+ICsJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7 Cj4+ICsJdTMyIG11eF9kaXYgPSAwOwo+PiArCXU4IHdpZHRoLCBzaGlmdDsKPj4gKwl1MzIgbXV4 X3ZhbDsKPj4gKwo+PiArCWlmIChtaXgtPmxvY2spCj4+ICsJCXNwaW5fbG9ja19pcnFzYXZlKG1p eC0+bG9jaywgZmxhZ3MpOwo+PiArCj4+ICsJbXV4X2RpdiA9IGNsa19yZWFkbChyaS0+cmVnX2Ns a19jdHJsKTsKPj4gKwo+PiArCWlmIChtaXgtPmxvY2spCj4+ICsJCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUobWl4LT5sb2NrLCBmbGFncyk7Cj4+ICsKPj4gKwl3aWR0aCA9IG1peC0+cmVnX2luZm8u d2lkdGhfbXV4Owo+PiArCXNoaWZ0ID0gbWl4LT5yZWdfaW5mby5zaGlmdF9tdXg7Cj4+ICsKPj4g KwltdXhfdmFsID0gQVNSX0NMS19CSVRTX0dFVF9WQUwobXV4X2Rpdiwgd2lkdGgsIHNoaWZ0KTsK Pj4gKwo+PiArCXJldHVybiBtdXhfdmFsOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdW5zaWduZWQg bG9uZyBhc3JfY2xrX21peF9yZWNhbGNfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywKPj4gKwkJCQkJ dW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgYXNyX2Nsa19taXgg Km1peCA9IHRvX2Nsa19taXgoaHcpOwo+PiArCXN0cnVjdCBhc3JfY2xrX21peF9yZWdfaW5mbyAq cmkgPSAmbWl4LT5yZWdfaW5mbzsKPj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKPj4gKwl1 MzIgbXV4X2RpdiA9IDA7Cj4+ICsJdTggd2lkdGgsIHNoaWZ0Owo+PiArCXVuc2lnbmVkIGludCBk aXY7Cj4+ICsKPj4gKwlpZiAobWl4LT5sb2NrKQo+PiArCQlzcGluX2xvY2tfaXJxc2F2ZShtaXgt PmxvY2ssIGZsYWdzKTsKPj4gKwo+PiArCW11eF9kaXYgPSBjbGtfcmVhZGwocmktPnJlZ19jbGtf Y3RybCk7Cj4+ICsKPj4gKwlpZiAobWl4LT5sb2NrKQo+PiArCQlzcGluX3VubG9ja19pcnFyZXN0 b3JlKG1peC0+bG9jaywgZmxhZ3MpOwo+PiArCj4+ICsJd2lkdGggPSBtaXgtPnJlZ19pbmZvLndp ZHRoX2RpdjsKPj4gKwlzaGlmdCA9IG1peC0+cmVnX2luZm8uc2hpZnRfZGl2Owo+PiArCj4+ICsJ ZGl2ID0gX2dldF9kaXYobWl4LCBBU1JfQ0xLX0JJVFNfR0VUX1ZBTChtdXhfZGl2LCB3aWR0aCwg c2hpZnQpKTsKPj4gKwo+PiArCXJldHVybiBwYXJlbnRfcmF0ZSAvIGRpdjsKPj4gK30KPj4gKwo+ PiArc3RhdGljIGludCBhc3JfY2xrX3NldF9wYXJlbnQoc3RydWN0IGNsa19odyAqaHcsIHU4IGlu ZGV4KQo+PiArewo+PiArCXN0cnVjdCBhc3JfY2xrX21peCAqbWl4ID0gdG9fY2xrX21peChodyk7 Cj4+ICsJc3RydWN0IGFzcl9jbGtfbWl4X2Nsa190YWJsZSAqaXRlbTsKPj4gKwlpbnQgaTsKPj4g Kwl1MzIgZGl2X3ZhbCwgbXV4X3ZhbDsKPj4gKwo+PiArCWlmIChtaXgtPnRhYmxlKSB7Cj4+ICsJ CWZvciAoaSA9IDA7IGkgPCBtaXgtPnRhYmxlX3NpemU7IGkrKykgewo+PiArCQkJaXRlbSA9ICZt aXgtPnRhYmxlW2ldOwo+PiArCQkJaWYgKGl0ZW0tPnZhbGlkID09IDApCj4+ICsJCQkJY29udGlu dWU7Cj4+ICsJCQlpZiAoaXRlbS0+cGFyZW50X2luZGV4ID09IGluZGV4KQo+PiArCQkJCWJyZWFr Owo+PiArCQl9Cj4+ICsJCWlmIChpIDwgbWl4LT50YWJsZV9zaXplKSB7Cj4+ICsJCQlkaXZfdmFs ID0gX2dldF9kaXZfdmFsKG1peCwgaXRlbS0+ZGl2aXNvcik7Cj4+ICsJCQltdXhfdmFsID0gaXRl bS0+cGFyZW50X2luZGV4Owo+PiArCQl9IGVsc2UKPj4gKwkJCXJldHVybiAtRUlOVkFMOwo+PiAr CX0gZWxzZSB7Cj4+ICsJCW11eF92YWwgPSBpbmRleDsKPj4gKwkJZGl2X3ZhbCA9IDA7Cj4+ICsJ fQo+PiArCj4+ICsJcmV0dXJuIF9zZXRfcmF0ZShtaXgsIG11eF92YWwsIGRpdl92YWwsIDEsIGRp dl92YWwgPyAxIDogMCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgYXNyX2Nsa19zZXRfcmF0 ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAo+PiArCQkJCXVuc2lnbmVk IGxvbmcgYmVzdF9wYXJlbnRfcmF0ZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgYXNyX2Nsa19taXggKm1p eCA9IHRvX2Nsa19taXgoaHcpOwo+PiArCXN0cnVjdCBhc3JfY2xrX21peF9jbGtfdGFibGUgKml0 ZW07Cj4+ICsJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKPj4gKwl1bnNpZ25lZCBpbnQgYmVz dF9kaXZpc29yOwo+PiArCXN0cnVjdCBjbGtfaHcgKnBhcmVudDsKPj4gKwlpbnQgaTsKPj4gKwo+ PiArCWJlc3RfZGl2aXNvciA9IGJlc3RfcGFyZW50X3JhdGUgLyByYXRlOwo+PiArCj4+ICsJaWYg KG1peC0+dGFibGUpIHsKPj4gKwkJZm9yIChpID0gMDsgaSA8IG1peC0+dGFibGVfc2l6ZTsgaSsr KSB7Cj4+ICsJCQlpdGVtID0gJm1peC0+dGFibGVbaV07Cj4+ICsJCQlpZiAoaXRlbS0+dmFsaWQg PT0gMCkKPj4gKwkJCQljb250aW51ZTsKPj4gKwkJCXBhcmVudCA9IGNsa19od19nZXRfcGFyZW50 X2J5X2luZGV4KGh3LAo+PiArCQkJCQkJCWl0ZW0tPnBhcmVudF9pbmRleCk7Cj4+ICsJCQlwYXJl bnRfcmF0ZSA9IGNsa19od19nZXRfcmF0ZShwYXJlbnQpOwo+PiArCQkJaWYgKHBhcmVudF9yYXRl ID09IGJlc3RfcGFyZW50X3JhdGUKPj4gKwkJCQkmJiBpdGVtLT5kaXZpc29yID09IGJlc3RfZGl2 aXNvcikKPiBQbGVhc2Ugd3JpdGUgdGhpcyBjb25kaXRpb24gbGlrZSBzbzoKPgo+IAkJCWlmIChw YXJlbnRfcmF0ZSA9PSBiZXN0X3BhcmVudF9yYXRlICYmCj4gCQkJICAgIGl0ZW0tPmRpdmlzb3Ig PT0gYmVzdF9kaXZpc29yKQoKT0suCgoKPgo+Cj4+ICsJCQkJYnJlYWs7Cj4+ICsJCX0KPj4gKwkJ aWYgKGkgPCBtaXgtPnRhYmxlX3NpemUpCj4+ICsJCQlyZXR1cm4gX3NldF9yYXRlKG1peCwgaXRl bS0+cGFyZW50X2luZGV4LAo+PiArCQkJCQlfZ2V0X2Rpdl92YWwobWl4LCBpdGVtLT5kaXZpc29y KSwKPj4gKwkJCQkJMSwgMSk7Cj4+ICsJCWVsc2UKPj4gKwkJCXJldHVybiAtRUlOVkFMOwo+IE5v IG5lZWQgZm9yIGFuIGVsc2Ugc3RhdGVtZW50LiAgSSdtIHN1cnByaXNlZCBjaGVja3BhdGNoLnBs IGRvZXNuJ3QKPiBjb21wbGFpbi4gIEl0J3MgYmV0dGVyIHRvIHJldmVyc2UgdGhlIHRlc3QuICBS aWdodCBub3cgdGhpcyBpcyBkb2luZwo+ICJzdWNjZXNzIGhhbmRsaW5nIiBidXQgaXQncyBiZXR0 ZXIgdG8gZG8gImVycm9yIGhhbmRsaW5nIi4KPgo+IAkJaWYgKGkgPj0gbWl4LT50YWJsZV9zaXpl KQo+IAkJCXJldHVybiAtRUlOVkFMOwo+IAkJcmV0dXJuIF9zZXRfcmF0ZShtaXgsIGl0ZW0tPnBh cmVudF9pbmRleCwKPiAJCQkJIF9nZXRfZGl2X3ZhbChtaXgsIGl0ZW0tPmRpdmlzb3IpLCAxLCAx KTsKPgo+IFRoYXQgbGV0J3MgeW91IHB1bGwgdGhlIHN1Y2Nlc3MgcGF0aCBpbiBvbmUgaW5kZW50 IGxldmVsIHNvIGl0IG1ha2VzIGl0Cj4gZWFzaWVyIHRvIHN0YXkgd2l0aGluIHRoZSA4MCBjaGFy YWN0ZXIgbGltaXQuCgpZb3UncmUgcmlnaHQsIGFuZCBpdCdzIGJldHRlci4gVGhhbmtzLgoKCj4K Pgo+PiArCX0gZWxzZSB7Cj4+ICsJCWZvciAoaSA9IDA7IGkgPCBjbGtfaHdfZ2V0X251bV9wYXJl bnRzKGh3KTsgaSsrKSB7Cj4+ICsJCQlwYXJlbnQgPSBjbGtfaHdfZ2V0X3BhcmVudF9ieV9pbmRl eChodywgaSk7Cj4+ICsJCQlwYXJlbnRfcmF0ZSA9IGNsa19od19nZXRfcmF0ZShwYXJlbnQpOwo+ PiArCQkJaWYgKHBhcmVudF9yYXRlID09IGJlc3RfcGFyZW50X3JhdGUpCj4+ICsJCQkJYnJlYWs7 Cj4+ICsJCX0KPj4gKwkJaWYgKGkgPCBjbGtfaHdfZ2V0X251bV9wYXJlbnRzKGh3KSkKPj4gKwkJ CXJldHVybiBfc2V0X3JhdGUobWl4LCBpLAo+PiArCQkJCQlfZ2V0X2Rpdl92YWwobWl4LCBiZXN0 X2Rpdmlzb3IpLCAxLCAxKTsKPj4gKwkJZWxzZQo+PiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gU2Ft ZS4KCk9LLgoKCj4KPj4gKwl9Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGFzcl9jbGtfbWl4 X2luaXQoc3RydWN0IGNsa19odyAqaHcpCj4+ICt7Cj4+ICsJc3RydWN0IGFzcl9jbGtfbWl4ICpt aXggPSB0b19jbGtfbWl4KGh3KTsKPj4gKwo+PiArCWlmIChtaXgtPnRhYmxlKQo+PiArCQlfZmls dGVyX2Nsa190YWJsZShtaXgsIG1peC0+dGFibGUsIG1peC0+dGFibGVfc2l6ZSk7Cj4+ICt9Cj4+ ICsKPj4gK2NvbnN0IHN0cnVjdCBjbGtfb3BzIGFzcl9jbGtfbWl4X29wcyA9IHsKPj4gKwkuZGV0 ZXJtaW5lX3JhdGUgPSBhc3JfY2xrX21peF9kZXRlcm1pbmVfcmF0ZSwKPj4gKwkuc2V0X3JhdGVf YW5kX3BhcmVudCA9IGFzcl9jbGtfbWl4X3NldF9yYXRlX2FuZF9wYXJlbnQsCj4+ICsJLnNldF9y YXRlID0gYXNyX2Nsa19zZXRfcmF0ZSwKPj4gKwkuc2V0X3BhcmVudCA9IGFzcl9jbGtfc2V0X3Bh cmVudCwKPj4gKwkuZ2V0X3BhcmVudCA9IGFzcl9jbGtfbWl4X2dldF9wYXJlbnQsCj4+ICsJLnJl Y2FsY19yYXRlID0gYXNyX2Nsa19taXhfcmVjYWxjX3JhdGUsCj4+ICsJLmluaXQgPSBhc3JfY2xr X21peF9pbml0LAo+PiArfTsKPj4gKwo+PiArc3RydWN0IGNsayAqYXNyX2Nsa19yZWdpc3Rlcl9t aXgoc3RydWN0IGRldmljZSAqZGV2LAo+PiArCQkJCQljb25zdCBjaGFyICpuYW1lLAo+PiArCQkJ CQljb25zdCBjaGFyICoqcGFyZW50X25hbWVzLAo+PiArCQkJCQl1OCBudW1fcGFyZW50cywKPj4g KwkJCQkJdW5zaWduZWQgbG9uZyBmbGFncywKPj4gKwkJCQkJc3RydWN0IGFzcl9jbGtfbWl4X2Nv bmZpZyAqY29uZmlnLAo+PiArCQkJCQlzcGlubG9ja190ICpsb2NrKQo+PiArewo+PiArCXN0cnVj dCBhc3JfY2xrX21peCAqbWl4Owo+PiArCXN0cnVjdCBjbGsgKmNsazsKPj4gKwlzdHJ1Y3QgY2xr X2luaXRfZGF0YSBpbml0Owo+PiArCXNpemVfdCB0YWJsZV9ieXRlczsKPj4gKwo+PiArCW1peCA9 IGt6YWxsb2Moc2l6ZW9mKCptaXgpLCBHRlBfS0VSTkVMKTsKPj4gKwlpZiAoIW1peCkKPj4gKwkJ cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4+ICsKPj4gKwlpbml0Lm5hbWUgPSBuYW1lOwo+PiAr CWluaXQuZmxhZ3MgPSBmbGFncyB8IENMS19HRVRfUkFURV9OT0NBQ0hFOwo+PiArCWluaXQucGFy ZW50X25hbWVzID0gcGFyZW50X25hbWVzOwo+PiArCWluaXQubnVtX3BhcmVudHMgPSBudW1fcGFy ZW50czsKPj4gKwlpbml0Lm9wcyA9ICZhc3JfY2xrX21peF9vcHM7Cj4+ICsKPj4gKwltZW1jcHko Jm1peC0+cmVnX2luZm8sICZjb25maWctPnJlZ19pbmZvLCBzaXplb2YoY29uZmlnLT5yZWdfaW5m bykpOwo+PiArCWlmIChjb25maWctPnRhYmxlKSB7Cj4gSW4gcmVhbCBsaWZlIHRlcm1zICJjb25m aWciIGlzIGFsd2F5cyBzZGhfbWl4X2NvbmZpZywgcmlnaHQ/ICBTbyB0YWJsZQo+IGlzIGFsd2F5 cyBub24tTlVMTC4gIFdoYXQncyB0aGUgcG9pbnQgb2YgaGF2aW5nIGEgTlVMTCB0YWJsZT8gIEl0 IGZlZWxzCj4gbGlrZSB3ZSBoYXZlIGEgYnVuY2ggb2YgY29kZSB0byBoYW5kbGUgYSBjb25kaXRp b24gd2hpY2ggbmV2ZXIgaGFwcGVucywKPiBhbmQgSSBkb24ndCB0aGUgY29kZSB3ZWxsIGVub3Vn aCB0byBzYXkgaWYgaXQncyBhIHJlYXNvbmFibGUgZmVhdHVyZSB0bwo+IGFkZCBpbiB0aGUgZnV0 dXJlZS4uCgpJbiB0aGlzIHBhdGNoLCBpbmRlZWQgdGFibGUgaXMgYWx3YXlzIG5vbi1OVUxMLiBU aGVyZSBhcmUgb3RoZXIgY2xvY2tzLApsaWtlIFZQVS9HUFUgY2xvY2suIFRoZSBjbG9jayBjb250 cm9scyBhcmUgYSBsaXR0bGUgZGlmZmVyZW50IHRoYW4gdGhlCmJhc2ljIGNsb2NrcyBpbiB0aGlz IHBhdGNoLiBTbyBJIHBsYW4gdG8gYWRkIHRoZW0gaW4gYW5vdGhlciBwYXRjaApsYXRlci4gR1BV IGNsb2NrIGRvZXMgaGF2ZSBhIE5VTEwgdGFibGUuICBGcm9tIHRoaXMgYXNwZWN0LCBHUFUgY2xv Y2sKbWlnaHQgbm90IHVzZSB0aGlzIHJlZ2lzdGVyIHR5cGUuIEknbGwgcmVtb3ZlIHRoZSB0ZXN0 IGhlcmUuICBUaGFua3MuCgoKPgo+PiArCQl0YWJsZV9ieXRlcyA9IHNpemVvZigqY29uZmlnLT50 YWJsZSkgKiBjb25maWctPnRhYmxlX3NpemU7Cj4+ICsJCW1peC0+dGFibGUgPSBrbWVtZHVwKGNv bmZpZy0+dGFibGUsCj4+ICsJCQkJCQl0YWJsZV9ieXRlcywgR0ZQX0tFUk5FTCk7Cj4gVGhpcyBj YW4gZml0IG9uIG9uZSBsaW5lOgo+Cj4gCQltaXgtPnRhYmxlID0ga21lbWR1cChjb25maWctPnRh YmxlLCB0YWJsZV9ieXRlcywgR0ZQX0tFUk5FTCk7CgpPSy4KCgo+Cj4KPj4gKwkJaWYgKCFtaXgt PnRhYmxlKSB7Cj4+ICsJCQlrZnJlZShtaXgpOwo+PiArCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01F TSk7Cj4+ICsJCX0KPj4gKwkJbWl4LT50YWJsZV9zaXplID0gY29uZmlnLT50YWJsZV9zaXplOwo+ PiArCX0KPj4gKwo+PiArCW1peC0+bG9jayA9IGxvY2s7Cj4+ICsJbWl4LT5ody5pbml0ID0gJmlu aXQ7Cj4+ICsKPj4gKwljbGsgPSBjbGtfcmVnaXN0ZXIoZGV2LCAmbWl4LT5odyk7Cj4+ICsKPj4g KwlpZiAoSVNfRVJSKGNsaykpIHsKPj4gKwkJa2ZyZWUobWl4LT50YWJsZSk7Cj4+ICsJCWtmcmVl KG1peCk7Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJuIGNsazsKPj4gK30KPj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvY2xrL2Fzci9jbGstcGxsLmMgYi9kcml2ZXJzL2Nsay9hc3IvY2xrLXBsbC5jCj4+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAuLjIwODdmYmIKPj4gLS0tIC9k ZXYvbnVsbAo+PiArKysgYi9kcml2ZXJzL2Nsay9hc3IvY2xrLXBsbC5jCj4+IEBAIC0wLDAgKzEs NjQyIEBACj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+PiArLyoKPj4g KyAqIGNsb2NrIHBsbCBkcml2ZXIgZmlsZSBmb3IgYXNyLTg3NTFjCj4+ICsgKgo+PiArICogQ29w eXJpZ2h0IChDKSAyMDE5IEFTUiBNaWNyb2VsZWN0cm9uaWNzKFNoYW5naGFpKSBDby4sIEx0ZC4K Pj4gKyAqIEtldmluIExpdSA8a2V2aW5saXVAYXNybWljcm8uY29tPgo+PiArICogUWlhbwlaaG91 IDxxaWFvemhvdUBhc3JtaWNyby5jb20+Cj4gICAgICAgICAgICBeXl5eXgoKSSdsbCBmaXggaXQu CgoKPgo+PiArICoKPj4gKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwo+PiArICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMg cHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55Cj4+ICsgKiB3YXJyYW50eSBv ZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCj4+ICsgKi8KPj4gKwo+PiAr I2luY2x1ZGUgPGxpbnV4L2lvLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4+ICsjaW5j bHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+ Cj4+ICsjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KPj4gKyNpbmNsdWRlICJjbGsuaCIKPj4gKyNp bmNsdWRlICJjbGstcGxsLmgiCj4+ICsKPj4gKyNkZWZpbmUgcGxsX3JlYWRsX2NyKHApIGNsa19y ZWFkbChwLT5wYXJhbXMtPmNyX3JlZykKPj4gKyNkZWZpbmUgcGxsX3JlYWRsX3BsbF9zd2NyKHAp IGNsa19yZWFkbChwLT5wYXJhbXMtPnBsbF9zd2NyKQo+PiArI2RlZmluZSBwbGxfcmVhZGxfcGxs X3N3Y3IyKHApIGNsa19yZWFkbChwLT5wYXJhbXMtPnBsbF9zd2NyMikKPj4gKyNkZWZpbmUgcGxs X3dyaXRlbF9jcih2YWwsIHApIGNsa193cml0ZWwodmFsLCBwLT5wYXJhbXMtPmNyX3JlZykKPj4g KyNkZWZpbmUgcGxsX3dyaXRlbF9wbGxfc3djcih2YWwsIHApIGNsa193cml0ZWwodmFsLCBwLT5w YXJhbXMtPnBsbF9zd2NyKQo+PiArI2RlZmluZSBwbGxfd3JpdGVsX3BsbF9zd2NyMih2YWwsIHAp IGNsa193cml0ZWwodmFsLCBwLT5wYXJhbXMtPnBsbF9zd2NyMikKPj4gKwo+PiArLyogdW5pZmll ZCBwbGx4X2NyIGZvciBwbGwyfjUgKi8KPj4gK3VuaW9uIHBsbHhfY3Igewo+PiArCXN0cnVjdCB7 Cj4+ICsJCXVuc2lnbmVkIGludCBmcmNkaXY6ODsKPj4gKwkJdW5zaWduZWQgaW50IGZiZGl2Ojc7 Cj4+ICsJCXVuc2lnbmVkIGludCByZXNlcnZlZDo0Owo+PiArCQl1bnNpZ25lZCBpbnQgcHU6MTsK Pj4gKwkJdW5zaWduZWQgaW50IHJlc2VydmVkMTo0Owo+PiArCQl1bnNpZ25lZCBpbnQgc3NkOjQ7 Cj4+ICsJCXVuc2lnbmVkIGludCBzc2R4MjoxOwo+PiArCQl1bnNpZ25lZCBpbnQgZm9sb2NrX2Vu OjE7Cj4+ICsJCXVuc2lnbmVkIGludCBzc21vZDoyOwo+PiArCX0gYjsKPj4gKwl1bnNpZ25lZCBp bnQgdjsKPj4gK307Cj4+ICsKPj4gKy8qIHVuaWZpZWQgcGxsIFNXIGNvbnRyb2wgcmVnaXN0ZXIg Zm9yIHBsbDF+NSAqLwo+PiArdW5pb24gcGxseF9zd2NyIHsKPj4gKwlzdHJ1Y3Qgewo+PiArCQl1 bnNpZ25lZCBpbnQgcmVzZXJ2ZWQ6NzsKPj4gKwkJdW5zaWduZWQgaW50IGJhbmRfc2VsOjE7Cj4+ ICsJCXVuc2lnbmVkIGludCBwdW1wY3VyOjI7Cj4+ICsJCXVuc2lnbmVkIGludCBmYWxvY2tfZW46 MTsKPj4gKwkJdW5zaWduZWQgaW50IGt2Y286MzsKPj4gKwkJdW5zaWduZWQgaW50IHJlZ3ZvbDoy Owo+PiArCQl1bnNpZ25lZCBpbnQgYnlwYXNzOjE7Cj4+ICsJCXVuc2lnbmVkIGludCBsb2NrZGx5 OjM7Cj4+ICsJCXVuc2lnbmVkIGludCBmb2xvY2tfZW46MTsKPj4gKwkJdW5zaWduZWQgaW50IG1v ZF9zZWw6MTsKPj4gKwkJdW5zaWduZWQgaW50IHRlX3NlbDoyOwo+PiArCQl1bnNpZ25lZCBpbnQg YXRfZW46MTsKPj4gKwkJdW5zaWduZWQgaW50IGR0X2VuOjE7Cj4+ICsJCXVuc2lnbmVkIGludCBk aXYxX2VuOjE7Cj4+ICsJCXVuc2lnbmVkIGludCBkaXYyX2VuOjE7Cj4+ICsJCXVuc2lnbmVkIGlu dCBkaXYzX2VuOjE7Cj4+ICsJCXVuc2lnbmVkIGludCBkaXY0X2VuOjE7Cj4+ICsJCXVuc2lnbmVk IGludCBkaXY1X2VuOjE7Cj4+ICsJCXVuc2lnbmVkIGludCBjbGtfZW46MTsKPj4gKwl9IGI7Cj4+ ICsJdW5zaWduZWQgaW50IHY7Cj4+ICt9Owo+PiArCj4+ICsvKiBwbGwgU1cgY29udHJvbCByZWdp c3RlciBmb3IgcGxsNi83ICovCj4+ICt1bmlvbiBwbGx4X3N3Y3JfbmV3IHsKPj4gKwlzdHJ1Y3Qg ewo+PiArCQl1bnNpZ25lZCBpbnQgZmJkaXY6NzsKPj4gKwkJdW5zaWduZWQgaW50IGJhbmRfc2Vs OjE7Cj4+ICsJCXVuc2lnbmVkIGludCBwdW1wY3VyOjI7Cj4+ICsJCXVuc2lnbmVkIGludCBmYWxv Y2tfZW46MTsKPj4gKwkJdW5zaWduZWQgaW50IGt2Y286MzsKPj4gKwkJdW5zaWduZWQgaW50IHJl Z3ZvbDoyOwo+PiArCQl1bnNpZ25lZCBpbnQgYnlwYXNzOjE7Cj4+ICsJCXVuc2lnbmVkIGludCBs b2NrZGx5OjM7Cj4+ICsJCXVuc2lnbmVkIGludCBmb2xvY2tfZW46MTsKPj4gKwkJdW5zaWduZWQg aW50IG1vZF9zZWw6MTsKPj4gKwkJdW5zaWduZWQgaW50IHRlX3NlbDoyOwo+PiArCQl1bnNpZ25l ZCBpbnQgYXRfZW46MTsKPj4gKwkJdW5zaWduZWQgaW50IGR0X2VuOjE7Cj4+ICsJCXVuc2lnbmVk IGludCBkaXYxX2VuOjE7Cj4+ICsJCXVuc2lnbmVkIGludCBkaXYyX2VuOjE7Cj4+ICsJCXVuc2ln bmVkIGludCBkaXYzX2VuOjE7Cj4+ICsJCXVuc2lnbmVkIGludCBkaXY0X2VuOjE7Cj4+ICsJCXVu c2lnbmVkIGludCBkaXY1X2VuOjE7Cj4+ICsJCXVuc2lnbmVkIGludCBwdToxOwo+PiArCX0gYjsK Pj4gKwl1bnNpZ25lZCBpbnQgdjsKPj4gK307Cj4+ICsKPj4gKy8qIHBsbCBTVyBjb250cm9sIHJl Z2lzdGVyMiBmb3IgcGxsNiAqLwo+PiArdW5pb24gcGxseF9zd2NyMiB7Cj4+ICsJc3RydWN0IHsK Pj4gKwkJdW5zaWduZWQgaW50IGZyY2Rpdjo4Owo+PiArCQl1bnNpZ25lZCBpbnQgc3NkOjQ7Cj4+ ICsJCXVuc2lnbmVkIGludCBzc2R4MjoxOwo+PiArCQl1bnNpZ25lZCBpbnQgZm9sb2NrX2VuOjE7 Cj4+ICsJCXVuc2lnbmVkIGludCBzc21vZDoyOwo+PiArCQl1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQ6 MTU7Cj4+ICsJCXVuc2lnbmVkIGludCBsb2NrZWQ6MTsKPj4gKwl9IGI7Cj4+ICsJdW5zaWduZWQg aW50IHY7Cj4+ICt9Owo+PiArCj4+ICsvKiBwbGwgU1cgY29udHJvbCByZWdpc3RlcjIgZm9yIHBs bDcgKi8KPj4gK3VuaW9uIHBsbHhfc3djcjJfZnJhYyB7Cj4+ICsJc3RydWN0IHsKPj4gKwkJdW5z aWduZWQgaW50IGZyY2RpdjoyNDsKPj4gKwkJdW5zaWduZWQgaW50IHJlc2VydmVkOjc7Cj4+ICsJ CXVuc2lnbmVkIGludCBsb2NrZWQ6MTsKPj4gKwl9IGI7Cj4+ICsJdW5zaWduZWQgaW50IHY7Cj4+ ICt9Owo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGt2Y29fcmFuZ2Uga3Zjb19ybmdfdGFibGVbXSA9 IHsKPj4gKwkvKiBIaWdoIGJhbmQgKi8KPj4gKwl7MjYyMCwgMjc4MCwgMHg3LCAxfSwKPj4gKwl7 MjQ3MCwgMjYyMCwgMHg2LCAxfSwKPj4gKwl7MjMyMCwgMjQ3MCwgMHg1LCAxfSwKPj4gKwl7MjE0 MCwgMjMyMCwgMHg0LCAxfSwKPj4gKwl7MTk3MCwgMjE0MCwgMHgzLCAxfSwKPj4gKwl7MTgyMCwg MTk3MCwgMHgyLCAxfSwKPj4gKwl7MTY3MCwgMTgyMCwgMHgxLCAxfSwKPj4gKwl7MTUxMCwgMTY3 MCwgMHgwLCAxfSwKPj4gKwkvKiBMb3cgYmFuZCAtIHByZWZlciBoaWdoIGJhbmQgKi8KPj4gKwl7 MTYwMCwgMTc2MCwgMHg3LCAwfSwKPj4gKwl7MTQ1MCwgMTYwMCwgMHg2LCAwfSwKPj4gKwl7MTMw MCwgMTQ1MCwgMHg1LCAwfSwKPj4gKwl7MTE0MCwgMTMwMCwgMHg0LCAwfSwKPj4gKwl7OTcwLCAx MTQwLCAweDMsIDB9LAo+PiArCXs4MjAsIDk3MCwgMHgyLCAwfSwKPj4gKwl7NjgwLCA4MjAsIDB4 MSwgMH0sCj4+ICsJezU0MCwgNjgwLCAweDAsIDB9LAo+PiArfTsKPj4gKwo+PiArc3RhdGljIGlu dCBfX3BsbF9pc19lbmFibGVkKHN0cnVjdCBjbGtfaHcgKmh3KQo+PiArewo+PiArCXN0cnVjdCBj bGtfdmNvICp2Y28gPSB0b19jbGtfdmNvKGh3KTsKPj4gKwl1bmlvbiBwbGx4X2NyIHBsbHhfY3I7 Cj4+ICsJdW5pb24gcGxseF9zd2NyX25ldyBwbGx4X3N3Y3JfbmV3Owo+PiArCXVuc2lnbmVkIGlu dCBlbmFibGVkOwo+PiArCj4+ICsJaWYgKHZjby0+ZmxhZ3MgJiBBU1JfUExMX1JFR19ORVcpIHsK Pj4gKwkJcGxseF9zd2NyX25ldy52ID0gcGxsX3JlYWRsX3BsbF9zd2NyKHZjbyk7Cj4+ICsJCWVu YWJsZWQgPSBwbGx4X3N3Y3JfbmV3LmIucHU7Cj4+ICsJfSBlbHNlIHsKPj4gKwkJcGxseF9jci52 ID0gcGxsX3JlYWRsX2NyKHZjbyk7Cj4+ICsJCWVuYWJsZWQgPSBwbGx4X2NyLmIucHU7Cj4+ICsJ fQo+PiArCj4+ICsJcmV0dXJuIGVuYWJsZWQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIF9f Y2xrX3Zjb19yYXRlMnJlZyhzdHJ1Y3QgY2xrX3ZjbyAqdmNvLCB1bnNpZ25lZCBsb25nIHJhdGUs Cj4+ICsJCQkgICAgICAgdW5zaWduZWQgaW50ICprdmNvLCB1bnNpZ25lZCBpbnQgKmJhbmQpCj4+ ICt7Cj4+ICsJaW50IGksIHNpemU7Cj4+ICsKPj4gKwlzaXplID0gQVJSQVlfU0laRShrdmNvX3Ju Z190YWJsZSk7Cj4gTm8gbmVlZCBmb3IgdGhlICJzaXplIiB2YXJpYWJsZS4gIFVzZSBBUlJBWV9T SVpFKCkgZGlyZWN0bHkuCgpPSy4KCgo+Cj4+ICsKPj4gKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsg aSsrKSB7Cj4+ICsJCWlmIChyYXRlID49IGt2Y29fcm5nX3RhYmxlW2ldLnZjb19taW4gJiYKPj4g KwkJICAgIHJhdGUgPD0ga3Zjb19ybmdfdGFibGVbaV0udmNvX21heCkgewo+PiArCQkJKmt2Y28g PSBrdmNvX3JuZ190YWJsZVtpXS5rdmNvOwo+PiArCQkJKmJhbmQgPSBrdmNvX3JuZ190YWJsZVtp XS5iYW5kOwo+PiArCQkJcmV0dXJuOwo+PiArCQl9Cj4+ICsJfQo+PiArCWlmIChpID09IHNpemUp Cj4+ICsJCXBhbmljKCJjYW4ndCBmaW5kIGNvcnJlY3QgdmNvXG4iKTsKPiBET04nVCBQQU5JQyEh ISEKPgo+IDpQCgpJJ2xsIGZpeCBpdC4KCgo+Cj4+ICt9Cj4+ICsKPj4gKy8qIGZyZXF1ZW5jeSB1 bml0IE1oeiwgcmV0dXJuIHBsbCB2Y28gZnJlcSAqLwo+PiArc3RhdGljIHVuc2lnbmVkIGxvbmcg X19nZXRfdmNvX2ZyZXEoc3RydWN0IGNsa19odyAqaHcpCj4+ICt7Cj4+ICsJdW5zaWduZWQgaW50 IHBsbHhfdmNvLCBwbGx4ZnJjZCwgcGxseGZiZDsKPj4gKwl1bnNpZ25lZCBsb25nIHBsbHhfdmNv X2wsIHJhdGU7Cj4+ICsJc3RydWN0IGNsa192Y28gKnZjbyA9IHRvX2Nsa192Y28oaHcpOwo+PiAr CXVuaW9uIHBsbHhfY3IgcGxseF9jcjsKPj4gKwl1bmlvbiBwbGx4X3N3Y3JfbmV3IHBsbHhfc3dj cl9uZXc7Cj4+ICsJdW5pb24gcGxseF9zd2NyIHBsbHhfc3djcjsKPj4gKwl1bmlvbiBwbGx4X3N3 Y3IyIHBsbHhfc3djcjI7Cj4+ICsJdW5pb24gcGxseF9zd2NyMl9mcmFjIHBsbHhfc3djcjJfZnJh YzsKPj4gKwlib29sIGhpYmFuZDsKPj4gKwo+PiArCWlmICh2Y28tPmZsYWdzICYgQVNSX1BMTF9S RUdfTkVXKSB7Cj4+ICsJCXBsbHhfc3djcl9uZXcudiA9IHBsbF9yZWFkbF9wbGxfc3djcih2Y28p Owo+PiArCQlwbGx4ZmJkID0gcGxseF9zd2NyX25ldy5iLmZiZGl2ICYgMHg3ZjsKPiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl5eXl5eXl4KPiBUaGVyZSBp cyBubyBuZWVkIGZvciB0aGlzIG1hc2suCgpJJ2xsIGZpeCBhbGwgdGhlIG1hc2sgaXNzdWUuCgoK Pgo+PiArCQlpZiAodmNvLT5mbGFncyAmIEFTUl9QTExfRlJBQ19BVURJTykgewo+PiArCQkJcGxs eF9zd2NyMl9mcmFjLnYgPSBwbGxfcmVhZGxfcGxsX3N3Y3IyKHZjbyk7Cj4+ICsJCQlwbGx4ZnJj ZCA9IHBsbHhfc3djcjJfZnJhYy5iLmZyY2RpdiAmIDB4M2ZmZmZmOwo+ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl4K PiBJcyB0aGlzIHJlcXVpcmVkPwo+Cj4+ICsJCX0gZWxzZSB7Cj4+ICsJCQlwbGx4X3N3Y3IyLnYg PSBwbGxfcmVhZGxfcGxsX3N3Y3IyKHZjbyk7Cj4+ICsJCQlwbGx4ZnJjZCA9IHBsbHhfc3djcjIu Yi5mcmNkaXYgJiAweGZmOwo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF5eXl5eXl5eXl5eXl4KPgo+PiArCQl9Cj4+ICsJCWhpYmFuZCA9ICEhcGxseF9z d2NyX25ldy5iLmJhbmRfc2VsOwo+PiArCX0gZWxzZSB7Cj4+ICsJCXBsbHhfY3IudiA9IHBsbF9y ZWFkbF9jcih2Y28pOwo+PiArCQlwbGx4ZnJjZCA9IHBsbHhfY3IuYi5mcmNkaXYgJiAweGZmOwo+ PiArCQlwbGx4ZmJkID0gcGxseF9jci5iLmZiZGl2ICYgMHg3ZjsKPiBNYXNrcy4KPgo+PiArCQlw bGx4X3N3Y3IudiA9IHBsbF9yZWFkbF9wbGxfc3djcih2Y28pOwo+PiArCQloaWJhbmQgPSAhIXBs bHhfc3djci5iLmJhbmRfc2VsOwo+IE5vIG5lZWQgZm9yIHRoZSAhIS4KCk9LLgoKCj4KPj4gKwl9 Cj4+ICsKPj4gKwlpZiAocGxseGZyY2QpIHsKPj4gKwkJaWYgKCgodmNvLT5mbGFncyAmIEFTUl9Q TExfUkVHX05FVykgJiYgKHZjby0+ZmxhZ3MgJiBBU1JfUExMX0ZSQUNfQVVESU8pKSkgewo+IE92 ZXIgODAgY2hhcmFjdGVycy4gIFRvbyBtYW55IHBhcmVucy4gIFdyaXRlIGl0IGxpa2UgdGhpczoK Pgo+IAkJaWYgKCh2Y28tPmZsYWdzICYgQVNSX1BMTF9SRUdfTkVXKSAmJgo+IAkJICAgICh2Y28t PmZsYWdzICYgQVNSX1BMTF9GUkFDX0FVRElPKSkgewo+Cj4KPj4gKwkJCWlmIChwbGx4ZnJjZCA8 PSAoMSA8PCAyMCkpIHsKPj4gKwkJCQlwbGx4X3Zjb19sID0gKHVuc2lnbmVkIGxvbmcpcGxseGZi ZCAqIDI2ICogTUhaICsKPj4gKwkJCQkJCURJVl9ST1VORF9VUCgodW5zaWduZWQgbG9uZylwbGx4 ZnJjZCAqIDI2ICogTUhaLCAoMSA8PCAyMCkpOwo+IEFyZSB0aGVzZSBjYXN0cyByZXF1aXJlZD8g IEl0IGxvb2tzIGxpa2UgdGhlIGNvZGUgYXNzdW1lcyBsb25nIGlzIDY0Cj4gYml0cywgYnV0IGV2 ZW4gb24gNjQgYml0IHN5c3RlbXMgd2UgY2FuIGJ1aWxkIGEgMzIgYml0IGtlcm5lbCBzbyBpdCdz Cj4gbm90IGFsd2F5cyB0cnVlLgo+Cj4gTXkgZXllcyBnZXQgbWl4ZWQgdXAgYmV0d2VlbiBwbGx4 ZmJkIGFuZCBwbGx4ZnJjZC4uLiAgOiggIFRoZXkgc2F5IHRoYXQKPiBwZW9wbGUgb25seSB1c2Ug dGhlIGZpcnN0IGFuZCBsYXN0IGxldHRlcnMgdG8gcmVhZC4gIExpa2UgeW91IGNhbiBqdW1ibGUK PiB1cCBhbGwgdGhlIG1pZGRsZSBsZXR0ZXJzIGFuZCB0ZXh0IGlzIHN0aWxsIHJlYWRhYmxlLgoK VW5kZXJzdG9vZC4gd2lsbCB1c2UgbW9yZSByZWFkYWJsZSBuYW1lcy4KCgo+Cj4gICAiSXQgZGVv c24ndCBtdHRhZXIgaW4gd2FodCBvcmVkciB0aGUgbHR0ZWVycyBpbiBhIHdyb2QgYXJlLCB0aGUg b2xueQo+ICAgaXBybW9ldG50IHRpaG5nIGlzIHRhaHQgdGhlIGZyaXN0IGFuZCBsc2F0IGx0dGVl ciBiZSBhdCB0aGUgcmdoaXQKPiAgIHBjbGFlLiAgVGhlIHJzZXQgY2FuIGJlIGEgdG9hdGwgbXNl cyBhbmQgeW91IGNhbiBzaXRsbCByYWVkIGl0IHdvdXRoaXQKPiAgIHBvcmJlbG0uICBUaWhzIGlz IGJjdXNlYWUgdGhlIGh1YW1uIG1uaWQgZGVvcyBub3QgcmFlZCBlcnZleSBsdGV0ZXIgYnkKPiAg IGlzdGxlZiwgYnV0IHRoZSB3cm9kIGFzIGEgd2xvaGUuIgoKOikKCgo+Cj4gTWVhbndoaWxlLCBJ IHVuZGVyc3RhbmQgdGhhdCB0aGUgbmFtZXMgY29tZSBkaXJlY3RseSBmcm9tIHRoZSBoYXJkd2Fy ZQo+IGRldnMgc28gdGhleSBhcmUgdGVycmlibGUgYW5kIHRoZXJlIGlzIG5vdGhpbmcgd2UgY2Fu IGRvIHRvIGZpeCBpdC4uLgo+IEJ1dCBJJ20ganVzdCBjb21wbGFpbmluZyB0aGF0IGl0IG1ha2Vz IGl0IHZlcnkgaGFyZCB0byByZWFkLgoKSSdsbCBmaXggaXQuCgoKPgo+IFdlIGNvdWxkIG1ha2Ug YSBmdW5jdGlvbjoKPiBzdGF0aWMgdW5zaWduZWQgaW50IHBsbHhfcmF0ZSh1bnNpZ25lZCBpbnQg cGxseF92YWwpCj4gewo+IAlyZXR1cm4gcGxseGZiZCAqIDI2ICogTUhaOwo+IH0KPgo+IAkJCQlw bGx4X3Zjb19sID0gcGxseF9yYXRlKHBsbHhmYmQpICsKPiAJCQkJCQlESVZfUk9VTkRfVVAocGxs eF9yYXRlKHBsbHhmcmNkKSwgKDEgPDwgMjApKTsKPgo+IEkgZG9uJ3Qga25vdy4uLgo+Cj4+ICsJ CQl9IGVsc2UgaWYgKChwbGx4ZnJjZCA+PSAoMyA8PCAyMCkpICYmIChwbGx4ZmJkID49IDEpKSB7 Cj4+ICsJCQkJcGxseF92Y29fbCA9ICh1bnNpZ25lZCBsb25nKXBsbHhmYmQgKiAyNiAqIE1IWiAt Cj4+ICsJCQkJCQlESVZfUk9VTkRfVVAoKCgxIDw8IDIyKSAtICh1bnNpZ25lZCBsb25nKXBsbHhm cmNkKSAqIDI2ICogTUhaLCAoMSA8PCAyMCkpOwo+PiArCQkJfSBlbHNlIHsKPj4gKwkJCQlwcl9l cnIoIiVzIGZyYWN0aW9uIGRpdmlkZXIgJXUgaXMgaW52YWxpZFxuIiwgX19jbGtfZ2V0X25hbWUo aHctPmNsayksIHBsbHhmcmNkKTsKPj4gKwkJCQlwYW5pYygiaW52YWxpZCBmcmFjdGlvbiBkaXZp ZGVyXG4iKTsKPiBSZW1vdmUgdGhlIHBhbmljKCkgcGxlYXNlLgoKSSdsbCBmaXggaXQuCgoKPgo+ PiArCQkJfQo+PiArCQkJcmF0ZSA9IERJVl9ST1VORF9VUChwbGx4X3Zjb19sLCA1MCkgKiA1MDsK PiByYXRlID0gcm91bmR1cChwbGx4X3Zjb19sLCA1MCk7CgpPSy4KCgo+Cj4KPj4gKwkJfSBlbHNl IHsKPj4gKwkJCWlmIChwbGx4ZnJjZCA8PSAoMSA8PCA2KSkgewo+PiArCQkJCXBsbHhfdmNvID0g cGxseGZiZCAqIDI2ICsgRElWX1JPVU5EX1VQKHBsbHhmcmNkICogMjYsIDY0KTsKPj4gKwkJCX0g ZWxzZSBpZiAoKHBsbHhmcmNkID49ICgzIDw8IDYpKSAmJiAocGxseGZiZCA+PSAxKSkgewo+PiAr CQkJCXBsbHhfdmNvID0gcGxseGZiZCAqIDI2ICsgRElWX1JPVU5EX1VQKHBsbHhmcmNkICogMjYs IDY0KSAtIDEwNDsKPj4gKwkJCX0gZWxzZSB7Cj4+ICsJCQkJcHJfZXJyKCIlcyBmcmFjdGlvbiBk aXZpZGVyICV1IGlzIGludmFsaWRcbiIsIF9fY2xrX2dldF9uYW1lKGh3LT5jbGspLCBwbGx4ZnJj ZCk7Cj4+ICsJCQkJcGFuaWMoImludmFsaWQgZnJhY3Rpb24gZGl2aWRlclxuIik7Cj4gcGFuaWMo KQoKSSdsbCBmaXggaXQuCgoKPgo+PiArCQkJfQo+PiArCQkJcmF0ZSA9IHBsbHhfdmNvICogTUha Owo+PiArCQl9Cj4+ICsJfSBlbHNlIHsKPj4gKwkJcmF0ZSA9IDI2ICogTUhaICogcGxseGZiZDsK Pj4gKwl9Cj4+ICsKPj4gKwlpZiAoaGliYW5kKQo+PiArCQlyYXRlID0gcmF0ZSAqIDI7Cj4+ICsK Pj4gKwlyZXR1cm4gcmF0ZTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgX19wbGxfdmNvX2Nm ZyhzdHJ1Y3QgY2xrX3ZjbyAqdmNvKQo+PiArewo+PiArCXVuaW9uIHBsbHhfc3djciBwbGx4X3N3 Y3I7Cj4+ICsJdW5pb24gcGxseF9zd2NyX25ldyBwbGx4X3N3Y3JfbmV3Owo+PiArCj4+ICsJaWYg KHZjby0+ZmxhZ3MgJiBBU1JfUExMX1JFR19ORVcpIHsKPj4gKwkJcGxseF9zd2NyX25ldy52ID0g cGxsX3JlYWRsX3BsbF9zd2NyKHZjbyk7Cj4+ICsJCXBsbHhfc3djcl9uZXcuYi5hdF9lbiA9IDA7 Cj4+ICsJCXBsbHhfc3djcl9uZXcuYi5kdF9lbiA9IDA7Cj4+ICsJCXBsbHhfc3djcl9uZXcuYi50 ZV9zZWwgPSAwOwo+PiArCQlwbGx4X3N3Y3JfbmV3LmIubW9kX3NlbCA9ICh2Y28tPmZsYWdzICYg QVNSX1BMTF9GUkFDX0ZFQVQpID8gMCA6IDE7Cj4+ICsJCXBsbHhfc3djcl9uZXcuYi5mb2xvY2tf ZW4gPSAwOwo+PiArCQlwbGx4X3N3Y3JfbmV3LmIubG9ja2RseSA9IDE7Cj4+ICsJCXBsbHhfc3dj cl9uZXcuYi5ieXBhc3MgPSAwOwo+PiArCQlwbGx4X3N3Y3JfbmV3LmIucmVndm9sID0gMTsKPj4g KwkJcGxseF9zd2NyX25ldy5iLmZhbG9ja19lbiA9IDE7Cj4+ICsJCXBsbHhfc3djcl9uZXcuYi5w dW1wY3VyID0gMTsKPj4gKwkJcGxsX3dyaXRlbF9wbGxfc3djcihwbGx4X3N3Y3JfbmV3LnYsIHZj byk7Cj4+ICsJfSBlbHNlIHsKPj4gKwkJcGxseF9zd2NyLnYgPSBwbGxfcmVhZGxfcGxsX3N3Y3Io dmNvKTsKPj4gKwkJcGxseF9zd2NyLmIuYXRfZW4gPSAwOwo+PiArCQlwbGx4X3N3Y3IuYi5kdF9l biA9IDA7Cj4+ICsJCXBsbHhfc3djci5iLnRlX3NlbCA9IDA7Cj4+ICsJCXBsbHhfc3djci5iLm1v ZF9zZWwgPSAodmNvLT5mbGFncyAmIEFTUl9QTExfRlJBQ19GRUFUKSA/IDAgOiAxOwo+PiArCQlw bGx4X3N3Y3IuYi5mb2xvY2tfZW4gPSAwOwo+PiArCQlwbGx4X3N3Y3IuYi5sb2NrZGx5ID0gMTsK Pj4gKwkJcGxseF9zd2NyLmIuYnlwYXNzID0gMDsKPj4gKwkJcGxseF9zd2NyLmIucmVndm9sID0g MTsKPj4gKwkJcGxseF9zd2NyLmIuZmFsb2NrX2VuID0gMTsKPj4gKwkJcGxseF9zd2NyLmIucHVt cGN1ciA9IDE7Cj4+ICsJCXBsbF93cml0ZWxfcGxsX3N3Y3IocGxseF9zd2NyLnYsIHZjbyk7Cj4+ ICsJfQo+PiArfQo+PiArCj4+ICsvKiBGSVhNRTogc2V0IHByZXNldCBwYXJhbWV0ZXJzIGRpcmVj dGx5IHJhdGhlciB0aGFuIGNvbXB1dGUgZnJvbSByYXRlICovCj4+ICtzdGF0aWMgdm9pZCBlbmFi bGVfcGxsX3NzYyhzdHJ1Y3QgY2xrX3ZjbyAqdmNvKQo+PiArewo+PiArCXN0cnVjdCBhc3JfdmNv X3BhcmFtcyAqdmNvX3BhcmFtcyA9IHZjby0+cGFyYW1zOwo+PiArCXVuaW9uIHBsbHhfY3IgcGxs eF9jcjsKPj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+PiArCXVuaW9uIHBsbHhfc3djcjIgcGxs eF9zd2NyMjsKPj4gKwo+PiArCXNwaW5fbG9ja19pcnFzYXZlKHZjby0+bG9jaywgZmxhZ3MpOwo+ PiArCWlmICh2Y28tPmZsYWdzICYgQVNSX1BMTF9SRUdfTkVXKSB7Cj4+ICsJCXBsbHhfc3djcjIu diA9IHBsbF9yZWFkbF9wbGxfc3djcjIodmNvKTsKPj4gKwkJcGxseF9zd2NyMi5iLnNzZCA9IHZj b19wYXJhbXMtPnNzY19kZXB0aCAmIDB4ZjsKPiBUaGUgbWFzayBpc24ndCByZWFsbHkgcmVxdWly ZWQuCgpJJ2xsIGZpeCBpdC4KCgo+Cj4+ICsJCXBsbHhfc3djcjIuYi5zc2R4MiA9IHZjb19wYXJh bXMtPnNzY19kZXB4Ml9lbiA/IDB4MSA6IDB4MDsKPiBDb3VsZCB5b3UgdXNlICJ2Y29fcGFyYW1z LT5zc2NfZGVweDJfZW4gPyAxIDogMCIuICBObyBuZWVkIGZvciBoZXguCgpPSy4KCgo+Cj4+ICsJ CXBsbHhfc3djcjIuYi5mb2xvY2tfZW4gPSB2Y29fcGFyYW1zLT5zc2NfZm9sb2NrX2VuID8gMHgx IDogMHgwOwo+PiArCQlwbGx4X3N3Y3IyLmIuc3Ntb2QgPSB2Y29fcGFyYW1zLT5zc2NfbW9kZSAm IDB4MzsKPj4gKwkJcGxsX3dyaXRlbF9wbGxfc3djcjIocGxseF9zd2NyMi52LCB2Y28pOwo+PiAr CX0gZWxzZSB7Cj4+ICsJCXBsbHhfY3IudiA9IHBsbF9yZWFkbF9jcih2Y28pOwo+PiArCQkvKiBT U0Mgd2lsbCBiZSBlbmFibGVkIGlmIHNjYyBkZXB0aCBpcyBub3QgMCAqLwo+PiArCQlwbGx4X2Ny LmIuc3NkID0gdmNvX3BhcmFtcy0+c3NjX2RlcHRoICYgMHhmOwo+PiArCQlwbGx4X2NyLmIuc3Nk eDIgPSB2Y29fcGFyYW1zLT5zc2NfZGVweDJfZW4gPyAweDEgOiAweDA7Cj4+ICsJCXBsbHhfY3Iu Yi5mb2xvY2tfZW4gPSB2Y29fcGFyYW1zLT5zc2NfZm9sb2NrX2VuID8gMHgxIDogMHgwOwo+PiAr CQlwbGx4X2NyLmIuc3Ntb2QgPSB2Y29fcGFyYW1zLT5zc2NfbW9kZSAmIDB4MzsKPj4gKwkJcGxs X3dyaXRlbF9jcihwbGx4X2NyLnYsIHZjbyk7Cj4+ICsJfQo+PiArCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUodmNvLT5sb2NrLCBmbGFncyk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGRpc2Fi bGVfcGxsX3NzYyhzdHJ1Y3QgY2xrX3ZjbyAqdmNvKQo+PiArewo+PiArCXN0cnVjdCBhc3JfdmNv X3BhcmFtcyAqdmNvX3BhcmFtcyA9IHZjby0+cGFyYW1zOwo+PiArCXVuaW9uIHBsbHhfY3IgcGxs eF9jcjsKPj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+PiArCXVuaW9uIHBsbHhfc3djcjIgcGxs eF9zd2NyMjsKPj4gKwo+PiArCXNwaW5fbG9ja19pcnFzYXZlKHZjby0+bG9jaywgZmxhZ3MpOwo+ PiArCWlmICh2Y28tPmZsYWdzICYgQVNSX1BMTF9SRUdfTkVXKSB7Cj4+ICsJCXBsbHhfc3djcjIu diA9IHBsbF9yZWFkbF9wbGxfc3djcjIodmNvKTsKPj4gKwkJcGxseF9zd2NyMi5iLnNzZCA9IDB4 MDsKPj4gKwkJcGxseF9zd2NyMi5iLnNzZHgyID0gMHgwOwo+PiArCQlwbGx4X3N3Y3IyLmIuZm9s b2NrX2VuID0gMHgwOwo+PiArCQlwbGx4X3N3Y3IyLmIuc3Ntb2QgPSB2Y29fcGFyYW1zLT5zc2Nf bW9kZSAmIDB4MzsKPj4gKwkJcGxsX3dyaXRlbF9wbGxfc3djcjIocGxseF9zd2NyMi52LCB2Y28p Owo+PiArCX0gZWxzZSB7Cj4+ICsJCXBsbHhfY3IudiA9IHBsbF9yZWFkbF9jcih2Y28pOwo+PiAr CQkvKiBTU0Mgd2lsbCBiZSBkaXNhYmxlZCBpZiBzY2MgZGVwdGggaXMgMCAqLwo+PiArCQlwbGx4 X2NyLmIuc3NkID0gMHgwOwo+PiArCQlwbGx4X2NyLmIuc3NkeDIgPSAweDA7Cj4+ICsJCXBsbHhf Y3IuYi5mb2xvY2tfZW4gPSAweDA7Cj4+ICsJCXBsbHhfY3IuYi5zc21vZCA9IDB4MDsKPj4gKwkJ cGxsX3dyaXRlbF9jcihwbGx4X2NyLnYsIHZjbyk7Cj4+ICsJfQo+PiArCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUodmNvLT5sb2NrLCBmbGFncyk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGNs a19wbGxfdmNvX2luaXQoc3RydWN0IGNsa19odyAqaHcpCj4+ICt7Cj4+ICsJc3RydWN0IGNsa192 Y28gKnZjbyA9IHRvX2Nsa192Y28oaHcpOwo+PiArCXVuc2lnbmVkIGxvbmcgdmNvX3JhdGU7Cj4+ ICsJdW5zaWduZWQgaW50IHZjb19ybmdsLCB2Y29fcm5naCwgdG1wOwo+PiArCXN0cnVjdCBhc3Jf dmNvX3BhcmFtcyAqcGFyYW1zID0gdmNvLT5wYXJhbXM7Cj4+ICsKPj4gKwlpZiAoIV9fcGxsX2lz X2VuYWJsZWQoaHcpKSB7Cj4+ICsJCV9fcGxsX3Zjb19jZmcodmNvKTsKPiByZXR1cm4gaGVyZS4K Pgo+PiArCX0gZWxzZSB7Cj4gVGhlbiBwdWxsIHRoZSBlbHNlIHN0YXRlbWVudCBpbiBvbmUgaW5k ZW50IGxldmVsLgoKT0suCgoKPgo+PiArCQl2Y29fcmF0ZSA9IF9fZ2V0X3Zjb19mcmVxKGh3KSAv IE1IWjsKPj4gKwkJaWYgKCEodmNvLT5mbGFncyAmIEFTUl9QTExfU0tJUF9ERUZfUkFURSkpIHsK Pj4gKwkJCS8qIGNoZWNrIHdoZXRoZXIgdmNvIGlzIGluIHRoZSByYW5nZSBvZiAyJSBvdXIgZXhw ZWN0YXRpb24gKi8KPj4gKwkJCXRtcCA9IHBhcmFtcy0+ZGVmYXVsdF9yYXRlIC8gTUhaOwo+PiAr CQkJaWYgKHRtcCAhPSB2Y29fcmF0ZSkgewo+PiArCQkJCXZjb19ybmdoID0gdG1wICsgdG1wICog MiAvIDEwMDsKPj4gKwkJCQl2Y29fcm5nbCA9IHRtcCAtIHRtcCAqIDIgLyAxMDA7Cj4+ICsJCQkJ aWYgKCEoKHZjb19ybmdsIDw9IHZjb19yYXRlKSAmJgo+PiArCQkJCQkgKHZjb19yYXRlIDw9IHZj b19ybmdoKSkpCj4+ICsJCQkJCXBhbmljKCJ3cm9uZyB2Y29fcmF0ZVxuIik7Cj4gcGFuaWMuCgpJ J2xsIGZpeCBpdC4KCgo+Cj4+ICsJCQl9Cj4+ICsJCX0KPj4gKwkJLyogTWFrZSBzdXJlIFNTQyBp cyBlbmFibGVkIGlmIHBsbCBpcyBvbiAqLwo+PiArCQlpZiAodmNvLT5mbGFncyAmIEFTUl9QTExf U1NDX0ZFQVQpIHsKPj4gKwkJCWVuYWJsZV9wbGxfc3NjKHZjbyk7Cj4+ICsJCQlwYXJhbXMtPnNz Y19lbmFibGVkID0gdHJ1ZTsKPj4gKwkJfQo+PiArCQlwcl9kZWJ1ZygiJXMgaXMgZW5hYmxlZCBA ICVsdVxuIiwgX19jbGtfZ2V0X25hbWUoaHctPmNsayksIHZjb19yYXRlICogTUhaKTsKPj4gKwl9 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgY2xrX3BsbF92Y29fZW5hYmxlKHN0cnVjdCBjbGtf aHcgKmh3KQo+PiArewo+PiArCXVuc2lnbmVkIGludCBkZWxheXRpbWUgPSA1MDsKPj4gKwl1bnNp Z25lZCBsb25nIGZsYWdzOwo+PiArCXN0cnVjdCBjbGtfdmNvICp2Y28gPSB0b19jbGtfdmNvKGh3 KTsKPj4gKwlzdHJ1Y3QgYXNyX3Zjb19wYXJhbXMgKnBhcmFtcyA9IHZjby0+cGFyYW1zOwo+PiAr CXVuaW9uIHBsbHhfY3IgcGxseF9jcjsKPj4gKwl1bmlvbiBwbGx4X3N3Y3JfbmV3IHBsbHhfc3dj cl9uZXc7Cj4+ICsKPj4gKwlpZiAoX19wbGxfaXNfZW5hYmxlZChodykpCj4+ICsJCXJldHVybiAw Owo+PiArCj4+ICsJc3Bpbl9sb2NrX2lycXNhdmUodmNvLT5sb2NrLCBmbGFncyk7Cj4+ICsJaWYg KHZjby0+ZmxhZ3MgJiBBU1JfUExMX1JFR19ORVcpIHsKPj4gKwkJcGxseF9zd2NyX25ldy52ID0g cGxsX3JlYWRsX3BsbF9zd2NyKHZjbyk7Cj4+ICsJCXBsbHhfc3djcl9uZXcuYi5wdSA9IDE7Cj4+ ICsJCXBsbF93cml0ZWxfcGxsX3N3Y3IocGxseF9zd2NyX25ldy52LCB2Y28pOwo+PiArCX0gZWxz ZSB7Cj4+ICsJCXBsbHhfY3IudiA9IHBsbF9yZWFkbF9jcih2Y28pOwo+PiArCQlwbGx4X2NyLmIu cHUgPSAxOwo+PiArCQlwbGxfd3JpdGVsX2NyKHBsbHhfY3IudiwgdmNvKTsKPj4gKwl9Cj4+ICsJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh2Y28tPmxvY2ssIGZsYWdzKTsKPj4gKwo+PiArCS8qIGNo ZWNrIGxvY2sgc3RhdHVzICovCj4+ICsJdWRlbGF5KDUwKTsKPj4gKwl3aGlsZSAoKCEoX19yYXdf cmVhZGwocGFyYW1zLT5sb2NrX3JlZykgJiBwYXJhbXMtPmxvY2tfZW5hYmxlX2JpdCkpCj4+ICsJ ICAgICAgICYmIGRlbGF5dGltZSkgewo+IFJlbW92ZSBleHRyYSBwYXJlbnMuICBNb3ZlIHRoZSAm JiB0byB0aGUgbGluZSBiZWZvcmUuICAiZGVsYXl0aW1lIiBpcwo+IG5vdCByZWFsbHkgInRpbWUi IGl0J3MgdGhlIG51bWJlciBvZiBpdGVyYXRpb24uICAidGltZSIgd291bGQgYmUKPiBpdGVyYXRp b25zIG11bHRpcGxpZWQgYnkgZml2ZS4KPgo+IAl3aGlsZSAoIShfX3Jhd19yZWFkbChwYXJhbXMt PmxvY2tfcmVnKSAmIHBhcmFtcy0+bG9ja19lbmFibGVfYml0KSAmJgo+IAkgICAgICAgZGVsYXkp IHsKT0suCj4+ICsJCXVkZWxheSg1KTsKPj4gKwkJZGVsYXl0aW1lLS07Cj4+ICsJfQo+PiArCj4+ ICsJLyogUExMIGNhbid0IGdldCB0byBzdGFibGUgc3RhdHVzIGluIHRpbWUgb24gZW11bGF0b3Jz IG9yIEZQR0EgKi8KPj4gKwlpZiAodW5saWtlbHkoIWRlbGF5dGltZSkpIHsKPiBSZW1vdmUgdGhl IHVubGlrZWx5KCkuCgpPSy4KCgo+Cj4+ICsJCXByX2VycigiJXMgZW5hYmxpbmcgZGlkbid0IGdl dCBzdGFibGUgd2l0aGluIDMwMHVzISEhXG4iLCBfX2Nsa19nZXRfbmFtZShody0+Y2xrKSk7Cj4+ ICsJCXJldHVybiAtRUJVU1k7Cj4+ICsJfQo+PiArCj4+ICsJaWYgKHZjby0+ZmxhZ3MgJiBBU1Jf UExMX1NTQ19GRUFUKQo+PiArCQlpZiAoKCh2Y28tPmZsYWdzICYgQVNSX1BMTF9TU0NfQU9OKSAm JiAhcGFyYW1zLT5zc2NfZW5hYmxlZCkKPj4gKwkJICAgIHx8ICEodmNvLT5mbGFncyAmIEFTUl9Q TExfU1NDX0FPTikpIHsKPiBNb3ZlIHRoZSB8fCB0byB0aGUgbGluZSBiZWZvcmUuICBCdXQgYWN0 dWFsbHkgdGhpcyBpcyB0ZXN0aW5nCj4gQVNSX1BMTF9TU0NfQU9OIHR3aWNlLiAgSXQgY2FuIGZp dCBvbiBvbmUgbGluZToKPgo+IAkJaWYgKCEodmNvLT5mbGFncyAmIEFTUl9QTExfU1NDX0FPTikg fHwgIXBhcmFtcy0+c3NjX2VuYWJsZWQpIHsKCk9LLgoKCj4KPgo+PiArCQkJZW5hYmxlX3BsbF9z c2ModmNvKTsKPj4gKwkJCXBhcmFtcy0+c3NjX2VuYWJsZWQgPSB0cnVlOwo+PiArCQl9Cj4+ICsK Pj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgY2xrX3BsbF92Y29fZGlz YWJsZShzdHJ1Y3QgY2xrX2h3ICpodykKPj4gK3sKPj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ PiArCXN0cnVjdCBjbGtfdmNvICp2Y28gPSB0b19jbGtfdmNvKGh3KTsKPj4gKwlzdHJ1Y3QgYXNy X3Zjb19wYXJhbXMgKnBhcmFtcyA9IHZjby0+cGFyYW1zOwo+PiArCXVuaW9uIHBsbHhfY3IgcGxs eF9jcjsKPj4gKwl1bmlvbiBwbGx4X3N3Y3JfbmV3IHBsbHhfc3djcl9uZXc7Cj4+ICsKPj4gKwlz cGluX2xvY2tfaXJxc2F2ZSh2Y28tPmxvY2ssIGZsYWdzKTsKPj4gKwlpZiAodmNvLT5mbGFncyAm IEFTUl9QTExfUkVHX05FVykgewo+PiArCQlwbGx4X3N3Y3JfbmV3LnYgPSBwbGxfcmVhZGxfcGxs X3N3Y3IodmNvKTsKPj4gKwkJcGxseF9zd2NyX25ldy5iLnB1ID0gMDsKPj4gKwkJcGxsX3dyaXRl bF9wbGxfc3djcihwbGx4X3N3Y3JfbmV3LnYsIHZjbyk7Cj4+ICsJfSBlbHNlIHsKPj4gKwkJcGxs eF9jci52ID0gcGxsX3JlYWRsX2NyKHZjbyk7Cj4+ICsJCXBsbHhfY3IuYi5wdSA9IDA7Cj4+ICsJ CXBsbF93cml0ZWxfY3IocGxseF9jci52LCB2Y28pOwo+PiArCX0KPj4gKwlzcGluX3VubG9ja19p cnFyZXN0b3JlKHZjby0+bG9jaywgZmxhZ3MpOwo+PiArCj4+ICsJaWYgKCh2Y28tPmZsYWdzICYg QVNSX1BMTF9TU0NfRkVBVCkgJiYKPj4gKwkgICAgISh2Y28tPmZsYWdzICYgQVNSX1BMTF9TU0Nf QU9OKSkgewo+PiArCQlkaXNhYmxlX3BsbF9zc2ModmNvKTsKPj4gKwkJcGFyYW1zLT5zc2NfZW5h YmxlZCA9IGZhbHNlOwo+PiArCX0KPj4gK30KPj4gKwo+PiArLyoKPj4gKyAqIHBsbCByYXRlIGNo YW5nZSByZXF1aXJlcyBzZXF1ZW5jZToKPj4gKyAqIGNsb2NrIG9mZiAtPiBjaGFuZ2UgcmF0ZSBz ZXR0aW5nIC0+IGNsb2NrIG9uCj4+ICsgKiBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgcmVhbGx5IGNo YW5nZSByYXRlLCBidXQgY2FjaGUgdGhlIGNvbmZpZwo+PiArICovCj4+ICtzdGF0aWMgaW50IGNs a19wbGxfdmNvX3NldHJhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwK Pj4gKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQo+PiArewo+PiArCXVuc2ln bmVkIGludCBpLCBrdmNvID0gMCwgYmFuZCwgZmJkLCBmcmNkOwo+PiArCXVuc2lnbmVkIGxvbmcg ZmxhZ3M7Cj4+ICsJdW5zaWduZWQgbG9uZyBuZXdfcmF0ZSA9IHJhdGUsIG9sZF9yYXRlOwo+PiAr CXN0cnVjdCBjbGtfdmNvICp2Y28gPSB0b19jbGtfdmNvKGh3KTsKPj4gKwlzdHJ1Y3QgYXNyX3Zj b19wYXJhbXMgKnBhcmFtcyA9IHZjby0+cGFyYW1zOwo+PiArCXVuaW9uIHBsbHhfc3djciBwbGx4 X3N3Y3I7Cj4+ICsJdW5pb24gcGxseF9zd2NyX25ldyBwbGx4X3N3Y3JfbmV3Owo+PiArCXVuaW9u IHBsbHhfc3djcjIgcGxseF9zd2NyMjsKPj4gKwl1bmlvbiBwbGx4X3N3Y3IyX2ZyYWMgcGxseF9z d2NyMl9mcmFjOwo+PiArCXVuaW9uIHBsbHhfY3IgcGxseF9jcjsKPj4gKwo+PiArCW9sZF9yYXRl ID0gX19nZXRfdmNvX2ZyZXEoaHcpOwo+PiArCS8qIHNldHAgMTogY2FsY3VsYXRlIGZiZCBmcmNk IGt2Y28gYW5kIGJhbmQgKi8KPj4gKwlpZiAocGFyYW1zLT5mcmVxX3RhYmxlKSB7Cj4+ICsJCWZv ciAoaSA9IDA7IGkgPCBwYXJhbXMtPmZyZXFfdGFibGVfc2l6ZTsgaSsrKSB7Cj4+ICsJCQlpZiAo cmF0ZSA9PSBwYXJhbXMtPmZyZXFfdGFibGVbaV0ub3V0cHV0X3JhdGUpIHsKPj4gKwkJCQlrdmNv ID0gcGFyYW1zLT5mcmVxX3RhYmxlW2ldLmt2Y287Cj4+ICsJCQkJYmFuZCA9IHBhcmFtcy0+ZnJl cV90YWJsZVtpXS5iYW5kOwo+PiArCQkJCWZyY2QgPSBwYXJhbXMtPmZyZXFfdGFibGVbaV0uZnJj ZDsKPj4gKwkJCQlmYmQgPSBwYXJhbXMtPmZyZXFfdGFibGVbaV0uZmJkOwo+PiArCQkJCWJyZWFr Owo+PiArCQkJfQo+PiArCQl9Cj4+ICsJCWlmIChpID09IHBhcmFtcy0+ZnJlcV90YWJsZV9zaXpl KQo+PiArCQkJcGFuaWMoImNhbid0IGZpbmQgY29ycmVjdCB2Y29cbiIpOwo+IHBhbmljCgpJJ2xs IGZpeCBpdC4KCgo+Cj4+ICsJfSBlbHNlIHsKPj4gKwkJX19jbGtfdmNvX3JhdGUycmVnKHZjbywg cmF0ZSAvIE1IWiwgJmt2Y28sICZiYW5kKTsKPj4gKwkJaWYgKGJhbmQpCj4+ICsJCQlyYXRlID0g cmF0ZSAvIDI7Cj4+ICsJCWlmICh2Y28tPmZsYWdzICYgQVNSX1BMTF9GUkFDX0FVRElPKSB7Cj4+ ICsJCQkvKiBGcmFjdGlvbiBhdWRpbyBQTEwgZGl2aWF0aW9uIGlzIHdpdGhpbiAyNEh6IHNvIHJv dW5kIHRoZSByYXRlIGJ5IDUwSHogKi8KPj4gKwkJCWlmIChyYXRlICUgNTApIHsKPj4gKwkJCQly YXRlID0gcmF0ZSAvIDUwICogNTA7Cj4gcmF0ZSA9IHJvdW5kb3duKHJhdGUsIDUwKTsKCkknbGwg Zml4IGl0LgoKCj4KPj4gKwkJCQlwcl9kZWJ1ZygiJXMgVHJ1bmNhdGUgdGhlIHJhdGUgc2V0IGZv ciAlcyBmcm9tICVsdUh6IHRvICVsdUh6XG4iLAo+PiArCQkJCQlfX2Z1bmNfXywgX19jbGtfZ2V0 X25hbWUoaHctPmNsayksIG5ld19yYXRlLCBiYW5kID8gcmF0ZSAqIDIgOiByYXRlKTsKPj4gKwkJ CQluZXdfcmF0ZSA9IGJhbmQgPyAocmF0ZSAqIDIpIDogcmF0ZTsKPj4gKwkJCX0KPj4gKwkJCWZi ZCA9IHJhdGUgLyAoMjYgKiBNSFopOwo+PiArCQkJZnJjZCA9IHJhdGUgJSAoMjYgKiBNSFopOwo+ PiArCQkJaWYgKGZyY2QgPiAxMyAqIE1IWikgewo+PiArCQkJCWZiZCsrOwo+PiArCQkJCWZyY2Qg PSAoMyA8PCAyMCkgKyAodW5zaWduZWQgbG9uZylmcmNkICogKDEgPDwgMjApIC8gKDI2ICogTUha KTsKPj4gKwkJCX0gZWxzZSB7Cj4+ICsJCQkJZnJjZCA9ICh1bnNpZ25lZCBsb25nKWZyY2QgKiAo MSA8PCAyMCkgLyAoMjYgKiBNSFopOwo+PiArCQkJfQo+PiArCQl9IGVsc2Ugewo+PiArCQkJLyog VGhlIG90aGVyIFBMTCBkaXZpYXRpb24gaXMgd2l0aGluIDFNaHogc28gcm91bmQgdGhlIHJhdGUg YnkgMU1oeiAqLwo+PiArCQkJaWYgKHJhdGUgJSBNSFopIHsKPj4gKwkJCQlyYXRlID0gcmF0ZSAv IE1IWiAqIE1IWjsKPj4gKwkJCQlwcl9kZWJ1ZygiJXMgVHJ1bmNhdGUgdGhlIHJhdGUgc2V0IGZv ciAlcyBmcm9tICVsdUh6IHRvICVsdUh6XG4iLAo+PiArCQkJCQlfX2Z1bmNfXywgX19jbGtfZ2V0 X25hbWUoaHctPmNsayksIG5ld19yYXRlLCBiYW5kID8gcmF0ZSAqIDIgOiByYXRlKTsKPj4gKwkJ CQluZXdfcmF0ZSA9IGJhbmQgPyAocmF0ZSAqIDIpIDogcmF0ZTsKPj4gKwkJCX0KPj4gKwkJCXJh dGUgLz0gTUhaOwo+PiArCQkJZmJkID0gcmF0ZSAvIDI2Owo+PiArCQkJZnJjZCA9IHJhdGUgJSAy NjsKPj4gKwkJCWlmIChmcmNkID4gMTMpIHsKPj4gKwkJCQlmYmQrKzsKPj4gKwkJCQlmcmNkID0g MTkyICsgKGZyY2QgKiA2NCAvIDI2KTsKPj4gKwkJCX0gZWxzZSB7Cj4+ICsJCQkJZnJjZCA9IGZy Y2QgKiA2NCAvIDI2Owo+PiArCQkJfQo+PiArCQl9Cj4+ICsJfQo+PiArCj4+ICsJc3Bpbl9sb2Nr X2lycXNhdmUodmNvLT5sb2NrLCBmbGFncyk7Cj4+ICsJLyogc2V0cCAyOiBzZXQgcGxsIGt2Y28v YmFuZCBhbmQgZmJkL2ZyY2Qgc2V0dGluZyAqLwo+PiArCWlmICh2Y28tPmZsYWdzICYgQVNSX1BM TF9SRUdfTkVXKSB7Cj4+ICsJCXBsbHhfc3djcl9uZXcudiA9IHBsbF9yZWFkbF9wbGxfc3djcih2 Y28pOwo+PiArCQlwbGx4X3N3Y3JfbmV3LmIua3ZjbyA9IGt2Y28gJiAweDc7Cj4+ICsJCXBsbHhf c3djcl9uZXcuYi5iYW5kX3NlbCA9IGJhbmQgJiAweDE7Cj4+ICsJCXBsbHhfc3djcl9uZXcuYi5m YmRpdiA9IGZiZCAmIDB4N2Y7Cj4gQ2hlY2sgdGhlc2UgbWFza3MuCgpJJ2xsIGZpeCBhbGwgdGhl IG1hc2sgaXNzdWVzLgoKCj4KPj4gKwkJcGxsX3dyaXRlbF9wbGxfc3djcihwbGx4X3N3Y3JfbmV3 LnYsIHZjbyk7Cj4+ICsJCWlmICh2Y28tPmZsYWdzICYgQVNSX1BMTF9GUkFDX0FVRElPKSB7Cj4+ ICsJCQlwbGx4X3N3Y3IyX2ZyYWMudiA9IHBsbF9yZWFkbF9wbGxfc3djcjIodmNvKTsKPj4gKwkJ CXBsbHhfc3djcjJfZnJhYy5iLmZyY2RpdiA9IGZyY2QgJiAweDNmZmZmZjsKPj4gKwkJCXBsbF93 cml0ZWxfcGxsX3N3Y3IyKHBsbHhfc3djcjJfZnJhYy52LCB2Y28pOwo+PiArCQl9IGVsc2Ugewo+ PiArCQkJcGxseF9zd2NyMi52ID0gcGxsX3JlYWRsX3BsbF9zd2NyMih2Y28pOwo+PiArCQkJcGxs eF9zd2NyMi5iLmZyY2RpdiA9IGZyY2QgJiAweGZmOwo+PiArCQkJcGxsX3dyaXRlbF9wbGxfc3dj cjIocGxseF9zd2NyMi52LCB2Y28pOwo+PiArCQl9Cj4+ICsJfSBlbHNlIHsKPj4gKwkJcGxseF9z d2NyLnYgPSBwbGxfcmVhZGxfcGxsX3N3Y3IodmNvKTsKPj4gKwkJcGxseF9zd2NyLmIua3ZjbyA9 IGt2Y28gJiAweDc7Cj4+ICsJCXBsbHhfc3djci5iLmJhbmRfc2VsID0gYmFuZCAmIDB4MTsKPj4g KwkJcGxsX3dyaXRlbF9wbGxfc3djcihwbGx4X3N3Y3IudiwgdmNvKTsKPj4gKwkJcGxseF9jci52 ID0gcGxsX3JlYWRsX2NyKHZjbyk7Cj4+ICsJCXBsbHhfY3IuYi5mcmNkaXYgPSBmcmNkICYgMHhm ZjsKPj4gKwkJcGxseF9jci5iLmZiZGl2ID0gZmJkICYgMHg3ZjsKPj4gKwkJcGxsX3dyaXRlbF9j cihwbGx4X2NyLnYsIHZjbyk7Cj4+ICsJfQo+PiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodmNv LT5sb2NrLCBmbGFncyk7Cj4+ICsKPj4gKwlwcl9kZWJ1ZygiJXMgJXMgcmF0ZSAlbHUtPiVsdSFc biIsIF9fZnVuY19fLAo+PiArCQkgX19jbGtfZ2V0X25hbWUoaHctPmNsayksIG9sZF9yYXRlLCBu ZXdfcmF0ZSk7Cj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB1bnNpZ25lZCBs b25nIGNsa192Y29fcmVjYWxjX3JhdGUoc3RydWN0IGNsa19odyAqaHcsCj4+ICsJCQkJCSB1bnNp Z25lZCBsb25nIHBhcmVudF9yYXRlKQo+PiArewo+PiArCXJldHVybiBfX2dldF92Y29fZnJlcSho dyk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBsb25nIGNsa192Y29fcm91bmRfcmF0ZShzdHJ1Y3Qg Y2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAo+PiArCQkJICAgICAgIHVuc2lnbmVkIGxv bmcgKnByYXRlKQo+PiArewo+PiArCXN0cnVjdCBjbGtfdmNvICp2Y28gPSB0b19jbGtfdmNvKGh3 KTsKPj4gKwl1bnNpZ25lZCBsb25nIG1heF9yYXRlID0gMCwgbmV3X3JhdGUgPSByYXRlOwo+PiAr CXVuc2lnbmVkIGludCBpLCBiYW5kLCBrdmNvOwo+PiArCXN0cnVjdCBhc3JfdmNvX3BhcmFtcyAq cGFyYW1zID0gdmNvLT5wYXJhbXM7Cj4+ICsKPj4gKwlpZiAocmF0ZSA+IHBhcmFtcy0+dmNvX21h eCB8fCByYXRlIDwgcGFyYW1zLT52Y29fbWluKSB7Cj4+ICsJCXByX2VycigiJWx1IHJhdGUgb3V0 IG9mIHJhbmdlIVxuIiwgcmF0ZSk7Cj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiArCX0KPj4gKwo+ PiArCWlmIChwYXJhbXMtPmZyZXFfdGFibGUpIHsKPj4gKwkJZm9yIChpID0gMDsgaSA8IHBhcmFt cy0+ZnJlcV90YWJsZV9zaXplOyBpKyspIHsKPj4gKwkJCWlmIChwYXJhbXMtPmZyZXFfdGFibGVb aV0ub3V0cHV0X3JhdGUgPD0gcmF0ZSkgewo+IFJldmVyc2UgdGhpcyBpZiBzdGF0ZW1lbnQuCj4K PiAJCWlmIChwYXJhbXMtPmZyZXFfdGFibGVbaV0ub3V0cHV0X3JhdGUgPiByYXRlKQo+IAkJCWNv bnRpbnVlOwo+Cj4+ICsJCQkJaWYgKG1heF9yYXRlIDwKPj4gKwkJCQkgICAgcGFyYW1zLT5mcmVx X3RhYmxlW2ldLm91dHB1dF9yYXRlKQo+PiArCQkJCQltYXhfcmF0ZSA9Cj4+ICsJCQkJCSAgICBw YXJhbXMtPmZyZXFfdGFibGVbaV0ub3V0cHV0X3JhdGU7Cj4gVGhlbiBmaXRzIGluIDgwIGNoYXJh Y3RlcnMuCj4KPiAJCQlpZiAobWF4X3JhdGUgPCBwYXJhbXMtPmZyZXFfdGFibGVbaV0ub3V0cHV0 X3JhdGUpCj4gCQkJCW1heF9yYXRlID0gcGFyYW1zLT5mcmVxX3RhYmxlW2ldLm91dHB1dF9yYXRl Owo+Cj4gQmV0dGVyIHlldCwgZG8gdGhhdCBidXQgYWxzbyBpbnRyb2R1Y2UgYSB0ZW1wb3Jhcnkg dmFyaWFibGU6Cj4KPiAJCQlvdXRwdXRfcmF0ZSA9IHBhcmFtcy0+ZnJlcV90YWJsZVtpXS5vdXRw dXRfcmF0ZTsKPgo+IAkJCWlmIChvdXRwdXRfcmF0ZSA+IHJhdGUpCj4gCQkJCWNvbnRpbnVlOwo+ IAkJCWlmIChtYXhfcmF0ZSA8IG91dHB1dF9yYXRlKQo+IAkJCQltYXhfcmF0ZSA9IG91dHB1dF9y YXRlOwoKT0suIFRoYW5rcyBmb3IgdGhlIHRpcHMuCgoKPgo+Cj4+ICsJCQl9Cj4+ICsJCX0KPj4g Kwl9IGVsc2Ugewo+PiArCQlfX2Nsa192Y29fcmF0ZTJyZWcodmNvLCByYXRlIC8gTUhaLCAma3Zj bywgJmJhbmQpOwo+PiArCQlpZiAoYmFuZCkKPj4gKwkJCXJhdGUgPSByYXRlIC8gMjsKPj4gKwkJ aWYgKHZjby0+ZmxhZ3MgJiBBU1JfUExMX0ZSQUNfQVVESU8pIHsKPj4gKwkJCS8qIEZyYWN0aW9u IGF1ZGlvIFBMTCBkaXZpYXRpb24gaXMgd2l0aGluIDI0SHogc28gcm91bmQgdGhlIHJhdGUgYnkg NTBIeiAqLwo+PiArCQkJaWYgKHJhdGUgJSA1MCkgewo+PiArCQkJCXJhdGUgPSByYXRlIC8gNTAg KiA1MDsKPiByb3VuZGRvd24oKQoKT0suCgoKPgo+PiArCQkJCXByX2RlYnVnKCIlcyBUcnVuY2F0 ZSB0aGUgcmF0ZSBzZXQgZm9yICVzIGZyb20gJWx1SHogdG8gJWx1SHpcbiIsCj4+ICsJCQkJCV9f ZnVuY19fLCBfX2Nsa19nZXRfbmFtZShody0+Y2xrKSwgbmV3X3JhdGUsIGJhbmQgPyByYXRlICog MiA6IHJhdGUpOwo+PiArCQkJfQo+PiArCQl9IGVsc2Ugewo+PiArCQkJLyogVGhlIG90aGVyIFBM TCBkaXZpYXRpb24gaXMgd2l0aGluIDFNaHogc28gcm91bmQgdGhlIHJhdGUgYnkgMU1oeiAqLwo+ PiArCQkJaWYgKHJhdGUgJSBNSFopIHsKPj4gKwkJCQlyYXRlID0gcmF0ZSAvIE1IWiAqIE1IWjsK Pj4gKwkJCQlwcl9kZWJ1ZygiJXMgVHJ1bmNhdGUgdGhlIHJhdGUgc2V0IGZvciAlcyBmcm9tICVs dUh6IHRvICVsdUh6XG4iLAo+PiArCQkJCQlfX2Z1bmNfXywgX19jbGtfZ2V0X25hbWUoaHctPmNs ayksIG5ld19yYXRlLCBiYW5kID8gcmF0ZSAqIDIgOiByYXRlKTsKPj4gKwkJCX0KPj4gKwkJfQo+ PiArCQlpZiAoYmFuZCkKPj4gKwkJCW1heF9yYXRlID0gcmF0ZSAqIDI7Cj4+ICsJCWVsc2UKPj4g KwkJCW1heF9yYXRlID0gcmF0ZTsKPj4gKwl9Cj4+ICsJcmV0dXJuIG1heF9yYXRlOwo+PiArfQo+ PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgY2xrX3Zjb19vcHMgPSB7Cj4+ICsJ LmluaXQgPSBjbGtfcGxsX3Zjb19pbml0LAo+PiArCS5lbmFibGUgPSBjbGtfcGxsX3Zjb19lbmFi bGUsCj4+ICsJLmRpc2FibGUgPSBjbGtfcGxsX3Zjb19kaXNhYmxlLAo+PiArCS5zZXRfcmF0ZSA9 IGNsa19wbGxfdmNvX3NldHJhdGUsCj4+ICsJLnJlY2FsY19yYXRlID0gY2xrX3Zjb19yZWNhbGNf cmF0ZSwKPj4gKwkucm91bmRfcmF0ZSA9IGNsa192Y29fcm91bmRfcmF0ZSwKPj4gKwkuaXNfZW5h YmxlZCA9IF9fcGxsX2lzX2VuYWJsZWQsCj4+ICt9Owo+PiArCj4+ICtzdHJ1Y3QgY2xrICphc3Jf Y2xrX3JlZ2lzdGVyX3Zjbyhjb25zdCBjaGFyICpuYW1lLAo+PiArCQkJCSAgICBjb25zdCBjaGFy ICpwYXJlbnRfbmFtZSwKPj4gKwkJCQkgICAgdW5zaWduZWQgbG9uZyBmbGFncywgdTMyIHZjb19m bGFncywKPj4gKwkJCQkgICAgc3BpbmxvY2tfdCAqbG9jaywKPj4gKwkJCQkgICAgc3RydWN0IGFz cl92Y29fcGFyYW1zICpwYXJhbXMpCj4+ICt7Cj4+ICsJc3RydWN0IGNsa192Y28gKnZjbzsKPj4g KwlzdHJ1Y3QgY2xrICpjbGs7Cj4+ICsJc3RydWN0IGNsa19pbml0X2RhdGEgaW5pdDsKPj4gKwo+ PiArCXZjbyA9IGt6YWxsb2Moc2l6ZW9mKCp2Y28pLCBHRlBfS0VSTkVMKTsKPj4gKwlpZiAoIXZj bykKPj4gKwkJcmV0dXJuIE5VTEw7Cj4+ICsKPj4gKwlpbml0Lm5hbWUgPSBuYW1lOwo+PiArCWlu aXQub3BzID0gJmNsa192Y29fb3BzOwo+PiArCWluaXQuZmxhZ3MgPSBmbGFncyB8IENMS19TRVRf UkFURV9HQVRFOwo+PiArCWluaXQucGFyZW50X25hbWVzID0gKHBhcmVudF9uYW1lID8gJnBhcmVu dF9uYW1lIDogTlVMTCk7Cj4+ICsJaW5pdC5udW1fcGFyZW50cyA9IChwYXJlbnRfbmFtZSA/IDEg OiAwKTsKPj4gKwo+PiArCXZjby0+ZmxhZ3MgPSB2Y29fZmxhZ3M7Cj4+ICsJdmNvLT5sb2NrID0g bG9jazsKPj4gKwl2Y28tPmh3LmluaXQgPSAmaW5pdDsKPj4gKwl2Y28tPnBhcmFtcyA9IHBhcmFt czsKPj4gKwo+PiArCWNsayA9IGNsa19yZWdpc3RlcihOVUxMLCAmdmNvLT5odyk7Cj4+ICsJaWYg KElTX0VSUihjbGspKQo+PiArCQlrZnJlZSh2Y28pOwo+PiArCj4+ICsJcmV0dXJuIGNsazsKPiBU aGlzIHJldHVybnMgYSBtaXggb2YgZXJyb3IgcG9pbnRlcnMgYW5kIE5VTExzIG9uIGVycm9yLiAg V2hlbiBjb2RlCj4gcmV0dXJucyBhIG1peCBvZiBlcnJvciBwb2ludGVycyBhbmQgTlVMTCB0aGF0 IG1lYW5zIHRoYXQgTlVMTCBpcyAqbm90Kgo+IGFuIGVycm9yIGJ1dCBqdXN0IGEgc3BlY2lhbCBr aW5kIG9mIHN1Y2Nlc3MuICBGb3IgZXhhbXBsZSBpZiB5b3UKPiBjYWxsIHJldHVybl9zb21lX3N1 YnN5c3RlbSgpIGFuZCBpdCBmYWlscyB0aGVuIGl0IHJldHVybnMgYW4gZXJyb3IsIGJ1dAo+IGlm IGl0IHJldHVybnMgTlVMTCB0aGF0IG1lYW5zIHRoZSB1c2VyIGRpc2FibGVkIHRoYXQgc3Vic3lz dGVtIG9mZi4gIFNvCj4gaXQncyBub3QgZXJyb3IsIGJ1dCB5b3Ugc3RpbGwgZG9uJ3QgZ2V0IGEg dmFsaWQgcG9pbnRlci4KClVuZGVyc3Rvb2QuIEknbGwgZml4IGl0LgoKCj4KPgo+PiArfQo+PiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvYXNyL2Nsay1wbGwuaCBiL2RyaXZlcnMvY2xrL2Fzci9j bGstcGxsLmgKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMC4uNmM2NjU0 MAo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2RyaXZlcnMvY2xrL2Fzci9jbGstcGxsLmgKPj4g QEAgLTAsMCArMSw5MSBAQAo+PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAg Ki8KPj4gKyNpZm5kZWYgX19BU1JfQ0xLX1BMTF9ICj4+ICsjZGVmaW5lIF9fQVNSX0NMS19QTExf SAo+PiArCj4+ICsvKgo+PiArICogc3RydWN0IGt2Y29fcmFuZ2UgLXN0b3JlIGt2Y28gYW5kIHZy bmcgZm9yIGRpZmZlcmVudCBmcmVxdWVuY3kgcmFuZ2UKPj4gKyAqIEB2Y29fbWluOgltaW4gZnJl cXVlbmN5IG9mIHZjbwo+PiArICogQHZjb19tYXg6CW1heCBmcmVxdWVuY3kgb2YgdmNvCj4+ICsg KiBAa3ZjbzoJa3ZjbyB2YWwgZm9yIHJlbGV2YW50IGZyZXF1ZW5jeSByYW5nZQo+PiArICogQGJh bmQ6CWhpZ2ggYmFuZCBvciBsb3cgYmFuZAo+PiArICovCj4+ICtzdHJ1Y3Qga3Zjb19yYW5nZSB7 Cj4+ICsJaW50IHZjb19taW47Cj4+ICsJaW50IHZjb19tYXg7Cj4+ICsJdTgga3ZjbzsKPj4gKwl1 OCBiYW5kOwo+PiArfTsKPj4gKwo+PiArc3RydWN0IGFzcl92Y29fZnJlcV90YWJsZSB7Cj4+ICsJ dW5zaWduZWQgbG9uZyBvdXRwdXRfcmF0ZTsKPj4gKwl1MTYgZnJjZDsKPj4gKwl1MTYgZmJkOwo+ PiArCXU4IGt2Y287Cj4+ICsJdTggYmFuZDsKPj4gK307Cj4+ICsKPj4gK2VudW0gc3NjX21vZGUg ewo+PiArCUNFTlRFUl9TUFJFQUQgPSAweDAsCj4+ICsJVVBfU1BSRUFEID0gMHgxLAo+PiArCURP V05fU1BSRUFEID0gMHgyLAo+PiArfTsKPj4gKwo+PiArc3RydWN0IGFzcl92Y29fcGFyYW1zIHsK Pj4gKwl1bnNpZ25lZCBsb25nIHZjb19taW47Cj4+ICsJdW5zaWduZWQgbG9uZyB2Y29fbWF4Owo+ PiArCXZvaWQgX19pb21lbSAqY3JfcmVnOwo+PiArCXZvaWQgX19pb21lbSAqcGxsX3N3Y3I7Cj4+ ICsJdm9pZCBfX2lvbWVtICpwbGxfc3djcjI7Cj4+ICsJdm9pZCBfX2lvbWVtICpkcGxsX3N3Y3I7 Cj4+ICsJdm9pZCBfX2lvbWVtICpkcGxsX3N3Y3IyOwo+PiArCXZvaWQgX19pb21lbSAqZHBsbF9j dHJsOwo+PiArCXZvaWQgX19pb21lbSAqbG9ja19yZWc7Cj4+ICsJdTMyIGNyX29mZjsKPj4gKwl1 MzIgc3djcl9vZmY7Cj4+ICsJdTMyIHN3Y3IyX29mZjsKPj4gKwl1MzIgbG9ja19vZmY7Cj4+ICsJ dTMyIGxvY2tfZW5hYmxlX2JpdDsKPj4gKwl1bnNpZ25lZCBsb25nIGRlZmF1bHRfcmF0ZTsKPj4g Kwo+PiArCXN0cnVjdCBhc3JfdmNvX2ZyZXFfdGFibGUgKmZyZXFfdGFibGU7Cj4+ICsJaW50IGZy ZXFfdGFibGVfc2l6ZTsKPj4gKwo+PiArCS8qIFNTQyBzZXR0aW5nICovCj4+ICsJYm9vbCBzc2Nf ZW5hYmxlZDsKPj4gKwllbnVtIHNzY19tb2RlIHNzY19tb2RlOwo+PiArCXVuc2lnbmVkIGludCBz c2NfZm9sb2NrX2VuOwo+PiArCXVuc2lnbmVkIGludCBzc2NfZGVweDJfZW47Cj4+ICsJdW5zaWdu ZWQgaW50IHNzY19kZXB0aDsKPj4gK307Cj4+ICsKPj4gK3N0cnVjdCBjbGtfdmNvIHsKPj4gKwlz dHJ1Y3QgY2xrX2h3IGh3Owo+PiArCXNwaW5sb2NrX3QgKmxvY2s7Cj4+ICsJdTMyIGZsYWdzOwo+ PiArCXN0cnVjdCBhc3JfdmNvX3BhcmFtcyAqcGFyYW1zOwo+PiArfTsKPj4gKwo+PiArI2RlZmlu ZSB0b19jbGtfdmNvKHZjb19odykgY29udGFpbmVyX29mKHZjb19odywgc3RydWN0IGNsa192Y28s IGh3KQo+PiArCj4+ICsvKioKPj4gKyAqIFZDTyBGbGFnczoKPj4gKyAqLwo+PiArI2RlZmluZSBB U1JfUExMX1NTQ19GRUFUCUJJVCgwKQo+PiArI2RlZmluZSBBU1JfUExMX1NTQ19BT04JCUJJVCgx KQo+PiArLyoKPj4gKyAqIEZvciBzcGVjaWZpYyBwbGwgc3VjaCBhcyBwbGwzcCwgZG9uJ3QgY2hl Y2sgZGVmYXVsdCByYXRlIHRvIHN1cHBvcnQKPj4gKyAqIG1vcmUgYm9vdCB1cCBvcC4KPj4gKyAq Lwo+PiArI2RlZmluZSBBU1JfUExMX1NLSVBfREVGX1JBVEUJQklUKDIpCj4+ICsjZGVmaW5lIEFT Ul9QTExfRlJBQ19GRUFUCUJJVCgzKQo+PiArI2RlZmluZSBBU1JfUExMX1JFR19ORVcJCUJJVCg0 KQo+PiArI2RlZmluZSBBU1JfUExMX0ZSQUNfQVVESU8JQklUKDUpCj4+ICsjZGVmaW5lIEFTUl9Q TExfUkVHX0REUgkJQklUKDYpCj4+ICsKPj4gK2V4dGVybiBzdHJ1Y3QgY2xrICphc3JfY2xrX3Jl Z2lzdGVyX3Zjbyhjb25zdCBjaGFyICpuYW1lLAo+PiArCQkJCQkgICBjb25zdCBjaGFyICpwYXJl bnRfbmFtZSwKPj4gKwkJCQkJICAgdW5zaWduZWQgbG9uZyBmbGFncywgdTMyIHZjb19mbGFncywK Pj4gKwkJCQkJICAgc3BpbmxvY2tfdCAqbG9jaywKPj4gKwkJCQkJICAgc3RydWN0IGFzcl92Y29f cGFyYW1zICpwYXJhbXMpOwo+PiArCj4+ICsjZW5kaWYKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Y2xrL2Fzci9jbGsuYyBiL2RyaXZlcnMvY2xrL2Fzci9jbGsuYwo+PiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+PiBpbmRleCAwMDAwMDAwLi42OTQ4ZmMyCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIv ZHJpdmVycy9jbGsvYXNyL2Nsay5jCj4+IEBAIC0wLDAgKzEsMjIyIEBACj4+ICsvLyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+PiArLyoKPj4gKyAqIGFzciBjbG9jayBvcGVyYXRp b24gc291cmNlIGZpbGUKPj4gKyAqCj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQVNSIE1pY3Jv ZWxlY3Ryb25pY3MoU2hhbmdoYWkpIENvLiwgTHRkLgo+PiArICogR2FuZyBXdSA8Z2FuZ3d1QGFz cm1pY3JvLmNvbT4KPj4gKyAqIFFpYW8gWmhvdSA8cWlhb3pob3VAYXNybWljcm8uY29tPgo+PiAr ICoKPj4gKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYwo+PiArICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBp cyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55Cj4+ICsgKiB3YXJyYW50eSBvZiBhbnkga2lu ZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCj4+ICsgKi8KPj4gKwo+PiArI2luY2x1ZGUg PGxpbnV4L2lvLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+Cj4+ICsjaW5j bHVkZSA8bGludXgvc2xhYi5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L29mLmg+Cj4+ICsjaW5jbHVk ZSA8bGludXgvY2xrLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgo+PiArCj4+ ICsjaW5jbHVkZSAiY2xrLmgiCj4+ICsKPj4gK3ZvaWQgYXNyX2Nsa3NfZW5hYmxlKGNoYXIgKipj bGtfdGFibGUsIGludCBjbGtfdGFibGVfc2l6ZSkKPj4gK3sKPj4gKwlpbnQgaTsKPj4gKwlzdHJ1 Y3QgY2xrICpjbGs7Cj4+ICsKPj4gKwlmb3IgKGkgPSAwOyBpIDwgY2xrX3RhYmxlX3NpemU7IGkr Kykgewo+PiArCQljbGsgPSBfX2Nsa19sb29rdXAoY2xrX3RhYmxlW2ldKTsKPj4gKwkJaWYgKCFJ U19FUlJfT1JfTlVMTChjbGspKQo+IF9fY2xrX2xvb2t1cCgpIG5ldmVyIHJldHVybnMgZXJyb3Ig cG9pbnRlcnMuCgpPSy4gSSdsbCBmaXggaXQuCgoKPgo+PiArCQkJY2xrX3ByZXBhcmVfZW5hYmxl KGNsayk7Cj4+ICsJCWVsc2UKPj4gKwkJCXByX2VycigiJXMgOiBjYW4ndCBmaW5kIGNsayAlc1xu IiwgX19mdW5jX18sCj4+ICsJCQkJY2xrX3RhYmxlW2ldKTsKPj4gKwl9Cj4+ICt9Cj4+ICsKPj4g K2ludCBhc3JfY2xrX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucCwgc3RydWN0IGFzcl9jbGtf dW5pdCAqdW5pdCwKPj4gKwkJaW50IG5yX2Nsa3MpCj4+ICt7Cj4+ICsJc3RhdGljIHN0cnVjdCBj bGsgKipjbGtfdGFibGU7Cj4+ICsKPj4gKwljbGtfdGFibGUgPSBrY2FsbG9jKG5yX2Nsa3MsIHNp emVvZihzdHJ1Y3QgY2xrICopLCBHRlBfS0VSTkVMKTsKPj4gKwlpZiAoIWNsa190YWJsZSkKPj4g KwkJcmV0dXJuIC1FTk9NRU07Cj4+ICsKPj4gKwl1bml0LT5jbGtfdGFibGUgPSBjbGtfdGFibGU7 Cj4+ICsJdW5pdC0+bnJfY2xrcyA9IG5yX2Nsa3M7Cj4+ICsJdW5pdC0+Y2xrX2RhdGEuY2xrcyA9 IGNsa190YWJsZTsKPj4gKwl1bml0LT5jbGtfZGF0YS5jbGtfbnVtID0gbnJfY2xrczsKPj4gKwlv Zl9jbGtfYWRkX3Byb3ZpZGVyKG5wLCBvZl9jbGtfc3JjX29uZWNlbGxfZ2V0LCAmdW5pdC0+Y2xr X2RhdGEpOwo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3ZvaWQgYXNyX3JlZ2lz dGVyX2ZpeGVkX3JhdGVfY2xrcyhzdHJ1Y3QgYXNyX2Nsa191bml0ICp1bml0LAo+PiArCQkJCXN0 cnVjdCBhc3JfcGFyYW1fZml4ZWRfcmF0ZV9jbGsgKmNsa3MsCj4+ICsJCQkJaW50IHNpemUpCj4+ ICt7Cj4+ICsJaW50IGk7Cj4+ICsJc3RydWN0IGNsayAqY2xrOwo+PiArCj4+ICsJZm9yIChpID0g MDsgaSA8IHNpemU7IGkrKykgewo+PiArCQljbGsgPSBjbGtfcmVnaXN0ZXJfZml4ZWRfcmF0ZShO VUxMLCBjbGtzW2ldLm5hbWUsCj4+ICsJCQkJCWNsa3NbaV0ucGFyZW50X25hbWUsCj4+ICsJCQkJ CWNsa3NbaV0uZmxhZ3MsCj4+ICsJCQkJCWNsa3NbaV0uZml4ZWRfcmF0ZSk7Cj4+ICsJCWlmIChJ U19FUlIoY2xrKSkgewo+PiArCQkJcHJfZXJyKCIlczogZmFpbGVkIHRvIHJlZ2lzdGVyIGNsb2Nr ICVzXG4iLAo+PiArCQkJICAgICAgIF9fZnVuY19fLCBjbGtzW2ldLm5hbWUpOwo+PiArCQkJY29u dGludWU7Cj4+ICsJCX0KPj4gKwkJaWYgKGNsa3NbaV0uaWQpCj4+ICsJCQl1bml0LT5jbGtfdGFi bGVbY2xrc1tpXS5pZF0gPSBjbGs7Cj4gV2hhdCdzIHRoZSAiY2xrc1tpXS5pZCIgY2hlY2sgZm9y PyAgV2UgZG8gaXQgKmFsbW9zdCogZXZlcnl3aGVyZSBidXQKPiBpdCBkb2Vzbid0IHNlZW0gcmVx dWlyZWQuCgpjbGtzW2ldLmlkIGlzIGFsd2F5cyB2YWxpZC4gbm8gbmVlZCB0byBjaGVjayBoZXJl LiBJJ2xsIHJlbW92ZSBhbGwKcmVsYXRlZCBjaGVjay4KCgo+Cj4+ICsJfQo+PiArfQo+PiArCj4+ ICt2b2lkIGFzcl9yZWdpc3Rlcl9maXhlZF9mYWN0b3JfY2xrcyhzdHJ1Y3QgYXNyX2Nsa191bml0 ICp1bml0LAo+PiArCQkJCXN0cnVjdCBhc3JfcGFyYW1fZml4ZWRfZmFjdG9yX2NsayAqY2xrcywK Pj4gKwkJCQlpbnQgc2l6ZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgY2xrICpjbGs7Cj4+ICsJaW50IGk7 Cj4+ICsKPj4gKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Cj4+ICsJCWNsayA9IGNsa19y ZWdpc3Rlcl9maXhlZF9mYWN0b3IoTlVMTCwgY2xrc1tpXS5uYW1lLAo+PiArCQkJCQkJY2xrc1tp XS5wYXJlbnRfbmFtZSwKPj4gKwkJCQkJCWNsa3NbaV0uZmxhZ3MsIGNsa3NbaV0ubXVsdCwKPj4g KwkJCQkJCWNsa3NbaV0uZGl2KTsKPj4gKwkJaWYgKElTX0VSUihjbGspKSB7Cj4+ICsJCQlwcl9l cnIoIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgY2xvY2sgJXNcbiIsCj4+ICsJCQkgICAgICAgX19m dW5jX18sIGNsa3NbaV0ubmFtZSk7Cj4+ICsJCQljb250aW51ZTsKPj4gKwkJfQo+PiArCQlpZiAo Y2xrc1tpXS5pZCkKPj4gKwkJCXVuaXQtPmNsa190YWJsZVtjbGtzW2ldLmlkXSA9IGNsazsKPj4g Kwl9Cj4+ICt9Cj4+ICsKPj4gK3ZvaWQgYXNyX3JlZ2lzdGVyX2dlbmVyYWxfZ2F0ZV9jbGtzKHN0 cnVjdCBhc3JfY2xrX3VuaXQgKnVuaXQsCj4+ICsJCQkJc3RydWN0IGFzcl9wYXJhbV9nZW5lcmFs X2dhdGVfY2xrICpjbGtzLAo+PiArCQkJCXZvaWQgX19pb21lbSAqYmFzZSwgaW50IHNpemUpCj4+ ICt7Cj4+ICsJc3RydWN0IGNsayAqY2xrOwo+PiArCWludCBpOwo+PiArCj4+ICsJZm9yIChpID0g MDsgaSA8IHNpemU7IGkrKykgewo+PiArCQljbGsgPSBjbGtfcmVnaXN0ZXJfZ2F0ZShOVUxMLCBj bGtzW2ldLm5hbWUsCj4+ICsJCQkJCWNsa3NbaV0ucGFyZW50X25hbWUsCj4+ICsJCQkJCWNsa3Nb aV0uZmxhZ3MsCj4+ICsJCQkJCWJhc2UgKyBjbGtzW2ldLm9mZnNldCwKPj4gKwkJCQkJY2xrc1tp XS5iaXRfaWR4LAo+PiArCQkJCQljbGtzW2ldLmdhdGVfZmxhZ3MsCj4+ICsJCQkJCWNsa3NbaV0u bG9jayk7Cj4+ICsKPj4gKwkJaWYgKElTX0VSUihjbGspKSB7Cj4+ICsJCQlwcl9lcnIoIiVzOiBm YWlsZWQgdG8gcmVnaXN0ZXIgY2xvY2sgJXNcbiIsCj4+ICsJCQkgICAgICAgX19mdW5jX18sIGNs a3NbaV0ubmFtZSk7Cj4+ICsJCQljb250aW51ZTsKPj4gKwkJfQo+PiArCQlpZiAoY2xrc1tpXS5p ZCkKPj4gKwkJCXVuaXQtPmNsa190YWJsZVtjbGtzW2ldLmlkXSA9IGNsazsKPj4gKwl9Cj4+ICt9 Cj4+ICsKPj4gK3ZvaWQgYXNyX3JlZ2lzdGVyX2dhdGVfY2xrcyhzdHJ1Y3QgYXNyX2Nsa191bml0 ICp1bml0LAo+PiArCQkJc3RydWN0IGFzcl9wYXJhbV9nYXRlX2NsayAqY2xrcywKPj4gKwkJCXZv aWQgX19pb21lbSAqYmFzZSwgaW50IHNpemUpCj4+ICt7Cj4+ICsJc3RydWN0IGNsayAqY2xrOwo+ PiArCWludCBpOwo+PiArCj4+ICsJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewo+PiArCQlj bGsgPSBhc3JfY2xrX3JlZ2lzdGVyX2dhdGUoTlVMTCwgY2xrc1tpXS5uYW1lLAo+PiArCQkJCQlj bGtzW2ldLnBhcmVudF9uYW1lLAo+PiArCQkJCQljbGtzW2ldLmZsYWdzLAo+PiArCQkJCQliYXNl ICsgY2xrc1tpXS5vZmZzZXQsCj4+ICsJCQkJCWNsa3NbaV0ubWFzaywKPj4gKwkJCQkJY2xrc1tp XS52YWxfZW5hYmxlLAo+PiArCQkJCQljbGtzW2ldLnZhbF9kaXNhYmxlLAo+PiArCQkJCQljbGtz W2ldLmdhdGVfZmxhZ3MsCj4+ICsJCQkJCWNsa3NbaV0ubG9jayk7Cj4+ICsKPj4gKwkJaWYgKElT X0VSUihjbGspKSB7Cj4+ICsJCQlwcl9lcnIoIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgY2xvY2sg JXNcbiIsCj4+ICsJCQkgICAgICAgX19mdW5jX18sIGNsa3NbaV0ubmFtZSk7Cj4+ICsJCQljb250 aW51ZTsKPj4gKwkJfQo+PiArCQlpZiAoY2xrc1tpXS5pZCkKPj4gKwkJCXVuaXQtPmNsa190YWJs ZVtjbGtzW2ldLmlkXSA9IGNsazsKPj4gKwl9Cj4+ICt9Cj4+ICsKPj4gK3ZvaWQgYXNyX3JlZ2lz dGVyX211eF9jbGtzKHN0cnVjdCBhc3JfY2xrX3VuaXQgKnVuaXQsCj4+ICsJCQlzdHJ1Y3QgYXNy X3BhcmFtX211eF9jbGsgKmNsa3MsCj4+ICsJCQl2b2lkIF9faW9tZW0gKmJhc2UsIGludCBzaXpl KQo+PiArewo+PiArCXN0cnVjdCBjbGsgKmNsazsKPj4gKwlpbnQgaTsKPj4gKwo+PiArCWZvciAo aSA9IDA7IGkgPCBzaXplOyBpKyspIHsKPj4gKwkJY2xrID0gY2xrX3JlZ2lzdGVyX211eChOVUxM LCBjbGtzW2ldLm5hbWUsCj4+ICsJCQkJCWNsa3NbaV0ucGFyZW50X25hbWUsCj4+ICsJCQkJCWNs a3NbaV0ubnVtX3BhcmVudHMsCj4+ICsJCQkJCWNsa3NbaV0uZmxhZ3MsCj4+ICsJCQkJCWJhc2Ug KyBjbGtzW2ldLm9mZnNldCwKPj4gKwkJCQkJY2xrc1tpXS5zaGlmdCwKPj4gKwkJCQkJY2xrc1tp XS53aWR0aCwKPj4gKwkJCQkJY2xrc1tpXS5tdXhfZmxhZ3MsCj4+ICsJCQkJCWNsa3NbaV0ubG9j ayk7Cj4+ICsKPj4gKwkJaWYgKElTX0VSUihjbGspKSB7Cj4+ICsJCQlwcl9lcnIoIiVzOiBmYWls ZWQgdG8gcmVnaXN0ZXIgY2xvY2sgJXNcbiIsCj4+ICsJCQkgICAgICAgX19mdW5jX18sIGNsa3Nb aV0ubmFtZSk7Cj4+ICsJCQljb250aW51ZTsKPj4gKwkJfQo+PiArCQlpZiAoY2xrc1tpXS5pZCkK Pj4gKwkJCXVuaXQtPmNsa190YWJsZVtjbGtzW2ldLmlkXSA9IGNsazsKPj4gKwl9Cj4+ICt9Cj4+ ICsKPj4gK3ZvaWQgYXNyX3JlZ2lzdGVyX2Rpdl9jbGtzKHN0cnVjdCBhc3JfY2xrX3VuaXQgKnVu aXQsCj4+ICsJCQlzdHJ1Y3QgYXNyX3BhcmFtX2Rpdl9jbGsgKmNsa3MsCj4+ICsJCQl2b2lkIF9f aW9tZW0gKmJhc2UsIGludCBzaXplKQo+PiArewo+PiArCXN0cnVjdCBjbGsgKmNsazsKPj4gKwlp bnQgaTsKPj4gKwo+PiArCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKPj4gKwkJY2xrID0g Y2xrX3JlZ2lzdGVyX2RpdmlkZXIoTlVMTCwgY2xrc1tpXS5uYW1lLAo+PiArCQkJCQljbGtzW2ld LnBhcmVudF9uYW1lLAo+PiArCQkJCQljbGtzW2ldLmZsYWdzLAo+PiArCQkJCQliYXNlICsgY2xr c1tpXS5vZmZzZXQsCj4+ICsJCQkJCWNsa3NbaV0uc2hpZnQsCj4+ICsJCQkJCWNsa3NbaV0ud2lk dGgsCj4+ICsJCQkJCWNsa3NbaV0uZGl2X2ZsYWdzLAo+PiArCQkJCQljbGtzW2ldLmxvY2spOwo+ PiArCj4+ICsJCWlmIChJU19FUlIoY2xrKSkgewo+PiArCQkJcHJfZXJyKCIlczogZmFpbGVkIHRv IHJlZ2lzdGVyIGNsb2NrICVzXG4iLAo+PiArCQkJICAgICAgIF9fZnVuY19fLCBjbGtzW2ldLm5h bWUpOwo+PiArCQkJY29udGludWU7Cj4+ICsJCX0KPj4gKwkJaWYgKGNsa3NbaV0uaWQpCj4+ICsJ CQl1bml0LT5jbGtfdGFibGVbY2xrc1tpXS5pZF0gPSBjbGs7Cj4+ICsJfQo+PiArfQo+PiArCj4+ ICt2b2lkIGFzcl9jbGtfYWRkKHN0cnVjdCBhc3JfY2xrX3VuaXQgKnVuaXQsIHVuc2lnbmVkIGlu dCBpZCwKPj4gKwkJCXN0cnVjdCBjbGsgKmNsaykKPj4gK3sKPj4gKwlpZiAoSVNfRVJSX09SX05V TEwoY2xrKSkgewo+IEJldHRlciB0byBmaXggdGhlIGVycm9yIGhhbmRsaW5nIGluIGFxdWlsYWNf Z2VuZXJhbF9jbGtfaW5pdCgpIHNvIHlvdQo+IGNhbiByZW1vdmUgdGhpcyBjaGVjay4KCkknbGwg cmVmaW5lIGl0LgoKCj4KPj4gKwkJcHJfZXJyKCJDTEsgJWQgaGFzIGludmFsaWQgcG9pbnRlciAl cFxuIiwgaWQsIGNsayk7Cj4+ICsJCXJldHVybjsKPj4gKwl9Cj4+ICsJaWYgKGlkID4gdW5pdC0+ bnJfY2xrcykgewo+IFRoaXMgdGVzdCBpcyBvZmYgYnkgb25lIGJlY2F1c2UgaWYgImlkID09IHVu aXQtPm5yX2Nsa3MiIHdlIHdyaXRlIG9uZQo+IGVsZW1lbnQgYmV5b25kIHRoZSBlbmQgb2YgdGhl IGFycmF5LgoKSXQgbWFrZXMgc2Vuc2UuIEknbGwgZml4IGl0LgoKCj4KPj4gKwkJcHJfZXJyKCJD TEsgJWQgaXMgaW52YWxpZFxuIiwgaWQpOwo+PiArCQlyZXR1cm47Cj4+ICsJfQo+PiArCj4+ICsJ dW5pdC0+Y2xrX3RhYmxlW2lkXSA9IGNsazsKPj4gK30KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Y2xrL2Fzci9jbGsuaCBiL2RyaXZlcnMvY2xrL2Fzci9jbGsuaAo+PiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+PiBpbmRleCAwMDAwMDAwLi5hYmUzOWNjCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIv ZHJpdmVycy9jbGsvYXNyL2Nsay5oCj4+IEBAIC0wLDAgKzEsMjM1IEBACj4+ICsvKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwo+PiArLyoKPj4gKyAqIGFzciBjbG9jayBzb3Vy Y2UgZmlsZQo+PiArICoKPj4gKyAqIENvcHlyaWdodCAoQykgMjAxOSBBU1IgTWljcm9lbGVjdHJv bmljcyhTaGFuZ2hhaSkgQ28uLCBMdGQuCj4+ICsgKiBHYW5nIFd1IDxnYW5nd3VAYXNybWljcm8u Y29tPgo+PiArICoKPj4gKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwo+PiArICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMg cHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55Cj4+ICsgKiB3YXJyYW50eSBv ZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCj4+ICsgKi8KPj4gKwo+PiAr I2lmbmRlZiBfX0FTUl9DTEtfSF9fCj4+ICsjZGVmaW5lIF9fQVNSX0NMS19IX18KPj4gKwo+PiAr I2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2Nsa2Rl di5oPgo+PiArCj4+ICsjZGVmaW5lIEFQQkNfTk9fQlVTX0NUUkwJQklUKDApCj4+ICsjZGVmaW5l IEFQQkNfUE9XRVJfQ1RSTAkJQklUKDEpCj4+ICsKPj4gKyNkZWZpbmUgTUhaCQkJKDEwMDAwMDBV TCkKPj4gKyNkZWZpbmUgS0haX1RPX0haCQkoMTAwMCkKPj4gKyNkZWZpbmUgTUhaX1RPX0tIWgkJ KDEwMDApCj4+ICsKPj4gKy8qIENsb2NrIHR5cGUgImdhdGUiLiBBU1IgcHJpdmF0ZSBnYXRlICov Cj4+ICsjZGVmaW5lIEFTUl9DTEtfR0FURV9ORUVEX0RFTEFZCQlCSVQoMCkKPj4gKwo+PiArLyog Q2xvY2sgdHlwZSAibWl4IiAqLwo+PiArI2RlZmluZSBBU1JfQ0xLX0JJVFNfTUFTSyh3aWR0aCwg c2hpZnQpCQkJXAo+PiArCQkoKCgxIDw8ICh3aWR0aCkpIC0gMSkgPDwgKHNoaWZ0KSkKPj4gKyNk ZWZpbmUgQVNSX0NMS19CSVRTX0dFVF9WQUwoZGF0YSwgd2lkdGgsIHNoaWZ0KQlcCj4+ICsJCSgo ZGF0YSAmIEFTUl9DTEtfQklUU19NQVNLKHdpZHRoLCBzaGlmdCkpID4+IChzaGlmdCkpCj4+ICsj ZGVmaW5lIEFTUl9DTEtfQklUU19TRVRfVkFMKHZhbCwgd2lkdGgsIHNoaWZ0KQkJXAo+PiArCQko KCh2YWwpIDw8IChzaGlmdCkpICYgQVNSX0NMS19CSVRTX01BU0sod2lkdGgsIHNoaWZ0KSkKPj4g Kwo+PiArZW51bSB7Cj4+ICsJQVNSX0NMS19NSVhfVFlQRV8xUkVHX05PRkNfVjEsCj4+ICsJQVNS X0NMS19NSVhfVFlQRV8xUkVHX0ZDX1YyLAo+PiArCUFTUl9DTEtfTUlYX1RZUEVfMlJFR19OT0ZD X1YzLAo+PiArCUFTUl9DTEtfTUlYX1RZUEVfMlJFR19GQ19WNCwKPj4gK307Cj4+ICsKPj4gKy8q IFRoZSByZWdpc3RlciBsYXlvdXQgKi8KPj4gK3N0cnVjdCBhc3JfY2xrX21peF9yZWdfaW5mbyB7 Cj4+ICsJdm9pZCBfX2lvbWVtICpyZWdfY2xrX2N0cmw7Cj4+ICsJdm9pZCBfX2lvbWVtICpyZWdf Y2xrX3NlbDsKPj4gKwl2b2lkIF9faW9tZW0gKnJlZ19jbGtfeHRjOwo+PiArCXU4IHdpZHRoX2Rp djsKPj4gKwl1OCBzaGlmdF9kaXY7Cj4+ICsJdTggd2lkdGhfbXV4Owo+PiArCXU4IHNoaWZ0X211 eDsKPj4gKwl1MzIgYml0X2ZjOwo+PiArfTsKPj4gKwo+PiArLyogVGhlIHN1Z2dlc3RlZCBjbG9j ayB0YWJsZSBmcm9tIHVzZXIuICovCj4+ICtzdHJ1Y3QgYXNyX2Nsa19taXhfY2xrX3RhYmxlIHsK Pj4gKwl1bnNpZ25lZCBsb25nIHJhdGU7Cj4+ICsJdTggcGFyZW50X2luZGV4Owo+PiArCXVuc2ln bmVkIGludCBkaXZpc29yOwo+PiArCXVuc2lnbmVkIGludCB2YWxpZDsKPj4gKwl1bnNpZ25lZCBp bnQgeHRjOwo+PiArfTsKPj4gKwo+PiArc3RydWN0IGFzcl9jbGtfbWl4X2NvbmZpZyB7Cj4+ICsJ c3RydWN0IGFzcl9jbGtfbWl4X3JlZ19pbmZvIHJlZ19pbmZvOwo+PiArCXN0cnVjdCBhc3JfY2xr X21peF9jbGtfdGFibGUgKnRhYmxlOwo+PiArCXVuc2lnbmVkIGludCB0YWJsZV9zaXplOwo+PiAr CXN0cnVjdCBjbGtfZGl2X3RhYmxlICpkaXZfdGFibGU7Cj4+ICsJdW5zaWduZWQgbG9uZyBkaXZf ZmxhZ3M7Cj4+ICsJdW5zaWduZWQgbG9uZyBtdXhfZmxhZ3M7Cj4+ICt9Owo+PiArCj4+ICtzdHJ1 Y3QgYXNyX2Nsa19taXggewo+PiArCXN0cnVjdCBjbGtfaHcgaHc7Cj4+ICsJc3RydWN0IGFzcl9j bGtfbWl4X3JlZ19pbmZvIHJlZ19pbmZvOwo+PiArCXN0cnVjdCBhc3JfY2xrX21peF9jbGtfdGFi bGUgKnRhYmxlOwo+PiArCXN0cnVjdCBjbGtfZGl2X3RhYmxlICpkaXZfdGFibGU7Cj4+ICsJdW5z aWduZWQgaW50IHRhYmxlX3NpemU7Cj4+ICsJdW5zaWduZWQgbG9uZyBkaXZfZmxhZ3M7Cj4+ICsJ dW5zaWduZWQgbG9uZyBtdXhfZmxhZ3M7Cj4+ICsJc3BpbmxvY2tfdCAqbG9jazsKPj4gK307Cj4+ ICsKPj4gK2V4dGVybiBzdHJ1Y3QgY2xrICphc3JfY2xrX3JlZ2lzdGVyX21peChzdHJ1Y3QgZGV2 aWNlICpkZXYsCj4+ICsJCQkJCWNvbnN0IGNoYXIgKm5hbWUsCj4+ICsJCQkJCWNvbnN0IGNoYXIg KipwYXJlbnRfbmFtZXMsCj4+ICsJCQkJCXU4IG51bV9wYXJlbnRzLAo+PiArCQkJCQl1bnNpZ25l ZCBsb25nIGZsYWdzLAo+PiArCQkJCQlzdHJ1Y3QgYXNyX2Nsa19taXhfY29uZmlnICpjb25maWcs Cj4+ICsJCQkJCXNwaW5sb2NrX3QgKmxvY2spOwo+PiArCj4+ICtzdHJ1Y3QgYXNyX2Nsa19nYXRl IHsKPj4gKwlzdHJ1Y3QgY2xrX2h3IGh3Owo+PiArCXZvaWQgX19pb21lbSAqcmVnOwo+PiArCXUz MiBtYXNrOwo+PiArCXUzMiB2YWxfZW5hYmxlOwo+PiArCXUzMiB2YWxfZGlzYWJsZTsKPj4gKwl1 bnNpZ25lZCBsb25nIGZsYWdzOwo+PiArCXNwaW5sb2NrX3QgKmxvY2s7Cj4+ICt9Owo+PiArCj4+ ICtleHRlcm4gY29uc3Qgc3RydWN0IGNsa19vcHMgYXNyX2Nsa19nYXRlX29wczsKPj4gK2V4dGVy biBzdHJ1Y3QgY2xrICphc3JfY2xrX3JlZ2lzdGVyX2dhdGUoc3RydWN0IGRldmljZSAqZGV2LCBj b25zdCBjaGFyICpuYW1lLAo+PiArCQkJY29uc3QgY2hhciAqcGFyZW50X25hbWUsIHVuc2lnbmVk IGxvbmcgZmxhZ3MsCj4+ICsJCQl2b2lkIF9faW9tZW0gKnJlZywgdTMyIG1hc2ssIHUzMiB2YWxf ZW5hYmxlLAo+PiArCQkJdTMyIHZhbF9kaXNhYmxlLCB1bnNpZ25lZCBsb25nIGdhdGVfZmxhZ3Ms Cj4+ICsJCQlzcGlubG9ja190ICpsb2NrKTsKPj4gKwo+PiArCj4+ICtleHRlcm4gc3RydWN0IGNs ayAqYXNyX2Nsa19yZWdpc3Rlcl9wbGwyKGNvbnN0IGNoYXIgKm5hbWUsCj4+ICsJCWNvbnN0IGNo YXIgKnBhcmVudF9uYW1lLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKPj4gK2V4dGVybiBzdHJ1Y3Qg Y2xrICphc3JfY2xrX3JlZ2lzdGVyX2FwYmMoY29uc3QgY2hhciAqbmFtZSwKPj4gKwkJY29uc3Qg Y2hhciAqcGFyZW50X25hbWUsIHZvaWQgX19pb21lbSAqYmFzZSwKPj4gKwkJdW5zaWduZWQgaW50 IGRlbGF5LCB1bnNpZ25lZCBsb25nIGFwYmNfZmxhZ3MsIHNwaW5sb2NrX3QgKmxvY2spOwo+PiAr ZXh0ZXJuIHN0cnVjdCBjbGsgKmFzcl9jbGtfcmVnaXN0ZXJfYXBtdShjb25zdCBjaGFyICpuYW1l LAo+PiArCQljb25zdCBjaGFyICpwYXJlbnRfbmFtZSwgdm9pZCBfX2lvbWVtICpiYXNlLCB1MzIg ZW5hYmxlX21hc2ssCj4+ICsJCXNwaW5sb2NrX3QgKmxvY2spOwo+PiArCj4+ICtzdHJ1Y3QgYXNy X2Nsa191bml0IHsKPj4gKwl1bnNpZ25lZCBpbnQgbnJfY2xrczsKPj4gKwlzdHJ1Y3QgY2xrICoq Y2xrX3RhYmxlOwo+PiArCXN0cnVjdCBjbGtfb25lY2VsbF9kYXRhIGNsa19kYXRhOwo+PiArfTsK Pj4gKwo+PiArc3RydWN0IGFzcl9jbGtfZGF0YSB7Cj4+ICsJc3RydWN0IGFzcl9jbGtfdW5pdCB1 bml0Owo+PiArCXZvaWQgX19pb21lbSAqbXBtdV9iYXNlOwo+PiArCXZvaWQgX19pb21lbSAqYXBt dV9iYXNlOwo+PiArCXZvaWQgX19pb21lbSAqYXBiY19iYXNlOwo+PiArCXZvaWQgX19pb21lbSAq YXBic19iYXNlOwo+PiArCXZvaWQgX19pb21lbSAqY2l1X2Jhc2U7Cj4+ICsJdm9pZCBfX2lvbWVt ICpkY2l1X2Jhc2U7Cj4+ICsJdm9pZCBfX2lvbWVtICpkZHJjX2Jhc2U7Cj4+ICt9Owo+PiArCj4+ ICtzdHJ1Y3QgYXNyX3BhcmFtX2ZpeGVkX3JhdGVfY2xrIHsKPj4gKwl1bnNpZ25lZCBpbnQgaWQ7 Cj4+ICsJY2hhciAqbmFtZTsKPj4gKwljb25zdCBjaGFyICpwYXJlbnRfbmFtZTsKPj4gKwl1bnNp Z25lZCBsb25nIGZsYWdzOwo+PiArCXVuc2lnbmVkIGxvbmcgZml4ZWRfcmF0ZTsKPj4gK307Cj4+ ICt2b2lkIGFzcl9yZWdpc3Rlcl9maXhlZF9yYXRlX2Nsa3Moc3RydWN0IGFzcl9jbGtfdW5pdCAq dW5pdCwKPj4gKwkJCQlzdHJ1Y3QgYXNyX3BhcmFtX2ZpeGVkX3JhdGVfY2xrICpjbGtzLAo+PiAr CQkJCWludCBzaXplKTsKPj4gKwo+PiArc3RydWN0IGFzcl9wYXJhbV9maXhlZF9mYWN0b3JfY2xr IHsKPj4gKwl1bnNpZ25lZCBpbnQgaWQ7Cj4+ICsJY2hhciAqbmFtZTsKPj4gKwljb25zdCBjaGFy ICpwYXJlbnRfbmFtZTsKPj4gKwl1bnNpZ25lZCBsb25nIG11bHQ7Cj4+ICsJdW5zaWduZWQgbG9u ZyBkaXY7Cj4+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsKPj4gK307Cj4+ICt2b2lkIGFzcl9yZWdp c3Rlcl9maXhlZF9mYWN0b3JfY2xrcyhzdHJ1Y3QgYXNyX2Nsa191bml0ICp1bml0LAo+PiArCQkJ CXN0cnVjdCBhc3JfcGFyYW1fZml4ZWRfZmFjdG9yX2NsayAqY2xrcywKPj4gKwkJCQlpbnQgc2l6 ZSk7Cj4+ICsKPj4gK3N0cnVjdCBhc3JfcGFyYW1fZ2VuZXJhbF9nYXRlX2NsayB7Cj4+ICsJdW5z aWduZWQgaW50IGlkOwo+PiArCWNvbnN0IGNoYXIgKm5hbWU7Cj4+ICsJY29uc3QgY2hhciAqcGFy ZW50X25hbWU7Cj4+ICsJdW5zaWduZWQgbG9uZyBvZmZzZXQ7Cj4+ICsJdTggYml0X2lkeDsKPj4g Kwl1bnNpZ25lZCBsb25nIGdhdGVfZmxhZ3M7Cj4+ICsJc3BpbmxvY2tfdCAqbG9jazsKPj4gKwl1 bnNpZ25lZCBsb25nIGZsYWdzOwo+PiArfTsKPj4gK3ZvaWQgYXNyX3JlZ2lzdGVyX2dlbmVyYWxf Z2F0ZV9jbGtzKHN0cnVjdCBhc3JfY2xrX3VuaXQgKnVuaXQsCj4+ICsJCQkJc3RydWN0IGFzcl9w YXJhbV9nZW5lcmFsX2dhdGVfY2xrICpjbGtzLAo+PiArCQkJCXZvaWQgX19pb21lbSAqYmFzZSwg aW50IHNpemUpOwo+PiArCj4+ICtzdHJ1Y3QgYXNyX3BhcmFtX2dhdGVfY2xrIHsKPj4gKwl1bnNp Z25lZCBpbnQgaWQ7Cj4+ICsJY2hhciAqbmFtZTsKPj4gKwljb25zdCBjaGFyICpwYXJlbnRfbmFt ZTsKPj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+PiArCXVuc2lnbmVkIGxvbmcgb2Zmc2V0Owo+ PiArCXUzMiBtYXNrOwo+PiArCXUzMiB2YWxfZW5hYmxlOwo+PiArCXUzMiB2YWxfZGlzYWJsZTsK Pj4gKwl1bnNpZ25lZCBsb25nIGdhdGVfZmxhZ3M7Cj4+ICsJc3BpbmxvY2tfdCAqbG9jazsKPj4g K307Cj4+ICt2b2lkIGFzcl9yZWdpc3Rlcl9nYXRlX2Nsa3Moc3RydWN0IGFzcl9jbGtfdW5pdCAq dW5pdCwKPj4gKwkJCXN0cnVjdCBhc3JfcGFyYW1fZ2F0ZV9jbGsgKmNsa3MsCj4+ICsJCQl2b2lk IF9faW9tZW0gKmJhc2UsIGludCBzaXplKTsKPj4gKwo+PiArc3RydWN0IGFzcl9wYXJhbV9tdXhf Y2xrIHsKPj4gKwl1bnNpZ25lZCBpbnQgaWQ7Cj4+ICsJY2hhciAqbmFtZTsKPj4gKwljb25zdCBj aGFyICogY29uc3QgKnBhcmVudF9uYW1lOwo+PiArCXU4IG51bV9wYXJlbnRzOwo+PiArCXVuc2ln bmVkIGxvbmcgZmxhZ3M7Cj4+ICsJdW5zaWduZWQgbG9uZyBvZmZzZXQ7Cj4+ICsJdTggc2hpZnQ7 Cj4+ICsJdTggd2lkdGg7Cj4+ICsJdW5zaWduZWQgbG9uZyBtdXhfZmxhZ3M7Cj4+ICsJc3Bpbmxv Y2tfdCAqbG9jazsKPj4gK307Cj4+ICt2b2lkIGFzcl9yZWdpc3Rlcl9tdXhfY2xrcyhzdHJ1Y3Qg YXNyX2Nsa191bml0ICp1bml0LAo+PiArCQkJc3RydWN0IGFzcl9wYXJhbV9tdXhfY2xrICpjbGtz LAo+PiArCQkJdm9pZCBfX2lvbWVtICpiYXNlLCBpbnQgc2l6ZSk7Cj4+ICsKPj4gK3N0cnVjdCBh c3JfcGFyYW1fZGl2X2NsayB7Cj4+ICsJdW5zaWduZWQgaW50IGlkOwo+PiArCWNoYXIgKm5hbWU7 Cj4+ICsJY29uc3QgY2hhciAqcGFyZW50X25hbWU7Cj4+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsK Pj4gKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKPj4gKwl1OCBzaGlmdDsKPj4gKwl1OCB3aWR0aDsK Pj4gKwl1bnNpZ25lZCBsb25nIGRpdl9mbGFnczsKPj4gKwlzcGlubG9ja190ICpsb2NrOwo+PiAr fTsKPj4gK3ZvaWQgYXNyX3JlZ2lzdGVyX2Rpdl9jbGtzKHN0cnVjdCBhc3JfY2xrX3VuaXQgKnVu aXQsCj4+ICsJCQlzdHJ1Y3QgYXNyX3BhcmFtX2Rpdl9jbGsgKmNsa3MsCj4+ICsJCQl2b2lkIF9f aW9tZW0gKmJhc2UsIGludCBzaXplKTsKPj4gKwo+PiArI2RlZmluZSBERUZJTkVfTUlYX1JFR19J TkZPKHdfZCwgc19kLCB3X20sIHNfbSwgZmMpCVwKPj4gK3sJCQkJCQkJCQlcCj4+ICsJLndpZHRo X2RpdiA9ICh3X2QpLAkJCQlcCj4+ICsJLnNoaWZ0X2RpdiA9IChzX2QpLAkJCQlcCj4+ICsJLndp ZHRoX211eCA9ICh3X20pLAkJCQlcCj4+ICsJLnNoaWZ0X211eCA9IChzX20pLAkJCQlcCj4+ICsJ LmJpdF9mYyA9IChmYyksCQkJCQlcCj4+ICt9Cj4+ICsKPj4gK2ludCBhc3JfY2xrX2luaXQoc3Ry dWN0IGRldmljZV9ub2RlICpucCwgc3RydWN0IGFzcl9jbGtfdW5pdCAqdW5pdCwKPj4gKwkJaW50 IG5yX2Nsa3MpOwo+PiArdm9pZCBhc3JfY2xrX2FkZChzdHJ1Y3QgYXNyX2Nsa191bml0ICp1bml0 LCB1bnNpZ25lZCBpbnQgaWQsCj4+ICsJCXN0cnVjdCBjbGsgKmNsayk7Cj4+ICt2b2lkIGFzcl9j bGtzX2VuYWJsZShjaGFyICoqY2xrX3RhYmxlLCBpbnQgY2xrX3RhYmxlX3NpemUpOwo+PiArI2Vu ZGlmCj4+IC0tIAo+PiAyLjcuNApUaGFua3MgYSBsb3QgZm9yIHRoZSBjb21tZW50cyBhbmQgc3Vn Z2VzdGlvbnMuCgoK