From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17341 invoked by alias); 9 Apr 2012 17:19:11 -0000 Received: (qmail 17315 invoked by uid 22791); 9 Apr 2012 17:19:06 -0000 X-SWARE-Spam-Status: No, hits=-2.3 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,KAM_STOCKTIP,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,TW_BD,TW_CP,TW_EB,TW_FN,TW_FX,TW_XF,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mail-ob0-f175.google.com (HELO mail-ob0-f175.google.com) (209.85.214.175) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 09 Apr 2012 17:18:42 +0000 Received: by obbuo13 with SMTP id uo13so6553830obb.20 for ; Mon, 09 Apr 2012 10:18:41 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:x-system-of-record:x-gm-message-state; bh=bXxK7CcNav+RoMO27P583epg6Wv3t7aoHzJ9UykcoGs=; b=kYQuPTJ8N1zps0d+r3IbAO/M29hBLbInO2ueBwhq4/v//mN19GJdTXNrEfxuX7Jmmj sVMT3ck6qhEL7zrc/tEJjyZq7Fw0tlGKaf6qqDkf2yAwW4SX5cVWQ3e41Y+zaJuYgkA1 HtxPn0HFK5Pvo8yRZcMRv7L0pptnIo+T5RIxOdVgYvs+QXiiELHwIprECxvBsAXvoymy 9aE8c73PvqpAMqO8bZb23OFB+3wyWuk4Ccm/XP+NTsBNuruA9NX21+9kt3h0tExccFn/ XkHNU4bi/uS1HNKkPf/j4BzesVnPgXoczZuFD+38YVcRH8kadTlnwcs69bSdsG/HCbpF 29pw== Received: by 10.182.43.42 with SMTP id t10mr11517694obl.60.1333991921438; Mon, 09 Apr 2012 10:18:41 -0700 (PDT) MIME-Version: 1.0 Received: by 10.182.43.42 with SMTP id t10mr11517671obl.60.1333991921287; Mon, 09 Apr 2012 10:18:41 -0700 (PDT) Received: by 10.182.136.73 with HTTP; Mon, 9 Apr 2012 10:18:41 -0700 (PDT) In-Reply-To: References: <20120330001021.9E30EB2086@azwildcat.mtv.corp.google.com> Date: Mon, 09 Apr 2012 17:19:00 -0000 Message-ID: Subject: Re: Support for Runtime CPU type detection via builtins (issue5754058) From: Sriraman Tallam To: Gerald Pfeifer Cc: reply@codereview.appspotmail.com, gcc-patches@gcc.gnu.org Content-Type: multipart/mixed; boundary=f46d0447f0849a039604bd423229 X-System-Of-Record: true X-Gm-Message-State: ALoCoQlVVd50X90dzj4cLcCia8H3KJTgQfQMH06xiMucH0igTK86Nmbl/f2Mez+XAVBtjcJWBIU7VzjHEtc+qW3RWUGSTVs8VxUSNEcWrBNtks5mlini3rWXPt7TofvIlkoNdQb3HrkakRxbvDUvjVRC+LAznZiF7g== X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2012-04/txt/msg00442.txt.bz2 --f46d0447f0849a039604bd423229 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-length: 977 On Sun, Apr 8, 2012 at 6:17 AM, Gerald Pfeifer wrote: > On Thu, 29 Mar 2012, Sriraman Tallam wrote: >> Hi, >> >> =A0 =A0 I have made a new patch to only have two builtins : >> >> * __builtin_cpu_is ("") >> * __builtin_cpu_supports ("") >> >> apart from the cpu init builtin, __builtin_cpu_init. > > I don't see any .texi file as part of this change. =A0Shouldn't this > be documented (and also added to the release notes gcc-4.8/changes.html)? I modified extend.texi for documenting the builtins. I guess you missed it. I am reattaching the patch just in case. > >> List of CPU names : >> >> * "amd" >> * "intel" > > Are company names really suitable here? =A0Intel is also still producing > ia64 aka Itanium, and in the future AMD might do some ARM-based designs. > AMD64 and Intel64 might work. This is basically the vendor info from CPUID. I dont mind changing it but I do not understand why Intel or AMD is unsuitable. > > Gerald --f46d0447f0849a039604bd423229 Content-Type: text/plain; charset=US-ASCII; name="cpu_runtime_patch.txt" Content-Disposition: attachment; filename="cpu_runtime_patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h0ts70am0 Content-length: 39268 CiAgICAgICAqIGNvbmZpZy9pMzg2L2kzODYuYyAoYnVpbGRfcHJvY2Vzc29y X2ZlYXR1cmVzX3N0cnVjdCk6IE5ldyBmdW5jdGlvbi4KICAgICAgIChidWls ZF9wcm9jZXNzb3JfbW9kZWxfc3RydWN0KTogTmV3IGZ1bmN0aW9uLgogICAg ICAgKG1ha2VfdmFyX2RlY2wpOiBOZXcgZnVuY3Rpb24uCiAgICAgICAoZ2V0 X2ZpZWxkX2Zyb21fc3RydWN0KTogTmV3IGZ1bmN0aW9uLgogICAgICAgKGZv bGRfYnVpbHRpbl90YXJnZXQpOiBOZXcgZnVuY3Rpb24uCiAgICAgICAoaXg4 Nl9mb2xkX2J1aWx0aW4pOiBOZXcgZnVuY3Rpb24uCiAgICAgICAoaXg4Nl9l eHBhbmRfYnVpbHRpbik6IEV4cGFuZCBuZXcgYnVpbHRpbnMgYnkgZm9sZGlu ZyB0aGVtLgogICAgICAgKG1ha2VfY3B1X3R5cGVfYnVpbHRpbik6IE5ldyBm dW5jdGlvbnMuCiAgICAgICAoaXg4Nl9pbml0X3BsYXRmb3JtX3R5cGVfYnVp bHRpbnMpOiBNYWtlIHRoZSBuZXcgYnVpbHRpbnMuCiAgICAgICAoaXg4Nl9p bml0X2J1aWx0aW5zKTogTWFrZSBuZXcgYnVpbHRpbnMgdG8gZGV0ZWN0IENQ VSB0eXBlLgogICAgICAgKFRBUkdFVF9GT0xEX0JVSUxUSU4pOiBOZXcgbWFj cm8uCiAgICAgICAoSVg4Nl9CVUlMVElOX0NQVV9JTklUKTogTmV3IGVudW0g dmFsdWUuCiAgICAgICAoSVg4Nl9CVUlMVElOX0NQVV9JUyk6IE5ldyBlbnVt IHZhbHVlLgogICAgICAgKElYODZfQlVJTFRJTl9DUFVfU1VQUE9SVFMpOiBO ZXcgZW51bSB2YWx1ZS4KICAgICAgICogY29uZmlnL2kzODYvaTM4Ni1idWls dGluLXR5cGVzLmRlZjogTmV3IGZ1bmN0aW9uIHR5cGUuCiAgICAgICAqIHRl c3RzdWl0ZS9nY2MudGFyZ2V0L2J1aWx0aW5fdGFyZ2V0LmM6IE5ldyB0ZXN0 Y2FzZS4KICAgICAgICogZG9jL2V4dGVuZC50ZXhpOiBEb2N1bWVudCBidWls dGlucy4KCiAgICAgICAqIGxpYmdjYy9jb25maWcvaTM4Ni9pMzg2LWNwdWlu Zm8uYzogTmV3IGZpbGUuCiAgICAgICAqIGxpYmdjYy9jb25maWcvaTM4Ni90 LWNwdWluZm86IE5ldyBmaWxlLgogICAgICAgKiBsaWJnY2MvY29uZmlnLmhv c3Q6IEluY2x1ZGUgdC1jcHVpbmZvLgogICAgICAgKiBsaWJnY2MvY29uZmln L2kzODYvbGliZ2NjLWdsaWJjLnZlcjogVmVyc2lvbiBzeW1ib2xzIF9fY3B1 X21vZGVsCiAgICAgICBhbmQgX19jcHVfZmVhdHVyZXMuCgoKSW5kZXg6IGxp YmdjYy9jb25maWcuaG9zdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBs aWJnY2MvY29uZmlnLmhvc3QJKHJldmlzaW9uIDE4NTg5OCkKKysrIGxpYmdj Yy9jb25maWcuaG9zdAkod29ya2luZyBjb3B5KQpAQCAtMTEzMCw3ICsxMTMw LDcgQEAgaVszNDU2N104Ni0qLWxpbnV4KiB8IHg4Nl82NC0qLWxpbnV4KiB8 IFwKICAgaVszNDU2N104Ni0qLWtmcmVlYnNkKi1nbnUgfCB4ODZfNjQtKi1r ZnJlZWJzZCotZ251IHwgXAogICBpWzM0NTY3XTg2LSota25ldGJzZCotZ251 IHwgXAogICBpWzM0NTY3XTg2LSotZ251KikKLQl0bWFrZV9maWxlPSIke3Rt YWtlX2ZpbGV9IHQtdGxzIGkzODYvdC1saW51eCIKKwl0bWFrZV9maWxlPSIk e3RtYWtlX2ZpbGV9IHQtdGxzIGkzODYvdC1saW51eCBpMzg2L3QtY3B1aW5m byIKIAlpZiB0ZXN0ICIkbGliZ2NjX2N2X2NmaSIgPSAieWVzIjsgdGhlbgog CQl0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IHQtc3RhY2sgaTM4Ni90LXN0 YWNrLWkzODYiCiAJZmkKSW5kZXg6IGxpYmdjYy9jb25maWcvaTM4Ni90LWNw dWluZm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbGliZ2NjL2NvbmZp Zy9pMzg2L3QtY3B1aW5mbwkocmV2aXNpb24gMCkKKysrIGxpYmdjYy9jb25m aWcvaTM4Ni90LWNwdWluZm8JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAK K0xJQjJBREQgKz0gJChzcmNkaXIpL2NvbmZpZy9pMzg2L2kzODYtY3B1aW5m by5jCkluZGV4OiBsaWJnY2MvY29uZmlnL2kzODYvaTM4Ni1jcHVpbmZvLmMK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotLS0gbGliZ2NjL2NvbmZpZy9pMzg2 L2kzODYtY3B1aW5mby5jCShyZXZpc2lvbiAwKQorKysgbGliZ2NjL2NvbmZp Zy9pMzg2L2kzODYtY3B1aW5mby5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx LDI5OCBAQAorLyogR2V0IENQVSB0eXBlIGFuZCBGZWF0dXJlcyBmb3IgeDg2 IHByb2Nlc3NvcnMuCisgICBDb3B5cmlnaHQgKEMpIDIwMTIgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb250cmlidXRlZCBieSBTcmly YW1hbiBUYWxsYW0gKHRtc3JpcmFtQGdvb2dsZS5jb20pCisKK1RoaXMgZmls ZSBpcyBwYXJ0IG9mIEdDQy4KKworR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIK K3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlcgordmVyc2lvbi4KKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQor V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK K2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBu b3Qgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICovCisK KyNpbmNsdWRlICJjcHVpZC5oIgorI2luY2x1ZGUgInRzeXN0ZW0uaCIKKwor aW50IF9fY3B1X2luZGljYXRvcl9pbml0ICh2b2lkKSBfX2F0dHJpYnV0ZV9f ICgoY29uc3RydWN0b3IgKDEwMSkpKTsKKworZW51bSB2ZW5kb3Jfc2lnbmF0 dXJlcworeworICBTSUdfSU5URUwgPQkweDc1NmU2NTQ3IC8qIEdlbnUgKi8s CisgIFNJR19BTUQgPQkweDY4NzQ3NTQxIC8qIEF1dGggKi8KK307CisKKy8q IElTQSBGZWF0dXJlcyBzdXBwb3J0ZWQuICovCisKK3N0cnVjdCBfX3Byb2Nl c3Nvcl9mZWF0dXJlcworeworICB1bnNpZ25lZCBpbnQgX19jcHVfY21vdiA6 IDE7CisgIHVuc2lnbmVkIGludCBfX2NwdV9tbXggOiAxOworICB1bnNpZ25l ZCBpbnQgX19jcHVfcG9wY250IDogMTsKKyAgdW5zaWduZWQgaW50IF9fY3B1 X3NzZSA6IDE7CisgIHVuc2lnbmVkIGludCBfX2NwdV9zc2UyIDogMTsKKyAg dW5zaWduZWQgaW50IF9fY3B1X3NzZTMgOiAxOworICB1bnNpZ25lZCBpbnQg X19jcHVfc3NzZTMgOiAxOworICB1bnNpZ25lZCBpbnQgX19jcHVfc3NlNF8x IDogMTsKKyAgdW5zaWduZWQgaW50IF9fY3B1X3NzZTRfMiA6IDE7Cit9IF9f Y3B1X2ZlYXR1cmVzOworCisvKiBQcm9jZXNzb3IgVmVuZG9yIGFuZCBNb2Rl bHMuICovCisKK2VudW0gcHJvY2Vzc29yX3ZlbmRvcgoreworICBWRU5ET1Jf SU5URUwgPSAxLAorICBWRU5ET1JfQU1ELAorICBWRU5ET1JfTUFYCit9Owor CitlbnVtIHByb2Nlc3Nvcl90eXBlcworeworICBJTlRFTF9BVE9NID0gMSwK KyAgSU5URUxfQ09SRTIsCisgIElOVEVMX0NPUkVJNywKKyAgQU1ERkFNMTBI LAorICBBTURGQU0xNUgsCisgIENQVV9UWVBFX01BWAorfTsKKworZW51bSBw cm9jZXNzb3Jfc3VidHlwZXMKK3sKKyAgSU5URUxfQ09SRUk3X05FSEFMRU0s CisgIElOVEVMX0NPUkVJN19XRVNUTUVSRSwKKyAgSU5URUxfQ09SRUk3X1NB TkRZQlJJREdFLAorICBBTURGQU0xMEhfQkFSQ0VMT05BLAorICBBTURGQU0x MEhfU0hBTkdIQUksCisgIEFNREZBTTEwSF9JU1RBTkJVTCwKKyAgQU1ERkFN MTVIX0JEVkVSMSwKKyAgQU1ERkFNMTVIX0JEVkVSMiwKKyAgQ1BVX1NVQlRZ UEVfTUFYCit9OworCitzdHJ1Y3QgX19wcm9jZXNzb3JfbW9kZWwKK3sKKyAg dW5zaWduZWQgaW50IF9fY3B1X3ZlbmRvcjsKKyAgdW5zaWduZWQgaW50IF9f Y3B1X3R5cGU7CisgIHVuc2lnbmVkIGludCBfX2NwdV9zdWJ0eXBlOworfSBf X2NwdV9tb2RlbDsKKworLyogR2V0IHRoZSBzcGVjaWZpYyB0eXBlIG9mIEFN RCBDUFUuICAqLworCitzdGF0aWMgdm9pZAorZ2V0X2FtZF9jcHUgKHVuc2ln bmVkIGludCBmYW1pbHksIHVuc2lnbmVkIGludCBtb2RlbCkKK3sKKyAgX19j cHVfbW9kZWwuX19jcHVfdmVuZG9yID0gVkVORE9SX0FNRDsKKyAgc3dpdGNo IChmYW1pbHkpCisgICAgeworICAgIC8qIEFNRCBGYW1pbHkgMTBoLiAgKi8K KyAgICBjYXNlIDB4MTA6CisgICAgICBzd2l0Y2ggKG1vZGVsKQorCXsKKwlj YXNlIDB4MjoKKwkgIC8qIEJhcmNlbG9uYS4gICovCisJICBfX2NwdV9tb2Rl bC5fX2NwdV90eXBlID0gQU1ERkFNMTBIOworCSAgX19jcHVfbW9kZWwuX19j cHVfc3VidHlwZSA9IEFNREZBTTEwSF9CQVJDRUxPTkE7CisJICBicmVhazsK KwljYXNlIDB4NDoKKwkgIC8qIFNoYW5naGFpLiAgKi8KKwkgIF9fY3B1X21v ZGVsLl9fY3B1X3R5cGUgPSBBTURGQU0xMEg7CisJICBfX2NwdV9tb2RlbC5f X2NwdV9zdWJ0eXBlID0gQU1ERkFNMTBIX1NIQU5HSEFJOworCSAgYnJlYWs7 CisJY2FzZSAweDg6CisJICAvKiBJc3RhbmJ1bC4gICovCisJICBfX2NwdV9t b2RlbC5fX2NwdV90eXBlID0gQU1ERkFNMTBIOworCSAgX19jcHVfbW9kZWwu X19jcHVfc3VidHlwZSA9IEFNREZBTTEwSF9JU1RBTkJVTDsKKwkgIGJyZWFr OworCWRlZmF1bHQ6CisJICBicmVhazsKKwl9CisgICAgICBicmVhazsKKyAg ICAvKiBBTUQgRmFtaWx5IDE1aC4gICovCisgICAgY2FzZSAweDE1OgorICAg ICAgX19jcHVfbW9kZWwuX19jcHVfdHlwZSA9IEFNREZBTTE1SDsKKyAgICAg IC8qIEJ1bGxkb3plciB2ZXJzaW9uIDEuICAqLworICAgICAgaWYgKCBtb2Rl bCA8PSAweGYpCisJX19jcHVfbW9kZWwuX19jcHVfc3VidHlwZSA9IEFNREZB TTE1SF9CRFZFUjE7CisgICAgICAvKiBCdWxsZG96ZXIgdmVyc2lvbiAyLiAg Ki8KKyAgICAgIGlmIChtb2RlbCA+PSAweDEwICYmIG1vZGVsIDw9IDB4MWYp CisJX19jcHVfbW9kZWwuX19jcHVfc3VidHlwZSA9IEFNREZBTTE1SF9CRFZF UjI7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7 CisgICAgfQorfQorCisvKiBHZXQgdGhlIHNwZWNpZmljIHR5cGUgb2YgSW50 ZWwgQ1BVLiAgKi8KKworc3RhdGljIHZvaWQKK2dldF9pbnRlbF9jcHUgKHVu c2lnbmVkIGludCBmYW1pbHksIHVuc2lnbmVkIGludCBtb2RlbCwgdW5zaWdu ZWQgaW50IGJyYW5kX2lkKQoreworICBfX2NwdV9tb2RlbC5fX2NwdV92ZW5k b3IgPSBWRU5ET1JfSU5URUw7CisgIC8qIFBhcnNlIGZhbWlseSBhbmQgbW9k ZWwgb25seSBpZiBicmFuZCBJRCBpcyAwLiAqLworICBpZiAoYnJhbmRfaWQg PT0gMCkKKyAgICB7CisgICAgICBzd2l0Y2ggKGZhbWlseSkKKwl7CisJY2Fz ZSAweDU6CisJICAvKiBQZW50aXVtLiAgKi8KKwkgIGJyZWFrOworCWNhc2Ug MHg2OgorCSAgc3dpdGNoIChtb2RlbCkKKwkgICAgeworCSAgICBjYXNlIDB4 MWM6CisJICAgIGNhc2UgMHgyNjoKKwkgICAgICAvKiBBdG9tLiAgKi8KKwkg ICAgICBfX2NwdV9tb2RlbC5fX2NwdV90eXBlID0gSU5URUxfQVRPTTsKKwkg ICAgICBicmVhazsKKwkgICAgY2FzZSAweDFhOgorCSAgICBjYXNlIDB4MWU6 CisJICAgIGNhc2UgMHgxZjoKKwkgICAgY2FzZSAweDJlOgorCSAgICAgIC8q IE5laGFsZW0uICAqLworCSAgICAgIF9fY3B1X21vZGVsLl9fY3B1X3R5cGUg PSBJTlRFTF9DT1JFSTc7CisJICAgICAgX19jcHVfbW9kZWwuX19jcHVfc3Vi dHlwZSA9IElOVEVMX0NPUkVJN19ORUhBTEVNOworCSAgICAgIGJyZWFrOwor CSAgICBjYXNlIDB4MjU6CisJICAgIGNhc2UgMHgyYzoKKwkgICAgY2FzZSAw eDJmOgorCSAgICAgIC8qIFdlc3RtZXJlLiAgKi8KKwkgICAgICBfX2NwdV9t b2RlbC5fX2NwdV90eXBlID0gSU5URUxfQ09SRUk3OworCSAgICAgIF9fY3B1 X21vZGVsLl9fY3B1X3N1YnR5cGUgPSBJTlRFTF9DT1JFSTdfV0VTVE1FUkU7 CisJICAgICAgYnJlYWs7CisJICAgIGNhc2UgMHgyYToKKwkgICAgICAvKiBT YW5keSBCcmlkZ2UuICAqLworCSAgICAgIF9fY3B1X21vZGVsLl9fY3B1X3R5 cGUgPSBJTlRFTF9DT1JFSTc7CisJICAgICAgX19jcHVfbW9kZWwuX19jcHVf c3VidHlwZSA9IElOVEVMX0NPUkVJN19TQU5EWUJSSURHRTsKKwkgICAgICBi cmVhazsKKwkgICAgY2FzZSAweDE3OgorCSAgICBjYXNlIDB4MWQ6CisJICAg ICAgLyogUGVucnluLiAgKi8KKwkgICAgY2FzZSAweDBmOgorCSAgICAgIC8q IE1lcm9tLiAgKi8KKwkgICAgICBfX2NwdV9tb2RlbC5fX2NwdV90eXBlID0g SU5URUxfQ09SRTI7CisJICAgICAgYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJ ICAgICAgYnJlYWs7CisJICAgIH0KKwkgIGJyZWFrOworCWRlZmF1bHQ6CisJ ICAvKiBXZSBoYXZlIG5vIGlkZWEuICAqLworCSAgYnJlYWs7CisJfQorICAg IH0KK30JICAgICAgICAgICAgIAkKKworc3RhdGljIHZvaWQKK2dldF9hdmFp bGFibGVfZmVhdHVyZXMgKHVuc2lnbmVkIGludCBlY3gsIHVuc2lnbmVkIGlu dCBlZHgpCit7CisgIF9fY3B1X2ZlYXR1cmVzLl9fY3B1X2Ntb3YgPSAoZWR4 ICYgYml0X0NNT1YpID8gMSA6IDA7CisgIF9fY3B1X2ZlYXR1cmVzLl9fY3B1 X21teCA9IChlZHggJiBiaXRfTU1YKSA/IDEgOiAwOworICBfX2NwdV9mZWF0 dXJlcy5fX2NwdV9zc2UgPSAoZWR4ICYgYml0X1NTRSkgPyAxIDogMDsKKyAg X19jcHVfZmVhdHVyZXMuX19jcHVfc3NlMiA9IChlZHggJiBiaXRfU1NFMikg PyAxIDogMDsKKyAgX19jcHVfZmVhdHVyZXMuX19jcHVfcG9wY250ID0gKGVj eCAmIGJpdF9QT1BDTlQpID8gMSA6IDA7CisgIF9fY3B1X2ZlYXR1cmVzLl9f Y3B1X3NzZTMgPSAoZWN4ICYgYml0X1NTRTMpID8gMSA6IDA7CisgIF9fY3B1 X2ZlYXR1cmVzLl9fY3B1X3Nzc2UzID0gKGVjeCAmIGJpdF9TU1NFMykgPyAx IDogMDsKKyAgX19jcHVfZmVhdHVyZXMuX19jcHVfc3NlNF8xID0gKGVjeCAm IGJpdF9TU0U0XzEpID8gMSA6IDA7CisgIF9fY3B1X2ZlYXR1cmVzLl9fY3B1 X3NzZTRfMiA9IChlY3ggJiBiaXRfU1NFNF8yKSA/IDEgOiAwOworfQorCisv KiBBIG5vaW5saW5lIGZ1bmN0aW9uIGNhbGxpbmcgX19nZXRfY3B1aWQuIEhh dmluZyBtYW55IGNhbGxzIHRvCisgICBjcHVpZCBpbiBvbmUgZnVuY3Rpb24g aW4gMzItYml0IG1vZGUgY2F1c2VzIEdDQyB0byBjb21wbGFpbjoKKyAgICJj YW47dCBmaW5kIGEgcmVnaXN0ZXIgaW4gY2xhc3MgQ0xPQkJFUkVEX1JFR1Mi LiAgVGhpcyBpcworICAgcmVsYXRlZCB0byBQUiBydGwtb3B0aW1pemF0aW9u IDQ0MTc0LiAqLworCitzdGF0aWMgaW50IF9fYXR0cmlidXRlX18gKChub2lu bGluZSkpCitfX2dldF9jcHVpZF9vdXRwdXQgKHVuc2lnbmVkIGludCBfX2xl dmVsLAorCQkgICAgdW5zaWduZWQgaW50ICpfX2VheCwgdW5zaWduZWQgaW50 ICpfX2VieCwKKwkJICAgIHVuc2lnbmVkIGludCAqX19lY3gsIHVuc2lnbmVk IGludCAqX19lZHgpCit7CisgIHJldHVybiBfX2dldF9jcHVpZCAoX19sZXZl bCwgX19lYXgsIF9fZWJ4LCBfX2VjeCwgX19lZHgpOworfQorCisKKy8qIEEg Y29uc3RydWN0b3IgZnVuY3Rpb24gdGhhdCBpcyBzZXRzIF9fY3B1X21vZGVs IGFuZCBfX2NwdV9mZWF0dXJlcyB3aXRoCisgICB0aGUgcmlnaHQgdmFsdWVz LiAgVGhpcyBuZWVkcyB0byBydW4gb25seSBvbmNlLiAgVGhpcyBjb25zdHJ1 Y3RvciBpcworICAgZ2l2ZW4gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgYW5kIGl0 IHNob3VsZCBydW4gYmVmb3JlIGNvbnN0cnVjdG9ycyB3aXRob3V0CisgICB0 aGUgcHJpb3JpdHkgc2V0LiAgSG93ZXZlciwgaXQgc3RpbGwgcnVucyBhZnRl ciBpZnVuYyBpbml0aWFsaXplcnMgYW5kCisgICBuZWVkcyB0byBiZSBjYWxs ZWQgZXhwbGljaXRseSB0aGVyZS4gICovCisKK2ludCBfX2F0dHJpYnV0ZV9f ICgoY29uc3RydWN0b3IgKDEwMSkpKQorX19jcHVfaW5kaWNhdG9yX2luaXQg KHZvaWQpCit7CisgIHVuc2lnbmVkIGludCBlYXgsIGVieCwgZWN4LCBlZHg7 CisKKyAgaW50IG1heF9sZXZlbCA9IDU7CisgIHVuc2lnbmVkIGludCB2ZW5k b3I7CisgIHVuc2lnbmVkIGludCBtb2RlbCwgZmFtaWx5LCBicmFuZF9pZDsK KyAgdW5zaWduZWQgaW50IGV4dGVuZGVkX21vZGVsLCBleHRlbmRlZF9mYW1p bHk7CisgIHN0YXRpYyBpbnQgY2FsbGVkID0gMDsKKworICAvKiBUaGlzIGZ1 bmN0aW9uIG5lZWRzIHRvIHJ1biBqdXN0IG9uY2UuICAqLworICBpZiAoY2Fs bGVkKQorICAgIHJldHVybiAwOworICBlbHNlCisgICAgY2FsbGVkID0gMTsK KworICAvKiBBc3N1bWUgY3B1aWQgaW5zbiBwcmVzZW50LiBSdW4gaW4gbGV2 ZWwgMCB0byBnZXQgdmVuZG9yIGlkLiAqLworICBpZiAoIV9fZ2V0X2NwdWlk X291dHB1dCAoMCwgJmVheCwgJmVieCwgJmVjeCwgJmVkeCkpCisgICAgcmV0 dXJuIC0xOworCisgIHZlbmRvciA9IGVieDsKKyAgbWF4X2xldmVsID0gZWF4 OworCisgIGlmIChtYXhfbGV2ZWwgPCAxKQorICAgIHJldHVybiAtMTsKKwor ICBpZiAoIV9fZ2V0X2NwdWlkX291dHB1dCAoMSwgJmVheCwgJmVieCwgJmVj eCwgJmVkeCkpCisgICAgcmV0dXJuIC0xOworCisgIG1vZGVsID0gKGVheCA+ PiA0KSAmIDB4MGY7CisgIGZhbWlseSA9IChlYXggPj4gOCkgJiAweDBmOwor ICBicmFuZF9pZCA9IGVieCAmIDB4ZmY7CisgIGV4dGVuZGVkX21vZGVsID0g KGVheCA+PiAxMikgJiAweGYwOworICBleHRlbmRlZF9mYW1pbHkgPSAoZWF4 ID4+IDIwKSAmIDB4ZmY7CisKKyAgaWYgKHZlbmRvciA9PSBTSUdfSU5URUwp CisgICAgeworICAgICAgLyogQWRqdXN0IG1vZGVsIGFuZCBmYW1pbHkgZm9y IEludGVsIENQVVMuICovCisgICAgICBpZiAoZmFtaWx5ID09IDB4MGYpCisJ eworCSAgZmFtaWx5ICs9IGV4dGVuZGVkX2ZhbWlseTsKKwkgIG1vZGVsICs9 IGV4dGVuZGVkX21vZGVsOworCX0KKyAgICAgIGVsc2UgaWYgKGZhbWlseSA9 PSAweDA2KQorCW1vZGVsICs9IGV4dGVuZGVkX21vZGVsOworCisgICAgICAv KiBHZXQgQ1BVIHR5cGUuICAqLworICAgICAgZ2V0X2ludGVsX2NwdSAoZmFt aWx5LCBtb2RlbCwgYnJhbmRfaWQpOworICAgIH0KKworICBpZiAodmVuZG9y ID09IFNJR19BTUQpCisgICAgeworICAgICAgLyogQWRqdXN0IG1vZGVsIGFu ZCBmYW1pbHkgZm9yIEFNRCBDUFVTLiAqLworICAgICAgaWYgKGZhbWlseSA9 PSAweDBmKQorCXsKKwkgIGZhbWlseSArPSBleHRlbmRlZF9mYW1pbHk7CisJ ICBtb2RlbCArPSAoZXh0ZW5kZWRfbW9kZWwgPDwgNCk7CisJfQorCisgICAg ICAvKiBHZXQgQ1BVIHR5cGUuICAqLworICAgICAgZ2V0X2FtZF9jcHUgKGZh bWlseSwgbW9kZWwpOworICAgIH0KKworICAvKiBGaW5kIGF2YWlsYWJsZSBm ZWF0dXJlcy4gKi8KKyAgZ2V0X2F2YWlsYWJsZV9mZWF0dXJlcyAoZWN4LCBl ZHgpOworCisgIGdjY19hc3NlcnQgKF9fY3B1X21vZGVsLl9fY3B1X3ZlbmRv ciA8IFZFTkRPUl9NQVgpOworICBnY2NfYXNzZXJ0IChfX2NwdV9tb2RlbC5f X2NwdV90eXBlIDwgQ1BVX1RZUEVfTUFYKTsKKyAgZ2NjX2Fzc2VydCAoX19j cHVfbW9kZWwuX19jcHVfc3VidHlwZSA8IENQVV9TVUJUWVBFX01BWCk7CisK KyAgcmV0dXJuIDA7Cit9CkluZGV4OiBsaWJnY2MvY29uZmlnL2kzODYvbGli Z2NjLWdsaWJjLnZlcgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsaWJn Y2MvY29uZmlnL2kzODYvbGliZ2NjLWdsaWJjLnZlcgkocmV2aXNpb24gMTg1 ODk4KQorKysgbGliZ2NjL2NvbmZpZy9pMzg2L2xpYmdjYy1nbGliYy52ZXIJ KHdvcmtpbmcgY29weSkKQEAgLTE0Nyw2ICsxNDcsMTEgQEAgR0NDXzQuMy4w IHsKICAgX190cnVuY3RmeGYyCiAgIF9fdW5vcmR0ZjIKIH0KKworR0NDXzQu OC4wIHsKKyAgX19jcHVfbW9kZWwKKyAgX19jcHVfZmVhdHVyZXMKK30KICVl bHNlCiBHQ0NfNC40LjAgewogICBfX2FkZHRmMwpAQCAtMTgzLDQgKzE4OCw5 IEBAIEdDQ180LjQuMCB7CiBHQ0NfNC41LjAgewogICBfX2V4dGVuZHhmdGYy CiB9CisKK0dDQ180LjguMCB7CisgIF9fY3B1X21vZGVsCisgIF9fY3B1X2Zl YXR1cmVzCit9CiAlZW5kaWYKSW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9pMzg2L2J1aWx0aW5fdGFyZ2V0LmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYnVpbHRp bl90YXJnZXQuYwkocmV2aXNpb24gMCkKKysrIGdjYy90ZXN0c3VpdGUvZ2Nj LnRhcmdldC9pMzg2L2J1aWx0aW5fdGFyZ2V0LmMJKHJldmlzaW9uIDApCkBA IC0wLDAgKzEsNjUgQEAKKy8qIFRoaXMgdGVzdCBjaGVja3MgaWYgdGhlIF9f YnVpbHRpbl9jcHVfaXMgYW5kIF9fYnVpbHRpbl9jcHVfc3VwcG9ydHMgY2Fs bHMKKyAgIGFyZSByZWNvZ25pemVkLiAqLworCisvKiB7IGRnLWRvIHJ1biB9 ICovCisKK2ludAorZm4xICgpCit7CisgIGlmIChfX2J1aWx0aW5fY3B1X3N1 cHBvcnRzICgiY21vdiIpIDwgMCkKKyAgICByZXR1cm4gLTE7CisgIGlmIChf X2J1aWx0aW5fY3B1X3N1cHBvcnRzICgibW14IikgPCAwKQorICAgIHJldHVy biAtMTsKKyAgaWYgKF9fYnVpbHRpbl9jcHVfc3VwcG9ydHMgKCJwb3BjbnQi KSA8IDApCisgICAgcmV0dXJuIC0xOworICBpZiAoX19idWlsdGluX2NwdV9z dXBwb3J0cyAoInNzZSIpIDwgMCkKKyAgICByZXR1cm4gLTE7CisgIGlmIChf X2J1aWx0aW5fY3B1X3N1cHBvcnRzICgic3NlMiIpIDwgMCkKKyAgICByZXR1 cm4gLTE7CisgIGlmIChfX2J1aWx0aW5fY3B1X3N1cHBvcnRzICgic3NlMyIp IDwgMCkKKyAgICByZXR1cm4gLTE7CisgIGlmIChfX2J1aWx0aW5fY3B1X3N1 cHBvcnRzICgic3NzZTMiKSA8IDApCisgICAgcmV0dXJuIC0xOworICBpZiAo X19idWlsdGluX2NwdV9zdXBwb3J0cyAoInNzZTQuMSIpIDwgMCkKKyAgICBy ZXR1cm4gLTE7CisgIGlmIChfX2J1aWx0aW5fY3B1X3N1cHBvcnRzICgic3Nl NC4yIikgPCAwKQorICAgIHJldHVybiAtMTsKKyAgaWYgKF9fYnVpbHRpbl9j cHVfaXMgKCJhbWQiKSA8IDApCisgICAgcmV0dXJuIC0xOworICBpZiAoX19i dWlsdGluX2NwdV9pcyAoImludGVsIikgPCAwKQorICAgIHJldHVybiAtMTsK KyAgaWYgKF9fYnVpbHRpbl9jcHVfaXMgKCJhdG9tIikgPCAwKQorICAgIHJl dHVybiAtMTsKKyAgaWYgKF9fYnVpbHRpbl9jcHVfaXMgKCJjb3JlMiIpIDwg MCkKKyAgICByZXR1cm4gLTE7CisgIGlmIChfX2J1aWx0aW5fY3B1X2lzICgi Y29yZWk3IikgPCAwKQorICAgIHJldHVybiAtMTsKKyAgaWYgKF9fYnVpbHRp bl9jcHVfaXMgKCJuZWhhbGVtIikgPCAwKQorICAgIHJldHVybiAtMTsKKyAg aWYgKF9fYnVpbHRpbl9jcHVfaXMgKCJ3ZXN0bWVyZSIpIDwgMCkKKyAgICBy ZXR1cm4gLTE7CisgIGlmIChfX2J1aWx0aW5fY3B1X2lzICgic2FuZHlicmlk Z2UiKSA8IDApCisgICAgcmV0dXJuIC0xOworICBpZiAoX19idWlsdGluX2Nw dV9pcyAoImFtZGZhbTEwaCIpIDwgMCkKKyAgICByZXR1cm4gLTE7CisgIGlm IChfX2J1aWx0aW5fY3B1X2lzICgiYmFyY2Vsb25hIikgPCAwKQorICAgIHJl dHVybiAtMTsKKyAgaWYgKF9fYnVpbHRpbl9jcHVfaXMgKCJzaGFuZ2hhaSIp IDwgMCkKKyAgICByZXR1cm4gLTE7CisgIGlmIChfX2J1aWx0aW5fY3B1X2lz ICgiaXN0YW5idWwiKSA8IDApCisgICAgcmV0dXJuIC0xOworICBpZiAoX19i dWlsdGluX2NwdV9pcyAoImFtZGZhbTE1aCIpIDwgMCkKKyAgICByZXR1cm4g LTE7CisgIGlmIChfX2J1aWx0aW5fY3B1X2lzICgiYmR2ZXIxIikgPCAwKQor ICAgIHJldHVybiAtMTsKKyAgaWYgKF9fYnVpbHRpbl9jcHVfaXMgKCJiZHZl cjIiKSA8IDApCisgICAgcmV0dXJuIC0xOworCisgIHJldHVybiAwOworfQor CitpbnQgbWFpbiAoKQoreworICBfX2J1aWx0aW5fY3B1X2luaXQgKCk7Cisg IHJldHVybiBmbjEgKCk7Cit9CkluZGV4OiBnY2MvY29uZmlnL2kzODYvaTM4 Ni1idWlsdGluLXR5cGVzLmRlZgo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t LSBnY2MvY29uZmlnL2kzODYvaTM4Ni1idWlsdGluLXR5cGVzLmRlZgkocmV2 aXNpb24gMTg1ODk4KQorKysgZ2NjL2NvbmZpZy9pMzg2L2kzODYtYnVpbHRp bi10eXBlcy5kZWYJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw2ICsxNTUsNyBA QCBERUZfRlVOQ1RJT05fVFlQRSAoSU5ULCBWNFNGKQogREVGX0ZVTkNUSU9O X1RZUEUgKElOVCwgVjhRSSkKIERFRl9GVU5DVElPTl9UWVBFIChJTlQsIFY4 U0YpCiBERUZfRlVOQ1RJT05fVFlQRSAoSU5ULCBWMzJRSSkKK0RFRl9GVU5D VElPTl9UWVBFIChJTlQsIFBDQ0hBUikKIERFRl9GVU5DVElPTl9UWVBFIChJ TlQ2NCwgSU5UNjQpCiBERUZfRlVOQ1RJT05fVFlQRSAoSU5UNjQsIFYyREYp CiBERUZfRlVOQ1RJT05fVFlQRSAoSU5UNjQsIFY0U0YpCkluZGV4OiBnY2Mv Y29uZmlnL2kzODYvaTM4Ni5jCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t IGdjYy9jb25maWcvaTM4Ni9pMzg2LmMJKHJldmlzaW9uIDE4NTg5OCkKKysr IGdjYy9jb25maWcvaTM4Ni9pMzg2LmMJKHdvcmtpbmcgY29weSkKQEAgLTI1 ODA5LDYgKzI1ODA5LDExIEBAIGVudW0gaXg4Nl9idWlsdGlucwogICAvKiBD RlN0cmluZyBidWlsdC1pbiBmb3IgZGFyd2luICovCiAgIElYODZfQlVJTFRJ Tl9DRlNUUklORywKIAorICAvKiBCdWlsdGlucyB0byBnZXQgQ1BVIHR5cGUg YW5kIHN1cHBvcnRlZCBmZWF0dXJlcy4gKi8KKyAgSVg4Nl9CVUlMVElOX0NQ VV9JTklULAorICBJWDg2X0JVSUxUSU5fQ1BVX0lTLAorICBJWDg2X0JVSUxU SU5fQ1BVX1NVUFBPUlRTLAorCiAgIElYODZfQlVJTFRJTl9NQVgKIH07CiAK QEAgLTI3NjI3LDYgKzI3NjMyLDM2MSBAQCBpeDg2X2luaXRfbW14X3NzZV9i dWlsdGlucyAodm9pZCkKICAgICB9CiB9CiAKKy8qIFRoaXMgYnVpbGRzIHRo ZSBwcm9jZXNzb3JfbW9kZWwgc3RydWN0IHR5cGUgZGVmaW5lZCBpbgorICAg bGliZ2NjL2NvbmZpZy9pMzg2L2kzODYtY3B1aW5mby5jICAqLworc3RhdGlj IHRyZWUKK2J1aWxkX3Byb2Nlc3Nvcl9tb2RlbF9zdHJ1Y3QgKHZvaWQpCit7 CisgIGNvbnN0IGNoYXIgKmZpZWxkX25hbWVbXSA9IHsiX19jcHVfdmVuZG9y IiwgIl9fY3B1X3R5cGUiLCAiX19jcHVfc3VidHlwZSJ9OworICB0cmVlIGZp ZWxkID0gTlVMTF9UUkVFLCBmaWVsZF9jaGFpbiA9IE5VTExfVFJFRTsKKyAg aW50IGk7CisgIHRyZWUgdHlwZSA9IG1ha2Vfbm9kZSAoUkVDT1JEX1RZUEUp OworICBpbnQgbnVtX2ZpZWxkcyA9IHNpemVvZiAoZmllbGRfbmFtZSkgLyBz aXplb2YgKGNvbnN0IGNoYXIgKik7CisKKyAgZm9yIChpID0gMDsgaSA8IG51 bV9maWVsZHM7ICsraSkKKyAgICB7CisgICAgICBmaWVsZCA9IGJ1aWxkX2Rl Y2wgKFVOS05PV05fTE9DQVRJT04sIEZJRUxEX0RFQ0wsCisJCQkgIGdldF9p ZGVudGlmaWVyIChmaWVsZF9uYW1lW2ldKSwgdW5zaWduZWRfdHlwZV9ub2Rl KTsKKyAgICAgIGlmIChmaWVsZF9jaGFpbiAhPSBOVUxMX1RSRUUpCisJREVD TF9DSEFJTiAoZmllbGQpID0gZmllbGRfY2hhaW47CisgICAgICBmaWVsZF9j aGFpbiA9IGZpZWxkOyAKKyAgICB9CisgIGZpbmlzaF9idWlsdGluX3N0cnVj dCAodHlwZSwgIl9fcHJvY2Vzc29yX21vZGVsIiwgZmllbGRfY2hhaW4sIE5V TExfVFJFRSk7CisgIHJldHVybiB0eXBlOworfQorCisvKiBUaGlzIGJ1aWxk cyB0aGUgcHJvY2Vzc29yX2ZlYXR1cmVzIHN0cnVjdCB0eXBlIGRlZmluZWQg aW4KKyAgIGxpYmdjYy9jb25maWcvaTM4Ni9pMzg2LWNwdWluZm8uYyAgKi8K Kworc3RhdGljIHRyZWUKK2J1aWxkX3Byb2Nlc3Nvcl9mZWF0dXJlc19zdHJ1 Y3QgKHZvaWQpCit7CisgIGludCBpOworICBjb25zdCBjaGFyICpmaWVsZF9u YW1lW10gPSB7Il9fY3B1X2Ntb3YiLCAiX19jcHVfbW14IiwgIl9fY3B1X3Bv cGNudCIsCisJCQkgICAgICAiX19jcHVfc3NlIiwgIl9fY3B1X3NzZTIiLCAi X19jcHVfc3NlMyIsCisJCQkgICAgICAiX19jcHVfc3NzZTMiLCAiX19jcHVf c3NlNF8xIiwgIl9fY3B1X3NzZTRfMiJ9OworCisgIHRyZWUgZmllbGQgPSBO VUxMX1RSRUUsIGZpZWxkX2NoYWluID0gTlVMTF9UUkVFOworICB0cmVlIHR5 cGUgPSBtYWtlX25vZGUgKFJFQ09SRF9UWVBFKTsKKyAgaW50IG51bV9maWVs ZHMgPSBzaXplb2YgKGZpZWxkX25hbWUpIC8gc2l6ZW9mIChjb25zdCBjaGFy ICopOworICAKKyAgZm9yIChpID0gMDsgaSA8IG51bV9maWVsZHM7IGkrKykK KyAgICB7CisgICAgICBmaWVsZCA9IGJ1aWxkX2RlY2wgKFVOS05PV05fTE9D QVRJT04sIEZJRUxEX0RFQ0wsCisJCQkgIGdldF9pZGVudGlmaWVyIChmaWVs ZF9uYW1lW2ldKSwgdW5zaWduZWRfdHlwZV9ub2RlKTsKKyAgICAgIERFQ0xf QklUX0ZJRUxEIChmaWVsZCkgPSAxOworICAgICAgREVDTF9TSVpFIChmaWVs ZCkgPSBiaXRzaXplX29uZV9ub2RlOworICAgICAgaWYgKGZpZWxkX2NoYWlu ICE9IE5VTExfVFJFRSkKKwlERUNMX0NIQUlOIChmaWVsZCkgPSBmaWVsZF9j aGFpbjsKKyAgICAgIGZpZWxkX2NoYWluID0gZmllbGQ7CisgICAgfQorICBm aW5pc2hfYnVpbHRpbl9zdHJ1Y3QgKHR5cGUsICJfX3Byb2Nlc3Nvcl9mZWF0 dXJlcyIsIGZpZWxkX2NoYWluLCBOVUxMX1RSRUUpOworICByZXR1cm4gdHlw ZTsKK30KKworLyogUmV0dXJucyBhIGV4dGVybiwgY29tZGF0IFZBUl9ERUNM IG9mIHR5cGUgVFlQRSBhbmQgbmFtZSBOQU1FLiAqLworCitzdGF0aWMgdHJl ZQorbWFrZV92YXJfZGVjbCAodHJlZSB0eXBlLCBjb25zdCBjaGFyICpuYW1l KQoreworICB0cmVlIG5ld19kZWNsOworCisgIG5ld19kZWNsID0gYnVpbGRf ZGVjbCAoVU5LTk9XTl9MT0NBVElPTiwKKwkgICAgICAgICAgICAgICAgIFZB Ul9ERUNMLAorCSAgCSAgICAgICAgIGdldF9pZGVudGlmaWVyKG5hbWUpLAor CQkgICAgICAgICB0eXBlKTsKKworICBERUNMX0VYVEVSTkFMIChuZXdfZGVj bCkgPSAxOworICBUUkVFX1NUQVRJQyAobmV3X2RlY2wpID0gMTsKKyAgVFJF RV9QVUJMSUMgKG5ld19kZWNsKSA9IDE7CisgIERFQ0xfSU5JVElBTCAobmV3 X2RlY2wpID0gMDsKKyAgREVDTF9BUlRJRklDSUFMIChuZXdfZGVjbCkgPSAw OworICBERUNMX1BSRVNFUlZFX1AgKG5ld19kZWNsKSA9IDE7CisKKyAgbWFr ZV9kZWNsX29uZV9vbmx5IChuZXdfZGVjbCwgREVDTF9BU1NFTUJMRVJfTkFN RSAobmV3X2RlY2wpKTsKKyAgYXNzZW1ibGVfdmFyaWFibGUgKG5ld19kZWNs LCAwLCAwLCAwKTsKKworICByZXR1cm4gbmV3X2RlY2w7Cit9CisKKy8qIFRy YXZlcnNlcyB0aGUgY2hhaW4gb2YgZmllbGRzIGluIFNUUlVDVF9UWVBFIGFu ZCByZXR1cm5zIHRoZSBGSUVMRF9OVU0KKyAgIG51bWJlcmVkIGZpZWxkLiAq LworCitzdGF0aWMgdHJlZQorZ2V0X2ZpZWxkX2Zyb21fc3RydWN0ICh0cmVl IHN0cnVjdF90eXBlLCBpbnQgZmllbGRfbnVtKQoreworICBpbnQgaTsKKyAg dHJlZSBmaWVsZCA9IFRZUEVfRklFTERTIChzdHJ1Y3RfdHlwZSk7CisKKyAg Zm9yIChpID0gMDsgaSA8IGZpZWxkX251bTsgaSsrLCBmaWVsZCA9IERFQ0xf Q0hBSU4oZmllbGQpKQorICAgIHsKKyAgICAgIGdjY19hc3NlcnQgKGZpZWxk ICE9IE5VTExfVFJFRSk7CisgICAgfQorCisgIHJldHVybiBmaWVsZDsKK30K KworLyogRk5ERUNMIGlzIGEgX19idWlsdGluX2NwdV9pcyBvciBhIF9fYnVp bHRpbl9jcHVfc3VwcG9ydHMgY2FsbCB0aGF0IGlzIGZvbGRlZAorICAgaW50 byBhbiBpbnRlZ2VyIGRlZmluZWQgaW4gbGliZ2NjL2NvbmZpZy9pMzg2L2kz ODYtY3B1aW5mby5jICovCisKK3N0YXRpYyB0cmVlIAorZm9sZF9idWlsdGlu X2NwdSAodHJlZSBmbmRlY2wsIHRyZWUgKmFyZ3MpCit7CisgIHVuc2lnbmVk IGludCBpOworICBlbnVtIGl4ODZfYnVpbHRpbnMgZm5fY29kZSA9IChlbnVt IGl4ODZfYnVpbHRpbnMpCisJCQkJREVDTF9GVU5DVElPTl9DT0RFIChmbmRl Y2wpOworICB0cmVlIHBhcmFtX3N0cmluZ19jc3QgPSBOVUxMOworCisgIC8q IFRoaXMgaXMgdGhlIG9yZGVyIG9mIGJpdC1maWVsZHMgaW4gX19wcm9jZXNz b3JfZmVhdHVyZXMgaW4KKyAgICAgaTM4Ni1jcHVpbmZvLmMgKi8KKyAgZW51 bSBwcm9jZXNzb3JfZmVhdHVyZXMKKyAgeworICAgIEZfQ01PViA9IDAsCisg ICAgRl9NTVgsCisgICAgRl9QT1BDTlQsCisgICAgRl9TU0UsCisgICAgRl9T U0UyLAorICAgIEZfU1NFMywKKyAgICBGX1NTU0UzLAorICAgIEZfU1NFNF8x LAorICAgIEZfU1NFNF8yLAorICAgIEZfTUFYCisgIH07CisKKyAgLyogVGhl c2UgYXJlIHRoZSB2YWx1ZXMgZm9yIHZlbmRvciB0eXBlcyBhbmQgY3B1IHR5 cGVzICBhbmQgc3VidHlwZXMKKyAgICAgaW4gaTM4Ni1jcHVpbmZvLmMuICBD cHUgdHlwZXMgYW5kIHN1YnR5cGVzIHNob3VsZCBiZSBzdWJ0cmFjdGVkIGJ5 CisgICAgIHRoZSBjb3JyZXNwb25kaW5nIHN0YXJ0IHZhbHVlLiAgKi8KKyAg ZW51bSBwcm9jZXNzb3JfbW9kZWwKKyAgeworICAgIE1fSU5URUwgPSAxLAor ICAgIE1fQU1ELAorICAgIE1fQ1BVX1RZUEVfU1RBUlQsCisgICAgTV9JTlRF TF9BVE9NLAorICAgIE1fSU5URUxfQ09SRTIsCisgICAgTV9JTlRFTF9DT1JF STcsCisgICAgTV9BTURGQU0xMEgsCisgICAgTV9BTURGQU0xNUgsCisgICAg TV9DUFVfU1VCVFlQRV9TVEFSVCwKKyAgICBNX0lOVEVMX0NPUkVJN19ORUhB TEVNLAorICAgIE1fSU5URUxfQ09SRUk3X1dFU1RNRVJFLAorICAgIE1fSU5U RUxfQ09SRUk3X1NBTkRZQlJJREdFLAorICAgIE1fQU1ERkFNMTBIX0JBUkNF TE9OQSwKKyAgICBNX0FNREZBTTEwSF9TSEFOR0hBSSwKKyAgICBNX0FNREZB TTEwSF9JU1RBTkJVTCwKKyAgICBNX0FNREZBTTE1SF9CRFZFUjEsCisgICAg TV9BTURGQU0xNUhfQkRWRVIyCisgIH07CisKKyAgc3RhdGljIHN0cnVjdCBf YXJjaF9uYW1lc190YWJsZQorICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgKmNv bnN0IG5hbWU7CisgICAgICBjb25zdCBlbnVtIHByb2Nlc3Nvcl9tb2RlbCBt b2RlbDsKKyAgICB9CisgIGNvbnN0IGFyY2hfbmFtZXNfdGFibGVbXSA9Cisg ICAgeworICAgICAgeyJhbWQiLCBNX0FNRH0sCisgICAgICB7ImludGVsIiwg TV9JTlRFTH0sCisgICAgICB7ImF0b20iLCBNX0lOVEVMX0FUT019LAorICAg ICAgeyJjb3JlMiIsIE1fSU5URUxfQ09SRTJ9LAorICAgICAgeyJjb3JlaTci LCBNX0lOVEVMX0NPUkVJN30sCisgICAgICB7Im5laGFsZW0iLCBNX0lOVEVM X0NPUkVJN19ORUhBTEVNfSwKKyAgICAgIHsid2VzdG1lcmUiLCBNX0lOVEVM X0NPUkVJN19XRVNUTUVSRX0sCisgICAgICB7InNhbmR5YnJpZGdlIiwgTV9J TlRFTF9DT1JFSTdfU0FORFlCUklER0V9LAorICAgICAgeyJhbWRmYW0xMGgi LCBNX0FNREZBTTEwSH0sCisgICAgICB7ImJhcmNlbG9uYSIsIE1fQU1ERkFN MTBIX0JBUkNFTE9OQX0sCisgICAgICB7InNoYW5naGFpIiwgTV9BTURGQU0x MEhfU0hBTkdIQUl9LAorICAgICAgeyJpc3RhbmJ1bCIsIE1fQU1ERkFNMTBI X0lTVEFOQlVMfSwKKyAgICAgIHsiYW1kZmFtMTVoIiwgTV9BTURGQU0xNUh9 LAorICAgICAgeyJiZHZlcjEiLCBNX0FNREZBTTE1SF9CRFZFUjF9LAorICAg ICAgeyJiZHZlcjIiLCBNX0FNREZBTTE1SF9CRFZFUjJ9LAorICAgIH07CisK KyAgc3RhdGljIHN0cnVjdCBfaXNhX25hbWVzX3RhYmxlCisgICAgeworICAg ICAgY29uc3QgY2hhciAqY29uc3QgbmFtZTsKKyAgICAgIGNvbnN0IGVudW0g cHJvY2Vzc29yX2ZlYXR1cmVzIGZlYXR1cmU7CisgICAgfQorICBjb25zdCBp c2FfbmFtZXNfdGFibGVbXSA9CisgICAgeworICAgICAgeyJjbW92IiwgICBG X0NNT1Z9LAorICAgICAgeyJtbXgiLCAgICBGX01NWH0sCisgICAgICB7InBv cGNudCIsIEZfUE9QQ05UfSwKKyAgICAgIHsic3NlIiwgICAgRl9TU0V9LAor ICAgICAgeyJzc2UyIiwgICBGX1NTRTJ9LAorICAgICAgeyJzc2UzIiwgICBG X1NTRTN9LAorICAgICAgeyJzc3NlMyIsICBGX1NTU0UzfSwKKyAgICAgIHsi c3NlNC4xIiwgRl9TU0U0XzF9LAorICAgICAgeyJzc2U0LjIiLCBGX1NTRTRf Mn0KKyAgICB9OworCisgIHN0YXRpYyB0cmVlIF9fcHJvY2Vzc29yX2ZlYXR1 cmVzX3R5cGUgPSBOVUxMX1RSRUU7CisgIHN0YXRpYyB0cmVlIF9fY3B1X2Zl YXR1cmVzX3ZhciA9IE5VTExfVFJFRTsKKyAgc3RhdGljIHRyZWUgX19wcm9j ZXNzb3JfbW9kZWxfdHlwZSA9IE5VTExfVFJFRTsKKyAgc3RhdGljIHRyZWUg X19jcHVfbW9kZWxfdmFyID0gTlVMTF9UUkVFOworICBzdGF0aWMgdHJlZSBm aWVsZDsKKyAgc3RhdGljIHRyZWUgd2hpY2hfc3RydWN0OworCisgIGlmIChf X3Byb2Nlc3Nvcl9mZWF0dXJlc190eXBlID09IE5VTExfVFJFRSkKKyAgICBf X3Byb2Nlc3Nvcl9mZWF0dXJlc190eXBlID0gYnVpbGRfcHJvY2Vzc29yX2Zl YXR1cmVzX3N0cnVjdCAoKTsKKworICBpZiAoX19wcm9jZXNzb3JfbW9kZWxf dHlwZSA9PSBOVUxMX1RSRUUpCisgICAgX19wcm9jZXNzb3JfbW9kZWxfdHlw ZSA9IGJ1aWxkX3Byb2Nlc3Nvcl9tb2RlbF9zdHJ1Y3QgKCk7CisKKyAgaWYg KF9fY3B1X2ZlYXR1cmVzX3ZhciA9PSBOVUxMX1RSRUUpCisgICAgX19jcHVf ZmVhdHVyZXNfdmFyID0gbWFrZV92YXJfZGVjbCAoX19wcm9jZXNzb3JfZmVh dHVyZXNfdHlwZSwKKwkJCQkJIl9fY3B1X2ZlYXR1cmVzIik7CisKKyAgaWYg KF9fY3B1X21vZGVsX3ZhciA9PSBOVUxMX1RSRUUpCisgICAgX19jcHVfbW9k ZWxfdmFyID0gbWFrZV92YXJfZGVjbCAoX19wcm9jZXNzb3JfbW9kZWxfdHlw ZSwKKwkJCQkgICAgICJfX2NwdV9tb2RlbCIpOworCisgIGdjY19hc3NlcnQg KChhcmdzICE9IE5VTEwpICYmICgqYXJncyAhPSBOVUxMKSk7CisKKyAgcGFy YW1fc3RyaW5nX2NzdCA9ICphcmdzOworICB3aGlsZSAocGFyYW1fc3RyaW5n X2NzdAorCSAmJiBUUkVFX0NPREUgKHBhcmFtX3N0cmluZ19jc3QpICE9ICBT VFJJTkdfQ1NUKQorICAgIHsKKyAgICAgIC8qICphcmdzIG11c3QgYmUgYSBl eHByIHRoYXQgY2FuIGNvbnRhaW4gb3RoZXIgRVhQUlMgbGVhZGluZyB0byBh CisJIFNUUklOR19DU1QuICAgKi8KKyAgICAgIGlmICghRVhQUl9QIChwYXJh bV9zdHJpbmdfY3N0KSkKKyAJeworCSAgZXJyb3IgKCJQYXJhbWV0ZXIgdG8g YnVpbHRpbiBtdXN0IGJlIGEgc3RyaW5nIGNvbnN0YW50IG9yIGxpdGVyYWwi KTsKKwkgIHJldHVybiBpbnRlZ2VyX3plcm9fbm9kZTsKKwl9CisgICAgICBw YXJhbV9zdHJpbmdfY3N0ID0gVFJFRV9PUEVSQU5EIChFWFBSX0NIRUNLIChw YXJhbV9zdHJpbmdfY3N0KSwgMCk7CisgICAgfQorIAorICBnY2NfYXNzZXJ0 IChwYXJhbV9zdHJpbmdfY3N0KTsKKworICBpZiAoZm5fY29kZSA9PSBJWDg2 X0JVSUxUSU5fQ1BVX0lTKQorICAgIHsKKyAgICAgIHRyZWUgcmVmLCBleHBy OworICAgICAgdW5zaWduZWQgaW50IGZpZWxkX3ZhbCA9IDA7CisgICAgICB1 bnNpZ25lZCBpbnQgTlVNX0FSQ0hfTkFNRVMKKwk9IHNpemVvZiAoYXJjaF9u YW1lc190YWJsZSkgLyBzaXplb2YgKHN0cnVjdCBfYXJjaF9uYW1lc190YWJs ZSk7CisKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBOVU1fQVJDSF9OQU1FUzsg aSsrKQorCWlmIChzdHJjbXAgKGFyY2hfbmFtZXNfdGFibGVbaV0ubmFtZSwK KwkgICAgVFJFRV9TVFJJTkdfUE9JTlRFUiAocGFyYW1fc3RyaW5nX2NzdCkp ID09IDApCisJICBicmVhazsKKworICAgICAgaWYgKGkgPT0gTlVNX0FSQ0hf TkFNRVMpCisJeworCSAgZXJyb3IgKCJQYXJhbWV0ZXIgdG8gYnVpbHRpbiBu b3QgdmFsaWQ6ICVzIiwKKwkgICAgICAgICBUUkVFX1NUUklOR19QT0lOVEVS IChwYXJhbV9zdHJpbmdfY3N0KSk7CisJICByZXR1cm4gaW50ZWdlcl96ZXJv X25vZGU7CisJfQorCisgICAgICBmaWVsZCA9IFRZUEVfRklFTERTIChfX3By b2Nlc3Nvcl9tb2RlbF90eXBlKTsKKyAgICAgIGZpZWxkX3ZhbCA9IGFyY2hf bmFtZXNfdGFibGVbaV0ubW9kZWw7CisKKyAgICAgIC8qIENQVSB0eXBlcyBh cmUgc3RvcmVkIGluIHRoZSBuZXh0IGZpZWxkLiAgKi8KKyAgICAgIGlmIChm aWVsZF92YWwgPiBNX0NQVV9UWVBFX1NUQVJUCisJICAmJiBmaWVsZF92YWwg PCBNX0NQVV9TVUJUWVBFX1NUQVJUKQorCXsKKwkgIGZpZWxkID0gREVDTF9D SEFJTiAoZmllbGQpOworCSAgZmllbGRfdmFsIC09IE1fQ1BVX1RZUEVfU1RB UlQ7CisJfQorCisgICAgICAvKiBDUFUgc3VidHlwZXMgYXJlIHN0b3JlZCBp biB0aGUgbGFzdCBmaWVsZC4gICovCisgICAgICBpZiAoZmllbGRfdmFsID4g TV9DUFVfU1VCVFlQRV9TVEFSVCkKKwl7CisJICBmaWVsZCA9IERFQ0xfQ0hB SU4gKCBERUNMX0NIQUlOIChmaWVsZCkpOworCSAgZmllbGRfdmFsIC09IE1f Q1BVX1NVQlRZUEVfU1RBUlQ7CisJfQorCisgICAgICAvKiBHZXQgdGhlIGFw cHJvcHJpYXRlIGZpZWxkIGluIF9fY3B1X21vZGVsLiAgKi8KKyAgICAgIHJl ZiA9ICBidWlsZDMgKENPTVBPTkVOVF9SRUYsIFRSRUVfVFlQRSAoZmllbGQp LCBfX2NwdV9tb2RlbF92YXIsCisJCSAgICAgZmllbGQsIE5VTExfVFJFRSk7 CisKKyAgICAgIC8qIENoZWNrIHRoZSB2YWx1ZS4gICovCisgICAgICByZXR1 cm4gYnVpbGQyIChFUV9FWFBSLCB1bnNpZ25lZF90eXBlX25vZGUsIHJlZiwK KwkJICAgICBidWlsZF9pbnRfY3N0dSAodW5zaWduZWRfdHlwZV9ub2RlLCBm aWVsZF92YWwpKTsKKyAgICB9CisgIGVsc2UgaWYgKGZuX2NvZGUgPT0gSVg4 Nl9CVUlMVElOX0NQVV9TVVBQT1JUUykKKyAgICB7CisgICAgICB1bnNpZ25l ZCBpbnQgTlVNX0lTQV9OQU1FUworCT0gc2l6ZW9mIChpc2FfbmFtZXNfdGFi bGUpIC8gc2l6ZW9mIChzdHJ1Y3QgX2lzYV9uYW1lc190YWJsZSk7CisgICAg ICBmb3IgKGkgPSAwOyBpIDwgTlVNX0lTQV9OQU1FUzsgaSsrKQorCWlmIChz dHJjbXAgKGlzYV9uYW1lc190YWJsZVtpXS5uYW1lLAorCSAgICBUUkVFX1NU UklOR19QT0lOVEVSIChwYXJhbV9zdHJpbmdfY3N0KSkgPT0gMCkKKwkgIGJy ZWFrOworCisgICAgICBpZiAoaSA9PSBOVU1fSVNBX05BTUVTKQorCXsKKwkg IGVycm9yICgiUGFyYW1ldGVyIHRvIGJ1aWx0aW4gbm90IHZhbGlkOiAlcyIs CisJICAgICAgIAkgVFJFRV9TVFJJTkdfUE9JTlRFUiAocGFyYW1fc3RyaW5n X2NzdCkpOworCSAgcmV0dXJuIGludGVnZXJfemVyb19ub2RlOworCX0KKwor ICAgICAgZmllbGQgPSBnZXRfZmllbGRfZnJvbV9zdHJ1Y3QgKF9fcHJvY2Vz c29yX2ZlYXR1cmVzX3R5cGUsCisJCQkJICAgICBpc2FfbmFtZXNfdGFibGVb aV0uZmVhdHVyZSk7CisgICAgICB3aGljaF9zdHJ1Y3QgPSBfX2NwdV9mZWF0 dXJlc192YXI7CisgICAgICByZXR1cm4gYnVpbGQzIChDT01QT05FTlRfUkVG LCBUUkVFX1RZUEUgKGZpZWxkKSwgd2hpY2hfc3RydWN0LAorCQkgICAgIGZp ZWxkLCBOVUxMX1RSRUUpOworICAgIH0KKworICBnY2NfdW5yZWFjaGFibGUg KCk7CisKK30KKworc3RhdGljIHRyZWUKK2l4ODZfZm9sZF9idWlsdGluICh0 cmVlIGZuZGVjbCwgaW50IG5fYXJncywKKwkJICAgdHJlZSAqYXJncywgYm9v bCBpZ25vcmUgQVRUUklCVVRFX1VOVVNFRCkKK3sKKyAgaWYgKERFQ0xfQlVJ TFRfSU5fQ0xBU1MgKGZuZGVjbCkgPT0gQlVJTFRfSU5fTUQpCisgICAgewor ICAgICAgZW51bSBpeDg2X2J1aWx0aW5zIGZuX2NvZGUgPSAoZW51bSBpeDg2 X2J1aWx0aW5zKQorCQkJCSAgIERFQ0xfRlVOQ1RJT05fQ09ERSAoZm5kZWNs KTsKKyAgICAgIGlmIChmbl9jb2RlID09ICBJWDg2X0JVSUxUSU5fQ1BVX0lT CisJICB8fCBmbl9jb2RlID09IElYODZfQlVJTFRJTl9DUFVfU1VQUE9SVFMp CisJeworCSAgZ2NjX2Fzc2VydCAobl9hcmdzID09IDEpOworICAgICAgICAg IHJldHVybiBmb2xkX2J1aWx0aW5fY3B1IChmbmRlY2wsIGFyZ3MpOworCX0K KyAgICB9CisKKyAgcmV0dXJuIE5VTExfVFJFRTsKK30KKworLyogTWFrZSBi dWlsdGlucyB0byBkZXRlY3QgY3B1IHR5cGUgYW5kIGZlYXR1cmVzIHN1cHBv cnRlZC4gIE5BTUUgaXMKKyAgIHRoZSBidWlsdGluIG5hbWUsIENPREUgaXMg dGhlIGJ1aWx0aW4gY29kZSwgYW5kIEZUWVBFIGlzIHRoZSBmdW5jdGlvbgor ICAgdHlwZSBvZiB0aGUgYnVpbHRpbi4gICovCisKK3N0YXRpYyB2b2lkCitt YWtlX2NwdV90eXBlX2J1aWx0aW4gKGNvbnN0IGNoYXIqIG5hbWUsIGludCBj b2RlLAorCQkgICAgICAgZW51bSBpeDg2X2J1aWx0aW5fZnVuY190eXBlIGZ0 eXBlKQoreworICB0cmVlIGRlY2w7CisgIHRyZWUgdHlwZTsKKworICB0eXBl ID0gaXg4Nl9nZXRfYnVpbHRpbl9mdW5jX3R5cGUgKGZ0eXBlKTsKKyAgZGVj bCA9IGFkZF9idWlsdGluX2Z1bmN0aW9uIChuYW1lLCB0eXBlLCBjb2RlLCBC VUlMVF9JTl9NRCwKKwkJCSAgICAgICBOVUxMLCBOVUxMX1RSRUUpOworICBn Y2NfYXNzZXJ0IChkZWNsICE9IE5VTExfVFJFRSk7CisgIGl4ODZfYnVpbHRp bnNbKGludCkgY29kZV0gPSBkZWNsOworICBUUkVFX1JFQURPTkxZIChkZWNs KSA9IDE7Cit9CisKKy8qIE1ha2UgYnVpbHRpbnMgdG8gZ2V0IENQVSB0eXBl IGFuZCBmZWF0dXJlcyBzdXBwb3J0ZWQuICBUaGUgY3JlYXRlZAorICAgYnVp bHRpbnMgYXJlIDoKKworICAgX19idWlsdGluX2NwdV9pbml0ICgpLCB0byBk ZXRlY3QgY3B1IHR5cGUgYW5kIGZlYXR1cmVzLAorICAgX19idWlsdGluX2Nw dV9pcyAoIjxDUFVOQU1FPiIpLCB0byBjaGVjayBpZiBjcHUgaXMgb2YgdHlw ZSA8Q1BVTkFNRT4sCisgICBfX2J1aWx0aW5fY3B1X3N1cHBvcnRzICgiPEZF QVRVUkU+IiksIHRvIGNoZWNrIGlmIGNwdSBzdXBwb3J0cyA8RkVBVFVSRT4K KyAgICovCisKK3N0YXRpYyB2b2lkCitpeDg2X2luaXRfcGxhdGZvcm1fdHlw ZV9idWlsdGlucyAodm9pZCkKK3sKKyAgbWFrZV9jcHVfdHlwZV9idWlsdGlu ICgiX19idWlsdGluX2NwdV9pbml0IiwgSVg4Nl9CVUlMVElOX0NQVV9JTklU LAorCQkJIElOVF9GVFlQRV9WT0lEKTsKKyAgbWFrZV9jcHVfdHlwZV9idWls dGluICgiX19idWlsdGluX2NwdV9pcyIsIElYODZfQlVJTFRJTl9DUFVfSVMs CisJCQkgSU5UX0ZUWVBFX1BDQ0hBUik7CisgIG1ha2VfY3B1X3R5cGVfYnVp bHRpbiAoIl9fYnVpbHRpbl9jcHVfc3VwcG9ydHMiLCBJWDg2X0JVSUxUSU5f Q1BVX1NVUFBPUlRTLAorCQkJIElOVF9GVFlQRV9QQ0NIQVIpOworfQorCiAv KiBJbnRlcm5hbCBtZXRob2QgZm9yIGl4ODZfaW5pdF9idWlsdGlucy4gICov CiAKIHN0YXRpYyB2b2lkCkBAIC0yNzcxMCw2ICsyODA3MCw5IEBAIGl4ODZf aW5pdF9idWlsdGlucyAodm9pZCkKIAogICBpeDg2X2luaXRfYnVpbHRpbl90 eXBlcyAoKTsKIAorICAvKiBCdWlsdGlucyB0byBnZXQgQ1BVIHR5cGUgYW5k IGZlYXR1cmVzLiAqLworICBpeDg2X2luaXRfcGxhdGZvcm1fdHlwZV9idWls dGlucyAoKTsKKwogICAvKiBURm1vZGUgc3VwcG9ydCBidWlsdGlucy4gICov CiAgIGRlZl9idWlsdGluX2NvbnN0ICgwLCAiX19idWlsdGluX2luZnEiLAog CQkgICAgIEZMT0FUMTI4X0ZUWVBFX1ZPSUQsIElYODZfQlVJTFRJTl9JTkZR KTsKQEAgLTI5MzI4LDYgKzI5NjkxLDI4IEBAIGl4ODZfZXhwYW5kX2J1aWx0 aW4gKHRyZWUgZXhwLCBydHggdGFyZ2V0LCBydHggc3ViCiAgIGVudW0gbWFj aGluZV9tb2RlIG1vZGUwLCBtb2RlMSwgbW9kZTIsIG1vZGUzLCBtb2RlNDsK ICAgdW5zaWduZWQgaW50IGZjb2RlID0gREVDTF9GVU5DVElPTl9DT0RFIChm bmRlY2wpOwogCisgIC8qIEZvciBDUFUgYnVpbHRpbnMgdGhhdCBjYW4gYmUg Zm9sZGVkLCBmb2xkIGZpcnN0IGFuZCBleHBhbmQgdGhlIGZvbGQuICAqLwor ICBzd2l0Y2ggKGZjb2RlKQorICAgIHsKKyAgICBjYXNlIElYODZfQlVJTFRJ Tl9DUFVfSU5JVDoKKyAgICAgIHsKKwkvKiBNYWtlIGl0IGNhbGwgX19jcHVf aW5kaWNhdG9yX2luaXQgaW4gbGliZ2NjLiAqLworCXRyZWUgY2FsbF9leHBy LCBmbmRlY2wsIHR5cGU7CisgICAgICAgIHR5cGUgPSBidWlsZF9mdW5jdGlv bl90eXBlX2xpc3QgKGludGVnZXJfdHlwZV9ub2RlLCBOVUxMX1RSRUUpOyAK KwlmbmRlY2wgPSBidWlsZF9mbl9kZWNsICgiX19jcHVfaW5kaWNhdG9yX2lu aXQiLCB0eXBlKTsKKwljYWxsX2V4cHIgPSBidWlsZF9jYWxsX2V4cHIgKGZu ZGVjbCwgMCk7IAorCXJldHVybiBleHBhbmRfZXhwciAoY2FsbF9leHByLCB0 YXJnZXQsIG1vZGUsIEVYUEFORF9OT1JNQUwpOworICAgICAgfQorICAgIGNh c2UgSVg4Nl9CVUlMVElOX0NQVV9JUzoKKyAgICBjYXNlIElYODZfQlVJTFRJ Tl9DUFVfU1VQUE9SVFM6CisgICAgICB7CisJdHJlZSBhcmcwID0gQ0FMTF9F WFBSX0FSRyAoZXhwLCAwKTsKKwl0cmVlIGZvbGRfZXhwciA9IGZvbGRfYnVp bHRpbl9jcHUgKGZuZGVjbCwgJmFyZzApOworCWdjY19hc3NlcnQgKGZvbGRf ZXhwciAhPSBOVUxMX1RSRUUpOworICAgICAgICByZXR1cm4gZXhwYW5kX2V4 cHIgKGZvbGRfZXhwciwgdGFyZ2V0LCBtb2RlLCBFWFBBTkRfTk9STUFMKTsK KyAgICAgIH0KKyAgICB9CisKICAgLyogRGV0ZXJtaW5lIHdoZXRoZXIgdGhl IGJ1aWx0aW4gZnVuY3Rpb24gaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSBjdXJy ZW50IElTQS4KICAgICAgT3JpZ2luYWxseSB0aGUgYnVpbHRpbiB3YXMgbm90 IGNyZWF0ZWQgaWYgaXQgd2Fzbid0IGFwcGxpY2FibGUgdG8gdGhlCiAgICAg IGN1cnJlbnQgSVNBIGJhc2VkIG9uIHRoZSBjb21tYW5kIGxpbmUgc3dpdGNo ZXMuICBXaXRoIGZ1bmN0aW9uIHNwZWNpZmljCkBAIC0zOTA1OCw2ICszOTQ0 Myw5IEBAIGl4ODZfYXV0b3ZlY3Rvcml6ZV92ZWN0b3Jfc2l6ZXMgKHZvaWQp CiAjdW5kZWYgVEFSR0VUX0JVSUxEX0JVSUxUSU5fVkFfTElTVAogI2RlZmlu ZSBUQVJHRVRfQlVJTERfQlVJTFRJTl9WQV9MSVNUIGl4ODZfYnVpbGRfYnVp bHRpbl92YV9saXN0CiAKKyN1bmRlZiBUQVJHRVRfRk9MRF9CVUlMVElOCisj ZGVmaW5lIFRBUkdFVF9GT0xEX0JVSUxUSU4gaXg4Nl9mb2xkX2J1aWx0aW4K KwogI3VuZGVmIFRBUkdFVF9FTlVNX1ZBX0xJU1RfUAogI2RlZmluZSBUQVJH RVRfRU5VTV9WQV9MSVNUX1AgaXg4Nl9lbnVtX3ZhX2xpc3QKIApJbmRleDog Z2NjL2RvYy9leHRlbmQudGV4aQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t LSBnY2MvZG9jL2V4dGVuZC50ZXhpCShyZXZpc2lvbiAxODU4OTgpCisrKyBn Y2MvZG9jL2V4dGVuZC50ZXhpCSh3b3JraW5nIGNvcHkpCkBAIC05NDEzLDYg Kzk0MTMsMTQwIEBAIFNpbWlsYXIgdG8gQGNvZGV7X19idWlsdGluX2h1Z2Vf dmFsfSwgZXhjZXB0IHRoZSByCiBAZmluZGV4IF9fYnVpbHRpbl9odWdlX3Zh bHEKIEBlbmQgdGFibGUKIAorVGhlIGZvbGxvd2luZyBidWlsdC1pbiBmdW5j dGlvbnMgYXJlIGFsd2F5cyBhdmFpbGFibGUgYW5kIGNhbiBiZSB1c2VkIHRv CitjaGVjayB0aGUgdGFyZ2V0IHBsYXRmb3JtIHR5cGUuCisKK0BkZWZ0eXBl Zm4ge0J1aWx0LWluIEZ1bmN0aW9ufSB2b2lkIF9fYnVpbHRpbl9jcHVfaW5p dCAodm9pZCkKK1RoaXMgZnVuY3Rpb24gcnVucyB0aGUgQ1BVIGRldGVjdGlv biBjb2RlIHRvIGNoZWNrIHRoZSB0eXBlIG9mIENQVSBhbmQgdGhlIGZlYXR1 cmVzCitzdXBwb3J0ZWQuIFRoaXMgYnVpbHRpbiBuZWVkcyB0byBiZSBpbnZv a2VkIGFsb25nIHdpdGggdGhlIGJ1aWx0aW5zIHRvIGNoZWNrIENQVSB0eXBl CithbmQgZmVhdHVyZXMsIEBjb2Rle19fYnVpbHRpbl9jcHVfaXN9IGFuZCBA Y29kZXtfX2J1aWx0aW5fY3B1X3N1cHBvcnRzfSwgb25seSB3aGVuIHVzZWQK K3VzZWQgaW4gYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgYmVm b3JlIGFueSBjb25zdHJ1Y3RvcnMgYXJlIGNhbGxlZC4gIFRoZQorQ1BVIGRl dGVjdGlvbiBjb2RlIGlzIGF1dG9tYXRpY2FsbHkgZXhlY3V0ZWQgaW4gYSB2 ZXJ5IGhpZ2ggcHJpb3JpdHkgY29uc3RydWN0b3IuCisKK0ZvciBleGFtcGxl LCB0aGlzIGZ1bmN0aW9uIGhhcyB0byBiZSB1c2VkIGluIEBjb2Rle2lmdW5j fSByZXNvbHZlcnMgd2hpY2ggY2hlY2sgZm9yCitDUFUgdHlwZSB1c2luZyB0 aGUgYnVpbHRpbnMsIEBjb2Rle19fYnVpbHRpbl9jcHVfaXN9IGFuZCBAY29k ZXtfX2J1aWx0aW5fY3B1X3N1cHBvcnRzfS4KK0BzbWFsbGV4YW1wbGUKKwor c3RhdGljIHZvaWQgKCpyZXNvbHZlX21lbWNweSAodm9pZCkpICh2b2lkKQor QHsKKyAgLy8gaWZ1bmMgcmVzb2x2ZXJzIGZpcmUgYmVmb3JlIGNvbnN0cnVj dG9ycywgZXhwbGljaXRseSBjYWxsIHRoZSBpbml0CisgIC8vIGZ1bmN0aW9u LgorICBfX2J1aWx0aW5fY3B1X2luaXQgKCk7CisgIGlmIChfX2J1aWx0aW5f Y3B1X3N1cHBvcnRzICgic3NzZTMiKSkKKyAgICByZXR1cm4gc3NzZTNfbWVt Y3B5OyAvLyBzdXBlciBmYXN0IG1lbWNweSB3aXRoIHNzc2UzIGluc3RydWN0 aW9ucy4KKyAgZWxzZQorICAgIHJldHVybiBkZWZhdWx0X21lbWNweTsKK0B9 CisKK3ZvaWQgKm1lbWNweSAodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVf dCkKKyAgICAgX19hdHRyaWJ1dGVfXyAoKGlmdW5jICgicmVzb2x2ZV9tZW1j cHkiKSkpOworQGVuZCBzbWFsbGV4YW1wbGUKKworQGVuZCBkZWZ0eXBlZm4K KworQGRlZnR5cGVmbiB7QnVpbHQtaW4gRnVuY3Rpb259IGludCBfX2J1aWx0 aW5fY3B1X2lzIChjb25zdCBjaGFyICpAdmFye2NwdW5hbWV9KQorVGhpcyBm dW5jdGlvbiByZXR1cm5zIEBjb2RlezF9LCBpZiB0aGUgcnVudGltZSBjcHUg aXMgb2YgdHlwZSBAdmFye2NwdW5hbWV9CisgYW5kIHJldHVybnMgQGNvZGV7 MH0gb3RoZXJ3aXNlLiBUaGUgZm9sbG93aW5nIGNwdSBuYW1lcyBjYW4gYmUg ZGV0ZWN0ZWQ6CisKK0B0YWJsZSBAc2FtcAorQGl0ZW0gaW50ZWwKK0ludGVs IENQVS4KKworQGl0ZW0gYXRvbQorSW50ZWwgQVRPTSBDUFUuCisKK0BpdGVt IGNvcmUyCitJbnRlbCBDb3JlMiBDUFUuCisKK0BpdGVtIGNvcmVpNworSW50 ZWwgQ29yZWk3IENQVS4KKworQGl0ZW0gbmVoYWxlbQorSW50ZWwgQ29yZWk3 IE5laGFsZW0gQ1BVLgorCitAaXRlbSB3ZXN0bWVyZQorSW50ZWwgQ29yZWk3 IFdlc3RtZXJlIENQVS4KKworQGl0ZW0gc2FuZHlicmlkZ2UKK0ludGVsIENv cmVpNyBTYW5keWJyaWRnZSBDUFUuCisKK0BpdGVtIGFtZAorQU1EIENQVS4K KworQGl0ZW0gYW1kZmFtMTBoCitBTUQgZmFtaWx5IDEwaCBDUFUuCisKK0Bp dGVtIGJhcmNlbG9uYQorQU1EIGZhbWlseSAxMGggQmFyY2Vsb25hIENQVS4K KworQGl0ZW0gc2hhbmdoYWkKK0FNRCBmYW1pbHkgMTBoIFNoYW5naGFpIENQ VS4KKworQGl0ZW0gaXN0YW5idWwKK0FNRCBmYW1pbHkgMTVoIElzdGFuYnVs IENQVS4KKworQGl0ZW0gYW1kZmFtMTVoCitBTUQgZmFtaWx5IDE1aCBDUFUu CisKK0BpdGVtIGJkdmVyMQorQU1EIGZhbWlseSAxNWggQnVsbGRvemVyIHZl cnNpb24gMS4KKworQGl0ZW0gYmR2ZXIyCitBTUQgZmFtaWx5IDE1aCBCdWxs ZG96ZXIgdmVyc2lvbiAxLgorQGVuZCB0YWJsZSAKKworSGVyZSBpcyBhbiBl eGFtcGxlOgorQHNtYWxsZXhhbXBsZQoraWYgKF9fYnVpbHRpbl9jcHVfaXMg KCJjb3JlaTciKSkKKyAgQHsKKyAgICAgZG9fY29yZWk3ICgpOyAvL0NvcmVp NyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4KKyAgQH0KK2Vsc2UKKyAgQHsK KyAgICAgZG9fZ2VuZXJpYyAoKTsgLy9HZW5lcmljIGltcGxlbWVudGF0aW9u LgorICBAfSAgCitAZW5kIHNtYWxsZXhhbXBsZQorQGVuZCBkZWZ0eXBlZm4K KworQGRlZnR5cGVmbiB7QnVpbHQtaW4gRnVuY3Rpb259IGludCBfX2J1aWx0 aW5fY3B1X3N1cHBvcnRzIChjb25zdCBjaGFyICpAdmFye2ZlYXR1cmV9KQor VGhpcyBmdW5jdGlvbiByZXR1cm5zIEBjb2RlezF9LCBpZiB0aGUgcnVudGlt ZSBjcHUgc3VwcG9ydHMgQHZhcntmZWF0dXJlfQorIGFuZCByZXR1cm5zIEBj b2RlezB9IG90aGVyd2lzZS4gVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBjYW4g YmUgZGV0ZWN0ZWQ6CisKK0B0YWJsZSBAc2FtcAorQGl0ZW0gY21vdgorQ01P ViBpbnN0cnVjdGlvbi4KK0BpdGVtIG1teAorTU1YIGluc3RydWN0aW9ucy4K K0BpdGVtIHBvcGNudAorUE9QQ05UIGluc3RydWN0aW9uLgorQGl0ZW0gc3Nl CitTU0UgaW5zdHJ1Y3Rpb25zLgorQGl0ZW0gc3NlMgorU1NFMiBpbnN0cnVj dGlvbnMuCitAaXRlbSBzc2UzCitTU0UzIGluc3RydWN0aW9ucy4KK0BpdGVt IHNzc2UzCitTU1NFMyBpbnN0cnVjdGlvbnMuCitAaXRlbSBzc2U0LjEKK1NT RTQuMSBpbnN0cnVjdGlvbnMuCitAaXRlbSBzc2U0LjIKK1NTRTQuMiBpbnN0 cnVjdGlvbnMuCitAZW5kIHRhYmxlCisKK0hlcmUgaXMgYW4gZXhhbXBsZToK K0BzbWFsbGV4YW1wbGUKK2lmIChfX2J1aWx0aW5fY3B1X3N1cHBvcnRzICgi cG9wY250IikpCisgIEB7CisgICAgIGFzbSgicG9wY250ICUxLCUwIiA6ICI9 ciIoY291bnQpIDogInJtIihuKSA6ICJjYyIpOworICBAfQorZWxzZQorICBA eworICAgICBjb3VudCA9IGdlbmVyaWNfY291bnRiaXRzIChuKTsgLy9nZW5l cmljIGltcGxlbWVudGF0aW9uLgorICBAfSAgCitAZW5kIHNtYWxsZXhhbXBs ZQorQGVuZCBkZWZ0eXBlZm4KKworCiBUaGUgZm9sbG93aW5nIGJ1aWx0LWlu IGZ1bmN0aW9ucyBhcmUgbWFkZSBhdmFpbGFibGUgYnkgQG9wdGlvbnstbW1t eH0uCiBBbGwgb2YgdGhlbSBnZW5lcmF0ZSB0aGUgbWFjaGluZSBpbnN0cnVj dGlvbiB0aGF0IGlzIHBhcnQgb2YgdGhlIG5hbWUuCiAK --f46d0447f0849a039604bd423229--