ZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9iaW5kZXJzLmh0bWwgYi9saWJzL2Z1bmN0aW9uYWwvYmluZGVycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYzJjNGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvYmluZGVycy5odG1sCkBAIC0wLDAgKzEsMTYxIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKworPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1MYW5ndWFnZSIgY29udGVudD0iZW4tdXMiPgorICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSI+CisKKyAgPHRpdGxlPkJvb3N0IEZ1bmN0aW9uIE9iamVjdCBBZGFwdGVyIExpYnJhcnk8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDAwIj4KKyAgPHRhYmxlIGJvcmRlcj0iMSIgYmdjb2xvcj0iIzAwN0Y3RiIgY2VsbHBhZGRpbmc9IjIiIHN1bW1hcnk9IiI+CisgICAgPHRyPgorICAgICAgPHRkIGJnY29sb3I9IiNGRkZGRkYiPjxpbWcgc3JjPSIuLi8uLi9ib29zdC5wbmciIGFsdD0KKyAgICAgICJib29zdC5wbmcgKDY4OTcgYnl0ZXMpIiB3aWR0aD0iMjc3IiBoZWlnaHQ9Ijg2Ij48L3RkPgorCisgICAgICA8dGQ+PGEgaHJlZj0iLi4vLi4vaW5kZXguaHRtIj48Zm9udCBmYWNlPSJBcmlhbCIgY29sb3I9CisgICAgICAiI0ZGRkZGRiI+PGJpZz5Ib21lPC9iaWc+PC9mb250PjwvYT48L3RkPgorCisgICAgICA8dGQ+PGEgaHJlZj0iLi4vbGlicmFyaWVzLmh0bSI+PGZvbnQgZmFjZT0iQXJpYWwiIGNvbG9yPQorICAgICAgIiNGRkZGRkYiPjxiaWc+TGlicmFyaWVzPC9iaWc+PC9mb250PjwvYT48L3RkPgorCisgICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvcGVvcGxlL3Blb3BsZS5odG0iPjxmb250IGZhY2U9IkFyaWFsIiBjb2xvcj0KKyAgICAgICIjRkZGRkZGIj48YmlnPlBlb3BsZTwvYmlnPjwvZm9udD48L2E+PC90ZD4KKworICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL21vcmUvZmFxLmh0bSI+PGZvbnQgZmFjZT0iQXJpYWwiIGNvbG9yPQorICAgICAgIiNGRkZGRkYiPjxiaWc+RkFRPC9iaWc+PC9mb250PjwvYT48L3RkPgorCisgICAgICA8dGQ+PGEgaHJlZj0iLi4vLi4vbW9yZS9pbmRleC5odG0iPjxmb250IGZhY2U9IkFyaWFsIiBjb2xvcj0KKyAgICAgICIjRkZGRkZGIj48YmlnPk1vcmU8L2JpZz48L2ZvbnQ+PC9hPjwvdGQ+CisgICAgPC90cj4KKyAgPC90YWJsZT4KKworICA8aDE+QmluZGVyczwvaDE+CisKKyAgPHA+VGhlIGhlYWRlciA8YSBocmVmPSIuLi8uLi9ib29zdC9mdW5jdGlvbmFsLmhwcCI+ZnVuY3Rpb25hbC5ocHA8L2E+CisgIHByb3ZpZGVzIGVuaGFuY2VkIHZlcnNpb25zIG9mIGJvdGggdGhlIGJpbmRlciBmdW5jdGlvbiBvYmplY3QgYWRhcHRlcnMgZnJvbQorICB0aGUgQysrIFN0YW5kYXJkIExpYnJhcnkgKCZzZWN0OzIwLjMuNik6PC9wPgorCisgIDx1bD4KKyAgICA8bGk+PHR0PmJpbmRlcjFzdDwvdHQ+PC9saT4KKworICAgIDxsaT48dHQ+YmluZGVyMm5kPC90dD48L2xpPgorICA8L3VsPgorCisgIDxwPkFzIHdlbGwgYXMgdGhlIGNvcnJlc3BvbmRpbmcgaGVscGVyIGZ1bmN0aW9uczwvcD4KKworICA8dWw+CisgICAgPGxpPjx0dD5iaW5kMXN0PC90dD48L2xpPgorCisgICAgPGxpPjx0dD5iaW5kMm5kPC90dD48L2xpPgorICA8L3VsPgorCisgIDxwPlRoZSBrZXkgYmVuZWZpdCBvZiB0aGVzZSBhZGFwdGVycyBvdmVyIHRob3NlIGluIHRoZSBTdGFuZGFyZCBMaWJyYXJ5IGlzCisgIHRoZXkgYXZvaWQgdGhlIHByb2JsZW0gb2YgPGEgaHJlZj0iI3JlZnJlZiI+cmVmZXJlbmNlcyB0bworICByZWZlcmVuY2VzLjwvYT48L3A+CisKKyAgPGgzPlVzYWdlPC9oMz4KKworICA8cD5Vc2FnZSBpcyBpZGVudGljYWwgdG8gdGhlIHN0YW5kYXJkIGJpbmRlcnMuIEZvciBleGFtcGxlLDwvcD4KKworICA8YmxvY2txdW90ZT4KKyAgICA8cHJlPgorY2xhc3MgRm9vIHsKK3B1YmxpYzoKKyAgdm9pZCBiYXIoc3RkOjpvc3RyZWFtICZhbXA7KTsKKyAgLy8gLi4uCit9OworLy8gLi4uCitzdGQ6OnZlY3RvciZsdDtGb28mZ3Q7IGM7CisvLyAuLi4KK3N0ZDo6Zm9yX2VhY2goYy5iZWdpbigpLCBjLmVuZCgpLCAKKyAgICAgICAgICAgICAgYm9vc3Q6OmJpbmQybmQoYm9vc3Q6Om1lbV9mdW5fcmVmKCZhbXA7Rm9vOjpiYXIpLCBzdGQ6OmNvdXQpKTsKKzwvcHJlPgorICA8L2Jsb2NrcXVvdGU+CisKKyAgPGgzIGlkPSJyZWZyZWYiPlJlZmVyZW5jZXMgdG8gUmVmZXJlbmNlczwvaDM+CisKKyAgPHA+Q29uc2lkZXIgdGhlIHVzYWdlIGV4YW1wbGUgYWJvdmU8L3A+CisKKyAgPGJsb2NrcXVvdGU+CisgICAgPHByZT4KK2NsYXNzIEZvbyB7CitwdWJsaWM6CisgIHZvaWQgYmFyKDxzdHJvbmc+c3RkOjpvc3RyZWFtICZhbXA7PC9zdHJvbmc+KTsKKyAgLy8gLi4uCit9OworLy8gLi4uCitzdGQ6OmZvcl9lYWNoKGMuYmVnaW4oKSwgYy5lbmQoKSwgCisgICAgICAgICAgICAgIGJvb3N0OjpiaW5kMm5kKGJvb3N0OjptZW1fZnVuX3JlZigmYW1wO0Zvbzo6YmFyKSwgc3RkOjpjb3V0KSk7Cis8L3ByZT4KKyAgPC9ibG9ja3F1b3RlPgorCisgIDxwPklmIHRoaXMgaGFkIGJlZW4gd3JpdHRlbiB1c2luZyA8dHQ+c3RkOjpiaW5kMm5kPC90dD4gYW5kCisgIDx0dD5zdGQ6Om1lbV9mdW5fcmVmPC90dD4sIGl0IHdvdWxkIGJlIHVubGlrZWx5IHRvIGNvbXBpbGUuPC9wPgorCisgIDxwPlRoZSBwcm9ibGVtIGFyaXNlcyBiZWNhdXNlIDx0dD5iYXI8L3R0PiB0YWtlcyBhIHJlZmVyZW5jZSBhcmd1bWVudC4gVGhlCisgIFN0YW5kYXJkIGRlZmluZXMgPHR0PnN0ZDo6bWVtX2Z1bl9yZWY8L3R0PiBzdWNoIHRoYXQgaXQgY3JlYXRlcyBhIGZ1bmN0aW9uCisgIG9iamVjdCB3aG9zZSA8dHQ+c2Vjb25kX2FyZ3VtZW50X3R5cGU8L3R0PiB3aWxsIGJlCisgIDx0dD5zdGQ6Om9zdHJlYW0mYW1wOzwvdHQ+LjwvcD4KKworICA8cD5UaGUgY2FsbCB0byA8dHQ+YmluZDJuZDwvdHQ+IGNyZWF0ZXMgYSA8dHQ+YmluZGVyMm5kPC90dD4gd2hpY2ggdGhlCisgIFN0YW5kYXJkIGRlZmluZXMgYXMgZm9sbG93czo8L3A+CisKKyAgPGJsb2NrcXVvdGU+CisgICAgPHByZT4KK3RlbXBsYXRlICZsdDtjbGFzcyBPcGVyYXRpb24mZ3Q7CitjbGFzcyBiaW5kZXIybmQKKyAgICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbiZsdDt0eXBlbmFtZSBPcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgT3BlcmF0aW9uOjpyZXN1bHRfdHlwZSZndDsgeworLi4uCitwdWJsaWM6CisgIGJpbmRlcjJuZChjb25zdCBPcGVyYXRpb24mYW1wOyB4LAorICAgICAgICAgICAgPHN0cm9uZz5jb25zdCB0eXBlbmFtZSBPcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJmFtcDsgeTwvc3Ryb25nPik7CisgIC4uLgorPC9wcmU+CisgIDwvYmxvY2txdW90ZT4KKworICA8cD5TaW5jZSBvdXIgb3BlcmF0aW9uJ3MgPHR0PnNlY29uZF9hcmd1bWVudF90eXBlPC90dD4gaXMKKyAgPHR0PnN0ZDo6b3N0cmVhbSZhbXA7PC90dD4sIHRoZSB0eXBlIG9mIDx0dD55PC90dD4gaW4gdGhlIGNvbnN0cnVjdG9yIHdvdWxkCisgIGJlIDx0dD5zdGQ6Om9zdHJlYW0mYW1wOyZhbXA7PC90dD4uIFNpbmNlIHlvdSBjYW5ub3QgaGF2ZSBhIHJlZmVyZW5jZSB0byBhCisgIHJlZmVyZW5jZSwgYXQgdGhpcyBwb2ludCB3ZSBzaG91bGQgZ2V0IGEgY29tcGlsYXRpb24gZXJyb3IgYmVjYXVzZQorICByZWZlcmVuY2VzIHRvIHJlZmVyZW5jZXMgYXJlIGlsbGVnYWwgaW4gQysrIChidXQgc2VlIDxhIGhyZWY9CisgICJodHRwOi8vYW51YmlzLmRrdXVnLmRrL2p0YzEvc2MyMi93ZzIxL2RvY3MvY3dnX2FjdGl2ZS5odG1sIzEwNiI+QysrCisgIFN0YW5kYXJkIGNvcmUgbGFuZ3VhZ2UgYWN0aXZlIGlzc3VlcyBsaXN0PC9hPikuPC9wPgorCisgIDxwPlRoZSBiaW5kZXJzIGluIHRoaXMgbGlicmFyeSBhdm9pZCB0aGlzIHByb2JsZW0gYnkgdXNpbmcgdGhlIEJvb3N0CisgIDx0dD48YSBocmVmPSIuLi91dGlsaXR5L2NhbGxfdHJhaXRzLmh0bSI+Y2FsbF90cmFpdHM8L2E+PC90dD4KKyAgdGVtcGxhdGVzLjwvcD4KKworICA8cD5PdXIgY29uc3RydWN0b3IgaXMgZGVjbGFyZWQ8L3A+CisKKyAgPGJsb2NrcXVvdGU+CisgICAgPHByZT4KK2JpbmRlcjJuZChjb25zdCBPcGVyYXRpb24mYW1wOyB4LAorICAgICAgICAgIDxzdHJvbmc+dHlwZW5hbWUgY2FsbF90cmFpdHMmbHQ7CisgICAgICAgICAgICAgdHlwZW5hbWUgYmluYXJ5X3RyYWl0cyZsdDtPcGVyYXRpb24mZ3Q7OjpzZWNvbmRfYXJndW1lbnRfdHlwZQorICAgICAgICAgICZndDs6OnBhcmFtX3R5cGUgeTwvc3Ryb25nPikKKzwvcHJlPgorICA8L2Jsb2NrcXVvdGU+CisKKyAgPHA+QXMgYSByZXN1bHQsIDx0dD55PC90dD4gaGFzIGEgdHlwZSBvZiA8dHQ+c3RkOjpvc3RyZWFtJmFtcDs8L3R0PiwgYW5kCisgIG91ciBleGFtcGxlIGNvbXBpbGVzLjwvcD4KKyAgPGhyPgorCisgIDxwPjxhIGhyZWY9Imh0dHA6Ly92YWxpZGF0b3IudzMub3JnL2NoZWNrP3VyaT1yZWZlcmVyIj48aW1nIGJvcmRlcj0iMCIgc3JjPQorICAiLi4vLi4vZG9jL2ltYWdlcy92YWxpZC1odG1sNDAxLnBuZyIgYWx0PSJWYWxpZCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsIgorICBoZWlnaHQ9IjMxIiB3aWR0aD0iODgiPjwvYT48L3A+CisKKyAgPHA+UmV2aXNlZCAKKyAgPCEtLXdlYmJvdCBib3Q9IlRpbWVzdGFtcCIgcy10eXBlPSJFRElURUQiIHMtZm9ybWF0PSIlZCAlQiwgJVkiIHN0YXJ0c3BhbiAtLT4wMgorICBEZWNlbWJlciwgMjAwNjwhLS13ZWJib3QgYm90PSJUaW1lc3RhbXAiIGVuZHNwYW4gaS1jaGVja3N1bT0iMzg1MTAiIC0tPjwvcD4KKworICA8cD48aT5Db3B5cmlnaHQgJmNvcHk7IDIwMDAgQ2FkZW56YSBOZXcgWmVhbGFuZCBMdGQuPC9pPjwvcD4KKworICA8cD48aT5EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKKyAgYWNjb21wYW55aW5nIGZpbGUgPGEgaHJlZj0iLi4vLi4vTElDRU5TRV8xXzAudHh0Ij5MSUNFTlNFXzFfMC50eHQ8L2E+IG9yCisgIGNvcHkgYXQgPGEgaHJlZj0KKyAgImh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCI+aHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0PC9hPik8L2k+PC9wPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2ZhY3RvcnkvZG9jL0phbWZpbGUgYi9saWJzL2Z1bmN0aW9uYWwvZmFjdG9yeS9kb2MvSmFtZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjUzMzM2Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2ZhY3RvcnkvZG9jL0phbWZpbGUKQEAgLTAsMCArMSwyMCBAQAorCisjIChDKSBDb3B5cmlnaHQgVG9iaWFzIFNjaHdpbmdlcgorIworIyBVc2UgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIGJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCisjIFZlcnNpb24gMS4wLiAoU2VlIGh0dHA6L1wvd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgorCit1c2luZyBxdWlja2Jvb2sgOworCit4bWwgZmFjdG9yeSA6IGZhY3RvcnkucWJrIDsKK2Jvb3N0Ym9vayBzdGFuZGFsb25lIDogZmFjdG9yeQorICA6CisgICAgICAgIDx4c2w6cGFyYW0+Ym9vc3Qucm9vdD0uLi8uLi8uLi8uLi8uLgorICAgICAgICA8eHNsOnBhcmFtPmJvb3N0LmxpYnJhcmllcz0uLi8uLi8uLi8uLi9saWJyYXJpZXMuaHRtCisgICAgICAgIDx4c2w6cGFyYW0+Y2h1bmsuc2VjdGlvbi5kZXB0aD0wCisgICAgICAgIDx4c2w6cGFyYW0+Y2h1bmsuZmlyc3Quc2VjdGlvbnM9MAorICAgICAgICA8eHNsOnBhcmFtPmdlbmVyYXRlLnNlY3Rpb24udG9jLmxldmVsPTIKKyAgICAgICAgPHhzbDpwYXJhbT50b2MubWF4LmRlcHRoPTEKKyAgOworCisKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9mYWN0b3J5L2RvYy9mYWN0b3J5LnFiayBiL2xpYnMvZnVuY3Rpb25hbC9mYWN0b3J5L2RvYy9mYWN0b3J5LnFiawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWEzZmFmCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2ZhY3RvcnkvZG9jL2ZhY3RvcnkucWJrCkBAIC0wLDAgKzEsMzg2IEBACitbbGlicmFyeSBCb29zdC5GdW5jdGlvbmFsL0ZhY3RvcnkKKyAgW3F1aWNrYm9vayAxLjNdCisgIFt2ZXJzaW9uIDEuMF0KKyAgW2F1dGhvcnMgW1NjaHdpbmdlciwgVG9iaWFzXV0KKyAgW2NvcHlyaWdodCAyMDA3IDIwMDggVG9iaWFzIFNjaHdpbmdlcl0KKyAgW2xpY2Vuc2UKKyAgICAgICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLgorICAgICAgICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IAorICAgICAgICBbQGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dF0pCisgIF0KKyAgW3B1cnBvc2UgRnVuY3Rpb24gb2JqZWN0IHRlbXBsYXRlcyBmb3Igb2JqZWN0IGNyZWF0aW9uLl0KKyAgW2NhdGVnb3J5IGhpZ2hlci1vcmRlcl0KKyAgW2NhdGVnb3J5IGdlbmVyaWNdCisgIFtsYXN0LXJldmlzaW9uICREYXRlOiAyMDA4LzExLzAxIDIxOjQ0OjUyICRdCitdCisKK1tkZWYgX19ib29zdF9iaW5kX18gW0BodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2JpbmQvYmluZC5odG1sIEJvb3N0LkJpbmRdXQorW2RlZiBfX2Jvb3N0X19iaW5kX18gW0BodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2JpbmQvYmluZC5odG1sIGBib29zdDo6YmluZGBdXQorCitbZGVmIF9fYm9vc3RfX2ZvcndhcmRfYWRhcHRlcl9fIFtAaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9mdW5jdGlvbmFsL2ZvcndhcmQvZG9jL2luZGV4Lmh0bWwgYGJvb3N0Ojpmb3J3YXJkX2FkYXB0ZXJgXV0KK1tkZWYgX19mdXNpb25fZnVuY3Rpb25hbF9hZGFwdGVyc19fIFtAaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9mdXNpb24vZG9jL2h0bWwvZnVuY3Rpb25hbC5odG1sIEZ1c2lvbiBGdW5jdGlvbmFsIEFkYXB0ZXJzXV0KKworW2RlZiBfX2Jvb3N0X2Z1bmN0aW9uX18gW0BodHRwOi8vd3d3LmJvb3N0Lm9yZy9kb2MvaHRtbC9mdW5jdGlvbi5odG1sIEJvb3N0LkZ1bmN0aW9uXV0KK1tkZWYgX19ib29zdF9fZnVuY3Rpb25fXyBbQGh0dHA6Ly93d3cuYm9vc3Qub3JnL2RvYy9odG1sL2Z1bmN0aW9uLmh0bWwgYGJvb3N0OjpmdW5jdGlvbmBdXQorCitbZGVmIF9fc21hcnRfcG9pbnRlcl9fIFtAaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9zbWFydF9wdHIvaW5kZXguaHRtbCBTbWFydCBQb2ludGVyXV0KK1tkZWYgX19zbWFydF9wb2ludGVyc19fIFtAaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9zbWFydF9wdHIvaW5kZXguaHRtbCBTbWFydCBQb2ludGVyc11dCitbZGVmIF9fYm9vc3RfX3NoYXJlZF9wdHJfXyBbQGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvc21hcnRfcHRyL3NoYXJlZF9wdHIuaHRtIGBib29zdDo6c2hhcmVkX3B0cmBdXQorCitbZGVmIF9fc3RkX19tYXBfXyBbQGh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC9tYXAuaHRtbCBgc3RkOjptYXBgXV0KK1tkZWYgX19zdGRfX3N0cmluZ19fIFtAaHR0cDovL3d3dy5zZ2kuY29tL3RlY2gvc3RsL3N0cmluZy5odG1sIGBzdGQ6OnN0cmluZ2BdXQorW2RlZiBfX2FsbG9jYXRvcl9fIFtAaHR0cDovL3d3dy5zZ2kuY29tL3RlY2gvc3RsL2NvbmNlcHRzL2FsbG9jYXRvci5odG1sIEFsbG9jYXRvcl1dCitbZGVmIF9fc3RkX2FsbG9jYXRvcl9fIFtAaHR0cDovL3d3dy5zZ2kuY29tL3RlY2gvc3RsL2NvbmNlcHRzL2FsbG9jYXRvci5odG1sIEFsbG9jYXRvcl1dCitbZGVmIF9fc3RkX2FsbG9jYXRvcnNfXyBbQGh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC9jb25jZXB0cy9hbGxvY2F0b3IuaHRtbCBBbGxvY2F0b3JzXV0KKworW2RlZiBfX2Jvb3N0X19wdHJfbWFwX18gW0BodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3B0cl9jb250YWluZXIvZG9jL3B0cl9tYXAuaHRtbCBgYm9vc3Q6OnB0cl9tYXBgXV0KKworW2RlZiBfX2Jvb3N0X19mYWN0b3J5X18gYGJvb3N0OjpmYWN0b3J5YF0KK1tkZWYgX19ib29zdF9fdmFsdWVfZmFjdG9yeV9fIGBib29zdDo6dmFsdWVfZmFjdG9yeWBdCisKK1tkZWYgX19mYWN0b3J5X18gYGZhY3RvcnlgXQorW2RlZiBfX3ZhbHVlX2ZhY3RvcnlfXyBgdmFsdWVfZmFjdG9yeWBdCisKKworW3NlY3Rpb24gQnJpZWYgRGVzY3JpcHRpb25dCisKK1RoZSB0ZW1wbGF0ZSBfX2Jvb3N0X19mYWN0b3J5X18gbGV0cyB5b3UgZW5jYXBzdWxhdGUgYSBgbmV3YCBleHByZXNzaW9uCithcyBhIGZ1bmN0aW9uIG9iamVjdCwgX19ib29zdF9fdmFsdWVfZmFjdG9yeV9fIGVuY2Fwc3VsYXRlcyBhIGNvbnN0cnVjdG9yCitpbnZvY2F0aW9uIHdpdGhvdXQgYG5ld2AuCisKKyAgICBfX2Jvb3N0X19mYWN0b3J5X188VCo+KCkoYXJnMSxhcmcyLGFyZzMpIAorICAgIC8vIHNhbWUgYXMgbmV3IFQoYXJnMSxhcmcyLGFyZzMpCisKKyAgICBfX2Jvb3N0X192YWx1ZV9mYWN0b3J5X188VD4oKShhcmcxLGFyZzIsYXJnMykKKyAgICAvLyBzYW1lIGFzIFQoYXJnMSxhcmcyLGFyZzMpCisKK0ZvciB0ZWNobmljYWwgcmVhc29ucyB0aGUgYXJndW1lbnRzIHRvIHRoZSBmdW5jdGlvbiBvYmplY3RzIGhhdmUgdG8gYmUKK0xWYWx1ZXMuIEEgZmFjdG9yeSB0aGF0IGFsc28gYWNjZXB0cyBSVmFsdWVzIGNhbiBiZSBjb21wb3NlZCB1c2luZyB0aGUKK19fYm9vc3RfX2ZvcndhcmRfYWRhcHRlcl9fIG9yIF9fYm9vc3RfX2JpbmRfXy4KKworW2VuZHNlY3RdCisKK1tzZWN0aW9uIEJhY2tncm91bmRdCisKK0luIHRyYWRpdGlvbmFsIE9iamVjdCBPcmllbnRlZCBQcm9ncmFtbWluZyBhIEZhY3RvcnkgaXMgYW4gb2JqZWN0IGltcGxlbWVudGluZworYW4gaW50ZXJmYWNlIG9mIG9uZSBvciBtb3JlIG1ldGhvZHMgdGhhdCBjb25zdHJ1Y3Qgb2JqZWN0cyBjb25mb3JtaW5nIHRvIGtub3duCitpbnRlcmZhY2VzLgorCisgICAgLy8gYXNzdW1pbmcgYV9jb25jcmV0ZV9jbGFzcyBhbmQgYW5vdGhlcl9jb25jcmV0ZV9jbGFzcyBhcmUgZGVyaXZlZAorICAgIC8vIGZyb20gYW5fYWJzdHJhY3RfY2xhc3MKKworICAgIGNsYXNzIGFfZmFjdG9yeQorICAgIHsKKyAgICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCBhbl9hYnN0cmFjdF9jbGFzcyogY3JlYXRlKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIH5hX2ZhY3RvcnkoKSB7IH0KKyAgICB9OworCisgICAgY2xhc3MgYV9jb25jcmV0ZV9mYWN0b3J5IDogcHVibGljIGFfZmFjdG9yeQorICAgIHsKKyAgICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCBhbl9hYnN0cmFjdF9jbGFzcyogY3JlYXRlKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBhX2NvbmNyZXRlX2NsYXNzKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgY2xhc3MgYW5vdGhlcl9jb25jcmV0ZV9mYWN0b3J5IDogcHVibGljIGFfZmFjdG9yeQorICAgIHsKKyAgICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCBhbl9hYnN0cmFjdF9jbGFzcyogY3JlYXRlKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBhbm90aGVyX2NvbmNyZXRlX2NsYXNzKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLy8gWy4uLl0KKworICAgIGludCBtYWluKCkKKyAgICB7CisgICAgICAgIF9fYm9vc3RfX3B0cl9tYXBfXzxfX3N0ZF9fc3RyaW5nX18sYV9mYWN0b3J5PiBmYWN0b3JpZXM7CisKKyAgICAgICAgLy8gWy4uLl0KKworICAgICAgICBmYWN0b3JpZXMuaW5zZXJ0KCJhX25hbWUiLHN0ZDo6YXV0b19wdHI8YV9mYWN0b3J5PigKKyAgICAgICAgICAgIG5ldyBhX2NvbmNyZXRlX2ZhY3RvcnkpKTsKKyAgICAgICAgZmFjdG9yaWVzLmluc2VydCgiYW5vdGhlcl9uYW1lIixzdGQ6OmF1dG9fcHRyPGFfZmFjdG9yeT4oCisgICAgICAgICAgICBuZXcgYW5vdGhlcl9jb25jcmV0ZV9mYWN0b3J5KSk7CisKKyAgICAgICAgLy8gWy4uLl0KKworICAgICAgICBzdGQ6OmF1dG9fcHRyPGFuX2Fic3RyYWN0X2NsYXNzPiB4KGZhY3Rvcmllcy5hdChzb21lX25hbWUpLmNyZWF0ZSgpKTsKKworICAgICAgICAvLyBbLi4uXQorICAgIH0KKworVGhpcyBhcHByb2FjaCBoYXMgc2V2ZXJhbCBkcmF3YmFja3MuIFRoZSBtb3N0IG9idmlvdXMgb25lIGlzIHRoYXQgdGhlcmUgaXMKK2xvdHMgb2YgYm9pbGVycGxhdGUgY29kZS4gSW4gb3RoZXIgd29yZHMgdGhlcmUgaXMgdG9vIG11Y2ggY29kZSB0byBleHByZXNzCithIHJhdGhlciBzaW1wbGUgaW50ZW50aW9uLiBXZSBjb3VsZCB1c2UgdGVtcGxhdGVzIHRvIGdldCByaWQgb2Ygc29tZSBvZiBpdAorYnV0IHRoZSBhcHByb2FjaCByZW1haW5zIGluZmxleGlibGU6IAorCisqIFdlIG1heSB3YW50IGEgZmFjdG9yeSB0aGF0IHRha2VzIHNvbWUgYXJndW1lbnRzIHRoYXQgYXJlIGZvcndhcmRlZCB0bworICB0aGUgY29uc3RydWN0b3IsCisqIHdlIHdpbGwgcHJvYmFibHkgd2FudCB0byB1c2Ugc21hcnQgcG9pbnRlcnMsCisqIHdlIG1heSB3YW50IHNldmVyYWwgbWVtYmVyIGZ1bmN0aW9ucyB0byBjcmVhdGUgZGlmZmVyZW50IGtpbmRzIG9mCisgIG9iamVjdHMsCisqIHdlIG1pZ2h0IG5vdCBuZWNlc3NhcmlseSBuZWVkIGEgcG9seW1vcnBoaWMgYmFzZSBjbGFzcyBmb3IgdGhlIG9iamVjdHMsCisqIGFzIHdlIHdpbGwgc2VlLCB3ZSBkbyBub3QgbmVlZCBhIGZhY3RvcnkgYmFzZSBjbGFzcyBhdCBhbGwsIAorKiB3ZSBtaWdodCB3YW50IHRvIGp1c3QgY2FsbCB0aGUgY29uc3RydWN0b3IgLSB3aXRob3V0IGBuZXdgIHRvIGNyZWF0ZQorICBhbiBvYmplY3Qgb24gdGhlIHN0YWNrLCBhbmQKKyogZmluYWxseSB3ZSBtaWdodCB3YW50IHRvIHVzZSBjdXN0b21pemVkIG1lbW9yeSBtYW5hZ2VtZW50LgorCitFeHBlcmllbmNlIGhhcyBzaG93biB0aGF0IHVzaW5nIGZ1bmN0aW9uIG9iamVjdHMgYW5kIGdlbmVyaWMgQm9vc3QgY29tcG9uZW50cworZm9yIHRoZWlyIGNvbXBvc2l0aW9uLCBEZXNpZ24gUGF0dGVybnMgdGhhdCBkZXNjcmliZSBjYWxsYmFjayBtZWNoYW5pc21zCisodHlwaWNhbGx5IHJlcXVpcmluZyBhIGhpZ2ggcGVyY2VudGFnZSBvZiBib2lsZXJwbGF0ZSBjb2RlIHdpdGggcHVyZSBPYmplY3QKK09yaWVudGVkIG1ldGhvZG9sb2d5KSBiZWNvbWUgaW1wbGVtZW50YWJsZSB3aXRoIGp1c3QgZmV3IGNvZGUgbGluZXMgYW5kIHdpdGhvdXQKK2V4dHJhIGNsYXNzZXMuIAorCitGYWN0b3JpZXMgYXJlIGNhbGxiYWNrIG1lY2hhbmlzbXMgZm9yIGNvbnN0cnVjdG9ycywgc28gd2UgcHJvdmlkZSB0d28gY2xhc3MKK3RlbXBsYXRlcywgX19ib29zdF9fdmFsdWVfZmFjdG9yeV9fIGFuZCBfX2Jvb3N0X19mYWN0b3J5X18sIHRoYXQgZW5jYXBzdWxhdGUKK29iamVjdCBjb25zdHJ1Y3Rpb24gdmlhIGRpcmVjdCBhcHBsaWNhdGlvbiBvZiB0aGUgY29uc3RydWN0b3IgYW5kIHRoZSBgbmV3YAorb3BlcmF0b3IsIHJlc3BlY3RpdmVseS4gCisKK1dlIGxldCB0aGUgZnVuY3Rpb24gb2JqZWN0cyBmb3J3YXJkIHRoZWlyIGFyZ3VtZW50cyB0byB0aGUgY29uc3RydWN0aW9uCitleHByZXNzaW9ucyB0aGV5IGVuY2Fwc3VsYXRlLiBPdmVyIHRoaXMgX19ib29zdF9fZmFjdG9yeV9fIG9wdGlvbmFsbHkgYWxsb3dzCit0aGUgdXNlIG9mIHNtYXJ0IHBvaW50ZXJzIGFuZCBfX3N0ZF9hbGxvY2F0b3JzX18uCisKK0NvbXBpbGUtdGltZSBwb2x5bW9ycGhpc20gY2FuIGJlIHVzZWQgd2hlcmUgYXBwcm9wcmlhdGUsCisKKyAgICB0ZW1wbGF0ZTwgY2xhc3MgVCA+CisgICAgdm9pZCBkb19zb21ldGhpbmcoKQorICAgIHsKKyAgICAgICAgLy8gWy4uLl0KKyAgICAgICAgVCB4ID0gVChhLGIpOworCisgICAgICAgIC8vIGZvciBjb25jZXB0dWFsbHkgc2ltaWxhciBvYmplY3RzIHggd2UgbmVpdGhlciBuZWVkIHZpcnR1YWwKKyAgICAgICAgLy8gZnVuY3Rpb25zIG5vciBhIGNvbW1vbiBiYXNlIGNsYXNzIGluIHRoaXMgY29udGV4dC4KKyAgICAgICAgLy8gWy4uLl0KKyAgICB9CisKK05vdywgdG8gYWxsb3cgaW5ob21vZ2VuZW91cyBzaWduYXR1cmVzIGZvciB0aGUgY29uc3RydWN0b3JzIG9mIHRoZSB0eXBlcyBwYXNzZWQKK2luIGZvciBgVGAgd2UgY2FuIHVzZSBfX3ZhbHVlX2ZhY3RvcnlfXyBhbmQgX19ib29zdF9fYmluZF9fIHRvIG5vcm1hbGl6ZSBiZXR3ZWVuCit0aGVtLiAKKworICAgIHRlbXBsYXRlPCBjbGFzcyBWYWx1ZUZhY3RvcnkgPiAKKyAgICB2b2lkIGRvX3NvbWV0aGluZyhWYWx1ZUZhY3RvcnkgbWFrZV9vYmogPSBWYWx1ZUZhY3RvcnkoKSkKKyAgICB7CisgICAgICAgIC8vIFsuLi5dCisgICAgICAgIHR5cGVuYW1lIFZhbHVlRmFjdG9yeTo6cmVzdWx0X3R5cGUgeCA9IG1ha2Vfb2JqKGEsYik7CisKKyAgICAgICAgLy8gZm9yIGNvbmNlcHR1YWxseSBzaW1pbGFyIG9iamVjdHMgeCB3ZSBuZWl0aGVyIG5lZWQgdmlydHVhbAorICAgICAgICAvLyBmdW5jdGlvbnMgbm9yIGEgY29tbW9uIGJhc2UgY2xhc3MgaW4gdGhpcyBjb250ZXh0LgorICAgICAgICAvLyBbLi4uXQorICAgIH0KKworICAgIGludCBtYWluKCkKKyAgICB7CisgICAgICAgIC8vIFsuLi5dCisKKyAgICAgICAgZG9fc29tZXRoaW5nKF9fYm9vc3RfX3ZhbHVlX2ZhY3RvcnlfXzxYPigpKTsKKyAgICAgICAgZG9fc29tZXRoaW5nKGJvb3N0OjpiaW5kKF9fYm9vc3RfX3ZhbHVlX2ZhY3RvcnlfXzxZPigpLF8xLDUsXzIpKTsKKyAgICAgICAgLy8gY29uc3RydWN0IFgoYSxiKSBhbmQgWShhLDUsYiksIHJlc3BlY3RpdmVseS4KKworICAgICAgICAvLyBbLi4uXQorICAgIH0KKworTWF5YmUgd2Ugd2FudCBvdXIgb2JqZWN0cyB0byBvdXRsaXZlIHRoZSBmdW5jdGlvbidzIHNjb3BlLCBpbiB0aGlzIGNhc2Ugd2UKK2hhdmUgdG8gdXNlIGR5bmFtaWMgYWxsb2NhdGlvbjsKKworICAgIHRlbXBsYXRlPCBjbGFzcyBGYWN0b3J5ID4KKyAgICB3aGF0ZXZlciBkb19zb21ldGhpbmcoRmFjdG9yeSBuZXdfb2JqID0gRmFjdG9yeSgpKQorICAgIHsKKyAgICAgICAgdHlwZW5hbWUgRmFjdG9yeTo6cmVzdWx0X3R5cGUgcHRyID0gbmV3X29iaihhLGIpOworCisgICAgICAgIC8vIGFnYWluLCBubyBjb21tb24gYmFzZSBjbGFzcyBvciB2aXJ0dWFsIGZ1bmN0aW9ucyBuZWVkZWQsCisgICAgICAgIC8vIHdlIGNvdWxkIGVuZm9yY2UgYSBwb2x5bW9ycGhpYyBiYXNlIGJ5IHdyaXRpbmcgZS5nLgorICAgICAgICAvLyAgICBib29zdDo6c2hhcmVkX3B0cjxiYXNlPgorICAgICAgICAvLyBpbnN0ZWFkIG9mCisgICAgICAgIC8vICAgIHR5cGVuYW1lIEZhY3Rvcnk6OnJlc3VsdF90eXBlCisgICAgICAgIC8vIGFib3ZlLgorICAgICAgICAvLyBOb3RlIHRoYXQgd2UgYXJlIGFsc28gZnJlZSB0byBoYXZlIHRoZSB0eXBlIGVyYXN1cmUgaGFwcGVuIAorICAgICAgICAvLyBzb21ld2hlcmUgZWxzZSAoZS5nLiBpbiB0aGUgY29uc3RydWN0b3Igb2YgdGhpcyBmdW5jdGlvbidzCisgICAgICAgIC8vIHJlc3VsdCB0eXBlKS4KKworICAgICAgICAvLyBbLi4uXQorICAgIH0KKworICAgIC8vIFsuLi4gY2FsbCBkb19zb21ldGhpbmcgbGlrZSBhYm92ZSBidXQgd2l0aCBfX2ZhY3RvcnlfXyBpbnN0ZWFkCisgICAgLy8gb2YgX192YWx1ZV9mYWN0b3J5X19dCisKK0FsdGhvdWdoIHdlIG1pZ2h0IGhhdmUgY3JlYXRlZCBwb2x5bW9ycGhpYyBvYmplY3RzIGluIHRoZSBwcmV2aW91cyBleGFtcGxlLAord2UgaGF2ZSB1c2VkIGNvbXBpbGUgdGltZSBwb2x5bW9ycGhpc20gZm9yIHRoZSBmYWN0b3J5LiBJZiB3ZSB3YW50IHRvIGVyYXNlCit0aGUgdHlwZSBvZiB0aGUgZmFjdG9yeSBhbmQgdGh1cyBhbGxvdyBwb2x5bW9ycGhpc20gYXQgcnVuIHRpbWUsIHdlIGNhbgordXNlIF9fYm9vc3RfZnVuY3Rpb25fXyB0byBkbyBzby4gVGhlIGZpcnN0IGV4YW1wbGUgY2FuIGJlIHJld3JpdHRlbiBhcyAKK2ZvbGxvd3MuCisKKyAgICB0eXBlZGVmIGJvb3N0OjpmdW5jdGlvbjwgYW5fYWJzdHJhY3RfY2xhc3MqKCkgPiBhX2ZhY3Rvcnk7CisKKyAgICAvLyBbLi4uXQorCisgICAgaW50IG1haW4oKQorICAgIHsKKyAgICAgICAgX19zdGRfX21hcF9fPF9fc3RkX19zdHJpbmdfXyxhX2ZhY3Rvcnk+IGZhY3RvcmllczsKKworICAgICAgICAvLyBbLi4uXQorCisgICAgICAgIGZhY3Rvcmllc1siYV9uYW1lIl0gPSBfX2Jvb3N0X19mYWN0b3J5X188YV9jb25jcmV0ZV9jbGFzcyo+KCk7CisgICAgICAgIGZhY3Rvcmllc1siYW5vdGhlcl9uYW1lIl0gPSAKKyAgICAgICAgICAgIF9fYm9vc3RfX2ZhY3RvcnlfXzxhbm90aGVyX2NvbmNyZXRlX2NsYXNzKj4oKTsKKworICAgICAgICAvLyBbLi4uXQorICAgIH0gCisKK09mIGNvdXJzZSB3ZSBjYW4ganVzdCBhcyBlYXN5IGNyZWF0ZSBmYWN0b3JpZXMgdGhhdCB0YWtlIGFyZ3VtZW50cyBhbmQvb3IKK3JldHVybiBfX3NtYXJ0X3BvaW50ZXJzX18uCisKK1tlbmRzZWN0XQorCisKK1tzZWN0aW9uOnJlZmVyZW5jZSBSZWZlcmVuY2VdCisKKworW3NlY3Rpb24gdmFsdWVfZmFjdG9yeV0KKworW2hlYWRpbmcgRGVzY3JpcHRpb25dCisKK0Z1bmN0aW9uIG9iamVjdCB0ZW1wbGF0ZSB0aGF0IGludm9rZXMgdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSB0eXBlIGBUYC4KKworW2hlYWRpbmcgSGVhZGVyXQorICAgICNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL3ZhbHVlX2ZhY3RvcnkuaHBwPgorCitbaGVhZGluZyBTeW5vcHNpc10KKworICAgIG5hbWVzcGFjZSBib29zdAorICAgIHsKKyAgICAgICAgdGVtcGxhdGU8IHR5cGVuYW1lIFQgPgorICAgICAgICBjbGFzcyB2YWx1ZV9mYWN0b3J5OworICAgIH0KKworW3ZhcmlhYmxlbGlzdCBOb3RhdGlvbgorICAgIFtbYFRgXSAgICAgICAgIFthbiBhcmJpdHJhcnkgdHlwZSB3aXRoIGF0IGxlYXN0IG9uZSBwdWJsaWMgY29uc3RydWN0b3JdXQorICAgIFtbYGEwYC4uLmBhTmBdIFthcmd1bWVudCBMVmFsdWVzIHRvIGEgY29uc3RydWN0b3Igb2YgYFRgXV0KKyAgICBbW2BGYF0gICAgICAgICBbdGhlIHR5cGUgYHZhbHVlX2ZhY3Rvcnk8Rj5gXV0KKyAgICBbW2BmYF0gICAgICAgICBbYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIGBGYF1dCitdCisKK1toZWFkaW5nIEV4cHJlc3Npb24gU2VtYW50aWNzXQorCitbdGFibGUKKyAgICBbW0V4cHJlc3Npb25dICAgICAgIFtTZW1hbnRpY3NdXQorICAgIFtbYEYoKWBdICAgICAgICAgICAgW2NyZWF0ZXMgYW4gb2JqZWN0IG9mIHR5cGUgYEZgLl1dCisgICAgW1tgRihmKWBdICAgICAgICAgICBbY3JlYXRlcyBhbiBvYmplY3Qgb2YgdHlwZSBgRmAuXV0KKyAgICBbW2BmKGEwYC4uLmBhTilgXSAgIFtyZXR1cm5zIGBUKGEwYC4uLmBhTilgLl1dCisgICAgW1tgRjo6cmVzdWx0X3R5cGVgXSBbaXMgdGhlIHR5cGUgYFRgLl1dCitdCisKK1toZWFkaW5nIExpbWl0c10KKworVGhlIG1hY3JvIEJPT1NUX0ZVTkNUSU9OQUxfVkFMVUVfRkFDVE9SWV9NQVhfQVJJVFkgY2FuIGJlIGRlZmluZWQgdG8gc2V0IHRoZQorbWF4aW11bSBhcml0eS4gSXQgZGVmYXVsdHMgdG8gMTAuCisKK1tlbmRzZWN0XQorCisKK1tzZWN0aW9uIGZhY3RvcnldCisKK1toZWFkaW5nIERlc2NyaXB0aW9uXQorCitGdW5jdGlvbiBvYmplY3QgdGVtcGxhdGUgdGhhdCBkeW5hbWljYWxseSBjb25zdHJ1Y3RzIGEgcG9pbnRlZSBvYmplY3QgZm9yCit0aGUgdHlwZSBvZiBwb2ludGVyIGdpdmVuIGFzIHRlbXBsYXRlIGFyZ3VtZW50LiBTbWFydCBwb2ludGVycyBtYXkgYmUgdXNlZAorZm9yIHRoZSB0ZW1wbGF0ZSBhcmd1bWVudCwgZ2l2ZW4gdGhhdCBgYm9vc3Q6OnBvaW50ZWU8UG9pbnRlcj46OnR5cGVgIHlpZWxkcwordGhlIHBvaW50ZWUgdHlwZS4KKworSWYgYW4gX19hbGxvY2F0b3JfXyBpcyBnaXZlbiwgaXQgaXMgdXNlZCBmb3IgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHRoZSAKK3BsYWNlbWVudCBmb3JtIG9mIHRoZSBgbmV3YCBvcGVyYXRvciBpcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgb2JqZWN0LgorQSBmdW5jdGlvbiBvYmplY3QgdGhhdCBjYWxscyB0aGUgZGVzdHJ1Y3RvciBhbmQgZGVhbGxvY2F0ZXMgdGhlIG1lbW9yeQord2l0aCBhIGNvcHkgb2YgdGhlIEFsbG9jYXRvciBpcyB1c2VkIGZvciB0aGUgc2Vjb25kIGNvbnN0cnVjdG9yIGFyZ3VtZW50CitvZiBgUG9pbnRlcmAgKHRodXMgaXQgbXVzdCBiZSBhIF9fc21hcnRfcG9pbnRlcl9fIHRoYXQgcHJvdmlkZXMgYSBzdWl0YWJsZSAKK2NvbnN0cnVjdG9yLCBzdWNoIGFzIF9fYm9vc3RfX3NoYXJlZF9wdHJfXykuCisKK0lmIGEgdGhpcmQgdGVtcGxhdGUgYXJndW1lbnQgaXMgYGZhY3RvcnlfcGFzc2VzX2FsbG9jX3RvX3NtYXJ0X3BvaW50ZXJgLAordGhlIGFsbG9jYXRvciBpdHNlbGYgaXMgdXNlZCBmb3IgdGhlIHRoaXJkIGNvbnN0cnVjdG9yIGFyZ3VtZW50IG9mIGBQb2ludGVyYAorKF9fYm9vc3RfX3NoYXJlZF9wdHJfXyB0aGVuIHVzZXMgdGhlIGFsbG9jYXRvciB0byBtYW5hZ2UgdGhlIG1lbW9yeSBvZiBpdHMKK3NlcGFyYXRlbHkgYWxsb2NhdGVkIHJlZmVyZW5jZSBjb3VudGVyKS4KKworW2hlYWRpbmcgSGVhZGVyXQorICAgICNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2ZhY3RvcnkuaHBwPgorCitbaGVhZGluZyBTeW5vcHNpc10KKworICAgIG5hbWVzcGFjZSBib29zdAorICAgIHsKKyAgICAgICAgZW51bSBmYWN0b3J5X2FsbG9jX3Byb3BhZ2F0aW9uCisgICAgICAgIHsKKyAgICAgICAgICAgIGZhY3RvcnlfYWxsb2NfZm9yX3BvaW50ZWVfYW5kX2RlbGV0ZXIsCisgICAgICAgICAgICBmYWN0b3J5X3Bhc3Nlc19hbGxvY190b19zbWFydF9wb2ludGVyCisgICAgICAgIH07CisKKyAgICAgICAgdGVtcGxhdGU8IHR5cGVuYW1lIFBvaW50ZXIsIAorICAgICAgICAgICAgY2xhc3MgQWxsb2NhdG9yID0gYm9vc3Q6Om5vbmVfdCwKKyAgICAgICAgICAgIGZhY3RvcnlfYWxsb2NfcHJvcGFnYXRpb24gQWxsb2NQcm9wID0KKyAgICAgICAgICAgICAgICBmYWN0b3J5X2FsbG9jX2Zvcl9wb2ludGVlX2FuZF9kZWxldGVyID4KKyAgICAgICAgY2xhc3MgZmFjdG9yeTsKKyAgICB9CisKK1t2YXJpYWJsZWxpc3QgTm90YXRpb24KKyAgICBbW2BUYF0gICAgICAgICBbYW4gYXJiaXRyYXJ5IHR5cGUgd2l0aCBhdCBsZWFzdCBvbmUgcHVibGljIGNvbnN0cnVjdG9yXV0KKyAgICBbW2BQYF0gICAgICAgICBbcG9pbnRlciBvciBzbWFydCBwb2ludGVyIHRvIGBUYF1dCisgICAgW1tgYTBgLi4uYGFOYF0gW2FyZ3VtZW50IExWYWx1ZXMgdG8gYSBjb25zdHJ1Y3RvciBvZiBgVGBdXQorICAgIFtbYEZgXSAgICAgICAgIFt0aGUgdHlwZSBgZmFjdG9yeTxQPmBdXQorICAgIFtbYGZgXSAgICAgICAgIFthbiBpbnN0YW5jZSBvYmplY3Qgb2YgYEZgXV0KK10KKworW2hlYWRpbmcgRXhwcmVzc2lvbiBTZW1hbnRpY3NdCisKK1t0YWJsZQorICAgIFtbRXhwcmVzc2lvbl0gICAgICAgW1NlbWFudGljc11dCisgICAgW1tgRigpYF0gICAgICAgICAgICBbY3JlYXRlcyBhbiBvYmplY3Qgb2YgdHlwZSBgRmAuXV0KKyAgICBbW2BGKGYpYF0gICAgICAgICAgIFtjcmVhdGVzIGFuIG9iamVjdCBvZiB0eXBlIGBGYC5dXQorICAgIFtbYGYoYTBgLi4uYGFOKWBdICAgW2R5bmFtaWNhbGx5IGNyZWF0ZXMgYW4gb2JqZWN0IG9mIHR5cGUgYFRgIHVzaW5nIAorICAgICAgICBgYTBgLi4uYGFOYCBhcyBhcmd1bWVudHMgZm9yIHRoZSBjb25zdHJ1Y3RvciBpbnZvY2F0aW9uLl1dCisgICAgW1tgRjo6cmVzdWx0X3R5cGVgXSBbaXMgdGhlIHR5cGUgYFBgIHdpdGggdG9wLWxldmVsIGN2LXF1YWxpZmllcnMgcmVtb3ZlZC5dXQorXQorCitbaGVhZGluZyBMaW1pdHNdCisKK1RoZSBtYWNybyBCT09TVF9GVU5DVElPTkFMX0ZBQ1RPUllfTUFYX0FSSVRZIGNhbiBiZSBkZWZpbmVkIHRvIHNldCB0aGUKK21heGltdW0gYXJpdHkuIEl0IGRlZmF1bHRzIHRvIDEwLgorCitbZW5kc2VjdF0KKworW2VuZHNlY3RdCisKK1tzZWN0aW9uIEFja25vd2xlZGdlbWVudHNdCisKK0VyaWMgTmllYmxlciByZXF1ZXN0ZWQgYSBmdW5jdGlvbiB0byBpbnZva2UgYSB0eXBlJ3MgY29uc3RydWN0b3IgKHdpdGggdGhlIAorYXJndW1lbnRzIHN1cHBsaWVkIGFzIGEgVHVwbGUpIGFzIGEgRnVzaW9uIGZlYXR1cmUuIFRoZXNlIEZhY3RvcnkgdXRpbGl0aWVzIGFyZQorYSBmYWN0b3JlZC1vdXQgZ2VuZXJhbGl6YXRpb24gb2YgdGhpcyBpZGVhLgorCitEYXZlIEFicmFoYW1zIHN1Z2dlc3RlZCBTbWFydCBQb2ludGVyIHN1cHBvcnQgZm9yIGV4Y2VwdGlvbiBzYWZldHksIHByb3ZpZGluZwordXNlZnVsIGhpbnRzIGZvciB0aGUgaW1wbGVtZW50YXRpb24uCisKK0pvZWwgZGUgR3V6bWFuJ3MgZG9jdW1lbnRhdGlvbiBzdHlsZSB3YXMgY29waWVkIGZyb20gRnVzaW9uLgorCitGdXJ0aGVyLCBJIHdhbnQgdG8gdGhhbmsgUGV0ZXIgRGltb3YgZm9yIHNoYXJpbmcgaGlzIGluc2lnaHRzIG9uIGxhbmd1YWdlCitkZXRhaWxzIGFuZCB0aGVpciBldm9sdXRpb24uCisKK1tlbmRzZWN0XQorCitbc2VjdGlvbiBSZWZlcmVuY2VzXQorCisjIFtAaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EZXNpZ25fUGF0dGVybnMgRGVzaWduIFBhdHRlcm5zXSwKKyAgR2FtbWEgZXQgYWwuIC0gQWRkaXNvbiBXZXNsZXkgUHVibGlzaGluZywgMTk5NQorCisjIFtAaHR0cDovL3d3dy5zZ2kuY29tL3RlY2gvc3RsLyBTdGFuZGFyZCBUZW1wbGF0ZSBMaWJyYXJ5IFByb2dyYW1tZXIncyBHdWlkZV0sIAorICBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSwgMTk5NAorCisjIFtAaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9iaW5kL2JpbmQuaHRtbCBCb29zdC5CaW5kXSwgCisgIFBldGVyIERpbW92LCAyMDAxLTIwMDUKKworIyBbQGh0dHA6Ly93d3cuYm9vc3Qub3JnL2RvYy9odG1sL2Z1bmN0aW9uLmh0bWwgQm9vc3QuRnVuY3Rpb25dLAorICBEb3VnbGFzIEdyZWdvciwgMjAwMS0yMDA0CisKK1tlbmRzZWN0XQorCisKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9mYWN0b3J5L2RvYy9odG1sL2luZGV4Lmh0bWwgYi9saWJzL2Z1bmN0aW9uYWwvZmFjdG9yeS9kb2MvaHRtbC9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMzE2MjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvZmFjdG9yeS9kb2MvaHRtbC9pbmRleC5odG1sCkBAIC0wLDAgKzEsNjIwIEBACis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVMtQVNDSUkiPgorPHRpdGxlPkNoYXB0ZXImIzE2MDsxLiYjMTYwO0Jvb3N0LkZ1bmN0aW9uYWwvRmFjdG9yeSAxLjA8L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2Jvb3N0Ym9vay5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzguMSI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJDaGFwdGVyJiMxNjA7MS4mIzE2MDtCb29zdC5GdW5jdGlvbmFsL0ZhY3RvcnkgMS4wIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjZWxscGFkZGluZz0iMiIgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+PGltZyBhbHQ9IkJvb3N0IEMrKyBMaWJyYXJpZXMiIHdpZHRoPSIyNzciIGhlaWdodD0iODYiIHNyYz0iLi4vLi4vLi4vLi4vLi4vYm9vc3QucG5nIj48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWwiPkhvbWU8L2E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi9saWJyYXJpZXMuaHRtIj5MaWJyYXJpZXM8L2E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy91c2Vycy9wZW9wbGUuaHRtbCI+UGVvcGxlPC9hPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvdXNlcnMvZmFxLmh0bWwiPkZBUTwvYT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL21vcmUvaW5kZXguaHRtIj5Nb3JlPC9hPjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8aHI+Cis8ZGl2IGNsYXNzPSJzcGlyaXQtbmF2Ij48L2Rpdj4KKzxkaXYgY2xhc3M9ImNoYXB0ZXIiPgorPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PgorPGRpdj48aDIgY2xhc3M9InRpdGxlIj4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeSI+PC9hPkNoYXB0ZXImIzE2MDsxLiYjMTYwO0Jvb3N0LkZ1bmN0aW9uYWwvRmFjdG9yeSAxLjA8L2gyPjwvZGl2PgorPGRpdj48ZGl2IGNsYXNzPSJhdXRob3IiPjxoMyBjbGFzcz0iYXV0aG9yIj4KKzxzcGFuIGNsYXNzPSJmaXJzdG5hbWUiPlRvYmlhczwvc3Bhbj4gPHNwYW4gY2xhc3M9InN1cm5hbWUiPlNjaHdpbmdlcjwvc3Bhbj4KKzwvaDM+PC9kaXY+PC9kaXY+Cis8ZGl2PjxwIGNsYXNzPSJjb3B5cmlnaHQiPkNvcHlyaWdodCAmIzE2OTsgMjAwNywgMjAwOCBUb2JpYXMgU2Nod2luZ2VyPC9wPjwvZGl2PgorPGRpdj48ZGl2IGNsYXNzPSJsZWdhbG5vdGljZSI+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkubGVnYWwiPjwvYT48cD4KKyAgICAgICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworICAgICAgICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCIgdGFyZ2V0PSJfdG9wIj5odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KQorICAgICAgPC9wPgorPC9kaXY+PC9kaXY+Cis8L2Rpdj48L2Rpdj4KKzxkaXYgY2xhc3M9InRvYyI+Cis8cD48Yj5UYWJsZSBvZiBDb250ZW50czwvYj48L3A+Cis8ZGwgY2xhc3M9InRvYyI+Cis8ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LmJyaWVmX2Rlc2NyaXB0aW9uIj5CcmllZiBEZXNjcmlwdGlvbjwvYT48L3NwYW4+PC9kdD4KKzxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkuYmFja2dyb3VuZCI+QmFja2dyb3VuZDwvYT48L3NwYW4+PC9kdD4KKzxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlIj5SZWZlcmVuY2U8L2E+PC9zcGFuPjwvZHQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LmFja25vd2xlZGdlbWVudHMiPkFja25vd2xlZGdlbWVudHM8L2E+PC9zcGFuPjwvZHQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZXMiPlJlZmVyZW5jZXM8L2E+PC9zcGFuPjwvZHQ+Cis8L2RsPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkuYnJpZWZfZGVzY3JpcHRpb24iPjwvYT48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkuYnJpZWZfZGVzY3JpcHRpb24iIHRpdGxlPSJCcmllZiBEZXNjcmlwdGlvbiI+QnJpZWYgRGVzY3JpcHRpb248L2E+Cis8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgorPHA+CisgICAgICBUaGUgdGVtcGxhdGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mYWN0b3J5PC9zcGFuPjwvY29kZT4gbGV0cyB5b3UgZW5jYXBzdWxhdGUgYSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5uZXc8L3NwYW4+PC9jb2RlPiBleHByZXNzaW9uIGFzIGEgZnVuY3Rpb24gb2JqZWN0LCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnZhbHVlX2ZhY3Rvcnk8L3NwYW4+PC9jb2RlPgorICAgICAgZW5jYXBzdWxhdGVzIGEgY29uc3RydWN0b3IgaW52b2NhdGlvbiB3aXRob3V0IDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPm5ldzwvc3Bhbj48L2NvZGU+LgorICAgIDwvcD4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZhY3Rvcnk8L3NwYW4+PC9jb2RlPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4qJmd0OygpKDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YXJnMTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YXJnMjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YXJnMzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBzYW1lIGFzIG5ldyBUKGFyZzEsYXJnMixhcmczKTwvc3Bhbj4KKworPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj52YWx1ZV9mYWN0b3J5PC9zcGFuPjwvY29kZT48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0OygpKDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YXJnMTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YXJnMjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YXJnMzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBzYW1lIGFzIFQoYXJnMSxhcmcyLGFyZzMpPC9zcGFuPgorPC9wcmU+Cis8cD4KKyAgICAgIEZvciB0ZWNobmljYWwgcmVhc29ucyB0aGUgYXJndW1lbnRzIHRvIHRoZSBmdW5jdGlvbiBvYmplY3RzIGhhdmUgdG8gYmUgTFZhbHVlcy4KKyAgICAgIEEgZmFjdG9yeSB0aGF0IGFsc28gYWNjZXB0cyBSVmFsdWVzIGNhbiBiZSBjb21wb3NlZCB1c2luZyB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9mdW5jdGlvbmFsL2ZvcndhcmQvZG9jL2luZGV4Lmh0bWwiIHRhcmdldD0iX3RvcCI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mb3J3YXJkX2FkYXB0ZXI8L3NwYW4+PC9jb2RlPjwvYT4KKyAgICAgIG9yIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvYmluZC9iaW5kLmh0bWwiIHRhcmdldD0iX3RvcCI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5iaW5kPC9zcGFuPjwvY29kZT48L2E+LgorICAgIDwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LmJhY2tncm91bmQiPjwvYT48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkuYmFja2dyb3VuZCIgdGl0bGU9IkJhY2tncm91bmQiPkJhY2tncm91bmQ8L2E+Cis8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgorPHA+CisgICAgICBJbiB0cmFkaXRpb25hbCBPYmplY3QgT3JpZW50ZWQgUHJvZ3JhbW1pbmcgYSBGYWN0b3J5IGlzIGFuIG9iamVjdCBpbXBsZW1lbnRpbmcKKyAgICAgIGFuIGludGVyZmFjZSBvZiBvbmUgb3IgbW9yZSBtZXRob2RzIHRoYXQgY29uc3RydWN0IG9iamVjdHMgY29uZm9ybWluZyB0byBrbm93bgorICAgICAgaW50ZXJmYWNlcy4KKyAgICA8L3A+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIGFzc3VtaW5nIGFfY29uY3JldGVfY2xhc3MgYW5kIGFub3RoZXJfY29uY3JldGVfY2xhc3MgYXJlIGRlcml2ZWQ8L3NwYW4+Cis8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gZnJvbSBhbl9hYnN0cmFjdF9jbGFzczwvc3Bhbj4KKworPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNsYXNzPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YV9mYWN0b3J5PC9zcGFuPgorPHNwYW4gY2xhc3M9InNwZWNpYWwiPns8L3NwYW4+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5wdWJsaWM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo8L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnZpcnR1YWw8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hbl9hYnN0cmFjdF9jbGFzczwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Kjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmNyZWF0ZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KCk8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjA8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjs8L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnZpcnR1YWw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj5+PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hX2ZhY3Rvcnk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPigpPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+ezwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPn08L3NwYW4+Cis8c3BhbiBjbGFzcz0ic3BlY2lhbCI+fTs8L3NwYW4+CisKKzxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jbGFzczwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFfY29uY3JldGVfZmFjdG9yeTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPjo8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5wdWJsaWM8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hX2ZhY3Rvcnk8L3NwYW4+Cis8c3BhbiBjbGFzcz0ic3BlY2lhbCI+ezwvc3Bhbj4KKyAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnB1YmxpYzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dmlydHVhbDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFuX2Fic3RyYWN0X2NsYXNzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4qPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Y3JlYXRlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oKTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJzcGVjaWFsIj57PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+cmV0dXJuPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+bmV3PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YV9jb25jcmV0ZV9jbGFzczwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KCk7PC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJzcGVjaWFsIj59PC9zcGFuPgorPHNwYW4gY2xhc3M9InNwZWNpYWwiPn07PC9zcGFuPgorCis8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y2xhc3M8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hbm90aGVyX2NvbmNyZXRlX2ZhY3Rvcnk8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj46PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+cHVibGljPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YV9mYWN0b3J5PC9zcGFuPgorPHNwYW4gY2xhc3M9InNwZWNpYWwiPns8L3NwYW4+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5wdWJsaWM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo8L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnZpcnR1YWw8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hbl9hYnN0cmFjdF9jbGFzczwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Kjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmNyZWF0ZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KCk8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+ezwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnJldHVybjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPm5ldzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFub3RoZXJfY29uY3JldGVfY2xhc3M8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPigpOzwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+fTwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJzcGVjaWFsIj59Ozwvc3Bhbj4KKworPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIFsuLi5dPC9zcGFuPgorCis8c3BhbiBjbGFzcz0ia2V5d29yZCI+aW50PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+bWFpbjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KCk8L3NwYW4+Cis8c3BhbiBjbGFzcz0ic3BlY2lhbCI+ezwvc3Bhbj4KKyAgICA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3B0cl9jb250YWluZXIvZG9jL3B0cl9tYXAuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnB0cl9tYXA8L3NwYW4+PC9jb2RlPjwvYT48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48YSBocmVmPSJodHRwOi8vd3d3LnNnaS5jb20vdGVjaC9zdGwvc3RyaW5nLmh0bWwiIHRhcmdldD0iX3RvcCI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RkPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RyaW5nPC9zcGFuPjwvY29kZT48L2E+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFfZmFjdG9yeTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZhY3Rvcmllczwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj4KKworICAgIDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBbLi4uXTwvc3Bhbj4KKworICAgIDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mYWN0b3JpZXM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPi48L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmluc2VydDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4iYV9uYW1lIjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RkPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YXV0b19wdHI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFfZmFjdG9yeTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Oyg8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5uZXc8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hX2NvbmNyZXRlX2ZhY3Rvcnk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPikpOzwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZmFjdG9yaWVzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4uPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pbnNlcnQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+ImFub3RoZXJfbmFtZSI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0ZDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmF1dG9fcHRyPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hX2ZhY3Rvcnk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDsoPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+bmV3PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YW5vdGhlcl9jb25jcmV0ZV9mYWN0b3J5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pKTs8L3NwYW4+CisKKyAgICA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gWy4uLl08L3NwYW4+CisKKyAgICA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RkPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YXV0b19wdHI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFuX2Fic3RyYWN0X2NsYXNzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+eDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZmFjdG9yaWVzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4uPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c29tZV9uYW1lPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pLjwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Y3JlYXRlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oKSk7PC9zcGFuPgorCisgICAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIFsuLi5dPC9zcGFuPgorPHNwYW4gY2xhc3M9InNwZWNpYWwiPn08L3NwYW4+Cis8L3ByZT4KKzxwPgorICAgICAgVGhpcyBhcHByb2FjaCBoYXMgc2V2ZXJhbCBkcmF3YmFja3MuIFRoZSBtb3N0IG9idmlvdXMgb25lIGlzIHRoYXQgdGhlcmUgaXMKKyAgICAgIGxvdHMgb2YgYm9pbGVycGxhdGUgY29kZS4gSW4gb3RoZXIgd29yZHMgdGhlcmUgaXMgdG9vIG11Y2ggY29kZSB0byBleHByZXNzCisgICAgICBhIHJhdGhlciBzaW1wbGUgaW50ZW50aW9uLiBXZSBjb3VsZCB1c2UgdGVtcGxhdGVzIHRvIGdldCByaWQgb2Ygc29tZSBvZiBpdAorICAgICAgYnV0IHRoZSBhcHByb2FjaCByZW1haW5zIGluZmxleGlibGU6CisgICAgPC9wPgorPGRpdiBjbGFzcz0iaXRlbWl6ZWRsaXN0Ij48dWwgY2xhc3M9Iml0ZW1pemVkbGlzdCIgc3R5bGU9Imxpc3Qtc3R5bGUtdHlwZTogZGlzYzsgIj4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPgorICAgICAgICAgIFdlIG1heSB3YW50IGEgZmFjdG9yeSB0aGF0IHRha2VzIHNvbWUgYXJndW1lbnRzIHRoYXQgYXJlIGZvcndhcmRlZCB0byB0aGUKKyAgICAgICAgICBjb25zdHJ1Y3RvciwKKyAgICAgICAgPC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPgorICAgICAgICAgIHdlIHdpbGwgcHJvYmFibHkgd2FudCB0byB1c2Ugc21hcnQgcG9pbnRlcnMsCisgICAgICAgIDwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj4KKyAgICAgICAgICB3ZSBtYXkgd2FudCBzZXZlcmFsIG1lbWJlciBmdW5jdGlvbnMgdG8gY3JlYXRlIGRpZmZlcmVudCBraW5kcyBvZiBvYmplY3RzLAorICAgICAgICA8L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+CisgICAgICAgICAgd2UgbWlnaHQgbm90IG5lY2Vzc2FyaWx5IG5lZWQgYSBwb2x5bW9ycGhpYyBiYXNlIGNsYXNzIGZvciB0aGUgb2JqZWN0cywKKyAgICAgICAgPC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPgorICAgICAgICAgIGFzIHdlIHdpbGwgc2VlLCB3ZSBkbyBub3QgbmVlZCBhIGZhY3RvcnkgYmFzZSBjbGFzcyBhdCBhbGwsCisgICAgICAgIDwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj4KKyAgICAgICAgICB3ZSBtaWdodCB3YW50IHRvIGp1c3QgY2FsbCB0aGUgY29uc3RydWN0b3IgLSB3aXRob3V0IDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPm5ldzwvc3Bhbj48L2NvZGU+CisgICAgICAgICAgdG8gY3JlYXRlIGFuIG9iamVjdCBvbiB0aGUgc3RhY2ssIGFuZAorICAgICAgICA8L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+CisgICAgICAgICAgZmluYWxseSB3ZSBtaWdodCB3YW50IHRvIHVzZSBjdXN0b21pemVkIG1lbW9yeSBtYW5hZ2VtZW50LgorICAgICAgICA8L2xpPgorPC91bD48L2Rpdj4KKzxwPgorICAgICAgRXhwZXJpZW5jZSBoYXMgc2hvd24gdGhhdCB1c2luZyBmdW5jdGlvbiBvYmplY3RzIGFuZCBnZW5lcmljIEJvb3N0IGNvbXBvbmVudHMKKyAgICAgIGZvciB0aGVpciBjb21wb3NpdGlvbiwgRGVzaWduIFBhdHRlcm5zIHRoYXQgZGVzY3JpYmUgY2FsbGJhY2sgbWVjaGFuaXNtcyAodHlwaWNhbGx5CisgICAgICByZXF1aXJpbmcgYSBoaWdoIHBlcmNlbnRhZ2Ugb2YgYm9pbGVycGxhdGUgY29kZSB3aXRoIHB1cmUgT2JqZWN0IE9yaWVudGVkIG1ldGhvZG9sb2d5KQorICAgICAgYmVjb21lIGltcGxlbWVudGFibGUgd2l0aCBqdXN0IGZldyBjb2RlIGxpbmVzIGFuZCB3aXRob3V0IGV4dHJhIGNsYXNzZXMuCisgICAgPC9wPgorPHA+CisgICAgICBGYWN0b3JpZXMgYXJlIGNhbGxiYWNrIG1lY2hhbmlzbXMgZm9yIGNvbnN0cnVjdG9ycywgc28gd2UgcHJvdmlkZSB0d28gY2xhc3MKKyAgICAgIHRlbXBsYXRlcywgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj52YWx1ZV9mYWN0b3J5PC9zcGFuPjwvY29kZT4gYW5kIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZmFjdG9yeTwvc3Bhbj48L2NvZGU+LAorICAgICAgdGhhdCBlbmNhcHN1bGF0ZSBvYmplY3QgY29uc3RydWN0aW9uIHZpYSBkaXJlY3QgYXBwbGljYXRpb24gb2YgdGhlIGNvbnN0cnVjdG9yCisgICAgICBhbmQgdGhlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPm5ldzwvc3Bhbj48L2NvZGU+IG9wZXJhdG9yLCByZXNwZWN0aXZlbHkuCisgICAgPC9wPgorPHA+CisgICAgICBXZSBsZXQgdGhlIGZ1bmN0aW9uIG9iamVjdHMgZm9yd2FyZCB0aGVpciBhcmd1bWVudHMgdG8gdGhlIGNvbnN0cnVjdGlvbiBleHByZXNzaW9ucworICAgICAgdGhleSBlbmNhcHN1bGF0ZS4gT3ZlciB0aGlzIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZmFjdG9yeTwvc3Bhbj48L2NvZGU+CisgICAgICBvcHRpb25hbGx5IGFsbG93cyB0aGUgdXNlIG9mIHNtYXJ0IHBvaW50ZXJzIGFuZCA8YSBocmVmPSJodHRwOi8vd3d3LnNnaS5jb20vdGVjaC9zdGwvY29uY2VwdHMvYWxsb2NhdG9yLmh0bWwiIHRhcmdldD0iX3RvcCI+QWxsb2NhdG9yczwvYT4uCisgICAgPC9wPgorPHA+CisgICAgICBDb21waWxlLXRpbWUgcG9seW1vcnBoaXNtIGNhbiBiZSB1c2VkIHdoZXJlIGFwcHJvcHJpYXRlLAorICAgIDwvcD4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0ia2V5d29yZCI+dGVtcGxhdGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jbGFzczwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPgorPHNwYW4gY2xhc3M9ImtleXdvcmQiPnZvaWQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5kb19zb21ldGhpbmc8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPigpPC9zcGFuPgorPHNwYW4gY2xhc3M9InNwZWNpYWwiPns8L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIFsuLi5dPC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+eDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5iPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4KKworICAgIDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBmb3IgY29uY2VwdHVhbGx5IHNpbWlsYXIgb2JqZWN0cyB4IHdlIG5laXRoZXIgbmVlZCB2aXJ0dWFsPC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBmdW5jdGlvbnMgbm9yIGEgY29tbW9uIGJhc2UgY2xhc3MgaW4gdGhpcyBjb250ZXh0Ljwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gWy4uLl08L3NwYW4+Cis8c3BhbiBjbGFzcz0ic3BlY2lhbCI+fTwvc3Bhbj4KKzwvcHJlPgorPHA+CisgICAgICBOb3csIHRvIGFsbG93IGluaG9tb2dlbmVvdXMgc2lnbmF0dXJlcyBmb3IgdGhlIGNvbnN0cnVjdG9ycyBvZiB0aGUgdHlwZXMgcGFzc2VkCisgICAgICBpbiBmb3IgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj48L2NvZGU+IHdlIGNhbiB1c2UgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+dmFsdWVfZmFjdG9yeTwvc3Bhbj48L2NvZGU+IGFuZCA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2JpbmQvYmluZC5odG1sIiB0YXJnZXQ9Il90b3AiPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YmluZDwvc3Bhbj48L2NvZGU+PC9hPgorICAgICAgdG8gbm9ybWFsaXplIGJldHdlZW4gdGhlbS4KKyAgICA8L3A+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPnRlbXBsYXRlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y2xhc3M8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5WYWx1ZUZhY3Rvcnk8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPgorPHNwYW4gY2xhc3M9ImtleXdvcmQiPnZvaWQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5kb19zb21ldGhpbmc8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlZhbHVlRmFjdG9yeTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPm1ha2Vfb2JqPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlZhbHVlRmFjdG9yeTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KCkpPC9zcGFuPgorPHNwYW4gY2xhc3M9InNwZWNpYWwiPns8L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIFsuLi5dPC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlbmFtZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlZhbHVlRmFjdG9yeTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnJlc3VsdF90eXBlPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+eDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5tYWtlX29iajwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Yjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+CisKKyAgICA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gZm9yIGNvbmNlcHR1YWxseSBzaW1pbGFyIG9iamVjdHMgeCB3ZSBuZWl0aGVyIG5lZWQgdmlydHVhbDwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gZnVuY3Rpb25zIG5vciBhIGNvbW1vbiBiYXNlIGNsYXNzIGluIHRoaXMgY29udGV4dC48L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIFsuLi5dPC9zcGFuPgorPHNwYW4gY2xhc3M9InNwZWNpYWwiPn08L3NwYW4+CisKKzxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pbnQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5tYWluPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oKTwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJzcGVjaWFsIj57PC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBbLi4uXTwvc3Bhbj4KKworICAgIDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5kb19zb21ldGhpbmc8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj52YWx1ZV9mYWN0b3J5PC9zcGFuPjwvY29kZT48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+WDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0OygpKTs8L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmRvX3NvbWV0aGluZzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5iaW5kPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+dmFsdWVfZmFjdG9yeTwvc3Bhbj48L2NvZGU+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDsoKSw8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPl8xPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPl8yPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pKTs8L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIGNvbnN0cnVjdCBYKGEsYikgYW5kIFkoYSw1LGIpLCByZXNwZWN0aXZlbHkuPC9zcGFuPgorCisgICAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIFsuLi5dPC9zcGFuPgorPHNwYW4gY2xhc3M9InNwZWNpYWwiPn08L3NwYW4+Cis8L3ByZT4KKzxwPgorICAgICAgTWF5YmUgd2Ugd2FudCBvdXIgb2JqZWN0cyB0byBvdXRsaXZlIHRoZSBmdW5jdGlvbidzIHNjb3BlLCBpbiB0aGlzIGNhc2Ugd2UKKyAgICAgIGhhdmUgdG8gdXNlIGR5bmFtaWMgYWxsb2NhdGlvbjsKKyAgICA8L3A+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPnRlbXBsYXRlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y2xhc3M8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GYWN0b3J5PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj53aGF0ZXZlcjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmRvX3NvbWV0aGluZzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RmFjdG9yeTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPm5ld19vYmo8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RmFjdG9yeTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KCkpPC9zcGFuPgorPHNwYW4gY2xhc3M9InNwZWNpYWwiPns8L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVuYW1lPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RmFjdG9yeTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnJlc3VsdF90eXBlPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+cHRyPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPm5ld19vYmo8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmE8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPgorCisgICAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIGFnYWluLCBubyBjb21tb24gYmFzZSBjbGFzcyBvciB2aXJ0dWFsIGZ1bmN0aW9ucyBuZWVkZWQsPC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyB3ZSBjb3VsZCBlbmZvcmNlIGEgcG9seW1vcnBoaWMgYmFzZSBieSB3cml0aW5nIGUuZy48L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vICAgIGJvb3N0OjpzaGFyZWRfcHRyJmx0O2Jhc2UmZ3Q7PC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBpbnN0ZWFkIG9mPC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyAgICB0eXBlbmFtZSBGYWN0b3J5OjpyZXN1bHRfdHlwZTwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gYWJvdmUuPC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBOb3RlIHRoYXQgd2UgYXJlIGFsc28gZnJlZSB0byBoYXZlIHRoZSB0eXBlIGVyYXN1cmUgaGFwcGVuIDwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gc29tZXdoZXJlIGVsc2UgKGUuZy4gaW4gdGhlIGNvbnN0cnVjdG9yIG9mIHRoaXMgZnVuY3Rpb24nczwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gcmVzdWx0IHR5cGUpLjwvc3Bhbj4KKworICAgIDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBbLi4uXTwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJzcGVjaWFsIj59PC9zcGFuPgorCis8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gWy4uLiBjYWxsIGRvX3NvbWV0aGluZyBsaWtlIGFib3ZlIGJ1dCB3aXRoIF9fZmFjdG9yeV9fIGluc3RlYWQ8L3NwYW4+Cis8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gb2YgX192YWx1ZV9mYWN0b3J5X19dPC9zcGFuPgorPC9wcmU+Cis8cD4KKyAgICAgIEFsdGhvdWdoIHdlIG1pZ2h0IGhhdmUgY3JlYXRlZCBwb2x5bW9ycGhpYyBvYmplY3RzIGluIHRoZSBwcmV2aW91cyBleGFtcGxlLAorICAgICAgd2UgaGF2ZSB1c2VkIGNvbXBpbGUgdGltZSBwb2x5bW9ycGhpc20gZm9yIHRoZSBmYWN0b3J5LiBJZiB3ZSB3YW50IHRvIGVyYXNlCisgICAgICB0aGUgdHlwZSBvZiB0aGUgZmFjdG9yeSBhbmQgdGh1cyBhbGxvdyBwb2x5bW9ycGhpc20gYXQgcnVuIHRpbWUsIHdlIGNhbiB1c2UKKyAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL2RvYy9odG1sL2Z1bmN0aW9uLmh0bWwiIHRhcmdldD0iX3RvcCI+Qm9vc3QuRnVuY3Rpb248L2E+CisgICAgICB0byBkbyBzby4gVGhlIGZpcnN0IGV4YW1wbGUgY2FuIGJlIHJld3JpdHRlbiBhcyBmb2xsb3dzLgorICAgIDwvcD4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuY3Rpb248L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hbl9hYnN0cmFjdF9jbGFzczwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KigpPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFfZmFjdG9yeTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj4KKworPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIFsuLi5dPC9zcGFuPgorCis8c3BhbiBjbGFzcz0ia2V5d29yZCI+aW50PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+bWFpbjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KCk8L3NwYW4+Cis8c3BhbiBjbGFzcz0ic3BlY2lhbCI+ezwvc3Bhbj4KKyAgICA8YSBocmVmPSJodHRwOi8vd3d3LnNnaS5jb20vdGVjaC9zdGwvbWFwLmh0bWwiIHRhcmdldD0iX3RvcCI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RkPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+bWFwPC9zcGFuPjwvY29kZT48L2E+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PGEgaHJlZj0iaHR0cDovL3d3dy5zZ2kuY29tL3RlY2gvc3RsL3N0cmluZy5odG1sIiB0YXJnZXQ9Il90b3AiPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0ZDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0cmluZzwvc3Bhbj48L2NvZGU+PC9hPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hX2ZhY3Rvcnk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mYWN0b3JpZXM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjs8L3NwYW4+CisKKyAgICA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gWy4uLl08L3NwYW4+CisKKyAgICA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZmFjdG9yaWVzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj5bPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiJhX25hbWUiPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj5dPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PTwvc3Bhbj4gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mYWN0b3J5PC9zcGFuPjwvY29kZT48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YV9jb25jcmV0ZV9jbGFzczwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KiZndDsoKTs8L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZhY3Rvcmllczwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Wzwvc3Bhbj48c3BhbiBjbGFzcz0ic3RyaW5nIj4iYW5vdGhlcl9uYW1lIjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+XTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPj08L3NwYW4+CisgICAgICAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZmFjdG9yeTwvc3Bhbj48L2NvZGU+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFub3RoZXJfY29uY3JldGVfY2xhc3M8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiomZ3Q7KCk7PC9zcGFuPgorCisgICAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIFsuLi5dPC9zcGFuPgorPHNwYW4gY2xhc3M9InNwZWNpYWwiPn08L3NwYW4+Cis8L3ByZT4KKzxwPgorICAgICAgT2YgY291cnNlIHdlIGNhbiBqdXN0IGFzIGVhc3kgY3JlYXRlIGZhY3RvcmllcyB0aGF0IHRha2UgYXJndW1lbnRzIGFuZC9vciByZXR1cm4KKyAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvc21hcnRfcHRyL2luZGV4Lmh0bWwiIHRhcmdldD0iX3RvcCI+U21hcnQgUG9pbnRlcnM8L2E+LgorICAgIDwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZSI+PC9hPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UiIHRpdGxlPSJSZWZlcmVuY2UiPlJlZmVyZW5jZTwvYT4KKzwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Cis8ZGl2IGNsYXNzPSJ0b2MiPjxkbCBjbGFzcz0idG9jIj4KKzxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlLnZhbHVlX2ZhY3RvcnkiPnZhbHVlX2ZhY3Rvcnk8L2E+PC9zcGFuPjwvZHQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZS5mYWN0b3J5Ij5mYWN0b3J5PC9hPjwvc3Bhbj48L2R0PgorPC9kbD48L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0aXRsZSI+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlLnZhbHVlX2ZhY3RvcnkiPjwvYT48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlLnZhbHVlX2ZhY3RvcnkiIHRpdGxlPSJ2YWx1ZV9mYWN0b3J5Ij52YWx1ZV9mYWN0b3J5PC9hPgorPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KKzxoNT4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UudmFsdWVfZmFjdG9yeS5oMCI+PC9hPgorICAgICAgICA8c3BhbiBjbGFzcz0icGhyYXNlIj48YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlLnZhbHVlX2ZhY3RvcnkuZGVzY3JpcHRpb24iPjwvYT48L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZS52YWx1ZV9mYWN0b3J5LmRlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjwvYT4KKyAgICAgIDwvaDU+Cis8cD4KKyAgICAgICAgRnVuY3Rpb24gb2JqZWN0IHRlbXBsYXRlIHRoYXQgaW52b2tlcyB0aGUgY29uc3RydWN0b3Igb2YgdGhlIHR5cGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj48L2NvZGU+LgorICAgICAgPC9wPgorPGg1PgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZS52YWx1ZV9mYWN0b3J5LmgxIj48L2E+CisgICAgICAgIDxzcGFuIGNsYXNzPSJwaHJhc2UiPjxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UudmFsdWVfZmFjdG9yeS5oZWFkZXIiPjwvYT48L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZS52YWx1ZV9mYWN0b3J5LmhlYWRlciI+SGVhZGVyPC9hPgorICAgICAgPC9oNT4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icHJlcHJvY2Vzc29yIj4jaW5jbHVkZTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4vPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jdGlvbmFsPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4vPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj52YWx1ZV9mYWN0b3J5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4uPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ocHA8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+Cis8L3ByZT4KKzxoNT4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UudmFsdWVfZmFjdG9yeS5oMiI+PC9hPgorICAgICAgICA8c3BhbiBjbGFzcz0icGhyYXNlIj48YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlLnZhbHVlX2ZhY3Rvcnkuc3lub3BzaXMiPjwvYT48L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZS52YWx1ZV9mYWN0b3J5LnN5bm9wc2lzIj5TeW5vcHNpczwvYT4KKyAgICAgIDwvaDU+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPm5hbWVzcGFjZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPgorPHNwYW4gY2xhc3M9InNwZWNpYWwiPns8L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPnRlbXBsYXRlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y2xhc3M8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj52YWx1ZV9mYWN0b3J5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj47PC9zcGFuPgorPHNwYW4gY2xhc3M9InNwZWNpYWwiPn08L3NwYW4+Cis8L3ByZT4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+Cis8cCBjbGFzcz0idGl0bGUiPjxiPk5vdGF0aW9uPC9iPjwvcD4KKzxkbCBjbGFzcz0idmFyaWFibGVsaXN0Ij4KKzxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj48L2NvZGU+PC9zcGFuPjwvZHQ+Cis8ZGQ+PHA+CisgICAgICAgICAgICAgIGFuIGFyYml0cmFyeSB0eXBlIHdpdGggYXQgbGVhc3Qgb25lIHB1YmxpYyBjb25zdHJ1Y3RvcgorICAgICAgICAgICAgPC9wPjwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmEwPC9zcGFuPjwvY29kZT4uLi48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hTjwvc3Bhbj48L2NvZGU+PC9zcGFuPjwvZHQ+Cis8ZGQ+PHA+CisgICAgICAgICAgICAgIGFyZ3VtZW50IExWYWx1ZXMgdG8gYSBjb25zdHJ1Y3RvciBvZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPjwvY29kZT4KKyAgICAgICAgICAgIDwvcD48L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GPC9zcGFuPjwvY29kZT48L3NwYW4+PC9kdD4KKzxkZD48cD4KKyAgICAgICAgICAgICAgdGhlIHR5cGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+dmFsdWVfZmFjdG9yeTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Rjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj48L2NvZGU+CisgICAgICAgICAgICA8L3A+PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zjwvc3Bhbj48L2NvZGU+PC9zcGFuPjwvZHQ+Cis8ZGQ+PHA+CisgICAgICAgICAgICAgIGFuIGluc3RhbmNlIG9iamVjdCBvZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GPC9zcGFuPjwvY29kZT4KKyAgICAgICAgICAgIDwvcD48L2RkPgorPC9kbD4KKzwvZGl2PgorPGg1PgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZS52YWx1ZV9mYWN0b3J5LmgzIj48L2E+CisgICAgICAgIDxzcGFuIGNsYXNzPSJwaHJhc2UiPjxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UudmFsdWVfZmFjdG9yeS5leHByZXNzaW9uX3NlbWFudGljcyI+PC9hPjwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlLnZhbHVlX2ZhY3RvcnkuZXhwcmVzc2lvbl9zZW1hbnRpY3MiPkV4cHJlc3Npb24KKyAgICAgICAgU2VtYW50aWNzPC9hPgorICAgICAgPC9oNT4KKzxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0idGFibGUiPgorPGNvbGdyb3VwPgorPGNvbD4KKzxjb2w+Cis8L2NvbGdyb3VwPgorPHRoZWFkPjx0cj4KKzx0aD4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24KKyAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgIDwvdGg+Cis8dGg+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICBTZW1hbnRpY3MKKyAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgIDwvdGg+Cis8L3RyPjwvdGhlYWQ+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oKTwvc3Bhbj48L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgICA8L3RkPgorPHRkPgorICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgY3JlYXRlcyBhbiBvYmplY3Qgb2YgdHlwZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GPC9zcGFuPjwvY29kZT4uCisgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgICA8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkY8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmY8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+PC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgPC90ZD4KKzx0ZD4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgIGNyZWF0ZXMgYW4gb2JqZWN0IG9mIHR5cGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Rjwvc3Bhbj48L2NvZGU+LgorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hMDwvc3Bhbj48L2NvZGU+Li4uPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YU48L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+PC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgPC90ZD4KKzx0ZD4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgIHJldHVybnMgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YTA8L3NwYW4+PC9jb2RlPi4uLjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFOPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPjwvY29kZT4uCisgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgICA8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkY8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5yZXN1bHRfdHlwZTwvc3Bhbj48L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgICA8L3RkPgorPHRkPgorICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgaXMgdGhlIHR5cGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj48L2NvZGU+LgorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxoNT4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UudmFsdWVfZmFjdG9yeS5oNCI+PC9hPgorICAgICAgICA8c3BhbiBjbGFzcz0icGhyYXNlIj48YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlLnZhbHVlX2ZhY3RvcnkubGltaXRzIj48L2E+PC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UudmFsdWVfZmFjdG9yeS5saW1pdHMiPkxpbWl0czwvYT4KKyAgICAgIDwvaDU+Cis8cD4KKyAgICAgICAgVGhlIG1hY3JvIEJPT1NUX0ZVTkNUSU9OQUxfVkFMVUVfRkFDVE9SWV9NQVhfQVJJVFkgY2FuIGJlIGRlZmluZWQgdG8gc2V0CisgICAgICAgIHRoZSBtYXhpbXVtIGFyaXR5LiBJdCBkZWZhdWx0cyB0byAxMC4KKyAgICAgIDwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UuZmFjdG9yeSI+PC9hPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UuZmFjdG9yeSIgdGl0bGU9ImZhY3RvcnkiPmZhY3Rvcnk8L2E+Cis8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PgorPGg1PgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZS5mYWN0b3J5LmgwIj48L2E+CisgICAgICAgIDxzcGFuIGNsYXNzPSJwaHJhc2UiPjxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UuZmFjdG9yeS5kZXNjcmlwdGlvbiI+PC9hPjwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlLmZhY3RvcnkuZGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uPC9hPgorICAgICAgPC9oNT4KKzxwPgorICAgICAgICBGdW5jdGlvbiBvYmplY3QgdGVtcGxhdGUgdGhhdCBkeW5hbWljYWxseSBjb25zdHJ1Y3RzIGEgcG9pbnRlZSBvYmplY3QgZm9yCisgICAgICAgIHRoZSB0eXBlIG9mIHBvaW50ZXIgZ2l2ZW4gYXMgdGVtcGxhdGUgYXJndW1lbnQuIFNtYXJ0IHBvaW50ZXJzIG1heSBiZSB1c2VkCisgICAgICAgIGZvciB0aGUgdGVtcGxhdGUgYXJndW1lbnQsIGdpdmVuIHRoYXQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5wb2ludGVlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5Qb2ludGVyPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnR5cGU8L3NwYW4+PC9jb2RlPgorICAgICAgICB5aWVsZHMgdGhlIHBvaW50ZWUgdHlwZS4KKyAgICAgIDwvcD4KKzxwPgorICAgICAgICBJZiBhbiA8YSBocmVmPSJodHRwOi8vd3d3LnNnaS5jb20vdGVjaC9zdGwvY29uY2VwdHMvYWxsb2NhdG9yLmh0bWwiIHRhcmdldD0iX3RvcCI+QWxsb2NhdG9yPC9hPgorICAgICAgICBpcyBnaXZlbiwgaXQgaXMgdXNlZCBmb3IgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHRoZSBwbGFjZW1lbnQgZm9ybSBvZiB0aGUKKyAgICAgICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0ia2V5d29yZCI+bmV3PC9zcGFuPjwvY29kZT4gb3BlcmF0b3IgaXMgdXNlZCB0byBjb25zdHJ1Y3QKKyAgICAgICAgdGhlIG9iamVjdC4gQSBmdW5jdGlvbiBvYmplY3QgdGhhdCBjYWxscyB0aGUgZGVzdHJ1Y3RvciBhbmQgZGVhbGxvY2F0ZXMgdGhlCisgICAgICAgIG1lbW9yeSB3aXRoIGEgY29weSBvZiB0aGUgQWxsb2NhdG9yIGlzIHVzZWQgZm9yIHRoZSBzZWNvbmQgY29uc3RydWN0b3IgYXJndW1lbnQKKyAgICAgICAgb2YgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+UG9pbnRlcjwvc3Bhbj48L2NvZGU+ICh0aHVzIGl0IG11c3QKKyAgICAgICAgYmUgYSA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3NtYXJ0X3B0ci9pbmRleC5odG1sIiB0YXJnZXQ9Il90b3AiPlNtYXJ0IFBvaW50ZXI8L2E+CisgICAgICAgIHRoYXQgcHJvdmlkZXMgYSBzdWl0YWJsZSBjb25zdHJ1Y3Rvciwgc3VjaCBhcyA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3NtYXJ0X3B0ci9zaGFyZWRfcHRyLmh0bSIgdGFyZ2V0PSJfdG9wIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnNoYXJlZF9wdHI8L3NwYW4+PC9jb2RlPjwvYT4pLgorICAgICAgPC9wPgorPHA+CisgICAgICAgIElmIGEgdGhpcmQgdGVtcGxhdGUgYXJndW1lbnQgaXMgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZmFjdG9yeV9wYXNzZXNfYWxsb2NfdG9fc21hcnRfcG9pbnRlcjwvc3Bhbj48L2NvZGU+LAorICAgICAgICB0aGUgYWxsb2NhdG9yIGl0c2VsZiBpcyB1c2VkIGZvciB0aGUgdGhpcmQgY29uc3RydWN0b3IgYXJndW1lbnQgb2YgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+UG9pbnRlcjwvc3Bhbj48L2NvZGU+ICg8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3NtYXJ0X3B0ci9zaGFyZWRfcHRyLmh0bSIgdGFyZ2V0PSJfdG9wIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnNoYXJlZF9wdHI8L3NwYW4+PC9jb2RlPjwvYT4gdGhlbiB1c2VzIHRoZSBhbGxvY2F0b3IKKyAgICAgICAgdG8gbWFuYWdlIHRoZSBtZW1vcnkgb2YgaXRzIHNlcGFyYXRlbHkgYWxsb2NhdGVkIHJlZmVyZW5jZSBjb3VudGVyKS4KKyAgICAgIDwvcD4KKzxoNT4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UuZmFjdG9yeS5oMSI+PC9hPgorICAgICAgICA8c3BhbiBjbGFzcz0icGhyYXNlIj48YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlLmZhY3RvcnkuaGVhZGVyIj48L2E+PC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UuZmFjdG9yeS5oZWFkZXIiPkhlYWRlcjwvYT4KKyAgICAgIDwvaDU+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9InByZXByb2Nlc3NvciI+I2luY2x1ZGU8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Lzwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuY3Rpb25hbDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Lzwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZmFjdG9yeTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ljwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aHBwPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPgorPC9wcmU+Cis8aDU+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlLmZhY3RvcnkuaDIiPjwvYT4KKyAgICAgICAgPHNwYW4gY2xhc3M9InBocmFzZSI+PGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZS5mYWN0b3J5LnN5bm9wc2lzIj48L2E+PC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UuZmFjdG9yeS5zeW5vcHNpcyI+U3lub3BzaXM8L2E+CisgICAgICA8L2g1PgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5uYW1lc3BhY2U8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJzcGVjaWFsIj57PC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5lbnVtPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZmFjdG9yeV9hbGxvY19wcm9wYWdhdGlvbjwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+ezwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZhY3RvcnlfYWxsb2NfZm9yX3BvaW50ZWVfYW5kX2RlbGV0ZXI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mYWN0b3J5X3Bhc3Nlc19hbGxvY190b19zbWFydF9wb2ludGVyPC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJzcGVjaWFsIj59Ozwvc3Bhbj4KKworICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50ZW1wbGF0ZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVuYW1lPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+UG9pbnRlcjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNsYXNzPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+QWxsb2NhdG9yPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+bm9uZV90PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZmFjdG9yeV9hbGxvY19wcm9wYWdhdGlvbjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkFsbG9jUHJvcDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPj08L3NwYW4+CisgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZmFjdG9yeV9hbGxvY19mb3JfcG9pbnRlZV9hbmRfZGVsZXRlcjwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNsYXNzPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZmFjdG9yeTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJzcGVjaWFsIj59PC9zcGFuPgorPC9wcmU+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgorPHAgY2xhc3M9InRpdGxlIj48Yj5Ob3RhdGlvbjwvYj48L3A+Cis8ZGwgY2xhc3M9InZhcmlhYmxlbGlzdCI+Cis8ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+PC9jb2RlPjwvc3Bhbj48L2R0PgorPGRkPjxwPgorICAgICAgICAgICAgICBhbiBhcmJpdHJhcnkgdHlwZSB3aXRoIGF0IGxlYXN0IG9uZSBwdWJsaWMgY29uc3RydWN0b3IKKyAgICAgICAgICAgIDwvcD48L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5QPC9zcGFuPjwvY29kZT48L3NwYW4+PC9kdD4KKzxkZD48cD4KKyAgICAgICAgICAgICAgcG9pbnRlciBvciBzbWFydCBwb2ludGVyIHRvIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+PC9jb2RlPgorICAgICAgICAgICAgPC9wPjwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmEwPC9zcGFuPjwvY29kZT4uLi48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hTjwvc3Bhbj48L2NvZGU+PC9zcGFuPjwvZHQ+Cis8ZGQ+PHA+CisgICAgICAgICAgICAgIGFyZ3VtZW50IExWYWx1ZXMgdG8gYSBjb25zdHJ1Y3RvciBvZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPjwvY29kZT4KKyAgICAgICAgICAgIDwvcD48L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GPC9zcGFuPjwvY29kZT48L3NwYW4+PC9kdD4KKzxkZD48cD4KKyAgICAgICAgICAgICAgdGhlIHR5cGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZmFjdG9yeTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+UDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj48L2NvZGU+CisgICAgICAgICAgICA8L3A+PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zjwvc3Bhbj48L2NvZGU+PC9zcGFuPjwvZHQ+Cis8ZGQ+PHA+CisgICAgICAgICAgICAgIGFuIGluc3RhbmNlIG9iamVjdCBvZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GPC9zcGFuPjwvY29kZT4KKyAgICAgICAgICAgIDwvcD48L2RkPgorPC9kbD4KKzwvZGl2PgorPGg1PgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZS5mYWN0b3J5LmgzIj48L2E+CisgICAgICAgIDxzcGFuIGNsYXNzPSJwaHJhc2UiPjxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2UuZmFjdG9yeS5leHByZXNzaW9uX3NlbWFudGljcyI+PC9hPjwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlLmZhY3RvcnkuZXhwcmVzc2lvbl9zZW1hbnRpY3MiPkV4cHJlc3Npb24KKyAgICAgICAgU2VtYW50aWNzPC9hPgorICAgICAgPC9oNT4KKzxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0idGFibGUiPgorPGNvbGdyb3VwPgorPGNvbD4KKzxjb2w+Cis8L2NvbGdyb3VwPgorPHRoZWFkPjx0cj4KKzx0aD4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgIEV4cHJlc3Npb24KKyAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgIDwvdGg+Cis8dGg+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICBTZW1hbnRpY3MKKyAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgIDwvdGg+Cis8L3RyPjwvdGhlYWQ+Cis8dGJvZHk+Cis8dHI+Cis8dGQ+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oKTwvc3Bhbj48L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgICA8L3RkPgorPHRkPgorICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgY3JlYXRlcyBhbiBvYmplY3Qgb2YgdHlwZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GPC9zcGFuPjwvY29kZT4uCisgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgICA8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkY8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmY8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+PC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgPC90ZD4KKzx0ZD4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgIGNyZWF0ZXMgYW4gb2JqZWN0IG9mIHR5cGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Rjwvc3Bhbj48L2NvZGU+LgorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgPC90ZD4KKzwvdHI+Cis8dHI+Cis8dGQ+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hMDwvc3Bhbj48L2NvZGU+Li4uPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YU48L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+PC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgPC90ZD4KKzx0ZD4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgIGR5bmFtaWNhbGx5IGNyZWF0ZXMgYW4gb2JqZWN0IG9mIHR5cGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj48L2NvZGU+CisgICAgICAgICAgICAgICAgICB1c2luZyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hMDwvc3Bhbj48L2NvZGU+Li4uPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YU48L3NwYW4+PC9jb2RlPiBhcyBhcmd1bWVudHMgZm9yIHRoZSBjb25zdHJ1Y3RvcgorICAgICAgICAgICAgICAgICAgaW52b2NhdGlvbi4KKyAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgIDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPgorICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Rjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnJlc3VsdF90eXBlPC9zcGFuPjwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgIDwvdGQ+Cis8dGQ+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICBpcyB0aGUgdHlwZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5QPC9zcGFuPjwvY29kZT4gd2l0aAorICAgICAgICAgICAgICAgICAgdG9wLWxldmVsIGN2LXF1YWxpZmllcnMgcmVtb3ZlZC4KKyAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgIDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+PC9kaXY+Cis8aDU+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlLmZhY3RvcnkuaDQiPjwvYT4KKyAgICAgICAgPHNwYW4gY2xhc3M9InBocmFzZSI+PGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LnJlZmVyZW5jZS5mYWN0b3J5LmxpbWl0cyI+PC9hPjwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlLmZhY3RvcnkubGltaXRzIj5MaW1pdHM8L2E+CisgICAgICA8L2g1PgorPHA+CisgICAgICAgIFRoZSBtYWNybyBCT09TVF9GVU5DVElPTkFMX0ZBQ1RPUllfTUFYX0FSSVRZIGNhbiBiZSBkZWZpbmVkIHRvIHNldCB0aGUgbWF4aW11bQorICAgICAgICBhcml0eS4gSXQgZGVmYXVsdHMgdG8gMTAuCisgICAgICA8L3A+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mYWN0b3J5LmFja25vd2xlZGdlbWVudHMiPjwvYT48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkuYWNrbm93bGVkZ2VtZW50cyIgdGl0bGU9IkFja25vd2xlZGdlbWVudHMiPkFja25vd2xlZGdlbWVudHM8L2E+Cis8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgorPHA+CisgICAgICBFcmljIE5pZWJsZXIgcmVxdWVzdGVkIGEgZnVuY3Rpb24gdG8gaW52b2tlIGEgdHlwZSdzIGNvbnN0cnVjdG9yICh3aXRoIHRoZQorICAgICAgYXJndW1lbnRzIHN1cHBsaWVkIGFzIGEgVHVwbGUpIGFzIGEgRnVzaW9uIGZlYXR1cmUuIFRoZXNlIEZhY3RvcnkgdXRpbGl0aWVzCisgICAgICBhcmUgYSBmYWN0b3JlZC1vdXQgZ2VuZXJhbGl6YXRpb24gb2YgdGhpcyBpZGVhLgorICAgIDwvcD4KKzxwPgorICAgICAgRGF2ZSBBYnJhaGFtcyBzdWdnZXN0ZWQgU21hcnQgUG9pbnRlciBzdXBwb3J0IGZvciBleGNlcHRpb24gc2FmZXR5LCBwcm92aWRpbmcKKyAgICAgIHVzZWZ1bCBoaW50cyBmb3IgdGhlIGltcGxlbWVudGF0aW9uLgorICAgIDwvcD4KKzxwPgorICAgICAgSm9lbCBkZSBHdXptYW4ncyBkb2N1bWVudGF0aW9uIHN0eWxlIHdhcyBjb3BpZWQgZnJvbSBGdXNpb24uCisgICAgPC9wPgorPHA+CisgICAgICBGdXJ0aGVyLCBJIHdhbnQgdG8gdGhhbmsgUGV0ZXIgRGltb3YgZm9yIHNoYXJpbmcgaGlzIGluc2lnaHRzIG9uIGxhbmd1YWdlIGRldGFpbHMKKyAgICAgIGFuZCB0aGVpciBldm9sdXRpb24uCisgICAgPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZhY3RvcnkucmVmZXJlbmNlcyI+PC9hPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZmFjdG9yeS5yZWZlcmVuY2VzIiB0aXRsZT0iUmVmZXJlbmNlcyI+UmVmZXJlbmNlczwvYT4KKzwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Cis8ZGl2IGNsYXNzPSJvcmRlcmVkbGlzdCI+PG9sIGNsYXNzPSJvcmRlcmVkbGlzdCIgdHlwZT0iMSI+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj4KKyAgICAgICAgICA8YSBocmVmPSJodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Rlc2lnbl9QYXR0ZXJucyIgdGFyZ2V0PSJfdG9wIj5EZXNpZ24gUGF0dGVybnM8L2E+LAorICAgICAgICAgIEdhbW1hIGV0IGFsLiAtIEFkZGlzb24gV2VzbGV5IFB1Ymxpc2hpbmcsIDE5OTUKKyAgICAgICAgPC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPgorICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuc2dpLmNvbS90ZWNoL3N0bC8iIHRhcmdldD0iX3RvcCI+U3RhbmRhcmQgVGVtcGxhdGUgTGlicmFyeSBQcm9ncmFtbWVyJ3MKKyAgICAgICAgICBHdWlkZTwvYT4sIEhld2xldHQtUGFja2FyZCBDb21wYW55LCAxOTk0CisgICAgICAgIDwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj4KKyAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2JpbmQvYmluZC5odG1sIiB0YXJnZXQ9Il90b3AiPkJvb3N0LkJpbmQ8L2E+LAorICAgICAgICAgIFBldGVyIERpbW92LCAyMDAxLTIwMDUKKyAgICAgICAgPC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPgorICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL2RvYy9odG1sL2Z1bmN0aW9uLmh0bWwiIHRhcmdldD0iX3RvcCI+Qm9vc3QuRnVuY3Rpb248L2E+LAorICAgICAgICAgIERvdWdsYXMgR3JlZ29yLCAyMDAxLTIwMDQKKyAgICAgICAgPC9saT4KKzwvb2w+PC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPHRhYmxlIHhtbG5zOnJldj0iaHR0cDovL3d3dy5jcy5ycGkuZWR1L35ncmVnb2QvYm9vc3QvdG9vbHMvZG9jL3JldmlzaW9uIiB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIGFsaWduPSJsZWZ0Ij48cD48c21hbGw+TGFzdCByZXZpc2VkOiBOb3ZlbWJlciAwMSwgMjAwOCBhdCAyMTo0NDo1MiBHTVQ8L3NtYWxsPjwvcD48L3RkPgorPHRkIGFsaWduPSJyaWdodCI+PGRpdiBjbGFzcz0iY29weXJpZ2h0LWZvb3RlciI+PC9kaXY+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxocj4KKzxkaXYgY2xhc3M9InNwaXJpdC1uYXYiPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2ZhY3RvcnkvZG9jL2h0bWwvc3RhbmRhbG9uZV9IVE1MLm1hbmlmZXN0IGIvbGlicy9mdW5jdGlvbmFsL2ZhY3RvcnkvZG9jL2h0bWwvc3RhbmRhbG9uZV9IVE1MLm1hbmlmZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYWY3MTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvZmFjdG9yeS9kb2MvaHRtbC9zdGFuZGFsb25lX0hUTUwubWFuaWZlc3QKQEAgLTAsMCArMSBAQAoraW5kZXguaHRtbApkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2ZhY3RvcnkvaW5kZXguaHRtbCBiL2xpYnMvZnVuY3Rpb25hbC9mYWN0b3J5L2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgwMzAyOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9mYWN0b3J5L2luZGV4Lmh0bWwKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCIgY29udGVudD0iMDsgVVJMPWRvYy9odG1sL2luZGV4Lmh0bWwiPgorICA8L2hlYWQ+CisgIDxib2R5PgorICAgIEF1dG9tYXRpYyByZWRpcmVjdGlvbiBmYWlsZWQsIGNsaWNrIHRoaXMgCisgICAgPGEgaHJlZj0iZG9jL2h0bWwvaW5kZXguaHRtbCI+bGluazwvYT4gJm5ic3A7PGhyPgorICAgIDxwPqkgQ29weXJpZ2h0IFRvYmlhcyBTY2h3aW5nZXIsIDIwMDk8L3A+CisgICAgPHA+RGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIAorICAgIGFjY29tcGFueWluZyBmaWxlIDxhIGhyZWY9Ii4uLy4uLy4uL0xJQ0VOU0VfMV8wLnR4dCI+CisgICAgTElDRU5TRV8xXzAudHh0PC9hPiBvciBjb3B5IGF0CisgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0Ij53d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvYT4pPC9wPgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvZmFjdG9yeS90ZXN0L0phbWZpbGUgYi9saWJzL2Z1bmN0aW9uYWwvZmFjdG9yeS90ZXN0L0phbWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM0ZjZlYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9mYWN0b3J5L3Rlc3QvSmFtZmlsZQpAQCAtMCwwICsxLDE4IEBACisKKyMgKEMpIENvcHlyaWdodCBUb2JpYXMgU2Nod2luZ2VyCisjCisjIFVzZSBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgYm9vc3QgU29mdHdhcmUgTGljZW5zZSwKKyMgVmVyc2lvbiAxLjAuIChTZWUgaHR0cDovXC93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCisKK2ltcG9ydCB0ZXN0aW5nIDsKKworcHJvamVjdCBmYWN0b3J5LXRlc3RzCisgICAgOworCit0ZXN0LXN1aXRlIGZ1bmN0aW9uYWwvZmFjdG9yeQorICAgIDoKKyAgICAgIFsgcnVuIHZhbHVlX2ZhY3RvcnkuY3BwIF0KKyAgICAgIFsgcnVuIGZhY3RvcnkuY3BwIF0KKyAgICAgIFsgcnVuIGZhY3Rvcnlfd2l0aF9hbGxvY2F0b3IuY3BwIF0KKyAgICA7CisKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9mYWN0b3J5L3Rlc3QvZmFjdG9yeS5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvZmFjdG9yeS90ZXN0L2ZhY3RvcnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNDdmMjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvZmFjdG9yeS90ZXN0L2ZhY3RvcnkuY3BwCkBAIC0wLDAgKzEsMzYgQEAKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBDb3B5cmlnaHQgKGMpIDIwMDcgVG9iaWFzIFNjaHdpbmdlcgorICAKKyAgICBVc2UgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIAorICAgIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0CisgICAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2ZhY3RvcnkuaHBwPgorI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KKworI2luY2x1ZGUgPG1lbW9yeT4KKworY2xhc3Mgc3VtIAoreworICAgIGludCB2YWxfc3VtOworICBwdWJsaWM6CisgICAgc3VtKGludCBhLCBpbnQgYikgOiB2YWxfc3VtKGEgKyBiKSB7IH0KKworICAgIG9wZXJhdG9yIGludCgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPnZhbF9zdW07IH0KK307CisKK2ludCBtYWluKCkKK3sKKyAgICBpbnQgb25lID0gMSwgdHdvID0gMjsKKyAgICB7CisgICAgICBzdW0qIGluc3RhbmNlKCBuZG5ib29zdDo6ZmFjdG9yeTwgc3VtKiA+KCkob25lLHR3bykgKTsKKyAgICAgIEJPT1NUX1RFU1QoKmluc3RhbmNlID09IDMpOworICAgIH0KKyAgICB7CisgICAgICBzdGQ6OmF1dG9fcHRyPHN1bT4gaW5zdGFuY2UoIG5kbmJvb3N0OjpmYWN0b3J5PCBzdGQ6OmF1dG9fcHRyPHN1bT4gPigpKG9uZSx0d28pICk7CisgICAgICBCT09TVF9URVNUKCppbnN0YW5jZSA9PSAzKTsKKyAgICB9CisgICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Cit9CisKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9mYWN0b3J5L3Rlc3QvZmFjdG9yeV93aXRoX2FsbG9jYXRvci5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvZmFjdG9yeS90ZXN0L2ZhY3Rvcnlfd2l0aF9hbGxvY2F0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyYzZjOTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvZmFjdG9yeS90ZXN0L2ZhY3Rvcnlfd2l0aF9hbGxvY2F0b3IuY3BwCkBAIC0wLDAgKzEsNzkgQEAKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBDb3B5cmlnaHQgKGMpIDIwMDcgVG9iaWFzIFNjaHdpbmdlcgorICAKKyAgICBVc2UgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIAorICAgIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0CisgICAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2ZhY3RvcnkuaHBwPgorI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KKworI2luY2x1ZGUgPGNzdGRkZWY+CisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPGJvb3N0L3NoYXJlZF9wdHIuaHBwPgorCit1c2luZyBzdGQ6OnNpemVfdDsKKworY2xhc3Mgc3VtIAoreworICAgIGludCB2YWxfc3VtOworICBwdWJsaWM6CisgICAgc3VtKGludCBhLCBpbnQgYikgOiB2YWxfc3VtKGEgKyBiKSB7IH0KKworICAgIG9wZXJhdG9yIGludCgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPnZhbF9zdW07IH0KK307CisKK3RlbXBsYXRlPCB0eXBlbmFtZSBUID4KK2NsYXNzIGNvdW50aW5nX2FsbG9jYXRvciA6IHB1YmxpYyBzdGQ6OmFsbG9jYXRvcjxUPgoreworICBwdWJsaWM6CisgICAgY291bnRpbmdfYWxsb2NhdG9yKCkKKyAgICB7IH0KKworICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBPdGhlclQgPgorICAgIHN0cnVjdCByZWJpbmQgeyB0eXBlZGVmIGNvdW50aW5nX2FsbG9jYXRvcjxPdGhlclQ+IG90aGVyOyB9OworCisgICAgdGVtcGxhdGU8IHR5cGVuYW1lIE90aGVyVCA+CisgICAgY291bnRpbmdfYWxsb2NhdG9yKGNvdW50aW5nX2FsbG9jYXRvcjxPdGhlclQ+IGNvbnN0JiB0aGF0KQorICAgIHsgfQorCisgICAgc3RhdGljIHNpemVfdCBuX2FsbG9jYXRlZDsKKyAgICBUKiBhbGxvY2F0ZShzaXplX3Qgbiwgdm9pZCBjb25zdCogaGludCA9IDBsKQorICAgIHsKKyAgICAgICAgbl9hbGxvY2F0ZWQgKz0gMTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6YWxsb2NhdG9yPFQ+OjphbGxvY2F0ZShuLGhpbnQpOworICAgIH0KKworICAgIHN0YXRpYyBzaXplX3Qgbl9kZWFsbG9jYXRlZDsKKyAgICB2b2lkIGRlYWxsb2NhdGUoVCogcHRyLCBzaXplX3QgbikKKyAgICB7CisgICAgICAgIG5fZGVhbGxvY2F0ZWQgKz0gMTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6YWxsb2NhdG9yPFQ+OjpkZWFsbG9jYXRlKHB0cixuKTsKKyAgICB9Cit9OwordGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzaXplX3QgY291bnRpbmdfYWxsb2NhdG9yPFQ+OjpuX2FsbG9jYXRlZCA9IDA7Cit0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHNpemVfdCBjb3VudGluZ19hbGxvY2F0b3I8VD46Om5fZGVhbGxvY2F0ZWQgPSAwOworCitpbnQgbWFpbigpCit7CisgICAgaW50IG9uZSA9IDEsIHR3byA9IDI7CisgICAgeworICAgICAgbmRuYm9vc3Q6OnNoYXJlZF9wdHI8c3VtPiBpbnN0YW5jZSgKKyAgICAgICAgICBuZG5ib29zdDo6ZmFjdG9yeTwgbmRuYm9vc3Q6OnNoYXJlZF9wdHI8c3VtPiwgY291bnRpbmdfYWxsb2NhdG9yPHZvaWQ+LCAKKyAgICAgICAgICAgICAgbmRuYm9vc3Q6OmZhY3RvcnlfYWxsb2NfZm9yX3BvaW50ZWVfYW5kX2RlbGV0ZXIgPigpKG9uZSx0d28pICk7CisgICAgICBCT09TVF9URVNUKCppbnN0YW5jZSA9PSAzKTsKKyAgICB9CisgICAgQk9PU1RfVEVTVChjb3VudGluZ19hbGxvY2F0b3I8c3VtPjo6bl9hbGxvY2F0ZWQgPT0gMSk7IAorICAgIEJPT1NUX1RFU1QoY291bnRpbmdfYWxsb2NhdG9yPHN1bT46Om5fZGVhbGxvY2F0ZWQgPT0gMSk7CisgICAgeworICAgICAgbmRuYm9vc3Q6OnNoYXJlZF9wdHI8c3VtPiBpbnN0YW5jZSgKKyAgICAgICAgICBuZG5ib29zdDo6ZmFjdG9yeTwgbmRuYm9vc3Q6OnNoYXJlZF9wdHI8c3VtPiwgY291bnRpbmdfYWxsb2NhdG9yPHZvaWQ+LAorICAgICAgICAgICAgICBuZG5ib29zdDo6ZmFjdG9yeV9wYXNzZXNfYWxsb2NfdG9fc21hcnRfcG9pbnRlciA+KCkob25lLHR3bykgKTsKKyAgICAgIEJPT1NUX1RFU1QoKmluc3RhbmNlID09IDMpOworICAgIH0KKyAgICBCT09TVF9URVNUKGNvdW50aW5nX2FsbG9jYXRvcjxzdW0+OjpuX2FsbG9jYXRlZCA9PSAyKTsgCisgICAgQk9PU1RfVEVTVChjb3VudGluZ19hbGxvY2F0b3I8c3VtPjo6bl9kZWFsbG9jYXRlZCA9PSAyKTsKKyAgICByZXR1cm4gbmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKK30KKwpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2ZhY3RvcnkvdGVzdC92YWx1ZV9mYWN0b3J5LmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9mYWN0b3J5L3Rlc3QvdmFsdWVfZmFjdG9yeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ2MmZmYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9mYWN0b3J5L3Rlc3QvdmFsdWVfZmFjdG9yeS5jcHAKQEAgLTAsMCArMSwyOSBAQAorLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIENvcHlyaWdodCAoYykgMjAwNyBUb2JpYXMgU2Nod2luZ2VyCisgIAorICAgIFVzZSBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBhcmUgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgCisgICAgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKKyAgICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvdmFsdWVfZmFjdG9yeS5ocHA+CisjaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgorCitjbGFzcyBzdW0gCit7CisgICAgaW50IHZhbF9zdW07CisgIHB1YmxpYzoKKyAgICBzdW0oaW50IGEsIGludCBiKSA6IHZhbF9zdW0oYSArIGIpIHsgfQorICAgIG9wZXJhdG9yIGludCgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPnZhbF9zdW07IH0KK307CisKK2ludCBtYWluKCkKK3sKKyAgICBpbnQgb25lID0gMSwgdHdvID0gMjsKKyAgICB7CisgICAgICBzdW0gaW5zdGFuY2UoIG5kbmJvb3N0Ojp2YWx1ZV9mYWN0b3J5PCBzdW0gPigpKG9uZSx0d28pICk7CisgICAgICBCT09TVF9URVNUKGluc3RhbmNlID09IDMpOworICAgIH0KKyAgICByZXR1cm4gbmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKK30KKwpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2ZvcndhcmQvZG9jL0phbWZpbGUgYi9saWJzL2Z1bmN0aW9uYWwvZm9yd2FyZC9kb2MvSmFtZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjY1NDk3Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2ZvcndhcmQvZG9jL0phbWZpbGUKQEAgLTAsMCArMSwxOSBAQAorCisjIChDKSBDb3B5cmlnaHQgVG9iaWFzIFNjaHdpbmdlcgorIworIyBVc2UgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIGJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCisjIFZlcnNpb24gMS4wLiAoU2VlIGh0dHA6L1wvd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgorCit1c2luZyBxdWlja2Jvb2sgOworCit4bWwgZm9yd2FyZCA6IGZvcndhcmQucWJrIDsKK2Jvb3N0Ym9vayBzdGFuZGFsb25lIDogZm9yd2FyZAorICA6CisgICAgICAgIDx4c2w6cGFyYW0+Ym9vc3Qucm9vdD0uLi8uLi8uLi8uLi8uLgorICAgICAgICA8eHNsOnBhcmFtPmJvb3N0LmxpYnJhcmllcz0uLi8uLi8uLi8uLi9saWJyYXJpZXMuaHRtCisgICAgICAgIDx4c2w6cGFyYW0+Y2h1bmsuc2VjdGlvbi5kZXB0aD0wCisgICAgICAgIDx4c2w6cGFyYW0+Y2h1bmsuZmlyc3Quc2VjdGlvbnM9MAorICAgICAgICA8eHNsOnBhcmFtPmdlbmVyYXRlLnNlY3Rpb24udG9jLmxldmVsPTIKKyAgICAgICAgPHhzbDpwYXJhbT50b2MubWF4LmRlcHRoPTEKKyAgOworCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvZm9yd2FyZC9kb2MvZm9yd2FyZC5xYmsgYi9saWJzL2Z1bmN0aW9uYWwvZm9yd2FyZC9kb2MvZm9yd2FyZC5xYmsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGViMjI3ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL2RvYy9mb3J3YXJkLnFiawpAQCAtMCwwICsxLDMxNiBAQAorW2xpYnJhcnkgQm9vc3QuRnVuY3Rpb25hbC9Gb3J3YXJkCisgIFtxdWlja2Jvb2sgMS4zXQorICBbdmVyc2lvbiAxLjBdCisgIFthdXRob3JzIFtTY2h3aW5nZXIsIFRvYmlhc11dCisgIFtjb3B5cmlnaHQgMjAwNyAyMDA4IFRvYmlhcyBTY2h3aW5nZXJdCisgIFtsaWNlbnNlCisgICAgICAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KKyAgICAgICAgKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCAKKyAgICAgICAgW0BodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHRdKQorICBdCisgIFtwdXJwb3NlIEZ1bmN0aW9uIG9iamVjdCBhZGFwdGVycyBmb3IgZ2VuZXJpYyBhcmd1bWVudCBmb3J3YXJkaW5nLl0KKyAgW2NhdGVnb3J5IGhpZ2hlci1vcmRlcl0KKyAgW2NhdGVnb3J5IGdlbmVyaWNdCisgIFtsYXN0LXJldmlzaW9uICREYXRlOiAyMDA4LzExLzAxIDE5OjU4OjUwICRdCitdCisKK1tkZWYgX191bnNwZWNpZmllZF9fICAgICAgICAgICAgL3Vuc3BlY2lmaWVkL10KK1tkZWYgX19ib29zdF9yZWZfXyAgICAgICAgICAgICAgW0BodHRwOi8vd3d3LmJvb3N0Lm9yZy9kb2MvaHRtbC9yZWYuaHRtbCBCb29zdC5SZWZdXQorW2RlZiBfX2Jvb3N0X3Jlc3VsdF9vZl9fICAgICAgICBbQGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdXRpbGl0eS91dGlsaXR5Lmh0bSNyZXN1bHRfb2YgQm9vc3QuUmVzdWx0T2ZdXQorW2RlZiBfX2Jvb3N0X19yZXN1bHRfb2ZfXyAgICAgICBbQGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdXRpbGl0eS91dGlsaXR5Lmh0bSNyZXN1bHRfb2YgYGJvb3N0OjpyZXN1bHRfb2ZgXV0KK1tkZWYgX190aGVfZm9yd2FyZGluZ19wcm9ibGVtX18gW0BodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDAyL24xMzg1Lmh0bSBUaGUgRm9yd2FyZGluZyBQcm9ibGVtXV0KK1tkZWYgX19ib29zdF9mdXNpb25fXyAgICAgICAgICAgW0BodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2Z1c2lvbi9kb2MvaHRtbC9pbmRleC5odG1sIEJvb3N0LkZ1c2lvbl1dCisKK1tzZWN0aW9uIEJyaWVmIERlc2NyaXB0aW9uXQorCitgYm9vc3Q6OmZvcndhcmRfYWRhcHRlcmAgcHJvdmlkZXMgYSByZXVzYWJsZSBhZGFwdGVyIHRlbXBsYXRlIGZvciBmdW5jdGlvbgorb2JqZWN0cy4gSXQgZm9yd2FyZHMgUlZhbHVlcyBhcyByZWZlcmVuY2VzIHRvIGNvbnN0LCB3aGlsZSBsZWF2aW5nIExWYWx1ZXMKK2FzLWlzLgorCisgICAgc3RydWN0IGcgLy8gZnVuY3Rpb24gb2JqZWN0IHRoYXQgb25seSBhY2NlcHQgTFZhbHVlcworICAgIHsKKyAgICAgICAgdGVtcGxhdGU8IHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIgPgorICAgICAgICB2b2lkIG9wZXJhdG9yKCkoVDAgJiB0MCwgVDEgJiB0MSwgVDIgJiB0MikgY29uc3Q7CisKKyAgICAgICAgdHlwZWRlZiB2b2lkIHJlc3VsdF90eXBlOworICAgIH07CisKKyAgICAvLyBBZGFwdGVkIHZlcnNpb24gYWxzbyBhY2NlcHRzIFJWYWx1ZXMgYW5kIGZvcndhcmRzCisgICAgLy8gdGhlbSBhcyByZWZlcmVuY2VzIHRvIGNvbnN0LCBMVmFsdWVzIGFzLWlzCisgICAgdHlwZWRlZiBib29zdDo6Zm9yd2FyZF9hZGFwdGVyPGc+IGY7CisKK0Fub3RoZXIgYWRhcHRlciwgYGJvb3N0OjpsaWdod2VpZ2h0X2ZvcndhcmRfYWRhcHRlcmAgYWxsb3dzIGZvcndhcmRpbmcgd2l0aCAKK3NvbWUgaGVscCBmcm9tIHRoZSB1c2VyIGFjY2VwdGluZyBhbmQgdW53cmFwcGluZyByZWZlcmVuY2Ugd3JhcHBlcnMgKHNlZSAKK19fYm9vc3RfcmVmX18pIGZvciByZWZlcmVuY2UgYXJndW1lbnRzLCBjb25zdCBxdWFsaWZ5aW5nIGFsbCBvdGhlciBhcmd1bWVudHMuIAorCitUaGUgdGFyZ2V0IGZ1bmN0aW9ucyBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCBfX2Jvb3N0X3Jlc3VsdF9vZl9fLCBhbmQgc28gYXJlCit0aGUgYWRhcHRlcnMuCisKK1tlbmRzZWN0XQorCitbc2VjdGlvbiBCYWNrZ3JvdW5kXQorCitMZXQncyBzdXBwb3NlIHdlIGhhdmUgc29tZSBmdW5jdGlvbiBgZmAgdGhhdCB3ZSBjYW4gY2FsbCBsaWtlIHRoaXM6CisKKyAgICBmKDEyMyxhX3ZhcmlhYmxlKTsKKworTm93IHdlIHdhbnQgdG8gd3JpdGUgYW5vdGhlciwgZ2VuZXJpYyBmdW5jdGlvbiBgZ2AgdGhhdCBjYW4gYmUgY2FsbGVkIHRoZQorc2FtZSB3YXkgYW5kIHJldHVybnMgc29tZSBvYmplY3QgdGhhdCBjYWxscyBgZmAgd2l0aCB0aGUgc2FtZSBhcmd1bWVudHMuCisKKyAgICBmKDEyMyxhX3ZhcmlhYmxlKSA9PSBnKGYsMTIzLGFfdmFyaWFibGUpLmNhbGxfZigpCisKK1toZWFkaW5nIFdoeSB3b3VsZCB3ZSB3YW50IHRvIGRvIGl0LCBhbnl3YXk/XQorCitNYXliZSB3ZSB3YW50IHRvIHJ1biBgZmAgc2V2ZXJhbCB0aW1lcy4gT3IgbWF5YmUgd2Ugd2FudCB0byBydW4gaXQgd2l0aGluCithbm90aGVyIHRocmVhZC4gTWF5YmUgd2UganVzdCB3YW50IHRvIGVuY2Fwc3VsYXRlIHRoZSBjYWxsIGV4cHJlc3Npb24gZm9yIG5vdywgCithbmQgdGhlbiB1c2UgaXQgd2l0aCBvdGhlciBjb2RlIHRoYXQgYWxsb3dzIHRvIGNvbXBvc2UgbW9yZSBjb21wbGV4IGV4cHJlc3Npb25zCitpbiBvcmRlciB0byBkZWNvbXBvc2UgaXQgd2l0aCBDKysgdGVtcGxhdGVzIGFuZCBoYXZlIHRoZSBjb21waWxlciBnZW5lcmF0ZSBzb21lIAorbWFjaGluZXJ5IHRoYXQgZXZlbnR1YWxseSBjYWxscyBgZmAgYXQgcnVudGltZSAoaW4gb3RoZXIgd29yZHM7IGFwcGx5IGEKK3RlY2huaXF1ZSB0aGF0IGlzIGNvbW1vbmx5IHJlZmVycmVkIHRvIGFzIEV4cHJlc3Npb24gVGVtcGxhdGVzKS4gCisKK1toZWFkaW5nIE5vdywgaG93IGRvIHdlIGRvIGl0P10KKworVGhlIGJhZCBuZXdzIGlzOiBJdCdzIGltcG9zc2libGUuIAorCitUaGF0IGlzIHNvIGJlY2F1c2UgdGhlcmUgaXMgYSBzbGlnaHQgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgdmFyaWFibGUgYW5kIGFuCitleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRvIGl0cyB2YWx1ZTogR2l2ZW4KKworICAgIGludCB5OworICAgIGludCBjb25zdCB6ID0gMDsKKworYW5kCisKKyAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHZvaWQgZnVuYzEoVCAmIHgpOworCit3ZSBjYW4gY2FsbAorCisgICAgZnVuYzEoeSk7IC8vIHggaXMgYSByZWZlcmVuY2UgdG8gYSBub24tY29uc3Qgb2JqZWN0CisgICAgZnVuYzEoeik7IC8vIHggaXMgYSByZWZlcmVuY2UgdG8gYSBjb25zdCBvYmplY3QKKword2hlcmUKKworICAgIGZ1bmMxKDEpOyAvLyBmYWlscyB0byBjb21waWxlLgorCitUaGlzIHdheSB3ZSBjYW4gc2FmZWx5IGhhdmUgYGZ1bmMxYCBzdG9yZSBpdHMgcmVmZXJlbmNlIGFyZ3VtZW50IGFuZCB0aGUgCitjb21waWxlciBrZWVwcyB1cyBmcm9tIHN0b3JpbmcgYSByZWZlcmVuY2UgdG8gYW4gb2JqZWN0IHdpdGggdGVtcG9yYXJ5IGxpZmV0aW1lLgorCitJdCBpcyBpbXBvcnRhbnQgdG8gcmVhbGl6ZSB0aGF0IG5vbi1jb25zdG5lc3MgYW5kIHdoZXRoZXIgYW4gb2JqZWN0IGJpbmRzIHRvIGEKK25vbi1jb25zdCByZWZlcmVuY2UgcGFyYW1ldGVyIGFyZSB0d28gZGlmZmVyZW50IHByb3BlcnRpZXMuIFRoZSBsYXR0ZXIgaXMgdGhlCitkaXN0aW5jdGlvbiBiZXR3ZWVuIExWYWx1ZXMgYW5kIFJWYWx1ZXMuIFRoZSBuYW1lcyBzdGVtIGZyb20gdGhlIGxlZnQgaGFuZCBzaWRlCithbmQgdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZiBhc3NpZ25tZW50IGV4cHJlc3Npb25zLCB0aHVzIExWYWx1ZXMgYXJlIHR5cGljYWxseQordGhlIG9uZXMgeW91IGNhbiBhc3NpZ24gdG8sIGFuZCBSVmFsdWVzIHRoZSB0ZW1wb3JhcnkgcmVzdWx0cyBmcm9tIHRoZSByaWdodAoraGFuZCBzaWRlIGV4cHJlc3Npb24uIAorCisgICAgeSA9IDErMjsgICAgICAgIC8vIGEgaXMgTFZhbHVlLCAxKzIgaXMgdGhlIGV4cHJlc3Npb24gcHJvZHVjaW5nIHRoZSBSVmFsdWUsCisgICAgLy8gMSsyID0gYTsgICAgIC8vIHVzdWFsbHkgbWFrZXMgbm8gc2Vuc2UuIAorCisgICAgZnVuYzEoeSk7ICAgICAgIC8vIHdvcmtzLCBiZWNhdXNlIHkgaXMgYW4gTFZhbHVlCisgICAgLy8gZnVuYzEoMSsyKTsgIC8vIGZhaWxzIHRvIGNvbXBpbGUsIGJlY2F1c2Ugd2Ugb25seSBnb3QgYW4gUlZhbHVlLgorCitJZiB3ZSBhZGQgY29uc3QgcXVhbGlmaWNhdGlvbiBvbiB0aGUgcGFyYW1ldGVyLCBvdXIgZnVuY3Rpb24gYWxzbyBhY2NlcHRzCitSVmFsdWVzOiAKKworICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBUID4gdm9pZCBmdW5jMihUIGNvbnN0ICYgeCk7CisKKyAgICAvLyBbLi4uXSBmdW5jdGlvbiBzY29wZToKKyAgICBmdW5jMigxKTsgLy8geCBpcyBhIHJlZmVyZW5jZSB0byBhIGNvbnN0IHRlbXBvcmFyeSwgb2JqZWN0LAorICAgIGZ1bmMyKHkpOyAvLyB4IGlzIGEgcmVmZXJlbmNlIHRvIGEgY29uc3Qgb2JqZWN0LCB3aGlsZSB5IGlzIG5vdCBjb25zdCwgYW5kCisgICAgZnVuYzIoeik7IC8vIHggaXMgYSByZWZlcmVuY2UgdG8gYSBjb25zdCBvYmplY3QsIGp1c3QgbGlrZSB6LgorCitJbiBhbGwgY2FzZXMsIHRoZSBhcmd1bWVudCBgeGAgaW4gYGZ1bmMyYCBpcyBhIGNvbnN0LXF1YWxpZmllZCBMVmFsdWUuCitXZSBjYW4gdXNlIGZ1bmN0aW9uIG92ZXJsb2FkaW5nIHRvIGlkZW50aWZ5IG5vbi1jb25zdCBMVmFsdWVzOgorCisgICAgdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiB2b2lkIGZ1bmMzKFQgY29uc3QgJiB4KTsgLy8gIzEKKyAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHZvaWQgZnVuYzMoVCAmIHgpOyAgICAgICAvLyAjMgorCisgICAgLy8gWy4uLl0gZnVuY3Rpb24gc2NvcGU6CisgICAgZnVuYzMoMSk7IC8vIHggaXMgYSByZWZlcmVuY2UgdG8gYSBjb25zdCwgdGVtcG9yYXJ5IG9iamVjdCBpbiAjMSwKKyAgICBmdW5jMyh5KTsgLy8geCBpcyBhIHJlZmVyZW5jZSB0byBhIG5vbi1jb25zdCBvYmplY3QgaW4gIzIsIGFuZAorICAgIGZ1bmMzKHopOyAvLyB4IGlzIGEgcmVmZXJlbmNlIHRvIGEgY29uc3Qgb2JqZWN0IGluICMxLgorCitOb3RlIHRoYXQgYWxsIGFyZ3VtZW50cyBgeGAgaW4gdGhlIG92ZXJsb2FkZWQgZnVuY3Rpb24gYGZ1bmMzYCBhcmUgTFZhbHVlcy4KK0luIGZhY3QsIHRoZXJlIGlzIG5vIHdheSB0byB0cmFuc3BvcnQgUlZhbHVlcyBpbnRvIGEgZnVuY3Rpb24gYXMtaXMgaW4gQysrOTguCitBbHNvIG5vdGUgdGhhdCB3ZSBjYW4ndCBkaXN0aW5ndWlzaCBiZXR3ZWVuIHdoYXQgdXNlZCB0byBiZSBhIGNvbnN0IHF1YWxpZmllZAorTFZhbHVlIGFuZCBhbiBSVmFsdWUuIAorCitUaGF0J3MgYXMgY2xvc2UgYXMgd2UgY2FuIGdldCB0byBhIGdlbmVyaWMgZm9yd2FyZGluZyBmdW5jdGlvbiBgZ2AgYXMKK2Rlc2NyaWJlZCBhYm92ZSBieSB0aGUgbWVhbnMgb2YgQysrIDk4LiBTZWUgX190aGVfZm9yd2FyZGluZ19wcm9ibGVtX18gZm9yIGEKK3ZlcnkgZGV0YWlsZWQgZGlzY3Vzc2lvbiBpbmNsdWRpbmcgc29sdXRpb25zIHRoYXQgcmVxdWlyZSBsYW5ndWFnZSBjaGFuZ2VzLgorCitOb3csIGZvciBhY3R1YWxseSBpbXBsZW1lbnRpbmcgaXQsIHdlIG5lZWQgMl5OIG92ZXJsb2FkcyBmb3IgTiBwYXJhbWV0ZXJzCisoZWFjaCB3aXRoIGFuZCB3aXRob3V0IGNvbnN0IHF1YWxpZmllcikgZm9yIGVhY2ggbnVtYmVyIG9mIGFyZ3VtZW50cyAKKyh0aGF0IGlzIDJeKE5tYXgrMSkgLSAyXk5taW4pLiBSaWdodCwgdGhhdCBtZWFucyB0aGUgY29tcGlsZS10aW1lIGNvbXBsZXhpdHkgCitpcyBPKDJeTiksIGhvd2V2ZXIgdGhlIGZhY3RvciBpcyBsb3cgc28gaXQgd29ya3MgcXVpdGUgd2VsbCBmb3IgYSByZWFzb25hYmxlCitudW1iZXIgKDwgMTApIG9mIGFyZ3VtZW50cy4KKworW2VuZHNlY3RdCisKK1tzZWN0aW9uOnJlZmVyZW5jZSBSZWZlcmVuY2VdCisKK1tzZWN0aW9uIGZvcndhcmRfYWRhcHRlcl0KKworW2hlYWRpbmcgRGVzY3JpcHRpb25dCisKK0Z1bmN0aW9uIG9iamVjdCBhZGFwdGVyIHRlbXBsYXRlIHdob3NlIGluc3RhbmNlcyBhcmUgY2FsbGFibGUgd2l0aCBMVmFsdWUgYW5kCitSVmFsdWUgYXJndW1lbnRzLiBSVmFsdWUgYXJndW1lbnRzIGFyZSBmb3J3YXJkZWQgYXMgcmVmZXJlbmNlLXRvLWNvbnN0IHR5cGVkCitMVmFsdWVzLgorCitBbiBhcml0eSBjYW4gYmUgZ2l2ZW4gYXMgc2Vjb25kLCBudW1lcmljIG5vbi10eXBlIHRlbXBsYXRlIGFyZ3VtZW50IHRvIHJlc3RyaWN0Citmb3J3YXJkaW5nIHRvIGEgc3BlY2lmaWMgYXJpdHkuCitJZiBhIHRoaXJkLCBudW1lcmljIG5vbi10eXBlIHRlbXBsYXRlIGFyZ3VtZW50IGlzIHByZXNlbnQsIHRoZSBzZWNvbmQgYW5kIHRoaXJkIAordGVtcGxhdGUgYXJndW1lbnQgYXJlIHRyZWF0ZWQgYXMgbWluaW11bSBhbmQgbWF4aW11bSBhcml0eSwgcmVzcGVjdGl2ZWx5LgorU3BlY2lmeWluZyBhbiBhcml0eSBjYW4gYmUgaGVscGZ1bCB0byBpbXByb3ZlIHRoZSByZWFkYWJpbGl0eSBvZiBkaWFnbm9zdGljCittZXNzYWdlcyBhbmQgY29tcGlsZSB0aW1lIHBlcmZvcm1hbmNlLgorCitfX2Jvb3N0X3Jlc3VsdF9vZl9fIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgcmVzdWx0IHR5cGVzIG9mIHNwZWNpZmljIGNhbGwKK2V4cHJlc3Npb25zLgorCitbaGVhZGluZyBIZWFkZXJdCisgICAgI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvZm9yd2FyZF9hZGFwdGVyLmhwcD4KKworW2hlYWRpbmcgU3lub3BzaXNdCisKKyAgICBuYW1lc3BhY2UgYm9vc3QKKyAgICB7CisgICAgICAgIHRlbXBsYXRlPCBjbGFzcyBGdW5jdGlvbiwKKyAgICAgICAgICAgIGludCBBcml0eV9Pcl9NaW5Bcml0eSA9IF9fdW5zcGVjaWZpZWRfXywgaW50IE1heEFyaXR5ID0gX191bnNwZWNpZmllZF9fID4KKyAgICAgICAgY2xhc3MgZm9yd2FyZF9hZGFwdGVyOworICAgIH0KKworW3ZhcmlhYmxlbGlzdCBOb3RhdGlvbgorICAgIFtbYEZgXSAgICAgICAgICAgIFthIHBvc3NpYmx5IGNvbnN0IHF1YWxpZmllZCBmdW5jdGlvbiBvYmplY3QgdHlwZSBvciByZWZlcmVuY2UgdHlwZSB0aGVyZW9mXV0KKyAgICBbW2BmYF0gICAgICAgICAgICBbYW4gb2JqZWN0IGNvbnZlcnRpYmxlIHRvIGBGYF1dCisgICAgW1tgRkFgXSAgICAgICAgICAgW3RoZSB0eXBlIGBmb3J3YXJkX2FkYXB0ZXI8Rj5gXV0KKyAgICBbW2BmYWBdICAgICAgICAgICBbYW4gaW5zdGFuY2Ugb2JqZWN0IG9mIGBGQWAsIGluaXRpYWxpemVkIHdpdGggYGZgXV0KKyAgICBbW2BhMGAuLi5gYU5gXSAgICBbYXJndW1lbnRzIHRvIGBmYWBdXQorXQorCitUaGUgcmVzdWx0IHR5cGUgb2YgYSB0YXJnZXQgZnVuY3Rpb24gaW52b2NhdGlvbiBtdXN0IGJlCisKKyAgX19ib29zdF9fcmVzdWx0X29mX188RiooVEEwIFtjb25zdF0mLi4uVEFOIFtjb25zdF0mXSk+Ojp0eXBlCisKK3doZXJlIGBUQTBgLi4uYFRBTmAgZGVub3RlIHRoZSBhcmd1bWVudCB0eXBlcyBvZiBgYTBgLi4uYGFOYC4KKworW2hlYWRpbmcgRXhwcmVzc2lvbiBTZW1hbnRpY3NdCisKK1t0YWJsZQorICAgIFtbRXhwcmVzc2lvbl0gICAgICBbU2VtYW50aWNzXV0KKyAgICBbW2BGQShmKWBdICAgICAgICAgW2NyZWF0ZXMgYW4gYWRhcHRlciwgaW5pdGlhbGl6ZXMgdGhlIHRhcmdldCBmdW5jdGlvbiB3aXRoIGBmYC5dXQorICAgIFtbYEZBKClgXSAgICAgICAgICBbY3JlYXRlcyBhbiBhZGFwdGVyLCBhdHRlbXB0cyB0byB1c2UgYEZgJ3MgZGVmYXVsdCBjb25zdHJ1Y3Rvci5dXQorICAgIFtbYGZhKGEwYC4uLmBhTilgXSBbY2FsbHMgYGZgIHdpdGggd2l0aCBhcmd1bWVudHMgYGEwYC4uLmBhTmAuXV0KK10KKworW2hlYWRpbmcgTGltaXRzXQorCitUaGUgbWFjcm8gQk9PU1RfRlVOQ1RJT05BTF9GT1JXQVJEX0FEQVBURVJfTUFYX0FSSVRZIGNhbiBiZSBkZWZpbmVkIHRvIHNldCB0aGUKK21heGltdW0gY2FsbCBhcml0eS4gSXQgZGVmYXVsdHMgdG8gNi4KKworW2hlYWRpbmcgQ29tcGxleGl0eV0KKworUHJlcHJvY2Vzc2luZyB0aW1lOiBPKDJeTiksIHdoZXJlIE4gaXMgdGhlIGFyaXR5IGxpbWl0LgorQ29tcGlsZSB0aW1lOiBPKDJeTiksIHdoZXJlIE4gZGVwZW5kcyBvbiB0aGUgYXJpdHkgcmFuZ2UuCitSdW4gdGltZTogTygwKSBpZiB0aGUgY29tcGlsZXIgaW5saW5lcywgTygxKSBvdGhlcndpc2UuCisKK1tlbmRzZWN0XQorCisKK1tzZWN0aW9uIGxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlcl0KKworW2hlYWRpbmcgRGVzY3JpcHRpb25dCisKK0Z1bmN0aW9uIG9iamVjdCBhZGFwdGVyIHRlbXBsYXRlIHdob3NlIGluc3RhbmNlcyBhcmUgY2FsbGFibGUgd2l0aCBMVmFsdWUgYW5kCitSVmFsdWUgYXJndW1lbnRzLiBBbGwgYXJndW1lbnRzIGFyZSBmb3J3YXJkZWQgYXMgcmVmZXJlbmNlLXRvLWNvbnN0IHR5cGVkCitMVmFsdWVzLCBleGNlcHQgZm9yIHJlZmVyZW5jZSB3cmFwcGVycyB3aGljaCBhcmUgdW53cmFwcGVkIGFuZCBtYXkgeWllbGQKK25vbi1jb25zdCBMVmFsdWVzLgorCitBbiBhcml0eSBjYW4gYmUgZ2l2ZW4gYXMgc2Vjb25kLCBudW1lcmljIG5vbi10eXBlIHRlbXBsYXRlIGFyZ3VtZW50IHRvIHJlc3RyaWN0Citmb3J3YXJkaW5nIHRvIGEgc3BlY2lmaWMgYXJpdHkuCitJZiBhIHRoaXJkLCBudW1lcmljIG5vbi10eXBlIHRlbXBsYXRlIGFyZ3VtZW50IGlzIHByZXNlbnQsIHRoZSBzZWNvbmQgYW5kIHRoaXJkIAordGVtcGxhdGUgYXJndW1lbnQgYXJlIHRyZWF0ZWQgYXMgbWluaW11bSBhbmQgbWF4aW11bSBhcml0eSwgcmVzcGVjdGl2ZWx5LgorU3BlY2lmeWluZyBhbiBhcml0eSBjYW4gYmUgaGVscGZ1bCB0byBpbXByb3ZlIHRoZSByZWFkYWJpbGl0eSBvZiBkaWFnbm9zdGljCittZXNzYWdlcyBhbmQgY29tcGlsZSB0aW1lIHBlcmZvcm1hbmNlLgorCitfX2Jvb3N0X3Jlc3VsdF9vZl9fIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgcmVzdWx0IHR5cGVzIG9mIHNwZWNpZmljIGNhbGwKK2V4cHJlc3Npb25zLgorCitbaGVhZGluZyBIZWFkZXJdCisgICAgI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvbGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyLmhwcD4KKworW2hlYWRpbmcgU3lub3BzaXNdCisKKyAgICBuYW1lc3BhY2UgYm9vc3QKKyAgICB7CisgICAgICAgIHRlbXBsYXRlPCBjbGFzcyBGdW5jdGlvbiwKKyAgICAgICAgICAgIGludCBBcml0eV9Pcl9NaW5Bcml0eSA9IF9fdW5zcGVjaWZpZWRfXywgaW50IE1heEFyaXR5ID0gX191bnNwZWNpZmllZF9fID4KKyAgICAgICAgc3RydWN0IGxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlcjsKKyAgICB9CisKK1t2YXJpYWJsZWxpc3QgTm90YXRpb24KKyAgICBbW2BGYF0gICAgICAgICBbYSBwb3NzaWJseSBjb25zdCBxdWFsaWZpZWQgZnVuY3Rpb24gb2JqZWN0IHR5cGUgb3IgcmVmZXJlbmNlIHR5cGUgdGhlcmVvZl1dCisgICAgW1tgZmBdICAgICAgICAgW2FuIG9iamVjdCBjb252ZXJ0aWJsZSB0byBgRmBdXQorICAgIFtbYEZBYF0gICAgICAgIFt0aGUgdHlwZSBgbGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyPEY+YF1dCisgICAgW1tgZmFgXSAgICAgICAgW2FuIGluc3RhbmNlIG9mIGBGQWAsIGluaXRpYWxpemVkIHdpdGggYGZgXV0KKyAgICBbW2BhMGAuLi5gYU5gXSBbYXJndW1lbnRzIHRvIGBmYWBdXQorXQorCitUaGUgcmVzdWx0IHR5cGUgb2YgYSB0YXJnZXQgZnVuY3Rpb24gaW52b2NhdGlvbiBtdXN0IGJlCisKKyAgX19ib29zdF9fcmVzdWx0X29mX188RiooVEEwIFtjb25zdF0mLi4uVEFOIFtjb25zdF0mXSk+Ojp0eXBlCisKK3doZXJlIGBUQTBgLi4uYFRBTmAgZGVub3RlIHRoZSBhcmd1bWVudCB0eXBlcyBvZiBgYTBgLi4uYGFOYC4KKworW2hlYWRpbmcgRXhwcmVzc2lvbiBTZW1hbnRpY3NdCisKK1t0YWJsZQorICAgIFtbRXhwcmVzc2lvbl0gICAgICBbU2VtYW50aWNzXV0KKyAgICBbW2BGQShmKWBdICAgICAgICAgW2NyZWF0ZXMgYW4gYWRhcHRlciwgaW5pdGlhbGl6ZXMgdGhlIHRhcmdldCBmdW5jdGlvbiB3aXRoIGBmYC5dXQorICAgIFtbYEZBKClgXSAgICAgICAgICBbY3JlYXRlcyBhbiBhZGFwdGVyLCBhdHRlbXB0cyB0byB1c2UgYEZgJ3MgZGVmYXVsdCBjb25zdHJ1Y3Rvci5dXQorICAgIFtbYGZhKGEwYC4uLmBhTilgXSBbY2FsbHMgYGZgIHdpdGggd2l0aCBjb25zdCBhcmd1bWVudHMgYGEwYC4uLmBhTmAuIElmIGBhSWAgaXMgYSAKKyAgICAgIHJlZmVyZW5jZSB3cmFwcGVyIGl0IGlzIHVud3JhcHBlZC5dXQorXQorCitbaGVhZGluZyBMaW1pdHNdCisKK1RoZSBtYWNybyBCT09TVF9GVU5DVElPTkFMX0xJR0hUV0VJR0hUX0ZPUldBUkRfQURBUFRFUl9NQVhfQVJJVFkgY2FuIGJlIGRlZmluZWQKK3RvIHNldCB0aGUgbWF4aW11bSBjYWxsIGFyaXR5LiBJdCBkZWZhdWx0cyB0byAxMC4KKworW2hlYWRpbmcgQ29tcGxleGl0eV0KKworUHJlcHJvY2Vzc2luZyB0aW1lOiBPKE4pLCB3aGVyZSBOIGlzIHRoZSBhcml0eSBsaW1pdC4KK0NvbXBpbGUgdGltZTogTyhOKSwgd2hlcmUgTiBpcyB0aGUgZWZmZWN0aXZlIGFyaXR5IG9mIGEgY2FsbC4KK1J1biB0aW1lOiBPKDApIGlmIHRoZSBjb21waWxlciBpbmxpbmVzLCBPKDEpIG90aGVyd2lzZS4KKworW2VuZHNlY3RdCisKK1tlbmRzZWN0XQorCisKK1tzZWN0aW9uIEFja25vd2xlZGdlbWVudHNdCisKK0FzIHRoZXNlIHV0aWxpdGllcyBhcmUgZmFjdG9yZWQgb3V0IG9mIHRoZSBfX2Jvb3N0X2Z1c2lvbl9fIGZ1bmN0aW9uYWwgbW9kdWxlLCAKK0kgd2FudCB0byB0aGFuayBEYW4gTWFyc2RlbiBhbmQgSm9lbCBkZSBHdXptYW4gZm9yIGxldHRpbmcgbWUgcGFydGljaXBhdGUgaW4gdGhlCitkZXZlbG9wbWVudCBvZiB0aGF0IGdyZWF0IGxpYnJhcnkgaW4gdGhlIGZpcnN0IHBsYWNlLgorCitGdXJ0aGVyLCBJIHdhbnQgdG8gY3JlZGl0IHRoZSBhdXRob3JzIG9mIHRoZSByZWZlcmVuY2VzIGJlbG93LCBmb3IgdGhlaXIKK2luLWRlcHRoIGludmVzdGlnYXRpb24gb2YgdGhlIHByb2JsZW0gYW5kIHRoZSBzb2x1dGlvbiBpbXBsZW1lbnRlZCBoZXJlLgorCitMYXN0IGJ1dCBub3QgbGVhc3QgSSB3YW50IHRvIHRoYW5rIFZlc2EgS2Fybm92ZW4gYW5kIFBhdWwgTWVuc29uaWRlcyBmb3IgdGhlCitCb29zdCBQcmVwcm9jZXNzb3IgbGlicmFyeS4gV2l0aG91dCBpdCwgSSB3b3VsZCBoYXZlIGVuZGVkIHVwIHdpdGggYW4gZXh0ZXJuYWwKK2NvZGUgZ2VuZXJhdG9yIGZvciB0aGlzIG9uZS4KKworW2VuZHNlY3RdCisKKworW3NlY3Rpb24gUmVmZXJlbmNlc10KKworIyBbQGh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMDIvbjEzODUuaHRtIFRoZSBGb3J3YXJkaW5nIFByb2JsZW1dLAorICBQZXRlciBEaW1vdiwgSG93YXJkIEUuIEhpbm5hbnQsIERhdmlkIEFicmFoYW1zLCAyMDAyCisKKyMgW0BodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3V0aWxpdHkvdXRpbGl0eS5odG0jcmVzdWx0X29mIEJvb3N0LlJlc3VsdE9mXSwKKyAgRG91Z2xhcyBHcmVnb3IsIDIwMDQKKworIyBbQGh0dHA6Ly93d3cuYm9vc3Qub3JnL2RvYy9odG1sL3JlZi5odG1sIEJvb3N0LlJlZl0sIAorICBKYWFra28gSmFydmksIFBldGVyIERpbW92LCBEb3VnbGFzIEdyZWdvciwgRGF2aWQgQWJyYWhhbXMsIDE5OTktMjAwMgorCitbZW5kc2VjdF0KKwpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2ZvcndhcmQvZG9jL2h0bWwvaW5kZXguaHRtbCBiL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL2RvYy9odG1sL2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDlkNTJiMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL2RvYy9odG1sL2luZGV4Lmh0bWwKQEAgLTAsMCArMSw1NzEgQEAKKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VUy1BU0NJSSI+Cis8dGl0bGU+Q2hhcHRlciYjMTYwOzEuJiMxNjA7Qm9vc3QuRnVuY3Rpb25hbC9Gb3J3YXJkIDEuMDwvdGl0bGU+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvYm9vc3Rib29rLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43OC4xIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkNoYXB0ZXImIzE2MDsxLiYjMTYwO0Jvb3N0LkZ1bmN0aW9uYWwvRm9yd2FyZCAxLjAiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNlbGxwYWRkaW5nPSIyIiB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj48aW1nIGFsdD0iQm9vc3QgQysrIExpYnJhcmllcyIgd2lkdGg9IjI3NyIgaGVpZ2h0PSI4NiIgc3JjPSIuLi8uLi8uLi8uLi8uLi9ib29zdC5wbmciPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbCI+SG9tZTwvYT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uL2xpYnJhcmllcy5odG0iPkxpYnJhcmllczwvYT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL3VzZXJzL3Blb3BsZS5odG1sIj5QZW9wbGU8L2E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy91c2Vycy9mYXEuaHRtbCI+RkFRPC9hPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vbW9yZS9pbmRleC5odG0iPk1vcmU8L2E+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxocj4KKzxkaXYgY2xhc3M9InNwaXJpdC1uYXYiPjwvZGl2PgorPGRpdiBjbGFzcz0iY2hhcHRlciI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+Cis8ZGl2PjxoMiBjbGFzcz0idGl0bGUiPgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkIj48L2E+Q2hhcHRlciYjMTYwOzEuJiMxNjA7Qm9vc3QuRnVuY3Rpb25hbC9Gb3J3YXJkIDEuMDwvaDI+PC9kaXY+Cis8ZGl2PjxkaXYgY2xhc3M9ImF1dGhvciI+PGgzIGNsYXNzPSJhdXRob3IiPgorPHNwYW4gY2xhc3M9ImZpcnN0bmFtZSI+VG9iaWFzPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3VybmFtZSI+U2Nod2luZ2VyPC9zcGFuPgorPC9oMz48L2Rpdj48L2Rpdj4KKzxkaXY+PHAgY2xhc3M9ImNvcHlyaWdodCI+Q29weXJpZ2h0ICYjMTY5OyAyMDA3LCAyMDA4IFRvYmlhcyBTY2h3aW5nZXI8L3A+PC9kaXY+Cis8ZGl2PjxkaXYgY2xhc3M9ImxlZ2Fsbm90aWNlIj4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5sZWdhbCI+PC9hPjxwPgorICAgICAgICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisgICAgICAgIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0IiB0YXJnZXQ9Il90b3AiPmh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvYT4pCisgICAgICA8L3A+Cis8L2Rpdj48L2Rpdj4KKzwvZGl2PjwvZGl2PgorPGRpdiBjbGFzcz0idG9jIj4KKzxwPjxiPlRhYmxlIG9mIENvbnRlbnRzPC9iPjwvcD4KKzxkbCBjbGFzcz0idG9jIj4KKzxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQuYnJpZWZfZGVzY3JpcHRpb24iPkJyaWVmIERlc2NyaXB0aW9uPC9hPjwvc3Bhbj48L2R0PgorPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5iYWNrZ3JvdW5kIj5CYWNrZ3JvdW5kPC9hPjwvc3Bhbj48L2R0PgorPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UiPlJlZmVyZW5jZTwvYT48L3NwYW4+PC9kdD4KKzxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQuYWNrbm93bGVkZ2VtZW50cyI+QWNrbm93bGVkZ2VtZW50czwvYT48L3NwYW4+PC9kdD4KKzxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlcyI+UmVmZXJlbmNlczwvYT48L3NwYW4+PC9kdD4KKzwvZGw+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5icmllZl9kZXNjcmlwdGlvbiI+PC9hPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5icmllZl9kZXNjcmlwdGlvbiIgdGl0bGU9IkJyaWVmIERlc2NyaXB0aW9uIj5CcmllZiBEZXNjcmlwdGlvbjwvYT4KKzwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Cis8cD4KKyAgICAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zm9yd2FyZF9hZGFwdGVyPC9zcGFuPjwvY29kZT4gcHJvdmlkZXMgYSByZXVzYWJsZSBhZGFwdGVyCisgICAgICB0ZW1wbGF0ZSBmb3IgZnVuY3Rpb24gb2JqZWN0cy4gSXQgZm9yd2FyZHMgUlZhbHVlcyBhcyByZWZlcmVuY2VzIHRvIGNvbnN0LAorICAgICAgd2hpbGUgbGVhdmluZyBMVmFsdWVzIGFzLWlzLgorICAgIDwvcD4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0ia2V5d29yZCI+c3RydWN0PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIGZ1bmN0aW9uIG9iamVjdCB0aGF0IG9ubHkgYWNjZXB0IExWYWx1ZXM8L3NwYW4+Cis8c3BhbiBjbGFzcz0ic3BlY2lhbCI+ezwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dGVtcGxhdGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlbmFtZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQwPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UMTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVuYW1lPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDI8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+b3BlcmF0b3I8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPigpKDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDA8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mYW1wOzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnQwPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDE8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mYW1wOzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnQxPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDI8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mYW1wOzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnQyPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjs8L3NwYW4+CisKKyAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZWRlZjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnZvaWQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5yZXN1bHRfdHlwZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJzcGVjaWFsIj59Ozwvc3Bhbj4KKworPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIEFkYXB0ZWQgdmVyc2lvbiBhbHNvIGFjY2VwdHMgUlZhbHVlcyBhbmQgZm9yd2FyZHM8L3NwYW4+Cis8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gdGhlbSBhcyByZWZlcmVuY2VzIHRvIGNvbnN0LCBMVmFsdWVzIGFzLWlzPC9zcGFuPgorPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVkZWY8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZvcndhcmRfYWRhcHRlcjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmY8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjs8L3NwYW4+Cis8L3ByZT4KKzxwPgorICAgICAgQW5vdGhlciBhZGFwdGVyLCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmxpZ2h3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyPC9zcGFuPjwvY29kZT4gYWxsb3dzIGZvcndhcmRpbmcKKyAgICAgIHdpdGggc29tZSBoZWxwIGZyb20gdGhlIHVzZXIgYWNjZXB0aW5nIGFuZCB1bndyYXBwaW5nIHJlZmVyZW5jZSB3cmFwcGVycyAoc2VlCisgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9kb2MvaHRtbC9yZWYuaHRtbCIgdGFyZ2V0PSJfdG9wIj5Cb29zdC5SZWY8L2E+KSBmb3IKKyAgICAgIHJlZmVyZW5jZSBhcmd1bWVudHMsIGNvbnN0IHF1YWxpZnlpbmcgYWxsIG90aGVyIGFyZ3VtZW50cy4KKyAgICA8L3A+Cis8cD4KKyAgICAgIFRoZSB0YXJnZXQgZnVuY3Rpb25zIG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdXRpbGl0eS91dGlsaXR5Lmh0bSNyZXN1bHRfb2YiIHRhcmdldD0iX3RvcCI+Qm9vc3QuUmVzdWx0T2Y8L2E+LAorICAgICAgYW5kIHNvIGFyZSB0aGUgYWRhcHRlcnMuCisgICAgPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQuYmFja2dyb3VuZCI+PC9hPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5iYWNrZ3JvdW5kIiB0aXRsZT0iQmFja2dyb3VuZCI+QmFja2dyb3VuZDwvYT4KKzwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Cis8cD4KKyAgICAgIExldCdzIHN1cHBvc2Ugd2UgaGF2ZSBzb21lIGZ1bmN0aW9uIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmY8L3NwYW4+PC9jb2RlPgorICAgICAgdGhhdCB3ZSBjYW4gY2FsbCBsaWtlIHRoaXM6CisgICAgPC9wPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEyMzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YV92YXJpYWJsZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+Cis8L3ByZT4KKzxwPgorICAgICAgTm93IHdlIHdhbnQgdG8gd3JpdGUgYW5vdGhlciwgZ2VuZXJpYyBmdW5jdGlvbiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5nPC9zcGFuPjwvY29kZT4KKyAgICAgIHRoYXQgY2FuIGJlIGNhbGxlZCB0aGUgc2FtZSB3YXkgYW5kIHJldHVybnMgc29tZSBvYmplY3QgdGhhdCBjYWxscyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mPC9zcGFuPjwvY29kZT4gd2l0aCB0aGUgc2FtZSBhcmd1bWVudHMuCisgICAgPC9wPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEyMzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YV92YXJpYWJsZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPj09PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xMjM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFfdmFyaWFibGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPikuPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5jYWxsX2Y8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPigpPC9zcGFuPgorPC9wcmU+Cis8aDQ+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQuYmFja2dyb3VuZC5oMCI+PC9hPgorICAgICAgPHNwYW4gY2xhc3M9InBocmFzZSI+PGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLmJhY2tncm91bmQud2h5X3dvdWxkX3dlX3dhbnRfdG9fZG9faXRfX2FueXdheV8iPjwvYT48L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLmJhY2tncm91bmQud2h5X3dvdWxkX3dlX3dhbnRfdG9fZG9faXRfX2FueXdheV8iPldoeQorICAgICAgd291bGQgd2Ugd2FudCB0byBkbyBpdCwgYW55d2F5PzwvYT4KKyAgICA8L2g0PgorPHA+CisgICAgICBNYXliZSB3ZSB3YW50IHRvIHJ1biA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mPC9zcGFuPjwvY29kZT4gc2V2ZXJhbAorICAgICAgdGltZXMuIE9yIG1heWJlIHdlIHdhbnQgdG8gcnVuIGl0IHdpdGhpbiBhbm90aGVyIHRocmVhZC4gTWF5YmUgd2UganVzdCB3YW50CisgICAgICB0byBlbmNhcHN1bGF0ZSB0aGUgY2FsbCBleHByZXNzaW9uIGZvciBub3csIGFuZCB0aGVuIHVzZSBpdCB3aXRoIG90aGVyIGNvZGUKKyAgICAgIHRoYXQgYWxsb3dzIHRvIGNvbXBvc2UgbW9yZSBjb21wbGV4IGV4cHJlc3Npb25zIGluIG9yZGVyIHRvIGRlY29tcG9zZSBpdCB3aXRoCisgICAgICBDKysgdGVtcGxhdGVzIGFuZCBoYXZlIHRoZSBjb21waWxlciBnZW5lcmF0ZSBzb21lIG1hY2hpbmVyeSB0aGF0IGV2ZW50dWFsbHkKKyAgICAgIGNhbGxzIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmY8L3NwYW4+PC9jb2RlPiBhdCBydW50aW1lIChpbiBvdGhlcgorICAgICAgd29yZHM7IGFwcGx5IGEgdGVjaG5pcXVlIHRoYXQgaXMgY29tbW9ubHkgcmVmZXJyZWQgdG8gYXMgRXhwcmVzc2lvbiBUZW1wbGF0ZXMpLgorICAgIDwvcD4KKzxoND4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5iYWNrZ3JvdW5kLmgxIj48L2E+CisgICAgICA8c3BhbiBjbGFzcz0icGhyYXNlIj48YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQuYmFja2dyb3VuZC5ub3dfX2hvd19kb193ZV9kb19pdF8iPjwvYT48L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLmJhY2tncm91bmQubm93X19ob3dfZG9fd2VfZG9faXRfIj5Ob3csIGhvdworICAgICAgZG8gd2UgZG8gaXQ/PC9hPgorICAgIDwvaDQ+Cis8cD4KKyAgICAgIFRoZSBiYWQgbmV3cyBpczogSXQncyBpbXBvc3NpYmxlLgorICAgIDwvcD4KKzxwPgorICAgICAgVGhhdCBpcyBzbyBiZWNhdXNlIHRoZXJlIGlzIGEgc2xpZ2h0IGRpZmZlcmVuY2UgYmV0d2VlbiBhIHZhcmlhYmxlIGFuZCBhbiBleHByZXNzaW9uCisgICAgICB0aGF0IGV2YWx1YXRlcyB0byBpdHMgdmFsdWU6IEdpdmVuCisgICAgPC9wPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pbnQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj55PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj47PC9zcGFuPgorPHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ejwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjA8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjs8L3NwYW4+Cis8L3ByZT4KKzxwPgorICAgICAgYW5kCisgICAgPC9wPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj50ZW1wbGF0ZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVuYW1lPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuYzE8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mYW1wOzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPng8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPgorPC9wcmU+Cis8cD4KKyAgICAgIHdlIGNhbiBjYWxsCisgICAgPC9wPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jMTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+eTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+IDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyB4IGlzIGEgcmVmZXJlbmNlIHRvIGEgbm9uLWNvbnN0IG9iamVjdDwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jMTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ejwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+IDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyB4IGlzIGEgcmVmZXJlbmNlIHRvIGEgY29uc3Qgb2JqZWN0PC9zcGFuPgorPC9wcmU+Cis8cD4KKyAgICAgIHdoZXJlCisgICAgPC9wPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jMTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIGZhaWxzIHRvIGNvbXBpbGUuPC9zcGFuPgorPC9wcmU+Cis8cD4KKyAgICAgIFRoaXMgd2F5IHdlIGNhbiBzYWZlbHkgaGF2ZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jMTwvc3Bhbj48L2NvZGU+CisgICAgICBzdG9yZSBpdHMgcmVmZXJlbmNlIGFyZ3VtZW50IGFuZCB0aGUgY29tcGlsZXIga2VlcHMgdXMgZnJvbSBzdG9yaW5nIGEgcmVmZXJlbmNlCisgICAgICB0byBhbiBvYmplY3Qgd2l0aCB0ZW1wb3JhcnkgbGlmZXRpbWUuCisgICAgPC9wPgorPHA+CisgICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gcmVhbGl6ZSB0aGF0IG5vbi1jb25zdG5lc3MgYW5kIHdoZXRoZXIgYW4gb2JqZWN0IGJpbmRzIHRvCisgICAgICBhIG5vbi1jb25zdCByZWZlcmVuY2UgcGFyYW1ldGVyIGFyZSB0d28gZGlmZmVyZW50IHByb3BlcnRpZXMuIFRoZSBsYXR0ZXIgaXMKKyAgICAgIHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIExWYWx1ZXMgYW5kIFJWYWx1ZXMuIFRoZSBuYW1lcyBzdGVtIGZyb20gdGhlIGxlZnQgaGFuZAorICAgICAgc2lkZSBhbmQgdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZiBhc3NpZ25tZW50IGV4cHJlc3Npb25zLCB0aHVzIExWYWx1ZXMgYXJlIHR5cGljYWxseQorICAgICAgdGhlIG9uZXMgeW91IGNhbiBhc3NpZ24gdG8sIGFuZCBSVmFsdWVzIHRoZSB0ZW1wb3JhcnkgcmVzdWx0cyBmcm9tIHRoZSByaWdodAorICAgICAgaGFuZCBzaWRlIGV4cHJlc3Npb24uCisgICAgPC9wPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj55PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+MTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Kzwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4yPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj47PC9zcGFuPiAgICAgICAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIGEgaXMgTFZhbHVlLCAxKzIgaXMgdGhlIGV4cHJlc3Npb24gcHJvZHVjaW5nIHRoZSBSVmFsdWUsPC9zcGFuPgorPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIDErMiA9IGE7ICAgICAvLyB1c3VhbGx5IG1ha2VzIG5vIHNlbnNlLiA8L3NwYW4+CisKKzxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jMTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+eTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+ICAgICAgIDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyB3b3JrcywgYmVjYXVzZSB5IGlzIGFuIExWYWx1ZTwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBmdW5jMSgxKzIpOyAgLy8gZmFpbHMgdG8gY29tcGlsZSwgYmVjYXVzZSB3ZSBvbmx5IGdvdCBhbiBSVmFsdWUuPC9zcGFuPgorPC9wcmU+Cis8cD4KKyAgICAgIElmIHdlIGFkZCBjb25zdCBxdWFsaWZpY2F0aW9uIG9uIHRoZSBwYXJhbWV0ZXIsIG91ciBmdW5jdGlvbiBhbHNvIGFjY2VwdHMgUlZhbHVlczoKKyAgICA8L3A+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPnRlbXBsYXRlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnZvaWQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jMjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+JmFtcDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj54PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4KKworPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIFsuLi5dIGZ1bmN0aW9uIHNjb3BlOjwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jMjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIHggaXMgYSByZWZlcmVuY2UgdG8gYSBjb25zdCB0ZW1wb3JhcnksIG9iamVjdCw8L3NwYW4+Cis8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuYzI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPiA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8geCBpcyBhIHJlZmVyZW5jZSB0byBhIGNvbnN0IG9iamVjdCwgd2hpbGUgeSBpcyBub3QgY29uc3QsIGFuZDwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jMjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ejwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+IDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyB4IGlzIGEgcmVmZXJlbmNlIHRvIGEgY29uc3Qgb2JqZWN0LCBqdXN0IGxpa2Ugei48L3NwYW4+Cis8L3ByZT4KKzxwPgorICAgICAgSW4gYWxsIGNhc2VzLCB0aGUgYXJndW1lbnQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+eDwvc3Bhbj48L2NvZGU+CisgICAgICBpbiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jMjwvc3Bhbj48L2NvZGU+IGlzIGEgY29uc3QtcXVhbGlmaWVkCisgICAgICBMVmFsdWUuIFdlIGNhbiB1c2UgZnVuY3Rpb24gb3ZlcmxvYWRpbmcgdG8gaWRlbnRpZnkgbm9uLWNvbnN0IExWYWx1ZXM6CisgICAgPC9wPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj50ZW1wbGF0ZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVuYW1lPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuYzM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZhbXA7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+eDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+IDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyAjMTwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJrZXl3b3JkIj50ZW1wbGF0ZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVuYW1lPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj52b2lkPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuYzM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mYW1wOzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPng8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPiAgICAgICA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gIzI8L3NwYW4+CisKKzxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBbLi4uXSBmdW5jdGlvbiBzY29wZTo8L3NwYW4+Cis8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuYzM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+IDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyB4IGlzIGEgcmVmZXJlbmNlIHRvIGEgY29uc3QsIHRlbXBvcmFyeSBvYmplY3QgaW4gIzEsPC9zcGFuPgorPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmMzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj55PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIHggaXMgYSByZWZlcmVuY2UgdG8gYSBub24tY29uc3Qgb2JqZWN0IGluICMyLCBhbmQ8L3NwYW4+Cis8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuYzM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPno8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPiA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8geCBpcyBhIHJlZmVyZW5jZSB0byBhIGNvbnN0IG9iamVjdCBpbiAjMS48L3NwYW4+Cis8L3ByZT4KKzxwPgorICAgICAgTm90ZSB0aGF0IGFsbCBhcmd1bWVudHMgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+eDwvc3Bhbj48L2NvZGU+IGluCisgICAgICB0aGUgb3ZlcmxvYWRlZCBmdW5jdGlvbiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jMzwvc3Bhbj48L2NvZGU+CisgICAgICBhcmUgTFZhbHVlcy4gSW4gZmFjdCwgdGhlcmUgaXMgbm8gd2F5IHRvIHRyYW5zcG9ydCBSVmFsdWVzIGludG8gYSBmdW5jdGlvbgorICAgICAgYXMtaXMgaW4gQysrOTguIEFsc28gbm90ZSB0aGF0IHdlIGNhbid0IGRpc3Rpbmd1aXNoIGJldHdlZW4gd2hhdCB1c2VkIHRvIGJlCisgICAgICBhIGNvbnN0IHF1YWxpZmllZCBMVmFsdWUgYW5kIGFuIFJWYWx1ZS4KKyAgICA8L3A+Cis8cD4KKyAgICAgIFRoYXQncyBhcyBjbG9zZSBhcyB3ZSBjYW4gZ2V0IHRvIGEgZ2VuZXJpYyBmb3J3YXJkaW5nIGZ1bmN0aW9uIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmc8L3NwYW4+PC9jb2RlPiBhcyBkZXNjcmliZWQgYWJvdmUgYnkgdGhlIG1lYW5zIG9mIEMrKworICAgICAgOTguIFNlZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDAyL24xMzg1Lmh0bSIgdGFyZ2V0PSJfdG9wIj5UaGUKKyAgICAgIEZvcndhcmRpbmcgUHJvYmxlbTwvYT4gZm9yIGEgdmVyeSBkZXRhaWxlZCBkaXNjdXNzaW9uIGluY2x1ZGluZyBzb2x1dGlvbnMKKyAgICAgIHRoYXQgcmVxdWlyZSBsYW5ndWFnZSBjaGFuZ2VzLgorICAgIDwvcD4KKzxwPgorICAgICAgTm93LCBmb3IgYWN0dWFsbHkgaW1wbGVtZW50aW5nIGl0LCB3ZSBuZWVkIDJeTiBvdmVybG9hZHMgZm9yIE4gcGFyYW1ldGVycyAoZWFjaAorICAgICAgd2l0aCBhbmQgd2l0aG91dCBjb25zdCBxdWFsaWZpZXIpIGZvciBlYWNoIG51bWJlciBvZiBhcmd1bWVudHMgKHRoYXQgaXMgMl4oTm1heCsxKQorICAgICAgLSAyXk5taW4pLiBSaWdodCwgdGhhdCBtZWFucyB0aGUgY29tcGlsZS10aW1lIGNvbXBsZXhpdHkgaXMgTygyXk4pLCBob3dldmVyCisgICAgICB0aGUgZmFjdG9yIGlzIGxvdyBzbyBpdCB3b3JrcyBxdWl0ZSB3ZWxsIGZvciBhIHJlYXNvbmFibGUgbnVtYmVyICgmbHQ7IDEwKQorICAgICAgb2YgYXJndW1lbnRzLgorICAgIDwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZSI+PC9hPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UiIHRpdGxlPSJSZWZlcmVuY2UiPlJlZmVyZW5jZTwvYT4KKzwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Cis8ZGl2IGNsYXNzPSJ0b2MiPjxkbCBjbGFzcz0idG9jIj4KKzxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmZvcndhcmRfYWRhcHRlciI+Zm9yd2FyZF9hZGFwdGVyPC9hPjwvc3Bhbj48L2R0PgorPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UubGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyIj5saWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXI8L2E+PC9zcGFuPjwvZHQ+Cis8L2RsPjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UuZm9yd2FyZF9hZGFwdGVyIj48L2E+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5mb3J3YXJkX2FkYXB0ZXIiIHRpdGxlPSJmb3J3YXJkX2FkYXB0ZXIiPmZvcndhcmRfYWRhcHRlcjwvYT4KKzwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+Cis8aDU+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmZvcndhcmRfYWRhcHRlci5oMCI+PC9hPgorICAgICAgICA8c3BhbiBjbGFzcz0icGhyYXNlIj48YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmZvcndhcmRfYWRhcHRlci5kZXNjcmlwdGlvbiI+PC9hPjwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmZvcndhcmRfYWRhcHRlci5kZXNjcmlwdGlvbiI+RGVzY3JpcHRpb248L2E+CisgICAgICA8L2g1PgorPHA+CisgICAgICAgIEZ1bmN0aW9uIG9iamVjdCBhZGFwdGVyIHRlbXBsYXRlIHdob3NlIGluc3RhbmNlcyBhcmUgY2FsbGFibGUgd2l0aCBMVmFsdWUKKyAgICAgICAgYW5kIFJWYWx1ZSBhcmd1bWVudHMuIFJWYWx1ZSBhcmd1bWVudHMgYXJlIGZvcndhcmRlZCBhcyByZWZlcmVuY2UtdG8tY29uc3QKKyAgICAgICAgdHlwZWQgTFZhbHVlcy4KKyAgICAgIDwvcD4KKzxwPgorICAgICAgICBBbiBhcml0eSBjYW4gYmUgZ2l2ZW4gYXMgc2Vjb25kLCBudW1lcmljIG5vbi10eXBlIHRlbXBsYXRlIGFyZ3VtZW50IHRvIHJlc3RyaWN0CisgICAgICAgIGZvcndhcmRpbmcgdG8gYSBzcGVjaWZpYyBhcml0eS4gSWYgYSB0aGlyZCwgbnVtZXJpYyBub24tdHlwZSB0ZW1wbGF0ZSBhcmd1bWVudAorICAgICAgICBpcyBwcmVzZW50LCB0aGUgc2Vjb25kIGFuZCB0aGlyZCB0ZW1wbGF0ZSBhcmd1bWVudCBhcmUgdHJlYXRlZCBhcyBtaW5pbXVtCisgICAgICAgIGFuZCBtYXhpbXVtIGFyaXR5LCByZXNwZWN0aXZlbHkuIFNwZWNpZnlpbmcgYW4gYXJpdHkgY2FuIGJlIGhlbHBmdWwgdG8gaW1wcm92ZQorICAgICAgICB0aGUgcmVhZGFiaWxpdHkgb2YgZGlhZ25vc3RpYyBtZXNzYWdlcyBhbmQgY29tcGlsZSB0aW1lIHBlcmZvcm1hbmNlLgorICAgICAgPC9wPgorPHA+CisgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdXRpbGl0eS91dGlsaXR5Lmh0bSNyZXN1bHRfb2YiIHRhcmdldD0iX3RvcCI+Qm9vc3QuUmVzdWx0T2Y8L2E+CisgICAgICAgIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgcmVzdWx0IHR5cGVzIG9mIHNwZWNpZmljIGNhbGwgZXhwcmVzc2lvbnMuCisgICAgICA8L3A+Cis8aDU+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmZvcndhcmRfYWRhcHRlci5oMSI+PC9hPgorICAgICAgICA8c3BhbiBjbGFzcz0icGhyYXNlIj48YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmZvcndhcmRfYWRhcHRlci5oZWFkZXIiPjwvYT48L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5mb3J3YXJkX2FkYXB0ZXIuaGVhZGVyIj5IZWFkZXI8L2E+CisgICAgICA8L2g1PgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJwcmVwcm9jZXNzb3IiPiNpbmNsdWRlPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPi88L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmN0aW9uYWw8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPi88L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZvcndhcmRfYWRhcHRlcjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ljwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aHBwPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPgorPC9wcmU+Cis8aDU+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmZvcndhcmRfYWRhcHRlci5oMiI+PC9hPgorICAgICAgICA8c3BhbiBjbGFzcz0icGhyYXNlIj48YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmZvcndhcmRfYWRhcHRlci5zeW5vcHNpcyI+PC9hPjwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmZvcndhcmRfYWRhcHRlci5zeW5vcHNpcyI+U3lub3BzaXM8L2E+CisgICAgICA8L2g1PgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5uYW1lc3BhY2U8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJzcGVjaWFsIj57PC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50ZW1wbGF0ZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNsYXNzPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RnVuY3Rpb248L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pbnQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5Bcml0eV9Pcl9NaW5Bcml0eTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnVuc3BlY2lmaWVkPC9lbT48L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pbnQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5NYXhBcml0eTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnVuc3BlY2lmaWVkPC9lbT48L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jbGFzczwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZvcndhcmRfYWRhcHRlcjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJzcGVjaWFsIj59PC9zcGFuPgorPC9wcmU+Cis8ZGl2IGNsYXNzPSJ2YXJpYWJsZWxpc3QiPgorPHAgY2xhc3M9InRpdGxlIj48Yj5Ob3RhdGlvbjwvYj48L3A+Cis8ZGwgY2xhc3M9InZhcmlhYmxlbGlzdCI+Cis8ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkY8L3NwYW4+PC9jb2RlPjwvc3Bhbj48L2R0PgorPGRkPjxwPgorICAgICAgICAgICAgICBhIHBvc3NpYmx5IGNvbnN0IHF1YWxpZmllZCBmdW5jdGlvbiBvYmplY3QgdHlwZSBvciByZWZlcmVuY2UgdHlwZSB0aGVyZW9mCisgICAgICAgICAgICA8L3A+PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zjwvc3Bhbj48L2NvZGU+PC9zcGFuPjwvZHQ+Cis8ZGQ+PHA+CisgICAgICAgICAgICAgIGFuIG9iamVjdCBjb252ZXJ0aWJsZSB0byA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GPC9zcGFuPjwvY29kZT4KKyAgICAgICAgICAgIDwvcD48L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GQTwvc3Bhbj48L2NvZGU+PC9zcGFuPjwvZHQ+Cis8ZGQ+PHA+CisgICAgICAgICAgICAgIHRoZSB0eXBlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZvcndhcmRfYWRhcHRlcjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Rjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj48L2NvZGU+CisgICAgICAgICAgICA8L3A+PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZmE8L3NwYW4+PC9jb2RlPjwvc3Bhbj48L2R0PgorPGRkPjxwPgorICAgICAgICAgICAgICBhbiBpbnN0YW5jZSBvYmplY3Qgb2YgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RkE8L3NwYW4+PC9jb2RlPiwKKyAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQgd2l0aCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mPC9zcGFuPjwvY29kZT4KKyAgICAgICAgICAgIDwvcD48L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hMDwvc3Bhbj48L2NvZGU+Li4uPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YU48L3NwYW4+PC9jb2RlPjwvc3Bhbj48L2R0PgorPGRkPjxwPgorICAgICAgICAgICAgICBhcmd1bWVudHMgdG8gPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZmE8L3NwYW4+PC9jb2RlPgorICAgICAgICAgICAgPC9wPjwvZGQ+Cis8L2RsPgorPC9kaXY+Cis8cD4KKyAgICAgICAgVGhlIHJlc3VsdCB0eXBlIG9mIGEgdGFyZ2V0IGZ1bmN0aW9uIGludm9jYXRpb24gbXVzdCBiZQorICAgICAgPC9wPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdXRpbGl0eS91dGlsaXR5Lmh0bSNyZXN1bHRfb2YiIHRhcmdldD0iX3RvcCI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5yZXN1bHRfb2Y8L3NwYW4+PC9jb2RlPjwvYT48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Rjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Kig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlRBMDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPls8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj5dJmFtcDsuLi48L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlRBTjwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPls8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj5dJmFtcDtdKSZndDs6Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+dHlwZTwvc3Bhbj4KKzwvcHJlPgorPHA+CisgICAgICAgIHdoZXJlIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlRBMDwvc3Bhbj48L2NvZGU+Li4uPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+VEFOPC9zcGFuPjwvY29kZT4gZGVub3RlIHRoZSBhcmd1bWVudCB0eXBlcyBvZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hMDwvc3Bhbj48L2NvZGU+Li4uPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YU48L3NwYW4+PC9jb2RlPi4KKyAgICAgIDwvcD4KKzxoNT4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UuZm9yd2FyZF9hZGFwdGVyLmgzIj48L2E+CisgICAgICAgIDxzcGFuIGNsYXNzPSJwaHJhc2UiPjxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UuZm9yd2FyZF9hZGFwdGVyLmV4cHJlc3Npb25fc2VtYW50aWNzIj48L2E+PC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UuZm9yd2FyZF9hZGFwdGVyLmV4cHJlc3Npb25fc2VtYW50aWNzIj5FeHByZXNzaW9uCisgICAgICAgIFNlbWFudGljczwvYT4KKyAgICAgIDwvaDU+Cis8ZGl2IGNsYXNzPSJpbmZvcm1hbHRhYmxlIj48dGFibGUgY2xhc3M9InRhYmxlIj4KKzxjb2xncm91cD4KKzxjb2w+Cis8Y29sPgorPC9jb2xncm91cD4KKzx0aGVhZD48dHI+Cis8dGg+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uCisgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgICA8L3RoPgorPHRoPgorICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgU2VtYW50aWNzCisgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgICA8L3RoPgorPC90cj48L3RoZWFkPgorPHRib2R5PgorPHRyPgorPHRkPgorICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RkE8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmY8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+PC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgPC90ZD4KKzx0ZD4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgIGNyZWF0ZXMgYW4gYWRhcHRlciwgaW5pdGlhbGl6ZXMgdGhlIHRhcmdldCBmdW5jdGlvbiB3aXRoIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmY8L3NwYW4+PC9jb2RlPi4KKyAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgIDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPgorICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RkE8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPigpPC9zcGFuPjwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgIDwvdGQ+Cis8dGQ+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICBjcmVhdGVzIGFuIGFkYXB0ZXIsIGF0dGVtcHRzIHRvIHVzZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GPC9zcGFuPjwvY29kZT4ncworICAgICAgICAgICAgICAgICAgZGVmYXVsdCBjb25zdHJ1Y3Rvci4KKyAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgIDwvdGQ+Cis8L3RyPgorPHRyPgorPHRkPgorICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZmE8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmEwPC9zcGFuPjwvY29kZT4uLi48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hTjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj48L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgICA8L3RkPgorPHRkPgorICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgY2FsbHMgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zjwvc3Bhbj48L2NvZGU+IHdpdGggd2l0aAorICAgICAgICAgICAgICAgICAgYXJndW1lbnRzIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmEwPC9zcGFuPjwvY29kZT4uLi48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hTjwvc3Bhbj48L2NvZGU+LgorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgPC90ZD4KKzwvdHI+Cis8L3Rib2R5PgorPC90YWJsZT48L2Rpdj4KKzxoNT4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UuZm9yd2FyZF9hZGFwdGVyLmg0Ij48L2E+CisgICAgICAgIDxzcGFuIGNsYXNzPSJwaHJhc2UiPjxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UuZm9yd2FyZF9hZGFwdGVyLmxpbWl0cyI+PC9hPjwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmZvcndhcmRfYWRhcHRlci5saW1pdHMiPkxpbWl0czwvYT4KKyAgICAgIDwvaDU+Cis8cD4KKyAgICAgICAgVGhlIG1hY3JvIEJPT1NUX0ZVTkNUSU9OQUxfRk9SV0FSRF9BREFQVEVSX01BWF9BUklUWSBjYW4gYmUgZGVmaW5lZCB0byBzZXQKKyAgICAgICAgdGhlIG1heGltdW0gY2FsbCBhcml0eS4gSXQgZGVmYXVsdHMgdG8gNi4KKyAgICAgIDwvcD4KKzxoNT4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UuZm9yd2FyZF9hZGFwdGVyLmg1Ij48L2E+CisgICAgICAgIDxzcGFuIGNsYXNzPSJwaHJhc2UiPjxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UuZm9yd2FyZF9hZGFwdGVyLmNvbXBsZXhpdHkiPjwvYT48L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5mb3J3YXJkX2FkYXB0ZXIuY29tcGxleGl0eSI+Q29tcGxleGl0eTwvYT4KKyAgICAgIDwvaDU+Cis8cD4KKyAgICAgICAgUHJlcHJvY2Vzc2luZyB0aW1lOiBPKDJeTiksIHdoZXJlIE4gaXMgdGhlIGFyaXR5IGxpbWl0LiBDb21waWxlIHRpbWU6IE8oMl5OKSwKKyAgICAgICAgd2hlcmUgTiBkZXBlbmRzIG9uIHRoZSBhcml0eSByYW5nZS4gUnVuIHRpbWU6IE8oMCkgaWYgdGhlIGNvbXBpbGVyIGlubGluZXMsCisgICAgICAgIE8oMSkgb3RoZXJ3aXNlLgorICAgICAgPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5saWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXIiPjwvYT48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlciIgdGl0bGU9ImxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlciI+bGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyPC9hPgorPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KKzxoNT4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UubGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyLmgwIj48L2E+CisgICAgICAgIDxzcGFuIGNsYXNzPSJwaHJhc2UiPjxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UubGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyLmRlc2NyaXB0aW9uIj48L2E+PC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UubGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyLmRlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjwvYT4KKyAgICAgIDwvaDU+Cis8cD4KKyAgICAgICAgRnVuY3Rpb24gb2JqZWN0IGFkYXB0ZXIgdGVtcGxhdGUgd2hvc2UgaW5zdGFuY2VzIGFyZSBjYWxsYWJsZSB3aXRoIExWYWx1ZQorICAgICAgICBhbmQgUlZhbHVlIGFyZ3VtZW50cy4gQWxsIGFyZ3VtZW50cyBhcmUgZm9yd2FyZGVkIGFzIHJlZmVyZW5jZS10by1jb25zdCB0eXBlZAorICAgICAgICBMVmFsdWVzLCBleGNlcHQgZm9yIHJlZmVyZW5jZSB3cmFwcGVycyB3aGljaCBhcmUgdW53cmFwcGVkIGFuZCBtYXkgeWllbGQKKyAgICAgICAgbm9uLWNvbnN0IExWYWx1ZXMuCisgICAgICA8L3A+Cis8cD4KKyAgICAgICAgQW4gYXJpdHkgY2FuIGJlIGdpdmVuIGFzIHNlY29uZCwgbnVtZXJpYyBub24tdHlwZSB0ZW1wbGF0ZSBhcmd1bWVudCB0byByZXN0cmljdAorICAgICAgICBmb3J3YXJkaW5nIHRvIGEgc3BlY2lmaWMgYXJpdHkuIElmIGEgdGhpcmQsIG51bWVyaWMgbm9uLXR5cGUgdGVtcGxhdGUgYXJndW1lbnQKKyAgICAgICAgaXMgcHJlc2VudCwgdGhlIHNlY29uZCBhbmQgdGhpcmQgdGVtcGxhdGUgYXJndW1lbnQgYXJlIHRyZWF0ZWQgYXMgbWluaW11bQorICAgICAgICBhbmQgbWF4aW11bSBhcml0eSwgcmVzcGVjdGl2ZWx5LiBTcGVjaWZ5aW5nIGFuIGFyaXR5IGNhbiBiZSBoZWxwZnVsIHRvIGltcHJvdmUKKyAgICAgICAgdGhlIHJlYWRhYmlsaXR5IG9mIGRpYWdub3N0aWMgbWVzc2FnZXMgYW5kIGNvbXBpbGUgdGltZSBwZXJmb3JtYW5jZS4KKyAgICAgIDwvcD4KKzxwPgorICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3V0aWxpdHkvdXRpbGl0eS5odG0jcmVzdWx0X29mIiB0YXJnZXQ9Il90b3AiPkJvb3N0LlJlc3VsdE9mPC9hPgorICAgICAgICBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHJlc3VsdCB0eXBlcyBvZiBzcGVjaWZpYyBjYWxsIGV4cHJlc3Npb25zLgorICAgICAgPC9wPgorPGg1PgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5saWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXIuaDEiPjwvYT4KKyAgICAgICAgPHNwYW4gY2xhc3M9InBocmFzZSI+PGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5saWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXIuaGVhZGVyIj48L2E+PC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UubGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyLmhlYWRlciI+SGVhZGVyPC9hPgorICAgICAgPC9oNT4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0icHJlcHJvY2Vzc29yIj4jaW5jbHVkZTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4vPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jdGlvbmFsPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4vPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5saWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPi48L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmhwcDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4KKzwvcHJlPgorPGg1PgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5saWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXIuaDIiPjwvYT4KKyAgICAgICAgPHNwYW4gY2xhc3M9InBocmFzZSI+PGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5saWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXIuc3lub3BzaXMiPjwvYT48L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5saWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXIuc3lub3BzaXMiPlN5bm9wc2lzPC9hPgorICAgICAgPC9oNT4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0ia2V5d29yZCI+bmFtZXNwYWNlPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+Cis8c3BhbiBjbGFzcz0ic3BlY2lhbCI+ezwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dGVtcGxhdGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jbGFzczwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkZ1bmN0aW9uPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+aW50PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+QXJpdHlfT3JfTWluQXJpdHk8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT51bnNwZWNpZmllZDwvZW0+PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+aW50PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+TWF4QXJpdHk8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PC9zcGFuPiA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT51bnNwZWNpZmllZDwvZW0+PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+c3RydWN0PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+bGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj47PC9zcGFuPgorPHNwYW4gY2xhc3M9InNwZWNpYWwiPn08L3NwYW4+Cis8L3ByZT4KKzxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+Cis8cCBjbGFzcz0idGl0bGUiPjxiPk5vdGF0aW9uPC9iPjwvcD4KKzxkbCBjbGFzcz0idmFyaWFibGVsaXN0Ij4KKzxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Rjwvc3Bhbj48L2NvZGU+PC9zcGFuPjwvZHQ+Cis8ZGQ+PHA+CisgICAgICAgICAgICAgIGEgcG9zc2libHkgY29uc3QgcXVhbGlmaWVkIGZ1bmN0aW9uIG9iamVjdCB0eXBlIG9yIHJlZmVyZW5jZSB0eXBlIHRoZXJlb2YKKyAgICAgICAgICAgIDwvcD48L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mPC9zcGFuPjwvY29kZT48L3NwYW4+PC9kdD4KKzxkZD48cD4KKyAgICAgICAgICAgICAgYW4gb2JqZWN0IGNvbnZlcnRpYmxlIHRvIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkY8L3NwYW4+PC9jb2RlPgorICAgICAgICAgICAgPC9wPjwvZGQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InRlcm0iPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkZBPC9zcGFuPjwvY29kZT48L3NwYW4+PC9kdD4KKzxkZD48cD4KKyAgICAgICAgICAgICAgdGhlIHR5cGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+bGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPjwvY29kZT4KKyAgICAgICAgICAgIDwvcD48L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mYTwvc3Bhbj48L2NvZGU+PC9zcGFuPjwvZHQ+Cis8ZGQ+PHA+CisgICAgICAgICAgICAgIGFuIGluc3RhbmNlIG9mIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkZBPC9zcGFuPjwvY29kZT4sCisgICAgICAgICAgICAgIGluaXRpYWxpemVkIHdpdGggPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Zjwvc3Bhbj48L2NvZGU+CisgICAgICAgICAgICA8L3A+PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0idGVybSI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YTA8L3NwYW4+PC9jb2RlPi4uLjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFOPC9zcGFuPjwvY29kZT48L3NwYW4+PC9kdD4KKzxkZD48cD4KKyAgICAgICAgICAgICAgYXJndW1lbnRzIHRvIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZhPC9zcGFuPjwvY29kZT4KKyAgICAgICAgICAgIDwvcD48L2RkPgorPC9kbD4KKzwvZGl2PgorPHA+CisgICAgICAgIFRoZSByZXN1bHQgdHlwZSBvZiBhIHRhcmdldCBmdW5jdGlvbiBpbnZvY2F0aW9uIG11c3QgYmUKKyAgICAgIDwvcD4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3V0aWxpdHkvdXRpbGl0eS5odG0jcmVzdWx0X29mIiB0YXJnZXQ9Il90b3AiPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+cmVzdWx0X29mPC9zcGFuPjwvY29kZT48L2E+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkY8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiooPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UQTA8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj5bPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+XSZhbXA7Li4uPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UQU48L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj5bPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+XSZhbXA7XSkmZ3Q7Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnR5cGU8L3NwYW4+Cis8L3ByZT4KKzxwPgorICAgICAgICB3aGVyZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5UQTA8L3NwYW4+PC9jb2RlPi4uLjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPlRBTjwvc3Bhbj48L2NvZGU+IGRlbm90ZSB0aGUgYXJndW1lbnQgdHlwZXMgb2YgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YTA8L3NwYW4+PC9jb2RlPi4uLjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFOPC9zcGFuPjwvY29kZT4uCisgICAgICA8L3A+Cis8aDU+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5oMyI+PC9hPgorICAgICAgICA8c3BhbiBjbGFzcz0icGhyYXNlIj48YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5leHByZXNzaW9uX3NlbWFudGljcyI+PC9hPjwvc3Bhbj48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlLmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5leHByZXNzaW9uX3NlbWFudGljcyI+RXhwcmVzc2lvbgorICAgICAgICBTZW1hbnRpY3M8L2E+CisgICAgICA8L2g1PgorPGRpdiBjbGFzcz0iaW5mb3JtYWx0YWJsZSI+PHRhYmxlIGNsYXNzPSJ0YWJsZSI+Cis8Y29sZ3JvdXA+Cis8Y29sPgorPGNvbD4KKzwvY29sZ3JvdXA+Cis8dGhlYWQ+PHRyPgorPHRoPgorICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbgorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgPC90aD4KKzx0aD4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgIFNlbWFudGljcworICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgPC90aD4KKzwvdHI+PC90aGVhZD4KKzx0Ym9keT4KKzx0cj4KKzx0ZD4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkZBPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPjwvY29kZT4KKyAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgIDwvdGQ+Cis8dGQ+CisgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICBjcmVhdGVzIGFuIGFkYXB0ZXIsIGluaXRpYWxpemVzIHRoZSB0YXJnZXQgZnVuY3Rpb24gd2l0aCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mPC9zcGFuPjwvY29kZT4uCisgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgICA8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkZBPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oKTwvc3Bhbj48L2NvZGU+CisgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgICA8L3RkPgorPHRkPgorICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgY3JlYXRlcyBhbiBhZGFwdGVyLCBhdHRlbXB0cyB0byB1c2UgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Rjwvc3Bhbj48L2NvZGU+J3MKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQgY29uc3RydWN0b3IuCisgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgICA8L3RkPgorPC90cj4KKzx0cj4KKzx0ZD4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZhPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hMDwvc3Bhbj48L2NvZGU+Li4uPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YU48L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+PC9jb2RlPgorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgPC90ZD4KKzx0ZD4KKyAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgIGNhbGxzIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmY8L3NwYW4+PC9jb2RlPiB3aXRoIHdpdGgKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGFyZ3VtZW50cyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hMDwvc3Bhbj48L2NvZGU+Li4uPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YU48L3NwYW4+PC9jb2RlPi4gSWYgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YUk8L3NwYW4+PC9jb2RlPgorICAgICAgICAgICAgICAgICAgaXMgYSByZWZlcmVuY2Ugd3JhcHBlciBpdCBpcyB1bndyYXBwZWQuCisgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgICA8L3RkPgorPC90cj4KKzwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPGg1PgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5saWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXIuaDQiPjwvYT4KKyAgICAgICAgPHNwYW4gY2xhc3M9InBocmFzZSI+PGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5saWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXIubGltaXRzIj48L2E+PC9zcGFuPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UubGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyLmxpbWl0cyI+TGltaXRzPC9hPgorICAgICAgPC9oNT4KKzxwPgorICAgICAgICBUaGUgbWFjcm8gQk9PU1RfRlVOQ1RJT05BTF9MSUdIVFdFSUdIVF9GT1JXQVJEX0FEQVBURVJfTUFYX0FSSVRZIGNhbiBiZSBkZWZpbmVkCisgICAgICAgIHRvIHNldCB0aGUgbWF4aW11bSBjYWxsIGFyaXR5LiBJdCBkZWZhdWx0cyB0byAxMC4KKyAgICAgIDwvcD4KKzxoNT4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UubGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyLmg1Ij48L2E+CisgICAgICAgIDxzcGFuIGNsYXNzPSJwaHJhc2UiPjxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2UubGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyLmNvbXBsZXhpdHkiPjwvYT48L3NwYW4+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLnJlZmVyZW5jZS5saWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXIuY29tcGxleGl0eSI+Q29tcGxleGl0eTwvYT4KKyAgICAgIDwvaDU+Cis8cD4KKyAgICAgICAgUHJlcHJvY2Vzc2luZyB0aW1lOiBPKE4pLCB3aGVyZSBOIGlzIHRoZSBhcml0eSBsaW1pdC4gQ29tcGlsZSB0aW1lOiBPKE4pLAorICAgICAgICB3aGVyZSBOIGlzIHRoZSBlZmZlY3RpdmUgYXJpdHkgb2YgYSBjYWxsLiBSdW4gdGltZTogTygwKSBpZiB0aGUgY29tcGlsZXIKKyAgICAgICAgaW5saW5lcywgTygxKSBvdGhlcndpc2UuCisgICAgICA8L3A+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9mb3J3YXJkLmFja25vd2xlZGdlbWVudHMiPjwvYT48YSBjbGFzcz0ibGluayIgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQuYWNrbm93bGVkZ2VtZW50cyIgdGl0bGU9IkFja25vd2xlZGdlbWVudHMiPkFja25vd2xlZGdlbWVudHM8L2E+Cis8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgorPHA+CisgICAgICBBcyB0aGVzZSB1dGlsaXRpZXMgYXJlIGZhY3RvcmVkIG91dCBvZiB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9mdXNpb24vZG9jL2h0bWwvaW5kZXguaHRtbCIgdGFyZ2V0PSJfdG9wIj5Cb29zdC5GdXNpb248L2E+CisgICAgICBmdW5jdGlvbmFsIG1vZHVsZSwgSSB3YW50IHRvIHRoYW5rIERhbiBNYXJzZGVuIGFuZCBKb2VsIGRlIEd1em1hbiBmb3IgbGV0dGluZworICAgICAgbWUgcGFydGljaXBhdGUgaW4gdGhlIGRldmVsb3BtZW50IG9mIHRoYXQgZ3JlYXQgbGlicmFyeSBpbiB0aGUgZmlyc3QgcGxhY2UuCisgICAgPC9wPgorPHA+CisgICAgICBGdXJ0aGVyLCBJIHdhbnQgdG8gY3JlZGl0IHRoZSBhdXRob3JzIG9mIHRoZSByZWZlcmVuY2VzIGJlbG93LCBmb3IgdGhlaXIgaW4tZGVwdGgKKyAgICAgIGludmVzdGlnYXRpb24gb2YgdGhlIHByb2JsZW0gYW5kIHRoZSBzb2x1dGlvbiBpbXBsZW1lbnRlZCBoZXJlLgorICAgIDwvcD4KKzxwPgorICAgICAgTGFzdCBidXQgbm90IGxlYXN0IEkgd2FudCB0byB0aGFuayBWZXNhIEthcm5vdmVuIGFuZCBQYXVsIE1lbnNvbmlkZXMgZm9yIHRoZQorICAgICAgQm9vc3QgUHJlcHJvY2Vzc29yIGxpYnJhcnkuIFdpdGhvdXQgaXQsIEkgd291bGQgaGF2ZSBlbmRlZCB1cCB3aXRoIGFuIGV4dGVybmFsCisgICAgICBjb2RlIGdlbmVyYXRvciBmb3IgdGhpcyBvbmUuCisgICAgPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX2ZvcndhcmQucmVmZXJlbmNlcyI+PC9hPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJpbmRleC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfZm9yd2FyZC5yZWZlcmVuY2VzIiB0aXRsZT0iUmVmZXJlbmNlcyI+UmVmZXJlbmNlczwvYT4KKzwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Cis8ZGl2IGNsYXNzPSJvcmRlcmVkbGlzdCI+PG9sIGNsYXNzPSJvcmRlcmVkbGlzdCIgdHlwZT0iMSI+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj4KKyAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDAyL24xMzg1Lmh0bSIgdGFyZ2V0PSJfdG9wIj5UaGUKKyAgICAgICAgICBGb3J3YXJkaW5nIFByb2JsZW08L2E+LCBQZXRlciBEaW1vdiwgSG93YXJkIEUuIEhpbm5hbnQsIERhdmlkIEFicmFoYW1zLAorICAgICAgICAgIDIwMDIKKyAgICAgICAgPC9saT4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPgorICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvdXRpbGl0eS91dGlsaXR5Lmh0bSNyZXN1bHRfb2YiIHRhcmdldD0iX3RvcCI+Qm9vc3QuUmVzdWx0T2Y8L2E+LAorICAgICAgICAgIERvdWdsYXMgR3JlZ29yLCAyMDA0CisgICAgICAgIDwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj4KKyAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9kb2MvaHRtbC9yZWYuaHRtbCIgdGFyZ2V0PSJfdG9wIj5Cb29zdC5SZWY8L2E+LAorICAgICAgICAgIEphYWtrbyBKYXJ2aSwgUGV0ZXIgRGltb3YsIERvdWdsYXMgR3JlZ29yLCBEYXZpZCBBYnJhaGFtcywgMTk5OS0yMDAyCisgICAgICAgIDwvbGk+Cis8L29sPjwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzx0YWJsZSB4bWxuczpyZXY9Imh0dHA6Ly93d3cuY3MucnBpLmVkdS9+Z3JlZ29kL2Jvb3N0L3Rvb2xzL2RvYy9yZXZpc2lvbiIgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCBhbGlnbj0ibGVmdCI+PHA+PHNtYWxsPkxhc3QgcmV2aXNlZDogTm92ZW1iZXIgMDEsIDIwMDggYXQgMTk6NTg6NTAgR01UPC9zbWFsbD48L3A+PC90ZD4KKzx0ZCBhbGlnbj0icmlnaHQiPjxkaXYgY2xhc3M9ImNvcHlyaWdodC1mb290ZXIiPjwvZGl2PjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8aHI+Cis8ZGl2IGNsYXNzPSJzcGlyaXQtbmF2Ij48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL2RvYy9odG1sL3N0YW5kYWxvbmVfSFRNTC5tYW5pZmVzdCBiL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL2RvYy9odG1sL3N0YW5kYWxvbmVfSFRNTC5tYW5pZmVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2FmNzE2Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2ZvcndhcmQvZG9jL2h0bWwvc3RhbmRhbG9uZV9IVE1MLm1hbmlmZXN0CkBAIC0wLDAgKzEgQEAKK2luZGV4Lmh0bWwKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL2luZGV4Lmh0bWwgYi9saWJzL2Z1bmN0aW9uYWwvZm9yd2FyZC9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MDMwMjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvZm9yd2FyZC9pbmRleC5odG1sCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+CisgIDxoZWFkPgorICAgIDxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRlbnQ9IjA7IFVSTD1kb2MvaHRtbC9pbmRleC5odG1sIj4KKyAgPC9oZWFkPgorICA8Ym9keT4KKyAgICBBdXRvbWF0aWMgcmVkaXJlY3Rpb24gZmFpbGVkLCBjbGljayB0aGlzIAorICAgIDxhIGhyZWY9ImRvYy9odG1sL2luZGV4Lmh0bWwiPmxpbms8L2E+ICZuYnNwOzxocj4KKyAgICA8cD6pIENvcHlyaWdodCBUb2JpYXMgU2Nod2luZ2VyLCAyMDA5PC9wPgorICAgIDxwPkRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSAKKyAgICBhY2NvbXBhbnlpbmcgZmlsZSA8YSBocmVmPSIuLi8uLi8uLi9MSUNFTlNFXzFfMC50eHQiPgorICAgIExJQ0VOU0VfMV8wLnR4dDwvYT4gb3IgY29weSBhdAorICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCI+d3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KTwvcD4KKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2ZvcndhcmQvdGVzdC9KYW1maWxlIGIvbGlicy9mdW5jdGlvbmFsL2ZvcndhcmQvdGVzdC9KYW1maWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNjk0NTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvZm9yd2FyZC90ZXN0L0phbWZpbGUKQEAgLTAsMCArMSwxNyBAQAorCisjIChDKSBDb3B5cmlnaHQgVG9iaWFzIFNjaHdpbmdlcgorIworIyBVc2UgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIGJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsCisjIFZlcnNpb24gMS4wLiAoU2VlIGh0dHA6L1wvd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpLgorCitpbXBvcnQgdGVzdGluZyA7CisKK3Byb2plY3QgZm9yd2FyZC10ZXN0cworICAgIDsKKwordGVzdC1zdWl0ZSBmdW5jdGlvbmFsL2ZvcndhcmQKKyAgICA6CisgICAgICBbIHJ1biBmb3J3YXJkX2FkYXB0ZXIuY3BwIF0KKyAgICAgIFsgcnVuIGxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlci5jcHAgXQorICAgIDsKKwpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2ZvcndhcmQvdGVzdC9mb3J3YXJkX2FkYXB0ZXIuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2ZvcndhcmQvdGVzdC9mb3J3YXJkX2FkYXB0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5Y2M3OTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvZm9yd2FyZC90ZXN0L2ZvcndhcmRfYWRhcHRlci5jcHAKQEAgLTAsMCArMSwxMjggQEAKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBDb3B5cmlnaHQgKGMpIDIwMDcgVG9iaWFzIFNjaHdpbmdlcgorICAKKyAgICBVc2UgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gYXJlIHN1YmplY3QgdG8gdGhlIEJvb3N0IFNvZnR3YXJlIAorICAgIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0CisgICAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KS4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNpbmNsdWRlIDxib29zdC9jb25maWcuaHBwPgorCisjaWZkZWYgQk9PU1RfTVNWQworIyAgIHByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQyNDQpIC8vIG5vIGNvbnZlcnNpb24gd2FybmluZ3MsIHBsZWFzZQorI2VuZGlmCisKKyNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+CisjaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9mb3J3YXJkX2FkYXB0ZXIuaHBwPgorCisjaW5jbHVkZSA8Ym9vc3QvdHlwZV90cmFpdHMvaXNfc2FtZS5ocHA+CisKKyNpbmNsdWRlIDxib29zdC9ibGFuay5ocHA+CisjaW5jbHVkZSA8Ym9vc3Qvbm9uY29weWFibGUuaHBwPgorCisjaW5jbHVkZSA8bWVtb3J5PgorCit0ZW1wbGF0ZSA8Y2xhc3MgQmFzZSA9IG5kbmJvb3N0OjpibGFuaz4KK2NsYXNzIHRlc3RfZnVuYyA6IHB1YmxpYyBCYXNlIAoreworICAgIGludCB2YWw7CitwdWJsaWM6CisgICAgdGVzdF9mdW5jKGludCB2KSA6IHZhbCh2KSB7IH0KKworICAgIHRlbXBsYXRlPGNsYXNzIEI+CisgICAgdGVzdF9mdW5jKHRlc3RfZnVuYzxCPiBjb25zdCAmIHRoYXQpCisgICAgICA6IHZhbCh0aGF0LnZhbCkKKyAgICB7IH0KKworICAgIHRlbXBsYXRlPGNsYXNzIEI+IGZyaWVuZCBjbGFzcyB0ZXN0X2Z1bmM7CisKKyAgICBpbnQgb3BlcmF0b3IoKShpbnQgJiBsLCBpbnQgY29uc3QgJiByKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGw9cit2YWw7CisgICAgfQorICAgIGxvbmcgb3BlcmF0b3IoKShpbnQgJiBsLCBpbnQgY29uc3QgJiByKSAKKyAgICB7CisgICAgICAgIHJldHVybiAtKGw9cit2YWwpOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBTaWc+CisgICAgc3RydWN0IHJlc3VsdAorICAgIHsKKyAgICAgICAgdHlwZWRlZiB2b2lkIHR5cGU7CisgICAgfTsKKworICAgIC8vIGVuc3VyZSByZXN1bHRfb2YgYXJndW1lbnQgdHlwZXMgYXJlIHdoYXQncyBleHBlY3RlZAorICAgIC8vIG5vdGU6IHRoaXMgaXMgKm5vdCogaG93IGNsaWVudCBjb2RlIHNob3VsZCBsb29rIGxpa2UgCisgICAgdGVtcGxhdGUgPGNsYXNzIFNlbGY+CisgICAgc3RydWN0IHJlc3VsdDwgU2VsZiBjb25zdChpbnQmLGludCBjb25zdCYpID4geyB0eXBlZGVmIGludCB0eXBlOyB9OworCisgICAgdGVtcGxhdGUgPGNsYXNzIFNlbGY+CisgICAgc3RydWN0IHJlc3VsdDwgU2VsZihpbnQmLGludCBjb25zdCYpID4geyB0eXBlZGVmIGxvbmcgdHlwZTsgfTsKKworICAgIHRlbXBsYXRlIDxjbGFzcyBTZWxmPgorICAgIHN0cnVjdCByZXN1bHQ8IFNlbGYoaW50JixpbnQmKSA+IHsgdHlwZWRlZiBjaGFyIHR5cGU7IH07Cit9OworCitlbnVtIHsgaW50XywgbG9uZ18sIGNoYXJfIH07CisKK2ludCB0eXBlX29mKGludCkgIHsgcmV0dXJuIGludF87IH0KK2ludCB0eXBlX29mKGxvbmcpIHsgcmV0dXJuIGxvbmdfOyB9CitpbnQgdHlwZV9vZihjaGFyKSB7IHJldHVybiBjaGFyXzsgfQorCitpbnQgbWFpbigpCit7CisgICAgeworICAgICAgICB1c2luZyBuZG5ib29zdDo6aXNfc2FtZTsKKyAgICAgICAgdXNpbmcgbmRuYm9vc3Q6OnJlc3VsdF9vZjsKKyAgICAgICAgdHlwZWRlZiBuZG5ib29zdDo6Zm9yd2FyZF9hZGFwdGVyPCB0ZXN0X2Z1bmM8PiA+IGY7CisKKyAgICAgICAgLy8gbHZhbHVlLHJ2YWx1ZQorICAgICAgICBCT09TVF9URVNUKCggaXNfc2FtZTwKKyAgICAgICAgICAgIHJlc3VsdF9vZjwgZihpbnQmLCBpbnQpID46OnR5cGUsIGxvbmcgPjo6dmFsdWUgKSk7CisgICAgICAgIEJPT1NUX1RFU1QoKCBpc19zYW1lPAorICAgICAgICAgICAgcmVzdWx0X29mPCBmIGNvbnN0IChpbnQmLCBpbnQpID46OnR5cGUsIGludCA+Ojp2YWx1ZSApKTsKKyAgICAgICAgLy8gbHZhbHVlLGNvbnN0IGx2YWx1ZQorICAgICAgICBCT09TVF9URVNUKCggaXNfc2FtZTwKKyAgICAgICAgICAgIHJlc3VsdF9vZjwgZihpbnQmLCBpbnQgY29uc3QgJikgPjo6dHlwZSwgbG9uZyA+Ojp2YWx1ZSApKTsKKyAgICAgICAgQk9PU1RfVEVTVCgoIGlzX3NhbWU8CisgICAgICAgICAgICByZXN1bHRfb2Y8IGYgY29uc3QgKGludCYsIGludCBjb25zdCAmKSA+Ojp0eXBlLCBpbnQgPjo6dmFsdWUgKSk7CisgICAgICAgIC8vIGx2YWx1ZSxsdmFsdWUKKyAgICAgICAgQk9PU1RfVEVTVCgoIGlzX3NhbWU8CisgICAgICAgICAgICByZXN1bHRfb2Y8IGYoaW50JiwgaW50JikgPjo6dHlwZSwgY2hhciA+Ojp2YWx1ZSApKTsKKyAgICAgICAgQk9PU1RfVEVTVCgoIGlzX3NhbWU8CisgICAgICAgICAgICByZXN1bHRfb2Y8IGYgY29uc3QgKGludCYsIGludCYpID46OnR5cGUsIGNoYXIgPjo6dmFsdWUgKSk7CisgICAgfQorCisgICAgeworICAgICAgICB1c2luZyBuZG5ib29zdDo6bm9uY29weWFibGU7CisgICAgICAgIHVzaW5nIG5kbmJvb3N0Ojpmb3J3YXJkX2FkYXB0ZXI7CisKKyAgICAgICAgaW50IHggPSAwOworICAgICAgICB0ZXN0X2Z1bmM8bm9uY29weWFibGU+IGYoNyk7CisgICAgICAgIGZvcndhcmRfYWRhcHRlcjwgdGVzdF9mdW5jPD4gPiBmdW5jKGYpOworICAgICAgICBmb3J3YXJkX2FkYXB0ZXI8IHRlc3RfZnVuYzxub25jb3B5YWJsZT4gJiA+IGZ1bmNfcmVmKGYpOworICAgICAgICBmb3J3YXJkX2FkYXB0ZXI8IHRlc3RfZnVuYzxub25jb3B5YWJsZT4gJiA+IGNvbnN0IGZ1bmNfcmVmX2MoZik7CisgICAgICAgIGZvcndhcmRfYWRhcHRlcjwgdGVzdF9mdW5jPD4gY29uc3QgPiBmdW5jX2MoZik7CisgICAgICAgIGZvcndhcmRfYWRhcHRlcjwgdGVzdF9mdW5jPD4gPiBjb25zdCBmdW5jX2MyKGYpOworICAgICAgICBmb3J3YXJkX2FkYXB0ZXI8IHRlc3RfZnVuYzxub25jb3B5YWJsZT4gY29uc3QgJiA+IGZ1bmNfY19yZWYoZik7CisKKyAgICAgICAgQk9PU1RfVEVTVCggdHlwZV9vZiggZnVuYyh4LDEpICkgPT0gbG9uZ18gKTsKKyAgICAgICAgQk9PU1RfVEVTVCggdHlwZV9vZiggZnVuY19yZWYoeCwxKSApID09IGxvbmdfICk7CisgICAgICAgIEJPT1NUX1RFU1QoIHR5cGVfb2YoIGZ1bmNfcmVmX2MoeCwxKSApID09IGxvbmdfICk7CisgICAgICAgIEJPT1NUX1RFU1QoIHR5cGVfb2YoIGZ1bmNfYyh4LDEpICkgPT0gaW50XyApOworICAgICAgICBCT09TVF9URVNUKCB0eXBlX29mKCBmdW5jX2MyKHgsMSkgKSA9PSBpbnRfICk7CisgICAgICAgIEJPT1NUX1RFU1QoIHR5cGVfb2YoIGZ1bmNfY19yZWYoeCwxKSApID09IGludF8gKTsKKyAgICAgICAgQk9PU1RfVEVTVCggdHlwZV9vZiggZnVuYyh4LHgpICkgPT0gY2hhcl8gKTsKKworICAgICAgICBCT09TVF9URVNUKCBmdW5jKHgsMSkgPT0gLTggKTsKKyAgICAgICAgQk9PU1RfVEVTVCggZnVuY19yZWYoeCwxKSA9PSAtOCApOworICAgICAgICBCT09TVF9URVNUKCBmdW5jX3JlZl9jKHgsMSkgPT0gLTggKTsKKyAgICAgICAgQk9PU1RfVEVTVCggZnVuY19jKHgsMSkgPT0gOCApOworICAgICAgICBCT09TVF9URVNUKCBmdW5jX2MyKHgsMSkgPT0gOCApOworICAgICAgICBCT09TVF9URVNUKCBmdW5jX2NfcmVmKHgsMSkgPT0gOCApOworICAgIH0KKworICAgIHJldHVybiBuZG5ib29zdDo6cmVwb3J0X2Vycm9ycygpOworfQorCisKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL3Rlc3QvbGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyLmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9mb3J3YXJkL3Rlc3QvbGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWUyMDdlCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2ZvcndhcmQvdGVzdC9saWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXIuY3BwCkBAIC0wLDAgKzEsMTI4IEBACisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgQ29weXJpZ2h0IChjKSAyMDA3IFRvYmlhcyBTY2h3aW5nZXIKKyAgCisgICAgVXNlIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSAKKyAgICBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdAorICAgIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KKworI2lmZGVmIEJPT1NUX01TVkMKKyMgICBwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MjQ0KSAvLyBubyBjb252ZXJzaW9uIHdhcm5pbmdzLCBwbGVhc2UKKyNlbmRpZgorCisjaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgorI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvbGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyLmhwcD4KKworI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX3NhbWUuaHBwPgorCisjaW5jbHVkZSA8Ym9vc3QvYmxhbmsuaHBwPgorI2luY2x1ZGUgPGJvb3N0L25vbmNvcHlhYmxlLmhwcD4KKworI2luY2x1ZGUgPG1lbW9yeT4KKwordGVtcGxhdGUgPGNsYXNzIEJhc2UgPSBuZG5ib29zdDo6Ymxhbms+CitjbGFzcyB0ZXN0X2Z1bmMgOiBwdWJsaWMgQmFzZSAKK3sKKyAgICBpbnQgdmFsOworcHVibGljOgorICAgIHRlc3RfZnVuYyhpbnQgdikgOiB2YWwodikgeyB9CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBCPgorICAgIHRlc3RfZnVuYyh0ZXN0X2Z1bmM8Qj4gY29uc3QgJiB0aGF0KQorICAgICAgOiB2YWwodGhhdC52YWwpCisgICAgeyB9CisKKyAgICB0ZW1wbGF0ZTxjbGFzcyBCPiBmcmllbmQgY2xhc3MgdGVzdF9mdW5jOworCisgICAgaW50IG9wZXJhdG9yKCkoaW50ICYgbCwgaW50IGNvbnN0ICYgcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBsPXIrdmFsOworICAgIH0KKyAgICBsb25nIG9wZXJhdG9yKCkoaW50ICYgbCwgaW50IGNvbnN0ICYgcikgCisgICAgeworICAgICAgICByZXR1cm4gLShsPXIrdmFsKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU2lnPgorICAgIHN0cnVjdCByZXN1bHQKKyAgICB7CisgICAgICAgIHR5cGVkZWYgdm9pZCB0eXBlOworICAgIH07CisKKyAgICAvLyBlbnN1cmUgcmVzdWx0X29mIGFyZ3VtZW50IHR5cGVzIGFyZSB3aGF0J3MgZXhwZWN0ZWQKKyAgICAvLyBub3RlOiB0aGlzIGlzICpub3QqIGhvdyBjbGllbnQgY29kZSBzaG91bGQgbG9vayBsaWtlIAorICAgIHRlbXBsYXRlIDxjbGFzcyBTZWxmPgorICAgIHN0cnVjdCByZXN1bHQ8IFNlbGYgY29uc3QoaW50JixpbnQgY29uc3QmKSA+IHsgdHlwZWRlZiBpbnQgdHlwZTsgfTsKKworICAgIHRlbXBsYXRlIDxjbGFzcyBTZWxmPgorICAgIHN0cnVjdCByZXN1bHQ8IFNlbGYoaW50JixpbnQgY29uc3QmKSA+IHsgdHlwZWRlZiBsb25nIHR5cGU7IH07CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgU2VsZj4KKyAgICBzdHJ1Y3QgcmVzdWx0PCBTZWxmKGludCYsaW50JikgPiB7IHR5cGVkZWYgY2hhciB0eXBlOyB9OworfTsKKworZW51bSB7IGludF8sIGxvbmdfLCBjaGFyXyB9OworCitpbnQgdHlwZV9vZihpbnQpICB7IHJldHVybiBpbnRfOyB9CitpbnQgdHlwZV9vZihsb25nKSB7IHJldHVybiBsb25nXzsgfQoraW50IHR5cGVfb2YoY2hhcikgeyByZXR1cm4gY2hhcl87IH0KKworaW50IG1haW4oKQoreworICAgIHsKKyAgICAgICAgdXNpbmcgbmRuYm9vc3Q6OmlzX3NhbWU7CisgICAgICAgIHVzaW5nIG5kbmJvb3N0OjpyZXN1bHRfb2Y7CisgICAgICAgIHR5cGVkZWYgbmRuYm9vc3Q6OmxpZ2h0d2VpZ2h0X2ZvcndhcmRfYWRhcHRlcjwgdGVzdF9mdW5jPD4gPiBmOworICAgICAgICB0eXBlZGVmIG5kbmJvb3N0OjpyZWZlcmVuY2Vfd3JhcHBlcjxpbnQ+IHJlZjsKKyAgICAgICAgdHlwZWRlZiBuZG5ib29zdDo6cmVmZXJlbmNlX3dyYXBwZXI8aW50IGNvbnN0PiBjcmVmOworCisgICAgICAgIC8vIGx2YWx1ZSxydmFsdWUKKyAgICAgICAgQk9PU1RfVEVTVCgoIGlzX3NhbWU8CisgICAgICAgICAgICByZXN1bHRfb2Y8IGYocmVmLCBpbnQpID46OnR5cGUsIGxvbmcgPjo6dmFsdWUgKSk7CisgICAgICAgIEJPT1NUX1RFU1QoKCBpc19zYW1lPAorICAgICAgICAgICAgcmVzdWx0X29mPCBmIGNvbnN0IChyZWYsIGludCkgPjo6dHlwZSwgaW50ID46OnZhbHVlICkpOworICAgICAgICAvLyBsdmFsdWUsY29uc3QgbHZhbHVlCisgICAgICAgIEJPT1NUX1RFU1QoKCBpc19zYW1lPAorICAgICAgICAgICAgcmVzdWx0X29mPCBmKHJlZiwgY3JlZikgPjo6dHlwZSwgbG9uZyA+Ojp2YWx1ZSApKTsKKyAgICAgICAgQk9PU1RfVEVTVCgoIGlzX3NhbWU8CisgICAgICAgICAgICByZXN1bHRfb2Y8IGYgY29uc3QgKHJlZiwgY3JlZikgPjo6dHlwZSwgaW50ID46OnZhbHVlICkpOworICAgICAgICAvLyBsdmFsdWUsbHZhbHVlCisgICAgICAgIEJPT1NUX1RFU1QoKCBpc19zYW1lPAorICAgICAgICAgICAgcmVzdWx0X29mPCBmKHJlZiwgcmVmKSA+Ojp0eXBlLCBjaGFyID46OnZhbHVlICkpOworICAgICAgICBCT09TVF9URVNUKCggaXNfc2FtZTwKKyAgICAgICAgICAgIHJlc3VsdF9vZjwgZiBjb25zdCAocmVmLCByZWYpID46OnR5cGUsIGNoYXIgPjo6dmFsdWUgKSk7CisgICAgfQorICAgIHsKKyAgICAgICAgdXNpbmcgbmRuYm9vc3Q6Om5vbmNvcHlhYmxlOworICAgICAgICB1c2luZyBuZG5ib29zdDo6bGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyOworCisgICAgICAgIGludCB2ID0gMDsgbmRuYm9vc3Q6OnJlZmVyZW5jZV93cmFwcGVyPGludD4geCh2KTsKKyAgICAgICAgdGVzdF9mdW5jPG5vbmNvcHlhYmxlPiBmKDcpOworICAgICAgICBsaWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXI8IHRlc3RfZnVuYzw+ID4gZnVuYyhmKTsKKyAgICAgICAgbGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyPCB0ZXN0X2Z1bmM8bm9uY29weWFibGU+ICYgPiBmdW5jX3JlZihmKTsKKyAgICAgICAgbGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyPCB0ZXN0X2Z1bmM8bm9uY29weWFibGU+ICYgPiBjb25zdCBmdW5jX3JlZl9jKGYpOworICAgICAgICBsaWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXI8IHRlc3RfZnVuYzw+IGNvbnN0ID4gZnVuY19jKGYpOworICAgICAgICBsaWdodHdlaWdodF9mb3J3YXJkX2FkYXB0ZXI8IHRlc3RfZnVuYzw+ID4gY29uc3QgZnVuY19jMihmKTsKKyAgICAgICAgbGlnaHR3ZWlnaHRfZm9yd2FyZF9hZGFwdGVyPCB0ZXN0X2Z1bmM8bm9uY29weWFibGU+IGNvbnN0ICYgPiBmdW5jX2NfcmVmKGYpOworCisgICAgICAgIEJPT1NUX1RFU1QoIHR5cGVfb2YoIGZ1bmMoeCwxKSApID09IGxvbmdfICk7CisgICAgICAgIEJPT1NUX1RFU1QoIHR5cGVfb2YoIGZ1bmNfcmVmKHgsMSkgKSA9PSBsb25nXyApOworICAgICAgICBCT09TVF9URVNUKCB0eXBlX29mKCBmdW5jX3JlZl9jKHgsMSkgKSA9PSBsb25nXyApOworICAgICAgICBCT09TVF9URVNUKCB0eXBlX29mKCBmdW5jX2MoeCwxKSApID09IGludF8gKTsKKyAgICAgICAgQk9PU1RfVEVTVCggdHlwZV9vZiggZnVuY19jMih4LDEpICkgPT0gaW50XyApOworICAgICAgICBCT09TVF9URVNUKCB0eXBlX29mKCBmdW5jX2NfcmVmKHgsMSkgKSA9PSBpbnRfICk7CisgICAgICAgIEJPT1NUX1RFU1QoIHR5cGVfb2YoIGZ1bmMoeCx4KSApID09IGNoYXJfICk7CisKKyAgICAgICAgQk9PU1RfVEVTVCggZnVuYyh4LDEpID09IC04ICk7CisgICAgICAgIEJPT1NUX1RFU1QoIGZ1bmNfcmVmKHgsMSkgPT0gLTggKTsKKyAgICAgICAgQk9PU1RfVEVTVCggZnVuY19yZWZfYyh4LDEpID09IC04ICk7CisgICAgICAgIEJPT1NUX1RFU1QoIGZ1bmNfYyh4LDEpID09IDggKTsKKyAgICAgICAgQk9PU1RfVEVTVCggZnVuY19jMih4LDEpID09IDggKTsKKyAgICAgICAgQk9PU1RfVEVTVCggZnVuY19jX3JlZih4LDEpID09IDggKTsKKyAgICB9CisKKyAgICByZXR1cm4gbmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKK30KKwpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2Z1bmN0aW9uX3RyYWl0cy5odG1sIGIvbGlicy9mdW5jdGlvbmFsL2Z1bmN0aW9uX3RyYWl0cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwY2U1MTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvZnVuY3Rpb25fdHJhaXRzLmh0bWwKQEAgLTAsMCArMSwyMzMgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorCis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LUxhbmd1YWdlIiBjb250ZW50PSJlbi11cyI+CisgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIj4KKworICA8dGl0bGU+Qm9vc3QgRnVuY3Rpb24gT2JqZWN0IEFkYXB0ZXIgTGlicmFyeTwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5IGJnY29sb3I9IiNGRkZGRkYiIHRleHQ9IiMwMDAwMDAiPgorICA8dGFibGUgYm9yZGVyPSIxIiBiZ2NvbG9yPSIjMDA3RjdGIiBjZWxscGFkZGluZz0iMiIgc3VtbWFyeT0iIj4KKyAgICA8dHI+CisgICAgICA8dGQgYmdjb2xvcj0iI0ZGRkZGRiI+PGltZyBzcmM9Ii4uLy4uL2Jvb3N0LnBuZyIgYWx0PQorICAgICAgImJvb3N0LnBuZyAoNjg5NyBieXRlcykiIHdpZHRoPSIyNzciIGhlaWdodD0iODYiPjwvdGQ+CisKKyAgICAgIDx0ZD48YSBocmVmPSIuLi8uLi9pbmRleC5odG0iPjxmb250IGZhY2U9IkFyaWFsIiBjb2xvcj0KKyAgICAgICIjRkZGRkZGIj48YmlnPkhvbWU8L2JpZz48L2ZvbnQ+PC9hPjwvdGQ+CisKKyAgICAgIDx0ZD48YSBocmVmPSIuLi9saWJyYXJpZXMuaHRtIj48Zm9udCBmYWNlPSJBcmlhbCIgY29sb3I9CisgICAgICAiI0ZGRkZGRiI+PGJpZz5MaWJyYXJpZXM8L2JpZz48L2ZvbnQ+PC9hPjwvdGQ+CisKKyAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9wZW9wbGUvcGVvcGxlLmh0bSI+PGZvbnQgZmFjZT0iQXJpYWwiIGNvbG9yPQorICAgICAgIiNGRkZGRkYiPjxiaWc+UGVvcGxlPC9iaWc+PC9mb250PjwvYT48L3RkPgorCisgICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvbW9yZS9mYXEuaHRtIj48Zm9udCBmYWNlPSJBcmlhbCIgY29sb3I9CisgICAgICAiI0ZGRkZGRiI+PGJpZz5GQVE8L2JpZz48L2ZvbnQ+PC9hPjwvdGQ+CisKKyAgICAgIDx0ZD48YSBocmVmPSIuLi8uLi9tb3JlL2luZGV4Lmh0bSI+PGZvbnQgZmFjZT0iQXJpYWwiIGNvbG9yPQorICAgICAgIiNGRkZGRkYiPjxiaWc+TW9yZTwvYmlnPjwvZm9udD48L2E+PC90ZD4KKyAgICA8L3RyPgorICA8L3RhYmxlPgorCisgIDxoMT5GdW5jdGlvbiBPYmplY3QgVHJhaXRzPC9oMT4KKworICA8cD5UaGUgaGVhZGVyIDxhIGhyZWY9Ii4uLy4uL2Jvb3N0L2Z1bmN0aW9uYWwuaHBwIj5mdW5jdGlvbmFsLmhwcDwvYT4KKyAgcHJvdmlkZXMgdHdvIHRyYWl0cyBjbGFzcyB0ZW1wbGF0ZXMgZm9yIGZ1bmN0aW9ucyBhbmQgZnVuY3Rpb24gb2JqZWN0czo8L3A+CisKKyAgPHRhYmxlIGJvcmRlcj0iMSIgc3VtbWFyeT0iIj4KKyAgICA8dHI+CisgICAgICA8dGg+VHlwZTwvdGg+CisKKyAgICAgIDx0aD5Db250ZW50czwvdGg+CisKKyAgICAgIDx0aD5EZXNjcmlwdGlvbjwvdGg+CisgICAgPC90cj4KKworICAgIDx0cj4KKyAgICAgIDx0ZCB2YWxpZ249InRvcCIgcm93c3Bhbj0iNCI+CisgICAgICA8dHQ+dGVtcGxhdGUmbmJzcDsmbHQ7dHlwZW5hbWUmbmJzcDtUJmd0Ozxicj4KKyAgICAgIHN0cnVjdCZuYnNwO3VuYXJ5X3RyYWl0czwvdHQ+PC90ZD4KKworICAgICAgPHRkIHZhbGlnbj0idG9wIj48dHQ+ZnVuY3Rpb25fdHlwZTwvdHQ+PC90ZD4KKworICAgICAgPHRkIHZhbGlnbj0idG9wIj5UaGUgdHlwZSBvZiB0aGUgZnVuY3Rpb24gb3IgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZgorICAgICAgKGkuZS4sIDx0dD5UPC90dD4pLjwvdGQ+CisgICAgPC90cj4KKworICAgIDx0cj4KKyAgICAgIDx0ZCB2YWxpZ249InRvcCI+PHR0PnBhcmFtX3R5cGU8L3R0PjwvdGQ+CisKKyAgICAgIDx0ZCB2YWxpZ249InRvcCI+VGhlIHR5cGUgdGhhdCBzaG91bGQgYmUgdXNlZCB0byBwYXNzIHRoZSBmdW5jdGlvbiBvcgorICAgICAgZnVuY3Rpb24gb2JqZWN0IGFzIGEgcGFyYW1ldGVyLjwvdGQ+CisgICAgPC90cj4KKworICAgIDx0cj4KKyAgICAgIDx0ZCB2YWxpZ249InRvcCI+PHR0PnJlc3VsdF90eXBlPC90dD48L3RkPgorCisgICAgICA8dGQgdmFsaWduPSJ0b3AiPlRoZSB0eXBlIHJldHVybmVkIGJ5IHRoZSBmdW5jdGlvbiBvciBmdW5jdGlvbgorICAgICAgb2JqZWN0LjwvdGQ+CisgICAgPC90cj4KKworICAgIDx0cj4KKyAgICAgIDx0ZCB2YWxpZ249InRvcCI+PHR0PmFyZ3VtZW50X3R5cGU8L3R0PjwvdGQ+CisKKyAgICAgIDx0ZCB2YWxpZ249InRvcCI+VGhlIHR5cGUgb2YgdGhlIGFyZ3VtZW50IHRvIHRoZSBmdW5jdGlvbiBvciBmdW5jdGlvbgorICAgICAgb2JqZWN0LjwvdGQ+CisgICAgPC90cj4KKworICAgIDx0cj4KKyAgICAgIDx0ZCB2YWxpZ249InRvcCIgcm93c3Bhbj0iNSI+CisgICAgICA8dHQ+dGVtcGxhdGUmbmJzcDsmbHQ7dHlwZW5hbWUmbmJzcDtUJmd0Ozxicj4KKyAgICAgIHN0cnVjdCZuYnNwO2JpbmFyeV90cmFpdHM8L3R0PjwvdGQ+CisKKyAgICAgIDx0ZCB2YWxpZ249InRvcCI+PHR0PmZ1bmN0aW9uX3R5cGU8L3R0PjwvdGQ+CisKKyAgICAgIDx0ZCB2YWxpZ249InRvcCI+VGhlIHR5cGUgb2YgdGhlIGZ1bmN0aW9uIG9yIGZ1bmN0aW9uIG9iamVjdCBpdHNlbGYKKyAgICAgIChpLmUuLCA8dHQ+VDwvdHQ+KS48L3RkPgorICAgIDwvdHI+CisKKyAgICA8dHI+CisgICAgICA8dGQgdmFsaWduPSJ0b3AiPjx0dD5wYXJhbV90eXBlPC90dD48L3RkPgorCisgICAgICA8dGQgdmFsaWduPSJ0b3AiPlRoZSB0eXBlIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gcGFzcyB0aGUgZnVuY3Rpb24gb3IKKyAgICAgIGZ1bmN0aW9uIG9iamVjdCBhcyBhIHBhcmFtZXRlci48L3RkPgorICAgIDwvdHI+CisKKyAgICA8dHI+CisgICAgICA8dGQgdmFsaWduPSJ0b3AiPjx0dD5yZXN1bHRfdHlwZTwvdHQ+PC90ZD4KKworICAgICAgPHRkIHZhbGlnbj0idG9wIj5UaGUgdHlwZSByZXR1cm5lZCBieSB0aGUgZnVuY3Rpb24gb3IgZnVuY3Rpb24KKyAgICAgIG9iamVjdC48L3RkPgorICAgIDwvdHI+CisKKyAgICA8dHI+CisgICAgICA8dGQgdmFsaWduPSJ0b3AiPjx0dD5maXJzdF9hcmd1bWVudF90eXBlPC90dD48L3RkPgorCisgICAgICA8dGQgdmFsaWduPSJ0b3AiPlRoZSB0eXBlIG9mIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgZnVuY3Rpb24gb3IKKyAgICAgIGZ1bmN0aW9uIG9iamVjdC48L3RkPgorICAgIDwvdHI+CisKKyAgICA8dHI+CisgICAgICA8dGQgdmFsaWduPSJ0b3AiPjx0dD5zZWNvbmRfYXJndW1lbnRfdHlwZTwvdHQ+PC90ZD4KKworICAgICAgPHRkIHZhbGlnbj0idG9wIj5UaGUgdHlwZSBvZiB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIHRoZSBmdW5jdGlvbiBvcgorICAgICAgZnVuY3Rpb24gb2JqZWN0LjwvdGQ+CisgICAgPC90cj4KKyAgPC90YWJsZT4KKworICA8aDM+VXNhZ2U8L2gzPgorCisgIDxwPjx0dD51bmFyeV90cmFpdHM8L3R0PiBzaG91bGQgYmUgaW5zdGFudGlhdGVkIHdpdGggZWl0aGVyIGEgZnVuY3Rpb24KKyAgdGFraW5nIGEgc2luZ2xlIHBhcmFtZXRlciwgb3IgYW4gYWRhcHRhYmxlIHVuYXJ5IGZ1bmN0aW9uIG9iamVjdCAoaS5lLiwgYQorICBjbGFzcyBkZXJpdmVkIGZyb20gPHR0PnN0ZDo6dW5hcnlfZnVuY3Rpb248L3R0PiBvciBvbmUgd2hpY2ggcHJvdmlkZXMgdGhlCisgIHNhbWUgdHlwZWRlZnMpLiAoU2VlICZzZWN0OzIwLjMuMSBpbiB0aGUgQysrIFN0YW5kYXJkLik8L3A+CisKKyAgPHA+PHR0PmJpbmFyeV90cmFpdHM8L3R0PiBzaG91bGQgYmUgaW5zdGFudGlhdGVkIHdpdGggZWl0aGVyIGEgZnVuY3Rpb24KKyAgdGFraW5nIHR3byBwYXJhbWV0ZXJzLCBvciBhbiBhZGFwdGFibGUgYmluYXJ5IGZ1bmN0aW9uIG9iamVjdCAoaS5lLiwgYQorICBjbGFzcyBkZXJpdmVkIGZyb20gPHR0PnN0ZDo6YmluYXJ5X2Z1bmN0aW9uPC90dD4gb3Igb25lIHdoaWNoIHByb3ZpZGVzIHRoZQorICBzYW1lIHR5cGVkZWZzKS4gKFNlZSAmc2VjdDsyMC4zLjEgaW4gdGhlIEMrKyBTdGFuZGFyZC4pPC9wPgorCisgIDxwPlRoZSBtb3N0IGNvbW1vbiB1c2FnZSBvZiB0aGVzZSB0ZW1wbGF0ZXMgaXMgaW4gZnVuY3Rpb24gb2JqZWN0IGFkYXB0ZXJzLAorICB0aHVzIGFsbG93aW5nIHRoZW0gdG8gYWRhcHQgcGxhaW4gZnVuY3Rpb25zIGFzIHdlbGwgYXMgZnVuY3Rpb24gb2JqZWN0cy4KKyAgWW91IGNhbiBkbyB0aGlzIGJ5IHdoZXJldmVyIHlvdSB3b3VsZCBub3JtYWxseSB3cml0ZSwgZm9yIGV4YW1wbGUsPC9wPgorCisgIDxibG9ja3F1b3RlPgorICAgIDxwcmU+Cit0eXBlbmFtZSBPcGVyYXRpb246OmFyZ3VtZW50X3R5cGUKKzwvcHJlPgorICA8L2Jsb2NrcXVvdGU+CisKKyAgPHA+c2ltcGx5IHdyaXRpbmc8L3A+CisKKyAgPGJsb2NrcXVvdGU+CisgICAgPHByZT4KK3R5cGVuYW1lIGJvb3N0Ojp1bmFyeV90cmFpdHMmbHQ7T3BlcmF0aW9uJmd0Ozo6YXJndW1lbnRfdHlwZQorPC9wcmU+CisgIDwvYmxvY2txdW90ZT4KKworICA8cD5pbnN0ZWFkLjwvcD4KKworICA8aDM+QWRkaXRpb25hbCBUeXBlcyBEZWZpbmVkPC9oMz4KKworICA8cD5JbiBhZGRpdGlvbiB0byB0aGUgc3RhbmRhcmQgcmVzdWx0IGFuZCBhcmd1bWVudCB0eXBlZGVmcywgdGhlc2UgdHJhaXRzCisgIHRlbXBsYXRlcyBkZWZpbmUgdHdvIGFkZGl0aW9uYWwgdHlwZXMuPC9wPgorCisgIDxoND48dHQ+ZnVuY3Rpb25fdHlwZTwvdHQ+PC9oND4KKworICA8cD5UaGlzIGlzIHRoZSB0eXBlIG9mIHRoZSBmdW5jdGlvbiBvciBmdW5jdGlvbiBvYmplY3QsIGFuZCBjYW4gYmUgdXNlZCBpbgorICBkZWNsYXJhdGlvbnMgc3VjaCBhczwvcD4KKworICA8YmxvY2txdW90ZT4KKyAgICA8cHJlPgordGVtcGxhdGUgJmx0O2NsYXNzIFByZWRpY2F0ZSZndDsKK2NsYXNzIHVuYXJ5X25lZ2F0ZSA6IC8vIC4uLgoreworICAvLyAuLi4KKyAgcHJpdmF0ZToKKyAgICA8c3Ryb25nPnR5cGVuYW1lIHVuYXJ5X3RyYWl0cyZsdDtQcmVkaWNhdGUmZ3Q7OjpmdW5jdGlvbl90eXBlPC9zdHJvbmc+IHByZWQ7Cit9OworPC9wcmU+CisgIDwvYmxvY2txdW90ZT4KKworICA8cD5JZiB0aGlzIHR5cGVkZWYgd2VyZSBub3QgcHJvdmlkZWQsIGl0IHdvdWxkIG5vdCBiZSBwb3NzaWJsZSB0byBkZWNsYXJlCisgIDx0dD5wcmVkPC90dD4gaW4gYSB3YXkgdGhhdCB3b3VsZCBhbGxvdyA8dHQ+dW5hcnlfbmVnYXRlPC90dD4gdG8gYmUKKyAgaW5zdGFudGlhdGVkIHdpdGggYSBmdW5jdGlvbiB0eXBlIChzZWUgdGhlIEMrKyBTdGFuZGFyZCAmc2VjdDsxNC4zLjEKKyAgJnBhcmE7MykuPC9wPgorCisgIDxoND48dHQ+cGFyYW1fdHlwZTwvdHQ+PC9oND4KKworICA8cD5UaGlzIGlzIGEgdHlwZSBzdWl0YWJsZSBmb3IgcGFzc2luZyB0aGUgZnVuY3Rpb24gb3IgZnVuY3Rpb24gb2JqZWN0IGFzIGEKKyAgcGFyYW1ldGVyIHRvIGFub3RoZXIgZnVuY3Rpb24uIEZvciBleGFtcGxlLDwvcD4KKworICA8YmxvY2txdW90ZT4KKyAgICA8cHJlPgordGVtcGxhdGUgJmx0O2NsYXNzIFByZWRpY2F0ZSZndDsKK2NsYXNzIHVuYXJ5X25lZ2F0ZSA6IC8vIC4uLgoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQgdW5hcnlfbmVnYXRlKDxzdHJvbmc+dHlwZW5hbWUgdW5hcnlfdHJhaXRzJmx0O1ByZWRpY2F0ZSZndDs6OnBhcmFtX3R5cGU8L3N0cm9uZz4geCkKKyAgICAgICAgOgorICAgICAgICBwcmVkKHgpCisgICAge30KKyAgICAvLyAuLi4KK307Cis8L3ByZT4KKyAgPC9ibG9ja3F1b3RlPgorCisgIDxwPkZ1bmN0aW9uIG9iamVjdHMgYXJlIHBhc3NlZCBieSByZWZlcmVuY2UgdG8gY29uc3Q7IGZ1bmN0aW9uIHBvaW50ZXJzIGFyZQorICBwYXNzZWQgYnkgdmFsdWUuPC9wPgorCisgIDxoMz5MaW1pdGF0aW9uczwvaDM+CisKKyAgPHA+VGhpcyBsaWJyYXJ5IHVzZXMgdGhlc2UgdHJhaXRzIHdpdGhpbiBhbGwgZnVuY3Rpb24gb2JqZWN0IGFkYXB0ZXJzLAorICB0aGVvcmV0aWNhbGx5IHJlbmRlcmluZyA8dHQ+cHRyX2Z1bjwvdHQ+IG9ic29sZXRlLiBIb3dldmVyLCB0aGlyZCBwYXJ0eQorICBhZGFwdGVycyBwcm9iYWJseSB3b24ndCB0YWtlIGFkdmFudGFnZSBvZiB0aGlzIG1lY2hhbmlzbSwgYW5kIHNvCisgIDx0dD5wdHJfZnVuPC90dD4gbWF5IHN0aWxsIGJlIHJlcXVpcmVkLiBBY2NvcmRpbmdseSwgdGhpcyBsaWJyYXJ5IGFsc28KKyAgcHJvdmlkZXMgPGEgaHJlZj0icHRyX2Z1bi5odG1sIj5pbXByb3ZlZCB2ZXJzaW9ucyBvZiB0aGUgc3RhbmRhcmQgZnVuY3Rpb24KKyAgcG9pbnRlciBhZGFwdGVyczwvYT4uPC9wPgorCisgIDxwPlRoZXNlIHRyYWl0cyB0ZW1wbGF0ZXMgd2lsbCBhbHNvIG5vdCB3b3JrIHdpdGggY29tcGlsZXJzIHRoYXQgZmFpbCB0bworICBzdXBwb3J0IHBhcnRpYWwgc3BlY2lhbGlzYXRpb24gb2YgdGVtcGxhdGVzLiBXaXRoIHRoZXNlIGNvbXBpbGVycywgdGhlCisgIHRyYWl0cyB0ZW1wbGF0ZXMgY2FuIG9ubHkgYmUgaW5zdGFudGlhdGVkIHdpdGggYWRhcHRhYmxlIGZ1bmN0aW9uIG9iamVjdHMsCisgIHRodXMgcmVxdWlyaW5nIDx0dD5wdHJfZnVuPC90dD4gdG8gYmUgdXNlZCwgZXZlbiB3aXRoIHRoZSBmdW5jdGlvbiBvYmplY3QKKyAgYWRhcHRlcnMgaW4gdGhpcyBsaWJyYXJ5LjwvcD4KKyAgPGhyPgorCisgIDxwPjxhIGhyZWY9Imh0dHA6Ly92YWxpZGF0b3IudzMub3JnL2NoZWNrP3VyaT1yZWZlcmVyIj48aW1nIGJvcmRlcj0iMCIgc3JjPQorICAiLi4vLi4vZG9jL2ltYWdlcy92YWxpZC1odG1sNDAxLnBuZyIgYWx0PSJWYWxpZCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsIgorICBoZWlnaHQ9IjMxIiB3aWR0aD0iODgiPjwvYT48L3A+CisKKyAgPHA+UmV2aXNlZCAKKyAgPCEtLXdlYmJvdCBib3Q9IlRpbWVzdGFtcCIgcy10eXBlPSJFRElURUQiIHMtZm9ybWF0PSIlZCAlQiwgJVkiIHN0YXJ0c3BhbiAtLT4wMgorICBEZWNlbWJlciwgMjAwNjwhLS13ZWJib3QgYm90PSJUaW1lc3RhbXAiIGVuZHNwYW4gaS1jaGVja3N1bT0iMzg1MTAiIC0tPjwvcD4KKworICA8cD48aT5Db3B5cmlnaHQgJmNvcHk7IDIwMDAgQ2FkZW56YSBOZXcgWmVhbGFuZCBMdGQuPC9pPjwvcD4KKworICA8cD48aT5EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKKyAgYWNjb21wYW55aW5nIGZpbGUgPGEgaHJlZj0iLi4vLi4vTElDRU5TRV8xXzAudHh0Ij5MSUNFTlNFXzFfMC50eHQ8L2E+IG9yCisgIGNvcHkgYXQgPGEgaHJlZj0KKyAgImh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCI+aHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0PC9hPik8L2k+PC9wPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvZG9jL0phbWZpbGUudjIgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9kb2MvSmFtZmlsZS52MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmUyNzk4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvZG9jL0phbWZpbGUudjIKQEAgLTAsMCArMSwxOSBAQAorCisjIENvcHlyaWdodCAyMDA1LTIwMDggRGFuaWVsIEphbWVzLgorIyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisjIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCit1c2luZyBib29zdGJvb2sgOwordXNpbmcgcXVpY2tib29rIDsKKworeG1sIGhhc2ggOiBoYXNoLnFiayA7Citib29zdGJvb2sgc3RhbmRhbG9uZSA6IGhhc2ggOgorICAgIDx4c2w6cGFyYW0+Ym9vc3Qucm9vdD0uLi8uLi8uLi8uLi8uLgorCisgICAgPHhzbDpwYXJhbT5jaHVuay5maXJzdC5zZWN0aW9ucz0xCisgICAgPHhzbDpwYXJhbT5jaHVuay5zZWN0aW9uLmRlcHRoPTIKKyAgICA8eHNsOnBhcmFtPmdlbmVyYXRlLnNlY3Rpb24udG9jLmxldmVsPTIKKyAgICA8eHNsOnBhcmFtPnRvYy5zZWN0aW9uLmRlcHRoPTEKKyAgICA8eHNsOnBhcmFtPnRvYy5tYXguZGVwdGg9MQorICAgIDxmb3JtYXQ+cGRmOjx4c2w6cGFyYW0+Ym9vc3QudXJsLnByZWZpeD1odHRwOi8vd3d3LmJvb3N0Lm9yZy9kb2MvbGlicy9yZWxlYXNlL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2RvYy9odG1sCisgICAgOwpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvZG9jL2NoYW5nZXMucWJrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvZG9jL2NoYW5nZXMucWJrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYTA4MTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9kb2MvY2hhbmdlcy5xYmsKQEAgLTAsMCArMSwxNjMgQEAKKworWy8gQ29weXJpZ2h0IDIwMDUtMjAwOCBEYW5pZWwgSmFtZXMuCisgLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisgLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkgXQorCitbc2VjdGlvbjpjaGFuZ2VzIENoYW5nZSBMb2ddCisKK1toMiBCb29zdCAxLjMzLjBdCisKKyogSW5pdGlhbCBSZWxlYXNlCisKK1toMiBCb29zdCAxLjMzLjFdCisKKyogRml4ZWQgdGhlIHBvaW50cyBleGFtcGxlLCBhcyBwb2ludGVkIG91dCBieSDmsojmhafls7AuCisKK1toMiBCb29zdCAxLjM0LjBdCisKKyogVXNlIGRlY2xhcmF0aW9ucyBmb3Igc3RhbmRhcmQgY2xhc3Nlcywgc28gdGhhdCB0aGUgbGlicmFyeQorICBkb2Vzbid0IG5lZWQgdG8gaW5jbHVkZSBhbGwgb2YgdGhlaXIgaGVhZGVycworKiBEZXByZWNhdGVkIHRoZSBgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC8qLmhwcD5gIGhlYWRlcnMuIE5vdyBhIHNpbmdsZSBoZWFkZXIsCisgIDxbaGVhZGVycmVmIGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC5ocHBdPiBpcyB1c2VkLgorKiBBZGQgc3VwcG9ydCBmb3IgdGhlIGBCT09TVF9IQVNIX05PX0VYVEVOU0lPTlNgIG1hY3JvLCB3aGljaAorICBkaXNhYmxlcyB0aGUgZXh0ZW5zaW9ucyB0byBUUjEuCisKKyogTWlub3IgaW1wcm92ZW1lbnRzIHRvIHRoZSBoYXNoIGZ1bmN0aW9ucyBmb3IgZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4KKyogVXBkYXRlIHRoZSBwb3J0YWJsZSBleGFtcGxlIHRvIGhvcGVmdWxseSBiZSBtb3JlIGdlbmVyYWxseSBwb3J0YWJsZS4KKworW2gyIEJvb3N0IDEuMzQuMV0KKworKiBbQGh0dHA6Ly9zdm4uYm9vc3Qub3JnL3RyYWMvYm9vc3QvdGlja2V0Lzk1MiBUaWNrZXQgOTUyXToKKyAgU3VwcHJlc3MgaW5jb3JyZWN0IDY0LWJpdCB3YXJuaW5nIG9uIFZpc3VhbCBDKysuCisKK1toMiBCb29zdCAxLjM1LjBdCisKKyogU3VwcG9ydCBmb3IgYGxvbmcgbG9uZ2AsIGBzdGQ6OmNvbXBsZXhgLgorKiBJbXByb3ZlZCBhbGdvcml0aG0gZm9yIGhhc2hpbmcgZmxvYXRpbmcgcG9pbnQgbnVtYmVyczoKKyAgKiBJbXByb3ZlZCBwb3J0YWJsaXR5LCBhcyBkZXNjcmliZWQgYnkgRGFuaWVsIEtyw7xnbGVyIGluCisgICAgW0BodHRwOi8vbGlzdHMuYm9vc3Qub3JnL2Jvb3N0LXVzZXJzLzIwMDUvMDgvMTM0MTgucGhwCisgICAgYSBwb3N0IHRvIHRoZSBib29zdCB1c2VycyBsaXN0XS4KKyAgKiBGaXRzIG1vcmUgaW5mb3JtYXRpb24gaW50byBlYWNoIGNvbWJpbmUgbG9vcCwgd2hpY2ggY2FuIHJlZHVjZSB0aGUKKyAgICB0aGUgbnVtYmVyIG9mIHRpbWVzIGNvbWJpbmUgaXMgY2FsbGVkIGFuZCBob3BlZnVsbHkgZ2l2ZSBhIGJldHRlcgorICAgIHF1YWxpdHkgaGFzaCBmdW5jdGlvbi4KKyAgKiBJbXByb3ZlZCB0aGUgYWxnb3JpdGhtIGZvciBoYXNoaW5nIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuCisgICogT24gQ3lnd2luIHVzZSBhIGJpbmFyeSBoYXNoIGZ1bmN0aW9uIGZvciBmbG9hdGluZyBwb2ludCBudW1iZXJzLCBhcyAKKyAgICBDeWd3aW4gZG9lc24ndCBoYXZlIGRlY2VudCBmbG9hdGluZyBwb2ludCBmdW5jdGlvbnMgZm9yIGBsb25nIGRvdWJsZWAuCisgICogTmV2ZXIgdXNlcyBgZnBjbGFzc2Agd2hpY2ggZG9lc24ndCBzdXBwb3J0IGBsb25nIGRvdWJsZWAuCisgICogW0BodHRwOi8vc3ZuLmJvb3N0Lm9yZy90cmFjL2Jvb3N0L3RpY2tldC8xMDY0IFRpY2tldCAxMDY0XToKKyAgICBSZW1vdmVkIHVubmVjZXNzYXJ5IHVzZSBvZiBgZXJybm9gLgorKiBFeHBsaWNpdGx5IG92ZXJsb2FkIGZvciBtb3JlIGJ1aWx0IGluIHR5cGVzLgorKiBNaW5vciBpbXByb3ZlbWVudHMgdG8gdGhlIGRvY3VtZW50YXRpb24uCisqIEEgZmV3IGJ1ZyBhbmQgd2FybmluZyBmaXhlczoKKyAgKiBbQGh0dHA6Ly9zdm4uYm9vc3Qub3JnL3RyYWMvYm9vc3QvdGlja2V0LzE1MDkgVGlja2V0IDE1MDldOgorICAgIFN1cHByZXNzIGFub3RoZXIgVmlzdWFsIEMrKyB3YXJuaW5nLgorICAqIFNvbWUgd29ya2Fyb3VuZHMgZm9yIHRoZSBTdW4gY29tcGlsZXJzLgorCitbaDIgQm9vc3QgMS4zNi4wXQorCisqIFN0b3AgdXNpbmcgT3BlbkJTRCdzIGRvZGd5IGBzdGQ6Om51bWVyaWNfbGltaXRzYC4KKyogVXNpbmcgdGhlIGJvb3N0IHR5cGVkZWZzIGZvciBgbG9uZyBsb25nYCBhbmQgYHVuc2lnbmVkIGxvbmcgbG9uZ2AuCisqIE1vdmUgdGhlIGV4dGVuc2lvbnMgaW50byB0aGVpciBvd24gaGVhZGVyLgorCitbaDIgQm9vc3QgMS4zNy4wXQorCisqIFtAaHR0cDovL3N2bi5ib29zdC5vcmcvdHJhYy9ib29zdC90aWNrZXQvMjI2NCBUaWNrZXQgMjI2NF06CisgIEluIFZpc3VhbCBDKyssIGFsd2F5cyB1c2UgQzk5IGZsb2F0IGZ1bmN0aW9ucyBmb3IgYGxvbmcgZG91YmxlYCBhbmQgYGZsb2F0YCBhcworICB0aGUgQysrIG92ZXJsb2FkcyBhcmVuJ3QgYWx3YXlzIGF2YWlsYWJsZXMuCisKK1toMiBCb29zdCAxLjM4LjBdCisKKyogQ2hhbmdlZCB0aGUgd2FybmluZ3MgaW4gdGhlIGRlcHJlY2F0ZWQgaGVhZGVycyBmcm9tIDEuMzQuMCB0byBlcnJvcnMuIFRoZXNlCisgIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIEJvb3N0LgorKiBNb3ZlZCBkZXRhaWwgaGVhZGVycyBvdXQgb2YgYGJvb3N0L2Z1bmN0aW9uYWwvZGV0YWlsYCwgc2luY2UgdGhleSBhcmUgcGFydCBvZgorICBmdW5jdGlvbmFsL2hhc2gsIG5vdCBmdW5jdGlvbmFsLiBgYm9vc3QvZnVuY3Rpb25hbC9kZXRhaWwvY29udGFpbmVyX2Z3ZC5ocHBgCisgIGhhcyBiZWVuIG1vdmVkIHRvIGBib29zdC9kZXRhaWwvY29udGFpbmVyX2Z3ZC5ocHBgIGFzIGl0J3MgdXNlZCBvdXRzaWRlIG9mCisgIHRoaXMgbGlicmFyeSwgdGhlIG90aGVycyBoYXZlIGJlZW4gbW92ZWQgdG8gYGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC9kZXRhaWxgLgorICAKK1toMiBCb29zdCAxLjM5LjBdCisKKyogTW92ZSB0aGUgaGFzaF9md2QuaHBwIGltcGxlbWVudGF0aW9uIGludG8gdGhlIGhhc2ggc3ViZGlyZWN0b3J5LCBsZWF2aW5nIGEKKyAgZm9yd2FyZGluZyBoZWFkZXIgaW4gdGhlIG9sZCBsb2NhdGlvbi4gWW91IHNob3VsZCBzdGlsbCB1c2UgdGhlIG9sZCBsb2NhdGlvbiwKKyAgdGhlIG5ldyBsb2NhdGlvbiBpcyBtYWlubHkgZm9yIGltcGxlbWVudGF0aW9uIGFuZCBwb3NzaWJsZSBtb2R1bGFyaXphdGlvbi4KKyogW0BodHRwczovL3N2bi5ib29zdC5vcmcvdHJhYy9ib29zdC90aWNrZXQvMjQxMiBUaWNrZXQgMjQxMl06IFJlbW92ZWQgZGVwcmVjYXRlZAorICBoZWFkZXJzLgorKiBbQGh0dHBzOi8vc3ZuLmJvb3N0Lm9yZy90cmFjL2Jvb3N0L3RpY2tldC8yOTU3IFRpY2tldCAyOTU3XTogRml4IGNvbmZpZ3VyYXRpb24KKyAgZm9yIHZ4d29ya3MuCisKK1toMiBCb29zdCAxLjQwLjBdCisKKyogQXV0b21hdGljYWxseSBjb25maWd1cmUgdGhlIGZsb2F0IGZ1bmN0aW9ucyB1c2luZyB0ZW1wbGF0ZSBtZXRhcHJvZ3JhbW1pbmcKKyAgaW5zdGVhZCBvZiB0cnlpbmcgdG8gY29uZmlndXJlIGV2ZXJ5IHBvc3NpYmlsaXR5IG1hbnVhbGx5LgorKiBXb3JrYXJvdW5kIGZvciB3aGVuIFNUTHBvcnQgZG9lc24ndCBzdXBwb3J0IGxvbmcgZG91YmxlLgorCitbaDIgQm9vc3QgMS40Mi4wXQorCisqIFJlZHVjZSB0aGUgbnVtYmVyIG9mIHdhcm5pbmdzIGZvciBWaXN1YWwgQysrIHdhcm5pbmcgbGV2ZWwgNC4KKyogU29tZSBjb2RlIGZvcm1hdHRpbmcgY2hhbmdlcyB0byBmaXQgbGluZXMgaW50byA4MCBjaGFyYWN0ZXJzLgorKiBSZW5hbWUgYW4gaW50ZXJuYWwgbmFtZXNwYWNlLgorCitbaDIgQm9vc3QgMS40My4wXQorCisqIFtAaHR0cHM6Ly9zdm4uYm9vc3Qub3JnL3RyYWMvYm9vc3QvdGlja2V0LzM4NjYgVGlja2V0IDM4NjZdOgorICBEb24ndCBmb3dhcmQgZGVjbGFyZSBjb250YWluZXJzIHdoZW4gdXNpbmcgZ2NjJ3MgcGFyYWxsZWwgbGlicmFyeSwKKyAgYWxsb3cgdXNlciB0byBzdG9wIGZvcndhcmQgZGVjbGFyYXRpb24gYnkgZGVmaW5pbmcgdGhlCisgIGBCT09TVF9ERVRBSUxfTk9fQ09OVEFJTkVSX0ZXRGAgbWFjcm8uCisqIFtAaHR0cHM6Ly9zdm4uYm9vc3Qub3JnL3RyYWMvYm9vc3QvdGlja2V0LzQwMzggVGlja2V0IDQwMzhdOgorICBBdm9pZCBoYXNoaW5nIDAuNSBhbmQgMCB0byB0aGUgc2FtZSBudW1iZXIuCisqIFN0b3AgdXNpbmcgZGVwcmVjYXRlZCBgQk9PU1RfSEFTXypgIG1hY3Jvcy4KKworW2gyIEJvb3N0IDEuNDQuMF0KKworKiBBZGQgb3B0aW9uIHRvIHByZXZlbnQgaW1wbGljaXQgY29udmVyc2lvbnMgd2hlbiBjYWxsaW5nIGBoYXNoX3ZhbHVlYCBieQorICBkZWZpbmluZyBgQk9PU1RfSEFTSF9OT19JTVBMSUNJVF9DQVNUU2AuIFdoZW4gdXNpbmcgYGJvb3N0OjpoYXNoYAorICBmb3IgYSB0eXBlIHRoYXQgZG9lcyBub3QgaGF2ZSBgaGFzaF92YWx1ZWAgZGVjbGFyZWQgYnV0IGRvZXMgaGF2ZQorICBhbiBpbXBsaWNpdCBjb252ZXJzaW9uIHRvIGEgdHlwZSB0aGF0IGRvZXMsIGl0IHdvdWxkIHVzZSB0aGF0CisgIGltcGxpY2l0IGNvbnZlcnNpb24gdG8gaGFzaCBpdC4gV2hpY2ggY2FuIHNvbWV0aW1lcyBnbyB2ZXJ5IHdyb25nLAorICBlLmcuIHVzaW5nIGEgY29udmVyc2lvbiB0byBib29sIGFuZCBvbmx5IGhhc2hpbmcgdG8gMiBwb3NzaWJsZQorICB2YWx1ZXMuIFNpbmNlIGZpeGluZyB0aGlzIGlzIGEgYnJlYWtpbmcgY2hhbmdlIGFuZCB3YXMgb25seQorICBhcHByb2FjaGVkIHF1aXRlIGxhdGUgaW4gdGhlIHJlbGVhc2UgY3ljbGUgd2l0aCBsaXR0bGUgZGlzY3Vzc2lvbgorICBpdCdzIG9wdC1pbiBmb3Igbm93LiBUaGlzLCBvciBzb21ldGhpbmcgbGlrZSBpdCwgd2lsbCBiZWNvbWUgdGhlCisgIGRlZmF1bHQgaW4gYSBmdXR1cmUgdmVyc2lvbi4KKworW2gyIEJvb3N0IDEuNDYuMF0KKworKiBBdm9pZCB3YXJuaW5nIGR1ZSB3aXRoIGdjYydzIGAtV2NvbnZlcnNpb25gIGZsYWcuCisKK1toMiBCb29zdCAxLjUwLjBdCisKKyogW0BodHRwOi8vc3ZuLmJvb3N0Lm9yZy90cmFjL2Jvb3N0L3RpY2tldC82NzcxIFRpY2tldCA2NzcxXToKKyAgQXZvaWQgZ2NjJ3MgYC1XZmxvYXQtZXF1YWxgIHdhcm5pbmcuCisqIFtAaHR0cDovL3N2bi5ib29zdC5vcmcvdHJhYy9ib29zdC90aWNrZXQvNjgwNiBUaWNrZXQgNjgwNl06CisgIFN1cHBvcnQgYHN0ZDo6YXJyYXlgIGFuZCBgc3RkOjp0dXBsZWAgd2hlbiBhdmFpbGFibGUuCisqIEFkZCBkZXByZWNhdGlvbiB3YXJuaW5nIHRvIHRoZSBsb25nIGRlcHJlY2F0ZWQKKyAgYGJvb3N0L2Z1bmN0aW9uYWwvZGV0YWlsL2NvbnRhaW5lcl9md2QuaHBwYC4KKworW2gyIEJvb3N0IDEuNTEuMF0KKworKiBTdXBwb3J0IHRoZSBzdGFuZGFyZCBzbWFydCBwb2ludGVycy4KKyogYGhhc2hfdmFsdWVgIG5vdyBpbXBsZW1lbnRlZCB1c2luZyBTRklOQUUgdG8gYXZvaWQgaW1wbGljaXQgY2FzdHMgdG8gYnVpbHQKKyAgaW4gdHlwZXMgd2hlbiBjYWxsaW5nIGl0LgorKiBVcGRhdGVkIHRvIHVzZSB0aGUgbmV3IGNvbmZpZyBtYWNyb3MuCisKK1toMiBCb29zdCAxLjUyLjBdCisKKyogUmVzdG9yZSBgZW51bWAgc3VwcG9ydCwgd2hpY2ggd2FzIGFjY2lkZW50YWxseSByZW1vdmVkIGluIHRoZSBsYXN0IHZlcnNpb24uCisqIE5ldyBmbG9hdGluZyBwb2ludCBoYXNoZXIgLSB3aWxsIGhhc2ggdGhlIGJpbmFyeSByZXByZXNlbnRhdGlvbiBvbiBtb3JlCisgIHBsYXRmb3Jtcywgd2hpY2ggc2hvdWxkIGJlIGZhc3Rlci4KKworW2gyIEJvb3N0IDEuNTMuMF0KKworKiBBZGQgc3VwcG9ydCBmb3IgYGJvb3N0OjppbnQxMjhfdHlwZWAgYW5kIGBib29zdDo6dWludDEyOF90eXBlYCB3aGVyZQorICBhdmFpbGFibGUgLSBjdXJyZW50bHkgb25seSBgX19pbnQxMjhgIGFuZCBgdW5zaWduZWQgX19pbnQxMjhgIG9uIHNvbWUKKyAgdmVyc2lvbnMgb2YgZ2NjLgorKiBPbiBwbGF0Zm9ybXMgdGhhdCBhcmUga25vd24gdG8gaGF2ZSB0aGUgc3RhbmRhcmQgZmxvYXRpbmcgcG9pbnQgZnVuY3Rpb25zLAorICBkb24ndCB1c2UgYXV0b21hdGljIGRldGVjdGlvbiAtIHdoaWNoIGNhbiBicmVhayBpZiB0aGVyZSBhcmUgYW1iaWd1b3VzCisgIG92ZXJsb2Fkcy4KKyogRml4IHVuZGVmaW5lZCBiZWhhdmlvdXIgd2hlbiB1c2luZyB0aGUgYmluYXJ5IGZsb2F0IGhhc2ggKFRob21hcyBIZWxsZXIpLgorCitbaDIgQm9vc3QgMS41NC4wXQorCisqIFtAaHR0cHM6Ly9zdm4uYm9vc3Qub3JnL3RyYWMvYm9vc3QvdGlja2V0Lzc5NTcgVGlja2V0IDc5NTddOgorICBGaXhlZCBhIHR5cG8uCisKK1tlbmRzZWN0XQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvZG9jL2Rpc2FibGUucWJrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvZG9jL2Rpc2FibGUucWJrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZGVjNmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9kb2MvZGlzYWJsZS5xYmsKQEAgLTAsMCArMSwyOSBAQAorCitbLyBDb3B5cmlnaHQgMjAwNS0yMDA4IERhbmllbCBKYW1lcy4KKyAvIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKyAvIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KSBdCisKK1tzZWN0aW9uOmRpc2FibGUgRGlzYWJsaW5nIFRoZSBFeHRlbnNpb25zXQorCitXaGlsZSBbY2xhc3NyZWYgYm9vc3Q6Omhhc2hdJ3MgZXh0ZW5zaW9ucyBhcmUgZ2VuZXJhbGx5IHVzZWZ1bCwgeW91IG1pZ2h0IHdhbnQKK3RvIHR1cm4gdGhlbSBvZiBpbiBvcmRlciB0byBjaGVjayB0aGF0IHlvdXIgY29kZSB3aWxsIHdvcmsgd2l0aCBvdGhlcgoraW1wbGVtZW50YXRpb25zIG9mIFRSMS4gVG8gZG8gdGhpcyBkZWZpbmUgdGhlIG1hY3JvIGBCT09TVF9IQVNIX05PX0VYVEVOU0lPTlNgLgorV2hlbiB0aGlzIG1hY3JvIGlzIGRlZmluZWQsIG9ubHkgdGhlIHNwZWNpYWxpc2F0aW9ucyBkZXRhaWxlZAoraW4gVFIxIHdpbGwgYmUgZGVjbGFyZWQuIEJ1dCwgaWYgeW91IGxhdGVyIHVuZGVmaW5lIHRoZSBtYWNybyBhbmQgaW5jbHVkZQorPFtoZWFkZXJyZWYgYm9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcF0+IHRoZW4gdGhlIG5vbi1zcGVjaWFsaXNlZCBmb3JtIHdpbGwgYmUgZGVmaW5lZAorLSBhY3RpdmF0aW5nIHRoZSBleHRlbnNpb25zLgorCitJdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBuZXZlciB1bmRlZmluZSB0aGUgbWFjcm8gLSBhbmQgb25seSBkZWZpbmUKK2l0IHNvIHRoYXQgaXQgYXBwbGllcyB0byB0aGUgY29tcGxldGUgdHJhbnNsYXRpb24gdW5pdCwgZWl0aGVyIGJ5IGRlZmluaW5nIGl0CithdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBtYWluIHNvdXJjZSBmaWxlIG9yLCBwcmVmZXJhYmx5LCBieSB1c2luZyBhIGNvbXBpbGVyCitzd2l0Y2ggb3IgcHJlZmVyZW5jZS4gQW5kIHlvdSByZWFsbHkgc2hvdWxkIG5ldmVyIGRlZmluZSBpdCBpbiBoZWFkZXIgZmlsZXMuCisKK0lmIHlvdSBhcmUgd3JpdGluZyBhIGxpYnJhcnkgd2hpY2ggaGFzIGNvZGUgaW4gdGhlIGhlYWRlciB3aGljaCByZXF1aXJlcyB0aGUKK2V4dGVuc2lvbnMsIHRoZW4gdGhlIGJlc3QgYWN0aW9uIGlzIHRvIHRlbGwgdXNlcnMgbm90IHRvIGRlZmluZSB0aGUgbWFjcm8uCitUaGVpciBjb2RlIHdvbid0IFsncmVxdWlyZV0gdGhlIG1hY3JvLgorCitUcmFuc2xhdGlvbiB1bml0cyB0aGF0IGFyZSBjb21waWxlZCB3aXRoIHRoZSBtYWNybyBkZWZpbmVkIHdpbGwgbGluayB3aXRoIHVuaXRzCit0aGF0IHdlcmUgY29tcGlsZWQgd2l0aG91dCBpdC4gVGhpcyBmZWF0dXJlIGhhcyBiZWVuIGRlc2lnbmVkIHRvIGF2b2lkIE9EUgordmlvbGF0aW9ucy4KKworW2VuZHNlY3RdCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC9kb2MvaGFzaC5xYmsgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9kb2MvaGFzaC5xYmsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RiNzJkNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2RvYy9oYXNoLnFiawpAQCAtMCwwICsxLDI5IEBACitbbGlicmFyeSBCb29zdC5GdW5jdGlvbmFsL0hhc2gKKyAgICBbcXVpY2tib29rIDEuNV0KKyAgICBbYXV0aG9ycyBbSmFtZXMsIERhbmllbF1dCisgICAgW2NvcHlyaWdodCAyMDA1IDIwMDYgMjAwNyAyMDA4IERhbmllbCBKYW1lc10KKyAgICBbcHVycG9zZSBBIFRSMSBoYXNoIGZ1bmN0aW9uIG9iamVjdCB0aGF0IGNhbiBiZSBleHRlbmRlZCB0byBoYXNoIHVzZXIKKyAgICAgICAgZGVmaW5lZCB0eXBlc10KKyAgICBbY2F0ZWdvcnkgaGlnaGVyLW9yZGVyXQorICAgIFtpZCBoYXNoXQorICAgIFtkaXJuYW1lIGZ1bmN0aW9uYWwvaGFzaF0KKyAgICBbbGljZW5zZQorICAgICAgICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCisgICAgICAgIChTZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKKyAgICAgICAgW0BodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHRdKQorICAgIF0KK10KKworW2RlZiBfX2lzc3Vlc19fCisgICAgW0BodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDA1L24xODM3LnBkZgorICAgIExpYnJhcnkgRXh0ZW5zaW9uIFRlY2huaWNhbCBSZXBvcnQgSXNzdWVzIExpc3RdXQorCitbaW5jbHVkZTpoYXNoIGludHJvLnFia10KK1tpbmNsdWRlOmhhc2ggdHV0b3JpYWwucWJrXQorW2luY2x1ZGU6aGFzaCBwb3J0YWJpbGl0eS5xYmtdCitbaW5jbHVkZTpoYXNoIGRpc2FibGUucWJrXQorW2luY2x1ZGU6aGFzaCBjaGFuZ2VzLnFia10KK1tpbmNsdWRlOmhhc2ggcmF0aW9uYWxlLnFia10KK1t4aW5jbHVkZSByZWYueG1sXQorW2luY2x1ZGU6aGFzaCBsaW5rcy5xYmtdCitbaW5jbHVkZTpoYXNoIHRoYW5rcy5xYmtdCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC9kb2MvaW50cm8ucWJrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvZG9jL2ludHJvLnFiawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzZlOTk3Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvZG9jL2ludHJvLnFiawpAQCAtMCwwICsxLDUyIEBACisKK1svIENvcHlyaWdodCAyMDA1LTIwMDggRGFuaWVsIEphbWVzLgorIC8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworIC8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpIF0KKworW3NlY3Rpb246aW50cm8gSW50cm9kdWN0aW9uXQorCitbZGVmIF9fdHIxLWZ1bGxfXworICAgIFtAaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAwNS9uMTgzNi5wZGYKKyAgICBEcmFmdCBUZWNobmljYWwgUmVwb3J0IG9uIEMrKyBMaWJyYXJ5IEV4dGVuc2lvbnNdXQorW2RlZiBfX3RyMV9fCisgICAgW0BodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDA1L24xODM2LnBkZgorICAgIFRSMV1dCitbZGVmIF9fdW5vcmRlcmVkX18gW2xpbmsgdW5vcmRlcmVkIEJvb3N0LlVub3JkZXJlZF1dCitbZGVmIF9faW50cnVzaXZlX18gW2xpbmsgaW50cnVzaXZlLnVub3JkZXJlZF9zZXRfdW5vcmRlcmVkX211bHRpc2V0IEJvb3N0LkludHJ1c2l2ZV1dCitbZGVmIF9fbXVsdGktaW5kZXhfXyBbQGJvb3N0Oi9saWJzL211bHRpX2luZGV4L2RvYy9pbmRleC5odG1sCisgICAgQm9vc3QgTXVsdGktSW5kZXggQ29udGFpbmVycyBMaWJyYXJ5XV0KK1tkZWYgX19tdWx0aS1pbmRleC1zaG9ydF9fIFtAYm9vc3Q6L2xpYnMvbXVsdGlfaW5kZXgvZG9jL2luZGV4Lmh0bWwKKyAgICBCb29zdC5NdWx0aUluZGV4XV0KK1tkZWYgX19iaW1hcF9fIFtAYm9vc3Q6L2xpYnMvYmltYXAvaW5kZXguaHRtbCBCb29zdC5CaW1hcF1dCitbZGVmIF9faGFzaC1mdW5jdGlvbl9fIFtAaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IYXNoX2Z1bmN0aW9uIGhhc2ggZnVuY3Rpb25dXQorW2RlZiBfX2hhc2gtdGFibGVfXyBbQGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSGFzaF90YWJsZSBoYXNoIHRhYmxlXV0KKworW2NsYXNzcmVmIGJvb3N0OjpoYXNoXSBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgX19oYXNoLWZ1bmN0aW9uX18gb2JqZWN0CitzcGVjaWZpZWQgYnkgdGhlIF9fdHIxLWZ1bGxfXyAoVFIxKS4gSXQgaXMgdGhlIGRlZmF1bHQgaGFzaCBmdW5jdGlvbiBmb3IKK19fdW5vcmRlcmVkX18sIF9faW50cnVzaXZlX18ncyB1bm9yZGVyZWQgYXNzb2NpYXRpdmUgY29udGFpbmVycywgYW5kCitfX211bHRpLWluZGV4LXNob3J0X18ncyBoYXNoIGluZGljaWVzIGFuZCBfX2JpbWFwX18ncyBgdW5vcmRlcmVkX3NldF9vZmAuCisKK0FzIGl0IGlzIGNvbXBsaWFudCB3aXRoIF9fdHIxX18sIGl0IHdpbGwgd29yayB3aXRoOgorCisqIGludGVnZXJzCisqIGZsb2F0cworKiBwb2ludGVycworKiBzdHJpbmdzCisKK0l0IGFsc28gaW1wbGVtZW50cyB0aGUgZXh0ZW5zaW9uIHByb3Bvc2VkIGJ5IFBldGVyIERpbW92IGluIGlzc3VlIDYuMTggb2YgdGhlCitfX2lzc3Vlc19fIChwYWdlIDYzKSwgdGhpcyBhZGRzIHN1cHBvcnQgZm9yOgorCisqIGFycmF5cworKiBgc3RkOjpwYWlyYAorKiB0aGUgc3RhbmRhcmQgY29udGFpbmVycy4KKyogZXh0ZW5kaW5nIFtjbGFzc3JlZiBib29zdDo6aGFzaF0gZm9yIGN1c3RvbSB0eXBlcy4KKworW25vdGUKK1RoaXMgaGFzaCBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBiZSB1c2VkIGluIGNvbnRhaW5lcnMgYmFzZWQgb24KK3RoZSBTVEwgYW5kIGlzIG5vdCBzdWl0YWJsZSBhcyBhIGdlbmVyYWwgcHVycG9zZSBoYXNoIGZ1bmN0aW9uLgorRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIFtsaW5rIGhhc2gucmF0aW9uYWxlIHJhdGlvbmFsZV0uCitdCisKKworW2VuZHNlY3RdCisKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2RvYy9saW5rcy5xYmsgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9kb2MvbGlua3MucWJrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNTUzNmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9kb2MvbGlua3MucWJrCkBAIC0wLDAgKzEsMjcgQEAKKworWy8gQ29weXJpZ2h0IDIwMDUtMjAwOCBEYW5pZWwgSmFtZXMuCisgLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisgLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkgXQorCitbc2VjdGlvbjpsaW5rcyBMaW5rc10KKworWypBIFByb3Bvc2FsIHRvIEFkZCBIYXNoIFRhYmxlcyB0byB0aGUgU3RhbmRhcmQgTGlicmFyeV0KK1tAaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvSlRDMS9TQzIyL1dHMjEvZG9jcy9wYXBlcnMvMjAwMy9uMTQ1Ni5odG1sXQorVGhlIGhhc2ggdGFibGUgcHJvcG9zYWwgZXhwbGFpbnMgbXVjaCBvZiB0aGUgZGVzaWduLiBUaGUgaGFzaCBmdW5jdGlvbiBvYmplY3QKK2lzIGRpc2N1c3NlZCBpbiBTZWN0aW9uIEQuCisKK1sqVGhlIEMrKyBTdGFuZGFyZCBMaWJyYXJ5IFRlY2huaWNhbCBSZXBvcnQuXQorW0BodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDA1L24xODM2LnBkZl0KK0NvbnRhaW5zIHRoZSBoYXNoIGZ1bmN0aW9uIHNwZWNpZmljYXRpb24gaW4gc2VjdGlvbiA2LjMuMi4KKworWypMaWJyYXJ5IEV4dGVuc2lvbiBUZWNobmljYWwgUmVwb3J0IElzc3VlcyBMaXN0Ll0KK1tAaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9wYXBlcnMvMjAwNS9uMTgzNy5wZGZdCitUaGUgbGlicmFyeSBpbXBsZW1lbnRzIHRoZSBleHRlbnNpb24gZGVzY3JpYmVkIGluIElzc3VlIDYuMTgsIHBhZ2VzIDYzLTY3LgorCitbKk1ldGhvZHMgZm9yIElkZW50aWZ5aW5nIFZlcnNpb25lZCBhbmQgUGxhZ2lhcmlzZWQgRG9jdW1lbnRzXQorVGltb3RoeSBDLiBIb2FkLCBKdXN0aW4gWm9iZWwKK1tAaHR0cDovL3d3dy5jcy5ybWl0LmVkdS5hdS9+anovZnVsbHRleHQvamFzaXN0LXRjaC5wZGZdCitDb250YWlucyB0aGUgaGFzaCBmdW5jdGlvbiB0aGF0IFtmdW5jcmVmIGJvb3N0OjpoYXNoX2NvbWJpbmVdIGlzIGJhc2VkIG9uLgorCitbZW5kc2VjdF0KKwpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvZG9jL3BvcnRhYmlsaXR5LnFiayBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2RvYy9wb3J0YWJpbGl0eS5xYmsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY1YmMxOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2RvYy9wb3J0YWJpbGl0eS5xYmsKQEAgLTAsMCArMSw5MyBAQAorCitbLyBDb3B5cmlnaHQgMjAwNS0yMDA4IERhbmllbCBKYW1lcy4KKyAvIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKyAvIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KSBdCisKK1tzZWN0aW9uOnBvcnRhYmlsaXR5IFBvcnRhYmlsaXR5XQorCitbZGVmIF9fYm9vc3RfaGFzaF9fIFtjbGFzc3JlZiBib29zdDo6aGFzaF1dCisKK19fYm9vc3RfaGFzaF9fIGlzIHdyaXR0ZW4gdG8gYmUgYXMgcG9ydGFibGUgYXMgcG9zc2libGUsIGJ1dCB1bmZvcnR1bmF0ZWx5LCBzZXZlcmFsCitvbGRlciBjb21waWxlcnMgZG9uJ3Qgc3VwcG9ydCBhcmd1bWVudCBkZXBlbmRlbnQgbG9va3VwIChBREwpIC0gdGhlIG1lY2hhbmlzbQordXNlZCBmb3IgY3VzdG9taXNhdGlvbi4gIE9uIHRob3NlIGNvbXBpbGVycyBjdXN0b20gb3ZlcmxvYWRzIGZvciBgaGFzaF92YWx1ZWAKK25lZWRzIHRvIGJlIGRlY2xhcmVkIGluIHRoZSBib29zdCBuYW1lc3BhY2UuCisKK09uIGEgc3RyaWN0bHkgc3RhbmRhcmRzIGNvbXBsaWFudCBjb21waWxlciwgYW4gb3ZlcmxvYWQgZGVmaW5lZCBpbiB0aGUKK2Jvb3N0IG5hbWVzcGFjZSB3b24ndCBiZSBmb3VuZCB3aGVuIF9fYm9vc3RfaGFzaF9fIGlzIGluc3RhbnRpYXRlZCwKK3NvIGZvciB0aGVzZSBjb21waWxlcnMgdGhlIG92ZXJsb2FkIHNob3VsZCBvbmx5IGJlIGRlY2xhcmVkIGluIHRoZSBzYW1lCituYW1lc3BhY2UgYXMgdGhlIGNsYXNzLgorCitMZXQncyBzYXkgd2UgaGF2ZSBhIHNpbXBsZSBjdXN0b20gdHlwZToKKworICAgIG5hbWVzcGFjZSBmb28KKyAgICB7CisgICAgICAgIHRlbXBsYXRlIDxjbGFzcyBUPgorICAgICAgICBjbGFzcyBjdXN0b21fdHlwZQorICAgICAgICB7CisgICAgICAgICAgICBUIHZhbHVlOworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBjdXN0b21fdHlwZShUIHgpIDogdmFsdWUoeCkge30KKworICAgICAgICAgICAgZnJpZW5kIHN0ZDo6c2l6ZV90IGhhc2hfdmFsdWUoY3VzdG9tX3R5cGUgeCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBfX2Jvb3N0X2hhc2hfXzxpbnQ+IGhhc2hlcjsKKyAgICAgICAgICAgICAgICByZXR1cm4gaGFzaGVyKHgudmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKworT24gYSBjb21wbGlhbnQgY29tcGlsZXIsIHdoZW4gYGhhc2hfdmFsdWVgIGlzIGNhbGxlZCBmb3IgdGhpcyB0eXBlLAoraXQgd2lsbCBsb29rIGF0IHRoZSBuYW1lc3BhY2UgaW5zaWRlIHRoZSB0eXBlIGFuZCBmaW5kIGBoYXNoX3ZhbHVlYAorYnV0IG9uIGEgY29tcGlsZXIgd2hpY2ggZG9lc24ndCBzdXBwb3J0IEFETCBgaGFzaF92YWx1ZWAgd29uJ3QgYmUgZm91bmQuCitUbyBtYWtlIHRoaW5ncyB3b3JzZSwgc29tZSBjb21waWxlcnMgd2hpY2ggZG8gc3VwcG9ydCBBREwgd29uJ3QgZmluZAorYSBmcmllbmQgY2xhc3MgZGVmaW5lZCBpbnNpZGUgdGhlIGNsYXNzLgorCitTbyBmaXJzdCBtb3ZlIHRoZSBtZW1iZXIgZnVuY3Rpb24gb3V0IG9mIHRoZSBjbGFzczoKKworICAgIG5hbWVzcGFjZSBmb28KKyAgICB7CisgICAgICAgIHRlbXBsYXRlIDxjbGFzcyBUPgorICAgICAgICBjbGFzcyBjdXN0b21fdHlwZQorICAgICAgICB7CisgICAgICAgICAgICBUIHZhbHVlOworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBjdXN0b21fdHlwZShUIHgpIDogdmFsdWUoeCkge30KKworICAgICAgICAgICAgc3RkOjpzaXplX3QgaGFzaChjdXN0b21fdHlwZSB4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIF9fYm9vc3RfaGFzaF9fPFQ+IGhhc2hlcjsKKyAgICAgICAgICAgICAgICByZXR1cm4gaGFzaGVyKHZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KKyAgICAgICAgaW5saW5lIHN0ZDo6c2l6ZV90IGhhc2hfdmFsdWUoY3VzdG9tX3R5cGU8VD4geCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHguaGFzaCgpOworICAgICAgICB9CisgICAgfQorCitVbmZvcnR1bmF0ZWx5LCBJIGNvdWxkbid0IGRlY2xhcmUgaGFzaF92YWx1ZSBhcyBhIGZyaWVuZCwgYXMgc29tZSBjb21waWxlcnMKK2Rvbid0IHN1cHBvcnQgdGVtcGxhdGUgZnJpZW5kcywgc28gaW5zdGVhZCBJIGRlY2xhcmVkIGEgbWVtYmVyIGZ1bmN0aW9uIHRvCitjYWxjdWxhdGUgdGhlIGhhc2gsIGFuZCBjYWxsZWQgaXQgZnJvbSBoYXNoX3ZhbHVlLgorCitGb3IgY29tcGlsZXJzIHdoaWNoIGRvbid0IHN1cHBvcnQgQURMLCBoYXNoX3ZhbHVlIG5lZWRzIHRvIGJlIGRlZmluZWQgaW4gdGhlCitib29zdCBuYW1lc3BhY2U6CisKKyAgICAjaWZkZWYgQk9PU1RfTk9fQVJHVU1FTlRfREVQRU5ERU5UX0xPT0tVUAorICAgIG5hbWVzcGFjZSBib29zdAorICAgICNlbHNlCisgICAgbmFtZXNwYWNlIGZvbworICAgICNlbmRpZgorICAgIHsKKyAgICAgICAgdGVtcGxhdGUgPGNsYXNzIFQ+CisgICAgICAgIHN0ZDo6c2l6ZV90IGhhc2hfdmFsdWUoZm9vOjpjdXN0b21fdHlwZTxUPiB4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4geC5oYXNoKCk7CisgICAgICAgIH0KKyAgICB9CisKK0Z1bGwgY29kZSBmb3IgdGhpcyBleGFtcGxlIGlzIGF0CitbQGJvb3N0Oi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9leGFtcGxlcy9wb3J0YWJsZS5jcHAgL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2V4YW1wbGVzL3BvcnRhYmxlLmNwcF0uCisKK1tlbmRzZWN0XQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvZG9jL3JhdGlvbmFsZS5xYmsgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9kb2MvcmF0aW9uYWxlLnFiawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjIxMDgxCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvZG9jL3JhdGlvbmFsZS5xYmsKQEAgLTAsMCArMSw1MCBAQAorCitbLyBDb3B5cmlnaHQgMjAxMSBEYW5pZWwgSmFtZXMuCisgLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisgLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkgXQorCitbc2VjdGlvbjpyYXRpb25hbGUgUmF0aW9uYWxlXQorCitUaGUgcmF0aW9uYWxlIGNhbiBiZSBmb3VuZCBpbiB0aGUgb3JpZ2luYWwgZGVzaWduCitbZm9vdG5vdGUgaXNzdWUgNi4xOCBvZiB0aGUgX19pc3N1ZXNfXyAocGFnZSA2MyldLgorCitbaGVhZGluZyBRdWFsaXR5IG9mIHRoZSBoYXNoIGZ1bmN0aW9uXQorCitNYW55IGhhc2ggZnVuY3Rpb25zIHN0cml2ZSB0byBoYXZlIGxpdHRsZSBjb3JyZWxhdGlvbiBiZXR3ZWVuIHRoZSBpbnB1dAorYW5kIG91dHB1dCB2YWx1ZXMuIFRoZXkgYXR0ZW1wdCB0byB1bmlmb3JtYWxseSBkaXN0cmlidXRlIHRoZSBvdXRwdXQKK3ZhbHVlcyBmb3IgdmVyeSBzaW1pbGFyIGlucHV0cy4gVGhpcyBoYXNoIGZ1bmN0aW9uIG1ha2VzIG5vIHN1Y2gKK2F0dGVtcHQuIEluIGZhY3QsIGZvciBpbnRlZ2VycywgdGhlIHJlc3VsdCBvZiB0aGUgaGFzaCBmdW5jdGlvbiBpcyBvZnRlbgoranVzdCB0aGUgaW5wdXQgdmFsdWUuIFNvIHNpbWlsYXIgYnV0IGRpZmZlcmVudCBpbnB1dCB2YWx1ZXMgd2lsbCBvZnRlbgorcmVzdWx0IGluIHNpbWlsYXIgYnV0IGRpZmZlcmVudCBvdXRwdXQgdmFsdWVzLgorVGhpcyBtZWFucyB0aGF0IGl0IGlzIG5vdCBhcHByb3ByaWF0ZSBhcyBhIGdlbmVyYWwgaGFzaCBmdW5jdGlvbi4gRm9yCitleGFtcGxlLCBhIGhhc2ggdGFibGUgbWF5IGRpc2NhcmQgYml0cyBmcm9tIHRoZSBoYXNoIGZ1bmN0aW9uIHJlc3VsdGluZworaW4gbGlrZWx5IGNvbGxpc2lvbnMsIG9yIG1pZ2h0IGhhdmUgcG9vciBjb2xsaXNpb24gcmVzb2x1dGlvbiB3aGVuIGhhc2gKK3ZhbHVlcyBhcmUgY2x1c3RlcmVkIHRvZ2V0aGVyLiBJbiBzdWNoIGNhc2VzIHRoaXMgaGFzaCBmdW5jdGlvbiB3aWxsCitwcmVmb3JtIHBvb3JseS4KKworQnV0IHRoZSBzdGFuZGFyZCBoYXMgbm8gc3VjaCByZXF1aXJlbWVudCBmb3IgdGhlIGhhc2ggZnVuY3Rpb24sCitpdCBqdXN0IHJlcXVpcmVzIHRoYXQgdGhlIGhhc2hlcyBvZiB0d28gZGlmZmVyZW50IHZhbHVlcyBhcmUgdW5saWtlbHkKK3RvIGNvbGxpZGUuIENvbnRhaW5lcnMgb3IgYWxnb3JpdGhtcworZGVzaWduZWQgdG8gd29yayB3aXRoIHRoZSBzdGFuZGFyZCBoYXNoIGZ1bmN0aW9uIHdpbGwgaGF2ZSB0byBiZQoraW1wbGVtZW50ZWQgdG8gd29yayB3ZWxsIHdoZW4gdGhlIGhhc2ggZnVuY3Rpb24ncyBvdXRwdXQgaXMgY29ycmVsYXRlZAordG8gaXRzIGlucHV0LiBTaW5jZSB0aGV5IGFyZSBwYXlpbmcgdGhhdCBjb3N0IGEgaGlnaGVyIHF1YWxpdHkgaGFzaCBmdW5jdGlvbgord291bGQgYmUgd2FzdGVmdWwuCisKK0ZvciBvdGhlciB1c2UgY2FzZXMsIGlmIHlvdSBkbyBuZWVkIGEgaGlnaGVyIHF1YWxpdHkgaGFzaCBmdW5jdGlvbiwKK3RoZW4gbmVpdGhlciB0aGUgc3RhbmRhcmQgaGFzaCBmdW5jdGlvbiBvciBgYm9vc3Q6Omhhc2hgIGFyZSBhcHByb3ByaWF0ZS4KK1RoZXJlIGFyZSBzZXZlcmFsIG9wdGlvbnMKK2F2YWlsYWJsZS4gT25lIGlzIHRvIHVzZSBhIHNlY29uZCBoYXNoIG9uIHRoZSBvdXRwdXQgb2YgdGhpcyBoYXNoCitmdW5jdGlvbiwgc3VjaCBhcyBbQGh0dHA6Ly93d3cuY29uY2VudHJpYy5uZXQvfnR0d2FuZy90ZWNoL2ludGhhc2guaHRtCitUaG9tYXMgV2FuZydzIGhhc2ggZnVuY3Rpb25dLiBUaGlzIHRoaXMgbWF5IG5vdCB3b3JrIGFzCit3ZWxsIGFzIGEgaGFzaCBhbGdvcml0aG0gdGFpbG9yZWQgZm9yIHRoZSBpbnB1dC4KKworRm9yIHN0cmluZ3MgdGhlcmUgYXJlIHNldmVyYWwgZmFzdCwgaGlnaCBxdWFsaXR5IGhhc2ggZnVuY3Rpb25zCithdmFpbGFibGUgKGZvciBleGFtcGxlIFtAaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3NtaGFzaGVyLyBNdXJtdXJIYXNoM10KK2FuZCBbQGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaXR5aGFzaC8gR29vZ2xlJ3MgQ2l0eUhhc2hdKSwKK2FsdGhvdWdoIHRoZXkgdGVuZCB0byBiZSBtb3JlIG1hY2hpbmUgc3BlY2lmaWMuCitUaGVzZSBtYXkgYWxzbyBiZSBhcHByb3ByaWF0ZSBmb3IgaGFzaGluZyBhIGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZgoreW91ciBkYXRhIC0gcHJvdmlkaW5nIHRoYXQgYWxsIGVxdWFsIHZhbHVlcyBoYXZlIGFuIGVxdWFsCityZXByZXNlbnRhdGlvbiwgd2hpY2ggaXMgbm90IGFsd2F5cyB0aGUgY2FzZSAoZS5nLiBmb3IgZmxvYXRpbmcgcG9pbnQKK3ZhbHVlcykuCisKK1tlbmRzZWN0XQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvZG9jL3JlZi54bWwgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9kb2MvcmVmLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2M0MjdjCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvZG9jL3JlZi54bWwKQEAgLTAsMCArMSw4ODMgQEAKKworPCEtLQorQ29weXJpZ2h0IERhbmllbCBKYW1lcyAyMDA1LTIwMDkKK0Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKK2ZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorLS0+CisKKzxsaWJyYXJ5LXJlZmVyZW5jZT4KKyAgPHNlY3Rpb24gaWQ9Imhhc2gucmVmZXJlbmNlLnNwZWNpZmljYXRpb24iPgorICAgIDxwYXJhPkZvciB0aGUgZnVsbCBzcGVjaWZpY2F0aW9uLCBzZWUgc2VjdGlvbiA2LjMgb2YgdGhlCisgICAgICAgIDx1bGluayB1cmw9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMDUvbjE4MzYucGRmIj5DKysgU3RhbmRhcmQgTGlicmFyeSBUZWNobmljYWwgUmVwb3J0PC91bGluaz4KKyAgICAgICAgYW5kIGlzc3VlIDYuMTggb2YgdGhlCisgICAgICAgIDx1bGluayB1cmw9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvcGFwZXJzLzIwMDUvbjE4MzcucGRmIj5MaWJyYXJ5IEV4dGVuc2lvbiBUZWNobmljYWwgUmVwb3J0IElzc3VlcyBMaXN0PC91bGluaz4gKHBhZ2UgNjMpLgorICAgIDwvcGFyYT4KKyAgPC9zZWN0aW9uPgorICA8aGVhZGVyIG5hbWU9ImJvb3N0L2Z1bmN0aW9uYWwvaGFzaC5ocHAiPgorICAgIDxwYXJhPgorICAgICAgRGVmaW5lcyA8Y29kZT48Y2xhc3NuYW1lPmJvb3N0OjpoYXNoPC9jbGFzc25hbWU+PC9jb2RlPiwKKyAgICAgIGFuZCBoZWxwZXIgZnVuY3Rpb25zLgorICAgIDwvcGFyYT4KKworICAgIDxuYW1lc3BhY2UgbmFtZT0iYm9vc3QiPgorCisgICAgICA8IS0tCisgICAgICAgIGJvb3N0OjpoYXNoCisgICAgICAgIC0tPgorCisgICAgICA8c3RydWN0IG5hbWU9Imhhc2giPgorICAgICAgICA8dGVtcGxhdGU+CisgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlQiLz4KKyAgICAgICAgPC90ZW1wbGF0ZT4KKworICAgICAgICA8aW5oZXJpdCBhY2Nlc3M9InB1YmxpYyI+CisgICAgICAgICAgPGNsYXNzbmFtZT5zdGQ6OnVuYXJ5X2Z1bmN0aW9uJmx0O1QsIHN0ZDo6c2l6ZV90Jmd0OzwvY2xhc3NuYW1lPgorICAgICAgICA8L2luaGVyaXQ+CisKKyAgICAgICAgPHB1cnBvc2U+PHNpbXBhcmE+QSA8dWxpbmsgdXJsPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL3BhcGVycy8yMDA1L24xODM2LnBkZiI+VFIxPC91bGluaz4gY29tcGxpYW50IGhhc2ggZnVuY3Rpb24gb2JqZWN0Ljwvc2ltcGFyYT48L3B1cnBvc2U+CisKKyAgICAgICAgPG1ldGhvZCBuYW1lPSJvcGVyYXRvcigpIiBjdj0iY29uc3QiPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj4KKyAgICAgICAgICAgIDxwYXJhbXR5cGU+VCBjb25zdCZhbXA7PC9wYXJhbXR5cGU+CisgICAgICAgICAgPC9wYXJhbWV0ZXI+CisgICAgICAgICAgPHJldHVybnM+PHBhcmE+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+PGZ1bmN0aW9ubmFtZT5oYXNoX3ZhbHVlPC9mdW5jdGlvbm5hbWU+KHZhbCk8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvcGFyYT48L3JldHVybnM+CisgICAgICAgICAgPG5vdGVzPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIFRoZSBjYWxsIHRvIDxjb2RlPjxmdW5jdGlvbm5hbWU+aGFzaF92YWx1ZTwvZnVuY3Rpb25uYW1lPjwvY29kZT4KKyAgICAgICAgICAgICAgaXMgdW5xdWFsaWZpZWQsIHNvIHRoYXQgY3VzdG9tIG92ZXJsb2FkcyBjYW4gYmUKKyAgICAgICAgICAgICAgZm91bmQgdmlhIGFyZ3VtZW50IGRlcGVuZGVudCBsb29rdXAuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgVGhpcyBpcyBub3QgZGVmaW5lZCB3aGVuIHRoZSBtYWNybyA8Y29kZT5CT09TVF9IQVNIX05PX0VYVEVOU0lPTlM8L2NvZGU+CisgICAgICAgICAgICAgIGlzIGRlZmluZWQuIFRoZSBzcGVjaWFsaXphdGlvbnMgYXJlIHN0aWxsIGRlZmluZWQsIHNvIG9ubHkgdGhlIHNwZWNpYWxpemF0aW9ucworICAgICAgICAgICAgICByZXF1aXJlZCBieSBUUjEgYXJlIGRlZmluZWQuCisgICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgRm9yd2FyZCBkZWNsYXJlZCBpbgorICAgICAgICAgICAgICA8Y29kZT4mbHQ7Ym9vc3QvZnVuY3Rpb25hbC9oYXNoX2Z3ZC5ocHAmZ3Q7PC9jb2RlPgorICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbm90ZXM+CisgICAgICAgICAgPHRocm93cz48cGFyYT4KKyAgICAgICAgICAgIE9ubHkgdGhyb3dzIGlmCisgICAgICAgICAgICA8Y29kZT48ZnVuY3Rpb25uYW1lPmhhc2hfdmFsdWU8L2Z1bmN0aW9ubmFtZT4oVCk8L2NvZGU+IHRocm93cy4KKyAgICAgICAgICA8L3BhcmE+PC90aHJvd3M+CisgICAgICAgIDwvbWV0aG9kPgorICAgICAgPC9zdHJ1Y3Q+CisKKyAgICAgIDxzdHJ1Y3Qtc3BlY2lhbGl6YXRpb24gbmFtZT0iaGFzaCI+CisgICAgICAgIDx0ZW1wbGF0ZT48L3RlbXBsYXRlPgorICAgICAgICA8c3BlY2lhbGl6YXRpb24+CisgICAgICAgICAgPHRlbXBsYXRlLWFyZz5ib29sPC90ZW1wbGF0ZS1hcmc+CisgICAgICAgIDwvc3BlY2lhbGl6YXRpb24+CisgICAgICAgIDxtZXRob2QgbmFtZT0ib3BlcmF0b3IoKSIgY3Y9ImNvbnN0Ij4KKyAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+CisgICAgICAgICAgICA8cGFyYW10eXBlPmJvb2w8L3BhcmFtdHlwZT4KKyAgICAgICAgICA8L3BhcmFtZXRlcj4KKyAgICAgICAgICA8cmV0dXJucz4KKyAgICAgICAgICAgIDxwYXJhPlVuc3BlY2lmaWVkIGluIFRSMSwgZXhjZXB0IHRoYXQgZXF1YWwgYXJndW1lbnRzIHlpZWxkIHRoZSBzYW1lIHJlc3VsdC48L3BhcmE+CisgICAgICAgICAgICA8cGFyYT48ZnVuY3Rpb25uYW1lPmhhc2hfdmFsdWU8L2Z1bmN0aW9ubmFtZT4odmFsKSBpbiBCb29zdC48L3BhcmE+CisgICAgICAgICAgPC9yZXR1cm5zPgorICAgICAgICAgIDx0aHJvd3M+PHBhcmE+RG9lc24ndCB0aHJvdzwvcGFyYT48L3Rocm93cz4KKyAgICAgICAgPC9tZXRob2Q+CisgICAgICA8L3N0cnVjdC1zcGVjaWFsaXphdGlvbj4KKworICAgICAgPHN0cnVjdC1zcGVjaWFsaXphdGlvbiBuYW1lPSJoYXNoIj4KKyAgICAgICAgPHRlbXBsYXRlPjwvdGVtcGxhdGU+CisgICAgICAgIDxzcGVjaWFsaXphdGlvbj4KKyAgICAgICAgICA8dGVtcGxhdGUtYXJnPmNoYXI8L3RlbXBsYXRlLWFyZz4KKyAgICAgICAgPC9zcGVjaWFsaXphdGlvbj4KKyAgICAgICAgPG1ldGhvZCBuYW1lPSJvcGVyYXRvcigpIiBjdj0iY29uc3QiPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj4KKyAgICAgICAgICAgIDxwYXJhbXR5cGU+Y2hhcjwvcGFyYW10eXBlPgorICAgICAgICAgIDwvcGFyYW1ldGVyPgorICAgICAgICAgIDxyZXR1cm5zPgorICAgICAgICAgICAgPHBhcmE+VW5zcGVjaWZpZWQgaW4gVFIxLCBleGNlcHQgdGhhdCBlcXVhbCBhcmd1bWVudHMgeWllbGQgdGhlIHNhbWUgcmVzdWx0LjwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPjxmdW5jdGlvbm5hbWU+aGFzaF92YWx1ZTwvZnVuY3Rpb25uYW1lPih2YWwpIGluIEJvb3N0LjwvcGFyYT4KKyAgICAgICAgICA8L3JldHVybnM+CisgICAgICAgICAgPHRocm93cz48cGFyYT5Eb2Vzbid0IHRocm93PC9wYXJhPjwvdGhyb3dzPgorICAgICAgICA8L21ldGhvZD4KKyAgICAgIDwvc3RydWN0LXNwZWNpYWxpemF0aW9uPgorCisgICAgICA8c3RydWN0LXNwZWNpYWxpemF0aW9uIG5hbWU9Imhhc2giPgorICAgICAgICA8dGVtcGxhdGU+PC90ZW1wbGF0ZT4KKyAgICAgICAgPHNwZWNpYWxpemF0aW9uPgorICAgICAgICAgIDx0ZW1wbGF0ZS1hcmc+c2lnbmVkIGNoYXI8L3RlbXBsYXRlLWFyZz4KKyAgICAgICAgPC9zcGVjaWFsaXphdGlvbj4KKyAgICAgICAgPG1ldGhvZCBuYW1lPSJvcGVyYXRvcigpIiBjdj0iY29uc3QiPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj4KKyAgICAgICAgICAgIDxwYXJhbXR5cGU+c2lnbmVkIGNoYXI8L3BhcmFtdHlwZT4KKyAgICAgICAgICA8L3BhcmFtZXRlcj4KKyAgICAgICAgICA8cmV0dXJucz4KKyAgICAgICAgICAgIDxwYXJhPlVuc3BlY2lmaWVkIGluIFRSMSwgZXhjZXB0IHRoYXQgZXF1YWwgYXJndW1lbnRzIHlpZWxkIHRoZSBzYW1lIHJlc3VsdC48L3BhcmE+CisgICAgICAgICAgICA8cGFyYT48ZnVuY3Rpb25uYW1lPmhhc2hfdmFsdWU8L2Z1bmN0aW9ubmFtZT4odmFsKSBpbiBCb29zdC48L3BhcmE+CisgICAgICAgICAgPC9yZXR1cm5zPgorICAgICAgICAgIDx0aHJvd3M+PHBhcmE+RG9lc24ndCB0aHJvdzwvcGFyYT48L3Rocm93cz4KKyAgICAgICAgPC9tZXRob2Q+CisgICAgICA8L3N0cnVjdC1zcGVjaWFsaXphdGlvbj4KKworICAgICAgPHN0cnVjdC1zcGVjaWFsaXphdGlvbiBuYW1lPSJoYXNoIj4KKyAgICAgICAgPHRlbXBsYXRlPjwvdGVtcGxhdGU+CisgICAgICAgIDxzcGVjaWFsaXphdGlvbj4KKyAgICAgICAgICA8dGVtcGxhdGUtYXJnPnVuc2lnbmVkIGNoYXI8L3RlbXBsYXRlLWFyZz4KKyAgICAgICAgPC9zcGVjaWFsaXphdGlvbj4KKyAgICAgICAgPG1ldGhvZCBuYW1lPSJvcGVyYXRvcigpIiBjdj0iY29uc3QiPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj4KKyAgICAgICAgICAgIDxwYXJhbXR5cGU+dW5zaWduZWQgY2hhcjwvcGFyYW10eXBlPgorICAgICAgICAgIDwvcGFyYW1ldGVyPgorICAgICAgICAgIDxyZXR1cm5zPgorICAgICAgICAgICAgPHBhcmE+VW5zcGVjaWZpZWQgaW4gVFIxLCBleGNlcHQgdGhhdCBlcXVhbCBhcmd1bWVudHMgeWllbGQgdGhlIHNhbWUgcmVzdWx0LjwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPjxmdW5jdGlvbm5hbWU+aGFzaF92YWx1ZTwvZnVuY3Rpb25uYW1lPih2YWwpIGluIEJvb3N0LjwvcGFyYT4KKyAgICAgICAgICA8L3JldHVybnM+CisgICAgICAgICAgPHRocm93cz48cGFyYT5Eb2Vzbid0IHRocm93PC9wYXJhPjwvdGhyb3dzPgorICAgICAgICA8L21ldGhvZD4KKyAgICAgIDwvc3RydWN0LXNwZWNpYWxpemF0aW9uPgorCisgICAgICA8c3RydWN0LXNwZWNpYWxpemF0aW9uIG5hbWU9Imhhc2giPgorICAgICAgICA8dGVtcGxhdGU+PC90ZW1wbGF0ZT4KKyAgICAgICAgPHNwZWNpYWxpemF0aW9uPgorICAgICAgICAgIDx0ZW1wbGF0ZS1hcmc+d2NoYXJfdDwvdGVtcGxhdGUtYXJnPgorICAgICAgICA8L3NwZWNpYWxpemF0aW9uPgorICAgICAgICA8bWV0aG9kIG5hbWU9Im9wZXJhdG9yKCkiIGN2PSJjb25zdCI+CisgICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPgorICAgICAgICAgICAgPHBhcmFtdHlwZT53Y2hhcl90PC9wYXJhbXR5cGU+CisgICAgICAgICAgPC9wYXJhbWV0ZXI+CisgICAgICAgICAgPHJldHVybnM+CisgICAgICAgICAgICA8cGFyYT5VbnNwZWNpZmllZCBpbiBUUjEsIGV4Y2VwdCB0aGF0IGVxdWFsIGFyZ3VtZW50cyB5aWVsZCB0aGUgc2FtZSByZXN1bHQuPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+PGZ1bmN0aW9ubmFtZT5oYXNoX3ZhbHVlPC9mdW5jdGlvbm5hbWU+KHZhbCkgaW4gQm9vc3QuPC9wYXJhPgorICAgICAgICAgIDwvcmV0dXJucz4KKyAgICAgICAgICA8dGhyb3dzPjxwYXJhPkRvZXNuJ3QgdGhyb3c8L3BhcmE+PC90aHJvd3M+CisgICAgICAgIDwvbWV0aG9kPgorICAgICAgPC9zdHJ1Y3Qtc3BlY2lhbGl6YXRpb24+CisKKyAgICAgIDxzdHJ1Y3Qtc3BlY2lhbGl6YXRpb24gbmFtZT0iaGFzaCI+CisgICAgICAgIDx0ZW1wbGF0ZT48L3RlbXBsYXRlPgorICAgICAgICA8c3BlY2lhbGl6YXRpb24+CisgICAgICAgICAgPHRlbXBsYXRlLWFyZz5zaG9ydDwvdGVtcGxhdGUtYXJnPgorICAgICAgICA8L3NwZWNpYWxpemF0aW9uPgorICAgICAgICA8bWV0aG9kIG5hbWU9Im9wZXJhdG9yKCkiIGN2PSJjb25zdCI+CisgICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPgorICAgICAgICAgICAgPHBhcmFtdHlwZT5zaG9ydDwvcGFyYW10eXBlPgorICAgICAgICAgIDwvcGFyYW1ldGVyPgorICAgICAgICAgIDxyZXR1cm5zPgorICAgICAgICAgICAgPHBhcmE+VW5zcGVjaWZpZWQgaW4gVFIxLCBleGNlcHQgdGhhdCBlcXVhbCBhcmd1bWVudHMgeWllbGQgdGhlIHNhbWUgcmVzdWx0LjwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPjxmdW5jdGlvbm5hbWU+aGFzaF92YWx1ZTwvZnVuY3Rpb25uYW1lPih2YWwpIGluIEJvb3N0LjwvcGFyYT4KKyAgICAgICAgICA8L3JldHVybnM+CisgICAgICAgICAgPHRocm93cz48cGFyYT5Eb2Vzbid0IHRocm93PC9wYXJhPjwvdGhyb3dzPgorICAgICAgICA8L21ldGhvZD4KKyAgICAgIDwvc3RydWN0LXNwZWNpYWxpemF0aW9uPgorCisgICAgICA8c3RydWN0LXNwZWNpYWxpemF0aW9uIG5hbWU9Imhhc2giPgorICAgICAgICA8dGVtcGxhdGU+PC90ZW1wbGF0ZT4KKyAgICAgICAgPHNwZWNpYWxpemF0aW9uPgorICAgICAgICAgIDx0ZW1wbGF0ZS1hcmc+dW5zaWduZWQgc2hvcnQ8L3RlbXBsYXRlLWFyZz4KKyAgICAgICAgPC9zcGVjaWFsaXphdGlvbj4KKyAgICAgICAgPG1ldGhvZCBuYW1lPSJvcGVyYXRvcigpIiBjdj0iY29uc3QiPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj4KKyAgICAgICAgICAgIDxwYXJhbXR5cGU+dW5zaWduZWQgc2hvcnQ8L3BhcmFtdHlwZT4KKyAgICAgICAgICA8L3BhcmFtZXRlcj4KKyAgICAgICAgICA8cmV0dXJucz4KKyAgICAgICAgICAgIDxwYXJhPlVuc3BlY2lmaWVkIGluIFRSMSwgZXhjZXB0IHRoYXQgZXF1YWwgYXJndW1lbnRzIHlpZWxkIHRoZSBzYW1lIHJlc3VsdC48L3BhcmE+CisgICAgICAgICAgICA8cGFyYT48ZnVuY3Rpb25uYW1lPmhhc2hfdmFsdWU8L2Z1bmN0aW9ubmFtZT4odmFsKSBpbiBCb29zdC48L3BhcmE+CisgICAgICAgICAgPC9yZXR1cm5zPgorICAgICAgICAgIDx0aHJvd3M+PHBhcmE+RG9lc24ndCB0aHJvdzwvcGFyYT48L3Rocm93cz4KKyAgICAgICAgPC9tZXRob2Q+CisgICAgICA8L3N0cnVjdC1zcGVjaWFsaXphdGlvbj4KKworICAgICAgPHN0cnVjdC1zcGVjaWFsaXphdGlvbiBuYW1lPSJoYXNoIj4KKyAgICAgICAgPHRlbXBsYXRlPjwvdGVtcGxhdGU+CisgICAgICAgIDxzcGVjaWFsaXphdGlvbj4KKyAgICAgICAgICA8dGVtcGxhdGUtYXJnPmludDwvdGVtcGxhdGUtYXJnPgorICAgICAgICA8L3NwZWNpYWxpemF0aW9uPgorICAgICAgICA8bWV0aG9kIG5hbWU9Im9wZXJhdG9yKCkiIGN2PSJjb25zdCI+CisgICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPgorICAgICAgICAgICAgPHBhcmFtdHlwZT5pbnQ8L3BhcmFtdHlwZT4KKyAgICAgICAgICA8L3BhcmFtZXRlcj4KKyAgICAgICAgICA8cmV0dXJucz4KKyAgICAgICAgICAgIDxwYXJhPlVuc3BlY2lmaWVkIGluIFRSMSwgZXhjZXB0IHRoYXQgZXF1YWwgYXJndW1lbnRzIHlpZWxkIHRoZSBzYW1lIHJlc3VsdC48L3BhcmE+CisgICAgICAgICAgICA8cGFyYT48ZnVuY3Rpb25uYW1lPmhhc2hfdmFsdWU8L2Z1bmN0aW9ubmFtZT4odmFsKSBpbiBCb29zdC48L3BhcmE+CisgICAgICAgICAgPC9yZXR1cm5zPgorICAgICAgICAgIDx0aHJvd3M+PHBhcmE+RG9lc24ndCB0aHJvdzwvcGFyYT48L3Rocm93cz4KKyAgICAgICAgPC9tZXRob2Q+CisgICAgICA8L3N0cnVjdC1zcGVjaWFsaXphdGlvbj4KKworICAgICAgPHN0cnVjdC1zcGVjaWFsaXphdGlvbiBuYW1lPSJoYXNoIj4KKyAgICAgICAgPHRlbXBsYXRlPjwvdGVtcGxhdGU+CisgICAgICAgIDxzcGVjaWFsaXphdGlvbj4KKyAgICAgICAgICA8dGVtcGxhdGUtYXJnPnVuc2lnbmVkIGludDwvdGVtcGxhdGUtYXJnPgorICAgICAgICA8L3NwZWNpYWxpemF0aW9uPgorICAgICAgICA8bWV0aG9kIG5hbWU9Im9wZXJhdG9yKCkiIGN2PSJjb25zdCI+CisgICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPgorICAgICAgICAgICAgPHBhcmFtdHlwZT51bnNpZ25lZCBpbnQ8L3BhcmFtdHlwZT4KKyAgICAgICAgICA8L3BhcmFtZXRlcj4KKyAgICAgICAgICA8cmV0dXJucz4KKyAgICAgICAgICAgIDxwYXJhPlVuc3BlY2lmaWVkIGluIFRSMSwgZXhjZXB0IHRoYXQgZXF1YWwgYXJndW1lbnRzIHlpZWxkIHRoZSBzYW1lIHJlc3VsdC48L3BhcmE+CisgICAgICAgICAgICA8cGFyYT48ZnVuY3Rpb25uYW1lPmhhc2hfdmFsdWU8L2Z1bmN0aW9ubmFtZT4odmFsKSBpbiBCb29zdC48L3BhcmE+CisgICAgICAgICAgPC9yZXR1cm5zPgorICAgICAgICAgIDx0aHJvd3M+PHBhcmE+RG9lc24ndCB0aHJvdzwvcGFyYT48L3Rocm93cz4KKyAgICAgICAgPC9tZXRob2Q+CisgICAgICA8L3N0cnVjdC1zcGVjaWFsaXphdGlvbj4KKworICAgICAgPHN0cnVjdC1zcGVjaWFsaXphdGlvbiBuYW1lPSJoYXNoIj4KKyAgICAgICAgPHRlbXBsYXRlPjwvdGVtcGxhdGU+CisgICAgICAgIDxzcGVjaWFsaXphdGlvbj4KKyAgICAgICAgICA8dGVtcGxhdGUtYXJnPmxvbmc8L3RlbXBsYXRlLWFyZz4KKyAgICAgICAgPC9zcGVjaWFsaXphdGlvbj4KKyAgICAgICAgPG1ldGhvZCBuYW1lPSJvcGVyYXRvcigpIiBjdj0iY29uc3QiPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj4KKyAgICAgICAgICAgIDxwYXJhbXR5cGU+bG9uZzwvcGFyYW10eXBlPgorICAgICAgICAgIDwvcGFyYW1ldGVyPgorICAgICAgICAgIDxyZXR1cm5zPgorICAgICAgICAgICAgPHBhcmE+VW5zcGVjaWZpZWQgaW4gVFIxLCBleGNlcHQgdGhhdCBlcXVhbCBhcmd1bWVudHMgeWllbGQgdGhlIHNhbWUgcmVzdWx0LjwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPjxmdW5jdGlvbm5hbWU+aGFzaF92YWx1ZTwvZnVuY3Rpb25uYW1lPih2YWwpIGluIEJvb3N0LjwvcGFyYT4KKyAgICAgICAgICA8L3JldHVybnM+CisgICAgICAgICAgPHRocm93cz48cGFyYT5Eb2Vzbid0IHRocm93PC9wYXJhPjwvdGhyb3dzPgorICAgICAgICA8L21ldGhvZD4KKyAgICAgIDwvc3RydWN0LXNwZWNpYWxpemF0aW9uPgorCisgICAgICA8c3RydWN0LXNwZWNpYWxpemF0aW9uIG5hbWU9Imhhc2giPgorICAgICAgICA8dGVtcGxhdGU+PC90ZW1wbGF0ZT4KKyAgICAgICAgPHNwZWNpYWxpemF0aW9uPgorICAgICAgICAgIDx0ZW1wbGF0ZS1hcmc+dW5zaWduZWQgbG9uZzwvdGVtcGxhdGUtYXJnPgorICAgICAgICA8L3NwZWNpYWxpemF0aW9uPgorICAgICAgICA8bWV0aG9kIG5hbWU9Im9wZXJhdG9yKCkiIGN2PSJjb25zdCI+CisgICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPgorICAgICAgICAgICAgPHBhcmFtdHlwZT51bnNpZ25lZCBsb25nPC9wYXJhbXR5cGU+CisgICAgICAgICAgPC9wYXJhbWV0ZXI+CisgICAgICAgICAgPHJldHVybnM+CisgICAgICAgICAgICA8cGFyYT5VbnNwZWNpZmllZCBpbiBUUjEsIGV4Y2VwdCB0aGF0IGVxdWFsIGFyZ3VtZW50cyB5aWVsZCB0aGUgc2FtZSByZXN1bHQuPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+PGZ1bmN0aW9ubmFtZT5oYXNoX3ZhbHVlPC9mdW5jdGlvbm5hbWU+KHZhbCkgaW4gQm9vc3QuPC9wYXJhPgorICAgICAgICAgIDwvcmV0dXJucz4KKyAgICAgICAgICA8dGhyb3dzPjxwYXJhPkRvZXNuJ3QgdGhyb3c8L3BhcmE+PC90aHJvd3M+CisgICAgICAgIDwvbWV0aG9kPgorICAgICAgPC9zdHJ1Y3Qtc3BlY2lhbGl6YXRpb24+CisKKyAgICAgIDxzdHJ1Y3Qtc3BlY2lhbGl6YXRpb24gbmFtZT0iaGFzaCI+CisgICAgICAgIDx0ZW1wbGF0ZT48L3RlbXBsYXRlPgorICAgICAgICA8c3BlY2lhbGl6YXRpb24+CisgICAgICAgICAgPHRlbXBsYXRlLWFyZz5sb25nIGxvbmc8L3RlbXBsYXRlLWFyZz4KKyAgICAgICAgPC9zcGVjaWFsaXphdGlvbj4KKyAgICAgICAgPG1ldGhvZCBuYW1lPSJvcGVyYXRvcigpIiBjdj0iY29uc3QiPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj4KKyAgICAgICAgICAgIDxwYXJhbXR5cGU+bG9uZyBsb25nPC9wYXJhbXR5cGU+CisgICAgICAgICAgPC9wYXJhbWV0ZXI+CisgICAgICAgICAgPHJldHVybnM+CisgICAgICAgICAgICA8cGFyYT5VbnNwZWNpZmllZCBpbiBUUjEsIGV4Y2VwdCB0aGF0IGVxdWFsIGFyZ3VtZW50cyB5aWVsZCB0aGUgc2FtZSByZXN1bHQuPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+PGZ1bmN0aW9ubmFtZT5oYXNoX3ZhbHVlPC9mdW5jdGlvbm5hbWU+KHZhbCkgaW4gQm9vc3QuPC9wYXJhPgorICAgICAgICAgIDwvcmV0dXJucz4KKyAgICAgICAgICA8dGhyb3dzPjxwYXJhPkRvZXNuJ3QgdGhyb3c8L3BhcmE+PC90aHJvd3M+CisgICAgICAgIDwvbWV0aG9kPgorICAgICAgPC9zdHJ1Y3Qtc3BlY2lhbGl6YXRpb24+CisKKyAgICAgIDxzdHJ1Y3Qtc3BlY2lhbGl6YXRpb24gbmFtZT0iaGFzaCI+CisgICAgICAgIDx0ZW1wbGF0ZT48L3RlbXBsYXRlPgorICAgICAgICA8c3BlY2lhbGl6YXRpb24+CisgICAgICAgICAgPHRlbXBsYXRlLWFyZz51bnNpZ25lZCBsb25nIGxvbmc8L3RlbXBsYXRlLWFyZz4KKyAgICAgICAgPC9zcGVjaWFsaXphdGlvbj4KKyAgICAgICAgPG1ldGhvZCBuYW1lPSJvcGVyYXRvcigpIiBjdj0iY29uc3QiPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj4KKyAgICAgICAgICAgIDxwYXJhbXR5cGU+dW5zaWduZWQgbG9uZyBsb25nPC9wYXJhbXR5cGU+CisgICAgICAgICAgPC9wYXJhbWV0ZXI+CisgICAgICAgICAgPHJldHVybnM+CisgICAgICAgICAgICA8cGFyYT5VbnNwZWNpZmllZCBpbiBUUjEsIGV4Y2VwdCB0aGF0IGVxdWFsIGFyZ3VtZW50cyB5aWVsZCB0aGUgc2FtZSByZXN1bHQuPC9wYXJhPgorICAgICAgICAgICAgPHBhcmE+PGZ1bmN0aW9ubmFtZT5oYXNoX3ZhbHVlPC9mdW5jdGlvbm5hbWU+KHZhbCkgaW4gQm9vc3QuPC9wYXJhPgorICAgICAgICAgIDwvcmV0dXJucz4KKyAgICAgICAgICA8dGhyb3dzPjxwYXJhPkRvZXNuJ3QgdGhyb3c8L3BhcmE+PC90aHJvd3M+CisgICAgICAgIDwvbWV0aG9kPgorICAgICAgPC9zdHJ1Y3Qtc3BlY2lhbGl6YXRpb24+CisKKyAgICAgIDxzdHJ1Y3Qtc3BlY2lhbGl6YXRpb24gbmFtZT0iaGFzaCI+CisgICAgICAgIDx0ZW1wbGF0ZT48L3RlbXBsYXRlPgorICAgICAgICA8c3BlY2lhbGl6YXRpb24+CisgICAgICAgICAgPHRlbXBsYXRlLWFyZz5mbG9hdDwvdGVtcGxhdGUtYXJnPgorICAgICAgICA8L3NwZWNpYWxpemF0aW9uPgorICAgICAgICA8bWV0aG9kIG5hbWU9Im9wZXJhdG9yKCkiIGN2PSJjb25zdCI+CisgICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPgorICAgICAgICAgICAgPHBhcmFtdHlwZT5mbG9hdDwvcGFyYW10eXBlPgorICAgICAgICAgIDwvcGFyYW1ldGVyPgorICAgICAgICAgIDxyZXR1cm5zPgorICAgICAgICAgICAgPHBhcmE+VW5zcGVjaWZpZWQgaW4gVFIxLCBleGNlcHQgdGhhdCBlcXVhbCBhcmd1bWVudHMgeWllbGQgdGhlIHNhbWUgcmVzdWx0LjwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPjxmdW5jdGlvbm5hbWU+aGFzaF92YWx1ZTwvZnVuY3Rpb25uYW1lPih2YWwpIGluIEJvb3N0LjwvcGFyYT4KKyAgICAgICAgICA8L3JldHVybnM+CisgICAgICAgICAgPHRocm93cz48cGFyYT5Eb2Vzbid0IHRocm93PC9wYXJhPjwvdGhyb3dzPgorICAgICAgICA8L21ldGhvZD4KKyAgICAgIDwvc3RydWN0LXNwZWNpYWxpemF0aW9uPgorCisgICAgICA8c3RydWN0LXNwZWNpYWxpemF0aW9uIG5hbWU9Imhhc2giPgorICAgICAgICA8dGVtcGxhdGU+PC90ZW1wbGF0ZT4KKyAgICAgICAgPHNwZWNpYWxpemF0aW9uPgorICAgICAgICAgIDx0ZW1wbGF0ZS1hcmc+ZG91YmxlPC90ZW1wbGF0ZS1hcmc+CisgICAgICAgIDwvc3BlY2lhbGl6YXRpb24+CisgICAgICAgIDxtZXRob2QgbmFtZT0ib3BlcmF0b3IoKSIgY3Y9ImNvbnN0Ij4KKyAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+CisgICAgICAgICAgICA8cGFyYW10eXBlPmRvdWJsZTwvcGFyYW10eXBlPgorICAgICAgICAgIDwvcGFyYW1ldGVyPgorICAgICAgICAgIDxyZXR1cm5zPgorICAgICAgICAgICAgPHBhcmE+VW5zcGVjaWZpZWQgaW4gVFIxLCBleGNlcHQgdGhhdCBlcXVhbCBhcmd1bWVudHMgeWllbGQgdGhlIHNhbWUgcmVzdWx0LjwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPjxmdW5jdGlvbm5hbWU+aGFzaF92YWx1ZTwvZnVuY3Rpb25uYW1lPih2YWwpIGluIEJvb3N0LjwvcGFyYT4KKyAgICAgICAgICA8L3JldHVybnM+CisgICAgICAgICAgPHRocm93cz48cGFyYT5Eb2Vzbid0IHRocm93PC9wYXJhPjwvdGhyb3dzPgorICAgICAgICA8L21ldGhvZD4KKyAgICAgIDwvc3RydWN0LXNwZWNpYWxpemF0aW9uPgorCisgICAgICA8c3RydWN0LXNwZWNpYWxpemF0aW9uIG5hbWU9Imhhc2giPgorICAgICAgICA8dGVtcGxhdGU+PC90ZW1wbGF0ZT4KKyAgICAgICAgPHNwZWNpYWxpemF0aW9uPgorICAgICAgICAgIDx0ZW1wbGF0ZS1hcmc+bG9uZyBkb3VibGU8L3RlbXBsYXRlLWFyZz4KKyAgICAgICAgPC9zcGVjaWFsaXphdGlvbj4KKyAgICAgICAgPG1ldGhvZCBuYW1lPSJvcGVyYXRvcigpIiBjdj0iY29uc3QiPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj4KKyAgICAgICAgICAgIDxwYXJhbXR5cGU+bG9uZyBkb3VibGU8L3BhcmFtdHlwZT4KKyAgICAgICAgICA8L3BhcmFtZXRlcj4KKyAgICAgICAgICA8cmV0dXJucz4KKyAgICAgICAgICAgIDxwYXJhPlVuc3BlY2lmaWVkIGluIFRSMSwgZXhjZXB0IHRoYXQgZXF1YWwgYXJndW1lbnRzIHlpZWxkIHRoZSBzYW1lIHJlc3VsdC48L3BhcmE+CisgICAgICAgICAgICA8cGFyYT48ZnVuY3Rpb25uYW1lPmhhc2hfdmFsdWU8L2Z1bmN0aW9ubmFtZT4odmFsKSBpbiBCb29zdC48L3BhcmE+CisgICAgICAgICAgPC9yZXR1cm5zPgorICAgICAgICAgIDx0aHJvd3M+PHBhcmE+RG9lc24ndCB0aHJvdzwvcGFyYT48L3Rocm93cz4KKyAgICAgICAgPC9tZXRob2Q+CisgICAgICA8L3N0cnVjdC1zcGVjaWFsaXphdGlvbj4KKworICAgICAgPHN0cnVjdC1zcGVjaWFsaXphdGlvbiBuYW1lPSJoYXNoIj4KKyAgICAgICAgPHRlbXBsYXRlPjwvdGVtcGxhdGU+CisgICAgICAgIDxzcGVjaWFsaXphdGlvbj4KKyAgICAgICAgICA8dGVtcGxhdGUtYXJnPnN0ZDo6c3RyaW5nPC90ZW1wbGF0ZS1hcmc+CisgICAgICAgIDwvc3BlY2lhbGl6YXRpb24+CisgICAgICAgIDxtZXRob2QgbmFtZT0ib3BlcmF0b3IoKSIgY3Y9ImNvbnN0Ij4KKyAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+CisgICAgICAgICAgICA8cGFyYW10eXBlPnN0ZDo6c3RyaW5nIGNvbnN0JmFtcDs8L3BhcmFtdHlwZT4KKyAgICAgICAgICA8L3BhcmFtZXRlcj4KKyAgICAgICAgICA8cmV0dXJucz4KKyAgICAgICAgICAgIDxwYXJhPlVuc3BlY2lmaWVkIGluIFRSMSwgZXhjZXB0IHRoYXQgZXF1YWwgYXJndW1lbnRzIHlpZWxkIHRoZSBzYW1lIHJlc3VsdC48L3BhcmE+CisgICAgICAgICAgICA8cGFyYT48ZnVuY3Rpb25uYW1lPmhhc2hfdmFsdWU8L2Z1bmN0aW9ubmFtZT4odmFsKSBpbiBCb29zdC48L3BhcmE+CisgICAgICAgICAgPC9yZXR1cm5zPgorICAgICAgICAgIDx0aHJvd3M+PHBhcmE+RG9lc24ndCB0aHJvdzwvcGFyYT48L3Rocm93cz4KKyAgICAgICAgPC9tZXRob2Q+CisgICAgICA8L3N0cnVjdC1zcGVjaWFsaXphdGlvbj4KKworICAgICAgPHN0cnVjdC1zcGVjaWFsaXphdGlvbiBuYW1lPSJoYXNoIj4KKyAgICAgICAgPHRlbXBsYXRlPjwvdGVtcGxhdGU+CisgICAgICAgIDxzcGVjaWFsaXphdGlvbj4KKyAgICAgICAgICA8dGVtcGxhdGUtYXJnPnN0ZDo6d3N0cmluZzwvdGVtcGxhdGUtYXJnPgorICAgICAgICA8L3NwZWNpYWxpemF0aW9uPgorICAgICAgICA8bWV0aG9kIG5hbWU9Im9wZXJhdG9yKCkiIGN2PSJjb25zdCI+CisgICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPgorICAgICAgICAgICAgPHBhcmFtdHlwZT5zdGQ6OndzdHJpbmcgY29uc3QmYW1wOzwvcGFyYW10eXBlPgorICAgICAgICAgIDwvcGFyYW1ldGVyPgorICAgICAgICAgIDxyZXR1cm5zPgorICAgICAgICAgICAgPHBhcmE+VW5zcGVjaWZpZWQgaW4gVFIxLCBleGNlcHQgdGhhdCBlcXVhbCBhcmd1bWVudHMgeWllbGQgdGhlIHNhbWUgcmVzdWx0LjwvcGFyYT4KKyAgICAgICAgICAgIDxwYXJhPjxmdW5jdGlvbm5hbWU+aGFzaF92YWx1ZTwvZnVuY3Rpb25uYW1lPih2YWwpIGluIEJvb3N0LjwvcGFyYT4KKyAgICAgICAgICA8L3JldHVybnM+CisgICAgICAgICAgPHRocm93cz48cGFyYT5Eb2Vzbid0IHRocm93PC9wYXJhPjwvdGhyb3dzPgorICAgICAgICA8L21ldGhvZD4KKyAgICAgIDwvc3RydWN0LXNwZWNpYWxpemF0aW9uPgorCisgICAgICA8c3RydWN0LXNwZWNpYWxpemF0aW9uIG5hbWU9Imhhc2giPgorICAgICAgICA8dGVtcGxhdGU+CisgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlQiLz4KKyAgICAgICAgPC90ZW1wbGF0ZT4KKyAgICAgICAgPHNwZWNpYWxpemF0aW9uPgorICAgICAgICAgIDx0ZW1wbGF0ZS1hcmc+VCo8L3RlbXBsYXRlLWFyZz4KKyAgICAgICAgPC9zcGVjaWFsaXphdGlvbj4KKyAgICAgICAgPG1ldGhvZCBuYW1lPSJvcGVyYXRvcigpIiBjdj0iY29uc3QiPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj4KKyAgICAgICAgICAgIDxwYXJhbXR5cGU+VCo8L3BhcmFtdHlwZT4KKyAgICAgICAgICA8L3BhcmFtZXRlcj4KKyAgICAgICAgICA8cmV0dXJucz4KKyAgICAgICAgICAgIDxwYXJhPlVuc3BlY2lmaWVkIGluIFRSMSwgZXhjZXB0IHRoYXQgZXF1YWwgYXJndW1lbnRzIHlpZWxkIHRoZSBzYW1lIHJlc3VsdC48L3BhcmE+CisgICAgICAgICAgPC9yZXR1cm5zPgorICAgICAgICAgIDx0aHJvd3M+PHBhcmE+RG9lc24ndCB0aHJvdzwvcGFyYT48L3Rocm93cz4KKyAgICAgICAgPC9tZXRob2Q+CisgICAgICA8L3N0cnVjdC1zcGVjaWFsaXphdGlvbj4KKworICAgICAgPHN0cnVjdC1zcGVjaWFsaXphdGlvbiBuYW1lPSJoYXNoIj4KKyAgICAgICAgPHRlbXBsYXRlPjwvdGVtcGxhdGU+CisgICAgICAgIDxzcGVjaWFsaXphdGlvbj4KKyAgICAgICAgICA8dGVtcGxhdGUtYXJnPnN0ZDo6dHlwZV9pbmRleDwvdGVtcGxhdGUtYXJnPgorICAgICAgICA8L3NwZWNpYWxpemF0aW9uPgorICAgICAgICA8bWV0aG9kIG5hbWU9Im9wZXJhdG9yKCkiIGN2PSJjb25zdCI+CisgICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPgorICAgICAgICAgICAgPHBhcmFtdHlwZT5zdGQ6OnR5cGVfaW5kZXg8L3BhcmFtdHlwZT4KKyAgICAgICAgICA8L3BhcmFtZXRlcj4KKyAgICAgICAgICA8cmV0dXJucz4KKyAgICAgICAgICAgIDxwYXJhPjxjb2RlPnZhbC5oYXNoX2NvZGUoKTwvY29kZT48L3BhcmE+CisgICAgICAgICAgPC9yZXR1cm5zPgorICAgICAgICAgIDx0aHJvd3M+PHBhcmE+RG9lc24ndCB0aHJvdzwvcGFyYT48L3Rocm93cz4KKyAgICAgICAgPC9tZXRob2Q+CisgICAgICAgIDxub3Rlcz4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIE9ubHkgYXZhaWxhYmxlIGlmIGl0J3MgaW4geW91ciBzdGFuZGFyZCBsaWJyYXJ5IGFuZCBCb29zdC5Db25maWcKKyAgICAgICAgICAgIGlzIGF3YXJlIG9mIGl0LgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9ub3Rlcz4KKyAgICAgIDwvc3RydWN0LXNwZWNpYWxpemF0aW9uPgorCisgICAgICA8ZnJlZS1mdW5jdGlvbi1ncm91cCBuYW1lPSJTdXBwb3J0IGZ1bmN0aW9ucyAoQm9vc3QgZXh0ZW5zaW9uKS4iPiAKKworICAgICAgPCEtLQorICAgICAgICBib29zdDo6aGFzaF9jb21iaW5lCisgICAgICAgIC0tPgorCisgICAgICA8ZnVuY3Rpb24gbmFtZT0iaGFzaF9jb21iaW5lIj4KKyAgICAgICAgPHRlbXBsYXRlPgorICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJUIi8+CisgICAgICAgIDwvdGVtcGxhdGU+CisgICAgICAgIDx0eXBlPnZvaWQ8L3R5cGU+CisgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0ic2VlZCI+PHBhcmFtdHlwZT5zaXplX3QgJmFtcDs8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2Ij48cGFyYW10eXBlPlQgY29uc3QmYW1wOzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICA8cHVycG9zZT48c2ltcGFyYT4KKyAgICAgICAgICAgIENhbGxlZCByZXBlYXRlZGx5IHRvIGluY3JlbWVudGFsbHkgY3JlYXRlIGEgaGFzaCB2YWx1ZSBmcm9tCisgICAgICAgICAgICBzZXZlcmFsIHZhcmlhYmxlcy4KKyAgICAgICAgPC9zaW1wYXJhPjwvcHVycG9zZT4KKyAgICAgICAgPGVmZmVjdHM+PHByb2dyYW1saXN0aW5nPnNlZWQgXj0gPGZ1bmN0aW9ubmFtZT5oYXNoX3ZhbHVlPC9mdW5jdGlvbm5hbWU+KHYpICsgMHg5ZTM3NzliOSArIChzZWVkICZsdDsmbHQ7IDYpICsgKHNlZWQgJmd0OyZndDsgMik7PC9wcm9ncmFtbGlzdGluZz48L2VmZmVjdHM+CisgICAgICAgIDxub3Rlcz4KKyAgICAgICAgICA8cGFyYT48ZnVuY3Rpb25uYW1lPmhhc2hfdmFsdWU8L2Z1bmN0aW9ubmFtZT4gaXMgY2FsbGVkIHdpdGhvdXQKKyAgICAgICAgICBxdWFsaWZpY2F0aW9uLCBzbyB0aGF0IG92ZXJsb2FkcyBjYW4gYmUgZm91bmQgdmlhIEFETC48L3BhcmE+CisgICAgICAgICAgPHBhcmE+VGhpcyBpcyBhbiBleHRlbnNpb24gdG8gVFIxPC9wYXJhPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yd2FyZCBkZWNsYXJlZCBpbgorICAgICAgICAgICAgPGNvZGU+Jmx0O2Jvb3N0L2Z1bmN0aW9uYWwvaGFzaF9md2QuaHBwJmd0OzwvY29kZT4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbm90ZXM+CisgICAgICAgIDx0aHJvd3M+CisgICAgICAgICAgT25seSB0aHJvd3MgaWYgPGZ1bmN0aW9ubmFtZT5oYXNoX3ZhbHVlPC9mdW5jdGlvbm5hbWU+KFQpIHRocm93cy4KKyAgICAgICAgICBTdHJvbmcgZXhjZXB0aW9uIHNhZmV0eSwgYXMgbG9uZyBhcyA8ZnVuY3Rpb25uYW1lPmhhc2hfdmFsdWU8L2Z1bmN0aW9ubmFtZT4oVCkKKyAgICAgICAgICBhbHNvIGhhcyBzdHJvbmcgZXhjZXB0aW9uIHNhZmV0eS4KKyAgICAgICAgPC90aHJvd3M+CisgICAgICA8L2Z1bmN0aW9uPgorCisgICAgICA8IS0tCisgICAgICAgIGJvb3N0OjpoYXNoX3JhbmdlCisgICAgICAgIC0tPgorCisgICAgICA8b3ZlcmxvYWRlZC1mdW5jdGlvbiBuYW1lPSJoYXNoX3JhbmdlIj4KKyAgICAgICAgPHNpZ25hdHVyZT4KKyAgICAgICAgICA8dGVtcGxhdGU+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iSXQiLz4KKyAgICAgICAgICA8L3RlbXBsYXRlPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iZmlyc3QiPjxwYXJhbXR5cGU+SXQ8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9Imxhc3QiPjxwYXJhbXR5cGU+SXQ8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgPC9zaWduYXR1cmU+CisKKyAgICAgICAgPHNpZ25hdHVyZT4KKyAgICAgICAgICA8dGVtcGxhdGU+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iSXQiLz4KKyAgICAgICAgICA8L3RlbXBsYXRlPgorICAgICAgICAgIDx0eXBlPnZvaWQ8L3R5cGU+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJzZWVkIj48cGFyYW10eXBlPnN0ZDo6c2l6ZV90JmFtcDs8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImZpcnN0Ij48cGFyYW10eXBlPkl0PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJsYXN0Ij48cGFyYW10eXBlPkl0PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDwvc2lnbmF0dXJlPgorCisgICAgICAgIDxwdXJwb3NlPjxzaW1wYXJhPgorICAgICAgICAgICAgQ2FsY3VsYXRlIHRoZSBjb21iaW5lZCBoYXNoIHZhbHVlIG9mIHRoZSBlbGVtZW50cyBvZiBhbiBpdGVyYXRvcgorICAgICAgICAgICAgcmFuZ2UuCisgICAgICAgIDwvc2ltcGFyYT48L3B1cnBvc2U+CisgICAgICAgIDxlZmZlY3RzPgorICAgICAgICAgIDxwYXJhPkZvciB0aGUgdHdvIGFyZ3VtZW50IG92ZXJsb2FkOgorPHByb2dyYW1saXN0aW5nPgorc2l6ZV90IHNlZWQgPSAwOworCitmb3IoOyBmaXJzdCAhPSBsYXN0OyArK2ZpcnN0KQoreworICAgIDxmdW5jdGlvbm5hbWU+aGFzaF9jb21iaW5lPC9mdW5jdGlvbm5hbWU+KHNlZWQsICpmaXJzdCk7Cit9CisKK3JldHVybiBzZWVkOworPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHBhcmE+Rm9yIHRoZSB0aHJlZSBhcmd1bWVudHMgb3ZlcmxvYWQ6PC9wYXJhPgorPHByb2dyYW1saXN0aW5nPgorZm9yKDsgZmlyc3QgIT0gbGFzdDsgKytmaXJzdCkKK3sKKyAgICA8ZnVuY3Rpb25uYW1lPmhhc2hfY29tYmluZTwvZnVuY3Rpb25uYW1lPihzZWVkLCAqZmlyc3QpOworfQorPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9lZmZlY3RzPgorICAgICAgICA8bm90ZXM+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICA8Y29kZT5oYXNoX3JhbmdlPC9jb2RlPiBpcyBzZW5zaXRpdmUgdG8gdGhlIG9yZGVyIG9mIHRoZSBlbGVtZW50cworICAgICAgICAgICAgc28gaXQgd291bGRuJ3QgYmUgYXBwcm9wcmlhdGUgdG8gdXNlIHRoaXMgd2l0aCBhbiB1bm9yZGVyZWQKKyAgICAgICAgICAgIGNvbnRhaW5lci4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPHBhcmE+VGhpcyBpcyBhbiBleHRlbnNpb24gdG8gVFIxPC9wYXJhPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgRm9yd2FyZCBkZWNsYXJlZCBpbgorICAgICAgICAgICAgPGNvZGU+Jmx0O2Jvb3N0L2Z1bmN0aW9uYWwvaGFzaF9md2QuaHBwJmd0OzwvY29kZT4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbm90ZXM+CisgICAgICAgIDx0aHJvd3M+PHBhcmE+CisgICAgICAgICAgT25seSB0aHJvd3MgaWYgPGNvZGU+PGZ1bmN0aW9ubmFtZT5oYXNoX3ZhbHVlPC9mdW5jdGlvbm5hbWU+KHN0ZDo6aXRlcmF0b3JfdHJhaXRzJmx0O0l0Jmd0Ozo6dmFsdWVfdHlwZSk8L2NvZGU+CisgICAgICAgICAgdGhyb3dzLiA8Y29kZT5oYXNoX3JhbmdlKHN0ZDo6c2l6ZV90JmFtcDssIEl0LCBJdCk8L2NvZGU+IGhhcyBiYXNpYyBleGNlcHRpb24gc2FmZXR5IGFzIGxvbmcgYXMKKyAgICAgICAgICA8Y29kZT48ZnVuY3Rpb25uYW1lPmhhc2hfdmFsdWU8L2Z1bmN0aW9ubmFtZT4oc3RkOjppdGVyYXRvcl90cmFpdHMmbHQ7SXQmZ3Q7Ojp2YWx1ZV90eXBlKTwvY29kZT4KKyAgICAgICAgICBoYXMgYmFzaWMgZXhjZXB0aW9uIHNhZmV0eS4KKyAgICAgICAgPC9wYXJhPjwvdGhyb3dzPgorICAgICAgPC9vdmVybG9hZGVkLWZ1bmN0aW9uPgorCisgICAgICA8L2ZyZWUtZnVuY3Rpb24tZ3JvdXA+CisKKyAgICAgIDxmcmVlLWZ1bmN0aW9uLWdyb3VwIG5hbWU9Ik92ZXJsb2FkYWJsZSBoYXNoIGltcGxlbWVudGF0aW9uIChCb29zdCBleHRlbnNpb24pLiI+CisKKyAgICAgIDwhLS0KKyAgICAgICAgYm9vc3Q6Omhhc2hfdmFsdWUgLSBpbnRlZ2VycworICAgICAgICAtLT4KKworICAgICAgPG92ZXJsb2FkZWQtZnVuY3Rpb24gbmFtZT0iaGFzaF92YWx1ZSI+CisgICAgICAgIDxwdXJwb3NlPjxzaW1wYXJhPgorICAgICAgICAgICAgSW1wbGVtZW50YXRpb24gb2YgdGhlIGhhc2ggZnVuY3Rpb24uCisgICAgICAgIDwvc2ltcGFyYT48L3B1cnBvc2U+CisKKyAgICAgICAgPHNpZ25hdHVyZT4KKyAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+PHBhcmFtdHlwZT5ib29sPC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDwvc2lnbmF0dXJlPgorCisgICAgICAgIDxzaWduYXR1cmU+CisgICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPjxwYXJhbXR5cGU+Y2hhcjwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICA8L3NpZ25hdHVyZT4KKworICAgICAgICA8c2lnbmF0dXJlPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj48cGFyYW10eXBlPnNpZ25lZCBjaGFyPC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDwvc2lnbmF0dXJlPgorCisgICAgICAgIDxzaWduYXR1cmU+CisgICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPjxwYXJhbXR5cGU+dW5zaWduZWQgY2hhcjwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICA8L3NpZ25hdHVyZT4KKworICAgICAgICA8c2lnbmF0dXJlPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj48cGFyYW10eXBlPndjaGFyX3Q8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgPC9zaWduYXR1cmU+CisKKyAgICAgICAgPHNpZ25hdHVyZT4KKyAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+PHBhcmFtdHlwZT5zaG9ydDwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICA8L3NpZ25hdHVyZT4KKworICAgICAgICA8c2lnbmF0dXJlPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj48cGFyYW10eXBlPnVuc2lnbmVkIHNob3J0PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDwvc2lnbmF0dXJlPgorCisgICAgICAgIDxzaWduYXR1cmU+CisgICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPjxwYXJhbXR5cGU+aW50PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDwvc2lnbmF0dXJlPgorCisgICAgICAgIDxzaWduYXR1cmU+CisgICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPjxwYXJhbXR5cGU+dW5zaWduZWQgaW50PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDwvc2lnbmF0dXJlPgorCisgICAgICAgIDxzaWduYXR1cmU+CisgICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPjxwYXJhbXR5cGU+bG9uZzwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICA8L3NpZ25hdHVyZT4KKworICAgICAgICA8c2lnbmF0dXJlPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj48cGFyYW10eXBlPnVuc2lnbmVkIGxvbmc8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgPC9zaWduYXR1cmU+CisKKyAgICAgICAgPHNpZ25hdHVyZT4KKyAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+PHBhcmFtdHlwZT5sb25nIGxvbmc8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgPC9zaWduYXR1cmU+CisKKyAgICAgICAgPHNpZ25hdHVyZT4KKyAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+PHBhcmFtdHlwZT51bnNpZ25lZCBsb25nIGxvbmc8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgPC9zaWduYXR1cmU+CisKKyAgICAgICAgPHNpZ25hdHVyZT4KKyAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+PHBhcmFtdHlwZT5mbG9hdDwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICA8L3NpZ25hdHVyZT4KKworICAgICAgICA8c2lnbmF0dXJlPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj48cGFyYW10eXBlPmRvdWJsZTwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICA8L3NpZ25hdHVyZT4KKworICAgICAgICA8c2lnbmF0dXJlPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj48cGFyYW10eXBlPmxvbmcgZG91YmxlPC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDwvc2lnbmF0dXJlPgorCisgICAgICAgIDxzaWduYXR1cmU+CisgICAgICAgICAgPHRlbXBsYXRlPjx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJUIi8+PC90ZW1wbGF0ZT4KKyAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+PHBhcmFtdHlwZT5UKiBjb25zdCZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDwvc2lnbmF0dXJlPgorCisgICAgICAgIDxzaWduYXR1cmU+CisgICAgICAgICAgPHRlbXBsYXRlPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlQiLz4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS1ub250eXBlLXBhcmFtZXRlciBuYW1lPSJOIj48dHlwZT51bnNpZ25lZDwvdHlwZT48L3RlbXBsYXRlLW5vbnR5cGUtcGFyYW1ldGVyPgorICAgICAgICAgIDwvdGVtcGxhdGU+CisgICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+CisgICAgICAgICAgPHBhcmFtZXRlcj48cGFyYW10eXBlPlQgKCZhbXA7dmFsKVtOXTwvcGFyYW10eXBlPjwvcGFyYW1ldGVyPgorICAgICAgICA8L3NpZ25hdHVyZT4KKworICAgICAgICA8c2lnbmF0dXJlPgorICAgICAgICAgIDx0ZW1wbGF0ZT4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJUIi8+CisgICAgICAgICAgICA8dGVtcGxhdGUtbm9udHlwZS1wYXJhbWV0ZXIgbmFtZT0iTiI+PHR5cGU+dW5zaWduZWQ8L3R5cGU+PC90ZW1wbGF0ZS1ub250eXBlLXBhcmFtZXRlcj4KKyAgICAgICAgICA8L3RlbXBsYXRlPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXI+PHBhcmFtdHlwZT5jb25zdCBUICgmYW1wO3ZhbClbTl08L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgPC9zaWduYXR1cmU+CisKKyAgICAgICAgPHNpZ25hdHVyZT4KKyAgICAgICAgICA8dGVtcGxhdGU+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iQ2giLz4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJBIi8+CisgICAgICAgICAgPC90ZW1wbGF0ZT4KKyAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+CisgICAgICAgICAgICAgIDxwYXJhbXR5cGU+c3RkOjpiYXNpY19zdHJpbmcmbHQ7Q2gsIHN0ZDo6Y2hhcl90cmFpdHMmbHQ7Q2gmZ3Q7LCBBJmd0OyBjb25zdCZhbXA7PC9wYXJhbXR5cGU+CisgICAgICAgICAgPC9wYXJhbWV0ZXI+CisgICAgICAgIDwvc2lnbmF0dXJlPgorICAgICAgICAgICAgICAKKyAgICAgICA8c2lnbmF0dXJlPgorICAgICAgICAgIDx0ZW1wbGF0ZT4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJBIi8+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iQiIvPgorICAgICAgICAgIDwvdGVtcGxhdGU+CisgICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPjxwYXJhbXR5cGU+c3RkOjpwYWlyJmx0O0EsIEImZ3Q7IGNvbnN0JmFtcDs8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgPC9zaWduYXR1cmU+CisKKyAgICAgICAgPHNpZ25hdHVyZT4KKyAgICAgICAgICA8dGVtcGxhdGU+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVCIvPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IkEiLz4KKyAgICAgICAgICA8L3RlbXBsYXRlPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj48cGFyYW10eXBlPnN0ZDo6dmVjdG9yJmx0O1QsIEEmZ3Q7IGNvbnN0JmFtcDs8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgPC9zaWduYXR1cmU+CisKKyAgICAgICAgPHNpZ25hdHVyZT4KKyAgICAgICAgICA8dGVtcGxhdGU+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iVCIvPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IkEiLz4KKyAgICAgICAgICA8L3RlbXBsYXRlPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj48cGFyYW10eXBlPnN0ZDo6bGlzdCZsdDtULCBBJmd0OyBjb25zdCZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDwvc2lnbmF0dXJlPgorCisgICAgICAgIDxzaWduYXR1cmU+CisgICAgICAgICAgPHRlbXBsYXRlPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlQiLz4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJBIi8+CisgICAgICAgICAgPC90ZW1wbGF0ZT4KKyAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+PHBhcmFtdHlwZT5zdGQ6OmRlcXVlJmx0O1QsIEEmZ3Q7IGNvbnN0JmFtcDs8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgPC9zaWduYXR1cmU+CisKKyAgICAgICAgPHNpZ25hdHVyZT4KKyAgICAgICAgICA8dGVtcGxhdGU+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iSyIvPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IkMiLz4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJBIi8+CisgICAgICAgICAgPC90ZW1wbGF0ZT4KKyAgICAgICAgICA8dHlwZT5zdGQ6OnNpemVfdDwvdHlwZT4KKyAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbCI+PHBhcmFtdHlwZT5zdGQ6OnNldCZsdDtLLCBDLCBBJmd0OyBjb25zdCZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDwvc2lnbmF0dXJlPgorCisgICAgICAgIDxzaWduYXR1cmU+CisgICAgICAgICAgPHRlbXBsYXRlPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IksiLz4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJDIi8+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iQSIvPgorICAgICAgICAgIDwvdGVtcGxhdGU+CisgICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPjxwYXJhbXR5cGU+c3RkOjptdWx0aXNldCZsdDtLLCBDLCBBJmd0OyBjb25zdCZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDwvc2lnbmF0dXJlPgorCisgICAgICAgIDxzaWduYXR1cmU+CisgICAgICAgICAgPHRlbXBsYXRlPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IksiLz4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJUIi8+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iQyIvPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IkEiLz4KKyAgICAgICAgICA8L3RlbXBsYXRlPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj48cGFyYW10eXBlPnN0ZDo6bWFwJmx0O0ssIFQsIEMsIEEmZ3Q7IGNvbnN0JmFtcDs8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgPC9zaWduYXR1cmU+CisKKyAgICAgICAgPHNpZ25hdHVyZT4KKyAgICAgICAgICA8dGVtcGxhdGU+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iSyIvPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlQiLz4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS10eXBlLXBhcmFtZXRlciBuYW1lPSJDIi8+CisgICAgICAgICAgICA8dGVtcGxhdGUtdHlwZS1wYXJhbWV0ZXIgbmFtZT0iQSIvPgorICAgICAgICAgIDwvdGVtcGxhdGU+CisgICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPjxwYXJhbXR5cGU+c3RkOjptdWx0aW1hcCZsdDtLLCBULCBDLCBBJmd0OyBjb25zdCZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDwvc2lnbmF0dXJlPgorCisgICAgICAgIDxzaWduYXR1cmU+CisgICAgICAgICAgPHRlbXBsYXRlPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlQiLz4KKyAgICAgICAgICA8L3RlbXBsYXRlPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj48cGFyYW10eXBlPnN0ZDo6Y29tcGxleCZsdDtUJmd0OyBjb25zdCZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDwvc2lnbmF0dXJlPgorCisgICAgICAgIDxzaWduYXR1cmU+CisgICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPjxwYXJhbXR5cGU+c3RkOjp0eXBlX2luZGV4PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDwvc2lnbmF0dXJlPgorCisgICAgICAgIDxzaWduYXR1cmU+CisgICAgICAgICAgPHRlbXBsYXRlPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlQiLz4KKyAgICAgICAgICAgIDx0ZW1wbGF0ZS1ub250eXBlLXBhcmFtZXRlciBuYW1lPSJOIj4KKyAgICAgICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+CisgICAgICAgICAgICA8L3RlbXBsYXRlLW5vbnR5cGUtcGFyYW1ldGVyPgorICAgICAgICAgIDwvdGVtcGxhdGU+CisgICAgICAgICAgPHR5cGU+c3RkOjpzaXplX3Q8L3R5cGU+CisgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJ2YWwiPjxwYXJhbXR5cGU+c3RkOjphcnJheSZsdDtULCBOJmd0OyBjb25zdCZhbXA7PC9wYXJhbXR5cGU+PC9wYXJhbWV0ZXI+CisgICAgICAgIDwvc2lnbmF0dXJlPgorCisgICAgICAgIDxzaWduYXR1cmU+CisgICAgICAgICAgPHRlbXBsYXRlPgorICAgICAgICAgICAgPHRlbXBsYXRlLXR5cGUtcGFyYW1ldGVyIG5hbWU9IlQiIHBhY2s9IjEiLz4KKyAgICAgICAgICA8L3RlbXBsYXRlPgorICAgICAgICAgIDx0eXBlPnN0ZDo6c2l6ZV90PC90eXBlPgorICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0idmFsIj48cGFyYW10eXBlPnN0ZDo6dHVwbGUmbHQ7VC4uLiZndDs8L3BhcmFtdHlwZT48L3BhcmFtZXRlcj4KKyAgICAgICAgPC9zaWduYXR1cmU+CisKKyAgICAgICAgPGRlc2NyaXB0aW9uPjxwYXJhPgorICAgICAgICAgIEdlbmVyYWxseSBzaG91bGRuJ3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IHVzZXJzLCBpbnN0ZWFkIHRoZXkgc2hvdWxkIHVzZQorICAgICAgICAgIDxjbGFzc25hbWU+Ym9vc3Q6Omhhc2g8L2NsYXNzbmFtZT4sIDxmdW5jdGlvbm5hbWU+Ym9vc3Q6Omhhc2hfcmFuZ2U8L2Z1bmN0aW9ubmFtZT4KKyAgICAgICAgICBvciA8ZnVuY3Rpb25uYW1lPmJvb3N0OjpoYXNoX2NvbWJpbmU8L2Z1bmN0aW9ubmFtZT4gd2hpY2gKKyAgICAgICAgICBjYWxsIDxjb2RlPmhhc2hfdmFsdWU8L2NvZGU+IHdpdGhvdXQgbmFtZXNwYWNlIHF1YWxpZmljYXRpb24gc28gdGhhdCBvdmVybG9hZHMKKyAgICAgICAgICBmb3IgY3VzdG9tIHR5cGVzIGFyZSBmb3VuZCB2aWEgQURMLgorICAgICAgICA8L3BhcmE+PC9kZXNjcmlwdGlvbj4KKworICAgICAgICA8bm90ZXM+CisgICAgICAgICAgPHBhcmE+VGhpcyBpcyBhbiBleHRlbnNpb24gdG8gVFIxPC9wYXJhPgorICAgICAgICA8L25vdGVzPgorCisgICAgICAgIDx0aHJvd3M+CisgICAgICAgICAgICBPbmx5IHRocm93cyBpZiBhIHVzZXIgc3VwcGxpZWQgdmVyc2lvbiBvZgorICAgICAgICAgICAgPGNvZGU+PGZ1bmN0aW9ubmFtZT5oYXNoX3ZhbHVlPC9mdW5jdGlvbm5hbWU+PC9jb2RlPgorICAgICAgICAgICAgdGhyb3dzIGZvciBhbiBlbGVtZW50IG9mIGEgY29udGFpbmVyLCBvcgorICAgICAgICAgICAgb25lIG9mIHRoZSB0eXBlcyBzdG9yZWQgaW4gYSBwYWlyLgorICAgICAgICA8L3Rocm93cz4KKworICAgICAgICA8cmV0dXJucz4KKyAgICAgICAgICA8aW5mb3JtYWx0YWJsZT4KKyAgICAgICAgICAgIDx0Z3JvdXAgY29scz0iMiI+CisgICAgICAgICAgICAgIDx0aGVhZD4KKyAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgPGVudHJ5PlR5cGVzPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT5SZXR1cm5zPC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgPC90aGVhZD4KKyAgICAgICAgICAgICAgPHRib2R5PgorICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+PGNvZGU+Ym9vbDwvY29kZT4sCisgICAgICAgICAgICAgICAgICAgIDxjb2RlPmNoYXI8L2NvZGU+LCA8Y29kZT5zaWduZWQgY2hhcjwvY29kZT4sIDxjb2RlPnVuc2lnbmVkIGNoYXI8L2NvZGU+LCA8Y29kZT53Y2hhcl90PC9jb2RlPiwKKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+c2hvcnQ8L2NvZGU+LCA8Y29kZT51bnNpZ25lZCBzaG9ydDwvY29kZT4sCisgICAgICAgICAgICAgICAgICAgIDxjb2RlPmludDwvY29kZT4sIDxjb2RlPnVuc2lnbmVkIGludDwvY29kZT4sIDxjb2RlPmxvbmc8L2NvZGU+LCA8Y29kZT51bnNpZ25lZCBsb25nPC9jb2RlPgorICAgICAgICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT48Y29kZT52YWw8L2NvZGU+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgPGVudHJ5Pjxjb2RlPmxvbmcgbG9uZzwvY29kZT4sIDxjb2RlPnVuc2lnbmVkIGxvbmcgbG9uZzwvY29kZT48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgPGVudHJ5Pjxjb2RlPnZhbDwvY29kZT4gd2hlbiA8Y29kZT5hYnModmFsKSAmbHQ7PSBzdGQ6Om51bWVyaWNfbGltaXRzJmx0O3N0ZDo6c2l6ZV90Jmd0Ozo6bWF4KCk8L2NvZGU+LjwvZW50cnk+CisgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT48Y29kZT5mbG9hdDwvY29kZT4sIDxjb2RlPmRvdWJsZTwvY29kZT4sIDxjb2RlPmxvbmcgZG91YmxlPC9jb2RlPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+QW4gdW5zcGVjaWZpZWQgdmFsdWUsIGV4Y2VwdCB0aGF0IGVxdWFsIGFyZ3VtZW50cyBzaGFsbCB5aWVsZCB0aGUgc2FtZSByZXN1bHQuPC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgPGVudHJ5Pjxjb2RlPlQqPC9jb2RlPjwvZW50cnk+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+QW4gdW5zcGVjaWZpZWQgdmFsdWUsIGV4Y2VwdCB0aGF0IGVxdWFsIGFyZ3VtZW50cyBzaGFsbCB5aWVsZCB0aGUgc2FtZSByZXN1bHQuPC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgICA8cm93PgorICAgICAgICAgICAgICAgICAgPGVudHJ5PgorICAgICAgICAgICAgICAgICAgICA8Y29kZT5UJiMxNjA7dmFsW05dPC9jb2RlPiwKKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+Y29uc3QmIzE2MDtUJiMxNjA7dmFsW05dPC9jb2RlPgorICAgICAgICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT48Y29kZT5oYXNoX3JhbmdlKHZhbCwgdmFsK04pPC9jb2RlPjwvZW50cnk+CisgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+c3RkOmJhc2ljX3N0cmluZyZsdDtDaCwmIzE2MDtzdGQ6OmNoYXJfdHJhaXRzJmx0O0NoJmd0OywmIzE2MDtBJmd0OzwvY29kZT4sCisgICAgICAgICAgICAgICAgICAgIDxjb2RlPnN0ZDo6dmVjdG9yJmx0O1QsJiMxNjA7QSZndDs8L2NvZGU+LAorICAgICAgICAgICAgICAgICAgICA8Y29kZT5zdGQ6Omxpc3QmbHQ7VCwmIzE2MDtBJmd0OzwvY29kZT4sCisgICAgICAgICAgICAgICAgICAgIDxjb2RlPnN0ZDo6ZGVxdWUmbHQ7VCwmIzE2MDtBJmd0OzwvY29kZT4sCisgICAgICAgICAgICAgICAgICAgIDxjb2RlPnN0ZDo6c2V0Jmx0O0ssJiMxNjA7QywmIzE2MDtBJmd0OzwvY29kZT4sCisgICAgICAgICAgICAgICAgICAgIDxjb2RlPnN0ZDo6bXVsdGlzZXQmbHQ7SywmIzE2MDtDLCYjMTYwO0EmZ3Q7PC9jb2RlPiwKKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+c3RkOjptYXAmbHQ7SywmIzE2MDtULCYjMTYwO0MsJiMxNjA7QSZndDs8L2NvZGU+LAorICAgICAgICAgICAgICAgICAgICA8Y29kZT5zdGQ6Om11bHRpbWFwJmx0O0ssJiMxNjA7VCwmIzE2MDtDLCYjMTYwO0EmZ3Q7PC9jb2RlPiwKKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+c3RkOjphcnJheSZsdDtULCYjMTYwO04mZ3Q7PC9jb2RlPgorICAgICAgICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT48Y29kZT5oYXNoX3JhbmdlKHZhbC5iZWdpbigpLCB2YWwuZW5kKCkpPC9jb2RlPjwvZW50cnk+CisgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT48Y29kZT5zdGQ6OnBhaXImbHQ7QSwgQiZndDs8L2NvZGU+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT48cHJvZ3JhbWxpc3Rpbmc+c2l6ZV90IHNlZWQgPSAwOworPGZ1bmN0aW9ubmFtZT5oYXNoX2NvbWJpbmU8L2Z1bmN0aW9ubmFtZT4oc2VlZCwgdmFsLmZpcnN0KTsKKzxmdW5jdGlvbm5hbWU+aGFzaF9jb21iaW5lPC9mdW5jdGlvbm5hbWU+KHNlZWQsIHZhbC5zZWNvbmQpOworcmV0dXJuIHNlZWQ7PC9wcm9ncmFtbGlzdGluZz48L2VudHJ5PgorICAgICAgICAgICAgICAgIDwvcm93PgorICAgICAgICAgICAgICAgIDxyb3c+CisgICAgICAgICAgICAgICAgICA8ZW50cnk+PGNvZGU+c3RkOjp0dXBsZSZsdDtULi4uJmd0OzwvY29kZT48L2VudHJ5PgorICAgICAgICAgICAgICAgICAgPGVudHJ5Pjxwcm9ncmFtbGlzdGluZz5zaXplX3Qgc2VlZCA9IDA7Cis8ZnVuY3Rpb25uYW1lPmhhc2hfY29tYmluZTwvZnVuY3Rpb25uYW1lPihzZWVkLCBnZXQmbHQ7MCZndDsodmFsKSk7Cis8ZnVuY3Rpb25uYW1lPmhhc2hfY29tYmluZTwvZnVuY3Rpb25uYW1lPihzZWVkLCBnZXQmbHQ7MSZndDsodmFsKSk7CisvLyAuLi4uCityZXR1cm4gc2VlZDs8L3Byb2dyYW1saXN0aW5nPjwvZW50cnk+CisgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+c3RkOjpjb21wbGV4Jmx0O1QmZ3Q7PC9jb2RlPgorICAgICAgICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT5XaGVuIDxjb2RlPlQ8L2NvZGU+IGlzIGEgYnVpbHQgaW4gdHlwZSBhbmQgPGNvZGU+dmFsLmltYWcoKSA9PSAwPC9jb2RlPiwgdGhlIHJlc3VsdCBpcyBlcXVhbCB0byA8Y29kZT5oYXNoX3ZhbHVlKHZhbC5yZWFsKCkpPC9jb2RlPi4gT3RoZXJ3aXNlIGFuIHVuc3BlY2lmaWVkIHZhbHVlLCBleGNlcHQgdGhhdCBlcXVhbCBhcmd1bWVudHMgc2hhbGwgeWllbGQgdGhlIHNhbWUgcmVzdWx0LjwvZW50cnk+CisgICAgICAgICAgICAgICAgPC9yb3c+CisgICAgICAgICAgICAgICAgPHJvdz4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT4KKyAgICAgICAgICAgICAgICAgICAgPGNvZGU+c3RkOjp0eXBlX2luZGV4PC9jb2RlPgorICAgICAgICAgICAgICAgICAgPC9lbnRyeT4KKyAgICAgICAgICAgICAgICAgIDxlbnRyeT48Y29kZT52YWwuaGFzaF9jb2RlKCk8L2NvZGU+PC9lbnRyeT4KKyAgICAgICAgICAgICAgICA8L3Jvdz4KKyAgICAgICAgICAgICAgPC90Ym9keT4KKyAgICAgICAgICAgIDwvdGdyb3VwPgorICAgICAgICAgIDwvaW5mb3JtYWx0YWJsZT4KKyAgICAgICAgPC9yZXR1cm5zPgorICAgICAgPC9vdmVybG9hZGVkLWZ1bmN0aW9uPgorICAgICAgPC9mcmVlLWZ1bmN0aW9uLWdyb3VwPgorICAgIDwvbmFtZXNwYWNlPgorICA8L2hlYWRlcj4KKzwvbGlicmFyeS1yZWZlcmVuY2U+CisKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2RvYy90aGFua3MucWJrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvZG9jL3RoYW5rcy5xYmsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNjNTEwOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2RvYy90aGFua3MucWJrCkBAIC0wLDAgKzEsMjggQEAKKworWy8gQ29weXJpZ2h0IDIwMDUtMjAwOCBEYW5pZWwgSmFtZXMuCisgLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisgLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkgXQorCitbc2VjdGlvbjphY2tub3dsZWRnZW1lbnRzIEFja25vd2xlZGdlbWVudHNdCisKK1RoaXMgbGlicmFyeSBpcyBiYXNlZCBvbiB0aGUgZGVzaWduIGJ5IFBldGVyIERpbW92LiBEdXJpbmcgdGhlIGluaXRpYWwKK2RldmVsb3BtZW50CitKb2FxdcOtbiBNIEzDs3BleiBNdcOxb3ogbWFkZSBtYW55IHVzZWZ1bCBzdWdnZXN0aW9ucyBhbmQgY29udHJpYnV0ZWQgZml4ZXMuCisKK1RoZSBmb3JtYWwgcmV2aWV3IHdhcyBtYW5hZ2VkIGJ5IFRob3JzdGVuIE90dG9zZW4sIGFuZCB0aGUgbGlicmFyeSByZXZpZXdlZCBieToKK0RhdmlkIEFicmFoYW1zLCBBbGJlcnRvIEJhcmJhdGksIFRvcGhlciBDb29wZXIsIENhbGViIEVwc3RlaW4sIERhdmUgSGFycmlzLAorQ2hyaXMgSmVmZmVyc29uLCBCcm9uZWsgS296aWNraSwgSm9obiBNYWRkb2NrLCBUb2JpYXMgU3dpbmdlciwgSmFhcCBTdXRlciwKK1JvYiBTdGV3YXJ0IGFuZCBQYXZlbCBWb3plbmlsZWsuIFNpbmNlIHRoZW4sIGZ1cnRoZXIgY29uc3RydWN0aXZlIGNyaXRpY2lzbSBoYXMKK2JlZW4gbWFkZSBieSBEYW5pZWwgS3LDvGdsZXIsIEFsZXhhbmRlciBOYXNvbm92IGFuZCDmsojmhafls7AuCisKK1RoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgaGFzaCBmdW5jdGlvbiBmb3IgcG9pbnRlcnMgaXMgYmFzZWQgb24gc3VnZ2VzdGlvbnMKK21hZGUgYnkgQWxiZXJ0byBCYXJiYXRpIGFuZCBEYXZlIEhhcnJpcy4gRGF2ZSBIYXJyaXMgYWxzbyBzdWdnZXN0ZWQgYW4KK2ltcG9ydGFudCBpbXByb3ZlbWVudCB0byBbZnVuY3JlZiBib29zdDo6aGFzaF9jb21iaW5lXSB0aGF0IHdhcyB0YWtlbiB1cC4KKworU29tZSB1c2VmdWwgaW1wcm92ZW1lbnRzIHRvIHRoZSBmbG9hdGluZyBwb2ludCBoYXNoIGFsZ29yaXRobSB3ZXJlIHN1Z2dlc3RlZAorYnkgRGFuaWVsIEtyw7xnbGVyLgorCitUaGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gY2FtZSBmcm9tIEplcmVteSBCLiBNYWl0aW4tU2hlcGFyZCdzIGhhc2ggdGFibGUKK2xpYnJhcnksIGFsdGhvdWdoIHRoaXMgaXMgYSBjb21wbGV0ZSByZXdyaXRlLgorCitbZW5kc2VjdF0KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2RvYy90dXRvcmlhbC5xYmsgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9kb2MvdHV0b3JpYWwucWJrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MDY3YTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9kb2MvdHV0b3JpYWwucWJrCkBAIC0wLDAgKzEsMjEyIEBACisKK1svIENvcHlyaWdodCAyMDA1LTIwMDggRGFuaWVsIEphbWVzLgorIC8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworIC8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpIF0KKworW2RlZiBfX211bHRpLWluZGV4LXNob3J0X18gW0Bib29zdDovbGlicy9tdWx0aV9pbmRleC9kb2MvaW5kZXguaHRtbAorICAgIEJvb3N0Lk11bHRpSW5kZXhdXQorCitbc2VjdGlvbjp0dXRvcmlhbCBUdXRvcmlhbF0KKworV2hlbiB1c2luZyBhIGhhc2ggaW5kZXggd2l0aCBfX211bHRpLWluZGV4LXNob3J0X18sIHlvdSBkb24ndCBuZWVkIHRvIGRvCithbnl0aGluZyB0byB1c2UgW2NsYXNzcmVmIGJvb3N0OjpoYXNoXSBhcyBpdCB1c2VzIGl0IGJ5IGRlZmF1bHQuCitUbyBmaW5kIG91dCBob3cgdG8gdXNlIGEgdXNlci1kZWZpbmVkIHR5cGUsIHJlYWQgdGhlCitbbGluayBoYXNoLmN1c3RvbSBzZWN0aW9uIG9uIGV4dGVuZGluZyBib29zdDo6aGFzaCBmb3IgYSBjdXN0b20gZGF0YSB0eXBlXS4KKworSWYgeW91ciBzdGFuZGFyZCBsaWJyYXJ5IHN1cHBsaWVzIGl0cyBvd24gaW1wbGVtZW50YXRpb24gb2YgdGhlIHVub3JkZXJlZAorYXNzb2NpYXRpdmUgY29udGFpbmVycyBhbmQgeW91IHdpc2ggdG8gdXNlCitbY2xhc3NyZWYgYm9vc3Q6Omhhc2hdLCBqdXN0IHVzZSBhbiBleHRyYSB0ZW1wbGF0ZSBwYXJhbWV0ZXI6CisKKyAgICBzdGQ6OnVub3JkZXJlZF9tdWx0aXNldDxpbnQsIGBgW2NsYXNzcmVmIGJvb3N0OjpoYXNoXWBgPGludD4gPgorICAgICAgICAgICAgc2V0X29mX2ludHM7CisKKyAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8c3RkOjpwYWlyPGludCwgaW50PiwgYGBbY2xhc3NyZWYgYm9vc3Q6Omhhc2hdYGA8c3RkOjpwYWlyPGludCwgaW50PiA+CisgICAgICAgICAgICBzZXRfb2ZfcGFpcnM7CisKKyAgICBzdGQ6OnVub3JkZXJlZF9tYXA8aW50LCBzdGQ6OnN0cmluZywgYGBbY2xhc3NyZWYgYm9vc3Q6Omhhc2hdYGA8aW50PiA+IG1hcF9pbnRfdG9fc3RyaW5nOworCitUbyB1c2UgW2NsYXNzcmVmIGJvb3N0OjpoYXNoXSBkaXJlY3RseSwgY3JlYXRlIGFuIGluc3RhbmNlIGFuZCBjYWxsIGl0IGFzIGEgZnVuY3Rpb246CisKKyAgICAjaW5jbHVkZSA8YGBbaGVhZGVycmVmIGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC5ocHBdYGA+CisKKyAgICBpbnQgbWFpbigpCisgICAgeworICAgICAgICBgYFtjbGFzc3JlZiBib29zdDo6aGFzaF1gYDxzdGQ6OnN0cmluZz4gc3RyaW5nX2hhc2g7CisKKyAgICAgICAgc3RkOjpzaXplX3QgaCA9IHN0cmluZ19oYXNoKCJIYXNoIG1lIik7CisgICAgfQorCitGb3IgYW4gZXhhbXBsZSBvZiBnZW5lcmljIHVzZSwgaGVyZSBpcyBhIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGEgdmVjdG9yCitjb250YWluaW5nIHRoZSBoYXNoZXMgb2YgdGhlIGVsZW1lbnRzIG9mIGEgY29udGFpbmVyOgorCisgICAgdGVtcGxhdGUgPGNsYXNzIENvbnRhaW5lcj4KKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnNpemVfdD4gZ2V0X2hhc2hlcyhDb250YWluZXIgY29uc3QmIHgpCisgICAgeworICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnNpemVfdD4gaGFzaGVzOworICAgICAgICBzdGQ6OnRyYW5zZm9ybSh4LmJlZ2luKCksIHguZW5kKCksIHN0ZDo6aW5zZXJ0X2l0ZXJhdG9yKGhhc2hlcyksCisgICAgICAgICAgICBgYFtjbGFzc3JlZiBib29zdDo6aGFzaF1gYDx0eXBlbmFtZSBDb250YWluZXI6OnZhbHVlX3R5cGU+KCkpOworCisgICAgICAgIHJldHVybiBoYXNoZXM7CisgICAgfQorCitbZW5kc2VjdF0KKworW3NlY3Rpb246Y3VzdG9tIEV4dGVuZGluZyBib29zdDo6aGFzaCBmb3IgYSBjdXN0b20gZGF0YSB0eXBlXQorCitbY2xhc3NyZWYgYm9vc3Q6Omhhc2hdIGlzIGltcGxlbWVudGVkIGJ5IGNhbGxpbmcgdGhlIGZ1bmN0aW9uCitbZnVuY3JlZiBib29zdDo6aGFzaF92YWx1ZSBoYXNoX3ZhbHVlXS4KK1RoZSBuYW1lc3BhY2UgaXNuJ3Qgc3BlY2lmaWVkIHNvIHRoYXQgaXQgY2FuIGRldGVjdCBvdmVybG9hZHMgdmlhIGFyZ3VtZW50CitkZXBlbmRhbnQgbG9va3VwLiBTbyBpZiB0aGVyZSBpcyBhIGZyZWUgZnVuY3Rpb24gYGhhc2hfdmFsdWVgIGluIHRoZSBzYW1lCituYW1lc3BhY2UgYXMgYSBjdXN0b20gdHlwZSwgaXQgd2lsbCBnZXQgY2FsbGVkLgorCitJZiB5b3UgaGF2ZSBhIHN0cnVjdHVyZSBgbGlicmFyeTo6Ym9va2AsIHdoZXJlIGVhY2ggYGJvb2tgIGlzIHVuaXF1ZWx5CitkZWZpbmVkIGJ5IGl0J3MgbWVtYmVyIGBpZGA6CisKKyAgICBuYW1lc3BhY2UgbGlicmFyeQorICAgIHsKKyAgICAgICAgc3RydWN0IGJvb2sKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGlkOworICAgICAgICAgICAgc3RkOjpzdHJpbmcgYXV0aG9yOworICAgICAgICAgICAgc3RkOjpzdHJpbmcgdGl0bGU7CisKKyAgICAgICAgICAgIC8vIC4uLi4KKyAgICAgICAgfTsKKworICAgICAgICBib29sIG9wZXJhdG9yPT0oYm9vayBjb25zdCYgYSwgYm9vayBjb25zdCYgYikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGEuaWQgPT0gYi5pZDsKKyAgICAgICAgfQorICAgIH0KKworVGhlbiBhbGwgeW91IHdvdWxkIG5lZWQgdG8gZG8gaXMgd3JpdGUgdGhlIGZ1bmN0aW9uIGBsaWJyYXJ5OjpoYXNoX3ZhbHVlYDoKKworICAgIG5hbWVzcGFjZSBsaWJyYXJ5CisgICAgeworICAgICAgICBzdGQ6OnNpemVfdCBoYXNoX3ZhbHVlKGJvb2sgY29uc3QmIGIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGBgW2NsYXNzcmVmIGJvb3N0OjpoYXNoXWBgPGludD4gaGFzaGVyOworICAgICAgICAgICAgcmV0dXJuIGhhc2hlcihiLmlkKTsKKyAgICAgICAgfQorICAgIH0KKworQW5kIHlvdSBjYW4gbm93IHVzZSBbY2xhc3NyZWYgYm9vc3Q6Omhhc2hdIHdpdGggYm9vazoKKworICAgIGxpYnJhcnk6OmJvb2sga25pZmUoMzQ1OCwgIlphbmUgR3JleSIsICJUaGUgSGFzaCBLbmlmZSBPdXRmaXQiKTsKKyAgICBsaWJyYXJ5Ojpib29rIGRhbmRlbGlvbigxMzU0LCAiUGF1bCBKLiBTaGFubGV5IiwKKyAgICAgICAgIkhhc2ggJiBEYW5kZWxpb24gR3JlZW5zIik7CisKKyAgICBgYFtjbGFzc3JlZiBib29zdDo6aGFzaF1gYDxsaWJyYXJ5Ojpib29rPiBib29rX2hhc2hlcjsKKyAgICBzdGQ6OnNpemVfdCBrbmlmZV9oYXNoX3ZhbHVlID0gYm9va19oYXNoZXIoa25pZmUpOworCisgICAgLy8gSWYgc3RkOjp1bm9yZGVyZWRfc2V0IGlzIGF2YWlsYWJsZToKKyAgICBzdGQ6OnVub3JkZXJlZF9zZXQ8bGlicmFyeTo6Ym9vaywgYGBbY2xhc3NyZWYgYm9vc3Q6Omhhc2hdYGA8bGlicmFyeTo6Ym9vaz4gPiBib29rczsKKyAgICBib29rcy5pbnNlcnQoa25pZmUpOworICAgIGJvb2tzLmluc2VydChsaWJyYXJ5Ojpib29rKDI0NDMsICJMaW5kZ3JlbiwgVG9yZ255IiwgIkhhc2giKSk7CisgICAgYm9va3MuaW5zZXJ0KGxpYnJhcnk6OmJvb2soMTk1MywgIlNueWRlciwgQmVybmFkZXR0ZSBNLiIsCisgICAgICAgICJIZWF2ZW5seSBIYXNoOiBBIFRhc3R5IE1peCBvZiBhIE1vdGhlcidzIE1lZGl0YXRpb25zIikpOworCisgICAgYXNzZXJ0KGJvb2tzLmZpbmQoa25pZmUpICE9IGJvb2tzLmVuZCgpKTsKKyAgICBhc3NlcnQoYm9va3MuZmluZChkYW5kZWxpb24pID09IGJvb2tzLmVuZCgpKTsKKworVGhlIGZ1bGwgZXhhbXBsZSBjYW4gYmUgZm91bmQgaW46CitbQGJvb3N0Oi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9leGFtcGxlcy9ib29rcy5ocHAgL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2V4YW1wbGVzL2Jvb2tzLmhwcF0KK2FuZAorW0Bib29zdDovbGlicy9mdW5jdGlvbmFsL2hhc2gvZXhhbXBsZXMvYm9va3MuY3BwIC9saWJzL2Z1bmN0aW9uYWwvaGFzaC9leGFtcGxlcy9ib29rcy5jcHBdLgorCitbdGlwCitXaGVuIHdyaXRpbmcgYSBoYXNoIGZ1bmN0aW9uLCBmaXJzdCBsb29rIGF0IGhvdyB0aGUgZXF1YWxpdHkgZnVuY3Rpb24gd29ya3MuCitPYmplY3RzIHRoYXQgYXJlIGVxdWFsIG11c3QgZ2VuZXJhdGUgdGhlIHNhbWUgaGFzaCB2YWx1ZS4KK1doZW4gb2JqZWN0cyBhcmUgbm90IGVxdWFsIHRoZXkgc2hvdWxkIGdlbmVyYXRlIGRpZmZlcmVudCBoYXNoIHZhbHVlcy4KK0luIHRoaXMgb2JqZWN0IGVxdWFsaXR5IHdhcyBiYXNlZCBqdXN0IG9uIHRoZSBpZCBzbyB0aGUgaGFzaCBmdW5jdGlvbgorb25seSBoYXNoZXMgdGhlIGlkLiBJZiBpdCB3YXMgYmFzZWQgb24gdGhlIG9iamVjdCdzIG5hbWUgYW5kIGF1dGhvcgordGhlbiB0aGUgaGFzaCBmdW5jdGlvbiBzaG91bGQgdGFrZSB0aGVtIGludG8gYWNjb3VudAorKGhvdyB0byBkbyB0aGlzIGlzIGRpc2N1c3NlZCBpbiB0aGUgbmV4dCBzZWN0aW9uKS4KK10KKworW2VuZHNlY3RdCisKK1tzZWN0aW9uOmNvbWJpbmUgQ29tYmluaW5nIGhhc2ggdmFsdWVzXQorCitTYXkgeW91IGhhdmUgYSBwb2ludCBjbGFzcywgcmVwcmVzZW50aW5nIGEgdHdvIGRpbWVuc2lvbmFsIGxvY2F0aW9uOgorCisgICAgY2xhc3MgcG9pbnQKKyAgICB7CisgICAgICAgIGludCB4OworICAgICAgICBpbnQgeTsKKyAgICBwdWJsaWM6CisgICAgICAgIHBvaW50KCkgOiB4KDApLCB5KDApIHt9CisgICAgICAgIHBvaW50KGludCB4LCBpbnQgeSkgOiB4KHgpLCB5KHkpIHt9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KHBvaW50IGNvbnN0JiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHggPT0gb3RoZXIueCAmJiB5ID09IG90aGVyLnk7CisgICAgICAgIH0KKyAgICB9OworCithbmQgeW91IHdpc2ggdG8gdXNlIGl0IGFzIHRoZSBrZXkgZm9yIGFuIGB1bm9yZGVyZWRfbWFwYC4gWW91IG5lZWQgdG8KK2N1c3RvbWlzZSB0aGUgaGFzaCBmb3IgdGhpcyBzdHJ1Y3R1cmUuIFRvIGRvIHRoaXMgd2UgbmVlZCB0byBjb21iaW5lCit0aGUgaGFzaCB2YWx1ZXMgZm9yIGB4YCBhbmQgYHlgLiBUaGUgZnVuY3Rpb24KK1tmdW5jcmVmIGJvb3N0OjpoYXNoX2NvbWJpbmVdIGlzIHN1cHBsaWVkIGZvciB0aGlzIHB1cnBvc2U6CisKKyAgICBjbGFzcyBwb2ludAorICAgIHsKKyAgICAgICAgLi4uCisKKyAgICAgICAgZnJpZW5kIHN0ZDo6c2l6ZV90IGhhc2hfdmFsdWUocG9pbnQgY29uc3QmIHApCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0ZDo6c2l6ZV90IHNlZWQgPSAwOworICAgICAgICAgICAgYGBbZnVuY3JlZiBib29zdDo6aGFzaF9jb21iaW5lXWBgKHNlZWQsIHAueCk7CisgICAgICAgICAgICBgYFtmdW5jcmVmIGJvb3N0OjpoYXNoX2NvbWJpbmVdYGAoc2VlZCwgcC55KTsKKworICAgICAgICAgICAgcmV0dXJuIHNlZWQ7CisgICAgICAgIH0KKworICAgICAgICAuLi4KKyAgICB9OworCitDYWxscyB0byBoYXNoX2NvbWJpbmUgaW5jcmVtZW50YWxseSBidWlsZCB0aGUgaGFzaCBmcm9tIHRoZSBkaWZmZXJlbnQgbWVtYmVycworb2YgcG9pbnQsIGl0IGNhbiBiZSByZXBlYXRlZGx5IGNhbGxlZCBmb3IgYW55IG51bWJlciBvZiBlbGVtZW50cy4gSXQgY2FsbHMKK1tmdW5jcmVmIGJvb3N0OjpoYXNoX3ZhbHVlIGhhc2hfdmFsdWVdIG9uIHRoZSBzdXBwbGllZCBlbGVtZW50LCBhbmQgY29tYmluZXMgaXQgd2l0aCB0aGUgc2VlZC4KKworRnVsbCBjb2RlIGZvciB0aGlzIGV4YW1wbGUgaXMgYXQKK1tAYm9vc3Q6L2xpYnMvZnVuY3Rpb25hbC9oYXNoL2V4YW1wbGVzL3BvaW50LmNwcCAvbGlicy9mdW5jdGlvbmFsL2hhc2gvZXhhbXBsZXMvcG9pbnQuY3BwXS4KKworW25vdGUKK1doZW4gdXNpbmcgW2Z1bmNyZWYgYm9vc3Q6Omhhc2hfY29tYmluZV0gdGhlIG9yZGVyIG9mIHRoZQorY2FsbHMgbWF0dGVycy4KKycnJworPHByb2dyYW1saXN0aW5nPgorICAgIHN0ZDo6c2l6ZV90IHNlZWQgPSAwOworICAgIGJvb3N0OjpoYXNoX2NvbWJpbmUoc2VlZCwgMSk7CisgICAgYm9vc3Q6Omhhc2hfY29tYmluZShzZWVkLCAyKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+CityZXN1bHRzIGluIGEgZGlmZmVyZW50IHNlZWQgdG86Cis8cHJvZ3JhbWxpc3Rpbmc+CisgICAgc3RkOjpzaXplX3Qgc2VlZCA9IDA7CisgICAgYm9vc3Q6Omhhc2hfY29tYmluZShzZWVkLCAyKTsKKyAgICBib29zdDo6aGFzaF9jb21iaW5lKHNlZWQsIDEpOworPC9wcm9ncmFtbGlzdGluZz4KKycnJworSWYgeW91IGFyZSBjYWxjdWxhdGluZyBhIGhhc2ggdmFsdWUgZm9yIGRhdGEgd2hlcmUgdGhlIG9yZGVyIG9mIHRoZSBkYXRhCitkb2Vzbid0IG1hdHRlciBpbiBjb21wYXJpc29ucyAoZS5nLiBhIHNldCkgeW91IHdpbGwgaGF2ZSB0byBlbnN1cmUgdGhhdCB0aGUKK2RhdGEgaXMgYWx3YXlzIHN1cHBsaWVkIGluIHRoZSBzYW1lIG9yZGVyLgorXQorCitUbyBjYWxjdWxhdGUgdGhlIGhhc2ggb2YgYW4gaXRlcmF0b3IgcmFuZ2UgeW91IGNhbiB1c2UgW2Z1bmNyZWYgYm9vc3Q6Omhhc2hfcmFuZ2VdOgorCisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHNvbWVfc3RyaW5nczsKKyAgICBzdGQ6OnNpemVfdCBoYXNoID0gYGBbZnVuY3JlZiBib29zdDo6aGFzaF9yYW5nZV1gYChzb21lX3N0cmluZ3MuYmVnaW4oKSwgc29tZV9zdHJpbmdzLmVuZCgpKTsKKworTm90ZSB0aGF0IHdoZW4gd3JpdGluZyB0ZW1wbGF0ZSBjbGFzc2VzLCB5b3UgbWlnaHQgbm90IHdhbnQgdG8gaW5jbHVkZSB0aGUgbWFpbgoraGFzaCBoZWFkZXIgYXMgaXQncyBxdWl0ZSBhbiBleHBlbnNpdmUgaW5jbHVkZSB0aGF0IGJyaW5ncyBpbiBhIGxvdCBvZiBvdGhlcgoraGVhZGVycywgc28gaW5zdGVhZCB5b3UgY2FuIGluY2x1ZGUgdGhlIGA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoX2Z3ZC5ocHA+YAoraGVhZGVyIHdoaWNoIGZvcndhcmQgZGVjbGFyZXMgW2NsYXNzcmVmIGJvb3N0OjpoYXNoXSwKK1tmdW5jcmVmIGJvb3N0OjpoYXNoX3JhbmdlXSBhbmQgW2Z1bmNyZWYgYm9vc3Q6Omhhc2hfY29tYmluZV0uIFlvdSdsbCBuZWVkIHRvCitpbmNsdWRlIHRoZSBtYWluIGhlYWRlciBiZWZvcmUgaW5zdGFudGlhdGluZyBbY2xhc3NyZWYgYm9vc3Q6Omhhc2hdLiBXaGVuIHVzaW5nCithIGNvbnRhaW5lciB0aGF0IHVzZXMgW2NsYXNzcmVmIGJvb3N0OjpoYXNoXSBpdCBzaG91bGQgZG8gdGhhdCBmb3IgeW91LCBzbyB5b3VyCit0eXBlIHdpbGwgd29yayBmaW5lIHdpdGggdGhlIGJvb3N0IGhhc2ggY29udGFpbmVycy4gVGhlcmUncyBhbiBleGFtcGxlIG9mIHRoaXMKK2luIFtAYm9vc3Q6L2xpYnMvZnVuY3Rpb25hbC9oYXNoL2V4YW1wbGVzL3RlbXBsYXRlLmhwcCB0ZW1wbGF0ZS5ocHBdIGFuZAorW0Bib29zdDovbGlicy9mdW5jdGlvbmFsL2hhc2gvZXhhbXBsZXMvdGVtcGxhdGUuY3BwIHRlbXBsYXRlLmNwcF0uCisKK1tlbmRzZWN0XQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvZXhhbXBsZXMvSmFtZmlsZS52MiBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2V4YW1wbGVzL0phbWZpbGUudjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI5MTYyMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2V4YW1wbGVzL0phbWZpbGUudjIKQEAgLTAsMCArMSw5IEBACisKKyMgQ29weXJpZ2h0IERhbmllbCBKYW1lcyAyMDA1LiBVc2UsIG1vZGlmaWNhdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBhcmUKKyMgc3ViamVjdCB0byB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisjIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCitydW4gYm9va3MuY3BwIDsKK3J1biBwb2ludC5jcHAgOworcnVuIHBvcnRhYmxlLmNwcCA7CitydW4gdGVtcGxhdGUuY3BwIDsKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2V4YW1wbGVzL2Jvb2tzLmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2V4YW1wbGVzL2Jvb2tzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODAyZTBlCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvZXhhbXBsZXMvYm9va3MuY3BwCkBAIC0wLDAgKzEsNTEgQEAKKworLy8gQ29weXJpZ2h0IDIwMDUtMjAwOSBEYW5pZWwgSmFtZXMuCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisvLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworI2luY2x1ZGUgIi4vYm9va3MuaHBwIgorI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC5ocHA+CisjaW5jbHVkZSA8Y2Fzc2VydD4KKworLy8gSWYgc3RkOjp1bm9yZGVyZWRfc2V0IHdhcyBhdmFpbGFibGU6CisvLyNpbmNsdWRlIDx1bm9yZGVyZWRfc2V0PgorCisvLyBUaGlzIGV4YW1wbGUgaWxsdXN0cmF0ZXMgaG93IHRvIHVzZSBuZG5ib29zdDo6aGFzaCB3aXRoIGEgY3VzdG9tIGhhc2ggZnVuY3Rpb24uCisvLyBGb3IgZnVsbCBkZXRhaWxzLCBzZWUgdGhlIHR1dG9yaWFsLgorCitpbnQgbWFpbigpCit7CisgICAgbGlicmFyeTo6Ym9vayBrbmlmZSgzNDU4LCAiWmFuZSBHcmV5IiwgIlRoZSBIYXNoIEtuaWZlIE91dGZpdCIpOworICAgIGxpYnJhcnk6OmJvb2sgZGFuZGVsaW9uKDEzNTQsICJQYXVsIEouIFNoYW5sZXkiLCAiSGFzaCAmIERhbmRlbGlvbiBHcmVlbnMiKTsKKworICAgIG5kbmJvb3N0OjpoYXNoPGxpYnJhcnk6OmJvb2s+IGJvb2tfaGFzaGVyOworICAgIHN0ZDo6c2l6ZV90IGtuaWZlX2hhc2hfdmFsdWUgPSBib29rX2hhc2hlcihrbmlmZSk7CisgICAgKHZvaWQpa25pZmVfaGFzaF92YWx1ZTsgLy8gc3VwcHJlc3MgdW51c2VkIHZhcmlhYmxlIHdhcm5pbmcKKworICAgIC8vIElmIHN0ZDo6dW5vcmRlcmVkX3NldCB3YXMgYXZhaWxhYmxlOgorICAgIC8vCisgICAgLy9zdGQ6OnVub3JkZXJlZF9zZXQ8bGlicmFyeTo6Ym9vaywgbmRuYm9vc3Q6Omhhc2g8bGlicmFyeTo6Ym9vaz4gPiBib29rczsKKyAgICAvL2Jvb2tzLmluc2VydChrbmlmZSk7CisgICAgLy9ib29rcy5pbnNlcnQobGlicmFyeTo6Ym9vaygyNDQzLCAiTGluZGdyZW4sIFRvcmdueSIsICJIYXNoIikpOworICAgIC8vYm9va3MuaW5zZXJ0KGxpYnJhcnk6OmJvb2soMTk1MywgIlNueWRlciwgQmVybmFkZXR0ZSBNLiIsCisgICAgLy8gICAgIkhlYXZlbmx5IEhhc2g6IEEgVGFzdHkgTWl4IG9mIGEgTW90aGVyJ3MgTWVkaXRhdGlvbnMiKSk7CisKKyAgICAvL2Fzc2VydChib29rcy5maW5kKGtuaWZlKSAhPSBib29rcy5lbmQoKSk7CisgICAgLy9hc3NlcnQoYm9va3MuZmluZChkYW5kZWxpb24pID09IGJvb2tzLmVuZCgpKTsKKworICAgIHJldHVybiAwOworfQorCituYW1lc3BhY2UgbGlicmFyeQoreworICAgIGJvb2wgb3BlcmF0b3I9PShib29rIGNvbnN0JiBhLCBib29rIGNvbnN0JiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGEuaWQgPT0gYi5pZDsKKyAgICB9CisKKyAgICBzdGQ6OnNpemVfdCBoYXNoX3ZhbHVlKGJvb2sgY29uc3QmIGIpCisgICAgeworICAgICAgICBuZG5ib29zdDo6aGFzaDxpbnQ+IGhhc2hlcjsKKyAgICAgICAgcmV0dXJuIGhhc2hlcihiLmlkKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC9leGFtcGxlcy9ib29rcy5ocHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9leGFtcGxlcy9ib29rcy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk1YTc5OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2V4YW1wbGVzL2Jvb2tzLmhwcApAQCAtMCwwICsxLDI2IEBACisKKy8vIENvcHlyaWdodCAyMDA1LTIwMDkgRGFuaWVsIEphbWVzLgorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKy8vIFRoaXMgZXhhbXBsZSBpbGx1c3RyYXRlcyBob3cgdG8gdXNlIG5kbmJvb3N0OjpoYXNoIHdpdGggYSBjdXN0b20gaGFzaCBmdW5jdGlvbi4KKy8vIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBjb250YWluZWQgaW4gYm9va3MuY3BwCisKKyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPHN0cmluZz4KKworbmFtZXNwYWNlIGxpYnJhcnkKK3sKKyAgICBzdHJ1Y3QgYm9vaworICAgIHsKKyAgICAgICAgaW50IGlkOworICAgICAgICBzdGQ6OnN0cmluZyBhdXRob3I7CisgICAgICAgIHN0ZDo6c3RyaW5nIHRpdGxlOworCisgICAgICAgIGJvb2soaW50IGksIHN0ZDo6c3RyaW5nIGNvbnN0JiBhLCBzdGQ6OnN0cmluZyBjb25zdCYgdCkKKyAgICAgICAgICAgIDogaWQoaSksIGF1dGhvcihhKSwgdGl0bGUodCkge30KKyAgICB9OworCisgICAgYm9vbCBvcGVyYXRvcj09KGJvb2sgY29uc3QmLCBib29rIGNvbnN0Jik7CisgICAgc3RkOjpzaXplX3QgaGFzaF92YWx1ZShib29rIGNvbnN0Jik7Cit9CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC9leGFtcGxlcy9wb2ludC5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9leGFtcGxlcy9wb2ludC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM2ZTNlMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2V4YW1wbGVzL3BvaW50LmNwcApAQCAtMCwwICsxLDU0IEBACisKKy8vIENvcHlyaWdodCAyMDA1IERhbmllbCBKYW1lcy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisjaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KKyNpbmNsdWRlIDxjYXNzZXJ0PgorCisvLyBUaGlzIGV4YW1wbGUgaWxsdXN0cmF0ZXMgaG93IHRvIHVzZSBuZG5ib29zdDo6aGFzaF9jb21iaW5lIHRvIGdlbmVyYXRlIGEgaGFzaAorLy8gdmFsdWUgZnJvbSB0aGUgZGlmZmVyZW50IG1lbWJlcnMgb2YgYSBjbGFzcy4gRm9yIGZ1bGwgZGV0YWlscyBzZWUgdGhlIGhhc2gKKy8vIHR1dG9yaWFsLgorCitjbGFzcyBwb2ludAoreworICAgIGludCB4OworICAgIGludCB5OworcHVibGljOgorICAgIHBvaW50KCkgOiB4KDApLCB5KDApIHt9CisgICAgcG9pbnQoaW50IHgsIGludCB5KSA6IHgoeCksIHkoeSkge30KKworICAgIGJvb2wgb3BlcmF0b3I9PShwb2ludCBjb25zdCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4geCA9PSBvdGhlci54ICYmIHkgPT0gb3RoZXIueTsKKyAgICB9CisKKyAgICBmcmllbmQgc3RkOjpzaXplX3QgaGFzaF92YWx1ZShwb2ludCBjb25zdCYgcCkKKyAgICB7CisgICAgICAgIHN0ZDo6c2l6ZV90IHNlZWQgPSAwOworICAgICAgICBuZG5ib29zdDo6aGFzaF9jb21iaW5lKHNlZWQsIHAueCk7CisgICAgICAgIG5kbmJvb3N0OjpoYXNoX2NvbWJpbmUoc2VlZCwgcC55KTsKKworICAgICAgICByZXR1cm4gc2VlZDsKKyAgICB9Cit9OworCitpbnQgbWFpbigpCit7CisgICAgbmRuYm9vc3Q6Omhhc2g8cG9pbnQ+IHBvaW50X2hhc2hlcjsKKworICAgIHBvaW50IHAxKDAsIDApOworICAgIHBvaW50IHAyKDEsIDIpOworICAgIHBvaW50IHAzKDQsIDEpOworICAgIHBvaW50IHA0ID0gcDE7CisKKyAgICBhc3NlcnQocG9pbnRfaGFzaGVyKHAxKSA9PSBwb2ludF9oYXNoZXIocDQpKTsKKworICAgIC8vIFRoZXNlIHRlc3RzIGNvdWxkIGxlZ2FsbHkgZmFpbCwgYnV0IGlmIHRoZXkgZGlkIGl0J2QgYmUgYSBwcmV0dHkgYmFkCisgICAgLy8gaGFzaCBmdW5jdGlvbi4KKyAgICBhc3NlcnQocG9pbnRfaGFzaGVyKHAxKSAhPSBwb2ludF9oYXNoZXIocDIpKTsKKyAgICBhc3NlcnQocG9pbnRfaGFzaGVyKHAxKSAhPSBwb2ludF9oYXNoZXIocDMpKTsKKworICAgIHJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC9leGFtcGxlcy9wb3J0YWJsZS5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9leGFtcGxlcy9wb3J0YWJsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRiMmUwZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2V4YW1wbGVzL3BvcnRhYmxlLmNwcApAQCAtMCwwICsxLDU0IEBACisKKy8vIENvcHlyaWdodCAyMDA1LTIwMDkgRGFuaWVsIEphbWVzLgorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKyNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgorI2luY2x1ZGUgPGNhc3NlcnQ+CisKKy8vIFRoaXMgZXhhbXBsZSBpbGx1c3RyYXRlcyBob3cgdG8gY3VzdG9taXNlIG5kbmJvb3N0OjpoYXNoIHBvcnRhYmx5LCBzbyB0aGF0CisvLyBpdCdsbCB3b3JrIG9uIGJvdGggY29tcGlsZXJzIHRoYXQgZG9uJ3QgaW1wbGVtZW50IGFyZ3VtZW50IGRlcGVuZGVudCBsb29rdXAKKy8vIGFuZCBjb21waWxlcnMgdGhhdCBpbXBsZW1lbnQgc3RyaWN0IHR3by1waGFzZSB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uLgorCituYW1lc3BhY2UgZm9vCit7CisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+CisgICAgY2xhc3MgY3VzdG9tX3R5cGUKKyAgICB7CisgICAgICAgIFQgdmFsdWU7CisgICAgcHVibGljOgorICAgICAgICBjdXN0b21fdHlwZShUIHgpIDogdmFsdWUoeCkge30KKworICAgICAgICBzdGQ6OnNpemVfdCBoYXNoKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgbmRuYm9vc3Q6Omhhc2g8VD4gaGFzaGVyOworICAgICAgICAgICAgcmV0dXJuIGhhc2hlcih2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworfQorCisjaWZkZWYgQk9PU1RfTk9fQVJHVU1FTlRfREVQRU5ERU5UX0xPT0tVUAorbmFtZXNwYWNlIG5kbmJvb3N0CisjZWxzZQorbmFtZXNwYWNlIGZvbworI2VuZGlmCit7CisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+CisgICAgc3RkOjpzaXplX3QgaGFzaF92YWx1ZShmb286OmN1c3RvbV90eXBlPFQ+IHgpCisgICAgeworICAgICAgICByZXR1cm4geC5oYXNoKCk7CisgICAgfQorfQorCitpbnQgbWFpbigpCit7CisgICAgZm9vOjpjdXN0b21fdHlwZTxpbnQ+IHgoMSksIHkoMiksIHooMSk7CisKKyAgICBuZG5ib29zdDo6aGFzaDxmb286OmN1c3RvbV90eXBlPGludD4gPiBoYXNoZXI7CisKKyAgICBhc3NlcnQoaGFzaGVyKHgpID09IGhhc2hlcih4KSk7CisgICAgYXNzZXJ0KGhhc2hlcih4KSAhPSBoYXNoZXIoeSkpOworICAgIGFzc2VydChoYXNoZXIoeCkgPT0gaGFzaGVyKHopKTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvZXhhbXBsZXMvdGVtcGxhdGUuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvZXhhbXBsZXMvdGVtcGxhdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1OGVmNWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9leGFtcGxlcy90ZW1wbGF0ZS5jcHAKQEAgLTAsMCArMSwxOCBAQAorCisvLyBDb3B5cmlnaHQgMjAxMiBEYW5pZWwgSmFtZXMuCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisvLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworI2luY2x1ZGUgInRlbXBsYXRlLmhwcCIKKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPGJvb3N0L3Vub3JkZXJlZF9zZXQuaHBwPgorCitpbnQgbWFpbigpCit7CisgICAgdHlwZWRlZiBteV9wYWlyPGludCwgZmxvYXQ+IHBhaXI7CisgICAgbmRuYm9vc3Q6OnVub3JkZXJlZF9zZXQ8cGFpcj4gcGFpcl9zZXQ7CisgICAgcGFpcl9zZXQuZW1wbGFjZSgxMCwgMC41Zik7CisKKyAgICBhc3NlcnQocGFpcl9zZXQuZmluZChwYWlyKDEwLCAwLjVmKSkgIT0gcGFpcl9zZXQuZW5kKCkpOworICAgIGFzc2VydChwYWlyX3NldC5maW5kKHBhaXIoMTAsIDAuNmYpKSA9PSBwYWlyX3NldC5lbmQoKSk7Cit9CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC9leGFtcGxlcy90ZW1wbGF0ZS5ocHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC9leGFtcGxlcy90ZW1wbGF0ZS5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgxN2E5ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL2V4YW1wbGVzL3RlbXBsYXRlLmhwcApAQCAtMCwwICsxLDM2IEBACisKKy8vIENvcHlyaWdodCAyMDEyIERhbmllbCBKYW1lcy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisvLyBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgaG93IHRvIHdyaXRlIGEgaGFzaCBmdW5jdGlvbiBmb3IgYSB0ZW1wbGF0ZQorLy8gY2xhc3MuCisKKyNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2hfZndkLmhwcD4KKwordGVtcGxhdGUgPHR5cGVuYW1lIEEsIHR5cGVuYW1lIEI+CitjbGFzcyBteV9wYWlyCit7CisgICAgQSB2YWx1ZTE7CisgICAgQiB2YWx1ZTI7CitwdWJsaWM6CisgICAgbXlfcGFpcihBIGNvbnN0JiB2MSwgQiBjb25zdCYgdjIpCisgICAgICAgIDogdmFsdWUxKHYxKSwgdmFsdWUyKHYyKQorICAgIHt9CisKKyAgICBib29sIG9wZXJhdG9yPT0obXlfcGFpciBjb25zdCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUxID09IG90aGVyLnZhbHVlMSAmJgorICAgICAgICAgICAgdmFsdWUyID09IG90aGVyLnZhbHVlMjsKKyAgICB9CisKKyAgICBmcmllbmQgc3RkOjpzaXplX3QgaGFzaF92YWx1ZShteV9wYWlyIGNvbnN0JiBwKQorICAgIHsKKyAgICAgICAgc3RkOjpzaXplX3Qgc2VlZCA9IDA7CisgICAgICAgIG5kbmJvb3N0OjpoYXNoX2NvbWJpbmUoc2VlZCwgcC52YWx1ZTEpOworICAgICAgICBuZG5ib29zdDo6aGFzaF9jb21iaW5lKHNlZWQsIHAudmFsdWUyKTsKKworICAgICAgICByZXR1cm4gc2VlZDsKKyAgICB9Cit9OworCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC9pbmRleC5odG1sIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmI1NzU3Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvaW5kZXguaHRtbApAQCAtMCwwICsxLDE2IEBACisKKzwhLS0KK0NvcHlyaWdodCAyMDA1LTIwMDcgRGFuaWVsIEphbWVzLgorRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCistLT4KKworPGh0bWw+Cis8aGVhZD4KKyAgICA8bWV0YSBodHRwLWVxdWl2PSJyZWZyZXNoIiBjb250ZW50PSIwOyBVUkw9Li4vLi4vLi4vZG9jL2h0bWwvaGFzaC5odG1sIj4KKzwvaGVhZD4KKzxib2R5PgorQXV0b21hdGljIHJlZGlyZWN0aW9uIGZhaWxlZCwgcGxlYXNlIGdvIHRvCis8YSBocmVmPSIuLi8uLi8uLi9kb2MvaHRtbC9oYXNoLmh0bWwiPi4uLy4uLy4uL2RvYy9odG1sL2hhc2guaHRtbDwvYT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvSmFtZmlsZS52MiBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvSmFtZmlsZS52MgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNzY3YmYzCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9KYW1maWxlLnYyCkBAIC0wLDAgKzEsODEgQEAKKworIyBDb3B5cmlnaHQgMjAwNS0yMDEyIERhbmllbCBKYW1lcy4KKyMgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworIyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworaW1wb3J0IHRlc3RpbmcgOworCitwcm9qZWN0IGhhc2gtdGVzdHMKKyAgICA6IHJlcXVpcmVtZW50cworICAgICAgICA8d2FybmluZ3M+YWxsCisgICAgICAgIDx0b29sc2V0PmludGVsOjx3YXJuaW5ncz5vbgorICAgICAgICAjPHRvb2xzZXQ+aW50ZWw6PGN4eGZsYWdzPi1zdHJpY3QtYW5zaQorICAgICAgICA8dG9vbHNldD5nY2M6PGN4eGZsYWdzPiItcGVkYW50aWMgLVdzdHJpY3QtYWxpYXNpbmcgLWZzdHJpY3QtYWxpYXNpbmcgLVdleHRyYSAtV3NpZ24tcHJvbW8gLVd1bnVzZWQtcGFyYW1ldGVyIC1XY29udmVyc2lvbiAtV2Zsb2F0LWVxdWFsIC1Xc2hhZG93IgorICAgICAgICA8dG9vbHNldD5kYXJ3aW46PGN4eGZsYWdzPiItcGVkYW50aWMgLVdzdHJpY3QtYWxpYXNpbmcgLWZzdHJpY3QtYWxpYXNpbmcgLVdleHRyYSAtV3NpZ24tcHJvbW8gLVd1bnVzZWQtcGFyYW1ldGVyIC1XY29udmVyc2lvbiAtV2Zsb2F0LWVxdWFsIC1Xc2hhZG93IgorICAgICAgICAjPHRvb2xzZXQ+bXN2Yzo8d2FybmluZ3MtYXMtZXJyb3JzPm9uCisgICAgICAgICM8dG9vbHNldD5nY2M6PHdhcm5pbmdzLWFzLWVycm9ycz5vbgorICAgICAgICAjPHRvb2xzZXQ+ZGFyd2luOjx3YXJuaW5ncy1hcy1lcnJvcnM+b24KKyAgICA7CisKK3Rlc3Qtc3VpdGUgZnVuY3Rpb25hbC9oYXNoCisgICAgOgorICAgICAgICBbIHJ1biBoYXNoX2Z3ZF90ZXN0XzEuY3BwIF0KKyAgICAgICAgWyBydW4gaGFzaF9md2RfdGVzdF8yLmNwcCBdCisgICAgICAgIFsgcnVuIGhhc2hfbnVtYmVyX3Rlc3QuY3BwIF0KKyAgICAgICAgWyBydW4gaGFzaF9lbnVtX3Rlc3QuY3BwIF0KKyAgICAgICAgWyBydW4gaGFzaF9wb2ludGVyX3Rlc3QuY3BwIF0KKyAgICAgICAgWyBydW4gaGFzaF9mdW5jdGlvbl9wb2ludGVyX3Rlc3QuY3BwIF0KKyAgICAgICAgWyBydW4gaGFzaF9mbG9hdF90ZXN0LmNwcCBdCisgICAgICAgIFsgcnVuIGhhc2hfbG9uZ19kb3VibGVfdGVzdC5jcHAgXQorICAgICAgICBbIHJ1biBoYXNoX3N0cmluZ190ZXN0LmNwcCBdCisgICAgICAgIFsgcnVuIGhhc2hfcmFuZ2VfdGVzdC5jcHAgXQorICAgICAgICBbIHJ1biBoYXNoX2N1c3RvbV90ZXN0LmNwcCBdCisgICAgICAgIFsgcnVuIGhhc2hfZ2xvYmFsX25hbWVzcGFjZV90ZXN0LmNwcCBdCisgICAgICAgIFsgcnVuIGhhc2hfZnJpZW5kX3Rlc3QuY3BwIF0KKyAgICAgICAgWyBydW4gaGFzaF9idWlsdF9pbl9hcnJheV90ZXN0LmNwcCBdCisgICAgICAgIFsgcnVuIGhhc2hfdmFsdWVfYXJyYXlfdGVzdC5jcHAgXQorICAgICAgICBbIHJ1biBoYXNoX3ZlY3Rvcl90ZXN0LmNwcCBdCisgICAgICAgIFsgcnVuIGhhc2hfbGlzdF90ZXN0LmNwcCBdCisgICAgICAgIFsgcnVuIGhhc2hfZGVxdWVfdGVzdC5jcHAgXQorICAgICAgICBbIHJ1biBoYXNoX3NldF90ZXN0LmNwcCBdCisgICAgICAgIFsgcnVuIGhhc2hfbWFwX3Rlc3QuY3BwIF0KKyAgICAgICAgWyBydW4gaGFzaF9jb21wbGV4X3Rlc3QuY3BwIF0KKyAgICAgICAgWyBydW4gaGFzaF90eXBlX2luZGV4X3Rlc3QuY3BwIF0KKyAgICAgICAgWyBydW4gaGFzaF9zdGRfYXJyYXlfdGVzdC5jcHAgXQorICAgICAgICBbIHJ1biBoYXNoX3N0ZF90dXBsZV90ZXN0LmNwcCBdCisgICAgICAgIFsgcnVuIGhhc2hfc3RkX3NtYXJ0X3B0cl90ZXN0LmNwcCBdCisgICAgICAgIFsgcnVuIGxpbmtfdGVzdC5jcHAgbGlua190ZXN0XzIuY3BwIF0KKyAgICAgICAgWyBydW4gbGlua19leHRfdGVzdC5jcHAgbGlua19ub19leHRfdGVzdC5jcHAgXQorICAgICAgICBbIHJ1biBleHRlbnNpb25zX2hwcF90ZXN0LmNwcCBdCisgICAgICAgIFsgY29tcGlsZS1mYWlsIGhhc2hfbm9fZXh0X2ZhaWxfdGVzdC5jcHAgXQorICAgICAgICBbIGNvbXBpbGUtZmFpbCBuYW1lc3BhY2VfZmFpbF90ZXN0LmNwcCBdCisgICAgICAgIFsgcnVuIGltcGxpY2l0X3Rlc3QuY3BwIF0KKyAgICAgICAgWyBydW4gaGFzaF9ub19leHRfbWFjcm9fMS5jcHAgXQorICAgICAgICBbIHJ1biBoYXNoX25vX2V4dF9tYWNyb18yLmNwcCBdCisgICAgOworCit0ZXN0LXN1aXRlIGZ1bmN0aW9uYWwvaGFzaF9ub19leHQKKyAgICA6CisgICAgICAgIFsgcnVuIGhhc2hfbnVtYmVyX3Rlc3QuY3BwIDogOiA6IDxkZWZpbmU+Qk9PU1RfSEFTSF9OT19FWFRFTlNJT05TIDogbm9fZXh0X251bWJlcl90ZXN0IF0KKyAgICAgICAgWyBydW4gaGFzaF9wb2ludGVyX3Rlc3QuY3BwIDogOiA6IDxkZWZpbmU+Qk9PU1RfSEFTSF9OT19FWFRFTlNJT05TIDogbm9fZXh0X3BvaW50ZXJfdGVzdCBdCisgICAgICAgIFsgcnVuIGhhc2hfZnVuY3Rpb25fcG9pbnRlcl90ZXN0LmNwcCA6IDogOiA8ZGVmaW5lPkJPT1NUX0hBU0hfTk9fRVhURU5TSU9OUyA6IG5vX2V4dF9mdW5jdGlvbl9wb2ludGVyX3Rlc3QgXQorICAgICAgICBbIHJ1biBoYXNoX2Zsb2F0X3Rlc3QuY3BwIDogOiA6IDxkZWZpbmU+Qk9PU1RfSEFTSF9OT19FWFRFTlNJT05TIDogbm9fZXh0X2Zsb2F0X3Rlc3QgXQorICAgICAgICBbIHJ1biBoYXNoX2xvbmdfZG91YmxlX3Rlc3QuY3BwIDogOiA6IDxkZWZpbmU+Qk9PU1RfSEFTSF9OT19FWFRFTlNJT05TIDogbm9fZXh0X2xvbmdfZG91YmxlX3Rlc3QgXQorICAgICAgICBbIHJ1biBoYXNoX3N0cmluZ190ZXN0LmNwcCA6IDogOiA8ZGVmaW5lPkJPT1NUX0hBU0hfTk9fRVhURU5TSU9OUyA6IG5vX2V4dF9zdHJpbmdfdGVzdCBdCisgICAgICAgIFsgcnVuIGxpbmtfdGVzdC5jcHAgbGlua190ZXN0XzIuY3BwIDogOiA6IDxkZWZpbmU+Qk9PU1RfSEFTSF9OT19FWFRFTlNJT05TIDogbm9fZXh0X2xpbmtfdGVzdCBdCisgICAgOworCisjIFRlc3RzIHRvIHNlZSBpZiB0aGUgZmxvYXRpbmcgcG9pbnQgaGFzaCBpcyB1c2luZyB0aGUgYmluYXJ5IGhhc2guCisjIE5vdCBydW4gbm9ybWFsbHkgYmVjYXVzZSBvbiBzb21lIHBsYXRmb3JtcyB0aGVzZSBzaG91bGQgZmFpbC4KK3Rlc3Qtc3VpdGUgZnVuY3Rpb25hbC9oYXNoX25vX2dlbmVyaWNfZmxvYXQKKyAgICA6CisgICAgICAgIFsgcnVuIGhhc2hfZmxvYXRfdGVzdC5jcHAKKyAgICAgICAgICAgIDogOiA6IDxkZWZpbmU+Qk9PU1RfSEFTSF9ERVRBSUxfVEVTVF9XSVRIT1VUX0dFTkVSSUMKKyAgICAgICAgICAgIDogaGFzaF9mbG9hdF90ZXN0X25vX2dlbmVyaWMgXQorICAgICAgICBbIHJ1biBoYXNoX2xvbmdfZG91YmxlX3Rlc3QuY3BwCisgICAgICAgICAgICA6IDogOiA8ZGVmaW5lPkJPT1NUX0hBU0hfREVUQUlMX1RFU1RfV0lUSE9VVF9HRU5FUklDCisgICAgICAgICAgICA6IGhhc2hfbG9uZ19kb3VibGVfdGVzdF9ub19nZW5lcmljIF0KKyAgICA7CitleHBsaWNpdCBmdW5jdGlvbmFsL2hhc2hfbm9fZ2VuZXJpY19mbG9hdCA7CisKK2J1aWxkLXByb2plY3QgLi4vZXhhbXBsZXMgOwpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9jb21waWxlX3RpbWUuaHBwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9jb21waWxlX3RpbWUuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNDQ1ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2NvbXBpbGVfdGltZS5ocHAKQEAgLTAsMCArMSwxNiBAQAorCisvLyBDb3B5cmlnaHQgMjAwNS0yMDA5IERhbmllbCBKYW1lcy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisjaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KKyNpbmNsdWRlIDxib29zdC9zdGF0aWNfYXNzZXJ0LmhwcD4KKyNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9pc19iYXNlX2FuZF9kZXJpdmVkLmhwcD4KKwordGVtcGxhdGUgPGNsYXNzIFQ+Cit2b2lkIGNvbXBpbGVfdGltZV90ZXN0cyhUKikKK3sKKyAgICBCT09TVF9TVEFUSUNfQVNTRVJUKChuZG5ib29zdDo6aXNfYmFzZV9hbmRfZGVyaXZlZDwKKyAgICAgICAgc3RkOjp1bmFyeV9mdW5jdGlvbjxULCBzdGQ6OnNpemVfdD4sIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8VD4gPjo6dmFsdWUpKTsKK30KKwpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9jb25maWcuaHBwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9jb25maWcuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMTQyMmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2NvbmZpZy5ocHAKQEAgLTAsMCArMSwyMSBAQAorCisvLyBDb3B5cmlnaHQgMjAwNS0yMDA5IERhbmllbCBKYW1lcy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisjaWYgZGVmaW5lZChCT09TVF9IQVNIX1RFU1RfU1REKQorIyAgZGVmaW5lIEJPT1NUX0hBU0hfVEVTVF9TVERfSU5DTFVERVMKKyMgIGRlZmluZSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFIHN0ZAorI2Vsc2UKKyMgIGRlZmluZSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFIG5kbmJvb3N0CisjICBpZiAhZGVmaW5lZChCT09TVF9IQVNIX05PX0VYVEVOU0lPTlMpCisjICAgIGRlZmluZSBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUworIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfV0lOMzJfV0NFKQorLy8gVGhlIHN0YW5kYXJkIHdpbmRvd3MgbW9iaWxlIGhlYWRlcnMgdHJpZ2dlciB0aGlzIHdhcm5pbmcgc28gSSBkaXNhYmxlIGl0CisvLyBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4KKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQyMDEpICAgLy8gbm9uc3RhbmRhcmQgZXh0ZW5zaW9uIHVzZWQgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuYW1lbGVzcyBzdHJ1Y3QvdW5pb24KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9leHRlbnNpb25zX2hwcF90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvZXh0ZW5zaW9uc19ocHBfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVmNmY4ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvZXh0ZW5zaW9uc19ocHBfdGVzdC5jcHAKQEAgLTAsMCArMSwxOSBAQAorCisvLyBDb3B5cmlnaHQgMjAwOSBEYW5pZWwgSmFtZXMuCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisvLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworLy8gQ2hlY2sgdGhhdCBib29zdC9mdW5jdGlvbmFsL2hhc2gvZXh0ZW5zaW9ucy5ocHAgd29ya3Mgb2theS4KKy8vCisvLyBJdCBwcm9iYWJseSBzaG91bGQgYmUgaW4gYm9vc3QvZnVuY3Rpb25hbC9oYXNoL2RldGFpbCwgYnV0IHNpbmNlIGl0IGlzbid0IGl0CisvLyBzaG91bGQgd29yay4KKworI2luY2x1ZGUgIi4vY29uZmlnLmhwcCIKKworI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC9leHRlbnNpb25zLmhwcD4KKworaW50IG1haW4oKSB7CisgICAgaW50IHhbMl0gPSB7IDIsIDMgfTsKKyAgICBuZG5ib29zdDo6aGFzaDxpbnRbMl0+IGhmOworICAgIGhmKHgpOworfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9leHRyYS9KYW1maWxlLnYyIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9leHRyYS9KYW1maWxlLnYyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0M2MxYjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2V4dHJhL0phbWZpbGUudjIKQEAgLTAsMCArMSwxMyBAQAorCisjIENvcHlyaWdodCAyMDEyIERhbmllbCBKYW1lcy4KKyMgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworIyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworaW1wb3J0IHRlc3RpbmcgOworCitidWlsZC1wcm9qZWN0IC4uIDsKKwordGVzdC1zdWl0ZSBmdW5jdGlvbmFsL2hhc2gvY29uZmlnCisgICAgOgorICAgICAgICBbIGNvbXBpbGUgY2hlY2tfZmxvYXRfZnVuY3MuY3BwIF0KKyAgICA7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9leHRyYS9jaGVja19mbG9hdF9mdW5jcy5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2V4dHJhL2NoZWNrX2Zsb2F0X2Z1bmNzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTgxN2JhCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9leHRyYS9jaGVja19mbG9hdF9mdW5jcy5jcHAKQEAgLTAsMCArMSw1OCBAQAorCisvLyBDb3B5cmlnaHQgMjAxMiBEYW5pZWwgSmFtZXMuCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisvLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworI2luY2x1ZGUgPGJvb3N0L3N0YXRpY19hc3NlcnQuaHBwPgorI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX3NhbWUuaHBwPgorI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2lzX2NvbnZlcnRpYmxlLmhwcD4KKyNpbmNsdWRlIDxjbWF0aD4KKworbmFtZXNwYWNlIHRlc3QKK3sKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVDE+CisgICAgc3RydWN0IGNoZWNrX3JldHVybl90eXBlCisgICAgeworICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVDI+CisgICAgICAgIHN0YXRpYyB2b2lkIGVxdWFscyhUMikKKyAgICAgICAgeworICAgICAgICAgICAgQk9PU1RfU1RBVElDX0FTU0VSVCgobmRuYm9vc3Q6OmlzX3NhbWU8VDEsIFQyPjo6dmFsdWUpKTsKKyAgICAgICAgfQorCisgICAgICAgIHRlbXBsYXRlIDxjbGFzcyBUMj4KKyAgICAgICAgc3RhdGljIHZvaWQgZXF1YWxzX3JlZihUMiYpCisgICAgICAgIHsKKyAgICAgICAgICAgIEJPT1NUX1NUQVRJQ19BU1NFUlQoKG5kbmJvb3N0Ojppc19zYW1lPFQxLCBUMj46OnZhbHVlKSk7CisgICAgICAgIH0KKworICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVDI+CisgICAgICAgIHN0YXRpYyB2b2lkIGNvbnZlcnRpYmxlKFQyKQorICAgICAgICB7CisgICAgICAgICAgICBCT09TVF9TVEFUSUNfQVNTRVJUKChuZG5ib29zdDo6aXNfY29udmVydGlibGU8VDIsIFQxPjo6dmFsdWUpKTsKKyAgICAgICAgfQorICAgIH07Cit9CisKK2ludCBtYWluKCkgeworICAgIGZsb2F0IGYgPSAwOworICAgIGRvdWJsZSBkID0gMDsKKyAgICBsb25nIGRvdWJsZSBsID0gMDsKKworICAgIHRlc3Q6OmNoZWNrX3JldHVybl90eXBlPGZsb2F0Pjo6ZXF1YWxzKHN0ZDo6bGRleHAoZiwgMCkpOworICAgIHRlc3Q6OmNoZWNrX3JldHVybl90eXBlPGRvdWJsZT46OmVxdWFscyhzdGQ6OmxkZXhwKGQsIDApKTsKKyAgICB0ZXN0OjpjaGVja19yZXR1cm5fdHlwZTxsb25nIGRvdWJsZT46OmVxdWFscyhzdGQ6OmxkZXhwKGwsIDApKTsKKworICAgIGludCBkdW1teSA9IDA7CisKKyAgICB0ZXN0OjpjaGVja19yZXR1cm5fdHlwZTxmbG9hdD46OmVxdWFscyhzdGQ6OmZyZXhwKGYsICZkdW1teSkpOworICAgIHRlc3Q6OmNoZWNrX3JldHVybl90eXBlPGRvdWJsZT46OmVxdWFscyhzdGQ6OmZyZXhwKGQsICZkdW1teSkpOworICAgIHRlc3Q6OmNoZWNrX3JldHVybl90eXBlPGxvbmcgZG91YmxlPjo6ZXF1YWxzKHN0ZDo6ZnJleHAobCwgJmR1bW15KSk7CisKKyNpZiBCT09TVF9IQVNIX1VTRV9GUENMQVNTSUZZCisKKyAgICBpbnQgKCpmcGMxKShmbG9hdCkgPSBzdGQ6OmZwY2xhc3NpZnk7CisgICAgaW50ICgqZnBjMikoZG91YmxlKSA9IHN0ZDo6ZnBjbGFzc2lmeTsKKyAgICBpbnQgKCpmcGMzKShsb25nIGRvdWJsZSkgPSBzdGQ6OmZwY2xhc3NpZnk7CisKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2J1aWx0X2luX2FycmF5X3Rlc3QuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2J1aWx0X2luX2FycmF5X3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNmYzODUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfYnVpbHRfaW5fYXJyYXlfdGVzdC5jcHAKQEAgLTAsMCArMSw3NSBAQAorCisvLyBDb3B5cmlnaHQgMjAwNS0yMDA5IERhbmllbCBKYW1lcy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisjaW5jbHVkZSAiLi9jb25maWcuaHBwIgorCisjaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKKyMgIGlmZGVmIEJPT1NUX0hBU0hfVEVTVF9TVERfSU5DTFVERVMKKyMgICAgaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyMgIGVsc2UKKyMgICAgaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KKyMgIGVuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KKworI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TCisKK3ZvaWQgYXJyYXlfaW50X3Rlc3QoKQoreworICAgIGNvbnN0IGludCBsZW5ndGgxID0gMjU7CisgICAgaW50IGFycmF5MVsyNV0gPSB7CisgICAgICAgIDI2LCAtNDMsIDMyLCA2NSwgNDUsCisgICAgICAgIDEyLCA2NywgMzIsIDEyLCAyMywKKyAgICAgICAgMCwgMCwgMCwgMCwgMCwKKyAgICAgICAgOCwgLTEyLCAyMywgNjUsIDQ1LAorICAgICAgICAtMSwgOTMsIC01NCwgOTg3LCAzCisgICAgfTsKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPGludFsyNV0+IGhhc2hlcjE7CisKKyAgICBjb25zdCBpbnQgbGVuZ3RoMiA9IDE7CisgICAgaW50IGFycmF5MlsxXSA9IHszfTsKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPGludFsxXT4gaGFzaGVyMjsKKworICAgIGNvbnN0IGludCBsZW5ndGgzID0gMjsKKyAgICBpbnQgYXJyYXkzWzJdID0gezIsIDN9OworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8aW50WzJdPiBoYXNoZXIzOworCisgICAgQk9PU1RfVEVTVChoYXNoZXIxKGFycmF5MSkKKyAgICAgICAgICAgID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UoYXJyYXkxLCBhcnJheTEgKyBsZW5ndGgxKSk7CisgICAgQk9PU1RfVEVTVChoYXNoZXIyKGFycmF5MikKKyAgICAgICAgICAgID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UoYXJyYXkyLCBhcnJheTIgKyBsZW5ndGgyKSk7CisgICAgQk9PU1RfVEVTVChoYXNoZXIzKGFycmF5MykKKyAgICAgICAgICAgID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UoYXJyYXkzLCBhcnJheTMgKyBsZW5ndGgzKSk7Cit9CisKK3ZvaWQgdHdvX2RpbWVuc2lvbmFsX2FycmF5X3Rlc3QoKQoreworICAgIGludCBhcnJheVszXVsyXSA9IHt7LTUsIDZ9LCB7NywgLTN9LCB7MjYsIDF9fTsKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPGludFszXVsyXT4gaGFzaGVyOworCisgICAgc3RkOjpzaXplX3Qgc2VlZDEgPSAwOworICAgIGZvcihpbnQgaSA9IDA7IGkgPCAzOyArK2kpCisgICAgeworICAgICAgICBzdGQ6OnNpemVfdCBzZWVkMiA9IDA7CisgICAgICAgIGZvcihpbnQgaiA9IDA7IGogPCAyOyArK2opCisgICAgICAgICAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX2NvbWJpbmUoc2VlZDIsIGFycmF5W2ldW2pdKTsKKyAgICAgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9jb21iaW5lKHNlZWQxLCBzZWVkMik7CisgICAgfQorCisgICAgQk9PU1RfVEVTVChoYXNoZXIoYXJyYXkpID09IHNlZWQxKTsKKyAgICBCT09TVF9URVNUKGhhc2hlcihhcnJheSkgPT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZShhcnJheSwgYXJyYXkgKyAzKSk7Cit9CisKKyNlbmRpZiAvLyBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUworCitpbnQgbWFpbigpCit7CisjaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKKyAgICBhcnJheV9pbnRfdGVzdCgpOworICAgIHR3b19kaW1lbnNpb25hbF9hcnJheV90ZXN0KCk7CisjZW5kaWYKKyAgICByZXR1cm4gbmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9jb21wbGV4X3Rlc3QuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2NvbXBsZXhfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg2NDFkMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9jb21wbGV4X3Rlc3QuY3BwCkBAIC0wLDAgKzEsMTEwIEBACisKKy8vIENvcHlyaWdodCAyMDA1LTIwMDkgRGFuaWVsIEphbWVzLgorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKyNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCisKKyNpZiAhZGVmaW5lZChCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUykKKworaW50IG1haW4oKSB7fQorCisjZWxzZQorCisjaWZkZWYgQk9PU1RfSEFTSF9URVNUX1NURF9JTkNMVURFUworIyAgaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNlbHNlCisjICBpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgorI2VuZGlmCisKKyNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+CisKKyNpZiBkZWZpbmVkKEJPT1NUX01TVkMpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0MjQ0KSAgIC8vIGNvbnZlcnNpb24gZnJvbSAndW5zaWduZWQgbG9uZycgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3Vuc2lnbmVkIHNob3J0JywgcG9zc2libGUgbG9zcyBvZiBkYXRhCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0MjQ1KSAgIC8vIGNvbnZlcnNpb24gZnJvbSAnaW50JyB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3QgdW5zaWduZWQgc2hvcnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaWduZWQvdW5zaWduZWQgbWlzbWF0Y2gKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQzMDUpICAgLy8gdHJ1bmNhdGlvbiBmcm9tICdkb3VibGUnIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdCBzdGQ6OmNvbXBsZXg8ZmxvYXQ+OjpfVHknCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0MzA5KSAgIC8vIHRydW5jYXRpb24gb2YgY29uc3RhbnQgdmFsdWUKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ1MTIpICAgLy8gYXNzaWdubWVudCBvcGVyYXRvciBjb3VsZCBub3QgYmUgZ2VuZXJhdGVkCisjaWYgQk9PU1RfTVNWQyA8IDE0MDAKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQyNjcpICAgLy8gY29udmVyc2lvbiBmcm9tICdzaXplX3QnIHRvICd1bnNpZ25lZCBpbnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwb3NzaWJsZSBsb3NzIG9mIGRhdGEKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChCT09TVF9JTlRFTF9DWFhfVkVSU0lPTikKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdmbG9hdC1lcXVhbCIKKyNlbmRpZgorCisjaW5jbHVkZSA8Y29tcGxleD4KKyNpbmNsdWRlIDxzc3RyZWFtPgorI2luY2x1ZGUgPGJvb3N0L2xpbWl0cy5ocHA+CisKK3RlbXBsYXRlIDxjbGFzcyBUPgordm9pZCBnZW5lcmljX2NvbXBsZXhfdGVzdHMoc3RkOjpjb21wbGV4PFQ+IHYpCit7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxzdGQ6OmNvbXBsZXg8VD4gPiBjb21wbGV4X2hhc2hlcjsKKworICAgIEJPT1NUX1RFU1QoY29tcGxleF9oYXNoZXIodikgPT0gY29tcGxleF9oYXNoZXIodikpOworCisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxUPiByZWFsX2hhc2hlcjsKKyAgICBUIHJlYWwgPSB2LnJlYWwoKTsKKyAgICBUIGltYWcgPSB2LmltYWcoKTsKKworICAgIEJPT1NUX1RFU1QocmVhbF9oYXNoZXIocmVhbCkgPT0gY29tcGxleF9oYXNoZXIoc3RkOjpjb21wbGV4PFQ+KHJlYWwpKSk7CisKKyAgICBpZihpbWFnICE9IDAgJiYgcmVhbF9oYXNoZXIocmVhbCkgPT0gY29tcGxleF9oYXNoZXIodikpIHsKKyAgICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIG9zOworICAgICAgICBvczw8InJlYWxfaGFzaGVyKCI8PHJlYWw8PCIpID09IGNvbXBsZXhfaGFzaGVyKCIKKyAgICAgICAgICAgIDw8di5yZWFsKCk8PCIgKyAiPDx2LmltYWcoKTw8ImkpID09ICIKKyAgICAgICAgICAgIDw8cmVhbF9oYXNoZXIocmVhbCk8PCIgKFRoaXMgbWlnaHQgbm90IGJlIGEgYnVnKS4iOworICAgICAgICBCT09TVF9FUlJPUihvcy5zdHIoKS5jX3N0cigpKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBGbG9hdD4KK3ZvaWQgY29tcGxleF9mbG9hdF90ZXN0cyhGbG9hdCopCit7CisgICAgdHlwZWRlZiBzdGQ6OmNvbXBsZXg8RmxvYXQ+IGNvbXBsZXg7CisgICAgZ2VuZXJpY19jb21wbGV4X3Rlc3RzKGNvbXBsZXgoMCwwKSk7CisgICAgZ2VuZXJpY19jb21wbGV4X3Rlc3RzKGNvbXBsZXgoMC41LDApKTsKKyAgICBnZW5lcmljX2NvbXBsZXhfdGVzdHMoY29tcGxleCgyNSwwKSk7CisgICAgZ2VuZXJpY19jb21wbGV4X3Rlc3RzKGNvbXBsZXgoMjUsMCkpOworICAgIGdlbmVyaWNfY29tcGxleF90ZXN0cyhjb21wbGV4KHN0YXRpY19jYXN0PEZsb2F0PigtNjcuNTMyNDUzNSksc3RhdGljX2Nhc3Q8RmxvYXQ+KDU2LjIzNTc4Njc4KSkpOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgSW50ZWdlcj4KK3ZvaWQgY29tcGxleF9pbnRlZ3JhbF90ZXN0cyhJbnRlZ2VyKikKK3sKKyAgICB0eXBlZGVmIHN0ZDo6Y29tcGxleDxJbnRlZ2VyPiBjb21wbGV4OworICAgIGdlbmVyaWNfY29tcGxleF90ZXN0cyhjb21wbGV4KDAsMCkpOworICAgIGdlbmVyaWNfY29tcGxleF90ZXN0cyhjb21wbGV4KDE1MzQyLDEyNCkpOworICAgIGdlbmVyaWNfY29tcGxleF90ZXN0cyhjb21wbGV4KDI1LDU0MzU2KSk7CisgICAgZ2VuZXJpY19jb21wbGV4X3Rlc3RzKGNvbXBsZXgoNTMyNSwyMzQ2KSk7CisgICAgZ2VuZXJpY19jb21wbGV4X3Rlc3RzKGNvbXBsZXgoLTI0Mzg5NywtNDk5MjM4NzQpKTsKKyAgICBnZW5lcmljX2NvbXBsZXhfdGVzdHMoY29tcGxleCgtNTQzLDc2MykpOworfQorCitpbnQgbWFpbigpCit7CisgICAgLy8gSSd2ZSBjb21tZW50cyBvdXQgdGhlIHNob3J0IGFuZCB1bnNpZ25lZCBzaG9ydCB0ZXN0cworICAgIC8vIGFzIHRoZXkgY2F1c2Ugd2FybmluZ3MgYW5kIGRvbid0IHJlYWxseSB0ZXN0CisgICAgLy8gYW55dGhpbmcgdGhhdCB0aGUgb3RoZXIgdGVzdHMgYWxyZWFkeSBkZWFsIHdpdGguCisKKyAgICBjb21wbGV4X2Zsb2F0X3Rlc3RzKChmbG9hdCopIDApOworICAgIGNvbXBsZXhfZmxvYXRfdGVzdHMoKGRvdWJsZSopIDApOworICAgIGNvbXBsZXhfZmxvYXRfdGVzdHMoKGxvbmcgZG91YmxlKikgMCk7CisgICAgLy9jb21wbGV4X2ludGVncmFsX3Rlc3RzKChzaG9ydCopIDApOworICAgIGNvbXBsZXhfaW50ZWdyYWxfdGVzdHMoKGludCopIDApOworICAgIGNvbXBsZXhfaW50ZWdyYWxfdGVzdHMoKGxvbmcqKSAwKTsKKyAgICAvL2NvbXBsZXhfaW50ZWdyYWxfdGVzdHMoKHVuc2lnbmVkIHNob3J0KikgMCk7CisgICAgY29tcGxleF9pbnRlZ3JhbF90ZXN0cygodW5zaWduZWQgaW50KikgMCk7CisgICAgY29tcGxleF9pbnRlZ3JhbF90ZXN0cygodW5zaWduZWQgbG9uZyopIDApOworCisgICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Cit9CisKKyNlbmRpZiAvLyBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUwpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2N1c3RvbV90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9jdXN0b21fdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EyYTMxMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9jdXN0b21fdGVzdC5jcHAKQEAgLTAsMCArMSwxMDAgQEAKKworLy8gQ29weXJpZ2h0IDIwMDUtMjAwOSBEYW5pZWwgSmFtZXMuCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisvLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworI2luY2x1ZGUgIi4vY29uZmlnLmhwcCIKKyNpbmNsdWRlIDxib29zdC9jb25maWcuaHBwPgorI2luY2x1ZGUgPGNzdGRkZWY+CisKK25hbWVzcGFjZSB0ZXN0Cit7CisgICAgc3RydWN0IGN1c3RvbQorICAgIHsKKyAgICAgICAgaW50IHZhbHVlXzsKKworICAgICAgICBzdGQ6OnNpemVfdCBoYXNoKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHZhbHVlXyAqIDEwOworICAgICAgICB9CisKKyNpZiAhZGVmaW5lZChCT09TVF9OT19BUkdVTUVOVF9ERVBFTkRFTlRfTE9PS1VQKQorICAgICAgICBmcmllbmQgc3RkOjpzaXplX3QgaGFzaF92YWx1ZShjdXN0b20gY29uc3QmIHggKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4geC5oYXNoKCk7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGN1c3RvbShpbnQgeCkgOiB2YWx1ZV8oeCkge30KKyAgICB9OworfQorCisjaWYgZGVmaW5lZChCT09TVF9OT19BUkdVTUVOVF9ERVBFTkRFTlRfTE9PS1VQKQorbmFtZXNwYWNlIG5kbmJvb3N0Cit7CisgICAgc3RkOjpzaXplX3QgaGFzaF92YWx1ZSh0ZXN0OjpjdXN0b20geCkKKyAgICB7CisgICAgICAgIHJldHVybiB4Lmhhc2goKTsKKyAgICB9Cit9CisjZW5kaWYKKworI2luY2x1ZGUgIi4vY29uZmlnLmhwcCIKKworI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TCisjICBpZmRlZiBCT09TVF9IQVNIX1RFU1RfU1REX0lOQ0xVREVTCisjICAgIGluY2x1ZGUgPGZ1bmN0aW9uYWw+CisjICBlbHNlCisjICAgIGluY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC5ocHA+CisjICBlbmRpZgorI2VuZGlmCisKKyNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+CisKKyNpZmRlZiBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUworCisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDxjY3R5cGU+CisKK3ZvaWQgY3VzdG9tX3Rlc3RzKCkKK3sKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPHRlc3Q6OmN1c3RvbT4gY3VzdG9tX2hhc2hlcjsKKyAgICBCT09TVF9URVNUKGN1c3RvbV9oYXNoZXIoMTApID09IDEwMHUpOworICAgIHRlc3Q6OmN1c3RvbSB4KDU1KTsKKyAgICBCT09TVF9URVNUKGN1c3RvbV9oYXNoZXIoeCkgPT0gNTUwdSk7CisKKyAgICB7CisgICAgICAgIHVzaW5nIG5hbWVzcGFjZSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOworICAgICAgICBCT09TVF9URVNUKGN1c3RvbV9oYXNoZXIoeCkgPT0gaGFzaF92YWx1ZSh4KSk7CisgICAgfQorCisgICAgc3RkOjp2ZWN0b3I8dGVzdDo6Y3VzdG9tPiBjdXN0b21fdmVjdG9yOworICAgIGN1c3RvbV92ZWN0b3IucHVzaF9iYWNrKDUpOworICAgIGN1c3RvbV92ZWN0b3IucHVzaF9iYWNrKDI1KTsKKyAgICBjdXN0b21fdmVjdG9yLnB1c2hfYmFjaygzNSk7CisKKyAgICBzdGQ6OnNpemVfdCBzZWVkID0gMDsKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX2NvbWJpbmUoc2VlZCwgdGVzdDo6Y3VzdG9tKDUpKTsKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX2NvbWJpbmUoc2VlZCwgdGVzdDo6Y3VzdG9tKDI1KSk7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9jb21iaW5lKHNlZWQsIHRlc3Q6OmN1c3RvbSgzNSkpOworCisgICAgc3RkOjpzaXplX3Qgc2VlZDIgPSAwOworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfY29tYmluZShzZWVkMiwgNTB1KTsKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX2NvbWJpbmUoc2VlZDIsIDI1MHUpOworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfY29tYmluZShzZWVkMiwgMzUwdSk7CisKKyAgICBCT09TVF9URVNUKHNlZWQgPT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZSgKKyAgICAgICAgY3VzdG9tX3ZlY3Rvci5iZWdpbigpLCBjdXN0b21fdmVjdG9yLmVuZCgpKSk7CisgICAgQk9PU1RfVEVTVChzZWVkID09IHNlZWQyKTsKK30KKworI2VuZGlmIC8vIEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TCisKK2ludCBtYWluKCkKK3sKKyNpZmRlZiBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUworICAgIGN1c3RvbV90ZXN0cygpOworI2VuZGlmCisgICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Cit9CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZGVxdWVfdGVzdC5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZGVxdWVfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRhOWQ0MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9kZXF1ZV90ZXN0LmNwcApAQCAtMCwwICsxLDM1IEBACisKKy8vIENvcHlyaWdodCAyMDA1LTIwMDkgRGFuaWVsIEphbWVzLgorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKyNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCisKKyNpZmRlZiBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUworIyAgaWZkZWYgQk9PU1RfSEFTSF9URVNUX1NURF9JTkNMVURFUworIyAgICBpbmNsdWRlIDxmdW5jdGlvbmFsPgorIyAgZWxzZQorIyAgICBpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgorIyAgZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgorCisjaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKKworI2luY2x1ZGUgPGRlcXVlPgorCit1c2luZyBzdGQ6OmRlcXVlOworI2RlZmluZSBDT05UQUlORVJfVFlQRSBkZXF1ZQorI2luY2x1ZGUgIi4vaGFzaF9zZXF1ZW5jZV90ZXN0LmhwcCIKKworI2VuZGlmIC8vIEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TCisKK2ludCBtYWluKCkKK3sKKyNpZmRlZiBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUworICAgIGRlcXVlX3Rlc3RzOjpkZXF1ZV9oYXNoX2ludGVnZXJfdGVzdHMoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Cit9CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZW51bV90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9lbnVtX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MTM4N2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZW51bV90ZXN0LmNwcApAQCAtMCwwICsxLDYzIEBACisKKy8vIENvcHlyaWdodCAyMDEyIERhbmllbCBKYW1lcy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisjaW5jbHVkZSAiLi9jb25maWcuaHBwIgorCisjaWZkZWYgQk9PU1RfSEFTSF9URVNUX1NURF9JTkNMVURFUworIyAgaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNlbHNlCisjICBpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgorI2VuZGlmCisKKyNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+CisjaW5jbHVkZSAiLi9jb21waWxlX3RpbWUuaHBwIgorCituYW1lc3BhY2UgdGVzdCB7CisgICAgZW51bSBlbnVtX292ZXJyaWRlIHsgZW51bV9vdmVycmlkZTEsIGVudW1fb3ZlcnJpZGUyIH07CisgICAgc3RkOjpzaXplX3QgaGFzaF92YWx1ZShlbnVtX292ZXJyaWRlKSB7IHJldHVybiA4OTY1MzI7IH0KKworICAgIGVudW0gZW51bTEgeyBlbnVtMWEgfTsKKyAgICBlbnVtIGVudW0yIHsgZW51bTJhLCBlbnVtMmIgfTsKKyAgICBlbnVtIGVudW0zIHsgZW51bTNhID0gNTc0LCBlbnVtM2IgfTsKKyAgICBlbnVtIGVudW00IHsgZW51bTRhID0gLTEyNTc0LCBlbnVtNGIgfTsKK30KKworaW50IG1haW4oKSB7CisgICAgY29tcGlsZV90aW1lX3Rlc3RzKCh0ZXN0OjplbnVtMSopIDApOworICAgIGNvbXBpbGVfdGltZV90ZXN0cygodGVzdDo6ZW51bTIqKSAwKTsKKyAgICBjb21waWxlX3RpbWVfdGVzdHMoKHRlc3Q6OmVudW0zKikgMCk7CisgICAgY29tcGlsZV90aW1lX3Rlc3RzKCh0ZXN0OjplbnVtNCopIDApOworICAgIGNvbXBpbGVfdGltZV90ZXN0cygodGVzdDo6ZW51bV9vdmVycmlkZSopIDApOworCisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDx0ZXN0OjplbnVtMT4gaGFzaDE7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDx0ZXN0OjplbnVtMj4gaGFzaDI7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDx0ZXN0OjplbnVtMz4gaGFzaDM7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDx0ZXN0OjplbnVtND4gaGFzaDQ7CisKKyAgICBCT09TVF9URVNUKGhhc2gxKHRlc3Q6OmVudW0xYSkgPT0gaGFzaDEodGVzdDo6ZW51bTFhKSk7CisKKyAgICBCT09TVF9URVNUKGhhc2gyKHRlc3Q6OmVudW0yYSkgPT0gaGFzaDIodGVzdDo6ZW51bTJhKSk7CisgICAgQk9PU1RfVEVTVChoYXNoMih0ZXN0OjplbnVtMmEpICE9IGhhc2gyKHRlc3Q6OmVudW0yYikpOworICAgIEJPT1NUX1RFU1QoaGFzaDIodGVzdDo6ZW51bTJiKSA9PSBoYXNoMih0ZXN0OjplbnVtMmIpKTsKKworICAgIEJPT1NUX1RFU1QoaGFzaDModGVzdDo6ZW51bTNhKSA9PSBoYXNoMyh0ZXN0OjplbnVtM2EpKTsKKyAgICBCT09TVF9URVNUKGhhc2gzKHRlc3Q6OmVudW0zYSkgIT0gaGFzaDModGVzdDo6ZW51bTNiKSk7CisgICAgQk9PU1RfVEVTVChoYXNoMyh0ZXN0OjplbnVtM2IpID09IGhhc2gzKHRlc3Q6OmVudW0zYikpOworCisgICAgQk9PU1RfVEVTVChoYXNoNCh0ZXN0OjplbnVtNGEpID09IGhhc2g0KHRlc3Q6OmVudW00YSkpOworICAgIEJPT1NUX1RFU1QoaGFzaDQodGVzdDo6ZW51bTRhKSAhPSBoYXNoNCh0ZXN0OjplbnVtNGIpKTsKKyAgICBCT09TVF9URVNUKGhhc2g0KHRlc3Q6OmVudW00YikgPT0gaGFzaDQodGVzdDo6ZW51bTRiKSk7CisKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPHRlc3Q6OmVudW1fb3ZlcnJpZGU+IGhhc2hfb3ZlcnJpZGU7CisKKyAgICBCT09TVF9URVNUKGhhc2hfb3ZlcnJpZGUodGVzdDo6ZW51bV9vdmVycmlkZTEpID09CisgICAgICAgIGhhc2hfb3ZlcnJpZGUodGVzdDo6ZW51bV9vdmVycmlkZTEpKTsKKyAgICBCT09TVF9URVNUKGhhc2hfb3ZlcnJpZGUodGVzdDo6ZW51bV9vdmVycmlkZTEpID09CisgICAgICAgIGhhc2hfb3ZlcnJpZGUodGVzdDo6ZW51bV9vdmVycmlkZTIpKTsKKyAgICBCT09TVF9URVNUKGhhc2hfb3ZlcnJpZGUodGVzdDo6ZW51bV9vdmVycmlkZTEpID09CisgICAgICAgIGhhc2hfb3ZlcnJpZGUodGVzdDo6ZW51bV9vdmVycmlkZTEpKTsKKworICAgIHJldHVybiBuZG5ib29zdDo6cmVwb3J0X2Vycm9ycygpOworfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2Zsb2F0X3Rlc3QuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2Zsb2F0X3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5Y2Q1MDgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZmxvYXRfdGVzdC5jcHAKQEAgLTAsMCArMSwxOCBAQAorCisvLyBDb3B5cmlnaHQgMjAwNS0yMDA5IERhbmllbCBKYW1lcy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisjaW5jbHVkZSAiaGFzaF9mbG9hdF90ZXN0LmhwcCIKKworaW50IG1haW4oKQoreworICAgIHN0ZDo6Y2Vycjw8IkNvbXBpbGVyOiAiPDxCT09TVF9DT01QSUxFUjw8IlxuIjsKKyAgICBzdGQ6OmNlcnI8PCJQbGF0Zm9ybTogIjw8Qk9PU1RfUExBVEZPUk08PCJcbiI7CisgICAgc3RkOjpjZXJyPDwiTGlicmFyeTogIjw8Qk9PU1RfU1RETElCPDwiXG5cbiI7CisKKyAgICBmbG9hdF90ZXN0cygiZmxvYXQiLCAoZmxvYXQqKSAwKTsKKyAgICBmbG9hdF90ZXN0cygiZG91YmxlIiwgKGRvdWJsZSopIDApOworCisgICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Cit9CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZmxvYXRfdGVzdC5ocHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZmxvYXRfdGVzdC5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY2OTNhOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9mbG9hdF90ZXN0LmhwcApAQCAtMCwwICsxLDMwOSBAQAorCisvLyBDb3B5cmlnaHQgMjAwNS0yMDA5IERhbmllbCBKYW1lcy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisjaW5jbHVkZSAiLi9jb25maWcuaHBwIgorCisjaWZkZWYgQk9PU1RfSEFTSF9URVNUX1NURF9JTkNMVURFUworIyAgaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNlbHNlCisjICBpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgorI2VuZGlmCisKKyNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+CisKKyNpbmNsdWRlIDxjbWF0aD4KKyNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2gvZGV0YWlsL2xpbWl0cy5ocHA+CisjaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoL2RldGFpbC9mbG9hdF9mdW5jdGlvbnMuaHBwPgorI2luY2x1ZGUgPGJvb3N0L2RldGFpbC93b3JrYXJvdW5kLmhwcD4KKworI2luY2x1ZGUgPGlvc3RyZWFtPgorCisjaWYgZGVmaW5lZChCT09TVF9NU1ZDKQorI3ByYWdtYSB3YXJuaW5nKHB1c2gpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0MTI3KSAgIC8vIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gaXMgY29uc3RhbnQKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ3MjMpICAgLy8gY29uZGl0aW9uYWwgZXhwcmVzc2lvbiBpcyBjb25zdGFudAorI2lmIEJPT1NUX01TVkMgPCAxNDAwCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0MjY3KSAgIC8vIGNvbnZlcnNpb24gZnJvbSAnc2l6ZV90JyB0byAndW5zaWduZWQgaW50JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcG9zc2libGUgbG9zcyBvZiBkYXRhCisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoQk9PU1RfSU5URUxfQ1hYX1ZFUlNJT04pCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZmxvYXQtZXF1YWwiCisjZW5kaWYKKworY2hhciBjb25zdCogZmxvYXRfdHlwZShmbG9hdCopIHsgcmV0dXJuICJmbG9hdCI7IH0KK2NoYXIgY29uc3QqIGZsb2F0X3R5cGUoZG91YmxlKikgeyByZXR1cm4gImRvdWJsZSI7IH0KK2NoYXIgY29uc3QqIGZsb2F0X3R5cGUobG9uZyBkb3VibGUqKSB7IHJldHVybiAibG9uZyBkb3VibGUiOyB9CisKK3RlbXBsYXRlIDxjbGFzcyBUPgordm9pZCBmbG9hdF90ZXN0cyhjaGFyIGNvbnN0KiBuYW1lLCBUKiA9IDApCit7CisgICAgc3RkOjpjZXJyCisgICAgICAgIDw8ICAiXG4iCisgICAgICAgIDw8ICAiVGVzdGluZyAiIEJPT1NUX1NUUklOR0laRShCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFKSAiOjpoYXNoPCIKKyAgICAgICAgPDwgIG5hbWUKKyAgICAgICAgPDwgICI+XG4iCisgICAgICAgIDw8ICAiXG4iCisgICAgICAgIDw8ICAibmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpsaW1pdHM8VD46OmRpZ2l0cyA9ICIKKyAgICAgICAgPDwgIG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjpkaWdpdHM8PCAiXG4iCisgICAgICAgIDw8ICAibmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpsaW1pdHM8aW50Pjo6ZGlnaXRzID0gIgorICAgICAgICA8PCAgbmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpsaW1pdHM8aW50Pjo6ZGlnaXRzPDwgIlxuIgorICAgICAgICA8PCAgIm5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPHN0ZDo6c2l6ZV90Pjo6ZGlnaXRzID0gIgorICAgICAgICA8PCAgbmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpsaW1pdHM8c3RkOjpzaXplX3Q+OjpkaWdpdHMKKyAgICAgICAgPDwgICJcbiIKKyAgICAgICAgPDwgICJcbiIKKyAgICAgICAgPDwgICJuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmNhbGxfbGRleHA8VD46OmZsb2F0X3R5cGUgPSAiCisgICAgICAgIDw8ICBmbG9hdF90eXBlKHN0YXRpY19jYXN0PEJPT1NUX0RFRFVDRURfVFlQRU5BTUUKKyAgICAgICAgICAgICAgICBuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmNhbGxfbGRleHA8VD46OmZsb2F0X3R5cGUqPigwKSkKKyAgICAgICAgPDwgICJcbiIKKyAgICAgICAgPDwgICJuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmNhbGxfZnJleHA8VD46OmZsb2F0X3R5cGUgPSAiCisgICAgICAgIDw8ICBmbG9hdF90eXBlKHN0YXRpY19jYXN0PEJPT1NUX0RFRFVDRURfVFlQRU5BTUUKKyAgICAgICAgICAgICAgICBuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmNhbGxfZnJleHA8VD46OmZsb2F0X3R5cGUqPigwKSkKKyAgICAgICAgPDwgICJcbiIKKyAgICAgICAgPDwgICJuZG5ib29zdDo6aGFzaF9kZXRhaWw6OnNlbGVjdF9oYXNoX3R5cGU8VD46OnR5cGUgPSAiCisgICAgICAgIDw8ICBmbG9hdF90eXBlKHN0YXRpY19jYXN0PEJPT1NUX0RFRFVDRURfVFlQRU5BTUUKKyAgICAgICAgICAgICAgICBuZG5ib29zdDo6aGFzaF9kZXRhaWw6OnNlbGVjdF9oYXNoX3R5cGU8VD46OnR5cGUqPigwKSkKKyAgICAgICAgPDwgICJcbiIKKyAgICAgICAgPDwgICJcbiIKKyAgICAgICAgOworCisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxUPiB4MTsKKworICAgIFQgemVybyA9IDA7CisgICAgVCBtaW51c196ZXJvID0gKFQpIC0xICogemVybzsKKworICAgIEJPT1NUX1RFU1QoemVybyA9PSBtaW51c196ZXJvKTsKKyAgICBCT09TVF9URVNUKHgxKHplcm8pID09IHgxKG1pbnVzX3plcm8pKTsKKworI2lmIGRlZmluZWQoQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMpCisgICAgQk9PU1RfVEVTVCh4MSh6ZXJvKSA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKHplcm8pKTsKKyAgICBCT09TVF9URVNUKHgxKG1pbnVzX3plcm8pID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUobWludXNfemVybykpOworI2VuZGlmCisKKyAgICBCT09TVF9URVNUKHgxKHplcm8pICE9IHgxKDAuNSkpOworICAgIEJPT1NUX1RFU1QoeDEobWludXNfemVybykgIT0geDEoMC41KSk7CisgICAgQk9PU1RfVEVTVCh4MSgwLjUpICE9IHgxKC0wLjUpKTsKKyAgICBCT09TVF9URVNUKHgxKDEpICE9IHgxKC0xKSk7CisKKyAgICB1c2luZyBuYW1lc3BhY2Ugc3RkOworCisvLyBEb2luZyBhbnl0aGluZyB3aXRoIGluZmluaXR5IGNhdXNlcyBib3JsYW5kIHRvIGNyYXNoLgorI2lmIGRlZmluZWQoX19CT1JMQU5EQ19fKQorICAgIHN0ZDo6Y2VycgorICAgICAgICA8PCAgIk5vdCBydW5uaW5nIGluZmluaXR5IGNoZWNrcyBvbiBCb3JsYW5kLCBhcyBpdCBjYXVzZXMgaXQgdG8gY3Jhc2guIgorICAgICAgICAgICAgIlxuIjsKKyNlbHNlCisgICAgaWYobmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpsaW1pdHM8VD46Omhhc19pbmZpbml0eSkgeworICAgICAgICBUIGluZmluaXR5ID0gLWxvZyh6ZXJvKTsKKyAgICAgICAgVCBpbmZpbml0eTIgPSAoVCkgMS4gLyB6ZXJvOworICAgICAgICBUIGluZmluaXR5MyA9IChUKSAtMS4gLyBtaW51c196ZXJvOworICAgICAgICBUIGluZmluaXR5NCA9IG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjppbmZpbml0eSgpOworCisgICAgICAgIFQgbWludXNfaW5maW5pdHkgPSBsb2coemVybyk7CisgICAgICAgIFQgbWludXNfaW5maW5pdHkyID0gKFQpIC0xLiAvIHplcm87CisgICAgICAgIFQgbWludXNfaW5maW5pdHkzID0gKFQpIDEuIC8gbWludXNfemVybzsKKworI2lmIGRlZmluZWQoQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMpCisgICAgICAgIEJPT1NUX1RFU1QoeDEoaW5maW5pdHkpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUoaW5maW5pdHkpKTsKKyAgICAgICAgQk9PU1RfVEVTVCh4MShtaW51c19pbmZpbml0eSkKKyAgICAgICAgICAgICAgICA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKG1pbnVzX2luZmluaXR5KSk7CisjZW5kaWYKKworICAgICAgICBpZihpbmZpbml0eSA9PSBpbmZpbml0eTIpCisgICAgICAgICAgICBCT09TVF9URVNUKHgxKGluZmluaXR5KSA9PSB4MShpbmZpbml0eTIpKTsKKyAgICAgICAgaWYoaW5maW5pdHkgPT0gaW5maW5pdHkzKQorICAgICAgICAgICAgQk9PU1RfVEVTVCh4MShpbmZpbml0eSkgPT0geDEoaW5maW5pdHkzKSk7CisgICAgICAgIGlmKGluZmluaXR5ID09IGluZmluaXR5NCkKKyAgICAgICAgICAgIEJPT1NUX1RFU1QoeDEoaW5maW5pdHkpID09IHgxKGluZmluaXR5NCkpOworCisgICAgICAgIGlmKG1pbnVzX2luZmluaXR5ID09IG1pbnVzX2luZmluaXR5MikKKyAgICAgICAgICAgIEJPT1NUX1RFU1QoeDEobWludXNfaW5maW5pdHkpID09IHgxKG1pbnVzX2luZmluaXR5MikpOworICAgICAgICBpZihtaW51c19pbmZpbml0eSA9PSBtaW51c19pbmZpbml0eTMpCisgICAgICAgICAgICBCT09TVF9URVNUKHgxKG1pbnVzX2luZmluaXR5KSA9PSB4MShtaW51c19pbmZpbml0eTMpKTsKKworICAgICAgICBCT09TVF9URVNUKGluZmluaXR5ICE9IG1pbnVzX2luZmluaXR5KTsKKworICAgICAgICBpZih4MShpbmZpbml0eSkgPT0geDEobWludXNfaW5maW5pdHkpKSB7CisgICAgICAgICAgICBzdGQ6OmNlcnI8PCJ4MShpbmZpbml0eSkgPT0geDEoLWluZmluaXR5KSA9PSAiPDx4MShpbmZpbml0eSk8PCJcbiI7CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGlzIHNob3VsZCByZWFsbHkgYmUgJ2hhc19kZW5vcm0gPT0gZGVub3JtX3ByZXNlbnQnIGJ1dCBzb21lCisgICAgICAgIC8vIGNvbXBpbGVycyBkb24ndCBoYXZlICdkZW5vcm1fcHJlc2VudCcuIFNlZSBhbHNvIGEgbGF0ZXIgdXNlLgorICAgICAgICBpZihuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6aGFzX2Rlbm9ybSkgeworICAgICAgICAgICAgaWYoeDEobmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpsaW1pdHM8VD46OmRlbm9ybV9taW4oKSkgPT0geDEoaW5maW5pdHkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0ZDo6Y2VycgorICAgICAgICAgICAgICAgICAgICA8PCAgIngxKGRlbm9ybV9taW4pID09IHgxKGluZmluaXR5KSA9PSAiCisgICAgICAgICAgICAgICAgICAgIDw8ICB4MShpbmZpbml0eSkKKyAgICAgICAgICAgICAgICAgICAgPDwgICJcbiI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmKHgxKG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjpkZW5vcm1fbWluKCkpID09CisgICAgICAgICAgICAgICAgeDEobWludXNfaW5maW5pdHkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0ZDo6Y2VycgorICAgICAgICAgICAgICAgICAgICA8PCAgIngxKGRlbm9ybV9taW4pID09IHgxKC1pbmZpbml0eSkgPT0gIgorICAgICAgICAgICAgICAgICAgICA8PCAgeDEobWludXNfaW5maW5pdHkpCisgICAgICAgICAgICAgICAgICAgIDw8ICAiXG4iOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYobmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpsaW1pdHM8VD46Omhhc19xdWlldF9OYU4pIHsKKyAgICAgICAgICAgIGlmKHgxKG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjpxdWlldF9OYU4oKSkgPT0geDEoaW5maW5pdHkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0ZDo6Y2VycgorICAgICAgICAgICAgICAgICAgICA8PCAgIngxKHF1aWV0X05hTikgPT0geDEoaW5maW5pdHkpID09ICIKKyAgICAgICAgICAgICAgICAgICAgPDwgIHgxKGluZmluaXR5KQorICAgICAgICAgICAgICAgICAgICA8PCAgIlxuIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYoeDEobmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpsaW1pdHM8VD46OnF1aWV0X05hTigpKSA9PQorICAgICAgICAgICAgICAgIHgxKG1pbnVzX2luZmluaXR5KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdGQ6OmNlcnIKKyAgICAgICAgICAgICAgICAgICAgPDwgICJ4MShxdWlldF9OYU4pID09IHgxKC1pbmZpbml0eSkgPT0gIgorICAgICAgICAgICAgICAgICAgICA8PCAgeDEobWludXNfaW5maW5pdHkpCisgICAgICAgICAgICAgICAgICAgIDw8ICAiXG4iOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICBUIG1heCA9IChuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6bWF4KSgpOworICAgIFQgaGFsZl9tYXggPSBtYXggLyAyOworICAgIFQgcXVhcnRlcl9tYXggPSBtYXggLyA0OworICAgIFQgdGhyZWVfcXVhcnRlcl9tYXggPSBtYXggLSBxdWFydGVyX21heDsKKyAgICAKKyAgICAvLyBDaGVjayB0aGUgbGltaXRzOjptYXggaXMgaW4gcmFuZ2UuCisgICAgQk9PU1RfVEVTVChtYXggIT0gaGFsZl9tYXgpOworICAgIEJPT1NUX1RFU1QobWF4ICE9IHF1YXJ0ZXJfbWF4KTsKKyAgICBCT09TVF9URVNUKG1heCAhPSB0aHJlZV9xdWFydGVyX21heCk7CisgICAgQk9PU1RfVEVTVChoYWxmX21heCAhPSBxdWFydGVyX21heCk7CisgICAgQk9PU1RfVEVTVChoYWxmX21heCAhPSB0aHJlZV9xdWFydGVyX21heCk7CisgICAgQk9PU1RfVEVTVChxdWFydGVyX21heCAhPSB0aHJlZV9xdWFydGVyX21heCk7CisKKyAgICBCT09TVF9URVNUKG1heCAhPSAtbWF4KTsKKyAgICBCT09TVF9URVNUKGhhbGZfbWF4ICE9IC1oYWxmX21heCk7CisgICAgQk9PU1RfVEVTVChxdWFydGVyX21heCAhPSAtcXVhcnRlcl9tYXgpOworICAgIEJPT1NUX1RFU1QodGhyZWVfcXVhcnRlcl9tYXggIT0gLXRocmVlX3F1YXJ0ZXJfbWF4KTsKKworCisjaWYgZGVmaW5lZChCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUykKKyAgICBCT09TVF9URVNUKHgxKG1heCkgPT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZShtYXgpKTsKKyAgICBCT09TVF9URVNUKHgxKGhhbGZfbWF4KSA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKGhhbGZfbWF4KSk7CisgICAgQk9PU1RfVEVTVCh4MShxdWFydGVyX21heCkgPT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZShxdWFydGVyX21heCkpOworICAgIEJPT1NUX1RFU1QoeDEodGhyZWVfcXVhcnRlcl9tYXgpID09CisgICAgICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUodGhyZWVfcXVhcnRlcl9tYXgpKTsKKyNlbmRpZgorCisgICAgLy8gVGhlICchPScgdGVzdHMgY291bGQgbGVnaXRpbWF0ZWx5IGZhaWwsIGJ1dCB3aXRoIG15IGhhc2ggaXQgaW5kaWNhdGVzIGEKKyAgICAvLyBidWcuCisgICAgQk9PU1RfVEVTVCh4MShtYXgpID09IHgxKG1heCkpOworICAgIEJPT1NUX1RFU1QoeDEobWF4KSAhPSB4MShxdWFydGVyX21heCkpOworICAgIEJPT1NUX1RFU1QoeDEobWF4KSAhPSB4MShoYWxmX21heCkpOworICAgIEJPT1NUX1RFU1QoeDEobWF4KSAhPSB4MSh0aHJlZV9xdWFydGVyX21heCkpOworICAgIEJPT1NUX1RFU1QoeDEocXVhcnRlcl9tYXgpID09IHgxKHF1YXJ0ZXJfbWF4KSk7CisgICAgQk9PU1RfVEVTVCh4MShxdWFydGVyX21heCkgIT0geDEoaGFsZl9tYXgpKTsKKyAgICBCT09TVF9URVNUKHgxKHF1YXJ0ZXJfbWF4KSAhPSB4MSh0aHJlZV9xdWFydGVyX21heCkpOworICAgIEJPT1NUX1RFU1QoeDEoaGFsZl9tYXgpID09IHgxKGhhbGZfbWF4KSk7CisgICAgQk9PU1RfVEVTVCh4MShoYWxmX21heCkgIT0geDEodGhyZWVfcXVhcnRlcl9tYXgpKTsKKyAgICBCT09TVF9URVNUKHgxKHRocmVlX3F1YXJ0ZXJfbWF4KSA9PSB4MSh0aHJlZV9xdWFydGVyX21heCkpOworCisgICAgQk9PU1RfVEVTVCh4MShtYXgpICE9IHgxKC1tYXgpKTsKKyAgICBCT09TVF9URVNUKHgxKGhhbGZfbWF4KSAhPSB4MSgtaGFsZl9tYXgpKTsKKyAgICBCT09TVF9URVNUKHgxKHF1YXJ0ZXJfbWF4KSAhPSB4MSgtcXVhcnRlcl9tYXgpKTsKKyAgICBCT09TVF9URVNUKHgxKHRocmVlX3F1YXJ0ZXJfbWF4KSAhPSB4MSgtdGhyZWVfcXVhcnRlcl9tYXgpKTsKKworCisvLyBJbnRlbCB3aXRoIGdjYyBzdGRsaWIgc29tZXRpbWVzIHNlZ2ZhdWx0cyBvbiBjYWxscyB0byBhc2luIGFuZCBhY29zLgorI2lmICEoKGRlZmluZWQoX19JTlRFTF9DT01QSUxFUikgfHwgZGVmaW5lZChfX0lDTCkgfHwgXAorICAgICAgICBkZWZpbmVkKF9fSUNDKSB8fCBkZWZpbmVkKF9fRUNDKSkgJiYgXAorICAgIChkZWZpbmVkKF9fR0xJQkNQUF9fKSB8fCBkZWZpbmVkKF9fR0xJQkNYWF9fKSkpCisgICAgVCB2MSA9IGFzaW4oKFQpIDEpOworICAgIFQgdjIgPSBhY29zKChUKSAwKTsKKyAgICBpZih2MSA9PSB2MikKKyAgICAgICAgQk9PU1RfVEVTVCh4MSh2MSkgPT0geDEodjIpKTsKKworI2lmIGRlZmluZWQoQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMpCisgICAgQk9PU1RfVEVTVCh4MSh2MSkgPT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZSh2MSkpOworICAgIEJPT1NUX1RFU1QoeDEodjIpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUodjIpKTsKKyNlbmRpZgorICAgIAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TKQorICAgIEJPT1NUX1RFU1QoeDEobmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpsaW1pdHM8VD46OmVwc2lsb24oKSkgPT0KKyAgICAgICAgICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUoCisgICAgICAgICAgICAgICAgbmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpsaW1pdHM8VD46OmVwc2lsb24oKSkpOworI2VuZGlmCisKKyAgICBCT09TVF9URVNUKG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjplcHNpbG9uKCkgIT0gKFQpIDApOworICAgIGlmKHgxKG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjplcHNpbG9uKCkpID09IHgxKChUKSAwKSkKKyAgICAgICAgc3RkOjpjZXJyPDwieDEoZXBzaWxvbikgPT0geDEoMCkgPT0gIjw8eDEoKFQpIDApPDwiXG4iOworCisgICAgQk9PU1RfVEVTVCgtbmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpsaW1pdHM8VD46OmVwc2lsb24oKSAhPSAoVCkgMCk7CisgICAgaWYoeDEoLW5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjplcHNpbG9uKCkpID09IHgxKChUKSAwKSkKKyAgICAgICAgc3RkOjpjZXJyPDwieDEoLWVwc2lsb24pID09IHgxKDApID09ICI8PHgxKChUKSAwKTw8IlxuIjsKKworICAgIEJPT1NUX1RFU1QoKFQpIDEgKyBuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6ZXBzaWxvbigpICE9IChUKSAxKTsKKyAgICBpZih4MSgoVCkgMSArIG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjplcHNpbG9uKCkpID09IHgxKChUKSAxKSkKKyAgICAgICAgc3RkOjpjZXJyPDwieDEoMSArIGVwc2lsb24pID09IHgxKDEpID09ICI8PHgxKChUKSAxKTw8IlxuIjsKKworICAgIEJPT1NUX1RFU1QoKFQpIDEgLSBuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6ZXBzaWxvbigpICE9IChUKSAxKTsKKyAgICBpZih4MSgoVCkgMSAtIG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjplcHNpbG9uKCkpID09IHgxKChUKSAxKSkKKyAgICAgICAgc3RkOjpjZXJyPDwieDEoMSAtIGVwc2lsb24pID09IHgxKDEpID09ICI8PHgxKChUKSAxKTw8IlxuIjsKKworICAgIEJPT1NUX1RFU1QoKFQpIC0xICsgbmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpsaW1pdHM8VD46OmVwc2lsb24oKSAhPSAoVCkgLTEpOworICAgIGlmKHgxKChUKSAtMSArIG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjplcHNpbG9uKCkpID09IHgxKChUKSAtMSkpCisgICAgICAgIHN0ZDo6Y2Vycjw8IngxKC0xICsgZXBzaWxvbikgPT0geDEoLTEpID09ICI8PHgxKChUKSAtMSk8PCJcbiI7CisKKyAgICBCT09TVF9URVNUKChUKSAtMSAtIG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjplcHNpbG9uKCkgIT0gKFQpIC0xKTsKKyAgICBpZih4MSgoVCkgLTEgLSBuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6ZXBzaWxvbigpKSA9PSB4MSgoVCkgLTEpKQorICAgICAgICBzdGQ6OmNlcnI8PCJ4MSgtMSAtIGVwc2lsb24pID09IHgxKC0xKSA9PSAiPDx4MSgoVCkgLTEpPDwiXG4iOworCisgICAgLy8gQXMgYmVmb3JlLgorICAgIGlmKG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjpoYXNfZGVub3JtKSB7CisgICAgICAgIGlmKHgxKG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjpkZW5vcm1fbWluKCkpID09IHgxKHplcm8pKSB7CisgICAgICAgICAgICBzdGQ6OmNlcnI8PCJ4MShkZW5vcm1fbWluKSA9PSB4MSh6ZXJvKSA9PSAiPDx4MSh6ZXJvKTw8IlxuIjsKKyAgICAgICAgfQorI2lmICFCT09TVF9XT1JLQVJPVU5EKF9fREVDQ1hYX1ZFUiw8NzAxOTAwMDYpICYmIGRlZmluZWQoQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMpCisgICAgICAgIC8vIFRoZSBUcnU2NC9DWFggc3RhbmRhcmQgbGlicmFyeSBwcmlvciB0byA3LjEgY29udGFpbnMgYSBidWcgaW4gdGhlCisgICAgICAgIC8vIHNwZWNpYWxpemF0aW9uIG9mIG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzOjpkZW5vcm1fbWluKCkgZm9yIGxvbmcKKyAgICAgICAgLy8gZG91YmxlcyB3aGljaCBjYXVzZXMgdGhpcyB0ZXN0IHRvIGZhaWwuCisgICAgICAgIGlmKHgxKG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjpkZW5vcm1fbWluKCkpICE9CisgICAgICAgICAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKAorICAgICAgICAgICAgICAgIG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjpkZW5vcm1fbWluKCkpKQorICAgICAgICB7CisgICAgICAgICAgICBzdGQ6OmNlcnIKKyAgICAgICAgICAgICAgICA8PCAgIngxKG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjpkZW5vcm1fbWluKCkpID0gIgorICAgICAgICAgICAgICAgIDw8ICB4MShuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6ZGVub3JtX21pbigpKQorICAgICAgICAgICAgICAgIDw8ICAiXG5oYXNoX3ZhbHVlKG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjpkZW5vcm1fbWluKCkpIgorICAgICAgICAgICAgICAgICAgICAiID0gIgorICAgICAgICAgICAgICAgIDw8ICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKAorICAgICAgICAgICAgICAgICAgICAgICAgbmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpsaW1pdHM8VD46OmRlbm9ybV9taW4oKSkKKyAgICAgICAgICAgICAgICA8PCAgIlxueDEoMCkgPSAiCisgICAgICAgICAgICAgICAgPDwgIHgxKDApCisgICAgICAgICAgICAgICAgPDwgICJcbiI7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKworLy8gTmFOIGFsc28gY2F1c2VzIGJvcmxhbmQgdG8gY3Jhc2guCisjaWYgIWRlZmluZWQoX19CT1JMQU5EQ19fKSAmJiBkZWZpbmVkKEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TKQorICAgIGlmKG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjpoYXNfcXVpZXRfTmFOKSB7CisgICAgICAgIGlmKHgxKG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjpxdWlldF9OYU4oKSkgPT0geDEoMS4wKSkgeworICAgICAgICAgICAgc3RkOjpjZXJyPDwieDEocXVpZXRfTmFOKSA9PSB4MSgxLjApID09ICI8PHgxKDEuMCk8PCJcbiI7CisgICAgICAgIH0KKyAgICAgICAgQk9PU1RfVEVTVCh4MShuZG5ib29zdDo6aGFzaF9kZXRhaWw6OmxpbWl0czxUPjo6cXVpZXRfTmFOKCkpID09CisgICAgICAgICAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKAorICAgICAgICAgICAgICAgIG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+OjpxdWlldF9OYU4oKSkpOworICAgIH0KKyNlbmRpZgorfQorCisjaWYgZGVmaW5lZChCT09TVF9NU1ZDKQorI3ByYWdtYSB3YXJuaW5nKHBvcCkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2ZyaWVuZF90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9mcmllbmRfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZiOTEzMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9mcmllbmRfdGVzdC5jcHAKQEAgLTAsMCArMSwxMDMgQEAKKworLy8gQ29weXJpZ2h0IDIwMDYtMjAwOSBEYW5pZWwgSmFtZXMuCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisvLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworI2luY2x1ZGUgIi4vY29uZmlnLmhwcCIKKworI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+CisjaW5jbHVkZSA8Y3N0ZGRlZj4KKworbmFtZXNwYWNlIHRlc3QKK3sKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KKyAgICBzdHJ1Y3QgY3VzdG9tCisgICAgeworICAgICAgICBpbnQgdmFsdWVfOworCisgICAgICAgIHN0ZDo6c2l6ZV90IGhhc2goKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdmFsdWVfICogMTA7CisgICAgICAgIH0KKworI2lmICFkZWZpbmVkKEJPT1NUX05PX0FSR1VNRU5UX0RFUEVOREVOVF9MT09LVVApCisgICAgICAgIGZyaWVuZCBzdGQ6OnNpemVfdCBoYXNoX3ZhbHVlKGN1c3RvbSBjb25zdCYgeCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHguaGFzaCgpOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBjdXN0b20oaW50IHgpIDogdmFsdWVfKHgpIHt9CisgICAgfTsKK30KKworI2lmIGRlZmluZWQoQk9PU1RfTk9fQVJHVU1FTlRfREVQRU5ERU5UX0xPT0tVUCkKK25hbWVzcGFjZSBuZG5ib29zdAoreworICAgIHRlbXBsYXRlIDxjbGFzcyBUPgorICAgIHN0ZDo6c2l6ZV90IGhhc2hfdmFsdWUodGVzdDo6Y3VzdG9tPFQ+IHgpCisgICAgeworICAgICAgICByZXR1cm4geC5oYXNoKCk7CisgICAgfQorfQorI2VuZGlmCisKKyNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCisKKyNpZmRlZiBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUworIyAgaWZkZWYgQk9PU1RfSEFTSF9URVNUX1NURF9JTkNMVURFUworIyAgICBpbmNsdWRlIDxmdW5jdGlvbmFsPgorIyAgZWxzZQorIyAgICBpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgorIyAgZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgorCisjaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKKworI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8Y2N0eXBlPgorCit2b2lkIGN1c3RvbV90ZXN0cygpCit7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDx0ZXN0OjpjdXN0b208aW50PiA+IGN1c3RvbV9oYXNoZXI7CisgICAgQk9PU1RfVEVTVChjdXN0b21faGFzaGVyKDEwKSA9PSAxMDB1KTsKKyAgICB0ZXN0OjpjdXN0b208aW50PiB4KDU1KTsKKyAgICBCT09TVF9URVNUKGN1c3RvbV9oYXNoZXIoeCkgPT0gNTUwdSk7CisKKyAgICB7CisgICAgICAgIHVzaW5nIG5hbWVzcGFjZSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOworICAgICAgICBCT09TVF9URVNUKGN1c3RvbV9oYXNoZXIoeCkgPT0gaGFzaF92YWx1ZSh4KSk7CisgICAgfQorCisgICAgc3RkOjp2ZWN0b3I8dGVzdDo6Y3VzdG9tPGludD4gPiBjdXN0b21fdmVjdG9yOworICAgIGN1c3RvbV92ZWN0b3IucHVzaF9iYWNrKDUpOworICAgIGN1c3RvbV92ZWN0b3IucHVzaF9iYWNrKDI1KTsKKyAgICBjdXN0b21fdmVjdG9yLnB1c2hfYmFjaygzNSk7CisKKyAgICBzdGQ6OnNpemVfdCBzZWVkID0gMDsKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX2NvbWJpbmUoc2VlZCwgdGVzdDo6Y3VzdG9tPGludD4oNSkpOworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfY29tYmluZShzZWVkLCB0ZXN0OjpjdXN0b208aW50PigyNSkpOworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfY29tYmluZShzZWVkLCB0ZXN0OjpjdXN0b208aW50PigzNSkpOworCisgICAgc3RkOjpzaXplX3Qgc2VlZDIgPSAwOworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfY29tYmluZShzZWVkMiwgNTB1KTsKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX2NvbWJpbmUoc2VlZDIsIDI1MHUpOworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfY29tYmluZShzZWVkMiwgMzUwdSk7CisKKyAgICBCT09TVF9URVNUKHNlZWQgPT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZSgKKyAgICAgICAgY3VzdG9tX3ZlY3Rvci5iZWdpbigpLCBjdXN0b21fdmVjdG9yLmVuZCgpKSk7CisgICAgQk9PU1RfVEVTVChzZWVkID09IHNlZWQyKTsKK30KKworI2VuZGlmIC8vIEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TCisKK2ludCBtYWluKCkKK3sKKyNpZmRlZiBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUworICAgIGN1c3RvbV90ZXN0cygpOworI2VuZGlmCisgICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Cit9CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZnVuY3Rpb25fcG9pbnRlcl90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9mdW5jdGlvbl9wb2ludGVyX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNzhjYzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZnVuY3Rpb25fcG9pbnRlcl90ZXN0LmNwcApAQCAtMCwwICsxLDU3IEBACisKKy8vIENvcHlyaWdodCAyMDA1LTIwMDkgRGFuaWVsIEphbWVzLgorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKyNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCisKKyNpZmRlZiBCT09TVF9IQVNIX1RFU1RfU1REX0lOQ0xVREVTCisjICBpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2Vsc2UKKyMgIGluY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC5ocHA+CisjZW5kaWYKKworI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KKyNpbmNsdWRlICIuL2NvbXBpbGVfdGltZS5ocHAiCisKK3ZvaWQgdm9pZF9mdW5jMSgpIHsgc3RhdGljIGludCB4ID0gMTsgKyt4OyB9Cit2b2lkIHZvaWRfZnVuYzIoKSB7IHN0YXRpYyBpbnQgeCA9IDI7IC0teDsgfQoraW50IGludF9mdW5jMShpbnQpIHsgcmV0dXJuIDA7IH0KK2ludCBpbnRfZnVuYzIoaW50KSB7IHJldHVybiAxOyB9CisKK3ZvaWQgZnVuY3Rpb25fcG9pbnRlcl90ZXN0cygpCit7CisgICAgY29tcGlsZV90aW1lX3Rlc3RzKCh2b2lkKCoqKSgpKSAwKTsKKyAgICBjb21waWxlX3RpbWVfdGVzdHMoKGludCgqKikoaW50KSkgMCk7CisKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPHZvaWQoKikoKT4gaGFzaGVyX3ZvaWQ7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxpbnQoKikoaW50KT4gaGFzaGVyX2ludDsKKworICAgIEJPT1NUX1RFU1QoJnZvaWRfZnVuYzEgIT0gJnZvaWRfZnVuYzIpOworICAgIEJPT1NUX1RFU1QoJmludF9mdW5jMSAhPSAmaW50X2Z1bmMyKTsKKworICAgIEJPT1NUX1RFU1QoaGFzaGVyX3ZvaWQoMCkgPT0gaGFzaGVyX3ZvaWQoMCkpOworICAgIEJPT1NUX1RFU1QoaGFzaGVyX3ZvaWQoJnZvaWRfZnVuYzEpID09IGhhc2hlcl92b2lkKCZ2b2lkX2Z1bmMxKSk7CisgICAgQk9PU1RfVEVTVChoYXNoZXJfdm9pZCgmdm9pZF9mdW5jMSkgIT0gaGFzaGVyX3ZvaWQoJnZvaWRfZnVuYzIpKTsKKyAgICBCT09TVF9URVNUKGhhc2hlcl92b2lkKCZ2b2lkX2Z1bmMxKSAhPSBoYXNoZXJfdm9pZCgwKSk7CisgICAgQk9PU1RfVEVTVChoYXNoZXJfaW50KDApID09IGhhc2hlcl9pbnQoMCkpOworICAgIEJPT1NUX1RFU1QoaGFzaGVyX2ludCgmaW50X2Z1bmMxKSA9PSBoYXNoZXJfaW50KCZpbnRfZnVuYzEpKTsKKyAgICBCT09TVF9URVNUKGhhc2hlcl9pbnQoJmludF9mdW5jMSkgIT0gaGFzaGVyX2ludCgmaW50X2Z1bmMyKSk7CisgICAgQk9PU1RfVEVTVChoYXNoZXJfaW50KCZpbnRfZnVuYzEpICE9IGhhc2hlcl9pbnQoMCkpOworI2lmIGRlZmluZWQoQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMpCisgICAgQk9PU1RfVEVTVChoYXNoZXJfdm9pZCgmdm9pZF9mdW5jMSkKKyAgICAgICAgICAgID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUoJnZvaWRfZnVuYzEpKTsKKyAgICBCT09TVF9URVNUKGhhc2hlcl9pbnQoJmludF9mdW5jMSkKKyAgICAgICAgICAgID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUoJmludF9mdW5jMSkpOworCisgICAgLy8gVGhpcyBpc24ndCBzcGVjaWZpZWQgaW4gUGV0ZXIncyBwcm9wb3NhbDoKKyAgICBCT09TVF9URVNUKGhhc2hlcl92b2lkKDApID09IDApOworI2VuZGlmCit9CisKK2ludCBtYWluKCkKK3sKKyAgICBmdW5jdGlvbl9wb2ludGVyX3Rlc3RzKCk7CisKKyAgICByZXR1cm4gbmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9md2RfdGVzdC5ocHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZndkX3Rlc3QuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NDAxN2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZndkX3Rlc3QuaHBwCkBAIC0wLDAgKzEsMTA0IEBACisKKy8vIENvcHlyaWdodCAyMDA2LTIwMDkgRGFuaWVsIEphbWVzLgorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKyNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCisKKyNpZiBkZWZpbmVkKEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TKSAmJiAhZGVmaW5lZChCT09TVF9IQVNIX1RFU1RfU1REX0lOQ0xVREVTKQorI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaF9md2QuaHBwPgorCisjaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KKyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworbmFtZXNwYWNlIHRlc3QgeworCisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+CisgICAgc3RydWN0IHRlc3RfdHlwZTEKKyAgICB7CisgICAgICAgIFQgdmFsdWU7CisgICAgICAgIHRlc3RfdHlwZTEoVCBjb25zdCYgeCkgOiB2YWx1ZSh4KSB7fQorICAgIH07CisKKyNpZiAhZGVmaW5lZChCT09TVF9OT19BUkdVTUVOVF9ERVBFTkRFTlRfTE9PS1VQKQorICAgIHRlbXBsYXRlIDxjbGFzcyBUPgorICAgIHN0ZDo6c2l6ZV90IGhhc2hfdmFsdWUodGVzdF90eXBlMTxUPiBjb25zdCYgeCkKKyAgICB7CisgICAgICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8VD4gaGFzaGVyOworICAgICAgICByZXR1cm4gaGFzaGVyKHgudmFsdWUpOworICAgIH0KKyNlbmRpZgorCisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+CisgICAgc3RydWN0IHRlc3RfdHlwZTIKKyAgICB7CisgICAgICAgIFQgdmFsdWUxLCB2YWx1ZTI7CisgICAgICAgIHRlc3RfdHlwZTIoVCBjb25zdCYgeCwgVCBjb25zdCYgeSkgOiB2YWx1ZTEoeCksIHZhbHVlMih5KSB7fQorICAgIH07CisKKyNpZiAhZGVmaW5lZChCT09TVF9OT19BUkdVTUVOVF9ERVBFTkRFTlRfTE9PS1VQKQorICAgIHRlbXBsYXRlIDxjbGFzcyBUPgorICAgIHN0ZDo6c2l6ZV90IGhhc2hfdmFsdWUodGVzdF90eXBlMjxUPiBjb25zdCYgeCkKKyAgICB7CisgICAgICAgIHN0ZDo6c2l6ZV90IHNlZWQgPSAwOworICAgICAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX2NvbWJpbmUoc2VlZCwgeC52YWx1ZTEpOworICAgICAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX2NvbWJpbmUoc2VlZCwgeC52YWx1ZTIpOworICAgICAgICByZXR1cm4gc2VlZDsKKyAgICB9CisjZW5kaWYKKworICAgIHRlbXBsYXRlIDxjbGFzcyBUPgorICAgIHN0cnVjdCB0ZXN0X3R5cGUzCisgICAgeworICAgICAgICBzdGQ6OnZlY3RvcjxUPiB2YWx1ZXM7CisgICAgICAgIHRlc3RfdHlwZTModHlwZW5hbWUgc3RkOjp2ZWN0b3I8VD46Oml0ZXJhdG9yIHgsCisgICAgICAgICAgICAgICAgdHlwZW5hbWUgc3RkOjp2ZWN0b3I8VD46Oml0ZXJhdG9yIHkpIDogdmFsdWVzKHgsIHkpIHt9CisgICAgfTsKKworI2lmICFkZWZpbmVkKEJPT1NUX05PX0FSR1VNRU5UX0RFUEVOREVOVF9MT09LVVApCisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+CisgICAgc3RkOjpzaXplX3QgaGFzaF92YWx1ZSh0ZXN0X3R5cGUzPFQ+IGNvbnN0JiB4KQorICAgIHsKKyAgICAgICAgc3RkOjpzaXplX3Qgc2VlZCA9CisgICAgICAgICAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKHgudmFsdWVzLmJlZ2luKCksIHgudmFsdWVzLmVuZCgpKTsKKyAgICAgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZShzZWVkLCB4LnZhbHVlcy5iZWdpbigpLCB4LnZhbHVlcy5lbmQoKSk7CisgICAgICAgIHJldHVybiBzZWVkOworICAgIH0KKyNlbmRpZgorCit9CisKKyNpZiBkZWZpbmVkKEJPT1NUX05PX0FSR1VNRU5UX0RFUEVOREVOVF9MT09LVVApCisKK25hbWVzcGFjZSBuZG5ib29zdAoreworICAgIHRlbXBsYXRlIDxjbGFzcyBUPgorICAgIHN0ZDo6c2l6ZV90IGhhc2hfdmFsdWUodGVzdDo6dGVzdF90eXBlMTxUPiBjb25zdCYgeCkKKyAgICB7CisgICAgICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8VD4gaGFzaGVyOworICAgICAgICByZXR1cm4gaGFzaGVyKHgudmFsdWUpOworICAgIH0KKworICAgIHRlbXBsYXRlIDxjbGFzcyBUPgorICAgIHN0ZDo6c2l6ZV90IGhhc2hfdmFsdWUodGVzdDo6dGVzdF90eXBlMjxUPiBjb25zdCYgeCkKKyAgICB7CisgICAgICAgIHN0ZDo6c2l6ZV90IHNlZWQgPSAwOworICAgICAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX2NvbWJpbmUoc2VlZCwgeC52YWx1ZTEpOworICAgICAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX2NvbWJpbmUoc2VlZCwgeC52YWx1ZTIpOworICAgICAgICByZXR1cm4gc2VlZDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KKyAgICBzdGQ6OnNpemVfdCBoYXNoX3ZhbHVlKHRlc3Q6OnRlc3RfdHlwZTM8VD4gY29uc3QmIHgpCisgICAgeworICAgICAgICBzdGQ6OnNpemVfdCBzZWVkID0KKyAgICAgICAgICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UoeC52YWx1ZXMuYmVnaW4oKSwgeC52YWx1ZXMuZW5kKCkpOworICAgICAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKHNlZWQsIHgudmFsdWVzLmJlZ2luKCksIHgudmFsdWVzLmVuZCgpKTsKKyAgICAgICAgcmV0dXJuIHNlZWQ7CisgICAgfQorfQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZndkX3Rlc3RfMS5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZndkX3Rlc3RfMS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNmMTY2NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9md2RfdGVzdF8xLmNwcApAQCAtMCwwICsxLDk2IEBACisKKy8vIENvcHlyaWdodCAyMDA2LTIwMDkgRGFuaWVsIEphbWVzLgorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKy8vIFRoaXMgY2hlY2tzIHRoYXQgdGVtcGxhdGUgY29kZSBpbXBsZW1lbnRlZCB1c2luZyBoYXNoX2Z3ZCB3aWxsIHdvcmsuCisKKyNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCisKKyNpbmNsdWRlICIuL2hhc2hfZndkX3Rlc3QuaHBwIgorCisjaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgorCisjaWYgZGVmaW5lZChCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUykgJiYgIWRlZmluZWQoQk9PU1RfSEFTSF9URVNUX1NURF9JTkNMVURFUykKKworI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC5ocHA+CisjaW5jbHVkZSA8c3RyaW5nPgorCit2b2lkIGZ3ZF90ZXN0MSgpCit7CisgICAgdGVzdDo6dGVzdF90eXBlMTxpbnQ+IHgoNSk7CisgICAgdGVzdDo6dGVzdF90eXBlMTxzdGQ6OnN0cmluZz4geSgiVGVzdCIpOworCisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxpbnQ+IGhhc2hlcl9pbnQ7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxzdGQ6OnN0cmluZz4gaGFzaGVyX3N0cmluZzsKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPHRlc3Q6OnRlc3RfdHlwZTE8aW50PiA+IGhhc2hlcl90ZXN0X2ludDsKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPHRlc3Q6OnRlc3RfdHlwZTE8c3RkOjpzdHJpbmc+ID4gaGFzaGVyX3Rlc3Rfc3RyaW5nOworCisgICAgQk9PU1RfVEVTVChoYXNoZXJfaW50KDUpID09IGhhc2hlcl90ZXN0X2ludCh4KSk7CisgICAgQk9PU1RfVEVTVChoYXNoZXJfc3RyaW5nKCJUZXN0IikgPT0gaGFzaGVyX3Rlc3Rfc3RyaW5nKHkpKTsKK30KKwordm9pZCBmd2RfdGVzdDIoKQoreworICAgIHRlc3Q6OnRlc3RfdHlwZTI8aW50PiB4KDUsIDEwKTsKKyAgICB0ZXN0Ojp0ZXN0X3R5cGUyPHN0ZDo6c3RyaW5nPiB5KCJUZXN0MSIsICJUZXN0MiIpOworCisgICAgc3RkOjpzaXplX3Qgc2VlZDEgPSAwOworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfY29tYmluZShzZWVkMSwgNSk7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9jb21iaW5lKHNlZWQxLCAxMCk7CisKKyAgICBzdGQ6OnNpemVfdCBzZWVkMiA9IDA7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9jb21iaW5lKHNlZWQyLCBzdGQ6OnN0cmluZygiVGVzdDEiKSk7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9jb21iaW5lKHNlZWQyLCBzdGQ6OnN0cmluZygiVGVzdDIiKSk7CisKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPHRlc3Q6OnRlc3RfdHlwZTI8aW50PiA+IGhhc2hlcl90ZXN0X2ludDsKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPHRlc3Q6OnRlc3RfdHlwZTI8c3RkOjpzdHJpbmc+ID4gaGFzaGVyX3Rlc3Rfc3RyaW5nOworCisgICAgQk9PU1RfVEVTVChzZWVkMSA9PSBoYXNoZXJfdGVzdF9pbnQoeCkpOworICAgIEJPT1NUX1RFU1Qoc2VlZDIgPT0gaGFzaGVyX3Rlc3Rfc3RyaW5nKHkpKTsKK30KKwordm9pZCBmd2RfdGVzdDMoKQoreworICAgIHN0ZDo6dmVjdG9yPGludD4gdmFsdWVzMTsKKyAgICB2YWx1ZXMxLnB1c2hfYmFjaygxMCk7CisgICAgdmFsdWVzMS5wdXNoX2JhY2soMTUpOworICAgIHZhbHVlczEucHVzaF9iYWNrKDIwKTsKKyAgICB2YWx1ZXMxLnB1c2hfYmFjaygzKTsKKworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB2YWx1ZXMyOworICAgIHZhbHVlczIucHVzaF9iYWNrKCJDaGljbyIpOworICAgIHZhbHVlczIucHVzaF9iYWNrKCJHcm91Y2hvIik7CisgICAgdmFsdWVzMi5wdXNoX2JhY2soIkhhcnBvIik7CisgICAgdmFsdWVzMi5wdXNoX2JhY2soIkd1bW1vIik7CisgICAgdmFsdWVzMi5wdXNoX2JhY2soIlplcHBvIik7CisKKyAgICB0ZXN0Ojp0ZXN0X3R5cGUzPGludD4geCh2YWx1ZXMxLmJlZ2luKCksIHZhbHVlczEuZW5kKCkpOworICAgIHRlc3Q6OnRlc3RfdHlwZTM8c3RkOjpzdHJpbmc+IHkodmFsdWVzMi5iZWdpbigpLCB2YWx1ZXMyLmVuZCgpKTsKKworICAgIHN0ZDo6c2l6ZV90IHNlZWQxID0KKyAgICAgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZSh2YWx1ZXMxLmJlZ2luKCksIHZhbHVlczEuZW5kKCkpOworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2Uoc2VlZDEsIHZhbHVlczEuYmVnaW4oKSwgdmFsdWVzMS5lbmQoKSk7CisKKyAgICBzdGQ6OnNpemVfdCBzZWVkMiA9CisgICAgICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UodmFsdWVzMi5iZWdpbigpLCB2YWx1ZXMyLmVuZCgpKTsKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKHNlZWQyLCB2YWx1ZXMyLmJlZ2luKCksIHZhbHVlczIuZW5kKCkpOworCisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDx0ZXN0Ojp0ZXN0X3R5cGUzPGludD4gPiBoYXNoZXJfdGVzdF9pbnQ7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDx0ZXN0Ojp0ZXN0X3R5cGUzPHN0ZDo6c3RyaW5nPiA+IGhhc2hlcl90ZXN0X3N0cmluZzsKKworICAgIEJPT1NUX1RFU1Qoc2VlZDEgPT0gaGFzaGVyX3Rlc3RfaW50KHgpKTsKKyAgICBCT09TVF9URVNUKHNlZWQyID09IGhhc2hlcl90ZXN0X3N0cmluZyh5KSk7Cit9CisKKyNlbmRpZgorCitpbnQgbWFpbigpCit7CisjaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKKyAgICBmd2RfdGVzdDEoKTsKKyAgICBmd2RfdGVzdDIoKTsKKyAgICBmd2RfdGVzdDMoKTsKKyNlbmRpZgorICAgIHJldHVybiBuZG5ib29zdDo6cmVwb3J0X2Vycm9ycygpOworfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2Z3ZF90ZXN0XzIuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2Z3ZF90ZXN0XzIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0Zjk4ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZndkX3Rlc3RfMi5jcHAKQEAgLTAsMCArMSw0NyBAQAorCisvLyBDb3B5cmlnaHQgMjAwNi0yMDA5IERhbmllbCBKYW1lcy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisvLyBUaGlzIHRlc3QganVzdCBtYWtlcyBzdXJlIGEgaGVhZGVyIHdoaWNoIHVzZXMgaGFzaF9md2QgY2FuIGNvbXBpbGUgd2l0aG91dAorLy8gdGhlIG1haW4gaGFzaCBoZWFkZXJzLgorCisjaW5jbHVkZSAiLi9jb25maWcuaHBwIgorCisjaWYgIWRlZmluZWQoQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMpIHx8IGRlZmluZWQoQk9PU1RfSEFTSF9URVNUX1NURF9JTkNMVURFUykKKworaW50IG1haW4oKSB7fQorCisjZWxzZQorCisjaW5jbHVkZSAiLi9oYXNoX2Z3ZF90ZXN0LmhwcCIKKyNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+CisKK3RlbXBsYXRlIDxjbGFzcyBUPiB2b2lkIHVudXNlZChUIGNvbnN0Jikge30KKwordm9pZCBmd2RfdGVzdCgpCit7CisgICAgdGVzdDo6dGVzdF90eXBlMTxpbnQ+IHgxKDMpOworICAgIHRlc3Q6OnRlc3RfdHlwZTE8c3RkOjpzdHJpbmc+IHkxKCJCbGFjayIpOworICAgIHRlc3Q6OnRlc3RfdHlwZTI8aW50PiB4MigyNSwgMTYpOworICAgIHRlc3Q6OnRlc3RfdHlwZTI8c3RkOjpzdHJpbmc+IHkyKCJXaGl0ZSIsICJHcmVlbiIpOworCisgICAgc3RkOjp2ZWN0b3I8aW50PiBlbXB0eTsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZW1wdHkyOworCisgICAgdGVzdDo6dGVzdF90eXBlMzxpbnQ+IHgzKGVtcHR5LmJlZ2luKCksIGVtcHR5LmVuZCgpKTsKKyAgICB0ZXN0Ojp0ZXN0X3R5cGUzPHN0ZDo6c3RyaW5nPiB5MyhlbXB0eTIuYmVnaW4oKSwgZW1wdHkyLmVuZCgpKTsKKworICAgIC8vIFByZXZlbnQgZ2NjIHdhcm5pbmdzOgorICAgIHVudXNlZCh4MSk7IHVudXNlZCh4Mik7IHVudXNlZCh4Myk7CisgICAgdW51c2VkKHkxKTsgdW51c2VkKHkyKTsgdW51c2VkKHkzKTsKK30KKworaW50IG1haW4oKQoreworICAgIGZ3ZF90ZXN0KCk7CisKKyAgICByZXR1cm4gbmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKK30KKworI2VuZGlmIC8vIGRlZmluZWQoQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMpICYmICFkZWZpbmVkKEJPT1NUX0hBU0hfVEVTVF9TVERfSU5DTFVERVMpCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZ2xvYmFsX25hbWVzcGFjZV90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9nbG9iYWxfbmFtZXNwYWNlX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNmM4ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfZ2xvYmFsX25hbWVzcGFjZV90ZXN0LmNwcApAQCAtMCwwICsxLDEwMyBAQAorCisvLyBDb3B5cmlnaHQgMjAwNi0yMDA5IERhbmllbCBKYW1lcy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisvLyBUaGlzIHRlc3QgZGVtb25zdHJhdGVzIGFuIEFETCBidWcgaW4gQm9ybGFuZCA1LjUgd2hlcmUgQURMIGlzbid0IHBlcmZvcm1lZAorLy8gaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UuCisKKyNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCisKKyNpbmNsdWRlIDxib29zdC9jb25maWcuaHBwPgorI2luY2x1ZGUgPGNzdGRkZWY+CisKK3N0cnVjdCBjdXN0b20KK3sKKyAgICBpbnQgdmFsdWVfOworCisgICAgc3RkOjpzaXplX3QgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdmFsdWVfICogMTA7CisgICAgfQorCisjaWYgIWRlZmluZWQoQk9PU1RfTk9fQVJHVU1FTlRfREVQRU5ERU5UX0xPT0tVUCkKKyAgICBmcmllbmQgc3RkOjpzaXplX3QgaGFzaF92YWx1ZShjdXN0b20gY29uc3QmIHggKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHguaGFzaCgpOworICAgIH0KKyNlbmRpZgorCisgICAgY3VzdG9tKGludCB4KSA6IHZhbHVlXyh4KSB7fQorfTsKKworI2lmIGRlZmluZWQoQk9PU1RfTk9fQVJHVU1FTlRfREVQRU5ERU5UX0xPT0tVUCkKK25hbWVzcGFjZSBuZG5ib29zdAoreworICAgIHN0ZDo6c2l6ZV90IGhhc2hfdmFsdWUoY3VzdG9tIHgpCisgICAgeworICAgICAgICByZXR1cm4geC5oYXNoKCk7CisgICAgfQorfQorI2VuZGlmCisKKyNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCisKKyNpZmRlZiBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUworIyAgaWZkZWYgQk9PU1RfSEFTSF9URVNUX1NURF9JTkNMVURFUworIyAgICBpbmNsdWRlIDxmdW5jdGlvbmFsPgorIyAgZWxzZQorIyAgICBpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgorIyAgZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgorCisjaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKKworI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8Y2N0eXBlPgorCit2b2lkIGN1c3RvbV90ZXN0cygpCit7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxjdXN0b20+IGN1c3RvbV9oYXNoZXI7CisgICAgQk9PU1RfVEVTVChjdXN0b21faGFzaGVyKDEwKSA9PSAxMDB1KTsKKyAgICBjdXN0b20geCg1NSk7CisgICAgQk9PU1RfVEVTVChjdXN0b21faGFzaGVyKHgpID09IDU1MHUpOworCisgICAgeworICAgICAgICB1c2luZyBuYW1lc3BhY2UgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTsKKyAgICAgICAgQk9PU1RfVEVTVChjdXN0b21faGFzaGVyKHgpID09IGhhc2hfdmFsdWUoeCkpOworICAgIH0KKworICAgIHN0ZDo6dmVjdG9yPGN1c3RvbT4gY3VzdG9tX3ZlY3RvcjsKKyAgICBjdXN0b21fdmVjdG9yLnB1c2hfYmFjayg1KTsKKyAgICBjdXN0b21fdmVjdG9yLnB1c2hfYmFjaygyNSk7CisgICAgY3VzdG9tX3ZlY3Rvci5wdXNoX2JhY2soMzUpOworCisgICAgc3RkOjpzaXplX3Qgc2VlZCA9IDA7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9jb21iaW5lKHNlZWQsIGN1c3RvbSg1KSk7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9jb21iaW5lKHNlZWQsIGN1c3RvbSgyNSkpOworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfY29tYmluZShzZWVkLCBjdXN0b20oMzUpKTsKKworICAgIHN0ZDo6c2l6ZV90IHNlZWQyID0gMDsKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX2NvbWJpbmUoc2VlZDIsIDUwdSk7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9jb21iaW5lKHNlZWQyLCAyNTB1KTsKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX2NvbWJpbmUoc2VlZDIsIDM1MHUpOworCisgICAgQk9PU1RfVEVTVChzZWVkID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UoCisgICAgICAgIGN1c3RvbV92ZWN0b3IuYmVnaW4oKSwgY3VzdG9tX3ZlY3Rvci5lbmQoKSkpOworICAgIEJPT1NUX1RFU1Qoc2VlZCA9PSBzZWVkMik7Cit9CisKKyNlbmRpZiAvLyBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUworCisKK2ludCBtYWluKCkKK3sKKyNpZmRlZiBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUworICAgIGN1c3RvbV90ZXN0cygpOworI2VuZGlmCisgICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Cit9CisKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9saXN0X3Rlc3QuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX2xpc3RfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI5NGE4MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9saXN0X3Rlc3QuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKworLy8gQ29weXJpZ2h0IDIwMDUtMjAwOSBEYW5pZWwgSmFtZXMuCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisvLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworI2luY2x1ZGUgIi4vY29uZmlnLmhwcCIKKworI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TCisjICBpZmRlZiBCT09TVF9IQVNIX1RFU1RfU1REX0lOQ0xVREVTCisjICAgIGluY2x1ZGUgPGZ1bmN0aW9uYWw+CisjICBlbHNlCisjICAgIGluY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC5ocHA+CisjICBlbmRpZgorI2VuZGlmCisKKyNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+CisKKyNpZmRlZiBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUworCisjaW5jbHVkZSA8bGlzdD4KKwordXNpbmcgc3RkOjpsaXN0OworI2RlZmluZSBDT05UQUlORVJfVFlQRSBsaXN0CisjaW5jbHVkZSAiLi9oYXNoX3NlcXVlbmNlX3Rlc3QuaHBwIgorCisjZW5kaWYgLy8gQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKKworaW50IG1haW4oKQoreworI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TCisgICAgbGlzdF90ZXN0czo6bGlzdF9oYXNoX2ludGVnZXJfdGVzdHMoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Cit9CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfbG9uZ19kb3VibGVfdGVzdC5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfbG9uZ19kb3VibGVfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE5MjE4NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9sb25nX2RvdWJsZV90ZXN0LmNwcApAQCAtMCwwICsxLDE3IEBACisKKy8vIENvcHlyaWdodCAyMDA1LTIwMDkgRGFuaWVsIEphbWVzLgorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKyNpbmNsdWRlICJoYXNoX2Zsb2F0X3Rlc3QuaHBwIgorCitpbnQgbWFpbigpCit7CisgICAgc3RkOjpjZXJyPDwiQ29tcGlsZXI6ICI8PEJPT1NUX0NPTVBJTEVSPDwiXG4iOworICAgIHN0ZDo6Y2Vycjw8IlBsYXRmb3JtOiAiPDxCT09TVF9QTEFURk9STTw8IlxuIjsKKyAgICBzdGQ6OmNlcnI8PCJMaWJyYXJ5OiAiPDxCT09TVF9TVERMSUI8PCJcblxuIjsKKworICAgIGZsb2F0X3Rlc3RzKCJsb25nIGRvdWJsZSIsIChsb25nIGRvdWJsZSopIDApOworCisgICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Cit9CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfbWFwX3Rlc3QuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX21hcF90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTgzNWM3Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX21hcF90ZXN0LmNwcApAQCAtMCwwICsxLDQwIEBACisKKy8vIENvcHlyaWdodCAyMDA1LTIwMDkgRGFuaWVsIEphbWVzLgorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKyNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCisKKyNpZmRlZiBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUworIyAgaWZkZWYgQk9PU1RfSEFTSF9URVNUX1NURF9JTkNMVURFUworIyAgICBpbmNsdWRlIDxmdW5jdGlvbmFsPgorIyAgZWxzZQorIyAgICBpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgorIyAgZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgorCisjaW5jbHVkZSA8bWFwPgorCisjaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKKwordXNpbmcgc3RkOjptYXA7CisjZGVmaW5lIENPTlRBSU5FUl9UWVBFIG1hcAorI2luY2x1ZGUgIi4vaGFzaF9tYXBfdGVzdC5ocHAiCisKK3VzaW5nIHN0ZDo6bXVsdGltYXA7CisjZGVmaW5lIENPTlRBSU5FUl9UWVBFIG11bHRpbWFwCisjaW5jbHVkZSAiLi9oYXNoX21hcF90ZXN0LmhwcCIKKworI2VuZGlmIC8vIEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TCisKK2ludCBtYWluKCkKK3sKKyNpZmRlZiBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUworICAgIG1hcF90ZXN0czo6bWFwX2hhc2hfaW50ZWdlcl90ZXN0cygpOworICAgIG11bHRpbWFwX3Rlc3RzOjptdWx0aW1hcF9oYXNoX2ludGVnZXJfdGVzdHMoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Cit9CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfbWFwX3Rlc3QuaHBwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX21hcF90ZXN0LmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWJiMmZhCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX21hcF90ZXN0LmhwcApAQCAtMCwwICsxLDc2IEBACisKKy8vIENvcHlyaWdodCAyMDA1LTIwMDkgRGFuaWVsIEphbWVzLgorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKyNpZiAhZGVmaW5lZChDT05UQUlORVJfVFlQRSkKKyNlcnJvciAiQ09OVEFJTkVSX1RZUEUgbm90IGRlZmluZWQiCisjZWxzZQorCisjaW5jbHVkZSA8Ym9vc3QvcHJlcHJvY2Vzc29yL2NhdC5ocHA+CisKKyNpZiBkZWZpbmVkKEJPT1NUX01TVkMpCisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQyNDQpIC8vIGNvbnZlcnNpb24gZnJvbSAnaW50JyB0byAnZmxvYXQnCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0MjQ1KSAvLyBzaWduZWQvdW5zaWduZWQgbWlzbWF0Y2gKKyNlbmRpZgorCituYW1lc3BhY2UgQk9PU1RfUFBfQ0FUKENPTlRBSU5FUl9UWVBFLCBfdGVzdHMpCit7CisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+CisgICAgdm9pZCBpbnRlZ2VyX3Rlc3RzKFQqID0gMCkKKyAgICB7CisgICAgICAgIGNvbnN0IGludCBudW1iZXJfb2ZfY29udGFpbmVycyA9IDEwOworICAgICAgICBUIGNvbnRhaW5lcnNbbnVtYmVyX29mX2NvbnRhaW5lcnNdOworICAgICAgICB0eXBlZGVmIEJPT1NUX0RFRFVDRURfVFlQRU5BTUUgVDo6dmFsdWVfdHlwZSBwYWlyOworICAgICAgICB0eXBlZGVmIEJPT1NUX0RFRFVDRURfVFlQRU5BTUUgVDo6a2V5X3R5cGUga2V5OworICAgICAgICB0eXBlZGVmIEJPT1NUX0RFRFVDRURfVFlQRU5BTUUgVDo6bWFwcGVkX3R5cGUgdmFsdWU7CisKKyAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IDU7ICsraSkgeworICAgICAgICAgICAgZm9yKGludCBqID0gMDsgaiA8IGk7ICsraikKKyAgICAgICAgICAgICAgICBjb250YWluZXJzW2ldLmluc2VydChwYWlyKGtleSgwKSwgdmFsdWUoMCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnRhaW5lcnNbNl0uaW5zZXJ0KHBhaXIoa2V5KDEpLHZhbHVlKDApKSk7CisgICAgICAgIGNvbnRhaW5lcnNbN10uaW5zZXJ0KHBhaXIoa2V5KDEpLHZhbHVlKDApKSk7CisgICAgICAgIGNvbnRhaW5lcnNbN10uaW5zZXJ0KHBhaXIoa2V5KDEpLHZhbHVlKDApKSk7CisgICAgICAgIGNvbnRhaW5lcnNbOF0uaW5zZXJ0KHBhaXIoa2V5KC0xKSx2YWx1ZSgxKSkpOworICAgICAgICBjb250YWluZXJzWzldLmluc2VydChwYWlyKGtleSgtMSksdmFsdWUoMykpKTsKKyAgICAgICAgY29udGFpbmVyc1s5XS5pbnNlcnQocGFpcihrZXkoLTEpLHZhbHVlKDMpKSk7CisKKyAgICAgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxUPiBoYXNoZXI7CisKKyAgICAgICAgZm9yKGludCBpMiA9IDA7IGkyIDwgbnVtYmVyX29mX2NvbnRhaW5lcnM7ICsraTIpIHsKKyAgICAgICAgICAgIEJPT1NUX1RFU1QoaGFzaGVyKGNvbnRhaW5lcnNbaTJdKSA9PSBoYXNoZXIoY29udGFpbmVyc1tpMl0pKTsKKworICAgICAgICAgICAgQk9PU1RfVEVTVChoYXNoZXIoY29udGFpbmVyc1tpMl0pID09CisgICAgICAgICAgICAgICAgICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUoY29udGFpbmVyc1tpMl0pKTsKKworICAgICAgICAgICAgQk9PU1RfVEVTVChoYXNoZXIoY29udGFpbmVyc1tpMl0pCisgICAgICAgICAgICAgICAgICAgID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJzW2kyXS5iZWdpbigpLCBjb250YWluZXJzW2kyXS5lbmQoKSkpOworCisgICAgICAgICAgICBmb3IoaW50IGoyID0gaTIgKyAxOyBqMiA8IG51bWJlcl9vZl9jb250YWluZXJzOyArK2oyKSB7CisgICAgICAgICAgICAgICAgQk9PU1RfVEVTVCgKKyAgICAgICAgICAgICAgICAgICAgICAgIChjb250YWluZXJzW2kyXSA9PSBjb250YWluZXJzW2oyXSkgPT0KKyAgICAgICAgICAgICAgICAgICAgICAgIChoYXNoZXIoY29udGFpbmVyc1tpMl0pID09IGhhc2hlcihjb250YWluZXJzW2oyXSkpCisgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBCT09TVF9QUF9DQVQoQ09OVEFJTkVSX1RZUEUsIF9oYXNoX2ludGVnZXJfdGVzdHMoKSkKKyAgICB7CisgICAgICAgIGludGVnZXJfdGVzdHMoKENPTlRBSU5FUl9UWVBFPGNoYXIsIHVuc2lnbmVkIGNoYXI+KikgMCk7CisgICAgICAgIGludGVnZXJfdGVzdHMoKENPTlRBSU5FUl9UWVBFPGludCwgZmxvYXQ+KikgMCk7CisgICAgICAgIGludGVnZXJfdGVzdHMoKENPTlRBSU5FUl9UWVBFPHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmc+KikgMCk7CisgICAgICAgIGludGVnZXJfdGVzdHMoKENPTlRBSU5FUl9UWVBFPGRvdWJsZSwgc2hvcnQ+KikgMCk7CisgICAgfQorfQorCisjaWYgZGVmaW5lZChCT09TVF9NU1ZDKQorI3ByYWdtYSB3YXJuaW5nKHBvcCkKKyNlbmRpZgorCisjdW5kZWYgQ09OVEFJTkVSX1RZUEUKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX25vX2V4dF9mYWlsX3Rlc3QuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX25vX2V4dF9mYWlsX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMTYzNmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfbm9fZXh0X2ZhaWxfdGVzdC5jcHAKQEAgLTAsMCArMSwyOCBAQAorCisvLyBDb3B5cmlnaHQgMjAwNi0yMDA5IERhbmllbCBKYW1lcy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisjaW5jbHVkZSAiLi9jb25maWcuaHBwIgorCisvLyBTaW1wbGUgdGVzdCB0byBtYWtlIHN1cmUgQk9PU1RfSEFTSF9OT19FWFRFTlNJT05TIGRvZXMgZGlzYWJsZSBleHRlbnNpb25zCisvLyAob3IgYXQgbGVhc3Qgb25lIG9mIHRoZW0pLgorI2lmICFkZWZpbmVkKEJPT1NUX0hBU0hfTk9fRVhURU5TSU9OUykKKyMgIGRlZmluZSBCT09TVF9IQVNIX05PX0VYVEVOU0lPTlMKKyNlbmRpZgorCisjaWZkZWYgQk9PU1RfSEFTSF9URVNUX1NURF9JTkNMVURFUworIyAgaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNlbHNlCisjICBpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgorI2VuZGlmCisKK3RlbXBsYXRlIDxjbGFzcyBUPiB2b2lkIGlnbm9yZShUIGNvbnN0Jikge30KKworaW50IG1haW4oKQoreworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8IGludFsxMF0gPiBoYXNoZXI7CisgICAgaWdub3JlKGhhc2hlcik7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9ub19leHRfbWFjcm9fMS5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfbm9fZXh0X21hY3JvXzEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZGZhMDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfbm9fZXh0X21hY3JvXzEuY3BwCkBAIC0wLDAgKzEsMzcgQEAKKworLy8gQ29weXJpZ2h0IDIwMDYtMjAwOSBEYW5pZWwgSmFtZXMuCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisvLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworI2luY2x1ZGUgIi4vY29uZmlnLmhwcCIKKworI2lmIGRlZmluZWQoQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMpCisKKy8vIEluY2x1ZGUgaGVhZGVyIHdpdGhvdXQgQk9PU1RfSEFTSF9OT19FWFRFTlNJT05TIGRlZmluZWQKKyMgIGlmIGRlZmluZWQoQk9PU1RfSEFTSF9OT19FWFRFTlNJT05TKQorIyAgICB1bmRlZiBCT09TVF9IQVNIX05PX0VYVEVOU0lPTlMKKyMgIGVuZGlmCisjICBpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgorCisvLyBJbmNsdWRlIGhlYWRlciB3aXRoIEJPT1NUX0hBU0hfTk9fRVhURU5TSU9OUyBkZWZpbmVkCisjICBkZWZpbmUgQk9PU1RfSEFTSF9OT19FWFRFTlNJT05TCisjICBpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgorI2VuZGlmCisKKyNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+CisjaW5jbHVkZSA8ZGVxdWU+CisKK2ludCBtYWluKCkKK3sKKyNpZiBkZWZpbmVkKEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TKQorICAgIHN0ZDo6ZGVxdWU8aW50PiB4OworCisgICAgeC5wdXNoX2JhY2soMSk7CisgICAgeC5wdXNoX2JhY2soMik7CisKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPHN0ZDo6ZGVxdWU8aW50PiA+IGhhc2hlcjsKKyAgICBCT09TVF9URVNUKGhhc2hlcih4KSA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKHgpKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Cit9CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfbm9fZXh0X21hY3JvXzIuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX25vX2V4dF9tYWNyb18yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2I0MjJlCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX25vX2V4dF9tYWNyb18yLmNwcApAQCAtMCwwICsxLDM3IEBACisKKy8vIENvcHlyaWdodCAyMDA2LTIwMDkgRGFuaWVsIEphbWVzLgorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKyNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCisKKyNpZiBkZWZpbmVkKEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TKQorCisvLyBJbmNsdWRlIGhlYWRlciB3aXRoIEJPT1NUX0hBU0hfTk9fRVhURU5TSU9OUyBkZWZpbmVkCisjICBpZiAhZGVmaW5lZChCT09TVF9IQVNIX05PX0VYVEVOU0lPTlMpCisjICAgIGRlZmluZSBCT09TVF9IQVNIX05PX0VYVEVOU0lPTlMKKyMgIGVuZGlmCisjICBpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgorCisvLyBJbmNsdWRlIGhlYWRlciB3aXRob3V0IEJPT1NUX0hBU0hfTk9fRVhURU5TSU9OUyBkZWZpbmVkCisjICB1bmRlZiBCT09TVF9IQVNIX05PX0VYVEVOU0lPTlMKKyMgIGluY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC5ocHA+CisjZW5kaWYKKworI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KKyNpbmNsdWRlIDxtYXA+CisKK2ludCBtYWluKCkKK3sKKyNpZiBkZWZpbmVkKEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TKQorICAgIHN0ZDo6bWFwPGludCwgaW50PiB4OworCisgICAgeC5pbnNlcnQoc3RkOjptYXA8aW50LCBpbnQ+Ojp2YWx1ZV90eXBlKDUzLCAtNDIpKTsKKyAgICB4Lmluc2VydChzdGQ6Om1hcDxpbnQsIGludD46OnZhbHVlX3R5cGUoMTQsIC03NSkpOworCisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxzdGQ6Om1hcDxpbnQsIGludD4gPiBoYXNoZXI7CisgICAgQk9PU1RfVEVTVChoYXNoZXIoeCkgPT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZSh4KSk7CisjZW5kaWYKKyAgICAKKyAgICByZXR1cm4gbmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9udW1iZXJfdGVzdC5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfbnVtYmVyX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4Y2E2ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfbnVtYmVyX3Rlc3QuY3BwCkBAIC0wLDAgKzEsMTk2IEBACisKKy8vIENvcHlyaWdodCAyMDA1LTIwMDkgRGFuaWVsIEphbWVzLgorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKyNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCisKKyNpZmRlZiBCT09TVF9IQVNIX1RFU1RfU1REX0lOQ0xVREVTCisjICBpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2Vsc2UKKyMgIGluY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC5ocHA+CisjZW5kaWYKKworI2luY2x1ZGUgPGlvc3RyZWFtPgorI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KKworI2luY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jYXQuaHBwPgorI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC9kZXRhaWwvbGltaXRzLmhwcD4KKyNpbmNsdWRlIDxib29zdC91dGlsaXR5L2VuYWJsZV9pZi5ocHA+CisKKyNpbmNsdWRlICIuL2NvbXBpbGVfdGltZS5ocHAiCisKKyNpZiBkZWZpbmVkKEJPT1NUX01TVkMpCisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQxMjcpIC8vIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gaXMgY29uc3RhbnQKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQzMDkpIC8vIHRydW5jYXRpb24gb2YgY29uc3RhbnQgdmFsdWUKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQzMTApIC8vIGNhc3QgdHJ1bmNhdGVzIGNvbnN0YW50IHZhbHVlCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKEJPT1NUX0lOVEVMX0NYWF9WRVJTSU9OKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2Zsb2F0LWVxdWFsIgorI2VuZGlmCisKK3RlbXBsYXRlIDxjbGFzcyBUPgordm9pZCBudW1lcmljX2V4dHJhX3Rlc3RzKHR5cGVuYW1lCisgICAgbmRuYm9vc3Q6OmVuYWJsZV9pZl9jPG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+Ojppc19pbnRlZ2VyLAorICAgICAgICB2b2lkKj46OnR5cGUgPSAwKQoreworICAgIHR5cGVkZWYgbmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpsaW1pdHM8VD4gbGltaXRzOworCisgICAgaWYobGltaXRzOjppc19zaWduZWQgfHwKKyAgICAgICAgbGltaXRzOjpkaWdpdHMgPD0gbmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpsaW1pdHM8c3RkOjpzaXplX3Q+OjpkaWdpdHMpCisgICAgeworICAgICAgICBCT09TVF9URVNUKEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUoVCgtNSkpID09IChzdGQ6OnNpemVfdClUKC01KSk7CisgICAgfQorICAgIEJPT1NUX1RFU1QoQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZShUKDApKSA9PSAoc3RkOjpzaXplX3QpVCgwdSkpOworICAgIEJPT1NUX1RFU1QoQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZShUKDEwKSkgPT0gKHN0ZDo6c2l6ZV90KVQoMTB1KSk7CisgICAgQk9PU1RfVEVTVChCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKFQoMjUpKSA9PSAoc3RkOjpzaXplX3QpVCgyNXUpKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIFQ+Cit2b2lkIG51bWVyaWNfZXh0cmFfdGVzdHModHlwZW5hbWUKKyAgICBuZG5ib29zdDo6ZGlzYWJsZV9pZl9jPG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+Ojppc19pbnRlZ2VyLAorICAgICAgICB2b2lkKj46OnR5cGUgPSAwKQoreworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK3ZvaWQgbnVtZXJpY190ZXN0KFQqKQoreworICAgIHR5cGVkZWYgbmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpsaW1pdHM8VD4gbGltaXRzOworCisgICAgY29tcGlsZV90aW1lX3Rlc3RzKChUKikgMCk7CisKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPFQ+IHgxOworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8VD4geDI7CisKKyAgICBUIHYxID0gKFQpIC01OworICAgIEJPT1NUX1RFU1QoeDEodjEpID09IHgyKHYxKSk7CisgICAgQk9PU1RfVEVTVCh4MShUKC01KSkgPT0geDIoVCgtNSkpKTsKKyAgICBCT09TVF9URVNUKHgxKFQoMCkpID09IHgyKFQoMCkpKTsKKyAgICBCT09TVF9URVNUKHgxKFQoMTApKSA9PSB4MihUKDEwKSkpOworICAgIEJPT1NUX1RFU1QoeDEoVCgyNSkpID09IHgyKFQoMjUpKSk7CisgICAgQk9PU1RfVEVTVCh4MShUKDUpIC0gVCg1KSkgPT0geDIoVCgwKSkpOworICAgIEJPT1NUX1RFU1QoeDEoVCg2KSArIFQoNCkpID09IHgyKFQoMTApKSk7CisKKyNpZiBkZWZpbmVkKEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TKQorICAgIEJPT1NUX1RFU1QoeDEoVCgtNSkpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUoVCgtNSkpKTsKKyAgICBCT09TVF9URVNUKHgxKFQoMCkpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUoVCgwKSkpOworICAgIEJPT1NUX1RFU1QoeDEoVCgxMCkpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUoVCgxMCkpKTsKKyAgICBCT09TVF9URVNUKHgxKFQoMjUpKSA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKFQoMjUpKSk7CisKKyAgICBudW1lcmljX2V4dHJhX3Rlc3RzPFQ+KCk7CisjZW5kaWYKK30KKwordGVtcGxhdGUgPGNsYXNzIFQ+Cit2b2lkIGxpbWl0c190ZXN0KFQqKQoreworICAgIHR5cGVkZWYgbmRuYm9vc3Q6Omhhc2hfZGV0YWlsOjpsaW1pdHM8VD4gbGltaXRzOworCisgICAgaWYobGltaXRzOjppc19zcGVjaWFsaXplZCkKKyAgICB7CisgICAgICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8VD4geDE7CisgICAgICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8VD4geDI7CisKKyAgICAgICAgVCBtaW5fdmFsdWUgPSAobGltaXRzOjptaW4pKCk7CisgICAgICAgIFQgbWF4X3ZhbHVlID0gKGxpbWl0czo6bWF4KSgpOworCisgICAgICAgIEJPT1NUX1RFU1QoeDEobWluX3ZhbHVlKSA9PSB4MigobGltaXRzOjptaW4pKCkpKTsKKyAgICAgICAgQk9PU1RfVEVTVCh4MShtYXhfdmFsdWUpID09IHgyKChsaW1pdHM6Om1heCkoKSkpOworCisjaWYgZGVmaW5lZChCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUykKKyAgICAgICAgQk9PU1RfVEVTVCh4MShtaW5fdmFsdWUpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUobWluX3ZhbHVlKSk7CisgICAgICAgIEJPT1NUX1RFU1QoeDEobWF4X3ZhbHVlKSA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKG1heF92YWx1ZSkpOworCisgICAgICAgIGlmIChsaW1pdHM6OmlzX2ludGVnZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIEJPT1NUX1RFU1QoQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZShtaW5fdmFsdWUpCisgICAgICAgICAgICAgICAgICAgID09IHN0ZDo6c2l6ZV90KG1pbl92YWx1ZSkpOworICAgICAgICAgICAgQk9PU1RfVEVTVChCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKG1heF92YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgPT0gc3RkOjpzaXplX3QobWF4X3ZhbHVlKSk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KK30KKwordGVtcGxhdGUgPGNsYXNzIFQ+Cit2b2lkIHBvb3JfcXVhbGl0eV90ZXN0cyhUKikKK3sKKyAgICB0eXBlZGVmIG5kbmJvb3N0OjpoYXNoX2RldGFpbDo6bGltaXRzPFQ+IGxpbWl0czsKKworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8VD4geDE7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxUPiB4MjsKKworICAgIC8vIEEgaGFzaCBmdW5jdGlvbiBjYW4gbGVnYWxseSBmYWlsIHRoZXNlIHRlc3RzLCBidXQgaXQnbGwgbm90IGJlIGEgZ29vZAorICAgIC8vIHNpZ24uCisgICAgaWYoVCgxKSAhPSBUKC0xKSkKKyAgICAgICAgQk9PU1RfVEVTVCh4MShUKDEpKSAhPSAgeDIoVCgtMSkpKTsKKyAgICBpZihUKDEpICE9IFQoMikpCisgICAgICAgIEJPT1NUX1RFU1QoeDEoVCgxKSkgIT0gIHgyKFQoMikpKTsKKyAgICBpZigobGltaXRzOjptYXgpKCkgIT0gKGxpbWl0czo6bWF4KSgpIC0gMSkKKyAgICAgICAgQk9PU1RfVEVTVCh4MShzdGF0aWNfY2FzdDxUPigobGltaXRzOjptYXgpKCkpKQorICAgICAgICAgICAgIT0geDIoc3RhdGljX2Nhc3Q8VD4oKGxpbWl0czo6bWF4KSgpIC0gMSkpKTsKK30KKwordm9pZCBib29sX3Rlc3QoKQoreworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8Ym9vbD4geDE7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxib29sPiB4MjsKKyAgICAKKyAgICBCT09TVF9URVNUKHgxKHRydWUpID09IHgyKHRydWUpKTsKKyAgICBCT09TVF9URVNUKHgxKGZhbHNlKSA9PSB4MihmYWxzZSkpOworICAgIEJPT1NUX1RFU1QoeDEodHJ1ZSkgIT0geDIoZmFsc2UpKTsKKyAgICBCT09TVF9URVNUKHgxKGZhbHNlKSAhPSB4Mih0cnVlKSk7Cit9CisKKyNkZWZpbmUgTlVNRVJJQ19URVNUKHR5cGUsIG5hbWUpIFwKKyAgICBzdGQ6OmNlcnI8PCJUZXN0aW5nOiAiIEJPT1NUX1NUUklOR0laRShuYW1lKSAiXG4iOyBcCisgICAgbnVtZXJpY190ZXN0KCh0eXBlKikgMCk7IFwKKyAgICBsaW1pdHNfdGVzdCgodHlwZSopIDApOyBcCisgICAgcG9vcl9xdWFsaXR5X3Rlc3RzKCh0eXBlKikgMCk7CisjZGVmaW5lIE5VTUVSSUNfVEVTVF9OT19MSU1JVFModHlwZSwgbmFtZSkgXAorICAgIHN0ZDo6Y2Vycjw8IlRlc3Rpbmc6ICIgQk9PU1RfU1RSSU5HSVpFKG5hbWUpICJcbiI7IFwKKyAgICBudW1lcmljX3Rlc3QoKHR5cGUqKSAwKTsgXAorICAgIHBvb3JfcXVhbGl0eV90ZXN0cygodHlwZSopIDApOworCitpbnQgbWFpbigpCit7CisgICAgTlVNRVJJQ19URVNUKGNoYXIsIGNoYXIpCisgICAgTlVNRVJJQ19URVNUKHNpZ25lZCBjaGFyLCBzY2hhcikKKyAgICBOVU1FUklDX1RFU1QodW5zaWduZWQgY2hhciwgdWNoYXIpCisjaWZuZGVmIEJPT1NUX05PX0lOVFJJTlNJQ19XQ0hBUl9UCisgICAgTlVNRVJJQ19URVNUKHdjaGFyX3QsIHdjaGFyKQorI2VuZGlmCisgICAgTlVNRVJJQ19URVNUKHNob3J0LCBzaG9ydCkKKyAgICBOVU1FUklDX1RFU1QodW5zaWduZWQgc2hvcnQsIHVzaG9ydCkKKyAgICBOVU1FUklDX1RFU1QoaW50LCBpbnQpCisgICAgTlVNRVJJQ19URVNUKHVuc2lnbmVkIGludCwgdWludCkKKyAgICBOVU1FUklDX1RFU1QobG9uZywgaGFzaF9sb25nKQorICAgIE5VTUVSSUNfVEVTVCh1bnNpZ25lZCBsb25nLCB1bG9uZykKKworI2lmICFkZWZpbmVkKEJPT1NUX05PX0xPTkdfTE9ORykKKyAgICBOVU1FUklDX1RFU1RfTk9fTElNSVRTKG5kbmJvb3N0Ojpsb25nX2xvbmdfdHlwZSwgbG9uZ19sb25nKQorICAgIE5VTUVSSUNfVEVTVF9OT19MSU1JVFMobmRuYm9vc3Q6OnVsb25nX2xvbmdfdHlwZSwgdWxvbmdfbG9uZykKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCT09TVF9IQVNfSU5UMTI4KQorICAgIE5VTUVSSUNfVEVTVF9OT19MSU1JVFMobmRuYm9vc3Q6OmludDEyOF90eXBlLCBpbnQxMjgpCisgICAgTlVNRVJJQ19URVNUX05PX0xJTUlUUyhuZG5ib29zdDo6dWludDEyOF90eXBlLCB1aW50MTI4KQorI2VuZGlmCisKKyAgICBOVU1FUklDX1RFU1QoZmxvYXQsIGZsb2F0KQorICAgIE5VTUVSSUNfVEVTVChkb3VibGUsIGRvdWJsZSkKKworICAgIE5VTUVSSUNfVEVTVChzdGQ6OnNpemVfdCwgc2l6ZV90KQorICAgIE5VTUVSSUNfVEVTVChzdGQ6OnB0cmRpZmZfdCwgcHRyZGlmZl90KQorCisgICAgYm9vbF90ZXN0KCk7CisKKyAgICByZXR1cm4gbmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKK30KKworI2lmIGRlZmluZWQoQk9PU1RfTVNWQykKKyNwcmFnbWEgd2FybmluZyhwb3ApCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9wb2ludGVyX3Rlc3QuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX3BvaW50ZXJfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcyMDY5NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9wb2ludGVyX3Rlc3QuY3BwCkBAIC0wLDAgKzEsNDUgQEAKKworLy8gQ29weXJpZ2h0IDIwMDUtMjAwOSBEYW5pZWwgSmFtZXMuCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisvLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworI2luY2x1ZGUgIi4vY29uZmlnLmhwcCIKKworI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9TVERfSU5DTFVERVMKKyMgIGluY2x1ZGUgPGZ1bmN0aW9uYWw+CisjZWxzZQorIyAgaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KKyNlbmRpZgorCisjaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgorI2luY2x1ZGUgPGJvb3N0L2xpbWl0cy5ocHA+CisjaW5jbHVkZSAiLi9jb21waWxlX3RpbWUuaHBwIgorCit2b2lkIHBvaW50ZXJfdGVzdHMoKQoreworICAgIGNvbXBpbGVfdGltZV90ZXN0cygoaW50KiopIDApOworICAgIGNvbXBpbGVfdGltZV90ZXN0cygodm9pZCoqKSAwKTsKKworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8aW50Kj4geDE7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxpbnQqPiB4MjsKKworICAgIGludCBpbnQxOworICAgIGludCBpbnQyOworCisgICAgQk9PU1RfVEVTVCh4MSgwKSA9PSB4MigwKSk7CisgICAgQk9PU1RfVEVTVCh4MSgmaW50MSkgPT0geDIoJmludDEpKTsKKyAgICBCT09TVF9URVNUKHgxKCZpbnQyKSA9PSB4MigmaW50MikpOworI2lmIGRlZmluZWQoQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMpCisgICAgQk9PU1RfVEVTVCh4MSgmaW50MSkgPT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZSgmaW50MSkpOworICAgIEJPT1NUX1RFU1QoeDEoJmludDIpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUoJmludDIpKTsKKworICAgIC8vIFRoaXMgaXNuJ3Qgc3BlY2lmaWVkIGluIFBldGVyJ3MgcHJvcG9zYWw6CisgICAgQk9PU1RfVEVTVCh4MSgwKSA9PSAwKTsKKyNlbmRpZgorfQorCitpbnQgbWFpbigpCit7CisgICAgcG9pbnRlcl90ZXN0cygpOworICAgIHJldHVybiBuZG5ib29zdDo6cmVwb3J0X2Vycm9ycygpOworfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX3JhbmdlX3Rlc3QuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX3JhbmdlX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwOTIzOWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfcmFuZ2VfdGVzdC5jcHAKQEAgLTAsMCArMSw4NSBAQAorCisvLyBDb3B5cmlnaHQgMjAwNS0yMDA5IERhbmllbCBKYW1lcy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisjaW5jbHVkZSAiLi9jb25maWcuaHBwIgorCisjaWYgIWRlZmluZWQoQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMpCisKK2ludCBtYWluKCkge30KKworI2Vsc2UKKworI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9TVERfSU5DTFVERVMKKyMgIGluY2x1ZGUgPGZ1bmN0aW9uYWw+CisjZWxzZQorIyAgaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KKyNlbmRpZgorCisjaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgorI2luY2x1ZGUgPGJvb3N0L2xpbWl0cy5ocHA+CisjaW5jbHVkZSA8dmVjdG9yPgorCit2b2lkIGhhc2hfcmFuZ2VfdGVzdHMoKQoreworICAgIHN0ZDo6dmVjdG9yPGludD4gZW1wdHksIHZhbHVlczEsIHZhbHVlczIsIHZhbHVlczMsIHZhbHVlczQsIHZhbHVlczU7CisgICAgdmFsdWVzMS5wdXNoX2JhY2soMCk7CisgICAgdmFsdWVzMi5wdXNoX2JhY2soMTApOworICAgIHZhbHVlczMucHVzaF9iYWNrKDEwKTsKKyAgICB2YWx1ZXMzLnB1c2hfYmFjaygyMCk7CisgICAgdmFsdWVzNC5wdXNoX2JhY2soMTUpOworICAgIHZhbHVlczQucHVzaF9iYWNrKDc1KTsKKyAgICB2YWx1ZXM1LnB1c2hfYmFjaygxMCk7CisgICAgdmFsdWVzNS5wdXNoX2JhY2soMjApOworICAgIHZhbHVlczUucHVzaF9iYWNrKDE1KTsKKyAgICB2YWx1ZXM1LnB1c2hfYmFjayg3NSk7CisgICAgdmFsdWVzNS5wdXNoX2JhY2soMTApOworICAgIHZhbHVlczUucHVzaF9iYWNrKDIwKTsKKworICAgIHN0ZDo6dmVjdG9yPGludD4geDsKKworICAgIHN0ZDo6c2l6ZV90IHhfc2VlZCA9IDA7CisgICAgQk9PU1RfVEVTVCh4X3NlZWQgPT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZSh4LmJlZ2luKCksIHguZW5kKCkpKTsKKworICAgIEJPT1NUX1RFU1QoQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZShlbXB0eS5iZWdpbigpLCBlbXB0eS5lbmQoKSkKKyAgICAgICAgPT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZSh4LmJlZ2luKCksIHguZW5kKCkpKTsKKyAgICBCT09TVF9URVNUKEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UoZW1wdHkuYmVnaW4oKSwgZW1wdHkuZW5kKCkpCisgICAgICAgICE9IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UodmFsdWVzMS5iZWdpbigpLCB2YWx1ZXMxLmVuZCgpKSk7CisKKyAgICB4LnB1c2hfYmFjaygxMCk7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9jb21iaW5lKHhfc2VlZCwgMTApOworICAgIEJPT1NUX1RFU1QoeF9zZWVkID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UoeC5iZWdpbigpLCB4LmVuZCgpKSk7CisKKyAgICBCT09TVF9URVNUKEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UoZW1wdHkuYmVnaW4oKSwgZW1wdHkuZW5kKCkpCisgICAgICAgICE9IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UoeC5iZWdpbigpLCB4LmVuZCgpKSk7CisgICAgQk9PU1RfVEVTVChCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKHZhbHVlczIuYmVnaW4oKSwgdmFsdWVzMi5lbmQoKSkKKyAgICAgICAgPT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZSh4LmJlZ2luKCksIHguZW5kKCkpKTsKKworICAgIHgucHVzaF9iYWNrKDIwKTsKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX2NvbWJpbmUoeF9zZWVkLCAyMCk7CisgICAgQk9PU1RfVEVTVCh4X3NlZWQgPT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZSh4LmJlZ2luKCksIHguZW5kKCkpKTsKKworICAgIEJPT1NUX1RFU1QoQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZShlbXB0eS5iZWdpbigpLCBlbXB0eS5lbmQoKSkKKyAgICAgICAgIT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZSh4LmJlZ2luKCksIHguZW5kKCkpKTsKKyAgICBCT09TVF9URVNUKEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UodmFsdWVzMi5iZWdpbigpLCB2YWx1ZXMyLmVuZCgpKQorICAgICAgICAhPSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKHguYmVnaW4oKSwgeC5lbmQoKSkpOworICAgIEJPT1NUX1RFU1QoQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZSh2YWx1ZXMzLmJlZ2luKCksIHZhbHVlczMuZW5kKCkpCisgICAgICAgID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UoeC5iZWdpbigpLCB4LmVuZCgpKSk7CisKKyAgICBzdGQ6OnNpemVfdCBzZWVkID0KKyAgICAgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZSh2YWx1ZXMzLmJlZ2luKCksIHZhbHVlczMuZW5kKCkpOworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2Uoc2VlZCwgdmFsdWVzNC5iZWdpbigpLCB2YWx1ZXM0LmVuZCgpKTsKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKHNlZWQsIHguYmVnaW4oKSwgeC5lbmQoKSk7CisgICAgQk9PU1RfVEVTVChzZWVkID09CisgICAgICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UodmFsdWVzNS5iZWdpbigpLCB2YWx1ZXM1LmVuZCgpKSk7Cit9CisKK2ludCBtYWluKCkKK3sKKyAgICBoYXNoX3JhbmdlX3Rlc3RzKCk7CisKKyAgICByZXR1cm4gbmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKK30KKworI2VuZGlmIC8vIFRFU1RfRVhURVNOSU9OUwpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX3NlcXVlbmNlX3Rlc3QuaHBwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX3NlcXVlbmNlX3Rlc3QuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwODQ2YjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfc2VxdWVuY2VfdGVzdC5ocHAKQEAgLTAsMCArMSw3NiBAQAorCisvLyBDb3B5cmlnaHQgMjAwNS0yMDA5IERhbmllbCBKYW1lcy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisjaWYgIWRlZmluZWQoQ09OVEFJTkVSX1RZUEUpCisjZXJyb3IgIkNPTlRBSU5FUl9UWVBFIG5vdCBkZWZpbmVkIgorI2Vsc2UKKworI2luY2x1ZGUgPGJvb3N0L3ByZXByb2Nlc3Nvci9jYXQuaHBwPgorCisjaWYgZGVmaW5lZChCT09TVF9NU1ZDKQorI3ByYWdtYSB3YXJuaW5nKHB1c2gpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0MjQ1KSAvLyBzaWduZWQvdW5zaWduZWQgbWlzbWF0Y2gKKyNlbmRpZgorCituYW1lc3BhY2UgQk9PU1RfUFBfQ0FUKENPTlRBSU5FUl9UWVBFLCBfdGVzdHMpCit7CisgICAgdGVtcGxhdGUgPGNsYXNzIFQ+CisgICAgdm9pZCBpbnRlZ2VyX3Rlc3RzKFQqID0gMCkKKyAgICB7CisgICAgICAgIGNvbnN0IGludCBudW1iZXJfb2ZfY29udGFpbmVycyA9IDExOworICAgICAgICBUIGNvbnRhaW5lcnNbbnVtYmVyX29mX2NvbnRhaW5lcnNdOworCisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCA1OyArK2kpIHsKKyAgICAgICAgICAgIGZvcihpbnQgaiA9IDA7IGogPCBpOyArK2opCisgICAgICAgICAgICAgICAgY29udGFpbmVyc1tpXS5wdXNoX2JhY2soMCk7CisgICAgICAgIH0KKworICAgICAgICBjb250YWluZXJzWzVdLnB1c2hfYmFjaygxKTsKKyAgICAgICAgY29udGFpbmVyc1s2XS5wdXNoX2JhY2soMSk7CisgICAgICAgIGNvbnRhaW5lcnNbNl0ucHVzaF9iYWNrKDEpOworICAgICAgICBjb250YWluZXJzWzddLnB1c2hfYmFjaygtMSk7CisgICAgICAgIGNvbnRhaW5lcnNbOF0ucHVzaF9iYWNrKC0xKTsKKyAgICAgICAgY29udGFpbmVyc1s4XS5wdXNoX2JhY2soLTEpOworICAgICAgICBjb250YWluZXJzWzldLnB1c2hfYmFjaygxKTsKKyAgICAgICAgY29udGFpbmVyc1s5XS5wdXNoX2JhY2soLTEpOworICAgICAgICBjb250YWluZXJzWzEwXS5wdXNoX2JhY2soLTEpOworICAgICAgICBjb250YWluZXJzWzEwXS5wdXNoX2JhY2soMSk7CisKKyAgICAgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxUPiBoYXNoZXI7CisKKyAgICAgICAgZm9yKGludCBpMiA9IDA7IGkyIDwgbnVtYmVyX29mX2NvbnRhaW5lcnM7ICsraTIpIHsKKyAgICAgICAgICAgIEJPT1NUX1RFU1QoaGFzaGVyKGNvbnRhaW5lcnNbaTJdKSA9PSBoYXNoZXIoY29udGFpbmVyc1tpMl0pKTsKKworICAgICAgICAgICAgQk9PU1RfVEVTVChoYXNoZXIoY29udGFpbmVyc1tpMl0pID09CisgICAgICAgICAgICAgICAgICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUoY29udGFpbmVyc1tpMl0pKTsKKworICAgICAgICAgICAgQk9PU1RfVEVTVChoYXNoZXIoY29udGFpbmVyc1tpMl0pCisgICAgICAgICAgICAgICAgICAgID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJzW2kyXS5iZWdpbigpLCBjb250YWluZXJzW2kyXS5lbmQoKSkpOworCisgICAgICAgICAgICBmb3IoaW50IGoyID0gaTIgKyAxOyBqMiA8IG51bWJlcl9vZl9jb250YWluZXJzOyArK2oyKSB7CisgICAgICAgICAgICAgICAgQk9PU1RfVEVTVCgKKyAgICAgICAgICAgICAgICAgICAgICAgIChjb250YWluZXJzW2kyXSA9PSBjb250YWluZXJzW2oyXSkgPT0KKyAgICAgICAgICAgICAgICAgICAgICAgIChoYXNoZXIoY29udGFpbmVyc1tpMl0pID09IGhhc2hlcihjb250YWluZXJzW2oyXSkpCisgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBCT09TVF9QUF9DQVQoQ09OVEFJTkVSX1RZUEUsIF9oYXNoX2ludGVnZXJfdGVzdHMoKSkKKyAgICB7CisgICAgICAgIGludGVnZXJfdGVzdHMoKENPTlRBSU5FUl9UWVBFPGNoYXI+KikgMCk7CisgICAgICAgIGludGVnZXJfdGVzdHMoKENPTlRBSU5FUl9UWVBFPGludD4qKSAwKTsKKyAgICAgICAgaW50ZWdlcl90ZXN0cygoQ09OVEFJTkVSX1RZUEU8dW5zaWduZWQgbG9uZz4qKSAwKTsKKyAgICAgICAgaW50ZWdlcl90ZXN0cygoQ09OVEFJTkVSX1RZUEU8ZG91YmxlPiopIDApOworICAgIH0KK30KKworI2lmIGRlZmluZWQoQk9PU1RfTVNWQykKKyNwcmFnbWEgd2FybmluZyhwb3ApCisjZW5kaWYKKworI3VuZGVmIENPTlRBSU5FUl9UWVBFCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9zZXRfdGVzdC5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfc2V0X3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNDRlOTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfc2V0X3Rlc3QuY3BwCkBAIC0wLDAgKzEsNDAgQEAKKworLy8gQ29weXJpZ2h0IDIwMDUtMjAwOSBEYW5pZWwgSmFtZXMuCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisvLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworI2luY2x1ZGUgIi4vY29uZmlnLmhwcCIKKworI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TCisjICBpZmRlZiBCT09TVF9IQVNIX1RFU1RfU1REX0lOQ0xVREVTCisjICAgIGluY2x1ZGUgPGZ1bmN0aW9uYWw+CisjICBlbHNlCisjICAgIGluY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC5ocHA+CisjICBlbmRpZgorI2VuZGlmCisKKyNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+CisKKyNpZmRlZiBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUworCisjaW5jbHVkZSA8c2V0PgorCit1c2luZyBzdGQ6OnNldDsKKyNkZWZpbmUgQ09OVEFJTkVSX1RZUEUgc2V0CisjaW5jbHVkZSAiLi9oYXNoX3NldF90ZXN0LmhwcCIKKwordXNpbmcgc3RkOjptdWx0aXNldDsKKyNkZWZpbmUgQ09OVEFJTkVSX1RZUEUgbXVsdGlzZXQKKyNpbmNsdWRlICIuL2hhc2hfc2V0X3Rlc3QuaHBwIgorCisjZW5kaWYKKworaW50IG1haW4oKQoreworI2lmZGVmIEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TCisgICAgc2V0X3Rlc3RzOjpzZXRfaGFzaF9pbnRlZ2VyX3Rlc3RzKCk7CisgICAgbXVsdGlzZXRfdGVzdHM6Om11bHRpc2V0X2hhc2hfaW50ZWdlcl90ZXN0cygpOworI2VuZGlmCisKKyAgICByZXR1cm4gbmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9zZXRfdGVzdC5ocHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfc2V0X3Rlc3QuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZDQ5MDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfc2V0X3Rlc3QuaHBwCkBAIC0wLDAgKzEsNzkgQEAKKworLy8gQ29weXJpZ2h0IDIwMDUtMjAwOSBEYW5pZWwgSmFtZXMuCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisvLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworI2lmICFkZWZpbmVkKENPTlRBSU5FUl9UWVBFKQorI2Vycm9yICJDT05UQUlORVJfVFlQRSBub3QgZGVmaW5lZCIKKyNlbHNlCisKKyNpbmNsdWRlIDxib29zdC9wcmVwcm9jZXNzb3IvY2F0LmhwcD4KKworI2lmIGRlZmluZWQoQk9PU1RfTVNWQykKKyNwcmFnbWEgd2FybmluZyhwdXNoKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDI0NSkgLy8gc2lnbmVkL3Vuc2lnbmVkIG1pc21hdGNoCisjZW5kaWYKKworbmFtZXNwYWNlIEJPT1NUX1BQX0NBVChDT05UQUlORVJfVFlQRSwgX3Rlc3RzKQoreworICAgIHRlbXBsYXRlIDxjbGFzcyBUPgorICAgIHZvaWQgaW50ZWdlcl90ZXN0cyhUKiA9IDApCisgICAgeworICAgICAgICBjb25zdCBpbnQgbnVtYmVyX29mX2NvbnRhaW5lcnMgPSAxMjsKKyAgICAgICAgVCBjb250YWluZXJzW251bWJlcl9vZl9jb250YWluZXJzXTsKKworICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgNTsgKytpKSB7CisgICAgICAgICAgICBmb3IoaW50IGogPSAwOyBqIDwgaTsgKytqKQorICAgICAgICAgICAgICAgIGNvbnRhaW5lcnNbaV0uaW5zZXJ0KDApOworICAgICAgICB9CisKKyAgICAgICAgY29udGFpbmVyc1s2XS5pbnNlcnQoMSk7CisgICAgICAgIGNvbnRhaW5lcnNbN10uaW5zZXJ0KDEpOworICAgICAgICBjb250YWluZXJzWzddLmluc2VydCgxKTsKKyAgICAgICAgY29udGFpbmVyc1s4XS5pbnNlcnQoLTEpOworICAgICAgICBjb250YWluZXJzWzldLmluc2VydCgtMSk7CisgICAgICAgIGNvbnRhaW5lcnNbOV0uaW5zZXJ0KC0xKTsKKyAgICAgICAgY29udGFpbmVyc1sxMF0uaW5zZXJ0KC0xKTsKKyAgICAgICAgY29udGFpbmVyc1sxMF0uaW5zZXJ0KDEpOworICAgICAgICBjb250YWluZXJzWzExXS5pbnNlcnQoMSk7CisgICAgICAgIGNvbnRhaW5lcnNbMTFdLmluc2VydCgyKTsKKyAgICAgICAgY29udGFpbmVyc1sxMV0uaW5zZXJ0KDMpOworICAgICAgICBjb250YWluZXJzWzExXS5pbnNlcnQoNCk7CisgICAgICAgIGNvbnRhaW5lcnNbMTFdLmluc2VydCg1KTsKKworICAgICAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPFQ+IGhhc2hlcjsKKworICAgICAgICBmb3IoaW50IGkyID0gMDsgaTIgPCBudW1iZXJfb2ZfY29udGFpbmVyczsgKytpMikgeworICAgICAgICAgICAgQk9PU1RfVEVTVChoYXNoZXIoY29udGFpbmVyc1tpMl0pID09IGhhc2hlcihjb250YWluZXJzW2kyXSkpOworCisgICAgICAgICAgICBCT09TVF9URVNUKGhhc2hlcihjb250YWluZXJzW2kyXSkgPT0KKyAgICAgICAgICAgICAgICAgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZShjb250YWluZXJzW2kyXSkpOworCisgICAgICAgICAgICBCT09TVF9URVNUKGhhc2hlcihjb250YWluZXJzW2kyXSkKKyAgICAgICAgICAgICAgICAgICAgPT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF9yYW5nZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcnNbaTJdLmJlZ2luKCksIGNvbnRhaW5lcnNbaTJdLmVuZCgpKSk7CisKKyAgICAgICAgICAgIGZvcihpbnQgajIgPSBpMiArIDE7IGoyIDwgbnVtYmVyX29mX2NvbnRhaW5lcnM7ICsrajIpIHsKKyAgICAgICAgICAgICAgICBCT09TVF9URVNUKAorICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnRhaW5lcnNbaTJdID09IGNvbnRhaW5lcnNbajJdKSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgKGhhc2hlcihjb250YWluZXJzW2kyXSkgPT0gaGFzaGVyKGNvbnRhaW5lcnNbajJdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIEJPT1NUX1BQX0NBVChDT05UQUlORVJfVFlQRSwgX2hhc2hfaW50ZWdlcl90ZXN0cygpKQorICAgIHsKKyAgICAgICAgaW50ZWdlcl90ZXN0cygoQ09OVEFJTkVSX1RZUEU8Y2hhcj4qKSAwKTsKKyAgICAgICAgaW50ZWdlcl90ZXN0cygoQ09OVEFJTkVSX1RZUEU8aW50PiopIDApOworICAgICAgICBpbnRlZ2VyX3Rlc3RzKChDT05UQUlORVJfVFlQRTx1bnNpZ25lZCBsb25nPiopIDApOworICAgICAgICBpbnRlZ2VyX3Rlc3RzKChDT05UQUlORVJfVFlQRTxkb3VibGU+KikgMCk7CisgICAgfQorfQorCisjaWYgZGVmaW5lZChCT09TVF9NU1ZDKQorI3ByYWdtYSB3YXJuaW5nKHBvcCkKKyNlbmRpZgorCisjdW5kZWYgQ09OVEFJTkVSX1RZUEUKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX3N0ZF9hcnJheV90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9zdGRfYXJyYXlfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFhMjhmZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9zdGRfYXJyYXlfdGVzdC5jcHAKQEAgLTAsMCArMSwxMDMgQEAKKworLy8gQ29weXJpZ2h0IDIwMTIgRGFuaWVsIEphbWVzLgorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKyNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCisKKyNpZmRlZiBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUworIyAgaWZkZWYgQk9PU1RfSEFTSF9URVNUX1NURF9JTkNMVURFUworIyAgICBpbmNsdWRlIDxmdW5jdGlvbmFsPgorIyAgZWxzZQorIyAgICBpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgorIyAgZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8Ym9vc3QvY29uZmlnLmhwcD4KKyNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+CisKKyNpZiBkZWZpbmVkKEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TKSAmJiAhZGVmaW5lZChCT09TVF9OT19DWFgxMV9IRFJfQVJSQVkpCisjZGVmaW5lIFRFU1RfQVJSQVkKKyNpbmNsdWRlIDxhcnJheT4KKyNpbmNsdWRlIDx2ZWN0b3I+CisjZW5kaWYKKworI2lmZGVmIFRFU1RfQVJSQVkKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit2b2lkIGFycmF5X3Rlc3RzKFQgY29uc3QmIHYpIHsKKyAgICBuZG5ib29zdDo6aGFzaDx0eXBlbmFtZSBUOjp2YWx1ZV90eXBlPiBoZjsKKyAgICBmb3IodHlwZW5hbWUgVDo6Y29uc3RfaXRlcmF0b3IgaSA9IHYuYmVnaW4oKTsgaSAhPSB2LmVuZCgpOyArK2kpIHsKKyAgICAgICAgZm9yKHR5cGVuYW1lIFQ6OmNvbnN0X2l0ZXJhdG9yIGogPSB2LmJlZ2luKCk7IGogIT0gdi5lbmQoKTsgKytqKSB7CisgICAgICAgICAgICBpZiAoaSAhPSBqKQorICAgICAgICAgICAgICAgIEJPT1NUX1RFU1QoaGYoKmkpICE9IGhmKCpqKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgQk9PU1RfVEVTVChoZigqaSkgPT0gaGYoKmopKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBlbXB0eV9hcnJheV90ZXN0KCkgeworLyoKKyAgICBuZG5ib29zdDo6aGFzaDxzdGQ6OmFycmF5PGludCwgMD4gPiBlbXB0eV9hcnJheV9oYXNoOworICAgIHN0ZDo6YXJyYXk8aW50LCAwPiBlbXB0eV9hcnJheTsKKyAgICBCT09TVF9URVNUKGVtcHR5X2FycmF5X2hhc2goZW1wdHlfYXJyYXkpID09IG5kbmJvb3N0OjpoYXNoX3ZhbHVlKGVtcHR5X2FycmF5KSk7CisqLworfQorCit2b2lkIGludF8xX2FycmF5X3Rlc3QoKQoreworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6YXJyYXk8aW50LCAxPiA+IGFycmF5czsKKyAgICBzdGQ6OmFycmF5PGludCwgMT4gdmFsOworICAgIHZhbFswXSA9IDA7CisgICAgYXJyYXlzLnB1c2hfYmFjayh2YWwpOworICAgIHZhbFswXSA9IDE7CisgICAgYXJyYXlzLnB1c2hfYmFjayh2YWwpOworICAgIHZhbFswXSA9IDI7CisgICAgYXJyYXlzLnB1c2hfYmFjayh2YWwpOworICAgIGFycmF5X3Rlc3RzKGFycmF5cyk7Cit9CisKK3ZvaWQgc3RyaW5nXzFfYXJyYXlfdGVzdCgpCit7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjphcnJheTxzdGQ6OnN0cmluZywgMT4gPiBhcnJheXM7CisgICAgc3RkOjphcnJheTxzdGQ6OnN0cmluZywgMT4gdmFsOworICAgIGFycmF5cy5wdXNoX2JhY2sodmFsKTsKKyAgICB2YWxbMF0gPSAib25lIjsKKyAgICBhcnJheXMucHVzaF9iYWNrKHZhbCk7CisgICAgdmFsWzBdID0gInR3byI7CisgICAgYXJyYXlzLnB1c2hfYmFjayh2YWwpOworICAgIGFycmF5X3Rlc3RzKGFycmF5cyk7Cit9CisKK3ZvaWQgc3RyaW5nXzNfYXJyYXlfdGVzdCgpCit7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjphcnJheTxzdGQ6OnN0cmluZywzID4gPiBhcnJheXM7CisgICAgc3RkOjphcnJheTxzdGQ6OnN0cmluZywgMz4gdmFsOworICAgIGFycmF5cy5wdXNoX2JhY2sodmFsKTsKKyAgICB2YWxbMF0gPSAib25lIjsKKyAgICBhcnJheXMucHVzaF9iYWNrKHZhbCk7CisgICAgdmFsWzBdID0gIiI7IHZhbFsxXSA9ICJvbmUiOyB2YWxbMl0gPSAiIjsKKyAgICBhcnJheXMucHVzaF9iYWNrKHZhbCk7CisgICAgdmFsWzBdID0gIiI7IHZhbFsxXSA9ICIiOyB2YWxbMl0gPSAib25lIjsKKyAgICBhcnJheXMucHVzaF9iYWNrKHZhbCk7CisgICAgdmFsWzBdID0gIm9uZSI7IHZhbFsxXSA9ICJvbmUiOyB2YWxbMl0gPSAib25lIjsKKyAgICBhcnJheXMucHVzaF9iYWNrKHZhbCk7CisgICAgdmFsWzBdID0gIm9uZSI7IHZhbFsxXSA9ICJ0d28iOyB2YWxbMl0gPSAidGhyZWUiOworICAgIGFycmF5cy5wdXNoX2JhY2sodmFsKTsKKyAgICBhcnJheV90ZXN0cyhhcnJheXMpOworfQorCisjZW5kaWYgLy8gVEVTVF9BUlJBWQorCitpbnQgbWFpbigpCit7CisjaWZkZWYgVEVTVF9BUlJBWQorICAgIGVtcHR5X2FycmF5X3Rlc3QoKTsKKyAgICBpbnRfMV9hcnJheV90ZXN0KCk7CisgICAgc3RyaW5nXzFfYXJyYXlfdGVzdCgpOworICAgIHN0cmluZ18zX2FycmF5X3Rlc3QoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Cit9CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfc3RkX3NtYXJ0X3B0cl90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9zdGRfc21hcnRfcHRyX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzOWM3MTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfc3RkX3NtYXJ0X3B0cl90ZXN0LmNwcApAQCAtMCwwICsxLDgwIEBACisKKy8vIENvcHlyaWdodCAyMDEyIERhbmllbCBKYW1lcy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisjaW5jbHVkZSAiLi9jb25maWcuaHBwIgorCisjaWZkZWYgQk9PU1RfSEFTSF9URVNUX1NURF9JTkNMVURFUworIyAgaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNlbHNlCisjICBpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgorI2VuZGlmCisKKyNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+CisjaW5jbHVkZSAiLi9jb21waWxlX3RpbWUuaHBwIgorCisjaWYgZGVmaW5lZChCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUykgJiYgIWRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfU01BUlRfUFRSKQorI2RlZmluZSBURVNUX1NNQVJUX1BUUlMKKyNpbmNsdWRlIDxtZW1vcnk+CisjZW5kaWYKKworI2lmZGVmIFRFU1RfU01BUlRfUFRSUworCit2b2lkIHNoYXJlZF9wdHJfdGVzdHMoKQoreworICAgIHN0ZDo6c2hhcmVkX3B0cjxpbnQ+IHg7CisgICAgY29tcGlsZV90aW1lX3Rlc3RzKCZ4KTsKKworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8c3RkOjpzaGFyZWRfcHRyPGludD4gPiB4MTsKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPHN0ZDo6c2hhcmVkX3B0cjxpbnQ+ID4geDI7CisKKyAgICBzdGQ6OnNoYXJlZF9wdHI8aW50PiBwdHIxKG5ldyBpbnQoMTApKTsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8aW50PiBwdHIyOworCisgICAgQk9PU1RfVEVTVCh4MSh4KSA9PSB4MihwdHIyKSk7CisgICAgQk9PU1RfVEVTVCh4MSh4KSAhPSB4MihwdHIxKSk7CisgICAgcHRyMi5yZXNldChuZXcgaW50KDEwKSk7CisgICAgQk9PU1RfVEVTVCh4MShwdHIxKSA9PSB4MihwdHIxKSk7CisgICAgQk9PU1RfVEVTVCh4MShwdHIxKSAhPSB4MihwdHIyKSk7CisgICAgcHRyMiA9IHB0cjE7CisgICAgQk9PU1RfVEVTVCh4MShwdHIxKSA9PSB4MihwdHIyKSk7CisjaWYgZGVmaW5lZChCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUykKKyAgICBCT09TVF9URVNUKHgxKHgpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUoeCkpOworICAgIEJPT1NUX1RFU1QoeDEocHRyMSkgPT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZShwdHIyKSk7CisjZW5kaWYKK30KKwordm9pZCB1bmlxdWVfcHRyX3Rlc3RzKCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8aW50PiB4OworICAgIGNvbXBpbGVfdGltZV90ZXN0cygmeCk7CisKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPHN0ZDo6dW5pcXVlX3B0cjxpbnQ+ID4geDE7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxzdGQ6OnVuaXF1ZV9wdHI8aW50PiA+IHgyOworCisgICAgc3RkOjp1bmlxdWVfcHRyPGludD4gcHRyMShuZXcgaW50KDEwKSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPGludD4gcHRyMjsKKworICAgIEJPT1NUX1RFU1QoeDEoeCkgPT0geDIocHRyMikpOworICAgIEJPT1NUX1RFU1QoeDEoeCkgIT0geDIocHRyMSkpOworICAgIHB0cjIucmVzZXQobmV3IGludCgxMCkpOworICAgIEJPT1NUX1RFU1QoeDEocHRyMSkgPT0geDIocHRyMSkpOworICAgIEJPT1NUX1RFU1QoeDEocHRyMSkgIT0geDIocHRyMikpOworCisjaWYgZGVmaW5lZChCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUykKKyAgICBCT09TVF9URVNUKHgxKHgpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUoeCkpOworI2VuZGlmCit9CisKKyNlbmRpZgorCitpbnQgbWFpbigpCit7CisjaWZkZWYgVEVTVF9TTUFSVF9QVFJTCisgICAgc2hhcmVkX3B0cl90ZXN0cygpOworICAgIHVuaXF1ZV9wdHJfdGVzdHMoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Cit9CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfc3RkX3R1cGxlX3Rlc3QuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX3N0ZF90dXBsZV90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTUzNDZhCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX3N0ZF90dXBsZV90ZXN0LmNwcApAQCAtMCwwICsxLDc3IEBACisKKy8vIENvcHlyaWdodCAyMDEyIERhbmllbCBKYW1lcy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisjaW5jbHVkZSAiLi9jb25maWcuaHBwIgorCisjaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKKyMgIGlmZGVmIEJPT1NUX0hBU0hfVEVTVF9TVERfSU5DTFVERVMKKyMgICAgaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyMgIGVsc2UKKyMgICAgaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KKyMgIGVuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgPGJvb3N0L2NvbmZpZy5ocHA+CisjaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgorCisjaWYgZGVmaW5lZChCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUykgJiYgIWRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfSERSX1RVUExFKQorI2RlZmluZSBURVNUX1RVUExFCisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8dmVjdG9yPgorI2VuZGlmCisKKyNpZmRlZiBURVNUX1RVUExFCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordm9pZCB0dXBsZV90ZXN0cyhUIGNvbnN0JiB2KSB7CisgICAgbmRuYm9vc3Q6Omhhc2g8dHlwZW5hbWUgVDo6dmFsdWVfdHlwZT4gaGY7CisgICAgZm9yKHR5cGVuYW1lIFQ6OmNvbnN0X2l0ZXJhdG9yIGkgPSB2LmJlZ2luKCk7IGkgIT0gdi5lbmQoKTsgKytpKSB7CisgICAgICAgIGZvcih0eXBlbmFtZSBUOjpjb25zdF9pdGVyYXRvciBqID0gdi5iZWdpbigpOyBqICE9IHYuZW5kKCk7ICsraikgeworICAgICAgICAgICAgaWYgKGkgIT0gaikKKyAgICAgICAgICAgICAgICBCT09TVF9URVNUKGhmKCppKSAhPSBoZigqaikpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIEJPT1NUX1RFU1QoaGYoKmkpID09IGhmKCpqKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgZW1wdHlfdHVwbGVfdGVzdCgpIHsKKyAgICBuZG5ib29zdDo6aGFzaDxzdGQ6OnR1cGxlPD4gPiBlbXB0eV90dXBsZV9oYXNoOworICAgIHN0ZDo6dHVwbGU8PiBlbXB0eV90dXBsZTsKKyAgICBCT09TVF9URVNUKGVtcHR5X3R1cGxlX2hhc2goZW1wdHlfdHVwbGUpID09IG5kbmJvb3N0OjpoYXNoX3ZhbHVlKGVtcHR5X3R1cGxlKSk7Cit9CisKK3ZvaWQgaW50X3R1cGxlX3Rlc3QoKSB7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjp0dXBsZTxpbnQ+ID4gaW50X3R1cGxlczsKKyAgICBpbnRfdHVwbGVzLnB1c2hfYmFjayhzdGQ6Om1ha2VfdHVwbGUoMCkpOworICAgIGludF90dXBsZXMucHVzaF9iYWNrKHN0ZDo6bWFrZV90dXBsZSgxKSk7CisgICAgaW50X3R1cGxlcy5wdXNoX2JhY2soc3RkOjptYWtlX3R1cGxlKDIpKTsKKyAgICB0dXBsZV90ZXN0cyhpbnRfdHVwbGVzKTsKK30KKwordm9pZCBpbnRfc3RyaW5nX3R1cGxlX3Rlc3QoKSB7CisgICAgc3RkOjp2ZWN0b3I8c3RkOjp0dXBsZTxpbnQsIHN0ZDo6c3RyaW5nPiA+IGludF9zdHJpbmdfdHVwbGVzOworICAgIGludF9zdHJpbmdfdHVwbGVzLnB1c2hfYmFjayhzdGQ6Om1ha2VfdHVwbGUoMCwgc3RkOjpzdHJpbmcoInplcm8iKSkpOworICAgIGludF9zdHJpbmdfdHVwbGVzLnB1c2hfYmFjayhzdGQ6Om1ha2VfdHVwbGUoMSwgc3RkOjpzdHJpbmcoIm9uZSIpKSk7CisgICAgaW50X3N0cmluZ190dXBsZXMucHVzaF9iYWNrKHN0ZDo6bWFrZV90dXBsZSgyLCBzdGQ6OnN0cmluZygidHdvIikpKTsKKyAgICBpbnRfc3RyaW5nX3R1cGxlcy5wdXNoX2JhY2soc3RkOjptYWtlX3R1cGxlKDAsIHN0ZDo6c3RyaW5nKCJvbmUiKSkpOworICAgIGludF9zdHJpbmdfdHVwbGVzLnB1c2hfYmFjayhzdGQ6Om1ha2VfdHVwbGUoMSwgc3RkOjpzdHJpbmcoInplcm8iKSkpOworICAgIGludF9zdHJpbmdfdHVwbGVzLnB1c2hfYmFjayhzdGQ6Om1ha2VfdHVwbGUoMCwgc3RkOjpzdHJpbmcoIiIpKSk7CisgICAgaW50X3N0cmluZ190dXBsZXMucHVzaF9iYWNrKHN0ZDo6bWFrZV90dXBsZSgxLCBzdGQ6OnN0cmluZygiIikpKTsKKyAgICB0dXBsZV90ZXN0cyhpbnRfc3RyaW5nX3R1cGxlcyk7Cit9CisKKyNlbmRpZiAvLyBURVNUX1RVUExFCisKK2ludCBtYWluKCkKK3sKKyNpZmRlZiBURVNUX1RVUExFCisgICAgZW1wdHlfdHVwbGVfdGVzdCgpOworICAgIGludF90dXBsZV90ZXN0KCk7CisgICAgaW50X3N0cmluZ190dXBsZV90ZXN0KCk7CisjZW5kaWYKKworICAgIHJldHVybiBuZG5ib29zdDo6cmVwb3J0X2Vycm9ycygpOworfQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX3N0cmluZ190ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9zdHJpbmdfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNlNzZhZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF9zdHJpbmdfdGVzdC5jcHAKQEAgLTAsMCArMSw3MyBAQAorCisvLyBDb3B5cmlnaHQgMjAwNS0yMDA5IERhbmllbCBKYW1lcy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisjaW5jbHVkZSAiLi9jb25maWcuaHBwIgorCisjaWZkZWYgQk9PU1RfSEFTSF9URVNUX1NURF9JTkNMVURFUworIyAgaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNlbHNlCisjICBpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgorI2VuZGlmCisKKyNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgIi4vY29tcGlsZV90aW1lLmhwcCIKKwordm9pZCBzdHJpbmdfdGVzdHMoKQoreworICAgIGNvbXBpbGVfdGltZV90ZXN0cygoc3RkOjpzdHJpbmcqKSAwKTsKKworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8c3RkOjpzdHJpbmc+IHgxOworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8c3RkOjpzdHJpbmc+IHgyOworCisgICAgQk9PU1RfVEVTVCh4MSgiSGVsbG8iKSA9PSB4MihzdGQ6OnN0cmluZygiSGVsIikgKyAibG8iKSk7CisgICAgQk9PU1RfVEVTVCh4MSgiIikgPT0geDIoc3RkOjpzdHJpbmcoKSkpOworCisjaWYgZGVmaW5lZChCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUykKKyAgICBzdGQ6OnN0cmluZyB2YWx1ZTE7CisgICAgc3RkOjpzdHJpbmcgdmFsdWUyKCJIZWxsbyIpOworCisgICAgQk9PU1RfVEVTVCh4MSh2YWx1ZTEpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUodmFsdWUxKSk7CisgICAgQk9PU1RfVEVTVCh4MSh2YWx1ZTIpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUodmFsdWUyKSk7CisgICAgQk9PU1RfVEVTVChCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKHZhbHVlMSkgPT0KKyAgICAgICAgICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UodmFsdWUxLmJlZ2luKCksIHZhbHVlMS5lbmQoKSkpOworICAgIEJPT1NUX1RFU1QoQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZSh2YWx1ZTIpID09CisgICAgICAgICAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKHZhbHVlMi5iZWdpbigpLCB2YWx1ZTIuZW5kKCkpKTsKKyNlbmRpZgorfQorCisjaWYgIWRlZmluZWQoQk9PU1RfTk9fU1REX1dTVFJJTkcpCit2b2lkIHdzdHJpbmdfdGVzdHMoKQoreworICAgIGNvbXBpbGVfdGltZV90ZXN0cygoc3RkOjp3c3RyaW5nKikgMCk7CisKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPHN0ZDo6d3N0cmluZz4geDE7CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxzdGQ6OndzdHJpbmc+IHgyOworCisgICAgQk9PU1RfVEVTVCh4MShMIkhlbGxvIikgPT0geDIoc3RkOjp3c3RyaW5nKEwiSGVsIikgKyBMImxvIikpOworICAgIEJPT1NUX1RFU1QoeDEoTCIiKSA9PSB4MihzdGQ6OndzdHJpbmcoKSkpOworCisjaWYgZGVmaW5lZChCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUykKKyAgICBzdGQ6OndzdHJpbmcgdmFsdWUxOworICAgIHN0ZDo6d3N0cmluZyB2YWx1ZTIoTCJIZWxsbyIpOworCisgICAgQk9PU1RfVEVTVCh4MSh2YWx1ZTEpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUodmFsdWUxKSk7CisgICAgQk9PU1RfVEVTVCh4MSh2YWx1ZTIpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUodmFsdWUyKSk7CisgICAgQk9PU1RfVEVTVChCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKHZhbHVlMSkgPT0KKyAgICAgICAgICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfcmFuZ2UodmFsdWUxLmJlZ2luKCksIHZhbHVlMS5lbmQoKSkpOworICAgIEJPT1NUX1RFU1QoQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZSh2YWx1ZTIpID09CisgICAgICAgICAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3JhbmdlKHZhbHVlMi5iZWdpbigpLCB2YWx1ZTIuZW5kKCkpKTsKKyNlbmRpZgorfQorI2VuZGlmCisKK2ludCBtYWluKCkKK3sKKyAgICBzdHJpbmdfdGVzdHMoKTsKKyNpZiAhZGVmaW5lZChCT09TVF9OT19TVERfV1NUUklORykKKyAgICB3c3RyaW5nX3Rlc3RzKCk7CisjZW5kaWYKKyAgICByZXR1cm4gbmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF90eXBlX2luZGV4X3Rlc3QuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX3R5cGVfaW5kZXhfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVmODFhZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF90eXBlX2luZGV4X3Rlc3QuY3BwCkBAIC0wLDAgKzEsNTMgQEAKKworLy8gQ29weXJpZ2h0IDIwMTEgRGFuaWVsIEphbWVzLgorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKyNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCisKKyNpZmRlZiBCT09TVF9IQVNIX1RFU1RfU1REX0lOQ0xVREVTCisjICBpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2Vsc2UKKyMgIGluY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC5ocHA+CisjZW5kaWYKKyNpbmNsdWRlIDxib29zdC9jb25maWcuaHBwPgorI2luY2x1ZGUgPGJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcD4KKworI2lmICFkZWZpbmVkKEJPT1NUX05PX0NYWDExX0hEUl9UWVBFSU5ERVgpCisKKyNpbmNsdWRlIDx0eXBlaW5kZXg+CisKK3ZvaWQgdGVzdF90eXBlX2luZGV4KCkgeworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8c3RkOjp0eXBlX2luZGV4PiBoYXNoZXI7CisKKyNpZiBkZWZpbmVkKEJPT1NUX05PX1RZUEVJRCkKKyAgICBzdGQ6OmNvdXQ8PCJVbmFibGUgdG8gdGVzdCBzdGQ6OnR5cGVfaW5kZXgsIGFzIHR5cGVpZCBpc24ndCBhdmFpbGFibGUiCisgICAgICAgIDw8c3RkOjplbmRsOworI2Vsc2UKKyAgICBzdGQ6OnR5cGVfaW5kZXggaW50X2luZGV4ID0gdHlwZWlkKGludCk7CisgICAgc3RkOjp0eXBlX2luZGV4IGludDJfaW5kZXggPSB0eXBlaWQoaW50KTsKKyAgICBzdGQ6OnR5cGVfaW5kZXggY2hhcl9pbmRleCA9IHR5cGVpZChjaGFyKTsKKyAgICAKKyAgICBCT09TVF9URVNUKGhhc2hlcihpbnRfaW5kZXgpID09IGludF9pbmRleC5oYXNoX2NvZGUoKSk7CisgICAgQk9PU1RfVEVTVChoYXNoZXIoaW50X2luZGV4KSA9PSBpbnQyX2luZGV4Lmhhc2hfY29kZSgpKTsKKyAgICBCT09TVF9URVNUKGhhc2hlcihjaGFyX2luZGV4KSA9PSBjaGFyX2luZGV4Lmhhc2hfY29kZSgpKTsKKyAgICBCT09TVF9URVNUKEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUoaW50X2luZGV4KSA9PSBpbnRfaW5kZXguaGFzaF9jb2RlKCkpOworICAgIEJPT1NUX1RFU1QoQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZShpbnRfaW5kZXgpID09IGludDJfaW5kZXguaGFzaF9jb2RlKCkpOworICAgIEJPT1NUX1RFU1QoQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZShjaGFyX2luZGV4KSA9PSBjaGFyX2luZGV4Lmhhc2hfY29kZSgpKTsKKworICAgIEJPT1NUX1RFU1QoaGFzaGVyKGludF9pbmRleCkgPT0gaGFzaGVyKGludDJfaW5kZXgpKTsKKyAgICBCT09TVF9URVNUKGhhc2hlcihpbnRfaW5kZXgpICE9IGhhc2hlcihjaGFyX2luZGV4KSk7CisjZW5kaWYKK30KKyNlbmRpZgorCitpbnQgbWFpbigpCit7CisjaWYgIWRlZmluZWQoQk9PU1RfTk9fQ1hYMTFfSERSX1RZUEVJTkRFWCkKKyAgICB0ZXN0X3R5cGVfaW5kZXgoKTsKKyNlbHNlCisgICAgc3RkOjpjb3V0PDwiPHR5cGVfaW5kZXg+IG5vdCBhdmFpbGFibGUuIjw8c3RkOjplbmRsOworI2VuZGlmCisKKyAgICByZXR1cm4gbmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF92YWx1ZV9hcnJheV90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaGFzaF92YWx1ZV9hcnJheV90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzc5YWM3Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX3ZhbHVlX2FycmF5X3Rlc3QuY3BwCkBAIC0wLDAgKzEsNjQgQEAKKworLy8gQ29weXJpZ2h0IDIwMDUtMjAwOSBEYW5pZWwgSmFtZXMuCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisvLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworLy8gT24gc29tZSBjb21waWxlcnMgaGFzaF92YWx1ZSBpc24ndCBhdmFpbGFibGUgZm9yIGFycmF5cywgc28gSSB0ZXN0IGl0CisvLyBzZXBhcmF0ZWx5IGZyb20gdGhlIG1haW4gYXJyYXkgdGVzdHMuCisKKyNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCisKKyNpZmRlZiBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUworIyAgaWZkZWYgQk9PU1RfSEFTSF9URVNUX1NURF9JTkNMVURFUworIyAgICBpbmNsdWRlIDxmdW5jdGlvbmFsPgorIyAgZWxzZQorIyAgICBpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgorIyAgZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgorCisjaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKKwordm9pZCBhcnJheV9pbnRfdGVzdCgpCit7CisgICAgY29uc3QgaW50IGFycmF5MVsyNV0gPSB7CisgICAgICAgIDI2LCAtNDMsIDMyLCA2NSwgNDUsCisgICAgICAgIDEyLCA2NywgMzIsIDEyLCAyMywKKyAgICAgICAgMCwgMCwgMCwgMCwgMCwKKyAgICAgICAgOCwgLTEyLCAyMywgNjUsIDQ1LAorICAgICAgICAtMSwgOTMsIC01NCwgOTg3LCAzCisgICAgfTsKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPGludFsyNV0+IGhhc2hlcjE7CisKKyAgICBpbnQgYXJyYXkyWzFdID0gezN9OworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8aW50WzFdPiBoYXNoZXIyOworCisgICAgaW50IGFycmF5M1syXSA9IHsyLCAzfTsKKyAgICBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPGludFsyXT4gaGFzaGVyMzsKKworICAgIEJPT1NUX1RFU1QoaGFzaGVyMShhcnJheTEpID09IEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2hfdmFsdWUoYXJyYXkxKSk7CisgICAgQk9PU1RfVEVTVChoYXNoZXIyKGFycmF5MikgPT0gQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaF92YWx1ZShhcnJheTIpKTsKKyAgICBCT09TVF9URVNUKGhhc2hlcjMoYXJyYXkzKSA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKGFycmF5MykpOworfQorCit2b2lkIHR3b19kaW1lbnNpb25hbF9hcnJheV90ZXN0KCkKK3sKKyAgICBpbnQgYXJyYXlbM11bMl0gPSB7ey01LCA2fSwgezcsIC0zfSwgezI2LCAxfX07CisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxpbnRbM11bMl0+IGhhc2hlcjsKKworICAgIEJPT1NUX1RFU1QoaGFzaGVyKGFycmF5KSA9PSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKGFycmF5KSk7Cit9CisKKyNlbmRpZgorCitpbnQgbWFpbigpCit7CisjaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKKyAgICBhcnJheV9pbnRfdGVzdCgpOworICAgIHR3b19kaW1lbnNpb25hbF9hcnJheV90ZXN0KCk7CisjZW5kaWYKKworICAgIHJldHVybiBuZG5ib29zdDo6cmVwb3J0X2Vycm9ycygpOworfQorCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2hhc2hfdmVjdG9yX3Rlc3QuY3BwIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX3ZlY3Rvcl90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWFiN2ZmCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9oYXNoX3ZlY3Rvcl90ZXN0LmNwcApAQCAtMCwwICsxLDM1IEBACisKKy8vIENvcHlyaWdodCAyMDA1LTIwMDkgRGFuaWVsIEphbWVzLgorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKyNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCisKKyNpZmRlZiBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUworIyAgaWZkZWYgQk9PU1RfSEFTSF9URVNUX1NURF9JTkNMVURFUworIyAgICBpbmNsdWRlIDxmdW5jdGlvbmFsPgorIyAgZWxzZQorIyAgICBpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgorIyAgZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgorCisjaWZkZWYgQk9PU1RfSEFTSF9URVNUX0VYVEVOU0lPTlMKKworI2luY2x1ZGUgPHZlY3Rvcj4KKwordXNpbmcgc3RkOjp2ZWN0b3I7CisjZGVmaW5lIENPTlRBSU5FUl9UWVBFIHZlY3RvcgorI2luY2x1ZGUgIi4vaGFzaF9zZXF1ZW5jZV90ZXN0LmhwcCIKKworI2VuZGlmIC8vIEJPT1NUX0hBU0hfVEVTVF9FWFRFTlNJT05TCisKK2ludCBtYWluKCkKK3sKKyNpZmRlZiBCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUworICAgIHZlY3Rvcl90ZXN0czo6dmVjdG9yX2hhc2hfaW50ZWdlcl90ZXN0cygpOworI2VuZGlmCisKKyAgICByZXR1cm4gbmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvaW1wbGljaXRfdGVzdC5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2ltcGxpY2l0X3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxN2Q4ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2ltcGxpY2l0X3Rlc3QuY3BwCkBAIC0wLDAgKzEsMjEgQEAKKworLy8gQ29weXJpZ2h0IDIwMTAgRGFuaWVsIEphbWVzLgorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKyNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgorCituYW1lc3BhY2UgdGVzdAoreworICAgIHN0cnVjdCBiYXNlIHt9OworICAgIHN0ZDo6c2l6ZV90IGhhc2hfdmFsdWUoYmFzZSBjb25zdCYpIHsgcmV0dXJuIDA7IH0KKyAgICAKKyAgICBzdHJ1Y3QgY29udmVydHMgeyBvcGVyYXRvciBiYXNlKCkgY29uc3QgeyByZXR1cm4gYmFzZSgpOyB9IH07Cit9CisKK2ludCBtYWluKCkgeworICAgIG5kbmJvb3N0OjpoYXNoPHRlc3Q6OmNvbnZlcnRzPiBoYXNoOworICAgIHRlc3Q6OmNvbnZlcnRzIHg7CisgICAgCisgICAgaGFzaCh4KTsKK30KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvbGlua19leHRfdGVzdC5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2xpbmtfZXh0X3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNWFmNTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2xpbmtfZXh0X3Rlc3QuY3BwCkBAIC0wLDAgKzEsMzMgQEAKKworLy8gQ29weXJpZ2h0IDIwMDYtMjAwOSBEYW5pZWwgSmFtZXMuCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisvLyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworI2luY2x1ZGUgIi4vY29uZmlnLmhwcCIKKworI2RlZmluZSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFIG5kbmJvb3N0CisjaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KKyNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+CisjaW5jbHVkZSA8dmVjdG9yPgorCitpbnQgZihzdGQ6OnNpemVfdCBoYXNoMSwgaW50KiB4MSkgeworCisgICAgLy8gQ2hlY2sgdGhhdCBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoPGludCo+IHdvcmtzIGluIGJvdGggZmlsZXMuCisgICAgQk9PU1RfSEFTSF9URVNUX05BTUVTUEFDRTo6aGFzaDxpbnQqPiBwdHJfaGFzaGVyOworICAgIEJPT1NUX1RFU1QoaGFzaDEgPT0gcHRyX2hhc2hlcih4MSkpOworCisjaWYgZGVmaW5lZChCT09TVF9IQVNIX1RFU1RfRVhURU5TSU9OUykKKworICAgIC8vIENoZWNrIHRoYXQgc3RkOjp2ZWN0b3I8c3RkOjpzaXplX3Q+IGlzIGF2YWlhYmxlIGluIHRoaXMgZmlsZS4KKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnNpemVfdD4geDsKKyAgICB4LnB1c2hfYmFjaygqeDEpOworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8c3RkOjp2ZWN0b3I8c3RkOjpzaXplX3Q+ID4gdmVjdG9yX2hhc2hlcjsKKyAgICByZXR1cm4gdmVjdG9yX2hhc2hlcih4KSAhPSBCT09TVF9IQVNIX1RFU1RfTkFNRVNQQUNFOjpoYXNoX3ZhbHVlKHgpOworICAgIAorI2Vsc2UKKworICAgIHJldHVybiAwOworCisjZW5kaWYKK30KKwpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2hhc2gvdGVzdC9saW5rX25vX2V4dF90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvbGlua19ub19leHRfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRlZTZkZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvbGlua19ub19leHRfdGVzdC5jcHAKQEAgLTAsMCArMSwyMCBAQAorCisvLyBDb3B5cmlnaHQgMjAwNS0yMDA5IERhbmllbCBKYW1lcy4KKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorCisjaW5jbHVkZSAiLi9jb25maWcuaHBwIgorCisjZGVmaW5lIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0UgbmRuYm9vc3QKKyNkZWZpbmUgQk9PU1RfSEFTSF9OT19FWFRFTlNJT05TCisjaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9oYXNoLmhwcD4KKyNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+CisKK2V4dGVybiBpbnQgZihzdGQ6OnNpemVfdCwgaW50Kik7CisKK2ludCBtYWluKCkgeworICAgIEJPT1NUX0hBU0hfVEVTVF9OQU1FU1BBQ0U6Omhhc2g8aW50Kj4gcHRyX2hhc2hlcjsKKyAgICBpbnQgeCA9IDU1OworICAgIEJPT1NUX1RFU1QoIWYocHRyX2hhc2hlcigmeCksICZ4KSk7CisgICAgcmV0dXJuIG5kbmJvb3N0OjpyZXBvcnRfZXJyb3JzKCk7Cit9CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2xpbmtfdGVzdC5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2xpbmtfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRhZTI2MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvbGlua190ZXN0LmNwcApAQCAtMCwwICsxLDExIEBACisKKy8vIENvcHlyaWdodCAyMDA1LTIwMDkgRGFuaWVsIEphbWVzLgorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKyNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCisKKyNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgorCitleHRlcm4gaW50IGYoKTsKK2ludCBtYWluKCkgeyByZXR1cm4gZigpOyB9CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2xpbmtfdGVzdF8yLmNwcCBiL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvbGlua190ZXN0XzIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZWZmYzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L2xpbmtfdGVzdF8yLmNwcApAQCAtMCwwICsxLDEwIEBACisKKy8vIENvcHlyaWdodCAyMDA1LTIwMDkgRGFuaWVsIEphbWVzLgorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKyNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCisKKyNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgorCitpbnQgZigpIHsgcmV0dXJuIDA7IH0KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9oYXNoL3Rlc3QvbmFtZXNwYWNlX2ZhaWxfdGVzdC5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L25hbWVzcGFjZV9mYWlsX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYjlmYzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvaGFzaC90ZXN0L25hbWVzcGFjZV9mYWlsX3Rlc3QuY3BwCkBAIC0wLDAgKzEsMTYgQEAKKworLy8gQ29weXJpZ2h0IDIwMDkgRGFuaWVsIEphbWVzLgorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworLy8gZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisKKy8vIENoZWNrIHRoYXQgSSBoYXZlbid0IGluYWR2ZXJ0YW50bHkgcHVsbGVkIG5hbWVzcGFjZSBzdGQgaW50byB0aGUgZ2xvYmFsCisvLyBuYW1lc3BhY2UuCisKKyNpbmNsdWRlICIuL2NvbmZpZy5ocHAiCisKKyNpbmNsdWRlIDxsaXN0PgorI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvaGFzaC5ocHA+CisKK3R5cGVkZWYgbGlzdDxpbnQ+IGZvbzsKKworaW50IG1haW4oKSB7fQpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL2luZGV4Lmh0bWwgYi9saWJzL2Z1bmN0aW9uYWwvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmQ4YmFjCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL2luZGV4Lmh0bWwKQEAgLTAsMCArMSwyNjMgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorCis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LUxhbmd1YWdlIiBjb250ZW50PSJlbi11cyI+CisgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIj4KKyAgPG1ldGEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJNaWNyb3NvZnQgRnJvbnRQYWdlIDYuMCI+CisgIDxtZXRhIG5hbWU9IlByb2dJZCIgY29udGVudD0iRnJvbnRQYWdlLkVkaXRvci5Eb2N1bWVudCI+CisKKyAgPHRpdGxlPkJvb3N0IEZ1bmN0aW9uIE9iamVjdCBBZGFwdGVyIExpYnJhcnk8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDAwIj4KKyAgPHRhYmxlIGJvcmRlcj0iMSIgYmdjb2xvcj0iIzAwN0Y3RiIgY2VsbHBhZGRpbmc9IjIiIHN1bW1hcnk9IiI+CisgICAgPHRyPgorICAgICAgPHRkIGJnY29sb3I9IiNGRkZGRkYiPjxpbWcgc3JjPSIuLi8uLi9ib29zdC5wbmciIGFsdD0KKyAgICAgICJib29zdC5wbmcgKDY4OTcgYnl0ZXMpIiB3aWR0aD0iMjc3IiBoZWlnaHQ9Ijg2Ij48L3RkPgorCisgICAgICA8dGQ+PGEgaHJlZj0iLi4vLi4vaW5kZXguaHRtIj48Zm9udCBmYWNlPSJBcmlhbCIgY29sb3I9CisgICAgICAiI0ZGRkZGRiI+PGJpZz5Ib21lPC9iaWc+PC9mb250PjwvYT48L3RkPgorCisgICAgICA8dGQ+PGEgaHJlZj0iLi4vbGlicmFyaWVzLmh0bSI+PGZvbnQgZmFjZT0iQXJpYWwiIGNvbG9yPQorICAgICAgIiNGRkZGRkYiPjxiaWc+TGlicmFyaWVzPC9iaWc+PC9mb250PjwvYT48L3RkPgorCisgICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvcGVvcGxlL3Blb3BsZS5odG0iPjxmb250IGZhY2U9IkFyaWFsIiBjb2xvcj0KKyAgICAgICIjRkZGRkZGIj48YmlnPlBlb3BsZTwvYmlnPjwvZm9udD48L2E+PC90ZD4KKworICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL21vcmUvZmFxLmh0bSI+PGZvbnQgZmFjZT0iQXJpYWwiIGNvbG9yPQorICAgICAgIiNGRkZGRkYiPjxiaWc+RkFRPC9iaWc+PC9mb250PjwvYT48L3RkPgorCisgICAgICA8dGQ+PGEgaHJlZj0iLi4vLi4vbW9yZS9pbmRleC5odG0iPjxmb250IGZhY2U9IkFyaWFsIiBjb2xvcj0KKyAgICAgICIjRkZGRkZGIj48YmlnPk1vcmU8L2JpZz48L2ZvbnQ+PC9hPjwvdGQ+CisgICAgPC90cj4KKyAgPC90YWJsZT4KKworICA8aDE+SW1wcm92ZWQgRnVuY3Rpb24gT2JqZWN0IEFkYXB0ZXJzPC9oMT4KKworICA8cD5UaGUgaGVhZGVyIDxhIGhyZWY9Ii4uLy4uL2Jvb3N0L2Z1bmN0aW9uYWwuaHBwIj5mdW5jdGlvbmFsLmhwcDwvYT4KKyAgcHJvdmlkZXMgZW5oYW5jZW1lbnRzIHRvIHRoZSBmdW5jdGlvbiBvYmplY3QgYWRhcHRlcnMgc3BlY2lmaWVkIGluIHRoZSBDKysKKyAgU3RhbmRhcmQgTGlicmFyeSAoc2VjdGlvbnMgMjAuMy41LCB0aHJvdWdoIHRvIDIwLjMuOCkuIFRoZSBlbmhhbmNlbWVudHMgYXJlCisgIHByaW5jaXBhbGx5IHBvc3NpYmxlIGR1ZSB0byB0d28gY2hhbmdlczo8L3A+CisKKyAgPG9sPgorICAgIDxsaT5XZSB1c2UgdGhlIEJvb3N0IDx0dD48YSBocmVmPQorICAgICIuLi91dGlsaXR5L2NhbGxfdHJhaXRzLmh0bSI+Y2FsbF90cmFpdHM8L2E+PC90dD4gdGVtcGxhdGVzIHRvIGF2b2lkIHRoZQorICAgIHByb2JsZW0gb2YgPGEgaHJlZj0iYmluZGVycy5odG1sI3JlZnJlZiI+cmVmZXJlbmNlcyB0byByZWZlcmVuY2VzPC9hPiwKKyAgICBhbmQgdG8gaW1wcm92ZSB0aGUgZWZmaWNpZW5jeSBvZiA8YSBocmVmPSJtZW1fZnVuLmh0bWwjYXJncyI+cGFyYW1ldGVyCisgICAgcGFzc2luZzwvYT4uPC9saT4KKworICAgIDxsaT5XZSB1c2UgdHdvIDxhIGhyZWY9ImZ1bmN0aW9uX3RyYWl0cy5odG1sIj5mdW5jdGlvbiBvYmplY3QgdHJhaXRzPC9hPgorICAgIGNsYXNzIHRlbXBsYXRlcyB0byBhdm9pZCB0aGUgbmVlZCBmb3IgPHR0PjxhIGhyZWY9CisgICAgInB0cl9mdW4uaHRtbCI+cHRyX2Z1bjwvYT48L3R0PiB3aXRoIHRoZSBhZGFwdGVycyBpbiB0aGlzIGxpYnJhcnkuPC9saT4KKyAgPC9vbD4KKworICA8aDM+Q29udGVudHM8L2gzPgorCisgIDxwPlRoZSBoZWFkZXIgY29udGFpbnMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiBhbmQgY2xhc3MgdGVtcGxhdGVzOjwvcD4KKworICA8dGFibGUgYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iNSIgc3VtbWFyeT0iIj4KKyAgICA8dHI+CisgICAgICA8dGggYWxpZ249ImxlZnQiPjxhIGhyZWY9ImZ1bmN0aW9uX3RyYWl0cy5odG1sIj5GdW5jdGlvbiBvYmplY3QKKyAgICAgIHRyYWl0czwvYT48L3RoPgorCisgICAgICA8dGQgdmFsaWduPSJ0b3AiPjx0dD51bmFyeV90cmFpdHM8YnI+CisgICAgICBiaW5hcnlfdHJhaXRzPC90dD48L3RkPgorCisgICAgICA8dGQgdmFsaWduPSJ0b3AiPlVzZWQgdG8gZGV0ZXJtaW5lIHRoZSB0eXBlcyBvZiBmdW5jdGlvbiBvYmplY3RzJyBhbmQKKyAgICAgIGZ1bmN0aW9ucycgYXJndW1lbnRzLiBFbGltaW5hdGUgdGhlIG5lY2Vzc2l0eSBmb3IKKyAgICAgIDx0dD5wdHJfZnVuPC90dD4uPC90ZD4KKyAgICA8L3RyPgorCisgICAgPHRyPgorICAgICAgPHRoIGFsaWduPSJsZWZ0Ij48YSBocmVmPSJuZWdhdG9ycy5odG1sIj5OZWdhdG9yczwvYT48L3RoPgorCisgICAgICA8dGQgdmFsaWduPSJ0b3AiPjx0dD51bmFyeV9uZWdhdGU8YnI+CisgICAgICBiaW5hcnlfbmVnYXRlPGJyPgorICAgICAgbm90MTxicj4KKyAgICAgIG5vdDI8L3R0PjwvdGQ+CisKKyAgICAgIDx0ZCB2YWxpZ249InRvcCI+QmFzZWQgb24gc2VjdGlvbiAyMC4zLjUgb2YgdGhlIHN0YW5kYXJkLjwvdGQ+CisgICAgPC90cj4KKworICAgIDx0cj4KKyAgICAgIDx0aCBhbGlnbj0ibGVmdCI+PGEgaHJlZj0iYmluZGVycy5odG1sIj5CaW5kZXJzPC9hPjwvdGg+CisKKyAgICAgIDx0ZCB2YWxpZ249InRvcCI+PHR0PmJpbmRlcjFzdDxicj4KKyAgICAgIGJpbmRlcjJuZDxicj4KKyAgICAgIGJpbmQxc3Q8YnI+CisgICAgICBiaW5kMm5kPC90dD48L3RkPgorCisgICAgICA8dGQgdmFsaWduPSJ0b3AiPkJhc2VkIG9uIHNlY3Rpb24gMjAuMy42IG9mIHRoZSBzdGFuZGFyZC48L3RkPgorICAgIDwvdHI+CisKKyAgICA8dHI+CisgICAgICA8dGggYWxpZ249ImxlZnQiPjxhIGhyZWY9InB0cl9mdW4uaHRtbCI+QWRhcHRlcnMgZm9yIHBvaW50ZXJzIHRvCisgICAgICBmdW5jdGlvbnM8L2E+PC90aD4KKworICAgICAgPHRkIHZhbGlnbj0idG9wIj48dHQ+cG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjxicj4KKyAgICAgIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPGJyPgorICAgICAgcHRyX2Z1bjwvdHQ+PC90ZD4KKworICAgICAgPHRkIHZhbGlnbj0idG9wIj5CYXNlZCBvbiBzZWN0aW9uIDIwLjMuNyBvZiB0aGUgc3RhbmRhcmQuIE5vdCByZXF1aXJlZAorICAgICAgZm9yIHVzZSB3aXRoIHRoaXMgbGlicmFyeSBzaW5jZSB0aGUgYmluZGVycyBhbmQgbmVnYXRvcnMgY2FuIGFkYXB0CisgICAgICBmdW5jdGlvbnMsIGJ1dCBtYXkgYmUgbmVlZGVkIHdpdGggdGhpcmQgcGFydHkgYWRhcHRlcnMuPC90ZD4KKyAgICA8L3RyPgorCisgICAgPHRyPgorICAgICAgPHRoIGFsaWduPSJsZWZ0Ij48YSBocmVmPSJtZW1fZnVuLmh0bWwiPkFkYXB0ZXJzIGZvciBwb2ludGVycyB0byBtZW1iZXIKKyAgICAgIGZ1bmN0aW9uczwvYT48L3RoPgorCisgICAgICA8dGQgdmFsaWduPSJ0b3AiPjx0dD5tZW1fZnVuX3Q8YnI+CisgICAgICBtZW1fZnVuMV90PGJyPgorICAgICAgY29uc3RfbWVtX2Z1bl90PGJyPgorICAgICAgY29uc3RfbWVtX2Z1bjFfdDxicj4KKyAgICAgIG1lbV9mdW5fcmVmX3Q8YnI+CisgICAgICBtZW1fZnVuMV9yZWZfdDxicj4KKyAgICAgIGNvbnN0X21lbV9mdW5fcmVmX3Q8YnI+CisgICAgICBjb25zdF9tZW1fZnVuMV9yZWZfdDxicj4KKyAgICAgIG1lbV9mdW48YnI+CisgICAgICBtZW1fZnVuX3JlZjwvdHQ+PC90ZD4KKworICAgICAgPHRkIHZhbGlnbj0idG9wIj5CYXNlZCBvbiBzZWN0aW9uIDIwLjMuOCBvZiB0aGUgc3RhbmRhcmQuPC90ZD4KKyAgICA8L3RyPgorICA8L3RhYmxlPgorCisgIDxoMz5Vc2FnZTwvaDM+CisKKyAgPHA+VXNpbmcgdGhlc2UgYWRhcHRlcnMgc2hvdWxkIGJlIHByZXR0eSBtdWNoIHRoZSBzYW1lIGFzIHVzaW5nIHRoZQorICBzdGFuZGFyZCBmdW5jdGlvbiBvYmplY3QgYWRhcHRlcnM7IHRoZSBvbmx5IGRpZmZlcmVuY2VzIGFyZSB0aGF0IHlvdSBuZWVkCisgIHRvIHdyaXRlIDx0dD5ib29zdDo6PC90dD4gaW5zdGVhZCBvZiA8dHQ+c3RkOjo8L3R0PiwgYW5kIHRoYXQgeW91IHdpbGwgZ2V0CisgIGZld2VyIGhlYWRhY2hlcy48L3A+CisKKyAgPHA+Rm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGhhZCBhIDx0dD5QZXJzb248L3R0PiBjbGFzcyB0aGF0IGNvbnRhaW5lZCBhCisgIDx0dD5zZXRfbmFtZTwvdHQ+IGZ1bmN0aW9uOjwvcD4KKworICA8YmxvY2txdW90ZT4KKyAgICA8cHJlPgorY2xhc3MgUGVyc29uCit7CisgIHB1YmxpYzoKKyAgICB2b2lkIHNldF9uYW1lKGNvbnN0IHN0ZDo6c3RyaW5nICZhbXA7bmFtZSk7CisgIC8vIC4uLgorfTsKKzwvcHJlPgorICA8L2Jsb2NrcXVvdGU+CisKKyAgPHA+WW91IGNvdWxkIHJlbmFtZSBhIGJ1bmNoIG9mIHBlb3BsZSBpbiBhIGNvbGxlY3Rpb24sIDx0dD5jPC90dD4sIGJ5CisgIHdyaXRpbmc8L3A+CisKKyAgPGJsb2NrcXVvdGU+CisgICAgPHByZT4KK3N0ZDo6Zm9yX2VhY2goYy5iZWdpbigpLCBjLmVuZCgpLCAKKyAgICAgICAgICAgICAgYm9vc3Q6OmJpbmQybmQoYm9vc3Q6Om1lbV9mdW5fcmVmKCZhbXA7UGVyc29uOjpzZXRfbmFtZSksICJGcmVkIikpOworPC9wcmU+CisgIDwvYmxvY2txdW90ZT4KKworICA8cD5JZiB0aGUgc3RhbmRhcmQgYWRhcHRlcnMgaGFkIGJlZW4gdXNlZCBpbnN0ZWFkIHRoZW4gdGhpcyBjb2RlIHdvdWxkCisgIG5vcm1hbGx5IGZhaWwgdG8gY29tcGlsZSwgYmVjYXVzZSA8dHQ+c2V0X25hbWU8L3R0PiB0YWtlcyBhIHJlZmVyZW5jZQorICBhcmd1bWVudC4gUmVmZXIgdG8gdGhlIGNvbW1lbnRzIGluIHRoZSA8YSBocmVmPSJiaW5kZXJzLmh0bWwjcmVmcmVmIj5iaW5kZXIKKyAgZG9jdW1lbnRhdGlvbjwvYT4gdG8gZXhwbGFpbiB3aHkgdGhpcyBpcyBzby48L3A+CisKKyAgPGgzPkNvbXBpbGVyIENvbXBhdGliaWxpdHk8L2gzPgorCisgIDxwPlRoZSBoZWFkZXIgYW5kIDxhIGhyZWY9InRlc3QvZnVuY3Rpb25fdGVzdC5jcHAiPnRlc3QgcHJvZ3JhbTwvYT4gaGF2ZSBiZWVuCisgIGNvbXBpbGVkIHdpdGggdGhlIGZvbGxvd2luZyBjb21waWxlcnM6PC9wPgorCisgIDx0YWJsZSBib3JkZXI9IjEiIGNlbGxwYWRkaW5nPSI1IiBzdW1tYXJ5PSIiPgorICAgIDx0cj4KKyAgICAgIDx0aD5Db21waWxlcjwvdGg+CisKKyAgICAgIDx0aD5Db21tZW50czwvdGg+CisgICAgPC90cj4KKworICAgIDx0cj4KKyAgICAgIDx0ZCB2YWxpZ249InRvcCI+Qm9ybGFuZCBDKytCdWlsZGVyIDQgVXBkYXRlIDI8L3RkPgorCisgICAgICA8dGQgdmFsaWduPSJ0b3AiPk5vIGtub3duIGlzc3Vlcy48L3RkPgorICAgIDwvdHI+CisKKyAgICA8dHI+CisgICAgICA8dGQgdmFsaWduPSJ0b3AiPkJvcmxhbmQgQysrIDUuNTwvdGQ+CisKKyAgICAgIDx0ZCB2YWxpZ249InRvcCI+Tm8ga25vd24gaXNzdWVzLjwvdGQ+CisgICAgPC90cj4KKworICAgIDx0cj4KKyAgICAgIDx0ZCB2YWxpZ249InRvcCI+ZysrIDIuOTUuMjwvdGQ+CisKKyAgICAgIDx0ZCB2YWxpZ249InRvcCI+Tm8ga25vd24gaXNzdWVzLjwvdGQ+CisgICAgPC90cj4KKworICAgIDx0cj4KKyAgICAgIDx0ZCB2YWxpZ249InRvcCI+TWljcm9zb2Z0IFZpc3VhbCBDKysgU2VydmljZSBQYWNrIDM8L3RkPgorCisgICAgICA8dGQgdmFsaWduPSJ0b3AiPgorICAgICAgICBDb21waWxlciBsYWNrcyBwYXJ0aWFsIHNwZWNpYWxpc2F0aW9uLCBzbyB0aGlzIGxpYnJhcnkgb2ZmZXJzIGxpdHRsZQorICAgICAgICBtb3JlIHRoYW4gaXMgcHJvdmlkZWQgYnkgdGhlIHN0YW5kYXJkIGFkYXB0ZXJzOgorCisgICAgICAgIDx1bD4KKyAgICAgICAgICA8bGk+VGhlIDx0dD5jYWxsX3RyYWl0czwvdHQ+IG1lY2hhbmlzbSBpcyB1bmFibGUgdG8gcHJldmVudAorICAgICAgICAgIHJlZmVyZW5jZXMgdG8gcmVmZXJlbmNlcywgYW5kIHNvIHRoZSBhZGFwdGVycyBpbiB0aGlzIGxpYnJhcnkgd2lsbAorICAgICAgICAgIGJlIHVzYWJsZSBpbiBmZXdlciBzaXR1YXRpb25zLjwvbGk+CisKKyAgICAgICAgICA8bGk+VGhlIDx0dD5mdW5jdGlvbl90cmFpdHM8L3R0PiBtZWNoYW5pc20gaXMgdW5hYmxlIHRvIGRldGVybWluZQorICAgICAgICAgIHRoZSBhcmd1bWVudCBhbmQgcmVzdWx0IHR5cGVzIG9mIGZ1bmN0aW9ucywgdGhlcmVmb3JlCisgICAgICAgICAgPHR0PnB0cl9mdW48L3R0PiBjb250aW51ZXMgdG8gYmUgcmVxdWlyZWQgdG8gYWRhcHQgZnVuY3Rpb25zLjwvbGk+CisgICAgICAgIDwvdWw+CisgICAgICA8L3RkPgorICAgIDwvdHI+CisgIDwvdGFibGU+CisKKyAgPGgzPkZ1dHVyZSBEaXJlY3Rpb25zPC9oMz4KKworICA8cD5UaGlzIGxpYnJhcnkncyBwcmltYXJ5IGZvY3VzIGlzIHRvIHNvbHZlIHRoZSBwcm9ibGVtIG9mIHJlZmVyZW5jZXMgdG8KKyAgcmVmZXJlbmNlcyB3aGlsZSBtYWludGFpbmluZyBhcyBtdWNoIGNvbXBhdGliaWxpdHkgYXMgcG9zc2libGUgd2l0aCB0aGUKKyAgc3RhbmRhcmQgbGlicmFyeS4gVGhpcyBhbGxvd3MgeW91IHRvIHVzZSB0aGUgdGVjaG5pcXVlcyB5b3UgcmVhZCBhYm91dCBpbgorICBib29rcyBhbmQgbWFnYXppbmVzIHdpdGggbWFueSBvZiB0b2RheSdzIGNvbXBpbGVycy48L3A+CisKKyAgPHA+SW4gdGhlIGxvbmdlciB0ZXJtLCBldmVuIGJldHRlciBzb2x1dGlvbnMgYXJlIGxpa2VseTo8L3A+CisKKyAgPG9sPgorICAgIDxsaT5TZXZlcmFsIEJvb3N0IG1lbWJlcnMgYXJlIHdvcmtpbmcgb24gZXhwcmVzc2lvbiB0ZW1wbGF0ZSBsaWJyYXJpZXMuCisgICAgVGhlc2Ugd2lsbCBhbGxvdyBhIG1vcmUgbmF0dXJhbCBzeW50YXggZm9yIGNvbWJpbmluZyBhbmQgYWRhcHRpbmcKKyAgICBmdW5jdGlvbnMuIEFzIHRoaXMgaXMgYSBuZXcgdGVjaG5vbG9neSwgaXQgbWF5IGJlIHNvbWUgdGltZSBiZWZvcmUgaXQgaGFzCisgICAgbWF0dXJlZCBhbmQgaXMgd2lkZWx5IHN1cHBvcnRlZCBieSBtYWpvciBjb21waWxlcnMgYnV0IHNob3dzIGdyZWF0CisgICAgcHJvbWlzZS4gSW4gdGhlIG1lYW50aW1lLCB0aGUgZnVuY3Rpb25hbC5ocHAgbGlicmFyeSBmaWxscyB0aGUgZ2FwLjwvbGk+CisKKyAgICA8bGk+VGhlIFN0YW5kYXJkIENvbW1pdHRlZSBoYXMgcmVjb2duaXNlZCB0aGUgcHJvYmxlbSBvZiByZWZlcmVuY2VzIHRvCisgICAgcmVmZXJlbmNlcyBvY2N1cnJpbmcgZHVyaW5nIHRlbXBsYXRlIGluc3RhbnRpYXRpb24gYW5kIGhhcyBtb3ZlZCB0byBmaXgKKyAgICB0aGUgc3RhbmRhcmQgKHNlZSB0aGUgPGEgaHJlZj0KKyAgICAiaHR0cDovL2FudWJpcy5ka3V1Zy5kay9qdGMxL3NjMjIvd2cyMS9kb2NzL2N3Z19hY3RpdmUuaHRtbCMxMDYiPkMrKworICAgIHN0YW5kYXJkIGNvcmUgbGFuZ3VhZ2UgYWN0aXZlIGlzc3VlcyBsaXN0PC9hPikuPC9saT4KKyAgPC9vbD4KKworICA8aDM+QXV0aG9yPC9oMz4KKworICA8cD48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9wZW9wbGUvbWFya19yb2RnZXJzLmh0bSI+TWFyayBSb2RnZXJzPC9hPjwvcD4KKworICA8aDM+QWNrbm93bGVkZ2VtZW50czwvaDM+CisKKyAgPHA+VGhhbmtzIHRvIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL3Blb3BsZS9qb2huX21hZGRvY2suaHRtIj5Kb2huIE1hZGRvY2s8L2E+IGZvcgorICBzdWdnZXN0aW5nIHRoZSBtZWNoYW5pc20gdGhhdCBhbGxvd2VkIHRoZSBmdW5jdGlvbiBvYmplY3RzIHRyYWl0cyB0byB3b3JrCisgIGNvcnJlY3RseS4gPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvcGVvcGxlL2plbnNfbWF1cmVyLmh0bSI+SmVucyBNYXVyZXI8L2E+IHByb3ZpZGVkCisgIGludmFsdWFibGUgZmVlZGJhY2sgZHVyaW5nIHRoZSA8YSBocmVmPQorICAiaHR0cDovL3d3dy5ib29zdC5vcmcvbW9yZS9mb3JtYWxfcmV2aWV3X3Byb2Nlc3MuaHRtIj5mb3JtYWwgcmV2aWV3IHByb2Nlc3M8L2E+LjwvcD4KKyAgPGhyPgorCisgIDxwPjxhIGhyZWY9Imh0dHA6Ly92YWxpZGF0b3IudzMub3JnL2NoZWNrP3VyaT1yZWZlcmVyIj48aW1nIGJvcmRlcj0iMCIgc3JjPQorICAiLi4vLi4vZG9jL2ltYWdlcy92YWxpZC1odG1sNDAxLnBuZyIgYWx0PSJWYWxpZCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsIgorICBoZWlnaHQ9IjMxIiB3aWR0aD0iODgiPjwvYT48L3A+CisKKyAgPHA+UmV2aXNlZCAKKyAgPCEtLXdlYmJvdCBib3Q9IlRpbWVzdGFtcCIgcy10eXBlPSJFRElURUQiIHMtZm9ybWF0PSIlZCAlQiwgJVkiIHN0YXJ0c3BhbiAtLT4wMgorICBEZWNlbWJlciwgMjAwNjwhLS13ZWJib3QgYm90PSJUaW1lc3RhbXAiIGVuZHNwYW4gaS1jaGVja3N1bT0iMzg1MTAiIC0tPjwvcD4KKworICA8cD48aT5Db3B5cmlnaHQgJmNvcHk7IDIwMDAgQ2FkZW56YSBOZXcgWmVhbGFuZCBMdGQuPC9pPjwvcD4KKworICA8cD48aT5EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKKyAgYWNjb21wYW55aW5nIGZpbGUgPGEgaHJlZj0iLi4vLi4vTElDRU5TRV8xXzAudHh0Ij5MSUNFTlNFXzFfMC50eHQ8L2E+IG9yCisgIGNvcHkgYXQgPGEgaHJlZj0KKyAgImh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCI+aHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0PC9hPik8L2k+PC9wPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL21lbV9mdW4uaHRtbCBiL2xpYnMvZnVuY3Rpb25hbC9tZW1fZnVuLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNkYzEwMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9tZW1fZnVuLmh0bWwKQEAgLTAsMCArMSwyMDEgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorCis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LUxhbmd1YWdlIiBjb250ZW50PSJlbi11cyI+CisgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIj4KKworICA8dGl0bGU+Qm9vc3QgRnVuY3Rpb24gT2JqZWN0IEFkYXB0ZXIgTGlicmFyeTwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5IGJnY29sb3I9IiNGRkZGRkYiIHRleHQ9IiMwMDAwMDAiPgorICA8dGFibGUgYm9yZGVyPSIxIiBiZ2NvbG9yPSIjMDA3RjdGIiBjZWxscGFkZGluZz0iMiIgc3VtbWFyeT0iIj4KKyAgICA8dHI+CisgICAgICA8dGQgYmdjb2xvcj0iI0ZGRkZGRiI+PGltZyBzcmM9Ii4uLy4uL2Jvb3N0LnBuZyIgYWx0PQorICAgICAgImJvb3N0LnBuZyAoNjg5NyBieXRlcykiIHdpZHRoPSIyNzciIGhlaWdodD0iODYiPjwvdGQ+CisKKyAgICAgIDx0ZD48YSBocmVmPSIuLi8uLi9pbmRleC5odG0iPjxmb250IGZhY2U9IkFyaWFsIiBjb2xvcj0KKyAgICAgICIjRkZGRkZGIj48YmlnPkhvbWU8L2JpZz48L2ZvbnQ+PC9hPjwvdGQ+CisKKyAgICAgIDx0ZD48YSBocmVmPSIuLi9saWJyYXJpZXMuaHRtIj48Zm9udCBmYWNlPSJBcmlhbCIgY29sb3I9CisgICAgICAiI0ZGRkZGRiI+PGJpZz5MaWJyYXJpZXM8L2JpZz48L2ZvbnQ+PC9hPjwvdGQ+CisKKyAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9wZW9wbGUvcGVvcGxlLmh0bSI+PGZvbnQgZmFjZT0iQXJpYWwiIGNvbG9yPQorICAgICAgIiNGRkZGRkYiPjxiaWc+UGVvcGxlPC9iaWc+PC9mb250PjwvYT48L3RkPgorCisgICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvbW9yZS9mYXEuaHRtIj48Zm9udCBmYWNlPSJBcmlhbCIgY29sb3I9CisgICAgICAiI0ZGRkZGRiI+PGJpZz5GQVE8L2JpZz48L2ZvbnQ+PC9hPjwvdGQ+CisKKyAgICAgIDx0ZD48YSBocmVmPSIuLi8uLi9tb3JlL2luZGV4Lmh0bSI+PGZvbnQgZmFjZT0iQXJpYWwiIGNvbG9yPQorICAgICAgIiNGRkZGRkYiPjxiaWc+TW9yZTwvYmlnPjwvZm9udD48L2E+PC90ZD4KKyAgICA8L3RyPgorICA8L3RhYmxlPgorCisgIDxoMT5NZW1iZXIgRnVuY3Rpb24gQWRhcHRlcnM8L2gxPgorCisgIDxwPlRoZSBoZWFkZXIgPGEgaHJlZj0iLi4vLi4vYm9vc3QvZnVuY3Rpb25hbC5ocHAiPmZ1bmN0aW9uYWwuaHBwPC9hPgorICBpbmNsdWRlcyBpbXByb3ZlZCB2ZXJzaW9ucyBvZiB0aGUgZnVsbCByYW5nZSBvZiBtZW1iZXIgZnVuY3Rpb24gYWRhcHRlcnMKKyAgZnJvbSB0aGUgdGhlIEMrKyBTdGFuZGFyZCBMaWJyYXJ5ICgmc2VjdDsyMC4zLjgpOjwvcD4KKworICA8dWw+CisgICAgPGxpPjx0dD5tZW1fZnVuX3Q8L3R0PjwvbGk+CisKKyAgICA8bGk+PHR0Pm1lbV9mdW4xX3Q8L3R0PjwvbGk+CisKKyAgICA8bGk+PHR0PmNvbnN0X21lbV9mdW5fdDwvdHQ+PC9saT4KKworICAgIDxsaT48dHQ+Y29uc3RfbWVtX2Z1bjFfdDwvdHQ+PC9saT4KKworICAgIDxsaT48dHQ+bWVtX2Z1bl9yZWZfdDwvdHQ+PC9saT4KKworICAgIDxsaT48dHQ+bWVtX2Z1bjFfcmVmX3Q8L3R0PjwvbGk+CisKKyAgICA8bGk+PHR0PmNvbnN0X21lbV9mdW5fcmVmX3Q8L3R0PjwvbGk+CisKKyAgICA8bGk+PHR0PmNvbnN0X21lbV9mdW4xX3JlZl90PC90dD48L2xpPgorICA8L3VsPgorCisgIDxwPmFzIHdlbGwgYXMgdGhlIGNvcnJlc3BvbmRpbmcgb3ZlcmxvYWRlZCBoZWxwZXIgZnVuY3Rpb25zPC9wPgorCisgIDx1bD4KKyAgICA8bGk+PHR0Pm1lbV9mdW48L3R0PjwvbGk+CisKKyAgICA8bGk+PHR0Pm1lbV9mdW5fcmVmPC90dD48L2xpPgorICA8L3VsPgorCisgIDxwPlRoZSBmb2xsb3dpbmcgY2hhbmdlcyBoYXZlIGJlZW4gbWFkZSB0byB0aGUgYWRhcHRlcnMgYXMgc3BlY2lmaWVkIGluIHRoZQorICBTdGFuZGFyZDo8L3A+CisKKyAgPHVsPgorICAgIDxsaT5UaGUgPHR0PmZpcnN0X2FyZ3VtZW50X3R5cGU8L3R0PiB0eXBlZGVmIGhhcyBiZWVuIGNvcnJlY3RlZCBmb3IgdGhlCisgICAgPHR0PmNvbnN0XzwvdHQ+IGZhbWlseSBvZiBtZW1iZXIgZnVuY3Rpb24gYWRhcHRlcnMgKHNlZSA8YSBocmVmPQorICAgICIjZmlyc3RhcmciPmJlbG93PC9hPikuPC9saT4KKworICAgIDxsaT5UaGUgYXJndW1lbnQgcGFzc2VkIHRvIDx0dD5tZW1fZnVuMV90PC90dD4gYW5kIGl0cyB2YXJpYW50cyBpcyBwYXNzZWQKKyAgICB1c2luZyB0aGUgPHR0PmNhbGxfdHJhaXRzOjpwYXJhbV90eXBlPC90dD4gZm9yIHRoZSBtZW1iZXIgZnVuY3Rpb24ncworICAgIGFyZ3VtZW50IHR5cGUuPC9saT4KKyAgPC91bD4KKworICA8aDMgaWQ9ImZpcnN0YXJnIj5maXJzdF9hcmd1bWVudF90eXBlPC9oMz4KKworICA8cD5UaGUgc3RhbmRhcmQgc3BlY2lmaWVzIDx0dD5jb25zdF9tZW1fZnVuMV90PC90dD4sIGZvciBleGFtcGxlLCBsaWtlCisgIHRoaXM6PC9wPgorCisgIDxibG9ja3F1b3RlPgorICAgIDxwcmU+Cit0ZW1wbGF0ZSAmbHQ7Y2xhc3MgUywgY2xhc3MgVCwgY2xhc3MgQSZndDsgY2xhc3MgY29uc3RfbWVtX2Z1bjFfdAorICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb24mbHQ7PHN0cm9uZz5UKjwvc3Ryb25nPiwgQSwgUyZndDsgeworcHVibGljOgorICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV90KFMgKFQ6OipwKShBKSBjb25zdCk7CisgIFMgb3BlcmF0b3IoKSg8c3Ryb25nPmNvbnN0IFQqPC9zdHJvbmc+IHAsIEEgeCkgY29uc3Q7Cit9OworPC9wcmU+CisgIDwvYmxvY2txdW90ZT4KKworICA8cD5Ob3RlIHRoYXQgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIDx0dD5iaW5hcnlfZnVuY3Rpb248L3R0PiBpcyA8dHQ+VCo8L3R0PgorICBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIDx0dD5vcGVyYXRvcigpPC90dD4gaXMgYWN0dWFsbHkKKyAgb2YgdHlwZSA8dHQ+PGVtPmNvbnN0PC9lbT4mbmJzcDtUKjwvdHQ+LjwvcD4KKworICA8cD5Eb2VzIHRoaXMgbWF0dGVyPyBXZWxsLCBjb25zaWRlciB3aGF0IGhhcHBlbnMgd2hlbiB3ZSB3cml0ZTwvcD4KKworICA8YmxvY2txdW90ZT4KKyAgICA8cHJlPgorc3RydWN0IEZvbyB7IHZvaWQgYmFyKGludCkgY29uc3Q7IH07Citjb25zdCBGb28gKmNwID0gbmV3IEZvbzsKK3N0ZDo6YmluZDFzdChzdGQ6Om1lbV9mdW4oJmFtcDtGb286OmJhciksIGNwKTsKKzwvcHJlPgorICA8L2Jsb2NrcXVvdGU+CisKKyAgPHA+V2UgaGF2ZSBjcmVhdGVkIGEgPHR0PmNvbnN0X21lbV9mdW4xX3Q8L3R0PiBvYmplY3Qgd2hpY2ggd2lsbAorICBlZmZlY3RpdmVseSBjb250YWluIHRoZSBmb2xsb3dpbmc8L3A+CisKKyAgPGJsb2NrcXVvdGU+CisgICAgPHByZT4KK3R5cGVkZWYgRm9vKiBmaXJzdF9hcmd1bWVudF90eXBlOworPC9wcmU+CisgIDwvYmxvY2txdW90ZT4KKworICA8cD5UaGUgPHR0PmJpbmQxc3Q8L3R0PiB3aWxsIHRoZW4gY3JlYXRlIGEgPHR0PmJpbmRlcjFzdDwvdHQ+IG9iamVjdCB0aGF0CisgIHdpbGwgdXNlIHRoaXMgPHR0PnR5cGVkZWY8L3R0PiBhcyB0aGUgdHlwZSBvZiBhIG1lbWJlciB3aGljaCB3aWxsIGJlCisgIGluaXRpYWxpc2VkIHdpdGggPHR0PmNwPC90dD4uIEluIG90aGVyIHdvcmRzLCB3ZSB3aWxsIG5lZWQgdG8gaW5pdGlhbGlzZSBhCisgIDx0dD5Gb28qPC90dD4gbWVtYmVyIHdpdGggYSA8dHQ+Y29uc3QmbmJzcDtGb28qPC90dD4gcG9pbnRlciEgQ2xlYXJseSB0aGlzCisgIGlzIG5vdCBwb3NzaWJsZSwgc28gdG8gaW1wbGVtZW50IHRoaXMgeW91ciBTdGFuZGFyZCBMaWJyYXJ5IHZlbmRvciB3aWxsCisgIGhhdmUgaGFkIHRvIGNhc3QgYXdheSB0aGUgY29uc3RuZXNzIG9mIDx0dD5jcDwvdHQ+LCBwcm9iYWJseSB3aXRoaW4gdGhlCisgIGJvZHkgb2YgPHR0PmJpbmQxc3Q8L3R0Pi48L3A+CisKKyAgPHA+VGhpcyBoYWNrIHdpbGwgbm90IHN1ZmZpY2Ugd2l0aCB0aGUgaW1wcm92ZWQgPGEgaHJlZj0KKyAgImJpbmRlcnMuaHRtbCI+YmluZGVyczwvYT4gaW4gdGhpcyBsaWJyYXJ5LCBzbyB3ZSBoYXZlIGhhZCB0byBwcm92aWRlCisgIGNvcnJlY3RlZCB2ZXJzaW9ucyBvZiB0aGUgbWVtYmVyIGZ1bmN0aW9uIGFkYXB0ZXJzIGFzIHdlbGwuPC9wPgorCisgIDxoMyBpZD0iYXJncyI+QXJndW1lbnQgVHlwZXM8L2gzPgorCisgIDxwPlRoZSBzdGFuZGFyZCBkZWZpbmVzIDx0dD5tZW1fZnVuMV90PC90dD4sIGZvciBleGFtcGxlLCBsaWtlIHRoaXMKKyAgKCZzZWN0OzIwLjMuOCZuYnNwOyZwYXJhOzIpOjwvcD4KKworICA8YmxvY2txdW90ZT4KKyAgICA8cHJlPgordGVtcGxhdGUgJmx0O2NsYXNzIFMsIGNsYXNzIFQsIGNsYXNzIEEmZ3Q7IGNsYXNzIG1lbV9mdW4xX3QKKyAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uJmx0O1QqLCBBLCBTJmd0OyB7CitwdWJsaWM6CisgIGV4cGxpY2l0IG1lbV9mdW4xX3QoUyAoVDo6KnApKDxzdHJvbmc+QTwvc3Ryb25nPikpOworICBTIG9wZXJhdG9yKCkoVCogcCwgPHN0cm9uZz5BPC9zdHJvbmc+IHgpIGNvbnN0OworfTsKKzwvcHJlPgorICA8L2Jsb2NrcXVvdGU+CisKKyAgPHA+Tm90ZSB0aGF0IHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gPHR0Pm9wZXJhdG9yKCk8L3R0PiBpcyBleGFjdGx5IHRoZSBzYW1lCisgIHR5cGUgYXMgdGhlIGFyZ3VtZW50IHRvIHRoZSBtZW1iZXIgZnVuY3Rpb24uIElmIHRoaXMgaXMgYSB2YWx1ZSB0eXBlLCB0aGUKKyAgYXJndW1lbnQgd2lsbCBiZSBwYXNzZWQgYnkgdmFsdWUgYW5kIGNvcGllZCB0d2ljZS48L3A+CisKKyAgPHA+SG93ZXZlciwgaWYgd2Ugd2VyZSB0byB0cnkgYW5kIGVsaW1pbmF0ZSB0aGlzIGluZWZmaWNpZW5jeSBieSBpbnN0ZWFkCisgIGRlY2xhcmluZyB0aGUgYXJndW1lbnQgYXMgPHR0PmNvbnN0Jm5ic3A7QSZhbXA7PC90dD4sIHRoZW4gaWYgQSB3ZXJlIGEKKyAgcmVmZXJlbmNlIHR5cGUsIHdlIHdvdWxkIGhhdmUgYSByZWZlcmVuY2UgdG8gYSByZWZlcmVuY2UsIHdoaWNoIGlzCisgIGN1cnJlbnRseSBpbGxlZ2FsIChidXQgc2VlIDxhIGhyZWY9CisgICJodHRwOi8vYW51YmlzLmRrdXVnLmRrL2p0YzEvc2MyMi93ZzIxL2RvY3MvY3dnX2FjdGl2ZS5odG1sIzEwNiI+QysrIGNvcmUKKyAgbGFuZ3VhZ2UgaXNzdWUgbnVtYmVyIDEwNik8L2E+PC9wPgorCisgIDxwPlNvIHRoZSB3YXkgaW4gd2hpY2ggd2Ugd2FudCB0byBkZWNsYXJlIHRoZSBzZWNvbmQgYXJndW1lbnQgZm9yCisgIDx0dD5vcGVyYXRvcigpPC90dD4gZGVwZW5kcyBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgbWVtYmVyIGZ1bmN0aW9uJ3MKKyAgYXJndW1lbnQgaXMgYSByZWZlcmVuY2UuIElmIGl0IGlzIGEgcmVmZXJlbmNlLCB3ZSB3YW50IHRvIGRlY2xhcmUgaXQgc2ltcGx5CisgIGFzIDx0dD5BPC90dD47IGlmIGl0IGlzIGEgdmFsdWUgd2Ugd2FudCB0byBkZWNsYXJlIGl0IGFzCisgIDx0dD5jb25zdCZuYnNwO0EmYW1wOzwvdHQ+LjwvcD4KKworICA8cD5UaGUgQm9vc3QgPGEgaHJlZj0iLi4vdXRpbGl0eS9jYWxsX3RyYWl0cy5odG0iPmNhbGxfdHJhaXRzPC9hPiBjbGFzcworICB0ZW1wbGF0ZSBjb250YWlucyBhIDx0dD5wYXJhbV90eXBlPC90dD4gdHlwZWRlZiwgd2hpY2ggdXNlcyBwYXJ0aWFsCisgIHNwZWNpYWxpc2F0aW9uIHRvIG1ha2UgcHJlY2lzZWx5IHRoaXMgZGVjaXNpb24uIEJ5IGRlY2xhcmluZyB0aGUKKyAgPHR0Pm9wZXJhdG9yKCk8L3R0PiBhczwvcD4KKworICA8YmxvY2txdW90ZT4KKyAgICA8cHJlPgorUyBvcGVyYXRvcigpKFQqIHAsIHR5cGVuYW1lIGNhbGxfdHJhaXRzJmx0O0EmZ3Q7OjpwYXJhbV90eXBlIHgpIGNvbnN0Cis8L3ByZT4KKyAgPC9ibG9ja3F1b3RlPgorCisgIDxwPndlIGFjaGlldmUgdGhlIGRlc2lyZWQgcmVzdWx0IC0gd2UgaW1wcm92ZSBlZmZpY2llbmN5IHdpdGhvdXQgZ2VuZXJhdGluZworICByZWZlcmVuY2VzIHRvIHJlZmVyZW5jZXMuPC9wPgorCisgIDxoMz5MaW1pdGF0aW9uczwvaDM+CisKKyAgPHA+VGhlIGNhbGwgdHJhaXRzIHRlbXBsYXRlIHVzZWQgdG8gcmVhbGlzZSBzb21lIGltcHJvdmVtZW50cyByZWxpZXMgb24KKyAgcGFydGlhbCBzcGVjaWFsaXNhdGlvbiwgc28gdGhlc2UgaW1wcm92ZW1lbnRzIGFyZSBvbmx5IGF2YWlsYWJsZSBvbgorICBjb21waWxlcnMgdGhhdCBzdXBwb3J0IHRoYXQgZmVhdHVyZS4gV2l0aCBvdGhlciBjb21waWxlcnMsIHRoZSBhcmd1bWVudAorICBwYXNzZWQgdG8gdGhlIG1lbWJlciBmdW5jdGlvbiAoaW4gdGhlIDx0dD5tZW1fZnVuMV90PC90dD4gZmFtaWx5KSB3aWxsCisgIGFsd2F5cyBiZSBwYXNzZWQgYnkgcmVmZXJlbmNlLCB0aHVzIGdlbmVyYXRpbmcgdGhlIHBvc3NpYmlsaXR5IG9mCisgIHJlZmVyZW5jZXMgdG8gcmVmZXJlbmNlcy48L3A+CisgIDxocj4KKworICA8cD48YSBocmVmPSJodHRwOi8vdmFsaWRhdG9yLnczLm9yZy9jaGVjaz91cmk9cmVmZXJlciI+PGltZyBib3JkZXI9IjAiIHNyYz0KKyAgIi4uLy4uL2RvYy9pbWFnZXMvdmFsaWQtaHRtbDQwMS5wbmciIGFsdD0iVmFsaWQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbCIKKyAgaGVpZ2h0PSIzMSIgd2lkdGg9Ijg4Ij48L2E+PC9wPgorCisgIDxwPlJldmlzZWQgCisgIDwhLS13ZWJib3QgYm90PSJUaW1lc3RhbXAiIHMtdHlwZT0iRURJVEVEIiBzLWZvcm1hdD0iJWQgJUIsICVZIiBzdGFydHNwYW4gLS0+MDIgRGVjZW1iZXIsIDIwMDY8IS0td2ViYm90IGJvdD0iVGltZXN0YW1wIiBlbmRzcGFuIGktY2hlY2tzdW09IjM4NTEwIiAtLT48L3A+CisKKyAgPHA+PGk+Q29weXJpZ2h0ICZjb3B5OyAyMDAwIENhZGVuemEgTmV3IFplYWxhbmQgTHRkLjwvaT48L3A+CisKKyAgPHA+PGk+RGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCisgIGFjY29tcGFueWluZyBmaWxlIDxhIGhyZWY9Ii4uLy4uL0xJQ0VOU0VfMV8wLnR4dCI+TElDRU5TRV8xXzAudHh0PC9hPiBvcgorICBjb3B5IGF0IDxhIGhyZWY9CisgICJodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQiPmh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvYT4pPC9pPjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9uZWdhdG9ycy5odG1sIGIvbGlicy9mdW5jdGlvbmFsL25lZ2F0b3JzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQzMTc1MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9uZWdhdG9ycy5odG1sCkBAIC0wLDAgKzEsMTU4IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKworPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1MYW5ndWFnZSIgY29udGVudD0iZW4tdXMiPgorICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11cy1hc2NpaSI+CisKKyAgPHRpdGxlPkJvb3N0IEZ1bmN0aW9uIE9iamVjdCBBZGFwdGVyIExpYnJhcnk8L3RpdGxlPgorPC9oZWFkPgorCis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDAwIj4KKyAgPHRhYmxlIGJvcmRlcj0iMSIgYmdjb2xvcj0iIzAwN0Y3RiIgY2VsbHBhZGRpbmc9IjIiIHN1bW1hcnk9IiI+CisgICAgPHRyPgorICAgICAgPHRkIGJnY29sb3I9IiNGRkZGRkYiPjxpbWcgc3JjPSIuLi8uLi9ib29zdC5wbmciIGFsdD0KKyAgICAgICJib29zdC5wbmcgKDY4OTcgYnl0ZXMpIiB3aWR0aD0iMjc3IiBoZWlnaHQ9Ijg2Ij48L3RkPgorCisgICAgICA8dGQ+PGEgaHJlZj0iLi4vLi4vaW5kZXguaHRtIj48Zm9udCBmYWNlPSJBcmlhbCIgY29sb3I9CisgICAgICAiI0ZGRkZGRiI+PGJpZz5Ib21lPC9iaWc+PC9mb250PjwvYT48L3RkPgorCisgICAgICA8dGQ+PGEgaHJlZj0iLi4vbGlicmFyaWVzLmh0bSI+PGZvbnQgZmFjZT0iQXJpYWwiIGNvbG9yPQorICAgICAgIiNGRkZGRkYiPjxiaWc+TGlicmFyaWVzPC9iaWc+PC9mb250PjwvYT48L3RkPgorCisgICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvcGVvcGxlL3Blb3BsZS5odG0iPjxmb250IGZhY2U9IkFyaWFsIiBjb2xvcj0KKyAgICAgICIjRkZGRkZGIj48YmlnPlBlb3BsZTwvYmlnPjwvZm9udD48L2E+PC90ZD4KKworICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL21vcmUvZmFxLmh0bSI+PGZvbnQgZmFjZT0iQXJpYWwiIGNvbG9yPQorICAgICAgIiNGRkZGRkYiPjxiaWc+RkFRPC9iaWc+PC9mb250PjwvYT48L3RkPgorCisgICAgICA8dGQ+PGEgaHJlZj0iLi4vLi4vbW9yZS9pbmRleC5odG0iPjxmb250IGZhY2U9IkFyaWFsIiBjb2xvcj0KKyAgICAgICIjRkZGRkZGIj48YmlnPk1vcmU8L2JpZz48L2ZvbnQ+PC9hPjwvdGQ+CisgICAgPC90cj4KKyAgPC90YWJsZT4KKworICA8aDE+TmVnYXRvcnM8L2gxPgorCisgIDxwPlRoZSBoZWFkZXIgPGEgaHJlZj0iLi4vLi4vYm9vc3QvZnVuY3Rpb25hbC5ocHAiPmZ1bmN0aW9uYWwuaHBwPC9hPgorICBwcm92aWRlcyBlbmhhbmNlZCB2ZXJzaW9ucyBvZiBib3RoIHRoZSBuZWdhdG9yIGFkYXB0ZXJzIGZyb20gdGhlIEMrKworICBTdGFuZGFyZCBMaWJyYXJ5ICgmc2VjdDsyMC4zLjUpOjwvcD4KKworICA8dWw+CisgICAgPGxpPjx0dD51bmFyeV9uZWdhdGU8L3R0PjwvbGk+CisKKyAgICA8bGk+PHR0PmJpbmFyeV9uZWdhdGU8L3R0PjwvbGk+CisgIDwvdWw+CisKKyAgPHA+QXMgd2VsbCBhcyB0aGUgY29ycmVzcG9uZGluZyBoZWxwZXIgZnVuY3Rpb25zPC9wPgorCisgIDx1bD4KKyAgICA8bGk+PHR0Pm5vdDE8L3R0PjwvbGk+CisKKyAgICA8bGk+PHR0Pm5vdDI8L3R0PjwvbGk+CisgIDwvdWw+CisKKyAgPHA+SG93ZXZlciwgdGhlIG5lZ2F0b3JzIGluIHRoaXMgbGlicmFyeSBpbXByb3ZlIG9uIHRoZSBzdGFuZGFyZCB2ZXJzaW9ucworICBpbiB0d28gd2F5czo8L3A+CisKKyAgPHVsPgorICAgIDxsaT5UaGV5IHVzZSA8YSBocmVmPSJmdW5jdGlvbl90cmFpdHMuaHRtbCI+ZnVuY3Rpb24gb2JqZWN0IHRyYWl0czwvYT4gdG8KKyAgICBhdm9pZCB0aGUgbmVlZCBmb3IgPHR0PnB0cl9mdW48L3R0PiB3aGVuIG5lZ2F0aW5nIGEgZnVuY3Rpb24gcmF0aGVyIHRoYW4KKyAgICBhbiBhZGFwdGFibGUgZnVuY3Rpb24gb2JqZWN0LjwvbGk+CisKKyAgICA8bGk+VGhleSB1c2UgQm9vc3QgPGEgaHJlZj0KKyAgICAiLi4vdXRpbGl0eS9jYWxsX3RyYWl0cy5odG0iPmNhbGwmbmJzcDt0cmFpdHM8L2E+IHRvIGRldGVybWluZSB0aGUgYmVzdAorICAgIHdheSB0byBkZWNsYXJlIHRoZWlyIGFyZ3VtZW50cyBhbmQgcGFzcyB0aGVtIHRocm91Z2ggdG8gdGhlIGFkYXB0ZWQKKyAgICBmdW5jdGlvbiAoc2VlIDxhIGhyZWY9IiNhcmd1bWVudHMiPmJlbG93PC9hPikuPC9saT4KKyAgPC91bD4KKworICA8aDM+VXNhZ2U8L2gzPgorCisgIDxwPlVzYWdlIGlzIGlkZW50aWNhbCB0byB0aGUgc3RhbmRhcmQgbmVnYXRvcnMuIEZvciBleGFtcGxlLDwvcD4KKworICA8YmxvY2txdW90ZT4KKyAgICA8cHJlPgorYm9vbCBiYWQoY29uc3QgRm9vICZhbXA7Zm9vKSB7IC4uLiB9CisuLi4KK3N0ZDo6dmVjdG9yJmx0O0ZvbyZndDsgYzsKKy4uLgorc3RkOjpmaW5kX2lmKGMuYmVnaW4oKSwgYy5lbmQoKSwgYm9vc3Q6Om5vdDEoYmFkKSk7Cis8L3ByZT4KKyAgPC9ibG9ja3F1b3RlPgorCisgIDxoMyBpZD0iYXJndW1lbnRzIj5Bcmd1bWVudCBUeXBlczwvaDM+CisKKyAgPHA+VGhlIEMrKyBTdGFuZGFyZCAoJnNlY3Q7MjAuMy41KSBkZWZpbmVzIHVuYXJ5IG5lZ2F0ZSBsaWtlIHRoaXMgKGJpbmFyeQorICBuZWdhdGUgaXMgc2ltaWxhcik6PC9wPgorCisgIDxibG9ja3F1b3RlPgorICAgIDxwcmU+Cit0ZW1wbGF0ZSAmbHQ7Y2xhc3MgUHJlZGljYXRlJmd0OworICBjbGFzcyB1bmFyeV9uZWdhdGUKKyAgICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbiZsdDt0eXBlbmFtZSBQcmVkaWNhdGU6OmFyZ3VtZW50X3R5cGUsYm9vbCZndDsgeworcHVibGljOgorICBleHBsaWNpdCB1bmFyeV9uZWdhdGUoY29uc3QgUHJlZGljYXRlJmFtcDsgcHJlZCk7CisgIGJvb2wgb3BlcmF0b3IoKSg8c3Ryb25nPmNvbnN0IHR5cGVuYW1lIFByZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSZhbXA7PC9zdHJvbmc+IHgpIGNvbnN0OworfTsKKzwvcHJlPgorICA8L2Jsb2NrcXVvdGU+CisKKyAgPHA+Tm90ZSB0aGF0IGlmIHRoZSBQcmVkaWNhdGUncyA8dHQ+YXJndW1lbnRfdHlwZTwvdHQ+IGlzIGEgcmVmZXJlbmNlLCB0aGUKKyAgdHlwZSBvZiA8dHQ+b3BlcmF0b3IoKTwvdHQ+J3MgYXJndW1lbnQgd291bGQgYmUgYSByZWZlcmVuY2UgdG8gYSByZWZlcmVuY2UuCisgIEN1cnJlbnRseSB0aGlzIGlzIGlsbGVnYWwgaW4gQysrIChidXQgc2VlIHRoZSA8YSBocmVmPQorICAiaHR0cDovL2FudWJpcy5ka3V1Zy5kay9qdGMxL3NjMjIvd2cyMS9kb2NzL2N3Z19hY3RpdmUuaHRtbCMxMDYiPkMrKworICBzdGFuZGFyZCBjb3JlIGxhbmd1YWdlIGFjdGl2ZSBpc3N1ZXMgbGlzdDwvYT4pLjwvcD4KKworICA8cD5Ib3dldmVyLCBpZiB3ZSBpbnN0ZWFkIGRlZmluZWQgPHR0Pm9wZXJhdG9yKCk8L3R0PiB0byBhY2NlcHQgUHJlZGljYXRlJ3MKKyAgYXJndW1lbnRfdHlwZSB1bm1vZGlmaWVkLCB0aGlzIHdvdWxkIGJlIG5lZWRsZXNzbHkgaW5lZmZpY2llbnQgaWYgaXQgd2VyZSBhCisgIHZhbHVlIHR5cGU7IHRoZSBhcmd1bWVudCB3b3VsZCBiZSBjb3BpZWQgdHdpY2UgLSBvbmNlIHdoZW4gY2FsbGluZworICA8dHQ+dW5hcnlfbmVnYXRlPC90dD4ncyA8dHQ+b3BlcmF0b3IoKTwvdHQ+LCBhbmQgYWdhaW4gd2hlbgorICA8dHQ+b3BlcmF0b3IoKTwvdHQ+IGNhbGxlZCB0aGUgYWRhcHRlZCBmdW5jdGlvbi48L3A+CisKKyAgPHA+U28gaG93IHdlIHdhbnQgdG8gZGVjbGFyZSB0aGUgYXJndW1lbnQgZm9yIDx0dD5vcGVyYXRvcigpPC90dD4gZGVwZW5kcworICBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgUHJlZGljYXRlJ3MgPHR0PmFyZ3VtZW50X3R5cGU8L3R0PiBpcyBhIHJlZmVyZW5jZS4gSWYKKyAgaXQgaXMgYSByZWZlcmVuY2UsIHdlIHdhbnQgdG8gZGVjbGFyZSBpdCBzaW1wbHkgYXMgPHR0PmFyZ3VtZW50X3R5cGU8L3R0PjsKKyAgaWYgaXQgaXMgYSB2YWx1ZSB3ZSB3YW50IHRvIGRlY2xhcmUgaXQgYXMKKyAgPHR0PmNvbnN0Jm5ic3A7YXJndW1lbnRfdHlwZSZhbXA7PC90dD4uPC9wPgorCisgIDxwPlRoZSBCb29zdCA8YSBocmVmPSIuLi91dGlsaXR5L2NhbGxfdHJhaXRzLmh0bSI+Y2FsbF90cmFpdHM8L2E+IGNsYXNzCisgIHRlbXBsYXRlIGNvbnRhaW5zIGEgPHR0PnBhcmFtX3R5cGU8L3R0PiB0eXBlZGVmLCB3aGljaCB1c2VzIHBhcnRpYWwKKyAgc3BlY2lhbGlzYXRpb24gdG8gbWFrZSBwcmVjaXNlbHkgdGhpcyBkZWNpc2lvbi4gSWYgd2Ugd2VyZSB0byBkZWNsYXJlCisgIDx0dD5vcGVyYXRvcigpPC90dD4gYXM8L3A+CisKKyAgPGJsb2NrcXVvdGU+CisgICAgPHByZT4KK2Jvb2wgb3BlcmF0b3IoKSh0eXBlbmFtZSBjYWxsX3RyYWl0cyZsdDt0eXBlbmFtZSBQcmVkaWNhdGU6OmFyZ3VtZW50X3R5cGUmZ3Q7OjpwYXJhbV90eXBlIHgpIGNvbnN0Cis8L3ByZT4KKyAgPC9ibG9ja3F1b3RlPgorCisgIDxwPnRoZSBkZXNpcmVkIHJlc3VsdCB3b3VsZCBiZSBhY2hpZXZlZCAtIHdlIHdvdWxkIGVsaW1pbmF0ZSByZWZlcmVuY2VzIHRvCisgIHJlZmVyZW5jZXMgd2l0aG91dCBsb3NzIG9mIGVmZmljaWVuY3kuIEluIGZhY3QsIHRoZSBhY3R1YWwgZGVjbGFyYXRpb24gaXMKKyAgc2xpZ2h0bHkgbW9yZSBjb21wbGljYXRlZCBiZWNhdXNlIG9mIHRoZSB1c2Ugb2YgZnVuY3Rpb24gb2JqZWN0IHRyYWl0cywgYnV0CisgIHRoZSBlZmZlY3QgcmVtYWlucyB0aGUgc2FtZS48L3A+CisKKyAgPGgzPkxpbWl0YXRpb25zPC9oMz4KKworICA8cD5Cb3RoIHRoZSBmdW5jdGlvbiBvYmplY3QgdHJhaXRzIGFuZCBjYWxsIHRyYWl0cyB1c2VkIHRvIHJlYWxpc2UgdGhlc2UKKyAgaW1wcm92ZW1lbnRzIHJlbHkgb24gcGFydGlhbCBzcGVjaWFsaXNhdGlvbiwgdGhlc2UgaW1wcm92ZW1lbnRzIGFyZSBvbmx5CisgIGF2YWlsYWJsZSBvbiBjb21waWxlcnMgdGhhdCBzdXBwb3J0IHRoYXQgZmVhdHVyZS4gV2l0aCBvdGhlciBjb21waWxlcnMsIHRoZQorICBuZWdhdG9ycyBpbiB0aGlzIGxpYnJhcnkgYmVoYXZlIHZlcnkgbXVjaCBsaWtlIHRob3NlIGluIHRoZSBTdGFuZGFyZCAtCisgIDx0dD5wdHJfZnVuPC90dD4gd2lsbCBiZSByZXF1aXJlZCB0byBhZGFwdCBmdW5jdGlvbnMsIGFuZCByZWZlcmVuY2VzIHRvCisgIHJlZmVyZW5jZXMgd2lsbCBub3QgYmUgYXZvaWRlZC48L3A+CisgIDxocj4KKworICA8cD48YSBocmVmPSJodHRwOi8vdmFsaWRhdG9yLnczLm9yZy9jaGVjaz91cmk9cmVmZXJlciI+PGltZyBib3JkZXI9IjAiIHNyYz0KKyAgIi4uLy4uL2RvYy9pbWFnZXMvdmFsaWQtaHRtbDQwMS5wbmciIGFsdD0iVmFsaWQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbCIKKyAgaGVpZ2h0PSIzMSIgd2lkdGg9Ijg4Ij48L2E+PC9wPgorCisgIDxwPlJldmlzZWQgCisgIDwhLS13ZWJib3QgYm90PSJUaW1lc3RhbXAiIHMtdHlwZT0iRURJVEVEIiBzLWZvcm1hdD0iJWQgJUIsICVZIiBzdGFydHNwYW4gLS0+MDIKKyAgRGVjZW1iZXIsIDIwMDY8IS0td2ViYm90IGJvdD0iVGltZXN0YW1wIiBlbmRzcGFuIGktY2hlY2tzdW09IjM4NTEwIiAtLT48L3A+CisKKyAgPHA+PGk+Q29weXJpZ2h0ICZjb3B5OyAyMDAwIENhZGVuemEgTmV3IFplYWxhbmQgTHRkLjwvaT48L3A+CisKKyAgPHA+PGk+RGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCisgIGFjY29tcGFueWluZyBmaWxlIDxhIGhyZWY9Ii4uLy4uL0xJQ0VOU0VfMV8wLnR4dCI+TElDRU5TRV8xXzAudHh0PC9hPiBvcgorICBjb3B5IGF0IDxhIGhyZWY9CisgICJodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQiPmh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvYT4pPC9pPjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2RvYy9KYW1maWxlLnYyIGIvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vZG9jL0phbWZpbGUudjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRjMTNkZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2RvYy9KYW1maWxlLnYyCkBAIC0wLDAgKzEsMzIgQEAKKworIyBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMiBMb3JlbnpvIENhbWluaXRpCisjIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMAorIyAoc2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBhIGNvcHkgYXQKKyMgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorIyBIb21lIGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uCisKK2ltcG9ydCBxdWlja2Jvb2sgOwordXNpbmcgYm9vc3Rib29rIDsKKworZG94eWdlbiByZWZlcmVuY2UKKyAgICA6ICAgLi4vLi4vLi4vLi4vYm9vc3QvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uLmhwcAorICAgICAgICAuLi8uLi8uLi8uLi9ib29zdC9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vY29uZmlnLmhwcAorICAgIDogICA8cmVmdGl0bGU+IlJlZmVyZW5jZSIKKyAgICAgICAgPGRveHlnZW46cGFyYW0+UFJFREVGSU5FRD0iRE9YWUdFTiIKKyAgICAgICAgPGRveHlnZW46cGFyYW0+UVVJRVQ9WUVTCisgICAgICAgIDxkb3h5Z2VuOnBhcmFtPldBUk5fSUZfVU5ET0NVTUVOVEVEPU5PCisgICAgICAgIDxkb3h5Z2VuOnBhcmFtPkhJREVfVU5ET0NfTUVNQkVSUz1ZRVMKKyAgICAgICAgPGRveHlnZW46cGFyYW0+SElERV9VTkRPQ19DTEFTU0VTPVlFUworICAgICAgICA8ZG94eWdlbjpwYXJhbT5BTElBU0VTPSIgUGFyYW1zPVwiPGI+UGFyYW1ldGVyczo8L2I+IDx0YWJsZSBib3JkZXI9IjAiPlwiIFBhcmFtezJ9PVwiPHRyPjx0ZD48Yj48dHQ+XFwxPC90dD48L2I+PC90ZD48dGQ+XFwyPC90ZD48L3RyPlwiIEVuZFBhcmFtcz1cIjwvdGFibGU+XCIgUmV0dXJucz1cIjxiPlJldHVybnM6PC9iPlwiIE5vdGU9XCI8Yj5Ob3RlOjwvYj5cIiBXYXJuaW5nPVwiPGI+V2FybmluZzo8L2I+XCIgU2VlPVwiPGI+U2VlOjwvYj5cIiBSZWZTZWN0ezJ9PVwiXFx4bWxvbmx5PGxpbmsgbGlua2VuZD0nYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24uXFwxJz5cXDI8L2xpbms+XFxlbmR4bWxvbmx5XCIgUmVmQ2xhc3N7MX09XCJcXHhtbG9ubHk8Y29tcHV0ZXJvdXRwdXQ+PGNsYXNzbmFtZSBhbHQ9J1xcMSc+XFwxPC9jbGFzc25hbWU+PC9jb21wdXRlcm91dHB1dD5cXGVuZHhtbG9ubHlcIiBSZWZGdW5jezF9PVwiXFx4bWxvbmx5PGNvbXB1dGVyb3V0cHV0PjxmdW5jdGlvbm5hbWUgYWx0PSdcXDEnPlxcMTwvZnVuY3Rpb25uYW1lPjwvY29tcHV0ZXJvdXRwdXQ+XFxlbmR4bWxvbmx5XCIgUmVmTWFjcm97MX09XCJcXHhtbG9ubHk8Y29tcHV0ZXJvdXRwdXQ+PG1hY3JvbmFtZSBhbHQ9J1xcMSc+XFwxPC9tYWNyb25hbWU+PC9jb21wdXRlcm91dHB1dD5cXGVuZHhtbG9ubHlcIiAiCisgICAgOworCit4bWwgcWJrIDogb3ZlcmxvYWRlZF9mdW5jdGlvbi5xYmsgOiA8ZGVwZW5kZW5jeT5yZWZlcmVuY2UgOworCitib29zdGJvb2sgZG9jIDogcWJrCisgICAgOiAgIDx4c2w6cGFyYW0+Ym9vc3Qucm9vdD0uLi8uLi8uLi8uLi8uLgorICAgICAgICA8eHNsOnBhcmFtPmJvb3N0LmRlZmF1bHRzPUJvb3N0CisgICAgICAgIDxmb3JtYXQ+cGRmOjx4c2w6cGFyYW0+Ym9vc3QudXJsLnByZWZpeD1odHRwOi8vd3d3LmJvb3N0Lm9yZy9kb2MvbGlicy9yZWxlYXNlL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2RvYy9odG1sCisgICAgOworCitpbnN0YWxsIHBkZmluc3RhbGwgOiBkb2MvPGZvcm1hdD5wZGYgOiA8bG9jYXRpb24+LiA8aW5zdGFsbC10eXBlPlBERiA8bmFtZT5vdmVybG9hZGVkX2Z1bmN0aW9uLnBkZiA7CitleHBsaWNpdCBwZGZpbnN0YWxsIDsKZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2RvYy9odG1sL0JPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfQVJJVFlfTUFYLmh0bWwgYi9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9kb2MvaHRtbC9CT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX0FSSVRZX01BWC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiYWYxYTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9kb2MvaHRtbC9CT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX0FSSVRZX01BWC5odG1sCkBAIC0wLDAgKzEsNTQgQEAKKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VUy1BU0NJSSI+Cis8dGl0bGU+TWFjcm8gQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19BUklUWV9NQVg8L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2Jvb3N0Ym9vay5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzYuMSI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJDaGFwdGVyJiMxNjA7MS4mIzE2MDtCb29zdC5GdW5jdGlvbmFsL092ZXJsb2FkZWRGdW5jdGlvbiAxLjAuMCI+Cis8bGluayByZWw9InVwIiBocmVmPSJyZWZlcmVuY2UuaHRtbCNoZWFkZXIuYm9vc3QuZnVuY3Rpb25hbC5vdmVybG9hZGVkX2Z1bmN0aW9uLmNvbmZpZ19ocHAiIHRpdGxlPSJIZWFkZXIgJmx0O2Jvb3N0L2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9jb25maWcuaHBwJmd0OyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImJvb3N0L21ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIiB0aXRsZT0iRnVuY3Rpb24gdGVtcGxhdGUgbWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0iQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVguaHRtbCIgdGl0bGU9Ik1hY3JvIEJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfT1ZFUkxPQURfTUFYIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjZWxscGFkZGluZz0iMiIgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+PGltZyBhbHQ9IkJvb3N0IEMrKyBMaWJyYXJpZXMiIHdpZHRoPSIyNzciIGhlaWdodD0iODYiIHNyYz0iLi4vLi4vLi4vLi4vLi4vYm9vc3QucG5nIj48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWwiPkhvbWU8L2E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi8uLi9saWJzL2xpYnJhcmllcy5odG0iPkxpYnJhcmllczwvYT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL3VzZXJzL3Blb3BsZS5odG1sIj5QZW9wbGU8L2E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy91c2Vycy9mYXEuaHRtbCI+RkFRPC9hPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vbW9yZS9pbmRleC5odG0iPk1vcmU8L2E+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxocj4KKzxkaXYgY2xhc3M9InNwaXJpdC1uYXYiPgorPGEgYWNjZXNza2V5PSJwIiBocmVmPSJib29zdC9tYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL3ByZXYucG5nIiBhbHQ9IlByZXYiPjwvYT48YSBhY2Nlc3NrZXk9InUiIGhyZWY9InJlZmVyZW5jZS5odG1sI2hlYWRlci5ib29zdC5mdW5jdGlvbmFsLm92ZXJsb2FkZWRfZnVuY3Rpb24uY29uZmlnX2hwcCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL3VwLnBuZyIgYWx0PSJVcCI+PC9hPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL2hvbWUucG5nIiBhbHQ9IkhvbWUiPjwvYT48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9IkJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfT1ZFUkxPQURfTUFYLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9uZXh0LnBuZyIgYWx0PSJOZXh0Ij48L2E+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KKzxhIG5hbWU9IkJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfQVJJVFlfTUFYIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPgorPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj5NYWNybyBCT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX0FSSVRZX01BWDwvc3Bhbj48L2gyPgorPHA+Qk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19BUklUWV9NQVggJiM4MjEyOyBTcGVjaWZ5IHRoZSBtYXhpbXVtIG51bWJlciBvZiBhcmd1bWVudHMgb2YgdGhlIGZ1bmN0aW9ucyBiZWluZyBvdmVybG9hZGVkLiA8L3A+Cis8L2Rpdj4KKzxoMiB4bWxuczpyZXY9Imh0dHA6Ly93d3cuY3MucnBpLmVkdS9+Z3JlZ29kL2Jvb3N0L3Rvb2xzL2RvYy9yZXZpc2lvbiIgY2xhc3M9InJlZnN5bm9wc2lzZGl2LXRpdGxlIj5TeW5vcHNpczwvaDI+Cis8ZGl2IHhtbG5zOnJldj0iaHR0cDovL3d3dy5jcy5ycGkuZWR1L35ncmVnb2QvYm9vc3QvdG9vbHMvZG9jL3JldmlzaW9uIiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPjxwcmUgY2xhc3M9InN5bm9wc2lzIj48c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gSW4gaGVhZGVyOiAmbHQ7PGEgY2xhc3M9ImxpbmsiIGhyZWY9InJlZmVyZW5jZS5odG1sI2hlYWRlci5ib29zdC5mdW5jdGlvbmFsLm92ZXJsb2FkZWRfZnVuY3Rpb24uY29uZmlnX2hwcCIgdGl0bGU9IkhlYWRlciAmbHQ7Ym9vc3QvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2NvbmZpZy5ocHAmZ3Q7Ij5ib29zdC9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vY29uZmlnLmhwcDwvYT4mZ3Q7CisKKzwvc3Bhbj5CT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX0FSSVRZX01BWDwvcHJlPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDEiPgorPGEgbmFtZT0iaWQ4MjE1NTYiPjwvYT48aDI+RGVzY3JpcHRpb248L2gyPgorPHA+SWYgdGhpcyBtYWNybyBpcyBsZWZ0IHVuZGVmaW5lZCBieSB0aGUgdXNlciwgaXQgaGFzIGEgZGVmYXVsdCB2YWx1ZSBvZiA1IChpbmNyZWFzaW5nIHRoaXMgbnVtYmVyIG1pZ2h0IGluY3JlYXNlIGNvbXBpbGF0aW9uIHRpbWUpLiBXaGVuIHNwZWNpZmllZCBieSB0aGUgdXNlciwgdGhpcyBtYWNybyBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgbnVtYmVyLjwvcD4KKzxwPjxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPlNlZTo8L3N0cm9uZz48L3NwYW4+ICA8YSBjbGFzcz0ibGluayIgaHJlZj0iYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24vZ2V0dGluZ19zdGFydGVkLmh0bWwiIHRpdGxlPSJHZXR0aW5nIFN0YXJ0ZWQiPiBHZXR0aW5nIFN0YXJ0ZWQ8L2E+LCAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0iYm9vc3Qvb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIiB0aXRsZT0iQ2xhc3MgdGVtcGxhdGUgb3ZlcmxvYWRlZF9mdW5jdGlvbiI+Ym9vc3Q6Om92ZXJsb2FkZWRfZnVuY3Rpb248L2E+PC9jb2RlPi4gPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzx0YWJsZSB4bWxuczpyZXY9Imh0dHA6Ly93d3cuY3MucnBpLmVkdS9+Z3JlZ29kL2Jvb3N0L3Rvb2xzL2RvYy9yZXZpc2lvbiIgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCBhbGlnbj0ibGVmdCI+PC90ZD4KKzx0ZCBhbGlnbj0icmlnaHQiPjxkaXYgY2xhc3M9ImNvcHlyaWdodC1mb290ZXIiPkNvcHlyaWdodCAmIzE2OTsgMjAxMSwgMjAxMiBMb3JlbnpvIENhbWluaXRpPHA+CisgICAgICAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMCAoc2VlIGFjY29tcGFueWluZworICAgICAgICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCIgdGFyZ2V0PSJfdG9wIj5odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KQorICAgICAgPC9wPgorPC9kaXY+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxocj4KKzxkaXYgY2xhc3M9InNwaXJpdC1uYXYiPgorPGEgYWNjZXNza2V5PSJwIiBocmVmPSJib29zdC9tYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL3ByZXYucG5nIiBhbHQ9IlByZXYiPjwvYT48YSBhY2Nlc3NrZXk9InUiIGhyZWY9InJlZmVyZW5jZS5odG1sI2hlYWRlci5ib29zdC5mdW5jdGlvbmFsLm92ZXJsb2FkZWRfZnVuY3Rpb24uY29uZmlnX2hwcCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL3VwLnBuZyIgYWx0PSJVcCI+PC9hPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL2hvbWUucG5nIiBhbHQ9IkhvbWUiPjwvYT48YSBhY2Nlc3NrZXk9Im4iIGhyZWY9IkJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfT1ZFUkxPQURfTUFYLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9uZXh0LnBuZyIgYWx0PSJOZXh0Ij48L2E+Cis8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2RvYy9odG1sL0JPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfT1ZFUkxPQURfTUFYLmh0bWwgYi9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9kb2MvaHRtbC9CT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX09WRVJMT0FEX01BWC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYmI1NTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9kb2MvaHRtbC9CT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX09WRVJMT0FEX01BWC5odG1sCkBAIC0wLDAgKzEsNTQgQEAKKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VUy1BU0NJSSI+Cis8dGl0bGU+TWFjcm8gQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVg8L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2Jvb3N0Ym9vay5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzYuMSI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJDaGFwdGVyJiMxNjA7MS4mIzE2MDtCb29zdC5GdW5jdGlvbmFsL092ZXJsb2FkZWRGdW5jdGlvbiAxLjAuMCI+Cis8bGluayByZWw9InVwIiBocmVmPSJyZWZlcmVuY2UuaHRtbCNoZWFkZXIuYm9vc3QuZnVuY3Rpb25hbC5vdmVybG9hZGVkX2Z1bmN0aW9uLmNvbmZpZ19ocHAiIHRpdGxlPSJIZWFkZXIgJmx0O2Jvb3N0L2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9jb25maWcuaHBwJmd0OyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9IkJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfQVJJVFlfTUFYLmh0bWwiIHRpdGxlPSJNYWNybyBCT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX0FSSVRZX01BWCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uL2Fja25vd2xlZGdtZW50cy5odG1sIiB0aXRsZT0iQWNrbm93bGVkZ21lbnRzIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjZWxscGFkZGluZz0iMiIgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+PGltZyBhbHQ9IkJvb3N0IEMrKyBMaWJyYXJpZXMiIHdpZHRoPSIyNzciIGhlaWdodD0iODYiIHNyYz0iLi4vLi4vLi4vLi4vLi4vYm9vc3QucG5nIj48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWwiPkhvbWU8L2E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi8uLi9saWJzL2xpYnJhcmllcy5odG0iPkxpYnJhcmllczwvYT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL3VzZXJzL3Blb3BsZS5odG1sIj5QZW9wbGU8L2E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy91c2Vycy9mYXEuaHRtbCI+RkFRPC9hPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vbW9yZS9pbmRleC5odG0iPk1vcmU8L2E+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxocj4KKzxkaXYgY2xhc3M9InNwaXJpdC1uYXYiPgorPGEgYWNjZXNza2V5PSJwIiBocmVmPSJCT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX0FSSVRZX01BWC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvcHJldi5wbmciIGFsdD0iUHJldiI+PC9hPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0icmVmZXJlbmNlLmh0bWwjaGVhZGVyLmJvb3N0LmZ1bmN0aW9uYWwub3ZlcmxvYWRlZF9mdW5jdGlvbi5jb25maWdfaHBwIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvdXAucG5nIiBhbHQ9IlVwIj48L2E+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvaG9tZS5wbmciIGFsdD0iSG9tZSI+PC9hPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24vYWNrbm93bGVkZ21lbnRzLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9uZXh0LnBuZyIgYWx0PSJOZXh0Ij48L2E+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InJlZmVudHJ5Ij4KKzxhIG5hbWU9IkJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfT1ZFUkxPQURfTUFYIj48L2E+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZm5hbWVkaXYiPgorPGgyPjxzcGFuIGNsYXNzPSJyZWZlbnRyeXRpdGxlIj5NYWNybyBCT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX09WRVJMT0FEX01BWDwvc3Bhbj48L2gyPgorPHA+Qk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVggJiM4MjEyOyBTcGVjaWZ5IHRoZSBtYXhpbXVtIG51bWJlciBvZiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgb3ZlcmxvYWRlZC4gPC9wPgorPC9kaXY+Cis8aDIgeG1sbnM6cmV2PSJodHRwOi8vd3d3LmNzLnJwaS5lZHUvfmdyZWdvZC9ib29zdC90b29scy9kb2MvcmV2aXNpb24iIGNsYXNzPSJyZWZzeW5vcHNpc2Rpdi10aXRsZSI+U3lub3BzaXM8L2gyPgorPGRpdiB4bWxuczpyZXY9Imh0dHA6Ly93d3cuY3MucnBpLmVkdS9+Z3JlZ29kL2Jvb3N0L3Rvb2xzL2RvYy9yZXZpc2lvbiIgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij48cHJlIGNsYXNzPSJzeW5vcHNpcyI+PHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIEluIGhlYWRlcjogJmx0OzxhIGNsYXNzPSJsaW5rIiBocmVmPSJyZWZlcmVuY2UuaHRtbCNoZWFkZXIuYm9vc3QuZnVuY3Rpb25hbC5vdmVybG9hZGVkX2Z1bmN0aW9uLmNvbmZpZ19ocHAiIHRpdGxlPSJIZWFkZXIgJmx0O2Jvb3N0L2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9jb25maWcuaHBwJmd0OyI+Ym9vc3QvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2NvbmZpZy5ocHA8L2E+Jmd0OworCis8L3NwYW4+Qk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVg8L3ByZT48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImlkODIxNjE0Ij48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KKzxwPklmIHRoaXMgbWFjcm8gaXMgbGVmdCB1bmRlZmluZWQgYnkgdGhlIHVzZXIsIGl0IGhhcyBhIGRlZmF1bHQgdmFsdWUgb2YgNSAoaW5jcmVhc2luZyB0aGlzIG51bWJlciBtaWdodCBpbmNyZWFzZSBjb21waWxhdGlvbiB0aW1lKS4gV2hlbiBkZWZpbmVkIGJ5IHRoZSB1c2VyLCB0aGlzIG1hY3JvIG11c3QgYmUgYW4gaW50ZWdlciBudW1iZXIgZ3JlYXRlciBvciBlcXVhbCB0aGFuIDIgKGJlY2F1c2UgYXQgbGVhc3QgdHdvIGRpc3RpbmN0IGZ1bmN0aW9ucyBuZWVkIHRvIGJlIHNwZWNpZmllZCBpbiBvcmRlciB0byBkZWZpbmUgYW4gb3ZlcmxvYWQpLjwvcD4KKzxwPjxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPlNlZTo8L3N0cm9uZz48L3NwYW4+ICA8YSBjbGFzcz0ibGluayIgaHJlZj0iYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24vZ2V0dGluZ19zdGFydGVkLmh0bWwiIHRpdGxlPSJHZXR0aW5nIFN0YXJ0ZWQiPiBHZXR0aW5nIFN0YXJ0ZWQ8L2E+LCAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0iYm9vc3Qvb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIiB0aXRsZT0iQ2xhc3MgdGVtcGxhdGUgb3ZlcmxvYWRlZF9mdW5jdGlvbiI+Ym9vc3Q6Om92ZXJsb2FkZWRfZnVuY3Rpb248L2E+PC9jb2RlPi4gPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzx0YWJsZSB4bWxuczpyZXY9Imh0dHA6Ly93d3cuY3MucnBpLmVkdS9+Z3JlZ29kL2Jvb3N0L3Rvb2xzL2RvYy9yZXZpc2lvbiIgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCBhbGlnbj0ibGVmdCI+PC90ZD4KKzx0ZCBhbGlnbj0icmlnaHQiPjxkaXYgY2xhc3M9ImNvcHlyaWdodC1mb290ZXIiPkNvcHlyaWdodCAmIzE2OTsgMjAxMSwgMjAxMiBMb3JlbnpvIENhbWluaXRpPHA+CisgICAgICAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMCAoc2VlIGFjY29tcGFueWluZworICAgICAgICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCIgdGFyZ2V0PSJfdG9wIj5odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KQorICAgICAgPC9wPgorPC9kaXY+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxocj4KKzxkaXYgY2xhc3M9InNwaXJpdC1uYXYiPgorPGEgYWNjZXNza2V5PSJwIiBocmVmPSJCT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX0FSSVRZX01BWC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvcHJldi5wbmciIGFsdD0iUHJldiI+PC9hPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0icmVmZXJlbmNlLmh0bWwjaGVhZGVyLmJvb3N0LmZ1bmN0aW9uYWwub3ZlcmxvYWRlZF9mdW5jdGlvbi5jb25maWdfaHBwIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvdXAucG5nIiBhbHQ9IlVwIj48L2E+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvaG9tZS5wbmciIGFsdD0iSG9tZSI+PC9hPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24vYWNrbm93bGVkZ21lbnRzLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9uZXh0LnBuZyIgYWx0PSJOZXh0Ij48L2E+Cis8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2RvYy9odG1sL2Jvb3N0L21ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIGIvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vZG9jL2h0bWwvYm9vc3QvbWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFmNWYzOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2RvYy9odG1sL2Jvb3N0L21ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sCkBAIC0wLDAgKzEsNjAgQEAKKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VUy1BU0NJSSI+Cis8dGl0bGU+RnVuY3Rpb24gdGVtcGxhdGUgbWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uPC90aXRsZT4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9ib29zdGJvb2suY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc2LjEiPgorPGxpbmsgcmVsPSJob21lIiBocmVmPSIuLi9pbmRleC5odG1sIiB0aXRsZT0iQ2hhcHRlciYjMTYwOzEuJiMxNjA7Qm9vc3QuRnVuY3Rpb25hbC9PdmVybG9hZGVkRnVuY3Rpb24gMS4wLjAiPgorPGxpbmsgcmVsPSJ1cCIgaHJlZj0iLi4vcmVmZXJlbmNlLmh0bWwjaGVhZGVyLmJvb3N0LmZ1bmN0aW9uYWwub3ZlcmxvYWRlZF9mdW5jdGlvbl9ocHAiIHRpdGxlPSJIZWFkZXIgJmx0O2Jvb3N0L2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi5ocHAmZ3Q7Ij4KKzxsaW5rIHJlbD0icHJldiIgaHJlZj0ib3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIiB0aXRsZT0iQ2xhc3MgdGVtcGxhdGUgb3ZlcmxvYWRlZF9mdW5jdGlvbiI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ii4uL0JPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfQVJJVFlfTUFYLmh0bWwiIHRpdGxlPSJNYWNybyBCT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX0FSSVRZX01BWCI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjIiIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPjxpbWcgYWx0PSJCb29zdCBDKysgTGlicmFyaWVzIiB3aWR0aD0iMjc3IiBoZWlnaHQ9Ijg2IiBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2Jvb3N0LnBuZyI+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sIj5Ib21lPC9hPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9saWJyYXJpZXMuaHRtIj5MaWJyYXJpZXM8L2E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy91c2Vycy9wZW9wbGUuaHRtbCI+UGVvcGxlPC9hPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvdXNlcnMvZmFxLmh0bWwiPkZBUTwvYT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uLy4uL21vcmUvaW5kZXguaHRtIj5Nb3JlPC9hPjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8aHI+Cis8ZGl2IGNsYXNzPSJzcGlyaXQtbmF2Ij4KKzxhIGFjY2Vzc2tleT0icCIgaHJlZj0ib3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvcHJldi5wbmciIGFsdD0iUHJldiI+PC9hPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iLi4vcmVmZXJlbmNlLmh0bWwjaGVhZGVyLmJvb3N0LmZ1bmN0aW9uYWwub3ZlcmxvYWRlZF9mdW5jdGlvbl9ocHAiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy91cC5wbmciIGFsdD0iVXAiPjwvYT48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9ob21lLnBuZyIgYWx0PSJIb21lIj48L2E+PGEgYWNjZXNza2V5PSJuIiBocmVmPSIuLi9CT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX0FSSVRZX01BWC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvbmV4dC5wbmciIGFsdD0iTmV4dCI+PC9hPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZlbnRyeSI+Cis8YSBuYW1lPSJib29zdC5tYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24iPjwvYT48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjwvZGl2PgorPGRpdiBjbGFzcz0icmVmbmFtZWRpdiI+Cis8aDI+PHNwYW4gY2xhc3M9InJlZmVudHJ5dGl0bGUiPkZ1bmN0aW9uIHRlbXBsYXRlIG1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbjwvc3Bhbj48L2gyPgorPHA+Ym9vc3Q6Om1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbiAmIzgyMTI7IE1ha2UgYW4gb3ZlcmxvYWRlZCBmdW5jdGlvbiBvYmplY3Qgd2l0aG91dCBleHBsaWNpdGx5IHNwZWNpZnlpbmcgdGhlIGZ1bmN0aW9uIHR5cGVzLiA8L3A+Cis8L2Rpdj4KKzxoMiB4bWxuczpyZXY9Imh0dHA6Ly93d3cuY3MucnBpLmVkdS9+Z3JlZ29kL2Jvb3N0L3Rvb2xzL2RvYy9yZXZpc2lvbiIgY2xhc3M9InJlZnN5bm9wc2lzZGl2LXRpdGxlIj5TeW5vcHNpczwvaDI+Cis8ZGl2IHhtbG5zOnJldj0iaHR0cDovL3d3dy5jcy5ycGkuZWR1L35ncmVnb2QvYm9vc3QvdG9vbHMvZG9jL3JldmlzaW9uIiBjbGFzcz0icmVmc3lub3BzaXNkaXYiPjxwcmUgY2xhc3M9InN5bm9wc2lzIj48c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gSW4gaGVhZGVyOiAmbHQ7PGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii4uL3JlZmVyZW5jZS5odG1sI2hlYWRlci5ib29zdC5mdW5jdGlvbmFsLm92ZXJsb2FkZWRfZnVuY3Rpb25faHBwIiB0aXRsZT0iSGVhZGVyICZsdDtib29zdC9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24uaHBwJmd0OyI+Ym9vc3QvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uLmhwcDwvYT4mZ3Q7CisKKzwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJrZXl3b3JkIj50ZW1wbGF0ZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+IEYxPHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlbmFtZTwvc3Bhbj4gRjI8c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPi4uLjwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+IAorICA8YSBjbGFzcz0ibGluayIgaHJlZj0ib3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIiB0aXRsZT0iQ2xhc3MgdGVtcGxhdGUgb3ZlcmxvYWRlZF9mdW5jdGlvbiI+b3ZlcmxvYWRlZF9mdW5jdGlvbjwvYT48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPl9fZnVuY3Rpb25fdHlwZV9fPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RjE8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+X19mdW5jdGlvbl90eXBlX188L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GMjwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPi4uLjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4gCisgIDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5tYWtlX292ZXJsb2FkZWRfZnVuY3Rpb248L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkYxPC9zcGFuPiBmMTxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RjI8L3NwYW4+IGYyPHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4uLi48L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjs8L3NwYW4+PC9wcmU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZzZWN0MSI+Cis8YSBuYW1lPSJpZDgyMTM3NiI+PC9hPjxoMj5EZXNjcmlwdGlvbjwvaDI+Cis8cD5UaGlzIGZ1bmN0aW9uIHRlbXBsYXRlIGNyZWF0ZXMgYW5kIHJldHVybnMgYW4gIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0ib3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIiB0aXRsZT0iQ2xhc3MgdGVtcGxhdGUgb3ZlcmxvYWRlZF9mdW5jdGlvbiI+b3ZlcmxvYWRlZF9mdW5jdGlvbjwvYT48L2NvZGU+PC9jb2RlPiBvYmplY3QgdGhhdCBvdmVybG9hZHMgYWxsIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb25zIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+ZjE8L2NvZGU+LCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPmYyPC9jb2RlPiwgZXRjLjwvcD4KKzxwPlRoZSBmdW5jdGlvbiB0eXBlcyBhcmUgaW50ZXJuYWxseSBkZXRlcm1pbmVkIGZyb20gdGhlIHRlbXBsYXRlIHBhcmFtZXRlciB0eXBlcyBzbyB0aGV5IGRvIG5vdCBuZWVkIHRvIGJlIGV4cGxpY2l0bHkgc3BlY2lmaWVkLiBUaGVyZWZvcmUsIHRoaXMgZnVuY3Rpb24gdGVtcGxhdGUgdXN1YWxseSBoYXMgYSBtb3JlIGNvbmNpc2Ugc3ludGF4IHdoZW4gY29tcGFyZWQgd2l0aCAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJvdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiIHRpdGxlPSJDbGFzcyB0ZW1wbGF0ZSBvdmVybG9hZGVkX2Z1bmN0aW9uIj5vdmVybG9hZGVkX2Z1bmN0aW9uPC9hPjwvY29kZT48L2NvZGU+LiBUaGlzIGlzIGVzcGVjaWFsbHkgdXNlZnVsIHdoZW4gdGhlIGV4cGxpY2l0IHR5cGUgb2YgdGhlIHJldHVybmVkICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9Im92ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCIgdGl0bGU9IkNsYXNzIHRlbXBsYXRlIG92ZXJsb2FkZWRfZnVuY3Rpb24iPm92ZXJsb2FkZWRfZnVuY3Rpb248L2E+PC9jb2RlPjwvY29kZT4gb2JqZWN0IGRvZXMgbm90IG5lZWQgdG8gYmUga25vd24gKGUuZy4sIHdoZW4gdXNlZCB3aXRoIEJvb3N0LlR5cGVvZidzIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+Qk9PU1RfQVVUTzwvY29kZT4sIEMrKzExIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+YXV0bzwvY29kZT4sIG9yIHdoZW4gdGhlIG92ZXJsb2FkZWQgZnVuY3Rpb24gb2JqZWN0IGlzIGhhbmRsZWQgdXNpbmcgYSBmdW5jdGlvbiB0ZW1wbGF0ZSBwYXJhbWV0ZXIsIHNlZSB0aGUgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSIuLi9ib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi90dXRvcmlhbC5odG1sIiB0aXRsZT0iVHV0b3JpYWwiPiBUdXRvcmlhbDwvYT4gc2VjdGlvbikuPC9wPgorPHA+VGhlIG1heGltdW0gbnVtYmVyIG9mIGZ1bmN0aW9ucyB0byBvdmVybG9hZCBpcyBnaXZlbiBieSB0aGUgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0iLi4vQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVguaHRtbCIgdGl0bGU9Ik1hY3JvIEJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfT1ZFUkxPQURfTUFYIj5CT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX09WRVJMT0FEX01BWDwvYT48L2NvZGU+PC9jb2RlPiBjb25maWd1cmF0aW9uIG1hY3JvLjwvcD4KKzxwPjxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPk5vdGU6PC9zdHJvbmc+PC9zcGFuPiBJbiB0aGlzIGRvY3VtZW50YXRpb24sIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+X19mdW5jdGlvbl90eXBlX188L2NvZGU+IGlzIGEgcGxhY2Vob2xkZXIgZm9yIGEgc3ltYm9sIHRoYXQgaXMgc3BlY2lmaWMgdG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbGlicmFyeS48L3A+Cis8cD48c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5TZWU6PC9zdHJvbmc+PC9zcGFuPiAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii4uL2Jvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uL3R1dG9yaWFsLmh0bWwiIHRpdGxlPSJUdXRvcmlhbCI+IFR1dG9yaWFsPC9hPiBzZWN0aW9uLCAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJvdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiIHRpdGxlPSJDbGFzcyB0ZW1wbGF0ZSBvdmVybG9hZGVkX2Z1bmN0aW9uIj5vdmVybG9hZGVkX2Z1bmN0aW9uPC9hPjwvY29kZT48L2NvZGU+LCAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSIuLi9CT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX09WRVJMT0FEX01BWC5odG1sIiB0aXRsZT0iTWFjcm8gQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVgiPkJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfT1ZFUkxPQURfTUFYPC9hPjwvY29kZT48L2NvZGU+LiA8L3A+Cis8L2Rpdj4KKzwvZGl2PgorPHRhYmxlIHhtbG5zOnJldj0iaHR0cDovL3d3dy5jcy5ycGkuZWR1L35ncmVnb2QvYm9vc3QvdG9vbHMvZG9jL3JldmlzaW9uIiB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIGFsaWduPSJsZWZ0Ij48L3RkPgorPHRkIGFsaWduPSJyaWdodCI+PGRpdiBjbGFzcz0iY29weXJpZ2h0LWZvb3RlciI+Q29weXJpZ2h0ICYjMTY5OyAyMDExLCAyMDEyIExvcmVuem8gQ2FtaW5pdGk8cD4KKyAgICAgICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wIChzZWUgYWNjb21wYW55aW5nCisgICAgICAgIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0IiB0YXJnZXQ9Il90b3AiPmh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvYT4pCisgICAgICA8L3A+Cis8L2Rpdj48L3RkPgorPC90cj48L3RhYmxlPgorPGhyPgorPGRpdiBjbGFzcz0ic3Bpcml0LW5hdiI+Cis8YSBhY2Nlc3NrZXk9InAiIGhyZWY9Im92ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL3ByZXYucG5nIiBhbHQ9IlByZXYiPjwvYT48YSBhY2Nlc3NrZXk9InUiIGhyZWY9Ii4uL3JlZmVyZW5jZS5odG1sI2hlYWRlci5ib29zdC5mdW5jdGlvbmFsLm92ZXJsb2FkZWRfZnVuY3Rpb25faHBwIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvdXAucG5nIiBhbHQ9IlVwIj48L2E+PGEgYWNjZXNza2V5PSJoIiBocmVmPSIuLi9pbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvaG9tZS5wbmciIGFsdD0iSG9tZSI+PC9hPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iLi4vQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19BUklUWV9NQVguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL25leHQucG5nIiBhbHQ9Ik5leHQiPjwvYT4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vZG9jL2h0bWwvYm9vc3Qvb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIGIvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vZG9jL2h0bWwvYm9vc3Qvb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4YzYwMGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9kb2MvaHRtbC9ib29zdC9vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwKQEAgLTAsMCArMSwxMTIgQEAKKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VUy1BU0NJSSI+Cis8dGl0bGU+Q2xhc3MgdGVtcGxhdGUgb3ZlcmxvYWRlZF9mdW5jdGlvbjwvdGl0bGU+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvYm9vc3Rib29rLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43Ni4xIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iLi4vaW5kZXguaHRtbCIgdGl0bGU9IkNoYXB0ZXImIzE2MDsxLiYjMTYwO0Jvb3N0LkZ1bmN0aW9uYWwvT3ZlcmxvYWRlZEZ1bmN0aW9uIDEuMC4wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ii4uL3JlZmVyZW5jZS5odG1sI2hlYWRlci5ib29zdC5mdW5jdGlvbmFsLm92ZXJsb2FkZWRfZnVuY3Rpb25faHBwIiB0aXRsZT0iSGVhZGVyICZsdDtib29zdC9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24uaHBwJmd0OyI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ii4uL3JlZmVyZW5jZS5odG1sIiB0aXRsZT0iUmVmZXJlbmNlIj4KKzxsaW5rIHJlbD0ibmV4dCIgaHJlZj0ibWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiIHRpdGxlPSJGdW5jdGlvbiB0ZW1wbGF0ZSBtYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24iPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNlbGxwYWRkaW5nPSIyIiB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj48aW1nIGFsdD0iQm9vc3QgQysrIExpYnJhcmllcyIgd2lkdGg9IjI3NyIgaGVpZ2h0PSI4NiIgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9ib29zdC5wbmciPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbCI+SG9tZTwvYT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbGlicmFyaWVzLmh0bSI+TGlicmFyaWVzPC9hPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvdXNlcnMvcGVvcGxlLmh0bWwiPlBlb3BsZTwvYT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL3VzZXJzL2ZhcS5odG1sIj5GQVE8L2E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi8uLi8uLi9tb3JlL2luZGV4Lmh0bSI+TW9yZTwvYT48L3RkPgorPC90cj48L3RhYmxlPgorPGhyPgorPGRpdiBjbGFzcz0ic3Bpcml0LW5hdiI+Cis8YSBhY2Nlc3NrZXk9InAiIGhyZWY9Ii4uL3JlZmVyZW5jZS5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvcHJldi5wbmciIGFsdD0iUHJldiI+PC9hPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iLi4vcmVmZXJlbmNlLmh0bWwjaGVhZGVyLmJvb3N0LmZ1bmN0aW9uYWwub3ZlcmxvYWRlZF9mdW5jdGlvbl9ocHAiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy91cC5wbmciIGFsdD0iVXAiPjwvYT48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9ob21lLnBuZyIgYWx0PSJIb21lIj48L2E+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJtYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL25leHQucG5nIiBhbHQ9Ik5leHQiPjwvYT4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmZW50cnkiPgorPGEgbmFtZT0iYm9vc3Qub3ZlcmxvYWRlZF9mdW5jdGlvbiI+PC9hPjxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJyZWZuYW1lZGl2Ij4KKzxoMj48c3BhbiBjbGFzcz0icmVmZW50cnl0aXRsZSI+Q2xhc3MgdGVtcGxhdGUgb3ZlcmxvYWRlZF9mdW5jdGlvbjwvc3Bhbj48L2gyPgorPHA+Ym9vc3Q6Om92ZXJsb2FkZWRfZnVuY3Rpb24gJiM4MjEyOyBGdW5jdGlvbiBvYmplY3QgdG8gb3ZlcmxvYWQgZnVuY3Rpb25zIHdpdGggZGlzdGluY3Qgc2lnbmF0dXJlcy4gPC9wPgorPC9kaXY+Cis8aDIgeG1sbnM6cmV2PSJodHRwOi8vd3d3LmNzLnJwaS5lZHUvfmdyZWdvZC9ib29zdC90b29scy9kb2MvcmV2aXNpb24iIGNsYXNzPSJyZWZzeW5vcHNpc2Rpdi10aXRsZSI+U3lub3BzaXM8L2gyPgorPGRpdiB4bWxuczpyZXY9Imh0dHA6Ly93d3cuY3MucnBpLmVkdS9+Z3JlZ29kL2Jvb3N0L3Rvb2xzL2RvYy9yZXZpc2lvbiIgY2xhc3M9InJlZnN5bm9wc2lzZGl2Ij48cHJlIGNsYXNzPSJzeW5vcHNpcyI+PHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIEluIGhlYWRlcjogJmx0OzxhIGNsYXNzPSJsaW5rIiBocmVmPSIuLi9yZWZlcmVuY2UuaHRtbCNoZWFkZXIuYm9vc3QuZnVuY3Rpb25hbC5vdmVybG9hZGVkX2Z1bmN0aW9uX2hwcCIgdGl0bGU9IkhlYWRlciAmbHQ7Ym9vc3QvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uLmhwcCZndDsiPmJvb3N0L2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi5ocHA8L2E+Jmd0OworCis8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPnRlbXBsYXRlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlbmFtZTwvc3Bhbj4gRjE8c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVuYW1lPC9zcGFuPiBGMjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Li4uPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4gCis8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y2xhc3M8L3NwYW4+IDxhIGNsYXNzPSJsaW5rIiBocmVmPSJvdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiIHRpdGxlPSJDbGFzcyB0ZW1wbGF0ZSBvdmVybG9hZGVkX2Z1bmN0aW9uIj5vdmVybG9hZGVkX2Z1bmN0aW9uPC9hPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+ezwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJrZXl3b3JkIj5wdWJsaWM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo8L3NwYW4+CisgIDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyA8YSBjbGFzcz0ibGluayIgaHJlZj0ib3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sI2Jvb3N0Lm92ZXJsb2FkZWRfZnVuY3Rpb25jb25zdHJ1Y3QtY29weS1kZXN0cnVjdCI+Y29uc3RydWN0L2NvcHkvZGVzdHJ1Y3Q8L2E+PC9zcGFuPgorICA8YSBjbGFzcz0ibGluayIgaHJlZj0ib3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sI2lkMjU5MDkwLWJiIj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+b3ZlcmxvYWRlZF9mdW5jdGlvbjwvc3Bhbj48L2E+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jdGlvbjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkYxPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZhbXA7PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiAKKyAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmN0aW9uPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RjI8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+JmFtcDs8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4uLi48L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjs8L3NwYW4+CisKKyAgPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJvdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwjaWQyNTkwMjAtYmIiPnB1YmxpYyBtZW1iZXIgZnVuY3Rpb25zPC9hPjwvc3Bhbj4KKyAgPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuY3Rpb25fdHJhaXRzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RjE8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+cmVzdWx0X3R5cGU8L3NwYW4+IAorICA8YSBjbGFzcz0ibGluayIgaHJlZj0ib3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sI2lkMjU5MDIzLWJiIj48c3BhbiBjbGFzcz0ia2V5d29yZCI+b3BlcmF0b3I8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+PC9hPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlbmFtZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuY3Rpb25fdHJhaXRzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RjE8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YXJnMV90eXBlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiAKKyAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmN0aW9uX3RyYWl0czwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkYxPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFyZzJfdHlwZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPi4uLjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj47PC9zcGFuPgorICA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jdGlvbl90cmFpdHM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GMjwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5yZXN1bHRfdHlwZTwvc3Bhbj4gCisgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJvdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwjaWQyNTkwNDktYmIiPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5vcGVyYXRvcjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj48L2E+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPnR5cGVuYW1lPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jdGlvbl90cmFpdHM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GMjwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hcmcxX3R5cGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IAorICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlbmFtZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuY3Rpb25fdHJhaXRzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RjI8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YXJnMl90eXBlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Li4uPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjs8L3NwYW4+Cis8c3BhbiBjbGFzcz0ic3BlY2lhbCI+fTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj48L3ByZT48L2Rpdj4KKzxkaXYgY2xhc3M9InJlZnNlY3QxIj4KKzxhIG5hbWU9ImlkODIwNTkwIj48L2E+PGgyPkRlc2NyaXB0aW9uPC9oMj4KKzxwPlRoaXMgZnVuY3Rpb24gb2JqZWN0IGFnZ3JlZ2F0ZXMgdG9nZXRoZXIgY2FsbHMgdG8gZnVuY3Rpb25zIG9mIGFsbCB0aGUgc3BlY2lmaWVkIGZ1bmN0aW9uIHR5cGVzIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+RjE8L2NvZGU+LCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkYyPC9jb2RlPiwgZXRjIHdoaWNoIG11c3QgaGF2ZSBkaXN0aW5jdCBmdW5jdGlvbiBzaWduYXR1cmVzIGZyb20gb25lIGFub3RoZXIuPC9wPgorPHA+PHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+UGFyYW1ldGVyczo8L3N0cm9uZz48L3NwYW4+IDwvcD4KKzxkaXYgY2xhc3M9ImluZm9ybWFsdGFibGUiPjx0YWJsZSBjbGFzcz0idGFibGUiPgorPGNvbGdyb3VwPgorPGNvbD4KKzxjb2w+Cis8L2NvbGdyb3VwPgorPHRib2R5Pjx0cj4KKzx0ZD48c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkY8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5pPC9lbT48L3NwYW4+PC9jb2RlPjwvc3Ryb25nPjwvc3Bhbj48L3RkPgorPHRkPkVhY2ggZnVuY3Rpb24gdHlwZSBtdXN0IGJlIHNwZWNpZmllZCB1c2luZyB0aGUgZm9sbG93aW5nIHN5bnRheCAod2hpY2ggaXMgQm9vc3QuRnVuY3Rpb24ncyBwcmVmZXJyZWQgc3ludGF4KTogPHByZSB4bWxuczpyZXY9Imh0dHA6Ly93d3cuY3MucnBpLmVkdS9+Z3JlZ29kL2Jvb3N0L3Rvb2xzL2RvYy9yZXZpc2lvbiIgY2xhc3M9InRhYmxlLXByb2dyYW1saXN0aW5nIj4gICAgPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnJlc3VsdF90eXBlPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YXJndW1lbnQxX3R5cGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5hcmd1bWduZXQyX3R5cGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4uLi48L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+Cis8L3ByZT4gIDwvdGQ+Cis8L3RyPjwvdGJvZHk+Cis8L3RhYmxlPjwvZGl2PgorPHA+Cis8L3A+Cis8cD5JbiBzb21lIGNhc2VzLCB0aGUgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9Im1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIiB0aXRsZT0iRnVuY3Rpb24gdGVtcGxhdGUgbWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uIj5tYWtlX292ZXJsb2FkZWRfZnVuY3Rpb248L2E+PC9jb2RlPiBmdW5jdGlvbiB0ZW1wbGF0ZSBjYW4gYmUgdXNlZnVsIHRvIGNvbnN0cnVjdCBhbiBvdmVybG9hZGVkIGZ1bmN0aW9uIG9iamVjdCB3aXRob3V0IGV4cGxpY2l0bHkgc3BlY2lmeWluZyB0aGUgZnVuY3Rpb24gdHlwZXMuPC9wPgorPHA+QXQgbGVhc3QgdHdvIGRpc3RpbmN0IGZ1bmN0aW9uIHR5cGVzIG11c3QgYmUgc3BlY2lmaWVkIChiZWNhdXNlIHRoZXJlIGlzIG5vdGhpbmcgdG8gb3ZlcmxvYWQgYmV0d2VlbiBvbmUgb3IgemVybyBmdW5jdGlvbnMpLiBUaGUgbWF4aW11bSBudW1iZXIgb2YgZnVuY3Rpb25zIHRvIG92ZXJsb2FkIGlzIGdpdmVuIGJ5IHRoZSAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0iLi4vQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVguaHRtbCIgdGl0bGU9Ik1hY3JvIEJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfT1ZFUkxPQURfTUFYIj5CT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX09WRVJMT0FEX01BWDwvYT48L2NvZGU+IGNvbmZpZ3VyYXRpb24gbWFjcm8uIFRoZSBtYXhpbXVtIG51bWJlciBvZiBmdW5jdGlvbiBwYXJhbWV0ZXJzIGZvciBlYWNoIG9mIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24gdHlwZXMgaXMgZ2l2ZW4gYnkgdGhlICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSIuLi9CT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX0FSSVRZX01BWC5odG1sIiB0aXRsZT0iTWFjcm8gQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19BUklUWV9NQVgiPkJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfQVJJVFlfTUFYPC9hPjwvY29kZT4gY29uZmlndXJhdGlvbiBtYWNyby48L3A+Cis8cD48c3BhbiBjbGFzcz0iYm9sZCI+PHN0cm9uZz5TZWU6PC9zdHJvbmc+PC9zcGFuPiAgPGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii4uL2Jvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uL3R1dG9yaWFsLmh0bWwiIHRpdGxlPSJUdXRvcmlhbCI+IFR1dG9yaWFsPC9hPiBzZWN0aW9uLCAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0ibWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiIHRpdGxlPSJGdW5jdGlvbiB0ZW1wbGF0ZSBtYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24iPm1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbjwvYT48L2NvZGU+LCAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0iLi4vQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVguaHRtbCIgdGl0bGU9Ik1hY3JvIEJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfT1ZFUkxPQURfTUFYIj5CT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX09WRVJMT0FEX01BWDwvYT48L2NvZGU+LCAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0iLi4vQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19BUklUWV9NQVguaHRtbCIgdGl0bGU9Ik1hY3JvIEJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfQVJJVFlfTUFYIj5CT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX0FSSVRZX01BWDwvYT48L2NvZGU+LCBCb29zdC5GdW5jdGlvbi4gPC9wPgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iaWQ4MjA3MzgiPjwvYT48aDM+Cis8YSBuYW1lPSJib29zdC5vdmVybG9hZGVkX2Z1bmN0aW9uY29uc3RydWN0LWNvcHktZGVzdHJ1Y3QiPjwvYT48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPm92ZXJsb2FkZWRfZnVuY3Rpb248L2NvZGU+IAorICAgICAgICBwdWJsaWMKKyAgICAgICBjb25zdHJ1Y3QvY29weS9kZXN0cnVjdDwvaDM+Cis8ZGl2IGNsYXNzPSJvcmRlcmVkbGlzdCI+PG9sIGNsYXNzPSJvcmRlcmVkbGlzdCIgdHlwZT0iMSI+PGxpIGNsYXNzPSJsaXN0aXRlbSI+Cis8cHJlIGNsYXNzPSJsaXRlcmFsbGF5b3V0Ij48YSBuYW1lPSJpZDI1OTA5MC1iYiI+PC9hPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5vdmVybG9hZGVkX2Z1bmN0aW9uPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuY3Rpb248L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GMTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mYW1wOzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gCisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuY3Rpb248L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GMjwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mYW1wOzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPi4uLjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj48L3ByZT5Db25zdHJ1Y3QgdGhlIG92ZXJsb2FkZWQgZnVuY3Rpb24gb2JqZWN0LiA8cD5BbnkgZnVuY3Rpb24gcG9pbnRlciwgZnVuY3Rpb24gcmVmZXJlbmNlLCBhbmQgbW9ub21vcnBoaWMgZnVuY3Rpb24gb2JqZWN0IHRoYXQgY2FuIGJlIGNvbnZlcnRlZCB0byBhIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+Ym9vc3Q6OmZ1bmN0aW9uPC9jb2RlPiBmdW5jdGlvbiBvYmplY3QgY2FuIGJlIHNwZWNpZmllZCBhcyBwYXJhbWV0ZXIuPC9wPgorPHA+PHNwYW4gY2xhc3M9ImJvbGQiPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz48L3NwYW4+IFVuZm9ydHVuYXRlbHksIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBzdXBwb3J0IHBvbHltb3JwaGljIGZ1bmN0aW9uIG9iamVjdHMgKGFzIGV4cGxhaW5lZCA8YSBocmVmPSJodHRwOi8vbGlzdHMuYm9vc3Qub3JnL0FyY2hpdmVzL2Jvb3N0LzIwMTIvMDMvMTkxNzQ0LnBocCIgdGFyZ2V0PSJfdG9wIj5oZXJlPC9hPikuIDwvcD4KKzwvbGk+PC9vbD48L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0icmVmc2VjdDIiPgorPGEgbmFtZT0iaWQ4MjA4NzQiPjwvYT48aDM+Cis8YSBuYW1lPSJpZDI1OTAyMC1iYiI+PC9hPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+b3ZlcmxvYWRlZF9mdW5jdGlvbjwvY29kZT4gcHVibGljIG1lbWJlciBmdW5jdGlvbnM8L2gzPgorPGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPjxvbCBjbGFzcz0ib3JkZXJlZGxpc3QiIHR5cGU9IjEiPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+Cis8cHJlIGNsYXNzPSJsaXRlcmFsbGF5b3V0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jdGlvbl90cmFpdHM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GMTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5yZXN1bHRfdHlwZTwvc3Bhbj4gCis8YSBuYW1lPSJpZDI1OTAyMy1iYiI+PC9hPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5vcGVyYXRvcjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmN0aW9uX3RyYWl0czwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkYxPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFyZzFfdHlwZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gCisgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlbmFtZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuY3Rpb25fdHJhaXRzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RjE8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YXJnMl90eXBlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Li4uPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjs8L3NwYW4+PC9wcmU+Q2FsbCBvcGVyYXRvciBtYXRjaGluZyB0aGUgc2lnbmF0dXJlIG9mIHRoZSBmdW5jdGlvbiB0eXBlIHNwZWNpZmllZCBhcyAxc3QgdGVtcGxhdGUgcGFyYW1ldGVyLiA8cD5UaGlzIHdpbGwgaW4gdHVybiBpbnZva2UgdGhlIGNhbGwgb3BlcmF0b3Igb2YgdGhlIDFzdCBmdW5jdGlvbiBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLiA8L3A+Cis8L2xpPgorPGxpIGNsYXNzPSJsaXN0aXRlbSI+Cis8cHJlIGNsYXNzPSJsaXRlcmFsbGF5b3V0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jdGlvbl90cmFpdHM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GMjwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5yZXN1bHRfdHlwZTwvc3Bhbj4gCis8YSBuYW1lPSJpZDI1OTA0OS1iYiI+PC9hPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5vcGVyYXRvcjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmZ1bmN0aW9uX3RyYWl0czwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkYyPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFyZzFfdHlwZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gCisgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlbmFtZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuY3Rpb25fdHJhaXRzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+RjI8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+YXJnMl90eXBlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Li4uPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+Y29uc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjs8L3NwYW4+PC9wcmU+Q2FsbCBvcGVyYXRvciBtYXRjaGluZyB0aGUgc2lnbmF0dXJlIG9mIHRoZSBmdW5jdGlvbiB0eXBlIHNwZWNpZmllZCBhcyAybmQgdGVtcGxhdGUgcGFyYW1ldGVyLiA8cD5UaGlzIHdpbGwgaW4gdHVybiBpbnZva2UgdGhlIGNhbGwgb3BlcmF0b3Igb2YgdGhlIDJuZCBmdW5jdGlvbiBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLjwvcD4KKzxwPjxzcGFuIGNsYXNzPSJib2xkIj48c3Ryb25nPk5vdGU6PC9zdHJvbmc+PC9zcGFuPiBTaW1pbGFyIGNhbGwgb3BlcmF0b3JzIGFyZSBwcmVzZW50IGZvciBhbGwgc3BlY2lmaWVkIGZ1bmN0aW9uIHR5cGVzIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+RjE8L2NvZGU+LCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPkYyPC9jb2RlPiwgZXRjIChldmVuIGlmIG5vdCBleGhhdXN0aXZlbHkgbGlzdGVkIGJ5IHRoaXMgZG9jdW1lbnRhdGlvbikuIDwvcD4KKzwvbGk+Cis8L29sPjwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPHRhYmxlIHhtbG5zOnJldj0iaHR0cDovL3d3dy5jcy5ycGkuZWR1L35ncmVnb2QvYm9vc3QvdG9vbHMvZG9jL3JldmlzaW9uIiB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIGFsaWduPSJsZWZ0Ij48L3RkPgorPHRkIGFsaWduPSJyaWdodCI+PGRpdiBjbGFzcz0iY29weXJpZ2h0LWZvb3RlciI+Q29weXJpZ2h0ICYjMTY5OyAyMDExLCAyMDEyIExvcmVuem8gQ2FtaW5pdGk8cD4KKyAgICAgICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wIChzZWUgYWNjb21wYW55aW5nCisgICAgICAgIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0IiB0YXJnZXQ9Il90b3AiPmh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvYT4pCisgICAgICA8L3A+Cis8L2Rpdj48L3RkPgorPC90cj48L3RhYmxlPgorPGhyPgorPGRpdiBjbGFzcz0ic3Bpcml0LW5hdiI+Cis8YSBhY2Nlc3NrZXk9InAiIGhyZWY9Ii4uL3JlZmVyZW5jZS5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvcHJldi5wbmciIGFsdD0iUHJldiI+PC9hPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iLi4vcmVmZXJlbmNlLmh0bWwjaGVhZGVyLmJvb3N0LmZ1bmN0aW9uYWwub3ZlcmxvYWRlZF9mdW5jdGlvbl9ocHAiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy91cC5wbmciIGFsdD0iVXAiPjwvYT48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9ob21lLnBuZyIgYWx0PSJIb21lIj48L2E+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJtYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL25leHQucG5nIiBhbHQ9Ik5leHQiPjwvYT4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vZG9jL2h0bWwvYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24vYWNrbm93bGVkZ21lbnRzLmh0bWwgYi9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9kb2MvaHRtbC9ib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi9hY2tub3dsZWRnbWVudHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDVkNDgxCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vZG9jL2h0bWwvYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24vYWNrbm93bGVkZ21lbnRzLmh0bWwKQEAgLTAsMCArMSw2MCBAQAorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVTLUFTQ0lJIj4KKzx0aXRsZT5BY2tub3dsZWRnbWVudHM8L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2Jvb3N0Ym9vay5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzYuMSI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiIHRpdGxlPSJDaGFwdGVyJiMxNjA7MS4mIzE2MDtCb29zdC5GdW5jdGlvbmFsL092ZXJsb2FkZWRGdW5jdGlvbiAxLjAuMCI+Cis8bGluayByZWw9InVwIiBocmVmPSIuLi9pbmRleC5odG1sIiB0aXRsZT0iQ2hhcHRlciYjMTYwOzEuJiMxNjA7Qm9vc3QuRnVuY3Rpb25hbC9PdmVybG9hZGVkRnVuY3Rpb24gMS4wLjAiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSIuLi9CT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX09WRVJMT0FEX01BWC5odG1sIiB0aXRsZT0iTWFjcm8gQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVgiPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNlbGxwYWRkaW5nPSIyIiB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj48aW1nIGFsdD0iQm9vc3QgQysrIExpYnJhcmllcyIgd2lkdGg9IjI3NyIgaGVpZ2h0PSI4NiIgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9ib29zdC5wbmciPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbCI+SG9tZTwvYT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbGlicmFyaWVzLmh0bSI+TGlicmFyaWVzPC9hPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvdXNlcnMvcGVvcGxlLmh0bWwiPlBlb3BsZTwvYT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL3VzZXJzL2ZhcS5odG1sIj5GQVE8L2E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi8uLi8uLi9tb3JlL2luZGV4Lmh0bSI+TW9yZTwvYT48L3RkPgorPC90cj48L3RhYmxlPgorPGhyPgorPGRpdiBjbGFzcz0ic3Bpcml0LW5hdiI+Cis8YSBhY2Nlc3NrZXk9InAiIGhyZWY9Ii4uL0JPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfT1ZFUkxPQURfTUFYLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9wcmV2LnBuZyIgYWx0PSJQcmV2Ij48L2E+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSIuLi9pbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvdXAucG5nIiBhbHQ9IlVwIj48L2E+PGEgYWNjZXNza2V5PSJoIiBocmVmPSIuLi9pbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvaG9tZS5wbmciIGFsdD0iSG9tZSI+PC9hPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIGJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uX2Fja25vd2xlZGdtZW50cyI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24uYWNrbm93bGVkZ21lbnRzIj48L2E+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImFja25vd2xlZGdtZW50cy5odG1sIiB0aXRsZT0iQWNrbm93bGVkZ21lbnRzIj5BY2tub3dsZWRnbWVudHM8L2E+Cis8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgorPHA+CisgICAgICBNYW55IHRoYW5rcyB0byBNYXRoaWFzIEdhdW5hcmQgZm9yIHN1Z2dlc3RpbmcgdG8gaW1wbGVtZW50IDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii4uL2Jvb3N0L292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCIgdGl0bGU9IkNsYXNzIHRlbXBsYXRlIG92ZXJsb2FkZWRfZnVuY3Rpb24iPmJvb3N0OjpvdmVybG9hZGVkX2Z1bmN0aW9uPC9hPjwvY29kZT4KKyAgICAgIGFuZCBmb3Igc29tZSBzYW1wbGUgY29kZS4KKyAgICA8L3A+Cis8cD4KKyAgICAgIFRoYW5rcyB0byBKb2huIEJ5dGhld2F5IGZvciBzdWdnZXN0aW5nIHRvIGltcGxlbWVudCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSIuLi9ib29zdC9tYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCIgdGl0bGU9IkZ1bmN0aW9uIHRlbXBsYXRlIG1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbiI+Ym9vc3Q6Om1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbjwvYT48L2NvZGU+LgorICAgIDwvcD4KKzxwPgorICAgICAgVGhhbmtzIHRvIE5hdGhhbiBSaWRnZSBmb3Igc3VnZ2VzdGlvbnMgb24gaG93IHRvIGltcGxlbWVudCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSIuLi9ib29zdC9tYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCIgdGl0bGU9IkZ1bmN0aW9uIHRlbXBsYXRlIG1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbiI+Ym9vc3Q6Om1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbjwvYT48L2NvZGU+LgorICAgIDwvcD4KKzxwPgorICAgICAgVGhhbmtzIHRvIFJvYmVydCBTdGV3YXJ0IGZvciBjb21tZW50aW5nIG9uIHRoZSBsaWJyYXJ5IG5hbWUuCisgICAgPC9wPgorPHA+CisgICAgICBNYW55IHRoYW5rcyB0byB0aGUgZW50aXJlIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnIiB0YXJnZXQ9Il90b3AiPkJvb3N0PC9hPiBjb21tdW5pdHkKKyAgICAgIGFuZCBtYWlsaW5nIGxpc3QgZm9yIHByb3ZpZGluZyB2YWx1YWJsZSBjb21tZW50cyBhYm91dCB0aGlzIGxpYnJhcnkgYW5kIGdyZWF0CisgICAgICBpbnNpZ2h0cyBvbiB0aGUgQysrIHByb2dyYW1taW5nIGxhbmd1YWdlLgorICAgIDwvcD4KKzwvZGl2PgorPHRhYmxlIHhtbG5zOnJldj0iaHR0cDovL3d3dy5jcy5ycGkuZWR1L35ncmVnb2QvYm9vc3QvdG9vbHMvZG9jL3JldmlzaW9uIiB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIGFsaWduPSJsZWZ0Ij48L3RkPgorPHRkIGFsaWduPSJyaWdodCI+PGRpdiBjbGFzcz0iY29weXJpZ2h0LWZvb3RlciI+Q29weXJpZ2h0ICYjMTY5OyAyMDExLCAyMDEyIExvcmVuem8gQ2FtaW5pdGk8cD4KKyAgICAgICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wIChzZWUgYWNjb21wYW55aW5nCisgICAgICAgIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0IiB0YXJnZXQ9Il90b3AiPmh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvYT4pCisgICAgICA8L3A+Cis8L2Rpdj48L3RkPgorPC90cj48L3RhYmxlPgorPGhyPgorPGRpdiBjbGFzcz0ic3Bpcml0LW5hdiI+Cis8YSBhY2Nlc3NrZXk9InAiIGhyZWY9Ii4uL0JPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfT1ZFUkxPQURfTUFYLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9wcmV2LnBuZyIgYWx0PSJQcmV2Ij48L2E+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSIuLi9pbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvdXAucG5nIiBhbHQ9IlVwIj48L2E+PGEgYWNjZXNza2V5PSJoIiBocmVmPSIuLi9pbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvaG9tZS5wbmciIGFsdD0iSG9tZSI+PC9hPgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9kb2MvaHRtbC9ib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi9nZXR0aW5nX3N0YXJ0ZWQuaHRtbCBiL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2RvYy9odG1sL2Jvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uL2dldHRpbmdfc3RhcnRlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1OWU3ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9kb2MvaHRtbC9ib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi9nZXR0aW5nX3N0YXJ0ZWQuaHRtbApAQCAtMCwwICsxLDk1IEBACis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVMtQVNDSUkiPgorPHRpdGxlPkdldHRpbmcgU3RhcnRlZDwvdGl0bGU+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvYm9vc3Rib29rLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43Ni4xIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iLi4vaW5kZXguaHRtbCIgdGl0bGU9IkNoYXB0ZXImIzE2MDsxLiYjMTYwO0Jvb3N0LkZ1bmN0aW9uYWwvT3ZlcmxvYWRlZEZ1bmN0aW9uIDEuMC4wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiIHRpdGxlPSJDaGFwdGVyJiMxNjA7MS4mIzE2MDtCb29zdC5GdW5jdGlvbmFsL092ZXJsb2FkZWRGdW5jdGlvbiAxLjAuMCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiIHRpdGxlPSJDaGFwdGVyJiMxNjA7MS4mIzE2MDtCb29zdC5GdW5jdGlvbmFsL092ZXJsb2FkZWRGdW5jdGlvbiAxLjAuMCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9InR1dG9yaWFsLmh0bWwiIHRpdGxlPSJUdXRvcmlhbCI+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siIGxpbms9IiMwMDAwRkYiIHZsaW5rPSIjODQwMDg0IiBhbGluaz0iIzAwMDBGRiI+Cis8dGFibGUgY2VsbHBhZGRpbmc9IjIiIHdpZHRoPSIxMDAlIj48dHI+Cis8dGQgdmFsaWduPSJ0b3AiPjxpbWcgYWx0PSJCb29zdCBDKysgTGlicmFyaWVzIiB3aWR0aD0iMjc3IiBoZWlnaHQ9Ijg2IiBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2Jvb3N0LnBuZyI+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sIj5Ib21lPC9hPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9saWJyYXJpZXMuaHRtIj5MaWJyYXJpZXM8L2E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy91c2Vycy9wZW9wbGUuaHRtbCI+UGVvcGxlPC9hPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvdXNlcnMvZmFxLmh0bWwiPkZBUTwvYT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uLy4uL21vcmUvaW5kZXguaHRtIj5Nb3JlPC9hPjwvdGQ+Cis8L3RyPjwvdGFibGU+Cis8aHI+Cis8ZGl2IGNsYXNzPSJzcGlyaXQtbmF2Ij4KKzxhIGFjY2Vzc2tleT0icCIgaHJlZj0iLi4vaW5kZXguaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL3ByZXYucG5nIiBhbHQ9IlByZXYiPjwvYT48YSBhY2Nlc3NrZXk9InUiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy91cC5wbmciIGFsdD0iVXAiPjwvYT48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9ob21lLnBuZyIgYWx0PSJIb21lIj48L2E+PGEgYWNjZXNza2V5PSJuIiBocmVmPSJ0dXRvcmlhbC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvbmV4dC5wbmciIGFsdD0iTmV4dCI+PC9hPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIGJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uX2dldHRpbmdfc3RhcnRlZCI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24uZ2V0dGluZ19zdGFydGVkIj48L2E+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImdldHRpbmdfc3RhcnRlZC5odG1sIiB0aXRsZT0iR2V0dGluZyBTdGFydGVkIj5HZXR0aW5nCisgICAgU3RhcnRlZDwvYT4KKzwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Cis8ZGl2IGNsYXNzPSJ0b2MiPjxkbD4KKzxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iZ2V0dGluZ19zdGFydGVkLmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24uZ2V0dGluZ19zdGFydGVkLmNvbXBpbGVyc19hbmRfcGxhdGZvcm1zIj5Db21waWxlcnMKKyAgICAgIGFuZCBQbGF0Zm9ybXM8L2E+PC9zcGFuPjwvZHQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImdldHRpbmdfc3RhcnRlZC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLmdldHRpbmdfc3RhcnRlZC5pbnN0YWxsYXRpb24iPkluc3RhbGxhdGlvbjwvYT48L3NwYW4+PC9kdD4KKzwvZGw+PC9kaXY+Cis8cD4KKyAgICAgIFRoaXMgc2VjdGlvbiBleHBsYWlucyBob3cgdG8gc2V0dXAgYSBzeXN0ZW0gdG8gdXNlIHRoaXMgbGlicmFyeS4KKyAgICA8L3A+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIGJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uX2dldHRpbmdfc3RhcnRlZF9jb21waWxlcnNfYW5kX3BsYXRmb3JtcyI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLmdldHRpbmdfc3RhcnRlZC5jb21waWxlcnNfYW5kX3BsYXRmb3JtcyI+PC9hPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnZXR0aW5nX3N0YXJ0ZWQuaHRtbCNib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi5nZXR0aW5nX3N0YXJ0ZWQuY29tcGlsZXJzX2FuZF9wbGF0Zm9ybXMiIHRpdGxlPSJDb21waWxlcnMgYW5kIFBsYXRmb3JtcyI+Q29tcGlsZXJzCisgICAgICBhbmQgUGxhdGZvcm1zPC9hPgorPC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KKzxwPgorICAgICAgICBUaGUgYXV0aG9ycyBvcmlnaW5hbGx5IGRldmVsb3BlZCBhbmQgdGVzdGVkIHRoaXMgbGlicmFyeSBvbjoKKyAgICAgIDwvcD4KKzxkaXYgY2xhc3M9Im9yZGVyZWRsaXN0Ij48b2wgY2xhc3M9Im9yZGVyZWRsaXN0IiB0eXBlPSIxIj4KKzxsaSBjbGFzcz0ibGlzdGl0ZW0iPgorICAgICAgICAgICAgR05VIENvbXBpbGVyIENvbGxlY3Rpb24gKEdDQykgQysrIDQuNS4zICh3aXRoIGFuZCB3aXRob3V0IEMrKzExIGZlYXR1cmVzCisgICAgICAgICAgICBlbmFibGVkIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9InNwZWNpYWwiPi08L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0ZDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+PTwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Yzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Kys8L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+eDwvc3Bhbj48L2NvZGU+KQorICAgICAgICAgICAgb24gQ3lnd2luLgorICAgICAgICAgIDwvbGk+Cis8bGkgY2xhc3M9Imxpc3RpdGVtIj4KKyAgICAgICAgICAgIE1pc2Nyb3NvZnQgVmlzdWFsIEMrKyAoTVNWQykgOC4wIG9uIFdpbmRvd3MgNy4KKyAgICAgICAgICA8L2xpPgorPC9vbD48L2Rpdj4KKzxwPgorICAgICAgICBTZWUgdGhlIGxpYnJhcnkgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvZGV2ZWxvcG1lbnQvdGVzdHMvcmVsZWFzZS9kZXZlbG9wZXIvZnVuY3Rpb25hbC1vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiIHRhcmdldD0iX3RvcCI+cmVncmVzc2lvbnMKKyAgICAgICAgdGVzdCByZXN1bHRzPC9hPiBmb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gc3VwcG9ydGVkIGNvbXBpbGVycyBhbmQKKyAgICAgICAgcGxhdGZvcm1zLiBDaGVjayB0aGUgbGlicmFyeSByZWdyZXNzaW9uIHRlc3QgPGEgaHJlZj0iLi4vLi4vLi4vdGVzdC9KYW1maWxlLnYyIiB0YXJnZXQ9Il90b3AiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5KYW1maWxlLnYyPC9jb2RlPjwvYT4KKyAgICAgICAgZm9yIGFueSBzcGVjaWFsIGNvbmZpZ3VyYXRpb24gdGhhdCBtaWdodCBiZSByZXF1aXJlZCBmb3IgYSBzcGVjaWZpYyBjb21waWxlci4KKyAgICAgIDwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiBib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbl9nZXR0aW5nX3N0YXJ0ZWRfaW5zdGFsbGF0aW9uIj4KKzxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24uZ2V0dGluZ19zdGFydGVkLmluc3RhbGxhdGlvbiI+PC9hPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJnZXR0aW5nX3N0YXJ0ZWQuaHRtbCNib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi5nZXR0aW5nX3N0YXJ0ZWQuaW5zdGFsbGF0aW9uIiB0aXRsZT0iSW5zdGFsbGF0aW9uIj5JbnN0YWxsYXRpb248L2E+Cis8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PgorPHA+CisgICAgICAgIFRoaXMgbGlicmFyeSBpcyBjb21wb3NlZCBvZiBoZWFkZXIgZmlsZXMgb25seS4gVGhlcmVmb3JlIHRoZXJlIGlzIG5vIHByZS1jb21waWxlZAorICAgICAgICBvYmplY3QgZmlsZSB3aGljaCBuZWVkcyB0byBiZSBpbnN0YWxsZWQuIFByb2dyYW1tZXJzIGNhbiBzaW1wbHkgaW5zdHJ1Y3QKKyAgICAgICAgdGhlIGNvbXBpbGVyIHdoZXJlIHRvIGZpbmQgdGhlIGxpYnJhcnkgaGVhZGVyIGZpbGVzICg8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4tPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5JPC9zcGFuPjwvY29kZT4gb3B0aW9uIG9uIEdDQywgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Lzwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+STwvc3Bhbj48L2NvZGU+IG9wdGlvbiBvbiBNU1ZDLCBldGMpIGFuZCBjb21waWxlIGNvZGUKKyAgICAgICAgdXNpbmcgdGhlIGxpYnJhcnkuCisgICAgICA8L3A+Cis8cD4KKyAgICAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIGZ1bmN0aW9ucyB0byBvdmVybG9hZCBpcyBnaXZlbiBieSB0aGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0iLi4vQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVguaHRtbCIgdGl0bGU9Ik1hY3JvIEJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfT1ZFUkxPQURfTUFYIj5CT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX09WRVJMT0FEX01BWDwvYT48L2NvZGU+CisgICAgICAgIGNvbmZpZ3VyYXRpb24gbWFjcm8uIFRoZSBtYXhpbXVtIG51bWJlciBvZiBmdW5jdGlvbiBwYXJhbWV0ZXJzIGZvciBlYWNoIG9mCisgICAgICAgIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24gdHlwZSBpcyBnaXZlbiBieSB0aGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0iLi4vQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19BUklUWV9NQVguaHRtbCIgdGl0bGU9Ik1hY3JvIEJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfQVJJVFlfTUFYIj5CT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX0FSSVRZX01BWDwvYT48L2NvZGU+CisgICAgICAgIGNvbmZpZ3VyYXRpb24gbWFjcm8uIEFsbCBjb25maWd1cmF0aW9uIG1hY3JvcyBoYXZlIGFwcHJvcHJpYXRlIGRlZmF1bHQgdmFsdWVzCisgICAgICAgIHdoZW4gdGhleSBhcmUgbGVmdCB1bmRlZmluZWQuCisgICAgICA8L3A+Cis8L2Rpdj4KKzwvZGl2PgorPHRhYmxlIHhtbG5zOnJldj0iaHR0cDovL3d3dy5jcy5ycGkuZWR1L35ncmVnb2QvYm9vc3QvdG9vbHMvZG9jL3JldmlzaW9uIiB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIGFsaWduPSJsZWZ0Ij48L3RkPgorPHRkIGFsaWduPSJyaWdodCI+PGRpdiBjbGFzcz0iY29weXJpZ2h0LWZvb3RlciI+Q29weXJpZ2h0ICYjMTY5OyAyMDExLCAyMDEyIExvcmVuem8gQ2FtaW5pdGk8cD4KKyAgICAgICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wIChzZWUgYWNjb21wYW55aW5nCisgICAgICAgIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0IiB0YXJnZXQ9Il90b3AiPmh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvYT4pCisgICAgICA8L3A+Cis8L2Rpdj48L3RkPgorPC90cj48L3RhYmxlPgorPGhyPgorPGRpdiBjbGFzcz0ic3Bpcml0LW5hdiI+Cis8YSBhY2Nlc3NrZXk9InAiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9wcmV2LnBuZyIgYWx0PSJQcmV2Ij48L2E+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSIuLi9pbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvdXAucG5nIiBhbHQ9IlVwIj48L2E+PGEgYWNjZXNza2V5PSJoIiBocmVmPSIuLi9pbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvaG9tZS5wbmciIGFsdD0iSG9tZSI+PC9hPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0idHV0b3JpYWwuaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL25leHQucG5nIiBhbHQ9Ik5leHQiPjwvYT4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vZG9jL2h0bWwvYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24vdHV0b3JpYWwuaHRtbCBiL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2RvYy9odG1sL2Jvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uL3R1dG9yaWFsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg0OTNhYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2RvYy9odG1sL2Jvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uL3R1dG9yaWFsLmh0bWwKQEAgLTAsMCArMSwyMjggQEAKKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VUy1BU0NJSSI+Cis8dGl0bGU+VHV0b3JpYWw8L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2Jvb3N0Ym9vay5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzYuMSI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiIHRpdGxlPSJDaGFwdGVyJiMxNjA7MS4mIzE2MDtCb29zdC5GdW5jdGlvbmFsL092ZXJsb2FkZWRGdW5jdGlvbiAxLjAuMCI+Cis8bGluayByZWw9InVwIiBocmVmPSIuLi9pbmRleC5odG1sIiB0aXRsZT0iQ2hhcHRlciYjMTYwOzEuJiMxNjA7Qm9vc3QuRnVuY3Rpb25hbC9PdmVybG9hZGVkRnVuY3Rpb24gMS4wLjAiPgorPGxpbmsgcmVsPSJwcmV2IiBocmVmPSJnZXR0aW5nX3N0YXJ0ZWQuaHRtbCIgdGl0bGU9IkdldHRpbmcgU3RhcnRlZCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9Ii4uL3JlZmVyZW5jZS5odG1sIiB0aXRsZT0iUmVmZXJlbmNlIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjZWxscGFkZGluZz0iMiIgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+PGltZyBhbHQ9IkJvb3N0IEMrKyBMaWJyYXJpZXMiIHdpZHRoPSIyNzciIGhlaWdodD0iODYiIHNyYz0iLi4vLi4vLi4vLi4vLi4vLi4vYm9vc3QucG5nIj48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWwiPkhvbWU8L2E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2xpYnJhcmllcy5odG0iPkxpYnJhcmllczwvYT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL3VzZXJzL3Blb3BsZS5odG1sIj5QZW9wbGU8L2E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy91c2Vycy9mYXEuaHRtbCI+RkFRPC9hPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vLi4vbW9yZS9pbmRleC5odG0iPk1vcmU8L2E+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxocj4KKzxkaXYgY2xhc3M9InNwaXJpdC1uYXYiPgorPGEgYWNjZXNza2V5PSJwIiBocmVmPSJnZXR0aW5nX3N0YXJ0ZWQuaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL3ByZXYucG5nIiBhbHQ9IlByZXYiPjwvYT48YSBhY2Nlc3NrZXk9InUiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy91cC5wbmciIGFsdD0iVXAiPjwvYT48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9ob21lLnBuZyIgYWx0PSJIb21lIj48L2E+PGEgYWNjZXNza2V5PSJuIiBocmVmPSIuLi9yZWZlcmVuY2UuaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL25leHQucG5nIiBhbHQ9Ik5leHQiPjwvYT4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiBib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbl90dXRvcmlhbCI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24udHV0b3JpYWwiPjwvYT48YSBjbGFzcz0ibGluayIgaHJlZj0idHV0b3JpYWwuaHRtbCIgdGl0bGU9IlR1dG9yaWFsIj5UdXRvcmlhbDwvYT4KKzwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+Cis8ZGl2IGNsYXNzPSJ0b2MiPjxkbD4KKzxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0idHV0b3JpYWwuaHRtbCNib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi50dXRvcmlhbC5vdmVybG9hZGluZyI+T3ZlcmxvYWRpbmc8L2E+PC9zcGFuPjwvZHQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9InR1dG9yaWFsLmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24udHV0b3JpYWwud2l0aG91dF9mdW5jdGlvbl90eXBlcyI+V2l0aG91dAorICAgICAgRnVuY3Rpb24gVHlwZXM8L2E+PC9zcGFuPjwvZHQ+Cis8L2RsPjwvZGl2PgorPHA+CisgICAgICBUaGlzIHNlY3Rpb24gZXhwbGFpbnMgaG93IHRvIHVzZSB0aGlzIGxpYnJhcnkuCisgICAgPC9wPgorPGRpdiBjbGFzcz0ic2VjdGlvbiBib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbl90dXRvcmlhbF9vdmVybG9hZGluZyI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj4KKzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLnR1dG9yaWFsLm92ZXJsb2FkaW5nIj48L2E+PGEgY2xhc3M9ImxpbmsiIGhyZWY9InR1dG9yaWFsLmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24udHV0b3JpYWwub3ZlcmxvYWRpbmciIHRpdGxlPSJPdmVybG9hZGluZyI+T3ZlcmxvYWRpbmc8L2E+Cis8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PgorPHA+CisgICAgICAgIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHdoaWNoIGhhdmUgZGlzdGluY3Qgc2lnbmF0dXJlczoKKyAgICAgIDwvcD4KKzxwPgorPC9wPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0ZDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0cmluZzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+JmFtcDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eV9zPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0ZDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0cmluZzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+JmFtcDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj54PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPiA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gRnVuY3Rpb24gKGFzIHBvaW50ZXIpLjwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+ezwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnJldHVybjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPng8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjs8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj59PC9zcGFuPgorCis8c3BhbiBjbGFzcz0ia2V5d29yZCI+aW50PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfaV9pbXBsPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pbnQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj54PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+ezwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnJldHVybjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPng8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjs8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj59PC9zcGFuPgorPHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPigmYW1wOzwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfaTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KSg8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPj08L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eV9pX2ltcGw8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjs8L3NwYW4+IDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBGdW5jdGlvbiByZWZlcmVuY2UuPC9zcGFuPgorCis8c3BhbiBjbGFzcz0ia2V5d29yZCI+ZG91YmxlPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfZF9pbXBsPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5kb3VibGU8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj54PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+ezwvc3Bhbj4gPHNwYW4gY2xhc3M9ImtleXdvcmQiPnJldHVybjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPng8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjs8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj59PC9zcGFuPgorPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuY3Rpb248L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmRvdWJsZTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmRvdWJsZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KSZndDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eV9kPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X2RfaW1wbDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIEZ1bmN0b3IuPC9zcGFuPgorPC9wcmU+Cis8cD4KKyAgICAgIDwvcD4KKzxwPgorICAgICAgICBUaGlzIGxpYnJhcnkgaGVhZGVyIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii4uL3JlZmVyZW5jZS5odG1sI2hlYWRlci5ib29zdC5mdW5jdGlvbmFsLm92ZXJsb2FkZWRfZnVuY3Rpb25faHBwIiB0aXRsZT0iSGVhZGVyICZsdDtib29zdC9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24uaHBwJmd0OyI+Ym9vc3QvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uLmhwcDwvYT48L2NvZGU+CisgICAgICAgIHByb3ZpZGVzIGEgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0iLi4vYm9vc3Qvb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIiB0aXRsZT0iQ2xhc3MgdGVtcGxhdGUgb3ZlcmxvYWRlZF9mdW5jdGlvbiI+Ym9vc3Q6Om92ZXJsb2FkZWRfZnVuY3Rpb248L2E+PC9jb2RlPgorICAgICAgICBjbGFzcyB0ZW1wbGF0ZSB0aGF0IGNyZWF0ZXMgYSBzaW5nbGUgb3ZlcmxvYWRlZCBmdW5jdGlvbiBvYmplY3QgdGhhdCBjYW4KKyAgICAgICAgYmUgdXNlZCB0byBjYWxsIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb25zIGluc3RlYWQgb2YgdXNpbmcgdGhlIHNlcGFyYXRlIGZ1bmN0aW9uCisgICAgICAgIG5hbWVzIChzZWUgYWxzbyA8YSBocmVmPSIuLi8uLi8uLi90ZXN0L2Z1bmN0b3IuY3BwIiB0YXJnZXQ9Il90b3AiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5mdW5jdG9yLmNwcDwvY29kZT48L2E+CisgICAgICAgIGFuZCA8YSBocmVmPSIuLi8uLi8uLi90ZXN0L2lkZW50aXR5LmhwcCIgdGFyZ2V0PSJfdG9wIj48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+aWRlbnRpdHkuaHBwPC9jb2RlPjwvYT4pOgorICAgICAgPC9wPgorPHA+Cis8L3A+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+b3ZlcmxvYWRlZF9mdW5jdGlvbjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0ZDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0cmluZzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+JmFtcDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0ZDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0cmluZzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+JmFtcDspPC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+aW50PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+aW50PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+ZG91YmxlPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+ZG91YmxlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPgorPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfczwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X2k8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eV9kPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4KKworPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIEFsbCBjYWxscyB2aWEgc2luZ2xlIGBpZGVudGl0eWAgZnVuY3Rpb24uPC9zcGFuPgorPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkJPT1NUX1RFU1Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJzdHJpbmciPiJhYmMiPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PT08L3NwYW4+IDxzcGFuIGNsYXNzPSJzdHJpbmciPiJhYmMiPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5CT09TVF9URVNUPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xMjM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PTwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+MTIzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5CT09TVF9URVNUPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjIzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PT08L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMjM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPgorPC9wcmU+Cis8cD4KKyAgICAgIDwvcD4KKzxwPgorICAgICAgICBOb3RlIGhvdyBlYWNoIGZ1bmN0aW9uIHR5cGUgaXMgcGFzc2VkIGFzIGEgdGVtcGxhdGUgcGFyYW1ldGVyIG9mIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii4uL2Jvb3N0L292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCIgdGl0bGU9IkNsYXNzIHRlbXBsYXRlIG92ZXJsb2FkZWRfZnVuY3Rpb24iPmJvb3N0OjpvdmVybG9hZGVkX2Z1bmN0aW9uPC9hPjwvY29kZT4gdXNpbmcKKyAgICAgICAgdGhlIGZvbGxvd2luZyBzeW50YXggKHRoaXMgaXMgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9mdW5jdGlvbiIgdGFyZ2V0PSJfdG9wIj5Cb29zdC5GdW5jdGlvbjwvYT4ncworICAgICAgICBwcmVmZXJyZWQgc3ludGF4KToKKyAgICAgIDwvcD4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5yZXN1bHQtdHlwZTwvZW0+PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5hcmd1bWVudDEtdHlwZTwvZW0+PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5hcmd1bWVudDItdHlwZTwvZW0+PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Li4uKTwvc3Bhbj4KKzwvcHJlPgorPHA+CisgICAgICAgIFRoZW4gdGhlIHJlbGF0aXZlIGZ1bmN0aW9uIHBvaW50ZXJzLCBmdW5jdGlvbiByZWZlcmVuY2VzLCBvciA8YSBocmVmPSJodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1BvbHltb3JwaGlzbV8oY29tcHV0ZXJfc2NpZW5jZSkiIHRhcmdldD0iX3RvcCI+bW9ub21vcnBoaWMKKyAgICAgICAgZnVuY3Rpb248L2E+IG9iamVjdHMgYXJlIHBhc3NlZCB0byB0aGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0iLi4vYm9vc3Qvb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIiB0aXRsZT0iQ2xhc3MgdGVtcGxhdGUgb3ZlcmxvYWRlZF9mdW5jdGlvbiI+Ym9vc3Q6Om92ZXJsb2FkZWRfZnVuY3Rpb248L2E+PC9jb2RlPgorICAgICAgICBjb25zdHJ1Y3RvciBtYXRjaGluZyB0aGUgb3JkZXIgb2YgdGhlIHNwZWNpZmllZCB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLiA8c3VwPls8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi50dXRvcmlhbC5vdmVybG9hZGluZy5mMCIgaHJlZj0iI2Z0bi5ib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi50dXRvcmlhbC5vdmVybG9hZGluZy5mMCIgY2xhc3M9ImZvb3Rub3RlIj4yPC9hPl08L3N1cD4gSW4gdGhlIGFib3ZlIGV4YW1wbGUsIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X3M8L3NwYW4+PC9jb2RlPgorICAgICAgICBpcyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyICh0aGUgZnVuY3Rpb24gYWRkcmVzcyBpcyBhdXRvbWF0aWNhbGx5IHRha2VuCisgICAgICAgIGZyb20gdGhlIGZ1bmN0aW9uIG5hbWUgYnkgdGhlIGNvbXBpbGVyKSwgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfaTwvc3Bhbj48L2NvZGU+CisgICAgICAgIGFzIGEgZnVuY3Rpb24gcmVmZXJlbmNlLCBhbmQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfZDwvc3Bhbj48L2NvZGU+CisgICAgICAgIGFzIGEgZnVuY3Rpb24gb2JqZWN0LgorICAgICAgPC9wPgorPHA+CisgICAgICAgIEFsbCBzcGVjaWZpZWQgZnVuY3Rpb24gdHlwZXMgbXVzdCBoYXZlIGRpc3RpbmN0IHBhcmFtZXRlcnMgZnJvbSBvbmUgYW5vdGhlcgorICAgICAgICAoc28gdGhlIG92ZXJsb2FkZWQgY2FsbHMgY2FuIGJlIHJlc29sdmVkIGJ5IHRoaXMgbGlicmFyeSkuIDxzdXA+WzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLnR1dG9yaWFsLm92ZXJsb2FkaW5nLmYxIiBocmVmPSIjZnRuLmJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLnR1dG9yaWFsLm92ZXJsb2FkaW5nLmYxIiBjbGFzcz0iZm9vdG5vdGUiPjM8L2E+XTwvc3VwPiBJbiBvcmRlciB0byBjcmVhdGUgYW4gb3ZlcmxvYWRlZCBmdW5jdGlvbiBvYmplY3QsIGl0IGlzIG5lY2Vzc2FyeQorICAgICAgICB0byBzcGVjaWZ5IGF0IGxlYXN0IHR3byBmdW5jdGlvbiB0eXBlcyAoYmVjYXVzZSB0aGVyZSBpcyBub3RoaW5nIHRvIG92ZXJsb2FkCisgICAgICAgIGJldHdlZW4gb25lIG9yIHplcm8gZnVuY3Rpb25zKS4KKyAgICAgIDwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiBib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbl90dXRvcmlhbF93aXRob3V0X2Z1bmN0aW9uX3R5cGVzIj4KKzxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24udHV0b3JpYWwud2l0aG91dF9mdW5jdGlvbl90eXBlcyI+PC9hPjxhIGNsYXNzPSJsaW5rIiBocmVmPSJ0dXRvcmlhbC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLnR1dG9yaWFsLndpdGhvdXRfZnVuY3Rpb25fdHlwZXMiIHRpdGxlPSJXaXRob3V0IEZ1bmN0aW9uIFR5cGVzIj5XaXRob3V0CisgICAgICBGdW5jdGlvbiBUeXBlczwvYT4KKzwvaDM+PC9kaXY+PC9kaXY+PC9kaXY+Cis8cD4KKyAgICAgICAgRm9yIGNvbnZlbmllbmNlLCB0aGlzIGxpYnJhcnkgYWxzbyBwcm92aWRlcyB0aGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0iLi4vYm9vc3QvbWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiIHRpdGxlPSJGdW5jdGlvbiB0ZW1wbGF0ZSBtYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24iPmJvb3N0OjptYWtlX292ZXJsb2FkZWRfZnVuY3Rpb248L2E+PC9jb2RlPgorICAgICAgICBmdW5jdGlvbiB0ZW1wbGF0ZSB3aGljaCBhbGxvd3MgdG8gY3JlYXRlIHRoZSBvdmVybG9hZGVkIGZ1bmN0aW9uIG9iamVjdCB3aXRob3V0CisgICAgICAgIGV4cGxpY2l0bHkgc3BlY2lmeWluZyB0aGUgZnVuY3Rpb24gdHlwZXMuIFRoZSBmdW5jdGlvbiB0eXBlcyBhcmUgYXV0b21hdGljYWxseQorICAgICAgICBkZWR1Y2VkIGZyb20gdGhlIHNwZWNpZmllZCBmdW5jdGlvbnMgYW5kIHRoZSBhcHByb3ByaWF0ZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSIuLi9ib29zdC9vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiIHRpdGxlPSJDbGFzcyB0ZW1wbGF0ZSBvdmVybG9hZGVkX2Z1bmN0aW9uIj5ib29zdDo6b3ZlcmxvYWRlZF9mdW5jdGlvbjwvYT48L2NvZGU+CisgICAgICAgIGluc3RhbnRpYXRpb24gaXMgcmV0dXJuZWQgYnkgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0iLi4vYm9vc3QvbWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiIHRpdGxlPSJGdW5jdGlvbiB0ZW1wbGF0ZSBtYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24iPmJvb3N0OjptYWtlX292ZXJsb2FkZWRfZnVuY3Rpb248L2E+PC9jb2RlPi4KKyAgICAgIDwvcD4KKzxwPgorICAgICAgICBUaGUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0iLi4vYm9vc3QvbWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiIHRpdGxlPSJGdW5jdGlvbiB0ZW1wbGF0ZSBtYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24iPmJvb3N0OjptYWtlX292ZXJsb2FkZWRfZnVuY3Rpb248L2E+PC9jb2RlPgorICAgICAgICBmdW5jdGlvbiB0ZW1wbGF0ZSBjYW4gYmUgdXNlZnVsIHdoZW4gdXNlZCB0b2dldGhlciB3aXRoIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL2RvYy9saWJzL3R5cGVvZiIgdGFyZ2V0PSJfdG9wIj5Cb29zdC5UeXBlb2Y8L2E+J3MKKyAgICAgICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Qk9PU1RfQVVUTzwvc3Bhbj48L2NvZGU+IChvciBDKysxMSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5hdXRvPC9zcGFuPjwvY29kZT4pLiBGb3IgZXhhbXBsZSAoc2VlIGFsc28gPGEgaHJlZj0iLi4vLi4vLi4vdGVzdC9tYWtlX2RlY2wuY3BwIiB0YXJnZXQ9Il90b3AiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5tYWtlX2RlY2wuY3BwPC9jb2RlPjwvYT4KKyAgICAgICAgYW5kIDxhIGhyZWY9Ii4uLy4uLy4uL3Rlc3QvaWRlbnRpdHkuaHBwIiB0YXJnZXQ9Il90b3AiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5pZGVudGl0eS5ocHA8L2NvZGU+PC9hPik6CisgICAgICA8L3A+Cis8cD4KKzwvcD4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Qk9PU1RfQVVUTzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPm1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X3M8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eV9pPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfZDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KSk7PC9zcGFuPgorCis8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Qk9PU1RfVEVTVDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+ImFiYyI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PTwvc3Bhbj4gPHNwYW4gY2xhc3M9InN0cmluZyI+ImFiYyI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPgorPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkJPT1NUX1RFU1Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEyMzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPj09PC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4xMjM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPgorPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkJPT1NUX1RFU1Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMjM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PTwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+MS4yMzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+Cis8L3ByZT4KKzxwPgorICAgICAgPC9wPgorPHA+CisgICAgICAgIE5vdGUgaG93IHRoZSBvdmVybG9hZGVkIGZ1bmN0aW9uIG9iamVjdCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eTwvc3Bhbj48L2NvZGU+CisgICAgICAgIGhhcyBiZWVuIGNyZWF0ZWQgc3BlY2lmeWluZyBvbmx5IHRoZSBmdW5jdGlvbnMgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfczwvc3Bhbj48L2NvZGU+LAorICAgICAgICA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eV9pPC9zcGFuPjwvY29kZT4sIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X2Q8L3NwYW4+PC9jb2RlPiBhbmQgd2l0aG91dCBzcGVjaWZ5aW5nIHRoZSBmdW5jdGlvbgorICAgICAgICB0eXBlcyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0ZDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0cmluZzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+JmFtcDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jb25zdDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0ZDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnN0cmluZzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+JmFtcDspPC9zcGFuPjwvY29kZT4sCisgICAgICAgIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj48L2NvZGU+LCBhbmQKKyAgICAgICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0ia2V5d29yZCI+ZG91YmxlPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+ZG91YmxlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPjwvY29kZT4gYXMKKyAgICAgICAgcmVxdWlyZWQgaW5zdGVhZCBieSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSIuLi9ib29zdC9vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiIHRpdGxlPSJDbGFzcyB0ZW1wbGF0ZSBvdmVybG9hZGVkX2Z1bmN0aW9uIj5ib29zdDo6b3ZlcmxvYWRlZF9mdW5jdGlvbjwvYT48L2NvZGU+LgorICAgICAgICBUaGVyZWZvcmUsIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PGEgY2xhc3M9ImxpbmsiIGhyZWY9Ii4uL2Jvb3N0L21ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIiB0aXRsZT0iRnVuY3Rpb24gdGVtcGxhdGUgbWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uIj5ib29zdDo6bWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uPC9hPjwvY29kZT4KKyAgICAgICAgcHJvdmlkZXMgYSBtb3JlIGNvbmNpc2Ugc3ludGF4IGluIHRoaXMgY29udGV4dCB3aGVuIGNvbXBhcmVkIHdpdGggPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0iLi4vYm9vc3Qvb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIiB0aXRsZT0iQ2xhc3MgdGVtcGxhdGUgb3ZlcmxvYWRlZF9mdW5jdGlvbiI+Ym9vc3Q6Om92ZXJsb2FkZWRfZnVuY3Rpb248L2E+PC9jb2RlPi4KKyAgICAgIDwvcD4KKzxwPgorICAgICAgICBBbm90aGVyIGNhc2Ugd2hlcmUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48YSBjbGFzcz0ibGluayIgaHJlZj0iLi4vYm9vc3QvbWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiIHRpdGxlPSJGdW5jdGlvbiB0ZW1wbGF0ZSBtYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24iPmJvb3N0OjptYWtlX292ZXJsb2FkZWRfZnVuY3Rpb248L2E+PC9jb2RlPgorICAgICAgICBjYW4gYmUgdXNlZnVsIGlzIHdoZW4gdGhlIG92ZXJsb2FkZWQgZnVuY3Rpb24gb2JqZWN0IGlzIHBhc3NlZCB0byBhIGZ1bmN0aW9uCisgICAgICAgIHRlbXBsYXRlIHdoaWNoIGNhbiBob2xkIHRoZSBzcGVjaWZpYyA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSIuLi9ib29zdC9vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiIHRpdGxlPSJDbGFzcyB0ZW1wbGF0ZSBvdmVybG9hZGVkX2Z1bmN0aW9uIj5ib29zdDo6b3ZlcmxvYWRlZF9mdW5jdGlvbjwvYT48L2NvZGU+CisgICAgICAgIHR5cGUgdXNpbmcgYSB0ZW1wbGF0ZSBwYXJhbWV0ZXIuIEZvciBleGFtcGxlIChzZWUgYWxzbyA8YSBocmVmPSIuLi8uLi8uLi90ZXN0L21ha2VfY2FsbC5jcHAiIHRhcmdldD0iX3RvcCI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPm1ha2VfY2FsbC5jcHA8L2NvZGU+PC9hPgorICAgICAgICBhbmQgPGEgaHJlZj0iLi4vLi4vLi4vdGVzdC9pZGVudGl0eS5ocHAiIHRhcmdldD0iX3RvcCI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmlkZW50aXR5LmhwcDwvY29kZT48L2E+KToKKyAgICAgIDwvcD4KKzxwPgorPC9wPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj50ZW1wbGF0ZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPgorPHNwYW4gY2xhc3M9ImtleXdvcmQiPnZvaWQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5jaGVjazwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Rjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+ezwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Qk9PU1RfVEVTVDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+ImFiYyI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PTwvc3Bhbj4gPHNwYW4gY2xhc3M9InN0cmluZyI+ImFiYyI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5CT09TVF9URVNUPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xMjM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PTwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+MTIzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4KKyAgICA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Qk9PU1RfVEVTVDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MS4yMzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPj09PC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjIzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pOzwvc3Bhbj4KKzxzcGFuIGNsYXNzPSJzcGVjaWFsIj59PC9zcGFuPgorPC9wcmU+Cis8cD4KKyAgICAgIDwvcD4KKzxwPgorPC9wPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5jaGVjazwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5tYWtlX292ZXJsb2FkZWRfZnVuY3Rpb248L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X3M8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eV9pPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfZDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KSk7PC9zcGFuPgorPC9wcmU+Cis8cD4KKyAgICAgIDwvcD4KKzxwPgorICAgICAgICBUaGUgbGlicmFyeSBpbXBsZW1lbnRhdGlvbiBvZiA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxhIGNsYXNzPSJsaW5rIiBocmVmPSIuLi9ib29zdC9tYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCIgdGl0bGU9IkZ1bmN0aW9uIHRlbXBsYXRlIG1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbiI+Ym9vc3Q6Om1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbjwvYT48L2NvZGU+CisgICAgICAgIHVzZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvZG9jL2xpYnMvdHlwZW9mIiB0YXJnZXQ9Il90b3AiPkJvb3N0LlR5cGVvZjwvYT4KKyAgICAgICAgdG8gYXV0b21hdGljYWxseSBkZWR1Y2Ugc29tZSBvZiB0aGUgZnVuY3Rpb24gdHlwZXMuIEluIG9yZGVyIHRvIGNvbXBpbGUgY29kZQorICAgICAgICBpbiA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9kb2MvbGlicy90eXBlb2YiIHRhcmdldD0iX3RvcCI+Qm9vc3QuVHlwZW9mPC9hPgorICAgICAgICBlbXVsYXRpb24gbW9kZSwgYWxsIHR5cGVzIHNob3VsZCBiZSBwcm9wZXJseSByZWdpc3RlcmVkIHVzaW5nIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkJPT1NUX1RZUEVPRl9SRUdJU1RFUl9UWVBFPC9zcGFuPjwvY29kZT4gYW5kIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkJPT1NUX1RZUEVPRl9SRUdJU1RFUl9URU1QTEFURTwvc3Bhbj48L2NvZGU+LCBvciBhcHByb3ByaWF0ZQorICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9kb2MvbGlicy90eXBlb2YiIHRhcmdldD0iX3RvcCI+Qm9vc3QuVHlwZW9mPC9hPiBoZWFkZXJzCisgICAgICAgIHNob3VsZCBiZSBpbmNsdWRlZCAoc2VlIDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL2RvYy9saWJzL3R5cGVvZiIgdGFyZ2V0PSJfdG9wIj5Cb29zdC5UeXBlb2Y8L2E+CisgICAgICAgIGZvciBtb3JlIGluZm9ybWF0aW9uKS4gRm9yIHRoZSBhYm92ZSBleGFtcGxlcywgaXQgaXMgc3VmZmljaWVudCB0byBpbmNsdWRlCisgICAgICAgIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9kb2MvbGlicy90eXBlb2YiIHRhcmdldD0iX3RvcCI+Qm9vc3QuVHlwZW9mPC9hPgorICAgICAgICBoZWFkZXIgdGhhdCByZWdpc3RlcnMgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RkPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RyaW5nPC9zcGFuPjwvY29kZT4KKyAgICAgICAgKHRoaXMgbGlicmFyeSBkb2VzIG5vdCByZXF1aXJlIHRvIHJlZ2lzdGVyIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmJvb3N0PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+ZnVuY3Rpb248L3NwYW4+PC9jb2RlPgorICAgICAgICBmb3IgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvZG9jL2xpYnMvdHlwZW9mIiB0YXJnZXQ9Il90b3AiPkJvb3N0LlR5cGVvZjwvYT4KKyAgICAgICAgZW11bGF0aW9uKToKKyAgICAgIDwvcD4KKzxwPgorPC9wPgorPHByZSBjbGFzcz0icHJvZ3JhbWxpc3RpbmciPjxzcGFuIGNsYXNzPSJwcmVwcm9jZXNzb3IiPiNpbmNsdWRlPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPi88L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnR5cGVvZjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Lzwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RkPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4vPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5zdHJpbmc8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPi48L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmhwcDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIE5vIG5lZWQgdG8gcmVnaXN0ZXIgYGJvb3N0OjpmdW5jdGlvbmAuPC9zcGFuPgorPC9wcmU+Cis8cD4KKyAgICAgIDwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdG5vdGVzIj4KKzxicj48aHIgd2lkdGg9IjEwMCIgYWxpZ249ImxlZnQiPgorPGRpdiBjbGFzcz0iZm9vdG5vdGUiPjxwPjxzdXA+WzxhIGlkPSJmdG4uYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24udHV0b3JpYWwub3ZlcmxvYWRpbmcuZjAiIGhyZWY9IiNib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi50dXRvcmlhbC5vdmVybG9hZGluZy5mMCIgY2xhc3M9InBhcmEiPjI8L2E+XSA8L3N1cD4KKyAgICAgICAgICBGdW5jdGlvbiBwb2ludGVycyBhcmUgb2YgdGhlIGZvcm0gPGNvZGUgY2xhc3M9ImxpdGVyYWwiPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnJlc3VsdC10eXBlIDwvZW0+PC9zcGFuPjwvY29kZT48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oKikoPC9zcGFuPjwvY29kZT48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+YXJndW1lbnQxLXR5cGU8L2VtPjwvc3Bhbj48L2NvZGU+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPi4uLik8L3NwYW4+PC9jb2RlPiAodGhlCisgICAgICAgICAgQysrIGNvbXBpbGVyIGlzIHVzdWFsbHkgYWJsZSB0byBhdXRvbWF0aWNhbGx5IHByb21vdGUgYSBmdW5jdGlvbiBuYW1lIHRvCisgICAgICAgICAgYSBmdW5jdGlvbiBwb2ludGVyIGluIGEgY29udGV4dCB3aGVyZSBhIGZ1bmN0aW9uIHBvaW50ZXIgaXMgZXhwZWN0ZWQgZXZlbgorICAgICAgICAgIGlmIHRoZSBmdW5jdGlvbiBuYW1lIGlzIG5vdCBwcmVmaXhlZCBieSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mYW1wOzwvc3Bhbj48L2NvZGU+KS4KKyAgICAgICAgICBGdW5jdGlvbiByZWZlcmVuY2VzIGFyZSBvZiB0aGUgZm9ybSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+cmVzdWx0LXR5cGUgPC9lbT48L3NwYW4+PC9jb2RlPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9InNwZWNpYWwiPigmYW1wOykoPC9zcGFuPjwvY29kZT48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+YXJndW1lbnQxLXR5cGU8L2VtPjwvc3Bhbj48L2NvZGU+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPi4uLik8L3NwYW4+PC9jb2RlPi4KKyAgICAgICAgICBGdW5jdGlvbiB0eXBlcyBhcmUgb2YgdGhlIGZvcm0gPGNvZGUgY2xhc3M9ImxpdGVyYWwiPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPnJlc3VsdC10eXBlIDwvZW0+PC9zcGFuPjwvY29kZT48Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjwvY29kZT48Y29kZSBjbGFzcz0ibGl0ZXJhbCI+PHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+YXJndW1lbnQxLXR5cGU8L2VtPjwvc3Bhbj48L2NvZGU+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPi4uLik8L3NwYW4+PC9jb2RlPiAobm90ZQorICAgICAgICAgIGhvdyB0aGV5IGxhY2sgb2YgYm90aCA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4qPC9zcGFuPjwvY29kZT4gYW5kCisgICAgICAgICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0ic3BlY2lhbCI+JmFtcDs8L3NwYW4+PC9jb2RlPiB3aGVuIGNvbXBhcmVkIHRvIGZ1bmN0aW9uCisgICAgICAgICAgcG9pbnRlcnMgYW5kIGZ1bmN0aW9uIHJlZmVyZW5jZXMpLiBGaW5hbGx5LCBtb25vbW9ycGhpYyBmdW5jdGlvbiBvYmplY3RzCisgICAgICAgICAgYXJlIGluc3RhbmNlcyBvZiBjbGFzc2VzIHdpdGggYSBub24tdGVtcGxhdGUgY2FsbCBvcGVyYXRvciBvZiB0aGUgZm9ybQorICAgICAgICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj48c3BhbiBjbGFzcz0iZW1waGFzaXMiPjxlbT5yZXN1bHQtdHlwZSA8L2VtPjwvc3Bhbj48L2NvZGU+PGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0ia2V5d29yZCI+b3BlcmF0b3I8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPigpKDwvc3Bhbj48L2NvZGU+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPjxzcGFuIGNsYXNzPSJlbXBoYXNpcyI+PGVtPmFyZ3VtZW50MS10eXBlPC9lbT48L3NwYW4+PC9jb2RlPjxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4uLi4pPC9zcGFuPjwvY29kZT4uCisgICAgICAgICAgVW5mb3J0dW5hdGVseSwgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHN1cHBvcnQgcG9seW1vcnBoaWMgZnVuY3Rpb24gb2JqZWN0cworICAgICAgICAgIChzZWUgPGEgaHJlZj0iaHR0cDovL2xpc3RzLmJvb3N0Lm9yZy9BcmNoaXZlcy9ib29zdC8yMDEyLzAzLzE5MTc0NC5waHAiIHRhcmdldD0iX3RvcCI+aHR0cDovL2xpc3RzLmJvb3N0Lm9yZy9BcmNoaXZlcy9ib29zdC8yMDEyLzAzLzE5MTc0NC5waHA8L2E+KS4KKyAgICAgICAgPC9wPjwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdG5vdGUiPjxwPjxzdXA+WzxhIGlkPSJmdG4uYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24udHV0b3JpYWwub3ZlcmxvYWRpbmcuZjEiIGhyZWY9IiNib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi50dXRvcmlhbC5vdmVybG9hZGluZy5mMSIgY2xhc3M9InBhcmEiPjM8L2E+XSA8L3N1cD4KKyAgICAgICAgICBOb3RlIHRoYXQgaW4gQysrIHRoZSBmdW5jdGlvbiByZXN1bHQgdHlwZSBpcyBub3QgdXNlZCBmb3Igb3ZlcmxvYWQgcmVzb2x1dGlvbgorICAgICAgICAgICh0byBhdm9pZCBtYWtpbmcgdGhlIG92ZXJsb2FkIHJlc29sdXRpb24gY29udGV4dCBkZXBlbmRlbnQpLiBUaGVyZWZvcmUsCisgICAgICAgICAgYXQgbGVhc3Qgb25lIG9mIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXJzIG11c3QgYmUgZGlzdGluY3QgZm9yIGVhY2ggc3BlY2lmaWVkCisgICAgICAgICAgZnVuY3Rpb24gdHlwZS4KKyAgICAgICAgPC9wPjwvZGl2PgorPC9kaXY+Cis8L2Rpdj4KKzx0YWJsZSB4bWxuczpyZXY9Imh0dHA6Ly93d3cuY3MucnBpLmVkdS9+Z3JlZ29kL2Jvb3N0L3Rvb2xzL2RvYy9yZXZpc2lvbiIgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCBhbGlnbj0ibGVmdCI+PC90ZD4KKzx0ZCBhbGlnbj0icmlnaHQiPjxkaXYgY2xhc3M9ImNvcHlyaWdodC1mb290ZXIiPkNvcHlyaWdodCAmIzE2OTsgMjAxMSwgMjAxMiBMb3JlbnpvIENhbWluaXRpPHA+CisgICAgICAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMCAoc2VlIGFjY29tcGFueWluZworICAgICAgICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCIgdGFyZ2V0PSJfdG9wIj5odHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KQorICAgICAgPC9wPgorPC9kaXY+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxocj4KKzxkaXYgY2xhc3M9InNwaXJpdC1uYXYiPgorPGEgYWNjZXNza2V5PSJwIiBocmVmPSJnZXR0aW5nX3N0YXJ0ZWQuaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL3ByZXYucG5nIiBhbHQ9IlByZXYiPjwvYT48YSBhY2Nlc3NrZXk9InUiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy91cC5wbmciIGFsdD0iVXAiPjwvYT48YSBhY2Nlc3NrZXk9ImgiIGhyZWY9Ii4uL2luZGV4Lmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9ob21lLnBuZyIgYWx0PSJIb21lIj48L2E+PGEgYWNjZXNza2V5PSJuIiBocmVmPSIuLi9yZWZlcmVuY2UuaHRtbCI+PGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvaW1hZ2VzL25leHQucG5nIiBhbHQ9Ik5leHQiPjwvYT4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vZG9jL2h0bWwvaW5kZXguaHRtbCBiL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2RvYy9odG1sL2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU2YzBlOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2RvYy9odG1sL2luZGV4Lmh0bWwKQEAgLTAsMCArMSwxNDcgQEAKKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VUy1BU0NJSSI+Cis8dGl0bGU+Q2hhcHRlciYjMTYwOzEuJiMxNjA7Qm9vc3QuRnVuY3Rpb25hbC9PdmVybG9hZGVkRnVuY3Rpb24gMS4wLjA8L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2Jvb3N0Ym9vay5jc3MiIHR5cGU9InRleHQvY3NzIj4KKzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgVjEuNzYuMSI+Cis8bGluayByZWw9ImhvbWUiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJDaGFwdGVyJiMxNjA7MS4mIzE2MDtCb29zdC5GdW5jdGlvbmFsL092ZXJsb2FkZWRGdW5jdGlvbiAxLjAuMCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uL2dldHRpbmdfc3RhcnRlZC5odG1sIiB0aXRsZT0iR2V0dGluZyBTdGFydGVkIj4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IndoaXRlIiB0ZXh0PSJibGFjayIgbGluaz0iIzAwMDBGRiIgdmxpbms9IiM4NDAwODQiIGFsaW5rPSIjMDAwMEZGIj4KKzx0YWJsZSBjZWxscGFkZGluZz0iMiIgd2lkdGg9IjEwMCUiPjx0cj4KKzx0ZCB2YWxpZ249InRvcCI+PGltZyBhbHQ9IkJvb3N0IEMrKyBMaWJyYXJpZXMiIHdpZHRoPSIyNzciIGhlaWdodD0iODYiIHNyYz0iLi4vLi4vLi4vLi4vLi4vYm9vc3QucG5nIj48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWwiPkhvbWU8L2E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi8uLi9saWJzL2xpYnJhcmllcy5odG0iPkxpYnJhcmllczwvYT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL3VzZXJzL3Blb3BsZS5odG1sIj5QZW9wbGU8L2E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy91c2Vycy9mYXEuaHRtbCI+RkFRPC9hPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vbW9yZS9pbmRleC5odG0iPk1vcmU8L2E+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxocj4KKzxkaXYgY2xhc3M9InNwaXJpdC1uYXYiPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24vZ2V0dGluZ19zdGFydGVkLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9uZXh0LnBuZyIgYWx0PSJOZXh0Ij48L2E+PC9kaXY+Cis8ZGl2IGNsYXNzPSJjaGFwdGVyIj4KKzxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj4KKzxkaXY+PGgyIGNsYXNzPSJ0aXRsZSI+Cis8YSBuYW1lPSJib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbiI+PC9hPkNoYXB0ZXImIzE2MDsxLiYjMTYwO0Jvb3N0LkZ1bmN0aW9uYWwvT3ZlcmxvYWRlZEZ1bmN0aW9uIDEuMC4wPC9oMj48L2Rpdj4KKzxkaXY+PGRpdiBjbGFzcz0iYXV0aG9yIj48aDMgY2xhc3M9ImF1dGhvciI+Cis8c3BhbiBjbGFzcz0iZmlyc3RuYW1lIj5Mb3JlbnpvPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3VybmFtZSI+Q2FtaW5pdGkgPGNvZGUgY2xhc3M9ImVtYWlsIj4mbHQ7PGEgY2xhc3M9ImVtYWlsIiBocmVmPSJtYWlsdG86bG9yY2FtaW5pdGlAZ21haWwuY29tIj5sb3JjYW1pbml0aUBnbWFpbC5jb208L2E+Jmd0OzwvY29kZT48L3NwYW4+Cis8L2gzPjwvZGl2PjwvZGl2PgorPGRpdj48cCBjbGFzcz0iY29weXJpZ2h0Ij5Db3B5cmlnaHQgJiMxNjk7IDIwMTEsIDIwMTIgTG9yZW56byBDYW1pbml0aTwvcD48L2Rpdj4KKzxkaXY+PGRpdiBjbGFzcz0ibGVnYWxub3RpY2UiPgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24ubGVnYWwiPjwvYT48cD4KKyAgICAgICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wIChzZWUgYWNjb21wYW55aW5nCisgICAgICAgIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0IiB0YXJnZXQ9Il90b3AiPmh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvYT4pCisgICAgICA8L3A+Cis8L2Rpdj48L2Rpdj4KKzwvZGl2PjwvZGl2PgorPGRpdiBjbGFzcz0idG9jIj4KKzxwPjxiPlRhYmxlIG9mIENvbnRlbnRzPC9iPjwvcD4KKzxkbD4KKzxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iaW5kZXguaHRtbCNib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi5pbnRyb2R1Y3Rpb24iPkludHJvZHVjdGlvbjwvYT48L3NwYW4+PC9kdD4KKzxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24vZ2V0dGluZ19zdGFydGVkLmh0bWwiPkdldHRpbmcKKyAgICBTdGFydGVkPC9hPjwvc3Bhbj48L2R0PgorPGRkPjxkbD4KKzxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24vZ2V0dGluZ19zdGFydGVkLmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24uZ2V0dGluZ19zdGFydGVkLmNvbXBpbGVyc19hbmRfcGxhdGZvcm1zIj5Db21waWxlcnMKKyAgICAgIGFuZCBQbGF0Zm9ybXM8L2E+PC9zcGFuPjwvZHQ+Cis8ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9ImJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uL2dldHRpbmdfc3RhcnRlZC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLmdldHRpbmdfc3RhcnRlZC5pbnN0YWxsYXRpb24iPkluc3RhbGxhdGlvbjwvYT48L3NwYW4+PC9kdD4KKzwvZGw+PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24vdHV0b3JpYWwuaHRtbCI+VHV0b3JpYWw8L2E+PC9zcGFuPjwvZHQ+Cis8ZGQ+PGRsPgorPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi90dXRvcmlhbC5odG1sI2Jvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLnR1dG9yaWFsLm92ZXJsb2FkaW5nIj5PdmVybG9hZGluZzwvYT48L3NwYW4+PC9kdD4KKzxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0iYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24vdHV0b3JpYWwuaHRtbCNib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi50dXRvcmlhbC53aXRob3V0X2Z1bmN0aW9uX3R5cGVzIj5XaXRob3V0CisgICAgICBGdW5jdGlvbiBUeXBlczwvYT48L3NwYW4+PC9kdD4KKzwvZGw+PC9kZD4KKzxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0icmVmZXJlbmNlLmh0bWwiPlJlZmVyZW5jZTwvYT48L3NwYW4+PC9kdD4KKzxkZD48ZGw+Cis8ZHQ+PHNwYW4gY2xhc3M9InNlY3Rpb24iPjxhIGhyZWY9InJlZmVyZW5jZS5odG1sI2hlYWRlci5ib29zdC5mdW5jdGlvbmFsLm92ZXJsb2FkZWRfZnVuY3Rpb25faHBwIj5IZWFkZXIgJmx0O2Jvb3N0L2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi5ocHAmZ3Q7PC9hPjwvc3Bhbj48L2R0PgorPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJyZWZlcmVuY2UuaHRtbCNoZWFkZXIuYm9vc3QuZnVuY3Rpb25hbC5vdmVybG9hZGVkX2Z1bmN0aW9uLmNvbmZpZ19ocHAiPkhlYWRlciAmbHQ7Ym9vc3QvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2NvbmZpZy5ocHAmZ3Q7PC9hPjwvc3Bhbj48L2R0PgorPC9kbD48L2RkPgorPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi9hY2tub3dsZWRnbWVudHMuaHRtbCI+QWNrbm93bGVkZ21lbnRzPC9hPjwvc3Bhbj48L2R0PgorPC9kbD4KKzwvZGl2PgorPHA+CisgICAgVGhpcyBsaWJyYXJ5IGFsbG93cyB0byBvdmVybG9hZCBkaWZmZXJlbnQgZnVuY3Rpb25zIGludG8gYSBzaW5nbGUgZnVuY3Rpb24gb2JqZWN0LgorICA8L3A+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIGJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uX2ludHJvZHVjdGlvbiI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgorPGEgbmFtZT0iYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24uaW50cm9kdWN0aW9uIj48L2E+PGEgY2xhc3M9ImxpbmsiIGhyZWY9ImluZGV4Lmh0bWwjYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24uaW50cm9kdWN0aW9uIiB0aXRsZT0iSW50cm9kdWN0aW9uIj5JbnRyb2R1Y3Rpb248L2E+Cis8L2gyPjwvZGl2PjwvZGl2PjwvZGl2PgorPHA+CisgICAgICBDb25zaWRlciB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB3aGljaCBoYXZlIGRpc3RpbmN0IHNpZ25hdHVyZXM6CisgICAgPC9wPgorPHA+Cis8L3A+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RkPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RyaW5nPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mYW1wOzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X3M8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RkPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RyaW5nPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mYW1wOzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPng8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+IDxzcGFuIGNsYXNzPSJjb21tZW50Ij4vLyBGdW5jdGlvbiAoYXMgcG9pbnRlcikuPC9zcGFuPgorICAgIDxzcGFuIGNsYXNzPSJzcGVjaWFsIj57PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+cmV0dXJuPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+eDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPn08L3NwYW4+CisKKzxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pbnQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eV9pX2ltcGw8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmludDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPng8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj57PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+cmV0dXJuPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+eDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPn08L3NwYW4+Cis8c3BhbiBjbGFzcz0ia2V5d29yZCI+aW50PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+KCZhbXA7PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eV9pPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pKDwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+aW50PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X2lfaW1wbDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNvbW1lbnQiPi8vIEZ1bmN0aW9uIHJlZmVyZW5jZS48L3NwYW4+CisKKzxzcGFuIGNsYXNzPSJrZXl3b3JkIj5kb3VibGU8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eV9kX2ltcGw8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmRvdWJsZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPng8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj57PC9zcGFuPiA8c3BhbiBjbGFzcz0ia2V5d29yZCI+cmV0dXJuPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+eDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPn08L3NwYW4+Cis8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5mdW5jdGlvbjwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+ZG91YmxlPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+ZG91YmxlPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pJmd0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X2Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfZF9pbXBsPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj47PC9zcGFuPiA8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gRnVuY3Rvci48L3NwYW4+Cis8L3ByZT4KKzxwPgorICAgIDwvcD4KKzxwPgorICAgICAgSW5zdGVhZCBvZiBjYWxsaW5nIHRoZW0gdXNpbmcgdGhlaXIgc2VwYXJhdGUgbmFtZXMgKGhlcmUgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Qk9PU1RfVEVTVDwvc3Bhbj48L2NvZGU+CisgICAgICBpcyBlcXVpdmFsZW50IHRvIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFzc2VydDwvc3Bhbj48L2NvZGU+KToKKyAgICAgIDxzdXA+WzxhIG5hbWU9ImJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uLmludHJvZHVjdGlvbi5mMCIgaHJlZj0iI2Z0bi5ib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRmdW5jdGlvbi5pbnRyb2R1Y3Rpb24uZjAiIGNsYXNzPSJmb290bm90ZSI+MTwvYT5dPC9zdXA+CisgICAgPC9wPgorPHA+Cis8L3A+Cis8cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkJPT1NUX1RFU1Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X3M8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+ImFiYyI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PTwvc3Bhbj4gPHNwYW4gY2xhc3M9InN0cmluZyI+ImFiYyI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPgorPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkJPT1NUX1RFU1Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X2k8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9Im51bWJlciI+MTIzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PT08L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjEyMzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+Cis8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Qk9PU1RfVEVTVDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfZDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0ibnVtYmVyIj4xLjIzPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+PT08L3NwYW4+IDxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMjM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPgorPC9wcmU+Cis8cD4KKyAgICA8L3A+Cis8cD4KKyAgICAgIEl0IGlzIHBvc3NpYmxlIHRvIHVzZSB0aGlzIGxpYnJhcnkgdG8gY3JlYXRlIGEgc2luZ2xlIDxhIGhyZWY9Imh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRnVuY3Rpb25fb3ZlcmxvYWRpbmciIHRhcmdldD0iX3RvcCI+b3ZlcmxvYWRlZDwvYT4KKyAgICAgIGZ1bmN0aW9uIG9iamVjdCAob3IgPGEgaHJlZj0iaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GdW5jdG9yIiB0YXJnZXQ9Il90b3AiPmZ1bmN0b3I8L2E+KQorICAgICAgbmFtZWQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHk8L3NwYW4+PC9jb2RlPiB0aGF0IGFnZ3JlZ2F0ZXMKKyAgICAgIHRvZ2V0aGVyIHRoZSBjYWxscyB0byB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIChzZWUgYWxzbyA8YSBocmVmPSIuLi8uLi90ZXN0L2Z1bmN0b3IuY3BwIiB0YXJnZXQ9Il90b3AiPjxjb2RlIGNsYXNzPSJsaXRlcmFsIj5mdW5jdG9yLmNwcDwvY29kZT48L2E+CisgICAgICBhbmQgPGEgaHJlZj0iLi4vLi4vdGVzdC9pZGVudGl0eS5ocHAiIHRhcmdldD0iX3RvcCI+PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmlkZW50aXR5LmhwcDwvY29kZT48L2E+KToKKyAgICA8L3A+Cis8cD4KKzwvcD4KKzxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Ym9vc3Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjo6PC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5vdmVybG9hZGVkX2Z1bmN0aW9uPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RkPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RyaW5nPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mYW1wOzwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImtleXdvcmQiPmNvbnN0PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RkPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj46Ojwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+c3RyaW5nPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mYW1wOyk8L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pbnQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5pbnQ8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+CisgICAgPHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5kb3VibGU8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5kb3VibGU8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+Cis8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5pZGVudGl0eV9zPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfaTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5X2Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPgorCis8c3BhbiBjbGFzcz0iY29tbWVudCI+Ly8gQWxsIGNhbGxzIHZpYSBzaW5nbGUgYGlkZW50aXR5YCBmdW5jdGlvbi48L3NwYW4+Cis8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+Qk9PU1RfVEVTVDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KDwvc3Bhbj48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHk8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9InN0cmluZyI+ImFiYyI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PTwvc3Bhbj4gPHNwYW4gY2xhc3M9InN0cmluZyI+ImFiYyI8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPgorPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkJPT1NUX1RFU1Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEyMzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPj09PC9zcGFuPiA8c3BhbiBjbGFzcz0ibnVtYmVyIj4xMjM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik7PC9zcGFuPgorPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkJPT1NUX1RFU1Q8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPig8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmlkZW50aXR5PC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJudW1iZXIiPjEuMjM8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPik8L3NwYW4+IDxzcGFuIGNsYXNzPSJzcGVjaWFsIj49PTwvc3Bhbj4gPHNwYW4gY2xhc3M9Im51bWJlciI+MS4yMzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+KTs8L3NwYW4+Cis8L3ByZT4KKzxwPgorICAgIDwvcD4KKzxwPgorICAgICAgTm90ZSBob3cgdGhlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIHZpYSBhIHNpbmdsZSBvdmVybG9hZGVkIGZ1bmN0aW9uIG9iamVjdAorICAgICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHk8L3NwYW4+PC9jb2RlPiBpbnN0ZWFkIG9mIHVzaW5nIHRoZWlyCisgICAgICBkaWZmZXJlbnQgbmFtZXMgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfczwvc3Bhbj48L2NvZGU+LAorICAgICAgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfaTwvc3Bhbj48L2NvZGU+LCBhbmQgPGNvZGUgY2xhc3M9ImNvbXB1dGVyb3V0cHV0Ij48c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+aWRlbnRpdHlfZDwvc3Bhbj48L2NvZGU+LgorICAgIDwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0iZm9vdG5vdGVzIj4KKzxicj48aHIgd2lkdGg9IjEwMCIgYWxpZ249ImxlZnQiPgorPGRpdiBjbGFzcz0iZm9vdG5vdGUiPjxwPjxzdXA+WzxhIGlkPSJmdG4uYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24uaW50cm9kdWN0aW9uLmYwIiBocmVmPSIjYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24uaW50cm9kdWN0aW9uLmYwIiBjbGFzcz0icGFyYSI+MTwvYT5dIDwvc3VwPgorICAgICAgICBJbiBtb3N0IG9mIHRoZSBleGFtcGxlcyBwcmVzZW50ZWQgaW4gdGhpcyBkb2N1bWVudGF0aW9uLCB0aGUgQm9vc3QuRGV0YWlsL0xpZ2h0d2VpZ2h0VGVzdAorICAgICAgICAoPGNvZGUgY2xhc3M9ImxpdGVyYWwiPmJvb3N0L2RldGFpbC9saWdodHdlaWdodF90ZXN0LmhwcDwvY29kZT4pIG1hY3JvIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkJPT1NUX1RFU1Q8L3NwYW4+PC9jb2RlPiBpcyB1c2VkIHRvIGNoZWNrIGNvcnJlY3RuZXNzCisgICAgICAgIGNvbmRpdGlvbnMgKGNvbmNlcHR1YWxseSBzaW1pbGFyIHRvIDxjb2RlIGNsYXNzPSJjb21wdXRlcm91dHB1dCI+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPmFzc2VydDwvc3Bhbj48L2NvZGU+KS4KKyAgICAgICAgQSBmYWlsdXJlIG9mIHRoZSBjaGVja2VkIGNvbmRpdGlvbiBkb2VzIG5vdCBhYm9ydCB0aGUgZXhlY3V0aW9uIG9mIHRoZSBwcm9ncmFtLAorICAgICAgICBpdCB3aWxsIGluc3RlYWQgbWFrZSA8Y29kZSBjbGFzcz0iY29tcHV0ZXJvdXRwdXQiPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Ojo8L3NwYW4+PHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPnJlcG9ydF9lcnJvcnM8L3NwYW4+PC9jb2RlPgorICAgICAgICByZXR1cm4gYSBub24temVybyBwcm9ncmFtIGV4aXQgY29kZS4gVXNpbmcgQm9vc3QuRGV0YWlsL0xpZ2h0d2VpZ2h0VGVzdCBhbGxvd3MKKyAgICAgICAgdG8gYWRkIHRoZSBleGFtcGxlcyB0byB0aGUgbGlicmFyeSByZWdyZXNzaW9uIHRlc3RzIHNvIHRvIG1ha2Ugc3VyZSB0aGF0CisgICAgICAgIHRoZXkgYWx3YXlzIGNvbXBpbGUgYW5kIHJ1biBjb3JyZWN0bHkuCisgICAgICA8L3A+PC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorPHRhYmxlIHhtbG5zOnJldj0iaHR0cDovL3d3dy5jcy5ycGkuZWR1L35ncmVnb2QvYm9vc3QvdG9vbHMvZG9jL3JldmlzaW9uIiB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIGFsaWduPSJsZWZ0Ij48cD48c21hbGw+TGFzdCByZXZpc2VkOiBBcHJpbCAyOCwgMjAxMiBhdCAwMjoxOToxMyBHTVQ8L3NtYWxsPjwvcD48L3RkPgorPHRkIGFsaWduPSJyaWdodCI+PGRpdiBjbGFzcz0iY29weXJpZ2h0LWZvb3RlciI+PC9kaXY+PC90ZD4KKzwvdHI+PC90YWJsZT4KKzxocj4KKzxkaXYgY2xhc3M9InNwaXJpdC1uYXYiPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iYm9vc3RfZnVuY3Rpb25hbF9vdmVybG9hZGVkZnVuY3Rpb24vZ2V0dGluZ19zdGFydGVkLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9uZXh0LnBuZyIgYWx0PSJOZXh0Ij48L2E+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9kb2MvaHRtbC9yZWZlcmVuY2UuaHRtbCBiL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2RvYy9odG1sL3JlZmVyZW5jZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1YTg5ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9kb2MvaHRtbC9yZWZlcmVuY2UuaHRtbApAQCAtMCwwICsxLDY2IEBACis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVMtQVNDSUkiPgorPHRpdGxlPlJlZmVyZW5jZTwvdGl0bGU+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL2RvYy9zcmMvYm9vc3Rib29rLmNzcyIgdHlwZT0idGV4dC9jc3MiPgorPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWMS43Ni4xIj4KKzxsaW5rIHJlbD0iaG9tZSIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkNoYXB0ZXImIzE2MDsxLiYjMTYwO0Jvb3N0LkZ1bmN0aW9uYWwvT3ZlcmxvYWRlZEZ1bmN0aW9uIDEuMC4wIj4KKzxsaW5rIHJlbD0idXAiIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJDaGFwdGVyJiMxNjA7MS4mIzE2MDtCb29zdC5GdW5jdGlvbmFsL092ZXJsb2FkZWRGdW5jdGlvbiAxLjAuMCI+Cis8bGluayByZWw9InByZXYiIGhyZWY9ImJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uL3R1dG9yaWFsLmh0bWwiIHRpdGxlPSJUdXRvcmlhbCI+Cis8bGluayByZWw9Im5leHQiIGhyZWY9ImJvb3N0L292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCIgdGl0bGU9IkNsYXNzIHRlbXBsYXRlIG92ZXJsb2FkZWRfZnVuY3Rpb24iPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIiBsaW5rPSIjMDAwMEZGIiB2bGluaz0iIzg0MDA4NCIgYWxpbms9IiMwMDAwRkYiPgorPHRhYmxlIGNlbGxwYWRkaW5nPSIyIiB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIHZhbGlnbj0idG9wIj48aW1nIGFsdD0iQm9vc3QgQysrIExpYnJhcmllcyIgd2lkdGg9IjI3NyIgaGVpZ2h0PSI4NiIgc3JjPSIuLi8uLi8uLi8uLi8uLi9ib29zdC5wbmciPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbCI+SG9tZTwvYT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL2xpYnMvbGlicmFyaWVzLmh0bSI+TGlicmFyaWVzPC9hPjwvdGQ+Cis8dGQgYWxpZ249ImNlbnRlciI+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvdXNlcnMvcGVvcGxlLmh0bWwiPlBlb3BsZTwvYT48L3RkPgorPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL3VzZXJzL2ZhcS5odG1sIj5GQVE8L2E+PC90ZD4KKzx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi8uLi9tb3JlL2luZGV4Lmh0bSI+TW9yZTwvYT48L3RkPgorPC90cj48L3RhYmxlPgorPGhyPgorPGRpdiBjbGFzcz0ic3Bpcml0LW5hdiI+Cis8YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uL3R1dG9yaWFsLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9wcmV2LnBuZyIgYWx0PSJQcmV2Ij48L2E+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvdXAucG5nIiBhbHQ9IlVwIj48L2E+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvaG9tZS5wbmciIGFsdD0iSG9tZSI+PC9hPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iYm9vc3Qvb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvbmV4dC5wbmciIGFsdD0iTmV4dCI+PC9hPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIHJlZmVyZW5jZSI+Cis8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPgorPGEgbmFtZT0icmVmZXJlbmNlIj48L2E+UmVmZXJlbmNlPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj4KKzxkaXYgY2xhc3M9InRvYyI+PGRsPgorPGR0PjxzcGFuIGNsYXNzPSJzZWN0aW9uIj48YSBocmVmPSJyZWZlcmVuY2UuaHRtbCNoZWFkZXIuYm9vc3QuZnVuY3Rpb25hbC5vdmVybG9hZGVkX2Z1bmN0aW9uX2hwcCI+SGVhZGVyICZsdDtib29zdC9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24uaHBwJmd0OzwvYT48L3NwYW4+PC9kdD4KKzxkdD48c3BhbiBjbGFzcz0ic2VjdGlvbiI+PGEgaHJlZj0icmVmZXJlbmNlLmh0bWwjaGVhZGVyLmJvb3N0LmZ1bmN0aW9uYWwub3ZlcmxvYWRlZF9mdW5jdGlvbi5jb25maWdfaHBwIj5IZWFkZXIgJmx0O2Jvb3N0L2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9jb25maWcuaHBwJmd0OzwvYT48L3NwYW4+PC9kdD4KKzwvZGw+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIGhlYWRlcl9ib29zdF9mdW5jdGlvbmFsX292ZXJsb2FkZWRfZnVuY3Rpb25faHBwIj4KKzxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgorPGEgbmFtZT0iaGVhZGVyLmJvb3N0LmZ1bmN0aW9uYWwub3ZlcmxvYWRlZF9mdW5jdGlvbl9ocHAiPjwvYT5IZWFkZXIgJmx0OzxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL2Jvb3N0L2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi5ocHAiIHRhcmdldD0iX3RvcCI+Ym9vc3QvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uLmhwcDwvYT4mZ3Q7PC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KKzxwPk92ZXJsb2FkIGRpc3RpbmN0IGZ1bmN0aW9uIHBvaW50ZXJzLCBmdW5jdGlvbiByZWZlcmVuY2VzLCBhbmQgbW9ub21vcnBoaWMgZnVuY3Rpb24gb2JqZWN0cyBpbnRvIGEgc2luZ2xlIGZ1bmN0aW9uIG9iamVjdC4gPC9wPgorPHByZSBjbGFzcz0ic3lub3BzaXMiPjxzcGFuIGNsYXNzPSJrZXl3b3JkIj5uYW1lc3BhY2U8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5ib29zdDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPns8L3NwYW4+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50ZW1wbGF0ZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+IEYxPHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlbmFtZTwvc3Bhbj4gRjI8c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPi4uLjwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj5jbGFzczwvc3Bhbj4gPGEgY2xhc3M9ImxpbmsiIGhyZWY9ImJvb3N0L292ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCIgdGl0bGU9IkNsYXNzIHRlbXBsYXRlIG92ZXJsb2FkZWRfZnVuY3Rpb24iPm92ZXJsb2FkZWRfZnVuY3Rpb248L2E+PHNwYW4gY2xhc3M9InNwZWNpYWwiPjs8L3NwYW4+CisgIDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50ZW1wbGF0ZTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz0ia2V5d29yZCI+dHlwZW5hbWU8L3NwYW4+IEYxPHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJrZXl3b3JkIj50eXBlbmFtZTwvc3Bhbj4gRjI8c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPi4uLjwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+IAorICAgIDxhIGNsYXNzPSJsaW5rIiBocmVmPSJib29zdC9vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiIHRpdGxlPSJDbGFzcyB0ZW1wbGF0ZSBvdmVybG9hZGVkX2Z1bmN0aW9uIj5vdmVybG9hZGVkX2Z1bmN0aW9uPC9hPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mbHQ7PC9zcGFuPiA8c3BhbiBjbGFzcz0iaWRlbnRpZmllciI+X19mdW5jdGlvbl90eXBlX188L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiZsdDs8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GMTwvc3Bhbj4gPHNwYW4gY2xhc3M9InNwZWNpYWwiPiZndDs8L3NwYW4+PHNwYW4gY2xhc3M9InNwZWNpYWwiPiw8L3NwYW4+IDxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5fX2Z1bmN0aW9uX3R5cGVfXzwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmx0Ozwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkYyPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Jmd0Ozwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+Li4uPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4mZ3Q7PC9zcGFuPiAKKyAgICA8YSBjbGFzcz0ibGluayIgaHJlZj0iYm9vc3QvbWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uLmh0bWwiIHRpdGxlPSJGdW5jdGlvbiB0ZW1wbGF0ZSBtYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24iPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5tYWtlX292ZXJsb2FkZWRfZnVuY3Rpb248L3NwYW4+PC9hPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4oPC9zcGFuPjxzcGFuIGNsYXNzPSJpZGVudGlmaWVyIj5GMTwvc3Bhbj48c3BhbiBjbGFzcz0ic3BlY2lhbCI+LDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImlkZW50aWZpZXIiPkYyPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4sPC9zcGFuPiA8c3BhbiBjbGFzcz0ic3BlY2lhbCI+Li4uPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJzcGVjaWFsIj47PC9zcGFuPgorPHNwYW4gY2xhc3M9InNwZWNpYWwiPn08L3NwYW4+PC9wcmU+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24gaGVhZGVyX2Jvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZF9mdW5jdGlvbl9jb25maWdfaHBwIj4KKzxkaXYgY2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPgorPGEgbmFtZT0iaGVhZGVyLmJvb3N0LmZ1bmN0aW9uYWwub3ZlcmxvYWRlZF9mdW5jdGlvbi5jb25maWdfaHBwIj48L2E+SGVhZGVyICZsdDs8YSBocmVmPSIuLi8uLi8uLi8uLi8uLi9ib29zdC9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vY29uZmlnLmhwcCIgdGFyZ2V0PSJfdG9wIj5ib29zdC9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vY29uZmlnLmhwcDwvYT4mZ3Q7PC9oMz48L2Rpdj48L2Rpdj48L2Rpdj4KKzxwPkNoYW5nZSB0aGUgY29tcGlsZS10aW1lIGNvbmZpZ3VyYXRpb24gb2YgdGhpcyBsaWJyYXJ5LiA8L3A+Cis8cHJlIGNsYXNzPSJzeW5vcHNpcyI+CisKKzxhIGNsYXNzPSJsaW5rIiBocmVmPSJCT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX0FSSVRZX01BWC5odG1sIiB0aXRsZT0iTWFjcm8gQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19BUklUWV9NQVgiPkJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfQVJJVFlfTUFYPC9hPgorPGEgY2xhc3M9ImxpbmsiIGhyZWY9IkJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfT1ZFUkxPQURfTUFYLmh0bWwiIHRpdGxlPSJNYWNybyBCT09TVF9GVU5DVElPTkFMX09WRVJMT0FERURfRlVOQ1RJT05fQ09ORklHX09WRVJMT0FEX01BWCI+Qk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19PVkVSTE9BRF9NQVg8L2E+PC9wcmU+Cis8L2Rpdj4KKzwvZGl2PgorPHRhYmxlIHhtbG5zOnJldj0iaHR0cDovL3d3dy5jcy5ycGkuZWR1L35ncmVnb2QvYm9vc3QvdG9vbHMvZG9jL3JldmlzaW9uIiB3aWR0aD0iMTAwJSI+PHRyPgorPHRkIGFsaWduPSJsZWZ0Ij48L3RkPgorPHRkIGFsaWduPSJyaWdodCI+PGRpdiBjbGFzcz0iY29weXJpZ2h0LWZvb3RlciI+Q29weXJpZ2h0ICYjMTY5OyAyMDExLCAyMDEyIExvcmVuem8gQ2FtaW5pdGk8cD4KKyAgICAgICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wIChzZWUgYWNjb21wYW55aW5nCisgICAgICAgIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0IiB0YXJnZXQ9Il90b3AiPmh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvYT4pCisgICAgICA8L3A+Cis8L2Rpdj48L3RkPgorPC90cj48L3RhYmxlPgorPGhyPgorPGRpdiBjbGFzcz0ic3Bpcml0LW5hdiI+Cis8YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImJvb3N0X2Z1bmN0aW9uYWxfb3ZlcmxvYWRlZGZ1bmN0aW9uL3R1dG9yaWFsLmh0bWwiPjxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi9kb2Mvc3JjL2ltYWdlcy9wcmV2LnBuZyIgYWx0PSJQcmV2Ij48L2E+PGEgYWNjZXNza2V5PSJ1IiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvdXAucG5nIiBhbHQ9IlVwIj48L2E+PGEgYWNjZXNza2V5PSJoIiBocmVmPSJpbmRleC5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvaG9tZS5wbmciIGFsdD0iSG9tZSI+PC9hPjxhIGFjY2Vzc2tleT0ibiIgaHJlZj0iYm9vc3Qvb3ZlcmxvYWRlZF9mdW5jdGlvbi5odG1sIj48aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vZG9jL3NyYy9pbWFnZXMvbmV4dC5wbmciIGFsdD0iTmV4dCI+PC9hPgorPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9kb2Mvb3ZlcmxvYWRlZF9mdW5jdGlvbi5xYmsgYi9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi9kb2Mvb3ZlcmxvYWRlZF9mdW5jdGlvbi5xYmsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNmNjk2NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2RvYy9vdmVybG9hZGVkX2Z1bmN0aW9uLnFiawpAQCAtMCwwICsxLDE3MSBAQAorCitbLyBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMiBMb3JlbnpvIENhbWluaXRpIF0KK1svIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMCBdCitbLyAoc2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBhIGNvcHkgYXQgXQorWy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KSBdCitbLyBIb21lIGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uIF0KKworW2xpYnJhcnkgQm9vc3QuRnVuY3Rpb25hbC9PdmVybG9hZGVkRnVuY3Rpb24KKyAgICBbcXVpY2tib29rIDEuNV0KKyAgICBbdmVyc2lvbiAxLjAuMF0KKyAgICBbY29weXJpZ2h0IDIwMTEtMjAxMiBMb3JlbnpvIENhbWluaXRpXQorICAgIFtwdXJwb3NlIG92ZXJsb2FkIGZ1bmN0aW9ucyB3aXRoIG9uZSBmdW5jdGlvbiBvYmplY3RdCisgICAgW2xpY2Vuc2UKKyAgICAgICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wCisgICAgICAgIChzZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKKyAgICAgICAgW0BodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHRdKQorICAgIF0KKyAgICBbYXV0aG9ycyBbQ2FtaW5pdGkgPGVtYWlsPmxvcmNhbWluaXRpQGdtYWlsLmNvbTwvZW1haWw+LCBMb3JlbnpvXV0KKyAgICBbY2F0ZWdvcnkgRnVuY3Rpb24gT2JqZWN0cyBhbmQgSGlnaGVyLU9yZGVyIFByb2dyYW1taW5nXQorXQorCitbZGVmIF9fSW50cm9kdWN0aW9uX18gW2xpbmsgZnVuY3Rpb25hbF9vdmVybG9hZGVkX2Z1bmN0aW9uLmludHJvZHVjdGlvbiBJbnRyb2R1Y3Rpb25dXQorW2RlZiBfX0dldHRpbmdfU3RhcnRlZF9fIFtsaW5rIGZ1bmN0aW9uYWxfb3ZlcmxvYWRlZF9mdW5jdGlvbi5nZXR0aW5nX3N0YXJ0ZWQgR2V0dGluZyBTdGFydGVkXV0KK1tkZWYgX19UdXRvcmlhbF9fIFtsaW5rIGZ1bmN0aW9uYWxfb3ZlcmxvYWRlZF9mdW5jdGlvbi50dXRvcmlhbCBUdXRvcmlhbF1dCitbZGVmIF9fQm9vc3RfXyBbQGh0dHA6Ly93d3cuYm9vc3Qub3JnIEJvb3N0XV0KK1tkZWYgX19Cb29zdF9UZXN0X18gW0BodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3Rlc3QgQm9vc3QuVGVzdF1dCitbZGVmIF9fQm9vc3RfRnVuY3Rpb25fXyBbQGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvZnVuY3Rpb24gQm9vc3QuRnVuY3Rpb25dXQorW2RlZiBfX0Jvb3N0X1R5cGVvZl9fIFtAaHR0cDovL3d3dy5ib29zdC5vcmcvZG9jL2xpYnMvdHlwZW9mIEJvb3N0LlR5cGVvZl1dCisKK1tpbXBvcnQgLi4vdGVzdC9pZGVudGl0eS5ocHBdCitbaW1wb3J0IC4uL3Rlc3QvZnVuY3Rvci5jcHBdCitbaW1wb3J0IC4uL3Rlc3QvbWFrZV9kZWNsLmNwcF0KK1tpbXBvcnQgLi4vdGVzdC9tYWtlX2NhbGwuY3BwXQorCitUaGlzIGxpYnJhcnkgYWxsb3dzIHRvIG92ZXJsb2FkIGRpZmZlcmVudCBmdW5jdGlvbnMgaW50byBhIHNpbmdsZSBmdW5jdGlvbiBvYmplY3QuCisKK1tzZWN0aW9uIEludHJvZHVjdGlvbl0KKworQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgd2hpY2ggaGF2ZSBkaXN0aW5jdCBzaWduYXR1cmVzOgorCitbaWRlbnRpdHlfZGVjbHNdCisKK0luc3RlYWQgb2YgY2FsbGluZyB0aGVtIHVzaW5nIHRoZWlyIHNlcGFyYXRlIG5hbWVzIChoZXJlIGBCT09TVF9URVNUYCBpcyBlcXVpdmFsZW50IHRvIGBhc3NlcnRgKToKK1tmb290bm90ZQorSW4gbW9zdCBvZiB0aGUgZXhhbXBsZXMgcHJlc2VudGVkIGluIHRoaXMgZG9jdW1lbnRhdGlvbiwgdGhlIEJvb3N0LkRldGFpbC9MaWdodHdlaWdodFRlc3QgKD1ib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA9KSBtYWNybyBgQk9PU1RfVEVTVGAgaXMgdXNlZCB0byBjaGVjayBjb3JyZWN0bmVzcyBjb25kaXRpb25zIChjb25jZXB0dWFsbHkgc2ltaWxhciB0byBgYXNzZXJ0YCkuCitBIGZhaWx1cmUgb2YgdGhlIGNoZWNrZWQgY29uZGl0aW9uIGRvZXMgbm90IGFib3J0IHRoZSBleGVjdXRpb24gb2YgdGhlIHByb2dyYW0sIGl0IHdpbGwgaW5zdGVhZCBtYWtlIGBib29zdDo6cmVwb3J0X2Vycm9yc2AgcmV0dXJuIGEgbm9uLXplcm8gcHJvZ3JhbSBleGl0IGNvZGUuCitVc2luZyBCb29zdC5EZXRhaWwvTGlnaHR3ZWlnaHRUZXN0IGFsbG93cyB0byBhZGQgdGhlIGV4YW1wbGVzIHRvIHRoZSBsaWJyYXJ5IHJlZ3Jlc3Npb24gdGVzdHMgc28gdG8gbWFrZSBzdXJlIHRoYXQgdGhleSBhbHdheXMgY29tcGlsZSBhbmQgcnVuIGNvcnJlY3RseS4KK10KKworW2lkZW50aXR5X2NhbGxzXQorCitJdCBpcyBwb3NzaWJsZSB0byB1c2UgdGhpcyBsaWJyYXJ5IHRvIGNyZWF0ZSBhIHNpbmdsZSBbQGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRnVuY3Rpb25fb3ZlcmxvYWRpbmcgb3ZlcmxvYWRlZF0gZnVuY3Rpb24gb2JqZWN0IChvciBbQGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRnVuY3RvciBmdW5jdG9yXSkgbmFtZWQgYGlkZW50aXR5YCB0aGF0IGFnZ3JlZ2F0ZXMgdG9nZXRoZXIgdGhlIGNhbGxzIHRvIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgKHNlZSBhbHNvIFtALi4vLi4vdGVzdC9mdW5jdG9yLmNwcCA9ZnVuY3Rvci5jcHA9XSBhbmQgW0AuLi8uLi90ZXN0L2lkZW50aXR5LmhwcCA9aWRlbnRpdHkuaHBwPV0pOgorCitbaWRlbnRpdHlfZnVuY3Rvcl0KKworTm90ZSBob3cgdGhlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIHZpYSBhIHNpbmdsZSBvdmVybG9hZGVkIGZ1bmN0aW9uIG9iamVjdCBgaWRlbnRpdHlgIGluc3RlYWQgb2YgdXNpbmcgdGhlaXIgZGlmZmVyZW50IG5hbWVzIGBpZGVudGl0eV9zYCwgYGlkZW50aXR5X2lgLCBhbmQgYGlkZW50aXR5X2RgLgorCitbZW5kc2VjdF0KKworW3NlY3Rpb24gR2V0dGluZyBTdGFydGVkXQorCitUaGlzIHNlY3Rpb24gZXhwbGFpbnMgaG93IHRvIHNldHVwIGEgc3lzdGVtIHRvIHVzZSB0aGlzIGxpYnJhcnkuCisKK1tzZWN0aW9uIENvbXBpbGVycyBhbmQgUGxhdGZvcm1zXQorCitUaGUgYXV0aG9ycyBvcmlnaW5hbGx5IGRldmVsb3BlZCBhbmQgdGVzdGVkIHRoaXMgbGlicmFyeSBvbjoKKworIyBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiAoR0NDKSBDKysgNC41LjMgKHdpdGggYW5kIHdpdGhvdXQgQysrMTEgZmVhdHVyZXMgZW5hYmxlZCBgLXN0ZD1jKysweGApIG9uIEN5Z3dpbi4KKyMgTWlzY3Jvc29mdCBWaXN1YWwgQysrIChNU1ZDKSA4LjAgb24gV2luZG93cyA3LgorCitTZWUgdGhlIGxpYnJhcnkgW0BodHRwOi8vd3d3LmJvb3N0Lm9yZy9kZXZlbG9wbWVudC90ZXN0cy9yZWxlYXNlL2RldmVsb3Blci9mdW5jdGlvbmFsLW92ZXJsb2FkZWRfZnVuY3Rpb24uaHRtbCByZWdyZXNzaW9ucyB0ZXN0IHJlc3VsdHNdIGZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiBzdXBwb3J0ZWQgY29tcGlsZXJzIGFuZCBwbGF0Zm9ybXMuCitDaGVjayB0aGUgbGlicmFyeSByZWdyZXNzaW9uIHRlc3QgW0AuLi8uLi90ZXN0L0phbWZpbGUudjIgPUphbWZpbGUudjI9XSBmb3IgYW55IHNwZWNpYWwgY29uZmlndXJhdGlvbiB0aGF0IG1pZ2h0IGJlIHJlcXVpcmVkIGZvciBhIHNwZWNpZmljIGNvbXBpbGVyLgorCitbZW5kc2VjdF0KKworW3NlY3Rpb24gSW5zdGFsbGF0aW9uXQorCitUaGlzIGxpYnJhcnkgaXMgY29tcG9zZWQgb2YgaGVhZGVyIGZpbGVzIG9ubHkuCitUaGVyZWZvcmUgdGhlcmUgaXMgbm8gcHJlLWNvbXBpbGVkIG9iamVjdCBmaWxlIHdoaWNoIG5lZWRzIHRvIGJlIGluc3RhbGxlZC4KK1Byb2dyYW1tZXJzIGNhbiBzaW1wbHkgaW5zdHJ1Y3QgdGhlIGNvbXBpbGVyIHdoZXJlIHRvIGZpbmQgdGhlIGxpYnJhcnkgaGVhZGVyIGZpbGVzIChgLUlgIG9wdGlvbiBvbiBHQ0MsIGAvSWAgb3B0aW9uIG9uIE1TVkMsIGV0YykgYW5kIGNvbXBpbGUgY29kZSB1c2luZyB0aGUgbGlicmFyeS4KKworVGhlIG1heGltdW0gbnVtYmVyIG9mIGZ1bmN0aW9ucyB0byBvdmVybG9hZCBpcyBnaXZlbiBieSB0aGUgW21hY3JvcmVmIEJPT1NUX0ZVTkNUSU9OQUxfT1ZFUkxPQURFRF9GVU5DVElPTl9DT05GSUdfT1ZFUkxPQURfTUFYXSBjb25maWd1cmF0aW9uIG1hY3JvLgorVGhlIG1heGltdW0gbnVtYmVyIG9mIGZ1bmN0aW9uIHBhcmFtZXRlcnMgZm9yIGVhY2ggb2YgdGhlIHNwZWNpZmllZCBmdW5jdGlvbiB0eXBlIGlzIGdpdmVuIGJ5IHRoZSBbbWFjcm9yZWYgQk9PU1RfRlVOQ1RJT05BTF9PVkVSTE9BREVEX0ZVTkNUSU9OX0NPTkZJR19BUklUWV9NQVhdIGNvbmZpZ3VyYXRpb24gbWFjcm8uCitBbGwgY29uZmlndXJhdGlvbiBtYWNyb3MgaGF2ZSBhcHByb3ByaWF0ZSBkZWZhdWx0IHZhbHVlcyB3aGVuIHRoZXkgYXJlIGxlZnQgdW5kZWZpbmVkLgorCitbZW5kc2VjdF0KKworW2VuZHNlY3RdCisKK1tzZWN0aW9uIFR1dG9yaWFsXQorCitUaGlzIHNlY3Rpb24gZXhwbGFpbnMgaG93IHRvIHVzZSB0aGlzIGxpYnJhcnkuCisKK1tzZWN0aW9uIE92ZXJsb2FkaW5nXQorCitDb25zaWRlciB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB3aGljaCBoYXZlIGRpc3RpbmN0IHNpZ25hdHVyZXM6CisKK1tpZGVudGl0eV9kZWNsc10KKworVGhpcyBsaWJyYXJ5IGhlYWRlciBbaGVhZGVycmVmIGJvb3N0L2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi5ocHBdIHByb3ZpZGVzIGEgW2NsYXNzcmVmIGJvb3N0OjpvdmVybG9hZGVkX2Z1bmN0aW9uXSBjbGFzcyB0ZW1wbGF0ZSB0aGF0IGNyZWF0ZXMgYSBzaW5nbGUgb3ZlcmxvYWRlZCBmdW5jdGlvbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byBjYWxsIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb25zIGluc3RlYWQgb2YgdXNpbmcgdGhlIHNlcGFyYXRlIGZ1bmN0aW9uIG5hbWVzIChzZWUgYWxzbyBbQC4uLy4uL3Rlc3QvZnVuY3Rvci5jcHAgPWZ1bmN0b3IuY3BwPV0gYW5kIFtALi4vLi4vdGVzdC9pZGVudGl0eS5ocHAgPWlkZW50aXR5LmhwcD1dKToKKworW2lkZW50aXR5X2Z1bmN0b3JdCisKK05vdGUgaG93IGVhY2ggZnVuY3Rpb24gdHlwZSBpcyBwYXNzZWQgYXMgYSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgb2YgW2NsYXNzcmVmIGJvb3N0OjpvdmVybG9hZGVkX2Z1bmN0aW9uXSB1c2luZyB0aGUgZm9sbG93aW5nIHN5bnRheCAodGhpcyBpcyBfX0Jvb3N0X0Z1bmN0aW9uX18ncyBwcmVmZXJyZWQgc3ludGF4KToKKworICAgIGBgL3Jlc3VsdC10eXBlL2BgIChgYC9hcmd1bWVudDEtdHlwZS9gYCwgYGAvYXJndW1lbnQyLXR5cGUvYGAsIC4uLikKKworVGhlbiB0aGUgcmVsYXRpdmUgZnVuY3Rpb24gcG9pbnRlcnMsIGZ1bmN0aW9uIHJlZmVyZW5jZXMsIG9yIFtAaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Qb2x5bW9ycGhpc21fKGNvbXB1dGVyX3NjaWVuY2UpIG1vbm9tb3JwaGljIGZ1bmN0aW9uXSBvYmplY3RzIGFyZSBwYXNzZWQgdG8gdGhlIFtjbGFzc3JlZiBib29zdDo6b3ZlcmxvYWRlZF9mdW5jdGlvbl0gY29uc3RydWN0b3IgbWF0Y2hpbmcgdGhlIG9yZGVyIG9mIHRoZSBzcGVjaWZpZWQgdGVtcGxhdGUgcGFyYW1ldGVycy4KK1tmb290bm90ZQorRnVuY3Rpb24gcG9pbnRlcnMgYXJlIG9mIHRoZSBmb3JtIFteWydyZXN1bHQtdHlwZSBdXWAoKikoYFteWydhcmd1bWVudDEtdHlwZV1dYCwgLi4uKWAgKHRoZSBDKysgY29tcGlsZXIgaXMgdXN1YWxseSBhYmxlIHRvIGF1dG9tYXRpY2FsbHkgcHJvbW90ZSBhIGZ1bmN0aW9uIG5hbWUgdG8gYSBmdW5jdGlvbiBwb2ludGVyIGluIGEgY29udGV4dCB3aGVyZSBhIGZ1bmN0aW9uIHBvaW50ZXIgaXMgZXhwZWN0ZWQgZXZlbiBpZiB0aGUgZnVuY3Rpb24gbmFtZSBpcyBub3QgcHJlZml4ZWQgYnkgYCZgKS4KK0Z1bmN0aW9uIHJlZmVyZW5jZXMgYXJlIG9mIHRoZSBmb3JtIFteWydyZXN1bHQtdHlwZSBdXWAoJikoYFteWydhcmd1bWVudDEtdHlwZV1dYCwgLi4uKWAuCitGdW5jdGlvbiB0eXBlcyBhcmUgb2YgdGhlIGZvcm0gW15bJ3Jlc3VsdC10eXBlIF1dYChgW15bJ2FyZ3VtZW50MS10eXBlXV1gLCAuLi4pYCAobm90ZSBob3cgdGhleSBsYWNrIG9mIGJvdGggYCpgIGFuZCBgJmAgd2hlbiBjb21wYXJlZCB0byBmdW5jdGlvbiBwb2ludGVycyBhbmQgZnVuY3Rpb24gcmVmZXJlbmNlcykuCitGaW5hbGx5LCBtb25vbW9ycGhpYyBmdW5jdGlvbiBvYmplY3RzIGFyZSBpbnN0YW5jZXMgb2YgY2xhc3NlcyB3aXRoIGEgbm9uLXRlbXBsYXRlIGNhbGwgb3BlcmF0b3Igb2YgdGhlIGZvcm0gW15bJ3Jlc3VsdC10eXBlIF1dYG9wZXJhdG9yKCkoYFteWydhcmd1bWVudDEtdHlwZV1dYCwgLi4uKWAuCitVbmZvcnR1bmF0ZWx5LCBpdCBpcyBub3QgcG9zc2libGUgdG8gc3VwcG9ydCBwb2x5bW9ycGhpYyBmdW5jdGlvbiBvYmplY3RzIChzZWUgW0BodHRwOi8vbGlzdHMuYm9vc3Qub3JnL0FyY2hpdmVzL2Jvb3N0LzIwMTIvMDMvMTkxNzQ0LnBocF0pLgorXQorSW4gdGhlIGFib3ZlIGV4YW1wbGUsIGBpZGVudGl0eV9zYCBpcyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyICh0aGUgZnVuY3Rpb24gYWRkcmVzcyBpcyBhdXRvbWF0aWNhbGx5IHRha2VuIGZyb20gdGhlIGZ1bmN0aW9uIG5hbWUgYnkgdGhlIGNvbXBpbGVyKSwgYGlkZW50aXR5X2lgIGFzIGEgZnVuY3Rpb24gcmVmZXJlbmNlLCBhbmQgYGlkZW50aXR5X2RgIGFzIGEgZnVuY3Rpb24gb2JqZWN0LgorCitBbGwgc3BlY2lmaWVkIGZ1bmN0aW9uIHR5cGVzIG11c3QgaGF2ZSBkaXN0aW5jdCBwYXJhbWV0ZXJzIGZyb20gb25lIGFub3RoZXIgKHNvIHRoZSBvdmVybG9hZGVkIGNhbGxzIGNhbiBiZSByZXNvbHZlZCBieSB0aGlzIGxpYnJhcnkpLgorW2Zvb3Rub3RlCitOb3RlIHRoYXQgaW4gQysrIHRoZSBmdW5jdGlvbiByZXN1bHQgdHlwZSBpcyBub3QgdXNlZCBmb3Igb3ZlcmxvYWQgcmVzb2x1dGlvbiAodG8gYXZvaWQgbWFraW5nIHRoZSBvdmVybG9hZCByZXNvbHV0aW9uIGNvbnRleHQgZGVwZW5kZW50KS4KK1RoZXJlZm9yZSwgYXQgbGVhc3Qgb25lIG9mIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXJzIG11c3QgYmUgZGlzdGluY3QgZm9yIGVhY2ggc3BlY2lmaWVkIGZ1bmN0aW9uIHR5cGUuCitdCitJbiBvcmRlciB0byBjcmVhdGUgYW4gb3ZlcmxvYWRlZCBmdW5jdGlvbiBvYmplY3QsIGl0IGlzIG5lY2Vzc2FyeSB0byBzcGVjaWZ5IGF0IGxlYXN0IHR3byBmdW5jdGlvbiB0eXBlcyAoYmVjYXVzZSB0aGVyZSBpcyBub3RoaW5nIHRvIG92ZXJsb2FkIGJldHdlZW4gb25lIG9yIHplcm8gZnVuY3Rpb25zKS4KKworW2VuZHNlY3RdCisKK1tzZWN0aW9uIFdpdGhvdXQgRnVuY3Rpb24gVHlwZXNdCisKK0ZvciBjb252ZW5pZW5jZSwgdGhpcyBsaWJyYXJ5IGFsc28gcHJvdmlkZXMgdGhlIFtmdW5jcmVmIGJvb3N0OjptYWtlX292ZXJsb2FkZWRfZnVuY3Rpb25dIGZ1bmN0aW9uIHRlbXBsYXRlIHdoaWNoIGFsbG93cyB0byBjcmVhdGUgdGhlIG92ZXJsb2FkZWQgZnVuY3Rpb24gb2JqZWN0IHdpdGhvdXQgZXhwbGljaXRseSBzcGVjaWZ5aW5nIHRoZSBmdW5jdGlvbiB0eXBlcy4KK1RoZSBmdW5jdGlvbiB0eXBlcyBhcmUgYXV0b21hdGljYWxseSBkZWR1Y2VkIGZyb20gdGhlIHNwZWNpZmllZCBmdW5jdGlvbnMgYW5kIHRoZSBhcHByb3ByaWF0ZSBbY2xhc3NyZWYgYm9vc3Q6Om92ZXJsb2FkZWRfZnVuY3Rpb25dIGluc3RhbnRpYXRpb24gaXMgcmV0dXJuZWQgYnkgW2Z1bmNyZWYgYm9vc3Q6Om1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbl0uCisKK1RoZSBbZnVuY3JlZiBib29zdDo6bWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uXSBmdW5jdGlvbiB0ZW1wbGF0ZSBjYW4gYmUgdXNlZnVsIHdoZW4gdXNlZCB0b2dldGhlciB3aXRoIF9fQm9vc3RfVHlwZW9mX18ncyBgQk9PU1RfQVVUT2AgKG9yIEMrKzExIGBhdXRvYCkuCitGb3IgZXhhbXBsZSAoc2VlIGFsc28gW0AuLi8uLi90ZXN0L21ha2VfZGVjbC5jcHAgPW1ha2VfZGVjbC5jcHA9XSBhbmQgW0AuLi8uLi90ZXN0L2lkZW50aXR5LmhwcCA9aWRlbnRpdHkuaHBwPV0pOgorCitbaWRlbnRpdHlfbWFrZV9kZWNsXQorCitOb3RlIGhvdyB0aGUgb3ZlcmxvYWRlZCBmdW5jdGlvbiBvYmplY3QgYGlkZW50aXR5YCBoYXMgYmVlbiBjcmVhdGVkIHNwZWNpZnlpbmcgb25seSB0aGUgZnVuY3Rpb25zIGBpZGVudGl0eV9zYCwgYGlkZW50aXR5X2lgLCBgaWRlbnRpdHlfZGAgYW5kIHdpdGhvdXQgc3BlY2lmeWluZyB0aGUgZnVuY3Rpb24gdHlwZXMgYGNvbnN0IHN0ZDo6c3RyaW5nJiAoY29uc3Qgc3RkOjpzdHJpbmcmKWAsIGBpbnQgKGludClgLCBhbmQgYGRvdWJsZSAoZG91YmxlKWAgYXMgcmVxdWlyZWQgaW5zdGVhZCBieSBbY2xhc3NyZWYgYm9vc3Q6Om92ZXJsb2FkZWRfZnVuY3Rpb25dLgorVGhlcmVmb3JlLCBbZnVuY3JlZiBib29zdDo6bWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uXSBwcm92aWRlcyBhIG1vcmUgY29uY2lzZSBzeW50YXggaW4gdGhpcyBjb250ZXh0IHdoZW4gY29tcGFyZWQgd2l0aCBbY2xhc3NyZWYgYm9vc3Q6Om92ZXJsb2FkZWRfZnVuY3Rpb25dLgorCitBbm90aGVyIGNhc2Ugd2hlcmUgW2Z1bmNyZWYgYm9vc3Q6Om1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbl0gY2FuIGJlIHVzZWZ1bCBpcyB3aGVuIHRoZSBvdmVybG9hZGVkIGZ1bmN0aW9uIG9iamVjdCBpcyBwYXNzZWQgdG8gYSBmdW5jdGlvbiB0ZW1wbGF0ZSB3aGljaCBjYW4gaG9sZCB0aGUgc3BlY2lmaWMgW2NsYXNzcmVmIGJvb3N0OjpvdmVybG9hZGVkX2Z1bmN0aW9uXSB0eXBlIHVzaW5nIGEgdGVtcGxhdGUgcGFyYW1ldGVyLgorRm9yIGV4YW1wbGUgKHNlZSBhbHNvIFtALi4vLi4vdGVzdC9tYWtlX2NhbGwuY3BwID1tYWtlX2NhbGwuY3BwPV0gYW5kIFtALi4vLi4vdGVzdC9pZGVudGl0eS5ocHAgPWlkZW50aXR5LmhwcD1dKToKKworW2lkZW50aXR5X21ha2VfY2hlY2tzXQorW2lkZW50aXR5X21ha2VfY2FsbF0KKworVGhlIGxpYnJhcnkgaW1wbGVtZW50YXRpb24gb2YgW2Z1bmNyZWYgYm9vc3Q6Om1ha2Vfb3ZlcmxvYWRlZF9mdW5jdGlvbl0gdXNlcyBfX0Jvb3N0X1R5cGVvZl9fIHRvIGF1dG9tYXRpY2FsbHkgZGVkdWNlIHNvbWUgb2YgdGhlIGZ1bmN0aW9uIHR5cGVzLgorSW4gb3JkZXIgdG8gY29tcGlsZSBjb2RlIGluIF9fQm9vc3RfVHlwZW9mX18gZW11bGF0aW9uIG1vZGUsIGFsbCB0eXBlcyBzaG91bGQgYmUgcHJvcGVybHkgcmVnaXN0ZXJlZCB1c2luZyBgQk9PU1RfVFlQRU9GX1JFR0lTVEVSX1RZUEVgIGFuZCBgQk9PU1RfVFlQRU9GX1JFR0lTVEVSX1RFTVBMQVRFYCwgb3IgYXBwcm9wcmlhdGUgX19Cb29zdF9UeXBlb2ZfXyBoZWFkZXJzIHNob3VsZCBiZSBpbmNsdWRlZCAoc2VlIF9fQm9vc3RfVHlwZW9mX18gZm9yIG1vcmUgaW5mb3JtYXRpb24pLgorRm9yIHRoZSBhYm92ZSBleGFtcGxlcywgaXQgaXMgc3VmZmljaWVudCB0byBpbmNsdWRlIHRoZSBfX0Jvb3N0X1R5cGVvZl9fIGhlYWRlciB0aGF0IHJlZ2lzdGVycyBgc3RkOjpzdHJpbmdgICh0aGlzIGxpYnJhcnkgZG9lcyBub3QgcmVxdWlyZSB0byByZWdpc3RlciBgYm9vc3Q6OmZ1bmN0aW9uYCBmb3IgX19Cb29zdF9UeXBlb2ZfXyBlbXVsYXRpb24pOgorCitbaWRlbnRpdHlfdHlwZW9mXQorCitbZW5kc2VjdF0KKworW2VuZHNlY3RdCisKK1t4aW5jbHVkZSByZWZlcmVuY2UueG1sXQorCitbc2VjdGlvbiBBY2tub3dsZWRnbWVudHNdCisKK01hbnkgdGhhbmtzIHRvIE1hdGhpYXMgR2F1bmFyZCBmb3Igc3VnZ2VzdGluZyB0byBpbXBsZW1lbnQgW2NsYXNzcmVmIGJvb3N0OjpvdmVybG9hZGVkX2Z1bmN0aW9uXSBhbmQgZm9yIHNvbWUgc2FtcGxlIGNvZGUuCisKK1RoYW5rcyB0byBKb2huIEJ5dGhld2F5IGZvciBzdWdnZXN0aW5nIHRvIGltcGxlbWVudCBbZnVuY3JlZiBib29zdDo6bWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uXS4KKworVGhhbmtzIHRvIE5hdGhhbiBSaWRnZSBmb3Igc3VnZ2VzdGlvbnMgb24gaG93IHRvIGltcGxlbWVudCBbZnVuY3JlZiBib29zdDo6bWFrZV9vdmVybG9hZGVkX2Z1bmN0aW9uXS4KKworVGhhbmtzIHRvIFJvYmVydCBTdGV3YXJ0IGZvciBjb21tZW50aW5nIG9uIHRoZSBsaWJyYXJ5IG5hbWUuCisKK01hbnkgdGhhbmtzIHRvIHRoZSBlbnRpcmUgX19Cb29zdF9fIGNvbW11bml0eSBhbmQgbWFpbGluZyBsaXN0IGZvciBwcm92aWRpbmcgdmFsdWFibGUgY29tbWVudHMgYWJvdXQgdGhpcyBsaWJyYXJ5IGFuZCBncmVhdCBpbnNpZ2h0cyBvbiB0aGUgQysrIHByb2dyYW1taW5nIGxhbmd1YWdlLgorCitbZW5kc2VjdF0KKwpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vaW5kZXguaHRtbCBiL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBiMzM2MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL2luZGV4Lmh0bWwKQEAgLTAsMCArMSwxNSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCIgY29udGVudD0iMDsgVVJMPWRvYy9odG1sL2luZGV4Lmh0bWwiPgorICA8L2hlYWQ+CisgIDxib2R5PgorICAgIEF1dG9tYXRpYyByZWRpcmVjdGlvbiBmYWlsZWQsIGNsaWNrIHRoaXMgCisgICAgPGEgaHJlZj0iZG9jL2h0bWwvaW5kZXguaHRtbCI+bGluazwvYT4gJm5ic3A7PGhyPgorICAgIDxwPqkgQ29weXJpZ2h0IExvcmVuem8gQ2FtaW5pdGksIDIwMDktMjAxMjwvcD4KKyAgICA8cD5EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAgKHNlZSAKKyAgICBhY2NvbXBhbnlpbmcgZmlsZSA8YSBocmVmPSIuLi8uLi8uLi9MSUNFTlNFXzFfMC50eHQiPgorICAgIExJQ0VOU0VfMV8wLnR4dDwvYT4gb3IgYSBjb3B5IGF0CisgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0Ij53d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvYT4pPC9wPgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi90ZXN0L0phbWZpbGUudjIgYi9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi90ZXN0L0phbWZpbGUudjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg3MWVlNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL3Rlc3QvSmFtZmlsZS52MgpAQCAtMCwwICsxLDE2IEBACisKKyMgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTIgTG9yZW56byBDYW1pbml0aQorIyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAKKyMgKHNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgYSBjb3B5IGF0CisjIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKyMgSG9tZSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbgorCitpbXBvcnQgdGVzdGluZyA7CisKKyMgU3VuIGRvZXMgbm90IGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHR5cGUtb2YgZW11bGF0aW9uIChmb3JjZSBpdCkuCitwcm9qZWN0IDogcmVxdWlyZW1lbnRzIDx0b29sc2V0PnN1bjo8ZGVmaW5lPkJPT1NUX1RZUEVPRl9FTVVMQVRJT04gOworCitydW4gZnVuY3Rvci5jcHAgOworcnVuIG1ha2VfZGVjbC5jcHAgOworcnVuIG1ha2VfY2FsbC5jcHAgOworCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi90ZXN0L2Z1bmN0b3IuY3BwIGIvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vdGVzdC9mdW5jdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzhkOTc3Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vdGVzdC9mdW5jdG9yLmNwcApAQCAtMCwwICsxLDM0IEBACisKKy8vIENvcHlyaWdodCAoQykgMjAwOS0yMDEyIExvcmVuem8gQ2FtaW5pdGkKKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMAorLy8gKHNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgYSBjb3B5IGF0CisvLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisvLyBIb21lIGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uCisKKyNpbmNsdWRlICJpZGVudGl0eS5ocHAiCisjaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uLmhwcD4KKyNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+CisKK2ludCBtYWluKCkgeworICAgIC8vW2lkZW50aXR5X2NhbGxzCisgICAgQk9PU1RfVEVTVChpZGVudGl0eV9zKCJhYmMiKSA9PSAiYWJjIik7CisgICAgQk9PU1RfVEVTVChpZGVudGl0eV9pKDEyMykgPT0gMTIzKTsKKyAgICBCT09TVF9URVNUKGlkZW50aXR5X2QoMS4yMykgPT0gMS4yMyk7CisgICAgLy9dCisKKyAgICAvL1tpZGVudGl0eV9mdW5jdG9yCisgICAgbmRuYm9vc3Q6Om92ZXJsb2FkZWRfZnVuY3Rpb248CisgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIChjb25zdCBzdGQ6OnN0cmluZyYpCisgICAgICAgICwgaW50IChpbnQpCisgICAgICAgICwgZG91YmxlIChkb3VibGUpCisgICAgPiBpZGVudGl0eShpZGVudGl0eV9zLCBpZGVudGl0eV9pLCBpZGVudGl0eV9kKTsKKworICAgIC8vIEFsbCBjYWxscyB2aWEgc2luZ2xlIGBpZGVudGl0eWAgZnVuY3Rpb24uCisgICAgQk9PU1RfVEVTVChpZGVudGl0eSgiYWJjIikgPT0gImFiYyIpOworICAgIEJPT1NUX1RFU1QoaWRlbnRpdHkoMTIzKSA9PSAxMjMpOworICAgIEJPT1NUX1RFU1QoaWRlbnRpdHkoMS4yMykgPT0gMS4yMyk7CisgICAgLy9dCisKKyAgICByZXR1cm4gbmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKK30KKwpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vdGVzdC9pZGVudGl0eS5ocHAgYi9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi90ZXN0L2lkZW50aXR5LmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWM1YTJjCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vdGVzdC9pZGVudGl0eS5ocHAKQEAgLTAsMCArMSwyOSBAQAorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMiBMb3JlbnpvIENhbWluaXRpCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAKKy8vIChzZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGEgY29weSBhdAorLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorLy8gSG9tZSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbgorCisjaWZuZGVmIElERU5USVRZX0hQUF8KKyNkZWZpbmUgSURFTlRJVFlfSFBQXworCisvL1tpZGVudGl0eV90eXBlb2YKKyNpbmNsdWRlIDxib29zdC90eXBlb2Yvc3RkL3N0cmluZy5ocHA+IC8vIE5vIG5lZWQgdG8gcmVnaXN0ZXIgYG5kbmJvb3N0OjpmdW5jdGlvbmAuCisvL10KKyNpbmNsdWRlIDxib29zdC9mdW5jdGlvbi5ocHA+CisjaW5jbHVkZSA8c3RyaW5nPgorCisvL1tpZGVudGl0eV9kZWNscworY29uc3Qgc3RkOjpzdHJpbmcmIGlkZW50aXR5X3MoY29uc3Qgc3RkOjpzdHJpbmcmIHgpIC8vIEZ1bmN0aW9uIChhcyBwb2ludGVyKS4KKyAgICB7IHJldHVybiB4OyB9CisKK2ludCBpZGVudGl0eV9pX2ltcGwoaW50IHgpIHsgcmV0dXJuIHg7IH0KK2ludCAoJmlkZW50aXR5X2kpKGludCkgPSBpZGVudGl0eV9pX2ltcGw7IC8vIEZ1bmN0aW9uIHJlZmVyZW5jZS4KKworZG91YmxlIGlkZW50aXR5X2RfaW1wbChkb3VibGUgeCkgeyByZXR1cm4geDsgfQorbmRuYm9vc3Q6OmZ1bmN0aW9uPGRvdWJsZSAoZG91YmxlKT4gaWRlbnRpdHlfZCA9IGlkZW50aXR5X2RfaW1wbDsgLy8gRnVuY3Rvci4KKy8vXQorCisjZW5kaWYgLy8gI2luY2x1ZGUgZ3VhcmQKKwpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vdGVzdC9tYWtlX2NhbGwuY3BwIGIvbGlicy9mdW5jdGlvbmFsL292ZXJsb2FkZWRfZnVuY3Rpb24vdGVzdC9tYWtlX2NhbGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNTViNTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi90ZXN0L21ha2VfY2FsbC5jcHAKQEAgLTAsMCArMSwyNyBAQAorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMiBMb3JlbnpvIENhbWluaXRpCisvLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAKKy8vIChzZWUgYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGEgY29weSBhdAorLy8gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorLy8gSG9tZSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbgorCisjaW5jbHVkZSAiaWRlbnRpdHkuaHBwIgorI2luY2x1ZGUgPGJvb3N0L2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi5ocHA+CisjaW5jbHVkZSA8Ym9vc3QvZGV0YWlsL2xpZ2h0d2VpZ2h0X3Rlc3QuaHBwPgorCisvL1tpZGVudGl0eV9tYWtlX2NoZWNrcwordGVtcGxhdGU8dHlwZW5hbWUgRj4KK3ZvaWQgY2hlY2soRiBpZGVudGl0eSkgeworICAgIEJPT1NUX1RFU1QoaWRlbnRpdHkoImFiYyIpID09ICJhYmMiKTsKKyAgICBCT09TVF9URVNUKGlkZW50aXR5KDEyMykgPT0gMTIzKTsKKyAgICBCT09TVF9URVNUKGlkZW50aXR5KDEuMjMpID09IDEuMjMpOworfQorLy9dCisKK2ludCBtYWluKCkgeworICAgIC8vW2lkZW50aXR5X21ha2VfY2FsbAorICAgIGNoZWNrKG5kbmJvb3N0OjptYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24oaWRlbnRpdHlfcywgaWRlbnRpdHlfaSwgaWRlbnRpdHlfZCkpOworICAgIC8vXQorICAgIHJldHVybiBuZG5ib29zdDo6cmVwb3J0X2Vycm9ycygpOworfQorCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi90ZXN0L21ha2VfZGVjbC5jcHAgYi9saWJzL2Z1bmN0aW9uYWwvb3ZlcmxvYWRlZF9mdW5jdGlvbi90ZXN0L21ha2VfZGVjbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc2ODM0ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uL3Rlc3QvbWFrZV9kZWNsLmNwcApAQCAtMCwwICsxLDI0IEBACisKKy8vIENvcHlyaWdodCAoQykgMjAwOS0yMDEyIExvcmVuem8gQ2FtaW5pdGkKKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMAorLy8gKHNlZSBhY2NvbXBhbnlpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgYSBjb3B5IGF0CisvLyBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisvLyBIb21lIGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uCisKKyNpbmNsdWRlICJpZGVudGl0eS5ocHAiCisjaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC9vdmVybG9hZGVkX2Z1bmN0aW9uLmhwcD4KKyNpbmNsdWRlIDxib29zdC90eXBlb2YvdHlwZW9mLmhwcD4KKyNpbmNsdWRlIDxib29zdC9kZXRhaWwvbGlnaHR3ZWlnaHRfdGVzdC5ocHA+CisKK2ludCBtYWluKCkgeworICAgIC8vW2lkZW50aXR5X21ha2VfZGVjbAorICAgIEJPT1NUX0FVVE8oaWRlbnRpdHksIG5kbmJvb3N0OjptYWtlX292ZXJsb2FkZWRfZnVuY3Rpb24oCisgICAgICAgICAgICBpZGVudGl0eV9zLCBpZGVudGl0eV9pLCBpZGVudGl0eV9kKSk7CisKKyAgICBCT09TVF9URVNUKGlkZW50aXR5KCJhYmMiKSA9PSAiYWJjIik7CisgICAgQk9PU1RfVEVTVChpZGVudGl0eSgxMjMpID09IDEyMyk7CisgICAgQk9PU1RfVEVTVChpZGVudGl0eSgxLjIzKSA9PSAxLjIzKTsKKyAgICAvL10KKyAgICByZXR1cm4gbmRuYm9vc3Q6OnJlcG9ydF9lcnJvcnMoKTsKK30KKwpkaWZmIC0tZ2l0IGEvbGlicy9mdW5jdGlvbmFsL3B0cl9mdW4uaHRtbCBiL2xpYnMvZnVuY3Rpb25hbC9wdHJfZnVuLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRjNjJiNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9wdHJfZnVuLmh0bWwKQEAgLTAsMCArMSwxNTggQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorCis8aHRtbD4KKzxoZWFkPgorICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LUxhbmd1YWdlIiBjb250ZW50PSJlbi11cyI+CisgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXVzLWFzY2lpIj4KKworICA8dGl0bGU+Qm9vc3QgRnVuY3Rpb24gT2JqZWN0IEFkYXB0ZXIgTGlicmFyeTwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5IGJnY29sb3I9IiNGRkZGRkYiIHRleHQ9IiMwMDAwMDAiPgorICA8dGFibGUgYm9yZGVyPSIxIiBiZ2NvbG9yPSIjMDA3RjdGIiBjZWxscGFkZGluZz0iMiIgc3VtbWFyeT0iIj4KKyAgICA8dHI+CisgICAgICA8dGQgYmdjb2xvcj0iI0ZGRkZGRiI+PGltZyBzcmM9Ii4uLy4uL2Jvb3N0LnBuZyIgYWx0PQorICAgICAgImJvb3N0LnBuZyAoNjg5NyBieXRlcykiIHdpZHRoPSIyNzciIGhlaWdodD0iODYiPjwvdGQ+CisKKyAgICAgIDx0ZD48YSBocmVmPSIuLi8uLi9pbmRleC5odG0iPjxmb250IGZhY2U9IkFyaWFsIiBjb2xvcj0KKyAgICAgICIjRkZGRkZGIj48YmlnPkhvbWU8L2JpZz48L2ZvbnQ+PC9hPjwvdGQ+CisKKyAgICAgIDx0ZD48YSBocmVmPSIuLi9saWJyYXJpZXMuaHRtIj48Zm9udCBmYWNlPSJBcmlhbCIgY29sb3I9CisgICAgICAiI0ZGRkZGRiI+PGJpZz5MaWJyYXJpZXM8L2JpZz48L2ZvbnQ+PC9hPjwvdGQ+CisKKyAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9wZW9wbGUvcGVvcGxlLmh0bSI+PGZvbnQgZmFjZT0iQXJpYWwiIGNvbG9yPQorICAgICAgIiNGRkZGRkYiPjxiaWc+UGVvcGxlPC9iaWc+PC9mb250PjwvYT48L3RkPgorCisgICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy5ib29zdC5vcmcvbW9yZS9mYXEuaHRtIj48Zm9udCBmYWNlPSJBcmlhbCIgY29sb3I9CisgICAgICAiI0ZGRkZGRiI+PGJpZz5GQVE8L2JpZz48L2ZvbnQ+PC9hPjwvdGQ+CisKKyAgICAgIDx0ZD48YSBocmVmPSIuLi8uLi9tb3JlL2luZGV4Lmh0bSI+PGZvbnQgZmFjZT0iQXJpYWwiIGNvbG9yPQorICAgICAgIiNGRkZGRkYiPjxiaWc+TW9yZTwvYmlnPjwvZm9udD48L2E+PC90ZD4KKyAgICA8L3RyPgorICA8L3RhYmxlPgorCisgIDxoMT5GdW5jdGlvbiBQb2ludGVyIEFkYXB0ZXJzPC9oMT4KKworICA8cD5UaGUgaGVhZGVyIDxhIGhyZWY9Ii4uLy4uL2Jvb3N0L2Z1bmN0aW9uYWwuaHBwIj5mdW5jdGlvbmFsLmhwcDwvYT4KKyAgcHJvdmlkZXMgZW5oYW5jZWQgdmVyc2lvbnMgb2YgYm90aCB0aGUgZnVuY3Rpb24gcG9pbnRlciBhZGFwdGVycyBmcm9tIHRoZQorICBDKysgU3RhbmRhcmQgTGlicmFyeSAoJnNlY3Q7MjAuMy43KTo8L3A+CisKKyAgPHVsPgorICAgIDxsaT48dHQ+cG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjwvdHQ+PC9saT4KKworICAgIDxsaT48dHQ+cG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb248L3R0PjwvbGk+CisgIDwvdWw+CisKKyAgPHA+QXMgd2VsbCBhcyB0aGUgY29ycmVzcG9uZGluZyBoZWxwZXIgZnVuY3Rpb24gdGVtcGxhdGU6PC9wPgorCisgIDx1bD4KKyAgICA8bGk+PHR0PnB0cl9mdW48L3R0PjwvbGk+CisgIDwvdWw+CisKKyAgPHA+SG93ZXZlciwgeW91IHNob3VsZCBub3QgbmVlZCB0byB1c2UgdGhlIGFkYXB0ZXJzIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCisgIGFkYXB0ZXJzIGluIHRoaXMgbGlicmFyeSBkdWUgdG8gb3VyIHVzZSBvZiA8YSBocmVmPQorICAiZnVuY3Rpb25fdHJhaXRzLmh0bWwiPmZ1bmN0aW9uIG9iamVjdCB0cmFpdHM8L2E+LiBZb3Ugd2lsbCBob3dldmVyIG5lZWQgdG8KKyAgdXNlIHRoZW0gaWYgeW91ciBpbXBsZW1lbnRhdGlvbiBmYWlscyB0byB3b3JrIHByb3Blcmx5IHdpdGggb3VyIHRyYWl0cworICBjbGFzc2VzIChkdWUgdG8gbGFjayBpZiBwYXJ0aWFsIHNwZWNpYWxpc2F0aW9uKSwgb3IgaWYgeW91IHdpc2ggdG8gdXNlIGEKKyAgZnVuY3Rpb24gb2JqZWN0IGFkYXB0ZXIgZnJvbSBhIHRoaXJkIHBhcnR5LjwvcD4KKworICA8aDM+VXNhZ2U8L2gzPgorCisgIDxwPklmIHlvdSBuZWVkIHRvIHVzZSB0aGVzZSBhZGFwdGVycywgdXNhZ2UgaXMgaWRlbnRpY2FsIHRvIHRoZSBzdGFuZGFyZAorICBmdW5jdGlvbiBwb2ludGVyIGFkYXB0ZXJzLiBGb3IgZXhhbXBsZSw8L3A+CisKKyAgPGJsb2NrcXVvdGU+CisgICAgPHByZT4KK2Jvb2wgYmFkKHN0ZDo6c3RyaW5nIGZvbykgeyAuLi4gfQorLi4uCitzdGQ6OnZlY3RvciZsdDtzdGQ6OnN0cmluZyZndDsgYzsKKy4uLgorc3RkOjp2ZWN0b3ImbHQ7c3RkOjpzdHJpbmcmZ3Q7OjppdGVyYXRvciBpdAorICAgICA9IHN0ZDo6ZmluZF9pZihjLmJlZ2luKCksIGMuZW5kKCksIHN0ZDo6bm90MShib29zdDo6cHRyX2Z1bihiYWQpKSk7Cis8L3ByZT4KKyAgPC9ibG9ja3F1b3RlPgorCisgIDxwPk5vdGUgaG93ZXZlciB0aGF0IHRoaXMgbGlicmFyeSBjb250YWlucyBlbmhhbmNlZCA8YSBocmVmPQorICAibmVnYXRvcnMuaHRtbCI+bmVnYXRvcnM8L2E+IHRoYXQgc3VwcG9ydCBmdW5jdGlvbiBvYmplY3QgdHJhaXRzLCBzbyB0aGUKKyAgbGluZSBhYm92ZSBjb3VsZCBlcXVhbGx5IGJlIHdyaXR0ZW48L3A+CisKKyAgPGJsb2NrcXVvdGU+CisgICAgPHByZT4KK3N0ZDo6dmVjdG9yJmx0O3N0ZDo6c3RyaW5nJmd0Ozo6aXRlcmF0b3IgaXQKKyAgICAgPSBzdGQ6OmZpbmRfaWYoYy5iZWdpbigpLCBjLmVuZCgpLCBib29zdDo6bm90MShiYWQpKTsKKzwvcHJlPgorICA8L2Jsb2NrcXVvdGU+CisKKyAgPGgzPkFyZ3VtZW50IFR5cGVzPC9oMz4KKworICA8cD5UaGUgc3RhbmRhcmQgZGVmaW5lcyA8dHQ+cG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjwvdHQ+IGxpa2UgdGhpcworICAoJnNlY3Q7MjAuMy44Jm5ic3A7JnBhcmE7Mik6PC9wPgorCisgIDxibG9ja3F1b3RlPgorICAgIDxwcmU+Cit0ZW1wbGF0ZSAmbHQ7Y2xhc3MgQXJnLCBjbGFzcyBSZXN1bHQmZ3Q7CitjbGFzcyBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uJmx0O0FyZywgUmVzdWx0Jmd0OyB7CitwdWJsaWM6CisgIGV4cGxpY2l0IHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24oUmVzdWx0ICgqIGYpKDxzdHJvbmc+QXJnPC9zdHJvbmc+KSk7CisgIFJlc3VsdCBvcGVyYXRvcigpKDxzdHJvbmc+QXJnPC9zdHJvbmc+IHgpIGNvbnN0OworfTsKKzwvcHJlPgorICA8L2Jsb2NrcXVvdGU+CisKKyAgPHA+Tm90ZSB0aGF0IHRoZSBhcmd1bWVudCB0byA8dHQ+b3BlcmF0b3IoKTwvdHQ+IGlzIGV4YWN0bHkgdGhlIHNhbWUgdHlwZQorICBhcyB0aGUgYXJndW1lbnQgdG8gdGhlIHdyYXBwZWQgZnVuY3Rpb24uIElmIHRoaXMgaXMgYSB2YWx1ZSB0eXBlLCB0aGUKKyAgYXJndW1lbnQgd2lsbCBiZSBwYXNzZWQgYnkgdmFsdWUgYW5kIGNvcGllZCB0d2ljZS4KKyAgPHR0PnBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPC90dD4gaGFzIGEgc2ltaWxhciBwcm9ibGVtLjwvcD4KKworICA8cD5Ib3dldmVyLCBpZiB3ZSB3ZXJlIHRvIHRyeSBhbmQgZWxpbWluYXRlIHRoaXMgaW5lZmZpY2llbmN5IGJ5IGluc3RlYWQKKyAgZGVjbGFyaW5nIHRoZSBhcmd1bWVudCBhcyA8dHQ+Y29uc3QmbmJzcDtBcmcmYW1wOzwvdHQ+LCB0aGVuIGlmIEFyZyB3ZXJlIGEKKyAgcmVmZXJlbmNlIHR5cGUsIHdlIHdvdWxkIGhhdmUgYSByZWZlcmVuY2UgdG8gYSByZWZlcmVuY2UsIHdoaWNoIGlzCisgIGN1cnJlbnRseSBpbGxlZ2FsIChidXQgc2VlIDxhIGhyZWY9CisgICJodHRwOi8vYW51YmlzLmRrdXVnLmRrL2p0YzEvc2MyMi93ZzIxL2RvY3MvY3dnX2FjdGl2ZS5odG1sIzEwNiI+QysrIGNvcmUKKyAgbGFuZ3VhZ2UgaXNzdWUgbnVtYmVyIDEwNik8L2E+PC9wPgorCisgIDxwPlNvIHRoZSB3YXkgaW4gd2hpY2ggd2Ugd2FudCB0byBkZWNsYXJlIHRoZSBhcmd1bWVudCBmb3IKKyAgPHR0Pm9wZXJhdG9yKCk8L3R0PiBkZXBlbmRzIG9uIHdoZXRoZXIgb3Igbm90IHRoZSB3cmFwcGVkIGZ1bmN0aW9uJ3MKKyAgYXJndW1lbnQgaXMgYSByZWZlcmVuY2UuIElmIGl0IGlzIGEgcmVmZXJlbmNlLCB3ZSB3YW50IHRvIGRlY2xhcmUgaXQgc2ltcGx5CisgIGFzIDx0dD5Bcmc8L3R0PjsgaWYgaXQgaXMgYSB2YWx1ZSB3ZSB3YW50IHRvIGRlY2xhcmUgaXQgYXMKKyAgPHR0PmNvbnN0Jm5ic3A7QXJnJmFtcDs8L3R0Pi48L3A+CisKKyAgPHA+VGhlIEJvb3N0IDxhIGhyZWY9Ii4uL3V0aWxpdHkvY2FsbF90cmFpdHMuaHRtIj5jYWxsX3RyYWl0czwvYT4gY2xhc3MKKyAgdGVtcGxhdGUgY29udGFpbnMgYSA8dHQ+cGFyYW1fdHlwZTwvdHQ+IHR5cGVkZWYsIHdoaWNoIHVzZXMgcGFydGlhbAorICBzcGVjaWFsaXNhdGlvbiB0byBtYWtlIHByZWNpc2VseSB0aGlzIGRlY2lzaW9uLiBCeSBkZWNsYXJpbmcgdGhlCisgIDx0dD5vcGVyYXRvcigpPC90dD4gYXM8L3A+CisKKyAgPGJsb2NrcXVvdGU+CisgICAgPHByZT4KK1Jlc3VsdCBvcGVyYXRvcigpKHR5cGVuYW1lIGNhbGxfdHJhaXRzJmx0O0FyZyZndDs6OnBhcmFtX3R5cGUgeCkgY29uc3QKKzwvcHJlPgorICA8L2Jsb2NrcXVvdGU+CisKKyAgPHA+d2UgYWNoaWV2ZSB0aGUgZGVzaXJlZCByZXN1bHQgLSB3ZSBpbXByb3ZlIGVmZmljaWVuY3kgd2l0aG91dCBnZW5lcmF0aW5nCisgIHJlZmVyZW5jZXMgdG8gcmVmZXJlbmNlcy48L3A+CisKKyAgPGgzPkxpbWl0YXRpb25zPC9oMz4KKworICA8cD5UaGUgY2FsbCB0cmFpdHMgdGVtcGxhdGUgdXNlZCB0byByZWFsaXNlIHRoaXMgaW1wcm92ZW1lbnQgcmVsaWVzIG9uCisgIHBhcnRpYWwgc3BlY2lhbGlzYXRpb24sIHNvIHRoaXMgaW1wcm92ZW1lbnQgaXMgb25seSBhdmFpbGFibGUgb24gY29tcGlsZXJzCisgIHRoYXQgc3VwcG9ydCB0aGF0IGZlYXR1cmUuIFdpdGggb3RoZXIgY29tcGlsZXJzLCB0aGUgYXJndW1lbnQgcGFzc2VkIHRvIHRoZQorICBmdW5jdGlvbiB3aWxsIGFsd2F5cyBiZSBwYXNzZWQgYnkgcmVmZXJlbmNlLCB0aHVzIGdlbmVyYXRpbmcgdGhlCisgIHBvc3NpYmlsaXR5IG9mIHJlZmVyZW5jZXMgdG8gcmVmZXJlbmNlcy48L3A+CisgIDxocj4KKworICA8cD48YSBocmVmPSJodHRwOi8vdmFsaWRhdG9yLnczLm9yZy9jaGVjaz91cmk9cmVmZXJlciI+PGltZyBib3JkZXI9IjAiIHNyYz0KKyAgIi4uLy4uL2RvYy9pbWFnZXMvdmFsaWQtaHRtbDQwMS5wbmciIGFsdD0iVmFsaWQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbCIKKyAgaGVpZ2h0PSIzMSIgd2lkdGg9Ijg4Ij48L2E+PC9wPgorCisgIDxwPlJldmlzZWQgCisgIDwhLS13ZWJib3QgYm90PSJUaW1lc3RhbXAiIHMtdHlwZT0iRURJVEVEIiBzLWZvcm1hdD0iJWQgJUIsICVZIiBzdGFydHNwYW4gLS0+MDIKKyAgRGVjZW1iZXIsIDIwMDY8IS0td2ViYm90IGJvdD0iVGltZXN0YW1wIiBlbmRzcGFuIGktY2hlY2tzdW09IjM4NTEwIiAtLT48L3A+CisKKyAgPHA+PGk+Q29weXJpZ2h0ICZjb3B5OyAyMDAwIENhZGVuemEgTmV3IFplYWxhbmQgTHRkLjwvaT48L3A+CisKKyAgPHA+PGk+RGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCisgIGFjY29tcGFueWluZyBmaWxlIDxhIGhyZWY9Ii4uLy4uL0xJQ0VOU0VfMV8wLnR4dCI+TElDRU5TRV8xXzAudHh0PC9hPiBvcgorICBjb3B5IGF0IDxhIGhyZWY9CisgICJodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQiPmh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvYT4pPC9pPjwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2xpYnMvZnVuY3Rpb25hbC9zdWJsaWJzIGIvbGlicy9mdW5jdGlvbmFsL3N1YmxpYnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvZnVuY3Rpb25hbC9zdWJsaWJzCmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvdGVzdC9KYW1maWxlLnYyIGIvbGlicy9mdW5jdGlvbmFsL3Rlc3QvSmFtZmlsZS52MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmUzNzljCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9mdW5jdGlvbmFsL3Rlc3QvSmFtZmlsZS52MgpAQCAtMCwwICsxLDkgQEAKKyN+IENvcHlyaWdodCBSZW5lIFJpdmVyYSAyMDA4CisjfiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuCisjfiAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKworaW1wb3J0IHRlc3RpbmcgOworCit0ZXN0LXN1aXRlIGZ1bmN0aW9uYWwgOgorICAgIFsgcnVuIGZ1bmN0aW9uX3Rlc3QuY3BwIF0KKyAgICA7CmRpZmYgLS1naXQgYS9saWJzL2Z1bmN0aW9uYWwvdGVzdC9mdW5jdGlvbl90ZXN0LmNwcCBiL2xpYnMvZnVuY3Rpb25hbC90ZXN0L2Z1bmN0aW9uX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNjNiZWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2Z1bmN0aW9uYWwvdGVzdC9mdW5jdGlvbl90ZXN0LmNwcApAQCAtMCwwICsxLDMzNCBAQAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBDb3B5cmlnaHQgKGMpIDIwMDAgQ2FkZW56YSBOZXcgWmVhbGFuZCBMdGQKKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnktCisvLyBpbmcgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRlc3RzIGZvciB0aGUgQm9vc3QgZnVuY3Rpb25hbC5ocHAgaGVhZGVyIGZpbGUKKy8vCisvLyBOb3RlIHRoYXQgZnVuY3Rpb25hbC5ocHAgcmVsaWVzIG9uIHBhcnRpYWwgc3BlY2lhbGlzYXRpb24gdG8gYmUKKy8vIGVmZmVjdGl2ZS4gIElmIHlvdXIgY29tcGlsZXIgbGFja3MgdGhpcyBmZWF0dXJlLCB2ZXJ5IGZldyBvZiB0aGUKKy8vIHRlc3RzIHdvdWxkIGNvbXBpbGUsIGFuZCBzbyBoYXZlIGJlZW4gZXhjbHVkZWQgZnJvbSB0aGUgdGVzdC4KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gJElkOiBmdW5jdGlvbl90ZXN0LmNwcCA1MDQ1NiAyMDA5LTAxLTA0IDA1OjE3OjAyWiBiZ3ViZW5rbyAkCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICRMb2ckCisvLyBSZXZpc2lvbiAxLjMgIDIwMDYvMTIvMDIgMTM6NTc6MzIgIGFuZHJlYXNfaHViZXI2OQorLy8gRml4ZWQgbGljZW5zZSAmIGNvcHlyaWdodCBpc3N1ZXMuCisvLworLy8gRnJvbSBNYXJrIFJvZGdlcnMgRnJpIERlYyAxIDEyOjU5OjE0IDIwMDYKKy8vIFgtQXBwYXJlbnRseS1UbzogYWhkNjk3NC1ib29zdG9yZyAtYXQtIHlhaG9vLmNvbSB2aWEgNjguMTQyLjIwNi4xNjA7IEZyaSwgMDEgRGVjIDIwMDYgMTI6NTk6NDEgLTA4MDAKKy8vIFgtT3JpZ2luYXRpbmctSVA6IFsxOTUuMTEyLjQuNTRdCisvLyBSZXR1cm4tUGF0aDogPG1hcmsucm9kZ2VycyAtYXQtIGNhZGVuemEuY28ubno+CisvLyBBdXRoZW50aWNhdGlvbi1SZXN1bHRzOiBtdGE1NTAubWFpbC5tdWQueWFob28uY29tIGZyb209Y2FkZW56YS5jby5uejsgZG9tYWlua2V5cz1uZXV0cmFsIChubyBzaWcpCisvLyBSZWNlaXZlZDogZnJvbSAxOTUuMTEyLjQuNTQgKEVITE8gc210cC5uaWxkcmFtLmNvLnVrKSAoMTk1LjExMi40LjU0KSBieSBtdGE1NTAubWFpbC5tdWQueWFob28uY29tIHdpdGggU01UUDsgRnJpLCAwMSBEZWMgMjAwNiAxMjo1OTo0MCAtMDgwMAorLy8gUmVjZWl2ZWQ6IGZyb20gc25hZ2dsZXB1c3MuY2FkZW56YS5jby5ueiAoODEtNi0yNDYtODcuZHluLmdvdGFkc2wuY28udWsgWzgxLjYuMjQ2Ljg3XSkgYnkgc210cC5uaWxkcmFtLmNvLnVrIChQb3N0Zml4KSB3aXRoIEVTTVRQIGlkIEQzMkVBMkI2RDhDIGZvciA8YWhkNjk3NC1ib29zdG9yZyAtYXQtIHlhaG9vLmNvbT47IEZyaSwgMSBEZWMgMjAwNiAyMDo1OTozNSArMDAwMCAoR01UKQorLy8gUmVjZWl2ZWQ6IGZyb20gcGVuZm9sZC5jYWRlbnphLmNvLm56IChbMTkyLjE2OC41NS41Nl0pIGJ5IHNuYWdnbGVwdXNzLmNhZGVuemEuY28ubnogd2l0aCBlc210cCAoRXhpbSA0LjYzKSAoZW52ZWxvcGUtZnJvbSA8bWFyay5yb2RnZXJzIC1hdC0gY2FkZW56YS5jby5uej4pIGlkIEo5TTRZOS0wMDA5VE8tOUsgZm9yIGFoZDY5NzQtYm9vc3RvcmcgLWF0LSB5YWhvby5jb207IEZyaSwgMDEgRGVjIDIwMDYgMjA6NTg6NTcgKzAwMDAKKy8vIE1lc3NhZ2UtSUQ6IDw0NTcwOTdBMi4xMDkwMzA1QGNhZGVuemEuY28ubno+CisvLyBEYXRlOiBGcmksIDAxIERlYyAyMDA2IDIwOjU5OjE0ICswMDAwCisvLyBGcm9tOiAiTWFyayBSb2RnZXJzIiA8bWFyay5yb2RnZXJzIC1hdC0gY2FkZW56YS5jby5uej4KKy8vIFVzZXItQWdlbnQ6IFRodW5kZXJiaXJkIDEuNS4wLjggKE1hY2ludG9zaC8yMDA2MTAyNSkKKy8vIE1JTUUtVmVyc2lvbjogMS4wCisvLyBUbzogYWhkNjk3NC1ib29zdG9yZyAtYXQtIHlhaG9vLmNvbSBbRWRpdCAtIERlbGV0ZV0KKy8vIFN1YmplY3Q6IFJlOiBbYm9vc3RdIFJlbWluZGVyOiBOZWVkIHlvdXIgcGVybWlzc2lvbiB0byBjb3JyZWN0IGxpY2Vuc2UgJiBjb3B5cmlnaHQgaXNzdWVzCisvLyBSZWZlcmVuY2VzOiA8Mzc5OTkwLjM2MDA3LnFtQHdlYjMzNTA3Lm1haWwubXVkLnlhaG9vLmNvbT4KKy8vIEluLVJlcGx5LVRvOiA8Mzc5OTkwLjM2MDA3LnFtQHdlYjMzNTA3Lm1haWwubXVkLnlhaG9vLmNvbT4KKy8vIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xOyBmb3JtYXQ9Zmxvd2VkCisvLyBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CisvLyBDb250ZW50LUxlbmd0aDogODEyCisvLyBHaWRkYXkgQW5kcmVhcworLy8KKy8vIFN1cmUgdGhhdCdzIGZpbmUuICBJJ20gaGFwcHkgZm9yIHlvdSB0byBkbyAxLCAyIGFuZCAzLgorLy8KKy8vIFJlZ2FyZHMKKy8vIE1hcmsKKy8vCisvLyBBbmRyZWFzIEh1YmVyIHdyb3RlOgorLy8gPiBIZWxsbyBNYXJrCisvLyA+CisvLyA+IFF1aXRlIGEgd2hpbGUgYWdvIGl0IHdhcyBkZWNpZGVkIHRoYXQgZXZlcnkgZmlsZSB0aGF0IGdvZXMgaW50byB0aGUKKy8vID4gMS4zNCByZWxlYXNlIG9mIHRoZSBCb29zdCBkaXN0cmlidXRpb24gKHd3dy5ib29zdC5vcmcpIG5lZWRzIHVuaWZvcm0KKy8vID4gbGljZW5zZSBhbmQgY29weXJpZ2h0IGluZm9ybWF0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlOgorLy8gPgorLy8gPiA8aHR0cDovL3d3dy5ib29zdC5vcmcvbW9yZS9saWNlbnNlX2luZm8uaHRtbD4KKy8vID4KKy8vID4gWW91IGFyZSByZWNlaXZpbmcgdGhpcyBlbWFpbCBiZWNhdXNlIHNldmVyYWwgZmlsZXMgeW91IGNvbnRyaWJ1dGVkCisvLyA+IGxhY2sgc3VjaCBpbmZvcm1hdGlvbiBvciBoYXZlIGFuIG9sZCBsaWNlbnNlOgorLy8gPgorLy8gPiBib29zdC9mdW5jdGlvbmFsL2Z1bmN0aW9uYWwuaHBwCisvLyA+IGJvb3N0L2xpYnMvZnVuY3Rpb25hbC9iaW5kZXJzLmh0bWwKKy8vID4gYm9vc3QvbGlicy9mdW5jdGlvbmFsL2Z1bmN0aW9uX3Rlc3QuY3BwCisvLyA+IGJvb3N0L2xpYnMvZnVuY3Rpb25hbC9mdW5jdGlvbl90cmFpdHMuaHRtbAorLy8gPiBib29zdC9saWJzL2Z1bmN0aW9uYWwvaW5kZXguaHRtbAorLy8gPiBib29zdC9saWJzL2Z1bmN0aW9uYWwvbWVtX2Z1bi5odG1sCisvLyA+IGJvb3N0L2xpYnMvZnVuY3Rpb25hbC9uZWdhdG9ycy5odG1sCisvLyA+IGJvb3N0L2xpYnMvZnVuY3Rpb25hbC9wdHJfZnVuLmh0bWwKKy8vID4gYm9vc3QvcGVvcGxlL21hcmtfcm9kZ2Vycy5odG0KKy8vID4KKy8vID4gSSB0aGVyZWZvcmUga2luZGx5IGFzayB5b3UgdG8gZ3JhbnQgdGhlIHBlcm1pc3Npb24gdG8gZG8gdGhlCisvLyA+IGZvbGxvd2luZzoKKy8vID4KKy8vID4gMS4gRm9yIHRoZSBmaWxlcyBhYm92ZSB0aGF0IGFscmVhZHkgaGF2ZSBhIGxpY2Vuc2UgdGV4dCAoYWxsIGV4Y2VwdAorLy8gPiBtYXJrX3JvZGdlcnMuaHRtKSwgcmVwbGFjZSB0aGUgbGljZW5zZSB0ZXh0IHdpdGg6CisvLyA+CisvLyA+ICJEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKKy8vID4gYWNjb21wYW55aW5nIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQKKy8vID4gaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KSIKKy8vID4KKy8vID4gMi4gRm9yIHRoZSBmaWxlIHRoYXQgZG9lcyBub3QgeWV0IGhhdmUgYSBsaWNlbnNlIGFuZCBjb3B5cmlnaHQKKy8vID4gKG1hcmtfcm9kZ2Vycy5odG0pIGFkZCB0aGUgc2FtZSBsaWNlbnNlIHRleHQgYXMgdW5kZXIgMS4gYW5kIGFkZCB0aGUKKy8vID4gZm9sbG93aW5nIGNvcHlyaWdodDoKKy8vID4KKy8vID4gIihjKSBDb3B5cmlnaHQgTWFyayBSb2RnZXJzIDIwMDAiCisvLyA+CisvLyA+IDMuIChPcHRpb25hbCkgSSB3b3VsZCBhbHNvIHdhbnQgdG8gY29udmVydCBhbGwgSFRNTCBmaWxlcyB0byBjb25mb3JtCisvLyA+IHRoZSBIVE1MIDQuMDEgU3RhbmRhcmQgYnkgcnVubmluZyB0aGVtIHRocm91Z2ggSFRNTCBUaWR5LCBzZWUKKy8vID4gPGh0dHA6Ly90aWR5LnNmLm5ldD4KKy8vID4KKy8vID4gSXQgd291bGQgYmUgZ3JlYXQgaWYgeW91IGNvdWxkIGdyYW50IG1lIHBlcm1pc3Npb24gdG8gZG8gMSAmIDIgYW5kCisvLyA+IG9wdGlvbmFsbHkgYWxzbyAzLgorLy8gPgorLy8gPiBUaGFuayB5b3UhCisvLyA+CisvLyA+IFJlZ2FyZHMsCisvLyA+CisvLyA+IEFuZHJlYXMgSHViZXIKKy8vID4KKy8vCisvLyBSZXZpc2lvbiAxLjIgIDIwMDEvMDkvMjIgMTE6NTI6MjQgIGpvaG5tYWRkb2NrCisvLyBJbnRlbCBDKysgZml4ZXM6IG5vIHZvaWQgcmV0dXJuIHR5cGVzIHN1cHBvcnRlZC4KKy8vCisvLyBSZXZpc2lvbiAxLjEuMS4xICAyMDAwLzA3LzA3IDE2OjA0OjE4ICBiZW1hbgorLy8gMS4xNi4xIGluaXRpYWwgQ1ZTIGNoZWNraW4KKy8vCisvLyBSZXZpc2lvbiAxLjMgIDIwMDAvMDYvMjYgMDk6NDQ6MDEgIG1hcmsKKy8vIFVwZGF0ZWQgZm9sbG93aW5nIGZlZWRiYWNrIGZyb20gSmVucyBNYXVyZXIuCisvLworLy8gUmV2aXNpb24gMS4yICAyMDAwLzA1LzE3IDA4OjMxOjQ1ICBtYXJrCisvLyBBZGRlZCBleHRyYSB0ZXN0cyBub3cgdGhhdCBmdW5jdGlvbiB0cmFpdHMgd29yayBjb3JyZWN0bHkuCisvLyBGb3IgY29tcGlsZXJzIHdpdGggbm8gc3VwcG9ydCBmb3IgcGFydGlhbCBzcGVjaWFsaXNhdGlvbiwKKy8vIGV4Y2x1ZGVkIHRlc3RzIHRoYXQgd29uJ3Qgd29yay4KKy8vCisvLyBSZXZpc2lvbiAxLjEgIDIwMDAvMDUvMDcgMDk6MTQ6NDEgIG1hcmsKKy8vIEluaXRpYWwgcmV2aXNpb24KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBUbyBkZW1vbnN0cmF0ZSB3aGF0IHRoZSBib29zdGVkIGZ1bmN0aW9uIG9iamVjdCBhZGFwdGVycyBkbyBmb3IKKy8vIHlvdSwgdHJ5IGNvbXBpbGluZyB3aXRoIFVTRV9TVEQgZGVmaW5lZC4gIFRoaXMgd2lsbCBlbmRlYXZvdXIgdG8KKy8vIHVzZSB0aGUgc3RhbmRhcmQgZnVuY3Rpb24gb2JqZWN0IGFkYXB0ZXJzLCBidXQgaXMgbGlrZWx5IHRvIHJlc3VsdAorLy8gaW4gbnVtZXJvdXMgZXJyb3JzIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHlvdSBjYW5ub3QgaGF2ZSByZWZlcmVuY2VzCisvLyB0byByZWZlcmVuY2VzLgorI2lmZGVmIFVTRV9TVEQKKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2RlZmluZSBib29zdCBzdGQKKyNlbHNlCisjaW5jbHVkZSA8Ym9vc3QvZnVuY3Rpb25hbC5ocHA+CisjZW5kaWYKKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxpb3N0cmVhbT4KKyNpbmNsdWRlIDxpdGVyYXRvcj4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgorCitjbGFzcyBQZXJzb24KK3sKKyAgcHVibGljOgorICAgIFBlcnNvbigpIHt9CisgICAgUGVyc29uKGNvbnN0IGNoYXIgKm4pIDogbmFtZShuKSB7fQorCisgICAgY29uc3Qgc3RkOjpzdHJpbmcgJmdldF9uYW1lKCkgY29uc3QgeyByZXR1cm4gbmFtZTsgfQorICAgIHZvaWQgcHJpbnQoc3RkOjpvc3RyZWFtICZvcykgY29uc3QgeyBvcyA8PCBuYW1lIDw8ICIgIjsgfQorICAgIHZvaWQgc2V0X25hbWUoY29uc3Qgc3RkOjpzdHJpbmcgJm4pIHsgbmFtZSA9IG47IHN0ZDo6Y291dCA8PCBuYW1lIDw8ICIgIjsgfQorICAgIHN0ZDo6c3RyaW5nIGNsZWFyX25hbWUoKSB7IHN0ZDo6c3RyaW5nIHJldCA9IG5hbWU7IG5hbWUgPSAiIjsgcmV0dXJuIHJldDsgfQorICAgIHZvaWQgZG9fc29tZXRoaW5nKGludCkgY29uc3Qge30KKworICAgIGJvb2wgaXNfZnJlZCgpIGNvbnN0IHsgcmV0dXJuIG5hbWUgPT0gIkZyZWQiOyB9CisgICAgCisgIHByaXZhdGU6CisgICAgc3RkOjpzdHJpbmcgbmFtZTsKK307CisKK25hbWVzcGFjZQoreworICAgIGJvb2wgaXNfZXF1YWwoY29uc3Qgc3RkOjpzdHJpbmcgJnMxLCBjb25zdCBzdGQ6OnN0cmluZyAmczIpCisgICAgeworICAgICAgICByZXR1cm4gczEgPT0gczI7CisgICAgfQorCisgICAgYm9vbCBpc19iZXR0eShjb25zdCBzdGQ6OnN0cmluZyAmcykKKyAgICB7CisgICAgICAgIHJldHVybiBzID09ICJCZXR0eSI7CisgICAgfQorCisgICAgdm9pZCBkb19zZXRfbmFtZShQZXJzb24gKnAsIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKQorICAgIHsKKyAgICAgICAgcC0+c2V0X25hbWUobmFtZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZG9fc2V0X25hbWVfcmVmKFBlcnNvbiAmcCwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpCisgICAgeworICAgICAgICBwLnNldF9uYW1lKG5hbWUpOworICAgIH0KK30KKworaW50IG1haW4oKQoreworICAgIHN0ZDo6dmVjdG9yPFBlcnNvbj4gdjE7CisgICAgdjEucHVzaF9iYWNrKCJGcmVkIik7CisgICAgdjEucHVzaF9iYWNrKCJXaWxtYSIpOworICAgIHYxLnB1c2hfYmFjaygiQmFybmV5Iik7CisgICAgdjEucHVzaF9iYWNrKCJCZXR0eSIpOworCisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8UGVyc29uPiBjdjEodjEuYmVnaW4oKSwgdjEuZW5kKCkpOworCisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHYyOworICAgIHYyLnB1c2hfYmFjaygiRnJlZCIpOworICAgIHYyLnB1c2hfYmFjaygiV2lsbWEiKTsKKyAgICB2Mi5wdXNoX2JhY2soIkJhcm5leSIpOworICAgIHYyLnB1c2hfYmFjaygiQmV0dHkiKTsKKworICAgIFBlcnNvbiBwZXJzb247CisgICAgUGVyc29uICZyID0gcGVyc29uOworCisgICAgUGVyc29uIGZyZWQoIkZyZWQiKTsKKyAgICBQZXJzb24gd2lsbWEoIldpbG1hIik7CisgICAgUGVyc29uIGJhcm5leSgiQmFybmV5Iik7CisgICAgUGVyc29uIGJldHR5KCJCZXR0eSIpOworICAgIHN0ZDo6dmVjdG9yPFBlcnNvbio+IHYzOworICAgIHYzLnB1c2hfYmFjaygmZnJlZCk7CisgICAgdjMucHVzaF9iYWNrKCZ3aWxtYSk7CisgICAgdjMucHVzaF9iYWNrKCZiYXJuZXkpOworICAgIHYzLnB1c2hfYmFjaygmYmV0dHkpOworCisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8UGVyc29uKj4gY3YzKHYzLmJlZ2luKCksIHYzLmVuZCgpKTsKKyAgICBzdGQ6OnZlY3Rvcjxjb25zdCBQZXJzb24qPiB2M2ModjMuYmVnaW4oKSwgdjMuZW5kKCkpOworCisgICAgc3RkOjpvc3RyZWFtICZvcyA9IHN0ZDo6Y291dDsKKworI2lmICFkZWZpbmVkKEJPT1NUX05PX1RFTVBMQVRFX1BBUlRJQUxfU1BFQ0lBTElaQVRJT04pICYmICFkZWZpbmVkKF9fSUNMKQorICAgIC8vIHVuYXJ5X3RyYWl0cywgdW5hcnlfbmVnYXRlCisgICAgc3RkOjp0cmFuc2Zvcm0odjIuYmVnaW4oKSwgdjIuZW5kKCksCisgICAgICAgICAgICAgICAgICAgc3RkOjpvc3RyZWFtX2l0ZXJhdG9yPGJvb2w+KHN0ZDo6Y291dCwgIiAiKSwKKyAgICAgICAgICAgICAgICAgICBuZG5ib29zdDo6bm90MShpc19iZXR0eSkpOworCisgICAgc3RkOjpjb3V0IDw8ICdcbic7CisgICAgc3RkOjp0cmFuc2Zvcm0odjEuYmVnaW4oKSwgdjEuZW5kKCksCisgICAgICAgICAgICAgICAgICAgc3RkOjpvc3RyZWFtX2l0ZXJhdG9yPGJvb2w+KHN0ZDo6Y291dCwgIiAiKSwKKyAgICAgICAgICAgICAgICAgICBuZG5ib29zdDo6bm90MShuZG5ib29zdDo6bWVtX2Z1bl9yZWYoJlBlcnNvbjo6aXNfZnJlZCkpKTsKKworICAgIC8vIGJpbmFyeV90cmFpdHMsIGJpbmFyeV9uZWdhdGUKKyAgICBzdGQ6OmNvdXQgPDwgJ1xuJzsKKyAgICBzdGQ6OnRyYW5zZm9ybSh2Mi5iZWdpbigpLCB2Mi5lbmQoKSwKKyAgICAgICAgICAgICAgICAgICBzdGQ6Om9zdHJlYW1faXRlcmF0b3I8Ym9vbD4oc3RkOjpjb3V0LCAiICIpLAorICAgICAgICAgICAgICAgICAgIG5kbmJvb3N0OjpiaW5kMXN0KG5kbmJvb3N0Ojpub3QyKGlzX2VxdWFsKSwgIkJldHR5IikpOworCisgICAgc3RkOjpjb3V0IDw8ICdcbic7CisgICAgc3RkOjp0cmFuc2Zvcm0odjIuYmVnaW4oKSwgdjIuZW5kKCksCisgICAgICAgICAgICAgICAgICAgc3RkOjpvc3RyZWFtX2l0ZXJhdG9yPGJvb2w+KHN0ZDo6Y291dCwgIiAiKSwKKyAgICAgICAgICAgICAgICAgICBuZG5ib29zdDo6YmluZDJuZChuZG5ib29zdDo6bm90Mihpc19lcXVhbCksICJCZXR0eSIpKTsKKworICAgIC8vIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24KKyAgICBzdGQ6OmNvdXQgPDwgJ1xuJzsKKyAgICBzdGQ6OnRyYW5zZm9ybSh2Mi5iZWdpbigpLCB2Mi5lbmQoKSwKKyAgICAgICAgICAgICAgICAgICBzdGQ6Om9zdHJlYW1faXRlcmF0b3I8Ym9vbD4oc3RkOjpjb3V0LCAiICIpLAorICAgICAgICAgICAgICAgICAgIG5kbmJvb3N0Ojpub3QxKG5kbmJvb3N0OjpwdHJfZnVuKGlzX2JldHR5KSkpOworCisgICAgLy8gYmluYXJ5X3RyYWl0cywgYmluZDFzdCwgYmluZDJuZAorICAgIHN0ZDo6Y291dCA8PCAnXG4nOworICAgIHN0ZDo6dHJhbnNmb3JtKHYyLmJlZ2luKCksIHYyLmVuZCgpLAorICAgICAgICAgICAgICAgICAgIHN0ZDo6b3N0cmVhbV9pdGVyYXRvcjxib29sPihzdGQ6OmNvdXQsICIgIiksCisgICAgICAgICAgICAgICAgICAgbmRuYm9vc3Q6OmJpbmQxc3QoaXNfZXF1YWwsICJCZXR0eSIpKTsKKworICAgIHN0ZDo6Y291dCA8PCAnXG4nOworICAgIHN0ZDo6dHJhbnNmb3JtKHYyLmJlZ2luKCksIHYyLmVuZCgpLAorICAgICAgICAgICAgICAgICAgIHN0ZDo6b3N0cmVhbV9pdGVyYXRvcjxib29sPihzdGQ6OmNvdXQsICIgIiksCisgICAgICAgICAgICAgICAgICAgbmRuYm9vc3Q6OmJpbmQybmQoaXNfZXF1YWwsICJCZXR0eSIpKTsKKworICAgIC8vIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uLCBiaW5kMXN0CisgICAgc3RkOjpjb3V0IDw8ICdcbic7CisgICAgc3RkOjpmb3JfZWFjaCh2Mi5iZWdpbigpLCB2Mi5lbmQoKSwgbmRuYm9vc3Q6OmJpbmQxc3QobmRuYm9vc3Q6OnB0cl9mdW4oZG9fc2V0X25hbWUpLCAmcGVyc29uKSk7CisKKyAgICBzdGQ6OmNvdXQgPDwgJ1xuJzsKKyAgICBzdGQ6OmZvcl9lYWNoKHYyLmJlZ2luKCksIHYyLmVuZCgpLCBuZG5ib29zdDo6YmluZDFzdChuZG5ib29zdDo6cHRyX2Z1bihkb19zZXRfbmFtZV9yZWYpLCBwZXJzb24pKTsKKworICAgIHN0ZDo6Y291dCA8PCAnXG4nOworICAgIHN0ZDo6Zm9yX2VhY2godjIuYmVnaW4oKSwgdjIuZW5kKCksIG5kbmJvb3N0OjpiaW5kMXN0KG5kbmJvb3N0OjpwdHJfZnVuKGRvX3NldF9uYW1lX3JlZiksIHIpKTsKKworICAgIC8vIGJpbmFyeV90cmFpdHMKKyAgICBzdGQ6OmNvdXQgPDwgJ1xuJzsKKyAgICBzdGQ6OmZvcl9lYWNoKHYyLmJlZ2luKCksIHYyLmVuZCgpLCBuZG5ib29zdDo6YmluZDFzdChkb19zZXRfbmFtZSwgJnBlcnNvbikpOworCisgICAgc3RkOjpjb3V0IDw8ICdcbic7CisgICAgc3RkOjpmb3JfZWFjaCh2Mi5iZWdpbigpLCB2Mi5lbmQoKSwgbmRuYm9vc3Q6OmJpbmQxc3QoZG9fc2V0X25hbWVfcmVmLCBwZXJzb24pKTsKKworICAgIHN0ZDo6Y291dCA8PCAnXG4nOworICAgIHN0ZDo6Zm9yX2VhY2godjIuYmVnaW4oKSwgdjIuZW5kKCksIG5kbmJvb3N0OjpiaW5kMXN0KGRvX3NldF9uYW1lX3JlZiwgcikpOworI2VuZGlmCisKKyAgICAvLyBjb25zdF9tZW1fZnVuX3QKKyAgICBzdGQ6OmNvdXQgPDwgJ1xuJzsKKyAgICBzdGQ6OnRyYW5zZm9ybSh2My5iZWdpbigpLCB2My5lbmQoKSwKKyAgICAgICAgICAgICAgICAgICBzdGQ6Om9zdHJlYW1faXRlcmF0b3I8c3RkOjpzdHJpbmc+KHN0ZDo6Y291dCwgIiAiKSwKKyAgICAgICAgICAgICAgICAgICBuZG5ib29zdDo6bWVtX2Z1bigmUGVyc29uOjpnZXRfbmFtZSkpOworCisgICAgc3RkOjpjb3V0IDw8ICdcbic7CisgICAgc3RkOjp0cmFuc2Zvcm0oY3YzLmJlZ2luKCksIGN2My5lbmQoKSwKKyAgICAgICAgICAgICAgICAgICBzdGQ6Om9zdHJlYW1faXRlcmF0b3I8c3RkOjpzdHJpbmc+KHN0ZDo6Y291dCwgIiAiKSwKKyAgICAgICAgICAgICAgICAgICBuZG5ib29zdDo6bWVtX2Z1bigmUGVyc29uOjpnZXRfbmFtZSkpOworCisgICAgc3RkOjpjb3V0IDw8ICdcbic7CisgICAgc3RkOjp0cmFuc2Zvcm0odjNjLmJlZ2luKCksIHYzYy5lbmQoKSwKKyAgICAgICAgICAgICAgICAgICBzdGQ6Om9zdHJlYW1faXRlcmF0b3I8c3RkOjpzdHJpbmc+KHN0ZDo6Y291dCwgIiAiKSwKKyAgICAgICAgICAgICAgICAgICBuZG5ib29zdDo6bWVtX2Z1bigmUGVyc29uOjpnZXRfbmFtZSkpOworCisgICAgLy8gY29uc3RfbWVtX2Z1bl9yZWZfdAorICAgIHN0ZDo6Y291dCA8PCAnXG4nOworICAgIHN0ZDo6dHJhbnNmb3JtKHYxLmJlZ2luKCksIHYxLmVuZCgpLAorICAgICAgICAgICAgICAgICAgIHN0ZDo6b3N0cmVhbV9pdGVyYXRvcjxzdGQ6OnN0cmluZz4oc3RkOjpjb3V0LCAiICIpLAorICAgICAgICAgICAgICAgICAgIG5kbmJvb3N0OjptZW1fZnVuX3JlZigmUGVyc29uOjpnZXRfbmFtZSkpOworCisgICAgc3RkOjpjb3V0IDw8ICdcbic7CisgICAgc3RkOjp0cmFuc2Zvcm0oY3YxLmJlZ2luKCksIGN2MS5lbmQoKSwKKyAgICAgICAgICAgICAgICAgICBzdGQ6Om9zdHJlYW1faXRlcmF0b3I8c3RkOjpzdHJpbmc+KHN0ZDo6Y291dCwgIiAiKSwKKyAgICAgICAgICAgICAgICAgICBuZG5ib29zdDo6bWVtX2Z1bl9yZWYoJlBlcnNvbjo6Z2V0X25hbWUpKTsKKworI2lmbmRlZiBCT09TVF9OT19URU1QTEFURV9QQVJUSUFMX1NQRUNJQUxJWkFUSU9OCisgICAgLy8gY29uc3RfbWVtX2Z1bjFfdCwgYmluZDJuZAorICAgIHN0ZDo6Y291dCA8PCAnXG4nOworICAgIHN0ZDo6Zm9yX2VhY2godjMuYmVnaW4oKSwgdjMuZW5kKCksIG5kbmJvb3N0OjpiaW5kMm5kKG5kbmJvb3N0OjptZW1fZnVuKCZQZXJzb246OnByaW50KSwgc3RkOjpjb3V0KSk7CisKKyAgICBzdGQ6OmNvdXQgPDwgJ1xuJzsKKyAgICBzdGQ6OmZvcl9lYWNoKHYzLmJlZ2luKCksIHYzLmVuZCgpLCBuZG5ib29zdDo6YmluZDJuZChuZG5ib29zdDo6bWVtX2Z1bigmUGVyc29uOjpwcmludCksIG9zKSk7CisKKyAgICAvLyBjb25zdF9tZW1fZnVuMV9yZWZfdCwgYmluZDJuZAorICAgIHN0ZDo6Y291dCA8PCAnXG4nOworICAgIHN0ZDo6Zm9yX2VhY2godjEuYmVnaW4oKSwgdjEuZW5kKCksIG5kbmJvb3N0OjpiaW5kMm5kKG5kbmJvb3N0OjptZW1fZnVuX3JlZigmUGVyc29uOjpwcmludCksIHN0ZDo6Y291dCkpOworCisgICAgc3RkOjpjb3V0IDw8ICdcbic7CisgICAgc3RkOjpmb3JfZWFjaCh2MS5iZWdpbigpLCB2MS5lbmQoKSwgbmRuYm9vc3Q6OmJpbmQybmQobmRuYm9vc3Q6Om1lbV9mdW5fcmVmKCZQZXJzb246OnByaW50KSwgb3MpKTsKKworICAgIC8vIG1lbV9mdW4xX3QsIGJpbmQxc3QKKyAgICBzdGQ6OmNvdXQgPDwgJ1xuJzsKKyAgICBzdGQ6OmZvcl9lYWNoKHYyLmJlZ2luKCksIHYyLmVuZCgpLCBuZG5ib29zdDo6YmluZDFzdChuZG5ib29zdDo6bWVtX2Z1bigmUGVyc29uOjpzZXRfbmFtZSksICZwZXJzb24pKTsKKworICAgIC8vIG1lbV9mdW4xX3JlZl90LCBiaW5kMXN0CisgICAgc3RkOjpjb3V0IDw8ICdcbic7CisgICAgc3RkOjpmb3JfZWFjaCh2Mi5iZWdpbigpLCB2Mi5lbmQoKSwgbmRuYm9vc3Q6OmJpbmQxc3QobmRuYm9vc3Q6Om1lbV9mdW5fcmVmKCZQZXJzb246OnNldF9uYW1lKSwgcGVyc29uKSk7CisKKyAgICBzdGQ6OmNvdXQgPDwgJ1xuJzsKKyAgICBzdGQ6OmZvcl9lYWNoKHYyLmJlZ2luKCksIHYyLmVuZCgpLCBuZG5ib29zdDo6YmluZDFzdChuZG5ib29zdDo6bWVtX2Z1bl9yZWYoJlBlcnNvbjo6c2V0X25hbWUpLCByKSk7CisjZW5kaWYKKworICAgIC8vIG1lbV9mdW5fdAorICAgIHN0ZDo6Y291dCA8PCAnXG4nOworICAgIHN0ZDo6dHJhbnNmb3JtKHYzLmJlZ2luKCksIHYzLmVuZCgpLCBzdGQ6Om9zdHJlYW1faXRlcmF0b3I8c3RkOjpzdHJpbmc+KHN0ZDo6Y291dCwgIiAiKSwKKyAgICAgICAgICAgICAgICAgICBuZG5ib29zdDo6bWVtX2Z1bigmUGVyc29uOjpjbGVhcl9uYW1lKSk7CisgICAgCisgICAgLy8gbWVtX2Z1bl9yZWZfdAorICAgIHN0ZDo6Y291dCA8PCAnXG4nOworICAgIHN0ZDo6dHJhbnNmb3JtKHYxLmJlZ2luKCksIHYxLmVuZCgpLCBzdGQ6Om9zdHJlYW1faXRlcmF0b3I8c3RkOjpzdHJpbmc+KHN0ZDo6Y291dCwgIiAiKSwKKyAgICAgICAgICAgICAgICAgICBuZG5ib29zdDo6bWVtX2Z1bl9yZWYoJlBlcnNvbjo6Y2xlYXJfbmFtZSkpOyAgICAKKworICAgIHN0ZDo6Y291dCA8PCAnXG4nOworICAgIHJldHVybiAwOworfQo=