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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 91CB0C433F5 for ; Wed, 18 May 2022 03:05:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:From:Subject:References: Mime-Version:Message-Id:In-Reply-To:Date:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=+JuAThGKVg9YtmtYhGv3vTgJwgZzwDz+113/XPmJS1U=; b=i3vX3jWvj1qRr0hg5IRmyqwmo4 ALEeHNrg/4ycjcpMYq+eGhsk6sidfrfFkWXTZ9QZovJDfJ45OvPpO8fQ4ZSVfnzsIBxOyhTnAO1Z8 TPwjwgnTd7xQ5YDW/tgeCv5KPzM+u2rATiNl0C/e03pqllVknN74exG20m0/NAZ5lQB7S/togs3Ne TP34HekqmAWKuHvPn22DR+1ZGRtjLFV4hdHLKHo/R+vzM9lVtABlQkd09mmMN3oixm7mDSyILCNVa GIuLZGtmHZzUpws2JwUl2qPyYMxDiR/dtZRAGDxqTVQ6MJ3p0oOfk2a/jQdYa2OiHe+0JU6HIcwtQ OBnelSeA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nr9yW-00GnEK-3l; Wed, 18 May 2022 03:03:50 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nr9wc-00GmIb-Fc for linux-arm-kernel@bombadil.infradead.org; Wed, 18 May 2022 03:01:50 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Content-Transfer-Encoding:Content-Type :Cc:To:From:Subject:References:Mime-Version:Message-Id:In-Reply-To:Date: Sender:Reply-To:Content-ID:Content-Description; bh=iMUum4oayASrVd38eQwbqeH3l0KJDrlIs7oQvS50rmk=; b=WmW03qBTr15MZozJ6ZuCxVYi3B D71DPqMkdcscV5t05LwcNBygUFMgIzowINzdV3JT7kRmUfvN1bt+9YOl862kYJjlp6purxaXjh7rb Vee4y5JHaMOOuwW54as1m+t9HdtrnNzDQBkwxoX/bv2KLgtColeA/1XUNj3b0efc3Fo99zzmQT5A/ 5rnK1P510lA/UgWSKHUSMSnyVZyY1/Fjy39+/vf9ySXemojqiNlTrfM0OYH1NCEHHUd8pyfX6RlKz M3jtKMkHstXiaeUX8iMj2GEcIwk6dUypo9v0ssTcAr0l5ZV8BWEX6/UK2LfqE5rIAuZl3HOMe/YEK X0HT569A==; Received: from mail-io1-xd4a.google.com ([2607:f8b0:4864:20::d4a]) by desiato.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nr8mH-001Ow7-Dn for linux-arm-kernel@lists.infradead.org; Wed, 18 May 2022 01:47:09 +0000 Received: by mail-io1-xd4a.google.com with SMTP id m22-20020a0566022e9600b0065dd0511560so10677780iow.2 for ; Tue, 17 May 2022 18:47:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc:content-transfer-encoding; bh=iMUum4oayASrVd38eQwbqeH3l0KJDrlIs7oQvS50rmk=; b=HOGuPLk4pea7kZOf8/8xEnWpFAvWhETkdy0zM1uAW8txEYwG6qHJfwzRlckeGVXtmT Iht3HG3gRybZ2m5Ek+nKvBKtk/GK9yXDnrTJufjQ3xL61WSbxrteixzt+Ctdf6DKxmes 1yiwZlk1gqbWHHEOePU6pFRupL3i/JNQhuNnwA0LTUIvQXgdXwryEKUOAgjtwv5eaBA4 fRVocraJzdduX/TZyYIYPAeGCpkUi92M+YNY2/xhUvgJYt7eukhfdJyYFy7ir4twh8OD w4rwkX8IWlW/3yIy1/egJ2Trq/oQYB1IGulETTb8pAKfKnn6y2HYn0+tXgdSGv1bUOTt +xPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc:content-transfer-encoding; bh=iMUum4oayASrVd38eQwbqeH3l0KJDrlIs7oQvS50rmk=; b=FrS5TKPalXM7o2MCqjC1568vmwnpY3zbvIEgrBZSLId/H2C3WNv6NQ0dEHza9oAM8I 8wR6skLQW50Dyx3IPvWvU92VxfFsCY7aq0qMrKvLqHMLgzSRZGS/eiGe6qpzL5s5+hHN gp1YyJpS8138y5qnqZUJ3y4lCp+WPISnbinRyo7KEaoP+q89xbBMEreGL8rfmzAmDkB4 XI4Wtsl/1H86GqwvBOxh7A45ExdwW0CYtMbfcEy31OQvYkXdsz+ngEcLX3Z+Zrwt/Qb/ 3n2wb6W28aBp68UqG0LZC9li2Mg76F7Zr2kF2yAJCATlAjdqHP50xXcp2WEfWg/vRHLH Kp3Q== X-Gm-Message-State: AOAM5334monv4976leW08xRQWgqZ+ajAEDD7DYOHEIxcD8McOTDq6cW4 3zaBWMSs8G8gTMU2gYlLoqDyhfNpP+A= X-Google-Smtp-Source: ABdhPJwJ0Tnl/R9U39FiMVm/fDi71yI7+/4DMvC0HIczyZ6y9l2A6E755d8kGMmKnv1Cg0TOt5mKl/500Us= X-Received: from yuzhao.bld.corp.google.com ([2620:15c:183:200:f7bc:90c9:d86e:4ea8]) (user=yuzhao job=sendgmr) by 2002:a05:6602:1409:b0:5e7:487:133c with SMTP id t9-20020a056602140900b005e70487133cmr11313973iov.196.1652838423113; Tue, 17 May 2022 18:47:03 -0700 (PDT) Date: Tue, 17 May 2022 19:46:25 -0600 In-Reply-To: <20220518014632.922072-1-yuzhao@google.com> Message-Id: <20220518014632.922072-7-yuzhao@google.com> Mime-Version: 1.0 References: <20220518014632.922072-1-yuzhao@google.com> X-Mailer: git-send-email 2.36.0.550.gb090851708-goog Subject: [PATCH v11 06/14] mm: multi-gen LRU: minimal implementation From: Yu Zhao To: Andrew Morton , linux-mm@kvack.org Cc: Andi Kleen , Aneesh Kumar , Catalin Marinas , Dave Hansen , Hillf Danton , Jens Axboe , Johannes Weiner , Jonathan Corbet , Linus Torvalds , Matthew Wilcox , Mel Gorman , Michael Larabel , Michal Hocko , Mike Rapoport , Peter Zijlstra , Tejun Heo , Vlastimil Babka , Will Deacon , linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, x86@kernel.org, page-reclaim@google.com, Yu Zhao , Brian Geffon , Jan Alexander Steffens , Oleksandr Natalenko , Steven Barrett , Suleiman Souhlal , Daniel Byrne , Donald Carr , "=?UTF-8?q?Holger=20Hoffst=C3=A4tte?=" , Konstantin Kharlamov , Shuang Zhai , Sofia Trinh , Vaibhav Jain X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220518_024705_829721_AFC5E3AF X-CRM114-Status: GOOD ( 25.00 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org VG8gYXZvaWQgY29uZnVzaW9uLCB0aGUgdGVybXMgInByb21vdGlvbiIgYW5kICJkZW1vdGlvbiIg d2lsbCBiZQphcHBsaWVkIHRvIHRoZSBtdWx0aS1nZW4gTFJVLCBhcyBhIG5ldyBjb252ZW50aW9u OyB0aGUgdGVybXMKImFjdGl2YXRpb24iIGFuZCAiZGVhY3RpdmF0aW9uIiB3aWxsIGJlIGFwcGxp ZWQgdG8gdGhlIGFjdGl2ZS9pbmFjdGl2ZQpMUlUsIGFzIHVzdWFsLgoKVGhlIGFnaW5nIHByb2R1 Y2VzIHlvdW5nIGdlbmVyYXRpb25zLiBHaXZlbiBhbiBscnV2ZWMsIGl0IGluY3JlbWVudHMKbWF4 X3NlcSB3aGVuIG1heF9zZXEtbWluX3NlcSsxIGFwcHJvYWNoZXMgTUlOX05SX0dFTlMuIFRoZSBh Z2luZwpwcm9tb3RlcyBob3QgcGFnZXMgdG8gdGhlIHlvdW5nZXN0IGdlbmVyYXRpb24gd2hlbiBp dCBmaW5kcyB0aGVtCmFjY2Vzc2VkIHRocm91Z2ggcGFnZSB0YWJsZXM7IHRoZSBkZW1vdGlvbiBv ZiBjb2xkIHBhZ2VzIGhhcHBlbnMKY29uc2VxdWVudGx5IHdoZW4gaXQgaW5jcmVtZW50cyBtYXhf c2VxLiBUaGUgYWdpbmcgaGFzIHRoZSBjb21wbGV4aXR5Ck8obnJfaG90X3BhZ2VzKSwgc2luY2Ug aXQgaXMgb25seSBpbnRlcmVzdGVkIGluIGhvdCBwYWdlcy4gUHJvbW90aW9uCmluIHRoZSBhZ2lu ZyBwYXRoIGRvZXMgbm90IGludm9sdmUgYW55IExSVSBsaXN0IG9wZXJhdGlvbnMsIG9ubHkgdGhl CnVwZGF0ZXMgb2YgdGhlIGdlbiBjb3VudGVyIGFuZCBscnVnZW4tPm5yX3BhZ2VzW107IGRlbW90 aW9uLCB1bmxlc3MgYXMKdGhlIHJlc3VsdCBvZiB0aGUgaW5jcmVtZW50IG9mIG1heF9zZXEsIHJl cXVpcmVzIExSVSBsaXN0IG9wZXJhdGlvbnMsCmUuZy4sIGxydV9kZWFjdGl2YXRlX2ZuKCkuCgpU aGUgZXZpY3Rpb24gY29uc3VtZXMgb2xkIGdlbmVyYXRpb25zLiBHaXZlbiBhbiBscnV2ZWMsIGl0 IGluY3JlbWVudHMKbWluX3NlcSB3aGVuIHRoZSBsaXN0cyBpbmRleGVkIGJ5IG1pbl9zZXElTUFY X05SX0dFTlMgYmVjb21lIGVtcHR5LiBBCmZlZWRiYWNrIGxvb3AgbW9kZWxlZCBhZnRlciB0aGUg UElEIGNvbnRyb2xsZXIgbW9uaXRvcnMgcmVmYXVsdHMgb3Zlcgphbm9uIGFuZCBmaWxlIHR5cGVz IGFuZCBkZWNpZGVzIHdoaWNoIHR5cGUgdG8gZXZpY3Qgd2hlbiBib3RoIHR5cGVzCmFyZSBhdmFp bGFibGUgZnJvbSB0aGUgc2FtZSBnZW5lcmF0aW9uLgoKRWFjaCBnZW5lcmF0aW9uIGlzIGRpdmlk ZWQgaW50byBtdWx0aXBsZSB0aWVycy4gVGllcnMgcmVwcmVzZW50CmRpZmZlcmVudCByYW5nZXMg b2YgbnVtYmVycyBvZiBhY2Nlc3NlcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMuIEEKcGFnZSBh Y2Nlc3NlZCBOIHRpbWVzIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycyBpcyBpbiB0aWVyCm9yZGVy X2Jhc2VfMihOKS4gVGllcnMgZG8gbm90IGhhdmUgZGVkaWNhdGVkIGxydWdlbi0+bGlzdHNbXSwg b25seQpiaXRzIGluIGZvbGlvLT5mbGFncy4gSW4gY29udHJhc3QgdG8gbW92aW5nIGFjcm9zcyBn ZW5lcmF0aW9ucywgd2hpY2gKcmVxdWlyZXMgdGhlIExSVSBsb2NrLCBtb3ZpbmcgYWNyb3NzIHRp ZXJzIG9ubHkgaW52b2x2ZXMgb3BlcmF0aW9ucyBvbgpmb2xpby0+ZmxhZ3MuIFRoZSBmZWVkYmFj ayBsb29wIGFsc28gbW9uaXRvcnMgcmVmYXVsdHMgb3ZlciBhbGwgdGllcnMKYW5kIGRlY2lkZXMg d2hlbiB0byBwcm90ZWN0IHBhZ2VzIGluIHdoaWNoIHRpZXJzIChOPjEpLCB1c2luZyB0aGUKZmly c3QgdGllciAoTj0wLDEpIGFzIGEgYmFzZWxpbmUuIFRoZSBmaXJzdCB0aWVyIGNvbnRhaW5zIHNp bmdsZS11c2UKdW5tYXBwZWQgY2xlYW4gcGFnZXMsIHdoaWNoIGFyZSBtb3N0IGxpa2VseSB0aGUg YmVzdCBjaG9pY2VzLiBUaGUKZXZpY3Rpb24gbW92ZXMgYSBwYWdlIHRvIHRoZSBuZXh0IGdlbmVy YXRpb24sIGkuZS4sIG1pbl9zZXErMSwgaWYgdGhlCmZlZWRiYWNrIGxvb3AgZGVjaWRlcyBzby4g VGhpcyBhcHByb2FjaCBoYXMgdGhlIGZvbGxvd2luZyBhZHZhbnRhZ2VzOgoxLiBJdCByZW1vdmVz IHRoZSBjb3N0IG9mIGFjdGl2YXRpb24gaW4gdGhlIGJ1ZmZlcmVkIGFjY2VzcyBwYXRoIGJ5CiAg IGluZmVycmluZyB3aGV0aGVyIHBhZ2VzIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2gg ZmlsZQogICBkZXNjcmlwdG9ycyBhcmUgc3RhdGlzdGljYWxseSBob3QgYW5kIHRodXMgd29ydGgg cHJvdGVjdGluZyBpbiB0aGUKICAgZXZpY3Rpb24gcGF0aC4KMi4gSXQgdGFrZXMgcGFnZXMgYWNj ZXNzZWQgdGhyb3VnaCBwYWdlIHRhYmxlcyBpbnRvIGFjY291bnQgYW5kIGF2b2lkcwogICBvdmVy cHJvdGVjdGluZyBwYWdlcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUKICAg ZGVzY3JpcHRvcnMuIChQYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzIGFyZSBpbiB0 aGUgZmlyc3QKICAgdGllciwgc2luY2UgTj0wLikKMy4gTW9yZSB0aWVycyBwcm92aWRlIGJldHRl ciBwcm90ZWN0aW9uIGZvciBwYWdlcyBhY2Nlc3NlZCBtb3JlIHRoYW4KICAgdHdpY2UgdGhyb3Vn aCBmaWxlIGRlc2NyaXB0b3JzLCB3aGVuIHVuZGVyIGhlYXZ5IGJ1ZmZlcmVkIEkvTwogICB3b3Jr bG9hZHMuCgpTZXJ2ZXIgYmVuY2htYXJrIHJlc3VsdHM6CiAgU2luZ2xlIHdvcmtsb2FkOgogICAg ZmlvIChidWZmZXJlZCBJL08pOiArWzQwLCA0Ml0lCiAgICAgICAgICAgICAgICBJT1BTICAgICAg ICAgQlcKICAgICAgNS4xOC1yYzE6IDI0NjNrICAgICAgICA5NjIxTWlCL3MKICAgICAgcGF0Y2gx LTY6IDM0ODRrICAgICAgICAxMy4zR2lCL3MKCiAgU2luZ2xlIHdvcmtsb2FkOgogICAgbWVtY2Fj aGVkIChhbm9uKTogK1s0NCwgNDZdJQogICAgICAgICAgICAgICAgT3BzL3NlYyAgICAgIEtCL3Nl YwogICAgICA1LjE4LXJjMTogNzcxNDAzLjI3ICAgIDMwMDA0LjE3CiAgICAgIHBhdGNoMS02OiAx MTIwNjQzLjcwICAgNDM1ODguMDYKCiAgQ29uZmlndXJhdGlvbnM6CiAgICBDUFU6IHR3byBYZW9u IDYxNTQKICAgIE1lbTogdG90YWwgMjU2RwoKICAgIE5vZGUgMSB3YXMgb25seSB1c2VkIGFzIGEg cmFtIGRpc2sgdG8gcmVkdWNlIHRoZSB2YXJpYW5jZSBpbiB0aGUKICAgIHJlc3VsdHMuCgogICAg cGF0Y2ggZHJpdmVycy9ibG9jay9icmQuYyA8PEVPRgogICAgOTksMTAwYzk5LDEwMAogICAgPCAJ Z2ZwX2ZsYWdzID0gR0ZQX05PSU8gfCBfX0dGUF9aRVJPIHwgX19HRlBfSElHSE1FTTsKICAgIDwg CXBhZ2UgPSBhbGxvY19wYWdlKGdmcF9mbGFncyk7CiAgICAtLS0KICAgID4gCWdmcF9mbGFncyA9 IEdGUF9OT0lPIHwgX19HRlBfWkVSTyB8IF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9USElTTk9ERTsK ICAgID4gCXBhZ2UgPSBhbGxvY19wYWdlc19ub2RlKDEsIGdmcF9mbGFncywgMCk7CiAgICBFT0YK CiAgICBjYXQgPj4vZXRjL3N5c3RlbWQvc3lzdGVtLmNvbmYgPDxFT0YKICAgIENQVUFmZmluaXR5 PW51bWEKICAgIE5VTUFQb2xpY3k9YmluZAogICAgTlVNQU1hc2s9MAogICAgRU9GCgogICAgY2F0 ID4+L2V0Yy9tZW1jYWNoZWQuY29uZiA8PEVPRgogICAgLW0gMTg0MzIwCiAgICAtcyAvdmFyL3J1 bi9tZW1jYWNoZWQvbWVtY2FjaGVkLnNvY2sKICAgIC1hIDA3NjYKICAgIC10IDM2CiAgICAtQiBi aW5hcnkKICAgIEVPRgoKICAgIGNhdCBmaW8uc2gKICAgIG1vZHByb2JlIGJyZCByZF9ucj0xIHJk X3NpemU9MTEzMjQ2MjA4CiAgICBzd2Fwb2ZmIC1hCiAgICBta2ZzLmV4dDQgL2Rldi9yYW0wCiAg ICBtb3VudCAtdCBleHQ0IC9kZXYvcmFtMCAvbW50CgogICAgbWtkaXIgL3N5cy9mcy9jZ3JvdXAv dXNlci5zbGljZS90ZXN0CiAgICBlY2hvIDM4NjU0NzA1NjY0ID4vc3lzL2ZzL2Nncm91cC91c2Vy LnNsaWNlL3Rlc3QvbWVtb3J5Lm1heAogICAgZWNobyAkJCA+L3N5cy9mcy9jZ3JvdXAvdXNlci5z bGljZS90ZXN0L2Nncm91cC5wcm9jcwogICAgZmlvIC1uYW1lPW1nbHJ1IC0tbnVtam9icz03MiAt LWRpcmVjdG9yeT0vbW50IC0tc2l6ZT0xNDA4bSBcCiAgICAgIC0tYnVmZmVyZWQ9MSAtLWlvZW5n aW5lPWlvX3VyaW5nIC0taW9kZXB0aD0xMjggXAogICAgICAtLWlvZGVwdGhfYmF0Y2hfc3VibWl0 PTMyIC0taW9kZXB0aF9iYXRjaF9jb21wbGV0ZT0zMiBcCiAgICAgIC0tcnc9cmFuZHJlYWQgLS1y YW5kb21fZGlzdHJpYnV0aW9uPXJhbmRvbSAtLW5vcmFuZG9tbWFwIFwKICAgICAgLS10aW1lX2Jh c2VkIC0tcmFtcF90aW1lPTEwbSAtLXJ1bnRpbWU9NW0gLS1ncm91cF9yZXBvcnRpbmcKCiAgICBj YXQgbWVtY2FjaGVkLnNoCiAgICBtb2Rwcm9iZSBicmQgcmRfbnI9MSByZF9zaXplPTExMzI0NjIw OAogICAgc3dhcG9mZiAtYQogICAgbWtzd2FwIC9kZXYvcmFtMAogICAgc3dhcG9uIC9kZXYvcmFt MAoKICAgIG1lbXRpZXJfYmVuY2htYXJrIC1TIC92YXIvcnVuL21lbWNhY2hlZC9tZW1jYWNoZWQu c29jayBcCiAgICAgIC1QIG1lbWNhY2hlX2JpbmFyeSAtbiBhbGxrZXlzIC0ta2V5LW1pbmltdW09 MSBcCiAgICAgIC0ta2V5LW1heGltdW09NjUwMDAwMDAgLS1rZXktcGF0dGVybj1QOlAgLWMgMSAt dCAzNiBcCiAgICAgIC0tcmF0aW8gMTowIC0tcGlwZWxpbmUgOCAtZCAyMDAwCgogICAgbWVtdGll cl9iZW5jaG1hcmsgLVMgL3Zhci9ydW4vbWVtY2FjaGVkL21lbWNhY2hlZC5zb2NrIFwKICAgICAg LVAgbWVtY2FjaGVfYmluYXJ5IC1uIGFsbGtleXMgLS1rZXktbWluaW11bT0xIFwKICAgICAgLS1r ZXktbWF4aW11bT02NTAwMDAwMCAtLWtleS1wYXR0ZXJuPVI6UiAtYyAxIC10IDM2IFwKICAgICAg LS1yYXRpbyAwOjEgLS1waXBlbGluZSA4IC0tcmFuZG9taXplIC0tZGlzdGluY3QtY2xpZW50LXNl ZWQKCkNsaWVudCBiZW5jaG1hcmsgcmVzdWx0czoKICBrc3dhcGQgcHJvZmlsZXM6CiAgICA1LjE4 LXJjMQogICAgICA0MC41MyUgIHBhZ2Vfdm1hX21hcHBlZF93YWxrCiAgICAgIDIwLjM3JSAgbHpv MXhfMV9kb19jb21wcmVzcyAocmVhbCB3b3JrKQogICAgICAgNi45OSUgIGRvX3Jhd19zcGluX2xv Y2sKICAgICAgIDMuOTMlICBfcmF3X3NwaW5fdW5sb2NrX2lycQogICAgICAgMi4wOCUgIHZtYV9p bnRlcnZhbF90cmVlX3N1YnRyZWVfc2VhcmNoCiAgICAgICAyLjA2JSAgdm1hX2ludGVydmFsX3Ry ZWVfaXRlcl9uZXh0CiAgICAgICAxLjk1JSAgZm9saW9fcmVmZXJlbmNlZF9vbmUKICAgICAgIDEu OTMlICBhbm9uX3ZtYV9pbnRlcnZhbF90cmVlX2l0ZXJfZmlyc3QKICAgICAgIDEuNTElICBwdGVw X2NsZWFyX2ZsdXNoCiAgICAgICAxLjM1JSAgX19hbm9uX3ZtYV9pbnRlcnZhbF90cmVlX3N1YnRy ZWVfc2VhcmNoCgogICAgcGF0Y2gxLTYKICAgICAgMzUuOTklICBsem8xeF8xX2RvX2NvbXByZXNz IChyZWFsIHdvcmspCiAgICAgIDE5LjQwJSAgcGFnZV92bWFfbWFwcGVkX3dhbGsKICAgICAgIDYu MzElICBfcmF3X3NwaW5fdW5sb2NrX2lycQogICAgICAgMy45NSUgIGRvX3Jhd19zcGluX2xvY2sK ICAgICAgIDIuMzklICBhbm9uX3ZtYV9pbnRlcnZhbF90cmVlX2l0ZXJfZmlyc3QKICAgICAgIDIu MjUlICBwdGVwX2NsZWFyX2ZsdXNoCiAgICAgICAxLjkyJSAgX19hbm9uX3ZtYV9pbnRlcnZhbF90 cmVlX3N1YnRyZWVfc2VhcmNoCiAgICAgICAxLjcwJSAgZm9saW9fcmVmZXJlbmNlZF9vbmUKICAg ICAgIDEuNjglICBfX3pyYW1fYnZlY193cml0ZQogICAgICAgMS40MyUgIGFub25fdm1hX2ludGVy dmFsX3RyZWVfaXRlcl9uZXh0CgogIENvbmZpZ3VyYXRpb25zOgogICAgQ1BVOiBzaW5nbGUgU25h cGRyYWdvbiA3YwogICAgTWVtOiB0b3RhbCA0RwoKICAgIENocm9tZSBPUyBNZW1vcnlQcmVzc3Vy ZSBbMV0KClsxXSBodHRwczovL2Nocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW1vcy9w bGF0Zm9ybS90YXN0LXRlc3RzLwoKU2lnbmVkLW9mZi1ieTogWXUgWmhhbyA8eXV6aGFvQGdvb2ds ZS5jb20+CkFja2VkLWJ5OiBCcmlhbiBHZWZmb24gPGJnZWZmb25AZ29vZ2xlLmNvbT4KQWNrZWQt Ynk6IEphbiBBbGV4YW5kZXIgU3RlZmZlbnMgKGhlZnRpZykgPGhlZnRpZ0BhcmNobGludXgub3Jn PgpBY2tlZC1ieTogT2xla3NhbmRyIE5hdGFsZW5rbyA8b2xla3NhbmRyQG5hdGFsZW5rby5uYW1l PgpBY2tlZC1ieTogU3RldmVuIEJhcnJldHQgPHN0ZXZlbkBsaXF1b3JpeC5uZXQ+CkFja2VkLWJ5 OiBTdWxlaW1hbiBTb3VobGFsIDxzdWxlaW1hbkBnb29nbGUuY29tPgpUZXN0ZWQtYnk6IERhbmll bCBCeXJuZSA8ZGpieXJuZUBtdHUuZWR1PgpUZXN0ZWQtYnk6IERvbmFsZCBDYXJyIDxkQGNoYW9z LXJlaW5zLmNvbT4KVGVzdGVkLWJ5OiBIb2xnZXIgSG9mZnN0w6R0dGUgPGhvbGdlckBhcHBsaWVk LWFzeW5jaHJvbnkuY29tPgpUZXN0ZWQtYnk6IEtvbnN0YW50aW4gS2hhcmxhbW92IDxIaS1Bbmdl bEB5YW5kZXgucnU+ClRlc3RlZC1ieTogU2h1YW5nIFpoYWkgPHN6aGFpMkBjcy5yb2NoZXN0ZXIu ZWR1PgpUZXN0ZWQtYnk6IFNvZmlhIFRyaW5oIDxzb2ZpYS50cmluaEBlZGkud29ya3M+ClRlc3Rl ZC1ieTogVmFpYmhhdiBKYWluIDx2YWliaGF2QGxpbnV4LmlibS5jb20+Ci0tLQogaW5jbHVkZS9s aW51eC9tbV9pbmxpbmUuaCAgICAgICAgIHwgIDM2ICsrCiBpbmNsdWRlL2xpbnV4L21tem9uZS5o ICAgICAgICAgICAgfCAgNDIgKysKIGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy1sYXlvdXQuaCB8 ICAgNSArLQoga2VybmVsL2JvdW5kcy5jICAgICAgICAgICAgICAgICAgIHwgICAyICsKIG1tL0tj b25maWcgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMSArCiBtbS9zd2FwLmMgICAgICAgICAg ICAgICAgICAgICAgICAgfCAgMzkgKysKIG1tL3Ztc2Nhbi5jICAgICAgICAgICAgICAgICAgICAg ICB8IDc5OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KIG1tL3dvcmtpbmdzZXQuYyAg ICAgICAgICAgICAgICAgICB8IDExMCArKystCiA4IGZpbGVzIGNoYW5nZWQsIDEwMzQgaW5zZXJ0 aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV9p bmxpbmUuaCBiL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKaW5kZXggOThhZTIyYmZhZjEyLi44 NWZlNzg4MzI0MzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1faW5saW5lLmgKKysrIGIv aW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaApAQCAtMTE5LDYgKzExOSwzMyBAQCBzdGF0aWMgaW5s aW5lIGludCBscnVfZ2VuX2Zyb21fc2VxKHVuc2lnbmVkIGxvbmcgc2VxKQogCXJldHVybiBzZXEg JSBNQVhfTlJfR0VOUzsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgbHJ1X2hpc3RfZnJvbV9zZXEo dW5zaWduZWQgbG9uZyBzZXEpCit7CisJcmV0dXJuIHNlcSAlIE5SX0hJU1RfR0VOUzsKK30KKwor c3RhdGljIGlubGluZSBpbnQgbHJ1X3RpZXJfZnJvbV9yZWZzKGludCByZWZzKQoreworCVZNX1dB Uk5fT05fT05DRShyZWZzID4gQklUKExSVV9SRUZTX1dJRFRIKSk7CisKKwkvKiBzZWUgdGhlIGNv bW1lbnQgaW4gZm9saW9fbHJ1X3JlZnMoKSAqLworCXJldHVybiBvcmRlcl9iYXNlXzIocmVmcyAr IDEpOworfQorCitzdGF0aWMgaW5saW5lIGludCBmb2xpb19scnVfcmVmcyhzdHJ1Y3QgZm9saW8g KmZvbGlvKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tPmZsYWdz KTsKKwlib29sIHdvcmtpbmdzZXQgPSBmbGFncyAmIEJJVChQR193b3JraW5nc2V0KTsKKworCS8q CisJICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYWNjZXNzZXMgYmV5b25kIFBHX3JlZmVyZW5jZWQs IGkuZS4sIE4tMSBpZiB0aGUKKwkgKiB0b3RhbCBudW1iZXIgb2YgYWNjZXNzZXMgaXMgTj4xLCBz aW5jZSBOPTAsMSBib3RoIG1hcCB0byB0aGUgZmlyc3QKKwkgKiB0aWVyLiBscnVfdGllcl9mcm9t X3JlZnMoKSB3aWxsIGFjY291bnQgZm9yIHRoaXMgb2ZmLWJ5LW9uZS4gQWxzbyBzZWUKKwkgKiB0 aGUgY29tbWVudCBvbiBNQVhfTlJfVElFUlMuCisJICovCisJcmV0dXJuICgoZmxhZ3MgJiBMUlVf UkVGU19NQVNLKSA+PiBMUlVfUkVGU19QR09GRikgKyB3b3JraW5nc2V0OworfQorCiBzdGF0aWMg aW5saW5lIGludCBmb2xpb19scnVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJdW5zaWdu ZWQgbG9uZyBmbGFncyA9IFJFQURfT05DRShmb2xpby0+ZmxhZ3MpOwpAQCAtMTcxLDYgKzE5OCwx NSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2dlbl91cGRhdGVfc2l6ZShzdHJ1Y3QgbHJ1dmVj ICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saQogCQlfX3VwZGF0ZV9scnVfc2l6ZShscnV2ZWMs IGxydSwgem9uZSwgLWRlbHRhKTsKIAkJcmV0dXJuOwogCX0KKworCS8qIHByb21vdGlvbiAqLwor CWlmICghbHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVjLCBvbGRfZ2VuKSAmJiBscnVfZ2VuX2lzX2Fj dGl2ZShscnV2ZWMsIG5ld19nZW4pKSB7CisJCV9fdXBkYXRlX2xydV9zaXplKGxydXZlYywgbHJ1 LCB6b25lLCAtZGVsdGEpOworCQlfX3VwZGF0ZV9scnVfc2l6ZShscnV2ZWMsIGxydSArIExSVV9B Q1RJVkUsIHpvbmUsIGRlbHRhKTsKKwl9CisKKwkvKiBkZW1vdGlvbiByZXF1aXJlcyBpc29sYXRp b24sIGUuZy4sIGxydV9kZWFjdGl2YXRlX2ZuKCkgKi8KKwlWTV9XQVJOX09OX09OQ0UobHJ1X2dl bl9pc19hY3RpdmUobHJ1dmVjLCBvbGRfZ2VuKSAmJiAhbHJ1X2dlbl9pc19hY3RpdmUobHJ1dmVj LCBuZXdfZ2VuKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2FkZF9mb2xpbyhz dHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcmVjbGFpbWlu ZykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21t em9uZS5oCmluZGV4IDY5OTRhY2VmNjNjYi4uMmQwMjNkMjQzZTczIDEwMDY0NAotLS0gYS9pbmNs dWRlL2xpbnV4L21tem9uZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTM0OCw2 ICszNDgsMjkgQEAgZW51bSBscnV2ZWNfZmxhZ3MgewogI2RlZmluZSBNSU5fTlJfR0VOUwkJMlUK ICNkZWZpbmUgTUFYX05SX0dFTlMJCTRVCiAKKy8qCisgKiBFYWNoIGdlbmVyYXRpb24gaXMgZGl2 aWRlZCBpbnRvIG11bHRpcGxlIHRpZXJzLiBUaWVycyByZXByZXNlbnQgZGlmZmVyZW50CisgKiBy YW5nZXMgb2YgbnVtYmVycyBvZiBhY2Nlc3NlcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMuIEEg cGFnZSBhY2Nlc3NlZCBOCisgKiB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgaXMgaW4g dGllciBvcmRlcl9iYXNlXzIoTikuIEEgcGFnZSBpbiB0aGUKKyAqIGZpcnN0IHRpZXIgKE49MCwx KSBpcyBtYXJrZWQgYnkgUEdfcmVmZXJlbmNlZCB1bmxlc3MgaXQgd2FzIGZhdWx0ZWQgaW4KKyAq IHRob3VnaCBwYWdlIHRhYmxlcyBvciByZWFkIGFoZWFkLiBBIHBhZ2UgaW4gYW55IG90aGVyIHRp ZXIgKE4+MSkgaXMgbWFya2VkCisgKiBieSBQR19yZWZlcmVuY2VkIGFuZCBQR193b3JraW5nc2V0 LiBUaGlzIGltcGxpZXMgYSBtaW5pbXVtIG9mIHR3byB0aWVycyBpcworICogc3VwcG9ydGVkIHdp dGhvdXQgdXNpbmcgYWRkaXRpb25hbCBiaXRzIGluIGZvbGlvLT5mbGFncy4KKyAqCisgKiBJbiBj b250cmFzdCB0byBtb3ZpbmcgYWNyb3NzIGdlbmVyYXRpb25zIHdoaWNoIHJlcXVpcmVzIHRoZSBM UlUgbG9jaywgbW92aW5nCisgKiBhY3Jvc3MgdGllcnMgb25seSBpbnZvbHZlcyBhdG9taWMgb3Bl cmF0aW9ucyBvbiBmb2xpby0+ZmxhZ3MgYW5kIHRoZXJlZm9yZQorICogaGFzIGEgbmVnbGlnaWJs ZSBjb3N0IGluIHRoZSBidWZmZXJlZCBhY2Nlc3MgcGF0aC4gSW4gdGhlIGV2aWN0aW9uIHBhdGgs CisgKiBjb21wYXJpc29ucyBvZiByZWZhdWx0ZWQvKGV2aWN0ZWQrcHJvdGVjdGVkKSBmcm9tIHRo ZSBmaXJzdCB0aWVyIGFuZCB0aGUKKyAqIHJlc3QgaW5mZXIgd2hldGhlciBwYWdlcyBhY2Nlc3Nl ZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMKKyAqIGFyZSBzdGF0aXN0 aWNhbGx5IGhvdCBhbmQgdGh1cyB3b3J0aCBwcm90ZWN0aW5nLgorICoKKyAqIE1BWF9OUl9USUVS UyBpcyBzZXQgdG8gNCBzbyB0aGF0IHRoZSBtdWx0aS1nZW4gTFJVIGNhbiBzdXBwb3J0IHR3aWNl IHRoZQorICogbnVtYmVyIG9mIGNhdGVnb3JpZXMgb2YgdGhlIGFjdGl2ZS9pbmFjdGl2ZSBMUlUg d2hlbiBrZWVwaW5nIHRyYWNrIG9mCisgKiBhY2Nlc3NlcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRv cnMuIEl0IHVzZXMgTUFYX05SX1RJRVJTLTIgc3BhcmUgYml0cyBpbgorICogZm9saW8tPmZsYWdz IChMUlVfUkVGU19NQVNLKS4KKyAqLworI2RlZmluZSBNQVhfTlJfVElFUlMJCTRVCisKICNpZm5k ZWYgX19HRU5FUkFUSU5HX0JPVU5EU19ICiAKIHN0cnVjdCBscnV2ZWM7CkBAIC0zNjIsNiArMzg1 LDE2IEBAIGVudW0gewogCUxSVV9HRU5fRklMRSwKIH07CiAKKyNkZWZpbmUgTUlOX0xSVV9CQVRD SAkJQklUU19QRVJfTE9ORworI2RlZmluZSBNQVhfTFJVX0JBVENICQkoTUlOX0xSVV9CQVRDSCAq IDEyOCkKKworLyogd2hldGhlciB0byBrZWVwIGhpc3RvcmljYWwgc3RhdHMgZnJvbSBldmljdGVk IGdlbmVyYXRpb25zICovCisjaWZkZWYgQ09ORklHX0xSVV9HRU5fU1RBVFMKKyNkZWZpbmUgTlJf SElTVF9HRU5TCQlNQVhfTlJfR0VOUworI2Vsc2UKKyNkZWZpbmUgTlJfSElTVF9HRU5TCQkxVQor I2VuZGlmCisKIC8qCiAgKiBUaGUgeW91bmdlc3QgZ2VuZXJhdGlvbiBudW1iZXIgaXMgc3RvcmVk IGluIG1heF9zZXEgZm9yIGJvdGggYW5vbiBhbmQgZmlsZQogICogdHlwZXMgYXMgdGhleSBhcmUg YWdlZCBvbiBhbiBlcXVhbCBmb290aW5nLiBUaGUgb2xkZXN0IGdlbmVyYXRpb24gbnVtYmVycyBh cmUKQEAgLTM4NCw2ICs0MTcsMTUgQEAgc3RydWN0IGxydV9nZW5fc3RydWN0IHsKIAlzdHJ1Y3Qg bGlzdF9oZWFkIGxpc3RzW01BWF9OUl9HRU5TXVtBTk9OX0FORF9GSUxFXVtNQVhfTlJfWk9ORVNd OwogCS8qIHRoZSBzaXplcyBvZiB0aGUgYWJvdmUgbGlzdHMgKi8KIAlsb25nIG5yX3BhZ2VzW01B WF9OUl9HRU5TXVtBTk9OX0FORF9GSUxFXVtNQVhfTlJfWk9ORVNdOworCS8qIHRoZSBleHBvbmVu dGlhbCBtb3ZpbmcgYXZlcmFnZSBvZiByZWZhdWx0ZWQgKi8KKwl1bnNpZ25lZCBsb25nIGF2Z19y ZWZhdWx0ZWRbQU5PTl9BTkRfRklMRV1bTUFYX05SX1RJRVJTXTsKKwkvKiB0aGUgZXhwb25lbnRp YWwgbW92aW5nIGF2ZXJhZ2Ugb2YgZXZpY3RlZCtwcm90ZWN0ZWQgKi8KKwl1bnNpZ25lZCBsb25n IGF2Z190b3RhbFtBTk9OX0FORF9GSUxFXVtNQVhfTlJfVElFUlNdOworCS8qIHRoZSBmaXJzdCB0 aWVyIGRvZXNuJ3QgbmVlZCBwcm90ZWN0aW9uLCBoZW5jZSB0aGUgbWludXMgb25lICovCisJdW5z aWduZWQgbG9uZyBwcm90ZWN0ZWRbTlJfSElTVF9HRU5TXVtBTk9OX0FORF9GSUxFXVtNQVhfTlJf VElFUlMgLSAxXTsKKwkvKiBjYW4gYmUgbW9kaWZpZWQgd2l0aG91dCBob2xkaW5nIHRoZSBMUlUg bG9jayAqLworCWF0b21pY19sb25nX3QgZXZpY3RlZFtOUl9ISVNUX0dFTlNdW0FOT05fQU5EX0ZJ TEVdW01BWF9OUl9USUVSU107CisJYXRvbWljX2xvbmdfdCByZWZhdWx0ZWRbTlJfSElTVF9HRU5T XVtBTk9OX0FORF9GSUxFXVtNQVhfTlJfVElFUlNdOwogfTsKIAogdm9pZCBscnVfZ2VuX2luaXRf bHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4 L3BhZ2UtZmxhZ3MtbGF5b3V0LmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MtbGF5b3V0LmgK aW5kZXggMjQwOTA1NDA3YTE4Li43ZDc5ODE4ZGMwNjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGlu dXgvcGFnZS1mbGFncy1sYXlvdXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MtbGF5 b3V0LmgKQEAgLTEwNiw3ICsxMDYsMTAgQEAKICNlcnJvciAiTm90IGVub3VnaCBiaXRzIGluIHBh Z2UgZmxhZ3MiCiAjZW5kaWYKIAotI2RlZmluZSBMUlVfUkVGU19XSURUSAkwCisvKiBzZWUgdGhl IGNvbW1lbnQgb24gTUFYX05SX1RJRVJTICovCisjZGVmaW5lIExSVV9SRUZTX1dJRFRICW1pbihf X0xSVV9SRUZTX1dJRFRILCBCSVRTX1BFUl9MT05HIC0gTlJfUEFHRUZMQUdTIC0gXAorCQkJICAg IFpPTkVTX1dJRFRIIC0gTFJVX0dFTl9XSURUSCAtIFNFQ1RJT05TX1dJRFRIIC0gXAorCQkJICAg IE5PREVTX1dJRFRIIC0gS0FTQU5fVEFHX1dJRFRIIC0gTEFTVF9DUFVQSURfV0lEVEgpCiAKICNl bmRpZgogI2VuZGlmIC8qIF9MSU5VWF9QQUdFX0ZMQUdTX0xBWU9VVCAqLwpkaWZmIC0tZ2l0IGEv a2VybmVsL2JvdW5kcy5jIGIva2VybmVsL2JvdW5kcy5jCmluZGV4IDVlZTYwNzc3ZDhlNC4uYjUy OTE4MmU4YjA0IDEwMDY0NAotLS0gYS9rZXJuZWwvYm91bmRzLmMKKysrIGIva2VybmVsL2JvdW5k cy5jCkBAIC0yNCw4ICsyNCwxMCBAQCBpbnQgbWFpbih2b2lkKQogCURFRklORShTUElOTE9DS19T SVpFLCBzaXplb2Yoc3BpbmxvY2tfdCkpOwogI2lmZGVmIENPTkZJR19MUlVfR0VOCiAJREVGSU5F KExSVV9HRU5fV0lEVEgsIG9yZGVyX2Jhc2VfMihNQVhfTlJfR0VOUyArIDEpKTsKKwlERUZJTkUo X19MUlVfUkVGU19XSURUSCwgTUFYX05SX1RJRVJTIC0gMik7CiAjZWxzZQogCURFRklORShMUlVf R0VOX1dJRFRILCAwKTsKKwlERUZJTkUoX19MUlVfUkVGU19XSURUSCwgMCk7CiAjZW5kaWYKIAkv KiBFbmQgb2YgY29uc3RhbnRzICovCiAKZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29u ZmlnCmluZGV4IGU2MmJkNTAxMDgyYi4uMGFlYWNiZDMzNjFjIDEwMDY0NAotLS0gYS9tbS9LY29u ZmlnCisrKyBiL21tL0tjb25maWcKQEAgLTkwOSw2ICs5MDksNyBAQCBjb25maWcgQU5PTl9WTUFf TkFNRQogCSAgYXJlYSBmcm9tIGJlaW5nIG1lcmdlZCB3aXRoIGFkamFjZW50IHZpcnR1YWwgbWVt b3J5IGFyZWFzIGR1ZSB0byB0aGUKIAkgIGRpZmZlcmVuY2UgaW4gdGhlaXIgbmFtZS4KIAorIyBt dWx0aS1nZW4gTFJVIHsKIGNvbmZpZyBMUlVfR0VOCiAJYm9vbCAiTXVsdGktR2VuIExSVSIKIAlk ZXBlbmRzIG9uIE1NVQpAQCAtOTE3LDYgKzkxOCwxNiBAQCBjb25maWcgTFJVX0dFTgogCWhlbHAK IAkgIEEgaGlnaCBwZXJmb3JtYW5jZSBMUlUgaW1wbGVtZW50YXRpb24gdG8gb3ZlcmNvbW1pdCBt ZW1vcnkuCiAKK2NvbmZpZyBMUlVfR0VOX1NUQVRTCisJYm9vbCAiRnVsbCBzdGF0cyBmb3IgZGVi dWdnaW5nIgorCWRlcGVuZHMgb24gTFJVX0dFTgorCWhlbHAKKwkgIERvIG5vdCBlbmFibGUgdGhp cyBvcHRpb24gdW5sZXNzIHlvdSBwbGFuIHRvIGxvb2sgYXQgaGlzdG9yaWNhbCBzdGF0cworCSAg ZnJvbSBldmljdGVkIGdlbmVyYXRpb25zIGZvciBkZWJ1Z2dpbmcgcHVycG9zZS4KKworCSAgVGhp cyBvcHRpb24gaGFzIGEgcGVyLW1lbWNnIGFuZCBwZXItbm9kZSBtZW1vcnkgb3ZlcmhlYWQuCisj IH0KKwogc291cmNlICJtbS9kYW1vbi9LY29uZmlnIgogCiBlbmRtZW51CmRpZmYgLS1naXQgYS9t bS9zd2FwLmMgYi9tbS9zd2FwLmMKaW5kZXggYTY4NzBiYTBiZDgzLi5hOTlkMjIzMDhmMjggMTAw NjQ0Ci0tLSBhL21tL3N3YXAuYworKysgYi9tbS9zd2FwLmMKQEAgLTQwNSw2ICs0MDUsNDAgQEAg c3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xp bykKIAlsb2NhbF91bmxvY2soJmxydV9wdmVjcy5sb2NrKTsKIH0KIAorI2lmZGVmIENPTkZJR19M UlVfR0VOCitzdGF0aWMgdm9pZCBmb2xpb19pbmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQor eworCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8t PmZsYWdzKTsKKworCWlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSkKKwkJcmV0dXJu OworCisJaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pKSB7CisJCWZvbGlvX3NldF9y ZWZlcmVuY2VkKGZvbGlvKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghZm9saW9fdGVzdF93b3Jr aW5nc2V0KGZvbGlvKSkgeworCQlmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7CisJCXJldHVy bjsKKwl9CisKKwkvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUFYX05SX1RJRVJTICovCisJZG8gewor CQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgJiBMUlVfUkVGU19NQVNLOworCQlpZiAobmV3X2ZsYWdz ID09IExSVV9SRUZTX01BU0spCisJCQlicmVhazsKKworCQluZXdfZmxhZ3MgKz0gQklUKExSVV9S RUZTX1BHT0ZGKTsKKwkJbmV3X2ZsYWdzIHw9IG9sZF9mbGFncyAmIH5MUlVfUkVGU19NQVNLOwor CX0gd2hpbGUgKCF0cnlfY21weGNoZygmZm9saW8tPmZsYWdzLCAmb2xkX2ZsYWdzLCBuZXdfZmxh Z3MpKTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBmb2xpb19pbmNfcmVmcyhzdHJ1Y3QgZm9saW8g KmZvbGlvKQoreworfQorI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovCisKIC8qCiAgKiBNYXJr IGEgcGFnZSBhcyBoYXZpbmcgc2VlbiBhY3Rpdml0eS4KICAqCkBAIC00MTcsNiArNDUxLDExIEBA IHN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9s aW8pCiAgKi8KIHZvaWQgZm9saW9fbWFya19hY2Nlc3NlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKQog eworCWlmIChscnVfZ2VuX2VuYWJsZWQoKSkgeworCQlmb2xpb19pbmNfcmVmcyhmb2xpbyk7CisJ CXJldHVybjsKKwl9CisKIAlpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykpIHsKIAkJ Zm9saW9fc2V0X3JlZmVyZW5jZWQoZm9saW8pOwogCX0gZWxzZSBpZiAoZm9saW9fdGVzdF91bmV2 aWN0YWJsZShmb2xpbykpIHsKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMK aW5kZXggYjQxZmY5NzY1Y2M3Li44OTFmMGFiNjliM2EgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5j CisrKyBiL21tL3Ztc2Nhbi5jCkBAIC0xMjc1LDkgKzEyNzUsMTEgQEAgc3RhdGljIGludCBfX3Jl bW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8g KmZvbGlvLAogCiAJaWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkgewogCQlzd3BfZW50 cnlfdCBzd2FwID0gZm9saW9fc3dhcF9lbnRyeShmb2xpbyk7Ci0JCW1lbV9jZ3JvdXBfc3dhcG91 dChmb2xpbywgc3dhcCk7CisKKwkJLyogZ2V0IGEgc2hhZG93IGVudHJ5IGJlZm9yZSBtZW1fY2dy b3VwX3N3YXBvdXQoKSBjbGVhcnMgZm9saW9fbWVtY2coKSAqLwogCQlpZiAocmVjbGFpbWVkICYm ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykpCiAJCQlzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0 aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpOworCQltZW1fY2dyb3VwX3N3YXBvdXQoZm9saW8sIHN3 YXApOwogCQlfX2RlbGV0ZV9mcm9tX3N3YXBfY2FjaGUoJmZvbGlvLT5wYWdlLCBzd2FwLCBzaGFk b3cpOwogCQl4YV91bmxvY2tfaXJxKCZtYXBwaW5nLT5pX3BhZ2VzKTsKIAkJcHV0X3N3YXBfcGFn ZSgmZm9saW8tPnBhZ2UsIHN3YXApOwpAQCAtMjY0OSw2ICsyNjUxLDkgQEAgc3RhdGljIHZvaWQg cHJlcGFyZV9zY2FuX2NvdW50KHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wg KnNjKQogCXVuc2lnbmVkIGxvbmcgZmlsZTsKIAlzdHJ1Y3QgbHJ1dmVjICp0YXJnZXRfbHJ1dmVj OwogCisJaWYgKGxydV9nZW5fZW5hYmxlZCgpKQorCQlyZXR1cm47CisKIAl0YXJnZXRfbHJ1dmVj ID0gbWVtX2Nncm91cF9scnV2ZWMoc2MtPnRhcmdldF9tZW1fY2dyb3VwLCBwZ2RhdCk7CiAKIAkv KgpAQCAtMjk3NCw2ICsyOTc5LDE3IEBAIHN0YXRpYyBib29sIGNhbl9hZ2VfYW5vbl9wYWdlcyhz dHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LAogICogICAgICAgICAgICAgICAgICAgICAgICAgIHNo b3J0aGFuZCBoZWxwZXJzCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisjZGVmaW5lIExSVV9S RUZTX0ZMQUdTCShCSVQoUEdfcmVmZXJlbmNlZCkgfCBCSVQoUEdfd29ya2luZ3NldCkpCisKKyNk ZWZpbmUgREVGSU5FX01BWF9TRVEobHJ1dmVjKQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIG1heF9z ZXEgPSBSRUFEX09OQ0UoKGxydXZlYyktPmxydWdlbi5tYXhfc2VxKQorCisjZGVmaW5lIERFRklO RV9NSU5fU0VRKGxydXZlYykJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBtaW5fc2VxW0FOT05fQU5E X0ZJTEVdID0gewkJCVwKKwkJUkVBRF9PTkNFKChscnV2ZWMpLT5scnVnZW4ubWluX3NlcVtMUlVf R0VOX0FOT05dKSwJXAorCQlSRUFEX09OQ0UoKGxydXZlYyktPmxydWdlbi5taW5fc2VxW0xSVV9H RU5fRklMRV0pLAlcCisJfQorCiAjZGVmaW5lIGZvcl9lYWNoX2dlbl90eXBlX3pvbmUoZ2VuLCB0 eXBlLCB6b25lKQkJCQlcCiAJZm9yICgoZ2VuKSA9IDA7IChnZW4pIDwgTUFYX05SX0dFTlM7IChn ZW4pKyspCQkJXAogCQlmb3IgKCh0eXBlKSA9IDA7ICh0eXBlKSA8IEFOT05fQU5EX0ZJTEU7ICh0 eXBlKSsrKQlcCkBAIC0yOTk5LDYgKzMwMTUsNzUzIEBAIHN0YXRpYyBzdHJ1Y3QgbHJ1dmVjIF9f bWF5YmVfdW51c2VkICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5p CiAJcmV0dXJuIHBnZGF0ID8gJnBnZGF0LT5fX2xydXZlYyA6IE5VTEw7CiB9CiAKK3N0YXRpYyBp bnQgZ2V0X3N3YXBwaW5lc3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250 cm9sICpzYykKK3sKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1 dmVjKTsKKwlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7 CisKKwlpZiAoIWNhbl9kZW1vdGUocGdkYXQtPm5vZGVfaWQsIHNjKSAmJgorCSAgICBtZW1fY2dy b3VwX2dldF9ucl9zd2FwX3BhZ2VzKG1lbWNnKSA8IE1JTl9MUlVfQkFUQ0gpCisJCXJldHVybiAw OworCisJcmV0dXJuIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhtZW1jZyk7Cit9CisKK3N0YXRpYyBp bnQgZ2V0X25yX2dlbnMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSkKK3sKKwlyZXR1 cm4gbHJ1dmVjLT5scnVnZW4ubWF4X3NlcSAtIGxydXZlYy0+bHJ1Z2VuLm1pbl9zZXFbdHlwZV0g KyAxOworfQorCitzdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZCBzZXFfaXNfdmFsaWQoc3RydWN0 IGxydXZlYyAqbHJ1dmVjKQoreworCS8qIHNlZSB0aGUgY29tbWVudCBvbiBscnVfZ2VuX3N0cnVj dCAqLworCXJldHVybiBnZXRfbnJfZ2VucyhscnV2ZWMsIExSVV9HRU5fRklMRSkgPj0gTUlOX05S X0dFTlMgJiYKKwkgICAgICAgZ2V0X25yX2dlbnMobHJ1dmVjLCBMUlVfR0VOX0ZJTEUpIDw9IGdl dF9ucl9nZW5zKGxydXZlYywgTFJVX0dFTl9BTk9OKSAmJgorCSAgICAgICBnZXRfbnJfZ2Vucyhs cnV2ZWMsIExSVV9HRU5fQU5PTikgPD0gTUFYX05SX0dFTlM7Cit9CisKKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICByZWZhdWx0IGZlZWRiYWNrIGxv b3AKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBBIGZlZWRiYWNrIGxvb3AgYmFz ZWQgb24gUHJvcG9ydGlvbmFsLUludGVncmFsLURlcml2YXRpdmUgKFBJRCkgY29udHJvbGxlci4K KyAqCisgKiBUaGUgUCB0ZXJtIGlzIHJlZmF1bHRlZC8oZXZpY3RlZCtwcm90ZWN0ZWQpIGZyb20g YSB0aWVyIGluIHRoZSBnZW5lcmF0aW9uCisgKiBjdXJyZW50bHkgYmVpbmcgZXZpY3RlZDsgdGhl IEkgdGVybSBpcyB0aGUgZXhwb25lbnRpYWwgbW92aW5nIGF2ZXJhZ2Ugb2YgdGhlCisgKiBQIHRl cm0gb3ZlciB0aGUgZ2VuZXJhdGlvbnMgcHJldmlvdXNseSBldmljdGVkLCB1c2luZyB0aGUgc21v b3RoaW5nIGZhY3RvcgorICogMS8yOyB0aGUgRCB0ZXJtIGlzbid0IHN1cHBvcnRlZC4KKyAqCisg KiBUaGUgc2V0cG9pbnQgKFNQKSBpcyBhbHdheXMgdGhlIGZpcnN0IHRpZXIgb2Ygb25lIHR5cGU7 IHRoZSBwcm9jZXNzIHZhcmlhYmxlCisgKiAoUFYpIGlzIGVpdGhlciBhbnkgdGllciBvZiB0aGUg b3RoZXIgdHlwZSBvciBhbnkgb3RoZXIgdGllciBvZiB0aGUgc2FtZQorICogdHlwZS4KKyAqCisg KiBUaGUgZXJyb3IgaXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgU1AgYW5kIHRoZSBQVjsg dGhlIGNvcnJlY3Rpb24gaXMKKyAqIHR1cm4gb2ZmIHByb3RlY3Rpb24gd2hlbiBTUD5QViBvciB0 dXJuIG9uIHByb3RlY3Rpb24gd2hlbiBTUDxQVi4KKyAqCisgKiBGb3IgZnV0dXJlIG9wdGltaXph dGlvbnM6CisgKiAxLiBUaGUgRCB0ZXJtIG1heSBkaXNjb3VudCB0aGUgb3RoZXIgdHdvIHRlcm1z IG92ZXIgdGltZSBzbyB0aGF0IGxvbmctbGl2ZWQKKyAqICAgIGdlbmVyYXRpb25zIGNhbiByZXNp c3Qgc3RhbGUgaW5mb3JtYXRpb24uCisgKi8KK3N0cnVjdCBjdHJsX3BvcyB7CisJdW5zaWduZWQg bG9uZyByZWZhdWx0ZWQ7CisJdW5zaWduZWQgbG9uZyB0b3RhbDsKKwlpbnQgZ2FpbjsKK307CisK K3N0YXRpYyB2b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlw ZSwgaW50IHRpZXIsIGludCBnYWluLAorCQkJICBzdHJ1Y3QgY3RybF9wb3MgKnBvcykKK3sKKwlz dHJ1Y3QgbHJ1X2dlbl9zdHJ1Y3QgKmxydWdlbiA9ICZscnV2ZWMtPmxydWdlbjsKKwlpbnQgaGlz dCA9IGxydV9oaXN0X2Zyb21fc2VxKGxydWdlbi0+bWluX3NlcVt0eXBlXSk7CisKKwlwb3MtPnJl ZmF1bHRlZCA9IGxydWdlbi0+YXZnX3JlZmF1bHRlZFt0eXBlXVt0aWVyXSArCisJCQkgYXRvbWlj X2xvbmdfcmVhZCgmbHJ1Z2VuLT5yZWZhdWx0ZWRbaGlzdF1bdHlwZV1bdGllcl0pOworCXBvcy0+ dG90YWwgPSBscnVnZW4tPmF2Z190b3RhbFt0eXBlXVt0aWVyXSArCisJCSAgICAgYXRvbWljX2xv bmdfcmVhZCgmbHJ1Z2VuLT5ldmljdGVkW2hpc3RdW3R5cGVdW3RpZXJdKTsKKwlpZiAodGllcikK KwkJcG9zLT50b3RhbCArPSBscnVnZW4tPnByb3RlY3RlZFtoaXN0XVt0eXBlXVt0aWVyIC0gMV07 CisJcG9zLT5nYWluID0gZ2FpbjsKK30KKworc3RhdGljIHZvaWQgcmVzZXRfY3RybF9wb3Moc3Ry dWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgYm9vbCBjYXJyeW92ZXIpCit7CisJaW50IGhp c3QsIHRpZXI7CisJc3RydWN0IGxydV9nZW5fc3RydWN0ICpscnVnZW4gPSAmbHJ1dmVjLT5scnVn ZW47CisJYm9vbCBjbGVhciA9IGNhcnJ5b3ZlciA/IE5SX0hJU1RfR0VOUyA9PSAxIDogTlJfSElT VF9HRU5TID4gMTsKKwl1bnNpZ25lZCBsb25nIHNlcSA9IGNhcnJ5b3ZlciA/IGxydWdlbi0+bWlu X3NlcVt0eXBlXSA6IGxydWdlbi0+bWF4X3NlcSArIDE7CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxk KCZscnV2ZWMtPmxydV9sb2NrKTsKKworCWlmICghY2FycnlvdmVyICYmICFjbGVhcikKKwkJcmV0 dXJuOworCisJaGlzdCA9IGxydV9oaXN0X2Zyb21fc2VxKHNlcSk7CisKKwlmb3IgKHRpZXIgPSAw OyB0aWVyIDwgTUFYX05SX1RJRVJTOyB0aWVyKyspIHsKKwkJaWYgKGNhcnJ5b3ZlcikgeworCQkJ dW5zaWduZWQgbG9uZyBzdW07CisKKwkJCXN1bSA9IGxydWdlbi0+YXZnX3JlZmF1bHRlZFt0eXBl XVt0aWVyXSArCisJCQkgICAgICBhdG9taWNfbG9uZ19yZWFkKCZscnVnZW4tPnJlZmF1bHRlZFto aXN0XVt0eXBlXVt0aWVyXSk7CisJCQlXUklURV9PTkNFKGxydWdlbi0+YXZnX3JlZmF1bHRlZFt0 eXBlXVt0aWVyXSwgc3VtIC8gMik7CisKKwkJCXN1bSA9IGxydWdlbi0+YXZnX3RvdGFsW3R5cGVd W3RpZXJdICsKKwkJCSAgICAgIGF0b21pY19sb25nX3JlYWQoJmxydWdlbi0+ZXZpY3RlZFtoaXN0 XVt0eXBlXVt0aWVyXSk7CisJCQlpZiAodGllcikKKwkJCQlzdW0gKz0gbHJ1Z2VuLT5wcm90ZWN0 ZWRbaGlzdF1bdHlwZV1bdGllciAtIDFdOworCQkJV1JJVEVfT05DRShscnVnZW4tPmF2Z190b3Rh bFt0eXBlXVt0aWVyXSwgc3VtIC8gMik7CisJCX0KKworCQlpZiAoY2xlYXIpIHsKKwkJCWF0b21p Y19sb25nX3NldCgmbHJ1Z2VuLT5yZWZhdWx0ZWRbaGlzdF1bdHlwZV1bdGllcl0sIDApOworCQkJ YXRvbWljX2xvbmdfc2V0KCZscnVnZW4tPmV2aWN0ZWRbaGlzdF1bdHlwZV1bdGllcl0sIDApOwor CQkJaWYgKHRpZXIpCisJCQkJV1JJVEVfT05DRShscnVnZW4tPnByb3RlY3RlZFtoaXN0XVt0eXBl XVt0aWVyIC0gMV0sIDApOworCQl9CisJfQorfQorCitzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJs X2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KQoreworCS8qCisJ ICogUmV0dXJuIHRydWUgaWYgdGhlIFBWIGhhcyBhIGxpbWl0ZWQgbnVtYmVyIG9mIHJlZmF1bHRz IG9yIGEgbG93ZXIKKwkgKiByZWZhdWx0ZWQvdG90YWwgdGhhbiB0aGUgU1AuCisJICovCisJcmV0 dXJuIHB2LT5yZWZhdWx0ZWQgPCBNSU5fTFJVX0JBVENIIHx8CisJICAgICAgIHB2LT5yZWZhdWx0 ZWQgKiAoc3AtPnRvdGFsICsgTUlOX0xSVV9CQVRDSCkgKiBzcC0+Z2FpbiA8PQorCSAgICAgICAo c3AtPnJlZmF1bHRlZCArIDEpICogcHYtPnRvdGFsICogcHYtPmdhaW47Cit9CisKKy8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYWdpbmcKKyAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3Qg bHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcmVjbGFpbWluZykKK3sK KwlpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTsKKwlzdHJ1Y3QgbHJ1X2dlbl9z dHJ1Y3QgKmxydWdlbiA9ICZscnV2ZWMtPmxydWdlbjsKKwlpbnQgbmV3X2dlbiwgb2xkX2dlbiA9 IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2VuLT5taW5fc2VxW3R5cGVdKTsKKwl1bnNpZ25lZCBsb25n IG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLT5mbGFncyk7CisKKwlWTV9X QVJOX09OX09OQ0VfRk9MSU8oIShvbGRfZmxhZ3MgJiBMUlVfR0VOX01BU0spLCBmb2xpbyk7CisK KwlkbyB7CisJCW5ld19nZW4gPSAob2xkX2dlbiArIDEpICUgTUFYX05SX0dFTlM7CisKKwkJbmV3 X2ZsYWdzID0gb2xkX2ZsYWdzICYgfihMUlVfR0VOX01BU0sgfCBMUlVfUkVGU19NQVNLIHwgTFJV X1JFRlNfRkxBR1MpOworCQluZXdfZmxhZ3MgfD0gKG5ld19nZW4gKyAxVUwpIDw8IExSVV9HRU5f UEdPRkY7CisJCS8qIGZvciBmb2xpb19lbmRfd3JpdGViYWNrKCkgKi8KKwkJaWYgKHJlY2xhaW1p bmcpCisJCQluZXdfZmxhZ3MgfD0gQklUKFBHX3JlY2xhaW0pOworCX0gd2hpbGUgKCF0cnlfY21w eGNoZygmZm9saW8tPmZsYWdzLCAmb2xkX2ZsYWdzLCBuZXdfZmxhZ3MpKTsKKworCWxydV9nZW5f dXBkYXRlX3NpemUobHJ1dmVjLCBmb2xpbywgb2xkX2dlbiwgbmV3X2dlbik7CisKKwlyZXR1cm4g bmV3X2dlbjsKK30KKworc3RhdGljIHZvaWQgaW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1 dmVjLCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgbHJ1X2dlbl9zdHJ1Y3QgKmxydWdlbiA9ICZscnV2 ZWMtPmxydWdlbjsKKworCXJlc2V0X2N0cmxfcG9zKGxydXZlYywgdHlwZSwgdHJ1ZSk7CisJV1JJ VEVfT05DRShscnVnZW4tPm1pbl9zZXFbdHlwZV0sIGxydWdlbi0+bWluX3NlcVt0eXBlXSArIDEp OworfQorCitzdGF0aWMgYm9vbCB0cnlfdG9faW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1 dmVjLCBib29sIGNhbl9zd2FwKQoreworCWludCBnZW4sIHR5cGUsIHpvbmU7CisJYm9vbCBzdWNj ZXNzID0gZmFsc2U7CisJc3RydWN0IGxydV9nZW5fc3RydWN0ICpscnVnZW4gPSAmbHJ1dmVjLT5s cnVnZW47CisJREVGSU5FX01JTl9TRVEobHJ1dmVjKTsKKworCVZNX1dBUk5fT05fT05DRSghc2Vx X2lzX3ZhbGlkKGxydXZlYykpOworCisJLyogZmluZCB0aGUgb2xkZXN0IHBvcHVsYXRlZCBnZW5l cmF0aW9uICovCisJZm9yICh0eXBlID0gIWNhbl9zd2FwOyB0eXBlIDwgQU5PTl9BTkRfRklMRTsg dHlwZSsrKSB7CisJCXdoaWxlIChtaW5fc2VxW3R5cGVdICsgTUlOX05SX0dFTlMgPD0gbHJ1Z2Vu LT5tYXhfc2VxKSB7CisJCQlnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKG1pbl9zZXFbdHlwZV0pOwor CisJCQlmb3IgKHpvbmUgPSAwOyB6b25lIDwgTUFYX05SX1pPTkVTOyB6b25lKyspIHsKKwkJCQlp ZiAoIWxpc3RfZW1wdHkoJmxydWdlbi0+bGlzdHNbZ2VuXVt0eXBlXVt6b25lXSkpCisJCQkJCWdv dG8gbmV4dDsKKwkJCX0KKworCQkJbWluX3NlcVt0eXBlXSsrOworCQl9CituZXh0OgorCQk7CisJ fQorCisJLyogc2VlIHRoZSBjb21tZW50IG9uIGxydV9nZW5fc3RydWN0ICovCisJaWYgKGNhbl9z d2FwKSB7CisJCW1pbl9zZXFbTFJVX0dFTl9BTk9OXSA9IG1pbihtaW5fc2VxW0xSVV9HRU5fQU5P Tl0sIG1pbl9zZXFbTFJVX0dFTl9GSUxFXSk7CisJCW1pbl9zZXFbTFJVX0dFTl9GSUxFXSA9IG1h eChtaW5fc2VxW0xSVV9HRU5fQU5PTl0sIGxydWdlbi0+bWluX3NlcVtMUlVfR0VOX0ZJTEVdKTsK Kwl9CisKKwlmb3IgKHR5cGUgPSAhY2FuX3N3YXA7IHR5cGUgPCBBTk9OX0FORF9GSUxFOyB0eXBl KyspIHsKKwkJaWYgKG1pbl9zZXFbdHlwZV0gPT0gbHJ1Z2VuLT5taW5fc2VxW3R5cGVdKQorCQkJ Y29udGludWU7CisKKwkJcmVzZXRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0cnVlKTsKKwkJV1JJ VEVfT05DRShscnVnZW4tPm1pbl9zZXFbdHlwZV0sIG1pbl9zZXFbdHlwZV0pOworCQlzdWNjZXNz ID0gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gc3VjY2VzczsKK30KKworc3RhdGljIHZvaWQgaW5jX21h eF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG1heF9zZXEsIGJvb2wg Y2FuX3N3YXApCit7CisJaW50IHByZXYsIG5leHQ7CisJaW50IHR5cGUsIHpvbmU7CisJc3RydWN0 IGxydV9nZW5fc3RydWN0ICpscnVnZW4gPSAmbHJ1dmVjLT5scnVnZW47CisKKwlzcGluX2xvY2tf aXJxKCZscnV2ZWMtPmxydV9sb2NrKTsKKworCVZNX1dBUk5fT05fT05DRSghc2VxX2lzX3ZhbGlk KGxydXZlYykpOworCisJaWYgKG1heF9zZXEgIT0gbHJ1Z2VuLT5tYXhfc2VxKQorCQlnb3RvIHVu bG9jazsKKworCWZvciAodHlwZSA9IDA7IHR5cGUgPCBBTk9OX0FORF9GSUxFOyB0eXBlKyspIHsK KwkJaWYgKGdldF9ucl9nZW5zKGxydXZlYywgdHlwZSkgIT0gTUFYX05SX0dFTlMpCisJCQljb250 aW51ZTsKKworCQlWTV9XQVJOX09OX09OQ0UodHlwZSA9PSBMUlVfR0VOX0ZJTEUgfHwgY2FuX3N3 YXApOworCisJCWluY19taW5fc2VxKGxydXZlYywgdHlwZSk7CisJfQorCisJLyoKKwkgKiBVcGRh dGUgdGhlIGFjdGl2ZS9pbmFjdGl2ZSBMUlUgc2l6ZXMgZm9yIGNvbXBhdGliaWxpdHkuIEJvdGgg c2lkZXMgb2YKKwkgKiB0aGUgY3VycmVudCBtYXhfc2VxIG5lZWQgdG8gYmUgY292ZXJlZCwgc2lu Y2UgbWF4X3NlcSsxIGNhbiBvdmVybGFwCisJICogd2l0aCBtaW5fc2VxW0xSVV9HRU5fQU5PTl0g aWYgc3dhcHBpbmcgaXMgY29uc3RyYWluZWQuIEFuZCBpZiB0aGV5IGRvCisJICogb3ZlcmxhcCwg Y29sZC9ob3QgaW52ZXJzaW9uIGhhcHBlbnMuCisJICovCisJcHJldiA9IGxydV9nZW5fZnJvbV9z ZXEobHJ1Z2VuLT5tYXhfc2VxIC0gMSk7CisJbmV4dCA9IGxydV9nZW5fZnJvbV9zZXEobHJ1Z2Vu LT5tYXhfc2VxICsgMSk7CisKKwlmb3IgKHR5cGUgPSAwOyB0eXBlIDwgQU5PTl9BTkRfRklMRTsg dHlwZSsrKSB7CisJCWZvciAoem9uZSA9IDA7IHpvbmUgPCBNQVhfTlJfWk9ORVM7IHpvbmUrKykg eworCQkJZW51bSBscnVfbGlzdCBscnUgPSB0eXBlICogTFJVX0lOQUNUSVZFX0ZJTEU7CisJCQls b25nIGRlbHRhID0gbHJ1Z2VuLT5ucl9wYWdlc1twcmV2XVt0eXBlXVt6b25lXSAtCisJCQkJICAg ICBscnVnZW4tPm5yX3BhZ2VzW25leHRdW3R5cGVdW3pvbmVdOworCisJCQlpZiAoIWRlbHRhKQor CQkJCWNvbnRpbnVlOworCisJCQlfX3VwZGF0ZV9scnVfc2l6ZShscnV2ZWMsIGxydSwgem9uZSwg ZGVsdGEpOworCQkJX191cGRhdGVfbHJ1X3NpemUobHJ1dmVjLCBscnUgKyBMUlVfQUNUSVZFLCB6 b25lLCAtZGVsdGEpOworCQl9CisJfQorCisJZm9yICh0eXBlID0gMDsgdHlwZSA8IEFOT05fQU5E X0ZJTEU7IHR5cGUrKykKKwkJcmVzZXRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBmYWxzZSk7CisK KwkvKiBtYWtlIHN1cmUgcHJlY2VkaW5nIG1vZGlmaWNhdGlvbnMgYXBwZWFyICovCisJc21wX3N0 b3JlX3JlbGVhc2UoJmxydWdlbi0+bWF4X3NlcSwgbHJ1Z2VuLT5tYXhfc2VxICsgMSk7Cit1bmxv Y2s6CisJc3Bpbl91bmxvY2tfaXJxKCZscnV2ZWMtPmxydV9sb2NrKTsKK30KKworc3RhdGljIGxv bmcgZ2V0X25yX2V2aWN0YWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcg bWF4X3NlcSwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyAqbWluX3NlcSwgYm9vbCBjYW5fc3dhcCwg Ym9vbCAqbmVlZF9hZ2luZykKK3sKKwlpbnQgZ2VuLCB0eXBlLCB6b25lOworCWxvbmcgb2xkID0g MDsKKwlsb25nIHlvdW5nID0gMDsKKwlsb25nIHRvdGFsID0gMDsKKwlzdHJ1Y3QgbHJ1X2dlbl9z dHJ1Y3QgKmxydWdlbiA9ICZscnV2ZWMtPmxydWdlbjsKKworCWZvciAodHlwZSA9ICFjYW5fc3dh cDsgdHlwZSA8IEFOT05fQU5EX0ZJTEU7IHR5cGUrKykgeworCQl1bnNpZ25lZCBsb25nIHNlcTsK KworCQlmb3IgKHNlcSA9IG1pbl9zZXFbdHlwZV07IHNlcSA8PSBtYXhfc2VxOyBzZXErKykgewor CQkJbG9uZyBzaXplID0gMDsKKworCQkJZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpOworCisJ CQlmb3IgKHpvbmUgPSAwOyB6b25lIDwgTUFYX05SX1pPTkVTOyB6b25lKyspCisJCQkJc2l6ZSAr PSBSRUFEX09OQ0UobHJ1Z2VuLT5ucl9wYWdlc1tnZW5dW3R5cGVdW3pvbmVdKTsKKworCQkJdG90 YWwgKz0gc2l6ZTsKKwkJCWlmIChzZXEgPT0gbWF4X3NlcSkKKwkJCQl5b3VuZyArPSBzaXplOwor CQkJaWYgKHNlcSArIE1JTl9OUl9HRU5TID09IG1heF9zZXEpCisJCQkJb2xkICs9IHNpemU7CisJ CX0KKwl9CisKKwkvKgorCSAqIFRoZSBhZ2luZyB0cmllcyB0byBiZSBsYXp5IHRvIHJlZHVjZSB0 aGUgb3ZlcmhlYWQuIE9uIHRoZSBvdGhlciBoYW5kLAorCSAqIHRoZSBldmljdGlvbiBzdGFsbHMg d2hlbiB0aGUgbnVtYmVyIG9mIGdlbmVyYXRpb25zIHJlYWNoZXMKKwkgKiBNSU5fTlJfR0VOUy4g U28gaWRlYWxseSwgdGhlcmUgc2hvdWxkIGJlIE1JTl9OUl9HRU5TKzEgZ2VuZXJhdGlvbnMsCisJ ICogaGVuY2UgdGhlIGZpcnN0IHR3byBpZidzLgorCSAqCisJICogQWxzbyBpdCdzIGlkZWFsIHRv IHNwcmVhZCBwYWdlcyBvdXQgZXZlbmx5LCBtZWFuaW5nIDEvKE1JTl9OUl9HRU5TKzEpCisJICog b2YgdGhlIHRvdGFsIG51bWJlciBvZiBwYWdlcyBmb3IgZWFjaCBnZW5lcmF0aW9uLiBBIHJlYXNv bmFibGUgcmFuZ2UKKwkgKiBmb3IgdGhpcyBhdmVyYWdlIHBvcnRpb24gaXMgWzEvTUlOX05SX0dF TlMsIDEvKE1JTl9OUl9HRU5TKzIpXS4gVGhlCisJICogZXZpY3Rpb24gY2FyZXMgYWJvdXQgdGhl IGxvd2VyIGJvdW5kIG9mIGNvbGQgcGFnZXMsIHdoZXJlYXMgdGhlIGFnaW5nCisJICogY2FyZXMg YWJvdXQgdGhlIHVwcGVyIGJvdW5kIG9mIGhvdCBwYWdlcy4KKwkgKi8KKwlpZiAobWluX3NlcVsh Y2FuX3N3YXBdICsgTUlOX05SX0dFTlMgPiBtYXhfc2VxKQorCQkqbmVlZF9hZ2luZyA9IHRydWU7 CisJZWxzZSBpZiAobWluX3NlcVshY2FuX3N3YXBdICsgTUlOX05SX0dFTlMgPCBtYXhfc2VxKQor CQkqbmVlZF9hZ2luZyA9IGZhbHNlOworCWVsc2UgaWYgKHlvdW5nICogTUlOX05SX0dFTlMgPiB0 b3RhbCkKKwkJKm5lZWRfYWdpbmcgPSB0cnVlOworCWVsc2UgaWYgKG9sZCAqIChNSU5fTlJfR0VO UyArIDIpIDwgdG90YWwpCisJCSpuZWVkX2FnaW5nID0gdHJ1ZTsKKwllbHNlCisJCSpuZWVkX2Fn aW5nID0gZmFsc2U7CisKKwlyZXR1cm4gdG90YWwgPiAwID8gdG90YWwgOiAwOworfQorCitzdGF0 aWMgdm9pZCBhZ2VfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29u dHJvbCAqc2MpCit7CisJYm9vbCBuZWVkX2FnaW5nOworCWxvbmcgbnJfdG9fc2NhbjsKKwlpbnQg c3dhcHBpbmVzcyA9IGdldF9zd2FwcGluZXNzKGxydXZlYywgc2MpOworCXN0cnVjdCBtZW1fY2dy b3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpOworCURFRklORV9NQVhfU0VRKGxydXZl Yyk7CisJREVGSU5FX01JTl9TRVEobHJ1dmVjKTsKKworCVZNX1dBUk5fT05fT05DRShzYy0+bWVt Y2dfbG93X3JlY2xhaW0pOworCisJbWVtX2Nncm91cF9jYWxjdWxhdGVfcHJvdGVjdGlvbihOVUxM LCBtZW1jZyk7CisKKwlpZiAobWVtX2Nncm91cF9iZWxvd19taW4obWVtY2cpKQorCQlyZXR1cm47 CisKKwlucl90b19zY2FuID0gZ2V0X25yX2V2aWN0YWJsZShscnV2ZWMsIG1heF9zZXEsIG1pbl9z ZXEsIHN3YXBwaW5lc3MsICZuZWVkX2FnaW5nKTsKKwlpZiAoIW5yX3RvX3NjYW4pCisJCXJldHVy bjsKKworCW5yX3RvX3NjYW4gPj49IHNjLT5wcmlvcml0eTsKKworCWlmICghbWVtX2Nncm91cF9v bmxpbmUobWVtY2cpKQorCQlucl90b19zY2FuKys7CisKKwlpZiAobnJfdG9fc2NhbiAmJiBuZWVk X2FnaW5nKQorCQlpbmNfbWF4X3NlcShscnV2ZWMsIG1heF9zZXEsIHN3YXBwaW5lc3MpOworfQor CitzdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQs IHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQoreworCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsK KworCVZNX1dBUk5fT05fT05DRSghY3VycmVudF9pc19rc3dhcGQoKSk7CisKKwltZW1jZyA9IG1l bV9jZ3JvdXBfaXRlcihOVUxMLCBOVUxMLCBOVUxMKTsKKwlkbyB7CisJCXN0cnVjdCBscnV2ZWMg KmxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7CisKKwkJYWdlX2xydXZl YyhscnV2ZWMsIHNjKTsKKworCQljb25kX3Jlc2NoZWQoKTsKKwl9IHdoaWxlICgobWVtY2cgPSBt ZW1fY2dyb3VwX2l0ZXIoTlVMTCwgbWVtY2csIE5VTEwpKSk7Cit9CisKKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZXZpY3Rpb24KKyAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBib29sIHNvcnRfZm9saW8oc3RydWN0IGxydXZl YyAqbHJ1dmVjLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgdGllcl9pZHgpCit7CisJYm9vbCBz dWNjZXNzOworCWludCBnZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTsKKwlpbnQgdHlwZSA9IGZv bGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTsKKwlpbnQgem9uZSA9IGZvbGlvX3pvbmVudW0oZm9saW8p OworCWludCBkZWx0YSA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKKwlpbnQgcmVmcyA9IGZvbGlv X2xydV9yZWZzKGZvbGlvKTsKKwlpbnQgdGllciA9IGxydV90aWVyX2Zyb21fcmVmcyhyZWZzKTsK KwlzdHJ1Y3QgbHJ1X2dlbl9zdHJ1Y3QgKmxydWdlbiA9ICZscnV2ZWMtPmxydWdlbjsKKworCVZN X1dBUk5fT05fT05DRV9GT0xJTyhnZW4gPj0gTUFYX05SX0dFTlMsIGZvbGlvKTsKKworCS8qIHVu ZXZpY3RhYmxlICovCisJaWYgKCFmb2xpb19ldmljdGFibGUoZm9saW8pKSB7CisJCXN1Y2Nlc3Mg PSBscnVfZ2VuX2RlbF9mb2xpbyhscnV2ZWMsIGZvbGlvLCB0cnVlKTsKKwkJVk1fV0FSTl9PTl9P TkNFX0ZPTElPKCFzdWNjZXNzLCBmb2xpbyk7CisJCWZvbGlvX3NldF91bmV2aWN0YWJsZShmb2xp byk7CisJCWxydXZlY19hZGRfZm9saW8obHJ1dmVjLCBmb2xpbyk7CisJCV9fY291bnRfdm1fZXZl bnRzKFVORVZJQ1RBQkxFX1BHQ1VMTEVELCBkZWx0YSk7CisJCXJldHVybiB0cnVlOworCX0KKwor CS8qIGRpcnRpZWQgbGF6eWZyZWUgKi8KKwlpZiAodHlwZSA9PSBMUlVfR0VOX0ZJTEUgJiYgZm9s aW9fdGVzdF9hbm9uKGZvbGlvKSAmJiBmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkgeworCQlzdWNj ZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7CisJCVZNX1dBUk5f T05fT05DRV9GT0xJTyghc3VjY2VzcywgZm9saW8pOworCQlmb2xpb19zZXRfc3dhcGJhY2tlZChm b2xpbyk7CisJCWxydXZlY19hZGRfZm9saW9fdGFpbChscnV2ZWMsIGZvbGlvKTsKKwkJcmV0dXJu IHRydWU7CisJfQorCisJLyogcHJvdGVjdGVkICovCisJaWYgKHRpZXIgPiB0aWVyX2lkeCkgewor CQlpbnQgaGlzdCA9IGxydV9oaXN0X2Zyb21fc2VxKGxydWdlbi0+bWluX3NlcVt0eXBlXSk7CisK KwkJZ2VuID0gZm9saW9faW5jX2dlbihscnV2ZWMsIGZvbGlvLCBmYWxzZSk7CisJCWxpc3RfbW92 ZV90YWlsKCZmb2xpby0+bHJ1LCAmbHJ1Z2VuLT5saXN0c1tnZW5dW3R5cGVdW3pvbmVdKTsKKwor CQlXUklURV9PTkNFKGxydWdlbi0+cHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXIgLSAxXSwKKwkJ CSAgIGxydWdlbi0+cHJvdGVjdGVkW2hpc3RdW3R5cGVdW3RpZXIgLSAxXSArIGRlbHRhKTsKKwkJ X19tb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgV09SS0lOR1NFVF9BQ1RJVkFURV9CQVNFICsgdHlw ZSwgZGVsdGEpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKiB3YWl0aW5nIGZvciB3cml0ZWJh Y2sgKi8KKwlpZiAoZm9saW9fdGVzdF9sb2NrZWQoZm9saW8pIHx8IGZvbGlvX3Rlc3Rfd3JpdGVi YWNrKGZvbGlvKSB8fAorCSAgICAodHlwZSA9PSBMUlVfR0VOX0ZJTEUgJiYgZm9saW9fdGVzdF9k aXJ0eShmb2xpbykpKSB7CisJCWdlbiA9IGZvbGlvX2luY19nZW4obHJ1dmVjLCBmb2xpbywgdHJ1 ZSk7CisJCWxpc3RfbW92ZSgmZm9saW8tPmxydSwgJmxydWdlbi0+bGlzdHNbZ2VuXVt0eXBlXVt6 b25lXSk7CisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGlj IGJvb2wgaXNvbGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAq Zm9saW8sIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQoreworCWJvb2wgc3VjY2VzczsKKworCWlm ICghc2MtPm1heV91bm1hcCAmJiBmb2xpb19tYXBwZWQoZm9saW8pKQorCQlyZXR1cm4gZmFsc2U7 CisKKwlpZiAoIShzYy0+bWF5X3dyaXRlcGFnZSAmJiAoc2MtPmdmcF9tYXNrICYgX19HRlBfSU8p KSAmJgorCSAgICAoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgfHwKKwkgICAgIChmb2xpb190ZXN0 X2Fub24oZm9saW8pICYmICFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpKSkKKwkJcmV0dXJu IGZhbHNlOworCisJaWYgKCFmb2xpb190cnlfZ2V0KGZvbGlvKSkKKwkJcmV0dXJuIGZhbHNlOwor CisJaWYgKCFmb2xpb190ZXN0X2NsZWFyX2xydShmb2xpbykpIHsKKwkJZm9saW9fcHV0KGZvbGlv KTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXN1Y2Nlc3MgPSBscnVfZ2VuX2RlbF9mb2xpbyhs cnV2ZWMsIGZvbGlvLCB0cnVlKTsKKwlWTV9XQVJOX09OX09OQ0VfRk9MSU8oIXN1Y2Nlc3MsIGZv bGlvKTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW50IHNjYW5fZm9saW9zKHN0cnVj dCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsCisJCSAgICAgICBpbnQg dHlwZSwgaW50IHRpZXIsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJaW50IGdlbiwgem9u ZTsKKwllbnVtIHZtX2V2ZW50X2l0ZW0gaXRlbTsKKwlpbnQgc29ydGVkID0gMDsKKwlpbnQgc2Nh bm5lZCA9IDA7CisJaW50IGlzb2xhdGVkID0gMDsKKwlpbnQgcmVtYWluaW5nID0gTUFYX0xSVV9C QVRDSDsKKwlzdHJ1Y3QgbHJ1X2dlbl9zdHJ1Y3QgKmxydWdlbiA9ICZscnV2ZWMtPmxydWdlbjsK KwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTsKKworCVZN X1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShsaXN0KSk7CisKKwlpZiAoZ2V0X25yX2dlbnMobHJ1 dmVjLCB0eXBlKSA9PSBNSU5fTlJfR0VOUykKKwkJcmV0dXJuIDA7CisKKwlnZW4gPSBscnVfZ2Vu X2Zyb21fc2VxKGxydWdlbi0+bWluX3NlcVt0eXBlXSk7CisKKwlmb3IgKHpvbmUgPSBzYy0+cmVj bGFpbV9pZHg7IHpvbmUgPj0gMDsgem9uZS0tKSB7CisJCUxJU1RfSEVBRChtb3ZlZCk7CisJCWlu dCBza2lwcGVkID0gMDsKKwkJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZscnVnZW4tPmxpc3Rz W2dlbl1bdHlwZV1bem9uZV07CisKKwkJd2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7CisJCQlz dHJ1Y3QgZm9saW8gKmZvbGlvID0gbHJ1X3RvX2ZvbGlvKGhlYWQpOworCQkJaW50IGRlbHRhID0g Zm9saW9fbnJfcGFnZXMoZm9saW8pOworCisJCQlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9f dGVzdF91bmV2aWN0YWJsZShmb2xpbyksIGZvbGlvKTsKKwkJCVZNX1dBUk5fT05fT05DRV9GT0xJ Tyhmb2xpb190ZXN0X2FjdGl2ZShmb2xpbyksIGZvbGlvKTsKKwkJCVZNX1dBUk5fT05fT05DRV9G T0xJTyhmb2xpb19pc19maWxlX2xydShmb2xpbykgIT0gdHlwZSwgZm9saW8pOworCQkJVk1fV0FS Tl9PTl9PTkNFX0ZPTElPKGZvbGlvX3pvbmVudW0oZm9saW8pICE9IHpvbmUsIGZvbGlvKTsKKwor CQkJc2Nhbm5lZCArPSBkZWx0YTsKKworCQkJaWYgKHNvcnRfZm9saW8obHJ1dmVjLCBmb2xpbywg dGllcikpCisJCQkJc29ydGVkICs9IGRlbHRhOworCQkJZWxzZSBpZiAoaXNvbGF0ZV9mb2xpbyhs cnV2ZWMsIGZvbGlvLCBzYykpIHsKKwkJCQlsaXN0X2FkZCgmZm9saW8tPmxydSwgbGlzdCk7CisJ CQkJaXNvbGF0ZWQgKz0gZGVsdGE7CisJCQl9IGVsc2UgeworCQkJCWxpc3RfbW92ZSgmZm9saW8t PmxydSwgJm1vdmVkKTsKKwkJCQlza2lwcGVkICs9IGRlbHRhOworCQkJfQorCisJCQlpZiAoIS0t cmVtYWluaW5nIHx8IG1heChpc29sYXRlZCwgc2tpcHBlZCkgPj0gTUlOX0xSVV9CQVRDSCkKKwkJ CQlicmVhazsKKwkJfQorCisJCWlmIChza2lwcGVkKSB7CisJCQlsaXN0X3NwbGljZSgmbW92ZWQs IGhlYWQpOworCQkJX19jb3VudF96aWRfdm1fZXZlbnRzKFBHU0NBTl9TS0lQLCB6b25lLCBza2lw cGVkKTsKKwkJfQorCisJCWlmICghcmVtYWluaW5nIHx8IGlzb2xhdGVkID49IE1JTl9MUlVfQkFU Q0gpCisJCQlicmVhazsKKwl9CisKKwlpdGVtID0gY3VycmVudF9pc19rc3dhcGQoKSA/IFBHU0NB Tl9LU1dBUEQgOiBQR1NDQU5fRElSRUNUOworCWlmICghY2dyb3VwX3JlY2xhaW0oc2MpKSB7CisJ CV9fY291bnRfdm1fZXZlbnRzKGl0ZW0sIGlzb2xhdGVkKTsKKwkJX19jb3VudF92bV9ldmVudHMo UEdSRUZJTEwsIHNvcnRlZCk7CisJfQorCV9fY291bnRfbWVtY2dfZXZlbnRzKG1lbWNnLCBpdGVt LCBpc29sYXRlZCk7CisJX19jb3VudF9tZW1jZ19ldmVudHMobWVtY2csIFBHUkVGSUxMLCBzb3J0 ZWQpOworCV9fY291bnRfdm1fZXZlbnRzKFBHU0NBTl9BTk9OICsgdHlwZSwgaXNvbGF0ZWQpOwor CisJLyoKKwkgKiBUaGVyZSBtaWdodCBub3QgYmUgZWxpZ2libGUgcGFnZXMgZHVlIHRvIHJlY2xh aW1faWR4LCBtYXlfdW5tYXAgYW5kCisJICogbWF5X3dyaXRlcGFnZS4gQ2hlY2sgdGhlIHJlbWFp bmluZyB0byBwcmV2ZW50IGxpdmVsb2NrIGlmIHRoZXJlIGlzIG5vCisJICogcHJvZ3Jlc3MuCisJ ICovCisJcmV0dXJuIGlzb2xhdGVkIHx8ICFyZW1haW5pbmcgPyBzY2FubmVkIDogMDsKK30KKwor c3RhdGljIGludCBnZXRfdGllcl9pZHgoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSkK K3sKKwlpbnQgdGllcjsKKwlzdHJ1Y3QgY3RybF9wb3Mgc3AsIHB2OworCisJLyoKKwkgKiBUbyBs ZWF2ZSBhIG1hcmdpbiBmb3IgZmx1Y3R1YXRpb25zLCB1c2UgYSBsYXJnZXIgZ2FpbiBmYWN0b3Ig KDE6MikuCisJICogVGhpcyB2YWx1ZSBpcyBjaG9zZW4gYmVjYXVzZSBhbnkgb3RoZXIgdGllciB3 b3VsZCBoYXZlIGF0IGxlYXN0IHR3aWNlCisJICogYXMgbWFueSByZWZhdWx0cyBhcyB0aGUgZmly c3QgdGllci4KKwkgKi8KKwlyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgMCwgMSwgJnNwKTsK Kwlmb3IgKHRpZXIgPSAxOyB0aWVyIDwgTUFYX05SX1RJRVJTOyB0aWVyKyspIHsKKwkJcmVhZF9j dHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIDIsICZwdik7CisJCWlmICghcG9zaXRpdmVfY3Ry bF9lcnIoJnNwLCAmcHYpKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHRpZXIgLSAxOworfQor CitzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQg c3dhcHBpbmVzcywgaW50ICp0aWVyX2lkeCkKK3sKKwlpbnQgdHlwZSwgdGllcjsKKwlzdHJ1Y3Qg Y3RybF9wb3Mgc3AsIHB2OworCWludCBnYWluW0FOT05fQU5EX0ZJTEVdID0geyBzd2FwcGluZXNz LCAyMDAgLSBzd2FwcGluZXNzIH07CisKKwkvKgorCSAqIENvbXBhcmUgdGhlIGZpcnN0IHRpZXIg b2YgYW5vbiB3aXRoIHRoYXQgb2YgZmlsZSB0byBkZXRlcm1pbmUgd2hpY2gKKwkgKiB0eXBlIHRv IHNjYW4uIEFsc28gbmVlZCB0byBjb21wYXJlIG90aGVyIHRpZXJzIG9mIHRoZSBzZWxlY3RlZCB0 eXBlCisJICogd2l0aCB0aGUgZmlyc3QgdGllciBvZiB0aGUgb3RoZXIgdHlwZSB0byBkZXRlcm1p bmUgdGhlIGxhc3QgdGllciAob2YKKwkgKiB0aGUgc2VsZWN0ZWQgdHlwZSkgdG8gZXZpY3QuCisJ ICovCisJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIExSVV9HRU5fQU5PTiwgMCwgZ2FpbltMUlVfR0VO X0FOT05dLCAmc3ApOworCXJlYWRfY3RybF9wb3MobHJ1dmVjLCBMUlVfR0VOX0ZJTEUsIDAsIGdh aW5bTFJVX0dFTl9GSUxFXSwgJnB2KTsKKwl0eXBlID0gcG9zaXRpdmVfY3RybF9lcnIoJnNwLCAm cHYpOworCisJcmVhZF9jdHJsX3BvcyhscnV2ZWMsICF0eXBlLCAwLCBnYWluWyF0eXBlXSwgJnNw KTsKKwlmb3IgKHRpZXIgPSAxOyB0aWVyIDwgTUFYX05SX1RJRVJTOyB0aWVyKyspIHsKKwkJcmVh ZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIGdhaW5bdHlwZV0sICZwdik7CisJCWlmICgh cG9zaXRpdmVfY3RybF9lcnIoJnNwLCAmcHYpKQorCQkJYnJlYWs7CisJfQorCisJKnRpZXJfaWR4 ID0gdGllciAtIDE7CisKKwlyZXR1cm4gdHlwZTsKK30KKworc3RhdGljIGludCBpc29sYXRlX2Zv bGlvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQg c3dhcHBpbmVzcywKKwkJCSAgaW50ICp0eXBlX3NjYW5uZWQsIHN0cnVjdCBsaXN0X2hlYWQgKmxp c3QpCit7CisJaW50IGk7CisJaW50IHR5cGU7CisJaW50IHNjYW5uZWQ7CisJaW50IHRpZXIgPSAt MTsKKwlERUZJTkVfTUlOX1NFUShscnV2ZWMpOworCisJLyoKKwkgKiBUcnkgdG8gbWFrZSB0aGUg b2J2aW91cyBjaG9pY2UgZmlyc3QuIFdoZW4gYW5vbiBhbmQgZmlsZSBhcmUgYm90aAorCSAqIGF2 YWlsYWJsZSBmcm9tIHRoZSBzYW1lIGdlbmVyYXRpb24sIGludGVycHJldCBzd2FwcGluZXNzIDEg YXMgZmlsZQorCSAqIGZpcnN0IGFuZCAyMDAgYXMgYW5vbiBmaXJzdC4KKwkgKi8KKwlpZiAoIXN3 YXBwaW5lc3MpCisJCXR5cGUgPSBMUlVfR0VOX0ZJTEU7CisJZWxzZSBpZiAobWluX3NlcVtMUlVf R0VOX0FOT05dIDwgbWluX3NlcVtMUlVfR0VOX0ZJTEVdKQorCQl0eXBlID0gTFJVX0dFTl9BTk9O OworCWVsc2UgaWYgKHN3YXBwaW5lc3MgPT0gMSkKKwkJdHlwZSA9IExSVV9HRU5fRklMRTsKKwll bHNlIGlmIChzd2FwcGluZXNzID09IDIwMCkKKwkJdHlwZSA9IExSVV9HRU5fQU5PTjsKKwllbHNl CisJCXR5cGUgPSBnZXRfdHlwZV90b19zY2FuKGxydXZlYywgc3dhcHBpbmVzcywgJnRpZXIpOwor CisJZm9yIChpID0gIXN3YXBwaW5lc3M7IGkgPCBBTk9OX0FORF9GSUxFOyBpKyspIHsKKwkJaWYg KHRpZXIgPCAwKQorCQkJdGllciA9IGdldF90aWVyX2lkeChscnV2ZWMsIHR5cGUpOworCisJCXNj YW5uZWQgPSBzY2FuX2ZvbGlvcyhscnV2ZWMsIHNjLCB0eXBlLCB0aWVyLCBsaXN0KTsKKwkJaWYg KHNjYW5uZWQpCisJCQlicmVhazsKKworCQl0eXBlID0gIXR5cGU7CisJCXRpZXIgPSAtMTsKKwl9 CisKKwkqdHlwZV9zY2FubmVkID0gdHlwZTsKKworCXJldHVybiBzY2FubmVkOworfQorCitzdGF0 aWMgaW50IGV2aWN0X2ZvbGlvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2Nv bnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcykKK3sKKwlpbnQgdHlwZTsKKwlpbnQgc2Nhbm5lZDsK KwlpbnQgcmVjbGFpbWVkOworCUxJU1RfSEVBRChsaXN0KTsKKwlzdHJ1Y3QgZm9saW8gKmZvbGlv OworCWVudW0gdm1fZXZlbnRfaXRlbSBpdGVtOworCXN0cnVjdCByZWNsYWltX3N0YXQgc3RhdDsK KwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTsKKwlzdHJ1 Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7CisKKwlzcGluX2xv Y2tfaXJxKCZscnV2ZWMtPmxydV9sb2NrKTsKKworCXNjYW5uZWQgPSBpc29sYXRlX2ZvbGlvcyhs cnV2ZWMsIHNjLCBzd2FwcGluZXNzLCAmdHlwZSwgJmxpc3QpOworCisJaWYgKHRyeV90b19pbmNf bWluX3NlcShscnV2ZWMsIHN3YXBwaW5lc3MpKQorCQlzY2FubmVkKys7CisKKwlpZiAoZ2V0X25y X2dlbnMobHJ1dmVjLCAhc3dhcHBpbmVzcykgPT0gTUlOX05SX0dFTlMpCisJCXNjYW5uZWQgPSAw OworCisJc3Bpbl91bmxvY2tfaXJxKCZscnV2ZWMtPmxydV9sb2NrKTsKKworCWlmIChsaXN0X2Vt cHR5KCZsaXN0KSkKKwkJcmV0dXJuIHNjYW5uZWQ7CisKKwlyZWNsYWltZWQgPSBzaHJpbmtfcGFn ZV9saXN0KCZsaXN0LCBwZ2RhdCwgc2MsICZzdGF0LCBmYWxzZSk7CisKKwkvKgorCSAqIFRvIGF2 b2lkIGxpdmVsb2NrLCBkb24ndCBhZGQgcmVqZWN0ZWQgcGFnZXMgYmFjayB0byB0aGUgc2FtZSBs aXN0cworCSAqIHRoZXkgd2VyZSBpc29sYXRlZCBmcm9tLiBTZWUgbHJ1X2dlbl9hZGRfZm9saW8o KS4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZvbGlvLCAmbGlzdCwgbHJ1KSB7CisJCWZv bGlvX2NsZWFyX3JlZmVyZW5jZWQoZm9saW8pOworCQlmb2xpb19jbGVhcl93b3JraW5nc2V0KGZv bGlvKTsKKworCQlpZiAoZm9saW9fdGVzdF9yZWNsYWltKGZvbGlvKSAmJgorCQkgICAgKGZvbGlv X3Rlc3RfZGlydHkoZm9saW8pIHx8IGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkpCisJCQlm b2xpb19jbGVhcl9hY3RpdmUoZm9saW8pOworCQllbHNlCisJCQlmb2xpb19zZXRfYWN0aXZlKGZv bGlvKTsKKwl9CisKKwlzcGluX2xvY2tfaXJxKCZscnV2ZWMtPmxydV9sb2NrKTsKKworCW1vdmVf cGFnZXNfdG9fbHJ1KGxydXZlYywgJmxpc3QpOworCisJaXRlbSA9IGN1cnJlbnRfaXNfa3N3YXBk KCkgPyBQR1NURUFMX0tTV0FQRCA6IFBHU1RFQUxfRElSRUNUOworCWlmICghY2dyb3VwX3JlY2xh aW0oc2MpKQorCQlfX2NvdW50X3ZtX2V2ZW50cyhpdGVtLCByZWNsYWltZWQpOworCV9fY291bnRf bWVtY2dfZXZlbnRzKG1lbWNnLCBpdGVtLCByZWNsYWltZWQpOworCV9fY291bnRfdm1fZXZlbnRz KFBHU1RFQUxfQU5PTiArIHR5cGUsIHJlY2xhaW1lZCk7CisKKwlzcGluX3VubG9ja19pcnEoJmxy dXZlYy0+bHJ1X2xvY2spOworCisJbWVtX2Nncm91cF91bmNoYXJnZV9saXN0KCZsaXN0KTsKKwlm cmVlX3VucmVmX3BhZ2VfbGlzdCgmbGlzdCk7CisKKwlzYy0+bnJfcmVjbGFpbWVkICs9IHJlY2xh aW1lZDsKKworCXJldHVybiBzY2FubmVkOworfQorCitzdGF0aWMgbG9uZyBnZXRfbnJfdG9fc2Nh bihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBib29sIGNh bl9zd2FwKQoreworCWJvb2wgbmVlZF9hZ2luZzsKKwlsb25nIG5yX3RvX3NjYW47CisJc3RydWN0 IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7CisJREVGSU5FX01BWF9T RVEobHJ1dmVjKTsKKwlERUZJTkVfTUlOX1NFUShscnV2ZWMpOworCisJaWYgKG1lbV9jZ3JvdXBf YmVsb3dfbWluKG1lbWNnKSB8fAorCSAgICAobWVtX2Nncm91cF9iZWxvd19sb3cobWVtY2cpICYm ICFzYy0+bWVtY2dfbG93X3JlY2xhaW0pKQorCQlyZXR1cm4gMDsKKworCW5yX3RvX3NjYW4gPSBn ZXRfbnJfZXZpY3RhYmxlKGxydXZlYywgbWF4X3NlcSwgbWluX3NlcSwgY2FuX3N3YXAsICZuZWVk X2FnaW5nKTsKKwlpZiAoIW5yX3RvX3NjYW4pCisJCXJldHVybiAwOworCisJLyogcmVzZXQgdGhl IHByaW9yaXR5IGlmIHRoZSB0YXJnZXQgaGFzIGJlZW4gbWV0ICovCisJbnJfdG9fc2NhbiA+Pj0g c2MtPm5yX3JlY2xhaW1lZCA8IHNjLT5ucl90b19yZWNsYWltID8gc2MtPnByaW9yaXR5IDogREVG X1BSSU9SSVRZOworCisJaWYgKCFtZW1fY2dyb3VwX29ubGluZShtZW1jZykpCisJCW5yX3RvX3Nj YW4rKzsKKworCWlmICghbnJfdG9fc2NhbikKKwkJcmV0dXJuIDA7CisKKwlpZiAoIW5lZWRfYWdp bmcpCisJCXJldHVybiBucl90b19zY2FuOworCisJLyogbGVhdmUgdGhlIHdvcmsgdG8gbHJ1X2dl bl9hZ2Vfbm9kZSgpICovCisJaWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkpCisJCXJldHVybiAwOwor CisJLyogdHJ5IG90aGVyIG1lbWNncyBiZWZvcmUgZ29pbmcgdG8gdGhlIGFnaW5nIHBhdGggKi8K KwlpZiAoIWNncm91cF9yZWNsYWltKHNjKSAmJiAhc2MtPmZvcmNlX2RlYWN0aXZhdGUpIHsKKwkJ c2MtPnNraXBwZWRfZGVhY3RpdmF0ZSA9IHRydWU7CisJCXJldHVybiAwOworCX0KKworCWluY19t YXhfc2VxKGxydXZlYywgbWF4X3NlcSwgY2FuX3N3YXApOworCisJcmV0dXJuIG5yX3RvX3NjYW47 Cit9CisKK3N0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICps cnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQoreworCXN0cnVjdCBibGtfcGx1ZyBwbHVn OworCWxvbmcgc2Nhbm5lZCA9IDA7CisKKwlscnVfYWRkX2RyYWluKCk7CisKKwlibGtfc3RhcnRf cGx1ZygmcGx1Zyk7CisKKwl3aGlsZSAodHJ1ZSkgeworCQlpbnQgZGVsdGE7CisJCWludCBzd2Fw cGluZXNzOworCQlsb25nIG5yX3RvX3NjYW47CisKKwkJaWYgKHNjLT5tYXlfc3dhcCkKKwkJCXN3 YXBwaW5lc3MgPSBnZXRfc3dhcHBpbmVzcyhscnV2ZWMsIHNjKTsKKwkJZWxzZSBpZiAoIWNncm91 cF9yZWNsYWltKHNjKSAmJiBnZXRfc3dhcHBpbmVzcyhscnV2ZWMsIHNjKSkKKwkJCXN3YXBwaW5l c3MgPSAxOworCQllbHNlCisJCQlzd2FwcGluZXNzID0gMDsKKworCQlucl90b19zY2FuID0gZ2V0 X25yX3RvX3NjYW4obHJ1dmVjLCBzYywgc3dhcHBpbmVzcyk7CisJCWlmICghbnJfdG9fc2NhbikK KwkJCWJyZWFrOworCisJCWRlbHRhID0gZXZpY3RfZm9saW9zKGxydXZlYywgc2MsIHN3YXBwaW5l c3MpOworCQlpZiAoIWRlbHRhKQorCQkJYnJlYWs7CisKKwkJc2Nhbm5lZCArPSBkZWx0YTsKKwkJ aWYgKHNjYW5uZWQgPj0gbnJfdG9fc2NhbikKKwkJCWJyZWFrOworCisJCWNvbmRfcmVzY2hlZCgp OworCX0KKworCWJsa19maW5pc2hfcGx1ZygmcGx1Zyk7Cit9CisKIC8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioKICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXphdGlvbgogICoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KQEAgLTMwNDEsNiArMzgwNCwxNiBAQCBzdGF0aWMgaW50IF9faW5p dCBpbml0X2xydV9nZW4odm9pZCkKIH07CiBsYXRlX2luaXRjYWxsKGluaXRfbHJ1X2dlbik7CiAK KyNlbHNlCisKK3N0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRh ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCit7Cit9CisKK3N0YXRpYyB2b2lkIGxy dV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2Nv bnRyb2wgKnNjKQoreworfQorCiAjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi8KIAogc3RhdGlj IHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2Nv bnRyb2wgKnNjKQpAQCAtMzA1NCw2ICszODI3LDExIEBAIHN0YXRpYyB2b2lkIHNocmlua19scnV2 ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIAlzdHJ1 Y3QgYmxrX3BsdWcgcGx1ZzsKIAlib29sIHNjYW5fYWRqdXN0ZWQ7CiAKKwlpZiAobHJ1X2dlbl9l bmFibGVkKCkpIHsKKwkJbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpOworCQlyZXR1 cm47CisJfQorCiAJZ2V0X3NjYW5fY291bnQobHJ1dmVjLCBzYywgbnIpOwogCiAJLyogUmVjb3Jk IHRoZSBvcmlnaW5hbCBzY2FuIHRhcmdldCBmb3IgcHJvcG9ydGlvbmFsIGFkanVzdG1lbnRzIGxh dGVyICovCkBAIC0zNTU4LDYgKzQzMzYsOSBAQCBzdGF0aWMgdm9pZCBzbmFwc2hvdF9yZWZhdWx0 cyhzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KQogCXN0 cnVjdCBscnV2ZWMgKnRhcmdldF9scnV2ZWM7CiAJdW5zaWduZWQgbG9uZyByZWZhdWx0czsKIAor CWlmIChscnVfZ2VuX2VuYWJsZWQoKSkKKwkJcmV0dXJuOworCiAJdGFyZ2V0X2xydXZlYyA9IG1l bV9jZ3JvdXBfbHJ1dmVjKHRhcmdldF9tZW1jZywgcGdkYXQpOwogCXJlZmF1bHRzID0gbHJ1dmVj X3BhZ2Vfc3RhdGUodGFyZ2V0X2xydXZlYywgV09SS0lOR1NFVF9BQ1RJVkFURV9BTk9OKTsKIAl0 YXJnZXRfbHJ1dmVjLT5yZWZhdWx0c1swXSA9IHJlZmF1bHRzOwpAQCAtMzkyMiwxMiArNDcwMywx NyBAQCB1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1l bV9jZ3JvdXAgKm1lbWNnLAogfQogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIGFnZV9hY3RpdmVfYW5v bihzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LAorc3RhdGljIHZvaWQga3N3YXBkX2FnZV9ub2Rl KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsCiAJCQkJc3RydWN0IHNjYW5fY29udHJvbCAqc2Mp CiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwogCXN0cnVjdCBscnV2ZWMgKmxydXZlYzsK IAorCWlmIChscnVfZ2VuX2VuYWJsZWQoKSkgeworCQlscnVfZ2VuX2FnZV9ub2RlKHBnZGF0LCBz Yyk7CisJCXJldHVybjsKKwl9CisKIAlpZiAoIWNhbl9hZ2VfYW5vbl9wYWdlcyhwZ2RhdCwgc2Mp KQogCQlyZXR1cm47CiAKQEAgLTQyNDcsMTIgKzUwMzMsMTEgQEAgc3RhdGljIGludCBiYWxhbmNl X3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeCkK IAkJc2MubWF5X3N3YXAgPSAhbnJfYm9vc3RfcmVjbGFpbTsKIAogCQkvKgotCQkgKiBEbyBzb21l IGJhY2tncm91bmQgYWdpbmcgb2YgdGhlIGFub24gbGlzdCwgdG8gZ2l2ZQotCQkgKiBwYWdlcyBh IGNoYW5jZSB0byBiZSByZWZlcmVuY2VkIGJlZm9yZSByZWNsYWltaW5nLiBBbGwKLQkJICogcGFn ZXMgYXJlIHJvdGF0ZWQgcmVnYXJkbGVzcyBvZiBjbGFzc3pvbmUgYXMgdGhpcyBpcwotCQkgKiBh Ym91dCBjb25zaXN0ZW50IGFnaW5nLgorCQkgKiBEbyBzb21lIGJhY2tncm91bmQgYWdpbmcsIHRv IGdpdmUgcGFnZXMgYSBjaGFuY2UgdG8gYmUKKwkJICogcmVmZXJlbmNlZCBiZWZvcmUgcmVjbGFp bWluZy4gQWxsIHBhZ2VzIGFyZSByb3RhdGVkCisJCSAqIHJlZ2FyZGxlc3Mgb2YgY2xhc3N6b25l IGFzIHRoaXMgaXMgYWJvdXQgY29uc2lzdGVudCBhZ2luZy4KIAkJICovCi0JCWFnZV9hY3RpdmVf YW5vbihwZ2RhdCwgJnNjKTsKKwkJa3N3YXBkX2FnZV9ub2RlKHBnZGF0LCAmc2MpOwogCiAJCS8q CiAJCSAqIElmIHdlJ3JlIGdldHRpbmcgdHJvdWJsZSByZWNsYWltaW5nLCBzdGFydCBkb2luZyB3 cml0ZXBhZ2UKZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuYwpp bmRleCA1OTI1NjlhODk3NGMuLmRiNmYwYzhhOThjMiAxMDA2NDQKLS0tIGEvbW0vd29ya2luZ3Nl dC5jCisrKyBiL21tL3dvcmtpbmdzZXQuYwpAQCAtMTg3LDcgKzE4Nyw2IEBAIHN0YXRpYyB1bnNp Z25lZCBpbnQgYnVja2V0X29yZGVyIF9fcmVhZF9tb3N0bHk7CiBzdGF0aWMgdm9pZCAqcGFja19z aGFkb3coaW50IG1lbWNnaWQsIHBnX2RhdGFfdCAqcGdkYXQsIHVuc2lnbmVkIGxvbmcgZXZpY3Rp b24sCiAJCQkgYm9vbCB3b3JraW5nc2V0KQogewotCWV2aWN0aW9uID4+PSBidWNrZXRfb3JkZXI7 CiAJZXZpY3Rpb24gJj0gRVZJQ1RJT05fTUFTSzsKIAlldmljdGlvbiA9IChldmljdGlvbiA8PCBN RU1fQ0dST1VQX0lEX1NISUZUKSB8IG1lbWNnaWQ7CiAJZXZpY3Rpb24gPSAoZXZpY3Rpb24gPDwg Tk9ERVNfU0hJRlQpIHwgcGdkYXQtPm5vZGVfaWQ7CkBAIC0yMTIsMTAgKzIxMSwxMDcgQEAgc3Rh dGljIHZvaWQgdW5wYWNrX3NoYWRvdyh2b2lkICpzaGFkb3csIGludCAqbWVtY2dpZHAsIHBnX2Rh dGFfdCAqKnBnZGF0LAogCiAJKm1lbWNnaWRwID0gbWVtY2dpZDsKIAkqcGdkYXQgPSBOT0RFX0RB VEEobmlkKTsKLQkqZXZpY3Rpb25wID0gZW50cnkgPDwgYnVja2V0X29yZGVyOworCSpldmljdGlv bnAgPSBlbnRyeTsKIAkqd29ya2luZ3NldHAgPSB3b3JraW5nc2V0OwogfQogCisjaWZkZWYgQ09O RklHX0xSVV9HRU4KKworc3RhdGljIHZvaWQgKmxydV9nZW5fZXZpY3Rpb24oc3RydWN0IGZvbGlv ICpmb2xpbykKK3sKKwlpbnQgaGlzdDsKKwl1bnNpZ25lZCBsb25nIHRva2VuOworCXVuc2lnbmVk IGxvbmcgbWluX3NlcTsKKwlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7CisJc3RydWN0IGxydV9nZW5f c3RydWN0ICpscnVnZW47CisJaW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7CisJ aW50IGRlbHRhID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOworCWludCByZWZzID0gZm9saW9fbHJ1 X3JlZnMoZm9saW8pOworCWludCB0aWVyID0gbHJ1X3RpZXJfZnJvbV9yZWZzKHJlZnMpOworCXN0 cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTsKKwlzdHJ1Y3QgcGds aXN0X2RhdGEgKnBnZGF0ID0gZm9saW9fcGdkYXQoZm9saW8pOworCisJQlVJTERfQlVHX09OKExS VV9HRU5fV0lEVEggKyBMUlVfUkVGU19XSURUSCA+IEJJVFNfUEVSX0xPTkcgLSBFVklDVElPTl9T SElGVCk7CisKKwlscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpOworCWxy dWdlbiA9ICZscnV2ZWMtPmxydWdlbjsKKwltaW5fc2VxID0gUkVBRF9PTkNFKGxydWdlbi0+bWlu X3NlcVt0eXBlXSk7CisJdG9rZW4gPSAobWluX3NlcSA8PCBMUlVfUkVGU19XSURUSCkgfCBtYXgo cmVmcyAtIDEsIDApOworCisJaGlzdCA9IGxydV9oaXN0X2Zyb21fc2VxKG1pbl9zZXEpOworCWF0 b21pY19sb25nX2FkZChkZWx0YSwgJmxydWdlbi0+ZXZpY3RlZFtoaXN0XVt0eXBlXVt0aWVyXSk7 CisKKwlyZXR1cm4gcGFja19zaGFkb3cobWVtX2Nncm91cF9pZChtZW1jZyksIHBnZGF0LCB0b2tl biwgcmVmcyk7Cit9CisKK3N0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8g KmZvbGlvLCB2b2lkICpzaGFkb3cpCit7CisJaW50IGhpc3QsIHRpZXIsIHJlZnM7CisJaW50IG1l bWNnX2lkOworCWJvb2wgd29ya2luZ3NldDsKKwl1bnNpZ25lZCBsb25nIHRva2VuOworCXVuc2ln bmVkIGxvbmcgbWluX3NlcTsKKwlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7CisJc3RydWN0IGxydV9n ZW5fc3RydWN0ICpscnVnZW47CisJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOworCXN0cnVjdCBw Z2xpc3RfZGF0YSAqcGdkYXQ7CisJaW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7 CisJaW50IGRlbHRhID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOworCisJdW5wYWNrX3NoYWRvdyhz aGFkb3csICZtZW1jZ19pZCwgJnBnZGF0LCAmdG9rZW4sICZ3b3JraW5nc2V0KTsKKworCWlmIChm b2xpb19wZ2RhdChmb2xpbykgIT0gcGdkYXQpCisJCXJldHVybjsKKworCS8qIHNlZSB0aGUgY29t bWVudCBpbiBmb2xpb19scnVfcmVmcygpICovCisJcmVmcyA9ICh0b2tlbiAmIChCSVQoTFJVX1JF RlNfV0lEVEgpIC0gMSkpICsgd29ya2luZ3NldDsKKwl0aWVyID0gbHJ1X3RpZXJfZnJvbV9yZWZz KHJlZnMpOworCisJcmN1X3JlYWRfbG9jaygpOworCW1lbWNnID0gZm9saW9fbWVtY2dfcmN1KGZv bGlvKTsKKwlpZiAobWVtX2Nncm91cF9pZChtZW1jZykgIT0gbWVtY2dfaWQpCisJCWdvdG8gdW5s b2NrOworCisJbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMobWVtY2csIHBnZGF0KTsKKwlscnVn ZW4gPSAmbHJ1dmVjLT5scnVnZW47CisJbWluX3NlcSA9IFJFQURfT05DRShscnVnZW4tPm1pbl9z ZXFbdHlwZV0pOworCisJdG9rZW4gPj49IExSVV9SRUZTX1dJRFRIOworCWlmICh0b2tlbiAhPSAo bWluX3NlcSAmIChFVklDVElPTl9NQVNLID4+IExSVV9SRUZTX1dJRFRIKSkpCisJCWdvdG8gdW5s b2NrOworCisJaGlzdCA9IGxydV9oaXN0X2Zyb21fc2VxKG1pbl9zZXEpOworCWF0b21pY19sb25n X2FkZChkZWx0YSwgJmxydWdlbi0+cmVmYXVsdGVkW2hpc3RdW3R5cGVdW3RpZXJdKTsKKwltb2Rf bHJ1dmVjX3N0YXRlKGxydXZlYywgV09SS0lOR1NFVF9SRUZBVUxUX0JBU0UgKyB0eXBlLCBkZWx0 YSk7CisKKwkvKgorCSAqIENvdW50IHRoZSBmb2xsb3dpbmcgdHdvIGNhc2VzIGFzIHN0YWxsczoK KwkgKiAxLiBGb3IgcGFnZXMgYWNjZXNzZWQgdGhyb3VnaCBwYWdlIHRhYmxlcywgaG90dGVyIHBh Z2VzIHB1c2hlZCBvdXQKKwkgKiAgICBob3QgcGFnZXMgd2hpY2ggcmVmYXVsdGVkIGltbWVkaWF0 ZWx5LgorCSAqIDIuIEZvciBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMs IG51bWJlcnMgb2YgYWNjZXNzZXMKKwkgKiAgICBtaWdodCBoYXZlIGJlZW4gYmV5b25kIHRoZSBs aW1pdC4KKwkgKi8KKwlpZiAobHJ1X2dlbl9pbl9mYXVsdCgpIHx8IHJlZnMgPT0gQklUKExSVV9S RUZTX1dJRFRIKSkgeworCQlmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7CisJCW1vZF9scnV2 ZWNfc3RhdGUobHJ1dmVjLCBXT1JLSU5HU0VUX1JFU1RPUkVfQkFTRSArIHR5cGUsIGRlbHRhKTsK Kwl9Cit1bmxvY2s6CisJcmN1X3JlYWRfdW5sb2NrKCk7Cit9CisKKyNlbHNlCisKK3N0YXRpYyB2 b2lkICpscnVfZ2VuX2V2aWN0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8pCit7CisJcmV0dXJuIE5V TEw7Cit9CisKK3N0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlv LCB2b2lkICpzaGFkb3cpCit7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqLworCiAv KioKICAqIHdvcmtpbmdzZXRfYWdlX25vbnJlc2lkZW50IC0gYWdlIG5vbi1yZXNpZGVudCBlbnRy aWVzIGFzIExSVSBhZ2VzCiAgKiBAbHJ1dmVjOiB0aGUgbHJ1dmVjIHRoYXQgd2FzIGFnZWQKQEAg LTI2NCwxMCArMzYwLDE0IEBAIHZvaWQgKndvcmtpbmdzZXRfZXZpY3Rpb24oc3RydWN0IGZvbGlv ICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZykKIAlWTV9CVUdfT05fRk9M SU8oZm9saW9fcmVmX2NvdW50KGZvbGlvKSwgZm9saW8pOwogCVZNX0JVR19PTl9GT0xJTyghZm9s aW9fdGVzdF9sb2NrZWQoZm9saW8pLCBmb2xpbyk7CiAKKwlpZiAobHJ1X2dlbl9lbmFibGVkKCkp CisJCXJldHVybiBscnVfZ2VuX2V2aWN0aW9uKGZvbGlvKTsKKwogCWxydXZlYyA9IG1lbV9jZ3Jv dXBfbHJ1dmVjKHRhcmdldF9tZW1jZywgcGdkYXQpOwogCS8qIFhYWDogdGFyZ2V0X21lbWNnIGNh biBiZSBOVUxMLCBnbyB0aHJvdWdoIGxydXZlYyAqLwogCW1lbWNnaWQgPSBtZW1fY2dyb3VwX2lk KGxydXZlY19tZW1jZyhscnV2ZWMpKTsKIAlldmljdGlvbiA9IGF0b21pY19sb25nX3JlYWQoJmxy dXZlYy0+bm9ucmVzaWRlbnRfYWdlKTsKKwlldmljdGlvbiA+Pj0gYnVja2V0X29yZGVyOwogCXdv cmtpbmdzZXRfYWdlX25vbnJlc2lkZW50KGxydXZlYywgZm9saW9fbnJfcGFnZXMoZm9saW8pKTsK IAlyZXR1cm4gcGFja19zaGFkb3cobWVtY2dpZCwgcGdkYXQsIGV2aWN0aW9uLAogCQkJCWZvbGlv X3Rlc3Rfd29ya2luZ3NldChmb2xpbykpOwpAQCAtMjk4LDcgKzM5OCwxMyBAQCB2b2lkIHdvcmtp bmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpCiAJaW50IG1l bWNnaWQ7CiAJbG9uZyBucjsKIAorCWlmIChscnVfZ2VuX2VuYWJsZWQoKSkgeworCQlscnVfZ2Vu X3JlZmF1bHQoZm9saW8sIHNoYWRvdyk7CisJCXJldHVybjsKKwl9CisKIAl1bnBhY2tfc2hhZG93 KHNoYWRvdywgJm1lbWNnaWQsICZwZ2RhdCwgJmV2aWN0aW9uLCAmd29ya2luZ3NldCk7CisJZXZp Y3Rpb24gPDw9IGJ1Y2tldF9vcmRlcjsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAkvKgotLSAKMi4z Ni4wLjU1MC5nYjA5MDg1MTcwOC1nb29nCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJt LWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21h aWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=