From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 458EDECE58E for ; Mon, 14 Oct 2019 14:56:08 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 0467E217D9 for ; Mon, 14 Oct 2019 14:56:08 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="hH/RIZuZ"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=baylibre-com.20150623.gappssmtp.com header.i=@baylibre-com.20150623.gappssmtp.com header.b="wyN2E2Em" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0467E217D9 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-ID:Date: In-reply-to:Subject:To:From:References:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=gul4CSAsZhf+eu28DqdskJJPVkJLBNpg8hxMUrMrJEU=; b=hH/RIZuZxOIT07xiZpEcNXZtKP e/cmTaLZ6qHPeCgttuFsARVqabnjsMHWoCSAaLkJANRrxA/7vMleeBEyHL1u+KvG3/M8MWPqW/6Wu ydBY6FuurbijErLmt9nvHmsHuJoqxGOCQ61KT1PEBEdWmTpJvmZnMPP1Jvl4ctbmtQe5iIFCo5rhW 2oYgE5UXDNk4zYnIOn9Yke0oSFHeAVUtn1EVl+11YDiZV86DmUvAtkyZS9ga++Ne+lR/zI9tHfAwf Ibv+5qQ9u/0+xfjHOT6eCkvZQWGDme3bL3PNlXc8KWhxvddJNHxSYXXCg+pIB+ltk00xgeHg837A8 WYOj2U2Q==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1iK1lR-0004V2-W2; Mon, 14 Oct 2019 14:56:02 +0000 Received: from mail-wm1-x342.google.com ([2a00:1450:4864:20::342]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1iK1lD-0004JA-CF for linux-amlogic@lists.infradead.org; Mon, 14 Oct 2019 14:55:50 +0000 Received: by mail-wm1-x342.google.com with SMTP id v17so17068201wml.4 for ; Mon, 14 Oct 2019 07:55:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=references:user-agent:from:to:cc:subject:in-reply-to:date :message-id:mime-version:content-transfer-encoding; bh=cKxSKPHeDEKsisSnNEmUyMcq+91zQ2+gERMxgkYLYtY=; b=wyN2E2Emv4JghE1iYrUIbDT4Zzu3VAbbeU1J1JBtmZVbmAti5GZd7Tj1reAmn3B9LO a38j8u2NZUdd6Nj3PXVv+srEHeVHCu1dBdhYTz0uiS0iEcjdlZJd5NeQ5pVenosb5h3R /aWisL1JdHaXIsmsIGuY1tMZOTS8cT5UzCrT3Y2KHV9Q5FXbnaswkJLxa23xxpVAPW8g Okt/+eEMDRx7sI/N/wr31Zc98AdWawa2joLRaKY+fxu8vq8kymxGE0q197zJYBmk0wUQ 4WFS5wLOZBFHGTaGbYjvQUiwxY4KFejc14thHE5Rj0gcw9y/LC/QjzituE81iRJpug19 BPOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:references:user-agent:from:to:cc:subject :in-reply-to:date:message-id:mime-version:content-transfer-encoding; bh=cKxSKPHeDEKsisSnNEmUyMcq+91zQ2+gERMxgkYLYtY=; b=J5pH4whULbufpQy8oLQsUSxCAvR66DibL8t8dQlmz1LLFMbwN4IlODI4nW8hv3Mvak EpLqbOSm6xYqTcKx/mFWo9qqKJHpk9X4tCGGEr5HPcZBkuj2pvQlvZkZL3dbxaXW8ZHr eD5+PMDMZefC8VHyJToErbt2ntu3sJxmjSG4QGoP7o/N1qrutDylCqxZcChB0j+j/CF+ q+KB9X1MDk+/CdL5vRh7wcRWO4S5kqUZVNBHgmdjj4c0+la6DXLCGVcVRa2MRkvBJigD zFxloLxbO9G0ig8iJIOlvdDD8ooP8c45lHyaQSgwd+LhGnPwKkqns2pqtmiputvug+Fq 6YvA== X-Gm-Message-State: APjAAAVu3EmMDpMf7Xuzxwb/DCav0XDOd1zCKztGMoxRC3c+D8YWAJ1F uQ+PUEk6nxYFeCmbEZkyiktr7A== X-Google-Smtp-Source: APXvYqwTHDML4CaY0PDiA4aAph9wtIdNGKdMkSECTHHfsy6Kztg4f7KYPXOeg7W88c+f34662YTFBg== X-Received: by 2002:a7b:caea:: with SMTP id t10mr12127353wml.38.1571064945291; Mon, 14 Oct 2019 07:55:45 -0700 (PDT) Received: from localhost (lmontsouris-657-1-212-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) by smtp.gmail.com with ESMTPSA id 90sm27622833wrr.1.2019.10.14.07.55.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Oct 2019 07:55:44 -0700 (PDT) References: <1569411888-98116-1-git-send-email-jian.hu@amlogic.com> <1569411888-98116-3-git-send-email-jian.hu@amlogic.com> <1j1rw4mmzw.fsf@starbuckisacylon.baylibre.com> <1jimpd27cb.fsf@starbuckisacylon.baylibre.com> <5fd57563-0c34-be14-132a-74fd2c5a5275@amlogic.com> <052b0a5c-c913-a9ff-65b9-5b7eb0aecd6e@amlogic.com> <1jsgnz20jq.fsf@starbuckisacylon.baylibre.com> <8ae988c2-68f5-603e-843b-9cd70e4d4349@amlogic.com> User-agent: mu4e 1.3.3; emacs 26.2 From: Jerome Brunet To: Jian Hu , Stephen Boyd Subject: Re: [PATCH 2/2] clk: meson: a1: add support for Amlogic A1 clock driver In-reply-to: <8ae988c2-68f5-603e-843b-9cd70e4d4349@amlogic.com> Date: Mon, 14 Oct 2019 16:55:43 +0200 Message-ID: <1jr23f1imo.fsf@starbuckisacylon.baylibre.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20191014_075547_428883_4ADF9214 X-CRM114-Status: GOOD ( 20.97 ) X-BeenThere: linux-amlogic@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, Jianxin Pan , Neil Armstrong , Martin Blumenstingl , Kevin Hilman , Michael Turquette , linux-kernel@vger.kernel.org, Qiufang Dai , linux-amlogic@lists.infradead.org, linux-clk@vger.kernel.org, linux-arm-kernel@lists.infradead.org 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 Ck9uIE1vbiAxNCBPY3QgMjAxOSBhdCAxNTo0MiwgSmlhbiBIdSA8amlhbi5odUBhbWxvZ2ljLmNv bT4gd3JvdGU6Cgo+Pj4gaWYgcGVyaXBoZXJhbCBjbG9ja3MgcHJvYmUgZmlyc3QsIGl0IHdpbGwg ZmFpbCB0byBnZXQKPj4+IGZpeGVkX3BsbCBjbG9ja3MuIEEgbG90IG9mIHBlcmlwaGVyYWwgY2xv Y2tzIHBhcmVudCBhcmUgZmNsa19kaXYyLzMvNS83Lgo+Pj4gYW5kIHdlIGNhbiBub3QgZ2V0IGZj bGtfZGl2Mi8zLzUvNyBjbG9ja3MuCj4+Cj4+IFdoYXQgZG9lcyAiZmFpbCIgbWVhbiA/Cj4+IEkg aW50ZW5kZWQgdG8gZ2V0IGNsb2NrIHVzaW5nIGRldm1fY2xrX2dldCBBUEkgaW4gZWFjaCBkcml2 ZXIsIEluIHRoaXMgCj4gc2NlbmXvvIxpdCB3aWxsIGdldCBmYWlsZWQgYmVjYXVzZSBvZiB0aGUg Y2xvY2sgbm90IGJlaW5nIHJlaWdzdGVyZWQuIEluCj4gZmFjdCwgd2UgY291bGQgbm90IHVzZSBk ZXZtX2Nsa19nZXQuCgpVbmxlc3MgSSBtaXNzZWQgc29tdGhpbmcsIEkgZG9uJ3Qgc2VlIHdoeSB5 b3Ugd291bGQgbmVlZCB0byBjYWxsCmRldm1fY2xrX2dldCgpLiBUaGlzIGlzIG5vdyBoYW5kbGVk IGRpcmVjdGx5IGJ5IHRoZSBmcmFtZXdvcmsuCgo+Pj4KPj4+IEkgY2FuIHRoaW5rIG9mIHR3byBz b2x1dGlvbnM6Cj4+PiAxKSBEbyBub3QgZGVzY3JpYmUgeHRhbF9maXhwbGwsIHh0YWxfaGlmaXBs bC4KPj4+ICAgICB0aGF0IGlzIHRvIHNheSwgZG8gbm90IGRlY3JpYmUgdGhlIFNZU19PU0NJTl9D VFJMIHJlZ2lzdGVyLgo+Pj4KPj4+IDIpIFB1dCBwZXJpcGhlcmFsIGFuZCBwbGwgY2xvY2sgZHJp dmVyIGluIG9uZSBkcml2ZXIuCj4+Cj4+IFRob3NlIGFyZSB3b3JrIGFyb3VuZHMuIEFjdHVhbGx5 IGZpeGluZyB0aGUgcHJvYmxlbSBpcyB1c3VhbGx5Cj4+IHByZWZlcmFibGUuCj4+Cj4+ICAgU28g aWYgcmVwaHJhc2UgeW91ciBwcm9ibGVtOgo+Pgo+PiAgICogV2UgaGF2ZSAyIGNsb2NrIGNvbnRy b2xsZXJzIChBIGFuZCBCKQo+PiAgICogQ2xvY2sgYXJlIHBhc3NlZCBiZXR3ZWVuIHRoZSBjb250 cm9sbGVycyB1c2luZyBEVAo+PiAgICogV2UgaGF2ZSBhIFBMTCBpbiBjb250cm9sbGVyIEIgd2hp Y2ggaXMgdXNlZCBieSBjbG9ja3MgaW4KPj4gICAgIGNvbnRyb2xsZXIgQS4KPj4gICAqIHRoZSBQ TEwgcGFyZW50IGNsb2NrIGlzIGluIGNvbnRyb2xsZXIgQS4KPj4KPiBZZWFoLCBpdCBpcyB0aGUg c2NlbmUuCj4+ID0+IFNvIGlmIEkgdW5kZXJzdGFuZCBjb3JyZWN0bHkgeW91IGFyZSBzYXlpbmcg dGhhdCBpdCB3aWxsICJmYWlsIgo+PiBiZWNhdXNlIHRoZXJlIGlzIGEgY2lyY3VsYXIgZGVwZW5k ZW5jeSBiZXR3ZWVuIGNvbnRyb2xsZXIgQSBhbmQgQiwgcmlnaHQKPj4gPwo+Pgo+PiBEbyB5b3Ug aGF2ZSBldmlkZW5jZSB0aGF0IHlvdXIgcHJvYmxlbSBjb21lcyBmcm9tIHRoaXMgY2lyY3VsYXIK Pj4gZGVwZW5kZW5jeSA/Cj4+Cj4gSSBoYXZlIHJlYWxpemVkIHRoZSBwZXJpcGhlcmFsIGRyaXZl ciBhbmQgUExMIGRyaXZlcnMsCj4KPiBQTEwgZHJpdmVyIHByb2JlcyBmaXJzdCwgUGVyaXBoZXJh bCBjbG9jayBkcml2ZXIgaXMgdGhlIHNlY29uZC4KCkl0IHNob3VsZCB3b3JrIHJlZ2FybGVzcyBv ZiB0aGUgb3JkZXIuCgo+Cj4gSW4gYWRkaXRpb27vvIxmb3IgQTEgU29D77yMIGl0IHdpbGwgbm90 IHdvcmsgdXNpbmcgbWVzb25fY2xrX3BsbF9vcHMsCj4KPiBpdCBuZWVkcyBzdHJpY3RseSBzZXF1 ZW5jZe+8jHNvIG1heWJlIGFub3RoZXIgb3BzIGlzIHJlcXVpcmVkLmhpZmkgcGxsIHdpbGwKPiBi ZSBzZW50IHdpdGggc3lzIHBsbCBhbmQgQ1BVIGNsb2NrIGRyaXZlci4KClRoZSBQQ2llIFBMTCBo YXMgYSBnb29kIHJlYXNvbiB0byBoYXZlIGEgc2luZ2xlIGZyZXF1ZW5jeSwgb25seSBvbmUgaXMg bmVlZGVkCgpUaGF0J3MgdGhlIGNhc2UgdGhlIGNhc2Ugb2YgdGhlIEhJRkkgUExMIHdoaWNoLCBh cyBleHBsYWluZWQgaW4gcHJldmlvdXMKbWFpbHMsIG5lZWRzIHRvIHByb3ZpZGUgbW9yZSB0aGF0 IHRoZSBzaW5nbGUgZnJlbnF1ZW5jeSB5b3UgaGF2ZSBkZXNjcmliZWQuCgpJZiB0aGUgcGxsIGRy aXZlciBuZWVkcyB0byBleHRlbmRlZCB3aXRoIG5ldyBvcHMgdGhhdCdzIGZpbmUuIFBsZWFzZQpl eHBsYWluIHRoaXMgInN0cmljdCBzZXF1ZW5jZSIgeW91IGFyZSByZWZlcmluZyB0b28uCldoYXQg aXMgcGFydCBvZiB0aGUgaW5pdGlhbCBzZXR0aW5ncywgd2hhdCBuZWVkcyB0byBiZSBkb25lIGVh Y2ggdGltZSA/Cgo+PiBBRkFJSywgQ0NGIHdpbGwgb3JwaGFuIHRoZSBjbG9jayBhbmQgY29udGlu dWUgaWYgdGhlIHBhcmVudCBpcyBub3QKPj4gYXZhaWxhYmxlLiBMYXRlciwgd2hlbiB0aGUgcGFy ZW50IGNvbWVzIHVwLCB0aGUgb3JwaGFuIHdpbGwgYmUKPj4gcmVwYXJlbnRlZC4KPj4KPj4gSU9X LCB0aGUgcHJvYmxlbSB5b3UgYXJlIHJlcG9ydGluZyBzaG91bGQgYWxyZWFkeSBiZSBjb3ZlcmVk IGJ5IENDRi4KPj4KPj4+Cj4+PiBBbmQgIHdoaWNoIHN1bHV0aW9uIGlzIGJldHRlciBhYm92ZSB0 d28/Cj4+Cj4+IE5laXRoZXIsIEknbSBhZnJhaWQKPj4KPj4+Cj4+PiBPciBtYXliZSBvdGhlciBn b29kIGlkZWFzIGZvciBpdD8KPj4KPj4gTXkgYmV0IHdvdWxkIGJlIHRoYXQgYW4gaW1wb3J0YW50 IGNsb2NrcyAobWF5YmUgbW9yZSB0aGFuIDEpIGlzIGJlaW5nCj4+IGdhdGVkIGR1cmluZyB0aGUg aW5pdCBwcm9jZXNzLgo+Pgo+PiBNYXliZSB5b3Ugc2hvdWxkIHRyeSB0aGUgY29tbWFuZCBsaW5l IHBhcmFtZXRlciAiY2xrX2lnbm9yZV91bnVzZWQiCj4+IHVudGlsIHlvdSBnZXQgdGhpbmdzIHJ1 bm5pbmcgd2l0aCB5b3VyIDIgY29udHJvbGxlcnMuCj4+Cj4+Pgo+Pj4gT24gMjAxOS85LzI5IDE3 OjM4LCBKaWFuIEh1IHdyb3RlOgo+Pj4+Cj4+Pj4KPj4+PiBPbiAyMDE5LzkvMjcgMjE6MzIsIEpl cm9tZSBCcnVuZXQgd3JvdGU6Cj4+Pj4+Cj4+Pj4+IE9uIEZyaSAyNyBTZXAgMjAxOSBhdCAxMTo1 MiwgSmlhbiBIdSA8amlhbi5odUBhbWxvZ2ljLmNvbT4gd3JvdGU6Cj4+Pj4+Cj4+Pj4+PiBIaSwg SmVyb21lCj4+Pj4+Pgo+Pj4+Pj4gVGhhbmsgeW91IGZvciByZXZpZXcuCj4+Pj4+Pgo+Pj4+Pj4g T24gMjAxOS85LzI1IDIzOjA5LCBKZXJvbWUgQnJ1bmV0IHdyb3RlOgo+Pj4+Pj4+IE9uIFdlZCAy NSBTZXAgMjAxOSBhdCAxOTo0NCwgSmlhbiBIdSA8amlhbi5odUBhbWxvZ2ljLmNvbT4gd3JvdGU6 Cj4+Pj4+Pj4KPj4+Pj4+Pj4gVGhlIEFtbG9naWMgQTEgY2xvY2sgaW5jbHVkZXMgdGhyZWUgcGFy dHM6Cj4+Pj4+Pj4+IHBlcmlwaGVyYWwgY2xvY2tzLCBwbGwgY2xvY2tzLCBDUFUgY2xvY2tzLgo+ Pj4+Pj4+PiBzeXMgcGxsIGFuZCBDUFUgY2xvY2tzIHdpbGwgYmUgc2VudCBpbiBuZXh0IHBhdGNo Lgo+Pj4+Pj4+Pgo+Pj4+Pj4+PiBVbmxpa2UgdGhlIHByZXZpb3VzIHNlcmllcywgdGhlcmUgaXMg bm8gRUUvQU8gZG9tYWluCj4+Pj4+Pj4+IGluIEExIENMSyBjb250cm9sbGVycy4KPj4+Pj4+Pj4K Pj4+Pj4+Pj4gU2lnbmVkLW9mZi1ieTogSmlhbiBIdSA8amlhbi5odUBhbWxvZ2ljLmNvbT4KPj4+ Pj4+Pj4gU2lnbmVkLW9mZi1ieTogSmlhbnhpbiBQYW4gPGppYW54aW4ucGFuQGFtbG9naWMuY29t Pgo+Pj4+Pj4+PiAtLS0KPj4+Pj4+Pj4gICAgIGFyY2gvYXJtNjQvS2NvbmZpZy5wbGF0Zm9ybXMg fCAgICAxICsKPj4+Pj4+Pj4gICAgIGRyaXZlcnMvY2xrL21lc29uL0tjb25maWcgICAgfCAgIDEw ICsKPj4+Pj4+Pj4gICAgIGRyaXZlcnMvY2xrL21lc29uL01ha2VmaWxlICAgfCAgICAxICsKPj4+ Pj4+Pj4gICAgIGRyaXZlcnMvY2xrL21lc29uL2ExLmMgICAgICAgfCAyNjE3Cj4+Pj4+Pj4+ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+Pj4+Pj4+PiAgICAgZHJp dmVycy9jbGsvbWVzb24vYTEuaCAgICAgICB8ICAxNzIgKysrCj4+Pj4+Pj4+ICAgICA1IGZpbGVz IGNoYW5nZWQsIDI4MDEgaW5zZXJ0aW9ucygrKQo+Pj4+Pj4+PiAgICAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvY2xrL21lc29uL2ExLmMKPj4+Pj4+Pj4gICAgIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2Nsay9tZXNvbi9hMS5oCj4+Pj4+Pj4+Cj4+PiBbLi4uXQo+Pj4+Pj4+PiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9jbGsvbWVzb24vYTEuYyBiL2RyaXZlcnMvY2xrL21lc29uL2ExLmMK Pj4+Pj4+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4+Pj4+Pj4gaW5kZXggMDAwMDAwMC4uMjZl ZGFlMGYKPj4+Pj4+Pj4gLS0tIC9kZXYvbnVsbAo+Pj4+Pj4+PiArKysgYi9kcml2ZXJzL2Nsay9t ZXNvbi9hMS5jCj4+Pj4+Pj4+IEBAIC0wLDAgKzEsMjYxNyBAQAo+Pj4+Pj4+PiArLy8gU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wKyBPUiBNSVQpCj4+Pj4+Pj4+ICsvKgo+Pj4+Pj4+ PiArICogQ29weXJpZ2h0IChjKSAyMDE5IEFtbG9naWMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl ZC4KPj4+Pj4+Pj4gKyAqLwo+Pj4+Pj4+PiArCj4+Pj4+Pj4+ICsjaW5jbHVkZSA8bGludXgvY2xr LXByb3ZpZGVyLmg+Cj4+Pj4+Pj4+ICsjaW5jbHVkZSA8bGludXgvaW5pdC5oPgo+Pj4+Pj4+PiAr I2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgo+Pj4+Pj4+PiArI2luY2x1ZGUgPGxpbnV4L3Bs YXRmb3JtX2RldmljZS5oPgo+Pj4+Pj4+PiArI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4K Pj4+Pj4+Pj4gKyNpbmNsdWRlICJjbGstbXBsbC5oIgo+Pj4+Pj4+PiArI2luY2x1ZGUgImNsay1w bGwuaCIKPj4+Pj4+Pj4gKyNpbmNsdWRlICJjbGstcmVnbWFwLmgiCj4+Pj4+Pj4+ICsjaW5jbHVk ZSAidmlkLXBsbC1kaXYuaCIKPj4+Pj4+Pj4gKyNpbmNsdWRlICJjbGstZHVhbGRpdi5oIgo+Pj4+ Pj4+PiArI2luY2x1ZGUgIm1lc29uLWVlY2xrLmgiCj4+Pj4+Pj4+ICsjaW5jbHVkZSAiYTEuaCIK Pj4+Pj4+Pj4gKwo+Pj4+Pj4+PiArLyogUExMcyBjbG9jayBpbiBnYXRlcywgaXRzIHBhcmVudCBp cyB4dGFsICovCj4+Pj4+Pj4+ICtzdGF0aWMgc3RydWN0IGNsa19yZWdtYXAgYTFfeHRhbF9jbGt0 cmVlID0gewo+Pj4+Pj4+PiArICAgIC5kYXRhID0gJihzdHJ1Y3QgY2xrX3JlZ21hcF9nYXRlX2Rh dGEpewo+Pj4+Pj4+PiArICAgICAgICAub2Zmc2V0ID0gU1lTX09TQ0lOX0NUUkwsCj4+Pj4+Pj4+ ICsgICAgICAgIC5iaXRfaWR4ID0gMCwKPj4+Pj4+Pj4gKyAgICB9LAo+Pj4+Pj4+PiArICAgIC5o dy5pbml0ID0gJihzdHJ1Y3QgY2xrX2luaXRfZGF0YSkgewo+Pj4+Pj4+PiArICAgICAgICAubmFt ZSA9ICJ4dGFsX2Nsa3RyZWUiLAo+Pj4+Pj4+PiArICAgICAgICAub3BzID0gJmNsa19yZWdtYXBf Z2F0ZV9vcHMsCj4+Pj4+Pj4+ICsgICAgICAgIC5wYXJlbnRfZGF0YSA9ICYoY29uc3Qgc3RydWN0 IGNsa19wYXJlbnRfZGF0YSkgewo+Pj4+Pj4+PiArICAgICAgICAgICAgLmZ3X25hbWUgPSAieHRh bCIsCj4+Pj4+Pj4+ICsgICAgICAgIH0sCj4+Pj4+Pj4+ICsgICAgICAgIC5udW1fcGFyZW50cyA9 IDEsCj4+Pj4+Pj4+ICsgICAgICAgIC5mbGFncyA9IENMS19JU19DUklUSUNBTCwKPj4+Pj4+Pgo+ Pj4+Pj4+IElzIENDRiBldmVuIGV4cGVjdGVkIHRvIHRvdWNoIHRoaXMgZXZlciA/IHdoYXQgYWJv dXQgUk8gb3BzID8KPj4+Pj4+PiBQbGVhc2UgcmV2aWV3IHlvdXIgb3RoZXIgY2xvY2tzIHdpdGgg dGhpcyBpbiBtaW5kCj4+Pj4+Pj4KPj4+Pj4+IHRoZSBjbG9jayBzaG91bGQgbm90IGJlIGNoYW5n ZWQgYXQgcnVudGltZS5jbGtfcmVnbWFwX2dhdGVfcm9fb3BzCj4+Pj4+PiBpcyBhIGdvb2QgaWRl YS4gU2V0IFJPIG9wcyBhbmQgcmVtb3ZlIHRoZSBDTEtfSVNfQ1JJVElDQUwgZmxhZy4KPj4+Pj4+ Pj4gKyAgICB9LAo+Pj4+Pj4+PiArfTsKPj4+Pj4+Pj4gKwo+Pj4+Pj4+PiArc3RhdGljIHN0cnVj dCBjbGtfcmVnbWFwIGExX3h0YWxfZml4cGxsID0gewo+Pj4+Pj4+PiArICAgIC5kYXRhID0gJihz dHJ1Y3QgY2xrX3JlZ21hcF9nYXRlX2RhdGEpewo+Pj4+Pj4+PiArICAgICAgICAub2Zmc2V0ID0g U1lTX09TQ0lOX0NUUkwsCj4+Pj4+Pj4+ICsgICAgICAgIC5iaXRfaWR4ID0gMSwKPj4+Pj4+Pj4g KyAgICB9LAo+Pj4+Pj4+PiArICAgIC5ody5pbml0ID0gJihzdHJ1Y3QgY2xrX2luaXRfZGF0YSkg ewo+Pj4+Pj4+PiArICAgICAgICAubmFtZSA9ICJ4dGFsX2ZpeHBsbCIsCj4+Pj4+Pj4+ICsgICAg ICAgIC5vcHMgPSAmY2xrX3JlZ21hcF9nYXRlX29wcywKPj4+Pj4+Pj4gKyAgICAgICAgLnBhcmVu dF9kYXRhID0gJihjb25zdCBzdHJ1Y3QgY2xrX3BhcmVudF9kYXRhKSB7Cj4+Pj4+Pj4+ICsgICAg ICAgICAgICAuZndfbmFtZSA9ICJ4dGFsIiwKPj4+Pj4+Pj4gKyAgICAgICAgfSwKPj4+Pj4+Pj4g KyAgICAgICAgLm51bV9wYXJlbnRzID0gMSwKPj4+Pj4+Pj4gKyAgICAgICAgLmZsYWdzID0gQ0xL X0lTX0NSSVRJQ0FMLAo+Pj4+Pj4+PiArICAgIH0sCj4+Pj4+Pj4+ICt9Owo+Pj4+Pj4+PiArCj4+ Pj4+Pj4+ICtzdGF0aWMgc3RydWN0IGNsa19yZWdtYXAgYTFfeHRhbF91c2JfcGh5ID0gewo+Pj4+ Pj4+PiArICAgIC5kYXRhID0gJihzdHJ1Y3QgY2xrX3JlZ21hcF9nYXRlX2RhdGEpewo+Pj4+Pj4+ PiArICAgICAgICAub2Zmc2V0ID0gU1lTX09TQ0lOX0NUUkwsCj4+Pj4+Pj4+ICsgICAgICAgIC5i aXRfaWR4ID0gMiwKPj4+Pj4+Pj4gKyAgICB9LAo+Pj4+Pj4+PiArICAgIC5ody5pbml0ID0gJihz dHJ1Y3QgY2xrX2luaXRfZGF0YSkgewo+Pj4+Pj4+PiArICAgICAgICAubmFtZSA9ICJ4dGFsX3Vz Yl9waHkiLAo+Pj4+Pj4+PiArICAgICAgICAub3BzID0gJmNsa19yZWdtYXBfZ2F0ZV9vcHMsCj4+ Pj4+Pj4+ICsgICAgICAgIC5wYXJlbnRfZGF0YSA9ICYoY29uc3Qgc3RydWN0IGNsa19wYXJlbnRf ZGF0YSkgewo+Pj4+Pj4+PiArICAgICAgICAgICAgLmZ3X25hbWUgPSAieHRhbCIsCj4+Pj4+Pj4+ ICsgICAgICAgIH0sCj4+Pj4+Pj4+ICsgICAgICAgIC5udW1fcGFyZW50cyA9IDEsCj4+Pj4+Pj4+ ICsgICAgICAgIC5mbGFncyA9IENMS19JU19DUklUSUNBTCwKPj4+Pj4+Pgo+Pj4+Pj4+IEhvdyBp cyBhbiBVU0IgY2xvY2sgY3JpdGljYWwgdG8gdGhlIHN5c3RlbSA/Cj4+Pj4+Pj4gUGxlYXNlIHJl dmlldyB5b3VyIG90aGVyIGNsb2NrcyB3aXRoIGNvbW1lbnQgaW4gbWluZCAuLi4KPj4+Pj4+IHRo ZSB1c2IgY2xvY2sgZG9lcyBub3QgYWZmZWN0IHRoZSBzeXN0ZW0sCj4+Pj4+PiByZW1vdmUgdGhl IENMS19JU19DUklUSUNBTCBmbGFnCj4+Pj4+Pj4KPj4+Pj4+Pj4gKyAgICB9LAo+Pj4+Pj4+PiAr fTsKPj4+Pj4+Pj4gKwo+Pj4+Pj4+PiArc3RhdGljIHN0cnVjdCBjbGtfcmVnbWFwIGExX3h0YWxf dXNiX2N0cmwgPSB7Cj4+Pj4+Pj4+ICsgICAgLmRhdGEgPSAmKHN0cnVjdCBjbGtfcmVnbWFwX2dh dGVfZGF0YSl7Cj4+Pj4+Pj4+ICsgICAgICAgIC5vZmZzZXQgPSBTWVNfT1NDSU5fQ1RSTCwKPj4+ Pj4+Pj4gKyAgICAgICAgLmJpdF9pZHggPSAzLAo+Pj4+Pj4+PiArICAgIH0sCj4+Pj4+Pj4+ICsg ICAgLmh3LmluaXQgPSAmKHN0cnVjdCBjbGtfaW5pdF9kYXRhKSB7Cj4+Pj4+Pj4+ICsgICAgICAg IC5uYW1lID0gInh0YWxfdXNiX2N0cmwiLAo+Pj4+Pj4+PiArICAgICAgICAub3BzID0gJmNsa19y ZWdtYXBfZ2F0ZV9vcHMsCj4+Pj4+Pj4+ICsgICAgICAgIC5wYXJlbnRfZGF0YSA9ICYoY29uc3Qg c3RydWN0IGNsa19wYXJlbnRfZGF0YSkgewo+Pj4+Pj4+PiArICAgICAgICAgICAgLmZ3X25hbWUg PSAieHRhbCIsCj4+Pj4+Pj4+ICsgICAgICAgIH0sCj4+Pj4+Pj4+ICsgICAgICAgIC5udW1fcGFy ZW50cyA9IDEsCj4+Pj4+Pj4+ICsgICAgICAgIC5mbGFncyA9IENMS19JU19DUklUSUNBTCwKPj4+ Pj4+Pj4gKyAgICB9LAo+Pj4+Pj4+PiArfTsKPj4+Pj4+IHRoZSB1c2IgY2xvY2sgZG9lcyBub3Qg YWZmZWN0IHRoZSBzeXN0ZW0sCj4+Pj4+PiByZW1vdmUgdGhlIENMS19JU19DUklUSUNBTCBmbGFn Cj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3JlZ21hcCBhMV94dGFsX2hp ZmlwbGwgPSB7Cj4+Pj4+Pj4+ICsgICAgLmRhdGEgPSAmKHN0cnVjdCBjbGtfcmVnbWFwX2dhdGVf ZGF0YSl7Cj4+Pj4+Pj4+ICsgICAgICAgIC5vZmZzZXQgPSBTWVNfT1NDSU5fQ1RSTCwKPj4+Pj4+ Pj4gKyAgICAgICAgLmJpdF9pZHggPSA0LAo+Pj4+Pj4+PiArICAgIH0sCj4+Pj4+Pj4+ICsgICAg Lmh3LmluaXQgPSAmKHN0cnVjdCBjbGtfaW5pdF9kYXRhKSB7Cj4+Pj4+Pj4+ICsgICAgICAgIC5u YW1lID0gInh0YWxfaGlmaXBsbCIsCj4+Pj4+Pj4+ICsgICAgICAgIC5vcHMgPSAmY2xrX3JlZ21h cF9nYXRlX29wcywKPj4+Pj4+Pj4gKyAgICAgICAgLnBhcmVudF9kYXRhID0gJihjb25zdCBzdHJ1 Y3QgY2xrX3BhcmVudF9kYXRhKSB7Cj4+Pj4+Pj4+ICsgICAgICAgICAgICAuZndfbmFtZSA9ICJ4 dGFsIiwKPj4+Pj4+Pj4gKyAgICAgICAgfSwKPj4+Pj4+Pj4gKyAgICAgICAgLm51bV9wYXJlbnRz ID0gMSwKPj4+Pj4+Pj4gKyAgICAgICAgLmZsYWdzID0gQ0xLX0lTX0NSSVRJQ0FMLAo+Pj4+Pj4+ PiArICAgIH0sCj4+Pj4+Pj4+ICt9Owo+Pj4+Pj4gQ0xLX0lTX0NSSVRJQ0FMIGlzIG5lZWQgdG8g bG9jayBoaWZpIHBsbC4KPj4+Pj4KPj4+Pj4gVGhhdCdzIG5vdCBob3cgQ0NGIHdvcmtzLCB0aGlz IGZhbGcgaXMgbm90IG9rIGhlcmUuCj4+Pj4+IENDRiB3aWxsIGVuYWJsZSB0aGlzIGNsb2NrIGJl Zm9yZSBjYWxsaW5nIGVuYWJsZSBvbiB5b3VyIGhpZmkgcGxsCj4+Pj4+Cj4+Pj4gb2vvvIwgSSB3 aWxsIHJlbW92ZSBpdC4KPj4+Pj4+Pj4gKwo+Pj4+Pj4+PiArc3RhdGljIHN0cnVjdCBjbGtfcmVn bWFwIGExX3h0YWxfc3lzcGxsID0gewo+Pj4+Pj4+PiArICAgIC5kYXRhID0gJihzdHJ1Y3QgY2xr X3JlZ21hcF9nYXRlX2RhdGEpewo+Pj4+Pj4+PiArICAgICAgICAub2Zmc2V0ID0gU1lTX09TQ0lO X0NUUkwsCj4+Pj4+Pj4+ICsgICAgICAgIC5iaXRfaWR4ID0gNSwKPj4+Pj4+Pj4gKyAgICB9LAo+ Pj4+Pj4+PiArICAgIC5ody5pbml0ID0gJihzdHJ1Y3QgY2xrX2luaXRfZGF0YSkgewo+Pj4+Pj4+ PiArICAgICAgICAubmFtZSA9ICJ4dGFsX3N5c3BsbCIsCj4+Pj4+Pj4+ICsgICAgICAgIC5vcHMg PSAmY2xrX3JlZ21hcF9nYXRlX29wcywKPj4+Pj4+Pj4gKyAgICAgICAgLnBhcmVudF9kYXRhID0g Jihjb25zdCBzdHJ1Y3QgY2xrX3BhcmVudF9kYXRhKSB7Cj4+Pj4+Pj4+ICsgICAgICAgICAgICAu ZndfbmFtZSA9ICJ4dGFsIiwKPj4+Pj4+Pj4gKyAgICAgICAgfSwKPj4+Pj4+Pj4gKyAgICAgICAg Lm51bV9wYXJlbnRzID0gMSwKPj4+Pj4+Pj4gKyAgICAgICAgLmZsYWdzID0gQ0xLX0lTX0NSSVRJ Q0FMLAo+Pj4+Pj4+PiArICAgIH0sCj4+Pj4+Pj4+ICt9Owo+Pj4+Pj4+PiArCj4+Pj4+PiB3aGVu IENQVSBjbG9jayBpcyBhdCBmaXhlZCBjbG9jaywgc3lzIHBsbAo+Pj4+Pj4gd2lsbCBiZSBkaXNh YmxlZCwgeHRhbF9zeXNwbGwgd2lsbCBiZSBkaXNhYmxlZCB0b28uCj4+Pj4+PiB3aGVuIHNldHRp bmcgc3lzIHBsbCwgY2FsbCBjbGtfc2V0X3JhdGUgdG8gbG9jawo+Pj4+Pj4gc3lzIHBsbCwgYWRk IFJPIG9wcyB0byBhdm9pZCBkaXNhYmxpbmcgdGhlIGNsb2NrCj4+Pj4+Cj4+Pj4+IEFnYWluIG5v dCBPay4KPj4+Pj4gSWYgeW91IG1lY2hhbmlzbSB0byBsb2NrIHRoZSBQTEwgaXMgcHJvcGVybHkg aW1wbGVtZW50ZWQgaW4gdGhlIGVuYWJsZQo+Pj4+PiBjYWxsYmFjayBvZiB0aGUgc3lzIHBsbCwg c3RpbGwga2luZCBvZiB3b3JrIGFyb3VuZCBhcmUgbm90IG5lZWRlZAo+Pj4+Pgo+Pj4+PiBUaGlz IGhhcyB3b3JrZWQgb24gdGhlIHBsbCB3ZSBoYWQgc28gZmFyLgo+Pj4+Pgo+Pj4+IG9rLCBJIHdp bGwgcmVtb3ZlIGl0Lgo+Pj4+Pj4KPj4+Pj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3JlZ21hcCBh MV94dGFsX2RkcyA9IHsKPj4+Pj4+Pj4gKyAgICAuZGF0YSA9ICYoc3RydWN0IGNsa19yZWdtYXBf Z2F0ZV9kYXRhKXsKPj4+Pj4+Pj4gKyAgICAgICAgLm9mZnNldCA9IFNZU19PU0NJTl9DVFJMLAo+ Pj4+Pj4+PiArICAgICAgICAuYml0X2lkeCA9IDYsCj4+Pj4+Pj4+ICsgICAgfSwKPj4+Pj4+Pj4g KyAgICAuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2RhdGEpIHsKPj4+Pj4+Pj4gKyAgICAg ICAgLm5hbWUgPSAieHRhbF9kZHMiLAo+Pj4+Pj4+PiArICAgICAgICAub3BzID0gJmNsa19yZWdt YXBfZ2F0ZV9vcHMsCj4+Pj4+Pj4+ICsgICAgICAgIC5wYXJlbnRfZGF0YSA9ICYoY29uc3Qgc3Ry dWN0IGNsa19wYXJlbnRfZGF0YSkgewo+Pj4+Pj4+PiArICAgICAgICAgICAgLmZ3X25hbWUgPSAi eHRhbCIsCj4+Pj4+Pj4+ICsgICAgICAgIH0sCj4+Pj4+Pj4+ICsgICAgICAgIC5udW1fcGFyZW50 cyA9IDEsCj4+Pj4+Pj4+ICsgICAgICAgIC5mbGFncyA9IENMS19JU19DUklUSUNBTCwKPj4+Pj4+ Pj4gKyAgICB9LAo+Pj4+Pj4+PiArfTsKPj4+Pj4+IENMS19JU19DUklUSUNBTCBpcyBuZWVkIHRv IGxvY2sgZGRzCj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4gKy8qIGZpeGVkIHBsbCA9IDE1MzZNCj4+Pj4+ Pj4+ICsgKgo+Pj4+Pj4+PiArICogZml4ZWQgcGxsIC0tLS0tIGZjbGtfZGl2MiA9IDc2OE0KPj4+ Pj4+Pj4gKyAqICAgICAgICAgICB8Cj4+Pj4+Pj4+ICsgKiAgICAgICAgICAgLS0tLS0gZmNsa19k aXYzID0gNTEyTQo+Pj4+Pj4+PiArICogICAgICAgICAgIHwKPj4+Pj4+Pj4gKyAqICAgICAgICAg ICAtLS0tLSBmY2xrX2RpdjUgPSAzMDcuMk0KPj4+Pj4+Pj4gKyAqICAgICAgICAgICB8Cj4+Pj4+ Pj4+ICsgKiAgICAgICAgICAgLS0tLS0gZmNsa19kaXY3ID0gMjE5LjRNCj4+Pj4+Pj4+ICsgKi8K Pj4+Pj4+Pgo+Pj4+Pj4+IFRoZSBmcmFtZXdvcmsgd2lsbCBtYWtlIHRob3NlIGNhbGN1bGF0aW9u IC4uLiB5b3UgY2FuIHJlbW92ZSB0aGlzCj4+Pj4+Pj4KPj4+Pj4+IG9rLCBJIHdpbGwgcmVtb3Rl IHRoZSBjb21tZW50Lgo+Pj4+Pj4+PiArc3RhdGljIHN0cnVjdCBjbGtfcmVnbWFwIGExX2ZpeGVk X3BsbF9kY28gPSB7Cj4+Pj4+Pj4+ICsgICAgLmRhdGEgPSAmKHN0cnVjdCBtZXNvbl9jbGtfcGxs X2RhdGEpewo+Pj4+Pj4+PiArICAgICAgICAuZW4gPSB7Cj4+Pj4+Pj4+ICsgICAgICAgICAgICAu cmVnX29mZiA9IEFOQUNUUkxfRklYUExMX0NUUkwwLAo+Pj4+Pj4+PiArICAgICAgICAgICAgLnNo aWZ0ICAgPSAyOCwKPj4+Pj4+Pj4gKyAgICAgICAgICAgIC53aWR0aCAgID0gMSwKPj4+Pj4+Pj4g KyAgICAgICAgfSwKPj4+Pj4+Pj4gKyAgICAgICAgLm0gPSB7Cj4+Pj4+Pj4+ICsgICAgICAgICAg ICAucmVnX29mZiA9IEFOQUNUUkxfRklYUExMX0NUUkwwLAo+Pj4+Pj4+PiArICAgICAgICAgICAg LnNoaWZ0ICAgPSAwLAo+Pj4+Pj4+PiArICAgICAgICAgICAgLndpZHRoICAgPSA4LAo+Pj4+Pj4+ PiArICAgICAgICB9LAo+Pj4+Pj4+PiArICAgICAgICAubiA9IHsKPj4+Pj4+Pj4gKyAgICAgICAg ICAgIC5yZWdfb2ZmID0gQU5BQ1RSTF9GSVhQTExfQ1RSTDAsCj4+Pj4+Pj4+ICsgICAgICAgICAg ICAuc2hpZnQgICA9IDEwLAo+Pj4+Pj4+PiArICAgICAgICAgICAgLndpZHRoICAgPSA1LAo+Pj4+ Pj4+PiArICAgICAgICB9LAo+Pj4+Pj4+PiArICAgICAgICAuZnJhYyA9IHsKPj4+Pj4+Pj4gKyAg ICAgICAgICAgIC5yZWdfb2ZmID0gQU5BQ1RSTF9GSVhQTExfQ1RSTDEsCj4+Pj4+Pj4+ICsgICAg ICAgICAgICAuc2hpZnQgICA9IDAsCj4+Pj4+Pj4+ICsgICAgICAgICAgICAud2lkdGggICA9IDE5 LAo+Pj4+Pj4+PiArICAgICAgICB9LAo+Pj4+Pj4+PiArICAgICAgICAubCA9IHsKPj4+Pj4+Pj4g KyAgICAgICAgICAgIC5yZWdfb2ZmID0gQU5BQ1RSTF9GSVhQTExfQ1RSTDAsCj4+Pj4+Pj4+ICsg ICAgICAgICAgICAuc2hpZnQgICA9IDMxLAo+Pj4+Pj4+PiArICAgICAgICAgICAgLndpZHRoICAg PSAxLAo+Pj4+Pj4+PiArICAgICAgICB9LAo+Pj4+Pj4+PiArICAgICAgICAucnN0ID0gewo+Pj4+ Pj4+PiArICAgICAgICAgICAgLnJlZ19vZmYgPSBBTkFDVFJMX0ZJWFBMTF9DVFJMMCwKPj4+Pj4+ Pj4gKyAgICAgICAgICAgIC5zaGlmdCAgID0gMjksCj4+Pj4+Pj4+ICsgICAgICAgICAgICAud2lk dGggICA9IDEsCj4+Pj4+Pj4+ICsgICAgICAgIH0sCj4+Pj4+Pj4+ICsgICAgfSwKPj4+Pj4+Pj4g KyAgICAuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2RhdGEpewo+Pj4+Pj4+PiArICAgICAg ICAubmFtZSA9ICJmaXhlZF9wbGxfZGNvIiwKPj4+Pj4+Pj4gKyAgICAgICAgLm9wcyA9ICZtZXNv bl9jbGtfcGxsX3JvX29wcywKPj4+Pj4+Pj4gKyAgICAgICAgLnBhcmVudF9od3MgPSAoY29uc3Qg c3RydWN0IGNsa19odyAqW10pIHsKPj4+Pj4+Pj4gKyAgICAgICAgICAgICZhMV94dGFsX2ZpeHBs bC5odwo+Pj4+Pj4+PiArICAgICAgICB9LAo+Pj4+Pj4+PiArICAgICAgICAubnVtX3BhcmVudHMg PSAxLAo+Pj4+Pj4+PiArICAgIH0sCj4+Pj4+Pj4+ICt9Owo+Pj4+Pj4+PiArCj4+Pj4+Pj4+ICtz dGF0aWMgc3RydWN0IGNsa19yZWdtYXAgYTFfZml4ZWRfcGxsID0gewo+Pj4+Pj4+PiArICAgIC5k YXRhID0gJihzdHJ1Y3QgY2xrX3JlZ21hcF9nYXRlX2RhdGEpewo+Pj4+Pj4+PiArICAgICAgICAu b2Zmc2V0ID0gQU5BQ1RSTF9GSVhQTExfQ1RSTDAsCj4+Pj4+Pj4+ICsgICAgICAgIC5iaXRfaWR4 ID0gMjAsCj4+Pj4+Pj4+ICsgICAgfSwKPj4+Pj4+Pj4gKyAgICAuaHcuaW5pdCA9ICYoc3RydWN0 IGNsa19pbml0X2RhdGEpIHsKPj4+Pj4+Pj4gKyAgICAgICAgLm5hbWUgPSAiZml4ZWRfcGxsIiwK Pj4+Pj4+Pj4gKyAgICAgICAgLm9wcyA9ICZjbGtfcmVnbWFwX2dhdGVfb3BzLAo+Pj4+Pj4+PiAr ICAgICAgICAucGFyZW50X2h3cyA9IChjb25zdCBzdHJ1Y3QgY2xrX2h3ICpbXSkgewo+Pj4+Pj4+ PiArICAgICAgICAgICAgJmExX2ZpeGVkX3BsbF9kY28uaHcKPj4+Pj4+Pj4gKyAgICAgICAgfSwK Pj4+Pj4+Pj4gKyAgICAgICAgLm51bV9wYXJlbnRzID0gMSwKPj4+Pj4+Pj4gKyAgICAgICAgLmZs YWdzID0gQ0xLX0lHTk9SRV9VTlVTRUQsCj4+Pj4+Pj4+ICsgICAgfSwKPj4+Pj4+Pj4gK307Cj4+ Pj4+Pj4+ICsKPj4+Pj4+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxsX3BhcmFtc190YWJsZSBh MV9oaWZpX3BsbF9wYXJhbXNfdGFibGVbXSA9IHsKPj4+Pj4+Pj4gKyAgICBQTExfUEFSQU1TKDEy OCwgNSksIC8qIERDTyA9IDYxNC40TSAqLwo+Pj4+Pj4+PiArfTsKPj4+Pj4+Pj4gKwo+Pj4+Pj4+ PiArc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfc2VxdWVuY2UgYTFfaGlmaV9pbml0X3JlZ3NbXSA9 IHsKPj4+Pj4+Pj4gKyAgICB7IC5yZWcgPSBBTkFDVFJMX0hJRklQTExfQ1RSTDEsICAgIC5kZWYg PSAweDAxODAwMDAwIH0sCj4+Pj4+Pj4+ICsgICAgeyAucmVnID0gQU5BQ1RSTF9ISUZJUExMX0NU UkwyLCAgICAuZGVmID0gMHgwMDAwMTEwMCB9LAo+Pj4+Pj4+PiArICAgIHsgLnJlZyA9IEFOQUNU UkxfSElGSVBMTF9DVFJMMywgICAgLmRlZiA9IDB4MTAwMjIyMDAgfSwKPj4+Pj4+Pj4gKyAgICB7 IC5yZWcgPSBBTkFDVFJMX0hJRklQTExfQ1RSTDQsICAgIC5kZWYgPSAweDAwMzAxMDAwIH0sCj4+ Pj4+Pj4+ICsgICAgeyAucmVnID0gQU5BQ1RSTF9ISUZJUExMX0NUUkwwLCAuZGVmID0gMHgwMWYx OTQ4MCB9LAo+Pj4+Pj4+PiArICAgIHsgLnJlZyA9IEFOQUNUUkxfSElGSVBMTF9DVFJMMCwgLmRl ZiA9IDB4MTFmMTk0ODAsIC5kZWxheV91cyA9Cj4+Pj4+Pj4+IDEwIH0sCj4+Pj4+Pj4+ICsgICAg eyAucmVnID0gQU5BQ1RSTF9ISUZJUExMX0NUUkwwLCAgICAuZGVmID0gMHgxNWYxMTQ4MCwgLmRl bGF5X3VzCj4+Pj4+Pj4+ID0gNDAgfSwKPj4+Pj4+Pj4gKyAgICB7IC5yZWcgPSBBTkFDVFJMX0hJ RklQTExfQ1RSTDIsICAgIC5kZWYgPSAweDAwMDAxMTQwIH0sCj4+Pj4+Pj4+ICsgICAgeyAucmVn ID0gQU5BQ1RSTF9ISUZJUExMX0NUUkwyLCAgICAuZGVmID0gMHgwMDAwMTEwMCB9LAo+Pj4+Pj4+ PiArfTsKPj4+Pj4+Pj4gKwo+Pj4+Pj4+PiArLyoKPj4+Pj4+Pj4gKyAqIFRoZSBNZXNvbiBBMSBI SUZJIFBMTCBpcyA2MTQuNE0sIGl0IHJlcXVpcmVzCj4+Pj4+Pj4+ICsgKiBhIHN0cmljdCByZWdp c3RlciBzZXF1ZW5jZSB0byBlbmFibGUgdGhlIFBMTC4KPj4+Pj4+Pj4gKyAqIHNldCBtZXNvbl9j bGtfcGNpZV9wbGxfb3BzIGFzIGl0cyBvcHMKPj4+Pj4+Pj4gKyAqLwo+Pj4+Pj4+Cj4+Pj4+Pj4g Q291bGQgeW91IGVsYWJvcmF0ZSBvbiB0aGlzID8gV2hhdCBuZWVkIHRvIGJlIGRvbmUgdG8gZW5h YmxlIHRoZSBjbG9jawo+Pj4+Pj4+ID8KPj4+Pj4+PiBBbHNvIHRoZSBISUZJIFBMTCB1c2VkIHRv IGJlIGFibGUgdG8gZG8gYSAqTE9UKiBvZiBkaWZmZXJlbnQgcmF0ZSB3aGljaAo+Pj4+Pj4+IG1p Z2h0IGJlIGRlc2lyYWJsZSBmb3IgYXVkaW8gdXNlIGNhc2UuIFdoeSBpcyB0aGlzIG9uZSByZXN0 cmljdGVkIHRvCj4+Pj4+Pj4gb25lCj4+Pj4+Pj4gcGFydGljdWxhciByYXRlID8KPj4+Pj4+Pgo+ Pj4+Pj4gVGhlIGF1ZGlvIHdvcmtpbmcgZnJlcXVlbmN5IGFyZSA0NC4xa2h6LCA0OGtoeiBhbmQg MTkya2h6Lgo+Pj4+Pj4KPj4+Pj4+IDYxNC40TSBjYW4gbWVldCB0aGUgdGhyZWUgZnJlcXVlbmN5 Lgo+Pj4+Pj4KPj4+Pj4+IGFmdGVyIHRoZSBoaWZpIHBsbCwgdGhlcmUgYXJlIHR3byBkaXZpZGVy cyBpbiBBdWRpbyBjbG9jay4KPj4+Pj4+Cj4+Pj4+PiA2MTQuNE0vMzIwMCA9IDE5Mmtoego+Pj4+ Pj4KPj4+Pj4+IDYxNC40TS8xMjgwMCA9IDQ4a2h6Cj4+Pj4+Pgo+Pj4+Pj4gNjE0LDRNLzEzOTMy ID0gNDQuMDk5OWtoego+Pj4+Pgo+Pj4+PiBJdCBkb2VzIG5vdCByZWFsbHkgYW5zd2VyIG15IHF1 ZXN0aW9uIHRob3VnaC4KPj4+Pj4gWW91IGFyZSBsb2NraW5nIGEgdXNlIGNhc2UgaGVyZSwgd2hp Y2ggaXMgMzIgYml0IHNhbXBsZSB3aWR0aAo+Pj4+Pgo+Pj4+PiBXZSBoYXZlIG90aGVyIGNvbnN0 cmFpbnQgd2l0aCB0aGUgdXBzdHJlYW0gYXVkaW8gZHJpdmVyLCBhbmQgd2UgdXN1YWxseQo+Pj4+ PiBsb29raW5nIGZvciBiYXNlIGZyZXF1ZW5jeSB0aGF0IGEgbXVsdGlwbGUgb2YgNzY4ICgyNCoz MikuCj4+Pj4+Cj4+Pj4+IElmIHlvdSBuZWVkIHlvdXIgUExMIHRvIGJlIHNldCB0byBhIHBhcnRp Y3VsYXIgcmF0ZSBmb3IgYSB1c2UgY2FzZSwgdGhlCj4+Pj4+IGNvcnJlY3Qgd2F5IGlzICJhc3Np Z25lZC1yYXRlIiBpbiBEVAo+Pj4+Pgo+Pj4+PiBzbyB0aGUgcXVlc3Rpb24gc3RpbGwgc3RhbmRz LCB0aGUgSElGSSBwbGwgYmVmb3JlIHdhcyBwcmV0dHkgZWFzeSB0byBzZXQKPj4+Pj4gYXQgYSB3 aWRlIHZhcmlldHkgb2YgcmF0ZSAoc2FtZSBhcyBHUDApIC4uLiBpcyBpdCBub3QgdGhlIGNhc2Ug YW55bW9yZSA/Cj4+Pj4+IElmIHllcywgY291bGQgeW91IGRlY3JpYmUgdGhlIGNvbnN0cmFpbnRz Lgo+Pj4+Pgo+Pj4+PiBBbGwgdGhpcyB0b29rIHVzIGEgbG9uZyB0aW1lIHRvIGZpZ3VyZSBvdXQg b24gb3VyIG93biwgd2hpY2ggaXMgd2h5IEknZAo+Pj4+PiBwcmVmZXIgdG8gZ2V0IHRoZSBwcm9w ZXIgY29uc3RyYWludHMgaW4gZnJvbSB0aGUgYmVnaW5uaW5nIHRoaXMgdGltZQo+Pj4+Pgo+Pj4+ IG9rLCBJIHdpbGwgdmVyaWZ5IGl0IGFuZCAgZGVzY3JpYmUgdGhlIGNvbnN0cmFpbnRzIGFib3V0 IGl0Cj4+Pj4+Cj4+Pj4+Pgo+Pj4+Pj4+PiArc3RhdGljIHN0cnVjdCBjbGtfcmVnbWFwIGExX2hp ZmlfcGxsID0gewo+Pj4+Pj4+PiArICAgIC5kYXRhID0gJihzdHJ1Y3QgbWVzb25fY2xrX3BsbF9k YXRhKXsKPj4+Pj4+Pj4gKyAgICAgICAgLmVuID0gewo+Pj4+Pj4+PiArICAgICAgICAgICAgLnJl Z19vZmYgPSBBTkFDVFJMX0hJRklQTExfQ1RSTDAsCj4+Pj4+Pj4+ICsgICAgICAgICAgICAuc2hp ZnQgICA9IDI4LAo+Pj4+Pj4+PiArICAgICAgICAgICAgLndpZHRoICAgPSAxLAo+Pj4+Pj4+PiAr ICAgICAgICB9LAo+Pj4+Pj4+PiArICAgICAgICAubSA9IHsKPj4+Pj4+Pj4gKyAgICAgICAgICAg IC5yZWdfb2ZmID0gQU5BQ1RSTF9ISUZJUExMX0NUUkwwLAo+Pj4+Pj4+PiArICAgICAgICAgICAg LnNoaWZ0ICAgPSAwLAo+Pj4+Pj4+PiArICAgICAgICAgICAgLndpZHRoICAgPSA4LAo+Pj4+Pj4+ PiArICAgICAgICB9LAo+Pj4+Pj4+PiArICAgICAgICAubiA9IHsKPj4+Pj4+Pj4gKyAgICAgICAg ICAgIC5yZWdfb2ZmID0gQU5BQ1RSTF9ISUZJUExMX0NUUkwwLAo+Pj4+Pj4+PiArICAgICAgICAg ICAgLnNoaWZ0ICAgPSAxMCwKPj4+Pj4+Pj4gKyAgICAgICAgICAgIC53aWR0aCAgID0gNSwKPj4+ Pj4+Pj4gKyAgICAgICAgfSwKPj4+Pj4+Pj4gKyAgICAgICAgLmZyYWMgPSB7Cj4+Pj4+Pj4+ICsg ICAgICAgICAgICAucmVnX29mZiA9IEFOQUNUUkxfSElGSVBMTF9DVFJMMSwKPj4+Pj4+Pj4gKyAg ICAgICAgICAgIC5zaGlmdCAgID0gMCwKPj4+Pj4+Pj4gKyAgICAgICAgICAgIC53aWR0aCAgID0g MTksCj4+Pj4+Pj4+ICsgICAgICAgIH0sCj4+Pj4+Pj4+ICsgICAgICAgIC5sID0gewo+Pj4+Pj4+ PiArICAgICAgICAgICAgLnJlZ19vZmYgPSBBTkFDVFJMX0hJRklQTExfU1RTLAo+Pj4+Pj4+PiAr ICAgICAgICAgICAgLnNoaWZ0ICAgPSAzMSwKPj4+Pj4+Pj4gKyAgICAgICAgICAgIC53aWR0aCAg ID0gMSwKPj4+Pj4+Pj4gKyAgICAgICAgfSwKPj4+Pj4+Pj4gKyAgICAgICAgLnRhYmxlID0gYTFf aGlmaV9wbGxfcGFyYW1zX3RhYmxlLAo+Pj4+Pj4+PiArICAgICAgICAuaW5pdF9yZWdzID0gYTFf aGlmaV9pbml0X3JlZ3MsCj4+Pj4+Pj4+ICsgICAgICAgIC5pbml0X2NvdW50ID0gQVJSQVlfU0la RShhMV9oaWZpX2luaXRfcmVncyksCj4+Pj4+Pj4+ICsgICAgfSwKPj4+Pj4+Pj4gKyAgICAuaHcu aW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2RhdGEpewo+Pj4+Pj4+PiArICAgICAgICAubmFtZSA9 ICJoaWZpX3BsbCIsCj4+Pj4+Pj4+ICsgICAgICAgIC5vcHMgPSAmbWVzb25fY2xrX3BjaWVfcGxs X29wcywKPj4+Pj4+Pj4gKyAgICAgICAgLnBhcmVudF9od3MgPSAoY29uc3Qgc3RydWN0IGNsa19o dyAqW10pIHsKPj4+Pj4+Pj4gKyAgICAgICAgICAgICZhMV94dGFsX2hpZmlwbGwuaHcKPj4+Pj4+ Pj4gKyAgICAgICAgfSwKPj4+Pj4+Pj4gKyAgICAgICAgLm51bV9wYXJlbnRzID0gMSwKPj4+Pj4+ Pj4gKyAgICB9LAo+Pj4+Pj4+PiArfTsKPj4+Pj4+Pj4gKwo+Pj4+Pj4+PiArc3RhdGljIHN0cnVj dCBjbGtfZml4ZWRfZmFjdG9yIGExX2ZjbGtfZGl2Ml9kaXYgPSB7Cj4+Pj4+Pj4+ICsgICAgLm11 bHQgPSAxLAo+Pj4+Pj4+PiArICAgIC5kaXYgPSAyLAo+Pj4+Pj4+PiArICAgIC5ody5pbml0ID0g JihzdHJ1Y3QgY2xrX2luaXRfZGF0YSl7Cj4+Pj4+Pj4+ICsgICAgICAgIC5uYW1lID0gImZjbGtf ZGl2Ml9kaXYiLAo+Pj4+Pj4+PiArICAgICAgICAub3BzID0gJmNsa19maXhlZF9mYWN0b3Jfb3Bz LAo+Pj4+Pj4+PiArICAgICAgICAucGFyZW50X2h3cyA9IChjb25zdCBzdHJ1Y3QgY2xrX2h3ICpb XSkgewo+Pj4+Pj4+PiArICAgICAgICAgICAgJmExX2ZpeGVkX3BsbC5odwo+Pj4+Pj4+PiArICAg ICAgICB9LAo+Pj4+Pj4+PiArICAgICAgICAubnVtX3BhcmVudHMgPSAxLAo+Pj4+Pj4+PiArICAg IH0sCj4+Pj4+Pj4+ICt9Owo+Pj4+Pj4+PiArCj4+Pj4+Pj4+ICtzdGF0aWMgc3RydWN0IGNsa19y ZWdtYXAgYTFfZmNsa19kaXYyID0gewo+Pj4+Pj4+PiArICAgIC5kYXRhID0gJihzdHJ1Y3QgY2xr X3JlZ21hcF9nYXRlX2RhdGEpewo+Pj4+Pj4+PiArICAgICAgICAub2Zmc2V0ID0gQU5BQ1RSTF9G SVhQTExfQ1RSTDAsCj4+Pj4+Pj4+ICsgICAgICAgIC5iaXRfaWR4ID0gMjEsCj4+Pj4+Pj4+ICsg ICAgfSwKPj4+Pj4+Pj4gKyAgICAuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2RhdGEpewo+ Pj4+Pj4+PiArICAgICAgICAubmFtZSA9ICJmY2xrX2RpdjIiLAo+Pj4+Pj4+PiArICAgICAgICAu b3BzID0gJmNsa19yZWdtYXBfZ2F0ZV9vcHMsCj4+Pj4+Pj4+ICsgICAgICAgIC5wYXJlbnRfaHdz ID0gKGNvbnN0IHN0cnVjdCBjbGtfaHcgKltdKSB7Cj4+Pj4+Pj4+ICsgICAgICAgICAgICAmYTFf ZmNsa19kaXYyX2Rpdi5odwo+Pj4+Pj4+PiArICAgICAgICB9LAo+Pj4+Pj4+PiArICAgICAgICAu bnVtX3BhcmVudHMgPSAxLAo+Pj4+Pj4+PiArICAgICAgICAvKgo+Pj4+Pj4+PiArICAgICAgICAg KiBhZGQgQ0xLX0lTX0NSSVRJQ0FMIGZsYWcgdG8gYXZvaWQgYmVpbmcgZGlzYWJsZWQgYnkgY2xr Cj4+Pj4+Pj4+IGNvcmUKPj4+Pj4+Pj4gKyAgICAgICAgICogb3IgaXRzIGNoaWxkcmVuIGNsb2Nr cy4KPj4+Pj4+Pj4gKyAgICAgICAgICovCj4+Pj4+Pj4KPj4+Pj4+PiBUaGUgbWVhbmluZyBvZiB0 aGlzIGZsYWcgaXMgYWxyZWFkeSBkb2N1bWVudGVkIGluIGNsay1wcm92aWRlci5oCj4+Pj4+Pj4g VGhlIHJlYXNvbiB3aHkgeW91IG5lZWQgdGhpcyBmbGFnIGlzIGxvdCBtb3JlIGludGVyZXN0aW5n IGhlcmUgLi4uCj4+Pj4+Pj4KPj4+Pj4+PiBTYW1lIGJlbG93Cj4+Pj4+PiBvaywgSSB3aWxsIHJl cGxhY2UgbmV3IGNvbW1lbnRzIGhlcmUuCj4+Pj4+Pj4KPj4+Pj4+Pj4gKyAgICAgICAgLmZsYWdz ID0gQ0xLX0lTX0NSSVRJQ0FMLAo+Pj4+Pj4+PiArICAgIH0sCj4+Pj4+Pj4+ICt9Owo+Pj4+Pj4+ PiArCj4+Pj4+Pj4+ICtzdGF0aWMgc3RydWN0IGNsa19maXhlZF9mYWN0b3IgYTFfZmNsa19kaXYz X2RpdiA9IHsKPj4+Pj4+Pj4gKyAgICAubXVsdCA9IDEsCj4+Pj4+Pj4+ICsgICAgLmRpdiA9IDMs Cj4+Pj4+Pj4+ICsgICAgLmh3LmluaXQgPSAmKHN0cnVjdCBjbGtfaW5pdF9kYXRhKXsKPj4+Pj4+ Pj4gKyAgICAgICAgLm5hbWUgPSAiZmNsa19kaXYzX2RpdiIsCj4+Pj4+Pj4+ICsgICAgICAgIC5v cHMgPSAmY2xrX2ZpeGVkX2ZhY3Rvcl9vcHMsCj4+Pj4+Pj4+ICsgICAgICAgIC5wYXJlbnRfaHdz ID0gKGNvbnN0IHN0cnVjdCBjbGtfaHcgKltdKSB7Cj4+Pj4+Pj4+ICsgICAgICAgICAgICAmYTFf Zml4ZWRfcGxsLmh3Cj4+Pj4+Pj4+ICsgICAgICAgIH0sCj4+Pj4+Pj4+ICsgICAgICAgIC5udW1f cGFyZW50cyA9IDEsCj4+Pj4+Pj4+ICsgICAgfSwKPj4+Pj4+Pj4gK307Cj4+Pj4+Pj4+ICsKPj4+ Pj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3JlZ21hcCBhMV9mY2xrX2RpdjMgPSB7Cj4+Pj4+Pj4+ ICsgICAgLmRhdGEgPSAmKHN0cnVjdCBjbGtfcmVnbWFwX2dhdGVfZGF0YSl7Cj4+Pj4+Pj4+ICsg ICAgICAgIC5vZmZzZXQgPSBBTkFDVFJMX0ZJWFBMTF9DVFJMMCwKPj4+Pj4+Pj4gKyAgICAgICAg LmJpdF9pZHggPSAyMiwKPj4+Pj4+Pj4gKyAgICB9LAo+Pj4+Pj4+PiArICAgIC5ody5pbml0ID0g JihzdHJ1Y3QgY2xrX2luaXRfZGF0YSl7Cj4+Pj4+Pj4+ICsgICAgICAgIC5uYW1lID0gImZjbGtf ZGl2MyIsCj4+Pj4+Pj4+ICsgICAgICAgIC5vcHMgPSAmY2xrX3JlZ21hcF9nYXRlX29wcywKPj4+ Pj4+Pj4gKyAgICAgICAgLnBhcmVudF9od3MgPSAoY29uc3Qgc3RydWN0IGNsa19odyAqW10pIHsK Pj4+Pj4+Pj4gKyAgICAgICAgICAgICZhMV9mY2xrX2RpdjNfZGl2Lmh3Cj4+Pj4+Pj4+ICsgICAg ICAgIH0sCj4+Pj4+Pj4+ICsgICAgICAgIC5udW1fcGFyZW50cyA9IDEsCj4+Pj4+Pj4+ICsgICAg ICAgIC8qCj4+Pj4+Pj4+ICsgICAgICAgICAqIGFkZCBDTEtfSVNfQ1JJVElDQUwgZmxhZyB0byBh dm9pZCBiZWluZyBkaXNhYmxlZCBieSBjbGsKPj4+Pj4+Pj4gY29yZQo+Pj4+Pj4+PiArICAgICAg ICAgKiBpdHMgY2hpbGRyZW4gY2xvY2tzLgo+Pj4+Pj4+PiArICAgICAgICAgKi8KPj4+Pj4+Pj4g KyAgICAgICAgLmZsYWdzID0gQ0xLX0lTX0NSSVRJQ0FMLAo+Pj4+Pj4+PiArICAgIH0sCj4+Pj4+ Pj4+ICt9Owo+Pj4+Pj4+PiArCj4+Pj4+Pj4+ICtzdGF0aWMgc3RydWN0IGNsa19maXhlZF9mYWN0 b3IgYTFfZmNsa19kaXY1X2RpdiA9IHsKPj4+Pj4+Pj4gKyAgICAubXVsdCA9IDEsCj4+Pj4+Pj4+ ICsgICAgLmRpdiA9IDUsCj4+Pj4+Pj4+ICsgICAgLmh3LmluaXQgPSAmKHN0cnVjdCBjbGtfaW5p dF9kYXRhKXsKPj4+Pj4+Pj4gKyAgICAgICAgLm5hbWUgPSAiZmNsa19kaXY1X2RpdiIsCj4+Pj4+ Pj4+ICsgICAgICAgIC5vcHMgPSAmY2xrX2ZpeGVkX2ZhY3Rvcl9vcHMsCj4+Pj4+Pj4+ICsgICAg ICAgIC5wYXJlbnRfaHdzID0gKGNvbnN0IHN0cnVjdCBjbGtfaHcgKltdKSB7Cj4+Pj4+Pj4+ICsg ICAgICAgICAgICAmYTFfZml4ZWRfcGxsLmh3Cj4+Pj4+Pj4+ICsgICAgICAgIH0sCj4+Pj4+Pj4+ ICsgICAgICAgIC5udW1fcGFyZW50cyA9IDEsCj4+Pj4+Pj4+ICsgICAgfSwKPj4+Pj4+Pj4gK307 Cj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3JlZ21hcCBhMV9mY2xrX2Rp djUgPSB7Cj4+Pj4+Pj4+ICsgICAgLmRhdGEgPSAmKHN0cnVjdCBjbGtfcmVnbWFwX2dhdGVfZGF0 YSl7Cj4+Pj4+Pj4+ICsgICAgICAgIC5vZmZzZXQgPSBBTkFDVFJMX0ZJWFBMTF9DVFJMMCwKPj4+ Pj4+Pj4gKyAgICAgICAgLmJpdF9pZHggPSAyMywKPj4+Pj4+Pj4gKyAgICB9LAo+Pj4+Pj4+PiAr ICAgIC5ody5pbml0ID0gJihzdHJ1Y3QgY2xrX2luaXRfZGF0YSl7Cj4+Pj4+Pj4+ICsgICAgICAg IC5uYW1lID0gImZjbGtfZGl2NSIsCj4+Pj4+Pj4+ICsgICAgICAgIC5vcHMgPSAmY2xrX3JlZ21h cF9nYXRlX29wcywKPj4+Pj4+Pj4gKyAgICAgICAgLnBhcmVudF9od3MgPSAoY29uc3Qgc3RydWN0 IGNsa19odyAqW10pIHsKPj4+Pj4+Pj4gKyAgICAgICAgICAgICZhMV9mY2xrX2RpdjVfZGl2Lmh3 Cj4+Pj4+Pj4+ICsgICAgICAgIH0sCj4+Pj4+Pj4+ICsgICAgICAgIC5udW1fcGFyZW50cyA9IDEs Cj4+Pj4+Pj4+ICsgICAgICAgIC8qCj4+Pj4+Pj4+ICsgICAgICAgICAqIGFkZCBDTEtfSVNfQ1JJ VElDQUwgZmxhZyB0byBhdm9pZCBiZWluZyBkaXNhYmxlZCBieSBjbGsKPj4+Pj4+Pj4gY29yZQo+ Pj4+Pj4+PiArICAgICAgICAgKiBpdHMgY2hpbGRyZW4gY2xvY2tzLgo+Pj4+Pj4+PiArICAgICAg ICAgKi8KPj4+Pj4+Pj4gKyAgICAgICAgLmZsYWdzID0gQ0xLX0lTX0NSSVRJQ0FMLAo+Pj4+Pj4+ PiArICAgIH0sCj4+Pj4+Pj4+ICt9Owo+Pj4+Pj4+PiArCj4+Pj4+Pj4+ICtzdGF0aWMgc3RydWN0 IGNsa19maXhlZF9mYWN0b3IgYTFfZmNsa19kaXY3X2RpdiA9IHsKPj4+Pj4+Pj4gKyAgICAubXVs dCA9IDEsCj4+Pj4+Pj4+ICsgICAgLmRpdiA9IDcsCj4+Pj4+Pj4+ICsgICAgLmh3LmluaXQgPSAm KHN0cnVjdCBjbGtfaW5pdF9kYXRhKXsKPj4+Pj4+Pj4gKyAgICAgICAgLm5hbWUgPSAiZmNsa19k aXY3X2RpdiIsCj4+Pj4+Pj4+ICsgICAgICAgIC5vcHMgPSAmY2xrX2ZpeGVkX2ZhY3Rvcl9vcHMs Cj4+Pj4+Pj4+ICsgICAgICAgIC5wYXJlbnRfaHdzID0gKGNvbnN0IHN0cnVjdCBjbGtfaHcgKltd KSB7Cj4+Pj4+Pj4+ICsgICAgICAgICAgICAmYTFfZml4ZWRfcGxsLmh3Cj4+Pj4+Pj4+ICsgICAg ICAgIH0sCj4+Pj4+Pj4+ICsgICAgICAgIC5udW1fcGFyZW50cyA9IDEsCj4+Pj4+Pj4+ICsgICAg fSwKPj4+Pj4+Pj4gK307Cj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3Jl Z21hcCBhMV9mY2xrX2RpdjcgPSB7Cj4+Pj4+Pj4+ICsgICAgLmRhdGEgPSAmKHN0cnVjdCBjbGtf cmVnbWFwX2dhdGVfZGF0YSl7Cj4+Pj4+Pj4+ICsgICAgICAgIC5vZmZzZXQgPSBBTkFDVFJMX0ZJ WFBMTF9DVFJMMCwKPj4+Pj4+Pj4gKyAgICAgICAgLmJpdF9pZHggPSAyMywKPj4+Pj4+Pj4gKyAg ICB9LAo+Pj4+Pj4+PiArICAgIC5ody5pbml0ID0gJihzdHJ1Y3QgY2xrX2luaXRfZGF0YSl7Cj4+ Pj4+Pj4+ICsgICAgICAgIC5uYW1lID0gImZjbGtfZGl2NyIsCj4+Pj4+Pj4+ICsgICAgICAgIC5v cHMgPSAmY2xrX3JlZ21hcF9nYXRlX29wcywKPj4+Pj4+Pj4gKyAgICAgICAgLnBhcmVudF9od3Mg PSAoY29uc3Qgc3RydWN0IGNsa19odyAqW10pIHsKPj4+Pj4+Pj4gKyAgICAgICAgICAgICZhMV9m Y2xrX2RpdjdfZGl2Lmh3Cj4+Pj4+Pj4+ICsgICAgICAgIH0sCj4+Pj4+Pj4+ICsgICAgICAgIC5u dW1fcGFyZW50cyA9IDEsCj4+Pj4+Pj4+ICsgICAgICAgIC8qCj4+Pj4+Pj4+ICsgICAgICAgICAq IGFkZCBDTEtfSVNfQ1JJVElDQUwgZmxhZyB0byBhdm9pZCBiZWluZyBkaXNhYmxlZCBieSBjbGsK Pj4+Pj4+Pj4gY29yZQo+Pj4+Pj4+PiArICAgICAgICAgKiBvciBpdHMgY2hpbGRyZW4gY2xvY2su Cj4+Pj4+Pj4+ICsgICAgICAgICAqLwo+Pj4+Pj4+PiArICAgICAgICAuZmxhZ3MgPSBDTEtfSVNf Q1JJVElDQUwsCj4+Pj4+Pj4+ICsgICAgfSwKPj4+Pj4+Pj4gK307Cj4+Pj4+Pj4+ICsKPj4+IFsu Li5dCj4+Pj4+Pj4+IC0tIAo+Pj4+Pj4+PiAxLjkuMQo+Pj4+Pj4+Cj4+Pj4+Pj4gLgo+Pj4+Pj4+ Cj4+Pj4+Cj4+Pj4+IC4KPj4+Pj4KPj4KPj4gLgo+PgoKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFtbG9naWMgbWFpbGluZyBsaXN0CmxpbnV4 LWFtbG9naWNAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFtbG9naWMK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7D424C4CECE for ; Mon, 14 Oct 2019 14:55:48 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 2744D21882 for ; Mon, 14 Oct 2019 14:55:48 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20150623.gappssmtp.com header.i=@baylibre-com.20150623.gappssmtp.com header.b="wyN2E2Em" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1733057AbfJNOzr (ORCPT ); Mon, 14 Oct 2019 10:55:47 -0400 Received: from mail-wm1-f65.google.com ([209.85.128.65]:55351 "EHLO mail-wm1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731121AbfJNOzr (ORCPT ); Mon, 14 Oct 2019 10:55:47 -0400 Received: by mail-wm1-f65.google.com with SMTP id a6so17587175wma.5 for ; Mon, 14 Oct 2019 07:55:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=references:user-agent:from:to:cc:subject:in-reply-to:date :message-id:mime-version:content-transfer-encoding; bh=cKxSKPHeDEKsisSnNEmUyMcq+91zQ2+gERMxgkYLYtY=; b=wyN2E2Emv4JghE1iYrUIbDT4Zzu3VAbbeU1J1JBtmZVbmAti5GZd7Tj1reAmn3B9LO a38j8u2NZUdd6Nj3PXVv+srEHeVHCu1dBdhYTz0uiS0iEcjdlZJd5NeQ5pVenosb5h3R /aWisL1JdHaXIsmsIGuY1tMZOTS8cT5UzCrT3Y2KHV9Q5FXbnaswkJLxa23xxpVAPW8g Okt/+eEMDRx7sI/N/wr31Zc98AdWawa2joLRaKY+fxu8vq8kymxGE0q197zJYBmk0wUQ 4WFS5wLOZBFHGTaGbYjvQUiwxY4KFejc14thHE5Rj0gcw9y/LC/QjzituE81iRJpug19 BPOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:references:user-agent:from:to:cc:subject :in-reply-to:date:message-id:mime-version:content-transfer-encoding; bh=cKxSKPHeDEKsisSnNEmUyMcq+91zQ2+gERMxgkYLYtY=; b=pfb3IBjbwDfKffX2mRxQMVdwgOa4wh3pzsZX+WBQGO1z8BquhkVtN6zr9YSoYL2ahs cgM2DsdJhuTC486ZLFNDo8qkHwjAQlqAbL8yyQBdk6PYdZ8qGkpV6pr+dElWJrTgzMXc h2YGCQHYlgxCNO/SjP/J2BbzRWF6QsaeSUeE4QerC1hur8mGhOWHMJeMw8W700Yvm8gp n6x7BkjW4QyHzrTY70+S4G5xORaNIvOqFbUdizTvKr5FbO0xOy0yjdVKbzDjg4vGo0EV AiK6KV2XomI1m+J6cvVuFKHRNsHq0lK+1BnrMVfNOT8LUkePxxegN7mkPfM5WyroXFX/ /e/Q== X-Gm-Message-State: APjAAAV2RoZXXlHEmzWeEnLTNMwk4zH+isBL1owTkG14JMtm36E6jHro RhXVzSWQsjqQ2x7GnfYJ2RcSWevMkWA= X-Google-Smtp-Source: APXvYqwTHDML4CaY0PDiA4aAph9wtIdNGKdMkSECTHHfsy6Kztg4f7KYPXOeg7W88c+f34662YTFBg== X-Received: by 2002:a7b:caea:: with SMTP id t10mr12127353wml.38.1571064945291; Mon, 14 Oct 2019 07:55:45 -0700 (PDT) Received: from localhost (lmontsouris-657-1-212-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) by smtp.gmail.com with ESMTPSA id 90sm27622833wrr.1.2019.10.14.07.55.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Oct 2019 07:55:44 -0700 (PDT) References: <1569411888-98116-1-git-send-email-jian.hu@amlogic.com> <1569411888-98116-3-git-send-email-jian.hu@amlogic.com> <1j1rw4mmzw.fsf@starbuckisacylon.baylibre.com> <1jimpd27cb.fsf@starbuckisacylon.baylibre.com> <5fd57563-0c34-be14-132a-74fd2c5a5275@amlogic.com> <052b0a5c-c913-a9ff-65b9-5b7eb0aecd6e@amlogic.com> <1jsgnz20jq.fsf@starbuckisacylon.baylibre.com> <8ae988c2-68f5-603e-843b-9cd70e4d4349@amlogic.com> User-agent: mu4e 1.3.3; emacs 26.2 From: Jerome Brunet To: Jian Hu , Stephen Boyd Cc: Neil Armstrong , Jianxin Pan , Kevin Hilman , "Martin Blumenstingl" , Michael Turquette , Qiufang Dai , linux-clk@vger.kernel.org, linux-amlogic@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org Subject: Re: [PATCH 2/2] clk: meson: a1: add support for Amlogic A1 clock driver In-reply-to: <8ae988c2-68f5-603e-843b-9cd70e4d4349@amlogic.com> Date: Mon, 14 Oct 2019 16:55:43 +0200 Message-ID: <1jr23f1imo.fsf@starbuckisacylon.baylibre.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Sender: linux-clk-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-clk@vger.kernel.org On Mon 14 Oct 2019 at 15:42, Jian Hu wrote: >>> if peripheral clocks probe first, it will fail to get >>> fixed_pll clocks. A lot of peripheral clocks parent are fclk_div2/3/5/7. >>> and we can not get fclk_div2/3/5/7 clocks. >> >> What does "fail" mean ? >> I intended to get clock using devm_clk_get API in each driver, In this=20 > scene=EF=BC=8Cit will get failed because of the clock not being reigstere= d. In > fact, we could not use devm_clk_get. Unless I missed somthing, I don't see why you would need to call devm_clk_get(). This is now handled directly by the framework. >>> >>> I can think of two solutions: >>> 1) Do not describe xtal_fixpll, xtal_hifipll. >>> that is to say, do not decribe the SYS_OSCIN_CTRL register. >>> >>> 2) Put peripheral and pll clock driver in one driver. >> >> Those are work arounds. Actually fixing the problem is usually >> preferable. >> >> So if rephrase your problem: >> >> * We have 2 clock controllers (A and B) >> * Clock are passed between the controllers using DT >> * We have a PLL in controller B which is used by clocks in >> controller A. >> * the PLL parent clock is in controller A. >> > Yeah, it is the scene. >> =3D> So if I understand correctly you are saying that it will "fail" >> because there is a circular dependency between controller A and B, right >> ? >> >> Do you have evidence that your problem comes from this circular >> dependency ? >> > I have realized the peripheral driver and PLL drivers, > > PLL driver probes first, Peripheral clock driver is the second. It should work regarless of the order. > > In addition=EF=BC=8Cfor A1 SoC=EF=BC=8C it will not work using meson_clk_= pll_ops, > > it needs strictly sequence=EF=BC=8Cso maybe another ops is required.hifi = pll will > be sent with sys pll and CPU clock driver. The PCie PLL has a good reason to have a single frequency, only one is need= ed That's the case the case of the HIFI PLL which, as explained in previous mails, needs to provide more that the single frenquency you have described. If the pll driver needs to extended with new ops that's fine. Please explain this "strict sequence" you are refering too. What is part of the initial settings, what needs to be done each time ? >> AFAIK, CCF will orphan the clock and continue if the parent is not >> available. Later, when the parent comes up, the orphan will be >> reparented. >> >> IOW, the problem you are reporting should already be covered by CCF. >> >>> >>> And which sulution is better above two? >> >> Neither, I'm afraid >> >>> >>> Or maybe other good ideas for it? >> >> My bet would be that an important clocks (maybe more than 1) is being >> gated during the init process. >> >> Maybe you should try the command line parameter "clk_ignore_unused" >> until you get things running with your 2 controllers. >> >>> >>> On 2019/9/29 17:38, Jian Hu wrote: >>>> >>>> >>>> On 2019/9/27 21:32, Jerome Brunet wrote: >>>>> >>>>> On Fri 27 Sep 2019 at 11:52, Jian Hu wrote: >>>>> >>>>>> Hi, Jerome >>>>>> >>>>>> Thank you for review. >>>>>> >>>>>> On 2019/9/25 23:09, Jerome Brunet wrote: >>>>>>> On Wed 25 Sep 2019 at 19:44, Jian Hu wrote: >>>>>>> >>>>>>>> The Amlogic A1 clock includes three parts: >>>>>>>> peripheral clocks, pll clocks, CPU clocks. >>>>>>>> sys pll and CPU clocks will be sent in next patch. >>>>>>>> >>>>>>>> Unlike the previous series, there is no EE/AO domain >>>>>>>> in A1 CLK controllers. >>>>>>>> >>>>>>>> Signed-off-by: Jian Hu >>>>>>>> Signed-off-by: Jianxin Pan >>>>>>>> --- >>>>>>>> arch/arm64/Kconfig.platforms | 1 + >>>>>>>> drivers/clk/meson/Kconfig | 10 + >>>>>>>> drivers/clk/meson/Makefile | 1 + >>>>>>>> drivers/clk/meson/a1.c | 2617 >>>>>>>> ++++++++++++++++++++++++++++++++++++++++++ >>>>>>>> drivers/clk/meson/a1.h | 172 +++ >>>>>>>> 5 files changed, 2801 insertions(+) >>>>>>>> create mode 100644 drivers/clk/meson/a1.c >>>>>>>> create mode 100644 drivers/clk/meson/a1.h >>>>>>>> >>> [...] >>>>>>>> diff --git a/drivers/clk/meson/a1.c b/drivers/clk/meson/a1.c >>>>>>>> new file mode 100644 >>>>>>>> index 0000000..26edae0f >>>>>>>> --- /dev/null >>>>>>>> +++ b/drivers/clk/meson/a1.c >>>>>>>> @@ -0,0 +1,2617 @@ >>>>>>>> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) >>>>>>>> +/* >>>>>>>> + * Copyright (c) 2019 Amlogic, Inc. All rights reserved. >>>>>>>> + */ >>>>>>>> + >>>>>>>> +#include >>>>>>>> +#include >>>>>>>> +#include >>>>>>>> +#include >>>>>>>> +#include >>>>>>>> +#include "clk-mpll.h" >>>>>>>> +#include "clk-pll.h" >>>>>>>> +#include "clk-regmap.h" >>>>>>>> +#include "vid-pll-div.h" >>>>>>>> +#include "clk-dualdiv.h" >>>>>>>> +#include "meson-eeclk.h" >>>>>>>> +#include "a1.h" >>>>>>>> + >>>>>>>> +/* PLLs clock in gates, its parent is xtal */ >>>>>>>> +static struct clk_regmap a1_xtal_clktree =3D { >>>>>>>> + .data =3D &(struct clk_regmap_gate_data){ >>>>>>>> + .offset =3D SYS_OSCIN_CTRL, >>>>>>>> + .bit_idx =3D 0, >>>>>>>> + }, >>>>>>>> + .hw.init =3D &(struct clk_init_data) { >>>>>>>> + .name =3D "xtal_clktree", >>>>>>>> + .ops =3D &clk_regmap_gate_ops, >>>>>>>> + .parent_data =3D &(const struct clk_parent_data) { >>>>>>>> + .fw_name =3D "xtal", >>>>>>>> + }, >>>>>>>> + .num_parents =3D 1, >>>>>>>> + .flags =3D CLK_IS_CRITICAL, >>>>>>> >>>>>>> Is CCF even expected to touch this ever ? what about RO ops ? >>>>>>> Please review your other clocks with this in mind >>>>>>> >>>>>> the clock should not be changed at runtime.clk_regmap_gate_ro_ops >>>>>> is a good idea. Set RO ops and remove the CLK_IS_CRITICAL flag. >>>>>>>> + }, >>>>>>>> +}; >>>>>>>> + >>>>>>>> +static struct clk_regmap a1_xtal_fixpll =3D { >>>>>>>> + .data =3D &(struct clk_regmap_gate_data){ >>>>>>>> + .offset =3D SYS_OSCIN_CTRL, >>>>>>>> + .bit_idx =3D 1, >>>>>>>> + }, >>>>>>>> + .hw.init =3D &(struct clk_init_data) { >>>>>>>> + .name =3D "xtal_fixpll", >>>>>>>> + .ops =3D &clk_regmap_gate_ops, >>>>>>>> + .parent_data =3D &(const struct clk_parent_data) { >>>>>>>> + .fw_name =3D "xtal", >>>>>>>> + }, >>>>>>>> + .num_parents =3D 1, >>>>>>>> + .flags =3D CLK_IS_CRITICAL, >>>>>>>> + }, >>>>>>>> +}; >>>>>>>> + >>>>>>>> +static struct clk_regmap a1_xtal_usb_phy =3D { >>>>>>>> + .data =3D &(struct clk_regmap_gate_data){ >>>>>>>> + .offset =3D SYS_OSCIN_CTRL, >>>>>>>> + .bit_idx =3D 2, >>>>>>>> + }, >>>>>>>> + .hw.init =3D &(struct clk_init_data) { >>>>>>>> + .name =3D "xtal_usb_phy", >>>>>>>> + .ops =3D &clk_regmap_gate_ops, >>>>>>>> + .parent_data =3D &(const struct clk_parent_data) { >>>>>>>> + .fw_name =3D "xtal", >>>>>>>> + }, >>>>>>>> + .num_parents =3D 1, >>>>>>>> + .flags =3D CLK_IS_CRITICAL, >>>>>>> >>>>>>> How is an USB clock critical to the system ? >>>>>>> Please review your other clocks with comment in mind ... >>>>>> the usb clock does not affect the system, >>>>>> remove the CLK_IS_CRITICAL flag >>>>>>> >>>>>>>> + }, >>>>>>>> +}; >>>>>>>> + >>>>>>>> +static struct clk_regmap a1_xtal_usb_ctrl =3D { >>>>>>>> + .data =3D &(struct clk_regmap_gate_data){ >>>>>>>> + .offset =3D SYS_OSCIN_CTRL, >>>>>>>> + .bit_idx =3D 3, >>>>>>>> + }, >>>>>>>> + .hw.init =3D &(struct clk_init_data) { >>>>>>>> + .name =3D "xtal_usb_ctrl", >>>>>>>> + .ops =3D &clk_regmap_gate_ops, >>>>>>>> + .parent_data =3D &(const struct clk_parent_data) { >>>>>>>> + .fw_name =3D "xtal", >>>>>>>> + }, >>>>>>>> + .num_parents =3D 1, >>>>>>>> + .flags =3D CLK_IS_CRITICAL, >>>>>>>> + }, >>>>>>>> +}; >>>>>> the usb clock does not affect the system, >>>>>> remove the CLK_IS_CRITICAL flag >>>>>>>> + >>>>>>>> +static struct clk_regmap a1_xtal_hifipll =3D { >>>>>>>> + .data =3D &(struct clk_regmap_gate_data){ >>>>>>>> + .offset =3D SYS_OSCIN_CTRL, >>>>>>>> + .bit_idx =3D 4, >>>>>>>> + }, >>>>>>>> + .hw.init =3D &(struct clk_init_data) { >>>>>>>> + .name =3D "xtal_hifipll", >>>>>>>> + .ops =3D &clk_regmap_gate_ops, >>>>>>>> + .parent_data =3D &(const struct clk_parent_data) { >>>>>>>> + .fw_name =3D "xtal", >>>>>>>> + }, >>>>>>>> + .num_parents =3D 1, >>>>>>>> + .flags =3D CLK_IS_CRITICAL, >>>>>>>> + }, >>>>>>>> +}; >>>>>> CLK_IS_CRITICAL is need to lock hifi pll. >>>>> >>>>> That's not how CCF works, this falg is not ok here. >>>>> CCF will enable this clock before calling enable on your hifi pll >>>>> >>>> ok=EF=BC=8C I will remove it. >>>>>>>> + >>>>>>>> +static struct clk_regmap a1_xtal_syspll =3D { >>>>>>>> + .data =3D &(struct clk_regmap_gate_data){ >>>>>>>> + .offset =3D SYS_OSCIN_CTRL, >>>>>>>> + .bit_idx =3D 5, >>>>>>>> + }, >>>>>>>> + .hw.init =3D &(struct clk_init_data) { >>>>>>>> + .name =3D "xtal_syspll", >>>>>>>> + .ops =3D &clk_regmap_gate_ops, >>>>>>>> + .parent_data =3D &(const struct clk_parent_data) { >>>>>>>> + .fw_name =3D "xtal", >>>>>>>> + }, >>>>>>>> + .num_parents =3D 1, >>>>>>>> + .flags =3D CLK_IS_CRITICAL, >>>>>>>> + }, >>>>>>>> +}; >>>>>>>> + >>>>>> when CPU clock is at fixed clock, sys pll >>>>>> will be disabled, xtal_syspll will be disabled too. >>>>>> when setting sys pll, call clk_set_rate to lock >>>>>> sys pll, add RO ops to avoid disabling the clock >>>>> >>>>> Again not Ok. >>>>> If you mechanism to lock the PLL is properly implemented in the enable >>>>> callback of the sys pll, still kind of work around are not needed >>>>> >>>>> This has worked on the pll we had so far. >>>>> >>>> ok, I will remove it. >>>>>> >>>>>>>> +static struct clk_regmap a1_xtal_dds =3D { >>>>>>>> + .data =3D &(struct clk_regmap_gate_data){ >>>>>>>> + .offset =3D SYS_OSCIN_CTRL, >>>>>>>> + .bit_idx =3D 6, >>>>>>>> + }, >>>>>>>> + .hw.init =3D &(struct clk_init_data) { >>>>>>>> + .name =3D "xtal_dds", >>>>>>>> + .ops =3D &clk_regmap_gate_ops, >>>>>>>> + .parent_data =3D &(const struct clk_parent_data) { >>>>>>>> + .fw_name =3D "xtal", >>>>>>>> + }, >>>>>>>> + .num_parents =3D 1, >>>>>>>> + .flags =3D CLK_IS_CRITICAL, >>>>>>>> + }, >>>>>>>> +}; >>>>>> CLK_IS_CRITICAL is need to lock dds >>>>>>>> + >>>>>>>> +/* fixed pll =3D 1536M >>>>>>>> + * >>>>>>>> + * fixed pll ----- fclk_div2 =3D 768M >>>>>>>> + * | >>>>>>>> + * ----- fclk_div3 =3D 512M >>>>>>>> + * | >>>>>>>> + * ----- fclk_div5 =3D 307.2M >>>>>>>> + * | >>>>>>>> + * ----- fclk_div7 =3D 219.4M >>>>>>>> + */ >>>>>>> >>>>>>> The framework will make those calculation ... you can remove this >>>>>>> >>>>>> ok, I will remote the comment. >>>>>>>> +static struct clk_regmap a1_fixed_pll_dco =3D { >>>>>>>> + .data =3D &(struct meson_clk_pll_data){ >>>>>>>> + .en =3D { >>>>>>>> + .reg_off =3D ANACTRL_FIXPLL_CTRL0, >>>>>>>> + .shift =3D 28, >>>>>>>> + .width =3D 1, >>>>>>>> + }, >>>>>>>> + .m =3D { >>>>>>>> + .reg_off =3D ANACTRL_FIXPLL_CTRL0, >>>>>>>> + .shift =3D 0, >>>>>>>> + .width =3D 8, >>>>>>>> + }, >>>>>>>> + .n =3D { >>>>>>>> + .reg_off =3D ANACTRL_FIXPLL_CTRL0, >>>>>>>> + .shift =3D 10, >>>>>>>> + .width =3D 5, >>>>>>>> + }, >>>>>>>> + .frac =3D { >>>>>>>> + .reg_off =3D ANACTRL_FIXPLL_CTRL1, >>>>>>>> + .shift =3D 0, >>>>>>>> + .width =3D 19, >>>>>>>> + }, >>>>>>>> + .l =3D { >>>>>>>> + .reg_off =3D ANACTRL_FIXPLL_CTRL0, >>>>>>>> + .shift =3D 31, >>>>>>>> + .width =3D 1, >>>>>>>> + }, >>>>>>>> + .rst =3D { >>>>>>>> + .reg_off =3D ANACTRL_FIXPLL_CTRL0, >>>>>>>> + .shift =3D 29, >>>>>>>> + .width =3D 1, >>>>>>>> + }, >>>>>>>> + }, >>>>>>>> + .hw.init =3D &(struct clk_init_data){ >>>>>>>> + .name =3D "fixed_pll_dco", >>>>>>>> + .ops =3D &meson_clk_pll_ro_ops, >>>>>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>>>>> + &a1_xtal_fixpll.hw >>>>>>>> + }, >>>>>>>> + .num_parents =3D 1, >>>>>>>> + }, >>>>>>>> +}; >>>>>>>> + >>>>>>>> +static struct clk_regmap a1_fixed_pll =3D { >>>>>>>> + .data =3D &(struct clk_regmap_gate_data){ >>>>>>>> + .offset =3D ANACTRL_FIXPLL_CTRL0, >>>>>>>> + .bit_idx =3D 20, >>>>>>>> + }, >>>>>>>> + .hw.init =3D &(struct clk_init_data) { >>>>>>>> + .name =3D "fixed_pll", >>>>>>>> + .ops =3D &clk_regmap_gate_ops, >>>>>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>>>>> + &a1_fixed_pll_dco.hw >>>>>>>> + }, >>>>>>>> + .num_parents =3D 1, >>>>>>>> + .flags =3D CLK_IGNORE_UNUSED, >>>>>>>> + }, >>>>>>>> +}; >>>>>>>> + >>>>>>>> +static const struct pll_params_table a1_hifi_pll_params_table[] = =3D { >>>>>>>> + PLL_PARAMS(128, 5), /* DCO =3D 614.4M */ >>>>>>>> +}; >>>>>>>> + >>>>>>>> +static const struct reg_sequence a1_hifi_init_regs[] =3D { >>>>>>>> + { .reg =3D ANACTRL_HIFIPLL_CTRL1, .def =3D 0x01800000 }, >>>>>>>> + { .reg =3D ANACTRL_HIFIPLL_CTRL2, .def =3D 0x00001100 }, >>>>>>>> + { .reg =3D ANACTRL_HIFIPLL_CTRL3, .def =3D 0x10022200 }, >>>>>>>> + { .reg =3D ANACTRL_HIFIPLL_CTRL4, .def =3D 0x00301000 }, >>>>>>>> + { .reg =3D ANACTRL_HIFIPLL_CTRL0, .def =3D 0x01f19480 }, >>>>>>>> + { .reg =3D ANACTRL_HIFIPLL_CTRL0, .def =3D 0x11f19480, .delay= _us =3D >>>>>>>> 10 }, >>>>>>>> + { .reg =3D ANACTRL_HIFIPLL_CTRL0, .def =3D 0x15f11480, .de= lay_us >>>>>>>> =3D 40 }, >>>>>>>> + { .reg =3D ANACTRL_HIFIPLL_CTRL2, .def =3D 0x00001140 }, >>>>>>>> + { .reg =3D ANACTRL_HIFIPLL_CTRL2, .def =3D 0x00001100 }, >>>>>>>> +}; >>>>>>>> + >>>>>>>> +/* >>>>>>>> + * The Meson A1 HIFI PLL is 614.4M, it requires >>>>>>>> + * a strict register sequence to enable the PLL. >>>>>>>> + * set meson_clk_pcie_pll_ops as its ops >>>>>>>> + */ >>>>>>> >>>>>>> Could you elaborate on this ? What need to be done to enable the cl= ock >>>>>>> ? >>>>>>> Also the HIFI PLL used to be able to do a *LOT* of different rate w= hich >>>>>>> might be desirable for audio use case. Why is this one restricted to >>>>>>> one >>>>>>> particular rate ? >>>>>>> >>>>>> The audio working frequency are 44.1khz, 48khz and 192khz. >>>>>> >>>>>> 614.4M can meet the three frequency. >>>>>> >>>>>> after the hifi pll, there are two dividers in Audio clock. >>>>>> >>>>>> 614.4M/3200 =3D 192khz >>>>>> >>>>>> 614.4M/12800 =3D 48khz >>>>>> >>>>>> 614,4M/13932 =3D 44.0999khz >>>>> >>>>> It does not really answer my question though. >>>>> You are locking a use case here, which is 32 bit sample width >>>>> >>>>> We have other constraint with the upstream audio driver, and we usual= ly >>>>> looking for base frequency that a multiple of 768 (24*32). >>>>> >>>>> If you need your PLL to be set to a particular rate for a use case, t= he >>>>> correct way is "assigned-rate" in DT >>>>> >>>>> so the question still stands, the HIFI pll before was pretty easy to = set >>>>> at a wide variety of rate (same as GP0) ... is it not the case anymor= e ? >>>>> If yes, could you decribe the constraints. >>>>> >>>>> All this took us a long time to figure out on our own, which is why I= 'd >>>>> prefer to get the proper constraints in from the beginning this time >>>>> >>>> ok, I will verify it and describe the constraints about it >>>>> >>>>>> >>>>>>>> +static struct clk_regmap a1_hifi_pll =3D { >>>>>>>> + .data =3D &(struct meson_clk_pll_data){ >>>>>>>> + .en =3D { >>>>>>>> + .reg_off =3D ANACTRL_HIFIPLL_CTRL0, >>>>>>>> + .shift =3D 28, >>>>>>>> + .width =3D 1, >>>>>>>> + }, >>>>>>>> + .m =3D { >>>>>>>> + .reg_off =3D ANACTRL_HIFIPLL_CTRL0, >>>>>>>> + .shift =3D 0, >>>>>>>> + .width =3D 8, >>>>>>>> + }, >>>>>>>> + .n =3D { >>>>>>>> + .reg_off =3D ANACTRL_HIFIPLL_CTRL0, >>>>>>>> + .shift =3D 10, >>>>>>>> + .width =3D 5, >>>>>>>> + }, >>>>>>>> + .frac =3D { >>>>>>>> + .reg_off =3D ANACTRL_HIFIPLL_CTRL1, >>>>>>>> + .shift =3D 0, >>>>>>>> + .width =3D 19, >>>>>>>> + }, >>>>>>>> + .l =3D { >>>>>>>> + .reg_off =3D ANACTRL_HIFIPLL_STS, >>>>>>>> + .shift =3D 31, >>>>>>>> + .width =3D 1, >>>>>>>> + }, >>>>>>>> + .table =3D a1_hifi_pll_params_table, >>>>>>>> + .init_regs =3D a1_hifi_init_regs, >>>>>>>> + .init_count =3D ARRAY_SIZE(a1_hifi_init_regs), >>>>>>>> + }, >>>>>>>> + .hw.init =3D &(struct clk_init_data){ >>>>>>>> + .name =3D "hifi_pll", >>>>>>>> + .ops =3D &meson_clk_pcie_pll_ops, >>>>>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>>>>> + &a1_xtal_hifipll.hw >>>>>>>> + }, >>>>>>>> + .num_parents =3D 1, >>>>>>>> + }, >>>>>>>> +}; >>>>>>>> + >>>>>>>> +static struct clk_fixed_factor a1_fclk_div2_div =3D { >>>>>>>> + .mult =3D 1, >>>>>>>> + .div =3D 2, >>>>>>>> + .hw.init =3D &(struct clk_init_data){ >>>>>>>> + .name =3D "fclk_div2_div", >>>>>>>> + .ops =3D &clk_fixed_factor_ops, >>>>>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>>>>> + &a1_fixed_pll.hw >>>>>>>> + }, >>>>>>>> + .num_parents =3D 1, >>>>>>>> + }, >>>>>>>> +}; >>>>>>>> + >>>>>>>> +static struct clk_regmap a1_fclk_div2 =3D { >>>>>>>> + .data =3D &(struct clk_regmap_gate_data){ >>>>>>>> + .offset =3D ANACTRL_FIXPLL_CTRL0, >>>>>>>> + .bit_idx =3D 21, >>>>>>>> + }, >>>>>>>> + .hw.init =3D &(struct clk_init_data){ >>>>>>>> + .name =3D "fclk_div2", >>>>>>>> + .ops =3D &clk_regmap_gate_ops, >>>>>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>>>>> + &a1_fclk_div2_div.hw >>>>>>>> + }, >>>>>>>> + .num_parents =3D 1, >>>>>>>> + /* >>>>>>>> + * add CLK_IS_CRITICAL flag to avoid being disabled by clk >>>>>>>> core >>>>>>>> + * or its children clocks. >>>>>>>> + */ >>>>>>> >>>>>>> The meaning of this flag is already documented in clk-provider.h >>>>>>> The reason why you need this flag is lot more interesting here ... >>>>>>> >>>>>>> Same below >>>>>> ok, I will replace new comments here. >>>>>>> >>>>>>>> + .flags =3D CLK_IS_CRITICAL, >>>>>>>> + }, >>>>>>>> +}; >>>>>>>> + >>>>>>>> +static struct clk_fixed_factor a1_fclk_div3_div =3D { >>>>>>>> + .mult =3D 1, >>>>>>>> + .div =3D 3, >>>>>>>> + .hw.init =3D &(struct clk_init_data){ >>>>>>>> + .name =3D "fclk_div3_div", >>>>>>>> + .ops =3D &clk_fixed_factor_ops, >>>>>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>>>>> + &a1_fixed_pll.hw >>>>>>>> + }, >>>>>>>> + .num_parents =3D 1, >>>>>>>> + }, >>>>>>>> +}; >>>>>>>> + >>>>>>>> +static struct clk_regmap a1_fclk_div3 =3D { >>>>>>>> + .data =3D &(struct clk_regmap_gate_data){ >>>>>>>> + .offset =3D ANACTRL_FIXPLL_CTRL0, >>>>>>>> + .bit_idx =3D 22, >>>>>>>> + }, >>>>>>>> + .hw.init =3D &(struct clk_init_data){ >>>>>>>> + .name =3D "fclk_div3", >>>>>>>> + .ops =3D &clk_regmap_gate_ops, >>>>>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>>>>> + &a1_fclk_div3_div.hw >>>>>>>> + }, >>>>>>>> + .num_parents =3D 1, >>>>>>>> + /* >>>>>>>> + * add CLK_IS_CRITICAL flag to avoid being disabled by clk >>>>>>>> core >>>>>>>> + * its children clocks. >>>>>>>> + */ >>>>>>>> + .flags =3D CLK_IS_CRITICAL, >>>>>>>> + }, >>>>>>>> +}; >>>>>>>> + >>>>>>>> +static struct clk_fixed_factor a1_fclk_div5_div =3D { >>>>>>>> + .mult =3D 1, >>>>>>>> + .div =3D 5, >>>>>>>> + .hw.init =3D &(struct clk_init_data){ >>>>>>>> + .name =3D "fclk_div5_div", >>>>>>>> + .ops =3D &clk_fixed_factor_ops, >>>>>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>>>>> + &a1_fixed_pll.hw >>>>>>>> + }, >>>>>>>> + .num_parents =3D 1, >>>>>>>> + }, >>>>>>>> +}; >>>>>>>> + >>>>>>>> +static struct clk_regmap a1_fclk_div5 =3D { >>>>>>>> + .data =3D &(struct clk_regmap_gate_data){ >>>>>>>> + .offset =3D ANACTRL_FIXPLL_CTRL0, >>>>>>>> + .bit_idx =3D 23, >>>>>>>> + }, >>>>>>>> + .hw.init =3D &(struct clk_init_data){ >>>>>>>> + .name =3D "fclk_div5", >>>>>>>> + .ops =3D &clk_regmap_gate_ops, >>>>>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>>>>> + &a1_fclk_div5_div.hw >>>>>>>> + }, >>>>>>>> + .num_parents =3D 1, >>>>>>>> + /* >>>>>>>> + * add CLK_IS_CRITICAL flag to avoid being disabled by clk >>>>>>>> core >>>>>>>> + * its children clocks. >>>>>>>> + */ >>>>>>>> + .flags =3D CLK_IS_CRITICAL, >>>>>>>> + }, >>>>>>>> +}; >>>>>>>> + >>>>>>>> +static struct clk_fixed_factor a1_fclk_div7_div =3D { >>>>>>>> + .mult =3D 1, >>>>>>>> + .div =3D 7, >>>>>>>> + .hw.init =3D &(struct clk_init_data){ >>>>>>>> + .name =3D "fclk_div7_div", >>>>>>>> + .ops =3D &clk_fixed_factor_ops, >>>>>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>>>>> + &a1_fixed_pll.hw >>>>>>>> + }, >>>>>>>> + .num_parents =3D 1, >>>>>>>> + }, >>>>>>>> +}; >>>>>>>> + >>>>>>>> +static struct clk_regmap a1_fclk_div7 =3D { >>>>>>>> + .data =3D &(struct clk_regmap_gate_data){ >>>>>>>> + .offset =3D ANACTRL_FIXPLL_CTRL0, >>>>>>>> + .bit_idx =3D 23, >>>>>>>> + }, >>>>>>>> + .hw.init =3D &(struct clk_init_data){ >>>>>>>> + .name =3D "fclk_div7", >>>>>>>> + .ops =3D &clk_regmap_gate_ops, >>>>>>>> + .parent_hws =3D (const struct clk_hw *[]) { >>>>>>>> + &a1_fclk_div7_div.hw >>>>>>>> + }, >>>>>>>> + .num_parents =3D 1, >>>>>>>> + /* >>>>>>>> + * add CLK_IS_CRITICAL flag to avoid being disabled by clk >>>>>>>> core >>>>>>>> + * or its children clock. >>>>>>>> + */ >>>>>>>> + .flags =3D CLK_IS_CRITICAL, >>>>>>>> + }, >>>>>>>> +}; >>>>>>>> + >>> [...] >>>>>>>> --=20 >>>>>>>> 1.9.1 >>>>>>> >>>>>>> . >>>>>>> >>>>> >>>>> . >>>>> >> >> . >> From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id EFCD4C4CECE for ; Mon, 14 Oct 2019 14:56:00 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id A5FA2217D9 for ; Mon, 14 Oct 2019 14:56:00 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="ag4OoZtL"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=baylibre-com.20150623.gappssmtp.com header.i=@baylibre-com.20150623.gappssmtp.com header.b="wyN2E2Em" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A5FA2217D9 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-ID:Date: In-reply-to:Subject:To:From:References:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=7joWNkjSmUMDe1qktLfAAFubZOCc+QPsLy7Wb7rF0OI=; b=ag4OoZtL+5Oqv5ZbjAYQ4o1vkB fdP2OwuR6ra7ymHvYFu8Exp7HrbZqZoShPGAWOgBkcz9T0UlX12PbzmVmmk+2qTHgjjLO9XXMrAUG g42YJDygapnfteS4al7gGxBbuVuHaDPHREEoXOZx7kAuVdMUbq8Xf61126SQ1wRsenMfjSVdG6BJ4 c9NN4dFIk/W7W95o8sviMLanBcR6trEr+ghHZnKNKFI0j5TGDZlzNEBGtalGpQfCaDAO44Jf9m9A8 Z9GUvmwCqoLw8SoJs6DW1cLTIan0RoqKV4brKaJsYB8+EzljiyCjgg83nSv50ll7YAZKGtvhEkrI3 D1gHLGag==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1iK1lH-0004Kv-9L; Mon, 14 Oct 2019 14:55:51 +0000 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1iK1lD-0004J9-Hv for linux-arm-kernel@lists.infradead.org; Mon, 14 Oct 2019 14:55:50 +0000 Received: by mail-wm1-x343.google.com with SMTP id b24so17073118wmj.5 for ; Mon, 14 Oct 2019 07:55:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=references:user-agent:from:to:cc:subject:in-reply-to:date :message-id:mime-version:content-transfer-encoding; bh=cKxSKPHeDEKsisSnNEmUyMcq+91zQ2+gERMxgkYLYtY=; b=wyN2E2Emv4JghE1iYrUIbDT4Zzu3VAbbeU1J1JBtmZVbmAti5GZd7Tj1reAmn3B9LO a38j8u2NZUdd6Nj3PXVv+srEHeVHCu1dBdhYTz0uiS0iEcjdlZJd5NeQ5pVenosb5h3R /aWisL1JdHaXIsmsIGuY1tMZOTS8cT5UzCrT3Y2KHV9Q5FXbnaswkJLxa23xxpVAPW8g Okt/+eEMDRx7sI/N/wr31Zc98AdWawa2joLRaKY+fxu8vq8kymxGE0q197zJYBmk0wUQ 4WFS5wLOZBFHGTaGbYjvQUiwxY4KFejc14thHE5Rj0gcw9y/LC/QjzituE81iRJpug19 BPOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:references:user-agent:from:to:cc:subject :in-reply-to:date:message-id:mime-version:content-transfer-encoding; bh=cKxSKPHeDEKsisSnNEmUyMcq+91zQ2+gERMxgkYLYtY=; b=fAJf++ndIp30FTwOECPCCdZw3Xik4aSb7zsMPk/hE5EWGTWmkuZphE0gOqQAVwM7yh JUm9KHV29SA7ltiZipzMnKhmPm4ocHug47uCbKF9fcmTTCSbAEPg74NfLqyhyFxxnKsg lZwsiCsJNEMxxcbmy1nImgEz1llp3uhIggJmY80U1FXQb2W61XI9Xk/3D4lMN6gqwmhF Vmvej1Swc7GljRGAkMUUuuqDv8MFkOcQlwB8CokIz+6uIlNqlK8se0lLqEMuG4pja73t kLWLZRnWxC/VnbhajtlfThooIiZyqk2r6EBtv4Hsq4x9EbZsECHzjWsa4vgQzPa79uT9 rUuA== X-Gm-Message-State: APjAAAU4JQMw/mYPwMwbUK/D+1Ai8n1P+KZIp8nzj9cd3aWgSfCbifEt 16u1dSyuunUQD7gcjuuAvkR3fA== X-Google-Smtp-Source: APXvYqwTHDML4CaY0PDiA4aAph9wtIdNGKdMkSECTHHfsy6Kztg4f7KYPXOeg7W88c+f34662YTFBg== X-Received: by 2002:a7b:caea:: with SMTP id t10mr12127353wml.38.1571064945291; Mon, 14 Oct 2019 07:55:45 -0700 (PDT) Received: from localhost (lmontsouris-657-1-212-31.w90-63.abo.wanadoo.fr. [90.63.244.31]) by smtp.gmail.com with ESMTPSA id 90sm27622833wrr.1.2019.10.14.07.55.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Oct 2019 07:55:44 -0700 (PDT) References: <1569411888-98116-1-git-send-email-jian.hu@amlogic.com> <1569411888-98116-3-git-send-email-jian.hu@amlogic.com> <1j1rw4mmzw.fsf@starbuckisacylon.baylibre.com> <1jimpd27cb.fsf@starbuckisacylon.baylibre.com> <5fd57563-0c34-be14-132a-74fd2c5a5275@amlogic.com> <052b0a5c-c913-a9ff-65b9-5b7eb0aecd6e@amlogic.com> <1jsgnz20jq.fsf@starbuckisacylon.baylibre.com> <8ae988c2-68f5-603e-843b-9cd70e4d4349@amlogic.com> User-agent: mu4e 1.3.3; emacs 26.2 From: Jerome Brunet To: Jian Hu , Stephen Boyd Subject: Re: [PATCH 2/2] clk: meson: a1: add support for Amlogic A1 clock driver In-reply-to: <8ae988c2-68f5-603e-843b-9cd70e4d4349@amlogic.com> Date: Mon, 14 Oct 2019 16:55:43 +0200 Message-ID: <1jr23f1imo.fsf@starbuckisacylon.baylibre.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20191014_075547_600440_841CC681 X-CRM114-Status: GOOD ( 22.54 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, Jianxin Pan , Neil Armstrong , Martin Blumenstingl , Kevin Hilman , Michael Turquette , linux-kernel@vger.kernel.org, Qiufang Dai , linux-amlogic@lists.infradead.org, linux-clk@vger.kernel.org, linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org Ck9uIE1vbiAxNCBPY3QgMjAxOSBhdCAxNTo0MiwgSmlhbiBIdSA8amlhbi5odUBhbWxvZ2ljLmNv bT4gd3JvdGU6Cgo+Pj4gaWYgcGVyaXBoZXJhbCBjbG9ja3MgcHJvYmUgZmlyc3QsIGl0IHdpbGwg ZmFpbCB0byBnZXQKPj4+IGZpeGVkX3BsbCBjbG9ja3MuIEEgbG90IG9mIHBlcmlwaGVyYWwgY2xv Y2tzIHBhcmVudCBhcmUgZmNsa19kaXYyLzMvNS83Lgo+Pj4gYW5kIHdlIGNhbiBub3QgZ2V0IGZj bGtfZGl2Mi8zLzUvNyBjbG9ja3MuCj4+Cj4+IFdoYXQgZG9lcyAiZmFpbCIgbWVhbiA/Cj4+IEkg aW50ZW5kZWQgdG8gZ2V0IGNsb2NrIHVzaW5nIGRldm1fY2xrX2dldCBBUEkgaW4gZWFjaCBkcml2 ZXIsIEluIHRoaXMgCj4gc2NlbmXvvIxpdCB3aWxsIGdldCBmYWlsZWQgYmVjYXVzZSBvZiB0aGUg Y2xvY2sgbm90IGJlaW5nIHJlaWdzdGVyZWQuIEluCj4gZmFjdCwgd2UgY291bGQgbm90IHVzZSBk ZXZtX2Nsa19nZXQuCgpVbmxlc3MgSSBtaXNzZWQgc29tdGhpbmcsIEkgZG9uJ3Qgc2VlIHdoeSB5 b3Ugd291bGQgbmVlZCB0byBjYWxsCmRldm1fY2xrX2dldCgpLiBUaGlzIGlzIG5vdyBoYW5kbGVk IGRpcmVjdGx5IGJ5IHRoZSBmcmFtZXdvcmsuCgo+Pj4KPj4+IEkgY2FuIHRoaW5rIG9mIHR3byBz b2x1dGlvbnM6Cj4+PiAxKSBEbyBub3QgZGVzY3JpYmUgeHRhbF9maXhwbGwsIHh0YWxfaGlmaXBs bC4KPj4+ICAgICB0aGF0IGlzIHRvIHNheSwgZG8gbm90IGRlY3JpYmUgdGhlIFNZU19PU0NJTl9D VFJMIHJlZ2lzdGVyLgo+Pj4KPj4+IDIpIFB1dCBwZXJpcGhlcmFsIGFuZCBwbGwgY2xvY2sgZHJp dmVyIGluIG9uZSBkcml2ZXIuCj4+Cj4+IFRob3NlIGFyZSB3b3JrIGFyb3VuZHMuIEFjdHVhbGx5 IGZpeGluZyB0aGUgcHJvYmxlbSBpcyB1c3VhbGx5Cj4+IHByZWZlcmFibGUuCj4+Cj4+ICAgU28g aWYgcmVwaHJhc2UgeW91ciBwcm9ibGVtOgo+Pgo+PiAgICogV2UgaGF2ZSAyIGNsb2NrIGNvbnRy b2xsZXJzIChBIGFuZCBCKQo+PiAgICogQ2xvY2sgYXJlIHBhc3NlZCBiZXR3ZWVuIHRoZSBjb250 cm9sbGVycyB1c2luZyBEVAo+PiAgICogV2UgaGF2ZSBhIFBMTCBpbiBjb250cm9sbGVyIEIgd2hp Y2ggaXMgdXNlZCBieSBjbG9ja3MgaW4KPj4gICAgIGNvbnRyb2xsZXIgQS4KPj4gICAqIHRoZSBQ TEwgcGFyZW50IGNsb2NrIGlzIGluIGNvbnRyb2xsZXIgQS4KPj4KPiBZZWFoLCBpdCBpcyB0aGUg c2NlbmUuCj4+ID0+IFNvIGlmIEkgdW5kZXJzdGFuZCBjb3JyZWN0bHkgeW91IGFyZSBzYXlpbmcg dGhhdCBpdCB3aWxsICJmYWlsIgo+PiBiZWNhdXNlIHRoZXJlIGlzIGEgY2lyY3VsYXIgZGVwZW5k ZW5jeSBiZXR3ZWVuIGNvbnRyb2xsZXIgQSBhbmQgQiwgcmlnaHQKPj4gPwo+Pgo+PiBEbyB5b3Ug aGF2ZSBldmlkZW5jZSB0aGF0IHlvdXIgcHJvYmxlbSBjb21lcyBmcm9tIHRoaXMgY2lyY3VsYXIK Pj4gZGVwZW5kZW5jeSA/Cj4+Cj4gSSBoYXZlIHJlYWxpemVkIHRoZSBwZXJpcGhlcmFsIGRyaXZl ciBhbmQgUExMIGRyaXZlcnMsCj4KPiBQTEwgZHJpdmVyIHByb2JlcyBmaXJzdCwgUGVyaXBoZXJh bCBjbG9jayBkcml2ZXIgaXMgdGhlIHNlY29uZC4KCkl0IHNob3VsZCB3b3JrIHJlZ2FybGVzcyBv ZiB0aGUgb3JkZXIuCgo+Cj4gSW4gYWRkaXRpb27vvIxmb3IgQTEgU29D77yMIGl0IHdpbGwgbm90 IHdvcmsgdXNpbmcgbWVzb25fY2xrX3BsbF9vcHMsCj4KPiBpdCBuZWVkcyBzdHJpY3RseSBzZXF1 ZW5jZe+8jHNvIG1heWJlIGFub3RoZXIgb3BzIGlzIHJlcXVpcmVkLmhpZmkgcGxsIHdpbGwKPiBi ZSBzZW50IHdpdGggc3lzIHBsbCBhbmQgQ1BVIGNsb2NrIGRyaXZlci4KClRoZSBQQ2llIFBMTCBo YXMgYSBnb29kIHJlYXNvbiB0byBoYXZlIGEgc2luZ2xlIGZyZXF1ZW5jeSwgb25seSBvbmUgaXMg bmVlZGVkCgpUaGF0J3MgdGhlIGNhc2UgdGhlIGNhc2Ugb2YgdGhlIEhJRkkgUExMIHdoaWNoLCBh cyBleHBsYWluZWQgaW4gcHJldmlvdXMKbWFpbHMsIG5lZWRzIHRvIHByb3ZpZGUgbW9yZSB0aGF0 IHRoZSBzaW5nbGUgZnJlbnF1ZW5jeSB5b3UgaGF2ZSBkZXNjcmliZWQuCgpJZiB0aGUgcGxsIGRy aXZlciBuZWVkcyB0byBleHRlbmRlZCB3aXRoIG5ldyBvcHMgdGhhdCdzIGZpbmUuIFBsZWFzZQpl eHBsYWluIHRoaXMgInN0cmljdCBzZXF1ZW5jZSIgeW91IGFyZSByZWZlcmluZyB0b28uCldoYXQg aXMgcGFydCBvZiB0aGUgaW5pdGlhbCBzZXR0aW5ncywgd2hhdCBuZWVkcyB0byBiZSBkb25lIGVh Y2ggdGltZSA/Cgo+PiBBRkFJSywgQ0NGIHdpbGwgb3JwaGFuIHRoZSBjbG9jayBhbmQgY29udGlu dWUgaWYgdGhlIHBhcmVudCBpcyBub3QKPj4gYXZhaWxhYmxlLiBMYXRlciwgd2hlbiB0aGUgcGFy ZW50IGNvbWVzIHVwLCB0aGUgb3JwaGFuIHdpbGwgYmUKPj4gcmVwYXJlbnRlZC4KPj4KPj4gSU9X LCB0aGUgcHJvYmxlbSB5b3UgYXJlIHJlcG9ydGluZyBzaG91bGQgYWxyZWFkeSBiZSBjb3ZlcmVk IGJ5IENDRi4KPj4KPj4+Cj4+PiBBbmQgIHdoaWNoIHN1bHV0aW9uIGlzIGJldHRlciBhYm92ZSB0 d28/Cj4+Cj4+IE5laXRoZXIsIEknbSBhZnJhaWQKPj4KPj4+Cj4+PiBPciBtYXliZSBvdGhlciBn b29kIGlkZWFzIGZvciBpdD8KPj4KPj4gTXkgYmV0IHdvdWxkIGJlIHRoYXQgYW4gaW1wb3J0YW50 IGNsb2NrcyAobWF5YmUgbW9yZSB0aGFuIDEpIGlzIGJlaW5nCj4+IGdhdGVkIGR1cmluZyB0aGUg aW5pdCBwcm9jZXNzLgo+Pgo+PiBNYXliZSB5b3Ugc2hvdWxkIHRyeSB0aGUgY29tbWFuZCBsaW5l IHBhcmFtZXRlciAiY2xrX2lnbm9yZV91bnVzZWQiCj4+IHVudGlsIHlvdSBnZXQgdGhpbmdzIHJ1 bm5pbmcgd2l0aCB5b3VyIDIgY29udHJvbGxlcnMuCj4+Cj4+Pgo+Pj4gT24gMjAxOS85LzI5IDE3 OjM4LCBKaWFuIEh1IHdyb3RlOgo+Pj4+Cj4+Pj4KPj4+PiBPbiAyMDE5LzkvMjcgMjE6MzIsIEpl cm9tZSBCcnVuZXQgd3JvdGU6Cj4+Pj4+Cj4+Pj4+IE9uIEZyaSAyNyBTZXAgMjAxOSBhdCAxMTo1 MiwgSmlhbiBIdSA8amlhbi5odUBhbWxvZ2ljLmNvbT4gd3JvdGU6Cj4+Pj4+Cj4+Pj4+PiBIaSwg SmVyb21lCj4+Pj4+Pgo+Pj4+Pj4gVGhhbmsgeW91IGZvciByZXZpZXcuCj4+Pj4+Pgo+Pj4+Pj4g T24gMjAxOS85LzI1IDIzOjA5LCBKZXJvbWUgQnJ1bmV0IHdyb3RlOgo+Pj4+Pj4+IE9uIFdlZCAy NSBTZXAgMjAxOSBhdCAxOTo0NCwgSmlhbiBIdSA8amlhbi5odUBhbWxvZ2ljLmNvbT4gd3JvdGU6 Cj4+Pj4+Pj4KPj4+Pj4+Pj4gVGhlIEFtbG9naWMgQTEgY2xvY2sgaW5jbHVkZXMgdGhyZWUgcGFy dHM6Cj4+Pj4+Pj4+IHBlcmlwaGVyYWwgY2xvY2tzLCBwbGwgY2xvY2tzLCBDUFUgY2xvY2tzLgo+ Pj4+Pj4+PiBzeXMgcGxsIGFuZCBDUFUgY2xvY2tzIHdpbGwgYmUgc2VudCBpbiBuZXh0IHBhdGNo Lgo+Pj4+Pj4+Pgo+Pj4+Pj4+PiBVbmxpa2UgdGhlIHByZXZpb3VzIHNlcmllcywgdGhlcmUgaXMg bm8gRUUvQU8gZG9tYWluCj4+Pj4+Pj4+IGluIEExIENMSyBjb250cm9sbGVycy4KPj4+Pj4+Pj4K Pj4+Pj4+Pj4gU2lnbmVkLW9mZi1ieTogSmlhbiBIdSA8amlhbi5odUBhbWxvZ2ljLmNvbT4KPj4+ Pj4+Pj4gU2lnbmVkLW9mZi1ieTogSmlhbnhpbiBQYW4gPGppYW54aW4ucGFuQGFtbG9naWMuY29t Pgo+Pj4+Pj4+PiAtLS0KPj4+Pj4+Pj4gICAgIGFyY2gvYXJtNjQvS2NvbmZpZy5wbGF0Zm9ybXMg fCAgICAxICsKPj4+Pj4+Pj4gICAgIGRyaXZlcnMvY2xrL21lc29uL0tjb25maWcgICAgfCAgIDEw ICsKPj4+Pj4+Pj4gICAgIGRyaXZlcnMvY2xrL21lc29uL01ha2VmaWxlICAgfCAgICAxICsKPj4+ Pj4+Pj4gICAgIGRyaXZlcnMvY2xrL21lc29uL2ExLmMgICAgICAgfCAyNjE3Cj4+Pj4+Pj4+ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+Pj4+Pj4+PiAgICAgZHJp dmVycy9jbGsvbWVzb24vYTEuaCAgICAgICB8ICAxNzIgKysrCj4+Pj4+Pj4+ICAgICA1IGZpbGVz IGNoYW5nZWQsIDI4MDEgaW5zZXJ0aW9ucygrKQo+Pj4+Pj4+PiAgICAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvY2xrL21lc29uL2ExLmMKPj4+Pj4+Pj4gICAgIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2Nsay9tZXNvbi9hMS5oCj4+Pj4+Pj4+Cj4+PiBbLi4uXQo+Pj4+Pj4+PiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9jbGsvbWVzb24vYTEuYyBiL2RyaXZlcnMvY2xrL21lc29uL2ExLmMK Pj4+Pj4+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4+Pj4+Pj4gaW5kZXggMDAwMDAwMC4uMjZl ZGFlMGYKPj4+Pj4+Pj4gLS0tIC9kZXYvbnVsbAo+Pj4+Pj4+PiArKysgYi9kcml2ZXJzL2Nsay9t ZXNvbi9hMS5jCj4+Pj4+Pj4+IEBAIC0wLDAgKzEsMjYxNyBAQAo+Pj4+Pj4+PiArLy8gU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wKyBPUiBNSVQpCj4+Pj4+Pj4+ICsvKgo+Pj4+Pj4+ PiArICogQ29weXJpZ2h0IChjKSAyMDE5IEFtbG9naWMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl ZC4KPj4+Pj4+Pj4gKyAqLwo+Pj4+Pj4+PiArCj4+Pj4+Pj4+ICsjaW5jbHVkZSA8bGludXgvY2xr LXByb3ZpZGVyLmg+Cj4+Pj4+Pj4+ICsjaW5jbHVkZSA8bGludXgvaW5pdC5oPgo+Pj4+Pj4+PiAr I2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgo+Pj4+Pj4+PiArI2luY2x1ZGUgPGxpbnV4L3Bs YXRmb3JtX2RldmljZS5oPgo+Pj4+Pj4+PiArI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4K Pj4+Pj4+Pj4gKyNpbmNsdWRlICJjbGstbXBsbC5oIgo+Pj4+Pj4+PiArI2luY2x1ZGUgImNsay1w bGwuaCIKPj4+Pj4+Pj4gKyNpbmNsdWRlICJjbGstcmVnbWFwLmgiCj4+Pj4+Pj4+ICsjaW5jbHVk ZSAidmlkLXBsbC1kaXYuaCIKPj4+Pj4+Pj4gKyNpbmNsdWRlICJjbGstZHVhbGRpdi5oIgo+Pj4+ Pj4+PiArI2luY2x1ZGUgIm1lc29uLWVlY2xrLmgiCj4+Pj4+Pj4+ICsjaW5jbHVkZSAiYTEuaCIK Pj4+Pj4+Pj4gKwo+Pj4+Pj4+PiArLyogUExMcyBjbG9jayBpbiBnYXRlcywgaXRzIHBhcmVudCBp cyB4dGFsICovCj4+Pj4+Pj4+ICtzdGF0aWMgc3RydWN0IGNsa19yZWdtYXAgYTFfeHRhbF9jbGt0 cmVlID0gewo+Pj4+Pj4+PiArICAgIC5kYXRhID0gJihzdHJ1Y3QgY2xrX3JlZ21hcF9nYXRlX2Rh dGEpewo+Pj4+Pj4+PiArICAgICAgICAub2Zmc2V0ID0gU1lTX09TQ0lOX0NUUkwsCj4+Pj4+Pj4+ ICsgICAgICAgIC5iaXRfaWR4ID0gMCwKPj4+Pj4+Pj4gKyAgICB9LAo+Pj4+Pj4+PiArICAgIC5o dy5pbml0ID0gJihzdHJ1Y3QgY2xrX2luaXRfZGF0YSkgewo+Pj4+Pj4+PiArICAgICAgICAubmFt ZSA9ICJ4dGFsX2Nsa3RyZWUiLAo+Pj4+Pj4+PiArICAgICAgICAub3BzID0gJmNsa19yZWdtYXBf Z2F0ZV9vcHMsCj4+Pj4+Pj4+ICsgICAgICAgIC5wYXJlbnRfZGF0YSA9ICYoY29uc3Qgc3RydWN0 IGNsa19wYXJlbnRfZGF0YSkgewo+Pj4+Pj4+PiArICAgICAgICAgICAgLmZ3X25hbWUgPSAieHRh bCIsCj4+Pj4+Pj4+ICsgICAgICAgIH0sCj4+Pj4+Pj4+ICsgICAgICAgIC5udW1fcGFyZW50cyA9 IDEsCj4+Pj4+Pj4+ICsgICAgICAgIC5mbGFncyA9IENMS19JU19DUklUSUNBTCwKPj4+Pj4+Pgo+ Pj4+Pj4+IElzIENDRiBldmVuIGV4cGVjdGVkIHRvIHRvdWNoIHRoaXMgZXZlciA/IHdoYXQgYWJv dXQgUk8gb3BzID8KPj4+Pj4+PiBQbGVhc2UgcmV2aWV3IHlvdXIgb3RoZXIgY2xvY2tzIHdpdGgg dGhpcyBpbiBtaW5kCj4+Pj4+Pj4KPj4+Pj4+IHRoZSBjbG9jayBzaG91bGQgbm90IGJlIGNoYW5n ZWQgYXQgcnVudGltZS5jbGtfcmVnbWFwX2dhdGVfcm9fb3BzCj4+Pj4+PiBpcyBhIGdvb2QgaWRl YS4gU2V0IFJPIG9wcyBhbmQgcmVtb3ZlIHRoZSBDTEtfSVNfQ1JJVElDQUwgZmxhZy4KPj4+Pj4+ Pj4gKyAgICB9LAo+Pj4+Pj4+PiArfTsKPj4+Pj4+Pj4gKwo+Pj4+Pj4+PiArc3RhdGljIHN0cnVj dCBjbGtfcmVnbWFwIGExX3h0YWxfZml4cGxsID0gewo+Pj4+Pj4+PiArICAgIC5kYXRhID0gJihz dHJ1Y3QgY2xrX3JlZ21hcF9nYXRlX2RhdGEpewo+Pj4+Pj4+PiArICAgICAgICAub2Zmc2V0ID0g U1lTX09TQ0lOX0NUUkwsCj4+Pj4+Pj4+ICsgICAgICAgIC5iaXRfaWR4ID0gMSwKPj4+Pj4+Pj4g KyAgICB9LAo+Pj4+Pj4+PiArICAgIC5ody5pbml0ID0gJihzdHJ1Y3QgY2xrX2luaXRfZGF0YSkg ewo+Pj4+Pj4+PiArICAgICAgICAubmFtZSA9ICJ4dGFsX2ZpeHBsbCIsCj4+Pj4+Pj4+ICsgICAg ICAgIC5vcHMgPSAmY2xrX3JlZ21hcF9nYXRlX29wcywKPj4+Pj4+Pj4gKyAgICAgICAgLnBhcmVu dF9kYXRhID0gJihjb25zdCBzdHJ1Y3QgY2xrX3BhcmVudF9kYXRhKSB7Cj4+Pj4+Pj4+ICsgICAg ICAgICAgICAuZndfbmFtZSA9ICJ4dGFsIiwKPj4+Pj4+Pj4gKyAgICAgICAgfSwKPj4+Pj4+Pj4g KyAgICAgICAgLm51bV9wYXJlbnRzID0gMSwKPj4+Pj4+Pj4gKyAgICAgICAgLmZsYWdzID0gQ0xL X0lTX0NSSVRJQ0FMLAo+Pj4+Pj4+PiArICAgIH0sCj4+Pj4+Pj4+ICt9Owo+Pj4+Pj4+PiArCj4+ Pj4+Pj4+ICtzdGF0aWMgc3RydWN0IGNsa19yZWdtYXAgYTFfeHRhbF91c2JfcGh5ID0gewo+Pj4+ Pj4+PiArICAgIC5kYXRhID0gJihzdHJ1Y3QgY2xrX3JlZ21hcF9nYXRlX2RhdGEpewo+Pj4+Pj4+ PiArICAgICAgICAub2Zmc2V0ID0gU1lTX09TQ0lOX0NUUkwsCj4+Pj4+Pj4+ICsgICAgICAgIC5i aXRfaWR4ID0gMiwKPj4+Pj4+Pj4gKyAgICB9LAo+Pj4+Pj4+PiArICAgIC5ody5pbml0ID0gJihz dHJ1Y3QgY2xrX2luaXRfZGF0YSkgewo+Pj4+Pj4+PiArICAgICAgICAubmFtZSA9ICJ4dGFsX3Vz Yl9waHkiLAo+Pj4+Pj4+PiArICAgICAgICAub3BzID0gJmNsa19yZWdtYXBfZ2F0ZV9vcHMsCj4+ Pj4+Pj4+ICsgICAgICAgIC5wYXJlbnRfZGF0YSA9ICYoY29uc3Qgc3RydWN0IGNsa19wYXJlbnRf ZGF0YSkgewo+Pj4+Pj4+PiArICAgICAgICAgICAgLmZ3X25hbWUgPSAieHRhbCIsCj4+Pj4+Pj4+ ICsgICAgICAgIH0sCj4+Pj4+Pj4+ICsgICAgICAgIC5udW1fcGFyZW50cyA9IDEsCj4+Pj4+Pj4+ ICsgICAgICAgIC5mbGFncyA9IENMS19JU19DUklUSUNBTCwKPj4+Pj4+Pgo+Pj4+Pj4+IEhvdyBp cyBhbiBVU0IgY2xvY2sgY3JpdGljYWwgdG8gdGhlIHN5c3RlbSA/Cj4+Pj4+Pj4gUGxlYXNlIHJl dmlldyB5b3VyIG90aGVyIGNsb2NrcyB3aXRoIGNvbW1lbnQgaW4gbWluZCAuLi4KPj4+Pj4+IHRo ZSB1c2IgY2xvY2sgZG9lcyBub3QgYWZmZWN0IHRoZSBzeXN0ZW0sCj4+Pj4+PiByZW1vdmUgdGhl IENMS19JU19DUklUSUNBTCBmbGFnCj4+Pj4+Pj4KPj4+Pj4+Pj4gKyAgICB9LAo+Pj4+Pj4+PiAr fTsKPj4+Pj4+Pj4gKwo+Pj4+Pj4+PiArc3RhdGljIHN0cnVjdCBjbGtfcmVnbWFwIGExX3h0YWxf dXNiX2N0cmwgPSB7Cj4+Pj4+Pj4+ICsgICAgLmRhdGEgPSAmKHN0cnVjdCBjbGtfcmVnbWFwX2dh dGVfZGF0YSl7Cj4+Pj4+Pj4+ICsgICAgICAgIC5vZmZzZXQgPSBTWVNfT1NDSU5fQ1RSTCwKPj4+ Pj4+Pj4gKyAgICAgICAgLmJpdF9pZHggPSAzLAo+Pj4+Pj4+PiArICAgIH0sCj4+Pj4+Pj4+ICsg ICAgLmh3LmluaXQgPSAmKHN0cnVjdCBjbGtfaW5pdF9kYXRhKSB7Cj4+Pj4+Pj4+ICsgICAgICAg IC5uYW1lID0gInh0YWxfdXNiX2N0cmwiLAo+Pj4+Pj4+PiArICAgICAgICAub3BzID0gJmNsa19y ZWdtYXBfZ2F0ZV9vcHMsCj4+Pj4+Pj4+ICsgICAgICAgIC5wYXJlbnRfZGF0YSA9ICYoY29uc3Qg c3RydWN0IGNsa19wYXJlbnRfZGF0YSkgewo+Pj4+Pj4+PiArICAgICAgICAgICAgLmZ3X25hbWUg PSAieHRhbCIsCj4+Pj4+Pj4+ICsgICAgICAgIH0sCj4+Pj4+Pj4+ICsgICAgICAgIC5udW1fcGFy ZW50cyA9IDEsCj4+Pj4+Pj4+ICsgICAgICAgIC5mbGFncyA9IENMS19JU19DUklUSUNBTCwKPj4+ Pj4+Pj4gKyAgICB9LAo+Pj4+Pj4+PiArfTsKPj4+Pj4+IHRoZSB1c2IgY2xvY2sgZG9lcyBub3Qg YWZmZWN0IHRoZSBzeXN0ZW0sCj4+Pj4+PiByZW1vdmUgdGhlIENMS19JU19DUklUSUNBTCBmbGFn Cj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3JlZ21hcCBhMV94dGFsX2hp ZmlwbGwgPSB7Cj4+Pj4+Pj4+ICsgICAgLmRhdGEgPSAmKHN0cnVjdCBjbGtfcmVnbWFwX2dhdGVf ZGF0YSl7Cj4+Pj4+Pj4+ICsgICAgICAgIC5vZmZzZXQgPSBTWVNfT1NDSU5fQ1RSTCwKPj4+Pj4+ Pj4gKyAgICAgICAgLmJpdF9pZHggPSA0LAo+Pj4+Pj4+PiArICAgIH0sCj4+Pj4+Pj4+ICsgICAg Lmh3LmluaXQgPSAmKHN0cnVjdCBjbGtfaW5pdF9kYXRhKSB7Cj4+Pj4+Pj4+ICsgICAgICAgIC5u YW1lID0gInh0YWxfaGlmaXBsbCIsCj4+Pj4+Pj4+ICsgICAgICAgIC5vcHMgPSAmY2xrX3JlZ21h cF9nYXRlX29wcywKPj4+Pj4+Pj4gKyAgICAgICAgLnBhcmVudF9kYXRhID0gJihjb25zdCBzdHJ1 Y3QgY2xrX3BhcmVudF9kYXRhKSB7Cj4+Pj4+Pj4+ICsgICAgICAgICAgICAuZndfbmFtZSA9ICJ4 dGFsIiwKPj4+Pj4+Pj4gKyAgICAgICAgfSwKPj4+Pj4+Pj4gKyAgICAgICAgLm51bV9wYXJlbnRz ID0gMSwKPj4+Pj4+Pj4gKyAgICAgICAgLmZsYWdzID0gQ0xLX0lTX0NSSVRJQ0FMLAo+Pj4+Pj4+ PiArICAgIH0sCj4+Pj4+Pj4+ICt9Owo+Pj4+Pj4gQ0xLX0lTX0NSSVRJQ0FMIGlzIG5lZWQgdG8g bG9jayBoaWZpIHBsbC4KPj4+Pj4KPj4+Pj4gVGhhdCdzIG5vdCBob3cgQ0NGIHdvcmtzLCB0aGlz IGZhbGcgaXMgbm90IG9rIGhlcmUuCj4+Pj4+IENDRiB3aWxsIGVuYWJsZSB0aGlzIGNsb2NrIGJl Zm9yZSBjYWxsaW5nIGVuYWJsZSBvbiB5b3VyIGhpZmkgcGxsCj4+Pj4+Cj4+Pj4gb2vvvIwgSSB3 aWxsIHJlbW92ZSBpdC4KPj4+Pj4+Pj4gKwo+Pj4+Pj4+PiArc3RhdGljIHN0cnVjdCBjbGtfcmVn bWFwIGExX3h0YWxfc3lzcGxsID0gewo+Pj4+Pj4+PiArICAgIC5kYXRhID0gJihzdHJ1Y3QgY2xr X3JlZ21hcF9nYXRlX2RhdGEpewo+Pj4+Pj4+PiArICAgICAgICAub2Zmc2V0ID0gU1lTX09TQ0lO X0NUUkwsCj4+Pj4+Pj4+ICsgICAgICAgIC5iaXRfaWR4ID0gNSwKPj4+Pj4+Pj4gKyAgICB9LAo+ Pj4+Pj4+PiArICAgIC5ody5pbml0ID0gJihzdHJ1Y3QgY2xrX2luaXRfZGF0YSkgewo+Pj4+Pj4+ PiArICAgICAgICAubmFtZSA9ICJ4dGFsX3N5c3BsbCIsCj4+Pj4+Pj4+ICsgICAgICAgIC5vcHMg PSAmY2xrX3JlZ21hcF9nYXRlX29wcywKPj4+Pj4+Pj4gKyAgICAgICAgLnBhcmVudF9kYXRhID0g Jihjb25zdCBzdHJ1Y3QgY2xrX3BhcmVudF9kYXRhKSB7Cj4+Pj4+Pj4+ICsgICAgICAgICAgICAu ZndfbmFtZSA9ICJ4dGFsIiwKPj4+Pj4+Pj4gKyAgICAgICAgfSwKPj4+Pj4+Pj4gKyAgICAgICAg Lm51bV9wYXJlbnRzID0gMSwKPj4+Pj4+Pj4gKyAgICAgICAgLmZsYWdzID0gQ0xLX0lTX0NSSVRJ Q0FMLAo+Pj4+Pj4+PiArICAgIH0sCj4+Pj4+Pj4+ICt9Owo+Pj4+Pj4+PiArCj4+Pj4+PiB3aGVu IENQVSBjbG9jayBpcyBhdCBmaXhlZCBjbG9jaywgc3lzIHBsbAo+Pj4+Pj4gd2lsbCBiZSBkaXNh YmxlZCwgeHRhbF9zeXNwbGwgd2lsbCBiZSBkaXNhYmxlZCB0b28uCj4+Pj4+PiB3aGVuIHNldHRp bmcgc3lzIHBsbCwgY2FsbCBjbGtfc2V0X3JhdGUgdG8gbG9jawo+Pj4+Pj4gc3lzIHBsbCwgYWRk IFJPIG9wcyB0byBhdm9pZCBkaXNhYmxpbmcgdGhlIGNsb2NrCj4+Pj4+Cj4+Pj4+IEFnYWluIG5v dCBPay4KPj4+Pj4gSWYgeW91IG1lY2hhbmlzbSB0byBsb2NrIHRoZSBQTEwgaXMgcHJvcGVybHkg aW1wbGVtZW50ZWQgaW4gdGhlIGVuYWJsZQo+Pj4+PiBjYWxsYmFjayBvZiB0aGUgc3lzIHBsbCwg c3RpbGwga2luZCBvZiB3b3JrIGFyb3VuZCBhcmUgbm90IG5lZWRlZAo+Pj4+Pgo+Pj4+PiBUaGlz IGhhcyB3b3JrZWQgb24gdGhlIHBsbCB3ZSBoYWQgc28gZmFyLgo+Pj4+Pgo+Pj4+IG9rLCBJIHdp bGwgcmVtb3ZlIGl0Lgo+Pj4+Pj4KPj4+Pj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3JlZ21hcCBh MV94dGFsX2RkcyA9IHsKPj4+Pj4+Pj4gKyAgICAuZGF0YSA9ICYoc3RydWN0IGNsa19yZWdtYXBf Z2F0ZV9kYXRhKXsKPj4+Pj4+Pj4gKyAgICAgICAgLm9mZnNldCA9IFNZU19PU0NJTl9DVFJMLAo+ Pj4+Pj4+PiArICAgICAgICAuYml0X2lkeCA9IDYsCj4+Pj4+Pj4+ICsgICAgfSwKPj4+Pj4+Pj4g KyAgICAuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2RhdGEpIHsKPj4+Pj4+Pj4gKyAgICAg ICAgLm5hbWUgPSAieHRhbF9kZHMiLAo+Pj4+Pj4+PiArICAgICAgICAub3BzID0gJmNsa19yZWdt YXBfZ2F0ZV9vcHMsCj4+Pj4+Pj4+ICsgICAgICAgIC5wYXJlbnRfZGF0YSA9ICYoY29uc3Qgc3Ry dWN0IGNsa19wYXJlbnRfZGF0YSkgewo+Pj4+Pj4+PiArICAgICAgICAgICAgLmZ3X25hbWUgPSAi eHRhbCIsCj4+Pj4+Pj4+ICsgICAgICAgIH0sCj4+Pj4+Pj4+ICsgICAgICAgIC5udW1fcGFyZW50 cyA9IDEsCj4+Pj4+Pj4+ICsgICAgICAgIC5mbGFncyA9IENMS19JU19DUklUSUNBTCwKPj4+Pj4+ Pj4gKyAgICB9LAo+Pj4+Pj4+PiArfTsKPj4+Pj4+IENMS19JU19DUklUSUNBTCBpcyBuZWVkIHRv IGxvY2sgZGRzCj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4gKy8qIGZpeGVkIHBsbCA9IDE1MzZNCj4+Pj4+ Pj4+ICsgKgo+Pj4+Pj4+PiArICogZml4ZWQgcGxsIC0tLS0tIGZjbGtfZGl2MiA9IDc2OE0KPj4+ Pj4+Pj4gKyAqICAgICAgICAgICB8Cj4+Pj4+Pj4+ICsgKiAgICAgICAgICAgLS0tLS0gZmNsa19k aXYzID0gNTEyTQo+Pj4+Pj4+PiArICogICAgICAgICAgIHwKPj4+Pj4+Pj4gKyAqICAgICAgICAg ICAtLS0tLSBmY2xrX2RpdjUgPSAzMDcuMk0KPj4+Pj4+Pj4gKyAqICAgICAgICAgICB8Cj4+Pj4+ Pj4+ICsgKiAgICAgICAgICAgLS0tLS0gZmNsa19kaXY3ID0gMjE5LjRNCj4+Pj4+Pj4+ICsgKi8K Pj4+Pj4+Pgo+Pj4+Pj4+IFRoZSBmcmFtZXdvcmsgd2lsbCBtYWtlIHRob3NlIGNhbGN1bGF0aW9u IC4uLiB5b3UgY2FuIHJlbW92ZSB0aGlzCj4+Pj4+Pj4KPj4+Pj4+IG9rLCBJIHdpbGwgcmVtb3Rl IHRoZSBjb21tZW50Lgo+Pj4+Pj4+PiArc3RhdGljIHN0cnVjdCBjbGtfcmVnbWFwIGExX2ZpeGVk X3BsbF9kY28gPSB7Cj4+Pj4+Pj4+ICsgICAgLmRhdGEgPSAmKHN0cnVjdCBtZXNvbl9jbGtfcGxs X2RhdGEpewo+Pj4+Pj4+PiArICAgICAgICAuZW4gPSB7Cj4+Pj4+Pj4+ICsgICAgICAgICAgICAu cmVnX29mZiA9IEFOQUNUUkxfRklYUExMX0NUUkwwLAo+Pj4+Pj4+PiArICAgICAgICAgICAgLnNo aWZ0ICAgPSAyOCwKPj4+Pj4+Pj4gKyAgICAgICAgICAgIC53aWR0aCAgID0gMSwKPj4+Pj4+Pj4g KyAgICAgICAgfSwKPj4+Pj4+Pj4gKyAgICAgICAgLm0gPSB7Cj4+Pj4+Pj4+ICsgICAgICAgICAg ICAucmVnX29mZiA9IEFOQUNUUkxfRklYUExMX0NUUkwwLAo+Pj4+Pj4+PiArICAgICAgICAgICAg LnNoaWZ0ICAgPSAwLAo+Pj4+Pj4+PiArICAgICAgICAgICAgLndpZHRoICAgPSA4LAo+Pj4+Pj4+ PiArICAgICAgICB9LAo+Pj4+Pj4+PiArICAgICAgICAubiA9IHsKPj4+Pj4+Pj4gKyAgICAgICAg ICAgIC5yZWdfb2ZmID0gQU5BQ1RSTF9GSVhQTExfQ1RSTDAsCj4+Pj4+Pj4+ICsgICAgICAgICAg ICAuc2hpZnQgICA9IDEwLAo+Pj4+Pj4+PiArICAgICAgICAgICAgLndpZHRoICAgPSA1LAo+Pj4+ Pj4+PiArICAgICAgICB9LAo+Pj4+Pj4+PiArICAgICAgICAuZnJhYyA9IHsKPj4+Pj4+Pj4gKyAg ICAgICAgICAgIC5yZWdfb2ZmID0gQU5BQ1RSTF9GSVhQTExfQ1RSTDEsCj4+Pj4+Pj4+ICsgICAg ICAgICAgICAuc2hpZnQgICA9IDAsCj4+Pj4+Pj4+ICsgICAgICAgICAgICAud2lkdGggICA9IDE5 LAo+Pj4+Pj4+PiArICAgICAgICB9LAo+Pj4+Pj4+PiArICAgICAgICAubCA9IHsKPj4+Pj4+Pj4g KyAgICAgICAgICAgIC5yZWdfb2ZmID0gQU5BQ1RSTF9GSVhQTExfQ1RSTDAsCj4+Pj4+Pj4+ICsg ICAgICAgICAgICAuc2hpZnQgICA9IDMxLAo+Pj4+Pj4+PiArICAgICAgICAgICAgLndpZHRoICAg PSAxLAo+Pj4+Pj4+PiArICAgICAgICB9LAo+Pj4+Pj4+PiArICAgICAgICAucnN0ID0gewo+Pj4+ Pj4+PiArICAgICAgICAgICAgLnJlZ19vZmYgPSBBTkFDVFJMX0ZJWFBMTF9DVFJMMCwKPj4+Pj4+ Pj4gKyAgICAgICAgICAgIC5zaGlmdCAgID0gMjksCj4+Pj4+Pj4+ICsgICAgICAgICAgICAud2lk dGggICA9IDEsCj4+Pj4+Pj4+ICsgICAgICAgIH0sCj4+Pj4+Pj4+ICsgICAgfSwKPj4+Pj4+Pj4g KyAgICAuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2RhdGEpewo+Pj4+Pj4+PiArICAgICAg ICAubmFtZSA9ICJmaXhlZF9wbGxfZGNvIiwKPj4+Pj4+Pj4gKyAgICAgICAgLm9wcyA9ICZtZXNv bl9jbGtfcGxsX3JvX29wcywKPj4+Pj4+Pj4gKyAgICAgICAgLnBhcmVudF9od3MgPSAoY29uc3Qg c3RydWN0IGNsa19odyAqW10pIHsKPj4+Pj4+Pj4gKyAgICAgICAgICAgICZhMV94dGFsX2ZpeHBs bC5odwo+Pj4+Pj4+PiArICAgICAgICB9LAo+Pj4+Pj4+PiArICAgICAgICAubnVtX3BhcmVudHMg PSAxLAo+Pj4+Pj4+PiArICAgIH0sCj4+Pj4+Pj4+ICt9Owo+Pj4+Pj4+PiArCj4+Pj4+Pj4+ICtz dGF0aWMgc3RydWN0IGNsa19yZWdtYXAgYTFfZml4ZWRfcGxsID0gewo+Pj4+Pj4+PiArICAgIC5k YXRhID0gJihzdHJ1Y3QgY2xrX3JlZ21hcF9nYXRlX2RhdGEpewo+Pj4+Pj4+PiArICAgICAgICAu b2Zmc2V0ID0gQU5BQ1RSTF9GSVhQTExfQ1RSTDAsCj4+Pj4+Pj4+ICsgICAgICAgIC5iaXRfaWR4 ID0gMjAsCj4+Pj4+Pj4+ICsgICAgfSwKPj4+Pj4+Pj4gKyAgICAuaHcuaW5pdCA9ICYoc3RydWN0 IGNsa19pbml0X2RhdGEpIHsKPj4+Pj4+Pj4gKyAgICAgICAgLm5hbWUgPSAiZml4ZWRfcGxsIiwK Pj4+Pj4+Pj4gKyAgICAgICAgLm9wcyA9ICZjbGtfcmVnbWFwX2dhdGVfb3BzLAo+Pj4+Pj4+PiAr ICAgICAgICAucGFyZW50X2h3cyA9IChjb25zdCBzdHJ1Y3QgY2xrX2h3ICpbXSkgewo+Pj4+Pj4+ PiArICAgICAgICAgICAgJmExX2ZpeGVkX3BsbF9kY28uaHcKPj4+Pj4+Pj4gKyAgICAgICAgfSwK Pj4+Pj4+Pj4gKyAgICAgICAgLm51bV9wYXJlbnRzID0gMSwKPj4+Pj4+Pj4gKyAgICAgICAgLmZs YWdzID0gQ0xLX0lHTk9SRV9VTlVTRUQsCj4+Pj4+Pj4+ICsgICAgfSwKPj4+Pj4+Pj4gK307Cj4+ Pj4+Pj4+ICsKPj4+Pj4+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxsX3BhcmFtc190YWJsZSBh MV9oaWZpX3BsbF9wYXJhbXNfdGFibGVbXSA9IHsKPj4+Pj4+Pj4gKyAgICBQTExfUEFSQU1TKDEy OCwgNSksIC8qIERDTyA9IDYxNC40TSAqLwo+Pj4+Pj4+PiArfTsKPj4+Pj4+Pj4gKwo+Pj4+Pj4+ PiArc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfc2VxdWVuY2UgYTFfaGlmaV9pbml0X3JlZ3NbXSA9 IHsKPj4+Pj4+Pj4gKyAgICB7IC5yZWcgPSBBTkFDVFJMX0hJRklQTExfQ1RSTDEsICAgIC5kZWYg PSAweDAxODAwMDAwIH0sCj4+Pj4+Pj4+ICsgICAgeyAucmVnID0gQU5BQ1RSTF9ISUZJUExMX0NU UkwyLCAgICAuZGVmID0gMHgwMDAwMTEwMCB9LAo+Pj4+Pj4+PiArICAgIHsgLnJlZyA9IEFOQUNU UkxfSElGSVBMTF9DVFJMMywgICAgLmRlZiA9IDB4MTAwMjIyMDAgfSwKPj4+Pj4+Pj4gKyAgICB7 IC5yZWcgPSBBTkFDVFJMX0hJRklQTExfQ1RSTDQsICAgIC5kZWYgPSAweDAwMzAxMDAwIH0sCj4+ Pj4+Pj4+ICsgICAgeyAucmVnID0gQU5BQ1RSTF9ISUZJUExMX0NUUkwwLCAuZGVmID0gMHgwMWYx OTQ4MCB9LAo+Pj4+Pj4+PiArICAgIHsgLnJlZyA9IEFOQUNUUkxfSElGSVBMTF9DVFJMMCwgLmRl ZiA9IDB4MTFmMTk0ODAsIC5kZWxheV91cyA9Cj4+Pj4+Pj4+IDEwIH0sCj4+Pj4+Pj4+ICsgICAg eyAucmVnID0gQU5BQ1RSTF9ISUZJUExMX0NUUkwwLCAgICAuZGVmID0gMHgxNWYxMTQ4MCwgLmRl bGF5X3VzCj4+Pj4+Pj4+ID0gNDAgfSwKPj4+Pj4+Pj4gKyAgICB7IC5yZWcgPSBBTkFDVFJMX0hJ RklQTExfQ1RSTDIsICAgIC5kZWYgPSAweDAwMDAxMTQwIH0sCj4+Pj4+Pj4+ICsgICAgeyAucmVn ID0gQU5BQ1RSTF9ISUZJUExMX0NUUkwyLCAgICAuZGVmID0gMHgwMDAwMTEwMCB9LAo+Pj4+Pj4+ PiArfTsKPj4+Pj4+Pj4gKwo+Pj4+Pj4+PiArLyoKPj4+Pj4+Pj4gKyAqIFRoZSBNZXNvbiBBMSBI SUZJIFBMTCBpcyA2MTQuNE0sIGl0IHJlcXVpcmVzCj4+Pj4+Pj4+ICsgKiBhIHN0cmljdCByZWdp c3RlciBzZXF1ZW5jZSB0byBlbmFibGUgdGhlIFBMTC4KPj4+Pj4+Pj4gKyAqIHNldCBtZXNvbl9j bGtfcGNpZV9wbGxfb3BzIGFzIGl0cyBvcHMKPj4+Pj4+Pj4gKyAqLwo+Pj4+Pj4+Cj4+Pj4+Pj4g Q291bGQgeW91IGVsYWJvcmF0ZSBvbiB0aGlzID8gV2hhdCBuZWVkIHRvIGJlIGRvbmUgdG8gZW5h YmxlIHRoZSBjbG9jawo+Pj4+Pj4+ID8KPj4+Pj4+PiBBbHNvIHRoZSBISUZJIFBMTCB1c2VkIHRv IGJlIGFibGUgdG8gZG8gYSAqTE9UKiBvZiBkaWZmZXJlbnQgcmF0ZSB3aGljaAo+Pj4+Pj4+IG1p Z2h0IGJlIGRlc2lyYWJsZSBmb3IgYXVkaW8gdXNlIGNhc2UuIFdoeSBpcyB0aGlzIG9uZSByZXN0 cmljdGVkIHRvCj4+Pj4+Pj4gb25lCj4+Pj4+Pj4gcGFydGljdWxhciByYXRlID8KPj4+Pj4+Pgo+ Pj4+Pj4gVGhlIGF1ZGlvIHdvcmtpbmcgZnJlcXVlbmN5IGFyZSA0NC4xa2h6LCA0OGtoeiBhbmQg MTkya2h6Lgo+Pj4+Pj4KPj4+Pj4+IDYxNC40TSBjYW4gbWVldCB0aGUgdGhyZWUgZnJlcXVlbmN5 Lgo+Pj4+Pj4KPj4+Pj4+IGFmdGVyIHRoZSBoaWZpIHBsbCwgdGhlcmUgYXJlIHR3byBkaXZpZGVy cyBpbiBBdWRpbyBjbG9jay4KPj4+Pj4+Cj4+Pj4+PiA2MTQuNE0vMzIwMCA9IDE5Mmtoego+Pj4+ Pj4KPj4+Pj4+IDYxNC40TS8xMjgwMCA9IDQ4a2h6Cj4+Pj4+Pgo+Pj4+Pj4gNjE0LDRNLzEzOTMy ID0gNDQuMDk5OWtoego+Pj4+Pgo+Pj4+PiBJdCBkb2VzIG5vdCByZWFsbHkgYW5zd2VyIG15IHF1 ZXN0aW9uIHRob3VnaC4KPj4+Pj4gWW91IGFyZSBsb2NraW5nIGEgdXNlIGNhc2UgaGVyZSwgd2hp Y2ggaXMgMzIgYml0IHNhbXBsZSB3aWR0aAo+Pj4+Pgo+Pj4+PiBXZSBoYXZlIG90aGVyIGNvbnN0 cmFpbnQgd2l0aCB0aGUgdXBzdHJlYW0gYXVkaW8gZHJpdmVyLCBhbmQgd2UgdXN1YWxseQo+Pj4+ PiBsb29raW5nIGZvciBiYXNlIGZyZXF1ZW5jeSB0aGF0IGEgbXVsdGlwbGUgb2YgNzY4ICgyNCoz MikuCj4+Pj4+Cj4+Pj4+IElmIHlvdSBuZWVkIHlvdXIgUExMIHRvIGJlIHNldCB0byBhIHBhcnRp Y3VsYXIgcmF0ZSBmb3IgYSB1c2UgY2FzZSwgdGhlCj4+Pj4+IGNvcnJlY3Qgd2F5IGlzICJhc3Np Z25lZC1yYXRlIiBpbiBEVAo+Pj4+Pgo+Pj4+PiBzbyB0aGUgcXVlc3Rpb24gc3RpbGwgc3RhbmRz LCB0aGUgSElGSSBwbGwgYmVmb3JlIHdhcyBwcmV0dHkgZWFzeSB0byBzZXQKPj4+Pj4gYXQgYSB3 aWRlIHZhcmlldHkgb2YgcmF0ZSAoc2FtZSBhcyBHUDApIC4uLiBpcyBpdCBub3QgdGhlIGNhc2Ug YW55bW9yZSA/Cj4+Pj4+IElmIHllcywgY291bGQgeW91IGRlY3JpYmUgdGhlIGNvbnN0cmFpbnRz Lgo+Pj4+Pgo+Pj4+PiBBbGwgdGhpcyB0b29rIHVzIGEgbG9uZyB0aW1lIHRvIGZpZ3VyZSBvdXQg b24gb3VyIG93biwgd2hpY2ggaXMgd2h5IEknZAo+Pj4+PiBwcmVmZXIgdG8gZ2V0IHRoZSBwcm9w ZXIgY29uc3RyYWludHMgaW4gZnJvbSB0aGUgYmVnaW5uaW5nIHRoaXMgdGltZQo+Pj4+Pgo+Pj4+ IG9rLCBJIHdpbGwgdmVyaWZ5IGl0IGFuZCAgZGVzY3JpYmUgdGhlIGNvbnN0cmFpbnRzIGFib3V0 IGl0Cj4+Pj4+Cj4+Pj4+Pgo+Pj4+Pj4+PiArc3RhdGljIHN0cnVjdCBjbGtfcmVnbWFwIGExX2hp ZmlfcGxsID0gewo+Pj4+Pj4+PiArICAgIC5kYXRhID0gJihzdHJ1Y3QgbWVzb25fY2xrX3BsbF9k YXRhKXsKPj4+Pj4+Pj4gKyAgICAgICAgLmVuID0gewo+Pj4+Pj4+PiArICAgICAgICAgICAgLnJl Z19vZmYgPSBBTkFDVFJMX0hJRklQTExfQ1RSTDAsCj4+Pj4+Pj4+ICsgICAgICAgICAgICAuc2hp ZnQgICA9IDI4LAo+Pj4+Pj4+PiArICAgICAgICAgICAgLndpZHRoICAgPSAxLAo+Pj4+Pj4+PiAr ICAgICAgICB9LAo+Pj4+Pj4+PiArICAgICAgICAubSA9IHsKPj4+Pj4+Pj4gKyAgICAgICAgICAg IC5yZWdfb2ZmID0gQU5BQ1RSTF9ISUZJUExMX0NUUkwwLAo+Pj4+Pj4+PiArICAgICAgICAgICAg LnNoaWZ0ICAgPSAwLAo+Pj4+Pj4+PiArICAgICAgICAgICAgLndpZHRoICAgPSA4LAo+Pj4+Pj4+ PiArICAgICAgICB9LAo+Pj4+Pj4+PiArICAgICAgICAubiA9IHsKPj4+Pj4+Pj4gKyAgICAgICAg ICAgIC5yZWdfb2ZmID0gQU5BQ1RSTF9ISUZJUExMX0NUUkwwLAo+Pj4+Pj4+PiArICAgICAgICAg ICAgLnNoaWZ0ICAgPSAxMCwKPj4+Pj4+Pj4gKyAgICAgICAgICAgIC53aWR0aCAgID0gNSwKPj4+ Pj4+Pj4gKyAgICAgICAgfSwKPj4+Pj4+Pj4gKyAgICAgICAgLmZyYWMgPSB7Cj4+Pj4+Pj4+ICsg ICAgICAgICAgICAucmVnX29mZiA9IEFOQUNUUkxfSElGSVBMTF9DVFJMMSwKPj4+Pj4+Pj4gKyAg ICAgICAgICAgIC5zaGlmdCAgID0gMCwKPj4+Pj4+Pj4gKyAgICAgICAgICAgIC53aWR0aCAgID0g MTksCj4+Pj4+Pj4+ICsgICAgICAgIH0sCj4+Pj4+Pj4+ICsgICAgICAgIC5sID0gewo+Pj4+Pj4+ PiArICAgICAgICAgICAgLnJlZ19vZmYgPSBBTkFDVFJMX0hJRklQTExfU1RTLAo+Pj4+Pj4+PiAr ICAgICAgICAgICAgLnNoaWZ0ICAgPSAzMSwKPj4+Pj4+Pj4gKyAgICAgICAgICAgIC53aWR0aCAg ID0gMSwKPj4+Pj4+Pj4gKyAgICAgICAgfSwKPj4+Pj4+Pj4gKyAgICAgICAgLnRhYmxlID0gYTFf aGlmaV9wbGxfcGFyYW1zX3RhYmxlLAo+Pj4+Pj4+PiArICAgICAgICAuaW5pdF9yZWdzID0gYTFf aGlmaV9pbml0X3JlZ3MsCj4+Pj4+Pj4+ICsgICAgICAgIC5pbml0X2NvdW50ID0gQVJSQVlfU0la RShhMV9oaWZpX2luaXRfcmVncyksCj4+Pj4+Pj4+ICsgICAgfSwKPj4+Pj4+Pj4gKyAgICAuaHcu aW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2RhdGEpewo+Pj4+Pj4+PiArICAgICAgICAubmFtZSA9 ICJoaWZpX3BsbCIsCj4+Pj4+Pj4+ICsgICAgICAgIC5vcHMgPSAmbWVzb25fY2xrX3BjaWVfcGxs X29wcywKPj4+Pj4+Pj4gKyAgICAgICAgLnBhcmVudF9od3MgPSAoY29uc3Qgc3RydWN0IGNsa19o dyAqW10pIHsKPj4+Pj4+Pj4gKyAgICAgICAgICAgICZhMV94dGFsX2hpZmlwbGwuaHcKPj4+Pj4+ Pj4gKyAgICAgICAgfSwKPj4+Pj4+Pj4gKyAgICAgICAgLm51bV9wYXJlbnRzID0gMSwKPj4+Pj4+ Pj4gKyAgICB9LAo+Pj4+Pj4+PiArfTsKPj4+Pj4+Pj4gKwo+Pj4+Pj4+PiArc3RhdGljIHN0cnVj dCBjbGtfZml4ZWRfZmFjdG9yIGExX2ZjbGtfZGl2Ml9kaXYgPSB7Cj4+Pj4+Pj4+ICsgICAgLm11 bHQgPSAxLAo+Pj4+Pj4+PiArICAgIC5kaXYgPSAyLAo+Pj4+Pj4+PiArICAgIC5ody5pbml0ID0g JihzdHJ1Y3QgY2xrX2luaXRfZGF0YSl7Cj4+Pj4+Pj4+ICsgICAgICAgIC5uYW1lID0gImZjbGtf ZGl2Ml9kaXYiLAo+Pj4+Pj4+PiArICAgICAgICAub3BzID0gJmNsa19maXhlZF9mYWN0b3Jfb3Bz LAo+Pj4+Pj4+PiArICAgICAgICAucGFyZW50X2h3cyA9IChjb25zdCBzdHJ1Y3QgY2xrX2h3ICpb XSkgewo+Pj4+Pj4+PiArICAgICAgICAgICAgJmExX2ZpeGVkX3BsbC5odwo+Pj4+Pj4+PiArICAg ICAgICB9LAo+Pj4+Pj4+PiArICAgICAgICAubnVtX3BhcmVudHMgPSAxLAo+Pj4+Pj4+PiArICAg IH0sCj4+Pj4+Pj4+ICt9Owo+Pj4+Pj4+PiArCj4+Pj4+Pj4+ICtzdGF0aWMgc3RydWN0IGNsa19y ZWdtYXAgYTFfZmNsa19kaXYyID0gewo+Pj4+Pj4+PiArICAgIC5kYXRhID0gJihzdHJ1Y3QgY2xr X3JlZ21hcF9nYXRlX2RhdGEpewo+Pj4+Pj4+PiArICAgICAgICAub2Zmc2V0ID0gQU5BQ1RSTF9G SVhQTExfQ1RSTDAsCj4+Pj4+Pj4+ICsgICAgICAgIC5iaXRfaWR4ID0gMjEsCj4+Pj4+Pj4+ICsg ICAgfSwKPj4+Pj4+Pj4gKyAgICAuaHcuaW5pdCA9ICYoc3RydWN0IGNsa19pbml0X2RhdGEpewo+ Pj4+Pj4+PiArICAgICAgICAubmFtZSA9ICJmY2xrX2RpdjIiLAo+Pj4+Pj4+PiArICAgICAgICAu b3BzID0gJmNsa19yZWdtYXBfZ2F0ZV9vcHMsCj4+Pj4+Pj4+ICsgICAgICAgIC5wYXJlbnRfaHdz ID0gKGNvbnN0IHN0cnVjdCBjbGtfaHcgKltdKSB7Cj4+Pj4+Pj4+ICsgICAgICAgICAgICAmYTFf ZmNsa19kaXYyX2Rpdi5odwo+Pj4+Pj4+PiArICAgICAgICB9LAo+Pj4+Pj4+PiArICAgICAgICAu bnVtX3BhcmVudHMgPSAxLAo+Pj4+Pj4+PiArICAgICAgICAvKgo+Pj4+Pj4+PiArICAgICAgICAg KiBhZGQgQ0xLX0lTX0NSSVRJQ0FMIGZsYWcgdG8gYXZvaWQgYmVpbmcgZGlzYWJsZWQgYnkgY2xr Cj4+Pj4+Pj4+IGNvcmUKPj4+Pj4+Pj4gKyAgICAgICAgICogb3IgaXRzIGNoaWxkcmVuIGNsb2Nr cy4KPj4+Pj4+Pj4gKyAgICAgICAgICovCj4+Pj4+Pj4KPj4+Pj4+PiBUaGUgbWVhbmluZyBvZiB0 aGlzIGZsYWcgaXMgYWxyZWFkeSBkb2N1bWVudGVkIGluIGNsay1wcm92aWRlci5oCj4+Pj4+Pj4g VGhlIHJlYXNvbiB3aHkgeW91IG5lZWQgdGhpcyBmbGFnIGlzIGxvdCBtb3JlIGludGVyZXN0aW5n IGhlcmUgLi4uCj4+Pj4+Pj4KPj4+Pj4+PiBTYW1lIGJlbG93Cj4+Pj4+PiBvaywgSSB3aWxsIHJl cGxhY2UgbmV3IGNvbW1lbnRzIGhlcmUuCj4+Pj4+Pj4KPj4+Pj4+Pj4gKyAgICAgICAgLmZsYWdz ID0gQ0xLX0lTX0NSSVRJQ0FMLAo+Pj4+Pj4+PiArICAgIH0sCj4+Pj4+Pj4+ICt9Owo+Pj4+Pj4+ PiArCj4+Pj4+Pj4+ICtzdGF0aWMgc3RydWN0IGNsa19maXhlZF9mYWN0b3IgYTFfZmNsa19kaXYz X2RpdiA9IHsKPj4+Pj4+Pj4gKyAgICAubXVsdCA9IDEsCj4+Pj4+Pj4+ICsgICAgLmRpdiA9IDMs Cj4+Pj4+Pj4+ICsgICAgLmh3LmluaXQgPSAmKHN0cnVjdCBjbGtfaW5pdF9kYXRhKXsKPj4+Pj4+ Pj4gKyAgICAgICAgLm5hbWUgPSAiZmNsa19kaXYzX2RpdiIsCj4+Pj4+Pj4+ICsgICAgICAgIC5v cHMgPSAmY2xrX2ZpeGVkX2ZhY3Rvcl9vcHMsCj4+Pj4+Pj4+ICsgICAgICAgIC5wYXJlbnRfaHdz ID0gKGNvbnN0IHN0cnVjdCBjbGtfaHcgKltdKSB7Cj4+Pj4+Pj4+ICsgICAgICAgICAgICAmYTFf Zml4ZWRfcGxsLmh3Cj4+Pj4+Pj4+ICsgICAgICAgIH0sCj4+Pj4+Pj4+ICsgICAgICAgIC5udW1f cGFyZW50cyA9IDEsCj4+Pj4+Pj4+ICsgICAgfSwKPj4+Pj4+Pj4gK307Cj4+Pj4+Pj4+ICsKPj4+ Pj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3JlZ21hcCBhMV9mY2xrX2RpdjMgPSB7Cj4+Pj4+Pj4+ ICsgICAgLmRhdGEgPSAmKHN0cnVjdCBjbGtfcmVnbWFwX2dhdGVfZGF0YSl7Cj4+Pj4+Pj4+ICsg ICAgICAgIC5vZmZzZXQgPSBBTkFDVFJMX0ZJWFBMTF9DVFJMMCwKPj4+Pj4+Pj4gKyAgICAgICAg LmJpdF9pZHggPSAyMiwKPj4+Pj4+Pj4gKyAgICB9LAo+Pj4+Pj4+PiArICAgIC5ody5pbml0ID0g JihzdHJ1Y3QgY2xrX2luaXRfZGF0YSl7Cj4+Pj4+Pj4+ICsgICAgICAgIC5uYW1lID0gImZjbGtf ZGl2MyIsCj4+Pj4+Pj4+ICsgICAgICAgIC5vcHMgPSAmY2xrX3JlZ21hcF9nYXRlX29wcywKPj4+ Pj4+Pj4gKyAgICAgICAgLnBhcmVudF9od3MgPSAoY29uc3Qgc3RydWN0IGNsa19odyAqW10pIHsK Pj4+Pj4+Pj4gKyAgICAgICAgICAgICZhMV9mY2xrX2RpdjNfZGl2Lmh3Cj4+Pj4+Pj4+ICsgICAg ICAgIH0sCj4+Pj4+Pj4+ICsgICAgICAgIC5udW1fcGFyZW50cyA9IDEsCj4+Pj4+Pj4+ICsgICAg ICAgIC8qCj4+Pj4+Pj4+ICsgICAgICAgICAqIGFkZCBDTEtfSVNfQ1JJVElDQUwgZmxhZyB0byBh dm9pZCBiZWluZyBkaXNhYmxlZCBieSBjbGsKPj4+Pj4+Pj4gY29yZQo+Pj4+Pj4+PiArICAgICAg ICAgKiBpdHMgY2hpbGRyZW4gY2xvY2tzLgo+Pj4+Pj4+PiArICAgICAgICAgKi8KPj4+Pj4+Pj4g KyAgICAgICAgLmZsYWdzID0gQ0xLX0lTX0NSSVRJQ0FMLAo+Pj4+Pj4+PiArICAgIH0sCj4+Pj4+ Pj4+ICt9Owo+Pj4+Pj4+PiArCj4+Pj4+Pj4+ICtzdGF0aWMgc3RydWN0IGNsa19maXhlZF9mYWN0 b3IgYTFfZmNsa19kaXY1X2RpdiA9IHsKPj4+Pj4+Pj4gKyAgICAubXVsdCA9IDEsCj4+Pj4+Pj4+ ICsgICAgLmRpdiA9IDUsCj4+Pj4+Pj4+ICsgICAgLmh3LmluaXQgPSAmKHN0cnVjdCBjbGtfaW5p dF9kYXRhKXsKPj4+Pj4+Pj4gKyAgICAgICAgLm5hbWUgPSAiZmNsa19kaXY1X2RpdiIsCj4+Pj4+ Pj4+ICsgICAgICAgIC5vcHMgPSAmY2xrX2ZpeGVkX2ZhY3Rvcl9vcHMsCj4+Pj4+Pj4+ICsgICAg ICAgIC5wYXJlbnRfaHdzID0gKGNvbnN0IHN0cnVjdCBjbGtfaHcgKltdKSB7Cj4+Pj4+Pj4+ICsg ICAgICAgICAgICAmYTFfZml4ZWRfcGxsLmh3Cj4+Pj4+Pj4+ICsgICAgICAgIH0sCj4+Pj4+Pj4+ ICsgICAgICAgIC5udW1fcGFyZW50cyA9IDEsCj4+Pj4+Pj4+ICsgICAgfSwKPj4+Pj4+Pj4gK307 Cj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3JlZ21hcCBhMV9mY2xrX2Rp djUgPSB7Cj4+Pj4+Pj4+ICsgICAgLmRhdGEgPSAmKHN0cnVjdCBjbGtfcmVnbWFwX2dhdGVfZGF0 YSl7Cj4+Pj4+Pj4+ICsgICAgICAgIC5vZmZzZXQgPSBBTkFDVFJMX0ZJWFBMTF9DVFJMMCwKPj4+ Pj4+Pj4gKyAgICAgICAgLmJpdF9pZHggPSAyMywKPj4+Pj4+Pj4gKyAgICB9LAo+Pj4+Pj4+PiAr ICAgIC5ody5pbml0ID0gJihzdHJ1Y3QgY2xrX2luaXRfZGF0YSl7Cj4+Pj4+Pj4+ICsgICAgICAg IC5uYW1lID0gImZjbGtfZGl2NSIsCj4+Pj4+Pj4+ICsgICAgICAgIC5vcHMgPSAmY2xrX3JlZ21h cF9nYXRlX29wcywKPj4+Pj4+Pj4gKyAgICAgICAgLnBhcmVudF9od3MgPSAoY29uc3Qgc3RydWN0 IGNsa19odyAqW10pIHsKPj4+Pj4+Pj4gKyAgICAgICAgICAgICZhMV9mY2xrX2RpdjVfZGl2Lmh3 Cj4+Pj4+Pj4+ICsgICAgICAgIH0sCj4+Pj4+Pj4+ICsgICAgICAgIC5udW1fcGFyZW50cyA9IDEs Cj4+Pj4+Pj4+ICsgICAgICAgIC8qCj4+Pj4+Pj4+ICsgICAgICAgICAqIGFkZCBDTEtfSVNfQ1JJ VElDQUwgZmxhZyB0byBhdm9pZCBiZWluZyBkaXNhYmxlZCBieSBjbGsKPj4+Pj4+Pj4gY29yZQo+ Pj4+Pj4+PiArICAgICAgICAgKiBpdHMgY2hpbGRyZW4gY2xvY2tzLgo+Pj4+Pj4+PiArICAgICAg ICAgKi8KPj4+Pj4+Pj4gKyAgICAgICAgLmZsYWdzID0gQ0xLX0lTX0NSSVRJQ0FMLAo+Pj4+Pj4+ PiArICAgIH0sCj4+Pj4+Pj4+ICt9Owo+Pj4+Pj4+PiArCj4+Pj4+Pj4+ICtzdGF0aWMgc3RydWN0 IGNsa19maXhlZF9mYWN0b3IgYTFfZmNsa19kaXY3X2RpdiA9IHsKPj4+Pj4+Pj4gKyAgICAubXVs dCA9IDEsCj4+Pj4+Pj4+ICsgICAgLmRpdiA9IDcsCj4+Pj4+Pj4+ICsgICAgLmh3LmluaXQgPSAm KHN0cnVjdCBjbGtfaW5pdF9kYXRhKXsKPj4+Pj4+Pj4gKyAgICAgICAgLm5hbWUgPSAiZmNsa19k aXY3X2RpdiIsCj4+Pj4+Pj4+ICsgICAgICAgIC5vcHMgPSAmY2xrX2ZpeGVkX2ZhY3Rvcl9vcHMs Cj4+Pj4+Pj4+ICsgICAgICAgIC5wYXJlbnRfaHdzID0gKGNvbnN0IHN0cnVjdCBjbGtfaHcgKltd KSB7Cj4+Pj4+Pj4+ICsgICAgICAgICAgICAmYTFfZml4ZWRfcGxsLmh3Cj4+Pj4+Pj4+ICsgICAg ICAgIH0sCj4+Pj4+Pj4+ICsgICAgICAgIC5udW1fcGFyZW50cyA9IDEsCj4+Pj4+Pj4+ICsgICAg fSwKPj4+Pj4+Pj4gK307Cj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgY2xrX3Jl Z21hcCBhMV9mY2xrX2RpdjcgPSB7Cj4+Pj4+Pj4+ICsgICAgLmRhdGEgPSAmKHN0cnVjdCBjbGtf cmVnbWFwX2dhdGVfZGF0YSl7Cj4+Pj4+Pj4+ICsgICAgICAgIC5vZmZzZXQgPSBBTkFDVFJMX0ZJ WFBMTF9DVFJMMCwKPj4+Pj4+Pj4gKyAgICAgICAgLmJpdF9pZHggPSAyMywKPj4+Pj4+Pj4gKyAg ICB9LAo+Pj4+Pj4+PiArICAgIC5ody5pbml0ID0gJihzdHJ1Y3QgY2xrX2luaXRfZGF0YSl7Cj4+ Pj4+Pj4+ICsgICAgICAgIC5uYW1lID0gImZjbGtfZGl2NyIsCj4+Pj4+Pj4+ICsgICAgICAgIC5v cHMgPSAmY2xrX3JlZ21hcF9nYXRlX29wcywKPj4+Pj4+Pj4gKyAgICAgICAgLnBhcmVudF9od3Mg PSAoY29uc3Qgc3RydWN0IGNsa19odyAqW10pIHsKPj4+Pj4+Pj4gKyAgICAgICAgICAgICZhMV9m Y2xrX2RpdjdfZGl2Lmh3Cj4+Pj4+Pj4+ICsgICAgICAgIH0sCj4+Pj4+Pj4+ICsgICAgICAgIC5u dW1fcGFyZW50cyA9IDEsCj4+Pj4+Pj4+ICsgICAgICAgIC8qCj4+Pj4+Pj4+ICsgICAgICAgICAq IGFkZCBDTEtfSVNfQ1JJVElDQUwgZmxhZyB0byBhdm9pZCBiZWluZyBkaXNhYmxlZCBieSBjbGsK Pj4+Pj4+Pj4gY29yZQo+Pj4+Pj4+PiArICAgICAgICAgKiBvciBpdHMgY2hpbGRyZW4gY2xvY2su Cj4+Pj4+Pj4+ICsgICAgICAgICAqLwo+Pj4+Pj4+PiArICAgICAgICAuZmxhZ3MgPSBDTEtfSVNf Q1JJVElDQUwsCj4+Pj4+Pj4+ICsgICAgfSwKPj4+Pj4+Pj4gK307Cj4+Pj4+Pj4+ICsKPj4+IFsu Li5dCj4+Pj4+Pj4+IC0tIAo+Pj4+Pj4+PiAxLjkuMQo+Pj4+Pj4+Cj4+Pj4+Pj4gLgo+Pj4+Pj4+ Cj4+Pj4+Cj4+Pj4+IC4KPj4+Pj4KPj4KPj4gLgo+PgoKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0Cmxp bnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFk Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK