PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPjxodG1sPjxoZWFkPjx0aXRsZT5BcGFjaGUgU2F2YW4vQyAtIFByb2plY3QgVGVhbTwvdGl0bGU+PHN0eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0iYWxsIj4KICAgICAgICAgIEBpbXBvcnQgdXJsKCIuL3N0eWxlL21hdmVuLWJhc2UuY3NzIik7CiAgICAgICAgICAKCQkJICAgIEBpbXBvcnQgdXJsKCIuL3N0eWxlL21hdmVuLWNsYXNzaWMuY3NzIik7PC9zdHlsZT48bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4vc3R5bGUvcHJpbnQuY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InByaW50Ij48L2xpbms+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+PC9tZXRhPjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAJICBmdW5jdGlvbiBvZmZzZXREYXRlKGlkLCBvZmZzZXQpIHsKCiAgICAgICAgICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpIDsKICAgICAgICAgICAgdmFyIG5vd1RpbWUgPSBub3cuZ2V0VGltZSgpIDsKICAgICAgICAgICAgdmFyIGxvY2FsT2Zmc2V0ID0gbm93LmdldFRpbWV6b25lT2Zmc2V0KCkgOwogICAgICAgICAgICB2YXIgZGV2ZWxvcGVyVGltZSA9IG5vd1RpbWUgKyAob2Zmc2V0ICogNjAgKiA2MCAqIDEwMDApICsgKGxvY2FsT2Zmc2V0ICogNjAgKiAxMDAwKSA7CiAgICAgICAgICAgIHZhciBkZXZlbG9wZXJEYXRlID0gbmV3IERhdGUoZGV2ZWxvcGVyVGltZSkgOwoKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmlubmVySFRNTCA9IGRldmVsb3BlckRhdGU7CiAgICAgICAgICB9CiAgCQogIAkgIGZ1bmN0aW9uIGluaXQoKSB7CgkgICAgCSAgICAgICAJICAgICAgICAgCSAgICAgICAgICAgICAgIAkgICAgICAgCSAgICAgICAgIAkgICAgICAgICAgICAgICAJICAgICAgIAkgICAgICAgICAJICAgICAgICAgICAgICAgCSAgICAgICAJICAgICAgICAgCSAgICAgICAgICAgICAgIAkgICAgICAgCSAgICAgICAgIAkgICAgICAgICAgICAgICAJICAgICAgIAkgICAgICAgICAJICAgICAgICAgICAgICAgCSAgICAgICAJICAgICAgICAgCSAgICAgICAgICAgICAgICAgICAgIH0KICAgIDwvc2NyaXB0PjwvaGVhZD48Ym9keSBjbGFzcz0iY29tcG9zaXRlIiBvbmxvYWQ9ImluaXQoKTsiPjxkaXYgaWQ9ImJhbm5lciI+PGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnLyIgaWQ9Im9yZ2FuaXphdGlvbkxvZ28iPjxpbWcgYWx0PSJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgc3JjPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvaW1hZ2VzL2FzZi1sb2dvLmdpZiI+PC9pbWc+PC9hPjxhIGhyZWY9Imh0dHA6Ly93cy5hcGFjaGUub3JnL3NhdmFuL2MiIGlkPSJwcm9qZWN0TG9nbyI+PGltZyBhbHQ9IkFwYWNoZSBTYXZhbi9DIiBzcmM9Imh0dHA6Ly93cy5hcGFjaGUub3JnL3NhdmFuL2MvaW1hZ2VzL3NhdmFuY19sb2dvLmpwZyI+PC9pbWc+PC9hPjxkaXYgY2xhc3M9ImNsZWFyIj48aHI+PC9ocj48L2Rpdj48L2Rpdj48ZGl2IGlkPSJicmVhZGNydW1icyI+PGRpdiBjbGFzcz0ieGxlZnQiPgogICAgICAgICAgICAgICAgCUxhc3QgcHVibGlzaGVkOiAyOCBNYXkgMjAwNwogICAgICAgICAgICAgICAgICA8L2Rpdj48ZGl2IGNsYXNzPSJ4cmlnaHQiPjwvZGl2PjxkaXYgY2xhc3M9ImNsZWFyIj48aHI+PC9ocj48L2Rpdj48L2Rpdj48ZGl2IGlkPSJsZWZ0Q29sdW1uIj48ZGl2IGlkPSJuYXZjb2x1bW4iPjxkaXYgaWQ9Im1lbnVBcGFjaGVfU2F2YW5fQyI+PGg1PkFwYWNoZSBTYXZhbi9DPC9oNT48dWw+PGxpIGNsYXNzPSJub25lIj48YSBocmVmPSJpbmRleC5odG1sIj5BcGFjaGUgU2F2YW4vQyBIb21lPC9hPjwvbGk+PGxpIGNsYXNzPSJleHBhbmRlZCI+PGEgaHJlZj0iZG93bmxvYWQuY2dpIj5Eb3dubG9hZCBTYXZhbi9DPC9hPjx1bD48bGkgY2xhc3M9Im5vbmUiPjxhIGhyZWY9ImRvd25sb2FkLmNnaSI+UmVsZWFzZXM8L2E+PC9saT48L3VsPjwvbGk+PGxpIGNsYXNzPSJleHBhbmRlZCI+PGEgaHJlZj0ibGlzdHNfaXNzdWVzLmh0bWwiPkdldCBJbnZvbHZlZDwvYT48dWw+PGxpIGNsYXNzPSJub25lIj48YSBocmVmPSJsaXN0c19pc3N1ZXMuaHRtbCI+TWFpbGluZyBMaXN0cyAmYW1wOyBJc3N1ZSBUcmFja2luZzwvYT48L2xpPjxsaSBjbGFzcz0ibm9uZSI+PGEgaHJlZj0ic3ZuLmh0bWwiPkNoZWNrb3V0IFNvdXJjZSBDb2RlPC9hPjwvbGk+PC91bD48L2xpPjxsaSBjbGFzcz0iZXhwYW5kZWQiPjxhIGhyZWY9ImNvZGluZ19jb252ZW50aW9ucy5odG1sIj5EZXZlbG9wZXIgR3VpZGVsaW5lczwvYT48dWw+PGxpIGNsYXNzPSJub25lIj48YSBocmVmPSJjb2RpbmdfY29udmVudGlvbnMuaHRtbCI+Q29kaW5nIENvbnZlbnRpb248L2E+PC9saT48bGkgY2xhc3M9Im5vbmUiPjxhIGhyZWY9InZlcnNpb25pbmcuaHRtbCI+VmVyc2lvbm5pbmc8L2E+PC9saT48L3VsPjwvbGk+PGxpIGNsYXNzPSJleHBhbmRlZCI+PGEgaHJlZj0idGVhbS1saXN0Lmh0bWwiPlByb2plY3QgSW5mb3JtYXRpb248L2E+PHVsPjxsaSBjbGFzcz0ibm9uZSI+PGEgaHJlZj0idGVhbS1saXN0Lmh0bWwiPlByb2plY3QgVGVhbTwvYT48L2xpPjxsaSBjbGFzcz0ibm9uZSI+PGEgaHJlZj0iaHR0cDovL3N2bi5hcGFjaGUub3JnL3JlcG9zL2FzZi93ZWJzZXJ2aWNlcy9zYW5kZXNoYS90cnVuay9jIiBjbGFzcz0iZXh0ZXJuYWxMaW5rIiB0aXRsZT0iRXh0ZXJuYWwgTGluayI+U291cmNlIENvZGU8L2E+PC9saT48L3VsPjwvbGk+PC91bD48L2Rpdj48YSBocmVmPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy8iIHRpdGxlPSJCdWlsdCBieSBNYXZlbiIgaWQ9InBvd2VyZWRCeSI+PGltZyBhbHQ9IkJ1aWx0IGJ5IE1hdmVuIiBzcmM9Ii4vaW1hZ2VzL2xvZ29zL21hdmVuLWJ1dHRvbi0xLnBuZyI+PC9pbWc+PC9hPjwvZGl2PjwvZGl2PjxkaXYgaWQ9ImJvZHlDb2x1bW4iPjxkaXYgY2xhc3M9ImNvbnRlbnRCb3giPjxkaXYgY2xhc3M9InNlY3Rpb24iPjxhIG5hbWU9IlRoZV9UZWFtIj48L2E+PGgyPlRoZSBUZWFtPC9oMj48cD4KICAgICAgICBBIHN1Y2Nlc3NmdWwgcHJvamVjdCByZXF1aXJlcyBtYW55IHBlb3BsZSB0byBwbGF5IG1hbnkgcm9sZXMuCiAgICAgICAgU29tZSBtZW1iZXJzIHdyaXRlIGNvZGUgb3IgZG9jdW1lbnRhdGlvbiwgd2hpbGUgb3RoZXJzIGFyZQogICAgICAgIHZhbHVhYmxlIGFzIHRlc3RlcnMsIHN1Ym1pdHRpbmcgcGF0Y2hlcyBhbmQgc3VnZ2VzdGlvbnMuCiAgICAgIDwvcD48cD4KICAgICAgICBUaGUgdGVhbSBpcyBjb21wcmlzZWQgb2YgPGEgaHJlZj0iI01lbWJlcnMiPk1lbWJlcnM8L2E+CiAgICAgICAgYW5kIDxhIGhyZWY9IiNDb250cmlidXRvcnMiPkNvbnRyaWJ1dG9yczwvYT4uICBNZW1iZXJzIAogICAgICAgIGhhdmUgZGlyZWN0IGFjY2VzcyB0byB0aGUgc291cmNlIG9mIGEgcHJvamVjdCBhbmQgYWN0aXZlbHkKICAgICAgICBldm9sdmUgdGhlIGNvZGUtYmFzZS4gIENvbnRyaWJ1dG9ycyBpbXByb3ZlIHRoZSBwcm9qZWN0CiAgICAgICAgdGhyb3VnaCBzdWJtaXNzaW9uIG9mIHBhdGNoZXMgYW5kIHN1Z2dlc3Rpb25zIHRvIHRoZSBNZW1iZXJzLgogICAgICAgIFRoZSBudW1iZXIgb2YgQ29udHJpYnV0b3JzIHRvIHRoZSBwcm9qZWN0IGlzIHVuYm91bmRlZC4KICAgICAgICBHZXQgaW52b2x2ZWQgdG9kYXkuICBBbGwgY29udHJpYnV0aW9ucyB0byB0aGUgcHJvamVjdCBhcmUKICAgICAgICBncmVhdGx5IGFwcHJlY2lhdGVkLgogICAgICA8L3A+PGRpdiBjbGFzcz0ic3Vic2VjdGlvbiI+PGEgbmFtZT0iTWVtYmVycyI+PC9hPjxoMz5NZW1iZXJzPC9oMz48cD4KICAgICAgICBUaGUgZm9sbG93aW5nIGlzIGEgbGlzdCBvZiBkZXZlbG9wZXJzIHdpdGggY29tbWl0IHByaXZpbGVnZXMgdGhhdCBoYXZlIAogICAgICAgIGRpcmVjdGx5IGNvbnRyaWJ1dGVkIHRvIHRoZSBwcm9qZWN0IGluIG9uZSB3YXkgb3IgYW5vdGhlci4gIAogICAgICA8L3A+PHRhYmxlIGNsYXNzPSJib2R5VGFibGUiPjx0aGVhZD4KICAgICAgICA8dHIgY2xhc3M9ImIiPjx0aD5OYW1lPC90aD48dGg+SWQ8L3RoPjx0aD5FbWFpbDwvdGg+PHRoPk9yZ2FuaXphdGlvbjwvdGg+PHRoPlJvbGVzPC90aD48dGg+VFogT2Zmc2V0PC90aD48dGg+VGltZTwvdGg+PC90cj4KICAgICAgICA8L3RoZWFkPjx0Ym9keT4KICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0iYSI+PHRkPkRhbWl0aGEgS3VtYXJhZ2U8L3RkPjx0ZD48YSBuYW1lPSJkYW1pdGhhIj48L2E+ZGFtaXRoYTwvdGQ+PHRkPjxhIGhyZWY9Im1haWx0bzpkYW1pdGhhIEFUIHdzbzIuY29tIj5kYW1pdGhhIEFUIHdzbzIuY29tPC9hPjwvdGQ+PHRkPldTTzI8L3RkPjx0ZD4KICAgICAgICAgICAgICAgICAgICA8L3RkPjx0ZD48L3RkPjx0ZD48c3BhbiBpZD0iZGV2ZWxvcGVyLWRhbWl0aGEiPlVua25vd248L3NwYW4+PC90ZD48L3RyPgogICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJiIj48dGQ+U2FtaXNhIEFiZXlzaW5naGU8L3RkPjx0ZD48YSBuYW1lPSJzYW1pc2EiPjwvYT5zYW1pc2E8L3RkPjx0ZD48YSBocmVmPSJtYWlsdG86c2FtaXNhIEFUIHdzbzIuY29tIj5zYW1pc2EgQVQgd3NvMi5jb208L2E+PC90ZD48dGQ+V1NPMjwvdGQ+PHRkPgogICAgICAgICAgICAgICAgICAgIDwvdGQ+PHRkPjwvdGQ+PHRkPjxzcGFuIGlkPSJkZXZlbG9wZXItc2FtaXNhIj5Vbmtub3duPC9zcGFuPjwvdGQ+PC90cj4KICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0iYSI+PHRkPk1hbGluZGEgS2F1c2hhbHllIEthcHVydWdlPC90ZD48dGQ+PGEgbmFtZT0ia2F1c2hhbHllIj48L2E+a2F1c2hhbHllPC90ZD48dGQ+PGEgaHJlZj0ibWFpbHRvOmthdXNoYWx5ZSBBVCB3c28yLmNvbSI+a2F1c2hhbHllIEFUIHdzbzIuY29tPC9hPjwvdGQ+PHRkPldTTzI8L3RkPjx0ZD4KICAgICAgICAgICAgICAgICAgICA8L3RkPjx0ZD48L3RkPjx0ZD48c3BhbiBpZD0iZGV2ZWxvcGVyLWthdXNoYWx5ZSI+VW5rbm93bjwvc3Bhbj48L3RkPjwvdHI+CiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9ImIiPjx0ZD5TYW5qYXlhIFJhdGhuYXdlZXJhPC90ZD48dGQ+PGEgbmFtZT0icGluaSI+PC9hPnBpbmk8L3RkPjx0ZD48YSBocmVmPSJtYWlsdG86c2FuamF5YSBBVCB3c28yLmNvbSI+c2FuamF5YSBBVCB3c28yLmNvbTwvYT48L3RkPjx0ZD5XU08yPC90ZD48dGQ+CiAgICAgICAgICAgICAgICAgICAgPC90ZD48dGQ+PC90ZD48dGQ+PHNwYW4gaWQ9ImRldmVsb3Blci1waW5pIj5Vbmtub3duPC9zcGFuPjwvdGQ+PC90cj4KICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0iYSI+PHRkPkR1c2hzaGFudGhhIENoYW5kcmFkYXNhPC90ZD48dGQ+PGEgbmFtZT0iZHVzaHNoYW50aGEiPjwvYT5kdXNoc2hhbnRoYTwvdGQ+PHRkPjxhIGhyZWY9Im1haWx0bzpkdXNoc2hhbnRoYSBBVCB3c28yLmNvbSI+ZHVzaHNoYW50aGEgQVQgd3NvMi5jb208L2E+PC90ZD48dGQ+V1NPMjwvdGQ+PHRkPgogICAgICAgICAgICAgICAgICAgIDwvdGQ+PHRkPjwvdGQ+PHRkPjxzcGFuIGlkPSJkZXZlbG9wZXItZHVzaHNoYW50aGEiPlVua25vd248L3NwYW4+PC90ZD48L3RyPgogICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJiIj48dGQ+TmFuZGlrYSBKYXlhd2FyZGVuYTwvdGQ+PHRkPjxhIG5hbWU9Im5hbmRpa2EiPjwvYT5uYW5kaWthPC90ZD48dGQ+PGEgaHJlZj0ibWFpbHRvOm5hbmRpa2EgQVQgd3NvMi5jb20iPm5hbmRpa2EgQVQgd3NvMi5jb208L2E+PC90ZD48dGQ+V1NPMjwvdGQ+PHRkPgogICAgICAgICAgICAgICAgICAgIDwvdGQ+PHRkPjwvdGQ+PHRkPjxzcGFuIGlkPSJkZXZlbG9wZXItbmFuZGlrYSI+VW5rbm93bjwvc3Bhbj48L3RkPjwvdHI+CiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9ImEiPjx0ZD5EaW5lc2ggUHJlbWFsYWw8L3RkPjx0ZD48YSBuYW1lPSJkaW5lc2giPjwvYT5kaW5lc2g8L3RkPjx0ZD48YSBocmVmPSJtYWlsdG86ZGluZXNoIEFUIHdzbzIuY29tIj5kaW5lc2ggQVQgd3NvMi5jb208L2E+PC90ZD48dGQ+V1NPMjwvdGQ+PHRkPgogICAgICAgICAgICAgICAgICAgIDwvdGQ+PHRkPjwvdGQ+PHRkPjxzcGFuIGlkPSJkZXZlbG9wZXItZGluZXNoIj5Vbmtub3duPC9zcGFuPjwvdGQ+PC90cj4KICAgICAgICAgICAgICAgIDwvdGJvZHk+PC90YWJsZT48L2Rpdj48ZGl2IGNsYXNzPSJzdWJzZWN0aW9uIj48YSBuYW1lPSJDb250cmlidXRvcnMiPjwvYT48aDM+Q29udHJpYnV0b3JzPC9oMz48cD4KICAgICAgICBUaGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgcGVvcGxlIGhhdmUgY29udHJpYnV0ZWQgdG8gdGhpcyBwcm9qZWN0CiAgICAgICAgdGhyb3VnaCB0aGUgd2F5IG9mIHN1Z2dlc3Rpb25zLCBwYXRjaGVzIG9yIGRvY3VtZW50YXRpb24uCiAgICAgIDwvcD48dGFibGUgY2xhc3M9ImJvZHlUYWJsZSI+PHRoZWFkPgogICAgICAgIDx0ciBjbGFzcz0iYiI+PHRoPk5hbWU8L3RoPjx0aD5FbWFpbDwvdGg+PHRoPk9yZ2FuaXphdGlvbjwvdGg+PHRoPlJvbGVzPC90aD48L3RyPgogICAgICAgIDwvdGhlYWQ+PHRib2R5PgogICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJhIj48dGQ+SXNoYW4gRGUgU2lsdmE8L3RkPjx0ZD48YSBocmVmPSJtYWlsdG86aV9kZV9zaWx2YSBBVCB5YWhvby5jb20iPmlfZGVfc2lsdmEgQVQgeWFob28uY29tPC9hPjwvdGQ+PHRkPjwvdGQ+PHRkPgogICAgICAgICAgICAgICAgICAgIDxicj48L2JyPgogICAgICAgICAgICAgICAgICAgIDwvdGQ+PC90cj4KICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0iYiI+PHRkPkJ1ZGRpa2EgU2VtYXNpbmdoZTwvdGQ+PHRkPjxhIGhyZWY9Im1haWx0bzpidWRkaGlrYSBBVCB3c28yLmNvbSI+YnVkZGhpa2EgQVQgd3NvMi5jb208L2E+PC90ZD48dGQ+PC90ZD48dGQ+CiAgICAgICAgICAgICAgICAgICAgPGJyPjwvYnI+CiAgICAgICAgICAgICAgICAgICAgPC90ZD48L3RyPgogICAgICAgICAgICAgICAgPC90Ym9keT48L3RhYmxlPjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9ImNsZWFyIj48aHI+PC9ocj48L2Rpdj48ZGl2IGlkPSJmb290ZXIiPjxkaXYgY2xhc3M9InhyaWdodCI+qSAyMDA1LTIwMDcsIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uPC9kaXY+PGRpdiBjbGFzcz0iY2xlYXIiPjxocj48L2hyPjwvZGl2PjwvZGl2PjwvYm9keT48L2h0bWw+