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 66174C433FE for ; Tue, 8 Feb 2022 08:22:18 +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=9Cp5wDo3TE4ijHsiMgXd9ZRnyHtPAVqJN6NnTakd/a4=; b=1MQSzmVuUAkNbllfZOJCzjbMhf LHsKCdjn9z2hTEHSWcD3pWG9gJhbHYBMg+FS4pcBSiIiyXujfH7qdrLX9a6kpI2HnzGfX8XXJA2gj S+vuBtyzVDVo9r9je0xkGKzAOH4PIkrR1vfUGImXhAjsOxjlLckvIyCRMPr1BIJBErT9ySDUAJji6 3LDiLO5c2ntQcUeXmcdVnwP3qG9JtqSMB7HDxbodK4dbqLlsJ3DpTshb6t/igPxpmziFlMr5zk2iZ IR7dYVaYSbc+tzEnVMbYg7vrRVjkiuQPozjUURGMbQakidIRrRoZF0Lp4FL9mf2wVoEgh5VuTcnjm fCgG3dVw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nHLjL-00CuBT-Ke; Tue, 08 Feb 2022 08:20:07 +0000 Received: from mail-yb1-xb49.google.com ([2607:f8b0:4864:20::b49]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nHLip-00CtuN-8X for linux-arm-kernel@lists.infradead.org; Tue, 08 Feb 2022 08:19:44 +0000 Received: by mail-yb1-xb49.google.com with SMTP id a19-20020a25ca13000000b0061db44646b3so10894954ybg.2 for ; Tue, 08 Feb 2022 00:19:34 -0800 (PST) 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=Qy/jG63Z/HNwxweC2LEWg9GcwwRdrJKnRVS+XoInOik=; b=qpWPzAtI+Lh2V4y6mtn3SWiFQ2Uq5tGeu8mzKoodNF38MqP5TvGw+ouAfOdjW0zItu HkKfgMYmd/lq/49tidKMscnAFHiANf3rXb8NcqiI+/aRIKx2pH4WkZkNE1mFVtsVfnoI 6ePYBz51kU52Ch++O8PbIujICPODj9c0ed6ABcONk0O9313T1LBEyJCpvVRmPgeB0jzK OdH9LFAHi63lofDFL0L7pMlXK31UtH1Qi5L9DCM+i7ANHOE14ZCSUWcqitXtTofrUFhl W0UaBZUdkuNlTtgNydMRyjaHlhqtXc4i39kSJi2pWNDi9RzhM/llXfAUEvWOICpSsd2A 7H/Q== 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=Qy/jG63Z/HNwxweC2LEWg9GcwwRdrJKnRVS+XoInOik=; b=cY52WrU6XZ0jwbJj6tnlczFlSIHI+bO+TbLw0HkmT+ZGRPwQOGEcCHTqtC6nrpdR1u jrQmrvdlUr1HAdUKGpQ4VhhxL5y0qUv7ImX9l4k84LMLgLE2ImQEc8CBTb2nXYQYNnwz FTntwSo42klozg8c6+LtYpTy+1/dDClQ/88224RKiushDaVp4vP5UmN0olh+EoDqivgv wtOffi6nRAYGGrZCOQjHWGvAUQ7zRCSJIlBXRoPpCCt6EDnS5/EZj+3A39Kwp9yCpE2F 5uSpafoW27HM4I617woZ/rNVwf2J/iUl0Fs+AeEiCX1djz8Z9zYOZHOrmQYtWU7O9aGD elkQ== X-Gm-Message-State: AOAM53390cBxcexCoIJDX3QzTnIHC1/6ukYiYl+95ikRgeD2ibUGaBnd MkDHAiB/6UQf74Yv28qQuZgx0epw53Y= X-Google-Smtp-Source: ABdhPJw9T4ScbAOd16782C2gEYqqYuQMupTU1Yf6CmIJLtOeMwLlgSKgG1ridxnKqPIZ2c+e4Sj7ugetd0A= X-Received: from yuzhao.bld.corp.google.com ([2620:15c:183:200:5f31:19c3:21f5:7300]) (user=yuzhao job=sendgmr) by 2002:a81:8d07:: with SMTP id d7mr1305983ywg.212.1644308374011; Tue, 08 Feb 2022 00:19:34 -0800 (PST) Date: Tue, 8 Feb 2022 01:18:55 -0700 In-Reply-To: <20220208081902.3550911-1-yuzhao@google.com> Message-Id: <20220208081902.3550911-6-yuzhao@google.com> Mime-Version: 1.0 References: <20220208081902.3550911-1-yuzhao@google.com> X-Mailer: git-send-email 2.35.0.263.gb82422642f-goog Subject: [PATCH v7 05/12] mm: multigenerational LRU: minimal implementation From: Yu Zhao To: Andrew Morton , Johannes Weiner , Mel Gorman , Michal Hocko Cc: Andi Kleen , Aneesh Kumar , Barry Song <21cnbao@gmail.com>, Catalin Marinas , Dave Hansen , Hillf Danton , Jens Axboe , Jesse Barnes , Jonathan Corbet , Linus Torvalds , Matthew Wilcox , Michael Larabel , Mike Rapoport , Rik van Riel , Vlastimil Babka , Will Deacon , Ying Huang , linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, page-reclaim@google.com, x86@kernel.org, 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 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220208_001935_389013_54B07389 X-CRM114-Status: GOOD ( 24.75 ) 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 VG8gYXZvaWQgY29uZnVzaW9ucywgdGhlIHRlcm1zICJwcm9tb3Rpb24iIGFuZCAiZGVtb3Rpb24i IHdpbGwgYmUKYXBwbGllZCB0byB0aGUgbXVsdGlnZW5lcmF0aW9uYWwgTFJVLCBhcyBhIG5ldyBj b252ZW50aW9uOyB0aGUgdGVybXMKImFjdGl2YXRpb24iIGFuZCAiZGVhY3RpdmF0aW9uIiB3aWxs IGJlIGFwcGxpZWQgdG8gdGhlIGFjdGl2ZS9pbmFjdGl2ZQpMUlUsIGFzIHVzdWFsLgoKVGhlIGFn aW5nIHByb2R1Y2VzIHlvdW5nIGdlbmVyYXRpb25zLiBHaXZlbiBhbiBscnV2ZWMsIGl0IGluY3Jl bWVudHMKbWF4X3NlcSB3aGVuIG1heF9zZXEtbWluX3NlcSsxIGFwcHJvYWNoZXMgTUlOX05SX0dF TlMuIFRoZSBhZ2luZwpwcm9tb3RlcyBob3QgcGFnZXMgdG8gdGhlIHlvdW5nZXN0IGdlbmVyYXRp b24gd2hlbiBpdCBmaW5kcyB0aGVtCmFjY2Vzc2VkIHRocm91Z2ggcGFnZSB0YWJsZXM7IHRoZSBk ZW1vdGlvbiBvZiBjb2xkIHBhZ2VzIGhhcHBlbnMKY29uc2VxdWVudGx5IHdoZW4gaXQgaW5jcmVt ZW50cyBtYXhfc2VxLiBTaW5jZSB0aGUgYWdpbmcgaXMgb25seQppbnRlcmVzdGVkIGluIGhvdCBw YWdlcywgaXRzIGNvbXBsZXhpdHkgaXMgTyhucl9ob3RfcGFnZXMpLiBQcm9tb3Rpb24KaW4gdGhl IGFnaW5nIHBhdGggZG9lc24ndCByZXF1aXJlIGFueSBMUlUgbGlzdCBvcGVyYXRpb25zLCBvbmx5 IHRoZQp1cGRhdGVzIG9mIHRoZSBnZW4gY291bnRlciBhbmQgbHJ1Z2VuLT5ucl9wYWdlc1tdOyBk ZW1vdGlvbiwgdW5sZXNzCmFzIHRoZSByZXN1bHQgb2YgdGhlIGluY3JlbWVudCBvZiBtYXhfc2Vx LCByZXF1aXJlcyBMUlUgbGlzdApvcGVyYXRpb25zLCBlLmcuLCBscnVfZGVhY3RpdmF0ZV9mbigp LgoKVGhlIGV2aWN0aW9uIGNvbnN1bWVzIG9sZCBnZW5lcmF0aW9ucy4gR2l2ZW4gYW4gbHJ1dmVj LCBpdCBpbmNyZW1lbnRzCm1pbl9zZXEgd2hlbiB0aGUgbGlzdCBpbmRleGVkIGJ5IG1pbl9zZXEl TUFYX05SX0dFTlMgYmVjb21lcyBlbXB0eS4gQQpmZWVkYmFjayBsb29wIG1vZGVsZWQgYWZ0ZXIg dGhlIFBJRCBjb250cm9sbGVyIG1vbml0b3JzIHJlZmF1bHRzIG92ZXIKYW5vbiBhbmQgZmlsZSB0 eXBlcyBhbmQgZGVjaWRlcyB3aGljaCB0eXBlIHRvIGV2aWN0IHdoZW4gYm90aCBhcmUKYXZhaWxh YmxlIGZyb20gdGhlIHNhbWUgZ2VuZXJhdGlvbi4KCkVhY2ggZ2VuZXJhdGlvbiBpcyBkaXZpZGVk IGludG8gbXVsdGlwbGUgdGllcnMuIFRpZXJzIHJlcHJlc2VudApkaWZmZXJlbnQgcmFuZ2VzIG9m IG51bWJlcnMgb2YgYWNjZXNzZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzLiBBCnBhZ2UgYWNj ZXNzZWQgTiB0aW1lcyB0aHJvdWdoIGZpbGUgZGVzY3JpcHRvcnMgaXMgaW4gdGllcgpvcmRlcl9i YXNlXzIoTikuIFRpZXJzIGRvbid0IGhhdmUgZGVkaWNhdGVkIGxydWdlbi0+bGlzdHNbXSwgb25s eSBiaXRzCmluIGZvbGlvLT5mbGFncy4gIEluIGNvbnRyYXN0IHRvIG1vdmluZyBhY3Jvc3MgZ2Vu ZXJhdGlvbnMgd2hpY2gKcmVxdWlyZXMgdGhlIExSVSBsb2NrLCBtb3ZpbmcgYmV0d2VlbiB0aWVy cyBvbmx5IGludm9sdmVzIG9wZXJhdGlvbnMKb24gZm9saW8tPmZsYWdzLiBUaGUgZmVlZGJhY2sg bG9vcCBhbHNvIG1vbml0b3JzIHJlZmF1bHRzIG92ZXIgYWxsCnRpZXJzIGFuZCBkZWNpZGVzIHdo ZW4gdG8gcHJvbW90ZSBwYWdlcyBpbiB3aGljaCB0aWVycyAoTj4xKSwgdXNpbmcKdGhlIGZpcnN0 IHRpZXIgKE49MCwxKSBhcyBhIGJhc2VsaW5lLiBUaGUgZmlyc3QgdGllciBjb250YWlucwpzaW5n bGUtdXNlIHVubWFwcGVkIGNsZWFuIHBhZ2VzLCB3aGljaCBhcmUgbW9zdCBsaWtlbHkgdGhlIGJl c3QKY2hvaWNlcy4gVGhlIGV2aWN0aW9uIHByb21vdGVzIGEgcGFnZSB0byB0aGUgbmV4dCBnZW5l cmF0aW9uLCBpLmUuLAptaW5fc2VxKzEgcmF0aGVyIHRoYW4gbWF4X3NlcSwgaWYgdGhlIGZlZWRi YWNrIGxvb3AgZGVjaWRlcyBzby4gVGhpcwphcHByb2FjaCBoYXMgdGhlIGZvbGxvd2luZyBhZHZh bnRhZ2VzOgoxKSBJdCByZW1vdmVzIHRoZSBjb3N0IG9mIGFjdGl2YXRpb24gaW4gdGhlIGJ1ZmZl cmVkIGFjY2VzcyBwYXRoIGJ5CiAgIGluZmVycmluZyB3aGV0aGVyIHBhZ2VzIGFjY2Vzc2VkIG11 bHRpcGxlIHRpbWVzIHRocm91Z2ggZmlsZQogICBkZXNjcmlwdG9ycyBhcmUgc3RhdGlzdGljYWxs eSBob3QgYW5kIHRodXMgd29ydGggcHJvbW90aW5nIGluIHRoZQogICBldmljdGlvbiBwYXRoLgoy KSBJdCB0YWtlcyBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzIGludG8gYWNjb3Vu dCBhbmQgYXZvaWRzCiAgIG92ZXJwcm90ZWN0aW5nIHBhZ2VzIGFjY2Vzc2VkIG11bHRpcGxlIHRp bWVzIHRocm91Z2ggZmlsZQogICBkZXNjcmlwdG9ycy4gKFBhZ2VzIGFjY2Vzc2VkIHRocm91Z2gg cGFnZSB0YWJsZXMgYXJlIGluIHRoZSBmaXJzdAogICB0aWVyIHNpbmNlIE49MC4pCjMpIE1vcmUg dGllcnMgcHJvdmlkZSBiZXR0ZXIgcHJvdGVjdGlvbiBmb3IgcGFnZXMgYWNjZXNzZWQgbW9yZSB0 aGFuCiAgIHR3aWNlIHRocm91Z2ggZmlsZSBkZXNjcmlwdG9ycywgd2hlbiB1bmRlciBoZWF2eSBi dWZmZXJlZCBJL08KICAgd29ya2xvYWRzLgoKU2VydmVyIGJlbmNobWFyayByZXN1bHRzOgogIFNp bmdsZSB3b3JrbG9hZDoKICAgIGZpbyAoYnVmZmVyZWQgSS9PKTogK1s0NywgNDldJQogICAgICAg ICAgICAgICAgSU9QUyAgICAgICAgIEJXCiAgICAgIDUuMTctcmMyOiAyMjQyayAgICAgICAgODc1 OU1pQi9zCiAgICAgIHBhdGNoMS01OiAzMzIxayAgICAgICAgMTIuN0dpQi9zCgogIFNpbmdsZSB3 b3JrbG9hZDoKICAgIG1lbWNhY2hlZCAoYW5vbik6ICtbMTAxLCAxMDVdJQogICAgICAgICAgICAg ICAgT3BzL3NlYyAgICAgIEtCL3NlYwogICAgICA1LjE3LXJjMjogNDc2NzcxLjc5ICAgIDE4NTQ0 LjMxCiAgICAgIHBhdGNoMS01OiA5NzI1MjYuMDcgICAgMzc4MjYuOTUKCiAgQ29uZmlndXJhdGlv bnM6CiAgICBDUFU6IHR3byBYZW9uIDYxNTQKICAgIE1lbTogdG90YWwgMjU2RwoKICAgIE5vZGUg MSB3YXMgdXNlZCBhcyBhIHJhbSBkaXNrIG9ubHkgdG8gcmVkdWNlIHRoZSB2YXJpYW5jZSBpbiB0 aGUKICAgIHJlc3VsdHMuCgogICAgcGF0Y2ggZHJpdmVycy9ibG9jay9icmQuYyA8PEVPRgogICAg OTksMTAwYzk5LDEwMAogICAgPCAJZ2ZwX2ZsYWdzID0gR0ZQX05PSU8gfCBfX0dGUF9aRVJPIHwg X19HRlBfSElHSE1FTTsKICAgIDwgCXBhZ2UgPSBhbGxvY19wYWdlKGdmcF9mbGFncyk7CiAgICAt LS0KICAgID4gCWdmcF9mbGFncyA9IEdGUF9OT0lPIHwgX19HRlBfWkVSTyB8IF9fR0ZQX0hJR0hN RU0gfCBfX0dGUF9USElTTk9ERTsKICAgID4gCXBhZ2UgPSBhbGxvY19wYWdlc19ub2RlKDEsIGdm cF9mbGFncywgMCk7CiAgICBFT0YKCiAgICBjYXQgPj4vZXRjL3N5c3RlbWQvc3lzdGVtLmNvbmYg PDxPRUYKICAgIENQVUFmZmluaXR5PW51bWEKICAgIE5VTUFQb2xpY3k9YmluZAogICAgTlVNQU1h c2s9MAogICAgT0VGCgogICAgY2F0ID4+L2V0Yy9tZW1jYWNoZWQuY29uZiA8PE9FRgogICAgLW0g MTg0MzIwCiAgICAtcyAvdmFyL3J1bi9tZW1jYWNoZWQvbWVtY2FjaGVkLnNvY2sKICAgIC1hIDA3 NjYKICAgIC10IDM2CiAgICAtQiBiaW5hcnkKICAgIE9FRgoKICAgIGNhdCBmaW8uc2gKICAgIG1v ZHByb2JlIGJyZCByZF9ucj0xIHJkX3NpemU9MTEzMjQ2MjA4CiAgICBta2ZzLmV4dDQgL2Rldi9y YW0wCiAgICBtb3VudCAtdCBleHQ0IC9kZXYvcmFtMCAvbW50CgogICAgbWtkaXIgL3N5cy9mcy9j Z3JvdXAvdXNlci5zbGljZS90ZXN0CiAgICBlY2hvIDM4NjU0NzA1NjY0ID4vc3lzL2ZzL2Nncm91 cC91c2VyLnNsaWNlL3Rlc3QvbWVtb3J5Lm1heAogICAgZWNobyAkJCA+L3N5cy9mcy9jZ3JvdXAv dXNlci5zbGljZS90ZXN0L2Nncm91cC5wcm9jcwogICAgZmlvIC1uYW1lPW1nbHJ1IC0tbnVtam9i cz03MiAtLWRpcmVjdG9yeT0vbW50IC0tc2l6ZT0xNDA4bSBcCiAgICAgIC0tYnVmZmVyZWQ9MSAt LWlvZW5naW5lPWlvX3VyaW5nIC0taW9kZXB0aD0xMjggXAogICAgICAtLWlvZGVwdGhfYmF0Y2hf c3VibWl0PTMyIC0taW9kZXB0aF9iYXRjaF9jb21wbGV0ZT0zMiBcCiAgICAgIC0tcnc9cmFuZHJl YWQgLS1yYW5kb21fZGlzdHJpYnV0aW9uPXJhbmRvbSAtLW5vcmFuZG9tbWFwIFwKICAgICAgLS10 aW1lX2Jhc2VkIC0tcmFtcF90aW1lPTEwbSAtLXJ1bnRpbWU9NW0gLS1ncm91cF9yZXBvcnRpbmcK CiAgICBjYXQgbWVtY2FjaGVkLnNoCiAgICBtb2Rwcm9iZSBicmQgcmRfbnI9MSByZF9zaXplPTEx MzI0NjIwOAogICAgc3dhcG9mZiAtYQogICAgbWtzd2FwIC9kZXYvcmFtMAogICAgc3dhcG9uIC9k ZXYvcmFtMAoKICAgIG1lbXRpZXJfYmVuY2htYXJrIC1TIC92YXIvcnVuL21lbWNhY2hlZC9tZW1j YWNoZWQuc29jayBcCiAgICAgIC1QIG1lbWNhY2hlX2JpbmFyeSAtbiBhbGxrZXlzIC0ta2V5LW1p bmltdW09MSBcCiAgICAgIC0ta2V5LW1heGltdW09NjUwMDAwMDAgLS1rZXktcGF0dGVybj1QOlAg LWMgMSAtdCAzNiBcCiAgICAgIC0tcmF0aW8gMTowIC0tcGlwZWxpbmUgOCAtZCAyMDAwCgogICAg bWVtdGllcl9iZW5jaG1hcmsgLVMgL3Zhci9ydW4vbWVtY2FjaGVkL21lbWNhY2hlZC5zb2NrIFwK ICAgICAgLVAgbWVtY2FjaGVfYmluYXJ5IC1uIGFsbGtleXMgLS1rZXktbWluaW11bT0xIFwKICAg ICAgLS1rZXktbWF4aW11bT02NTAwMDAwMCAtLWtleS1wYXR0ZXJuPVI6UiAtYyAxIC10IDM2IFwK ICAgICAgLS1yYXRpbyAwOjEgLS1waXBlbGluZSA4IC0tcmFuZG9taXplIC0tZGlzdGluY3QtY2xp ZW50LXNlZWQKCkNsaWVudCBiZW5jaG1hcmsgcmVzdWx0czoKICBrc3dhcGQgcHJvZmlsZXM6CiAg ICA1LjE3LXJjMgogICAgICAzOC4wNSUgIHBhZ2Vfdm1hX21hcHBlZF93YWxrCiAgICAgIDIwLjg2 JSAgbHpvMXhfMV9kb19jb21wcmVzcyAocmVhbCB3b3JrKQogICAgICAgNi4xNiUgIGRvX3Jhd19z cGluX2xvY2sKICAgICAgIDQuNjElICBfcmF3X3NwaW5fdW5sb2NrX2lycQogICAgICAgMi4yMCUg IHZtYV9pbnRlcnZhbF90cmVlX2l0ZXJfbmV4dAogICAgICAgMi4xOSUgIHZtYV9pbnRlcnZhbF90 cmVlX3N1YnRyZWVfc2VhcmNoCiAgICAgICAyLjE1JSAgcGFnZV9yZWZlcmVuY2VkX29uZQogICAg ICAgMS45MyUgIGFub25fdm1hX2ludGVydmFsX3RyZWVfaXRlcl9maXJzdAogICAgICAgMS42NSUg IHB0ZXBfY2xlYXJfZmx1c2gKICAgICAgIDEuMDAlICBfX3pyYW1fYnZlY193cml0ZQoKICAgIHBh dGNoMS01CiAgICAgIDM5LjczJSAgbHpvMXhfMV9kb19jb21wcmVzcyAocmVhbCB3b3JrKQogICAg ICAxNC45NiUgIHBhZ2Vfdm1hX21hcHBlZF93YWxrCiAgICAgICA2Ljk3JSAgX3Jhd19zcGluX3Vu bG9ja19pcnEKICAgICAgIDMuMDclICBkb19yYXdfc3Bpbl9sb2NrCiAgICAgICAyLjUzJSAgYW5v bl92bWFfaW50ZXJ2YWxfdHJlZV9pdGVyX2ZpcnN0CiAgICAgICAyLjA0JSAgcHRlcF9jbGVhcl9m bHVzaAogICAgICAgMS44MiUgIF9fenJhbV9idmVjX3dyaXRlCiAgICAgICAxLjc2JSAgX19hbm9u X3ZtYV9pbnRlcnZhbF90cmVlX3N1YnRyZWVfc2VhcmNoCiAgICAgICAxLjU3JSAgbWVtbW92ZQog ICAgICAgMS40NSUgIGZyZWVfdW5yZWZfcGFnZV9saXN0CgogIENvbmZpZ3VyYXRpb25zOgogICAg Q1BVOiBzaW5nbGUgU25hcGRyYWdvbiA3YwogICAgTWVtOiB0b3RhbCA0RwoKICAgIENocm9tZSBP UyBNZW1vcnlQcmVzc3VyZSBbMV0KClsxXSBodHRwczovL2Nocm9taXVtLmdvb2dsZXNvdXJjZS5j b20vY2hyb21pdW1vcy9wbGF0Zm9ybS90YXN0LXRlc3RzLwoKU2lnbmVkLW9mZi1ieTogWXUgWmhh byA8eXV6aGFvQGdvb2dsZS5jb20+CkFja2VkLWJ5OiBCcmlhbiBHZWZmb24gPGJnZWZmb25AZ29v Z2xlLmNvbT4KQWNrZWQtYnk6IEphbiBBbGV4YW5kZXIgU3RlZmZlbnMgKGhlZnRpZykgPGhlZnRp Z0BhcmNobGludXgub3JnPgpBY2tlZC1ieTogT2xla3NhbmRyIE5hdGFsZW5rbyA8b2xla3NhbmRy QG5hdGFsZW5rby5uYW1lPgpBY2tlZC1ieTogU3RldmVuIEJhcnJldHQgPHN0ZXZlbkBsaXF1b3Jp eC5uZXQ+CkFja2VkLWJ5OiBTdWxlaW1hbiBTb3VobGFsIDxzdWxlaW1hbkBnb29nbGUuY29tPgpU ZXN0ZWQtYnk6IERhbmllbCBCeXJuZSA8ZGpieXJuZUBtdHUuZWR1PgpUZXN0ZWQtYnk6IERvbmFs ZCBDYXJyIDxkQGNoYW9zLXJlaW5zLmNvbT4KVGVzdGVkLWJ5OiBIb2xnZXIgSG9mZnN0w6R0dGUg PGhvbGdlckBhcHBsaWVkLWFzeW5jaHJvbnkuY29tPgpUZXN0ZWQtYnk6IEtvbnN0YW50aW4gS2hh cmxhbW92IDxIaS1BbmdlbEB5YW5kZXgucnU+ClRlc3RlZC1ieTogU2h1YW5nIFpoYWkgPHN6aGFp MkBjcy5yb2NoZXN0ZXIuZWR1PgpUZXN0ZWQtYnk6IFNvZmlhIFRyaW5oIDxzb2ZpYS50cmluaEBl ZGkud29ya3M+Ci0tLQogaW5jbHVkZS9saW51eC9tbS5oICAgICAgICB8ICAgMSArCiBpbmNsdWRl L2xpbnV4L21tX2lubGluZS5oIHwgIDE1ICsKIGluY2x1ZGUvbGludXgvbW16b25lLmggICAgfCAg MzUgKysKIG1tL0tjb25maWcgICAgICAgICAgICAgICAgfCAgNDQgKysrCiBtbS9zd2FwLmMgICAg ICAgICAgICAgICAgIHwgIDQ2ICsrLQogbW0vdm1zY2FuLmMgICAgICAgICAgICAgICB8IDc4NCAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQogbW0vd29ya2luZ3NldC5jICAg ICAgICAgICB8IDExOSArKysrKy0KIDcgZmlsZXMgY2hhbmdlZCwgMTAzOSBpbnNlcnRpb25zKCsp LCA1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1 ZGUvbGludXgvbW0uaAppbmRleCAwNWRkMzMyNjU3NDAuLmI0Yjk4ODZiYTI3NyAxMDA2NDQKLS0t IGEvaW5jbHVkZS9saW51eC9tbS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW0uaApAQCAtMjI3LDYg KzIyNyw3IEBAIGludCBvdmVyY29tbWl0X3BvbGljeV9oYW5kbGVyKHN0cnVjdCBjdGxfdGFibGUg KiwgaW50LCB2b2lkICosIHNpemVfdCAqLAogI2RlZmluZSBQQUdFX0FMSUdORUQoYWRkcikJSVNf QUxJR05FRCgodW5zaWduZWQgbG9uZykoYWRkciksIFBBR0VfU0laRSkKIAogI2RlZmluZSBscnVf dG9fcGFnZShoZWFkKSAobGlzdF9lbnRyeSgoaGVhZCktPnByZXYsIHN0cnVjdCBwYWdlLCBscnUp KQorI2RlZmluZSBscnVfdG9fZm9saW8oaGVhZCkgKGxpc3RfZW50cnkoKGhlYWQpLT5wcmV2LCBz dHJ1Y3QgZm9saW8sIGxydSkpCiAKIHZvaWQgc2V0dXBfaW5pdGlhbF9pbml0X21tKHZvaWQgKnN0 YXJ0X2NvZGUsIHZvaWQgKmVuZF9jb2RlLAogCQkJICAgdm9pZCAqZW5kX2RhdGEsIHZvaWQgKmJy ayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oIGIvaW5jbHVkZS9saW51 eC9tbV9pbmxpbmUuaAppbmRleCA0NmY0ZmRlMDI5OWYuLjM3YzhhMGVkZTRmZiAxMDA2NDQKLS0t IGEvaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tX2lubGlu ZS5oCkBAIC0xMDksNiArMTA5LDE5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGxydV9nZW5fZnJvbV9z ZXEodW5zaWduZWQgbG9uZyBzZXEpCiAJcmV0dXJuIHNlcSAlIE1BWF9OUl9HRU5TOwogfQogCitz dGF0aWMgaW5saW5lIGludCBscnVfaGlzdF9mcm9tX3NlcSh1bnNpZ25lZCBsb25nIHNlcSkKK3sK KwlyZXR1cm4gc2VxICUgTlJfSElTVF9HRU5TOworfQorCitzdGF0aWMgaW5saW5lIGludCBscnVf dGllcl9mcm9tX3JlZnMoaW50IHJlZnMpCit7CisJVk1fQlVHX09OKHJlZnMgPiBCSVQoTFJVX1JF RlNfV0lEVEgpKTsKKworCS8qIHNlZSB0aGUgY29tbWVudCBvbiBNQVhfTlJfVElFUlMgKi8KKwly ZXR1cm4gb3JkZXJfYmFzZV8yKHJlZnMgKyAxKTsKK30KKwogc3RhdGljIGlubGluZSBib29sIGxy dV9nZW5faXNfYWN0aXZlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IGdlbikKIHsKIAl1bnNp Z25lZCBsb25nIG1heF9zZXEgPSBscnV2ZWMtPmxydWdlbi5tYXhfc2VxOwpAQCAtMjM3LDYgKzI1 MCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2RlbF9mb2xpbyhzdHJ1Y3QgbHJ1dmVj ICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCWdlbiA9ICgobmV3X2ZsYWdzICYgTFJV X0dFTl9NQVNLKSA+PiBMUlVfR0VOX1BHT0ZGKSAtIDE7CiAKIAkJbmV3X2ZsYWdzICY9IH5MUlVf R0VOX01BU0s7CisJCWlmICgobmV3X2ZsYWdzICYgTFJVX1JFRlNfRkxBR1MpICE9IExSVV9SRUZT X0ZMQUdTKQorCQkJbmV3X2ZsYWdzICY9IH4oTFJVX1JFRlNfTUFTSyB8IExSVV9SRUZTX0ZMQUdT KTsKIAkJLyogZm9yIHNocmlua19wYWdlX2xpc3QoKSAqLwogCQlpZiAocmVjbGFpbWluZykKIAkJ CW5ld19mbGFncyAmPSB+KEJJVChQR19yZWZlcmVuY2VkKSB8IEJJVChQR19yZWNsYWltKSk7CmRp ZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUu aAppbmRleCAwZjVlOGE5OTU3ODEuLjM4NzBkZDkyNDZhMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9s aW51eC9tbXpvbmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCkBAIC0zMzUsNiArMzM1 LDMyIEBAIHN0cnVjdCBscnV2ZWM7CiAjZGVmaW5lIE1JTl9OUl9HRU5TCQkyVQogI2RlZmluZSBN QVhfTlJfR0VOUwkJKCh1bnNpZ25lZCBpbnQpQ09ORklHX05SX0xSVV9HRU5TKQogCisvKgorICog RWFjaCBnZW5lcmF0aW9uIGlzIGRpdmlkZWQgaW50byBtdWx0aXBsZSB0aWVycy4gVGllcnMgcmVw cmVzZW50IGRpZmZlcmVudAorICogcmFuZ2VzIG9mIG51bWJlcnMgb2YgYWNjZXNzZXMgdGhyb3Vn aCBmaWxlIGRlc2NyaXB0b3JzLiBBIHBhZ2UgYWNjZXNzZWQgTgorICogdGltZXMgdGhyb3VnaCBm aWxlIGRlc2NyaXB0b3JzIGlzIGluIHRpZXIgb3JkZXJfYmFzZV8yKE4pLiBBIHBhZ2UgaW4gdGhl CisgKiBmaXJzdCB0aWVyIChOPTAsMSkgaXMgbWFya2VkIGJ5IFBHX3JlZmVyZW5jZWQgdW5sZXNz IGl0IHdhcyBmYXVsdGVkIGluCisgKiB0aG91Z2ggcGFnZSB0YWJsZXMgb3IgcmVhZCBhaGVhZC4g QSBwYWdlIGluIGFueSBvdGhlciB0aWVyIChOPjEpIGlzIG1hcmtlZAorICogYnkgUEdfcmVmZXJl bmNlZCBhbmQgUEdfd29ya2luZ3NldC4gQWRkaXRpb25hbCBiaXRzIGluIGZvbGlvLT5mbGFncyBh cmUKKyAqIHJlcXVpcmVkIHRvIHN1cHBvcnQgbW9yZSB0aGFuIHR3byB0aWVycy4KKyAqCisgKiBJ biBjb250cmFzdCB0byBtb3ZpbmcgYWNyb3NzIGdlbmVyYXRpb25zIHdoaWNoIHJlcXVpcmVzIHRo ZSBMUlUgbG9jaywgbW92aW5nCisgKiBhY3Jvc3MgdGllcnMgb25seSByZXF1aXJlcyBvcGVyYXRp b25zIG9uIGZvbGlvLT5mbGFncyBhbmQgdGhlcmVmb3JlIGhhcyBhCisgKiBuZWdsaWdpYmxlIGNv c3QgaW4gdGhlIGJ1ZmZlcmVkIGFjY2VzcyBwYXRoLiBJbiB0aGUgZXZpY3Rpb24gcGF0aCwKKyAq IGNvbXBhcmlzb25zIG9mIHJlZmF1bHRlZC8oZXZpY3RlZCtwcm9tb3RlZCkgZnJvbSB0aGUgZmly c3QgdGllciBhbmQgdGhlIHJlc3QKKyAqIGluZmVyIHdoZXRoZXIgcGFnZXMgYWNjZXNzZWQgbXVs dGlwbGUgdGltZXMgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzIGFyZQorICogc3RhdGlzdGljYWxs eSBob3QgYW5kIHRodXMgd29ydGggcHJvbW90aW5nLgorICovCisjZGVmaW5lIE1BWF9OUl9USUVS UwkJKCh1bnNpZ25lZCBpbnQpQ09ORklHX1RJRVJTX1BFUl9HRU4pCisjZGVmaW5lIExSVV9SRUZT X0ZMQUdTCQkoQklUKFBHX3JlZmVyZW5jZWQpIHwgQklUKFBHX3dvcmtpbmdzZXQpKQorCisvKiB3 aGV0aGVyIHRvIGtlZXAgaGlzdG9yaWNhbCBzdGF0cyBmcm9tIGV2aWN0ZWQgZ2VuZXJhdGlvbnMg Ki8KKyNpZmRlZiBDT05GSUdfTFJVX0dFTl9TVEFUUworI2RlZmluZSBOUl9ISVNUX0dFTlMJCSgo dW5zaWduZWQgaW50KUNPTkZJR19OUl9MUlVfR0VOUykKKyNlbHNlCisjZGVmaW5lIE5SX0hJU1Rf R0VOUwkJMVUKKyNlbmRpZgorCiBzdHJ1Y3QgbHJ1X2dlbl9zdHJ1Y3QgewogCS8qIHRoZSBhZ2lu ZyBpbmNyZW1lbnRzIHRoZSB5b3VuZ2VzdCBnZW5lcmF0aW9uIG51bWJlciAqLwogCXVuc2lnbmVk IGxvbmcgbWF4X3NlcTsKQEAgLTM0Niw2ICszNzIsMTUgQEAgc3RydWN0IGxydV9nZW5fc3RydWN0 IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3RzW01BWF9OUl9HRU5TXVtBTk9OX0FORF9GSUxFXVtN QVhfTlJfWk9ORVNdOwogCS8qIHRoZSBzaXplcyBvZiB0aGUgYWJvdmUgbGlzdHMgKi8KIAl1bnNp Z25lZCBsb25nIG5yX3BhZ2VzW01BWF9OUl9HRU5TXVtBTk9OX0FORF9GSUxFXVtNQVhfTlJfWk9O RVNdOworCS8qIHRoZSBleHBvbmVudGlhbCBtb3ZpbmcgYXZlcmFnZSBvZiByZWZhdWx0ZWQgKi8K Kwl1bnNpZ25lZCBsb25nIGF2Z19yZWZhdWx0ZWRbQU5PTl9BTkRfRklMRV1bTUFYX05SX1RJRVJT XTsKKwkvKiB0aGUgZXhwb25lbnRpYWwgbW92aW5nIGF2ZXJhZ2Ugb2YgZXZpY3RlZCtwcm9tb3Rl ZCAqLworCXVuc2lnbmVkIGxvbmcgYXZnX3RvdGFsW0FOT05fQU5EX0ZJTEVdW01BWF9OUl9USUVS U107CisJLyogdGhlIGZpcnN0IHRpZXIgZG9lc24ndCBuZWVkIHByb21vdGlvbiwgaGVuY2UgdGhl IG1pbnVzIG9uZSAqLworCXVuc2lnbmVkIGxvbmcgcHJvbW90ZWRbTlJfSElTVF9HRU5TXVtBTk9O X0FORF9GSUxFXVtNQVhfTlJfVElFUlMgLSAxXTsKKwkvKiBjYW4gYmUgbW9kaWZpZWQgd2l0aG91 dCBob2xkaW5nIHRoZSBMUlUgbG9jayAqLworCWF0b21pY19sb25nX3QgZXZpY3RlZFtOUl9ISVNU X0dFTlNdW0FOT05fQU5EX0ZJTEVdW01BWF9OUl9USUVSU107CisJYXRvbWljX2xvbmdfdCByZWZh dWx0ZWRbTlJfSElTVF9HRU5TXVtBTk9OX0FORF9GSUxFXVtNQVhfTlJfVElFUlNdOwogCS8qIHdo ZXRoZXIgdGhlIG11bHRpZ2VuZXJhdGlvbmFsIExSVSBpcyBlbmFibGVkICovCiAJYm9vbCBlbmFi bGVkOwogfTsKZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnCmluZGV4IDMzMjZl ZTM5MDNmMy4uZTg5OTYyM2Q1ZGYwIDEwMDY0NAotLS0gYS9tbS9LY29uZmlnCisrKyBiL21tL0tj b25maWcKQEAgLTg5Miw2ICs4OTIsNTAgQEAgY29uZmlnIEFOT05fVk1BX05BTUUKIAkgIGFyZWEg ZnJvbSBiZWluZyBtZXJnZWQgd2l0aCBhZGphY2VudCB2aXJ0dWFsIG1lbW9yeSBhcmVhcyBkdWUg dG8gdGhlCiAJICBkaWZmZXJlbmNlIGluIHRoZWlyIG5hbWUuCiAKKyMgbXVsdGlnZW5lcmF0aW9u YWwgTFJVIHsKK2NvbmZpZyBMUlVfR0VOCisJYm9vbCAiTXVsdGlnZW5lcmF0aW9uYWwgTFJVIgor CWRlcGVuZHMgb24gTU1VCisJIyB0aGUgZm9sbG93aW5nIG9wdGlvbnMgY2FuIHVzZSB1cCB0aGUg c3BhcmUgYml0cyBpbiBwYWdlIGZsYWdzCisJZGVwZW5kcyBvbiAhTUFYU01QICYmICg2NEJJVCB8 fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQKQorCWhlbHAKKwkgIEEgaGlnaCBwZXJm b3JtYW5jZSBMUlUgaW1wbGVtZW50YXRpb24gZm9yIG1lbW9yeSBvdmVyY29tbWl0LiBTZWUKKwkg IERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBhbmQKKwkgIERv Y3VtZW50YXRpb24vdm0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscy4KKworY29uZmlnIE5S X0xSVV9HRU5TCisJaW50ICJNYXggbnVtYmVyIG9mIGdlbmVyYXRpb25zIgorCWRlcGVuZHMgb24g TFJVX0dFTgorCXJhbmdlIDQgMzEKKwlkZWZhdWx0IDQKKwloZWxwCisJICBEbyBub3QgaW5jcmVh c2UgdGhpcyB2YWx1ZSB1bmxlc3MgeW91IHBsYW4gdG8gdXNlIHdvcmtpbmcgc2V0CisJICBlc3Rp bWF0aW9uIGFuZCBwcm9hY3RpdmUgcmVjbGFpbSB0byBvcHRpbWl6ZSBqb2Igc2NoZWR1bGluZyBp biBkYXRhCisJICBjZW50ZXJzLgorCisJICBUaGlzIG9wdGlvbiB1c2VzIG9yZGVyX2Jhc2VfMihO KzEpIGJpdHMgaW4gcGFnZSBmbGFncy4KKworY29uZmlnIFRJRVJTX1BFUl9HRU4KKwlpbnQgIk51 bWJlciBvZiB0aWVycyBwZXIgZ2VuZXJhdGlvbiIKKwlkZXBlbmRzIG9uIExSVV9HRU4KKwlyYW5n ZSAyIDQKKwlkZWZhdWx0IDQKKwloZWxwCisJICBEbyBub3QgZGVjcmVhc2UgdGhpcyB2YWx1ZSB1 bmxlc3MgeW91IHJ1biBvdXQgb2Ygc3BhcmUgYml0cyBpbiBwYWdlCisJICBmbGFncywgaS5lLiwg eW91IHNlZSB0aGUgIk5vdCBlbm91Z2ggYml0cyBpbiBwYWdlIGZsYWdzIiBidWlsZCBlcnJvci4K KworCSAgVGhpcyBvcHRpb24gdXNlcyBOLTIgYml0cyBpbiBwYWdlIGZsYWdzLgorCitjb25maWcg TFJVX0dFTl9TVEFUUworCWJvb2wgIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZyIKKwlkZXBlbmRz IG9uIExSVV9HRU4KKwloZWxwCisJICBEbyBub3QgZW5hYmxlIHRoaXMgb3B0aW9uIHVubGVzcyB5 b3UgcGxhbiB0byBsb29rIGF0IGhpc3RvcmljYWwgc3RhdHMKKwkgIGZyb20gZXZpY3RlZCBnZW5l cmF0aW9ucyBmb3IgZGVidWdnaW5nIHB1cnBvc2UuCisKKwkgIFRoaXMgb3B0aW9uIGhhcyBhIHBl ci1tZW1jZyBhbmQgcGVyLW5vZGUgbWVtb3J5IG92ZXJoZWFkLgorIyB9CisKIHNvdXJjZSAibW0v ZGFtb24vS2NvbmZpZyIKIAogZW5kbWVudQpkaWZmIC0tZ2l0IGEvbW0vc3dhcC5jIGIvbW0vc3dh cC5jCmluZGV4IGUyZWYyYWNjY2M3NC4uZjVjMGJjYWM4ZGNkIDEwMDY0NAotLS0gYS9tbS9zd2Fw LmMKKysrIGIvbW0vc3dhcC5jCkBAIC00MDcsNiArNDA3LDQzIEBAIHN0YXRpYyB2b2lkIF9fbHJ1 X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJbG9jYWxfdW5sb2Nr KCZscnVfcHZlY3MubG9jayk7CiB9CiAKKyNpZmRlZiBDT05GSUdfTFJVX0dFTgorc3RhdGljIHZv aWQgZm9saW9faW5jX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbykKK3sKKwl1bnNpZ25lZCBsb25n IHJlZnM7CisJdW5zaWduZWQgbG9uZyBvbGRfZmxhZ3MsIG5ld19mbGFnczsKKworCWlmIChmb2xp b190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSkKKwkJcmV0dXJuOworCisJLyogc2VlIHRoZSBjb21t ZW50IG9uIE1BWF9OUl9USUVSUyAqLworCWRvIHsKKwkJbmV3X2ZsYWdzID0gb2xkX2ZsYWdzID0g UkVBRF9PTkNFKGZvbGlvLT5mbGFncyk7CisKKwkJaWYgKCEobmV3X2ZsYWdzICYgQklUKFBHX3Jl ZmVyZW5jZWQpKSkgeworCQkJbmV3X2ZsYWdzIHw9IEJJVChQR19yZWZlcmVuY2VkKTsKKwkJCWNv bnRpbnVlOworCQl9CisKKwkJaWYgKCEobmV3X2ZsYWdzICYgQklUKFBHX3dvcmtpbmdzZXQpKSkg eworCQkJbmV3X2ZsYWdzIHw9IEJJVChQR193b3JraW5nc2V0KTsKKwkJCWNvbnRpbnVlOworCQl9 CisKKwkJcmVmcyA9IG5ld19mbGFncyAmIExSVV9SRUZTX01BU0s7CisJCXJlZnMgPSBtaW4ocmVm cyArIEJJVChMUlVfUkVGU19QR09GRiksIExSVV9SRUZTX01BU0spOworCisJCW5ld19mbGFncyAm PSB+TFJVX1JFRlNfTUFTSzsKKwkJbmV3X2ZsYWdzIHw9IHJlZnM7CisJfSB3aGlsZSAobmV3X2Zs YWdzICE9IG9sZF9mbGFncyAmJgorCQkgY21weGNoZygmZm9saW8tPmZsYWdzLCBvbGRfZmxhZ3Ms IG5ld19mbGFncykgIT0gb2xkX2ZsYWdzKTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBmb2xpb19p bmNfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQoreworfQorI2VuZGlmIC8qIENPTkZJR19MUlVf R0VOICovCisKIC8qCiAgKiBNYXJrIGEgcGFnZSBhcyBoYXZpbmcgc2VlbiBhY3Rpdml0eS4KICAq CkBAIC00MTksNiArNDU2LDExIEBAIHN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2Zv bGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAgKi8KIHZvaWQgZm9saW9fbWFya19hY2Nlc3NlZChz dHJ1Y3QgZm9saW8gKmZvbGlvKQogeworCWlmIChscnVfZ2VuX2VuYWJsZWQoKSkgeworCQlmb2xp b19pbmNfcmVmcyhmb2xpbyk7CisJCXJldHVybjsKKwl9CisKIAlpZiAoIWZvbGlvX3Rlc3RfcmVm ZXJlbmNlZChmb2xpbykpIHsKIAkJZm9saW9fc2V0X3JlZmVyZW5jZWQoZm9saW8pOwogCX0gZWxz ZSBpZiAoZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbykpIHsKQEAgLTU2OCw3ICs2MTAsNyBA QCBzdGF0aWMgdm9pZCBscnVfZGVhY3RpdmF0ZV9maWxlX2ZuKHN0cnVjdCBwYWdlICpwYWdlLCBz dHJ1Y3QgbHJ1dmVjICpscnV2ZWMpCiAKIHN0YXRpYyB2b2lkIGxydV9kZWFjdGl2YXRlX2ZuKHN0 cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpCiB7Ci0JaWYgKFBhZ2VBY3Rp dmUocGFnZSkgJiYgIVBhZ2VVbmV2aWN0YWJsZShwYWdlKSkgeworCWlmICghUGFnZVVuZXZpY3Rh YmxlKHBhZ2UpICYmIChQYWdlQWN0aXZlKHBhZ2UpIHx8IGxydV9nZW5fZW5hYmxlZCgpKSkgewog CQlpbnQgbnJfcGFnZXMgPSB0aHBfbnJfcGFnZXMocGFnZSk7CiAKIAkJZGVsX3BhZ2VfZnJvbV9s cnVfbGlzdChwYWdlLCBscnV2ZWMpOwpAQCAtNjgyLDcgKzcyNCw3IEBAIHZvaWQgZGVhY3RpdmF0 ZV9maWxlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiAgKi8KIHZvaWQgZGVhY3RpdmF0ZV9wYWdl KHN0cnVjdCBwYWdlICpwYWdlKQogewotCWlmIChQYWdlTFJVKHBhZ2UpICYmIFBhZ2VBY3RpdmUo cGFnZSkgJiYgIVBhZ2VVbmV2aWN0YWJsZShwYWdlKSkgeworCWlmIChQYWdlTFJVKHBhZ2UpICYm ICFQYWdlVW5ldmljdGFibGUocGFnZSkgJiYgKFBhZ2VBY3RpdmUocGFnZSkgfHwgbHJ1X2dlbl9l bmFibGVkKCkpKSB7CiAJCXN0cnVjdCBwYWdldmVjICpwdmVjOwogCiAJCWxvY2FsX2xvY2soJmxy dV9wdmVjcy5sb2NrKTsKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5k ZXggZDc1YTU3MzhkMWRjLi41ZjBkOTI4Mzg3MTIgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCisr KyBiL21tL3Ztc2Nhbi5jCkBAIC0xMjg1LDkgKzEyODUsMTEgQEAgc3RhdGljIGludCBfX3JlbW92 ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgcGFnZSAqcGFn ZSwKIAogCWlmIChQYWdlU3dhcENhY2hlKHBhZ2UpKSB7CiAJCXN3cF9lbnRyeV90IHN3YXAgPSB7 IC52YWwgPSBwYWdlX3ByaXZhdGUocGFnZSkgfTsKLQkJbWVtX2Nncm91cF9zd2Fwb3V0KHBhZ2Us IHN3YXApOworCisJCS8qIGdldCBhIHNoYWRvdyBlbnRyeSBiZWZvcmUgbWVtX2Nncm91cF9zd2Fw b3V0KCkgY2xlYXJzIGZvbGlvX21lbWNnKCkgKi8KIAkJaWYgKHJlY2xhaW1lZCAmJiAhbWFwcGlu Z19leGl0aW5nKG1hcHBpbmcpKQogCQkJc2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihwYWdl LCB0YXJnZXRfbWVtY2cpOworCQltZW1fY2dyb3VwX3N3YXBvdXQocGFnZSwgc3dhcCk7CiAJCV9f ZGVsZXRlX2Zyb21fc3dhcF9jYWNoZShwYWdlLCBzd2FwLCBzaGFkb3cpOwogCQl4YV91bmxvY2tf aXJxKCZtYXBwaW5nLT5pX3BhZ2VzKTsKIAkJcHV0X3N3YXBfcGFnZShwYWdlLCBzd2FwKTsKQEAg LTI3MjEsNiArMjcyMyw5IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVfc2Nhbl9jb3VudChwZ19kYXRh X3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIAl1bnNpZ25lZCBsb25nIGZpbGU7 CiAJc3RydWN0IGxydXZlYyAqdGFyZ2V0X2xydXZlYzsKIAorCWlmIChscnVfZ2VuX2VuYWJsZWQo KSkKKwkJcmV0dXJuOworCiAJdGFyZ2V0X2xydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHNjLT50 YXJnZXRfbWVtX2Nncm91cCwgcGdkYXQpOwogCiAJLyoKQEAgLTMwNDIsMTUgKzMwNDcsNDcgQEAg c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQs CiAKICNpZmRlZiBDT05GSUdfTFJVX0dFTgogCitlbnVtIHsKKwlUWVBFX0FOT04sCisJVFlQRV9G SUxFLAorfTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICAg ICAgICAgIHNob3J0aGFuZCBoZWxwZXJzCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisjZGVm aW5lIERFRklORV9NQVhfU0VRKGxydXZlYykJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBtYXhfc2Vx ID0gUkVBRF9PTkNFKChscnV2ZWMpLT5scnVnZW4ubWF4X3NlcSkKKworI2RlZmluZSBERUZJTkVf TUlOX1NFUShscnV2ZWMpCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgbWluX3NlcVtBTk9OX0FORF9G SUxFXSA9IHsJCQlcCisJCVJFQURfT05DRSgobHJ1dmVjKS0+bHJ1Z2VuLm1pbl9zZXFbVFlQRV9B Tk9OXSksCQlcCisJCVJFQURfT05DRSgobHJ1dmVjKS0+bHJ1Z2VuLm1pbl9zZXFbVFlQRV9GSUxF XSksCQlcCisJfQorCiAjZGVmaW5lIGZvcl9lYWNoX2dlbl90eXBlX3pvbmUoZ2VuLCB0eXBlLCB6 b25lKQkJCQlcCiAJZm9yICgoZ2VuKSA9IDA7IChnZW4pIDwgTUFYX05SX0dFTlM7IChnZW4pKysp CQkJXAogCQlmb3IgKCh0eXBlKSA9IDA7ICh0eXBlKSA8IEFOT05fQU5EX0ZJTEU7ICh0eXBlKSsr KQlcCiAJCQlmb3IgKCh6b25lKSA9IDA7ICh6b25lKSA8IE1BWF9OUl9aT05FUzsgKHpvbmUpKysp CiAKK3N0YXRpYyBpbnQgZm9saW9fbHJ1X2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvKQoreworCXVu c2lnbmVkIGxvbmcgZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tPmZsYWdzKTsKKworCXJldHVybiAo KGZsYWdzICYgTFJVX0dFTl9NQVNLKSA+PiBMUlVfR0VOX1BHT0ZGKSAtIDE7Cit9CisKK3N0YXRp YyBpbnQgZm9saW9fbHJ1X3RpZXIoc3RydWN0IGZvbGlvICpmb2xpbykKK3sKKwlpbnQgcmVmczsK Kwl1bnNpZ25lZCBsb25nIGZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLT5mbGFncyk7CisKKwlyZWZz ID0gKGZsYWdzICYgTFJVX1JFRlNfRkxBR1MpID09IExSVV9SRUZTX0ZMQUdTID8KKwkgICAgICAg KChmbGFncyAmIExSVV9SRUZTX01BU0spID4+IExSVV9SRUZTX1BHT0ZGKSArIDEgOiAwOworCisJ cmV0dXJuIGxydV90aWVyX2Zyb21fcmVmcyhyZWZzKTsKK30KKwogc3RhdGljIHN0cnVjdCBscnV2 ZWMgKmdldF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKQogewogCXN0 cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBOT0RFX0RBVEEobmlkKTsKQEAgLTMwNjksNiArMzEw Niw3MjggQEAgc3RhdGljIHN0cnVjdCBscnV2ZWMgKmdldF9scnV2ZWMoc3RydWN0IG1lbV9jZ3Jv dXAgKm1lbWNnLCBpbnQgbmlkKQogCXJldHVybiBwZ2RhdCA/ICZwZ2RhdC0+X19scnV2ZWMgOiBO VUxMOwogfQogCitzdGF0aWMgaW50IGdldF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICpt ZW1jZykKK3sKKwlyZXR1cm4gbWVtX2Nncm91cF9nZXRfbnJfc3dhcF9wYWdlcyhtZW1jZykgPj0g TUlOX0xSVV9CQVRDSCA/CisJICAgICAgIG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhtZW1jZykgOiAw OworfQorCitzdGF0aWMgaW50IGdldF9ucl9nZW5zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50 IHR5cGUpCit7CisJcmV0dXJuIGxydXZlYy0+bHJ1Z2VuLm1heF9zZXEgLSBscnV2ZWMtPmxydWdl bi5taW5fc2VxW3R5cGVdICsgMTsKK30KKworc3RhdGljIGJvb2wgX19tYXliZV91bnVzZWQgc2Vx X2lzX3ZhbGlkKHN0cnVjdCBscnV2ZWMgKmxydXZlYykKK3sKKwkvKgorCSAqIElkZWFsbHkgYW5v biBhbmQgZmlsZSBtaW5fc2VxIHNob3VsZCBiZSBpbiBzeW5jLiBCdXQgc3dhcHBpbmcgaXNuJ3QK KwkgKiBhcyByZWxpYWJsZSBhcyBkcm9wcGluZyBjbGVhbiBmaWxlIHBhZ2VzLCBlLmcuLCBvdXQg b2Ygc3dhcCBzcGFjZS4gU28KKwkgKiBhbGxvdyBmaWxlIG1pbl9zZXEgdG8gYWR2YW5jZSBhbmQg bGVhdmUgYW5vbiBtaW5fc2VxIGJlaGluZCwgYnV0IG5vdAorCSAqIHRoZSBvdGhlciB3YXkgYXJv dW5kLgorCSAqLworCXJldHVybiBnZXRfbnJfZ2VucyhscnV2ZWMsIFRZUEVfRklMRSkgPj0gTUlO X05SX0dFTlMgJiYKKwkgICAgICAgZ2V0X25yX2dlbnMobHJ1dmVjLCBUWVBFX0ZJTEUpIDw9IGdl dF9ucl9nZW5zKGxydXZlYywgVFlQRV9BTk9OKSAmJgorCSAgICAgICBnZXRfbnJfZ2VucyhscnV2 ZWMsIFRZUEVfQU5PTikgPD0gTUFYX05SX0dFTlM7Cit9CisKKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICByZWZhdWx0IGZlZWRiYWNrIGxvb3AKKyAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBBIGZlZWRiYWNrIGxvb3AgYmFzZWQgb24g UHJvcG9ydGlvbmFsLUludGVncmFsLURlcml2YXRpdmUgKFBJRCkgY29udHJvbGxlci4KKyAqCisg KiBUaGUgUCB0ZXJtIGlzIHJlZmF1bHRlZC8oZXZpY3RlZCtwcm9tb3RlZCkgZnJvbSBhIHRpZXIg aW4gdGhlIGdlbmVyYXRpb24KKyAqIGN1cnJlbnRseSBiZWluZyBldmljdGVkOyB0aGUgSSB0ZXJt IGlzIHRoZSBleHBvbmVudGlhbCBtb3ZpbmcgYXZlcmFnZSBvZiB0aGUKKyAqIFAgdGVybSBvdmVy IHRoZSBnZW5lcmF0aW9ucyBwcmV2aW91c2x5IGV2aWN0ZWQsIHVzaW5nIHRoZSBzbW9vdGhpbmcg ZmFjdG9yCisgKiAxLzI7IHRoZSBEIHRlcm0gaXNuJ3Qgc3VwcG9ydGVkLgorICoKKyAqIFRoZSBz ZXRwb2ludCAoU1ApIGlzIGFsd2F5cyB0aGUgZmlyc3QgdGllciBvZiBvbmUgdHlwZTsgdGhlIHBy b2Nlc3MgdmFyaWFibGUKKyAqIChQVikgaXMgZWl0aGVyIGFueSB0aWVyIG9mIHRoZSBvdGhlciB0 eXBlIG9yIGFueSBvdGhlciB0aWVyIG9mIHRoZSBzYW1lCisgKiB0eXBlLgorICoKKyAqIFRoZSBl cnJvciBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBTUCBhbmQgdGhlIFBWOyB0aGUgY29y cmVjdGlvbiBpcworICogdHVybiBvZmYgcHJvbW90aW9uIHdoZW4gU1A+UFYgb3IgdHVybiBvbiBw cm9tb3Rpb24gd2hlbiBTUDxQVi4KKyAqCisgKiBGb3IgZnV0dXJlIG9wdGltaXphdGlvbnM6Cisg KiAxKSBUaGUgRCB0ZXJtIG1heSBkaXNjb3VudCB0aGUgb3RoZXIgdHdvIHRlcm1zIG92ZXIgdGlt ZSBzbyB0aGF0IGxvbmctbGl2ZWQKKyAqICAgIGdlbmVyYXRpb25zIGNhbiByZXNpc3Qgc3RhbGUg aW5mb3JtYXRpb24uCisgKi8KK3N0cnVjdCBjdHJsX3BvcyB7CisJdW5zaWduZWQgbG9uZyByZWZh dWx0ZWQ7CisJdW5zaWduZWQgbG9uZyB0b3RhbDsKKwlpbnQgZ2FpbjsKK307CisKK3N0YXRpYyB2 b2lkIHJlYWRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHRp ZXIsIGludCBnYWluLAorCQkJICBzdHJ1Y3QgY3RybF9wb3MgKnBvcykKK3sKKwlzdHJ1Y3QgbHJ1 X2dlbl9zdHJ1Y3QgKmxydWdlbiA9ICZscnV2ZWMtPmxydWdlbjsKKwlpbnQgaGlzdCA9IGxydV9o aXN0X2Zyb21fc2VxKGxydWdlbi0+bWluX3NlcVt0eXBlXSk7CisKKwlwb3MtPnJlZmF1bHRlZCA9 IGxydWdlbi0+YXZnX3JlZmF1bHRlZFt0eXBlXVt0aWVyXSArCisJCQkgYXRvbWljX2xvbmdfcmVh ZCgmbHJ1Z2VuLT5yZWZhdWx0ZWRbaGlzdF1bdHlwZV1bdGllcl0pOworCXBvcy0+dG90YWwgPSBs cnVnZW4tPmF2Z190b3RhbFt0eXBlXVt0aWVyXSArCisJCSAgICAgYXRvbWljX2xvbmdfcmVhZCgm bHJ1Z2VuLT5ldmljdGVkW2hpc3RdW3R5cGVdW3RpZXJdKTsKKwlpZiAodGllcikKKwkJcG9zLT50 b3RhbCArPSBscnVnZW4tPnByb21vdGVkW2hpc3RdW3R5cGVdW3RpZXIgLSAxXTsKKwlwb3MtPmdh aW4gPSBnYWluOworfQorCitzdGF0aWMgdm9pZCByZXNldF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVj ICpscnV2ZWMsIGludCB0eXBlLCBib29sIGNhcnJ5b3ZlcikKK3sKKwlpbnQgaGlzdCwgdGllcjsK KwlzdHJ1Y3QgbHJ1X2dlbl9zdHJ1Y3QgKmxydWdlbiA9ICZscnV2ZWMtPmxydWdlbjsKKwlib29s IGNsZWFyID0gY2FycnlvdmVyID8gTlJfSElTVF9HRU5TID09IDEgOiBOUl9ISVNUX0dFTlMgPiAx OworCXVuc2lnbmVkIGxvbmcgc2VxID0gY2FycnlvdmVyID8gbHJ1Z2VuLT5taW5fc2VxW3R5cGVd IDogbHJ1Z2VuLT5tYXhfc2VxICsgMTsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmxydXZlYy0+ bHJ1X2xvY2spOworCisJaWYgKCFjYXJyeW92ZXIgJiYgIWNsZWFyKQorCQlyZXR1cm47CisKKwlo aXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEoc2VxKTsKKworCWZvciAodGllciA9IDA7IHRpZXIgPCBN QVhfTlJfVElFUlM7IHRpZXIrKykgeworCQlpZiAoY2FycnlvdmVyKSB7CisJCQl1bnNpZ25lZCBs b25nIHN1bTsKKworCQkJc3VtID0gbHJ1Z2VuLT5hdmdfcmVmYXVsdGVkW3R5cGVdW3RpZXJdICsK KwkJCSAgICAgIGF0b21pY19sb25nX3JlYWQoJmxydWdlbi0+cmVmYXVsdGVkW2hpc3RdW3R5cGVd W3RpZXJdKTsKKwkJCVdSSVRFX09OQ0UobHJ1Z2VuLT5hdmdfcmVmYXVsdGVkW3R5cGVdW3RpZXJd LCBzdW0gLyAyKTsKKworCQkJc3VtID0gbHJ1Z2VuLT5hdmdfdG90YWxbdHlwZV1bdGllcl0gKwor CQkJICAgICAgYXRvbWljX2xvbmdfcmVhZCgmbHJ1Z2VuLT5ldmljdGVkW2hpc3RdW3R5cGVdW3Rp ZXJdKTsKKwkJCWlmICh0aWVyKQorCQkJCXN1bSArPSBscnVnZW4tPnByb21vdGVkW2hpc3RdW3R5 cGVdW3RpZXIgLSAxXTsKKwkJCVdSSVRFX09OQ0UobHJ1Z2VuLT5hdmdfdG90YWxbdHlwZV1bdGll cl0sIHN1bSAvIDIpOworCQl9CisKKwkJaWYgKGNsZWFyKSB7CisJCQlhdG9taWNfbG9uZ19zZXQo JmxydWdlbi0+cmVmYXVsdGVkW2hpc3RdW3R5cGVdW3RpZXJdLCAwKTsKKwkJCWF0b21pY19sb25n X3NldCgmbHJ1Z2VuLT5ldmljdGVkW2hpc3RdW3R5cGVdW3RpZXJdLCAwKTsKKwkJCWlmICh0aWVy KQorCQkJCVdSSVRFX09OQ0UobHJ1Z2VuLT5wcm9tb3RlZFtoaXN0XVt0eXBlXVt0aWVyIC0gMV0s IDApOworCQl9CisJfQorfQorCitzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3Qg Y3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KQoreworCS8qCisJICogUmV0dXJuIHRy dWUgaWYgdGhlIFBWIGhhcyBhIGxpbWl0ZWQgbnVtYmVyIG9mIHJlZmF1bHRzIG9yIGEgbG93ZXIK KwkgKiByZWZhdWx0ZWQvdG90YWwgdGhhbiB0aGUgU1AuCisJICovCisJcmV0dXJuIHB2LT5yZWZh dWx0ZWQgPCBNSU5fTFJVX0JBVENIIHx8CisJICAgICAgIHB2LT5yZWZhdWx0ZWQgKiAoc3AtPnRv dGFsICsgTUlOX0xSVV9CQVRDSCkgKiBzcC0+Z2FpbiA8PQorCSAgICAgICAoc3AtPnJlZmF1bHRl ZCArIDEpICogcHYtPnRvdGFsICogcHYtPmdhaW47Cit9CisKKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYWdpbmcKKyAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCisKK3N0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2 ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcmVjbGFpbWluZykKK3sKKwl1bnNpZ25lZCBs b25nIG9sZF9mbGFncywgbmV3X2ZsYWdzOworCWludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUo Zm9saW8pOworCXN0cnVjdCBscnVfZ2VuX3N0cnVjdCAqbHJ1Z2VuID0gJmxydXZlYy0+bHJ1Z2Vu OworCWludCBuZXdfZ2VuLCBvbGRfZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tPm1pbl9z ZXFbdHlwZV0pOworCisJZG8geworCQluZXdfZmxhZ3MgPSBvbGRfZmxhZ3MgPSBSRUFEX09OQ0Uo Zm9saW8tPmZsYWdzKTsKKwkJVk1fQlVHX09OX0ZPTElPKCEobmV3X2ZsYWdzICYgTFJVX0dFTl9N QVNLKSwgZm9saW8pOworCisJCW5ld19nZW4gPSAoKG5ld19mbGFncyAmIExSVV9HRU5fTUFTSykg Pj4gTFJVX0dFTl9QR09GRikgLSAxOworCQluZXdfZ2VuID0gKG9sZF9nZW4gKyAxKSAlIE1BWF9O Ul9HRU5TOworCisJCW5ld19mbGFncyAmPSB+TFJVX0dFTl9NQVNLOworCQluZXdfZmxhZ3MgfD0g KG5ld19nZW4gKyAxVUwpIDw8IExSVV9HRU5fUEdPRkY7CisJCW5ld19mbGFncyAmPSB+KExSVV9S RUZTX01BU0sgfCBMUlVfUkVGU19GTEFHUyk7CisJCS8qIGZvciBmb2xpb19lbmRfd3JpdGViYWNr KCkgKi8KKwkJaWYgKHJlY2xhaW1pbmcpCisJCQluZXdfZmxhZ3MgfD0gQklUKFBHX3JlY2xhaW0p OworCX0gd2hpbGUgKGNtcHhjaGcoJmZvbGlvLT5mbGFncywgb2xkX2ZsYWdzLCBuZXdfZmxhZ3Mp ICE9IG9sZF9mbGFncyk7CisKKwlscnVfZ2VuX2JhbGFuY2Vfc2l6ZShscnV2ZWMsIGZvbGlvLCBv bGRfZ2VuLCBuZXdfZ2VuKTsKKworCXJldHVybiBuZXdfZ2VuOworfQorCitzdGF0aWMgdm9pZCBp bmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpCit7CisJaW50IHR5cGU7CisJc3RydWN0 IGxydV9nZW5fc3RydWN0ICpscnVnZW4gPSAmbHJ1dmVjLT5scnVnZW47CisKKwlWTV9CVUdfT04o IXNlcV9pc192YWxpZChscnV2ZWMpKTsKKworCWZvciAodHlwZSA9IDA7IHR5cGUgPCBBTk9OX0FO RF9GSUxFOyB0eXBlKyspIHsKKwkJaWYgKGdldF9ucl9nZW5zKGxydXZlYywgdHlwZSkgIT0gTUFY X05SX0dFTlMpCisJCQljb250aW51ZTsKKworCQlyZXNldF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUs IHRydWUpOworCQlXUklURV9PTkNFKGxydWdlbi0+bWluX3NlcVt0eXBlXSwgbHJ1Z2VuLT5taW5f c2VxW3R5cGVdICsgMSk7CisJfQorfQorCitzdGF0aWMgYm9vbCB0cnlfdG9faW5jX21pbl9zZXEo c3RydWN0IGxydXZlYyAqbHJ1dmVjLCBib29sIGNhbl9zd2FwKQoreworCWludCBnZW4sIHR5cGUs IHpvbmU7CisJYm9vbCBzdWNjZXNzID0gZmFsc2U7CisJc3RydWN0IGxydV9nZW5fc3RydWN0ICps cnVnZW4gPSAmbHJ1dmVjLT5scnVnZW47CisJREVGSU5FX01JTl9TRVEobHJ1dmVjKTsKKworCVZN X0JVR19PTighc2VxX2lzX3ZhbGlkKGxydXZlYykpOworCisJZm9yICh0eXBlID0gIWNhbl9zd2Fw OyB0eXBlIDwgQU5PTl9BTkRfRklMRTsgdHlwZSsrKSB7CisJCXdoaWxlIChscnVnZW4tPm1heF9z ZXEgPj0gbWluX3NlcVt0eXBlXSArIE1JTl9OUl9HRU5TKSB7CisJCQlnZW4gPSBscnVfZ2VuX2Zy b21fc2VxKG1pbl9zZXFbdHlwZV0pOworCisJCQlmb3IgKHpvbmUgPSAwOyB6b25lIDwgTUFYX05S X1pPTkVTOyB6b25lKyspIHsKKwkJCQlpZiAoIWxpc3RfZW1wdHkoJmxydWdlbi0+bGlzdHNbZ2Vu XVt0eXBlXVt6b25lXSkpCisJCQkJCWdvdG8gbmV4dDsKKwkJCX0KKworCQkJbWluX3NlcVt0eXBl XSsrOworCQl9CituZXh0OgorCQk7CisJfQorCisJLyogc2VlIHRoZSBjb21tZW50IGluIHNlcV9p c192YWxpZCgpICovCisJaWYgKGNhbl9zd2FwKSB7CisJCW1pbl9zZXFbVFlQRV9BTk9OXSA9IG1p bihtaW5fc2VxW1RZUEVfQU5PTl0sIG1pbl9zZXFbVFlQRV9GSUxFXSk7CisJCW1pbl9zZXFbVFlQ RV9GSUxFXSA9IG1heChtaW5fc2VxW1RZUEVfQU5PTl0sIGxydWdlbi0+bWluX3NlcVtUWVBFX0ZJ TEVdKTsKKwl9CisKKwlmb3IgKHR5cGUgPSAhY2FuX3N3YXA7IHR5cGUgPCBBTk9OX0FORF9GSUxF OyB0eXBlKyspIHsKKwkJaWYgKG1pbl9zZXFbdHlwZV0gPT0gbHJ1Z2VuLT5taW5fc2VxW3R5cGVd KQorCQkJY29udGludWU7CisKKwkJcmVzZXRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCB0cnVlKTsK KwkJV1JJVEVfT05DRShscnVnZW4tPm1pbl9zZXFbdHlwZV0sIG1pbl9zZXFbdHlwZV0pOworCQlz dWNjZXNzID0gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gc3VjY2VzczsKK30KKworc3RhdGljIHZvaWQg aW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG1heF9zZXEp Cit7CisJaW50IHByZXYsIG5leHQ7CisJaW50IHR5cGUsIHpvbmU7CisJc3RydWN0IGxydV9nZW5f c3RydWN0ICpscnVnZW4gPSAmbHJ1dmVjLT5scnVnZW47CisKKwlzcGluX2xvY2tfaXJxKCZscnV2 ZWMtPmxydV9sb2NrKTsKKworCVZNX0JVR19PTighc2VxX2lzX3ZhbGlkKGxydXZlYykpOworCisJ aWYgKG1heF9zZXEgIT0gbHJ1Z2VuLT5tYXhfc2VxKQorCQlnb3RvIHVubG9jazsKKworCWluY19t aW5fc2VxKGxydXZlYyk7CisKKwkvKiB1cGRhdGUgdGhlIGFjdGl2ZS9pbmFjdGl2ZSBMUlUgc2l6 ZXMgZm9yIGNvbXBhdGliaWxpdHkgKi8KKwlwcmV2ID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4t Pm1heF9zZXEgLSAxKTsKKwluZXh0ID0gbHJ1X2dlbl9mcm9tX3NlcShscnVnZW4tPm1heF9zZXEg KyAxKTsKKworCWZvciAodHlwZSA9IDA7IHR5cGUgPCBBTk9OX0FORF9GSUxFOyB0eXBlKyspIHsK KwkJZm9yICh6b25lID0gMDsgem9uZSA8IE1BWF9OUl9aT05FUzsgem9uZSsrKSB7CisJCQllbnVt IGxydV9saXN0IGxydSA9IHR5cGUgKiBMUlVfSU5BQ1RJVkVfRklMRTsKKwkJCWxvbmcgZGVsdGEg PSBscnVnZW4tPm5yX3BhZ2VzW3ByZXZdW3R5cGVdW3pvbmVdIC0KKwkJCQkgICAgIGxydWdlbi0+ bnJfcGFnZXNbbmV4dF1bdHlwZV1bem9uZV07CisKKwkJCWlmICghZGVsdGEpCisJCQkJY29udGlu dWU7CisKKwkJCWxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBscnUsIHpvbmUsIGRlbHRhKTsK KwkJCWxydV9nZW5fdXBkYXRlX3NpemUobHJ1dmVjLCBscnUgKyBMUlVfQUNUSVZFLCB6b25lLCAt ZGVsdGEpOworCQl9CisJfQorCisJZm9yICh0eXBlID0gMDsgdHlwZSA8IEFOT05fQU5EX0ZJTEU7 IHR5cGUrKykKKwkJcmVzZXRfY3RybF9wb3MobHJ1dmVjLCB0eXBlLCBmYWxzZSk7CisKKwlXUklU RV9PTkNFKGxydWdlbi0+dGltZXN0YW1wc1tuZXh0XSwgamlmZmllcyk7CisJLyogbWFrZSBzdXJl IHByZWNlZGluZyBtb2RpZmljYXRpb25zIGFwcGVhciAqLworCXNtcF9zdG9yZV9yZWxlYXNlKCZs cnVnZW4tPm1heF9zZXEsIGxydWdlbi0+bWF4X3NlcSArIDEpOwordW5sb2NrOgorCXNwaW5fdW5s b2NrX2lycSgmbHJ1dmVjLT5scnVfbG9jayk7Cit9CisKK3N0YXRpYyBsb25nIGdldF9ucl9ldmlj dGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG1heF9zZXEsCisJCQkg ICAgIHVuc2lnbmVkIGxvbmcgKm1pbl9zZXEsIGJvb2wgY2FuX3N3YXAsIGJvb2wgKm5lZWRfYWdp bmcpCit7CisJaW50IGdlbiwgdHlwZSwgem9uZTsKKwlsb25nIHRvdGFsID0gMDsKKwlsb25nIHlv dW5nID0gMDsKKwlzdHJ1Y3QgbHJ1X2dlbl9zdHJ1Y3QgKmxydWdlbiA9ICZscnV2ZWMtPmxydWdl bjsKKworCWZvciAodHlwZSA9ICFjYW5fc3dhcDsgdHlwZSA8IEFOT05fQU5EX0ZJTEU7IHR5cGUr KykgeworCQl1bnNpZ25lZCBsb25nIHNlcTsKKworCQlmb3IgKHNlcSA9IG1pbl9zZXFbdHlwZV07 IHNlcSA8PSBtYXhfc2VxOyBzZXErKykgeworCQkJbG9uZyBzaXplID0gMDsKKworCQkJZ2VuID0g bHJ1X2dlbl9mcm9tX3NlcShzZXEpOworCisJCQlmb3IgKHpvbmUgPSAwOyB6b25lIDwgTUFYX05S X1pPTkVTOyB6b25lKyspCisJCQkJc2l6ZSArPSBSRUFEX09OQ0UobHJ1Z2VuLT5ucl9wYWdlc1tn ZW5dW3R5cGVdW3pvbmVdKTsKKworCQkJdG90YWwgKz0gc2l6ZTsKKwkJCWlmIChzZXEgPT0gbWF4 X3NlcSkKKwkJCQl5b3VuZyArPSBzaXplOworCQl9CisJfQorCisJLyogdHJ5IHRvIHNwcmVhZCBw YWdlcyBvdXQgYWNyb3NzIE1JTl9OUl9HRU5TKzEgZ2VuZXJhdGlvbnMgKi8KKwlpZiAobWF4X3Nl cSA8IG1pbl9zZXFbVFlQRV9GSUxFXSArIE1JTl9OUl9HRU5TKQorCQkqbmVlZF9hZ2luZyA9IHRy dWU7CisJZWxzZSBpZiAobWF4X3NlcSA+IG1pbl9zZXFbVFlQRV9GSUxFXSArIE1JTl9OUl9HRU5T KQorCQkqbmVlZF9hZ2luZyA9IGZhbHNlOworCWVsc2UKKwkJKm5lZWRfYWdpbmcgPSB5b3VuZyAq IE1JTl9OUl9HRU5TID4gdG90YWw7CisKKwlyZXR1cm4gdG90YWwgPiAwID8gdG90YWwgOiAwOwor fQorCitzdGF0aWMgdm9pZCBhZ2VfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0 IHNjYW5fY29udHJvbCAqc2MpCit7CisJYm9vbCBuZWVkX2FnaW5nOworCWxvbmcgbnJfdG9fc2Nh bjsKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTsKKwlp bnQgc3dhcHBpbmVzcyA9IGdldF9zd2FwcGluZXNzKG1lbWNnKTsKKwlERUZJTkVfTUFYX1NFUShs cnV2ZWMpOworCURFRklORV9NSU5fU0VRKGxydXZlYyk7CisKKwltZW1fY2dyb3VwX2NhbGN1bGF0 ZV9wcm90ZWN0aW9uKE5VTEwsIG1lbWNnKTsKKworCWlmIChtZW1fY2dyb3VwX2JlbG93X21pbiht ZW1jZykpCisJCXJldHVybjsKKworCW5yX3RvX3NjYW4gPSBnZXRfbnJfZXZpY3RhYmxlKGxydXZl YywgbWF4X3NlcSwgbWluX3NlcSwgc3dhcHBpbmVzcywgJm5lZWRfYWdpbmcpOworCWlmICghbnJf dG9fc2NhbikKKwkJcmV0dXJuOworCisJbnJfdG9fc2NhbiA+Pj0gc2MtPnByaW9yaXR5OworCisJ aWYgKCFtZW1fY2dyb3VwX29ubGluZShtZW1jZykpCisJCW5yX3RvX3NjYW4rKzsKKworCWlmIChu cl90b19zY2FuICYmIG5lZWRfYWdpbmcgJiYgKCFtZW1fY2dyb3VwX2JlbG93X2xvdyhtZW1jZykg fHwgc2MtPm1lbWNnX2xvd19yZWNsYWltKSkKKwkJaW5jX21heF9zZXEobHJ1dmVjLCBtYXhfc2Vx KTsKK30KKworc3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEg KnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKK3sKKwlzdHJ1Y3QgbWVtX2Nncm91cCAq bWVtY2c7CisKKwlWTV9CVUdfT04oIWN1cnJlbnRfaXNfa3N3YXBkKCkpOworCisJbWVtY2cgPSBt ZW1fY2dyb3VwX2l0ZXIoTlVMTCwgTlVMTCwgTlVMTCk7CisJZG8geworCQlzdHJ1Y3QgbHJ1dmVj ICpscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhtZW1jZywgcGdkYXQpOworCisJCWFnZV9scnV2 ZWMobHJ1dmVjLCBzYyk7CisKKwkJY29uZF9yZXNjaGVkKCk7CisJfSB3aGlsZSAoKG1lbWNnID0g bWVtX2Nncm91cF9pdGVyKE5VTEwsIG1lbWNnLCBOVUxMKSkpOworfQorCisvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGV2aWN0aW9uCisgKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgYm9vbCBzb3J0X2ZvbGlvKHN0cnVjdCBscnV2 ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHRpZXJfaWR4KQoreworCWJvb2wg c3VjY2VzczsKKwlpbnQgZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7CisJaW50IHR5cGUgPSBm b2xpb19pc19maWxlX2xydShmb2xpbyk7CisJaW50IHpvbmUgPSBmb2xpb196b25lbnVtKGZvbGlv KTsKKwlpbnQgdGllciA9IGZvbGlvX2xydV90aWVyKGZvbGlvKTsKKwlpbnQgZGVsdGEgPSBmb2xp b19ucl9wYWdlcyhmb2xpbyk7CisJc3RydWN0IGxydV9nZW5fc3RydWN0ICpscnVnZW4gPSAmbHJ1 dmVjLT5scnVnZW47CisKKwlWTV9CVUdfT05fRk9MSU8oZ2VuID49IE1BWF9OUl9HRU5TLCBmb2xp byk7CisKKwlpZiAoIWZvbGlvX2V2aWN0YWJsZShmb2xpbykpIHsKKwkJc3VjY2VzcyA9IGxydV9n ZW5fZGVsX2ZvbGlvKGxydXZlYywgZm9saW8sIHRydWUpOworCQlWTV9CVUdfT05fRk9MSU8oIXN1 Y2Nlc3MsIGZvbGlvKTsKKwkJZm9saW9fc2V0X3VuZXZpY3RhYmxlKGZvbGlvKTsKKwkJbHJ1dmVj X2FkZF9mb2xpbyhscnV2ZWMsIGZvbGlvKTsKKwkJX19jb3VudF92bV9ldmVudHMoVU5FVklDVEFC TEVfUEdDVUxMRUQsIGRlbHRhKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJaWYgKHR5cGUgJiYg Zm9saW9fdGVzdF9hbm9uKGZvbGlvKSAmJiBmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkgeworCQlz dWNjZXNzID0gbHJ1X2dlbl9kZWxfZm9saW8obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7CisJCVZNX0JV R19PTl9GT0xJTyghc3VjY2VzcywgZm9saW8pOworCQlmb2xpb19zZXRfc3dhcGJhY2tlZChmb2xp byk7CisJCWxydXZlY19hZGRfZm9saW9fdGFpbChscnV2ZWMsIGZvbGlvKTsKKwkJcmV0dXJuIHRy dWU7CisJfQorCisJaWYgKHRpZXIgPiB0aWVyX2lkeCkgeworCQlpbnQgaGlzdCA9IGxydV9oaXN0 X2Zyb21fc2VxKGxydWdlbi0+bWluX3NlcVt0eXBlXSk7CisKKwkJZ2VuID0gZm9saW9faW5jX2dl bihscnV2ZWMsIGZvbGlvLCBmYWxzZSk7CisJCWxpc3RfbW92ZV90YWlsKCZmb2xpby0+bHJ1LCAm bHJ1Z2VuLT5saXN0c1tnZW5dW3R5cGVdW3pvbmVdKTsKKworCQlXUklURV9PTkNFKGxydWdlbi0+ cHJvbW90ZWRbaGlzdF1bdHlwZV1bdGllciAtIDFdLAorCQkJICAgbHJ1Z2VuLT5wcm9tb3RlZFto aXN0XVt0eXBlXVt0aWVyIC0gMV0gKyBkZWx0YSk7CisJCV9fbW9kX2xydXZlY19zdGF0ZShscnV2 ZWMsIFdPUktJTkdTRVRfQUNUSVZBVEVfQkFTRSArIHR5cGUsIGRlbHRhKTsKKwkJcmV0dXJuIHRy dWU7CisJfQorCisJaWYgKGZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSB8fCBmb2xpb190ZXN0X3dy aXRlYmFjayhmb2xpbykgfHwKKwkgICAgKHR5cGUgJiYgZm9saW9fdGVzdF9kaXJ0eShmb2xpbykp KSB7CisJCWdlbiA9IGZvbGlvX2luY19nZW4obHJ1dmVjLCBmb2xpbywgdHJ1ZSk7CisJCWxpc3Rf bW92ZSgmZm9saW8tPmxydSwgJmxydWdlbi0+bGlzdHNbZ2VuXVt0eXBlXVt6b25lXSk7CisJCXJl dHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgaXNvbGF0 ZV9mb2xpbyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVj dCBzY2FuX2NvbnRyb2wgKnNjKQoreworCWJvb2wgc3VjY2VzczsKKworCWlmICghc2MtPm1heV91 bm1hcCAmJiBmb2xpb19tYXBwZWQoZm9saW8pKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIShz Yy0+bWF5X3dyaXRlcGFnZSAmJiAoc2MtPmdmcF9tYXNrICYgX19HRlBfSU8pKSAmJgorCSAgICAo Zm9saW9fdGVzdF9kaXJ0eShmb2xpbykgfHwKKwkgICAgIChmb2xpb190ZXN0X2Fub24oZm9saW8p ICYmICFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpKSkKKwkJcmV0dXJuIGZhbHNlOworCisJ aWYgKCFmb2xpb190cnlfZ2V0KGZvbGlvKSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKCFmb2xp b190ZXN0X2NsZWFyX2xydShmb2xpbykpIHsKKwkJZm9saW9fcHV0KGZvbGlvKTsKKwkJcmV0dXJu IGZhbHNlOworCX0KKworCXN1Y2Nlc3MgPSBscnVfZ2VuX2RlbF9mb2xpbyhscnV2ZWMsIGZvbGlv LCB0cnVlKTsKKwlWTV9CVUdfT05fRk9MSU8oIXN1Y2Nlc3MsIGZvbGlvKTsKKworCXJldHVybiB0 cnVlOworfQorCitzdGF0aWMgaW50IHNjYW5fZm9saW9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywg c3RydWN0IHNjYW5fY29udHJvbCAqc2MsCisJCSAgICAgICBpbnQgdHlwZSwgaW50IHRpZXIsIHN0 cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJaW50IGdlbiwgem9uZTsKKwllbnVtIHZtX2V2ZW50 X2l0ZW0gaXRlbTsKKwlpbnQgc29ydGVkID0gMDsKKwlpbnQgc2Nhbm5lZCA9IDA7CisJaW50IGlz b2xhdGVkID0gMDsKKwlpbnQgcmVtYWluaW5nID0gTUFYX0xSVV9CQVRDSDsKKwlzdHJ1Y3QgbHJ1 X2dlbl9zdHJ1Y3QgKmxydWdlbiA9ICZscnV2ZWMtPmxydWdlbjsKKwlzdHJ1Y3QgbWVtX2Nncm91 cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTsKKworCVZNX0JVR19PTighbGlzdF9lbXB0 eShsaXN0KSk7CisKKwlpZiAoZ2V0X25yX2dlbnMobHJ1dmVjLCB0eXBlKSA9PSBNSU5fTlJfR0VO UykKKwkJcmV0dXJuIDA7CisKKwlnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKGxydWdlbi0+bWluX3Nl cVt0eXBlXSk7CisKKwlmb3IgKHpvbmUgPSBzYy0+cmVjbGFpbV9pZHg7IHpvbmUgPj0gMDsgem9u ZS0tKSB7CisJCUxJU1RfSEVBRChtb3ZlZCk7CisJCWludCBza2lwcGVkID0gMDsKKwkJc3RydWN0 IGxpc3RfaGVhZCAqaGVhZCA9ICZscnVnZW4tPmxpc3RzW2dlbl1bdHlwZV1bem9uZV07CisKKwkJ d2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7CisJCQlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gbHJ1 X3RvX2ZvbGlvKGhlYWQpOworCQkJaW50IGRlbHRhID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwor CisJCQlWTV9CVUdfT05fRk9MSU8oZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbyksIGZvbGlv KTsKKwkJCVZNX0JVR19PTl9GT0xJTyhmb2xpb190ZXN0X2FjdGl2ZShmb2xpbyksIGZvbGlvKTsK KwkJCVZNX0JVR19PTl9GT0xJTyhmb2xpb19pc19maWxlX2xydShmb2xpbykgIT0gdHlwZSwgZm9s aW8pOworCQkJVk1fQlVHX09OX0ZPTElPKGZvbGlvX3pvbmVudW0oZm9saW8pICE9IHpvbmUsIGZv bGlvKTsKKworCQkJc2Nhbm5lZCArPSBkZWx0YTsKKworCQkJaWYgKHNvcnRfZm9saW8obHJ1dmVj LCBmb2xpbywgdGllcikpCisJCQkJc29ydGVkICs9IGRlbHRhOworCQkJZWxzZSBpZiAoaXNvbGF0 ZV9mb2xpbyhscnV2ZWMsIGZvbGlvLCBzYykpIHsKKwkJCQlsaXN0X2FkZCgmZm9saW8tPmxydSwg bGlzdCk7CisJCQkJaXNvbGF0ZWQgKz0gZGVsdGE7CisJCQl9IGVsc2UgeworCQkJCWxpc3RfbW92 ZSgmZm9saW8tPmxydSwgJm1vdmVkKTsKKwkJCQlza2lwcGVkICs9IGRlbHRhOworCQkJfQorCisJ CQlpZiAoIS0tcmVtYWluaW5nIHx8IG1heChpc29sYXRlZCwgc2tpcHBlZCkgPj0gTUlOX0xSVV9C QVRDSCkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChza2lwcGVkKSB7CisJCQlsaXN0X3NwbGlj ZSgmbW92ZWQsIGhlYWQpOworCQkJX19jb3VudF96aWRfdm1fZXZlbnRzKFBHU0NBTl9TS0lQLCB6 b25lLCBza2lwcGVkKTsKKwkJfQorCisJCWlmICghcmVtYWluaW5nIHx8IGlzb2xhdGVkID49IE1J Tl9MUlVfQkFUQ0gpCisJCQlicmVhazsKKwl9CisKKwlpdGVtID0gY3VycmVudF9pc19rc3dhcGQo KSA/IFBHU0NBTl9LU1dBUEQgOiBQR1NDQU5fRElSRUNUOworCWlmICghY2dyb3VwX3JlY2xhaW0o c2MpKSB7CisJCV9fY291bnRfdm1fZXZlbnRzKGl0ZW0sIGlzb2xhdGVkKTsKKwkJX19jb3VudF92 bV9ldmVudHMoUEdSRUZJTEwsIHNvcnRlZCk7CisJfQorCV9fY291bnRfbWVtY2dfZXZlbnRzKG1l bWNnLCBpdGVtLCBpc29sYXRlZCk7CisJX19jb3VudF9tZW1jZ19ldmVudHMobWVtY2csIFBHUkVG SUxMLCBzb3J0ZWQpOworCV9fY291bnRfdm1fZXZlbnRzKFBHU0NBTl9BTk9OICsgdHlwZSwgaXNv bGF0ZWQpOworCisJLyoKKwkgKiBUaGVyZSBtaWdodCBub3QgYmUgZWxpZ2libGUgcGFnZXMgZHVl IHRvIHJlY2xhaW1faWR4LCBtYXlfdW5tYXAgYW5kCisJICogbWF5X3dyaXRlcGFnZS4gQ2hlY2sg dGhlIHJlbWFpbmluZyB0byBwcmV2ZW50IGxpdmVsb2NrIGlmIHRoZXJlIGlzIG5vCisJICogcHJv Z3Jlc3MuCisJICovCisJcmV0dXJuIGlzb2xhdGVkIHx8ICFyZW1haW5pbmcgPyBzY2FubmVkIDog MDsKK30KKworc3RhdGljIGludCBnZXRfdGllcl9pZHgoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBp bnQgdHlwZSkKK3sKKwlpbnQgdGllcjsKKwlzdHJ1Y3QgY3RybF9wb3Mgc3AsIHB2OworCisJLyoK KwkgKiBUbyBsZWF2ZSBhIG1hcmdpbiBmb3IgZmx1Y3R1YXRpb25zLCB1c2UgYSBsYXJnZXIgZ2Fp biBmYWN0b3IgKDE6MikuCisJICogVGhpcyB2YWx1ZSBpcyBjaG9zZW4gYmVjYXVzZSBhbnkgb3Ro ZXIgdGllciB3b3VsZCBoYXZlIGF0IGxlYXN0IHR3aWNlCisJICogYXMgbWFueSByZWZhdWx0cyBh cyB0aGUgZmlyc3QgdGllci4KKwkgKi8KKwlyZWFkX2N0cmxfcG9zKGxydXZlYywgdHlwZSwgMCwg MSwgJnNwKTsKKwlmb3IgKHRpZXIgPSAxOyB0aWVyIDwgTUFYX05SX1RJRVJTOyB0aWVyKyspIHsK KwkJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIDIsICZwdik7CisJCWlmICghcG9z aXRpdmVfY3RybF9lcnIoJnNwLCAmcHYpKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHRpZXIg LSAxOworfQorCitzdGF0aWMgaW50IGdldF90eXBlX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1 dmVjLCBpbnQgc3dhcHBpbmVzcywgaW50ICp0aWVyX2lkeCkKK3sKKwlpbnQgdHlwZSwgdGllcjsK KwlzdHJ1Y3QgY3RybF9wb3Mgc3AsIHB2OworCWludCBnYWluW0FOT05fQU5EX0ZJTEVdID0geyBz d2FwcGluZXNzLCAyMDAgLSBzd2FwcGluZXNzIH07CisKKwkvKgorCSAqIENvbXBhcmUgdGhlIGZp cnN0IHRpZXIgb2YgYW5vbiB3aXRoIHRoYXQgb2YgZmlsZSB0byBkZXRlcm1pbmUgd2hpY2gKKwkg KiB0eXBlIHRvIHNjYW4uIEFsc28gbmVlZCB0byBjb21wYXJlIG90aGVyIHRpZXJzIG9mIHRoZSBz ZWxlY3RlZCB0eXBlCisJICogd2l0aCB0aGUgZmlyc3QgdGllciBvZiB0aGUgb3RoZXIgdHlwZSB0 byBkZXRlcm1pbmUgdGhlIGxhc3QgdGllciAob2YKKwkgKiB0aGUgc2VsZWN0ZWQgdHlwZSkgdG8g ZXZpY3QuCisJICovCisJcmVhZF9jdHJsX3BvcyhscnV2ZWMsIFRZUEVfQU5PTiwgMCwgZ2FpbltU WVBFX0FOT05dLCAmc3ApOworCXJlYWRfY3RybF9wb3MobHJ1dmVjLCBUWVBFX0ZJTEUsIDAsIGdh aW5bVFlQRV9GSUxFXSwgJnB2KTsKKwl0eXBlID0gcG9zaXRpdmVfY3RybF9lcnIoJnNwLCAmcHYp OworCisJcmVhZF9jdHJsX3BvcyhscnV2ZWMsICF0eXBlLCAwLCBnYWluWyF0eXBlXSwgJnNwKTsK Kwlmb3IgKHRpZXIgPSAxOyB0aWVyIDwgTUFYX05SX1RJRVJTOyB0aWVyKyspIHsKKwkJcmVhZF9j dHJsX3BvcyhscnV2ZWMsIHR5cGUsIHRpZXIsIGdhaW5bdHlwZV0sICZwdik7CisJCWlmICghcG9z aXRpdmVfY3RybF9lcnIoJnNwLCAmcHYpKQorCQkJYnJlYWs7CisJfQorCisJKnRpZXJfaWR4ID0g dGllciAtIDE7CisKKwlyZXR1cm4gdHlwZTsKK30KKworc3RhdGljIGludCBpc29sYXRlX2ZvbGlv cyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dh cHBpbmVzcywKKwkJCSAgaW50ICp0eXBlX3NjYW5uZWQsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3Qp Cit7CisJaW50IGk7CisJaW50IHR5cGU7CisJaW50IHNjYW5uZWQ7CisJaW50IHRpZXIgPSAtMTsK KwlERUZJTkVfTUlOX1NFUShscnV2ZWMpOworCisJVk1fQlVHX09OKCFzZXFfaXNfdmFsaWQobHJ1 dmVjKSk7CisKKwkvKgorCSAqIFRyeSB0byBtYWtlIHRoZSBvYnZpb3VzIGNob2ljZSBmaXJzdC4g V2hlbiBhbm9uIGFuZCBmaWxlIGFyZSBib3RoCisJICogYXZhaWxhYmxlIGZyb20gdGhlIHNhbWUg Z2VuZXJhdGlvbiwgaW50ZXJwcmV0IHN3YXBwaW5lc3MgMSBhcyBmaWxlCisJICogZmlyc3QgYW5k IDIwMCBhcyBhbm9uIGZpcnN0LgorCSAqLworCWlmICghc3dhcHBpbmVzcykKKwkJdHlwZSA9IFRZ UEVfRklMRTsKKwllbHNlIGlmIChtaW5fc2VxW1RZUEVfQU5PTl0gPCBtaW5fc2VxW1RZUEVfRklM RV0pCisJCXR5cGUgPSBUWVBFX0FOT047CisJZWxzZSBpZiAoc3dhcHBpbmVzcyA9PSAxKQorCQl0 eXBlID0gVFlQRV9GSUxFOworCWVsc2UgaWYgKHN3YXBwaW5lc3MgPT0gMjAwKQorCQl0eXBlID0g VFlQRV9BTk9OOworCWVsc2UKKwkJdHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2Fw cGluZXNzLCAmdGllcik7CisKKwlmb3IgKGkgPSAhc3dhcHBpbmVzczsgaSA8IEFOT05fQU5EX0ZJ TEU7IGkrKykgeworCQlpZiAodGllciA8IDApCisJCQl0aWVyID0gZ2V0X3RpZXJfaWR4KGxydXZl YywgdHlwZSk7CisKKwkJc2Nhbm5lZCA9IHNjYW5fZm9saW9zKGxydXZlYywgc2MsIHR5cGUsIHRp ZXIsIGxpc3QpOworCQlpZiAoc2Nhbm5lZCkKKwkJCWJyZWFrOworCisJCXR5cGUgPSAhdHlwZTsK KwkJdGllciA9IC0xOworCX0KKworCSp0eXBlX3NjYW5uZWQgPSB0eXBlOworCisJcmV0dXJuIHNj YW5uZWQ7Cit9CisKK3N0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHN0cnVjdCBscnV2ZWMgKmxydXZl Yywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKQoreworCWludCB0eXBl OworCWludCBzY2FubmVkOworCWludCByZWNsYWltZWQ7CisJTElTVF9IRUFEKGxpc3QpOworCXN0 cnVjdCBmb2xpbyAqZm9saW87CisJZW51bSB2bV9ldmVudF9pdGVtIGl0ZW07CisJc3RydWN0IHJl Y2xhaW1fc3RhdCBzdGF0OworCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1j ZyhscnV2ZWMpOworCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1 dmVjKTsKKworCXNwaW5fbG9ja19pcnEoJmxydXZlYy0+bHJ1X2xvY2spOworCisJc2Nhbm5lZCA9 IGlzb2xhdGVfZm9saW9zKGxydXZlYywgc2MsIHN3YXBwaW5lc3MsICZ0eXBlLCAmbGlzdCk7CisK KwlpZiAodHJ5X3RvX2luY19taW5fc2VxKGxydXZlYywgc3dhcHBpbmVzcykpCisJCXNjYW5uZWQr KzsKKworCWlmIChnZXRfbnJfZ2VucyhscnV2ZWMsIFRZUEVfRklMRSkgPT0gTUlOX05SX0dFTlMp CisJCXNjYW5uZWQgPSAwOworCisJc3Bpbl91bmxvY2tfaXJxKCZscnV2ZWMtPmxydV9sb2NrKTsK KworCWlmIChsaXN0X2VtcHR5KCZsaXN0KSkKKwkJcmV0dXJuIHNjYW5uZWQ7CisKKwlyZWNsYWlt ZWQgPSBzaHJpbmtfcGFnZV9saXN0KCZsaXN0LCBwZ2RhdCwgc2MsICZzdGF0LCBmYWxzZSk7CisK KwkvKgorCSAqIFRvIGF2b2lkIGxpdmVsb2NrLCBkb24ndCBhZGQgcmVqZWN0ZWQgcGFnZXMgYmFj ayB0byB0aGUgc2FtZSBsaXN0cworCSAqIHRoZXkgd2VyZSBpc29sYXRlZCBmcm9tLgorCSAqLwor CWxpc3RfZm9yX2VhY2hfZW50cnkoZm9saW8sICZsaXN0LCBscnUpIHsKKwkJaWYgKChmb2xpb19p c19maWxlX2xydShmb2xpbykgfHwgZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSAmJgorCQkg ICAgKCFmb2xpb190ZXN0X3JlY2xhaW0oZm9saW8pIHx8CisJCSAgICAgIShmb2xpb190ZXN0X2Rp cnR5KGZvbGlvKSB8fCBmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpKSkKKwkJCWZvbGlvX3Nl dF9hY3RpdmUoZm9saW8pOworCisJCWZvbGlvX2NsZWFyX3JlZmVyZW5jZWQoZm9saW8pOworCQlm b2xpb19jbGVhcl93b3JraW5nc2V0KGZvbGlvKTsKKwl9CisKKwlzcGluX2xvY2tfaXJxKCZscnV2 ZWMtPmxydV9sb2NrKTsKKworCW1vdmVfcGFnZXNfdG9fbHJ1KGxydXZlYywgJmxpc3QpOworCisJ aXRlbSA9IGN1cnJlbnRfaXNfa3N3YXBkKCkgPyBQR1NURUFMX0tTV0FQRCA6IFBHU1RFQUxfRElS RUNUOworCWlmICghY2dyb3VwX3JlY2xhaW0oc2MpKQorCQlfX2NvdW50X3ZtX2V2ZW50cyhpdGVt LCByZWNsYWltZWQpOworCV9fY291bnRfbWVtY2dfZXZlbnRzKG1lbWNnLCBpdGVtLCByZWNsYWlt ZWQpOworCV9fY291bnRfdm1fZXZlbnRzKFBHU1RFQUxfQU5PTiArIHR5cGUsIHJlY2xhaW1lZCk7 CisKKwlzcGluX3VubG9ja19pcnEoJmxydXZlYy0+bHJ1X2xvY2spOworCisJbWVtX2Nncm91cF91 bmNoYXJnZV9saXN0KCZsaXN0KTsKKwlmcmVlX3VucmVmX3BhZ2VfbGlzdCgmbGlzdCk7CisKKwlz Yy0+bnJfcmVjbGFpbWVkICs9IHJlY2xhaW1lZDsKKworCXJldHVybiBzY2FubmVkOworfQorCitz dGF0aWMgbG9uZyBnZXRfbnJfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBz Y2FuX2NvbnRyb2wgKnNjLCBib29sIGNhbl9zd2FwKQoreworCWJvb2wgbmVlZF9hZ2luZzsKKwls b25nIG5yX3RvX3NjYW47CisJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNn KGxydXZlYyk7CisJREVGSU5FX01BWF9TRVEobHJ1dmVjKTsKKwlERUZJTkVfTUlOX1NFUShscnV2 ZWMpOworCisJaWYgKG1lbV9jZ3JvdXBfYmVsb3dfbWluKG1lbWNnKSB8fAorCSAgICAobWVtX2Nn cm91cF9iZWxvd19sb3cobWVtY2cpICYmICFzYy0+bWVtY2dfbG93X3JlY2xhaW0pKQorCQlyZXR1 cm4gMDsKKworCW5yX3RvX3NjYW4gPSBnZXRfbnJfZXZpY3RhYmxlKGxydXZlYywgbWF4X3NlcSwg bWluX3NlcSwgY2FuX3N3YXAsICZuZWVkX2FnaW5nKTsKKwlpZiAoIW5yX3RvX3NjYW4pCisJCXJl dHVybiAwOworCisJLyogcmVzZXQgdGhlIHByaW9yaXR5IGlmIHRoZSB0YXJnZXQgaGFzIGJlZW4g bWV0ICovCisJbnJfdG9fc2NhbiA+Pj0gc2MtPm5yX3JlY2xhaW1lZCA8IHNjLT5ucl90b19yZWNs YWltID8gc2MtPnByaW9yaXR5IDogREVGX1BSSU9SSVRZOworCisJaWYgKCFtZW1fY2dyb3VwX29u bGluZShtZW1jZykpCisJCW5yX3RvX3NjYW4rKzsKKworCWlmICghbnJfdG9fc2NhbikKKwkJcmV0 dXJuIDA7CisKKwlpZiAoIW5lZWRfYWdpbmcpCisJCXJldHVybiBucl90b19zY2FuOworCisJLyog bGVhdmUgdGhlIHdvcmsgdG8gbHJ1X2dlbl9hZ2Vfbm9kZSgpICovCisJaWYgKGN1cnJlbnRfaXNf a3N3YXBkKCkpCisJCXJldHVybiAwOworCisJLyogdHJ5IG90aGVyIG1lbWNncyBiZWZvcmUgZ29p bmcgdG8gdGhlIGFnaW5nIHBhdGggKi8KKwlpZiAoIWNncm91cF9yZWNsYWltKHNjKSAmJiAhc2Mt PmZvcmNlX2RlYWN0aXZhdGUpIHsKKwkJc2MtPnNraXBwZWRfZGVhY3RpdmF0ZSA9IHRydWU7CisJ CXJldHVybiAwOworCX0KKworCWluY19tYXhfc2VxKGxydXZlYywgbWF4X3NlcSk7CisKKwlyZXR1 cm4gbnJfdG9fc2NhbjsKK30KKworc3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0 cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCit7CisJc3RydWN0 IGJsa19wbHVnIHBsdWc7CisJbG9uZyBzY2FubmVkID0gMDsKKwlzdHJ1Y3QgbWVtX2Nncm91cCAq bWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTsKKworCWxydV9hZGRfZHJhaW4oKTsKKworCWJs a19zdGFydF9wbHVnKCZwbHVnKTsKKworCXdoaWxlICh0cnVlKSB7CisJCWludCBkZWx0YTsKKwkJ aW50IHN3YXBwaW5lc3M7CisJCWxvbmcgbnJfdG9fc2NhbjsKKworCQlpZiAoc2MtPm1heV9zd2Fw KQorCQkJc3dhcHBpbmVzcyA9IGdldF9zd2FwcGluZXNzKG1lbWNnKTsKKwkJZWxzZSBpZiAoIWNn cm91cF9yZWNsYWltKHNjKSAmJiBnZXRfc3dhcHBpbmVzcyhtZW1jZykpCisJCQlzd2FwcGluZXNz ID0gMTsKKwkJZWxzZQorCQkJc3dhcHBpbmVzcyA9IDA7CisKKwkJbnJfdG9fc2NhbiA9IGdldF9u cl90b19zY2FuKGxydXZlYywgc2MsIHN3YXBwaW5lc3MpOworCQlpZiAoIW5yX3RvX3NjYW4pCisJ CQlicmVhazsKKworCQlkZWx0YSA9IGV2aWN0X2ZvbGlvcyhscnV2ZWMsIHNjLCBzd2FwcGluZXNz KTsKKwkJaWYgKCFkZWx0YSkKKwkJCWJyZWFrOworCisJCXNjYW5uZWQgKz0gZGVsdGE7CisJCWlm IChzY2FubmVkID49IG5yX3RvX3NjYW4pCisJCQlicmVhazsKKworCQljb25kX3Jlc2NoZWQoKTsK Kwl9CisKKwlibGtfZmluaXNoX3BsdWcoJnBsdWcpOworfQorCiAvKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6YXRpb24KICAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCkBAIC0zMTIzLDYgKzM4ODIsMTYgQEAgc3RhdGljIGludCBfX2luaXQg aW5pdF9scnVfZ2VuKHZvaWQpCiB9OwogbGF0ZV9pbml0Y2FsbChpbml0X2xydV9nZW4pOwogCisj ZWxzZQorCitzdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAq cGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQoreworfQorCitzdGF0aWMgdm9pZCBscnVf Z2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250 cm9sICpzYykKK3sKK30KKwogI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovCiAKIHN0YXRpYyB2 b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250 cm9sICpzYykKQEAgLTMxMzYsNiArMzkwNSwxMSBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVj KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiAJc3RydWN0 IGJsa19wbHVnIHBsdWc7CiAJYm9vbCBzY2FuX2FkanVzdGVkOwogCisJaWYgKGxydV9nZW5fZW5h YmxlZCgpKSB7CisJCWxydV9nZW5fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTsKKwkJcmV0dXJu OworCX0KKwogCWdldF9zY2FuX2NvdW50KGxydXZlYywgc2MsIG5yKTsKIAogCS8qIFJlY29yZCB0 aGUgb3JpZ2luYWwgc2NhbiB0YXJnZXQgZm9yIHByb3BvcnRpb25hbCBhZGp1c3RtZW50cyBsYXRl ciAqLwpAQCAtMzY0MCw2ICs0NDE0LDkgQEAgc3RhdGljIHZvaWQgc25hcHNob3RfcmVmYXVsdHMo c3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZywgcGdfZGF0YV90ICpwZ2RhdCkKIAlzdHJ1 Y3QgbHJ1dmVjICp0YXJnZXRfbHJ1dmVjOwogCXVuc2lnbmVkIGxvbmcgcmVmYXVsdHM7CiAKKwlp ZiAobHJ1X2dlbl9lbmFibGVkKCkpCisJCXJldHVybjsKKwogCXRhcmdldF9scnV2ZWMgPSBtZW1f Y2dyb3VwX2xydXZlYyh0YXJnZXRfbWVtY2csIHBnZGF0KTsKIAlyZWZhdWx0cyA9IGxydXZlY19w YWdlX3N0YXRlKHRhcmdldF9scnV2ZWMsIFdPUktJTkdTRVRfQUNUSVZBVEVfQU5PTik7CiAJdGFy Z2V0X2xydXZlYy0+cmVmYXVsdHNbMF0gPSByZWZhdWx0czsKQEAgLTQwMTAsNiArNDc4NywxMSBA QCBzdGF0aWMgdm9pZCBhZ2VfYWN0aXZlX2Fub24oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwK IAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiAJc3RydWN0IGxydXZlYyAqbHJ1dmVjOwogCisJ aWYgKGxydV9nZW5fZW5hYmxlZCgpKSB7CisJCWxydV9nZW5fYWdlX25vZGUocGdkYXQsIHNjKTsK KwkJcmV0dXJuOworCX0KKwogCWlmICghY2FuX2FnZV9hbm9uX3BhZ2VzKHBnZGF0LCBzYykpCiAJ CXJldHVybjsKIApkaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5j CmluZGV4IDhjMDNhZmUxZDY3Yy4uNDQzMzQzYTNmM2UzIDEwMDY0NAotLS0gYS9tbS93b3JraW5n c2V0LmMKKysrIGIvbW0vd29ya2luZ3NldC5jCkBAIC0xODcsNyArMTg3LDYgQEAgc3RhdGljIHVu c2lnbmVkIGludCBidWNrZXRfb3JkZXIgX19yZWFkX21vc3RseTsKIHN0YXRpYyB2b2lkICpwYWNr X3NoYWRvdyhpbnQgbWVtY2dpZCwgcGdfZGF0YV90ICpwZ2RhdCwgdW5zaWduZWQgbG9uZyBldmlj dGlvbiwKIAkJCSBib29sIHdvcmtpbmdzZXQpCiB7Ci0JZXZpY3Rpb24gPj49IGJ1Y2tldF9vcmRl cjsKIAlldmljdGlvbiAmPSBFVklDVElPTl9NQVNLOwogCWV2aWN0aW9uID0gKGV2aWN0aW9uIDw8 IE1FTV9DR1JPVVBfSURfU0hJRlQpIHwgbWVtY2dpZDsKIAlldmljdGlvbiA9IChldmljdGlvbiA8 PCBOT0RFU19TSElGVCkgfCBwZ2RhdC0+bm9kZV9pZDsKQEAgLTIxMiwxMCArMjExLDExNiBAQCBz dGF0aWMgdm9pZCB1bnBhY2tfc2hhZG93KHZvaWQgKnNoYWRvdywgaW50ICptZW1jZ2lkcCwgcGdf ZGF0YV90ICoqcGdkYXQsCiAKIAkqbWVtY2dpZHAgPSBtZW1jZ2lkOwogCSpwZ2RhdCA9IE5PREVf REFUQShuaWQpOwotCSpldmljdGlvbnAgPSBlbnRyeSA8PCBidWNrZXRfb3JkZXI7CisJKmV2aWN0 aW9ucCA9IGVudHJ5OwogCSp3b3JraW5nc2V0cCA9IHdvcmtpbmdzZXQ7CiB9CiAKKyNpZmRlZiBD T05GSUdfTFJVX0dFTgorCitzdGF0aWMgaW50IGZvbGlvX2xydV9yZWZzKHN0cnVjdCBmb2xpbyAq Zm9saW8pCit7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IFJFQURfT05DRShmb2xpby0+ZmxhZ3Mp OworCisJQlVJTERfQlVHX09OKExSVV9HRU5fV0lEVEggKyBMUlVfUkVGU19XSURUSCA+IEJJVFNf UEVSX0xPTkcgLSBFVklDVElPTl9TSElGVCk7CisKKwkvKiBzZWUgdGhlIGNvbW1lbnQgb24gTUFY X05SX1RJRVJTICovCisJcmV0dXJuIGZsYWdzICYgQklUKFBHX3dvcmtpbmdzZXQpID8gKGZsYWdz ICYgTFJVX1JFRlNfTUFTSykgPj4gTFJVX1JFRlNfUEdPRkYgOiAwOworfQorCitzdGF0aWMgdm9p ZCAqbHJ1X2dlbl9ldmljdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKQoreworCWludCBoaXN0LCB0 aWVyOworCXVuc2lnbmVkIGxvbmcgdG9rZW47CisJdW5zaWduZWQgbG9uZyBtaW5fc2VxOworCXN0 cnVjdCBscnV2ZWMgKmxydXZlYzsKKwlzdHJ1Y3QgbHJ1X2dlbl9zdHJ1Y3QgKmxydWdlbjsKKwlp bnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTsKKwlpbnQgcmVmcyA9IGZvbGlvX2xy dV9yZWZzKGZvbGlvKTsKKwlpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CisJYm9v bCB3b3JraW5nc2V0ID0gZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKTsKKwlzdHJ1Y3QgbWVt X2Nncm91cCAqbWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7CisJc3RydWN0IHBnbGlzdF9kYXRh ICpwZ2RhdCA9IGZvbGlvX3BnZGF0KGZvbGlvKTsKKworCWxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1 dmVjKG1lbWNnLCBwZ2RhdCk7CisJbHJ1Z2VuID0gJmxydXZlYy0+bHJ1Z2VuOworCW1pbl9zZXEg PSBSRUFEX09OQ0UobHJ1Z2VuLT5taW5fc2VxW3R5cGVdKTsKKwl0b2tlbiA9IChtaW5fc2VxIDw8 IExSVV9SRUZTX1dJRFRIKSB8IHJlZnM7CisKKwloaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEobWlu X3NlcSk7CisJdGllciA9IGxydV90aWVyX2Zyb21fcmVmcyhyZWZzICsgd29ya2luZ3NldCk7CisJ YXRvbWljX2xvbmdfYWRkKGRlbHRhLCAmbHJ1Z2VuLT5ldmljdGVkW2hpc3RdW3R5cGVdW3RpZXJd KTsKKworCXJldHVybiBwYWNrX3NoYWRvdyhtZW1fY2dyb3VwX2lkKG1lbWNnKSwgcGdkYXQsIHRv a2VuLCB3b3JraW5nc2V0KTsKK30KKworc3RhdGljIHZvaWQgbHJ1X2dlbl9yZWZhdWx0KHN0cnVj dCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdykKK3sKKwlpbnQgaGlzdCwgdGllciwgcmVmczsK KwlpbnQgbWVtY2dfaWQ7CisJYm9vbCB3b3JraW5nc2V0OworCXVuc2lnbmVkIGxvbmcgdG9rZW47 CisJdW5zaWduZWQgbG9uZyBtaW5fc2VxOworCXN0cnVjdCBscnV2ZWMgKmxydXZlYzsKKwlzdHJ1 Y3QgbHJ1X2dlbl9zdHJ1Y3QgKmxydWdlbjsKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CisJ c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdDsKKwlpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1 KGZvbGlvKTsKKwlpbnQgZGVsdGEgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CisKKwl1bnBhY2tf c2hhZG93KHNoYWRvdywgJm1lbWNnX2lkLCAmcGdkYXQsICZ0b2tlbiwgJndvcmtpbmdzZXQpOwor CisJcmVmcyA9IHRva2VuICYgKEJJVChMUlVfUkVGU19XSURUSCkgLSAxKTsKKwlpZiAocmVmcyAm JiAhd29ya2luZ3NldCkKKwkJcmV0dXJuOworCisJaWYgKGZvbGlvX3BnZGF0KGZvbGlvKSAhPSBw Z2RhdCkKKwkJcmV0dXJuOworCisJcmN1X3JlYWRfbG9jaygpOworCW1lbWNnID0gZm9saW9fbWVt Y2dfcmN1KGZvbGlvKTsKKwlpZiAobWVtX2Nncm91cF9pZChtZW1jZykgIT0gbWVtY2dfaWQpCisJ CWdvdG8gdW5sb2NrOworCisJdG9rZW4gPj49IExSVV9SRUZTX1dJRFRIOworCWxydXZlYyA9IG1l bV9jZ3JvdXBfbHJ1dmVjKG1lbWNnLCBwZ2RhdCk7CisJbHJ1Z2VuID0gJmxydXZlYy0+bHJ1Z2Vu OworCW1pbl9zZXEgPSBSRUFEX09OQ0UobHJ1Z2VuLT5taW5fc2VxW3R5cGVdKTsKKwlpZiAodG9r ZW4gIT0gKG1pbl9zZXEgJiAoRVZJQ1RJT05fTUFTSyA+PiBMUlVfUkVGU19XSURUSCkpKQorCQln b3RvIHVubG9jazsKKworCWhpc3QgPSBscnVfaGlzdF9mcm9tX3NlcShtaW5fc2VxKTsKKwl0aWVy ID0gbHJ1X3RpZXJfZnJvbV9yZWZzKHJlZnMgKyB3b3JraW5nc2V0KTsKKwlhdG9taWNfbG9uZ19h ZGQoZGVsdGEsICZscnVnZW4tPnJlZmF1bHRlZFtoaXN0XVt0eXBlXVt0aWVyXSk7CisJbW9kX2xy dXZlY19zdGF0ZShscnV2ZWMsIFdPUktJTkdTRVRfUkVGQVVMVF9CQVNFICsgdHlwZSwgZGVsdGEp OworCisJLyoKKwkgKiBDb3VudCB0aGUgZm9sbG93aW5nIHR3byBjYXNlcyBhcyBzdGFsbHM6CisJ ICogMSkgRm9yIHBhZ2VzIGFjY2Vzc2VkIHRocm91Z2ggcGFnZSB0YWJsZXMsIGhvdHRlciBwYWdl cyBwdXNoZWQgb3V0CisJICogICAgaG90IHBhZ2VzIHdoaWNoIHJlZmF1bHRlZCBpbW1lZGlhdGVs eS4KKwkgKiAyKSBGb3IgcGFnZXMgYWNjZXNzZWQgdGhyb3VnaCBmaWxlIGRlc2NyaXB0b3JzLCBu dW1iZXJzIG9mIGFjY2Vzc2VzCisJICogICAgbWlnaHQgaGF2ZSBiZWVuIGJleW9uZCB0aGUgbGlt aXQuCisJICovCisJaWYgKGxydV9nZW5faW5fZmF1bHQoKSB8fCByZWZzICsgd29ya2luZ3NldCA9 PSBCSVQoTFJVX1JFRlNfV0lEVEgpKSB7CisJCWZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTsK KwkJbW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFdPUktJTkdTRVRfUkVTVE9SRV9CQVNFICsgdHlw ZSwgZGVsdGEpOworCX0KK3VubG9jazoKKwlyY3VfcmVhZF91bmxvY2soKTsKK30KKworI2Vsc2UK Kworc3RhdGljIHZvaWQgKmxydV9nZW5fZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbykKK3sK KwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgbHJ1X2dlbl9yZWZhdWx0KHN0cnVjdCBm b2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdykKK3sKK30KKworI2VuZGlmIC8qIENPTkZJR19MUlVf R0VOICovCisKIC8qKgogICogd29ya2luZ3NldF9hZ2Vfbm9ucmVzaWRlbnQgLSBhZ2Ugbm9uLXJl c2lkZW50IGVudHJpZXMgYXMgTFJVIGFnZXMKICAqIEBscnV2ZWM6IHRoZSBscnV2ZWMgdGhhdCB3 YXMgYWdlZApAQCAtMjY0LDEwICszNjksMTQgQEAgdm9pZCAqd29ya2luZ3NldF9ldmljdGlvbihz dHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZykKIAlWTV9C VUdfT05fUEFHRShwYWdlX2NvdW50KHBhZ2UpLCBwYWdlKTsKIAlWTV9CVUdfT05fUEFHRSghUGFn ZUxvY2tlZChwYWdlKSwgcGFnZSk7CiAKKwlpZiAobHJ1X2dlbl9lbmFibGVkKCkpCisJCXJldHVy biBscnVfZ2VuX2V2aWN0aW9uKHBhZ2VfZm9saW8ocGFnZSkpOworCiAJbHJ1dmVjID0gbWVtX2Nn cm91cF9scnV2ZWModGFyZ2V0X21lbWNnLCBwZ2RhdCk7CiAJLyogWFhYOiB0YXJnZXRfbWVtY2cg Y2FuIGJlIE5VTEwsIGdvIHRocm91Z2ggbHJ1dmVjICovCiAJbWVtY2dpZCA9IG1lbV9jZ3JvdXBf aWQobHJ1dmVjX21lbWNnKGxydXZlYykpOwogCWV2aWN0aW9uID0gYXRvbWljX2xvbmdfcmVhZCgm bHJ1dmVjLT5ub25yZXNpZGVudF9hZ2UpOworCWV2aWN0aW9uID4+PSBidWNrZXRfb3JkZXI7CiAJ d29ya2luZ3NldF9hZ2Vfbm9ucmVzaWRlbnQobHJ1dmVjLCB0aHBfbnJfcGFnZXMocGFnZSkpOwog CXJldHVybiBwYWNrX3NoYWRvdyhtZW1jZ2lkLCBwZ2RhdCwgZXZpY3Rpb24sIFBhZ2VXb3JraW5n c2V0KHBhZ2UpKTsKIH0KQEAgLTI5Nyw3ICs0MDYsMTMgQEAgdm9pZCB3b3JraW5nc2V0X3JlZmF1 bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KQogCWludCBtZW1jZ2lkOwogCWxv bmcgbnI7CiAKKwlpZiAobHJ1X2dlbl9lbmFibGVkKCkpIHsKKwkJbHJ1X2dlbl9yZWZhdWx0KGZv bGlvLCBzaGFkb3cpOworCQlyZXR1cm47CisJfQorCiAJdW5wYWNrX3NoYWRvdyhzaGFkb3csICZt ZW1jZ2lkLCAmcGdkYXQsICZldmljdGlvbiwgJndvcmtpbmdzZXQpOworCWV2aWN0aW9uIDw8PSBi dWNrZXRfb3JkZXI7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJLyoKLS0gCjIuMzUuMC4yNjMuZ2I4 MjQyMjY0MmYtZ29vZwoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlz dHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2xpbnV4LWFybS1rZXJuZWwK