PGh0bWw+Cgk8aGVhZD4KCQk8dGl0bGU+Qk9PU1RfUFBfU0VRX0ZPUl9FQUNIX1BST0RVQ1Q8L3RpdGxlPgoJCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uL3N0eWxlcy5jc3MiPgoJPC9oZWFkPgoJPGJvZHk+CgkJPGRpdiBzdHlsZT0ibWFyZ2luLWxlZnQ6ICAwcHg7Ij4KCQkJVGhlIDxiPkJPT1NUX1BQX1NFUV9GT1JfRUFDSF9QUk9EVUNUPC9iPiBtYWNybyByZXBlYXRzIGEgbWFjcm8gZm9yIGVhY2ggCgkJCWNhcnRlc2lhbiBwcm9kdWN0IG9mIHNldmVyYWwgPGk+c2VxczwvaT4uCgkJPC9kaXY+CgkJPGg0PgoJCQlVc2FnZQoJCTwvaDQ+CgkJPGRpdiBjbGFzcz0iY29kZSI+CgkJCTxiPkJPT1NUX1BQX1NFUV9GT1JfRUFDSF9QUk9EVUNUPC9iPig8aT5tYWNybzwvaT4sIDxpPnNlcXM8L2k+KQoJCTwvZGl2PgoJCTxoND4KCQkJQXJndW1lbnRzCgkJPC9oND4KCQk8ZGw+CgkJCTxkdD5tYWNybzwvZHQ+CgkJCTxkZD4KCQkJCVRoZSBiaW5hcnkgbWFjcm8gb2YgdGhlIGZvcm0gPGk+bWFjcm88L2k+KDxpPnI8L2k+LCA8aT5wcm9kdWN0PC9pPikuJm5ic3A7IFRoaXMgCgkJCQltYWNybyBpcyBleHBhbmRlZCBieSA8Yj5CT09TVF9QUF9GT1JfRUFDSF9QUk9EVUNUPC9iPiB3aXRoIGVhY2ggY2FydGVzaWFuIAoJCQkJcHJvZHVjdCBpbiA8aT5zZXFzPC9pPi4mbmJzcDsgSXQgaXMgZXhwYW5kZWQgd2l0aCB0aGUgbmV4dCBhdmFpbGFibGUgPGI+Qk9PU1RfUFBfRk9SPC9iPgoJCQkJcmVwZXRpdGlvbiBhbmQgYSA8aT5zZXE8L2k+IGNvbnRhaW5pbmcgYSBjYXJ0ZXNpYW4gcHJvZHVjdC4mbmJzcDsKCQkJPC9kZD4KCQkJPGR0PnNlcXM8L2R0PgoJCQk8ZGQ+CgkJCQlBIDxpPnNlcTwvaT4gb2YgPGk+c2VxczwvaT4gZnJvbSB3aGljaCBjYXJ0ZXNpYW4gcHJvZHVjdHMgYXJlIG9idGFpbmVkLgoJCQk8L2RkPgoJCTwvZGw+CgkJPGg0PgoJCQlSZW1hcmtzCgkJPC9oND4KCQk8ZGl2PgoJCQlUaGlzIG1hY3JvIGlzIGEgcmVwZXRpdGlvbiBjb25zdHJ1Y3QuJm5ic3A7IElmIHR3byA8aT5zZXFzPC9pPiBhcmUgKDxpPmE8L2k+KSg8aT5iPC9pPikoPGk+YzwvaT4pIAoJCQlhbmQgKDxpPng8L2k+KSg8aT55PC9pPikoPGk+ejwvaT4pLCB0aGlzIG1hY3JvIHdpbGwgcHJvZHVjZSB0aGUgZm9sbG93aW5nIAoJCQlzZXF1ZW5jZToKCQkJPGRpdj4KCQkJCTxpPm1hY3JvPC9pPig8aT5yPC9pPiwgKDxpPmE8L2k+KSg8aT54PC9pPikpIDxpPm1hY3JvPC9pPig8aT5yPC9pPiwgKDxpPmE8L2k+KSg8aT55PC9pPikpCgkJCQk8aT5tYWNybzwvaT4oPGk+cjwvaT4sICg8aT5hPC9pPikoPGk+ejwvaT4pKSBcCgkJCQk8YnI+CgkJCQk8aT5tYWNybzwvaT4oPGk+cjwvaT4sICg8aT5iPC9pPikoPGk+eDwvaT4pKSA8aT5tYWNybzwvaT4oPGk+cjwvaT4sICg8aT5iPC9pPikoPGk+eTwvaT4pKQoJCQkJPGk+bWFjcm88L2k+KDxpPnI8L2k+LCAoPGk+YjwvaT4pKDxpPno8L2k+KSkgXAoJCQkJPGJyPgoJCQkJPGk+bWFjcm88L2k+KDxpPnI8L2k+LCAoPGk+YzwvaT4pKDxpPng8L2k+KSkgPGk+bWFjcm88L2k+KDxpPnI8L2k+LCAoPGk+YzwvaT4pKDxpPnk8L2k+KSkKCQkJCTxpPm1hY3JvPC9pPig8aT5yPC9pPiwgKDxpPmM8L2k+KSg8aT56PC9pPikpCgkJCTwvZGl2PgoJCTwvZGl2PgoJCTxkaXY+CgkJCUZvciBtYXhpbXVtIGVmZmljaWVuY3ksIHVzZSA8Yj5CT09TVF9QUF9TRVFfRk9SX0VBQ0hfUFJPRFVDVF9SPC9iPi4KCQk8L2Rpdj4KCQk8aDQ+CgkJCVNlZSBBbHNvCgkJPC9oND4KCQk8dWw+CgkJCTxsaT4KCQkJCTxhIGhyZWY9InNlcV9mb3JfZWFjaF9wcm9kdWN0X3IuaHRtbCI+Qk9PU1RfUFBfU0VRX0ZPUl9FQUNIX1BST0RVQ1RfUjwvYT48L2xpPgoJCTwvdWw+CgkJPGg0PgoJCQlSZXF1aXJlbWVudHMKCQk8L2g0PgoJCTxkaXY+CgkJCTxiPkhlYWRlcjo8L2I+ICZuYnNwOzxhIGhyZWY9Ii4uL2hlYWRlcnMvc2VxL2Zvcl9lYWNoX3Byb2R1Y3QuaHRtbCI+Jmx0O2Jvb3N0L3ByZXByb2Nlc3Nvci9zZXEvZm9yX2VhY2hfcHJvZHVjdC5ocHAmZ3Q7PC9hPgoJCTwvZGl2PgoJCTxoND4KCQkJU2FtcGxlIENvZGUKCQk8L2g0PgoJCTxkaXY+CgkJCTxwcmU+CiNpbmNsdWRlICZsdDs8YSBocmVmPSIuLi9oZWFkZXJzL3NlcS9mb3JfZWFjaF9wcm9kdWN0Lmh0bWwiPmJvb3N0L3ByZXByb2Nlc3Nvci9zZXEvZm9yX2VhY2hfcHJvZHVjdC5ocHA8L2E+Jmd0OwojaW5jbHVkZSAmbHQ7PGEgaHJlZj0iLi4vaGVhZGVycy9zZXEvdG9fdHVwbGUuaHRtbCI+Ym9vc3QvcHJlcHJvY2Vzc29yL3NlcS90b190dXBsZS5ocHA8L2E+Jmd0OwoKI2RlZmluZSBTMSAoYSkoYikoYykKI2RlZmluZSBTMiAoeCkoeSkoeikKI2RlZmluZSBTMyAocCkocSkKCiNkZWZpbmUgTUFDUk8ociwgcHJvZHVjdCkgPGEgaHJlZj0ic2VxX3RvX3R1cGxlLmh0bWwiPkJPT1NUX1BQX1NFUV9UT19UVVBMRTwvYT4ocHJvZHVjdCkKCjxhIGhyZWY9InNlcV9mb3JfZWFjaF9wcm9kdWN0Lmh0bWwiPkJPT1NUX1BQX1NFUV9GT1JfRUFDSF9QUk9EVUNUPC9hPihNQUNSTywgKFMxKShTMikoUzMpKQogICAvLyBleHBhbmRzIHRvOgogICAvLyAgIChhLCB4LCBwKSAoYSwgeCwgcSkgKGEsIHksIHApIChhLCB5LCBxKSAoYSwgeiwgcCkgKGEsIHosIHEpCiAgIC8vICAgKGIsIHgsIHApIChiLCB4LCBxKSAoYiwgeSwgcCkgKGIsIHksIHEpIChiLCB6LCBwKSAoYiwgeiwgcSkKICAgLy8gICAoYywgeCwgcCkgKGMsIHgsIHEpIChjLCB5LCBwKSAoYywgeSwgcSkgKGMsIHosIHApIChjLCB6LCBxKQo8L3ByZT4KCQk8L2Rpdj4KCTxociBzaXplPSIxIj4KCTxkaXYgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwcHg7Ij4KCQk8aT6pIENvcHlyaWdodCA8YSBocmVmPSJodHRwOi8vd3d3LmhvdXNlbWFycXVlLmNvbSIgdGFyZ2V0PSJfdG9wIj5Ib3VzZW1hcnF1ZSBPeTwvYT4gMjAwMjwvaT4KCQk8L2JyPjxpPqkgQ29weXJpZ2h0IFBhdWwgTWVuc29uaWRlcyAyMDAyPC9pPgoJPC9kaXY+Cgk8ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDogMHB4OyI+CgkJPHA+PHNtYWxsPkRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQoJCWFjY29tcGFueWluZyBmaWxlIDxhIGhyZWY9Ii4uLy4uLy4uLy4uL0xJQ0VOU0VfMV8wLnR4dCI+TElDRU5TRV8xXzAudHh0PC9hPiBvcgoJCWNvcHkgYXQgPGEgaHJlZj0KCQkiaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0Ij53d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvYT4pPC9zbWFsbD48L3A+Cgk8L2Rpdj4KCTwvYm9keT4KPC9odG1sPgo=