From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id EBBE7C04A94 for ; Tue, 1 Aug 2023 21:01:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=nRujz4EZYHqo3LWp/9NEkBAFnDYMwvjJRyTI+3QpNl8=; b=s8PL3hg/wejalk x2G/fFsHdM7AS4OE++LkFvEHdGssF6rlUXBuxxzBIsDwLw17bBz8ywLNNJJ7CIETuW3nqrgP5NJ0j FM/wecstTs9OZjmqSTFv30U853Vtf57CnpMhhSdVKotmO179XdJ4ZKYAF+nCtebGE9BNEJp+b9GrF O9zTF81VTZn22s0NRLm+/VDG+OERUaAfgCFTAL68tZVpOQBGLLuVM8pJ5h7er52EqI8uxMy0zc9Sh gZadZ97dW+54TsQTx/3ONgpj7MZdK1JWN+epYr2WlR003/EJXlT0ga1+3WYAce4zT6CNbBWyFx19F IgVph/sp0wZA7nRjdFxA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qQwUZ-003JMm-1g; Tue, 01 Aug 2023 21:01:19 +0000 Received: from linux.microsoft.com ([13.77.154.182]) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qQwUW-003JMB-16 for kexec@lists.infradead.org; Tue, 01 Aug 2023 21:01:18 +0000 Received: from [192.168.87.36] (c-98-237-170-177.hsd1.wa.comcast.net [98.237.170.177]) by linux.microsoft.com (Postfix) with ESMTPSA id F3AC7238AE9F; Tue, 1 Aug 2023 14:01:12 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com F3AC7238AE9F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1690923673; bh=neqUcw1bWdMlCVvlmZAMwLWfAKai4Nr455p592WKaO0=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=kj+PJM8kXyY7LUpTK9V9qqegjJMDPwZFNDvVEuE8jAmhIRqNH0p4wMBCE/Yp3S3FZ eCm5cFmceXfHO1Ar89tSKaPUFf1He4RIgARIv5H+uDSP6khnZUpJBe59zGHlVgpCeJ Qxxq4OIUmjU9xNrhy1Ps5BrLA9RdCoZ1UZ3vWmRo= Message-ID: <1d592ca1-1f6c-9eef-ce71-b07a837372b0@linux.microsoft.com> Date: Tue, 1 Aug 2023 14:01:12 -0700 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.13.0 Subject: Re: [PATCH 1/6] tpm: implement TPM2 function to get update counter Content-Language: en-US To: Jarkko Sakkinen , zohar@linux.ibm.com, noodles@fb.com, bauermann@kolabnow.com, ebiederm@xmission.com, bhe@redhat.com, vgoyal@redhat.com, dyoung@redhat.com, peterhuewe@gmx.de, jgg@ziepe.ca, kexec@lists.infradead.org, linux-integrity@vger.kernel.org Cc: code@tyhicks.com, nramas@linux.microsoft.com, paul@paul-moore.com References: <20230801181917.8535-1-tusharsu@linux.microsoft.com> <20230801181917.8535-2-tusharsu@linux.microsoft.com> From: Tushar Sugandhi In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230801_140116_445767_96988080 X-CRM114-Status: GOOD ( 30.97 ) X-BeenThere: kexec@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "kexec" Errors-To: kexec-bounces+kexec=archiver.kernel.org@lists.infradead.org VGhhbmtzIGZvciB0aGUgcmVzcG9uc2UgSmFya2tvLgoKT24gOC8xLzIzIDEyOjAyLCBKYXJra28g U2Fra2luZW4gd3JvdGU6Cj4gVGhlIHNob3J0IHN1bW1hcnkgaXMgY3J5cHRpYyB0byBzYXkgdGhl IGxlYXN0LgpEbyB5b3UgbWVhbiB0aGUgcGF0Y2ggc3ViamVjdCBsaW5lLCBvciB0aGUgZGVzY3Jp cHRpb24gYmVsb3c/Cj4gInVwZGF0ZSBjb3VudGVyIiBkb2VzIG5vdCBtYXAgaXQgdG8gaGF2ZSBh bnl0aGluZyB0byBkbyB3aXRoIFBDUnMuCkFncmVlZC7CoCBJIG5vdGljZWQgdGhhdCB3aGVuIEkg d2FzIHRlc3RpbmcgdGhlIHBhdGNoZXMuClRoZSB1cGRhdGUgY291bnRlciBpcyBzYW1lIGZvciBh bGwgUENScy7CoCBJdCB3YXMgYWxzbyB0aGUgc2FtZSBmb3IKdGhlIHR3byBoYXNoIGFsZ28ncyBJ IHRlc3RlZCBpdCBmb3IgKFNIQTEgYW5kIFNIQTI1NikuIEJ1dCB0aGUgc3BlYwpkZXNjcmlwdGlv biBhbmQgS2VybmVsIGltcGxlbWVudGF0aW9uIHJlcXVpcmVzIHRvIHBhc3MgdGhlCnBjcl9pZHgg YW5kIGhhc2ggYWxnbyB0byBQQ1JfUmVhZCBjb21tYW5kIHRvIGdldCB0aGUgdXBkYXRlIGNvdW50 ZXIuCj4gV2h5IG5vdCAidHBtOiBSZWFkIHBjclVwZGF0ZUNvdW50ZXIgZmllbGQgZnJvbSBUUE0y X1BDUl9SZWFkIj8KQXMgSSBzYWlkIGluIHRoZSBwYXRjaCBkZXNjcmlwdGlvbiBiZWxvdywgdXBk YXRlIGNvdW50ZXIgaXMgb25seQpuZWVkZWQgZm9yIElNQSBtZWFzdXJlbWVudHMuwqAgTm9uZSBv ZiB0aGUgb3RoZXIgY29kZSB0aGF0IGNhbGxzCnRwbTJfcGNyX3JlYWQoKSB1c2UgdGhlIHVwZGF0 ZSBjb3VudGVyLgoKSSB3YXMgbm90IHN1cmUgaWYgeW91IHdlcmUgb2theSBjaGFuZ2luZyB0aGUg ZnVuY3Rpb24gc2lnbmF0dXJlIGFuZAppbXBsZW1lbnRhdGlvbiBvZiB0cG0yX3Bjcl9yZWFkKCku IEl0IGZlbHQgZGlzcnVwdGl2ZS4KCkJ1dCBJIGNhbiB1cGRhdGUgdHBtMl9wY3JfcmVhZCgpIGlm IHlvdSBhcmUgb2sgd2l0aCBpdC4KUGxlYXNlIGxldCBtZSBrbm93LgoKSSBhbHNvIGhhdmUgYSBm ZXcgbW9yZSB0aG91Z2h0cyBvbiB0aGlzIGluIHRoZSBjb21tZW50IGJlbG93Lgo+IE9uIFR1ZSBB dWcgMSwgMjAyMyBhdCA5OjE5IFBNIEVFU1QsIFR1c2hhciBTdWdhbmRoaSB3cm90ZToKPj4gVGhl IFRQTTJfUENSX1JlYWQgY29tbWFuZCByZXR1cm5zIFRQTTJfUENSX1JlYWQgUmVzcG9uc2Ugc3Ry dWN0WzFdLiAgSXQKPj4gY29udGFpbnMgcGNyVXBkYXRlQ291bnRlciBtZW1iZXIgd2hpY2ggY29u dGFpbnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgVFBNCj4+IFBDUiB1cGRhdGUgY291bnRlci4gIFRo ZSB1cGRhdGUgY291bnRlciBwcm92aWRlcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZQo+PiBQQ1Jz IGFyZSB1cGRhdGVkLCB3aGljaCBpcyBlc3NlbnRpYWwgZm9yIHRyYWNraW5nIGNoYW5nZXMgYW5k IHZlcmlmeWluZwo+PiBzeXN0ZW0gaW50ZWdyaXR5LiAgVGh1cywgc3Vic3lzdGVtcyAobGlrZSBJ TUEpIHNob3VsZCBtZWFzdXJlCj4+IHBjclVwZGF0ZUNvdW50ZXIgdmFsdWUuICBBbHRob3VnaCB0 cG0yX3Bjcl9yZWFkX291dCBzdHJ1Y3QgaXMgcmV0dXJuZWQKPj4gYnkgdHBtMl9wY3JfcmVhZCgp LCBpdCBpcyBub3QgdXNlZCBieSBpdCdzIGNhbGxlciBmdW5jdGlvbiB0cG1fcGNyX3JlYWQoKS4K Pj4gRnVydGhlciwgVFBNMl9QQ1JfUmVhZCBSZXNwb25zZSBzdHJ1Y3QgYW5kIHBjclVwZGF0ZUNv dW50ZXIgaXMgbm90Cj4+IGF2YWlsYWJsZSBpbiB0cG0xX3Bjcl9yZWFkKCkuCj4+Cj4+IFBjclVw ZGF0ZUNvdW50ZXIgaXMgb25seSBuZWVkZWQgaW4gYSBzcGVjaWZpYyBjYXNlIChJTUEgZm9yIG1l YXN1cmVtZW50cykuCj4+IENoYW5naW5nIHRwbV9wY3JfcmVhZCgpIGFuZCB0cG0yX3Bjcl9yZWFk KCkgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIHJldHVybgo+PiB0cG0yX3Bjcl9yZWFkX291dCBzdHJ1 Y3Qgd291bGQgYmUgYSBtb3JlIGRpc3J1cHRpdmUgY2hhbmdlLCBzaW5jZSB0aGVzZQo+PiBmdW5j dGlvbnMgYXJlIHVzZWQgZWxzZXdoZXJlIHRvby4gIENyZWF0aW5nIHNlcGFyYXRlIGZ1bmN0aW9u cyB0byBnZXQKPj4gcGNyVXBkYXRlQ291bnRlciB3aGVuIG5lZWRlZCB3b3VsZCBiZSBhIGNsZWFu ZXIgYXBwcm9hY2guCj4+Cj4+IEFkZCBhIGZ1bmN0aW9uLCAndHBtMl9wY3JfZ2V0X3VwZGF0ZV9j b3VudGVyKCknIHRvIHJldHJpZXZlCj4+IHRoZSB1cGRhdGUgY291bnRlciBmb3IgYSBnaXZlbiBQ Q1IgaW5kZXggYW5kIGFsZ29yaXRobSBJRCBvbiBhIFRQTTIgY2hpcC4KPj4KPj4gVGhpcyBmdW5j dGlvbiBjb21wbGVtZW50cyBleGlzdGluZyBUUE0gZnVuY3Rpb25hbGl0aWVzIHN1Y2ggYXMgcmVh ZGluZwo+PiBhbmQgZXh0ZW5kaW5nIFBDUnMsIGFuZCBlbmhhbmNlcyB0aGUgYWJpbGl0eSB0byBt b25pdG9yIFBDUiBzdGF0dXMKPj4gaW4gdGhlIExpbnV4IEtlcm5lbC4KPj4KPj4gWzFdIGh0dHBz Oi8vdHJ1c3RlZGNvbXB1dGluZ2dyb3VwLm9yZy93cC1jb250ZW50L3VwbG9hZHMvVENHX1RQTTJf cjFwNTlfUGFydDNfQ29tbWFuZHNfcHViLnBkZgo+PiBTZWN0aW9uIDIyLjQuMiwgUGFnZSAyMDYu Cj4+Cj4+IFNpZ25lZC1vZmYtYnk6IFR1c2hhciBTdWdhbmRoaSA8dHVzaGFyc3VAbGludXgubWlj cm9zb2Z0LmNvbT4KPj4gLS0tCj4+ICAgZHJpdmVycy9jaGFyL3RwbS90cG0uaCAgICAgIHwgIDMg KysrCj4+ICAgZHJpdmVycy9jaGFyL3RwbS90cG0yLWNtZC5jIHwgNDggKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwo+PiAgIDIgZmlsZXMgY2hhbmdlZCwgNTEgaW5zZXJ0aW9u cygrKQo+Pgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG0uaCBiL2RyaXZlcnMv Y2hhci90cG0vdHBtLmgKPj4gaW5kZXggODMwMDE0YTI2NjA5Li42MDQ4OWYyMWQzYmQgMTAwNjQ0 Cj4+IC0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtLmgKPj4gKysrIGIvZHJpdmVycy9jaGFyL3Rw bS90cG0uaAo+PiBAQCAtMjg4LDYgKzI4OCw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0cG1fYWRk X3BwaShzdHJ1Y3QgdHBtX2NoaXAgKmNoaXApCj4+ICAgaW50IHRwbTJfZ2V0X3RpbWVvdXRzKHN0 cnVjdCB0cG1fY2hpcCAqY2hpcCk7Cj4+ICAgaW50IHRwbTJfcGNyX3JlYWQoc3RydWN0IHRwbV9j aGlwICpjaGlwLCB1MzIgcGNyX2lkeCwKPj4gICAJCSAgc3RydWN0IHRwbV9kaWdlc3QgKmRpZ2Vz dCwgdTE2ICpkaWdlc3Rfc2l6ZV9wdHIpOwo+PiAraW50IHRwbTJfcGNyX2dldF91cGRhdGVfY291 bnRlcihzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsCj4+ICsJCQkJdTMyIHBjcl9pZHgsIHUxNiBhbGdf aWQsCj4+ICsJCQkJdTMyICp1cGRhdGVfY291bnRlcik7Cj4gdHBtX3Bjcl9yZWFkX3VwZGF0ZV9j bnQoKQpJIGNhbiByZW5hbWUgJ2dldCcgLT4gJ3JlYWQnCgpBYm91dCAndHBtMicgLT4gJ3RwbSc6 CkkgYWxyZWFkeSBoYXZlIHRwbV9wY3JfZ2V0X3VwZGF0ZV9jb3VudGVyKCkgZGVmaW5lZCBpbiBw YXRjaCAyLgoKSSB3YXMgZm9sbG93aW5nIHRoZSBleGlzdGluZyBwYXR0ZXJuIGhlcmUgaW4gcGF0 Y2ggMSBhbmQgMiBpLiBlLgogwqAtIEltcGxlbWVudGluZyB0aGUgdHBtMS90cG0yIHNwZWNpZmlj IGZ1bmN0aW9uYWxpdHkgaW4KIMKgwqAgZHJpdmVycy9jaGFyL3RwbS90cG0uaCwgZHJpdmVycy9j aGFyL3RwbS90cG0yLWNtZC5jLAogwqDCoCBkcml2ZXJzL2NoYXIvdHBtL3RwbTEtY21kLmMuCgog wqAtIEFuZCBjb21iaW5pbmcgdGhhdCBmdW5jdGlvbmFsaXR5IGluIGRyaXZlcnMvY2hhci90cG0v dHBtLWludGVyZmFjZS5jCiDCoMKgIGFuZCBleHBvc2luZyBpdCB0byBvdGhlciBzdWJzeXN0ZW1z IChsaWtlIElNQSkgdGhyb3VnaCAKaW5jbHVkZS9saW51eC90cG0uaAogwqDCoCAocGF0Y2ggMiBv ZiB0aGlzIHNlcmllcykKCkJUVywgaWYgSSB1bmRlcnN0YW5kIGNvcnJlY3RseSwgdGhlIHVwZGF0 ZSBjb3VudGVyIGlzIG5vdCBhdmFpbGFibGUgaW4gClRQTSAxLjIuCgpQbGVhc2UgbGV0IG1lIGtu b3cgaWYgeW91IHdhbnQgbWUgdG8gZXhwb3NlIHRoZSBmdW5jdGlvbmFsaXR5IGRpcmVjdGx5CmZy b20gZHJpdmVycy9jaGFyL3RwbS90cG0yLWNtZC5jIGFuZCBnZXR0aW5nIHJpZCBvZiBwYXRjaCAj MiBvZiB0aGlzIHNlcmllcy4KCn5UdXNoYXIKCj4+ICAgaW50IHRwbTJfcGNyX2V4dGVuZChzdHJ1 Y3QgdHBtX2NoaXAgKmNoaXAsIHUzMiBwY3JfaWR4LAo+PiAgIAkJICAgIHN0cnVjdCB0cG1fZGln ZXN0ICpkaWdlc3RzKTsKPj4gICBpbnQgdHBtMl9nZXRfcmFuZG9tKHN0cnVjdCB0cG1fY2hpcCAq Y2hpcCwgdTggKmRlc3QsIHNpemVfdCBtYXgpOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFy L3RwbS90cG0yLWNtZC5jIGIvZHJpdmVycy9jaGFyL3RwbS90cG0yLWNtZC5jCj4+IGluZGV4IDkz NTQ1YmUxOTBhNS4uNTVmNGUxMDIyODlhIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2NoYXIvdHBt L3RwbTItY21kLmMKPj4gKysrIGIvZHJpdmVycy9jaGFyL3RwbS90cG0yLWNtZC5jCj4+IEBAIC0y MTYsNiArMjE2LDU0IEBAIGludCB0cG0yX3Bjcl9yZWFkKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwg dTMyIHBjcl9pZHgsCj4+ICAgCXJldHVybiByYzsKPj4gICB9Cj4+ICAgCj4+ICsvKioKPj4gKyAq IHRwbTJfcGNyX2dldF91cGRhdGVfY291bnRlcigpIC0gZ2V0cyBhbiB1cGRhdGUgY291bnRlciB2 YWx1ZSBmb3IgYSBQQ1IgYmFuawo+PiArICogQGNoaXA6IFRQTSBjaGlwIHRvIHVzZQo+PiArICog QHBjcl9pZHg6IFBDUiBpbmRleCB1c2VkIHRvIHJldHJpZXZlIHRoZSB1cGRhdGUgY291bnRlcgo+ PiArICogQGFsZ19pZDoJYWxnIGlkIHVzZWQgdG8gcmV0cmlldmUgdGhlIHVwZGF0ZSBjb3VudGVy Cj4+ICsgKiBAdXBkYXRlX2NvdW50ZXI6IG91dHB1dCB1cGRhdGUgY291bnRlciB2YWx1ZQo+PiAr ICoKPj4gKyAqIFJldHVybjogU2FtZSBhcyB3aXRoIHRwbV90cmFuc21pdF9jbWQuCj4+ICsgKi8K Pj4gK2ludCB0cG0yX3Bjcl9nZXRfdXBkYXRlX2NvdW50ZXIoc3RydWN0IHRwbV9jaGlwICpjaGlw LAo+PiArCQkJCXUzMiBwY3JfaWR4LCB1MTYgYWxnX2lkLCB1MzIgKnVwZGF0ZV9jb3VudGVyKQo+ PiArewo+PiArCWludCByYzsKPj4gKwlzdHJ1Y3QgdHBtX2J1ZiBidWY7Cj4+ICsJc3RydWN0IHRw bTJfcGNyX3JlYWRfb3V0ICpyZWFkX291dDsKPj4gKwl1OCBwY3Jfc2VsZWN0W1RQTTJfUENSX1NF TEVDVF9NSU5dID0gezB9Owo+PiArCj4+ICsJaWYgKHBjcl9pZHggPj0gVFBNMl9QTEFURk9STV9Q Q1IpCj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiArCj4+ICsJaWYgKCF1cGRhdGVfY291bnRlcikK Pj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4gKwlyYyA9IHRwbV9idWZfaW5pdCgmYnVmLCBU UE0yX1NUX05PX1NFU1NJT05TLCBUUE0yX0NDX1BDUl9SRUFEKTsKPj4gKwlpZiAocmMpCj4+ICsJ CXJldHVybiByYzsKPj4gKwo+PiArCXBjcl9zZWxlY3RbcGNyX2lkeCA+PiAzXSA9IDEgPDwgKHBj cl9pZHggJiAweDcpOwo+PiArCj4+ICsJdHBtX2J1Zl9hcHBlbmRfdTMyKCZidWYsIDEpOwo+PiAr CXRwbV9idWZfYXBwZW5kX3UxNigmYnVmLCBhbGdfaWQpOwo+PiArCXRwbV9idWZfYXBwZW5kX3U4 KCZidWYsIFRQTTJfUENSX1NFTEVDVF9NSU4pOwo+PiArCXRwbV9idWZfYXBwZW5kKCZidWYsIChj b25zdCB1bnNpZ25lZCBjaGFyICopcGNyX3NlbGVjdCwKPj4gKwkJICAgICAgIHNpemVvZihwY3Jf c2VsZWN0KSk7Cj4+ICsKPj4gKwlyYyA9IHRwbV90cmFuc21pdF9jbWQoY2hpcCwgJmJ1ZiwgMCwg ImF0dGVtcHRpbmcgdG8gcmVhZCBhIHBjciB2YWx1ZSIpOwo+PiArCWlmIChyYykKPj4gKwkJZ290 byBvdXQ7Cj4+ICsKPj4gKwlyZWFkX291dCA9IChzdHJ1Y3QgdHBtMl9wY3JfcmVhZF9vdXQgKikm YnVmLmRhdGFbVFBNX0hFQURFUl9TSVpFXTsKPj4gKwo+PiArCSp1cGRhdGVfY291bnRlciA9IGJl MzJfdG9fY3B1KHJlYWRfb3V0LT51cGRhdGVfY250KTsKPj4gKwo+PiArb3V0Ogo+PiArCXRwbV9i dWZfZGVzdHJveSgmYnVmKTsKPj4gKwlyZXR1cm4gcmM7Cj4+ICt9Cj4+ICsKPj4gICBzdHJ1Y3Qg dHBtMl9udWxsX2F1dGhfYXJlYSB7Cj4+ICAgCV9fYmUzMiAgaGFuZGxlOwo+PiAgIAlfX2JlMTYg IG5vbmNlX3NpemU7Cj4+IC0tIAo+PiAyLjI1LjEKPiBCUiwgSmFya2tvCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwprZXhlYyBtYWlsaW5nIGxpc3QKa2V4 ZWNAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2tleGVjCg==