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=-6.5 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MIME_BASE64_TEXT,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS 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 8203CC10F27 for ; Wed, 11 Mar 2020 12:44:17 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 3ED0821655 for ; Wed, 11 Mar 2020 12:44:17 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="L1Vf9wn1" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3ED0821655 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:51174 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jC0ie-0003f3-CM for qemu-devel@archiver.kernel.org; Wed, 11 Mar 2020 08:44:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47092) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jC0g8-0007Zd-Hd for qemu-devel@nongnu.org; Wed, 11 Mar 2020 08:41:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jC0g5-0000Pn-Im for qemu-devel@nongnu.org; Wed, 11 Mar 2020 08:41:40 -0400 Received: from us-smtp-1.mimecast.com ([205.139.110.61]:43531 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jC0g5-0000P0-DC for qemu-devel@nongnu.org; Wed, 11 Mar 2020 08:41:37 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1583930497; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=PNSjL+Si7ga0B/Oz2LGeXrGFMipVtA0Gc2ySjSbpi4k=; b=L1Vf9wn1dXl9Os/CtElYGFPH0M/2fUCWN3KSD21paGdx5RuMpouzk48N0PoRH+Bslu3Thd G4Y97sk/HKHrvUkEeAUwFcuNcNmuFHDQvDXEkgdzTsHKarI3gBlkuH7fRJ2b0D/foFJtZS uMSRwht03viFLKSB2LFWDf8c6vQ7N8M= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-440-7_8NW8MWOVe5ta70OuR9wg-1; Wed, 11 Mar 2020 08:41:15 -0400 X-MC-Unique: 7_8NW8MWOVe5ta70OuR9wg-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 89407100550D; Wed, 11 Mar 2020 12:41:14 +0000 (UTC) Received: from localhost (unknown [10.36.118.127]) by smtp.corp.redhat.com (Postfix) with ESMTP id 09043100164D; Wed, 11 Mar 2020 12:41:10 +0000 (UTC) From: Stefan Hajnoczi To: qemu-devel@nongnu.org Subject: [PULL 5/9] aio-posix: extract ppoll(2) and epoll(7) fd monitoring Date: Wed, 11 Mar 2020 12:40:41 +0000 Message-Id: <20200311124045.277969-6-stefanha@redhat.com> In-Reply-To: <20200311124045.277969-1-stefanha@redhat.com> References: <20200311124045.277969-1-stefanha@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: base64 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 205.139.110.61 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Fam Zheng , Peter Maydell , qemu-block@nongnu.org, Max Reitz , Stefan Hajnoczi , Paolo Bonzini , Kevin Wolf Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" VGhlIHBwb2xsKDIpIGFuZCBlcG9sbCg3KSBmaWxlIGRlc2NyaXB0b3IgbW9uaXRvcmluZyBpbXBs ZW1lbnRhdGlvbnMgYXJlCm1peGVkIHdpdGggdGhlIGNvcmUgdXRpbC9haW8tcG9zaXguYyBjb2Rl LiAgQmVmb3JlIGFkZGluZyBhbm90aGVyCmltcGxlbWVudGF0aW9uIGZvciBMaW51eCBpb191cmlu ZywgZXh0cmFjdCBvdXQgdGhlIGV4aXN0aW5nCm9uZXMgc28gdGhlcmUgaXMgYSBjbGVhciBpbnRl cmZhY2UgYW5kIHRoZSBjb3JlIGNvZGUgaXMgc2ltcGxlci4KClRoZSBuZXcgaW50ZXJmYWNlIGlz IEFpb0NvbnRleHQtPmZkbW9uX29wcywgYSBwb2ludGVyIHRvIGEgRkRNb25PcHMKc3RydWN0LiAg U2VlIHRoZSBwYXRjaCBmb3IgZGV0YWlscy4KClNlbWFudGljIGNoYW5nZXM6CjEuIHBwb2xsKDIp IG5vdyByZWZsZWN0cyBldmVudHMgZnJvbSBwb2xsZmRzW10gYmFjayBpbnRvIEFpb0hhbmRsZXJz CiAgIHdoaWxlIHdlJ3JlIHN0aWxsIG9uIHRoZSBjbG9jayBmb3IgYWRhcHRpdmUgcG9sbGluZy4g IFRoaXMgd2FzCiAgIGFscmVhZHkgaGFwcGVuaW5nIGZvciBlcG9sbCg3KSwgc28gaWYgaXQncyBy ZWFsbHkgYW4gaXNzdWUgdGhlbiB3ZSdsbAogICBuZWVkIHRvIGZpeCBib3RoIGluIHRoZSBmdXR1 cmUuCjIuIGVwb2xsKDcpJ3MgZmFsbGJhY2sgdG8gcHBvbGwoMikgd2hpbGUgZXh0ZXJuYWwgZXZl bnRzIGFyZSBkaXNhYmxlZAogICB3YXMgYnJva2VuIHdoZW4gdGhlIG51bWJlciBvZiBmZHMgZXhj ZWVkZWQgdGhlIGVwb2xsKDcpIHVwZ3JhZGUKICAgdGhyZXNob2xkLiAgSSBndWVzcyB0aGlzIGNv ZGUgcGF0aCBzaW1wbHkgd2Fzbid0IHRlc3RlZCBhbmQgbm8gb25lCiAgIG5vdGljZWQgdGhlIGJ1 Zy4gIEkgZGlkbid0IGdvIG91dCBvZiBteSB3YXkgdG8gZml4IGl0IGJ1dCB0aGUgY29ycmVjdAog ICBjb2RlIGlzIHNpbXBsZXIgdGhhbiBwcmVzZXJ2aW5nIHRoZSBidWcuCgpJIGFsc28gdG9vayBz b21lIGxpYmVydGllcyBpbiByZW1vdmluZyB0aGUgdW5uZWNlc3NhcnkKQWlvQ29udGV4dC0+ZXBv bGxfYXZhaWxhYmxlIChqdXN0IGNoZWNrIEFpb0NvbnRleHQtPmVwb2xsZmQgIT0gLTEKaW5zdGVh ZCkgYW5kIEFpb0NvbnRleHQtPmVwb2xsX2VuYWJsZWQgKGl0J3MgaW1wbGljaXQgaWYgb3VyCkFp b0NvbnRleHQtPmZkbW9uX29wcyBjYWxsYmFja3MgYXJlIGJlaW5nIGludm9rZWQpIGZpZWxkcy4K ClNpZ25lZC1vZmYtYnk6IFN0ZWZhbiBIYWpub2N6aSA8c3RlZmFuaGFAcmVkaGF0LmNvbT4KTGlu azogaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvci8yMDIwMDMwNTE3MDgwNi4xMzEzMjQ1LTQtc3Rl ZmFuaGFAcmVkaGF0LmNvbQpNZXNzYWdlLUlkOiA8MjAyMDAzMDUxNzA4MDYuMTMxMzI0NS00LXN0 ZWZhbmhhQHJlZGhhdC5jb20+Ci0tLQogTUFJTlRBSU5FUlMgICAgICAgICB8ICAgMiArCiBpbmNs dWRlL2Jsb2NrL2Fpby5oIHwgIDM2ICsrKysrLQogdXRpbC9NYWtlZmlsZS5vYmpzICB8ICAgMiAr CiB1dGlsL2Fpby1wb3NpeC5jICAgIHwgMjg2ICsrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCiB1dGlsL2Fpby1wb3NpeC5oICAgIHwgIDYxICsrKysrKysrKysKIHV0 aWwvZmRtb24tZXBvbGwuYyAgfCAxNTEgKysrKysrKysrKysrKysrKysrKysrKysKIHV0aWwvZmRt b24tcG9sbC5jICAgfCAxMDQgKysrKysrKysrKysrKysrKwogNyBmaWxlcyBjaGFuZ2VkLCAzNjYg aW5zZXJ0aW9ucygrKSwgMjc2IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHV0aWwv YWlvLXBvc2l4LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCB1dGlsL2ZkbW9uLWVwb2xsLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCB1dGlsL2ZkbW9uLXBvbGwuYwoKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJT IGIvTUFJTlRBSU5FUlMKaW5kZXggMzZkMGM2ODg3YS4uNjZmNDZmYTQxYSAxMDA2NDQKLS0tIGEv TUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTE4ODUsNiArMTg4NSw4IEBAIEw6IHFl bXUtYmxvY2tAbm9uZ251Lm9yZwogUzogU3VwcG9ydGVkCiBGOiB1dGlsL2FzeW5jLmMKIEY6IHV0 aWwvYWlvLSouYworRjogdXRpbC9haW8tKi5oCitGOiB1dGlsL2ZkbW9uLSouYwogRjogYmxvY2sv aW8uYwogRjogbWlncmF0aW9uL2Jsb2NrKgogRjogaW5jbHVkZS9ibG9jay9haW8uaApkaWZmIC0t Z2l0IGEvaW5jbHVkZS9ibG9jay9haW8uaCBiL2luY2x1ZGUvYmxvY2svYWlvLmgKaW5kZXggOWRk NjFjZWU3ZS4uOTBlMDdkNzUwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9ibG9jay9haW8uaAorKysg Yi9pbmNsdWRlL2Jsb2NrL2Fpby5oCkBAIC01Miw2ICs1MiwzOCBAQCBzdHJ1Y3QgVGhyZWFkUG9v bDsKIHN0cnVjdCBMaW51eEFpb1N0YXRlOwogc3RydWN0IEx1cmluZ1N0YXRlOwogCisvKiBDYWxs YmFja3MgZm9yIGZpbGUgZGVzY3JpcHRvciBtb25pdG9yaW5nIGltcGxlbWVudGF0aW9ucyAqLwor dHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qCisgICAgICogdXBkYXRlOgorICAgICAqIEBjdHg6IHRo ZSBBaW9Db250ZXh0CisgICAgICogQG5vZGU6IHRoZSBoYW5kbGVyCisgICAgICogQGlzX25ldzog aXMgdGhlIGZpbGUgZGVzY3JpcHRvciBhbHJlYWR5IGJlaW5nIG1vbml0b3JlZD8KKyAgICAgKgor ICAgICAqIEFkZC9yZW1vdmUvbW9kaWZ5IGEgbW9uaXRvcmVkIGZpbGUgZGVzY3JpcHRvci4gIFRo ZXJlIGFyZSB0aHJlZSBjYXNlczoKKyAgICAgKiAxLiBub2RlLT5wZmQuZXZlbnRzID09IDAgbWVh bnMgcmVtb3ZlIHRoZSBmaWxlIGRlc2NyaXB0b3IuCisgICAgICogMi4gIWlzX25ldyBtZWFucyBt b2RpZnkgYW4gYWxyZWFkeSBtb25pdG9yZWQgZmlsZSBkZXNjcmlwdG9yLgorICAgICAqIDMuIGlz X25ldyBtZWFucyBhZGQgYSBuZXcgZmlsZSBkZXNjcmlwdG9yLgorICAgICAqCisgICAgICogQ2Fs bGVkIHdpdGggY3R4LT5saXN0X2xvY2sgYWNxdWlyZWQuCisgICAgICovCisgICAgdm9pZCAoKnVw ZGF0ZSkoQWlvQ29udGV4dCAqY3R4LCBBaW9IYW5kbGVyICpub2RlLCBib29sIGlzX25ldyk7CisK KyAgICAvKgorICAgICAqIHdhaXQ6CisgICAgICogQGN0eDogdGhlIEFpb0NvbnRleHQKKyAgICAg KiBAcmVhZHlfbGlzdDogbGlzdCBmb3IgaGFuZGxlcnMgdGhhdCBiZWNvbWUgcmVhZHkKKyAgICAg KiBAdGltZW91dDogbWF4aW11bSBkdXJhdGlvbiB0byB3YWl0LCBpbiBuYW5vc2Vjb25kcworICAg ICAqCisgICAgICogV2FpdCBmb3IgZmlsZSBkZXNjcmlwdG9ycyB0byBiZWNvbWUgcmVhZHkgYW5k IHBsYWNlIHRoZW0gb24gcmVhZHlfbGlzdC4KKyAgICAgKgorICAgICAqIENhbGxlZCB3aXRoIGN0 eC0+bGlzdF9sb2NrIGluY3JlbWVudGVkIGJ1dCBub3QgbG9ja2VkLgorICAgICAqCisgICAgICog UmV0dXJuczogbnVtYmVyIG9mIHJlYWR5IGZpbGUgZGVzY3JpcHRvcnMuCisgICAgICovCisgICAg aW50ICgqd2FpdCkoQWlvQ29udGV4dCAqY3R4LCBBaW9IYW5kbGVyTGlzdCAqcmVhZHlfbGlzdCwg aW50NjRfdCB0aW1lb3V0KTsKK30gRkRNb25PcHM7CisKIC8qCiAgKiBFYWNoIGFpb19iaF9wb2xs KCkgY2FsbCBjYXJ2ZXMgb2ZmIGEgc2xpY2Ugb2YgdGhlIEJIIGxpc3QsIHNvIHRoYXQgbmV3bHkK ICAqIHNjaGVkdWxlZCBCSHMgYXJlIG5vdCBwcm9jZXNzZWQgdW50aWwgdGhlIG5leHQgYWlvX2Jo X3BvbGwoKSBjYWxsLiAgQWxsCkBAIC0xNzMsOCArMjA1LDggQEAgc3RydWN0IEFpb0NvbnRleHQg ewogCiAgICAgLyogZXBvbGwoNykgc3RhdGUgdXNlZCB3aGVuIGJ1aWx0IHdpdGggQ09ORklHX0VQ T0xMICovCiAgICAgaW50IGVwb2xsZmQ7Ci0gICAgYm9vbCBlcG9sbF9lbmFibGVkOwotICAgIGJv b2wgZXBvbGxfYXZhaWxhYmxlOworCisgICAgY29uc3QgRkRNb25PcHMgKmZkbW9uX29wczsKIH07 CiAKIC8qKgpkaWZmIC0tZ2l0IGEvdXRpbC9NYWtlZmlsZS5vYmpzIGIvdXRpbC9NYWtlZmlsZS5v YmpzCmluZGV4IDZiMzhiNjdjZjEuLjY0MzkwNzdhNjggMTAwNjQ0Ci0tLSBhL3V0aWwvTWFrZWZp bGUub2JqcworKysgYi91dGlsL01ha2VmaWxlLm9ianMKQEAgLTUsNiArNSw4IEBAIHV0aWwtb2Jq LXkgKz0gYWlvY2IubyBhc3luYy5vIGFpby13YWl0Lm8gdGhyZWFkLXBvb2wubyBxZW11LXRpbWVy Lm8KIHV0aWwtb2JqLXkgKz0gbWFpbi1sb29wLm8KIHV0aWwtb2JqLSQoY2FsbCBsbm90LCQoQ09O RklHX0FUT01JQzY0KSkgKz0gYXRvbWljNjQubwogdXRpbC1vYmotJChDT05GSUdfUE9TSVgpICs9 IGFpby1wb3NpeC5vCit1dGlsLW9iai0kKENPTkZJR19QT1NJWCkgKz0gZmRtb24tcG9sbC5vCit1 dGlsLW9iai0kKENPTkZJR19FUE9MTF9DUkVBVEUxKSArPSBmZG1vbi1lcG9sbC5vCiB1dGlsLW9i ai0kKENPTkZJR19QT1NJWCkgKz0gY29tcGF0ZmQubwogdXRpbC1vYmotJChDT05GSUdfUE9TSVgp ICs9IGV2ZW50X25vdGlmaWVyLXBvc2l4Lm8KIHV0aWwtb2JqLSQoQ09ORklHX1BPU0lYKSArPSBt bWFwLWFsbG9jLm8KZGlmZiAtLWdpdCBhL3V0aWwvYWlvLXBvc2l4LmMgYi91dGlsL2Fpby1wb3Np eC5jCmluZGV4IDExYTQ5NzE5NTUuLmJjMGI4NjU0N2MgMTAwNjQ0Ci0tLSBhL3V0aWwvYWlvLXBv c2l4LmMKKysrIGIvdXRpbC9haW8tcG9zaXguYwpAQCAtMjAsMTkxICsyMCwxNyBAQAogI2luY2x1 ZGUgInFlbXUvc29ja2V0cy5oIgogI2luY2x1ZGUgInFlbXUvY3V0aWxzLmgiCiAjaW5jbHVkZSAi dHJhY2UuaCIKLSNpZmRlZiBDT05GSUdfRVBPTExfQ1JFQVRFMQotI2luY2x1ZGUgPHN5cy9lcG9s bC5oPgotI2VuZGlmCisjaW5jbHVkZSAiYWlvLXBvc2l4LmgiCiAKLXN0cnVjdCBBaW9IYW5kbGVy Ci17Ci0gICAgR1BvbGxGRCBwZmQ7Ci0gICAgSU9IYW5kbGVyICppb19yZWFkOwotICAgIElPSGFu ZGxlciAqaW9fd3JpdGU7Ci0gICAgQWlvUG9sbEZuICppb19wb2xsOwotICAgIElPSGFuZGxlciAq aW9fcG9sbF9iZWdpbjsKLSAgICBJT0hhbmRsZXIgKmlvX3BvbGxfZW5kOwotICAgIHZvaWQgKm9w YXF1ZTsKLSAgICBib29sIGlzX2V4dGVybmFsOwotICAgIFFMSVNUX0VOVFJZKEFpb0hhbmRsZXIp IG5vZGU7Ci0gICAgUUxJU1RfRU5UUlkoQWlvSGFuZGxlcikgbm9kZV9yZWFkeTsgLyogb25seSB1 c2VkIGR1cmluZyBhaW9fcG9sbCgpICovCi0gICAgUUxJU1RfRU5UUlkoQWlvSGFuZGxlcikgbm9k ZV9kZWxldGVkOwotfTsKLQotLyogQWRkIGEgaGFuZGxlciB0byBhIHJlYWR5IGxpc3QgKi8KLXN0 YXRpYyB2b2lkIGFkZF9yZWFkeV9oYW5kbGVyKEFpb0hhbmRsZXJMaXN0ICpyZWFkeV9saXN0LAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWlvSGFuZGxlciAqbm9kZSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCByZXZlbnRzKQordm9pZCBhaW9fYWRkX3JlYWR5X2hh bmRsZXIoQWlvSGFuZGxlckxpc3QgKnJlYWR5X2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBBaW9IYW5kbGVyICpub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJl dmVudHMpCiB7CiAgICAgUUxJU1RfU0FGRV9SRU1PVkUobm9kZSwgbm9kZV9yZWFkeSk7IC8qIHJl bW92ZSBmcm9tIG5lc3RlZCBwYXJlbnQncyBsaXN0ICovCiAgICAgbm9kZS0+cGZkLnJldmVudHMg PSByZXZlbnRzOwogICAgIFFMSVNUX0lOU0VSVF9IRUFEKHJlYWR5X2xpc3QsIG5vZGUsIG5vZGVf cmVhZHkpOwogfQogCi0jaWZkZWYgQ09ORklHX0VQT0xMX0NSRUFURTEKLQotLyogVGhlIGZkIG51 bWJlciB0aHJlc2hvbGQgdG8gc3dpdGNoIHRvIGVwb2xsICovCi0jZGVmaW5lIEVQT0xMX0VOQUJM RV9USFJFU0hPTEQgNjQKLQotc3RhdGljIHZvaWQgYWlvX2Vwb2xsX2Rpc2FibGUoQWlvQ29udGV4 dCAqY3R4KQotewotICAgIGN0eC0+ZXBvbGxfZW5hYmxlZCA9IGZhbHNlOwotICAgIGlmICghY3R4 LT5lcG9sbF9hdmFpbGFibGUpIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjdHgtPmVw b2xsX2F2YWlsYWJsZSA9IGZhbHNlOwotICAgIGNsb3NlKGN0eC0+ZXBvbGxmZCk7Ci19Ci0KLXN0 YXRpYyBpbmxpbmUgaW50IGVwb2xsX2V2ZW50c19mcm9tX3BmZChpbnQgcGZkX2V2ZW50cykKLXsK LSAgICByZXR1cm4gKHBmZF9ldmVudHMgJiBHX0lPX0lOID8gRVBPTExJTiA6IDApIHwKLSAgICAg ICAgICAgKHBmZF9ldmVudHMgJiBHX0lPX09VVCA/IEVQT0xMT1VUIDogMCkgfAotICAgICAgICAg ICAocGZkX2V2ZW50cyAmIEdfSU9fSFVQID8gRVBPTExIVVAgOiAwKSB8Ci0gICAgICAgICAgIChw ZmRfZXZlbnRzICYgR19JT19FUlIgPyBFUE9MTEVSUiA6IDApOwotfQotCi1zdGF0aWMgYm9vbCBh aW9fZXBvbGxfdHJ5X2VuYWJsZShBaW9Db250ZXh0ICpjdHgpCi17Ci0gICAgQWlvSGFuZGxlciAq bm9kZTsKLSAgICBzdHJ1Y3QgZXBvbGxfZXZlbnQgZXZlbnQ7Ci0KLSAgICBRTElTVF9GT1JFQUNI X1JDVShub2RlLCAmY3R4LT5haW9faGFuZGxlcnMsIG5vZGUpIHsKLSAgICAgICAgaW50IHI7Ci0g ICAgICAgIGlmIChRTElTVF9JU19JTlNFUlRFRChub2RlLCBub2RlX2RlbGV0ZWQpIHx8ICFub2Rl LT5wZmQuZXZlbnRzKSB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAg ICBldmVudC5ldmVudHMgPSBlcG9sbF9ldmVudHNfZnJvbV9wZmQobm9kZS0+cGZkLmV2ZW50cyk7 Ci0gICAgICAgIGV2ZW50LmRhdGEucHRyID0gbm9kZTsKLSAgICAgICAgciA9IGVwb2xsX2N0bChj dHgtPmVwb2xsZmQsIEVQT0xMX0NUTF9BREQsIG5vZGUtPnBmZC5mZCwgJmV2ZW50KTsKLSAgICAg ICAgaWYgKHIpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0K LSAgICBjdHgtPmVwb2xsX2VuYWJsZWQgPSB0cnVlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1z dGF0aWMgdm9pZCBhaW9fZXBvbGxfdXBkYXRlKEFpb0NvbnRleHQgKmN0eCwgQWlvSGFuZGxlciAq bm9kZSwgYm9vbCBpc19uZXcpCi17Ci0gICAgc3RydWN0IGVwb2xsX2V2ZW50IGV2ZW50OwotICAg IGludCByOwotICAgIGludCBjdGw7Ci0KLSAgICBpZiAoIWN0eC0+ZXBvbGxfZW5hYmxlZCkgewot ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghbm9kZS0+cGZkLmV2ZW50cykgewotICAg ICAgICBjdGwgPSBFUE9MTF9DVExfREVMOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGV2ZW50LmRh dGEucHRyID0gbm9kZTsKLSAgICAgICAgZXZlbnQuZXZlbnRzID0gZXBvbGxfZXZlbnRzX2Zyb21f cGZkKG5vZGUtPnBmZC5ldmVudHMpOwotICAgICAgICBjdGwgPSBpc19uZXcgPyBFUE9MTF9DVExf QUREIDogRVBPTExfQ1RMX01PRDsKLSAgICB9Ci0KLSAgICByID0gZXBvbGxfY3RsKGN0eC0+ZXBv bGxmZCwgY3RsLCBub2RlLT5wZmQuZmQsICZldmVudCk7Ci0gICAgaWYgKHIpIHsKLSAgICAgICAg YWlvX2Vwb2xsX2Rpc2FibGUoY3R4KTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbnQgYWlvX2Vwb2xs KEFpb0NvbnRleHQgKmN0eCwgQWlvSGFuZGxlckxpc3QgKnJlYWR5X2xpc3QsCi0gICAgICAgICAg ICAgICAgICAgICBpbnQ2NF90IHRpbWVvdXQpCi17Ci0gICAgR1BvbGxGRCBwZmQgPSB7Ci0gICAg ICAgIC5mZCA9IGN0eC0+ZXBvbGxmZCwKLSAgICAgICAgLmV2ZW50cyA9IEdfSU9fSU4gfCBHX0lP X09VVCB8IEdfSU9fSFVQIHwgR19JT19FUlIsCi0gICAgfTsKLSAgICBBaW9IYW5kbGVyICpub2Rl OwotICAgIGludCBpLCByZXQgPSAwOwotICAgIHN0cnVjdCBlcG9sbF9ldmVudCBldmVudHNbMTI4 XTsKLQotICAgIGlmICh0aW1lb3V0ID4gMCkgewotICAgICAgICByZXQgPSBxZW11X3BvbGxfbnMo JnBmZCwgMSwgdGltZW91dCk7Ci0gICAgICAgIGlmIChyZXQgPiAwKSB7Ci0gICAgICAgICAgICB0 aW1lb3V0ID0gMDsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAodGltZW91dCA8PSAwIHx8IHJl dCA+IDApIHsKLSAgICAgICAgcmV0ID0gZXBvbGxfd2FpdChjdHgtPmVwb2xsZmQsIGV2ZW50cywK LSAgICAgICAgICAgICAgICAgICAgICAgICBBUlJBWV9TSVpFKGV2ZW50cyksCi0gICAgICAgICAg ICAgICAgICAgICAgICAgdGltZW91dCk7Ci0gICAgICAgIGlmIChyZXQgPD0gMCkgewotICAgICAg ICAgICAgZ290byBvdXQ7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IHJldDsg aSsrKSB7Ci0gICAgICAgICAgICBpbnQgZXYgPSBldmVudHNbaV0uZXZlbnRzOwotICAgICAgICAg ICAgaW50IHJldmVudHMgPSAoZXYgJiBFUE9MTElOID8gR19JT19JTiA6IDApIHwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgKGV2ICYgRVBPTExPVVQgPyBHX0lPX09VVCA6IDApIHwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgKGV2ICYgRVBPTExIVVAgPyBHX0lPX0hVUCA6IDApIHwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgKGV2ICYgRVBPTExFUlIgPyBHX0lPX0VSUiA6IDApOwot Ci0gICAgICAgICAgICBub2RlID0gZXZlbnRzW2ldLmRhdGEucHRyOwotICAgICAgICAgICAgYWRk X3JlYWR5X2hhbmRsZXIocmVhZHlfbGlzdCwgbm9kZSwgcmV2ZW50cyk7Ci0gICAgICAgIH0KLSAg ICB9Ci1vdXQ6Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGJvb2wgYWlvX2Vwb2xsX2Vu YWJsZWQoQWlvQ29udGV4dCAqY3R4KQotewotICAgIC8qIEZhbGwgYmFjayB0byBwcG9sbCB3aGVu IGV4dGVybmFsIGNsaWVudHMgYXJlIGRpc2FibGVkLiAqLwotICAgIHJldHVybiAhYWlvX2V4dGVy bmFsX2Rpc2FibGVkKGN0eCkgJiYgY3R4LT5lcG9sbF9lbmFibGVkOwotfQotCi1zdGF0aWMgYm9v bCBhaW9fZXBvbGxfY2hlY2tfcG9sbChBaW9Db250ZXh0ICpjdHgsIEdQb2xsRkQgKnBmZHMsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBucGZkLCBpbnQ2NF90IHRp bWVvdXQpCi17Ci0gICAgaWYgKCFjdHgtPmVwb2xsX2F2YWlsYWJsZSkgewotICAgICAgICByZXR1 cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChhaW9fZXBvbGxfZW5hYmxlZChjdHgpKSB7Ci0gICAg ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAobnBmZCA+PSBFUE9MTF9FTkFCTEVfVEhS RVNIT0xEKSB7Ci0gICAgICAgIGlmIChhaW9fZXBvbGxfdHJ5X2VuYWJsZShjdHgpKSB7Ci0gICAg ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGFpb19l cG9sbF9kaXNhYmxlKGN0eCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwot fQotCi0jZWxzZQotCi1zdGF0aWMgdm9pZCBhaW9fZXBvbGxfdXBkYXRlKEFpb0NvbnRleHQgKmN0 eCwgQWlvSGFuZGxlciAqbm9kZSwgYm9vbCBpc19uZXcpCi17Ci19Ci0KLXN0YXRpYyBpbnQgYWlv X2Vwb2xsKEFpb0NvbnRleHQgKmN0eCwgQWlvSGFuZGxlckxpc3QgKnJlYWR5X2xpc3QsCi0gICAg ICAgICAgICAgICAgICAgICBpbnQ2NF90IHRpbWVvdXQpCi17Ci0gICAgYXNzZXJ0KGZhbHNlKTsK LX0KLQotc3RhdGljIGJvb2wgYWlvX2Vwb2xsX2VuYWJsZWQoQWlvQ29udGV4dCAqY3R4KQotewot ICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGJvb2wgYWlvX2Vwb2xsX2NoZWNrX3BvbGwo QWlvQ29udGV4dCAqY3R4LCBHUG9sbEZEICpwZmRzLAotICAgICAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBucGZkLCBpbnQ2NF90IHRpbWVvdXQpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwot fQotCi0jZW5kaWYKLQogc3RhdGljIEFpb0hhbmRsZXIgKmZpbmRfYWlvX2hhbmRsZXIoQWlvQ29u dGV4dCAqY3R4LCBpbnQgZmQpCiB7CiAgICAgQWlvSGFuZGxlciAqbm9kZTsKQEAgLTMxNCwxMCAr MTQwLDEwIEBAIHZvaWQgYWlvX3NldF9mZF9oYW5kbGVyKEFpb0NvbnRleHQgKmN0eCwKICAgICAg ICAgICAgICAgIGF0b21pY19yZWFkKCZjdHgtPnBvbGxfZGlzYWJsZV9jbnQpICsgcG9sbF9kaXNh YmxlX2NoYW5nZSk7CiAKICAgICBpZiAobmV3X25vZGUpIHsKLSAgICAgICAgYWlvX2Vwb2xsX3Vw ZGF0ZShjdHgsIG5ld19ub2RlLCBpc19uZXcpOworICAgICAgICBjdHgtPmZkbW9uX29wcy0+dXBk YXRlKGN0eCwgbmV3X25vZGUsIGlzX25ldyk7CiAgICAgfSBlbHNlIGlmIChub2RlKSB7CiAgICAg ICAgIC8qIFVucmVnaXN0ZXIgZGVsZXRlZCBmZF9oYW5kbGVyICovCi0gICAgICAgIGFpb19lcG9s bF91cGRhdGUoY3R4LCBub2RlLCBmYWxzZSk7CisgICAgICAgIGN0eC0+ZmRtb25fb3BzLT51cGRh dGUoY3R4LCBub2RlLCBmYWxzZSk7CiAgICAgfQogICAgIHFlbXVfbG9ja2NudF91bmxvY2soJmN0 eC0+bGlzdF9sb2NrKTsKICAgICBhaW9fbm90aWZ5KGN0eCk7CkBAIC01MzIsNTIgKzM1OCw2IEBA IHZvaWQgYWlvX2Rpc3BhdGNoKEFpb0NvbnRleHQgKmN0eCkKICAgICB0aW1lcmxpc3Rncm91cF9y dW5fdGltZXJzKCZjdHgtPnRsZyk7CiB9CiAKLS8qIFRoZXNlIHRocmVhZC1sb2NhbCB2YXJpYWJs ZXMgYXJlIHVzZWQgb25seSBpbiBhIHNtYWxsIHBhcnQgb2YgYWlvX3BvbGwKLSAqIGFyb3VuZCB0 aGUgY2FsbCB0byB0aGUgcG9sbCgpIHN5c3RlbSBjYWxsLiAgSW4gcGFydGljdWxhciB0aGV5IGFy ZSBub3QKLSAqIHVzZWQgd2hpbGUgYWlvX3BvbGwgaXMgcGVyZm9ybWluZyBjYWxsYmFja3MsIHdo aWNoIG1ha2VzIGl0IG11Y2ggZWFzaWVyCi0gKiB0byB0aGluayBhYm91dCByZWVudHJhbmN5IQot ICoKLSAqIFN0YWNrLWFsbG9jYXRlZCBhcnJheXMgd291bGQgYmUgcGVyZmVjdCBidXQgdGhleSBo YXZlIHNpemUgbGltaXRhdGlvbnM7Ci0gKiBoZWFwIGFsbG9jYXRpb24gaXMgZXhwZW5zaXZlIGVu b3VnaCB0aGF0IHdlIHdhbnQgdG8gcmV1c2UgYXJyYXlzIGFjcm9zcwotICogY2FsbHMgdG8gYWlv X3BvbGwoKS4gIEFuZCBiZWNhdXNlIHBvbGwoKSBoYXMgdG8gYmUgY2FsbGVkIHdpdGhvdXQgaG9s ZGluZwotICogYW55IGxvY2ssIHRoZSBhcnJheXMgY2Fubm90IGJlIHN0b3JlZCBpbiBBaW9Db250 ZXh0LiAgVGhyZWFkLWxvY2FsIGRhdGEKLSAqIGhhcyBub25lIG9mIHRoZSBkaXNhZHZhbnRhZ2Vz IG9mIHRoZXNlIHRocmVlIG9wdGlvbnMuCi0gKi8KLXN0YXRpYyBfX3RocmVhZCBHUG9sbEZEICpw b2xsZmRzOwotc3RhdGljIF9fdGhyZWFkIEFpb0hhbmRsZXIgKipub2RlczsKLXN0YXRpYyBfX3Ro cmVhZCB1bnNpZ25lZCBucGZkLCBuYWxsb2M7Ci1zdGF0aWMgX190aHJlYWQgTm90aWZpZXIgcG9s bGZkc19jbGVhbnVwX25vdGlmaWVyOwotCi1zdGF0aWMgdm9pZCBwb2xsZmRzX2NsZWFudXAoTm90 aWZpZXIgKm4sIHZvaWQgKnVudXNlZCkKLXsKLSAgICBnX2Fzc2VydChucGZkID09IDApOwotICAg IGdfZnJlZShwb2xsZmRzKTsKLSAgICBnX2ZyZWUobm9kZXMpOwotICAgIG5hbGxvYyA9IDA7Ci19 Ci0KLXN0YXRpYyB2b2lkIGFkZF9wb2xsZmQoQWlvSGFuZGxlciAqbm9kZSkKLXsKLSAgICBpZiAo bnBmZCA9PSBuYWxsb2MpIHsKLSAgICAgICAgaWYgKG5hbGxvYyA9PSAwKSB7Ci0gICAgICAgICAg ICBwb2xsZmRzX2NsZWFudXBfbm90aWZpZXIubm90aWZ5ID0gcG9sbGZkc19jbGVhbnVwOwotICAg ICAgICAgICAgcWVtdV90aHJlYWRfYXRleGl0X2FkZCgmcG9sbGZkc19jbGVhbnVwX25vdGlmaWVy KTsKLSAgICAgICAgICAgIG5hbGxvYyA9IDg7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg ICBnX2Fzc2VydChuYWxsb2MgPD0gSU5UX01BWCk7Ci0gICAgICAgICAgICBuYWxsb2MgKj0gMjsK LSAgICAgICAgfQotICAgICAgICBwb2xsZmRzID0gZ19yZW5ldyhHUG9sbEZELCBwb2xsZmRzLCBu YWxsb2MpOwotICAgICAgICBub2RlcyA9IGdfcmVuZXcoQWlvSGFuZGxlciAqLCBub2RlcywgbmFs bG9jKTsKLSAgICB9Ci0gICAgbm9kZXNbbnBmZF0gPSBub2RlOwotICAgIHBvbGxmZHNbbnBmZF0g PSAoR1BvbGxGRCkgewotICAgICAgICAuZmQgPSBub2RlLT5wZmQuZmQsCi0gICAgICAgIC5ldmVu dHMgPSBub2RlLT5wZmQuZXZlbnRzLAotICAgIH07Ci0gICAgbnBmZCsrOwotfQotCiBzdGF0aWMg Ym9vbCBydW5fcG9sbF9oYW5kbGVyc19vbmNlKEFpb0NvbnRleHQgKmN0eCwgaW50NjRfdCAqdGlt ZW91dCkKIHsKICAgICBib29sIHByb2dyZXNzID0gZmFsc2U7CkBAIC02ODksOCArNDY5LDYgQEAg c3RhdGljIGJvb2wgdHJ5X3BvbGxfbW9kZShBaW9Db250ZXh0ICpjdHgsIGludDY0X3QgKnRpbWVv dXQpCiBib29sIGFpb19wb2xsKEFpb0NvbnRleHQgKmN0eCwgYm9vbCBibG9ja2luZykKIHsKICAg ICBBaW9IYW5kbGVyTGlzdCByZWFkeV9saXN0ID0gUUxJU1RfSEVBRF9JTklUSUFMSVpFUihyZWFk eV9saXN0KTsKLSAgICBBaW9IYW5kbGVyICpub2RlOwotICAgIGludCBpOwogICAgIGludCByZXQg PSAwOwogICAgIGJvb2wgcHJvZ3Jlc3M7CiAgICAgaW50NjRfdCB0aW1lb3V0OwpAQCAtNzIzLDI2 ICs1MDEsNyBAQCBib29sIGFpb19wb2xsKEFpb0NvbnRleHQgKmN0eCwgYm9vbCBibG9ja2luZykK ICAgICAgKiBzeXN0ZW0gY2FsbC0tLWEgc2luZ2xlIHJvdW5kIG9mIHJ1bl9wb2xsX2hhbmRsZXJz X29uY2Ugc3VmZmljZXMuCiAgICAgICovCiAgICAgaWYgKHRpbWVvdXQgfHwgYXRvbWljX3JlYWQo JmN0eC0+cG9sbF9kaXNhYmxlX2NudCkpIHsKLSAgICAgICAgYXNzZXJ0KG5wZmQgPT0gMCk7Ci0K LSAgICAgICAgLyogZmlsbCBwb2xsZmRzICovCi0KLSAgICAgICAgaWYgKCFhaW9fZXBvbGxfZW5h YmxlZChjdHgpKSB7Ci0gICAgICAgICAgICBRTElTVF9GT1JFQUNIX1JDVShub2RlLCAmY3R4LT5h aW9faGFuZGxlcnMsIG5vZGUpIHsKLSAgICAgICAgICAgICAgICBpZiAoIVFMSVNUX0lTX0lOU0VS VEVEKG5vZGUsIG5vZGVfZGVsZXRlZCkgJiYgbm9kZS0+cGZkLmV2ZW50cwotICAgICAgICAgICAg ICAgICAgICAmJiBhaW9fbm9kZV9jaGVjayhjdHgsIG5vZGUtPmlzX2V4dGVybmFsKSkgewotICAg ICAgICAgICAgICAgICAgICBhZGRfcG9sbGZkKG5vZGUpOwotICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qIHdhaXQgdW50aWwgbmV4dCBldmVu dCAqLwotICAgICAgICBpZiAoYWlvX2Vwb2xsX2NoZWNrX3BvbGwoY3R4LCBwb2xsZmRzLCBucGZk LCB0aW1lb3V0KSkgewotICAgICAgICAgICAgbnBmZCA9IDA7IC8qIHBvbGxmZHNbXSBpcyBub3Qg YmVpbmcgdXNlZCAqLwotICAgICAgICAgICAgcmV0ID0gYWlvX2Vwb2xsKGN0eCwgJnJlYWR5X2xp c3QsIHRpbWVvdXQpOwotICAgICAgICB9IGVsc2UgIHsKLSAgICAgICAgICAgIHJldCA9IHFlbXVf cG9sbF9ucyhwb2xsZmRzLCBucGZkLCB0aW1lb3V0KTsKLSAgICAgICAgfQorICAgICAgICByZXQg PSBjdHgtPmZkbW9uX29wcy0+d2FpdChjdHgsICZyZWFkeV9saXN0LCB0aW1lb3V0KTsKICAgICB9 CiAKICAgICBpZiAoYmxvY2tpbmcpIHsKQEAgLTc5MSwxOSArNTUwLDYgQEAgYm9vbCBhaW9fcG9s bChBaW9Db250ZXh0ICpjdHgsIGJvb2wgYmxvY2tpbmcpCiAgICAgICAgIH0KICAgICB9CiAKLSAg ICAvKiBpZiB3ZSBoYXZlIGFueSByZWFkYWJsZSBmZHMsIGRpc3BhdGNoIGV2ZW50ICovCi0gICAg aWYgKHJldCA+IDApIHsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG5wZmQ7IGkrKykgewotICAg ICAgICAgICAgaW50IHJldmVudHMgPSBwb2xsZmRzW2ldLnJldmVudHM7Ci0KLSAgICAgICAgICAg IGlmIChyZXZlbnRzKSB7Ci0gICAgICAgICAgICAgICAgYWRkX3JlYWR5X2hhbmRsZXIoJnJlYWR5 X2xpc3QsIG5vZGVzW2ldLCByZXZlbnRzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg IH0KLQotICAgIG5wZmQgPSAwOwotCiAgICAgcHJvZ3Jlc3MgfD0gYWlvX2JoX3BvbGwoY3R4KTsK IAogICAgIGlmIChyZXQgPiAwKSB7CkBAIC04MjEsMjMgKzU2NywxNSBAQCBib29sIGFpb19wb2xs KEFpb0NvbnRleHQgKmN0eCwgYm9vbCBibG9ja2luZykKIAogdm9pZCBhaW9fY29udGV4dF9zZXR1 cChBaW9Db250ZXh0ICpjdHgpCiB7Ci0jaWZkZWYgQ09ORklHX0VQT0xMX0NSRUFURTEKLSAgICBh c3NlcnQoIWN0eC0+ZXBvbGxmZCk7Ci0gICAgY3R4LT5lcG9sbGZkID0gZXBvbGxfY3JlYXRlMShF UE9MTF9DTE9FWEVDKTsKLSAgICBpZiAoY3R4LT5lcG9sbGZkID09IC0xKSB7Ci0gICAgICAgIGZw cmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGNyZWF0ZSBlcG9sbCBpbnN0YW5jZTogJXMiLCBzdHJl cnJvcihlcnJubykpOwotICAgICAgICBjdHgtPmVwb2xsX2F2YWlsYWJsZSA9IGZhbHNlOwotICAg IH0gZWxzZSB7Ci0gICAgICAgIGN0eC0+ZXBvbGxfYXZhaWxhYmxlID0gdHJ1ZTsKLSAgICB9Ci0j ZW5kaWYKKyAgICBjdHgtPmZkbW9uX29wcyA9ICZmZG1vbl9wb2xsX29wczsKKyAgICBjdHgtPmVw b2xsZmQgPSAtMTsKKworICAgIGZkbW9uX2Vwb2xsX3NldHVwKGN0eCk7CiB9CiAKIHZvaWQgYWlv X2NvbnRleHRfZGVzdHJveShBaW9Db250ZXh0ICpjdHgpCiB7Ci0jaWZkZWYgQ09ORklHX0VQT0xM X0NSRUFURTEKLSAgICBhaW9fZXBvbGxfZGlzYWJsZShjdHgpOwotI2VuZGlmCisgICAgZmRtb25f ZXBvbGxfZGlzYWJsZShjdHgpOwogfQogCiB2b2lkIGFpb19jb250ZXh0X3NldF9wb2xsX3BhcmFt cyhBaW9Db250ZXh0ICpjdHgsIGludDY0X3QgbWF4X25zLApkaWZmIC0tZ2l0IGEvdXRpbC9haW8t cG9zaXguaCBiL3V0aWwvYWlvLXBvc2l4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMC4uOTc4OTlkMGZiYwotLS0gL2Rldi9udWxsCisrKyBiL3V0aWwvYWlvLXBvc2l4LmgK QEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIEFpb0NvbnRleHQgUE9TSVggZXZlbnQgbG9vcCBpbXBs ZW1lbnRhdGlvbiBpbnRlcm5hbCBBUElzCisgKgorICogQ29weXJpZ2h0IElCTSwgQ29ycC4gMjAw OAorICogQ29weXJpZ2h0IFJlZCBIYXQsIEluYy4gMjAyMAorICoKKyAqIEF1dGhvcnM6CisgKiAg QW50aG9ueSBMaWd1b3JpICAgPGFsaWd1b3JpQHVzLmlibS5jb20+CisgKgorICogVGhpcyB3b3Jr IGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCwgdmVyc2lvbiAyLiAg U2VlCisgKiB0aGUgQ09QWUlORyBmaWxlIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5LgorICoK KyAqIENvbnRyaWJ1dGlvbnMgYWZ0ZXIgMjAxMi0wMS0xMyBhcmUgbGljZW5zZWQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZQorICogR05VIEdQTCwgdmVyc2lvbiAyIG9yIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBBSU9fUE9TSVhfSAorI2RlZmluZSBB SU9fUE9TSVhfSAorCisjaW5jbHVkZSAiYmxvY2svYWlvLmgiCisKK3N0cnVjdCBBaW9IYW5kbGVy IHsKKyAgICBHUG9sbEZEIHBmZDsKKyAgICBJT0hhbmRsZXIgKmlvX3JlYWQ7CisgICAgSU9IYW5k bGVyICppb193cml0ZTsKKyAgICBBaW9Qb2xsRm4gKmlvX3BvbGw7CisgICAgSU9IYW5kbGVyICpp b19wb2xsX2JlZ2luOworICAgIElPSGFuZGxlciAqaW9fcG9sbF9lbmQ7CisgICAgdm9pZCAqb3Bh cXVlOworICAgIGJvb2wgaXNfZXh0ZXJuYWw7CisgICAgUUxJU1RfRU5UUlkoQWlvSGFuZGxlcikg bm9kZTsKKyAgICBRTElTVF9FTlRSWShBaW9IYW5kbGVyKSBub2RlX3JlYWR5OyAvKiBvbmx5IHVz ZWQgZHVyaW5nIGFpb19wb2xsKCkgKi8KKyAgICBRTElTVF9FTlRSWShBaW9IYW5kbGVyKSBub2Rl X2RlbGV0ZWQ7Cit9OworCisvKiBBZGQgYSBoYW5kbGVyIHRvIGEgcmVhZHkgbGlzdCAqLwordm9p ZCBhaW9fYWRkX3JlYWR5X2hhbmRsZXIoQWlvSGFuZGxlckxpc3QgKnJlYWR5X2xpc3QsIEFpb0hh bmRsZXIgKm5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmV2ZW50cyk7CisK K2V4dGVybiBjb25zdCBGRE1vbk9wcyBmZG1vbl9wb2xsX29wczsKKworI2lmZGVmIENPTkZJR19F UE9MTF9DUkVBVEUxCitib29sIGZkbW9uX2Vwb2xsX3RyeV91cGdyYWRlKEFpb0NvbnRleHQgKmN0 eCwgdW5zaWduZWQgbnBmZCk7Cit2b2lkIGZkbW9uX2Vwb2xsX3NldHVwKEFpb0NvbnRleHQgKmN0 eCk7Cit2b2lkIGZkbW9uX2Vwb2xsX2Rpc2FibGUoQWlvQ29udGV4dCAqY3R4KTsKKyNlbHNlCitz dGF0aWMgaW5saW5lIGJvb2wgZmRtb25fZXBvbGxfdHJ5X3VwZ3JhZGUoQWlvQ29udGV4dCAqY3R4 LCB1bnNpZ25lZCBucGZkKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGlu ZSB2b2lkIGZkbW9uX2Vwb2xsX3NldHVwKEFpb0NvbnRleHQgKmN0eCkKK3sKK30KKworc3RhdGlj IGlubGluZSB2b2lkIGZkbW9uX2Vwb2xsX2Rpc2FibGUoQWlvQ29udGV4dCAqY3R4KQoreworfQor I2VuZGlmIC8qICFDT05GSUdfRVBPTExfQ1JFQVRFMSAqLworCisjZW5kaWYgLyogQUlPX1BPU0lY X0ggKi8KZGlmZiAtLWdpdCBhL3V0aWwvZmRtb24tZXBvbGwuYyBiL3V0aWwvZmRtb24tZXBvbGwu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4yOWMxNDU0NDY5Ci0tLSAv ZGV2L251bGwKKysrIGIvdXRpbC9mZG1vbi1lcG9sbC5jCkBAIC0wLDAgKzEsMTUxIEBACisvKiBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqLworLyoKKyAqIGVwb2xs KDcpIGZpbGUgZGVzY3JpcHRvciBtb25pdG9yaW5nCisgKi8KKworI2luY2x1ZGUgInFlbXUvb3Nk ZXAuaCIKKyNpbmNsdWRlIDxzeXMvZXBvbGwuaD4KKyNpbmNsdWRlICJxZW11L3JjdV9xdWV1ZS5o IgorI2luY2x1ZGUgImFpby1wb3NpeC5oIgorCisvKiBUaGUgZmQgbnVtYmVyIHRocmVzaG9sZCB0 byBzd2l0Y2ggdG8gZXBvbGwgKi8KKyNkZWZpbmUgRVBPTExfRU5BQkxFX1RIUkVTSE9MRCA2NAor Cit2b2lkIGZkbW9uX2Vwb2xsX2Rpc2FibGUoQWlvQ29udGV4dCAqY3R4KQoreworICAgIGlmIChj dHgtPmVwb2xsZmQgPj0gMCkgeworICAgICAgICBjbG9zZShjdHgtPmVwb2xsZmQpOworICAgICAg ICBjdHgtPmVwb2xsZmQgPSAtMTsKKyAgICB9CisKKyAgICAvKiBTd2l0Y2ggYmFjayAqLworICAg IGN0eC0+ZmRtb25fb3BzID0gJmZkbW9uX3BvbGxfb3BzOworfQorCitzdGF0aWMgaW5saW5lIGlu dCBlcG9sbF9ldmVudHNfZnJvbV9wZmQoaW50IHBmZF9ldmVudHMpCit7CisgICAgcmV0dXJuIChw ZmRfZXZlbnRzICYgR19JT19JTiA/IEVQT0xMSU4gOiAwKSB8CisgICAgICAgICAgIChwZmRfZXZl bnRzICYgR19JT19PVVQgPyBFUE9MTE9VVCA6IDApIHwKKyAgICAgICAgICAgKHBmZF9ldmVudHMg JiBHX0lPX0hVUCA/IEVQT0xMSFVQIDogMCkgfAorICAgICAgICAgICAocGZkX2V2ZW50cyAmIEdf SU9fRVJSID8gRVBPTExFUlIgOiAwKTsKK30KKworc3RhdGljIHZvaWQgZmRtb25fZXBvbGxfdXBk YXRlKEFpb0NvbnRleHQgKmN0eCwgQWlvSGFuZGxlciAqbm9kZSwgYm9vbCBpc19uZXcpCit7Cisg ICAgc3RydWN0IGVwb2xsX2V2ZW50IGV2ZW50OworICAgIGludCByOworICAgIGludCBjdGw7CisK KyAgICBpZiAoIW5vZGUtPnBmZC5ldmVudHMpIHsKKyAgICAgICAgY3RsID0gRVBPTExfQ1RMX0RF TDsKKyAgICB9IGVsc2UgeworICAgICAgICBldmVudC5kYXRhLnB0ciA9IG5vZGU7CisgICAgICAg IGV2ZW50LmV2ZW50cyA9IGVwb2xsX2V2ZW50c19mcm9tX3BmZChub2RlLT5wZmQuZXZlbnRzKTsK KyAgICAgICAgY3RsID0gaXNfbmV3ID8gRVBPTExfQ1RMX0FERCA6IEVQT0xMX0NUTF9NT0Q7Cisg ICAgfQorCisgICAgciA9IGVwb2xsX2N0bChjdHgtPmVwb2xsZmQsIGN0bCwgbm9kZS0+cGZkLmZk LCAmZXZlbnQpOworICAgIGlmIChyKSB7CisgICAgICAgIGZkbW9uX2Vwb2xsX2Rpc2FibGUoY3R4 KTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQgZmRtb25fZXBvbGxfd2FpdChBaW9Db250ZXh0ICpj dHgsIEFpb0hhbmRsZXJMaXN0ICpyZWFkeV9saXN0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludDY0X3QgdGltZW91dCkKK3sKKyAgICBHUG9sbEZEIHBmZCA9IHsKKyAgICAgICAgLmZk ID0gY3R4LT5lcG9sbGZkLAorICAgICAgICAuZXZlbnRzID0gR19JT19JTiB8IEdfSU9fT1VUIHwg R19JT19IVVAgfCBHX0lPX0VSUiwKKyAgICB9OworICAgIEFpb0hhbmRsZXIgKm5vZGU7CisgICAg aW50IGksIHJldCA9IDA7CisgICAgc3RydWN0IGVwb2xsX2V2ZW50IGV2ZW50c1sxMjhdOworCisg ICAgLyogRmFsbCBiYWNrIHdoaWxlIGV4dGVybmFsIGNsaWVudHMgYXJlIGRpc2FibGVkICovCisg ICAgaWYgKGF0b21pY19yZWFkKCZjdHgtPmV4dGVybmFsX2Rpc2FibGVfY250KSkgeworICAgICAg ICByZXR1cm4gZmRtb25fcG9sbF9vcHMud2FpdChjdHgsIHJlYWR5X2xpc3QsIHRpbWVvdXQpOwor ICAgIH0KKworICAgIGlmICh0aW1lb3V0ID4gMCkgeworICAgICAgICByZXQgPSBxZW11X3BvbGxf bnMoJnBmZCwgMSwgdGltZW91dCk7CisgICAgICAgIGlmIChyZXQgPiAwKSB7CisgICAgICAgICAg ICB0aW1lb3V0ID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAodGltZW91dCA8PSAwIHx8 IHJldCA+IDApIHsKKyAgICAgICAgcmV0ID0gZXBvbGxfd2FpdChjdHgtPmVwb2xsZmQsIGV2ZW50 cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBBUlJBWV9TSVpFKGV2ZW50cyksCisgICAgICAg ICAgICAgICAgICAgICAgICAgdGltZW91dCk7CisgICAgICAgIGlmIChyZXQgPD0gMCkgeworICAg ICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHJl dDsgaSsrKSB7CisgICAgICAgICAgICBpbnQgZXYgPSBldmVudHNbaV0uZXZlbnRzOworICAgICAg ICAgICAgaW50IHJldmVudHMgPSAoZXYgJiBFUE9MTElOID8gR19JT19JTiA6IDApIHwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgKGV2ICYgRVBPTExPVVQgPyBHX0lPX09VVCA6IDApIHwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgKGV2ICYgRVBPTExIVVAgPyBHX0lPX0hVUCA6IDApIHwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgKGV2ICYgRVBPTExFUlIgPyBHX0lPX0VSUiA6IDAp OworCisgICAgICAgICAgICBub2RlID0gZXZlbnRzW2ldLmRhdGEucHRyOworICAgICAgICAgICAg YWlvX2FkZF9yZWFkeV9oYW5kbGVyKHJlYWR5X2xpc3QsIG5vZGUsIHJldmVudHMpOworICAgICAg ICB9CisgICAgfQorb3V0OgorICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBGRE1v bk9wcyBmZG1vbl9lcG9sbF9vcHMgPSB7CisgICAgLnVwZGF0ZSA9IGZkbW9uX2Vwb2xsX3VwZGF0 ZSwKKyAgICAud2FpdCA9IGZkbW9uX2Vwb2xsX3dhaXQsCit9OworCitzdGF0aWMgYm9vbCBmZG1v bl9lcG9sbF90cnlfZW5hYmxlKEFpb0NvbnRleHQgKmN0eCkKK3sKKyAgICBBaW9IYW5kbGVyICpu b2RlOworICAgIHN0cnVjdCBlcG9sbF9ldmVudCBldmVudDsKKworICAgIFFMSVNUX0ZPUkVBQ0hf UkNVKG5vZGUsICZjdHgtPmFpb19oYW5kbGVycywgbm9kZSkgeworICAgICAgICBpbnQgcjsKKyAg ICAgICAgaWYgKFFMSVNUX0lTX0lOU0VSVEVEKG5vZGUsIG5vZGVfZGVsZXRlZCkgfHwgIW5vZGUt PnBmZC5ldmVudHMpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAg IGV2ZW50LmV2ZW50cyA9IGVwb2xsX2V2ZW50c19mcm9tX3BmZChub2RlLT5wZmQuZXZlbnRzKTsK KyAgICAgICAgZXZlbnQuZGF0YS5wdHIgPSBub2RlOworICAgICAgICByID0gZXBvbGxfY3RsKGN0 eC0+ZXBvbGxmZCwgRVBPTExfQ1RMX0FERCwgbm9kZS0+cGZkLmZkLCAmZXZlbnQpOworICAgICAg ICBpZiAocikgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQor CisgICAgY3R4LT5mZG1vbl9vcHMgPSAmZmRtb25fZXBvbGxfb3BzOworICAgIHJldHVybiB0cnVl OworfQorCitib29sIGZkbW9uX2Vwb2xsX3RyeV91cGdyYWRlKEFpb0NvbnRleHQgKmN0eCwgdW5z aWduZWQgbnBmZCkKK3sKKyAgICBpZiAoY3R4LT5lcG9sbGZkIDwgMCkgeworICAgICAgICByZXR1 cm4gZmFsc2U7CisgICAgfQorCisgICAgLyogRG8gbm90IHVwZ3JhZGUgd2hpbGUgZXh0ZXJuYWwg Y2xpZW50cyBhcmUgZGlzYWJsZWQgKi8KKyAgICBpZiAoYXRvbWljX3JlYWQoJmN0eC0+ZXh0ZXJu YWxfZGlzYWJsZV9jbnQpKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBp ZiAobnBmZCA+PSBFUE9MTF9FTkFCTEVfVEhSRVNIT0xEKSB7CisgICAgICAgIGlmIChmZG1vbl9l cG9sbF90cnlfZW5hYmxlKGN0eCkpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgZmRtb25fZXBvbGxfZGlzYWJsZShjdHgpOworICAgICAg ICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBmZG1vbl9lcG9sbF9zZXR1 cChBaW9Db250ZXh0ICpjdHgpCit7CisgICAgY3R4LT5lcG9sbGZkID0gZXBvbGxfY3JlYXRlMShF UE9MTF9DTE9FWEVDKTsKKyAgICBpZiAoY3R4LT5lcG9sbGZkID09IC0xKSB7CisgICAgICAgIGZw cmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGNyZWF0ZSBlcG9sbCBpbnN0YW5jZTogJXMiLCBzdHJl cnJvcihlcnJubykpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3V0aWwvZmRtb24tcG9sbC5jIGIv dXRpbC9mZG1vbi1wb2xsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4u Njc5OTIxMTZiOAotLS0gL2Rldi9udWxsCisrKyBiL3V0aWwvZmRtb24tcG9sbC5jCkBAIC0wLDAg KzEsMTA0IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAq LworLyoKKyAqIHBvbGwoMikgZmlsZSBkZXNjcmlwdG9yIG1vbml0b3JpbmcKKyAqCisgKiBVc2Vz IHBwb2xsKDIpIHdoZW4gYXZhaWxhYmxlLCBnX3BvbGwoKSBvdGhlcndpc2UuCisgKi8KKworI2lu Y2x1ZGUgInFlbXUvb3NkZXAuaCIKKyNpbmNsdWRlICJhaW8tcG9zaXguaCIKKyNpbmNsdWRlICJx ZW11L3JjdV9xdWV1ZS5oIgorCisvKgorICogVGhlc2UgdGhyZWFkLWxvY2FsIHZhcmlhYmxlcyBh cmUgdXNlZCBvbmx5IGluIGZkbW9uX3BvbGxfd2FpdCgpIGFyb3VuZCB0aGUKKyAqIGNhbGwgdG8g dGhlIHBvbGwoKSBzeXN0ZW0gY2FsbC4gIEluIHBhcnRpY3VsYXIgdGhleSBhcmUgbm90IHVzZWQg d2hpbGUKKyAqIGFpb19wb2xsIGlzIHBlcmZvcm1pbmcgY2FsbGJhY2tzLCB3aGljaCBtYWtlcyBp dCBtdWNoIGVhc2llciB0byB0aGluayBhYm91dAorICogcmVlbnRyYW5jeSEKKyAqCisgKiBTdGFj ay1hbGxvY2F0ZWQgYXJyYXlzIHdvdWxkIGJlIHBlcmZlY3QgYnV0IHRoZXkgaGF2ZSBzaXplIGxp bWl0YXRpb25zOworICogaGVhcCBhbGxvY2F0aW9uIGlzIGV4cGVuc2l2ZSBlbm91Z2ggdGhhdCB3 ZSB3YW50IHRvIHJldXNlIGFycmF5cyBhY3Jvc3MKKyAqIGNhbGxzIHRvIGFpb19wb2xsKCkuICBB bmQgYmVjYXVzZSBwb2xsKCkgaGFzIHRvIGJlIGNhbGxlZCB3aXRob3V0IGhvbGRpbmcKKyAqIGFu eSBsb2NrLCB0aGUgYXJyYXlzIGNhbm5vdCBiZSBzdG9yZWQgaW4gQWlvQ29udGV4dC4gIFRocmVh ZC1sb2NhbCBkYXRhCisgKiBoYXMgbm9uZSBvZiB0aGUgZGlzYWR2YW50YWdlcyBvZiB0aGVzZSB0 aHJlZSBvcHRpb25zLgorICovCitzdGF0aWMgX190aHJlYWQgR1BvbGxGRCAqcG9sbGZkczsKK3N0 YXRpYyBfX3RocmVhZCBBaW9IYW5kbGVyICoqbm9kZXM7CitzdGF0aWMgX190aHJlYWQgdW5zaWdu ZWQgbnBmZCwgbmFsbG9jOworc3RhdGljIF9fdGhyZWFkIE5vdGlmaWVyIHBvbGxmZHNfY2xlYW51 cF9ub3RpZmllcjsKKworc3RhdGljIHZvaWQgcG9sbGZkc19jbGVhbnVwKE5vdGlmaWVyICpuLCB2 b2lkICp1bnVzZWQpCit7CisgICAgZ19hc3NlcnQobnBmZCA9PSAwKTsKKyAgICBnX2ZyZWUocG9s bGZkcyk7CisgICAgZ19mcmVlKG5vZGVzKTsKKyAgICBuYWxsb2MgPSAwOworfQorCitzdGF0aWMg dm9pZCBhZGRfcG9sbGZkKEFpb0hhbmRsZXIgKm5vZGUpCit7CisgICAgaWYgKG5wZmQgPT0gbmFs bG9jKSB7CisgICAgICAgIGlmIChuYWxsb2MgPT0gMCkgeworICAgICAgICAgICAgcG9sbGZkc19j bGVhbnVwX25vdGlmaWVyLm5vdGlmeSA9IHBvbGxmZHNfY2xlYW51cDsKKyAgICAgICAgICAgIHFl bXVfdGhyZWFkX2F0ZXhpdF9hZGQoJnBvbGxmZHNfY2xlYW51cF9ub3RpZmllcik7CisgICAgICAg ICAgICBuYWxsb2MgPSA4OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZ19hc3NlcnQo bmFsbG9jIDw9IElOVF9NQVgpOworICAgICAgICAgICAgbmFsbG9jICo9IDI7CisgICAgICAgIH0K KyAgICAgICAgcG9sbGZkcyA9IGdfcmVuZXcoR1BvbGxGRCwgcG9sbGZkcywgbmFsbG9jKTsKKyAg ICAgICAgbm9kZXMgPSBnX3JlbmV3KEFpb0hhbmRsZXIgKiwgbm9kZXMsIG5hbGxvYyk7CisgICAg fQorICAgIG5vZGVzW25wZmRdID0gbm9kZTsKKyAgICBwb2xsZmRzW25wZmRdID0gKEdQb2xsRkQp IHsKKyAgICAgICAgLmZkID0gbm9kZS0+cGZkLmZkLAorICAgICAgICAuZXZlbnRzID0gbm9kZS0+ cGZkLmV2ZW50cywKKyAgICB9OworICAgIG5wZmQrKzsKK30KKworc3RhdGljIGludCBmZG1vbl9w b2xsX3dhaXQoQWlvQ29udGV4dCAqY3R4LCBBaW9IYW5kbGVyTGlzdCAqcmVhZHlfbGlzdCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IHRpbWVvdXQpCit7CisgICAgQWlvSGFu ZGxlciAqbm9kZTsKKyAgICBpbnQgcmV0OworCisgICAgYXNzZXJ0KG5wZmQgPT0gMCk7CisKKyAg ICBRTElTVF9GT1JFQUNIX1JDVShub2RlLCAmY3R4LT5haW9faGFuZGxlcnMsIG5vZGUpIHsKKyAg ICAgICAgaWYgKCFRTElTVF9JU19JTlNFUlRFRChub2RlLCBub2RlX2RlbGV0ZWQpICYmIG5vZGUt PnBmZC5ldmVudHMKKyAgICAgICAgICAgICAgICAmJiBhaW9fbm9kZV9jaGVjayhjdHgsIG5vZGUt PmlzX2V4dGVybmFsKSkgeworICAgICAgICAgICAgYWRkX3BvbGxmZChub2RlKTsKKyAgICAgICAg fQorICAgIH0KKworICAgIC8qIGVwb2xsKDcpIGlzIGZhc3RlciBhYm92ZSBhIGNlcnRhaW4gbnVt YmVyIG9mIGZkcyAqLworICAgIGlmIChmZG1vbl9lcG9sbF90cnlfdXBncmFkZShjdHgsIG5wZmQp KSB7CisgICAgICAgIHJldHVybiBjdHgtPmZkbW9uX29wcy0+d2FpdChjdHgsIHJlYWR5X2xpc3Qs IHRpbWVvdXQpOworICAgIH0KKworICAgIHJldCA9IHFlbXVfcG9sbF9ucyhwb2xsZmRzLCBucGZk LCB0aW1lb3V0KTsKKyAgICBpZiAocmV0ID4gMCkgeworICAgICAgICBpbnQgaTsKKworICAgICAg ICBmb3IgKGkgPSAwOyBpIDwgbnBmZDsgaSsrKSB7CisgICAgICAgICAgICBpbnQgcmV2ZW50cyA9 IHBvbGxmZHNbaV0ucmV2ZW50czsKKworICAgICAgICAgICAgaWYgKHJldmVudHMpIHsKKyAgICAg ICAgICAgICAgICBhaW9fYWRkX3JlYWR5X2hhbmRsZXIocmVhZHlfbGlzdCwgbm9kZXNbaV0sIHJl dmVudHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgbnBmZCA9IDA7 CisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZmRtb25fcG9sbF91cGRhdGUoQWlv Q29udGV4dCAqY3R4LCBBaW9IYW5kbGVyICpub2RlLCBib29sIGlzX25ldykKK3sKKyAgICAvKiBE byBub3RoaW5nLCBBaW9IYW5kbGVyIGFscmVhZHkgY29udGFpbnMgdGhlIHN0YXRlIHdlJ2xsIG5l ZWQgKi8KK30KKworY29uc3QgRkRNb25PcHMgZmRtb25fcG9sbF9vcHMgPSB7CisgICAgLnVwZGF0 ZSA9IGZkbW9uX3BvbGxfdXBkYXRlLAorICAgIC53YWl0ID0gZmRtb25fcG9sbF93YWl0LAorfTsK LS0gCjIuMjQuMQoK