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 7A498CCF2CC for ; Sun, 18 Oct 2026 10:19:11 +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:In-Reply-To:References:Message-Id :MIME-Version:Subject:Date:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=9M92G74NE/Z1ZzXaHveW3sn97z8Ics6xiZfEXVQErtU=; b=43JRGXJzjR863Y JHusnS7OXE6JbG7ZQk9X0/5Uql6x2pHqvarcIu+sRKAnf5YCUHHw0rXWL3/UjvbEe+eQTaTlW4gg4 smcM+jHzzO32NVwtPgDfBvV/dKFl34mNap5MTUlMBQdWz6zXxBMqL2eJIo5CTqPyRHDw6eBN8rIUV gLIvv7CWmJulvnb1PNTmjEyQAdfZuOV3Fojp/ZTECJytNkAgSTUq9Pmbl+iMq58b/9eGGtLJY7tKD A0D1KPCNT/bAl81BE0xGwB8n/8vNrtcegOL/zn/AEKuSXpch4KBnVwQYbRP8mQV29XUYLHMYPapGF Mg1jWnDs5LQGMPQVCheg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1xINyw-00000005jyZ-1fxQ; Sun, 18 Oct 2026 10:19:10 +0000 Received: from mail-wr1-x435.google.com ([2a00:1450:4864:20::435]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1xINyY-00000005jgo-0onZ for linux-amlogic@lists.infradead.org; Sun, 18 Oct 2026 10:18:52 +0000 Received: by mail-wr1-x435.google.com with SMTP id ffacd0b85a97d-48b001cd92bso596529f8f.2 for ; Sun, 18 Oct 2026 03:18:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre.com; s=google; t=1792318724; x=1792923524; darn=lists.infradead.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=LoyhDc/VpuIgBMj+Xqiop2OIqZOz6gbzCUXxoYGBk74=; b=Lve0UogsZhh6ibr3LoNsqDWP0nAjL2rfbMtZhWfMWEL09HMjgiIN2f2aIOiDNS5hvD L9CCBN9tvkVNA00VgrtbfhgZgyJvglCIzJjkaKkYpE8nmGN+ofYGfSCjxrokaLm+6SLc Sy+xG+l4lCBrO3YzPc4BuypgK+wqGYWeCuv/EiHhnq1Z361/FyVlQR0CQD/X60262VWC N50vEMF+l7B1CSiWIy7Pdh2Fwmo76xgGAg+SdbmiU2Ia4rqHz7uwmCsYXZu2OxCWVTmx ECXFqcLkPrSjFOs6phhFsFfpXqwLW5y7xicD0SOX/KSQGYPxXWE34rlWnqZkBB+imvKt USZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1792318724; x=1792923524; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=LoyhDc/VpuIgBMj+Xqiop2OIqZOz6gbzCUXxoYGBk74=; b=P+9Wnn48eO1gOx9k6oxz18Yh6bDiYaOmsuhRmjPMSF5cyVyNvW70HgviNMmClmzetk gSpzljQcq4EYRx+DW5EWTz0t2s/6Eiz3LMBbb1iU7qSV+P1A34yBYvr87XnyGNclztdG PdPxYJ5RhUEsWsCRB5vH1UnQVy7BUdAxSU4Gb1cDOHJgRqMN1/4dcfD/BbEB4Um6NIEE wU6Bnp4rRUlWFOjH13fbrjoTzsXKM9+Yx8m6+vNc1dwn+Xxv4hHFfYoCXIFOZ3vjbnGg IAhEJN6vFiq9us3C2R0jXx96u6t36l/LYbmdix7fiDGB0ugZZ5OLEToCnZRGAY9EGNT4 BzzQ== X-Forwarded-Encrypted: i=1; AKwUvBxip2frWER4uxd3Rn/gzivGAyvc9u9NmPICOL18d3lPgVF+ONg+OytihWyaygCwNDMEwR2/yIXfwVnXLXAA@lists.infradead.org X-Gm-Message-State: AFq9FYLGTmppZq7AvZkJZd5yujQViD0q3sBtfJ9g96G2+2KAsgZOsj2L XBaRu5sDlFzq/ITSnRGNMC2FjzOIaBc9o+gfM1Lqvyq8Md2L4a85+9Awdjem0RKHKM4= X-Gm-Gg: AYBFou0iOi9z6UcqJ4QGpD3fRmiaaEWQO+koGzAROCDNJvuReVCJGnbG42vaNHves3B 0IhVmDkJtI1+4bygZDURWEtnAhqTgn1La1tij2CC7as1isC5wDXU+/YkGM7tP3eyU9lmtPvXcgn zh3Z1xS0Hj+iKqFHUFoutiCEi2WIVALHil+FvqP1pRDT4Ezy5HNY564tvLWCyyAFmXs2E83khKz PZcHexX460FpztzM+J3mKjV8i2RHQeJ56KZpokFqYh2Q7jSrPPCGmutq8goL6j9QRFin8jk4Hd2 EchgDLvbRenqNT8ADaiJ7sAhYFWiDRFdN6Fel3OCpBaWNhrAeMRow2uO4nOapYbP3h1UJ4Utq7z aTHiNAm/yke35yL8myoXLNinP94YPuKzJSaLmQJQPGgoEyAtPO/fU7rcPHqV/h6VeSsgtKeeveC Bb0KmphVBtGpR/QKezU0wMxJKipam0A9MIWsywETFCPQ9V/GkY0KQoemLuuO0iPE8jwPxtNBbqr LT+FSI= X-Received: by 2002:a05:6000:22c4:b0:48d:ffce:6cef with SMTP id ffacd0b85a97d-48e079200b5mr10307718f8f.0.1792318723904; Sun, 18 Oct 2026 03:18:43 -0700 (PDT) Received: from [127.0.1.1] ([37.103.126.255]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48dfd4d4978sm14911507f8f.21.2026.10.18.03.18.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 Oct 2026 03:18:43 -0700 (PDT) From: Valerio Setti Date: Sun, 18 Oct 2026 12:18:01 +0200 Subject: [PATCH v5 4/7] ASoC: meson: add AUDIN driver MIME-Version: 1.0 Message-Id: <20261018-audin-v5-4-4b8cc13a1b22@baylibre.com> References: <20261018-audin-v5-0-4b8cc13a1b22@baylibre.com> In-Reply-To: <20261018-audin-v5-0-4b8cc13a1b22@baylibre.com> To: Jerome Brunet , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Neil Armstrong , Kevin Hilman , Martin Blumenstingl , Jaroslav Kysela , Takashi Iwai Cc: linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-amlogic@lists.infradead.org, linux-kernel@vger.kernel.org, Valerio Setti X-Mailer: b4 0.16.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=29910; i=vsetti@baylibre.com; h=from:subject:message-id; bh=aM+nZwCAezR0YQLuTbNOO3kPnCY8Wq4QogudyiQLX6o=; b=owGbwMvMwCV2z3ty7kUrRgbG02pJDFlX5vze/pV5hbZEcGuSw5N+Fjkt5mu/9X+9iV+We82yv Ke7TyOlo5SFQYyLQVZMkYVl+r3fBaVqD40TThbAzGFlAhnCwMUpABMp3MrwP3R71bPHuq579P4X Ldiqse3ujq/ftNwf11w1vVTl8qWbS5nhf8Hn2ykJDxM38rC17J2ZpZ56NlUgYuskD6+tAkn1806 ZMAIA X-Developer-Key: i=vsetti@baylibre.com; a=openpgp; fpr=0497DEFB707526E13360C970DE4B936DD13A0100 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20261018_031848_998387_41FBA3D7 X-CRM114-Status: GOOD ( 31.38 ) X-BeenThere: linux-amlogic@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-amlogic" Errors-To: linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org QVVESU4gcHJvdmlkZXMgYXVkaW8gaW5wdXQgc3VwcG9ydCB0byB0aGUgQW1sb2dpYyBHWCBiYXNl ZCBwbGF0Zm9ybXMKKEdYQkIvR1hMKS4gSXQgaXMgdGhlIGNvdW50ZXJwYXJ0IG9mIEFJVSBmb3Ig Y2FwdHVyZSBhbmQgaXQgc3RyaWN0bHkKZm9sbG93cyB0aGUgc2FtZSBzdHJ1Y3R1cmU6Ci0gSXQg dGFrZXMgdGhlIG93bmVyc2hpcCBvZiB0aGUgZW50aXJlIHJlZ2lzdGVyIHJhbmdlOwotIEl0IHNl dHMgdXAgcGVyaXBoZXJhbCBjbG9jayBhbmQgaGFuZGxlcyB0aGUgcmVzZXQ7Ci0gSXQgYWRkcyBz dXBwb3J0IGZvciBJMlMgZGF0YSBmb3JtYXR0ZXIgdGhyb3VnaCBhIHdpZGdldDsKLSBJdCBpbnN0 YW50aWF0ZXMgZWFjaCBvZiB0aGUgRklGT3MgYXMgY29tcG9uZW50J3MgREFJLgoKQm90aCBJMlMg ZGF0YSBmb3JtYXR0ZXIgYW5kIEZJRk8gY29kZSBsaXZlIHNlcGFyYXRlIGZpbGVzCignYXVkaW4t Zm9ybWF0dGVyLWkycycgYW5kICdhdWRpbi1maWZvJywgcmVzcGVjdGl2ZWx5KSBmb3IgYSBiZXR0 ZXIKY29kZSBvcmdhbml6YXRpb24uIFVuZm9ydHVuYXRlbHkgaXQgd2Fzbid0IHBvc3NpYmxlIHRv IGFkZCB0aGVtIGFzCmluZGVwZW5kZW50IGRldmljZXMgZHVlIHRvIHRoZSBtZXNzeSByZWdpc3Rl ciBsYXlvdXQgb3JnYW5pemF0aW9uIHRoYXQKaGFzIGJlZW4gaW1wbGVtZW50ZWQgYnkgdGhlIG1h bnVmYWN0dXJlciBvbiB0aGlzIHBsYXRmb3JtLgoKVGhpcyBjb21wb25lbnQgY291bGQgaWRlYWxs eSBoYW5kbGUgbXVsdGlwbGUgaW5wdXQgc291cmNlcyAoU1BESUYsIEkyUywKUENNLCBIRE1JKSwg YnV0IGZvciB0aGUgdGltZSBiZWluZyBvbmx5IEkyUyBpcyBhZGRlZCBhbmQgaGFzIGJlZW4gdGVz dGVkLgoKTm90ZTogZHVlIHRvIGRlZmF1bHQgcmVnaXN0ZXIgY29uZmlndXJhdGlvbiwgYXQgYm9v dCBhbGwgRklGTyBpbnB1dCBzb3VyY2VzCmFyZSBzZXQgdG8gIlNQRElGIi4gSW4gb3JkZXIgdG8g YmUgYWJsZSB0byB0ZXN0IEkyUyB0aGV5IG11c3QgYmUgc3dpdGNoZWQKdG8gIkkyUyIuIFRoaXMg Y2FuIGVhc2lseSBiZSBhY2hpZXZlZCB3aXRoOgoKICAkIGFtaXhlciBzc2V0ICdBVURJTiBGSUZP MCBTUkMgU0VMJyAnSTJTJwoKU2lnbmVkLW9mZi1ieTogVmFsZXJpbyBTZXR0aSA8dnNldHRpQGJh eWxpYnJlLmNvbT4KLS0tCiBzb3VuZC9zb2MvbWVzb24vS2NvbmZpZyAgICAgICAgICAgICAgIHwg ICA5ICsKIHNvdW5kL3NvYy9tZXNvbi9NYWtlZmlsZSAgICAgICAgICAgICAgfCAgIDQgKwogc291 bmQvc29jL21lc29uL2F1ZGluLWZpZm8uYyAgICAgICAgICB8IDM5MiArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCiBzb3VuZC9zb2MvbWVzb24vYXVkaW4tZm9ybWF0dGVyLWkycy5j IHwgMTc0ICsrKysrKysrKysrKysrKwogc291bmQvc29jL21lc29uL2F1ZGluLmMgICAgICAgICAg ICAgICB8IDE4OCArKysrKysrKysrKysrKysrCiBzb3VuZC9zb2MvbWVzb24vYXVkaW4uaCAgICAg ICAgICAgICAgIHwgIDMwICsrKwogNiBmaWxlcyBjaGFuZ2VkLCA3OTcgaW5zZXJ0aW9ucygrKQoK ZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9tZXNvbi9LY29uZmlnIGIvc291bmQvc29jL21lc29uL0tj b25maWcKaW5kZXggNGM0MGJmNjBkYzRlLi45ZDg1ODliNWE4OGYgMTAwNjQ0Ci0tLSBhL3NvdW5k L3NvYy9tZXNvbi9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9tZXNvbi9LY29uZmlnCkBAIC0xNyw2 ICsxNywxNCBAQCBjb25maWcgU05EX01FU09OX0FJVQogCSAgU2VsZWN0IFkgb3IgTSB0byBhZGQg c3VwcG9ydCBmb3IgdGhlIEF1ZGlvIG91dHB1dCBzdWJzeXN0ZW0gZm91bmQKIAkgIGluIHRoZSBB bWxvZ2ljIE1lc29uOCwgTWVzb244YiBhbmQgR1ggU29DIGZhbWlsaWVzCiAKK2NvbmZpZyBTTkRf TUVTT05fQVVESU4KKwl0cmlzdGF0ZSAiQW1sb2dpYyBBVURJTiIKKwlzZWxlY3QgUkVHTUFQX01N SU8KKwlzZWxlY3QgU05EX01FU09OX0dYX0ZPUk1BVFRFUgorCWhlbHAKKwkgIFNlbGVjdCBZIG9y IE0gdG8gYWRkIHN1cHBvcnQgZm9yIHRoZSBhdWRpbyBpbnB1dCBzdWJzeXN0ZW0gZm91bmQKKwkg IGluIHRoZSBBbWxvZ2ljIEdYIFNvQyBmYW1pbHkuIEN1cnJlbnRseSBvbmx5IEkyUyBpbnB1dCBp cyBzdXBwb3J0ZWQuCisKIGNvbmZpZyBTTkRfTUVTT05fQVhHX0ZJRk8KIAl0cmlzdGF0ZQogCXNl bGVjdCBSRUdNQVBfTU1JTwpAQCAtMTEzLDYgKzEyMSw3IEBAIGNvbmZpZyBTTkRfTUVTT05fR1hf U09VTkRfQ0FSRAogCXRyaXN0YXRlICJBbWxvZ2ljIEdYIFNvdW5kIENhcmQgU3VwcG9ydCIKIAlz ZWxlY3QgU05EX01FU09OX0NBUkRfVVRJTFMKIAlpbXBseSBTTkRfTUVTT05fQUlVCisJaW1wbHkg U05EX01FU09OX0FVRElOCiAJaGVscAogCSAgU2VsZWN0IFkgb3IgTSB0byBhZGQgc3VwcG9ydCBm b3IgdGhlIEdYQkIvR1hMIFNvQyBzb3VuZCBjYXJkCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9t ZXNvbi9NYWtlZmlsZSBiL3NvdW5kL3NvYy9tZXNvbi9NYWtlZmlsZQppbmRleCAxYjFmYmU4YTA0 NTguLjRhZjc1ZGYwZDE5YiAxMDA2NDQKLS0tIGEvc291bmQvc29jL21lc29uL01ha2VmaWxlCisr KyBiL3NvdW5kL3NvYy9tZXNvbi9NYWtlZmlsZQpAQCAtMTAsNiArMTAsOSBAQCBzbmQtc29jLW1l c29uLWFpdS15ICs9IGFpdS1maWZvLm8KIHNuZC1zb2MtbWVzb24tYWl1LXkgKz0gYWl1LWZpZm8t aTJzLm8KIHNuZC1zb2MtbWVzb24tYWl1LXkgKz0gYWl1LWZpZm8tc3BkaWYubwogc25kLXNvYy1t ZXNvbi1neC1mb3JtYXR0ZXIteSA6PSBneC1mb3JtYXR0ZXIubworc25kLXNvYy1tZXNvbi1hdWRp bi15IDo9IGF1ZGluLm8KK3NuZC1zb2MtbWVzb24tYXVkaW4teSArPSBhdWRpbi1mb3JtYXR0ZXIt aTJzLm8KK3NuZC1zb2MtbWVzb24tYXVkaW4teSArPSBhdWRpbi1maWZvLm8KIHNuZC1zb2MtbWVz b24tYXhnLWZpZm8teSA6PSBheGctZmlmby5vCiBzbmQtc29jLW1lc29uLWF4Zy1mcmRkci15IDo9 IGF4Zy1mcmRkci5vCiBzbmQtc29jLW1lc29uLWF4Zy10b2Rkci15IDo9IGF4Zy10b2Rkci5vCkBA IC0zMCw2ICszMyw3IEBAIHNuZC1zb2MtbWVzb24tdDkwMTUteSA6PSB0OTAxNS5vCiAKIG9iai0k KENPTkZJR19TTkRfTUVTT05fQUlVKSArPSBzbmQtc29jLW1lc29uLWFpdS5vCiBvYmotJChDT05G SUdfU05EX01FU09OX0dYX0ZPUk1BVFRFUikgKz0gc25kLXNvYy1tZXNvbi1neC1mb3JtYXR0ZXIu bworb2JqLSQoQ09ORklHX1NORF9NRVNPTl9BVURJTikgKz0gc25kLXNvYy1tZXNvbi1hdWRpbi5v CiBvYmotJChDT05GSUdfU05EX01FU09OX0FYR19GSUZPKSArPSBzbmQtc29jLW1lc29uLWF4Zy1m aWZvLm8KIG9iai0kKENPTkZJR19TTkRfTUVTT05fQVhHX0ZSRERSKSArPSBzbmQtc29jLW1lc29u LWF4Zy1mcmRkci5vCiBvYmotJChDT05GSUdfU05EX01FU09OX0FYR19UT0REUikgKz0gc25kLXNv Yy1tZXNvbi1heGctdG9kZHIubwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL21lc29uL2F1ZGluLWZp Zm8uYyBiL3NvdW5kL3NvYy9tZXNvbi9hdWRpbi1maWZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAwLi41YjI1NGM5MGM3MTAKLS0tIC9kZXYvbnVsbAorKysgYi9zb3Vu ZC9zb2MvbWVzb24vYXVkaW4tZmlmby5jCkBAIC0wLDAgKzEsMzkyIEBACisvLyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAyNiBCYXlMaWJy ZSwgU0FTLgorLy8gQXV0aG9yOiBWYWxlcmlvIFNldHRpIDx2c2V0dGlAYmF5bGlicmUuY29tPgor CisjaW5jbHVkZSA8bGludXgvYml0ZmllbGQuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGlu Zy5oPgorI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9tYXRoNjQu aD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cisj aW5jbHVkZSA8bGludXgvd29yZHBhcnQuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+ CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhaS5oPgorCisj aW5jbHVkZSAiYXVkaW4uaCIKKworLyogRklGTyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQVVESU5f RklGT19TVEFSVAkweDAwCisjZGVmaW5lIEFVRElOX0ZJRk9fRU5ECQkweDA0CisjZGVmaW5lIEFV RElOX0ZJRk9fUFRSCQkweDA4CisKKy8qIEZJRk94X0NUUkwxIHJlZ2lzdGVycyBhbmQgYml0cyAq LworI2RlZmluZSBBVURJTl9GSUZPX0NUUkwxCQkJMHgxOAorI2RlZmluZSAgQVVESU5fRklGT19D VFJMMV9ESU5fQllURV9OVU1fTUFTSwlHRU5NQVNLKDMsIDIpCisjZGVmaW5lICBBVURJTl9GSUZP X0NUUkwxX0RJTl9QT1NfMDFfTUFTSwlHRU5NQVNLKDEsIDApCisKKy8qIFdoZW4gdGhlIEZJRk8g aXMgZnVsbCB0aGUgZGF0YSBpcyBidWxrIHRyYW5zZmVycmVkIHRvIG1lbW9yeS4gKi8KKyNkZWZp bmUgQVVESU5fRklGT19MQU5FX1NJWkUJCTggLyogYnl0ZXMgKi8KKyNkZWZpbmUgQVVESU5fRklG T19JMlNfQkxPQ0sJCShBVURJTl9GSUZPX0xBTkVfU0laRSAqIDMyKSAvKiAyNTYgYnl0ZXMgKi8K Kworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIGF1ZGluX2ZpZm9fcGNtX2h3 ID0geworCS5pbmZvID0gKFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkJIFNORFJWX1BD TV9JTkZPX01NQVAgfAorCQkgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8CisJCSBTTkRSVl9Q Q01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CisJCSBTTkRSVl9QQ01fSU5GT19QQVVTRSksCisJLmZv cm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwkucmF0ZV9taW4gPSA1NTEyLAorCS5y YXRlX21heCA9IDE5MjAwMCwKKwkuY2hhbm5lbHNfbWluID0gMiwKKwkuY2hhbm5lbHNfbWF4ID0g MiwKKwkvKgorCSAqIFRoZSBGSUZPIG9ubHkgbW92ZXMgZGF0YSB0byB0aGUgbWVtb3J5IG9uY2Ug aXQgaXMgZnVsbCwgc28gaXRzIHBvaW50ZXIKKwkgKiBwcm9ncmVzc2VzIG9uZSBibG9jayBhdCBh IHRpbWUuCisJICovCisJLnBlcmlvZF9ieXRlc19taW4gPSAyICogQVVESU5fRklGT19JMlNfQkxP Q0ssCisJLnBlcmlvZF9ieXRlc19tYXggPSBVSU5UX01BWCwgLyogQm91bmRlZCBieSBidWZmZXJf Ynl0ZXNfbWF4ICovCisJLnBlcmlvZHNfbWluID0gMiwKKwkucGVyaW9kc19tYXggPSBVSU5UX01B WCwKKwkvKgorCSAqIEl0J3MgMSBNQi4gVGhlcmUgaXMgbm8gcGh5c2ljYWwgY29uc3RyYWludCBm b3IgdGhpczsgaXQncyBvbmx5IG1lYW50IHRvCisJICogcHJvdmlkZSBzb21lIGRlY2VudGx5IGxh cmdlIGJ1ZmZlciBzaXplIHdoZXJlIHRvIHN0b3JlIGluY29taW5nIGRhdGEKKwkgKiBhbmQgZml0 IHZhcmlvdXMgcGVyaW9kX2J5dGVzIHJlcXVlc3RzLgorCSAqLworCS5idWZmZXJfYnl0ZXNfbWF4 ID0gNDA5NiAqIEFVRElOX0ZJRk9fSTJTX0JMT0NLLAorfTsKKworc3RydWN0IGF1ZGluX2ZpZm9f ZGFpX2RhdGEgeworCS8qCisJICogVGhlIEFVRElOIHBlcmlwaGVyYWwgaGFzIGFuIElSUSB0byBz aWduYWwgd2hlbiBkYXRhIGlzIHJlY2VpdmVkLCBidXQKKwkgKiBpdCBjYW5ub3QgZ3JhbnQgYSBw ZXJpb2RpYyBiZWhhdmlvci4gVGhlIHJlYXNvbiBpcyB0aGF0IHRoZSByZWdpc3RlcgorCSAqIHdo aWNoIGhvbGRzIHRoZSBhZGRyZXNzIHdoaWNoIHRyaWdnZXJzIHRoZSBJUlEgbXVzdCBiZSB1cGRh dGVkCisJICogY29udGludW91c2x5LiBUaGlzIGNyZWF0ZXMgYSByaXNrIG9mIG92ZXJmbG93IGlm IGZvciBhbnkgcmVhc29uIHRoZQorCSAqIElTUiBleGVjdXRpb24gaXMgZGVsYXllZC4gVXNpbmcg YSBwZXJpb2RpYyB0aW1lciBpcyB0aGVyZWZvcmUgc2ltcGxlcgorCSAqIGFuZCBtb3JlIHJlbGlh YmxlLgorCSAqLworCXN0cnVjdCBocnRpbWVyIHBvbGxpbmdfdGltZXI7CisJc3RydWN0IHNuZF9z b2NfZGFpICpkYWk7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CisJdW5z aWduZWQgaW50IHBlcmlvZF9ieXRlczsKKwl1bnNpZ25lZCBpbnQgYnl0ZV9yYXRlOworCXVuc2ln bmVkIGludCBsYXN0X3BvczsgLyogUG9zaXRpb24gaW5zaWRlIHRoZSBhbGxvY2F0ZWQgcmVhZCBi dWZmZXIuICovCisJYm9vbCBydW5uaW5nOworfTsKKworc3RhdGljIHVuc2lnbmVkIGludCBhdWRp bl9maWZvX3BvcyhzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwKKwkJCQkgICBzdHJ1Y3Qgc25kX3Bj bV9ydW50aW1lICpydW50aW1lKQoreworCXVuc2lnbmVkIGludCBwdHIgPSBsb3dlcl8zMl9iaXRz KHJ1bnRpbWUtPmRtYV9hZGRyKTsKKworCXJlZ21hcF9yZWFkKGRhaS0+Y29tcG9uZW50LT5yZWdt YXAsIGRhaS0+ZHJpdmVyLT5iYXNlICsgQVVESU5fRklGT19QVFIsICZwdHIpOworCisJcmV0dXJu IHB0ciAtIGxvd2VyXzMyX2JpdHMocnVudGltZS0+ZG1hX2FkZHIpOworfQorCitzdGF0aWMga3Rp bWVfdCBhdWRpbl9maWZvX2J5dGVzX3RvX25zKHN0cnVjdCBhdWRpbl9maWZvX2RhaV9kYXRhICpk YXRhLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBieXRlcykKK3sKKwlyZXR1cm4gZGl2X3U2NCgo dTY0KWJ5dGVzICogTlNFQ19QRVJfU0VDLCBkYXRhLT5ieXRlX3JhdGUpOworfQorCitzdGF0aWMg aW50IGF1ZGluX2ZpZm9fZGFpX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJz dHJlYW0sIGludCBjbWQsCisJCQkJICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1 Y3QgYXVkaW5fZmlmb19kYWlfZGF0YSAqZGF0YSA9IHNuZF9zb2NfZGFpX2RtYV9kYXRhX2dldF9j YXB0dXJlKGRhaSk7CisJc3RydWN0IHNuZF9zb2NfY29tcG9uZW50ICpjb21wb25lbnQgPSBkYWkt PmNvbXBvbmVudDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9T VEFSVDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKKwljYXNlIFNORFJWX1BDTV9U UklHR0VSX1BBVVNFX1JFTEVBU0U6CisJCXNuZF9zb2NfY29tcG9uZW50X3VwZGF0ZV9iaXRzKGNv bXBvbmVudCwgZGFpLT5kcml2ZXItPmJhc2UgKyBBVURJTl9GSUZPX0NUUkwsCisJCQkJCSAgICAg IEFVRElOX0ZJRk9fQ1RSTF9FTiwKKwkJCQkJICAgICAgQVVESU5fRklGT19DVFJMX0VOKTsKKwkJ V1JJVEVfT05DRShkYXRhLT5ydW5uaW5nLCB0cnVlKTsKKwkJaHJ0aW1lcl9zdGFydCgmZGF0YS0+ cG9sbGluZ190aW1lciwKKwkJCSAgICAgIGF1ZGluX2ZpZm9fYnl0ZXNfdG9fbnMoZGF0YSwgZGF0 YS0+cGVyaW9kX2J5dGVzKSwKKwkJCSAgICAgIEhSVElNRVJfTU9ERV9SRUxfU09GVCk7CisJCWJy ZWFrOworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKKwljYXNlIFNORFJWX1BDTV9U UklHR0VSX1BBVVNFX1BVU0g6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCQlXUklU RV9PTkNFKGRhdGEtPnJ1bm5pbmcsIGZhbHNlKTsKKwkJLyoKKwkJICogUENNIHN0cmVhbSBsb2Nr IGlzIGhlbGQgaGVyZSBzbyB3ZSBjYW5ub3QgY2FsbCBocnRpbWVyX2NhbmNlbCgpCisJCSAqIHdo aWNoIG1pZ2h0IGJsb2NrIGlmIHRpbWVyJ3MgY2FsbGJhY2sgaXMgcnVubmluZy4gVGltZXIgaXMK KwkJICogcHJvcGVybHkgc3RvcHBlZCBpbiBzeW5jX3N0b3AoKSBhbmQgc2h1dGRvd24oKSBjYWxs YmFja3MuCisJCSAqLworCQlocnRpbWVyX3RyeV90b19jYW5jZWwoJmRhdGEtPnBvbGxpbmdfdGlt ZXIpOworCQlzbmRfc29jX2NvbXBvbmVudF91cGRhdGVfYml0cyhjb21wb25lbnQsIGRhaS0+ZHJp dmVyLT5iYXNlICsgQVVESU5fRklGT19DVFJMLAorCQkJCQkgICAgICBBVURJTl9GSUZPX0NUUkxf RU4sIDApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdWRpbl9maWZvX2RhaV9wcmVwYXJlKHN0cnVjdCBz bmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgc3RydWN0IHNuZF9zb2NfZGFpICpk YWkpCit7CisJc3RydWN0IGF1ZGluX2ZpZm9fZGFpX2RhdGEgKmRhdGEgPSBzbmRfc29jX2RhaV9k bWFfZGF0YV9nZXRfY2FwdHVyZShkYWkpOworCXN0cnVjdCBzbmRfc29jX2NvbXBvbmVudCAqY29t cG9uZW50ID0gZGFpLT5jb21wb25lbnQ7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGlt ZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlkbWFfYWRkcl90IGRtYV9lbmQgPSBydW50aW1lLT5k bWFfYWRkciArIHJ1bnRpbWUtPmRtYV9ieXRlcyAtIEFVRElOX0ZJRk9fTEFORV9TSVpFOworCXVu c2lnbmVkIGludCB2YWw7CisKKwlkYXRhLT5sYXN0X3BvcyA9IDA7CisKKwkvKgorCSAqIFNldHVw IG1lbW9yeSBib3VuZGFyaWVzLgorCSAqIE5vdGU6IERNQSBoYXMgYSAzMi1iaXQgbWFzaywgc28g aXQncyBPSyB0byB0YWtlIGxvd2VyIDMyIGJpdHMuCisJICovCisJc25kX3NvY19jb21wb25lbnRf d3JpdGUoY29tcG9uZW50LCBkYWktPmRyaXZlci0+YmFzZSArIEFVRElOX0ZJRk9fU1RBUlQsCisJ CQkJbG93ZXJfMzJfYml0cyhydW50aW1lLT5kbWFfYWRkcikpOworCXNuZF9zb2NfY29tcG9uZW50 X3dyaXRlKGNvbXBvbmVudCwgZGFpLT5kcml2ZXItPmJhc2UgKyBBVURJTl9GSUZPX1BUUiwKKwkJ CQlsb3dlcl8zMl9iaXRzKHJ1bnRpbWUtPmRtYV9hZGRyKSk7CisJc25kX3NvY19jb21wb25lbnRf d3JpdGUoY29tcG9uZW50LCBkYWktPmRyaXZlci0+YmFzZSArIEFVRElOX0ZJRk9fRU5ELAorCQkJ CWxvd2VyXzMyX2JpdHMoZG1hX2VuZCkpOworCisJLyogTG9hZCBuZXcgYWRkcmVzc2VzIChib3Ro IExPQUQgYW5kIFVHIGFyZSBzZWxmLWNsZWFyaW5nKS4gKi8KKwl2YWwgPSBBVURJTl9GSUZPX0NU UkxfTE9BRCB8IEFVRElOX0ZJRk9fQ1RSTF9VRzsKKwlzbmRfc29jX2NvbXBvbmVudF91cGRhdGVf Yml0cyhjb21wb25lbnQsIGRhaS0+ZHJpdmVyLT5iYXNlICsgQVVESU5fRklGT19DVFJMLCB2YWws IHZhbCk7CisKKwkvKiBSZXNldCAoUlNUIGlzIHNlbGYtY2xlYXJpbmcpLiAqLworCXNuZF9zb2Nf Y29tcG9uZW50X3VwZGF0ZV9iaXRzKGNvbXBvbmVudCwgZGFpLT5kcml2ZXItPmJhc2UgKyBBVURJ Tl9GSUZPX0NUUkwsCisJCQkJICAgICAgQVVESU5fRklGT19DVFJMX1JTVCwKKwkJCQkgICAgICBB VURJTl9GSUZPX0NUUkxfUlNUKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF1ZGlu X2ZpZm9fZGFpX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwK KwkJCQkgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCQkJICAgIHN0cnVj dCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzbmRfc29jX2NvbXBvbmVudCAqY29tcG9u ZW50ID0gZGFpLT5jb21wb25lbnQ7CisJc3RydWN0IGF1ZGluX2ZpZm9fZGFpX2RhdGEgKmRhdGEg PSBzbmRfc29jX2RhaV9kbWFfZGF0YV9nZXRfY2FwdHVyZShkYWkpOworCXVuc2lnbmVkIGludCB2 YWw7CisKKwkvKgorCSAqIFRoZSBJMlMgaW5wdXQgZGVjb2RlciBwYXNzZXMgMjQgYml0cyBvZiBs ZWZ0LWp1c3RpZmllZCBkYXRhCisJICogYnV0IGZvciB0aGUgdGltZSBiZWluZyB3ZSBvbmx5IHN1 cHBvcnQgMTYgYml0IGZvcm1hdHRlZCBzYW1wbGVzCisJICogd2hpY2ggbWVhbnMgdGhhdCB3ZSBk cm9wIHRoZSBMU0IuCisJICovCisJdmFsID0gRklFTERfUFJFUChBVURJTl9GSUZPX0NUUkwxX0RJ Tl9QT1NfMDFfTUFTSywgMSk7CisJc25kX3NvY19jb21wb25lbnRfdXBkYXRlX2JpdHMoY29tcG9u ZW50LCBkYWktPmRyaXZlci0+YmFzZSArIEFVRElOX0ZJRk9fQ1RSTDEsCisJCQkJICAgICAgQVVE SU5fRklGT19DVFJMMV9ESU5fUE9TXzAxX01BU0ssCisJCQkJICAgICAgdmFsKTsKKworCS8qIFNl dCBzYW1wbGUgc2l6ZSB0byAyIGJ5dGVzICgxNiBiaXQpICovCisJdmFsID0gRklFTERfUFJFUChB VURJTl9GSUZPX0NUUkwxX0RJTl9CWVRFX05VTV9NQVNLLCAxKTsKKwlzbmRfc29jX2NvbXBvbmVu dF91cGRhdGVfYml0cyhjb21wb25lbnQsIGRhaS0+ZHJpdmVyLT5iYXNlICsgQVVESU5fRklGT19D VFJMMSwKKwkJCQkgICAgICBBVURJTl9GSUZPX0NUUkwxX0RJTl9CWVRFX05VTV9NQVNLLAorCQkJ CSAgICAgIHZhbCk7CisKKwkvKgorCSAqIFRoaXMgaXMgYSBiaXQgY291bnRlcmludHVpdGl2ZS4g RXZlbiB0aG91Z2ggdGhlIHBsYXRmb3JtIGhhcyBhIHNpbmdsZQorCSAqIHBpbiBmb3IgSTJTIGlu cHV0IHdoaWNoIHdvdWxkIG1lYW4gdGhhdCB3ZSBjYW4gb25seSBzdXBwb3J0IDIKKwkgKiBjaGFu bmVscywgZG9pbmcgc28gd291bGQgY2F1c2Ugc2FtcGxlcyB0byBiZSBzdG9yZWQgaW4gYSB3ZWly ZCB3YXkKKwkgKiBpbnRvIHRoZSBGSUZPOiBhbGwgdGhlIHNhbXBsZXMgZnJvbSB0aGUgMXN0IGNo YW5uZWwgb24gdGhlIDFzdCBoYWxmCisJICogb2YgdGhlIEZJRk8sIHRoZW4gc2FtcGxlcyBmcm9t IHRoZSAybmQgY2hhbm5lbCBpbiB0aGUgb3RoZXIgaGFsZi4gT2YKKwkgKiBjb3Vyc2UgZXh0cmEg d29yayB3b3VsZCBiZSByZXF1aXJlZCB0byBwcm9wZXJseSBpbnRlcmxlYXZlIHRoZW0KKwkgKiBi ZWZvcmUgcmV0dXJuaW5nIHRvIHRoZSB1c2Vyc3BhY2UuCisJICogU2V0dGluZyBhIHNpbmdsZSBj aGFubmVsIG1vZGUgaW5zdGVhZCBzb2x2ZXMgdGhlIHByb2JsZW06IHNhbXBsZXMKKwkgKiBmcm9t IDFzdCBhbmQgMm5kIGNoYW5uZWwgYXJlIHN0b3JlZCBpbnRlcmxlYXZlZCBhbmQgc2VxdWVudGlh bGx5IGluCisJICogdGhlIEZJRk8uCisJICovCisJdmFsID0gRklFTERfUFJFUChBVURJTl9GSUZP X0NUUkxfQ0hBTl9NQVNLLCAxKTsKKwlzbmRfc29jX2NvbXBvbmVudF91cGRhdGVfYml0cyhjb21w b25lbnQsIGRhaS0+ZHJpdmVyLT5iYXNlICsgQVVESU5fRklGT19DVFJMLAorCQkJCSAgICAgIEFV RElOX0ZJRk9fQ1RSTF9DSEFOX01BU0ssIHZhbCk7CisKKwkvKgorCSAqIEZJRk8gaXMgZmlsbGVk IGxpbmUgYnkgbGluZSBhbmQgZWFjaCBvZiB0aGVtIGlzIDggYnl0ZXMuIFRoZQorCSAqIHByb2Js ZW0gaXMgdGhhdCBlYWNoIGxpbmUgaXMgZmlsbGVkIHN0YXJ0aW5nIGZyb20gdGhlIGVuZCwKKwkg KiBzbyB3ZSBuZWVkIHRvIHByb3Blcmx5IHJlb3JkZXIgdGhlbSBiZWZvcmUgbW92aW5nIHRvIHRo ZQorCSAqIFJBTS4gVGhpcyBpcyB0aGUgdmFsdWUgcmVxdWlyZWQgdG8gcHJvcGVybHkgcmUtb3Jk ZXIgc2FtcGxlcyBzdG9yZWQKKwkgKiBpbiAxNiBiaXQgZm9ybWF0LgorCSAqLworCXZhbCA9IEZJ RUxEX1BSRVAoQVVESU5fRklGT19DVFJMX0VORElBTl9NQVNLLCA2KTsKKwlzbmRfc29jX2NvbXBv bmVudF91cGRhdGVfYml0cyhjb21wb25lbnQsIGRhaS0+ZHJpdmVyLT5iYXNlICsgQVVESU5fRklG T19DVFJMLAorCQkJCSAgICAgIEFVRElOX0ZJRk9fQ1RSTF9FTkRJQU5fTUFTSywgdmFsKTsKKwor CS8qIFVzZWQgYnkgdGhlIHBvbGxpbmcgdGltZXIgdG8gY29udmVydCBhIGJ5dGUgY291bnQgaW50 byBhIGRlbGF5LiAqLworCWRhdGEtPnBlcmlvZF9ieXRlcyA9IHBhcmFtc19wZXJpb2RfYnl0ZXMo cGFyYW1zKTsKKwlkYXRhLT5ieXRlX3JhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpICogcGFyYW1z X2NoYW5uZWxzKHBhcmFtcykgKgorCQkJICBwYXJhbXNfcGh5c2ljYWxfd2lkdGgocGFyYW1zKSAv IEJJVFNfUEVSX0JZVEU7CisKKwlkYXRhLT5zdWJzdHJlYW0gPSBzdWJzdHJlYW07CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGludCBhdWRpbl9maWZvX2RhaV9zdGFydHVwKHN0cnVjdCBzbmRf cGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkp Cit7CisJaW50IHJldDsKKworCXNuZF9zb2Nfc2V0X3J1bnRpbWVfaHdwYXJhbXMoc3Vic3RyZWFt LCAmYXVkaW5fZmlmb19wY21faHcpOworCisJcmV0ID0gc25kX3BjbV9od19jb25zdHJhaW50X3N0 ZXAoc3Vic3RyZWFtLT5ydW50aW1lLCAwLAorCQkJCQkgU05EUlZfUENNX0hXX1BBUkFNX0JVRkZF Ul9CWVRFUywKKwkJCQkJIEFVRElOX0ZJRk9fSTJTX0JMT0NLKTsKKwlpZiAocmV0IDwgMCkgewor CQlkZXZfZXJyKGRhaS0+ZGV2LCAiRmFpbGVkIHRvIHNldCBjb25zdHJhaW50IG9uIGJ1ZmZlcl9i eXRlcyAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBzbmRfcGNtX2h3 X2NvbnN0cmFpbnRfc3RlcChzdWJzdHJlYW0tPnJ1bnRpbWUsIDAsCisJCQkJCSBTTkRSVl9QQ01f SFdfUEFSQU1fUEVSSU9EX0JZVEVTLAorCQkJCQkgQVVESU5fRklGT19JMlNfQkxPQ0spOworCWlm IChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGFpLT5kZXYsICJGYWlsZWQgdG8gc2V0IGNvbnN0cmFp bnQgb24gcGVyaW9kX2J5dGVzICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJl dHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhdWRpbl9maWZvX2RhaV9zaHV0ZG93bihzdHJ1Y3Qg c25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgICAgc3RydWN0IHNuZF9zb2NfZGFp ICpkYWkpCit7CisJc3RydWN0IGF1ZGluX2ZpZm9fZGFpX2RhdGEgKmRhdGEgPSBzbmRfc29jX2Rh aV9kbWFfZGF0YV9nZXRfY2FwdHVyZShkYWkpOworCisJaHJ0aW1lcl9jYW5jZWwoJmRhdGEtPnBv bGxpbmdfdGltZXIpOworfQorCitzdGF0aWMgaW50IGF1ZGluX2ZpZm9fZGFpX3BjbV9uZXcoc3Ry dWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCwKKwkJCQkgIHN0cnVjdCBzbmRfc29jX2RhaSAq ZGFpKQoreworCWludCByZXQ7CisKKwlyZXQgPSBkbWFfY29lcmNlX21hc2tfYW5kX2NvaGVyZW50 KGRhaS0+ZGV2LCBETUFfQklUX01BU0soMzIpKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGFp LT5kZXYsICJGYWlsZWQgdG8gc2V0IERNQSBtYXNrICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0 OworCX0KKworCXJldCA9IHNuZF9wY21fc2V0X21hbmFnZWRfYnVmZmVyX2FsbChydGQtPnBjbSwg U05EUlZfRE1BX1RZUEVfREVWLAorCQkJCQkgICAgIGRhaS0+ZGV2LAorCQkJCQkgICAgIGF1ZGlu X2ZpZm9fcGNtX2h3LmJ1ZmZlcl9ieXRlc19tYXgsCisJCQkJCSAgICAgYXVkaW5fZmlmb19wY21f aHcuYnVmZmVyX2J5dGVzX21heCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRhaS0+ZGV2LCAi RmFpbGVkIHRvIHNldCBQQ00gbWFuYWdlZCBidWZmZXIgJWRcbiIsIHJldCk7CisJCXJldHVybiBy ZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBh dWRpbl9maWZvX3RpbWVyX2NiKHN0cnVjdCBocnRpbWVyICp0aW1lcikKK3sKKwlzdHJ1Y3QgYXVk aW5fZmlmb19kYWlfZGF0YSAqZGF0YSA9CisJCWNvbnRhaW5lcl9vZih0aW1lciwgc3RydWN0IGF1 ZGluX2ZpZm9fZGFpX2RhdGEsIHBvbGxpbmdfdGltZXIpOworCXN0cnVjdCBzbmRfcGNtX3N1YnN0 cmVhbSAqc3Vic3RyZWFtID0gZGF0YS0+c3Vic3RyZWFtOworCXN0cnVjdCBzbmRfcGNtX3J1bnRp bWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJdW5zaWduZWQgaW50IGN1cnJfcG9z OworCXVuc2lnbmVkIGludCBkZWx0YSwgZWxhcHNlZF9wZXJpb2RzX2J5dGVzLCBleHRyYV9ieXRl cywgc2xlZXBfYnl0ZXM7CisKKwkvKgorCSAqIFRha2UgdGhlIHN0cmVhbSBsb2NrIHRvIHByZXZl bnQgdXNlcnNwYWNlIGZyb20gaXNzdWluZyBhIHF1aWNrCisJICogUEFVU0VfUFVTSCAtPiBQQVVT RV9SRUxFQVNFIHRyYW5zaXRpb24gd2hpbGUgd2UncmUgcnVubmluZyB0aGlzCisJICogY2FsbGJh Y2suIERvaW5nIHNvIHdvdWxkIGNhdXNlICJocnRpbWVyX2ZvcndhcmRfbm93KCkiIHRvIGJlIGNh bGxlZAorCSAqIChzZWUgYmVsb3cpIHdoaWxlIHRoZSB0aW1lciBpcyBhbHJlYWR5IGVucXVldWVk LgorCSAqLworCWd1YXJkKHBjbV9zdHJlYW1fbG9ja19pcnFzYXZlKShzdWJzdHJlYW0pOworCisJ LyogU3RvcHBlZCwgb3IgYSB0cmlnZ2VyIGFscmVhZHkgcmUtYXJtZWQgdGhlIHRpbWVyIHdoaWxl IHdlIHdhaXRlZC4gKi8KKwlpZiAoIVJFQURfT05DRShkYXRhLT5ydW5uaW5nKSB8fCBocnRpbWVy X2lzX3F1ZXVlZCh0aW1lcikpCisJCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKKworCWN1cnJf cG9zID0gYXVkaW5fZmlmb19wb3MoZGF0YS0+ZGFpLCBydW50aW1lKTsKKwlkZWx0YSA9IChjdXJy X3BvcyA+PSBkYXRhLT5sYXN0X3BvcykgPworCQljdXJyX3BvcyAtIGRhdGEtPmxhc3RfcG9zIDoK KwkJKHJ1bnRpbWUtPmRtYV9ieXRlcyAtIGRhdGEtPmxhc3RfcG9zKSArIGN1cnJfcG9zOworCWV4 dHJhX2J5dGVzID0gZGVsdGEgJSBkYXRhLT5wZXJpb2RfYnl0ZXM7CisJZWxhcHNlZF9wZXJpb2Rz X2J5dGVzID0gZGVsdGEgLSBleHRyYV9ieXRlczsKKworCS8qIFJlcG9ydCBvbmx5IHdoZW4gdGhl IHBlcmlvZCBpcyBjb21wbGV0ZWQuICovCisJaWYgKGRlbHRhID49IGRhdGEtPnBlcmlvZF9ieXRl cykgeworCQlkYXRhLT5sYXN0X3BvcyA9IGRhdGEtPmxhc3RfcG9zICsgZWxhcHNlZF9wZXJpb2Rz X2J5dGVzOworCQlpZiAoZGF0YS0+bGFzdF9wb3MgPj0gcnVudGltZS0+ZG1hX2J5dGVzKQorCQkJ ZGF0YS0+bGFzdF9wb3MgJT0gcnVudGltZS0+ZG1hX2J5dGVzOworCQlzbmRfcGNtX3BlcmlvZF9l bGFwc2VkX3VuZGVyX3N0cmVhbV9sb2NrKHN1YnN0cmVhbSk7CisJfQorCisJLyogUmVwb3J0aW5n IHRoZSBwZXJpb2QgbWlnaHQgc3RvcCB0aGUgc3RyZWFtIG9uIFhSVU4uICovCisJaWYgKCFSRUFE X09OQ0UoZGF0YS0+cnVubmluZykpCisJCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKKworCS8q IFNsZWVwIHVudGlsIHRoZSBwZXJpb2QgaXMgY29tcGxldGVkLiAqLworCXNsZWVwX2J5dGVzID0g cm91bmRfdXAoZGF0YS0+cGVyaW9kX2J5dGVzIC0gZXh0cmFfYnl0ZXMsIEFVRElOX0ZJRk9fSTJT X0JMT0NLKTsKKwlocnRpbWVyX2ZvcndhcmRfbm93KHRpbWVyLCBhdWRpbl9maWZvX2J5dGVzX3Rv X25zKGRhdGEsIHNsZWVwX2J5dGVzKSk7CisKKwlyZXR1cm4gSFJUSU1FUl9SRVNUQVJUOworfQor CitzdGF0aWMgaW50IGF1ZGluX2ZpZm9fZGFpX3Byb2JlKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFp KQoreworCXN0cnVjdCBhdWRpbl9maWZvX2RhaV9kYXRhICpkYXRhOworCisJZGF0YSA9IGt6YWxs b2Nfb2JqKCpkYXRhKTsKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJZGF0YS0+ ZGFpID0gZGFpOworCisJaHJ0aW1lcl9zZXR1cCgmZGF0YS0+cG9sbGluZ190aW1lciwgYXVkaW5f Zmlmb190aW1lcl9jYiwgQ0xPQ0tfTU9OT1RPTklDLAorCQkgICAgICBIUlRJTUVSX01PREVfUkVM X1NPRlQpOworCisJc25kX3NvY19kYWlfZG1hX2RhdGFfc2V0X2NhcHR1cmUoZGFpLCBkYXRhKTsK KworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF1ZGluX2ZpZm9fZGFpX3JlbW92ZShzdHJ1 Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlrZnJlZShzbmRfc29jX2RhaV9kbWFfZGF0YV9nZXRf Y2FwdHVyZShkYWkpKTsKKworCXJldHVybiAwOworfQorCitjb25zdCBzdHJ1Y3Qgc25kX3NvY19k YWlfb3BzIGF1ZGluX2ZpZm9fZGFpX29wcyA9IHsKKwkudHJpZ2dlcgk9IGF1ZGluX2ZpZm9fZGFp X3RyaWdnZXIsCisJLnByZXBhcmUJPSBhdWRpbl9maWZvX2RhaV9wcmVwYXJlLAorCS5od19wYXJh bXMJPSBhdWRpbl9maWZvX2RhaV9od19wYXJhbXMsCisJLnN0YXJ0dXAJPSBhdWRpbl9maWZvX2Rh aV9zdGFydHVwLAorCS5zaHV0ZG93bgk9IGF1ZGluX2ZpZm9fZGFpX3NodXRkb3duLAorCS5wY21f bmV3CT0gYXVkaW5fZmlmb19kYWlfcGNtX25ldywKKwkucHJvYmUJCT0gYXVkaW5fZmlmb19kYWlf cHJvYmUsCisJLnJlbW92ZQkJPSBhdWRpbl9maWZvX2RhaV9yZW1vdmUsCit9OworCitzbmRfcGNt X3VmcmFtZXNfdCBhdWRpbl9maWZvX2NvbXBvbmVudF9wb2ludGVyKHN0cnVjdCBzbmRfc29jX2Nv bXBvbmVudCAqY29tcG9uZW50LAorCQkJCQkgICAgICAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFt ICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0 cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc25kX3Nv Y19zdWJzdHJlYW1fdG9fcnRkKHN1YnN0cmVhbSk7CisJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkg PSBzbmRfc29jX3J0ZF90b19jcHUocnRkLCAwKTsKKworCXJldHVybiBieXRlc190b19mcmFtZXMo cnVudGltZSwgYXVkaW5fZmlmb19wb3MoZGFpLCBydW50aW1lKSk7Cit9CisKKy8qCisgKiBzeW5j X3N0b3AoKSBpcyBjYWxsZWQgYmVmb3JlIGh3X3BhcmFtcygpLCBod19mcmVlKCksIHN1c3BlbmQo KSwgcHJlcGFyZSgpLgorICogQ2FuY2VsbGluZyB0aGUgaHJ0aW1lciBoZXJlIGVuc3VyZXMgdGhl IHRpbWVyIGlzIHJlYWxseSBzdG9wcGVkIGV2ZW4gaW4KKyAqIGNhc2UgdGhlIHN0cmVhbSBpcyBy dW4tPnN0b3AtPnByZXBhcmUtPnN0YXJ0LgorICovCitpbnQgYXVkaW5fZmlmb19zeW5jX3N0b3Ao c3RydWN0IHNuZF9zb2NfY29tcG9uZW50ICpjb21wb25lbnQsIHN0cnVjdCBzbmRfcGNtX3N1YnN0 cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBz bmRfc29jX3N1YnN0cmVhbV90b19ydGQoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkg KmRhaSA9IHNuZF9zb2NfcnRkX3RvX2NwdShydGQsIDApOworCXN0cnVjdCBhdWRpbl9maWZvX2Rh aV9kYXRhICpkYXRhID0gc25kX3NvY19kYWlfZG1hX2RhdGFfZ2V0X2NhcHR1cmUoZGFpKTsKKwor CWhydGltZXJfY2FuY2VsKCZkYXRhLT5wb2xsaW5nX3RpbWVyKTsKKwlXUklURV9PTkNFKGRhdGEt PnJ1bm5pbmcsIGZhbHNlKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc291bmQvc29j L21lc29uL2F1ZGluLWZvcm1hdHRlci1pMnMuYyBiL3NvdW5kL3NvYy9tZXNvbi9hdWRpbi1mb3Jt YXR0ZXItaTJzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44YmJi NWNkYjUyZGMKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvbWVzb24vYXVkaW4tZm9ybWF0 dGVyLWkycy5jCkBAIC0wLDAgKzEsMTc0IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAyNiBCYXlMaWJyZSwgU0FTLgorLy8gQXV0 aG9yOiBWYWxlcmlvIFNldHRpIDx2c2V0dGlAYmF5bGlicmUuY29tPgorCisjaW5jbHVkZSA8bGlu dXgvYml0ZmllbGQuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxzb3Vu ZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFpLmg+CisKKyNpbmNsdWRlICJhdWRpbi5o IgorI2luY2x1ZGUgImd4LWZvcm1hdHRlci5oIgorCisvKiBJMlNJTl9DVFJMIHJlZ2lzdGVyIGFu ZCBiaXRzICovCisjZGVmaW5lIEFVRElOX0kyU0lOX0NUUkwJCQkweDQwCisjZGVmaW5lICBBVURJ Tl9JMlNJTl9DVFJMX0kyU0lOX0RJUgkJQklUKDApCisjZGVmaW5lICBBVURJTl9JMlNJTl9DVFJM X0kyU0lOX0NMS19TRUwJCUJJVCgxKQorI2RlZmluZSAgQVVESU5fSTJTSU5fQ1RSTF9JMlNJTl9M UkNMS19TRUwJQklUKDIpCisjZGVmaW5lICBBVURJTl9JMlNJTl9DVFJMX0kyU0lOX0JDTEtfSU5W CUJJVCgzKQorI2RlZmluZSAgQVVESU5fSTJTSU5fQ1RSTF9JMlNJTl9MUkNMS19TS0VXX01BU0sJ R0VOTUFTSyg2LCA0KQorI2RlZmluZSAgQVVESU5fSTJTSU5fQ1RSTF9JMlNJTl9MUkNMS19JTlYJ QklUKDcpCisjZGVmaW5lICBBVURJTl9JMlNJTl9DVFJMX0kyU0lOX1NJWkVfTUFTSwlHRU5NQVNL KDksIDgpCisjZGVmaW5lICBBVURJTl9JMlNJTl9DVFJMX0kyU0lOX0NIQU5fRU5fTUFTSwlHRU5N QVNLKDEzLCAxMCkKKyNkZWZpbmUgIEFVRElOX0kyU0lOX0NUUkxfSTJTSU5fRU4JCUJJVCgxNSkK Kworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaSAqCithdWRpbl9mb3JtYXR0ZXJfaTJzX2dldF9i ZShzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kYXBt X3BhdGggKnA7CisJc3RydWN0IHNuZF9zb2NfZGFpICpiZTsKKworCXNuZF9zb2NfZGFwbV93aWRn ZXRfZm9yX2VhY2hfc291cmNlX3BhdGgodywgcCkgeworCQlpZiAoIXAtPmNvbm5lY3QpCisJCQlj b250aW51ZTsKKworCQlpZiAocC0+c291cmNlLT5pZCA9PSBzbmRfc29jX2RhcG1fZGFpX291dCkK KwkJCXJldHVybiAoc3RydWN0IHNuZF9zb2NfZGFpICopcC0+c291cmNlLT5wcml2OworCisJCWJl ID0gYXVkaW5fZm9ybWF0dGVyX2kyc19nZXRfYmUocC0+c291cmNlKTsKKwkJaWYgKGJlKQorCQkJ cmV0dXJuIGJlOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGd4X3N0 cmVhbSAqCithdWRpbl9mb3JtYXR0ZXJfaTJzX2dldF9zdHJlYW0oc3RydWN0IHNuZF9zb2NfZGFw bV93aWRnZXQgKncpCit7CisJc3RydWN0IHNuZF9zb2NfZGFpICpiZSA9IGF1ZGluX2Zvcm1hdHRl cl9pMnNfZ2V0X2JlKHcpOworCisJaWYgKCFiZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4g c25kX3NvY19kYWlfZG1hX2RhdGFfZ2V0X2NhcHR1cmUoYmUpOworfQorCitzdGF0aWMgdm9pZCBh dWRpbl9mb3JtYXR0ZXJfaTJzX2VuYWJsZShzdHJ1Y3QgcmVnbWFwICptYXApCit7CisJcmVnbWFw X3VwZGF0ZV9iaXRzKG1hcCwgQVVESU5fSTJTSU5fQ1RSTCwKKwkJCSAgIEFVRElOX0kyU0lOX0NU UkxfSTJTSU5fRU4sCisJCQkgICBBVURJTl9JMlNJTl9DVFJMX0kyU0lOX0VOKTsKK30KKworc3Rh dGljIHZvaWQgYXVkaW5fZm9ybWF0dGVyX2kyc19kaXNhYmxlKHN0cnVjdCByZWdtYXAgKm1hcCkK K3sKKwlyZWdtYXBfdXBkYXRlX2JpdHMobWFwLCBBVURJTl9JMlNJTl9DVFJMLAorCQkJICAgQVVE SU5fSTJTSU5fQ1RSTF9JMlNJTl9FTiwgMCk7Cit9CisKK3N0YXRpYyBpbnQgYXVkaW5fZm9ybWF0 dGVyX2kyc19wcmVwYXJlKHN0cnVjdCByZWdtYXAgKm1hcCwKKwkJCQkgICAgICAgY29uc3Qgc3Ry dWN0IGd4X2Zvcm1hdHRlcl9odyAqcXVpcmtzLAorCQkJCSAgICAgICBzdHJ1Y3QgZ3hfc3RyZWFt ICp0cykKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCWludCByZXQ7CisKKwkvKgorCSAqIEkyUyBk ZWNvZGVyIGFsd2F5cyBvdXRwdXRzIDI0IGJpdHMgdG8gdGhlIEZJRk8gYWNjb3JkaW5nIHRvIHRo ZQorCSAqIG1hbnVhbC4gVGhlIG9ubHkgdGhpbmcgd2UgY2FuIGNoYW5nZSB0aHJvdWdoCisJICog QVVESU5fSTJTSU5fQ1RSTF9JMlNJTl9TSVpFX01BU0sgaXMgdGhlIGZvbGxvd2luZzoKKwkgKiAt IDAgLT4gb3V0cHV0WzIzOjBdID0ge29yaWdpbmFsWzIzOjhdLDjigJlkMH0KKwkgKiAtIDEgLT4g b3V0cHV0WzIzOjBdID0ge29yaWdpbmFsWzIzOjZdLDbigJlkMH0KKwkgKiAtIDIgLT4gb3V0cHV0 WzIzOjBdID0ge29yaWdpbmFsWzIzOjRdLDTigJlkMH0KKwkgKiAtIDMgLT4gb3V0cHV0WzIzOjBd ID0ge29yaWdpbmFsWzIzOjBdfQorCSAqCisJICogV2UgdXNlIDMgaGVyZSBhbmQsIGluIGNhc2Ug b2YgMTYgYml0IGZvcm1hdCwgd2UgZmlsdGVyIHVubmVjZXNzYXJ5CisJICogYnl0ZXMgYXQgRklG TyBzdGFnZS4KKwkgKiBOb3RlOiBkYXRhIGlzIGxlZnQtanVzdGlmaWVkLCBzbyBpbiBjYXNlIG9m IDE2IGJpdHMgc2FtcGxlcywgdGhpcworCSAqICAgICAgIG1lYW5zIHRoYXQgdGhlIExTQiBpcyB0 byBiZSBkaXNjYXJkZWQgYXQgRklGTyBsZXZlbCBhbmQgdGhlCisJICogICAgICAgcmVsZXZhbnQg cGFydCBpcyBpbiBiaXRzIFsyMzo4XS4KKwkgKi8KKwl2YWwgPSBGSUVMRF9QUkVQKEFVRElOX0ky U0lOX0NUUkxfSTJTSU5fU0laRV9NQVNLLCAzKTsKKwlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMo bWFwLCBBVURJTl9JMlNJTl9DVFJMLAorCQkJCSBBVURJTl9JMlNJTl9DVFJMX0kyU0lOX1NJWkVf TUFTSywgdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyoKKwkgKiBUaGUgbWFu dWFsIGNsYWltcyB0aGF0IHRoaXMgcGxhdGZvcm0gc3VwcG9ydHMgdXAgdG8gNCBzdHJlYW1zCisJ ICogKDggY2hhbm5lbHMpLCBidXQgY3VycmVudGx5IG9ubHkgMSBzdHJlYW0gKDIgY2hhbm5lbHMp IGhhcyBiZWVuCisJICogdGVzdGVkIGFuZCBpdCdzIHN1cHBvcnRlZC4KKwkgKi8KKwl2YWwgPSBG SUVMRF9QUkVQKEFVRElOX0kyU0lOX0NUUkxfSTJTSU5fQ0hBTl9FTl9NQVNLLCAxKTsKKwlyZXQg PSByZWdtYXBfdXBkYXRlX2JpdHMobWFwLCBBVURJTl9JMlNJTl9DVFJMLAorCQkJCSBBVURJTl9J MlNJTl9DVFJMX0kyU0lOX0NIQU5fRU5fTUFTSywgdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4g cmV0OworCisJLyoKKwkgKiBVc2UgY2xvY2tzIGZyb20gQUlVIGFuZCBub3QgZnJvbSB0aGUgcGFk cyBzaW5jZSB3ZSBvbmx5IHdhbnQgdG8KKwkgKiBzdXBwb3J0IG1hc3RlciBtb2RlLgorCSAqLwor CXZhbCA9IEFVRElOX0kyU0lOX0NUUkxfSTJTSU5fQ0xLX1NFTCB8CisJICAgICAgQVVESU5fSTJT SU5fQ1RSTF9JMlNJTl9MUkNMS19TRUwgfAorCSAgICAgIEFVRElOX0kyU0lOX0NUUkxfSTJTSU5f RElSOworCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhtYXAsIEFVRElOX0kyU0lOX0NUUkwsIHZh bCwgdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJc3dpdGNoICh0cy0+aWZhY2Ut PmZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9J Ql9ORjoKKwkJdmFsID0gQVVESU5fSTJTSU5fQ1RSTF9JMlNJTl9CQ0xLX0lOVjsKKwkJYnJlYWs7 CisJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9JRjoKKwkJdmFsID0gQVVESU5fSTJTSU5fQ1RSTF9J MlNJTl9MUkNMS19JTlY7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfSUY6CisJ CXZhbCA9IEFVRElOX0kyU0lOX0NUUkxfSTJTSU5fQkNMS19JTlYgfCBBVURJTl9JMlNJTl9DVFJM X0kyU0lOX0xSQ0xLX0lOVjsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9ORjoK KwkJdmFsID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor CisJcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKG1hcCwgQVVESU5fSTJTSU5fQ1RSTCwKKwkJCQkg QVVESU5fSTJTSU5fQ1RSTF9JMlNJTl9MUkNMS19JTlYgfAorCQkJCSBBVURJTl9JMlNJTl9DVFJM X0kyU0lOX0JDTEtfSU5WLCB2YWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlzd2l0 Y2ggKHRzLT5pZmFjZS0+Zm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKKwljYXNl IFNORF9TT0NfREFJRk1UX0kyUzoKKwkJdmFsID0gMTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09D X0RBSUZNVF9MRUZUX0o6CisJCXZhbCA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVy biAtRUlOVkFMOworCX0KKworCXZhbCA9IEZJRUxEX1BSRVAoQVVESU5fSTJTSU5fQ1RSTF9JMlNJ Tl9MUkNMS19TS0VXX01BU0ssIHZhbCk7CisJcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKG1hcCwg QVVESU5fSTJTSU5fQ1RSTCwKKwkJCQkgQVVESU5fSTJTSU5fQ1RSTF9JMlNJTl9MUkNMS19TS0VX X01BU0ssCisJCQkJIHZhbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAw OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGd4X2Zvcm1hdHRlcl9vcHMgYXVkaW5fZm9ybWF0 dGVyX2kyc19vcHMgPSB7CisJLmdldF9zdHJlYW0JPSBhdWRpbl9mb3JtYXR0ZXJfaTJzX2dldF9z dHJlYW0sCisJLnByZXBhcmUJPSBhdWRpbl9mb3JtYXR0ZXJfaTJzX3ByZXBhcmUsCisJLmVuYWJs ZQkJPSBhdWRpbl9mb3JtYXR0ZXJfaTJzX2VuYWJsZSwKKwkuZGlzYWJsZQk9IGF1ZGluX2Zvcm1h dHRlcl9pMnNfZGlzYWJsZSwKK307CisKK2NvbnN0IHN0cnVjdCBneF9mb3JtYXR0ZXJfZHJpdmVy IGF1ZGluX2Zvcm1hdHRlcl9pMnNfZHJ2ID0geworCS5vcHMJCT0gJmF1ZGluX2Zvcm1hdHRlcl9p MnNfb3BzLAorfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9tZXNvbi9hdWRpbi5jIGIvc291bmQv c29jL21lc29uL2F1ZGluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw Li44MDhlN2Q0ZmQzMWEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9zb2MvbWVzb24vYXVkaW4u YwpAQCAtMCwwICsxLDE4OCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAK Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMjYgQmF5TGlicmUsIFNBUy4KKy8vIEF1dGhvcjogVmFs ZXJpbyBTZXR0aSA8dnNldHRpQGJheWxpYnJlLmNvbT4KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5o PgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2Rl dmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc2V0 Lmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisKKyNpbmNsdWRlICJhdWRpbi5oIgorI2luY2x1 ZGUgImd4LWZvcm1hdHRlci5oIgorCisjZGVmaW5lIEFVRElOX0ZJRk8wX0JBU0UJMHg4MAorI2Rl ZmluZSBBVURJTl9GSUZPMV9CQVNFCTB4Q0MKKyNkZWZpbmUgQVVESU5fRklGTzJfQkFTRQkweDEx NAorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGF1ZGluX2ZpZm9faW5wdXRfc2VsX3RleHRz W10gPSB7CisJIlNQRElGIiwgIkkyUyIsICJQQ00iLCAiSERNSSIsICJEZW1vZHVsYXRvciIKK307 CisKK3N0YXRpYyBTT0NfRU5VTV9TSU5HTEVfREVDTChhdWRpbl9maWZvMF9pbnB1dF9zZWxfZW51 bSwgQVVESU5fRklGTzBfQkFTRSArIEFVRElOX0ZJRk9fQ1RSTCwKKwkJCSAgICBBVURJTl9GSUZP X0NUUkxfRElOX1NFTF9PRkYsCisJCQkgICAgYXVkaW5fZmlmb19pbnB1dF9zZWxfdGV4dHMpOwor c3RhdGljIFNPQ19FTlVNX1NJTkdMRV9ERUNMKGF1ZGluX2ZpZm8xX2lucHV0X3NlbF9lbnVtLCBB VURJTl9GSUZPMV9CQVNFICsgQVVESU5fRklGT19DVFJMLAorCQkJICAgIEFVRElOX0ZJRk9fQ1RS TF9ESU5fU0VMX09GRiwKKwkJCSAgICBhdWRpbl9maWZvX2lucHV0X3NlbF90ZXh0cyk7CitzdGF0 aWMgU09DX0VOVU1fU0lOR0xFX0RFQ0woYXVkaW5fZmlmbzJfaW5wdXRfc2VsX2VudW0sIEFVRElO X0ZJRk8yX0JBU0UgKyBBVURJTl9GSUZPX0NUUkwsCisJCQkgICAgQVVESU5fRklGT19DVFJMX0RJ Tl9TRUxfT0ZGLAorCQkJICAgIGF1ZGluX2ZpZm9faW5wdXRfc2VsX3RleHRzKTsKKworc3RhdGlj IGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGF1ZGluX2ZpZm8wX2lucHV0X3NlbF9tdXgg PQorCVNPQ19EQVBNX0VOVU0oIkZJRk8wIElucHV0IFNvdXJjZSIsIGF1ZGluX2ZpZm8wX2lucHV0 X3NlbF9lbnVtKTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhdWRpbl9m aWZvMV9pbnB1dF9zZWxfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJGSUZPMSBJbnB1dCBTb3VyY2Ui LCBhdWRpbl9maWZvMV9pbnB1dF9zZWxfZW51bSk7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9r Y29udHJvbF9uZXcgYXVkaW5fZmlmbzJfaW5wdXRfc2VsX211eCA9CisJU09DX0RBUE1fRU5VTSgi RklGTzIgSW5wdXQgU291cmNlIiwgYXVkaW5fZmlmbzJfaW5wdXRfc2VsX2VudW0pOworCisjZGVm aW5lIEFVRElOX1dJREdFVF9JMlNfRk9STUFUVEVSCTAKKworc3RhdGljIHN0cnVjdCBzbmRfc29j X2RhcG1fd2lkZ2V0IGF1ZGluX2RhcG1fd2lkZ2V0c1tdID0geworCVtBVURJTl9XSURHRVRfSTJT X0ZPUk1BVFRFUl0gPQorCQlTTkRfU09DX0RBUE1fUEdBX0UoIkkyUyBGb3JtYXR0ZXIiLCBTTkRf U09DX05PUE0sIDAsIDAsIE5VTEwsIDAsCisJCQkJICAgZ3hfZm9ybWF0dGVyX2V2ZW50LAorCQkJ CSAgIChTTkRfU09DX0RBUE1fUFJFX1BNVSB8IFNORF9TT0NfREFQTV9QUkVfUE1EKSksCisJU05E X1NPQ19EQVBNX01VWCgiRklGTzAgU1JDIFNFTCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCSAm YXVkaW5fZmlmbzBfaW5wdXRfc2VsX211eCksCisJU05EX1NPQ19EQVBNX01VWCgiRklGTzEgU1JD IFNFTCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCSAmYXVkaW5fZmlmbzFfaW5wdXRfc2VsX211 eCksCisJU05EX1NPQ19EQVBNX01VWCgiRklGTzIgU1JDIFNFTCIsIFNORF9TT0NfTk9QTSwgMCwg MCwKKwkJCSAmYXVkaW5fZmlmbzJfaW5wdXRfc2VsX211eCksCit9OworCitzdGF0aWMgY29uc3Qg c3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBhdWRpbl9kYXBtX3JvdXRlc1tdID0geworCXsgIkZJ Rk8wIFNSQyBTRUwiLCAiSTJTIiwgIkkyUyBGb3JtYXR0ZXIiIH0sCisJeyAiRklGTzAgQ2FwdHVy ZSIsIE5VTEwsICJGSUZPMCBTUkMgU0VMIiB9LAorCXsgIkZJRk8xIFNSQyBTRUwiLCAiSTJTIiwg IkkyUyBGb3JtYXR0ZXIiIH0sCisJeyAiRklGTzEgQ2FwdHVyZSIsIE5VTEwsICJGSUZPMSBTUkMg U0VMIiB9LAorCXsgIkZJRk8yIFNSQyBTRUwiLCAiSTJTIiwgIkkyUyBGb3JtYXR0ZXIiIH0sCisJ eyAiRklGTzIgQ2FwdHVyZSIsIE5VTEwsICJGSUZPMiBTUkMgU0VMIiB9LAorfTsKKworc3RhdGlj IHN0cnVjdCBzbmRfc29jX2RhaV9kcml2ZXIgYXVkaW5fZGFpX2RydltdID0geworCXsKKwkJLm5h bWUgPSAiRklGTzAiLAorCQkuYmFzZSA9IEFVRElOX0ZJRk8wX0JBU0UsCisJCS5jYXB0dXJlID0g eworCQkJLnN0cmVhbV9uYW1lCT0gIkZJRk8wIENhcHR1cmUiLAorCQkJLmNoYW5uZWxzX21pbgk9 IDIsCisJCQkuY2hhbm5lbHNfbWF4CT0gMiwKKwkJCS5yYXRlcwkJPSBTTkRSVl9QQ01fUkFURV9D T05USU5VT1VTLAorCQkJLnJhdGVfbWluCT0gNTUxMiwKKwkJCS5yYXRlX21heAk9IDE5MjAwMCwK KwkJCS5mb3JtYXRzCT0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJCX0sCisJCS5vcHMgPSAm YXVkaW5fZmlmb19kYWlfb3BzLAorCX0sCisJeworCQkubmFtZSA9ICJGSUZPMSIsCisJCS5iYXNl ID0gQVVESU5fRklGTzFfQkFTRSwKKwkJLmNhcHR1cmUgPSB7CisJCQkuc3RyZWFtX25hbWUJPSAi RklGTzEgQ2FwdHVyZSIsCisJCQkuY2hhbm5lbHNfbWluCT0gMiwKKwkJCS5jaGFubmVsc19tYXgJ PSAyLAorCQkJLnJhdGVzCQk9IFNORFJWX1BDTV9SQVRFX0NPTlRJTlVPVVMsCisJCQkucmF0ZV9t aW4JPSA1NTEyLAorCQkJLnJhdGVfbWF4CT0gMTkyMDAwLAorCQkJLmZvcm1hdHMJPSBTTkRSVl9Q Q01fRk1UQklUX1MxNl9MRSwKKwkJfSwKKwkJLm9wcyA9ICZhdWRpbl9maWZvX2RhaV9vcHMsCisJ fSwKKwl7CisJCS5uYW1lID0gIkZJRk8yIiwKKwkJLmJhc2UgPSBBVURJTl9GSUZPMl9CQVNFLAor CQkuY2FwdHVyZSA9IHsKKwkJCS5zdHJlYW1fbmFtZQk9ICJGSUZPMiBDYXB0dXJlIiwKKwkJCS5j aGFubmVsc19taW4JPSAyLAorCQkJLmNoYW5uZWxzX21heAk9IDIsCisJCQkucmF0ZXMJCT0gU05E UlZfUENNX1JBVEVfQ09OVElOVU9VUywKKwkJCS5yYXRlX21pbgk9IDU1MTIsCisJCQkucmF0ZV9t YXgJPSAxOTIwMDAsCisJCQkuZm9ybWF0cwk9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCQl9 LAorCQkub3BzID0gJmF1ZGluX2ZpZm9fZGFpX29wcywKKwl9LAorfTsKKworc3RhdGljIGNvbnN0 IHN0cnVjdCBzbmRfc29jX2NvbXBvbmVudF9kcml2ZXIgYXVkaW5fY29tcG9uZW50ID0geworCS5k YXBtX3dpZGdldHMgPSBhdWRpbl9kYXBtX3dpZGdldHMsCisJLm51bV9kYXBtX3dpZGdldHMgPSBB UlJBWV9TSVpFKGF1ZGluX2RhcG1fd2lkZ2V0cyksCisJLmRhcG1fcm91dGVzID0gYXVkaW5fZGFw bV9yb3V0ZXMsCisJLm51bV9kYXBtX3JvdXRlcyA9IEFSUkFZX1NJWkUoYXVkaW5fZGFwbV9yb3V0 ZXMpLAorCS5wb2ludGVyID0gYXVkaW5fZmlmb19jb21wb25lbnRfcG9pbnRlciwKKwkuc3luY19z dG9wID0gYXVkaW5fZmlmb19zeW5jX3N0b3AsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJl Z21hcF9jb25maWcgYXVkaW5fcmVnbWFwX2NmZyA9IHsKKwkucmVnX2JpdHMJPSAzMiwKKwkudmFs X2JpdHMJPSAzMiwKKwkucmVnX3N0cmlkZQk9IDQsCisJLm1heF9yZWdpc3Rlcgk9IDB4MTQ4LAor fTsKKworc3RhdGljIGludCBhdWRpbl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJdm9pZCBfX2lvbWVtICpt bWlvOworCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJaW50IHJl dDsKKworCXJldCA9IGRldmljZV9yZXNldChkZXYpOworCWlmIChyZXQpCisJCXJldHVybiBkZXZf ZXJyX3Byb2JlKGRldiwgcmV0LCAiRmFpbGVkIHRvIHJlc2V0IGRldmljZVxuIik7CisKKwltbWlv ID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDApOworCWlmIChJU19FUlIo bW1pbykpCisJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihtbWlvKSwgIkZhaWxl ZCB0byBpb3JlbWFwIG1lbW9yeVxuIik7CisKKwlyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X21t aW8oZGV2LCBtbWlvLCAmYXVkaW5fcmVnbWFwX2NmZyk7CisJaWYgKElTX0VSUihyZWdtYXApKQor CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocmVnbWFwKSwgIkZhaWxlZCB0byBp bml0IHJlZ21hcFxuIik7CisKKwljbGsgPSBkZXZtX2Nsa19nZXRfZW5hYmxlZChkZXYsIE5VTEwp OworCWlmIChJU19FUlIoY2xrKSkKKwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJS KGNsayksICJGYWlsZWQgdG8gZ2V0IGNsb2NrXG4iKTsKKworCXJldCA9IGd4X2Zvcm1hdHRlcl9j cmVhdGUoZGV2LCAmYXVkaW5fZGFwbV93aWRnZXRzW0FVRElOX1dJREdFVF9JMlNfRk9STUFUVEVS XSwKKwkJCQkgICZhdWRpbl9mb3JtYXR0ZXJfaTJzX2RydiwgcmVnbWFwKTsKKwlpZiAocmV0KQor CQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgIkZhaWxlZCB0byBhbGxvY2F0ZSBmb3Jt YXR0ZXJcbiIpOworCisJcmV0ID0gZGV2bV9zbmRfc29jX3JlZ2lzdGVyX2NvbXBvbmVudChkZXYs ICZhdWRpbl9jb21wb25lbnQsCisJCQkJCSAgICAgIGF1ZGluX2RhaV9kcnYsIEFSUkFZX1NJWkUo YXVkaW5fZGFpX2RydikpOworCWlmIChyZXQpIHsKKwkJZ3hfZm9ybWF0dGVyX2ZyZWUoJmF1ZGlu X2RhcG1fd2lkZ2V0c1tBVURJTl9XSURHRVRfSTJTX0ZPUk1BVFRFUl0pOworCQlyZXR1cm4gZGV2 X2Vycl9wcm9iZShkZXYsIHJldCwgIkZhaWxlZCB0byByZWdpc3RlciBjb21wb25lbnRcbiIpOwor CX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhdWRpbl9yZW1vdmUoc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlneF9mb3JtYXR0ZXJfZnJlZSgmYXVkaW5fZGFwbV93 aWRnZXRzW0FVRElOX1dJREdFVF9JMlNfRk9STUFUVEVSXSk7Cit9CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3Qgb2ZfZGV2aWNlX2lkIGF1ZGluX29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9 ICJhbWxvZ2ljLGd4YmItYXVkaW4iIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShv ZiwgYXVkaW5fb2ZfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdWRp bl9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiZ3gtYXVkaW4iLAorCQkub2Zf bWF0Y2hfdGFibGUgPSBhdWRpbl9vZl9tYXRjaCwKKwl9LAorCS5wcm9iZSA9IGF1ZGluX3Byb2Jl LAorCS5yZW1vdmUgPSBhdWRpbl9yZW1vdmUsCit9OworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihh dWRpbl9kcml2ZXIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIk1lc29uIEdYIEFVRElOIGRyaXZl ciIpOworTU9EVUxFX0FVVEhPUigiVmFsZXJpbyBTZXR0aSA8dnNldHRpQGJheWxpYnJlLmNvbT4i KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9tZXNvbi9h dWRpbi5oIGIvc291bmQvc29jL21lc29uL2F1ZGluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwLi43ZjNiNThhNzgwYzAKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9z b2MvbWVzb24vYXVkaW4uaApAQCAtMCwwICsxLDMwIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogKEdQTC0yLjAgT1IgTUlUKSAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMjAyNiBCYXlM aWJyZSwgU0FTLgorICogQXV0aG9yOiBWYWxlcmlvIFNldHRpIDx2c2V0dGlAYmF5bGlicmUuY29t PgorICovCisKKyNpZm5kZWYgX01FU09OX0FVRElOX0gKKyNkZWZpbmUgX01FU09OX0FVRElOX0gK KworI2luY2x1ZGUgImd4LWZvcm1hdHRlci5oIgorCisvKiBGSUZPeCBDVFJMIHJlZ2lzdGVycyBh bmQgYml0cyAqLworI2RlZmluZSBBVURJTl9GSUZPX0NUUkwJCQkweDE0CisjZGVmaW5lICBBVURJ Tl9GSUZPX0NUUkxfRU4JCUJJVCgwKQorI2RlZmluZSAgQVVESU5fRklGT19DVFJMX1JTVAkJQklU KDEpCisjZGVmaW5lICBBVURJTl9GSUZPX0NUUkxfTE9BRAkJQklUKDIpCisjZGVmaW5lICBBVURJ Tl9GSUZPX0NUUkxfRElOX1NFTF9PRkYJMworI2RlZmluZSAgQVVESU5fRklGT19DVFJMX0VORElB Tl9NQVNLCUdFTk1BU0soMTAsIDgpCisjZGVmaW5lICBBVURJTl9GSUZPX0NUUkxfQ0hBTl9NQVNL CUdFTk1BU0soMTQsIDExKQorI2RlZmluZSAgQVVESU5fRklGT19DVFJMX1VHCQlCSVQoMTUpCisK K2V4dGVybiBjb25zdCBzdHJ1Y3QgZ3hfZm9ybWF0dGVyX2RyaXZlciBhdWRpbl9mb3JtYXR0ZXJf aTJzX2RydjsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgYXVkaW5fZmlm b19kYWlfb3BzOworZXh0ZXJuIHNuZF9wY21fdWZyYW1lc190IGF1ZGluX2ZpZm9fY29tcG9uZW50 X3BvaW50ZXIoc3RydWN0IHNuZF9zb2NfY29tcG9uZW50ICpjb21wb25lbnQsCisJCQkJCQkgICAg ICBzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7CitleHRlcm4gaW50IGF1ZGlu X2ZpZm9fc3luY19zdG9wKHN0cnVjdCBzbmRfc29jX2NvbXBvbmVudCAqY29tcG9uZW50LAorCQkJ CXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKTsKKworI2VuZGlmCgotLSAKMi40 Ny4zCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGlu dXgtYW1sb2dpYyBtYWlsaW5nIGxpc3QKbGludXgtYW1sb2dpY0BsaXN0cy5pbmZyYWRlYWQub3Jn Cmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYW1sb2dp Ywo=