From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=13.75.44.102 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1793797114; b=ZhSWxd0h1KHTxvxcoCviWQurG9+2rygu6P+9vxAZFsLqE87ItiGgDDhunUsfEw++PYbK +ul1nuvFYDw8XErU+A/OdCrQ2Oca/6AQmji/+TBAUx2EBwbkq5byd0/qNejXpjQJzc+yZ TM2WiFGZUfyvKLVhcpIxm7+YHrqNezB4nTf4zyRF4uD1/DtJShsUuiVlfkbQOVEt62wNW CckF+S0uvaX8eW+NmniG9iNiRKohecsEOVJPvWiNxG7WDbUYILx7suQuY1hN+Yrx9Tlqw +gEKov1EhZAX4+Ut52c4668lykUI6XG/rtEJhfqQXwnJXjazcjlIjAfzsw+YoiiRjig== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793797114; h=DMARC-Filter:Received:X-Originating-IP:Date:X-CM-HeaderCharset:From: To:Cc:Subject:X-Priority:X-Mailer:In-Reply-To:References: X-CM-CTRLMSGS:Content-Type:MIME-Version:Message-ID:X-Coremail-Locale: X-CM-TRANSID:X-CM-SenderInfo:X-Coremail-Antispam; bh=vb8yqx2HjGCTtpRERTCb9pp5+JTQYPaWlWmXcLpvqo4=; b=jr8vEbpTEhKJ8inzEIy2DiyyT9WP2qXKSjyvFsOfDElMQl1Rw+F9PoWWIbfysxbAo1Y4 F8oCZK5BQg3VBFDwmc0mRZoUWvqXJFoappM/dFU+4vBI3O57Bo6NS3cn0ztfz99eF6FLx c1YgbWIpKHkePll6RM4Twesn0LFClHjcXWruaFi4nI9D9Cw3uIGZL3nTyDnOEaUxMVwyB gY9v5W0Enw9J4jnNByamQcN+zOvhNogxhYSlbmlxsqumLc8ONMRZUag0bgnCyfPBxf0o9 X9bMSIhB2VSltkd07pvcuS8Y6Wru/nx6KAZfV8slCnvuAjLw376WQqPBPDFW3uzQJ1w== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none header.from=hust.edu.cn; spf=pass smtp.mailfrom=hust.edu.cn; arc=none smtp.remote-ip=13.75.44.102 Received: from azure-sdnproxy.icoremail.net (azure-sdnproxy.icoremail.net [13.75.44.102]) by smtp.subspace.kernel.org (Postfix) with ESMTP id F34A0606A337; Wed, 4 Nov 2026 12:58:31 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org F34A0606A337 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=hust.edu.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=hust.edu.cn Received: from xuhx$hust.edu.cn ( [10.12.190.107] ) by ajax-webmail-app2 (Coremail) ; Wed, 4 Nov 2026 20:58:29 +0800 (GMT+08:00) Date: Wed, 4 Nov 2026 20:58:29 +0800 (GMT+08:00) X-CM-HeaderCharset: UTF-8 From: =?UTF-8?B?5b6Q5pmX57+U?= To: heikki.krogerus@linux.intel.com Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org Subject: usb: typec: ucsi: deadlock on cros_ec unbind -- connector lock held across cancel_delayed_work_sync vs the mode-selection work's unbounded trylock polling X-Priority: 3 X-Mailer: Coremail Webmail Server Version 2025.3-cmXT6 build 20260810(6c94e3b5) Copyright (c) 2002-2026 www.mailtech.cn hust In-Reply-To: <2026102727-data-sequel-ce41@gregkh> References: <4c7f9772.192e1.1a17d5c2ed5.Coremail.xuhx@hust.edu.cn> <2026102727-data-sequel-ce41@gregkh> X-CM-CTRLMSGS: =?B?hcQlRDiH6nJ5xwDR7hwMki1N8jM= Content-Type: multipart/mixed; boundary="----=_Part_415399_2075745415.1793797109834" X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Message-ID: <2f3a4d8d.1e58f.1a1a6a3b84a.Coremail.xuhx@hust.edu.cn> X-Coremail-Locale: zh_CN X-CM-TRANSID:IQEQrMAWP3j1K+tq0KhxAA--.11325W X-CM-SenderInfo: bgsqjkayqyjmo6kx23oohg3hdfq/1tbiAQoBB2rqCWyh3AACsX X-Coremail-Antispam: 1Ur529EdanIXcx71UUUUU7IcSsGvfJ3iIAIbVAYjsxI4VWkKw CS07vEb4IE77IF4wCS07vE1I0E4x80FVAKz4kxMIAIbVAFxVCaYxvI4VCIwcAKzIAtYxBI daVFxhVjvjDU= ------=_Part_415399_2075745415.1793797109834 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 T24gY3Jvc19lYyBVQ1NJIHBsYXRmb3JtcyAoQUxUX01PREVfT1ZFUlJJREUgZmlybXdhcmUpLCB1 bmJpbmRpbmcgdGhlCnBsYXRmb3JtIGRyaXZlciBkZWFkbG9ja3M6IHVjc2lfdW5yZWdpc3Rlcl9w b3J0KCkgdGFrZXMgY29uLT5sb2NrCih1Y3NpLmM6MjAwMykgYW5kIHRoZW4gcmVhY2hlcyB0eXBl Y19tb2RlX3NlbGVjdGlvbl9kZWxldGUoKSAtPgpjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNl bC0+d29yaykgKG1vZGVfc2VsZWN0aW9uLmM6Mjc3KSwgd2hpY2gKYmxvY2tzIHdhaXRpbmcgZm9y IHRoZSBtb2RlLXNlbGVjdGlvbiB3b3JrIHRvIHJldHVybiAtLSBidXQgdGhhdCB3b3JrCm11c3Qs IGluIGl0cyBEUC9UQlQgYWN0aXZhdGUgY2FsbGJhY2tzLCBhY3F1aXJlIHRoZSB2ZXJ5IHNhbWUK Y29uLT5sb2NrIHZpYSB1Y3NpX2Nvbl9tdXRleF9sb2NrKCkgYmVmb3JlIGl0IGNhbiByZXR1cm47 IHRoZSB1bmJpbmQKcGF0aCBuZXZlciByZWZyZXNoZXMgdGhlIGNvbm5lY3RvciBzdGF0dXMsIHRo ZSBwb2xsaW5nIGNvbmRpdGlvbgpzdGF5cyB0cnVlLCBhbmQgdGhlIGxvb3AgbmV2ZXIgZXhpdHMu ICBUaGUgcG9sbGluZyBpcyB1bmJvdW5kZWQKKG1zbGVlcCgyMCkgcmV0cnkgbG9vcCwgdWNzaS5j OjIyNzItMjI3NykgYW5kIGl0cyBjb25kaXRpb24gaXMgYQpzdGFsZSBpbi1tZW1vcnkgc25hcHNo b3QgKFVDU0lfQ09OU1RBVCByZWFkcyBjb24tPnN0YXR1cyBhcyBsYXRjaGVkCmF0IHRoZSBsYXN0 IGNvbm5lY3RvciB1cGRhdGUsIHVjc2kuaDo0NTctNDU4KSAtLSBzaW5jZSB0aGUgdW5iaW5kCm5l aXRoZXIgcmVsZWFzZXMgdGhlIGxvY2sgbm9yIHVwZGF0ZXMgdGhlIHNuYXBzaG90LCB0aGUgd29y ayBzcGlucwpmb3JldmVyIGFuZCB0aGUgdW5iaW5kIHRocmVhZCB3YWl0cyBmb3JldmVyLiAgSSBy ZXByb2R1Y2VkIHRoZSBoYW5nCmRldGVybWluaXN0aWNhbGx5IG9uIGEgcHJpc3RpbmUgTGludXgg Ny4zIEtBU0FOIGtlcm5lbCB3aXRoIGEKc3RydWN0dXJhbCByZXBsaWNhIG9mIHRoZSBmb3VyIGlu Z3JlZGllbnRzIChtdXRleCArCmNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyArIHRyeWxvY2svbXNs ZWVwIHBvbGxpbmcgKyBzdGFsZSBzbmFwc2hvdCksCmFuZCBjbG9zZWQgdGhlIGxvb3Agd2l0aCB0 d28gY29udHJvbCBydW5zOiBjYW5jZWxsaW5nIGEgbWVyZWx5LXBlbmRpbmcKd29yayByZXR1cm5z IGltbWVkaWF0ZWx5LCBhbmQgYSB3b3JrIHRoYXQgZ290IGl0cyBmaXJzdCB0cnlsb2NrIGJlZm9y ZQp1bmJpbmQgZmluaXNoZXMgbm9ybWFsbHkgLS0gdGhlIGRlYWRsb2NrIGlzIGEgZ2VudWluZSBy YWNlIG9uICJ0aGUKd29yayBpcyBleGVjdXRpbmcgaXRzIGFjdGl2YXRlIGNoYWluIHdoaWxlIHVu YmluZCB0YWtlcyB0aGUgbG9jawpmaXJzdCIuICBDb25zZXF1ZW5jZXM6IHRoZSB1bmJpbmQvcm1t b2QgKG9yIGluaXQtZmFpbHVyZSByb2xsYmFjaykKaGFuZ3MgcGVybWFuZW50bHksIGEgc3lzdGVt X3dxIHdvcmtlciBpcyBsb3N0LCBhbmQgZXZlcnkgbGF0ZXIKY29udGVuZGVyIGZvciBjb24tPmxv Y2sgKGNvbm5lY3Rvci1jaGFuZ2Ugd29yaywgcG9sbCB3b3JrZXIsIHJvbGUKc3dhcCkgcGlsZXMg dXAgYmVoaW5kIGl0IC0tIFVTQi1DL0RQIGRlYWQgdW50aWwgcmVib290LiAgTm90IGEgbWVtb3J5 CnNhZmV0eSBpc3N1ZTsgYSBsaXZlbmVzcyBidWcuCgpUaGUgZGV0YWlsZWQgZGVzY3JpcHRpb246 CgoqIFRoZSBkZWFkbG9jayBwYXRoIChMaW51eCA3LjMgbGluZSBudW1iZXJzKQoKICBjcm9zX3Vj c2lfcmVtb3ZlIChjcm9zX2VjX3Vjc2kuYzozMTMtMzE5LCA6MzE3KSAtPiB1Y3NpX3VucmVnaXN0 ZXIKICAodWNzaS5jOjIzNzItMjM5NzsgOjIzOTAgb25seSBjYW5jZWxzIHRoZSBjb25uZWN0b3It Y2hhbmdlIHdvcmspIC0+CiAgdWNzaV91bnJlZ2lzdGVyX3BvcnQgKDoxOTk4LTIwMzIpOiA6MjAw MyBtdXRleF9sb2NrKCZjb24tPmxvY2spIC0+CiAgOjIwMDQgdWNzaV91bnJlZ2lzdGVyX3BhcnRu ZXIgLT4gOjEzMTctMTMxOCAtPiAoY3Jvc19lY191Y3NpLmM6MTU3KQogIHR5cGVjX21vZGVfc2Vs ZWN0aW9uX2RlbGV0ZSgpIC0+IG1vZGVfc2VsZWN0aW9uLmM6Mjc3CiAgY2FuY2VsX2RlbGF5ZWRf d29ya19zeW5jKCZzZWwtPndvcmspIC0tIHdoaWNoIGlzIGNhbmNlbF93b3JrX3N5bmMncwogIGRl bGF5ZWQgdmFyaWFudCAoa2VybmVsL3dvcmtxdWV1ZS5jOjQ2MzctNDY0MCAtPiA6NDU1MiAtPiA6 NDU2OQogIF9fZmx1c2hfd29yayh3b3JrLCB0cnVlKSwgZG9jdW1lbnRlZCAiZ3VhcmFudGVlZCB0 byBiZSBub3QgcGVuZGluZwogIG9yIGV4ZWN1dGluZyAuLi4gZXZlbiBpZiB0aGUgd29yayByZS1x dWV1ZXMgaXRzZWxmIik6IHRoZSB1bmJpbmQKICB0aHJlYWQgbm93IFdBSVRTIGZvciB0aGUgcnVu bmluZyB3b3JrLgoKICBUaGUgd29yayAobW9kZV9zZWxlY3Rpb24uYzoxMzAtMTc0KSAtPiBtb2Rl X3NlbGVjdGlvbl9hY3RpdmF0ZSgpCiAgKDoxNDgvOjE1Ni86MTYwKSAtPiA6OTUgcmVsZWFzZXMg c2VsLT5sb2NrIC0+IGRldmljZV9mb3JfZWFjaF9jaGlsZAogIC0+IHRoZSBwYXJ0bmVyIGFsdG1v ZGUncyAuYWN0aXZhdGUgKGFsdG1vZGVzL2Rpc3BsYXlwb3J0LmM6NTA0LTUyMzsKICBhbHRtb2Rl cy90aHVuZGVyYm9sdC5jOjI0Ny0yNjIpIC0+IHR5cGVjX2FsdG1vZGVfZW50ZXIvZXhpdAogIChi dXMuYzoxMjYtMTQ4LzoxNTctMTc3KSAtPiB0aGUgcG9ydC1zaWRlIG9wcyByZWdpc3RlcmVkIGJ5 IFVDU0kKICAodWNzaS5jOjQ0OS00NjMpIC0+IHVjc2lfZGlzcGxheXBvcnRfZW50ZXIvZXhpdCAv IHVjc2lfdGh1bmRlcmJvbHRfCiAgZW50ZXIvZXhpdCwgd2hvc2UgRklSU1Qgc3RhdGVtZW50IGlz IHVjc2lfY29uX211dGV4X2xvY2soKQogICh1Y3NpL2Rpc3BsYXlwb3J0LmM6NTcvOjExOTsgdWNz aS90aHVuZGVyYm9sdC5jOjg5LzoxMjIpIC0tIHRoZQogIHNhbWUgY29uLT5sb2NrIHRoZSB1bmJp bmQgdGhyZWFkIGhvbGRzLiAgVGhlIHBvbGw6CgogICAgICB3aGlsZSAoY29ubmVjdGVkICYmICFt dXRleF9sb2NrZWQpIHsKICAgICAgICAgICAgICBtdXRleF90cnlsb2NrKC4uLik7CiAgICAgICAg ICAgICAgY29ubmVjdGVkID0gVUNTSV9DT05TVEFUKGNvbiwgQ09OTkVDVEVEKTsgIC8qIHNuYXBz aG90LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1Y3NpLmg6NDU3ICovCiAgICAgICAgICAgICAgaWYgKGNvbm5lY3RlZCAmJiAhbXV0 ZXhfbG9ja2VkKSBtc2xlZXAoMjApOwogICAgICB9CgogIG5ldmVyIGV4aXRzOiB0aGUgc25hcHNo b3Qgc3RheXMgQ09OTkVDVEVEPTEgKGxhdGNoZWQgYXQgY29ubmVjdGlvbgogIHRpbWUpLCB0aGUg dW5iaW5kIHBhdGggaGFzIG5vIHVjc2lfZ2V0X2Nvbm5lY3Rvcl9zdGF0dXMoKSBjYWxsLCBhbmQK ICBtc2xlZXAgaXMgbm90IGludGVycnVwdGlibGUuICAoVGhlIERQIGFsdG1vZGUgYWN0aXZhdGUn cyBjYWJsZQogIGJyYW5jaCBpcyBub3QgYW4gZXNjYXBlOiBVQ1NJIHJlZ2lzdGVycyBubyBjYWJs ZV9vcHMsIHNvIGl0IGZhbGxzCiAgdGhyb3VnaCB0byB0aGUgc2FtZSB0eXBlY19hbHRtb2RlX2Vu dGVyLikKCiogQ29udHJvbCBydW5zICh0aGUgcmFjZSBib3VuZGFyeSwgZHluYW1pY2FsbHkgY292 ZXJlZCkKCiAgLSBXb3JrIG1lcmVseSBwZW5kaW5nICh0aW1lciBub3QgZmlyZWQpOiBjYW5jZWwg cmVtb3ZlcyBpdCBhbmQKICAgIHJldHVybnMgaW5zdGFudGx5IC0tIG5vIGRlYWRsb2NrLiAgU28g dGhlIHRyaWdnZXIgbmVlZHMgdGhlIHdvcmsKICAgIEVYRUNVVElORyBpdHMgYWN0aXZhdGUgY2hh aW4gd2hlbiB1bmJpbmQgdGFrZXMgdGhlIGxvY2s7IHRoZSB3b3JrCiAgICBydW5zIG9uIDEgcy80 IHMgcGVyaW9kcyAoY3Jvc19lY191Y3NpLmM6MzktNDEpIGFuZCBpdHMKICAgIGFjdGl2YXRlLWNo YWluIHN0YXJ0ICh0eXBlY19tdXhfc2V0IHRvIGFuIGkyYyBtdXggcHJvdmlkZXIpIHRha2VzCiAg ICBtaWxsaXNlY29uZHMgLS0gdGhlIGV4cG9zdXJlIHdpbmRvdyBpcyByZWFsLCBoaXQgcHJvYmFi aWxpdHkKICAgIG1vZGVyYXRlIHBlciB1bmJpbmQuCiAgLSBXb3JrJ3MgZmlyc3QgdHJ5bG9jayBz dWNjZWVkcyBiZWZvcmUgdW5iaW5kIHRha2VzIHRoZSBsb2NrOiB0aGUKICAgIHdvcmsgY29tcGxl dGVzIG5vcm1hbGx5LgogIC0gVGhlIG5vbi1kZWFkbG9jayBwYXRocyBleGlzdCB0b286IGEgY29u bmVjdG9yLWNoYW5nZSBkaXNjb25uZWN0CiAgICByZWZyZXNoZXMgdGhlIHN0YXR1cyB0byBkaXNj b25uZWN0ZWQgYmVmb3JlIHVucmVnaXN0ZXJpbmcKICAgICh1Y3NpLmM6MTQ2NCAtPiA6MTUxMyks IGFuZCB0aGUgcmVzdW1lLXRpbWUKICAgIHVjc2lfY2hlY2tfY29ubmVjdGlvbiAoOjEzODcgLT4g OjE0MDIpIGxpa2V3aXNlIGxldHMgdGhlIHBvbGwKICAgIHNlZSBDT05ORUNURUQ9MCBhbmQgcmV0 dXJuIC1FTk9UQ09OTiAtLSB0aGUgdW5iaW5kIHBhdGggaXMgdGhlCiAgICBvbmUgdGhhdCBkb2Vz IG5vdC4KCiogRXZpZGVuY2UgKHByaXN0aW5lIDcuMyBLQVNBTjsgbW9kdWxlIGF0dGFjaGVkKQoK ICBTdHJ1Y3R1cmFsIHJlcGxpY2Egd2l0aCBhIGhhbmRzaGFrZSBvcmNoZXN0cmF0aW9uIChob2xk IHRoZSBsb2NrIC0+CiAgc3RhcnQgdGhlIHdvcmsgLT4gZmlyc3QgZmFpbGVkIHRyeWxvY2sgb2Jz ZXJ2ZWQgLT4gY2FsbCB0aGUKICB1bmJpbmQtc2lkZSBjYW5jZWwpOgoKICAgIFRDMjogd29yayBs b29waW5nIG9uIGZhaWxlZCB0cnlsb2NrczsgdW5iaW5kIGNhbGxzIGNhbmNlbAogICAgKGV4cGVj dCBoYW5nKQogICAgLi4uIG5vICJjYW5jZWwgcmV0dXJuZWQiLCBubyAid29yayBmaW5pc2hlZCIg Li4uCiAgICAoVk0ga2lsbGVkIGJ5IHRpbWVvdXQsIGV4aXQ9MTI0IC0tIGJvdGggdGhyZWFkcyBw ZXJtYW5lbnRseQogICAgIHdhaXRpbmcpCgogIGFuZCBpdHMgbWlycm9yLWltYWdlIGNvbnRyb2wg KGNhbmNlbCBvZiBhIHBlbmRpbmctb25seSB3b3JrKQogIHJldHVybmVkIGltbWVkaWF0ZWx5IGFu ZCBjbGVhbi4gIEZpZGVsaXR5OiB0aGUgZm91ciBkZWFkbG9jawogIGluZ3JlZGllbnRzIChtdXRl eCwgY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jLCB0cnlsb2NrL21zbGVlcAogIHBvbGxpbmcsIHN0 YWxlIENPTk5FQ1RFRCBzbmFwc2hvdCkgYXJlIHJlcGxpY2F0ZWQgc3RhdGVtZW50LWJ5LQogIHN0 YXRlbWVudCBwZXIgdWNzaS5jOjIwMDMtMjAwNCAvIG1vZGVfc2VsZWN0aW9uLmM6Mjc3IC8KICB1 Y3NpLmM6MjI3Mi0yMjc3IC8gdWNzaS5oOjQ1Ny00NTg7IHRoZSB3b3JrcXVldWUgcHJpbWl0aXZl CiAgc2VtYW50aWNzIHdlcmUgdmVyaWZpZWQgaW4ta2VybmVsICh3b3JrcXVldWUuYzo0NTUyLTQ1 OTApLgoKICBNb2R1bGUgdXNhZ2U6IGluc21vZCB0eXBjcmFjZS5rbzsgYWN0aW9uPXRjMiAoaGFu ZzsgZXhwZWN0IHRoZSBWTQogIHRvIGRpZSBieSB0aW1lb3V0KSAvIGFjdGlvbj10YzJjdGwgKGNv bnRyb2w7IGNsZWFuKS4gIE9uIHJlYWwKICBoYXJkd2FyZSB0aGUgc2FtZSBzaGFwZSBpcyByZWFj aGVkIGJ5IGBybW1vZCBjcm9zX2VjX3Vjc2lgIChvcgogIHVuYmluZCBvZiB0aGUgcGxhdGZvcm0g ZHJpdmVyKSB3aGlsZSBhIERQL1RCVCBzZXNzaW9uIGlzIGFjdGl2ZS4KCiogU3VnZ2VzdGVkIGZp eCAoYW55IG9mOyBubyBwYXRjaCBhdHRhY2hlZCkKCiAgMS4gdWNzaV91bnJlZ2lzdGVyX3BvcnQo KTogcmVmcmVzaCB0aGUgY29ubmVjdG9yIHN0YXR1cyAob3IKICAgICBleHBsaWNpdGx5IGNsZWFy IHRoZSBDT05ORUNURUQgc25hcHNob3QpIEJFRk9SRSB0YWtpbmcKICAgICBjb24tPmxvY2ssIHNv IGEgY29uY3VycmVudGx5IHBvbGxlZCB3b3JrIGV4aXRzIGl0cyBsb29wOwogIDIuIGNyb3Mgc2lk ZTogbW92ZSB0eXBlY19tb2RlX3NlbGVjdGlvbl9kZWxldGUoKSBvdXQgb2YgdGhlCiAgICAgY29u LT5sb2NrIGNyaXRpY2FsIHNlY3Rpb24gKGRldGFjaCBwYXJ0bmVyLT5zZWwgdW5kZXIgdGhlIGxv Y2sKICAgICBhZ2FpbnN0IG5ldyB1cGRhdGVycywgdGhlbiB1bmxvY2sgYW5kIG9ubHkgdGhlbiBj YW5jZWwrZnJlZSk7CiAgMy4gaGFyZGVuIHVjc2lfY29uX211dGV4X2xvY2soKSB3aXRoIGEgYm91 bmRlZCB3YWl0IChlLmcuIDEgcyB0aGVuCiAgICAgLUVOT1RDT05OKSBzbyB0aGlzIGNsYXNzIG9m IGludmVydGVkIGxvY2staG9sZCBjYW5ub3Qgd2VkZ2UgdGhlCiAgICAgd29ya2VyIHBlcm1hbmVu dGx5LgoKCgogIFBsZWFzZSBrZWVwIG1lIGluIENjOyBJIGFtIG5vdCBzdWJzY3JpYmVkIHRvIHRo ZSBsaXN0cy4KCgoKUmVnYXJkcywKSGFueGlhbmcgWHUKeHVoeEBodXN0LmVkdS5jbgo= ------=_Part_415399_2075745415.1793797109834 Content-Type: text/plain; name=typcrace.c Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="typcrace.c" Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKLyoKICogdHlwY3JhY2UuYyAtIGR5 bmFtaWMgdmVyaWZpY2F0aW9uIG1vZHVsZSBmb3IgZHJpdmVycy91c2IvdHlwZWMgYXVkaXQKICog KGRvY3MvbWFudWFsLXJldmlldy1kcml2ZXJzLXVzYi10eXBlYy0yMDI2LTExLTAyLnJvdW5kMy5t ZCkKICoKICogU3RhdGVtZW50LWZhaXRoZnVsIHJlcGxpY2FzIG9mIHRoZSBhdWRpdGVkIGRyaXZl ciBzdGF0ZSBtYWNoaW5lcyAoYW54NzQxMSwKICogc3R1c2IxNjB4KSwgZHJpdmVuIHZpYSB0aGUg ZXhwb3J0ZWQgdHlwZWMgY2xhc3MgQVBJIG9uIGEgZmFrZSB0eXBlY19wb3J0LAogKiB3aXRoIG9u ZS1zaG90IGtwcm9iZSBzdGFsbHMgbWFraW5nIHRoZSBhdWRpdGVkIGludGVybGVhdmluZ3MgZGV0 ZXJtaW5pc3RpYy4KICogS2VybmVsIHNvdXJjZSB1bm1vZGlmaWVkIChidWlsZC1rYXNhbi10eXBl Yy03LjMpLgogKgogKiB0YzAgIC0gYXVkaXQgQ2FzZSAzIGludGVybGVhdmluZyAxOiBhbng3NDEx IHdvcmsgdXNlcyBhbW9kZVtdIHBvaW50ZXIKICogICAgICAgIChjaGVjay10aGVuLXVzZSwgYW54 NzQxMS5jOjYwMi02MTMpIHdoaWxlIHJlbW92ZSBmcmVlcyB0aGUgZGV2aWNlLgogKiAgICAgICAg V29yayBpcyBwYXJrZWQgYnkgYSBrcHJvYmUgYXQgaXRzIHVzZSBwb2ludAogKiAgICAgICAgKHR5 cGVjX2FsdG1vZGVfdXBkYXRlX2FjdGl2ZSkgQUZURVIgaXQgcmVhZCBhbW9kZVtpXTsgdGhlIHJl bW92ZQogKiAgICAgICAgdGhyZWFkIHVucmVnaXN0ZXJzIChmcmVlcykgdGhlIGFsdG1vZGUgZHVy aW5nIHRoZSBwYXJrOyBvbiByZXN1bWUKICogICAgICAgIHRoZSB1c2UgZGVyZWZlcmVuY2VzIGZy ZWVkIG1lbW9yeSAtPiBLQVNBTiBVQUYuCiAqIHRjMGIgLSBhdWRpdCBDYXNlIDMgaW50ZXJsZWF2 aW5nIDI6IGRvdWJsZSBkZXZpY2VfdW5yZWdpc3Rlci4gUmVtb3ZlIGlzCiAqICAgICAgICBwYXJr ZWQgYnkgYSBvbmUtc2hvdCBrcHJvYmUgYXQgdHlwZWNfdW5yZWdpc3Rlcl9hbHRtb2RlIEJFRk9S RSBpdAogKiAgICAgICAgZXhlY3V0ZXM7IHRoZSBxdWV1ZWQgd29yayB0aGVuIHVucmVnaXN0ZXJz IHRoZSBzYW1lIGFsdG1vZGUKICogICAgICAgIChkZXZpY2UgZnJlZWQpOyBvbiByZXN1bWUgcmVt b3ZlJ3MgdW5yZWdpc3RlciBydW5zIG9uIHRoZSBmcmVlZAogKiAgICAgICAgZGV2aWNlIC0+IFVB RiBpbnNpZGUgdHlwZWNfdW5yZWdpc3Rlcl9hbHRtb2RlL2NsYXNzIGNvcmUuCiAqIHRjMSAgLSBh dWRpdCBDYXNlIDQgKHN0dXNiMTYweCBmb3JtKTogaXJxIHRocmVhZCBwYXJrZWQgYnkgb25lLXNo b3Qga3Byb2JlCiAqICAgICAgICBhdCB0eXBlY191bnJlZ2lzdGVyX3BhcnRuZXIgKGhhdmluZyBz ZWVuIGNoaXAtPnBhcnRuZXIgIT0gTlVMTCk7CiAqICAgICAgICByZW1vdmUgdGhyZWFkIHRoZW4g dW5yZWdpc3RlcnMgdGhlIHNhbWUgcGFydG5lciBhbmQgdW5yZWdpc3RlcnMgdGhlCiAqICAgICAg ICBwb3J0OyBpcnEgcmVzdW1lcyAtPiB1bnJlZ2lzdGVyIG9uIGZyZWVkIHBhcnRuZXIgLT4gVUFG LgogKi8KI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAoKI2luY2x1 ZGUgPGxpbnV4L21vZHVsZS5oPgojaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgojaW5jbHVkZSA8 bGludXgvZGVsYXkuaD4KI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+CiNpbmNsdWRlIDxsaW51eC93 b3JrcXVldWUuaD4KI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KI2luY2x1ZGUgPGxpbnV4L2Nv bXBsZXRpb24uaD4KI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiNpbmNsdWRlIDxsaW51eC9zbGFi Lmg+CiNpbmNsdWRlIDxsaW51eC91c2IvdHlwZWMuaD4KI2luY2x1ZGUgPGxpbnV4L3VzYi90eXBl Y19hbHRtb2RlLmg+CgojZGVmaW5lIE1BWF9BTFRNT0RFIDQKCnN0cnVjdCB0eWNfdHlwZWMgewoJ c3RydWN0IHR5cGVjX3BvcnQgKnBvcnQ7CglzdHJ1Y3QgdHlwZWNfcGFydG5lciAqcGFydG5lcjsK CXN0cnVjdCB0eXBlY19hbHRtb2RlICphbW9kZVtNQVhfQUxUTU9ERV07Cn07CgovKiAtLS0tLS0t LS0tLS0tLS0tIGFueDc0MTEgcmVwbGljYSAoQ2FzZSAzKSAtLS0tLS0tLS0tLS0tLS0tICovCnN0 cnVjdCB0eWNfYW54IHsKCXN0cnVjdCB0eWNfdHlwZWMgdHlwZWM7CglzdHJ1Y3QgbXV0ZXggbG9j azsJCS8qIGFuYWxvZyBvZiBjdHgtPmxvY2s6IHdvcmsgc2lkZSBvbmx5ICovCglzdHJ1Y3Qgd29y a19zdHJ1Y3Qgd29yazsKCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTsKCXN0cnVjdCBjb21w bGV0aW9uIHdvcmtfaW5fdXNlOwkvKiB3b3JrIHBhcmtlZCBhdCBpdHMgdXNlIHBvaW50ICovCn07 CgpzdGF0aWMgdm9pZCBhbnhfdW5yZWdpc3Rlcl9hbHRtb2RlX3JlcGxpY2Eoc3RydWN0IHR5Y19h bnggKmN0eCkKewoJaW50IGk7CgoJLyogYW54NzQxMS5jOjUzNS01NDkgLS0gTk8gY3R4LT5sb2Nr IChhdWRpdGVkKSAqLwoJZm9yIChpID0gMDsgaSA8IE1BWF9BTFRNT0RFOyBpKyspCgkJaWYgKGN0 eC0+dHlwZWMuYW1vZGVbaV0pIHsKCQkJdHlwZWNfdW5yZWdpc3Rlcl9hbHRtb2RlKGN0eC0+dHlw ZWMuYW1vZGVbaV0pOwoJCQljdHgtPnR5cGVjLmFtb2RlW2ldID0gTlVMTDsKCQl9Cn0KCnN0YXRp YyB2b2lkIGFueF91bnJlZ2lzdGVyX3BhcnRuZXJfcmVwbGljYShzdHJ1Y3QgdHljX2FueCAqY3R4 KQp7CgkvKiBhbng3NDExLmM6NTg1LTU5MSAtLSBOTyBjdHgtPmxvY2sgKGF1ZGl0ZWQpICovCglp ZiAoY3R4LT50eXBlYy5wYXJ0bmVyKSB7CgkJdHlwZWNfdW5yZWdpc3Rlcl9wYXJ0bmVyKGN0eC0+ dHlwZWMucGFydG5lcik7CgkJY3R4LT50eXBlYy5wYXJ0bmVyID0gTlVMTDsKCX0KfQoKc3RhdGlj IGJvb2wgYW54X3VzZV9tb2RlOwkvKiB0YzA6IHdvcmsgcGFya3MgYXQgdXNlIHBvaW50ICovCnN0 YXRpYyBzdHJ1Y3QgdHljX2FueCAqZ19hbngwOwkvKiB0YzAgdGFyZ2V0IGZvciBrcHJvYmUgbG9v a3VwICovCgovKgogKiB0YzAga3Byb2JlIHRhcmdldDogdHlwZWNfYWx0bW9kZV91cGRhdGVfYWN0 aXZlIGlzIG9ubHkgcmVhY2hlZCBmcm9tIHRoZQogKiB3b3JrJ3MgdXNlIHBvaW50IGluIHRoaXMg bW9kdWxlICh0aGUgcmVtb3ZlIHRocmVhZCBuZXZlciBjYWxscyBpdCkuCiAqIFBhcmsgaGVyZSBB RlRFUiB0aGUgd29yayBoYXMgcmVhZCBhbW9kZVtpXSAoYXVkaXRlZCBjaGVjay10aGVuLXVzZSBn YXApLgogKi8Kc3RhdGljIGludCBrcF91c2VfcHJlKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBw dF9yZWdzICpyZWdzKQp7Cgl1bnNpZ25lZCBsb25nIGxvbmcgdDA7CglzdHJ1Y3QgdHljX2FueCAq Y3R4ID0gZ19hbngwOwoKCWlmICghYW54X3VzZV9tb2RlIHx8ICFjdHgpCgkJcmV0dXJuIDA7Cglh bnhfdXNlX21vZGUgPSBmYWxzZTsKCXByX2luZm8oIlRDMDogd29yayBwYXJrZWQgYXQgdXNlIHBv aW50IChhZGV2PSVweCksIHJlbW92ZSBmcmVlcyBub3dcbiIsCgkJKHZvaWQgKilyZWdzLT5kaSk7 Cgljb21wbGV0ZSgmY3R4LT53b3JrX2luX3VzZSk7Cgl0MCA9IGt0aW1lX2dldF9tb25vX2Zhc3Rf bnMoKTsKCXdoaWxlIChrdGltZV9nZXRfbW9ub19mYXN0X25zKCkgLSB0MCA8IDQwMFVMTCAqIE5T RUNfUEVSX01TRUMpCgkJY3B1X3JlbGF4KCk7Cglwcl9pbmZvKCJUQzA6IHdvcmsgcmVzdW1lcyB1 c2Ugb24gKHBvc3NpYmx5IGZyZWVkKSBhZGV2XG4iKTsKCXJldHVybiAwOwp9CgpzdGF0aWMgc3Ry dWN0IGtwcm9iZSBrcF91c2UgPSB7Cgkuc3ltYm9sX25hbWUgPSAidHlwZWNfYWx0bW9kZV91cGRh dGVfYWN0aXZlIiwKCS5wcmVfaGFuZGxlciA9IGtwX3VzZV9wcmUsCn07CgovKiB3b3JrIHJlcGxp Y2Egb2YgYW54NzQxMV93b3JrX2Z1bmMgKGFueDc0MTEuYzo5MDYtOTg0KSAqLwpzdGF0aWMgdm9p ZCBhbnhfd29ya19mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqdykKewoJc3RydWN0IHR5Y19hbngg KmN0eCA9IGNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgdHljX2FueCwgd29yayk7CglpbnQgaTsKCglt dXRleF9sb2NrKCZjdHgtPmxvY2spOwkJLyogOjkxNiAqLwoKCS8qICJ1cGRhdGVfYWx0bW9kZSIg Y2hlY2stdGhlbi11c2UgbG9vcCAoOjYwMi02MTMpICovCglmb3IgKGkgPSAwOyBpIDwgTUFYX0FM VE1PREU7IGkrKykgewoJCWlmICghY3R4LT50eXBlYy5hbW9kZVtpXSkKCQkJY29udGludWU7CgkJ cHJfaW5mbygiVEMwOiB3b3JrIHJlYWQgYW1vZGVbJWRdPSVweCBzdmlkPSUwNHgsIGNhbGxpbmcg dXBkYXRlX2FjdGl2ZVxuIiwKCQkJaSwgY3R4LT50eXBlYy5hbW9kZVtpXSwgY3R4LT50eXBlYy5h bW9kZVtpXS0+c3ZpZCk7CgkJdHlwZWNfYWx0bW9kZV91cGRhdGVfYWN0aXZlKGN0eC0+dHlwZWMu YW1vZGVbaV0sIHRydWUpOwoJfQoJLyogUE9XX09GRiBicmFuY2ggKDo5NDMtOTQ2KSAqLwoJcHJf aW5mbygiVEMwOiB3b3JrIHVucmVnaXN0ZXIgYWx0bW9kZStwYXJ0bmVyXG4iKTsKCWFueF91bnJl Z2lzdGVyX2FsdG1vZGVfcmVwbGljYShjdHgpOwoJYW54X3VucmVnaXN0ZXJfcGFydG5lcl9yZXBs aWNhKGN0eCk7CgoJbXV0ZXhfdW5sb2NrKCZjdHgtPmxvY2spOwp9CgpzdGF0aWMgaW50IGFueF9y ZW1vdmVfdGhyZWFkKHZvaWQgKmRhdGEpCnsKCXN0cnVjdCB0eWNfYW54ICpjdHggPSBkYXRhOwoK CXByX2luZm8oIlRDMCo6IHJlbW92ZSBlbnRlcnMgKGF1ZGl0ZWQgb3JkZXI6IHVucmVnaXN0ZXIg RklSU1QpXG4iKTsKCWFueF91bnJlZ2lzdGVyX2FsdG1vZGVfcmVwbGljYShjdHgpOwkvKiA6MTU2 NiAqLwoJYW54X3VucmVnaXN0ZXJfcGFydG5lcl9yZXBsaWNhKGN0eCk7CS8qIDoxNTY3ICovCglw cl9pbmZvKCJUQzAqOiByZW1vdmUgc3RvcHMgd29yayAodG9vIGxhdGUsIGF1ZGl0ZWQpXG4iKTsK CWNhbmNlbF93b3JrX3N5bmMoJmN0eC0+d29yayk7CQkvKiA6MTU3MSAqLwoJcHJfaW5mbygiVEMw KjogcmVtb3ZlIGRvbmVcbiIpOwoJcmV0dXJuIDA7Cn0KCi8qIG9uZS1zaG90IHN0YWxsIGF0IHR5 cGVjX3VucmVnaXN0ZXJfYWx0bW9kZSAodGMwYik6IHBhcmsgdGhlIEZJUlNUIGNhbGxlciAqLwpz dGF0aWMgYm9vbCBvbmVzaG90X2FybWVkOwpzdGF0aWMgc3RydWN0IGNvbXBsZXRpb24gdGNfZG9u ZV93YWl0OwoKc3RhdGljIGludCBrcF91bnJlZ19wcmUoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0 IHB0X3JlZ3MgKnJlZ3MpCnsKCXVuc2lnbmVkIGxvbmcgbG9uZyB0MDsKCglpZiAoIW9uZXNob3Rf YXJtZWQpCgkJcmV0dXJuIDA7CglvbmVzaG90X2FybWVkID0gZmFsc2U7Cglwcl9pbmZvKCJUQzBi OiByZW1vdmUgcGFya2VkIGF0IHR5cGVjX3VucmVnaXN0ZXJfYWx0bW9kZSAoYWRldj0lcHgpXG4i LAoJCSh2b2lkICopcmVncy0+ZGkpOwoJY29tcGxldGUoJnRjX2RvbmVfd2FpdCk7Cgl0MCA9IGt0 aW1lX2dldF9tb25vX2Zhc3RfbnMoKTsKCXdoaWxlIChrdGltZV9nZXRfbW9ub19mYXN0X25zKCkg LSB0MCA8IDQwMFVMTCAqIE5TRUNfUEVSX01TRUMpCgkJY3B1X3JlbGF4KCk7Cglwcl9pbmZvKCJU QzBiOiBwYXJrZWQgdW5yZWdpc3RlciByZXN1bWVzIChkZXZpY2UgbGlrZWx5IGZyZWVkKVxuIik7 CglyZXR1cm4gMDsKfQoKLyogLS0tLS0tLS0tLS0tLS0tLSBzdHVzYjE2MHggcmVwbGljYSAoQ2Fz ZSA0KSAtLS0tLS0tLS0tLS0tLS0tICovCnN0cnVjdCB0eWNfc3R1IHsKCXN0cnVjdCB0eWNfdHlw ZWMgdHlwZWM7CglzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlycV90aHJlYWQ7CglzdHJ1Y3QgY29tcGxl dGlvbiBpcnFfcGFya2VkOwp9OwoKc3RhdGljIGludCBzdHVfaXJxX3RocmVhZCh2b2lkICpkYXRh KQp7CglzdHJ1Y3QgdHljX3N0dSAqY3R4ID0gZGF0YTsKCgl3aGlsZSAoIWt0aHJlYWRfc2hvdWxk X3N0b3AoKSkgewoJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CgkJc2No ZWR1bGVfdGltZW91dChtc2Vjc190b19qaWZmaWVzKDIwKSk7CgkJaWYgKGt0aHJlYWRfc2hvdWxk X3N0b3AoKSkKCQkJYnJlYWs7CgkJLyogc3R1c2IxNjB4X2RldGFjaCg6Mzg4LTM4OSkgY2hlY2st dGhlbi11c2UgKi8KCQlpZiAoY3R4LT50eXBlYy5wYXJ0bmVyKSB7CgkJCXByX2luZm8oIlRDMTog aXJxIHNhdyBwYXJ0bmVyPSVweCwgdW5yZWdpc3RlcmluZ1xuIiwKCQkJCWN0eC0+dHlwZWMucGFy dG5lcik7CgkJCXR5cGVjX3VucmVnaXN0ZXJfcGFydG5lcihjdHgtPnR5cGVjLnBhcnRuZXIpOwoJ CQljdHgtPnR5cGVjLnBhcnRuZXIgPSBOVUxMOwoJCX0KCX0KCXJldHVybiAwOwp9CgpzdGF0aWMg aW50IHN0dV9yZW1vdmVfdGhyZWFkKHZvaWQgKmRhdGEpCnsKCXN0cnVjdCB0eWNfc3R1ICpjdHgg PSBkYXRhOwoKCXByX2luZm8oIlRDMTogcmVtb3ZlIGVudGVycyAoZGV2bS1pcnEgd2luZG93IG9w ZW4pXG4iKTsKCS8qIHN0dXNiMTYweC5jOjgwNS04MDggKi8KCWlmIChjdHgtPnR5cGVjLnBhcnRu ZXIpIHsKCQlwcl9pbmZvKCJUQzE6IHJlbW92ZSBzYXcgcGFydG5lcj0lcHgsIHVucmVnaXN0ZXJp bmdcbiIsCgkJCWN0eC0+dHlwZWMucGFydG5lcik7CgkJdHlwZWNfdW5yZWdpc3Rlcl9wYXJ0bmVy KGN0eC0+dHlwZWMucGFydG5lcik7CgkJY3R4LT50eXBlYy5wYXJ0bmVyID0gTlVMTDsKCX0KCXBy X2luZm8oIlRDMTogcmVtb3ZlIHVucmVnaXN0ZXJzIHBvcnRcbiIpOwoJdHlwZWNfdW5yZWdpc3Rl cl9wb3J0KGN0eC0+dHlwZWMucG9ydCk7CgljdHgtPnR5cGVjLnBvcnQgPSBOVUxMOwoJcHJfaW5m bygiVEMxOiByZW1vdmUgZG9uZVxuIik7CglyZXR1cm4gMDsKfQoKLyogLS0tLS0tLS0tLS0tLS0t LSBvcmNoZXN0cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0gKi8Kc3RhdGljIHN0cnVjdCB0eWNfYW54 ICpnX2FueDsKc3RhdGljIHN0cnVjdCB0eWNfc3R1ICpnX3N0dTsKCgpzdGF0aWMgc3RydWN0IGtw cm9iZSBrcF91bnJlZzsKCnN0YXRpYyBpbnQgdGNfc2V0dXBfY29tbW9uKHN0cnVjdCB0eWNfdHlw ZWMgKnQsIHN0cnVjdCBkZXZpY2UgKnBhcmVudCkKewoJc3RydWN0IHR5cGVjX2NhcGFiaWxpdHkg Y2FwID0geyB9OwoJc3RydWN0IHR5cGVjX3BhcnRuZXJfZGVzYyBwZGVzYyA9IHsgfTsKCXN0cnVj dCB0eXBlY19hbHRtb2RlX2Rlc2MgYWRlc2MgPSB7IH07CglpbnQgaTsKCgljYXAudHlwZSA9IFRZ UEVDX1BPUlRfRFJQOwoJY2FwLmRhdGEgPSBUWVBFQ19QT1JUX0RSRDsKCWNhcC5yZXZpc2lvbiA9 IFVTQl9UWVBFQ19SRVZfMV8yOwoJY2FwLmRyaXZlcl9kYXRhID0gdDsKCXQtPnBvcnQgPSB0eXBl Y19yZWdpc3Rlcl9wb3J0KHBhcmVudCwgJmNhcCk7CglpZiAoSVNfRVJSKHQtPnBvcnQpKSB7CgkJ cHJfZXJyKCJ0eXBlY19yZWdpc3Rlcl9wb3J0IGZhaWxlZDogJXBlXG4iLCB0LT5wb3J0KTsKCQly ZXR1cm4gUFRSX0VSUih0LT5wb3J0KTsKCX0KCXQtPnBhcnRuZXIgPSB0eXBlY19yZWdpc3Rlcl9w YXJ0bmVyKHQtPnBvcnQsICZwZGVzYyk7CglpZiAoSVNfRVJSKHQtPnBhcnRuZXIpKSB7CgkJcHJf ZXJyKCJ0eXBlY19yZWdpc3Rlcl9wYXJ0bmVyIGZhaWxlZDogJXBlXG4iLCB0LT5wYXJ0bmVyKTsK CQl0eXBlY191bnJlZ2lzdGVyX3BvcnQodC0+cG9ydCk7CgkJdC0+cG9ydCA9IE5VTEw7CgkJcmV0 dXJuIFBUUl9FUlIodC0+cGFydG5lcik7Cgl9Cglmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CgkJ YWRlc2Muc3ZpZCA9IDB4MTIzNCArIGk7CgkJYWRlc2MubW9kZSA9IGkgKyAxOwoJCWFkZXNjLnZk byA9IDB4ZGVhZGJlZWY7CgkJYWRlc2Mucm9sZXMgPSBUWVBFQ19QT1JUX0RSRDsKCQl0LT5hbW9k ZVtpXSA9IHR5cGVjX3BhcnRuZXJfcmVnaXN0ZXJfYWx0bW9kZSh0LT5wYXJ0bmVyLCAmYWRlc2Mp OwoJCWlmIChJU19FUlIodC0+YW1vZGVbaV0pKSB7CgkJCXByX2VycigicGFydG5lcl9yZWdpc3Rl cl9hbHRtb2RlWyVkXSBmYWlsZWQ6ICVwZVxuIiwKCQkJICAgICAgIGksIHQtPmFtb2RlW2ldKTsK CQkJdC0+YW1vZGVbaV0gPSBOVUxMOwoJCQlyZXR1cm4gLUVGQVVMVDsKCQl9Cgl9CglyZXR1cm4g MDsKfQoKc3RhdGljIGludCBydW5fdGMwKHZvaWQpCnsKCXN0cnVjdCBkZXZpY2UgKnJvb3RfZGV2 OwoJc3RydWN0IHRhc2tfc3RydWN0ICpybTsKCWludCByZXQ7CgoJcm9vdF9kZXYgPSByb290X2Rl dmljZV9yZWdpc3RlcigidHljcm9vdDAiKTsKCWlmIChJU19FUlIocm9vdF9kZXYpKQoJCXJldHVy biBQVFJfRVJSKHJvb3RfZGV2KTsKCglnX2FueCA9IGt6YWxsb2Moc2l6ZW9mKCpnX2FueCksIEdG UF9LRVJORUwpOwoJaWYgKCFnX2FueCkgewoJCXJvb3RfZGV2aWNlX3VucmVnaXN0ZXIocm9vdF9k ZXYpOwoJCXJldHVybiAtRU5PTUVNOwoJfQoJbXV0ZXhfaW5pdCgmZ19hbngtPmxvY2spOwoJaW5p dF9jb21wbGV0aW9uKCZnX2FueC0+d29ya19pbl91c2UpOwoJSU5JVF9XT1JLKCZnX2FueC0+d29y aywgYW54X3dvcmtfZnVuYyk7CglnX2FueC0+d3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtx dWV1ZSgidHljYW54d3EiKTsKCXJldCA9IHRjX3NldHVwX2NvbW1vbigmZ19hbngtPnR5cGVjLCBy b290X2Rldik7CglpZiAocmV0KQoJCWdvdG8gb3V0OwoKCXJldCA9IHJlZ2lzdGVyX2twcm9iZSgm a3BfdXNlKTsKCWlmIChyZXQpIHsKCQlwcl9lcnIoIlRDMDoga3Byb2JlKHVzZSkgZmFpbGVkICVk XG4iLCByZXQpOwoJCWdvdG8gb3V0OwoJfQoJZ19hbngwID0gZ19hbng7CglhbnhfdXNlX21vZGUg PSB0cnVlOwoKCS8qIDEuIHF1ZXVlIHdvcms7IGl0IHBhcmtzIGluc2lkZSBrcHJvYmUgYXQgaXRz IGZpcnN0IHVzZSwgaGF2aW5nCgkgKiAgICBhbHJlYWR5IHJlYWQgYW1vZGVbMF0gKGF1ZGl0ZWQg Y2hlY2stdGhlbi11c2UgZ2FwKS4gKi8KCXF1ZXVlX3dvcmsoZ19hbngtPndxLCAmZ19hbngtPndv cmspOwoJLyogMi4gd2FpdCB1bnRpbCBwYXJrZWQgKi8KCWlmICghd2FpdF9mb3JfY29tcGxldGlv bl90aW1lb3V0KCZnX2FueC0+d29ya19pbl91c2UsIG1zZWNzX3RvX2ppZmZpZXMoMjAwMCkpKSB7 CgkJcHJfZXJyKCJUQzA6IHdvcmsgbmV2ZXIgcGFya2VkOyBhYm9ydFxuIik7CgkJZ290byBvdXQ7 Cgl9CgkvKiAzLiByZW1vdmUgdGhyZWFkIGZyZWVzIGFsdG1vZGVzK3BhcnRuZXIgdW5kZXIgdGhl IHBhcmtlZCB3b3JrICovCglybSA9IGt0aHJlYWRfcnVuKGFueF9yZW1vdmVfdGhyZWFkLCBnX2Fu eCwgInR5Yy1hbnhybSIpOwoJaWYgKCFJU19FUlIocm0pKQoJCWt0aHJlYWRfc3RvcChybSk7CS8q IGpvaW5zOiByZW1vdmUgY29tcGxldGVzIGluc2lkZSB3aW5kb3cgKi8KCS8qIDQuIHdvcmsgYXV0 by1yZXN1bWVzIGFmdGVyIDQwMG1zIC0+IFVBRiAqLwoJcHJfaW5mbygiVEMwOiBSRVNVTFQgc2Vl IEtBU0FOIHJlcG9ydHMgYWJvdmVcbiIpOwoJbXNsZWVwKDMwMCk7CglhbnhfdW5yZWdpc3Rlcl9h bHRtb2RlX3JlcGxpY2EoZ19hbngpOwoJYW54X3VucmVnaXN0ZXJfcGFydG5lcl9yZXBsaWNhKGdf YW54KTsKb3V0OgoJdW5yZWdpc3Rlcl9rcHJvYmUoJmtwX3VzZSk7CglnX2FueDAgPSBOVUxMOwoJ aWYgKGdfYW54KSB7CgkJaWYgKGdfYW54LT53cSkKCQkJZGVzdHJveV93b3JrcXVldWUoZ19hbngt PndxKTsKCQlrZnJlZShnX2FueCk7CgkJZ19hbnggPSBOVUxMOwoJfQoJcm9vdF9kZXZpY2VfdW5y ZWdpc3Rlcihyb290X2Rldik7CglyZXR1cm4gMDsKfQoKc3RhdGljIGludCBydW5fdGMwYih2b2lk KQp7CglzdHJ1Y3QgZGV2aWNlICpyb290X2RldjsKCXN0cnVjdCB0YXNrX3N0cnVjdCAqcm07Cglp bnQgcmV0OwoKCXJvb3RfZGV2ID0gcm9vdF9kZXZpY2VfcmVnaXN0ZXIoInR5Y3Jvb3QwYiIpOwoJ aWYgKElTX0VSUihyb290X2RldikpCgkJcmV0dXJuIFBUUl9FUlIocm9vdF9kZXYpOwoKCWdfYW54 ID0ga3phbGxvYyhzaXplb2YoKmdfYW54KSwgR0ZQX0tFUk5FTCk7CglpZiAoIWdfYW54KSB7CgkJ cm9vdF9kZXZpY2VfdW5yZWdpc3Rlcihyb290X2Rldik7CgkJcmV0dXJuIC1FTk9NRU07Cgl9Cglt dXRleF9pbml0KCZnX2FueC0+bG9jayk7Cglpbml0X2NvbXBsZXRpb24oJnRjX2RvbmVfd2FpdCk7 CglJTklUX1dPUksoJmdfYW54LT53b3JrLCBhbnhfd29ya19mdW5jKTsKCWdfYW54LT53cSA9IGNy ZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJ0eWNhbnh3cWIiKTsKCXJldCA9IHRjX3NldHVw X2NvbW1vbigmZ19hbngtPnR5cGVjLCByb290X2Rldik7CglpZiAocmV0KQoJCWdvdG8gb3V0OwoK CWtwX3VucmVnID0gKHN0cnVjdCBrcHJvYmUpewoJCS5zeW1ib2xfbmFtZSA9ICJ0eXBlY191bnJl Z2lzdGVyX2FsdG1vZGUiLAoJCS5wcmVfaGFuZGxlciA9IGtwX3VucmVnX3ByZSwKCX07CglyZXQg PSByZWdpc3Rlcl9rcHJvYmUoJmtwX3VucmVnKTsKCWlmIChyZXQpIHsKCQlwcl9lcnIoIlRDMGI6 IGtwcm9iZSBmYWlsZWQgJWRcbiIsIHJldCk7CgkJZ290byBvdXQ7Cgl9CgoJLyogMS4gcmVtb3Zl IHRocmVhZCBwYXJrcyBpbnNpZGUga3Byb2JlIEJFRk9SRSBpdHMgdW5yZWdpc3RlciAqLwoJb25l c2hvdF9hcm1lZCA9IHRydWU7CglybSA9IGt0aHJlYWRfcnVuKGFueF9yZW1vdmVfdGhyZWFkLCBn X2FueCwgInR5Yy1hbnhybTBiIik7CglpZiAoSVNfRVJSKHJtKSkgewoJCXByX2VycigiVEMwYjog a3RocmVhZCBmYWlsZWRcbiIpOwoJCWdvdG8gb3V0OwoJfQoJLyogMi4gd2FpdCBwYXJrZWQgKi8K CWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZ0Y19kb25lX3dhaXQsIG1zZWNzX3Rv X2ppZmZpZXMoMjAwMCkpKSB7CgkJcHJfZXJyKCJUQzBiOiByZW1vdmUgbmV2ZXIgcGFya2VkXG4i KTsKCQlrdGhyZWFkX3N0b3Aocm0pOwoJCWdvdG8gb3V0OwoJfQoJLyogMy4gbm93IGxldCB0aGUg d29yayBydW46IGl0IHVucmVnaXN0ZXJzIHRoZSBzYW1lIGFsdG1vZGVzK3BhcnRuZXIKCSAqICAg IChkZXZpY2UgZnJlZWQpIHdoaWxlIHJlbW92ZSBpcyBwYXJrZWQgbWlkLXVucmVnaXN0ZXIgKi8K CXF1ZXVlX3dvcmsoZ19hbngtPndxLCAmZ19hbngtPndvcmspOwoJbXNsZWVwKDEwMCk7CgkvKiA0 LiByZW1vdmUgcmVzdW1lcyAtPiB1bnJlZ2lzdGVyIG9uIGZyZWVkIGRldmljZSAqLwoJcHJfaW5m bygiVEMwYjogcmVtb3ZlIHJlc3VtZXMgYXQgfjMwMG1zXG4iKTsKCW1zbGVlcCg3MDApOwkJCS8q IGxldCBldmVyeXRoaW5nIHNldHRsZSAqLwoJY2FuY2VsX3dvcmtfc3luYygmZ19hbngtPndvcmsp OwoJcHJfaW5mbygiVEMwYjogUkVTVUxUIHNlZSBLQVNBTiByZXBvcnRzIGFib3ZlXG4iKTsKb3V0 OgoJdW5yZWdpc3Rlcl9rcHJvYmUoJmtwX3VucmVnKTsKCWlmIChnX2FueCkgewoJCWlmIChnX2Fu eC0+d3EpCgkJCWRlc3Ryb3lfd29ya3F1ZXVlKGdfYW54LT53cSk7CgkJa2ZyZWUoZ19hbngpOwoJ CWdfYW54ID0gTlVMTDsKCX0KCXJvb3RfZGV2aWNlX3VucmVnaXN0ZXIocm9vdF9kZXYpOwoJcmV0 dXJuIDA7Cn0KCnN0YXRpYyBpbnQga3BfcGFya19wcmUoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0 IHB0X3JlZ3MgKnJlZ3MpCnsKCXVuc2lnbmVkIGxvbmcgbG9uZyB0MDsKCglpZiAoIW9uZXNob3Rf YXJtZWQpCgkJcmV0dXJuIDA7CglvbmVzaG90X2FybWVkID0gZmFsc2U7Cglwcl9pbmZvKCJUQzE6 IGlycSB0aHJlYWQgcGFya2VkIGF0IHR5cGVjX3VucmVnaXN0ZXJfcGFydG5lciAocGFydG5lcj0l cHgpXG4iLAoJCSh2b2lkICopcmVncy0+ZGkpOwoJY29tcGxldGUoJnRjX2RvbmVfd2FpdCk7Cgl0 MCA9IGt0aW1lX2dldF9tb25vX2Zhc3RfbnMoKTsKCXdoaWxlIChrdGltZV9nZXRfbW9ub19mYXN0 X25zKCkgLSB0MCA8IDQwMFVMTCAqIE5TRUNfUEVSX01TRUMpCgkJY3B1X3JlbGF4KCk7Cglwcl9p bmZvKCJUQzE6IGlycSByZXN1bWVzIHVucmVnaXN0ZXIgKHBhcnRuZXIgbGlrZWx5IGZyZWVkKVxu Iik7CglyZXR1cm4gMDsKfQoKc3RhdGljIGludCBydW5fdGMxKHZvaWQpCnsKCXN0cnVjdCBkZXZp Y2UgKnJvb3RfZGV2OwoJaW50IHJldDsKCglyb290X2RldiA9IHJvb3RfZGV2aWNlX3JlZ2lzdGVy KCJ0eWNyb290MSIpOwoJaWYgKElTX0VSUihyb290X2RldikpCgkJcmV0dXJuIFBUUl9FUlIocm9v dF9kZXYpOwoKCWdfc3R1ID0ga3phbGxvYyhzaXplb2YoKmdfc3R1KSwgR0ZQX0tFUk5FTCk7Cglp ZiAoIWdfc3R1KSB7CgkJcm9vdF9kZXZpY2VfdW5yZWdpc3Rlcihyb290X2Rldik7CgkJcmV0dXJu IC1FTk9NRU07Cgl9Cglpbml0X2NvbXBsZXRpb24oJnRjX2RvbmVfd2FpdCk7Cglpbml0X2NvbXBs ZXRpb24oJmdfc3R1LT5pcnFfcGFya2VkKTsKCXJldCA9IHRjX3NldHVwX2NvbW1vbigmZ19zdHUt PnR5cGVjLCByb290X2Rldik7CglpZiAocmV0KQoJCWdvdG8gb3V0OwoKCWtwX3VucmVnID0gKHN0 cnVjdCBrcHJvYmUpewoJCS5zeW1ib2xfbmFtZSA9ICJ0eXBlY191bnJlZ2lzdGVyX3BhcnRuZXIi LAoJCS5wcmVfaGFuZGxlciA9IGtwX3BhcmtfcHJlLAoJfTsKCXJldCA9IHJlZ2lzdGVyX2twcm9i ZSgma3BfdW5yZWcpOwoJaWYgKHJldCkgewoJCXByX2VycigiVEMxOiBrcHJvYmUgZmFpbGVkICVk XG4iLCByZXQpOwoJCWdvdG8gb3V0OwoJfQoKCS8qIDEuIGlycSB0aHJlYWQgcGFya3MgYXQgaXRz IHVucmVnaXN0ZXIgKHBhcnRuZXIgc3RpbGwgYWxpdmUpICovCglvbmVzaG90X2FybWVkID0gdHJ1 ZTsKCWdfc3R1LT5pcnFfdGhyZWFkID0ga3RocmVhZF9ydW4oc3R1X2lycV90aHJlYWQsIGdfc3R1 LCAidHljLXN0dWlycSIpOwoJaWYgKElTX0VSUihnX3N0dS0+aXJxX3RocmVhZCkpIHsKCQlnX3N0 dS0+aXJxX3RocmVhZCA9IE5VTEw7CgkJZ290byBvdXQ7Cgl9CglpZiAoIXdhaXRfZm9yX2NvbXBs ZXRpb25fdGltZW91dCgmdGNfZG9uZV93YWl0LCBtc2Vjc190b19qaWZmaWVzKDIwMDApKSkgewoJ CXByX2VycigiVEMxOiBpcnEgbmV2ZXIgcGFya2VkXG4iKTsKCQlnb3RvIG91dDsKCX0KCS8qIDIu IHJlbW92ZSBzZXF1ZW5jZSBpbmxpbmUgb24gdGhlIGluc21vZCB0aHJlYWQgKHBhcnRuZXIgc3Rp bGwKCSAqICAgIGFsaXZlIC0+IHVucmVnaXN0ZXIgZnJlZXMgaXQsIHRoZW4gcG9ydCk7IHBhcmtl ZCBpcnEgdGhyZWFkIGlzCgkgKiAgICBvbiBhbm90aGVyIENQVSAqLwoJc3R1X3JlbW92ZV90aHJl YWQoZ19zdHUpOwoJLyogMy4gaXJxIHJlc3VtZXMgLT4gdW5yZWdpc3RlciBvbiBmcmVlZCBwYXJ0 bmVyICovCglwcl9pbmZvKCJUQzE6IFJFU1VMVCBzZWUgS0FTQU4gcmVwb3J0cyBhYm92ZVxuIik7 Cgltc2xlZXAoMzAwKTsKb3V0OgoJdW5yZWdpc3Rlcl9rcHJvYmUoJmtwX3VucmVnKTsKCWlmIChn X3N0dSkgewoJCWlmIChnX3N0dS0+aXJxX3RocmVhZCkKCQkJa3RocmVhZF9zdG9wKGdfc3R1LT5p cnFfdGhyZWFkKTsKCQlrZnJlZShnX3N0dSk7CgkJZ19zdHUgPSBOVUxMOwoJfQoJcm9vdF9kZXZp Y2VfdW5yZWdpc3Rlcihyb290X2Rldik7CglyZXR1cm4gMDsKfQoKLyogLS0tLS0tLS0tLS0tLS0t LSB0YzI6IENhc2UgMS1CIGRlYWRsb2NrIHN0cnVjdHVyZSByZXBsaWNhIC0tLS0tLS0tLS0tLS0t LS0KICogRmFpdGhmdWwgc3RydWN0dXJlIHJlcGxpY2Egb2YgdGhlIGF1ZGl0ZWQgVUNTSSB1bmJp bmQgZGVhZGxvY2s6CiAqICAgLSB1bmJpbmQgdGhyZWFkIGhvbGRzICJjb24tPmxvY2siIGFuZCBj YWxscyBjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoKQogKiAgICAgKHVjc2kuYzoyMDAzLTIwMDQg LT4gbW9kZV9zZWxlY3Rpb24uYzoyNzcpOwogKiAgIC0gdGhlIG1vZGUtc2VsZWN0aW9uIHdvcmss IGluc2lkZSBpdHMgYWN0aXZhdGUgd2luZG93LCBtdXN0IHRha2UgdGhlCiAqICAgICBzYW1lIGxv Y2sgdmlhIHRoZSB1Y3NpX2Nvbl9tdXRleF9sb2NrKCkgdHJ5bG9jayBsb29wIHdob3NlIGV4aXQK ICogICAgIGNvbmRpdGlvbiBpcyB0aGUgU1RBTEUgY29uLT5zdGF0dXMgQ09OTkVDVEVEIHNuYXBz aG90CiAqICAgICAodWNzaS5jOjIyNzItMjI3NzsgdWNzaS5oOjQ1NyByZWFkcyAtPnN0YXR1cywg bmV2ZXIgcmVmcmVzaGVkIG9uIHRoZQogKiAgICAgdW5iaW5kIHBhdGgpLgogKiBFeHBlY3RlZCBy ZXN1bHQ6IGJvdGggc2lkZXMgcGFyayBmb3JldmVyOyB0aGUgVk0gaGFuZ3MgdW50aWwgdGltZW91 dC4KICovCnN0cnVjdCB0eWNfZGVhZCB7CglzdHJ1Y3QgbXV0ZXggbG9jazsJCS8qIGNvbi0+bG9j ayBhbmFsb2cgKi8KCWJvb2wgY29ubmVjdGVkX3NuYXBzaG90OwkvKiBjb24tPnN0YXR1cyBDT05O RUNURUQgYml0IChzdGFsZSkgKi8KCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKCXN0cnVjdCBj b21wbGV0aW9uIGluX2xvb3A7CS8qIGhhbmRzaGFrZTogd29yayBpbnNpZGUgdHJ5bG9jayBsb29w ICovCglib29sIGN0bDsJCQkvKiBjdGw9dHJ1ZTogbG9jayBmaXJzdCwgcXVldWUgbGF0ZXIgKi8K fTsKCnN0YXRpYyB2b2lkIGRlYWRfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpCnsKCXN0 cnVjdCB0eWNfZGVhZCAqZCA9IGNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgdHljX2RlYWQsIHdvcmsu d29yayk7Cglib29sIGxvY2tlZCA9IGZhbHNlOwoKCXByX2luZm8oIlRDMjogd29yayBlbnRlcmVk IGFjdGl2YXRlIHdpbmRvdywgbmVlZHMgY29uLT5sb2NrXG4iKTsKCS8qIGZpcnN0IHRyeWxvY2sg ZmFpbHM6IHVuYmluZCBhbHJlYWR5IGhvbGRzIHRoZSBsb2NrICovCglsb2NrZWQgPSBtdXRleF90 cnlsb2NrKCZkLT5sb2NrKSAhPSAwOwoJaWYgKCFsb2NrZWQpCgkJY29tcGxldGUoJmQtPmluX2xv b3ApOwoJLyogdWNzaV9jb25fbXV0ZXhfbG9jaygpIGxvb3AsIHVjc2kuYzoyMjcyLTIyNzcsIHZl cmJhdGltIHNoYXBlICovCgl3aGlsZSAoZC0+Y29ubmVjdGVkX3NuYXBzaG90ICYmICFsb2NrZWQp IHsKCQlsb2NrZWQgPSBtdXRleF90cnlsb2NrKCZkLT5sb2NrKSAhPSAwOwoJCWlmIChkLT5jb25u ZWN0ZWRfc25hcHNob3QgJiYgIWxvY2tlZCkgewoJCQltc2xlZXAoMjApOwoJCX0KCX0KCWlmIChs b2NrZWQpCgkJbXV0ZXhfdW5sb2NrKCZkLT5sb2NrKTsKCXByX2luZm8oIlRDMjogd29yayBmaW5p c2hlZFxuIik7Cn0KCi8qIGF1ZGl0ZWQgaW50ZXJsZWF2aW5nOiB3b3JrIGVudGVycyB0aGUgbG9v cCBmaXJzdCwgdW5iaW5kIHRoZW4gdGFrZXMgdGhlCiAqIGxvY2sgYW5kIGNhbmNlbHMgLS0gZXhw ZWN0ZWQgcGVybWFuZW50IGhhbmcgKFZNIGtpbGxlZCBieSB0aW1lb3V0KS4gKi8Kc3RhdGljIGlu dCBydW5fdGMyKHZvaWQpCnsKCXN0cnVjdCB0eWNfZGVhZCAqZDsKCglkID0ga3phbGxvYyhzaXpl b2YoKmQpLCBHRlBfS0VSTkVMKTsKCWlmICghZCkKCQlyZXR1cm4gLUVOT01FTTsKCW11dGV4X2lu aXQoJmQtPmxvY2spOwoJaW5pdF9jb21wbGV0aW9uKCZkLT5pbl9sb29wKTsKCWQtPmNvbm5lY3Rl ZF9zbmFwc2hvdCA9IHRydWU7CS8qIGNhYmxlIGNvbm5lY3RlZCBzbmFwc2hvdCAqLwoJZC0+Y3Rs ID0gZmFsc2U7CglJTklUX0RFTEFZRURfV09SSygmZC0+d29yaywgZGVhZF93b3JrX2ZuKTsKCS8q IGF1ZGl0ZWQgb3JkZXI6IHVuYmluZCBob2xkcyBjb24tPmxvY2sgRklSU1QsIHdvcmsgc3RhcnRz IGFuZAoJICogZmFpbHMgaXRzIHRyeWxvY2tzIHdoaWxlIHRoZSBsb2NrIHN0YXlzIGhlbGQgKi8K CW11dGV4X2xvY2soJmQtPmxvY2spOwoJcHJfaW5mbygiVEMyOiB1bmJpbmQgaG9sZHMgY29uLT5s b2NrOyBzY2hlZHVsaW5nIHdvcmtcbiIpOwoJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkLT53b3Jr LCAwKTsKCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZkLT5pbl9sb29wLCBtc2Vj c190b19qaWZmaWVzKDIwMDApKSkgewoJCXByX2VycigiVEMyOiB3b3JrIG5ldmVyIGVudGVyZWQg bG9vcFxuIik7CgkJbXV0ZXhfdW5sb2NrKCZkLT5sb2NrKTsKCQlrZnJlZShkKTsKCQlyZXR1cm4g LUVUSU1FRE9VVDsKCX0KCXByX2luZm8oIlRDMjogd29yayBsb29waW5nIG9uIGZhaWxlZCB0cnls b2NrczsgdW5iaW5kIGNhbGxzIGNhbmNlbCAoZXhwZWN0IGhhbmcpXG4iKTsKCWNhbmNlbF9kZWxh eWVkX3dvcmtfc3luYygmZC0+d29yayk7CS8qIGF1ZGl0ZWQgaGFuZyAqLwoJcHJfaW5mbygiVEMy OiBjYW5jZWwgcmV0dXJuZWQgKHNob3VsZCBuZXZlciBwcmludClcbiIpOwoJbXV0ZXhfdW5sb2Nr KCZkLT5sb2NrKTsKCWtmcmVlKGQpOwoJcmV0dXJuIDA7Cn0KCi8qIGNvbnRyb2w6IHVuYmluZCB0 YWtlcyB0aGUgbG9jayBCRUZPUkUgdGhlIHdvcmsgZXZlciBydW5zOyBjYW5jZWwoKSBraWxscwog KiB0aGUgcGVuZGluZyB0aW1lciAtLSBubyBkZWFkbG9jayAoYXVkaXRlZCBlc2NhcGUtYnJhbmNo IDEpLiAqLwpzdGF0aWMgaW50IHJ1bl90YzJjdGwodm9pZCkKewoJc3RydWN0IHR5Y19kZWFkICpk OwoKCWQgPSBremFsbG9jKHNpemVvZigqZCksIEdGUF9LRVJORUwpOwoJaWYgKCFkKQoJCXJldHVy biAtRU5PTUVNOwoJbXV0ZXhfaW5pdCgmZC0+bG9jayk7Cglpbml0X2NvbXBsZXRpb24oJmQtPmlu X2xvb3ApOwoJZC0+Y29ubmVjdGVkX3NuYXBzaG90ID0gdHJ1ZTsKCWQtPmN0bCA9IHRydWU7CglJ TklUX0RFTEFZRURfV09SSygmZC0+d29yaywgZGVhZF93b3JrX2ZuKTsKCgltdXRleF9sb2NrKCZk LT5sb2NrKTsKCXByX2luZm8oIlRDMkNUTDogdW5iaW5kIGhvbGRzIGxvY2sgZmlyc3QsIHF1ZXVl aW5nIHdvcmtcbiIpOwoJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkLT53b3JrLCBtc2Vjc190b19q aWZmaWVzKDUwKSk7CgljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmQtPndvcmspOwkvKiBwZW5k aW5nIC0+IGtpbGxlZCAqLwoJcHJfaW5mbygiVEMyQ1RMOiBjYW5jZWwgcmV0dXJuZWQgKGV4cGVj dGVkLCBwZW5kaW5nIGJyYW5jaClcbiIpOwoJbXV0ZXhfdW5sb2NrKCZkLT5sb2NrKTsKCW1zbGVl cCgyMDApOwoJa2ZyZWUoZCk7CglyZXR1cm4gMDsKfQoKLyogLS0tLS0tLS0tLS0tLS0tLSB0Y25h dDogbmF0dXJhbCBoYW1tZXJpbmcgKG5vIHByb2JlcykgLS0tLS0tLS0tLS0tLS0tLSAqLwpzdGF0 aWMgaW50IHRjbmF0X3JvdW5kcyA9IDEwMDA7Cm1vZHVsZV9wYXJhbSh0Y25hdF9yb3VuZHMsIGlu dCwgMDQ0NCk7CgpzdGF0aWMgaW50IHJ1bl90Y25hdCh2b2lkKQp7CglzdHJ1Y3QgZGV2aWNlICpy b290X2RldjsKCWludCByb3VuZDsKCglmb3IgKHJvdW5kID0gMDsgcm91bmQgPCB0Y25hdF9yb3Vu ZHM7IHJvdW5kKyspIHsKCQlyb290X2RldiA9IHJvb3RfZGV2aWNlX3JlZ2lzdGVyKCJ0eWNyb290 bmF0Iik7CgkJaWYgKElTX0VSUihyb290X2RldikpCgkJCXJldHVybiBQVFJfRVJSKHJvb3RfZGV2 KTsKCQlnX2FueCA9IGt6YWxsb2Moc2l6ZW9mKCpnX2FueCksIEdGUF9LRVJORUwpOwoJCWlmICgh Z19hbngpIHsKCQkJcm9vdF9kZXZpY2VfdW5yZWdpc3Rlcihyb290X2Rldik7CgkJCXJldHVybiAt RU5PTUVNOwoJCX0KCQltdXRleF9pbml0KCZnX2FueC0+bG9jayk7CgkJSU5JVF9XT1JLKCZnX2Fu eC0+d29yaywgYW54X3dvcmtfZnVuYyk7CgkJZ19hbngtPndxID0gY3JlYXRlX3NpbmdsZXRocmVh ZF93b3JrcXVldWUoInR5Y25hdHdxIik7CgkJaWYgKHRjX3NldHVwX2NvbW1vbigmZ19hbngtPnR5 cGVjLCByb290X2RldikpIHsKCQkJZGVzdHJveV93b3JrcXVldWUoZ19hbngtPndxKTsKCQkJa2Zy ZWUoZ19hbngpOwoJCQlnX2FueCA9IE5VTEw7CgkJCXJvb3RfZGV2aWNlX3VucmVnaXN0ZXIocm9v dF9kZXYpOwoJCQlyZXR1cm4gLUVGQVVMVDsKCQl9CgkJLyogbmF0dXJhbCByYWNlOiBxdWV1ZSB3 b3JrLCB0aGVuIGltbWVkaWF0ZWx5IHJlbW92ZSAqLwoJCXF1ZXVlX3dvcmsoZ19hbngtPndxLCAm Z19hbngtPndvcmspOwoJCWFueF9yZW1vdmVfdGhyZWFkKGdfYW54KTsKCQljYW5jZWxfd29ya19z eW5jKCZnX2FueC0+d29yayk7CgkJZGVzdHJveV93b3JrcXVldWUoZ19hbngtPndxKTsKCQlrZnJl ZShnX2FueCk7CgkJZ19hbnggPSBOVUxMOwoJCXJvb3RfZGV2aWNlX3VucmVnaXN0ZXIocm9vdF9k ZXYpOwoJCWlmICghKHJvdW5kICUgMTAwKSkKCQkJcHJfaW5mbygiVENOQVQ6IHJvdW5kICVkIGRv bmVcbiIsIHJvdW5kKTsKCX0KCXByX2luZm8oIlRDTkFUOiAlZCByb3VuZHMgZG9uZSAoY2hlY2sg ZG1lc2cgZm9yIEtBU0FOIHJlcG9ydHMpXG4iLAoJCXRjbmF0X3JvdW5kcyk7CglyZXR1cm4gMDsK fQoKLyogLS0tLS0tLS0tLS0tLS0tLSBtb2R1bGUgcGFyYW1zICYgZW50cnkgLS0tLS0tLS0tLS0t LS0tLSAqLwpzdGF0aWMgY2hhciAqYWN0aW9uID0gInN0YXR1cyI7Cm1vZHVsZV9wYXJhbShhY3Rp b24sIGNoYXJwLCAwNDQ0KTsKTU9EVUxFX1BBUk1fREVTQyhhY3Rpb24sICJ0YzB8dGMwYnx0YzF8 dGMyfHRjbmF0fHN0YXR1cyIpOwoKc3RhdGljIGludCB0eWNfcnVuX2FjdGlvbih2b2lkKQp7Cglp ZiAoIXN0cmNtcChhY3Rpb24sICJ0YzAiKSkKCQlyZXR1cm4gcnVuX3RjMCgpOwoJaWYgKCFzdHJj bXAoYWN0aW9uLCAidGMwYiIpKQoJCXJldHVybiBydW5fdGMwYigpOwoJaWYgKCFzdHJjbXAoYWN0 aW9uLCAidGMxIikpCgkJcmV0dXJuIHJ1bl90YzEoKTsKCWlmICghc3RyY21wKGFjdGlvbiwgInRj MiIpKQoJCXJldHVybiBydW5fdGMyKCk7CglpZiAoIXN0cmNtcChhY3Rpb24sICJ0YzJjdGwiKSkK CQlyZXR1cm4gcnVuX3RjMmN0bCgpOwoJaWYgKCFzdHJjbXAoYWN0aW9uLCAidGNuYXQiKSkKCQly ZXR1cm4gcnVuX3RjbmF0KCk7Cglwcl9pbmZvKCJubyBhY3Rpb24sIGRvbmVcbiIpOwoJcmV0dXJu IDA7Cn0KCnN0YXRpYyBpbnQgX19pbml0IHR5Y19pbml0KHZvaWQpCnsKCXByX2luZm8oImFjdGlv bj0lc1xuIiwgYWN0aW9uKTsKCXJldHVybiB0eWNfcnVuX2FjdGlvbigpOwp9Cm1vZHVsZV9pbml0 KHR5Y19pbml0KTsKCnN0YXRpYyB2b2lkIF9fZXhpdCB0eWNfZXhpdCh2b2lkKQp7Cglwcl9pbmZv KCJleGl0XG4iKTsKfQptb2R1bGVfZXhpdCh0eWNfZXhpdCk7Ck1PRFVMRV9MSUNFTlNFKCJHUEwi KTsK ------=_Part_415399_2075745415.1793797109834--