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PCEtLUNTUzPliqjnlLvlupMtLT4KICAgIDxzY3JpcHQgc3JjPSJ0ZW1wbGF0ZV8xL2pzL3JlbS5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0idGVtcGxhdGVfMS9qcy9qcXVlcnktMi4yLjQubWluLmpzIj48L3NjcmlwdD4KICAgIDwhLS1qUeW6ky0tPgogICAgPHNjcmlwdCBzcmM9InRlbXBsYXRlXzEvanMvc3dpcGVyLTQuMi4wLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8IS0t6L2u5pKt5bqTLS0+CiAgICA8IS0tPHNjcmlwdCBzcmM9InRlbXBsYXRlXzEvanMvTW9iRXBwLTEuMS4xLmpzIj48L3NjcmlwdD4tLT4KICAgIDwhLS08c2NyaXB0IHNyYz0idGVtcGxhdGVfMS9qcy9zaGFyZXRyYWNlLm1pbi5qcyI+PC9zY3JpcHQ+LS0+CiA8bGluayBocmVmPSIvY3NzL2NvbW1vbi5jc3MiIHJlbD0ic3R5bGVzaGVldCI+CjxsaW5rIGhyZWY9Ii9jc3MvcmVnaXMuY3NzIiByZWw9InN0eWxlc2hlZXQiPgo8bGluayBocmVmPSIvY3NzL2RpYWxvZy5jc3MiIHJlbD0ic3R5bGVzaGVldCI+CjxzY3JpcHQgc3JjPSIvanMvbURpYWxvZ01pbi5qcyI+PC9zY3JpcHQ+CgogIDxzY3JpcHQgc3JjPSJodHRwczovL3d3dy5kc3lsLnd1MzZ1LmNjL3N0YXRpYy9qcy9kc3lsLnNkay52LjEuMC4wLmpzIj48L3NjcmlwdD4KICAgPHNjcmlwdCBzcmM9Ii9qcy9kZXZpY2UuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iL2pzL3JlZ2lzLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0PgogICA8c2NyaXB0IHNyYz0iL2pzL2xheWVyX3YzLjEuMS9tb2JpbGUvbGF5ZXIuanMiPjwvc2NyaXB0PgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0iYWxsIj4KICAgICAgICAuY2VudGVyewogICAgICAgICAgICB3aWR0aDoxMDAlOwogICAgICAgIH0KICAgICAgICBib2R5IHsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7CiAgICAgICAgfQogICAgICAgICNrZWZ1IHsKICAgICAgICAgICAgaGVpZ2h0OiAxLjk1cmVtICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIH0KICAgIDwvc3R5bGU+CjwvaGVhZD4KCjxib2R5PgogICAgCiAgICA8ZGl2IGNsYXNzPSJub3RfZG93bl9ib2R5Ij4KCSAgICA8ZGl2IGNsYXNzPSJub3RfZG93biI+PC9kaXY+CgkgICAgPGRpdiBjbGFzcz0ibm90X2Rvd25faW1nIj4KCSAgICAJPGltZyBzcmM9Ii9pbWdzL25vX2Rvd25fY29weS5wbmciPgoJICAgIDwvZGl2PgoJPC9kaXY+CiAgICAKICAgIDxkaXYgaWQ9InBvc3Rlcl9pb3NfZ3VpZGUiIHN0eWxlPSJkaXNwbGF5OiBub25lIj4KCSAgICA8ZGl2PgogICAgCSAgICA8aW1nIHN0eWxlPSJkaXNwbGF5OmJsb2NrOyB3aWR0aDogMTAwJSIgc3JjPSIvaW1ncy8yXzAxLmpwZyI+CgkgICAgPC9kaXY+CgkgICAgPGRpdiBpZD0iZG9ud2xvYWRfdGYiPgogICAgCSAgICA8aW1nIHN0eWxlPSJkaXNwbGF5OmJsb2NrOyB3aWR0aDogMTAwJSIgc3JjPSIvaW1ncy8yXzAyLmpwZyI+CgkgICAgPC9kaXY+CgkgICAgPGRpdiBpZD0iZG9ud2xvYWRfY29tcCI+CgkgICAgICAgIDxpbWcgc3R5bGU9ImRpc3BsYXk6YmxvY2s7IHdpZHRoOiAxMDAlIiBzcmM9Ii9pbWdzLzJfMDMuanBnIj4KCSAgICA8L2Rpdj4KCSAgICA8ZGl2PgoJICAgICAgICA8aW1nIHN0eWxlPSJkaXNwbGF5OmJsb2NrOyB3aWR0aDogMTAwJSIgc3JjPSIvaW1ncy8yXzA0LmpwZyI+CgkgICAgPC9kaXY+Cgk8L2Rpdj4KICAgIAogICAgPGRpdiBjbGFzcz0iZm9vdGVyIiBzdHlsZT0iZGlzcGxheTogbm9uZSIgaWQ9ImRvd25sb2FkX2J1dHRvbiI+CiAgICAgICAKICAgIDwvZGl2PgogICAgCiAgICAgICAgCiAgICA8ZGl2IGNsYXNzPSJrZiI+CiAgICAgICAgPGEgaWQ9ImtlZnUiIGhyZWY9IiIgdGFyZ2V0PSJfYmxhbmsiPgogICAgICAgICAgICA8aW1nIHNyYz0iLi90ZW1wbGF0ZV8xL2ltZy9rZi5wbmciIGFsdD0iIj4KICAgICAgICA8L2E+CiAgICA8L2Rpdj4KICAgIAogPGRpdiBjbGFzcz0ic2hhZG93LWJveCI+Cgk8aW1nIHNyYz0iL2ltZ3MvZ3VpZGVfd2VpeGluLnBuZyI+CjwvZGl2Pgo8ZGl2IGlkPSJpbnN0YWxsSW5mbyI+CiAgICA8aW1nIHNyYz0iIiBhbHQ9IiIgaWQ9ImltZ0luZm8iPgogICAgPGRpdiBpZD0iY2xvc2VCdG4iPueCueWHu+WFs+mXrTwvZGl2Pgo8L2Rpdj4KCgo8ZGl2IHN0eWxlPSJkaXNwbGF5Om5vbmU7IiBjbGFzcz0ic29yY2UiPuaVsOaNruW6kzwvZGl2PgoKPGlmcmFtZSBpZD0iaWZyYW1lMSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iIj48L3NjcmlwdD4KPC9pZnJhbWU+CgogICAgPGRpdiBpZD0nY29weV9kaXYnIGNsYXNzPSJvcGFjaXR5Ij4KICAgICAgICA8cD7lpoLmnpzlj7PkuIrop5IuLi7ml6Dms5Xngrnlh7s8L3A+CiAgICAgICAgPHVsPgogICAgICAgICAgICA8bGkgc3R5bGU9Im1hcmdpbjogMCAxNXB4IDQ1cHggMTVweDsiPgogICAgICAgICAgICAgICAgPGltZyBpZD0naWVfaWNvbicgc3JjPSIvaW1ncy9pZS5wbmciIC8+CiAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgIDxsaSBzdHlsZT0ibWFyZ2luOiAxNnB4IDA7Ij4KICAgICAgICAgICAgICAgIOivt+WkjeWItumTvuaOpeWIsOa1j+iniOWZqOaJk+W8gAogICAgICAgICAgICA8L2xpPgogICAgICAgICAgICA8bGkgc3R5bGU9Im1hcmdpbjogMTNweCAyM3B4IDAgMDtmbG9hdDpyaWdodCI+CiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgb25jbGljaz0iY29weVRleHQobG9jYXRpb24uaHJlZik7Ij7lpI3liLY8L2J1dHRvbj4KICAgICAgICAgICAgPC9saT4KICAgICAgICA8L3VsPgogICAgPC9kaXY+CgogICAgCQoJPGRpdiBpZD0icHJvbW90ZXJfaWQiIHN0eWxlPSJoZWlnaHQ6NTBweDtsaW5lLWhlaWdodDo1MHB4OyB3aWR0aDogMTIwcHg7IHotaW5kZXg6IDk5OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGJhY2tncm91bmQtY29sb3I6ICNmZWU2MDY7IG9wYWNpdHk6IDAuOTsgY29sb3I6IHJnYigwLCAwLCAwKTsgYm9yZGVyLXJhZGl1czogMTJweDsgZGlzcGxheTogbm9uZTtmb250LXdlaWdodDogOTAwO3Bvc2l0aW9uOmZpeGVkO2JvdHRvbToxMDBweDtsZWZ0OjM1JTsiPgogICAgICAgICAgICAgICAgPHNwYW4+CiAgICAgICAgICAgICAgICAgICAg6YKA6K+356CB77yaPHNwYW4+PC9zcGFuPgogICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgCiAgICA8L2Rpdj4KCiAgICAKPGRpdiBjbGFzcz0ibW9iaWxlLXdyYXAgY2VudGVyIiAgaWQ9ImFuZHJvaWRfZG93bmxvYWQiIGRhdGEtY2xpcGJvYXJkLXRleHQ9IiI+CiAgICAgICAgPGRpdiBjbGFzcz0iZm9vdGVyIiBpZD0iZm9vdGVyLWFuZHJvaWQiPgogICAgICAgICAgICAgPCEtLeaOqOW5v+WRmGlkLS0+CiAgICAgICAgICAgIDwhLS08ZGl2IGlkPSJwcm9tb3Rlcl9pZCIgc3R5bGU9Im1hcmdpbjogMTBweCBhdXRvOyB3aWR0aDogMTIwcHg7IHotaW5kZXg6IDk5OyBwYWRkaW5nOiAxMHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGJhY2tncm91bmQtY29sb3I6ICNmZWU2MDY7IG9wYWNpdHk6IDAuOTsgY29sb3I6IHJnYigwLCAwLCAwKTsgYm9yZGVyLXJhZGl1czogMTJweDsgZGlzcGxheTogbm9uZTtmb250LXdlaWdodDogOTAwOyI+LS0+CiAgICAgICAgICAgIDwhLS0gICAgPHNwYW4+LS0+CiAgICAgICAgICAgIDwhLS0gICAgICAgIOmCgOivt+egge+8mjxzcGFuPjwvc3Bhbj4tLT4KICAgICAgICAgICAgPCEtLSAgICA8L3NwYW4+LS0+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgPCEtLTwvZGl2Pi0tPgoJICAgICAgICA8aW1nIGlkPSJmb290ZXIiIHNyYz0iL2ltZ3Mvc3R5bGVfMC9mb290ZXIucG5nIj4KCSAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJpbWdkd1AiPgogICAgICAgICAgICA8YSBjbGFzcz0iZG9ud2xvYWQiIGhyZWY9ImphdmFzY3JpcHQ6Ij4KICAgICAgICAgICAgICAgIDxpbWcgc3JjPSIiPgogICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDxpbWcgaWQ9ImJnMSIgc3JjPSIvaW1ncy9zdHlsZV8wL2JnMS5qcGciPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImltZ2R3UCI+CiAgICAgICAgICAgIDxpbWcgaWQ9ImJnMiIgc3JjPSIvaW1ncy9zdHlsZV8wL2JnMi5qcGciPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImltZ2R3UCI+CiAgICAgICAgICAgIDxpbWcgaWQ9ImJnMyIgc3JjPSIvaW1ncy9zdHlsZV8wL2JnMy5qcGciPgogICAgICAgIDwvZGl2PgogICAgICAgICAgICAKICAgIDwhLS08ZGl2IGNsYXNzPSJiYW5uZXIiIG9uQ2xpY2s9IkRvd25Tb2Z0KCk7Ij4tLT4KICAgIDwhLS0gICAgPGltZyBzcmM9Ii4vdGVtcGxhdGVfMS9pbWcvYzk1NjY1Xzc1MHgzODYucG5nIiBhbHQ9IiI+LS0+CiAgICA8IS0tPC9kaXY+LS0+CiAgICA8IS0tPGRpdiBjbGFzcz0iaW5mb3JtIj4tLT4KICAgIDwhLS0gICAgPGRpdiBjbGFzcz0iaW50cnMiIG9uQ2xpY2s9IkRvd25Tb2Z0KCk7Ij4tLT4KICAgIDwhLS0gICAgICAgIDxpbWcgc3JjPSIuL3RlbXBsYXRlXzEvaW1nLzc4Yzk0Y182OTB4MTc0LnBuZyIgYWx0PSIiPi0tPgogICAgPCEtLSAgICA8L2Rpdj4tLT4KICAgIDwhLS0gICAgPGRpdiBjbGFzcz0iYnV0dG9uIj4tLT4KICAgIDwhLS0gICAgICAgIDxidXR0b24gb25DbGljaz0iRG93blNvZnQoKTsiPjwvYnV0dG9uPi0tPgogICAgPCEtLSAgICA8L2Rpdj4tLT4KICAgIDwhLS0gICAgPGRpdiBjbGFzcz0ibGluZXMiPi0tPgogICAgICAgICAgICA8IS0tPGRpdiBjbGFzcz0idGl0cyI+LS0+CiAgICAgICAgICAgIDwhLS0gICAgPGltZyBzcmM9Ii4vdGVtcGxhdGVfMS9pbWcvZTM3ODE5Xzc1MHgxNTQucG5nIiBhbHQ9IiI+LS0+CiAgICAgICAgICAgIDwhLS08L2Rpdj4tLT4KICAgICAgICAgICAgPCEtLTxkaXYgY2xhc3M9ImNvbnRzIj4tLT4KICAgICAgICAgICAgPCEtLSAgICA8ZGl2IGNsYXNzPSJpdGVtIj4tLT4KICAgICAgICAgICAgPCEtLSAgICAgICAgPGEgZGF0YS11cmw9Imh0dHBzOi8vd3d3LjU5NTAwNC5jYyIgY2xhc3M9ImVudGVyIj4tLT4KICAgICAgICAgICAgPCEtLSAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUiPi0tPgogICAgICAgICAgICA8IS0tICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1zIj4tLT4KICAgICAgICAgICAgPCEtLSAgICAgICAgICAgICAgICAgICAgMTJtcy0tPgogICAgICAgICAgICA8IS0tICAgICAgICAgICAgICAgIDwvZGl2Pi0tPgogICAgICAgICAgICA8IS0tICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InR4dCI+LS0+CiAgICAgICAgICAgIDwhLS0gICAgICAgICAgICAgICAgICAgIHd3dy41OTUwMDQuY2MtLT4KICAgICAgICAgICAgPCEtLSAgICAgICAgICAgICAgICA8L2Rpdj4tLT4KICAgICAgICAgICAgPCEtLSAgICAgICAgICAgIDwvZGl2Pi0tPgogICAgICAgICAgICA8IS0tICAgICAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9ucyI+LS0+CiAgICAgICAgICAgIDwhLS0gICAgICAgICAgICAgICAgPGJ1dHRvbj48L2J1dHRvbj4tLT4KICAgICAgICAgICAgPCEtLSAgICAgICAgICAgIDwvZGl2Pi0tPgogICAgICAgICAgICA8IS0tICAgICAgICA8L2E+LS0+CiAgICAgICAgICAgIDwhLS0gICAgPC9kaXY+LS0+CiAgICAgICAgICAgIDwhLS08L2Rpdj4tLT4KICAgIDwhLS0gICAgPC9kaXY+LS0+CiAgICA8IS0tICAgIDxkaXYgY2xhc3M9ImRvd25sb2FkIiBvbkNsaWNrPSJEb3duU29mdCgpOyI+LS0+CiAgICA8IS0tICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRzIj4tLT4KICAgIDwhLS0gICAgICAgICAgICA8aW1nIHNyYz0iLi90ZW1wbGF0ZV8xL2ltZy9iOTQ1ZDBfNzUweDE1Ni5wbmciIGFsdD0iIj4tLT4KICAgIDwhLS0gICAgICAgIDwvZGl2Pi0tPgogICAgPCEtLSAgICAgICAgPGRpdiBjbGFzcz0iY29udHMiPi0tPgogICAgPCEtLSAgICAgICAgICAgIDxpbWcgc3JjPSIuL3RlbXBsYXRlXzEvaW1nLzhkMTIyYl82ODB4NTcyLnBuZyIgYWx0PSIiPi0tPgogICAgPCEtLSAgICAgICAgPC9kaXY+LS0+CiAgICA8IS0tICAgIDwvZGl2Pi0tPgogICAgPCEtLSAgICA8ZGl2IGNsYXNzPSJkb3dubG9hZCIgb25DbGljaz0iRG93blNvZnQoKTsiPi0tPgogICAgPCEtLSAgICAgICAgPGRpdiBjbGFzcz0idGl0cyI+LS0+CiAgICA8IS0tICAgICAgICAgICAgPGltZyBzcmM9Ii4vdGVtcGxhdGVfMS9pbWcveXpmdy5wbmciIGFsdD0iIj4tLT4KICAgIDwhLS0gICAgICAgIDwvZGl2Pi0tPgogICAgPCEtLSAgICAgICAgPGRpdiBjbGFzcz0iY29udHMiPi0tPgogICAgPCEtLSAgICAgICAgICAgIDxpbWcgc3JjPSIuL3RlbXBsYXRlXzEvaW1nL3l6LnBuZyIgYWx0PSIiPi0tPgogICAgPCEtLSAgICAgICAgPC9kaXY+LS0+CiAgICA8IS0tICAgIDwvZGl2Pi0tPgogICAgPCEtLSAgICA8ZGl2IGNsYXNzPSJwaG90byIgb25DbGljaz0iRG93blNvZnQoKTsiPi0tPgogICAgPCEtLSAgICAgICAgPGRpdiBjbGFzcz0idGl0cyI+LS0+CiAgICA8IS0tICAgICAgICAgICAgPGltZyBzcmM9Ii4vdGVtcGxhdGVfMS9pbWcvZjhjMzFjXzc1MHgxNTYucG5nIiBhbHQ9IiI+LS0+CiAgICA8IS0tICAgICAgICA8L2Rpdj4tLT4KICAgIDwhLS0gICAgICAgIDxkaXYgY2xhc3M9ImNvbnRzIj4tLT4KICAgIDwhLS0gICAgICAgICAgICA8ZGl2IGNsYXNzPSJzd2lwZXItY29udGFpbmVyIGxpc3QiPi0tPgogICAgPCEtLSAgICAgICAgICAgICAgICA8dWwgY2xhc3M9InN3aXBlci13cmFwcGVyIj4tLT4KICAgIDwhLS0gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ic3dpcGVyLXNsaWRlIj4tLT4KICAgIDwhLS0gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iLi90ZW1wbGF0ZV8xL2ltZy90MS5wbmciIGFsdD0iIj4tLT4KICAgIDwhLS0gICAgICAgICAgICAgICAgICAgIDwvbGk+LS0+CiAgICA8IS0tICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InN3aXBlci1zbGlkZSI+LS0+CiAgICA8IS0tICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vdGVtcGxhdGVfMS9pbWcvdDIucG5nIiBhbHQ9IiI+LS0+CiAgICA8IS0tICAgICAgICAgICAgICAgICAgICA8L2xpPi0tPgogICAgPCEtLSAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJzd2lwZXItc2xpZGUiPi0tPgogICAgPCEtLSAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL3RlbXBsYXRlXzEvaW1nL3Q0LnBuZyIgYWx0PSIiPi0tPgogICAgPCEtLSAgICAgICAgICAgICAgICAgICAgPC9saT4tLT4KICAgIDwhLS0gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ic3dpcGVyLXNsaWRlIj4tLT4KICAgIDwhLS0gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iLi90ZW1wbGF0ZV8xL2ltZy90NS5wbmciIGFsdD0iIj4tLT4KICAgIDwhLS0gICAgICAgICAgICAgICAgICAgIDwvbGk+LS0+CiAgICA8IS0tICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InN3aXBlci1zbGlkZSI+LS0+CiAgICA8IS0tICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vdGVtcGxhdGVfMS9pbWcvdDYucG5nIiBhbHQ9IiI+LS0+CiAgICA8IS0tICAgICAgICAgICAgICAgICAgICA8L2xpPi0tPgogICAgPCEtLSAgICAgICAgICAgICAgICA8L3VsPi0tPgogICAgPCEtLSAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzd2lwZXItcGFnaW5hdGlvbiI+PC9kaXY+LS0+CiAgICA8IS0tICAgICAgICAgICAgPC9kaXY+LS0+CiAgICA8IS0tICAgICAgICA8L2Rpdj4tLT4KICAgIDwhLS0gICAgPC9kaXY+LS0+CiAgICA8IS0tICAgIDxkaXYgY2xhc3M9InR5cGUiPjxpbWcgc3JjPSIuL3RlbXBsYXRlXzEvaW1nL3R1LnBuZyIgYWx0PSIiPjwvZGl2Pi0tPgogICAgPCEtLTwvZGl2Pi0tPgogICAgPCEtLTxkaXYgY2xhc3M9ImZpeC1kb3duIiBvbkNsaWNrPSJEb3duU29mdCgpOyI+LS0+CiAgICA8IS0tICAgIDxhPi0tPgogICAgPCEtLSAgICAgICAgPGltZyBzcmM9Ii4vdGVtcGxhdGVfMS9pbWcvZm90LmdpZiIgYWx0PSIiPi0tPgogICAgPCEtLSAgICA8L2E+LS0+CiAgICA8IS0tPC9kaXY+LS0+CiAgICA8IS0tPGRpdiBjbGFzcz0idGVhY2hBbHQiPi0tPgogICAgPCEtLSAgICA8aW1nIHNyYz0iLi90ZW1wbGF0ZV8xL2ltZy90ZWFjaDEuanBnIiBhbHQ9IiIgY2xhc3M9ImNsb3NlQWx0Ij4tLT4KICAgIDwhLS0gICAgPGltZyBzcmM9Ii4vdGVtcGxhdGVfMS9pbWcvdGVhY2gyLmpwZyIgYWx0PSIiPi0tPgogICAgPCEtLSAgICA8aW1nIHNyYz0iLi90ZW1wbGF0ZV8xL2ltZy90ZWFjaDMuanBnIiBhbHQ9IiI+LS0+CiAgICA8IS0tICAgIDxpbWcgc3JjPSIuL3RlbXBsYXRlXzEvaW1nL3RlYWNoNC5qcGciIGFsdD0iIj4tLT4KICAgIDwhLS0gICAgPGltZyBzcmM9Ii4vdGVtcGxhdGVfMS9pbWcvdGVhY2g1LmpwZyIgYWx0PSIiPi0tPgogICAgPCEtLSAgICA8aW1nIHNyYz0iLi90ZW1wbGF0ZV8xL2ltZy90ZWFjaDYuanBnIiBhbHQ9IiI+LS0+CiAgICA8IS0tPC9kaXY+LS0+Cgo8L2Rpdj4KPCEtLW1vYmlsZV93cmFwLS0+CjxzY3JpcHQ+CiAgICB2YXIgc3dpcGVyID0gbmV3IFN3aXBlcignLmluZm9ybSAuY29tbWVudHMgLmNvbnRzIC5saXN0JywgewogICAgICAgIHNsaWRlc1BlclZpZXc6ICdhdXRvJywKICAgICAgICBzcGFjZUJldHdlZW46IDEzLAogICAgICAgIGNlbnRlcmVkU2xpZGVzOiB0cnVlLAogICAgICAgIGxvb3A6IHRydWUsCiAgICAgICAgYXV0b3BsYXk6IHRydWUsCiAgICB9KTsKICAgIHZhciBzd2lwZXIgPSBuZXcgU3dpcGVyKCcuaW5mb3JtIC5waG90byAuY29udHMgLmxpc3QnLCB7CiAgICAgICAgcGFnaW5hdGlvbjogewogICAgICAgICAgICBlbDogJy5pbmZvcm0gLnBob3RvIC5jb250cyAubGlzdCAuc3dpcGVyLXBhZ2luYXRpb24nLAogICAgICAgICAgICBjbGlja2FibGU6IHRydWUsCiAgICAgICAgfSwKICAgICAgICBhdXRvcGxheTogewogICAgICAgICAgICBkZWxheTogMzAwMCwKICAgICAgICAgICAgZGlzYWJsZU9uSW50ZXJhY3Rpb246IGZhbHNlLAogICAgICAgIH0sCiAgICB9KTsKICAgICQoJy50b3BzIC50ZWFjaGVyJykuY2xpY2soZnVuY3Rpb24oKSB7CiAgICAgICAgJCgnLnRlYWNoQWx0JykuZmFkZUluKCk7CiAgICB9KQogICAgJCgnLmNsb3NlQWx0JykuY2xpY2soZnVuY3Rpb24oKSB7CiAgICAgICAgJCgnLnRlYWNoQWx0JykuZmFkZU91dCgpOwogICAgfSkKICAgIAogICAgZnVuY3Rpb24gRG93blNvZnQoKXsKICAgICAgICAKICAgIH0KPC9zY3JpcHQ+Cgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgICAgIHZhciBwcm9tb3Rlcl9pZCA9ICcnOwogICAgICBpZiAocHJvbW90ZXJfaWQpIHsKICAgICAgICAgICQoJyNwcm9tb3Rlcl9pZCcpLnNob3coKTsKICAgICAgfQogICAgICBjb25zb2xlLmxvZyhwcm9tb3Rlcl9pZCkKICAgICAgdmFyIG9zID0gMTsgLy8gMSDlronljZMgMiBpb3MKICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL1woaVteO10rOyggVTspPyBDUFUuK01hYyBPUyBYLykpIHsKICAgICAgICAgIG9zID0gMjsKICAgICAgfQoJZnVuY3Rpb24gY2hlY2tfc2FmYXJpKCkgewogICAgCWlmICghIW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL1woaVteO10rOyggVTspPyBDUFUuK01hYyBPUyBYLykpIHsKCQkJdmFyIHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpOwoJCSAgICAvL+WIpOaWreaYr+S4jeaYr+WcqGlQaG9uZeeahFNhZmFpcua1j+iniOWZqOaJk+W8gOeahOacrOmhtemdogoJCSAgICBpZiAodWEuaW5kZXhPZignYXBwbGV3ZWJraXQnKSA+IC0xICYmIHVhLmluZGV4T2YoJ21vYmlsZScpID4gLTEgJiYgdWEuaW5kZXhPZignc2FmYXJpJykgPiAtMSAmJgoJCSAgICAgICAgdWEuaW5kZXhPZignbGludXgnKSA9PT0gLTEgJiYgdWEuaW5kZXhPZignYW5kcm9pZCcpID09PSAtMSAmJiB1YS5pbmRleE9mKCdjaHJvbWUnKSA9PT0gLTEgJiYKCQkgICAgICAgIHVhLmluZGV4T2YoJ2lvcycpID09PSAtMSAmJiB1YS5pbmRleE9mKCdicm93c2VyJykgPT09IC0xKSB7CgkJICAgICAgICByZXR1cm4gdHJ1ZTsKCQkgICAgfQoJCSAgICBlbHNlIHsKCQkgICAgICAgIC8vYWxlcnQoIuivt+S9v+eUqGlQaG9uZeS4reeahFNhZmFyaea1j+iniOWZqOaJk+W8gOacrOmhtemdou+8gSIpOwoJCSAgICAgICAgLy8gYWxlcnQoIuivt+aCqOS9v+eUqHNhZmFyaea1j+iniOWZqOaJk+W8gOacrOe9kemhtX4iKTsKCSAgICAgICAvLyAgICAgJCgnLm5vdF9kb3duX2JvZHknKS5zaG93KCk7CgkJICAgICAgLy8gIHJldHVybiBmYWxzZTsKCQkgICAgICAgIHJldHVybiB0cnVlOwoJCSAgICB9CiAgICAJfQoJfQogIHdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7Ci8vICAgCSQoJyNpZnJhbWUxJykubG9hZCgKLy8gICAJCWZ1bmN0aW9uKCl7Ci8vICAgCQkJd2luZG93LmxvY2F0aW9uLmhyZWY9J2h0dHA6Ly9hb2JjNjgudG9wL2luc3RhbGxfY29uZmlnLnBocCc7Ci8vICAgCQl9Ci8vICAgCSk7CiAgCQogIAkKICAgIAogIH0KICAKCSQoZnVuY3Rpb24oKSB7Ly8g5Yid5aeL5YyW5YaF5a65CiAgICAgICAgLy8g6ZqP5py66I635Y+W5Zu+54mHCiAgICAKCWlmKCJodHRwczovL2trZi5hb3l1YW5hb2JvY2hlbmcuY24vZGlzdC9jaGF0bGluay5odG1sIj09IiIpewoJICAgIAkkKCIja2VmdSIpLmhpZGUoKTsKCX1lbHNlewoJICAgICQoIiNrZWZ1IikuYXR0cigiaHJlZiIsJ2h0dHBzOi8va2tmLmFveXVhbmFvYm9jaGVuZy5jbi9kaXN0L2NoYXRsaW5rLmh0bWwnKTsKCX0KCQoJdmFyIHVhID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTsKLy8gCWlmKDAgPT0gMSAmJiB1YS5tYXRjaCgvTWljcm9NZXNzZW5nZXIvaSkgIT0gJ21pY3JvbWVzc2VuZ2VyJyl7Ci8vIAkJJCgiI3FyY29kZWJveCIpLnNob3coKTsKLy8gCQkkKCIjeCIpLnNob3coKTsKLy8gCX0KLy8gCXZhciB3ZWJ1cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjsKLy8gICAgIHZhciBxcmNvZGUgPSBuZXcgUVJDb2RlKCdxcmNvZGUnLCB7Ci8vICAgICAgIHRleHQ6IHdlYnVybCwKLy8gICAgICAgd2lkdGg6IDEyMCwKLy8gICAgICAgaGVpZ2h0OiAxMjAsCi8vICAgICAgIGNvbG9yRGFyazogJyMwMDAwMDAnLAovLyAgICAgICBjb2xvckxpZ2h0OiAnI2ZmZmZmZicsCi8vICAgICAgIGNvcnJlY3RMZXZlbDogUVJDb2RlLkNvcnJlY3RMZXZlbC5ICi8vICAgICB9KTsKICAgIHZhciBwYWNrYWdldGFnID0gImNvbS5hYmMuYW9ib2NoZW5nbGFsYWFhLmEwMDEiOwogIAl2YXIgcHJvbW90ZXJfdHJlZSA9ICIiOwogIAl2YXIgcHJvbW90ZXIgPSAiIjsKICAJdmFyIHNwcmVhZF9zbmlkID0gIiI7CiAgCXZhciBzcHJlYWQgPSAiMSI7CiAgCXZhciB3ZWl4aW4gPSAiMCI7CiAgCQogIAkKICAJCiAgCXRyeSB7CiAgICAgIC8vb3Blbmluc3RhbGzliJ3lp4vljJbml7blsIbkuI5vcGVuaW5zdGFsbOacjeWKoeWZqOS6pOS6ku+8jOW6lOWwveWPr+iDveaXqeeahOiwg+eUqAogICAgICAgIC8vdmFyIGRhdGEgPSBPcGVuSW5zdGFsbC5wYXJzZVVybFBhcmFtcygpOy8vb3Blbmluc3RhbGwuanPkuK3mj5DkvpvnmoTlt6Xlhbflh73mlbDvvIzop6PmnpB1cmzkuK3nmoTmiYDmnInmn6Xor6Llj4LmlbAKICAgICAgdmFyIGRhdGEgPSB7InBhY2thZ2VUYWciOnBhY2thZ2V0YWcsInByb21vdGVyX3RyZWUiOnByb21vdGVyX3RyZWUsInByb21vdGVyIjpwcm9tb3Rlciwic3ByZWFkIjpzcHJlYWQsIndlaXhpbiI6d2VpeGluLCJzcHJlYWRfc25pZCI6c3ByZWFkX3NuaWR9OwogICAgICAgIHZhciBpc19zdWxpYW4gPSBmYWxzZTsKICAgICAgICAvKioKICAgICAgICAqIOesrOS4gOS4quWPguaVsOaYr+e7keWumueahOS4i+i9veaMiemSrueahGlk5oiW6ICFRE9NCiAgICAgICAgKiDnrKzkuozkuKrlj4LmlbDmmK9TdUxpbmtlcueahOmFjee9rgogICAgICAgICovCiAgICAgICAgY29uc29sZS5sb2coJ29zPScrb3MpOwogICAgICAgIHZhciBzdW5saW5rX29iaiA9ICcjZG93bmxvYWRfYnV0dG9uJzsKICAgICAgICBpZiAob3MgPT0gMikgewogICAgICAgICAgICBzdW5saW5rX29iaiA9ICcjZG9ud2xvYWRfdGYnOwogICAgICAgICAgICAKICAgICAgICB9CiAgICAgICAgU3VMaW5rZXIoc3VubGlua19vYmosewogICAgICAgICAgICAvLyjlv4XloaspIOezu+e7n+WIhumFjWFwcEtleQogICAgICAgICAgICBhcHBLZXk6InpsdnVqZCIsIAogICAgICAgICAgICAvLyjpgInloaspIOiHquWumuS5iemZhOW4puWPguaVsCzkvJrpgI/kvKDliLDliY3nq68KICAgICAgICAgICAgcGFyYW1zOiBkYXRhLAogICAgICAgICAgICAvLyjpgInloaspIOmHjeWumuWQkeWPguaVsO+8jFNES+Wbnuiwg+S4reS8mui/lOWbnuivpeWAvAogICAgICAgICAgICByZWRpcmVjdDoiIiAsCiAgICAgICAgICAgIC8vKOmAieWhqykg5o6o5bm/5rig6YGTLOS4jeWhq+eahOivneiupOS4uuaYr+m7mOiupOa4oOmBkwogICAgICAgICAgICBjaGFubmVsOiIiLAogICAgICAgICAgICAvLyAo6YCJ5aGrKSDliJ3lp4vljJblrozmr5Xlm57osIMKICAgICAgICAgICAgb25SZWFkeTogZnVuY3Rpb24gKHN1bGlua2VyKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygi5Yid5aeL5YyW57uT5p2fIik7CiAgICAgICAgICAgICAgICBpc19zdWxpYW4gPSB0cnVlOwogICAgICAgICAgICAgICAgLy8g5Yid5aeL5YyW5a6M5ZCO5Y+v5Lul5bCd6K+V5ZSk6YaS5LiA5qyhOwogICAgICAgICAgICAgICAgLy8gc3VsaW5rZXIud2FrZXVwKCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIC8vICjpgInloaspIOW8gOWni+WUpOmGkkFwcAogICAgICAgICAgICBvbldha2V1cDogZnVuY3Rpb24gKGlzTWFudWFsKSB7CiAgICAgICAgICAgICAgICAvLyDlj6/ku6XlvIDlkK/lvLnnqpfvvIzlu7rorq4yMDAwbXMs5Y+v5Lul5L2/55SoaXNNYW51YWzmnaXliKTmlq3lvZPliY3mmK/lkKbmiYvliqjllKTphpLvvIzmn5Dkupvmg4XlhrXkuIvmiYvliqjllKTphpLkuI3pnIDopoHmmL7npLrlvLnnqpfmj5DnpLoKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCLlvIDlp4vllKTphpLlupTnlKgiLCLmiYvliqjllKTphpIiLGlzTWFudWFsKTsKICAgICAgICAgICAgICAgIERpYWxvZy5pbml0KCfmraPlnKjliqDovb3kuK3vvIzor7fnqI3lkI4uLi4nLCAzMDAwMCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIC8vICjpgInloaspIOW8gOWni+S4i+i9vUFwcAogICAgICAgICAgICBvbkRvd25sb2FkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygi5byA5aeL5LiL6L295bqU55SoIik7CiAgICAgICAgICAgICAgICBEaWFsb2cuY2xvc2UoKTsKICAgICAgICAgICAgICAgIGlmIChvcyA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9cKGlbXjtdKzsoIFU7KT8gQ1BVLitNYWMgT1MgWC8pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNob3dHdWlkZSgpOwogICAgICAgICAgICAgICAgCX0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhbmRyb2lkX2Rvd25sb2FkIikuc3R5bGUuZGlzcGxheT0ibm9uZSI7CiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwb3N0ZXJfaW9zX2d1aWRlIikuc3R5bGUuZGlzcGxheT0iaW5saW5lLWJsb2NrIjsKICAgICAgICAgICAgICAgIAl9CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIC8vICjpgInloaspIOmBh+WIsOS4jeaUr+aMgeeahOa1j+iniOWZqOWbnuiwgwogICAgICAgICAgICBvbkJyb3dzZXJOb3RTdXBwb3J0OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAvLyDlj6/ku6XlhbPpl63lvLnnqpcKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCLkuI3mlK/mjIHnmoTmtY/op4jlmagiKTsKICAgICAgICAgICAgfSwKICAgICAgICB9KTsKICAgICAgICAKICAgICAgICAKICAgICAgICAkKCcjZG9ud2xvYWRfY29tcCcpLmNsaWNrKGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZihvcz09Mil7CiAgICAgICAgICAgIC8vdmFyIHVybCA9ICdpdG1zLXNlcnZpY2VzOi8vP2FjdGlvbj1kb3dubG9hZC1tYW5pZmVzdCZ1cmw9aHR0cHM6Ly8yMjYteXVlaHVhLm9zcy1jbi1zaGVuemhlbi5hbGl5dW5jcy5jb20vZG93bmxvYWQvZG93bmlvcy5wbGlzdCc7CiAgICAgICAgICAgICAgICBpZigiaHR0cHM6Ly8xamxpbGNsLnZ4Y2N1eHRkdmFiLmNvbS9pbWFnZS80eHY5YjFzIiE9IiIpewogICAgICAgICAgICAgICAgICAgICBEaWFsb2cuaW5pdCgn5q2j5Zyo5Yqg6L295Lit77yM6K+356iN5ZCOLi4uJywgMzAwMCk7CiAgICAgICAgICAgICAgICAgICAgdmFyIHVybCA9ICdodHRwczovLzFqbGlsY2wudnhjY3V4dGR2YWIuY29tL2ltYWdlLzR4djliMXMnOwogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsOwogICAgICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICAgICAgRGlhbG9nLmluaXQoJ+aaguaXoOS8geS4muetvi4uLicsIDMwMDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgIH0pOwogICAgfSBjYXRjaChlcnIpewogICAgICBjb25zb2xlLmxvZyhlcnIpOwogICAgfQogICAgCiAgICAgLy8gICBpZiAob3MgPT0gMikgewogICAgICAvLyAgICAgICQoJyNkb3dubG9hZF9idXR0b24nKS5jbGljayhmdW5jdGlvbigpIHsKICAgIC8vICAgICAgICAgICAgY29uc29sZS5sb2coJ2NsaWNrJykKICAgICAvLyAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFuZHJvaWRfZG93bmxvYWQiKS5zdHlsZS5kaXNwbGF5PSJub25lIjsKICAgICAgLy8gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBvc3Rlcl9pb3NfZ3VpZGUiKS5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siOwogICAgLy8gICAgICAgICAgICAKICAgICAvLyAgICAgICB9KTsKICAgICAvLyAgIH0KICAgICAgICAKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coJz09PT09PumAn+mTvuacjeWKoeeKtuaAge+8micraXNfc3VsaWFuKTsKICAgICAgICAgICAgaWYgKCFpc19zdWxpYW4pIHsKICAgICAgICAgICAgICAgIGlmIChvcyA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgJCgnI2Rvd25sb2FkX2J1dHRvbicpLmNsaWNrKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICBEaWFsb2cuaW5pdCgn5q2j5Zyo5Yqg6L295Lit77yM6K+356iN5ZCOLi4uJywgMzAwMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIGRlZmF1bHRVcmwgIT09ICd1bmRlZmluZWQnKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRlZmF1bHRVcmwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL1woaVteO10rOyggVTspPyBDUFUuK01hYyBPUyBYLykpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IGRlZmF1bHRVcmwuaW9zOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSBkZWZhdWx0VXJsLmFuZHJvaWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB1cmw7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwgNTAwMCApOwogICAgICAgIAogICAgICAgIAogICAgICAgIHZhciB1ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDsKICAgICAgICB2YXIgaXNBbmRyb2lkID0gdS5pbmRleE9mKCdBbmRyb2lkJykgPiAtMSB8fCB1LmluZGV4T2YoJ0FkcicpID4gLTE7IC8vYW5kcm9pZOe7iOerrwogICAgICAgIHZhciBpc2lPUyA9ICEhdS5tYXRjaCgvXChpW147XSs7KCBVOyk/IENQVS4rTWFjIE9TIFgvKTsgLy9pb3Pnu4jnq68KICAgICAgICBpZihpc2lPUyl7CiAgICAgICAgICAgICQoJyNpZV9pY29uJykuYXR0cignc3JjJywnL2ltZ3Mvc2FmYXJpLnBuZycpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAKICAgICAgICAvL+WmguaenOaYr+WcqFFR5YaF572u5rWP6KeI5Zmo5oiW5b6u5L+h6YeMCiAgICAgICAgaWYoCiAgICAgICAgICAgIC9NaWNyb01lc3Nlbmdlci9pLnRlc3QodSkKICAgICAgICAgICAgfHwgKGlzaU9TICYmIC8gUVEvaS50ZXN0KHUpKQogICAgICAgICAgICB8fCAoaXNBbmRyb2lkICYmIC9NUVFCcm93c2VyL2kudGVzdCh1KSAmJiAvUVEvaS50ZXN0KHUuc3BsaXQoJ01RUUJyb3dzZXInKSkpCiAgICAgICAgICAgIC8vIHx8IHRydWUKICAgICAgICAgICAgKXsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgJCgnLnNoYWRvdy1ib3gnKS5zaG93KCk7CiAgICAJICAgIAlkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PSdoaWRkZW4nOyAgICAKCSAgICAJICAgIGRvY3VtZW50LnRpdGxlID0gJ+a4qemmqOaPkOekuic7CiAgICAJICAgIAl2YXIgbW89ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO307ICAgIAogICAgICAgICAgICAJZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIixtbyx7cGFzc2l2ZTpmYWxzZX0pOy8v56aB5q2i6aG16Z2i5ruR5YqoCiAgICAgICAgICAgIAkKICAgICAgICAgICAgCSQoJyNjb3B5X2RpdicpLnNob3coKTsKICAgICAgICAgICAgCWlmKGlzQW5kcm9pZCl7CiAgICAgICAgICAgIAkgICAgbG9jYXRpb24uaHJlZiA9ICdtdHRicm93c2VyOi8vdXJsPScrbG9jYXRpb24uaHJlZjsKICAgICAgICAgICAgCX0KICAgICAgICAgICAgICAgIAogICAgICAgIH1lbHNlewogICAgICAgICAgICAKCQkgICAgJCgnI2FuZHJvaWRfZG93bmxvYWQnKS5zaG93KCk7CgkJCWNoZWNrX3NhZmFyaSgpOwoJCSAgICAkKCcubm90X2Rvd25faW1nJykuY2xpY2soZnVuY3Rpb24oKSB7CgkJICAgICAgICB2YXIgdXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7CgkJICAgICAgICBjb3B5VGV4dCh1cmwpOwoJCSAgICB9KTsKCQkgICAgCiAgICAgICAgfQogIAoJfSk7IAogIAogICAgZnVuY3Rpb24gY29weVRleHQodGV4dCkgewogICAgICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCd2YWx1ZScsIHRleHQpOwogICAgICAgIGlucHV0LnNlbGVjdCgpOwogICAgICAgIHZhciBvbGRDb250ZW50RWRpdGFibGUgPSBpbnB1dC5jb250ZW50RWRpdGFibGU7CiAgICAgICAgdmFyIG9sZFJlYWRPbmx5ID0gaW5wdXQucmVhZE9ubHk7CiAgICAgICAgdmFyIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgICAgICBpbnB1dC5jb250ZW50RWRpdGFibGUgPSB0cnVlOwogICAgICAgIGlucHV0LnJlYWRPbmx5ID0gZmFsc2U7CiAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGlucHV0KTsKICAgICAgICB2YXIgcyA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgICAgICBzLnJlbW92ZUFsbFJhbmdlcygpOwogICAgICAgIHMuYWRkUmFuZ2UocmFuZ2UpOwogICAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKDAsIDk5OTk5OSk7IC8vIEEgYmlnIG51bWJlciwgdG8gY292ZXIgYW55dGhpbmcgdGhhdCBjb3VsZCBiZSBpbnNpZGUgdGhlIGVsZW1lbnQuCiAgICAgICAgaW5wdXQuY29udGVudEVkaXRhYmxlID0gb2xkQ29udGVudEVkaXRhYmxlOwogICAgICAgIGlucHV0LnJlYWRPbmx5ID0gb2xkUmVhZE9ubHk7CiAgICAgICAgaWYgKGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5JykpIHsKICAgICAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTsKICAgICAgICAgICAgY29uc29sZS5sb2coZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKSk7CgkJICAgIERpYWxvZy5pbml0KCflpI3liLbmiJDlip8nLCAyMDAwKTsKICAgICAgICAgICAgLy8gJCgnLm5vdF9kb3duX2JvZHknKS5oaWRlKCk7CiAgICAgICAgICAgCiAgICAgICAgfQogICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaW5wdXQpOwogICAgfQo8L3NjcmlwdD4KPGRpdiBzdHlsZT0iZGlzcGxheTpibG9jazsiPjwvZGl2PgoKCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBpZD0id2luZG93QkciPgogICAgPCEtLSDlvLnlh7rmoYYgLS0+CgogICAgPGRpdiBjbGFzcz0iY29udGVudCI+CiAgICAgICAgPGRpdiBhY3Rpb249IiIgY2xhc3M9ImxvZ2luLWZvcm0iIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtaWNvbiI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9InVzZXJuYW1lIiB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBwbGFjZWhvbGRlcj0i5omL5py65Y+3Ii8+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9InVzZXJuYW1lIiBzdHlsZT0iY29sb3I6IHJlZDtkaXNwbGF5OiBub25lIj48L3NwYW4+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgcGFzc3dkIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWljb24iIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0Ij4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0iY29kZSIgdHlwZT0idGV4dCIgIGNsYXNzPSJmb3JtLWNvbnRyb2wgcGxhY2Vob2xkZXItbm8tZml4IiBwbGFjZWhvbGRlcj0i6aqM6K+B56CBIi8+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBuYW1lPSJidG5jb2RlIiBvbmNsaWNrPSJzZW5kVmVyaWZ5Q29kZSgpIiB0eXBlPSJidXR0b24iPuiOt+WPlumqjOivgeeggTwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImNvZGUiIHN0eWxlPSJjb2xvcjogcmVkO2Rpc3BsYXk6IG5vbmUiPjwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWljb24iPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJwYXNzd29yZCIgdHlwZT0icGFzc3dvcmQiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIHBsYWNlaG9sZGVyPSLor7fovpPlhaXlr4bnoIEiLz4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0icGFzc3dvcmQiIHN0eWxlPSJjb2xvcjogcmVkO2Rpc3BsYXk6IG5vbmUiPjwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1pY29uIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0icmVwYXNzd29yZCIgdHlwZT0icGFzc3dvcmQiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIHBsYWNlaG9sZGVyPSLor7flho3ovpPlhaXlr4bnoIEiLz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1pY29uIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0iaW52aXRlciIgdHlwZT0iaGlkZGVuIiByZWFkb25seSBjbGFzcz0iZm9ybS1jb250cm9sIiB2YWx1ZT0iIi8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJpbnZpdGVfaWQiICB0eXBlPSJ0ZXh0IiByZWFkb25seSAgY2xhc3M9ImZvcm0tY29udHJvbCIgcGxhY2Vob2xkZXI9IuaOqOiNkOS6uklE77yaIi8+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9Imludml0ZXIiIHN0eWxlPSJjb2xvcjogcmVkO2Rpc3BsYXk6IG5vbmUiPjwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1pY29uIj4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG5hbWU9InN1Ym1pdCIgIHR5cGU9InN1Ym1pdCIgb25jbGljaz0icmVnaXN0ZXIoKSIgY2xhc3M9ImZvcm0tY29udHJvbCBzdWIiPuazqOWGjDwvYnV0dG9uPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1pY29uIGRvd25fYXBrIj4KICAgICAgICAgICAgICAgICAgICA8YSBzdHlsZT0iY29sb3I6IGdyZWVuIiBpZD0iY2xpY2tzdWxpYW4iIG9uY2xpY2s9J2NsaWNrU3VubGlhbigpJz7lt7LmnInotKblj7fnjqnlrrbor7fngrnlh7vov5nph4wgPC9hPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+Cjwvc2NyaXB0PgoKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgJCgnI2FuZHJvaWRfZG93bmxvYWQnKS5jbGljayhmdW5jdGlvbiAoKXsKICAgICAgICBsYXllci5vcGVuKHsKICAgICAgICAgICAgdHlwZToxLAogICAgICAgICAgICB0aXRsZTon5rOo5YaM6YCBOC04ODgnLAogICAgICAgICAgICBidG46J+WFs+mXrScsCiAgICAgICAgICAgIG1heG1pbjp0cnVlLAogICAgICAgICAgICBjb250ZW50OiQoJyN3aW5kb3dCRycpLmh0bWwoKSwKICAgICAgICB9KQogICAgICAgIGlmKHJlZ2lzLnR5cGU9PSdzJyl7CiAgICAgICAgICAgIGlmKHJlZ2lzLnBhY2thZ2VpZCl7CiAgICAgICAgICAgICAgICAkKCcjaW52aXRlX2lkJykuYXR0cigncGxhY2Vob2xkZXInLCAn5o6o6I2Q5Lq6SUTvvJonICsgcmVnaXMucGFja2FnZWlkKTsKICAgICAgICAgICAgfQogICAgICAgIH1lbHNlewogICAgICAgICAgICBpZihyZWdpcy5pbnZpdGVyKXsKICAgICAgICAgICAgICQoJyNpbnZpdGVfaWQnKS5hdHRyKCdwbGFjZWhvbGRlcicsICfmjqjojZDkurpJRO+8micgKyByZWdpcy5pbnZpdGVyKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgIH0pCiAgICAKICAgIGZ1bmN0aW9uIGNsaWNrU3VubGlhbiAoKSB7CiAgICAgICAgbGF5ZXIuY2xvc2VBbGwoKTsKICAgICAgICBpZiAob3MgPT0gMSkgewogICAgICAgICAgICAkKCcjZG93bmxvYWRfYnV0dG9uJykuY2xpY2soKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkKCcjZG9ud2xvYWRfdGYnKS5jbGljaygpOwogICAgICAgICAgICAvLyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYW5kcm9pZF9kb3dubG9hZCIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiOwogICAgICAgICAgICAvLyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicG9zdGVyX2lvc19ndWlkZSIpLnN0eWxlLmRpc3BsYXk9ImlubGluZS1ibG9jayI7CiAgICAgICAgfQogICAgfQogICAgCiAgICAgICAgdmFyIGRvd25sb2FkX3VybCA9IHdpbmRvdy5sb2NhdGlvbi5ob3N0OwovLyAgICAgICAgdmFyIHNtc19saW1pdCA9IDYwOwovLyAgICAgICAgdmFyIGlzX2NhcHRjaGEgPSAxOwoKICAgICAgICB2YXIgdSA9IG5hdmlnYXRvci51c2VyQWdlbnQ7CiAgICAgICAgLy8gaWYgKG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdtaWNyb21lc3NlbmdlcicpICE9PSAtMQogICAgICAgIC8vIHx8IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdxcScpICE9PSAtMSkKICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ21pY3JvbWVzc2VuZ2VyJykgIT09IC0xCiAgICAgICAgICAgIHx8IGlzUVFBUFAoKSkKICAgICAgICB7CiAgICAgICAgICAgICQoJy5zaGFkb3ctYm94Jykuc2hvdygpOwogICAgICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PSdoaWRkZW4nOwogICAgICAgICAgICBkb2N1bWVudC50aXRsZSA9ICfmuKnppqjmj5DnpLonOwogICAgICAgICAgICB2YXIgbW89ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO307CiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsbW8se3Bhc3NpdmU6ZmFsc2V9KTsvL+emgeatoumhtemdoua7keWKqAoKICAgICAgICAgICAgJCgnI2NvcHlfZGl2Jykuc2hvdygpOwogICAgICAgICAgICBpZihpc0FuZHJvaWQpewogICAgICAgICAgICAgICAgbG9jYXRpb24uaHJlZiA9ICdtdHRicm93c2VyOi8vdXJsPScrbG9jYXRpb24uaHJlZjsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICQoJy5jb250ZW50Jykuc2hvdygpOwogICAgICAgIH0KCiAgICAgICAgLy/liKTmlq3mmK/lkKZRUeWGhee9rua1j+iniOWZqO+8iOWQq0lPU+WSjEFuZHJpb2TvvIkKICAgICAgICBmdW5jdGlvbiBpc1FRQVBQKCl7CiAgICAgICAgICAgIHZhciBpc0lvc1FRID0gKCAvKGlQaG9uZXxpUGFkfGlQb2R8aU9TKS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgL1xzUVEvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKTsKICAgICAgICAgICAgdmFyIGlzQW5kcm9pZFFRID0gKCAvKEFuZHJvaWQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSAmJiAvTVFRQnJvd3Nlci9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgL1xzUVEvaS50ZXN0KChuYXZpZ2F0b3IudXNlckFnZW50KS5zcGxpdCgnTVFRQnJvd3NlcicpKSk7CiAgICAgICAgICAgIHJldHVybiBpc0lvc1FRIHx8IGlzQW5kcm9pZFFROwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gZ2V0UXVlcnlWYXJpYWJsZSh2YXJpYWJsZSkKICAgICAgICB7CiAgICAgICAgICAgIGxldCBxdWVyeSA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2guc3Vic3RyaW5nKDEpOwogICAgICAgICAgICBsZXQgdmFycyA9IHF1ZXJ5LnNwbGl0KCImIik7CiAgICAgICAgICAgIGZvciAobGV0IGk9MDtpPHZhcnMubGVuZ3RoO2krKykgewogICAgICAgICAgICAgICAgbGV0IHBhaXIgPSB2YXJzW2ldLnNwbGl0KCI9Iik7CiAgICAgICAgICAgICAgICBpZihwYWlyWzBdID09IHZhcmlhYmxlKXtyZXR1cm4gcGFpclsxXTt9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBsZXQgZnJvbSA9IGdldFF1ZXJ5VmFyaWFibGUoJ2Zyb20nKTsKICAgICAgLy8gIHZhciBwbGF0Zm9ybSA9IDE4ODsKICAgICAgIC8vIHZhciBpbnZpdGVyID0gJyc7CiAgICAgIC8vICB2YXIgcGFja2FnZWlkID0gJyc7CiAgICAgICAvLyB2YXIgdHlwZSA9ICdzJzsKICAgICAgICAvLyDorr7nva4g6YKA6K+356CB77yI5YWo5rCRaWTvvIkKICAgICAgICByZWdpcy5wbGF0Zm9ybT00MwogICAgICAgIHJlZ2lzLnNldEludml0ZXIoZnJvbSkKCiAgICAgICAgLy8kKCcjZG93bmxvYWRfYnV0dG9uJykuYXR0cignaHJlZicsIGRvd25sb2FkX3VybCArIHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpOwoKICAgICAgICAgICAgY29uc29sZS5sb2coJ3Byb21vdGVyJywpOwogICAgICAgICAgICBjb25zb2xlLmxvZygncGFja2FnZUlkJywxNzIwOCk7CiAgICAgICAgZnVuY3Rpb24gcmVnaXN0ZXIoKXsKICAgICAgICAgICAgaWYocmVnaXMuaW52aXRlcj09JycpewogICAgICAgICAgICAgICAgcmVnaXMuaW52aXRlcj0iIgogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKHJlZ2lzLnBhY2thZ2VpZD09JycpewogICAgICAgICAgICAgICAgcmVnaXMucGFja2FnZWlkPSIxNzIwOCIKICAgICAgICAgICAgfQogICAgICAgICAgICByZWdpcy5yZWdpc3RlcigpOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBzZW5kVmVyaWZ5Q29kZSgpewogICAgICAgICAgICByZWdpcy5pc0ZpcnN0ID0gMDsKICAgICAgICAgICAgcmVnaXMuY291bnRkb3duID0gNjA7CiAgICAgICAgICAgIHJlZ2lzLnNlbmRWZXJpZnlDb2RlKCk7CiAgICAgICAgfQo8L3NjcmlwdD4KPC9ib2R5PgoKPC9odG1sPg==