From mboxrd@z Thu Jan 1 00:00:00 1970 From: Olaf Hering Subject: [PATCH v12] tolerate jitter in cpu_khz calculation to avoid TSC emulation Date: Fri, 8 Mar 2019 20:20:59 +0100 Message-ID: <20190308192059.24610-1-olaf@aepfle.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1h2L41-00082E-Bi for xen-devel@lists.xenproject.org; Fri, 08 Mar 2019 19:21:50 +0000 List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Andrew Cooper , Olaf Hering , Wei Liu , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= List-Id: xen-devel@lists.xenproject.org SW1wcm92ZSBkZWNpc2lvbiB3aGVuIHZUU0MgZW11bGF0aW9uIHdpbGwgYmUgYWN0aXZhdGVkIGZv ciBhIGRvbVUgd2l0aAp0c2NfbW9kZT1kZWZhdWx0LiBUaGUgY3VycmVudCBhcHByb2FjaCBpcyB0 byBjb21wYXJlIHRoZSBjcHVfa2h6IHZhbHVlCmZyb20gdHdvIHBoeXNpY2FsIGhvc3RzLiBTaW5j ZSB0aGlzIHZhbHVlIGlzIG5vdCBhY2N1cmF0ZSwgaXQgY2FuIG5vdCBiZQp1c2VkIHZlcmJhdGlt IHRvIGRlY2lkZSBpZiB2VFNDIGVtdWxhdGlvbiBuZWVkcyB0byBiZSBlbmFibGVkLiBXaXRob3V0 CnRoaXMgY2hhbmdlIGVhY2ggVFNDIGFjY2VzcyBmcm9tIGRvbVUgd2lsbCBiZSBlbXVsYXRlZCBh ZnRlciBtaWdyYXRpb24sCndoaWNoIGNhdXNlcyBhIHNpZ25pZmljYW50IHBlcmZvbWFuY2UgZHJv cCBmb3Igd29ya2xvYWRzIHRoYXQgbWFrZSB1c2UKb2YgcmR0c2MuCgpJZiBhIGRvbVUgdXNlcyBU U0MgYXMgY2xvY2tzb3VyZSBpdCBhbHNvIG11c3QgcnVuIE5UUCBpbiBzb21lIHdheSB0bwphdm9p ZCB0aGUgcG90ZW50aWFsIGRyaWZ0IHdoYXQgd2lsbCBtb3N0IGxpa2VseSBoYXBwZW4sIGluZGVw ZW5kZW50IG9mCmFueSBtaWdyYXRpb24uIFRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgZHJpZnQgaXMg YmFzZWQgb24gdGhlIHRpbWUKcmV0dXJuZWQgYnkgcmVtb3RlIHNlcnZlcnMgdmVyc3VzIGhvdyBm YXN0IHRoZSBsb2NhbCBjbG9jayBhZHZhbmNlcy4gTlRQCm9uIExpbnV4IGNhbiBoYW5kbGUgYSBk cmlmdCB1cCB0byA1MDBQUE0uIFRoaXMgbWVhbnMgdGhlIGxvY2FsCmNsb2Nrc291cmNlIGNhbiBy dW4gdXAgdG8gNTAwdXMgc2xvd2VyIG9yIGZhc3Rlci4gVGhpcyBjYWxjdWxhdGlvbiBpcwpiYXNl ZCBvbiB0aGUgVFNDIGZyZXF1ZW5jeSBvZiB0aGUgaG9zdCB3aGVyZSB0aGUgZG9tVSB3YXMgc3Rh cnRlZC4KCklmIHRoZSBkb21VIGlzIG1pZ3JhdGVkIHRvIGFub3RoZXIgaG9zdCBvZiB0aGUgc2Ft ZSBjbGFzcywgYm90aCBob3N0cwptYXkgaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudCBUU0MgZnJl cXVlbmN5LiBUaGUgZGlmZmVyZW5jZSBpcyBzbWFsbAplbm91Z2ggYW5kIG1vc3QgbGlrZWx5IHdp dGhpbiB0aGUgZHJpZnQgcmFuZ2UgdGhhdCBOVFAgY2FuIGhhbmRsZS4KVGhlIHVwcGVyIGRyaWZ0 IGxpbWl0IG9mIDUwMFBQTSBpcyAxTUh6IG9uIGEgMi4wR0h6IGhvc3QuCgpPbmNlIGEgZG9tVSBp cyBtaWdyYXRlZCB0byBhIGhvc3Qgb2YgYSBkaWZmZXJlbnQgY2xhc3MsIGxpa2UgZnJvbQoiMi4z R0h6IiB0byAiMi40R0h6IiwgdGhlIFRTQyBmcmVxdWVuY3kgY2hhbmdlIGlzIHNpZ25pZmljYW50 LiBUaGUgZG9tVQprZXJuZWwgbWF5IG5vdCByZWNhbGlicmF0ZSBpdHNlbGYuIEFzIGEgcmVzdWx0 LCB0aGUgZHJpZnQgd2lsbCBiZSBsYXJnZXIKYW5kIHdpbGwgYmUgd2F5IG91dHNpZGUgb2YgdGhl IDUwMCBQUE0gcmFuZ2UuIEluIGFkZGl0aW9uLCB0aGUga2VybmVsCm1heSBub3RpY2UgdGhlIGNo YW5nZSBvZiBzcGVlZCBpbiB3aGljaCB0aGUgVFNDIGFkdmFuY2VzIGFuZCBjb3VsZApjaGFuZ2Ug dGhlIGNsb2Nrc291cmNlLiBUaGlzIHdpbGwgaW1wYWN0IHRoZSB3b3JrbG9hZCB3aXRoaW4gdGhl IGRvbVUuCkFsbCB0aGlzIGRlcGVuZHMgb2YgY291cnNlIG9uIHRoZSB0eXBlIG9mIE9TIHRoYXQg aXMgcnVubmluZyBpbiB0aGUKZG9tVS4gVGhpcyBwYXRjaCBjYW4gZG8gbm90aGluZyBmb3IgdGhp cyBjYXNlLgoKVGhlIGZvcm11bGEgdG8gc2V0IHRoZSB0b2xlcmFuY2UgZm9yIHRoaXMgaG9zdCBj YWxjdWxhdGVzIHRoZSB0aWNrcwp3aXRoaW4gYSB0aW1lc3BhbiBvZiA1MDAgUFBNLCB3aGljaCBp cyA1MDB1cy4gRnJvbSB0aGlzIG51bWJlciB0aGUKYXNzdW1lZCBqaXR0ZXIgaW4gdGhlIFRTQyBm cmVxdWVuY3kgbWVhc3VyZW1lbnQgbXVzdCBiZSBzdWJzdHJhY3RlZApiZWNhdXNlIFhlbiBpdHNl bGYgY2FuIG5vdCBrbm93IGlmIHRoZSBlc3RpbWF0ZWQgdmFsdWUgaW4gY3B1X2toeiBpcyBhdAp0 aGUgZWRnZSBvciBpbiB0aGUgbWlkZGxlIG9mIHRoZSByYW5nZSBvZiBwb3NzaWJsZSBmcmVxZW5j aWVzLiBEYXRhCmNvbGxlY3RlZCBkdXJpbmcgdGhlIGluY2lkZW50IHdoaWNoIHRyaWdnZXJlZCB0 aGlzIGNoYW5nZSBzaG93ZWQgYQpqaXR0ZXIgb2YgdXAgdG8gMjAwIEtIeiBhY3Jvc3Mgc3lzdGVt cyBvZiB0aGUgc2FtZSBjbGFzcy4gVGhlIHJlc3VsdGluZwp0b2xlcmFuY2UgaXMgbGFyZ2VyIHRo YW4gbmVlZGVkLCBhbmQgaXQgaXMgZXhwZWN0ZWQgdG8gc3RpbGwgY292ZXIgdGhlCnBvc3NpYmxl IGRyaWZ0IHRoYXQgTlRQIGNhbiBoYW5kbGUuCgpUbyByZWl0ZXJhdGUgdGhlIHNlY29uZCBwYXJh Z3JhcGg6IGlmIGEgZG9tVSB1c2VzIFRTQyBhcyBwcmltYXJ5IGNsb2NrCnNvdXJjZSwgaXQgaXMg ZXhwZWN0ZWQgdGhhdCBpdCBydW5zIE5UUCB0byBjb3ZlciBmb3IgdGhlIHJlc3VsdGluZwpkcmlm dC4gVGhlcmVmb3JlIHRoaXMgY2hhbmdlIGRvZXMgbm8gbmVlZCBhIGtub2IgdG8gdHVybiBpdCBv biBvciBvZmYuCgpTaWduZWQtb2ZmLWJ5OiBPbGFmIEhlcmluZyA8b2xhZkBhZXBmbGUuZGU+Ci0t Cgp2MTI6CiAtIHJlYmFzZSB0byA0ZGVlYWYyYTNlCiAtIHJlbW92ZSBjYXN0cyBhbmQgdHJhaWxp bmcgZG90IGluIGVhcmx5X3RpbWVfaW5pdAogLSBhZGQgY29tbWVudHMgdG8gZXhwbGFpbiBob3cg dnRzY190b2xlcmFuY2Vfa2h6IGlzIGNhbGN1bGF0ZWQKIC0gYWRqdXN0IGNhc3QgaW4gQUJTKCkK IC0gYWRqdXN0IGNvbW1lbnQgaW4gdHNjX3NldF9pbmZvCnYxMToKIC0gdHJpbSBwYXRjaCBhbmQg dXNlIGNhbGN1bGF0ZWQgdG9sZXJhbmNlIHZhbHVlLCBubyBhZG1pbiBpbnRlcmFjdGlvbgogICBy ZXF1aXJlZAp2MTA6CiAtIHJlYmFzZSB0byBhZTAxYThlMzE1CiAtIHJlbW92ZSBjaGFuZ2VzIGZv ciBsaWJ4bCBhbmQgc2F2ZS9yZXN0b3JlIHByb3RvY29sLCB0aGUgZmVhdHVyZSBoYXMKICAgdG8g YmUgcGVyIGhvc3QgaW5zdGVhZCBvZiBwZXIgZ3Vlc3QKIC0gYWRkIG5ld2xpbmUgdG8gdHNjX3Nl dF9pbmZvIChBbmRyZXcpCiAtIGFkZCBwb2ludGVyIHRvIHhlbi10c2Ntb2RlKDcpIGluIHhsLmNm Zyg1KS92dHNjX3RvbGVyYW5jZV9raHogKEFuZHJldykKIC0gbWVudGlvbiBwb3RlbnRpYWwgY2xv Y2sgZHJpZnQgaW4gdGhlIGRvbVUgKEFuZHJldykKIC0gcmV3b3JkIHRoZSBuZXdseSBhZGRlZCBw YXJhZ3JhcGggaW4geGVuLXRzY21vZGUoNykgKEFuZHJldyksCiAgIGFuZCBhbHNvIG1lbnRpb24g dGhhdCBpdCBpcyBhYm91dCB0aGUgbWVhc3VyZWQvZXN0aW1hdGVkIFRTQyB2YWx1ZQogICByYXRo ZXIgdGhhbiB0aGUgcmVhbCB2YWx1ZS4gVGhlIGxhdHRlciBpcyBzaW1wbHkgdW5rbm93bi4KIC0g dXNlIHVpbnQzMiBmb3IgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgeGVuX2RvbWN0bF90c2Nf aW5mby52dHNjX3RvbGVyYW5jZV9raHoKICAgYW5kIHJlbW92ZSBwYWRkaW5nIGZpZWxkCiAtIGFk ZCBtYXRoIGZvciByZWFsIFRTQyBmcmVxdWVuY3kgdG8geGVuLXRzY21vZGUKdjk6CiAtIGV4dGVu ZCBjb21taXQgbXNnLCBtZW50aW9uIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB4Y19zcl9yZWNfdHNj X2luZm8uX3JlczEKdjg6CiAtIGFkanVzdCBhbHNvIHB5dGhvbiBzdHJlYW0gY2hlY2tlciBmb3Ig YWRkZWQgdG9sZXJhbmNlIG1lbWJlcgp2NzoKIC0gdXNlIHVpbnQxNiBpbiBsaWJ4bF90eXBlcy5p ZGwgdG8gbWF0Y2ggdHlwZSB1c2VkIGVsc2V3aGVyZSBpbiB0aGUgcGF0Y2gKdjY6CiAtIG1lbnRp b24gZGVmYXVsdCB2YWx1ZSBpbiB4bC5jZmcKIC0gdHNjX3NldF9pbmZvOiByZW1vdmUgdXNhZ2Ug b2YgX19mdW5jX18sIHVzZSAlZCBmb3IgZG9taWQKIC0gdHNjX3NldF9pbmZvOiB1c2UgQUJTIHRv IGNhbGN1bGF0ZSBraHpfZGlmZgp2NToKIC0gcmVkdWNlIGZ1bmN0aW9uYWxpdHkgdG8gYWxsb3cg c2V0dGluZyBvZiB0aGUgdG9sZXJhbmNlIHZhbHVlCiAgIG9ubHkgYXQgaW5pdGlhbCBkb21VIHN0 YXJ0dXAKdjQ6CiAtIGFkZCBtaXNzaW5nIGNvcHliYWNrIGluIFhFTl9ET01DVExfc2V0X3Z0c2Nf dG9sZXJhbmNlX2toegp2MzoKIC0gcmVuYW1lIHZ0c2Nfa2h6X3RvbGVyYW5jZSB0byB2dHNjX3Rv bGVyYW5jZV9raHoKIC0gc2VwYXJhdGUgZG9tY3RscyB0byBhZGp1c3QgdmFsdWVzCiAtIG1vcmUg ZG9jcwogLSB1cGRhdGUgbGlieGwuaAogLSB1cGRhdGUgcHl0aG9uIHRlc3RzCiAtIGZsYXNrIGNo ZWNrIGJvdW5kIHRvIHRzYyBwZXJtaXNzaW9ucwogLSBub3QgcnVudGltZSB0ZXN0ZWQgZHVlIHRv IGRsc3ltKCkgYnVpbGQgZXJyb3JzIGluIHN0YWdpbmcKLS0tCiB4ZW4vYXJjaC94ODYvdGltZS5j IHwgNDkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLQog MSBmaWxlIGNoYW5nZWQsIDQ2IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEveGVuL2FyY2gveDg2L3RpbWUuYyBiL3hlbi9hcmNoL3g4Ni90aW1lLmMKaW5kZXggOWE2 ZWE4ZmZjYi4uYmVmNTcyNGMwNSAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L3RpbWUuYworKysg Yi94ZW4vYXJjaC94ODYvdGltZS5jCkBAIC00Myw2ICs0Myw5IEBAIHN0YXRpYyBjaGFyIF9faW5p dGRhdGEgb3B0X2Nsb2Nrc291cmNlWzEwXTsKIHN0cmluZ19wYXJhbSgiY2xvY2tzb3VyY2UiLCBv cHRfY2xvY2tzb3VyY2UpOwogCiB1bnNpZ25lZCBsb25nIF9fcmVhZF9tb3N0bHkgY3B1X2toejsg IC8qIENQVSBjbG9jayBmcmVxdWVuY3kgaW4ga0h6LiAqLworI2RlZmluZSBWVFNDX05UUF9QUE1f VE9MRVJBTkNFIDUwMFVMICAvKiBBbW91bnQgb2YgZHJpZnQgTlRQIHdpbGwgaGFuZGxlICovCisj ZGVmaW5lIFZUU0NfSklUVEVSX1JBTkdFX0tIWiAyMDBVTCAgIC8qIEFzc3VtZWQgaml0dGVyIGlu IGNwdV9raHogKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19yZWFkX21vc3RseSB2dHNjX3RvbGVy YW5jZV9raHo7CiBERUZJTkVfU1BJTkxPQ0socnRjX2xvY2spOwogdW5zaWduZWQgbG9uZyBwaXQw X3RpY2tzOwogCkBAIC0xODg1LDYgKzE4ODgsMjcgQEAgdm9pZCBfX2luaXQgZWFybHlfdGltZV9p bml0KHZvaWQpCiAgICAgcHJpbnRrKCJEZXRlY3RlZCAlbHUuJTAzbHUgTUh6IHByb2Nlc3Nvci5c biIsIAogICAgICAgICAgICBjcHVfa2h6IC8gMTAwMCwgY3B1X2toeiAlIDEwMDApOwogCisgICAg LyoKKyAgICAgKiBIb3cgbWFueSBrSHogKGluIG90aGVyIHdvcmRzOiBkcmlmdCkgaXMgbnRwZCBp biBkb21VIGV4cGVjdGVkIHRvIGhhbmRsZT8KKyAgICAgKiAgICBmcmVxICAgIHRvbGVyYXRlZCBm cmVxIGRpZmZlcmVuY2UKKyAgICAgKiAgLS0tLS0tLSA9IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAgICAgKiAgTWlsbGlvbiAgICAgICAgIE1pbGxpb24gKyBQUE0gICAgICAKKyAgICAgKi8K KyAgICB0bXAgPSAxMDAwICogMTAwMDsKKyAgICB0bXAgKz0gVlRTQ19OVFBfUFBNX1RPTEVSQU5D RTsKKyAgICB0bXAgKj0gY3B1X2toejsKKyAgICB0bXAgLz0gMTAwMCAqIDEwMDA7CisKKyAgICB0 bXAgLT0gY3B1X2toejsKKworICAgIC8qCisgICAgICogUmVkdWNlIHRoZSB0aGVvcmV0aWNhbCB1 cHBlciBsaW1pdCBieSB0aGUgYXNzdW1lZCBtZWFzdXJpbmcgaW5hY2N1cmFjeS4KKyAgICAgKi8K KyAgICBpZiAoIHRtcCA+PSBWVFNDX0pJVFRFUl9SQU5HRV9LSFogKQorICAgICAgICB0bXAgLT0g VlRTQ19KSVRURVJfUkFOR0VfS0haOworICAgIHZ0c2NfdG9sZXJhbmNlX2toeiA9IHRtcDsKKyAg ICBwcmludGsoIlRvbGVyYXRpbmcgdnRzYyBqaXR0ZXIgZm9yIGRvbVVzOiAldSBrSHpcbiIsIHZ0 c2NfdG9sZXJhbmNlX2toeik7CisKICAgICBzZXR1cF9pcnEoMCwgMCwgJmlycTApOwogfQogCkBA IC0yMTkzLDYgKzIyMTcsOCBAQCBpbnQgdHNjX3NldF9pbmZvKHN0cnVjdCBkb21haW4gKmQsCiAK ICAgICBzd2l0Y2ggKCB0c2NfbW9kZSApCiAgICAgeworICAgICAgICBib29sIGRpc2FibGVfdnRz YzsKKwogICAgIGNhc2UgVFNDX01PREVfREVGQVVMVDoKICAgICBjYXNlIFRTQ19NT0RFX0FMV0FZ U19FTVVMQVRFOgogICAgICAgICBkLT5hcmNoLnZ0c2Nfb2Zmc2V0ID0gZ2V0X3NfdGltZSgpIC0g ZWxhcHNlZF9uc2VjOwpAQCAtMjIwMSwxMyArMjIyNywzMCBAQCBpbnQgdHNjX3NldF9pbmZvKHN0 cnVjdCBkb21haW4gKmQsCiAKICAgICAgICAgLyoKICAgICAgICAgICogSW4gZGVmYXVsdCBtb2Rl IHVzZSBuYXRpdmUgVFNDIGlmIHRoZSBob3N0IGhhcyBzYWZlIFRTQyBhbmQKLSAgICAgICAgICog aG9zdCBhbmQgZ3Vlc3QgZnJlcXVlbmNpZXMgYXJlIHRoZSBzYW1lIChlaXRoZXIgIm5hdHVyYWxs eSIgb3IKLSAgICAgICAgICogLSBmb3IgSFZNL1BWSCAtIHZpYSBUU0Mgc2NhbGluZykuCisgICAg ICAgICAqIGhvc3QgYW5kIGd1ZXN0IGZyZXF1ZW5jaWVzIGFyZSAoYWxtb3N0KSB0aGUgc2FtZSAo ZWl0aGVyICJuYXR1cmFsbHkiCisgICAgICAgICAqIG9yIC0gZm9yIEhWTS9QVkggLSB2aWEgVFND IHNjYWxpbmcpLgogICAgICAgICAgKiBXaGVuIGEgZ3Vlc3QgaXMgY3JlYXRlZCwgZ3RzY19raHog aXMgcGFzc2VkIGluIGFzIHplcm8sIG1ha2luZwogICAgICAgICAgKiBkLT5hcmNoLnRzY19raHog PT0gY3B1X2toei4gVGh1cyBubyBuZWVkIHRvIGNoZWNrIGluY2FybmF0aW9uLgogICAgICAgICAg Ki8KKyAgICAgICAgZGlzYWJsZV92dHNjID0gZC0+YXJjaC50c2Nfa2h6ID09IGNwdV9raHo7CisK KyAgICAgICAgaWYgKCB0c2NfbW9kZSA9PSBUU0NfTU9ERV9ERUZBVUxUICYmIGd0c2Nfa2h6ICYm IHZ0c2NfdG9sZXJhbmNlX2toeiApCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvbmcga2h6X2Rp ZmY7CisKKyAgICAgICAgICAgIGtoel9kaWZmID0gQUJTKCgobG9uZyljcHVfa2h6IC0gZ3RzY19r aHopKTsKKyAgICAgICAgICAgIGRpc2FibGVfdnRzYyA9IGtoel9kaWZmIDw9IHZ0c2NfdG9sZXJh bmNlX2toejsKKworICAgICAgICAgICAgcHJpbnRrKFhFTkxPR19HX0lORk8gImQlZDogaG9zdCBo YXMgJWx1IGtIeiwiCisgICAgICAgICAgICAgICAgICAgIiBkb21VIGV4cGVjdHMgJXUga0h6LCIK KyAgICAgICAgICAgICAgICAgICAiIGRpZmZlcmVuY2Ugb2YgJWxkIGlzICVzIHRvbGVyYW5jZSBv ZiAldVxuIiwKKyAgICAgICAgICAgICAgICAgICBkLT5kb21haW5faWQsIGNwdV9raHosIGd0c2Nf a2h6LCBraHpfZGlmZiwKKyAgICAgICAgICAgICAgICAgICBkaXNhYmxlX3Z0c2MgPyAid2l0aGlu IiA6ICJvdXRzaWRlIiwKKyAgICAgICAgICAgICAgICAgICB2dHNjX3RvbGVyYW5jZV9raHopOwor ICAgICAgICB9CisKICAgICAgICAgaWYgKCB0c2NfbW9kZSA9PSBUU0NfTU9ERV9ERUZBVUxUICYm IGhvc3RfdHNjX2lzX3NhZmUoKSAmJgotICAgICAgICAgICAgIChkLT5hcmNoLnRzY19raHogPT0g Y3B1X2toeiB8fAorICAgICAgICAgICAgIChkaXNhYmxlX3Z0c2MgfHwKICAgICAgICAgICAgICAg KGlzX2h2bV9kb21haW4oZCkgJiYKICAgICAgICAgICAgICAgIGh2bV9nZXRfdHNjX3NjYWxpbmdf cmF0aW8oZC0+YXJjaC50c2Nfa2h6KSkpICkKICAgICAgICAgewoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4t ZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9t YWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZlbA==