From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [PATCH i-g-t] scripts/trace.pl: Optimize event parsing and processing Date: Tue, 19 Dec 2017 11:15:39 +0000 Message-ID: <20171219111539.11231-1-tvrtko.ursulin@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x232.google.com (mail-wm0-x232.google.com [IPv6:2a00:1450:400c:c09::232]) by gabe.freedesktop.org (Postfix) with ESMTPS id 64BE86E2BF for ; Tue, 19 Dec 2017 11:15:50 +0000 (UTC) Received: by mail-wm0-x232.google.com with SMTP id b76so2852847wmg.1 for ; Tue, 19 Dec 2017 03:15:50 -0800 (PST) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KCkEgY291cGxl IG9mIHNtYWxsIG9wdGltaXphdGlvbnMgd2hpY2ggYWx0b2dldGhlciBicmluZyBhcm91bmQgMzAl CmltcHJvdmVtZW50IGluIG15IHRlc3RpbmcuCgoxLiBEbyBsZXNzIHN0cmluZyBwcm9jZXNzaW5n IG9uIHRyYWNlcG9pbnRzIG5hbWVzIGFuZCBwdXNoIG1vcmUgb2YgdGhlCiAgIGNoZWNrIGludG8g dGhlIGlmLWxhZGRlci4KCjIuIFB1bGwgb3V0IGNvbW1vbiBkYiBrZXkgYW5kIGN0eCBwcm9jZXNz aW5nIGFuZCBjYWNoZSBjb21tb24gdmFsdWVzIGluCiAgIGxvY2FsIHZhcnMuCgozLiBLZXkgdmFs dWUgcGFpciBwYXJzaW5nIGlzIGZhc3RlciB3aXRoIGEgcmVnZXhwLgoKNC4gQXZvaWQgc29ydGlu ZyB0aGUgZGIgaGFzaCBtdWx0aXBsZSB0aW1lcyBpZiBwb3NzaWJsZS4KClNpZ25lZC1vZmYtYnk6 IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+CkNjOiBKb2huIEhhcnJp c29uIDxKb2huLkMuSGFycmlzb25AaW50ZWwuY29tPgotLS0KIHNjcmlwdHMvdHJhY2UucGwgfCAx MTQgKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogMSBmaWxlIGNoYW5nZWQsIDQ5IGluc2VydGlvbnMoKyksIDY1IGRlbGV0aW9ucygtKQotLS0K Sm9obiBwbGVhc2UgY2hlY2sgaWYgdGhpcyBoZWxwcyB3aXRoIHlvdXIgbW9uc3RlciB0cmFjZXMg YmVmb3JlIHdlIGRlY2lkZQppZiBpdCBpcyB3b3J0aCBwdXR0aW5nIHRoaXMgaW4uIFdlbGwsIHRo ZXJlIGlzbid0IG11Y2ggb2YgYSBkb3duc2lkZQpleGNlcHQgdG91Y2hpbmcgc29tZXRoaW5nIHdo aWNoIHdvcmtzIGFuZCByaXNraW5nIGJyZWFraW5nIGl0LgoKZGlmZiAtLWdpdCBhL3NjcmlwdHMv dHJhY2UucGwgYi9zY3JpcHRzL3RyYWNlLnBsCmluZGV4IDk4ZTRhOTg0M2E0My4uNTQ2M2UxZmQx OTU0IDEwMDc1NQotLS0gYS9zY3JpcHRzL3RyYWNlLnBsCisrKyBiL3NjcmlwdHMvdHJhY2UucGwK QEAgLTM1NiwxMTAgKzM1Niw5MSBAQCBteSAkcHJldl9mcmVxID0gMDsKIG15ICRwcmV2X2ZyZXFf dHMgPSAwOwogd2hpbGUgKDw+KSB7CiAJbXkgQGZpZWxkczsKLQlteSBAdG1wOwogCW15ICR0cF9u YW1lOwotCW15ICR0aW1lOwogCW15ICV0cDsKLQlteSAka2V5OworCW15ICgkdGltZSwgJGN0eCwg JHJpbmcsICRzZXFubywgJG9yaWdfY3R4LCAka2V5KTsKIAogCWNob21wOwogCUBmaWVsZHMgPSBz cGxpdCAnICc7CiAKKwljaG9wICRmaWVsZHNbM107CisJJHRpbWUgPSBpbnQoJGZpZWxkc1szXSAq IDEwMDAwMDAuMCk7CisKIAkkdHBfbmFtZSA9ICRmaWVsZHNbNF07Ci0JQHRtcCA9IHNwbGl0ICc6 JywgJHRwX25hbWUsIDI7Ci0JbmV4dCB1bmxlc3MgJHRtcFswXSBlcSAnaTkxNSc7Ci0JJHRwX25h bWUgPSAkdG1wWzFdOwotCWNob3AgJHRwX25hbWU7CiAKLQljaG9wICRmaWVsZHNbM107Ci0JJHRp bWUgPSAkZmllbGRzWzNdICogMTAwMDAwMC4wOwogCXNwbGljZSBAZmllbGRzLCAwLCA1OwogCiAJ Zm9yZWFjaCBteSAkZiAoQGZpZWxkcykgewotCQlteSBAa3YgPSBzcGxpdCAnPXwsJywgJGY7Ci0K LQkJJGt2WzBdID0gJ2dsb2JhbCcgaWYgJGt2WzBdIGVxICdnbG9iYWxfc2Vxbm8nOworCQlteSAo JGssICR2KTsKIAotCQkkdHB7JGt2WzBdfSA9ICRrdlsxXTsKKwkJKCRrLCAkdikgPSAoJGYgPX4g L14oXFMrKT0oXGQrKS8pOworCQluZXh0IHVubGVzcyBkZWZpbmVkICRrOworCQkkayA9ICdnbG9i YWwnIGlmICRrIGVxICdnbG9iYWxfc2Vxbm8nOworCQkkdHB7JGt9ID0gJHY7CiAJfQogCiAJbmV4 dCBpZiBleGlzdHMgJHRweydyaW5nJ30gYW5kIGV4aXN0cyAkaWdub3JlX3Jpbmd7JHRweydyaW5n J319OwogCi0JaWYgKCR0cF9uYW1lIGVxICdpOTE1X2dlbV9yZXF1ZXN0X3dhaXRfYmVnaW4nKSB7 Ci0JCW15ICVydzsKKwlpZiAoZXhpc3RzICR0cHsncmluZyd9IGFuZCBleGlzdHMgJHRweydjdHgn fSBhbmQgZXhpc3RzICR0cHsnc2Vxbm8nfSkgeworCQkkcmluZyA9ICR0cHsncmluZyd9OworCQkk Y3R4ID0gJHRweydjdHgnfTsKKwkJJHNlcW5vID0gJHRweydzZXFubyd9OworCisJCSRvcmlnX2N0 eCA9ICRjdHg7CisJCSRjdHggPSBzYW5pdGl6ZV9jdHgoJGN0eCwgJHJpbmcpOworCQkka2V5ID0g ZGJfa2V5KCRyaW5nLCAkY3R4LCAkc2Vxbm8pOworCX0KIAotCQkkdHB7J2N0eCd9ID0gc2FuaXRp emVfY3R4KCR0cHsnY3R4J30sICR0cHsncmluZyd9KTsKLQkJJGtleSA9IGRiX2tleSgkdHB7J3Jp bmcnfSwgJHRweydjdHgnfSwgJHRweydzZXFubyd9KTsKKwlpZiAoJHRwX25hbWUgZXEgJ2k5MTU6 aTkxNV9nZW1fcmVxdWVzdF93YWl0X2JlZ2luOicpIHsKKwkJbXkgJXJ3OwogCiAJCW5leHQgaWYg ZXhpc3RzICRyZXF3YWl0eyRrZXl9OwogCiAJCSRyd3sna2V5J30gPSAka2V5OwotCQkkcnd7J3Jp bmcnfSA9ICR0cHsncmluZyd9OwotCQkkcnd7J3NlcW5vJ30gPSAkdHB7J3NlcW5vJ307Ci0JCSRy d3snY3R4J30gPSAkdHB7J2N0eCd9OworCQkkcnd7J3JpbmcnfSA9ICRyaW5nOworCQkkcnd7J3Nl cW5vJ30gPSAkc2Vxbm87CisJCSRyd3snY3R4J30gPSAkY3R4OwogCQkkcnd7J3N0YXJ0J30gPSAk dGltZTsKIAkJJHJlcXdhaXR7JGtleX0gPSBcJXJ3OwotCQluZXh0OwotCX0gZWxzaWYgKCR0cF9u YW1lIGVxICdpOTE1X2dlbV9yZXF1ZXN0X3dhaXRfZW5kJykgewotCQkkdHB7J2N0eCd9ID0gc2Fu aXRpemVfY3R4KCR0cHsnY3R4J30sICR0cHsncmluZyd9KTsKLQkJJGtleSA9IGRiX2tleSgkdHB7 J3JpbmcnfSwgJHRweydjdHgnfSwgJHRweydzZXFubyd9KTsKLQorCX0gZWxzaWYgKCR0cF9uYW1l IGVxICdpOTE1Omk5MTVfZ2VtX3JlcXVlc3Rfd2FpdF9lbmQ6JykgewogCQluZXh0IHVubGVzcyBl eGlzdHMgJHJlcXdhaXR7JGtleX07CiAKIAkJJHJlcXdhaXR7JGtleX0tPnsnZW5kJ30gPSAkdGlt ZTsKLQkJbmV4dDsKLQl9IGVsc2lmICgkdHBfbmFtZSBlcSAnaTkxNV9nZW1fcmVxdWVzdF9hZGQn KSB7Ci0JCW15ICRvcmlnX2N0eCA9ICR0cHsnY3R4J307Ci0KLQkJJHRweydjdHgnfSA9IHNhbml0 aXplX2N0eCgkdHB7J2N0eCd9LCAkdHB7J3JpbmcnfSk7Ci0JCSRrZXkgPSBkYl9rZXkoJHRweydy aW5nJ30sICR0cHsnY3R4J30sICR0cHsnc2Vxbm8nfSk7Ci0KKwl9IGVsc2lmICgkdHBfbmFtZSBl cSAnaTkxNTppOTE1X2dlbV9yZXF1ZXN0X2FkZDonKSB7CiAJCWlmIChleGlzdHMgJHF1ZXVleyRr ZXl9KSB7CiAJCQkkY3R4ZGJ7JG9yaWdfY3R4fSsrOwotCQkJJHRweydjdHgnfSA9IHNhbml0aXpl X2N0eCgkdHB7J2N0eCd9LCAkdHB7J3JpbmcnfSk7Ci0JCQkka2V5ID0gZGJfa2V5KCR0cHsncmlu Zyd9LCAkdHB7J2N0eCd9LCAkdHB7J3NlcW5vJ30pOworCQkJJGN0eCA9IHNhbml0aXplX2N0eCgk Y3R4LCAkcmluZyk7CisJCQkka2V5ID0gZGJfa2V5KCRyaW5nLCAkY3R4LCAkc2Vxbm8pOwogCQl9 CiAKIAkJJHF1ZXVleyRrZXl9ID0gJHRpbWU7Ci0JCW5leHQ7Ci0JfSBlbHNpZiAoJHRwX25hbWUg ZXEgJ2k5MTVfZ2VtX3JlcXVlc3Rfc3VibWl0JykgewotCQkkdHB7J2N0eCd9ID0gc2FuaXRpemVf Y3R4KCR0cHsnY3R4J30sICR0cHsncmluZyd9KTsKLQkJJGtleSA9IGRiX2tleSgkdHB7J3Jpbmcn fSwgJHRweydjdHgnfSwgJHRweydzZXFubyd9KTsKLQorCX0gZWxzaWYgKCR0cF9uYW1lIGVxICdp OTE1Omk5MTVfZ2VtX3JlcXVlc3Rfc3VibWl0OicpIHsKIAkJZGllIGlmIGV4aXN0cyAkc3VibWl0 eyRrZXl9OwogCQlkaWUgdW5sZXNzIGV4aXN0cyAkcXVldWV7JGtleX07CiAKIAkJJHN1Ym1pdHsk a2V5fSA9ICR0aW1lOwotCQluZXh0OwotCX0gZWxzaWYgKCR0cF9uYW1lIGVxICdpOTE1X2dlbV9y ZXF1ZXN0X2luJykgeworCX0gZWxzaWYgKCR0cF9uYW1lIGVxICdpOTE1Omk5MTVfZ2VtX3JlcXVl c3RfaW46JykgewogCQlteSAlcmVxOwogCi0JCSR0cHsnY3R4J30gPSBzYW5pdGl6ZV9jdHgoJHRw eydjdHgnfSwgJHRweydyaW5nJ30pOwotCQkka2V5ID0gZGJfa2V5KCR0cHsncmluZyd9LCAkdHB7 J2N0eCd9LCAkdHB7J3NlcW5vJ30pOwotCiAJCWRpZSBpZiBleGlzdHMgJGRieyRrZXl9OwogCQlk aWUgdW5sZXNzIGV4aXN0cyAkcXVldWV7JGtleX07CiAJCWRpZSB1bmxlc3MgZXhpc3RzICRzdWJt aXR7JGtleX07CiAKIAkJJHJlcXsnc3RhcnQnfSA9ICR0aW1lOwotCQkkcmVxeydyaW5nJ30gPSAk dHB7J3JpbmcnfTsKLQkJJHJlcXsnc2Vxbm8nfSA9ICR0cHsnc2Vxbm8nfTsKLQkJJHJlcXsnY3R4 J30gPSAkdHB7J2N0eCd9OwotCQkkcmVxeyduYW1lJ30gPSAkdHB7J2N0eCd9IC4gJy8nIC4gJHRw eydzZXFubyd9OworCQkkcmVxeydyaW5nJ30gPSAkcmluZzsKKwkJJHJlcXsnc2Vxbm8nfSA9ICRz ZXFubzsKKwkJJHJlcXsnY3R4J30gPSAkY3R4OworCQkkcmVxeyduYW1lJ30gPSAkY3R4IC4gJy8n IC4gJHNlcW5vOwogCQkkcmVxeydnbG9iYWwnfSA9ICR0cHsnZ2xvYmFsJ307CiAJCSRyZXF7J3Bv cnQnfSA9ICR0cHsncG9ydCd9OwogCQkkcmVxeydxdWV1ZSd9ID0gJHF1ZXVleyRrZXl9OwogCQkk cmVxeydzdWJtaXQtZGVsYXknfSA9ICRzdWJtaXR7JGtleX0gLSAkcXVldWV7JGtleX07CiAJCSRy ZXF7J2V4ZWN1dGUtZGVsYXknfSA9ICRyZXF7J3N0YXJ0J30gLSAkc3VibWl0eyRrZXl9OwotCQkk cmluZ3N7JHRweydyaW5nJ319ID0gJGdpZCsrIHVubGVzcyBleGlzdHMgJHJpbmdzeyR0cHsncmlu Zyd9fTsKLQkJJHJpbmdtYXB7JHJpbmdzeyR0cHsncmluZyd9fX0gPSAkdHB7J3JpbmcnfTsKKwkJ JHJpbmdzeyRyaW5nfSA9ICRnaWQrKyB1bmxlc3MgZXhpc3RzICRyaW5nc3skcmluZ307CisJCSRy aW5nbWFweyRyaW5nc3skcmluZ319ID0gJHJpbmc7CiAJCSRkYnska2V5fSA9IFwlcmVxOwotCQlu ZXh0OwotCX0gZWxzaWYgKCR0cF9uYW1lIGVxICdpOTE1X2dlbV9yZXF1ZXN0X291dCcpIHsKLQkJ bXkgJGdrZXkgPSBnbG9iYWxfa2V5KCR0cHsncmluZyd9LCAkdHB7J2dsb2JhbCd9KTsKLQotCQkk dHB7J2N0eCd9ID0gc2FuaXRpemVfY3R4KCR0cHsnY3R4J30sICR0cHsncmluZyd9KTsKLQkJJGtl eSA9IGRiX2tleSgkdHB7J3JpbmcnfSwgJHRweydjdHgnfSwgJHRweydzZXFubyd9KTsKKwl9IGVs c2lmICgkdHBfbmFtZSBlcSAnaTkxNTppOTE1X2dlbV9yZXF1ZXN0X291dDonKSB7CisJCW15ICRn a2V5ID0gZ2xvYmFsX2tleSgkcmluZywgJHRweydnbG9iYWwnfSk7CiAKIAkJZGllIHVubGVzcyBl eGlzdHMgJGRieyRrZXl9OwogCQlkaWUgdW5sZXNzIGV4aXN0cyAkZGJ7JGtleX0tPnsnc3RhcnQn fTsKQEAgLTQ3NiwxNSArNDU3LDEyIEBAIHdoaWxlICg8PikgewogCQl9CiAJCSRkYnska2V5fS0+ eydkdXJhdGlvbid9ID0gJGRieyRrZXl9LT57J25vdGlmeSd9IC0gJGRieyRrZXl9LT57J3N0YXJ0 J307CiAJCSRkYnska2V5fS0+eydjb250ZXh0LWNvbXBsZXRlLWRlbGF5J30gPSAkZGJ7JGtleX0t PnsnZW5kJ30gLSAkZGJ7JGtleX0tPnsnbm90aWZ5J307Ci0JCW5leHQ7Ci0JfSBlbHNpZiAoJHRw X25hbWUgZXEgJ2ludGVsX2VuZ2luZV9ub3RpZnknKSB7Ci0JCSRub3RpZnl7Z2xvYmFsX2tleSgk dHB7J3JpbmcnfSwgJHRweydzZXFubyd9KX0gPSAkdGltZTsKLQkJbmV4dDsKLQl9IGVsc2lmICgk dHBfbmFtZSBlcSAnaW50ZWxfZ3B1X2ZyZXFfY2hhbmdlJykgeworCX0gZWxzaWYgKCR0cF9uYW1l IGVxICdpbnRlbF9lbmdpbmVfbm90aWZ5OicpIHsKKwkJJG5vdGlmeXtnbG9iYWxfa2V5KCRyaW5n LCAkc2Vxbm8pfSA9ICR0aW1lOworCX0gZWxzaWYgKCR0cF9uYW1lIGVxICdpOTE1OmludGVsX2dw dV9mcmVxX2NoYW5nZTonKSB7CiAJCXB1c2ggQGZyZXFzLCBbJHByZXZfZnJlcV90cywgJHRpbWUs ICRwcmV2X2ZyZXFdIGlmICRwcmV2X2ZyZXE7CiAJCSRwcmV2X2ZyZXFfdHMgPSAkdGltZTsKIAkJ JHByZXZfZnJlcSA9ICR0cHsnbmV3X2ZyZXEnfTsKLQkJbmV4dDsKIAl9CiB9CiAKQEAgLTU1Nyw3 ICs1MzUsMTAgQEAgbXkgKCVzdWJtaXRfYXZnLCAlZXhlY3V0ZV9hdmcsICVjdHhzYXZlX2F2Zyk7 CiBteSAkbGFzdF90cyA9IDA7CiBteSAkZmlyc3RfdHM7CiAKLWZvcmVhY2ggbXkgJGtleSAoc29y dCB7JGRieyRhfS0+eydzdGFydCd9IDw9PiAkZGJ7JGJ9LT57J3N0YXJ0J319IGtleXMgJWRiKSB7 CitteSBAc29ydGVkX2tleXMgPSBzb3J0IHskZGJ7JGF9LT57J3N0YXJ0J30gPD0+ICRkYnskYn0t Pnsnc3RhcnQnfX0ga2V5cyAlZGI7CitteSAkcmVfc29ydCA9IDA7CisKK2ZvcmVhY2ggbXkgJGtl eSAoQHNvcnRlZF9rZXlzKSB7CiAJbXkgJHJpbmcgPSAkZGJ7JGtleX0tPnsncmluZyd9OwogCW15 ICRlbmQgPSAkZGJ7JGtleX0tPnsnZW5kJ307CiAKQEAgLTU4NSw2ICs1NjYsNyBAQCBmb3JlYWNo IG15ICRrZXkgKHNvcnQgeyRkYnskYX0tPnsnc3RhcnQnfSA8PT4gJGRieyRifS0+eydzdGFydCd9 fSBrZXlzICVkYikgewogCiAJCSMgMjB1cyB0b2xlcmFuY2UKIAkJaWYgKGV4aXN0cyAkZGJ7JG5l eHRfa2V5fSBhbmQgJGRieyRuZXh0X2tleX0tPnsnc3RhcnQnfSA8ICRzdGFydCArIDIwKSB7CisJ CQkkcmVfc29ydCA9IDE7CiAJCQkkZGJ7JG5leHRfa2V5fS0+eydzdGFydCd9ID0gJHN0YXJ0ICsg JGRieyRrZXl9LT57J2R1cmF0aW9uJ307CiAJCQkkZGJ7JG5leHRfa2V5fS0+eydzdGFydCd9ID0g JGRieyRuZXh0X2tleX0tPnsnZW5kJ30gaWYgJGRieyRuZXh0X2tleX0tPnsnc3RhcnQnfSA+ICRk YnskbmV4dF9rZXl9LT57J2VuZCd9OwogCQkJJGRieyRuZXh0X2tleX0tPnsnZHVyYXRpb24nfSA9 ICRkYnskbmV4dF9rZXl9LT57J25vdGlmeSd9IC0gJGRieyRuZXh0X2tleX0tPnsnc3RhcnQnfTsK QEAgLTYwMSw2ICs1ODMsOCBAQCBmb3JlYWNoIG15ICRrZXkgKHNvcnQgeyRkYnskYX0tPnsnc3Rh cnQnfSA8PT4gJGRieyRifS0+eydzdGFydCd9fSBrZXlzICVkYikgewogCSRjdHhzYXZlX2F2Z3sk cmluZ30gKz0gJGRieyRrZXl9LT57J2VuZCd9IC0gJGRieyRrZXl9LT57J25vdGlmeSd9OwogfQog CitAc29ydGVkX2tleXMgPSBzb3J0IHskZGJ7JGF9LT57J3N0YXJ0J30gPD0+ICRkYnskYn0tPnsn c3RhcnQnfX0ga2V5cyAlZGIgaWYgJHJlX3NvcnQ7CisKIGZvcmVhY2ggbXkgJHJpbmcgKGtleXMg JWJhdGNoX2F2ZykgewogCSRiYXRjaF9hdmd7JHJpbmd9IC89ICRiYXRjaF9jb3VudHskcmluZ307 CiAJJGJhdGNoX3RvdGFsX2F2Z3skcmluZ30gLz0gJGJhdGNoX2NvdW50eyRyaW5nfTsKQEAgLTYx Niw3ICs2MDAsNyBAQCBmb3JlYWNoIG15ICRnaWQgKHNvcnQga2V5cyAlcmluZ3MpIHsKIAlteSAo QHNfLCBAZV8pOwogCiAJIyBFeHRyYWN0IGFsbCBHUFUgYnVzeSBpbnRlcnZhbHMgYW5kIHNvcnQg dGhlbS4KLQlmb3JlYWNoIG15ICRrZXkgKHNvcnQgeyRkYnskYX0tPnsnc3RhcnQnfSA8PT4gJGRi eyRifS0+eydzdGFydCd9fSBrZXlzICVkYikgeworCWZvcmVhY2ggbXkgJGtleSAoQHNvcnRlZF9r ZXlzKSB7CiAJCW5leHQgdW5sZXNzICRkYnska2V5fS0+eydyaW5nJ30gPT0gJHJpbmc7CiAJCXB1 c2ggQHNfLCAkZGJ7JGtleX0tPnsnc3RhcnQnfTsKIAkJcHVzaCBAZV8sICRkYnska2V5fS0+eydl bmQnfTsKQEAgLTY2MCw3ICs2NDQsNyBAQCBteSBAZ3B1X2ludGVydmFsczsKIG15IChAc18sIEBl Xyk7CiAKICMgRXh0cmFjdCBhbGwgR1BVIGJ1c3kgaW50ZXJ2YWxzIGFuZCBzb3J0IHRoZW0uCi1m b3JlYWNoIG15ICRrZXkgKHNvcnQgeyRkYnskYX0tPnsnc3RhcnQnfSA8PT4gJGRieyRifS0+eydz dGFydCd9fSBrZXlzICVkYikgeworZm9yZWFjaCBteSAka2V5IChAc29ydGVkX2tleXMpIHsKIAlw dXNoIEBzXywgJGRieyRrZXl9LT57J3N0YXJ0J307CiAJcHVzaCBAZV8sICRkYnska2V5fS0+eydl bmQnfTsKIAlkaWUgaWYgJGRieyRrZXl9LT57J3N0YXJ0J30gPiAkZGJ7JGtleX0tPnsnZW5kJ307 Ci0tIAoyLjE0LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdm eAo=