PGh0bWw+CjxoZWFkPgoJPHRpdGxlPkJPT1NUX1BQX0xJU1RfRk9SX0VBQ0hfSV9SPC90aXRsZT4KCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uL3N0eWxlcy5jc3MiPgo8L2hlYWQ+Cjxib2R5PgoJPGRpdiBzdHlsZT0ibWFyZ2luLWxlZnQ6ICAwcHg7Ij4KCQlUaGUgPGI+Qk9PU1RfUFBfTElTVF9GT1JfRUFDSF9JX1I8L2I+IG1hY3JvIHJlcGVhdHMgYSBtYWNybyBmb3IgZWFjaCBlbGVtZW50IGluIGEgPGk+bGlzdDwvaT4uJm5ic3A7CgkJSXQgcmVlbnRlcnMgPGI+Qk9PU1RfUFBfRk9SPC9iPiB3aXRoIG1heGltdW0gZWZmaWNpZW5jeS4KCTwvZGl2PgoJPGg0PlVzYWdlPC9oND4KCQk8ZGl2IGNsYXNzPSJjb2RlIj4KCQkJPGI+Qk9PU1RfUFBfTElTVF9GT1JfRUFDSF9JX1I8L2I+KDxpPnI8L2k+LCA8aT5tYWNybzwvaT4sIDxpPmRhdGE8L2k+LCA8aT5saXN0PC9pPikKCQk8L2Rpdj4KCTxoND5Bcmd1bWVudHM8L2g0PgoJCTxkbD4KCQkJPGR0PnI8L2R0PgoJCQk8ZGQ+CgkJCQlUaGUgbmV4dCBhdmFpbGFibGUgPGI+Qk9PU1RfUFBfRk9SPC9iPiByZXBldGl0aW9uLgoJCQk8L2RkPgoJCQk8ZHQ+bWFjcm88L2R0PgoJCQk8ZGQ+CgkJCQlBIG1hY3JvIG9mIHRoZSBmb3IgPGk+bWFjcm88L2k+KDxpPnI8L2k+LCA8aT5kYXRhPC9pPiwgPGk+aTwvaT4sIDxpPmVsZW08L2k+KS4mbmJzcDsKCQkJCVRoaXMgbWFjcm8gaXMgZXhwYW5kZWQgYnkgPGI+Qk9PU1RfUFBfTElTVF9GT1JfRUFDSF9JPC9iPiB3aXRoIGVhY2ggZWxlbWVudCBpbiA8aT5saXN0PC9pPi4mbmJzcDsKCQkJCUl0IGlzIGV4cGFuZGVkIHdpdGggdGhlIG5leHQgYXZhaWxhYmxlIDxiPkJPT1NUX1BQX0ZPUjwvYj4gcmVwZXRpdGlvbiwgdGhlIGF1eGlsaWFyeSA8aT5kYXRhPC9pPiwgdGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGVsZW1lbnQsIGFuZCB0aGUgY3VycmVudCBlbGVtZW50LgoJCQk8L2RkPgoJCQk8ZHQ+ZGF0YTwvZHQ+CgkJCTxkZD4KCQkJCUF1eGlsaWFyeSBkYXRhIHBhc3NlZCB0byA8aT5tYWNybzwvaT4uCgkJCTwvZGQ+CgkJCTxkdD5saXN0PC9kdD4KCQkJPGRkPgoJCQkJVGhlIDxpPmxpc3Q8L2k+IGZvciB3aGljaCA8aT5tYWNybzwvaT4gd2lsbCBiZSBpbnZva2VkIG9uIGVhY2ggZWxlbWVudC4KCQkJPC9kZD4KCQk8L2RsPgoJPGg0PlJlbWFya3M8L2g0PgoJCTxkaXY+CgkJCVRoaXMgbWFjcm8gaXMgYSByZXBldGl0aW9uIGNvbnN0cnVjdC4mbmJzcDsKCQkJSWYgPGk+bGlzdDwvaT4gaXMgKDxpPmE8L2k+LCAoPGk+YjwvaT4sICg8aT5jPC9pPiwgPGI+Qk9PU1RfUFBfTklMPC9iPikpKSwgaXQgZXhwYW5kcyB0byB0aGUgc2VxdWVuY2U6CgkJCTxkaXY+CgkJCQk8aT5tYWNybzwvaT4oPGk+cjwvaT4sIDxpPmRhdGE8L2k+LCA8aT4wPC9pPiwgPGk+YTwvaT4pIDxpPm1hY3JvPC9pPig8aT5yPC9pPiwgPGk+ZGF0YTwvaT4sIDxpPjE8L2k+LCA8aT5iPC9pPikgPGk+bWFjcm88L2k+KDxpPnI8L2k+LCA8aT5kYXRhPC9pPiwgPGk+MjwvaT4sIDxpPmM8L2k+KQoJCQk8L2Rpdj4KCQk8L2Rpdj4KCTxoND5TZWUgQWxzbzwvaDQ+CgkJPHVsPgoJCQk8bGk+PGEgaHJlZj0ibGlzdF9mb3JfZWFjaF9pLmh0bWwiPkJPT1NUX1BQX0xJU1RfRk9SX0VBQ0hfSTwvYT48L2xpPgoJCTwvdWw+Cgk8aDQ+UmVxdWlyZW1lbnRzPC9oND4KCQk8ZGl2PgoJCQk8Yj5IZWFkZXI6PC9iPiAmbmJzcDs8YSBocmVmPSIuLi9oZWFkZXJzL2xpc3QvZm9yX2VhY2hfaS5odG1sIj4mbHQ7Ym9vc3QvcHJlcHJvY2Vzc29yL2xpc3QvZm9yX2VhY2hfaS5ocHAmZ3Q7PC9hPgoJCTwvZGl2PgoJPGg0PlNhbXBsZSBDb2RlPC9oND4KPGRpdj48cHJlPgojaW5jbHVkZSAmbHQ7PGEgaHJlZj0iLi4vaGVhZGVycy9jYXQuaHRtbCI+Ym9vc3QvcHJlcHJvY2Vzc29yL2NhdC5ocHA8L2E+Jmd0OwojaW5jbHVkZSAmbHQ7PGEgaHJlZj0iLi4vaGVhZGVycy9saXN0L2FkdC5odG1sIj5ib29zdC9wcmVwcm9jZXNzb3IvbGlzdC9hZHQuaHBwPC9hPiZndDsKI2luY2x1ZGUgJmx0OzxhIGhyZWY9Ii4uL2hlYWRlcnMvbGlzdC9mb3JfZWFjaF9pLmh0bWwiPmJvb3N0L3ByZXByb2Nlc3Nvci9saXN0L2Zvcl9lYWNoX2kuaHBwPC9hPiZndDsKI2luY2x1ZGUgJmx0OzxhIGhyZWY9Ii4uL2hlYWRlcnMvcmVwZXRpdGlvbi9mb3IuaHRtbCI+Ym9vc3QvcHJlcHJvY2Vzc29yL3JlcGV0aXRpb24vZm9yLmhwcDwvYT4mZ3Q7CgojZGVmaW5lIExJU1QgKHgsICh5LCAoeiwgPGEgaHJlZj0ibmlsLmh0bWwiPkJPT1NUX1BQX05JTDwvYT4pKSkKCiNkZWZpbmUgTUFDUk9fMihyLCBkYXRhLCBpLCBlbGVtKSA8YSBocmVmPSJjYXQuaHRtbCI+Qk9PU1RfUFBfQ0FUPC9hPihlbGVtLCBpKQoKI2RlZmluZSBQUkVEKHIsIHN0YXRlKSA8YSBocmVmPSJsaXN0X2lzX2NvbnMuaHRtbCI+Qk9PU1RfUFBfTElTVF9JU19DT05TPC9hPihzdGF0ZSkKI2RlZmluZSBPUChyLCBzdGF0ZSkgPGEgaHJlZj0ibGlzdF9yZXN0Lmh0bWwiPkJPT1NUX1BQX0xJU1RfUkVTVDwvYT4oc3RhdGUpCiNkZWZpbmUgTUFDUk8ociwgc3RhdGUpIFsgPGEgaHJlZj0ibGlzdF9mb3JfZWFjaF9pX3IuaHRtbCI+Qk9PU1RfUFBfTElTVF9GT1JfRUFDSF9JX1I8L2E+KHIsIE1BQ1JPXzIsIF8sIHN0YXRlKSBdCgo8YSBocmVmPSJmb3IuaHRtbCI+Qk9PU1RfUFBfRk9SPC9hPihMSVNULCBQUkVELCBPUCwgTUFDUk8pCiAgIC8vIGV4cGFuZHMgdG8gW3gwIHkxIHoyXSBbeTAgejFdIFt6MF0KPC9wcmU+PC9kaXY+Cgk8aHIgc2l6ZT0iMSI+Cgk8ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDogMHB4OyI+CgkJPGk+qSBDb3B5cmlnaHQgPGEgaHJlZj0iaHR0cDovL3d3dy5ob3VzZW1hcnF1ZS5jb20iIHRhcmdldD0iX3RvcCI+SG91c2VtYXJxdWUgT3k8L2E+IDIwMDI8L2k+CgkJPC9icj48aT6pIENvcHlyaWdodCBQYXVsIE1lbnNvbmlkZXMgMjAwMjwvaT4KCTwvZGl2PgoJPGRpdiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDBweDsiPgoJCTxwPjxzbWFsbD5EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKCQlhY2NvbXBhbnlpbmcgZmlsZSA8YSBocmVmPSIuLi8uLi8uLi8uLi9MSUNFTlNFXzFfMC50eHQiPkxJQ0VOU0VfMV8wLnR4dDwvYT4gb3IKCQljb3B5IGF0IDxhIGhyZWY9CgkJImh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCI+d3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KTwvc21hbGw+PC9wPgoJPC9kaXY+CjwvYm9keT4KPC9odG1sPgo=