PGh0bWw+CjxoZWFkPgoJPHRpdGxlPkJPT1NUX1BQX0ZPUjwvdGl0bGU+Cgk8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi9zdHlsZXMuY3NzIj4KPC9oZWFkPgo8Ym9keT4KCTxkaXYgc3R5bGU9Im1hcmdpbi1sZWZ0OiAgMHB4OyI+CgkJVGhlIDxiPkJPT1NUX1BQX0ZPUjwvYj4gbWFjcm8gcmVwcmVzZW50cyBhIGdlbmVyYWxpemVkIGhvcml6b250YWwgcmVwZXRpdGlvbiBjb25zdHJ1Y3QuCgk8L2Rpdj4KCTxoND5Vc2FnZTwvaDQ+CgkJPGRpdiBjbGFzcz0iY29kZSI+CgkJCTxiPkJPT1NUX1BQX0ZPUjwvYj4oPGk+c3RhdGU8L2k+LCA8aT5wcmVkPC9pPiwgPGk+b3A8L2k+LCA8aT5tYWNybzwvaT4pCgkJPC9kaXY+Cgk8aDQ+QXJndW1lbnRzPC9oND4KCQk8ZGw+CgkJCTxkdD5zdGF0ZTwvZHQ+CgkJCTxkZD4KCQkJCVRoZSBpbml0aWFsIHN0YXRlLgoJCQk8L2RkPgoJCQk8ZHQ+cHJlZDwvZHQ+CgkJCTxkZD4KCQkJCUEgYmluYXJ5IHByZWRpY2F0ZSBvZiB0aGUgZm9ybSA8aT5wcmVkPC9pPig8aT5yPC9pPiwgPGk+c3RhdGU8L2k+KS4mbmJzcDsKCQkJCVRoaXMgbWFjcm8gbXVzdCBleHBhbmQgdG8gYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2Ugb2YgPGk+MDwvaT4gdG8gPGI+Qk9PU1RfUFBfTElNSVRfTUFHPC9iPi4mbmJzcDsKCQkJCTxiPkJPT1NUX1BQX0ZPUjwvYj4gcmVwZWF0ZWRseSBleHBhbmRzIDxpPm1hY3JvPC9pPiB3aGlsZSB0aGlzIHByZWRpY2F0ZSByZXR1cm5zIG5vbi16ZXJvLiZuYnNwOwoJCQkJVGhpcyBtYWNybyBpcyBjYWxsZWQgd2l0aCB0aGUgbmV4dCBhdmFpbGFibGUgPGI+Qk9PU1RfUFBfRk9SPC9iPiByZXBldGl0aW9uIGFuZCB0aGUgY3VycmVudCA8aT5zdGF0ZTwvaT4uCgkJCTwvZGQ+CgkJCTxkdD5vcDwvZHQ+CgkJCTxkZD4KCQkJCUEgYmluYXJ5IG9wZXJhdGlvbiBvZiB0aGUgZm9ybSA8aT5vcDwvaT4oPGk+cjwvaT4sIDxpPnN0YXRlPC9pPikuJm5ic3A7CgkJCQlUaGlzIG9wZXJhdGlvbiBpcyBleHBhbmRlZCBieSA8Yj5CT09TVF9QUF9GT1I8L2I+IHdpdGggdGhlIG5leHQgYXZhaWxhYmxlIDxiPkJPT1NUX1BQX0ZPUjwvYj4gcmVwZXRpdGlvbiBhbmQgdGhlIGN1cnJlbnQgPGk+c3RhdGU8L2k+LiZuYnNwOwoJCQkJVGhpcyBtYWNybyBpcyByZXBlYXRlZGx5IGFwcGxpZWQgdG8gdGhlIDxpPnN0YXRlPC9pPiwgZWFjaCB0aW1lIHByb2R1Y2luZyBhIG5ldyA8aT5zdGF0ZTwvaT4sIHVudGlsIDxpPnByZWQ8L2k+IHJldHVybnMgPGk+MDwvaT4uCgkJCTwvZGQ+CgkJCTxkdD5tYWNybzwvZHQ+CgkJCTxkZD4KCQkJCUEgYmluYXJ5IG1hY3JvIG9mIHRoZSBmb3JtIDxpPm1hY3JvPC9pPig8aT5yPC9pPiwgPGk+c3RhdGU8L2k+KS4mbmJzcDsKCQkJCVRoaXMgbWFjcm8gaXMgZXhwYW5kZWQgYnkgPGI+Qk9PU1RfUFBfRk9SPC9iPiB3aXRoIHRoZSBuZXh0IGF2YWlsYWJsZSA8Yj5CT09TVF9QUF9GT1I8L2I+IHJlcGV0aXRpb24gYW5kIHRoZSBjdXJyZW50IDxpPnN0YXRlPC9pPi4mbmJzcDsKCQkJCVRoaXMgbWFjcm8gaXMgaXMgcmVwZWF0ZWQgYnkgPGI+Qk9PU1RfUFBfRk9SPC9iPiB1bnRpbCA8aT5wcmVkPC9pPiByZXR1cm5zIDxpPjA8L2k+LgoJCQk8L2RkPgoJCTwvZGw+Cgk8aDQ+UmVtYXJrczwvaDQ+CgkJPGRpdj4KCQkJVGhpcyBtYWNybyBleHBhbmRzIHRvIHRoZSBzZXF1ZW5jZToKCQkJPGRpdj4KCQkJCTxpPm1hY3JvPC9pPig8aT5yPC9pPiwgPGk+c3RhdGU8L2k+KSA8aT5tYWNybzwvaT4oPGk+cjwvaT4sIDxpPm9wPC9pPig8aT5yPC9pPiwgPGk+c3RhdGU8L2k+KSkgLi4uIDxpPm1hY3JvPC9pPig8aT5yPC9pPiwgPGk+b3A8L2k+KDxpPnI8L2k+LCAuLi4gPGk+b3A8L2k+KDxpPnI8L2k+LCA8aT5zdGF0ZTwvaT4pIC4uLiApKQoJCQk8L2Rpdj4KCQk8L2Rpdj4KCQk8ZGl2PgoJCQlUaGUgPGk+cjwvaT4gdmFsdWUgdGhhdCBpcyBwYXNzZWQgdG8gPGk+cHJlZDwvaT4sIDxpPm9wPC9pPiwgYW5kIDxpPm1hY3JvPC9pPiByZXByZXNlbnRzIHRoZSBuZXh0IGF2YWlsYWJsZSA8Yj5CT09TVF9QUF9GT1I8L2I+IHJlcGV0aXRpb24uJm5ic3A7CgkJCU90aGVyIG1hY3JvcyB0aGF0IGhhdmUgPGI+X1I8L2I+IHN1ZmZpeCB2YXJpYW50cyBpbnRlcm5hbGx5IHVzZSA8Yj5CT09TVF9QUF9GT1I8L2I+LS1mb3IgZXhhbXBsZSwgPGI+Qk9PU1RfUFBfTElTVF9GT1JfRUFDSDwvYj4gYW5kIDxiPkJPT1NUX1BQX0xJU1RfRk9SX0VBQ0hfUjwvYj4uJm5ic3A7CgkJCVVzaW5nIHRoZXNlIDxiPl9SPC9iPiB2ZXJzaW9ucyBpcyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LCBidXQgcGFzc2luZyB0aGUgPGk+cjwvaT4gdmFsdWUgKHRoYXQgaXMgcGFzc2VkIHRvIDxpPnByZWQ8L2k+LCA8aT5vcDwvaT4sIGFuZCA8aT5tYWNybzwvaT4pIHRvIHRoZXNlIG1hY3JvcyBhbGxvd3MgdGhlbSB0byByZWVudGVyIDxiPkJPT1NUX1BQX0ZPUjwvYj4gd2l0aCBtYXhpbXVtIGVmZmljaWVuY3kuCgkJPC9kaXY+CgkJPGRpdj4KCQkJVG8gZGlyZWN0bHkgdXNlIHRoaXMgPGk+cjwvaT4gdmFsdWUsIHJhdGhlciB0aGFuIHNpbXBseSBwYXNzaW5nIGl0IHRvIGFub3RoZXIgbWFjcm8sIHNlZSA8Yj5CT09TVF9QUF9GT1JfPGk+cjwvaT48L2I+LgoJCTwvZGl2PgoJCTxkaXY+CgkJCVByZXZpb3VzbHksIHRoaXMgbWFjcm8gY291bGQgbm90IGJlIHVzZWQgcmVjdXJzaXZlbHkgaW5zaWRlIDxiPkJPT1NUX1BQX0ZPUjwvYj4uJm5ic3A7CgkJCVRoaXMgbGltaXRhdGlvbiBubyBsb25nZXIgZXhpc3RzLCBhcyB0aGUgbGlicmFyeSBjYW4gYXV0b21hdGljYWxseSBkZXRlY3QgdGhlIG5leHQgYXZhaWxhYmxlIDxiPkJPT1NUX1BQX0ZPUjwvYj4gcmVwZXRpdGlvbi4KCQk8L2Rpdj4KCTxoND5TZWUgQWxzbzwvaDQ+CgkJPHVsPgoJCQk8bGk+PGEgaHJlZj0iZm9yX3IuaHRtbCI+Qk9PU1RfUFBfRk9SXzxpPnI8L2k+PC9hPjwvbGk+CgkJCTxsaT48YSBocmVmPSJsaW1pdF9tYWcuaHRtbCI+Qk9PU1RfUFBfTElNSVRfTUFHPC9hPjwvbGk+CgkJPC91bD4KCTxoND5SZXF1aXJlbWVudHM8L2g0PgoJCTxkaXY+CgkJCTxiPkhlYWRlcjo8L2I+ICZuYnNwOzxhIGhyZWY9Ii4uL2hlYWRlcnMvcmVwZXRpdGlvbi9mb3IuaHRtbCI+Jmx0O2Jvb3N0L3ByZXByb2Nlc3Nvci9yZXBldGl0aW9uL2Zvci5ocHAmZ3Q7PC9hPgoJCTwvZGl2PgoJPGg0PlNhbXBsZSBDb2RlPC9oND4KPGRpdj48cHJlPgojaW5jbHVkZSAmbHQ7PGEgaHJlZj0iLi4vaGVhZGVycy9hcml0aG1ldGljL2luYy5odG1sIj5ib29zdC9wcmVwcm9jZXNzb3IvYXJpdGhtZXRpYy9pbmMuaHBwPC9hPiZndDsKI2luY2x1ZGUgJmx0OzxhIGhyZWY9Ii4uL2hlYWRlcnMvY29tcGFyaXNvbi9ub3RfZXF1YWwuaHRtbCI+Ym9vc3QvcHJlcHJvY2Vzc29yL2NvbXBhcmlzb24vbm90X2VxdWFsLmhwcDwvYT4mZ3Q7CiNpbmNsdWRlICZsdDs8YSBocmVmPSIuLi9oZWFkZXJzL3JlcGV0aXRpb24vZm9yLmh0bWwiPmJvb3N0L3ByZXByb2Nlc3Nvci9yZXBldGl0aW9uL2Zvci5ocHA8L2E+Jmd0OwojaW5jbHVkZSAmbHQ7PGEgaHJlZj0iLi4vaGVhZGVycy90dXBsZS9lbGVtLmh0bWwiPmJvb3N0L3ByZXByb2Nlc3Nvci90dXBsZS9lbGVtLmhwcDwvYT4mZ3Q7CgojZGVmaW5lIFBSRUQociwgc3RhdGUpIFwKICAgPGEgaHJlZj0ibm90X2VxdWFsLmh0bWwiPkJPT1NUX1BQX05PVF9FUVVBTDwvYT4oIFwKICAgICAgPGEgaHJlZj0idHVwbGVfZWxlbS5odG1sIj5CT09TVF9QUF9UVVBMRV9FTEVNPC9hPigyLCAwLCBzdGF0ZSksIFwKICAgICAgPGEgaHJlZj0iaW5jLmh0bWwiPkJPT1NUX1BQX0lOQzwvYT4oPGEgaHJlZj0idHVwbGVfZWxlbS5odG1sIj5CT09TVF9QUF9UVVBMRV9FTEVNPC9hPigyLCAxLCBzdGF0ZSkpIFwKICAgKSBcCiAgIC8qKi8KCiNkZWZpbmUgT1Aociwgc3RhdGUpIFwKICAgKCBcCiAgICAgIDxhIGhyZWY9ImluYy5odG1sIj5CT09TVF9QUF9JTkM8L2E+KDxhIGhyZWY9InR1cGxlX2VsZW0uaHRtbCI+Qk9PU1RfUFBfVFVQTEVfRUxFTTwvYT4oMiwgMCwgc3RhdGUpKSwgXAogICAgICA8YSBocmVmPSJ0dXBsZV9lbGVtLmh0bWwiPkJPT1NUX1BQX1RVUExFX0VMRU08L2E+KDIsIDEsIHN0YXRlKSBcCiAgICkgXAogICAvKiovCgojZGVmaW5lIE1BQ1JPKHIsIHN0YXRlKSA8YSBocmVmPSJ0dXBsZV9lbGVtLmh0bWwiPkJPT1NUX1BQX1RVUExFX0VMRU08L2E+KDIsIDAsIHN0YXRlKQoKPGEgaHJlZj0iZm9yLmh0bWwiPkJPT1NUX1BQX0ZPUjwvYT4oKDUsIDEwKSwgUFJFRCwgT1AsIE1BQ1JPKSAvLyBleHBhbmRzIHRvIDUgNiA3IDggOSAxMAo8L3ByZT48L2Rpdj4KCTxociBzaXplPSIxIj4KCTxkaXYgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwcHg7Ij4KCQk8aT6pIENvcHlyaWdodCA8YSBocmVmPSJodHRwOi8vd3d3LmhvdXNlbWFycXVlLmNvbSIgdGFyZ2V0PSJfdG9wIj5Ib3VzZW1hcnF1ZSBPeTwvYT4gMjAwMjwvaT4KCQk8L2JyPjxpPqkgQ29weXJpZ2h0IFBhdWwgTWVuc29uaWRlcyAyMDAyPC9pPgoJPC9kaXY+Cgk8ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDogMHB4OyI+CgkJPHA+PHNtYWxsPkRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQoJCWFjY29tcGFueWluZyBmaWxlIDxhIGhyZWY9Ii4uLy4uLy4uLy4uL0xJQ0VOU0VfMV8wLnR4dCI+TElDRU5TRV8xXzAudHh0PC9hPiBvcgoJCWNvcHkgYXQgPGEgaHJlZj0KCQkiaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0Ij53d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvYT4pPC9zbWFsbD48L3A+Cgk8L2Rpdj4KPC9ib2R5Pgo8L2h0bWw+Cg==