From e89724090d3981e2f600837405e31d84543d73aa Mon Sep 17 00:00:00 2001 From: Ari Archer Date: Sat, 1 Oct 2022 07:47:37 +0300 Subject: [PATCH] update @ Sat 1 Oct 07:47:37 EEST 2022 Signed-off-by: Ari Archer --- blog.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog.json b/blog.json index ec15a5e..0ae8b3b 100644 --- a/blog.json +++ b/blog.json @@ -461,7 +461,7 @@ }, "how-to-generate-a-report-for-songs-you-listen-to-using-mpv": { "title": "SG93IHRvIGdlbmVyYXRlIGEgcmVwb3J0IGZvciBzb25ncyB5b3UgbGlzdGVuIHRvIHVzaW5nIE1QVg==", - "content": "QSBkYXkgYWdvIEkgc3RhcnRlZCBjb2xsZWN0aW5nIGRhdGEgYWJvdXQgd2hhdCBJIGxpc3RlbiB0bwpvbiBteSBwbGF5bGlzdCwgYW5kIGN1cnJlbnRseSBpdCdzIHdvcmtpbmcgb3V0IGFtYXppbmcsIGl0J3MgdmVyeQpmdW4sIHNvIEkgdGhvdWdodCB0byBteXNlbGYsICd3aHkgbm90IHNoYXJlIGl0Jywgc28gaGVyZQp5b3UgZ28KCiMjIDEuIFNldCB1cCBgbXB2cGAgYWxpYXMKCmBtcHZwYCBhbGlhcyBpcyB3aGF0IHlvdSB3aWxsIGhhdmUgdG8gdXNlIHRvIGNvbGxlY3QgZGF0YSBhYm91dAp5b3VyIHBsYXlsaXN0LCB5b3UgY2FuIHNldCB1cCBhbm90aGVyIG5hbWUgYnV0IGNvZGUgc2hvdWxkIGJlCmFyb3VuZCB0aGUgc2FtZQoKQmFzaWNhbGx5LCBhZGQgdGhpcyB0byB5b3VyIGB+Ly5iYXNocmNgOgoKICAgIG1wdnBfY29sbGVjdCgpIHsKICAgICAgICBbICEgLWYgIiRIT01FLy5tcHZwIiBdICYmIDogPiIkSE9NRS8ubXB2cCIKCiAgICAgICAgc2xlZXAgMgoKICAgICAgICB3aGlsZSB0cnVlOyBkbwogICAgICAgICAgICBzbGVlcCA1CgogICAgICAgICAgICB4PSIkKGVjaG8gJ3sgImNvbW1hbmQiOiBbImdldF9wcm9wZXJ0eSIsICJwYXRoIl0gfScgfCBzb2NhdCAtIC90bXAvbXB2aXBjKSIKCiAgICAgICAgICAgIFsgISAiJHgiIF0gJiYgYnJlYWsKCiAgICAgICAgICAgIGlmIFsgIiR4IiBdICYmIFsgIiR4IiAhPSAiJCh0YWlsIC1uIDEgIiRIT01FLy5tcHZwIikiIF07IHRoZW4KICAgICAgICAgICAgICAgIHNsZWVwIDQKCiAgICAgICAgICAgICAgICB5PSIkKGVjaG8gJ3sgImNvbW1hbmQiOiBbImdldF9wcm9wZXJ0eSIsICJwYXRoIl0gfScgfCBzb2NhdCAtIC90bXAvbXB2aXBjKSIKICAgICAgICAgICAgICAgIFsgIiR4IiA9ICIkeSIgXSAmJiBlY2hvICIkeCIgPj4iJEhPTUUvLm1wdnAiCiAgICAgICAgICAgIGZpCiAgICAgICAgZG9uZQogICAgfQoKICAgIGFsaWFzIG1wdnA9J21wdnBfY29sbGVjdCAmIG1wdiAtLXNodWZmbGUgLS1sb29wLXBsYXlsaXN0IC0taW5wdXQtaXBjLXNlcnZlcj0vdG1wL21wdmlwYycKCldoZW4geW91IHVzZSB0aGUgYG1wdnBgIGFsaWFzIGl0J2xsIHN0YXJ0IHRoZSBkYXRhIGNvbGxlY3RvciBpbiB0aGUgYmFja2dyb3VuZCwKdGhlIElQQyB3aWxsIGJlIGFjY2Vzc2libGUgdGhvdWdoIGAvdG1wL21wdmlwY2AsIHRoaXMgd2lsbCBjb2xsZWN0IGFsbApkYXRhIHRvIGB+Ly5tcHZwYCwgbGlzdGVuIHRvIHNvbWUgbXVzaWMgYW5kIGlnbm9yZSBpdCBmb3IgYSBiaXQsIGFsc28sIGtlZXAgaW4gbWluZCwKdGhpcyBjb2RlIGlzIGJhZCBiZWNhdXNlIEknbSB0b28gbGF6eSB0byBpbXByb3ZlIGl0IGFuZCBJIG1hZGUgaXQgZmFzdCwgYW55d2F5LCB5b3UKbmVlZCB0byBpbnN0YWxsIGBzb2NhdGAgZm9yIHRoaXMgdG8gd29yawoKIyMgMi4gR2VuZXJhdGUgZGF0YSByZXBvcnQKCldlbGwgYXQgdGhpcyBwb2ludCB5b3UgY2FuIGRvIGFueXRoaW5nIHlvdSB3YW50IHdpdGggeW91ciBkYXRhLCBhbHRob3VnaApJIG1hZGUgYSBzaW1wbGUgZ2VuZXJhdG9yIGZvciBpdAoKU28gSSBtYWRlIHVzZSBvZiB0aGUgZGF0YSBJIGhhdmUgYW5kIG15IHBsYXlsaXN0IHN0cnVjdHVyZSwgaGVyZSdzIGFuIGV4YW1wbGUgZW50cnk6CgogICAgeyJkYXRhIjoicGxheWxpc3QvZ2lybCBpbiByZWQgLSBpJ2xsIGRpZSBhbnl3YXkuIFs4TU1hMzVCM0hUOF0ubXAzIiwicmVxdWVzdF9pZCI6MCwiZXJyb3IiOiJzdWNjZXNzIn0KClRoZXJlJ3MgYW4gSUQgdGhlcmUgc28gSSBhZGQgWW91VHViZSBhZGRpbmcgdG8gdGhlIGdlbmVyYXRvciBieQpkZWZhdWx0LCB5b3VycyBtaWdodCBub3QgaGF2ZSBpdCwgYnV0IEkgbWVhbiwgeW91IGNhbiBzdGlsbCBwcmV0dHkgbXVjaAp1c2UgaXQsIGp1c3QgbGlua3Mgd29uJ3Qgd29yawoKIyMjIDIuMSBUaGUgc2NyaXB0CgpJIG1hZGUgYSBweXRob24gc2NyaXB0IGFzIG15IGdlbmVyYXRvcjoKCiAgICAjIS91c3IvYmluL2VudiBweXRob24zCiAgICAjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQogICAgIiIiTVBWIHBsYXlsaXN0IHNvbmcgcmVwb3J0ZXIiIiIKCiAgICBpbXBvcnQgb3MKICAgIGltcG9ydCBzeXMKICAgIGZyb20gaHRtbCBpbXBvcnQgZXNjYXBlIGFzIGh0bWxfZXNjYXBlCiAgICBmcm9tIHR5cGluZyBpbXBvcnQgQW55LCBEaWN0LCBMaXN0LCBUdXBsZQogICAgZnJvbSB3YXJuaW5ncyBpbXBvcnQgZmlsdGVyd2FybmluZ3MgYXMgZmlsdGVyX3dhcm5pbmdzCgogICAgaW1wb3J0IHVqc29uICAjIHR5cGU6IGlnbm9yZQogICAgZnJvbSBjc3NfaHRtbF9qc19taW5pZnkgaW1wb3J0IGh0bWxfbWluaWZ5ICAjIHR5cGU6IGlnbm9yZQoKICAgIFNPTkdfVE9fQVJUSVNUOiBEaWN0W3N0ciwgc3RyXSA9IHsKICAgICAgICAiMTk4NSI6ICJibyBidXJuaGFtIiwKICAgICAgICAiYXBvY2FseXBzZSI6ICJjaWdhcmV0dGVzIGFmdGVyIFNleCIsCiAgICAgICAgImFzdHJvbm9teSI6ICJjb25hbiBncmF5IiwKICAgICAgICAiYnJvb2tseW4gYmFieSI6ICJsYW5hIGRlbCByZXkiLAogICAgICAgICJjb21lIGhvbWUgdG8gbWUiOiAiY3Jhd2xlcnMiLAogICAgICAgICJkYWRkeSBpc3N1ZXMiOiAidGhlIG5laWdoYm91cmhvb2QiLAogICAgICAgICJmZWVsIGJldHRlciI6ICJwZW5lbG9wZSBzY290dCIsCiAgICAgICAgImhvcm55bG92ZXNpY2ttZXNzIjogImdpcmwgaW4gcmVkIiwKICAgICAgICAiaSB3YW5uYSBiZSB5b3VyIGdpcmxmcmllbmQiOiAiZ2lybCBpbiByZWQiLAogICAgICAgICJrLiI6ICJjaWdhcmV0dGVzIGFmdGVyIFNleCIsCiAgICAgICAgImxvb2thbGlrZSI6ICJjb25hbiBncmF5IiwKICAgICAgICAibG90dGEgdHJ1ZSBjcmltZSI6ICJwZW5lbG9wZSBzY290dCIsCiAgICAgICAgIm15IG1hbidzIGEgaGV4YWdvbiAobXVzaWMgdmlkZW8pIjogIm3DvG5lY2F0IiwKICAgICAgICAicsOkdCI6ICJwZW5lbG9wZSBzY290dCIsCiAgICAgICAgInNhcHBobyI6ICJidXNoaWVzIiwKICAgICAgICAic2VyaWFsIGtpbGxlciAtIGxhbmEgZGVsIHJleSBseXJpY3MiOiAibGFuYSBkZWwgcmV5IiwKICAgICAgICAic3VnYXIsIHdlJ3JlIGdvaW4gZG93biBidXQgaXQncyBjcmVlcGllciI6ICJrYWRlIiwKICAgICAgICAic3dlYXRlciB3ZWF0aGVyIjogInRoZSBuZWlnaGJvdXJob29kIiwKICAgICAgICAidGFsaWEg4qe44qe4IGdpcmwgaW4gcmVkIGNvdmVyIjogImdpcmwgaW4gcmVkIiwKICAgICAgICAidHYiOiAiYnVzaGllcyIsCiAgICAgICAgInVuaW9uaXplIC0gbcO8bmVjYXQgKG11c2ljIHZpZGVvKSI6ICJtw7xuZWNhdCIsCiAgICAgICAgIndhdGNoIHlvdSBzbGVlcC4iOiAiZ2lybCBpbiByZWQiLAogICAgICAgICJ5b3UgdXNlZCBtZSBmb3IgbXkgbG92ZV9naXJsIGluIHJlZCI6ICJnaXJsIGluIHJlZCIsCiAgICB9CgoKICAgIGNsYXNzIFVua25vd25NdXNpY0FydGlzdEVycm9yKEV4Y2VwdGlvbik6CiAgICAgICAgIiIiUmFpc2VkIHdoZW4gdGhlcmUgaXMgYW4gdW5rbm93biBtdXNpYyBhcnRpc3QiIiIKCgogICAgZGVmIHNvcnRfZGljdChkOiBEaWN0W3N0ciwgaW50XSkgLT4gRGljdFtzdHIsIGludF06CiAgICAgICAgcmV0dXJuIHtrOiB2IGZvciBrLCB2IGluIHNvcnRlZChkLml0ZW1zKCksIGtleT1sYW1iZGEgaXRlbTogaXRlbVsxXSwgcmV2ZXJzZT1UcnVlKX0KCgogICAgZGVmIGZzcGxpdF9kZWxzKHM6IHN0ciwgKmRlbHM6IHN0cikgLT4gc3RyOgogICAgICAgIGZvciBkZWxpbSBpbiBkZWxzOgogICAgICAgICAgICBzID0gcy5zcGxpdChkZWxpbSwgbWF4c3BsaXQ9MSlbMF0KCiAgICAgICAgcmV0dXJuIHMuc3RyaXAoKQoKCiAgICBkZWYgZ2V0X2FydGlzdF9mcm9tX3Nvbmcoc29uZzogc3RyKSAtPiBzdHI6CiAgICAgICAgc29uZyA9IHNvbmcubG93ZXIoKQogICAgICAgIGRlbGltczogVHVwbGVbc3RyLCAuLi5dID0gKAogICAgICAgICAgICAi4oCTIiwKICAgICAgICAgICAgIi0iLAogICAgICAgICAgICAiLCIsCiAgICAgICAgICAgICJmZWF0LiIsCiAgICAgICAgICAgICIuIiwKICAgICAgICAgICAgIiYiLAogICAgICAgICkKCiAgICAgICAgaWYgc29uZyBub3QgaW4gU09OR19UT19BUlRJU1QgYW5kIGFueShkIGluIHNvbmcgZm9yIGQgaW4gZGVsaW1zKToKICAgICAgICAgICAgcmV0dXJuIGZzcGxpdF9kZWxzKAogICAgICAgICAgICAgICAgc29uZywKICAgICAgICAgICAgICAgICpkZWxpbXMsCiAgICAgICAgICAgICkKICAgICAgICBlbHNlOgogICAgICAgICAgICBpZiBzb25nIGluIFNPTkdfVE9fQVJUSVNUOgogICAgICAgICAgICAgICAgcmV0dXJuIFNPTkdfVE9fQVJUSVNUW3NvbmddLmxvd2VyKCkKCiAgICAgICAgICAgIHJhaXNlIFVua25vd25NdXNpY0FydGlzdEVycm9yKGYiTm8gaGFuZGxlZCBhcnRpc3QgZm9yIHNvbmc6IHtzb25nIXJ9IikKCgogICAgZGVmIGdldF9wbGF5ZWQoZGF0YTogTGlzdFtUdXBsZVtzdHIsIHN0cl1dKSAtPiBEaWN0W3N0ciwgaW50XToKICAgICAgICBwbGF5ZWQ6IERpY3Rbc3RyLCBpbnRdID0ge30KCiAgICAgICAgZm9yIHNvbmcsIF8gaW4gZGF0YToKICAgICAgICAgICAgaWYgc29uZyBub3QgaW4gcGxheWVkOgogICAgICAgICAgICAgICAgcGxheWVkW3NvbmddID0gMAoKICAgICAgICAgICAgcGxheWVkW3NvbmddICs9IDEKCiAgICAgICAgcmV0dXJuIHNvcnRfZGljdChwbGF5ZWQpCgoKICAgIGRlZiBnZXRfeXRfdXJsc19mcm9tX2RhdGEoZGF0YTogTGlzdFtUdXBsZVtzdHIsIHN0cl1dKSAtPiBEaWN0W3N0ciwgc3RyXToKICAgICAgICByZXR1cm4ge3Nvbmc6IGYiaHR0cHM6Ly9hcmktd2ViLnh5ei95dC93YXRjaD92PXt5dF9pZH0iIGZvciBzb25nLCB5dF9pZCBpbiBkYXRhfQoKCiAgICBkZWYgZ2V0X2FydGlzdHNfZnJvbV9wbGF5ZWQocGxheWVkOiBEaWN0W3N0ciwgaW50XSkgLT4gRGljdFtzdHIsIExpc3RbaW50XV06CiAgICAgICAgYXJ0aXN0czogRGljdFtzdHIsIExpc3RbaW50XV0gPSB7fQoKICAgICAgICBmb3Igc29uZyBpbiBwbGF5ZWQ6CiAgICAgICAgICAgIGFydGlzdCA9IGdldF9hcnRpc3RfZnJvbV9zb25nKHNvbmcpCgogICAgICAgICAgICBpZiBhcnRpc3Qgbm90IGluIGFydGlzdHM6CiAgICAgICAgICAgICAgICBhcnRpc3RzW2FydGlzdF0gPSBbMCwgMF0KCiAgICAgICAgICAgIGFydGlzdHNbYXJ0aXN0XVswXSArPSAxCiAgICAgICAgICAgIGFydGlzdHNbYXJ0aXN0XVsxXSArPSBwbGF5ZWRbc29uZ10KCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgazogdgogICAgICAgICAgICBmb3IgaywgdiBpbiBzb3J0ZWQoYXJ0aXN0cy5pdGVtcygpLCBrZXk9bGFtYmRhIGl0ZW06IHN1bShpdGVtWzFdKSwgcmV2ZXJzZT1UcnVlKQogICAgICAgIH0KCgogICAgZGVmIHBhcnNlX3Nvbmcoc29uZzogc3RyKSAtPiBUdXBsZVtzdHIsIHN0cl06CiAgICAgICAgYmFzZW5hbWU6IHN0ciA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShzb25nKSlbMF0KICAgICAgICByZXR1cm4gYmFzZW5hbWVbOi0xNF0sIGJhc2VuYW1lWy0xMjotMV0KCgogICAgZGVmIHBhcnNlX2RhdGEoZGF0YTogTGlzdFtUdXBsZVtzdHIsIHN0cl1dKSAtPiBEaWN0W3N0ciwgQW55XToKICAgICAgICBwbGF5ZWQ6IERpY3Rbc3RyLCBpbnRdID0gZ2V0X3BsYXllZChkYXRhKQoKICAgICAgICByZXR1cm4gewogICAgICAgICAgICAidG90YWwiOiBsZW4oZGF0YSksCiAgICAgICAgICAgICJwbGF5ZWQiOiBwbGF5ZWQsCiAgICAgICAgICAgICJhcnRpc3RzIjogZ2V0X2FydGlzdHNfZnJvbV9wbGF5ZWQocGxheWVkKSwKICAgICAgICAgICAgInl0LXVybHMiOiBnZXRfeXRfdXJsc19mcm9tX2RhdGEoZGF0YSksCiAgICAgICAgfQoKCiAgICBkZWYgZ2VuZXJhdGVfaHRtbF9yZXBvcnQoZGF0YTogRGljdFtzdHIsIEFueV0pIC0+IHN0cjoKICAgICAgICBzdHlsZXM6IHN0ciA9ICIiIgogICAgQGltcG9ydCB1cmwoImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vaGFjay1mb250QDMvYnVpbGQvd2ViL2hhY2subWluLmNzcyIpOwoKICAgIDpyb290IHsKICAgICAgICBjb2xvci1zY2hlbWU6IGRhcms7CgogICAgICAgIC0tY2xyLWJnOiAjMjYyMjIwOwogICAgICAgIC0tY2xyLWZnOiAjZjlmNmU4OwoKICAgICAgICAtLWNsci1jb2RlLWJnOiAjMWYxYjFhOwogICAgICAgIC0tY2xyLWNvZGUtZmc6ICNmMGYzZTY7CiAgICAgICAgLS1jbHItY29kZS1iZy1kYXJrOiAjMTgxNDE0OwoKICAgICAgICAtLXNjcm9sbGJhci1oZWlnaHQ6IDZweDsgLyogVE9ETzogRmlyZWZveCAqLwogICAgfQoKICAgICosCiAgICAqOjpiZWZvcmUsCiAgICAqOjphZnRlciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY2xyLWJnKTsKICAgICAgICBjb2xvcjogdmFyKC0tY2xyLWZnKTsKICAgICAgICBmb250LWZhbWlseTogSGFjaywgaGFjaywgbW9ub3NwYWNlOwoKICAgICAgICBzY3JvbGxiYXItd2lkdGg6IG5vbmU7CiAgICAgICAgLW1zLW92ZXJmbG93LXN0eWxlOiBub25lOwoKICAgICAgICBzY3JvbGxiYXItY29sb3I6IHZhcigtLWNsci1jb2RlLWJnLWRhcmspIHRyYW5zcGFyZW50OwoKICAgICAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKCiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwoKICAgICAgICBzY3JvbGwtYmVoYXZpb3I6IHNtb290aDsKICAgIH0KCiAgICA6Oi13ZWJraXQtc2Nyb2xsYmFyLAogICAgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1zY3JvbGxiYXItaGVpZ2h0KTsKICAgIH0KCiAgICA6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgIH0KCiAgICA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jbHItY29kZS1iZy1kYXJrKTsKICAgIH0KCiAgICBodG1sOjotd2Via2l0LXNjcm9sbGJhciwKICAgIGJvZHk6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICB9CgogICAgYm9keSB7CiAgICAgICAgbWFyZ2luOiBhdXRvOwogICAgICAgIHBhZGRpbmc6IDJyZW07CiAgICAgICAgbWF4LXdpZHRoOiAxMTAwcHg7CiAgICAgICAgbWluLWhlaWdodDogMTAwdmg7CiAgICAgICAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplU3BlZWQ7CiAgICB9CgogICAgaDEgewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBtYXJnaW46IDFlbTsKICAgICAgICBmb250LXNpemU6IDJlbTsKICAgIH0KCiAgICBsaSB7CiAgICAgICAgbWFyZ2luOiAwLjVlbTsKICAgIH0KCiAgICBhIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgICAgdGV4dC1zaGFkb3c6IDBweCAwcHggNHB4IHdoaXRlOwogICAgfQoKICAgIHByZSwKICAgIHByZSAqIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jbHItY29kZS1iZyk7CiAgICB9CgogICAgcHJlLAogICAgcHJlICosCiAgICBjb2RlIHsKICAgICAgICBjb2xvcjogdmFyKC0tY2xyLWNvZGUtZmcpOwogICAgfQoKICAgIHByZSwKICAgIHByZSBjb2RlIHsKICAgICAgICBvdmVyZmxvdy14OiBhdXRvICFpbXBvcnRhbnQ7CgogICAgICAgIHNjcm9sbGJhci13aWR0aDogaW5pdGlhbDsKICAgICAgICAtbXMtb3ZlcmZsb3ctc3R5bGU6IGluaXRpYWw7CiAgICB9CgogICAgcHJlIHsKICAgICAgICBwYWRkaW5nOiAxZW07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgfQoKICAgIGNvZGU6bm90KHByZSBjb2RlKSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY2xyLWNvZGUtYmcpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICBwYWRkaW5nOiAwLjJlbTsKICAgIH0KCiAgICBAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkgewogICAgICAgICosCiAgICAgICAgKjo6YmVmb3JlLAogICAgICAgICo6OmFmdGVyIHsKICAgICAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IDAuMDFtcyAhaW1wb3J0YW50OwogICAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IDAuMDFtcyAhaW1wb3J0YW50OwoKICAgICAgICAgICAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDEgIWltcG9ydGFudDsKCiAgICAgICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4wMW1zICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIC1vLXRyYW5zaXRpb24tZHVyYXRpb246IDAuMDFtcyAhaW1wb3J0YW50OwogICAgICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjAxbXMgIWltcG9ydGFudDsKCiAgICAgICAgICAgIHNjcm9sbC1iZWhhdmlvcjogYXV0byAhaW1wb3J0YW50OwogICAgICAgIH0KICAgIH0KCiAgICBAbWVkaWEgKHByZWZlcnMtY29udHJhc3Q6IG1vcmUpIHsKICAgICAgICA6cm9vdCB7CiAgICAgICAgICAgIC0tY2xyLWJnOiBibGFjazsKICAgICAgICAgICAgLS1jbHItZmc6IHdoaXRlOwoKICAgICAgICAgICAgLS1jbHItY29kZS1iZzogIzE4MTgxODsKICAgICAgICAgICAgLS1jbHItY29kZS1mZzogd2hpdGVzbW9rZTsKCiAgICAgICAgICAgIC0tc2Nyb2xsYmFyLWhlaWdodDogMTJweDsgLyogVE9ETzogRmlyZWZveCAqLwogICAgICAgIH0KCiAgICAgICAgaHRtbDo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgICAgICAgICBkaXNwbGF5OiBpbml0aWFsICFpbXBvcnRhbnQ7CiAgICAgICAgfQoKICAgICAgICAqLAogICAgICAgICo6OmJlZm9yZSwKICAgICAgICAqOjphZnRlciB7CiAgICAgICAgICAgIHNjcm9sbGJhci13aWR0aDogaW5pdGlhbCAhaW1wb3J0YW50OwogICAgICAgICAgICAtbXMtb3ZlcmZsb3ctc3R5bGU6IGluaXRpYWwgIWltcG9ydGFudDsKICAgICAgICB9CgogICAgICAgIGEgewogICAgICAgICAgICB0ZXh0LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50OwoKICAgICAgICAgICAgLXdlYmtpdC10ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSBkb3R0ZWQgIWltcG9ydGFudDsKICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgZG90dGVkICFpbXBvcnRhbnQ7CiAgICAgICAgfQogICAgfQogICAgIiIiCgogICAgICAgIHNvbmdzID0gYXJ0aXN0cyA9ICIiCgogICAgICAgIGZvciBzb25nLCB0aW1lcyBpbiBkYXRhWyJwbGF5ZWQiXS5pdGVtcygpOgogICAgICAgICAgICBzb25ncyArPSBmIjxsaT48YSBocmVmPVwie2RhdGFbJ3l0LXVybHMnXVtzb25nXX1cIj57aHRtbF9lc2NhcGUoc29uZyl9PC9hPiAocGxheWVkIDxjb2RlPnt0aW1lc308L2NvZGU+IHRpbWV7J3MnIGlmIHRpbWVzID4gMSBlbHNlICcnfSk8L2xpPiIKCiAgICAgICAgZm9yIGFydGlzdCwgc29uZ24gaW4gZGF0YVsiYXJ0aXN0cyJdLml0ZW1zKCk6CiAgICAgICAgICAgIHJwczogc3RyID0gZiIgKDxjb2RlPntzb25nblsxXX08L2NvZGU+IHJlcGVhdHMpIgogICAgICAgICAgICBhcnRpc3RzICs9IGYiPGxpPntodG1sX2VzY2FwZShhcnRpc3QpfSAoPGNvZGU+e3NvbmduWzBdfTwvY29kZT4gc29uZ3sncycgaWYgc29uZ25bMF0gPiAxIGVsc2UgJyd9IFwKICAgIHBsYXllZHtycHMgaWYgc29uZ25bMV0gPiAxIGVsc2UgJyd9KTwvbGk+IgoKICAgICAgICByZXR1cm4gaHRtbF9taW5pZnkoCiAgICAgICAgICAgIGYiIiI8IURPQ1RZUEUgaHRtbD4KICAgIDxodG1sIGxhbmc9ImVuIj4KICAgICAgICA8aGVhZD4KICAgICAgICAgICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPgogICAgICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UiPgogICAgICAgICAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgICAgICAgICAgIDx0aXRsZT5IVE1MIG1wdiBzb25nIHJlcG9ydDwvdGl0bGU+CgogICAgICAgICAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iV2hhdCBkbyB5b3UgbGlzdGVuIHRvIiAvPgogICAgICAgICAgICA8bWV0YQogICAgICAgICAgICAgICAgbmFtZT0ia2V5d29yZHMiCiAgICAgICAgICAgICAgICBjb250ZW50PSJzb3J0LCByZXBvcnQsIG11c2ljLCBtdXNpYyByZXBvcnQsIGxpc3Rlbiwgc29uZyIKICAgICAgICAgICAgLz4KICAgICAgICAgICAgPG1ldGEKICAgICAgICAgICAgICAgIG5hbWU9InJvYm90cyIKICAgICAgICAgICAgICAgIGNvbnRlbnQ9ImZvbGxvdywgaW5kZXgsIG1heC1zbmlwcGV0Oi0xLCBtYXgtdmlkZW8tcHJldmlldzotMSwgbWF4LWltYWdlLXByZXZpZXc6bGFyZ2UiCiAgICAgICAgICAgIC8+CiAgICAgICAgICAgIDxtZXRhIHByb3BlcnR5PSJvZzp0eXBlIiBjb250ZW50PSJ3ZWJzaXRlIiAvPgogICAgICAgICAgICA8bWV0YSBuYW1lPSJjb2xvci1zY2hlbWUiIGNvbnRlbnQ9ImRhcmsiIC8+CgogICAgICAgICAgICA8c3R5bGU+e3N0eWxlc308L3N0eWxlPgogICAgICAgIDwvaGVhZD4KCiAgICAgICAgPGJvZHk+CiAgICAgICAgICAgIDxtYWluPgogICAgICAgICAgICAgICAgPGgxPldoYXQgYXJlIHlvdSBsaXN0ZW5pbmcgdG8\/PC9oMT4KCiAgICAgICAgICAgICAgICA8aHIgLz4KCiAgICAgICAgICAgICAgICA8aDI+U3RhdHM8L2gyPgoKICAgICAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICAgICAgICA8bGk+U29uZ3MgcGxheWVkOiA8Y29kZT57ZGF0YVsndG90YWwnXX08L2NvZGU+PC9saT4KICAgICAgICAgICAgICAgICAgICA8bGk+VW5pcXVlIHNvbmdzIHBsYXllZDogPGNvZGU+e2xlbihkYXRhWydwbGF5ZWQnXSl9PC9jb2RlPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgPGxpPkFydGlzdHM6IDxjb2RlPntsZW4oZGF0YVsnYXJ0aXN0cyddKX08L2NvZGU+PC9saT4KICAgICAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICAgICAgPGgyPlRvcCBzdGF0czwvaDI+CgogICAgICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgICAgIDxsaT5Ub3AgYXJ0aXN0OiA8Y29kZT57dHVwbGUoZGF0YVsnYXJ0aXN0cyddLmtleXMoKSlbMF19PC9jb2RlPiB3aXRoIDxjb2RlPnt0dXBsZShkYXRhWydhcnRpc3RzJ10udmFsdWVzKCkpWzBdWzBdfTwvY29kZT4gc29uZ3MgcGxheWVkIGFuZCBcCiAgICA8Y29kZT57dHVwbGUoZGF0YVsnYXJ0aXN0cyddLnZhbHVlcygpKVswXVsxXX08L2NvZGU+IHJlcGVhdHM8L2xpPgogICAgICAgICAgICAgICAgICAgIDxsaT5Ub3Agc29uZzogPGNvZGU+e3R1cGxlKGRhdGFbJ3BsYXllZCddLmtleXMoKSlbMF19PC9jb2RlPiBieSA8Y29kZT57Z2V0X2FydGlzdF9mcm9tX3NvbmcodHVwbGUoZGF0YVsncGxheWVkJ10ua2V5cygpKVswXSl9PC9jb2RlPiBcCiAgICB3aXRoIDxjb2RlPnt0dXBsZShkYXRhWydwbGF5ZWQnXS52YWx1ZXMoKSlbMF19PC9jb2RlPiBwbGF5czwvbGk+CiAgICAgICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgICAgIDxoMj5Tb25nczwvaDE+CgogICAgICAgICAgICAgICAgPGRldGFpbHM+CiAgICAgICAgICAgICAgICAgICAgPHN1bW1hcnk+RXhwYW5kIGZvciB0aGUgbGlzdCBvZiBzb25nczwvc3VtbWFyeT4KICAgICAgICAgICAgICAgICAgICA8dWw+e3NvbmdzfTwvdWw+CiAgICAgICAgICAgICAgICA8L2RldGFpbHM+CgogICAgICAgICAgICAgICAgPGgyPkFydGlzdHM8L2gyPgoKICAgICAgICAgICAgICAgIDxkZXRhaWxzPgogICAgICAgICAgICAgICAgICAgIDxzdW1tYXJ5PkV4cGFuZCBmb3IgdGhlIGxpc3Qgb2YgYXJ0aXN0czwvc3VtbWFyeT4KICAgICAgICAgICAgICAgICAgICA8dWw+e2FydGlzdHN9PC91bD4KICAgICAgICAgICAgICAgIDwvZGV0YWlscz4KCiAgICAgICAgICAgICAgICA8aDI+UmF3IEpTT04gZGF0YTwvaDI+CgogICAgICAgICAgICAgICAgPGRldGFpbHM+CiAgICAgICAgICAgICAgICAgICAgPHN1bW1hcnk+RXhwYW5kIGZvciB0aGUgcmF3IGRhdGE8L3N1bW1hcnk+CiAgICAgICAgICAgICAgICAgICAgPHByZT48Y29kZT57dWpzb24uZHVtcHMoZGF0YSwgaW5kZW50PTQpfTwvY29kZT48L3ByZT4KICAgICAgICAgICAgICAgIDwvZGV0YWlscz4KICAgICAgICAgICAgPC9tYWluPgogICAgICAgIDwvYm9keT4KICAgIDwvaHRtbD4iIiIKICAgICAgICApCgoKICAgIGRlZiBtYWluKCkgLT4gaW50OgogICAgICAgICIiIkVudHJ5L21haW4gZnVuY3Rpb24iIiIKCiAgICAgICAgZGF0YTogTGlzdFtUdXBsZVtzdHIsIHN0cl1dID0gW10KCiAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguZXhwYW5kdXNlcigifi8ubXB2cCIpLCAiciIpIGFzIG1wdl9kYXRhOgogICAgICAgICAgICBmb3IgbGluZSBpbiBtcHZfZGF0YToKICAgICAgICAgICAgICAgIGlmICciZGF0YSInIG5vdCBpbiBsaW5lOgogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCgogICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQocGFyc2Vfc29uZyh1anNvbi5sb2FkcyhsaW5lKVsiZGF0YSJdKSkKCiAgICAgICAgd2l0aCBvcGVuKCJpbmRleC5odG1sIiwgInciKSBhcyBoOgogICAgICAgICAgICBoLndyaXRlKGdlbmVyYXRlX2h0bWxfcmVwb3J0KHBhcnNlX2RhdGEoZGF0YSkpKQoKICAgICAgICByZXR1cm4gMAoKCiAgICBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgICAgIGFzc2VydCBtYWluLl9fYW5ub3RhdGlvbnNfXy5nZXQoInJldHVybiIpIGlzIGludCwgIm1haW4oKSBzaG91bGQgcmV0dXJuIGFuIGludGVnZXIiCgogICAgICAgIGZpbHRlcl93YXJuaW5ncygiZXJyb3IiLCBjYXRlZ29yeT1XYXJuaW5nKQogICAgICAgIHN5cy5leGl0KG1haW4oKSkKClRoaXMgaXMgYSBwcmV0dHkgZWFzeSB0aGluZywgdmVyeSBzdHVwaWQgYW5kIG5vdCBmb29sLXByb29mIGJ1dCBlaCwKdGhpcyBnZW5lcmF0b3Igc2hvdWxkIHdvcmsgb3V0IG9mIHRoZSBib3ggd2l0aCB0aGUgc29uZyBuYW1lIGZvcm1hdApiZWluZyBgYXJ0aXN0IG5hbWUgLSBzb25nYCwgaWYgaXQncyBub3QgbWFrZSBzdXJlIHRvIGFkZCBhIGxvd2VyY2FzZQplbnRyeSB0byBgU09OR19UT19BUlRJU1RgLCBsaWtlIGlmIHlvdXIgc29uZyB3YXMgbmFtZWQgbGlrZSBgbmFNZSAtIEFydGlzdGAKeW91IHdpbGwgaGF2ZSB0byBhZGQgdGhpcyBlbnRyeToKCiAgICAibmFtZSAtIGFydGlzdCI6ICJhcnRpc3QiLAoKVGhlc2Ugc2V0dGluZ3MgdGhhdCB5b3Ugc2VlIGluIG15IHNjcmlwdCBhcmUgZm9yIG15IHBsYXlsaXN0CgojIyAyLjIgRGVwZW5kZW5jaWVzCgpIZXJlJ3MgdGhlIHB5dGhvbiBkZXBlbmRlbmNpZXMgeW91IG5lZWQ6CgogICAgY3NzLWh0bWwtanMtbWluaWZ5CiAgICB1anNvbgoKWW91IG5lZWQgdG8gaW5zdGFsbCB0aGVtIHVzaW5nCgogICAgcHl0aG9uMyAtbSBwaXAgaW5zdGFsbCAtLXVzZXIgY3NzLWh0bWwtanMtbWluaWZ5IHVqc29uCgojIyAyLjMgVGhlIGRhdGEgcmVwb3J0CgpPbmNlIHlvdSBoYXZlIGVub3VnaCBkYXRhIHRvIG1ha2UgYSByZXBvcnQgZnJvbSwgcnVuIHRoZSBzY3JpcHQsCmp1c3QKCiAgICBweXRob24zIG1haW4ucHkKCk9yIHdoYXRldmVyLCBpdCdsbCBnZW5lcmF0ZSBgaW5kZXguaHRtbGAgZmlsZSBhbmQgaXQnbGwgaW5jbHVkZSBhbGwgb2YKeW91ciByZXBvcnQgZGF0YSwgeW91IGNhbiBhbHNvIHN0eWxlIGl0IHVzaW5nIHRoZSBgc3R5bGVzYCB2YXJpYWJsZQoKIyMgMy4gRmluaXNoaW5nCgpUaGF0J3MgYWxsLCBlbmpveSB5b3VyIHN0YXRpc3RpY3MsIGFuZCBhcyBvZiBub3cgSSBzaGFsbCBnbyBjb2xsZWN0IG1vcmUgZGF0YSwKSSBhbHJlYWR5IGhhdmUgMThLQiBvZiBpdCEKClBsdXMsIEknbGwgYWRtaXQgaXQsIG1vc3Qgb2YgdGhpcyBjb2RlIGlzICoqZ2FyYmFnZSwgY29tcGxldGUgZG9nIHNoaXQqKiwKSSBqdXN0IHdhbnRlZCB0byBtYWtlIGl0IHdvcmsgYW5kIEkgZGlkLCBpdCdzIHJlYWRhYmxlIGVub3VnaApmb3IganVzdCBhIG1lc3N5IHNjcmlwdCBJJ20gbm90IGV2ZW4gcmVsZWFzaW5nIGFzIGFueXRoaW5nIGxlZ2l0Cg==", + "content": "IyMgQmVmb3JlIHdlIHN0YXJ0CgpUaGlzIGJsb2cgaXMgbm90IHVwZGF0ZWQsIEkgbWFkZSB0aGlzIHdob2xlIHRoaW5nIGludG8gYSBiYXoKcGx1Z2luOiA8aHR0cHM6Ly9hcmktd2ViLnh5ei9naC9tcHZwLXJlcG9ydD4KCkEgZGF5IGFnbyBJIHN0YXJ0ZWQgY29sbGVjdGluZyBkYXRhIGFib3V0IHdoYXQgSSBsaXN0ZW4gdG8Kb24gbXkgcGxheWxpc3QsIGFuZCBjdXJyZW50bHkgaXQncyB3b3JraW5nIG91dCBhbWF6aW5nLCBpdCdzIHZlcnkKZnVuLCBzbyBJIHRob3VnaHQgdG8gbXlzZWxmLCAnd2h5IG5vdCBzaGFyZSBpdCcsIHNvIGhlcmUKeW91IGdvCgojIyAxLiBTZXQgdXAgYG1wdnBgIGFsaWFzCgpgbXB2cGAgYWxpYXMgaXMgd2hhdCB5b3Ugd2lsbCBoYXZlIHRvIHVzZSB0byBjb2xsZWN0IGRhdGEgYWJvdXQKeW91ciBwbGF5bGlzdCwgeW91IGNhbiBzZXQgdXAgYW5vdGhlciBuYW1lIGJ1dCBjb2RlIHNob3VsZCBiZQphcm91bmQgdGhlIHNhbWUKCkJhc2ljYWxseSwgYWRkIHRoaXMgdG8geW91ciBgfi8uYmFzaHJjYDoKCiAgICBtcHZwX2NvbGxlY3QoKSB7CiAgICAgICAgWyAhIC1mICIkSE9NRS8ubXB2cCIgXSAmJiA6ID4iJEhPTUUvLm1wdnAiCgogICAgICAgIHNsZWVwIDIKCiAgICAgICAgd2hpbGUgdHJ1ZTsgZG8KICAgICAgICAgICAgc2xlZXAgNQoKICAgICAgICAgICAgeD0iJChlY2hvICd7ICJjb21tYW5kIjogWyJnZXRfcHJvcGVydHkiLCAicGF0aCJdIH0nIHwgc29jYXQgLSAvdG1wL21wdmlwYykiCgogICAgICAgICAgICBbICEgIiR4IiBdICYmIGJyZWFrCgogICAgICAgICAgICBpZiBbICIkeCIgXSAmJiBbICIkeCIgIT0gIiQodGFpbCAtbiAxICIkSE9NRS8ubXB2cCIpIiBdOyB0aGVuCiAgICAgICAgICAgICAgICBzbGVlcCA0CgogICAgICAgICAgICAgICAgeT0iJChlY2hvICd7ICJjb21tYW5kIjogWyJnZXRfcHJvcGVydHkiLCAicGF0aCJdIH0nIHwgc29jYXQgLSAvdG1wL21wdmlwYykiCiAgICAgICAgICAgICAgICBbICIkeCIgPSAiJHkiIF0gJiYgZWNobyAiJHgiID4+IiRIT01FLy5tcHZwIgogICAgICAgICAgICBmaQogICAgICAgIGRvbmUKICAgIH0KCiAgICBhbGlhcyBtcHZwPSdtcHZwX2NvbGxlY3QgJiBtcHYgLS1zaHVmZmxlIC0tbG9vcC1wbGF5bGlzdCAtLWlucHV0LWlwYy1zZXJ2ZXI9L3RtcC9tcHZpcGMnCgpXaGVuIHlvdSB1c2UgdGhlIGBtcHZwYCBhbGlhcyBpdCdsbCBzdGFydCB0aGUgZGF0YSBjb2xsZWN0b3IgaW4gdGhlIGJhY2tncm91bmQsCnRoZSBJUEMgd2lsbCBiZSBhY2Nlc3NpYmxlIHRob3VnaCBgL3RtcC9tcHZpcGNgLCB0aGlzIHdpbGwgY29sbGVjdCBhbGwKZGF0YSB0byBgfi8ubXB2cGAsIGxpc3RlbiB0byBzb21lIG11c2ljIGFuZCBpZ25vcmUgaXQgZm9yIGEgYml0LCBhbHNvLCBrZWVwIGluIG1pbmQsCnRoaXMgY29kZSBpcyBiYWQgYmVjYXVzZSBJJ20gdG9vIGxhenkgdG8gaW1wcm92ZSBpdCBhbmQgSSBtYWRlIGl0IGZhc3QsIGFueXdheSwgeW91Cm5lZWQgdG8gaW5zdGFsbCBgc29jYXRgIGZvciB0aGlzIHRvIHdvcmsKCiMjIDIuIEdlbmVyYXRlIGRhdGEgcmVwb3J0CgpXZWxsIGF0IHRoaXMgcG9pbnQgeW91IGNhbiBkbyBhbnl0aGluZyB5b3Ugd2FudCB3aXRoIHlvdXIgZGF0YSwgYWx0aG91Z2gKSSBtYWRlIGEgc2ltcGxlIGdlbmVyYXRvciBmb3IgaXQKClNvIEkgbWFkZSB1c2Ugb2YgdGhlIGRhdGEgSSBoYXZlIGFuZCBteSBwbGF5bGlzdCBzdHJ1Y3R1cmUsIGhlcmUncyBhbiBleGFtcGxlIGVudHJ5OgoKICAgIHsiZGF0YSI6InBsYXlsaXN0L2dpcmwgaW4gcmVkIC0gaSdsbCBkaWUgYW55d2F5LiBbOE1NYTM1QjNIVDhdLm1wMyIsInJlcXVlc3RfaWQiOjAsImVycm9yIjoic3VjY2VzcyJ9CgpUaGVyZSdzIGFuIElEIHRoZXJlIHNvIEkgYWRkIFlvdVR1YmUgYWRkaW5nIHRvIHRoZSBnZW5lcmF0b3IgYnkKZGVmYXVsdCwgeW91cnMgbWlnaHQgbm90IGhhdmUgaXQsIGJ1dCBJIG1lYW4sIHlvdSBjYW4gc3RpbGwgcHJldHR5IG11Y2gKdXNlIGl0LCBqdXN0IGxpbmtzIHdvbid0IHdvcmsKCiMjIyAyLjEgVGhlIHNjcmlwdAoKSSBtYWRlIGEgcHl0aG9uIHNjcmlwdCBhcyBteSBnZW5lcmF0b3I6CgogICAgIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogICAgIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KICAgICIiIk1QViBwbGF5bGlzdCBzb25nIHJlcG9ydGVyIiIiCgogICAgaW1wb3J0IG9zCiAgICBpbXBvcnQgc3lzCiAgICBmcm9tIGh0bWwgaW1wb3J0IGVzY2FwZSBhcyBodG1sX2VzY2FwZQogICAgZnJvbSB0eXBpbmcgaW1wb3J0IEFueSwgRGljdCwgTGlzdCwgVHVwbGUKICAgIGZyb20gd2FybmluZ3MgaW1wb3J0IGZpbHRlcndhcm5pbmdzIGFzIGZpbHRlcl93YXJuaW5ncwoKICAgIGltcG9ydCB1anNvbiAgIyB0eXBlOiBpZ25vcmUKICAgIGZyb20gY3NzX2h0bWxfanNfbWluaWZ5IGltcG9ydCBodG1sX21pbmlmeSAgIyB0eXBlOiBpZ25vcmUKCiAgICBTT05HX1RPX0FSVElTVDogRGljdFtzdHIsIHN0cl0gPSB7CiAgICAgICAgIjE5ODUiOiAiYm8gYnVybmhhbSIsCiAgICAgICAgImFwb2NhbHlwc2UiOiAiY2lnYXJldHRlcyBhZnRlciBTZXgiLAogICAgICAgICJhc3Ryb25vbXkiOiAiY29uYW4gZ3JheSIsCiAgICAgICAgImJyb29rbHluIGJhYnkiOiAibGFuYSBkZWwgcmV5IiwKICAgICAgICAiY29tZSBob21lIHRvIG1lIjogImNyYXdsZXJzIiwKICAgICAgICAiZGFkZHkgaXNzdWVzIjogInRoZSBuZWlnaGJvdXJob29kIiwKICAgICAgICAiZmVlbCBiZXR0ZXIiOiAicGVuZWxvcGUgc2NvdHQiLAogICAgICAgICJob3JueWxvdmVzaWNrbWVzcyI6ICJnaXJsIGluIHJlZCIsCiAgICAgICAgImkgd2FubmEgYmUgeW91ciBnaXJsZnJpZW5kIjogImdpcmwgaW4gcmVkIiwKICAgICAgICAiay4iOiAiY2lnYXJldHRlcyBhZnRlciBTZXgiLAogICAgICAgICJsb29rYWxpa2UiOiAiY29uYW4gZ3JheSIsCiAgICAgICAgImxvdHRhIHRydWUgY3JpbWUiOiAicGVuZWxvcGUgc2NvdHQiLAogICAgICAgICJteSBtYW4ncyBhIGhleGFnb24gKG11c2ljIHZpZGVvKSI6ICJtw7xuZWNhdCIsCiAgICAgICAgInLDpHQiOiAicGVuZWxvcGUgc2NvdHQiLAogICAgICAgICJzYXBwaG8iOiAiYnVzaGllcyIsCiAgICAgICAgInNlcmlhbCBraWxsZXIgLSBsYW5hIGRlbCByZXkgbHlyaWNzIjogImxhbmEgZGVsIHJleSIsCiAgICAgICAgInN1Z2FyLCB3ZSdyZSBnb2luIGRvd24gYnV0IGl0J3MgY3JlZXBpZXIiOiAia2FkZSIsCiAgICAgICAgInN3ZWF0ZXIgd2VhdGhlciI6ICJ0aGUgbmVpZ2hib3VyaG9vZCIsCiAgICAgICAgInRhbGlhIOKnuOKnuCBnaXJsIGluIHJlZCBjb3ZlciI6ICJnaXJsIGluIHJlZCIsCiAgICAgICAgInR2IjogImJ1c2hpZXMiLAogICAgICAgICJ1bmlvbml6ZSAtIG3DvG5lY2F0IChtdXNpYyB2aWRlbykiOiAibcO8bmVjYXQiLAogICAgICAgICJ3YXRjaCB5b3Ugc2xlZXAuIjogImdpcmwgaW4gcmVkIiwKICAgICAgICAieW91IHVzZWQgbWUgZm9yIG15IGxvdmVfZ2lybCBpbiByZWQiOiAiZ2lybCBpbiByZWQiLAogICAgfQoKCiAgICBjbGFzcyBVbmtub3duTXVzaWNBcnRpc3RFcnJvcihFeGNlcHRpb24pOgogICAgICAgICIiIlJhaXNlZCB3aGVuIHRoZXJlIGlzIGFuIHVua25vd24gbXVzaWMgYXJ0aXN0IiIiCgoKICAgIGRlZiBzb3J0X2RpY3QoZDogRGljdFtzdHIsIGludF0pIC0+IERpY3Rbc3RyLCBpbnRdOgogICAgICAgIHJldHVybiB7azogdiBmb3IgaywgdiBpbiBzb3J0ZWQoZC5pdGVtcygpLCBrZXk9bGFtYmRhIGl0ZW06IGl0ZW1bMV0sIHJldmVyc2U9VHJ1ZSl9CgoKICAgIGRlZiBmc3BsaXRfZGVscyhzOiBzdHIsICpkZWxzOiBzdHIpIC0+IHN0cjoKICAgICAgICBmb3IgZGVsaW0gaW4gZGVsczoKICAgICAgICAgICAgcyA9IHMuc3BsaXQoZGVsaW0sIG1heHNwbGl0PTEpWzBdCgogICAgICAgIHJldHVybiBzLnN0cmlwKCkKCgogICAgZGVmIGdldF9hcnRpc3RfZnJvbV9zb25nKHNvbmc6IHN0cikgLT4gc3RyOgogICAgICAgIHNvbmcgPSBzb25nLmxvd2VyKCkKICAgICAgICBkZWxpbXM6IFR1cGxlW3N0ciwgLi4uXSA9ICgKICAgICAgICAgICAgIuKAkyIsCiAgICAgICAgICAgICItIiwKICAgICAgICAgICAgIiwiLAogICAgICAgICAgICAiZmVhdC4iLAogICAgICAgICAgICAiLiIsCiAgICAgICAgICAgICImIiwKICAgICAgICApCgogICAgICAgIGlmIHNvbmcgbm90IGluIFNPTkdfVE9fQVJUSVNUIGFuZCBhbnkoZCBpbiBzb25nIGZvciBkIGluIGRlbGltcyk6CiAgICAgICAgICAgIHJldHVybiBmc3BsaXRfZGVscygKICAgICAgICAgICAgICAgIHNvbmcsCiAgICAgICAgICAgICAgICAqZGVsaW1zLAogICAgICAgICAgICApCiAgICAgICAgZWxzZToKICAgICAgICAgICAgaWYgc29uZyBpbiBTT05HX1RPX0FSVElTVDoKICAgICAgICAgICAgICAgIHJldHVybiBTT05HX1RPX0FSVElTVFtzb25nXS5sb3dlcigpCgogICAgICAgICAgICByYWlzZSBVbmtub3duTXVzaWNBcnRpc3RFcnJvcihmIk5vIGhhbmRsZWQgYXJ0aXN0IGZvciBzb25nOiB7c29uZyFyfSIpCgoKICAgIGRlZiBnZXRfcGxheWVkKGRhdGE6IExpc3RbVHVwbGVbc3RyLCBzdHJdXSkgLT4gRGljdFtzdHIsIGludF06CiAgICAgICAgcGxheWVkOiBEaWN0W3N0ciwgaW50XSA9IHt9CgogICAgICAgIGZvciBzb25nLCBfIGluIGRhdGE6CiAgICAgICAgICAgIGlmIHNvbmcgbm90IGluIHBsYXllZDoKICAgICAgICAgICAgICAgIHBsYXllZFtzb25nXSA9IDAKCiAgICAgICAgICAgIHBsYXllZFtzb25nXSArPSAxCgogICAgICAgIHJldHVybiBzb3J0X2RpY3QocGxheWVkKQoKCiAgICBkZWYgZ2V0X3l0X3VybHNfZnJvbV9kYXRhKGRhdGE6IExpc3RbVHVwbGVbc3RyLCBzdHJdXSkgLT4gRGljdFtzdHIsIHN0cl06CiAgICAgICAgcmV0dXJuIHtzb25nOiBmImh0dHBzOi8vYXJpLXdlYi54eXoveXQvd2F0Y2g\/dj17eXRfaWR9IiBmb3Igc29uZywgeXRfaWQgaW4gZGF0YX0KCgogICAgZGVmIGdldF9hcnRpc3RzX2Zyb21fcGxheWVkKHBsYXllZDogRGljdFtzdHIsIGludF0pIC0+IERpY3Rbc3RyLCBMaXN0W2ludF1dOgogICAgICAgIGFydGlzdHM6IERpY3Rbc3RyLCBMaXN0W2ludF1dID0ge30KCiAgICAgICAgZm9yIHNvbmcgaW4gcGxheWVkOgogICAgICAgICAgICBhcnRpc3QgPSBnZXRfYXJ0aXN0X2Zyb21fc29uZyhzb25nKQoKICAgICAgICAgICAgaWYgYXJ0aXN0IG5vdCBpbiBhcnRpc3RzOgogICAgICAgICAgICAgICAgYXJ0aXN0c1thcnRpc3RdID0gWzAsIDBdCgogICAgICAgICAgICBhcnRpc3RzW2FydGlzdF1bMF0gKz0gMQogICAgICAgICAgICBhcnRpc3RzW2FydGlzdF1bMV0gKz0gcGxheWVkW3NvbmddCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGs6IHYKICAgICAgICAgICAgZm9yIGssIHYgaW4gc29ydGVkKGFydGlzdHMuaXRlbXMoKSwga2V5PWxhbWJkYSBpdGVtOiBzdW0oaXRlbVsxXSksIHJldmVyc2U9VHJ1ZSkKICAgICAgICB9CgoKICAgIGRlZiBwYXJzZV9zb25nKHNvbmc6IHN0cikgLT4gVHVwbGVbc3RyLCBzdHJdOgogICAgICAgIGJhc2VuYW1lOiBzdHIgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUoc29uZykpWzBdCiAgICAgICAgcmV0dXJuIGJhc2VuYW1lWzotMTRdLCBiYXNlbmFtZVstMTI6LTFdCgoKICAgIGRlZiBwYXJzZV9kYXRhKGRhdGE6IExpc3RbVHVwbGVbc3RyLCBzdHJdXSkgLT4gRGljdFtzdHIsIEFueV06CiAgICAgICAgcGxheWVkOiBEaWN0W3N0ciwgaW50XSA9IGdldF9wbGF5ZWQoZGF0YSkKCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgInRvdGFsIjogbGVuKGRhdGEpLAogICAgICAgICAgICAicGxheWVkIjogcGxheWVkLAogICAgICAgICAgICAiYXJ0aXN0cyI6IGdldF9hcnRpc3RzX2Zyb21fcGxheWVkKHBsYXllZCksCiAgICAgICAgICAgICJ5dC11cmxzIjogZ2V0X3l0X3VybHNfZnJvbV9kYXRhKGRhdGEpLAogICAgICAgIH0KCgogICAgZGVmIGdlbmVyYXRlX2h0bWxfcmVwb3J0KGRhdGE6IERpY3Rbc3RyLCBBbnldKSAtPiBzdHI6CiAgICAgICAgc3R5bGVzOiBzdHIgPSAiIiIKICAgIEBpbXBvcnQgdXJsKCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2hhY2stZm9udEAzL2J1aWxkL3dlYi9oYWNrLm1pbi5jc3MiKTsKCiAgICA6cm9vdCB7CiAgICAgICAgY29sb3Itc2NoZW1lOiBkYXJrOwoKICAgICAgICAtLWNsci1iZzogIzI2MjIyMDsKICAgICAgICAtLWNsci1mZzogI2Y5ZjZlODsKCiAgICAgICAgLS1jbHItY29kZS1iZzogIzFmMWIxYTsKICAgICAgICAtLWNsci1jb2RlLWZnOiAjZjBmM2U2OwogICAgICAgIC0tY2xyLWNvZGUtYmctZGFyazogIzE4MTQxNDsKCiAgICAgICAgLS1zY3JvbGxiYXItaGVpZ2h0OiA2cHg7IC8qIFRPRE86IEZpcmVmb3ggKi8KICAgIH0KCiAgICAqLAogICAgKjo6YmVmb3JlLAogICAgKjo6YWZ0ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNsci1iZyk7CiAgICAgICAgY29sb3I6IHZhcigtLWNsci1mZyk7CiAgICAgICAgZm9udC1mYW1pbHk6IEhhY2ssIGhhY2ssIG1vbm9zcGFjZTsKCiAgICAgICAgc2Nyb2xsYmFyLXdpZHRoOiBub25lOwogICAgICAgIC1tcy1vdmVyZmxvdy1zdHlsZTogbm9uZTsKCiAgICAgICAgc2Nyb2xsYmFyLWNvbG9yOiB2YXIoLS1jbHItY29kZS1iZy1kYXJrKSB0cmFuc3BhcmVudDsKCiAgICAgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CgogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKCiAgICAgICAgc2Nyb2xsLWJlaGF2aW9yOiBzbW9vdGg7CiAgICB9CgogICAgOjotd2Via2l0LXNjcm9sbGJhciwKICAgIDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgICAgIGhlaWdodDogdmFyKC0tc2Nyb2xsYmFyLWhlaWdodCk7CiAgICB9CgogICAgOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICB9CgogICAgOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY2xyLWNvZGUtYmctZGFyayk7CiAgICB9CgogICAgaHRtbDo6LXdlYmtpdC1zY3JvbGxiYXIsCiAgICBib2R5Ojotd2Via2l0LXNjcm9sbGJhciB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgIGJvZHkgewogICAgICAgIG1hcmdpbjogYXV0bzsKICAgICAgICBwYWRkaW5nOiAycmVtOwogICAgICAgIG1heC13aWR0aDogMTEwMHB4OwogICAgICAgIG1pbi1oZWlnaHQ6IDEwMHZoOwogICAgICAgIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZVNwZWVkOwogICAgfQoKICAgIGgxIHsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgbWFyZ2luOiAxZW07CiAgICAgICAgZm9udC1zaXplOiAyZW07CiAgICB9CgogICAgbGkgewogICAgICAgIG1hcmdpbjogMC41ZW07CiAgICB9CgogICAgYSB7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgICAgIHRleHQtc2hhZG93OiAwcHggMHB4IDRweCB3aGl0ZTsKICAgIH0KCiAgICBwcmUsCiAgICBwcmUgKiB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY2xyLWNvZGUtYmcpOwogICAgfQoKICAgIHByZSwKICAgIHByZSAqLAogICAgY29kZSB7CiAgICAgICAgY29sb3I6IHZhcigtLWNsci1jb2RlLWZnKTsKICAgIH0KCiAgICBwcmUsCiAgICBwcmUgY29kZSB7CiAgICAgICAgb3ZlcmZsb3cteDogYXV0byAhaW1wb3J0YW50OwoKICAgICAgICBzY3JvbGxiYXItd2lkdGg6IGluaXRpYWw7CiAgICAgICAgLW1zLW92ZXJmbG93LXN0eWxlOiBpbml0aWFsOwogICAgfQoKICAgIHByZSB7CiAgICAgICAgcGFkZGluZzogMWVtOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIH0KCiAgICBjb2RlOm5vdChwcmUgY29kZSkgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNsci1jb2RlLWJnKTsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgcGFkZGluZzogMC4yZW07CiAgICB9CgogICAgQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHsKICAgICAgICAqLAogICAgICAgICo6OmJlZm9yZSwKICAgICAgICAqOjphZnRlciB7CiAgICAgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjAxbXMgIWltcG9ydGFudDsKICAgICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjAxbXMgIWltcG9ydGFudDsKCiAgICAgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMSAhaW1wb3J0YW50OwogICAgICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxICFpbXBvcnRhbnQ7CgogICAgICAgICAgICAtd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb246IDAuMDFtcyAhaW1wb3J0YW50OwogICAgICAgICAgICAtby10cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjAxbXMgIWltcG9ydGFudDsKICAgICAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4wMW1zICFpbXBvcnRhbnQ7CgogICAgICAgICAgICBzY3JvbGwtYmVoYXZpb3I6IGF1dG8gIWltcG9ydGFudDsKICAgICAgICB9CiAgICB9CgogICAgQG1lZGlhIChwcmVmZXJzLWNvbnRyYXN0OiBtb3JlKSB7CiAgICAgICAgOnJvb3QgewogICAgICAgICAgICAtLWNsci1iZzogYmxhY2s7CiAgICAgICAgICAgIC0tY2xyLWZnOiB3aGl0ZTsKCiAgICAgICAgICAgIC0tY2xyLWNvZGUtYmc6ICMxODE4MTg7CiAgICAgICAgICAgIC0tY2xyLWNvZGUtZmc6IHdoaXRlc21va2U7CgogICAgICAgICAgICAtLXNjcm9sbGJhci1oZWlnaHQ6IDEycHg7IC8qIFRPRE86IEZpcmVmb3ggKi8KICAgICAgICB9CgogICAgICAgIGh0bWw6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICAgICAgZGlzcGxheTogaW5pdGlhbCAhaW1wb3J0YW50OwogICAgICAgIH0KCiAgICAgICAgKiwKICAgICAgICAqOjpiZWZvcmUsCiAgICAgICAgKjo6YWZ0ZXIgewogICAgICAgICAgICBzY3JvbGxiYXItd2lkdGg6IGluaXRpYWwgIWltcG9ydGFudDsKICAgICAgICAgICAgLW1zLW92ZXJmbG93LXN0eWxlOiBpbml0aWFsICFpbXBvcnRhbnQ7CiAgICAgICAgfQoKICAgICAgICBhIHsKICAgICAgICAgICAgdGV4dC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsKCiAgICAgICAgICAgIC13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgZG90dGVkICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZCAhaW1wb3J0YW50OwogICAgICAgIH0KICAgIH0KICAgICIiIgoKICAgICAgICBzb25ncyA9IGFydGlzdHMgPSAiIgoKICAgICAgICBmb3Igc29uZywgdGltZXMgaW4gZGF0YVsicGxheWVkIl0uaXRlbXMoKToKICAgICAgICAgICAgc29uZ3MgKz0gZiI8bGk+PGEgaHJlZj1cIntkYXRhWyd5dC11cmxzJ11bc29uZ119XCI+e2h0bWxfZXNjYXBlKHNvbmcpfTwvYT4gKHBsYXllZCA8Y29kZT57dGltZXN9PC9jb2RlPiB0aW1leydzJyBpZiB0aW1lcyA+IDEgZWxzZSAnJ30pPC9saT4iCgogICAgICAgIGZvciBhcnRpc3QsIHNvbmduIGluIGRhdGFbImFydGlzdHMiXS5pdGVtcygpOgogICAgICAgICAgICBycHM6IHN0ciA9IGYiICg8Y29kZT57c29uZ25bMV19PC9jb2RlPiByZXBlYXRzKSIKICAgICAgICAgICAgYXJ0aXN0cyArPSBmIjxsaT57aHRtbF9lc2NhcGUoYXJ0aXN0KX0gKDxjb2RlPntzb25nblswXX08L2NvZGU+IHNvbmd7J3MnIGlmIHNvbmduWzBdID4gMSBlbHNlICcnfSBcCiAgICBwbGF5ZWR7cnBzIGlmIHNvbmduWzFdID4gMSBlbHNlICcnfSk8L2xpPiIKCiAgICAgICAgcmV0dXJuIGh0bWxfbWluaWZ5KAogICAgICAgICAgICBmIiIiPCFET0NUWVBFIGh0bWw+CiAgICA8aHRtbCBsYW5nPSJlbiI+CiAgICAgICAgPGhlYWQ+CiAgICAgICAgICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KICAgICAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1lZGdlIj4KICAgICAgICAgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgogICAgICAgICAgICA8dGl0bGU+SFRNTCBtcHYgc29uZyByZXBvcnQ8L3RpdGxlPgoKICAgICAgICAgICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IldoYXQgZG8geW91IGxpc3RlbiB0byIgLz4KICAgICAgICAgICAgPG1ldGEKICAgICAgICAgICAgICAgIG5hbWU9ImtleXdvcmRzIgogICAgICAgICAgICAgICAgY29udGVudD0ic29ydCwgcmVwb3J0LCBtdXNpYywgbXVzaWMgcmVwb3J0LCBsaXN0ZW4sIHNvbmciCiAgICAgICAgICAgIC8+CiAgICAgICAgICAgIDxtZXRhCiAgICAgICAgICAgICAgICBuYW1lPSJyb2JvdHMiCiAgICAgICAgICAgICAgICBjb250ZW50PSJmb2xsb3csIGluZGV4LCBtYXgtc25pcHBldDotMSwgbWF4LXZpZGVvLXByZXZpZXc6LTEsIG1heC1pbWFnZS1wcmV2aWV3OmxhcmdlIgogICAgICAgICAgICAvPgogICAgICAgICAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dHlwZSIgY29udGVudD0id2Vic2l0ZSIgLz4KICAgICAgICAgICAgPG1ldGEgbmFtZT0iY29sb3Itc2NoZW1lIiBjb250ZW50PSJkYXJrIiAvPgoKICAgICAgICAgICAgPHN0eWxlPntzdHlsZXN9PC9zdHlsZT4KICAgICAgICA8L2hlYWQ+CgogICAgICAgIDxib2R5PgogICAgICAgICAgICA8bWFpbj4KICAgICAgICAgICAgICAgIDxoMT5XaGF0IGFyZSB5b3UgbGlzdGVuaW5nIHRvPzwvaDE+CgogICAgICAgICAgICAgICAgPGhyIC8+CgogICAgICAgICAgICAgICAgPGgyPlN0YXRzPC9oMj4KCiAgICAgICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgICAgICAgPGxpPlNvbmdzIHBsYXllZDogPGNvZGU+e2RhdGFbJ3RvdGFsJ119PC9jb2RlPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgPGxpPlVuaXF1ZSBzb25ncyBwbGF5ZWQ6IDxjb2RlPntsZW4oZGF0YVsncGxheWVkJ10pfTwvY29kZT48L2xpPgogICAgICAgICAgICAgICAgICAgIDxsaT5BcnRpc3RzOiA8Y29kZT57bGVuKGRhdGFbJ2FydGlzdHMnXSl9PC9jb2RlPjwvbGk+CiAgICAgICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgICAgIDxoMj5Ub3Agc3RhdHM8L2gyPgoKICAgICAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICAgICAgICA8bGk+VG9wIGFydGlzdDogPGNvZGU+e3R1cGxlKGRhdGFbJ2FydGlzdHMnXS5rZXlzKCkpWzBdfTwvY29kZT4gd2l0aCA8Y29kZT57dHVwbGUoZGF0YVsnYXJ0aXN0cyddLnZhbHVlcygpKVswXVswXX08L2NvZGU+IHNvbmdzIHBsYXllZCBhbmQgXAogICAgPGNvZGU+e3R1cGxlKGRhdGFbJ2FydGlzdHMnXS52YWx1ZXMoKSlbMF1bMV19PC9jb2RlPiByZXBlYXRzPC9saT4KICAgICAgICAgICAgICAgICAgICA8bGk+VG9wIHNvbmc6IDxjb2RlPnt0dXBsZShkYXRhWydwbGF5ZWQnXS5rZXlzKCkpWzBdfTwvY29kZT4gYnkgPGNvZGU+e2dldF9hcnRpc3RfZnJvbV9zb25nKHR1cGxlKGRhdGFbJ3BsYXllZCddLmtleXMoKSlbMF0pfTwvY29kZT4gXAogICAgd2l0aCA8Y29kZT57dHVwbGUoZGF0YVsncGxheWVkJ10udmFsdWVzKCkpWzBdfTwvY29kZT4gcGxheXM8L2xpPgogICAgICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgICAgICA8aDI+U29uZ3M8L2gxPgoKICAgICAgICAgICAgICAgIDxkZXRhaWxzPgogICAgICAgICAgICAgICAgICAgIDxzdW1tYXJ5PkV4cGFuZCBmb3IgdGhlIGxpc3Qgb2Ygc29uZ3M8L3N1bW1hcnk+CiAgICAgICAgICAgICAgICAgICAgPHVsPntzb25nc308L3VsPgogICAgICAgICAgICAgICAgPC9kZXRhaWxzPgoKICAgICAgICAgICAgICAgIDxoMj5BcnRpc3RzPC9oMj4KCiAgICAgICAgICAgICAgICA8ZGV0YWlscz4KICAgICAgICAgICAgICAgICAgICA8c3VtbWFyeT5FeHBhbmQgZm9yIHRoZSBsaXN0IG9mIGFydGlzdHM8L3N1bW1hcnk+CiAgICAgICAgICAgICAgICAgICAgPHVsPnthcnRpc3RzfTwvdWw+CiAgICAgICAgICAgICAgICA8L2RldGFpbHM+CgogICAgICAgICAgICAgICAgPGgyPlJhdyBKU09OIGRhdGE8L2gyPgoKICAgICAgICAgICAgICAgIDxkZXRhaWxzPgogICAgICAgICAgICAgICAgICAgIDxzdW1tYXJ5PkV4cGFuZCBmb3IgdGhlIHJhdyBkYXRhPC9zdW1tYXJ5PgogICAgICAgICAgICAgICAgICAgIDxwcmU+PGNvZGU+e3Vqc29uLmR1bXBzKGRhdGEsIGluZGVudD00KX08L2NvZGU+PC9wcmU+CiAgICAgICAgICAgICAgICA8L2RldGFpbHM+CiAgICAgICAgICAgIDwvbWFpbj4KICAgICAgICA8L2JvZHk+CiAgICA8L2h0bWw+IiIiCiAgICAgICAgKQoKCiAgICBkZWYgbWFpbigpIC0+IGludDoKICAgICAgICAiIiJFbnRyeS9tYWluIGZ1bmN0aW9uIiIiCgogICAgICAgIGRhdGE6IExpc3RbVHVwbGVbc3RyLCBzdHJdXSA9IFtdCgogICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmV4cGFuZHVzZXIoIn4vLm1wdnAiKSwgInIiKSBhcyBtcHZfZGF0YToKICAgICAgICAgICAgZm9yIGxpbmUgaW4gbXB2X2RhdGE6CiAgICAgICAgICAgICAgICBpZiAnImRhdGEiJyBub3QgaW4gbGluZToKICAgICAgICAgICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKHBhcnNlX3NvbmcodWpzb24ubG9hZHMobGluZSlbImRhdGEiXSkpCgogICAgICAgIHdpdGggb3BlbigiaW5kZXguaHRtbCIsICJ3IikgYXMgaDoKICAgICAgICAgICAgaC53cml0ZShnZW5lcmF0ZV9odG1sX3JlcG9ydChwYXJzZV9kYXRhKGRhdGEpKSkKCiAgICAgICAgcmV0dXJuIDAKCgogICAgaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICAgICBhc3NlcnQgbWFpbi5fX2Fubm90YXRpb25zX18uZ2V0KCJyZXR1cm4iKSBpcyBpbnQsICJtYWluKCkgc2hvdWxkIHJldHVybiBhbiBpbnRlZ2VyIgoKICAgICAgICBmaWx0ZXJfd2FybmluZ3MoImVycm9yIiwgY2F0ZWdvcnk9V2FybmluZykKICAgICAgICBzeXMuZXhpdChtYWluKCkpCgpUaGlzIGlzIGEgcHJldHR5IGVhc3kgdGhpbmcsIHZlcnkgc3R1cGlkIGFuZCBub3QgZm9vbC1wcm9vZiBidXQgZWgsCnRoaXMgZ2VuZXJhdG9yIHNob3VsZCB3b3JrIG91dCBvZiB0aGUgYm94IHdpdGggdGhlIHNvbmcgbmFtZSBmb3JtYXQKYmVpbmcgYGFydGlzdCBuYW1lIC0gc29uZ2AsIGlmIGl0J3Mgbm90IG1ha2Ugc3VyZSB0byBhZGQgYSBsb3dlcmNhc2UKZW50cnkgdG8gYFNPTkdfVE9fQVJUSVNUYCwgbGlrZSBpZiB5b3VyIHNvbmcgd2FzIG5hbWVkIGxpa2UgYG5hTWUgLSBBcnRpc3RgCnlvdSB3aWxsIGhhdmUgdG8gYWRkIHRoaXMgZW50cnk6CgogICAgIm5hbWUgLSBhcnRpc3QiOiAiYXJ0aXN0IiwKClRoZXNlIHNldHRpbmdzIHRoYXQgeW91IHNlZSBpbiBteSBzY3JpcHQgYXJlIGZvciBteSBwbGF5bGlzdAoKIyMgMi4yIERlcGVuZGVuY2llcwoKSGVyZSdzIHRoZSBweXRob24gZGVwZW5kZW5jaWVzIHlvdSBuZWVkOgoKICAgIGNzcy1odG1sLWpzLW1pbmlmeQogICAgdWpzb24KCllvdSBuZWVkIHRvIGluc3RhbGwgdGhlbSB1c2luZwoKICAgIHB5dGhvbjMgLW0gcGlwIGluc3RhbGwgLS11c2VyIGNzcy1odG1sLWpzLW1pbmlmeSB1anNvbgoKIyMgMi4zIFRoZSBkYXRhIHJlcG9ydAoKT25jZSB5b3UgaGF2ZSBlbm91Z2ggZGF0YSB0byBtYWtlIGEgcmVwb3J0IGZyb20sIHJ1biB0aGUgc2NyaXB0LApqdXN0CgogICAgcHl0aG9uMyBtYWluLnB5CgpPciB3aGF0ZXZlciwgaXQnbGwgZ2VuZXJhdGUgYGluZGV4Lmh0bWxgIGZpbGUgYW5kIGl0J2xsIGluY2x1ZGUgYWxsIG9mCnlvdXIgcmVwb3J0IGRhdGEsIHlvdSBjYW4gYWxzbyBzdHlsZSBpdCB1c2luZyB0aGUgYHN0eWxlc2AgdmFyaWFibGUKCiMjIDMuIEZpbmlzaGluZwoKVGhhdCdzIGFsbCwgZW5qb3kgeW91ciBzdGF0aXN0aWNzLCBhbmQgYXMgb2Ygbm93IEkgc2hhbGwgZ28gY29sbGVjdCBtb3JlIGRhdGEsCkkgYWxyZWFkeSBoYXZlIDE4S0Igb2YgaXQhCgpQbHVzLCBJJ2xsIGFkbWl0IGl0LCBtb3N0IG9mIHRoaXMgY29kZSBpcyAqKmdhcmJhZ2UsIGNvbXBsZXRlIGRvZyBzaGl0KiosCkkganVzdCB3YW50ZWQgdG8gbWFrZSBpdCB3b3JrIGFuZCBJIGRpZCwgaXQncyByZWFkYWJsZSBlbm91Z2gKZm9yIGp1c3QgYSBtZXNzeSBzY3JpcHQgSSdtIG5vdCBldmVuIHJlbGVhc2luZyBhcyBhbnl0aGluZyBsZWdpdAo=", "version": 1, "time": 1664422575.771071, "keywords": "song report song-report ststistics mpv mpv.io player music listening data html css python python3 generator",