分身AI.com × Soul Work(自己認知ワーク)
Session 1: 自分の原点 (Origins)
今日は「なぜ今の仕事をしているか」を一緒に言葉にします。正解はありません。思い出せる範囲で、気楽に話してください。
全10問 / 所要時間: 約10-15分
Q1 / 10
10%
なぜそう思う?(任意)
スキップしました。後からいつでも答え直せます
折り返し地点です
あと5問で原点の輪郭が完成します。
ここまでの回答はすべて自動保存されています。
Session 1 完了!
0
回答数
0
スキップ数
全体進捗(全48問)
0%
原点の輪郭が見えてきました。次回は、あなたの判断軸(価値観)を言語化します。
このブラウザに自動保存済みです。次回は同じ端末から続きを再開できます。
CiAgICAoZnVuY3Rpb24gKCkgewogICAgICB2YXIgcWZzU2NyaXB0ID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdDsKICAgICAgdmFyIHFmc0NvbnRhaW5lciA9IHFmc1NjcmlwdCA/IHFmc1NjcmlwdC5jbG9zZXN0KCcucWYtc291bC1jb250YWluZXInKSA6IG51bGw7CiAgICAgIGlmICghcWZzQ29udGFpbmVyKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICB2YXIgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTsKCiAgICAgIGZ1bmN0aW9uIHFmT25lKHNlbGVjdG9yKSB7CiAgICAgICAgcmV0dXJuIHFmc0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsKICAgICAgfQoKICAgICAgZnVuY3Rpb24gcWZBbGwoc2VsZWN0b3IpIHsKICAgICAgICByZXR1cm4gcWZzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOwogICAgICB9CgogICAgICAvKiDilIDilIAgUXVlc3Rpb25zIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoKICAgICAgdmFyIFFGX1NPVUxfUVVFU1RJT05TID0gWwogICAgICAgIHsgaWQ6ICdBMScsIHR5cGU6ICdzaG9ydF90ZXh0JywgcXVlc3Rpb246ICfjgYLjgarjgZ/jgYzku4rjga7kuovmpa3jgpLlp4vjgoHjgZ/jgIHjgYTjgaHjgbDjgpPmnIDliJ3jga7jgY3jgaPjgYvjgZHjga/kvZXjgafjgZnjgYvvvJ8nLCBwbGFjZWhvbGRlcjogJ+S+izog5YmN6IG344Gn5oSf44GY44Gf6ZmQ55WM44CB44GC44KL6aGn5a6i44Go44Gu5Ye65Lya44GELi4uJywgYmJTZWN0aW9uOiAnU09VTCcsIGJiRmllbGQ6ICflibXmpa3jga7ljp/kvZPpqJMnIH0sCiAgICAgICAgeyBpZDogJ0EyJywgdHlwZTogJ2xvbmdfdGV4dCcsIHF1ZXN0aW9uOiAn54us56uL5YmN44Gr44CM44GT44Gu44G+44G+44Gn44Gv6YGV44GG44CN44Go5oSf44GY44Gf44Gu44Gv44Gp44KT44Gq5aC06Z2i44Gn44GX44Gf44GL77yfJywgcGxhY2Vob2xkZXI6ICfjgafjgY3jgovjgaDjgZHlhbfkvZPnmoTjgavjgIHjgZ3jga7loLTpnaLjga7nirbms4HjgpLmlZnjgYjjgabjgY/jgaDjgZXjgYQuLi4nLCBiYlNlY3Rpb246ICdTT1VMJywgYmJGaWVsZDogJ+WJtealreOBruWOn+S9k+mokycgfSwKICAgICAgICB7IGlkOiAnQTMnLCB0eXBlOiAnY2hvaWNlJywgcXVlc3Rpb246ICfjgIzjgbLjgajjgorjgafjgoTjgovjgI3jgajohbnjgpLmsbrjgoHjgZ/nnqzplpPjgavov5HjgYTjgoLjga7jga/jganjgozjgafjgZnjgYvvvJ8nLCBvcHRpb25zOiBbJ+mhp+WuouOBi+OCieebtOaOpeaEn+isneOBleOCjOOBn+aZgicsICfntYTnuZTjga7liLbntITjgavpmZDnlYzjgpLmhJ/jgZjjgZ/mmYInLCAn5Y+O5YWl44KI44KK6Ieq55Sx44KS5YSq5YWI44GX44Gf5pmCJywgJ+S7luOBq+OChOOCi+S6uuOBjOOBhOOBquOBhOOBqOaEn+OBmOOBn+aZgiddLCBiYlNlY3Rpb246ICdTT1VMJywgYmJGaWVsZDogJ+WJtealreOBruWOn+S9k+mokycgfSwKICAgICAgICB7IGlkOiAnQTQnLCB0eXBlOiAnc2hvcnRfdGV4dCcsIHF1ZXN0aW9uOiAn5LqL5qWt5Yid5pyf44Gr44CB57W25a++44Gr5aSx44GE44Gf44GP44Gq44GL44Gj44Gf44KC44Gu44Gv5L2V44Gn44GX44Gf44GL77yfJywgcGxhY2Vob2xkZXI6ICfkvos6IOWutuaXj+OBqOOBruaZgumWk+OAgeiHquWIhuOBruS/oeW/teOAgemhp+WuouOBqOOBruS/oemgvC4uLicsIGJiU2VjdGlvbjogJ1NPVUwnLCBiYkZpZWxkOiAn5raZ44Gu6KiY5oa2JyB9LAogICAgICAgIHsgaWQ6ICdBNScsIHR5cGU6ICdsb25nX3RleHQnLCBxdWVzdGlvbjogJ+S7leS6i+S4reOBq+OAjOeUn+OBjeOBpuOCi+aEn+OBmOOAjeOBjOacgOOCguW8t+OBhOOBruOBr+OBqeOCk+OBquaZguOBp+OBmeOBi++8nycsIHBsYWNlaG9sZGVyOiAn44Gp44KT44Gq556s6ZaT44Gr5LiA55Wq5YWF5a6f5oSf44KS5oSf44GY44G+44GZ44GLLi4uJywgYmJTZWN0aW9uOiAnU09VTCcsIGJiRmllbGQ6ICfmtpnjga7oqJjmhrYnIH0sCiAgICAgICAgeyBpZDogJ0E2JywgdHlwZTogJ2xvbmdfdGV4dCcsIHF1ZXN0aW9uOiAn44GT44KM44G+44Gn44Gn5LiA55Wq6KqH44KJ44GX44GL44Gj44Gf5LuV5LqL5L2T6aiT44KSMeOBpOaVmeOBiOOBpuOBj+OBoOOBleOBhOOAgicsIHBsYWNlaG9sZGVyOiAn44GE44Gk44CB44Gp44GT44Gn44CB6Kqw44Go44CB5L2V44KS44GX44Gf5L2T6aiT44Gn44GZ44GLLi4uJywgYmJTZWN0aW9uOiAnU09VTCcsIGJiRmllbGQ6ICfmtpnjga7oqJjmhrYnIH0sCiAgICAgICAgeyBpZDogJ0E3JywgdHlwZTogJ2xvbmdfdGV4dCcsIHF1ZXN0aW9uOiAn6Ium44GX44GL44Gj44Gf44GR44KM44Gp44CB5LuK5oCd44GI44Gw6Lui5qmf44Gg44Gj44Gf5Ye65p2l5LqL44Gv44GC44KK44G+44GZ44GL77yfJywgcGxhY2Vob2xkZXI6ICfjgZ3jga7lh7rmnaXkuovjgajjgIHjgZ3jgozjgYzjganjgYbou6LmqZ/jgavjgarjgaPjgZ/jgYsuLi4nLCBiYlNlY3Rpb246ICdTT1VMJywgYmJGaWVsZDogJ+a2meOBruiomOaGticgfSwKICAgICAgICB7IGlkOiAnQTgnLCB0eXBlOiAnc2hvcnRfdGV4dCcsIHF1ZXN0aW9uOiAn5a2Q44Gp44KC44Gu6aCD44GL44KJ57mw44KK6L+U44GX6KSS44KB44KJ44KM44Gm44GN44Gf6LOH6LOq44Gv5L2V44Gn44GZ44GL77yfJywgcGxhY2Vob2xkZXI6ICfkvos6IOecn+mdouebruOAgemdouWAkuimi+OBjOOBhOOBhOOAgeeZuuaDs+WKm+OBjOOBguOCiy4uLicsIGJiU2VjdGlvbjogJ1NPVUwnLCBiYkZpZWxkOiAn44Kt44Oj44Op44Kv44K/44O8JyB9LAogICAgICAgIHsgaWQ6ICdBOScsIHR5cGU6ICdzaG9ydF90ZXh0JywgcXVlc3Rpb246ICcz5bm05YmN44Gu6Ieq5YiG44Gr5LiA6KiA44Gg44GR5Lyd44GI44KL44Gq44KJ5L2V44Go6KiA44GE44G+44GZ44GL77yfJywgcGxhY2Vob2xkZXI6ICfkuIDoqIDjgacuLi4nLCBiYlNlY3Rpb246ICdTT1VMJywgYmJGaWVsZDogJ+OCreODo+ODqeOCr+OCv+ODvCcgfSwKICAgICAgICB7IGlkOiAnQTEwJywgdHlwZTogJ3Nob3J0X3RleHQnLCBxdWVzdGlvbjogJ+OBguOBquOBn+OBruWOn+eCueOCueODiOODvOODquODvOOCkuS4gOaWh+OBp+ihqOOBmeOBqO+8nycsIHBsYWNlaG9sZGVyOiAn5L6LOiDjgIfjgIfjgaDjgaPjgZ/jgYvjgonjgZPjgZ3jgIHku4rjga7ilrPilrPjgYzjgYLjgosnLCBiYlNlY3Rpb246ICdTT1VMJywgYmJGaWVsZDogJ+OCreODo+ODqeOCr+OCv+ODvCcgfQogICAgICBdOwoKICAgICAgdmFyIEdST1dUSF9TVEFHRVMgPSBbCiAgICAgICAgeyBtaW46IDAsIG1heDogMTksIG5hbWU6ICfjgZ/jgb7jgZQnLCBlbW9qaTogJ1x1RDgzRVx1REQ1QScgfSwKICAgICAgICB7IG1pbjogMjAsIG1heDogMzksIG5hbWU6ICfjgbLjgbPlibLjgownLCBlbW9qaTogJ1x1RDgzRFx1REMyMycgfSwKICAgICAgICB7IG1pbjogNDAsIG1heDogNTksIG5hbWU6ICfjgbXljJYnLCBlbW9qaTogJ1x1RDgzRFx1REMyNScgfSwKICAgICAgICB7IG1pbjogNjAsIG1heDogNzksIG5hbWU6ICfjgojjgaHjgojjgaHliIbouqtBSScsIGVtb2ppOiAnXHVEODNFXHVERDE2JyB9LAogICAgICAgIHsgbWluOiA4MCwgbWF4OiAxMDAsIG5hbWU6ICfnm7jmo5Ljg6Ljg7zjg4knLCBlbW9qaTogJ1x1RDgzRVx1RERCRScgfQogICAgICBdOwoKICAgICAgdmFyIFNIQUxMT1dfUEFUVEVSTlMgPSBbCiAgICAgICAgL+OBiuWuouanmOOBruOBn+OCgS8sCiAgICAgICAgL+S4geWvp+OBqy8sCiAgICAgICAgL+OBjeOBoeOCk+OBqC8sCiAgICAgICAgL+aYlOOBi+OCiS8sCiAgICAgICAgL+iHqueEtuOBqC8sCiAgICAgICAgL+aZrumAmuOBqy8sCiAgICAgICAgL+eJueOBq+OBquOBhC8sCiAgICAgICAgL+OBquOCk+OBqOOBquOBjy8KICAgICAgXTsKCiAgICAgIHZhciBGSVZFX1NFTlNFX0hJTlQgPSAn44Gd44Gu5pmC44CB5L2V44GM6KaL44GI44Gm44CB5L2V44GM6IGe44GT44GI44Gm44CB44Gp44KT44Gq5YyC44GE44GM44GX44G+44GX44Gf44GL77yfJzsKCiAgICAgIC8qIOKUgOKUgCBET00gcmVmcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KCiAgICAgIHZhciBxZnNTY3JlZW5zID0gewogICAgICAgIHdlbGNvbWU6IHFmT25lKCdbZGF0YS1xZi1zb3VsLXNjcmVlbj0id2VsY29tZSJdJyksCiAgICAgICAgcXVpejogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtc2NyZWVuPSJxdWl6Il0nKSwKICAgICAgICBtaWRwb2ludDogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtc2NyZWVuPSJtaWRwb2ludCJdJyksCiAgICAgICAgY29tcGxldGU6IHFmT25lKCdbZGF0YS1xZi1zb3VsLXNjcmVlbj0iY29tcGxldGUiXScpCiAgICAgIH07CgogICAgICB2YXIgcWZzVUkgPSB7CiAgICAgICAgc3RhcnRCdXR0b246IHFmT25lKCdbZGF0YS1xZi1zb3VsLWFjdGlvbj0ic3RhcnQiXScpLAogICAgICAgIGNvdW50ZXI6IHFmT25lKCdbZGF0YS1xZi1zb3VsLWNvdW50ZXJdJyksCiAgICAgICAgcGVyY2VudDogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtcGVyY2VudF0nKSwKICAgICAgICBwcm9ncmVzc0JhcjogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtcHJvZ3Jlc3NdJyksCiAgICAgICAgcXVlc3Rpb25Cb3g6IHFmT25lKCdbZGF0YS1xZi1zb3VsLXF1ZXN0aW9uLWJveF0nKSwKICAgICAgICBxdWVzdGlvbkxhYmVsOiBxZk9uZSgnW2RhdGEtcWYtc291bC1xdWVzdGlvbi1sYWJlbF0nKSwKICAgICAgICBxdWVzdGlvblRleHQ6IHFmT25lKCdbZGF0YS1xZi1zb3VsLXF1ZXN0aW9uLXRleHRdJyksCiAgICAgICAgaW5wdXRBcmVhOiBxZk9uZSgnW2RhdGEtcWYtc291bC1pbnB1dC1hcmVhXScpLAogICAgICAgIHJlamVjdGlvbjogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtcmVqZWN0aW9uXScpLAogICAgICAgIHJlamVjdGlvbk1zZzogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtcmVqZWN0aW9uLW1zZ10nKSwKICAgICAgICByZWplY3Rpb25IaW50OiBxZk9uZSgnW2RhdGEtcWYtc291bC1oaW50XScpLAogICAgICAgIGZvbGxvd3VwOiBxZk9uZSgnW2RhdGEtcWYtc291bC1mb2xsb3d1cF0nKSwKICAgICAgICBmb2xsb3d1cElucHV0OiBxZk9uZSgnW2RhdGEtcWYtc291bC1mb2xsb3d1cC1pbnB1dF0nKSwKICAgICAgICBuZXh0QnRuOiBxZk9uZSgnW2RhdGEtcWYtc291bC1hY3Rpb249Im5leHQiXScpLAogICAgICAgIHNraXBCdG46IHFmT25lKCdbZGF0YS1xZi1zb3VsLWFjdGlvbj0ic2tpcCJdJyksCiAgICAgICAgc2tpcE1zZzogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtc2tpcC1tc2ddJyksCiAgICAgICAgY29udGludWVCdG46IHFmT25lKCdbZGF0YS1xZi1zb3VsLWFjdGlvbj0iY29udGludWUiXScpLAogICAgICAgIGVuZEJ0bjogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtYWN0aW9uPSJlbmQiXScpLAogICAgICAgIHNhdmVDb25maXJtOiBxZk9uZSgnW2RhdGEtcWYtc291bC1zYXZlLWNvbmZpcm1dJyksCiAgICAgICAgZ3Jvd3RoQmFkZ2U6IHFmT25lKCdbZGF0YS1xZi1zb3VsLWdyb3d0aC1iYWRnZV0nKSwKICAgICAgICBncm93dGhFbW9qaTogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtZ3Jvd3RoLWVtb2ppXScpLAogICAgICAgIGdyb3d0aE5hbWU6IHFmT25lKCdbZGF0YS1xZi1zb3VsLWdyb3d0aC1uYW1lXScpLAogICAgICAgIG1pZEVtb2ppOiBxZk9uZSgnW2RhdGEtcWYtc291bC1taWQtZW1vamldJyksCiAgICAgICAgbWlkR3Jvd3RoRW1vamk6IHFmT25lKCdbZGF0YS1xZi1zb3VsLW1pZC1ncm93dGgtZW1vamldJyksCiAgICAgICAgbWlkR3Jvd3RoTmFtZTogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtbWlkLWdyb3d0aC1uYW1lXScpLAogICAgICAgIGNvbXBsZXRlRW1vamk6IHFmT25lKCdbZGF0YS1xZi1zb3VsLWNvbXBsZXRlLWVtb2ppXScpLAogICAgICAgIGNvbXBsZXRlR3Jvd3RoRW1vamk6IHFmT25lKCdbZGF0YS1xZi1zb3VsLWNvbXBsZXRlLWdyb3d0aC1lbW9qaV0nKSwKICAgICAgICBjb21wbGV0ZUdyb3d0aE5hbWU6IHFmT25lKCdbZGF0YS1xZi1zb3VsLWNvbXBsZXRlLWdyb3d0aC1uYW1lXScpLAogICAgICAgIHN0YXRBbnN3ZXJlZDogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtc3RhdC1hbnN3ZXJlZF0nKSwKICAgICAgICBzdGF0U2tpcHBlZDogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtc3RhdC1za2lwcGVkXScpLAogICAgICAgIG92ZXJhbGxQZXJjZW50OiBxZk9uZSgnW2RhdGEtcWYtc291bC1vdmVyYWxsLXBlcmNlbnRdJyksCiAgICAgICAgb3ZlcmFsbEJhcjogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtb3ZlcmFsbC1iYXJdJyksCiAgICAgICAgY29tcGxldGVNc2c6IHFmT25lKCdbZGF0YS1xZi1zb3VsLWNvbXBsZXRlLW1zZ10nKSwKICAgICAgICByZW1haW5pbmdNc2c6IHFmT25lKCdbZGF0YS1xZi1zb3VsLXJlbWFpbmluZy1tc2ddJykKICAgICAgfTsKCiAgICAgIC8qIOKUgOKUgCBTdGF0ZSAmIFN0b3JhZ2Ug4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCgogICAgICB2YXIgVE9UQUxfUVVFU1RJT05TID0gNDg7CiAgICAgIHZhciBTRVNTSU9OX1FVRVNUSU9OUyA9IDEwOwogICAgICB2YXIgdXNlcklkID0gdXJsUGFyYW1zLmdldCgndWlkJykgfHwgJyc7CiAgICAgIGlmICghdXNlcklkKSB7IHRyeSB7IHVzZXJJZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdxZlNvdWxXb3JrOmN1cnJlbnRVc2VyJykgfHwgJyc7IH0gY2F0Y2goaWcpIHt9IH0KICAgICAgaWYgKCF1c2VySWQpIHsKICAgICAgICB1c2VySWQgPSAndV8nICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgMTApICsgRGF0ZS5ub3coKS50b1N0cmluZygzNik7CiAgICAgIH0KICAgICAgdHJ5IHsgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3FmU291bFdvcms6Y3VycmVudFVzZXInLCB1c2VySWQpOyB9IGNhdGNoKGlnKSB7fQoKICAgICAgdmFyIFNUT1JBR0VfS0VZID0gJ3FmU291bFdvcms6djE6JyArIHVzZXJJZDsKCiAgICAgIGZ1bmN0aW9uIGxvYWRTdG9yYWdlKCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICB2YXIgcmF3ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oU1RPUkFHRV9LRVkpOwogICAgICAgICAgaWYgKHJhdykgewogICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShyYXcpOwogICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIC8qIGlnbm9yZSAqLwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQoKICAgICAgZnVuY3Rpb24gY3JlYXRlRGVmYXVsdFN0b3JhZ2UoKSB7CiAgICAgICAgdmFyIGF4aXNTY29yZXMgPSB7fTsKICAgICAgICB2YXIgYXhpc0tleXMgPSBbJ2hvbGQnLCAnZGVsZWcnLCAnYWknLCAnYmxpbmQnXTsKICAgICAgICB2YXIgaTsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXhpc0tleXMubGVuZ3RoOyBpICs9IDEpIHsKICAgICAgICAgIHZhciB2ID0gdXJsUGFyYW1zLmdldChheGlzS2V5c1tpXSk7CiAgICAgICAgICBpZiAodikgewogICAgICAgICAgICBheGlzU2NvcmVzW2F4aXNLZXlzW2ldXSA9IHBhcnNlSW50KHYsIDEwKSB8fCAwOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHZlcnNpb246ICcxLjAuMCcsCiAgICAgICAgICB1c2VySWQ6IHVzZXJJZCwKICAgICAgICAgIHF1aXpUeXBlOiB1cmxQYXJhbXMuZ2V0KCd0eXBlJykgfHwgJ3Vua25vd24nLAogICAgICAgICAgYXhpc1Njb3JlczogYXhpc1Njb3JlcywKICAgICAgICAgIHByb2dyZXNzOiB7CiAgICAgICAgICAgIGN1cnJlbnRTZXNzaW9uOiAxLAogICAgICAgICAgICBjb21wbGV0ZWRTZXNzaW9uczogW10sCiAgICAgICAgICAgIGFuc3dlcmVkQ291bnQ6IDAsCiAgICAgICAgICAgIHRvdGFsQ291bnQ6IFRPVEFMX1FVRVNUSU9OUwogICAgICAgICAgfSwKICAgICAgICAgIGFuc3dlcnM6IHt9CiAgICAgICAgfTsKICAgICAgfQoKICAgICAgZnVuY3Rpb24gc2F2ZVN0b3JhZ2UoZGF0YSkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIC8qIGlnbm9yZSAqLwogICAgICAgIH0KICAgICAgfQoKICAgICAgdmFyIHN0b3JhZ2VEYXRhID0gbG9hZFN0b3JhZ2UoKSB8fCBjcmVhdGVEZWZhdWx0U3RvcmFnZSgpOwoKICAgICAgLyog4pSA4pSAIEdyb3d0aCBTdGFnZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KCiAgICAgIGZ1bmN0aW9uIGdldEdyb3d0aFN0YWdlKGFuc3dlcmVkQ291bnQpIHsKICAgICAgICB2YXIgcGN0ID0gTWF0aC5yb3VuZCgoYW5zd2VyZWRDb3VudCAvIFRPVEFMX1FVRVNUSU9OUykgKiAxMDApOwogICAgICAgIHZhciBpOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBHUk9XVEhfU1RBR0VTLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgICBpZiAocGN0ID49IEdST1dUSF9TVEFHRVNbaV0ubWluICYmIHBjdCA8PSBHUk9XVEhfU1RBR0VTW2ldLm1heCkgewogICAgICAgICAgICByZXR1cm4gR1JPV1RIX1NUQUdFU1tpXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIEdST1dUSF9TVEFHRVNbMF07CiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIHVwZGF0ZUdyb3d0aERpc3BsYXkoKSB7CiAgICAgICAgdmFyIHN0YWdlID0gZ2V0R3Jvd3RoU3RhZ2Uoc3RvcmFnZURhdGEucHJvZ3Jlc3MuYW5zd2VyZWRDb3VudCk7CiAgICAgICAgaWYgKHFmc1VJLmdyb3d0aEVtb2ppKSB7CiAgICAgICAgICBxZnNVSS5ncm93dGhFbW9qaS50ZXh0Q29udGVudCA9IHN0YWdlLmVtb2ppOwogICAgICAgIH0KICAgICAgICBpZiAocWZzVUkuZ3Jvd3RoTmFtZSkgewogICAgICAgICAgcWZzVUkuZ3Jvd3RoTmFtZS50ZXh0Q29udGVudCA9IHN0YWdlLm5hbWU7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKiDilIDilIAgUXVpeiBTdGF0ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KCiAgICAgIHZhciBxZnNTdGF0ZSA9IHsKICAgICAgICBpbmRleDogMCwKICAgICAgICByZWplY3Rpb25Db3VudDogMCwKICAgICAgICBzZWxlY3RlZENob2ljZTogbnVsbCwKICAgICAgICBzaG93aW5nTWlkcG9pbnQ6IGZhbHNlCiAgICAgIH07CgogICAgICAvKiDilIDilIAgU2NyZWVuIE5hdmlnYXRpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCgogICAgICBmdW5jdGlvbiBxZnNTaG93U2NyZWVuKG5hbWUpIHsKICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHFmc1NjcmVlbnMpOwogICAgICAgIHZhciBpOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgICBxZnNTY3JlZW5zW2tleXNbaV1dLmNsYXNzTGlzdC5yZW1vdmUoJ3FmLXNvdWwtYWN0aXZlJyk7CiAgICAgICAgfQogICAgICAgIHFmc1NjcmVlbnNbbmFtZV0uY2xhc3NMaXN0LmFkZCgncWYtc291bC1hY3RpdmUnKTsKICAgICAgfQoKICAgICAgLyog4pSA4pSAIFNoYWxsb3cgRGV0ZWN0aW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoKICAgICAgZnVuY3Rpb24gaXNTaGFsbG93KHRleHQpIHsKICAgICAgICBpZiAoIXRleHQgfHwgdGV4dC5sZW5ndGggPCAyMCkgewogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHZhciBpOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBTSEFMTE9XX1BBVFRFUk5TLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgICBpZiAoU0hBTExPV19QQVRURVJOU1tpXS50ZXN0KHRleHQpKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KCiAgICAgIC8qIOKUgOKUgCBQcm9ncmVzcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KCiAgICAgIGZ1bmN0aW9uIHVwZGF0ZVByb2dyZXNzKCkgewogICAgICAgIHZhciBjdXJyZW50ID0gcWZzU3RhdGUuaW5kZXggKyAxOwogICAgICAgIHZhciBwY3QgPSBNYXRoLnJvdW5kKChjdXJyZW50IC8gU0VTU0lPTl9RVUVTVElPTlMpICogMTAwKTsKICAgICAgICBxZnNVSS5jb3VudGVyLnRleHRDb250ZW50ID0gJ1EnICsgY3VycmVudCArICcgLyAnICsgU0VTU0lPTl9RVUVTVElPTlM7CiAgICAgICAgcWZzVUkucGVyY2VudC50ZXh0Q29udGVudCA9IHBjdCArICclJzsKICAgICAgICBxZnNVSS5wcm9ncmVzc0Jhci5zdHlsZS53aWR0aCA9IHBjdCArICclJzsKICAgICAgfQoKICAgICAgLyog4pSA4pSAIFJlbmRlciBRdWVzdGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KCiAgICAgIGZ1bmN0aW9uIHJlbmRlclF1ZXN0aW9uKCkgewogICAgICAgIHZhciBpdGVtID0gUUZfU09VTF9RVUVTVElPTlNbcWZzU3RhdGUuaW5kZXhdOwogICAgICAgIHFmc1N0YXRlLnJlamVjdGlvbkNvdW50ID0gMDsKICAgICAgICBxZnNTdGF0ZS5zZWxlY3RlZENob2ljZSA9IG51bGw7CgogICAgICAgIHVwZGF0ZVByb2dyZXNzKCk7CgogICAgICAgIHFmc1VJLnF1ZXN0aW9uTGFiZWwudGV4dENvbnRlbnQgPSBpdGVtLmJiU2VjdGlvbiArICcgPiAnICsgaXRlbS5iYkZpZWxkOwogICAgICAgIHFmc1VJLnF1ZXN0aW9uVGV4dC50ZXh0Q29udGVudCA9IGl0ZW0ucXVlc3Rpb247CiAgICAgICAgcWZzVUkuaW5wdXRBcmVhLmlubmVySFRNTCA9ICcnOwogICAgICAgIHFmc1VJLnJlamVjdGlvbi5jbGFzc0xpc3QucmVtb3ZlKCdxZi1zb3VsLXJlamVjdGlvbi12aXNpYmxlJyk7CiAgICAgICAgcWZzVUkucmVqZWN0aW9uTXNnLnRleHRDb250ZW50ID0gJyc7CiAgICAgICAgcWZzVUkucmVqZWN0aW9uSGludC50ZXh0Q29udGVudCA9ICcnOwogICAgICAgIHFmc1VJLmZvbGxvd3VwSW5wdXQudmFsdWUgPSAnJzsKICAgICAgICBxZnNVSS5za2lwQnRuLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgICAgcWZzVUkuc2tpcE1zZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgIHFmc1VJLm5leHRCdG4uc3R5bGUuZGlzcGxheSA9ICcnOwoKICAgICAgICAvKiBSZXN0b3JlIGV4aXN0aW5nIGFuc3dlciBpZiBhbnkgKi8KICAgICAgICB2YXIgZXhpc3RpbmcgPSBzdG9yYWdlRGF0YS5hbnN3ZXJzW2l0ZW0uaWRdOwoKICAgICAgICBpZiAoaXRlbS50eXBlID09PSAnY2hvaWNlJykgewogICAgICAgICAgcWZzVUkuZm9sbG93dXAuc3R5bGUuZGlzcGxheSA9ICcnOwogICAgICAgICAgdmFyIGk7CiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaXRlbS5vcHRpb25zLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgICAgIChmdW5jdGlvbiAob3B0aW9uVGV4dCwgaWR4KSB7CiAgICAgICAgICAgICAgdmFyIGJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwogICAgICAgICAgICAgIGJ0bi50eXBlID0gJ2J1dHRvbic7CiAgICAgICAgICAgICAgYnRuLmNsYXNzTmFtZSA9ICdxZi1zb3VsLWJ0biBxZi1zb3VsLWJ0bi1vcHRpb24nOwogICAgICAgICAgICAgIGJ0bi50ZXh0Q29udGVudCA9IG9wdGlvblRleHQ7CiAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nICYmIGV4aXN0aW5nLnZhbHVlID09PSBvcHRpb25UZXh0KSB7CiAgICAgICAgICAgICAgICBidG4uY2xhc3NMaXN0LmFkZCgncWYtc291bC1idG4tb3B0aW9uLXNlbGVjdGVkJyk7CiAgICAgICAgICAgICAgICBxZnNTdGF0ZS5zZWxlY3RlZENob2ljZSA9IG9wdGlvblRleHQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHZhciBhbGxPcHRzID0gcWZzVUkuaW5wdXRBcmVhLnF1ZXJ5U2VsZWN0b3JBbGwoJy5xZi1zb3VsLWJ0bi1vcHRpb24nKTsKICAgICAgICAgICAgICAgIHZhciBqOwogICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGFsbE9wdHMubGVuZ3RoOyBqICs9IDEpIHsKICAgICAgICAgICAgICAgICAgYWxsT3B0c1tqXS5jbGFzc0xpc3QucmVtb3ZlKCdxZi1zb3VsLWJ0bi1vcHRpb24tc2VsZWN0ZWQnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJ0bi5jbGFzc0xpc3QuYWRkKCdxZi1zb3VsLWJ0bi1vcHRpb24tc2VsZWN0ZWQnKTsKICAgICAgICAgICAgICAgIHFmc1N0YXRlLnNlbGVjdGVkQ2hvaWNlID0gb3B0aW9uVGV4dDsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBxZnNVSS5pbnB1dEFyZWEuYXBwZW5kQ2hpbGQoYnRuKTsKICAgICAgICAgICAgfSkoaXRlbS5vcHRpb25zW2ldLCBpKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChleGlzdGluZyAmJiBleGlzdGluZy53aHkpIHsKICAgICAgICAgICAgcWZzVUkuZm9sbG93dXBJbnB1dC52YWx1ZSA9IGV4aXN0aW5nLndoeTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIC8qIHNob3J0X3RleHQgb3IgbG9uZ190ZXh0ICovCiAgICAgICAgcWZzVUkuZm9sbG93dXAuc3R5bGUuZGlzcGxheSA9ICcnOwogICAgICAgIHZhciBtYXhMZW4gPSBpdGVtLnR5cGUgPT09ICdzaG9ydF90ZXh0JyA/IDE2MCA6IDEwMDA7CgogICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdzaG9ydF90ZXh0JykgewogICAgICAgICAgdmFyIGlucCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CiAgICAgICAgICBpbnAudHlwZSA9ICd0ZXh0JzsKICAgICAgICAgIGlucC5jbGFzc05hbWUgPSAncWYtc291bC1pbnB1dCc7CiAgICAgICAgICBpbnAucGxhY2Vob2xkZXIgPSBpdGVtLnBsYWNlaG9sZGVyIHx8ICcnOwogICAgICAgICAgaW5wLm1heExlbmd0aCA9IG1heExlbjsKICAgICAgICAgIGlucC5zZXRBdHRyaWJ1dGUoJ2RhdGEtcWYtc291bC1tYWluLWlucHV0JywgJycpOwogICAgICAgICAgaWYgKGV4aXN0aW5nICYmIGV4aXN0aW5nLnZhbHVlKSB7CiAgICAgICAgICAgIGlucC52YWx1ZSA9IGV4aXN0aW5nLnZhbHVlOwogICAgICAgICAgfQogICAgICAgICAgcWZzVUkuaW5wdXRBcmVhLmFwcGVuZENoaWxkKGlucCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHZhciB0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7CiAgICAgICAgICB0YS5jbGFzc05hbWUgPSAncWYtc291bC10ZXh0YXJlYSc7CiAgICAgICAgICB0YS5wbGFjZWhvbGRlciA9IGl0ZW0ucGxhY2Vob2xkZXIgfHwgJyc7CiAgICAgICAgICB0YS5tYXhMZW5ndGggPSBtYXhMZW47CiAgICAgICAgICB0YS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcWYtc291bC1tYWluLWlucHV0JywgJycpOwogICAgICAgICAgaWYgKGV4aXN0aW5nICYmIGV4aXN0aW5nLnZhbHVlKSB7CiAgICAgICAgICAgIHRhLnZhbHVlID0gZXhpc3RpbmcudmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgICBxZnNVSS5pbnB1dEFyZWEuYXBwZW5kQ2hpbGQodGEpOwoKICAgICAgICAgIHZhciBjYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgICAgY2MuY2xhc3NOYW1lID0gJ3FmLXNvdWwtY2hhci1jb3VudCc7CiAgICAgICAgICBjYy5zZXRBdHRyaWJ1dGUoJ2RhdGEtcWYtc291bC1jaGFyLWNvdW50JywgJycpOwogICAgICAgICAgY2MudGV4dENvbnRlbnQgPSAoZXhpc3RpbmcgJiYgZXhpc3RpbmcudmFsdWUgPyBleGlzdGluZy52YWx1ZS5sZW5ndGggOiAwKSArICcgLyAnICsgbWF4TGVuOwogICAgICAgICAgcWZzVUkuaW5wdXRBcmVhLmFwcGVuZENoaWxkKGNjKTsKCiAgICAgICAgICB0YS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGxlbiA9IHRhLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgY2MudGV4dENvbnRlbnQgPSBsZW4gKyAnIC8gJyArIG1heExlbjsKICAgICAgICAgICAgaWYgKGxlbiA+IG1heExlbiAqIDAuOSkgewogICAgICAgICAgICAgIGNjLmNsYXNzTGlzdC5hZGQoJ3FmLXNvdWwtY2hhci13YXJuJyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgY2MuY2xhc3NMaXN0LnJlbW92ZSgncWYtc291bC1jaGFyLXdhcm4nKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoZXhpc3RpbmcgJiYgZXhpc3Rpbmcud2h5KSB7CiAgICAgICAgICBxZnNVSS5mb2xsb3d1cElucHV0LnZhbHVlID0gZXhpc3Rpbmcud2h5OwogICAgICAgIH0KCiAgICAgICAgLyogUmVzdG9yZSByZWplY3Rpb24gc3RhdGUgKi8KICAgICAgICBpZiAoZXhpc3RpbmcgJiYgZXhpc3RpbmcucmVqZWN0aW9uQ291bnQpIHsKICAgICAgICAgIHFmc1N0YXRlLnJlamVjdGlvbkNvdW50ID0gZXhpc3RpbmcucmVqZWN0aW9uQ291bnQ7CiAgICAgICAgICBpZiAocWZzU3RhdGUucmVqZWN0aW9uQ291bnQgPj0gMikgewogICAgICAgICAgICBxZnNVSS5za2lwQnRuLnN0eWxlLmRpc3BsYXkgPSAnJzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qIOKUgOKUgCBBbnN3ZXIgTG9naWMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCgogICAgICBmdW5jdGlvbiBnZXRDdXJyZW50VmFsdWUoKSB7CiAgICAgICAgdmFyIGl0ZW0gPSBRRl9TT1VMX1FVRVNUSU9OU1txZnNTdGF0ZS5pbmRleF07CiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ2Nob2ljZScpIHsKICAgICAgICAgIHJldHVybiBxZnNTdGF0ZS5zZWxlY3RlZENob2ljZSB8fCAnJzsKICAgICAgICB9CiAgICAgICAgdmFyIG1haW5JbnB1dCA9IHFmT25lKCdbZGF0YS1xZi1zb3VsLW1haW4taW5wdXRdJyk7CiAgICAgICAgcmV0dXJuIG1haW5JbnB1dCA/IG1haW5JbnB1dC52YWx1ZS50cmltKCkgOiAnJzsKICAgICAgfQoKICAgICAgZnVuY3Rpb24gc2F2ZUFuc3dlcih2YWx1ZSwgc2tpcHBlZCkgewogICAgICAgIHZhciBpdGVtID0gUUZfU09VTF9RVUVTVElPTlNbcWZzU3RhdGUuaW5kZXhdOwogICAgICAgIHZhciB3aHlWYWwgPSBxZnNVSS5mb2xsb3d1cElucHV0LnZhbHVlLnRyaW0oKTsKCiAgICAgICAgc3RvcmFnZURhdGEuYW5zd2Vyc1tpdGVtLmlkXSA9IHsKICAgICAgICAgIHR5cGU6IGl0ZW0udHlwZSwKICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKICAgICAgICAgIHdoeTogd2h5VmFsLAogICAgICAgICAgc2tpcHBlZDogISFza2lwcGVkLAogICAgICAgICAgcmVqZWN0aW9uQ291bnQ6IHFmc1N0YXRlLnJlamVjdGlvbkNvdW50LAogICAgICAgICAgdXBkYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkKICAgICAgICB9OwoKICAgICAgICAvKiBSZWNvdW50IGFuc3dlcmVkICovCiAgICAgICAgdmFyIGNvdW50ID0gMDsKICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHN0b3JhZ2VEYXRhLmFuc3dlcnMpOwogICAgICAgIHZhciBpOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgICBpZiAoIXN0b3JhZ2VEYXRhLmFuc3dlcnNba2V5c1tpXV0uc2tpcHBlZCkgewogICAgICAgICAgICBjb3VudCArPSAxOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzdG9yYWdlRGF0YS5wcm9ncmVzcy5hbnN3ZXJlZENvdW50ID0gY291bnQ7CgogICAgICAgIHNhdmVTdG9yYWdlKHN0b3JhZ2VEYXRhKTsKICAgICAgfQoKICAgICAgZnVuY3Rpb24gaGFuZGxlTmV4dCgpIHsKICAgICAgICB2YXIgaXRlbSA9IFFGX1NPVUxfUVVFU1RJT05TW3Fmc1N0YXRlLmluZGV4XTsKICAgICAgICB2YXIgdmFsdWUgPSBnZXRDdXJyZW50VmFsdWUoKTsKCiAgICAgICAgLyogQ2hvaWNlOiBtdXN0IHNlbGVjdCAqLwogICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdjaG9pY2UnICYmICF2YWx1ZSkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgLyogVGV4dDogc2hhbGxvdyBkZXRlY3Rpb24gKi8KICAgICAgICBpZiAoaXRlbS50eXBlICE9PSAnY2hvaWNlJykgewogICAgICAgICAgaWYgKGlzU2hhbGxvdyh2YWx1ZSkgJiYgcWZzU3RhdGUucmVqZWN0aW9uQ291bnQgPCAyKSB7CiAgICAgICAgICAgIHFmc1N0YXRlLnJlamVjdGlvbkNvdW50ICs9IDE7CiAgICAgICAgICAgIHFmc1VJLnJlamVjdGlvbi5jbGFzc0xpc3QuYWRkKCdxZi1zb3VsLXJlamVjdGlvbi12aXNpYmxlJyk7CgogICAgICAgICAgICBpZiAocWZzU3RhdGUucmVqZWN0aW9uQ291bnQgPT09IDEpIHsKICAgICAgICAgICAgICBxZnNVSS5yZWplY3Rpb25Nc2cudGV4dENvbnRlbnQgPSAn44KC44GG5bCR44GX5YW35L2T55qE44Gr5pWZ44GI44Gm44GP44Gg44GV44GE44CC5oOF5pmv44GM5rWu44GL44G244KI44GG44Gq5Zue562U44GM44CB44GC44Gq44Gf44Gu5YiG6LqrQUnjgpLlvLfjgY/jgZfjgb7jgZkgXHVEODNEXHVEQ0FBJzsKICAgICAgICAgICAgICBxZnNVSS5yZWplY3Rpb25IaW50LnRleHRDb250ZW50ID0gRklWRV9TRU5TRV9ISU5UOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHFmc1VJLnJlamVjdGlvbk1zZy50ZXh0Q29udGVudCA9ICfjgZPjgZPjga/lpKfkuovjgarjg53jgqTjg7Pjg4jjgafjgZnjgILjgafjgoLjgIHku4rjgZnjgZDnrZTjgYjjgYzlh7rjgarjgY/jgabjgoLlpKfkuIjlpKvjgILlvozjgafmiLvjgaPjgabjgY/jgovjgZPjgajjgoLjgafjgY3jgb7jgZknOwogICAgICAgICAgICAgIHFmc1VJLnJlamVjdGlvbkhpbnQudGV4dENvbnRlbnQgPSAnJzsKICAgICAgICAgICAgICBxZnNVSS5za2lwQnRuLnN0eWxlLmRpc3BsYXkgPSAnJzsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBzYXZlQW5zd2VyKHZhbHVlLCBmYWxzZSk7CiAgICAgICAgYWR2YW5jZVF1ZXN0aW9uKCk7CiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIGhhbmRsZVNraXAoKSB7CiAgICAgICAgc2F2ZUFuc3dlcignJywgdHJ1ZSk7CiAgICAgICAgcWZzVUkuc2tpcE1zZy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHFmc1VJLnNraXBNc2cuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICAgIGFkdmFuY2VRdWVzdGlvbigpOwogICAgICAgIH0sIDEyMDApOwogICAgICB9CgogICAgICBmdW5jdGlvbiBhZHZhbmNlUXVlc3Rpb24oKSB7CiAgICAgICAgcWZzU3RhdGUuaW5kZXggKz0gMTsKCiAgICAgICAgLyogTWlkcG9pbnQgYWZ0ZXIgUTUgKGluZGV4IDUpICovCiAgICAgICAgaWYgKHFmc1N0YXRlLmluZGV4ID09PSA1ICYmICFxZnNTdGF0ZS5zaG93aW5nTWlkcG9pbnQpIHsKICAgICAgICAgIHFmc1N0YXRlLnNob3dpbmdNaWRwb2ludCA9IHRydWU7CiAgICAgICAgICBzaG93TWlkcG9pbnQoKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmIChxZnNTdGF0ZS5pbmRleCA+PSBTRVNTSU9OX1FVRVNUSU9OUykgewogICAgICAgICAgc2hvd0NvbXBsZXRlKCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBsZWF2ZUFuZFJlbmRlcigpOwogICAgICB9CgogICAgICBmdW5jdGlvbiBsZWF2ZUFuZFJlbmRlcigpIHsKICAgICAgICBxZnNVSS5xdWVzdGlvbkJveC5jbGFzc0xpc3QuYWRkKCdxZi1zb3VsLWxlYXZpbmcnKTsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHFmc1VJLnF1ZXN0aW9uQm94LmNsYXNzTGlzdC5yZW1vdmUoJ3FmLXNvdWwtbGVhdmluZycpOwogICAgICAgICAgcmVuZGVyUXVlc3Rpb24oKTsKICAgICAgICB9LCAyNDApOwogICAgICB9CgogICAgICAvKiDilIDilIAgTWlkcG9pbnQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCgogICAgICBmdW5jdGlvbiBzaG93TWlkcG9pbnQoKSB7CiAgICAgICAgdmFyIHN0YWdlID0gZ2V0R3Jvd3RoU3RhZ2Uoc3RvcmFnZURhdGEucHJvZ3Jlc3MuYW5zd2VyZWRDb3VudCk7CiAgICAgICAgcWZzVUkubWlkRW1vamkudGV4dENvbnRlbnQgPSBzdGFnZS5lbW9qaTsKICAgICAgICBxZnNVSS5taWRHcm93dGhFbW9qaS50ZXh0Q29udGVudCA9IHN0YWdlLmVtb2ppOwogICAgICAgIHFmc1VJLm1pZEdyb3d0aE5hbWUudGV4dENvbnRlbnQgPSBzdGFnZS5uYW1lOwogICAgICAgIHFmc1Nob3dTY3JlZW4oJ21pZHBvaW50Jyk7CiAgICAgIH0KCiAgICAgIC8qIOKUgOKUgCBDb21wbGV0ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KCiAgICAgIGZ1bmN0aW9uIHNob3dDb21wbGV0ZSgpIHsKICAgICAgICAvKiBNYXJrIHNlc3Npb24gY29tcGxldGVkICovCiAgICAgICAgaWYgKHN0b3JhZ2VEYXRhLnByb2dyZXNzLmNvbXBsZXRlZFNlc3Npb25zLmluZGV4T2YoMSkgPT09IC0xKSB7CiAgICAgICAgICBzdG9yYWdlRGF0YS5wcm9ncmVzcy5jb21wbGV0ZWRTZXNzaW9ucy5wdXNoKDEpOwogICAgICAgIH0KICAgICAgICBzYXZlU3RvcmFnZShzdG9yYWdlRGF0YSk7CgogICAgICAgIHZhciBzdGFnZSA9IGdldEdyb3d0aFN0YWdlKHN0b3JhZ2VEYXRhLnByb2dyZXNzLmFuc3dlcmVkQ291bnQpOwogICAgICAgIHFmc1VJLmNvbXBsZXRlRW1vamkudGV4dENvbnRlbnQgPSBzdGFnZS5lbW9qaTsKICAgICAgICBxZnNVSS5jb21wbGV0ZUdyb3d0aEVtb2ppLnRleHRDb250ZW50ID0gc3RhZ2UuZW1vamk7CiAgICAgICAgcWZzVUkuY29tcGxldGVHcm93dGhOYW1lLnRleHRDb250ZW50ID0gc3RhZ2UubmFtZTsKCiAgICAgICAgLyogU3RhdHMgKi8KICAgICAgICB2YXIgYW5zd2VyZWQgPSAwOwogICAgICAgIHZhciBza2lwcGVkID0gMDsKICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHN0b3JhZ2VEYXRhLmFuc3dlcnMpOwogICAgICAgIHZhciBpOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgICBpZiAoa2V5c1tpXS5jaGFyQXQoMCkgPT09ICdBJykgewogICAgICAgICAgICBpZiAoc3RvcmFnZURhdGEuYW5zd2Vyc1trZXlzW2ldXS5za2lwcGVkKSB7CiAgICAgICAgICAgICAgc2tpcHBlZCArPSAxOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGFuc3dlcmVkICs9IDE7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcWZzVUkuc3RhdEFuc3dlcmVkLnRleHRDb250ZW50ID0gYW5zd2VyZWQ7CiAgICAgICAgcWZzVUkuc3RhdFNraXBwZWQudGV4dENvbnRlbnQgPSBza2lwcGVkOwoKICAgICAgICAvKiBPdmVyYWxsIHByb2dyZXNzICovCiAgICAgICAgdmFyIG92ZXJhbGxQY3QgPSBNYXRoLnJvdW5kKChzdG9yYWdlRGF0YS5wcm9ncmVzcy5hbnN3ZXJlZENvdW50IC8gVE9UQUxfUVVFU1RJT05TKSAqIDEwMCk7CiAgICAgICAgcWZzVUkub3ZlcmFsbFBlcmNlbnQudGV4dENvbnRlbnQgPSBvdmVyYWxsUGN0ICsgJyUnOwogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgcWZzVUkub3ZlcmFsbEJhci5zdHlsZS53aWR0aCA9IG92ZXJhbGxQY3QgKyAnJSc7CiAgICAgICAgfSwgMTAwKTsKCiAgICAgICAgLyogTWVzc2FnZXMgKi8KICAgICAgICBxZnNVSS5jb21wbGV0ZU1zZy50ZXh0Q29udGVudCA9ICfljp/ngrnjga7ovKrpg63jgYzopovjgYjjgabjgY3jgb7jgZfjgZ/jgILmrKHlm57jga/jgIHjgYLjgarjgZ/jga7liKTmlq3ou7jvvIjkvqHlgKToprPvvInjgpLoqIDoqp7ljJbjgZfjgb7jgZnjgIInOwogICAgICAgIHZhciByZW1haW5pbmcgPSBUT1RBTF9RVUVTVElPTlMgLSBzdG9yYWdlRGF0YS5wcm9ncmVzcy5hbnN3ZXJlZENvdW50OwogICAgICAgIHFmc1VJLnJlbWFpbmluZ01zZy50ZXh0Q29udGVudCA9ICfjgYLjgagnICsgcmVtYWluaW5nICsgJ+WVj+OBp+OAgeWIhui6q0FJ44GM44GC44Gq44Gf44Gu5Y6f54K544KS6Kqe44KM44KL44KI44GG44Gr44Gq44KK44G+44GZ44CCJzsKCiAgICAgICAgcWZzU2hvd1NjcmVlbignY29tcGxldGUnKTsKICAgICAgfQoKICAgICAgLyog4pSA4pSAIEZpbmQgRmlyc3QgVW5hbnN3ZXJlZCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KCiAgICAgIGZ1bmN0aW9uIGZpbmRGaXJzdFVuYW5zd2VyZWQoKSB7CiAgICAgICAgdmFyIGk7CiAgICAgICAgZm9yIChpID0gMDsgaSA8IFFGX1NPVUxfUVVFU1RJT05TLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgICB2YXIgcWlkID0gUUZfU09VTF9RVUVTVElPTlNbaV0uaWQ7CiAgICAgICAgICBpZiAoIXN0b3JhZ2VEYXRhLmFuc3dlcnNbcWlkXSkgewogICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIC0xOwogICAgICB9CgogICAgICAvKiDilIDilIAgSW5pdGlhbGl6YXRpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCgogICAgICB1cGRhdGVHcm93dGhEaXNwbGF5KCk7CgogICAgICAvKiBDaGVjayBpZiBzZXNzaW9uIGFscmVhZHkgY29tcGxldGVkICovCiAgICAgIHZhciBhbGxBbnN3ZXJlZCA9IHRydWU7CiAgICAgIHZhciBrOwogICAgICBmb3IgKGsgPSAwOyBrIDwgUUZfU09VTF9RVUVTVElPTlMubGVuZ3RoOyBrICs9IDEpIHsKICAgICAgICBpZiAoIXN0b3JhZ2VEYXRhLmFuc3dlcnNbUUZfU09VTF9RVUVTVElPTlNba10uaWRdKSB7CiAgICAgICAgICBhbGxBbnN3ZXJlZCA9IGZhbHNlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CgogICAgICBpZiAoYWxsQW5zd2VyZWQgJiYgc3RvcmFnZURhdGEucHJvZ3Jlc3MuY29tcGxldGVkU2Vzc2lvbnMuaW5kZXhPZigxKSAhPT0gLTEpIHsKICAgICAgICAvKiBBbHJlYWR5IGNvbXBsZXRlZCAtIHNob3cgY29tcGxldGUgc2NyZWVuICovCiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICBzaG93Q29tcGxldGUoKTsKICAgICAgICB9LCAxMDApOwogICAgICB9CgogICAgICAvKiDilIDilIAgRXZlbnQgTGlzdGVuZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoKICAgICAgcWZzVUkuc3RhcnRCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIHJlc3VtZUluZGV4ID0gZmluZEZpcnN0VW5hbnN3ZXJlZCgpOwogICAgICAgIGlmIChyZXN1bWVJbmRleCA9PT0gLTEpIHsKICAgICAgICAgIC8qIEFsbCBhbnN3ZXJlZCAqLwogICAgICAgICAgcWZzU3RhdGUuaW5kZXggPSAwOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBxZnNTdGF0ZS5pbmRleCA9IHJlc3VtZUluZGV4OwogICAgICAgICAgLyogSWYgcGFzdCBtaWRwb2ludCwgbWFyayBhcyBzaG93biAqLwogICAgICAgICAgaWYgKHFmc1N0YXRlLmluZGV4ID49IDUpIHsKICAgICAgICAgICAgcWZzU3RhdGUuc2hvd2luZ01pZHBvaW50ID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcWZzU2hvd1NjcmVlbigncXVpeicpOwogICAgICAgIHJlbmRlclF1ZXN0aW9uKCk7CiAgICAgIH0pOwoKICAgICAgcWZzVUkubmV4dEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgICBoYW5kbGVOZXh0KCk7CiAgICAgIH0pOwoKICAgICAgcWZzVUkuc2tpcEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgICBoYW5kbGVTa2lwKCk7CiAgICAgIH0pOwoKICAgICAgcWZzVUkuY29udGludWVCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgcWZzU2hvd1NjcmVlbigncXVpeicpOwogICAgICAgIHJlbmRlclF1ZXN0aW9uKCk7CiAgICAgIH0pOwoKICAgICAgcWZzVUkuZW5kQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICAgIHFmc1VJLnNhdmVDb25maXJtLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogICAgICB9KTsKCiAgICAgIHZhciBuZXh0U2Vzc2lvbkJ0biA9IHFmT25lKCdbZGF0YS1xZi1zb3VsLWFjdGlvbj0ibmV4dC1zZXNzaW9uIl0nKTsKICAgICAgaWYgKG5leHRTZXNzaW9uQnRuKSB7CiAgICAgICAgbmV4dFNlc3Npb25CdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAnL3NvdWwtc2Vzc2lvbjIvP3VpZD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0b3JhZ2VEYXRhLnVzZXJJZCk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0pKCk7CiAg
