ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vLmdpdGlnbm9yZSBiL0RvY3VtZW50YXRpb24vLmdpdGlnbm9yZQppbmRleCAyZjkzOGY0Li5kOGVkZDkwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uLy5naXRpZ25vcmUKKysrIGIvRG9jdW1lbnRhdGlvbi8uZ2l0aWdub3JlCkBAIC0yLDcgKzIsOSBAQAogKi5odG1sCiAqLlsxLThdCiAqLm1hZGUKKyoudGV4aQogZ2l0LmluZm8KK2dpdG1hbi5pbmZvCiBob3d0by1pbmRleC50eHQKIGRvYy5kZXAKIGNtZHMtKi50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQ29kaW5nR3VpZGVsaW5lcyBiL0RvY3VtZW50YXRpb24vQ29kaW5nR3VpZGVsaW5lcwppbmRleCA5OTRlYjkxLi5kMmEwYTc2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0NvZGluZ0d1aWRlbGluZXMKKysrIGIvRG9jdW1lbnRhdGlvbi9Db2RpbmdHdWlkZWxpbmVzCkBAIC04OSw2ICs4OSw4IEBACiAgICBvZiAiZWxzZSBpZiIgc3RhdGVtZW50cywgaXQgY2FuIG1ha2Ugc2Vuc2UgdG8gYWRkIGJyYWNlcyB0bwogICAgc2luZ2xlIGxpbmUgYmxvY2tzLgogCisgLSBXZSB0cnkgdG8gYXZvaWQgYXNzaWdubWVudHMgaW5zaWRlIGlmKCkuCisKICAtIFRyeSB0byBtYWtlIHlvdXIgY29kZSB1bmRlcnN0YW5kYWJsZS4gIFlvdSBtYXkgcHV0IGNvbW1lbnRzCiAgICBpbiwgYnV0IGNvbW1lbnRzIGludmFyaWFibHkgdGVuZCB0byBzdGFsZSBvdXQgd2hlbiB0aGUgY29kZQogICAgdGhleSB3ZXJlIGRlc2NyaWJpbmcgY2hhbmdlcy4gIE9mdGVuIHNwbGl0dGluZyBhIGZ1bmN0aW9uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL01ha2VmaWxlIGIvRG9jdW1lbnRhdGlvbi9NYWtlZmlsZQppbmRleCA0Mzc4MWZiLi42MjI2OWUzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL01ha2VmaWxlCisrKyBiL0RvY3VtZW50YXRpb24vTWFrZWZpbGUKQEAgLTEsOSArMSwxMiBAQAogTUFOMV9UWFQ9IFwKIAkkKGZpbHRlci1vdXQgJChhZGRzdWZmaXggLnR4dCwgJChBUlRJQ0xFUykgJChTUF9BUlRJQ0xFUykpLCBcCiAJCSQod2lsZGNhcmQgZ2l0LSoudHh0KSkgXAotCWdpdGsudHh0Ci1NQU41X1RYVD1naXRhdHRyaWJ1dGVzLnR4dCBnaXRpZ25vcmUudHh0IGdpdGNsaS50eHQgZ2l0bW9kdWxlcy50eHQKLU1BTjdfVFhUPWdpdC50eHQKKwlnaXRrLnR4dCBnaXQudHh0CitNQU41X1RYVD1naXRhdHRyaWJ1dGVzLnR4dCBnaXRpZ25vcmUudHh0IGdpdG1vZHVsZXMudHh0IGdpdGhvb2tzLnR4dCBcCisJZ2l0cmVwb3NpdG9yeS1sYXlvdXQudHh0CitNQU43X1RYVD1naXRjbGkudHh0IGdpdHR1dG9yaWFsLnR4dCBnaXR0dXRvcmlhbC0yLnR4dCBcCisJZ2l0Y3ZzLW1pZ3JhdGlvbi50eHQgZ2l0Y29yZS10dXRvcmlhbC50eHQgZ2l0Z2xvc3NhcnkudHh0IFwKKwlnaXRkaWZmY29yZS50eHQKIAogTUFOX1RYVCA9ICQoTUFOMV9UWFQpICQoTUFONV9UWFQpICQoTUFON19UWFQpCiBNQU5fWE1MPSQocGF0c3Vic3QgJS50eHQsJS54bWwsJChNQU5fVFhUKSkKQEAgLTExLDE3ICsxNCw5IEBACiAKIERPQ19IVE1MPSQoTUFOX0hUTUwpCiAKLUFSVElDTEVTID0gdHV0b3JpYWwKLUFSVElDTEVTICs9IHR1dG9yaWFsLTIKLUFSVElDTEVTICs9IGNvcmUtdHV0b3JpYWwKLUFSVElDTEVTICs9IGN2cy1taWdyYXRpb24KLUFSVElDTEVTICs9IGRpZmZjb3JlCi1BUlRJQ0xFUyArPSBob3d0by1pbmRleAotQVJUSUNMRVMgKz0gcmVwb3NpdG9yeS1sYXlvdXQKLUFSVElDTEVTICs9IGhvb2tzCitBUlRJQ0xFUyA9IGhvd3RvLWluZGV4CiBBUlRJQ0xFUyArPSBldmVyeWRheQogQVJUSUNMRVMgKz0gZ2l0LXRvb2xzCi1BUlRJQ0xFUyArPSBnbG9zc2FyeQogIyB3aXRoIHRoZWlyIG93biBmb3JtYXR0aW5nIHJ1bGVzLgogU1BfQVJUSUNMRVMgPSBob3d0by9yZXZlcnQtYnJhbmNoLXJlYmFzZSBob3d0by91c2luZy1tZXJnZS1zdWJ0cmVlIHVzZXItbWFudWFsCiBBUElfRE9DUyA9ICQocGF0c3Vic3QgJS50eHQsJSwkKGZpbHRlci1vdXQgdGVjaG5pY2FsL2FwaS1pbmRleC1za2VsLnR4dCB0ZWNobmljYWwvYXBpLWluZGV4LnR4dCwgJCh3aWxkY2FyZCB0ZWNobmljYWwvYXBpLSoudHh0KSkpCkBAIC0xNDQsOCArMTM5LDYgQEAKIAkkKFBFUkxfUEFUSCkgLi9jbWQtbGlzdC5wZXJsIC4uL2NvbW1hbmQtbGlzdC50eHQKIAlkYXRlID4kQAogCi1naXQuNyBnaXQuaHRtbDogZ2l0LnR4dAotCiBjbGVhbjoKIAkkKFJNKSAqLnhtbCAqLnhtbCsgKi5odG1sICouaHRtbCsgKi4xICouNSAqLjcKIAkkKFJNKSAqLnRleGkgKi50ZXhpKyBnaXQuaW5mbyBnaXRtYW4uaW5mbwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjUuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNS4yLnR4dAppbmRleCA2MTk1NzE1Li5lODMyOGQwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNS4yLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNS4yLnR4dApAQCAtMzYsNyArMzYsNyBAQAogICBleHBhbnNpb24pLiAgVGhlc2UgY29udmVyc2lvbnMgYXBwbHkgd2hlbiBjaGVja2luZyBmaWxlcyBpbgogICBvciBvdXQsIGFuZCBleHBvcnRpbmcgdmlhIGdpdC1hcmNoaXZlLgogCi0qIFRoZSBwYWNrZmlsZSBmb3JtYXQgbm93IG9wdGlvbmFsbHkgc3Vwb3J0cyA2NC1iaXQgaW5kZXguCisqIFRoZSBwYWNrZmlsZSBmb3JtYXQgbm93IG9wdGlvbmFsbHkgc3VwcG9ydHMgNjQtYml0IGluZGV4LgogCiAgIFRoaXMgcmVsZWFzZSBzdXBwb3J0cyB0aGUgInZlcnNpb24gMiIgZm9ybWF0IG9mIHRoZSAuaWR4CiAgIGZpbGUuICBUaGlzIGlzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCB3aGVuIGEgaHVnZSBwYWNrZmlsZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjUuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNS4zLnR4dAppbmRleCBkMDM4OTRiLi4wNjY4ZDNjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNS4zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNS4zLnR4dApAQCAtODYsNyArODYsNyBAQAogCiAgIC0gImdpdCByZXYtbGlzdCIgbGVhcm5lZCAtLXJlZ2V4cC1pZ25vcmUtY2FzZSBhbmQKICAgICAtLWV4dGVuZGVkLXJlZ2V4cCBvcHRpb25zIHRvIHR3ZWFrIGl0cyBtYXRjaGluZyBsb2dpYyB1c2VkCi0gICAgZm9yIC0tZ3JlcCBmaXRlcmluZy4KKyAgICBmb3IgLS1ncmVwIGZpbHRlcmluZy4KIAogICAtICJnaXQgZGVzY3JpYmUgLS1jb250YWlucyIgaXMgYSBoYW5kaWVyIHdheSB0byBjYWxsIG1vcmUKICAgICBvYnNjdXJlIGNvbW1hbmQgImdpdCBuYW1lLXJldiAtLXRhZ3MiLgpAQCAtMjQzLDcgKzI0Myw3IEBACiAKICAgLSBXZSB1c2VkIHRvIGhhdmUgY29yZS5sZWdhY3loZWFkZXJzIGNvbmZpZ3VyYXRpb24sIHdoZW4KICAgICBzZXQgdG8gZmFsc2UsIGFsbG93ZWQgZ2l0IHRvIHdyaXRlIGxvb3NlIG9iamVjdHMgaW4gYSBmb3JtYXQKLSAgICB0aGF0IG1pbWlja3MgdGhlIGZvcm1hdCB1c2VkIGJ5IG9iamVjdHMgc3RvcmVkIGluIHBhY2tzLiAgSXQKKyAgICB0aGF0IG1pbWljcyB0aGUgZm9ybWF0IHVzZWQgYnkgb2JqZWN0cyBzdG9yZWQgaW4gcGFja3MuICBJdAogICAgIHR1cm5zIG91dCB0aGF0IHRoaXMgd2FzIG5vdCBzbyB1c2VmdWwuICBBbHRob3VnaCB3ZSB3aWxsCiAgICAgY29udGludWUgdG8gcmVhZCBvYmplY3RzIHdyaXR0ZW4gaW4gdGhhdCBmb3JtYXQsIHdlIGRvIG5vdAogICAgIGhvbm9yIHRoYXQgY29uZmlndXJhdGlvbiBhbnltb3JlIGFuZCBjcmVhdGUgbG9vc2Ugb2JqZWN0cyBpbgpAQCAtMzAyLDcgKzMwMiw3IEBACiAgICAgc21hbGwgZW5vdWdoIGRlbHRhIHJlc3VsdHMgaXQgY3JlYXRlcyB3aGlsZSBsb29raW5nIGZvciB0aGUKICAgICBiZXN0IGRlbHRhIGNhbmRpZGF0ZXMuCiAKLSAgLSAiZ2l0IHBhY2stb2JqZWN0cyIgbGVhcm5lZCBhIG5ldyBoZXVyaXN0Y3MgdG8gcHJlZmVyIGRlbHRhCisgIC0gImdpdCBwYWNrLW9iamVjdHMiIGxlYXJuZWQgYSBuZXcgaGV1cmlzdGljIHRvIHByZWZlciBkZWx0YQogICAgIHRoYXQgaXMgc2hhbGxvd2VyIGluIGRlcHRoIG92ZXIgdGhlIHNtYWxsZXN0IGRlbHRhCiAgICAgcG9zc2libGUuICBUaGlzIGltcHJvdmVzIGJvdGggb3ZlcmFsbCBwYWNrZmlsZSBhY2Nlc3MKICAgICBwZXJmb3JtYW5jZSBhbmQgcGFja2ZpbGUgZGVuc2l0eS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS41LjQuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNS40LjQudHh0CmluZGV4IDg5ZmE2ZDAuLjMyM2MxYTggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS41LjQuNC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjUuNC40LnR4dApAQCAtNTUsNyArNTUsNyBAQAogCiAgKiAiZ2l0IGxvZyAtLW1lcmdlIiBkaWQgbm90IHdvcmsgd2VsbCB3aXRoIC0tbGVmdC1yaWdodCBvcHRpb24uCiAKLSAqICJnaXQgc3ZuIiBwcm9tcHJ0ZWQgZm9yIGNsaWVudCBjZXJ0IHBhc3N3b3JkIGV2ZXJ5IHRpbWUgaXQgYWNjZXNzZWQgdGhlCisgKiAiZ2l0IHN2biIgcHJvbXB0ZWQgZm9yIGNsaWVudCBjZXJ0IHBhc3N3b3JkIGV2ZXJ5IHRpbWUgaXQgYWNjZXNzZWQgdGhlCiAgICBzZXJ2ZXIuCiAKICAqIFRoZSByZXNldCBjb21tYW5kIGluICJnaXQgZmFzdC1pbXBvcnQiIGRhdGEgc3RyZWFtIHdhcyBkb2N1bWVudGVkIHRvCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNS40LjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjUuNC41LnR4dAppbmRleCAwMjgyMzQxLi5iYmQxMzBlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNS40LjUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS41LjQuNS50eHQKQEAgLTksNyArOSw3IEBACiAgICAxLjUuNCkuCiAKICAqIEJvZ3VzIHJlZnNwZWMgY29uZmlndXJhdGlvbiBzdWNoIGFzICJyZW1vdGUudGhlcmUuZmV0Y2ggPSA9IiB3ZXJlIG5vdAotICAgZGV0ZWN0ZWQgYXMgZXJyb3JzIChyZWdyZXNzaW9uaW4gMS41LjQpLgorICAgZGV0ZWN0ZWQgYXMgZXJyb3JzIChyZWdyZXNzaW9uIGluIDEuNS40KS4KIAogICogWW91IGNvdWxkbid0IHNwZWNpZnkgYSBjdXN0b20gZWRpdG9yIHdob3NlIHBhdGggY29udGFpbnMgYSB3aGl0ZXNwYWNlCiAgICB2aWEgR0lUX0VESVRPUiAoYW5kIGNvcmUuZWRpdG9yKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS41LjYuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNS42LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NjRiMTYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNS42LjEudHh0CkBAIC0wLDAgKzEsMjggQEAKK0dJVCB2MS41LjYuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjYKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisqIExhc3QgbWludXRlIGNoYW5nZSBicm9rZSBsb29zZSBvYmplY3QgY3JlYXRpb24gb24gQUlYLgorCisqIChwZXJmb3JtYW5jZSBmaXgpIFdlIHVzZWQgdG8gbWFrZSAkR0lUX0RJUiBhYnNvbHV0ZSBwYXRoIGVhcmx5IGluIHRoZQorICBwcm9ncmFtcyBidXQga2VlcGluZyBpdCByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkgaW50ZXJuYWxseQorICBnaXZlcyAxLTMgcGVyLWNlbnQgcGVyZm9ybWFuY2UgYm9vc3QuCisKKyogYmFzaCBjb21wbGV0aW9uIGtub3dzIHRoZSBuZXcgLS1ncmFwaCBvcHRpb24gdG8gZ2l0LWxvZyBmYW1pbHkuCisKKworKiBnaXQtZGlmZiAtYy8tLWNjIHNob3dlZCB1bm5lY2Vzc2FyeSAiZGVsZXRpb24iIGxpbmVzIGF0IHRoZSBjb250ZXh0CisgIGJvdW5kYXJ5LgorCisqIGdpdC1mb3ItZWFjaC1yZWYgaWdub3JlZCAlKG9iamVjdCkgYW5kICUodHlwZSkgcmVxdWVzdHMgZm9yIHRhZworICBvYmplY3RzLgorCisqIGdpdC1tZXJnZSB1c2FnZSBoYWQgYSB0eXBvLgorCisqIFJlYnVpbGRpbmcgb2YgZ2l0LXN2biBtZXRhaW5mbyBkYXRhYmFzZSBkaWQgbm90IHRha2UgcmV3cml0ZVJvb3QKKyAgb3B0aW9uIGludG8gYWNjb3VudC4KKworKiBSdW5uaW5nICJnaXQtcmViYXNlIC0tY29udGludWUvLS1za2lwLy0tYWJvcnQiIGJlZm9yZSBzdGFydGluZyBhCisgIHJlYmFzZSBnYXZlIG5vbnNlbnNlIGVycm9yIG1lc3NhZ2VzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjUuNi4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS41LjYuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkwMmE4NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS41LjYuMi50eHQKQEAgLTAsMCArMSw0MCBAQAorR0lUIHYxLjUuNi4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0Z1dHVyZXByb29mCistLS0tLS0tLS0tLQorCisgKiAiZ2l0LXNoZWxsIiBhY2NlcHRzIHJlcXVlc3RzIHdpdGhvdXQgYSBkYXNoIGJldHdlZW4gImdpdCIgYW5kCisgICBzdWJjb21tYW5kIG5hbWUgKGUuZy4gImdpdCB1cGxvYWQtcGFjayIpIHdoaWNoIHRoZSBuZXdlciBjbGllbnQgd2lsbAorICAgc3RhcnQgdG8gbWFrZSBzb21ldGltZSBpbiB0aGUgZnV0dXJlLgorCitGaXhlcyBzaW5jZSB2MS41LjYuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiAiZ2l0IGNsb25lIiBmcm9tIGEgcmVtb3RlIHRoYXQgaXMgbmFtZWQgd2l0aCB1cmwuaW5zdGVhZE9mIHNldHRpbmcgaW4KKyAgJEhPTUUvLmdpdGNvbmZpZyBkaWQgbm90IHdvcmsgd2VsbC4KKworKiAiZ2l0IGRlc2NyaWJlIC0tbG9uZyAtLXRhZ3MiIHNlZ2ZhdWx0ZWQgd2hlbiB0aGUgZGVzY3JpYmVkIHJldmlzaW9uIHdhcworICB0YWdnZWQgd2l0aCBhIGxpZ2h0d2VpZ2h0IHRhZy4KKworKiAiZ2l0IGRpZmYgLS1jaGVjayIgZGlkIG5vdCByZXBvcnQgdGhlIHJlc3VsdCB2aWEgaXRzIGV4aXQgc3RhdHVzCisgIHJlbGlhYmx5LgorCisqIFdoZW4gcmVtb3RlIHNpZGUgdXNlZCB0byBoYXZlIGJyYW5jaCAnZm9vJyBhbmQgZ2l0LWZldGNoIGZpbmRzIHRoYXQgbm93CisgIGl0IGhhcyBicmFuY2ggJ2Zvby9iYXInLCBpdCByZWZ1c2VzIHRvIGxvc2UgdGhlIGV4aXN0aW5nIHJlbW90ZSB0cmFja2luZworICBicmFuY2ggYW5kIGl0cyByZWZsb2cuICBUaGUgZXJyb3IgbWVzc2FnZSBoYXMgYmVlbiBpbXByb3ZlZCB0byBzdWdnZXN0CisgIHBydW5pbmcgdGhlIHJlbW90ZSBpZiB0aGUgdXNlciB3YW50cyB0byBwcm9jZWVkIGFuZCBnZXQgdGhlIGxhdGVzdCBzZXQKKyAgb2YgYnJhbmNoZXMgZnJvbSB0aGUgcmVtb3RlLCBpbmNsdWRpbmcgc3VjaCAnZm9vL2JhcicuCisKKyogImdpdCByZXNldCBmaWxlIiBzaG91bGQgbWVhbiB0aGUgc2FtZSB0aGluZyBhcyAiZ2l0IHJlc2V0IEhFQUQgZmlsZSIsCisgIGJ1dCB3ZSByZXF1aXJlZCBkaXNhbWJpZ3VhdGluZyAtLSBldmVuIHdoZW4gImZpbGUiIGlzIG5vdCBhbWJpZ3VvdXMuCisKKyogImdpdCBzaG93IiBzZWdmYXVsdGVkIHdoZW4gYW4gYW5ub3RhdGVkIHRhZyB0aGF0IHBvaW50cyBhdCBhbm90aGVyCisgIGFubm90YXRlZCB0YWcgd2FzIGdpdmVuIHRvIGl0LgorCisqIE9wdGltaXphdGlvbiBmb3IgYSBsYXJnZSBpbXBvcnQgdmlhICJnaXQtc3ZuIiBpbnRyb2R1Y2VkIGluIHYxLjUuNiBoYWQgYQorICBzZXJpb3VzIG1lbW9yeSBhbmQgdGVtcG9yYXJ5IGZpbGUgbGVhaywgd2hpY2ggbWFkZSBpdCB1bnVzYWJsZSBmb3IKKyAgbW9kZXJhdGVseSBsYXJnZSBpbXBvcnQuCisKKyogImdpdC1zdm4iIG1hbmdsZWQgcmVtb3RlIG5pY2tuYW1lIHVzZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZQorICB1bm5lY2Vzc2FyaWx5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjUuNi4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS41LjYuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQyNjExMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS41LjYuMy50eHQKQEAgLTAsMCArMSw1MiBAQAorR0lUIHYxLjUuNi4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuNi4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFNldHRpbmcgY29yZS5zaGFyZXJlcG9zaXRvcnkgdG8gdHJhZGl0aW9uYWwgInRydWUiIHZhbHVlIHdhcyBzdXBwb3NlZCB0byBtYWtlCisgIHRoZSByZXBvc2l0b3J5IGdyb3VwIHdyaXRhYmxlIGJ1dCBzaG91bGQgbm90IGFmZmVjdCBwZXJtaXNzaW9uIGZvciBvdGhlcnMuCisgIEhvd2V2ZXIsIHNpbmNlIDEuNS42LCBpdCB3YXMgYnJva2VuIHRvIGRyb3AgcGVybWlzc2lvbiBmb3Igb3RoZXJzIHdoZW4gdW1hc2sgaXMKKyAgMDIyLCBtYWtpbmcgdGhlIHJlcG9zaXRvcnkgdW5yZWFkYWJsZSBieSBvdGhlcnMuCisKKyogU2V0dGluZyBHSVRfVFJBQ0Ugd2lsbCByZXBvcnQgc3Bhd25pbmcgb2YgZXh0ZXJuYWwgcHJvY2VzcyB2aWEgcnVuX2NvbW1hbmQoKS4KKworKiBVc2luZyBhbiBvYmplY3Qgd2l0aCB2ZXJ5IGRlZXAgZGVsdGEgY2hhaW4gcGlubmVkIG1lbW9yeSBuZWVkZWQgZm9yIGV4dHJhY3RpbmcKKyAgaW50ZXJtZWRpYXRlIGJhc2Ugb2JqZWN0cyB1bm5lY2Vzc2FyaWx5IGxvbmcsIGxlYWRpbmcgdG8gZXhjZXNzIG1lbW9yeSB1c2FnZS4KKworKiBCYXNoIGNvbXBsZXRpb24gc2NyaXB0IGRpZCBub3Qgbm90aWNlICctLScgbWFya2VyIG9uIHRoZSBjb21tYW5kCisgIGxpbmUgYW5kIHRyaWVkIHRoZSByZWxhdGl2ZWx5IHNsb3cgInJlZiBjb21wbGV0aW9uIiBldmVuIHdoZW4KKyAgY29tcGxldGluZyBhcmd1bWVudHMgYWZ0ZXIgb25lLgorCisqIFJlZ2lzdGVyaW5nIGEgbm9uLWVtcHR5IGJsb2IgcmFjaWx5IGFuZCB0aGVuIHRydW5jYXRpbmcgdGhlIHdvcmtpbmcKKyAgdHJlZSBmaWxlIGZvciBpdCBjb25mdXNlZCAicmFjeS1naXQgYXZvaWRhbmNlIiBsb2dpYyBpbnRvIHRoaW5raW5nCisgIHRoYXQgdGhlIHBhdGggaXMgbm93IHVuY2hhbmdlZC4KKworKiBUaGUgc2VjdGlvbiB0aGF0IGRlc2NyaWJlcyBhdHRyaWJ1dGVzIHJlbGF0ZWQgdG8gZ2l0LWFyY2hpdmUgd2VyZSBwbGFjZWQKKyAgaW4gYSB3cm9uZyBwbGFjZSBpbiB0aGUgZ2l0YXR0cmlidXRlcyg1KSBtYW51YWwgcGFnZS4KKworKiAiZ2l0IGFtIiB3YXMgbm90IGhlbHBmdWwgdG8gdGhlIHVzZXJzIHdoZW4gaXQgZGV0ZWN0ZWQgdGhhdCB0aGUgY29tbWl0dGVyCisgIGluZm9ybWF0aW9uIGlzIG5vdCBzZXQgdXAgcHJvcGVybHkgeWV0LgorCisqICJnaXQgY2xvbmUiIGhhZCBhIGxlZnRvdmVyIGRlYnVnZ2luZyBmcHJpbnRmKCkuCisKKyogImdpdCBjbG9uZSAtcSIgd2FzIG5vdCBxdWlldCBlbm91Z2ggYXMgaXQgdXNlZCB0byBhbmQgZ2F2ZSBvYmplY3QgY291bnQKKyAgYW5kIHByb2dyZXNzIHJlcG9ydHMuCisKKyogImdpdCBjbG9uZSIgbWFya2VkIGRvd25sb2FkZWQgcGFja2ZpbGUgd2l0aCAua2VlcDsgdGhpcyBjb3VsZCBiZSBhCisgIGdvb2QgdGhpbmcgaWYgdGhlIHJlbW90ZSBzaWRlIGlzIHdlbGwgcGFja2VkIGJ1dCBvdGhlcndpc2Ugbm90LAorICBlc3BlY2lhbGx5IGZvciBhIHByb2plY3QgdGhhdCBpcyBub3QgcmVhbGx5IGJpZy4KKworKiAiZ2l0IGRhZW1vbiIgdXNlZCB0byBjYWxsIHN5c2xvZygpIGZyb20gYSBzaWduYWwgaGFuZGxlciwgd2hpY2gKKyAgY291bGQgcmFpc2Ugc2lnbmFscyBvZiBpdHMgb3duIGJ1dCBnZW5lcmFsbHkgaXMgbm90IHJlZW50cmFudC4gIFRoaXMKKyAgd2FzIGZpeGVkIGJ5IHJlc3RydWN0dXJpbmcgdGhlIGNvZGUgdG8gcmVwb3J0IHN5c2xvZygpIGFmdGVyIHRoZSBoYW5kbGVyCisgIHJldHVybnMuCisKKyogV2hlbiAiZ2l0IHB1c2giIHRyaWVzIHRvIHJlbW92ZSBhIHJlbW90ZSByZWYsIGFuZCBjb3JyZXNwb25kaW5nCisgIHRyYWNraW5nIHJlZiBpcyBtaXNzaW5nLCB3ZSB1c2VkIHRvIHJlcG9ydCBlcnJvciAoaS5lLiBmYWlsdXJlIHRvCisgIHJlbW92ZSBzb21ldGhpbmcgdGhhdCBkb2VzIG5vdCBleGlzdCkuCisKKyogImdpdCBtYWlsaW5mbyIgKGhlbmNlICJnaXQgYW0iKSBkaWQgbm90IGhhbmRsZSBjb21taXQgbG9nIG1lc3NhZ2VzIGluIGEKKyAgTUlNRSBtdWx0aXBhcnQgbWFpbCBjb3JyZWN0bHkuCisKK0NvbnRhaW5zIG90aGVyIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiBmaXhlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS41LjYuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNS42LjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4OTY4ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNS42LjQudHh0CkBAIC0wLDAgKzEsNDcgQEAKK0dJVCB2MS41LjYuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjYuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBWYXJpb3VzIGNvbW1hbmRzIGNvdWxkIG92ZXJmbG93IGl0cyBpbnRlcm5hbCBidWZmZXIgb24gYSBwbGF0Zm9ybQorICB3aXRoIHNtYWxsIFBBVEhfTUFYIHZhbHVlIGluIGEgcmVwb3NpdG9yeSB0aGF0IGhhcyBjb250ZW50cyB3aXRoCisgIGxvbmcgcGF0aG5hbWVzLgorCisqIFRoZXJlIHdhc24ndCBhIHdheSB0byBtYWtlIC0tcHJldHR5PWZvcm1hdDolPD4gc3BlY2lmaWVycyB0byBob25vcgorICAubWFpbG1hcCBuYW1lIHJld3JpdGluZyBmb3IgYXV0aG9ycyBhbmQgY29tbWl0dGVycy4gIE5vdyB5b3UgY2FuIHdpdGgKKyAgJWFOIGFuZCAlY04uCisKKyogQmFzaCBjb21wbGV0aW9uIHdhc3RlZCB0b28gbWFueSBjeWNsZXM7IHRoaXMgaGFzIGJlZW4gb3B0aW1pemVkIHRvIGJlCisgIHVzYWJsZSBhZ2Fpbi4KKworKiBCYXNoIGNvbXBsZXRpb24gbG9zdCByZWYgcGFydCB3aGVuIGNvbXBsZXRpbmcgc29tZXRoaW5nIGxpa2UgImdpdCBzaG93CisgIHB1Ok1ha2VmaWxlIi4KKworKiAiZ2l0LWN2c3NlcnZlciIgZGlkIG5vdCBjbGVhbiB1cCBpdHMgdGVtcG9yYXJ5IHdvcmtpbmcgYXJlYSBhZnRlciBhbm5vdGF0ZQorICByZXF1ZXN0LgorCisqICJnaXQtZGFlbW9uIiBjYWxsZWQgc3lzbG9nKCkgZnJvbSBpdHMgc2lnbmFsIGhhbmRsZXIsIHdoaWNoIHdhcyBhCisgIG5vLW5vLgorCisqICJnaXQtZmV0Y2giIGludG8gYW4gZW1wdHkgcmVwb3NpdG9yeSB1c2VkIHRvIHJlbWluZCB0aGF0IHRoZSBmZXRjaCB3aWxsCisgICBiZSBodWdlIGJ5IHNheWluZyAibm8gY29tbW9uIGNvbW1pdHMiLCBidXQgdGhpcyB3YXMgYW4gdW5uZWNlc3NhcnkKKyAgIG5vaXNlOyBpdCBpcyBhbHJlYWR5IGtub3duIGJ5IHRoZSB1c2VyIGFueXdheS4KKworKiAiZ2l0LWh0dHAtZmV0Y2giIHdvdWxkIGhhdmUgc2VnZmF1bHRlZCB3aGVuIHBhY2sgaWR4IGZpbGUgcmV0cmlldmVkCisgIGZyb20gdGhlIG90aGVyIHNpZGUgd2FzIGNvcnJ1cHQuCisKKyogImdpdC1pbmRleC1wYWNrIiB1c2VkIHRvbyBtdWNoIG1lbW9yeSB3aGVuIGRlYWxpbmcgd2l0aCBhIGRlZXAgZGVsdGEgY2hhaW4uCisKKyogImdpdC1tYWlsaW5mbyIgKGhlbmNlICJnaXQtYW0iKSBkaWQgbm90IGNvcnJlY3RseSBoYW5kbGUgaW4tYm9keSBbUEFUQ0hdCisgIGxpbmUgdG8gb3ZlcnJpZGUgdGhlIGNvbW1pdCB0aXRsZSB0YWtlbiBmcm9tIHRoZSBtYWlsIFN1YmplY3QgaGVhZGVyLgorCisqICJnaXQtcmViYXNlIC1pIC1wIiBsb3N0IHBhcmVudHMgdGhhdCBhcmUgbm90IGludm9sdmVkIGluIHRoZSBoaXN0b3J5CisgIGJlaW5nIHJld3JpdHRlbi4KKworKiAiZ2l0LXJtIiBsb3N0IHRyYWNrIG9mIHdoZXJlIHRoZSBpbmRleCBmaWxlIHdhcyB3aGVuIEdJVF9ESVIgd2FzCisgIHNwZWNpZmllZCBhcyBhIHJlbGF0aXZlIHBhdGguCisKKyogImdpdC1yZXYtbGlzdCAtLXF1aWV0IiB3YXMgbm90IHF1aWV0IGFzIGFkdmVydGlzZWQuCisKK0NvbnRhaW5zIG90aGVyIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiBmaXhlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS41LjYuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNS42LjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3Y2ExNzIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNS42LjUudHh0CkBAIC0wLDAgKzEsMjkgQEAKK0dJVCB2MS41LjYuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjYuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiAiZ2l0IGN2c2ltcG9ydCIgdXNlZCB0byBzcGl0IG91dCAiVU5LTk9XTiBMSU5FLi4uIiBkaWFnbm9zdGljcyB0byBzdGRvdXQuCisKKyogImdpdCBjb21taXQgLUYgZmlsZW5hbWUiIGFuZCAiZ2l0IHRhZyAtRiBmaWxlbmFtZSIgcnVuIGZyb20gc3ViZGlyZWN0b3JpZXMKKyAgZGlkIG5vdCByZWFkIHRoZSByaWdodCBmaWxlLgorCisqICJnaXQgaW5pdCAtLXRlbXBsYXRlPSIgd2l0aCBibGFuayAidGVtcGxhdGUiIHBhcmFtZXRlciBsaW5rZWQgZmlsZXMKKyAgdW5kZXIgcm9vdCBkaXJlY3RvcmllcyB0byAuZ2l0LCB3aGljaCB3YXMgYSB0b3RhbCBub25zZW5zZS4gIEluc3RlYWQsIGl0CisgIG1lYW5zICJJIGRvIG5vdCB3YW50IHRvIHVzZSBhbnl0aGluZyBmcm9tIHRoZSB0ZW1wbGF0ZSBkaXJlY3RvcnkiLgorCisqICJnaXQgZGlmZi10cmVlIiBhbmQgb3RoZXIgZGlmZiBwbHVtYmluZyBpZ25vcmVkIGRpZmYucmVuYW1lbGltaXQgY29uZmlndXJhdGlvbgorICB2YXJpYWJsZSB3aGVuIHRoZSB1c2VyIGV4cGxpY2l0bHkgYXNrZWQgZm9yIHJlbmFtZSBkZXRlY3Rpb24uCisKKyogImdpdCBuYW1lLXJldiAtLW5hbWUtb25seSIgZGlkIG5vdCB3b3JrIHdoZW4gIi0tc3RkaW4iIG9wdGlvbiB3YXMgaW4gZWZmZWN0LgorCisqICJnaXQgc2hvdy1icmFuY2giIG1pc2hhbmRsZWQgaXRzIDh0aCBicmFuY2guCisKKyogQWRkaXRpb24gb2YgImdpdCB1cGRhdGUtaW5kZXggLS1pZ25vcmUtc3VibW9kdWxlcyIgdGhhdCBoYXBwZW5lZCBkdXJpbmcKKyAgMS41LjYgY3ljbGUgYnJva2UgImdpdCB1cGRhdGUtaW5kZXggLS1pZ25vcmUtbWlzc2luZyIuCisKKyogImdpdCBzZW5kLWVtYWlsIiBkaWQgbm90IHBhcnNlIGNoYXJzZXQgZnJvbSBhbiBleGlzdGluZyBDb250ZW50LXR5cGU6CisgIGhlYWRlciBwcm9wZXJseS4KKworQ29udGFpbnMgb3RoZXIgdmFyaW91cyBkb2N1bWVudGF0aW9uIGZpeGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjUuNi42LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS41LjYuNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlkYTIzZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS41LjYuNi50eHQKQEAgLTAsMCArMSwxMCBAQAorR0lUIHYxLjUuNi42IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIDEuNS42LjUKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogUmVtb3ZlZCBzdXBwb3J0IGZvciBhbiBvYnNvbGV0ZSBnaXR3ZWIgcmVxdWVzdCBVUkksIHdob3NlCisgICBpbXBsZW1lbnRhdGlvbiByYW4gImdpdCBkaWZmIiBQb3JjZWxhaW4sIGluc3RlYWQgb2YgdXNpbmcgcGx1bWJpbmcsCisgICB3aGljaCB3b3VsZCBoYXZlIHJ1biBhbiBleHRlcm5hbCBkaWZmIGNvbW1hbmQgc3BlY2lmaWVkIGluIHRoZQorICAgcmVwb3NpdG9yeSBjb25maWd1cmF0aW9uIGFzIHRoZSBnaXR3ZWIgdXNlci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS41LjYudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy0xLjUuNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE0M2Q4ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMtMS41LjYudHh0CkBAIC0wLDAgKzEsMTE1IEBACitHSVQgdjEuNS42IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYxLjUuNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKHN1YnN5c3RlbXMpCisKKyogQ29tZXMgd2l0aCB1cGRhdGVkIGdpdGsgYW5kIGdpdC1ndWkuCisKKyhwb3J0YWJpbGl0eSkKKworKiBnaXQgd2lsbCBidWlsZCBvbiBBSVggYmV0dGVyIHRoYW4gYmVmb3JlIG5vdy4KKworKiBjb3JlLmlnbm9yZWNhc2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjYW4gYmUgdXNlZCB0byB3b3JrIGJldHRlciBvbgorICBmaWxlc3lzdGVtcyB0aGF0IGFyZSBub3QgY2FzZSBzZW5zaXRpdmUuCisKKyogImdpdCBpbml0IiBub3cgYXV0b2RldGVjdHMgdGhlIGNhc2Ugc2Vuc2l0aXZpdHkgb2YgdGhlIGZpbGVzeXN0ZW0gYW5kCisgIHNldHMgY29yZS5pZ25vcmVjYXNlIGFjY29yZGluZ2x5LgorCisqIGNwaW8gaXMgbm8gbG9uZ2VyIHVzZWQ7IG5laXRoZXIgImN1cmwiIGJpbmFyeSAobGliY3VybCBpcyBzdGlsbCB1c2VkKS4KKworKGRvY3VtZW50YXRpb24pCisKKyogTWFueSBmcmVlc3RhbmRpbmcgZG9jdW1lbnRhdGlvbiBwYWdlcyBoYXZlIGJlZW4gY29udmVydGVkIGFuZCBtYWRlCisgIGF2YWlsYWJsZSB0byAiZ2l0IGhlbHAiIChha2EgIm1hbiBnaXQ8c29tZXRoaW5nPiIpIGFzIHNlY3Rpb24gNyBvZgorICB0aGUgbWFudWFsIHBhZ2VzLiBUaGlzIG1lYW5zIGJvb2ttYXJrcyB0byBzb21lIEhUTUwgZG9jdW1lbnRhdGlvbgorICBmaWxlcyBtYXkgbmVlZCB0byBiZSB1cGRhdGVkIChlZyAidHV0b3JpYWwuaHRtbCIgYmVjYW1lCisgICJnaXR0dXRvcmlhbC5odG1sIikuCisKKyhwZXJmb3JtYW5jZSkKKworKiAiZ2l0IGNsb25lIiB3YXMgcmV3cml0dGVuIGluIEMuICBUaGlzIHdpbGwgaG9wZWZ1bGx5IGhlbHAgY2xvbmluZyBhCisgIHJlcG9zaXRvcnkgd2l0aCBpbnNhbmUgbnVtYmVyIG9mIHJlZnMuCisKKyogImdpdCByZWJhc2UgLS1vbnRvICR0aGVyZSAkZnJvbSAkYnJhbmNoIiB1c2VkIHRvIHN3aXRjaCB0byB0aGUgdGlwIG9mCisgICRicmFuY2ggb25seSB0byBpbW1lZGlhdGVseSByZXNldCBiYWNrIHRvICRmcm9tLCBzbXVkZ2luZyB3b3JrIHRyZWUKKyAgZmlsZXMgdW5uZWNlc3NhcmlseS4gIFRoaXMgaGFzIGJlZW4gb3B0aW1pemVkLgorCisqIE9iamVjdCBjcmVhdGlvbiBjb2RlcGF0aCBpbiAiZ2l0LXN2biIgaGFzIGJlZW4gb3B0aW1pemVkIGJ5IGVuaGFuY2luZworICBwbHVtYmluZyBjb21tYW5kcyBnaXQtY2F0LWZpbGUgYW5kIGdpdC1oYXNoLW9iamVjdC4KKworKHVzYWJpbGl0eSwgYmVsbHMgYW5kIHdoaXN0bGVzKQorCisqICJnaXQgYWRkIC1wIiAoYW5kIHRoZSAicGF0Y2giIHN1YmNvbW1hbmQgb2YgImdpdCBhZGQgLWkiKSBjYW4gY2hvb3NlIHRvCisgIGFwcGx5IChvciBub3QgYXBwbHkpIG1vZGUgY2hhbmdlcyBpbmRlcGVuZGVudGx5IGZyb20gY29udGVudHMgY2hhbmdlcy4KKworKiAiZ2l0IGJpc2VjdCBoZWxwIiBnaXZlcyBsb25nZXIgYW5kIG1vcmUgaGVscGZ1bCB1c2FnZSBpbmZvcm1hdGlvbi4KKworKiAiZ2l0IGJpc2VjdCIgZG9lcyBub3QgdXNlIGEgc3BlY2lhbCBicmFuY2ggImJpc2VjdCIgYW55bW9yZTsgaW5zdGVhZCwgaXQKKyAgZG9lcyBpdHMgd29yayBvbiBhIGRldGFjaGVkIEhFQUQuCisKKyogImdpdCBicmFuY2giIChhbmQgImdpdCBjaGVja291dCAtYiIpIGNhbiBiZSB0b2xkIHRvIHNldCB1cAorICBicmFuY2guPG5hbWU+LnJlYmFzZSBhdXRvbWF0aWNhbGx5LCBzbyB0aGF0IGxhdGVyIHlvdSBjYW4gc2F5ICJnaXQgcHVsbCIKKyAgYW5kIG1hZ2ljYWxseSBjYXVzZSAiZ2l0IHB1bGwgLS1yZWJhc2UiIHRvIGhhcHBlbi4KKworKiAiZ2l0IGJyYW5jaCAtLW1lcmdlZCIgYW5kICJnaXQgYnJhbmNoIC0tbm8tbWVyZ2VkIiBjYW4gYmUgdXNlZCB0byBsaXN0CisgIGJyYW5jaGVzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gbWVyZ2VkIChvciBub3QgeWV0IG1lcmdlZCkgdG8gdGhlCisgIGN1cnJlbnQgYnJhbmNoLgorCisqICJnaXQgY2hlcnJ5LXBpY2siIGFuZCAiZ2l0IHJldmVydCIgY2FuIGFkZCBhIHNpZ24tb2ZmLgorCisqICJnaXQgY29tbWl0IiBtZW50aW9ucyB0aGUgYXV0aG9yIGlkZW50aXR5IHdoZW4geW91IGFyZSBjb21taXR0aW5nCisgIHNvbWVib2R5IGVsc2UncyBjaGFuZ2VzLgorCisqICJnaXQgZGlmZi9sb2cgLS1kaXJzdGF0IiBvdXRwdXQgaXMgY29uc2lzdGVudCBiZXR3ZWVuIGJpbmFyeSBhbmQgdGV4dHVhbAorICBjaGFuZ2VzLgorCisqICJnaXQgZmlsdGVyLWJyYW5jaCIgcmV3cml0ZXMgc2lnbmVkIHRhZ3MgYnkgZGVtb3RpbmcgdGhlbSB0byBhbm5vdGF0ZWQuCisKKyogImdpdCBmb3JtYXQtcGF0Y2ggLS1uby1iaW5hcnkiIGNhbiBwcm9kdWNlIGEgcGF0Y2ggdGhhdCBsYWNrIGJpbmFyeQorICBjaGFuZ2VzIChpLmUuIGNhbm5vdCBiZSB1c2VkIHRvIHByb3BhZ2F0ZSB0aGUgd2hvbGUgY2hhbmdlcykgbWVhbnQgb25seQorICBmb3IgcmV2aWV3aW5nLgorCisqICJnaXQgaW5pdCAtLWJhcmUiIGlzIGEgc3lub255bSBmb3IgImdpdCAtLWJhcmUgaW5pdCIgbm93LgorCisqICJnaXQgZ2MgLS1hdXRvIiBob25vcnMgYSBuZXcgcHJlLWF1dG8tZ2MgaG9vayB0byB0ZW1wb3JhcmlseSBkaXNhYmxlIGl0LgorCisqICJnaXQgbG9nIC0tcHJldHR5PXRmb3JtYXQ6PGN1c3RvbSBmb3JtYXQ+IiBnaXZlcyBhIExGIGFmdGVyIGVhY2ggZW50cnksCisgIGluc3RlYWQgb2YgZ2l2aW5nIGEgTEYgYmV0d2VlbiBlYWNoIHBhaXIgb2YgZW50cmllcyB3aGljaCBpcyBob3cKKyAgImdpdCBsb2cgLS1wcmV0dHk9Zm9ybWF0OjxjdXN0b20gZm9ybWF0PiIgd29ya3MuCisKKyogImdpdCBsb2ciIGFuZCBmcmllbmRzIGxlYXJuZWQgdGhlICItLWdyYXBoIiBvcHRpb24gdG8gc2hvdyB0aGUgYW5jZXN0cnkKKyAgZ3JhcGggYXQgdGhlIGxlZnQgbWFyZ2luIG9mIHRoZSBvdXRwdXQuCisKKyogImdpdCBsb2ciIGFuZCBmcmllbmRzIGNhbiBiZSB0b2xkIHRvIHVzZSBkYXRlIGZvcm1hdCB0aGF0IGlzIGRpZmZlcmVudAorICBmcm9tIHRoZSBkZWZhdWx0IHZpYSAnbG9nLmRhdGUnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKKyogImdpdCBzZW5kLWVtYWlsIiBub3cgY2FuIHNlbmQgb3V0IG1lc3NhZ2VzIG91dHNpZGUgYSBnaXQgcmVwb3NpdG9yeS4KKworKiAiZ2l0IHNlbmQtZW1haWwgLS1jb21wb3NlIiB3YXMgbWFkZSBhd2FyZSBvZiByZmMyMDQ3IHF1b3RpbmcuCisKKyogImdpdCBzdGF0dXMiIGNhbiBvcHRpb25hbGx5IGluY2x1ZGUgb3V0cHV0IGZyb20gImdpdCBzdWJtb2R1bGUKKyAgc3VtbWFyeSIuCisKKyogImdpdCBzdm4iIGxlYXJuZWQgLS1hZGQtYXV0aG9yLWZyb20gb3B0aW9uIHRvIHByb3BhZ2F0ZSB0aGUgYXV0aG9yc2hpcAorICBieSBtdW5naW5nIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UuCisKKyogbmV3IG9iamVjdCBjcmVhdGlvbiBhbmQgbG9va2luZyB1cCBpbiAiZ2l0IHN2biIgaGFzIGJlZW4gb3B0aW1pemVkLgorCisqICJnaXR3ZWIiIGNhbiByZWFkIGZyb20gYSBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGUuCisKKyhpbnRlcm5hbCkKKworKiAiZ2l0IHVucGFjay1vYmplY3RzIiBhbmQgImdpdCByZWNlaXZlLXBhY2siIGlzIG5vdyBtb3JlIHN0cmljdCBhYm91dAorICBkZXRlY3RpbmcgYnJlYWthZ2UgaW4gdGhlIG9iamVjdHMgdGhleSByZWNlaXZlIG92ZXIgdGhlIHdpcmUuCisKKworRml4ZXMgc2luY2UgdjEuNS41CistLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIG9mIHRoZSBmaXhlcyBpbiB2MS41LjUgbWFpbnRlbmFuY2Ugc2VyaWVzIGFyZSBpbmNsdWRlZCBpbgordGhpcyByZWxlYXNlLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgorCitBbmQgdGhlcmUgYXJlIHRvbyBudW1lcm91cyBzbWFsbCBmaXhlcyB0byBvdGhlcndpc2Ugbm90ZSBoZXJlIDstKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ibGFtZS1vcHRpb25zLnR4dCBiL0RvY3VtZW50YXRpb24vYmxhbWUtb3B0aW9ucy50eHQKaW5kZXggYzExYmI3ZC4uNTQyODExMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ibGFtZS1vcHRpb25zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2JsYW1lLW9wdGlvbnMudHh0CkBAIC00MSw3ICs0MSw4IEBACiAtUyA8cmV2cy1maWxlPjo6CiAJVXNlIHJldnMgZnJvbSByZXZzLWZpbGUgaW5zdGVhZCBvZiBjYWxsaW5nIGxpbmtnaXQ6Z2l0LXJldi1saXN0WzFdLgogCi0tcCwgLS1wb3JjZWxhaW46OgorLXA6OgorLS1wb3JjZWxhaW46OgogCVNob3cgaW4gYSBmb3JtYXQgZGVzaWduZWQgZm9yIG1hY2hpbmUgY29uc3VtcHRpb24uCiAKIC0taW5jcmVtZW50YWw6OgpAQCAtODMsNSArODQsNiBAQAogYmV0d2VlbiBmaWxlcyBmb3IgaXQgdG8gYXNzb2NpYXRlIHRob3NlIGxpbmVzIHdpdGggdGhlIHBhcmVudAogY29tbWl0LgogCi0taCwgLS1oZWxwOjoKKy1oOjoKKy0taGVscDo6CiAJU2hvdyBoZWxwIG1lc3NhZ2UuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NhdC10ZXhpLnBlcmwgYi9Eb2N1bWVudGF0aW9uL2NhdC10ZXhpLnBlcmwKaW5kZXggZTNkOGU5Zi4uZGJjMTMzYyAxMDA3NTUKLS0tIGEvRG9jdW1lbnRhdGlvbi9jYXQtdGV4aS5wZXJsCisrKyBiL0RvY3VtZW50YXRpb24vY2F0LXRleGkucGVybApAQCAtMTEsNyArMTEsNyBAQAogCWlmIChzL15cQHRvcCAoLiopL1xAbm9kZSAkMSwsLFRvcC8pIHsKIAkJcHVzaCBAbWVudSwgJDE7CiAJfQotCXMvXChcQHB4cmVme1xbVVJMU1xdfVwpLy87CisJcy9cKFxAcHhyZWZ7XFsoVVJMU3xSRU1PVEVTKVxdfVwpLy87CiAJcHJpbnQgVE1QOwogfQogY2xvc2UgVE1QOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcudHh0CmluZGV4IDI3M2IzNTguLmRhMmNiM2YgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY29uZmlnLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy50eHQKQEAgLTkyLDcgKzkyLDcgQEAKIAogCSMgT3VyIGRpZmYgYWxnb3JpdGhtCiAJW2RpZmZdCi0JCWV4dGVybmFsID0gIi91c3IvbG9jYWwvYmluL2dudS1kaWZmIC11IgorCQlleHRlcm5hbCA9IC91c3IvbG9jYWwvYmluL2RpZmYtd3JhcHBlcgogCQlyZW5hbWVzID0gdHJ1ZQogCiAJW2JyYW5jaCAiZGV2ZWwiXQpAQCAtMjA1LDEwICsyMDUsMTMgQEAKIGhhbmRsaW5nKS4KIAogY29yZS5pZ25vcmVTdGF0OjoKLQlUaGUgd29ya2luZyBjb3B5IGZpbGVzIGFyZSBhc3N1bWVkIHRvIHN0YXkgdW5jaGFuZ2VkIHVudGlsIHlvdQotCW1hcmsgdGhlbSBvdGhlcndpc2UgbWFudWFsbHkgLSBHaXQgd2lsbCBub3QgZGV0ZWN0IHRoZSBmaWxlIGNoYW5nZXMKLQlieSBsc3RhdCgpIGNhbGxzLiBUaGlzIGlzIHVzZWZ1bCBvbiBzeXN0ZW1zIHdoZXJlIHRob3NlIGFyZSB2ZXJ5Ci0Jc2xvdywgc3VjaCBhcyBNaWNyb3NvZnQgV2luZG93cy4gIFNlZSBsaW5rZ2l0OmdpdC11cGRhdGUtaW5kZXhbMV0uCisJSWYgdHJ1ZSwgY29tbWFuZHMgd2hpY2ggbW9kaWZ5IGJvdGggdGhlIHdvcmtpbmcgdHJlZSBhbmQgdGhlIGluZGV4CisJd2lsbCBtYXJrIHRoZSB1cGRhdGVkIHBhdGhzIHdpdGggdGhlICJhc3N1bWUgdW5jaGFuZ2VkIiBiaXQgaW4gdGhlCisJaW5kZXguIFRoZXNlIG1hcmtlZCBmaWxlcyBhcmUgdGhlbiBhc3N1bWVkIHRvIHN0YXkgdW5jaGFuZ2VkIGluIHRoZQorCXdvcmtpbmcgY29weSwgdW50aWwgeW91CW1hcmsgdGhlbSBvdGhlcndpc2UgbWFudWFsbHkgLSBHaXQgd2lsbCBub3QKKwlkZXRlY3QgdGhlIGZpbGUgY2hhbmdlcwlieSBsc3RhdCgpIGNhbGxzLiBUaGlzIGlzIHVzZWZ1bCBvbiBzeXN0ZW1zCisJd2hlcmUgdGhvc2UgYXJlIHZlcnkgc2xvdywgc3VjaCBhcyBNaWNyb3NvZnQgV2luZG93cy4KKwlTZWUgbGlua2dpdDpnaXQtdXBkYXRlLWluZGV4WzFdLgogCUZhbHNlIGJ5IGRlZmF1bHQuCiAKIGNvcmUucHJlZmVyU3ltbGlua1JlZnM6OgpAQCAtMjM0LDcgKzIzNywxMyBAQAogCXVzZWQgaW4gY29tYmluYXRpb24gd2l0aCByZXBvc2l0b3JpZXMgZm91bmQgYXV0b21hdGljYWxseSBpbgogCWEgLmdpdCBkaXJlY3RvcnkgKGkuZS4gJEdJVF9ESVIgaXMgbm90IHNldCkuCiAJVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgR0lUX1dPUktfVFJFRSBlbnZpcm9ubWVudAotCXZhcmlhYmxlIGFuZCB0aGUgJy0td29yay10cmVlJyBjb21tYW5kIGxpbmUgb3B0aW9uLgorCXZhcmlhYmxlIGFuZCB0aGUgJy0td29yay10cmVlJyBjb21tYW5kIGxpbmUgb3B0aW9uLiBJdCBjYW4gYmUKKwlhIGFic29sdXRlIHBhdGggb3IgcmVsYXRpdmUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IHNwZWNpZmllZCBieQorCS0tZ2l0LWRpciBvciBHSVRfRElSLgorCU5vdGU6IElmIC0tZ2l0LWRpciBvciBHSVRfRElSIGFyZSBzcGVjaWZpZWQgYnV0IG5vbmUgb2YKKwktLXdvcmstdHJlZSwgR0lUX1dPUktfVFJFRSBhbmQgY29yZS53b3JrdHJlZSBpcyBzcGVjaWZpZWQsCisJdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaXMgcmVnYXJkZWQgYXMgdGhlIHRvcCBkaXJlY3RvcnkKKwlvZiB5b3VyIHdvcmtpbmcgdHJlZS4KIAogY29yZS5sb2dBbGxSZWZVcGRhdGVzOjoKIAlFbmFibGUgdGhlIHJlZmxvZy4gVXBkYXRlcyB0byBhIHJlZiA8cmVmPiBpcyBsb2dnZWQgdG8gdGhlIGZpbGUKQEAgLTI2MSw3ICsyNzAsMTIgQEAKIAlncm91cC13cml0YWJsZSkuIFdoZW4gJ2FsbCcgKG9yICd3b3JsZCcgb3IgJ2V2ZXJ5Ym9keScpLCB0aGUKIAlyZXBvc2l0b3J5IHdpbGwgYmUgcmVhZGFibGUgYnkgYWxsIHVzZXJzLCBhZGRpdGlvbmFsbHkgdG8gYmVpbmcKIAlncm91cC1zaGFyZWFibGUuIFdoZW4gJ3VtYXNrJyAob3IgJ2ZhbHNlJyksIGdpdCB3aWxsIHVzZSBwZXJtaXNzaW9ucwotCXJlcG9ydGVkIGJ5IHVtYXNrKDIpLiBTZWUgbGlua2dpdDpnaXQtaW5pdFsxXS4gRmFsc2UgYnkgZGVmYXVsdC4KKwlyZXBvcnRlZCBieSB1bWFzaygyKS4gV2hlbiAnMHh4eCcsIHdoZXJlICcweHh4JyBpcyBhbiBvY3RhbCBudW1iZXIsCisJZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgd2lsbCBoYXZlIHRoaXMgbW9kZSB2YWx1ZS4gJzB4eHgnIHdpbGwgb3ZlcnJpZGUKKwl1c2VyJ3MgdW1hc2sgdmFsdWUsIGFuZCB0aHVzLCB1c2VycyB3aXRoIGEgc2FmZSB1bWFzayAoMDA3NykgY2FuIHVzZQorCXRoaXMgb3B0aW9uLiBFeGFtcGxlczogJzA2NjAnIGlzIGVxdWl2YWxlbnQgdG8gJ2dyb3VwJy4gJzA2NDAnIGlzIGEKKwlyZXBvc2l0b3J5IHRoYXQgaXMgZ3JvdXAtcmVhZGFibGUgYnV0IG5vdCBncm91cC13cml0YWJsZS4KKwlTZWUgbGlua2dpdDpnaXQtaW5pdFsxXS4gRmFsc2UgYnkgZGVmYXVsdC4KIAogY29yZS53YXJuQW1iaWd1b3VzUmVmczo6CiAJSWYgdHJ1ZSwgZ2l0IHdpbGwgd2FybiB5b3UgaWYgdGhlIHJlZiBuYW1lIHlvdSBwYXNzZWQgaXQgaXMgYW1iaWd1b3VzCkBAIC0zNTgsNiArMzcyLDE0IEBACiAgIGRvZXMgbm90IHRyaWdnZXIgaWYgdGhlIGNoYXJhY3RlciBiZWZvcmUgc3VjaCBhIGNhcnJpYWdlLXJldHVybgogICBpcyBub3QgYSB3aGl0ZXNwYWNlIChub3QgZW5hYmxlZCBieSBkZWZhdWx0KS4KIAorY29yZS5mc3luY29iamVjdGZpbGVzOjoKKwlUaGlzIGJvb2xlYW4gd2lsbCBlbmFibGUgJ2ZzeW5jKCknIHdoZW4gd3JpdGluZyBvYmplY3QgZmlsZXMuCisrCitUaGlzIGlzIGEgdG90YWwgd2FzdGUgb2YgdGltZSBhbmQgZWZmb3J0IG9uIGEgZmlsZXN5c3RlbSB0aGF0IG9yZGVycworZGF0YSB3cml0ZXMgcHJvcGVybHksIGJ1dCBjYW4gYmUgdXNlZnVsIGZvciBmaWxlc3lzdGVtcyB0aGF0IGRvIG5vdCB1c2UKK2pvdXJuYWxsaW5nICh0cmFkaXRpb25hbCBVTklYIGZpbGVzeXN0ZW1zKSBvciB0aGF0IG9ubHkgam91cm5hbCBtZXRhZGF0YQorYW5kIG5vdCBmaWxlIGNvbnRlbnRzIChPUyBYJ3MgSEZTKywgb3IgTGludXggZXh0MyB3aXRoICJkYXRhPXdyaXRlYmFjayIpLgorCiBhbGlhcy4qOjoKIAlDb21tYW5kIGFsaWFzZXMgZm9yIHRoZSBsaW5rZ2l0OmdpdFsxXSBjb21tYW5kIHdyYXBwZXIgLSBlLmcuCiAJYWZ0ZXIgZGVmaW5pbmcgImFsaWFzLmxhc3QgPSBjYXQtZmlsZSBjb21taXQgSEVBRCIsIHRoZSBpbnZvY2F0aW9uCkBAIC0zODgsNiArNDEwLDIxIEBACiAJZG9uZSB3aGVuIHRoZSBzdGFydGluZyBwb2ludCBpcyBlaXRoZXIgYSBsb2NhbCBicmFuY2ggb3IgcmVtb3RlCiAJYnJhbmNoLiBUaGlzIG9wdGlvbiBkZWZhdWx0cyB0byB0cnVlLgogCiticmFuY2guYXV0b3NldHVwcmViYXNlOjoKKwlXaGVuIGEgbmV3IGJyYW5jaCBpcyBjcmVhdGVkIHdpdGggYGdpdC1icmFuY2hgIG9yIGBnaXQtY2hlY2tvdXRgCisJdGhhdCB0cmFja3MgYW5vdGhlciBicmFuY2gsIHRoaXMgdmFyaWFibGUgdGVsbHMgZ2l0IHRvIHNldAorCXVwIHB1bGwgdG8gcmViYXNlIGluc3RlYWQgb2YgbWVyZ2UgKHNlZSAiYnJhbmNoLjxuYW1lPi5yZWJhc2UiKS4KKwlXaGVuIGBuZXZlcmAsIHJlYmFzZSBpcyBuZXZlciBhdXRvbWF0aWNhbGx5IHNldCB0byB0cnVlLgorCVdoZW4gYGxvY2FsYCwgcmViYXNlIGlzIHNldCB0byB0cnVlIGZvciB0cmFja2VkIGJyYW5jaGVzIG9mCisJb3RoZXIgbG9jYWwgYnJhbmNoZXMuCisJV2hlbiBgcmVtb3RlYCwgcmViYXNlIGlzIHNldCB0byB0cnVlIGZvciB0cmFja2VkIGJyYW5jaGVzIG9mCisJcmVtb3RlIGJyYW5jaGVzLgorCVdoZW4gYGFsd2F5c2AsIHJlYmFzZSB3aWxsIGJlIHNldCB0byB0cnVlIGZvciBhbGwgdHJhY2tpbmcKKwlicmFuY2hlcy4KKwlTZWUgImJyYW5jaC5hdXRvc2V0dXBtZXJnZSIgZm9yIGRldGFpbHMgb24gaG93IHRvIHNldCB1cCBhCisJYnJhbmNoIHRvIHRyYWNrIGFub3RoZXIgYnJhbmNoLgorCVRoaXMgb3B0aW9uIGRlZmF1bHRzIHRvIG5ldmVyLgorCiBicmFuY2guPG5hbWU+LnJlbW90ZTo6CiAJV2hlbiBpbiBicmFuY2ggPG5hbWU+LCBpdCB0ZWxscyBgZ2l0IGZldGNoYCB3aGljaCByZW1vdGUgdG8gZmV0Y2guCiAJSWYgdGhpcyBvcHRpb24gaXMgbm90IGdpdmVuLCBgZ2l0IGZldGNoYCBkZWZhdWx0cyB0byByZW1vdGUgIm9yaWdpbiIuCkBAIC00OTcsOCArNTM0LDEwIEBACiAJb25lIG9mIGBoZWFkZXJgICh0aGUgaGVhZGVyIHRleHQgb2YgdGhlIHN0YXR1cyBtZXNzYWdlKSwKIAlgYWRkZWRgIG9yIGB1cGRhdGVkYCAoZmlsZXMgd2hpY2ggYXJlIGFkZGVkIGJ1dCBub3QgY29tbWl0dGVkKSwKIAlgY2hhbmdlZGAgKGZpbGVzIHdoaWNoIGFyZSBjaGFuZ2VkIGJ1dCBub3QgYWRkZWQgaW4gdGhlIGluZGV4KSwKLQlvciBgdW50cmFja2VkYCAoZmlsZXMgd2hpY2ggYXJlIG5vdCB0cmFja2VkIGJ5IGdpdCkuIFRoZSB2YWx1ZXMgb2YKLQl0aGVzZSB2YXJpYWJsZXMgbWF5IGJlIHNwZWNpZmllZCBhcyBpbiBjb2xvci5icmFuY2guPHNsb3Q+LgorCWB1bnRyYWNrZWRgIChmaWxlcyB3aGljaCBhcmUgbm90IHRyYWNrZWQgYnkgZ2l0KSwgb3IKKwlgbm9icmFuY2hgICh0aGUgY29sb3IgdGhlICdubyBicmFuY2gnIHdhcm5pbmcgaXMgc2hvd24gaW4sIGRlZmF1bHRpbmcKKwl0byByZWQpLiBUaGUgdmFsdWVzIG9mIHRoZXNlIHZhcmlhYmxlcyBtYXkgYmUgc3BlY2lmaWVkIGFzIGluCisJY29sb3IuYnJhbmNoLjxzbG90Pi4KIAogY29tbWl0LnRlbXBsYXRlOjoKIAlTcGVjaWZ5IGEgZmlsZSB0byB1c2UgYXMgdGhlIHRlbXBsYXRlIGZvciBuZXcgY29tbWl0IG1lc3NhZ2VzLgpAQCAtNTIzLDkgKzU2MiwxMSBAQAogZGlmZi5leHRlcm5hbDo6CiAJSWYgdGhpcyBjb25maWcgdmFyaWFibGUgaXMgc2V0LCBkaWZmIGdlbmVyYXRpb24gaXMgbm90CiAJcGVyZm9ybWVkIHVzaW5nIHRoZSBpbnRlcm5hbCBkaWZmIG1hY2hpbmVyeSwgYnV0IHVzaW5nIHRoZQotCWdpdmVuIGNvbW1hbmQuICBOb3RlOiBpZiB5b3Ugd2FudCB0byB1c2UgYW4gZXh0ZXJuYWwgZGlmZgotCXByb2dyYW0gb25seSBvbiBhIHN1YnNldCBvZiB5b3VyIGZpbGVzLCB5b3UgbWlnaHQgd2FudCB0bwotCXVzZSBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0gaW5zdGVhZC4KKwlnaXZlbiBjb21tYW5kLiAgQ2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgYEdJVF9FWFRFUk5BTF9ESUZGJworCWVudmlyb25tZW50IHZhcmlhYmxlLiAgVGhlIGNvbW1hbmQgaXMgY2FsbGVkIHdpdGggcGFyYW1ldGVycworCWFzIGRlc2NyaWJlZCB1bmRlciAiZ2l0IERpZmZzIiBpbiBsaW5rZ2l0OmdpdFsxXS4gIE5vdGU6IGlmCisJeW91IHdhbnQgdG8gdXNlIGFuIGV4dGVybmFsIGRpZmYgcHJvZ3JhbSBvbmx5IG9uIGEgc3Vic2V0IG9mCisJeW91ciBmaWxlcywgeW91CW1pZ2h0IHdhbnQgdG8gdXNlIGxpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XSBpbnN0ZWFkLgogCiBkaWZmLnJlbmFtZUxpbWl0OjoKIAlUaGUgbnVtYmVyIG9mIGZpbGVzIHRvIGNvbnNpZGVyIHdoZW4gcGVyZm9ybWluZyB0aGUgY29weS9yZW5hbWUKQEAgLTYzNCwxMSArNjc1LDI0IEBACiAJUGF0aCB0byBhIGxvZyBmaWxlIHdoZXJlIHRoZSBDVlMgc2VydmVyIGludGVyZmFjZSB3ZWxsLi4uIGxvZ3MKIAl2YXJpb3VzIHN0dWZmLiBTZWUgbGlua2dpdDpnaXQtY3Zzc2VydmVyWzFdLgogCitnaXRjdnMudXNlY3JsZmF0dHIKKwlJZiB0cnVlLCB0aGUgc2VydmVyIHdpbGwgbG9vayB1cCB0aGUgYGNybGZgIGF0dHJpYnV0ZSBmb3IKKwlmaWxlcyB0byBkZXRlcm1pbmUgdGhlICctaycgbW9kZXMgdG8gdXNlLiBJZiBgY3JsZmAgaXMgc2V0LAorCXRoZSAnLWsnIG1vZGUgd2lsbCBiZSBsZWZ0IGJsYW5rLCBzbyBjdnMgY2xpZW50cyB3aWxsCisJdHJlYXQgaXQgYXMgdGV4dC4gSWYgYGNybGZgIGlzIGV4cGxpY2l0bHkgdW5zZXQsIHRoZSBmaWxlCisJd2lsbCBiZSBzZXQgd2l0aCAnLWtiJyBtb2RlLCB3aGljaCBzdXByZXNzZXMgYW55IG5ld2xpbmUgbXVuZ2luZworCXRoZSBjbGllbnQgbWlnaHQgb3RoZXJ3aXNlIGRvLiBJZiBgY3JsZmAgaXMgbm90IHNwZWNpZmllZCwKKwl0aGVuICdnaXRjdnMuYWxsYmluYXJ5JyBpcyB1c2VkLiBTZWUgbGlua2dpdDpnaXRhdHRyaWJ1dGVbNV0uCisKIGdpdGN2cy5hbGxiaW5hcnk6OgotCUlmIHRydWUsIGFsbCBmaWxlcyBhcmUgc2VudCB0byB0aGUgY2xpZW50IGluIG1vZGUgJy1rYicuIFRoaXMKLQljYXVzZXMgdGhlIGNsaWVudCB0byB0cmVhdCBhbGwgZmlsZXMgYXMgYmluYXJ5IGZpbGVzIHdoaWNoIHN1cHByZXNzZXMKLQlhbnkgbmV3bGluZSBtdW5naW5nIGl0IG90aGVyd2lzZSBtaWdodCBkby4gQSB3b3JrLWFyb3VuZCBmb3IgdGhlCi0JZmFjdCB0aGF0IHRoZXJlIGlzIG5vIHdheSB5ZXQgdG8gc2V0IHNpbmdsZSBmaWxlcyB0byBtb2RlICcta2InLgorCVRoaXMgaXMgdXNlZCBpZiAnZ2l0Y3ZzLnVzZWNybGZhdHRyJyBkb2VzIG5vdCByZXNvbHZlCisJdGhlIGNvcnJlY3QgJy1rYicgbW9kZSB0byB1c2UuIElmIHRydWUsIGFsbAorCXVucmVzb2x2ZWQgZmlsZXMgYXJlIHNlbnQgdG8gdGhlIGNsaWVudCBpbgorCW1vZGUgJy1rYicuIFRoaXMgY2F1c2VzIHRoZSBjbGllbnQgdG8gdHJlYXQgdGhlbQorCWFzIGJpbmFyeSBmaWxlcywgd2hpY2ggc3VwcHJlc3NlcyBhbnkgbmV3bGluZSBtdW5naW5nIGl0CisJb3RoZXJ3aXNlIG1pZ2h0IGRvLiBBbHRlcm5hdGl2ZWx5LCBpZiBpdCBpcyBzZXQgdG8gImd1ZXNzIiwKKwl0aGVuIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBhcmUgZXhhbWluZWQgdG8gZGVjaWRlIGlmCisJaXQgaXMgYmluYXJ5LCBzaW1pbGFyIHRvICdjb3JlLmF1dG9jcmxmJy4KIAogZ2l0Y3ZzLmRibmFtZTo6CiAJRGF0YWJhc2UgdXNlZCBieSBnaXQtY3Zzc2VydmVyIHRvIGNhY2hlIHJldmlzaW9uIGluZm9ybWF0aW9uCkBAIC02NjksMTEgKzcyMyw0MiBAQAogCWxpbmtnaXQ6Z2l0LWN2c3NlcnZlclsxXSBmb3IgZGV0YWlscykuICBBbnkgbm9uLWFscGhhYmV0aWMKIAljaGFyYWN0ZXJzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB1bmRlcnNjb3Jlcy4KIAotQWxsIGdpdGN2cyB2YXJpYWJsZXMgZXhjZXB0IGZvciAnZ2l0Y3ZzLmFsbGJpbmFyeScgY2FuIGFsc28gYmUKLXNwZWNpZmllZCBhcyAnZ2l0Y3ZzLjxhY2Nlc3NfbWV0aG9kPi48dmFybmFtZT4nICh3aGVyZSAnYWNjZXNzX21ldGhvZCcKK0FsbCBnaXRjdnMgdmFyaWFibGVzIGV4Y2VwdCBmb3IgJ2dpdGN2cy51c2VjcmxmYXR0cicgYW5kCisnZ2l0Y3ZzLmFsbGJpbmFyeScgY2FuIGFsc28gYmUgc3BlY2lmaWVkIGFzCisnZ2l0Y3ZzLjxhY2Nlc3NfbWV0aG9kPi48dmFybmFtZT4nICh3aGVyZSAnYWNjZXNzX21ldGhvZCcKIGlzIG9uZSBvZiAiZXh0IiBhbmQgInBzZXJ2ZXIiKSB0byBtYWtlIHRoZW0gYXBwbHkgb25seSBmb3IgdGhlIGdpdmVuCiBhY2Nlc3MgbWV0aG9kLgogCitndWkuY29tbWl0bXNnd2lkdGg6OgorCURlZmluZXMgaG93IHdpZGUgdGhlIGNvbW1pdCBtZXNzYWdlIHdpbmRvdyBpcyBpbiB0aGUKKwlsaW5rZ2l0OmdpdC1ndWlbMV0uICI3NSIgaXMgdGhlIGRlZmF1bHQuCisKK2d1aS5kaWZmY29udGV4dDo6CisJU3BlY2lmaWVzIGhvdyBtYW55IGNvbnRleHQgbGluZXMgc2hvdWxkIGJlIHVzZWQgaW4gY2FsbHMgdG8gZGlmZgorCW1hZGUgYnkgdGhlIGxpbmtnaXQ6Z2l0LWd1aVsxXS4gVGhlIGRlZmF1bHQgaXMgIjUiLgorCitndWkubWF0Y2h0cmFja2luZ2JyYW5jaDo6CisJRGV0ZXJtaW5lcyBpZiBuZXcgYnJhbmNoZXMgY3JlYXRlZCB3aXRoIGxpbmtnaXQ6Z2l0LWd1aVsxXSBzaG91bGQKKwlkZWZhdWx0IHRvIHRyYWNraW5nIHJlbW90ZSBicmFuY2hlcyB3aXRoIG1hdGNoaW5nIG5hbWVzIG9yCisJbm90LiBEZWZhdWx0OiAiZmFsc2UiLgorCitndWkubmV3YnJhbmNodGVtcGxhdGU6OgorCUlzIHVzZWQgYXMgc3VnZ2VzdGVkIG5hbWUgd2hlbiBjcmVhdGluZyBuZXcgYnJhbmNoZXMgdXNpbmcgdGhlCisJbGlua2dpdDpnaXQtZ3VpWzFdLgorCitndWkucHJ1bmVkdXJpbmdmZXRjaDo6CisJInRydWUiIGlmIGxpbmtnaXQ6Z2l0LWd1aVsxXSBzaG91bGQgcHJ1bmUgdHJhY2tpbmcgYnJhbmNoZXMgd2hlbgorCXBlcmZvcm1pbmcgYSBmZXRjaC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgImZhbHNlIi4KKworZ3VpLnRydXN0bXRpbWU6OgorCURldGVybWluZXMgaWYgbGlua2dpdDpnaXQtZ3VpWzFdIHNob3VsZCB0cnVzdCB0aGUgZmlsZSBtb2RpZmljYXRpb24KKwl0aW1lc3RhbXAgb3Igbm90LiBCeSBkZWZhdWx0IHRoZSB0aW1lc3RhbXBzIGFyZSBub3QgdHJ1c3RlZC4KKworZ3VpLnNwZWxsaW5nZGljdGlvbmFyeTo6CisJU3BlY2lmaWVzIHRoZSBkaWN0aW9uYXJ5IHVzZWQgZm9yIHNwZWxsIGNoZWNraW5nIGNvbW1pdCBtZXNzYWdlcyBpbgorCXRoZSBsaW5rZ2l0OmdpdC1ndWlbMV0uIFdoZW4gc2V0IHRvICJub25lIiBzcGVsbCBjaGVja2luZyBpcyB0dXJuZWQKKwlvZmYuCisKIGhlbHAuYnJvd3Nlcjo6CiAJU3BlY2lmeSB0aGUgYnJvd3NlciB0aGF0IHdpbGwgYmUgdXNlZCB0byBkaXNwbGF5IGhlbHAgaW4gdGhlCiAJJ3dlYicgZm9ybWF0LiBTZWUgbGlua2dpdDpnaXQtaGVscFsxXS4KQEAgLTc1OSw2ICs4NDQsMTIgQEAKIAlUaGUgcG9ydCBudW1iZXIgdG8gYmluZCB0aGUgZ2l0d2ViIGh0dHBkIHRvLiBTZWUKIAlsaW5rZ2l0OmdpdC1pbnN0YXdlYlsxXS4KIAorbG9nLmRhdGU6OgorCVNldCBkZWZhdWx0IGRhdGUtdGltZSBtb2RlIGZvciB0aGUgbG9nIGNvbW1hbmQuIFNldHRpbmcgbG9nLmRhdGUKKwl2YWx1ZSBpcyBzaW1pbGFyIHRvIHVzaW5nIGdpdCBsb2cncyAtLWRhdGUgb3B0aW9uLiBUaGUgdmFsdWUgaXMgb25lIG9mCisJZm9sbG93aW5nIGFsdGVybmF0aXZlczoge3JlbGF0aXZlLGxvY2FsLGRlZmF1bHQsaXNvLHJmYyxzaG9ydH0uCisJU2VlIGxpbmtnaXQ6Z2l0LWxvZ1sxXS4KKwogbG9nLnNob3dyb290OjoKIAlJZiB0cnVlLCB0aGUgaW5pdGlhbCBjb21taXQgd2lsbCBiZSBzaG93biBhcyBhIGJpZyBjcmVhdGlvbiBldmVudC4KIAlUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYSBkaWZmIGFnYWluc3QgYW4gZW1wdHkgdHJlZS4KQEAgLTc2OSwzNyArODYwLDE2IEBACiAJU3BlY2lmeSB0aGUgcHJvZ3JhbXMgdGhhdCBtYXkgYmUgdXNlZCB0byBkaXNwbGF5IGhlbHAgaW4gdGhlCiAJJ21hbicgZm9ybWF0LiBTZWUgbGlua2dpdDpnaXQtaGVscFsxXS4KIAotbWVyZ2Uuc3VtbWFyeTo6Ci0JV2hldGhlciB0byBpbmNsdWRlIHN1bW1hcmllcyBvZiBtZXJnZWQgY29tbWl0cyBpbiBuZXdseSBjcmVhdGVkCi0JbWVyZ2UgY29tbWl0IG1lc3NhZ2VzLiBGYWxzZSBieSBkZWZhdWx0LgoraW5jbHVkZTo6bWVyZ2UtY29uZmlnLnR4dFtdCiAKLW1lcmdlLnRvb2w6OgotCUNvbnRyb2xzIHdoaWNoIG1lcmdlIHJlc29sdXRpb24gcHJvZ3JhbSBpcyB1c2VkIGJ5Ci0JbGlua2dpdDpnaXQtbWVyZ2V0b29sWzFdLiAgVmFsaWQgYnVpbHQtaW4gdmFsdWVzIGFyZTogImtkaWZmMyIsCi0JInRrZGlmZiIsICJtZWxkIiwgInh4ZGlmZiIsICJlbWVyZ2UiLCAidmltZGlmZiIsICJndmltZGlmZiIsIGFuZAotCSJvcGVuZGlmZiIuICBBbnkgb3RoZXIgdmFsdWUgaXMgdHJlYXRlZCBpcyBjdXN0b20gbWVyZ2UgdG9vbAotCWFuZCB0aGVyZSBtdXN0IGJlIGEgY29ycmVzcG9uaW5nIG1lcmdldG9vbC48dG9vbD4uY21kIG9wdGlvbi4KK21hbi48dG9vbD4uY21kOjoKKwlTcGVjaWZ5IHRoZSBjb21tYW5kIHRvIGludm9rZSB0aGUgc3BlY2lmaWVkIG1hbiB2aWV3ZXIuIFRoZQorCXNwZWNpZmllZCBjb21tYW5kIGlzIGV2YWx1YXRlZCBpbiBzaGVsbCB3aXRoIHRoZSBtYW4gcGFnZQorCXBhc3NlZCBhcyBhcmd1bWVudC4gKFNlZSBsaW5rZ2l0OmdpdC1oZWxwWzFdLikKIAotbWVyZ2UudmVyYm9zaXR5OjoKLQlDb250cm9scyB0aGUgYW1vdW50IG9mIG91dHB1dCBzaG93biBieSB0aGUgcmVjdXJzaXZlIG1lcmdlCi0Jc3RyYXRlZ3kuICBMZXZlbCAwIG91dHB1dHMgbm90aGluZyBleGNlcHQgYSBmaW5hbCBlcnJvcgotCW1lc3NhZ2UgaWYgY29uZmxpY3RzIHdlcmUgZGV0ZWN0ZWQuIExldmVsIDEgb3V0cHV0cyBvbmx5Ci0JY29uZmxpY3RzLCAyIG91dHB1dHMgY29uZmxpY3RzIGFuZCBmaWxlIGNoYW5nZXMuICBMZXZlbCA1IGFuZAotCWFib3ZlIG91dHB1dHMgZGVidWdnaW5nIGluZm9ybWF0aW9uLiAgVGhlIGRlZmF1bHQgaXMgbGV2ZWwgMi4KLQlDYW4gYmUgb3ZlcnJpZGRlbiBieSAnR0lUX01FUkdFX1ZFUkJPU0lUWScgZW52aXJvbm1lbnQgdmFyaWFibGUuCi0KLW1lcmdlLjxkcml2ZXI+Lm5hbWU6OgotCURlZmluZXMgYSBodW1hbiByZWFkYWJsZSBuYW1lIGZvciBhIGN1c3RvbSBsb3ctbGV2ZWwKLQltZXJnZSBkcml2ZXIuICBTZWUgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdIGZvciBkZXRhaWxzLgotCi1tZXJnZS48ZHJpdmVyPi5kcml2ZXI6OgotCURlZmluZXMgdGhlIGNvbW1hbmQgdGhhdCBpbXBsZW1lbnRzIGEgY3VzdG9tIGxvdy1sZXZlbAotCW1lcmdlIGRyaXZlci4gIFNlZSBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0gZm9yIGRldGFpbHMuCi0KLW1lcmdlLjxkcml2ZXI+LnJlY3Vyc2l2ZTo6Ci0JTmFtZXMgYSBsb3ctbGV2ZWwgbWVyZ2UgZHJpdmVyIHRvIGJlIHVzZWQgd2hlbgotCXBlcmZvcm1pbmcgYW4gaW50ZXJuYWwgbWVyZ2UgYmV0d2VlbiBjb21tb24gYW5jZXN0b3JzLgotCVNlZSBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0gZm9yIGRldGFpbHMuCittYW4uPHRvb2w+LnBhdGg6OgorCU92ZXJyaWRlIHRoZSBwYXRoIGZvciB0aGUgZ2l2ZW4gdG9vbCB0aGF0IG1heSBiZSB1c2VkIHRvCisJZGlzcGxheSBoZWxwIGluIHRoZSAnbWFuJyBmb3JtYXQuIFNlZSBsaW5rZ2l0OmdpdC1oZWxwWzFdLgogCiBtZXJnZXRvb2wuPHRvb2w+LnBhdGg6OgogCU92ZXJyaWRlIHRoZSBwYXRoIGZvciB0aGUgZ2l2ZW4gdG9vbC4gIFRoaXMgaXMgdXNlZnVsIGluIGNhc2UKQEAgLTkxMSw2ICs5ODEsMTAgQEAKIAlUaGUgZGVmYXVsdCBzZXQgb2YgInJlZnNwZWMiIGZvciBsaW5rZ2l0OmdpdC1wdXNoWzFdLiBTZWUKIAlsaW5rZ2l0OmdpdC1wdXNoWzFdLgogCityZW1vdGUuPG5hbWU+Lm1pcnJvcjo6CisJSWYgdHJ1ZSwgcHVzaGluZyB0byB0aGlzIHJlbW90ZSB3aWxsIGF1dG9tYXRpY2FsbHkgYmVoYXZlCisJYXMgaWYgdGhlIGBcLS1taXJyb3JgIG9wdGlvbiB3YXMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZS4KKwogcmVtb3RlLjxuYW1lPi5za2lwRGVmYXVsdFVwZGF0ZTo6CiAJSWYgdHJ1ZSwgdGhpcyByZW1vdGUgd2lsbCBiZSBza2lwcGVkIGJ5IGRlZmF1bHQgd2hlbiB1cGRhdGluZwogCXVzaW5nIHRoZSB1cGRhdGUgc3ViY29tbWFuZCBvZiBsaW5rZ2l0OmdpdC1yZW1vdGVbMV0uCkBAIC05OTIsNiArMTA2NiwxMiBAQAogCVRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBpbiB0aGUgJ2ltYXAnIHNlY3Rpb24gYXJlIGRlc2NyaWJlZAogCWluIGxpbmtnaXQ6Z2l0LWltYXAtc2VuZFsxXS4KIAorcmVjZWl2ZS5mc2NrT2JqZWN0czo6CisJSWYgaXQgaXMgc2V0IHRvIHRydWUsIGdpdC1yZWNlaXZlLXBhY2sgd2lsbCBjaGVjayBhbGwgcmVjZWl2ZWQKKwlvYmplY3RzLiBJdCB3aWxsIGFib3J0IGluIHRoZSBjYXNlIG9mIGEgbWFsZm9ybWVkIG9iamVjdCBvciBhCisJYnJva2VuIGxpbmsuIFRoZSByZXN1bHQgb2YgYW4gYWJvcnQgYXJlIG9ubHkgZGFuZ2xpbmcgb2JqZWN0cy4KKwlEZWZhdWx0cyB0byBmYWxzZS4KKwogcmVjZWl2ZS51bnBhY2tMaW1pdDo6CiAJSWYgdGhlIG51bWJlciBvZiBvYmplY3RzIHJlY2VpdmVkIGluIGEgcHVzaCBpcyBiZWxvdyB0aGlzCiAJbGltaXQgdGhlbiB0aGUgb2JqZWN0cyB3aWxsIGJlIHVucGFja2VkIGludG8gbG9vc2Ugb2JqZWN0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RpZmYtZ2VuZXJhdGUtcGF0Y2gudHh0IGIvRG9jdW1lbnRhdGlvbi9kaWZmLWdlbmVyYXRlLXBhdGNoLnR4dAppbmRleCAwMjljNWYyLi41MTdlMWViIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RpZmYtZ2VuZXJhdGUtcGF0Y2gudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGlmZi1nZW5lcmF0ZS1wYXRjaC50eHQKQEAgLTk2LDcgKzk2LDcgQEAKICsKIG9yIGxpa2UgdGhpcyAod2hlbiAnLS1jYycgb3B0aW9uIGlzIHVzZWQpOgogCi0gICAgICAgZGlmZiAtLWMgZmlsZQorICAgICAgIGRpZmYgLS1jYyBmaWxlCiAKIDIuICAgSXQgaXMgZm9sbG93ZWQgYnkgb25lIG9yIG1vcmUgZXh0ZW5kZWQgaGVhZGVyIGxpbmVzCiAgICAgICh0aGlzIGV4YW1wbGUgc2hvd3MgYSBtZXJnZSB3aXRoIHR3byBwYXJlbnRzKToKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGlmZi1vcHRpb25zLnR4dCBiL0RvY3VtZW50YXRpb24vZGlmZi1vcHRpb25zLnR4dAppbmRleCAxMzIzNGZhLi41NzIxNTQ4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RpZmYtb3B0aW9ucy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kaWZmLW9wdGlvbnMudHh0CkBAIC0yMjgsNiArMjI4LDkgQEAKIC0tbm8tZXh0LWRpZmY6OgogCURpc2FsbG93IGV4dGVybmFsIGRpZmYgZHJpdmVycy4KIAorLS1pZ25vcmUtc3VibW9kdWxlczo6CisJSWdub3JlIGNoYW5nZXMgdG8gc3VibW9kdWxlcyBpbiB0aGUgZGlmZiBnZW5lcmF0aW9uLgorCiAtLXNyYy1wcmVmaXg9PHByZWZpeD46OgogCVNob3cgdGhlIGdpdmVuIHNvdXJjZSBwcmVmaXggaW5zdGVhZCBvZiAiYS8iLgogCkBAIC0yMzgsNCArMjQxLDQgQEAKIAlEbyBub3Qgc2hvdyBhbnkgc291cmNlIG9yIGRlc3RpbmF0aW9uIHByZWZpeC4KIAogRm9yIG1vcmUgZGV0YWlsZWQgZXhwbGFuYXRpb24gb24gdGhlc2UgY29tbW9uIG9wdGlvbnMsIHNlZSBhbHNvCi1saW5rOmRpZmZjb3JlLmh0bWxbZGlmZmNvcmUgZG9jdW1lbnRhdGlvbl0uCitsaW5rZ2l0OmdpdGRpZmZjb3JlWzddW2RpZmZjb3JlIGRvY3VtZW50YXRpb25dLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mZXRjaC1vcHRpb25zLnR4dCBiL0RvY3VtZW50YXRpb24vZmV0Y2gtb3B0aW9ucy50eHQKaW5kZXggYjY3NTkxMS4uODVjODcxOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9mZXRjaC1vcHRpb25zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZldGNoLW9wdGlvbnMudHh0CkBAIC0xLDIyICsxLDI2IEBACi0tcSwgXC0tcXVpZXQ6OgorLXE6OgorLS1xdWlldDo6CiAJUGFzcyAtLXF1aWV0IHRvIGdpdC1mZXRjaC1wYWNrIGFuZCBzaWxlbmNlIGFueSBvdGhlciBpbnRlcm5hbGx5CiAJdXNlZCBwcm9ncmFtcy4KIAotLXYsIFwtLXZlcmJvc2U6OgorLXY6OgorLS12ZXJib3NlOjoKIAlCZSB2ZXJib3NlLgogCi0tYSwgXC0tYXBwZW5kOjoKKy1hOjoKKy0tYXBwZW5kOjoKIAlBcHBlbmQgcmVmIG5hbWVzIGFuZCBvYmplY3QgbmFtZXMgb2YgZmV0Y2hlZCByZWZzIHRvIHRoZQogCWV4aXN0aW5nIGNvbnRlbnRzIG9mIGAuZ2l0L0ZFVENIX0hFQURgLiAgV2l0aG91dCB0aGlzCiAJb3B0aW9uIG9sZCBkYXRhIGluIGAuZ2l0L0ZFVENIX0hFQURgIHdpbGwgYmUgb3ZlcndyaXR0ZW4uCiAKLVwtLXVwbG9hZC1wYWNrIDx1cGxvYWQtcGFjaz46OgorLS11cGxvYWQtcGFjayA8dXBsb2FkLXBhY2s+OjoKIAlXaGVuIGdpdmVuLCBhbmQgdGhlIHJlcG9zaXRvcnkgdG8gZmV0Y2ggZnJvbSBpcyBoYW5kbGVkCiAJYnkgJ2dpdC1mZXRjaC1wYWNrJywgJy0tZXhlYz08dXBsb2FkLXBhY2s+JyBpcyBwYXNzZWQgdG8KIAl0aGUgY29tbWFuZCB0byBzcGVjaWZ5IG5vbi1kZWZhdWx0IHBhdGggZm9yIHRoZSBjb21tYW5kCiAJcnVuIG9uIHRoZSBvdGhlciBlbmQuCiAKLS1mLCBcLS1mb3JjZTo6CistZjo6CistLWZvcmNlOjoKIAlXaGVuIGBnaXQtZmV0Y2hgIGlzIHVzZWQgd2l0aCBgPHJicmFuY2g+OjxsYnJhbmNoPmAKIAlyZWZzcGVjLCBpdCByZWZ1c2VzIHRvIHVwZGF0ZSB0aGUgbG9jYWwgYnJhbmNoCiAJYDxsYnJhbmNoPmAgdW5sZXNzIHRoZSByZW1vdGUgYnJhbmNoIGA8cmJyYW5jaD5gIGl0CkBAIC0yNCwxNiArMjgsMTggQEAKIAlvdmVycmlkZXMgdGhhdCBjaGVjay4KIAogaWZkZWY6OmdpdC1wdWxsW10KLVwtLW5vLXRhZ3M6OgorLS1uby10YWdzOjoKIGVuZGlmOjpnaXQtcHVsbFtdCiBpZm5kZWY6OmdpdC1wdWxsW10KLS1uLCBcLS1uby10YWdzOjoKKy1uOjoKKy0tbm8tdGFnczo6CiBlbmRpZjo6Z2l0LXB1bGxbXQogCUJ5IGRlZmF1bHQsIHRhZ3MgdGhhdCBwb2ludCBhdCBvYmplY3RzIHRoYXQgYXJlIGRvd25sb2FkZWQKIAlmcm9tIHRoZSByZW1vdGUgcmVwb3NpdG9yeSBhcmUgZmV0Y2hlZCBhbmQgc3RvcmVkIGxvY2FsbHkuCiAJVGhpcyBvcHRpb24gZGlzYWJsZXMgdGhpcyBhdXRvbWF0aWMgdGFnIGZvbGxvd2luZy4KIAotLXQsIFwtLXRhZ3M6OgorLXQ6OgorLS10YWdzOjoKIAlNb3N0IG9mIHRoZSB0YWdzIGFyZSBmZXRjaGVkIGF1dG9tYXRpY2FsbHkgYXMgYnJhbmNoCiAJaGVhZHMgYXJlIGRvd25sb2FkZWQsIGJ1dCB0YWdzIHRoYXQgZG8gbm90IHBvaW50IGF0CiAJb2JqZWN0cyByZWFjaGFibGUgZnJvbSB0aGUgYnJhbmNoIGhlYWRzIHRoYXQgYXJlIGJlaW5nCkBAIC00MSwxMCArNDcsMTIgQEAKIAlmbGFnIGxldHMgYWxsIHRhZ3MgYW5kIHRoZWlyIGFzc29jaWF0ZWQgb2JqZWN0cyBiZQogCWRvd25sb2FkZWQuCiAKLS1rLCBcLS1rZWVwOjoKKy1rOjoKKy0ta2VlcDo6CiAJS2VlcCBkb3dubG9hZGVkIHBhY2suCiAKLS11LCBcLS11cGRhdGUtaGVhZC1vazo6CistdTo6CistLXVwZGF0ZS1oZWFkLW9rOjoKIAlCeSBkZWZhdWx0IGBnaXQtZmV0Y2hgIHJlZnVzZXMgdG8gdXBkYXRlIHRoZSBoZWFkIHdoaWNoCiAJY29ycmVzcG9uZHMgdG8gdGhlIGN1cnJlbnQgYnJhbmNoLiAgVGhpcyBmbGFnIGRpc2FibGVzIHRoZQogCWNoZWNrLiAgVGhpcyBpcyBwdXJlbHkgZm9yIHRoZSBpbnRlcm5hbCB1c2UgZm9yIGBnaXQtcHVsbGAKQEAgLTUyLDcgKzYwLDcgQEAKIAlpbXBsZW1lbnRpbmcgeW91ciBvd24gUG9yY2VsYWluIHlvdSBhcmUgbm90IHN1cHBvc2VkIHRvCiAJdXNlIGl0LgogCi1cLS1kZXB0aD08ZGVwdGg+OjoKKy0tZGVwdGg9PGRlcHRoPjo6CiAJRGVlcGVuIHRoZSBoaXN0b3J5IG9mIGEgJ3NoYWxsb3cnIHJlcG9zaXRvcnkgY3JlYXRlZCBieQogCWBnaXQgY2xvbmVgIHdpdGggYC0tZGVwdGg9PGRlcHRoPmAgb3B0aW9uIChzZWUgbGlua2dpdDpnaXQtY2xvbmVbMV0pCiAJYnkgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgY29tbWl0cy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWFkZC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1hZGQudHh0CmluZGV4IGUyMzg5ZTMuLjgxNTg2NGMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWFkZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYWRkLnR4dApAQCAtOCw4ICs4LDkgQEAKIFNZTk9QU0lTCiAtLS0tLS0tLQogW3ZlcnNlXQotJ2dpdC1hZGQnIFstbl0gWy12XSBbLWZdIFstLWludGVyYWN0aXZlIHwgLWldIFstLXBhdGNoIHwgLXBdIFstdV0gWy0tcmVmcmVzaF0KLSAgICAgICAgICBbLS1dIDxmaWxlcGF0dGVybj4uLi4KKydnaXQtYWRkJyBbLW5dIFstdl0gWy0tZm9yY2UgfCAtZl0gWy0taW50ZXJhY3RpdmUgfCAtaV0gWy0tcGF0Y2ggfCAtcF0KKwkgIFstLXVwZGF0ZSB8IC11XSBbLS1yZWZyZXNoXSBbLS1pZ25vcmUtZXJyb3JzXSBbLS1dCisJICA8ZmlsZXBhdHRlcm4+Li4uCiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQpAQCAtNTAsMjcgKzUxLDMzIEBACiAJYW5kIGBkaXIvZmlsZTJgKSBjYW4gYmUgZ2l2ZW4gdG8gYWRkIGFsbCBmaWxlcyBpbiB0aGUKIAlkaXJlY3RvcnksIHJlY3Vyc2l2ZWx5LgogCi0tbiwgXC0tZHJ5LXJ1bjo6Cistbjo6CistLWRyeS1ydW46OgogICAgICAgICBEb24ndCBhY3R1YWxseSBhZGQgdGhlIGZpbGUocyksIGp1c3Qgc2hvdyBpZiB0aGV5IGV4aXN0LgogCi0tdiwgXC0tdmVyYm9zZTo6Cistdjo6CistLXZlcmJvc2U6OgogICAgICAgICBCZSB2ZXJib3NlLgogCiAtZjo6CistLWZvcmNlOjoKIAlBbGxvdyBhZGRpbmcgb3RoZXJ3aXNlIGlnbm9yZWQgZmlsZXMuCiAKLS1pLCBcLS1pbnRlcmFjdGl2ZTo6CistaTo6CistLWludGVyYWN0aXZlOjoKIAlBZGQgbW9kaWZpZWQgY29udGVudHMgaW4gdGhlIHdvcmtpbmcgdHJlZSBpbnRlcmFjdGl2ZWx5IHRvCiAJdGhlIGluZGV4LiBPcHRpb25hbCBwYXRoIGFyZ3VtZW50cyBtYXkgYmUgc3VwcGxpZWQgdG8gbGltaXQKIAlvcGVyYXRpb24gdG8gYSBzdWJzZXQgb2YgdGhlIHdvcmtpbmcgdHJlZS4gU2VlIGBgSW50ZXJhY3RpdmUKIAltb2RlJycgZm9yIGRldGFpbHMuCiAKLS1wLCBcLS1wYXRjaDo6CistcDo6CistLXBhdGNoOjoKIAlTaW1pbGFyIHRvIEludGVyYWN0aXZlIG1vZGUgYnV0IHRoZSBpbml0aWFsIGNvbW1hbmQgbG9vcCBpcwogCWJ5cGFzc2VkIGFuZCB0aGUgJ3BhdGNoJyBzdWJjb21tYW5kIGlzIGludm9rZWQgdXNpbmcgZWFjaCBvZgogCXRoZSBzcGVjaWZpZWQgZmlsZXBhdHRlcm5zIGJlZm9yZSBleGl0aW5nLgogCiAtdTo6CistLXVwZGF0ZTo6CiAJVXBkYXRlIG9ubHkgZmlsZXMgdGhhdCBnaXQgYWxyZWFkeSBrbm93cyBhYm91dCwgc3RhZ2luZyBtb2RpZmllZAogCWNvbnRlbnQgZm9yIGNvbW1pdCBhbmQgbWFya2luZyBkZWxldGVkIGZpbGVzIGZvciByZW1vdmFsLiBUaGlzCiAJaXMgc2ltaWxhcgpAQCAtNzksMTAgKzg2LDE1IEBACiAJY29tbWFuZCBsaW5lLiBJZiBubyBwYXRocyBhcmUgc3BlY2lmaWVkLCBhbGwgdHJhY2tlZCBmaWxlcyBpbiB0aGUKIAljdXJyZW50IGRpcmVjdG9yeSBhbmQgaXRzIHN1YmRpcmVjdG9yaWVzIGFyZSB1cGRhdGVkLgogCi1cLS1yZWZyZXNoOjoKKy0tcmVmcmVzaDo6CiAJRG9uJ3QgYWRkIHRoZSBmaWxlKHMpLCBidXQgb25seSByZWZyZXNoIHRoZWlyIHN0YXQoKQogCWluZm9ybWF0aW9uIGluIHRoZSBpbmRleC4KIAorLS1pZ25vcmUtZXJyb3JzOjoKKwlJZiBzb21lIGZpbGVzIGNvdWxkIG5vdCBiZSBhZGRlZCBiZWNhdXNlIG9mIGVycm9ycyBpbmRleGluZworCXRoZW0sIGRvIG5vdCBhYm9ydCB0aGUgb3BlcmF0aW9uLCBidXQgY29udGludWUgYWRkaW5nIHRoZQorCW90aGVycy4gVGhlIGNvbW1hbmQgc2hhbGwgc3RpbGwgZXhpdCB3aXRoIG5vbi16ZXJvIHN0YXR1cy4KKwogXC0tOjoKIAlUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBzZXBhcmF0ZSBjb21tYW5kLWxpbmUgb3B0aW9ucyBmcm9tCiAJdGhlIGxpc3Qgb2YgZmlsZXMsICh1c2VmdWwgd2hlbiBmaWxlbmFtZXMgbWlnaHQgYmUgbWlzdGFrZW4KQEAgLTk1LDI2ICsxMDcsMzIgQEAKIFRoZSBvcHRpb25hbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlICdjb3JlLmV4Y2x1ZGVzZmlsZScgaW5kaWNhdGVzIGEgcGF0aCB0byBhCiBmaWxlIGNvbnRhaW5pbmcgcGF0dGVybnMgb2YgZmlsZSBuYW1lcyB0byBleGNsdWRlIGZyb20gZ2l0LWFkZCwgc2ltaWxhciB0bwogJEdJVF9ESVIvaW5mby9leGNsdWRlLiAgUGF0dGVybnMgaW4gdGhlIGV4Y2x1ZGUgZmlsZSBhcmUgdXNlZCBpbiBhZGRpdGlvbiB0bwotdGhvc2UgaW4gaW5mby9leGNsdWRlLiAgU2VlIGxpbms6cmVwb3NpdG9yeS1sYXlvdXQuaHRtbFtyZXBvc2l0b3J5IGxheW91dF0uCit0aG9zZSBpbiBpbmZvL2V4Y2x1ZGUuICBTZWUgbGlua2dpdDpnaXRyZXBvc2l0b3J5LWxheW91dFs1XVtyZXBvc2l0b3J5IGxheW91dF0uCiAKIAogRVhBTVBMRVMKIC0tLS0tLS0tCi1naXQtYWRkIERvY3VtZW50YXRpb24vXFwqLnR4dDo6CiAKLQlBZGRzIGNvbnRlbnQgZnJvbSBhbGwgYFwqLnR4dGAgZmlsZXMgdW5kZXIgYERvY3VtZW50YXRpb25gCi0JZGlyZWN0b3J5IGFuZCBpdHMgc3ViZGlyZWN0b3JpZXMuCisqIEFkZHMgY29udGVudCBmcm9tIGFsbCBgXCoudHh0YCBmaWxlcyB1bmRlciBgRG9jdW1lbnRhdGlvbmAgZGlyZWN0b3J5CithbmQgaXRzIHN1YmRpcmVjdG9yaWVzOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBhZGQgRG9jdW1lbnRhdGlvbi9cXCoudHh0CistLS0tLS0tLS0tLS0KICsKIE5vdGUgdGhhdCB0aGUgYXN0ZXJpc2sgYFwqYCBpcyBxdW90ZWQgZnJvbSB0aGUgc2hlbGwgaW4gdGhpcwogZXhhbXBsZTsgdGhpcyBsZXRzIHRoZSBjb21tYW5kIHRvIGluY2x1ZGUgdGhlIGZpbGVzIGZyb20KIHN1YmRpcmVjdG9yaWVzIG9mIGBEb2N1bWVudGF0aW9uL2AgZGlyZWN0b3J5LgogCi1naXQtYWRkIGdpdC0qLnNoOjoKLQotCUNvbnNpZGVycyBhZGRpbmcgY29udGVudCBmcm9tIGFsbCBnaXQtKi5zaCBzY3JpcHRzLgotCUJlY2F1c2UgdGhpcyBleGFtcGxlIGxldHMgc2hlbGwgZXhwYW5kIHRoZSBhc3RlcmlzawotCShpLmUuIHlvdSBhcmUgbGlzdGluZyB0aGUgZmlsZXMgZXhwbGljaXRseSksIGl0IGRvZXMgbm90Ci0JY29uc2lkZXIgYHN1YmRpci9naXQtZm9vLnNoYC4KKyogQ29uc2lkZXJzIGFkZGluZyBjb250ZW50IGZyb20gYWxsIGdpdC0qLnNoIHNjcmlwdHM6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGFkZCBnaXQtKi5zaAorLS0tLS0tLS0tLS0tCisrCitCZWNhdXNlIHRoaXMgZXhhbXBsZSBsZXRzIHNoZWxsIGV4cGFuZCB0aGUgYXN0ZXJpc2sgKGkuZS4geW91IGFyZQorbGlzdGluZyB0aGUgZmlsZXMgZXhwbGljaXRseSksIGl0IGRvZXMgbm90IGNvbnNpZGVyCitgc3ViZGlyL2dpdC1mb28uc2hgLgogCiBJbnRlcmFjdGl2ZSBtb2RlCiAtLS0tLS0tLS0tLS0tLS0tCkBAIC0xNjksOCArMTg3LDkgQEAKICAgICJVcGRhdGU+PiIuICBXaGVuIHRoZSBwcm9tcHQgZW5kcyB3aXRoIGRvdWJsZSAnPj4nLCB5b3UgY2FuCiAgICBtYWtlIG1vcmUgdGhhbiBvbmUgc2VsZWN0aW9uLCBjb25jYXRlbmF0ZWQgd2l0aCB3aGl0ZXNwYWNlIG9yCiAgICBjb21tYS4gIEFsc28geW91IGNhbiBzYXkgcmFuZ2VzLiAgRS5nLiAiMi01IDcsOSIgdG8gY2hvb3NlCi0gICAyLDMsNCw1LDcsOSBmcm9tIHRoZSBsaXN0LiAgWW91IGNhbiBzYXkgJyonIHRvIGNob29zZQotICAgZXZlcnl0aGluZy4KKyAgIDIsMyw0LDUsNyw5IGZyb20gdGhlIGxpc3QuICBJZiB0aGUgc2Vjb25kIG51bWJlciBpbiBhIHJhbmdlIGlzCisgICBvbWl0dGVkLCBhbGwgcmVtYWluaW5nIHBhdGNoZXMgYXJlIHRha2VuLiAgRS5nLiAiNy0iIHRvIGNob29zZQorICAgNyw4LDkgZnJvbSB0aGUgbGlzdC4gIFlvdSBjYW4gc2F5ICcqJyB0byBjaG9vc2UgZXZlcnl0aGluZy4KICsKIFdoYXQgeW91IGNob3NlIGFyZSB0aGVuIGhpZ2hsaWdodGVkIHdpdGggJyonLAogbGlrZSB0aGlzOgpAQCAtMjM1LDcgKzI1NCw3IEBACiB1c2VkIHRvIHdvcmsgdGhpcyBsaW1pdGF0aW9uIGFyb3VuZCB0byBzb21lIGRlZ3JlZSwgYnV0IGJhY2tzbGFzaCwKIGRvdWJsZS1xdW90ZSBhbmQgY29udHJvbCBjaGFyYWN0ZXJzIHdpbGwgc3RpbGwgaGF2ZSBwcm9ibGVtcy4KIAotU2VlIEFsc28KK1NFRSBBTFNPCiAtLS0tLS0tLQogbGlua2dpdDpnaXQtc3RhdHVzWzFdCiBsaW5rZ2l0OmdpdC1ybVsxXQpAQCAtMjU0LDQgKzI3Myw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWFtLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWFtLnR4dAppbmRleCAyMzg3YThkLi41NjIyOTcxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1hbS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYW0udHh0CkBAIC0yOCwxNCArMjgsMTcgQEAKIAlzdXBwbHkgdGhpcyBhcmd1bWVudCwgcmVhZHMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQuIElmIHlvdSBzdXBwbHkKIAlkaXJlY3RvcmllcywgdGhleSdsbCBiZSB0cmVhdGVkIGFzIE1haWxkaXJzLgogCi0tcywgLS1zaWdub2ZmOjoKKy1zOjoKKy0tc2lnbm9mZjo6CiAJQWRkIGBTaWduZWQtb2ZmLWJ5OmAgbGluZSB0byB0aGUgY29tbWl0IG1lc3NhZ2UsIHVzaW5nCiAJdGhlIGNvbW1pdHRlciBpZGVudGl0eSBvZiB5b3Vyc2VsZi4KIAotLWssIC0ta2VlcDo6Cistazo6CistLWtlZXA6OgogCVBhc3MgYC1rYCBmbGFnIHRvIGBnaXQtbWFpbGluZm9gIChzZWUgbGlua2dpdDpnaXQtbWFpbGluZm9bMV0pLgogCi0tdSwgLS11dGY4OjoKKy11OjoKKy0tdXRmODo6CiAJUGFzcyBgLXVgIGZsYWcgdG8gYGdpdC1tYWlsaW5mb2AgKHNlZSBsaW5rZ2l0OmdpdC1tYWlsaW5mb1sxXSkuCiAJVGhlIHByb3Bvc2VkIGNvbW1pdCBsb2cgbWVzc2FnZSB0YWtlbiBmcm9tIHRoZSBlLW1haWwKIAlpcyByZS1jb2RlZCBpbnRvIFVURi04IGVuY29kaW5nIChjb25maWd1cmF0aW9uIHZhcmlhYmxlCkBAIC00OSwxMyArNTIsMTUgQEAKIAlQYXNzIGAtbmAgZmxhZyB0byBgZ2l0LW1haWxpbmZvYCAoc2VlCiAJbGlua2dpdDpnaXQtbWFpbGluZm9bMV0pLgogCi0tMywgLS0zd2F5OjoKKy0zOjoKKy0tM3dheTo6CiAJV2hlbiB0aGUgcGF0Y2ggZG9lcyBub3QgYXBwbHkgY2xlYW5seSwgZmFsbCBiYWNrIG9uCiAJMy13YXkgbWVyZ2UsIGlmIHRoZSBwYXRjaCByZWNvcmRzIHRoZSBpZGVudGl0eSBvZiBibG9icwogCWl0IGlzIHN1cHBvc2VkIHRvIGFwcGx5IHRvLCBhbmQgd2UgaGF2ZSB0aG9zZSBibG9icwogCWF2YWlsYWJsZSBsb2NhbGx5LgogCi0tYiwgLS1iaW5hcnk6OgorLWI6OgorLS1iaW5hcnk6OgogCVBhc3MgYC0tYWxsb3ctYmluYXJ5LXJlcGxhY2VtZW50YCBmbGFnIHRvIGBnaXQtYXBwbHlgCiAJKHNlZSBsaW5rZ2l0OmdpdC1hcHBseVsxXSkuCiAKQEAgLTY0LDE5ICs2OSwyMiBAQAogCXByb2dyYW0gdGhhdCBhcHBsaWVzCiAJdGhlIHBhdGNoLgogCi0tQzxuPiwgLXA8bj46OgorLUM8bj46OgorLXA8bj46OgogCVRoZXNlIGZsYWdzIGFyZSBwYXNzZWQgdG8gdGhlIGBnaXQtYXBwbHlgIChzZWUgbGlua2dpdDpnaXQtYXBwbHlbMV0pCiAJcHJvZ3JhbSB0aGF0IGFwcGxpZXMKIAl0aGUgcGF0Y2guCiAKLS1pLCAtLWludGVyYWN0aXZlOjoKKy1pOjoKKy0taW50ZXJhY3RpdmU6OgogCVJ1biBpbnRlcmFjdGl2ZWx5LgogCiAtLXNraXA6OgogCVNraXAgdGhlIGN1cnJlbnQgcGF0Y2guICBUaGlzIGlzIG9ubHkgbWVhbmluZ2Z1bCB3aGVuCiAJcmVzdGFydGluZyBhbiBhYm9ydGVkIHBhdGNoLgogCi0tciwgLS1yZXNvbHZlZDo6Cistcjo6CistLXJlc29sdmVkOjoKIAlBZnRlciBhIHBhdGNoIGZhaWx1cmUgKGUuZy4gYXR0ZW1wdGluZyB0byBhcHBseQogCWNvbmZsaWN0aW5nIHBhdGNoKSwgdGhlIHVzZXIgaGFzIGFwcGxpZWQgaXQgYnkgaGFuZCBhbmQKIAl0aGUgaW5kZXggZmlsZSBzdG9yZXMgdGhlIHJlc3VsdCBvZiB0aGUgYXBwbGljYXRpb24uCkBAIC0xNDUsNyArMTUzLDcgQEAKIAogQXV0aG9yCiAtLS0tLS0KLVdyaXR0ZW4gYnkgSnVuaW8gQyBIYW1hbm8gPGp1bmtpb0Bjb3gubmV0PgorV3JpdHRlbiBieSBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CiAKIERvY3VtZW50YXRpb24KIC0tLS0tLS0tLS0tLS0tCkBAIC0xNTMsNCArMTYxLDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYW5ub3RhdGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYW5ub3RhdGUudHh0CmluZGV4IDQ1YTZhNzIuLmRhMTUzNzkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWFubm90YXRlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1hbm5vdGF0ZS50eHQKQEAgLTI4LDQgKzI4LDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYXBwbHkudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYXBwbHkudHh0CmluZGV4IDJkZWMyZWMuLmM4MzQ3NjMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWFwcGx5LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1hcHBseS50eHQKQEAgLTczLDcgKzczLDggQEAKIFdoZW4gYSBwdXJlIG1vZGUgY2hhbmdlIGlzIGVuY291bnRlcmVkICh3aGljaCBoYXMgbm8gaW5kZXggaW5mb3JtYXRpb24pLAogdGhlIGluZm9ybWF0aW9uIGlzIHJlYWQgZnJvbSB0aGUgY3VycmVudCBpbmRleCBpbnN0ZWFkLgogCi0tUiwgLS1yZXZlcnNlOjoKKy1SOjoKKy0tcmV2ZXJzZTo6CiAJQXBwbHkgdGhlIHBhdGNoIGluIHJldmVyc2UuCiAKIC0tcmVqZWN0OjoKQEAgLTEyNCw3ICsxMjUsOCBAQAogCXRoZSByZXN1bHQgd2l0aCB0aGlzIG9wdGlvbiwgd2hpY2ggd291bGQgYXBwbHkgdGhlCiAJZGVsZXRpb24gcGFydCBidXQgbm90IGFkZGl0aW9uIHBhcnQuCiAKLS0tYWxsb3ctYmluYXJ5LXJlcGxhY2VtZW50LCAtLWJpbmFyeTo6CistLWFsbG93LWJpbmFyeS1yZXBsYWNlbWVudDo6CistLWJpbmFyeTo6CiAJSGlzdG9yaWNhbGx5IHdlIGRpZCBub3QgYWxsb3cgYmluYXJ5IHBhdGNoIGFwcGxpZWQKIAl3aXRob3V0IGFuIGV4cGxpY2l0IHBlcm1pc3Npb24gZnJvbSB0aGUgdXNlciwgYW5kIHRoaXMKIAlmbGFnIHdhcyB0aGUgd2F5IHRvIGRvIHNvLiAgQ3VycmVudGx5IHdlIGFsd2F5cyBhbGxvdyBiaW5hcnkKQEAgLTE2OSw3ICsxNzEsOCBAQAogCWNvcnJlY3RseS4gVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBhcHBseWluZyBzdWNoIHBhdGNoZXMgYnkKIAl3b3JraW5nIGFyb3VuZCB0aGlzIGJ1Zy4KIAotLXYsIC0tdmVyYm9zZTo6Cistdjo6CistLXZlcmJvc2U6OgogCVJlcG9ydCBwcm9ncmVzcyB0byBzdGRlcnIuIEJ5IGRlZmF1bHQsIG9ubHkgYSBtZXNzYWdlIGFib3V0IHRoZQogCWN1cnJlbnQgcGF0Y2ggYmVpbmcgYXBwbGllZCB3aWxsIGJlIHByaW50ZWQuIFRoaXMgb3B0aW9uIHdpbGwgY2F1c2UKIAlhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHRvIGJlIHJlcG9ydGVkLgpAQCAtMjA2LDQgKzIwOSw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWFyY2hpbXBvcnQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYXJjaGltcG9ydC50eHQKaW5kZXggYmQyMGZkOC4uNjAzMTE3YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtYXJjaGltcG9ydC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYXJjaGltcG9ydC50eHQKQEAgLTExNyw0ICsxMTcsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1hcmNoaXZlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWFyY2hpdmUudHh0CmluZGV4IGQzZWFhMTYuLjliNWYzYWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWFyY2hpdmUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWFyY2hpdmUudHh0CkBAIC0zNiwxMCArMzYsMTIgQEAKIAlGb3JtYXQgb2YgdGhlIHJlc3VsdGluZyBhcmNoaXZlOiAndGFyJyBvciAnemlwJy4gIFRoZSBkZWZhdWx0CiAJaXMgJ3RhcicuCiAKLS0tbGlzdCwgLWw6OgorLWw6OgorLS1saXN0OjoKIAlTaG93IGFsbCBhdmFpbGFibGUgZm9ybWF0cy4KIAotLS12ZXJib3NlLCAtdjo6Cistdjo6CistLXZlcmJvc2U6OgogCVJlcG9ydCBwcm9ncmVzcyB0byBzdGRlcnIuCiAKIC0tcHJlZml4PTxwcmVmaXg+Lzo6CkBAIC0xMTgsNCArMTIwLDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYmlzZWN0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWJpc2VjdC50eHQKaW5kZXggMDg1NWI5OC4uM2NhMGQzMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtYmlzZWN0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1iaXNlY3QudHh0CkBAIC0xNSw2ICsxNSw3IEBACiBUaGUgY29tbWFuZCB0YWtlcyB2YXJpb3VzIHN1YmNvbW1hbmRzLCBhbmQgZGlmZmVyZW50IG9wdGlvbnMgZGVwZW5kaW5nCiBvbiB0aGUgc3ViY29tbWFuZDoKIAorIGdpdCBiaXNlY3QgaGVscAogIGdpdCBiaXNlY3Qgc3RhcnQgWzxiYWQ+IFs8Z29vZD4uLi5dXSBbLS1dIFs8cGF0aHM+Li4uXQogIGdpdCBiaXNlY3QgYmFkIFs8cmV2Pl0KICBnaXQgYmlzZWN0IGdvb2QgWzxyZXY+Li4uXQpAQCAtMjksNiArMzAsMTIgQEAKIGJpbmFyeSBzZWFyY2ggcHJvY2VzcyB0byBmaW5kIHdoaWNoIGNoYW5nZSBpbnRyb2R1Y2VkIGEgYnVnLCBnaXZlbiBhbgogb2xkICJnb29kIiBjb21taXQgb2JqZWN0IG5hbWUgYW5kIGEgbGF0ZXIgImJhZCIgY29tbWl0IG9iamVjdCBuYW1lLgogCitHZXR0aW5nIGhlbHAKK35+fn5+fn5+fn5+fgorCitVc2UgImdpdCBiaXNlY3QiIHRvIGdldCBhIHNob3J0IHVzYWdlIGRlc2NyaXB0aW9uLCBhbmQgImdpdCBiaXNlY3QKK2hlbHAiIG9yICJnaXQgYmlzZWN0IC1oIiB0byBnZXQgYSBsb25nIHVzYWdlIGRlc2NyaXB0aW9uLgorCiBCYXNpYyBiaXNlY3QgY29tbWFuZHM6IHN0YXJ0LCBiYWQsIGdvb2QKIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogCkBAIC03OCwxMCArODUsOSBAQAogJCBnaXQgYmlzZWN0IHJlc2V0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdG8gZ2V0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIGJyYW5jaCwgaW5zdGVhZCBvZiBiZWluZyBpbiBvbmUgb2YgdGhlCi1iaXNlY3Rpb24gYnJhbmNoZXMgKCJnaXQgYmlzZWN0IHN0YXJ0IiB3aWxsIGRvIHRoYXQgZm9yIHlvdSB0b28sCi1hY3R1YWxseTogaXQgd2lsbCByZXNldCB0aGUgYmlzZWN0aW9uIHN0YXRlLCBhbmQgYmVmb3JlIGl0IGRvZXMgdGhhdAotaXQgY2hlY2tzIHRoYXQgeW91J3JlIG5vdCB1c2luZyBzb21lIG9sZCBiaXNlY3Rpb24gYnJhbmNoKS4KK3RvIGdldCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBicmFuY2gsIGluc3RlYWQgb2YgYmVpbmcgb24gdGhlIGJpc2VjdGlvbgorY29tbWl0ICgiZ2l0IGJpc2VjdCBzdGFydCIgd2lsbCBkbyB0aGF0IGZvciB5b3UgdG9vLCBhY3R1YWxseTogaXQgd2lsbAorcmVzZXQgdGhlIGJpc2VjdGlvbiBzdGF0ZSkuCiAKIEJpc2VjdCB2aXN1YWxpemUKIH5+fn5+fn5+fn5+fn5+fn4KQEAgLTIxNyw2ICsyMjMsNTUgQEAKIHRoZSBzdGF0dXMgb2YgdGhlIHJlYWwgdGVzdCB0byBsZXQgImdpdCBiaXNlY3QgcnVuIiBjb21tYW5kIGxvb3AgdG8KIGtub3cgdGhlIG91dGNvbWUuCiAKK0VYQU1QTEVTCistLS0tLS0tLQorCisqIEF1dG9tYXRpY2FsbHkgYmlzZWN0IGEgYnJva2VuIGJ1aWxkIGJldHdlZW4gdjEuMiBhbmQgSEVBRDoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHN0YXJ0IEhFQUQgdjEuMiAtLSAgICAgICMgSEVBRCBpcyBiYWQsIHYxLjIgaXMgZ29vZAorJCBnaXQgYmlzZWN0IHJ1biBtYWtlICAgICAgICAgICAgICAgICMgIm1ha2UiIGJ1aWxkcyB0aGUgYXBwCistLS0tLS0tLS0tLS0KKworKiBBdXRvbWF0aWNhbGx5IGJpc2VjdCBhIGJyb2tlbiB0ZXN0IHN1aXRlOgorKworLS0tLS0tLS0tLS0tCiskIGNhdCB+L3Rlc3Quc2gKKyMhL2Jpbi9zaAorbWFrZSB8fCBleGl0IDEyNSAgICAgICAgICAgICAgICAgICAjIHRoaXMgInNraXAicyBicm9rZW4gYnVpbGRzCittYWtlIHRlc3QgICAgICAgICAgICAgICAgICAgICAgICAgICMgIm1ha2UgdGVzdCIgcnVucyB0aGUgdGVzdCBzdWl0ZQorJCBnaXQgYmlzZWN0IHN0YXJ0IHYxLjMgdjEuMSAtLSAgICAjIHYxLjMgaXMgYmFkLCB2MS4xIGlzIGdvb2QKKyQgZ2l0IGJpc2VjdCBydW4gfi90ZXN0LnNoCistLS0tLS0tLS0tLS0KKysKK0hlcmUgd2UgdXNlIGEgInRlc3Quc2giIGN1c3RvbSBzY3JpcHQuIEluIHRoaXMgc2NyaXB0LCBpZiAibWFrZSIKK2ZhaWxzLCB3ZSAic2tpcCIgdGhlIGN1cnJlbnQgY29tbWl0LgorKworSXQncyBzYWZlciB0byB1c2UgYSBjdXN0b20gc2NyaXB0IG91dHNpZGUgdGhlIHJlcG8gdG8gcHJldmVudAoraW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIGJpc2VjdCwgbWFrZSBhbmQgdGVzdCBwcm9jZXNzZXMgYW5kIHRoZQorc2NyaXB0LgorKworQW5kICJtYWtlIHRlc3QiIHNob3VsZCAiZXhpdCAwIiwgaWYgdGhlIHRlc3Qgc3VpdGUgcGFzc2VzLCBhbmQKKyJleGl0IDEiIChmb3IgZXhhbXBsZSkgb3RoZXJ3aXNlLgorCisqIEF1dG9tYXRpY2FsbHkgYmlzZWN0IGEgYnJva2VuIHRlc3QgY2FzZToKKysKKy0tLS0tLS0tLS0tLQorJCBjYXQgfi90ZXN0LnNoCisjIS9iaW4vc2gKK21ha2UgfHwgZXhpdCAxMjUgICAgICAgICAgICAgICAgICAgICAjIHRoaXMgInNraXAicyBicm9rZW4gYnVpbGRzCit+L2NoZWNrX3Rlc3RfY2FzZS5zaCAgICAgICAgICAgICAgICAgIyBkb2VzIHRoZSB0ZXN0IGNhc2UgcGFzc2VzID8KKyQgZ2l0IGJpc2VjdCBzdGFydCBIRUFEIEhFQUR+MTAgLS0gICAjIGN1bHByaXQgaXMgYW1vbmcgdGhlIGxhc3QgMTAKKyQgZ2l0IGJpc2VjdCBydW4gfi90ZXN0LnNoCistLS0tLS0tLS0tLS0KKysKK0hlcmUgImNoZWNrX3Rlc3RfY2FzZS5zaCIgc2hvdWxkICJleGl0IDAiLCBpZiB0aGUgdGVzdCBjYXNlIHBhc3NlcywKK2FuZCAiZXhpdCAxIiAoZm9yIGV4YW1wbGUpIG90aGVyd2lzZS4KKysKK0l0J3Mgc2FmZXIgaWYgYm90aCAidGVzdC5zaCIgYW5kICJjaGVja190ZXN0X2Nhc2Uuc2giIHNjcmlwdHMgYXJlCitvdXRzaWRlIHRoZSByZXBvIHRvIHByZXZlbnQgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIGJpc2VjdCwgbWFrZSBhbmQKK3Rlc3QgcHJvY2Vzc2VzIGFuZCB0aGUgc2NyaXB0cy4KKwogQXV0aG9yCiAtLS0tLS0KIFdyaXR0ZW4gYnkgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPgpAQCAtMjI3LDQgKzI4Miw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWJsYW1lLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWJsYW1lLnR4dAppbmRleCAxNDE2M2I2Li4wZTAxOTZlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1ibGFtZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYmxhbWUudHh0CkBAIC01MiwxMiArNTIsMTQgQEAKIAlhIGNlcnRhaW4gdGhyZXNob2xkIGZvciBnaXQtYmxhbWUgdG8gY29uc2lkZXIgdGhvc2UgbGluZXMKIAlvZiBjb2RlIHRvIGhhdmUgYmVlbiBtb3ZlZC4KIAotLWYsIC0tc2hvdy1uYW1lOjoKKy1mOjoKKy0tc2hvdy1uYW1lOjoKIAlTaG93IGZpbGVuYW1lIGluIHRoZSBvcmlnaW5hbCBjb21taXQuICBCeSBkZWZhdWx0CiAJZmlsZW5hbWUgaXMgc2hvd24gaWYgdGhlcmUgaXMgYW55IGxpbmUgdGhhdCBjYW1lIGZyb20gYQogCWZpbGUgd2l0aCBkaWZmZXJlbnQgbmFtZSwgZHVlIHRvIHJlbmFtZSBkZXRlY3Rpb24uCiAKLS1uLCAtLXNob3ctbnVtYmVyOjoKKy1uOjoKKy0tc2hvdy1udW1iZXI6OgogCVNob3cgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIGNvbW1pdCAoRGVmYXVsdDogb2ZmKS4KIAogLXM6OgpAQCAtMTg4LDggKzE5MCw4IEBACiAKIEFVVEhPUgogLS0tLS0tCi1Xcml0dGVuIGJ5IEp1bmlvIEMgSGFtYW5vIDxqdW5raW9AY294Lm5ldD4KK1dyaXR0ZW4gYnkgSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1icmFuY2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYnJhbmNoLnR4dAppbmRleCA2ZjA3YTE3Li4zOWNkNWQ5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1icmFuY2gudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWJyYW5jaC50eHQKQEAgLTgsNyArOCw3IEBACiBTWU5PUFNJUwogLS0tLS0tLS0KIFt2ZXJzZV0KLSdnaXQtYnJhbmNoJyBbLS1jb2xvciB8IC0tbm8tY29sb3JdIFstciB8IC1hXQorJ2dpdC1icmFuY2gnIFstLWNvbG9yIHwgLS1uby1jb2xvcl0gWy1yIHwgLWFdIFstLW1lcmdlZCB8IC0tbm8tbWVyZ2VkXQogCSAgIFstdiBbLS1hYmJyZXY9PGxlbmd0aD4gfCAtLW5vLWFiYnJldl1dCiAJICAgWy0tY29udGFpbnMgPGNvbW1pdD5dCiAnZ2l0LWJyYW5jaCcgWy0tdHJhY2sgfCAtLW5vLXRyYWNrXSBbLWxdIFstZl0gPGJyYW5jaG5hbWU+IFs8c3RhcnQtcG9pbnQ+XQpAQCAtMjQsNiArMjQsOCBAQAogV2l0aCBgLS1jb250YWlucyA8Y29tbWl0PmAsIHNob3dzIG9ubHkgdGhlIGJyYW5jaGVzIHRoYXQKIGNvbnRhaW5zIHRoZSBuYW1lZCBjb21taXQgKGluIG90aGVyIHdvcmRzLCB0aGUgYnJhbmNoZXMgd2hvc2UKIHRpcCBjb21taXRzIGFyZSBkZXNjZW5kYW50IG9mIHRoZSBuYW1lZCBjb21taXQpLgorV2l0aCBgLS1tZXJnZWRgLCBvbmx5IGJyYW5jaGVzIG1lcmdlZCBpbnRvIEhFQUQgd2lsbCBiZSBsaXN0ZWQsIGFuZAord2l0aCBgLS1uby1tZXJnZWRgIG9ubHkgYnJhbmNoZXMgbm90IG1lcmdlZCBpbnRvIEhFQUQgd2lsbCBiZSBsaXN0ZWQuCiAKIEluIGl0cyBzZWNvbmQgZm9ybSwgYSBuZXcgYnJhbmNoIG5hbWVkIDxicmFuY2huYW1lPiB3aWxsIGJlIGNyZWF0ZWQuCiBJdCB3aWxsIHN0YXJ0IG91dCB3aXRoIGEgaGVhZCBlcXVhbCB0byB0aGUgb25lIGdpdmVuIGFzIDxzdGFydC1wb2ludD4uCkBAIC05Myw3ICs5NSw4IEBACiAtYTo6CiAJTGlzdCBib3RoIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBhbmQgbG9jYWwgYnJhbmNoZXMuCiAKLS12LCAtLXZlcmJvc2U6OgorLXY6OgorLS12ZXJib3NlOjoKIAlTaG93IHNoYTEgYW5kIGNvbW1pdCBzdWJqZWN0IGxpbmUgZm9yIGVhY2ggaGVhZC4KIAogLS1hYmJyZXY9PGxlbmd0aD46OgpAQCAtMTE4LDYgKzEyMSwxNSBAQAogLS1uby10cmFjazo6CiAJSWdub3JlIHRoZSBicmFuY2guYXV0b3NldHVwbWVyZ2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KIAorLS1jb250YWlucyA8Y29tbWl0Pjo6CisJT25seSBsaXN0IGJyYW5jaGVzIHdoaWNoIGNvbnRhaW4gdGhlIHNwZWNpZmllZCBjb21taXQuCisKKy0tbWVyZ2VkOjoKKwlPbmx5IGxpc3QgYnJhbmNoZXMgd2hpY2ggYXJlIGZ1bGx5IGNvbnRhaW5lZCBieSBIRUFELgorCistLW5vLW1lcmdlZDo6CisJRG8gbm90IGxpc3QgYnJhbmNoZXMgd2hpY2ggYXJlIGZ1bGx5IGNvbnRhaW5lZCBieSBIRUFELgorCiA8YnJhbmNobmFtZT46OgogCVRoZSBuYW1lIG9mIHRoZSBicmFuY2ggdG8gY3JlYXRlIG9yIGRlbGV0ZS4KIAlUaGUgbmV3IGJyYW5jaCBuYW1lIG11c3QgcGFzcyBhbGwgY2hlY2tzIGRlZmluZWQgYnkKQEAgLTE3NSwxMCArMTg3LDIyIEBACiBlYXNpZXIgdG8gdXNlIHRoZSBnaXQgY2hlY2tvdXQgY29tbWFuZCB3aXRoIGl0cyBgLWJgIG9wdGlvbiB0byBjcmVhdGUKIGEgYnJhbmNoIGFuZCBjaGVjayBpdCBvdXQgd2l0aCBhIHNpbmdsZSBjb21tYW5kLgogCitUaGUgb3B0aW9ucyBgLS1jb250YWluc2AsIGAtLW1lcmdlZGAgYW5kIGAtLW5vLW1lcmdlZGAgc2VydmVzIHRocmVlIHJlbGF0ZWQKK2J1dCBkaWZmZXJlbnQgcHVycG9zZXM6CisKKy0gYC0tY29udGFpbnMgPGNvbW1pdD5gIGlzIHVzZWQgdG8gZmluZCBhbGwgYnJhbmNoZXMgd2hpY2ggd2lsbCBuZWVkCisgIHNwZWNpYWwgYXR0ZW50aW9uIGlmIDxjb21taXQ+IHdlcmUgdG8gYmUgcmViYXNlZCBvciBhbWVuZGVkLCBzaW5jZSB0aG9zZQorICBicmFuY2hlcyBjb250YWluIHRoZSBzcGVjaWZpZWQgPGNvbW1pdD4uCisKKy0gYC0tbWVyZ2VkYCBpcyB1c2VkIHRvIGZpbmQgYWxsIGJyYW5jaGVzIHdoaWNoIGNhbiBiZSBzYWZlbHkgZGVsZXRlZCwKKyAgc2luY2UgdGhvc2UgYnJhbmNoZXMgYXJlIGZ1bGx5IGNvbnRhaW5lZCBieSBIRUFELgorCistIGAtLW5vLW1lcmdlZGAgaXMgdXNlZCB0byBmaW5kIGJyYW5jaGVzIHdoaWNoIGFyZSBjYW5kaWRhdGVzIGZvciBtZXJnaW5nCisgIGludG8gSEVBRCwgc2luY2UgdGhvc2UgYnJhbmNoZXMgYXJlIG5vdCBmdWxseSBjb250YWluZWQgYnkgSEVBRC4KIAogQXV0aG9yCiAtLS0tLS0KLVdyaXR0ZW4gYnkgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPiBhbmQgSnVuaW8gQyBIYW1hbm8gPGp1bmtpb0Bjb3gubmV0PgorV3JpdHRlbiBieSBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAb3NkbC5vcmc+IGFuZCBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CiAKIERvY3VtZW50YXRpb24KIC0tLS0tLS0tLS0tLS0tCkBAIC0xODYsNCArMjEwLDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYnVuZGxlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWJ1bmRsZS50eHQKaW5kZXggMTgzMzBjZC4uZjZhMDYxMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtYnVuZGxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1idW5kbGUudHh0CkBAIC0xNzEsNCArMTcxLDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2F0LWZpbGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2F0LWZpbGUudHh0CmluZGV4IGRmNDJjYjEuLmY1ODAxM2MgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWNhdC1maWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jYXQtZmlsZS50eHQKQEAgLTgsMTMgKzgsMTggQEAKIAogU1lOT1BTSVMKIC0tLS0tLS0tCitbdmVyc2VdCiAnZ2l0LWNhdC1maWxlJyBbLXQgfCAtcyB8IC1lIHwgLXAgfCA8dHlwZT5dIDxvYmplY3Q+CisnZ2l0LWNhdC1maWxlJyBbLS1iYXRjaCB8IC0tYmF0Y2gtY2hlY2tdIDwgPGxpc3Qtb2Ytb2JqZWN0cz4KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCi1Qcm92aWRlcyBjb250ZW50IG9yIHR5cGUgb2Ygb2JqZWN0cyBpbiB0aGUgcmVwb3NpdG9yeS4gVGhlIHR5cGUKLWlzIHJlcXVpcmVkIHVubGVzcyAnLXQnIG9yICctcCcgaXMgdXNlZCB0byBmaW5kIHRoZSBvYmplY3QgdHlwZSwKLW9yICctcycgaXMgdXNlZCB0byBmaW5kIHRoZSBvYmplY3Qgc2l6ZS4KK0luIHRoZSBmaXJzdCBmb3JtLCBwcm92aWRlcyBjb250ZW50IG9yIHR5cGUgb2Ygb2JqZWN0cyBpbiB0aGUgcmVwb3NpdG9yeS4gVGhlCit0eXBlIGlzIHJlcXVpcmVkIHVubGVzcyAnLXQnIG9yICctcCcgaXMgdXNlZCB0byBmaW5kIHRoZSBvYmplY3QgdHlwZSwgb3IgJy1zJworaXMgdXNlZCB0byBmaW5kIHRoZSBvYmplY3Qgc2l6ZS4KKworSW4gdGhlIHNlY29uZCBmb3JtLCBhIGxpc3Qgb2Ygb2JqZWN0IChzZXBhcmF0ZWQgYnkgTEZzKSBpcyBwcm92aWRlZCBvbiBzdGRpbiwKK2FuZCB0aGUgU0hBMSwgdHlwZSwgYW5kIHNpemUgb2YgZWFjaCBvYmplY3QgaXMgcHJpbnRlZCBvbiBzdGRvdXQuCiAKIE9QVElPTlMKIC0tLS0tLS0KQEAgLTQ2LDYgKzUxLDE0IEBACiAJb3IgdG8gYXNrIGZvciBhICJibG9iIiB3aXRoIDxvYmplY3Q+IGJlaW5nIGEgdGFnIG9iamVjdCB0aGF0CiAJcG9pbnRzIGF0IGl0LgogCistLWJhdGNoOjoKKwlQcmludCB0aGUgU0hBMSwgdHlwZSwgc2l6ZSwgYW5kIGNvbnRlbnRzIG9mIGVhY2ggb2JqZWN0IHByb3ZpZGVkIG9uCisJc3RkaW4uIE1heSBub3QgYmUgY29tYmluZWQgd2l0aCBhbnkgb3RoZXIgb3B0aW9ucyBvciBhcmd1bWVudHMuCisKKy0tYmF0Y2gtY2hlY2s6OgorCVByaW50IHRoZSBTSEExLCB0eXBlLCBhbmQgc2l6ZSBvZiBlYWNoIG9iamVjdCBwcm92aWRlZCBvbiBzdGRpbi4gTWF5IG5vdCBiZQorCWNvbWJpbmVkIHdpdGggYW55IG90aGVyIG9wdGlvbnMgb3IgYXJndW1lbnRzLgorCiBPVVRQVVQKIC0tLS0tLQogSWYgJy10JyBpcyBzcGVjaWZpZWQsIG9uZSBvZiB0aGUgPHR5cGU+LgpAQCAtNTYsOSArNjksMzAgQEAKIAogSWYgJy1wJyBpcyBzcGVjaWZpZWQsIHRoZSBjb250ZW50cyBvZiA8b2JqZWN0PiBhcmUgcHJldHR5LXByaW50ZWQuCiAKLU90aGVyd2lzZSB0aGUgcmF3ICh0aG91Z2ggdW5jb21wcmVzc2VkKSBjb250ZW50cyBvZiB0aGUgPG9iamVjdD4gd2lsbAotYmUgcmV0dXJuZWQuCitJZiA8dHlwZT4gaXMgc3BlY2lmaWVkLCB0aGUgcmF3ICh0aG91Z2ggdW5jb21wcmVzc2VkKSBjb250ZW50cyBvZiB0aGUgPG9iamVjdD4KK3dpbGwgYmUgcmV0dXJuZWQuCiAKK0lmICctLWJhdGNoJyBpcyBzcGVjaWZpZWQsIG91dHB1dCBvZiB0aGUgZm9sbG93aW5nIGZvcm0gaXMgcHJpbnRlZCBmb3IgZWFjaAorb2JqZWN0IHNwZWNpZmllZCBvbiBzdGRpbjoKKworLS0tLS0tLS0tLS0tCis8c2hhMT4gU1AgPHR5cGU+IFNQIDxzaXplPiBMRgorPGNvbnRlbnRzPiBMRgorLS0tLS0tLS0tLS0tCisKK0lmICctLWJhdGNoLWNoZWNrJyBpcyBzcGVjaWZpZWQsIG91dHB1dCBvZiB0aGUgZm9sbG93aW5nIGZvcm0gaXMgcHJpbnRlZCBmb3IKK2VhY2ggb2JqZWN0IHNwZWNpZmllZCBmb24gc3RkaW46CisKKy0tLS0tLS0tLS0tLQorPHNoYTE+IFNQIDx0eXBlPiBTUCA8c2l6ZT4gTEYKKy0tLS0tLS0tLS0tLQorCitGb3IgYm90aCAnLS1iYXRjaCcgYW5kICctLWJhdGNoLWNoZWNrJywgb3V0cHV0IG9mIHRoZSBmb2xsb3dpbmcgZm9ybSBpcyBwcmludGVkCitmb3IgZWFjaCBvYmplY3Qgc3BlY2lmaWVkIG9uIHN0ZGluIHRoYXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHJlcG9zaXRvcnk6CisKKy0tLS0tLS0tLS0tLQorPG9iamVjdD4gU1AgbWlzc2luZyBMRgorLS0tLS0tLS0tLS0tCiAKIEF1dGhvcgogLS0tLS0tCkBAIC03MCw0ICsxMDQsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1hdHRyLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLWF0dHIudHh0CmluZGV4IDI5MGYxMGYuLmY4ZTFiZDUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLWF0dHIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLWF0dHIudHh0CkBAIC0zMCw3ICszMCw3IEBACiAKIEF1dGhvcgogLS0tLS0tCi1Xcml0dGVuIGJ5IEp1bmlvIEMgSGFtYW5vIDxqdW5raW9AY294Lm5ldD4KK1dyaXR0ZW4gYnkgSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgogCiBEb2N1bWVudGF0aW9uCiAtLS0tLS0tLS0tLS0tLQpAQCAtMzgsNCArMzgsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1yZWYtZm9ybWF0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLXJlZi1mb3JtYXQudHh0CmluZGV4IGE2NzY4ODAuLmM1NjBjMGEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLXJlZi1mb3JtYXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLXJlZi1mb3JtYXQudHh0CkBAIC01Miw0ICs1Miw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrb3V0LWluZGV4LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrb3V0LWluZGV4LnR4dAppbmRleCBjYmJiMGI1Li42NzYyMDNiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVja291dC1pbmRleC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2tvdXQtaW5kZXgudHh0CkBAIC0yMiwyMSArMjIsMjYgQEAKIAogT1BUSU9OUwogLS0tLS0tLQotLXV8LS1pbmRleDo6CistdTo6CistLWluZGV4OjoKIAl1cGRhdGUgc3RhdCBpbmZvcm1hdGlvbiBmb3IgdGhlIGNoZWNrZWQgb3V0IGVudHJpZXMgaW4KIAl0aGUgaW5kZXggZmlsZS4KIAotLXF8LS1xdWlldDo6CistcTo6CistLXF1aWV0OjoKIAliZSBxdWlldCBpZiBmaWxlcyBleGlzdCBvciBhcmUgbm90IGluIHRoZSBpbmRleAogCi0tZnwtLWZvcmNlOjoKKy1mOjoKKy0tZm9yY2U6OgogCWZvcmNlcyBvdmVyd3JpdGUgb2YgZXhpc3RpbmcgZmlsZXMKIAotLWF8LS1hbGw6OgorLWE6OgorLS1hbGw6OgogCWNoZWNrcyBvdXQgYWxsIGZpbGVzIGluIHRoZSBpbmRleC4gIENhbm5vdCBiZSB1c2VkCiAJdG9nZXRoZXIgd2l0aCBleHBsaWNpdCBmaWxlbmFtZXMuCiAKLS1ufC0tbm8tY3JlYXRlOjoKKy1uOjoKKy0tbm8tY3JlYXRlOjoKIAlEb24ndCBjaGVja291dCBuZXcgZmlsZXMsIG9ubHkgcmVmcmVzaCBmaWxlcyBhbHJlYWR5IGNoZWNrZWQKIAlvdXQuCiAKQEAgLTE4MSw0ICsxODYsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVja291dC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVja291dC50eHQKaW5kZXggZTExY2RkYi4uM2FkOTc2MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2tvdXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrb3V0LnR4dApAQCAtNDcsNiArNDcsNyBAQAogCWJ5IGxpbmtnaXQ6Z2l0LWNoZWNrLXJlZi1mb3JtYXRbMV0uICBTb21lIG9mIHRoZXNlIGNoZWNrcwogCW1heSByZXN0cmljdCB0aGUgY2hhcmFjdGVycyBhbGxvd2VkIGluIGEgYnJhbmNoIG5hbWUuCiAKKy10OjoKIC0tdHJhY2s6OgogCVdoZW4gY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCBzZXQgdXAgY29uZmlndXJhdGlvbiBzbyB0aGF0IGdpdC1wdWxsCiAJd2lsbCBhdXRvbWF0aWNhbGx5IHJldHJpZXZlIGRhdGEgZnJvbSB0aGUgc3RhcnQgcG9pbnQsIHdoaWNoIG11c3QgYmUKQEAgLTIxNSw0ICsyMTYsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVycnktcGljay50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVycnktcGljay50eHQKaW5kZXggZjBiZWI0MS4uNDRlNzc0OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY2hlcnJ5LXBpY2sudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZXJyeS1waWNrLnR4dApAQCAtNyw3ICs3LDcgQEAKIAogU1lOT1BTSVMKIC0tLS0tLS0tCi0nZ2l0LWNoZXJyeS1waWNrJyBbLS1lZGl0XSBbLW5dIFstbSBwYXJlbnQtbnVtYmVyXSBbLXhdIDxjb21taXQ+CisnZ2l0LWNoZXJyeS1waWNrJyBbLS1lZGl0XSBbLW5dIFstbSBwYXJlbnQtbnVtYmVyXSBbLXNdIFsteF0gPGNvbW1pdD4KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCkBAIC0yMiw3ICsyMiw4IEBACiAJRm9yIGEgbW9yZSBjb21wbGV0ZSBsaXN0IG9mIHdheXMgdG8gc3BlbGwgY29tbWl0cywgc2VlCiAJIlNQRUNJRllJTkcgUkVWSVNJT05TIiBzZWN0aW9uIGluIGxpbmtnaXQ6Z2l0LXJldi1wYXJzZVsxXS4KIAotLWV8LS1lZGl0OjoKKy1lOjoKKy0tZWRpdDo6CiAJV2l0aCB0aGlzIG9wdGlvbiwgYGdpdC1jaGVycnktcGlja2Agd2lsbCBsZXQgeW91IGVkaXQgdGhlIGNvbW1pdAogCW1lc3NhZ2UgcHJpb3IgdG8gY29tbWl0dGluZy4KIApAQCAtNDQsMzAgKzQ1LDM2IEBACiAJZGVzY3JpYmVkIGFib3ZlLCBhbmQgYC1yYCB3YXMgdG8gZGlzYWJsZSBpdC4gIE5vdyB0aGUKIAlkZWZhdWx0IGlzIG5vdCB0byBkbyBgLXhgIHNvIHRoaXMgb3B0aW9uIGlzIGEgbm8tb3AuCiAKLS1tIHBhcmVudC1udW1iZXJ8LS1tYWlubGluZSBwYXJlbnQtbnVtYmVyOjoKKy1tIHBhcmVudC1udW1iZXI6OgorLS1tYWlubGluZSBwYXJlbnQtbnVtYmVyOjoKIAlVc3VhbGx5IHlvdSBjYW5ub3QgY2hlcnJ5LXBpY2sgYSBtZXJnZSBiZWNhdXNlIHlvdSBkbyBub3Qga25vdyB3aGljaAogCXNpZGUgb2YgdGhlIG1lcmdlIHNob3VsZCBiZSBjb25zaWRlcmVkIHRoZSBtYWlubGluZS4gIFRoaXMKIAlvcHRpb24gc3BlY2lmaWVzIHRoZSBwYXJlbnQgbnVtYmVyIChzdGFydGluZyBmcm9tIDEpIG9mCiAJdGhlIG1haW5saW5lIGFuZCBhbGxvd3MgY2hlcnJ5LXBpY2sgdG8gcmVwbGF5IHRoZSBjaGFuZ2UKIAlyZWxhdGl2ZSB0byB0aGUgc3BlY2lmaWVkIHBhcmVudC4KIAotLW58LS1uby1jb21taXQ6OgorLW46OgorLS1uby1jb21taXQ6OgogCVVzdWFsbHkgdGhlIGNvbW1hbmQgYXV0b21hdGljYWxseSBjcmVhdGVzIGEgY29tbWl0IHdpdGgKIAlhIGNvbW1pdCBsb2cgbWVzc2FnZSBzdGF0aW5nIHdoaWNoIGNvbW1pdCB3YXMKIAljaGVycnktcGlja2VkLiAgVGhpcyBmbGFnIGFwcGxpZXMgdGhlIGNoYW5nZSBuZWNlc3NhcnkKLQl0byBjaGVycnktcGljayB0aGUgbmFtZWQgY29tbWl0IHRvIHlvdXIgd29ya2luZyB0cmVlLAotCWJ1dCBkb2VzIG5vdCBtYWtlIHRoZSBjb21taXQuICBJbiBhZGRpdGlvbiwgd2hlbiB0aGlzCi0Jb3B0aW9uIGlzIHVzZWQsIHlvdXIgd29ya2luZyB0cmVlIGRvZXMgbm90IGhhdmUgdG8gbWF0Y2gKKwl0byBjaGVycnktcGljayB0aGUgbmFtZWQgY29tbWl0IHRvIHlvdXIgd29ya2luZyB0cmVlCisJYW5kIHRoZSBpbmRleCwgYnV0IGRvZXMgbm90IG1ha2UgdGhlIGNvbW1pdC4gIEluIGFkZGl0aW9uLAorCXdoZW4gdGhpcyBvcHRpb24gaXMgdXNlZCwgeW91ciBpbmRleCBkb2VzIG5vdCBoYXZlIHRvIG1hdGNoCiAJdGhlIEhFQUQgY29tbWl0LiAgVGhlIGNoZXJyeS1waWNrIGlzIGRvbmUgYWdhaW5zdCB0aGUKLQliZWdpbm5pbmcgc3RhdGUgb2YgeW91ciB3b3JraW5nIHRyZWUuCisJYmVnaW5uaW5nIHN0YXRlIG9mIHlvdXIgaW5kZXguCiArCiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGNoZXJyeS1waWNraW5nIG1vcmUgdGhhbiBvbmUgY29tbWl0cycKLWVmZmVjdCB0byB5b3VyIHdvcmtpbmcgdHJlZSBpbiBhIHJvdy4KK2VmZmVjdCB0byB5b3VyIGluZGV4IGluIGEgcm93LgorCistczo6CistLXNpZ25vZmY6OgorCUFkZCBTaWduZWQtb2ZmLWJ5IGxpbmUgYXQgdGhlIGVuZCBvZiB0aGUgY29tbWl0IG1lc3NhZ2UuCiAKIAogQXV0aG9yCiAtLS0tLS0KLVdyaXR0ZW4gYnkgSnVuaW8gQyBIYW1hbm8gPGp1bmtpb0Bjb3gubmV0PgorV3JpdHRlbiBieSBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CiAKIERvY3VtZW50YXRpb24KIC0tLS0tLS0tLS0tLS0tCkBAIC03NSw0ICs4Miw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZXJyeS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVycnkudHh0CmluZGV4IGIwNDY4YWEuLjkxMjYwMTEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZXJyeS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlcnJ5LnR4dApAQCAtMTMsNiArMTMsOCBAQAogLS0tLS0tLS0tLS0KIFRoZSBjaGFuZ2VzZXQgKG9yICJkaWZmIikgb2YgZWFjaCBjb21taXQgYmV0d2VlbiB0aGUgZm9yay1wb2ludCBhbmQgPGhlYWQ+CiBpcyBjb21wYXJlZCBhZ2FpbnN0IGVhY2ggY29tbWl0IGJldHdlZW4gdGhlIGZvcmstcG9pbnQgYW5kIDx1cHN0cmVhbT4uCitUaGUgY29tbWl0cyBhcmUgY29tcGFyZWQgd2l0aCB0aGVpciAncGF0Y2ggaWQnLCBvYnRhaW5lZCBmcm9tIGxpbmtnaXQ6Z2l0LXBhdGNoLWlkWzFdCitwcm9ncmFtLgogCiBFdmVyeSBjb21taXQgdGhhdCBkb2Vzbid0IGV4aXN0IGluIHRoZSA8dXBzdHJlYW0+IGJyYW5jaAogaGFzIGl0cyBpZCAoc2hhMSkgcmVwb3J0ZWQsIHByZWZpeGVkIGJ5IGEgc3ltYm9sLiAgVGhlIG9uZXMgdGhhdCBoYXZlCkBAIC01Niw5ICs1OCwxMyBAQAogPGxpbWl0Pjo6CiAJRG8gbm90IHJlcG9ydCBjb21taXRzIHVwIHRvIChhbmQgaW5jbHVkaW5nKSBsaW1pdC4KIAorU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1wYXRjaC1pZFsxXQorCiBBdXRob3IKIC0tLS0tLQotV3JpdHRlbiBieSBKdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+CitXcml0dGVuIGJ5IEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KIAogRG9jdW1lbnRhdGlvbgogLS0tLS0tLS0tLS0tLS0KQEAgLTY2LDQgKzcyLDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2l0b29sLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNpdG9vbC50eHQKaW5kZXggYWNhMWQ3NS4uMDkxMDhkMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY2l0b29sLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaXRvb2wudHh0CkBAIC0yOSw0ICsyOSw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNsZWFuLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNsZWFuLnR4dAppbmRleCA1ZTlkYTAzLi4zN2E4MmVlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jbGVhbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY2xlYW4udHh0CkBAIC0zMCw5ICszMCwxMSBAQAogCWdpdC1jbGVhbiB3aWxsIHJlZnVzZSB0byBydW4gdW5sZXNzIGdpdmVuIC1mIG9yIC1uLgogCiAtbjo6CistLWRyeS1ydW46OgogCURvbid0IGFjdHVhbGx5IHJlbW92ZSBhbnl0aGluZywganVzdCBzaG93IHdoYXQgd291bGQgYmUgZG9uZS4KIAogLXE6OgorLS1xdWlldDo6CiAJQmUgcXVpZXQsIG9ubHkgcmVwb3J0IGVycm9ycywgYnV0IG5vdCB0aGUgZmlsZXMgdGhhdCBhcmUKIAlzdWNjZXNzZnVsbHkgcmVtb3ZlZC4KIApAQCAtNTQsNCArNTYsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jbG9uZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jbG9uZS50eHQKaW5kZXggOWI1NjQ0Mi4uNzk3M2U2YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY2xvbmUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNsb25lLnR4dApAQCAtMjA1LDQgKzIwNSw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNvbW1pdC10cmVlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbW1pdC10cmVlLnR4dAppbmRleCAxNzA4MDNhLi43MjhjMmZhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jb21taXQtdHJlZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY29tbWl0LXRyZWUudHh0CkBAIC04OCw3ICs4OCw3IEBACiAKIGluY2x1ZGU6OmkxOG4udHh0W10KIAotU2VlIEFsc28KK1NFRSBBTFNPCiAtLS0tLS0tLQogbGlua2dpdDpnaXQtd3JpdGUtdHJlZVsxXQogCkBAIC0xMDMsNCArMTAzLDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY29tbWl0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbW1pdC50eHQKaW5kZXggNGJiNTFjYy4uODYxY2U5MyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY29tbWl0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jb21taXQudHh0CkBAIC04LDkgKzgsOSBAQAogU1lOT1BTSVMKIC0tLS0tLS0tCiBbdmVyc2VdCi0nZ2l0LWNvbW1pdCcgWy1hIHwgLS1pbnRlcmFjdGl2ZV0gWy1zXSBbLXZdIFstdV0KLQkgICBbKC1jIHwgLUMpIDxjb21taXQ+IHwgLUYgPGZpbGU+IHwgLW0gPG1zZz4gfCAtLWFtZW5kXQotCSAgIFstLWFsbG93LWVtcHR5XSBbLS1uby12ZXJpZnldIFstZV0gWy0tYXV0aG9yIDxhdXRob3I+XQorJ2dpdC1jb21taXQnIFstYSB8IC0taW50ZXJhY3RpdmVdIFstc10gWy12XSBbLXVdIFstLWFtZW5kXQorCSAgIFsoLWMgfCAtQykgPGNvbW1pdD5dIFstRiA8ZmlsZT4gfCAtbSA8bXNnPl0KKwkgICBbLS1hbGxvdy1lbXB0eV0gWy0tbm8tdmVyaWZ5XSBbLWVdIFstLWF1dGhvcj08YXV0aG9yPl0KIAkgICBbLS1jbGVhbnVwPTxtb2RlPl0gWy0tXSBbWy1pIHwgLW8gXTxmaWxlPi4uLl0KIAogREVTQ1JJUFRJT04KQEAgLTUyLDQyICs1Miw1MiBAQAogCiBPUFRJT05TCiAtLS0tLS0tCi0tYXwtLWFsbDo6CistYTo6CistLWFsbDo6CiAJVGVsbCB0aGUgY29tbWFuZCB0byBhdXRvbWF0aWNhbGx5IHN0YWdlIGZpbGVzIHRoYXQgaGF2ZQogCWJlZW4gbW9kaWZpZWQgYW5kIGRlbGV0ZWQsIGJ1dCBuZXcgZmlsZXMgeW91IGhhdmUgbm90CiAJdG9sZCBnaXQgYWJvdXQgYXJlIG5vdCBhZmZlY3RlZC4KIAotLWMgb3IgLUMgPGNvbW1pdD46OgotCVRha2UgZXhpc3RpbmcgY29tbWl0IG9iamVjdCwgYW5kIHJldXNlIHRoZSBsb2cgbWVzc2FnZQorLUMgPGNvbW1pdD46OgorLS1yZXVzZS1tZXNzYWdlPTxjb21taXQ+OjoKKwlUYWtlIGFuIGV4aXN0aW5nIGNvbW1pdCBvYmplY3QsIGFuZCByZXVzZSB0aGUgbG9nIG1lc3NhZ2UKIAlhbmQgdGhlIGF1dGhvcnNoaXAgaW5mb3JtYXRpb24gKGluY2x1ZGluZyB0aGUgdGltZXN0YW1wKQotCXdoZW4gY3JlYXRpbmcgdGhlIGNvbW1pdC4gIFdpdGggJy1DJywgdGhlIGVkaXRvciBpcyBub3QKLQlpbnZva2VkOyB3aXRoICctYycgdGhlIHVzZXIgY2FuIGZ1cnRoZXIgZWRpdCB0aGUgY29tbWl0Ci0JbWVzc2FnZS4KKwl3aGVuIGNyZWF0aW5nIHRoZSBjb21taXQuCisKKy1jIDxjb21taXQ+OjoKKy0tcmVlZGl0LW1lc3NhZ2U9PGNvbW1pdD46OgorCUxpa2UgJy1DJywgYnV0IHdpdGggJy1jJyB0aGUgZWRpdG9yIGlzIGludm9rZWQsIHNvIHRoYXQKKwl0aGUgdXNlciBjYW4gZnVydGhlciBlZGl0IHRoZSBjb21taXQgbWVzc2FnZS4KIAogLUYgPGZpbGU+OjoKKy0tZmlsZT08ZmlsZT46OgogCVRha2UgdGhlIGNvbW1pdCBtZXNzYWdlIGZyb20gdGhlIGdpdmVuIGZpbGUuICBVc2UgJy0nIHRvCiAJcmVhZCB0aGUgbWVzc2FnZSBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dC4KIAotLS1hdXRob3IgPGF1dGhvcj46OgorLS1hdXRob3I9PGF1dGhvcj46OgogCU92ZXJyaWRlIHRoZSBhdXRob3IgbmFtZSB1c2VkIGluIHRoZSBjb21taXQuICBVc2UKIAlgQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT5gIGZvcm1hdC4KIAotLW0gPG1zZz58LS1tZXNzYWdlPTxtc2c+OjoKKy1tIDxtc2c+OjoKKy0tbWVzc2FnZT08bXNnPjo6CiAJVXNlIHRoZSBnaXZlbiA8bXNnPiBhcyB0aGUgY29tbWl0IG1lc3NhZ2UuCiAKLS10IDxmaWxlPnwtLXRlbXBsYXRlPTxmaWxlPjo6CistdCA8ZmlsZT46OgorLS10ZW1wbGF0ZT08ZmlsZT46OgogCVVzZSB0aGUgY29udGVudHMgb2YgdGhlIGdpdmVuIGZpbGUgYXMgdGhlIGluaXRpYWwgdmVyc2lvbgogCW9mIHRoZSBjb21taXQgbWVzc2FnZS4gVGhlIGVkaXRvciBpcyBpbnZva2VkIGFuZCB5b3UgY2FuCiAJbWFrZSBzdWJzZXF1ZW50IGNoYW5nZXMuIElmIGEgbWVzc2FnZSBpcyBzcGVjaWZpZWQgdXNpbmcKIAl0aGUgYC1tYCBvciBgLUZgIG9wdGlvbnMsIHRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QuIFRoaXMKIAlvdmVycmlkZXMgdGhlIGBjb21taXQudGVtcGxhdGVgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCiAKLS1zfC0tc2lnbm9mZjo6Cistczo6CistLXNpZ25vZmY6OgogCUFkZCBTaWduZWQtb2ZmLWJ5IGxpbmUgYXQgdGhlIGVuZCBvZiB0aGUgY29tbWl0IG1lc3NhZ2UuCiAKKy1uOjoKIC0tbm8tdmVyaWZ5OjoKIAlUaGlzIG9wdGlvbiBieXBhc3NlcyB0aGUgcHJlLWNvbW1pdCBhbmQgY29tbWl0LW1zZyBob29rcy4KLQlTZWUgYWxzbyBsaW5rOmhvb2tzLmh0bWxbaG9va3NdLgorCVNlZSBhbHNvIGxpbmtnaXQ6Z2l0aG9va3NbNV1baG9va3NdLgogCiAtLWFsbG93LWVtcHR5OjoKIAlVc3VhbGx5IHJlY29yZGluZyBhIGNvbW1pdCB0aGF0IGhhcyB0aGUgZXhhY3Qgc2FtZSB0cmVlIGFzIGl0cwpAQCAtMTA1LDE0ICsxMTUsMTQgQEAKIAknd2hpdGVzcGFjZScgcmVtb3ZlcyBqdXN0IGxlYWRpbmcvdHJhaWxpbmcgd2hpdGVzcGFjZSBsaW5lcwogCWFuZCAnc3RyaXAnIHJlbW92ZXMgYm90aCB3aGl0ZXNwYWNlIGFuZCBjb21tZW50YXJ5LgogCi0tZXwtLWVkaXQ6OgorLWU6OgorLS1lZGl0OjoKIAlUaGUgbWVzc2FnZSB0YWtlbiBmcm9tIGZpbGUgd2l0aCBgLUZgLCBjb21tYW5kIGxpbmUgd2l0aAogCWAtbWAsIGFuZCBmcm9tIGZpbGUgd2l0aCBgLUNgIGFyZSB1c3VhbGx5IHVzZWQgYXMgdGhlCiAJY29tbWl0IGxvZyBtZXNzYWdlIHVubW9kaWZpZWQuICBUaGlzIG9wdGlvbiBsZXRzIHlvdQogCWZ1cnRoZXIgZWRpdCB0aGUgbWVzc2FnZSB0YWtlbiBmcm9tIHRoZXNlIHNvdXJjZXMuCiAKIC0tYW1lbmQ6OgotCiAJVXNlZCB0byBhbWVuZCB0aGUgdGlwIG9mIHRoZSBjdXJyZW50IGJyYW5jaC4gUHJlcGFyZSB0aGUgdHJlZQogCW9iamVjdCB5b3Ugd291bGQgd2FudCB0byByZXBsYWNlIHRoZSBsYXRlc3QgY29tbWl0IGFzIHVzdWFsCiAJKHRoaXMgaW5jbHVkZXMgdGhlIHVzdWFsIC1pLy1vIGFuZCBleHBsaWNpdCBwYXRocyksIGFuZCB0aGUKQEAgLTEzMywxMyArMTQzLDE1IEBACiBidXQgY2FuIGJlIHVzZWQgdG8gYW1lbmQgYSBtZXJnZSBjb21taXQuCiAtLQogCi0taXwtLWluY2x1ZGU6OgorLWk6OgorLS1pbmNsdWRlOjoKIAlCZWZvcmUgbWFraW5nIGEgY29tbWl0IG91dCBvZiBzdGFnZWQgY29udGVudHMgc28gZmFyLAogCXN0YWdlIHRoZSBjb250ZW50cyBvZiBwYXRocyBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lCiAJYXMgd2VsbC4gIFRoaXMgaXMgdXN1YWxseSBub3Qgd2hhdCB5b3Ugd2FudCB1bmxlc3MgeW91CiAJYXJlIGNvbmNsdWRpbmcgYSBjb25mbGljdGVkIG1lcmdlLgogCi0tb3wtLW9ubHk6OgorLW86OgorLS1vbmx5OjoKIAlNYWtlIGEgY29tbWl0IG9ubHkgZnJvbSB0aGUgcGF0aHMgc3BlY2lmaWVkIG9uIHRoZQogCWNvbW1hbmQgbGluZSwgZGlzcmVnYXJkaW5nIGFueSBjb250ZW50cyB0aGF0IGhhdmUgYmVlbgogCXN0YWdlZCBzbyBmYXIuIFRoaXMgaXMgdGhlIGRlZmF1bHQgbW9kZSBvZiBvcGVyYXRpb24gb2YKQEAgLTE1MCwyMCArMTYyLDIzIEBACiAJdGhlIGxhc3QgY29tbWl0IHdpdGhvdXQgY29tbWl0dGluZyBjaGFuZ2VzIHRoYXQgaGF2ZQogCWFscmVhZHkgYmVlbiBzdGFnZWQuCiAKLS11fC0tdW50cmFja2VkLWZpbGVzOjoKKy11OjoKKy0tdW50cmFja2VkLWZpbGVzOjoKIAlTaG93IGFsbCB1bnRyYWNrZWQgZmlsZXMsIGFsc28gdGhvc2UgaW4gdW5pbnRlcmVzdGluZwogCWRpcmVjdG9yaWVzLCBpbiB0aGUgIlVudHJhY2tlZCBmaWxlczoiIHNlY3Rpb24gb2YgY29tbWl0CiAJbWVzc2FnZSB0ZW1wbGF0ZS4gIFdpdGhvdXQgdGhpcyBvcHRpb24gb25seSBpdHMgbmFtZSBhbmQKIAlhIHRyYWlsaW5nIHNsYXNoIGFyZSBkaXNwbGF5ZWQgZm9yIGVhY2ggdW50cmFja2VkCiAJZGlyZWN0b3J5LgogCi0tdnwtLXZlcmJvc2U6OgorLXY6OgorLS12ZXJib3NlOjoKIAlTaG93IHVuaWZpZWQgZGlmZiBiZXR3ZWVuIHRoZSBIRUFEIGNvbW1pdCBhbmQgd2hhdAogCXdvdWxkIGJlIGNvbW1pdHRlZCBhdCB0aGUgYm90dG9tIG9mIHRoZSBjb21taXQgbWVzc2FnZQogCXRlbXBsYXRlLiAgTm90ZSB0aGF0IHRoaXMgZGlmZiBvdXRwdXQgZG9lc24ndCBoYXZlIGl0cwogCWxpbmVzIHByZWZpeGVkIHdpdGggJyMnLgogCi0tcXwtLXF1aWV0OjoKKy1xOjoKKy0tcXVpZXQ6OgogCVN1cHByZXNzIGNvbW1pdCBzdW1tYXJ5IG1lc3NhZ2UuCiAKIFwtLTo6CkBAIC0yOTIsNyArMzA3LDcgQEAKIEhPT0tTCiAtLS0tLQogVGhpcyBjb21tYW5kIGNhbiBydW4gYGNvbW1pdC1tc2dgLCBgcHJlcGFyZS1jb21taXQtbXNnYCwgYHByZS1jb21taXRgLAotYW5kIGBwb3N0LWNvbW1pdGAgaG9va3MuICBTZWUgbGluazpob29rcy5odG1sW2hvb2tzXSBmb3IgbW9yZQorYW5kIGBwb3N0LWNvbW1pdGAgaG9va3MuICBTZWUgbGlua2dpdDpnaXRob29rc1s1XVtob29rc10gZm9yIG1vcmUKIGluZm9ybWF0aW9uLgogCiAKQEAgLTMwNyw5ICszMjIsOSBAQAogQXV0aG9yCiAtLS0tLS0KIFdyaXR0ZW4gYnkgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPiBhbmQKLUp1bmlvIEMgSGFtYW5vIDxqdW5raW9AY294Lm5ldD4KK0p1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KIAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jb25maWcudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY29uZmlnLnR4dAppbmRleCBmYTE2MTcxLi5iMGYyMGUyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jb25maWcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbmZpZy50eHQKQEAgLTEwMSw3ICsxMDEsOCBAQAogKwogU2VlIGFsc28gPDxGSUxFUz4+LgogCi0tZiBjb25maWctZmlsZSwgLS1maWxlIGNvbmZpZy1maWxlOjoKKy1mIGNvbmZpZy1maWxlOjoKKy0tZmlsZSBjb25maWctZmlsZTo6CiAJVXNlIHRoZSBnaXZlbiBjb25maWcgZmlsZSBpbnN0ZWFkIG9mIHRoZSBvbmUgc3BlY2lmaWVkIGJ5IEdJVF9DT05GSUcuCiAKIC0tcmVtb3ZlLXNlY3Rpb246OgpAQCAtMTE2LDcgKzExNyw4IEBACiAtLXVuc2V0LWFsbDo6CiAJUmVtb3ZlIGFsbCBsaW5lcyBtYXRjaGluZyB0aGUga2V5IGZyb20gY29uZmlnIGZpbGUuCiAKLS1sLCAtLWxpc3Q6OgorLWw6OgorLS1saXN0OjoKIAlMaXN0IGFsbCB2YXJpYWJsZXMgc2V0IGluIGNvbmZpZyBmaWxlLgogCiAtLWJvb2w6OgpAQCAtMTI4LDcgKzEzMCw4IEBACiAJaW4gdGhlIGNvbmZpZyBmaWxlIHdpbGwgY2F1c2UgdGhlIHZhbHVlIHRvIGJlIG11bHRpcGxpZWQKIAlieSAxMDI0LCAxMDQ4NTc2LCBvciAxMDczNzQxODI0IHByaW9yIHRvIG91dHB1dC4KIAotLXosIC0tbnVsbDo6Cistejo6CistLW51bGw6OgogCUZvciBhbGwgb3B0aW9ucyB0aGF0IG91dHB1dCB2YWx1ZXMgYW5kL29yIGtleXMsIGFsd2F5cwogCWVuZCB2YWx1ZXMgd2l0aCB0aGUgbnVsbCBjaGFyYWN0ZXIgKGluc3RlYWQgb2YgYQogCW5ld2xpbmUpLiBVc2UgbmV3bGluZSBpbnN0ZWFkIGFzIGEgZGVsaW1pdGVyIGJldHdlZW4KQEAgLTE0NCw2ICsxNDcsOCBAQAogCSJhdXRvIi4gIElmIGBzdGRvdXQtaXMtdHR5YCBpcyBtaXNzaW5nLCB0aGVuIGNoZWNrcyB0aGUgc3RhbmRhcmQKIAlvdXRwdXQgb2YgdGhlIGNvbW1hbmQgaXRzZWxmLCBhbmQgZXhpdHMgd2l0aCBzdGF0dXMgMCBpZiBjb2xvcgogCWlzIHRvIGJlIHVzZWQsIG9yIGV4aXRzIHdpdGggc3RhdHVzIDEgb3RoZXJ3aXNlLgorCVdoZW4gdGhlIGNvbG9yIHNldHRpbmcgZm9yIGBuYW1lYCBpcyB1bmRlZmluZWQsIHRoZSBjb21tYW5kIHVzZXMKKwlgY29sb3IudWlgIGFzIGZhbGxiYWNrLgogCiAtLWdldC1jb2xvciBuYW1lIGRlZmF1bHQ6OgogCkBAIC0yMjYsNyArMjMxLDcgQEAKIAogCTsgT3VyIGRpZmYgYWxnb3JpdGhtCiAJW2RpZmZdCi0JCWV4dGVybmFsID0gIi91c3IvbG9jYWwvYmluL2dudS1kaWZmIC11IgorCQlleHRlcm5hbCA9IC91c3IvbG9jYWwvYmluL2RpZmYtd3JhcHBlcgogCQlyZW5hbWVzID0gdHJ1ZQogCiAJOyBQcm94eSBzZXR0aW5ncwpAQCAtMzMyLDQgKzMzNyw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNvdW50LW9iamVjdHMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY291bnQtb2JqZWN0cy50eHQKaW5kZXggN2ZiMDhlOS4uNGE5ZGNkNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY291bnQtb2JqZWN0cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY291bnQtb2JqZWN0cy50eHQKQEAgLTE4LDYgKzE4LDcgQEAKIE9QVElPTlMKIC0tLS0tLS0KIC12OjoKKy0tdmVyYm9zZTo6CiAJSW4gYWRkaXRpb24gdG8gdGhlIG51bWJlciBvZiBsb29zZSBvYmplY3RzIGFuZCBkaXNrCiAJc3BhY2UgY29uc3VtZWQsIGl0IHJlcG9ydHMgdGhlIG51bWJlciBvZiBpbi1wYWNrCiAJb2JqZWN0cywgbnVtYmVyIG9mIHBhY2tzLCBhbmQgbnVtYmVyIG9mIG9iamVjdHMgdGhhdCBjYW4gYmUKQEAgLTI2LDcgKzI3LDcgQEAKIAogQXV0aG9yCiAtLS0tLS0KLVdyaXR0ZW4gYnkgSnVuaW8gQyBIYW1hbm8gPGp1bmtpb0Bjb3gubmV0PgorV3JpdHRlbiBieSBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CiAKIERvY3VtZW50YXRpb24KIC0tLS0tLS0tLS0tLS0tCkBAIC0zNCw0ICszNSw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWN2c2V4cG9ydGNvbW1pdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jdnNleHBvcnRjb21taXQudHh0CmluZGV4IDlhNDdiNGMuLjVmYTkxZTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWN2c2V4cG9ydGNvbW1pdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY3ZzZXhwb3J0Y29tbWl0LnR4dApAQCAtOCw3ICs4LDcgQEAKIAogU1lOT1BTSVMKIC0tLS0tLS0tCi0nZ2l0LWN2c2V4cG9ydGNvbW1pdCcgWy1oXSBbLXVdIFstdl0gWy1jXSBbLVBdIFstcF0gWy1hXSBbLWQgY3Zzcm9vdF0gWy13IGN2c3dvcmtkaXJdIFstZl0gWy1tIG1zZ3ByZWZpeF0gW1BBUkVOVENPTU1JVF0gQ09NTUlUSUQKKydnaXQtY3ZzZXhwb3J0Y29tbWl0JyBbLWhdIFstdV0gWy12XSBbLWNdIFstUF0gWy1wXSBbLWFdIFstZCBjdnNyb290XSBbLXcgY3Zzd29ya2Rpcl0gWy1XXSBbLWZdIFstbSBtc2dwcmVmaXhdIFtQQVJFTlRDT01NSVRdIENPTU1JVElECiAKIAogREVTQ1JJUFRJT04KQEAgLTY1LDExICs2NSwyMiBAQAogLXc6OgogCVNwZWNpZnkgdGhlIGxvY2F0aW9uIG9mIHRoZSBDVlMgY2hlY2tvdXQgdG8gdXNlIGZvciB0aGUgZXhwb3J0LiBUaGlzCiAJb3B0aW9uIGRvZXMgbm90IHJlcXVpcmUgR0lUX0RJUiB0byBiZSBzZXQgYmVmb3JlIGV4ZWN1dGlvbiBpZiB0aGUKLQljdXJyZW50IGRpcmVjdG9yeSBpcyB3aXRoaW4gYSBnaXQgcmVwb3NpdG9yeS4KKwljdXJyZW50IGRpcmVjdG9yeSBpcyB3aXRoaW4gYSBnaXQgcmVwb3NpdG9yeS4gIFRoZSBkZWZhdWx0IGlzIHRoZQorCXZhbHVlIG9mICdjdnNleHBvcnRjb21taXQuY3ZzZGlyJy4KKworLVc6OgorCVRlbGwgY3ZzZXhwb3J0Y29tbWl0IHRoYXQgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaXMgbm90IG9ubHkKKwlhIEdpdCBjaGVja291dCwgYnV0IGFsc28gdGhlIENWUyBjaGVja291dC4gIFRoZXJlZm9yZSwgR2l0IHdpbGwKKwlyZXNldCB0aGUgd29ya2luZyBkaXJlY3RvcnkgdG8gdGhlIHBhcmVudCBjb21taXQgYmVmb3JlIHByb2NlZWRpbmcuCiAKIC12OjoKIAlWZXJib3NlLgogCitDT05GSUdVUkFUSU9OCistLS0tLS0tLS0tLS0tCitjdnNleHBvcnRjb21taXQuY3ZzZGlyOjoKKwlUaGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgQ1ZTIGNoZWNrb3V0IHRvIHVzZSBmb3IgdGhlIGV4cG9ydC4KKwogRVhBTVBMRVMKIC0tLS0tLS0tCiAKQEAgLTEwNiw0ICsxMTcsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jdnNpbXBvcnQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY3ZzaW1wb3J0LnR4dAppbmRleCA1OGVlZmQ0Li45M2I3ZDJkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jdnNpbXBvcnQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWN2c2ltcG9ydC50eHQKQEAgLTMxLDYgKzMxLDEyIEBACiBhbnkgQ1ZTIGJyYW5jaGVzLCB5b3Vyc2VsZi4gIEl0IGlzIGFkdmlzYWJsZSB0byBzcGVjaWZ5IGEgbmFtZWQgcmVtb3RlIHZpYQogLXIgdG8gc2VwYXJhdGUgYW5kIHByb3RlY3QgdGhlIGluY29taW5nIGJyYW5jaGVzLgogCitJZiB5b3UgaW50ZW5kIHRvIHNldCB1cCBhIHNoYXJlZCBwdWJsaWMgcmVwb3NpdG9yeSB0aGF0IGFsbCBkZXZlbG9wZXJzIGNhbgorcmVhZC93cml0ZSwgb3IgaWYgeW91IHdhbnQgdG8gdXNlIGxpbmtnaXQ6Z2l0LWN2c3NlcnZlclsxXSwgdGhlbiB5b3UKK3Byb2JhYmx5IHdhbnQgdG8gbWFrZSBhIGJhcmUgY2xvbmUgb2YgdGhlIGltcG9ydGVkIHJlcG9zaXRvcnksCithbmQgdXNlIHRoZSBjbG9uZSBhcyB0aGUgc2hhcmVkIHJlcG9zaXRvcnkuCitTZWUgbGlua2dpdDpnaXRjdnMtbWlncmF0aW9uWzddLgorCiAKIE9QVElPTlMKIC0tLS0tLS0KQEAgLTE3MCw0ICsxNzYsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jdnNzZXJ2ZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY3Zzc2VydmVyLnR4dAppbmRleCBiMTEwNjcxLi4xOWRhODdlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jdnNzZXJ2ZXIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWN2c3NlcnZlci50eHQKQEAgLTQxLDEwICs0MSwxMyBAQAogRG9uJ3QgY2hlY2sgZm9yIGBnaXRjdnMuZW5hYmxlZGAgaW4gY29uZmlnLiBZb3UgYWxzbyBoYXZlIHRvIHNwZWNpZnkgYSBsaXN0CiBvZiBhbGxvd2VkIGRpcmVjdG9yaWVzIChzZWUgYmVsb3cpIGlmIHlvdSB3YW50IHRvIHVzZSB0aGlzIG9wdGlvbi4KIAotLS12ZXJzaW9uLCAtVjo6CistVjo6CistLXZlcnNpb246OgogUHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAogCi0tLWhlbHAsIC1oLCAtSDo6CistaDo6CistSDo6CistLWhlbHA6OgogUHJpbnQgdXNhZ2UgaW5mb3JtYXRpb24gYW5kIGV4aXQKIAogPGRpcmVjdG9yeT46OgpAQCAtMTMwLDYgKzEzMyw5IEBACiA8PGRiYmFja2VuZCxEYXRhYmFzZSBCYWNrZW5kPj4uIElmIHlvdSB3YW50IHRvIG9mZmVyIHdyaXRlIGFjY2VzcyBvdmVyCiBTU0gsIHRoZSB1c2VycyBvZiBjb3Vyc2UgYWxzbyBuZWVkIHdyaXRlIGFjY2VzcyB0byB0aGUgZ2l0IHJlcG9zaXRvcnkgaXRzZWxmLgogCitZb3UgYWxzbyBuZWVkIHRvIGVuc3VyZSB0aGF0IGVhY2ggcmVwb3NpdG9yeSBpcyAiYmFyZSIgKHdpdGhvdXQgYSBnaXQgaW5kZXgKK2ZpbGUpIGZvciBgY3ZzIGNvbW1pdGAgdG8gd29yay4gU2VlIGxpbmtnaXQ6Z2l0Y3ZzLW1pZ3JhdGlvbls3XS4KKwogW1tjb25maWdhY2Nlc3NtZXRob2RdXQogQWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGNhbiBhbHNvIGJlIG92ZXJyaWRkZW4gZm9yIGEgc3BlY2lmaWMgbWV0aG9kIG9mCiBhY2Nlc3MuIFZhbGlkIG1ldGhvZCBuYW1lcyBhcmUgImV4dCIgKGZvciBTU0ggYWNjZXNzKSBhbmQgInBzZXJ2ZXIiLiBUaGUKQEAgLTMwMSwxMSArMzA3LDMzIEBACiBMZWdhY3kgbW9uaXRvcmluZyBvcGVyYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIChlZGl0LCB3YXRjaCBhbmQgcmVsYXRlZCkuCiBFeHBvcnRzIGFuZCB0YWdnaW5nICh0YWdzIGFuZCBicmFuY2hlcykgYXJlIG5vdCBzdXBwb3J0ZWQgYXQgdGhpcyBzdGFnZS4KIAotVGhlIHNlcnZlciBzaG91bGQgc2V0IHRoZSAnLWsnIG1vZGUgdG8gYmluYXJ5IHdoZW4gcmVsZXZhbnQsIGhvd2V2ZXIsCi10aGlzIGlzIG5vdCByZWFsbHkgaW1wbGVtZW50ZWQgeWV0LiBGb3Igbm93LCB5b3UgY2FuIGZvcmNlIHRoZSBzZXJ2ZXIKLXRvIHNldCAnLWtiJyBmb3IgYWxsIGZpbGVzIGJ5IHNldHRpbmcgdGhlIGBnaXRjdnMuYWxsYmluYXJ5YCBjb25maWcKLXZhcmlhYmxlLiBJbiBwcm9wZXIgR0lUIHRyYWRpdGlvbiwgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlcyBhcmUKLWFsd2F5cyByZXNwZWN0ZWQuIE5vIGtleXdvcmQgZXhwYW5zaW9uIG9yIG5ld2xpbmUgbXVuZ2luZyBpcyBzdXBwb3J0ZWQuCitDUkxGIExpbmUgRW5kaW5nIENvbnZlcnNpb25zCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0J5IGRlZmF1bHQgdGhlIHNlcnZlciBsZWF2ZXMgdGhlICctaycgbW9kZSBibGFuayBmb3IgYWxsIGZpbGVzLAord2hpY2ggY2F1c2VzIHRoZSBjdnMgY2xpZW50IHRvIHRyZWF0IHRoZW0gYXMgYSB0ZXh0IGZpbGVzLCBzdWJqZWN0Cit0byBjcmxmIGNvbnZlcnNpb24gb24gc29tZSBwbGF0Zm9ybXMuCisKK1lvdSBjYW4gbWFrZSB0aGUgc2VydmVyIHVzZSBgY3JsZmAgYXR0cmlidXRlcyB0byBzZXQgdGhlICctaycgbW9kZXMKK2ZvciBmaWxlcyBieSBzZXR0aW5nIHRoZSBgZ2l0Y3ZzLnVzZWNybGZhdHRyYCBjb25maWcgdmFyaWFibGUuCitJbiB0aGlzIGNhc2UsIGlmIGBjcmxmYCBpcyBleHBsaWNpdGx5IHVuc2V0ICgnLWNybGYnKSwgdGhlbiB0aGUKK3NlcnZlciB3aWxsIHNldCAnLWtiJyBtb2RlIGZvciBiaW5hcnkgZmlsZXMuIElmIGBjcmxmYCBpcyBzZXQsCit0aGVuIHRoZSAnLWsnIG1vZGUgd2lsbCBleHBsaWNpdGx5IGJlIGxlZnQgYmxhbmsuICBTZWUKK2Fsc28gbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBgY3JsZmAKK2F0dHJpYnV0ZS4KKworQWx0ZXJuYXRpdmVseSwgaWYgYGdpdGN2cy51c2VjcmxmYXR0cmAgY29uZmlnIGlzIG5vdCBlbmFibGVkCitvciBpZiB0aGUgYGNybGZgIGF0dHJpYnV0ZSBpcyB1bnNwZWNpZmllZCBmb3IgYSBmaWxlbmFtZSwgdGhlbgordGhlIHNlcnZlciB1c2VzIHRoZSBgZ2l0Y3ZzLmFsbGJpbmFyeWAgY29uZmlnIGZvciB0aGUgZGVmYXVsdCBzZXR0aW5nLgorSWYgYGdpdGN2cy5hbGxiaW5hcnlgIGlzIHNldCwgdGhlbiBmaWxlIG5vdCBvdGhlcndpc2UKK3NwZWNpZmllZCB3aWxsIGRlZmF1bHQgdG8gJy1rYicgbW9kZS4gT3RoZXJ3aXNlIHRoZSAnLWsnIG1vZGUKK2lzIGxlZnQgYmxhbmsuIEJ1dCBpZiBgZ2l0Y3ZzLmFsbGJpbmFyeWAgaXMgc2V0IHRvICJndWVzcyIsIHRoZW4KK3RoZSBjb3JyZWN0ICctaycgbW9kZSB3aWxsIGJlIGd1ZXNzZWQgYmFzZWQgb24gdGhlIGNvbnRlbnRzIG9mCit0aGUgZmlsZS4KKworRm9yIGJlc3QgY29uc2lzdGVuY3kgd2l0aCBjdnMsIGl0IGlzIHByb2JhYmx5IGJlc3QgdG8gb3ZlcnJpZGUgdGhlCitkZWZhdWx0cyBieSBzZXR0aW5nIGBnaXRjdnMudXNlY3JsZmF0dHJgIHRvIHRydWUsCithbmQgYGdpdGN2cy5hbGxiaW5hcnlgIHRvICJndWVzcyIuCiAKIERlcGVuZGVuY2llcwogLS0tLS0tLS0tLS0tCkBAIC0zMzAsNCArMzU4LDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZGFlbW9uLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWRhZW1vbi50eHQKaW5kZXggY2YyNjFkZC4uMzQ0ZjI0ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtZGFlbW9uLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1kYWVtb24udHh0CkBAIC0xMDMsNyArMTAzLDggQEAKIAlMb2cgdG8gc3lzbG9nIGluc3RlYWQgb2Ygc3RkZXJyLiBOb3RlIHRoYXQgdGhpcyBvcHRpb24gZG9lcyBub3QgaW1wbHkKIAktLXZlcmJvc2UsIHRodXMgYnkgZGVmYXVsdCBvbmx5IGVycm9yIGNvbmRpdGlvbnMgd2lsbCBiZSBsb2dnZWQuCiAKLS0tdXNlci1wYXRoLCAtLXVzZXItcGF0aD1wYXRoOjoKKy0tdXNlci1wYXRoOjoKKy0tdXNlci1wYXRoPXBhdGg6OgogCUFsbG93IH51c2VyIG5vdGF0aW9uIHRvIGJlIHVzZWQgaW4gcmVxdWVzdHMuICBXaGVuCiAJc3BlY2lmaWVkIHdpdGggbm8gcGFyYW1ldGVyLCByZXF1ZXN0cyB0bwogCWdpdDovL2hvc3QvfmFsaWNlL2ZvbyBpcyB0YWtlbiBhcyBhIHJlcXVlc3QgdG8gYWNjZXNzCkBAIC0xMjcsNyArMTI4LDggQEAKIAlTYXZlIHRoZSBwcm9jZXNzIGlkIGluICdmaWxlJy4gIElnbm9yZWQgd2hlbiB0aGUgZGFlbW9uCiAJaXMgcnVuIHVuZGVyIGAtLWluZXRkYC4KIAotLS11c2VyPXVzZXIsIC0tZ3JvdXA9Z3JvdXA6OgorLS11c2VyPXVzZXI6OgorLS1ncm91cD1ncm91cDo6CiAJQ2hhbmdlIGRhZW1vbidzIHVpZCBhbmQgZ2lkIGJlZm9yZSBlbnRlcmluZyB0aGUgc2VydmljZSBsb29wLgogCVdoZW4gb25seSBgLS11c2VyYCBpcyBnaXZlbiB3aXRob3V0IGAtLWdyb3VwYCwgdGhlCiAJcHJpbWFyeSBncm91cCBJRCBmb3IgdGhlIHVzZXIgaXMgdXNlZC4gIFRoZSB2YWx1ZXMgb2YKQEAgLTEzOCwxNCArMTQwLDE2IEBACiB0aGUgZmFjaWxpdHkgb2YgaW5ldCBkYWVtb24gdG8gYWNoaWV2ZSB0aGUgc2FtZSBiZWZvcmUgc3Bhd25pbmcKIGBnaXQtZGFlbW9uYCBpZiBuZWVkZWQuCiAKLS0tZW5hYmxlPXNlcnZpY2UsIC0tZGlzYWJsZT1zZXJ2aWNlOjoKKy0tZW5hYmxlPXNlcnZpY2U6OgorLS1kaXNhYmxlPXNlcnZpY2U6OgogCUVuYWJsZS9kaXNhYmxlIHRoZSBzZXJ2aWNlIHNpdGUtd2lkZSBwZXIgZGVmYXVsdC4gIE5vdGUKIAl0aGF0IGEgc2VydmljZSBkaXNhYmxlZCBzaXRlLXdpZGUgY2FuIHN0aWxsIGJlIGVuYWJsZWQKIAlwZXIgcmVwb3NpdG9yeSBpZiBpdCBpcyBtYXJrZWQgb3ZlcnJpZGFibGUgYW5kIHRoZQogCXJlcG9zaXRvcnkgZW5hYmxlcyB0aGUgc2VydmljZSB3aXRoIGFuIGNvbmZpZ3VyYXRpb24KIAlpdGVtLgogCi0tLWFsbG93LW92ZXJyaWRlPXNlcnZpY2UsIC0tZm9yYmlkLW92ZXJyaWRlPXNlcnZpY2U6OgorLS1hbGxvdy1vdmVycmlkZT1zZXJ2aWNlOjoKKy0tZm9yYmlkLW92ZXJyaWRlPXNlcnZpY2U6OgogCUFsbG93L2ZvcmJpZCBvdmVycmlkaW5nIHRoZSBzaXRlLXdpZGUgZGVmYXVsdCB3aXRoIHBlcgogCXJlcG9zaXRvcnkgY29uZmlndXJhdGlvbi4gIEJ5IGRlZmF1bHQsIGFsbCB0aGUgc2VydmljZXMKIAlhcmUgb3ZlcnJpZGFibGUuCkBAIC0yNzIsNCArMjc2LDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZGVzY3JpYmUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZGVzY3JpYmUudHh0CmluZGV4IDY5ZTFhYjcuLjQ0YWFhNDAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWRlc2NyaWJlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1kZXNjcmliZS50eHQKQEAgLTcwLDYgKzcwLDkgQEAKIAlPbmx5IGNvbnNpZGVyIHRhZ3MgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdHRlcm4gKGNhbiBiZSB1c2VkIHRvIGF2b2lkCiAJbGVha2luZyBwcml2YXRlIHRhZ3MgbWFkZSBmcm9tIHRoZSByZXBvc2l0b3J5KS4KIAorLS1hbHdheXM6OgorCVNob3cgdW5pcXVlbHkgYWJicmV2aWF0ZWQgY29tbWl0IG9iamVjdCBhcyBmYWxsYmFjay4KKwogRVhBTVBMRVMKIC0tLS0tLS0tCiAKQEAgLTEzMyw3ICsxMzYsNyBAQAogQXV0aG9yCiAtLS0tLS0KIFdyaXR0ZW4gYnkgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPiwgYnV0IHNvbWV3aGF0Ci1idXRjaGVyZWQgYnkgSnVuaW8gQyBIYW1hbm8gPGp1bmtpb0Bjb3gubmV0Pi4gIExhdGVyIHNpZ25pZmljYW50bHkKK2J1dGNoZXJlZCBieSBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+LiAgTGF0ZXIgc2lnbmlmaWNhbnRseQogdXBkYXRlZCBieSBTaGF3biBQZWFyY2UgPHNwZWFyY2VAc3BlYXJjZS5vcmc+LgogCiBEb2N1bWVudGF0aW9uCkBAIC0xNDIsNCArMTQ1LDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi1maWxlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLWZpbGVzLnR4dAppbmRleCA2ZDJlYTE2Li44YTY0ODY5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLWZpbGVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLWZpbGVzLnR4dApAQCAtOCw3ICs4LDcgQEAKIAogU1lOT1BTSVMKIC0tLS0tLS0tCi0nZ2l0LWRpZmYtZmlsZXMnIFstcV0gWy0wfC0xfC0yfC0zfC1jfC0tY2N8LS1uby1pbmRleF0gWzxjb21tb24gZGlmZiBvcHRpb25zPl0gWzxwYXRoPi4uLl0KKydnaXQtZGlmZi1maWxlcycgWy1xXSBbLTB8LTF8LTJ8LTN8LWN8LS1jY10gWzxjb21tb24gZGlmZiBvcHRpb25zPl0gWzxwYXRoPi4uLl0KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCkBAIC0zMCwxNSArMzAsMTMgQEAKIGNsZWFubHkgcmVzb2x2ZWQgcGF0aHMuICBUaGUgb3B0aW9uIC0wIGNhbiBiZSBnaXZlbiB0bwogb21pdCBkaWZmIG91dHB1dCBmb3IgdW5tZXJnZWQgZW50cmllcyBhbmQganVzdCBzaG93ICJVbm1lcmdlZCIuCiAKLS1jLC0tY2M6OgorLWM6OgorLS1jYzo6CiAJVGhpcyBjb21wYXJlcyBzdGFnZSAyIChvdXIgYnJhbmNoKSwgc3RhZ2UgMyAodGhlaXIKIAlicmFuY2gpIGFuZCB0aGUgd29ya2luZyB0cmVlIGZpbGUgYW5kIG91dHB1dHMgYSBjb21iaW5lZAogCWRpZmYsIHNpbWlsYXIgdG8gdGhlIHdheSAnZGlmZi10cmVlJyBzaG93cyBhIG1lcmdlCiAJY29tbWl0IHdpdGggdGhlc2UgZmxhZ3MuCiAKLS0tbm8taW5kZXg6OgotCUNvbXBhcmUgdGhlIHR3byBnaXZlbiBmaWxlcyAvIGRpcmVjdG9yaWVzLgotCiAtcTo6CiAJUmVtYWluIHNpbGVudCBldmVuIG9uIG5vbmV4aXN0ZW50IGZpbGVzCiAKQEAgLTU3LDQgKzU1LDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi1pbmRleC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLWluZGV4LnR4dAppbmRleCBlODY3Nzc4Li5mNmU4NDRmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLWluZGV4LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLWluZGV4LnR4dApAQCAtMTI5LDQgKzEyOSw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtdHJlZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLXRyZWUudHh0CmluZGV4IDU4ZDAyYzYuLjVkMjM5ODUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtdHJlZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi10cmVlLnR4dApAQCAtNDksMTMgKzQ5LDEzIEBACiAtLXN0ZGluOjoKIAlXaGVuICctLXN0ZGluJyBpcyBzcGVjaWZpZWQsIHRoZSBjb21tYW5kIGRvZXMgbm90IHRha2UKIAk8dHJlZS1pc2g+IGFyZ3VtZW50cyBmcm9tIHRoZSBjb21tYW5kIGxpbmUuICBJbnN0ZWFkLCBpdAotCXJlYWRzIGVpdGhlciBvbmUgPGNvbW1pdD4gb3IgYSBwYWlyIG9mIDx0cmVlLWlzaD4KKwlyZWFkcyBlaXRoZXIgb25lIDxjb21taXQ+IG9yIGEgbGlzdCBvZiA8Y29tbWl0PgogCXNlcGFyYXRlZCB3aXRoIGEgc2luZ2xlIHNwYWNlIGZyb20gaXRzIHN0YW5kYXJkIGlucHV0LgogKwogV2hlbiBhIHNpbmdsZSBjb21taXQgaXMgZ2l2ZW4gb24gb25lIGxpbmUgb2Ygc3VjaCBpbnB1dCwgaXQgY29tcGFyZXMKIHRoZSBjb21taXQgd2l0aCBpdHMgcGFyZW50cy4gIFRoZSBmb2xsb3dpbmcgZmxhZ3MgZnVydGhlciBhZmZlY3RzIGl0cwotYmVoYXZpb3IuICBUaGlzIGRvZXMgbm90IGFwcGx5IHRvIHRoZSBjYXNlIHdoZXJlIHR3byA8dHJlZS1pc2g+Ci1zZXBhcmF0ZWQgd2l0aCBhIHNpbmdsZSBzcGFjZSBhcmUgZ2l2ZW4uCitiZWhhdmlvci4gIFRoZSByZW1haW5pbmcgY29tbWl0cywgd2hlbiBnaXZlbiwgYXJlIHVzZWQgYXMgaWYgdGhleSBhcmUKK3BhcmVudHMgb2YgdGhlIGZpcnN0IGNvbW1pdC4KIAogLW06OgogCUJ5IGRlZmF1bHQsICJnaXQtZGlmZi10cmVlIC0tc3RkaW4iIGRvZXMgbm90IHNob3cKQEAgLTkzLDExICs5MywxMSBAQAogCVRoaXMgZmxhZyBjaGFuZ2VzIHRoZSB3YXkgYSBtZXJnZSBjb21taXQgcGF0Y2ggaXMgZGlzcGxheWVkLAogCWluIGEgc2ltaWxhciB3YXkgdG8gdGhlICctYycgb3B0aW9uLiBJdCBpbXBsaWVzIHRoZSAnLWMnCiAJYW5kICctcCcgb3B0aW9ucyBhbmQgZnVydGhlciBjb21wcmVzc2VzIHRoZSBwYXRjaCBvdXRwdXQKLQlieSBvbWl0dGluZyBodW5rcyB0aGF0IHNob3cgZGlmZmVyZW5jZXMgZnJvbSBvbmx5IG9uZQotCXBhcmVudCwgb3Igc2hvdyB0aGUgc2FtZSBjaGFuZ2UgZnJvbSBhbGwgYnV0IG9uZSBwYXJlbnQKLQlmb3IgYW4gT2N0b3B1cyBtZXJnZS4gIFdoZW4gdGhpcyBvcHRpbWl6YXRpb24gbWFrZXMgYWxsCi0JaHVua3MgZGlzYXBwZWFyLCB0aGUgY29tbWl0IGl0c2VsZiBhbmQgdGhlIGNvbW1pdCBsb2cKLQltZXNzYWdlIGlzIG5vdCBzaG93biwganVzdCBsaWtlIGluIGFueSBvdGhlciAiZW1wdHkgZGlmZiIgY2FzZS4KKwlieSBvbWl0dGluZyB1bmludGVyZXN0aW5nIGh1bmtzIHdob3NlIHRoZSBjb250ZW50cyBpbiB0aGUgcGFyZW50cworCWhhdmUgb25seSB0d28gdmFyaWFudHMgYW5kIHRoZSBtZXJnZSByZXN1bHQgcGlja3Mgb25lIG9mIHRoZW0KKwl3aXRob3V0IG1vZGlmaWNhdGlvbi4gIFdoZW4gYWxsIGh1bmtzIGFyZSB1bmludGVyZXN0aW5nLCB0aGUgY29tbWl0CisJaXRzZWxmIGFuZCB0aGUgY29tbWl0IGxvZyBtZXNzYWdlIGlzIG5vdCBzaG93biwganVzdCBsaWtlIGluIGFueSBvdGhlcgorCSJlbXB0eSBkaWZmIiBjYXNlLgogCiAtLWFsd2F5czo6CiAJU2hvdyB0aGUgY29tbWl0IGl0c2VsZiBhbmQgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZSBldmVuCkBAIC0xNjUsNCArMTY1LDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLnR4dAppbmRleCA1N2MyODYyLi43YWNkNDI4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLnR4dApAQCAtMTY4LDQgKzE2OCw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWZhc3QtZXhwb3J0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWZhc3QtZXhwb3J0LnR4dAppbmRleCA2ZGFjNDc1Li4zMzIzNDZjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1mYXN0LWV4cG9ydC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZmFzdC1leHBvcnQudHh0CkBAIC04MCw0ICs4MCw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWZhc3QtaW1wb3J0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWZhc3QtaW1wb3J0LnR4dAppbmRleCBjMjlhNGY4Li4zOTVjMDU1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1mYXN0LWltcG9ydC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZmFzdC1pbXBvcnQudHh0CkBAIC0xMTE5LDQgKzExMTksNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1mZXRjaC1wYWNrLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWZldGNoLXBhY2sudHh0CmluZGV4IDU3NTk4ZWIuLjI4MmZjYWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWZldGNoLXBhY2sudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWZldGNoLXBhY2sudHh0CkBAIC0yOCwzMCArMjgsMzIgQEAKIAogT1BUSU9OUwogLS0tLS0tLQotXC0tYWxsOjoKKy0tYWxsOjoKIAlGZXRjaCBhbGwgcmVtb3RlIHJlZnMuCiAKLVwtLXF1aWV0LCBcLXE6OgorLXE6OgorLS1xdWlldDo6CiAJUGFzcyAnLXEnIGZsYWcgdG8gJ2dpdC11bnBhY2stb2JqZWN0cyc7IHRoaXMgbWFrZXMgdGhlCiAJY2xvbmluZyBwcm9jZXNzIGxlc3MgdmVyYm9zZS4KIAotXC0ta2VlcCwgXC1rOjoKKy1rOjoKKy0ta2VlcDo6CiAJRG8gbm90IGludm9rZSAnZ2l0LXVucGFjay1vYmplY3RzJyBvbiByZWNlaXZlZCBkYXRhLCBidXQKIAljcmVhdGUgYSBzaW5nbGUgcGFja2ZpbGUgb3V0IG9mIGl0IGluc3RlYWQsIGFuZCBzdG9yZSBpdAogCWluIHRoZSBvYmplY3QgZGF0YWJhc2UuIElmIHByb3ZpZGVkIHR3aWNlIHRoZW4gdGhlIHBhY2sgaXMKIAlsb2NrZWQgYWdhaW5zdCByZXBhY2tpbmcuCiAKLVwtLXRoaW46OgorLS10aGluOjoKIAlTcGVuZCBleHRyYSBjeWNsZXMgdG8gbWluaW1pemUgdGhlIG51bWJlciBvZiBvYmplY3RzIHRvIGJlIHNlbnQuCiAJVXNlIGl0IG9uIHNsb3dlciBjb25uZWN0aW9uLgogCi1cLS1pbmNsdWRlLXRhZzo6CistLWluY2x1ZGUtdGFnOjoKIAlJZiB0aGUgcmVtb3RlIHNpZGUgc3VwcG9ydHMgaXQsIGFubm90YXRlZCB0YWdzIG9iamVjdHMgd2lsbAogCWJlIGRvd25sb2FkZWQgb24gdGhlIHNhbWUgY29ubmVjdGlvbiBhcyB0aGUgb3RoZXIgb2JqZWN0cyBpZgogCXRoZSBvYmplY3QgdGhlIHRhZyByZWZlcmVuY2VzIGlzIGRvd25sb2FkZWQuICBUaGUgY2FsbGVyIG11c3QKIAlvdGhlcndpc2UgZGV0ZXJtaW5lIHRoZSB0YWdzIHRoaXMgb3B0aW9uIG1hZGUgYXZhaWxhYmxlLgogCi1cLS11cGxvYWQtcGFjaz08Z2l0LXVwbG9hZC1wYWNrPjo6CistLXVwbG9hZC1wYWNrPTxnaXQtdXBsb2FkLXBhY2s+OjoKIAlVc2UgdGhpcyB0byBzcGVjaWZ5IHRoZSBwYXRoIHRvICdnaXQtdXBsb2FkLXBhY2snIG9uIHRoZQogCXJlbW90ZSBzaWRlLCBpZiBpcyBub3QgZm91bmQgb24geW91ciAkUEFUSC4KIAlJbnN0YWxsYXRpb25zIG9mIHNzaGQgaWdub3JlcyB0aGUgdXNlcidzIGVudmlyb25tZW50CkBAIC02MywxNiArNjUsMTYgQEAKIAlzaGVsbHMgYnkgaGF2aW5nIGEgbGVhbiAuYmFzaHJjIGZpbGUgKHRoZXkgc2V0IG1vc3Qgb2YKIAl0aGUgdGhpbmdzIHVwIGluIC5iYXNoX3Byb2ZpbGUpLgogCi1cLS1leGVjPTxnaXQtdXBsb2FkLXBhY2s+OjoKKy0tZXhlYz08Z2l0LXVwbG9hZC1wYWNrPjo6CiAJU2FtZSBhcyBcLS11cGxvYWQtcGFjaz08Z2l0LXVwbG9hZC1wYWNrPi4KIAotXC0tZGVwdGg9PG4+OjoKKy0tZGVwdGg9PG4+OjoKIAlMaW1pdCBmZXRjaGluZyB0byBhbmNlc3Rvci1jaGFpbnMgbm90IGxvbmdlciB0aGFuIG4uCiAKLVwtLW5vLXByb2dyZXNzOjoKKy0tbm8tcHJvZ3Jlc3M6OgogCURvIG5vdCBzaG93IHRoZSBwcm9ncmVzcy4KIAotXC12OjoKKy12OjoKIAlSdW4gdmVyYm9zZWx5LgogCiA8aG9zdD46OgpAQCAtOTksNCArMTAxLDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZmV0Y2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZmV0Y2gudHh0CmluZGV4IGQ5ODJmOTYuLjRmYWU3ZmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWZldGNoLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1mZXRjaC50eHQKQEAgLTQ1LDcgKzQ1LDcgQEAKIEF1dGhvcgogLS0tLS0tCiBXcml0dGVuIGJ5IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0Bvc2RsLm9yZz4gYW5kCi1KdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+CitKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CiAKIERvY3VtZW50YXRpb24KIC0tLS0tLS0tLS0tLS0KQEAgLTUzLDQgKzUzLDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZmlsdGVyLWJyYW5jaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1maWx0ZXItYnJhbmNoLnR4dAppbmRleCA0YTUzMDk2Li5lYTc3ZjFmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1maWx0ZXItYnJhbmNoLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1maWx0ZXItYnJhbmNoLnR4dApAQCAtMTEzLDcgKzExMyw3IEBACiAJc3RkaW4uICBUaGUgY29tbWl0IGlkIGlzIGV4cGVjdGVkIG9uIHN0ZG91dC4KICsKIEFzIGEgc3BlY2lhbCBleHRlbnNpb24sIHRoZSBjb21taXQgZmlsdGVyIG1heSBlbWl0IG11bHRpcGxlCi1jb21taXQgaWRzOyBpbiB0aGF0IGNhc2UsIGFuY2VzdG9ycyBvZiB0aGUgb3JpZ2luYWwgY29tbWl0IHdpbGwKK2NvbW1pdCBpZHM7IGluIHRoYXQgY2FzZSwgdGhlIHJld3JpdHRlbiBjaGlsZHJlbiBvZiB0aGUgb3JpZ2luYWwgY29tbWl0IHdpbGwKIGhhdmUgYWxsIG9mIHRoZW0gYXMgcGFyZW50cy4KICsKIFlvdSBjYW4gdXNlIHRoZSAnbWFwJyBjb252ZW5pZW5jZSBmdW5jdGlvbiBpbiB0aGlzIGZpbHRlciwgYW5kIG90aGVyCkBAIC0xMzMsMTAgKzEzMywxNiBAQAogY2FzZSwgYmUgdmVyeSBjYXJlZnVsIGFuZCBtYWtlIHN1cmUgeW91IGhhdmUgdGhlIG9sZCB0YWdzCiBiYWNrZWQgdXAgaW4gY2FzZSB0aGUgY29udmVyc2lvbiBoYXMgcnVuIGFmb3VsLgogKwotTm90ZSB0aGF0IHRoZXJlIGlzIGN1cnJlbnRseSBubyBzdXBwb3J0IGZvciBwcm9wZXIgcmV3cml0aW5nIG9mCi10YWcgb2JqZWN0czsgaW4gbGF5bWFuIHRlcm1zLCBpZiB0aGUgdGFnIGhhcyBhIG1lc3NhZ2Ugb3Igc2lnbmF0dXJlCi1hdHRhY2hlZCwgdGhlIHJld3JpdHRlbiB0YWcgd29uJ3QgaGF2ZSBpdC4gIFNvcnJ5LiAgKEl0IGlzIGJ5Ci1kZWZpbml0aW9uIGltcG9zc2libGUgdG8gcHJlc2VydmUgc2lnbmF0dXJlcyBhdCBhbnkgcmF0ZS4pCitOZWFybHkgcHJvcGVyIHJld3JpdGluZyBvZiB0YWcgb2JqZWN0cyBpcyBzdXBwb3J0ZWQuIElmIHRoZSB0YWcgaGFzCithIG1lc3NhZ2UgYXR0YWNoZWQsIGEgbmV3IHRhZyBvYmplY3Qgd2lsbCBiZSBjcmVhdGVkIHdpdGggdGhlIHNhbWUgbWVzc2FnZSwKK2F1dGhvciwgYW5kIHRpbWVzdGFtcC4gSWYgdGhlIHRhZyBoYXMgYSBzaWduYXR1cmUgYXR0YWNoZWQsIHRoZQorc2lnbmF0dXJlIHdpbGwgYmUgc3RyaXBwZWQuIEl0IGlzIGJ5IGRlZmluaXRpb24gaW1wb3NzaWJsZSB0byBwcmVzZXJ2ZQorc2lnbmF0dXJlcy4gVGhlIHJlYXNvbiB0aGlzIGlzICJuZWFybHkiIHByb3BlciwgaXMgYmVjYXVzZSBpZGVhbGx5IGlmCit0aGUgdGFnIGRpZCBub3QgY2hhbmdlIChwb2ludHMgdG8gdGhlIHNhbWUgb2JqZWN0LCBoYXMgdGhlIHNhbWUgbmFtZSwgZXRjLikKK2l0IHNob3VsZCByZXRhaW4gYW55IHNpZ25hdHVyZS4gVGhhdCBpcyBub3QgdGhlIGNhc2UsIHNpZ25hdHVyZXMgd2lsbCBhbHdheXMKK2JlIHJlbW92ZWQsIGJ1eWVyIGJld2FyZS4gVGhlcmUgaXMgYWxzbyBubyBzdXBwb3J0IGZvciBjaGFuZ2luZyB0aGUKK2F1dGhvciBvciB0aW1lc3RhbXAgKG9yIHRoZSB0YWcgbWVzc2FnZSBmb3IgdGhhdCBtYXR0ZXIpLiBUYWdzIHdoaWNoIHBvaW50Cit0byBvdGhlciB0YWdzIHdpbGwgYmUgcmV3cml0dGVuIHRvIHBvaW50IHRvIHRoZSB1bmRlcmx5aW5nIGNvbW1pdC4KIAogLS1zdWJkaXJlY3RvcnktZmlsdGVyIDxkaXJlY3Rvcnk+OjoKIAlPbmx5IGxvb2sgYXQgdGhlIGhpc3Rvcnkgd2hpY2ggdG91Y2hlcyB0aGUgZ2l2ZW4gc3ViZGlyZWN0b3J5LgpAQCAtMTU1LDcgKzE2MSw4IEBACiAJZG9lcyB0aGlzIGluIHRoZSAnLmdpdC1yZXdyaXRlLycgZGlyZWN0b3J5IGJ1dCB5b3UgY2FuIG92ZXJyaWRlCiAJdGhhdCBjaG9pY2UgYnkgdGhpcyBwYXJhbWV0ZXIuCiAKLS1mfC0tZm9yY2U6OgorLWY6OgorLS1mb3JjZTo6CiAJYGdpdCBmaWx0ZXItYnJhbmNoYCByZWZ1c2VzIHRvIHN0YXJ0IHdpdGggYW4gZXhpc3RpbmcgdGVtcG9yYXJ5CiAJZGlyZWN0b3J5IG9yIHdoZW4gdGhlcmUgYXJlIGFscmVhZHkgcmVmcyBzdGFydGluZyB3aXRoCiAJJ3JlZnMvb3JpZ2luYWwvJywgdW5sZXNzIGZvcmNlZC4KQEAgLTMxMSw0ICszMTgsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1mbXQtbWVyZ2UtbXNnLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWZtdC1tZXJnZS1tc2cudHh0CmluZGV4IDg2MTVhZTMuLjIyMjA1MmYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWZtdC1tZXJnZS1tc2cudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWZtdC1tZXJnZS1tc2cudHh0CkBAIC05LDggKzksOCBAQAogU1lOT1BTSVMKIC0tLS0tLS0tCiBbdmVyc2VdCi1naXQtZm10LW1lcmdlLW1zZyBbLS1zdW1tYXJ5IHwgLS1uby1zdW1tYXJ5XSA8JEdJVF9ESVIvRkVUQ0hfSEVBRAotZ2l0LWZtdC1tZXJnZS1tc2cgWy0tc3VtbWFyeSB8IC0tbm8tc3VtbWFyeV0gLUYgPGZpbGU+CitnaXQtZm10LW1lcmdlLW1zZyBbLS1sb2cgfCAtLW5vLWxvZ10gPCRHSVRfRElSL0ZFVENIX0hFQUQKK2dpdC1mbXQtbWVyZ2UtbXNnIFstLWxvZyB8IC0tbm8tbG9nXSAtRiA8ZmlsZT4KIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCkBAIC0yNCwyNiArMjQsMzYgQEAKIE9QVElPTlMKIC0tLS0tLS0KIAotLS1zdW1tYXJ5OjoKKy0tbG9nOjoKIAlJbiBhZGRpdGlvbiB0byBicmFuY2ggbmFtZXMsIHBvcHVsYXRlIHRoZSBsb2cgbWVzc2FnZSB3aXRoCiAJb25lLWxpbmUgZGVzY3JpcHRpb25zIGZyb20gdGhlIGFjdHVhbCBjb21taXRzIHRoYXQgYXJlIGJlaW5nCiAJbWVyZ2VkLgogCi0tLW5vLXN1bW1hcnk6OgorLS1uby1sb2c6OgogCURvIG5vdCBsaXN0IG9uZS1saW5lIGRlc2NyaXB0aW9ucyBmcm9tIHRoZSBhY3R1YWwgY29tbWl0cyBiZWluZwogCW1lcmdlZC4KIAotLS1maWxlIDxmaWxlPiwgLUYgPGZpbGU+OjoKKy0tc3VtbWFyeTo6CistLW5vLXN1bW1hcnk6OgorCVN5bm9ueW1zIHRvIC0tbG9nIGFuZCAtLW5vLWxvZzsgdGhlc2UgYXJlIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUKKwlyZW1vdmVkIGluIHRoZSBmdXR1cmUuCisKKy1GIDxmaWxlPjo6CistLWZpbGUgPGZpbGU+OjoKIAlUYWtlIHRoZSBsaXN0IG9mIG1lcmdlZCBvYmplY3RzIGZyb20gPGZpbGU+IGluc3RlYWQgb2YKIAlzdGRpbi4KIAogQ09ORklHVVJBVElPTgogLS0tLS0tLS0tLS0tLQogCi1tZXJnZS5zdW1tYXJ5OjoKK21lcmdlLmxvZzo6CiAJV2hldGhlciB0byBpbmNsdWRlIHN1bW1hcmllcyBvZiBtZXJnZWQgY29tbWl0cyBpbiBuZXdseQogCW1lcmdlIGNvbW1pdCBtZXNzYWdlcy4gRmFsc2UgYnkgZGVmYXVsdC4KIAorbWVyZ2Uuc3VtbWFyeTo6CisJU3lub255bSB0byBgbWVyZ2UubG9nYDsgdGhpcyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4KKwl0aGUgZnV0dXJlLgorCiBTRUUgQUxTTwogLS0tLS0tLS0KIGxpbmtnaXQ6Z2l0LW1lcmdlWzFdCkBAIC01MSw3ICs2MSw3IEBACiAKIEF1dGhvcgogLS0tLS0tCi1Xcml0dGVuIGJ5IEp1bmlvIEMgSGFtYW5vIDxqdW5raW9AY294Lm5ldD4KK1dyaXR0ZW4gYnkgSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgogCiBEb2N1bWVudGF0aW9uCiAtLS0tLS0tLS0tLS0tLQpAQCAtNTksNCArNjksNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1mb3ItZWFjaC1yZWYudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZm9yLWVhY2gtcmVmLnR4dAppbmRleCA2MzI1ZmY5Li5iMzQ3YmZiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1mb3ItZWFjaC1yZWYudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWZvci1lYWNoLXJlZi50eHQKQEAgLTUzLDcgKzUzLDEwIEBACiAJbGl0ZXJhbGx5LCBpbiB0aGUgbGF0dGVyIGNhc2UgbWF0Y2hpbmcgY29tcGxldGVseSBvciBmcm9tIHRoZQogCWJlZ2lubmluZyB1cCB0byBhIHNsYXNoLgogCi0tLXNoZWxsLCAtLXBlcmwsIC0tcHl0aG9uLCAtLXRjbDo6CistLXNoZWxsOjoKKy0tcGVybDo6CistLXB5dGhvbjo6CistLXRjbDo6CiAJSWYgZ2l2ZW4sIHN0cmluZ3MgdGhhdCBzdWJzdGl0dXRlIGAlKGZpZWxkbmFtZSlgCiAJcGxhY2Vob2xkZXJzIGFyZSBxdW90ZWQgYXMgc3RyaW5nIGxpdGVyYWxzIHN1aXRhYmxlIGZvcgogCXRoZSBzcGVjaWZpZWQgaG9zdCBsYW5ndWFnZS4gIFRoaXMgaXMgbWVhbnQgdG8gcHJvZHVjZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZm9ybWF0LXBhdGNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWZvcm1hdC1wYXRjaC50eHQKaW5kZXggYjUyMDdiNy4uZWUyN2VmZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtZm9ybWF0LXBhdGNoLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1mb3JtYXQtcGF0Y2gudHh0CkBAIC03NCwxNCArNzQsMTcgQEAKIC08bj46OgogCUxpbWl0cyB0aGUgbnVtYmVyIG9mIHBhdGNoZXMgdG8gcHJlcGFyZS4KIAotLW98LS1vdXRwdXQtZGlyZWN0b3J5IDxkaXI+OjoKKy1vIDxkaXI+OjoKKy0tb3V0cHV0LWRpcmVjdG9yeSA8ZGlyPjo6CiAJVXNlIDxkaXI+IHRvIHN0b3JlIHRoZSByZXN1bHRpbmcgZmlsZXMsIGluc3RlYWQgb2YgdGhlCiAJY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KIAotLW58LS1udW1iZXJlZDo6Cistbjo6CistLW51bWJlcmVkOjoKIAlOYW1lIG91dHB1dCBpbiAnW1BBVENIIG4vbV0nIGZvcm1hdC4KIAotLU58LS1uby1udW1iZXJlZDo6CistTjo6CistLW5vLW51bWJlcmVkOjoKIAlOYW1lIG91dHB1dCBpbiAnW1BBVENIXScgZm9ybWF0LgogCiAtLXN0YXJ0LW51bWJlciA8bj46OgpAQCAtOTIsMTEgKzk1LDEzIEBACiAJd2l0aG91dCB0aGUgZGVmYXVsdCBmaXJzdCBsaW5lIG9mIHRoZSBjb21taXQgYXBwZW5kZWQuCiAJTXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggdGhlIC0tc3Rkb3V0IG9wdGlvbi4KIAotLWt8LS1rZWVwLXN1YmplY3Q6OgorLWs6OgorLS1rZWVwLXN1YmplY3Q6OgogCURvIG5vdCBzdHJpcC9hZGQgJ1tQQVRDSF0nIGZyb20gdGhlIGZpcnN0IGxpbmUgb2YgdGhlCiAJY29tbWl0IGxvZyBtZXNzYWdlLgogCi0tc3wtLXNpZ25vZmY6OgorLXM6OgorLS1zaWdub2ZmOjoKIAlBZGQgYFNpZ25lZC1vZmYtYnk6YCBsaW5lIHRvIHRoZSBjb21taXQgbWVzc2FnZSwgdXNpbmcKIAl0aGUgY29tbWl0dGVyIGlkZW50aXR5IG9mIHlvdXJzZWxmLgogCkBAIC0xNTYsNiArMTYxLDEyIEBACiB0aGUgZmlyc3QgbGV0dGVyIGRvZXMgbm90IGhhdmUgdG8gYmUgYSBkb3QuICBMZWF2aW5nIGl0IGVtcHR5IHdvdWxkCiBub3QgYWRkIGFueSBzdWZmaXguCiAKKy0tbm8tYmluYXJ5OjoKKwlEb24ndCBvdXRwdXQgY29udGVudHMgb2YgY2hhbmdlcyBpbiBiaW5hcnkgZmlsZXMsIGp1c3QgdGFrZSBub3RlCisJdGhhdCB0aGV5IGRpZmZlci4gIE5vdGUgdGhhdCB0aGlzIGRpc2FibGUgdGhlIHBhdGNoIHRvIGJlIHByb3Blcmx5CisJYXBwbGllZC4gIEJ5IGRlZmF1bHQgdGhlIGNvbnRlbnRzIG9mIGNoYW5nZXMgaW4gdGhvc2UgZmlsZXMgYXJlCisJZW5jb2RlZCBpbiB0aGUgcGF0Y2guCisKIENPTkZJR1VSQVRJT04KIC0tLS0tLS0tLS0tLS0KIFlvdSBjYW4gc3BlY2lmeSBleHRyYSBtYWlsIGhlYWRlciBsaW5lcyB0byBiZSBhZGRlZCB0byBlYWNoIG1lc3NhZ2UKQEAgLTE2OCw0NyArMTc5LDYzIEBACiAgICAgICAgIHN1YmplY3RwcmVmaXggPSBDSEFOR0UKICAgICAgICAgc3VmZml4ID0gLnR4dAogICAgICAgICBudW1iZXJlZCA9IGF1dG8KKwljYyA9IDxlbWFpbD4KIC0tLS0tLS0tLS0tLQogCiAKIEVYQU1QTEVTCiAtLS0tLS0tLQogCi1naXQtZm9ybWF0LXBhdGNoIC1rIC0tc3Rkb3V0IFIxLi5SMiB8IGdpdC1hbSAtMyAtazo6Ci0JRXh0cmFjdCBjb21taXRzIGJldHdlZW4gcmV2aXNpb25zIFIxIGFuZCBSMiwgYW5kIGFwcGx5Ci0JdGhlbSBvbiB0b3Agb2YgdGhlIGN1cnJlbnQgYnJhbmNoIHVzaW5nIGBnaXQtYW1gIHRvCi0JY2hlcnJ5LXBpY2sgdGhlbS4KKyogRXh0cmFjdCBjb21taXRzIGJldHdlZW4gcmV2aXNpb25zIFIxIGFuZCBSMiwgYW5kIGFwcGx5IHRoZW0gb24gdG9wIG9mCit0aGUgY3VycmVudCBicmFuY2ggdXNpbmcgYGdpdC1hbWAgdG8gY2hlcnJ5LXBpY2sgdGhlbToKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgZm9ybWF0LXBhdGNoIC1rIC0tc3Rkb3V0IFIxLi5SMiB8IGdpdC1hbSAtMyAtaworLS0tLS0tLS0tLS0tCiAKLWdpdC1mb3JtYXQtcGF0Y2ggb3JpZ2luOjoKLQlFeHRyYWN0IGFsbCBjb21taXRzIHdoaWNoIGFyZSBpbiB0aGUgY3VycmVudCBicmFuY2ggYnV0Ci0Jbm90IGluIHRoZSBvcmlnaW4gYnJhbmNoLiAgRm9yIGVhY2ggY29tbWl0IGEgc2VwYXJhdGUgZmlsZQotCWlzIGNyZWF0ZWQgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorKiBFeHRyYWN0IGFsbCBjb21taXRzIHdoaWNoIGFyZSBpbiB0aGUgY3VycmVudCBicmFuY2ggYnV0IG5vdCBpbiB0aGUKK29yaWdpbiBicmFuY2g6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGZvcm1hdC1wYXRjaCBvcmlnaW4KKy0tLS0tLS0tLS0tLQorKworRm9yIGVhY2ggY29tbWl0IGEgc2VwYXJhdGUgZmlsZSBpcyBjcmVhdGVkIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KIAotZ2l0LWZvcm1hdC1wYXRjaCBcLS1yb290IG9yaWdpbjo6Ci0JRXh0cmFjdCBhbGwgY29tbWl0cyB0aGF0IGxlYWQgdG8gJ29yaWdpbicgc2luY2UgdGhlCi0JaW5jZXB0aW9uIG9mIHRoZSBwcm9qZWN0LgorKiBFeHRyYWN0IGFsbCBjb21taXRzIHRoYXQgbGVhZCB0byAnb3JpZ2luJyBzaW5jZSB0aGUgaW5jZXB0aW9uIG9mIHRoZQorcHJvamVjdDoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgZm9ybWF0LXBhdGNoIFwtLXJvb3Qgb3JpZ2luCistLS0tLS0tLS0tLS0KIAotZ2l0LWZvcm1hdC1wYXRjaCAtTSAtQiBvcmlnaW46OgotCVRoZSBzYW1lIGFzIHRoZSBwcmV2aW91cyBvbmUuICBBZGRpdGlvbmFsbHksIGl0IGRldGVjdHMKLQlhbmQgaGFuZGxlcyByZW5hbWVzIGFuZCBjb21wbGV0ZSByZXdyaXRlcyBpbnRlbGxpZ2VudGx5IHRvCi0JcHJvZHVjZSBhIHJlbmFtaW5nIHBhdGNoLiAgQSByZW5hbWluZyBwYXRjaCByZWR1Y2VzIHRoZQotCWFtb3VudCBvZiB0ZXh0IG91dHB1dCwgYW5kIGdlbmVyYWxseSBtYWtlcyBpdCBlYXNpZXIgdG8KLQlyZXZpZXcgaXQuICBOb3RlIHRoYXQgdGhlICJwYXRjaCIgcHJvZ3JhbSBkb2VzIG5vdAotCXVuZGVyc3RhbmQgcmVuYW1pbmcgcGF0Y2hlcywgc28gdXNlIGl0IG9ubHkgd2hlbiB5b3Uga25vdwotCXRoZSByZWNpcGllbnQgdXNlcyBnaXQgdG8gYXBwbHkgeW91ciBwYXRjaC4KKyogVGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIG9uZToKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgZm9ybWF0LXBhdGNoIC1NIC1CIG9yaWdpbgorLS0tLS0tLS0tLS0tCisrCitBZGRpdGlvbmFsbHksIGl0IGRldGVjdHMgYW5kIGhhbmRsZXMgcmVuYW1lcyBhbmQgY29tcGxldGUgcmV3cml0ZXMKK2ludGVsbGlnZW50bHkgdG8gcHJvZHVjZSBhIHJlbmFtaW5nIHBhdGNoLiAgQSByZW5hbWluZyBwYXRjaCByZWR1Y2VzCit0aGUgYW1vdW50IG9mIHRleHQgb3V0cHV0LCBhbmQgZ2VuZXJhbGx5IG1ha2VzIGl0IGVhc2llciB0byByZXZpZXcgaXQuCitOb3RlIHRoYXQgdGhlICJwYXRjaCIgcHJvZ3JhbSBkb2VzIG5vdCB1bmRlcnN0YW5kIHJlbmFtaW5nIHBhdGNoZXMsIHNvCit1c2UgaXQgb25seSB3aGVuIHlvdSBrbm93IHRoZSByZWNpcGllbnQgdXNlcyBnaXQgdG8gYXBwbHkgeW91ciBwYXRjaC4KIAotZ2l0LWZvcm1hdC1wYXRjaCAtMzo6Ci0JRXh0cmFjdCB0aHJlZSB0b3Btb3N0IGNvbW1pdHMgZnJvbSB0aGUgY3VycmVudCBicmFuY2gKLQlhbmQgZm9ybWF0IHRoZW0gYXMgZS1tYWlsYWJsZSBwYXRjaGVzLgorKiBFeHRyYWN0IHRocmVlIHRvcG1vc3QgY29tbWl0cyBmcm9tIHRoZSBjdXJyZW50IGJyYW5jaCBhbmQgZm9ybWF0IHRoZW0KK2FzIGUtbWFpbGFibGUgcGF0Y2hlczoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgZm9ybWF0LXBhdGNoIC0zCistLS0tLS0tLS0tLS0KIAotU2VlIEFsc28KK1NFRSBBTFNPCiAtLS0tLS0tLQogbGlua2dpdDpnaXQtYW1bMV0sIGxpbmtnaXQ6Z2l0LXNlbmQtZW1haWxbMV0KIAogCiBBdXRob3IKIC0tLS0tLQotV3JpdHRlbiBieSBKdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+CitXcml0dGVuIGJ5IEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KIAogRG9jdW1lbnRhdGlvbgogLS0tLS0tLS0tLS0tLS0KQEAgLTIxNiw0ICsyNDMsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1mc2NrLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWZzY2sudHh0CmluZGV4IGYxNmNiOTguLjk4NDZjODUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWZzY2sudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWZzY2sudHh0CkBAIC0yMiw3ICsyMiw4IEBACiAJQW4gb2JqZWN0IHRvIHRyZWF0IGFzIHRoZSBoZWFkIG9mIGFuIHVucmVhY2hhYmlsaXR5IHRyYWNlLgogKwogSWYgbm8gb2JqZWN0cyBhcmUgZ2l2ZW4sIGdpdC1mc2NrIGRlZmF1bHRzIHRvIHVzaW5nIHRoZQotaW5kZXggZmlsZSBhbmQgYWxsIFNIQTEgcmVmZXJlbmNlcyBpbiAuZ2l0L3JlZnMvKiBhcyBoZWFkcy4KK2luZGV4IGZpbGUsIGFsbCBTSEExIHJlZmVyZW5jZXMgaW4gLmdpdC9yZWZzLyosIGFuZCBhbGwgcmVmbG9ncyAodW5sZXNzCistLW5vLXJlZmxvZ3MgaXMgZ2l2ZW4pIGFzIGhlYWRzLgogCiAtLXVucmVhY2hhYmxlOjoKIAlQcmludCBvdXQgb2JqZWN0cyB0aGF0IGV4aXN0IGJ1dCB0aGF0IGFyZW4ndCByZWFkYWJsZSBmcm9tIGFueQpAQCAtMTUwLDQgKzE1MSw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWdjLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWdjLnR4dAppbmRleCBiNmI1Y2UxLi42YWNlNjE1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1nYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZ2MudHh0CkBAIC0xMTksNyArMTE5LDcgQEAKIGFsbCBvZiB0aG9zZSBsb2NhdGlvbnMgYW5kIGRlY2lkZSB3aGV0aGVyIGl0IG1ha2VzIHNlbnNlIGluIHlvdXIgY2FzZSB0bwogcmVtb3ZlIHRob3NlIHJlZmVyZW5jZXMuCiAKLVNlZSBBbHNvCitTRUUgQUxTTwogLS0tLS0tLS0KIGxpbmtnaXQ6Z2l0LXBydW5lWzFdCiBsaW5rZ2l0OmdpdC1yZWZsb2dbMV0KQEAgLTEzMiw0ICsxMzIsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1nZXQtdGFyLWNvbW1pdC1pZC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1nZXQtdGFyLWNvbW1pdC1pZC50eHQKaW5kZXggZGVhNDE0OS4uYzEzYmY5OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtZ2V0LXRhci1jb21taXQtaWQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWdldC10YXItY29tbWl0LWlkLnR4dApAQCAtMzMsNCArMzMsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1ncmVwLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWdyZXAudHh0CmluZGV4IGE5N2YwNTUuLjFiNjQ2YjcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWdyZXAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWdyZXAudHh0CkBAIC0zMywyNSArMzMsMzAgQEAKIAlJbnN0ZWFkIG9mIHNlYXJjaGluZyBpbiB0aGUgd29ya2luZyB0cmVlIGZpbGVzLCBjaGVjawogCXRoZSBibG9icyByZWdpc3RlcmVkIGluIHRoZSBpbmRleCBmaWxlLgogCi0tYSB8IC0tdGV4dDo6CistYTo6CistLXRleHQ6OgogCVByb2Nlc3MgYmluYXJ5IGZpbGVzIGFzIGlmIHRoZXkgd2VyZSB0ZXh0LgogCi0taSB8IC0taWdub3JlLWNhc2U6OgorLWk6OgorLS1pZ25vcmUtY2FzZTo6CiAJSWdub3JlIGNhc2UgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgcGF0dGVybnMgYW5kIHRoZQogCWZpbGVzLgogCiAtSTo6CiAJRG9uJ3QgbWF0Y2ggdGhlIHBhdHRlcm4gaW4gYmluYXJ5IGZpbGVzLgogCi0tdyB8IC0td29yZC1yZWdleHA6OgorLXc6OgorLS13b3JkLXJlZ2V4cDo6CiAJTWF0Y2ggdGhlIHBhdHRlcm4gb25seSBhdCB3b3JkIGJvdW5kYXJ5IChlaXRoZXIgYmVnaW4gYXQgdGhlCiAJYmVnaW5uaW5nIG9mIGEgbGluZSwgb3IgcHJlY2VkZWQgYnkgYSBub24td29yZCBjaGFyYWN0ZXI7IGVuZCBhdAogCXRoZSBlbmQgb2YgYSBsaW5lIG9yIGZvbGxvd2VkIGJ5IGEgbm9uLXdvcmQgY2hhcmFjdGVyKS4KIAotLXYgfCAtLWludmVydC1tYXRjaDo6Cistdjo6CistLWludmVydC1tYXRjaDo6CiAJU2VsZWN0IG5vbi1tYXRjaGluZyBsaW5lcy4KIAotLWggfCAtSDo6CistaDo6CistSDo6CiAJQnkgZGVmYXVsdCwgdGhlIGNvbW1hbmQgc2hvd3MgdGhlIGZpbGVuYW1lIGZvciBlYWNoCiAJbWF0Y2guICBgLWhgIG9wdGlvbiBpcyB1c2VkIHRvIHN1cHByZXNzIHRoaXMgb3V0cHV0LgogCWAtSGAgaXMgdGhlcmUgZm9yIGNvbXBsZXRlbmVzcyBhbmQgZG9lcyBub3QgZG8gYW55dGhpbmcKQEAgLTY0LDI0ICs2OSwzMyBAQAogCW9wdGlvbiBmb3JjZXMgcGF0aHMgdG8gYmUgb3V0cHV0IHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0CiAJdG9wIGRpcmVjdG9yeS4KIAotLUUgfCAtLWV4dGVuZGVkLXJlZ2V4cCB8IC1HIHwgLS1iYXNpYy1yZWdleHA6OgorLUU6OgorLS1leHRlbmRlZC1yZWdleHA6OgorLUc6OgorLS1iYXNpYy1yZWdleHA6OgogCVVzZSBQT1NJWCBleHRlbmRlZC9iYXNpYyByZWdleHAgZm9yIHBhdHRlcm5zLiAgRGVmYXVsdAogCWlzIHRvIHVzZSBiYXNpYyByZWdleHAuCiAKLS1GIHwgLS1maXhlZC1zdHJpbmdzOjoKKy1GOjoKKy0tZml4ZWQtc3RyaW5nczo6CiAJVXNlIGZpeGVkIHN0cmluZ3MgZm9yIHBhdHRlcm5zIChkb24ndCBpbnRlcnByZXQgcGF0dGVybgogCWFzIGEgcmVnZXgpLgogCiAtbjo6CiAJUHJlZml4IHRoZSBsaW5lIG51bWJlciB0byBtYXRjaGluZyBsaW5lcy4KIAotLWwgfCAtLWZpbGVzLXdpdGgtbWF0Y2hlcyB8IC0tbmFtZS1vbmx5IHwgLUwgfCAtLWZpbGVzLXdpdGhvdXQtbWF0Y2g6OgorLWw6OgorLS1maWxlcy13aXRoLW1hdGNoZXM6OgorLS1uYW1lLW9ubHk6OgorLUw6OgorLS1maWxlcy13aXRob3V0LW1hdGNoOjoKIAlJbnN0ZWFkIG9mIHNob3dpbmcgZXZlcnkgbWF0Y2hlZCBsaW5lLCBzaG93IG9ubHkgdGhlCiAJbmFtZXMgb2YgZmlsZXMgdGhhdCBjb250YWluIChvciBkbyBub3QgY29udGFpbikgbWF0Y2hlcy4KIAlGb3IgYmV0dGVyIGNvbXBhdGliaWxpdHkgd2l0aCBnaXQtZGlmZiwgLS1uYW1lLW9ubHkgaXMgYQogCXN5bm9ueW0gZm9yIC0tZmlsZXMtd2l0aC1tYXRjaGVzLgogCi0tYyB8IC0tY291bnQ6OgorLWM6OgorLS1jb3VudDo6CiAJSW5zdGVhZCBvZiBzaG93aW5nIGV2ZXJ5IG1hdGNoZWQgbGluZSwgc2hvdyB0aGUgbnVtYmVyIG9mCiAJbGluZXMgdGhhdCBtYXRjaC4KIApAQCAtMTAzLDcgKzExNywxMCBAQAogCXNjcmlwdHMgcGFzc2luZyB1c2VyIGlucHV0IHRvIGdyZXAuICBNdWx0aXBsZSBwYXR0ZXJucyBhcmUKIAljb21iaW5lZCBieSAnb3InLgogCi0tLWFuZCB8IC0tb3IgfCAtLW5vdCB8ICggfCApOjoKKy0tYW5kOjoKKy0tb3I6OgorLS1ub3Q6OgorKCAuLi4gKTo6CiAJU3BlY2lmeSBob3cgbXVsdGlwbGUgcGF0dGVybnMgYXJlIGNvbWJpbmVkIHVzaW5nIEJvb2xlYW4KIAlleHByZXNzaW9ucy4gIGAtLW9yYCBpcyB0aGUgZGVmYXVsdCBvcGVyYXRvci4gIGAtLWFuZGAgaGFzCiAJaGlnaGVyIHByZWNlZGVuY2UgdGhhbiBgLS1vcmAuICBgLWVgIGhhcyB0byBiZSB1c2VkIGZvciBhbGwKQEAgLTE0NSw0ICsxNjIsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1ndWkudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZ3VpLnR4dAppbmRleCA2ZDZjZDVkLi4xMDUzOTdmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1ndWkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWd1aS50eHQKQEAgLTc5LDkgKzc5LDkgQEAKIAlzZWxlY3RlZCBpbiB0aGUgYnJvd3NlciBjYW4gYmUgdmlld2VkIHdpdGggdGhlIGludGVybmFsCiAJYmxhbWUgdmlld2VyLgogCi1TZWUgQWxzbworU0VFIEFMU08KIC0tLS0tLS0tCi0nZ2l0aygxKSc6OgorbGlua2dpdDpnaXRrWzFdOjoKIAlUaGUgZ2l0IHJlcG9zaXRvcnkgYnJvd3Nlci4gIFNob3dzIGJyYW5jaGVzLCBjb21taXQgaGlzdG9yeQogCWFuZCBmaWxlIGRpZmZlcmVuY2VzLiAgZ2l0ayBpcyB0aGUgdXRpbGl0eSBzdGFydGVkIGJ5CiAJZ2l0LWd1aSdzIFJlcG9zaXRvcnkgVmlzdWFsaXplIGFjdGlvbnMuCkBAIC0xMTIsNCArMTEyLDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtaGFzaC1vYmplY3QudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtaGFzaC1vYmplY3QudHh0CmluZGV4IDMzMDMwYzAuLjFhYmNkOTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWhhc2gtb2JqZWN0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1oYXNoLW9iamVjdC50eHQKQEAgLTgsNyArOCw3IEBACiAKIFNZTk9QU0lTCiAtLS0tLS0tLQotJ2dpdC1oYXNoLW9iamVjdCcgWy10IDx0eXBlPl0gWy13XSBbLS1zdGRpbl0gWy0tXSA8ZmlsZT4uLi4KKydnaXQtaGFzaC1vYmplY3QnIFstdCA8dHlwZT5dIFstd10gWy0tc3RkaW4gfCAtLXN0ZGluLXBhdGhzXSBbLS1dIDxmaWxlPi4uLgogCiBERVNDUklQVElPTgogLS0tLS0tLS0tLS0KQEAgLTMyLDkgKzMyLDEyIEBACiAtLXN0ZGluOjoKIAlSZWFkIHRoZSBvYmplY3QgZnJvbSBzdGFuZGFyZCBpbnB1dCBpbnN0ZWFkIG9mIGZyb20gYSBmaWxlLgogCistLXN0ZGluLXBhdGhzOjoKKwlSZWFkIGZpbGUgbmFtZXMgZnJvbSBzdGRpbiBpbnN0ZWFkIG9mIGZyb20gdGhlIGNvbW1hbmQtbGluZS4KKwogQXV0aG9yCiAtLS0tLS0KLVdyaXR0ZW4gYnkgSnVuaW8gQyBIYW1hbm8gPGp1bmtpb0Bjb3gubmV0PgorV3JpdHRlbiBieSBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CiAKIERvY3VtZW50YXRpb24KIC0tLS0tLS0tLS0tLS0tCkBAIC00Miw0ICs0NSw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWhlbHAudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtaGVscC50eHQKaW5kZXggYmUyYWU1My4uZmFlY2Q2YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtaGVscC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtaGVscC50eHQKQEAgLTI4LDE1ICsyOCwxOCBAQAogCiBPUFRJT05TCiAtLS0tLS0tCi0tYXwtLWFsbDo6CistYTo6CistLWFsbDo6CiAJUHJpbnRzIGFsbCB0aGUgYXZhaWxhYmxlIGNvbW1hbmRzIG9uIHRoZSBzdGFuZGFyZCBvdXRwdXQuIFRoaXMKIAlvcHRpb24gc3VwZXJzZWRlcyBhbnkgb3RoZXIgb3B0aW9uLgogCi0taXwtLWluZm86OgorLWk6OgorLS1pbmZvOjoKIAlEaXNwbGF5IG1hbnVhbCBwYWdlIGZvciB0aGUgY29tbWFuZCBpbiB0aGUgJ2luZm8nIGZvcm1hdC4gVGhlCiAJJ2luZm8nIHByb2dyYW0gd2lsbCBiZSB1c2VkIGZvciB0aGF0IHB1cnBvc2UuCiAKLS1tfC0tbWFuOjoKKy1tOjoKKy0tbWFuOjoKIAlEaXNwbGF5IG1hbnVhbCBwYWdlIGZvciB0aGUgY29tbWFuZCBpbiB0aGUgJ21hbicgZm9ybWF0LiBUaGlzCiAJb3B0aW9uIG1heSBiZSB1c2VkIHRvIG92ZXJyaWRlIGEgdmFsdWUgc2V0IGluIHRoZQogCSdoZWxwLmZvcm1hdCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KQEAgLTQ1LDcgKzQ4LDggQEAKIGJ1dCB0aGUgJ21hbi52aWV3ZXInIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgbWF5IGJlIHVzZWQgdG8gY2hvb3NlCiBvdGhlciBkaXNwbGF5IHByb2dyYW1zIChzZWUgYmVsb3cpLgogCi0td3wtLXdlYjo6Cistdzo6CistLXdlYjo6CiAJRGlzcGxheSBtYW51YWwgcGFnZSBmb3IgdGhlIGNvbW1hbmQgaW4gdGhlICd3ZWInIChIVE1MKQogCWZvcm1hdC4gQSB3ZWIgYnJvd3NlciB3aWxsIGJlIHVzZWQgZm9yIHRoYXQgcHVycG9zZS4KICsKQEAgLTgyLDI4ICs4Niw3NSBAQAogfn5+fn5+fn5+fgogCiBUaGUgJ21hbi52aWV3ZXInIGNvbmZpZyB2YXJpYWJsZSB3aWxsIGJlIGNoZWNrZWQgaWYgdGhlICdtYW4nIGZvcm1hdAotaXMgY2hvc2VuLiBPbmx5IHRoZSBmb2xsb3dpbmcgdmFsdWVzIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkOgoraXMgY2hvc2VuLiBUaGUgZm9sbG93aW5nIHZhbHVlcyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZDoKIAogKiAibWFuIjogdXNlIHRoZSAnbWFuJyBwcm9ncmFtIGFzIHVzdWFsLAogKiAid29tYW4iOiB1c2UgJ2VtYWNzY2xpZW50JyB0byBsYXVuY2ggdGhlICJ3b21hbiIgbW9kZSBpbiBlbWFjcwogKHRoaXMgb25seSB3b3JrcyBzdGFydGluZyB3aXRoIGVtYWNzY2xpZW50IHZlcnNpb25zIDIyKSwKLSogImtvbnF1ZXJvciI6IHVzZSBhIG1hbiBLSU8gc2xhdmUgaW4ga29ucXVlcm9yLgorKiAia29ucXVlcm9yIjogdXNlICdrZm1jbGllbnQnIHRvIG9wZW4gdGhlIG1hbiBwYWdlIGluIGEgbmV3IGtvbnF1ZXJvcgordGFiIChzZWUgJ05vdGUgYWJvdXQga29ucXVlcm9yJyBiZWxvdykuCiAKLU11bHRpcGxlIHZhbHVlcyBtYXkgYmUgZ2l2ZW4gdG8gdGhpcyBjb25maWd1cmF0aW9uIHZhcmlhYmxlLiBUaGVpcgotY29ycmVzcG9uZGluZyBwcm9ncmFtcyB3aWxsIGJlIHRyaWVkIGluIHRoZSBvcmRlciBsaXN0ZWQgaW4gdGhlCi1jb25maWd1cmF0aW9uIGZpbGUuCitWYWx1ZXMgZm9yIG90aGVyIHRvb2xzIGNhbiBiZSB1c2VkIGlmIHRoZXJlIGlzIGEgY29ycmVzcG9uZGluZworJ21hbi48dG9vbD4uY21kJyBjb25maWd1cmF0aW9uIGVudHJ5IChzZWUgYmVsb3cpLgorCitNdWx0aXBsZSB2YWx1ZXMgbWF5IGJlIGdpdmVuIHRvIHRoZSAnbWFuLnZpZXdlcicgY29uZmlndXJhdGlvbgordmFyaWFibGUuIFRoZWlyIGNvcnJlc3BvbmRpbmcgcHJvZ3JhbXMgd2lsbCBiZSB0cmllZCBpbiB0aGUgb3JkZXIKK2xpc3RlZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgogCiBGb3IgZXhhbXBsZSwgdGhpcyBjb25maWd1cmF0aW9uOgogCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAlbbWFuXQogCQl2aWV3ZXIgPSBrb25xdWVyb3IKIAkJdmlld2VyID0gd29tYW4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiB3aWxsIHRyeSB0byB1c2Uga29ucXVlcm9yIGZpcnN0LiBCdXQgdGhpcyBtYXkgZmFpbCAoZm9yIGV4YW1wbGUgaWYKIERJU1BMQVkgaXMgbm90IHNldCkgYW5kIGluIHRoYXQgY2FzZSBlbWFjcycgd29tYW4gbW9kZSB3aWxsIGJlIHRyaWVkLgogCiBJZiBldmVyeXRoaW5nIGZhaWxzIHRoZSAnbWFuJyBwcm9ncmFtIHdpbGwgYmUgdHJpZWQgYW55d2F5LgogCittYW4uPHRvb2w+LnBhdGgKK35+fn5+fn5+fn5+fn5+fgorCitZb3UgY2FuIGV4cGxpY2l0bHkgcHJvdmlkZSBhIGZ1bGwgcGF0aCB0byB5b3VyIHByZWZlcnJlZCBtYW4gdmlld2VyIGJ5CitzZXR0aW5nIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlICdtYW4uPHRvb2w+LnBhdGgnLiBGb3IgZXhhbXBsZSwgeW91CitjYW4gY29uZmlndXJlIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIGtvbnF1ZXJvciBieSBzZXR0aW5nCisnbWFuLmtvbnF1ZXJvci5wYXRoJy4gT3RoZXJ3aXNlLCAnZ2l0IGhlbHAnIGFzc3VtZXMgdGhlIHRvb2wgaXMKK2F2YWlsYWJsZSBpbiBQQVRILgorCittYW4uPHRvb2w+LmNtZAorfn5+fn5+fn5+fn5+fn4KKworV2hlbiB0aGUgbWFuIHZpZXdlciwgc3BlY2lmaWVkIGJ5IHRoZSAnbWFuLnZpZXdlcicgY29uZmlndXJhdGlvbgordmFyaWFibGVzLCBpcyBub3QgYW1vbmcgdGhlIHN1cHBvcnRlZCBvbmVzLCB0aGVuIHRoZSBjb3JyZXNwb25kaW5nCisnbWFuLjx0b29sPi5jbWQnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgd2lsbCBiZSBsb29rZWQgdXAuIElmIHRoaXMKK3ZhcmlhYmxlIGV4aXN0cyB0aGVuIHRoZSBzcGVjaWZpZWQgdG9vbCB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBjdXN0b20KK2NvbW1hbmQgYW5kIGEgc2hlbGwgZXZhbCB3aWxsIGJlIHVzZWQgdG8gcnVuIHRoZSBjb21tYW5kIHdpdGggdGhlIG1hbgorcGFnZSBwYXNzZWQgYXMgYXJndW1lbnRzLgorCitOb3RlIGFib3V0IGtvbnF1ZXJvcgorfn5+fn5+fn5+fn5+fn5+fn5+fn4KKworV2hlbiAna29ucXVlcm9yJyBpcyBzcGVjaWZpZWQgaW4gdGhlICdtYW4udmlld2VyJyBjb25maWd1cmF0aW9uCit2YXJpYWJsZSwgd2UgbGF1bmNoICdrZm1jbGllbnQnIHRvIHRyeSB0byBvcGVuIHRoZSBtYW4gcGFnZSBvbiBhbgorYWxyZWFkeSBvcGVuZWQga29ucXVlcm9yIGluIGEgbmV3IHRhYiBpZiBwb3NzaWJsZS4KKworRm9yIGNvbnNpc3RlbmN5LCB3ZSBhbHNvIHRyeSBzdWNoIGEgdHJpY2sgaWYgJ21hbi5rb25xdWVyb3IucGF0aCcgaXMKK3NldCB0byBzb21ldGhpbmcgbGlrZSAnQV9QQVRIX1RPL2tvbnF1ZXJvcicuIFRoYXQgbWVhbnMgd2Ugd2lsbCB0cnkgdG8KK2xhdW5jaCAnQV9QQVRIX1RPL2tmbWNsaWVudCcgaW5zdGVhZC4KKworSWYgeW91IHJlYWxseSB3YW50IHRvIHVzZSAna29ucXVlcm9yJywgdGhlbiB5b3UgY2FuIHVzZSBzb21ldGhpbmcgbGlrZQordGhlIGZvbGxvd2luZzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJW21hbl0KKwkJdmlld2VyID0ga29ucQorCisJW21hbiAia29ucSJdCisJCWNtZCA9IEFfUEFUSF9UTy9rb25xdWVyb3IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBOb3RlIGFib3V0IGdpdCBjb25maWcgLS1nbG9iYWwKIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogCkBAIC0xMjUsMTAgKzE3NiwxMCBAQAogCiBEb2N1bWVudGF0aW9uCiAtLS0tLS0tLS0tLS0tCi1Jbml0aWFsIGRvY3VtZW50YXRpb24gd2FzIHBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIG1hbiBwYWdlLgorSW5pdGlhbCBkb2N1bWVudGF0aW9uIHdhcyBwYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBtYW4gcGFnZS4KIENocmlzdGlhbiBDb3VkZXIgPGNocmlzY29vbEB0dXhmYW1pbHkub3JnPiBleHRyYWN0ZWQgYW5kIHJld3JvdGUgaXQgYQogbGl0dGxlLiBNYWludGVuYW5jZSBpcyBkb25lIGJ5IHRoZSBnaXQtbGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz4uCiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWh0dHAtZmV0Y2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtaHR0cC1mZXRjaC50eHQKaW5kZXggYjc4NGE5ZC4uNzBmYjYzNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtaHR0cC1mZXRjaC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtaHR0cC1mZXRjaC50eHQKQEAgLTUzLDQgKzUzLDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtaHR0cC1wdXNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWh0dHAtcHVzaC50eHQKaW5kZXggMGI4MjcyMi4uZDY5YjIwNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtaHR0cC1wdXNoLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1odHRwLXB1c2gudHh0CkBAIC0xNSw4ICsxNSw4IEBACiBTZW5kcyBtaXNzaW5nIG9iamVjdHMgdG8gcmVtb3RlIHJlcG9zaXRvcnksIGFuZCB1cGRhdGVzIHRoZQogcmVtb3RlIGJyYW5jaC4KIAotKk5PVEUqOiBUaGlzIGNvbW1hbmQgaXMgdGVtcG9yYXJpbHkgZGlzYWJsZWQgaWYgeW91ciBjVVJMCi1saWJyYXJ5IGlzIG9sZGVyIHRoYW4gNy4xNiwgYXMgdGhlIGNvbWJpbmF0aW9uIGhhcyBiZWVuIHJlcG9ydGVkCisqTk9URSo6IFRoaXMgY29tbWFuZCBpcyB0ZW1wb3JhcmlseSBkaXNhYmxlZCBpZiB5b3VyIGxpYmN1cmwKK2lzIG9sZGVyIHRoYW4gNy4xNiwgYXMgdGhlIGNvbWJpbmF0aW9uIGhhcyBiZWVuIHJlcG9ydGVkCiBub3QgdG8gd29yayBhbmQgc29tZXRpbWVzIGNvcnJ1cHRzIHJlcG9zaXRvcnkuCiAKIE9QVElPTlMKQEAgLTQwLDcgKzQwLDggQEAKIAlSZXBvcnQgdGhlIGxpc3Qgb2Ygb2JqZWN0cyBiZWluZyB3YWxrZWQgbG9jYWxseSBhbmQgdGhlCiAJbGlzdCBvZiBvYmplY3RzIHN1Y2Nlc3NmdWxseSBzZW50IHRvIHRoZSByZW1vdGUgcmVwb3NpdG9yeS4KIAotLWQsIC1EOjoKKy1kOjoKKy1EOjoKIAlSZW1vdmUgPHJlZj4gZnJvbSByZW1vdGUgcmVwb3NpdG9yeS4gIFRoZSBzcGVjaWZpZWQgYnJhbmNoCiAJY2Fubm90IGJlIHRoZSByZW1vdGUgSEVBRC4gIElmIC1kIGlzIHNwZWNpZmllZCB0aGUgZm9sbG93aW5nCiAJb3RoZXIgY29uZGl0aW9ucyBtdXN0IGFsc28gYmUgbWV0OgpAQCAtMTAxLDQgKzEwMiw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWltYXAtc2VuZC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1pbWFwLXNlbmQudHh0CmluZGV4IDUyMmI3M2MuLmY0ZmRjMjQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWltYXAtc2VuZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtaW1hcC1zZW5kLnR4dApAQCAtNTksNCArNTksNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1pbmRleC1wYWNrLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWluZGV4LXBhY2sudHh0CmluZGV4IGE3ODI1YjYuLjY0MDkzNjMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWluZGV4LXBhY2sudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWluZGV4LXBhY2sudHh0CkBAIC0xMDAsNCArMTAwLDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtaW5pdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1pbml0LnR4dAppbmRleCA2MjkxNGRhLi43OTI2NDNjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1pbml0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1pbml0LnR4dApAQCAtOCw3ICs4LDcgQEAKIAogU1lOT1BTSVMKIC0tLS0tLS0tCi0nZ2l0LWluaXQnIFstcSB8IC0tcXVpZXRdIFstLXRlbXBsYXRlPTx0ZW1wbGF0ZV9kaXJlY3Rvcnk+XSBbLS1zaGFyZWRbPTxwZXJtaXNzaW9ucz5dXQorJ2dpdC1pbml0JyBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08dGVtcGxhdGVfZGlyZWN0b3J5Pl0gWy0tc2hhcmVkWz08cGVybWlzc2lvbnM+XV0KIAogCiBPUFRJT05TCkBAIC0xNiwxMCArMTYsMTYgQEAKIAogLS0KIAotLXEsIFwtLXF1aWV0OjoKKy1xOjoKKy0tcXVpZXQ6OgogCiBPbmx5IHByaW50IGVycm9yIGFuZCB3YXJuaW5nIG1lc3NhZ2VzLCBhbGwgb3RoZXIgb3V0cHV0IHdpbGwgYmUgc3VwcHJlc3NlZC4KIAorLS1iYXJlOjoKKworQ3JlYXRlIGEgYmFyZSByZXBvc2l0b3J5LiBJZiBHSVRfRElSIGVudmlyb25tZW50IGlzIG5vdCBzZXQsIGl0IGlzIHNldCB0byB0aGUKK2N1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCisKIC0tdGVtcGxhdGU9PHRlbXBsYXRlX2RpcmVjdG9yeT46OgogCiBQcm92aWRlIHRoZSBkaXJlY3RvcnkgZnJvbSB3aGljaCB0ZW1wbGF0ZXMgd2lsbCBiZSB1c2VkLiAgVGhlIGRlZmF1bHQgdGVtcGxhdGUKQEAgLTMxLDcgKzM3LDcgQEAKICJob29rIiBmaWxlcy4gIFRoZSBzdWdnZXN0ZWQgcGF0dGVybnMgYW5kIGhvb2sgZmlsZXMgYXJlIGFsbCBtb2RpZmlhYmxlIGFuZAogZXh0ZW5zaWJsZS4KIAotLS1zaGFyZWRbPXtmYWxzZXx0cnVlfHVtYXNrfGdyb3VwfGFsbHx3b3JsZHxldmVyeWJvZHl9XTo6CistLXNoYXJlZFs9e2ZhbHNlfHRydWV8dW1hc2t8Z3JvdXB8YWxsfHdvcmxkfGV2ZXJ5Ym9keXwweHh4fV06OgogCiBTcGVjaWZ5IHRoYXQgdGhlIGdpdCByZXBvc2l0b3J5IGlzIHRvIGJlIHNoYXJlZCBhbW9uZ3N0IHNldmVyYWwgdXNlcnMuICBUaGlzCiBhbGxvd3MgdXNlcnMgYmVsb25naW5nIHRvIHRoZSBzYW1lIGdyb3VwIHRvIHB1c2ggaW50byB0aGF0CkBAIC01Miw2ICs1OCwxMiBAQAogIC0gJ2FsbCcgKG9yICd3b3JsZCcgb3IgJ2V2ZXJ5Ym9keScpOiBTYW1lIGFzICdncm91cCcsIGJ1dCBtYWtlIHRoZSByZXBvc2l0b3J5CiAgICByZWFkYWJsZSBieSBhbGwgdXNlcnMuCiAKKyAtICcweHh4JzogJzB4eHgnIGlzIGFuIG9jdGFsIG51bWJlciBhbmQgZWFjaCBmaWxlIHdpbGwgaGF2ZSBtb2RlICcweHh4JworICAgQW55IG9wdGlvbiBleGNlcHQgJ3VtYXNrJyBjYW4gYmUgc2V0IHVzaW5nIHRoaXMgb3B0aW9uLiAnMHh4eCcgd2lsbAorICAgb3ZlcnJpZGUgdXNlcnMgdW1hc2soMikgdmFsdWUsIGFuZCB0aHVzLCB1c2VycyB3aXRoIGEgc2FmZSB1bWFzayAoMDA3NykKKyAgIGNhbiB1c2UgdGhpcyBvcHRpb24uICcwNjQwJyB3aWxsIGNyZWF0ZSBhIHJlcG9zaXRvcnkgd2hpY2ggaXMgZ3JvdXAtcmVhZGFibGUKKyAgIGJ1dCBub3Qgd3JpdGFibGUuICcwNjYwJyBpcyBlcXVpdmFsZW50IHRvICdncm91cCcuCisKIEJ5IGRlZmF1bHQsIHRoZSBjb25maWd1cmF0aW9uIGZsYWcgcmVjZWl2ZS5kZW55Tm9uRmFzdEZvcndhcmRzIGlzIGVuYWJsZWQKIGluIHNoYXJlZCByZXBvc2l0b3JpZXMsIHNvIHRoYXQgeW91IGNhbm5vdCBmb3JjZSBhIG5vbiBmYXN0LWZvcndhcmRpbmcgcHVzaAogaW50byBpdC4KQEAgLTExMSw0ICsxMjMsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1pbnN0YXdlYi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1pbnN0YXdlYi50eHQKaW5kZXggNTFmMTUzMi4uN2RhNWI4ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtaW5zdGF3ZWIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWluc3Rhd2ViLnR4dApAQCAtMjAsMjQgKzIwLDI5IEBACiBPUFRJT05TCiAtLS0tLS0tCiAKLS1sfC0tbG9jYWw6OgorLWw6OgorLS1sb2NhbDo6CiAJT25seSBiaW5kIHRoZSB3ZWIgc2VydmVyIHRvIHRoZSBsb2NhbCBJUCAoMTI3LjAuMC4xKS4KIAotLWR8LS1odHRwZDo6CistZDo6CistLWh0dHBkOjoKIAlUaGUgSFRUUCBkYWVtb24gY29tbWFuZC1saW5lIHRoYXQgd2lsbCBiZSBleGVjdXRlZC4KIAlDb21tYW5kLWxpbmUgb3B0aW9ucyBtYXkgYmUgc3BlY2lmaWVkIGhlcmUsIGFuZCB0aGUKIAljb25maWd1cmF0aW9uIGZpbGUgd2lsbCBiZSBhZGRlZCBhdCB0aGUgZW5kIG9mIHRoZSBjb21tYW5kLWxpbmUuCiAJQ3VycmVudGx5IGxpZ2h0dHBkLCBhcGFjaGUyIGFuZCB3ZWJyaWNrIGFyZSBzdXBwb3J0ZWQuCiAJKERlZmF1bHQ6IGxpZ2h0dHBkKQogCi0tbXwtLW1vZHVsZS1wYXRoOjoKKy1tOjoKKy0tbW9kdWxlLXBhdGg6OgogCVRoZSBtb2R1bGUgcGF0aCAob25seSBuZWVkZWQgaWYgaHR0cGQgaXMgQXBhY2hlKS4KIAkoRGVmYXVsdDogL3Vzci9saWIvYXBhY2hlMi9tb2R1bGVzKQogCi0tcHwtLXBvcnQ6OgorLXA6OgorLS1wb3J0OjoKIAlUaGUgcG9ydCBudW1iZXIgdG8gYmluZCB0aGUgaHR0cGQgdG8uICAoRGVmYXVsdDogMTIzNCkKIAotLWJ8LS1icm93c2VyOjoKKy1iOjoKKy0tYnJvd3Nlcjo6CiAJVGhlIHdlYiBicm93c2VyIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gdmlldyB0aGUgZ2l0d2ViCiAJcGFnZS4gVGhpcyB3aWxsIGJlIHBhc3NlZCB0byB0aGUgJ2dpdC13ZWItLWJyb3dzZScgaGVscGVyCiAJc2NyaXB0IGFsb25nIHdpdGggdGhlIFVSTCBvZiB0aGUgZ2l0d2ViIGluc3RhbmNlLiBTZWUKQEAgLTg2LDQgKzkxLDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbG9nLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWxvZy50eHQKaW5kZXggZWJhZWU0Yi4uZGI2MWJjOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtbG9nLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1sb2cudHh0CkBAIC0xMTIsNCArMTEyLDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbG9zdC1mb3VuZC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1sb3N0LWZvdW5kLnR4dAppbmRleCBiMWM3OTdmLi40ZGM0NzVlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1sb3N0LWZvdW5kLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1sb3N0LWZvdW5kLnR4dApAQCAtNzgsNCArNzgsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1scy1maWxlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1scy1maWxlcy50eHQKaW5kZXggZGE5ZWJmNC4uNTYwNTk0ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtbHMtZmlsZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWxzLWZpbGVzLnR4dApAQCAtMzAsMjMgKzMwLDI5IEBACiAKIE9QVElPTlMKIC0tLS0tLS0KLS1jfC0tY2FjaGVkOjoKKy1jOjoKKy0tY2FjaGVkOjoKIAlTaG93IGNhY2hlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IChkZWZhdWx0KQogCi0tZHwtLWRlbGV0ZWQ6OgorLWQ6OgorLS1kZWxldGVkOjoKIAlTaG93IGRlbGV0ZWQgZmlsZXMgaW4gdGhlIG91dHB1dAogCi0tbXwtLW1vZGlmaWVkOjoKKy1tOjoKKy0tbW9kaWZpZWQ6OgogCVNob3cgbW9kaWZpZWQgZmlsZXMgaW4gdGhlIG91dHB1dAogCi0tb3wtLW90aGVyczo6Cistbzo6CistLW90aGVyczo6CiAJU2hvdyBvdGhlciBmaWxlcyBpbiB0aGUgb3V0cHV0CiAKLS1pfC0taWdub3JlZDo6CistaTo6CistLWlnbm9yZWQ6OgogCVNob3cgaWdub3JlZCBmaWxlcyBpbiB0aGUgb3V0cHV0LgogCU5vdGUgdGhhdCB0aGlzIGFsc28gcmV2ZXJzZXMgYW55IGV4Y2x1ZGUgbGlzdCBwcmVzZW50LgogCi0tc3wtLXN0YWdlOjoKKy1zOjoKKy0tc3RhZ2U6OgogCVNob3cgc3RhZ2UgZmlsZXMgaW4gdGhlIG91dHB1dAogCiAtLWRpcmVjdG9yeTo6CkBAIC01NiwxMCArNjIsMTIgQEAKIC0tbm8tZW1wdHktZGlyZWN0b3J5OjoKIAlEbyBub3QgbGlzdCBlbXB0eSBkaXJlY3Rvcmllcy4gSGFzIG5vIGVmZmVjdCB3aXRob3V0IC0tZGlyZWN0b3J5LgogCi0tdXwtLXVubWVyZ2VkOjoKKy11OjoKKy0tdW5tZXJnZWQ6OgogCVNob3cgdW5tZXJnZWQgZmlsZXMgaW4gdGhlIG91dHB1dCAoZm9yY2VzIC0tc3RhZ2UpCiAKLS1rfC0ta2lsbGVkOjoKKy1rOjoKKy0ta2lsbGVkOjoKIAlTaG93IGZpbGVzIG9uIHRoZSBmaWxlc3lzdGVtIHRoYXQgbmVlZCB0byBiZSByZW1vdmVkIGR1ZQogCXRvIGZpbGUvZGlyZWN0b3J5IGNvbmZsaWN0cyBmb3IgY2hlY2tvdXQtaW5kZXggdG8KIAlzdWNjZWVkLgpAQCAtNjcsMTEgKzc1LDEzIEBACiAtejo6CiAJXDAgbGluZSB0ZXJtaW5hdGlvbiBvbiBvdXRwdXQuCiAKLS14fC0tZXhjbHVkZT08cGF0dGVybj46OgorLXggPHBhdHRlcm4+OjoKKy0tZXhjbHVkZT08cGF0dGVybj46OgogCVNraXBzIGZpbGVzIG1hdGNoaW5nIHBhdHRlcm4uCiAJTm90ZSB0aGF0IHBhdHRlcm4gaXMgYSBzaGVsbCB3aWxkY2FyZCBwYXR0ZXJuLgogCi0tWHwtLWV4Y2x1ZGUtZnJvbT08ZmlsZT46OgorLVggPGZpbGU+OjoKKy0tZXhjbHVkZS1mcm9tPTxmaWxlPjo6CiAJZXhjbHVkZSBwYXR0ZXJucyBhcmUgcmVhZCBmcm9tIDxmaWxlPjsgMSBwZXIgbGluZS4KIAogLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9PGZpbGU+OjoKQEAgLTE3Nyw3ICsxODcsNyBAQAogYnkgLS1leGNsdWRlLXBlci1kaXJlY3RvcnkgaXMgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSB0aGF0IHRoZQogcGF0dGVybiBmaWxlIGFwcGVhcnMgaW4uCiAKLVNlZSBBbHNvCitTRUUgQUxTTwogLS0tLS0tLS0KIGxpbmtnaXQ6Z2l0LXJlYWQtdHJlZVsxXSwgbGlua2dpdDpnaXRpZ25vcmVbNV0KIApAQCAtMTkyLDQgKzIwMiw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWxzLXJlbW90ZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1scy1yZW1vdGUudHh0CmluZGV4IGM1YmEwYWEuLmYyODIxNjQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWxzLXJlbW90ZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbHMtcmVtb3RlLnR4dApAQCAtMjAsMTMgKzIwLDE3IEBACiAKIE9QVElPTlMKIC0tLS0tLS0KLS1ofC0taGVhZHMsIC10fC0tdGFnczo6CistaDo6CistLWhlYWRzOjoKKy10OjoKKy0tdGFnczo6CiAJTGltaXQgdG8gb25seSByZWZzL2hlYWRzIGFuZCByZWZzL3RhZ3MsIHJlc3BlY3RpdmVseS4KIAlUaGVzZSBvcHRpb25zIGFyZSBfbm90XyBtdXR1YWxseSBleGNsdXNpdmU7IHdoZW4gZ2l2ZW4KIAlib3RoLCByZWZlcmVuY2VzIHN0b3JlZCBpbiByZWZzL2hlYWRzIGFuZCByZWZzL3RhZ3MgYXJlCiAJZGlzcGxheWVkLgogCi0tdSA8ZXhlYz4sIC0tdXBsb2FkLXBhY2s9PGV4ZWM+OjoKKy11IDxleGVjPjo6CistLXVwbG9hZC1wYWNrPTxleGVjPjo6CiAJU3BlY2lmeSB0aGUgZnVsbCBwYXRoIG9mIGxpbmtnaXQ6Z2l0LXVwbG9hZC1wYWNrWzFdIG9uIHRoZSByZW1vdGUKIAlob3N0LiBUaGlzIGFsbG93cyBsaXN0aW5nIHJlZmVyZW5jZXMgZnJvbSByZXBvc2l0b3JpZXMgYWNjZXNzZWQgdmlhCiAJU1NIIGFuZCB3aGVyZSB0aGUgU1NIIGRhZW1vbiBkb2VzIG5vdCB1c2UgdGhlIFBBVEggY29uZmlndXJlZCBieSB0aGUKQEAgLTY1LDggKzY5LDggQEAKIAogQXV0aG9yCiAtLS0tLS0KLVdyaXR0ZW4gYnkgSnVuaW8gQyBIYW1hbm8gPGp1bmtpb0Bjb3gubmV0PgorV3JpdHRlbiBieSBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWxzLXRyZWUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbHMtdHJlZS50eHQKaW5kZXggMzYwYzBhMS4uODk1NWI3MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtbHMtdHJlZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbHMtdHJlZS50eHQKQEAgLTgxLDcgKzgxLDcgQEAKIEF1dGhvcgogLS0tLS0tCiBXcml0dGVuIGJ5IFBldHIgQmF1ZGlzIDxwYXNreUBzdXNlLmN6PgotQ29tcGxldGVseSByZXdyaXR0ZW4gZnJvbSBzY3JhdGNoIGJ5IEp1bmlvIEMgSGFtYW5vIDxqdW5raW9AY294Lm5ldD4sCitDb21wbGV0ZWx5IHJld3JpdHRlbiBmcm9tIHNjcmF0Y2ggYnkgSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPiwKIGFub3RoZXIgbWFqb3IgcmV3cml0ZSBieSBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAb3NkbC5vcmc+CiAKIERvY3VtZW50YXRpb24KQEAgLTkxLDQgKzkxLDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbWFpbGluZm8udHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbWFpbGluZm8udHh0CmluZGV4IDM4NDZmMGUuLjBiMjNmYWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LW1haWxpbmZvLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1tYWlsaW5mby50eHQKQEAgLTgsNyArOCw3IEBACiAKIFNZTk9QU0lTCiAtLS0tLS0tLQotJ2dpdC1tYWlsaW5mbycgWy1rXSBbLXUgfCAtLWVuY29kaW5nPTxlbmNvZGluZz5dIDxtc2c+IDxwYXRjaD4KKydnaXQtbWFpbGluZm8nIFsta10gWy11IHwgLS1lbmNvZGluZz08ZW5jb2Rpbmc+IHwgLW5dIDxtc2c+IDxwYXRjaD4KIAogCiBERVNDUklQVElPTgpAQCAtNDYsNiArNDYsOSBAQAogCWZyb20gd2hhdCBpcyBzcGVjaWZpZWQgYnkgaTE4bi5jb21taXRlbmNvZGluZywgdGhpcyBmbGFnCiAJY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgaXQuCiAKKy1uOjoKKwlEaXNhYmxlIGFsbCBjaGFyc2V0IHJlLWNvZGluZyBvZiB0aGUgbWV0YWRhdGEuCisKIDxtc2c+OjoKIAlUaGUgY29tbWl0IGxvZyBtZXNzYWdlIGV4dHJhY3RlZCBmcm9tIGUtbWFpbCwgdXN1YWxseQogCWV4Y2VwdCB0aGUgdGl0bGUgbGluZSB3aGljaCBjb21lcyBmcm9tIGUtbWFpbCBTdWJqZWN0LgpAQCAtNTcsNyArNjAsNyBAQAogQXV0aG9yCiAtLS0tLS0KIFdyaXR0ZW4gYnkgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPiBhbmQKLUp1bmlvIEMgSGFtYW5vIDxqdW5raW9AY294Lm5ldD4KK0p1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KIAogCiBEb2N1bWVudGF0aW9uCkBAIC02Niw0ICs2OSw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW1haWxzcGxpdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1tYWlsc3BsaXQudHh0CmluZGV4IDgyNDNmNjkuLjFhMGRmMzggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LW1haWxzcGxpdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWFpbHNwbGl0LnR4dApAQCAtMjcsNyArMjcsNyBAQAogCVJvb3Qgb2YgdGhlIE1haWxkaXIgdG8gc3BsaXQuIFRoaXMgZGlyZWN0b3J5IHNob3VsZCBjb250YWluIHRoZSBjdXIsIHRtcAogCWFuZCBuZXcgc3ViZGlyZWN0b3JpZXMuCiAKLTxkaXJlY3Rvcnk+OjoKKy1vPGRpcmVjdG9yeT46OgogCURpcmVjdG9yeSBpbiB3aGljaCB0byBwbGFjZSB0aGUgaW5kaXZpZHVhbCBtZXNzYWdlcy4KIAogLWI6OgpAQCAtNDYsNyArNDYsNyBAQAogQXV0aG9yCiAtLS0tLS0KIFdyaXR0ZW4gYnkgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPgotYW5kIEp1bmlvIEMgSGFtYW5vIDxqdW5raW9AY294Lm5ldD4KK2FuZCBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CiAKIAogRG9jdW1lbnRhdGlvbgpAQCAtNTUsNCArNTUsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS1iYXNlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLWJhc2UudHh0CmluZGV4IDA3Zjc4YjQuLmJiZTg1MTIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLWJhc2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLWJhc2UudHh0CkBAIC0zOSw0ICszOSw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLWZpbGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtZmlsZS50eHQKaW5kZXggYzUxMzE4NC4uMTQ5ZjEzMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtZmlsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtZmlsZS50eHQKQEAgLTg5LDQgKzg5LDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtaW5kZXgudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtaW5kZXgudHh0CmluZGV4IDE5ZWUwMTcuLmEwZWFkMmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLWluZGV4LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS1pbmRleC50eHQKQEAgLTg0LDQgKzg0LDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2Utb25lLWZpbGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2Utb25lLWZpbGUudHh0CmluZGV4IGVlOTVkZjMuLjU0NmViZTggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLW9uZS1maWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS1vbmUtZmlsZS50eHQKQEAgLTE4LDcgKzE4LDcgQEAKIEF1dGhvcgogLS0tLS0tCiBXcml0dGVuIGJ5IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0Bvc2RsLm9yZz4sCi1KdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+IGFuZCBQZXRyIEJhdWRpcyA8cGFza3lAc3VzZS5jej4uCitKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+IGFuZCBQZXRyIEJhdWRpcyA8cGFza3lAc3VzZS5jej4uCiAKIERvY3VtZW50YXRpb24KIC0tLS0tLS0tLS0tLS0tCkBAIC0yNiw0ICsyNiw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLXRyZWUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtdHJlZS50eHQKaW5kZXggNGNjMDk2NC4uYjc4NWUwZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtdHJlZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtdHJlZS50eHQKQEAgLTMzLDQgKzMzLDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UudHh0CmluZGV4IGMxMzZiMTAuLmIwNWUwY2UgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS50eHQKQEAgLTksNyArOSw3IEBACiBTWU5PUFNJUwogLS0tLS0tLS0KIFt2ZXJzZV0KLSdnaXQtbWVyZ2UnIFstbl0gWy0tc3VtbWFyeV0gWy0tbm8tY29tbWl0XSBbLS1zcXVhc2hdIFstcyA8c3RyYXRlZ3k+XS4uLgorJ2dpdC1tZXJnZScgWy1uXSBbLS1zdGF0XSBbLS1uby1jb21taXRdIFstLXNxdWFzaF0gWy1zIDxzdHJhdGVneT5dLi4uCiAJWy1tIDxtc2c+XSA8cmVtb3RlPiA8cmVtb3RlPi4uLgogJ2dpdC1tZXJnZScgPG1zZz4gSEVBRCA8cmVtb3RlPi4uLgogCkBAIC00NiwxOCArNDYsNyBAQAogCiBDT05GSUdVUkFUSU9OCiAtLS0tLS0tLS0tLS0tCi0KLW1lcmdlLnN1bW1hcnk6OgotCVdoZXRoZXIgdG8gaW5jbHVkZSBzdW1tYXJpZXMgb2YgbWVyZ2VkIGNvbW1pdHMgaW4gbmV3bHkKLQljcmVhdGVkIG1lcmdlIGNvbW1pdC4gRmFsc2UgYnkgZGVmYXVsdC4KLQotbWVyZ2UudmVyYm9zaXR5OjoKLQlDb250cm9scyB0aGUgYW1vdW50IG9mIG91dHB1dCBzaG93biBieSB0aGUgcmVjdXJzaXZlIG1lcmdlCi0Jc3RyYXRlZ3kuICBMZXZlbCAwIG91dHB1dHMgbm90aGluZyBleGNlcHQgYSBmaW5hbCBlcnJvcgotCW1lc3NhZ2UgaWYgY29uZmxpY3RzIHdlcmUgZGV0ZWN0ZWQuIExldmVsIDEgb3V0cHV0cyBvbmx5Ci0JY29uZmxpY3RzLCAyIG91dHB1dHMgY29uZmxpY3RzIGFuZCBmaWxlIGNoYW5nZXMuICBMZXZlbCA1IGFuZAotCWFib3ZlIG91dHB1dHMgZGVidWdnaW5nIGluZm9ybWF0aW9uLiAgVGhlIGRlZmF1bHQgaXMgbGV2ZWwgMi4KLQlDYW4gYmUgb3ZlcnJpZGRlbiBieSAnR0lUX01FUkdFX1ZFUkJPU0lUWScgZW52aXJvbm1lbnQgdmFyaWFibGUuCitpbmNsdWRlOjptZXJnZS1jb25maWcudHh0W10KIAogYnJhbmNoLjxuYW1lPi5tZXJnZW9wdGlvbnM6OgogCVNldHMgZGVmYXVsdCBvcHRpb25zIGZvciBtZXJnaW5nIGludG8gYnJhbmNoIDxuYW1lPi4gVGhlIHN5bnRheCBhbmQKQEAgLTE3MCw3ICsxNTksNyBAQAogCiBBdXRob3IKIC0tLS0tLQotV3JpdHRlbiBieSBKdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+CitXcml0dGVuIGJ5IEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KIAogCiBEb2N1bWVudGF0aW9uCkBAIC0xNzksNCArMTY4LDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2V0b29sLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdldG9vbC50eHQKaW5kZXggOGVkNDQ5NC4uODM1MjU2MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2V0b29sLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZXRvb2wudHh0CkBAIC03MCw0ICs3MCw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW1rdGFnLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW1rdGFnLnR4dAppbmRleCA4MmRiOWY1Li4yMzJiYzFhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1ta3RhZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWt0YWcudHh0CkBAIC00Myw0ICs0Myw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW1rdHJlZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1ta3RyZWUudHh0CmluZGV4IGYzMTIwMzYuLjY5MjdlYjkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LW1rdHJlZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWt0cmVlLnR4dApAQCAtMjMsNyArMjMsNyBAQAogCiBBdXRob3IKIC0tLS0tLQotV3JpdHRlbiBieSBKdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+CitXcml0dGVuIGJ5IEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KIAogRG9jdW1lbnRhdGlvbgogLS0tLS0tLS0tLS0tLS0KQEAgLTMxLDQgKzMxLDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbXYudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbXYudHh0CmluZGV4IGJmZjNmYmUuLjMzOTE5MDYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LW12LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1tdi50eHQKQEAgLTM0LDcgKzM0LDggQEAKIAljb25kaXRpb24uIEFuIGVycm9yIGhhcHBlbnMgd2hlbiBhIHNvdXJjZSBpcyBuZWl0aGVyIGV4aXN0aW5nIG5vcgogICAgICAgICBjb250cm9sbGVkIGJ5IEdJVCwgb3Igd2hlbiBpdCB3b3VsZCBvdmVyd3JpdGUgYW4gZXhpc3RpbmcKICAgICAgICAgZmlsZSB1bmxlc3MgJy1mJyBpcyBnaXZlbi4KLS1uLCBcLS1kcnktcnVuOjoKKy1uOjoKKy0tZHJ5LXJ1bjo6CiAJRG8gbm90aGluZzsgb25seSBzaG93IHdoYXQgd291bGQgaGFwcGVuCiAKIApAQCAtNTAsNCArNTEsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1uYW1lLXJldi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1uYW1lLXJldi50eHQKaW5kZXggZWZjYWJkYy4uODNkOGU0YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtbmFtZS1yZXYudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW5hbWUtcmV2LnR4dApAQCAtMzgsOCArMzgsMTQgQEAKIAlJbnN0ZWFkIG9mIHByaW50aW5nIGJvdGggdGhlIFNIQS0xIGFuZCB0aGUgbmFtZSwgcHJpbnQgb25seQogCXRoZSBuYW1lLiAgSWYgZ2l2ZW4gd2l0aCAtLXRhZ3MgdGhlIHVzdWFsIHRhZyBwcmVmaXggb2YKIAkidGFncy8iIGlzIGFsc28gb21pdHRlZCBmcm9tIHRoZSBuYW1lLCBtYXRjaGluZyB0aGUgb3V0cHV0Ci0Jb2YgbGlua2dpdDpnaXQtZGVzY3JpYmVbMV0gbW9yZSBjbG9zZWx5LiAgVGhpcyBvcHRpb24KLQljYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtLXN0ZGluLgorCW9mIGxpbmtnaXQ6Z2l0LWRlc2NyaWJlWzFdIG1vcmUgY2xvc2VseS4KKworLS1uby11bmRlZmluZWQ6OgorCURpZSB3aXRoIGVycm9yIGNvZGUgIT0gMCB3aGVuIGEgcmVmZXJlbmNlIGlzIHVuZGVmaW5lZCwKKwlpbnN0ZWFkIG9mIHByaW50aW5nIGB1bmRlZmluZWRgLgorCistLWFsd2F5czo6CisJU2hvdyB1bmlxdWVseSBhYmJyZXZpYXRlZCBjb21taXQgb2JqZWN0IGFzIGZhbGxiYWNrLgogCiBFWEFNUExFCiAtLS0tLS0tCkBAIC03NSw0ICs4MSw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXBhY2stb2JqZWN0cy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1wYWNrLW9iamVjdHMudHh0CmluZGV4IDNhMWJlMDguLmY0ZDhkNjggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXBhY2stb2JqZWN0cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcGFjay1vYmplY3RzLnR4dApAQCAtNzksNyArNzksOCBAQAogCXJlZmVyZW5jZSB3YXMgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdGluZyBwYWNrZmlsZS4gIFRoaXMKIAljYW4gYmUgdXNlZnVsIHRvIHNlbmQgbmV3IHRhZ3MgdG8gbmF0aXZlIGdpdCBjbGllbnRzLgogCi0tLXdpbmRvdz1bTl0sIC0tZGVwdGg9W05dOjoKKy0td2luZG93PVtOXTo6CistLWRlcHRoPVtOXTo6CiAJVGhlc2UgdHdvIG9wdGlvbnMgYWZmZWN0IGhvdyB0aGUgb2JqZWN0cyBjb250YWluZWQgaW4KIAl0aGUgcGFjayBhcmUgc3RvcmVkIHVzaW5nIGRlbHRhIGNvbXByZXNzaW9uLiAgVGhlCiAJb2JqZWN0cyBhcmUgZmlyc3QgaW50ZXJuYWxseSBzb3J0ZWQgYnkgdHlwZSwgc2l6ZSBhbmQKQEAgLTIwMCw3ICsyMDEsNyBAQAogLS0tLS0tLS0tLS0tLQogRG9jdW1lbnRhdGlvbiBieSBKdW5pbyBDIEhhbWFubwogCi1TZWUgQWxzbworU0VFIEFMU08KIC0tLS0tLS0tCiBsaW5rZ2l0OmdpdC1yZXYtbGlzdFsxXQogbGlua2dpdDpnaXQtcmVwYWNrWzFdCkBAIC0yMDgsNCArMjA5LDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcGFjay1yZWR1bmRhbnQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcGFjay1yZWR1bmRhbnQudHh0CmluZGV4IGFmNGFhNGEuLjY3MzczMjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXBhY2stcmVkdW5kYW50LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1wYWNrLXJlZHVuZGFudC50eHQKQEAgLTQ2LDcgKzQ2LDcgQEAKIC0tLS0tLS0tLS0tLS0tCiBEb2N1bWVudGF0aW9uIGJ5IEx1a2FzIFNhbmRzdHLDtm0gPGx1a2Fzc0BldGVrLmNoYWxtZXJzLnNlPgogCi1TZWUgQWxzbworU0VFIEFMU08KIC0tLS0tLS0tCiBsaW5rZ2l0OmdpdC1wYWNrLW9iamVjdHNbMV0KIGxpbmtnaXQ6Z2l0LXJlcGFja1sxXQpAQCAtNTQsNCArNTQsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1wYWNrLXJlZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcGFjay1yZWZzLnR4dAppbmRleCBlNGZmOTM0Li5jMDcxODQ2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1wYWNrLXJlZnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXBhY2stcmVmcy50eHQKQEAgLTQyLDcgKzQyLDcgQEAKIE9QVElPTlMKIC0tLS0tLS0KIAotXC0tYWxsOjoKKy0tYWxsOjoKIAogVGhlIGNvbW1hbmQgYnkgZGVmYXVsdCBwYWNrcyBhbGwgdGFncyBhbmQgcmVmcyB0aGF0IGFyZSBhbHJlYWR5CiBwYWNrZWQsIGFuZCBsZWF2ZXMgb3RoZXIgcmVmcwpAQCAtNTEsNyArNTEsNyBAQAogVGhpcyBvcHRpb24gY2F1c2VzIGJyYW5jaCB0aXBzIHRvIGJlIHBhY2tlZCBhcyB3ZWxsLiAgVXNlZnVsIGZvcgogYSByZXBvc2l0b3J5IHdpdGggbWFueSBicmFuY2hlcyBvZiBoaXN0b3JpY2FsIGludGVyZXN0cy4KIAotXC0tbm8tcHJ1bmU6OgorLS1uby1wcnVuZTo6CiAKIFRoZSBjb21tYW5kIHVzdWFsbHkgcmVtb3ZlcyBsb29zZSByZWZzIHVuZGVyIGAkR0lUX0RJUi9yZWZzYAogaGllcmFyY2h5IGFmdGVyIHBhY2tpbmcgdGhlbS4gIFRoaXMgb3B0aW9uIHRlbGxzIGl0IG5vdCB0by4KQEAgLTYzLDQgKzYzLDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcGFyc2UtcmVtb3RlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXBhcnNlLXJlbW90ZS50eHQKaW5kZXggZGViOGIyZi4uOTUxZGJkNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcGFyc2UtcmVtb3RlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1wYXJzZS1yZW1vdGUudHh0CkBAIC00Nyw0ICs0Nyw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXBhdGNoLWlkLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXBhdGNoLWlkLnR4dAppbmRleCA4OTQ4NTJhLi5iYjhhMDc5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1wYXRjaC1pZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcGF0Y2gtaWQudHh0CkBAIC0zOSw0ICszOSw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXBlZWstcmVtb3RlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXBlZWstcmVtb3RlLnR4dAppbmRleCAwMDAxNzEwLi4zZmIxN2Y5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1wZWVrLXJlbW90ZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcGVlay1yZW1vdGUudHh0CkBAIC0xNiw3ICsxNiw3IEBACiAKIE9QVElPTlMKIC0tLS0tLS0KLVwtLXVwbG9hZC1wYWNrPTxnaXQtdXBsb2FkLXBhY2s+OjoKKy0tdXBsb2FkLXBhY2s9PGdpdC11cGxvYWQtcGFjaz46OgogCVVzZSB0aGlzIHRvIHNwZWNpZnkgdGhlIHBhdGggdG8gJ2dpdC11cGxvYWQtcGFjaycgb24gdGhlCiAJcmVtb3RlIHNpZGUsIGlmIGl0IGlzIG5vdCBmb3VuZCBvbiB5b3VyICRQQVRILiBTb21lCiAJaW5zdGFsbGF0aW9ucyBvZiBzc2hkIGlnbm9yZXMgdGhlIHVzZXIncyBlbnZpcm9ubWVudApAQCAtMzksNyArMzksNyBAQAogCiBBdXRob3IKIC0tLS0tLQotV3JpdHRlbiBieSBKdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+CitXcml0dGVuIGJ5IEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KIAogRG9jdW1lbnRhdGlvbgogLS0tLS0tLS0tLS0tLS0KQEAgLTQ3LDQgKzQ3LDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcHJ1bmUtcGFja2VkLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXBydW5lLXBhY2tlZC50eHQKaW5kZXggOTNlZTgyYS4uZjMzMGI4YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcHJ1bmUtcGFja2VkLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1wcnVuZS1wYWNrZWQudHh0CkBAIC00MiwxMSArNDIsMTEgQEAKIC0tLS0tLS0tLS0tLS0tCiBEb2N1bWVudGF0aW9uIGJ5IFJ5YW4gQW5kZXJzb24gPHJ5YW5AbWljaG9ubGluZS5jb20+CiAKLVNlZSBBbHNvCitTRUUgQUxTTwogLS0tLS0tLS0KIGxpbmtnaXQ6Z2l0LXBhY2stb2JqZWN0c1sxXQogbGlua2dpdDpnaXQtcmVwYWNrWzFdCiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXBydW5lLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXBydW5lLnR4dAppbmRleCBmMTUxY2ZmLi5lYzMzNWQ2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1wcnVuZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcHJ1bmUudHh0CkBAIC0xMywxNCArMTMsMjAgQEAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQogCitOT1RFOiBJbiBtb3N0IGNhc2VzLCB1c2VycyBzaG91bGQgcnVuIGxpbmtnaXQ6Z2l0LWdjWzFdLCB3aGljaCBjYWxscworZ2l0LXBydW5lLiBTZWUgdGhlIHNlY3Rpb24gIk5PVEVTIiwgYmVsb3cuCisKIFRoaXMgcnVucyBgZ2l0LWZzY2sgLS11bnJlYWNoYWJsZWAgdXNpbmcgYWxsIHRoZSByZWZzCiBhdmFpbGFibGUgaW4gYCRHSVRfRElSL3JlZnNgLCBvcHRpb25hbGx5IHdpdGggYWRkaXRpb25hbCBzZXQgb2YKLW9iamVjdHMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUsIGFuZCBwcnVuZXMgYWxsCitvYmplY3RzIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLCBhbmQgcHJ1bmVzIGFsbCB1bnBhY2tlZAogb2JqZWN0cyB1bnJlYWNoYWJsZSBmcm9tIGFueSBvZiB0aGVzZSBoZWFkIG9iamVjdHMgZnJvbSB0aGUgb2JqZWN0IGRhdGFiYXNlLgogSW4gYWRkaXRpb24sIGl0CiBwcnVuZXMgdGhlIHVucGFja2VkIG9iamVjdHMgdGhhdCBhcmUgYWxzbyBmb3VuZCBpbiBwYWNrcyBieQogcnVubmluZyBgZ2l0IHBydW5lLXBhY2tlZGAuCiAKK05vdGUgdGhhdCB1bnJlYWNoYWJsZSwgcGFja2VkIG9iamVjdHMgd2lsbCByZW1haW4uICBJZiB0aGlzIGlzCitub3QgZGVzaXJlZCwgc2VlIGxpbmtnaXQ6Z2l0LXJlcGFja1sxXS4KKwogT1BUSU9OUwogLS0tLS0tLQogCkBAIC0zMSw3ICszNyw3IEBACiBcLS06OgogCURvIG5vdCBpbnRlcnByZXQgYW55IG1vcmUgYXJndW1lbnRzIGFzIG9wdGlvbnMuCiAKLVwtLWV4cGlyZSA8dGltZT46OgorLS1leHBpcmUgPHRpbWU+OjoKIAlPbmx5IGV4cGlyZSBsb29zZSBvYmplY3RzIG9sZGVyIHRoYW4gPHRpbWU+LgogCiA8aGVhZD4uLi46OgpAQCAtNTAsNiArNTYsMjMgQEAKICQgZ2l0IHBydW5lICQoY2QgLi4vYW5vdGhlciAmJiAkKGdpdC1yZXYtcGFyc2UgLS1hbGwpKQogLS0tLS0tLS0tLS0tCiAKK05vdGVzCistLS0tLQorCitJbiBtb3N0IGNhc2VzLCB1c2VycyB3aWxsIG5vdCBuZWVkIHRvIGNhbGwgZ2l0LXBydW5lIGRpcmVjdGx5LCBidXQKK3Nob3VsZCBpbnN0ZWFkIGNhbGwgbGlua2dpdDpnaXQtZ2NbMV0sIHdoaWNoIGhhbmRsZXMgcHJ1bmluZyBhbG9uZyB3aXRoCittYW55IG90aGVyIGhvdXNla2VlcGluZyB0YXNrcy4KKworRm9yIGEgZGVzY3JpcHRpb24gb2Ygd2hpY2ggb2JqZWN0cyBhcmUgY29uc2lkZXJlZCBmb3IgcHJ1bmluZywgc2VlCitnaXQtZnNjaydzIC0tdW5yZWFjaGFibGUgb3B0aW9uLgorCitTRUUgQUxTTworLS0tLS0tLS0KKworbGlua2dpdDpnaXQtZnNja1sxXSwKK2xpbmtnaXQ6Z2l0LWdjWzFdLAorbGlua2dpdDpnaXQtcmVmbG9nWzFdCisKIEF1dGhvcgogLS0tLS0tCiBXcml0dGVuIGJ5IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0Bvc2RsLm9yZz4KQEAgLTYwLDQgKzgzLDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcHVsbC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1wdWxsLnR4dAppbmRleCAzNDA1Y2EwLi5jNzMxYmRjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1wdWxsLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1wdWxsLnR4dApAQCAtMzAsNyArMzAsNyBAQAogCiA6Z2l0LXB1bGw6IDEKIAotXC0tcmViYXNlOjoKKy0tcmViYXNlOjoKIAlJbnN0ZWFkIG9mIGEgbWVyZ2UsIHBlcmZvcm0gYSByZWJhc2UgYWZ0ZXIgZmV0Y2hpbmcuICBJZgogCXRoZXJlIGlzIGEgcmVtb3RlIHJlZiBmb3IgdGhlIHVwc3RyZWFtIGJyYW5jaCwgYW5kIHRoaXMgYnJhbmNoCiAJd2FzIHJlYmFzZWQgc2luY2UgbGFzdCBmZXRjaGVkLCB0aGUgcmViYXNlIHVzZXMgdGhhdCBpbmZvcm1hdGlvbgpAQCAtMzgsMTMgKzM4LDE0IEBACiAJZm9yIGJyYW5jaCBgPG5hbWU+YCwgc2V0IGNvbmZpZ3VyYXRpb24gYGJyYW5jaC48bmFtZT4ucmViYXNlYAogCXRvIGB0cnVlYC4KICsKLSpOT1RFOiogVGhpcyBpcyBhIHBvdGVudGlhbGx5IF9kYW5nZXJvdXNfIG1vZGUgb2Ygb3BlcmF0aW9uLgorW05PVEVdCitUaGlzIGlzIGEgcG90ZW50aWFsbHkgX2Rhbmdlcm91c18gbW9kZSBvZiBvcGVyYXRpb24uCiBJdCByZXdyaXRlcyBoaXN0b3J5LCB3aGljaCBkb2VzIG5vdCBib2RlIHdlbGwgd2hlbiB5b3UKIHB1Ymxpc2hlZCB0aGF0IGhpc3RvcnkgYWxyZWFkeS4gIERvICpub3QqIHVzZSB0aGlzIG9wdGlvbgogdW5sZXNzIHlvdSBoYXZlIHJlYWQgbGlua2dpdDpnaXQtcmViYXNlWzFdIGNhcmVmdWxseS4KIAotXC0tbm8tcmViYXNlOjoKLQlPdmVycmlkZSBlYXJsaWVyIFwtLXJlYmFzZS4KKy0tbm8tcmViYXNlOjoKKwlPdmVycmlkZSBlYXJsaWVyIC0tcmViYXNlLgogCiBpbmNsdWRlOjpmZXRjaC1vcHRpb25zLnR4dFtdCiAKQEAgLTExMSw0MCArMTEyLDU4IEBACiBFWEFNUExFUwogLS0tLS0tLS0KIAotZ2l0IHB1bGwsIGdpdCBwdWxsIG9yaWdpbjo6Ci0JVXBkYXRlIHRoZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgZm9yIHRoZSByZXBvc2l0b3J5Ci0JeW91IGNsb25lZCBmcm9tLCB0aGVuIG1lcmdlIG9uZSBvZiB0aGVtIGludG8geW91cgotCWN1cnJlbnQgYnJhbmNoLiAgTm9ybWFsbHkgdGhlIGJyYW5jaCBtZXJnZWQgaW4gaXMKLQl0aGUgSEVBRCBvZiB0aGUgcmVtb3RlIHJlcG9zaXRvcnksIGJ1dCB0aGUgY2hvaWNlIGlzCi0JZGV0ZXJtaW5lZCBieSB0aGUgYnJhbmNoLjxuYW1lPi5yZW1vdGUgYW5kCi0JYnJhbmNoLjxuYW1lPi5tZXJnZSBvcHRpb25zOyBzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdCi0JZm9yIGRldGFpbHMuCisqIFVwZGF0ZSB0aGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIGZvciB0aGUgcmVwb3NpdG9yeQorICB5b3UgY2xvbmVkIGZyb20sIHRoZW4gbWVyZ2Ugb25lIG9mIHRoZW0gaW50byB5b3VyCisgIGN1cnJlbnQgYnJhbmNoOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBwdWxsLCBnaXQgcHVsbCBvcmlnaW4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworTm9ybWFsbHkgdGhlIGJyYW5jaCBtZXJnZWQgaW4gaXMgdGhlIEhFQUQgb2YgdGhlIHJlbW90ZSByZXBvc2l0b3J5LAorYnV0IHRoZSBjaG9pY2UgaXMgZGV0ZXJtaW5lZCBieSB0aGUgYnJhbmNoLjxuYW1lPi5yZW1vdGUgYW5kCiticmFuY2guPG5hbWU+Lm1lcmdlIG9wdGlvbnM7IHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0gZm9yIGRldGFpbHMuCiAKLWdpdCBwdWxsIG9yaWdpbiBuZXh0OjoKLQlNZXJnZSBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaCB0aGUgcmVtb3RlIGJyYW5jaCBgbmV4dGA7Ci0JbGVhdmVzIGEgY29weSBvZiBgbmV4dGAgdGVtcG9yYXJpbHkgaW4gRkVUQ0hfSEVBRCwgYnV0Ci0JZG9lcyBub3QgdXBkYXRlIGFueSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMuCisqIE1lcmdlIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoIHRoZSByZW1vdGUgYnJhbmNoIGBuZXh0YDoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcHVsbCBvcmlnaW4gbmV4dAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitUaGlzIGxlYXZlcyBhIGNvcHkgb2YgYG5leHRgIHRlbXBvcmFyaWx5IGluIEZFVENIX0hFQUQsIGJ1dAorZG9lcyBub3QgdXBkYXRlIGFueSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMuCiAKLWdpdCBwdWxsIC4gZml4ZXMgZW5oYW5jZW1lbnRzOjoKLQlCdW5kbGUgbG9jYWwgYnJhbmNoIGBmaXhlc2AgYW5kIGBlbmhhbmNlbWVudHNgIG9uIHRvcCBvZgotCXRoZSBjdXJyZW50IGJyYW5jaCwgbWFraW5nIGFuIE9jdG9wdXMgbWVyZ2UuICBUaGlzIGBnaXQgcHVsbCAuYAotCXN5bnRheCBpcyBlcXVpdmFsZW50IHRvIGBnaXQgbWVyZ2VgLgorKiBCdW5kbGUgbG9jYWwgYnJhbmNoIGBmaXhlc2AgYW5kIGBlbmhhbmNlbWVudHNgIG9uIHRvcCBvZgorICB0aGUgY3VycmVudCBicmFuY2gsIG1ha2luZyBhbiBPY3RvcHVzIG1lcmdlOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBwdWxsIC4gZml4ZXMgZW5oYW5jZW1lbnRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK1RoaXMgYGdpdCBwdWxsIC5gIHN5bnRheCBpcyBlcXVpdmFsZW50IHRvIGBnaXQgbWVyZ2VgLgogCi1naXQgcHVsbCAtcyBvdXJzIC4gb2Jzb2xldGU6OgotCU1lcmdlIGxvY2FsIGJyYW5jaCBgb2Jzb2xldGVgIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoLAotCXVzaW5nIGBvdXJzYCBtZXJnZSBzdHJhdGVneS4KKyogTWVyZ2UgbG9jYWwgYnJhbmNoIGBvYnNvbGV0ZWAgaW50byB0aGUgY3VycmVudCBicmFuY2gsIHVzaW5nIGBvdXJzYAorICBtZXJnZSBzdHJhdGVneToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcHVsbCAtcyBvdXJzIC4gb2Jzb2xldGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1naXQgcHVsbCAtLW5vLWNvbW1pdCAuIG1haW50OjoKLQlNZXJnZSBsb2NhbCBicmFuY2ggYG1haW50YCBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaCwgYnV0Ci0JZG8gbm90IG1ha2UgYSBjb21taXQgYXV0b21hdGljYWxseS4gIFRoaXMgY2FuIGJlIHVzZWQKLQl3aGVuIHlvdSB3YW50IHRvIGluY2x1ZGUgZnVydGhlciBjaGFuZ2VzIHRvIHRoZSBtZXJnZSwKLQlvciB3YW50IHRvIHdyaXRlIHlvdXIgb3duIG1lcmdlIGNvbW1pdCBtZXNzYWdlLgorKiBNZXJnZSBsb2NhbCBicmFuY2ggYG1haW50YCBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaCwgYnV0IGRvIG5vdCBtYWtlCisgIGEgY29tbWl0IGF1dG9tYXRpY2FsbHk6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHB1bGwgLS1uby1jb21taXQgLiBtYWludAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitUaGlzIGNhbiBiZSB1c2VkIHdoZW4geW91IHdhbnQgdG8gaW5jbHVkZSBmdXJ0aGVyIGNoYW5nZXMgdG8gdGhlCittZXJnZSwgb3Igd2FudCB0byB3cml0ZSB5b3VyIG93biBtZXJnZSBjb21taXQgbWVzc2FnZS4KICsKIFlvdSBzaG91bGQgcmVmcmFpbiBmcm9tIGFidXNpbmcgdGhpcyBvcHRpb24gdG8gc25lYWsgc3Vic3RhbnRpYWwKIGNoYW5nZXMgaW50byBhIG1lcmdlIGNvbW1pdC4gIFNtYWxsIGZpeHVwcyBsaWtlIGJ1bXBpbmcKIHJlbGVhc2UvdmVyc2lvbiBuYW1lIHdvdWxkIGJlIGFjY2VwdGFibGUuCiAKLUNvbW1hbmQgbGluZSBwdWxsIG9mIG11bHRpcGxlIGJyYW5jaGVzIGZyb20gb25lIHJlcG9zaXRvcnk6OgorKiBDb21tYW5kIGxpbmUgcHVsbCBvZiBtdWx0aXBsZSBicmFuY2hlcyBmcm9tIG9uZSByZXBvc2l0b3J5OgogKwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAkIGdpdCBjaGVja291dCBtYXN0ZXIKQEAgLTE1MiwxMiArMTcxLDEyIEBACiAkIGdpdCBwdWxsIC4gdG1wCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICsKLVRoaXMgdXBkYXRlcyAob3IgY3JlYXRlcywgYXMgbmVjZXNzYXJ5KSBicmFuY2hlcyBgcHVgIGFuZCBgdG1wYAotaW4gdGhlIGxvY2FsIHJlcG9zaXRvcnkgYnkgZmV0Y2hpbmcgZnJvbSB0aGUgYnJhbmNoZXMKLShyZXNwZWN0aXZlbHkpIGBwdWAgYW5kIGBtYWludGAgZnJvbSB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuCitUaGlzIHVwZGF0ZXMgKG9yIGNyZWF0ZXMsIGFzIG5lY2Vzc2FyeSkgYnJhbmNoZXMgYHB1YCBhbmQgYHRtcGAgaW4KK3RoZSBsb2NhbCByZXBvc2l0b3J5IGJ5IGZldGNoaW5nIGZyb20gdGhlIGJyYW5jaGVzIChyZXNwZWN0aXZlbHkpCitgcHVgIGFuZCBgbWFpbnRgIGZyb20gdGhlIHJlbW90ZSByZXBvc2l0b3J5LgogKwotVGhlIGBwdWAgYnJhbmNoIHdpbGwgYmUgdXBkYXRlZCBldmVuIGlmIGl0IGlzIGRvZXMgbm90Ci1mYXN0LWZvcndhcmQ7IHRoZSBvdGhlcnMgd2lsbCBub3QgYmUuCitUaGUgYHB1YCBicmFuY2ggd2lsbCBiZSB1cGRhdGVkIGV2ZW4gaWYgaXQgaXMgZG9lcyBub3QgZmFzdC1mb3J3YXJkOwordGhlIG90aGVycyB3aWxsIG5vdCBiZS4KICsKIFRoZSBmaW5hbCBjb21tYW5kIHRoZW4gbWVyZ2VzIHRoZSBuZXdseSBmZXRjaGVkIGB0bXBgIGludG8gbWFzdGVyLgogCkBAIC0xNzUsNyArMTk0LDcgQEAKIEF1dGhvcgogLS0tLS0tCiBXcml0dGVuIGJ5IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0Bvc2RsLm9yZz4KLWFuZCBKdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+CithbmQgSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgogCiBEb2N1bWVudGF0aW9uCiAtLS0tLS0tLS0tLS0tLQpAQCAtMTg1LDQgKzIwNCw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXB1c2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcHVzaC50eHQKaW5kZXggMDU4NTk0OS4uNjBkNTMzOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcHVzaC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcHVzaC50eHQKQEAgLTMxLDcgKzMxLDcgQEAKIAogPHJlZnNwZWM+OjoKIAlUaGUgY2Fub25pY2FsIGZvcm1hdCBvZiBhIDxyZWZzcGVjPiBwYXJhbWV0ZXIgaXMKLQlgKz88c3JjPjo8ZHN0PmA7IHRoYXQgaXMsIGFuIG9wdGlvbmFsIHBsdXMgYCtgLCBmb2xsb3dlZAorCWArPzxzcmM+Ojxkc3Q+YDsgdGhhdCBpcywgYW4gb3B0aW9uYWwgcGx1cyBge3BsdXN9YCwgZm9sbG93ZWQKIAlieSB0aGUgc291cmNlIHJlZiwgZm9sbG93ZWQgYnkgYSBjb2xvbiBgOmAsIGZvbGxvd2VkIGJ5CiAJdGhlIGRlc3RpbmF0aW9uIHJlZi4KICsKQEAgLTQ2LDEyICs0Niw2IEBACiB0aGUgb3B0aW9uYWwgbGVhZGluZyBwbHVzIGArYCBpcyB1c2VkLCB0aGUgcmVtb3RlIHJlZiBpcyB1cGRhdGVkCiBldmVuIGlmIGl0IGRvZXMgbm90IHJlc3VsdCBpbiBhIGZhc3QgZm9yd2FyZCB1cGRhdGUuCiArCi1Ob3RlOiBJZiBubyBleHBsaWNpdCByZWZzcGVjIGlzIGZvdW5kLCAodGhhdCBpcyBuZWl0aGVyCi1vbiB0aGUgY29tbWFuZCBsaW5lIG5vciBpbiBhbnkgUHVzaCBsaW5lIG9mIHRoZQotY29ycmVzcG9uZGluZyByZW1vdGVzIGZpbGUtLS1zZWUgYmVsb3cpLCB0aGVuICJtYXRjaGluZyIgaGVhZHMgYXJlCi1wdXNoZWQ6IGZvciBldmVyeSBoZWFkIHRoYXQgZXhpc3RzIG9uIHRoZSBsb2NhbCBzaWRlLCB0aGUgcmVtb3RlIHNpZGUgaXMKLXVwZGF0ZWQgaWYgYSBoZWFkIG9mIHRoZSBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMgb24gdGhlIHJlbW90ZSBzaWRlLgotKwogYHRhZyA8dGFnPmAgbWVhbnMgdGhlIHNhbWUgYXMgYHJlZnMvdGFncy88dGFnPjpyZWZzL3RhZ3MvPHRhZz5gLgogKwogQSBwYXJhbWV0ZXIgPHJlZj4gd2l0aG91dCBhIGNvbG9uIHB1c2hlcyB0aGUgPHJlZj4gZnJvbSB0aGUgc291cmNlCkBAIC01OSw1MiArNTMsNjQgQEAKICsKIFB1c2hpbmcgYW4gZW1wdHkgPHNyYz4gYWxsb3dzIHlvdSB0byBkZWxldGUgdGhlIDxkc3Q+IHJlZiBmcm9tCiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuCisrCitUaGUgc3BlY2lhbCByZWZzcGVjIGA6YCAob3IgYCs6YCB0byBhbGxvdyBub24tZmFzdCBmb3J3YXJkIHVwZGF0ZXMpCitkaXJlY3RzIGdpdCB0byBwdXNoICJtYXRjaGluZyIgaGVhZHM6IGZvciBldmVyeSBoZWFkIHRoYXQgZXhpc3RzIG9uCit0aGUgbG9jYWwgc2lkZSwgdGhlIHJlbW90ZSBzaWRlIGlzIHVwZGF0ZWQgaWYgYSBoZWFkIG9mIHRoZSBzYW1lIG5hbWUKK2FscmVhZHkgZXhpc3RzIG9uIHRoZSByZW1vdGUgc2lkZS4gIFRoaXMgaXMgdGhlIGRlZmF1bHQgb3BlcmF0aW9uIG1vZGUKK2lmIG5vIGV4cGxpY2l0IHJlZnNwZWMgaXMgZm91bmQgKHRoYXQgaXMgbmVpdGhlciBvbiB0aGUgY29tbWFuZCBsaW5lCitub3IgaW4gYW55IFB1c2ggbGluZSBvZiB0aGUgY29ycmVzcG9uZGluZyByZW1vdGVzIGZpbGUtLS1zZWUgYmVsb3cpLgogCi1cLS1hbGw6OgorLS1hbGw6OgogCUluc3RlYWQgb2YgbmFtaW5nIGVhY2ggcmVmIHRvIHB1c2gsIHNwZWNpZmllcyB0aGF0IGFsbAogCXJlZnMgdW5kZXIgYCRHSVRfRElSL3JlZnMvaGVhZHMvYCBiZSBwdXNoZWQuCiAKLVwtLW1pcnJvcjo6CistLW1pcnJvcjo6CiAJSW5zdGVhZCBvZiBuYW1pbmcgZWFjaCByZWYgdG8gcHVzaCwgc3BlY2lmaWVzIHRoYXQgYWxsCiAJcmVmcyB1bmRlciBgJEdJVF9ESVIvcmVmcy9oZWFkcy9gIGFuZCBgJEdJVF9ESVIvcmVmcy90YWdzL2AKIAliZSBtaXJyb3JlZCB0byB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuICBOZXdseSBjcmVhdGVkIGxvY2FsCiAJcmVmcyB3aWxsIGJlIHB1c2hlZCB0byB0aGUgcmVtb3RlIGVuZCwgbG9jYWxseSB1cGRhdGVkIHJlZnMKIAl3aWxsIGJlIGZvcmNlIHVwZGF0ZWQgb24gdGhlIHJlbW90ZSBlbmQsIGFuZCBkZWxldGVkIHJlZnMKLQl3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgcmVtb3RlIGVuZC4KKwl3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgcmVtb3RlIGVuZC4gIFRoaXMgaXMgdGhlIGRlZmF1bHQKKwlpZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gYHJlbW90ZS48cmVtb3RlPi5taXJyb3JgIGlzCisJc2V0LgogCi1cLS1kcnktcnVuOjoKKy0tZHJ5LXJ1bjo6CiAJRG8gZXZlcnl0aGluZyBleGNlcHQgYWN0dWFsbHkgc2VuZCB0aGUgdXBkYXRlcy4KIAotXC0tdGFnczo6CistLXRhZ3M6OgogCUFsbCByZWZzIHVuZGVyIGAkR0lUX0RJUi9yZWZzL3RhZ3NgIGFyZSBwdXNoZWQsIGluCiAJYWRkaXRpb24gdG8gcmVmc3BlY3MgZXhwbGljaXRseSBsaXN0ZWQgb24gdGhlIGNvbW1hbmQKIAlsaW5lLgogCi1cLS1yZWNlaXZlLXBhY2s9PGdpdC1yZWNlaXZlLXBhY2s+OjoKKy0tcmVjZWl2ZS1wYWNrPTxnaXQtcmVjZWl2ZS1wYWNrPjo6CiAJUGF0aCB0byB0aGUgJ2dpdC1yZWNlaXZlLXBhY2snIHByb2dyYW0gb24gdGhlIHJlbW90ZQogCWVuZC4gIFNvbWV0aW1lcyB1c2VmdWwgd2hlbiBwdXNoaW5nIHRvIGEgcmVtb3RlCiAJcmVwb3NpdG9yeSBvdmVyIHNzaCwgYW5kIHlvdSBkbyBub3QgaGF2ZSB0aGUgcHJvZ3JhbSBpbgogCWEgZGlyZWN0b3J5IG9uIHRoZSBkZWZhdWx0ICRQQVRILgogCi1cLS1leGVjPTxnaXQtcmVjZWl2ZS1wYWNrPjo6CistLWV4ZWM9PGdpdC1yZWNlaXZlLXBhY2s+OjoKIAlTYW1lIGFzIFwtLXJlY2VpdmUtcGFjaz08Z2l0LXJlY2VpdmUtcGFjaz4uCiAKLS1mLCBcLS1mb3JjZTo6CistZjo6CistLWZvcmNlOjoKIAlVc3VhbGx5LCB0aGUgY29tbWFuZCByZWZ1c2VzIHRvIHVwZGF0ZSBhIHJlbW90ZSByZWYgdGhhdCBpcwogCW5vdCBhbiBhbmNlc3RvciBvZiB0aGUgbG9jYWwgcmVmIHVzZWQgdG8gb3ZlcndyaXRlIGl0LgogCVRoaXMgZmxhZyBkaXNhYmxlcyB0aGUgY2hlY2suICBUaGlzIGNhbiBjYXVzZSB0aGUKIAlyZW1vdGUgcmVwb3NpdG9yeSB0byBsb3NlIGNvbW1pdHM7IHVzZSBpdCB3aXRoIGNhcmUuCiAKLVwtLXJlcG89PHJlcG8+OjoKKy0tcmVwbz08cmVwbz46OgogCVdoZW4gbm8gcmVwb3NpdG9yeSBpcyBzcGVjaWZpZWQgdGhlIGNvbW1hbmQgZGVmYXVsdHMgdG8KIAkib3JpZ2luIjsgdGhpcyBvdmVycmlkZXMgaXQuCiAKLVwtLXRoaW4sIFwtLW5vLXRoaW46OgorLS10aGluOjoKKy0tbm8tdGhpbjo6CiAJVGhlc2Ugb3B0aW9ucyBhcmUgcGFzc2VkIHRvIGBnaXQtc2VuZC1wYWNrYC4gIFRoaW4KIAl0cmFuc2ZlciBzcGVuZHMgZXh0cmEgY3ljbGVzIHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YKIAlvYmplY3RzIHRvIGJlIHNlbnQgYW5kIG1lYW50IHRvIGJlIHVzZWQgb24gc2xvd2VyIGNvbm5lY3Rpb24uCiAKLS12LCBcLS12ZXJib3NlOjoKKy12OjoKKy0tdmVyYm9zZTo6CiAJUnVuIHZlcmJvc2VseS4KIAogaW5jbHVkZTo6dXJscy1yZW1vdGVzLnR4dFtdCkBAIC0xODgsNyArMTk0LDcgQEAKIAogQXV0aG9yCiAtLS0tLS0KLVdyaXR0ZW4gYnkgSnVuaW8gQyBIYW1hbm8gPGp1bmtpb0Bjb3gubmV0PiwgbGF0ZXIgcmV3cml0dGVuIGluIEMKK1dyaXR0ZW4gYnkgSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPiwgbGF0ZXIgcmV3cml0dGVuIGluIEMKIGJ5IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0Bvc2RsLm9yZz4KIAogRG9jdW1lbnRhdGlvbgpAQCAtMTk3LDQgKzIwMyw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXF1aWx0aW1wb3J0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXF1aWx0aW1wb3J0LnR4dAppbmRleCAwZmMyYjU2Li4wNjAwMzc5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1xdWlsdGltcG9ydC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcXVpbHRpbXBvcnQudHh0CkBAIC0yOSw2ICsyOSw4IEBACiAKIE9QVElPTlMKIC0tLS0tLS0KKworLW46OgogLS1kcnktcnVuOjoKIAlXYWxrIHRocm91Z2ggdGhlIHBhdGNoZXMgaW4gdGhlIHNlcmllcyBhbmQgd2FybgogCWlmIHdlIGNhbm5vdCBmaW5kIGFsbCBvZiB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIGNvbW1pdApAQCAtNTcsNCArNTksNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZWFkLXRyZWUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmVhZC10cmVlLnR4dAppbmRleCBjOTVhZDlmLi41OGZiOTA2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1yZWFkLXRyZWUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlYWQtdHJlZS50eHQKQEAgLTM0OCw3ICszNDgsNyBAQAogaGF2ZSBmaW5pc2hlZCB5b3VyIHdvcmstaW4tcHJvZ3Jlc3MpLCBhdHRlbXB0IHRoZSBtZXJnZSBhZ2Fpbi4KIAogCi1TZWUgQWxzbworU0VFIEFMU08KIC0tLS0tLS0tCiBsaW5rZ2l0OmdpdC13cml0ZS10cmVlWzFdOyBsaW5rZ2l0OmdpdC1scy1maWxlc1sxXTsKIGxpbmtnaXQ6Z2l0aWdub3JlWzVdCkBAIC0zNjQsNCArMzY0LDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmViYXNlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlYmFzZS50eHQKaW5kZXggZTA0MTJlMC4uYjdlMWRhMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmViYXNlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZWJhc2UudHh0CkBAIC0yMTMsMTkgKzIxMywyMiBAQAogLS1za2lwOjoKIAlSZXN0YXJ0IHRoZSByZWJhc2luZyBwcm9jZXNzIGJ5IHNraXBwaW5nIHRoZSBjdXJyZW50IHBhdGNoLgogCi0tbSwgXC0tbWVyZ2U6OgorLW06OgorLS1tZXJnZTo6CiAJVXNlIG1lcmdpbmcgc3RyYXRlZ2llcyB0byByZWJhc2UuICBXaGVuIHRoZSByZWN1cnNpdmUgKGRlZmF1bHQpIG1lcmdlCiAJc3RyYXRlZ3kgaXMgdXNlZCwgdGhpcyBhbGxvd3MgcmViYXNlIHRvIGJlIGF3YXJlIG9mIHJlbmFtZXMgb24gdGhlCiAJdXBzdHJlYW0gc2lkZS4KIAotLXMgPHN0cmF0ZWd5PiwgXC0tc3RyYXRlZ3k9PHN0cmF0ZWd5Pjo6CistcyA8c3RyYXRlZ3k+OjoKKy0tc3RyYXRlZ3k9PHN0cmF0ZWd5Pjo6CiAJVXNlIHRoZSBnaXZlbiBtZXJnZSBzdHJhdGVneTsgY2FuIGJlIHN1cHBsaWVkIG1vcmUgdGhhbgogCW9uY2UgdG8gc3BlY2lmeSB0aGVtIGluIHRoZSBvcmRlciB0aGV5IHNob3VsZCBiZSB0cmllZC4KIAlJZiB0aGVyZSBpcyBubyBgLXNgIG9wdGlvbiwgYSBidWlsdC1pbiBsaXN0IG9mIHN0cmF0ZWdpZXMKIAlpcyB1c2VkIGluc3RlYWQgKGBnaXQtbWVyZ2UtcmVjdXJzaXZlYCB3aGVuIG1lcmdpbmcgYSBzaW5nbGUKIAloZWFkLCBgZ2l0LW1lcmdlLW9jdG9wdXNgIG90aGVyd2lzZSkuICBUaGlzIGltcGxpZXMgLS1tZXJnZS4KIAotLXYsIFwtLXZlcmJvc2U6OgorLXY6OgorLS12ZXJib3NlOjoKIAlEaXNwbGF5IGEgZGlmZnN0YXQgb2Ygd2hhdCBjaGFuZ2VkIHVwc3RyZWFtIHNpbmNlIHRoZSBsYXN0IHJlYmFzZS4KIAogLUM8bj46OgpAQCAtMjM4LDEyICsyNDEsMTQgQEAKIAlUaGlzIGZsYWcgaXMgcGFzc2VkIHRvIHRoZSBgZ2l0LWFwcGx5YCBwcm9ncmFtCiAJKHNlZSBsaW5rZ2l0OmdpdC1hcHBseVsxXSkgdGhhdCBhcHBsaWVzIHRoZSBwYXRjaC4KIAotLWksIFwtLWludGVyYWN0aXZlOjoKKy1pOjoKKy0taW50ZXJhY3RpdmU6OgogCU1ha2UgYSBsaXN0IG9mIHRoZSBjb21taXRzIHdoaWNoIGFyZSBhYm91dCB0byBiZSByZWJhc2VkLiAgTGV0IHRoZQogCXVzZXIgZWRpdCB0aGF0IGxpc3QgYmVmb3JlIHJlYmFzaW5nLiAgVGhpcyBtb2RlIGNhbiBhbHNvIGJlIHVzZWQgdG8KIAlzcGxpdCBjb21taXRzIChzZWUgU1BMSVRUSU5HIENPTU1JVFMgYmVsb3cpLgogCi0tcCwgXC0tcHJlc2VydmUtbWVyZ2VzOjoKKy1wOjoKKy0tcHJlc2VydmUtbWVyZ2VzOjoKIAlJbnN0ZWFkIG9mIGlnbm9yaW5nIG1lcmdlcywgdHJ5IHRvIHJlY3JlYXRlIHRoZW0uICBUaGlzIG9wdGlvbgogCW9ubHkgd29ya3MgaW4gaW50ZXJhY3RpdmUgbW9kZS4KIApAQCAtMzkyLDcgKzM5Nyw3IEBACiAKIEF1dGhvcnMKIC0tLS0tLQotV3JpdHRlbiBieSBKdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+IGFuZAorV3JpdHRlbiBieSBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+IGFuZAogSm9oYW5uZXMgRS4gU2NoaW5kZWxpbiA8am9oYW5uZXMuc2NoaW5kZWxpbkBnbXguZGU+CiAKIERvY3VtZW50YXRpb24KQEAgLTQwMSw0ICs0MDYsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZWNlaXZlLXBhY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmVjZWl2ZS1wYWNrLnR4dAppbmRleCA0MTExNDM0Li5hNzBjNzE2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1yZWNlaXZlLXBhY2sudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlY2VpdmUtcGFjay50eHQKQEAgLTE2Miw0ICsxNjIsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZWZsb2cudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmVmbG9nLnR4dAppbmRleCAwNDdlM2NlLi5jOWMyNWYzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1yZWZsb2cudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlZmxvZy50eHQKQEAgLTk0LDcgKzk0LDcgQEAKIAogQXV0aG9yCiAtLS0tLS0KLVdyaXR0ZW4gYnkgSnVuaW8gQyBIYW1hbm8gPGp1bmtpb0Bjb3gubmV0PgorV3JpdHRlbiBieSBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CiAKIERvY3VtZW50YXRpb24KIC0tLS0tLS0tLS0tLS0tCkBAIC0xMDIsNCArMTAyLDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVsaW5rLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlbGluay50eHQKaW5kZXggMWIwMjRkZS4uZjZkYWZkNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmVsaW5rLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZWxpbmsudHh0CkBAIC0zNCw0ICszNCw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlbW90ZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZW1vdGUudHh0CmluZGV4IDJjYmQxZjcuLjM0NTk0M2EgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXJlbW90ZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmVtb3RlLnR4dApAQCAtOSwxMSArOSwxMSBAQAogU1lOT1BTSVMKIC0tLS0tLS0tCiBbdmVyc2VdCi0nZ2l0LXJlbW90ZScKKydnaXQtcmVtb3RlJyBbLXYgfCAtLXZlcmJvc2VdCiAnZ2l0LXJlbW90ZScgYWRkIFstdCA8YnJhbmNoPl0gWy1tIDxtYXN0ZXI+XSBbLWZdIFstLW1pcnJvcl0gPG5hbWU+IDx1cmw+CiAnZ2l0LXJlbW90ZScgcm0gPG5hbWU+Ci0nZ2l0LXJlbW90ZScgc2hvdyA8bmFtZT4KLSdnaXQtcmVtb3RlJyBwcnVuZSA8bmFtZT4KKydnaXQtcmVtb3RlJyBzaG93IFstbl0gPG5hbWU+CisnZ2l0LXJlbW90ZScgcHJ1bmUgWy1uIHwgLS1kcnktcnVuXSA8bmFtZT4KICdnaXQtcmVtb3RlJyB1cGRhdGUgW2dyb3VwXQogCiBERVNDUklQVElPTgpAQCAtMjIsNiArMjIsMTQgQEAKIE1hbmFnZSB0aGUgc2V0IG9mIHJlcG9zaXRvcmllcyAoInJlbW90ZXMiKSB3aG9zZSBicmFuY2hlcyB5b3UgdHJhY2suCiAKIAorT1BUSU9OUworLS0tLS0tLQorCistdjo6CistLXZlcmJvc2U6OgorCUJlIGEgbGl0dGxlIG1vcmUgdmVyYm9zZSBhbmQgc2hvdyByZW1vdGUgdXJsIGFmdGVyIG5hbWUuCisKKwogQ09NTUFORFMKIC0tLS0tLS0tCiAKQEAgLTQ3LDkgKzU1LDExIEBACiB1cCB0byBwb2ludCBhdCByZW1vdGUncyBgPG1hc3Rlcj5gIGJyYW5jaCBpbnN0ZWFkIG9mIHdoYXRldmVyCiBicmFuY2ggdGhlIGBIRUFEYCBhdCB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgYWN0dWFsbHkgcG9pbnRzIGF0LgogKwotSW4gbWlycm9yIG1vZGUsIGVuYWJsZWQgd2l0aCBgLS1taXJyb3JgLCB0aGUgcmVmcyB3aWxsIG5vdCBiZSBzdG9yZWQKK0luIG1pcnJvciBtb2RlLCBlbmFibGVkIHdpdGggYFwtLW1pcnJvcmAsIHRoZSByZWZzIHdpbGwgbm90IGJlIHN0b3JlZAogaW4gdGhlICdyZWZzL3JlbW90ZXMvJyBuYW1lc3BhY2UsIGJ1dCBpbiAncmVmcy9oZWFkcy8nLiAgVGhpcyBvcHRpb24KLW9ubHkgbWFrZXMgc2Vuc2UgaW4gYmFyZSByZXBvc2l0b3JpZXMuCitvbmx5IG1ha2VzIHNlbnNlIGluIGJhcmUgcmVwb3NpdG9yaWVzLiAgSWYgYSByZW1vdGUgdXNlcyBtaXJyb3IKK21vZGUsIGZ1cnRoZXJtb3JlLCBgZ2l0IHB1c2hgIHdpbGwgYWx3YXlzIGJlaGF2ZSBhcyBpZiBgXC0tbWlycm9yYAord2FzIHBhc3NlZC4KIAogJ3JtJzo6CiAKQEAgLTcwLDkgKzgwLDggQEAKIHJlZmVyZW5jZWQgYnkgPG5hbWU+LCBidXQgYXJlIHN0aWxsIGxvY2FsbHkgYXZhaWxhYmxlIGluCiAicmVtb3Rlcy88bmFtZT4iLgogKwotV2l0aCBgLW5gIG9wdGlvbiwgdGhlIHJlbW90ZSBoZWFkcyBhcmUgbm90IGNvbmZpcm1lZCBmaXJzdCB3aXRoIGBnaXQKLWxzLXJlbW90ZSA8bmFtZT5gOyBjYWNoZWQgaW5mb3JtYXRpb24gaXMgdXNlZCBpbnN0ZWFkLiAgVXNlIHdpdGgKLWNhdXRpb24uCitXaXRoIGAtLWRyeS1ydW5gIG9wdGlvbiwgcmVwb3J0IHdoYXQgYnJhbmNoZXMgd2lsbCBiZSBwcnVuZWQsIGJ1dCBkbyBubworYWN0dWFsbHkgcHJ1bmUgdGhlbS4KIAogJ3VwZGF0ZSc6OgogCkBAIC0xMjYsNyArMTM1LDcgQEAKIC0tLS0tLS0tLS0tLQogCiAKLVNlZSBBbHNvCitTRUUgQUxTTwogLS0tLS0tLS0KIGxpbmtnaXQ6Z2l0LWZldGNoWzFdCiBsaW5rZ2l0OmdpdC1icmFuY2hbMV0KQEAgLTE0NCw0ICsxNTMsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXBhY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmVwYWNrLnR4dAppbmRleCBkMTRhYjUxLi4wNGQ2ZjFmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXBhY2sudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlcGFjay50eHQKQEAgLTgsNyArOCw3IEBACiAKIFNZTk9QU0lTCiAtLS0tLS0tLQotJ2dpdC1yZXBhY2snIFstYV0gWy1kXSBbLWZdIFstbF0gWy1uXSBbLXFdIFstLXdpbmRvdz1OXSBbLS1kZXB0aD1OXQorJ2dpdC1yZXBhY2snIFstYV0gWy1BXSBbLWRdIFstZl0gWy1sXSBbLW5dIFstcV0gWy0td2luZG93PU5dIFstLWRlcHRoPU5dCiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQpAQCAtMzcsNiArMzcsMTggQEAKIAlsZWF2ZXMgYmVoaW5kLCBidXQgYGdpdCBmc2NrIC0tZnVsbGAgc2hvd3MgYXMKIAlkYW5nbGluZy4KIAorLUE6OgorCVNhbWUgYXMgYC1hYCwgYnV0IGFueSB1bnJlYWNoYWJsZSBvYmplY3RzIGluIGEgcHJldmlvdXMKKwlwYWNrIGJlY29tZSBsb29zZSwgdW5wYWNrZWQgb2JqZWN0cywgaW5zdGVhZCBvZiBiZWluZworCWxlZnQgaW4gdGhlIG9sZCBwYWNrLiAgVW5yZWFjaGFibGUgb2JqZWN0cyBhcmUgbmV2ZXIKKwlpbnRlbnRpb25hbGx5IGFkZGVkIHRvIGEgcGFjaywgZXZlbiB3aGVuIHJlcGFja2luZy4KKwlXaGVuIHVzZWQgd2l0aCAnLWQnLCB0aGlzIG9wdGlvbgorCXByZXZlbnRzIHVucmVhY2hhYmxlIG9iamVjdHMgZnJvbSBiZWluZyBpbW1lZGlhdGVseQorCWRlbGV0ZWQgYnkgd2F5IG9mIGJlaW5nIGxlZnQgaW4gdGhlIG9sZCBwYWNrIGFuZCB0aGVuCisJcmVtb3ZlZC4gIEluc3RlYWQsIHRoZSBsb29zZSB1bnJlYWNoYWJsZSBvYmplY3RzCisJd2lsbCBiZSBwcnVuZWQgYWNjb3JkaW5nIHRvIG5vcm1hbCBleHBpcnkgcnVsZXMKKwl3aXRoIHRoZSBuZXh0IGxpbmtnaXQ6Z2l0LWdjWzFdLgorCiAtZDo6CiAJQWZ0ZXIgcGFja2luZywgaWYgdGhlIG5ld2x5IGNyZWF0ZWQgcGFja3MgbWFrZSBzb21lCiAJZXhpc3RpbmcgcGFja3MgcmVkdW5kYW50LCByZW1vdmUgdGhlIHJlZHVuZGFudCBwYWNrcy4KQEAgLTYxLDcgKzczLDggQEAKIAl0aGlzIHJlcG9zaXRvcnkgKG9yIGEgZGlyZWN0IGNvcHkgb2YgaXQpCiAJb3ZlciBIVFRQIG9yIEZUUC4gIFNlZSBnaXRsaW5rOmdpdC11cGRhdGUtc2VydmVyLWluZm9bMV0uCiAKLS0td2luZG93PVtOXSwgLS1kZXB0aD1bTl06OgorLS13aW5kb3c9W05dOjoKKy0tZGVwdGg9W05dOjoKIAlUaGVzZSB0d28gb3B0aW9ucyBhZmZlY3QgaG93IHRoZSBvYmplY3RzIGNvbnRhaW5lZCBpbiB0aGUgcGFjayBhcmUKIAlzdG9yZWQgdXNpbmcgZGVsdGEgY29tcHJlc3Npb24uIFRoZSBvYmplY3RzIGFyZSBmaXJzdCBpbnRlcm5hbGx5CiAJc29ydGVkIGJ5IHR5cGUsIHNpemUgYW5kIG9wdGlvbmFsbHkgbmFtZXMgYW5kIGNvbXBhcmVkIGFnYWluc3QgdGhlCkBAIC0xMTAsMTEgKzEyMywxMSBAQAogLS0tLS0tLS0tLS0tLS0KIERvY3VtZW50YXRpb24gYnkgUnlhbiBBbmRlcnNvbiA8cnlhbkBtaWNob25saW5lLmNvbT4KIAotU2VlIEFsc28KK1NFRSBBTFNPCiAtLS0tLS0tLQogbGlua2dpdDpnaXQtcGFjay1vYmplY3RzWzFdCiBsaW5rZ2l0OmdpdC1wcnVuZS1wYWNrZWRbMV0KIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVxdWVzdC1wdWxsLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlcXVlc3QtcHVsbC50eHQKaW5kZXggOWExNGMwNC4uNzA4MTBjMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmVxdWVzdC1wdWxsLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXF1ZXN0LXB1bGwudHh0CkBAIC0yOCw3ICsyOCw3IEBACiAKIEF1dGhvcgogLS0tLS0tCi1Xcml0dGVuIGJ5IFJ5YW4gQW5kZXJzb24gPHJ5YW5AbWljaG9ubGluZS5jb20+IGFuZCBKdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+CitXcml0dGVuIGJ5IFJ5YW4gQW5kZXJzb24gPHJ5YW5AbWljaG9ubGluZS5jb20+IGFuZCBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CiAKIERvY3VtZW50YXRpb24KIC0tLS0tLS0tLS0tLS0tCkBAIC0zNiw0ICszNiw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlcmVyZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXJlcmUudHh0CmluZGV4IGE1Mzg1OGUuLjhmMTJkYzkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXJlcmVyZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmVyZXJlLnR4dApAQCAtOTAsMTUgKzkwLDE1IEBACiAKIFRoZSBjb21taXRzIG1hcmtlZCB3aXRoIGAqYCB0b3VjaCB0aGUgc2FtZSBhcmVhIGluIHRoZSBzYW1lCiBmaWxlOyB5b3UgbmVlZCB0byByZXNvbHZlIHRoZSBjb25mbGljdHMgd2hlbiBjcmVhdGluZyB0aGUgY29tbWl0Ci1tYXJrZWQgd2l0aCBgK2AuICBUaGVuIHlvdSBjYW4gdGVzdCB0aGUgcmVzdWx0IHRvIG1ha2Ugc3VyZSB5b3VyCittYXJrZWQgd2l0aCBge3BsdXN9YC4gIFRoZW4geW91IGNhbiB0ZXN0IHRoZSByZXN1bHQgdG8gbWFrZSBzdXJlIHlvdXIKIHdvcmstaW4tcHJvZ3Jlc3Mgc3RpbGwgd29ya3Mgd2l0aCB3aGF0IGlzIGluIHRoZSBsYXRlc3QgbWFzdGVyLgogCiBBZnRlciB0aGlzIHRlc3QgbWVyZ2UsIHRoZXJlIGFyZSB0d28gd2F5cyB0byBjb250aW51ZSB5b3VyIHdvcmsKIG9uIHRoZSB0b3BpYy4gIFRoZSBlYXNpZXN0IGlzIHRvIGJ1aWxkIG9uIHRvcCBvZiB0aGUgdGVzdCBtZXJnZQotY29tbWl0IGArYCwgYW5kIHdoZW4geW91ciB3b3JrIGluIHRoZSB0b3BpYyBicmFuY2ggaXMgZmluYWxseQorY29tbWl0IGB7cGx1c31gLCBhbmQgd2hlbiB5b3VyIHdvcmsgaW4gdGhlIHRvcGljIGJyYW5jaCBpcyBmaW5hbGx5CiByZWFkeSwgcHVsbCB0aGUgdG9waWMgYnJhbmNoIGludG8gbWFzdGVyLCBhbmQvb3IgYXNrIHRoZQogdXBzdHJlYW0gdG8gcHVsbCBmcm9tIHlvdS4gIEJ5IHRoYXQgdGltZSwgaG93ZXZlciwgdGhlIG1hc3RlciBvcgotdGhlIHVwc3RyZWFtIG1pZ2h0IGhhdmUgYmVlbiBhZHZhbmNlZCBzaW5jZSB0aGUgdGVzdCBtZXJnZSBgK2AsCit0aGUgdXBzdHJlYW0gbWlnaHQgaGF2ZSBiZWVuIGFkdmFuY2VkIHNpbmNlIHRoZSB0ZXN0IG1lcmdlIGB7cGx1c31gLAogaW4gd2hpY2ggY2FzZSB0aGUgZmluYWwgY29tbWl0IGdyYXBoIHdvdWxkIGxvb2sgbGlrZSB0aGlzOgogCiAtLS0tLS0tLS0tLS0KQEAgLTIwNCw4ICsyMDQsOCBAQAogCiBBdXRob3IKIC0tLS0tLQotV3JpdHRlbiBieSBKdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+CitXcml0dGVuIGJ5IEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVzZXQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmVzZXQudHh0CmluZGV4IGZhYzU5YzkuLjBiMzY4YjMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXJlc2V0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXNldC50eHQKQEAgLTE5NSw3ICsxOTUsNyBAQAogCiBBdXRob3IKIC0tLS0tLQotV3JpdHRlbiBieSBKdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+IGFuZCBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAb3NkbC5vcmc+CitXcml0dGVuIGJ5IEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4gYW5kIExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0Bvc2RsLm9yZz4KIAogRG9jdW1lbnRhdGlvbgogLS0tLS0tLS0tLS0tLS0KQEAgLTIwMyw0ICsyMDMsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXYtbGlzdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXYtbGlzdC50eHQKaW5kZXggZDgwY2RmNS4uYzliMDk1MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmV2LWxpc3QudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJldi1saXN0LnR4dApAQCAtMTA5LDQgKzEwOSw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJldi1wYXJzZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXYtcGFyc2UudHh0CmluZGV4IDU5ODFjNzkuLjkwODJmYzkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXJldi1wYXJzZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmV2LXBhcnNlLnR4dApAQCAtNTIsNiArNTIsMTIgQEAKIAlUaGUgcGFyYW1ldGVyIGdpdmVuIG11c3QgYmUgdXNhYmxlIGFzIGEgc2luZ2xlLCB2YWxpZAogCW9iamVjdCBuYW1lLiAgT3RoZXJ3aXNlIGJhcmYgYW5kIGFib3J0LgogCistcTo6CistLXF1aWV0OjoKKwlPbmx5IG1lYW5pbmdmdWwgaW4gYC0tdmVyaWZ5YCBtb2RlLiBEbyBub3Qgb3V0cHV0IGFuIGVycm9yCisJbWVzc2FnZSBpZiB0aGUgZmlyc3QgYXJndW1lbnQgaXMgbm90IGEgdmFsaWQgb2JqZWN0IG5hbWU7CisJaW5zdGVhZCBleGl0IHdpdGggbm9uLXplcm8gc3RhdHVzIHNpbGVudGx5LgorCiAtLXNxOjoKIAlVc3VhbGx5IHRoZSBvdXRwdXQgaXMgbWFkZSBvbmUgbGluZSBwZXIgZmxhZyBhbmQKIAlwYXJhbWV0ZXIuICBUaGlzIG9wdGlvbiBtYWtlcyBvdXRwdXQgYSBzaW5nbGUgbGluZSwKQEAgLTExNCwxNiArMTIwLDE5IEBACiAtLWlzLWJhcmUtcmVwb3NpdG9yeTo6CiAJV2hlbiB0aGUgcmVwb3NpdG9yeSBpcyBiYXJlIHByaW50ICJ0cnVlIiwgb3RoZXJ3aXNlICJmYWxzZSIuCiAKLS0tc2hvcnQsIC0tc2hvcnQ9bnVtYmVyOjoKKy0tc2hvcnQ6OgorLS1zaG9ydD1udW1iZXI6OgogCUluc3RlYWQgb2Ygb3V0cHV0dGluZyB0aGUgZnVsbCBTSEExIHZhbHVlcyBvZiBvYmplY3QgbmFtZXMgdHJ5IHRvCiAJYWJicmV2aWF0ZSB0aGVtIHRvIGEgc2hvcnRlciB1bmlxdWUgbmFtZS4gV2hlbiBubyBsZW5ndGggaXMgc3BlY2lmaWVkCiAJNyBpcyB1c2VkLiBUaGUgbWluaW11bSBsZW5ndGggaXMgNC4KIAotLS1zaW5jZT1kYXRlc3RyaW5nLCAtLWFmdGVyPWRhdGVzdHJpbmc6OgorLS1zaW5jZT1kYXRlc3RyaW5nOjoKKy0tYWZ0ZXI9ZGF0ZXN0cmluZzo6CiAJUGFyc2VzIHRoZSBkYXRlIHN0cmluZywgYW5kIG91dHB1dHMgY29ycmVzcG9uZGluZwogCS0tbWF4LWFnZT0gcGFyYW1ldGVyIGZvciBnaXQtcmV2LWxpc3QgY29tbWFuZC4KIAotLS11bnRpbD1kYXRlc3RyaW5nLCAtLWJlZm9yZT1kYXRlc3RyaW5nOjoKKy0tdW50aWw9ZGF0ZXN0cmluZzo6CistLWJlZm9yZT1kYXRlc3RyaW5nOjoKIAlQYXJzZXMgdGhlIGRhdGUgc3RyaW5nLCBhbmQgb3V0cHV0cyBjb3JyZXNwb25kaW5nCiAJLS1taW4tYWdlPSBwYXJhbWV0ZXIgZm9yIGdpdC1yZXYtbGlzdCBjb21tYW5kLgogCkBAIC0xNzUsNyArMTg0LDEwIEBACiAgIHNlY29uZCBhZ29cfScgb3IgJ1x7MTk3OS0wMi0yNiAxODozMDowMFx9JykgdG8gc3BlY2lmeSB0aGUgdmFsdWUKICAgb2YgdGhlIHJlZiBhdCBhIHByaW9yIHBvaW50IGluIHRpbWUuICBUaGlzIHN1ZmZpeCBtYXkgb25seSBiZQogICB1c2VkIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBhIHJlZiBuYW1lIGFuZCB0aGUgcmVmIG11c3QgaGF2ZSBhbgotICBleGlzdGluZyBsb2cgKCRHSVRfRElSL2xvZ3MvPHJlZj4pLgorICBleGlzdGluZyBsb2cgKCRHSVRfRElSL2xvZ3MvPHJlZj4pLiBOb3RlIHRoYXQgdGhpcyBsb29rcyB1cCB0aGUgc3RhdGUKKyAgb2YgeW91ciAqbG9jYWwqIHJlZiBhdCBhIGdpdmVuIHRpbWU7IGUuZy4sIHdoYXQgd2FzIGluIHlvdXIgbG9jYWwKKyAgYG1hc3RlcmAgYnJhbmNoIGxhc3Qgd2Vlay4gSWYgeW91IHdhbnQgdG8gbG9vayBhdCBjb21taXRzIG1hZGUgZHVyaW5nCisgIGNlcnRhaW4gdGltZXMsIHNlZSBgLS1zaW5jZWAgYW5kIGAtLXVudGlsYC4KIAogKiBBIHJlZiBmb2xsb3dlZCBieSB0aGUgc3VmZml4ICdAJyB3aXRoIGFuIG9yZGluYWwgc3BlY2lmaWNhdGlvbgogICBlbmNsb3NlZCBpbiBhIGJyYWNlIHBhaXIgKGUuZy4gJ1x7MVx9JywgJ1x7MTVcfScpIHRvIHNwZWNpZnkKQEAgLTI4OSw5ICszMDEsOSBAQAogYHIxYCBvciBgcjJgIGJ1dCBub3QgZnJvbSBib3RoLgogCiBUd28gb3RoZXIgc2hvcnRoYW5kcyBmb3IgbmFtaW5nIGEgc2V0IHRoYXQgaXMgZm9ybWVkIGJ5IGEgY29tbWl0Ci1hbmQgaXRzIHBhcmVudCBjb21taXRzIGV4aXN0cy4gIGByMXtjYXJldH1AYCBub3RhdGlvbiBtZWFucyBhbGwKK2FuZCBpdHMgcGFyZW50IGNvbW1pdHMgZXhpc3QuICBUaGUgYHIxe2NhcmV0fUBgIG5vdGF0aW9uIG1lYW5zIGFsbAogcGFyZW50cyBvZiBgcjFgLiAgYHIxe2NhcmV0fSFgIGluY2x1ZGVzIGNvbW1pdCBgcjFgIGJ1dCBleGNsdWRlcwotaXRzIGFsbCBwYXJlbnRzLgorYWxsIG9mIGl0cyBwYXJlbnRzLgogCiBIZXJlIGFyZSBhIGhhbmRmdWwgb2YgZXhhbXBsZXM6CiAKQEAgLTM0NCw3ICszNTYsNyBAQAogCiAJKiBVc2UgYCpgIHRvIG1lYW4gdGhhdCB0aGlzIG9wdGlvbiBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgdXNhZ2UKIAkgIGdlbmVyYXRlZCBmb3IgdGhlIGAtaGAgYXJndW1lbnQuIEl0J3Mgc2hvd24gZm9yIGAtLWhlbHAtYWxsYCBhcwotCSAgZG9jdW1lbnRlZCBpbiBsaW5rZ2l0OmdpdGNsaVs1XS4KKwkgIGRvY3VtZW50ZWQgaW4gbGlua2dpdDpnaXRjbGlbN10uCiAKIAkqIFVzZSBgIWAgdG8gbm90IG1ha2UgdGhlIGNvcnJlc3BvbmRpbmcgbmVnYXRlZCBsb25nIG9wdGlvbiBhdmFpbGFibGUuCiAKQEAgLTM3NSwxMSArMzg3LDM2IEBACiBldmFsIGBlY2hvICIkT1BUU19TUEVDIiB8IGdpdC1yZXYtcGFyc2UgLS1wYXJzZW9wdCAtLSAiJEAiIHx8IGVjaG8gZXhpdCAkP2AKIC0tLS0tLS0tLS0tLQogCitFWEFNUExFUworLS0tLS0tLS0KKworKiBQcmludCB0aGUgb2JqZWN0IG5hbWUgb2YgdGhlIGN1cnJlbnQgY29tbWl0OgorKworLS0tLS0tLS0tLS0tCiskIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRAorLS0tLS0tLS0tLS0tCisKKyogUHJpbnQgdGhlIGNvbW1pdCBvYmplY3QgbmFtZSBmcm9tIHRoZSByZXZpc2lvbiBpbiB0aGUgJFJFViBzaGVsbCB2YXJpYWJsZToKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICRSRVYKKy0tLS0tLS0tLS0tLQorKworVGhpcyB3aWxsIGVycm9yIG91dCBpZiAkUkVWIGlzIGVtcHR5IG9yIG5vdCBhIHZhbGlkIHJldmlzaW9uLgorCisqIFNhbWUgYXMgYWJvdmU6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IHJldi1wYXJzZSAtLWRlZmF1bHQgbWFzdGVyIC0tdmVyaWZ5ICRSRVYKKy0tLS0tLS0tLS0tLQorKworYnV0IGlmICRSRVYgaXMgZW1wdHksIHRoZSBjb21taXQgb2JqZWN0IG5hbWUgZnJvbSBtYXN0ZXIgd2lsbCBiZSBwcmludGVkLgorCiAKIEF1dGhvcgogLS0tLS0tCiBXcml0dGVuIGJ5IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0Bvc2RsLm9yZz4gLgotSnVuaW8gQyBIYW1hbm8gPGp1bmtpb0Bjb3gubmV0PiBhbmQgUGllcnJlIEhhYm91eml0IDxtYWRjb2RlckBkZWJpYW4ub3JnPgorSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPiBhbmQgUGllcnJlIEhhYm91eml0IDxtYWRjb2RlckBkZWJpYW4ub3JnPgogCiBEb2N1bWVudGF0aW9uCiAtLS0tLS0tLS0tLS0tLQpAQCAtMzg3LDQgKzQyNCw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJldmVydC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXZlcnQudHh0CmluZGV4IDkzZTIwZjcuLjVmZGVhZmYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXJldmVydC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmV2ZXJ0LnR4dApAQCAtNyw3ICs3LDcgQEAKIAogU1lOT1BTSVMKIC0tLS0tLS0tCi0nZ2l0LXJldmVydCcgWy0tZWRpdCB8IC0tbm8tZWRpdF0gWy1uXSBbLW0gcGFyZW50LW51bWJlcl0gPGNvbW1pdD4KKydnaXQtcmV2ZXJ0JyBbLS1lZGl0IHwgLS1uby1lZGl0XSBbLW5dIFstbSBwYXJlbnQtbnVtYmVyXSBbLXNdIDxjb21taXQ+CiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQpAQCAtMjIsMTIgKzIyLDE0IEBACiAJRm9yIGEgbW9yZSBjb21wbGV0ZSBsaXN0IG9mIHdheXMgdG8gc3BlbGwgY29tbWl0IG5hbWVzLCBzZWUKIAkiU1BFQ0lGWUlORyBSRVZJU0lPTlMiIHNlY3Rpb24gaW4gbGlua2dpdDpnaXQtcmV2LXBhcnNlWzFdLgogCi0tZXwtLWVkaXQ6OgorLWU6OgorLS1lZGl0OjoKIAlXaXRoIHRoaXMgb3B0aW9uLCBgZ2l0LXJldmVydGAgd2lsbCBsZXQgeW91IGVkaXQgdGhlIGNvbW1pdAogCW1lc3NhZ2UgcHJpb3IgdG8gY29tbWl0dGluZyB0aGUgcmV2ZXJ0LiBUaGlzIGlzIHRoZSBkZWZhdWx0IGlmCiAJeW91IHJ1biB0aGUgY29tbWFuZCBmcm9tIGEgdGVybWluYWwuCiAKLS1tIHBhcmVudC1udW1iZXJ8LS1tYWlubGluZSBwYXJlbnQtbnVtYmVyOjoKKy1tIHBhcmVudC1udW1iZXI6OgorLS1tYWlubGluZSBwYXJlbnQtbnVtYmVyOjoKIAlVc3VhbGx5IHlvdSBjYW5ub3QgcmV2ZXJ0IGEgbWVyZ2UgYmVjYXVzZSB5b3UgZG8gbm90IGtub3cgd2hpY2gKIAlzaWRlIG9mIHRoZSBtZXJnZSBzaG91bGQgYmUgY29uc2lkZXJlZCB0aGUgbWFpbmxpbmUuICBUaGlzCiAJb3B0aW9uIHNwZWNpZmllcyB0aGUgcGFyZW50IG51bWJlciAoc3RhcnRpbmcgZnJvbSAxKSBvZgpAQCAtMzgsMjMgKzQwLDI4IEBACiAJV2l0aCB0aGlzIG9wdGlvbiwgYGdpdC1yZXZlcnRgIHdpbGwgbm90IHN0YXJ0IHRoZSBjb21taXQKIAltZXNzYWdlIGVkaXRvci4KIAotLW58LS1uby1jb21taXQ6OgorLW46OgorLS1uby1jb21taXQ6OgogCVVzdWFsbHkgdGhlIGNvbW1hbmQgYXV0b21hdGljYWxseSBjcmVhdGVzIGEgY29tbWl0IHdpdGgKLQlhIGNvbW1pdCBsb2cgbWVzc2FnZSBzdGF0aW5nIHdoaWNoIGNvbW1pdCB3YXMgcmV2ZXJ0ZWQuCi0JVGhpcyBmbGFnIGFwcGxpZXMgdGhlIGNoYW5nZSBuZWNlc3NhcnkgdG8gcmV2ZXJ0IHRoZQotCW5hbWVkIGNvbW1pdCB0byB5b3VyIHdvcmtpbmcgdHJlZSwgYnV0IGRvZXMgbm90IG1ha2UgdGhlCi0JY29tbWl0LiAgSW4gYWRkaXRpb24sIHdoZW4gdGhpcyBvcHRpb24gaXMgdXNlZCwgeW91cgotCXdvcmtpbmcgdHJlZSBkb2VzIG5vdCBoYXZlIHRvIG1hdGNoIHRoZSBIRUFEIGNvbW1pdC4KLQlUaGUgcmV2ZXJ0IGlzIGRvbmUgYWdhaW5zdCB0aGUgYmVnaW5uaW5nIHN0YXRlIG9mIHlvdXIKLQl3b3JraW5nIHRyZWUuCisJYSBjb21taXQgbG9nIG1lc3NhZ2Ugc3RhdGluZyB3aGljaCBjb21taXQgd2FzCisJcmV2ZXJ0ZWQuICBUaGlzIGZsYWcgYXBwbGllcyB0aGUgY2hhbmdlIG5lY2Vzc2FyeQorCXRvIHJldmVydCB0aGUgbmFtZWQgY29tbWl0IHRvIHlvdXIgd29ya2luZyB0cmVlCisJYW5kIHRoZSBpbmRleCwgYnV0IGRvZXMgbm90IG1ha2UgdGhlIGNvbW1pdC4gIEluIGFkZGl0aW9uLAorCXdoZW4gdGhpcyBvcHRpb24gaXMgdXNlZCwgeW91ciBpbmRleCBkb2VzIG5vdCBoYXZlIHRvIG1hdGNoCisJdGhlIEhFQUQgY29tbWl0LiAgVGhlIHJldmVydCBpcyBkb25lIGFnYWluc3QgdGhlCisJYmVnaW5uaW5nIHN0YXRlIG9mIHlvdXIgaW5kZXguCiArCiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHJldmVydGluZyBtb3JlIHRoYW4gb25lIGNvbW1pdHMnCi1lZmZlY3QgdG8geW91ciB3b3JraW5nIHRyZWUgaW4gYSByb3cuCitlZmZlY3QgdG8geW91ciBpbmRleCBpbiBhIHJvdy4KKworLXM6OgorLS1zaWdub2ZmOjoKKwlBZGQgU2lnbmVkLW9mZi1ieSBsaW5lIGF0IHRoZSBlbmQgb2YgdGhlIGNvbW1pdCBtZXNzYWdlLgogCiAKIEF1dGhvcgogLS0tLS0tCi1Xcml0dGVuIGJ5IEp1bmlvIEMgSGFtYW5vIDxqdW5raW9AY294Lm5ldD4KK1dyaXR0ZW4gYnkgSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgogCiBEb2N1bWVudGF0aW9uCiAtLS0tLS0tLS0tLS0tLQpAQCAtNjIsNCArNjksNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1ybS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1ybS50eHQKaW5kZXggOWM4MWI3Mi4uZDg4NTU0YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcm0udHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJtLnR4dApAQCAtMzgsNyArMzgsOCBAQAogLWY6OgogCU92ZXJyaWRlIHRoZSB1cC10by1kYXRlIGNoZWNrLgogCi0tbiwgXC0tZHJ5LXJ1bjo6Cistbjo6CistLWRyeS1ydW46OgogCURvbid0IGFjdHVhbGx5IHJlbW92ZSBhbnkgZmlsZShzKS4gIEluc3RlYWQsIGp1c3Qgc2hvdwogCWlmIHRoZXkgZXhpc3QgaW4gdGhlIGluZGV4IGFuZCB3b3VsZCBvdGhlcndpc2UgYmUgcmVtb3ZlZAogCWJ5IHRoZSBjb21tYW5kLgpAQCAtNTIsMTUgKzUzLDE2IEBACiAJdGhlIGxpc3Qgb2YgZmlsZXMsICh1c2VmdWwgd2hlbiBmaWxlbmFtZXMgbWlnaHQgYmUgbWlzdGFrZW4KIAlmb3IgY29tbWFuZC1saW5lIG9wdGlvbnMpLgogCi1cLS1jYWNoZWQ6OgorLS1jYWNoZWQ6OgogCVVzZSB0aGlzIG9wdGlvbiB0byB1bnN0YWdlIGFuZCByZW1vdmUgcGF0aHMgb25seSBmcm9tIHRoZSBpbmRleC4KIAlXb3JraW5nIHRyZWUgZmlsZXMsIHdoZXRoZXIgbW9kaWZpZWQgb3Igbm90LCB3aWxsIGJlCiAJbGVmdCBhbG9uZS4KIAotXC0taWdub3JlLXVubWF0Y2g6OgorLS1pZ25vcmUtdW5tYXRjaDo6CiAJRXhpdCB3aXRoIGEgemVybyBzdGF0dXMgZXZlbiBpZiBubyBmaWxlcyBtYXRjaGVkLgogCi0tcSwgXC0tcXVpZXQ6OgorLXE6OgorLS1xdWlldDo6CiAJZ2l0LXJtIG5vcm1hbGx5IG91dHB1dHMgb25lIGxpbmUgKGluIHRoZSBmb3JtIG9mIGFuICJybSIgY29tbWFuZCkKIAlmb3IgZWFjaCBmaWxlIHJlbW92ZWQuIFRoaXMgb3B0aW9uIHN1cHByZXNzZXMgdGhhdCBvdXRwdXQuCiAKQEAgLTkzLDcgKzk1LDcgQEAKIAkoaS5lLiB5b3UgYXJlIGxpc3RpbmcgdGhlIGZpbGVzIGV4cGxpY2l0bHkpLCBpdAogCWRvZXMgbm90IHJlbW92ZSBgc3ViZGlyL2dpdC1mb28uc2hgLgogCi1TZWUgQWxzbworU0VFIEFMU08KIC0tLS0tLS0tCiBsaW5rZ2l0OmdpdC1hZGRbMV0KIApAQCAtMTA3LDQgKzEwOSw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNlbmQtZW1haWwudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc2VuZC1lbWFpbC50eHQKaW5kZXggOWQwYTEwYy4uMjUxZDY2MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtc2VuZC1lbWFpbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2VuZC1lbWFpbC50eHQKQEAgLTQwLDcgKzQwLDggQEAKIAlPdXRwdXQgb2YgdGhpcyBjb21tYW5kIG11c3QgYmUgc2luZ2xlIGVtYWlsIGFkZHJlc3MgcGVyIGxpbmUuCiAJRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgJ3NlbmRlbWFpbC5jY2NtZCcgY29uZmlndXJhdGlvbiB2YWx1ZS4KIAotLS1jaGFpbi1yZXBseS10bywgLS1uby1jaGFpbi1yZXBseS10bzo6CistLWNoYWluLXJlcGx5LXRvOjoKKy0tbm8tY2hhaW4tcmVwbHktdG86OgogCUlmIHRoaXMgaXMgc2V0LCBlYWNoIGVtYWlsIHdpbGwgYmUgc2VudCBhcyBhIHJlcGx5IHRvIHRoZSBwcmV2aW91cwogCWVtYWlsIHNlbnQuICBJZiBkaXNhYmxlZCB3aXRoICItLW5vLWNoYWluLXJlcGx5LXRvIiwgYWxsIGVtYWlscyBhZnRlcgogCXRoZSBmaXJzdCB3aWxsIGJlIHNlbnQgYXMgcmVwbGllcyB0byB0aGUgZmlyc3QgZW1haWwgc2VudC4gIFdoZW4gdXNpbmcKQEAgLTY1LDcgKzY2LDggQEAKIAlPbmx5IG5lY2Vzc2FyeSBpZiAtLWNvbXBvc2UgaXMgYWxzbyBzZXQuICBJZiAtLWNvbXBvc2UKIAlpcyBub3Qgc2V0LCB0aGlzIHdpbGwgYmUgcHJvbXB0ZWQgZm9yLgogCi0tLXNpZ25lZC1vZmYtYnktY2MsIC0tbm8tc2lnbmVkLW9mZi1ieS1jYzo6CistLXNpZ25lZC1vZmYtYnktY2M6OgorLS1uby1zaWduZWQtb2ZmLWJ5LWNjOjoKICAgICAgICAgSWYgdGhpcyBpcyBzZXQsIGFkZCBlbWFpbHMgZm91bmQgaW4gU2lnbmVkLW9mZi1ieTogb3IgQ2M6IGxpbmVzIHRvIHRoZQogICAgICAgICBjYyBsaXN0LgogICAgICAgICBEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZiAnc2VuZGVtYWlsLnNpZ25lZG9mZmNjJyBjb25maWd1cmF0aW9uIHZhbHVlOwpAQCAtMTQxLDcgKzE0Myw4IEBACiAJT25seSBuZWNlc3NhcnkgaWYgLS1jb21wb3NlIGlzIGFsc28gc2V0LiAgSWYgLS1jb21wb3NlCiAJaXMgbm90IHNldCwgdGhpcyB3aWxsIGJlIHByb21wdGVkIGZvci4KIAotLS1zdXBwcmVzcy1mcm9tLCAtLW5vLXN1cHByZXNzLWZyb206OgorLS1zdXBwcmVzcy1mcm9tOjoKKy0tbm8tc3VwcHJlc3MtZnJvbTo6CiAgICAgICAgIElmIHRoaXMgaXMgc2V0LCBkbyBub3QgYWRkIHRoZSBGcm9tOiBhZGRyZXNzIHRvIHRoZSBjYzogbGlzdC4KICAgICAgICAgRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgJ3NlbmRlbWFpbC5zdXBwcmVzc2Zyb20nIGNvbmZpZ3VyYXRpb24gdmFsdWU7CiAgICAgICAgIGlmIHRoYXQgaXMgdW5zcGVjaWZpZWQsIGRlZmF1bHQgdG8gLS1uby1zdXBwcmVzcy1mcm9tLgpAQCAtMTU3LDcgKzE2MCw4IEBACiAJaWYgdGhhdCBpcyB1bnNwZWNpZmllZCwgZGVmYXVsdCB0byAnc2VsZicgaWYgLS1zdXBwcmVzcy1mcm9tIGlzCiAJc3BlY2lmaWVkLCBhcyB3ZWxsIGFzICdzb2InIGlmIC0tbm8tc2lnbmVkLW9mZi1jYyBpcyBzcGVjaWZpZWQuCiAKLS0tdGhyZWFkLCAtLW5vLXRocmVhZDo6CistLXRocmVhZDo6CistLW5vLXRocmVhZDo6CiAJSWYgdGhpcyBpcyBzZXQsIHRoZSBJbi1SZXBseS1UbyBoZWFkZXIgd2lsbCBiZSBzZXQgb24gZWFjaCBlbWFpbCBzZW50LgogCUlmIGRpc2FibGVkIHdpdGggIi0tbm8tdGhyZWFkIiwgbm8gZW1haWxzIHdpbGwgaGF2ZSB0aGUgSW4tUmVwbHktVG8KIAloZWFkZXIgc2V0LgpAQCAtMjQxLDQgKzI0NSw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNlbmQtcGFjay50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zZW5kLXBhY2sudHh0CmluZGV4IDc3NzUxNWIuLmJhMmZkYWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXNlbmQtcGFjay50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2VuZC1wYWNrLnR4dApAQCAtMjEsMzMgKzIxLDMzIEBACiAKIE9QVElPTlMKIC0tLS0tLS0KLVwtLXJlY2VpdmUtcGFjaz08Z2l0LXJlY2VpdmUtcGFjaz46OgorLS1yZWNlaXZlLXBhY2s9PGdpdC1yZWNlaXZlLXBhY2s+OjoKIAlQYXRoIHRvIHRoZSAnZ2l0LXJlY2VpdmUtcGFjaycgcHJvZ3JhbSBvbiB0aGUgcmVtb3RlCiAJZW5kLiAgU29tZXRpbWVzIHVzZWZ1bCB3aGVuIHB1c2hpbmcgdG8gYSByZW1vdGUKIAlyZXBvc2l0b3J5IG92ZXIgc3NoLCBhbmQgeW91IGRvIG5vdCBoYXZlIHRoZSBwcm9ncmFtIGluCiAJYSBkaXJlY3Rvcnkgb24gdGhlIGRlZmF1bHQgJFBBVEguCiAKLVwtLWV4ZWM9PGdpdC1yZWNlaXZlLXBhY2s+OjoKKy0tZXhlYz08Z2l0LXJlY2VpdmUtcGFjaz46OgogCVNhbWUgYXMgXC0tcmVjZWl2ZS1wYWNrPTxnaXQtcmVjZWl2ZS1wYWNrPi4KIAotXC0tYWxsOjoKKy0tYWxsOjoKIAlJbnN0ZWFkIG9mIGV4cGxpY2l0bHkgc3BlY2lmeWluZyB3aGljaCByZWZzIHRvIHVwZGF0ZSwKIAl1cGRhdGUgYWxsIGhlYWRzIHRoYXQgbG9jYWxseSBleGlzdC4KIAotXC0tZHJ5LXJ1bjo6CistLWRyeS1ydW46OgogCURvIGV2ZXJ5dGhpbmcgZXhjZXB0IGFjdHVhbGx5IHNlbmQgdGhlIHVwZGF0ZXMuCiAKLVwtLWZvcmNlOjoKKy0tZm9yY2U6OgogCVVzdWFsbHksIHRoZSBjb21tYW5kIHJlZnVzZXMgdG8gdXBkYXRlIGEgcmVtb3RlIHJlZiB0aGF0CiAJaXMgbm90IGFuIGFuY2VzdG9yIG9mIHRoZSBsb2NhbCByZWYgdXNlZCB0byBvdmVyd3JpdGUgaXQuCiAJVGhpcyBmbGFnIGRpc2FibGVzIHRoZSBjaGVjay4gIFdoYXQgdGhpcyBtZWFucyBpcyB0aGF0CiAJdGhlIHJlbW90ZSByZXBvc2l0b3J5IGNhbiBsb3NlIGNvbW1pdHM7IHVzZSBpdCB3aXRoCiAJY2FyZS4KIAotXC0tdmVyYm9zZTo6CistLXZlcmJvc2U6OgogCVJ1biB2ZXJib3NlbHkuCiAKLVwtLXRoaW46OgorLS10aGluOjoKIAlTcGVuZCBleHRyYSBjeWNsZXMgdG8gbWluaW1pemUgdGhlIG51bWJlciBvZiBvYmplY3RzIHRvIGJlIHNlbnQuCiAJVXNlIGl0IG9uIHNsb3dlciBjb25uZWN0aW9uLgogCkBAIC0xMjUsNCArMTI1LDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc2gtc2V0dXAudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc2gtc2V0dXAudHh0CmluZGV4IDE2YjhiNzUuLmM1NDMxNzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXNoLXNldHVwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaC1zZXR1cC50eHQKQEAgLTc3LDQgKzc3LDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc2hlbGwudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc2hlbGwudHh0CmluZGV4IGJjMDMxZTAuLmJkMDkxOTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXNoZWxsLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaGVsbC50eHQKQEAgLTMxLDQgKzMxLDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc2hvcnRsb2cudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvcnRsb2cudHh0CmluZGV4IGQ3Y2I0YzAuLmRhYTY0ZDQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXNob3J0bG9nLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaG9ydGxvZy50eHQKQEAgLTIyLDE3ICsyMiwyMSBAQAogT1BUSU9OUwogLS0tLS0tLQogCi0taCwgXC0taGVscDo6CistaDo6CistLWhlbHA6OgogCVByaW50IGEgc2hvcnQgdXNhZ2UgbWVzc2FnZSBhbmQgZXhpdC4KIAotLW4sIFwtLW51bWJlcmVkOjoKKy1uOjoKKy0tbnVtYmVyZWQ6OgogCVNvcnQgb3V0cHV0IGFjY29yZGluZyB0byB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgcGVyIGF1dGhvciBpbnN0ZWFkCiAJb2YgYXV0aG9yIGFscGhhYmV0aWMgb3JkZXIuCiAKLS1zLCBcLS1zdW1tYXJ5OjoKKy1zOjoKKy0tc3VtbWFyeTo6CiAJU3VwcHJlc3MgY29tbWl0IGRlc2NyaXB0aW9uIGFuZCBwcm92aWRlIGEgY29tbWl0IGNvdW50IHN1bW1hcnkgb25seS4KIAotLWUsIFwtLWVtYWlsOjoKKy1lOjoKKy0tZW1haWw6OgogCVNob3cgdGhlIGVtYWlsIGFkZHJlc3Mgb2YgZWFjaCBhdXRob3IuCiAKIC13Wzx3aWR0aD5bLDxpbmRlbnQxPlssPGluZGVudDI+XV1dOjoKQEAgLTY1LDQgKzY5LDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy1icmFuY2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy1icmFuY2gudHh0CmluZGV4IDBiYjgyNTAuLjZmNGEyYzQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctYnJhbmNoLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LWJyYW5jaC50eHQKQEAgLTM4LDEwICszOCwxMiBAQAogCWJyYW5jaGVzIHVuZGVyICRHSVRfRElSL3JlZnMvaGVhZHMvdG9waWMsIGdpdmluZwogCWB0b3BpYy8qYCB3b3VsZCBzaG93IGFsbCBvZiB0aGVtLgogCi0tcnwtLXJlbW90ZXM6OgorLXI6OgorLS1yZW1vdGVzOjoKIAlTaG93IHRoZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMuCiAKLS1hfC0tYWxsOjoKKy1hOjoKKy0tYWxsOjoKIAlTaG93IGJvdGggcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIGFuZCBsb2NhbCBicmFuY2hlcy4KIAogLS1jdXJyZW50OjoKQEAgLTE4MCw3ICsxODIsNyBAQAogCiBBdXRob3IKIC0tLS0tLQotV3JpdHRlbiBieSBKdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+CitXcml0dGVuIGJ5IEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KIAogCiBEb2N1bWVudGF0aW9uCkBAIC0xOTAsNCArMTkyLDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy1pbmRleC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LWluZGV4LnR4dAppbmRleCA1MzVhODg0Li44OTFmMGVmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LWluZGV4LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LWluZGV4LnR4dApAQCAtMzEsNCArMzEsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LXJlZi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LXJlZi50eHQKaW5kZXggY2UwZTY0My4uNmI5OTUyOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy1yZWYudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctcmVmLnR4dApAQCAtMjksMjIgKzI5LDI2IEBACiBPUFRJT05TCiAtLS0tLS0tCiAKLS1oLCAtLWhlYWQ6OgorLWg6OgorLS1oZWFkOjoKIAogCVNob3cgdGhlIEhFQUQgcmVmZXJlbmNlLgogCi0tLXRhZ3MsIC0taGVhZHM6OgorLS10YWdzOjoKKy0taGVhZHM6OgogCiAJTGltaXQgdG8gb25seSAicmVmcy9oZWFkcyIgYW5kICJyZWZzL3RhZ3MiLCByZXNwZWN0aXZlbHkuICBUaGVzZQogCW9wdGlvbnMgYXJlIG5vdCBtdXR1YWxseSBleGNsdXNpdmU7IHdoZW4gZ2l2ZW4gYm90aCwgcmVmZXJlbmNlcyBzdG9yZWQKIAlpbiAicmVmcy9oZWFkcyIgYW5kICJyZWZzL3RhZ3MiIGFyZSBkaXNwbGF5ZWQuCiAKLS1kLCAtLWRlcmVmZXJlbmNlOjoKKy1kOjoKKy0tZGVyZWZlcmVuY2U6OgogCiAJRGVyZWZlcmVuY2UgdGFncyBpbnRvIG9iamVjdCBJRHMgYXMgd2VsbC4gVGhleSB3aWxsIGJlIHNob3duIHdpdGggIl57fSIKIAlhcHBlbmRlZC4KIAotLXMsIC0taGFzaDo6Cistczo6CistLWhhc2g6OgogCiAJT25seSBzaG93IHRoZSBTSEExIGhhc2gsIG5vdCB0aGUgcmVmZXJlbmNlIG5hbWUuIFdoZW4gYWxzbyB1c2luZwogCS0tZGVyZWZlcmVuY2UgdGhlIGRlcmVmZXJlbmNlZCB0YWcgd2lsbCBzdGlsbCBiZSBzaG93biBhZnRlciB0aGUgU0hBMS4KQEAgLTU1LDE3ICs1OSwyMCBAQAogCUFzaWRlIGZyb20gcmV0dXJuaW5nIGFuIGVycm9yIGNvZGUgb2YgMSwgaXQgd2lsbCBhbHNvIHByaW50IGFuIGVycm9yCiAJbWVzc2FnZSBpZiAnLS1xdWlldCcgd2FzIG5vdCBzcGVjaWZpZWQuCiAKLS0tYWJicmV2LCAtLWFiYnJldj1sZW46OgorLS1hYmJyZXY6OgorLS1hYmJyZXY9bGVuOjoKIAogCUFiYnJldmlhdGUgdGhlIG9iamVjdCBuYW1lLiAgV2hlbiB1c2luZyBgLS1oYXNoYCwgeW91IGRvCiAJbm90IGhhdmUgdG8gc2F5IGAtLWhhc2ggLS1hYmJyZXZgOyBgLS1oYXNoPWxlbmAgd291bGQgZG8uCiAKLS1xLCAtLXF1aWV0OjoKKy1xOjoKKy0tcXVpZXQ6OgogCiAJRG8gbm90IHByaW50IGFueSByZXN1bHRzIHRvIHN0ZG91dC4gV2hlbiBjb21iaW5lZCB3aXRoICctLXZlcmlmeScgdGhpcwogCWNhbiBiZSB1c2VkIHRvIHNpbGVudGx5IGNoZWNrIGlmIGEgcmVmZXJlbmNlIGV4aXN0cy4KIAotLS1leGNsdWRlLWV4aXN0aW5nLCAtLWV4Y2x1ZGUtZXhpc3Rpbmc9cGF0dGVybjo6CistLWV4Y2x1ZGUtZXhpc3Rpbmc6OgorLS1leGNsdWRlLWV4aXN0aW5nPXBhdHRlcm46OgogCiAJTWFrZSBnaXQtc2hvdy1yZWYgYWN0IGFzIGEgZmlsdGVyIHRoYXQgcmVhZHMgcmVmcyBmcm9tIHN0ZGluIG9mIHRoZQogCWZvcm0gIl4oPzo8YW55dGhpbmc+XHMpPzxyZWZuYW1lPig/OlxeXHtcfSk/JCIgYW5kIHBlcmZvcm1zIHRoZQpAQCAtMTY5LDQgKzE3Niw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNob3cudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy50eHQKaW5kZXggMjllZDBhYy4uMTAxNzM5MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy50eHQKQEAgLTcxLDcgKzcxLDcgQEAKIEF1dGhvcgogLS0tLS0tCiBXcml0dGVuIGJ5IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0Bvc2RsLm9yZz4gYW5kCi1KdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+LiAgU2lnbmlmaWNhbnRseSBlbmhhbmNlZCBieQorSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPi4gIFNpZ25pZmljYW50bHkgZW5oYW5jZWQgYnkKIEpvaGFubmVzIFNjaGluZGVsaW4gPEpvaGFubmVzLlNjaGluZGVsaW5AZ214LmRlPi4KIAogCkBAIC04MSw0ICs4MSw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXN0YXNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXN0YXNoLnR4dAppbmRleCA4ZGMzNWQ0Li5iYWE0ZjU1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zdGFzaC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc3Rhc2gudHh0CkBAIC0xODIsNCArMTgyLDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc3RhdHVzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXN0YXR1cy50eHQKaW5kZXggM2VhMjY5YS4uNjAyNmU4YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtc3RhdHVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zdGF0dXMudHh0CkBAIC01MiwxNCArNTIsMTkgQEAKIHBhdGhzIHNob3duIGFyZSByZWxhdGl2ZSB0byB0aGUgcmVwb3NpdG9yeSByb290LCBub3QgdG8gdGhlIGN1cnJlbnQKIGRpcmVjdG9yeS4KIAotU2VlIEFsc28KK0lmIGBzdGF0dXMuc3VibW9kdWxlc3VtbWFyeWAgaXMgc2V0IHRvIGEgbm9uIHplcm8gbnVtYmVyIG9yIHRydWUgKGlkZW50aWNhbAordG8gLTEgb3IgYW4gdW5saW1pdGVkIG51bWJlciksIHRoZSBzdWJtb2R1bGUgc3VtbWFyeSB3aWxsIGJlIGVuYWJsZWQgYW5kIGEKK3N1bW1hcnkgb2YgY29tbWl0cyBmb3IgbW9kaWZpZWQgc3VibW9kdWxlcyB3aWxsIGJlIHNob3duIChzZWUgLS1zdW1tYXJ5LWxpbWl0CitvcHRpb24gb2YgbGlua2dpdDpnaXQtc3VibW9kdWxlWzFdKS4KKworU0VFIEFMU08KIC0tLS0tLS0tCiBsaW5rZ2l0OmdpdGlnbm9yZVs1XQogCiBBdXRob3IKIC0tLS0tLQogV3JpdHRlbiBieSBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAb3NkbC5vcmc+IGFuZAotSnVuaW8gQyBIYW1hbm8gPGp1bmtpb0Bjb3gubmV0Pi4KK0p1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4uCiAKIERvY3VtZW50YXRpb24KIC0tLS0tLS0tLS0tLS0tCkBAIC02Nyw0ICs3Miw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXN0cmlwc3BhY2UudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc3RyaXBzcGFjZS50eHQKaW5kZXggZmM1Njg3NS4uODQyMWEzOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtc3RyaXBzcGFjZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc3RyaXBzcGFjZS50eHQKQEAgLTE2LDcgKzE2LDggQEAKIAogT1BUSU9OUwogLS0tLS0tLQotLXN8LS1zdHJpcC1jb21tZW50czo6Cistczo6CistLXN0cmlwLWNvbW1lbnRzOjoKIAlJbiBhZGRpdGlvbiB0byBlbXB0eSBsaW5lcywgYWxzbyBzdHJpcCBsaW5lcyBzdGFydGluZyB3aXRoICcjJy4KIAogPHN0cmVhbT46OgpAQCAtMzIsNCArMzMsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zdWJtb2R1bGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc3VibW9kdWxlLnR4dAppbmRleCA2ZmZkODk2Li40NDFhZTE0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zdWJtb2R1bGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXN1Ym1vZHVsZS50eHQKQEAgLTExLDcgKzExLDggQEAKIFt2ZXJzZV0KICdnaXQtc3VibW9kdWxlJyBbLS1xdWlldF0gYWRkIFstYiBicmFuY2hdIFstLV0gPHJlcG9zaXRvcnk+IFs8cGF0aD5dCiAnZ2l0LXN1Ym1vZHVsZScgWy0tcXVpZXRdIHN0YXR1cyBbLS1jYWNoZWRdIFstLV0gWzxwYXRoPi4uLl0KLSdnaXQtc3VibW9kdWxlJyBbLS1xdWlldF0gW2luaXR8dXBkYXRlXSBbLS1dIFs8cGF0aD4uLi5dCisnZ2l0LXN1Ym1vZHVsZScgWy0tcXVpZXRdIGluaXQgWy0tXSBbPHBhdGg+Li4uXQorJ2dpdC1zdWJtb2R1bGUnIFstLXF1aWV0XSB1cGRhdGUgWy0taW5pdF0gWy0tXSBbPHBhdGg+Li4uXQogJ2dpdC1zdWJtb2R1bGUnIFstLXF1aWV0XSBzdW1tYXJ5IFstLXN1bW1hcnktbGltaXQgPG4+XSBbY29tbWl0XSBbLS1dIFs8cGF0aD4uLi5dCiAKIApAQCAtNDcsNiArNDgsMTAgQEAKIAlVcGRhdGUgdGhlIHJlZ2lzdGVyZWQgc3VibW9kdWxlcywgaS5lLiBjbG9uZSBtaXNzaW5nIHN1Ym1vZHVsZXMgYW5kCiAJY2hlY2tvdXQgdGhlIGNvbW1pdCBzcGVjaWZpZWQgaW4gdGhlIGluZGV4IG9mIHRoZSBjb250YWluaW5nIHJlcG9zaXRvcnkuCiAJVGhpcyB3aWxsIG1ha2UgdGhlIHN1Ym1vZHVsZXMgSEVBRCBiZSBkZXRhY2hlZC4KKysKK0lmIHRoZSBzdWJtb2R1bGUgaXMgbm90IHlldCBpbml0aWFsaXplZCwgYW5kIHlvdSBqdXN0IHdhbnQgdG8gdXNlIHRoZQorc2V0dGluZyBhcyBzdG9yZWQgaW4gLmdpdG1vZHVsZXMsIHlvdSBjYW4gYXV0b21hdGljYWxseSBpbml0aWFsaXplIHRoZQorc3VibW9kdWxlIHdpdGggdGhlIC0taW5pdCBvcHRpb24uCiAKIHN1bW1hcnk6OgogCVNob3cgY29tbWl0IHN1bW1hcnkgYmV0d2VlbiB0aGUgZ2l2ZW4gY29tbWl0IChkZWZhdWx0cyB0byBIRUFEKSBhbmQKQEAgLTU2LDEwICs2MSwxMiBAQAogCiBPUFRJT05TCiAtLS0tLS0tCi0tcSwgLS1xdWlldDo6CistcTo6CistLXF1aWV0OjoKIAlPbmx5IHByaW50IGVycm9yIG1lc3NhZ2VzLgogCi0tYiwgLS1icmFuY2g6OgorLWI6OgorLS1icmFuY2g6OgogCUJyYW5jaCBvZiByZXBvc2l0b3J5IHRvIGFkZCBhcyBzdWJtb2R1bGUuCiAKIC0tY2FjaGVkOjoKQEAgLTY3LDcgKzc0LDggQEAKIAljb21tYW5kcyB0eXBpY2FsbHkgdXNlIHRoZSBjb21taXQgZm91bmQgaW4gdGhlIHN1Ym1vZHVsZSBIRUFELCBidXQKIAl3aXRoIHRoaXMgb3B0aW9uLCB0aGUgY29tbWl0IHN0b3JlZCBpbiB0aGUgaW5kZXggaXMgdXNlZCBpbnN0ZWFkLgogCi0tbiwgLS1zdW1tYXJ5LWxpbWl0OjoKKy1uOjoKKy0tc3VtbWFyeS1saW1pdDo6CiAJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgdGhlIHN1bW1hcnkgY29tbWFuZC4KIAlMaW1pdCB0aGUgc3VtbWFyeSBzaXplIChudW1iZXIgb2YgY29tbWl0cyBzaG93biBpbiB0b3RhbCkuCiAJR2l2aW5nIDAgd2lsbCBkaXNhYmxlIHRoZSBzdW1tYXJ5OyBhIG5lZ2F0aXZlIG51bWJlciBtZWFucyB1bmxpbWl0ZWQKQEAgLTkzLDQgKzEwMSw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXN2bi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zdm4udHh0CmluZGV4IGJlYzlhY2MuLmMzNTBhZDAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXN2bi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc3ZuLnR4dApAQCAtNjEsNiArNjEsMTYgQEAKIAlTZXQgdGhlICd1c2VTdm5zeW5jUHJvcHMnIG9wdGlvbiBpbiB0aGUgW3N2bi1yZW1vdGVdIGNvbmZpZy4KIC0tcmV3cml0ZS1yb290PTxVUkw+OzsKIAlTZXQgdGhlICdyZXdyaXRlUm9vdCcgb3B0aW9uIGluIHRoZSBbc3ZuLXJlbW90ZV0gY29uZmlnLgorLS11c2UtbG9nLWF1dGhvcjs7CisJV2hlbiByZXRyaWV2aW5nIHN2biBjb21taXRzIGludG8gZ2l0IChhcyBwYXJ0IG9mIGZldGNoLCByZWJhc2UsIG9yCisJZGNvbW1pdCBvcGVyYXRpb25zKSwgbG9vayBmb3IgdGhlIGZpcnN0IEZyb206IG9yIFNpZ25lZC1vZmYtYnk6IGxpbmUKKwlpbiB0aGUgbG9nIG1lc3NhZ2UgYW5kIHVzZSB0aGF0IGFzIHRoZSBhdXRob3Igc3RyaW5nLgorLS1hZGQtYXV0aG9yLWZyb207OworCVdoZW4gY29tbWl0dGluZyB0byBzdm4gZnJvbSBnaXQgKGFzIHBhcnQgb2YgY29tbWl0IG9yIGRjb21taXQKKwlvcGVyYXRpb25zKSwgaWYgdGhlIGV4aXN0aW5nIGxvZyBtZXNzYWdlIGRvZXNuJ3QgYWxyZWFkeSBoYXZlIGEKKwlGcm9tOiBvciBTaWduZWQtb2ZmLWJ5OiBsaW5lLCBhcHBlbmQgYSBGcm9tOiBsaW5lIGJhc2VkIG9uIHRoZQorCWdpdCBjb21taXQncyBhdXRob3Igc3RyaW5nLiAgSWYgeW91IHVzZSB0aGlzLCB0aGVuIC0tdXNlLWxvZy1hdXRob3IKKwl3aWxsIHJldHJpZXZlIGEgdmFsaWQgYXV0aG9yIHN0cmluZyBmb3IgYWxsIGNvbW1pdHMuCiAtLXVzZXJuYW1lPTxVU0VSPjs7CiAJRm9yIHRyYW5zcG9ydHMgdGhhdCBTVk4gaGFuZGxlcyBhdXRoZW50aWNhdGlvbiBmb3IgKGh0dHAsCiAJaHR0cHMsIGFuZCBwbGFpbiBzdm4pLCBzcGVjaWZ5IHRoZSB1c2VybmFtZS4gIEZvciBvdGhlcgpAQCAtMTY2LDExICsxNzYsMTggQEAKIEFueSBvdGhlciBhcmd1bWVudHMgYXJlIHBhc3NlZCBkaXJlY3RseSB0byBgZ2l0IGxvZycKIAogJ2JsYW1lJzo6Ci0gICAgICAgU2hvdyB3aGF0IHJldmlzaW9uIGFuZCBhdXRob3IgbGFzdCBtb2RpZmllZCBlYWNoIGxpbmUgb2YgYSBmaWxlLiBUaGlzIGlzCi0gICAgICAgaWRlbnRpY2FsIHRvIGBnaXQgYmxhbWUnLCBidXQgU1ZOIHJldmlzaW9uIG51bWJlcnMgYXJlIHNob3duIGluc3RlYWQgb2YgZ2l0Ci0gICAgICAgY29tbWl0IGhhc2hlcy4KKyAgICAgICBTaG93IHdoYXQgcmV2aXNpb24gYW5kIGF1dGhvciBsYXN0IG1vZGlmaWVkIGVhY2ggbGluZSBvZiBhIGZpbGUuIFRoZQorICAgICAgIG91dHB1dCBvZiB0aGlzIG1vZGUgaXMgZm9ybWF0LWNvbXBhdGlibGUgd2l0aCB0aGUgb3V0cHV0IG9mCisgICAgICAgYHN2biBibGFtZScgYnkgZGVmYXVsdC4gTGlrZSB0aGUgU1ZOIGJsYW1lIGNvbW1hbmQsCisgICAgICAgbG9jYWwgdW5jb21taXR0ZWQgY2hhbmdlcyBpbiB0aGUgd29ya2luZyBjb3B5IGFyZSBpZ25vcmVkOworICAgICAgIHRoZSB2ZXJzaW9uIG9mIHRoZSBmaWxlIGluIHRoZSBIRUFEIHJldmlzaW9uIGlzIGFubm90YXRlZC4gVW5rbm93bgorICAgICAgIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGRpcmVjdGx5IHRvIGdpdC1ibGFtZS4KICsKLUFsbCBhcmd1bWVudHMgYXJlIHBhc3NlZCBkaXJlY3RseSB0byBgZ2l0IGJsYW1lJy4KKy0tZ2l0LWZvcm1hdDs7CisJUHJvZHVjZSBvdXRwdXQgaW4gdGhlIHNhbWUgZm9ybWF0IGFzIGBnaXQgYmxhbWUnLCBidXQgd2l0aAorCVNWTiByZXZpc2lvbiBudW1iZXJzIGluc3RlYWQgb2YgZ2l0IGNvbW1pdCBoYXNoZXMuIEluIHRoaXMgbW9kZSwKKwljaGFuZ2VzIHRoYXQgaGF2ZW4ndCBiZWVuIGNvbW1pdHRlZCB0byBTVk4gKGluY2x1ZGluZyBsb2NhbAorCXdvcmtpbmctY29weSBlZGl0cykgYXJlIHNob3duIGFzIHJldmlzaW9uIDAuCiAKIC0tCiAnZmluZC1yZXYnOjoKQEAgLTE4OCw2ICsyMDUsMTIgQEAKIAljb21taXQuICBBbGwgbWVyZ2luZyBpcyBhc3N1bWVkIHRvIGhhdmUgdGFrZW4gcGxhY2UKIAlpbmRlcGVuZGVudGx5IG9mIGdpdC1zdm4gZnVuY3Rpb25zLgogCisnY3JlYXRlLWlnbm9yZSc6OgorCVJlY3Vyc2l2ZWx5IGZpbmRzIHRoZSBzdm46aWdub3JlIHByb3BlcnR5IG9uIGRpcmVjdG9yaWVzIGFuZAorCWNyZWF0ZXMgbWF0Y2hpbmcgLmdpdGlnbm9yZSBmaWxlcy4gVGhlIHJlc3VsdGluZyBmaWxlcyBhcmUgc3RhZ2VkIHRvCisJYmUgY29tbWl0dGVkLCBidXQgYXJlIG5vdCBjb21taXR0ZWQuIFVzZSAtci8tLXJldmlzaW9uIHRvIHJlZmVyIHRvIGEKKwlzcGVjZmljIHJldmlzaW9uLgorCiAnc2hvdy1pZ25vcmUnOjoKIAlSZWN1cnNpdmVseSBmaW5kcyBhbmQgbGlzdHMgdGhlIHN2bjppZ25vcmUgcHJvcGVydHkgb24KIAlkaXJlY3Rvcmllcy4gIFRoZSBvdXRwdXQgaXMgc3VpdGFibGUgZm9yIGFwcGVuZGluZyB0bwpAQCAtMjEwLDYgKzIzMywxOSBAQAogCWFyZ3VtZW50LiAgVXNlIHRoZSAtLXVybCBvcHRpb24gdG8gb3V0cHV0IG9ubHkgdGhlIHZhbHVlIG9mIHRoZQogCSdVUkw6JyBmaWVsZC4KIAorJ3Byb3BsaXN0Jzo6CisJTGlzdHMgdGhlIHByb3BlcnRpZXMgc3RvcmVkIGluIHRoZSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkgYWJvdXQgYQorCWdpdmVuIGZpbGUgb3IgZGlyZWN0b3J5LiAgVXNlIC1yLy0tcmV2aXNpb24gdG8gcmVmZXIgdG8gYSBzcGVjaWZpYworCVN1YnZlcnNpb24gcmV2aXNpb24uCisKKydwcm9wZ2V0Jzo6CisJR2V0cyB0aGUgU3VidmVyc2lvbiBwcm9wZXJ0eSBnaXZlbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQsIGZvciBhCisJZmlsZS4gIEEgc3BlY2lmaWMgcmV2aXNpb24gY2FuIGJlIHNwZWNpZmllZCB3aXRoIC1yLy0tcmV2aXNpb24uCisKKydzaG93LWV4dGVybmFscyc6OgorCVNob3dzIHRoZSBTdWJ2ZXJzaW9uIGV4dGVybmFscy4gIFVzZSAtci8tLXJldmlzaW9uIHRvIHNwZWNpZnkgYQorCXNwZWNpZmljIHJldmlzaW9uLgorCiAtLQogCiBPUFRJT05TCkBAIC0zMjksMTEgKzM2NSwxNSBAQAogLW46OgogLS1kcnktcnVuOjoKIAotVGhpcyBpcyBvbmx5IHVzZWQgd2l0aCB0aGUgJ2Rjb21taXQnIGNvbW1hbmQuCitUaGlzIGNhbiBiZSB1c2VkIHdpdGggdGhlICdkY29tbWl0JyBhbmQgJ3JlYmFzZScgY29tbWFuZHMuCiAKLVByaW50IG91dCB0aGUgc2VyaWVzIG9mIGdpdCBhcmd1bWVudHMgdGhhdCB3b3VsZCBzaG93CitGb3IgJ2Rjb21taXQnLCBwcmludCBvdXQgdGhlIHNlcmllcyBvZiBnaXQgYXJndW1lbnRzIHRoYXQgd291bGQgc2hvdwogd2hpY2ggZGlmZnMgd291bGQgYmUgY29tbWl0dGVkIHRvIFNWTi4KIAorRm9yICdyZWJhc2UnLCBkaXNwbGF5IHRoZSBsb2NhbCBicmFuY2ggYXNzb2NpYXRlZCB3aXRoIHRoZSB1cHN0cmVhbSBzdm4KK3JlcG9zaXRvcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IGJyYW5jaCBhbmQgdGhlIFVSTCBvZiBzdm4KK3JlcG9zaXRvcnkgdGhhdCB3aWxsIGJlIGZldGNoZWQgZnJvbS4KKwogLS0KIAogQURWQU5DRUQgT1BUSU9OUwpAQCAtNDA4LDYgKzQ0OCw4IEBACiAJdGhlIHJlcG9zaXRvcnkgd2l0aCBhIHB1YmxpYyBodHRwOi8vIG9yIHN2bjovLyBVUkwgaW4gdGhlCiAJbWV0YWRhdGEgc28gdXNlcnMgb2YgaXQgd2lsbCBzZWUgdGhlIHB1YmxpYyBVUkwuCiAKKy0tCisKIFNpbmNlIHRoZSBub01ldGFkYXRhLCByZXdyaXRlUm9vdCwgdXNlU3Zuc3luY1Byb3BzIGFuZCB1c2VTdm1Qcm9wcwogb3B0aW9ucyBhbGwgYWZmZWN0IHRoZSBtZXRhZGF0YSBnZW5lcmF0ZWQgYW5kIHVzZWQgYnkgZ2l0LXN2bjsgdGhleQogKm11c3QqIGJlIHNldCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGJlZm9yZSBhbnkgaGlzdG9yeSBpcyBpbXBvcnRlZApAQCAtNDE2LDcgKzQ1OCw2IEBACiBBZGRpdGlvbmFsbHksIG9ubHkgb25lIG9mIHRoZXNlIGZvdXIgb3B0aW9ucyBjYW4gYmUgdXNlZCBwZXItc3ZuLXJlbW90ZQogc2VjdGlvbiBiZWNhdXNlIHRoZXkgYWZmZWN0IHRoZSAnZ2l0LXN2bi1pZDonIG1ldGFkYXRhIGxpbmUuCiAKLS0tCiAKIEJBU0lDIEVYQU1QTEVTCiAtLS0tLS0tLS0tLS0tLQpAQCAtNDcyLDcgKzUxMyw3IEBACiAJY2QgcHJvamVjdAogCWdpdC1pbml0CiAJZ2l0IHJlbW90ZSBhZGQgb3JpZ2luIHNlcnZlcjovcHViL3Byb2plY3QKLQlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS5vcmlnaW4uZmV0Y2g9K3JlZnMvcmVtb3Rlcy8qOnJlZnMvcmVtb3Rlcy8qCisJZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUub3JpZ2luLmZldGNoICcrcmVmcy9yZW1vdGVzLyo6cmVmcy9yZW1vdGVzLyonCiAJZ2l0IGZldGNoCiAjIEluaXRpYWxpemUgZ2l0LXN2biBsb2NhbGx5IChiZSBzdXJlIHRvIHVzZSB0aGUgc2FtZSBVUkwgYW5kIC1ULy1iLy10IG9wdGlvbnMgYXMgd2VyZSB1c2VkIG9uIHNlcnZlcikKIAlnaXQtc3ZuIGluaXQgaHR0cDovL3N2bi5mb28ub3JnL3Byb2plY3QKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXN5bWJvbGljLXJlZi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zeW1ib2xpYy1yZWYudHh0CmluZGV4IGE1YjQwZjMuLjU3MDlkZWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXN5bWJvbGljLXJlZi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc3ltYm9saWMtcmVmLnR4dApAQCAtMjYsNyArMjYsOCBAQAogT1BUSU9OUwogLS0tLS0tLQogCi0tcSwgLS1xdWlldDo6CistcTo6CistLXF1aWV0OjoKIAlEbyBub3QgaXNzdWUgYW4gZXJyb3IgbWVzc2FnZSBpZiB0aGUgPG5hbWU+IGlzIG5vdCBhCiAJc3ltYm9saWMgcmVmIGJ1dCBhIGRldGFjaGVkIEhFQUQ7IGluc3RlYWQgZXhpdCB3aXRoCiAJbm9uLXplcm8gc3RhdHVzIHNpbGVudGx5LgpAQCAtNTQsOCArNTUsOCBAQAogCiBBdXRob3IKIC0tLS0tLQotV3JpdHRlbiBieSBKdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+CitXcml0dGVuIGJ5IEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdGFnLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXRhZy50eHQKaW5kZXggOTcxMjM5Mi4uNmNmMTFjZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtdGFnLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC10YWcudHh0CkBAIC0yNDcsNyArMjQ3LDcgQEAKIEF1dGhvcgogLS0tLS0tCiBXcml0dGVuIGJ5IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0Bvc2RsLm9yZz4sCi1KdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+IGFuZCBDaHJpcyBXcmlnaHQgPGNocmlzd0Bvc2RsLm9yZz4uCitKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+IGFuZCBDaHJpcyBXcmlnaHQgPGNocmlzd0Bvc2RsLm9yZz4uCiAKIERvY3VtZW50YXRpb24KIC0tLS0tLS0tLS0tLS0tCkBAIC0yNTUsNCArMjU1LDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdGFyLXRyZWUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtdGFyLXRyZWUudHh0CmluZGV4IDY1YzY4MTcuLjc0ZWQwNjUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXRhci10cmVlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC10YXItdHJlZS50eHQKQEAgLTg2LDQgKzg2LDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdW5wYWNrLWZpbGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtdW5wYWNrLWZpbGUudHh0CmluZGV4IDE4NjRkMTMuLmQwNTUyYjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXVucGFjay1maWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC11bnBhY2stZmlsZS50eHQKQEAgLTMyLDQgKzMyLDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdW5wYWNrLW9iamVjdHMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtdW5wYWNrLW9iamVjdHMudHh0CmluZGV4IGI3OWJlM2YuLmI5YzQyNzkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXVucGFjay1vYmplY3RzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC11bnBhY2stb2JqZWN0cy50eHQKQEAgLTgsNyArOCw3IEBACiAKIFNZTk9QU0lTCiAtLS0tLS0tLQotJ2dpdC11bnBhY2stb2JqZWN0cycgWy1uXSBbLXFdIFstcl0gPHBhY2stZmlsZQorJ2dpdC11bnBhY2stb2JqZWN0cycgWy1uXSBbLXFdIFstcl0gWy0tc3RyaWN0XSA8cGFjay1maWxlCiAKIAogREVTQ1JJUFRJT04KQEAgLTQwLDYgKzQwLDkgQEAKIAlhbmQgbWFrZSB0aGUgYmVzdCBlZmZvcnQgdG8gcmVjb3ZlciBhcyBtYW55IG9iamVjdHMgYXMKIAlwb3NzaWJsZS4KIAorLS1zdHJpY3Q6OgorCURvbid0IHdyaXRlIG9iamVjdHMgd2l0aCBicm9rZW4gY29udGVudCBvciBsaW5rcy4KKwogCiBBdXRob3IKIC0tLS0tLQpAQCAtNTEsNCArNTQsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC11cGRhdGUtaW5kZXgudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtdXBkYXRlLWluZGV4LnR4dAppbmRleCA2NmJlMThlLi5iYmIwYTZhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC11cGRhdGUtaW5kZXgudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXVwZGF0ZS1pbmRleC50eHQKQEAgLTE1LDYgKzE1LDcgQEAKIAkgICAgIFstLWNhY2hlaW5mbyA8bW9kZT4gPG9iamVjdD4gPGZpbGU+XVwqCiAJICAgICBbLS1jaG1vZD0oK3wtKXhdCiAJICAgICBbLS1hc3N1bWUtdW5jaGFuZ2VkIHwgLS1uby1hc3N1bWUtdW5jaGFuZ2VkXQorCSAgICAgWy0taWdub3JlLXN1Ym1vZHVsZXNdCiAJICAgICBbLS1yZWFsbHktcmVmcmVzaF0gWy0tdW5yZXNvbHZlXSBbLS1hZ2FpbiB8IC1nXQogCSAgICAgWy0taW5mby1vbmx5XSBbLS1pbmRleC1pbmZvXQogCSAgICAgWy16XSBbLS1zdGRpbl0KQEAgLTU0LDYgKzU1LDEwIEBACiAgICAgICAgIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gZXJyb3Igb3V0LiAgVGhpcyBvcHRpb24gbWFrZXMKICAgICAgICAgZ2l0LXVwZGF0ZS1pbmRleCBjb250aW51ZSBhbnl3YXkuCiAKKy0taWdub3JlLXN1Ym1vZHVsZXM6CisJRG8gbm90IHRyeSB0byB1cGRhdGUgc3VibW9kdWxlcy4gIFRoaXMgb3B0aW9uIGlzIG9ubHkgcmVzcGVjdGVkCisJd2hlbiBwYXNzZWQgYmVmb3JlIC0tcmVmcmVzaC4KKwogLS11bm1lcmdlZDo6CiAgICAgICAgIElmIC0tcmVmcmVzaCBmaW5kcyB1bm1lcmdlZCBjaGFuZ2VzIGluIHRoZSBpbmRleCwgdGhlIGRlZmF1bHQKICAgICAgICAgYmVoYXZpb3IgaXMgdG8gZXJyb3Igb3V0LiAgVGhpcyBvcHRpb24gbWFrZXMgZ2l0LXVwZGF0ZS1pbmRleApAQCAtNzEsNyArNzYsOCBAQAogLS1jaG1vZD0oK3wtKXg6OgogICAgICAgICBTZXQgdGhlIGV4ZWN1dGUgcGVybWlzc2lvbnMgb24gdGhlIHVwZGF0ZWQgZmlsZXMuCiAKLS0tYXNzdW1lLXVuY2hhbmdlZCwgLS1uby1hc3N1bWUtdW5jaGFuZ2VkOjoKKy0tYXNzdW1lLXVuY2hhbmdlZDo6CistLW5vLWFzc3VtZS11bmNoYW5nZWQ6OgogCVdoZW4gdGhlc2UgZmxhZ3MgYXJlIHNwZWNpZmllZCwgdGhlIG9iamVjdCBuYW1lIHJlY29yZGVkCiAJZm9yIHRoZSBwYXRocyBhcmUgbm90IHVwZGF0ZWQuICBJbnN0ZWFkLCB0aGVzZSBvcHRpb25zCiAJc2V0cyBhbmQgdW5zZXRzIHRoZSAiYXNzdW1lIHVuY2hhbmdlZCIgYml0IGZvciB0aGUKQEAgLTgzLDcgKzg5LDggQEAKIAlmaWxlc3lzdGVtIHRoYXQgaGFzIHZlcnkgc2xvdyBsc3RhdCgyKSBzeXN0ZW0gY2FsbAogCShlLmcuIGNpZnMpLgogCi0tLWFnYWluLCAtZzo6CistZzo6CistLWFnYWluOjoKIAlSdW5zIGBnaXQtdXBkYXRlLWluZGV4YCBpdHNlbGYgb24gdGhlIHBhdGhzIHdob3NlIGluZGV4CiAJZW50cmllcyBhcmUgZGlmZmVyZW50IGZyb20gdGhvc2UgZnJvbSB0aGUgYEhFQURgIGNvbW1pdC4KIApAQCAtMzA3LDcgKzMxNCw3IEBACiAnVXNpbmcgImFzc3VtZSB1bmNoYW5nZWQiIGJpdCcgc2VjdGlvbiBhYm92ZS4KIAogCi1TZWUgQWxzbworU0VFIEFMU08KIC0tLS0tLS0tCiBsaW5rZ2l0OmdpdC1jb25maWdbMV0sCiBsaW5rZ2l0OmdpdC1hZGRbMV0KQEAgLTMyMyw0ICszMzAsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC11cGRhdGUtcmVmLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXVwZGF0ZS1yZWYudHh0CmluZGV4IDRkYzQ3NTkuLjdmN2UzZDEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXVwZGF0ZS1yZWYudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXVwZGF0ZS1yZWYudHh0CkBAIC05MCw0ICs5MCw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mby50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC11cGRhdGUtc2VydmVyLWluZm8udHh0CmluZGV4IDFjZjg5ZmQuLjRmZDdiNWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mby50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtdXBkYXRlLXNlcnZlci1pbmZvLnR4dApAQCAtMjIsNyArMjIsOCBAQAogT1BUSU9OUwogLS0tLS0tLQogCi0tZnwtLWZvcmNlOjoKKy1mOjoKKy0tZm9yY2U6OgogCVVwZGF0ZSB0aGUgaW5mbyBmaWxlcyBmcm9tIHNjcmF0Y2guCiAKIApAQCAtMzAsOCArMzEsOCBAQAogLS0tLS0tCiAKIEN1cnJlbnRseSB0aGUgY29tbWFuZCB1cGRhdGVzIHRoZSBmb2xsb3dpbmcgZmlsZXMuICBQbGVhc2Ugc2VlCi1saW5rOnJlcG9zaXRvcnktbGF5b3V0Lmh0bWxbcmVwb3NpdG9yeS1sYXlvdXRdIGZvciBkZXNjcmlwdGlvbgotb2Ygd2hhdCB0aGV5IGFyZSBmb3I6CitsaW5rZ2l0OmdpdHJlcG9zaXRvcnktbGF5b3V0WzVdW3JlcG9zaXRvcnktbGF5b3V0XSBmb3IgZGVzY3JpcHRpb24gb2YKK3doYXQgdGhleSBhcmUgZm9yOgogCiAqIG9iamVjdHMvaW5mby9wYWNrcwogCkBAIC00Niw3ICs0Nyw3IEBACiAKIEF1dGhvcgogLS0tLS0tCi1Xcml0dGVuIGJ5IEp1bmlvIEMgSGFtYW5vIDxqdW5raW9AY294Lm5ldD4KK1dyaXR0ZW4gYnkgSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgogCiBEb2N1bWVudGF0aW9uCiAtLS0tLS0tLS0tLS0tLQpAQCAtNTQsNCArNTUsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC11cGxvYWQtYXJjaGl2ZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC11cGxvYWQtYXJjaGl2ZS50eHQKaW5kZXggYzFlZjE0NC4uZTQ5ZjY4ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtdXBsb2FkLWFyY2hpdmUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXVwbG9hZC1hcmNoaXZlLnR4dApAQCAtMzQsNCArMzQsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC11cGxvYWQtcGFjay50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC11cGxvYWQtcGFjay50eHQKaW5kZXggMjMzMGQxMy4uYmFjNDY1ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtdXBsb2FkLXBhY2sudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXVwbG9hZC1wYWNrLnR4dApAQCAtMjQsMTAgKzI0LDEwIEBACiBPUFRJT05TCiAtLS0tLS0tCiAKLVwtLXN0cmljdDo6CistLXN0cmljdDo6CiAJRG8gbm90IHRyeSA8ZGlyZWN0b3J5Pi8uZ2l0LyBpZiA8ZGlyZWN0b3J5PiBpcyBubyBnaXQgZGlyZWN0b3J5LgogCi1cLS10aW1lb3V0PTxuPjo6CistLXRpbWVvdXQ9PG4+OjoKIAlJbnRlcnJ1cHQgdHJhbnNmZXIgYWZ0ZXIgPG4+IHNlY29uZHMgb2YgaW5hY3Rpdml0eS4KIAogPGRpcmVjdG9yeT46OgpAQCAtNDMsNCArNDMsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC12YXIudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtdmFyLnR4dAppbmRleCAyOTgwMjgzLi42N2U4ZTFmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC12YXIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXZhci50eHQKQEAgLTQ1LDcgKzQ1LDcgQEAKIFlvdXIgc3lzYWRtaW4gbXVzdCBoYXRlIHlvdSE6OgogICAgIFRoZSBwYXNzd29yZCg1KSBuYW1lIGZpZWxkIGlzIGxvbmdlciB0aGFuIGEgZ2lhbnQgc3RhdGljIGJ1ZmZlci4KIAotU2VlIEFsc28KK1NFRSBBTFNPCiAtLS0tLS0tLQogbGlua2dpdDpnaXQtY29tbWl0LXRyZWVbMV0KIGxpbmtnaXQ6Z2l0LXRhZ1sxXQpAQCAtNjEsNCArNjEsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC12ZXJpZnktcGFjay50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC12ZXJpZnktcGFjay50eHQKaW5kZXggYmEyYTE1Ny4uZmY3MDRiZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtdmVyaWZ5LXBhY2sudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXZlcmlmeS1wYWNrLnR4dApAQCAtNDIsNyArNDIsNyBAQAogCiBBdXRob3IKIC0tLS0tLQotV3JpdHRlbiBieSBKdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+CitXcml0dGVuIGJ5IEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KIAogRG9jdW1lbnRhdGlvbgogLS0tLS0tLS0tLS0tLS0KQEAgLTUwLDQgKzUwLDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdmVyaWZ5LXRhZy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC12ZXJpZnktdGFnLnR4dAppbmRleCA3ZTljMWVkLi5kZmZiYTg5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC12ZXJpZnktdGFnLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC12ZXJpZnktdGFnLnR4dApAQCAtMjgsNCArMjgsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC13ZWItLWJyb3dzZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC13ZWItLWJyb3dzZS50eHQKaW5kZXggZGRiYWU1Yi4uZTgwYTdjMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtd2ViLS1icm93c2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXdlYi0tYnJvd3NlLnR4dApAQCAtMjAsNyArMjAsNyBAQAogCiAqIGZpcmVmb3ggKHRoaXMgaXMgdGhlIGRlZmF1bHQgdW5kZXIgWCBXaW5kb3cgd2hlbiBub3QgdXNpbmcgS0RFKQogKiBpY2V3ZWFzZWwKLSoga29ucXVlcm9yICh0aGlzIGlzIHRoZSBkZWZhdWx0IHVuZGVyIEtERSkKKyoga29ucXVlcm9yICh0aGlzIGlzIHRoZSBkZWZhdWx0IHVuZGVyIEtERSwgc2VlICdOb3RlIGFib3V0IGtvbnF1ZXJvcicgYmVsb3cpCiAqIHczbSAodGhpcyBpcyB0aGUgZGVmYXVsdCBvdXRzaWRlIGdyYXBoaWNhbCBlbnZpcm9ubWVudHMpCiAqIGxpbmtzCiAqIGx5bngKQEAgLTMxLDE0ICszMSwxNyBAQAogCiBPUFRJT05TCiAtLS0tLS0tCi0tYiBCUk9XU0VSfC0tYnJvd3Nlcj1CUk9XU0VSOjoKKy1iIEJST1dTRVI6OgorLS1icm93c2VyPUJST1dTRVI6OgogCVVzZSB0aGUgc3BlY2lmaWVkIEJST1dTRVIuIEl0IG11c3QgYmUgaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkCiAJYnJvd3NlcnMuCiAKLS10IEJST1dTRVJ8LS10b29sPUJST1dTRVI6OgorLXQgQlJPV1NFUjo6CistLXRvb2w9QlJPV1NFUjo6CiAJU2FtZSBhcyBhYm92ZS4KIAotLWMgQ09ORi5WQVJ8LS1jb25maWc9Q09ORi5WQVI6OgorLWMgQ09ORi5WQVI6OgorLS1jb25maWc9Q09ORi5WQVI6OgogCUNPTkYuVkFSIGlzIGxvb2tlZCB1cCBpbiB0aGUgZ2l0IGNvbmZpZyBmaWxlcy4gSWYgaXQncyBzZXQsCiAJdGhlbiBpdHMgdmFsdWUgc3BlY2lmeSB0aGUgYnJvd3NlciB0aGF0IHNob3VsZCBiZSB1c2VkLgogCkBAIC03MSw2ICs3NCwyOCBAQAogYXMgYSBjdXN0b20gY29tbWFuZCBhbmQgd2lsbCB1c2UgYSBzaGVsbCBldmFsIHRvIHJ1biB0aGUgY29tbWFuZCB3aXRoCiB0aGUgVVJMcyBwYXNzZWQgYXMgYXJndW1lbnRzLgogCitOb3RlIGFib3V0IGtvbnF1ZXJvcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiAna29ucXVlcm9yJyBpcyBzcGVjaWZpZWQgYnkgdGhlIGEgY29tbWFuZCBsaW5lIG9wdGlvbiBvciBhCitjb25maWd1cmF0aW9uIHZhcmlhYmxlLCB3ZSBsYXVuY2ggJ2tmbWNsaWVudCcgdG8gdHJ5IHRvIG9wZW4gdGhlIEhUTUwKK21hbiBwYWdlIG9uIGFuIGFscmVhZHkgb3BlbmVkIGtvbnF1ZXJvciBpbiBhIG5ldyB0YWIgaWYgcG9zc2libGUuCisKK0ZvciBjb25zaXN0ZW5jeSwgd2UgYWxzbyB0cnkgc3VjaCBhIHRyaWNrIGlmICdicm93c2VyLmtvbnF1ZXJvci5wYXRoJyBpcworc2V0IHRvIHNvbWV0aGluZyBsaWtlICdBX1BBVEhfVE8va29ucXVlcm9yJy4gVGhhdCBtZWFucyB3ZSB3aWxsIHRyeSB0bworbGF1bmNoICdBX1BBVEhfVE8va2ZtY2xpZW50JyBpbnN0ZWFkLgorCitJZiB5b3UgcmVhbGx5IHdhbnQgdG8gdXNlICdrb25xdWVyb3InLCB0aGVuIHlvdSBjYW4gdXNlIHNvbWV0aGluZyBsaWtlCit0aGUgZm9sbG93aW5nOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlbd2ViXQorCQlicm93c2VyID0ga29ucQorCisJW2Jyb3dzZXIgImtvbnEiXQorCQljbWQgPSBBX1BBVEhfVE8va29ucXVlcm9yCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogTm90ZSBhYm91dCBnaXQgY29uZmlnIC0tZ2xvYmFsCiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIApAQCAtOTYsNCArMTIxLDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtd2hhdGNoYW5nZWQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtd2hhdGNoYW5nZWQudHh0CmluZGV4IGE2ZTdiZDQuLmZiNjcyZWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXdoYXRjaGFuZ2VkLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC13aGF0Y2hhbmdlZC50eHQKQEAgLTY3LDcgKzY3LDcgQEAKIEF1dGhvcgogLS0tLS0tCiBXcml0dGVuIGJ5IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0Bvc2RsLm9yZz4gYW5kCi1KdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+CitKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CiAKIAogRG9jdW1lbnRhdGlvbgpAQCAtNzYsNCArNzYsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC13cml0ZS10cmVlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXdyaXRlLXRyZWUudHh0CmluZGV4IDQ2MWM4MTMuLjg3NDRmNjUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXdyaXRlLXRyZWUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXdyaXRlLXRyZWUudHh0CkBAIC00Niw0ICs0Niw0IEBACiAKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LnR4dAppbmRleCA2MTVjMzA3Li4wZjU1ZjgwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQudHh0CkBAIC0xLDQgKzEsNCBAQAotZ2l0KDcpCitnaXQoMSkKID09PT09PQogCiBOQU1FCkBAIC0yMCwxMCArMjAsMTAgQEAKIHVudXN1YWxseSByaWNoIGNvbW1hbmQgc2V0IHRoYXQgcHJvdmlkZXMgYm90aCBoaWdoLWxldmVsIG9wZXJhdGlvbnMKIGFuZCBmdWxsIGFjY2VzcyB0byBpbnRlcm5hbHMuCiAKLVNlZSB0aGlzIGxpbms6dHV0b3JpYWwuaHRtbFt0dXRvcmlhbF0gdG8gZ2V0IHN0YXJ0ZWQsIHRoZW4gc2VlCitTZWUgdGhpcyBsaW5rZ2l0OmdpdHR1dG9yaWFsWzddW3R1dG9yaWFsXSB0byBnZXQgc3RhcnRlZCwgdGhlbiBzZWUKIGxpbms6ZXZlcnlkYXkuaHRtbFtFdmVyeWRheSBHaXRdIGZvciBhIHVzZWZ1bCBtaW5pbXVtIHNldCBvZiBjb21tYW5kcywgYW5kCiAibWFuIGdpdC1jb21tYW5kbmFtZSIgZm9yIGRvY3VtZW50YXRpb24gb2YgZWFjaCBjb21tYW5kLiAgQ1ZTIHVzZXJzIG1heQotYWxzbyB3YW50IHRvIHJlYWQgbGluazpjdnMtbWlncmF0aW9uLmh0bWxbQ1ZTIG1pZ3JhdGlvbl0uICBTZWUKK2Fsc28gd2FudCB0byByZWFkIGxpbmtnaXQ6Z2l0Y3ZzLW1pZ3JhdGlvbls3XVtDVlMgbWlncmF0aW9uXS4gIFNlZQogbGluazp1c2VyLW1hbnVhbC5odG1sW0dpdCBVc2VyJ3MgTWFudWFsXSBmb3IgYSBtb3JlIGluLWRlcHRoCiBpbnRyb2R1Y3Rpb24uCiAKQEAgLTQzLDcgKzQzLDE3IEBACiBicmFuY2ggb2YgdGhlIGBnaXQuZ2l0YCByZXBvc2l0b3J5LgogRG9jdW1lbnRhdGlvbiBmb3Igb2xkZXIgcmVsZWFzZXMgYXJlIGF2YWlsYWJsZSBoZXJlOgogCi0qIGxpbms6djEuNS41L2dpdC5odG1sW2RvY3VtZW50YXRpb24gZm9yIHJlbGVhc2UgMS41LjVdCisqIGxpbms6djEuNS42LjUvZ2l0Lmh0bWxbZG9jdW1lbnRhdGlvbiBmb3IgcmVsZWFzZSAxLjUuNi41XQorCisqIHJlbGVhc2Ugbm90ZXMgZm9yCisgIGxpbms6UmVsTm90ZXMtMS41LjYuNS50eHRbMS41LjYuNV0sCisgIGxpbms6UmVsTm90ZXMtMS41LjYuNC50eHRbMS41LjYuNF0sCisgIGxpbms6UmVsTm90ZXMtMS41LjYuMy50eHRbMS41LjYuM10sCisgIGxpbms6UmVsTm90ZXMtMS41LjYuMi50eHRbMS41LjYuMl0sCisgIGxpbms6UmVsTm90ZXMtMS41LjYuMS50eHRbMS41LjYuMV0sCisgIGxpbms6UmVsTm90ZXMtMS41LjYudHh0WzEuNS42XS4KKworKiBsaW5rOnYxLjUuNS40L2dpdC5odG1sW2RvY3VtZW50YXRpb24gZm9yIHJlbGVhc2UgMS41LjUuNF0KIAogKiByZWxlYXNlIG5vdGVzIGZvcgogICBsaW5rOlJlbE5vdGVzLTEuNS41LjQudHh0WzEuNS41LjRdLApAQCAtNTIsOCArNjIsNiBAQAogICBsaW5rOlJlbE5vdGVzLTEuNS41LjEudHh0WzEuNS41LjFdLAogICBsaW5rOlJlbE5vdGVzLTEuNS41LnR4dFsxLjUuNV0uCiAKLSogbGluazp2MS41LjUuNC9naXQuaHRtbFtkb2N1bWVudGF0aW9uIGZvciByZWxlYXNlIDEuNS41LjRdCi0KICogbGluazp2MS41LjQuNS9naXQuaHRtbFtkb2N1bWVudGF0aW9uIGZvciByZWxlYXNlIDEuNS40LjVdCiAKICogcmVsZWFzZSBub3RlcyBmb3IKQEAgLTc3LDYgKzg1LDggQEAKICAgbGluazpSZWxOb3Rlcy0xLjUuMy4xLnR4dFsxLjUuMy4xXSwKICAgbGluazpSZWxOb3Rlcy0xLjUuMy50eHRbMS41LjNdLgogCisqIGxpbms6djEuNS4yLjUvZ2l0Lmh0bWxbZG9jdW1lbnRhdGlvbiBmb3IgcmVsZWFzZSAxLjUuMi41XQorCiAqIHJlbGVhc2Ugbm90ZXMgZm9yCiAgIGxpbms6UmVsTm90ZXMtMS41LjIuNS50eHRbMS41LjIuNV0sCiAgIGxpbms6UmVsTm90ZXMtMS41LjIuNC50eHRbMS41LjIuNF0sCkBAIC0xMzgsNyArMTQ4LDggQEAKIAllbnZpcm9ubWVudCB2YXJpYWJsZS4gSWYgbm8gcGF0aCBpcyBnaXZlbiAnZ2l0JyB3aWxsIHByaW50CiAJdGhlIGN1cnJlbnQgc2V0dGluZyBhbmQgdGhlbiBleGl0LgogCi0tcHwtLXBhZ2luYXRlOjoKKy1wOjoKKy0tcGFnaW5hdGU6OgogCVBpcGUgYWxsIG91dHB1dCBpbnRvICdsZXNzJyAob3IgaWYgc2V0LCAkUEFHRVIpLgogCiAtLW5vLXBhZ2VyOjoKQEAgLTE0Niw3ICsxNTcsOCBAQAogCiAtLWdpdC1kaXI9PHBhdGg+OjoKIAlTZXQgdGhlIHBhdGggdG8gdGhlIHJlcG9zaXRvcnkuIFRoaXMgY2FuIGFsc28gYmUgY29udHJvbGxlZCBieQotCXNldHRpbmcgdGhlIEdJVF9ESVIgZW52aXJvbm1lbnQgdmFyaWFibGUuCisJc2V0dGluZyB0aGUgR0lUX0RJUiBlbnZpcm9ubWVudCB2YXJpYWJsZS4gSXQgY2FuIGJlIGFuIGFic29sdXRlCisJcGF0aCBvciByZWxhdGl2ZSBwYXRoIHRvIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCiAKIC0td29yay10cmVlPTxwYXRoPjo6CiAJU2V0IHRoZSBwYXRoIHRvIHRoZSB3b3JraW5nIHRyZWUuICBUaGUgdmFsdWUgd2lsbCBub3QgYmUKQEAgLTE1NCw3ICsxNjYsMTIgQEAKIAlhIC5naXQgZGlyZWN0b3J5IChpLmUuICRHSVRfRElSIGlzIG5vdCBzZXQpLgogCVRoaXMgY2FuIGFsc28gYmUgY29udHJvbGxlZCBieSBzZXR0aW5nIHRoZSBHSVRfV09SS19UUkVFCiAJZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIHRoZSBjb3JlLndvcmt0cmVlIGNvbmZpZ3VyYXRpb24KLQl2YXJpYWJsZS4KKwl2YXJpYWJsZS4gSXQgY2FuIGJlIGFuIGFic29sdXRlIHBhdGggb3IgcmVsYXRpdmUgcGF0aCB0bworCXRoZSBkaXJlY3Rvcnkgc3BlY2lmaWVkIGJ5IC0tZ2l0LWRpciBvciBHSVRfRElSLgorCU5vdGU6IElmIC0tZ2l0LWRpciBvciBHSVRfRElSIGFyZSBzcGVjaWZpZWQgYnV0IG5vbmUgb2YKKwktLXdvcmstdHJlZSwgR0lUX1dPUktfVFJFRSBhbmQgY29yZS53b3JrdHJlZSBpcyBzcGVjaWZpZWQsCisJdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaXMgcmVnYXJkZWQgYXMgdGhlIHRvcCBkaXJlY3RvcnkKKwlvZiB5b3VyIHdvcmtpbmcgdHJlZS4KIAogLS1iYXJlOjoKIAlUcmVhdCB0aGUgcmVwb3NpdG9yeSBhcyBhIGJhcmUgcmVwb3NpdG9yeS4gIElmIEdJVF9ESVIKQEAgLTE2OSw3ICsxODYsNyBAQAogcHJvYmFibHkgbW9yZSBkZXRhaWwgdGhhbiBuZWNlc3NhcnkgZm9yIGEgZmlyc3QtdGltZSB1c2VyLgogCiBUaGUgbGluazp1c2VyLW1hbnVhbC5odG1sI2dpdC1jb25jZXB0c1tnaXQgY29uY2VwdHMgY2hhcHRlciBvZiB0aGUKLXVzZXItbWFudWFsXSBhbmQgdGhlIGxpbms6Y29yZS10dXRvcmlhbC5odG1sW0NvcmUgdHV0b3JpYWxdIGJvdGggcHJvdmlkZQordXNlci1tYW51YWxdIGFuZCB0aGUgbGlua2dpdDpnaXRjb3JlLXR1dG9yaWFsWzddW0NvcmUgdHV0b3JpYWxdIGJvdGggcHJvdmlkZQogaW50cm9kdWN0aW9ucyB0byB0aGUgdW5kZXJseWluZyBnaXQgYXJjaGl0ZWN0dXJlLgogCiBTZWUgYWxzbyB0aGUgbGluazpob3d0by1pbmRleC5odG1sW2hvd3RvXSBkb2N1bWVudHMgZm9yIHNvbWUgdXNlZnVsCkBAIC0zNTksOSArMzc2LDEwIEBACiBGaWxlL0RpcmVjdG9yeSBTdHJ1Y3R1cmUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1QbGVhc2Ugc2VlIHRoZSBsaW5rOnJlcG9zaXRvcnktbGF5b3V0Lmh0bWxbcmVwb3NpdG9yeSBsYXlvdXRdIGRvY3VtZW50LgorUGxlYXNlIHNlZSB0aGUgbGlua2dpdDpnaXRyZXBvc2l0b3J5LWxheW91dFs1XVtyZXBvc2l0b3J5IGxheW91dF0KK2RvY3VtZW50LgogCi1SZWFkIGxpbms6aG9va3MuaHRtbFtob29rc10gZm9yIG1vcmUgZGV0YWlscyBhYm91dCBlYWNoIGhvb2suCitSZWFkIGxpbmtnaXQ6Z2l0aG9va3NbNV1baG9va3NdIGZvciBtb3JlIGRldGFpbHMgYWJvdXQgZWFjaCBob29rLgogCiBIaWdoZXIgbGV2ZWwgU0NNcyBtYXkgcHJvdmlkZSBhbmQgbWFuYWdlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGhlCiBgJEdJVF9ESVJgLgpAQCAtMzY5LDcgKzM4Nyw3IEBACiAKIFRlcm1pbm9sb2d5CiAtLS0tLS0tLS0tLQotUGxlYXNlIHNlZSB0aGUgbGluazpnbG9zc2FyeS5odG1sW2dsb3NzYXJ5XSBkb2N1bWVudC4KK1BsZWFzZSBzZWUgdGhlIGxpbmtnaXQ6Z2l0Z2xvc3NhcnlbN11bZ2xvc3NhcnldIGRvY3VtZW50LgogCiAKIEVudmlyb25tZW50IFZhcmlhYmxlcwpAQCAtNTEzLDcgKzUzMSw3IEBACiAKIE1vcmUgZGV0YWlsIG9uIHRoZSBmb2xsb3dpbmcgaXMgYXZhaWxhYmxlIGZyb20gdGhlCiBsaW5rOnVzZXItbWFudWFsLmh0bWwjZ2l0LWNvbmNlcHRzW2dpdCBjb25jZXB0cyBjaGFwdGVyIG9mIHRoZQotdXNlci1tYW51YWxdIGFuZCB0aGUgbGluazpjb3JlLXR1dG9yaWFsLmh0bWxbQ29yZSB0dXRvcmlhbF0uCit1c2VyLW1hbnVhbF0gYW5kIHRoZSBsaW5rZ2l0OmdpdGNvcmUtdHV0b3JpYWxbN11bQ29yZSB0dXRvcmlhbF0uCiAKIEEgZ2l0IHByb2plY3Qgbm9ybWFsbHkgY29uc2lzdHMgb2YgYSB3b3JraW5nIGRpcmVjdG9yeSB3aXRoIGEgIi5naXQiCiBzdWJkaXJlY3RvcnkgYXQgdGhlIHRvcCBsZXZlbC4gIFRoZSAuZ2l0IGRpcmVjdG9yeSBjb250YWlucywgYW1vbmcgb3RoZXIKQEAgLTU3NCw2ICs1OTIsMTMgQEAKIDxkYXZpZEBkZ3JlYXZlcy5jb20+LCBhbmQgbGF0ZXIgZW5oYW5jZWQgZ3JlYXRseSBieSB0aGUKIGNvbnRyaWJ1dG9ycyBvbiB0aGUgZ2l0LWxpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+LgogCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0dHV0b3JpYWxbN10sIGxpbmtnaXQ6Z2l0dHV0b3JpYWwtMls3XSwKK2xpbmtnaXQ6Z2l0ZXZlcnlkYXlbN10sIGxpbmtnaXQ6Z2l0Y3ZzLW1pZ3JhdGlvbls3XSwKK2xpbmtnaXQ6Z2l0Z2xvc3NhcnlbN10sIGxpbmtnaXQ6Z2l0Y29yZS10dXRvcmlhbFs3XSwKK2xpbms6dXNlci1tYW51YWwuaHRtbFtUaGUgR2l0IFVzZXIncyBNYW51YWxdCisKIEdJVAogLS0tCi1QYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFs3XSBzdWl0ZQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0YXR0cmlidXRlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdGF0dHJpYnV0ZXMudHh0CmluZGV4IDA0Y2E2M2MuLmVmMDZkOTQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0YXR0cmlidXRlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRhdHRyaWJ1dGVzLnR4dApAQCAtMjY1LDcgKzI2NSw3IEBACiBhdHRyaWJ1dGUgc2V0IHRvIGBqY2RpZmZgLCBpdCBjYWxscyB0aGUgY29tbWFuZCB5b3Ugc3BlY2lmaWVkCiB3aXRoIHRoZSBhYm92ZSBjb25maWd1cmF0aW9uLCBpLmUuIGBqLWMtZGlmZmAsIHdpdGggNwogcGFyYW1ldGVycywganVzdCBsaWtlIGBHSVRfRVhURVJOQUxfRElGRmAgcHJvZ3JhbSBpcyBjYWxsZWQuCi1TZWUgbGlua2dpdDpnaXRbN10gZm9yIGRldGFpbHMuCitTZWUgbGlua2dpdDpnaXRbMV0gZm9yIGRldGFpbHMuCiAKIAogRGVmaW5pbmcgYSBjdXN0b20gaHVuay1oZWFkZXIKQEAgLTQ1MCw2ICs0NTAsMjMgQEAKIAl2YXJpYWJsZS4KIAogCitDcmVhdGluZyBhbiBhcmNoaXZlCit+fn5+fn5+fn5+fn5+fn5+fn5+CisKK2BleHBvcnQtc3Vic3RgCiteXl5eXl5eXl5eXl5eXgorCitJZiB0aGUgYXR0cmlidXRlIGBleHBvcnQtc3Vic3RgIGlzIHNldCBmb3IgYSBmaWxlIHRoZW4gZ2l0IHdpbGwgZXhwYW5kCitzZXZlcmFsIHBsYWNlaG9sZGVycyB3aGVuIGFkZGluZyB0aGlzIGZpbGUgdG8gYW4gYXJjaGl2ZS4gIFRoZQorZXhwYW5zaW9uIGRlcGVuZHMgb24gdGhlIGF2YWlsYWJpbGl0eSBvZiBhIGNvbW1pdCBJRCwgaS5lLiBpZgorbGlua2dpdDpnaXQtYXJjaGl2ZVsxXSBoYXMgYmVlbiBnaXZlbiBhIHRyZWUgaW5zdGVhZCBvZiBhIGNvbW1pdCBvciBhCit0YWcgdGhlbiBubyByZXBsYWNlbWVudCB3aWxsIGJlIGRvbmUuICBUaGUgcGxhY2Vob2xkZXJzIGFyZSB0aGUgc2FtZQorYXMgdGhvc2UgZm9yIHRoZSBvcHRpb24gYC0tcHJldHR5PWZvcm1hdDpgIG9mIGxpbmtnaXQ6Z2l0LWxvZ1sxXSwKK2V4Y2VwdCB0aGF0IHRoZXkgbmVlZCB0byBiZSB3cmFwcGVkIGxpa2UgdGhpczogYCRGb3JtYXQ6UExBQ0VIT0xERVJTJGAKK2luIHRoZSBmaWxlLiAgRS5nLiB0aGUgc3RyaW5nIGAkRm9ybWF0OiVIJGAgd2lsbCBiZSByZXBsYWNlZCBieSB0aGUKK2NvbW1pdCBoYXNoLgorCisKIEVYQU1QTEUKIC0tLS0tLS0KIApAQCAtNDk5LDIzICs1MTYsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAKLUNyZWF0aW5nIGFuIGFyY2hpdmUKLX5+fn5+fn5+fn5+fn5+fn5+fn4KLQotYGV4cG9ydC1zdWJzdGAKLV5eXl5eXl5eXl5eXl5eCi0KLUlmIHRoZSBhdHRyaWJ1dGUgYGV4cG9ydC1zdWJzdGAgaXMgc2V0IGZvciBhIGZpbGUgdGhlbiBnaXQgd2lsbCBleHBhbmQKLXNldmVyYWwgcGxhY2Vob2xkZXJzIHdoZW4gYWRkaW5nIHRoaXMgZmlsZSB0byBhbiBhcmNoaXZlLiAgVGhlCi1leHBhbnNpb24gZGVwZW5kcyBvbiB0aGUgYXZhaWxhYmlsaXR5IG9mIGEgY29tbWl0IElELCBpLmUuIGlmCi1saW5rZ2l0OmdpdC1hcmNoaXZlWzFdIGhhcyBiZWVuIGdpdmVuIGEgdHJlZSBpbnN0ZWFkIG9mIGEgY29tbWl0IG9yIGEKLXRhZyB0aGVuIG5vIHJlcGxhY2VtZW50IHdpbGwgYmUgZG9uZS4gIFRoZSBwbGFjZWhvbGRlcnMgYXJlIHRoZSBzYW1lCi1hcyB0aG9zZSBmb3IgdGhlIG9wdGlvbiBgLS1wcmV0dHk9Zm9ybWF0OmAgb2YgbGlua2dpdDpnaXQtbG9nWzFdLAotZXhjZXB0IHRoYXQgdGhleSBuZWVkIHRvIGJlIHdyYXBwZWQgbGlrZSB0aGlzOiBgJEZvcm1hdDpQTEFDRUhPTERFUlMkYAotaW4gdGhlIGZpbGUuICBFLmcuIHRoZSBzdHJpbmcgYCRGb3JtYXQ6JUgkYCB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZQotY29tbWl0IGhhc2guCi0KIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRjbGkudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRjbGkudHh0CmluZGV4IDdlZTVjZTMuLjhmYjVkODggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0Y2xpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdGNsaS50eHQKQEAgLTEsNCArMSw0IEBACi1naXRjbGkoNSkKK2dpdGNsaSg3KQogPT09PT09PT09CiAKIE5BTUUKQEAgLTExMCw0ICsxMTAsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvcmUtdHV0b3JpYWwudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRjb3JlLXR1dG9yaWFsLnR4dApzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL2NvcmUtdHV0b3JpYWwudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2dpdGNvcmUtdHV0b3JpYWwudHh0CmluZGV4IDVhNTUzMTIuLmNiNGVjNDAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY29yZS10dXRvcmlhbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRjb3JlLXR1dG9yaWFsLnR4dApAQCAtMSwxNCArMSwyMiBAQAotQSBnaXQgY29yZSB0dXRvcmlhbCBmb3IgZGV2ZWxvcGVycwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorZ2l0Y29yZS10dXRvcmlhbCg3KQorPT09PT09PT09PT09PT09PT09PQogCi1JbnRyb2R1Y3Rpb24KLS0tLS0tLS0tLS0tLQorTkFNRQorLS0tLQorZ2l0Y29yZS10dXRvcmlhbCAtIEEgZ2l0IGNvcmUgdHV0b3JpYWwgZm9yIGRldmVsb3BlcnMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitnaXQgKgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KIAogVGhpcyB0dXRvcmlhbCBleHBsYWlucyBob3cgdG8gdXNlIHRoZSAiY29yZSIgZ2l0IHByb2dyYW1zIHRvIHNldCB1cCBhbmQKIHdvcmsgd2l0aCBhIGdpdCByZXBvc2l0b3J5LgogCiBJZiB5b3UganVzdCBuZWVkIHRvIHVzZSBnaXQgYXMgYSByZXZpc2lvbiBjb250cm9sIHN5c3RlbSB5b3UgbWF5IHByZWZlcgotdG8gc3RhcnQgd2l0aCBsaW5rOnR1dG9yaWFsLmh0bWxbYSB0dXRvcmlhbCBpbnRyb2R1Y3Rpb24gdG8gZ2l0XSBvcgordG8gc3RhcnQgd2l0aCBsaW5rZ2l0OmdpdHR1dG9yaWFsWzddW2EgdHV0b3JpYWwgaW50cm9kdWN0aW9uIHRvIGdpdF0gb3IKIGxpbms6dXNlci1tYW51YWwuaHRtbFt0aGUgZ2l0IHVzZXIgbWFudWFsXS4KIAogSG93ZXZlciwgYW4gdW5kZXJzdGFuZGluZyBvZiB0aGVzZSBsb3ctbGV2ZWwgdG9vbHMgY2FuIGJlIGhlbHBmdWwgaWYKQEAgLTEwMSw3ICsxMDksNyBAQAogCiBbTk9URV0KIEFuIGFkdmFuY2VkIHVzZXIgbWF5IHdhbnQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlCi1saW5rOnJlcG9zaXRvcnktbGF5b3V0Lmh0bWxbcmVwb3NpdG9yeSBsYXlvdXRdIGRvY3VtZW50CitsaW5rZ2l0OmdpdHJlcG9zaXRvcnktbGF5b3V0WzVdW3JlcG9zaXRvcnkgbGF5b3V0XSBkb2N1bWVudAogYWZ0ZXIgZmluaXNoaW5nIHRoaXMgdHV0b3JpYWwuCiAKIFlvdSBoYXZlIG5vdyBjcmVhdGVkIHlvdXIgZmlyc3QgZ2l0IHJlcG9zaXRvcnkuIE9mIGNvdXJzZSwgc2luY2UgaXQncwpAQCAtMTU4MSw3ICsxNTg5LDcgQEAKIGhhdmUgdG8gd29ycnkuIGdpdCBzdXBwb3J0cyAic2hhcmVkIHB1YmxpYyByZXBvc2l0b3J5IiBzdHlsZSBvZgogY29vcGVyYXRpb24geW91IGFyZSBwcm9iYWJseSBtb3JlIGZhbWlsaWFyIHdpdGggYXMgd2VsbC4KIAotU2VlIGxpbms6Y3ZzLW1pZ3JhdGlvbi5odG1sW2dpdCBmb3IgQ1ZTIHVzZXJzXSBmb3IgdGhlIGRldGFpbHMuCitTZWUgbGlua2dpdDpnaXRjdnMtbWlncmF0aW9uWzddW2dpdCBmb3IgQ1ZTIHVzZXJzXSBmb3IgdGhlIGRldGFpbHMuCiAKIEJ1bmRsaW5nIHlvdXIgd29yayB0b2dldGhlcgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNjc5LDMgKzE2ODcsMTMgQEAKIGFuZCB0aGUgcmVhc29uIHdoeSB5b3UgcHJlZmVycmVkIGNoYW5nZXMgbWFkZSBpbiBvbmUgc2lkZSBvdmVyCiB0aGUgb3RoZXIuICBPdGhlcndpc2UgaXQgd291bGQgbWFrZSB0aGUgcHJvamVjdCBoaXN0b3J5IGhhcmRlcgogdG8gZm9sbG93LCBub3QgZWFzaWVyLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0dHV0b3JpYWxbN10sIGxpbmtnaXQ6Z2l0dHV0b3JpYWwtMls3XSwKK2xpbmtnaXQ6Z2l0ZXZlcnlkYXlbN10sIGxpbmtnaXQ6Z2l0Y3ZzLW1pZ3JhdGlvbls3XSwKK2xpbms6dXNlci1tYW51YWwuaHRtbFtUaGUgR2l0IFVzZXIncyBNYW51YWxdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY3ZzLW1pZ3JhdGlvbi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdGN2cy1taWdyYXRpb24udHh0CnNpbWlsYXJpdHkgaW5kZXggODglCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vY3ZzLW1pZ3JhdGlvbi50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZ2l0Y3ZzLW1pZ3JhdGlvbi50eHQKaW5kZXggMDBmMmUzNi4uMDMyNWQ2NyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jdnMtbWlncmF0aW9uLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdGN2cy1taWdyYXRpb24udHh0CkBAIC0xLDUgKzEsMTYgQEAKLWdpdCBmb3IgQ1ZTIHVzZXJzCi09PT09PT09PT09PT09PT09PQorZ2l0Y3ZzLW1pZ3JhdGlvbig3KQorPT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXRjdnMtbWlncmF0aW9uIC0gZ2l0IGZvciBDVlMgdXNlcnMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitnaXQgY3ZzaW1wb3J0ICoKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCiAKIEdpdCBkaWZmZXJzIGZyb20gQ1ZTIGluIHRoYXQgZXZlcnkgd29ya2luZyB0cmVlIGNvbnRhaW5zIGEgcmVwb3NpdG9yeSB3aXRoCiBhIGZ1bGwgY29weSBvZiB0aGUgcHJvamVjdCBoaXN0b3J5LCBhbmQgbm8gcmVwb3NpdG9yeSBpcyBpbmhlcmVudGx5IG1vcmUKQEAgLTgsOCArMTksOCBAQAogdGhpcyBkb2N1bWVudCBleHBsYWlucyBob3cgdG8gZG8gdGhhdC4KIAogU29tZSBiYXNpYyBmYW1pbGlhcml0eSB3aXRoIGdpdCBpcyByZXF1aXJlZC4gIFRoaXMKLWxpbms6dHV0b3JpYWwuaHRtbFt0dXRvcmlhbCBpbnRyb2R1Y3Rpb24gdG8gZ2l0XSBhbmQgdGhlCi1saW5rOmdsb3NzYXJ5Lmh0bWxbZ2l0IGdsb3NzYXJ5XSBzaG91bGQgYmUgc3VmZmljaWVudC4KK2xpbmtnaXQ6Z2l0dHV0b3JpYWxbN11bdHV0b3JpYWwgaW50cm9kdWN0aW9uIHRvIGdpdF0gYW5kIHRoZQorbGlua2dpdDpnaXRnbG9zc2FyeVs3XVtnaXQgZ2xvc3NhcnldIHNob3VsZCBiZSBzdWZmaWNpZW50LgogCiBEZXZlbG9waW5nIGFnYWluc3QgYSBzaGFyZWQgcmVwb3NpdG9yeQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTcxLDcgKzgyLDcgQEAKIAogV2UgYXNzdW1lIHlvdSBoYXZlIGFscmVhZHkgY3JlYXRlZCBhIGdpdCByZXBvc2l0b3J5IGZvciB5b3VyIHByb2plY3QsCiBwb3NzaWJseSBjcmVhdGVkIGZyb20gc2NyYXRjaCBvciBmcm9tIGEgdGFyYmFsbCAoc2VlIHRoZQotbGluazp0dXRvcmlhbC5odG1sW3R1dG9yaWFsXSksIG9yIGltcG9ydGVkIGZyb20gYW4gYWxyZWFkeSBleGlzdGluZyBDVlMKK2xpbmtnaXQ6Z2l0dHV0b3JpYWxbN11bdHV0b3JpYWxdKSwgb3IgaW1wb3J0ZWQgZnJvbSBhbiBhbHJlYWR5IGV4aXN0aW5nIENWUwogcmVwb3NpdG9yeSAoc2VlIHRoZSBuZXh0IHNlY3Rpb24pLgogCiBBc3N1bWUgeW91ciBleGlzdGluZyByZXBvIGlzIGF0IC9ob21lL2FsaWNlL215cHJvamVjdC4gIENyZWF0ZSBhIG5ldyAiYmFyZSIKQEAgLTEzMiwxMiArMTQzLDE3IEBACiBicmFuY2hlcyBmb3IgeW91ciBvd24gY2hhbmdlcywgYW5kIG1lcmdlIGluIHRoZSBpbXBvcnRlZCBicmFuY2hlcyBhcwogbmVjZXNzYXJ5LgogCitJZiB5b3Ugd2FudCBhIHNoYXJlZCByZXBvc2l0b3J5LCB5b3Ugd2lsbCBuZWVkIHRvIG1ha2UgYSBiYXJlIGNsb25lCitvZiB0aGUgaW1wb3J0ZWQgZGlyZWN0b3J5LCBhcyBkZXNjcmliZWQgYWJvdmUuIFRoZW4gdHJlYXQgdGhlIGltcG9ydGVkCitkaXJlY3RvcnkgYXMgYW5vdGhlciBkZXZlbG9wbWVudCBjbG9uZSBmb3IgcHVycG9zZXMgb2YgbWVyZ2luZworaW5jcmVtZW50YWwgaW1wb3J0cy4KKwogQWR2YW5jZWQgU2hhcmVkIFJlcG9zaXRvcnkgTWFuYWdlbWVudAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBHaXQgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHNjcmlwdHMgY2FsbGVkICJob29rcyIgdG8gYmUgcnVuIGF0IGNlcnRhaW4KIHBvaW50cy4gIFlvdSBjYW4gdXNlIHRoZXNlLCBmb3IgZXhhbXBsZSwgdG8gc2VuZCBhbGwgY29tbWl0cyB0byB0aGUgc2hhcmVkCi1yZXBvc2l0b3J5IHRvIGEgbWFpbGluZyBsaXN0LiAgU2VlIGxpbms6aG9va3MuaHRtbFtIb29rcyB1c2VkIGJ5IGdpdF0uCityZXBvc2l0b3J5IHRvIGEgbWFpbGluZyBsaXN0LiAgU2VlIGxpbmtnaXQ6Z2l0aG9va3NbNV1bSG9va3MgdXNlZCBieSBnaXRdLgogCiBZb3UgY2FuIGVuZm9yY2UgZmluZXIgZ3JhaW5lZCBwZXJtaXNzaW9ucyB1c2luZyB1cGRhdGUgaG9va3MuICBTZWUKIGxpbms6aG93dG8vdXBkYXRlLWhvb2stZXhhbXBsZS50eHRbQ29udHJvbGxpbmcgYWNjZXNzIHRvIGJyYW5jaGVzIHVzaW5nCkBAIC0xNzAsMyArMTg2LDE2IEBACiAKIFdpdGggYSBzbWFsbCBncm91cCwgZGV2ZWxvcGVycyBtYXkganVzdCBwdWxsIGNoYW5nZXMgZnJvbSBlYWNoIG90aGVyJ3MKIHJlcG9zaXRvcmllcyB3aXRob3V0IHRoZSBuZWVkIGZvciBhIGNlbnRyYWwgbWFpbnRhaW5lci4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdHR1dG9yaWFsWzddLAorbGlua2dpdDpnaXR0dXRvcmlhbC0yWzddLAorbGlua2dpdDpnaXRjb3JlLXR1dG9yaWFsWzddLAorbGlua2dpdDpnaXRnbG9zc2FyeVs3XSwKK2xpbms6ZXZlcnlkYXkuaHRtbFtFdmVyeWRheSBHaXRdLAorbGluazp1c2VyLW1hbnVhbC5odG1sW1RoZSBHaXQgVXNlcidzIE1hbnVhbF0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kaWZmY29yZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdGRpZmZjb3JlLnR4dApzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL2RpZmZjb3JlLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9naXRkaWZmY29yZS50eHQKaW5kZXggYzZhOTgzYS4uNGQ1NmM4NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kaWZmY29yZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRkaWZmY29yZS50eHQKQEAgLTEsMTAgKzEsMTYgQEAKLVR3ZWFraW5nIGRpZmYgb3V0cHV0Ci09PT09PT09PT09PT09PT09PT09PQotSnVuZSAyMDA1CitnaXRkaWZmY29yZSg3KQorPT09PT09PT09PT09PT0KIAorTkFNRQorLS0tLQorZ2l0ZGlmZmNvcmUgLSBUd2Vha2luZyBkaWZmIG91dHB1dCAoSnVuZSAyMDA1KQogCi1JbnRyb2R1Y3Rpb24KLS0tLS0tLS0tLS0tLQorU1lOT1BTSVMKKy0tLS0tLS0tCitnaXQgZGlmZiAqCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQogCiBUaGUgZGlmZiBjb21tYW5kcyBnaXQtZGlmZi1pbmRleCwgZ2l0LWRpZmYtZmlsZXMsIGFuZCBnaXQtZGlmZi10cmVlCiBjYW4gYmUgdG9sZCB0byBtYW5pcHVsYXRlIGRpZmZlcmVuY2VzIHRoZXkgZmluZCBpbgpAQCAtMjY5LDMgKzI3NSwxOCBAQAogKi5jCiB0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1kaWZmWzFdLAorbGlua2dpdDpnaXQtZGlmZi1maWxlc1sxXSwKK2xpbmtnaXQ6Z2l0LWRpZmYtaW5kZXhbMV0sCitsaW5rZ2l0OmdpdC1kaWZmLXRyZWVbMV0sCitsaW5rZ2l0OmdpdC1mb3JtYXQtcGF0Y2hbMV0sCitsaW5rZ2l0OmdpdC1sb2dbMV0sCitsaW5rZ2l0OmdpdGdsb3NzYXJ5WzddLAorbGluazp1c2VyLW1hbnVhbC5odG1sW1RoZSBHaXQgVXNlcidzIE1hbnVhbF0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRnbG9zc2FyeS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdGdsb3NzYXJ5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzVjMzFkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRnbG9zc2FyeS50eHQKQEAgLTAsMCArMSwyNSBAQAorZ2l0Z2xvc3NhcnkoNykKKz09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdGdsb3NzYXJ5IC0gQSBHSVQgR2xvc3NhcnkKKworU1lOT1BTSVMKKy0tLS0tLS0tCisqCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitpbmNsdWRlOjpnbG9zc2FyeS1jb250ZW50LnR4dFtdCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXR0dXRvcmlhbFs3XSwgbGlua2dpdDpnaXR0dXRvcmlhbC0yWzddLAorbGlua2dpdDpnaXRldmVyeWRheVs3XSwgbGlua2dpdDpnaXRjdnMtbWlncmF0aW9uWzddLAorbGluazp1c2VyLW1hbnVhbC5odG1sW1RoZSBHaXQgVXNlcidzIE1hbnVhbF0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ob29rcy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdGhvb2tzLnR4dApzaW1pbGFyaXR5IGluZGV4IDkzJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL2hvb2tzLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9naXRob29rcy50eHQKaW5kZXggNzZiOGQ3Ny4uNGYwNmFlMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ob29rcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRob29rcy50eHQKQEAgLTEsNSArMSwxNyBAQAotSG9va3MgdXNlZCBieSBnaXQKLT09PT09PT09PT09PT09PT09CitnaXRob29rcyg1KQorPT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0aG9va3MgLSBIb29rcyB1c2VkIGJ5IGdpdAorCitTWU5PUFNJUworLS0tLS0tLS0KKyRHSVRfRElSL2hvb2tzLyoKKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KIAogSG9va3MgYXJlIGxpdHRsZSBzY3JpcHRzIHlvdSBjYW4gcGxhY2UgaW4gYCRHSVRfRElSL2hvb2tzYAogZGlyZWN0b3J5IHRvIHRyaWdnZXIgYWN0aW9uIGF0IGNlcnRhaW4gcG9pbnRzLiAgV2hlbgpAQCAtMjgsMTAgKzQwLDExIEBACiBwcmUtYXBwbHlwYXRjaAogLS0tLS0tLS0tLS0tLS0KIAotVGhpcyBob29rIGlzIGludm9rZWQgYnkgYGdpdC1hbWAuICBJdCB0YWtlcyBubyBwYXJhbWV0ZXIsCi1hbmQgaXMgaW52b2tlZCBhZnRlciB0aGUgcGF0Y2ggaXMgYXBwbGllZCwgYnV0IGJlZm9yZSBhIGNvbW1pdAotaXMgbWFkZS4gIEV4aXRpbmcgd2l0aCBub24temVybyBzdGF0dXMgY2F1c2VzIHRoZSB3b3JraW5nIHRyZWUKLWFmdGVyIGFwcGxpY2F0aW9uIG9mIHRoZSBwYXRjaCBub3QgY29tbWl0dGVkLgorVGhpcyBob29rIGlzIGludm9rZWQgYnkgYGdpdC1hbWAuICBJdCB0YWtlcyBubyBwYXJhbWV0ZXIsIGFuZCBpcworaW52b2tlZCBhZnRlciB0aGUgcGF0Y2ggaXMgYXBwbGllZCwgYnV0IGJlZm9yZSBhIGNvbW1pdCBpcyBtYWRlLgorCitJZiBpdCBleGl0cyB3aXRoIG5vbi16ZXJvIHN0YXR1cywgdGhlbiB0aGUgd29ya2luZyB0cmVlIHdpbGwgbm90IGJlCitjb21taXR0ZWQgYWZ0ZXIgYXBwbHlpbmcgdGhlIHBhdGNoLgogCiBJdCBjYW4gYmUgdXNlZCB0byBpbnNwZWN0IHRoZSBjdXJyZW50IHdvcmtpbmcgdHJlZSBhbmQgcmVmdXNlIHRvCiBtYWtlIGEgY29tbWl0IGlmIGl0IGRvZXMgbm90IHBhc3MgY2VydGFpbiB0ZXN0LgpAQCAtMTM2LDcgKzE0OSw4IEBACiBUaGlzIGhvb2sgaXMgaW52b2tlZCBieSBgZ2l0LW1lcmdlYCwgd2hpY2ggaGFwcGVucyB3aGVuIGEgYGdpdCBwdWxsYAogaXMgZG9uZSBvbiBhIGxvY2FsIHJlcG9zaXRvcnkuICBUaGUgaG9vayB0YWtlcyBhIHNpbmdsZSBwYXJhbWV0ZXIsIGEgc3RhdHVzCiBmbGFnIHNwZWNpZnlpbmcgd2hldGhlciBvciBub3QgdGhlIG1lcmdlIGJlaW5nIGRvbmUgd2FzIGEgc3F1YXNoIG1lcmdlLgotVGhpcyBob29rIGNhbm5vdCBhZmZlY3QgdGhlIG91dGNvbWUgb2YgYGdpdC1tZXJnZWAuCitUaGlzIGhvb2sgY2Fubm90IGFmZmVjdCB0aGUgb3V0Y29tZSBvZiBgZ2l0LW1lcmdlYCBhbmQgaXMgbm90IGV4ZWN1dGVkLAoraWYgdGhlIG1lcmdlIGZhaWxlZCBkdWUgdG8gY29uZmxpY3RzLgogCiBUaGlzIGhvb2sgY2FuIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhIGNvcnJlc3BvbmRpbmcgcHJlLWNvbW1pdCBob29rIHRvCiBzYXZlIGFuZCByZXN0b3JlIGFueSBmb3JtIG9mIG1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgd29ya2luZyB0cmVlCkBAIC0yNzYsMyArMjkwLDE0IEBACiBCb3RoIHN0YW5kYXJkIG91dHB1dCBhbmQgc3RhbmRhcmQgZXJyb3Igb3V0cHV0IGFyZSBmb3J3YXJkZWQgdG8KIGBnaXQtc2VuZC1wYWNrYCBvbiB0aGUgb3RoZXIgZW5kLCBzbyB5b3UgY2FuIHNpbXBseSBgZWNob2AgbWVzc2FnZXMKIGZvciB0aGUgdXNlci4KKworcHJlLWF1dG8tZ2MKKy0tLS0tLS0tLS0tCisKK1RoaXMgaG9vayBpcyBpbnZva2VkIGJ5IGBnaXQtZ2MgLS1hdXRvYC4gSXQgdGFrZXMgbm8gcGFyYW1ldGVyLCBhbmQKK2V4aXRpbmcgd2l0aCBub24temVybyBzdGF0dXMgZnJvbSB0aGlzIHNjcmlwdCBjYXVzZXMgdGhlIGBnaXQtZ2MgLS1hdXRvYAordG8gYWJvcnQuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRpZ25vcmUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRpZ25vcmUudHh0CmluZGV4IDYxM2RjYTAuLjI4ODFjOWMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0aWdub3JlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdGlnbm9yZS50eHQKQEAgLTEzOCw0ICsxMzgsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdGsudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRrLnR4dAppbmRleCBlZDNiYTgzLi5mODQzZjM5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdGsudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0ay50eHQKQEAgLTI1LDcgKzI1LDggQEAKIHRoZSBsaW5rZ2l0OmdpdC1yZXYtbGlzdFsxXSBjb21tYW5kLiBUaGlzIG1hbnVhbCBwYWdlIGRlc2NyaWJlcyBvbmx5IHRoZSBtb3N0CiBmcmVxdWVudGx5IHVzZWQgb3B0aW9ucy4KIAotLW4gPG51bWJlcj4sIC0tbWF4LWNvdW50PTxudW1iZXI+OjoKKy1uIDxudW1iZXI+OjoKKy0tbWF4LWNvdW50PTxudW1iZXI+OjoKIAogCUxpbWl0cyB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgdG8gc2hvdy4KIApAQCAtNDEsNiArNDIsMTIgQEAKIAogCVNob3cgYWxsIGJyYW5jaGVzLgogCistLW1lcmdlOjoKKworCUFmdGVyIGFuIGF0dGVtcHQgdG8gbWVyZ2Ugc3RvcHMgd2l0aCBjb25mbGljdHMsIHNob3cgdGhlIGNvbW1pdHMgb24KKwl0aGUgaGlzdG9yeSBiZXR3ZWVuIHR3byBicmFuY2hlcyAoaS5lLiB0aGUgSEVBRCBhbmQgdGhlIE1FUkdFX0hFQUQpCisJdGhhdCBtb2RpZnkgdGhlIGNvbmZsaWN0ZWQgZmlsZXMuCisKIDxyZXZzPjo6CiAKIAlMaW1pdCB0aGUgcmV2aXNpb25zIHRvIHNob3cuIFRoaXMgY2FuIGJlIGVpdGhlciBhIHNpbmdsZSByZXZpc2lvbgpAQCAtNzksNyArODYsNyBAQAogR2l0ayBjcmVhdGVzIHRoZSAuZ2l0ayBmaWxlIGluIHlvdXIgJEhPTUUgZGlyZWN0b3J5IHRvIHN0b3JlIHByZWZlcmVuY2VzCiBzdWNoIGFzIGRpc3BsYXkgb3B0aW9ucywgZm9udCwgYW5kIGNvbG9ycy4KIAotU2VlIEFsc28KK1NFRSBBTFNPCiAtLS0tLS0tLQogJ3FnaXQoMSknOjoKIAlBIHJlcG9zaXRvcnkgYnJvd3NlciB3cml0dGVuIGluIEMrKyB1c2luZyBRdC4KQEAgLTEwMyw0ICsxMTAsNCBAQAogCiBHSVQKIC0tLQotUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdG1vZHVsZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRtb2R1bGVzLnR4dAppbmRleCBjYzk1YjY5Li5mOGQxMjJhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdG1vZHVsZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0bW9kdWxlcy50eHQKQEAgLTU5LDQgKzU5LDQgQEAKIAogR0lUCiAtLS0KLVBhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9yZXBvc2l0b3J5LWxheW91dC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdHJlcG9zaXRvcnktbGF5b3V0LnR4dApzaW1pbGFyaXR5IGluZGV4IDg5JQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3JlcG9zaXRvcnktbGF5b3V0LnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9naXRyZXBvc2l0b3J5LWxheW91dC50eHQKaW5kZXggNjkzOTEzMC4uMDNjNTJmZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9yZXBvc2l0b3J5LWxheW91dC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRyZXBvc2l0b3J5LWxheW91dC50eHQKQEAgLTEsOSArMSwyMyBAQAotZ2l0IHJlcG9zaXRvcnkgbGF5b3V0Ci09PT09PT09PT09PT09PT09PT09PT0KK2dpdHJlcG9zaXRvcnktbGF5b3V0KDUpCis9PT09PT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXRyZXBvc2l0b3J5LWxheW91dCAtIEdpdCBSZXBvc2l0b3J5IExheW91dAorCitTWU5PUFNJUworLS0tLS0tLS0KKyRHSVRfRElSLyoKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCiAKIFlvdSBtYXkgZmluZCB0aGVzZSB0aGluZ3MgaW4geW91ciBnaXQgcmVwb3NpdG9yeSAoYC5naXRgCiBkaXJlY3RvcnkgZm9yIGEgcmVwb3NpdG9yeSBhc3NvY2lhdGVkIHdpdGggeW91ciB3b3JraW5nIHRyZWUsIG9yCi1gJ3Byb2plY3QnLmdpdGAgZGlyZWN0b3J5IGZvciBhIHB1YmxpYyAnYmFyZScgcmVwb3NpdG9yeSkuCitgPHByb2plY3Q+LmdpdGAgZGlyZWN0b3J5IGZvciBhIHB1YmxpYyAnYmFyZScgcmVwb3NpdG9yeS4gSXQgaXMKK2Fsc28gcG9zc2libGUgdG8gaGF2ZSBhIHdvcmtpbmcgdHJlZSB3aGVyZSBgLmdpdGAgaXMgYSBwbGFpbgorYXNjaWkgZmlsZSBjb250YWluaW5nIGBnaXRkaXI6IDxwYXRoPmAsIGkuZS4gdGhlIHBhdGggdG8gdGhlCityZWFsIGdpdCByZXBvc2l0b3J5KS4KIAogb2JqZWN0czo6CiAJT2JqZWN0IHN0b3JlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlcG9zaXRvcnkuICBVc3VhbGx5CkBAIC0xMTIsNyArMTI2LDcgQEAKIGJyYW5jaGVzOjoKIAlBIHNsaWdodGx5IGRlcHJlY2F0ZWQgd2F5IHRvIHN0b3JlIHNob3J0aGFuZHMgdG8gYmUgdXNlZAogCXRvIHNwZWNpZnkgVVJMIHRvIGBnaXQgZmV0Y2hgLCBgZ2l0IHB1bGxgIGFuZCBgZ2l0IHB1c2hgCi0JY29tbWFuZHMgaXMgdG8gc3RvcmUgYSBmaWxlIGluIGBicmFuY2hlcy8nbmFtZSdgIGFuZAorCWNvbW1hbmRzIGlzIHRvIHN0b3JlIGEgZmlsZSBpbiBgYnJhbmNoZXMvPG5hbWU+YCBhbmQKIAlnaXZlICduYW1lJyB0byB0aGVzZSBjb21tYW5kcyBpbiBwbGFjZSBvZiAncmVwb3NpdG9yeScKIAlhcmd1bWVudC4KIApAQCAtMTIxLDcgKzEzNSw3IEBACiAJY29tbWFuZHMuICBBIGhhbmRmdWwgb2Ygc2FtcGxlIGhvb2tzIGFyZSBpbnN0YWxsZWQgd2hlbgogCWBnaXQgaW5pdGAgaXMgcnVuLCBidXQgYWxsIG9mIHRoZW0gYXJlIGRpc2FibGVkIGJ5CiAJZGVmYXVsdC4gIFRvIGVuYWJsZSwgdGhleSBuZWVkIHRvIGJlIG1hZGUgZXhlY3V0YWJsZS4KLQlSZWFkIGxpbms6aG9va3MuaHRtbFtob29rc10gZm9yIG1vcmUgZGV0YWlscyBhYm91dAorCVJlYWQgbGlua2dpdDpnaXRob29rc1s1XVtob29rc10gZm9yIG1vcmUgZGV0YWlscyBhYm91dAogCWVhY2ggaG9vay4KIAogaW5kZXg6OgpAQCAtMTc3LDMgKzE5MSwxOCBAQAogCVRoaXMgaXMgc2ltaWxhciB0byBgaW5mby9ncmFmdHNgIGJ1dCBpcyBpbnRlcm5hbGx5IHVzZWQKIAlhbmQgbWFpbnRhaW5lZCBieSBzaGFsbG93IGNsb25lIG1lY2hhbmlzbS4gIFNlZSBgLS1kZXB0aGAKIAlvcHRpb24gdG8gbGlua2dpdDpnaXQtY2xvbmVbMV0gYW5kIGxpbmtnaXQ6Z2l0LWZldGNoWzFdLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWluaXRbMV0sCitsaW5rZ2l0OmdpdC1jbG9uZVsxXSwKK2xpbmtnaXQ6Z2l0LWZldGNoWzFdLAorbGlua2dpdDpnaXQtcGFjay1yZWZzWzFdLAorbGlua2dpdDpnaXQtZ2NbMV0sCitsaW5rZ2l0OmdpdC1jaGVja291dFsxXSwKK2xpbmtnaXQ6Z2l0Z2xvc3NhcnlbN10sCitsaW5rOnVzZXItbWFudWFsLmh0bWxbVGhlIEdpdCBVc2VyJ3MgTWFudWFsXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3R1dG9yaWFsLTIudHh0IGIvRG9jdW1lbnRhdGlvbi9naXR0dXRvcmlhbC0yLnR4dApzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3R1dG9yaWFsLTIudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2dpdHR1dG9yaWFsLTIudHh0CmluZGV4IDdmYWM0N2QuLmUzZDVjMWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdHV0b3JpYWwtMi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXR0dXRvcmlhbC0yLnR4dApAQCAtMSw3ICsxLDE4IEBACi1BIHR1dG9yaWFsIGludHJvZHVjdGlvbiB0byBnaXQ6IHBhcnQgdHdvCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitnaXR0dXRvcmlhbC0yKDcpCis9PT09PT09PT09PT09PT09CiAKLVlvdSBzaG91bGQgd29yayB0aHJvdWdoIGxpbms6dHV0b3JpYWwuaHRtbFtBIHR1dG9yaWFsIGludHJvZHVjdGlvbiB0bworTkFNRQorLS0tLQorZ2l0dHV0b3JpYWwtMiAtIEEgdHV0b3JpYWwgaW50cm9kdWN0aW9uIHRvIGdpdDogcGFydCB0d28KKworU1lOT1BTSVMKKy0tLS0tLS0tCitnaXQgKgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworWW91IHNob3VsZCB3b3JrIHRocm91Z2ggbGlua2dpdDpnaXR0dXRvcmlhbFs3XVtBIHR1dG9yaWFsIGludHJvZHVjdGlvbiB0bwogZ2l0XSBiZWZvcmUgcmVhZGluZyB0aGlzIHR1dG9yaWFsLgogCiBUaGUgZ29hbCBvZiB0aGlzIHR1dG9yaWFsIGlzIHRvIGludHJvZHVjZSB0d28gZnVuZGFtZW50YWwgcGllY2VzIG9mCkBAIC0zNzksNyArMzkwLDcgQEAKIEluIGFkZGl0aW9uIHRvIGJlaW5nIHRoZSBzdGFnaW5nIGFyZWEgZm9yIG5ldyBjb21taXRzLCB0aGUgaW5kZXggZmlsZQogaXMgYWxzbyBwb3B1bGF0ZWQgZnJvbSB0aGUgb2JqZWN0IGRhdGFiYXNlIHdoZW4gY2hlY2tpbmcgb3V0IGEKIGJyYW5jaCwgYW5kIGlzIHVzZWQgdG8gaG9sZCB0aGUgdHJlZXMgaW52b2x2ZWQgaW4gYSBtZXJnZSBvcGVyYXRpb24uCi1TZWUgdGhlIGxpbms6Y29yZS10dXRvcmlhbC5odG1sW2NvcmUgdHV0b3JpYWxdIGFuZCB0aGUgcmVsZXZhbnQgbWFuCitTZWUgdGhlIGxpbmtnaXQ6Z2l0Y29yZS10dXRvcmlhbFs3XVtjb3JlIHR1dG9yaWFsXSBhbmQgdGhlIHJlbGV2YW50IG1hbgogcGFnZXMgZm9yIGRldGFpbHMuCiAKIFdoYXQgbmV4dD8KQEAgLTM4OSwxOCArNDAwLDMxIEBACiBwYWdlcyBmb3IgYW55IG9mIHRoZSBnaXQgY29tbWFuZHM7IG9uZSBnb29kIHBsYWNlIHRvIHN0YXJ0IHdvdWxkIGJlCiB3aXRoIHRoZSBjb21tYW5kcyBtZW50aW9uZWQgaW4gbGluazpldmVyeWRheS5odG1sW0V2ZXJ5ZGF5IGdpdF0uICBZb3UKIHNob3VsZCBiZSBhYmxlIHRvIGZpbmQgYW55IHVua25vd24gamFyZ29uIGluIHRoZQotbGluazpnbG9zc2FyeS5odG1sW0dsb3NzYXJ5XS4KK2xpbmtnaXQ6Z2l0Z2xvc3NhcnlbN11bR2xvc3NhcnldLgogCiBUaGUgbGluazp1c2VyLW1hbnVhbC5odG1sW0dpdCBVc2VyJ3MgTWFudWFsXSBwcm92aWRlcyBhIG1vcmUKIGNvbXByZWhlbnNpdmUgaW50cm9kdWN0aW9uIHRvIGdpdC4KIAotVGhlIGxpbms6Y3ZzLW1pZ3JhdGlvbi5odG1sW0NWUyBtaWdyYXRpb25dIGRvY3VtZW50IGV4cGxhaW5zIGhvdyB0bworVGhlIGxpbmtnaXQ6Z2l0Y3ZzLW1pZ3JhdGlvbls3XVtDVlMgbWlncmF0aW9uXSBkb2N1bWVudCBleHBsYWlucyBob3cgdG8KIGltcG9ydCBhIENWUyByZXBvc2l0b3J5IGludG8gZ2l0LCBhbmQgc2hvd3MgaG93IHRvIHVzZSBnaXQgaW4gYQogQ1ZTLWxpa2Ugd2F5LgogCiBGb3Igc29tZSBpbnRlcmVzdGluZyBleGFtcGxlcyBvZiBnaXQgdXNlLCBzZWUgdGhlCiBsaW5rOmhvd3RvLWluZGV4Lmh0bWxbaG93dG9zXS4KIAotRm9yIGdpdCBkZXZlbG9wZXJzLCB0aGUgbGluazpjb3JlLXR1dG9yaWFsLmh0bWxbQ29yZSB0dXRvcmlhbF0gZ29lcworRm9yIGdpdCBkZXZlbG9wZXJzLCB0aGUgbGlua2dpdDpnaXRjb3JlLXR1dG9yaWFsWzddW0NvcmUgdHV0b3JpYWxdIGdvZXMKIGludG8gZGV0YWlsIG9uIHRoZSBsb3dlci1sZXZlbCBnaXQgbWVjaGFuaXNtcyBpbnZvbHZlZCBpbiwgZm9yCiBleGFtcGxlLCBjcmVhdGluZyBhIG5ldyBjb21taXQuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXR0dXRvcmlhbFs3XSwKK2xpbmtnaXQ6Z2l0Y3ZzLW1pZ3JhdGlvbls3XSwKK2xpbmtnaXQ6Z2l0Y29yZS10dXRvcmlhbFs3XSwKK2xpbmtnaXQ6Z2l0Z2xvc3NhcnlbN10sCitsaW5rOmV2ZXJ5ZGF5Lmh0bWxbRXZlcnlkYXkgZ2l0XSwKK2xpbms6dXNlci1tYW51YWwuaHRtbFtUaGUgR2l0IFVzZXIncyBNYW51YWxdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdHV0b3JpYWwudHh0IGIvRG9jdW1lbnRhdGlvbi9naXR0dXRvcmlhbC50eHQKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi90dXRvcmlhbC50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZ2l0dHV0b3JpYWwudHh0CmluZGV4IGE4YzVlZmIuLmQ0NjVhYWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdHV0b3JpYWwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0dHV0b3JpYWwudHh0CkBAIC0xLDUgKzEsMTYgQEAKLUEgdHV0b3JpYWwgaW50cm9kdWN0aW9uIHRvIGdpdCAoZm9yIHZlcnNpb24gMS41LjEgb3IgbmV3ZXIpCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorZ2l0dHV0b3JpYWwoNykKKz09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdHR1dG9yaWFsIC0gQSB0dXRvcmlhbCBpbnRyb2R1Y3Rpb24gdG8gZ2l0IChmb3IgdmVyc2lvbiAxLjUuMSBvciBuZXdlcikKKworU1lOT1BTSVMKKy0tLS0tLS0tCitnaXQgKgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KIAogVGhpcyB0dXRvcmlhbCBleHBsYWlucyBob3cgdG8gaW1wb3J0IGEgbmV3IHByb2plY3QgaW50byBnaXQsIG1ha2UKIGNoYW5nZXMgdG8gaXQsIGFuZCBzaGFyZSBjaGFuZ2VzIHdpdGggb3RoZXIgZGV2ZWxvcGVycy4KQEAgLTM4MSw3ICszOTIsNyBAQAogCiBHaXQgY2FuIGFsc28gYmUgdXNlZCBpbiBhIENWUy1saWtlIG1vZGUsIHdpdGggYSBjZW50cmFsIHJlcG9zaXRvcnkKIHRoYXQgdmFyaW91cyB1c2VycyBwdXNoIGNoYW5nZXMgdG87IHNlZSBsaW5rZ2l0OmdpdC1wdXNoWzFdIGFuZAotbGluazpjdnMtbWlncmF0aW9uLmh0bWxbZ2l0IGZvciBDVlMgdXNlcnNdLgorbGlua2dpdDpnaXRjdnMtbWlncmF0aW9uWzddW2dpdCBmb3IgQ1ZTIHVzZXJzXS4KIAogRXhwbG9yaW5nIGhpc3RvcnkKIC0tLS0tLS0tLS0tLS0tLS0tCkBAIC01NjAsNyArNTcxLDcgQEAKICAgICB1c2VkIHRvIGNyZWF0ZSBjb21taXRzLCBjaGVjayBvdXQgd29ya2luZyBkaXJlY3RvcmllcywgYW5kCiAgICAgaG9sZCB0aGUgdmFyaW91cyB0cmVlcyBpbnZvbHZlZCBpbiBhIG1lcmdlLgogCi1saW5rOnR1dG9yaWFsLTIuaHRtbFtQYXJ0IHR3byBvZiB0aGlzIHR1dG9yaWFsXSBleHBsYWlucyB0aGUgb2JqZWN0CitsaW5rZ2l0OmdpdHR1dG9yaWFsLTJbN11bUGFydCB0d28gb2YgdGhpcyB0dXRvcmlhbF0gZXhwbGFpbnMgdGhlIG9iamVjdAogZGF0YWJhc2UsIHRoZSBpbmRleCBmaWxlLCBhbmQgYSBmZXcgb3RoZXIgb2RkcyBhbmQgZW5kcyB0aGF0IHlvdSdsbAogbmVlZCB0byBtYWtlIHRoZSBtb3N0IG9mIGdpdC4KIApAQCAtNTgxLDQgKzU5MiwxNyBAQAogCiAgICogbGluazpldmVyeWRheS5odG1sW0V2ZXJ5ZGF5IEdJVCB3aXRoIDIwIENvbW1hbmRzIE9yIFNvXQogCi0gICogbGluazpjdnMtbWlncmF0aW9uLmh0bWxbZ2l0IGZvciBDVlMgdXNlcnNdLgorICAqIGxpbmtnaXQ6Z2l0Y3ZzLW1pZ3JhdGlvbls3XVtnaXQgZm9yIENWUyB1c2Vyc10uCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXR0dXRvcmlhbC0yWzddLAorbGlua2dpdDpnaXRjdnMtbWlncmF0aW9uWzddLAorbGlua2dpdDpnaXRjb3JlLXR1dG9yaWFsWzddLAorbGlua2dpdDpnaXRnbG9zc2FyeVs3XSwKK2xpbms6ZXZlcnlkYXkuaHRtbFtFdmVyeWRheSBnaXRdLAorbGluazp1c2VyLW1hbnVhbC5odG1sW1RoZSBHaXQgVXNlcidzIE1hbnVhbF0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9nbG9zc2FyeS50eHQgYi9Eb2N1bWVudGF0aW9uL2dsb3NzYXJ5LWNvbnRlbnQudHh0CnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vZ2xvc3NhcnkudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2dsb3NzYXJ5LWNvbnRlbnQudHh0CmluZGV4IDUxYjYzNTMuLjliNGE0ZjQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2xvc3NhcnkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2xvc3NhcnktY29udGVudC50eHQKQEAgLTEsNiArMSwzIEBACi1HSVQgR2xvc3NhcnkKLT09PT09PT09PT09PQotCiBbW2RlZl9hbHRlcm5hdGVfb2JqZWN0X2RhdGFiYXNlXV1hbHRlcm5hdGUgb2JqZWN0IGRhdGFiYXNlOjoKIAlWaWEgdGhlIGFsdGVybmF0ZXMgbWVjaGFuaXNtLCBhIDw8ZGVmX3JlcG9zaXRvcnkscmVwb3NpdG9yeT4+CiAJY2FuIGluaGVyaXQgcGFydCBvZiBpdHMgPDxkZWZfb2JqZWN0X2RhdGFiYXNlLG9iamVjdCBkYXRhYmFzZT4+CkBAIC05MCwxMSArODcsMTAgQEAKIAlzb3VyY2UgY29kZSBtYW5hZ2VtZW50IHRvb2xzLgogCiBbW2RlZl9EQUddXURBRzo6Ci0JRGlyZWN0ZWQgYWN5Y2xpYyBncmFwaC4gVGhlIDw8ZGVmX2NvbW1pdCxjb21taXQ+PiBvYmplY3RzIGZvcm0gYQorCURpcmVjdGVkIGFjeWNsaWMgZ3JhcGguIFRoZSA8PGRlZl9jb21taXRfb2JqZWN0LGNvbW1pdCBvYmplY3RzPj4gZm9ybSBhCiAJZGlyZWN0ZWQgYWN5Y2xpYyBncmFwaCwgYmVjYXVzZSB0aGV5IGhhdmUgcGFyZW50cyAoZGlyZWN0ZWQpLCBhbmQgdGhlCi0JZ3JhcGggb2YgY29tbWl0IG9iamVjdHMgaXMgYWN5Y2xpYyAodGhlcmUgaXMgbm8KLQk8PGRlZl9jaGFpbixjaGFpbj4+IHdoaWNoIGJlZ2lucyBhbmQgZW5kcyB3aXRoIHRoZSBzYW1lCi0JPDxkZWZfb2JqZWN0LG9iamVjdD4+KS4KKwlncmFwaCBvZiBjb21taXQgb2JqZWN0cyBpcyBhY3ljbGljICh0aGVyZSBpcyBubyA8PGRlZl9jaGFpbixjaGFpbj4+CisJd2hpY2ggYmVnaW5zIGFuZCBlbmRzIHdpdGggdGhlIHNhbWUgPDxkZWZfb2JqZWN0LG9iamVjdD4+KS4KIAogW1tkZWZfZGFuZ2xpbmdfb2JqZWN0XV1kYW5nbGluZyBvYmplY3Q6OgogCUFuIDw8ZGVmX3VucmVhY2hhYmxlX29iamVjdCx1bnJlYWNoYWJsZSBvYmplY3Q+PiB3aGljaCBpcyBub3QKQEAgLTI1MCw5ICsyNDYsMTAgQEAKIAl0aGUgPDxkZWZfaGFzaCxoYXNoPj4gb2YgdGhlIG9iamVjdC4KIAogW1tkZWZfb2JqZWN0X3R5cGVdXW9iamVjdCB0eXBlOjoKLQlPbmUgb2YgdGhlIGlkZW50aWZpZXJzCi0JIjw8ZGVmX2NvbW1pdCxjb21taXQ+PiIsIjw8ZGVmX3RyZWUsdHJlZT4+IiwiPDxkZWZfdGFnLHRhZz4+IiBvciAiPDxkZWZfYmxvYl9vYmplY3QsYmxvYj4+IgotCWRlc2NyaWJpbmcgdGhlIHR5cGUgb2YgYW4gPDxkZWZfb2JqZWN0LG9iamVjdD4+LgorCU9uZSBvZiB0aGUgaWRlbnRpZmllcnMgIjw8ZGVmX2NvbW1pdF9vYmplY3QsY29tbWl0Pj4iLAorCSI8PGRlZl90cmVlX29iamVjdCx0cmVlPj4iLCAiPDxkZWZfdGFnX29iamVjdCx0YWc+PiIgb3IKKwkiPDxkZWZfYmxvYl9vYmplY3QsYmxvYj4+IiBkZXNjcmliaW5nIHRoZSB0eXBlIG9mIGFuCisJPDxkZWZfb2JqZWN0LG9iamVjdD4+LgogCiBbW2RlZl9vY3RvcHVzXV1vY3RvcHVzOjoKIAlUbyA8PGRlZl9tZXJnZSxtZXJnZT4+IG1vcmUgdGhhbiB0d28gPDxkZWZfYnJhbmNoLGJyYW5jaGVzPj4uIEFsc28gZGVub3RlcyBhbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ob3d0by9yZWJhc2UtZnJvbS1pbnRlcm5hbC1icmFuY2gudHh0IGIvRG9jdW1lbnRhdGlvbi9ob3d0by9yZWJhc2UtZnJvbS1pbnRlcm5hbC1icmFuY2gudHh0CmluZGV4IDdhNzYwNDUuLmQyMTRkNGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaG93dG8vcmViYXNlLWZyb20taW50ZXJuYWwtYnJhbmNoLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL3JlYmFzZS1mcm9tLWludGVybmFsLWJyYW5jaC50eHQKQEAgLTEsNCArMSw0IEBACi1Gcm9tOglKdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+CitGcm9tOglKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CiBUbzoJZ2l0QHZnZXIua2VybmVsLm9yZwogQ2M6CVBldHIgQmF1ZGlzIDxwYXNreUBzdXNlLmN6PiwgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPgogU3ViamVjdDogUmU6IHNlbmRpbmcgY2hhbmdlc2V0cyBmcm9tIHRoZSBtaWRkbGUgb2YgYSBnaXQgdHJlZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ob3d0by9yZWJ1aWxkLWZyb20tdXBkYXRlLWhvb2sudHh0IGIvRG9jdW1lbnRhdGlvbi9ob3d0by9yZWJ1aWxkLWZyb20tdXBkYXRlLWhvb2sudHh0CmluZGV4IDhkNTVkZmIuLjQ4YzY3NTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaG93dG8vcmVidWlsZC1mcm9tLXVwZGF0ZS1ob29rLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL3JlYnVpbGQtZnJvbS11cGRhdGUtaG9vay50eHQKQEAgLTEsNiArMSw2IEBACiBTdWJqZWN0OiBbSE9XVE9dIFVzaW5nIHBvc3QtdXBkYXRlIGhvb2sKIE1lc3NhZ2UtSUQ6IDw3dnk4Nm82dXN4LmZzZkBhc3NpZ25lZC1ieS1kaGNwLmNveC5uZXQ+Ci1Gcm9tOiBKdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+CitGcm9tOiBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CiBEYXRlOiBGcmksIDI2IEF1ZyAyMDA1IDE4OjE5OjEwIC0wNzAwCiBBYnN0cmFjdDogSW4gdGhpcyBob3ctdG8gYXJ0aWNsZSwgSkMgdGFsa3MgYWJvdXQgaG93IGhlCiAgdXNlcyB0aGUgcG9zdC11cGRhdGUgaG9vayB0byBhdXRvbWF0ZSBnaXQgZG9jdW1lbnRhdGlvbiBwYWdlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hvd3RvL3JldmVydC1icmFuY2gtcmViYXNlLnR4dCBiL0RvY3VtZW50YXRpb24vaG93dG8vcmV2ZXJ0LWJyYW5jaC1yZWJhc2UudHh0CmluZGV4IDg2NWE2NjYuLmU3MGQ4YTMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaG93dG8vcmV2ZXJ0LWJyYW5jaC1yZWJhc2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaG93dG8vcmV2ZXJ0LWJyYW5jaC1yZWJhc2UudHh0CkBAIC0xLDQgKzEsNCBAQAotRnJvbTogSnVuaW8gQyBIYW1hbm8gPGp1bmtpb0Bjb3gubmV0PgorRnJvbTogSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgogVG86IGdpdEB2Z2VyLmtlcm5lbC5vcmcKIFN1YmplY3Q6IFtIT1dUT10gUmV2ZXJ0aW5nIGFuIGV4aXN0aW5nIGNvbW1pdAogQWJzdHJhY3Q6IEluIHRoaXMgYXJ0aWNsZSwgSkMgZ2l2ZXMgYSBzbWFsbCByZWFsLWxpZmUgZXhhbXBsZSBvZiB1c2luZwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ob3d0by9zZXBhcmF0aW5nLXRvcGljLWJyYW5jaGVzLnR4dCBiL0RvY3VtZW50YXRpb24vaG93dG8vc2VwYXJhdGluZy10b3BpYy1icmFuY2hlcy50eHQKaW5kZXggMGQ3M2IzMS4uNmQzZWI4ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ob3d0by9zZXBhcmF0aW5nLXRvcGljLWJyYW5jaGVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL3NlcGFyYXRpbmctdG9waWMtYnJhbmNoZXMudHh0CkBAIC0xLDQgKzEsNCBAQAotRnJvbTogSnVuaW8gQyBIYW1hbm8gPGp1bmtpb0Bjb3gubmV0PgorRnJvbTogSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgogU3ViamVjdDogU2VwYXJhdGluZyB0b3BpYyBicmFuY2hlcwogQWJzdHJhY3Q6IEluIHRoaXMgYXJ0aWNsZSwgSkMgZGVzY3JpYmVzIGhvdyB0byBzZXBhcmF0ZSB0b3BpYyBicmFuY2hlcy4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ob3d0by9zZXR1cC1naXQtc2VydmVyLW92ZXItaHR0cC50eHQgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL3NldHVwLWdpdC1zZXJ2ZXItb3Zlci1odHRwLnR4dAppbmRleCBiN2QwOWMxLi40MDMyNzQ4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2hvd3RvL3NldHVwLWdpdC1zZXJ2ZXItb3Zlci1odHRwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL3NldHVwLWdpdC1zZXJ2ZXItb3Zlci1odHRwLnR4dApAQCAtMTg2LDcgKzE4Niw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogTWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgSFRUUCBzdXBwb3J0LCBpLmUuIHlvdXIgZ2l0IHdhcyBidWlsdCB3aXRoCi1jdXJsICh2ZXJzaW9uIG1vcmUgcmVjZW50IHRoYW4gNy4xMCkuIFRoZSBjb21tYW5kICdnaXQgaHR0cC1wdXNoJyB3aXRoCitsaWJjdXJsICh2ZXJzaW9uIG1vcmUgcmVjZW50IHRoYW4gNy4xMCkuIFRoZSBjb21tYW5kICdnaXQgaHR0cC1wdXNoJyB3aXRoCiBubyBhcmd1bWVudCBzaG91bGQgZGlzcGxheSBhIHVzYWdlIG1lc3NhZ2UuCiAKIFRoZW4sIGFkZCB0aGUgZm9sbG93aW5nIHRvIHlvdXIgJEhPTUUvLm5ldHJjICh5b3UgY2FuIGRvIHdpdGhvdXQsIGJ1dCB3aWxsIGJlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hvd3RvL3VwZGF0ZS1ob29rLWV4YW1wbGUudHh0IGIvRG9jdW1lbnRhdGlvbi9ob3d0by91cGRhdGUtaG9vay1leGFtcGxlLnR4dAppbmRleCA4ODc2NWI1Li4zZWY3YzBkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2hvd3RvL3VwZGF0ZS1ob29rLWV4YW1wbGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaG93dG8vdXBkYXRlLWhvb2stZXhhbXBsZS50eHQKQEAgLTEsNCArMSw0IEBACi1Gcm9tOiBKdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+IGFuZCBDYXJsIEJhbGR3aW4gPGNuYkBmYy5ocC5jb20+CitGcm9tOiBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+IGFuZCBDYXJsIEJhbGR3aW4gPGNuYkBmYy5ocC5jb20+CiBTdWJqZWN0OiBjb250cm9sIGFjY2VzcyB0byBicmFuY2hlcy4KIERhdGU6IFRodSwgMTcgTm92IDIwMDUgMjM6NTU6MzIgLTA4MDAKIE1lc3NhZ2UtSUQ6IDw3dmZ5cHVtbHUzLmZzZkBhc3NpZ25lZC1ieS1kaGNwLmNveC5uZXQ+CkBAIC02OCw3ICs2OCw3IEBACiAjIC0gQnJhbmNoZXMgc2hvdWxkIG9ubHkgYmUgZmFzdC1mb3J3YXJkZWQuCiBjYXNlICIkMSIgaW4KICAgcmVmcy90YWdzLyopCi0gICAgWyAtZiAiJEdJVF9ESVIvJDEiIF0gJiYKKyAgICBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xICIkMSIgJiYKICAgICBkZW55ID4vZGV2L251bGwgIllvdSBjYW4ndCBvdmVyd3JpdGUgYW4gZXhpc3RpbmcgdGFnIgogICAgIDs7CiAgIHJlZnMvaGVhZHMvKikKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWVyZ2UtY29uZmlnLnR4dCBiL0RvY3VtZW50YXRpb24vbWVyZ2UtY29uZmlnLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGNlNzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9tZXJnZS1jb25maWcudHh0CkBAIC0wLDAgKzEsNDAgQEAKK21lcmdlLnN0YXQ6OgorCVdoZXRoZXIgdG8gcHJpbnQgdGhlIGRpZmZzdGF0IGJlcndlZW4gT1JJR19IRUFEIGFuZCBtZXJnZSByZXN1bHQKKwlhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZS4gIFRydWUgYnkgZGVmYXVsdC4KKworbWVyZ2UubG9nOjoKKwlXaGV0aGVyIHRvIGluY2x1ZGUgc3VtbWFyaWVzIG9mIG1lcmdlZCBjb21taXRzIGluIG5ld2x5IGNyZWF0ZWQKKwltZXJnZSBjb21taXQgbWVzc2FnZXMuIEZhbHNlIGJ5IGRlZmF1bHQuCisKK21lcmdlLnJlbmFtZUxpbWl0OjoKKwlUaGUgbnVtYmVyIG9mIGZpbGVzIHRvIGNvbnNpZGVyIHdoZW4gcGVyZm9ybWluZyByZW5hbWUgZGV0ZWN0aW9uCisJZHVyaW5nIGEgbWVyZ2U7IGlmIG5vdCBzcGVjaWZpZWQsIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZgorCWRpZmYucmVuYW1lTGltaXQuCisKK21lcmdlLnRvb2w6OgorCUNvbnRyb2xzIHdoaWNoIG1lcmdlIHJlc29sdXRpb24gcHJvZ3JhbSBpcyB1c2VkIGJ5CisJbGlua2dpdDpnaXQtbWVyZ2V0b29sWzFdLiAgVmFsaWQgYnVpbHQtaW4gdmFsdWVzIGFyZTogImtkaWZmMyIsCisJInRrZGlmZiIsICJtZWxkIiwgInh4ZGlmZiIsICJlbWVyZ2UiLCAidmltZGlmZiIsICJndmltZGlmZiIsIGFuZAorCSJvcGVuZGlmZiIuICBBbnkgb3RoZXIgdmFsdWUgaXMgdHJlYXRlZCBpcyBjdXN0b20gbWVyZ2UgdG9vbAorCWFuZCB0aGVyZSBtdXN0IGJlIGEgY29ycmVzcG9uaW5nIG1lcmdldG9vbC48dG9vbD4uY21kIG9wdGlvbi4KKworbWVyZ2UudmVyYm9zaXR5OjoKKwlDb250cm9scyB0aGUgYW1vdW50IG9mIG91dHB1dCBzaG93biBieSB0aGUgcmVjdXJzaXZlIG1lcmdlCisJc3RyYXRlZ3kuICBMZXZlbCAwIG91dHB1dHMgbm90aGluZyBleGNlcHQgYSBmaW5hbCBlcnJvcgorCW1lc3NhZ2UgaWYgY29uZmxpY3RzIHdlcmUgZGV0ZWN0ZWQuIExldmVsIDEgb3V0cHV0cyBvbmx5CisJY29uZmxpY3RzLCAyIG91dHB1dHMgY29uZmxpY3RzIGFuZCBmaWxlIGNoYW5nZXMuICBMZXZlbCA1IGFuZAorCWFib3ZlIG91dHB1dHMgZGVidWdnaW5nIGluZm9ybWF0aW9uLiAgVGhlIGRlZmF1bHQgaXMgbGV2ZWwgMi4KKwlDYW4gYmUgb3ZlcnJpZGRlbiBieSAnR0lUX01FUkdFX1ZFUkJPU0lUWScgZW52aXJvbm1lbnQgdmFyaWFibGUuCisKK21lcmdlLjxkcml2ZXI+Lm5hbWU6OgorCURlZmluZXMgYSBodW1hbiByZWFkYWJsZSBuYW1lIGZvciBhIGN1c3RvbSBsb3ctbGV2ZWwKKwltZXJnZSBkcml2ZXIuICBTZWUgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdIGZvciBkZXRhaWxzLgorCittZXJnZS48ZHJpdmVyPi5kcml2ZXI6OgorCURlZmluZXMgdGhlIGNvbW1hbmQgdGhhdCBpbXBsZW1lbnRzIGEgY3VzdG9tIGxvdy1sZXZlbAorCW1lcmdlIGRyaXZlci4gIFNlZSBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0gZm9yIGRldGFpbHMuCisKK21lcmdlLjxkcml2ZXI+LnJlY3Vyc2l2ZTo6CisJTmFtZXMgYSBsb3ctbGV2ZWwgbWVyZ2UgZHJpdmVyIHRvIGJlIHVzZWQgd2hlbgorCXBlcmZvcm1pbmcgYW4gaW50ZXJuYWwgbWVyZ2UgYmV0d2VlbiBjb21tb24gYW5jZXN0b3JzLgorCVNlZSBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0gZm9yIGRldGFpbHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21lcmdlLW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi9tZXJnZS1vcHRpb25zLnR4dAppbmRleCA5ZjFmYzgyLi5mZmJjNmU5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21lcmdlLW9wdGlvbnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbWVyZ2Utb3B0aW9ucy50eHQKQEAgLTEsMTAgKzEsMjUgQEAKLS0tc3VtbWFyeTo6CistLXN0YXQ6OgogCVNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZS4gVGhlIGRpZmZzdGF0IGlzIGFsc28KLQljb250cm9sbGVkIGJ5IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBtZXJnZS5kaWZmc3RhdC4KKwljb250cm9sbGVkIGJ5IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBtZXJnZS5zdGF0LgogCi0tbiwgXC0tbm8tc3VtbWFyeTo6Cistbjo6CistLW5vLXN0YXQ6OgogCURvIG5vdCBzaG93IGRpZmZzdGF0IGF0IHRoZSBlbmQgb2YgdGhlIG1lcmdlLgogCistLXN1bW1hcnk6OgorLS1uby1zdW1tYXJ5OjoKKwlTeW5vbnltcyB0byAtLXN0YXQgYW5kIC0tbm8tc3RhdDsgdGhlc2UgYXJlIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUKKwlyZW1vdmVkIGluIHRoZSBmdXR1cmUuCisKKy0tbG9nOjoKKwlJbiBhZGRpdGlvbiB0byBicmFuY2ggbmFtZXMsIHBvcHVsYXRlIHRoZSBsb2cgbWVzc2FnZSB3aXRoCisJb25lLWxpbmUgZGVzY3JpcHRpb25zIGZyb20gdGhlIGFjdHVhbCBjb21taXRzIHRoYXQgYXJlIGJlaW5nCisJbWVyZ2VkLgorCistLW5vLWxvZzo6CisJRG8gbm90IGxpc3Qgb25lLWxpbmUgZGVzY3JpcHRpb25zIGZyb20gdGhlIGFjdHVhbCBjb21taXRzIGJlaW5nCisJbWVyZ2VkLgorCiAtLW5vLWNvbW1pdDo6CiAJUGVyZm9ybSB0aGUgbWVyZ2UgYnV0IHByZXRlbmQgdGhlIG1lcmdlIGZhaWxlZCBhbmQgZG8KIAlub3QgYXV0b2NvbW1pdCwgdG8gZ2l2ZSB0aGUgdXNlciBhIGNoYW5jZSB0byBpbnNwZWN0IGFuZApAQCAtMzYsNyArNTEsOCBAQAogCWEgZmFzdC1mb3J3YXJkLCBvbmx5IHVwZGF0ZSB0aGUgYnJhbmNoIHBvaW50ZXIuIFRoaXMgaXMKIAl0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBnaXQtbWVyZ2UuCiAKLS1zIDxzdHJhdGVneT4sIFwtLXN0cmF0ZWd5PTxzdHJhdGVneT46OgorLXMgPHN0cmF0ZWd5Pjo6CistLXN0cmF0ZWd5PTxzdHJhdGVneT46OgogCVVzZSB0aGUgZ2l2ZW4gbWVyZ2Ugc3RyYXRlZ3k7IGNhbiBiZSBzdXBwbGllZCBtb3JlIHRoYW4KIAlvbmNlIHRvIHNwZWNpZnkgdGhlbSBpbiB0aGUgb3JkZXIgdGhleSBzaG91bGQgYmUgdHJpZWQuCiAJSWYgdGhlcmUgaXMgbm8gYC1zYCBvcHRpb24sIGEgYnVpbHQtaW4gbGlzdCBvZiBzdHJhdGVnaWVzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ByZXR0eS1mb3JtYXRzLnR4dCBiL0RvY3VtZW50YXRpb24vcHJldHR5LWZvcm1hdHMudHh0CmluZGV4IDAxOTNjM2MuLmMxMWQ0OTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcHJldHR5LWZvcm1hdHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcHJldHR5LWZvcm1hdHMudHh0CkBAIC0zMCw3ICszMCw3IEBACiAKIAkgIGNvbW1pdCA8c2hhMT4KIAkgIEF1dGhvcjogPGF1dGhvcj4KLQkgIERhdGU6IDxkYXRlPgorCSAgRGF0ZTogPGF1dGhvciBkYXRlPgogCiAJICAgICAgPHRpdGxlIGxpbmU+CiAKQEAgLTUwLDkgKzUwLDkgQEAKIAogCSAgY29tbWl0IDxzaGExPgogCSAgQXV0aG9yOiA8YXV0aG9yPgotCSAgQXV0aG9yRGF0ZTogPGRhdGUgJiB0aW1lPgorCSAgQXV0aG9yRGF0ZTogPGF1dGhvciBkYXRlPgogCSAgQ29tbWl0OiA8Y29tbWl0dGVyPgotCSAgQ29tbWl0RGF0ZTogPGRhdGUgJiB0aW1lPgorCSAgQ29tbWl0RGF0ZTogPGNvbW1pdHRlciBkYXRlPgogCiAJICAgICAgIDx0aXRsZSBsaW5lPgogCkBAIC02Miw3ICs2Miw3IEBACiAKIAkgIEZyb20gPHNoYTE+IDxkYXRlPgogCSAgRnJvbTogPGF1dGhvcj4KLQkgIERhdGU6IDxkYXRlICYgdGltZT4KKwkgIERhdGU6IDxhdXRob3IgZGF0ZT4KIAkgIFN1YmplY3Q6IFtQQVRDSF0gPHRpdGxlIGxpbmU+CiAKIAkgIDxmdWxsIGNvbW1pdCBtZXNzYWdlPgpAQCAtMTAxLDYgKzEwMSw3IEBACiAtICclUCc6IHBhcmVudCBoYXNoZXMKIC0gJyVwJzogYWJicmV2aWF0ZWQgcGFyZW50IGhhc2hlcwogLSAnJWFuJzogYXV0aG9yIG5hbWUKKy0gJyVhTic6IGF1dGhvciBuYW1lIChyZXNwZWN0aW5nIC5tYWlsbWFwKQogLSAnJWFlJzogYXV0aG9yIGVtYWlsCiAtICclYWQnOiBhdXRob3IgZGF0ZQogLSAnJWFEJzogYXV0aG9yIGRhdGUsIFJGQzI4MjIgc3R5bGUKQEAgLTEwOCw2ICsxMDksNyBAQAogLSAnJWF0JzogYXV0aG9yIGRhdGUsIFVOSVggdGltZXN0YW1wCiAtICclYWknOiBhdXRob3IgZGF0ZSwgSVNPIDg2MDEgZm9ybWF0CiAtICclY24nOiBjb21taXR0ZXIgbmFtZQorLSAnJWNOJzogY29tbWl0dGVyIG5hbWUgKHJlc3BlY3RpbmcgLm1haWxtYXApCiAtICclY2UnOiBjb21taXR0ZXIgZW1haWwKIC0gJyVjZCc6IGNvbW1pdHRlciBkYXRlCiAtICclY0QnOiBjb21taXR0ZXIgZGF0ZSwgUkZDMjgyMiBzdHlsZQpAQCAtMTIzLDMgKzEyNSwyNiBAQAogLSAnJUNyZXNldCc6IHJlc2V0IGNvbG9yCiAtICclbSc6IGxlZnQsIHJpZ2h0IG9yIGJvdW5kYXJ5IG1hcmsKIC0gJyVuJzogbmV3bGluZQorLSAnJXgwMCc6IHByaW50IGEgYnl0ZSBmcm9tIGEgaGV4IGNvZGUKKworKiAndGZvcm1hdDonCisrCitUaGUgJ3Rmb3JtYXQ6JyBmb3JtYXQgd29ya3MgZXhhY3RseSBsaWtlICdmb3JtYXQ6JywgZXhjZXB0IHRoYXQgaXQKK3Byb3ZpZGVzICJ0ZXJtaW5hdG9yIiBzZW1hbnRpY3MgaW5zdGVhZCBvZiAic2VwYXJhdG9yIiBzZW1hbnRpY3MuIEluCitvdGhlciB3b3JkcywgZWFjaCBjb21taXQgaGFzIHRoZSBtZXNzYWdlIHRlcm1pbmF0b3IgY2hhcmFjdGVyICh1c3VhbGx5IGEKK25ld2xpbmUpIGFwcGVuZGVkLCByYXRoZXIgdGhhbiBhIHNlcGFyYXRvciBwbGFjZWQgYmV0d2VlbiBlbnRyaWVzLgorVGhpcyBtZWFucyB0aGF0IHRoZSBmaW5hbCBlbnRyeSBvZiBhIHNpbmdsZS1saW5lIGZvcm1hdCB3aWxsIGJlIHByb3Blcmx5Cit0ZXJtaW5hdGVkIHdpdGggYSBuZXcgbGluZSwganVzdCBhcyB0aGUgIm9uZWxpbmUiIGZvcm1hdCBkb2VzLgorRm9yIGV4YW1wbGU6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxvZyAtMiAtLXByZXR0eT1mb3JtYXQ6JWggNGRhNDViZWYgXAorICB8IHBlcmwgLXBlICckXyAuPSAiIC0tIE5PIE5FV0xJTkVcbiIgdW5sZXNzIC9cbi8nCis0ZGE0NWJlCis3MTM0OTczIC0tIE5PIE5FV0xJTkUKKworJCBnaXQgbG9nIC0yIC0tcHJldHR5PXRmb3JtYXQ6JWggNGRhNDViZWYgXAorICB8IHBlcmwgLXBlICckXyAuPSAiIC0tIE5PIE5FV0xJTkVcbiIgdW5sZXNzIC9cbi8nCis0ZGE0NWJlCis3MTM0OTczCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcHVsbC1mZXRjaC1wYXJhbS50eHQgYi9Eb2N1bWVudGF0aW9uL3B1bGwtZmV0Y2gtcGFyYW0udHh0CmluZGV4IGI2ZWI3ZmMuLmYxNTc3MzggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcHVsbC1mZXRjaC1wYXJhbS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wdWxsLWZldGNoLXBhcmFtLnR4dApAQCAtMSwxMCArMSwxMiBAQAogPHJlcG9zaXRvcnk+OjoKIAlUaGUgInJlbW90ZSIgcmVwb3NpdG9yeSB0aGF0IGlzIHRoZSBzb3VyY2Ugb2YgYSBmZXRjaAotCW9yIHB1bGwgb3BlcmF0aW9uLiAgU2VlIHRoZSBzZWN0aW9uIDw8VVJMUyxHSVQgVVJMUz4+IGJlbG93LgorCW9yIHB1bGwgb3BlcmF0aW9uLiAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGVpdGhlciBhIFVSTAorCShzZWUgdGhlIHNlY3Rpb24gPDxVUkxTLEdJVCBVUkxTPj4gYmVsb3cpIG9yIHRoZSBuYW1lCisJb2YgYSByZW1vdGUgKHNlZSB0aGUgc2VjdGlvbiA8PFJFTU9URVMsUkVNT1RFUz4+IGJlbG93KS4KIAogPHJlZnNwZWM+OjoKIAlUaGUgY2Fub25pY2FsIGZvcm1hdCBvZiBhIDxyZWZzcGVjPiBwYXJhbWV0ZXIgaXMKLQlgKz88c3JjPjo8ZHN0PmA7IHRoYXQgaXMsIGFuIG9wdGlvbmFsIHBsdXMgYCtgLCBmb2xsb3dlZAorCWArPzxzcmM+Ojxkc3Q+YDsgdGhhdCBpcywgYW4gb3B0aW9uYWwgcGx1cyBge3BsdXN9YCwgZm9sbG93ZWQKIAlieSB0aGUgc291cmNlIHJlZiwgZm9sbG93ZWQgYnkgYSBjb2xvbiBgOmAsIGZvbGxvd2VkIGJ5CiAJdGhlIGRlc3RpbmF0aW9uIHJlZi4KICsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcmV2LWxpc3Qtb3B0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL3Jldi1saXN0LW9wdGlvbnMudHh0CmluZGV4IDljZDY3NzEuLmFiZjM0MjAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcmV2LWxpc3Qtb3B0aW9ucy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9yZXYtbGlzdC1vcHRpb25zLnR4dApAQCAtMTYsNyArMTYsOCBAQAogLS1kYXRlPXtyZWxhdGl2ZSxsb2NhbCxkZWZhdWx0LGlzbyxyZmMsc2hvcnR9OjoKIAogCU9ubHkgdGFrZXMgZWZmZWN0IGZvciBkYXRlcyBzaG93biBpbiBodW1hbi1yZWFkYWJsZSBmb3JtYXQsIHN1Y2gKLQlhcyB3aGVuIHVzaW5nICItLXByZXR0eSIuCisJYXMgd2hlbiB1c2luZyAiLS1wcmV0dHkiLiBgbG9nLmRhdGVgIGNvbmZpZyB2YXJpYWJsZSBzZXRzIGEgZGVmYXVsdAorCXZhbHVlIGZvciBsb2cgY29tbWFuZCdzIC0tZGF0ZSBvcHRpb24uCiArCiBgLS1kYXRlPXJlbGF0aXZlYCBzaG93cyBkYXRlcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB0aW1lLAogZS5nLiAiMiBob3VycyBhZ28iLgpAQCAtMzMsMTcgKzM0LDIxIEBACiBgLS1kYXRlPWRlZmF1bHRgIHNob3dzIHRpbWVzdGFtcHMgaW4gdGhlIG9yaWdpbmFsIHRpbWV6b25lCiAoZWl0aGVyIGNvbW1pdHRlcidzIG9yIGF1dGhvcidzKS4KIAoraWZkZWY6OmdpdC1yZXYtbGlzdFtdCiAtLWhlYWRlcjo6CiAKIAlQcmludCB0aGUgY29udGVudHMgb2YgdGhlIGNvbW1pdCBpbiByYXctZm9ybWF0OyBlYWNoIHJlY29yZCBpcwogCXNlcGFyYXRlZCB3aXRoIGEgTlVMIGNoYXJhY3Rlci4KK2VuZGlmOjpnaXQtcmV2LWxpc3RbXQogCiAtLXBhcmVudHM6OgogCiAJUHJpbnQgdGhlIHBhcmVudHMgb2YgdGhlIGNvbW1pdC4KIAoraWZkZWY6OmdpdC1yZXYtbGlzdFtdCiAtLXRpbWVzdGFtcDo6CiAJUHJpbnQgdGhlIHJhdyBjb21taXQgdGltZXN0YW1wLgorZW5kaWY6OmdpdC1yZXYtbGlzdFtdCiAKIC0tbGVmdC1yaWdodDo6CiAKQEAgLTc1LDYgKzgwLDE3IEBACiAJLXh4eHh4eHguLi4gMXN0IG9uIGEKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy0tZ3JhcGg6OgorCisJRHJhdyBhIHRleHQtYmFzZWQgZ3JhcGhpY2FsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb21taXQgaGlzdG9yeQorCW9uIHRoZSBsZWZ0IGhhbmQgc2lkZSBvZiB0aGUgb3V0cHV0LiAgVGhpcyBtYXkgY2F1c2UgZXh0cmEgbGluZXMKKwl0byBiZSBwcmludGVkIGluIGJldHdlZW4gY29tbWl0cywgaW4gb3JkZXIgZm9yIHRoZSBncmFwaCBoaXN0b3J5CisJdG8gYmUgZHJhd24gcHJvcGVybHkuCisrCitUaGlzIGltcGxpZXMgdGhlICctLXRvcG8tb3JkZXInIG9wdGlvbiBieSBkZWZhdWx0LCBidXQgdGhlCisnLS1kYXRlLW9yZGVyJyBvcHRpb24gbWF5IGFsc28gYmUgc3BlY2lmaWVkLgorCitpZm5kZWY6OmdpdC1yZXYtbGlzdFtdCiBEaWZmIEZvcm1hdHRpbmcKIH5+fn5+fn5+fn5+fn5+fgogCkBAIC05Myw5ICsxMDksOSBAQAogLS1jYzo6CiAKIAlUaGlzIGZsYWcgaW1wbGllcyB0aGUgJy1jJyBvcHRpb25zIGFuZCBmdXJ0aGVyIGNvbXByZXNzZXMgdGhlCi0JcGF0Y2ggb3V0cHV0IGJ5IG9taXR0aW5nIGh1bmtzIHRoYXQgc2hvdyBkaWZmZXJlbmNlcyBmcm9tIG9ubHkKLQlvbmUgcGFyZW50LCBvciBzaG93IHRoZSBzYW1lIGNoYW5nZSBmcm9tIGFsbCBidXQgb25lIHBhcmVudCBmb3IKLQlhbiBPY3RvcHVzIG1lcmdlLgorCXBhdGNoIG91dHB1dCBieSBvbWl0dGluZyB1bmludGVyZXN0aW5nIGh1bmtzIHdob3NlIGNvbnRlbnRzIGluCisJdGhlIHBhcmVudHMgaGF2ZSBvbmx5IHR3byB2YXJpYW50cyBhbmQgdGhlIG1lcmdlIHJlc3VsdCBwaWNrcworCW9uZSBvZiB0aGVtIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgogCiAtcjo6CiAKQEAgLTEwNCw2ICsxMjAsNyBAQAogLXQ6OgogCiAJU2hvdyB0aGUgdHJlZSBvYmplY3RzIGluIHRoZSBkaWZmIG91dHB1dC4gVGhpcyBpbXBsaWVzICctcicuCitlbmRpZjo6Z2l0LXJldi1saXN0W10KIAogQ29tbWl0IExpbWl0aW5nCiB+fn5+fn5+fn5+fn5+fn4KQEAgLTExNCw3ICsxMzEsOCBAQAogCiAtLQogCi0tbiAnbnVtYmVyJywgLS1tYXgtY291bnQ9J251bWJlcic6OgorLW4gJ251bWJlcic6OgorLS1tYXgtY291bnQ9J251bWJlcic6OgogCiAJTGltaXQgdGhlIG51bWJlciBvZiBjb21taXRzIG91dHB1dC4KIApAQCAtMTIyLDIxICsxNDAsMjUgQEAKIAogCVNraXAgJ251bWJlcicgY29tbWl0cyBiZWZvcmUgc3RhcnRpbmcgdG8gc2hvdyB0aGUgY29tbWl0IG91dHB1dC4KIAotLS1zaW5jZT0nZGF0ZScsIC0tYWZ0ZXI9J2RhdGUnOjoKKy0tc2luY2U9J2RhdGUnOjoKKy0tYWZ0ZXI9J2RhdGUnOjoKIAogCVNob3cgY29tbWl0cyBtb3JlIHJlY2VudCB0aGFuIGEgc3BlY2lmaWMgZGF0ZS4KIAotLS11bnRpbD0nZGF0ZScsIC0tYmVmb3JlPSdkYXRlJzo6CistLXVudGlsPSdkYXRlJzo6CistLWJlZm9yZT0nZGF0ZSc6OgogCiAJU2hvdyBjb21taXRzIG9sZGVyIHRoYW4gYSBzcGVjaWZpYyBkYXRlLgogCiBpZmRlZjo6Z2l0LXJldi1saXN0W10KLS0tbWF4LWFnZT0ndGltZXN0YW1wJywgLS1taW4tYWdlPSd0aW1lc3RhbXAnOjoKKy0tbWF4LWFnZT0ndGltZXN0YW1wJzo6CistLW1pbi1hZ2U9J3RpbWVzdGFtcCc6OgogCiAJTGltaXQgdGhlIGNvbW1pdHMgb3V0cHV0IHRvIHNwZWNpZmllZCB0aW1lIHJhbmdlLgogZW5kaWY6OmdpdC1yZXYtbGlzdFtdCiAKLS0tYXV0aG9yPSdwYXR0ZXJuJywgLS1jb21taXR0ZXI9J3BhdHRlcm4nOjoKKy0tYXV0aG9yPSdwYXR0ZXJuJzo6CistLWNvbW1pdHRlcj0ncGF0dGVybic6OgogCiAJTGltaXQgdGhlIGNvbW1pdHMgb3V0cHV0IHRvIG9uZXMgd2l0aCBhdXRob3IvY29tbWl0dGVyCiAJaGVhZGVyIGxpbmVzIHRoYXQgbWF0Y2ggdGhlIHNwZWNpZmllZCBwYXR0ZXJuIChyZWd1bGFyIGV4cHJlc3Npb24pLgpAQCAtMTQ2LDE2ICsxNjgsMTkgQEAKIAlMaW1pdCB0aGUgY29tbWl0cyBvdXRwdXQgdG8gb25lcyB3aXRoIGxvZyBtZXNzYWdlIHRoYXQKIAltYXRjaGVzIHRoZSBzcGVjaWZpZWQgcGF0dGVybiAocmVndWxhciBleHByZXNzaW9uKS4KIAotLWksIC0tcmVnZXhwLWlnbm9yZS1jYXNlOjoKKy1pOjoKKy0tcmVnZXhwLWlnbm9yZS1jYXNlOjoKIAogCU1hdGNoIHRoZSByZWdleHAgbGltaXRpbmcgcGF0dGVybnMgd2l0aG91dCByZWdhcmQgdG8gbGV0dGVycyBjYXNlLgogCi0tRSwgLS1leHRlbmRlZC1yZWdleHA6OgorLUU6OgorLS1leHRlbmRlZC1yZWdleHA6OgogCiAJQ29uc2lkZXIgdGhlIGxpbWl0aW5nIHBhdHRlcm5zIHRvIGJlIGV4dGVuZGVkIHJlZ3VsYXIgZXhwcmVzc2lvbnMKIAlpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGJhc2ljIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCiAKLS1GLCAtLWZpeGVkLXN0cmluZ3M6OgorLUY6OgorLS1maXhlZC1zdHJpbmdzOjoKIAogCUNvbnNpZGVyIHRoZSBsaW1pdGluZyBwYXR0ZXJucyB0byBiZSBmaXhlZCBzdHJpbmdzIChkb24ndCBpbnRlcnByZXQKIAlwYXR0ZXJuIGFzIGEgcmVndWxhciBleHByZXNzaW9uKS4KQEAgLTE5NSw2ICsyMjAsNyBAQAogCVByZXRlbmQgYXMgaWYgYWxsIHRoZSByZWZzIGluIGAkR0lUX0RJUi9yZWZzL2AgYXJlIGxpc3RlZCBvbiB0aGUKIAljb21tYW5kIGxpbmUgYXMgJzxjb21taXQ+Jy4KIAoraWZkZWY6OmdpdC1yZXYtbGlzdFtdCiAtLXN0ZGluOjoKIAogCUluIGFkZGl0aW9uIHRvIHRoZSAnPGNvbW1pdD4nIGxpc3RlZCBvbiB0aGUgY29tbWFuZApAQCAtMjA3LDYgKzIzMyw3IEBACiAJdGVzdCB0aGUgZXhpdCBzdGF0dXMgdG8gc2VlIGlmIGEgcmFuZ2Ugb2Ygb2JqZWN0cyBpcyBmdWxseQogCWNvbm5lY3RlZCAob3Igbm90KS4gIEl0IGlzIGZhc3RlciB0aGFuIHJlZGlyZWN0aW5nIHN0ZG91dAogCXRvIC9kZXYvbnVsbCBhcyB0aGUgb3V0cHV0IGRvZXMgbm90IGhhdmUgdG8gYmUgZm9ybWF0dGVkLgorZW5kaWY6OmdpdC1yZXYtbGlzdFtdCiAKIC0tY2hlcnJ5LXBpY2s6OgogCkBAIC0yMjIsNyArMjQ5LDggQEAKIGZyb20gYnJhbmNoIEEpLiAgV2l0aCB0aGlzIG9wdGlvbiwgc3VjaCBwYWlycyBvZiBjb21taXRzIGFyZQogZXhjbHVkZWQgZnJvbSB0aGUgb3V0cHV0LgogCi0tZywgLS13YWxrLXJlZmxvZ3M6OgorLWc6OgorLS13YWxrLXJlZmxvZ3M6OgogCiAJSW5zdGVhZCBvZiB3YWxraW5nIHRoZSBjb21taXQgYW5jZXN0cnkgY2hhaW4sIHdhbGsKIAlyZWZsb2cgZW50cmllcyBmcm9tIHRoZSBtb3N0IHJlY2VudCBvbmUgdG8gb2xkZXIgb25lcy4KQEAgLTIzNCwxMSArMjYyLDEwIEBACiB0aGlzIGNhdXNlcyB0aGUgb3V0cHV0IHRvIGhhdmUgdHdvIGV4dHJhIGxpbmVzIG9mIGluZm9ybWF0aW9uCiB0YWtlbiBmcm9tIHRoZSByZWZsb2cuICBCeSBkZWZhdWx0LCAnY29tbWl0QFx7TnRofScgbm90YXRpb24gaXMKIHVzZWQgaW4gdGhlIG91dHB1dC4gIFdoZW4gdGhlIHN0YXJ0aW5nIGNvbW1pdCBpcyBzcGVjaWZpZWQgYXMKLSdjb21taXRAe25vd30nLCBvdXRwdXQgYWxzbyB1c2VzICdjb21taXRAXHt0aW1lc3RhbXB9JyBub3RhdGlvbgorJ2NvbW1pdEBce25vd30nLCBvdXRwdXQgYWxzbyB1c2VzICdjb21taXRAXHt0aW1lc3RhbXB9JyBub3RhdGlvbgogaW5zdGVhZC4gIFVuZGVyICdcLS1wcmV0dHk9b25lbGluZScsIHRoZSBjb21taXQgbWVzc2FnZSBpcwogcHJlZml4ZWQgd2l0aCB0aGlzIGluZm9ybWF0aW9uIG9uIHRoZSBzYW1lIGxpbmUuCi0KLUNhbm5vdCBiZSBjb21iaW5lZCB3aXRoICdcLS1yZXZlcnNlJy4KK1RoaXMgb3B0aW9uIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoICdcLS1yZXZlcnNlJy4KIFNlZSBhbHNvIGxpbmtnaXQ6Z2l0LXJlZmxvZ1sxXS4KIAogLS1tZXJnZTo6CkBAIC0yNTEsNyArMjc4LDggQEAKIAlPdXRwdXQgdW5pbnRlcmVzdGluZyBjb21taXRzIGF0IHRoZSBib3VuZGFyeSwgd2hpY2ggYXJlIHVzdWFsbHkKIAlub3Qgc2hvd24uCiAKLS0tZGVuc2UsIC0tc3BhcnNlOjoKKy0tZGVuc2U6OgorLS1zcGFyc2U6OgogCiBXaGVuIG9wdGlvbmFsIHBhdGhzIGFyZSBnaXZlbiwgdGhlIGRlZmF1bHQgYmVoYXZpb3VyICgnLS1kZW5zZScpIGlzIHRvCiBvbmx5IG91dHB1dCBjb21taXRzIHRoYXQgY2hhbmdlcyBhdCBsZWFzdCBvbmUgb2YgdGhlbSwgYW5kIGFsc28gaWdub3JlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktYnVpbHRpbi50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktYnVpbHRpbi50eHQKaW5kZXggNTJjZGI0Yy4uN2VkZTFlNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWJ1aWx0aW4udHh0CisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1idWlsdGluLnR4dApAQCAtNCw3ICs0LDcgQEAKIEFkZGluZyBhIG5ldyBidWlsdC1pbgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVRoZXJlIGFyZSA0IHRoaW5ncyB0byBkbyB0byBhZGQgYSBidWxpdC1pbiBjb21tYW5kIGltcGxlbWVudGF0aW9uIHRvCitUaGVyZSBhcmUgNCB0aGluZ3MgdG8gZG8gdG8gYWRkIGEgYnVpbHQtaW4gY29tbWFuZCBpbXBsZW1lbnRhdGlvbiB0bwogZ2l0OgogCiAuIERlZmluZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGJ1aWx0LWluIGNvbW1hbmQgYGZvb2Agd2l0aApAQCAtMTgsOCArMTgsOCBAQAogICBkZWZpbmVkIGluIGBnaXQuY2AuICBUaGUgZW50cnkgc2hvdWxkIGxvb2sgbGlrZToKIAogCXsgImZvbyIsIGNtZF9mb28sIDxvcHRpb25zPiB9LAotCi0gIHdoZXJlIG9wdGlvbnMgaXMgdGhlIGJpdHdpc2Utb3Igb2Y6CisrCit3aGVyZSBvcHRpb25zIGlzIHRoZSBiaXR3aXNlLW9yIG9mOgogCiBgUlVOX1NFVFVQYDo6CiAKQEAgLTMzLDYgKzMzLDEyIEBACiAJSWYgdGhlIHN0YW5kYXJkIG91dHB1dCBpcyBjb25uZWN0ZWQgdG8gYSB0dHksIHNwYXduIGEgcGFnZXIgYW5kCiAJZmVlZCBvdXIgb3V0cHV0IHRvIGl0LgogCitgTkVFRF9XT1JLX1RSRUVgOjoKKworCU1ha2Ugc3VyZSB0aGVyZSBpcyBhIHdvcmsgdHJlZSwgaS5lLiB0aGUgY29tbWFuZCBjYW5ub3QgYWN0CisJb24gYmFyZSByZXBvc2l0b3JpZXMuCisJVGhpcyBtYWtlcyBvbmx5IHNlbnNlIHdoZW4gYFJVTl9TRVRVUGAgaXMgYWxzbyBzZXQuCisKIC4gQWRkIGBidWlsdGluLWZvby5vYCB0byBgQlVJTFRJTl9PQkpTYCBpbiBgTWFrZWZpbGVgLgogCiBBZGRpdGlvbmFsbHksIGlmIGBmb29gIGlzIGEgbmV3IGNvbW1hbmQsIHRoZXJlIGFyZSAzIG1vcmUgdGhpbmdzIHRvIGRvOgpAQCAtNDEsOCArNDcsNyBAQAogCiAuIFdyaXRlIGRvY3VtZW50YXRpb24gaW4gYERvY3VtZW50YXRpb24vZ2l0LWZvby50eHRgLgogCi0uIEFkZCBhbiBlbnRyeSBmb3IgYGdpdC1mb29gIHRvIHRoZSBsaXN0IGF0IHRoZSBlbmQgb2YKLSAgYERvY3VtZW50YXRpb24vY21kLWxpc3QucGVybGAuCisuIEFkZCBhbiBlbnRyeSBmb3IgYGdpdC1mb29gIHRvIGBjb21tYW5kLWxpc3QudHh0YC4KIAogCiBIb3cgYSBidWlsdC1pbiBpcyBjYWxsZWQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1oaXN0b3J5LWdyYXBoLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1oaXN0b3J5LWdyYXBoLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTU1OTc5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWhpc3RvcnktZ3JhcGgudHh0CkBAIC0wLDAgKzEsMTc5IEBACitoaXN0b3J5IGdyYXBoIEFQSQorPT09PT09PT09PT09PT09PT0KKworVGhlIGdyYXBoIEFQSSBpcyB1c2VkIHRvIGRyYXcgYSB0ZXh0LWJhc2VkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb21taXQKK2hpc3RvcnkuICBUaGUgQVBJIGdlbmVyYXRlcyB0aGUgZ3JhcGggaW4gYSBsaW5lLWJ5LWxpbmUgZmFzaGlvbi4KKworRnVuY3Rpb25zCistLS0tLS0tLS0KKworQ29yZSBmdW5jdGlvbnM6CisKKyogYGdyYXBoX2luaXQoKWAgY3JlYXRlcyBhIG5ldyBgc3RydWN0IGdpdF9ncmFwaGAKKworKiBgZ3JhcGhfcmVsZWFzZSgpYCBkZXN0cm95cyBhIGBzdHJ1Y3QgZ2l0X2dyYXBoYCwgYW5kIGZyZWVzIHRoZSBtZW1vcnkKKyAgYXNzb2NpYXRlZCB3aXRoIGl0LgorCisqIGBncmFwaF91cGRhdGUoKWAgbW92ZXMgdGhlIGdyYXBoIHRvIGEgbmV3IGNvbW1pdC4KKworKiBgZ3JhcGhfbmV4dF9saW5lKClgIG91dHB1dHMgdGhlIG5leHQgbGluZSBvZiB0aGUgZ3JhcGggaW50byBhIHN0cmJ1Zi4gIEl0CisgIGRvZXMgbm90IGFkZCBhIHRlcm1pbmF0aW5nIG5ld2xpbmUuCisKKyogYGdyYXBoX3BhZGRpbmdfbGluZSgpYCBvdXRwdXRzIGEgbGluZSBvZiB2ZXJ0aWNhbCBwYWRkaW5nIGluIHRoZSBncmFwaC4gIEl0CisgIGlzIHNpbWlsYXIgdG8gYGdyYXBoX25leHRfbGluZSgpYCwgYnV0IGlzIGd1YXJhbnRlZWQgdG8gbmV2ZXIgcHJpbnQgdGhlIGxpbmUKKyAgY29udGFpbmluZyB0aGUgY3VycmVudCBjb21taXQuICBXaGVyZSBgZ3JhcGhfbmV4dF9saW5lKClgIHdvdWxkIHByaW50IHRoZQorICBjb21taXQgbGluZSBuZXh0LCBgZ3JhcGhfcGFkZGluZ19saW5lKClgIHByaW50cyBhIGxpbmUgdGhhdCBzaW1wbHkgZXh0ZW5kcworICBhbGwgYnJhbmNoIGxpbmVzIGRvd253YXJkcyBvbmUgcm93LCBsZWF2aW5nIHRoZWlyIHBvc2l0aW9ucyB1bmNoYW5nZWQuCisKKyogYGdyYXBoX2lzX2NvbW1pdF9maW5pc2hlZCgpYCBkZXRlcm1pbmVzIGlmIHRoZSBncmFwaCBoYXMgb3V0cHV0IGFsbCBsaW5lcworICBuZWNlc3NhcnkgZm9yIHRoZSBjdXJyZW50IGNvbW1pdC4gIElmIGBncmFwaF91cGRhdGUoKWAgaXMgY2FsbGVkIGJlZm9yZSBhbGwKKyAgbGluZXMgZm9yIHRoZSBjdXJyZW50IGNvbW1pdCBoYXZlIGJlZW4gcHJpbnRlZCwgdGhlIG5leHQgY2FsbCB0bworICBgZ3JhcGhfbmV4dF9saW5lKClgIHdpbGwgb3V0cHV0IGFuIGVsbGlwc2lzLCB0byBpbmRpY2F0ZSB0aGF0IGEgcG9ydGlvbiBvZgorICB0aGUgZ3JhcGggd2FzIG9taXR0ZWQuCisKK1RoZSBmb2xsb3dpbmcgdXRpbGl0eSBmdW5jdGlvbnMgYXJlIHdyYXBwZXJzIGFyb3VuZCBgZ3JhcGhfbmV4dF9saW5lKClgIGFuZAorYGdyYXBoX2lzX2NvbW1pdF9maW5pc2hlZCgpYC4gIFRoZXkgYWx3YXlzIHByaW50IHRoZSBvdXRwdXQgdG8gc3Rkb3V0LgorVGhleSBjYW4gYWxsIGJlIGNhbGxlZCB3aXRoIGEgTlVMTCBncmFwaCBhcmd1bWVudCwgaW4gd2hpY2ggY2FzZSBubyBncmFwaAorb3V0cHV0IHdpbGwgYmUgcHJpbnRlZC4KKworKiBgZ3JhcGhfc2hvd19jb21taXQoKWAgY2FsbHMgYGdyYXBoX25leHRfbGluZSgpYCB1bnRpbCBpdCByZXR1cm5zIG5vbi16ZXJvLgorICBUaGlzIHByaW50cyBhbGwgZ3JhcGggbGluZXMgdXAgdG8sIGFuZCBpbmNsdWRpbmcsIHRoZSBsaW5lIGNvbnRhaW5pbmcgdGhpcworICBjb21taXQuICBPdXRwdXQgaXMgcHJpbnRlZCB0byBzdGRvdXQuICBUaGUgbGFzdCBsaW5lIHByaW50ZWQgZG9lcyBub3QgY29udGFpbgorICBhIHRlcm1pbmF0aW5nIG5ld2xpbmUuICBUaGlzIHNob3VsZCBub3QgYmUgY2FsbGVkIGlmIHRoZSBjb21taXQgbGluZSBoYXMKKyAgYWxyZWFkeSBiZWVuIHByaW50ZWQsIG9yIGl0IHdpbGwgbG9vcCBmb3JldmVyLgorCisqIGBncmFwaF9zaG93X29uZWxpbmUoKWAgY2FsbHMgYGdyYXBoX25leHRfbGluZSgpYCBhbmQgcHJpbnRzIHRoZSByZXN1bHQgdG8KKyAgc3Rkb3V0LiAgVGhlIGxpbmUgcHJpbnRlZCBkb2VzIG5vdCBjb250YWluIGEgdGVybWluYXRpbmcgbmV3bGluZS4KKworKiBgZ3JhcGhfc2hvd19wYWRkaW5nKClgIGNhbGxzIGBncmFwaF9wYWRkaW5nX2xpbmUoKWAgYW5kIHByaW50cyB0aGUgcmVzdWx0IHRvCisgIHN0ZG91dC4gIFRoZSBsaW5lIHByaW50ZWQgZG9lcyBub3QgY29udGFpbiBhIHRlcm1pbmF0aW5nIG5ld2xpbmUuCisKKyogYGdyYXBoX3Nob3dfcmVtYWluZGVyKClgIGNhbGxzIGBncmFwaF9uZXh0X2xpbmUoKWAgdW50aWwKKyAgYGdyYXBoX2lzX2NvbW1pdF9maW5pc2hlZCgpYCByZXR1cm5zIG5vbi16ZXJvLiAgT3V0cHV0IGlzIHByaW50ZWQgdG8gc3Rkb3V0LgorICBUaGUgbGFzdCBsaW5lIHByaW50ZWQgZG9lcyBub3QgY29udGFpbiBhIHRlcm1pbmF0aW5nIG5ld2xpbmUuICBSZXR1cm5zIDEgaWYKKyAgb3V0cHV0IHdhcyBwcmludGVkLCBhbmQgMCBpZiBubyBvdXRwdXQgd2FzIG5lY2Vzc2FyeS4KKworKiBgZ3JhcGhfc2hvd19zdHJidWYoKWAgcHJpbnRzIHRoZSBzcGVjaWZpZWQgc3RyYnVmIHRvIHN0ZG91dCwgcHJlZml4aW5nIGFsbAorICBsaW5lcyBidXQgdGhlIGZpcnN0IHdpdGggYSBncmFwaCBsaW5lLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IKKyAgZW5zdXJpbmcgZ3JhcGggb3V0cHV0IGZvciB0aGUgZmlyc3QgbGluZSBoYXMgYWxyZWFkeSBiZWVuIHByaW50ZWQgdG8gc3Rkb3V0LgorICAoVGhpcyBjYW4gYmUgZG9uZSB3aXRoIGBncmFwaF9zaG93X2NvbW1pdCgpYCBvciBgZ3JhcGhfc2hvd19vbmVsaW5lKClgLikgIElmCisgIGEgTlVMTCBncmFwaCBpcyBzdXBwbGllZCwgdGhlIHN0cmJ1ZiBpcyBwcmludGVkIGFzLWlzLgorCisqIGBncmFwaF9zaG93X2NvbW1pdF9tc2coKWAgaXMgc2ltaWxhciB0byBgZ3JhcGhfc2hvd19zdHJidWYoKWAsIGJ1dCBpdCBhbHNvCisgIHByaW50cyB0aGUgcmVtYWluZGVyIG9mIHRoZSBncmFwaCwgaWYgbW9yZSBsaW5lcyBhcmUgbmVlZGVkIGFmdGVyIHRoZSBzdHJidWYKKyAgZW5kcy4gIEl0IGlzIGJldHRlciB0aGFuIGRpcmVjdGx5IGNhbGxpbmcgYGdyYXBoX3Nob3dfc3RyYnVmKClgIGZvbGxvd2VkIGJ5CisgIGBncmFwaF9zaG93X3JlbWFpbmRlcigpYCBzaW5jZSBpdCBwcm9wZXJseSBoYW5kbGVzIGJ1ZmZlcnMgdGhhdCBkbyBub3QgZW5kIGluCisgIGEgdGVybWluYXRpbmcgbmV3bGluZS4gIFRoZSBvdXRwdXQgcHJpbnRlZCBieSBgZ3JhcGhfc2hvd19jb21taXRfbXNnKClgIHdpbGwKKyAgZW5kIGluIGEgbmV3bGluZSBpZiBhbmQgb25seSBpZiB0aGUgc3RyYnVmIGVuZHMgaW4gYSBuZXdsaW5lLgorCitEYXRhIHN0cnVjdHVyZQorLS0tLS0tLS0tLS0tLS0KK2BzdHJ1Y3QgZ2l0X2dyYXBoYCBpcyBhbiBvcGFxdWUgZGF0YSB0eXBlIHVzZWQgdG8gc3RvcmUgdGhlIGN1cnJlbnQgZ3JhcGgKK3N0YXRlLgorCitDYWxsaW5nIHNlcXVlbmNlCistLS0tLS0tLS0tLS0tLS0tCisKKyogQ3JlYXRlIGEgYHN0cnVjdCBnaXRfZ3JhcGhgIGJ5IGNhbGxpbmcgYGdyYXBoX2luaXQoKWAuICBXaGVuIHVzaW5nIHRoZQorICByZXZpc2lvbiB3YWxraW5nIEFQSSwgdGhpcyBpcyBkb25lIGF1dG9tYXRpY2FsbHkgYnkgYHNldHVwX3JldmlzaW9ucygpYCBpZgorICB0aGUgJy0tZ3JhcGgnIG9wdGlvbiBpcyBzdXBwbGllZC4KKworKiBVc2UgdGhlIHJldmlzaW9uIHdhbGtpbmcgQVBJIHRvIHdhbGsgdGhyb3VnaCBhIGdyb3VwIG9mIGNvbnRpZ3VvdXMgY29tbWl0cy4KKyAgVGhlIGBnZXRfcmV2aXNpb24oKWAgZnVuY3Rpb24gYXV0b21hdGljYWxseSBjYWxscyBgZ3JhcGhfdXBkYXRlKClgIGVhY2ggdGltZQorICBpdCBpcyBpbnZva2VkLgorCisqIEZvciBlYWNoIGNvbW1pdCwgY2FsbCBgZ3JhcGhfbmV4dF9saW5lKClgIHJlcGVhdGVkbHksIHVudGlsCisgIGBncmFwaF9pc19jb21taXRfZmluaXNoZWQoKWAgcmV0dXJucyBub24temVyby4gIEVhY2ggY2FsbCBnbworICBgZ3JhcGhfbmV4dF9saW5lKClgIHdpbGwgb3V0cHV0IGEgc2luZ2xlIGxpbmUgb2YgdGhlIGdyYXBoLiAgVGhlIHJlc3VsdGluZworICBsaW5lcyB3aWxsIG5vdCBjb250YWluIGFueSBuZXdsaW5lcy4gIGBncmFwaF9uZXh0X2xpbmUoKWAgcmV0dXJucyAxIGlmIHRoZQorICByZXN1bHRpbmcgbGluZSBjb250YWlucyB0aGUgY3VycmVudCBjb21taXQsIG9yIDAgaWYgdGhpcyBpcyBtZXJlbHkgYSBsaW5lCisgIG5lZWRlZCB0byBhZGp1c3QgdGhlIGdyYXBoIGJlZm9yZSBvciBhZnRlciB0aGUgY3VycmVudCBjb21taXQuICBUaGlzIHJldHVybgorICB2YWx1ZSBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgd2hlcmUgdG8gcHJpbnQgdGhlIGNvbW1pdCBzdW1tYXJ5IGluZm9ybWF0aW9uCisgIGFsb25nc2lkZSB0aGUgZ3JhcGggb3V0cHV0LgorCitMaW1pdGF0aW9ucworLS0tLS0tLS0tLS0KKworKiBgZ3JhcGhfdXBkYXRlKClgIG11c3QgYmUgY2FsbGVkIHdpdGggY29tbWl0cyBpbiB0b3BvbG9naWNhbCBvcmRlci4gIEl0IHNob3VsZAorICBub3QgYmUgY2FsbGVkIG9uIGEgY29tbWl0IGlmIGl0IGhhcyBhbHJlYWR5IGJlZW4gaW52b2tlZCB3aXRoIGFuIGFuY2VzdG9yIG9mCisgIHRoYXQgY29tbWl0LCBvciB0aGUgZ3JhcGggb3V0cHV0IHdpbGwgYmUgaW5jb3JyZWN0LgorCisqIGBncmFwaF91cGRhdGUoKWAgbXVzdCBiZSBjYWxsZWQgb24gYSBjb250aWd1b3VzIGdyb3VwIG9mIGNvbW1pdHMuICBJZgorICBgZ3JhcGhfdXBkYXRlKClgIGlzIGNhbGxlZCBvbiBhIHBhcnRpY3VsYXIgY29tbWl0LCBpdCBzaG91bGQgbGF0ZXIgYmUgY2FsbGVkCisgIG9uIGFsbCBwYXJlbnRzIG9mIHRoYXQgY29tbWl0LiAgUGFyZW50cyBtdXN0IG5vdCBiZSBza2lwcGVkLCBvciB0aGUgZ3JhcGgKKyAgb3V0cHV0IHdpbGwgYXBwZWFyIGluY29ycmVjdC4KKysKK2BncmFwaF91cGRhdGUoKWAgbWF5IGJlIHVzZWQgb24gYSBwcnVuZWQgc2V0IG9mIGNvbW1pdHMgb25seSBpZiB0aGUgcGFyZW50IGxpc3QKK2hhcyBiZWVuIHJld3JpdHRlbiBzbyBhcyB0byBpbmNsdWRlIG9ubHkgYW5jZXN0b3JzIGZyb20gdGhlIHBydW5lZCBzZXQuCisKKyogVGhlIGdyYXBoIEFQSSBkb2VzIG5vdCBjdXJyZW50bHkgc3VwcG9ydCByZXZlcnNlIGNvbW1pdCBvcmRlcmluZy4gIEluCisgIG9yZGVyIHRvIGltcGxlbWVudCByZXZlcnNlIG9yZGVyaW5nLCB0aGUgZ3JhcGhpbmcgQVBJIG5lZWRzIGFuCisgIChlZmZpY2llbnQpIG1lY2hhbmlzbSB0byBmaW5kIHRoZSBjaGlsZHJlbiBvZiBhIGNvbW1pdC4KKworU2FtcGxlIHVzYWdlCistLS0tLS0tLS0tLS0KKworLS0tLS0tLS0tLS0tCitzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CitzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCA9IGdyYXBoX2luaXQob3B0cyk7CisKK3doaWxlICgoY29tbWl0ID0gZ2V0X3JldmlzaW9uKG9wdHMpKSAhPSBOVUxMKSB7CisJZ3JhcGhfdXBkYXRlKGdyYXBoLCBjb21taXQpOworCXdoaWxlICghZ3JhcGhfaXNfY29tbWl0X2ZpbmlzaGVkKGdyYXBoKSkKKwl7CisJCXN0cnVjdCBzdHJidWYgc2I7CisJCWludCBpc19jb21taXRfbGluZTsKKworCQlzdHJidWZfaW5pdCgmc2IsIDApOworCQlpc19jb21taXRfbGluZSA9IGdyYXBoX25leHRfbGluZShncmFwaCwgJnNiKTsKKwkJZnB1dHMoc2IuYnVmLCBzdGRvdXQpOworCisJCWlmIChpc19jb21taXRfbGluZSkKKwkJCWxvZ190cmVlX2NvbW1pdChvcHRzLCBjb21taXQpOworCQllbHNlCisJCQlwdXRjaGFyKG9wdHMtPmRpZmZvcHQubGluZV90ZXJtaW5hdGlvbik7CisJfQorfQorCitncmFwaF9yZWxlYXNlKGdyYXBoKTsKKy0tLS0tLS0tLS0tLQorCitTYW1wbGUgb3V0cHV0CistLS0tLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiB0aGUgb3V0cHV0IGZyb20gdGhlIGdyYXBoIEFQSS4gIFRoaXMgb3V0cHV0IGRvZXMKK25vdCBpbmNsdWRlIGFueSBjb21taXQgc3VtbWFyeSBpbmZvcm1hdGlvbi0tY2FsbGVycyBhcmUgcmVzcG9uc2libGUgZm9yCitvdXRwdXR0aW5nIHRoYXQgaW5mb3JtYXRpb24sIGlmIGRlc2lyZWQuCisKKy0tLS0tLS0tLS0tLQorKgorKgorTQorfFwKKyogfAorfCB8ICoKK3wgXCBcCit8ICBcIFwKK00tLiBcIFwKK3xcIFwgXCBcCit8IHwgKiB8IHwKK3wgfCB8IHwgfCAqCit8IHwgfCB8IHwgKgorfCB8IHwgfCB8IE0KK3wgfCB8IHwgfCB8XAorfCB8IHwgfCB8IHwgKgorfCAqIHwgfCB8IHwgfAorfCB8IHwgfCB8IE0gIFwKK3wgfCB8IHwgfCB8XCAgfAorfCB8IHwgfCAqIHwgfCB8Cit8IHwgfCB8ICogfCB8IHwKKyogfCB8IHwgfCB8IHwgfAorfCB8LyAvIC8gLyAvIC8KK3wvfCAvIC8gLyAvIC8KKyogfCB8IHwgfCB8IHwKK3wvIC8gLyAvIC8gLworKiB8IHwgfCB8IHwKK3wgfCB8IHwgfCAqCit8IHwgfCB8IHwvCit8IHwgfCB8ICoKKy0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXBhcnNlLW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXBhcnNlLW9wdGlvbnMudHh0CmluZGV4IGI3Y2RhOTQuLjUzOTg2M2IgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1wYXJzZS1vcHRpb25zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcGFyc2Utb3B0aW9ucy50eHQKQEAgLTEsNiArMSwyMDYgQEAKIHBhcnNlLW9wdGlvbnMgQVBJCiA9PT09PT09PT09PT09PT09PQogCi1UYWxrIGFib3V0IDxwYXJzZS1vcHRpb25zLmg+CitUaGUgcGFyc2Utb3B0aW9ucyBBUEkgaXMgdXNlZCB0byBwYXJzZSBhbmQgbWFzc2FnZSBvcHRpb25zIGluIGdpdAorYW5kIHRvIHByb3ZpZGUgYSB1c2FnZSBoZWxwIHdpdGggY29uc2lzdGVudCBsb29rLgogCi0oUGllcnJlKQorQmFzaWNzCistLS0tLS0KKworVGhlIGFyZ3VtZW50IHZlY3RvciBgYXJndltdYCBtYXkgdXN1YWxseSBjb250YWluIG1hbmRhdG9yeSBvciBvcHRpb25hbAorJ25vbi1vcHRpb24gYXJndW1lbnRzJywgZS5nLiBhIGZpbGVuYW1lIG9yIGEgYnJhbmNoLCBhbmQgJ29wdGlvbnMnLgorT3B0aW9ucyBhcmUgb3B0aW9uYWwgYXJndW1lbnRzIHRoYXQgc3RhcnQgd2l0aCBhIGRhc2ggYW5kCit0aGF0IGFsbG93IHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgYSBjb21tYW5kLgorCisqIFRoZXJlIGFyZSBiYXNpY2FsbHkgdGhyZWUgdHlwZXMgb2Ygb3B0aW9uczoKKyAgJ2Jvb2xlYW4nIG9wdGlvbnMsCisgIG9wdGlvbnMgd2l0aCAobWFuZGF0b3J5KSAnYXJndW1lbnRzJyBhbmQKKyAgb3B0aW9ucyB3aXRoICdvcHRpb25hbCBhcmd1bWVudHMnCisgIChpLmUuIGEgYm9vbGVhbiBvcHRpb24gdGhhdCBjYW4gYmUgYWRqdXN0ZWQpLgorCisqIFRoZXJlIGFyZSBiYXNpY2FsbHkgdHdvIGZvcm1zIG9mIG9wdGlvbnM6CisgICdTaG9ydCBvcHRpb25zJyBjb25zaXN0IG9mIG9uZSBkYXNoIChgLWApIGFuZCBvbmUgYWxwaGFudW1lcmljCisgIGNoYXJhY3Rlci4KKyAgJ0xvbmcgb3B0aW9ucycgYmVnaW4gd2l0aCB0d28gZGFzaGVzIChgXC0tYCkgYW5kIHNvbWUKKyAgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMuCisKKyogT3B0aW9ucyBhcmUgY2FzZS1zZW5zaXRpdmUuCisgIFBsZWFzZSBkZWZpbmUgJ2xvd2VyLWNhc2UgbG9uZyBvcHRpb25zJyBvbmx5LgorCitUaGUgcGFyc2Utb3B0aW9ucyBBUEkgYWxsb3dzOgorCisqICdzdGlja2VkJyBhbmQgJ3NlcGFyYXRlIGZvcm0nIG9mIG9wdGlvbnMgd2l0aCBhcmd1bWVudHMuCisgIGAtb0FyZ2AgaXMgc3RpY2tlZCwgYC1vIEFyZ2AgaXMgc2VwYXJhdGUgZm9ybS4KKyAgYFwtLW9wdGlvbj1BcmdgIGlzIHN0aWNrZWQsIGBcLS1vcHRpb24gQXJnYCBpcyBzZXBhcmF0ZSBmb3JtLgorCisqIExvbmcgb3B0aW9ucyBtYXkgYmUgJ2FiYnJldmlhdGVkJywgYXMgbG9uZyBhcyB0aGUgYWJicmV2aWF0aW9uCisgIGlzIHVuYW1iaWd1b3VzLgorCisqIFNob3J0IG9wdGlvbnMgbWF5IGJlIGJ1bmRsZWQsIGUuZy4gYC1hIC1iYCBjYW4gYmUgc3BlY2lmaWVkIGFzIGAtYWJgLgorCisqIEJvb2xlYW4gbG9uZyBvcHRpb25zIGNhbiBiZSAnbmVnYXRlZCcgKG9yICd1bnNldCcpIGJ5IHByZXBlbmRpbmcKKyAgYG5vLWAsIGUuZy4gYFwtLW5vLWFiYnJldmAgaW5zdGVhZCBvZiBgXC0tYWJicmV2YC4KKworKiBPcHRpb25zIGFuZCBub24tb3B0aW9uIGFyZ3VtZW50cyBjYW4gY2xlYXJseSBiZSBzZXBhcmF0ZWQgdXNpbmcgdGhlIGBcLS1gCisgIG9wdGlvbiwgZS5nLiBgLWEgLWIgXC0tb3B0aW9uIFwtLSBcLS10aGlzLWlzLWEtZmlsZWAgaW5kaWNhdGVzIHRoYXQKKyAgYFwtLXRoaXMtaXMtYS1maWxlYCBtdXN0IG5vdCBiZSBwcm9jZXNzZWQgYXMgYW4gb3B0aW9uLgorCitTdGVwcyB0byBwYXJzZSBvcHRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4gYCNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiYAorCisuIGRlZmluZSBhIE5VTEwtdGVybWluYXRlZAorICBgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX2Zvb191c2FnZVtdYCBhcnJheQorICBjb250YWluaW5nIGFsdGVybmF0aXZlIHVzYWdlIHN0cmluZ3MKKworLiBkZWZpbmUgYGJ1aWx0aW5fZm9vX29wdGlvbnNgIGFycmF5IGFzIGRlc2NyaWJlZCBiZWxvdworICBpbiBzZWN0aW9uICdEYXRhIFN0cnVjdHVyZScuCisKKy4gaW4gYGNtZF9mb28oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpYAorICBjYWxsCisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBidWlsdGluX2Zvb19vcHRpb25zLCBidWlsdGluX2Zvb191c2FnZSwgZmxhZ3MpOworKworYHBhcnNlX29wdGlvbnMoKWAgd2lsbCBmaWx0ZXIgb3V0IHRoZSBwcm9jZXNzZWQgb3B0aW9ucyBvZiBgYXJndltdYCBhbmQgbGVhdmUgdGhlCitub24tb3B0aW9uIGFyZ3VtZW50cyBpbiBgYXJndltdYC4KK2BhcmdjYCBpcyB1cGRhdGVkIGFwcHJvcHJpYXRlbHkgYmVjYXVzZSBvZiB0aGUgYXNzaWdubWVudC4KKysKK0ZsYWdzIGFyZSB0aGUgYml0d2lzZS1vciBvZjoKKworYFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIYDo6CisJS2VlcCB0aGUgYFwtLWAgdGhhdCB1c3VhbGx5IHNlcGFyYXRlcyBvcHRpb25zIGZyb20KKwlub24tb3B0aW9uIGFyZ3VtZW50cy4KKworYFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT05gOjoKKwlVc3VhbGx5IHRoZSB3aG9sZSBhcmd1bWVudCB2ZWN0b3IgaXMgbWFzc2FnZWQgYW5kIHJlb3JkZXJlZC4KKwlVc2luZyB0aGlzIGZsYWcsIHByb2Nlc3NpbmcgaXMgc3RvcHBlZCBhdCB0aGUgZmlyc3Qgbm9uLW9wdGlvbgorCWFyZ3VtZW50LgorCitEYXRhIFN0cnVjdHVyZQorLS0tLS0tLS0tLS0tLS0KKworVGhlIG1haW4gZGF0YSBzdHJ1Y3R1cmUgaXMgYW4gYXJyYXkgb2YgdGhlIGBvcHRpb25gIHN0cnVjdCwKK3NheSBgc3RhdGljIHN0cnVjdCBvcHRpb24gYnVpbHRpbl9hZGRfb3B0aW9uc1tdYC4KK1RoZXJlIGFyZSBzb21lIG1hY3JvcyB0byBlYXNpbHkgZGVmaW5lIG9wdGlvbnM6CisKK2BPUFRfX0FCQlJFVigmaW50X3ZhcilgOjoKKwlBZGQgYFwtLWFiYnJldls9PG4+XWAuCisKK2BPUFRfX0RSWV9SVU4oJmludF92YXIpYDo6CisJQWRkIGAtbiwgXC0tZHJ5LXJ1bmAuCisKK2BPUFRfX1FVSUVUKCZpbnRfdmFyKWA6OgorCUFkZCBgLXEsIFwtLXF1aWV0YC4KKworYE9QVF9fVkVSQk9TRSgmaW50X3ZhcilgOjoKKwlBZGQgYC12LCBcLS12ZXJib3NlYC4KKworYE9QVF9HUk9VUChkZXNjcmlwdGlvbilgOjoKKwlTdGFydCBhbiBvcHRpb24gZ3JvdXAuIGBkZXNjcmlwdGlvbmAgaXMgYSBzaG9ydCBzdHJpbmcgdGhhdAorCWRlc2NyaWJlcyB0aGUgZ3JvdXAgb3IgYW4gZW1wdHkgc3RyaW5nLgorCVN0YXJ0IHRoZSBkZXNjcmlwdGlvbiB3aXRoIGFuIHVwcGVyLWNhc2UgbGV0dGVyLgorCitgT1BUX0JPT0xFQU4oc2hvcnQsIGxvbmcsICZpbnRfdmFyLCBkZXNjcmlwdGlvbilgOjoKKwlJbnRyb2R1Y2UgYSBib29sZWFuIG9wdGlvbi4KKwlgaW50X3ZhcmAgaXMgaW5jcmVtZW50ZWQgb24gZWFjaCB1c2UuCisKK2BPUFRfQklUKHNob3J0LCBsb25nLCAmaW50X3ZhciwgZGVzY3JpcHRpb24sIG1hc2spYDo6CisJSW50cm9kdWNlIGEgYm9vbGVhbiBvcHRpb24uCisJSWYgdXNlZCwgYGludF92YXJgIGlzIGJpdHdpc2Utb3JlZCB3aXRoIGBtYXNrYC4KKworYE9QVF9TRVRfSU5UKHNob3J0LCBsb25nLCAmaW50X3ZhciwgZGVzY3JpcHRpb24sIGludGVnZXIpYDo6CisJSW50cm9kdWNlIGEgYm9vbGVhbiBvcHRpb24uCisJSWYgdXNlZCwgc2V0IGBpbnRfdmFyYCB0byBgaW50ZWdlcmAuCisKK2BPUFRfU0VUX1BUUihzaG9ydCwgbG9uZywgJnB0cl92YXIsIGRlc2NyaXB0aW9uLCBwdHIpYDo6CisJSW50cm9kdWNlIGEgYm9vbGVhbiBvcHRpb24uCisJSWYgdXNlZCwgc2V0IGBwdHJfdmFyYCB0byBgcHRyYC4KKworYE9QVF9TVFJJTkcoc2hvcnQsIGxvbmcsICZzdHJfdmFyLCBhcmdfc3RyLCBkZXNjcmlwdGlvbilgOjoKKwlJbnRyb2R1Y2UgYW4gb3B0aW9uIHdpdGggc3RyaW5nIGFyZ3VtZW50LgorCVRoZSBzdHJpbmcgYXJndW1lbnQgaXMgcHV0IGludG8gYHN0cl92YXJgLgorCitgT1BUX0lOVEVHRVIoc2hvcnQsIGxvbmcsICZpbnRfdmFyLCBkZXNjcmlwdGlvbilgOjoKKwlJbnRyb2R1Y2UgYW4gb3B0aW9uIHdpdGggaW50ZWdlciBhcmd1bWVudC4KKwlUaGUgaW50ZWdlciBpcyBwdXQgaW50byBgaW50X3ZhcmAuCisKK2BPUFRfREFURShzaG9ydCwgbG9uZywgJmludF92YXIsIGRlc2NyaXB0aW9uKWA6OgorCUludHJvZHVjZSBhbiBvcHRpb24gd2l0aCBkYXRlIGFyZ3VtZW50LCBzZWUgYGFwcHJveGlkYXRlKClgLgorCVRoZSB0aW1lc3RhbXAgaXMgcHV0IGludG8gYGludF92YXJgLgorCitgT1BUX0NBTExCQUNLKHNob3J0LCBsb25nLCAmdmFyLCBhcmdfc3RyLCBkZXNjcmlwdGlvbiwgZnVuY19wdHIpYDo6CisJSW50cm9kdWNlIGFuIG9wdGlvbiB3aXRoIGFyZ3VtZW50LgorCVRoZSBhcmd1bWVudCB3aWxsIGJlIGZlZCBpbnRvIHRoZSBmdW5jdGlvbiBnaXZlbiBieSBgZnVuY19wdHJgCisJYW5kIHRoZSByZXN1bHQgd2lsbCBiZSBwdXQgaW50byBgdmFyYC4KKwlTZWUgJ09wdGlvbiBDYWxsYmFja3MnIGJlbG93IGZvciBhIG1vcmUgZWxhYm9yYXRlIGRlc2NyaXB0aW9uLgorCitgT1BUX0FSR1VNRU5UKGxvbmcsIGRlc2NyaXB0aW9uKWA6OgorCUludHJvZHVjZSBhIGxvbmctb3B0aW9uIGFyZ3VtZW50IHRoYXQgd2lsbCBiZSBrZXB0IGluIGBhcmd2W11gLgorCisKK1RoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIGFycmF5IG11c3QgYmUgYE9QVF9FTkQoKWAuCisKK0lmIG5vdCBzdGF0ZWQgb3RoZXJ3aXNlLCBpbnRlcnByZXQgdGhlIGFyZ3VtZW50cyBhcyBmb2xsb3dzOgorCisqIGBzaG9ydGAgaXMgYSBjaGFyYWN0ZXIgZm9yIHRoZSBzaG9ydCBvcHRpb24KKyAgKGUuZy4gYFwnZVwnYCBmb3IgYC1lYCwgdXNlIGAwYCB0byBvbWl0KSwKKworKiBgbG9uZ2AgaXMgYSBzdHJpbmcgZm9yIHRoZSBsb25nIG9wdGlvbgorICAoZS5nLiBgImV4YW1wbGUiYCBmb3IgYFwtLWV4YW1wbGVgLCB1c2UgYE5VTExgIHRvIG9taXQpLAorCisqIGBpbnRfdmFyYCBpcyBhbiBpbnRlZ2VyIHZhcmlhYmxlLAorCisqIGBzdHJfdmFyYCBpcyBhIHN0cmluZyB2YXJpYWJsZSAoYGNoYXIgKmApLAorCisqIGBhcmdfc3RyYCBpcyB0aGUgc3RyaW5nIHRoYXQgaXMgc2hvd24gYXMgYXJndW1lbnQKKyAgKGUuZy4gYCJicmFuY2giYCB3aWxsIHJlc3VsdCBpbiBgPGJyYW5jaD5gKS4KKyAgSWYgc2V0IHRvIGBOVUxMYCwgdGhyZWUgZG90cyAoYC4uLmApIHdpbGwgYmUgZGlzcGxheWVkLgorCisqIGBkZXNjcmlwdGlvbmAgaXMgYSBzaG9ydCBzdHJpbmcgdG8gZGVzY3JpYmUgdGhlIGVmZmVjdCBvZiB0aGUgb3B0aW9uLgorICBJdCBzaGFsbCBiZWdpbiB3aXRoIGEgbG93ZXItY2FzZSBsZXR0ZXIgYW5kIGEgZnVsbCBzdG9wIChgLmApIHNoYWxsIGJlCisgIG9taXR0ZWQgYXQgdGhlIGVuZC4KKworT3B0aW9uIENhbGxiYWNrcworLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZnVuY3Rpb24gbXVzdCBiZSBkZWZpbmVkIGluIHRoaXMgZm9ybToKKworCWludCBmdW5jKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCisKK1RoZSBjYWxsYmFjayBtZWNoYW5pc20gaXMgYXMgZm9sbG93czoKKworKiBJbnNpZGUgYGZ1bmN0YCwgdGhlIG9ubHkgaW50ZXJlc3RpbmcgbWVtYmVyIG9mIHRoZSBzdHJ1Y3R1cmUKKyAgZ2l2ZW4gYnkgYG9wdGAgaXMgdGhlIHZvaWQgcG9pbnRlciBgb3B0LT52YWx1ZWAuCisgIGBcKm9wdC0+dmFsdWVgIHdpbGwgYmUgdGhlIHZhbHVlIHRoYXQgaXMgc2F2ZWQgaW50byBgdmFyYCwgaWYgeW91CisgIHVzZSBgT1BUX0NBTExCQUNLKClgLgorICBGb3IgZXhhbXBsZSwgZG8gYCoodW5zaWduZWQgbG9uZyAqKW9wdC0+dmFsdWUgPSA0MjtgIHRvIGdldCA0MgorICBpbnRvIGFuIGB1bnNpZ25lZCBsb25nYCB2YXJpYWJsZS4KKworKiBSZXR1cm4gdmFsdWUgYDBgIGluZGljYXRlcyBzdWNjZXNzIGFuZCBub24temVybyByZXR1cm4KKyAgdmFsdWUgd2lsbCBpbnZva2UgYHVzYWdlX3dpdGhfb3B0aW9ucygpYCBhbmQsIHRodXMsIGRpZS4KKworKiBJZiB0aGUgdXNlciBuZWdhdGVzIHRoZSBvcHRpb24sIGBhcmdgIGlzIGBOVUxMYCBhbmQgYHVuc2V0YCBpcyAxLgorCitTb3BoaXN0aWNhdGVkIG9wdGlvbiBwYXJzaW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBuZWVkLCBmb3IgZXhhbXBsZSwgb3B0aW9uIGNhbGxiYWNrcyB3aXRoIG9wdGlvbmFsIGFyZ3VtZW50cworb3Igd2l0aG91dCBhcmd1bWVudHMgYXQgYWxsLCBvciBpZiB5b3UgbmVlZCBvdGhlciBzcGVjaWFsIGNhc2VzLAordGhhdCBhcmUgbm90IGhhbmRsZWQgYnkgdGhlIG1hY3JvcyBhYm92ZSwgeW91IG5lZWQgdG8gc3BlY2lmeSB0aGUKK21lbWJlcnMgb2YgdGhlIGBvcHRpb25gIHN0cnVjdHVyZSBtYW51YWxseS4KKworVGhpcyBpcyBub3QgY292ZXJlZCBpbiB0aGlzIGRvY3VtZW50LCBidXQgd2VsbCBkb2N1bWVudGVkCitpbiBgcGFyc2Utb3B0aW9ucy5oYCBpdHNlbGYuCisKK0V4YW1wbGVzCistLS0tLS0tLQorCitTZWUgYHRlc3QtcGFyc2Utb3B0aW9ucy5jYCBhbmQKK2BidWlsdGluLWFkZC5jYCwKK2BidWlsdGluLWNsb25lLmNgLAorYGJ1aWx0aW4tY29tbWl0LmNgLAorYGJ1aWx0aW4tZmV0Y2guY2AsCitgYnVpbHRpbi1mc2NrLmNgLAorYGJ1aWx0aW4tcm0uY2AKK2ZvciByZWFsLXdvcmxkIGV4YW1wbGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXBhdGgtbGlzdC50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcGF0aC1saXN0LnR4dAppbmRleCBkMDc3NjgzLi45ZGJlZGQwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcGF0aC1saXN0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcGF0aC1saXN0LnR4dApAQCAtMSw5ICsxLDEyNiBAQAogcGF0aC1saXN0IEFQSQogPT09PT09PT09PT09PQogCi1UYWxrIGFib3V0IDxwYXRoLWxpc3QuaD4sIHRoaW5ncyBsaWtlCitUaGUgcGF0aF9saXN0IEFQSSBvZmZlcnMgYSBkYXRhIHN0cnVjdHVyZSBhbmQgZnVuY3Rpb25zIHRvIGhhbmRsZSBzb3J0ZWQKK2FuZCB1bnNvcnRlZCBzdHJpbmcgbGlzdHMuCiAKLSogaXQgaXMgbm90IGp1c3QgcGF0aHMgYnV0IHN0cmluZ3MgaW4gZ2VuZXJhbDsKLSogdGhlIGNhbGxpbmcgc2VxdWVuY2UuCitUaGUgbmFtZSBpcyBhIGJpdCBtaXNsZWFkaW5nLCBhIHBhdGhfbGlzdCBtYXkgc3RvcmUgbm90IG9ubHkgcGF0aHMgYnV0CitzdHJpbmdzIGluIGdlbmVyYWwuCiAKLShEc2NobykKK1RoZSBjYWxsZXI6CisKKy4gQWxsb2NhdGVzIGFuZCBjbGVhcnMgYSBgc3RydWN0IHBhdGhfbGlzdGAgdmFyaWFibGUuCisKKy4gSW5pdGlhbGl6ZXMgdGhlIG1lbWJlcnMuIFlvdSBtaWdodCB3YW50IHRvIHNldCB0aGUgZmxhZyBgc3RyZHVwX3BhdGhzYAorICBpZiB0aGUgc3RyaW5ncyBzaG91bGQgYmUgc3RyZHVwKCllZC4gRm9yIGV4YW1wbGUsIHRoaXMgaXMgbmVjZXNzYXJ5CisgIHdoZW4geW91IGFkZCBzb21ldGhpbmcgbGlrZSBnaXRfcGF0aCgiLi4uIiksIHNpbmNlIHRoYXQgZnVuY3Rpb24gcmV0dXJucworICBhIHN0YXRpYyBidWZmZXIgdGhhdCB3aWxsIGNoYW5nZSB3aXRoIHRoZSBuZXh0IGNhbGwgdG8gZ2l0X3BhdGgoKS4KKysKK0lmIHlvdSBuZWVkIHNvbWV0aGluZyBhZHZhbmNlZCwgeW91IGNhbiBtYW51YWxseSBtYWxsb2MoKSB0aGUgYGl0ZW1zYAorbWVtYmVyICh5b3UgbmVlZCB0aGlzIGlmIHlvdSBhZGQgdGhpbmdzIGxhdGVyKSBhbmQgeW91IHNob3VsZCBzZXQgdGhlCitgbnJgIGFuZCBgYWxsb2NgIG1lbWJlcnMgaW4gdGhhdCBjYXNlLCB0b28uCisKKy4gQWRkcyBuZXcgaXRlbXMgdG8gdGhlIGxpc3QsIHVzaW5nIGBwYXRoX2xpc3RfYXBwZW5kYCBvciBgcGF0aF9saXN0X2luc2VydGAuCisKKy4gQ2FuIGNoZWNrIGlmIGEgc3RyaW5nIGlzIGluIHRoZSBsaXN0IHVzaW5nIGBwYXRoX2xpc3RfaGFzX3BhdGhgIG9yCisgIGB1bnNvcnRlZF9wYXRoX2xpc3RfaGFzX3BhdGhgIGFuZCBnZXQgaXQgZnJvbSB0aGUgbGlzdCB1c2luZworICBgcGF0aF9saXN0X2xvb2t1cGAgZm9yIHNvcnRlZCBsaXN0cy4KKworLiBDYW4gc29ydCBhbiB1bnNvcnRlZCBsaXN0IHVzaW5nIGBzb3J0X3BhdGhfbGlzdGAuCisKKy4gRmluYWxseSBpdCBzaG91bGQgZnJlZSB0aGUgbGlzdCB1c2luZyBgcGF0aF9saXN0X2NsZWFyYC4KKworRXhhbXBsZToKKworLS0tLQorc3RydWN0IHBhdGhfbGlzdCBsaXN0OworaW50IGk7CisKK21lbXNldCgmbGlzdCwgMCwgc2l6ZW9mKHN0cnVjdCBwYXRoX2xpc3QpKTsKK3BhdGhfbGlzdF9hcHBlbmQoImZvbyIsICZsaXN0KTsKK3BhdGhfbGlzdF9hcHBlbmQoImJhciIsICZsaXN0KTsKK2ZvciAoaSA9IDA7IGkgPCBsaXN0Lm5yOyBpKyspCisJcHJpbnRmKCIlc1xuIiwgbGlzdC5pdGVtc1tpXS5wYXRoKQorLS0tLQorCitOT1RFOiBJdCBpcyBtb3JlIGVmZmljaWVudCB0byBidWlsZCBhbiB1bnNvcnRlZCBsaXN0IGFuZCBzb3J0IGl0CithZnRlcndhcmRzLCBpbnN0ZWFkIG9mIGJ1aWxkaW5nIGEgc29ydGVkIGxpc3QgKGBPKG4gbG9nIG4pYCBpbnN0ZWFkIG9mCitgTyhuXjIpYCkuCisrCitIb3dldmVyLCBpZiB5b3UgdXNlIHRoZSBsaXN0IHRvIGNoZWNrIGlmIGEgY2VydGFpbiBzdHJpbmcgd2FzIGFkZGVkCithbHJlYWR5LCB5b3Ugc2hvdWxkIG5vdCBkbyB0aGF0ICh1c2luZyB1bnNvcnRlZF9wYXRoX2xpc3RfaGFzX3BhdGgoKSksCitiZWNhdXNlIHRoZSBjb21wbGV4aXR5IHdvdWxkIGJlIHF1YWRyYXRpYyBhZ2FpbiAoYnV0IHdpdGggYSB3b3JzZSBmYWN0b3IpLgorCitGdW5jdGlvbnMKKy0tLS0tLS0tLQorCisqIEdlbmVyYWwgb25lcyAod29ya3Mgd2l0aCBzb3J0ZWQgYW5kIHVuc29ydGVkIGxpc3RzIGFzIHdlbGwpCisKK2BwcmludF9wYXRoX2xpc3RgOjoKKworCUR1bXAgYSBwYXRoX2xpc3QgdG8gc3Rkb3V0LCB1c2VmdWwgbWFpbmx5IGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuIEl0CisJY2FuIHRha2UgYW4gb3B0aW9uYWwgaGVhZGVyIGFyZ3VtZW50IGFuZCBpdCB3cml0ZXMgb3V0IHRoZQorCXN0cmluZy1wb2ludGVyIHBhaXJzIG9mIHRoZSBwYXRoX2xpc3QsIGVhY2ggb25lIGluIGl0cyBvd24gbGluZS4KKworYHBhdGhfbGlzdF9jbGVhcmA6OgorCisJRnJlZSBhIHBhdGhfbGlzdC4gVGhlIGBwYXRoYCBwb2ludGVyIG9mIHRoZSBpdGVtcyB3aWxsIGJlIGZyZWVkIGluIGNhc2UKKwl0aGUgYHN0cmR1cF9wYXRoc2AgbWVtYmVyIG9mIHRoZSBwYXRoX2xpc3QgaXMgc2V0LiBUaGUgc2Vjb25kIHBhcmFtZXRlcgorCWNvbnRyb2xzIGlmIHRoZSBgdXRpbGAgcG9pbnRlciBvZiB0aGUgaXRlbXMgc2hvdWxkIGJlIGZyZWVkIG9yIG5vdC4KKworKiBGdW5jdGlvbnMgZm9yIHNvcnRlZCBsaXN0cyBvbmx5CisKK2BwYXRoX2xpc3RfaGFzX3BhdGhgOjoKKworCURldGVybWluZSBpZiB0aGUgcGF0aF9saXN0IGhhcyBhIGdpdmVuIHN0cmluZyBvciBub3QuCisKK2BwYXRoX2xpc3RfaW5zZXJ0YDo6CisKKwlJbnNlcnQgYSBuZXcgZWxlbWVudCB0byB0aGUgcGF0aF9saXN0LiBUaGUgcmV0dXJuZWQgcG9pbnRlciBjYW4gYmUgaGFuZHkKKwlpZiB5b3Ugd2FudCB0byB3cml0ZSBzb21ldGhpbmcgdG8gdGhlIGB1dGlsYCBwb2ludGVyIG9mIHRoZQorCXBhdGhfbGlzdF9pdGVtIGNvbnRhaW5pbmcgdGhlIGp1c3QgYWRkZWQgc3RyaW5nLgorKworU2luY2UgdGhpcyBmdW5jdGlvbiB1c2VzIHhyZWFsbG9jKCkgKHdoaWNoIGRpZSgpcyBpZiBpdCBmYWlscykgaWYgdGhlCitsaXN0IG5lZWRzIHRvIGdyb3csIGl0IGlzIHNhZmUgbm90IHRvIGNoZWNrIHRoZSBwb2ludGVyLiBJLmUuIHlvdSBtYXkKK3dyaXRlIGBwYXRoX2xpc3RfaW5zZXJ0KC4uLiktPnV0aWwgPSAuLi47YC4KKworYHBhdGhfbGlzdF9sb29rdXBgOjoKKworCUxvb2sgdXAgYSBnaXZlbiBzdHJpbmcgaW4gdGhlIHBhdGhfbGlzdCwgcmV0dXJuaW5nIHRoZSBjb250YWluaW5nCisJcGF0aF9saXN0X2l0ZW0uIElmIHRoZSBzdHJpbmcgaXMgbm90IGZvdW5kLCBOVUxMIGlzIHJldHVybmVkLgorCisqIEZ1bmN0aW9ucyBmb3IgdW5zb3J0ZWQgbGlzdHMgb25seQorCitgcGF0aF9saXN0X2FwcGVuZGA6OgorCisJQXBwZW5kIGEgbmV3IHN0cmluZyB0byB0aGUgZW5kIG9mIHRoZSBwYXRoX2xpc3QuCisKK2Bzb3J0X3BhdGhfbGlzdGA6OgorCisJTWFrZSBhbiB1bnNvcnRlZCBsaXN0IHNvcnRlZC4KKworYHVuc29ydGVkX3BhdGhfbGlzdF9oYXNfcGF0aGA6OgorCisJSXQncyBsaWtlIGBwYXRoX2xpc3RfaGFzX3BhdGgoKWAgYnV0IGZvciB1bnNvcnRlZCBsaXN0cy4KKysKK1RoaXMgZnVuY3Rpb24gbmVlZHMgdG8gbG9vayB0aHJvdWdoIGFsbCBpdGVtcywgYXMgb3Bwb3NlZCB0byBpdHMKK2NvdW50ZXJwYXJ0IGZvciBzb3J0ZWQgbGlzdHMsIHdoaWNoIHBlcmZvcm1zIGEgYmluYXJ5IHNlYXJjaC4KKworRGF0YSBzdHJ1Y3R1cmVzCistLS0tLS0tLS0tLS0tLS0KKworKiBgc3RydWN0IHBhdGhfbGlzdF9pdGVtYAorCitSZXByZXNlbnRzIGFuIGl0ZW0gb2YgdGhlIGxpc3QuIFRoZSBgcGF0aGAgbWVtYmVyIGlzIGEgcG9pbnRlciB0byB0aGUKK3N0cmluZywgYW5kIHlvdSBtYXkgdXNlIHRoZSBgdXRpbGAgbWVtYmVyIGZvciBhbnkgcHVycG9zZSwgaWYgeW91IHdhbnQuCisKKyogYHN0cnVjdCBwYXRoX2xpc3RgCisKK1JlcHJlc2VudHMgdGhlIGxpc3QgaXRzZWxmLgorCisuIFRoZSBhcnJheSBvZiBpdGVtcyBhcmUgYXZhaWxhYmxlIHZpYSB0aGUgYGl0ZW1zYCBtZW1iZXIuCisuIFRoZSBgbnJgIG1lbWJlciBjb250YWlucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIHN0b3JlZCBpbiB0aGUgbGlzdC4KKy4gVGhlIGBhbGxvY2AgbWVtYmVyIGlzIHVzZWQgdG8gYXZvaWQgcmVhbGxvY2F0aW5nIGF0IGV2ZXJ5IGluc2VydGlvbi4KKyAgWW91IHNob3VsZCBub3QgdGFtcGVyIHdpdGggaXQuCisuIFNldHRpbmcgdGhlIGBzdHJkdXBfcGF0aHNgIG1lbWJlciB0byAxIHdpbGwgc3RyZHVwKCkgdGhlIHN0cmluZ3MKKyAgYmVmb3JlIGFkZGluZyB0aGVtLCBzZWUgYWJvdmUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcmV2aXNpb24td2Fsa2luZy50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcmV2aXNpb24td2Fsa2luZy50eHQKaW5kZXggMDFhMjQ1NS4uOTk2ZGEwNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXJldmlzaW9uLXdhbGtpbmcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1yZXZpc2lvbi13YWxraW5nLnR4dApAQCAtMSw5ICsxLDY3IEBACiByZXZpc2lvbiB3YWxraW5nIEFQSQogPT09PT09PT09PT09PT09PT09PT0KIAorVGhlIHJldmlzaW9uIHdhbGtpbmcgQVBJIG9mZmVycyBmdW5jdGlvbnMgdG8gYnVpbGQgYSBsaXN0IG9mIHJldmlzaW9ucworYW5kIHRoZW4gaXRlcmF0ZSBvdmVyIHRoYXQgbGlzdC4KKworQ2FsbGluZyBzZXF1ZW5jZQorLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgd2Fsa2luZyBBUEkgaGFzIGEgZ2l2ZW4gY2FsbGluZyBzZXF1ZW5jZTogZmlyc3QgeW91IG5lZWQgdG8KK2luaXRpYWxpemUgYSByZXZfaW5mbyBzdHJ1Y3R1cmUsIHRoZW4gYWRkIHJldmlzaW9ucyB0byBjb250cm9sIHdoYXQga2luZAorb2YgcmV2aXNpb24gbGlzdCBkbyB5b3Ugd2FudCB0byBnZXQsIGZpbmFsbHkgeW91IGNhbiBpdGVyYXRlIG92ZXIgdGhlCityZXZpc2lvbiBsaXN0LgorCitGdW5jdGlvbnMKKy0tLS0tLS0tLQorCitgaW5pdF9yZXZpc2lvbnNgOjoKKworCUluaXRpYWxpemUgYSByZXZfaW5mbyBzdHJ1Y3R1cmUgd2l0aCBkZWZhdWx0IHZhbHVlcy4gVGhlIHNlY29uZAorCXBhcmFtZXRlciBtYXkgYmUgTlVMTCBvciBjYW4gYmUgcHJlZml4IHBhdGgsIGFuZCB0aGVuIHRoZSBgLnByZWZpeGAKKwl2YXJpYWJsZSB3aWxsIGJlIHNldCB0byBpdC4gVGhpcyBpcyB0eXBpY2FsbHkgdGhlIGZpcnN0IGZ1bmN0aW9uIHlvdQorCXdhbnQgdG8gY2FsbCB3aGVuIHlvdSB3YW50IHRvIGRlYWwgd2l0aCBhIHJldmlzaW9uIGxpc3QuIEFmdGVyIGNhbGxpbmcKKwl0aGlzIGZ1bmN0aW9uLCB5b3UgYXJlIGZyZWUgdG8gY3VzdG9taXplIG9wdGlvbnMsIGxpa2Ugc2V0CisJYC5pZ25vcmVfbWVyZ2VzYCB0byAwIGlmIHlvdSBkb24ndCB3YW50IHRvIGlnbm9yZSBtZXJnZXMsIGFuZCBzbyBvbi4gU2VlCisJYHJldmlzaW9uLmhgIGZvciBhIGNvbXBsZXRlIGxpc3Qgb2YgYXZhaWxhYmxlIG9wdGlvbnMuCisKK2BhZGRfcGVuZGluZ19vYmplY3RgOjoKKworCVRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgaWYgeW91IHdhbnQgdG8gYWRkIGNvbW1pdCBvYmplY3RzIGFzIHJldmlzaW9uCisJaW5mb3JtYXRpb24uIFlvdSBjYW4gdXNlIHRoZSBgVU5JTlRFUkVTVElOR2Agb2JqZWN0IGZsYWcgdG8gaW5kaWNhdGUgaWYKKwl5b3Ugd2FudCB0byBpbmNsdWRlIG9yIGV4Y2x1ZGUgdGhlIGdpdmVuIGNvbW1pdCAoYW5kIGNvbW1pdHMgcmVhY2hhYmxlCisJZnJvbSB0aGUgZ2l2ZW4gY29tbWl0KSBmcm9tIHRoZSByZXZpc2lvbiBsaXN0LgorKworTk9URTogSWYgeW91IGhhdmUgdGhlIGNvbW1pdHMgYXMgYSBzdHJpbmcgbGlzdCB0aGVuIHlvdSBwcm9iYWJseSB3YW50IHRvCit1c2Ugc2V0dXBfcmV2aXNpb25zKCksIGluc3RlYWQgb2YgcGFyc2luZyBlYWNoIHN0cmluZyBhbmQgdXNpbmcgdGhpcworZnVuY3Rpb24uCisKK2BzZXR1cF9yZXZpc2lvbnNgOjoKKworCVBhcnNlIHJldmlzaW9uIGluZm9ybWF0aW9uLCBmaWxsaW5nIGluIHRoZSBgcmV2X2luZm9gIHN0cnVjdHVyZSwgYW5kCisJcmVtb3ZpbmcgdGhlIHVzZWQgYXJndW1lbnRzIGZyb20gdGhlIGFyZ3VtZW50IGxpc3QuIFJldHVybnMgdGhlIG51bWJlcgorCW9mIGFyZ3VtZW50cyBsZWZ0IHRoYXQgd2VyZW4ndCByZWNvZ25pemVkLCB3aGljaCBhcmUgYWxzbyBtb3ZlZCB0byB0aGUKKwloZWFkIG9mIHRoZSBhcmd1bWVudCBsaXN0LiBUaGUgbGFzdCBwYXJhbWV0ZXIgaXMgdXNlZCBpbiBjYXNlIG5vCisJcGFyYW1ldGVyIGdpdmVuIGJ5IHRoZSBmaXJzdCB0d28gYXJndW1lbnRzLgorCitgcHJlcGFyZV9yZXZpc2lvbl93YWxrYDo6CisKKwlQcmVwYXJlcyB0aGUgcmV2X2luZm8gc3RydWN0dXJlIGZvciBhIHdhbGsuIFlvdSBzaG91bGQgY2hlY2sgaWYgaXQKKwlyZXR1cm5zIGFueSBlcnJvciAobm9uLXplcm8gcmV0dXJuIGNvZGUpIGFuZCBpZiBpdCBkb2VzIG5vdCwgeW91IGNhbgorCXN0YXJ0IHVzaW5nIGdldF9yZXZpc2lvbigpIHRvIGRvIHRoZSBpdGVyYXRpb24uCisKK2BnZXRfcmV2aXNpb25gOjoKKworCVRha2VzIGEgcG9pbnRlciB0byBhIGByZXZfaW5mb2Agc3RydWN0dXJlIGFuZCBpdGVyYXRlcyBvdmVyIGl0LAorCXJldHVybmluZyBhIGBzdHJ1Y3QgY29tbWl0ICpgIGVhY2ggdGltZSB5b3UgY2FsbCBpdC4gVGhlIGVuZCBvZiB0aGUKKwlyZXZpc2lvbiBsaXN0IGlzIGluZGljYXRlZCBieSByZXR1cm5pbmcgYSBOVUxMIHBvaW50ZXIuCisKK0RhdGEgc3RydWN0dXJlcworLS0tLS0tLS0tLS0tLS0tCisKIFRhbGsgYWJvdXQgPHJldmlzaW9uLmg+LCB0aGluZ3MgbGlrZToKIAogKiB0d28gZGlmZl9vcHRpb25zLCBvbmUgZm9yIHBhdGggbGltaXRpbmcsIGFub3RoZXIgZm9yIG91dHB1dDsKLSogY2FsbGluZyBzZXF1ZW5jZTogaW5pdF9yZXZpc2lvbnMoKSwgc2V0dXBfcmV2c2lvbnMoKSwgZ2V0X3JldmlzaW9uKCk7CisqIHJlbWFpbmluZyBmdW5jdGlvbnM7CiAKIChMaW51cywgSkMsIERzY2hvKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXJ1bi1jb21tYW5kLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1ydW4tY29tbWFuZC50eHQKaW5kZXggYzM2NGEyMi4uNzVhYTVkNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXJ1bi1jb21tYW5kLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcnVuLWNvbW1hbmQudHh0CkBAIC0zMCw3ICszMCw3IEBACiAJc3RhcnRfY29tbWFuZCgpIGZvbGxvd2VkIGJ5IGZpbmlzaF9jb21tYW5kKCkuIFRha2VzIGEgcG9pbnRlcgogCXRvIGEgYHN0cnVjdCBjaGlsZF9wcm9jZXNzYCB0aGF0IHNwZWNpZmllcyB0aGUgZGV0YWlscy4KIAotYHJ1bl9jb21tYW5kX3Zfb3B0YCwgYHJ1bl9jb21tYW5kX3Zfb3B0X2RpcmAsIGBydW5fY29tbWFuZF92X29wdF9jZF9lbnZgOjoKK2BydW5fY29tbWFuZF92X29wdGAsIGBydW5fY29tbWFuZF92X29wdF9jZGAsIGBydW5fY29tbWFuZF92X29wdF9jZF9lbnZgOjoKIAogCUNvbnZlbmllbmNlIGZ1bmN0aW9ucyB0aGF0IGVuY2Fwc3VsYXRlIGEgc2VxdWVuY2Ugb2YKIAlzdGFydF9jb21tYW5kKCkgZm9sbG93ZWQgYnkgZmluaXNoX2NvbW1hbmQoKS4gVGhlIGFyZ3VtZW50IGFyZ3YKQEAgLTYzLDcgKzYzLDcgQEAKIAogVGhlIGNhbGxlcjoKIAotMS4gYWxsb2NhdGVzIGFuZCBjbGVhcnMgKG1lbXNldCgmY2hsZCwgJzAnLCBzaXplb2YoY2hsZCkpOykgYQorMS4gYWxsb2NhdGVzIGFuZCBjbGVhcnMgKG1lbXNldCgmY2hsZCwgMCwgc2l6ZW9mKGNobGQpKTspIGEKICAgIHN0cnVjdCBjaGlsZF9wcm9jZXNzIHZhcmlhYmxlOwogMi4gaW5pdGlhbGl6ZXMgdGhlIG1lbWJlcnM7CiAzLiBjYWxscyBzdGFydF9jb21tYW5kKCk7CkBAIC0xMzYsNyArMTM2LDcgQEAKIAogVGhlIGNhbGxlcjoKIAotMS4gYWxsb2NhdGVzIGFuZCBjbGVhcnMgKG1lbXNldCgmYXN5LCAnMCcsIHNpemVvZihhc3kpKTspIGEKKzEuIGFsbG9jYXRlcyBhbmQgY2xlYXJzIChtZW1zZXQoJmFzeSwgMCwgc2l6ZW9mKGFzeSkpOykgYQogICAgc3RydWN0IGFzeW5jIHZhcmlhYmxlOwogMi4gaW5pdGlhbGl6ZXMgLnByb2MgYW5kIC5kYXRhOwogMy4gY2FsbHMgc3RhcnRfYXN5bmMoKTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1zdHJidWYudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXN0cmJ1Zi50eHQKaW5kZXggYTUyZTRmMy4uYTk2NjhlNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXN0cmJ1Zi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXN0cmJ1Zi50eHQKQEAgLTEsNiArMSwyNDEgQEAKIHN0cmJ1ZiBBUEkKID09PT09PT09PT0KIAotVGFsayBhYm91dCA8c3RyYnVmLmg+CitzdHJidWYncyBhcmUgbWVhbnQgdG8gYmUgdXNlZCB3aXRoIGFsbCB0aGUgdXN1YWwgQyBzdHJpbmcgYW5kIG1lbW9yeQorQVBJcy4gR2l2ZW4gdGhhdCB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIgaXMga25vd24sIGl0J3Mgb2Z0ZW4gYmV0dGVyIHRvCit1c2UgdGhlIG1lbSogZnVuY3Rpb25zIHRoYW4gYSBzdHIqIG9uZSAobWVtY2hyIHZzLiBzdHJjaHIgZS5nLikuCitUaG91Z2gsIG9uZSBoYXMgdG8gYmUgY2FyZWZ1bCBhYm91dCB0aGUgZmFjdCB0aGF0IHN0ciogZnVuY3Rpb25zIG9mdGVuCitzdG9wIG9uIE5VTHMgYW5kIHRoYXQgc3RyYnVmcyBtYXkgaGF2ZSBlbWJlZGRlZCBOVUxzLgogCi0oUGllcnJlLCBKQykKK0FuIHN0cmJ1ZiBpcyBOVUwgdGVybWluYXRlZCBmb3IgY29udmVuaWVuY2UsIGJ1dCBubyBmdW5jdGlvbiBpbiB0aGUKK3N0cmJ1ZiBBUEkgYWN0dWFsbHkgcmVsaWVzIG9uIHRoZSBzdHJpbmcgYmVpbmcgZnJlZSBvZiBOVUxzLgorCitzdHJidWZzIGhhcyBzb21lIGludmFyaWFudHMgdGhhdCBhcmUgdmVyeSBpbXBvcnRhbnQgdG8ga2VlcCBpbiBtaW5kOgorCisuIFRoZSBgYnVmYCBtZW1iZXIgaXMgbmV2ZXIgTlVMTCwgc28geW91IGl0IGNhbiBiZSB1c2VkIGluIGFueSB1c3VhbCBDCitzdHJpbmcgb3BlcmF0aW9ucyBzYWZlbHkuIHN0cmJ1ZidzIF9oYXZlXyB0byBiZSBpbml0aWFsaXplZCBlaXRoZXIgYnkKK2BzdHJidWZfaW5pdCgpYCBvciBieSBgPSBTVFJCVUZfSU5JVGAgYmVmb3JlIHRoZSBpbnZhcmlhbnRzLCB0aG91Z2guCisrCitEbyAqbm90KiBhc3N1bWUgYW55dGhpbmcgb24gd2hhdCBgYnVmYCByZWFsbHkgaXMgKGUuZy4gaWYgaXQgaXMKK2FsbG9jYXRlZCBtZW1vcnkgb3Igbm90KSwgdXNlIGBzdHJidWZfZGV0YWNoKClgIHRvIHVud3JhcCBhIG1lbW9yeQorYnVmZmVyIGZyb20gaXRzIHN0cmJ1ZiBzaGVsbCBpbiBhIHNhZmUgd2F5LiBUaGF0IGlzIHRoZSBzb2xlIHN1cHBvcnRlZAord2F5LiBUaGlzIHdpbGwgZ2l2ZSB5b3UgYSBtYWxsb2NlZCBidWZmZXIgdGhhdCB5b3UgY2FuIGxhdGVyIGBmcmVlKClgLgorKworSG93ZXZlciwgaXQgaXQgdG90YWxseSBzYWZlIHRvIG1vZGlmeSBhbnl0aGluZyBpbiB0aGUgc3RyaW5nIHBvaW50ZWQgYnkKK3RoZSBgYnVmYCBtZW1iZXIsIGJldHdlZW4gdGhlIGluZGljZXMgYDBgIGFuZCBgbGVuLTFgIChpbmNsdXNpdmUpLgorCisuIFRoZSBgYnVmYCBtZW1iZXIgaXMgYSBieXRlIGFycmF5IHRoYXQgaGFzIGF0IGxlYXN0IGBsZW4gKyAxYCBieXRlcworICBhbGxvY2F0ZWQuIFRoZSBleHRyYSBieXRlIGlzIHVzZWQgdG8gc3RvcmUgYSBgJ1wwJ2AsIGFsbG93aW5nIHRoZQorICBgYnVmYCBtZW1iZXIgdG8gYmUgYSB2YWxpZCBDLXN0cmluZy4gRXZlcnkgc3RyYnVmIGZ1bmN0aW9uIGVuc3VyZSB0aGlzCisgIGludmFyaWFudCBpcyBwcmVzZXJ2ZWQuCisrCitOT1RFOiBJdCBpcyBPSyB0byAicGxheSIgd2l0aCB0aGUgYnVmZmVyIGRpcmVjdGx5IGlmIHlvdSB3b3JrIGl0IHRoaXMKKyAgICAgIHdheToKKysKKy0tLS0KK3N0cmJ1Zl9ncm93KHNiLCBTT01FX1NJWkUpOyA8MT4KK3N0cmJ1Zl9zZXRsZW4oc2IsIHNiLT5sZW4gKyBTT01FX09USEVSX1NJWkUpOworLS0tLQorPDE+IEhlcmUsIHRoZSBtZW1vcnkgYXJyYXkgc3RhcnRpbmcgYXQgYHNiLT5idWZgLCBhbmQgb2YgbGVuZ3RoCitgc3RyYnVmX2F2YWlsKHNiKWAgaXMgYWxsIHlvdXJzLCBhbmQgeW91IGNhbiBiZSBzdXJlIHRoYXQKK2BzdHJidWZfYXZhaWwoc2IpYCBpcyBhdCBsZWFzdCBgU09NRV9TSVpFYC4KKysKK05PVEU6IGBTT01FX09USEVSX1NJWkVgIG11c3QgYmUgc21hbGxlciBvciBlcXVhbCB0byBgc3RyYnVmX2F2YWlsKHNiKWAuCisrCitEb2luZyBzbyBpcyBzYWZlLCB0aG91Z2ggaWYgaXQgaGFzIHRvIGJlIGRvbmUgaW4gbWFueSBwbGFjZXMsIGFkZGluZyB0aGUKK21pc3NpbmcgQVBJIHRvIHRoZSBzdHJidWYgbW9kdWxlIGlzIHRoZSB3YXkgdG8gZ28uCisrCitXQVJOSU5HOiBEbyBfbm90XyBhc3N1bWUgdGhhdCB0aGUgYXJlYSB0aGF0IGlzIHlvdXJzIGlzIG9mIHNpemUgYGFsbG9jCistIDFgIGV2ZW4gaWYgaXQncyB0cnVlIGluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLiBBbGxvYyBpcyBzb21laG93IGEKKyJwcml2YXRlIiBtZW1iZXIgdGhhdCBzaG91bGQgbm90IGJlIG1lc3NlZCB3aXRoLiBVc2UgYHN0cmJ1Zl9hdmFpbCgpYAoraW5zdGVhZC4KKworRGF0YSBzdHJ1Y3R1cmVzCistLS0tLS0tLS0tLS0tLS0KKworKiBgc3RydWN0IHN0cmJ1ZmAKKworVGhpcyBpcyBzdHJpbmcgYnVmZmVyIHN0cnVjdHVyZS4gVGhlIGBsZW5gIG1lbWJlciBjYW4gYmUgdXNlZCB0bworZGV0ZXJtaW5lIHRoZSBjdXJyZW50IGxlbmd0aCBvZiB0aGUgc3RyaW5nLCBhbmQgYGJ1ZmAgbWVtYmVyIHByb3ZpZGVzIGFjY2VzcyB0bwordGhlIHN0cmluZyBpdHNlbGYuCisKK0Z1bmN0aW9ucworLS0tLS0tLS0tCisKKyogTGlmZSBjeWNsZQorCitgc3RyYnVmX2luaXRgOjoKKworCUluaXRpYWxpemUgdGhlIHN0cnVjdHVyZS4gVGhlIHNlY29uZCBwYXJhbWV0ZXIgY2FuIGJlIHplcm8gb3IgYSBiaWdnZXIKKwludW1iZXIgdG8gYWxsb2NhdGUgbWVtb3J5LCBpbiBjYXNlIHlvdSB3YW50IHRvIHByZXZlbnQgZnVydGhlciByZWFsbG9jcy4KKworYHN0cmJ1Zl9yZWxlYXNlYDo6CisKKwlSZWxlYXNlIGEgc3RyaW5nIGJ1ZmZlciBhbmQgdGhlIG1lbW9yeSBpdCB1c2VkLiBZb3Ugc2hvdWxkIG5vdCB1c2UgdGhlCisJc3RyaW5nIGJ1ZmZlciBhZnRlciB1c2luZyB0aGlzIGZ1bmN0aW9uLCB1bmxlc3MgeW91IGluaXRpYWxpemUgaXQgYWdhaW4uCisKK2BzdHJidWZfZGV0YWNoYDo6CisKKwlEZXRhY2ggdGhlIHN0cmluZyBmcm9tIHRoZSBzdHJidWYgYW5kIHJldHVybnMgaXQ7IHlvdSBub3cgb3duIHRoZQorCXN0b3JhZ2UgdGhlIHN0cmluZyBvY2N1cGllcyBhbmQgaXQgaXMgeW91ciByZXNwb25zaWJpbGl0eSBmcm9tIHRoZW4gb24KKwl0byByZWxlYXNlIGl0IHdpdGggYGZyZWUoMylgIHdoZW4geW91IGFyZSBkb25lIHdpdGggaXQuCisKK2BzdHJidWZfYXR0YWNoYDo6CisKKwlBdHRhY2ggYSBzdHJpbmcgdG8gYSBidWZmZXIuIFlvdSBzaG91bGQgc3BlY2lmeSB0aGUgc3RyaW5nIHRvIGF0dGFjaCwKKwl0aGUgY3VycmVudCBsZW5ndGggb2YgdGhlIHN0cmluZyBhbmQgdGhlIGFtb3VudCBvZiBhbGxvY2F0ZWQgbWVtb3J5LgorCVRoZSBhbW91bnQgbXVzdCBiZSBsYXJnZXIgdGhhbiB0aGUgc3RyaW5nIGxlbmd0aCwgYmVjYXVzZSB0aGUgc3RyaW5nIHlvdQorCXBhc3MgaXMgc3VwcG9zZWQgdG8gYmUgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcuICBUaGlzIHN0cmluZyBfbXVzdF8gYmUKKwltYWxsb2MoKWVkLCBhbmQgYWZ0ZXIgYXR0YWNoaW5nLCB0aGUgcG9pbnRlciBjYW5ub3QgYmUgcmVsaWVkIHVwb24KKwlhbnltb3JlLCBhbmQgbmVpdGhlciBiZSBmcmVlKClkIGRpcmVjdGx5LgorCitgc3RyYnVmX3N3YXBgOjoKKworCVN3YXAgdGhlIGNvbnRlbnRzIG9mIHR3byBzdHJpbmcgYnVmZmVycy4KKworKiBSZWxhdGVkIHRvIHRoZSBzaXplIG9mIHRoZSBidWZmZXIKKworYHN0cmJ1Zl9hdmFpbGA6OgorCisJRGV0ZXJtaW5lIHRoZSBhbW91bnQgb2YgYWxsb2NhdGVkIGJ1dCB1bnVzZWQgbWVtb3J5LgorCitgc3RyYnVmX2dyb3dgOjoKKworCUVuc3VyZSB0aGF0IGF0IGxlYXN0IHRoaXMgYW1vdW50IG9mIHVudXNlZCBtZW1vcnkgaXMgYXZhaWxhYmxlIGFmdGVyCisJYGxlbmAuIFRoaXMgaXMgdXNlZCB3aGVuIHlvdSBrbm93IGEgdHlwaWNhbCBzaXplIGZvciB3aGF0IHlvdSB3aWxsIGFkZAorCWFuZCB3YW50IHRvIGF2b2lkIHJlcGV0aXRpdmUgYXV0b21hdGljIHJlc2l6aW5nIG9mIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlci4KKwlUaGlzIGlzIG5ldmVyIGEgbmVlZGVkIG9wZXJhdGlvbiwgYnV0IGNhbiBiZSBjcml0aWNhbCBmb3IgcGVyZm9ybWFuY2UgaW4KKwlzb21lIGNhc2VzLgorCitgc3RyYnVmX3NldGxlbmA6OgorCisJU2V0IHRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlciB0byBhIGdpdmVuIHZhbHVlLiBUaGlzIGZ1bmN0aW9uIGRvZXMgKm5vdCoKKwlhbGxvY2F0ZSBuZXcgbWVtb3J5LCBzbyB5b3Ugc2hvdWxkIG5vdCBwZXJmb3JtIGEgYHN0cmJ1Zl9zZXRsZW4oKWAgdG8gYQorCWxlbmd0aCB0aGF0IGlzIGxhcmdlciB0aGFuIGBsZW4gKyBzdHJidWZfYXZhaWwoKWAuIGBzdHJidWZfc2V0bGVuKClgIGlzCisJanVzdCBtZWFudCBhcyBhICdwbGVhc2UgZml4IGludmFyaWFudHMgZnJvbSB0aGlzIHN0cmJ1ZiBJIGp1c3QgbWVzc2VkCisJd2l0aCcuCisKK2BzdHJidWZfcmVzZXRgOjoKKworCUVtcHR5IHRoZSBidWZmZXIgYnkgc2V0dGluZyB0aGUgc2l6ZSBvZiBpdCB0byB6ZXJvLgorCisqIFJlbGF0ZWQgdG8gdGhlIGNvbnRlbnRzIG9mIHRoZSBidWZmZXIKKworYHN0cmJ1Zl9ydHJpbWA6OgorCisJU3RyaXAgd2hpdGVzcGFjZSBmcm9tIHRoZSBlbmQgb2YgYSBzdHJpbmcuCisKK2BzdHJidWZfY21wYDo6CisKKwlDb21wYXJlIHR3byBidWZmZXJzLiBSZXR1cm5zIGFuIGludGVnZXIgbGVzcyB0aGFuLCBlcXVhbCB0bywgb3IgZ3JlYXRlcgorCXRoYW4gemVybyBpZiB0aGUgZmlyc3QgYnVmZmVyIGlzIGZvdW5kLCByZXNwZWN0aXZlbHksIHRvIGJlIGxlc3MgdGhhbiwKKwl0byBtYXRjaCwgb3IgYmUgZ3JlYXRlciB0aGFuIHRoZSBzZWNvbmQgYnVmZmVyLgorCisqIEFkZGluZyBkYXRhIHRvIHRoZSBidWZmZXIKKworTk9URTogQWxsIG9mIHRoZXNlIGZ1bmN0aW9ucyBpbiB0aGlzIHNlY3Rpb24gd2lsbCBncm93IHRoZSBidWZmZXIgYXMKKyAgICAgIG5lY2Vzc2FyeS4KKworYHN0cmJ1Zl9hZGRjaGA6OgorCisJQWRkIGEgc2luZ2xlIGNoYXJhY3RlciB0byB0aGUgYnVmZmVyLgorCitgc3RyYnVmX2luc2VydGA6OgorCisJSW5zZXJ0IGRhdGEgdG8gdGhlIGdpdmVuIHBvc2l0aW9uIG9mIHRoZSBidWZmZXIuIFRoZSByZW1haW5pbmcgY29udGVudHMKKwl3aWxsIGJlIHNoaWZ0ZWQsIG5vdCBvdmVyd3JpdHRlbi4KKworYHN0cmJ1Zl9yZW1vdmVgOjoKKworCVJlbW92ZSBnaXZlbiBhbW91bnQgb2YgZGF0YSBmcm9tIGEgZ2l2ZW4gcG9zaXRpb24gb2YgdGhlIGJ1ZmZlci4KKworYHN0cmJ1Zl9zcGxpY2VgOjoKKworCVJlbW92ZSB0aGUgYnl0ZXMgYmV0d2VlbiBgcG9zLi5wb3MrbGVuYCBhbmQgcmVwbGFjZSBpdCB3aXRoIHRoZSBnaXZlbgorCWRhdGEuCisKK2BzdHJidWZfYWRkYDo6CisKKwlBZGQgZGF0YSBvZiBnaXZlbiBsZW5ndGggdG8gdGhlIGJ1ZmZlci4KKworYHN0cmJ1Zl9hZGRzdHJgOjoKKworQWRkIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHRoZSBidWZmZXIuCisrCitOT1RFOiBUaGlzIGZ1bmN0aW9uIHdpbGwgKmFsd2F5cyogYmUgaW1wbGVtZW50ZWQgYXMgYW4gaW5saW5lIG9yIGEgbWFjcm8KK3RoYXQgZXhwYW5kcyB0bzoKKysKKy0tLS0KK3N0cmJ1Zl9hZGQoLi4uLCBzLCBzdHJsZW4ocykpOworLS0tLQorKworTWVhbmluZyB0aGF0IHRoaXMgaXMgZWZmaWNpZW50IHRvIHdyaXRlIHRoaW5ncyBsaWtlOgorKworLS0tLQorc3RyYnVmX2FkZHN0cihzYiwgImltbWVkaWF0ZSBzdHJpbmciKTsKKy0tLS0KKworYHN0cmJ1Zl9hZGRidWZgOjoKKworCUNvcHkgdGhlIGNvbnRlbnRzIG9mIGFuIG90aGVyIGJ1ZmZlciBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IG9uZS4KKworYHN0cmJ1Zl9hZGRkdXBgOjoKKworCUNvcHkgcGFydCBvZiB0aGUgYnVmZmVyIGZyb20gYSBnaXZlbiBwb3NpdGlvbiB0aWxsIGEgZ2l2ZW4gbGVuZ3RoIHRvIHRoZQorCWVuZCBvZiB0aGUgYnVmZmVyLgorCitgc3RyYnVmX2V4cGFuZGA6OgorCisJVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBleHBhbmQgYSBmb3JtYXQgc3RyaW5nIGNvbnRhaW5pbmcKKwlwbGFjZWhvbGRlcnMuIFRvIHRoYXQgZW5kLCBpdCBwYXJzZXMgdGhlIHN0cmluZyBhbmQgY2FsbHMgdGhlIHNwZWNpZmllZAorCWZ1bmN0aW9uIGZvciBldmVyeSBwZXJjZW50IHNpZ24gZm91bmQuCisrCitUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgZ2l2ZW4gYSBwb2ludGVyIHRvIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGAlYAorYW5kIGEgcG9pbnRlciB0byB0aGUgc3RydWN0IHN0cmJ1Zi4gIEl0IGlzIGV4cGVjdGVkIHRvIGFkZCB0aGUgZXhwYW5kZWQKK3ZlcnNpb24gb2YgdGhlIHBsYWNlaG9sZGVyIHRvIHRoZSBzdHJidWYsIGUuZy4gdG8gYWRkIGEgbmV3bGluZQorY2hhcmFjdGVyIGlmIHRoZSBsZXR0ZXIgYG5gIGFwcGVhcnMgYWZ0ZXIgYSBgJWAuICBUaGUgZnVuY3Rpb24gcmV0dXJucwordGhlIGxlbmd0aCBvZiB0aGUgcGxhY2Vob2xkZXIgcmVjb2duaXplZCBhbmQgYHN0cmJ1Zl9leHBhbmQoKWAgc2tpcHMKK292ZXIgaXQuCisrCitBbGwgb3RoZXIgY2hhcmFjdGVycyAobm9uLXBlcmNlbnQgYW5kIG5vdCBza2lwcGVkIG9uZXMpIGFyZSBjb3BpZWQKK3ZlcmJhdGltIHRvIHRoZSBzdHJidWYuICBJZiB0aGUgY2FsbGJhY2sgcmV0dXJuZWQgemVybywgbWVhbmluZyB0aGF0IHRoZQorcGxhY2Vob2xkZXIgaXMgdW5rbm93biwgdGhlbiB0aGUgcGVyY2VudCBzaWduIGlzIGNvcGllZCwgdG9vLgorKworSW4gb3JkZXIgdG8gZmFjaWxpdGF0ZSBjYWNoaW5nIGFuZCB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIGdpdmUKK3BhcmFtZXRlcnMgdG8gdGhlIGNhbGxiYWNrLCBgc3RyYnVmX2V4cGFuZCgpYCBwYXNzZXMgYSBjb250ZXh0IHBvaW50ZXIsCit3aGljaCBjYW4gYmUgdXNlZCBieSB0aGUgcHJvZ3JhbW1lciBvZiB0aGUgY2FsbGJhY2sgYXMgc2hlIHNlZXMgZml0LgorCitgc3RyYnVmX2FkZGZgOjoKKworCUFkZCBhIGZvcm1hdHRlZCBzdHJpbmcgdG8gdGhlIGJ1ZmZlci4KKworYHN0cmJ1Zl9mcmVhZGA6OgorCisJUmVhZCBhIGdpdmVuIHNpemUgb2YgZGF0YSBmcm9tIGEgRklMRSogcG9pbnRlciB0byB0aGUgYnVmZmVyLgorKworTk9URTogVGhlIGJ1ZmZlciBpcyByZXdpbmRlZCBpZiB0aGUgcmVhZCBmYWlscy4gSWYgLTEgaXMgcmV0dXJuZWQsCitgZXJybm9gIG11c3QgYmUgY29uc3VsdGVkLCBsaWtlIHlvdSB3b3VsZCBkbyBmb3IgYHJlYWQoMylgLgorYHN0cmJ1Zl9yZWFkKClgLCBgc3RyYnVmX3JlYWRfZmlsZSgpYCBhbmQgYHN0cmJ1Zl9nZXRsaW5lKClgIGhhcyB0aGUKK3NhbWUgYmVoYXZpb3VyIGFzIHdlbGwuCisKK2BzdHJidWZfcmVhZGA6OgorCisJUmVhZCB0aGUgY29udGVudHMgb2YgYSBnaXZlbiBmaWxlIGRlc2NyaXB0b3IuIFRoZSB0aGlyZCBhcmd1bWVudCBjYW4gYmUKKwl1c2VkIHRvIGdpdmUgYSBoaW50IGFib3V0IHRoZSBmaWxlIHNpemUsIHRvIGF2b2lkIHJlYWxsb2NzLgorCitgc3RyYnVmX3JlYWRfZmlsZWA6OgorCisJUmVhZCB0aGUgY29udGVudHMgb2YgYSBmaWxlLCBzcGVjaWZpZWQgYnkgaXRzIHBhdGguIFRoZSB0aGlyZCBhcmd1bWVudAorCWNhbiBiZSB1c2VkIHRvIGdpdmUgYSBoaW50IGFib3V0IHRoZSBmaWxlIHNpemUsIHRvIGF2b2lkIHJlYWxsb2NzLgorCitgc3RyYnVmX2dldGxpbmVgOjoKKworCVJlYWQgYSBsaW5lIGZyb20gYSBGSUxFKiBwb2ludGVyLiBUaGUgc2Vjb25kIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgbGluZQorCXRlcm1pbmF0b3IgY2hhcmFjdGVyLCB0eXBpY2FsbHkgYCdcbidgLgorCitgc3RyaXBzcGFjZWA6OgorCisJU3RyaXAgd2hpdGVzcGFjZSBmcm9tIGEgYnVmZmVyLiBUaGUgc2Vjb25kIHBhcmFtZXRlciBjb250cm9scyBpZgorCWNvbW1lbnRzIGFyZSBjb25zaWRlcmVkIGNvbnRlbnRzIHRvIGJlIHJlbW92ZWQgb3Igbm90LgorCitgbGF1bmNoX2VkaXRvcmA6OgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91cmxzLXJlbW90ZXMudHh0IGIvRG9jdW1lbnRhdGlvbi91cmxzLXJlbW90ZXMudHh0CmluZGV4IDVkZDFmODMuLjk5NzUzMDAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXJscy1yZW1vdGVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3VybHMtcmVtb3Rlcy50eHQKQEAgLTEsMTEgKzEsNDYgQEAKIGluY2x1ZGU6OnVybHMudHh0W10KIAotUkVNT1RFUwotLS0tLS0tLQorUkVNT1RFU1tbUkVNT1RFU11dCistLS0tLS0tLS0tLS0tLS0tLS0KIAotSW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlLCBhcyBhIHNob3J0LWhhbmQsIHRoZSBuYW1lIG9mIGEKLWZpbGUgaW4gYCRHSVRfRElSL3JlbW90ZXNgIGRpcmVjdG9yeSBjYW4gYmUgZ2l2ZW47IHRoZQotbmFtZWQgZmlsZSBzaG91bGQgYmUgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQ6CitUaGUgbmFtZSBvZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBjYW4gYmUgdXNlZCBpbnN0ZWFkCitvZiBhIFVSTCBhcyBgPHJlcG9zaXRvcnk+YCBhcmd1bWVudDoKKworKiBhIHJlbW90ZSBpbiB0aGUgZ2l0IGNvbmZpZ3VyYXRpb24gZmlsZTogYCRHSVRfRElSL2NvbmZpZ2AsCisqIGEgZmlsZSBpbiB0aGUgYCRHSVRfRElSL3JlbW90ZXNgIGRpcmVjdG9yeSwgb3IKKyogYSBmaWxlIGluIHRoZSBgJEdJVF9ESVIvYnJhbmNoZXNgIGRpcmVjdG9yeS4KKworQWxsIG9mIHRoZXNlIGFsc28gYWxsb3cgeW91IHRvIG9taXQgdGhlIHJlZnNwZWMgZnJvbSB0aGUgY29tbWFuZCBsaW5lCitiZWNhdXNlIHRoZXkgZWFjaCBjb250YWluIGEgcmVmc3BlYyB3aGljaCBnaXQgd2lsbCB1c2UgYnkgZGVmYXVsdC4KKworTmFtZWQgcmVtb3RlIGluIGNvbmZpZ3VyYXRpb24gZmlsZQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitZb3UgY2FuIGNob29zZSB0byBwcm92aWRlIHRoZSBuYW1lIG9mIGEgcmVtb3RlIHdoaWNoIHlvdSBoYWQgcHJldmlvdXNseQorY29uZmlndXJlZCB1c2luZyBsaW5rZ2l0OmdpdC1yZW1vdGVbMV0sIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXQorb3IgZXZlbiBieSBhIG1hbnVhbCBlZGl0IHRvIHRoZSBgJEdJVF9ESVIvY29uZmlnYCBmaWxlLiAgVGhlIFVSTCBvZgordGhpcyByZW1vdGUgd2lsbCBiZSB1c2VkIHRvIGFjY2VzcyB0aGUgcmVwb3NpdG9yeS4gIFRoZSByZWZzcGVjCitvZiB0aGlzIHJlbW90ZSB3aWxsIGJlIHVzZWQgYnkgZGVmYXVsdCB3aGVuIHlvdSBkbworbm90IHByb3ZpZGUgYSByZWZzcGVjIG9uIHRoZSBjb21tYW5kIGxpbmUuICBUaGUgZW50cnkgaW4gdGhlCitjb25maWcgZmlsZSB3b3VsZCBhcHBlYXIgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0KKwlbcmVtb3RlICI8bmFtZT4iXQorCQl1cmwgPSA8dXJsPgorCQlwdXNoID0gPHJlZnNwZWM+CisJCWZldGNoID0gPHJlZnNwZWM+CistLS0tLS0tLS0tLS0KKworCitOYW1lZCBmaWxlIGluIGAkR0lUX0RJUi9yZW1vdGVzYAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1lvdSBjYW4gY2hvb3NlIHRvIHByb3ZpZGUgdGhlIG5hbWUgb2YgYQorZmlsZSBpbiBgJEdJVF9ESVIvcmVtb3Rlc2AuICBUaGUgVVJMCitpbiB0aGlzIGZpbGUgd2lsbCBiZSB1c2VkIHRvIGFjY2VzcyB0aGUgcmVwb3NpdG9yeS4gIFRoZSByZWZzcGVjCitpbiB0aGlzIGZpbGUgd2lsbCBiZSB1c2VkIGFzIGRlZmF1bHQgd2hlbiB5b3UgZG8gbm90Citwcm92aWRlIGEgcmVmc3BlYyBvbiB0aGUgY29tbWFuZCBsaW5lLiAgVGhpcyBmaWxlIHNob3VsZCBoYXZlIHRoZQorZm9sbG93aW5nIGZvcm1hdDoKIAogLS0tLS0tLS0tLS0tCiAJVVJMOiBvbmUgb2YgdGhlIGFib3ZlIFVSTCBmb3JtYXQKQEAgLTE0LDQyICs0OSwzNCBAQAogCiAtLS0tLS0tLS0tLS0KIAotVGhlbiBzdWNoIGEgc2hvcnQtaGFuZCBpcyBzcGVjaWZpZWQgaW4gcGxhY2Ugb2YKLTxyZXBvc2l0b3J5PiB3aXRob3V0IDxyZWZzcGVjPiBwYXJhbWV0ZXJzIG9uIHRoZSBjb21tYW5kCi1saW5lLCA8cmVmc3BlYz4gc3BlY2lmaWVkIG9uIGBQdXNoOmAgbGluZXMgb3IgYFB1bGw6YAotbGluZXMgYXJlIHVzZWQgZm9yIGBnaXQtcHVzaGAgYW5kIGBnaXQtZmV0Y2hgL2BnaXQtcHVsbGAsCi1yZXNwZWN0aXZlbHkuICBNdWx0aXBsZSBgUHVzaDpgIGFuZCBgUHVsbDpgIGxpbmVzIG1heQorYFB1c2g6YCBsaW5lcyBhcmUgdXNlZCBieSBgZ2l0LXB1c2hgIGFuZAorYFB1bGw6YCBsaW5lcyBhcmUgdXNlZCBieSBgZ2l0LXB1bGxgIGFuZCBgZ2l0LWZldGNoYC4KK011bHRpcGxlIGBQdXNoOmAgYW5kIGBQdWxsOmAgbGluZXMgbWF5CiBiZSBzcGVjaWZpZWQgZm9yIGFkZGl0aW9uYWwgYnJhbmNoIG1hcHBpbmdzLgogCi1PciwgZXF1aXZhbGVudGx5LCBpbiB0aGUgYCRHSVRfRElSL2NvbmZpZ2AgKG5vdGUgdGhlIHVzZQotb2YgYGZldGNoYCBpbnN0ZWFkIG9mIGBQdWxsOmApOgorTmFtZWQgZmlsZSBpbiBgJEdJVF9ESVIvYnJhbmNoZXNgCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworWW91IGNhbiBjaG9vc2UgdG8gcHJvdmlkZSB0aGUgbmFtZSBvZiBhCitmaWxlIGluIGAkR0lUX0RJUi9icmFuY2hlc2AuCitUaGUgVVJMIGluIHRoaXMgZmlsZSB3aWxsIGJlIHVzZWQgdG8gYWNjZXNzIHRoZSByZXBvc2l0b3J5LgorVGhpcyBmaWxlIHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorCiAKIC0tLS0tLS0tLS0tLQotCVtyZW1vdGUgIjxyZW1vdGU+Il0KLQkJdXJsID0gPHVybD4KLQkJcHVzaCA9IDxyZWZzcGVjPgotCQlmZXRjaCA9IDxyZWZzcGVjPgotCisJPHVybD4jPGhlYWQ+CiAtLS0tLS0tLS0tLS0KIAotVGhlIG5hbWUgb2YgYSBmaWxlIGluIGAkR0lUX0RJUi9icmFuY2hlc2AgZGlyZWN0b3J5IGNhbiBiZQotc3BlY2lmaWVkIGFzIGFuIG9sZGVyIG5vdGF0aW9uIHNob3J0LWhhbmQ7IHRoZSBuYW1lZAotZmlsZSBzaG91bGQgY29udGFpbiBhIHNpbmdsZSBsaW5lLCBhIFVSTCBpbiBvbmUgb2YgdGhlCi1hYm92ZSBmb3JtYXRzLCBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IGEgaGFzaCBgI2AgYW5kIHRoZQotbmFtZSBvZiByZW1vdGUgaGVhZCAoVVJMIGZyYWdtZW50IG5vdGF0aW9uKS4KLWAkR0lUX0RJUi9icmFuY2hlcy88cmVtb3RlPmAgZmlsZSB0aGF0IHN0b3JlcyBhIDx1cmw+Ci13aXRob3V0IHRoZSBmcmFnbWVudCBpcyBlcXVpdmFsZW50IHRvIGhhdmUgdGhpcyBpbiB0aGUKLWNvcnJlc3BvbmRpbmcgZmlsZSBpbiB0aGUgYCRHSVRfRElSL3JlbW90ZXMvYCBkaXJlY3RvcnkuCitgPHVybD5gIGlzIHJlcXVpcmVkOyBgIzxoZWFkPmAgaXMgb3B0aW9uYWwuCitXaGVuIHlvdSBkbyBub3QgcHJvdmlkZSBhIHJlZnNwZWMgb24gdGhlIGNvbW1hbmQgbGluZSwKK2dpdCB3aWxsIHVzZSB0aGUgZm9sbG93aW5nIHJlZnNwZWMsIHdoZXJlIGA8aGVhZD5gIGRlZmF1bHRzIHRvIGBtYXN0ZXJgLAorYW5kIGA8cmVwb3NpdG9yeT5gIGlzIHRoZSBuYW1lIG9mIHRoaXMgZmlsZQoreW91IHByb3ZpZGVkIGluIHRoZSBjb21tYW5kIGxpbmUuCiAKIC0tLS0tLS0tLS0tLQotCVVSTDogPHVybD4KLQlQdWxsOiByZWZzL2hlYWRzL21hc3Rlcjo8cmVtb3RlPgotCisJcmVmcy9oZWFkcy88aGVhZD46PHJlcG9zaXRvcnk+CiAtLS0tLS0tLS0tLS0KIAotd2hpbGUgaGF2aW5nIGA8dXJsPiM8aGVhZD5gIGlzIGVxdWl2YWxlbnQgdG8KIAotLS0tLS0tLS0tLS0tCi0JVVJMOiA8dXJsPgotCVB1bGw6IHJlZnMvaGVhZHMvPGhlYWQ+OjxyZW1vdGU+Ci0tLS0tLS0tLS0tLS0KKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzZXItbWFudWFsLnR4dCBiL0RvY3VtZW50YXRpb24vdXNlci1tYW51YWwudHh0CmluZGV4IDg2YjkxYTUuLjQ5YTRhODkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXNlci1tYW51YWwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdXNlci1tYW51YWwudHh0CkBAIC0xMjU0LDE2ICsxMjU0LDE1IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICQgZ2l0IHNob3cgOjE6ZmlsZS50eHQJIyB0aGUgZmlsZSBpbiBhIGNvbW1vbiBhbmNlc3RvciBvZiBib3RoIGJyYW5jaGVzCi0kIGdpdCBzaG93IDoyOmZpbGUudHh0CSMgdGhlIHZlcnNpb24gZnJvbSBIRUFELCBidXQgaW5jbHVkaW5nIGFueQotCQkJIyBub25jb25mbGljdGluZyBjaGFuZ2VzIGZyb20gTUVSR0VfSEVBRAotJCBnaXQgc2hvdyA6MzpmaWxlLnR4dAkjIHRoZSB2ZXJzaW9uIGZyb20gTUVSR0VfSEVBRCwgYnV0IGluY2x1ZGluZyBhbnkKLQkJCSMgbm9uY29uZmxpY3RpbmcgY2hhbmdlcyBmcm9tIEhFQUQuCiskIGdpdCBzaG93IDoyOmZpbGUudHh0CSMgdGhlIHZlcnNpb24gZnJvbSBIRUFELgorJCBnaXQgc2hvdyA6MzpmaWxlLnR4dAkjIHRoZSB2ZXJzaW9uIGZyb20gTUVSR0VfSEVBRC4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotU2luY2UgdGhlIHN0YWdlIDIgYW5kIHN0YWdlIDMgdmVyc2lvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gdXBkYXRlZCB3aXRoCi1ub25jb25mbGljdGluZyBjaGFuZ2VzLCB0aGUgb25seSByZW1haW5pbmcgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGVtIGFyZQotdGhlIGltcG9ydGFudCBvbmVzOyB0aHVzIGxpbmtnaXQ6Z2l0LWRpZmZbMV0gY2FuIHVzZSB0aGUgaW5mb3JtYXRpb24gaW4KLXRoZSBpbmRleCB0byBzaG93IG9ubHkgdGhvc2UgY29uZmxpY3RzLgorV2hlbiB5b3UgYXNrIGxpbmtnaXQ6Z2l0LWRpZmZbMV0gdG8gc2hvdyB0aGUgY29uZmxpY3RzLCBpdCBydW5zIGEKK3RocmVlLXdheSBkaWZmIGJldHdlZW4gdGhlIGNvbmZsaWN0ZWQgbWVyZ2UgcmVzdWx0cyBpbiB0aGUgd29yayB0cmVlIHdpdGgKK3N0YWdlcyAyIGFuZCAzIHRvIHNob3cgb25seSBodW5rcyB3aG9zZSBjb250ZW50cyBjb21lIGZyb20gYm90aCBzaWRlcywKK21peGVkIChpbiBvdGhlciB3b3Jkcywgd2hlbiBhIGh1bmsncyBtZXJnZSByZXN1bHRzIGNvbWUgb25seSBmcm9tIHN0YWdlIDIsCit0aGF0IHBhcnQgaXMgbm90IGNvbmZsaWN0aW5nIGFuZCBpcyBub3Qgc2hvd24uICBTYW1lIGZvciBzdGFnZSAzKS4KIAogVGhlIGRpZmYgYWJvdmUgc2hvd3MgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHdvcmtpbmctdHJlZSB2ZXJzaW9uIG9mCiBmaWxlLnR4dCBhbmQgdGhlIHN0YWdlIDIgYW5kIHN0YWdlIDMgdmVyc2lvbnMuICBTbyBpbnN0ZWFkIG9mIHByZWNlZGluZwpAQCAtMTg4MSw3ICsxODgwLDcgQEAKIAogKEZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUgbGFzdCB0d28gbGluZXMsIHNlZQogbGlua2dpdDpnaXQtdXBkYXRlLXNlcnZlci1pbmZvWzFdLCBhbmQgdGhlIGRvY3VtZW50YXRpb24KLWxpbms6aG9va3MuaHRtbFtIb29rcyB1c2VkIGJ5IGdpdF0uKQorbGlua2dpdDpnaXRob29rc1s1XVtIb29rcyB1c2VkIGJ5IGdpdF0uKQogCiBBZHZlcnRpc2UgdGhlIFVSTCBvZiBwcm9qLmdpdC4gIEFueWJvZHkgZWxzZSBzaG91bGQgdGhlbiBiZSBhYmxlIHRvCiBjbG9uZSBvciBwdWxsIGZyb20gdGhhdCBVUkwsIGZvciBleGFtcGxlIHdpdGggYSBjb21tYW5kIGxpbmUgbGlrZToKQEAgLTE5OTMsNyArMTk5Miw3IEBACiBzb2x1dGlvbiBpcyB0byByZXRyeSB0aGUgcHVzaCBhZnRlciBmaXJzdCB1cGRhdGluZyB5b3VyIHdvcmsgYnkgZWl0aGVyIGEKIHB1bGwgb3IgYSBmZXRjaCBmb2xsb3dlZCBieSBhIHJlYmFzZTsgc2VlIHRoZQogPDxzZXR0aW5nLXVwLWEtc2hhcmVkLXJlcG9zaXRvcnksbmV4dCBzZWN0aW9uPj4gYW5kCi1saW5rOmN2cy1taWdyYXRpb24uaHRtbFtnaXQgZm9yIENWUyB1c2Vyc10gZm9yIG1vcmUuCitsaW5rZ2l0OmdpdGN2cy1taWdyYXRpb25bN11bZ2l0IGZvciBDVlMgdXNlcnNdIGZvciBtb3JlLgogCiBbW3NldHRpbmctdXAtYS1zaGFyZWQtcmVwb3NpdG9yeV1dCiBTZXR0aW5nIHVwIGEgc2hhcmVkIHJlcG9zaXRvcnkKQEAgLTIwMDIsNyArMjAwMSw3IEBACiBBbm90aGVyIHdheSB0byBjb2xsYWJvcmF0ZSBpcyBieSB1c2luZyBhIG1vZGVsIHNpbWlsYXIgdG8gdGhhdAogY29tbW9ubHkgdXNlZCBpbiBDVlMsIHdoZXJlIHNldmVyYWwgZGV2ZWxvcGVycyB3aXRoIHNwZWNpYWwgcmlnaHRzCiBhbGwgcHVzaCB0byBhbmQgcHVsbCBmcm9tIGEgc2luZ2xlIHNoYXJlZCByZXBvc2l0b3J5LiAgU2VlCi1saW5rOmN2cy1taWdyYXRpb24uaHRtbFtnaXQgZm9yIENWUyB1c2Vyc10gZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8KK2xpbmtnaXQ6Z2l0Y3ZzLW1pZ3JhdGlvbls3XVtnaXQgZm9yIENWUyB1c2Vyc10gZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8KIHNldCB0aGlzIHVwLgogCiBIb3dldmVyLCB3aGlsZSB0aGVyZSBpcyBub3RoaW5nIHdyb25nIHdpdGggZ2l0J3Mgc3VwcG9ydCBmb3Igc2hhcmVkCkBAIC0yODEzLDcgKzI4MTIsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBEb24ndCBkbyB0aGlzIHVubGVzcyB5b3UncmUgc3VyZSB5b3Ugd29uJ3QgbWluZCAiZ2l0IGZldGNoIiBwb3NzaWJseQotdGhyb3dpbmcgYXdheSBjb21taXRzIG9uIG15YnJhbmNoLgordGhyb3dpbmcgYXdheSBjb21taXRzIG9uICdleGFtcGxlL21hc3RlcicuCiAKIEFsc28gbm90ZSB0aGF0IGFsbCBvZiB0aGUgYWJvdmUgY29uZmlndXJhdGlvbiBjYW4gYmUgcGVyZm9ybWVkIGJ5CiBkaXJlY3RseSBlZGl0aW5nIHRoZSBmaWxlIC5naXQvY29uZmlnIGluc3RlYWQgb2YgdXNpbmcKQEAgLTQyNTIsNyArNDI1MSwxMCBAQAogaXRzZWxmIQogCiBbW2dsb3NzYXJ5XV0KLWluY2x1ZGU6Omdsb3NzYXJ5LnR4dFtdCitHSVQgR2xvc3NhcnkKKz09PT09PT09PT09PQorCitpbmNsdWRlOjpnbG9zc2FyeS1jb250ZW50LnR4dFtdCiAKIFtbZ2l0LXF1aWNrLXN0YXJ0XV0KIEFwcGVuZGl4IEE6IEdpdCBRdWljayBSZWZlcmVuY2UKZGlmZiAtLWdpdCBhL0dJVC1WRVJTSU9OLUdFTiBiL0dJVC1WRVJTSU9OLUdFTgppbmRleCBhZjlkNzhkLi40NDVkY2EzIDEwMDc1NQotLS0gYS9HSVQtVkVSU0lPTi1HRU4KKysrIGIvR0lULVZFUlNJT04tR0VOCkBAIC0xLDcgKzEsNyBAQAogIyEvYmluL3NoCiAKIEdWRj1HSVQtVkVSU0lPTi1GSUxFCi1ERUZfVkVSPXYxLjUuNS41LkdJVAorREVGX1ZFUj12MS41LjYuNS5HSVQKIAogTEY9JwogJwpAQCAtMTEsNyArMTEsNyBAQAogaWYgdGVzdCAtZiB2ZXJzaW9uCiB0aGVuCiAJVk49JChjYXQgdmVyc2lvbikgfHwgVk49IiRERUZfVkVSIgotZWxpZiB0ZXN0IC1kIC5naXQgJiYKK2VsaWYgdGVzdCAtZCAuZ2l0IC1vIC1mIC5naXQgJiYKIAlWTj0kKGdpdCBkZXNjcmliZSAtLWFiYnJldj00IEhFQUQgMj4vZGV2L251bGwpICYmCiAJY2FzZSAiJFZOIiBpbgogCSokTEYqKSAoZXhpdCAxKSA7OwpkaWZmIC0tZ2l0IGEvSU5TVEFMTCBiL0lOU1RBTEwKaW5kZXggNmYzYmNiNC4uNGE0ZTEzZiAxMDA2NDQKLS0tIGEvSU5TVEFMTAorKysgYi9JTlNUQUxMCkBAIC0zOCw2ICszOCwxMCBAQAogICAgaGFzIGJlZW4gYWN0aXZlbHkgZGV2ZWxvcGVkIHNpbmNlIDE5OTcsIGFuZCBwZW9wbGUgaGF2ZSBtb3ZlZCBvdmVyIHRvCiAgICBncmFwaGljYWwgZmlsZSBtYW5hZ2Vycy4KIAorICAgTk9URTogQXMgb2YgZ251aXQtNC45LjIsIHRoZSBHTlUgaW50ZXJhY3RpdmUgdG9vbHMgcGFja2FnZSBoYXMgYmVlbgorICAgICAgICAgcmVuYW1lZC4gWW91IGNhbiBjb21waWxlIGdudWl0IHdpdGggdGhlIC0tZGlzYWJsZS10cmFuc2l0aW9uCisgICAgICAgICBvcHRpb24gYW5kIHRoZW4gaXQgd2lsbCBub3QgY29uZmxpY3Qgd2l0aCBnaXQuCisKICAtIFlvdSBjYW4gdXNlIGdpdCBhZnRlciBidWlsZGluZyBidXQgd2l0aG91dCBpbnN0YWxsaW5nIGlmIHlvdQogICAgd2FudGVkIHRvLiAgVmFyaW91cyBnaXQgY29tbWFuZHMgbmVlZCB0byBmaW5kIG90aGVyIGdpdAogICAgY29tbWFuZHMgYW5kIHNjcmlwdHMgdG8gZG8gdGhlaXIgd29yaywgc28geW91IHdvdWxkIG5lZWQgdG8KQEAgLTYzLDEwICs2NywxMCBAQAogCSAgdGhhdCBjb21lIHdpdGggZ2l0IChnaXQgaW5jbHVkZXMgdGhlIG9uZSBmcm9tIE1vemlsbGEsIGFuZCBoYXMKIAkgIGl0cyBvd24gUG93ZXJQQyBhbmQgQVJNIG9wdGltaXplZCBvbmVzIHRvbyAtIHNlZSB0aGUgTWFrZWZpbGUpLgogCi0JLSAibGliY3VybCIgYW5kICJjdXJsIiBleGVjdXRhYmxlLiAgZ2l0LWh0dHAtZmV0Y2ggYW5kCi0JICBnaXQtZmV0Y2ggdXNlIHRoZW0uICBJZiB5b3UgZG8gbm90IHVzZSBodHRwCi0JICB0cmFuc2ZlciwgeW91IGFyZSBwcm9iYWJseSBPSyBpZiB5b3UgZG8gbm90IGhhdmUKLQkgIHRoZW0uCisJLSBsaWJjdXJsIGxpYnJhcnk7IGdpdC1odHRwLWZldGNoIGFuZCBnaXQtZmV0Y2ggdXNlIHRoZW0uICBZb3UKKwkgIG1pZ2h0IGFsc28gd2FudCB0aGUgImN1cmwiIGV4ZWN1dGFibGUgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KKwkgIElmIHlvdSBkbyBub3QgdXNlIGh0dHAgdHJhbnNmZXIsIHlvdSBhcmUgcHJvYmFibHkgT0sgaWYgeW91CisJICBkbyBub3QgaGF2ZSB0aGVtLgogCiAJLSBleHBhdCBsaWJyYXJ5OyBnaXQtaHR0cC1wdXNoIHVzZXMgaXQgZm9yIHJlbW90ZSBsb2NrCiAJICBtYW5hZ2VtZW50IG92ZXIgREFWLiAgU2ltaWxhciB0byAiY3VybCIgYWJvdmUsIHRoaXMgaXMgb3B0aW9uYWwuCkBAIC03OSw5ICs4Myw2IEBACiAJLSAicGVybCIgYW5kIFBPU0lYLWNvbXBsaWFudCBzaGVsbHMgYXJlIG5lZWRlZCB0byB1c2UgbW9zdCBvZgogCSAgdGhlIGJhcmVib25lIFBvcmNlbGFpbmlzaCBzY3JpcHRzLgogCi0JLSAiY3BpbyIgaXMgdXNlZCBieSBnaXQtY2xvbmUgd2hlbiBkb2luZyBhIGxvY2FsIChwb3NzaWJseQotCSAgaGFyZGxpbmtlZCkgY2xvbmUuCi0KICAtIFNvbWUgcGxhdGZvcm0gc3BlY2lmaWMgaXNzdWVzIGFyZSBkZWFsdCB3aXRoIE1ha2VmaWxlIHJ1bGVzLAogICAgYnV0IGRlcGVuZGluZyBvbiB5b3VyIHNwZWNpZmljIGluc3RhbGxhdGlvbiwgeW91IG1heSBub3QKICAgIGhhdmUgYWxsIHRoZSBsaWJyYXJpZXMvdG9vbHMgbmVlZGVkLCBvciB5b3UgbWF5IGhhdmUKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggN2M3MGIwMC4uZjEzMTg0YiAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTEzLDcgKzEzLDcgQEAKICMgRGVmaW5lIE5PX09QRU5TU0wgZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgeW91IGRvIG5vdCBoYXZlIE9wZW5TU0wuCiAjIFRoaXMgYWxzbyBpbXBsaWVzIE1PWklMTEFfU0hBMS4KICMKLSMgRGVmaW5lIE5PX0NVUkwgaWYgeW91IGRvIG5vdCBoYXZlIGN1cmwgaW5zdGFsbGVkLiAgZ2l0LWh0dHAtcHVsbCBhbmQKKyMgRGVmaW5lIE5PX0NVUkwgaWYgeW91IGRvIG5vdCBoYXZlIGxpYmN1cmwgaW5zdGFsbGVkLiAgZ2l0LWh0dHAtcHVsbCBhbmQKICMgZ2l0LWh0dHAtcHVzaCBhcmUgbm90IGJ1aWx0LCBhbmQgeW91IGNhbm5vdCB1c2UgaHR0cDovLyBhbmQgaHR0cHM6Ly8KICMgdHJhbnNwb3J0cy4KICMKQEAgLTE4OSw2ICsxODksNyBAQAogCiAjIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgZ2l0d2ViCiBHSVRXRUJfQ09ORklHID0gZ2l0d2ViX2NvbmZpZy5wZXJsCitHSVRXRUJfQ09ORklHX1NZU1RFTSA9IC9ldGMvZ2l0d2ViLmNvbmYKIEdJVFdFQl9IT01FX0xJTktfU1RSID0gcHJvamVjdHMKIEdJVFdFQl9TSVRFTkFNRSA9CiBHSVRXRUJfUFJPSkVDVFJPT1QgPSAvcHViL2dpdApAQCAtMjM0LDcgKzIzNSw2IEBACiAKIFNDUklQVF9TSCArPSBnaXQtYW0uc2gKIFNDUklQVF9TSCArPSBnaXQtYmlzZWN0LnNoCi1TQ1JJUFRfU0ggKz0gZ2l0LWNsb25lLnNoCiBTQ1JJUFRfU0ggKz0gZ2l0LWZpbHRlci1icmFuY2guc2gKIFNDUklQVF9TSCArPSBnaXQtbG9zdC1mb3VuZC5zaAogU0NSSVBUX1NIICs9IGdpdC1tZXJnZS1vY3RvcHVzLnNoCkBAIC0zNDUsNiArMzQ1LDcgQEAKIExJQl9IICs9IGRpci5oCiBMSUJfSCArPSBmc2NrLmgKIExJQl9IICs9IGdpdC1jb21wYXQtdXRpbC5oCitMSUJfSCArPSBncmFwaC5oCiBMSUJfSCArPSBncmVwLmgKIExJQl9IICs9IGhhc2guaAogTElCX0ggKz0gbGlzdC1vYmplY3RzLmgKQEAgLTM2NSw2ICszNjYsNyBAQAogTElCX0ggKz0gcmVtb3RlLmgKIExJQl9IICs9IHJldmlzaW9uLmgKIExJQl9IICs9IHJ1bi1jb21tYW5kLmgKK0xJQl9IICs9IHNoYTEtbG9va3VwLmgKIExJQl9IICs9IHNpZGViYW5kLmgKIExJQl9IICs9IHN0cmJ1Zi5oCiBMSUJfSCArPSB0YWcuaApAQCAtMzczLDYgKzM3NSw3IEBACiBMSUJfSCArPSB0cmVlLXdhbGsuaAogTElCX0ggKz0gdW5wYWNrLXRyZWVzLmgKIExJQl9IICs9IHV0ZjguaAorTElCX0ggKz0gd3Qtc3RhdHVzLmgKIAogTElCX09CSlMgKz0gYWxpYXMubwogTElCX09CSlMgKz0gYWxsb2MubwpAQCAtNDAyLDYgKzQwNSw3IEBACiBMSUJfT0JKUyArPSBkaWZmY29yZS1waWNrYXhlLm8KIExJQl9PQkpTICs9IGRpZmZjb3JlLXJlbmFtZS5vCiBMSUJfT0JKUyArPSBkaWZmLWRlbHRhLm8KK0xJQl9PQkpTICs9IGRpZmYtbm8taW5kZXgubwogTElCX09CSlMgKz0gZGlmZi1saWIubwogTElCX09CSlMgKz0gZGlmZi5vCiBMSUJfT0JKUyArPSBkaXIubwpAQCAtNDA5LDYgKzQxMyw3IEBACiBMSUJfT0JKUyArPSBlbnZpcm9ubWVudC5vCiBMSUJfT0JKUyArPSBleGVjX2NtZC5vCiBMSUJfT0JKUyArPSBmc2NrLm8KK0xJQl9PQkpTICs9IGdyYXBoLm8KIExJQl9PQkpTICs9IGdyZXAubwogTElCX09CSlMgKz0gaGFzaC5vCiBMSUJfT0JKUyArPSBoZWxwLm8KQEAgLTQyMSw2ICs0MjYsNyBAQAogTElCX09CSlMgKz0gbWFpbG1hcC5vCiBMSUJfT0JKUyArPSBtYXRjaC10cmVlcy5vCiBMSUJfT0JKUyArPSBtZXJnZS1maWxlLm8KK0xJQl9PQkpTICs9IG5hbWUtaGFzaC5vCiBMSUJfT0JKUyArPSBvYmplY3QubwogTElCX09CSlMgKz0gcGFjay1jaGVjay5vCiBMSUJfT0JKUyArPSBwYWNrLXJldmluZGV4Lm8KQEAgLTQ0NSw2ICs0NTEsNyBAQAogTElCX09CSlMgKz0gc2VydmVyLWluZm8ubwogTElCX09CSlMgKz0gc2V0dXAubwogTElCX09CSlMgKz0gc2hhMV9maWxlLm8KK0xJQl9PQkpTICs9IHNoYTEtbG9va3VwLm8KIExJQl9PQkpTICs9IHNoYTFfbmFtZS5vCiBMSUJfT0JKUyArPSBzaGFsbG93Lm8KIExJQl9PQkpTICs9IHNpZGViYW5kLm8KQEAgLTQ3OCw2ICs0ODUsNyBAQAogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tY2hlY2tvdXQtaW5kZXgubwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tY2hlY2tvdXQubwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tY2xlYW4ubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tY2xvbmUubwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tY29tbWl0LXRyZWUubwogQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4tY29tbWl0Lm8KIEJVSUxUSU5fT0JKUyArPSBidWlsdGluLWNvbmZpZy5vCkBAIC01NTYsNiArNTY0LDQ1IEBACiBpZmVxICgkKHVuYW1lX1MpLEdOVS9rRnJlZUJTRCkKIAlOT19TVFJMQ1BZID0gWWVzUGxlYXNlCiBlbmRpZgoraWZlcSAoJCh1bmFtZV9TKSxVbml4V2FyZSkKKwlDQyA9IGNjCisJTkVFRFNfU09DS0VUID0gWWVzUGxlYXNlCisJTkVFRFNfTlNMID0gWWVzUGxlYXNlCisJTkVFRFNfU1NMX1dJVEhfQ1JZUFRPID0gWWVzUGxlYXNlCisJTkVFRFNfTElCSUNPTlYgPSBZZXNQbGVhc2UKKwlTSEVMTF9QQVRIID0gL3Vzci9sb2NhbC9iaW4vYmFzaAorCU5PX0lQVjYgPSBZZXNQbGVhc2UKKwlOT19IU1RSRVJST1IgPSBZZXNQbGVhc2UKKwlCQVNJQ19DRkxBR1MgKz0gLUt0aHJlYWQKKwlCQVNJQ19DRkxBR1MgKz0gLUkvdXNyL2xvY2FsL2luY2x1ZGUKKwlCQVNJQ19MREZMQUdTICs9IC1ML3Vzci9sb2NhbC9saWIKKwlJTlNUQUxMID0gZ2luc3RhbGwKKwlUQVIgPSBndGFyCisJTk9fU1RSQ0FTRVNUUiA9IFllc1BsZWFzZQorCU5PX01FTU1FTSA9IFllc1BsZWFzZQorZW5kaWYKK2lmZXEgKCQodW5hbWVfUyksU0NPX1NWKQorCWlmZXEgKCQodW5hbWVfUiksMy4yKQorCQlDRkxBR1MgPSAtTzIKKwllbmRpZgorCWlmZXEgKCQodW5hbWVfUiksNSkKKwkJQ0MgPSBjYworCQlCQVNJQ19DRkxBR1MgKz0gLUt0aHJlYWQKKwllbmRpZgorCU5FRURTX1NPQ0tFVCA9IFllc1BsZWFzZQorCU5FRURTX05TTCA9IFllc1BsZWFzZQorCU5FRURTX1NTTF9XSVRIX0NSWVBUTyA9IFllc1BsZWFzZQorCU5FRURTX0xJQklDT05WID0gWWVzUGxlYXNlCisJU0hFTExfUEFUSCA9IC91c3IvYmluL2Jhc2gKKwlOT19JUFY2ID0gWWVzUGxlYXNlCisJTk9fSFNUUkVSUk9SID0gWWVzUGxlYXNlCisJQkFTSUNfQ0ZMQUdTICs9IC1JL3Vzci9sb2NhbC9pbmNsdWRlCisJQkFTSUNfTERGTEFHUyArPSAtTC91c3IvbG9jYWwvbGliCisJTk9fU1RSQ0FTRVNUUiA9IFllc1BsZWFzZQorCU5PX01FTU1FTSA9IFllc1BsZWFzZQorCUlOU1RBTEwgPSBnaW5zdGFsbAorCVRBUiA9IGd0YXIKK2VuZGlmCiBpZmVxICgkKHVuYW1lX1MpLERhcndpbikKIAlORUVEU19TU0xfV0lUSF9DUllQVE8gPSBZZXNQbGVhc2UKIAlORUVEU19MSUJJQ09OViA9IFllc1BsZWFzZQpAQCAtNjMyLDggKzY3OSwxMiBAQAogaWZlcSAoJCh1bmFtZV9TKSxBSVgpCiAJTk9fU1RSQ0FTRVNUUj1ZZXNQbGVhc2UKIAlOT19NRU1NRU0gPSBZZXNQbGVhc2UKKwlOT19NS0RURU1QID0gWWVzUGxlYXNlCiAJTk9fU1RSTENQWSA9IFllc1BsZWFzZQorCUZSRUFEX1JFQURTX0RJUkVDVE9SSUVTID0gVW5mb3J0dW5hdGVseVllcworCUlOVEVSTkFMX1FTT1JUID0gVW5mb3J0dW5hdGVseVllcwogCU5FRURTX0xJQklDT05WPVllc1BsZWFzZQorCUJBU0lDX0NGTEFHUyArPSAtRF9MQVJHRV9GSUxFUwogZW5kaWYKIGlmZXEgKCQodW5hbWVfUyksR05VKQogCSMgR05VL0h1cmQKQEAgLTEwMzQsNiArMTA4NSw3IEBACiAJICAgIC1lICdzfCsrR0lUX1ZFUlNJT04rK3wkKEdJVF9WRVJTSU9OKXxnJyBcCiAJICAgIC1lICdzfCsrR0lUX0JJTkRJUisrfCQoYmluZGlyKXxnJyBcCiAJICAgIC1lICdzfCsrR0lUV0VCX0NPTkZJRysrfCQoR0lUV0VCX0NPTkZJRyl8ZycgXAorCSAgICAtZSAnc3wrK0dJVFdFQl9DT05GSUdfU1lTVEVNKyt8JChHSVRXRUJfQ09ORklHX1NZU1RFTSl8ZycgXAogCSAgICAtZSAnc3wrK0dJVFdFQl9IT01FX0xJTktfU1RSKyt8JChHSVRXRUJfSE9NRV9MSU5LX1NUUil8ZycgXAogCSAgICAtZSAnc3wrK0dJVFdFQl9TSVRFTkFNRSsrfCQoR0lUV0VCX1NJVEVOQU1FKXxnJyBcCiAJICAgIC1lICdzfCsrR0lUV0VCX1BST0pFQ1RST09UKyt8JChHSVRXRUJfUFJPSkVDVFJPT1QpfGcnIFwKQEAgLTExNTgsOCArMTIxMCwxMiBAQAogCQllY2hvICIkJEZMQUdTIiA+R0lULUNGTEFHUzsgXAogICAgICAgICAgICAgZmkKIAorIyBXZSBuZWVkIHRvIGFwcGx5IHNxIHR3aWNlLCBvbmNlIHRvIHByb3RlY3QgZnJvbSB0aGUgc2hlbGwKKyMgdGhhdCBydW5zIEdJVC1CVUlMRC1PUFRJT05TLCBhbmQgdGhlbiBhZ2FpbiB0byBwcm90ZWN0IGl0CisjIGFuZCB0aGUgZmlyc3QgbGV2ZWwgcXVvdGluZyBmcm9tIHRoZSBzaGVsbCB0aGF0IHJ1bnMgImVjaG8iLgogR0lULUJVSUxELU9QVElPTlM6IC5GT1JDRS1HSVQtQlVJTEQtT1BUSU9OUwotCUBlY2hvIFNIRUxMX1BBVEg9XCcnJChTSEVMTF9QQVRIX1NRKSdcJyA+JEAKKwlAZWNobyBTSEVMTF9QQVRIPVwnJyQoc3Vic3QgJywnXCcnLCQoU0hFTExfUEFUSF9TUSkpJ1wnID4kQAorCUBlY2hvIFRBUj1cJyckKHN1YnN0ICcsJ1wnJywkKHN1YnN0ICcsJ1wnJywkKFRBUikpKSdcJyA+PiRACiAKICMjIyBEZXRlY3QgVGNrL1RrIGludGVycHJldGVyIHBhdGggY2hhbmdlcwogaWZuZGVmIE5PX1RDTFRLCkBAIC0xMzYwLDYgKzE0MTYsMTQgQEAKIAkJZG9jdW1lbnRlZCxnaXRtb2R1bGVzIHwgXAogCQlkb2N1bWVudGVkLGdpdGNsaSB8IFwKIAkJZG9jdW1lbnRlZCxnaXQtdG9vbHMgfCBcCisJCWRvY3VtZW50ZWQsZ2l0Y29yZS10dXRvcmlhbCB8IFwKKwkJZG9jdW1lbnRlZCxnaXRjdnMtbWlncmF0aW9uIHwgXAorCQlkb2N1bWVudGVkLGdpdGRpZmZjb3JlIHwgXAorCQlkb2N1bWVudGVkLGdpdGdsb3NzYXJ5IHwgXAorCQlkb2N1bWVudGVkLGdpdGhvb2tzIHwgXAorCQlkb2N1bWVudGVkLGdpdHJlcG9zaXRvcnktbGF5b3V0IHwgXAorCQlkb2N1bWVudGVkLGdpdHR1dG9yaWFsIHwgXAorCQlkb2N1bWVudGVkLGdpdHR1dG9yaWFsLTIgfCBcCiAJCXNlbnRpbmVsLG5vdCxtYXRjaGluZyxpcyxvayApIGNvbnRpbnVlIDs7IFwKIAkJZXNhYzsgXAogCQljYXNlICIgJChBTExfUFJPR1JBTVMpICQoQlVJTFRfSU5TKSBnaXQgZ2l0ayAiIGluIFwKZGlmZiAtLWdpdCBhL1JlbE5vdGVzIGIvUmVsTm90ZXMKaW5kZXggZDk0ZTc0Mi4uNmNhMWQ1YiAxMjAwMDAKLS0tIGEvUmVsTm90ZXMKKysrIGIvUmVsTm90ZXMKQEAgLTEgKzEgQEAKLURvY3VtZW50YXRpb24vUmVsTm90ZXMtMS41LjUuNi50eHQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitEb2N1bWVudGF0aW9uL1JlbE5vdGVzLTEuNS42LjYudHh0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYWxpYXMuYyBiL2FsaWFzLmMKaW5kZXggMTE2Y2FjOC4uOTk1ZjNlNiAxMDA2NDQKLS0tIGEvYWxpYXMuYworKysgYi9hbGlhcy5jCkBAIC0yLDcgKzIsOCBAQAogCiBzdGF0aWMgY29uc3QgY2hhciAqYWxpYXNfa2V5Owogc3RhdGljIGNoYXIgKmFsaWFzX3ZhbDsKLXN0YXRpYyBpbnQgYWxpYXNfbG9va3VwX2NiKGNvbnN0IGNoYXIgKmssIGNvbnN0IGNoYXIgKnYpCisKK3N0YXRpYyBpbnQgYWxpYXNfbG9va3VwX2NiKGNvbnN0IGNoYXIgKmssIGNvbnN0IGNoYXIgKnYsIHZvaWQgKmNiKQogewogCWlmICghcHJlZml4Y21wKGssICJhbGlhcy4iKSAmJiAhc3RyY21wKGsrNiwgYWxpYXNfa2V5KSkgewogCQlpZiAoIXYpCkBAIC0xNyw2ICsxOCw2IEBACiB7CiAJYWxpYXNfa2V5ID0gYWxpYXM7CiAJYWxpYXNfdmFsID0gTlVMTDsKLQlnaXRfY29uZmlnKGFsaWFzX2xvb2t1cF9jYik7CisJZ2l0X2NvbmZpZyhhbGlhc19sb29rdXBfY2IsIE5VTEwpOwogCXJldHVybiBhbGlhc192YWw7CiB9CmRpZmYgLS1naXQgYS9hcmNoaXZlLXRhci5jIGIvYXJjaGl2ZS10YXIuYwppbmRleCA0YWRkODAyLi5kNzU5OGY5IDEwMDY0NAotLS0gYS9hcmNoaXZlLXRhci5jCisrKyBiL2FyY2hpdmUtdGFyLmMKQEAgLTIyMCw3ICsyMjAsNyBAQAogCXN0cmJ1Zl9yZWxlYXNlKCZleHRfaGVhZGVyKTsKIH0KIAotc3RhdGljIGludCBnaXRfdGFyX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQorc3RhdGljIGludCBnaXRfdGFyX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKIHsKIAlpZiAoIXN0cmNtcCh2YXIsICJ0YXIudW1hc2siKSkgewogCQlpZiAodmFsdWUgJiYgIXN0cmNtcCh2YWx1ZSwgInVzZXIiKSkgewpAQCAtMjMxLDcgKzIzMSw3IEBACiAJCX0KIAkJcmV0dXJuIDA7CiAJfQotCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSk7CisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CiB9CiAKIHN0YXRpYyBpbnQgd3JpdGVfdGFyX2VudHJ5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCkBAIC0yNjgsNyArMjY4LDcgQEAKIHsKIAlpbnQgcGxlbiA9IGFyZ3MtPmJhc2UgPyBzdHJsZW4oYXJncy0+YmFzZSkgOiAwOwogCi0JZ2l0X2NvbmZpZyhnaXRfdGFyX2NvbmZpZyk7CisJZ2l0X2NvbmZpZyhnaXRfdGFyX2NvbmZpZywgTlVMTCk7CiAKIAlhcmNoaXZlX3RpbWUgPSBhcmdzLT50aW1lOwogCXZlcmJvc2UgPSBhcmdzLT52ZXJib3NlOwpkaWZmIC0tZ2l0IGEvYXR0ci5jIGIvYXR0ci5jCmluZGV4IDFhMTVmYWQuLjE3ZjZhNGQgMTAwNjQ0Ci0tLSBhL2F0dHIuYworKysgYi9hdHRyLmMKQEAgLTQzOCwxMSArNDM4LDEzIEBACiAJCWVsZW0tPnByZXYgPSBhdHRyX3N0YWNrOwogCQlhdHRyX3N0YWNrID0gZWxlbTsKIAotCQllbGVtID0gcmVhZF9hdHRyKEdJVEFUVFJJQlVURVNfRklMRSwgMSk7Ci0JCWVsZW0tPm9yaWdpbiA9IHN0cmR1cCgiIik7Ci0JCWVsZW0tPnByZXYgPSBhdHRyX3N0YWNrOwotCQlhdHRyX3N0YWNrID0gZWxlbTsKLQkJZGVidWdfcHVzaChlbGVtKTsKKwkJaWYgKCFpc19iYXJlX3JlcG9zaXRvcnkoKSkgeworCQkJZWxlbSA9IHJlYWRfYXR0cihHSVRBVFRSSUJVVEVTX0ZJTEUsIDEpOworCQkJZWxlbS0+b3JpZ2luID0gc3RyZHVwKCIiKTsKKwkJCWVsZW0tPnByZXYgPSBhdHRyX3N0YWNrOworCQkJYXR0cl9zdGFjayA9IGVsZW07CisJCQlkZWJ1Z19wdXNoKGVsZW0pOworCQl9CiAKIAkJZWxlbSA9IHJlYWRfYXR0cl9mcm9tX2ZpbGUoZ2l0X3BhdGgoSU5GT0FUVFJJQlVURVNfRklMRSksIDEpOwogCQlpZiAoIWVsZW0pCkBAIC00NTcsNyArNDU5LDkgQEAKIHsKIAlzdHJ1Y3QgYXR0cl9zdGFjayAqZWxlbSwgKmluZm87CiAJaW50IGxlbjsKLQljaGFyIHBhdGhidWZbUEFUSF9NQVhdOworCXN0cnVjdCBzdHJidWYgcGF0aGJ1ZjsKKworCXN0cmJ1Zl9pbml0KCZwYXRoYnVmLCBkaXJsZW4rMitzdHJsZW4oR0lUQVRUUklCVVRFU19GSUxFKSk7CiAKIAkvKgogCSAqIEF0IHRoZSBib3R0b20gb2YgdGhlIGF0dHJpYnV0ZSBzdGFjayBpcyB0aGUgYnVpbHQtaW4KQEAgLTUwMSwyMiArNTA1LDI1IEBACiAJLyoKIAkgKiBSZWFkIGZyb20gcGFyZW50IGRpcmVjdG9yaWVzIGFuZCBwdXNoIHRoZW0gZG93bgogCSAqLwotCXdoaWxlICgxKSB7Ci0JCWNoYXIgKmNwOworCWlmICghaXNfYmFyZV9yZXBvc2l0b3J5KCkpIHsKKwkJd2hpbGUgKDEpIHsKKwkJCWNoYXIgKmNwOwogCi0JCWxlbiA9IHN0cmxlbihhdHRyX3N0YWNrLT5vcmlnaW4pOwotCQlpZiAoZGlybGVuIDw9IGxlbikKLQkJCWJyZWFrOwotCQltZW1jcHkocGF0aGJ1ZiwgcGF0aCwgZGlybGVuKTsKLQkJbWVtY3B5KHBhdGhidWYgKyBkaXJsZW4sICIvIiwgMik7Ci0JCWNwID0gc3RyY2hyKHBhdGhidWYgKyBsZW4gKyAxLCAnLycpOwotCQlzdHJjcHkoY3AgKyAxLCBHSVRBVFRSSUJVVEVTX0ZJTEUpOwotCQllbGVtID0gcmVhZF9hdHRyKHBhdGhidWYsIDApOwotCQkqY3AgPSAnXDAnOwotCQllbGVtLT5vcmlnaW4gPSBzdHJkdXAocGF0aGJ1Zik7Ci0JCWVsZW0tPnByZXYgPSBhdHRyX3N0YWNrOwotCQlhdHRyX3N0YWNrID0gZWxlbTsKLQkJZGVidWdfcHVzaChlbGVtKTsKKwkJCWxlbiA9IHN0cmxlbihhdHRyX3N0YWNrLT5vcmlnaW4pOworCQkJaWYgKGRpcmxlbiA8PSBsZW4pCisJCQkJYnJlYWs7CisJCQlzdHJidWZfcmVzZXQoJnBhdGhidWYpOworCQkJc3RyYnVmX2FkZCgmcGF0aGJ1ZiwgcGF0aCwgZGlybGVuKTsKKwkJCXN0cmJ1Zl9hZGRjaCgmcGF0aGJ1ZiwgJy8nKTsKKwkJCWNwID0gc3RyY2hyKHBhdGhidWYuYnVmICsgbGVuICsgMSwgJy8nKTsKKwkJCXN0cmNweShjcCArIDEsIEdJVEFUVFJJQlVURVNfRklMRSk7CisJCQllbGVtID0gcmVhZF9hdHRyKHBhdGhidWYuYnVmLCAwKTsKKwkJCSpjcCA9ICdcMCc7CisJCQllbGVtLT5vcmlnaW4gPSBzdHJkdXAocGF0aGJ1Zi5idWYpOworCQkJZWxlbS0+cHJldiA9IGF0dHJfc3RhY2s7CisJCQlhdHRyX3N0YWNrID0gZWxlbTsKKwkJCWRlYnVnX3B1c2goZWxlbSk7CisJCX0KIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYnJhbmNoLmMgYi9icmFuY2guYwppbmRleCBkYWY4NjJlLi41NmU5NDkyIDEwMDY0NAotLS0gYS9icmFuY2guYworKysgYi9icmFuY2guYwpAQCAtMzIsNiArMzIsMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzaG91bGRfc2V0dXBfcmViYXNlKGNvbnN0IHN0cnVjdCB0cmFja2luZyAqdHJhY2tpbmcpCit7CisJc3dpdGNoIChhdXRvcmViYXNlKSB7CisJY2FzZSBBVVRPUkVCQVNFX05FVkVSOgorCQlyZXR1cm4gMDsKKwljYXNlIEFVVE9SRUJBU0VfTE9DQUw6CisJCXJldHVybiB0cmFja2luZy0+cmVtb3RlID09IE5VTEw7CisJY2FzZSBBVVRPUkVCQVNFX1JFTU9URToKKwkJcmV0dXJuIHRyYWNraW5nLT5yZW1vdGUgIT0gTlVMTDsKKwljYXNlIEFVVE9SRUJBU0VfQUxXQVlTOgorCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBUaGlzIGlzIGNhbGxlZCB3aGVuIG5ld19yZWYgaXMgYnJhbmNoZWQgb2ZmIG9mIG9yaWdfcmVmLCBhbmQgdHJpZXMKICAqIHRvIGluZmVyIHRoZSBzZXR0aW5ncyBmb3IgYnJhbmNoLjxuZXdfcmVmPi57cmVtb3RlLG1lcmdlfSBmcm9tIHRoZQpAQCAtNjksOSArODQsMTQgQEAKIAlnaXRfY29uZmlnX3NldChrZXksIHRyYWNraW5nLnJlbW90ZSA/ICB0cmFja2luZy5yZW1vdGUgOiAiLiIpOwogCXNwcmludGYoa2V5LCAiYnJhbmNoLiVzLm1lcmdlIiwgbmV3X3JlZik7CiAJZ2l0X2NvbmZpZ19zZXQoa2V5LCB0cmFja2luZy5zcmMgPyB0cmFja2luZy5zcmMgOiBvcmlnX3JlZik7Ci0JZnJlZSh0cmFja2luZy5zcmMpOwogCXByaW50ZigiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayAlcyBicmFuY2ggJXMuXG4iLCBuZXdfcmVmLAogCQl0cmFja2luZy5yZW1vdGUgPyAicmVtb3RlIiA6ICJsb2NhbCIsIG9yaWdfcmVmKTsKKwlpZiAoc2hvdWxkX3NldHVwX3JlYmFzZSgmdHJhY2tpbmcpKSB7CisJCXNwcmludGYoa2V5LCAiYnJhbmNoLiVzLnJlYmFzZSIsIG5ld19yZWYpOworCQlnaXRfY29uZmlnX3NldChrZXksICJ0cnVlIik7CisJCXByaW50ZigiVGhpcyBicmFuY2ggd2lsbCByZWJhc2Ugb24gcHVsbC5cbiIpOworCX0KKwlmcmVlKHRyYWNraW5nLnNyYyk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2J1aWx0aW4tYWRkLmMgYi9idWlsdGluLWFkZC5jCmluZGV4IDRhOTFlM2UuLjk5MzBjZjUgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tYWRkLmMKKysrIGIvYnVpbHRpbi1hZGQuYwpAQCAtNzksMTIgKzc5LDE4IEBACiAJCXBydW5lX2RpcmVjdG9yeShkaXIsIHBhdGhzcGVjLCBiYXNlbGVuKTsKIH0KIAorc3RydWN0IHVwZGF0ZV9jYWxsYmFja19kYXRhCit7CisJaW50IGZsYWdzOworCWludCBhZGRfZXJyb3JzOworfTsKKwogc3RhdGljIHZvaWQgdXBkYXRlX2NhbGxiYWNrKHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSwKIAkJCSAgICBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQsIHZvaWQgKmNiZGF0YSkKIHsKLQlpbnQgaSwgdmVyYm9zZTsKKwlpbnQgaTsKKwlzdHJ1Y3QgdXBkYXRlX2NhbGxiYWNrX2RhdGEgKmRhdGEgPSBjYmRhdGE7CiAKLQl2ZXJib3NlID0gKigoaW50ICopY2JkYXRhKTsKIAlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgewogCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IHEtPnF1ZXVlW2ldOwogCQljb25zdCBjaGFyICpwYXRoID0gcC0+b25lLT5wYXRoOwpAQCAtOTQsMjcgKzEwMCwzNiBAQAogCQljYXNlIERJRkZfU1RBVFVTX1VOTUVSR0VEOgogCQljYXNlIERJRkZfU1RBVFVTX01PRElGSUVEOgogCQljYXNlIERJRkZfU1RBVFVTX1RZUEVfQ0hBTkdFRDoKLQkJCWFkZF9maWxlX3RvX2NhY2hlKHBhdGgsIHZlcmJvc2UpOworCQkJaWYgKGFkZF9maWxlX3RvX2NhY2hlKHBhdGgsIGRhdGEtPmZsYWdzKSkgeworCQkJCWlmICghKGRhdGEtPmZsYWdzICYgQUREX0NBQ0hFX0lHTk9SRV9FUlJPUlMpKQorCQkJCQlkaWUoInVwZGF0aW5nIGZpbGVzIGZhaWxlZCIpOworCQkJCWRhdGEtPmFkZF9lcnJvcnMrKzsKKwkJCX0KIAkJCWJyZWFrOwogCQljYXNlIERJRkZfU1RBVFVTX0RFTEVURUQ6Ci0JCQlyZW1vdmVfZmlsZV9mcm9tX2NhY2hlKHBhdGgpOwotCQkJaWYgKHZlcmJvc2UpCisJCQlpZiAoIShkYXRhLT5mbGFncyAmIEFERF9DQUNIRV9QUkVURU5EKSkKKwkJCQlyZW1vdmVfZmlsZV9mcm9tX2NhY2hlKHBhdGgpOworCQkJaWYgKGRhdGEtPmZsYWdzICYgKEFERF9DQUNIRV9QUkVURU5EfEFERF9DQUNIRV9WRVJCT1NFKSkKIAkJCQlwcmludGYoInJlbW92ZSAnJXMnXG4iLCBwYXRoKTsKIAkJCWJyZWFrOwogCQl9CiAJfQogfQogCi12b2lkIGFkZF9maWxlc190b19jYWNoZShpbnQgdmVyYm9zZSwgY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICoqcGF0aHNwZWMpCitpbnQgYWRkX2ZpbGVzX3RvX2NhY2hlKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqKnBhdGhzcGVjLCBpbnQgZmxhZ3MpCiB7CisJc3RydWN0IHVwZGF0ZV9jYWxsYmFja19kYXRhIGRhdGE7CiAJc3RydWN0IHJldl9pbmZvIHJldjsKIAlpbml0X3JldmlzaW9ucygmcmV2LCBwcmVmaXgpOwogCXNldHVwX3JldmlzaW9ucygwLCBOVUxMLCAmcmV2LCBOVUxMKTsKIAlyZXYucHJ1bmVfZGF0YSA9IHBhdGhzcGVjOwogCXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9DQUxMQkFDSzsKIAlyZXYuZGlmZm9wdC5mb3JtYXRfY2FsbGJhY2sgPSB1cGRhdGVfY2FsbGJhY2s7Ci0JcmV2LmRpZmZvcHQuZm9ybWF0X2NhbGxiYWNrX2RhdGEgPSAmdmVyYm9zZTsKKwlkYXRhLmZsYWdzID0gZmxhZ3M7CisJZGF0YS5hZGRfZXJyb3JzID0gMDsKKwlyZXYuZGlmZm9wdC5mb3JtYXRfY2FsbGJhY2tfZGF0YSA9ICZkYXRhOwogCXJ1bl9kaWZmX2ZpbGVzKCZyZXYsIERJRkZfUkFDWV9JU19NT0RJRklFRCk7CisJcmV0dXJuICEhZGF0YS5hZGRfZXJyb3JzOwogfQogCiBzdGF0aWMgdm9pZCByZWZyZXNoKGludCB2ZXJib3NlLCBjb25zdCBjaGFyICoqcGF0aHNwZWMpCkBAIC0xNzcsNiArMTkyLDcgQEAKICJUaGUgZm9sbG93aW5nIHBhdGhzIGFyZSBpZ25vcmVkIGJ5IG9uZSBvZiB5b3VyIC5naXRpZ25vcmUgZmlsZXM6XG4iOwogCiBzdGF0aWMgaW50IHZlcmJvc2UgPSAwLCBzaG93X29ubHkgPSAwLCBpZ25vcmVkX3RvbyA9IDAsIHJlZnJlc2hfb25seSA9IDA7CitzdGF0aWMgaW50IGlnbm9yZV9hZGRfZXJyb3JzOwogCiBzdGF0aWMgc3RydWN0IG9wdGlvbiBidWlsdGluX2FkZF9vcHRpb25zW10gPSB7CiAJT1BUX19EUllfUlVOKCZzaG93X29ubHkpLApAQCAtMTg0LDE3ICsyMDAsMjkgQEAKIAlPUFRfR1JPVVAoIiIpLAogCU9QVF9CT09MRUFOKCdpJywgImludGVyYWN0aXZlIiwgJmFkZF9pbnRlcmFjdGl2ZSwgImludGVyYWN0aXZlIHBpY2tpbmciKSwKIAlPUFRfQk9PTEVBTigncCcsICJwYXRjaCIsICZwYXRjaF9pbnRlcmFjdGl2ZSwgImludGVyYWN0aXZlIHBhdGNoaW5nIiksCi0JT1BUX0JPT0xFQU4oJ2YnLCBOVUxMLCAmaWdub3JlZF90b28sICJhbGxvdyBhZGRpbmcgb3RoZXJ3aXNlIGlnbm9yZWQgZmlsZXMiKSwKLQlPUFRfQk9PTEVBTigndScsIE5VTEwsICZ0YWtlX3dvcmt0cmVlX2NoYW5nZXMsICJ1cGRhdGUgdHJhY2tlZCBmaWxlcyIpLAorCU9QVF9CT09MRUFOKCdmJywgImZvcmNlIiwgJmlnbm9yZWRfdG9vLCAiYWxsb3cgYWRkaW5nIG90aGVyd2lzZSBpZ25vcmVkIGZpbGVzIiksCisJT1BUX0JPT0xFQU4oJ3UnLCAidXBkYXRlIiwgJnRha2Vfd29ya3RyZWVfY2hhbmdlcywgInVwZGF0ZSB0cmFja2VkIGZpbGVzIiksCiAJT1BUX0JPT0xFQU4oIDAgLCAicmVmcmVzaCIsICZyZWZyZXNoX29ubHksICJkb24ndCBhZGQsIG9ubHkgcmVmcmVzaCB0aGUgaW5kZXgiKSwKKwlPUFRfQk9PTEVBTiggMCAsICJpZ25vcmUtZXJyb3JzIiwgJmlnbm9yZV9hZGRfZXJyb3JzLCAianVzdCBza2lwIGZpbGVzIHdoaWNoIGNhbm5vdCBiZSBhZGRlZCBiZWNhdXNlIG9mIGVycm9ycyIpLAogCU9QVF9FTkQoKSwKIH07CiAKK3N0YXRpYyBpbnQgYWRkX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNhc2VjbXAodmFyLCAiYWRkLmlnbm9yZS1lcnJvcnMiKSkgeworCQlpZ25vcmVfYWRkX2Vycm9ycyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCiBpbnQgY21kX2FkZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKKwlpbnQgZXhpdF9zdGF0dXMgPSAwOwogCWludCBpLCBuZXdmZDsKIAljb25zdCBjaGFyICoqcGF0aHNwZWM7CiAJc3RydWN0IGRpcl9zdHJ1Y3QgZGlyOworCWludCBmbGFnczsKIAogCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGJ1aWx0aW5fYWRkX29wdGlvbnMsCiAJCQkgIGJ1aWx0aW5fYWRkX3VzYWdlLCAwKTsKQEAgLTIwMywxNiArMjMxLDIwIEBACiAJaWYgKGFkZF9pbnRlcmFjdGl2ZSkKIAkJZXhpdChpbnRlcmFjdGl2ZV9hZGQoYXJnYywgYXJndiwgcHJlZml4KSk7CiAKLQlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZyk7CisJZ2l0X2NvbmZpZyhhZGRfY29uZmlnLCBOVUxMKTsKIAogCW5ld2ZkID0gaG9sZF9sb2NrZWRfaW5kZXgoJmxvY2tfZmlsZSwgMSk7CiAKKwlmbGFncyA9ICgodmVyYm9zZSA/IEFERF9DQUNIRV9WRVJCT1NFIDogMCkgfAorCQkgKHNob3dfb25seSA/IEFERF9DQUNIRV9QUkVURU5EIDogMCkgfAorCQkgKGlnbm9yZV9hZGRfZXJyb3JzID8gQUREX0NBQ0hFX0lHTk9SRV9FUlJPUlMgOiAwKSk7CisKIAlpZiAodGFrZV93b3JrdHJlZV9jaGFuZ2VzKSB7CiAJCWNvbnN0IGNoYXIgKipwYXRoc3BlYzsKIAkJaWYgKHJlYWRfY2FjaGUoKSA8IDApCiAJCQlkaWUoImluZGV4IGZpbGUgY29ycnVwdCIpOwogCQlwYXRoc3BlYyA9IGdldF9wYXRoc3BlYyhwcmVmaXgsIGFyZ3YpOwotCQlhZGRfZmlsZXNfdG9fY2FjaGUodmVyYm9zZSwgcHJlZml4LCBwYXRoc3BlYyk7CisJCWV4aXRfc3RhdHVzID0gYWRkX2ZpbGVzX3RvX2NhY2hlKHByZWZpeCwgcGF0aHNwZWMsIGZsYWdzKTsKIAkJZ290byBmaW5pc2g7CiAJfQogCkBAIC0yMzAsMTcgKzI2Miw2IEBACiAKIAlmaWxsX2RpcmVjdG9yeSgmZGlyLCBwYXRoc3BlYywgaWdub3JlZF90b28pOwogCi0JaWYgKHNob3dfb25seSkgewotCQljb25zdCBjaGFyICpzZXAgPSAiIiwgKmVvZiA9ICIiOwotCQlmb3IgKGkgPSAwOyBpIDwgZGlyLm5yOyBpKyspIHsKLQkJCXByaW50ZigiJXMlcyIsIHNlcCwgZGlyLmVudHJpZXNbaV0tPm5hbWUpOwotCQkJc2VwID0gIiAiOwotCQkJZW9mID0gIlxuIjsKLQkJfQotCQlmcHV0cyhlb2YsIHN0ZG91dCk7Ci0JCXJldHVybiAwOwotCX0KLQogCWlmIChyZWFkX2NhY2hlKCkgPCAwKQogCQlkaWUoImluZGV4IGZpbGUgY29ycnVwdCIpOwogCkBAIC0yNTQsNyArMjc1LDExIEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IGRpci5ucjsgaSsrKQotCQlhZGRfZmlsZV90b19jYWNoZShkaXIuZW50cmllc1tpXS0+bmFtZSwgdmVyYm9zZSk7CisJCWlmIChhZGRfZmlsZV90b19jYWNoZShkaXIuZW50cmllc1tpXS0+bmFtZSwgZmxhZ3MpKSB7CisJCQlpZiAoIWlnbm9yZV9hZGRfZXJyb3JzKQorCQkJCWRpZSgiYWRkaW5nIGZpbGVzIGZhaWxlZCIpOworCQkJZXhpdF9zdGF0dXMgPSAxOworCQl9CiAKICBmaW5pc2g6CiAJaWYgKGFjdGl2ZV9jYWNoZV9jaGFuZ2VkKSB7CkBAIC0yNjMsNSArMjg4LDUgQEAKIAkJCWRpZSgiVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIik7CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGV4aXRfc3RhdHVzOwogfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1hcHBseS5jIGIvYnVpbHRpbi1hcHBseS5jCmluZGV4IDMwZDI2ZTUuLmM0OTc4ODkgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tYXBwbHkuYworKysgYi9idWlsdGluLWFwcGx5LmMKQEAgLTQxOCw3ICs0MTgsNyBAQAogfQogCiAvKgotICogR2V0IHRoZSBuYW1lIGV0YyBpbmZvIGZyb20gdGhlIC0tLysrKyBsaW5lcyBvZiBhIHRyYWRpdGlvbmFsIHBhdGNoIGhlYWRlcgorICogR2V0IHRoZSBuYW1lIGV0YyBpbmZvIGZyb20gdGhlIC0tLS8rKysgbGluZXMgb2YgYSB0cmFkaXRpb25hbCBwYXRjaCBoZWFkZXIKICAqCiAgKiBGSVhNRSEgVGhlIGVuZC1vZi1maWxlbmFtZSBoZXVyaXN0aWNzIGFyZSBraW5kIG9mIHNjcmV3eS4gRm9yIGV4aXN0aW5nCiAgKiBmaWxlcywgd2UgY2FuIGhhcHBpbHkgY2hlY2sgdGhlIGluZGV4IGZvciBhIG1hdGNoLCBidXQgZm9yIGNyZWF0aW5nIGEKQEAgLTExNDMsMjEgKzExNDMsNiBAQAogCWlmIChwYXRjaC0+aXNfZGVsZXRlIDwgMCAmJgogCSAgICAobmV3bGluZXMgfHwgKHBhdGNoLT5mcmFnbWVudHMgJiYgcGF0Y2gtPmZyYWdtZW50cy0+bmV4dCkpKQogCQlwYXRjaC0+aXNfZGVsZXRlID0gMDsKLQlpZiAoIXVuaWRpZmZfemVybyB8fCBjb250ZXh0KSB7Ci0JCS8qIElmIHRoZSB1c2VyIHNheXMgdGhlIHBhdGNoIGlzIG5vdCBnZW5lcmF0ZWQgd2l0aAotCQkgKiAtLXVuaWZpZWQ9MCwgb3IgaWYgd2UgaGF2ZSBzZWVuIGNvbnRleHQgbGluZXMsCi0JCSAqIHRoZW4gbm90IGhhdmluZyBvbGRsaW5lcyBtZWFucyB0aGUgcGF0Y2ggaXMgY3JlYXRpb24sCi0JCSAqIGFuZCBub3QgaGF2aW5nIG5ld2xpbmVzIG1lYW5zIHRoZSBwYXRjaCBpcyBkZWxldGlvbi4KLQkJICovCi0JCWlmIChwYXRjaC0+aXNfbmV3IDwgMCAmJiAhb2xkbGluZXMpIHsKLQkJCXBhdGNoLT5pc19uZXcgPSAxOwotCQkJcGF0Y2gtPm9sZF9uYW1lID0gTlVMTDsKLQkJfQotCQlpZiAocGF0Y2gtPmlzX2RlbGV0ZSA8IDAgJiYgIW5ld2xpbmVzKSB7Ci0JCQlwYXRjaC0+aXNfZGVsZXRlID0gMTsKLQkJCXBhdGNoLT5uZXdfbmFtZSA9IE5VTEw7Ci0JCX0KLQl9CiAKIAlpZiAoMCA8IHBhdGNoLT5pc19uZXcgJiYgb2xkbGluZXMpCiAJCWRpZSgibmV3IGZpbGUgJXMgZGVwZW5kcyBvbiBvbGQgY29udGVudHMiLCBwYXRjaC0+bmV3X25hbWUpOwpAQCAtMjI0Nyw3ICsyMjMyLDcgQEAKIAkJICogSW4gc3VjaCBhIGNhc2UsIHBhdGggIm5ld19uYW1lIiBkb2VzIG5vdCBleGlzdCBhcwogCQkgKiBmYXIgYXMgZ2l0IGlzIGNvbmNlcm5lZC4KIAkJICovCi0JCWlmIChoYXNfc3ltbGlua19sZWFkaW5nX3BhdGgobmV3X25hbWUsIE5VTEwpKQorCQlpZiAoaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKHN0cmxlbihuZXdfbmFtZSksIG5ld19uYW1lKSkKIAkJCXJldHVybiAwOwogCiAJCXJldHVybiBlcnJvcigiJXM6IGFscmVhZHkgZXhpc3RzIGluIHdvcmtpbmcgZGlyZWN0b3J5IiwgbmV3X25hbWUpOwpAQCAtMjI2Nyw2ICsyMjUyLDc5IEBACiAJcmV0dXJuIGNlX21hdGNoX3N0YXQoY2UsIHN0LCBDRV9NQVRDSF9JR05PUkVfVkFMSUQpOwogfQogCitzdGF0aWMgaW50IGNoZWNrX3ByZWltYWdlKHN0cnVjdCBwYXRjaCAqcGF0Y2gsIHN0cnVjdCBjYWNoZV9lbnRyeSAqKmNlLCBzdHJ1Y3Qgc3RhdCAqc3QpCit7CisJY29uc3QgY2hhciAqb2xkX25hbWUgPSBwYXRjaC0+b2xkX25hbWU7CisJaW50IHN0YXRfcmV0ID0gMDsKKwl1bnNpZ25lZCBzdF9tb2RlID0gMDsKKworCS8qCisJICogTWFrZSBzdXJlIHRoYXQgd2UgZG8gbm90IGhhdmUgbG9jYWwgbW9kaWZpY2F0aW9ucyBmcm9tIHRoZQorCSAqIGluZGV4IHdoZW4gd2UgYXJlIGxvb2tpbmcgYXQgdGhlIGluZGV4LiAgQWxzbyBtYWtlIHN1cmUKKwkgKiB3ZSBoYXZlIHRoZSBwcmVpbWFnZSBmaWxlIHRvIGJlIHBhdGNoZWQgaW4gdGhlIHdvcmsgdHJlZSwKKwkgKiB1bmxlc3MgLS1jYWNoZWQsIHdoaWNoIHRlbGxzIGdpdCB0byBhcHBseSBvbmx5IGluIHRoZSBpbmRleC4KKwkgKi8KKwlpZiAoIW9sZF9uYW1lKQorCQlyZXR1cm4gMDsKKworCWFzc2VydChwYXRjaC0+aXNfbmV3IDw9IDApOworCWlmICghY2FjaGVkKSB7CisJCXN0YXRfcmV0ID0gbHN0YXQob2xkX25hbWUsIHN0KTsKKwkJaWYgKHN0YXRfcmV0ICYmIGVycm5vICE9IEVOT0VOVCkKKwkJCXJldHVybiBlcnJvcigiJXM6ICVzIiwgb2xkX25hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJfQorCWlmIChjaGVja19pbmRleCkgeworCQlpbnQgcG9zID0gY2FjaGVfbmFtZV9wb3Mob2xkX25hbWUsIHN0cmxlbihvbGRfbmFtZSkpOworCQlpZiAocG9zIDwgMCkgeworCQkJaWYgKHBhdGNoLT5pc19uZXcgPCAwKQorCQkJCWdvdG8gaXNfbmV3OworCQkJcmV0dXJuIGVycm9yKCIlczogZG9lcyBub3QgZXhpc3QgaW4gaW5kZXgiLCBvbGRfbmFtZSk7CisJCX0KKwkJKmNlID0gYWN0aXZlX2NhY2hlW3Bvc107CisJCWlmIChzdGF0X3JldCA8IDApIHsKKwkJCXN0cnVjdCBjaGVja291dCBjb3N0YXRlOworCQkJLyogY2hlY2tvdXQgKi8KKwkJCWNvc3RhdGUuYmFzZV9kaXIgPSAiIjsKKwkJCWNvc3RhdGUuYmFzZV9kaXJfbGVuID0gMDsKKwkJCWNvc3RhdGUuZm9yY2UgPSAwOworCQkJY29zdGF0ZS5xdWlldCA9IDA7CisJCQljb3N0YXRlLm5vdF9uZXcgPSAwOworCQkJY29zdGF0ZS5yZWZyZXNoX2NhY2hlID0gMTsKKwkJCWlmIChjaGVja291dF9lbnRyeSgqY2UsICZjb3N0YXRlLCBOVUxMKSB8fAorCQkJICAgIGxzdGF0KG9sZF9uYW1lLCBzdCkpCisJCQkJcmV0dXJuIC0xOworCQl9CisJCWlmICghY2FjaGVkICYmIHZlcmlmeV9pbmRleF9tYXRjaCgqY2UsIHN0KSkKKwkJCXJldHVybiBlcnJvcigiJXM6IGRvZXMgbm90IG1hdGNoIGluZGV4Iiwgb2xkX25hbWUpOworCQlpZiAoY2FjaGVkKQorCQkJc3RfbW9kZSA9ICgqY2UpLT5jZV9tb2RlOworCX0gZWxzZSBpZiAoc3RhdF9yZXQgPCAwKSB7CisJCWlmIChwYXRjaC0+aXNfbmV3IDwgMCkKKwkJCWdvdG8gaXNfbmV3OworCQlyZXR1cm4gZXJyb3IoIiVzOiAlcyIsIG9sZF9uYW1lLCBzdHJlcnJvcihlcnJubykpOworCX0KKworCWlmICghY2FjaGVkKQorCQlzdF9tb2RlID0gY2VfbW9kZV9mcm9tX3N0YXQoKmNlLCBzdC0+c3RfbW9kZSk7CisKKwlpZiAocGF0Y2gtPmlzX25ldyA8IDApCisJCXBhdGNoLT5pc19uZXcgPSAwOworCWlmICghcGF0Y2gtPm9sZF9tb2RlKQorCQlwYXRjaC0+b2xkX21vZGUgPSBzdF9tb2RlOworCWlmICgoc3RfbW9kZSBeIHBhdGNoLT5vbGRfbW9kZSkgJiBTX0lGTVQpCisJCXJldHVybiBlcnJvcigiJXM6IHdyb25nIHR5cGUiLCBvbGRfbmFtZSk7CisJaWYgKHN0X21vZGUgIT0gcGF0Y2gtPm9sZF9tb2RlKQorCQlmcHJpbnRmKHN0ZGVyciwgIndhcm5pbmc6ICVzIGhhcyB0eXBlICVvLCBleHBlY3RlZCAlb1xuIiwKKwkJCW9sZF9uYW1lLCBzdF9tb2RlLCBwYXRjaC0+b2xkX21vZGUpOworCXJldHVybiAwOworCisgaXNfbmV3OgorCXBhdGNoLT5pc19uZXcgPSAxOworCXBhdGNoLT5pc19kZWxldGUgPSAwOworCXBhdGNoLT5vbGRfbmFtZSA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgY2hlY2tfcGF0Y2goc3RydWN0IHBhdGNoICpwYXRjaCwgc3RydWN0IHBhdGNoICpwcmV2X3BhdGNoKQogewogCXN0cnVjdCBzdGF0IHN0OwpAQCAtMjI3NSw2NiArMjMzMywxNCBAQAogCWNvbnN0IGNoYXIgKm5hbWUgPSBvbGRfbmFtZSA/IG9sZF9uYW1lIDogbmV3X25hbWU7CiAJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IE5VTEw7CiAJaW50IG9rX2lmX2V4aXN0czsKKwlpbnQgc3RhdHVzOwogCiAJcGF0Y2gtPnJlamVjdGVkID0gMTsgLyogd2Ugd2lsbCBkcm9wIHRoaXMgYWZ0ZXIgd2Ugc3VjY2VlZCAqLwogCi0JLyoKLQkgKiBNYWtlIHN1cmUgdGhhdCB3ZSBkbyBub3QgaGF2ZSBsb2NhbCBtb2RpZmljYXRpb25zIGZyb20gdGhlCi0JICogaW5kZXggd2hlbiB3ZSBhcmUgbG9va2luZyBhdCB0aGUgaW5kZXguICBBbHNvIG1ha2Ugc3VyZQotCSAqIHdlIGhhdmUgdGhlIHByZWltYWdlIGZpbGUgdG8gYmUgcGF0Y2hlZCBpbiB0aGUgd29yayB0cmVlLAotCSAqIHVubGVzcyAtLWNhY2hlZCwgd2hpY2ggdGVsbHMgZ2l0IHRvIGFwcGx5IG9ubHkgaW4gdGhlIGluZGV4LgotCSAqLwotCWlmIChvbGRfbmFtZSkgewotCQlpbnQgc3RhdF9yZXQgPSAwOwotCQl1bnNpZ25lZCBzdF9tb2RlID0gMDsKLQotCQlpZiAoIWNhY2hlZCkKLQkJCXN0YXRfcmV0ID0gbHN0YXQob2xkX25hbWUsICZzdCk7Ci0JCWlmIChjaGVja19pbmRleCkgewotCQkJaW50IHBvcyA9IGNhY2hlX25hbWVfcG9zKG9sZF9uYW1lLCBzdHJsZW4ob2xkX25hbWUpKTsKLQkJCWlmIChwb3MgPCAwKQotCQkJCXJldHVybiBlcnJvcigiJXM6IGRvZXMgbm90IGV4aXN0IGluIGluZGV4IiwKLQkJCQkJICAgICBvbGRfbmFtZSk7Ci0JCQljZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOwotCQkJaWYgKHN0YXRfcmV0IDwgMCkgewotCQkJCXN0cnVjdCBjaGVja291dCBjb3N0YXRlOwotCQkJCWlmIChlcnJubyAhPSBFTk9FTlQpCi0JCQkJCXJldHVybiBlcnJvcigiJXM6ICVzIiwgb2xkX25hbWUsCi0JCQkJCQkgICAgIHN0cmVycm9yKGVycm5vKSk7Ci0JCQkJLyogY2hlY2tvdXQgKi8KLQkJCQljb3N0YXRlLmJhc2VfZGlyID0gIiI7Ci0JCQkJY29zdGF0ZS5iYXNlX2Rpcl9sZW4gPSAwOwotCQkJCWNvc3RhdGUuZm9yY2UgPSAwOwotCQkJCWNvc3RhdGUucXVpZXQgPSAwOwotCQkJCWNvc3RhdGUubm90X25ldyA9IDA7Ci0JCQkJY29zdGF0ZS5yZWZyZXNoX2NhY2hlID0gMTsKLQkJCQlpZiAoY2hlY2tvdXRfZW50cnkoY2UsCi0JCQkJCQkgICAmY29zdGF0ZSwKLQkJCQkJCSAgIE5VTEwpIHx8Ci0JCQkJICAgIGxzdGF0KG9sZF9uYW1lLCAmc3QpKQotCQkJCQlyZXR1cm4gLTE7Ci0JCQl9Ci0JCQlpZiAoIWNhY2hlZCAmJiB2ZXJpZnlfaW5kZXhfbWF0Y2goY2UsICZzdCkpCi0JCQkJcmV0dXJuIGVycm9yKCIlczogZG9lcyBub3QgbWF0Y2ggaW5kZXgiLAotCQkJCQkgICAgIG9sZF9uYW1lKTsKLQkJCWlmIChjYWNoZWQpCi0JCQkJc3RfbW9kZSA9IGNlLT5jZV9tb2RlOwotCQl9IGVsc2UgaWYgKHN0YXRfcmV0IDwgMCkKLQkJCXJldHVybiBlcnJvcigiJXM6ICVzIiwgb2xkX25hbWUsIHN0cmVycm9yKGVycm5vKSk7Ci0KLQkJaWYgKCFjYWNoZWQpCi0JCQlzdF9tb2RlID0gY2VfbW9kZV9mcm9tX3N0YXQoY2UsIHN0LnN0X21vZGUpOwotCi0JCWlmIChwYXRjaC0+aXNfbmV3IDwgMCkKLQkJCXBhdGNoLT5pc19uZXcgPSAwOwotCQlpZiAoIXBhdGNoLT5vbGRfbW9kZSkKLQkJCXBhdGNoLT5vbGRfbW9kZSA9IHN0X21vZGU7Ci0JCWlmICgoc3RfbW9kZSBeIHBhdGNoLT5vbGRfbW9kZSkgJiBTX0lGTVQpCi0JCQlyZXR1cm4gZXJyb3IoIiVzOiB3cm9uZyB0eXBlIiwgb2xkX25hbWUpOwotCQlpZiAoc3RfbW9kZSAhPSBwYXRjaC0+b2xkX21vZGUpCi0JCQlmcHJpbnRmKHN0ZGVyciwgIndhcm5pbmc6ICVzIGhhcyB0eXBlICVvLCBleHBlY3RlZCAlb1xuIiwKLQkJCQlvbGRfbmFtZSwgc3RfbW9kZSwgcGF0Y2gtPm9sZF9tb2RlKTsKLQl9CisJc3RhdHVzID0gY2hlY2tfcHJlaW1hZ2UocGF0Y2gsICZjZSwgJnN0KTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCW9sZF9uYW1lID0gcGF0Y2gtPm9sZF9uYW1lOwogCiAJaWYgKG5ld19uYW1lICYmIHByZXZfcGF0Y2ggJiYgMCA8IHByZXZfcGF0Y2gtPmlzX2RlbGV0ZSAmJgogCSAgICAhc3RyY21wKHByZXZfcGF0Y2gtPm9sZF9uYW1lLCBuZXdfbmFtZSkpCkBAIC0yOTc5LDE1ICsyOTg1LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ2l0X2FwcGx5X2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQorc3RhdGljIGludCBnaXRfYXBwbHlfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQogewotCWlmICghc3RyY21wKHZhciwgImFwcGx5LndoaXRlc3BhY2UiKSkgewotCQlpZiAoIXZhbHVlKQotCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7Ci0JCWFwcGx5X2RlZmF1bHRfd2hpdGVzcGFjZSA9IHhzdHJkdXAodmFsdWUpOwotCQlyZXR1cm4gMDsKLQl9Ci0JcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlKTsKKwlpZiAoIXN0cmNtcCh2YXIsICJhcHBseS53aGl0ZXNwYWNlIikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmYXBwbHlfZGVmYXVsdF93aGl0ZXNwYWNlLCB2YXIsIHZhbHVlKTsKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKIH0KIAogCkBAIC0zMDAzLDcgKzMwMDUsNyBAQAogCiAJcHJlZml4ID0gc2V0dXBfZ2l0X2RpcmVjdG9yeV9nZW50bHkoJmlzX25vdF9naXRkaXIpOwogCXByZWZpeF9sZW5ndGggPSBwcmVmaXggPyBzdHJsZW4ocHJlZml4KSA6IDA7Ci0JZ2l0X2NvbmZpZyhnaXRfYXBwbHlfY29uZmlnKTsKKwlnaXRfY29uZmlnKGdpdF9hcHBseV9jb25maWcsIE5VTEwpOwogCWlmIChhcHBseV9kZWZhdWx0X3doaXRlc3BhY2UpCiAJCXBhcnNlX3doaXRlc3BhY2Vfb3B0aW9uKGFwcGx5X2RlZmF1bHRfd2hpdGVzcGFjZSk7CiAKZGlmZiAtLWdpdCBhL2J1aWx0aW4tYmxhbWUuYyBiL2J1aWx0aW4tYmxhbWUuYwppbmRleCBiZmQ1NjJkLi5iNDUxZjZjIDEwMDY0NAotLS0gYS9idWlsdGluLWJsYW1lLmMKKysrIGIvYnVpbHRpbi1ibGFtZS5jCkBAIC0xOTkzLDcgKzE5OTMsNyBAQAogCQl1c2FnZShibGFtZV91c2FnZSk7CiB9CiAKLXN0YXRpYyBpbnQgZ2l0X2JsYW1lX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQorc3RhdGljIGludCBnaXRfYmxhbWVfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQogewogCWlmICghc3RyY21wKHZhciwgImJsYW1lLnNob3dyb290IikpIHsKIAkJc2hvd19yb290ID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOwpAQCAtMjAwMyw3ICsyMDAzLDcgQEAKIAkJYmxhbmtfYm91bmRhcnkgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CiAJCXJldHVybiAwOwogCX0KLQlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUpOworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOwogfQogCiBzdGF0aWMgc3RydWN0IGNvbW1pdCAqZmFrZV93b3JraW5nX3RyZWVfY29tbWl0KGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmNvbnRlbnRzX2Zyb20pCkBAIC0yMTQxLDcgKzIxNDEsNyBAQAogCiAJY21kX2lzX2Fubm90YXRlID0gIXN0cmNtcChhcmd2WzBdLCAiYW5ub3RhdGUiKTsKIAotCWdpdF9jb25maWcoZ2l0X2JsYW1lX2NvbmZpZyk7CisJZ2l0X2NvbmZpZyhnaXRfYmxhbWVfY29uZmlnLCBOVUxMKTsKIAlzYXZlX2NvbW1pdF9idWZmZXIgPSAwOwogCiAJb3B0ID0gMDsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tYnJhbmNoLmMgYi9idWlsdGluLWJyYW5jaC5jCmluZGV4IDViYzQ1MjYuLmQyNzk3MDIgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tYnJhbmNoLmMKKysrIGIvYnVpbHRpbi1icmFuY2guYwpAQCAtMTUsNyArMTUsNyBAQAogI2luY2x1ZGUgImJyYW5jaC5oIgogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fYnJhbmNoX3VzYWdlW10gPSB7Ci0JImdpdC1icmFuY2ggW29wdGlvbnNdIFstciB8IC1hXSIsCisJImdpdC1icmFuY2ggW29wdGlvbnNdIFstciB8IC1hXSBbLS1tZXJnZWQgfCAtLW5vLW1lcmdlZF0iLAogCSJnaXQtYnJhbmNoIFtvcHRpb25zXSBbLWxdIFstZl0gPGJyYW5jaG5hbWU+IFs8c3RhcnQtcG9pbnQ+XSIsCiAJImdpdC1icmFuY2ggW29wdGlvbnNdIFstcl0gKC1kIHwgLUQpIDxicmFuY2huYW1lPiIsCiAJImdpdC1icmFuY2ggW29wdGlvbnNdICgtbSB8IC1NKSBbPG9sZGJyYW5jaD5dIDxuZXdicmFuY2g+IiwKQEAgLTQ2LDYgKzQ2LDggQEAKIAlDT0xPUl9CUkFOQ0hfQ1VSUkVOVCA9IDQsCiB9OwogCitzdGF0aWMgaW50IG1lcmdlZmlsdGVyID0gLTE7CisKIHN0YXRpYyBpbnQgcGFyc2VfYnJhbmNoX2NvbG9yX3Nsb3QoY29uc3QgY2hhciAqdmFyLCBpbnQgb2ZzKQogewogCWlmICghc3RyY2FzZWNtcCh2YXIrb2ZzLCAicGxhaW4iKSkKQEAgLTYxLDcgKzYzLDcgQEAKIAlkaWUoImJhZCBjb25maWcgdmFyaWFibGUgJyVzJyIsIHZhcik7CiB9CiAKLXN0YXRpYyBpbnQgZ2l0X2JyYW5jaF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3N0YXRpYyBpbnQgZ2l0X2JyYW5jaF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCiB7CiAJaWYgKCFzdHJjbXAodmFyLCAiY29sb3IuYnJhbmNoIikpIHsKIAkJYnJhbmNoX3VzZV9jb2xvciA9IGdpdF9jb25maWdfY29sb3Jib29sKHZhciwgdmFsdWUsIC0xKTsKQEAgLTc0LDcgKzc2LDcgQEAKIAkJY29sb3JfcGFyc2UodmFsdWUsIHZhciwgYnJhbmNoX2NvbG9yc1tzbG90XSk7CiAJCXJldHVybiAwOwogCX0KLQlyZXR1cm4gZ2l0X2NvbG9yX2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUpOworCXJldHVybiBnaXRfY29sb3JfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOwogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqYnJhbmNoX2dldF9jb2xvcihlbnVtIGNvbG9yX2JyYW5jaCBpeCkKQEAgLTIxMCw2ICsyMTIsNyBAQAogCXN0cnVjdCByZWZfaXRlbSAqbmV3aXRlbTsKIAlpbnQga2luZCA9IFJFRl9VTktOT1dOX1RZUEU7CiAJaW50IGxlbjsKKwlzdGF0aWMgc3RydWN0IGNvbW1pdF9saXN0IGJyYW5jaDsKIAogCS8qIERldGVjdCBraW5kICovCiAJaWYgKCFwcmVmaXhjbXAocmVmbmFtZSwgInJlZnMvaGVhZHMvIikpIHsKQEAgLTIzMSw2ICsyMzQsMTYgQEAKIAlpZiAoKGtpbmQgJiByZWZfbGlzdC0+a2luZHMpID09IDApCiAJCXJldHVybiAwOwogCisJaWYgKG1lcmdlZmlsdGVyID4gLTEpIHsKKwkJYnJhbmNoLml0ZW0gPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkoc2hhMSwgMSk7CisJCWlmICghYnJhbmNoLml0ZW0pCisJCQlkaWUoIlVuYWJsZSB0byBsb29rdXAgdGlwIG9mIGJyYW5jaCAlcyIsIHJlZm5hbWUpOworCQlpZiAobWVyZ2VmaWx0ZXIgPT0gMCAmJiBoYXNfY29tbWl0KGhlYWRfc2hhMSwgJmJyYW5jaCkpCisJCQlyZXR1cm4gMDsKKwkJaWYgKG1lcmdlZmlsdGVyID09IDEgJiYgIWhhc19jb21taXQoaGVhZF9zaGExLCAmYnJhbmNoKSkKKwkJCXJldHVybiAwOworCX0KKwogCS8qIFJlc2l6ZSBidWZmZXIgKi8KIAlpZiAocmVmX2xpc3QtPmluZGV4ID49IHJlZl9saXN0LT5hbGxvYykgewogCQlyZWZfbGlzdC0+YWxsb2MgPSBhbGxvY19ucihyZWZfbGlzdC0+YWxsb2MpOwpAQCAtNDQ0LDEwICs0NTcsMTEgQEAKIAkJT1BUX0JJVCgnTScsIE5VTEwsICZyZW5hbWUsICJtb3ZlL3JlbmFtZSBhIGJyYW5jaCwgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIiwgMiksCiAJCU9QVF9CT09MRUFOKCdsJywgTlVMTCwgJnJlZmxvZywgImNyZWF0ZSB0aGUgYnJhbmNoJ3MgcmVmbG9nIiksCiAJCU9QVF9CT09MRUFOKCdmJywgTlVMTCwgJmZvcmNlX2NyZWF0ZSwgImZvcmNlIGNyZWF0aW9uICh3aGVuIGFscmVhZHkgZXhpc3RzKSIpLAorCQlPUFRfU0VUX0lOVCgwLCAibWVyZ2VkIiwgJm1lcmdlZmlsdGVyLCAibGlzdCBvbmx5IG1lcmdlZCBicmFuY2hlcyIsIDEpLAogCQlPUFRfRU5EKCksCiAJfTsKIAotCWdpdF9jb25maWcoZ2l0X2JyYW5jaF9jb25maWcpOworCWdpdF9jb25maWcoZ2l0X2JyYW5jaF9jb25maWcsIE5VTEwpOwogCiAJaWYgKGJyYW5jaF91c2VfY29sb3IgPT0gLTEpCiAJCWJyYW5jaF91c2VfY29sb3IgPSBnaXRfdXNlX2NvbG9yX2RlZmF1bHQ7CmRpZmYgLS1naXQgYS9idWlsdGluLWNhdC1maWxlLmMgYi9idWlsdGluLWNhdC1maWxlLmMKaW5kZXggZjEzMmQ1OC4uODgwZTc1YSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1jYXQtZmlsZS5jCisrKyBiL2J1aWx0aW4tY2F0LWZpbGUuYwpAQCAtOCw2ICs4LDEwIEBACiAjaW5jbHVkZSAidGFnLmgiCiAjaW5jbHVkZSAidHJlZS5oIgogI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisKKyNkZWZpbmUgQkFUQ0ggMQorI2RlZmluZSBCQVRDSF9DSEVDSyAyCiAKIHN0YXRpYyB2b2lkIHBwcmludF90YWcoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CkBAIC03NiwzMSArODAsMTYgQEAKIAkJd3JpdGVfb3JfZGllKDEsIGNwLCBlbmRwIC0gY3ApOwogfQogCi1pbnQgY21kX2NhdF9maWxlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQorc3RhdGljIGludCBjYXRfb25lX2ZpbGUoaW50IG9wdCwgY29uc3QgY2hhciAqZXhwX3R5cGUsIGNvbnN0IGNoYXIgKm9ial9uYW1lKQogewogCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CiAJZW51bSBvYmplY3RfdHlwZSB0eXBlOwogCXZvaWQgKmJ1ZjsKIAl1bnNpZ25lZCBsb25nIHNpemU7Ci0JaW50IG9wdDsKLQljb25zdCBjaGFyICpleHBfdHlwZSwgKm9ial9uYW1lOwotCi0JZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcpOwotCWlmIChhcmdjICE9IDMpCi0JCXVzYWdlKCJnaXQtY2F0LWZpbGUgWy10fC1zfC1lfC1wfDx0eXBlPl0gPHNoYTE+Iik7Ci0JZXhwX3R5cGUgPSBhcmd2WzFdOwotCW9ial9uYW1lID0gYXJndlsyXTsKIAogCWlmIChnZXRfc2hhMShvYmpfbmFtZSwgc2hhMSkpCiAJCWRpZSgiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiLCBvYmpfbmFtZSk7CiAKLQlvcHQgPSAwOwotCWlmICggZXhwX3R5cGVbMF0gPT0gJy0nICkgewotCQlvcHQgPSBleHBfdHlwZVsxXTsKLQkJaWYgKCAhb3B0IHx8IGV4cF90eXBlWzJdICkKLQkJCW9wdCA9IC0xOyAvKiBOb3QgYSBzaW5nbGUgY2hhcmFjdGVyIG9wdGlvbiAqLwotCX0KLQogCWJ1ZiA9IE5VTEw7CiAJc3dpdGNoIChvcHQpIHsKIAljYXNlICd0JzoKQEAgLTE1NywzICsxNDYsMTEzIEBACiAJd3JpdGVfb3JfZGllKDEsIGJ1Ziwgc2l6ZSk7CiAJcmV0dXJuIDA7CiB9CisKK3N0YXRpYyBpbnQgYmF0Y2hfb25lX29iamVjdChjb25zdCBjaGFyICpvYmpfbmFtZSwgaW50IHByaW50X2NvbnRlbnRzKQoreworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJZW51bSBvYmplY3RfdHlwZSB0eXBlID0gMDsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJdm9pZCAqY29udGVudHMgPSBjb250ZW50czsKKworCWlmICghb2JqX25hbWUpCisJICAgcmV0dXJuIDE7CisKKwlpZiAoZ2V0X3NoYTEob2JqX25hbWUsIHNoYTEpKSB7CisJCXByaW50ZigiJXMgbWlzc2luZ1xuIiwgb2JqX25hbWUpOworCQlmZmx1c2goc3Rkb3V0KTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHByaW50X2NvbnRlbnRzID09IEJBVENIKQorCQljb250ZW50cyA9IHJlYWRfc2hhMV9maWxlKHNoYTEsICZ0eXBlLCAmc2l6ZSk7CisJZWxzZQorCQl0eXBlID0gc2hhMV9vYmplY3RfaW5mbyhzaGExLCAmc2l6ZSk7CisKKwlpZiAodHlwZSA8PSAwKSB7CisJCXByaW50ZigiJXMgbWlzc2luZ1xuIiwgb2JqX25hbWUpOworCQlmZmx1c2goc3Rkb3V0KTsKKwkJcmV0dXJuIDA7CisJfQorCisJcHJpbnRmKCIlcyAlcyAlbHVcbiIsIHNoYTFfdG9faGV4KHNoYTEpLCB0eXBlbmFtZSh0eXBlKSwgc2l6ZSk7CisJZmZsdXNoKHN0ZG91dCk7CisKKwlpZiAocHJpbnRfY29udGVudHMgPT0gQkFUQ0gpIHsKKwkJd3JpdGVfb3JfZGllKDEsIGNvbnRlbnRzLCBzaXplKTsKKwkJcHJpbnRmKCJcbiIpOworCQlmZmx1c2goc3Rkb3V0KTsKKwkJZnJlZShjb250ZW50cyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmF0Y2hfb2JqZWN0cyhpbnQgcHJpbnRfY29udGVudHMpCit7CisJc3RydWN0IHN0cmJ1ZiBidWY7CisKKwlzdHJidWZfaW5pdCgmYnVmLCAwKTsKKwl3aGlsZSAoc3RyYnVmX2dldGxpbmUoJmJ1Ziwgc3RkaW4sICdcbicpICE9IEVPRikgeworCQlpbnQgZXJyb3IgPSBiYXRjaF9vbmVfb2JqZWN0KGJ1Zi5idWYsIHByaW50X2NvbnRlbnRzKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNhdF9maWxlX3VzYWdlW10gPSB7CisJImdpdC1jYXQtZmlsZSBbLXR8LXN8LWV8LXB8PHR5cGU+XSA8c2hhMT4iLAorCSJnaXQtY2F0LWZpbGUgWy0tYmF0Y2h8LS1iYXRjaC1jaGVja10gPCA8bGlzdF9vZl9zaGExcz4iLAorCU5VTEwKK307CisKK2ludCBjbWRfY2F0X2ZpbGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IG9wdCA9IDAsIGJhdGNoID0gMDsKKwljb25zdCBjaGFyICpleHBfdHlwZSA9IE5VTEwsICpvYmpfbmFtZSA9IE5VTEw7CisKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0dST1VQKCI8dHlwZT4gY2FuIGJlIG9uZSBvZjogYmxvYiwgdHJlZSwgY29tbWl0LCB0YWciKSwKKwkJT1BUX1NFVF9JTlQoJ3QnLCBOVUxMLCAmb3B0LCAic2hvdyBvYmplY3QgdHlwZSIsICd0JyksCisJCU9QVF9TRVRfSU5UKCdzJywgTlVMTCwgJm9wdCwgInNob3cgb2JqZWN0IHNpemUiLCAncycpLAorCQlPUFRfU0VUX0lOVCgnZScsIE5VTEwsICZvcHQsCisJCQkgICAgImV4aXQgd2l0aCB6ZXJvIHdoZW4gdGhlcmUncyBubyBlcnJvciIsICdlJyksCisJCU9QVF9TRVRfSU5UKCdwJywgTlVMTCwgJm9wdCwgInByZXR0eS1wcmludCBvYmplY3QncyBjb250ZW50IiwgJ3AnKSwKKwkJT1BUX1NFVF9JTlQoMCwgImJhdGNoIiwgJmJhdGNoLAorCQkJICAgICJzaG93IGluZm8gYW5kIGNvbnRlbnQgb2Ygb2JqZWN0cyBmZWVkZWQgb24gc3RkaW4iLCBCQVRDSCksCisJCU9QVF9TRVRfSU5UKDAsICJiYXRjaC1jaGVjayIsICZiYXRjaCwKKwkJCSAgICAic2hvdyBpbmZvIGFib3V0IG9iamVjdHMgZmVlZGVkIG9uIHN0ZGluIiwKKwkJCSAgICBCQVRDSF9DSEVDSyksCisJCU9QVF9FTkQoKQorCX07CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisKKwlpZiAoYXJnYyAhPSAzICYmIGFyZ2MgIT0gMikKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGNhdF9maWxlX3VzYWdlLCBvcHRpb25zKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGNhdF9maWxlX3VzYWdlLCAwKTsKKworCWlmIChvcHQpIHsKKwkJaWYgKGFyZ2MgPT0gMSkKKwkJCW9ial9uYW1lID0gYXJndlswXTsKKwkJZWxzZQorCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKGNhdF9maWxlX3VzYWdlLCBvcHRpb25zKTsKKwl9CisJaWYgKCFvcHQgJiYgIWJhdGNoKSB7CisJCWlmIChhcmdjID09IDIpIHsKKwkJCWV4cF90eXBlID0gYXJndlswXTsKKwkJCW9ial9uYW1lID0gYXJndlsxXTsKKwkJfSBlbHNlCisJCQl1c2FnZV93aXRoX29wdGlvbnMoY2F0X2ZpbGVfdXNhZ2UsIG9wdGlvbnMpOworCX0KKwlpZiAoYmF0Y2ggJiYgKG9wdCB8fCBhcmdjKSkgeworCQl1c2FnZV93aXRoX29wdGlvbnMoY2F0X2ZpbGVfdXNhZ2UsIG9wdGlvbnMpOworCX0KKworCWlmIChiYXRjaCkKKwkJcmV0dXJuIGJhdGNoX29iamVjdHMoYmF0Y2gpOworCisJcmV0dXJuIGNhdF9vbmVfZmlsZShvcHQsIGV4cF90eXBlLCBvYmpfbmFtZSk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluLWNoZWNrb3V0LWluZGV4LmMgYi9idWlsdGluLWNoZWNrb3V0LWluZGV4LmMKaW5kZXggN2U0MjAyNC4uZWIxZmM5YSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1jaGVja291dC1pbmRleC5jCisrKyBiL2J1aWx0aW4tY2hlY2tvdXQtaW5kZXguYwpAQCAtMTY2LDcgKzE2Niw3IEBACiAJaW50IHJlYWRfZnJvbV9zdGRpbiA9IDA7CiAJaW50IHByZWZpeF9sZW5ndGg7CiAKLQlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZyk7CisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOwogCXN0YXRlLmJhc2VfZGlyID0gIiI7CiAJcHJlZml4X2xlbmd0aCA9IHByZWZpeCA/IHN0cmxlbihwcmVmaXgpIDogMDsKIApkaWZmIC0tZ2l0IGEvYnVpbHRpbi1jaGVja291dC5jIGIvYnVpbHRpbi1jaGVja291dC5jCmluZGV4IGNmOTg3NWMuLmFlYzJiYzYgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tY2hlY2tvdXQuYworKysgYi9idWlsdGluLWNoZWNrb3V0LmMKQEAgLTg0LDYgKzg0LDcgQEAKIAl1bnNpZ25lZCBjaGFyIHJldlsyMF07CiAJaW50IGZsYWc7CiAJc3RydWN0IGNvbW1pdCAqaGVhZDsKKwlpbnQgZXJycyA9IDA7CiAKIAlpbnQgbmV3ZmQ7CiAJc3RydWN0IGxvY2tfZmlsZSAqbG9ja19maWxlID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGxvY2tfZmlsZSkpOwpAQCAtMTA2LDEzICsxMDcsMTQgQEAKIAlpZiAocmVwb3J0X3BhdGhfZXJyb3IocHNfbWF0Y2hlZCwgcGF0aHNwZWMsIDApKQogCQlyZXR1cm4gMTsKIAorCS8qIE5vdyB3ZSBhcmUgY29tbWl0dGVkIHRvIGNoZWNrIHRoZW0gb3V0ICovCiAJbWVtc2V0KCZzdGF0ZSwgMCwgc2l6ZW9mKHN0YXRlKSk7CiAJc3RhdGUuZm9yY2UgPSAxOwogCXN0YXRlLnJlZnJlc2hfY2FjaGUgPSAxOwogCWZvciAocG9zID0gMDsgcG9zIDwgYWN0aXZlX25yOyBwb3MrKykgewogCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW3Bvc107CiAJCWlmIChwYXRoc3BlY19tYXRjaChwYXRoc3BlYywgTlVMTCwgY2UtPm5hbWUsIDApKSB7Ci0JCQljaGVja291dF9lbnRyeShjZSwgJnN0YXRlLCBOVUxMKTsKKwkJCWVycnMgfD0gY2hlY2tvdXRfZW50cnkoY2UsICZzdGF0ZSwgTlVMTCk7CiAJCX0KIAl9CiAKQEAgLTEyMyw3ICsxMjUsOCBAQAogCXJlc29sdmVfcmVmKCJIRUFEIiwgcmV2LCAwLCAmZmxhZyk7CiAJaGVhZCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShyZXYsIDEpOwogCi0JcmV0dXJuIHBvc3RfY2hlY2tvdXRfaG9vayhoZWFkLCBoZWFkLCAwKTsKKwllcnJzIHw9IHBvc3RfY2hlY2tvdXRfaG9vayhoZWFkLCBoZWFkLCAwKTsKKwlyZXR1cm4gZXJyczsKIH0KIAogc3RhdGljIHZvaWQgc2hvd19sb2NhbF9jaGFuZ2VzKHN0cnVjdCBvYmplY3QgKmhlYWQpCkBAIC0xNDgsNTcgKzE1MSw1MCBAQAogCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CiB9CiAKLXN0YXRpYyBpbnQgcmVzZXRfdG9fbmV3KHN0cnVjdCB0cmVlICp0cmVlLCBpbnQgcXVpZXQpCi17Ci0Jc3RydWN0IHVucGFja190cmVlc19vcHRpb25zIG9wdHM7Ci0Jc3RydWN0IHRyZWVfZGVzYyB0cmVlX2Rlc2M7Ci0KLQltZW1zZXQoJm9wdHMsIDAsIHNpemVvZihvcHRzKSk7Ci0Jb3B0cy5oZWFkX2lkeCA9IC0xOwotCW9wdHMudXBkYXRlID0gMTsKLQlvcHRzLnJlc2V0ID0gMTsKLQlvcHRzLm1lcmdlID0gMTsKLQlvcHRzLmZuID0gb25ld2F5X21lcmdlOwotCW9wdHMudmVyYm9zZV91cGRhdGUgPSAhcXVpZXQ7Ci0Jb3B0cy5zcmNfaW5kZXggPSAmdGhlX2luZGV4OwotCW9wdHMuZHN0X2luZGV4ID0gJnRoZV9pbmRleDsKLQlwYXJzZV90cmVlKHRyZWUpOwotCWluaXRfdHJlZV9kZXNjKCZ0cmVlX2Rlc2MsIHRyZWUtPmJ1ZmZlciwgdHJlZS0+c2l6ZSk7Ci0JaWYgKHVucGFja190cmVlcygxLCAmdHJlZV9kZXNjLCAmb3B0cykpCi0JCXJldHVybiAxMjg7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlc2V0X2NsZWFuX3RvX25ldyhzdHJ1Y3QgdHJlZSAqdHJlZSwgaW50IHF1aWV0KQotewotCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyBvcHRzOwotCXN0cnVjdCB0cmVlX2Rlc2MgdHJlZV9kZXNjOwotCi0JbWVtc2V0KCZvcHRzLCAwLCBzaXplb2Yob3B0cykpOwotCW9wdHMuaGVhZF9pZHggPSAtMTsKLQlvcHRzLnNraXBfdW5tZXJnZWQgPSAxOwotCW9wdHMucmVzZXQgPSAxOwotCW9wdHMubWVyZ2UgPSAxOwotCW9wdHMuZm4gPSBvbmV3YXlfbWVyZ2U7Ci0Jb3B0cy52ZXJib3NlX3VwZGF0ZSA9ICFxdWlldDsKLQlvcHRzLnNyY19pbmRleCA9ICZ0aGVfaW5kZXg7Ci0Jb3B0cy5kc3RfaW5kZXggPSAmdGhlX2luZGV4OwotCXBhcnNlX3RyZWUodHJlZSk7Ci0JaW5pdF90cmVlX2Rlc2MoJnRyZWVfZGVzYywgdHJlZS0+YnVmZmVyLCB0cmVlLT5zaXplKTsKLQlpZiAodW5wYWNrX3RyZWVzKDEsICZ0cmVlX2Rlc2MsICZvcHRzKSkKLQkJZXhpdCgxMjgpOwotfQotCiBzdHJ1Y3QgY2hlY2tvdXRfb3B0cyB7CiAJaW50IHF1aWV0OwogCWludCBtZXJnZTsKIAlpbnQgZm9yY2U7CisJaW50IHdyaXRlb3V0X2Vycm9yOwogCiAJY2hhciAqbmV3X2JyYW5jaDsKIAlpbnQgbmV3X2JyYW5jaF9sb2c7CiAJZW51bSBicmFuY2hfdHJhY2sgdHJhY2s7CiB9OwogCitzdGF0aWMgaW50IHJlc2V0X3RyZWUoc3RydWN0IHRyZWUgKnRyZWUsIHN0cnVjdCBjaGVja291dF9vcHRzICpvLCBpbnQgd29ya3RyZWUpCit7CisJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zIG9wdHM7CisJc3RydWN0IHRyZWVfZGVzYyB0cmVlX2Rlc2M7CisKKwltZW1zZXQoJm9wdHMsIDAsIHNpemVvZihvcHRzKSk7CisJb3B0cy5oZWFkX2lkeCA9IC0xOworCW9wdHMudXBkYXRlID0gd29ya3RyZWU7CisJb3B0cy5za2lwX3VubWVyZ2VkID0gIXdvcmt0cmVlOworCW9wdHMucmVzZXQgPSAxOworCW9wdHMubWVyZ2UgPSAxOworCW9wdHMuZm4gPSBvbmV3YXlfbWVyZ2U7CisJb3B0cy52ZXJib3NlX3VwZGF0ZSA9ICFvLT5xdWlldDsKKwlvcHRzLnNyY19pbmRleCA9ICZ0aGVfaW5kZXg7CisJb3B0cy5kc3RfaW5kZXggPSAmdGhlX2luZGV4OworCXBhcnNlX3RyZWUodHJlZSk7CisJaW5pdF90cmVlX2Rlc2MoJnRyZWVfZGVzYywgdHJlZS0+YnVmZmVyLCB0cmVlLT5zaXplKTsKKwlzd2l0Y2ggKHVucGFja190cmVlcygxLCAmdHJlZV9kZXNjLCAmb3B0cykpIHsKKwljYXNlIC0yOgorCQlvLT53cml0ZW91dF9lcnJvciA9IDE7CisJCS8qCisJCSAqIFdlIHJldHVybiAwIG5ldmVydGhlbGVzcywgYXMgdGhlIGluZGV4IGlzIGFsbCByaWdodAorCQkgKiBhbmQgbW9yZSBpbXBvcnRhbnRseSB3ZSBoYXZlIG1hZGUgYmVzdCBlZmZvcnRzIHRvCisJCSAqIHVwZGF0ZSBwYXRocyBpbiB0aGUgd29yayB0cmVlLCBhbmQgd2UgY2Fubm90IHJldmVydAorCQkgKiB0aGVtLgorCQkgKi8KKwljYXNlIDA6CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAxMjg7CisJfQorfQorCiBzdHJ1Y3QgYnJhbmNoX2luZm8gewogCWNvbnN0IGNoYXIgKm5hbWU7IC8qIFRoZSBzaG9ydCBuYW1lIHVzZWQgKi8KIAljb25zdCBjaGFyICpwYXRoOyAvKiBUaGUgZnVsbCBuYW1lIG9mIGEgcmVhbCBicmFuY2ggKi8KQEAgLTIyMyw3ICsyMTksNyBAQAogCXJlYWRfY2FjaGUoKTsKIAogCWlmIChvcHRzLT5mb3JjZSkgewotCQlyZXQgPSByZXNldF90b19uZXcobmV3LT5jb21taXQtPnRyZWUsIG9wdHMtPnF1aWV0KTsKKwkJcmV0ID0gcmVzZXRfdHJlZShuZXctPmNvbW1pdC0+dHJlZSwgb3B0cywgMSk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCX0gZWxzZSB7CkBAIC0yMzYsNiArMjMyLDggQEAKIAkJdG9wdHMuc3JjX2luZGV4ID0gJnRoZV9pbmRleDsKIAkJdG9wdHMuZHN0X2luZGV4ID0gJnRoZV9pbmRleDsKIAorCQl0b3B0cy5tc2dzLm5vdF91cHRvZGF0ZV9maWxlID0gIllvdSBoYXZlIGxvY2FsIGNoYW5nZXMgdG8gJyVzJzsgY2Fubm90IHN3aXRjaCBicmFuY2hlcy4iOworCiAJCXJlZnJlc2hfY2FjaGUoUkVGUkVTSF9RVUlFVCk7CiAKIAkJaWYgKHVubWVyZ2VkX2NhY2hlKCkpIHsKQEAgLTI1Nyw3ICsyNTUsOCBAQAogCQl0cmVlID0gcGFyc2VfdHJlZV9pbmRpcmVjdChuZXctPmNvbW1pdC0+b2JqZWN0LnNoYTEpOwogCQlpbml0X3RyZWVfZGVzYygmdHJlZXNbMV0sIHRyZWUtPmJ1ZmZlciwgdHJlZS0+c2l6ZSk7CiAKLQkJaWYgKHVucGFja190cmVlcygyLCB0cmVlcywgJnRvcHRzKSkgeworCQlyZXQgPSB1bnBhY2tfdHJlZXMoMiwgdHJlZXMsICZ0b3B0cyk7CisJCWlmIChyZXQgPT0gLTEpIHsKIAkJCS8qCiAJCQkgKiBVbnBhY2sgY291bGRuJ3QgZG8gYSB0cml2aWFsIG1lcmdlOyBlaXRoZXIKIAkJCSAqIGdpdmUgdXAgb3IgZG8gYSByZWFsIG1lcmdlLCBkZXBlbmRpbmcgb24KQEAgLTI4MiwxNSArMjgxLDE3IEBACiAJCQkgKiBlbnRyaWVzIGluIHRoZSBpbmRleC4KIAkJCSAqLwogCi0JCQlhZGRfZmlsZXNfdG9fY2FjaGUoMCwgTlVMTCwgTlVMTCk7CisJCQlhZGRfZmlsZXNfdG9fY2FjaGUoTlVMTCwgTlVMTCwgMCk7CiAJCQl3b3JrID0gd3JpdGVfdHJlZV9mcm9tX21lbW9yeSgpOwogCi0JCQlyZXQgPSByZXNldF90b19uZXcobmV3LT5jb21taXQtPnRyZWUsIG9wdHMtPnF1aWV0KTsKKwkJCXJldCA9IHJlc2V0X3RyZWUobmV3LT5jb21taXQtPnRyZWUsIG9wdHMsIDEpOwogCQkJaWYgKHJldCkKIAkJCQlyZXR1cm4gcmV0OwogCQkJbWVyZ2VfdHJlZXMobmV3LT5jb21taXQtPnRyZWUsIHdvcmssIG9sZC0+Y29tbWl0LT50cmVlLAogCQkJCSAgICBuZXctPm5hbWUsICJsb2NhbCIsICZyZXN1bHQpOwotCQkJcmVzZXRfY2xlYW5fdG9fbmV3KG5ldy0+Y29tbWl0LT50cmVlLCBvcHRzLT5xdWlldCk7CisJCQlyZXQgPSByZXNldF90cmVlKG5ldy0+Y29tbWl0LT50cmVlLCBvcHRzLCAwKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KIApAQCAtNDkwLDcgKzQ5MSw4IEBACiAKIAl1cGRhdGVfcmVmc19mb3Jfc3dpdGNoKG9wdHMsICZvbGQsIG5ldyk7CiAKLQlyZXR1cm4gcG9zdF9jaGVja291dF9ob29rKG9sZC5jb21taXQsIG5ldy0+Y29tbWl0LCAxKTsKKwlyZXQgPSBwb3N0X2NoZWNrb3V0X2hvb2sob2xkLmNvbW1pdCwgbmV3LT5jb21taXQsIDEpOworCXJldHVybiByZXQgfHwgb3B0cy0+d3JpdGVvdXRfZXJyb3I7CiB9CiAKIGludCBjbWRfY2hlY2tvdXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCkBAIC01MDQsNyArNTA2LDcgQEAKIAkJT1BUX19RVUlFVCgmb3B0cy5xdWlldCksCiAJCU9QVF9TVFJJTkcoJ2InLCBOVUxMLCAmb3B0cy5uZXdfYnJhbmNoLCAibmV3IGJyYW5jaCIsICJicmFuY2giKSwKIAkJT1BUX0JPT0xFQU4oJ2wnLCBOVUxMLCAmb3B0cy5uZXdfYnJhbmNoX2xvZywgImxvZyBmb3IgbmV3IGJyYW5jaCIpLAotCQlPUFRfU0VUX0lOVCggMCAsICJ0cmFjayIsICAmb3B0cy50cmFjaywgInRyYWNrIiwKKwkJT1BUX1NFVF9JTlQoJ3QnLCAidHJhY2siLCAgJm9wdHMudHJhY2ssICJ0cmFjayIsCiAJCQlCUkFOQ0hfVFJBQ0tfRVhQTElDSVQpLAogCQlPUFRfQk9PTEVBTignZicsIE5VTEwsICZvcHRzLmZvcmNlLCAiZm9yY2UiKSwKIAkJT1BUX0JPT0xFQU4oJ20nLCBOVUxMLCAmb3B0cy5tZXJnZSwgIm1lcmdlIiksCkBAIC01MTQsMTEgKzUxNiwxMiBAQAogCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKIAltZW1zZXQoJm5ldywgMCwgc2l6ZW9mKG5ldykpOwogCi0JZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcpOworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKIAogCW9wdHMudHJhY2sgPSBnaXRfYnJhbmNoX3RyYWNrOwogCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywgY2hlY2tvdXRfdXNhZ2UsIDApOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGNoZWNrb3V0X3VzYWdlLAorCQkJICAgICBQQVJTRV9PUFRfS0VFUF9EQVNIREFTSCk7CiAJaWYgKGFyZ2MpIHsKIAkJYXJnID0gYXJndlswXTsKIAkJaWYgKGdldF9zaGExKGFyZywgcmV2KSkKZGlmZiAtLWdpdCBhL2J1aWx0aW4tY2xlYW4uYyBiL2J1aWx0aW4tY2xlYW4uYwppbmRleCA2Nzc4YTAzLi44MGE3ZmY5IDEwMDY0NAotLS0gYS9idWlsdGluLWNsZWFuLmMKKysrIGIvYnVpbHRpbi1jbGVhbi5jCkBAIC0xOSwxMSArMTksMTEgQEAKIAlOVUxMCiB9OwogCi1zdGF0aWMgaW50IGdpdF9jbGVhbl9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3N0YXRpYyBpbnQgZ2l0X2NsZWFuX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKIHsKIAlpZiAoIXN0cmNtcCh2YXIsICJjbGVhbi5yZXF1aXJlZm9yY2UiKSkKIAkJZm9yY2UgPSAhZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOwotCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSk7CisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CiB9CiAKIGludCBjbWRfY2xlYW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCkBAIC01MCw3ICs1MCw3IEBACiAJCU9QVF9FTkQoKQogCX07CiAKLQlnaXRfY29uZmlnKGdpdF9jbGVhbl9jb25maWcpOworCWdpdF9jb25maWcoZ2l0X2NsZWFuX2NvbmZpZywgTlVMTCk7CiAJaWYgKGZvcmNlIDwgMCkKIAkJZm9yY2UgPSAwOwogCWVsc2UKZGlmZiAtLWdpdCBhL2J1aWx0aW4tY2xvbmUuYyBiL2J1aWx0aW4tY2xvbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjNiMjJlCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi1jbG9uZS5jCkBAIC0wLDAgKzEsNTcyIEBACisvKgorICogQnVpbHRpbiAiZ2l0IGNsb25lIgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBLcmlzdGlhbiBIw7hnc2JlcmcgPGtyaEByZWRoYXQuY29tPiwKKyAqCQkgMjAwOCBEYW5pZWwgQmFya2Fsb3cgPGJhcmthbG93QGlhYmVydm9uLm9yZz4KKyAqIEJhc2VkIG9uIGdpdC1jb21taXQuc2ggYnkgSnVuaW8gQyBIYW1hbm8gYW5kIExpbnVzIFRvcnZhbGRzCisgKgorICogQ2xvbmUgYSByZXBvc2l0b3J5IGludG8gYSBkaWZmZXJlbnQgZGlyZWN0b3J5IHRoYXQgZG9lcyBub3QgeWV0IGV4aXN0LgorICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJmZXRjaC1wYWNrLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJ1bnBhY2stdHJlZXMuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJkaXIuaCIKKworLyoKKyAqIE92ZXJhbGwgRklYTUVzOgorICogIC0gcmVzcGVjdCBEQl9FTlZJUk9OTUVOVCBmb3IgLmdpdC9vYmplY3RzLgorICoKKyAqIEltcGxlbWVudGF0aW9uIG5vdGVzOgorICogIC0gZHJvcHBpbmcgdXNlLXNlcGFyYXRlLXJlbW90ZSBhbmQgbm8tc2VwYXJhdGUtcmVtb3RlIGNvbXBhdGliaWxpdHkKKyAqCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9jbG9uZV91c2FnZVtdID0geworCSJnaXQtY2xvbmUgW29wdGlvbnNdIFstLV0gPHJlcG8+IFs8ZGlyPl0iLAorCU5VTEwKK307CisKK3N0YXRpYyBpbnQgb3B0aW9uX3F1aWV0LCBvcHRpb25fbm9fY2hlY2tvdXQsIG9wdGlvbl9iYXJlOworc3RhdGljIGludCBvcHRpb25fbG9jYWwsIG9wdGlvbl9ub19oYXJkbGlua3MsIG9wdGlvbl9zaGFyZWQ7CitzdGF0aWMgY2hhciAqb3B0aW9uX3RlbXBsYXRlLCAqb3B0aW9uX3JlZmVyZW5jZSwgKm9wdGlvbl9kZXB0aDsKK3N0YXRpYyBjaGFyICpvcHRpb25fb3JpZ2luID0gTlVMTDsKK3N0YXRpYyBjaGFyICpvcHRpb25fdXBsb2FkX3BhY2sgPSAiZ2l0LXVwbG9hZC1wYWNrIjsKKworc3RhdGljIHN0cnVjdCBvcHRpb24gYnVpbHRpbl9jbG9uZV9vcHRpb25zW10gPSB7CisJT1BUX19RVUlFVCgmb3B0aW9uX3F1aWV0KSwKKwlPUFRfQk9PTEVBTignbicsICJuby1jaGVja291dCIsICZvcHRpb25fbm9fY2hlY2tvdXQsCisJCSAgICAiZG9uJ3QgY3JlYXRlIGEgY2hlY2tvdXQiKSwKKwlPUFRfQk9PTEVBTigwLCAiYmFyZSIsICZvcHRpb25fYmFyZSwgImNyZWF0ZSBhIGJhcmUgcmVwb3NpdG9yeSIpLAorCU9QVF9CT09MRUFOKDAsICJuYWtlZCIsICZvcHRpb25fYmFyZSwgImNyZWF0ZSBhIGJhcmUgcmVwb3NpdG9yeSIpLAorCU9QVF9CT09MRUFOKCdsJywgImxvY2FsIiwgJm9wdGlvbl9sb2NhbCwKKwkJICAgICJ0byBjbG9uZSBmcm9tIGEgbG9jYWwgcmVwb3NpdG9yeSIpLAorCU9QVF9CT09MRUFOKDAsICJuby1oYXJkbGlua3MiLCAmb3B0aW9uX25vX2hhcmRsaW5rcywKKwkJICAgICJkb24ndCB1c2UgbG9jYWwgaGFyZGxpbmtzLCBhbHdheXMgY29weSIpLAorCU9QVF9CT09MRUFOKCdzJywgInNoYXJlZCIsICZvcHRpb25fc2hhcmVkLAorCQkgICAgInNldHVwIGFzIHNoYXJlZCByZXBvc2l0b3J5IiksCisJT1BUX1NUUklORygwLCAidGVtcGxhdGUiLCAmb3B0aW9uX3RlbXBsYXRlLCAicGF0aCIsCisJCSAgICJwYXRoIHRoZSB0ZW1wbGF0ZSByZXBvc2l0b3J5IiksCisJT1BUX1NUUklORygwLCAicmVmZXJlbmNlIiwgJm9wdGlvbl9yZWZlcmVuY2UsICJyZXBvIiwKKwkJICAgInJlZmVyZW5jZSByZXBvc2l0b3J5IiksCisJT1BUX1NUUklORygnbycsICJvcmlnaW4iLCAmb3B0aW9uX29yaWdpbiwgImJyYW5jaCIsCisJCSAgICJ1c2UgPGJyYW5jaD4gaW5zdGVhZCBvciAnb3JpZ2luJyB0byB0cmFjayB1cHN0cmVhbSIpLAorCU9QVF9TVFJJTkcoJ3UnLCAidXBsb2FkLXBhY2siLCAmb3B0aW9uX3VwbG9hZF9wYWNrLCAicGF0aCIsCisJCSAgICJwYXRoIHRvIGdpdC11cGxvYWQtcGFjayBvbiB0aGUgcmVtb3RlIiksCisJT1BUX1NUUklORygwLCAiZGVwdGgiLCAmb3B0aW9uX2RlcHRoLCAiZGVwdGgiLAorCQkgICAgImNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgb2YgdGhhdCBkZXB0aCIpLAorCisJT1BUX0VORCgpCit9OworCitzdGF0aWMgY2hhciAqZ2V0X3JlcG9fcGF0aChjb25zdCBjaGFyICpyZXBvLCBpbnQgKmlzX2J1bmRsZSkKK3sKKwlzdGF0aWMgY2hhciAqc3VmZml4W10gPSB7ICIvLmdpdCIsICIuZ2l0IiwgIiIgfTsKKwlzdGF0aWMgY2hhciAqYnVuZGxlX3N1ZmZpeFtdID0geyAiLmJ1bmRsZSIsICIiIH07CisJc3RydWN0IHN0YXQgc3Q7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdWZmaXgpOyBpKyspIHsKKwkJY29uc3QgY2hhciAqcGF0aDsKKwkJcGF0aCA9IG1rcGF0aCgiJXMlcyIsIHJlcG8sIHN1ZmZpeFtpXSk7CisJCWlmICghc3RhdChwYXRoLCAmc3QpICYmIFNfSVNESVIoc3Quc3RfbW9kZSkpIHsKKwkJCSppc19idW5kbGUgPSAwOworCQkJcmV0dXJuIHhzdHJkdXAobWFrZV9ub25yZWxhdGl2ZV9wYXRoKHBhdGgpKTsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJ1bmRsZV9zdWZmaXgpOyBpKyspIHsKKwkJY29uc3QgY2hhciAqcGF0aDsKKwkJcGF0aCA9IG1rcGF0aCgiJXMlcyIsIHJlcG8sIGJ1bmRsZV9zdWZmaXhbaV0pOworCQlpZiAoIXN0YXQocGF0aCwgJnN0KSAmJiBTX0lTUkVHKHN0LnN0X21vZGUpKSB7CisJCQkqaXNfYnVuZGxlID0gMTsKKwkJCXJldHVybiB4c3RyZHVwKG1ha2Vfbm9ucmVsYXRpdmVfcGF0aChwYXRoKSk7CisJCX0KKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGNoYXIgKmd1ZXNzX2Rpcl9uYW1lKGNvbnN0IGNoYXIgKnJlcG8sIGludCBpc19idW5kbGUpCit7CisJY29uc3QgY2hhciAqcCwgKnN0YXJ0LCAqZW5kLCAqbGltaXQ7CisJaW50IGFmdGVyX3NsYXNoX29yX2NvbG9uOworCisJLyogR3Vlc3MgZGlyIG5hbWUgZnJvbSByZXBvc2l0b3J5OiBzdHJpcCB0cmFpbGluZyAnLycsCisJICogc3RyaXAgdHJhaWxpbmcgJ1s6L10qLntnaXQsYnVuZGxlfScsIHN0cmlwIGxlYWRpbmcgJy4qWy86XScuICovCisKKwlhZnRlcl9zbGFzaF9vcl9jb2xvbiA9IDE7CisJbGltaXQgPSByZXBvICsgc3RybGVuKHJlcG8pOworCXN0YXJ0ID0gcmVwbzsKKwllbmQgPSBsaW1pdDsKKwlmb3IgKHAgPSByZXBvOyBwIDwgbGltaXQ7IHArKykgeworCQljb25zdCBjaGFyICpwcmVmaXggPSBpc19idW5kbGUgPyAiLmJ1bmRsZSIgOiAiLmdpdCI7CisJCWlmICghcHJlZml4Y21wKHAsIHByZWZpeCkpIHsKKwkJCWlmICghYWZ0ZXJfc2xhc2hfb3JfY29sb24pCisJCQkJZW5kID0gcDsKKwkJCXAgKz0gc3RybGVuKHByZWZpeCkgLSAxOworCQl9IGVsc2UgaWYgKCFwcmVmaXhjbXAocCwgIi5idW5kbGUiKSkgeworCQkJaWYgKCFhZnRlcl9zbGFzaF9vcl9jb2xvbikKKwkJCQllbmQgPSBwOworCQkJcCArPSA3OworCQl9IGVsc2UgaWYgKCpwID09ICcvJyB8fCAqcCA9PSAnOicpIHsKKwkJCWlmIChlbmQgPT0gbGltaXQpCisJCQkJZW5kID0gcDsKKwkJCWFmdGVyX3NsYXNoX29yX2NvbG9uID0gMTsKKwkJfSBlbHNlIGlmIChhZnRlcl9zbGFzaF9vcl9jb2xvbikgeworCQkJc3RhcnQgPSBwOworCQkJZW5kID0gbGltaXQ7CisJCQlhZnRlcl9zbGFzaF9vcl9jb2xvbiA9IDA7CisJCX0KKwl9CisKKwlyZXR1cm4geHN0cm5kdXAoc3RhcnQsIGVuZCAtIHN0YXJ0KTsKK30KKworc3RhdGljIGludCBpc19kaXJlY3RvcnkoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3Qgc3RhdCBidWY7CisKKwlyZXR1cm4gIXN0YXQocGF0aCwgJmJ1ZikgJiYgU19JU0RJUihidWYuc3RfbW9kZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX3JlZmVyZW5jZShjb25zdCBjaGFyICpyZXBvKQoreworCWNvbnN0IGNoYXIgKnJlZl9naXQ7CisJY2hhciAqcmVmX2dpdF9jb3B5OworCisJc3RydWN0IHJlbW90ZSAqcmVtb3RlOworCXN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydDsKKwljb25zdCBzdHJ1Y3QgcmVmICpleHRyYTsKKworCXJlZl9naXQgPSBtYWtlX2Fic29sdXRlX3BhdGgob3B0aW9uX3JlZmVyZW5jZSk7CisKKwlpZiAoaXNfZGlyZWN0b3J5KG1rcGF0aCgiJXMvLmdpdC9vYmplY3RzIiwgcmVmX2dpdCkpKQorCQlyZWZfZ2l0ID0gbWtwYXRoKCIlcy8uZ2l0IiwgcmVmX2dpdCk7CisJZWxzZSBpZiAoIWlzX2RpcmVjdG9yeShta3BhdGgoIiVzL29iamVjdHMiLCByZWZfZ2l0KSkpCisJCWRpZSgicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBub3QgYSBsb2NhbCBkaXJlY3RvcnkuIiwKKwkJICAgIG9wdGlvbl9yZWZlcmVuY2UpOworCisJcmVmX2dpdF9jb3B5ID0geHN0cmR1cChyZWZfZ2l0KTsKKworCWFkZF90b19hbHRlcm5hdGVzX2ZpbGUocmVmX2dpdF9jb3B5KTsKKworCXJlbW90ZSA9IHJlbW90ZV9nZXQocmVmX2dpdF9jb3B5KTsKKwl0cmFuc3BvcnQgPSB0cmFuc3BvcnRfZ2V0KHJlbW90ZSwgcmVmX2dpdF9jb3B5KTsKKwlmb3IgKGV4dHJhID0gdHJhbnNwb3J0X2dldF9yZW1vdGVfcmVmcyh0cmFuc3BvcnQpOyBleHRyYTsKKwkgICAgIGV4dHJhID0gZXh0cmEtPm5leHQpCisJCWFkZF9leHRyYV9yZWYoZXh0cmEtPm5hbWUsIGV4dHJhLT5vbGRfc2hhMSwgMCk7CisKKwl0cmFuc3BvcnRfZGlzY29ubmVjdCh0cmFuc3BvcnQpOworCisJZnJlZShyZWZfZ2l0X2NvcHkpOworfQorCitzdGF0aWMgdm9pZCBjb3B5X29yX2xpbmtfZGlyZWN0b3J5KGNoYXIgKnNyYywgY2hhciAqZGVzdCkKK3sKKwlzdHJ1Y3QgZGlyZW50ICpkZTsKKwlzdHJ1Y3Qgc3RhdCBidWY7CisJaW50IHNyY19sZW4sIGRlc3RfbGVuOworCURJUiAqZGlyOworCisJZGlyID0gb3BlbmRpcihzcmMpOworCWlmICghZGlyKQorCQlkaWUoImZhaWxlZCB0byBvcGVuICVzXG4iLCBzcmMpOworCisJaWYgKG1rZGlyKGRlc3QsIDA3NzcpKSB7CisJCWlmIChlcnJubyAhPSBFRVhJU1QpCisJCQlkaWUoImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICVzXG4iLCBkZXN0KTsKKwkJZWxzZSBpZiAoc3RhdChkZXN0LCAmYnVmKSkKKwkJCWRpZSgiZmFpbGVkIHRvIHN0YXQgJXNcbiIsIGRlc3QpOworCQllbHNlIGlmICghU19JU0RJUihidWYuc3RfbW9kZSkpCisJCQlkaWUoIiVzIGV4aXN0cyBhbmQgaXMgbm90IGEgZGlyZWN0b3J5XG4iLCBkZXN0KTsKKwl9CisKKwlzcmNfbGVuID0gc3RybGVuKHNyYyk7CisJc3JjW3NyY19sZW5dID0gJy8nOworCWRlc3RfbGVuID0gc3RybGVuKGRlc3QpOworCWRlc3RbZGVzdF9sZW5dID0gJy8nOworCisJd2hpbGUgKChkZSA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkgeworCQlzdHJjcHkoc3JjICsgc3JjX2xlbiArIDEsIGRlLT5kX25hbWUpOworCQlzdHJjcHkoZGVzdCArIGRlc3RfbGVuICsgMSwgZGUtPmRfbmFtZSk7CisJCWlmIChzdGF0KHNyYywgJmJ1ZikpIHsKKwkJCXdhcm5pbmcgKCJmYWlsZWQgdG8gc3RhdCAlc1xuIiwgc3JjKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChTX0lTRElSKGJ1Zi5zdF9tb2RlKSkgeworCQkJaWYgKGRlLT5kX25hbWVbMF0gIT0gJy4nKQorCQkJCWNvcHlfb3JfbGlua19kaXJlY3Rvcnkoc3JjLCBkZXN0KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHVubGluayhkZXN0KSAmJiBlcnJubyAhPSBFTk9FTlQpCisJCQlkaWUoImZhaWxlZCB0byB1bmxpbmsgJXNcbiIsIGRlc3QpOworCQlpZiAoIW9wdGlvbl9ub19oYXJkbGlua3MpIHsKKwkJCWlmICghbGluayhzcmMsIGRlc3QpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKG9wdGlvbl9sb2NhbCkKKwkJCQlkaWUoImZhaWxlZCB0byBjcmVhdGUgbGluayAlc1xuIiwgZGVzdCk7CisJCQlvcHRpb25fbm9faGFyZGxpbmtzID0gMTsKKwkJfQorCQlpZiAoY29weV9maWxlKGRlc3QsIHNyYywgMDY2NikpCisJCQlkaWUoImZhaWxlZCB0byBjb3B5IGZpbGUgdG8gJXNcbiIsIGRlc3QpOworCX0KKwljbG9zZWRpcihkaXIpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZiAqY2xvbmVfbG9jYWwoY29uc3QgY2hhciAqc3JjX3JlcG8sCisJCQkJICAgICBjb25zdCBjaGFyICpkZXN0X3JlcG8pCit7CisJY29uc3Qgc3RydWN0IHJlZiAqcmV0OworCWNoYXIgc3JjW1BBVEhfTUFYXTsKKwljaGFyIGRlc3RbUEFUSF9NQVhdOworCXN0cnVjdCByZW1vdGUgKnJlbW90ZTsKKwlzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQ7CisKKwlpZiAob3B0aW9uX3NoYXJlZCkKKwkJYWRkX3RvX2FsdGVybmF0ZXNfZmlsZShzcmNfcmVwbyk7CisJZWxzZSB7CisJCXNucHJpbnRmKHNyYywgUEFUSF9NQVgsICIlcy9vYmplY3RzIiwgc3JjX3JlcG8pOworCQlzbnByaW50ZihkZXN0LCBQQVRIX01BWCwgIiVzL29iamVjdHMiLCBkZXN0X3JlcG8pOworCQljb3B5X29yX2xpbmtfZGlyZWN0b3J5KHNyYywgZGVzdCk7CisJfQorCisJcmVtb3RlID0gcmVtb3RlX2dldChzcmNfcmVwbyk7CisJdHJhbnNwb3J0ID0gdHJhbnNwb3J0X2dldChyZW1vdGUsIHNyY19yZXBvKTsKKwlyZXQgPSB0cmFuc3BvcnRfZ2V0X3JlbW90ZV9yZWZzKHRyYW5zcG9ydCk7CisJdHJhbnNwb3J0X2Rpc2Nvbm5lY3QodHJhbnNwb3J0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3QgY2hhciAqanVua193b3JrX3RyZWU7CitzdGF0aWMgY29uc3QgY2hhciAqanVua19naXRfZGlyOworcGlkX3QganVua19waWQ7CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9qdW5rKHZvaWQpCit7CisJc3RydWN0IHN0cmJ1ZiBzYjsKKwlpZiAoZ2V0cGlkKCkgIT0ganVua19waWQpCisJCXJldHVybjsKKwlzdHJidWZfaW5pdCgmc2IsIDApOworCWlmIChqdW5rX2dpdF9kaXIpIHsKKwkJc3RyYnVmX2FkZHN0cigmc2IsIGp1bmtfZ2l0X2Rpcik7CisJCXJlbW92ZV9kaXJfcmVjdXJzaXZlbHkoJnNiLCAwKTsKKwkJc3RyYnVmX3Jlc2V0KCZzYik7CisJfQorCWlmIChqdW5rX3dvcmtfdHJlZSkgeworCQlzdHJidWZfYWRkc3RyKCZzYiwganVua193b3JrX3RyZWUpOworCQlyZW1vdmVfZGlyX3JlY3Vyc2l2ZWx5KCZzYiwgMCk7CisJCXN0cmJ1Zl9yZXNldCgmc2IpOworCX0KK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX2p1bmtfb25fc2lnbmFsKGludCBzaWdubykKK3sKKwlyZW1vdmVfanVuaygpOworCXNpZ25hbChTSUdJTlQsIFNJR19ERkwpOworCXJhaXNlKHNpZ25vKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCByZWYgKmxvY2F0ZV9oZWFkKGNvbnN0IHN0cnVjdCByZWYgKnJlZnMsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgcmVmICptYXBwZWRfcmVmcywKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCByZWYgKipyZW1vdGVfaGVhZF9wKQoreworCWNvbnN0IHN0cnVjdCByZWYgKnJlbW90ZV9oZWFkID0gTlVMTDsKKwljb25zdCBzdHJ1Y3QgcmVmICpyZW1vdGVfbWFzdGVyID0gTlVMTDsKKwljb25zdCBzdHJ1Y3QgcmVmICpyOworCWZvciAociA9IHJlZnM7IHI7IHIgPSByLT5uZXh0KQorCQlpZiAoIXN0cmNtcChyLT5uYW1lLCAiSEVBRCIpKQorCQkJcmVtb3RlX2hlYWQgPSByOworCisJZm9yIChyID0gbWFwcGVkX3JlZnM7IHI7IHIgPSByLT5uZXh0KQorCQlpZiAoIXN0cmNtcChyLT5uYW1lLCAicmVmcy9oZWFkcy9tYXN0ZXIiKSkKKwkJCXJlbW90ZV9tYXN0ZXIgPSByOworCisJaWYgKHJlbW90ZV9oZWFkX3ApCisJCSpyZW1vdGVfaGVhZF9wID0gcmVtb3RlX2hlYWQ7CisKKwkvKiBJZiB0aGVyZSdzIG5vIEhFQUQgdmFsdWUgYXQgYWxsLCBuZXZlciBtaW5kLiAqLworCWlmICghcmVtb3RlX2hlYWQpCisJCXJldHVybiBOVUxMOworCisJLyogSWYgcmVmcy9oZWFkcy9tYXN0ZXIgY291bGQgYmUgcmlnaHQsIGl0IGlzLiAqLworCWlmIChyZW1vdGVfbWFzdGVyICYmICFoYXNoY21wKHJlbW90ZV9tYXN0ZXItPm9sZF9zaGExLAorCQkJCSAgICAgIHJlbW90ZV9oZWFkLT5vbGRfc2hhMSkpCisJCXJldHVybiByZW1vdGVfbWFzdGVyOworCisJLyogTG9vayBmb3IgYW5vdGhlciByZWYgdGhhdCBwb2ludHMgdGhlcmUgKi8KKwlmb3IgKHIgPSBtYXBwZWRfcmVmczsgcjsgciA9IHItPm5leHQpCisJCWlmIChyICE9IHJlbW90ZV9oZWFkICYmCisJCSAgICAhaGFzaGNtcChyLT5vbGRfc2hhMSwgcmVtb3RlX2hlYWQtPm9sZF9zaGExKSkKKwkJCXJldHVybiByOworCisJLyogTm90aGluZyBpcyB0aGUgc2FtZSAqLworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IHJlZiAqd3JpdGVfcmVtb3RlX3JlZnMoY29uc3Qgc3RydWN0IHJlZiAqcmVmcywKKwkJc3RydWN0IHJlZnNwZWMgKnJlZnNwZWMsIGNvbnN0IGNoYXIgKnJlZmxvZykKK3sKKwlzdHJ1Y3QgcmVmICpsb2NhbF9yZWZzID0gTlVMTDsKKwlzdHJ1Y3QgcmVmICoqdGFpbCA9ICZsb2NhbF9yZWZzOworCXN0cnVjdCByZWYgKnI7CisKKwlnZXRfZmV0Y2hfbWFwKHJlZnMsIHJlZnNwZWMsICZ0YWlsLCAwKTsKKwlnZXRfZmV0Y2hfbWFwKHJlZnMsIHRhZ19yZWZzcGVjLCAmdGFpbCwgMCk7CisKKwlmb3IgKHIgPSBsb2NhbF9yZWZzOyByOyByID0gci0+bmV4dCkKKwkJdXBkYXRlX3JlZihyZWZsb2csCisJCQkgICByLT5wZWVyX3JlZi0+bmFtZSwgci0+b2xkX3NoYTEsIE5VTEwsIDAsIERJRV9PTl9FUlIpOworCXJldHVybiBsb2NhbF9yZWZzOworfQorCitpbnQgY21kX2Nsb25lKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCB1c2VfbG9jYWxfaGFyZGxpbmtzID0gMTsKKwlpbnQgdXNlX3NlcGFyYXRlX3JlbW90ZSA9IDE7CisJaW50IGlzX2J1bmRsZSA9IDA7CisJc3RydWN0IHN0YXQgYnVmOworCWNvbnN0IGNoYXIgKnJlcG9fbmFtZSwgKnJlcG8sICp3b3JrX3RyZWUsICpnaXRfZGlyOworCWNoYXIgKnBhdGgsICpkaXI7CisJY29uc3Qgc3RydWN0IHJlZiAqcmVmcywgKmhlYWRfcG9pbnRzX2F0LCAqcmVtb3RlX2hlYWQsICptYXBwZWRfcmVmczsKKwljaGFyIGJyYW5jaF90b3BbMjU2XSwga2V5WzI1Nl0sIHZhbHVlWzI1Nl07CisJc3RydWN0IHN0cmJ1ZiByZWZsb2dfbXNnOworCXN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCA9IE5VTEw7CisKKwlzdHJ1Y3QgcmVmc3BlYyByZWZzcGVjOworCisJanVua19waWQgPSBnZXRwaWQoKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGJ1aWx0aW5fY2xvbmVfb3B0aW9ucywKKwkJCSAgICAgYnVpbHRpbl9jbG9uZV91c2FnZSwgMCk7CisKKwlpZiAoYXJnYyA9PSAwKQorCQlkaWUoIllvdSBtdXN0IHNwZWNpZnkgYSByZXBvc2l0b3J5IHRvIGNsb25lLiIpOworCisJaWYgKG9wdGlvbl9ub19oYXJkbGlua3MpCisJCXVzZV9sb2NhbF9oYXJkbGlua3MgPSAwOworCisJaWYgKG9wdGlvbl9iYXJlKSB7CisJCWlmIChvcHRpb25fb3JpZ2luKQorCQkJZGllKCItLWJhcmUgYW5kIC0tb3JpZ2luICVzIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iLAorCQkJICAgIG9wdGlvbl9vcmlnaW4pOworCQlvcHRpb25fbm9fY2hlY2tvdXQgPSAxOworCQl1c2Vfc2VwYXJhdGVfcmVtb3RlID0gMDsKKwl9CisKKwlpZiAoIW9wdGlvbl9vcmlnaW4pCisJCW9wdGlvbl9vcmlnaW4gPSAib3JpZ2luIjsKKworCXJlcG9fbmFtZSA9IGFyZ3ZbMF07CisKKwlwYXRoID0gZ2V0X3JlcG9fcGF0aChyZXBvX25hbWUsICZpc19idW5kbGUpOworCWlmIChwYXRoKQorCQlyZXBvID0gcGF0aDsKKwllbHNlIGlmICghc3RyY2hyKHJlcG9fbmFtZSwgJzonKSkKKwkJcmVwbyA9IHhzdHJkdXAobWFrZV9hYnNvbHV0ZV9wYXRoKHJlcG9fbmFtZSkpOworCWVsc2UKKwkJcmVwbyA9IHJlcG9fbmFtZTsKKworCWlmIChhcmdjID09IDIpCisJCWRpciA9IHhzdHJkdXAoYXJndlsxXSk7CisJZWxzZQorCQlkaXIgPSBndWVzc19kaXJfbmFtZShyZXBvX25hbWUsIGlzX2J1bmRsZSk7CisKKwlpZiAoIXN0YXQoZGlyLCAmYnVmKSkKKwkJZGllKCJkZXN0aW5hdGlvbiBkaXJlY3RvcnkgJyVzJyBhbHJlYWR5IGV4aXN0cy4iLCBkaXIpOworCisJc3RyYnVmX2luaXQoJnJlZmxvZ19tc2csIDApOworCXN0cmJ1Zl9hZGRmKCZyZWZsb2dfbXNnLCAiY2xvbmU6IGZyb20gJXMiLCByZXBvKTsKKworCWlmIChvcHRpb25fYmFyZSkKKwkJd29ya190cmVlID0gTlVMTDsKKwllbHNlIHsKKwkJd29ya190cmVlID0gZ2V0ZW52KCJHSVRfV09SS19UUkVFIik7CisJCWlmICh3b3JrX3RyZWUgJiYgIXN0YXQod29ya190cmVlLCAmYnVmKSkKKwkJCWRpZSgid29ya2luZyB0cmVlICclcycgYWxyZWFkeSBleGlzdHMuIiwgd29ya190cmVlKTsKKwl9CisKKwlpZiAob3B0aW9uX2JhcmUgfHwgd29ya190cmVlKQorCQlnaXRfZGlyID0geHN0cmR1cChkaXIpOworCWVsc2UgeworCQl3b3JrX3RyZWUgPSBkaXI7CisJCWdpdF9kaXIgPSB4c3RyZHVwKG1rcGF0aCgiJXMvLmdpdCIsIGRpcikpOworCX0KKworCWlmICghb3B0aW9uX2JhcmUpIHsKKwkJanVua193b3JrX3RyZWUgPSB3b3JrX3RyZWU7CisJCWlmIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzX2NvbnN0KHdvcmtfdHJlZSkgPCAwKQorCQkJZGllKCJjb3VsZCBub3QgY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgb2YgJyVzJyIsCisJCQkJCXdvcmtfdHJlZSk7CisJCWlmIChta2Rpcih3b3JrX3RyZWUsIDA3NTUpKQorCQkJZGllKCJjb3VsZCBub3QgY3JlYXRlIHdvcmsgdHJlZSBkaXIgJyVzJy4iLCB3b3JrX3RyZWUpOworCQlzZXRfZ2l0X3dvcmtfdHJlZSh3b3JrX3RyZWUpOworCX0KKwlqdW5rX2dpdF9kaXIgPSBnaXRfZGlyOworCWF0ZXhpdChyZW1vdmVfanVuayk7CisJc2lnbmFsKFNJR0lOVCwgcmVtb3ZlX2p1bmtfb25fc2lnbmFsKTsKKworCXNldGVudihDT05GSUdfRU5WSVJPTk1FTlQsIHhzdHJkdXAobWtwYXRoKCIlcy9jb25maWciLCBnaXRfZGlyKSksIDEpOworCisJaWYgKHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXNfY29uc3QoZ2l0X2RpcikgPCAwKQorCQlkaWUoImNvdWxkIG5vdCBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBvZiAnJXMnIiwgZ2l0X2Rpcik7CisJc2V0X2dpdF9kaXIobWFrZV9hYnNvbHV0ZV9wYXRoKGdpdF9kaXIpKTsKKworCWluaXRfZGIob3B0aW9uX3RlbXBsYXRlLCBvcHRpb25fcXVpZXQgPyBJTklUX0RCX1FVSUVUIDogMCk7CisKKwkvKgorCSAqIEF0IHRoaXMgcG9pbnQsIHRoZSBjb25maWcgZXhpc3RzLCBzbyB3ZSBkbyBub3QgbmVlZCB0aGUKKwkgKiBlbnZpcm9ubWVudCB2YXJpYWJsZS4gIFdlIGFjdHVhbGx5IG5lZWQgdG8gdW5zZXQgaXQsIHRvbywgdG8KKwkgKiByZS1lbmFibGUgcGFyc2luZyBvZiB0aGUgZ2xvYmFsIGNvbmZpZ3MuCisJICovCisJdW5zZXRlbnYoQ09ORklHX0VOVklST05NRU5UKTsKKworCWlmIChvcHRpb25fcmVmZXJlbmNlKQorCQlzZXR1cF9yZWZlcmVuY2UoZ2l0X2Rpcik7CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisKKwlpZiAob3B0aW9uX2JhcmUpIHsKKwkJc3RyY3B5KGJyYW5jaF90b3AsICJyZWZzL2hlYWRzLyIpOworCisJCWdpdF9jb25maWdfc2V0KCJjb3JlLmJhcmUiLCAidHJ1ZSIpOworCX0gZWxzZSB7CisJCXNucHJpbnRmKGJyYW5jaF90b3AsIHNpemVvZihicmFuY2hfdG9wKSwKKwkJCSAicmVmcy9yZW1vdGVzLyVzLyIsIG9wdGlvbl9vcmlnaW4pOworCisJCS8qIENvbmZpZ3VyZSB0aGUgcmVtb3RlICovCisJCXNucHJpbnRmKGtleSwgc2l6ZW9mKGtleSksICJyZW1vdGUuJXMudXJsIiwgb3B0aW9uX29yaWdpbik7CisJCWdpdF9jb25maWdfc2V0KGtleSwgcmVwbyk7CisKKwkJc25wcmludGYoa2V5LCBzaXplb2Yoa2V5KSwgInJlbW90ZS4lcy5mZXRjaCIsIG9wdGlvbl9vcmlnaW4pOworCQlzbnByaW50Zih2YWx1ZSwgc2l6ZW9mKHZhbHVlKSwKKwkJCQkiK3JlZnMvaGVhZHMvKjolcyoiLCBicmFuY2hfdG9wKTsKKwkJZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXIoa2V5LCB2YWx1ZSwgIl4kIiwgMCk7CisJfQorCisJcmVmc3BlYy5mb3JjZSA9IDA7CisJcmVmc3BlYy5wYXR0ZXJuID0gMTsKKwlyZWZzcGVjLnNyYyA9ICJyZWZzL2hlYWRzLyI7CisJcmVmc3BlYy5kc3QgPSBicmFuY2hfdG9wOworCisJaWYgKHBhdGggJiYgIWlzX2J1bmRsZSkKKwkJcmVmcyA9IGNsb25lX2xvY2FsKHBhdGgsIGdpdF9kaXIpOworCWVsc2UgeworCQlzdHJ1Y3QgcmVtb3RlICpyZW1vdGUgPSByZW1vdGVfZ2V0KGFyZ3ZbMF0pOworCQl0cmFuc3BvcnQgPSB0cmFuc3BvcnRfZ2V0KHJlbW90ZSwgcmVtb3RlLT51cmxbMF0pOworCisJCWlmICghdHJhbnNwb3J0LT5nZXRfcmVmc19saXN0IHx8ICF0cmFuc3BvcnQtPmZldGNoKQorCQkJZGllKCJEb24ndCBrbm93IGhvdyB0byBjbG9uZSAlcyIsIHRyYW5zcG9ydC0+dXJsKTsKKworCQl0cmFuc3BvcnRfc2V0X29wdGlvbih0cmFuc3BvcnQsIFRSQU5TX09QVF9LRUVQLCAieWVzIik7CisKKwkJaWYgKG9wdGlvbl9kZXB0aCkKKwkJCXRyYW5zcG9ydF9zZXRfb3B0aW9uKHRyYW5zcG9ydCwgVFJBTlNfT1BUX0RFUFRILAorCQkJCQkgICAgIG9wdGlvbl9kZXB0aCk7CisKKwkJaWYgKG9wdGlvbl9xdWlldCkKKwkJCXRyYW5zcG9ydC0+dmVyYm9zZSA9IC0xOworCisJCWlmIChvcHRpb25fdXBsb2FkX3BhY2spCisJCQl0cmFuc3BvcnRfc2V0X29wdGlvbih0cmFuc3BvcnQsIFRSQU5TX09QVF9VUExPQURQQUNLLAorCQkJCQkgICAgIG9wdGlvbl91cGxvYWRfcGFjayk7CisKKwkJcmVmcyA9IHRyYW5zcG9ydF9nZXRfcmVtb3RlX3JlZnModHJhbnNwb3J0KTsKKwkJdHJhbnNwb3J0X2ZldGNoX3JlZnModHJhbnNwb3J0LCByZWZzKTsKKwl9CisKKwljbGVhcl9leHRyYV9yZWZzKCk7CisKKwltYXBwZWRfcmVmcyA9IHdyaXRlX3JlbW90ZV9yZWZzKHJlZnMsICZyZWZzcGVjLCByZWZsb2dfbXNnLmJ1Zik7CisKKwloZWFkX3BvaW50c19hdCA9IGxvY2F0ZV9oZWFkKHJlZnMsIG1hcHBlZF9yZWZzLCAmcmVtb3RlX2hlYWQpOworCisJaWYgKGhlYWRfcG9pbnRzX2F0KSB7CisJCS8qIExvY2FsIGRlZmF1bHQgYnJhbmNoIGxpbmsgKi8KKwkJY3JlYXRlX3N5bXJlZigiSEVBRCIsIGhlYWRfcG9pbnRzX2F0LT5uYW1lLCBOVUxMKTsKKworCQlpZiAoIW9wdGlvbl9iYXJlKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIGhlYWRfcmVmOworCQkJY29uc3QgY2hhciAqaGVhZCA9IGhlYWRfcG9pbnRzX2F0LT5uYW1lOworCisJCQlpZiAoIXByZWZpeGNtcChoZWFkLCAicmVmcy9oZWFkcy8iKSkKKwkJCQloZWFkICs9IDExOworCisJCQkvKiBTZXQgdXAgdGhlIGluaXRpYWwgbG9jYWwgYnJhbmNoICovCisKKwkJCS8qIExvY2FsIGJyYW5jaCBpbml0aWFsIHZhbHVlICovCisJCQl1cGRhdGVfcmVmKHJlZmxvZ19tc2cuYnVmLCAiSEVBRCIsCisJCQkJICAgaGVhZF9wb2ludHNfYXQtPm9sZF9zaGExLAorCQkJCSAgIE5VTEwsIDAsIERJRV9PTl9FUlIpOworCisJCQlzdHJidWZfaW5pdCgmaGVhZF9yZWYsIDApOworCQkJc3RyYnVmX2FkZHN0cigmaGVhZF9yZWYsIGJyYW5jaF90b3ApOworCQkJc3RyYnVmX2FkZHN0cigmaGVhZF9yZWYsICJIRUFEIik7CisKKwkJCS8qIFJlbW90ZSBicmFuY2ggbGluayAqLworCQkJY3JlYXRlX3N5bXJlZihoZWFkX3JlZi5idWYsCisJCQkJICAgICAgaGVhZF9wb2ludHNfYXQtPnBlZXJfcmVmLT5uYW1lLAorCQkJCSAgICAgIHJlZmxvZ19tc2cuYnVmKTsKKworCQkJc25wcmludGYoa2V5LCBzaXplb2Yoa2V5KSwgImJyYW5jaC4lcy5yZW1vdGUiLCBoZWFkKTsKKwkJCWdpdF9jb25maWdfc2V0KGtleSwgb3B0aW9uX29yaWdpbik7CisJCQlzbnByaW50ZihrZXksIHNpemVvZihrZXkpLCAiYnJhbmNoLiVzLm1lcmdlIiwgaGVhZCk7CisJCQlnaXRfY29uZmlnX3NldChrZXksIGhlYWRfcG9pbnRzX2F0LT5uYW1lKTsKKwkJfQorCX0gZWxzZSBpZiAocmVtb3RlX2hlYWQpIHsKKwkJLyogU291cmNlIGhhZCBkZXRhY2hlZCBIRUFEIHBvaW50aW5nIHNvbWV3aGVyZS4gKi8KKwkJaWYgKCFvcHRpb25fYmFyZSkKKwkJCXVwZGF0ZV9yZWYocmVmbG9nX21zZy5idWYsICJIRUFEIiwKKwkJCQkgICByZW1vdGVfaGVhZC0+b2xkX3NoYTEsCisJCQkJICAgTlVMTCwgUkVGX05PREVSRUYsIERJRV9PTl9FUlIpOworCX0gZWxzZSB7CisJCS8qIE5vdGhpbmcgdG8gY2hlY2tvdXQgb3V0ICovCisJCWlmICghb3B0aW9uX25vX2NoZWNrb3V0KQorCQkJd2FybmluZygicmVtb3RlIEhFQUQgcmVmZXJzIHRvIG5vbmV4aXN0ZW50IHJlZiwgIgorCQkJCSJ1bmFibGUgdG8gY2hlY2tvdXQuXG4iKTsKKwkJb3B0aW9uX25vX2NoZWNrb3V0ID0gMTsKKwl9CisKKwlpZiAodHJhbnNwb3J0KQorCQl0cmFuc3BvcnRfdW5sb2NrX3BhY2sodHJhbnNwb3J0KTsKKworCWlmICghb3B0aW9uX25vX2NoZWNrb3V0KSB7CisJCXN0cnVjdCBsb2NrX2ZpbGUgKmxvY2tfZmlsZSA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBsb2NrX2ZpbGUpKTsKKwkJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zIG9wdHM7CisJCXN0cnVjdCB0cmVlICp0cmVlOworCQlzdHJ1Y3QgdHJlZV9kZXNjIHQ7CisJCWludCBmZDsKKworCQkvKiBXZSBuZWVkIHRvIGJlIGluIHRoZSBuZXcgd29yayB0cmVlIGZvciB0aGUgY2hlY2tvdXQgKi8KKwkJc2V0dXBfd29ya190cmVlKCk7CisKKwkJZmQgPSBob2xkX2xvY2tlZF9pbmRleChsb2NrX2ZpbGUsIDEpOworCisJCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mIG9wdHMpOworCQlvcHRzLnVwZGF0ZSA9IDE7CisJCW9wdHMubWVyZ2UgPSAxOworCQlvcHRzLmZuID0gb25ld2F5X21lcmdlOworCQlvcHRzLnZlcmJvc2VfdXBkYXRlID0gIW9wdGlvbl9xdWlldDsKKwkJb3B0cy5zcmNfaW5kZXggPSAmdGhlX2luZGV4OworCQlvcHRzLmRzdF9pbmRleCA9ICZ0aGVfaW5kZXg7CisKKwkJdHJlZSA9IHBhcnNlX3RyZWVfaW5kaXJlY3QocmVtb3RlX2hlYWQtPm9sZF9zaGExKTsKKwkJcGFyc2VfdHJlZSh0cmVlKTsKKwkJaW5pdF90cmVlX2Rlc2MoJnQsIHRyZWUtPmJ1ZmZlciwgdHJlZS0+c2l6ZSk7CisJCXVucGFja190cmVlcygxLCAmdCwgJm9wdHMpOworCisJCWlmICh3cml0ZV9jYWNoZShmZCwgYWN0aXZlX2NhY2hlLCBhY3RpdmVfbnIpIHx8CisJCSAgICBjb21taXRfbG9ja2VkX2luZGV4KGxvY2tfZmlsZSkpCisJCQlkaWUoInVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIpOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZyZWZsb2dfbXNnKTsKKwlqdW5rX3BpZCA9IDA7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluLWNvbW1pdC10cmVlLmMgYi9idWlsdGluLWNvbW1pdC10cmVlLmMKaW5kZXggNjYxMGQxOC4uZTVlNGJkYiAxMDA2NDQKLS0tIGEvYnVpbHRpbi1jb21taXQtdHJlZS5jCisrKyBiL2J1aWx0aW4tY29tbWl0LXRyZWUuYwpAQCAtNjAsNyArNjAsNyBAQAogCXN0cnVjdCBzdHJidWYgYnVmZmVyOwogCWludCBlbmNvZGluZ19pc191dGY4OwogCi0JZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcpOworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKIAogCWlmIChhcmdjIDwgMikKIAkJdXNhZ2UoY29tbWl0X3RyZWVfdXNhZ2UpOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1jb21taXQuYyBiL2J1aWx0aW4tY29tbWl0LmMKaW5kZXggYjBmZTY5ZS4uMGM2ZDFmNCAxMDA2NDQKLS0tIGEvYnVpbHRpbi1jb21taXQuYworKysgYi9idWlsdGluLWNvbW1pdC5jCkBAIC00NSw4ICs0NSwxMCBAQAogCUNPTU1JVF9QQVJUSUFMLAogfSBjb21taXRfc3R5bGU7CiAKLXN0YXRpYyBjaGFyICpsb2dmaWxlLCAqZm9yY2VfYXV0aG9yLCAqdGVtcGxhdGVfZmlsZTsKK3N0YXRpYyBjb25zdCBjaGFyICpsb2dmaWxlLCAqZm9yY2VfYXV0aG9yOworc3RhdGljIGNvbnN0IGNoYXIgKnRlbXBsYXRlX2ZpbGU7CiBzdGF0aWMgY2hhciAqZWRpdF9tZXNzYWdlLCAqdXNlX21lc3NhZ2U7CitzdGF0aWMgY2hhciAqYXV0aG9yX25hbWUsICphdXRob3JfZW1haWwsICphdXRob3JfZGF0ZTsKIHN0YXRpYyBpbnQgYWxsLCBlZGl0X2ZsYWcsIGFsc28sIGludGVyYWN0aXZlLCBvbmx5LCBhbWVuZCwgc2lnbm9mZjsKIHN0YXRpYyBpbnQgcXVpZXQsIHZlcmJvc2UsIHVudHJhY2tlZF9maWxlcywgbm9fdmVyaWZ5LCBhbGxvd19lbXB0eTsKIC8qCkBAIC0xNzUsMTAgKzE3NywxMyBAQAogewogCWludCBpOwogCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5ucjsgaSsrKSB7CisJCXN0cnVjdCBzdGF0IHN0OwogCQlzdHJ1Y3QgcGF0aF9saXN0X2l0ZW0gKnAgPSAmKGxpc3QtPml0ZW1zW2ldKTsKLQkJaWYgKGZpbGVfZXhpc3RzKHAtPnBhdGgpKQotCQkJYWRkX2ZpbGVfdG9fY2FjaGUocC0+cGF0aCwgMCk7Ci0JCWVsc2UKKworCQlpZiAoIWxzdGF0KHAtPnBhdGgsICZzdCkpIHsKKwkJCWlmIChhZGRfdG9fY2FjaGUocC0+cGF0aCwgJnN0LCAwKSkKKwkJCQlkaWUoInVwZGF0aW5nIGZpbGVzIGZhaWxlZCIpOworCQl9IGVsc2UKIAkJCXJlbW92ZV9maWxlX2Zyb21fY2FjaGUocC0+cGF0aCk7CiAJfQogfQpAQCAtMjQ1LDcgKzI1MCw3IEBACiAJICovCiAJaWYgKGFsbCB8fCAoYWxzbyAmJiBwYXRoc3BlYyAmJiAqcGF0aHNwZWMpKSB7CiAJCWludCBmZCA9IGhvbGRfbG9ja2VkX2luZGV4KCZpbmRleF9sb2NrLCAxKTsKLQkJYWRkX2ZpbGVzX3RvX2NhY2hlKDAsIGFsc28gPyBwcmVmaXggOiBOVUxMLCBwYXRoc3BlYyk7CisJCWFkZF9maWxlc190b19jYWNoZShhbHNvID8gcHJlZml4IDogTlVMTCwgcGF0aHNwZWMsIDApOwogCQlyZWZyZXNoX2NhY2hlKFJFRlJFU0hfUVVJRVQpOwogCQlpZiAod3JpdGVfY2FjaGUoZmQsIGFjdGl2ZV9jYWNoZSwgYWN0aXZlX25yKSB8fAogCQkgICAgY2xvc2VfbG9ja19maWxlKCZpbmRleF9sb2NrKSkKQEAgLTM5Nyw2ICs0MDIsNDcgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgc2lnbl9vZmZfaGVhZGVyW10gPSAiU2lnbmVkLW9mZi1ieTogIjsKIAorc3RhdGljIHZvaWQgZGV0ZXJtaW5lX2F1dGhvcl9pbmZvKHZvaWQpCit7CisJY2hhciAqbmFtZSwgKmVtYWlsLCAqZGF0ZTsKKworCW5hbWUgPSBnZXRlbnYoIkdJVF9BVVRIT1JfTkFNRSIpOworCWVtYWlsID0gZ2V0ZW52KCJHSVRfQVVUSE9SX0VNQUlMIik7CisJZGF0ZSA9IGdldGVudigiR0lUX0FVVEhPUl9EQVRFIik7CisKKwlpZiAodXNlX21lc3NhZ2UpIHsKKwkJY29uc3QgY2hhciAqYSwgKmxiLCAqcmIsICplb2w7CisKKwkJYSA9IHN0cnN0cih1c2VfbWVzc2FnZV9idWZmZXIsICJcbmF1dGhvciAiKTsKKwkJaWYgKCFhKQorCQkJZGllKCJpbnZhbGlkIGNvbW1pdDogJXMiLCB1c2VfbWVzc2FnZSk7CisKKwkJbGIgPSBzdHJzdHIoYSArIDgsICIgPCIpOworCQlyYiA9IHN0cnN0cihhICsgOCwgIj4gIik7CisJCWVvbCA9IHN0cmNocihhICsgOCwgJ1xuJyk7CisJCWlmICghbGIgfHwgIXJiIHx8ICFlb2wpCisJCQlkaWUoImludmFsaWQgY29tbWl0OiAlcyIsIHVzZV9tZXNzYWdlKTsKKworCQluYW1lID0geHN0cm5kdXAoYSArIDgsIGxiIC0gKGEgKyA4KSk7CisJCWVtYWlsID0geHN0cm5kdXAobGIgKyAyLCByYiAtIChsYiArIDIpKTsKKwkJZGF0ZSA9IHhzdHJuZHVwKHJiICsgMiwgZW9sIC0gKHJiICsgMikpOworCX0KKworCWlmIChmb3JjZV9hdXRob3IpIHsKKwkJY29uc3QgY2hhciAqbGIgPSBzdHJzdHIoZm9yY2VfYXV0aG9yLCAiIDwiKTsKKwkJY29uc3QgY2hhciAqcmIgPSBzdHJjaHIoZm9yY2VfYXV0aG9yLCAnPicpOworCisJCWlmICghbGIgfHwgIXJiKQorCQkJZGllKCJtYWxmb3JtZWQgLS1hdXRob3IgcGFyYW1ldGVyIik7CisJCW5hbWUgPSB4c3RybmR1cChmb3JjZV9hdXRob3IsIGxiIC0gZm9yY2VfYXV0aG9yKTsKKwkJZW1haWwgPSB4c3RybmR1cChsYiArIDIsIHJiIC0gKGxiICsgMikpOworCX0KKworCWF1dGhvcl9uYW1lID0gbmFtZTsKKwlhdXRob3JfZW1haWwgPSBlbWFpbDsKKwlhdXRob3JfZGF0ZSA9IGRhdGU7Cit9CisKIHN0YXRpYyBpbnQgcHJlcGFyZV90b19jb21taXQoY29uc3QgY2hhciAqaW5kZXhfZmlsZSwgY29uc3QgY2hhciAqcHJlZml4KQogewogCXN0cnVjdCBzdGF0IHN0YXRidWY7CkBAIC00MDYsNiArNDUyLDcgQEAKIAlGSUxFICpmcDsKIAljb25zdCBjaGFyICpob29rX2FyZzEgPSBOVUxMOwogCWNvbnN0IGNoYXIgKmhvb2tfYXJnMiA9IE5VTEw7CisJaW50IGlkZW50X3Nob3duID0gMDsKIAogCWlmICghbm9fdmVyaWZ5ICYmIHJ1bl9ob29rKGluZGV4X2ZpbGUsICJwcmUtY29tbWl0IiwgTlVMTCkpCiAJCXJldHVybiAwOwpAQCAtNDg1LDcgKzUzMiwxNCBAQAogCiAJc3RyYnVmX3JlbGVhc2UoJnNiKTsKIAorCWRldGVybWluZV9hdXRob3JfaW5mbygpOworCisJLyogVGhpcyBjaGVja3MgaWYgY29tbWl0dGVyIGlkZW50IGlzIGV4cGxpY2l0bHkgZ2l2ZW4gKi8KKwlnaXRfY29tbWl0dGVyX2luZm8oMCk7CiAJaWYgKHVzZV9lZGl0b3IpIHsKKwkJY2hhciAqYXV0aG9yX2lkZW50OworCQljb25zdCBjaGFyICpjb21taXR0ZXJfaWRlbnQ7CisKIAkJaWYgKGluX21lcmdlKQogCQkJZnByaW50ZihmcCwKIAkJCQkiI1xuIgpAQCAtNTA4LDYgKzU2MiwyNyBAQAogCQlpZiAob25seV9pbmNsdWRlX2Fzc3VtZWQpCiAJCQlmcHJpbnRmKGZwLCAiIyAlc1xuIiwgb25seV9pbmNsdWRlX2Fzc3VtZWQpOwogCisJCWF1dGhvcl9pZGVudCA9IHhzdHJkdXAoZm10X25hbWUoYXV0aG9yX25hbWUsIGF1dGhvcl9lbWFpbCkpOworCQljb21taXR0ZXJfaWRlbnQgPSBmbXRfbmFtZShnZXRlbnYoIkdJVF9DT01NSVRURVJfTkFNRSIpLAorCQkJCQkgICBnZXRlbnYoIkdJVF9DT01NSVRURVJfRU1BSUwiKSk7CisJCWlmIChzdHJjbXAoYXV0aG9yX2lkZW50LCBjb21taXR0ZXJfaWRlbnQpKQorCQkJZnByaW50ZihmcCwKKwkJCQkiJXMiCisJCQkJIiMgQXV0aG9yOiAgICAlc1xuIiwKKwkJCQlpZGVudF9zaG93bisrID8gIiIgOiAiI1xuIiwKKwkJCQlhdXRob3JfaWRlbnQpOworCQlmcmVlKGF1dGhvcl9pZGVudCk7CisKKwkJaWYgKCF1c2VyX2lkZW50X2V4cGxpY2l0bHlfZ2l2ZW4pCisJCQlmcHJpbnRmKGZwLAorCQkJCSIlcyIKKwkJCQkiIyBDb21taXR0ZXI6ICVzXG4iLAorCQkJCWlkZW50X3Nob3duKysgPyAiIiA6ICIjXG4iLAorCQkJCWNvbW1pdHRlcl9pZGVudCk7CisKKwkJaWYgKGlkZW50X3Nob3duKQorCQkJZnByaW50ZihmcCwgIiNcbiIpOworCiAJCXNhdmVkX2NvbG9yX3NldHRpbmcgPSB3dF9zdGF0dXNfdXNlX2NvbG9yOwogCQl3dF9zdGF0dXNfdXNlX2NvbG9yID0gMDsKIAkJY29tbWl0YWJsZSA9IHJ1bl9zdGF0dXMoZnAsIGluZGV4X2ZpbGUsIHByZWZpeCwgMSk7CkBAIC02MjQsNTEgKzY5OSwxNSBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgdm9pZCBkZXRlcm1pbmVfYXV0aG9yX2luZm8oc3RydWN0IHN0cmJ1ZiAqc2IpCi17Ci0JY2hhciAqbmFtZSwgKmVtYWlsLCAqZGF0ZTsKLQotCW5hbWUgPSBnZXRlbnYoIkdJVF9BVVRIT1JfTkFNRSIpOwotCWVtYWlsID0gZ2V0ZW52KCJHSVRfQVVUSE9SX0VNQUlMIik7Ci0JZGF0ZSA9IGdldGVudigiR0lUX0FVVEhPUl9EQVRFIik7Ci0KLQlpZiAodXNlX21lc3NhZ2UpIHsKLQkJY29uc3QgY2hhciAqYSwgKmxiLCAqcmIsICplb2w7Ci0KLQkJYSA9IHN0cnN0cih1c2VfbWVzc2FnZV9idWZmZXIsICJcbmF1dGhvciAiKTsKLQkJaWYgKCFhKQotCQkJZGllKCJpbnZhbGlkIGNvbW1pdDogJXMiLCB1c2VfbWVzc2FnZSk7Ci0KLQkJbGIgPSBzdHJzdHIoYSArIDgsICIgPCIpOwotCQlyYiA9IHN0cnN0cihhICsgOCwgIj4gIik7Ci0JCWVvbCA9IHN0cmNocihhICsgOCwgJ1xuJyk7Ci0JCWlmICghbGIgfHwgIXJiIHx8ICFlb2wpCi0JCQlkaWUoImludmFsaWQgY29tbWl0OiAlcyIsIHVzZV9tZXNzYWdlKTsKLQotCQluYW1lID0geHN0cm5kdXAoYSArIDgsIGxiIC0gKGEgKyA4KSk7Ci0JCWVtYWlsID0geHN0cm5kdXAobGIgKyAyLCByYiAtIChsYiArIDIpKTsKLQkJZGF0ZSA9IHhzdHJuZHVwKHJiICsgMiwgZW9sIC0gKHJiICsgMikpOwotCX0KLQotCWlmIChmb3JjZV9hdXRob3IpIHsKLQkJY29uc3QgY2hhciAqbGIgPSBzdHJzdHIoZm9yY2VfYXV0aG9yLCAiIDwiKTsKLQkJY29uc3QgY2hhciAqcmIgPSBzdHJjaHIoZm9yY2VfYXV0aG9yLCAnPicpOwotCi0JCWlmICghbGIgfHwgIXJiKQotCQkJZGllKCJtYWxmb3JtZWQgLS1hdXRob3IgcGFyYW1ldGVyIik7Ci0JCW5hbWUgPSB4c3RybmR1cChmb3JjZV9hdXRob3IsIGxiIC0gZm9yY2VfYXV0aG9yKTsKLQkJZW1haWwgPSB4c3RybmR1cChsYiArIDIsIHJiIC0gKGxiICsgMikpOwotCX0KLQotCXN0cmJ1Zl9hZGRmKHNiLCAiYXV0aG9yICVzXG4iLCBmbXRfaWRlbnQobmFtZSwgZW1haWwsIGRhdGUsIElERU5UX0VSUk9SX09OX05PX05BTUUpKTsKLX0KLQogc3RhdGljIGludCBwYXJzZV9hbmRfdmFsaWRhdGVfb3B0aW9ucyhpbnQgYXJnYywgY29uc3QgY2hhciAqYXJndltdLAotCQkJCSAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCB1c2FnZVtdKQorCQkJCSAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCB1c2FnZVtdLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKIAlpbnQgZiA9IDA7CiAKIAlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBidWlsdGluX2NvbW1pdF9vcHRpb25zLCB1c2FnZSwgMCk7CisJbG9nZmlsZSA9IHBhcnNlX29wdGlvbnNfZml4X2ZpbGVuYW1lKHByZWZpeCwgbG9nZmlsZSk7CisJdGVtcGxhdGVfZmlsZSA9IHBhcnNlX29wdGlvbnNfZml4X2ZpbGVuYW1lKHByZWZpeCwgdGVtcGxhdGVfZmlsZSk7CiAKIAlpZiAobG9nZmlsZSB8fCBtZXNzYWdlLmxlbiB8fCB1c2VfbWVzc2FnZSkKIAkJdXNlX2VkaXRvciA9IDA7CkBAIC03NDcsMTAgKzc4Niw4IEBACiAJCWRpZSgiTm8gcGF0aHMgd2l0aCAtLWluY2x1ZGUvLS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UuIik7CiAJaWYgKGFyZ2MgPT0gMCAmJiBvbmx5ICYmIGFtZW5kKQogCQlvbmx5X2luY2x1ZGVfYXNzdW1lZCA9ICJDbGV2ZXIuLi4gYW1lbmRpbmcgdGhlIGxhc3Qgb25lIHdpdGggZGlydHkgaW5kZXguIjsKLQlpZiAoYXJnYyA+IDAgJiYgIWFsc28gJiYgIW9ubHkpIHsKKwlpZiAoYXJnYyA+IDAgJiYgIWFsc28gJiYgIW9ubHkpCiAJCW9ubHlfaW5jbHVkZV9hc3N1bWVkID0gIkV4cGxpY2l0IHBhdGhzIHNwZWNpZmllZCB3aXRob3V0IC1pIG5vciAtbzsgYXNzdW1pbmcgLS1vbmx5IHBhdGhzLi4uIjsKLQkJYWxzbyA9IDA7Ci0JfQogCWlmICghY2xlYW51cF9hcmcgfHwgIXN0cmNtcChjbGVhbnVwX2FyZywgImRlZmF1bHQiKSkKIAkJY2xlYW51cF9tb2RlID0gdXNlX2VkaXRvciA/IENMRUFOVVBfQUxMIDogQ0xFQU5VUF9TUEFDRTsKIAllbHNlIGlmICghc3RyY21wKGNsZWFudXBfYXJnLCAidmVyYmF0aW0iKSkKQEAgLTc3NSwxMiArODEyLDEyIEBACiAJY29uc3QgY2hhciAqaW5kZXhfZmlsZTsKIAlpbnQgY29tbWl0YWJsZTsKIAotCWdpdF9jb25maWcoZ2l0X3N0YXR1c19jb25maWcpOworCWdpdF9jb25maWcoZ2l0X3N0YXR1c19jb25maWcsIE5VTEwpOwogCiAJaWYgKHd0X3N0YXR1c191c2VfY29sb3IgPT0gLTEpCiAJCXd0X3N0YXR1c191c2VfY29sb3IgPSBnaXRfdXNlX2NvbG9yX2RlZmF1bHQ7CiAKLQlhcmdjID0gcGFyc2VfYW5kX3ZhbGlkYXRlX29wdGlvbnMoYXJnYywgYXJndiwgYnVpbHRpbl9zdGF0dXNfdXNhZ2UpOworCWFyZ2MgPSBwYXJzZV9hbmRfdmFsaWRhdGVfb3B0aW9ucyhhcmdjLCBhcmd2LCBidWlsdGluX3N0YXR1c191c2FnZSwgcHJlZml4KTsKIAogCWluZGV4X2ZpbGUgPSBwcmVwYXJlX2luZGV4KGFyZ2MsIGFyZ3YsIHByZWZpeCk7CiAKQEAgLTgxMiw3ICs4NDksNyBAQAogCiAJcmV2LnZlcmJvc2VfaGVhZGVyID0gMTsKIAlyZXYuc2hvd19yb290X2RpZmYgPSAxOwotCXJldi5jb21taXRfZm9ybWF0ID0gZ2V0X2NvbW1pdF9mb3JtYXQoImZvcm1hdDolaDogJXMiKTsKKwlnZXRfY29tbWl0X2Zvcm1hdCgiZm9ybWF0OiVoOiAlcyIsICZyZXYpOwogCXJldi5hbHdheXNfc2hvd19oZWFkZXIgPSAwOwogCXJldi5kaWZmb3B0LmRldGVjdF9yZW5hbWUgPSAxOwogCXJldi5kaWZmb3B0LnJlbmFtZV9saW1pdCA9IDEwMDsKQEAgLTgyOSwxNiArODY2LDEyIEBACiAJfQogfQogCi1pbnQgZ2l0X2NvbW1pdF9jb25maWcoY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdikKK2ludCBnaXRfY29tbWl0X2NvbmZpZyhjb25zdCBjaGFyICprLCBjb25zdCBjaGFyICp2LCB2b2lkICpjYikKIHsKLQlpZiAoIXN0cmNtcChrLCAiY29tbWl0LnRlbXBsYXRlIikpIHsKLQkJaWYgKCF2KQotCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHYpOwotCQl0ZW1wbGF0ZV9maWxlID0geHN0cmR1cCh2KTsKLQkJcmV0dXJuIDA7Ci0JfQorCWlmICghc3RyY21wKGssICJjb21taXQudGVtcGxhdGUiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZ0ZW1wbGF0ZV9maWxlLCBrLCB2KTsKIAotCXJldHVybiBnaXRfc3RhdHVzX2NvbmZpZyhrLCB2KTsKKwlyZXR1cm4gZ2l0X3N0YXR1c19jb25maWcoaywgdiwgY2IpOwogfQogCiBzdGF0aWMgY29uc3QgY2hhciBjb21taXRfdXRmOF93YXJuW10gPQpAQCAtODUwLDEwICs4ODMsMTkgQEAKIHsKIAlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBwYXJzZV9vYmplY3Qoc2hhMSk7CiAJY29uc3QgY2hhciAqcGFyZW50ID0gc2hhMV90b19oZXgoc2hhMSk7CisJY29uc3QgY2hhciAqY3A7CisKIAlpZiAoIW9iaikKIAkJZGllKCJVbmFibGUgdG8gZmluZCBjb21taXQgcGFyZW50ICVzIiwgcGFyZW50KTsKIAlpZiAob2JqLT50eXBlICE9IE9CSl9DT01NSVQpCiAJCWRpZSgiUGFyZW50ICVzIGlzbid0IGEgcHJvcGVyIGNvbW1pdCIsIHBhcmVudCk7CisKKwlmb3IgKGNwID0gc2ItPmJ1ZjsgY3AgJiYgKGNwID0gc3Ryc3RyKGNwLCAiXG5wYXJlbnQgIikpOyBjcCArPSA4KSB7CisJCWlmICghbWVtY21wKGNwICsgOCwgcGFyZW50LCA0MCkgJiYgY3BbNDhdID09ICdcbicpIHsKKwkJCWVycm9yKCJkdXBsaWNhdGUgcGFyZW50ICVzIGlnbm9yZWQiLCBwYXJlbnQpOworCQkJcmV0dXJuOworCQl9CisJfQogCXN0cmJ1Zl9hZGRmKHNiLCAicGFyZW50ICVzXG4iLCBwYXJlbnQpOwogfQogCkBAIC04NjYsOSArOTA4LDkgQEAKIAl1bnNpZ25lZCBjaGFyIGNvbW1pdF9zaGExWzIwXTsKIAlzdHJ1Y3QgcmVmX2xvY2sgKnJlZl9sb2NrOwogCi0JZ2l0X2NvbmZpZyhnaXRfY29tbWl0X2NvbmZpZyk7CisJZ2l0X2NvbmZpZyhnaXRfY29tbWl0X2NvbmZpZywgTlVMTCk7CiAKLQlhcmdjID0gcGFyc2VfYW5kX3ZhbGlkYXRlX29wdGlvbnMoYXJnYywgYXJndiwgYnVpbHRpbl9jb21taXRfdXNhZ2UpOworCWFyZ2MgPSBwYXJzZV9hbmRfdmFsaWRhdGVfb3B0aW9ucyhhcmdjLCBhcmd2LCBidWlsdGluX2NvbW1pdF91c2FnZSwgcHJlZml4KTsKIAogCWluZGV4X2ZpbGUgPSBwcmVwYXJlX2luZGV4KGFyZ2MsIGFyZ3YsIHByZWZpeCk7CiAKQEAgLTkyNCw3ICs5NjYsOCBAQAogCQlzdHJidWZfYWRkZigmc2IsICJwYXJlbnQgJXNcbiIsIHNoYTFfdG9faGV4KGhlYWRfc2hhMSkpOwogCX0KIAotCWRldGVybWluZV9hdXRob3JfaW5mbygmc2IpOworCXN0cmJ1Zl9hZGRmKCZzYiwgImF1dGhvciAlc1xuIiwKKwkJICAgIGZtdF9pZGVudChhdXRob3JfbmFtZSwgYXV0aG9yX2VtYWlsLCBhdXRob3JfZGF0ZSwgSURFTlRfRVJST1JfT05fTk9fTkFNRSkpOwogCXN0cmJ1Zl9hZGRmKCZzYiwgImNvbW1pdHRlciAlc1xuIiwgZ2l0X2NvbW1pdHRlcl9pbmZvKElERU5UX0VSUk9SX09OX05PX05BTUUpKTsKIAlpZiAoIWlzX2VuY29kaW5nX3V0ZjgoZ2l0X2NvbW1pdF9lbmNvZGluZykpCiAJCXN0cmJ1Zl9hZGRmKCZzYiwgImVuY29kaW5nICVzXG4iLCBnaXRfY29tbWl0X2VuY29kaW5nKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tY29uZmlnLmMgYi9idWlsdGluLWNvbmZpZy5jCmluZGV4IGMzNGJjOGIuLjNhNDQxZWYgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tY29uZmlnLmMKKysrIGIvYnVpbHRpbi1jb25maWcuYwpAQCAtMyw3ICszLDcgQEAKICNpbmNsdWRlICJjb2xvci5oIgogCiBzdGF0aWMgY29uc3QgY2hhciBnaXRfY29uZmlnX3NldF91c2FnZVtdID0KLSJnaXQtY29uZmlnIFsgLS1nbG9iYWwgfCAtLXN5c3RlbSB8IFsgLWYgfCAtLWZpbGUgXSBjb25maWctZmlsZSBdIFsgLS1ib29sIHwgLS1pbnQgXSBbIC16IHwgLS1udWxsIF0gWy0tZ2V0IHwgLS1nZXQtYWxsIHwgLS1nZXQtcmVnZXhwIHwgLS1yZXBsYWNlLWFsbCB8IC0tYWRkIHwgLS11bnNldCB8IC0tdW5zZXQtYWxsXSBuYW1lIFt2YWx1ZSBbdmFsdWVfcmVnZXhdXSB8IC0tcmVuYW1lLXNlY3Rpb24gb2xkX25hbWUgbmV3X25hbWUgfCAtLXJlbW92ZS1zZWN0aW9uIG5hbWUgfCAtLWxpc3QgfCAtLWdldC1jb2xvciB2YXIgW2RlZmF1bHRdIHwgLS1nZXQtY29sb3Jib29sIG5hbWUgW3N0ZG91dC1pcy10dHldIjsKKyJnaXQtY29uZmlnIFsgLS1nbG9iYWwgfCAtLXN5c3RlbSB8IFsgLWYgfCAtLWZpbGUgXSBjb25maWctZmlsZSBdIFsgLS1ib29sIHwgLS1pbnQgfCAtLWJvb2wtb3ItaW50IF0gWyAteiB8IC0tbnVsbCBdIFstLWdldCB8IC0tZ2V0LWFsbCB8IC0tZ2V0LXJlZ2V4cCB8IC0tcmVwbGFjZS1hbGwgfCAtLWFkZCB8IC0tdW5zZXQgfCAtLXVuc2V0LWFsbF0gbmFtZSBbdmFsdWUgW3ZhbHVlX3JlZ2V4XV0gfCAtLXJlbmFtZS1zZWN0aW9uIG9sZF9uYW1lIG5ld19uYW1lIHwgLS1yZW1vdmUtc2VjdGlvbiBuYW1lIHwgLS1saXN0IHwgLS1nZXQtY29sb3IgdmFyIFtkZWZhdWx0XSB8IC0tZ2V0LWNvbG9yYm9vbCBuYW1lIFtzdGRvdXQtaXMtdHR5XSI7CiAKIHN0YXRpYyBjaGFyICprZXk7CiBzdGF0aWMgcmVnZXhfdCAqa2V5X3JlZ2V4cDsKQEAgLTE2LDkgKzE2LDkgQEAKIHN0YXRpYyBjaGFyIGRlbGltID0gJz0nOwogc3RhdGljIGNoYXIga2V5X2RlbGltID0gJyAnOwogc3RhdGljIGNoYXIgdGVybSA9ICdcbic7Ci1zdGF0aWMgZW51bSB7IFRfUkFXLCBUX0lOVCwgVF9CT09MIH0gdHlwZSA9IFRfUkFXOworc3RhdGljIGVudW0geyBUX1JBVywgVF9JTlQsIFRfQk9PTCwgVF9CT09MX09SX0lOVCB9IHR5cGUgPSBUX1JBVzsKIAotc3RhdGljIGludCBzaG93X2FsbF9jb25maWcoY29uc3QgY2hhciAqa2V5XywgY29uc3QgY2hhciAqdmFsdWVfKQorc3RhdGljIGludCBzaG93X2FsbF9jb25maWcoY29uc3QgY2hhciAqa2V5XywgY29uc3QgY2hhciAqdmFsdWVfLCB2b2lkICpjYikKIHsKIAlpZiAodmFsdWVfKQogCQlwcmludGYoIiVzJWMlcyVjIiwga2V5XywgZGVsaW0sIHZhbHVlXywgdGVybSk7CkBAIC0yNyw3ICsyNyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2hvd19jb25maWcoY29uc3QgY2hhcioga2V5XywgY29uc3QgY2hhciogdmFsdWVfKQorc3RhdGljIGludCBzaG93X2NvbmZpZyhjb25zdCBjaGFyKiBrZXlfLCBjb25zdCBjaGFyKiB2YWx1ZV8sIHZvaWQgKmNiKQogewogCWNoYXIgdmFsdWVbMjU2XTsKIAljb25zdCBjaGFyICp2cHRyID0gdmFsdWU7CkBAIC01Myw2ICs1MywxNCBAQAogCQlzcHJpbnRmKHZhbHVlLCAiJWQiLCBnaXRfY29uZmlnX2ludChrZXlfLCB2YWx1ZV8/dmFsdWVfOiIiKSk7CiAJZWxzZSBpZiAodHlwZSA9PSBUX0JPT0wpCiAJCXZwdHIgPSBnaXRfY29uZmlnX2Jvb2woa2V5XywgdmFsdWVfKSA/ICJ0cnVlIiA6ICJmYWxzZSI7CisJZWxzZSBpZiAodHlwZSA9PSBUX0JPT0xfT1JfSU5UKSB7CisJCWludCBpc19ib29sLCB2OworCQl2ID0gZ2l0X2NvbmZpZ19ib29sX29yX2ludChrZXlfLCB2YWx1ZV8sICZpc19ib29sKTsKKwkJaWYgKGlzX2Jvb2wpCisJCQl2cHRyID0gdiA/ICJ0cnVlIiA6ICJmYWxzZSI7CisJCWVsc2UKKwkJCXNwcmludGYodmFsdWUsICIlZCIsIHYpOworCX0KIAllbHNlCiAJCXZwdHIgPSB2YWx1ZV8/dmFsdWVfOiIiOwogCXNlZW4rKzsKQEAgLTExMywxNCArMTIxLDE0IEBACiAJfQogCiAJaWYgKGRvX2FsbCAmJiBzeXN0ZW1fd2lkZSkKLQkJZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoc2hvd19jb25maWcsIHN5c3RlbV93aWRlKTsKKwkJZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoc2hvd19jb25maWcsIHN5c3RlbV93aWRlLCBOVUxMKTsKIAlpZiAoZG9fYWxsICYmIGdsb2JhbCkKLQkJZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoc2hvd19jb25maWcsIGdsb2JhbCk7Ci0JZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoc2hvd19jb25maWcsIGxvY2FsKTsKKwkJZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoc2hvd19jb25maWcsIGdsb2JhbCwgTlVMTCk7CisJZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoc2hvd19jb25maWcsIGxvY2FsLCBOVUxMKTsKIAlpZiAoIWRvX2FsbCAmJiAhc2VlbiAmJiBnbG9iYWwpCi0JCWdpdF9jb25maWdfZnJvbV9maWxlKHNob3dfY29uZmlnLCBnbG9iYWwpOworCQlnaXRfY29uZmlnX2Zyb21fZmlsZShzaG93X2NvbmZpZywgZ2xvYmFsLCBOVUxMKTsKIAlpZiAoIWRvX2FsbCAmJiAhc2VlbiAmJiBzeXN0ZW1fd2lkZSkKLQkJZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoc2hvd19jb25maWcsIHN5c3RlbV93aWRlKTsKKwkJZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoc2hvd19jb25maWcsIHN5c3RlbV93aWRlLCBOVUxMKTsKIAogCWZyZWUoa2V5KTsKIAlpZiAocmVnZXhwKSB7CkBAIC0xNTcsNiArMTY1LDE0IEBACiAJCWVsc2UgaWYgKHR5cGUgPT0gVF9CT09MKQogCQkJc3ByaW50Zihub3JtYWxpemVkLCAiJXMiLAogCQkJCWdpdF9jb25maWdfYm9vbChrZXksIHZhbHVlKSA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCQllbHNlIGlmICh0eXBlID09IFRfQk9PTF9PUl9JTlQpIHsKKwkJCWludCBpc19ib29sLCB2OworCQkJdiA9IGdpdF9jb25maWdfYm9vbF9vcl9pbnQoa2V5LCB2YWx1ZSwgJmlzX2Jvb2wpOworCQkJaWYgKCFpc19ib29sKQorCQkJCXNwcmludGYobm9ybWFsaXplZCwgIiVkIiwgdik7CisJCQllbHNlCisJCQkJc3ByaW50Zihub3JtYWxpemVkLCAiJXMiLCB2ID8gInRydWUiIDogImZhbHNlIik7CisJCX0KIAl9CiAKIAlyZXR1cm4gbm9ybWFsaXplZDsKQEAgLTE2Niw3ICsxODIsNyBAQAogc3RhdGljIGNvbnN0IGNoYXIgKmdldF9jb2xvcl9zbG90Owogc3RhdGljIGNoYXIgcGFyc2VkX2NvbG9yW0NPTE9SX01BWExFTl07CiAKLXN0YXRpYyBpbnQgZ2l0X2dldF9jb2xvcl9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3N0YXRpYyBpbnQgZ2l0X2dldF9jb2xvcl9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCiB7CiAJaWYgKCFzdHJjbXAodmFyLCBnZXRfY29sb3Jfc2xvdCkpIHsKIAkJaWYgKCF2YWx1ZSkKQEAgLTIwMiw3ICsyMTgsNyBAQAogCiAJZ2V0X2NvbG9yX2ZvdW5kID0gMDsKIAlwYXJzZWRfY29sb3JbMF0gPSAnXDAnOwotCWdpdF9jb25maWcoZ2l0X2dldF9jb2xvcl9jb25maWcpOworCWdpdF9jb25maWcoZ2l0X2dldF9jb2xvcl9jb25maWcsIE5VTEwpOwogCiAJaWYgKCFnZXRfY29sb3JfZm91bmQgJiYgZGVmX2NvbG9yKQogCQljb2xvcl9wYXJzZShkZWZfY29sb3IsICJjb21tYW5kIGxpbmUiLCBwYXJzZWRfY29sb3IpOwpAQCAtMjE0LDcgKzIzMCw4IEBACiBzdGF0aWMgaW50IHN0ZG91dF9pc190dHk7CiBzdGF0aWMgaW50IGdldF9jb2xvcmJvb2xfZm91bmQ7CiBzdGF0aWMgaW50IGdldF9kaWZmX2NvbG9yX2ZvdW5kOwotc3RhdGljIGludCBnaXRfZ2V0X2NvbG9yYm9vbF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3N0YXRpYyBpbnQgZ2l0X2dldF9jb2xvcmJvb2xfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsCisJCXZvaWQgKmNiKQogewogCWlmICghc3RyY21wKHZhciwgZ2V0X2NvbG9yX3Nsb3QpKSB7CiAJCWdldF9jb2xvcmJvb2xfZm91bmQgPQpAQCAtMjI0LDYgKzI0MSwxMCBAQAogCQlnZXRfZGlmZl9jb2xvcl9mb3VuZCA9CiAJCQlnaXRfY29uZmlnX2NvbG9yYm9vbCh2YXIsIHZhbHVlLCBzdGRvdXRfaXNfdHR5KTsKIAl9CisJaWYgKCFzdHJjbXAodmFyLCAiY29sb3IudWkiKSkgeworCQlnaXRfdXNlX2NvbG9yX2RlZmF1bHQgPSBnaXRfY29uZmlnX2NvbG9yYm9vbCh2YXIsIHZhbHVlLCBzdGRvdXRfaXNfdHR5KTsKKwkJcmV0dXJuIDA7CisJfQogCXJldHVybiAwOwogfQogCkBAIC0yNDUsMTMgKzI2NiwxMyBAQAogCWdldF9jb2xvcmJvb2xfZm91bmQgPSAtMTsKIAlnZXRfZGlmZl9jb2xvcl9mb3VuZCA9IC0xOwogCWdldF9jb2xvcl9zbG90ID0gYXJndlswXTsKLQlnaXRfY29uZmlnKGdpdF9nZXRfY29sb3Jib29sX2NvbmZpZyk7CisJZ2l0X2NvbmZpZyhnaXRfZ2V0X2NvbG9yYm9vbF9jb25maWcsIE5VTEwpOwogCiAJaWYgKGdldF9jb2xvcmJvb2xfZm91bmQgPCAwKSB7CiAJCWlmICghc3RyY21wKGdldF9jb2xvcl9zbG90LCAiY29sb3IuZGlmZiIpKQogCQkJZ2V0X2NvbG9yYm9vbF9mb3VuZCA9IGdldF9kaWZmX2NvbG9yX2ZvdW5kOwogCQlpZiAoZ2V0X2NvbG9yYm9vbF9mb3VuZCA8IDApCi0JCQlnZXRfY29sb3Jib29sX2ZvdW5kID0gMDsKKwkJCWdldF9jb2xvcmJvb2xfZm91bmQgPSBnaXRfdXNlX2NvbG9yX2RlZmF1bHQ7CiAJfQogCiAJaWYgKGFyZ2MgPT0gMSkgewpAQCAtMjczLDEwICsyOTQsMTMgQEAKIAkJCXR5cGUgPSBUX0lOVDsKIAkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1ib29sIikpCiAJCQl0eXBlID0gVF9CT09MOworCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICItLWJvb2wtb3ItaW50IikpCisJCQl0eXBlID0gVF9CT09MX09SX0lOVDsKIAkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1saXN0IikgfHwgIXN0cmNtcChhcmd2WzFdLCAiLWwiKSkgewogCQkJaWYgKGFyZ2MgIT0gMikKIAkJCQl1c2FnZShnaXRfY29uZmlnX3NldF91c2FnZSk7Ci0JCQlpZiAoZ2l0X2NvbmZpZyhzaG93X2FsbF9jb25maWcpIDwgMCAmJiBmaWxlICYmIGVycm5vKQorCQkJaWYgKGdpdF9jb25maWcoc2hvd19hbGxfY29uZmlnLCBOVUxMKSA8IDAgJiYKKwkJCQkJZmlsZSAmJiBlcnJubykKIAkJCQlkaWUoInVuYWJsZSB0byByZWFkIGNvbmZpZyBmaWxlICVzOiAlcyIsIGZpbGUsCiAJCQkJICAgIHN0cmVycm9yKGVycm5vKSk7CiAJCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tZGVzY3JpYmUuYyBiL2J1aWx0aW4tZGVzY3JpYmUuYwppbmRleCAzZGE5OWMxLi5lNTE1ZjljIDEwMDY0NAotLS0gYS9idWlsdGluLWRlc2NyaWJlLmMKKysrIGIvYnVpbHRpbi1kZXNjcmliZS5jCkBAIC0yMDQsNyArMjA0LDcgQEAKIAkJICovCiAJCWRpc3BsYXlfbmFtZShuKTsKIAkJaWYgKGxvbmdmb3JtYXQpCi0JCQlzaG93X3N1ZmZpeCgwLCBuLT50YWctPnRhZ2dlZC0+c2hhMSk7CisJCQlzaG93X3N1ZmZpeCgwLCBuLT50YWcgPyBuLT50YWctPnRhZ2dlZC0+c2hhMSA6IHNoYTEpOwogCQlwcmludGYoIlxuIik7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9idWlsdGluLWRpZmYtZmlsZXMuYyBiL2J1aWx0aW4tZGlmZi1maWxlcy5jCmluZGV4IGUyMzA2YzEuLjM4NGQ4NzEgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tZGlmZi1maWxlcy5jCisrKyBiL2J1aWx0aW4tZGlmZi1maWxlcy5jCkBAIC0xMCwyNiArMTAsNTQgQEAKICNpbmNsdWRlICJidWlsdGluLmgiCiAKIHN0YXRpYyBjb25zdCBjaGFyIGRpZmZfZmlsZXNfdXNhZ2VbXSA9Ci0iZ2l0LWRpZmYtZmlsZXMgWy1xXSBbLTAvLTEvMi8zIHwtY3wtLWNjfC0tbm8taW5kZXhdIFs8Y29tbW9uIGRpZmYgb3B0aW9ucz5dIFs8cGF0aD4uLi5dIgorImdpdC1kaWZmLWZpbGVzIFstcV0gWy0wLy0xLzIvMyB8LWN8LS1jY10gWzxjb21tb24gZGlmZiBvcHRpb25zPl0gWzxwYXRoPi4uLl0iCiBDT01NT05fRElGRl9PUFRJT05TX0hFTFA7CiAKIGludCBjbWRfZGlmZl9maWxlcyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKIAlzdHJ1Y3QgcmV2X2luZm8gcmV2OwotCWludCBub25naXQ7CiAJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBvcHRpb25zID0gMDsKIAotCXByZWZpeCA9IHNldHVwX2dpdF9kaXJlY3RvcnlfZ2VudGx5KCZub25naXQpOwogCWluaXRfcmV2aXNpb25zKCZyZXYsIHByZWZpeCk7Ci0JZ2l0X2NvbmZpZyhnaXRfZGlmZl9iYXNpY19jb25maWcpOyAvKiBubyAiZGlmZiIgVUkgb3B0aW9ucyAqLworCWdpdF9jb25maWcoZ2l0X2RpZmZfYmFzaWNfY29uZmlnLCBOVUxMKTsgLyogbm8gImRpZmYiIFVJIG9wdGlvbnMgKi8KIAlyZXYuYWJicmV2ID0gMDsKIAotCWlmICghc2V0dXBfZGlmZl9ub19pbmRleCgmcmV2LCBhcmdjLCBhcmd2LCBub25naXQsIHByZWZpeCkpCi0JCWFyZ2MgPSAwOwotCWVsc2UKLQkJYXJnYyA9IHNldHVwX3JldmlzaW9ucyhhcmdjLCBhcmd2LCAmcmV2LCBOVUxMKTsKKwlhcmdjID0gc2V0dXBfcmV2aXNpb25zKGFyZ2MsIGFyZ3YsICZyZXYsIE5VTEwpOworCXdoaWxlICgxIDwgYXJnYyAmJiBhcmd2WzFdWzBdID09ICctJykgeworCQlpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1iYXNlIikpCisJCQlyZXYubWF4X2NvdW50ID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1vdXJzIikpCisJCQlyZXYubWF4X2NvdW50ID0gMjsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS10aGVpcnMiKSkKKwkJCXJldi5tYXhfY291bnQgPSAzOworCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICItcSIpKQorCQkJb3B0aW9ucyB8PSBESUZGX1NJTEVOVF9PTl9SRU1PVkVEOworCQllbHNlCisJCQl1c2FnZShkaWZmX2ZpbGVzX3VzYWdlKTsKKwkJYXJndisrOyBhcmdjLS07CisJfQogCWlmICghcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCkKIAkJcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX1JBVzsKLQlyZXN1bHQgPSBydW5fZGlmZl9maWxlc19jbWQoJnJldiwgYXJnYywgYXJndik7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGVyZSBhcmUgTk8gcmV2aXNpb24gKGkuZS4gcGVuZGluZyBvYmplY3QpIHBhcmFtZXRlciwKKwkgKiByZXYubWF4X2NvdW50IGlzIHJlYXNvbmFibGUgKDAgPD0gbiA8PSAzKSwgYW5kCisJICogdGhlcmUgaXMgbm8gb3RoZXIgcmV2aXNpb24gZmlsdGVyaW5nIHBhcmFtZXRlcnMuCisJICovCisJaWYgKHJldi5wZW5kaW5nLm5yIHx8CisJICAgIHJldi5taW5fYWdlICE9IC0xIHx8IHJldi5tYXhfYWdlICE9IC0xIHx8CisJICAgIDMgPCByZXYubWF4X2NvdW50KQorCQl1c2FnZShkaWZmX2ZpbGVzX3VzYWdlKTsKKworCWlmIChyZXYubWF4X2NvdW50ID09IC0xICYmCisJICAgIChyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfUEFUQ0gpKQorCQlyZXYuY29tYmluZV9tZXJnZXMgPSByZXYuZGVuc2VfY29tYmluZWRfbWVyZ2VzID0gMTsKKworCWlmIChyZWFkX2NhY2hlKCkgPCAwKSB7CisJCXBlcnJvcigicmVhZF9jYWNoZSIpOworCQlyZXR1cm4gLTE7CisJfQorCXJlc3VsdCA9IHJ1bl9kaWZmX2ZpbGVzKCZyZXYsIG9wdGlvbnMpOwogCXJldHVybiBkaWZmX3Jlc3VsdF9jb2RlKCZyZXYuZGlmZm9wdCwgcmVzdWx0KTsKIH0KZGlmZiAtLWdpdCBhL2J1aWx0aW4tZGlmZi1pbmRleC5jIGIvYnVpbHRpbi1kaWZmLWluZGV4LmMKaW5kZXggMmI5NTVkZS4uMmY0NGViZiAxMDA2NDQKLS0tIGEvYnVpbHRpbi1kaWZmLWluZGV4LmMKKysrIGIvYnVpbHRpbi1kaWZmLWluZGV4LmMKQEAgLTE3LDcgKzE3LDcgQEAKIAlpbnQgcmVzdWx0OwogCiAJaW5pdF9yZXZpc2lvbnMoJnJldiwgcHJlZml4KTsKLQlnaXRfY29uZmlnKGdpdF9kaWZmX2Jhc2ljX2NvbmZpZyk7IC8qIG5vICJkaWZmIiBVSSBvcHRpb25zICovCisJZ2l0X2NvbmZpZyhnaXRfZGlmZl9iYXNpY19jb25maWcsIE5VTEwpOyAvKiBubyAiZGlmZiIgVUkgb3B0aW9ucyAqLwogCXJldi5hYmJyZXYgPSAwOwogCiAJYXJnYyA9IHNldHVwX3JldmlzaW9ucyhhcmdjLCBhcmd2LCAmcmV2LCBOVUxMKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tZGlmZi10cmVlLmMgYi9idWlsdGluLWRpZmYtdHJlZS5jCmluZGV4IDgzMjc5N2YuLjlkMmE0OGYgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tZGlmZi10cmVlLmMKKysrIGIvYnVpbHRpbi1kaWZmLXRyZWUuYwpAQCAtNjgsNyArNjgsNyBAQAogCWludCByZWFkX3N0ZGluID0gMDsKIAogCWluaXRfcmV2aXNpb25zKG9wdCwgcHJlZml4KTsKLQlnaXRfY29uZmlnKGdpdF9kaWZmX2Jhc2ljX2NvbmZpZyk7IC8qIG5vICJkaWZmIiBVSSBvcHRpb25zICovCisJZ2l0X2NvbmZpZyhnaXRfZGlmZl9iYXNpY19jb25maWcsIE5VTEwpOyAvKiBubyAiZGlmZiIgVUkgb3B0aW9ucyAqLwogCW5yX3NoYTEgPSAwOwogCW9wdC0+YWJicmV2ID0gMDsKIAlvcHQtPmRpZmYgPSAxOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1kaWZmLmMgYi9idWlsdGluLWRpZmYuYwppbmRleCA3YzJhODQxLi40YzI4OWU3IDEwMDY0NAotLS0gYS9idWlsdGluLWRpZmYuYworKysgYi9idWlsdGluLWRpZmYuYwpAQCAtMjAyLDYgKzIwMiwzNyBAQAogCXJvbGxiYWNrX2xvY2tfZmlsZShsb2NrX2ZpbGUpOwogfQogCitzdGF0aWMgaW50IGJ1aWx0aW5fZGlmZl9maWxlcyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgcmVzdWx0OworCXVuc2lnbmVkIGludCBvcHRpb25zID0gMDsKKworCXdoaWxlICgxIDwgYXJnYyAmJiBhcmd2WzFdWzBdID09ICctJykgeworCQlpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1iYXNlIikpCisJCQlyZXZzLT5tYXhfY291bnQgPSAxOworCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICItLW91cnMiKSkKKwkJCXJldnMtPm1heF9jb3VudCA9IDI7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi0tdGhlaXJzIikpCisJCQlyZXZzLT5tYXhfY291bnQgPSAzOworCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICItcSIpKQorCQkJb3B0aW9ucyB8PSBESUZGX1NJTEVOVF9PTl9SRU1PVkVEOworCQllbHNlCisJCQlyZXR1cm4gZXJyb3IoImludmFsaWQgb3B0aW9uOiAlcyIsIGFyZ3ZbMV0pOworCQlhcmd2Kys7IGFyZ2MtLTsKKwl9CisKKwlpZiAocmV2cy0+bWF4X2NvdW50ID09IC0xICYmCisJICAgIChyZXZzLT5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9QQVRDSCkpCisJCXJldnMtPmNvbWJpbmVfbWVyZ2VzID0gcmV2cy0+ZGVuc2VfY29tYmluZWRfbWVyZ2VzID0gMTsKKworCWlmIChyZWFkX2NhY2hlKCkgPCAwKSB7CisJCXBlcnJvcigicmVhZF9jYWNoZSIpOworCQlyZXR1cm4gLTE7CisJfQorCXJlc3VsdCA9IHJ1bl9kaWZmX2ZpbGVzKHJldnMsIG9wdGlvbnMpOworCXJldHVybiBkaWZmX3Jlc3VsdF9jb2RlKCZyZXZzLT5kaWZmb3B0LCByZXN1bHQpOworfQorCiBpbnQgY21kX2RpZmYoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCiB7CiAJaW50IGk7CkBAIC0yMzAsMzEgKzI2MSwzNCBAQAogCSAqIE49MiwgTT0wOgogCSAqICAgICAgdHJlZSB2cyB0cmVlIChkaWZmLXRyZWUpCiAJICoKKwkgKiBOPTAsIE09MCwgUD0yOgorCSAqICAgICAgY29tcGFyZSB0d28gZmlsZXN5c3RlbSBlbnRpdGllcyAoYWthIC0tbm8taW5kZXgpLgorCSAqCiAJICogT3RoZXIgY2FzZXMgYXJlIGVycm9ycy4KIAkgKi8KIAogCXByZWZpeCA9IHNldHVwX2dpdF9kaXJlY3RvcnlfZ2VudGx5KCZub25naXQpOwotCWdpdF9jb25maWcoZ2l0X2RpZmZfdWlfY29uZmlnKTsKKwlnaXRfY29uZmlnKGdpdF9kaWZmX3VpX2NvbmZpZywgTlVMTCk7CiAKIAlpZiAoZGlmZl91c2VfY29sb3JfZGVmYXVsdCA9PSAtMSkKIAkJZGlmZl91c2VfY29sb3JfZGVmYXVsdCA9IGdpdF91c2VfY29sb3JfZGVmYXVsdDsKIAogCWluaXRfcmV2aXNpb25zKCZyZXYsIHByZWZpeCk7CisKKwkvKiBJZiB0aGlzIGlzIGEgbm8taW5kZXggZGlmZiwganVzdCBydW4gaXQgYW5kIGV4aXQgdGhlcmUuICovCisJZGlmZl9ub19pbmRleCgmcmV2LCBhcmdjLCBhcmd2LCBub25naXQsIHByZWZpeCk7CisKKwkvKiBPdGhlcndpc2UsIHdlIGFyZSBkb2luZyB0aGUgdXN1YWwgImdpdCIgZGlmZiAqLwogCXJldi5kaWZmb3B0LnNraXBfc3RhdF91bm1hdGNoID0gISFkaWZmX2F1dG9fcmVmcmVzaF9pbmRleDsKIAotCWlmICghc2V0dXBfZGlmZl9ub19pbmRleCgmcmV2LCBhcmdjLCBhcmd2LCBub25naXQsIHByZWZpeCkpCi0JCWFyZ2MgPSAwOwotCWVsc2UKLQkJYXJnYyA9IHNldHVwX3JldmlzaW9ucyhhcmdjLCBhcmd2LCAmcmV2LCBOVUxMKTsKKwlpZiAobm9uZ2l0KQorCQlkaWUoIk5vdCBhIGdpdCByZXBvc2l0b3J5Iik7CisJYXJnYyA9IHNldHVwX3JldmlzaW9ucyhhcmdjLCBhcmd2LCAmcmV2LCBOVUxMKTsKIAlpZiAoIXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQpIHsKIAkJcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX1BBVENIOwogCQlpZiAoZGlmZl9zZXR1cF9kb25lKCZyZXYuZGlmZm9wdCkgPCAwKQogCQkJZGllKCJkaWZmX3NldHVwX2RvbmUgZmFpbGVkIik7CiAJfQotCWlmIChyZXYuZGlmZm9wdC5wcmVmaXggJiYgbm9uZ2l0KSB7Ci0JCXJldi5kaWZmb3B0LnByZWZpeCA9IE5VTEw7Ci0JCXJldi5kaWZmb3B0LnByZWZpeF9sZW5ndGggPSAwOwotCX0KIAlESUZGX09QVF9TRVQoJnJldi5kaWZmb3B0LCBBTExPV19FWFRFUk5BTCk7CiAJRElGRl9PUFRfU0VUKCZyZXYuZGlmZm9wdCwgUkVDVVJTSVZFKTsKIApAQCAtMjY1LDcgKzI5OSw4IEBACiAJaWYgKCFESUZGX09QVF9UU1QoJnJldi5kaWZmb3B0LCBFWElUX1dJVEhfU1RBVFVTKSkKIAkJc2V0dXBfcGFnZXIoKTsKIAotCS8qIERvIHdlIGhhdmUgLS1jYWNoZWQgYW5kIG5vdCBoYXZlIGEgcGVuZGluZyBvYmplY3QsIHRoZW4KKwkvKgorCSAqIERvIHdlIGhhdmUgLS1jYWNoZWQgYW5kIG5vdCBoYXZlIGEgcGVuZGluZyBvYmplY3QsIHRoZW4KIAkgKiBkZWZhdWx0IHRvIEhFQUQgYnkgaGFuZC4gIEVlay4KIAkgKi8KIAlpZiAoIXJldi5wZW5kaW5nLm5yKSB7CkBAIC0zMzMsNyArMzY4LDcgQEAKIAlpZiAoIWVudHMpIHsKIAkJc3dpdGNoIChibG9icykgewogCQljYXNlIDA6Ci0JCQlyZXN1bHQgPSBydW5fZGlmZl9maWxlc19jbWQoJnJldiwgYXJnYywgYXJndik7CisJCQlyZXN1bHQgPSBidWlsdGluX2RpZmZfZmlsZXMoJnJldiwgYXJnYywgYXJndik7CiAJCQlicmVhazsKIAkJY2FzZSAxOgogCQkJaWYgKHBhdGhzICE9IDEpCmRpZmYgLS1naXQgYS9idWlsdGluLWZhc3QtZXhwb3J0LmMgYi9idWlsdGluLWZhc3QtZXhwb3J0LmMKaW5kZXggNGFiOTNmYy4uZDBhNDYyZiAxMDA2NDQKLS0tIGEvYnVpbHRpbi1mYXN0LWV4cG9ydC5jCisrKyBiL2J1aWx0aW4tZmFzdC1leHBvcnQuYwpAQCAtMTg4LDYgKzE4OCw4IEBACiAJbWFya19vYmplY3QoJmNvbW1pdC0+b2JqZWN0KTsKIAlpZiAoIWlzX2VuY29kaW5nX3V0ZjgoZW5jb2RpbmcpKQogCQlyZWVuY29kZWQgPSByZWVuY29kZV9zdHJpbmcobWVzc2FnZSwgIlVURi04IiwgZW5jb2RpbmcpOworCWlmICghY29tbWl0LT5wYXJlbnRzKQorCQlwcmludGYoInJlc2V0ICVzXG4iLCAoY29uc3QgY2hhciopY29tbWl0LT51dGlsKTsKIAlwcmludGYoImNvbW1pdCAlc1xubWFyayA6JWRcbiUuKnNcbiUuKnNcbmRhdGEgJXVcbiVzIiwKIAkgICAgICAgKGNvbnN0IGNoYXIgKiljb21taXQtPnV0aWwsIGxhc3RfaWRudW0sCiAJICAgICAgIChpbnQpKGF1dGhvcl9lbmQgLSBhdXRob3IpLCBhdXRob3IsCkBAIC0zNjgsNyArMzcwLDcgQEAKIAl9OwogCiAJLyogd2UgaGFuZGxlIGVuY29kaW5ncyAqLwotCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnKTsKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CiAKIAlpbml0X3JldmlzaW9ucygmcmV2cywgcHJlZml4KTsKIAlhcmdjID0gc2V0dXBfcmV2aXNpb25zKGFyZ2MsIGFyZ3YsICZyZXZzLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tZmV0Y2gtcGFjay5jIGIvYnVpbHRpbi1mZXRjaC1wYWNrLmMKaW5kZXggYzk3YTQyNy4uNmU5OGNhZiAxMDA2NDQKLS0tIGEvYnVpbHRpbi1mZXRjaC1wYWNrLmMKKysrIGIvYnVpbHRpbi1mZXRjaC1wYWNrLmMKQEAgLTMwOSw3ICszMDksOCBAQAogCQl9CiAJCWZsdXNoZXMtLTsKIAl9Ci0JcmV0dXJuIHJldHZhbDsKKwkvKiBpdCBpcyBubyBlcnJvciB0byBmZXRjaCBpbnRvIGEgY29tcGxldGVseSBlbXB0eSByZXBvICovCisJcmV0dXJuIGNvdW50ID8gcmV0dmFsIDogMDsKIH0KIAogc3RhdGljIHN0cnVjdCBjb21taXRfbGlzdCAqY29tcGxldGU7CkBAIC02MzUsNyArNjM2LDcgQEAKIAlyZXR1cm4gZHN0OwogfQogCi1zdGF0aWMgaW50IGZldGNoX3BhY2tfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCitzdGF0aWMgaW50IGZldGNoX3BhY2tfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQogewogCWlmIChzdHJjbXAodmFyLCAiZmV0Y2gudW5wYWNrbGltaXQiKSA9PSAwKSB7CiAJCWZldGNoX3VucGFja19saW1pdCA9IGdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOwpAQCAtNjQ3LDcgKzY0OCw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSk7CisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbG9ja19maWxlIGxvY2s7CkBAIC02NTcsNyArNjU4LDcgQEAKIAlzdGF0aWMgaW50IGRpZF9zZXR1cDsKIAlpZiAoZGlkX3NldHVwKQogCQlyZXR1cm47Ci0JZ2l0X2NvbmZpZyhmZXRjaF9wYWNrX2NvbmZpZyk7CisJZ2l0X2NvbmZpZyhmZXRjaF9wYWNrX2NvbmZpZywgTlVMTCk7CiAJaWYgKDAgPD0gdHJhbnNmZXJfdW5wYWNrX2xpbWl0KQogCQl1bnBhY2tfbGltaXQgPSB0cmFuc2Zlcl91bnBhY2tfbGltaXQ7CiAJZWxzZSBpZiAoMCA8PSBmZXRjaF91bnBhY2tfbGltaXQpCmRpZmYgLS1naXQgYS9idWlsdGluLWZldGNoLmMgYi9idWlsdGluLWZldGNoLmMKaW5kZXggMTY3Zjk0OC4uOTdmZGM1MSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1mZXRjaC5jCisrKyBiL2J1aWx0aW4tZmV0Y2guYwpAQCAtMTI3LDE0ICsxMjcsOCBAQAogCQkvKiBNZXJnZSBldmVyeXRoaW5nIG9uIHRoZSBjb21tYW5kIGxpbmUsIGJ1dCBub3QgLS10YWdzICovCiAJCWZvciAocm0gPSByZWZfbWFwOyBybTsgcm0gPSBybS0+bmV4dCkKIAkJCXJtLT5tZXJnZSA9IDE7Ci0JCWlmICh0YWdzID09IFRBR1NfU0VUKSB7Ci0JCQlzdHJ1Y3QgcmVmc3BlYyByZWZzcGVjOwotCQkJcmVmc3BlYy5zcmMgPSAicmVmcy90YWdzLyI7Ci0JCQlyZWZzcGVjLmRzdCA9ICJyZWZzL3RhZ3MvIjsKLQkJCXJlZnNwZWMucGF0dGVybiA9IDE7Ci0JCQlyZWZzcGVjLmZvcmNlID0gMDsKLQkJCWdldF9mZXRjaF9tYXAocmVtb3RlX3JlZnMsICZyZWZzcGVjLCAmdGFpbCwgMCk7Ci0JCX0KKwkJaWYgKHRhZ3MgPT0gVEFHU19TRVQpCisJCQlnZXRfZmV0Y2hfbWFwKHJlbW90ZV9yZWZzLCB0YWdfcmVmc3BlYywgJnRhaWwsIDApOwogCX0gZWxzZSB7CiAJCS8qIFVzZSB0aGUgZGVmYXVsdHMgKi8KIAkJc3RydWN0IHJlbW90ZSAqcmVtb3RlID0gdHJhbnNwb3J0LT5yZW1vdGU7CkBAIC0xODcsOSArMTgxLDkgQEAKIAlsb2NrID0gbG9ja19hbnlfcmVmX2Zvcl91cGRhdGUocmVmLT5uYW1lLAogCQkJCSAgICAgICBjaGVja19vbGQgPyByZWYtPm9sZF9zaGExIDogTlVMTCwgMCk7CiAJaWYgKCFsb2NrKQotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIDI7CiAJaWYgKHdyaXRlX3JlZl9zaGExKGxvY2ssIHJlZi0+bmV3X3NoYTEsIG1zZykgPCAwKQotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIDI7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIzOSwxMCArMjMzLDEyIEBACiAKIAlpZiAoIWlzX251bGxfc2hhMShyZWYtPm9sZF9zaGExKSAmJgogCSAgICAhcHJlZml4Y21wKHJlZi0+bmFtZSwgInJlZnMvdGFncy8iKSkgewotCQlzcHJpbnRmKGRpc3BsYXksICItICUtKnMgJS0qcyAtPiAlcyIsCisJCWludCByOworCQlyID0gc191cGRhdGVfcmVmKCJ1cGRhdGluZyB0YWciLCByZWYsIDApOworCQlzcHJpbnRmKGRpc3BsYXksICIlYyAlLSpzICUtKnMgLT4gJXMlcyIsIHIgPyAnIScgOiAnLScsCiAJCQlTVU1NQVJZX1dJRFRILCAiW3RhZyB1cGRhdGVdIiwgUkVGQ09MX1dJRFRILCByZW1vdGUsCi0JCQlwcmV0dHlfcmVmKTsKLQkJcmV0dXJuIHNfdXBkYXRlX3JlZigidXBkYXRpbmcgdGFnIiwgcmVmLCAwKTsKKwkJCXByZXR0eV9yZWYsIHIgPyAiICAodW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYpIiA6ICIiKTsKKwkJcmV0dXJuIHI7CiAJfQogCiAJY3VycmVudCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShyZWYtPm9sZF9zaGExLCAxKTsKQEAgLTI1MCw2ICsyNDYsNyBAQAogCWlmICghY3VycmVudCB8fCAhdXBkYXRlZCkgewogCQljb25zdCBjaGFyICptc2c7CiAJCWNvbnN0IGNoYXIgKndoYXQ7CisJCWludCByOwogCQlpZiAoIXN0cm5jbXAocmVmLT5uYW1lLCAicmVmcy90YWdzLyIsIDEwKSkgewogCQkJbXNnID0gInN0b3JpbmcgdGFnIjsKIAkJCXdoYXQgPSAiW25ldyB0YWddIjsKQEAgLTI1OSwyNyArMjU2LDM2IEBACiAJCQl3aGF0ID0gIltuZXcgYnJhbmNoXSI7CiAJCX0KIAotCQlzcHJpbnRmKGRpc3BsYXksICIqICUtKnMgJS0qcyAtPiAlcyIsIFNVTU1BUllfV0lEVEgsIHdoYXQsCi0JCQlSRUZDT0xfV0lEVEgsIHJlbW90ZSwgcHJldHR5X3JlZik7Ci0JCXJldHVybiBzX3VwZGF0ZV9yZWYobXNnLCByZWYsIDApOworCQlyID0gc191cGRhdGVfcmVmKG1zZywgcmVmLCAwKTsKKwkJc3ByaW50ZihkaXNwbGF5LCAiJWMgJS0qcyAlLSpzIC0+ICVzJXMiLCByID8gJyEnIDogJyonLAorCQkJU1VNTUFSWV9XSURUSCwgd2hhdCwgUkVGQ09MX1dJRFRILCByZW1vdGUsIHByZXR0eV9yZWYsCisJCQlyID8gIiAgKHVuYWJsZSB0byB1cGRhdGUgbG9jYWwgcmVmKSIgOiAiIik7CisJCXJldHVybiByOwogCX0KIAogCWlmIChpbl9tZXJnZV9iYXNlcyhjdXJyZW50LCAmdXBkYXRlZCwgMSkpIHsKIAkJY2hhciBxdWlja3JlZls4M107CisJCWludCByOwogCQlzdHJjcHkocXVpY2tyZWYsIGZpbmRfdW5pcXVlX2FiYnJldihjdXJyZW50LT5vYmplY3Quc2hhMSwgREVGQVVMVF9BQkJSRVYpKTsKIAkJc3RyY2F0KHF1aWNrcmVmLCAiLi4iKTsKIAkJc3RyY2F0KHF1aWNrcmVmLCBmaW5kX3VuaXF1ZV9hYmJyZXYocmVmLT5uZXdfc2hhMSwgREVGQVVMVF9BQkJSRVYpKTsKLQkJc3ByaW50ZihkaXNwbGF5LCAiICAlLSpzICUtKnMgLT4gJXMiLCBTVU1NQVJZX1dJRFRILCBxdWlja3JlZiwKLQkJCVJFRkNPTF9XSURUSCwgcmVtb3RlLCBwcmV0dHlfcmVmKTsKLQkJcmV0dXJuIHNfdXBkYXRlX3JlZigiZmFzdCBmb3J3YXJkIiwgcmVmLCAxKTsKKwkJciA9IHNfdXBkYXRlX3JlZigiZmFzdCBmb3J3YXJkIiwgcmVmLCAxKTsKKwkJc3ByaW50ZihkaXNwbGF5LCAiJWMgJS0qcyAlLSpzIC0+ICVzJXMiLCByID8gJyEnIDogJyAnLAorCQkJU1VNTUFSWV9XSURUSCwgcXVpY2tyZWYsIFJFRkNPTF9XSURUSCwgcmVtb3RlLAorCQkJcHJldHR5X3JlZiwgciA/ICIgICh1bmFibGUgdG8gdXBkYXRlIGxvY2FsIHJlZikiIDogIiIpOworCQlyZXR1cm4gcjsKIAl9IGVsc2UgaWYgKGZvcmNlIHx8IHJlZi0+Zm9yY2UpIHsKIAkJY2hhciBxdWlja3JlZls4NF07CisJCWludCByOwogCQlzdHJjcHkocXVpY2tyZWYsIGZpbmRfdW5pcXVlX2FiYnJldihjdXJyZW50LT5vYmplY3Quc2hhMSwgREVGQVVMVF9BQkJSRVYpKTsKIAkJc3RyY2F0KHF1aWNrcmVmLCAiLi4uIik7CiAJCXN0cmNhdChxdWlja3JlZiwgZmluZF91bmlxdWVfYWJicmV2KHJlZi0+bmV3X3NoYTEsIERFRkFVTFRfQUJCUkVWKSk7Ci0JCXNwcmludGYoZGlzcGxheSwgIisgJS0qcyAlLSpzIC0+ICVzICAoZm9yY2VkIHVwZGF0ZSkiLAotCQkJU1VNTUFSWV9XSURUSCwgcXVpY2tyZWYsIFJFRkNPTF9XSURUSCwgcmVtb3RlLCBwcmV0dHlfcmVmKTsKLQkJcmV0dXJuIHNfdXBkYXRlX3JlZigiZm9yY2VkLXVwZGF0ZSIsIHJlZiwgMSk7CisJCXIgPSBzX3VwZGF0ZV9yZWYoImZvcmNlZC11cGRhdGUiLCByZWYsIDEpOworCQlzcHJpbnRmKGRpc3BsYXksICIlYyAlLSpzICUtKnMgLT4gJXMgICglcykiLCByID8gJyEnIDogJysnLAorCQkJU1VNTUFSWV9XSURUSCwgcXVpY2tyZWYsIFJFRkNPTF9XSURUSCwgcmVtb3RlLAorCQkJcHJldHR5X3JlZiwKKwkJCXIgPyAidW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYiIDogImZvcmNlZCB1cGRhdGUiKTsKKwkJcmV0dXJuIHI7CiAJfSBlbHNlIHsKIAkJc3ByaW50ZihkaXNwbGF5LCAiISAlLSpzICUtKnMgLT4gJXMgIChub24gZmFzdCBmb3J3YXJkKSIsCiAJCQlTVU1NQVJZX1dJRFRILCAiW3JlamVjdGVkXSIsIFJFRkNPTF9XSURUSCwgcmVtb3RlLApAQCAtMjg4LDExICsyOTQsMTIgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgc3RvcmVfdXBkYXRlZF9yZWZzKGNvbnN0IGNoYXIgKnVybCwgc3RydWN0IHJlZiAqcmVmX21hcCkKK3N0YXRpYyBpbnQgc3RvcmVfdXBkYXRlZF9yZWZzKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgY2hhciAqcmVtb3RlX25hbWUsCisJCXN0cnVjdCByZWYgKnJlZl9tYXApCiB7CiAJRklMRSAqZnA7CiAJc3RydWN0IGNvbW1pdCAqY29tbWl0OwotCWludCB1cmxfbGVuLCBpLCBub3RlX2xlbiwgc2hvd25fdXJsID0gMDsKKwlpbnQgdXJsX2xlbiwgaSwgbm90ZV9sZW4sIHNob3duX3VybCA9IDAsIHJjID0gMDsKIAljaGFyIG5vdGVbMTAyNF07CiAJY29uc3QgY2hhciAqd2hhdCwgKmtpbmQ7CiAJc3RydWN0IHJlZiAqcm07CkBAIC0zNTksMTMgKzM2NiwxMSBAQAogCQkJbm90ZSk7CiAKIAkJaWYgKHJlZikKLQkJCXVwZGF0ZV9sb2NhbF9yZWYocmVmLCB3aGF0LCB2ZXJib3NlLCBub3RlKTsKLQkJZWxzZSBpZiAodmVyYm9zZSkKKwkJCXJjIHw9IHVwZGF0ZV9sb2NhbF9yZWYocmVmLCB3aGF0LCB2ZXJib3NlLCBub3RlKTsKKwkJZWxzZQogCQkJc3ByaW50Zihub3RlLCAiKiAlLSpzICUtKnMgLT4gRkVUQ0hfSEVBRCIsCiAJCQkJU1VNTUFSWV9XSURUSCwgKmtpbmQgPyBraW5kIDogImJyYW5jaCIsCiAJCQkJIFJFRkNPTF9XSURUSCwgKndoYXQgPyB3aGF0IDogIkhFQUQiKTsKLQkJZWxzZQotCQkJKm5vdGUgPSAnXDAnOwogCQlpZiAoKm5vdGUpIHsKIAkJCWlmICghc2hvd25fdXJsKSB7CiAJCQkJZnByaW50ZihzdGRlcnIsICJGcm9tICUuKnNcbiIsCkBAIC0zNzYsNyArMzgxLDExIEBACiAJCX0KIAl9CiAJZmNsb3NlKGZwKTsKLQlyZXR1cm4gMDsKKwlpZiAocmMgJiAyKQorCQllcnJvcigic29tZSBsb2NhbCByZWZzIGNvdWxkIG5vdCBiZSB1cGRhdGVkOyB0cnkgcnVubmluZ1xuIgorCQkgICAgICAiICdnaXQgcmVtb3RlIHBydW5lICVzJyB0byByZW1vdmUgYW55IG9sZCwgY29uZmxpY3RpbmcgIgorCQkgICAgICAiYnJhbmNoZXMiLCByZW1vdGVfbmFtZSk7CisJcmV0dXJuIHJjOwogfQogCiAvKgpAQCAtNDQ2LDcgKzQ1NSw5IEBACiAJaWYgKHJldCkKIAkJcmV0ID0gdHJhbnNwb3J0X2ZldGNoX3JlZnModHJhbnNwb3J0LCByZWZfbWFwKTsKIAlpZiAoIXJldCkKLQkJcmV0IHw9IHN0b3JlX3VwZGF0ZWRfcmVmcyh0cmFuc3BvcnQtPnVybCwgcmVmX21hcCk7CisJCXJldCB8PSBzdG9yZV91cGRhdGVkX3JlZnModHJhbnNwb3J0LT51cmwsCisJCQkJdHJhbnNwb3J0LT5yZW1vdGUtPm5hbWUsCisJCQkJcmVmX21hcCk7CiAJdHJhbnNwb3J0X3VubG9ja19wYWNrKHRyYW5zcG9ydCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTUxMCwxMCArNTIxLDggQEAKIAkJICAgICB3aWxsX2ZldGNoKGhlYWQsIHJlZi0+b2xkX3NoYTEpKSkgewogCQkJcGF0aF9saXN0X2luc2VydChyZWZfbmFtZSwgJm5ld19yZWZzKTsKIAotCQkJcm0gPSBhbGxvY19yZWYoc3RybGVuKHJlZl9uYW1lKSArIDEpOwotCQkJc3RyY3B5KHJtLT5uYW1lLCByZWZfbmFtZSk7Ci0JCQlybS0+cGVlcl9yZWYgPSBhbGxvY19yZWYoc3RybGVuKHJlZl9uYW1lKSArIDEpOwotCQkJc3RyY3B5KHJtLT5wZWVyX3JlZi0+bmFtZSwgcmVmX25hbWUpOworCQkJcm0gPSBhbGxvY19yZWZfZnJvbV9zdHIocmVmX25hbWUpOworCQkJcm0tPnBlZXJfcmVmID0gYWxsb2NfcmVmX2Zyb21fc3RyKHJlZl9uYW1lKTsKIAkJCWhhc2hjcHkocm0tPm9sZF9zaGExLCByZWZfc2hhMSk7CiAKIAkJCSoqdGFpbCA9IHJtOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1mbXQtbWVyZ2UtbXNnLmMgYi9idWlsdGluLWZtdC1tZXJnZS1tc2cuYwppbmRleCA3MDc3ZDUyLi5iODkyNjIxIDEwMDY0NAotLS0gYS9idWlsdGluLWZtdC1tZXJnZS1tc2cuYworKysgYi9idWlsdGluLWZtdC1tZXJnZS1tc2cuYwpAQCAtNiwxMyArNiwxOCBAQAogI2luY2x1ZGUgInRhZy5oIgogCiBzdGF0aWMgY29uc3QgY2hhciAqZm10X21lcmdlX21zZ191c2FnZSA9Ci0JImdpdC1mbXQtbWVyZ2UtbXNnIFstLXN1bW1hcnldIFstLW5vLXN1bW1hcnldIFstLWZpbGUgPGZpbGU+XSI7CisJImdpdC1mbXQtbWVyZ2UtbXNnIFstLWxvZ10gWy0tbm8tbG9nXSBbLS1maWxlIDxmaWxlPl0iOwogCiBzdGF0aWMgaW50IG1lcmdlX3N1bW1hcnk7CiAKLXN0YXRpYyBpbnQgZm10X21lcmdlX21zZ19jb25maWcoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSkKK3N0YXRpYyBpbnQgZm10X21lcmdlX21zZ19jb25maWcoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCiB7Ci0JaWYgKCFzdHJjbXAoIm1lcmdlLnN1bW1hcnkiLCBrZXkpKQorCXN0YXRpYyBpbnQgZm91bmRfbWVyZ2VfbG9nID0gMDsKKwlpZiAoIXN0cmNtcCgibWVyZ2UubG9nIiwga2V5KSkgeworCQlmb3VuZF9tZXJnZV9sb2cgPSAxOworCQltZXJnZV9zdW1tYXJ5ID0gZ2l0X2NvbmZpZ19ib29sKGtleSwgdmFsdWUpOworCX0KKwlpZiAoIWZvdW5kX21lcmdlX2xvZyAmJiAhc3RyY21wKCJtZXJnZS5zdW1tYXJ5Iiwga2V5KSkKIAkJbWVyZ2Vfc3VtbWFyeSA9IGdpdF9jb25maWdfYm9vbChrZXksIHZhbHVlKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTI1NSwxMiArMjYwLDEzIEBACiAJdW5zaWduZWQgY2hhciBoZWFkX3NoYTFbMjBdOwogCWNvbnN0IGNoYXIgKmN1cnJlbnRfYnJhbmNoOwogCi0JZ2l0X2NvbmZpZyhmbXRfbWVyZ2VfbXNnX2NvbmZpZyk7CisJZ2l0X2NvbmZpZyhmbXRfbWVyZ2VfbXNnX2NvbmZpZywgTlVMTCk7CiAKIAl3aGlsZSAoYXJnYyA+IDEpIHsKLQkJaWYgKCFzdHJjbXAoYXJndlsxXSwgIi0tc3VtbWFyeSIpKQorCQlpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1sb2ciKSB8fCAhc3RyY21wKGFyZ3ZbMV0sICItLXN1bW1hcnkiKSkKIAkJCW1lcmdlX3N1bW1hcnkgPSAxOwotCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICItLW5vLXN1bW1hcnkiKSkKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1uby1sb2ciKQorCQkJCXx8ICFzdHJjbXAoYXJndlsxXSwgIi0tbm8tc3VtbWFyeSIpKQogCQkJbWVyZ2Vfc3VtbWFyeSA9IDA7CiAJCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi1GIikgfHwgIXN0cmNtcChhcmd2WzFdLCAiLS1maWxlIikpIHsKIAkJCWlmIChhcmdjIDwgMykKZGlmZiAtLWdpdCBhL2J1aWx0aW4tZm9yLWVhY2gtcmVmLmMgYi9idWlsdGluLWZvci1lYWNoLXJlZi5jCmluZGV4IDA3ZDljNTcuLmZlZjkzZDcgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tZm9yLWVhY2gtcmVmLmMKKysrIGIvYnVpbHRpbi1mb3ItZWFjaC1yZWYuYwpAQCAtMjM0LDYgKzIzNCwxMyBAQAogCQkJbmFtZSsrOwogCQlpZiAoIXN0cmNtcChuYW1lLCAidGFnIikpCiAJCQl2LT5zID0gdGFnLT50YWc7CisJCWVsc2UgaWYgKCFzdHJjbXAobmFtZSwgInR5cGUiKSAmJiB0YWctPnRhZ2dlZCkKKwkJCXYtPnMgPSB0eXBlbmFtZSh0YWctPnRhZ2dlZC0+dHlwZSk7CisJCWVsc2UgaWYgKCFzdHJjbXAobmFtZSwgIm9iamVjdCIpICYmIHRhZy0+dGFnZ2VkKSB7CisJCQljaGFyICpzID0geG1hbGxvYyg0MSk7CisJCQlzdHJjcHkocywgc2hhMV90b19oZXgodGFnLT50YWdnZWQtPnNoYTEpKTsKKwkJCXYtPnMgPSBzOworCQl9CiAJfQogfQogCmRpZmYgLS1naXQgYS9idWlsdGluLWdjLmMgYi9idWlsdGluLWdjLmMKaW5kZXggOGNlZjM2Zi4uZjU2MjViYiAxMDA2NDQKLS0tIGEvYnVpbHRpbi1nYy5jCisrKyBiL2J1aWx0aW4tZ2MuYwpAQCAtMzUsNyArMzUsNyBAQAogc3RhdGljIGNvbnN0IGNoYXIgKmFyZ3ZfcHJ1bmVbXSA9IHsicHJ1bmUiLCAiLS1leHBpcmUiLCBOVUxMLCBOVUxMfTsKIHN0YXRpYyBjb25zdCBjaGFyICphcmd2X3JlcmVyZVtdID0geyJyZXJlcmUiLCAiZ2MiLCBOVUxMfTsKIAotc3RhdGljIGludCBnY19jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3N0YXRpYyBpbnQgZ2NfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQogewogCWlmICghc3RyY21wKHZhciwgImdjLnBhY2tyZWZzIikpIHsKIAkJaWYgKHZhbHVlICYmICFzdHJjbXAodmFsdWUsICJub3RiYXJlIikpCkBAIC02Nyw3ICs2Nyw3IEBACiAJCXBydW5lX2V4cGlyZSA9IHhzdHJkdXAodmFsdWUpOwogCQlyZXR1cm4gMDsKIAl9Ci0JcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlKTsKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKIH0KIAogc3RhdGljIHZvaWQgYXBwZW5kX29wdGlvbihjb25zdCBjaGFyICoqY21kLCBjb25zdCBjaGFyICpvcHQsIGludCBtYXhfbGVuZ3RoKQpAQCAtMTU3LDYgKzE1NywzNCBAQAogCXJldHVybiBnY19hdXRvX3BhY2tfbGltaXQgPD0gY250OwogfQogCitzdGF0aWMgaW50IHJ1bl9ob29rKHZvaWQpCit7CisJY29uc3QgY2hhciAqYXJndlsyXTsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBob29rOworCWludCByZXQ7CisKKwlhcmd2WzBdID0gZ2l0X3BhdGgoImhvb2tzL3ByZS1hdXRvLWdjIik7CisJYXJndlsxXSA9IE5VTEw7CisKKwlpZiAoYWNjZXNzKGFyZ3ZbMF0sIFhfT0spIDwgMCkKKwkJcmV0dXJuIDA7CisKKwltZW1zZXQoJmhvb2ssIDAsIHNpemVvZihob29rKSk7CisJaG9vay5hcmd2ID0gYXJndjsKKwlob29rLm5vX3N0ZGluID0gMTsKKwlob29rLnN0ZG91dF90b19zdGRlcnIgPSAxOworCisJcmV0ID0gc3RhcnRfY29tbWFuZCgmaG9vayk7CisJaWYgKHJldCkgeworCQl3YXJuaW5nKCJDb3VsZCBub3Qgc3Bhd24gJXMiLCBhcmd2WzBdKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0ID0gZmluaXNoX2NvbW1hbmQoJmhvb2spOworCWlmIChyZXQgPT0gLUVSUl9SVU5fQ09NTUFORF9XQUlUUElEX1NJR05BTCkKKwkJd2FybmluZygiJXMgZXhpdGVkIGR1ZSB0byB1bmNhdWdodCBzaWduYWwiLCBhcmd2WzBdKTsKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IG5lZWRfdG9fZ2Modm9pZCkKIHsKIAkvKgpAQCAtMTc2LDYgKzIwNCw5IEBACiAJCWFwcGVuZF9vcHRpb24oYXJndl9yZXBhY2ssICItQSIsIE1BWF9BREQpOwogCWVsc2UgaWYgKCF0b29fbWFueV9sb29zZV9vYmplY3RzKCkpCiAJCXJldHVybiAwOworCisJaWYgKHJ1bl9ob29rKCkpCisJCXJldHVybiAwOwogCXJldHVybiAxOwogfQogCkBAIC0xODgsMTQgKzIxOSwxNCBAQAogCWNoYXIgYnVmWzgwXTsKIAogCXN0cnVjdCBvcHRpb24gYnVpbHRpbl9nY19vcHRpb25zW10gPSB7Ci0JCU9QVF9CT09MRUFOKDAsICJwcnVuZSIsICZwcnVuZSwgInBydW5lIHVucmVmZXJlbmNlZCBvYmplY3RzIiksCisJCU9QVF9CT09MRUFOKDAsICJwcnVuZSIsICZwcnVuZSwgInBydW5lIHVucmVmZXJlbmNlZCBvYmplY3RzIChkZXByZWNhdGVkKSIpLAogCQlPUFRfQk9PTEVBTigwLCAiYWdncmVzc2l2ZSIsICZhZ2dyZXNzaXZlLCAiYmUgbW9yZSB0aG9yb3VnaCAoaW5jcmVhc2VkIHJ1bnRpbWUpIiksCiAJCU9QVF9CT09MRUFOKDAsICJhdXRvIiwgJmF1dG9fZ2MsICJlbmFibGUgYXV0by1nYyBtb2RlIiksCiAJCU9QVF9CT09MRUFOKCdxJywgInF1aWV0IiwgJnF1aWV0LCAic3VwcHJlc3MgcHJvZ3Jlc3MgcmVwb3J0cyIpLAogCQlPUFRfRU5EKCkKIAl9OwogCi0JZ2l0X2NvbmZpZyhnY19jb25maWcpOworCWdpdF9jb25maWcoZ2NfY29uZmlnLCBOVUxMKTsKIAogCWlmIChwYWNrX3JlZnMgPCAwKQogCQlwYWNrX3JlZnMgPSAhaXNfYmFyZV9yZXBvc2l0b3J5KCk7CkBAIC0yMTgsMjQgKzI0OSwxNCBAQAogCQkvKgogCQkgKiBBdXRvLWdjIHNob3VsZCBiZSBsZWFzdCBpbnRydXNpdmUgYXMgcG9zc2libGUuCiAJCSAqLwotCQlwcnVuZSA9IDA7CiAJCWlmICghbmVlZF90b19nYygpKQogCQkJcmV0dXJuIDA7CiAJCWZwcmludGYoc3RkZXJyLCAiQXV0byBwYWNraW5nIHlvdXIgcmVwb3NpdG9yeSBmb3Igb3B0aW11bSAiCiAJCQkicGVyZm9ybWFuY2UuIFlvdSBtYXkgYWxzb1xuIgogCQkJInJ1biBcImdpdCBnY1wiIG1hbnVhbGx5LiBTZWUgIgogCQkJIlwiZ2l0IGhlbHAgZ2NcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIpOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIFVzZSBzYWZlciAoZm9yIHNoYXJlZCByZXBvcykgIi1BIiBvcHRpb24gdG8KLQkJICogcmVwYWNrIHdoZW4gbm90IHBydW5pbmcuIEF1dG8tZ2MgbWFrZXMgaXRzCi0JCSAqIG93biBkZWNpc2lvbi4KLQkJICovCi0JCWlmIChwcnVuZSkKLQkJCWFwcGVuZF9vcHRpb24oYXJndl9yZXBhY2ssICItYSIsIE1BWF9BREQpOwotCQllbHNlCi0JCQlhcHBlbmRfb3B0aW9uKGFyZ3ZfcmVwYWNrLCAiLUEiLCBNQVhfQUREKTsKLQl9CisJfSBlbHNlCisJCWFwcGVuZF9vcHRpb24oYXJndl9yZXBhY2ssICItQSIsIE1BWF9BREQpOwogCiAJaWYgKHBhY2tfcmVmcyAmJiBydW5fY29tbWFuZF92X29wdChhcmd2X3BhY2tfcmVmcywgUlVOX0dJVF9DTUQpKQogCQlyZXR1cm4gZXJyb3IoRkFJTEVEX1JVTiwgYXJndl9wYWNrX3JlZnNbMF0pOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1ncmVwLmMgYi9idWlsdGluLWdyZXAuYwppbmRleCBlZjI5OTEwLi5kOGIwNmNlIDEwMDY0NAotLS0gYS9idWlsdGluLWdyZXAuYworKysgYi9idWlsdGluLWdyZXAuYwpAQCAtNDI3LDMzICs0MjcsMzUgQEAKIAlzdHJ1Y3QgbmFtZV9lbnRyeSBlbnRyeTsKIAljaGFyICpkb3duOwogCWludCB0bl9sZW4gPSBzdHJsZW4odHJlZV9uYW1lKTsKLQljaGFyICpwYXRoX2J1ZiA9IHhtYWxsb2MoUEFUSF9NQVggKyB0bl9sZW4gKyAxMDApOworCXN0cnVjdCBzdHJidWYgcGF0aGJ1ZjsKKworCXN0cmJ1Zl9pbml0KCZwYXRoYnVmLCBQQVRIX01BWCArIHRuX2xlbik7CiAKIAlpZiAodG5fbGVuKSB7Ci0JCXRuX2xlbiA9IHNwcmludGYocGF0aF9idWYsICIlczoiLCB0cmVlX25hbWUpOwotCQlkb3duID0gcGF0aF9idWYgKyB0bl9sZW47Ci0JCXN0cmNhdChkb3duLCBiYXNlKTsKKwkJc3RyYnVmX2FkZCgmcGF0aGJ1ZiwgdHJlZV9uYW1lLCB0bl9sZW4pOworCQlzdHJidWZfYWRkY2goJnBhdGhidWYsICc6Jyk7CisJCXRuX2xlbiA9IHBhdGhidWYubGVuOwogCX0KLQllbHNlIHsKLQkJZG93biA9IHBhdGhfYnVmOwotCQlzdHJjcHkoZG93biwgYmFzZSk7Ci0JfQotCWxlbiA9IHN0cmxlbihwYXRoX2J1Zik7CisJc3RyYnVmX2FkZHN0cigmcGF0aGJ1ZiwgYmFzZSk7CisJbGVuID0gcGF0aGJ1Zi5sZW47CiAKIAl3aGlsZSAodHJlZV9lbnRyeSh0cmVlLCAmZW50cnkpKSB7Ci0JCXN0cmNweShwYXRoX2J1ZiArIGxlbiwgZW50cnkucGF0aCk7CisJCWludCB0ZV9sZW4gPSB0cmVlX2VudHJ5X2xlbihlbnRyeS5wYXRoLCBlbnRyeS5zaGExKTsKKwkJcGF0aGJ1Zi5sZW4gPSBsZW47CisJCXN0cmJ1Zl9hZGQoJnBhdGhidWYsIGVudHJ5LnBhdGgsIHRlX2xlbik7CiAKIAkJaWYgKFNfSVNESVIoZW50cnkubW9kZSkpCiAJCQkvKiBNYXRjaCAiYWJjLyIgYWdhaW5zdCBwYXRoc3BlYyB0bwogCQkJICogZGVjaWRlIGlmIHdlIHdhbnQgdG8gZGVzY2VuZCBpbnRvICJhYmMiCiAJCQkgKiBkaXJlY3RvcnkuCiAJCQkgKi8KLQkJCXN0cmNweShwYXRoX2J1ZiArIGxlbiArIHRyZWVfZW50cnlfbGVuKGVudHJ5LnBhdGgsIGVudHJ5LnNoYTEpLCAiLyIpOworCQkJc3RyYnVmX2FkZGNoKCZwYXRoYnVmLCAnLycpOwogCisJCWRvd24gPSBwYXRoYnVmLmJ1ZiArIHRuX2xlbjsKIAkJaWYgKCFwYXRoc3BlY19tYXRjaGVzKHBhdGhzLCBkb3duKSkKIAkJCTsKIAkJZWxzZSBpZiAoU19JU1JFRyhlbnRyeS5tb2RlKSkKLQkJCWhpdCB8PSBncmVwX3NoYTEob3B0LCBlbnRyeS5zaGExLCBwYXRoX2J1ZiwgdG5fbGVuKTsKKwkJCWhpdCB8PSBncmVwX3NoYTEob3B0LCBlbnRyeS5zaGExLCBwYXRoYnVmLmJ1ZiwgdG5fbGVuKTsKIAkJZWxzZSBpZiAoU19JU0RJUihlbnRyeS5tb2RlKSkgewogCQkJZW51bSBvYmplY3RfdHlwZSB0eXBlOwogCQkJc3RydWN0IHRyZWVfZGVzYyBzdWI7CkBAIC00NjksNiArNDcxLDcgQEAKIAkJCWZyZWUoZGF0YSk7CiAJCX0KIAl9CisJc3RyYnVmX3JlbGVhc2UoJnBhdGhidWYpOwogCXJldHVybiBoaXQ7CiB9CiAKQEAgLTQ5NSw3ICs0OTgsNyBAQAogfQogCiBzdGF0aWMgY29uc3QgY2hhciBidWlsdGluX2dyZXBfdXNhZ2VbXSA9Ci0iZ2l0LWdyZXAgPG9wdGlvbj4qIDxyZXY+KiBbLWVdIDxwYXR0ZXJuPiBbPHBhdGg+Li4uXSI7CisiZ2l0LWdyZXAgPG9wdGlvbj4qIFstZV0gPHBhdHRlcm4+IDxyZXY+KiBbWy0tXSA8cGF0aD4uLi5dIjsKIAogc3RhdGljIGNvbnN0IGNoYXIgZW1zZ19pbnZhbGlkX2NvbnRleHRfbGVuW10gPQogIiVzOiBpbnZhbGlkIGNvbnRleHQgbGVuZ3RoIGFyZ3VtZW50IjsKZGlmZiAtLWdpdCBhL2J1aWx0aW4taHR0cC1mZXRjaC5jIGIvYnVpbHRpbi1odHRwLWZldGNoLmMKaW5kZXggYjFmMzM4OS4uM2EwNjI0OCAxMDA2NDQKLS0tIGEvYnVpbHRpbi1odHRwLWZldGNoLmMKKysrIGIvYnVpbHRpbi1odHRwLWZldGNoLmMKQEAgLTE4LDcgKzE4LDcgQEAKIAlpbnQgZ2V0X3ZlcmJvc2VseSA9IDA7CiAJaW50IGdldF9yZWNvdmVyID0gMDsKIAotCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnKTsKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CiAKIAl3aGlsZSAoYXJnIDwgYXJnYyAmJiBhcmd2W2FyZ11bMF0gPT0gJy0nKSB7CiAJCWlmIChhcmd2W2FyZ11bMV0gPT0gJ3QnKSB7CmRpZmYgLS1naXQgYS9idWlsdGluLWluaXQtZGIuYyBiL2J1aWx0aW4taW5pdC1kYi5jCmluZGV4IDI4NTQ4NjguLmM2OGEzYjEgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4taW5pdC1kYi5jCisrKyBiL2J1aWx0aW4taW5pdC1kYi5jCkBAIC0xMDQsMTIgKzEwNCwxNCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgY29weV90ZW1wbGF0ZXMoY29uc3QgY2hhciAqZ2l0X2RpciwgaW50IGxlbiwgY29uc3QgY2hhciAqdGVtcGxhdGVfZGlyKQorc3RhdGljIHZvaWQgY29weV90ZW1wbGF0ZXMoY29uc3QgY2hhciAqdGVtcGxhdGVfZGlyKQogewogCWNoYXIgcGF0aFtQQVRIX01BWF07CiAJY2hhciB0ZW1wbGF0ZV9wYXRoW1BBVEhfTUFYXTsKIAlpbnQgdGVtcGxhdGVfbGVuOwogCURJUiAqZGlyOworCWNvbnN0IGNoYXIgKmdpdF9kaXIgPSBnZXRfZ2l0X2RpcigpOworCWludCBsZW4gPSBzdHJsZW4oZ2l0X2Rpcik7CiAKIAlpZiAoIXRlbXBsYXRlX2RpcikKIAkJdGVtcGxhdGVfZGlyID0gZ2V0ZW52KFRFTVBMQVRFX0RJUl9FTlZJUk9OTUVOVCk7CkBAIC0xMjUsNiArMTI3LDggQEAKIAkJCXRlbXBsYXRlX2RpciA9IHN0cmJ1Zl9kZXRhY2goJmQsIE5VTEwpOwogCQl9CiAJfQorCWlmICghdGVtcGxhdGVfZGlyWzBdKQorCQlyZXR1cm47CiAJc3RyY3B5KHRlbXBsYXRlX3BhdGgsIHRlbXBsYXRlX2Rpcik7CiAJdGVtcGxhdGVfbGVuID0gc3RybGVuKHRlbXBsYXRlX3BhdGgpOwogCWlmICh0ZW1wbGF0ZV9wYXRoW3RlbXBsYXRlX2xlbi0xXSAhPSAnLycpIHsKQEAgLTE0Miw3ICsxNDYsNyBAQAogCXN0cmNweSh0ZW1wbGF0ZV9wYXRoICsgdGVtcGxhdGVfbGVuLCAiY29uZmlnIik7CiAJcmVwb3NpdG9yeV9mb3JtYXRfdmVyc2lvbiA9IDA7CiAJZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoY2hlY2tfcmVwb3NpdG9yeV9mb3JtYXRfdmVyc2lvbiwKLQkJCSAgICAgdGVtcGxhdGVfcGF0aCk7CisJCQkgICAgIHRlbXBsYXRlX3BhdGgsIE5VTEwpOwogCXRlbXBsYXRlX3BhdGhbdGVtcGxhdGVfbGVuXSA9IDA7CiAKIAlpZiAocmVwb3NpdG9yeV9mb3JtYXRfdmVyc2lvbiAmJgpAQCAtMTU2LDYgKzE2MCw4IEBACiAJfQogCiAJbWVtY3B5KHBhdGgsIGdpdF9kaXIsIGxlbik7CisJaWYgKGxlbiAmJiBwYXRoW2xlbiAtIDFdICE9ICcvJykKKwkJcGF0aFtsZW4rK10gPSAnLyc7CiAJcGF0aFtsZW5dID0gMDsKIAljb3B5X3RlbXBsYXRlc18xKHBhdGgsIGxlbiwKIAkJCSB0ZW1wbGF0ZV9wYXRoLCB0ZW1wbGF0ZV9sZW4sCkBAIC0xNjMsOCArMTY5LDkgQEAKIAljbG9zZWRpcihkaXIpOwogfQogCi1zdGF0aWMgaW50IGNyZWF0ZV9kZWZhdWx0X2ZpbGVzKGNvbnN0IGNoYXIgKmdpdF9kaXIsIGNvbnN0IGNoYXIgKnRlbXBsYXRlX3BhdGgpCitzdGF0aWMgaW50IGNyZWF0ZV9kZWZhdWx0X2ZpbGVzKGNvbnN0IGNoYXIgKnRlbXBsYXRlX3BhdGgpCiB7CisJY29uc3QgY2hhciAqZ2l0X2RpciA9IGdldF9naXRfZGlyKCk7CiAJdW5zaWduZWQgbGVuID0gc3RybGVuKGdpdF9kaXIpOwogCXN0YXRpYyBjaGFyIHBhdGhbUEFUSF9NQVhdOwogCXN0cnVjdCBzdGF0IHN0MTsKQEAgLTE4MywzNSArMTkwLDI3IEBACiAJLyoKIAkgKiBDcmVhdGUgLmdpdC9yZWZzL3toZWFkcyx0YWdzfQogCSAqLwotCXN0cmNweShwYXRoICsgbGVuLCAicmVmcyIpOwotCXNhZmVfY3JlYXRlX2RpcihwYXRoLCAxKTsKLQlzdHJjcHkocGF0aCArIGxlbiwgInJlZnMvaGVhZHMiKTsKLQlzYWZlX2NyZWF0ZV9kaXIocGF0aCwgMSk7Ci0Jc3RyY3B5KHBhdGggKyBsZW4sICJyZWZzL3RhZ3MiKTsKLQlzYWZlX2NyZWF0ZV9kaXIocGF0aCwgMSk7CisJc2FmZV9jcmVhdGVfZGlyKGdpdF9wYXRoKCJyZWZzIiksIDEpOworCXNhZmVfY3JlYXRlX2RpcihnaXRfcGF0aCgicmVmcy9oZWFkcyIpLCAxKTsKKwlzYWZlX2NyZWF0ZV9kaXIoZ2l0X3BhdGgoInJlZnMvdGFncyIpLCAxKTsKIAogCS8qIEZpcnN0IGNvcHkgdGhlIHRlbXBsYXRlcyAtLSB3ZSBtaWdodCBoYXZlIHRoZSBkZWZhdWx0CiAJICogY29uZmlnIGZpbGUgdGhlcmUsIGluIHdoaWNoIGNhc2Ugd2Ugd291bGQgd2FudCB0byByZWFkCiAJICogZnJvbSBpdCBhZnRlciBpbnN0YWxsaW5nLgogCSAqLwotCXBhdGhbbGVuXSA9IDA7Ci0JY29weV90ZW1wbGF0ZXMocGF0aCwgbGVuLCB0ZW1wbGF0ZV9wYXRoKTsKKwljb3B5X3RlbXBsYXRlcyh0ZW1wbGF0ZV9wYXRoKTsKIAotCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnKTsKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CiAKIAkvKgogCSAqIFdlIHdvdWxkIGhhdmUgY3JlYXRlZCB0aGUgYWJvdmUgdW5kZXIgdXNlcidzIHVtYXNrIC0tIHVuZGVyCiAJICogc2hhcmVkLXJlcG9zaXRvcnkgc2V0dGluZ3MsIHdlIHdvdWxkIG5lZWQgdG8gZml4IHRoZW0gdXAuCiAJICovCiAJaWYgKHNoYXJlZF9yZXBvc2l0b3J5KSB7Ci0JCXBhdGhbbGVuXSA9IDA7Ci0JCWFkanVzdF9zaGFyZWRfcGVybShwYXRoKTsKLQkJc3RyY3B5KHBhdGggKyBsZW4sICJyZWZzIik7Ci0JCWFkanVzdF9zaGFyZWRfcGVybShwYXRoKTsKLQkJc3RyY3B5KHBhdGggKyBsZW4sICJyZWZzL2hlYWRzIik7Ci0JCWFkanVzdF9zaGFyZWRfcGVybShwYXRoKTsKLQkJc3RyY3B5KHBhdGggKyBsZW4sICJyZWZzL3RhZ3MiKTsKLQkJYWRqdXN0X3NoYXJlZF9wZXJtKHBhdGgpOworCQlhZGp1c3Rfc2hhcmVkX3Blcm0oZ2V0X2dpdF9kaXIoKSk7CisJCWFkanVzdF9zaGFyZWRfcGVybShnaXRfcGF0aCgicmVmcyIpKTsKKwkJYWRqdXN0X3NoYXJlZF9wZXJtKGdpdF9wYXRoKCJyZWZzL2hlYWRzIikpOworCQlhZGp1c3Rfc2hhcmVkX3Blcm0oZ2l0X3BhdGgoInJlZnMvdGFncyIpKTsKIAl9CiAKIAkvKgpAQCAtMjUxLDEyICsyNTAsMTQgQEAKIAkJLyogYWxsb3cgdGVtcGxhdGUgY29uZmlnIGZpbGUgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgKi8KIAkJaWYgKGxvZ19hbGxfcmVmX3VwZGF0ZXMgPT0gLTEpCiAJCSAgICBnaXRfY29uZmlnX3NldCgiY29yZS5sb2dhbGxyZWZ1cGRhdGVzIiwgInRydWUiKTsKLQkJaWYgKHdvcmtfdHJlZSAhPSBnaXRfd29ya190cmVlX2NmZykKKwkJaWYgKHByZWZpeGNtcChnaXRfZGlyLCB3b3JrX3RyZWUpIHx8CisJCSAgICBzdHJjbXAoZ2l0X2RpciArIHN0cmxlbih3b3JrX3RyZWUpLCAiLy5naXQiKSkgewogCQkJZ2l0X2NvbmZpZ19zZXQoImNvcmUud29ya3RyZWUiLCB3b3JrX3RyZWUpOworCQl9CiAJfQogCi0JLyogQ2hlY2sgaWYgc3ltbGluayBpcyBzdXBwb3J0ZWQgaW4gdGhlIHdvcmsgdHJlZSAqLwogCWlmICghcmVpbml0KSB7CisJCS8qIENoZWNrIGlmIHN5bWxpbmsgaXMgc3VwcG9ydGVkIGluIHRoZSB3b3JrIHRyZWUgKi8KIAkJcGF0aFtsZW5dID0gMDsKIAkJc3RyY3B5KHBhdGggKyBsZW4sICJ0WFhYWFhYIik7CiAJCWlmICghY2xvc2UoeG1rc3RlbXAocGF0aCkpICYmCkBAIC0yNjcsNTEgKzI2OCwxMDUgQEAKIAkJCXVubGluayhwYXRoKTsgLyogZ29vZCAqLwogCQllbHNlCiAJCQlnaXRfY29uZmlnX3NldCgiY29yZS5zeW1saW5rcyIsICJmYWxzZSIpOworCisJCS8qIENoZWNrIGlmIHRoZSBmaWxlc3lzdGVtIGlzIGNhc2UtaW5zZW5zaXRpdmUgKi8KKwkJcGF0aFtsZW5dID0gMDsKKwkJc3RyY3B5KHBhdGggKyBsZW4sICJDb05mSWciKTsKKwkJaWYgKCFhY2Nlc3MocGF0aCwgRl9PSykpCisJCQlnaXRfY29uZmlnX3NldCgiY29yZS5pZ25vcmVjYXNlIiwgInRydWUiKTsKIAl9CiAKIAlyZXR1cm4gcmVpbml0OwogfQogCi1zdGF0aWMgdm9pZCBndWVzc19yZXBvc2l0b3J5X3R5cGUoY29uc3QgY2hhciAqZ2l0X2RpcikKK2ludCBpbml0X2RiKGNvbnN0IGNoYXIgKnRlbXBsYXRlX2RpciwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCWNvbnN0IGNoYXIgKnNoYTFfZGlyOworCWNoYXIgKnBhdGg7CisJaW50IGxlbiwgcmVpbml0OworCisJc2FmZV9jcmVhdGVfZGlyKGdldF9naXRfZGlyKCksIDApOworCisJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZSByZXBvc2l0b3J5IHZlcnNpb24gaXMgcmlnaHQuCisJICogTm90ZSB0aGF0IGEgbmV3bHkgY3JlYXRlZCByZXBvc2l0b3J5IGRvZXMgbm90IGhhdmUKKwkgKiBjb25maWcgZmlsZSwgc28gdGhpcyB3aWxsIG5vdCBmYWlsLiAgV2hhdCB3ZSBhcmUgY2F0Y2hpbmcKKwkgKiBpcyBhbiBhdHRlbXB0IHRvIHJlaW5pdGlhbGl6ZSBuZXcgcmVwb3NpdG9yeSB3aXRoIGFuIG9sZCB0b29sLgorCSAqLworCWNoZWNrX3JlcG9zaXRvcnlfZm9ybWF0KCk7CisKKwlyZWluaXQgPSBjcmVhdGVfZGVmYXVsdF9maWxlcyh0ZW1wbGF0ZV9kaXIpOworCisJc2hhMV9kaXIgPSBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpOworCWxlbiA9IHN0cmxlbihzaGExX2Rpcik7CisJcGF0aCA9IHhtYWxsb2MobGVuICsgNDApOworCW1lbWNweShwYXRoLCBzaGExX2RpciwgbGVuKTsKKworCXNhZmVfY3JlYXRlX2RpcihzaGExX2RpciwgMSk7CisJc3RyY3B5KHBhdGgrbGVuLCAiL3BhY2siKTsKKwlzYWZlX2NyZWF0ZV9kaXIocGF0aCwgMSk7CisJc3RyY3B5KHBhdGgrbGVuLCAiL2luZm8iKTsKKwlzYWZlX2NyZWF0ZV9kaXIocGF0aCwgMSk7CisKKwlpZiAoc2hhcmVkX3JlcG9zaXRvcnkpIHsKKwkJY2hhciBidWZbMTBdOworCQkvKiBXZSBkbyBub3Qgc3BlbGwgImdyb3VwIiBhbmQgc3VjaCwgc28gdGhhdAorCQkgKiB0aGUgY29uZmlndXJhdGlvbiBjYW4gYmUgcmVhZCBieSBvbGRlciB2ZXJzaW9uCisJCSAqIG9mIGdpdC4gTm90ZSwgd2UgdXNlIG9jdGFsIG51bWJlcnMgZm9yIG5ldyBzaGFyZSBtb2RlcywKKwkJICogYW5kIGNvbXBhdGliaWxpdHkgdmFsdWVzIGZvciBQRVJNX0dST1VQIGFuZAorCQkgKiBQRVJNX0VWRVJZQk9EWS4KKwkJICovCisJCWlmIChzaGFyZWRfcmVwb3NpdG9yeSA9PSBQRVJNX0dST1VQKQorCQkJc3ByaW50ZihidWYsICIlZCIsIE9MRF9QRVJNX0dST1VQKTsKKwkJZWxzZSBpZiAoc2hhcmVkX3JlcG9zaXRvcnkgPT0gUEVSTV9FVkVSWUJPRFkpCisJCQlzcHJpbnRmKGJ1ZiwgIiVkIiwgT0xEX1BFUk1fRVZFUllCT0RZKTsKKwkJZWxzZQorCQkJc3ByaW50ZihidWYsICIwJW8iLCBzaGFyZWRfcmVwb3NpdG9yeSk7CisJCWdpdF9jb25maWdfc2V0KCJjb3JlLnNoYXJlZHJlcG9zaXRvcnkiLCBidWYpOworCQlnaXRfY29uZmlnX3NldCgicmVjZWl2ZS5kZW55Tm9uRmFzdGZvcndhcmRzIiwgInRydWUiKTsKKwl9CisKKwlpZiAoIShmbGFncyAmIElOSVRfREJfUVVJRVQpKQorCQlwcmludGYoIiVzJXMgR2l0IHJlcG9zaXRvcnkgaW4gJXMvXG4iLAorCQkgICAgICAgcmVpbml0ID8gIlJlaW5pdGlhbGl6ZWQgZXhpc3RpbmciIDogIkluaXRpYWxpemVkIGVtcHR5IiwKKwkJICAgICAgIHNoYXJlZF9yZXBvc2l0b3J5ID8gIiBzaGFyZWQiIDogIiIsCisJCSAgICAgICBnZXRfZ2l0X2RpcigpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGd1ZXNzX3JlcG9zaXRvcnlfdHlwZShjb25zdCBjaGFyICpnaXRfZGlyKQogewogCWNoYXIgY3dkW1BBVEhfTUFYXTsKIAljb25zdCBjaGFyICpzbGFzaDsKIAotCWlmICgwIDw9IGlzX2JhcmVfcmVwb3NpdG9yeV9jZmcpCi0JCXJldHVybjsKLQlpZiAoIWdpdF9kaXIpCi0JCXJldHVybjsKLQogCS8qCiAJICogIkdJVF9ESVI9LiBnaXQgaW5pdCIgaXMgYWx3YXlzIGJhcmUuCiAJICogIkdJVF9ESVI9YHB3ZGAgZ2l0IGluaXQiIHRvby4KIAkgKi8KIAlpZiAoIXN0cmNtcCgiLiIsIGdpdF9kaXIpKQotCQlnb3RvIGZvcmNlX2JhcmU7CisJCXJldHVybiAxOwogCWlmICghZ2V0Y3dkKGN3ZCwgc2l6ZW9mKGN3ZCkpKQogCQlkaWUoImNhbm5vdCB0ZWxsIGN3ZCIpOwogCWlmICghc3RyY21wKGdpdF9kaXIsIGN3ZCkpCi0JCWdvdG8gZm9yY2VfYmFyZTsKKwkJcmV0dXJuIDE7CiAJLyoKIAkgKiAiR0lUX0RJUj0uZ2l0IG9yIEdJVF9ESVI9c29tZXRoaW5nLy5naXQgaXMgdXN1YWxseSBub3QuCiAJICovCiAJaWYgKCFzdHJjbXAoZ2l0X2RpciwgIi5naXQiKSkKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAlzbGFzaCA9IHN0cnJjaHIoZ2l0X2RpciwgJy8nKTsKIAlpZiAoc2xhc2ggJiYgIXN0cmNtcChzbGFzaCwgIi8uZ2l0IikpCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAKIAkvKgogCSAqIE90aGVyd2lzZSBpdCBpcyBvZnRlbiBiYXJlLiAgQXQgdGhpcyBwb2ludAogCSAqIHdlIGFyZSBqdXN0IGd1ZXNzaW5nLgogCSAqLwotIGZvcmNlX2JhcmU6Ci0JaXNfYmFyZV9yZXBvc2l0b3J5X2NmZyA9IDE7Ci0JcmV0dXJuOworCXJldHVybiAxOwogfQogCiBzdGF0aWMgY29uc3QgY2hhciBpbml0X2RiX3VzYWdlW10gPQotImdpdC1pbml0IFstcSB8IC0tcXVpZXRdIFstLXRlbXBsYXRlPTx0ZW1wbGF0ZS1kaXJlY3Rvcnk+XSBbLS1zaGFyZWRdIjsKKyJnaXQtaW5pdCBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08dGVtcGxhdGUtZGlyZWN0b3J5Pl0gWy0tc2hhcmVkWz08cGVybWlzc2lvbnM+XV0iOwogCiAvKgogICogSWYgeW91IHdhbnQgdG8sIHlvdSBjYW4gc2hhcmUgdGhlIERCIGFyZWEgd2l0aCBhbnkgbnVtYmVyIG9mIGJyYW5jaGVzLgpAQCAtMzIyLDIyICszNzcsMjUgQEAKIGludCBjbWRfaW5pdF9kYihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKIAljb25zdCBjaGFyICpnaXRfZGlyOwotCWNvbnN0IGNoYXIgKnNoYTFfZGlyOwogCWNvbnN0IGNoYXIgKnRlbXBsYXRlX2RpciA9IE5VTEw7Ci0JY2hhciAqcGF0aDsKLQlpbnQgbGVuLCBpLCByZWluaXQ7Ci0JaW50IHF1aWV0ID0gMDsKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOworCWludCBpOwogCiAJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKywgYXJndisrKSB7CiAJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbMV07CiAJCWlmICghcHJlZml4Y21wKGFyZywgIi0tdGVtcGxhdGU9IikpCiAJCQl0ZW1wbGF0ZV9kaXIgPSBhcmcrMTE7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1zaGFyZWQiKSkKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWJhcmUiKSkgeworCQkJc3RhdGljIGNoYXIgZ2l0X2RpcltQQVRIX01BWCsxXTsKKwkJCWlzX2JhcmVfcmVwb3NpdG9yeV9jZmcgPSAxOworCQkJc2V0ZW52KEdJVF9ESVJfRU5WSVJPTk1FTlQsIGdldGN3ZChnaXRfZGlyLAorCQkJCQkJc2l6ZW9mKGdpdF9kaXIpKSwgMCk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXNoYXJlZCIpKQogCQkJc2hhcmVkX3JlcG9zaXRvcnkgPSBQRVJNX0dST1VQOwogCQllbHNlIGlmICghcHJlZml4Y21wKGFyZywgIi0tc2hhcmVkPSIpKQogCQkJc2hhcmVkX3JlcG9zaXRvcnkgPSBnaXRfY29uZmlnX3Blcm0oImFyZyIsIGFyZys5KTsKIAkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItcSIpIHx8ICFzdHJjbXAoYXJnLCAiLS1xdWlldCIpKQotCQkgICAgICAgIHF1aWV0ID0gMTsKKwkJCWZsYWdzIHw9IElOSVRfREJfUVVJRVQ7CiAJCWVsc2UKIAkJCXVzYWdlKGluaXRfZGJfdXNhZ2UpOwogCX0KQEAgLTM1NCw2NCArNDEyLDM1IEBACiAJCSAgICBHSVRfV09SS19UUkVFX0VOVklST05NRU5ULAogCQkgICAgR0lUX0RJUl9FTlZJUk9OTUVOVCk7CiAKLQlndWVzc19yZXBvc2l0b3J5X3R5cGUoZ2l0X2Rpcik7CisJLyoKKwkgKiBTZXQgdXAgdGhlIGRlZmF1bHQgLmdpdCBkaXJlY3RvcnkgY29udGVudHMKKwkgKi8KKwlpZiAoIWdpdF9kaXIpCisJCWdpdF9kaXIgPSBERUZBVUxUX0dJVF9ESVJfRU5WSVJPTk1FTlQ7CiAKLQlpZiAoaXNfYmFyZV9yZXBvc2l0b3J5X2NmZyA8PSAwKSB7Ci0JCWdpdF93b3JrX3RyZWVfY2ZnID0geGNhbGxvYyhQQVRIX01BWCwgMSk7Ci0JCWlmICghZ2V0Y3dkKGdpdF93b3JrX3RyZWVfY2ZnLCBQQVRIX01BWCkpCi0JCQlkaWUgKCJDYW5ub3QgYWNjZXNzIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIik7CisJaWYgKGlzX2JhcmVfcmVwb3NpdG9yeV9jZmcgPCAwKQorCQlpc19iYXJlX3JlcG9zaXRvcnlfY2ZnID0gZ3Vlc3NfcmVwb3NpdG9yeV90eXBlKGdpdF9kaXIpOworCisJaWYgKCFpc19iYXJlX3JlcG9zaXRvcnlfY2ZnKSB7CisJCWlmIChnaXRfZGlyKSB7CisJCQljb25zdCBjaGFyICpnaXRfZGlyX3BhcmVudCA9IHN0cnJjaHIoZ2l0X2RpciwgJy8nKTsKKwkJCWlmIChnaXRfZGlyX3BhcmVudCkgeworCQkJCWNoYXIgKnJlbCA9IHhzdHJuZHVwKGdpdF9kaXIsIGdpdF9kaXJfcGFyZW50IC0gZ2l0X2Rpcik7CisJCQkJZ2l0X3dvcmtfdHJlZV9jZmcgPSB4c3RyZHVwKG1ha2VfYWJzb2x1dGVfcGF0aChyZWwpKTsKKwkJCQlmcmVlKHJlbCk7CisJCQl9CisJCX0KKwkJaWYgKCFnaXRfd29ya190cmVlX2NmZykgeworCQkJZ2l0X3dvcmtfdHJlZV9jZmcgPSB4Y2FsbG9jKFBBVEhfTUFYLCAxKTsKKwkJCWlmICghZ2V0Y3dkKGdpdF93b3JrX3RyZWVfY2ZnLCBQQVRIX01BWCkpCisJCQkJZGllICgiQ2Fubm90IGFjY2VzcyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiIpOworCQl9CiAJCWlmIChhY2Nlc3MoZ2V0X2dpdF93b3JrX3RyZWUoKSwgWF9PSykpCiAJCQlkaWUgKCJDYW5ub3QgYWNjZXNzIHdvcmsgdHJlZSAnJXMnIiwKIAkJCSAgICAgZ2V0X2dpdF93b3JrX3RyZWUoKSk7CiAJfQogCi0JLyoKLQkgKiBTZXQgdXAgdGhlIGRlZmF1bHQgLmdpdCBkaXJlY3RvcnkgY29udGVudHMKLQkgKi8KLQlnaXRfZGlyID0gZ2V0ZW52KEdJVF9ESVJfRU5WSVJPTk1FTlQpOwotCWlmICghZ2l0X2RpcikKLQkJZ2l0X2RpciA9IERFRkFVTFRfR0lUX0RJUl9FTlZJUk9OTUVOVDsKLQlzYWZlX2NyZWF0ZV9kaXIoZ2l0X2RpciwgMCk7CisJc2V0X2dpdF9kaXIobWFrZV9hYnNvbHV0ZV9wYXRoKGdpdF9kaXIpKTsKIAotCS8qIENoZWNrIHRvIHNlZSBpZiB0aGUgcmVwb3NpdG9yeSB2ZXJzaW9uIGlzIHJpZ2h0LgotCSAqIE5vdGUgdGhhdCBhIG5ld2x5IGNyZWF0ZWQgcmVwb3NpdG9yeSBkb2VzIG5vdCBoYXZlCi0JICogY29uZmlnIGZpbGUsIHNvIHRoaXMgd2lsbCBub3QgZmFpbC4gIFdoYXQgd2UgYXJlIGNhdGNoaW5nCi0JICogaXMgYW4gYXR0ZW1wdCB0byByZWluaXRpYWxpemUgbmV3IHJlcG9zaXRvcnkgd2l0aCBhbiBvbGQgdG9vbC4KLQkgKi8KLQljaGVja19yZXBvc2l0b3J5X2Zvcm1hdCgpOwotCi0JcmVpbml0ID0gY3JlYXRlX2RlZmF1bHRfZmlsZXMoZ2l0X2RpciwgdGVtcGxhdGVfZGlyKTsKLQotCS8qCi0JICogQW5kIHNldCB1cCB0aGUgb2JqZWN0IHN0b3JlLgotCSAqLwotCXNoYTFfZGlyID0gZ2V0X29iamVjdF9kaXJlY3RvcnkoKTsKLQlsZW4gPSBzdHJsZW4oc2hhMV9kaXIpOwotCXBhdGggPSB4bWFsbG9jKGxlbiArIDQwKTsKLQltZW1jcHkocGF0aCwgc2hhMV9kaXIsIGxlbik7Ci0KLQlzYWZlX2NyZWF0ZV9kaXIoc2hhMV9kaXIsIDEpOwotCXN0cmNweShwYXRoK2xlbiwgIi9wYWNrIik7Ci0Jc2FmZV9jcmVhdGVfZGlyKHBhdGgsIDEpOwotCXN0cmNweShwYXRoK2xlbiwgIi9pbmZvIik7Ci0Jc2FmZV9jcmVhdGVfZGlyKHBhdGgsIDEpOwotCi0JaWYgKHNoYXJlZF9yZXBvc2l0b3J5KSB7Ci0JCWNoYXIgYnVmWzEwXTsKLQkJLyogV2UgZG8gbm90IHNwZWxsICJncm91cCIgYW5kIHN1Y2gsIHNvIHRoYXQKLQkJICogdGhlIGNvbmZpZ3VyYXRpb24gY2FuIGJlIHJlYWQgYnkgb2xkZXIgdmVyc2lvbgotCQkgKiBvZiBnaXQuCi0JCSAqLwotCQlzcHJpbnRmKGJ1ZiwgIiVkIiwgc2hhcmVkX3JlcG9zaXRvcnkpOwotCQlnaXRfY29uZmlnX3NldCgiY29yZS5zaGFyZWRyZXBvc2l0b3J5IiwgYnVmKTsKLQkJZ2l0X2NvbmZpZ19zZXQoInJlY2VpdmUuZGVueU5vbkZhc3Rmb3J3YXJkcyIsICJ0cnVlIik7Ci0JfQotCi0JaWYgKCFxdWlldCkKLQkJcHJpbnRmKCIlcyVzIEdpdCByZXBvc2l0b3J5IGluICVzL1xuIiwKLQkJICAgICAgIHJlaW5pdCA/ICJSZWluaXRpYWxpemVkIGV4aXN0aW5nIiA6ICJJbml0aWFsaXplZCBlbXB0eSIsCi0JCSAgICAgICBzaGFyZWRfcmVwb3NpdG9yeSA/ICIgc2hhcmVkIiA6ICIiLAotCQkgICAgICAgZ2l0X2Rpcik7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gaW5pdF9kYih0ZW1wbGF0ZV9kaXIsIGZsYWdzKTsKIH0KZGlmZiAtLWdpdCBhL2J1aWx0aW4tbG9nLmMgYi9idWlsdGluLWxvZy5jCmluZGV4IDVjMDA3MjUuLjQzMGQ4NzYgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tbG9nLmMKKysrIGIvYnVpbHRpbi1sb2cuYwpAQCAtMTgsNiArMTgsOSBAQAogI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCiAjaW5jbHVkZSAic2hvcnRsb2cuaCIKIAorLyogU2V0IGEgZGVmYXVsdCBkYXRlLXRpbWUgZm9ybWF0IGZvciBnaXQgbG9nICgibG9nLmRhdGUiIGNvbmZpZyB2YXJpYWJsZSkgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpkZWZhdWx0X2RhdGVfbW9kZSA9IE5VTEw7CisKIHN0YXRpYyBpbnQgZGVmYXVsdF9zaG93X3Jvb3QgPSAxOwogc3RhdGljIGNvbnN0IGNoYXIgKmZtdF9wYXRjaF9zdWJqZWN0X3ByZWZpeCA9ICJQQVRDSCI7CiBzdGF0aWMgY29uc3QgY2hhciAqZm10X3ByZXR0eTsKQEAgLTU2LDEyICs1OSwxNyBAQAogCXJldi0+YWJicmV2ID0gREVGQVVMVF9BQkJSRVY7CiAJcmV2LT5jb21taXRfZm9ybWF0ID0gQ01JVF9GTVRfREVGQVVMVDsKIAlpZiAoZm10X3ByZXR0eSkKLQkJcmV2LT5jb21taXRfZm9ybWF0ID0gZ2V0X2NvbW1pdF9mb3JtYXQoZm10X3ByZXR0eSk7CisJCWdldF9jb21taXRfZm9ybWF0KGZtdF9wcmV0dHksIHJldik7CiAJcmV2LT52ZXJib3NlX2hlYWRlciA9IDE7CiAJRElGRl9PUFRfU0VUKCZyZXYtPmRpZmZvcHQsIFJFQ1VSU0lWRSk7CiAJcmV2LT5zaG93X3Jvb3RfZGlmZiA9IGRlZmF1bHRfc2hvd19yb290OwogCXJldi0+c3ViamVjdF9wcmVmaXggPSBmbXRfcGF0Y2hfc3ViamVjdF9wcmVmaXg7CisKKwlpZiAoZGVmYXVsdF9kYXRlX21vZGUpCisJCXJldi0+ZGF0ZV9tb2RlID0gcGFyc2VfZGF0ZV9mb3JtYXQoZGVmYXVsdF9kYXRlX21vZGUpOworCiAJYXJnYyA9IHNldHVwX3JldmlzaW9ucyhhcmdjLCBhcmd2LCByZXYsICJIRUFEIik7CisKIAlpZiAocmV2LT5kaWZmb3B0LnBpY2theGUgfHwgcmV2LT5kaWZmb3B0LmZpbHRlcikKIAkJcmV2LT5hbHdheXNfc2hvd19oZWFkZXIgPSAwOwogCWlmIChESUZGX09QVF9UU1QoJnJldi0+ZGlmZm9wdCwgRk9MTE9XX1JFTkFNRVMpKSB7CkBAIC0yMjIsMjggKzIzMCwyNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGdpdF9sb2dfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCitzdGF0aWMgaW50IGdpdF9sb2dfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQogewogCWlmICghc3RyY21wKHZhciwgImZvcm1hdC5wcmV0dHkiKSkKIAkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZmbXRfcHJldHR5LCB2YXIsIHZhbHVlKTsKLQlpZiAoIXN0cmNtcCh2YXIsICJmb3JtYXQuc3ViamVjdHByZWZpeCIpKSB7Ci0JCWlmICghdmFsdWUpCi0JCQljb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOwotCQlmbXRfcGF0Y2hfc3ViamVjdF9wcmVmaXggPSB4c3RyZHVwKHZhbHVlKTsKLQkJcmV0dXJuIDA7Ci0JfQorCWlmICghc3RyY21wKHZhciwgImZvcm1hdC5zdWJqZWN0cHJlZml4IikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmZm10X3BhdGNoX3N1YmplY3RfcHJlZml4LCB2YXIsIHZhbHVlKTsKKwlpZiAoIXN0cmNtcCh2YXIsICJsb2cuZGF0ZSIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmRlZmF1bHRfZGF0ZV9tb2RlLCB2YXIsIHZhbHVlKTsKIAlpZiAoIXN0cmNtcCh2YXIsICJsb2cuc2hvd3Jvb3QiKSkgewogCQlkZWZhdWx0X3Nob3dfcm9vdCA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKIAkJcmV0dXJuIDA7CiAJfQotCXJldHVybiBnaXRfZGlmZl91aV9jb25maWcodmFyLCB2YWx1ZSk7CisJcmV0dXJuIGdpdF9kaWZmX3VpX2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CiB9CiAKIGludCBjbWRfd2hhdGNoYW5nZWQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCiB7CiAJc3RydWN0IHJldl9pbmZvIHJldjsKIAotCWdpdF9jb25maWcoZ2l0X2xvZ19jb25maWcpOworCWdpdF9jb25maWcoZ2l0X2xvZ19jb25maWcsIE5VTEwpOwogCiAJaWYgKGRpZmZfdXNlX2NvbG9yX2RlZmF1bHQgPT0gLTEpCiAJCWRpZmZfdXNlX2NvbG9yX2RlZmF1bHQgPSBnaXRfdXNlX2NvbG9yX2RlZmF1bHQ7CkBAIC0zMTksNyArMzI1LDcgQEAKIAlzdHJ1Y3Qgb2JqZWN0X2FycmF5X2VudHJ5ICpvYmplY3RzOwogCWludCBpLCBjb3VudCwgcmV0ID0gMDsKIAotCWdpdF9jb25maWcoZ2l0X2xvZ19jb25maWcpOworCWdpdF9jb25maWcoZ2l0X2xvZ19jb25maWcsIE5VTEwpOwogCiAJaWYgKGRpZmZfdXNlX2NvbG9yX2RlZmF1bHQgPT0gLTEpCiAJCWRpZmZfdXNlX2NvbG9yX2RlZmF1bHQgPSBnaXRfdXNlX2NvbG9yX2RlZmF1bHQ7CkBAIC0zNTAsNyArMzU2LDcgQEAKIAkJCQkJdC0+dGFnLAogCQkJCQlkaWZmX2dldF9jb2xvcl9vcHQoJnJldi5kaWZmb3B0LCBESUZGX1JFU0VUKSk7CiAJCQlyZXQgPSBzaG93X29iamVjdChvLT5zaGExLCAxLCAmcmV2KTsKLQkJCW9iamVjdHNbaV0uaXRlbSA9IChzdHJ1Y3Qgb2JqZWN0ICopdC0+dGFnZ2VkOworCQkJb2JqZWN0c1tpXS5pdGVtID0gcGFyc2Vfb2JqZWN0KHQtPnRhZ2dlZC0+c2hhMSk7CiAJCQlpLS07CiAJCQlicmVhazsKIAkJfQpAQCAtMzgzLDcgKzM4OSw3IEBACiB7CiAJc3RydWN0IHJldl9pbmZvIHJldjsKIAotCWdpdF9jb25maWcoZ2l0X2xvZ19jb25maWcpOworCWdpdF9jb25maWcoZ2l0X2xvZ19jb25maWcsIE5VTEwpOwogCiAJaWYgKGRpZmZfdXNlX2NvbG9yX2RlZmF1bHQgPT0gLTEpCiAJCWRpZmZfdXNlX2NvbG9yX2RlZmF1bHQgPSBnaXRfdXNlX2NvbG9yX2RlZmF1bHQ7CkBAIC00MDAsNiArNDA2LDcgQEAKIAkgKiBhbGxvdyB1cyB0byBzZXQgYSBkaWZmZXJlbnQgZGVmYXVsdC4KIAkgKi8KIAlyZXYuY29tbWl0X2Zvcm1hdCA9IENNSVRfRk1UX09ORUxJTkU7CisJcmV2LnVzZV90ZXJtaW5hdG9yID0gMTsKIAlyZXYuYWx3YXlzX3Nob3dfaGVhZGVyID0gMTsKIAogCS8qCkBAIC00MTUsNyArNDIyLDcgQEAKIHsKIAlzdHJ1Y3QgcmV2X2luZm8gcmV2OwogCi0JZ2l0X2NvbmZpZyhnaXRfbG9nX2NvbmZpZyk7CisJZ2l0X2NvbmZpZyhnaXRfbG9nX2NvbmZpZywgTlVMTCk7CiAKIAlpZiAoZGlmZl91c2VfY29sb3JfZGVmYXVsdCA9PSAtMSkKIAkJZGlmZl91c2VfY29sb3JfZGVmYXVsdCA9IGdpdF91c2VfY29sb3JfZGVmYXVsdDsKQEAgLTQ3MCw3ICs0NzcsNyBAQAogCWV4dHJhX2hkcltleHRyYV9oZHJfbnIrK10gPSB4c3RybmR1cCh2YWx1ZSwgbGVuKTsKIH0KIAotc3RhdGljIGludCBnaXRfZm9ybWF0X2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQorc3RhdGljIGludCBnaXRfZm9ybWF0X2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKIHsKIAlpZiAoIXN0cmNtcCh2YXIsICJmb3JtYXQuaGVhZGVycyIpKSB7CiAJCWlmICghdmFsdWUpCkBAIC00NzgsMTAgKzQ4NSwxMyBAQAogCQlhZGRfaGVhZGVyKHZhbHVlKTsKIAkJcmV0dXJuIDA7CiAJfQotCWlmICghc3RyY21wKHZhciwgImZvcm1hdC5zdWZmaXgiKSkgeworCWlmICghc3RyY21wKHZhciwgImZvcm1hdC5zdWZmaXgiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZmbXRfcGF0Y2hfc3VmZml4LCB2YXIsIHZhbHVlKTsKKwlpZiAoIXN0cmNtcCh2YXIsICJmb3JtYXQuY2MiKSkgewogCQlpZiAoIXZhbHVlKQogCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7Ci0JCWZtdF9wYXRjaF9zdWZmaXggPSB4c3RyZHVwKHZhbHVlKTsKKwkJQUxMT0NfR1JPVyhleHRyYV9jYywgZXh0cmFfY2NfbnIgKyAxLCBleHRyYV9jY19hbGxvYyk7CisJCWV4dHJhX2NjW2V4dHJhX2NjX25yKytdID0geHN0cmR1cCh2YWx1ZSk7CiAJCXJldHVybiAwOwogCX0KIAlpZiAoIXN0cmNtcCh2YXIsICJkaWZmLmNvbG9yIikgfHwgIXN0cmNtcCh2YXIsICJjb2xvci5kaWZmIikpIHsKQEAgLTQ5Niw3ICs1MDYsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlyZXR1cm4gZ2l0X2xvZ19jb25maWcodmFyLCB2YWx1ZSk7CisJcmV0dXJuIGdpdF9sb2dfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKIH0KIAogCkBAIC03NTYsMjAgKzc2NiwyMCBAQAogCWludCB0aHJlYWQgPSAwOwogCWludCBjb3Zlcl9sZXR0ZXIgPSAwOwogCWludCBib3VuZGFyeV9jb3VudCA9IDA7CisJaW50IG5vX2JpbmFyeV9kaWZmID0gMDsKIAlzdHJ1Y3QgY29tbWl0ICpvcmlnaW4gPSBOVUxMLCAqaGVhZCA9IE5VTEw7CiAJY29uc3QgY2hhciAqaW5fcmVwbHlfdG8gPSBOVUxMOwogCXN0cnVjdCBwYXRjaF9pZHMgaWRzOwogCWNoYXIgKmFkZF9zaWdub2ZmID0gTlVMTDsKIAlzdHJ1Y3Qgc3RyYnVmIGJ1ZjsKIAotCWdpdF9jb25maWcoZ2l0X2Zvcm1hdF9jb25maWcpOworCWdpdF9jb25maWcoZ2l0X2Zvcm1hdF9jb25maWcsIE5VTEwpOwogCWluaXRfcmV2aXNpb25zKCZyZXYsIHByZWZpeCk7CiAJcmV2LmNvbW1pdF9mb3JtYXQgPSBDTUlUX0ZNVF9FTUFJTDsKIAlyZXYudmVyYm9zZV9oZWFkZXIgPSAxOwogCXJldi5kaWZmID0gMTsKIAlyZXYuY29tYmluZV9tZXJnZXMgPSAwOwogCXJldi5pZ25vcmVfbWVyZ2VzID0gMTsKLQlyZXYuZGlmZm9wdC5tc2dfc2VwID0gIiI7CiAJRElGRl9PUFRfU0VUKCZyZXYuZGlmZm9wdCwgUkVDVVJTSVZFKTsKIAogCXJldi5zdWJqZWN0X3ByZWZpeCA9IGZtdF9wYXRjaF9zdWJqZWN0X3ByZWZpeDsKQEAgLTg2Miw2ICs4NzIsOCBAQAogCQkJZm10X3BhdGNoX3N1ZmZpeCA9IGFyZ3ZbaV0gKyA5OwogCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sICItLWNvdmVyLWxldHRlciIpKQogCQkJY292ZXJfbGV0dGVyID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS1uby1iaW5hcnkiKSkKKwkJCW5vX2JpbmFyeV9kaWZmID0gMTsKIAkJZWxzZQogCQkJYXJndltqKytdID0gYXJndltpXTsKIAl9CkBAIC05MTQsNyArOTI2LDcgQEAKIAlpZiAoIXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQpCiAJCXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9ESUZGU1RBVCB8IERJRkZfRk9STUFUX1NVTU1BUlkgfCBESUZGX0ZPUk1BVF9QQVRDSDsKIAotCWlmICghRElGRl9PUFRfVFNUKCZyZXYuZGlmZm9wdCwgVEVYVCkpCisJaWYgKCFESUZGX09QVF9UU1QoJnJldi5kaWZmb3B0LCBURVhUKSAmJiAhbm9fYmluYXJ5X2RpZmYpCiAJCURJRkZfT1BUX1NFVCgmcmV2LmRpZmZvcHQsIEJJTkFSWSk7CiAKIAlpZiAoIW91dHB1dF9kaXJlY3RvcnkgJiYgIXVzZV9zdGRvdXQpCmRpZmYgLS1naXQgYS9idWlsdGluLWxzLWZpbGVzLmMgYi9idWlsdGluLWxzLWZpbGVzLmMKaW5kZXggZGM3ZWFiOC4uNzViYTQyMiAxMDA2NDQKLS0tIGEvYnVpbHRpbi1scy1maWxlcy5jCisrKyBiL2J1aWx0aW4tbHMtZmlsZXMuYwpAQCAtNDM3LDcgKzQzNyw3IEBACiAJbWVtc2V0KCZkaXIsIDAsIHNpemVvZihkaXIpKTsKIAlpZiAocHJlZml4KQogCQlwcmVmaXhfb2Zmc2V0ID0gc3RybGVuKHByZWZpeCk7Ci0JZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcpOworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKIAogCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKIAkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tbHMtdHJlZS5jIGIvYnVpbHRpbi1scy10cmVlLmMKaW5kZXggN2FiZTMzMy4uZjRhNzVkZCAxMDA2NDQKLS0tIGEvYnVpbHRpbi1scy10cmVlLmMKKysrIGIvYnVpbHRpbi1scy10cmVlLmMKQEAgLTEyMiw3ICsxMjIsNyBAQAogCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CiAJc3RydWN0IHRyZWUgKnRyZWU7CiAKLQlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZyk7CisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOwogCWxzX3RyZWVfcHJlZml4ID0gcHJlZml4OwogCWlmIChwcmVmaXggJiYgKnByZWZpeCkKIAkJY2hvbXBfcHJlZml4ID0gc3RybGVuKHByZWZpeCk7CmRpZmYgLS1naXQgYS9idWlsdGluLW1haWxpbmZvLmMgYi9idWlsdGluLW1haWxpbmZvLmMKaW5kZXggMTFmMTU0Yi4uMTNmMDUwMiAxMDA2NDQKLS0tIGEvYnVpbHRpbi1tYWlsaW5mby5jCisrKyBiL2J1aWx0aW4tbWFpbGluZm8uYwpAQCAtMzM0LDcgKzMzNCw5IEBACiAJCXJldHVybiAxOwogCWlmICghbWVtY21wKCJbUEFUQ0hdIiwgbGluZSwgNykgJiYgaXNzcGFjZShsaW5lWzddKSkgewogCQlmb3IgKGkgPSAwOyBoZWFkZXJbaV07IGkrKykgewotCQkJaWYgKCFtZW1jbXAoIlN1YmplY3Q6ICIsIGhlYWRlcltpXSwgOSkpIHsKKwkJCWlmICghbWVtY21wKCJTdWJqZWN0IiwgaGVhZGVyW2ldLCA3KSkgeworCQkJCWlmICghaGRyX2RhdGFbaV0pCisJCQkJCWhkcl9kYXRhW2ldID0geG1hbGxvYyhsaW5lc2l6ZSArIDIwKTsKIAkJCQlpZiAoISBoYW5kbGVfaGVhZGVyKGxpbmUsIGhkcl9kYXRhW2ldLCAwKSkgewogCQkJCQlyZXR1cm4gMTsKIAkJCQl9CkBAIC00MzQsNiArNDM2LDcgQEAKIAogc3RhdGljIGludCBkZWNvZGVfcV9zZWdtZW50KGNoYXIgKmluLCBjaGFyICpvdCwgdW5zaWduZWQgb3RzaXplLCBjaGFyICplcCwgaW50IHJmYzIwNDcpCiB7CisJY2hhciAqb3RiZWdpbiA9IG90OwogCWNoYXIgKm90ZW5kID0gb3QgKyBvdHNpemU7CiAJaW50IGM7CiAJd2hpbGUgKChjID0gKmluKyspICE9IDAgJiYgKGluIDw9IGVwKSkgewpAQCAtNDUzLDEzICs0NTYsMTQgQEAKIAkJKm90KysgPSBjOwogCX0KIAkqb3QgPSAwOwotCXJldHVybiAwOworCXJldHVybiAob3QgLSBvdGJlZ2luKTsKIH0KIAogc3RhdGljIGludCBkZWNvZGVfYl9zZWdtZW50KGNoYXIgKmluLCBjaGFyICpvdCwgdW5zaWduZWQgb3RzaXplLCBjaGFyICplcCkKIHsKIAkvKiBEZWNvZGUgaW4uLmVwLCBwb3NzaWJseSBpbi1wbGFjZSB0byBvdCAqLwogCWludCBjLCBwb3MgPSAwLCBhY2MgPSAwOworCWNoYXIgKm90YmVnaW4gPSBvdDsKIAljaGFyICpvdGVuZCA9IG90ICsgb3RzaXplOwogCiAJd2hpbGUgKChjID0gKmluKyspICE9IDAgJiYgKGluIDw9IGVwKSkgewpAQCAtNTA1LDcgKzUwOSw3IEBACiAJCX0KIAl9CiAJKm90ID0gMDsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gKG90IC0gb3RiZWdpbik7CiB9CiAKIC8qCkBAIC02MjMsMjUgKzYyNywyNCBAQAogCQljb252ZXJ0X3RvX3V0ZjgoaXQsIGl0c2l6ZSwgIiIpOwogfQogCi1zdGF0aWMgdm9pZCBkZWNvZGVfdHJhbnNmZXJfZW5jb2RpbmcoY2hhciAqbGluZSwgdW5zaWduZWQgbGluZXNpemUpCitzdGF0aWMgaW50IGRlY29kZV90cmFuc2Zlcl9lbmNvZGluZyhjaGFyICpsaW5lLCB1bnNpZ25lZCBsaW5lc2l6ZSwgaW50IGlucHV0bGVuKQogewogCWNoYXIgKmVwOwogCiAJc3dpdGNoICh0cmFuc2Zlcl9lbmNvZGluZykgewogCWNhc2UgVEVfUVA6Ci0JCWVwID0gbGluZSArIHN0cmxlbihsaW5lKTsKLQkJZGVjb2RlX3Ffc2VnbWVudChsaW5lLCBsaW5lLCBsaW5lc2l6ZSwgZXAsIDApOwotCQlicmVhazsKKwkJZXAgPSBsaW5lICsgaW5wdXRsZW47CisJCXJldHVybiBkZWNvZGVfcV9zZWdtZW50KGxpbmUsIGxpbmUsIGxpbmVzaXplLCBlcCwgMCk7CiAJY2FzZSBURV9CQVNFNjQ6Ci0JCWVwID0gbGluZSArIHN0cmxlbihsaW5lKTsKLQkJZGVjb2RlX2Jfc2VnbWVudChsaW5lLCBsaW5lLCBsaW5lc2l6ZSwgZXApOwotCQlicmVhazsKKwkJZXAgPSBsaW5lICsgaW5wdXRsZW47CisJCXJldHVybiBkZWNvZGVfYl9zZWdtZW50KGxpbmUsIGxpbmUsIGxpbmVzaXplLCBlcCk7CiAJY2FzZSBURV9ET05UQ0FSRToKLQkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGlucHV0bGVuOwogCX0KIH0KIAotc3RhdGljIGludCBoYW5kbGVfZmlsdGVyKGNoYXIgKmxpbmUsIHVuc2lnbmVkIGxpbmVzaXplKTsKK3N0YXRpYyBpbnQgaGFuZGxlX2ZpbHRlcihjaGFyICpsaW5lLCB1bnNpZ25lZCBsaW5lc2l6ZSwgaW50IGxpbmVsZW4pOwogCiBzdGF0aWMgaW50IGZpbmRfYm91bmRhcnkodm9pZCkKIHsKQEAgLTY2OSw3ICs2NzIsNyBAQAogCQkJCQkiY2FuJ3QgcmVjb3ZlclxuIik7CiAJCQlleGl0KDEpOwogCQl9Ci0JCWhhbmRsZV9maWx0ZXIobmV3bGluZSwgc2l6ZW9mKG5ld2xpbmUpKTsKKwkJaGFuZGxlX2ZpbHRlcihuZXdsaW5lLCBzaXplb2YobmV3bGluZSksIHN0cmxlbihuZXdsaW5lKSk7CiAKIAkJLyogc2tpcCB0byB0aGUgbmV4dCBib3VuZGFyeSAqLwogCQlpZiAoIWZpbmRfYm91bmRhcnkoKSkKQEAgLTc1OSwxNCArNzYyLDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaGFuZGxlX3BhdGNoKGNoYXIgKmxpbmUpCitzdGF0aWMgaW50IGhhbmRsZV9wYXRjaChjaGFyICpsaW5lLCBpbnQgbGVuKQogewotCWZwdXRzKGxpbmUsIHBhdGNoZmlsZSk7CisJZndyaXRlKGxpbmUsIDEsIGxlbiwgcGF0Y2hmaWxlKTsKIAlwYXRjaF9saW5lcysrOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGhhbmRsZV9maWx0ZXIoY2hhciAqbGluZSwgdW5zaWduZWQgbGluZXNpemUpCitzdGF0aWMgaW50IGhhbmRsZV9maWx0ZXIoY2hhciAqbGluZSwgdW5zaWduZWQgbGluZXNpemUsIGludCBsaW5lbGVuKQogewogCXN0YXRpYyBpbnQgZmlsdGVyID0gMDsKIApAQCAtNzc5LDcgKzc4Miw3IEBACiAJCQlicmVhazsKIAkJZmlsdGVyKys7CiAJY2FzZSAxOgotCQlpZiAoIWhhbmRsZV9wYXRjaChsaW5lKSkKKwkJaWYgKCFoYW5kbGVfcGF0Y2gobGluZSwgbGluZWxlbikpCiAJCQlicmVhazsKIAkJZmlsdGVyKys7CiAJZGVmYXVsdDoKQEAgLTc5NCw2ICs3OTcsNyBAQAogCWludCByYyA9IDA7CiAJc3RhdGljIGNoYXIgbmV3bGluZVsyMDAwXTsKIAlzdGF0aWMgY2hhciAqbnAgPSBuZXdsaW5lOworCWludCBsZW4gPSBzdHJsZW4obGluZSk7CiAKIAkvKiBTa2lwIHVwIHRvIHRoZSBmaXJzdCBib3VuZGFyeSAqLwogCWlmIChjb250ZW50X3RvcC0+Ym91bmRhcnkpIHsKQEAgLTgwNSwxNiArODA5LDIwIEBACiAJCS8qIHByb2Nlc3MgYW55IGJvdW5kYXJ5IGxpbmVzICovCiAJCWlmIChjb250ZW50X3RvcC0+Ym91bmRhcnkgJiYgaXNfbXVsdGlwYXJ0X2JvdW5kYXJ5KGxpbmUpKSB7CiAJCQkvKiBmbHVzaCBhbnkgbGVmdG92ZXIgKi8KLQkJCWlmICgodHJhbnNmZXJfZW5jb2RpbmcgPT0gVEVfQkFTRTY0KSAgJiYKLQkJCSAgICAobnAgIT0gbmV3bGluZSkpIHsKLQkJCQloYW5kbGVfZmlsdGVyKG5ld2xpbmUsIHNpemVvZihuZXdsaW5lKSk7Ci0JCQl9CisJCQlpZiAobnAgIT0gbmV3bGluZSkKKwkJCQloYW5kbGVfZmlsdGVyKG5ld2xpbmUsIHNpemVvZihuZXdsaW5lKSwKKwkJCQkJICAgICAgbnAgLSBuZXdsaW5lKTsKIAkJCWlmICghaGFuZGxlX2JvdW5kYXJ5KCkpCiAJCQkJcmV0dXJuOworCQkJbGVuID0gc3RybGVuKGxpbmUpOwogCQl9CiAKIAkJLyogVW53cmFwIHRyYW5zZmVyIGVuY29kaW5nICovCi0JCWRlY29kZV90cmFuc2Zlcl9lbmNvZGluZyhsaW5lLCBzaXplb2YobGluZSkpOworCQlsZW4gPSBkZWNvZGVfdHJhbnNmZXJfZW5jb2RpbmcobGluZSwgc2l6ZW9mKGxpbmUpLCBsZW4pOworCQlpZiAobGVuIDwgMCkgeworCQkJZXJyb3IoIk1hbGZvcm1lZCBpbnB1dCBsaW5lIik7CisJCQlyZXR1cm47CisJCX0KIAogCQlzd2l0Y2ggKHRyYW5zZmVyX2VuY29kaW5nKSB7CiAJCWNhc2UgVEVfQkFTRTY0OgpAQCAtODI0LDM5ICs4MzIsNDAgQEAKIAogCQkJLyogYmluYXJ5IGRhdGEgbW9zdCBsaWtlbHkgZG9lc24ndCBoYXZlIG5ld2xpbmVzICovCiAJCQlpZiAobWVzc2FnZV90eXBlICE9IFRZUEVfVEVYVCkgewotCQkJCXJjID0gaGFuZGxlX2ZpbHRlcihsaW5lLCBzaXplb2YobmV3bGluZSkpOworCQkJCXJjID0gaGFuZGxlX2ZpbHRlcihsaW5lLCBzaXplb2YobGluZSksIGxlbik7CiAJCQkJYnJlYWs7CiAJCQl9CiAKLQkJCS8qIHRoaXMgaXMgYSBkZWNvZGVkIGxpbmUgdGhhdCBtYXkgY29udGFpbgorCQkJLyoKKwkJCSAqIFRoaXMgaXMgYSBkZWNvZGVkIGxpbmUgdGhhdCBtYXkgY29udGFpbgogCQkJICogbXVsdGlwbGUgbmV3IGxpbmVzLiAgUGFzcyBvbmx5IG9uZSBjaHVuawogCQkJICogYXQgYSB0aW1lIHRvIGhhbmRsZV9maWx0ZXIoKQogCQkJICovCi0KIAkJCWRvIHsKLQkJCQl3aGlsZSAoKm9wICE9ICdcbicgJiYgKm9wICE9IDApCisJCQkJd2hpbGUgKG9wIDwgbGluZSArIGxlbiAmJiAqb3AgIT0gJ1xuJykKIAkJCQkJKm5wKysgPSAqb3ArKzsKIAkJCQkqbnAgPSAqb3A7CiAJCQkJaWYgKCpucCAhPSAwKSB7CiAJCQkJCS8qIHNob3VsZCBiZSBzaXR0aW5nIG9uIGEgbmV3IGxpbmUgKi8KIAkJCQkJKigrK25wKSA9IDA7CiAJCQkJCW9wKys7Ci0JCQkJCXJjID0gaGFuZGxlX2ZpbHRlcihuZXdsaW5lLCBzaXplb2YobmV3bGluZSkpOworCQkJCQlyYyA9IGhhbmRsZV9maWx0ZXIobmV3bGluZSwgc2l6ZW9mKG5ld2xpbmUpLCBucCAtIG5ld2xpbmUpOwogCQkJCQlucCA9IG5ld2xpbmU7CiAJCQkJfQotCQkJfSB3aGlsZSAoKm9wICE9IDApOwotCQkJLyogdGhlIHBhcnRpYWwgY2h1bmsgaXMgc2F2ZWQgaW4gbmV3bGluZSBhbmQKLQkJCSAqIHdpbGwgYmUgYXBwZW5kZWQgYnkgdGhlIG5leHQgaXRlcmF0aW9uIG9mIGZnZXRzCisJCQl9IHdoaWxlIChvcCA8IGxpbmUgKyBsZW4pOworCQkJLyoKKwkJCSAqIFRoZSBwYXJ0aWFsIGNodW5rIGlzIHNhdmVkIGluIG5ld2xpbmUgYW5kIHdpbGwgYmUKKwkJCSAqIGFwcGVuZGVkIGJ5IHRoZSBuZXh0IGl0ZXJhdGlvbiBvZiByZWFkX2xpbmVfd2l0aF9udWwoKS4KIAkJCSAqLwogCQkJYnJlYWs7CiAJCX0KIAkJZGVmYXVsdDoKLQkJCXJjID0gaGFuZGxlX2ZpbHRlcihsaW5lLCBzaXplb2YobmV3bGluZSkpOworCQkJcmMgPSBoYW5kbGVfZmlsdGVyKGxpbmUsIHNpemVvZihsaW5lKSwgbGVuKTsKIAkJfQogCQlpZiAocmMpCiAJCQkvKiBub3RoaW5nIGxlZnQgdG8gZmlsdGVyICovCiAJCQlicmVhazsKLQl9IHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGZpbikpOworCX0gd2hpbGUgKChsZW4gPSByZWFkX2xpbmVfd2l0aF9udWwobGluZSwgc2l6ZW9mKGxpbmUpLCBmaW4pKSk7CiAKIAlyZXR1cm47CiB9CkBAIC05NTMsNyArOTYyLDcgQEAKIH0KIAogc3RhdGljIGNvbnN0IGNoYXIgbWFpbGluZm9fdXNhZ2VbXSA9Ci0JImdpdC1tYWlsaW5mbyBbLWtdIFstdSB8IC0tZW5jb2Rpbmc9PGVuY29kaW5nPl0gbXNnIHBhdGNoIDxtYWlsID5pbmZvIjsKKwkiZ2l0LW1haWxpbmZvIFsta10gWy11IHwgLS1lbmNvZGluZz08ZW5jb2Rpbmc+IHwgLW5dIG1zZyBwYXRjaCA8bWFpbCA+aW5mbyI7CiAKIGludCBjbWRfbWFpbGluZm8oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCiB7CkBAIC05NjIsNyArOTcxLDcgQEAKIAkvKiBORUVEU1dPUks6IG1pZ2h0IHdhbnQgdG8gZG8gdGhlIG9wdGlvbmFsIC5naXQvIGRpcmVjdG9yeQogCSAqIGRpc2NvdmVyeQogCSAqLwotCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnKTsKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CiAKIAlkZWZfY2hhcnNldCA9IChnaXRfY29tbWl0X2VuY29kaW5nID8gZ2l0X2NvbW1pdF9lbmNvZGluZyA6ICJ1dGYtOCIpOwogCW1ldGFpbmZvX2NoYXJzZXQgPSBkZWZfY2hhcnNldDsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tbWFpbHNwbGl0LmMgYi9idWlsdGluLW1haWxzcGxpdC5jCmluZGV4IDQ2YjI3Y2QuLmFlMmI0Y2IgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tbWFpbHNwbGl0LmMKKysrIGIvYnVpbHRpbi1tYWlsc3BsaXQuYwpAQCAtNDUsNiArNDUsMjQgQEAKIC8qIENvdWxkIGJlIGFzIHNtYWxsIGFzIDY0LCBlbm91Z2ggdG8gaG9sZCBhIFVuaXggIkZyb20gIiBsaW5lLiAqLwogc3RhdGljIGNoYXIgYnVmWzQwOTZdOwogCisvKiBXZSBjYW5ub3QgdXNlIGZnZXRzKCkgYmVjYXVzZSBvdXIgbGluZXMgY2FuIGNvbnRhaW4gTlVMcyAqLworaW50IHJlYWRfbGluZV93aXRoX251bChjaGFyICpidWYsIGludCBzaXplLCBGSUxFICppbikKK3sKKwlpbnQgbGVuID0gMCwgYzsKKworCWZvciAoOzspIHsKKwkJYyA9IGdldGMoaW4pOworCQlpZiAoYyA9PSBFT0YpCisJCQlicmVhazsKKwkJYnVmW2xlbisrXSA9IGM7CisJCWlmIChjID09ICdcbicgfHwgbGVuICsgMSA+PSBzaXplKQorCQkJYnJlYWs7CisJfQorCWJ1ZltsZW5dID0gJ1wwJzsKKworCXJldHVybiBsZW47Cit9CisKIC8qIENhbGxlZCB3aXRoIHRoZSBmaXJzdCBsaW5lIChwb3RlbnRpYWxseSBwYXJ0aWFsKQogICogYWxyZWFkeSBpbiBidWZbXSAtLSBub3JtYWxseSB0aGF0IHNob3VsZCBiZWdpbiB3aXRoCiAgKiB0aGUgVW5peCAiRnJvbSAiIGxpbmUuICBXcml0ZSBpdCBpbnRvIHRoZSBzcGVjaWZpZWQKQEAgLTcwLDE5ICs4OCwxOSBAQAogCSAqICJGcm9tICIgYW5kIGhhdmluZyBzb21ldGhpbmcgdGhhdCBsb29rcyBsaWtlIGEgZGF0ZSBmb3JtYXQuCiAJICovCiAJZm9yICg7OykgewotCQlpbnQgaXNfcGFydGlhbCA9IChidWZbbGVuLTFdICE9ICdcbicpOworCQlpbnQgaXNfcGFydGlhbCA9IGxlbiAmJiBidWZbbGVuLTFdICE9ICdcbic7CiAKLQkJaWYgKGZwdXRzKGJ1Ziwgb3V0cHV0KSA9PSBFT0YpCisJCWlmIChmd3JpdGUoYnVmLCAxLCBsZW4sIG91dHB1dCkgIT0gbGVuKQogCQkJZGllKCJjYW5ub3Qgd3JpdGUgb3V0cHV0Iik7CiAKLQkJaWYgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIG1ib3gpID09IE5VTEwpIHsKKwkJbGVuID0gcmVhZF9saW5lX3dpdGhfbnVsKGJ1Ziwgc2l6ZW9mKGJ1ZiksIG1ib3gpOworCQlpZiAobGVuID09IDApIHsKIAkJCWlmIChmZW9mKG1ib3gpKSB7CiAJCQkJc3RhdHVzID0gMTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWRpZSgiY2Fubm90IHJlYWQgbWJveCIpOwogCQl9Ci0JCWxlbiA9IHN0cmxlbihidWYpOwogCQlpZiAoIWlzX3BhcnRpYWwgJiYgIWlzX2JhcmUgJiYgaXNfZnJvbV9saW5lKGJ1ZiwgbGVuKSkKIAkJCWJyZWFrOyAvKiBkb25lIHdpdGggb25lIG1lc3NhZ2UgKi8KIAl9CmRpZmYgLS1naXQgYS9idWlsdGluLW1lcmdlLWJhc2UuYyBiL2J1aWx0aW4tbWVyZ2UtYmFzZS5jCmluZGV4IDAxMDhlMjIuLmJjZjkzOTUgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tbWVyZ2UtYmFzZS5jCisrKyBiL2J1aWx0aW4tbWVyZ2UtYmFzZS5jCkBAIC0yOCw3ICsyOCw3IEBACiAJdW5zaWduZWQgY2hhciByZXYxa2V5WzIwXSwgcmV2MmtleVsyMF07CiAJaW50IHNob3dfYWxsID0gMDsKIAotCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnKTsKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CiAKIAl3aGlsZSAoMSA8IGFyZ2MgJiYgYXJndlsxXVswXSA9PSAnLScpIHsKIAkJY29uc3QgY2hhciAqYXJnID0gYXJndlsxXTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tbWVyZ2UtcmVjdXJzaXZlLmMgYi9idWlsdGluLW1lcmdlLXJlY3Vyc2l2ZS5jCmluZGV4IDkxMGMwZDIuLjQzYmY2YWEgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tbWVyZ2UtcmVjdXJzaXZlLmMKKysrIGIvYnVpbHRpbi1tZXJnZS1yZWN1cnNpdmUuYwpAQCAtOTIsNyArOTIsOCBAQAogCiBzdGF0aWMgaW50IGNhbGxfZGVwdGggPSAwOwogc3RhdGljIGludCB2ZXJib3NpdHkgPSAyOwotc3RhdGljIGludCByZW5hbWVfbGltaXQgPSAtMTsKK3N0YXRpYyBpbnQgZGlmZl9yZW5hbWVfbGltaXQgPSAtMTsKK3N0YXRpYyBpbnQgbWVyZ2VfcmVuYW1lX2xpbWl0ID0gLTE7CiBzdGF0aWMgaW50IGJ1ZmZlcl9vdXRwdXQgPSAxOwogc3RhdGljIHN0cnVjdCBzdHJidWYgb2J1ZiA9IFNUUkJVRl9JTklUOwogCkBAIC0zNjEsNyArMzYyLDEwIEBACiAJZGlmZl9zZXR1cCgmb3B0cyk7CiAJRElGRl9PUFRfU0VUKCZvcHRzLCBSRUNVUlNJVkUpOwogCW9wdHMuZGV0ZWN0X3JlbmFtZSA9IERJRkZfREVURUNUX1JFTkFNRTsKLQlvcHRzLnJlbmFtZV9saW1pdCA9IHJlbmFtZV9saW1pdDsKKwlvcHRzLnJlbmFtZV9saW1pdCA9IG1lcmdlX3JlbmFtZV9saW1pdCA+PSAwID8gbWVyZ2VfcmVuYW1lX2xpbWl0IDoKKwkJCSAgICBkaWZmX3JlbmFtZV9saW1pdCA+PSAwID8gZGlmZl9yZW5hbWVfbGltaXQgOgorCQkJICAgIDUwMDsKKwlvcHRzLndhcm5fb25fdG9vX2xhcmdlX3JlbmFtZSA9IDE7CiAJb3B0cy5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfTk9fT1VUUFVUOwogCWlmIChkaWZmX3NldHVwX2RvbmUoJm9wdHMpIDwgMCkKIAkJZGllKCJkaWZmIHNldHVwIGZhaWxlZCIpOwpAQCAtNDc3LDE1ICs0ODEsNiBAQAogCXJldHVybiBuZXdwYXRoOwogfQogCi1zdGF0aWMgaW50IG1rZGlyX3AoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyBtb2RlKQotewotCS8qIHBhdGggcG9pbnRzIHRvIGNhY2hlIGVudHJpZXMsIHNvIHhzdHJkdXAgYmVmb3JlIG1lc3Npbmcgd2l0aCBpdCAqLwotCWNoYXIgKmJ1ZiA9IHhzdHJkdXAocGF0aCk7Ci0JaW50IHJlc3VsdCA9IHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXMoYnVmKTsKLQlmcmVlKGJ1Zik7Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLQogc3RhdGljIHZvaWQgZmx1c2hfYnVmZmVyKGludCBmZCwgY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJd2hpbGUgKHNpemUgPiAwKSB7CkBAIC01MDgsNyArNTAzLDcgQEAKIAlpbnQgc3RhdHVzOwogCWNvbnN0IGNoYXIgKm1zZyA9ICJmYWlsZWQgdG8gY3JlYXRlIHBhdGggJyVzJyVzIjsKIAotCXN0YXR1cyA9IG1rZGlyX3AocGF0aCwgMDc3Nyk7CisJc3RhdHVzID0gc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChwYXRoKTsKIAlpZiAoc3RhdHVzKSB7CiAJCWlmIChzdGF0dXMgPT0gLTMpIHsKIAkJCS8qIHNvbWV0aGluZyBlbHNlIGV4aXN0cyAqLwpAQCAtNTUxLDkgKzU0NiwxOSBAQAogCQkJZGllKCJjYW5ub3QgcmVhZCBvYmplY3QgJXMgJyVzJyIsIHNoYTFfdG9faGV4KHNoYSksIHBhdGgpOwogCQlpZiAodHlwZSAhPSBPQkpfQkxPQikKIAkJCWRpZSgiYmxvYiBleHBlY3RlZCBmb3IgJXMgJyVzJyIsIHNoYTFfdG9faGV4KHNoYSksIHBhdGgpOworCQlpZiAoU19JU1JFRyhtb2RlKSkgeworCQkJc3RydWN0IHN0cmJ1ZiBzdHJidWY7CisJCQlzdHJidWZfaW5pdCgmc3RyYnVmLCAwKTsKKwkJCWlmIChjb252ZXJ0X3RvX3dvcmtpbmdfdHJlZShwYXRoLCBidWYsIHNpemUsICZzdHJidWYpKSB7CisJCQkJZnJlZShidWYpOworCQkJCXNpemUgPSBzdHJidWYubGVuOworCQkJCWJ1ZiA9IHN0cmJ1Zl9kZXRhY2goJnN0cmJ1ZiwgTlVMTCk7CisJCQl9CisJCX0KIAogCQlpZiAobWFrZV9yb29tX2Zvcl9wYXRoKHBhdGgpIDwgMCkgewogCQkJdXBkYXRlX3dkID0gMDsKKwkJCWZyZWUoYnVmKTsKIAkJCWdvdG8gdXBkYXRlX2luZGV4OwogCQl9CiAJCWlmIChTX0lTUkVHKG1vZGUpIHx8ICghaGFzX3N5bWxpbmtzICYmIFNfSVNMTksobW9kZSkpKSB7CkBAIC01NjksMTMgKzU3NCwxNCBAQAogCQkJY2xvc2UoZmQpOwogCQl9IGVsc2UgaWYgKFNfSVNMTksobW9kZSkpIHsKIAkJCWNoYXIgKmxuayA9IHhtZW1kdXB6KGJ1Ziwgc2l6ZSk7Ci0JCQlta2Rpcl9wKHBhdGgsIDA3NzcpOworCQkJc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChwYXRoKTsKIAkJCXVubGluayhwYXRoKTsKIAkJCXN5bWxpbmsobG5rLCBwYXRoKTsKIAkJCWZyZWUobG5rKTsKIAkJfSBlbHNlCiAJCQlkaWUoImRvIG5vdCBrbm93IHdoYXQgdG8gZG8gd2l0aCAlMDZvICVzICclcyciLAogCQkJICAgIG1vZGUsIHNoYTFfdG9faGV4KHNoYSksIHBhdGgpOworCQlmcmVlKGJ1Zik7CiAJfQogIHVwZGF0ZV9pbmRleDoKIAlpZiAodXBkYXRlX2NhY2hlKQpAQCAtMTMzNiwxNyArMTM0MiwyMSBAQAogCXJldHVybiAoc3RydWN0IGNvbW1pdCAqKW9iamVjdDsKIH0KIAotc3RhdGljIGludCBtZXJnZV9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3N0YXRpYyBpbnQgbWVyZ2VfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQogewogCWlmICghc3RyY2FzZWNtcCh2YXIsICJtZXJnZS52ZXJib3NpdHkiKSkgewogCQl2ZXJib3NpdHkgPSBnaXRfY29uZmlnX2ludCh2YXIsIHZhbHVlKTsKIAkJcmV0dXJuIDA7CiAJfQogCWlmICghc3RyY2FzZWNtcCh2YXIsICJkaWZmLnJlbmFtZWxpbWl0IikpIHsKLQkJcmVuYW1lX2xpbWl0ID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJCWRpZmZfcmVuYW1lX2xpbWl0ID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CiAJCXJldHVybiAwOwogCX0KLQlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUpOworCWlmICghc3RyY2FzZWNtcCh2YXIsICJtZXJnZS5yZW5hbWVsaW1pdCIpKSB7CisJCW1lcmdlX3JlbmFtZV9saW1pdCA9IGdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CiB9CiAKIGludCBjbWRfbWVyZ2VfcmVjdXJzaXZlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQpAQCAtMTM2Nyw3ICsxMzc3LDcgQEAKIAkJCXN1YnRyZWVfbWVyZ2UgPSAxOwogCX0KIAotCWdpdF9jb25maWcobWVyZ2VfY29uZmlnKTsKKwlnaXRfY29uZmlnKG1lcmdlX2NvbmZpZywgTlVMTCk7CiAJaWYgKGdldGVudigiR0lUX01FUkdFX1ZFUkJPU0lUWSIpKQogCQl2ZXJib3NpdHkgPSBzdHJ0b2woZ2V0ZW52KCJHSVRfTUVSR0VfVkVSQk9TSVRZIiksIE5VTEwsIDEwKTsKIApkaWZmIC0tZ2l0IGEvYnVpbHRpbi1tdi5jIGIvYnVpbHRpbi1tdi5jCmluZGV4IDk0ZjZkZDIuLjU1MzBlMTEgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tbXYuYworKysgYi9idWlsdGluLW12LmMKQEAgLTgxLDcgKzgxLDcgQEAKIAlzdHJ1Y3QgcGF0aF9saXN0IGRlbGV0ZWQgPSB7TlVMTCwgMCwgMCwgMH07CiAJc3RydWN0IHBhdGhfbGlzdCBjaGFuZ2VkID0ge05VTEwsIDAsIDAsIDB9OwogCi0JZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcpOworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKIAogCW5ld2ZkID0gaG9sZF9sb2NrZWRfaW5kZXgoJmxvY2tfZmlsZSwgMSk7CiAJaWYgKHJlYWRfY2FjaGUoKSA8IDApCkBAIC0yNTYsNyArMjU2LDggQEAKIAogCQlmb3IgKGkgPSAwOyBpIDwgYWRkZWQubnI7IGkrKykgewogCQkJY29uc3QgY2hhciAqcGF0aCA9IGFkZGVkLml0ZW1zW2ldLnBhdGg7Ci0JCQlhZGRfZmlsZV90b19jYWNoZShwYXRoLCB2ZXJib3NlKTsKKwkJCWlmIChhZGRfZmlsZV90b19jYWNoZShwYXRoLCB2ZXJib3NlID8gQUREX0NBQ0hFX1ZFUkJPU0UgOiAwKSkKKwkJCQlkaWUoInVwZGF0aW5nIGluZGV4IGVudHJpZXMgZmFpbGVkIik7CiAJCX0KIAogCQlmb3IgKGkgPSAwOyBpIDwgZGVsZXRlZC5ucjsgaSsrKQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1uYW1lLXJldi5jIGIvYnVpbHRpbi1uYW1lLXJldi5jCmluZGV4IDUyMWYwNjEuLjUzNTJiYzggMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tbmFtZS1yZXYuYworKysgYi9idWlsdGluLW5hbWUtcmV2LmMKQEAgLTE3Niw2ICsxNzYsNDggQEAKIAlOVUxMCiB9OwogCitzdGF0aWMgdm9pZCBuYW1lX3Jldl9saW5lKGNoYXIgKnAsIHN0cnVjdCBuYW1lX3JlZl9kYXRhICpkYXRhKQoreworCWludCBmb3J0eSA9IDA7CisJY2hhciAqcF9zdGFydDsKKwlmb3IgKHBfc3RhcnQgPSBwOyAqcDsgcCsrKSB7CisjZGVmaW5lIGlzaGV4KHgpIChpc2RpZ2l0KCh4KSkgfHwgKCh4KSA+PSAnYScgJiYgKHgpIDw9ICdmJykpCisJCWlmICghaXNoZXgoKnApKQorCQkJZm9ydHkgPSAwOworCQllbHNlIGlmICgrK2ZvcnR5ID09IDQwICYmCisJCQkgIWlzaGV4KCoocCsxKSkpIHsKKwkJCXVuc2lnbmVkIGNoYXIgc2hhMVs0MF07CisJCQljb25zdCBjaGFyICpuYW1lID0gTlVMTDsKKwkJCWNoYXIgYyA9ICoocCsxKTsKKwkJCWludCBwX2xlbiA9IHAgLSBwX3N0YXJ0ICsgMTsKKworCQkJZm9ydHkgPSAwOworCisJCQkqKHArMSkgPSAwOworCQkJaWYgKCFnZXRfc2hhMShwIC0gMzksIHNoYTEpKSB7CisJCQkJc3RydWN0IG9iamVjdCAqbyA9CisJCQkJCWxvb2t1cF9vYmplY3Qoc2hhMSk7CisJCQkJaWYgKG8pCisJCQkJCW5hbWUgPSBnZXRfcmV2X25hbWUobyk7CisJCQl9CisJCQkqKHArMSkgPSBjOworCisJCQlpZiAoIW5hbWUpCisJCQkJY29udGludWU7CisKKwkJCWlmIChkYXRhLT5uYW1lX29ubHkpCisJCQkJcHJpbnRmKCIlLipzJXMiLCBwX2xlbiAtIDQwLCBwX3N0YXJ0LCBuYW1lKTsKKwkJCWVsc2UKKwkJCQlwcmludGYoIiUuKnMgKCVzKSIsIHBfbGVuLCBwX3N0YXJ0LCBuYW1lKTsKKwkJCXBfc3RhcnQgPSBwICsgMTsKKwkJfQorCX0KKworCS8qIGZsdXNoICovCisJaWYgKHBfc3RhcnQgIT0gcCkKKwkJZndyaXRlKHBfc3RhcnQsIHAgLSBwX3N0YXJ0LCAxLCBzdGRvdXQpOworfQorCiBpbnQgY21kX25hbWVfcmV2KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQogewogCXN0cnVjdCBvYmplY3RfYXJyYXkgcmV2cyA9IHsgMCwgMCwgTlVMTCB9OwpAQCAtMTk1LDcgKzIzNyw3IEBACiAJCU9QVF9FTkQoKSwKIAl9OwogCi0JZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcpOworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKIAlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRzLCBuYW1lX3Jldl91c2FnZSwgMCk7CiAJaWYgKCEhYWxsICsgISF0cmFuc2Zvcm1fc3RkaW4gKyAhIWFyZ2MgPiAxKSB7CiAJCWVycm9yKCJTcGVjaWZ5IGVpdGhlciBhIGxpc3QsIG9yIC0tYWxsLCBub3QgYm90aCEiKTsKQEAgLTIzNCw0NyArMjc2LDEyIEBACiAKIAlpZiAodHJhbnNmb3JtX3N0ZGluKSB7CiAJCWNoYXIgYnVmZmVyWzIwNDhdOwotCQljaGFyICpwLCAqcF9zdGFydDsKIAogCQl3aGlsZSAoIWZlb2Yoc3RkaW4pKSB7Ci0JCQlpbnQgZm9ydHkgPSAwOwotCQkJcCA9IGZnZXRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIHN0ZGluKTsKKwkJCWNoYXIgKnAgPSBmZ2V0cyhidWZmZXIsIHNpemVvZihidWZmZXIpLCBzdGRpbik7CiAJCQlpZiAoIXApCiAJCQkJYnJlYWs7Ci0KLQkJCWZvciAocF9zdGFydCA9IHA7ICpwOyBwKyspIHsKLSNkZWZpbmUgaXNoZXgoeCkgKGlzZGlnaXQoKHgpKSB8fCAoKHgpID49ICdhJyAmJiAoeCkgPD0gJ2YnKSkKLQkJCQlpZiAoIWlzaGV4KCpwKSkKLQkJCQkJZm9ydHkgPSAwOwotCQkJCWVsc2UgaWYgKCsrZm9ydHkgPT0gNDAgJiYKLQkJCQkJCSFpc2hleCgqKHArMSkpKSB7Ci0JCQkJCXVuc2lnbmVkIGNoYXIgc2hhMVs0MF07Ci0JCQkJCWNvbnN0IGNoYXIgKm5hbWUgPSBOVUxMOwotCQkJCQljaGFyIGMgPSAqKHArMSk7Ci0KLQkJCQkJZm9ydHkgPSAwOwotCi0JCQkJCSoocCsxKSA9IDA7Ci0JCQkJCWlmICghZ2V0X3NoYTEocCAtIDM5LCBzaGExKSkgewotCQkJCQkJc3RydWN0IG9iamVjdCAqbyA9Ci0JCQkJCQkJbG9va3VwX29iamVjdChzaGExKTsKLQkJCQkJCWlmIChvKQotCQkJCQkJCW5hbWUgPSBnZXRfcmV2X25hbWUobyk7Ci0JCQkJCX0KLQkJCQkJKihwKzEpID0gYzsKLQotCQkJCQlpZiAoIW5hbWUpCi0JCQkJCQljb250aW51ZTsKLQotCQkJCQlmd3JpdGUocF9zdGFydCwgcCAtIHBfc3RhcnQgKyAxLCAxLCBzdGRvdXQpOwotCQkJCQlwcmludGYoIiAoJXMpIiwgbmFtZSk7Ci0JCQkJCXBfc3RhcnQgPSBwICsgMTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCS8qIGZsdXNoICovCi0JCQlpZiAocF9zdGFydCAhPSBwKQotCQkJCWZ3cml0ZShwX3N0YXJ0LCBwIC0gcF9zdGFydCwgMSwgc3Rkb3V0KTsKKwkJCW5hbWVfcmV2X2xpbmUocCwgJmRhdGEpOwogCQl9CiAJfSBlbHNlIGlmIChhbGwpIHsKIAkJaW50IGksIG1heDsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tcGFjay1vYmplY3RzLmMgYi9idWlsdGluLXBhY2stb2JqZWN0cy5jCmluZGV4IDc3N2YyNzIuLjQ0N2Q0OTIgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tcGFjay1vYmplY3RzLmMKKysrIGIvYnVpbHRpbi1wYWNrLW9iamVjdHMuYwpAQCAtMjgsNyArMjgsOCBAQAogCVstLXdpbmRvdz1OXSBbLS13aW5kb3ctbWVtb3J5PU5dIFstLWRlcHRoPU5dIFxuXAogCVstLW5vLXJldXNlLWRlbHRhXSBbLS1uby1yZXVzZS1vYmplY3RdIFstLWRlbHRhLWJhc2Utb2Zmc2V0XSBcblwKIAlbLS10aHJlYWRzPU5dIFstLW5vbi1lbXB0eV0gWy0tcmV2cyBbLS11bnBhY2tlZCB8IC0tYWxsXSpdIFstLXJlZmxvZ10gXG5cCi0JWy0tc3Rkb3V0IHwgYmFzZS1uYW1lXSBbLS1pbmNsdWRlLXRhZ10gWy0ta2VlcC11bnJlYWNoYWJsZV0gXG5cCisJWy0tc3Rkb3V0IHwgYmFzZS1uYW1lXSBbLS1pbmNsdWRlLXRhZ10gXG5cCisJWy0ta2VlcC11bnJlYWNoYWJsZSB8IC0tdW5wYWNrLXVucmVhY2hhYmxlXSBcblwKIAlbPHJlZi1saXN0IHwgPG9iamVjdC1saXN0XSI7CiAKIHN0cnVjdCBvYmplY3RfZW50cnkgewpAQCAtNDMsNiArNDQsNyBAQAogCQkJCQkgICAgICovCiAJdm9pZCAqZGVsdGFfZGF0YTsJLyogY2FjaGVkIGRlbHRhICh1bmNvbXByZXNzZWQpICovCiAJdW5zaWduZWQgbG9uZyBkZWx0YV9zaXplOwkvKiBkZWx0YSBkYXRhIHNpemUgKHVuY29tcHJlc3NlZCkgKi8KKwl1bnNpZ25lZCBsb25nIHpfZGVsdGFfc2l6ZTsJLyogZGVsdGEgZGF0YSBzaXplIChjb21wcmVzc2VkKSAqLwogCXVuc2lnbmVkIGludCBoYXNoOwkvKiBuYW1lIGhpbnQgaGFzaCAqLwogCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKIAllbnVtIG9iamVjdF90eXBlIGluX3BhY2tfdHlwZTsJLyogY291bGQgYmUgZGVsdGEgKi8KQEAgLTY1LDcgKzY3LDggQEAKIHN0YXRpYyB1aW50MzJfdCBucl9vYmplY3RzLCBucl9hbGxvYywgbnJfcmVzdWx0LCBucl93cml0dGVuOwogCiBzdGF0aWMgaW50IG5vbl9lbXB0eTsKLXN0YXRpYyBpbnQgbm9fcmV1c2VfZGVsdGEsIG5vX3JldXNlX29iamVjdCwga2VlcF91bnJlYWNoYWJsZSwgaW5jbHVkZV90YWc7CitzdGF0aWMgaW50IHJldXNlX2RlbHRhID0gMSwgcmV1c2Vfb2JqZWN0ID0gMTsKK3N0YXRpYyBpbnQga2VlcF91bnJlYWNoYWJsZSwgdW5wYWNrX3VucmVhY2hhYmxlLCBpbmNsdWRlX3RhZzsKIHN0YXRpYyBpbnQgbG9jYWw7CiBzdGF0aWMgaW50IGluY3JlbWVudGFsOwogc3RhdGljIGludCBhbGxvd19vZnNfZGVsdGE7CkBAIC0xMDIsMjQgKzEwNSw1MyBAQAogc3RhdGljIHVpbnQzMl90IHJldXNlZCwgcmV1c2VkX2RlbHRhOwogCiAKLXN0YXRpYyB2b2lkICpkZWx0YV9hZ2FpbnN0KHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplLCBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplbnRyeSkKK3N0YXRpYyB2b2lkICpnZXRfZGVsdGEoc3RydWN0IG9iamVjdF9lbnRyeSAqZW50cnkpCiB7Ci0JdW5zaWduZWQgbG9uZyBvdGhlcnNpemUsIGRlbHRhX3NpemU7CisJdW5zaWduZWQgbG9uZyBzaXplLCBiYXNlX3NpemUsIGRlbHRhX3NpemU7CisJdm9pZCAqYnVmLCAqYmFzZV9idWYsICpkZWx0YV9idWY7CiAJZW51bSBvYmplY3RfdHlwZSB0eXBlOwotCXZvaWQgKm90aGVyYnVmID0gcmVhZF9zaGExX2ZpbGUoZW50cnktPmRlbHRhLT5pZHguc2hhMSwgJnR5cGUsICZvdGhlcnNpemUpOwotCXZvaWQgKmRlbHRhX2J1ZjsKIAotCWlmICghb3RoZXJidWYpCisJYnVmID0gcmVhZF9zaGExX2ZpbGUoZW50cnktPmlkeC5zaGExLCAmdHlwZSwgJnNpemUpOworCWlmICghYnVmKQorCQlkaWUoInVuYWJsZSB0byByZWFkICVzIiwgc2hhMV90b19oZXgoZW50cnktPmlkeC5zaGExKSk7CisJYmFzZV9idWYgPSByZWFkX3NoYTFfZmlsZShlbnRyeS0+ZGVsdGEtPmlkeC5zaGExLCAmdHlwZSwgJmJhc2Vfc2l6ZSk7CisJaWYgKCFiYXNlX2J1ZikKIAkJZGllKCJ1bmFibGUgdG8gcmVhZCAlcyIsIHNoYTFfdG9faGV4KGVudHJ5LT5kZWx0YS0+aWR4LnNoYTEpKTsKLSAgICAgICAgZGVsdGFfYnVmID0gZGlmZl9kZWx0YShvdGhlcmJ1Ziwgb3RoZXJzaXplLAorCWRlbHRhX2J1ZiA9IGRpZmZfZGVsdGEoYmFzZV9idWYsIGJhc2Vfc2l6ZSwKIAkJCSAgICAgICBidWYsIHNpemUsICZkZWx0YV9zaXplLCAwKTsKLSAgICAgICAgaWYgKCFkZWx0YV9idWYgfHwgZGVsdGFfc2l6ZSAhPSBlbnRyeS0+ZGVsdGFfc2l6ZSkKKwlpZiAoIWRlbHRhX2J1ZiB8fCBkZWx0YV9zaXplICE9IGVudHJ5LT5kZWx0YV9zaXplKQogCQlkaWUoImRlbHRhIHNpemUgY2hhbmdlZCIpOwotICAgICAgICBmcmVlKGJ1Zik7Ci0gICAgICAgIGZyZWUob3RoZXJidWYpOworCWZyZWUoYnVmKTsKKwlmcmVlKGJhc2VfYnVmKTsKIAlyZXR1cm4gZGVsdGFfYnVmOwogfQogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBkb19jb21wcmVzcyh2b2lkICoqcHB0ciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXpfc3RyZWFtIHN0cmVhbTsKKwl2b2lkICppbiwgKm91dDsKKwl1bnNpZ25lZCBsb25nIG1heHNpemU7CisKKwltZW1zZXQoJnN0cmVhbSwgMCwgc2l6ZW9mKHN0cmVhbSkpOworCWRlZmxhdGVJbml0KCZzdHJlYW0sIHBhY2tfY29tcHJlc3Npb25fbGV2ZWwpOworCW1heHNpemUgPSBkZWZsYXRlQm91bmQoJnN0cmVhbSwgc2l6ZSk7CisKKwlpbiA9ICpwcHRyOworCW91dCA9IHhtYWxsb2MobWF4c2l6ZSk7CisJKnBwdHIgPSBvdXQ7CisKKwlzdHJlYW0ubmV4dF9pbiA9IGluOworCXN0cmVhbS5hdmFpbF9pbiA9IHNpemU7CisJc3RyZWFtLm5leHRfb3V0ID0gb3V0OworCXN0cmVhbS5hdmFpbF9vdXQgPSBtYXhzaXplOworCXdoaWxlIChkZWZsYXRlKCZzdHJlYW0sIFpfRklOSVNIKSA9PSBaX09LKQorCQk7IC8qIG5vdGhpbmcgKi8KKwlkZWZsYXRlRW5kKCZzdHJlYW0pOworCisJZnJlZShpbik7CisJcmV0dXJuIHN0cmVhbS50b3RhbF9vdXQ7Cit9CisKIC8qCiAgKiBUaGUgcGVyLW9iamVjdCBoZWFkZXIgaXMgYSBwcmV0dHkgZGVuc2UgdGhpbmcsIHdoaWNoIGlzCiAgKiAgLSBmaXJzdCBieXRlOiBsb3cgZm91ciBiaXRzIGFyZSAic2l6ZSIsIHRoZW4gdGhyZWUgYml0cyBvZiAidHlwZSIsCkBAIC0yMjIsNDIgKzI1NCw0MiBAQAogCQkJCSAgc3RydWN0IG9iamVjdF9lbnRyeSAqZW50cnksCiAJCQkJICBvZmZfdCB3cml0ZV9vZmZzZXQpCiB7Ci0JdW5zaWduZWQgbG9uZyBzaXplOwotCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl1bnNpZ25lZCBsb25nIHNpemUsIGxpbWl0LCBkYXRhbGVuOwogCXZvaWQgKmJ1ZjsKLQl1bnNpZ25lZCBjaGFyIGhlYWRlclsxMF07Ci0JdW5zaWduZWQgY2hhciBkaGVhZGVyWzEwXTsKKwl1bnNpZ25lZCBjaGFyIGhlYWRlclsxMF0sIGRoZWFkZXJbMTBdOwogCXVuc2lnbmVkIGhkcmxlbjsKLQlvZmZfdCBkYXRhbGVuOwotCWVudW0gb2JqZWN0X3R5cGUgb2JqX3R5cGU7Ci0JaW50IHRvX3JldXNlID0gMDsKLQkvKiB3cml0ZSBsaW1pdCBpZiBsaW1pdGVkIHBhY2tzaXplIGFuZCBub3QgZmlyc3Qgb2JqZWN0ICovCi0JdW5zaWduZWQgbG9uZyBsaW1pdCA9IHBhY2tfc2l6ZV9saW1pdCAmJiBucl93cml0dGVuID8KLQkJCQlwYWNrX3NpemVfbGltaXQgLSB3cml0ZV9vZmZzZXQgOiAwOwotCQkJCS8qIG5vIGlmIG5vIGRlbHRhICovCi0JaW50IHVzYWJsZV9kZWx0YSA9CSFlbnRyeS0+ZGVsdGEgPyAwIDoKLQkJCQkvKiB5ZXMgaWYgdW5saW1pdGVkIHBhY2tmaWxlICovCi0JCQkJIXBhY2tfc2l6ZV9saW1pdCA/IDEgOgotCQkJCS8qIG5vIGlmIGJhc2Ugd3JpdHRlbiB0byBwcmV2aW91cyBwYWNrICovCi0JCQkJZW50cnktPmRlbHRhLT5pZHgub2Zmc2V0ID09IChvZmZfdCktMSA/IDAgOgotCQkJCS8qIG90aGVyd2lzZSBkb3VibGUtY2hlY2sgd3JpdHRlbiB0byB0aGlzCi0JCQkJICogcGFjaywgIGxpa2Ugd2UgZG8gYmVsb3cKLQkJCQkgKi8KLQkJCQllbnRyeS0+ZGVsdGEtPmlkeC5vZmZzZXQgPyAxIDogMDsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJaW50IHVzYWJsZV9kZWx0YSwgdG9fcmV1c2U7CiAKIAlpZiAoIXBhY2tfdG9fc3Rkb3V0KQogCQljcmMzMl9iZWdpbihmKTsKIAotCW9ial90eXBlID0gZW50cnktPnR5cGU7Ci0JaWYgKG5vX3JldXNlX29iamVjdCkKKwl0eXBlID0gZW50cnktPnR5cGU7CisKKwkvKiB3cml0ZSBsaW1pdCBpZiBsaW1pdGVkIHBhY2tzaXplIGFuZCBub3QgZmlyc3Qgb2JqZWN0ICovCisJbGltaXQgPSBwYWNrX3NpemVfbGltaXQgJiYgbnJfd3JpdHRlbiA/CisJCQlwYWNrX3NpemVfbGltaXQgLSB3cml0ZV9vZmZzZXQgOiAwOworCisJaWYgKCFlbnRyeS0+ZGVsdGEpCisJCXVzYWJsZV9kZWx0YSA9IDA7CS8qIG5vIGRlbHRhICovCisJZWxzZSBpZiAoIXBhY2tfc2l6ZV9saW1pdCkKKwkgICAgICAgdXNhYmxlX2RlbHRhID0gMTsJLyogdW5saW1pdGVkIHBhY2tmaWxlICovCisJZWxzZSBpZiAoZW50cnktPmRlbHRhLT5pZHgub2Zmc2V0ID09IChvZmZfdCktMSkKKwkJdXNhYmxlX2RlbHRhID0gMDsJLyogYmFzZSB3YXMgd3JpdHRlbiB0byBhbm90aGVyIHBhY2sgKi8KKwllbHNlIGlmIChlbnRyeS0+ZGVsdGEtPmlkeC5vZmZzZXQpCisJCXVzYWJsZV9kZWx0YSA9IDE7CS8qIGJhc2UgYWxyZWFkeSBleGlzdHMgaW4gdGhpcyBwYWNrICovCisJZWxzZQorCQl1c2FibGVfZGVsdGEgPSAwOwkvKiBiYXNlIGNvdWxkIGVuZCB1cCBpbiBhbm90aGVyIHBhY2sgKi8KKworCWlmICghcmV1c2Vfb2JqZWN0KQogCQl0b19yZXVzZSA9IDA7CS8qIGV4cGxpY2l0ICovCiAJZWxzZSBpZiAoIWVudHJ5LT5pbl9wYWNrKQogCQl0b19yZXVzZSA9IDA7CS8qIGNhbid0IHJldXNlIHdoYXQgd2UgZG9uJ3QgaGF2ZSAqLwotCWVsc2UgaWYgKG9ial90eXBlID09IE9CSl9SRUZfREVMVEEgfHwgb2JqX3R5cGUgPT0gT0JKX09GU19ERUxUQSkKKwllbHNlIGlmICh0eXBlID09IE9CSl9SRUZfREVMVEEgfHwgdHlwZSA9PSBPQkpfT0ZTX0RFTFRBKQogCQkJCS8qIGNoZWNrX29iamVjdCgpIGRlY2lkZWQgaXQgZm9yIHVzIC4uLiAqLwogCQl0b19yZXVzZSA9IHVzYWJsZV9kZWx0YTsKIAkJCQkvKiAuLi4gYnV0IHBhY2sgc3BsaXQgbWF5IG92ZXJyaWRlIHRoYXQgKi8KLQllbHNlIGlmIChvYmpfdHlwZSAhPSBlbnRyeS0+aW5fcGFja190eXBlKQorCWVsc2UgaWYgKHR5cGUgIT0gZW50cnktPmluX3BhY2tfdHlwZSkKIAkJdG9fcmV1c2UgPSAwOwkvKiBwYWNrIGhhcyBkZWx0YSB3aGljaCBpcyB1bnVzYWJsZSAqLwogCWVsc2UgaWYgKGVudHJ5LT5kZWx0YSkKIAkJdG9fcmV1c2UgPSAwOwkvKiB3ZSB3YW50IHRvIHBhY2sgYWZyZXNoICovCkBAIC0yNjcsNTAgKzI5OSw0MiBAQAogCQkJCSAqLwogCiAJaWYgKCF0b19yZXVzZSkgewotCQl6X3N0cmVhbSBzdHJlYW07Ci0JCXVuc2lnbmVkIGxvbmcgbWF4c2l6ZTsKLQkJdm9pZCAqb3V0OwogCQlpZiAoIXVzYWJsZV9kZWx0YSkgewotCQkJYnVmID0gcmVhZF9zaGExX2ZpbGUoZW50cnktPmlkeC5zaGExLCAmb2JqX3R5cGUsICZzaXplKTsKKwkJCWJ1ZiA9IHJlYWRfc2hhMV9maWxlKGVudHJ5LT5pZHguc2hhMSwgJnR5cGUsICZzaXplKTsKIAkJCWlmICghYnVmKQogCQkJCWRpZSgidW5hYmxlIHRvIHJlYWQgJXMiLCBzaGExX3RvX2hleChlbnRyeS0+aWR4LnNoYTEpKTsKKwkJCS8qCisJCQkgKiBtYWtlIHN1cmUgbm8gY2FjaGVkIGRlbHRhIGRhdGEgcmVtYWlucyBmcm9tIGEKKwkJCSAqIHByZXZpb3VzIGF0dGVtcHQgYmVmb3JlIGEgcGFjayBzcGxpdCBvY2N1cmVkLgorCQkJICovCisJCQlmcmVlKGVudHJ5LT5kZWx0YV9kYXRhKTsKKwkJCWVudHJ5LT5kZWx0YV9kYXRhID0gTlVMTDsKKwkJCWVudHJ5LT56X2RlbHRhX3NpemUgPSAwOwogCQl9IGVsc2UgaWYgKGVudHJ5LT5kZWx0YV9kYXRhKSB7CiAJCQlzaXplID0gZW50cnktPmRlbHRhX3NpemU7CiAJCQlidWYgPSBlbnRyeS0+ZGVsdGFfZGF0YTsKIAkJCWVudHJ5LT5kZWx0YV9kYXRhID0gTlVMTDsKLQkJCW9ial90eXBlID0gKGFsbG93X29mc19kZWx0YSAmJiBlbnRyeS0+ZGVsdGEtPmlkeC5vZmZzZXQpID8KKwkJCXR5cGUgPSAoYWxsb3dfb2ZzX2RlbHRhICYmIGVudHJ5LT5kZWx0YS0+aWR4Lm9mZnNldCkgPwogCQkJCU9CSl9PRlNfREVMVEEgOiBPQkpfUkVGX0RFTFRBOwogCQl9IGVsc2UgewotCQkJYnVmID0gcmVhZF9zaGExX2ZpbGUoZW50cnktPmlkeC5zaGExLCAmdHlwZSwgJnNpemUpOwotCQkJaWYgKCFidWYpCi0JCQkJZGllKCJ1bmFibGUgdG8gcmVhZCAlcyIsIHNoYTFfdG9faGV4KGVudHJ5LT5pZHguc2hhMSkpOwotCQkJYnVmID0gZGVsdGFfYWdhaW5zdChidWYsIHNpemUsIGVudHJ5KTsKKwkJCWJ1ZiA9IGdldF9kZWx0YShlbnRyeSk7CiAJCQlzaXplID0gZW50cnktPmRlbHRhX3NpemU7Ci0JCQlvYmpfdHlwZSA9IChhbGxvd19vZnNfZGVsdGEgJiYgZW50cnktPmRlbHRhLT5pZHgub2Zmc2V0KSA/CisJCQl0eXBlID0gKGFsbG93X29mc19kZWx0YSAmJiBlbnRyeS0+ZGVsdGEtPmlkeC5vZmZzZXQpID8KIAkJCQlPQkpfT0ZTX0RFTFRBIDogT0JKX1JFRl9ERUxUQTsKIAkJfQotCQkvKiBjb21wcmVzcyB0aGUgZGF0YSB0byBzdG9yZSBhbmQgcHV0IGNvbXByZXNzZWQgbGVuZ3RoIGluIGRhdGFsZW4gKi8KLQkJbWVtc2V0KCZzdHJlYW0sIDAsIHNpemVvZihzdHJlYW0pKTsKLQkJZGVmbGF0ZUluaXQoJnN0cmVhbSwgcGFja19jb21wcmVzc2lvbl9sZXZlbCk7Ci0JCW1heHNpemUgPSBkZWZsYXRlQm91bmQoJnN0cmVhbSwgc2l6ZSk7Ci0JCW91dCA9IHhtYWxsb2MobWF4c2l6ZSk7Ci0JCS8qIENvbXByZXNzIGl0ICovCi0JCXN0cmVhbS5uZXh0X2luID0gYnVmOwotCQlzdHJlYW0uYXZhaWxfaW4gPSBzaXplOwotCQlzdHJlYW0ubmV4dF9vdXQgPSBvdXQ7Ci0JCXN0cmVhbS5hdmFpbF9vdXQgPSBtYXhzaXplOwotCQl3aGlsZSAoZGVmbGF0ZSgmc3RyZWFtLCBaX0ZJTklTSCkgPT0gWl9PSykKLQkJCS8qIG5vdGhpbmcgKi87Ci0JCWRlZmxhdGVFbmQoJnN0cmVhbSk7Ci0JCWRhdGFsZW4gPSBzdHJlYW0udG90YWxfb3V0OworCisJCWlmIChlbnRyeS0+el9kZWx0YV9zaXplKQorCQkJZGF0YWxlbiA9IGVudHJ5LT56X2RlbHRhX3NpemU7CisJCWVsc2UKKwkJCWRhdGFsZW4gPSBkb19jb21wcmVzcygmYnVmLCBzaXplKTsKIAogCQkvKgogCQkgKiBUaGUgb2JqZWN0IGhlYWRlciBpcyBhIGJ5dGUgb2YgJ3R5cGUnIGZvbGxvd2VkIGJ5IHplcm8gb3IKIAkJICogbW9yZSBieXRlcyBvZiBsZW5ndGguCiAJCSAqLwotCQloZHJsZW4gPSBlbmNvZGVfaGVhZGVyKG9ial90eXBlLCBzaXplLCBoZWFkZXIpOworCQloZHJsZW4gPSBlbmNvZGVfaGVhZGVyKHR5cGUsIHNpemUsIGhlYWRlcik7CiAKLQkJaWYgKG9ial90eXBlID09IE9CSl9PRlNfREVMVEEpIHsKKwkJaWYgKHR5cGUgPT0gT0JKX09GU19ERUxUQSkgewogCQkJLyoKIAkJCSAqIERlbHRhcyB3aXRoIHJlbGF0aXZlIGJhc2UgY29udGFpbiBhbiBhZGRpdGlvbmFsCiAJCQkgKiBlbmNvZGluZyBvZiB0aGUgcmVsYXRpdmUgb2Zmc2V0IGZvciB0aGUgZGVsdGEKQEAgLTMyMiwyMCArMzQ2LDE4IEBACiAJCQl3aGlsZSAob2ZzID4+PSA3KQogCQkJCWRoZWFkZXJbLS1wb3NdID0gMTI4IHwgKC0tb2ZzICYgMTI3KTsKIAkJCWlmIChsaW1pdCAmJiBoZHJsZW4gKyBzaXplb2YoZGhlYWRlcikgLSBwb3MgKyBkYXRhbGVuICsgMjAgPj0gbGltaXQpIHsKLQkJCQlmcmVlKG91dCk7CiAJCQkJZnJlZShidWYpOwogCQkJCXJldHVybiAwOwogCQkJfQogCQkJc2hhMXdyaXRlKGYsIGhlYWRlciwgaGRybGVuKTsKIAkJCXNoYTF3cml0ZShmLCBkaGVhZGVyICsgcG9zLCBzaXplb2YoZGhlYWRlcikgLSBwb3MpOwogCQkJaGRybGVuICs9IHNpemVvZihkaGVhZGVyKSAtIHBvczsKLQkJfSBlbHNlIGlmIChvYmpfdHlwZSA9PSBPQkpfUkVGX0RFTFRBKSB7CisJCX0gZWxzZSBpZiAodHlwZSA9PSBPQkpfUkVGX0RFTFRBKSB7CiAJCQkvKgogCQkJICogRGVsdGFzIHdpdGggYSBiYXNlIHJlZmVyZW5jZSBjb250YWluCiAJCQkgKiBhbiBhZGRpdGlvbmFsIDIwIGJ5dGVzIGZvciB0aGUgYmFzZSBzaGExLgogCQkJICovCiAJCQlpZiAobGltaXQgJiYgaGRybGVuICsgMjAgKyBkYXRhbGVuICsgMjAgPj0gbGltaXQpIHsKLQkJCQlmcmVlKG91dCk7CiAJCQkJZnJlZShidWYpOwogCQkJCXJldHVybiAwOwogCQkJfQpAQCAtMzQ0LDE0ICszNjYsMTIgQEAKIAkJCWhkcmxlbiArPSAyMDsKIAkJfSBlbHNlIHsKIAkJCWlmIChsaW1pdCAmJiBoZHJsZW4gKyBkYXRhbGVuICsgMjAgPj0gbGltaXQpIHsKLQkJCQlmcmVlKG91dCk7CiAJCQkJZnJlZShidWYpOwogCQkJCXJldHVybiAwOwogCQkJfQogCQkJc2hhMXdyaXRlKGYsIGhlYWRlciwgaGRybGVuKTsKIAkJfQotCQlzaGExd3JpdGUoZiwgb3V0LCBkYXRhbGVuKTsKLQkJZnJlZShvdXQpOworCQlzaGExd3JpdGUoZiwgYnVmLCBkYXRhbGVuKTsKIAkJZnJlZShidWYpOwogCX0KIAllbHNlIHsKQEAgLTM2MSwxMSArMzgxLDExIEBACiAJCW9mZl90IG9mZnNldDsKIAogCQlpZiAoZW50cnktPmRlbHRhKSB7Ci0JCQlvYmpfdHlwZSA9IChhbGxvd19vZnNfZGVsdGEgJiYgZW50cnktPmRlbHRhLT5pZHgub2Zmc2V0KSA/CisJCQl0eXBlID0gKGFsbG93X29mc19kZWx0YSAmJiBlbnRyeS0+ZGVsdGEtPmlkeC5vZmZzZXQpID8KIAkJCQlPQkpfT0ZTX0RFTFRBIDogT0JKX1JFRl9ERUxUQTsKIAkJCXJldXNlZF9kZWx0YSsrOwogCQl9Ci0JCWhkcmxlbiA9IGVuY29kZV9oZWFkZXIob2JqX3R5cGUsIGVudHJ5LT5zaXplLCBoZWFkZXIpOworCQloZHJsZW4gPSBlbmNvZGVfaGVhZGVyKHR5cGUsIGVudHJ5LT5zaXplLCBoZWFkZXIpOwogCQlvZmZzZXQgPSBlbnRyeS0+aW5fcGFja19vZmZzZXQ7CiAJCXJldmlkeCA9IGZpbmRfcGFja19yZXZpbmRleChwLCBvZmZzZXQpOwogCQlkYXRhbGVuID0gcmV2aWR4WzFdLm9mZnNldCAtIG9mZnNldDsKQEAgLTM3NCw3ICszOTQsNyBAQAogCQkJZGllKCJiYWQgcGFja2VkIG9iamVjdCBDUkMgZm9yICVzIiwgc2hhMV90b19oZXgoZW50cnktPmlkeC5zaGExKSk7CiAJCW9mZnNldCArPSBlbnRyeS0+aW5fcGFja19oZWFkZXJfc2l6ZTsKIAkJZGF0YWxlbiAtPSBlbnRyeS0+aW5fcGFja19oZWFkZXJfc2l6ZTsKLQkJaWYgKG9ial90eXBlID09IE9CSl9PRlNfREVMVEEpIHsKKwkJaWYgKHR5cGUgPT0gT0JKX09GU19ERUxUQSkgewogCQkJb2ZmX3Qgb2ZzID0gZW50cnktPmlkeC5vZmZzZXQgLSBlbnRyeS0+ZGVsdGEtPmlkeC5vZmZzZXQ7CiAJCQl1bnNpZ25lZCBwb3MgPSBzaXplb2YoZGhlYWRlcikgLSAxOwogCQkJZGhlYWRlcltwb3NdID0gb2ZzICYgMTI3OwpAQCAtMzg1LDcgKzQwNSw3IEBACiAJCQlzaGExd3JpdGUoZiwgaGVhZGVyLCBoZHJsZW4pOwogCQkJc2hhMXdyaXRlKGYsIGRoZWFkZXIgKyBwb3MsIHNpemVvZihkaGVhZGVyKSAtIHBvcyk7CiAJCQloZHJsZW4gKz0gc2l6ZW9mKGRoZWFkZXIpIC0gcG9zOwotCQl9IGVsc2UgaWYgKG9ial90eXBlID09IE9CSl9SRUZfREVMVEEpIHsKKwkJfSBlbHNlIGlmICh0eXBlID09IE9CSl9SRUZfREVMVEEpIHsKIAkJCWlmIChsaW1pdCAmJiBoZHJsZW4gKyAyMCArIGRhdGFsZW4gKyAyMCA+PSBsaW1pdCkKIAkJCQlyZXR1cm4gMDsKIAkJCXNoYTF3cml0ZShmLCBoZWFkZXIsIGhkcmxlbik7CkBAIC00NTIsMTEgKzQ3MiwxMCBAQAogCXN0cnVjdCBzaGExZmlsZSAqZjsKIAlvZmZfdCBvZmZzZXQsIG9mZnNldF9vbmUsIGxhc3Rfb2JqX29mZnNldCA9IDA7CiAJc3RydWN0IHBhY2tfaGVhZGVyIGhkcjsKLQlpbnQgZG9fcHJvZ3Jlc3MgPSBwcm9ncmVzcyA+PiBwYWNrX3RvX3N0ZG91dDsKIAl1aW50MzJfdCBucl9yZW1haW5pbmcgPSBucl9yZXN1bHQ7CiAJdGltZV90IGxhc3RfbXRpbWUgPSAwOwogCi0JaWYgKGRvX3Byb2dyZXNzKQorCWlmIChwcm9ncmVzcyA+IHBhY2tfdG9fc3Rkb3V0KQogCQlwcm9ncmVzc19zdGF0ZSA9IHN0YXJ0X3Byb2dyZXNzKCJXcml0aW5nIG9iamVjdHMiLCBucl9yZXN1bHQpOwogCXdyaXR0ZW5fbGlzdCA9IHhtYWxsb2MobnJfb2JqZWN0cyAqIHNpemVvZigqd3JpdHRlbl9saXN0KSk7CiAKQEAgLTQ5NSwxMSArNTE0LDE0IEBACiAJCSAqIERpZCB3ZSB3cml0ZSB0aGUgd3JvbmcgIyBlbnRyaWVzIGluIHRoZSBoZWFkZXI/CiAJCSAqIElmIHNvLCByZXdyaXRlIGl0IGxpa2UgaW4gZmFzdC1pbXBvcnQKIAkJICovCi0JCWlmIChwYWNrX3RvX3N0ZG91dCB8fCBucl93cml0dGVuID09IG5yX3JlbWFpbmluZykgewotCQkJc2hhMWNsb3NlKGYsIHNoYTEsIDEpOworCQlpZiAocGFja190b19zdGRvdXQpIHsKKwkJCXNoYTFjbG9zZShmLCBzaGExLCBDU1VNX0NMT1NFKTsKKwkJfSBlbHNlIGlmIChucl93cml0dGVuID09IG5yX3JlbWFpbmluZykgeworCQkJc2hhMWNsb3NlKGYsIHNoYTEsIENTVU1fRlNZTkMpOwogCQl9IGVsc2UgewogCQkJaW50IGZkID0gc2hhMWNsb3NlKGYsIE5VTEwsIDApOwogCQkJZml4dXBfcGFja19oZWFkZXJfZm9vdGVyKGZkLCBzaGExLCBwYWNrX3RtcF9uYW1lLCBucl93cml0dGVuKTsKKwkJCWZzeW5jX29yX2RpZShmZCwgcGFja190bXBfbmFtZSk7CiAJCQljbG9zZShmZCk7CiAJCX0KIApAQCAtMTAyMiw3ICsxMDQ0LDcgQEAKIAkJCXVudXNlX3BhY2soJndfY3Vycyk7CiAJCQlyZXR1cm47CiAJCWNhc2UgT0JKX1JFRl9ERUxUQToKLQkJCWlmICghbm9fcmV1c2VfZGVsdGEgJiYgIWVudHJ5LT5wcmVmZXJyZWRfYmFzZSkKKwkJCWlmIChyZXVzZV9kZWx0YSAmJiAhZW50cnktPnByZWZlcnJlZF9iYXNlKQogCQkJCWJhc2VfcmVmID0gdXNlX3BhY2socCwgJndfY3VycywKIAkJCQkJCWVudHJ5LT5pbl9wYWNrX29mZnNldCArIHVzZWQsIE5VTEwpOwogCQkJZW50cnktPmluX3BhY2tfaGVhZGVyX3NpemUgPSB1c2VkICsgMjA7CkBAIC0xMDQ1LDcgKzEwNjcsNyBAQAogCQkJCWRpZSgiZGVsdGEgYmFzZSBvZmZzZXQgb3V0IG9mIGJvdW5kIGZvciAlcyIsCiAJCQkJICAgIHNoYTFfdG9faGV4KGVudHJ5LT5pZHguc2hhMSkpOwogCQkJb2ZzID0gZW50cnktPmluX3BhY2tfb2Zmc2V0IC0gb2ZzOwotCQkJaWYgKCFub19yZXVzZV9kZWx0YSAmJiAhZW50cnktPnByZWZlcnJlZF9iYXNlKSB7CisJCQlpZiAocmV1c2VfZGVsdGEgJiYgIWVudHJ5LT5wcmVmZXJyZWRfYmFzZSkgewogCQkJCXN0cnVjdCByZXZpbmRleF9lbnRyeSAqcmV2aWR4OwogCQkJCXJldmlkeCA9IGZpbmRfcGFja19yZXZpbmRleChwLCBvZnMpOwogCQkJCWJhc2VfcmVmID0gbnRoX3BhY2tlZF9vYmplY3Rfc2hhMShwLCByZXZpZHgtPm5yKTsKQEAgLTEyMzMsNyArMTI1NSw3IEBACiAJICogV2UgZG8gbm90IGJvdGhlciB0byB0cnkgYSBkZWx0YSB0aGF0IHdlIGRpc2NhcmRlZAogCSAqIG9uIGFuIGVhcmxpZXIgdHJ5LCBidXQgb25seSB3aGVuIHJldXNpbmcgZGVsdGEgZGF0YS4KIAkgKi8KLQlpZiAoIW5vX3JldXNlX2RlbHRhICYmIHRyZ19lbnRyeS0+aW5fcGFjayAmJgorCWlmIChyZXVzZV9kZWx0YSAmJiB0cmdfZW50cnktPmluX3BhY2sgJiYKIAkgICAgdHJnX2VudHJ5LT5pbl9wYWNrID09IHNyY19lbnRyeS0+aW5fcGFjayAmJgogCSAgICB0cmdfZW50cnktPmluX3BhY2tfdHlwZSAhPSBPQkpfUkVGX0RFTFRBICYmCiAJICAgIHRyZ19lbnRyeS0+aW5fcGFja190eXBlICE9IE9CSl9PRlNfREVMVEEpCkBAIC0xNDQxLDExICsxNDYzLDM0IEBACiAJCQkJYmVzdF9iYXNlID0gb3RoZXJfaWR4OwogCQl9CiAKKwkJLyoKKwkJICogSWYgd2UgZGVjaWRlZCB0byBjYWNoZSB0aGUgZGVsdGEgZGF0YSwgdGhlbiBpdCBpcyBiZXN0CisJCSAqIHRvIGNvbXByZXNzIGl0IHJpZ2h0IGF3YXkuICBGaXJzdCBiZWNhdXNlIHdlIGhhdmUgdG8gZG8KKwkJICogaXQgYW55d2F5LCBhbmQgZG9pbmcgaXQgaGVyZSB3aGlsZSB3ZSdyZSB0aHJlYWRlZCB3aWxsCisJCSAqIHNhdmUgYSBsb3Qgb2YgdGltZSBpbiB0aGUgbm9uIHRocmVhZGVkIHdyaXRlIHBoYXNlLAorCQkgKiBhcyB3ZWxsIGFzIGFsbG93IGZvciBjYWNoaW5nIG1vcmUgZGVsdGFzIHdpdGhpbgorCQkgKiB0aGUgc2FtZSBjYWNoZSBzaXplIGxpbWl0LgorCQkgKiAuLi4KKwkJICogQnV0IG9ubHkgaWYgbm90IHdyaXRpbmcgdG8gc3Rkb3V0LCBzaW5jZSBpbiB0aGF0IGNhc2UKKwkJICogdGhlIG5ldHdvcmsgaXMgbW9zdCBsaWtlbHkgdGhyb3R0bGluZyB3cml0ZXMgYW55d2F5LAorCQkgKiBhbmQgdGhlcmVmb3JlIGl0IGlzIGJlc3QgdG8gZ28gdG8gdGhlIHdyaXRlIHBoYXNlIEFTQVAKKwkJICogaW5zdGVhZCwgYXMgd2UgY2FuIGFmZm9yZCBzcGVuZGluZyBtb3JlIHRpbWUgY29tcHJlc3NpbmcKKwkJICogYmV0d2VlbiB3cml0ZXMgYXQgdGhhdCBtb21lbnQuCisJCSAqLworCQlpZiAoZW50cnktPmRlbHRhX2RhdGEgJiYgIXBhY2tfdG9fc3Rkb3V0KSB7CisJCQllbnRyeS0+el9kZWx0YV9zaXplID0gZG9fY29tcHJlc3MoJmVudHJ5LT5kZWx0YV9kYXRhLAorCQkJCQkJCSAgZW50cnktPmRlbHRhX3NpemUpOworCQkJY2FjaGVfbG9jaygpOworCQkJZGVsdGFfY2FjaGVfc2l6ZSAtPSBlbnRyeS0+ZGVsdGFfc2l6ZTsKKwkJCWRlbHRhX2NhY2hlX3NpemUgKz0gZW50cnktPnpfZGVsdGFfc2l6ZTsKKwkJCWNhY2hlX3VubG9jaygpOworCQl9CisKIAkJLyogaWYgd2UgbWFkZSBuIGEgZGVsdGEsIGFuZCBpZiBuIGlzIGFscmVhZHkgYXQgbWF4CiAJCSAqIGRlcHRoLCBsZWF2aW5nIGl0IGluIHRoZSB3aW5kb3cgaXMgcG9pbnRsZXNzLiAgd2UKIAkJICogc2hvdWxkIGV2aWN0IGl0IGZpcnN0LgogCQkgKi8KLQkJaWYgKGVudHJ5LT5kZWx0YSAmJiBkZXB0aCA8PSBuLT5kZXB0aCkKKwkJaWYgKGVudHJ5LT5kZWx0YSAmJiBtYXhfZGVwdGggPD0gbi0+ZGVwdGgpCiAJCQljb250aW51ZTsKIAogCQkvKgpAQCAtMTY4OCw3ICsxNzMzLDcgQEAKIAogCQlpZiAoZW50cnktPmRlbHRhKQogCQkJLyogVGhpcyBoYXBwZW5zIGlmIHdlIGRlY2lkZWQgdG8gcmV1c2UgZXhpc3RpbmcKLQkJCSAqIGRlbHRhIGZyb20gYSBwYWNrLiAgIiFub19yZXVzZV9kZWx0YSAmJiIgaXMgaW1wbGllZC4KKwkJCSAqIGRlbHRhIGZyb20gYSBwYWNrLiAgInJldXNlX2RlbHRhICYmIiBpcyBpbXBsaWVkLgogCQkJICovCiAJCQljb250aW51ZTsKIApAQCAtMTcxOCw3ICsxNzYzLDcgQEAKIAlmcmVlKGRlbHRhX2xpc3QpOwogfQogCi1zdGF0aWMgaW50IGdpdF9wYWNrX2NvbmZpZyhjb25zdCBjaGFyICprLCBjb25zdCBjaGFyICp2KQorc3RhdGljIGludCBnaXRfcGFja19jb25maWcoY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdiwgdm9pZCAqY2IpCiB7CiAJaWYoIXN0cmNtcChrLCAicGFjay53aW5kb3ciKSkgewogCQl3aW5kb3cgPSBnaXRfY29uZmlnX2ludChrLCB2KTsKQEAgLTE3NzEsNyArMTgxNiw3IEBACiAJCXBhY2tfc2l6ZV9saW1pdF9jZmcgPSBnaXRfY29uZmlnX3Vsb25nKGssIHYpOwogCQlyZXR1cm4gMDsKIAl9Ci0JcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyhrLCB2KTsKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKGssIHYsIGNiKTsKIH0KIAogc3RhdGljIHZvaWQgcmVhZF9vYmplY3RfbGlzdF9mcm9tX3N0ZGluKHZvaWQpCkBAIC0xOTA1LDYgKzE5NTAsMzIgQEAKIAlmcmVlKGluX3BhY2suYXJyYXkpOwogfQogCitzdGF0aWMgdm9pZCBsb29zZW5fdW51c2VkX3BhY2tlZF9vYmplY3RzKHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKwl1aW50MzJfdCBpOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTE7CisKKwlmb3IgKHAgPSBwYWNrZWRfZ2l0OyBwOyBwID0gcC0+bmV4dCkgeworCQlmb3IgKGkgPSAwOyBpIDwgcmV2cy0+bnVtX2lnbm9yZV9wYWNrZWQ7IGkrKykgeworCQkJaWYgKG1hdGNoZXNfcGFja19uYW1lKHAsIHJldnMtPmlnbm9yZV9wYWNrZWRbaV0pKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChyZXZzLT5udW1faWdub3JlX3BhY2tlZCA8PSBpKQorCQkJY29udGludWU7CisKKwkJaWYgKG9wZW5fcGFja19pbmRleChwKSkKKwkJCWRpZSgiY2Fubm90IG9wZW4gcGFjayBpbmRleCIpOworCisJCWZvciAoaSA9IDA7IGkgPCBwLT5udW1fb2JqZWN0czsgaSsrKSB7CisJCQlzaGExID0gbnRoX3BhY2tlZF9vYmplY3Rfc2hhMShwLCBpKTsKKwkJCWlmICghbG9jYXRlX29iamVjdF9lbnRyeShzaGExKSkKKwkJCQlpZiAoZm9yY2Vfb2JqZWN0X2xvb3NlKHNoYTEsIHAtPm10aW1lKSkKKwkJCQkJZGllKCJ1bmFibGUgdG8gZm9yY2UgbG9vc2Ugb2JqZWN0Iik7CisJCX0KKwl9Cit9CisKIHN0YXRpYyB2b2lkIGdldF9vYmplY3RfbGlzdChpbnQgYWMsIGNvbnN0IGNoYXIgKiphdikKIHsKIAlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKQEAgLTE5MzksNiArMjAxMCw4IEBACiAKIAlpZiAoa2VlcF91bnJlYWNoYWJsZSkKIAkJYWRkX29iamVjdHNfaW5fdW5wYWNrZWRfcGFja3MoJnJldnMpOworCWlmICh1bnBhY2tfdW5yZWFjaGFibGUpCisJCWxvb3Nlbl91bnVzZWRfcGFja2VkX29iamVjdHMoJnJldnMpOwogfQogCiBzdGF0aWMgaW50IGFkanVzdF9wZXJtKGNvbnN0IGNoYXIgKnBhdGgsIG1vZGVfdCBtb2RlKQpAQCAtMTk2Myw3ICsyMDM2LDcgQEAKIAlycF9hdlsxXSA9ICItLW9iamVjdHMiOyAvKiAtLXRoaW4gd2lsbCBtYWtlIGl0IC0tb2JqZWN0cy1lZGdlICovCiAJcnBfYWMgPSAyOwogCi0JZ2l0X2NvbmZpZyhnaXRfcGFja19jb25maWcpOworCWdpdF9jb25maWcoZ2l0X3BhY2tfY29uZmlnLCBOVUxMKTsKIAlpZiAoIXBhY2tfY29tcHJlc3Npb25fc2VlbiAmJiBjb3JlX2NvbXByZXNzaW9uX3NlZW4pCiAJCXBhY2tfY29tcHJlc3Npb25fbGV2ZWwgPSBjb3JlX2NvbXByZXNzaW9uX2xldmVsOwogCkBAIC0yMDUwLDExICsyMTIzLDExIEBACiAJCQljb250aW51ZTsKIAkJfQogCQlpZiAoIXN0cmNtcCgiLS1uby1yZXVzZS1kZWx0YSIsIGFyZykpIHsKLQkJCW5vX3JldXNlX2RlbHRhID0gMTsKKwkJCXJldXNlX2RlbHRhID0gMDsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWlmICghc3RyY21wKCItLW5vLXJldXNlLW9iamVjdCIsIGFyZykpIHsKLQkJCW5vX3JldXNlX29iamVjdCA9IG5vX3JldXNlX2RlbHRhID0gMTsKKwkJCXJldXNlX29iamVjdCA9IHJldXNlX2RlbHRhID0gMDsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWlmICghc3RyY21wKCItLWRlbHRhLWJhc2Utb2Zmc2V0IiwgYXJnKSkgewpAQCAtMjA3Myw2ICsyMTQ2LDEwIEBACiAJCQlrZWVwX3VucmVhY2hhYmxlID0gMTsKIAkJCWNvbnRpbnVlOwogCQl9CisJCWlmICghc3RyY21wKCItLXVucGFjay11bnJlYWNoYWJsZSIsIGFyZykpIHsKKwkJCXVucGFja191bnJlYWNoYWJsZSA9IDE7CisJCQljb250aW51ZTsKKwkJfQogCQlpZiAoIXN0cmNtcCgiLS1pbmNsdWRlLXRhZyIsIGFyZykpIHsKIAkJCWluY2x1ZGVfdGFnID0gMTsKIAkJCWNvbnRpbnVlOwpAQCAtMjEzOCw2ICsyMjE1LDkgQEAKIAlpZiAoIXBhY2tfdG9fc3Rkb3V0ICYmIHRoaW4pCiAJCWRpZSgiLS10aGluIGNhbm5vdCBiZSB1c2VkIHRvIGJ1aWxkIGFuIGluZGV4YWJsZSBwYWNrLiIpOwogCisJaWYgKGtlZXBfdW5yZWFjaGFibGUgJiYgdW5wYWNrX3VucmVhY2hhYmxlKQorCQlkaWUoIi0ta2VlcC11bnJlYWNoYWJsZSBhbmQgLS11bnBhY2stdW5yZWFjaGFibGUgYXJlIGluY29tcGF0aWJsZS4iKTsKKwogI2lmZGVmIFRIUkVBREVEX0RFTFRBX1NFQVJDSAogCWlmICghZGVsdGFfc2VhcmNoX3RocmVhZHMpCS8qIC0tdGhyZWFkcz0wIG1lYW5zIGF1dG9kZXRlY3QgKi8KIAkJZGVsdGFfc2VhcmNoX3RocmVhZHMgPSBvbmxpbmVfY3B1cygpOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1wcnVuZS1wYWNrZWQuYyBiL2J1aWx0aW4tcHJ1bmUtcGFja2VkLmMKaW5kZXggMjNmYWYzMS4uMjQxYWZiYiAxMDA2NDQKLS0tIGEvYnVpbHRpbi1wcnVuZS1wYWNrZWQuYworKysgYi9idWlsdGluLXBydW5lLXBhY2tlZC5jCkBAIC04NSw3ICs4NSw2IEBACiAJCS8qIEhhbmRsZSBhcmd1bWVudHMgaGVyZSAuLiAqLwogCQl1c2FnZShwcnVuZV9wYWNrZWRfdXNhZ2UpOwogCX0KLQlzeW5jKCk7CiAJcHJ1bmVfcGFja2VkX29iamVjdHMob3B0cyk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9idWlsdGluLXBydW5lLmMgYi9idWlsdGluLXBydW5lLmMKaW5kZXggMjVmOTMwNC4uYmQzZDJmNiAxMDA2NDQKLS0tIGEvYnVpbHRpbi1wcnVuZS5jCisrKyBiL2J1aWx0aW4tcHJ1bmUuYwpAQCAtMTU2LDcgKzE1Niw2IEBACiAJbWFya19yZWFjaGFibGVfb2JqZWN0cygmcmV2cywgMSk7CiAJcHJ1bmVfb2JqZWN0X2RpcihnZXRfb2JqZWN0X2RpcmVjdG9yeSgpKTsKIAotCXN5bmMoKTsKIAlwcnVuZV9wYWNrZWRfb2JqZWN0cyhzaG93X29ubHkpOwogCXJlbW92ZV90ZW1wb3JhcnlfZmlsZXMoKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tcHVzaC5jIGIvYnVpbHRpbi1wdXNoLmMKaW5kZXggYjY4YzY4MS4uYjM1YWFkNiAxMDA2NDQKLS0tIGEvYnVpbHRpbi1wdXNoLmMKKysrIGIvYnVpbHRpbi1wdXNoLmMKQEAgLTU2LDYgKzU2LDE3IEBACiAJaWYgKCFyZW1vdGUpCiAJCWRpZSgiYmFkIHJlcG9zaXRvcnkgJyVzJyIsIHJlcG8pOwogCisJaWYgKHJlbW90ZS0+bWlycm9yKQorCQlmbGFncyB8PSAoVFJBTlNQT1JUX1BVU0hfTUlSUk9SfFRSQU5TUE9SVF9QVVNIX0ZPUkNFKTsKKworCWlmICgoZmxhZ3MgJiAoVFJBTlNQT1JUX1BVU0hfQUxMfFRSQU5TUE9SVF9QVVNIX01JUlJPUikpICYmIHJlZnNwZWMpCisJCXJldHVybiAtMTsKKworCWlmICgoZmxhZ3MgJiAoVFJBTlNQT1JUX1BVU0hfQUxMfFRSQU5TUE9SVF9QVVNIX01JUlJPUikpID09CisJCQkJKFRSQU5TUE9SVF9QVVNIX0FMTHxUUkFOU1BPUlRfUFVTSF9NSVJST1IpKSB7CisJCXJldHVybiBlcnJvcigiLS1hbGwgYW5kIC0tbWlycm9yIGFyZSBpbmNvbXBhdGlibGUiKTsKKwl9CisKIAlpZiAoIXJlZnNwZWMKIAkJJiYgIShmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0FMTCkKIAkJJiYgcmVtb3RlLT5wdXNoX3JlZnNwZWNfbnIpIHsKQEAgLTk1LDYgKzEwNiw3IEBACiAJaW50IGRyeV9ydW4gPSAwOwogCWludCBmb3JjZSA9IDA7CiAJaW50IHRhZ3MgPSAwOworCWludCByYzsKIAljb25zdCBjaGFyICpyZXBvID0gTlVMTDsJLyogZGVmYXVsdCByZXBvc2l0b3J5ICovCiAKIAlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKQEAgLTEzMCwxNCArMTQyLDEwIEBACiAJCXJlcG8gPSBhcmd2WzBdOwogCQlzZXRfcmVmc3BlY3MoYXJndiArIDEsIGFyZ2MgLSAxKTsKIAl9Ci0JaWYgKChmbGFncyAmIChUUkFOU1BPUlRfUFVTSF9BTEx8VFJBTlNQT1JUX1BVU0hfTUlSUk9SKSkgJiYgcmVmc3BlYykKLQkJdXNhZ2Vfd2l0aF9vcHRpb25zKHB1c2hfdXNhZ2UsIG9wdGlvbnMpOwogCi0JaWYgKChmbGFncyAmIChUUkFOU1BPUlRfUFVTSF9BTEx8VFJBTlNQT1JUX1BVU0hfTUlSUk9SKSkgPT0KLQkJCQkoVFJBTlNQT1JUX1BVU0hfQUxMfFRSQU5TUE9SVF9QVVNIX01JUlJPUikpIHsKLQkJZXJyb3IoIi0tYWxsIGFuZCAtLW1pcnJvciBhcmUgaW5jb21wYXRpYmxlIik7CisJcmMgPSBkb19wdXNoKHJlcG8sIGZsYWdzKTsKKwlpZiAocmMgPT0gLTEpCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhwdXNoX3VzYWdlLCBvcHRpb25zKTsKLQl9Ci0KLQlyZXR1cm4gZG9fcHVzaChyZXBvLCBmbGFncyk7CisJZWxzZQorCQlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9idWlsdGluLXJlYWQtdHJlZS5jIGIvYnVpbHRpbi1yZWFkLXRyZWUuYwppbmRleCBlOWNmZDJiLi41YTA5ZTE3IDEwMDY0NAotLS0gYS9idWlsdGluLXJlYWQtdHJlZS5jCisrKyBiL2J1aWx0aW4tcmVhZC10cmVlLmMKQEAgLTQwLDcgKzQwLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgYWN0aXZlX25yOyBpKyspIHsKIAkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKIAkJaWYgKGNlX3N0YWdlKGNlKSkgewotCQkJcmVtb3ZlX2luZGV4X2VudHJ5KGNlKTsKKwkJCXJlbW92ZV9uYW1lX2hhc2goY2UpOwogCQkJaWYgKGxhc3QgJiYgIXN0cmNtcChjZS0+bmFtZSwgbGFzdC0+bmFtZSkpCiAJCQkJY29udGludWU7CiAJCQljYWNoZV90cmVlX2ludmFsaWRhdGVfcGF0aChhY3RpdmVfY2FjaGVfdHJlZSwgY2UtPm5hbWUpOwpAQCAtMTA0LDEyICsxMDQsMTAgQEAKIAlvcHRzLnNyY19pbmRleCA9ICZ0aGVfaW5kZXg7CiAJb3B0cy5kc3RfaW5kZXggPSAmdGhlX2luZGV4OwogCi0JZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcpOworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKIAogCW5ld2ZkID0gaG9sZF9sb2NrZWRfaW5kZXgoJmxvY2tfZmlsZSwgMSk7CiAKLQlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZyk7Ci0KIAlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CiAJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CiAKZGlmZiAtLWdpdCBhL2J1aWx0aW4tcmVmbG9nLmMgYi9idWlsdGluLXJlZmxvZy5jCmluZGV4IDI4MGUyNGUuLjdkNzA0N2QgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tcmVmbG9nLmMKKysrIGIvYnVpbHRpbi1yZWZsb2cuYwpAQCAtMjY5LDcgKzI2OSw5IEBACiAJaW50IHN0YXR1cyA9IDA7CiAKIAltZW1zZXQoJmNiLCAwLCBzaXplb2YoY2IpKTsKLQkvKiB3ZSB0YWtlIHRoZSBsb2NrIGZvciB0aGUgcmVmIGl0c2VsZiB0byBwcmV2ZW50IGl0IGZyb20KKworCS8qCisJICogd2UgdGFrZSB0aGUgbG9jayBmb3IgdGhlIHJlZiBpdHNlbGYgdG8gcHJldmVudCBpdCBmcm9tCiAJICogZ2V0dGluZyB1cGRhdGVkLgogCSAqLwogCWxvY2sgPSBsb2NrX2FueV9yZWZfZm9yX3VwZGF0ZShyZWYsIHNoYTEsIDApOwpAQCAtMzA3LDYgKzMwOSw4IEBACiAJCQl1bmxpbmsobmV3bG9nX3BhdGgpOwogCQl9IGVsc2UgaWYgKGNtZC0+dXBkYXRlcmVmICYmIGNvbW1pdF9yZWYobG9jaykpIHsKIAkJCXN0YXR1cyB8PSBlcnJvcigiQ291bGRuJ3Qgc2V0ICVzIiwgbG9jay0+cmVmX25hbWUpOworCQl9IGVsc2UgeworCQkJYWRqdXN0X3NoYXJlZF9wZXJtKGxvZ19maWxlKTsKIAkJfQogCX0KIAlmcmVlKG5ld2xvZ19wYXRoKTsKQEAgLTMyOSwyMSArMzMzLDEzMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJlZmxvZ19leHBpcmVfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCitzdGF0aWMgc3RydWN0IHJlZmxvZ19leHBpcmVfY2ZnIHsKKwlzdHJ1Y3QgcmVmbG9nX2V4cGlyZV9jZmcgKm5leHQ7CisJdW5zaWduZWQgbG9uZyBleHBpcmVfdG90YWw7CisJdW5zaWduZWQgbG9uZyBleHBpcmVfdW5yZWFjaGFibGU7CisJc2l6ZV90IGxlbjsKKwljaGFyIHBhdHRlcm5bRkxFWF9BUlJBWV07Cit9ICpyZWZsb2dfZXhwaXJlX2NmZywgKipyZWZsb2dfZXhwaXJlX2NmZ190YWlsOworCitzdGF0aWMgc3RydWN0IHJlZmxvZ19leHBpcmVfY2ZnICpmaW5kX2NmZ19lbnQoY29uc3QgY2hhciAqcGF0dGVybiwgc2l6ZV90IGxlbikKIHsKLQlpZiAoIXN0cmNtcCh2YXIsICJnYy5yZWZsb2dleHBpcmUiKSkgewotCQlpZiAoIXZhbHVlKQotCQkJY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKLQkJZGVmYXVsdF9yZWZsb2dfZXhwaXJlID0gYXBwcm94aWRhdGUodmFsdWUpOworCXN0cnVjdCByZWZsb2dfZXhwaXJlX2NmZyAqZW50OworCisJaWYgKCFyZWZsb2dfZXhwaXJlX2NmZ190YWlsKQorCQlyZWZsb2dfZXhwaXJlX2NmZ190YWlsID0gJnJlZmxvZ19leHBpcmVfY2ZnOworCisJZm9yIChlbnQgPSByZWZsb2dfZXhwaXJlX2NmZzsgZW50OyBlbnQgPSBlbnQtPm5leHQpCisJCWlmIChlbnQtPmxlbiA9PSBsZW4gJiYKKwkJICAgICFtZW1jbXAoZW50LT5wYXR0ZXJuLCBwYXR0ZXJuLCBsZW4pKQorCQkJcmV0dXJuIGVudDsKKworCWVudCA9IHhjYWxsb2MoMSwgKHNpemVvZigqZW50KSArIGxlbikpOworCW1lbWNweShlbnQtPnBhdHRlcm4sIHBhdHRlcm4sIGxlbik7CisJZW50LT5sZW4gPSBsZW47CisJKnJlZmxvZ19leHBpcmVfY2ZnX3RhaWwgPSBlbnQ7CisJcmVmbG9nX2V4cGlyZV9jZmdfdGFpbCA9ICYoZW50LT5uZXh0KTsKKwlyZXR1cm4gZW50OworfQorCitzdGF0aWMgaW50IHBhcnNlX2V4cGlyZV9jZmdfdmFsdWUoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdW5zaWduZWQgbG9uZyAqZXhwaXJlKQoreworCWlmICghdmFsdWUpCisJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCWlmICghc3RyY21wKHZhbHVlLCAibmV2ZXIiKSB8fCAhc3RyY21wKHZhbHVlLCAiZmFsc2UiKSkgeworCQkqZXhwaXJlID0gMDsKIAkJcmV0dXJuIDA7CiAJfQotCWlmICghc3RyY21wKHZhciwgImdjLnJlZmxvZ2V4cGlyZXVucmVhY2hhYmxlIikpIHsKLQkJaWYgKCF2YWx1ZSkKLQkJCWNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7Ci0JCWRlZmF1bHRfcmVmbG9nX2V4cGlyZV91bnJlYWNoYWJsZSA9IGFwcHJveGlkYXRlKHZhbHVlKTsKKwkqZXhwaXJlID0gYXBwcm94aWRhdGUodmFsdWUpOworCXJldHVybiAwOworfQorCisvKiBleHBpcnkgdGltZXIgc2xvdCAqLworI2RlZmluZSBFWFBJUkVfVE9UQUwgICAwMQorI2RlZmluZSBFWFBJUkVfVU5SRUFDSCAwMgorCitzdGF0aWMgaW50IHJlZmxvZ19leHBpcmVfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWNvbnN0IGNoYXIgKmxhc3Rkb3QgPSBzdHJyY2hyKHZhciwgJy4nKTsKKwl1bnNpZ25lZCBsb25nIGV4cGlyZTsKKwlpbnQgc2xvdDsKKwlzdHJ1Y3QgcmVmbG9nX2V4cGlyZV9jZmcgKmVudDsKKworCWlmICghbGFzdGRvdCB8fCBwcmVmaXhjbXAodmFyLCAiZ2MuIikpCisJCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworCisJaWYgKCFzdHJjbXAobGFzdGRvdCwgIi5yZWZsb2dleHBpcmUiKSkgeworCQlzbG90ID0gRVhQSVJFX1RPVEFMOworCQlpZiAocGFyc2VfZXhwaXJlX2NmZ192YWx1ZSh2YXIsIHZhbHVlLCAmZXhwaXJlKSkKKwkJCXJldHVybiAtMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAobGFzdGRvdCwgIi5yZWZsb2dleHBpcmV1bnJlYWNoYWJsZSIpKSB7CisJCXNsb3QgPSBFWFBJUkVfVU5SRUFDSDsKKwkJaWYgKHBhcnNlX2V4cGlyZV9jZmdfdmFsdWUodmFyLCB2YWx1ZSwgJmV4cGlyZSkpCisJCQlyZXR1cm4gLTE7CisJfSBlbHNlCisJCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworCisJaWYgKGxhc3Rkb3QgPT0gdmFyICsgMikgeworCQlzd2l0Y2ggKHNsb3QpIHsKKwkJY2FzZSBFWFBJUkVfVE9UQUw6CisJCQlkZWZhdWx0X3JlZmxvZ19leHBpcmUgPSBleHBpcmU7CisJCQlicmVhazsKKwkJY2FzZSBFWFBJUkVfVU5SRUFDSDoKKwkJCWRlZmF1bHRfcmVmbG9nX2V4cGlyZV91bnJlYWNoYWJsZSA9IGV4cGlyZTsKKwkJCWJyZWFrOworCQl9CiAJCXJldHVybiAwOwogCX0KLQlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUpOworCisJZW50ID0gZmluZF9jZmdfZW50KHZhciArIDMsIGxhc3Rkb3QgLSAodmFyKzMpKTsKKwlpZiAoIWVudCkKKwkJcmV0dXJuIC0xOworCXN3aXRjaCAoc2xvdCkgeworCWNhc2UgRVhQSVJFX1RPVEFMOgorCQllbnQtPmV4cGlyZV90b3RhbCA9IGV4cGlyZTsKKwkJYnJlYWs7CisJY2FzZSBFWFBJUkVfVU5SRUFDSDoKKwkJZW50LT5leHBpcmVfdW5yZWFjaGFibGUgPSBleHBpcmU7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2V0X3JlZmxvZ19leHBpcnlfcGFyYW0oc3RydWN0IGNtZF9yZWZsb2dfZXhwaXJlX2NiICpjYiwgaW50IHNsb3QsIGNvbnN0IGNoYXIgKnJlZikKK3sKKwlzdHJ1Y3QgcmVmbG9nX2V4cGlyZV9jZmcgKmVudDsKKworCWlmIChzbG90ID09IChFWFBJUkVfVE9UQUx8RVhQSVJFX1VOUkVBQ0gpKQorCQlyZXR1cm47IC8qIGJvdGggZ2l2ZW4gZXhwbGljaXRseSAtLSBub3RoaW5nIHRvIHR3ZWFrICovCisKKwlmb3IgKGVudCA9IHJlZmxvZ19leHBpcmVfY2ZnOyBlbnQ7IGVudCA9IGVudC0+bmV4dCkgeworCQlpZiAoIWZubWF0Y2goZW50LT5wYXR0ZXJuLCByZWYsIDApKSB7CisJCQlpZiAoIShzbG90ICYgRVhQSVJFX1RPVEFMKSkKKwkJCQljYi0+ZXhwaXJlX3RvdGFsID0gZW50LT5leHBpcmVfdG90YWw7CisJCQlpZiAoIShzbG90ICYgRVhQSVJFX1VOUkVBQ0gpKQorCQkJCWNiLT5leHBpcmVfdW5yZWFjaGFibGUgPSBlbnQtPmV4cGlyZV91bnJlYWNoYWJsZTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qCisJICogSWYgdW5jb25maWd1cmVkLCBtYWtlIHN0YXNoIG5ldmVyIGV4cGlyZQorCSAqLworCWlmICghc3RyY21wKHJlZiwgInJlZnMvc3Rhc2giKSkgeworCQlpZiAoIShzbG90ICYgRVhQSVJFX1RPVEFMKSkKKwkJCWNiLT5leHBpcmVfdG90YWwgPSAwOworCQlpZiAoIShzbG90ICYgRVhQSVJFX1VOUkVBQ0gpKQorCQkJY2ItPmV4cGlyZV91bnJlYWNoYWJsZSA9IDA7CisJCXJldHVybjsKKwl9CisKKwkvKiBOb3RoaW5nIG1hdGNoZWQgLS0gdXNlIHRoZSBkZWZhdWx0IHZhbHVlICovCisJaWYgKCEoc2xvdCAmIEVYUElSRV9UT1RBTCkpCisJCWNiLT5leHBpcmVfdG90YWwgPSBkZWZhdWx0X3JlZmxvZ19leHBpcmU7CisJaWYgKCEoc2xvdCAmIEVYUElSRV9VTlJFQUNIKSkKKwkJY2ItPmV4cGlyZV91bnJlYWNoYWJsZSA9IGRlZmF1bHRfcmVmbG9nX2V4cGlyZV91bnJlYWNoYWJsZTsKIH0KIAogc3RhdGljIGludCBjbWRfcmVmbG9nX2V4cGlyZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKQEAgLTM1MSw4ICs0NjQsOSBAQAogCXN0cnVjdCBjbWRfcmVmbG9nX2V4cGlyZV9jYiBjYjsKIAl1bnNpZ25lZCBsb25nIG5vdyA9IHRpbWUoTlVMTCk7CiAJaW50IGksIHN0YXR1cywgZG9fYWxsOworCWludCBleHBsaWNpdF9leHBpcnkgPSAwOwogCi0JZ2l0X2NvbmZpZyhyZWZsb2dfZXhwaXJlX2NvbmZpZyk7CisJZ2l0X2NvbmZpZyhyZWZsb2dfZXhwaXJlX2NvbmZpZywgTlVMTCk7CiAKIAlzYXZlX2NvbW1pdF9idWZmZXIgPSAwOwogCWRvX2FsbCA9IHN0YXR1cyA9IDA7CkBAIC0zNjUsMjAgKzQ3OSwxOCBAQAogCWNiLmV4cGlyZV90b3RhbCA9IGRlZmF1bHRfcmVmbG9nX2V4cGlyZTsKIAljYi5leHBpcmVfdW5yZWFjaGFibGUgPSBkZWZhdWx0X3JlZmxvZ19leHBpcmVfdW5yZWFjaGFibGU7CiAKLQkvKgotCSAqIFdlIGNhbiB0cnVzdCB0aGUgY29tbWl0cyBhbmQgb2JqZWN0cyByZWFjaGFibGUgZnJvbSByZWZzCi0JICogZXZlbiBpbiBvbGRlciByZXBvc2l0b3J5LiAgV2UgY2Fubm90IHRydXN0IHdoYXQncyByZWFjaGFibGUKLQkgKiBmcm9tIHJlZmxvZyBpZiB0aGUgcmVwb3NpdG9yeSB3YXMgcHJ1bmVkIHdpdGggb2xkZXIgZ2l0LgotCSAqLwotCiAJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgewogCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOwogCQlpZiAoIXN0cmNtcChhcmcsICItLWRyeS1ydW4iKSB8fCAhc3RyY21wKGFyZywgIi1uIikpCiAJCQljYi5kcnlfcnVuID0gMTsKLQkJZWxzZSBpZiAoIXByZWZpeGNtcChhcmcsICItLWV4cGlyZT0iKSkKKwkJZWxzZSBpZiAoIXByZWZpeGNtcChhcmcsICItLWV4cGlyZT0iKSkgewogCQkJY2IuZXhwaXJlX3RvdGFsID0gYXBwcm94aWRhdGUoYXJnICsgOSk7Ci0JCWVsc2UgaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1leHBpcmUtdW5yZWFjaGFibGU9IikpCisJCQlleHBsaWNpdF9leHBpcnkgfD0gRVhQSVJFX1RPVEFMOworCQl9CisJCWVsc2UgaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1leHBpcmUtdW5yZWFjaGFibGU9IikpIHsKIAkJCWNiLmV4cGlyZV91bnJlYWNoYWJsZSA9IGFwcHJveGlkYXRlKGFyZyArIDIxKTsKKwkJCWV4cGxpY2l0X2V4cGlyeSB8PSBFWFBJUkVfVU5SRUFDSDsKKwkJfQogCQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tc3RhbGUtZml4IikpCiAJCQljYi5zdGFsZWZpeCA9IDE7CiAJCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1yZXdyaXRlIikpCkBAIC0zOTgsNiArNTEwLDEyIEBACiAJCWVsc2UKIAkJCWJyZWFrOwogCX0KKworCS8qCisJICogV2UgY2FuIHRydXN0IHRoZSBjb21taXRzIGFuZCBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIHJlZnMKKwkgKiBldmVuIGluIG9sZGVyIHJlcG9zaXRvcnkuICBXZSBjYW5ub3QgdHJ1c3Qgd2hhdCdzIHJlYWNoYWJsZQorCSAqIGZyb20gcmVmbG9nIGlmIHRoZSByZXBvc2l0b3J5IHdhcyBwcnVuZWQgd2l0aCBvbGRlciBnaXQuCisJICovCiAJaWYgKGNiLnN0YWxlZml4KSB7CiAJCWluaXRfcmV2aXNpb25zKCZjYi5yZXZzLCBwcmVmaXgpOwogCQlpZiAoY2IudmVyYm9zZSkKQEAgLTQxNSw2ICs1MzMsNyBAQAogCQlmb3JfZWFjaF9yZWZsb2coY29sbGVjdF9yZWZsb2csICZjb2xsZWN0ZWQpOwogCQlmb3IgKGkgPSAwOyBpIDwgY29sbGVjdGVkLm5yOyBpKyspIHsKIAkJCXN0cnVjdCBjb2xsZWN0ZWRfcmVmbG9nICplID0gY29sbGVjdGVkLmVbaV07CisJCQlzZXRfcmVmbG9nX2V4cGlyeV9wYXJhbSgmY2IsIGV4cGxpY2l0X2V4cGlyeSwgZS0+cmVmbG9nKTsKIAkJCXN0YXR1cyB8PSBleHBpcmVfcmVmbG9nKGUtPnJlZmxvZywgZS0+c2hhMSwgMCwgJmNiKTsKIAkJCWZyZWUoZSk7CiAJCX0KQEAgLTQyOCw2ICs1NDcsNyBAQAogCQkJc3RhdHVzIHw9IGVycm9yKCIlcyBwb2ludHMgbm93aGVyZSEiLCByZWYpOwogCQkJY29udGludWU7CiAJCX0KKwkJc2V0X3JlZmxvZ19leHBpcnlfcGFyYW0oJmNiLCBleHBsaWNpdF9leHBpcnksIHJlZik7CiAJCXN0YXR1cyB8PSBleHBpcmVfcmVmbG9nKHJlZiwgc2hhMSwgMCwgJmNiKTsKIAl9CiAJcmV0dXJuIHN0YXR1czsKQEAgLTQ4NCw4ICs2MDQsOCBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAoIWR3aW1fcmVmKGFyZ3ZbaV0sIHNwZWMgLSBhcmd2W2ldLCBzaGExLCAmcmVmKSkgewotCQkJc3RhdHVzIHw9IGVycm9yKCIlcyBwb2ludHMgbm93aGVyZSEiLCBhcmd2W2ldKTsKKwkJaWYgKCFkd2ltX2xvZyhhcmd2W2ldLCBzcGVjIC0gYXJndltpXSwgc2hhMSwgJnJlZikpIHsKKwkJCXN0YXR1cyB8PSBlcnJvcigibm8gcmVmbG9nIGZvciAnJXMnIiwgYXJndltpXSk7CiAJCQljb250aW51ZTsKIAkJfQogCmRpZmYgLS1naXQgYS9idWlsdGluLXJlbW90ZS5jIGIvYnVpbHRpbi1yZW1vdGUuYwppbmRleCA0MTQ5ZjNiLi4xNDVkZDg1IDEwMDY0NAotLS0gYS9idWlsdGluLXJlbW90ZS5jCisrKyBiL2J1aWx0aW4tcmVtb3RlLmMKQEAgLTE5LDYgKzE5LDggQEAKIAogc3RhdGljIGludCB2ZXJib3NlOwogCitzdGF0aWMgaW50IHNob3dfYWxsKHZvaWQpOworCiBzdGF0aWMgaW5saW5lIGludCBwb3N0Zml4Y21wKGNvbnN0IGNoYXIgKnN0cmluZywgY29uc3QgY2hhciAqcG9zdGZpeCkKIHsKIAlpbnQgbGVuMSA9IHN0cmxlbihzdHJpbmcpLCBsZW4yID0gc3RybGVuKHBvc3RmaXgpOwpAQCAtMTE2LDYgKzExOCwxMyBAQAogCQkJcmV0dXJuIDE7CiAJfQogCisJaWYgKG1pcnJvcikgeworCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCXN0cmJ1Zl9hZGRmKCZidWYsICJyZW1vdGUuJXMubWlycm9yIiwgbmFtZSk7CisJCWlmIChnaXRfY29uZmlnX3NldChidWYuYnVmLCAieWVzIikpCisJCQlyZXR1cm4gMTsKKwl9CisKIAlpZiAoZmV0Y2ggJiYgZmV0Y2hfcmVtb3RlKG5hbWUpKQogCQlyZXR1cm4gMTsKIApAQCAtMTQ0LDcgKzE1Myw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGF0aF9saXN0IGJyYW5jaF9saXN0OwogCi1zdGF0aWMgaW50IGNvbmZpZ19yZWFkX2JyYW5jaGVzKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUpCitzdGF0aWMgaW50IGNvbmZpZ19yZWFkX2JyYW5jaGVzKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQogewogCWlmICghcHJlZml4Y21wKGtleSwgImJyYW5jaC4iKSkgewogCQljaGFyICpuYW1lOwpAQCAtMTkxLDEzICsyMDAsMTIgQEAKIHsKIAlpZiAoYnJhbmNoX2xpc3QubnIpCiAJCXJldHVybjsKLQlnaXRfY29uZmlnKGNvbmZpZ19yZWFkX2JyYW5jaGVzKTsKKwlnaXRfY29uZmlnKGNvbmZpZ19yZWFkX2JyYW5jaGVzLCBOVUxMKTsKIAlzb3J0X3BhdGhfbGlzdCgmYnJhbmNoX2xpc3QpOwogfQogCiBzdHJ1Y3QgcmVmX3N0YXRlcyB7CiAJc3RydWN0IHJlbW90ZSAqcmVtb3RlOwotCXN0cnVjdCBzdHJidWYgcmVtb3RlX3ByZWZpeDsKIAlzdHJ1Y3QgcGF0aF9saXN0IG5ldywgc3RhbGUsIHRyYWNrZWQ7CiB9OwogCkBAIC0yNTMsMzYgKzI2MSw3MiBAQAogCX0KIAlmcmVlX3JlZnMoZmV0Y2hfbWFwKTsKIAotCXN0cmJ1Zl9hZGRmKCZzdGF0ZXMtPnJlbW90ZV9wcmVmaXgsCi0JCSJyZWZzL3JlbW90ZXMvJXMvIiwgc3RhdGVzLT5yZW1vdGUtPm5hbWUpOwogCWZvcl9lYWNoX3JlZihoYW5kbGVfb25lX2JyYW5jaCwgc3RhdGVzKTsKIAlzb3J0X3BhdGhfbGlzdCgmc3RhdGVzLT5zdGFsZSk7CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RydWN0IGtub3duX3JlbW90ZSB7CisJc3RydWN0IGtub3duX3JlbW90ZSAqbmV4dDsKKwlzdHJ1Y3QgcmVtb3RlICpyZW1vdGU7Cit9OworCitzdHJ1Y3Qga25vd25fcmVtb3RlcyB7CisJc3RydWN0IHJlbW90ZSAqdG9fZGVsZXRlOworCXN0cnVjdCBrbm93bl9yZW1vdGUgKmxpc3Q7Cit9OworCitzdGF0aWMgaW50IGFkZF9rbm93bl9yZW1vdGUoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBrbm93bl9yZW1vdGVzICphbGwgPSBjYl9kYXRhOworCXN0cnVjdCBrbm93bl9yZW1vdGUgKnI7CisKKwlpZiAoIXN0cmNtcChhbGwtPnRvX2RlbGV0ZS0+bmFtZSwgcmVtb3RlLT5uYW1lKSkKKwkJcmV0dXJuIDA7CisKKwlyID0geG1hbGxvYyhzaXplb2YoKnIpKTsKKwlyLT5yZW1vdGUgPSByZW1vdGU7CisJci0+bmV4dCA9IGFsbC0+bGlzdDsKKwlhbGwtPmxpc3QgPSByOworCXJldHVybiAwOworfQorCiBzdHJ1Y3QgYnJhbmNoZXNfZm9yX3JlbW90ZSB7Ci0JY29uc3QgY2hhciAqcHJlZml4OworCXN0cnVjdCByZW1vdGUgKnJlbW90ZTsKIAlzdHJ1Y3QgcGF0aF9saXN0ICpicmFuY2hlczsKKwlzdHJ1Y3Qga25vd25fcmVtb3RlcyAqa2VlcDsKIH07CiAKIHN0YXRpYyBpbnQgYWRkX2JyYW5jaF9mb3JfcmVtb3ZhbChjb25zdCBjaGFyICpyZWZuYW1lLAogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmbGFncywgdm9pZCAqY2JfZGF0YSkKIHsKIAlzdHJ1Y3QgYnJhbmNoZXNfZm9yX3JlbW90ZSAqYnJhbmNoZXMgPSBjYl9kYXRhOworCXN0cnVjdCByZWZzcGVjIHJlZnNwZWM7CisJc3RydWN0IHBhdGhfbGlzdF9pdGVtICppdGVtOworCXN0cnVjdCBrbm93bl9yZW1vdGUgKmtyOwogCi0JaWYgKCFwcmVmaXhjbXAocmVmbmFtZSwgYnJhbmNoZXMtPnByZWZpeCkpIHsKLQkJc3RydWN0IHBhdGhfbGlzdF9pdGVtICppdGVtOworCW1lbXNldCgmcmVmc3BlYywgMCwgc2l6ZW9mKHJlZnNwZWMpKTsKKwlyZWZzcGVjLmRzdCA9IChjaGFyICopcmVmbmFtZTsKKwlpZiAocmVtb3RlX2ZpbmRfdHJhY2tpbmcoYnJhbmNoZXMtPnJlbW90ZSwgJnJlZnNwZWMpKQorCQlyZXR1cm4gMDsKIAotCQkvKiBtYWtlIHN1cmUgdGhhdCBzeW1yZWZzIGFyZSBkZWxldGVkICovCi0JCWlmIChmbGFncyAmIFJFRl9JU1NZTVJFRikKLQkJCXJldHVybiB1bmxpbmsoZ2l0X3BhdGgocmVmbmFtZSkpOwotCi0JCWl0ZW0gPSBwYXRoX2xpc3RfYXBwZW5kKHJlZm5hbWUsIGJyYW5jaGVzLT5icmFuY2hlcyk7Ci0JCWl0ZW0tPnV0aWwgPSB4bWFsbG9jKDIwKTsKLQkJaGFzaGNweShpdGVtLT51dGlsLCBzaGExKTsKKwkvKiBkb24ndCBkZWxldGUgYSBicmFuY2ggaWYgYW5vdGhlciByZW1vdGUgYWxzbyB1c2VzIGl0ICovCisJZm9yIChrciA9IGJyYW5jaGVzLT5rZWVwLT5saXN0OyBrcjsga3IgPSBrci0+bmV4dCkgeworCQltZW1zZXQoJnJlZnNwZWMsIDAsIHNpemVvZihyZWZzcGVjKSk7CisJCXJlZnNwZWMuZHN0ID0gKGNoYXIgKilyZWZuYW1lOworCQlpZiAoIXJlbW90ZV9maW5kX3RyYWNraW5nKGtyLT5yZW1vdGUsICZyZWZzcGVjKSkKKwkJCXJldHVybiAwOwogCX0KIAorCS8qIG1ha2Ugc3VyZSB0aGF0IHN5bXJlZnMgYXJlIGRlbGV0ZWQgKi8KKwlpZiAoZmxhZ3MgJiBSRUZfSVNTWU1SRUYpCisJCXJldHVybiB1bmxpbmsoZ2l0X3BhdGgocmVmbmFtZSkpOworCisJaXRlbSA9IHBhdGhfbGlzdF9hcHBlbmQocmVmbmFtZSwgYnJhbmNoZXMtPmJyYW5jaGVzKTsKKwlpdGVtLT51dGlsID0geG1hbGxvYygyMCk7CisJaGFzaGNweShpdGVtLT51dGlsLCBzaGExKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0zMDcsOCArMzUxLDkgQEAKIAl9OwogCXN0cnVjdCByZW1vdGUgKnJlbW90ZTsKIAlzdHJ1Y3Qgc3RyYnVmIGJ1ZjsKKwlzdHJ1Y3Qga25vd25fcmVtb3RlcyBrbm93bl9yZW1vdGVzID0geyBOVUxMLCBOVUxMIH07CiAJc3RydWN0IHBhdGhfbGlzdCBicmFuY2hlcyA9IHsgTlVMTCwgMCwgMCwgMSB9OwotCXN0cnVjdCBicmFuY2hlc19mb3JfcmVtb3RlIGNiX2RhdGEgPSB7IE5VTEwsICZicmFuY2hlcyB9OworCXN0cnVjdCBicmFuY2hlc19mb3JfcmVtb3RlIGNiX2RhdGEgPSB7IE5VTEwsICZicmFuY2hlcywgJmtub3duX3JlbW90ZXMgfTsKIAlpbnQgaTsKIAogCWlmIChhcmdjICE9IDIpCkBAIC0zMTgsNiArMzYzLDkgQEAKIAlpZiAoIXJlbW90ZSkKIAkJZGllKCJObyBzdWNoIHJlbW90ZTogJXMiLCBhcmd2WzFdKTsKIAorCWtub3duX3JlbW90ZXMudG9fZGVsZXRlID0gcmVtb3RlOworCWZvcl9lYWNoX3JlbW90ZShhZGRfa25vd25fcmVtb3RlLCAma25vd25fcmVtb3Rlcyk7CisKIAlzdHJidWZfaW5pdCgmYnVmLCAwKTsKIAlzdHJidWZfYWRkZigmYnVmLCAicmVtb3RlLiVzIiwgcmVtb3RlLT5uYW1lKTsKIAlpZiAoZ2l0X2NvbmZpZ19yZW5hbWVfc2VjdGlvbihidWYuYnVmLCBOVUxMKSA8IDEpCkBAIC0zNDYsOSArMzk0LDcgQEAKIAkgKiB0aGUgYnJhbmNoZXMgb25lIGJ5IG9uZSwgc2luY2UgZm9yX2VhY2hfcmVmKCkgcmVsaWVzIG9uIGNhY2hlZAogCSAqIHJlZnMsIHdoaWNoIGFyZSBpbnZhbGlkYXRlZCB3aGVuIGRlbGV0aW5nIGEgYnJhbmNoLgogCSAqLwotCXN0cmJ1Zl9yZXNldCgmYnVmKTsKLQlzdHJidWZfYWRkZigmYnVmLCAicmVmcy9yZW1vdGVzLyVzLyIsIHJlbW90ZS0+bmFtZSk7Ci0JY2JfZGF0YS5wcmVmaXggPSBidWYuYnVmOworCWNiX2RhdGEucmVtb3RlID0gcmVtb3RlOwogCWkgPSBmb3JfZWFjaF9yZWYoYWRkX2JyYW5jaF9mb3JfcmVtb3ZhbCwgJmNiX2RhdGEpOwogCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOwogCkBAIC0zNzMsMTIgKzQxOSw1MyBAQAogCXByaW50ZigiXG4iKTsKIH0KIAotc3RhdGljIGludCBzaG93X29yX3BydW5lKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgaW50IHBydW5lKQorc3RhdGljIGludCBnZXRfcmVtb3RlX3JlZl9zdGF0ZXMoY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgc3RydWN0IHJlZl9zdGF0ZXMgKnN0YXRlcywKKwkJCQkgaW50IHF1ZXJ5KQogewotCWludCBkcnlfcnVuID0gMCwgcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQ7CisJY29uc3Qgc3RydWN0IHJlZiAqcmVmOworCisJc3RhdGVzLT5yZW1vdGUgPSByZW1vdGVfZ2V0KG5hbWUpOworCWlmICghc3RhdGVzLT5yZW1vdGUpCisJCXJldHVybiBlcnJvcigiTm8gc3VjaCByZW1vdGU6ICVzIiwgbmFtZSk7CisKKwlyZWFkX2JyYW5jaGVzKCk7CisKKwlpZiAocXVlcnkpIHsKKwkJdHJhbnNwb3J0ID0gdHJhbnNwb3J0X2dldChOVUxMLCBzdGF0ZXMtPnJlbW90ZS0+dXJsX25yID4gMCA/CisJCQlzdGF0ZXMtPnJlbW90ZS0+dXJsWzBdIDogTlVMTCk7CisJCXJlZiA9IHRyYW5zcG9ydF9nZXRfcmVtb3RlX3JlZnModHJhbnNwb3J0KTsKKwkJdHJhbnNwb3J0X2Rpc2Nvbm5lY3QodHJhbnNwb3J0KTsKKworCQlnZXRfcmVmX3N0YXRlcyhyZWYsIHN0YXRlcyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXBwZW5kX3JlZl90b190cmFja2VkX2xpc3QoY29uc3QgY2hhciAqcmVmbmFtZSwKKwljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHJlZl9zdGF0ZXMgKnN0YXRlcyA9IGNiX2RhdGE7CisJc3RydWN0IHJlZnNwZWMgcmVmc3BlYzsKKworCW1lbXNldCgmcmVmc3BlYywgMCwgc2l6ZW9mKHJlZnNwZWMpKTsKKwlyZWZzcGVjLmRzdCA9IChjaGFyICopcmVmbmFtZTsKKwlpZiAoIXJlbW90ZV9maW5kX3RyYWNraW5nKHN0YXRlcy0+cmVtb3RlLCAmcmVmc3BlYykpIHsKKwkJcGF0aF9saXN0X2FwcGVuZChza2lwX3ByZWZpeChyZWZzcGVjLnNyYywgInJlZnMvaGVhZHMvIiksCisJCQkmc3RhdGVzLT50cmFja2VkKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaG93KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgbm9fcXVlcnkgPSAwLCByZXN1bHQgPSAwOwogCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0gewogCQlPUFRfR1JPVVAoInNob3cgc3BlY2lmaWMgb3B0aW9ucyIpLAotCQlPUFRfX0RSWV9SVU4oJmRyeV9ydW4pLAorCQlPUFRfQk9PTEVBTignbicsIE5VTEwsICZub19xdWVyeSwgImRvIG5vdCBxdWVyeSByZW1vdGVzIiksCiAJCU9QVF9FTkQoKQogCX07CiAJc3RydWN0IHJlZl9zdGF0ZXMgc3RhdGVzOwpAQCAtMzg2LDUzICs0NzMsMTQgQEAKIAlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCBidWlsdGluX3JlbW90ZV91c2FnZSwgMCk7CiAKIAlpZiAoYXJnYyA8IDEpCi0JCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX3JlbW90ZV91c2FnZSwgb3B0aW9ucyk7CisJCXJldHVybiBzaG93X2FsbCgpOwogCiAJbWVtc2V0KCZzdGF0ZXMsIDAsIHNpemVvZihzdGF0ZXMpKTsKIAlmb3IgKDsgYXJnYzsgYXJnYy0tLCBhcmd2KyspIHsKLQkJc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0OwotCQljb25zdCBzdHJ1Y3QgcmVmICpyZWY7CiAJCXN0cnVjdCBzdHJidWYgYnVmOwotCQlpbnQgaSwgZ290X3N0YXRlczsKKwkJaW50IGk7CiAKLQkJc3RhdGVzLnJlbW90ZSA9IHJlbW90ZV9nZXQoKmFyZ3YpOwotCQlpZiAoIXN0YXRlcy5yZW1vdGUpCi0JCQlyZXR1cm4gZXJyb3IoIk5vIHN1Y2ggcmVtb3RlOiAlcyIsICphcmd2KTsKLQkJdHJhbnNwb3J0ID0gdHJhbnNwb3J0X2dldChOVUxMLCBzdGF0ZXMucmVtb3RlLT51cmxfbnIgPiAwID8KLQkJCXN0YXRlcy5yZW1vdGUtPnVybFswXSA6IE5VTEwpOwotCQlyZWYgPSB0cmFuc3BvcnRfZ2V0X3JlbW90ZV9yZWZzKHRyYW5zcG9ydCk7Ci0JCXRyYW5zcG9ydF9kaXNjb25uZWN0KHRyYW5zcG9ydCk7Ci0KLQkJcmVhZF9icmFuY2hlcygpOwotCQlnb3Rfc3RhdGVzID0gZ2V0X3JlZl9zdGF0ZXMocmVmLCAmc3RhdGVzKTsKLQkJaWYgKGdvdF9zdGF0ZXMpCi0JCQlyZXN1bHQgPSBlcnJvcigiRXJyb3IgZ2V0dGluZyBsb2NhbCBpbmZvIGZvciAnJXMnIiwKLQkJCQkJc3RhdGVzLnJlbW90ZS0+bmFtZSk7Ci0KLQkJaWYgKHBydW5lKSB7Ci0JCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZjsKLQkJCWludCBwcmVmaXhfbGVuOwotCi0JCQlzdHJidWZfaW5pdCgmYnVmLCAwKTsKLQkJCWlmIChzdGF0ZXMucmVtb3RlLT5mZXRjaF9yZWZzcGVjX25yID09IDEgJiYKLQkJCQkJc3RhdGVzLnJlbW90ZS0+ZmV0Y2gtPnBhdHRlcm4gJiYKLQkJCQkJIXN0cmNtcChzdGF0ZXMucmVtb3RlLT5mZXRjaC0+c3JjLAotCQkJCQkJc3RhdGVzLnJlbW90ZS0+ZmV0Y2gtPmRzdCkpCi0JCQkJLyogaGFuZGxlIC0tbWlycm9yIHJlbW90ZSAqLwotCQkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgInJlZnMvaGVhZHMvIik7Ci0JCQllbHNlCi0JCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgInJlZnMvcmVtb3Rlcy8lcy8iLCAqYXJndik7Ci0JCQlwcmVmaXhfbGVuID0gYnVmLmxlbjsKLQotCQkJZm9yIChpID0gMDsgaSA8IHN0YXRlcy5zdGFsZS5ucjsgaSsrKSB7Ci0JCQkJc3RyYnVmX3NldGxlbigmYnVmLCBwcmVmaXhfbGVuKTsKLQkJCQlzdHJidWZfYWRkc3RyKCZidWYsIHN0YXRlcy5zdGFsZS5pdGVtc1tpXS5wYXRoKTsKLQkJCQlyZXN1bHQgfD0gZGVsZXRlX3JlZihidWYuYnVmLCBOVUxMKTsKLQkJCX0KLQotCQkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Ci0JCQlnb3RvIGNsZWFudXBfc3RhdGVzOwotCQl9CisJCWdldF9yZW1vdGVfcmVmX3N0YXRlcygqYXJndiwgJnN0YXRlcywgIW5vX3F1ZXJ5KTsKIAogCQlwcmludGYoIiogcmVtb3RlICVzXG4gIFVSTDogJXNcbiIsICphcmd2LAogCQkJc3RhdGVzLnJlbW90ZS0+dXJsX25yID4gMCA/CkBAIC00NTQsMTcgKzUwMiwxOSBAQAogCQkJcHJpbnRmKCJcbiIpOwogCQl9CiAKLQkJaWYgKGdvdF9zdGF0ZXMpCi0JCQljb250aW51ZTsKLQkJc3RyYnVmX2luaXQoJmJ1ZiwgMCk7Ci0JCXN0cmJ1Zl9hZGRmKCZidWYsICIgIE5ldyByZW1vdGUgYnJhbmNoJSVzIChuZXh0IGZldGNoIHdpbGwgIgotCQkJInN0b3JlIGluIHJlbW90ZXMvJXMpIiwgc3RhdGVzLnJlbW90ZS0+bmFtZSk7Ci0JCXNob3dfbGlzdChidWYuYnVmLCAmc3RhdGVzLm5ldyk7Ci0JCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOwotCQlzaG93X2xpc3QoIiAgU3RhbGUgdHJhY2tpbmcgYnJhbmNoJXMgKHVzZSAnZ2l0IHJlbW90ZSBwcnVuZScpIiwKLQkJCQkmc3RhdGVzLnN0YWxlKTsKLQkJc2hvd19saXN0KCIgIFRyYWNrZWQgcmVtb3RlIGJyYW5jaCVzIiwKLQkJCQkmc3RhdGVzLnRyYWNrZWQpOworCQlpZiAoIW5vX3F1ZXJ5KSB7CisJCQlzdHJidWZfaW5pdCgmYnVmLCAwKTsKKwkJCXN0cmJ1Zl9hZGRmKCZidWYsICIgIE5ldyByZW1vdGUgYnJhbmNoJSVzIChuZXh0IGZldGNoICIKKwkJCQkid2lsbCBzdG9yZSBpbiByZW1vdGVzLyVzKSIsIHN0YXRlcy5yZW1vdGUtPm5hbWUpOworCQkJc2hvd19saXN0KGJ1Zi5idWYsICZzdGF0ZXMubmV3KTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQkJc2hvd19saXN0KCIgIFN0YWxlIHRyYWNraW5nIGJyYW5jaCVzICh1c2UgJ2dpdCByZW1vdGUgIgorCQkJCSJwcnVuZScpIiwgJnN0YXRlcy5zdGFsZSk7CisJCX0KKworCQlpZiAobm9fcXVlcnkpCisJCQlmb3JfZWFjaF9yZWYoYXBwZW5kX3JlZl90b190cmFja2VkX2xpc3QsICZzdGF0ZXMpOworCQlzaG93X2xpc3QoIiAgVHJhY2tlZCByZW1vdGUgYnJhbmNoJXMiLCAmc3RhdGVzLnRyYWNrZWQpOwogCiAJCWlmIChzdGF0ZXMucmVtb3RlLT5wdXNoX3JlZnNwZWNfbnIpIHsKIAkJCXByaW50ZigiICBMb2NhbCBicmFuY2glcyBwdXNoZWQgd2l0aCAnZ2l0IHB1c2gnXG4gICAiLApAQCAtNDc5LDcgKzUyOSw1NSBAQAogCQkJfQogCQkJcHJpbnRmKCJcbiIpOwogCQl9Ci1jbGVhbnVwX3N0YXRlczoKKworCQkvKiBORUVEU1dPUks6IGZyZWUgcmVtb3RlICovCisJCXBhdGhfbGlzdF9jbGVhcigmc3RhdGVzLm5ldywgMCk7CisJCXBhdGhfbGlzdF9jbGVhcigmc3RhdGVzLnN0YWxlLCAwKTsKKwkJcGF0aF9saXN0X2NsZWFyKCZzdGF0ZXMudHJhY2tlZCwgMCk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBwcnVuZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaW50IGRyeV9ydW4gPSAwLCByZXN1bHQgPSAwOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfR1JPVVAoInBydW5lIHNwZWNpZmljIG9wdGlvbnMiKSwKKwkJT1BUX19EUllfUlVOKCZkcnlfcnVuKSwKKwkJT1BUX0VORCgpCisJfTsKKwlzdHJ1Y3QgcmVmX3N0YXRlcyBzdGF0ZXM7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCBidWlsdGluX3JlbW90ZV91c2FnZSwgMCk7CisKKwlpZiAoYXJnYyA8IDEpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX3JlbW90ZV91c2FnZSwgb3B0aW9ucyk7CisKKwltZW1zZXQoJnN0YXRlcywgMCwgc2l6ZW9mKHN0YXRlcykpOworCWZvciAoOyBhcmdjOyBhcmdjLS0sIGFyZ3YrKykgeworCQlpbnQgaTsKKworCQlnZXRfcmVtb3RlX3JlZl9zdGF0ZXMoKmFyZ3YsICZzdGF0ZXMsIDEpOworCisJCWlmIChzdGF0ZXMuc3RhbGUubnIpIHsKKwkJCXByaW50ZigiUHJ1bmluZyAlc1xuIiwgKmFyZ3YpOworCQkJcHJpbnRmKCJVUkw6ICVzXG4iLAorCQkJICAgICAgIHN0YXRlcy5yZW1vdGUtPnVybF9ucgorCQkJICAgICAgID8gc3RhdGVzLnJlbW90ZS0+dXJsWzBdCisJCQkgICAgICAgOiAiKG5vIFVSTCkiKTsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBzdGF0ZXMuc3RhbGUubnI7IGkrKykgeworCQkJY29uc3QgY2hhciAqcmVmbmFtZSA9IHN0YXRlcy5zdGFsZS5pdGVtc1tpXS51dGlsOworCisJCQlpZiAoIWRyeV9ydW4pCisJCQkJcmVzdWx0IHw9IGRlbGV0ZV9yZWYocmVmbmFtZSwgTlVMTCk7CisKKwkJCXByaW50ZigiICogWyVzXSAlc1xuIiwgZHJ5X3J1biA/ICJ3b3VsZCBwcnVuZSIgOiAicHJ1bmVkIiwKKwkJCSAgICAgICBza2lwX3ByZWZpeChyZWZuYW1lLCAicmVmcy9yZW1vdGVzLyIpKTsKKwkJfQorCiAJCS8qIE5FRURTV09SSzogZnJlZSByZW1vdGUgKi8KIAkJcGF0aF9saXN0X2NsZWFyKCZzdGF0ZXMubmV3LCAwKTsKIAkJcGF0aF9saXN0X2NsZWFyKCZzdGF0ZXMuc3RhbGUsIDApOwpAQCAtNTAyLDcgKzYwMCw3IEBACiAJc3RydWN0IHBhdGhfbGlzdCAqbGlzdDsKIH0gcmVtb3RlX2dyb3VwOwogCi1zdGF0aWMgaW50IGdldF9yZW1vdGVfZ3JvdXAoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSkKK3N0YXRpYyBpbnQgZ2V0X3JlbW90ZV9ncm91cChjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKIHsKIAlpZiAoIXByZWZpeGNtcChrZXksICJyZW1vdGVzLiIpICYmCiAJCQkhc3RyY21wKGtleSArIDgsIHJlbW90ZV9ncm91cC5uYW1lKSkgewpAQCAtNTM0LDcgKzYzMiw3IEBACiAJcmVtb3RlX2dyb3VwLmxpc3QgPSAmbGlzdDsKIAlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CiAJCXJlbW90ZV9ncm91cC5uYW1lID0gYXJndltpXTsKLQkJcmVzdWx0ID0gZ2l0X2NvbmZpZyhnZXRfcmVtb3RlX2dyb3VwKTsKKwkJcmVzdWx0ID0gZ2l0X2NvbmZpZyhnZXRfcmVtb3RlX2dyb3VwLCBOVUxMKTsKIAl9CiAKIAlpZiAoIXJlc3VsdCAmJiAhbGlzdC5uciAgJiYgYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgImRlZmF1bHQiKSkKQEAgLTYwMCw5ICs2OTgsOSBAQAogCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgInJtIikpCiAJCXJlc3VsdCA9IHJtKGFyZ2MsIGFyZ3YpOwogCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgInNob3ciKSkKLQkJcmVzdWx0ID0gc2hvd19vcl9wcnVuZShhcmdjLCBhcmd2LCAwKTsKKwkJcmVzdWx0ID0gc2hvdyhhcmdjLCBhcmd2KTsKIAllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJwcnVuZSIpKQotCQlyZXN1bHQgPSBzaG93X29yX3BydW5lKGFyZ2MsIGFyZ3YsIDEpOworCQlyZXN1bHQgPSBwcnVuZShhcmdjLCBhcmd2KTsKIAllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJ1cGRhdGUiKSkKIAkJcmVzdWx0ID0gdXBkYXRlKGFyZ2MsIGFyZ3YpOwogCWVsc2UgewpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1yZXJlcmUuYyBiL2J1aWx0aW4tcmVyZXJlLmMKaW5kZXggYzYwN2FhZC4uODUyMjJkOSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1yZXJlcmUuYworKysgYi9idWlsdGluLXJlcmVyZS5jCkBAIC00Myw3ICs0Myw3IEBACiAJCQk7IC8qIGRvIG5vdGhpbmcgKi8KIAkJaWYgKGkgPT0gc2l6ZW9mKGJ1ZikpCiAJCQlkaWUoImZpbGVuYW1lIHRvbyBsb25nIik7Ci0JCXBhdGhfbGlzdF9pbnNlcnQoYnVmLCByciktPnV0aWwgPSB4c3RyZHVwKG5hbWUpOworCQlwYXRoX2xpc3RfaW5zZXJ0KGJ1ZiwgcnIpLT51dGlsID0gbmFtZTsKIAl9CiAJZmNsb3NlKGluKTsKIH0KQEAgLTMzOSw3ICszMzksNyBAQAogCXJldHVybiB3cml0ZV9ycihyciwgZmQpOwogfQogCi1zdGF0aWMgaW50IGdpdF9yZXJlcmVfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCitzdGF0aWMgaW50IGdpdF9yZXJlcmVfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQogewogCWlmICghc3RyY21wKHZhciwgImdjLnJlcmVyZXJlc29sdmVkIikpCiAJCWN1dG9mZl9yZXNvbHZlID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CkBAIC0zNDgsNyArMzQ4LDcgQEAKIAllbHNlIGlmICghc3RyY21wKHZhciwgInJlcmVyZS5lbmFibGVkIikpCiAJCXJlcmVyZV9lbmFibGVkID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOwogCWVsc2UKLQkJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM3Niw3ICszNzYsNyBAQAogewogCWludCBmZDsKIAotCWdpdF9jb25maWcoZ2l0X3JlcmVyZV9jb25maWcpOworCWdpdF9jb25maWcoZ2l0X3JlcmVyZV9jb25maWcsIE5VTEwpOwogCWlmICghaXNfcmVyZXJlX2VuYWJsZWQoKSkKIAkJcmV0dXJuIC0xOwogCmRpZmYgLS1naXQgYS9idWlsdGluLXJlc2V0LmMgYi9idWlsdGluLXJlc2V0LmMKaW5kZXggNzk0MjRiYi4uYTAzMjE2OTQgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tcmVzZXQuYworKysgYi9idWlsdGluLXJlc2V0LmMKQEAgLTQ5LDEzICs0OSwxNCBAQAogCXJldHVybiAhYWNjZXNzKGdpdF9wYXRoKCJNRVJHRV9IRUFEIiksIEZfT0spOwogfQogCi1zdGF0aWMgaW50IHJlc2V0X2luZGV4X2ZpbGUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGlzX2hhcmRfcmVzZXQpCitzdGF0aWMgaW50IHJlc2V0X2luZGV4X2ZpbGUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGlzX2hhcmRfcmVzZXQsIGludCBxdWlldCkKIHsKIAlpbnQgaSA9IDA7CiAJY29uc3QgY2hhciAqYXJnc1s2XTsKIAogCWFyZ3NbaSsrXSA9ICJyZWFkLXRyZWUiOwotCWFyZ3NbaSsrXSA9ICItdiI7CisJaWYgKCFxdWlldCkKKwkJYXJnc1tpKytdID0gIi12IjsKIAlhcmdzW2krK10gPSAiLS1yZXNldCI7CiAJaWYgKGlzX2hhcmRfcmVzZXQpCiAJCWFyZ3NbaSsrXSA9ICItdSI7CkBAIC0xODIsMTkgKzE4Myw1MSBAQAogCQlPUFRfU0VUX0lOVCgwLCAiaGFyZCIsICZyZXNldF90eXBlLAogCQkJCSJyZXNldCBIRUFELCBpbmRleCBhbmQgd29ya2luZyB0cmVlIiwgSEFSRCksCiAJCU9QVF9CT09MRUFOKCdxJywgTlVMTCwgJnF1aWV0LAotCQkJCSJkaXNhYmxlIHNob3dpbmcgbmV3IEhFQUQgaW4gaGFyZCByZXNldCIpLAorCQkJCSJkaXNhYmxlIHNob3dpbmcgbmV3IEhFQUQgaW4gaGFyZCByZXNldCBhbmQgcHJvZ3Jlc3MgbWVzc2FnZSIpLAogCQlPUFRfRU5EKCkKIAl9OwogCi0JZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcpOworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKIAogCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGdpdF9yZXNldF91c2FnZSwKIAkJCQkJCVBBUlNFX09QVF9LRUVQX0RBU0hEQVNIKTsKIAlyZWZsb2dfYWN0aW9uID0gYXJnc190b19zdHIoYXJndik7CiAJc2V0ZW52KCJHSVRfUkVGTE9HX0FDVElPTiIsIHJlZmxvZ19hY3Rpb24sIDApOwogCi0JaWYgKGkgPCBhcmdjICYmIHN0cmNtcChhcmd2W2ldLCAiLS0iKSkKLQkJcmV2ID0gYXJndltpKytdOworCS8qCisJICogUG9zc2libGUgYXJndW1lbnRzIGFyZToKKwkgKgorCSAqIGdpdCByZXNldCBbLW9wdHNdIDxyZXY+IDxwYXRocz4uLi4KKwkgKiBnaXQgcmVzZXQgWy1vcHRzXSA8cmV2PiAtLSA8cGF0aHM+Li4uCisJICogZ2l0IHJlc2V0IFstb3B0c10gLS0gPHBhdGhzPi4uLgorCSAqIGdpdCByZXNldCBbLW9wdHNdIDxwYXRocz4uLi4KKwkgKgorCSAqIEF0IHRoaXMgcG9pbnQsIGFyZ3ZbaV0gcG9pbnRzIGltbWVkaWF0ZWx5IGFmdGVyIFstb3B0c10uCisJICovCisKKwlpZiAoaSA8IGFyZ2MpIHsKKwkJaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tIikpIHsKKwkJCWkrKzsgLyogcmVzZXQgdG8gSEVBRCwgcG9zc2libHkgd2l0aCBwYXRocyAqLworCQl9IGVsc2UgaWYgKGkgKyAxIDwgYXJnYyAmJiAhc3RyY21wKGFyZ3ZbaSsxXSwgIi0tIikpIHsKKwkJCXJldiA9IGFyZ3ZbaV07CisJCQlpICs9IDI7CisJCX0KKwkJLyoKKwkJICogT3RoZXJ3aXNlLCBhcmd2W2ldIGNvdWxkIGJlIGVpdGhlciA8cmV2PiBvciA8cGF0aHM+IGFuZAorCQkgKiBoYXMgdG8gYmUgdW5hbWJpZ291cy4KKwkJICovCisJCWVsc2UgaWYgKCFnZXRfc2hhMShhcmd2W2ldLCBzaGExKSkgeworCQkJLyoKKwkJCSAqIE9rLCBhcmd2W2ldIGxvb2tzIGxpa2UgYSByZXY7IGl0IHNob3VsZCBub3QKKwkJCSAqIGJlIGEgZmlsZW5hbWUuCisJCQkgKi8KKwkJCXZlcmlmeV9ub25fZmlsZW5hbWUocHJlZml4LCBhcmd2W2ldKTsKKwkJCXJldiA9IGFyZ3ZbaSsrXTsKKwkJfSBlbHNlIHsKKwkJCS8qIE90aGVyd2lzZSB3ZSB0cmVhdCB0aGlzIGFzIGEgZmlsZW5hbWUgKi8KKwkJCXZlcmlmeV9maWxlbmFtZShwcmVmaXgsIGFyZ3ZbaV0pOworCQl9CisJfQogCiAJaWYgKGdldF9zaGExKHJldiwgc2hhMSkpCiAJCWRpZSgiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iLCByZXYpOwpAQCAtMjA0LDkgKzIzNyw2IEBACiAJCWRpZSgiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnLiIsIHJldik7CiAJaGFzaGNweShzaGExLCBjb21taXQtPm9iamVjdC5zaGExKTsKIAotCWlmIChpIDwgYXJnYyAmJiAhc3RyY21wKGFyZ3ZbaV0sICItLSIpKQotCQlpKys7Ci0KIAkvKiBnaXQgcmVzZXQgdHJlZSBbLS1dIHBhdGhzLi4uIGNhbiBiZSB1c2VkIHRvCiAJICogbG9hZCBjaG9zZW4gcGF0aHMgZnJvbSB0aGUgdHJlZSBpbnRvIHRoZSBpbmRleCB3aXRob3V0CiAJICogYWZmZWN0aW5nIHRoZSB3b3JraW5nIHRyZWUgbm9yIEhFQUQuICovCkBAIC0yMzEsNyArMjYxLDcgQEAKIAkJaWYgKGlzX21lcmdlKCkgfHwgcmVhZF9jYWNoZSgpIDwgMCB8fCB1bm1lcmdlZF9jYWNoZSgpKQogCQkJZGllKCJDYW5ub3QgZG8gYSBzb2Z0IHJlc2V0IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZS4iKTsKIAl9Ci0JZWxzZSBpZiAocmVzZXRfaW5kZXhfZmlsZShzaGExLCAocmVzZXRfdHlwZSA9PSBIQVJEKSkpCisJZWxzZSBpZiAocmVzZXRfaW5kZXhfZmlsZShzaGExLCAocmVzZXRfdHlwZSA9PSBIQVJEKSwgcXVpZXQpKQogCQlkaWUoIkNvdWxkIG5vdCByZXNldCBpbmRleCBmaWxlIHRvIHJldmlzaW9uICclcycuIiwgcmV2KTsKIAogCS8qIEFueSByZXNldHMgdXBkYXRlIEhFQUQgdG8gdGhlIGhlYWQgYmVpbmcgc3dpdGNoZWQgdG8sCmRpZmYgLS1naXQgYS9idWlsdGluLXJldi1saXN0LmMgYi9idWlsdGluLXJldi1saXN0LmMKaW5kZXggZWRjMGJkMy4uMzllYzYxYyAxMDA2NDQKLS0tIGEvYnVpbHRpbi1yZXYtbGlzdC5jCisrKyBiL2J1aWx0aW4tcmV2LWxpc3QuYwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy5oIgogI2luY2x1ZGUgImJ1aWx0aW4uaCIKICNpbmNsdWRlICJsb2ctdHJlZS5oIgorI2luY2x1ZGUgImdyYXBoLmgiCiAKIC8qIGJpdHMgIzAtMTUgaW4gcmV2aXNpb24uaCAqLwogCkBAIC01OCwyNiArNTksMzEgQEAKIHN0YXRpYyB2b2lkIGZpbmlzaF9jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0KTsKIHN0YXRpYyB2b2lkIHNob3dfY29tbWl0KHN0cnVjdCBjb21taXQgKmNvbW1pdCkKIHsKKwlncmFwaF9zaG93X2NvbW1pdChyZXZzLmdyYXBoKTsKKwogCWlmIChzaG93X3RpbWVzdGFtcCkKIAkJcHJpbnRmKCIlbHUgIiwgY29tbWl0LT5kYXRlKTsKIAlpZiAoaGVhZGVyX3ByZWZpeCkKIAkJZnB1dHMoaGVhZGVyX3ByZWZpeCwgc3Rkb3V0KTsKLQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBCT1VOREFSWSkKLQkJcHV0Y2hhcignLScpOwotCWVsc2UgaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykKLQkJcHV0Y2hhcignXicpOwotCWVsc2UgaWYgKHJldnMubGVmdF9yaWdodCkgewotCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBTWU1NRVRSSUNfTEVGVCkKLQkJCXB1dGNoYXIoJzwnKTsKLQkJZWxzZQotCQkJcHV0Y2hhcignPicpOworCisJaWYgKCFyZXZzLmdyYXBoKSB7CisJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIEJPVU5EQVJZKQorCQkJcHV0Y2hhcignLScpOworCQllbHNlIGlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCQlwdXRjaGFyKCdeJyk7CisJCWVsc2UgaWYgKHJldnMubGVmdF9yaWdodCkgeworCQkJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgU1lNTUVUUklDX0xFRlQpCisJCQkJcHV0Y2hhcignPCcpOworCQkJZWxzZQorCQkJCXB1dGNoYXIoJz4nKTsKKwkJfQogCX0KIAlpZiAocmV2cy5hYmJyZXZfY29tbWl0ICYmIHJldnMuYWJicmV2KQogCQlmcHV0cyhmaW5kX3VuaXF1ZV9hYmJyZXYoY29tbWl0LT5vYmplY3Quc2hhMSwgcmV2cy5hYmJyZXYpLAogCQkgICAgICBzdGRvdXQpOwogCWVsc2UKIAkJZnB1dHMoc2hhMV90b19oZXgoY29tbWl0LT5vYmplY3Quc2hhMSksIHN0ZG91dCk7Ci0JaWYgKHJldnMucGFyZW50cykgeworCWlmIChyZXZzLnByaW50X3BhcmVudHMpIHsKIAkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzOwogCQl3aGlsZSAocGFyZW50cykgewogCQkJcHJpbnRmKCIgJXMiLCBzaGExX3RvX2hleChwYXJlbnRzLT5pdGVtLT5vYmplY3Quc2hhMSkpOwpAQCAtOTYsOSArMTAyLDQ4IEBACiAJCXByZXR0eV9wcmludF9jb21taXQocmV2cy5jb21taXRfZm9ybWF0LCBjb21taXQsCiAJCQkJICAgICZidWYsIHJldnMuYWJicmV2LCBOVUxMLCBOVUxMLAogCQkJCSAgICByZXZzLmRhdGVfbW9kZSwgMCk7Ci0JCWlmIChidWYubGVuKQotCQkJcHJpbnRmKCIlcyVjIiwgYnVmLmJ1ZiwgaGRyX3Rlcm1pbmF0aW9uKTsKKwkJaWYgKHJldnMuZ3JhcGgpIHsKKwkJCWlmIChidWYubGVuKSB7CisJCQkJaWYgKHJldnMuY29tbWl0X2Zvcm1hdCAhPSBDTUlUX0ZNVF9PTkVMSU5FKQorCQkJCQlncmFwaF9zaG93X29uZWxpbmUocmV2cy5ncmFwaCk7CisKKwkJCQlncmFwaF9zaG93X2NvbW1pdF9tc2cocmV2cy5ncmFwaCwgJmJ1Zik7CisKKwkJCQkvKgorCQkJCSAqIEFkZCBhIG5ld2xpbmUgYWZ0ZXIgdGhlIGNvbW1pdCBtZXNzYWdlLgorCQkJCSAqCisJCQkJICogVXN1YWxseSwgdGhpcyBuZXdsaW5lIHByb2R1Y2VzIGEgYmxhbmsKKwkJCQkgKiBwYWRkaW5nIGxpbmUgYmV0d2VlbiBlbnRyaWVzLCBpbiB3aGljaCBjYXNlCisJCQkJICogd2UgbmVlZCB0byBhZGQgZ3JhcGggcGFkZGluZyBvbiB0aGlzIGxpbmUuCisJCQkJICoKKwkJCQkgKiBIb3dldmVyLCB0aGUgY29tbWl0IG1lc3NhZ2UgbWF5IG5vdCBlbmQgaW4gYQorCQkJCSAqIG5ld2xpbmUuICBJbiB0aGlzIGNhc2UgdGhlIG5ld2xpbmUgc2ltcGx5CisJCQkJICogZW5kcyB0aGUgbGFzdCBsaW5lIG9mIHRoZSBjb21taXQgbWVzc2FnZSwKKwkJCQkgKiBhbmQgd2UgZG9uJ3QgbmVlZCBhbnkgZ3JhcGggb3V0cHV0LiAgKFRoaXMKKwkJCQkgKiBhbHdheXMgaGFwcGVucyB3aXRoIENNSVRfRk1UX09ORUxJTkUsIGFuZCBpdAorCQkJCSAqIGhhcHBlbnMgd2l0aCBDTUlUX0ZNVF9VU0VSRk9STUFUIHdoZW4gdGhlCisJCQkJICogZm9ybWF0IGRvZXNuJ3QgZXhwbGljaXRseSBlbmQgaW4gYSBuZXdsaW5lLikKKwkJCQkgKi8KKwkJCQlpZiAoYnVmLmxlbiAmJiBidWYuYnVmW2J1Zi5sZW4gLSAxXSA9PSAnXG4nKQorCQkJCQlncmFwaF9zaG93X3BhZGRpbmcocmV2cy5ncmFwaCk7CisJCQkJcHV0Y2hhcignXG4nKTsKKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBJZiB0aGUgbWVzc2FnZSBidWZmZXIgaXMgZW1wdHksIGp1c3Qgc2hvdworCQkJCSAqIHRoZSByZXN0IG9mIHRoZSBncmFwaCBvdXRwdXQgZm9yIHRoaXMKKwkJCQkgKiBjb21taXQuCisJCQkJICovCisJCQkJaWYgKGdyYXBoX3Nob3dfcmVtYWluZGVyKHJldnMuZ3JhcGgpKQorCQkJCQlwdXRjaGFyKCdcbicpOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGJ1Zi5sZW4pCisJCQkJcHJpbnRmKCIlcyVjIiwgYnVmLmJ1ZiwgaGRyX3Rlcm1pbmF0aW9uKTsKKwkJfQogCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwl9IGVsc2UgeworCQlpZiAoZ3JhcGhfc2hvd19yZW1haW5kZXIocmV2cy5ncmFwaCkpCisJCQlwdXRjaGFyKCdcbicpOwogCX0KIAltYXliZV9mbHVzaF9vcl9kaWUoc3Rkb3V0LCAic3Rkb3V0Iik7CiAJZmluaXNoX2NvbW1pdChjb21taXQpOwpAQCAtNTQ2LDEyICs1OTEsMTMgQEAKIAlpbnQgYmlzZWN0X2ZpbmRfYWxsID0gMDsKIAlpbnQgcXVpZXQgPSAwOwogCi0JZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcpOworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKIAlpbml0X3JldmlzaW9ucygmcmV2cywgcHJlZml4KTsKIAlyZXZzLmFiYnJldiA9IDA7CiAJcmV2cy5jb21taXRfZm9ybWF0ID0gQ01JVF9GTVRfVU5TUEVDSUZJRUQ7CiAJYXJnYyA9IHNldHVwX3JldmlzaW9ucyhhcmdjLCBhcmd2LCAmcmV2cywgTlVMTCk7CiAKKwlxdWlldCA9IERJRkZfT1BUX1RTVCgmcmV2cy5kaWZmb3B0LCBRVUlFVCk7CiAJZm9yIChpID0gMSA7IGkgPCBhcmdjOyBpKyspIHsKIAkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKIApAQCAtNTgzLDEwICs2MjksNiBAQAogCQkJcmVhZF9yZXZpc2lvbnNfZnJvbV9zdGRpbigmcmV2cyk7CiAJCQljb250aW51ZTsKIAkJfQotCQlpZiAoIXN0cmNtcChhcmcsICItLXF1aWV0IikpIHsKLQkJCXF1aWV0ID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9CiAJCXVzYWdlKHJldl9saXN0X3VzYWdlKTsKIAogCX0KZGlmZiAtLWdpdCBhL2J1aWx0aW4tcmV2LXBhcnNlLmMgYi9idWlsdGluLXJldi1wYXJzZS5jCmluZGV4IDAwYjYwNzguLmE3ODYwZWQgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tcmV2LXBhcnNlLmMKKysrIGIvYnVpbHRpbi1yZXYtcGFyc2UuYwpAQCAtMjgsOCArMjgsNiBAQAogc3RhdGljIGludCBhYmJyZXY7CiBzdGF0aWMgaW50IG91dHB1dF9zcTsKIAotc3RhdGljIGludCByZXZzX2NvdW50OwotCiAvKgogICogU29tZSBhcmd1bWVudHMgYXJlIHJlbGV2YW50ICJyZXZpc2lvbiIgYXJndW1lbnRzLAogICogb3RoZXJzIGFyZSBhYm91dCBvdXRwdXQgZm9ybWF0IG9yIG90aGVyIGRldGFpbHMuCkBAIC0xMTAsNyArMTA4LDYgQEAKIAlpZiAoIShmaWx0ZXIgJiBET19SRVZTKSkKIAkJcmV0dXJuOwogCWRlZiA9IE5VTEw7Ci0JcmV2c19jb3VudCsrOwogCiAJaWYgKHN5bWJvbGljICYmIG5hbWUpIHsKIAkJaWYgKHN5bWJvbGljID09IFNIT1dfU1lNQk9MSUNfRlVMTCkgewpAQCAtMTU2LDcgKzE1Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNob3dfZGVmYXVsdCh2b2lkKQorc3RhdGljIGludCBzaG93X2RlZmF1bHQodm9pZCkKIHsKIAljb25zdCBjaGFyICpzID0gZGVmOwogCkBAIC0xNjYsOSArMTYzLDEwIEBACiAJCWRlZiA9IE5VTEw7CiAJCWlmICghZ2V0X3NoYTEocywgc2hhMSkpIHsKIAkJCXNob3dfcmV2KE5PUk1BTCwgc2hhMSwgcyk7Ci0JCQlyZXR1cm47CisJCQlyZXR1cm4gMTsKIAkJfQogCX0KKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzaG93X3JlZmVyZW5jZShjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKQEAgLTM3MSwxNiArMzY5LDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGRpZV9ub19zaW5nbGVfcmV2KGludCBxdWlldCkKK3sKKwlpZiAocXVpZXQpCisJCWV4aXQoMSk7CisJZWxzZQorCQlkaWUoIk5lZWRlZCBhIHNpbmdsZSByZXZpc2lvbiIpOworfQorCiBpbnQgY21kX3Jldl9wYXJzZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKLQlpbnQgaSwgYXNfaXMgPSAwLCB2ZXJpZnkgPSAwOworCWludCBpLCBhc19pcyA9IDAsIHZlcmlmeSA9IDAsIHF1aWV0ID0gMCwgcmV2c19jb3VudCA9IDAsIHR5cGUgPSAwOwogCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJY29uc3QgY2hhciAqbmFtZSA9IE5VTEw7CiAKIAlpZiAoYXJnYyA+IDEgJiYgIXN0cmNtcCgiLS1wYXJzZW9wdCIsIGFyZ3ZbMV0pKQogCQlyZXR1cm4gY21kX3BhcnNlb3B0KGFyZ2MgLSAxLCBhcmd2ICsgMSwgcHJlZml4KTsKIAogCXByZWZpeCA9IHNldHVwX2dpdF9kaXJlY3RvcnkoKTsKLQlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZyk7CisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOwogCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKIAkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKIApAQCAtNDM4LDYgKzQ0NSwxMCBAQAogCQkJCXZlcmlmeSA9IDE7CiAJCQkJY29udGludWU7CiAJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLXF1aWV0IikgfHwgIXN0cmNtcChhcmcsICItcSIpKSB7CisJCQkJcXVpZXQgPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQogCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1zaG9ydCIpIHx8CiAJCQkgICAgIXByZWZpeGNtcChhcmcsICItLXNob3J0PSIpKSB7CiAJCQkJZmlsdGVyICY9IH4oRE9fRkxBR1N8RE9fTk9SRVYpOwpAQCAtNTU1LDMwICs1NjYsNDEgQEAKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWlmIChzaG93X2ZsYWcoYXJnKSAmJiB2ZXJpZnkpCi0JCQkJZGllKCJOZWVkZWQgYSBzaW5nbGUgcmV2aXNpb24iKTsKKwkJCQlkaWVfbm9fc2luZ2xlX3JldihxdWlldCk7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCS8qIE5vdCBhIGZsYWcgYXJndW1lbnQgKi8KIAkJaWYgKHRyeV9kaWZmZXJlbmNlKGFyZykpCiAJCQljb250aW51ZTsKLQkJaWYgKCFnZXRfc2hhMShhcmcsIHNoYTEpKSB7Ci0JCQlzaG93X3JldihOT1JNQUwsIHNoYTEsIGFyZyk7CisJCW5hbWUgPSBhcmc7CisJCXR5cGUgPSBOT1JNQUw7CisJCWlmICgqYXJnID09ICdeJykgeworCQkJbmFtZSsrOworCQkJdHlwZSA9IFJFVkVSU0VEOworCQl9CisJCWlmICghZ2V0X3NoYTEobmFtZSwgc2hhMSkpIHsKKwkJCWlmICh2ZXJpZnkpCisJCQkJcmV2c19jb3VudCsrOworCQkJZWxzZQorCQkJCXNob3dfcmV2KHR5cGUsIHNoYTEsIG5hbWUpOwogCQkJY29udGludWU7CiAJCX0KLQkJaWYgKCphcmcgPT0gJ14nICYmICFnZXRfc2hhMShhcmcrMSwgc2hhMSkpIHsKLQkJCXNob3dfcmV2KFJFVkVSU0VELCBzaGExLCBhcmcrMSk7Ci0JCQljb250aW51ZTsKLQkJfQorCQlpZiAodmVyaWZ5KQorCQkJZGllX25vX3NpbmdsZV9yZXYocXVpZXQpOwogCQlhc19pcyA9IDE7CiAJCWlmICghc2hvd19maWxlKGFyZykpCiAJCQljb250aW51ZTsKLQkJaWYgKHZlcmlmeSkKLQkJCWRpZSgiTmVlZGVkIGEgc2luZ2xlIHJldmlzaW9uIik7CiAJCXZlcmlmeV9maWxlbmFtZShwcmVmaXgsIGFyZyk7CiAJfQotCXNob3dfZGVmYXVsdCgpOwotCWlmICh2ZXJpZnkgJiYgcmV2c19jb3VudCAhPSAxKQotCQlkaWUoIk5lZWRlZCBhIHNpbmdsZSByZXZpc2lvbiIpOworCWlmICh2ZXJpZnkpIHsKKwkJaWYgKHJldnNfY291bnQgPT0gMSkgeworCQkJc2hvd19yZXYodHlwZSwgc2hhMSwgbmFtZSk7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIGlmIChyZXZzX2NvdW50ID09IDAgJiYgc2hvd19kZWZhdWx0KCkpCisJCQlyZXR1cm4gMDsKKwkJZGllX25vX3NpbmdsZV9yZXYocXVpZXQpOworCX0gZWxzZQorCQlzaG93X2RlZmF1bHQoKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2J1aWx0aW4tcmV2ZXJ0LmMgYi9idWlsdGluLXJldmVydC5jCmluZGV4IDYwN2EyZjAuLmJkZTI4YjIgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tcmV2ZXJ0LmMKKysrIGIvYnVpbHRpbi1yZXZlcnQuYwpAQCAtMzMsNyArMzMsNyBAQAogCU5VTEwKIH07CiAKLXN0YXRpYyBpbnQgZWRpdCwgbm9fcmVwbGF5LCBub19jb21taXQsIG1haW5saW5lOworc3RhdGljIGludCBlZGl0LCBub19yZXBsYXksIG5vX2NvbW1pdCwgbWFpbmxpbmUsIHNpZ25vZmY7CiBzdGF0aWMgZW51bSB7IFJFVkVSVCwgQ0hFUlJZX1BJQ0sgfSBhY3Rpb247CiBzdGF0aWMgc3RydWN0IGNvbW1pdCAqY29tbWl0OwogCkBAIC01Myw2ICs1Myw3IEBACiAJCU9QVF9CT09MRUFOKCdlJywgImVkaXQiLCAmZWRpdCwgImVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlIiksCiAJCU9QVF9CT09MRUFOKCd4JywgTlVMTCwgJm5vX3JlcGxheSwgImFwcGVuZCBjb21taXQgbmFtZSB3aGVuIGNoZXJyeS1waWNraW5nIiksCiAJCU9QVF9CT09MRUFOKCdyJywgTlVMTCwgJm5vb3AsICJuby1vcCAoYmFja3dhcmQgY29tcGF0aWJpbGl0eSkiKSwKKwkJT1BUX0JPT0xFQU4oJ3MnLCAic2lnbm9mZiIsICZzaWdub2ZmLCAiYWRkIFNpZ25lZC1vZmYtYnk6IiksCiAJCU9QVF9JTlRFR0VSKCdtJywgIm1haW5saW5lIiwgJm1haW5saW5lLCAicGFyZW50IG51bWJlciIpLAogCQlPUFRfRU5EKCksCiAJfTsKQEAgLTE3OSw3ICsxODAsNyBAQAogCQkJZW1haWwrKzsKIAkJCXRpbWVzdGFtcCA9IHN0cmNocihlbWFpbCwgJz4nKTsKIAkJCWlmICghdGltZXN0YW1wKQotCQkJCWRpZSAoIkNvdWxkIG5vdCBleHRyYWN0IGF1dGhvciBlbWFpbCBmcm9tICVzIiwKKwkJCQlkaWUgKCJDb3VsZCBub3QgZXh0cmFjdCBhdXRob3IgdGltZSBmcm9tICVzIiwKIAkJCQkJc2hhMV90b19oZXgoY29tbWl0LT5vYmplY3Quc2hhMSkpOwogCQkJKnRpbWVzdGFtcCA9ICdcMCc7CiAJCQlmb3IgKHRpbWVzdGFtcCsrOyAqdGltZXN0YW1wICYmIGlzc3BhY2UoKnRpbWVzdGFtcCk7CkBAIC0yNjgsNyArMjY5LDcgQEAKIAljb25zdCBjaGFyICptZXNzYWdlLCAqZW5jb2Rpbmc7CiAJY29uc3QgY2hhciAqZGVmbXNnID0geHN0cmR1cChnaXRfcGF0aCgiTUVSR0VfTVNHIikpOwogCi0JZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcpOworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKIAltZSA9IGFjdGlvbiA9PSBSRVZFUlQgPyAicmV2ZXJ0IiA6ICJjaGVycnktcGljayI7CiAJc2V0ZW52KEdJVF9SRUZMT0dfQUNUSU9OLCBtZSwgMCk7CiAJcGFyc2VfYXJncyhhcmdjLCBhcmd2KTsKQEAgLTQwNCwxMCArNDA1LDE5IEBACiAJICovCiAKIAlpZiAoIW5vX2NvbW1pdCkgewotCQlpZiAoZWRpdCkKLQkJCXJldHVybiBleGVjbF9naXRfY21kKCJjb21taXQiLCAiLW4iLCBOVUxMKTsKLQkJZWxzZQotCQkJcmV0dXJuIGV4ZWNsX2dpdF9jbWQoImNvbW1pdCIsICItbiIsICItRiIsIGRlZm1zZywgTlVMTCk7CisJCS8qIDYgaXMgbWF4IHBvc3NpYmxlIGxlbmd0aCBvZiBvdXIgYXJncyBhcnJheSBpbmNsdWRpbmcgTlVMTCAqLworCQljb25zdCBjaGFyICphcmdzWzZdOworCQlpbnQgaSA9IDA7CisJCWFyZ3NbaSsrXSA9ICJjb21taXQiOworCQlhcmdzW2krK10gPSAiLW4iOworCQlpZiAoc2lnbm9mZikKKwkJCWFyZ3NbaSsrXSA9ICItcyI7CisJCWlmICghZWRpdCkgeworCQkJYXJnc1tpKytdID0gIi1GIjsKKwkJCWFyZ3NbaSsrXSA9IGRlZm1zZzsKKwkJfQorCQlhcmdzW2ldID0gTlVMTDsKKwkJcmV0dXJuIGV4ZWN2X2dpdF9jbWQoYXJncyk7CiAJfQogCWZyZWUocmVlbmNvZGVkX21lc3NhZ2UpOwogCmRpZmYgLS1naXQgYS9idWlsdGluLXJtLmMgYi9idWlsdGluLXJtLmMKaW5kZXggYzBhOGJiNi4uYWJkYWI3ZiAxMDA2NDQKLS0tIGEvYnVpbHRpbi1ybS5jCisrKyBiL2J1aWx0aW4tcm0uYwpAQCAtMTQ0LDEyICsxNDQsNyBAQAogCWNvbnN0IGNoYXIgKipwYXRoc3BlYzsKIAljaGFyICpzZWVuOwogCi0JZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcpOwotCi0JbmV3ZmQgPSBob2xkX2xvY2tlZF9pbmRleCgmbG9ja19maWxlLCAxKTsKLQotCWlmIChyZWFkX2NhY2hlKCkgPCAwKQotCQlkaWUoImluZGV4IGZpbGUgY29ycnVwdCIpOworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKIAogCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGJ1aWx0aW5fcm1fb3B0aW9ucywgYnVpbHRpbl9ybV91c2FnZSwgMCk7CiAJaWYgKCFhcmdjKQpAQCAtMTU4LDYgKzE1MywxMSBAQAogCWlmICghaW5kZXhfb25seSkKIAkJc2V0dXBfd29ya190cmVlKCk7CiAKKwluZXdmZCA9IGhvbGRfbG9ja2VkX2luZGV4KCZsb2NrX2ZpbGUsIDEpOworCisJaWYgKHJlYWRfY2FjaGUoKSA8IDApCisJCWRpZSgiaW5kZXggZmlsZSBjb3JydXB0Iik7CisKIAlwYXRoc3BlYyA9IGdldF9wYXRoc3BlYyhwcmVmaXgsIGFyZ3YpOwogCXNlZW4gPSBOVUxMOwogCWZvciAoaSA9IDA7IHBhdGhzcGVjW2ldIDsgaSsrKQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1zZW5kLXBhY2suYyBiL2J1aWx0aW4tc2VuZC1wYWNrLmMKaW5kZXggYmI5YzMzYS4uYTcwOGQwYSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1zZW5kLXBhY2suYworKysgYi9idWlsdGluLXNlbmQtcGFjay5jCkBAIC0yMjYsOCArMjI2LDcgQEAKIAkJaWYgKGFyZ3MudmVyYm9zZSkKIAkJCWZwcmludGYoc3RkZXJyLCAidXBkYXRpbmcgbG9jYWwgdHJhY2tpbmcgcmVmICclcydcbiIsIHJzLmRzdCk7CiAJCWlmIChyZWYtPmRlbGV0aW9uKSB7Ci0JCQlpZiAoZGVsZXRlX3JlZihycy5kc3QsIE5VTEwpKQotCQkJCWVycm9yKCJGYWlsZWQgdG8gZGVsZXRlIik7CisJCQlkZWxldGVfcmVmKHJzLmRzdCwgTlVMTCk7CiAJCX0gZWxzZQogCQkJdXBkYXRlX3JlZigidXBkYXRlIGJ5IHB1c2giLCBycy5kc3QsCiAJCQkJCXJlZi0+bmV3X3NoYTEsIE5VTEwsIDAsIDApOwpAQCAtNTM3LDkgKzUzNiwxNyBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IG5yX2hlYWRzOyBpKyspIHsKKwkJY29uc3QgY2hhciAqbG9jYWwgPSBoZWFkc1tpXTsKIAkJY29uc3QgY2hhciAqcmVtb3RlID0gc3RycmNocihoZWFkc1tpXSwgJzonKTsKIAotCQlyZW1vdGUgPSByZW1vdGUgPyAocmVtb3RlICsgMSkgOiBoZWFkc1tpXTsKKwkJaWYgKCpsb2NhbCA9PSAnKycpCisJCQlsb2NhbCsrOworCisJCS8qIEEgbWF0Y2hpbmcgcmVmc3BlYyBpcyBva2F5LiAgKi8KKwkJaWYgKHJlbW90ZSA9PSBsb2NhbCAmJiByZW1vdGVbMV0gPT0gJ1wwJykKKwkJCWNvbnRpbnVlOworCisJCXJlbW90ZSA9IHJlbW90ZSA/IChyZW1vdGUgKyAxKSA6IGxvY2FsOwogCQlzd2l0Y2ggKGNoZWNrX3JlZl9mb3JtYXQocmVtb3RlKSkgewogCQljYXNlIDA6IC8qIG9rICovCiAJCWNhc2UgQ0hFQ0tfUkVGX0ZPUk1BVF9PTkVMRVZFTDoKZGlmZiAtLWdpdCBhL2J1aWx0aW4tc2hvdy1icmFuY2guYyBiL2J1aWx0aW4tc2hvdy1icmFuY2guYwppbmRleCBhMzgzMzIzLi45MzA0N2Y1IDEwMDY0NAotLS0gYS9idWlsdGluLXNob3ctYnJhbmNoLmMKKysrIGIvYnVpbHRpbi1zaG93LWJyYW5jaC5jCkBAIC01MzMsNyArNTMzLDcgQEAKIAlkaWUoImJhZCBzaGExIHJlZmVyZW5jZSAlcyIsIGF2KTsKIH0KIAotc3RhdGljIGludCBnaXRfc2hvd19icmFuY2hfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCitzdGF0aWMgaW50IGdpdF9zaG93X2JyYW5jaF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCiB7CiAJaWYgKCFzdHJjbXAodmFyLCAic2hvd2JyYW5jaC5kZWZhdWx0IikpIHsKIAkJaWYgKCF2YWx1ZSkKQEAgLTU0Nyw3ICs1NDcsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUpOworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOwogfQogCiBzdGF0aWMgaW50IG9taXRfaW5fZGVuc2Uoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBzdHJ1Y3QgY29tbWl0ICoqcmV2LCBpbnQgbikKQEAgLTYxMSw3ICs2MTEsNyBAQAogCWludCByZWZsb2cgPSAwOwogCWNvbnN0IGNoYXIgKnJlZmxvZ19iYXNlID0gTlVMTDsKIAotCWdpdF9jb25maWcoZ2l0X3Nob3dfYnJhbmNoX2NvbmZpZyk7CisJZ2l0X2NvbmZpZyhnaXRfc2hvd19icmFuY2hfY29uZmlnLCBOVUxMKTsKIAogCS8qIElmIG5vdGhpbmcgaXMgc3BlY2lmaWVkLCB0cnkgdGhlIGRlZmF1bHQgZmlyc3QgKi8KIAlpZiAoYWMgPT0gMSAmJiBkZWZhdWx0X251bSkgewpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1zeW1ib2xpYy1yZWYuYyBiL2J1aWx0aW4tc3ltYm9saWMtcmVmLmMKaW5kZXggZDMzOTgyYi4uYjQ5YmRiNiAxMDA2NDQKLS0tIGEvYnVpbHRpbi1zeW1ib2xpYy1yZWYuYworKysgYi9idWlsdGluLXN5bWJvbGljLXJlZi5jCkBAIC0zNSw3ICszNSw3IEBACiAJCU9QVF9FTkQoKSwKIAl9OwogCi0JZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcpOworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKIAlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCBnaXRfc3ltYm9saWNfcmVmX3VzYWdlLCAwKTsKIAlpZiAobXNnICYmISptc2cpCiAJCWRpZSgiUmVmdXNpbmcgdG8gcGVyZm9ybSB1cGRhdGUgd2l0aCBlbXB0eSBtZXNzYWdlIik7CmRpZmYgLS1naXQgYS9idWlsdGluLXRhZy5jIGIvYnVpbHRpbi10YWcuYwppbmRleCAxMjlmZjU3Li4zYmQwMTljIDEwMDY0NAotLS0gYS9idWlsdGluLXRhZy5jCisrKyBiL2J1aWx0aW4tdGFnLmMKQEAgLTI1NiwxNiArMjU2LDE2IEBACiAJCWRpZSgic2lnbmluZyBrZXkgdmFsdWUgdG9vIGxvbmcgKCUuMTBzLi4uKSIsIHZhbHVlKTsKIH0KIAotc3RhdGljIGludCBnaXRfdGFnX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQorc3RhdGljIGludCBnaXRfdGFnX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKIHsKIAlpZiAoIXN0cmNtcCh2YXIsICJ1c2VyLnNpZ25pbmdrZXkiKSkgewogCQlpZiAoIXZhbHVlKQotCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhbHVlKTsKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOwogCQlzZXRfc2lnbmluZ2tleSh2YWx1ZSk7CiAJCXJldHVybiAwOwogCX0KIAotCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSk7CisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CiB9CiAKIHN0YXRpYyB2b2lkIHdyaXRlX3RhZ19ib2R5KGludCBmZCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKQEAgLTM4NSw3ICszODUsNyBAQAogCiAJaW50IGFubm90YXRlID0gMCwgc2lnbiA9IDAsIGZvcmNlID0gMCwgbGluZXMgPSAwLAogCQlsaXN0ID0gMCwgZGVsZXRlID0gMCwgdmVyaWZ5ID0gMDsKLQljaGFyICptc2dmaWxlID0gTlVMTCwgKmtleWlkID0gTlVMTDsKKwljb25zdCBjaGFyICptc2dmaWxlID0gTlVMTCwgKmtleWlkID0gTlVMTDsKIAlzdHJ1Y3QgbXNnX2FyZyBtc2cgPSB7IDAsIFNUUkJVRl9JTklUIH07CiAJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CiAJCU9QVF9CT09MRUFOKCdsJywgTlVMTCwgJmxpc3QsICJsaXN0IHRhZyBuYW1lcyIpLApAQCAtNDA4LDkgKzQwOCwxMCBAQAogCQlPUFRfRU5EKCkKIAl9OwogCi0JZ2l0X2NvbmZpZyhnaXRfdGFnX2NvbmZpZyk7CisJZ2l0X2NvbmZpZyhnaXRfdGFnX2NvbmZpZywgTlVMTCk7CiAKIAlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCBnaXRfdGFnX3VzYWdlLCAwKTsKKwltc2dmaWxlID0gcGFyc2Vfb3B0aW9uc19maXhfZmlsZW5hbWUocHJlZml4LCBtc2dmaWxlKTsKIAogCWlmIChrZXlpZCkgewogCQlzaWduID0gMTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tdW5wYWNrLW9iamVjdHMuYyBiL2J1aWx0aW4tdW5wYWNrLW9iamVjdHMuYwppbmRleCA1MGUwN2ZhLi44NTA0M2QxIDEwMDY0NAotLS0gYS9idWlsdGluLXVucGFjay1vYmplY3RzLmMKKysrIGIvYnVpbHRpbi11bnBhY2stb2JqZWN0cy5jCkBAIC03LDExICs3LDEzIEBACiAjaW5jbHVkZSAiY29tbWl0LmgiCiAjaW5jbHVkZSAidGFnLmgiCiAjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgInRyZWUtd2Fsay5oIgogI2luY2x1ZGUgInByb2dyZXNzLmgiCiAjaW5jbHVkZSAiZGVjb3JhdGUuaCIKKyNpbmNsdWRlICJmc2NrLmgiCiAKLXN0YXRpYyBpbnQgZHJ5X3J1biwgcXVpZXQsIHJlY292ZXIsIGhhc19lcnJvcnM7Ci1zdGF0aWMgY29uc3QgY2hhciB1bnBhY2tfdXNhZ2VbXSA9ICJnaXQtdW5wYWNrLW9iamVjdHMgWy1uXSBbLXFdIFstcl0gPCBwYWNrLWZpbGUiOworc3RhdGljIGludCBkcnlfcnVuLCBxdWlldCwgcmVjb3ZlciwgaGFzX2Vycm9ycywgc3RyaWN0Oworc3RhdGljIGNvbnN0IGNoYXIgdW5wYWNrX3VzYWdlW10gPSAiZ2l0LXVucGFjay1vYmplY3RzIFstbl0gWy1xXSBbLXJdIFstLXN0cmljdF0gPCBwYWNrLWZpbGUiOwogCiAvKiBXZSBhbHdheXMgcmVhZCBpbiA0a0IgY2h1bmtzLiAqLwogc3RhdGljIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzQwOTZdOwpAQCAtMTksNiArMjEsMTEgQEAKIHN0YXRpYyBvZmZfdCBjb25zdW1lZF9ieXRlczsKIHN0YXRpYyBTSEFfQ1RYIGN0eDsKIAorLyoKKyAqIFdoZW4gcnVubmluZyB1bmRlciAtLXN0cmljdCBtb2RlLCBvYmplY3RzIHdob3NlIHJlYWNoYWJpbGl0eSBhcmUKKyAqIHN1c3BlY3QgYXJlIGtlcHQgaW4gY29yZSB3aXRob3V0IGdldHRpbmcgd3JpdHRlbiBpbiB0aGUgb2JqZWN0CisgKiBzdG9yZS4KKyAqLwogc3RydWN0IG9ial9idWZmZXIgewogCWNoYXIgKmJ1ZmZlcjsKIAl1bnNpZ25lZCBsb25nIHNpemU7CkBAIC0zMSw2ICszOCwxNiBAQAogCXJldHVybiBsb29rdXBfZGVjb3JhdGlvbigmb2JqX2RlY29yYXRlLCBiYXNlKTsKIH0KIAorc3RhdGljIHZvaWQgYWRkX29iamVjdF9idWZmZXIoc3RydWN0IG9iamVjdCAqb2JqZWN0LCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlzdHJ1Y3Qgb2JqX2J1ZmZlciAqb2JqOworCW9iaiA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBvYmpfYnVmZmVyKSk7CisJb2JqLT5idWZmZXIgPSBidWZmZXI7CisJb2JqLT5zaXplID0gc2l6ZTsKKwlpZiAoYWRkX2RlY29yYXRpb24oJm9ial9kZWNvcmF0ZSwgb2JqZWN0LCBvYmopKQorCQlkaWUoIm9iamVjdCAlcyB0cmllZCB0byBhZGQgYnVmZmVyIHR3aWNlISIsIHNoYTFfdG9faGV4KG9iamVjdC0+c2hhMSkpOworfQorCiAvKgogICogTWFrZSBzdXJlIGF0IGxlYXN0ICJtaW4iIGJ5dGVzIGFyZSBhdmFpbGFibGUgaW4gdGhlIGJ1ZmZlciwgYW5kCiAgKiByZXR1cm4gdGhlIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KQEAgLTEzNCwxOSArMTUxLDExMCBAQAogc3RydWN0IG9ial9pbmZvIHsKIAlvZmZfdCBvZmZzZXQ7CiAJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CiB9OwogCisjZGVmaW5lIEZMQUdfT1BFTiAoMXU8PDIwKQorI2RlZmluZSBGTEFHX1dSSVRURU4gKDF1PDwyMSkKKwogc3RhdGljIHN0cnVjdCBvYmpfaW5mbyAqb2JqX2xpc3Q7Cit1bnNpZ25lZCBucl9vYmplY3RzOworCisvKgorICogQ2FsbGVkIG9ubHkgZnJvbSBjaGVja19vYmplY3QoKSBhZnRlciBpdCB2ZXJpZmllZCB0aGlzIG9iamVjdAorICogaXMgT2suCisgKi8KK3N0YXRpYyB2b2lkIHdyaXRlX2NhY2hlZF9vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqKQoreworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJc3RydWN0IG9ial9idWZmZXIgKm9ial9idWYgPSBsb29rdXBfb2JqZWN0X2J1ZmZlcihvYmopOworCWlmICh3cml0ZV9zaGExX2ZpbGUob2JqX2J1Zi0+YnVmZmVyLCBvYmpfYnVmLT5zaXplLCB0eXBlbmFtZShvYmotPnR5cGUpLCBzaGExKSA8IDApCisJCWRpZSgiZmFpbGVkIHRvIHdyaXRlIG9iamVjdCAlcyIsIHNoYTFfdG9faGV4KG9iai0+c2hhMSkpOworCW9iai0+ZmxhZ3MgfD0gRkxBR19XUklUVEVOOworfQorCisvKgorICogQXQgdGhlIHZlcnkgZW5kIG9mIHRoZSBwcm9jZXNzaW5nLCB3cml0ZV9yZXN0KCkgc2NhbnMgdGhlIG9iamVjdHMKKyAqIHRoYXQgaGF2ZSByZWFjaGFiaWxpdHkgcmVxdWlyZW1lbnRzIGFuZCBjYWxscyB0aGlzIGZ1bmN0aW9uLgorICogVmVyaWZ5IGl0cyByZWFjaGFiaWxpdHkgYW5kIHZhbGlkaXR5IHJlY3Vyc2l2ZWx5IGFuZCB3cml0ZSBpdCBvdXQuCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfb2JqZWN0KHN0cnVjdCBvYmplY3QgKm9iaiwgaW50IHR5cGUsIHZvaWQgKmRhdGEpCit7CisJaWYgKCFvYmopCisJCXJldHVybiAwOworCisJaWYgKG9iai0+ZmxhZ3MgJiBGTEFHX1dSSVRURU4pCisJCXJldHVybiAxOworCisJaWYgKHR5cGUgIT0gT0JKX0FOWSAmJiBvYmotPnR5cGUgIT0gdHlwZSkKKwkJZGllKCJvYmplY3QgdHlwZSBtaXNtYXRjaCIpOworCisJaWYgKCEob2JqLT5mbGFncyAmIEZMQUdfT1BFTikpIHsKKwkJdW5zaWduZWQgbG9uZyBzaXplOworCQlpbnQgdHlwZSA9IHNoYTFfb2JqZWN0X2luZm8ob2JqLT5zaGExLCAmc2l6ZSk7CisJCWlmICh0eXBlICE9IG9iai0+dHlwZSB8fCB0eXBlIDw9IDApCisJCQlkaWUoIm9iamVjdCBvZiB1bmV4cGVjdGVkIHR5cGUiKTsKKwkJb2JqLT5mbGFncyB8PSBGTEFHX1dSSVRURU47CisJCXJldHVybiAxOworCX0KKworCWlmIChmc2NrX29iamVjdChvYmosIDEsIGZzY2tfZXJyb3JfZnVuY3Rpb24pKQorCQlkaWUoIkVycm9yIGluIG9iamVjdCIpOworCWlmICghZnNja193YWxrKG9iaiwgY2hlY2tfb2JqZWN0LCAwKSkKKwkJZGllKCJFcnJvciBvbiByZWFjaGFibGUgb2JqZWN0cyBvZiAlcyIsIHNoYTFfdG9faGV4KG9iai0+c2hhMSkpOworCXdyaXRlX2NhY2hlZF9vYmplY3Qob2JqKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfcmVzdCh2b2lkKQoreworCXVuc2lnbmVkIGk7CisJZm9yIChpID0gMDsgaSA8IG5yX29iamVjdHM7IGkrKykKKwkJY2hlY2tfb2JqZWN0KG9ial9saXN0W2ldLm9iaiwgT0JKX0FOWSwgMCk7Cit9CiAKIHN0YXRpYyB2b2lkIGFkZGVkX29iamVjdCh1bnNpZ25lZCBuciwgZW51bSBvYmplY3RfdHlwZSB0eXBlLAogCQkJIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiAKKy8qCisgKiBXcml0ZSBvdXQgbnItdGggb2JqZWN0IGZyb20gdGhlIGxpc3QsIG5vdyB3ZSBrbm93IHRoZSBjb250ZW50cworICogb2YgaXQuICBVbmRlciAtLXN0cmljdCwgdGhpcyBidWZmZXJzIHN0cnVjdHVyZWQgb2JqZWN0cyBpbi1jb3JlLAorICogdG8gYmUgY2hlY2tlZCBhdCB0aGUgZW5kLgorICovCiBzdGF0aWMgdm9pZCB3cml0ZV9vYmplY3QodW5zaWduZWQgbnIsIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwKIAkJCSB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKLQlpZiAod3JpdGVfc2hhMV9maWxlKGJ1Ziwgc2l6ZSwgdHlwZW5hbWUodHlwZSksIG9ial9saXN0W25yXS5zaGExKSA8IDApCi0JCWRpZSgiZmFpbGVkIHRvIHdyaXRlIG9iamVjdCIpOwotCWFkZGVkX29iamVjdChuciwgdHlwZSwgYnVmLCBzaXplKTsKKwlpZiAoIXN0cmljdCkgeworCQlpZiAod3JpdGVfc2hhMV9maWxlKGJ1Ziwgc2l6ZSwgdHlwZW5hbWUodHlwZSksIG9ial9saXN0W25yXS5zaGExKSA8IDApCisJCQlkaWUoImZhaWxlZCB0byB3cml0ZSBvYmplY3QiKTsKKwkJYWRkZWRfb2JqZWN0KG5yLCB0eXBlLCBidWYsIHNpemUpOworCQlmcmVlKGJ1Zik7CisJCW9ial9saXN0W25yXS5vYmogPSBOVUxMOworCX0gZWxzZSBpZiAodHlwZSA9PSBPQkpfQkxPQikgeworCQlzdHJ1Y3QgYmxvYiAqYmxvYjsKKwkJaWYgKHdyaXRlX3NoYTFfZmlsZShidWYsIHNpemUsIHR5cGVuYW1lKHR5cGUpLCBvYmpfbGlzdFtucl0uc2hhMSkgPCAwKQorCQkJZGllKCJmYWlsZWQgdG8gd3JpdGUgb2JqZWN0Iik7CisJCWFkZGVkX29iamVjdChuciwgdHlwZSwgYnVmLCBzaXplKTsKKwkJZnJlZShidWYpOworCisJCWJsb2IgPSBsb29rdXBfYmxvYihvYmpfbGlzdFtucl0uc2hhMSk7CisJCWlmIChibG9iKQorCQkJYmxvYi0+b2JqZWN0LmZsYWdzIHw9IEZMQUdfV1JJVFRFTjsKKwkJZWxzZQorCQkJZGllKCJpbnZhbGlkIGJsb2Igb2JqZWN0Iik7CisJCW9ial9saXN0W25yXS5vYmogPSBOVUxMOworCX0gZWxzZSB7CisJCXN0cnVjdCBvYmplY3QgKm9iajsKKwkJaW50IGVhdGVuOworCQloYXNoX3NoYTFfZmlsZShidWYsIHNpemUsIHR5cGVuYW1lKHR5cGUpLCBvYmpfbGlzdFtucl0uc2hhMSk7CisJCWFkZGVkX29iamVjdChuciwgdHlwZSwgYnVmLCBzaXplKTsKKwkJb2JqID0gcGFyc2Vfb2JqZWN0X2J1ZmZlcihvYmpfbGlzdFtucl0uc2hhMSwgdHlwZSwgc2l6ZSwgYnVmLCAmZWF0ZW4pOworCQlpZiAoIW9iaikKKwkJCWRpZSgiaW52YWxpZCAlcyIsIHR5cGVuYW1lKHR5cGUpKTsKKwkJYWRkX29iamVjdF9idWZmZXIob2JqLCBidWYsIHNpemUpOworCQlvYmotPmZsYWdzIHw9IEZMQUdfT1BFTjsKKwkJb2JqX2xpc3RbbnJdLm9iaiA9IG9iajsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIHJlc29sdmVfZGVsdGEodW5zaWduZWQgbnIsIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwKQEAgLTE2Myw5ICsyNzEsMTIgQEAKIAkJZGllKCJmYWlsZWQgdG8gYXBwbHkgZGVsdGEiKTsKIAlmcmVlKGRlbHRhKTsKIAl3cml0ZV9vYmplY3QobnIsIHR5cGUsIHJlc3VsdCwgcmVzdWx0X3NpemUpOwotCWZyZWUocmVzdWx0KTsKIH0KIAorLyoKKyAqIFdlIG5vdyBrbm93IHRoZSBjb250ZW50cyBvZiBhbiBvYmplY3QgKHdoaWNoIGlzIG5yLXRoIGluIHRoZSBwYWNrKTsKKyAqIHJlc29sdmUgYWxsIHRoZSBkZWx0aWZpZWQgb2JqZWN0cyB0aGF0IGFyZSBiYXNlZCBvbiBpdC4KKyAqLwogc3RhdGljIHZvaWQgYWRkZWRfb2JqZWN0KHVuc2lnbmVkIG5yLCBlbnVtIG9iamVjdF90eXBlIHR5cGUsCiAJCQkgdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplKQogewpAQCAtMTkzLDcgKzMwNCwyNCBAQAogCiAJaWYgKCFkcnlfcnVuICYmIGJ1ZikKIAkJd3JpdGVfb2JqZWN0KG5yLCB0eXBlLCBidWYsIHNpemUpOwotCWZyZWUoYnVmKTsKKwllbHNlCisJCWZyZWUoYnVmKTsKK30KKworc3RhdGljIGludCByZXNvbHZlX2FnYWluc3RfaGVsZCh1bnNpZ25lZCBuciwgY29uc3QgdW5zaWduZWQgY2hhciAqYmFzZSwKKwkJCQl2b2lkICpkZWx0YV9kYXRhLCB1bnNpZ25lZCBsb25nIGRlbHRhX3NpemUpCit7CisJc3RydWN0IG9iamVjdCAqb2JqOworCXN0cnVjdCBvYmpfYnVmZmVyICpvYmpfYnVmZmVyOworCW9iaiA9IGxvb2t1cF9vYmplY3QoYmFzZSk7CisJaWYgKCFvYmopCisJCXJldHVybiAwOworCW9ial9idWZmZXIgPSBsb29rdXBfb2JqZWN0X2J1ZmZlcihvYmopOworCWlmICghb2JqX2J1ZmZlcikKKwkJcmV0dXJuIDA7CisJcmVzb2x2ZV9kZWx0YShuciwgb2JqLT50eXBlLCBvYmpfYnVmZmVyLT5idWZmZXIsCisJCSAgICAgIG9ial9idWZmZXItPnNpemUsIGRlbHRhX2RhdGEsIGRlbHRhX3NpemUpOworCXJldHVybiAxOwogfQogCiBzdGF0aWMgdm9pZCB1bnBhY2tfZGVsdGFfZW50cnkoZW51bSBvYmplY3RfdHlwZSB0eXBlLCB1bnNpZ25lZCBsb25nIGRlbHRhX3NpemUsCkBAIC0yMDIsNyArMzMwLDYgQEAKIAl2b2lkICpkZWx0YV9kYXRhLCAqYmFzZTsKIAl1bnNpZ25lZCBsb25nIGJhc2Vfc2l6ZTsKIAl1bnNpZ25lZCBjaGFyIGJhc2Vfc2hhMVsyMF07Ci0Jc3RydWN0IG9iamVjdCAqb2JqOwogCiAJaWYgKHR5cGUgPT0gT0JKX1JFRl9ERUxUQSkgewogCQloYXNoY3B5KGJhc2Vfc2hhMSwgZmlsbCgyMCkpOwpAQCAtMjEyLDcgKzMzOSwxMyBAQAogCQkJZnJlZShkZWx0YV9kYXRhKTsKIAkJCXJldHVybjsKIAkJfQotCQlpZiAoIWhhc19zaGExX2ZpbGUoYmFzZV9zaGExKSkgeworCQlpZiAoaGFzX3NoYTFfZmlsZShiYXNlX3NoYTEpKQorCQkJOyAvKiBPayB3ZSBoYXZlIHRoaXMgb25lICovCisJCWVsc2UgaWYgKHJlc29sdmVfYWdhaW5zdF9oZWxkKG5yLCBiYXNlX3NoYTEsCisJCQkJCSAgICAgIGRlbHRhX2RhdGEsIGRlbHRhX3NpemUpKQorCQkJcmV0dXJuOyAvKiB3ZSBhcmUgZG9uZSAqLworCQllbHNlIHsKKwkJCS8qIGNhbm5vdCByZXNvbHZlIHlldCAtLS0gcXVldWUgaXQgKi8KIAkJCWhhc2hjcHkob2JqX2xpc3RbbnJdLnNoYTEsIG51bGxfc2hhMSk7CiAJCQlhZGRfZGVsdGFfdG9fbGlzdChuciwgYmFzZV9zaGExLCAwLCBkZWx0YV9kYXRhLCBkZWx0YV9zaXplKTsKIAkJCXJldHVybjsKQEAgLTI1OCwyMiArMzkxLDE4IEBACiAJCQl9CiAJCX0KIAkJaWYgKCFiYXNlX2ZvdW5kKSB7Ci0JCQkvKiBUaGUgZGVsdGEgYmFzZSBvYmplY3QgaXMgaXRzZWxmIGEgZGVsdGEgdGhhdAotCQkJICAgaGFzIG5vdCBiZWVuCXJlc29sdmVkIHlldC4gKi8KKwkJCS8qCisJCQkgKiBUaGUgZGVsdGEgYmFzZSBvYmplY3QgaXMgaXRzZWxmIGEgZGVsdGEgdGhhdAorCQkJICogaGFzIG5vdCBiZWVuIHJlc29sdmVkIHlldC4KKwkJCSAqLwogCQkJaGFzaGNweShvYmpfbGlzdFtucl0uc2hhMSwgbnVsbF9zaGExKTsKIAkJCWFkZF9kZWx0YV90b19saXN0KG5yLCBudWxsX3NoYTEsIGJhc2Vfb2Zmc2V0LCBkZWx0YV9kYXRhLCBkZWx0YV9zaXplKTsKIAkJCXJldHVybjsKIAkJfQogCX0KIAotCW9iaiA9IGxvb2t1cF9vYmplY3QoYmFzZV9zaGExKTsKLQlpZiAob2JqKSB7Ci0JCXN0cnVjdCBvYmpfYnVmZmVyICpvYmpfYnVmID0gbG9va3VwX29iamVjdF9idWZmZXIob2JqKTsKLQkJaWYgKG9ial9idWYpIHsKLQkJCXJlc29sdmVfZGVsdGEobnIsIG9iai0+dHlwZSwgb2JqX2J1Zi0+YnVmZmVyLCBvYmpfYnVmLT5zaXplLCBkZWx0YV9kYXRhLCBkZWx0YV9zaXplKTsKLQkJCXJldHVybjsKLQkJfQotCX0KKwlpZiAocmVzb2x2ZV9hZ2FpbnN0X2hlbGQobnIsIGJhc2Vfc2hhMSwgZGVsdGFfZGF0YSwgZGVsdGFfc2l6ZSkpCisJCXJldHVybjsKIAogCWJhc2UgPSByZWFkX3NoYTFfZmlsZShiYXNlX3NoYTEsICZ0eXBlLCAmYmFzZV9zaXplKTsKIAlpZiAoIWJhc2UpIHsKQEAgLTMzNiw3ICs0NjUsOCBAQAogCWludCBpOwogCXN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MgPSBOVUxMOwogCXN0cnVjdCBwYWNrX2hlYWRlciAqaGRyID0gZmlsbChzaXplb2Yoc3RydWN0IHBhY2tfaGVhZGVyKSk7Ci0JdW5zaWduZWQgbnJfb2JqZWN0cyA9IG50b2hsKGhkci0+aGRyX2VudHJpZXMpOworCisJbnJfb2JqZWN0cyA9IG50b2hsKGhkci0+aGRyX2VudHJpZXMpOwogCiAJaWYgKG50b2hsKGhkci0+aGRyX3NpZ25hdHVyZSkgIT0gUEFDS19TSUdOQVRVUkUpCiAJCWRpZSgiYmFkIHBhY2sgZmlsZSIpOwpAQCAtMzQ3LDYgKzQ3Nyw3IEBACiAJaWYgKCFxdWlldCkKIAkJcHJvZ3Jlc3MgPSBzdGFydF9wcm9ncmVzcygiVW5wYWNraW5nIG9iamVjdHMiLCBucl9vYmplY3RzKTsKIAlvYmpfbGlzdCA9IHhtYWxsb2MobnJfb2JqZWN0cyAqIHNpemVvZigqb2JqX2xpc3QpKTsKKwltZW1zZXQob2JqX2xpc3QsIDAsIG5yX29iamVjdHMgKiBzaXplb2YoKm9ial9saXN0KSk7CiAJZm9yIChpID0gMDsgaSA8IG5yX29iamVjdHM7IGkrKykgewogCQl1bnBhY2tfb25lKGkpOwogCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCBpICsgMSk7CkBAIC0zNjIsNyArNDkzLDcgQEAKIAlpbnQgaTsKIAl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwogCi0JZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcpOworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKIAogCXF1aWV0ID0gIWlzYXR0eSgyKTsKIApAQCAtMzgyLDYgKzUxMywxMCBAQAogCQkJCXJlY292ZXIgPSAxOwogCQkJCWNvbnRpbnVlOwogCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1zdHJpY3QiKSkgeworCQkJCXN0cmljdCA9IDE7CisJCQkJY29udGludWU7CisJCQl9CiAJCQlpZiAoIXByZWZpeGNtcChhcmcsICItLXBhY2tfaGVhZGVyPSIpKSB7CiAJCQkJc3RydWN0IHBhY2tfaGVhZGVyICpoZHI7CiAJCQkJY2hhciAqYzsKQEAgLTQwNyw2ICs1NDIsOCBAQAogCXVucGFja19hbGwoKTsKIAlTSEExX1VwZGF0ZSgmY3R4LCBidWZmZXIsIG9mZnNldCk7CiAJU0hBMV9GaW5hbChzaGExLCAmY3R4KTsKKwlpZiAoc3RyaWN0KQorCQl3cml0ZV9yZXN0KCk7CiAJaWYgKGhhc2hjbXAoZmlsbCgyMCksIHNoYTEpKQogCQlkaWUoImZpbmFsIHNoYTEgZGlkIG5vdCBtYXRjaCIpOwogCXVzZSgyMCk7CmRpZmYgLS1naXQgYS9idWlsdGluLXVwZGF0ZS1pbmRleC5jIGIvYnVpbHRpbi11cGRhdGUtaW5kZXguYwppbmRleCBhODc5NWQzLi45ZTBkN2FiIDEwMDY0NAotLS0gYS9idWlsdGluLXVwZGF0ZS1pbmRleC5jCisrKyBiL2J1aWx0aW4tdXBkYXRlLWluZGV4LmMKQEAgLTU2Nyw3ICs1NjcsNyBAQAogCWludCBsb2NrX2Vycm9yID0gMDsKIAlzdHJ1Y3QgbG9ja19maWxlICpsb2NrX2ZpbGU7CiAKLQlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZyk7CisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOwogCiAJLyogV2UgY2FuJ3QgZnJlZSB0aGlzIG1lbW9yeSwgaXQgYmVjb21lcyBwYXJ0IG9mIGEgbGlua2VkIGxpc3QgcGFyc2VkIGF0ZXhpdCgpICovCiAJbG9ja19maWxlID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGxvY2tfZmlsZSkpOwpAQCAtNTkzLDYgKzU5MywxMCBAQAogCQkJCXJlZnJlc2hfZmxhZ3MgfD0gUkVGUkVTSF9RVUlFVDsKIAkJCQljb250aW51ZTsKIAkJCX0KKwkJCWlmICghc3RyY21wKHBhdGgsICItLWlnbm9yZS1zdWJtb2R1bGVzIikpIHsKKwkJCQlyZWZyZXNoX2ZsYWdzIHw9IFJFRlJFU0hfSUdOT1JFX1NVQk1PRFVMRVM7CisJCQkJY29udGludWU7CisJCQl9CiAJCQlpZiAoIXN0cmNtcChwYXRoLCAiLS1hZGQiKSkgewogCQkJCWFsbG93X2FkZCA9IDE7CiAJCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9idWlsdGluLXVwZGF0ZS1yZWYuYyBiL2J1aWx0aW4tdXBkYXRlLXJlZi5jCmluZGV4IGU5MDczN2MuLjkzYzEyNzEgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tdXBkYXRlLXJlZi5jCisrKyBiL2J1aWx0aW4tdXBkYXRlLXJlZi5jCkBAIC0yMiw3ICsyMiw3IEBACiAJCU9QVF9FTkQoKSwKIAl9OwogCi0JZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcpOworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKIAlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBvcHRpb25zLCBnaXRfdXBkYXRlX3JlZl91c2FnZSwgMCk7CiAJaWYgKG1zZyAmJiAhKm1zZykKIAkJZGllKCJSZWZ1c2luZyB0byBwZXJmb3JtIHVwZGF0ZSB3aXRoIGVtcHR5IG1lc3NhZ2UuIik7CmRpZmYgLS1naXQgYS9idWlsdGluLXVwbG9hZC1hcmNoaXZlLmMgYi9idWlsdGluLXVwbG9hZC1hcmNoaXZlLmMKaW5kZXggNDhhZTA5ZS4uMzcxNDAwZCAxMDA2NDQKLS0tIGEvYnVpbHRpbi11cGxvYWQtYXJjaGl2ZS5jCisrKyBiL2J1aWx0aW4tdXBsb2FkLWFyY2hpdmUuYwpAQCAtMzAsNyArMzAsNyBAQAogCWlmIChhcmdjICE9IDIpCiAJCXVzYWdlKHVwbG9hZF9hcmNoaXZlX3VzYWdlKTsKIAotCWlmIChzdHJsZW4oYXJndlsxXSkgPiBzaXplb2YoYnVmKSkKKwlpZiAoc3RybGVuKGFyZ3ZbMV0pICsgMSA+IHNpemVvZihidWYpKQogCQlkaWUoImluc2FuZWx5IGxvbmcgcmVwb3NpdG9yeSBuYW1lIik7CiAKIAlzdHJjcHkoYnVmLCBhcmd2WzFdKTsgLyogZW50ZXItcmVwbyBzbXVkZ2VzIGl0cyBhcmd1bWVudCAqLwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi12ZXJpZnktcGFjay5jIGIvYnVpbHRpbi12ZXJpZnktcGFjay5jCmluZGV4IDQ5NThiYmIuLjRjNTE1YTAgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tdmVyaWZ5LXBhY2suYworKysgYi9idWlsdGluLXZlcmlmeS1wYWNrLmMKQEAgLTU1LDcgKzU1LDcgQEAKIAlpbnQgbm9fbW9yZV9vcHRpb25zID0gMDsKIAlpbnQgbm90aGluZ19kb25lID0gMTsKIAotCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnKTsKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CiAJd2hpbGUgKDEgPCBhcmdjKSB7CiAJCWlmICghbm9fbW9yZV9vcHRpb25zICYmIGFyZ3ZbMV1bMF0gPT0gJy0nKSB7CiAJCQlpZiAoIXN0cmNtcCgiLXYiLCBhcmd2WzFdKSkKZGlmZiAtLWdpdCBhL2J1aWx0aW4tdmVyaWZ5LXRhZy5jIGIvYnVpbHRpbi12ZXJpZnktdGFnLmMKaW5kZXggZGI4MTQ5Ni4uOTJlYWE4OSAxMDA2NDQKLS0tIGEvYnVpbHRpbi12ZXJpZnktdGFnLmMKKysrIGIvYnVpbHRpbi12ZXJpZnktdGFnLmMKQEAgLTkwLDcgKzkwLDcgQEAKIHsKIAlpbnQgaSA9IDEsIHZlcmJvc2UgPSAwLCBoYWRfZXJyb3IgPSAwOwogCi0JZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcpOworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKIAogCWlmIChhcmdjID09IDEpCiAJCXVzYWdlKGJ1aWx0aW5fdmVyaWZ5X3RhZ191c2FnZSk7CmRpZmYgLS1naXQgYS9idWlsdGluLXdyaXRlLXRyZWUuYyBiL2J1aWx0aW4td3JpdGUtdHJlZS5jCmluZGV4IGU4MzhkMDEuLmMyMTg3OTkgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4td3JpdGUtdHJlZS5jCisrKyBiL2J1aWx0aW4td3JpdGUtdHJlZS5jCkBAIC0xOCw3ICsxOCw3IEBACiAJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKIAljb25zdCBjaGFyICptZSA9ICJnaXQtd3JpdGUtdHJlZSI7CiAKLQlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZyk7CisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOwogCXdoaWxlICgxIDwgYXJnYykgewogCQljb25zdCBjaGFyICphcmcgPSBhcmd2WzFdOwogCQlpZiAoIXN0cmNtcChhcmcsICItLW1pc3Npbmctb2siKSkKZGlmZiAtLWdpdCBhL2J1aWx0aW4uaCBiL2J1aWx0aW4uaAppbmRleCA5NTEyNmZkLi5iNDYwYjJkIDEwMDY0NAotLS0gYS9idWlsdGluLmgKKysrIGIvYnVpbHRpbi5oCkBAIC01LDEwICs1LDEyIEBACiAKIGV4dGVybiBjb25zdCBjaGFyIGdpdF92ZXJzaW9uX3N0cmluZ1tdOwogZXh0ZXJuIGNvbnN0IGNoYXIgZ2l0X3VzYWdlX3N0cmluZ1tdOworZXh0ZXJuIGNvbnN0IGNoYXIgZ2l0X21vcmVfaW5mb19zdHJpbmdbXTsKIAogZXh0ZXJuIHZvaWQgbGlzdF9jb21tb25fY21kc19oZWxwKHZvaWQpOwogZXh0ZXJuIHZvaWQgaGVscF91bmtub3duX2NtZChjb25zdCBjaGFyICpjbWQpOwogZXh0ZXJuIHZvaWQgcHJ1bmVfcGFja2VkX29iamVjdHMoaW50KTsKK2V4dGVybiBpbnQgcmVhZF9saW5lX3dpdGhfbnVsKGNoYXIgKmJ1ZiwgaW50IHNpemUsIEZJTEUgKmZpbGUpOwogCiBleHRlcm4gaW50IGNtZF9hZGQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfYW5ub3RhdGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwpAQCAtMjQsNiArMjYsNyBAQAogZXh0ZXJuIGludCBjbWRfY2hlY2tfcmVmX2Zvcm1hdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9jaGVycnkoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfY2hlcnJ5X3BpY2soaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfY2xvbmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfY2xlYW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfY29tbWl0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX2NvbW1pdF90cmVlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKZGlmZiAtLWdpdCBhL2NhY2hlLmggYi9jYWNoZS5oCmluZGV4IDJhMWU3ZWMuLjg4MjI2NTEgMTAwNjQ0Ci0tLSBhL2NhY2hlLmgKKysrIGIvY2FjaGUuaApAQCAtMTMzLDYgKzEzMyw3IEBACiAjZGVmaW5lIENFX1VQREFURSAgICAoMHgxMDAwMCkKICNkZWZpbmUgQ0VfUkVNT1ZFICAgICgweDIwMDAwKQogI2RlZmluZSBDRV9VUFRPREFURSAgKDB4NDAwMDApCisjZGVmaW5lIENFX0FEREVEICAgICAoMHg4MDAwMCkKIAogI2RlZmluZSBDRV9IQVNIRUQgICAgKDB4MTAwMDAwKQogI2RlZmluZSBDRV9VTkhBU0hFRCAgKDB4MjAwMDAwKQpAQCAtMTUzLDIwICsxNTQsNiBAQAogCWRzdC0+Y2VfZmxhZ3MgPSAoZHN0LT5jZV9mbGFncyAmIH5DRV9TVEFURV9NQVNLKSB8IHN0YXRlOwogfQogCi0vKgotICogV2UgZG9uJ3QgYWN0dWFsbHkgKnJlbW92ZSogaXQsIHdlIGNhbiBqdXN0IG1hcmsgaXQgaW52YWxpZCBzbyB0aGF0Ci0gKiB3ZSB3b24ndCBmaW5kIGl0IGluIGxvb2t1cHMuCi0gKgotICogTm90IG9ubHkgd291bGQgd2UgaGF2ZSB0byBzZWFyY2ggdGhlIGxpc3RzIChzaW1wbGUgZW5vdWdoKSwgYnV0Ci0gKiB3ZSdkIGFsc28gaGF2ZSB0byByZWhhc2ggb3RoZXIgaGFzaCBidWNrZXRzIGluIGNhc2UgdGhpcyBtYWtlcyB0aGUKLSAqIGhhc2ggYnVja2V0IGVtcHR5IChjb21tb24pLiBTbyBpdCdzIG11Y2ggYmV0dGVyIHRvIGp1c3QgbWFyawotICogaXQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfaW5kZXhfZW50cnkoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKLXsKLQljZS0+Y2VfZmxhZ3MgfD0gQ0VfVU5IQVNIRUQ7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY3JlYXRlX2NlX2ZsYWdzKHNpemVfdCBsZW4sIHVuc2lnbmVkIHN0YWdlKQogewogCWlmIChsZW4gPj0gQ0VfTkFNRU1BU0spCkBAIC0yNDEsNiArMjI4LDIzIEBACiAKIGV4dGVybiBzdHJ1Y3QgaW5kZXhfc3RhdGUgdGhlX2luZGV4OwogCisvKiBOYW1lIGhhc2hpbmcgKi8KK2V4dGVybiB2b2lkIGFkZF9uYW1lX2hhc2goc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpOworLyoKKyAqIFdlIGRvbid0IGFjdHVhbGx5ICpyZW1vdmUqIGl0LCB3ZSBjYW4ganVzdCBtYXJrIGl0IGludmFsaWQgc28gdGhhdAorICogd2Ugd29uJ3QgZmluZCBpdCBpbiBsb29rdXBzLgorICoKKyAqIE5vdCBvbmx5IHdvdWxkIHdlIGhhdmUgdG8gc2VhcmNoIHRoZSBsaXN0cyAoc2ltcGxlIGVub3VnaCksIGJ1dAorICogd2UnZCBhbHNvIGhhdmUgdG8gcmVoYXNoIG90aGVyIGhhc2ggYnVja2V0cyBpbiBjYXNlIHRoaXMgbWFrZXMgdGhlCisgKiBoYXNoIGJ1Y2tldCBlbXB0eSAoY29tbW9uKS4gU28gaXQncyBtdWNoIGJldHRlciB0byBqdXN0IG1hcmsKKyAqIGl0LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX25hbWVfaGFzaChzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQoreworCWNlLT5jZV9mbGFncyB8PSBDRV9VTkhBU0hFRDsKK30KKworCiAjaWZuZGVmIE5PX1RIRV9JTkRFWF9DT01QQVRJQklMSVRZX01BQ1JPUwogI2RlZmluZSBhY3RpdmVfY2FjaGUgKHRoZV9pbmRleC5jYWNoZSkKICNkZWZpbmUgYWN0aXZlX25yICh0aGVfaW5kZXguY2FjaGVfbnIpCkBAIC0yNTcsMTEgKzI2MSwxMiBAQAogI2RlZmluZSBhZGRfY2FjaGVfZW50cnkoY2UsIG9wdGlvbikgYWRkX2luZGV4X2VudHJ5KCZ0aGVfaW5kZXgsIChjZSksIChvcHRpb24pKQogI2RlZmluZSByZW1vdmVfY2FjaGVfZW50cnlfYXQocG9zKSByZW1vdmVfaW5kZXhfZW50cnlfYXQoJnRoZV9pbmRleCwgKHBvcykpCiAjZGVmaW5lIHJlbW92ZV9maWxlX2Zyb21fY2FjaGUocGF0aCkgcmVtb3ZlX2ZpbGVfZnJvbV9pbmRleCgmdGhlX2luZGV4LCAocGF0aCkpCi0jZGVmaW5lIGFkZF9maWxlX3RvX2NhY2hlKHBhdGgsIHZlcmJvc2UpIGFkZF9maWxlX3RvX2luZGV4KCZ0aGVfaW5kZXgsIChwYXRoKSwgKHZlcmJvc2UpKQorI2RlZmluZSBhZGRfdG9fY2FjaGUocGF0aCwgc3QsIGZsYWdzKSBhZGRfdG9faW5kZXgoJnRoZV9pbmRleCwgKHBhdGgpLCAoc3QpLCAoZmxhZ3MpKQorI2RlZmluZSBhZGRfZmlsZV90b19jYWNoZShwYXRoLCBmbGFncykgYWRkX2ZpbGVfdG9faW5kZXgoJnRoZV9pbmRleCwgKHBhdGgpLCAoZmxhZ3MpKQogI2RlZmluZSByZWZyZXNoX2NhY2hlKGZsYWdzKSByZWZyZXNoX2luZGV4KCZ0aGVfaW5kZXgsIChmbGFncyksIE5VTEwsIE5VTEwpCiAjZGVmaW5lIGNlX21hdGNoX3N0YXQoY2UsIHN0LCBvcHRpb25zKSBpZV9tYXRjaF9zdGF0KCZ0aGVfaW5kZXgsIChjZSksIChzdCksIChvcHRpb25zKSkKICNkZWZpbmUgY2VfbW9kaWZpZWQoY2UsIHN0LCBvcHRpb25zKSBpZV9tb2RpZmllZCgmdGhlX2luZGV4LCAoY2UpLCAoc3QpLCAob3B0aW9ucykpCi0jZGVmaW5lIGNhY2hlX25hbWVfZXhpc3RzKG5hbWUsIG5hbWVsZW4pIGluZGV4X25hbWVfZXhpc3RzKCZ0aGVfaW5kZXgsIChuYW1lKSwgKG5hbWVsZW4pKQorI2RlZmluZSBjYWNoZV9uYW1lX2V4aXN0cyhuYW1lLCBuYW1lbGVuLCBpZ25jYXNlKSBpbmRleF9uYW1lX2V4aXN0cygmdGhlX2luZGV4LCAobmFtZSksIChuYW1lbGVuKSwgKGlnbmNhc2UpKQogI2VuZGlmCiAKIGVudW0gb2JqZWN0X3R5cGUgewpAQCAtMzExLDYgKzMxNiw4IEBACiBleHRlcm4gY2hhciAqZ2V0X2dyYWZ0X2ZpbGUodm9pZCk7CiBleHRlcm4gaW50IHNldF9naXRfZGlyKGNvbnN0IGNoYXIgKnBhdGgpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKmdldF9naXRfd29ya190cmVlKHZvaWQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKnJlYWRfZ2l0ZmlsZV9nZW50bHkoY29uc3QgY2hhciAqcGF0aCk7CitleHRlcm4gdm9pZCBzZXRfZ2l0X3dvcmtfdHJlZShjb25zdCBjaGFyICp0cmVlKTsKIAogI2RlZmluZSBBTFRFUk5BVEVfREJfRU5WSVJPTk1FTlQgIkdJVF9BTFRFUk5BVEVfT0JKRUNUX0RJUkVDVE9SSUVTIgogCkBAIC0zMjMsNiArMzMwLDEwIEBACiBleHRlcm4gdm9pZCB2ZXJpZnlfZmlsZW5hbWUoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpuYW1lKTsKIGV4dGVybiB2b2lkIHZlcmlmeV9ub25fZmlsZW5hbWUoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpuYW1lKTsKIAorI2RlZmluZSBJTklUX0RCX1FVSUVUIDB4MDAwMQorCitleHRlcm4gaW50IGluaXRfZGIoY29uc3QgY2hhciAqdGVtcGxhdGVfZGlyLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworCiAjZGVmaW5lIGFsbG9jX25yKHgpICgoKHgpKzE2KSozLzIpCiAKIC8qCkBAIC0zNTAsNyArMzYxLDcgQEAKIGV4dGVybiBpbnQgZGlzY2FyZF9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKik7CiBleHRlcm4gaW50IHVubWVyZ2VkX2luZGV4KGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqKTsKIGV4dGVybiBpbnQgdmVyaWZ5X3BhdGgoY29uc3QgY2hhciAqcGF0aCk7Ci1leHRlcm4gaW50IGluZGV4X25hbWVfZXhpc3RzKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbik7CitleHRlcm4gc3RydWN0IGNhY2hlX2VudHJ5ICppbmRleF9uYW1lX2V4aXN0cyhzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIGludCBpZ25jYXNlKTsKIGV4dGVybiBpbnQgaW5kZXhfbmFtZV9wb3MoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICosIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuKTsKICNkZWZpbmUgQUREX0NBQ0hFX09LX1RPX0FERCAxCQkvKiBPayB0byBhZGQgKi8KICNkZWZpbmUgQUREX0NBQ0hFX09LX1RPX1JFUExBQ0UgMgkvKiBPayB0byByZXBsYWNlIGZpbGUvZGlyZWN0b3J5ICovCkBAIC0zNjAsNyArMzcxLDExIEBACiBleHRlcm4gc3RydWN0IGNhY2hlX2VudHJ5ICpyZWZyZXNoX2NhY2hlX2VudHJ5KHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGludCByZWFsbHkpOwogZXh0ZXJuIGludCByZW1vdmVfaW5kZXhfZW50cnlfYXQoc3RydWN0IGluZGV4X3N0YXRlICosIGludCBwb3MpOwogZXh0ZXJuIGludCByZW1vdmVfZmlsZV9mcm9tX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBjb25zdCBjaGFyICpwYXRoKTsKLWV4dGVybiBpbnQgYWRkX2ZpbGVfdG9faW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICosIGNvbnN0IGNoYXIgKnBhdGgsIGludCB2ZXJib3NlKTsKKyNkZWZpbmUgQUREX0NBQ0hFX1ZFUkJPU0UgMQorI2RlZmluZSBBRERfQ0FDSEVfUFJFVEVORCAyCisjZGVmaW5lIEFERF9DQUNIRV9JR05PUkVfRVJST1JTCTQKK2V4dGVybiBpbnQgYWRkX3RvX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQgZmxhZ3MpOworZXh0ZXJuIGludCBhZGRfZmlsZV90b19pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgY29uc3QgY2hhciAqcGF0aCwgaW50IGZsYWdzKTsKIGV4dGVybiBzdHJ1Y3QgY2FjaGVfZW50cnkgKm1ha2VfY2FjaGVfZW50cnkodW5zaWduZWQgaW50IG1vZGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKnBhdGgsIGludCBzdGFnZSwgaW50IHJlZnJlc2gpOwogZXh0ZXJuIGludCBjZV9zYW1lX25hbWUoc3RydWN0IGNhY2hlX2VudHJ5ICphLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmIpOwogCkBAIC0zODEsNiArMzk2LDcgQEAKICNkZWZpbmUgUkVGUkVTSF9VTk1FUkdFRAkweDAwMDIJLyogYWxsb3cgdW5tZXJnZWQgKi8KICNkZWZpbmUgUkVGUkVTSF9RVUlFVAkJMHgwMDA0CS8qIGJlIHF1aWV0IGFib3V0IGl0ICovCiAjZGVmaW5lIFJFRlJFU0hfSUdOT1JFX01JU1NJTkcJMHgwMDA4CS8qIGlnbm9yZSBub24tZXhpc3RlbnQgKi8KKyNkZWZpbmUgUkVGUkVTSF9JR05PUkVfU1VCTU9EVUxFUwkweDAwMTAJLyogaWdub3JlIHN1Ym1vZHVsZXMgKi8KIGV4dGVybiBpbnQgcmVmcmVzaF9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgdW5zaWduZWQgaW50IGZsYWdzLCBjb25zdCBjaGFyICoqcGF0aHNwZWMsIGNoYXIgKnNlZW4pOwogCiBzdHJ1Y3QgbG9ja19maWxlIHsKQEAgLTM5MSw2ICs0MDcsNyBAQAogCWNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdOwogfTsKIGV4dGVybiBpbnQgaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZShzdHJ1Y3QgbG9ja19maWxlICosIGNvbnN0IGNoYXIgKnBhdGgsIGludCk7CitleHRlcm4gaW50IGhvbGRfbG9ja19maWxlX2Zvcl9hcHBlbmQoc3RydWN0IGxvY2tfZmlsZSAqLCBjb25zdCBjaGFyICpwYXRoLCBpbnQpOwogZXh0ZXJuIGludCBjb21taXRfbG9ja19maWxlKHN0cnVjdCBsb2NrX2ZpbGUgKik7CiAKIGV4dGVybiBpbnQgaG9sZF9sb2NrZWRfaW5kZXgoc3RydWN0IGxvY2tfZmlsZSAqLCBpbnQpOwpAQCAtNDA0LDYgKzQyMSw3IEBACiBleHRlcm4gaW50IHRydXN0X2V4ZWN1dGFibGVfYml0OwogZXh0ZXJuIGludCBxdW90ZV9wYXRoX2Z1bGx5OwogZXh0ZXJuIGludCBoYXNfc3ltbGlua3M7CitleHRlcm4gaW50IGlnbm9yZV9jYXNlOwogZXh0ZXJuIGludCBhc3N1bWVfdW5jaGFuZ2VkOwogZXh0ZXJuIGludCBwcmVmZXJfc3ltbGlua19yZWZzOwogZXh0ZXJuIGludCBsb2dfYWxsX3JlZl91cGRhdGVzOwpAQCAtNDE3LDYgKzQzNSw3IEBACiBleHRlcm4gc2l6ZV90IHBhY2tlZF9naXRfbGltaXQ7CiBleHRlcm4gc2l6ZV90IGRlbHRhX2Jhc2VfY2FjaGVfbGltaXQ7CiBleHRlcm4gaW50IGF1dG9fY3JsZjsKK2V4dGVybiBpbnQgZnN5bmNfb2JqZWN0X2ZpbGVzOwogCiBlbnVtIHNhZmVfY3JsZiB7CiAJU0FGRV9DUkxGX0ZBTFNFID0gMCwKQEAgLTQzMyw3ICs0NTIsMTUgQEAKIAlCUkFOQ0hfVFJBQ0tfRVhQTElDSVQsCiB9OwogCitlbnVtIHJlYmFzZV9zZXR1cF90eXBlIHsKKwlBVVRPUkVCQVNFX05FVkVSID0gMCwKKwlBVVRPUkVCQVNFX0xPQ0FMLAorCUFVVE9SRUJBU0VfUkVNT1RFLAorCUFVVE9SRUJBU0VfQUxXQVlTLAorfTsKKwogZXh0ZXJuIGVudW0gYnJhbmNoX3RyYWNrIGdpdF9icmFuY2hfdHJhY2s7CitleHRlcm4gZW51bSByZWJhc2Vfc2V0dXBfdHlwZSBhdXRvcmViYXNlOwogCiAjZGVmaW5lIEdJVF9SRVBPX1ZFUlNJT04gMAogZXh0ZXJuIGludCByZXBvc2l0b3J5X2Zvcm1hdF92ZXJzaW9uOwpAQCAtNDc0LDIwICs1MDEsMzMgQEAKIAogaW50IGdpdF9ta3N0ZW1wKGNoYXIgKnBhdGgsIHNpemVfdCBuLCBjb25zdCBjaGFyICp0ZW1wbGF0ZSk7CiAKKy8qCisgKiBOT1RFIE5PVEUgTk9URSEhCisgKgorICogUEVSTV9VTUFTSywgT0xEX1BFUk1fR1JPVVAgYW5kIE9MRF9QRVJNX0VWRVJZQk9EWSBlbnVtZXJhdGlvbnMgbXVzdAorICogbm90IGJlIGNoYW5nZWQuIE9sZCByZXBvc2l0b3JpZXMgaGF2ZSBjb3JlLnNoYXJlZHJlcG9zaXRvcnkgd3JpdHRlbiBpbgorICogbnVtZXJpYyBmb3JtYXQsIGFuZCB0aGVyZWZvcmUgdGhlc2UgdmFsdWVzIGFyZSBwcmVzZXJ2ZWQgZm9yIGNvbXBhdGliaWxpdHkKKyAqIHJlYXNvbnMuCisgKi8KIGVudW0gc2hhcmVkcmVwbyB7Ci0JUEVSTV9VTUFTSyA9IDAsCi0JUEVSTV9HUk9VUCwKLQlQRVJNX0VWRVJZQk9EWQorCVBFUk1fVU1BU0sgICAgICAgICAgPSAwLAorCU9MRF9QRVJNX0dST1VQICAgICAgPSAxLAorCU9MRF9QRVJNX0VWRVJZQk9EWSAgPSAyLAorCVBFUk1fR1JPVVAgICAgICAgICAgPSAwNjYwLAorCVBFUk1fRVZFUllCT0RZICAgICAgPSAwNjY0LAogfTsKIGludCBnaXRfY29uZmlnX3Blcm0oY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSk7CiBpbnQgYWRqdXN0X3NoYXJlZF9wZXJtKGNvbnN0IGNoYXIgKnBhdGgpOwogaW50IHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXMoY2hhciAqcGF0aCk7CitpbnQgc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChjb25zdCBjaGFyICpwYXRoKTsKIGNoYXIgKmVudGVyX3JlcG8oY2hhciAqcGF0aCwgaW50IHN0cmljdCk7CiBzdGF0aWMgaW5saW5lIGludCBpc19hYnNvbHV0ZV9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpCiB7CiAJcmV0dXJuIHBhdGhbMF0gPT0gJy8nOwogfQogY29uc3QgY2hhciAqbWFrZV9hYnNvbHV0ZV9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpOworY29uc3QgY2hhciAqbWFrZV9ub25yZWxhdGl2ZV9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpOworY29uc3QgY2hhciAqbWFrZV9yZWxhdGl2ZV9wYXRoKGNvbnN0IGNoYXIgKmFicywgY29uc3QgY2hhciAqYmFzZSk7CiAKIC8qIFJlYWQgYW5kIHVucGFjayBhIHNoYTEgZmlsZSBpbnRvIG1lbW9yeSwgd3JpdGUgbWVtb3J5IHRvIGEgc2hhMSBmaWxlICovCiBleHRlcm4gaW50IHNoYTFfb2JqZWN0X2luZm8oY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBsb25nICopOwpAQCAtNDk1LDEyICs1MzUsMTAgQEAKIGV4dGVybiBpbnQgaGFzaF9zaGExX2ZpbGUoY29uc3Qgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIGxlbiwgY29uc3QgY2hhciAqdHlwZSwgdW5zaWduZWQgY2hhciAqc2hhMSk7CiBleHRlcm4gaW50IHdyaXRlX3NoYTFfZmlsZSh2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgbGVuLCBjb25zdCBjaGFyICp0eXBlLCB1bnNpZ25lZCBjaGFyICpyZXR1cm5fc2hhMSk7CiBleHRlcm4gaW50IHByZXRlbmRfc2hhMV9maWxlKHZvaWQgKiwgdW5zaWduZWQgbG9uZywgZW51bSBvYmplY3RfdHlwZSwgdW5zaWduZWQgY2hhciAqKTsKK2V4dGVybiBpbnQgZm9yY2Vfb2JqZWN0X2xvb3NlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHRpbWVfdCBtdGltZSk7CiAKIGV4dGVybiBpbnQgY2hlY2tfc2hhMV9zaWduYXR1cmUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUsIGNvbnN0IGNoYXIgKnR5cGUpOwogCi1leHRlcm4gaW50IHdyaXRlX3NoYTFfZnJvbV9mZChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmQsIGNoYXIgKmJ1ZmZlciwKLQkJCSAgICAgIHNpemVfdCBidWZzaXplLCBzaXplX3QgKmJ1ZnBvc24pOwotZXh0ZXJuIGludCB3cml0ZV9zaGExX3RvX2ZkKGludCBmZCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSk7CiBleHRlcm4gaW50IG1vdmVfdGVtcF90b19maWxlKGNvbnN0IGNoYXIgKnRtcGZpbGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKIAogZXh0ZXJuIGludCBoYXNfc2hhMV9wYWNrKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKippZ25vcmUpOwpAQCAtNTgwLDcgKzYxOCw3IEBACiB9OwogCiBleHRlcm4gaW50IGNoZWNrb3V0X2VudHJ5KHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGNvbnN0IHN0cnVjdCBjaGVja291dCAqc3RhdGUsIGNoYXIgKnRvcGF0aCk7Ci1leHRlcm4gaW50IGhhc19zeW1saW5rX2xlYWRpbmdfcGF0aChjb25zdCBjaGFyICpuYW1lLCBjaGFyICpsYXN0X3N5bWxpbmspOworZXh0ZXJuIGludCBoYXNfc3ltbGlua19sZWFkaW5nX3BhdGgoaW50IGxlbiwgY29uc3QgY2hhciAqbmFtZSk7CiAKIGV4dGVybiBzdHJ1Y3QgYWx0ZXJuYXRlX29iamVjdF9kYXRhYmFzZSB7CiAJc3RydWN0IGFsdGVybmF0ZV9vYmplY3RfZGF0YWJhc2UgKm5leHQ7CkBAIC01ODgsNiArNjI2LDcgQEAKIAljaGFyIGJhc2VbRkxFWF9BUlJBWV07IC8qIG1vcmUgKi8KIH0gKmFsdF9vZGJfbGlzdDsKIGV4dGVybiB2b2lkIHByZXBhcmVfYWx0X29kYih2b2lkKTsKK2V4dGVybiB2b2lkIGFkZF90b19hbHRlcm5hdGVzX2ZpbGUoY29uc3QgY2hhciAqcmVmZXJlbmNlKTsKIAogc3RydWN0IHBhY2tfd2luZG93IHsKIAlzdHJ1Y3QgcGFja193aW5kb3cgKm5leHQ7CkBAIC02MjQsNiArNjYzLDcgQEAKIAlzdHJ1Y3QgcmVmICpuZXh0OwogCXVuc2lnbmVkIGNoYXIgb2xkX3NoYTFbMjBdOwogCXVuc2lnbmVkIGNoYXIgbmV3X3NoYTFbMjBdOworCWNoYXIgKnN5bXJlZjsKIAl1bnNpZ25lZCBpbnQgZm9yY2U6MSwKIAkJbWVyZ2U6MSwKIAkJbm9uZmFzdGZvcndhcmQ6MSwKQEAgLTY1Nyw4ICs2OTcsNiBAQAogZXh0ZXJuIGludCBzZXJ2ZXJfc3VwcG9ydHMoY29uc3QgY2hhciAqZmVhdHVyZSk7CiAKIGV4dGVybiBzdHJ1Y3QgcGFja2VkX2dpdCAqcGFyc2VfcGFja19pbmRleCh1bnNpZ25lZCBjaGFyICpzaGExKTsKLWV4dGVybiBzdHJ1Y3QgcGFja2VkX2dpdCAqcGFyc2VfcGFja19pbmRleF9maWxlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCi0JCQkJCQljb25zdCBjaGFyICppZHhfcGF0aCk7CiAKIGV4dGVybiB2b2lkIHByZXBhcmVfcGFja2VkX2dpdCh2b2lkKTsKIGV4dGVybiB2b2lkIHJlcHJlcGFyZV9wYWNrZWRfZ2l0KHZvaWQpOwpAQCAtNjg0LDIxICs3MjIsMjIgQEAKIC8qIER1bWIgc2VydmVycyBzdXBwb3J0ICovCiBleHRlcm4gaW50IHVwZGF0ZV9zZXJ2ZXJfaW5mbyhpbnQpOwogCi10eXBlZGVmIGludCAoKmNvbmZpZ19mbl90KShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7Ci1leHRlcm4gaW50IGdpdF9kZWZhdWx0X2NvbmZpZyhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7Ci1leHRlcm4gaW50IGdpdF9jb25maWdfZnJvbV9maWxlKGNvbmZpZ19mbl90IGZuLCBjb25zdCBjaGFyICopOwotZXh0ZXJuIGludCBnaXRfY29uZmlnKGNvbmZpZ19mbl90IGZuKTsKK3R5cGVkZWYgaW50ICgqY29uZmlnX2ZuX3QpKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCB2b2lkICopOworZXh0ZXJuIGludCBnaXRfZGVmYXVsdF9jb25maWcoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHZvaWQgKik7CitleHRlcm4gaW50IGdpdF9jb25maWdfZnJvbV9maWxlKGNvbmZpZ19mbl90IGZuLCBjb25zdCBjaGFyICosIHZvaWQgKik7CitleHRlcm4gaW50IGdpdF9jb25maWcoY29uZmlnX2ZuX3QgZm4sIHZvaWQgKik7CiBleHRlcm4gaW50IGdpdF9wYXJzZV9sb25nKGNvbnN0IGNoYXIgKiwgbG9uZyAqKTsKIGV4dGVybiBpbnQgZ2l0X3BhcnNlX3Vsb25nKGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgbG9uZyAqKTsKIGV4dGVybiBpbnQgZ2l0X2NvbmZpZ19pbnQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2l0X2NvbmZpZ191bG9uZyhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitleHRlcm4gaW50IGdpdF9jb25maWdfYm9vbF9vcl9pbnQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCAqKTsKIGV4dGVybiBpbnQgZ2l0X2NvbmZpZ19ib29sKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKIGV4dGVybiBpbnQgZ2l0X2NvbmZpZ19zdHJpbmcoY29uc3QgY2hhciAqKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogZXh0ZXJuIGludCBnaXRfY29uZmlnX3NldChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CiBleHRlcm4gaW50IGdpdF9jb25maWdfc2V0X211bHRpdmFyKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7CiBleHRlcm4gaW50IGdpdF9jb25maWdfcmVuYW1lX3NlY3Rpb24oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogZXh0ZXJuIGNvbnN0IGNoYXIgKmdpdF9ldGNfZ2l0Y29uZmlnKHZvaWQpOwotZXh0ZXJuIGludCBjaGVja19yZXBvc2l0b3J5X2Zvcm1hdF92ZXJzaW9uKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpOworZXh0ZXJuIGludCBjaGVja19yZXBvc2l0b3J5X2Zvcm1hdF92ZXJzaW9uKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKTsKIGV4dGVybiBpbnQgZ2l0X2Vudl9ib29sKGNvbnN0IGNoYXIgKiwgaW50KTsKIGV4dGVybiBpbnQgZ2l0X2NvbmZpZ19zeXN0ZW0odm9pZCk7CiBleHRlcm4gaW50IGdpdF9jb25maWdfZ2xvYmFsKHZvaWQpOwpAQCAtNzA3LDYgKzc0Niw3IEBACiAjZGVmaW5lIE1BWF9HSVROQU1FICgxMDAwKQogZXh0ZXJuIGNoYXIgZ2l0X2RlZmF1bHRfZW1haWxbTUFYX0dJVE5BTUVdOwogZXh0ZXJuIGNoYXIgZ2l0X2RlZmF1bHRfbmFtZVtNQVhfR0lUTkFNRV07CitleHRlcm4gaW50IHVzZXJfaWRlbnRfZXhwbGljaXRseV9naXZlbjsKIAogZXh0ZXJuIGNvbnN0IGNoYXIgKmdpdF9jb21taXRfZW5jb2Rpbmc7CiBleHRlcm4gY29uc3QgY2hhciAqZ2l0X2xvZ19vdXRwdXRfZW5jb2Rpbmc7CkBAIC03MTUsMTEgKzc1NSwxMiBAQAogZXh0ZXJuIHZvaWQgbWF5YmVfZmx1c2hfb3JfZGllKEZJTEUgKiwgY29uc3QgY2hhciAqKTsKIGV4dGVybiBpbnQgY29weV9mZChpbnQgaWZkLCBpbnQgb2ZkKTsKIGV4dGVybiBpbnQgY29weV9maWxlKGNvbnN0IGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBpbnQgbW9kZSk7Ci1leHRlcm4gaW50IHJlYWRfaW5fZnVsbChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKLWV4dGVybiBpbnQgd3JpdGVfaW5fZnVsbChpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKK2V4dGVybiBzc2l6ZV90IHJlYWRfaW5fZnVsbChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKK2V4dGVybiBzc2l6ZV90IHdyaXRlX2luX2Z1bGwoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCk7CiBleHRlcm4gdm9pZCB3cml0ZV9vcl9kaWUoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCk7CiBleHRlcm4gaW50IHdyaXRlX29yX3doaW5lKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsIGNvbnN0IGNoYXIgKm1zZyk7CiBleHRlcm4gaW50IHdyaXRlX29yX3doaW5lX3BpcGUoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCwgY29uc3QgY2hhciAqbXNnKTsKK2V4dGVybiB2b2lkIGZzeW5jX29yX2RpZShpbnQgZmQsIGNvbnN0IGNoYXIgKik7CiAKIC8qIHBhZ2VyLmMgKi8KIGV4dGVybiB2b2lkIHNldHVwX3BhZ2VyKHZvaWQpOwpAQCAtNzUzLDcgKzc5NCwxMSBAQAogZXh0ZXJuIGludCBjb252ZXJ0X3RvX3dvcmtpbmdfdHJlZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBsZW4sIHN0cnVjdCBzdHJidWYgKmRzdCk7CiAKIC8qIGFkZCAqLwotdm9pZCBhZGRfZmlsZXNfdG9fY2FjaGUoaW50IHZlcmJvc2UsIGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqKnBhdGhzcGVjKTsKKy8qCisgKiByZXR1cm4gMCBpZiBzdWNjZXNzLCAxIC0gaWYgYWRkaXRpb24gb2YgYSBmaWxlIGZhaWxlZCBhbmQKKyAqIEFERF9GSUxFU19JR05PUkVfRVJST1JTIHdhcyBzcGVjaWZpZWQgaW4gZmxhZ3MKKyAqLworaW50IGFkZF9maWxlc190b19jYWNoZShjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKipwYXRoc3BlYywgaW50IGZsYWdzKTsKIAogLyogZGlmZi5jICovCiBleHRlcm4gaW50IGRpZmZfYXV0b19yZWZyZXNoX2luZGV4OwpkaWZmIC0tZ2l0IGEvY29sb3IuYyBiL2NvbG9yLmMKaW5kZXggMTJhNjQ1My4uZmMwYjcyYSAxMDA2NDQKLS0tIGEvY29sb3IuYworKysgYi9jb2xvci5jCkBAIC0xNDUsMTQgKzE0NSwxNCBAQAogCXJldHVybiAwOwogfQogCi1pbnQgZ2l0X2NvbG9yX2RlZmF1bHRfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCitpbnQgZ2l0X2NvbG9yX2RlZmF1bHRfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQogewogCWlmICghc3RyY21wKHZhciwgImNvbG9yLnVpIikpIHsKIAkJZ2l0X3VzZV9jb2xvcl9kZWZhdWx0ID0gZ2l0X2NvbmZpZ19jb2xvcmJvb2wodmFyLCB2YWx1ZSwgLTEpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUpOworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOwogfQogCiBzdGF0aWMgaW50IGNvbG9yX3ZmcHJpbnRmKEZJTEUgKmZwLCBjb25zdCBjaGFyICpjb2xvciwgY29uc3QgY2hhciAqZm10LApkaWZmIC0tZ2l0IGEvY29sb3IuaCBiL2NvbG9yLmgKaW5kZXggZWNkYTU1Ni4uNmNmNWM4OCAxMDA2NDQKLS0tIGEvY29sb3IuaAorKysgYi9jb2xvci5oCkBAIC0xMyw3ICsxMyw3IEBACiAvKgogICogVXNlIHRoaXMgaW5zdGVhZCBvZiBnaXRfZGVmYXVsdF9jb25maWcgaWYgeW91IG5lZWQgdGhlIHZhbHVlIG9mIGNvbG9yLnVpLgogICovCi1pbnQgZ2l0X2NvbG9yX2RlZmF1bHRfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpOworaW50IGdpdF9jb2xvcl9kZWZhdWx0X2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYik7CiAKIGludCBnaXRfY29uZmlnX2NvbG9yYm9vbChjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCBpbnQgc3Rkb3V0X2lzX3R0eSk7CiB2b2lkIGNvbG9yX3BhcnNlKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIGNoYXIgKmRzdCk7CmRpZmYgLS1naXQgYS9jb21iaW5lLWRpZmYuYyBiL2NvbWJpbmUtZGlmZi5jCmluZGV4IDBlMTljYmEuLjlmODBhMWMgMTAwNjQ0Ci0tLSBhL2NvbWJpbmUtZGlmZi5jCisrKyBiL2NvbWJpbmUtZGlmZi5jCkBAIC04NCw2ICs4NCw3IEBACiAJLyogYml0IDAgdXAgdG8gKE4tMSkgYXJlIG9uIGlmIHRoZSBwYXJlbnQgaGFzIHRoaXMgbGluZSAoaS5lLgogCSAqIHdlIGRpZCBub3QgY2hhbmdlIGl0KS4KIAkgKiBiaXQgTiBpcyB1c2VkIGZvciAiaW50ZXJlc3RpbmciIGxpbmVzLCBpbmNsdWRpbmcgY29udGV4dC4KKwkgKiBiaXQgKE4rMSkgaXMgdXNlZCBmb3IgImRvIG5vdCBzaG93IGRlbGV0aW9uIGJlZm9yZSB0aGlzIi4KIAkgKi8KIAl1bnNpZ25lZCBsb25nIGZsYWc7CiAJdW5zaWduZWQgbG9uZyAqcF9sbm87CkBAIC0zMDgsNiArMzA5LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGFsbF9tYXNrID0gKDFVTDw8bnVtX3BhcmVudCkgLSAxOwogCXVuc2lnbmVkIGxvbmcgbWFyayA9ICgxVUw8PG51bV9wYXJlbnQpOworCXVuc2lnbmVkIGxvbmcgbm9fcHJlX2RlbGV0ZSA9ICgyVUw8PG51bV9wYXJlbnQpOwogCXVuc2lnbmVkIGxvbmcgaTsKIAogCS8qIFR3byBncm91cHMgb2YgaW50ZXJlc3RpbmcgbGluZXMgbWF5IGhhdmUgYSBzaG9ydCBnYXAgb2YKQEAgLTMyOSw3ICszMzEsNyBAQAogCiAJCS8qIFBhaW50IGEgZmV3IGxpbmVzIGJlZm9yZSB0aGUgZmlyc3QgaW50ZXJlc3RpbmcgbGluZS4gKi8KIAkJd2hpbGUgKGogPCBpKQotCQkJc2xpbmVbaisrXS5mbGFnIHw9IG1hcms7CisJCQlzbGluZVtqKytdLmZsYWcgfD0gbWFyayB8IG5vX3ByZV9kZWxldGU7CiAKIAlhZ2FpbjoKIAkJLyogd2Uga25vdyB1cCB0byBpIGlzIHRvIGJlIGluY2x1ZGVkLiAgd2hlcmUgZG9lcyB0aGUKQEAgLTUwMiw2ICs1MDQsNyBAQAogCQkgICAgICAgaW50IHVzZV9jb2xvcikKIHsKIAl1bnNpZ25lZCBsb25nIG1hcmsgPSAoMVVMPDxudW1fcGFyZW50KTsKKwl1bnNpZ25lZCBsb25nIG5vX3ByZV9kZWxldGUgPSAoMlVMPDxudW1fcGFyZW50KTsKIAlpbnQgaTsKIAl1bnNpZ25lZCBsb25nIGxubyA9IDA7CiAJY29uc3QgY2hhciAqY19mcmFnID0gZGlmZl9nZXRfY29sb3IodXNlX2NvbG9yLCBESUZGX0ZSQUdJTkZPKTsKQEAgLTU4MSw3ICs1ODQsNyBAQAogCQkJaW50IGo7CiAJCQl1bnNpZ25lZCBsb25nIHBfbWFzazsKIAkJCXNsID0gJnNsaW5lW2xubysrXTsKLQkJCWxsID0gc2wtPmxvc3RfaGVhZDsKKwkJCWxsID0gKHNsLT5mbGFnICYgbm9fcHJlX2RlbGV0ZSkgPyBOVUxMIDogc2wtPmxvc3RfaGVhZDsKIAkJCXdoaWxlIChsbCkgewogCQkJCWZwdXRzKGNfb2xkLCBzdGRvdXQpOwogCQkJCWZvciAoaiA9IDA7IGogPCBudW1fcGFyZW50OyBqKyspIHsKQEAgLTcwMSw3ICs3MDQsNyBAQAogCQllbHNlIGlmICgwIDw9IChmZCA9IG9wZW4oZWxlbS0+cGF0aCwgT19SRE9OTFkpKSAmJgogCQkJICFmc3RhdChmZCwgJnN0KSkgewogCQkJc2l6ZV90IGxlbiA9IHhzaXplX3Qoc3Quc3Rfc2l6ZSk7Ci0JCQlzaXplX3Qgc3ogPSAwOworCQkJc3NpemVfdCBkb25lOwogCQkJaW50IGlzX2ZpbGUsIGk7CiAKIAkJCWVsZW0tPm1vZGUgPSBjYW5vbl9tb2RlKHN0LnN0X21vZGUpOwpAQCAtNzE2LDE0ICs3MTksMTMgQEAKIAogCQkJcmVzdWx0X3NpemUgPSBsZW47CiAJCQlyZXN1bHQgPSB4bWFsbG9jKGxlbiArIDEpOwotCQkJd2hpbGUgKHN6IDwgbGVuKSB7Ci0JCQkJc3NpemVfdCBkb25lID0geHJlYWQoZmQsIHJlc3VsdCtzeiwgbGVuLXN6KTsKLQkJCQlpZiAoZG9uZSA9PSAwKQotCQkJCQlicmVhazsKLQkJCQlpZiAoZG9uZSA8IDApCi0JCQkJCWRpZSgicmVhZCBlcnJvciAnJXMnIiwgZWxlbS0+cGF0aCk7Ci0JCQkJc3ogKz0gZG9uZTsKLQkJCX0KKworCQkJZG9uZSA9IHJlYWRfaW5fZnVsbChmZCwgcmVzdWx0LCBsZW4pOworCQkJaWYgKGRvbmUgPCAwKQorCQkJCWRpZSgicmVhZCBlcnJvciAnJXMnIiwgZWxlbS0+cGF0aCk7CisJCQllbHNlIGlmIChkb25lIDwgbGVuKQorCQkJCWRpZSgiZWFybHkgRU9GICclcyciLCBlbGVtLT5wYXRoKTsKKwogCQkJcmVzdWx0W2xlbl0gPSAwOwogCQl9CiAJCWVsc2UgewpAQCAtNzk4LDcgKzgwMCw3IEBACiAJCWludCBkZWxldGVkID0gMDsKIAogCQlpZiAocmV2LT5sb2dpbmZvICYmICFyZXYtPm5vX2NvbW1pdF9pZCkKLQkJCXNob3dfbG9nKHJldiwgb3B0LT5tc2dfc2VwKTsKKwkJCXNob3dfbG9nKHJldik7CiAJCWR1bXBfcXVvdGVkX3BhdGgoZGVuc2UgPyAiZGlmZiAtLWNjICIgOiAiZGlmZiAtLWNvbWJpbmVkICIsCiAJCQkJICIiLCBlbGVtLT5wYXRoLCBjX21ldGEsIGNfcmVzZXQpOwogCQlwcmludGYoIiVzaW5kZXggIiwgY19tZXRhKTsKQEAgLTg4MSw3ICs4ODMsNyBAQAogCQlpbnRlcl9uYW1lX3Rlcm1pbmF0aW9uID0gMDsKIAogCWlmIChyZXYtPmxvZ2luZm8gJiYgIXJldi0+bm9fY29tbWl0X2lkKQotCQlzaG93X2xvZyhyZXYsIG9wdC0+bXNnX3NlcCk7CisJCXNob3dfbG9nKHJldik7CiAKIAlpZiAob3B0LT5vdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfUkFXKSB7CiAJCW9mZnNldCA9IHN0cmxlbihDT0xPTlMpIC0gbnVtX3BhcmVudDsKQEAgLTk2Miw3ICs5NjQsNyBAQAogCQlwYXRocyA9IGludGVyc2VjdF9wYXRocyhwYXRocywgaSwgbnVtX3BhcmVudCk7CiAKIAkJaWYgKHNob3dfbG9nX2ZpcnN0ICYmIGkgPT0gMCkgewotCQkJc2hvd19sb2cocmV2LCBvcHQtPm1zZ19zZXApOworCQkJc2hvd19sb2cocmV2KTsKIAkJCWlmIChyZXYtPnZlcmJvc2VfaGVhZGVyICYmIG9wdC0+b3V0cHV0X2Zvcm1hdCkKIAkJCQlwdXRjaGFyKG9wdC0+bGluZV90ZXJtaW5hdGlvbik7CiAJCX0KZGlmZiAtLWdpdCBhL2NvbW1pdC5jIGIvY29tbWl0LmMKaW5kZXggOTRkNWIzZC4uMDljZjE2NyAxMDA2NDQKLS0tIGEvY29tbWl0LmMKKysrIGIvY29tbWl0LmMKQEAgLTI0Myw3ICsyNDMsNiBAQAogCXVuc2lnbmVkIGNoYXIgcGFyZW50WzIwXTsKIAlzdHJ1Y3QgY29tbWl0X2xpc3QgKipwcHRyOwogCXN0cnVjdCBjb21taXRfZ3JhZnQgKmdyYWZ0OwotCXVuc2lnbmVkIG5fcmVmcyA9IDA7CiAKIAlpZiAoaXRlbS0+b2JqZWN0LnBhcnNlZCkKIAkJcmV0dXJuIDA7CkBAIC0yNTUsOCArMjU0LDYgQEAKIAkJcmV0dXJuIGVycm9yKCJiYWQgdHJlZSBwb2ludGVyIGluIGNvbW1pdCAlcyIsCiAJCQkgICAgIHNoYTFfdG9faGV4KGl0ZW0tPm9iamVjdC5zaGExKSk7CiAJaXRlbS0+dHJlZSA9IGxvb2t1cF90cmVlKHBhcmVudCk7Ci0JaWYgKGl0ZW0tPnRyZWUpCi0JCW5fcmVmcysrOwogCWJ1ZnB0ciArPSA0NjsgLyogInRyZWUgIiArICJoZXggc2hhMSIgKyAiXG4iICovCiAJcHB0ciA9ICZpdGVtLT5wYXJlbnRzOwogCkBAIC0yNzIsMTAgKzI2OSw4IEBACiAJCWlmIChncmFmdCkKIAkJCWNvbnRpbnVlOwogCQluZXdfcGFyZW50ID0gbG9va3VwX2NvbW1pdChwYXJlbnQpOwotCQlpZiAobmV3X3BhcmVudCkgeworCQlpZiAobmV3X3BhcmVudCkKIAkJCXBwdHIgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KG5ld19wYXJlbnQsIHBwdHIpLT5uZXh0OwotCQkJbl9yZWZzKys7Ci0JCX0KIAl9CiAJaWYgKGdyYWZ0KSB7CiAJCWludCBpOwpAQCAtMjg1LDcgKzI4MCw2IEBACiAJCQlpZiAoIW5ld19wYXJlbnQpCiAJCQkJY29udGludWU7CiAJCQlwcHRyID0gJmNvbW1pdF9saXN0X2luc2VydChuZXdfcGFyZW50LCBwcHRyKS0+bmV4dDsKLQkJCW5fcmVmcysrOwogCQl9CiAJfQogCWl0ZW0tPmRhdGUgPSBwYXJzZV9jb21taXRfZGF0ZShidWZwdHIsIHRhaWwpOwpAQCAtNDM0LDggKzQyOCw3IEBACiAJLyogTWFyayB0aGVtIGFuZCBjbGVhciB0aGUgaW5kZWdyZWUgKi8KIAlmb3IgKG5leHQgPSBvcmlnOyBuZXh0OyBuZXh0ID0gbmV4dC0+bmV4dCkgewogCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBuZXh0LT5pdGVtOwotCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBUT1BPU09SVDsKLQkJY29tbWl0LT5pbmRlZ3JlZSA9IDA7CisJCWNvbW1pdC0+aW5kZWdyZWUgPSAxOwogCX0KIAogCS8qIHVwZGF0ZSB0aGUgaW5kZWdyZWUgKi8KQEAgLTQ0NCw3ICs0MzcsNyBAQAogCQl3aGlsZSAocGFyZW50cykgewogCQkJc3RydWN0IGNvbW1pdCAqcGFyZW50ID0gcGFyZW50cy0+aXRlbTsKIAotCQkJaWYgKHBhcmVudC0+b2JqZWN0LmZsYWdzICYgVE9QT1NPUlQpCisJCQlpZiAocGFyZW50LT5pbmRlZ3JlZSkKIAkJCQlwYXJlbnQtPmluZGVncmVlKys7CiAJCQlwYXJlbnRzID0gcGFyZW50cy0+bmV4dDsKIAkJfQpAQCAtNDYyLDcgKzQ1NSw3IEBACiAJZm9yIChuZXh0ID0gb3JpZzsgbmV4dDsgbmV4dCA9IG5leHQtPm5leHQpIHsKIAkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gbmV4dC0+aXRlbTsKIAotCQlpZiAoIWNvbW1pdC0+aW5kZWdyZWUpCisJCWlmIChjb21taXQtPmluZGVncmVlID09IDEpCiAJCQlpbnNlcnQgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KGNvbW1pdCwgaW5zZXJ0KS0+bmV4dDsKIAl9CiAKQEAgLTQ4NCw3ICs0NzcsNyBAQAogCQlmb3IgKHBhcmVudHMgPSBjb21taXQtPnBhcmVudHM7IHBhcmVudHMgOyBwYXJlbnRzID0gcGFyZW50cy0+bmV4dCkgewogCQkJc3RydWN0IGNvbW1pdCAqcGFyZW50PXBhcmVudHMtPml0ZW07CiAKLQkJCWlmICghKHBhcmVudC0+b2JqZWN0LmZsYWdzICYgVE9QT1NPUlQpKQorCQkJaWYgKCFwYXJlbnQtPmluZGVncmVlKQogCQkJCWNvbnRpbnVlOwogCiAJCQkvKgpAQCAtNDkyLDcgKzQ4NSw3IEBACiAJCQkgKiB3aGVuIGFsbCB0aGVpciBjaGlsZHJlbiBoYXZlIGJlZW4gZW1pdHRlZCB0aGVyZWJ5CiAJCQkgKiBndWFyYW50ZWVpbmcgdG9wb2xvZ2ljYWwgb3JkZXIuCiAJCQkgKi8KLQkJCWlmICghLS1wYXJlbnQtPmluZGVncmVlKSB7CisJCQlpZiAoLS1wYXJlbnQtPmluZGVncmVlID09IDEpIHsKIAkJCQlpZiAoIWxpZm8pCiAJCQkJCWluc2VydF9ieV9kYXRlKHBhcmVudCwgJndvcmspOwogCQkJCWVsc2UKQEAgLTUwMyw3ICs0OTYsNyBAQAogCQkgKiB3b3JrX2l0ZW0gaXMgYSBjb21taXQgYWxsIG9mIHdob3NlIGNoaWxkcmVuCiAJCSAqIGhhdmUgYWxyZWFkeSBiZWVuIGVtaXR0ZWQuIHdlIGNhbiBlbWl0IGl0IG5vdy4KIAkJICovCi0JCWNvbW1pdC0+b2JqZWN0LmZsYWdzICY9IH5UT1BPU09SVDsKKwkJY29tbWl0LT5pbmRlZ3JlZSA9IDA7CiAJCSpwcHRyID0gd29ya19pdGVtOwogCQlwcHRyID0gJndvcmtfaXRlbS0+bmV4dDsKIAl9CmRpZmYgLS1naXQgYS9jb21taXQuaCBiL2NvbW1pdC5oCmluZGV4IDJmNjNiYzguLjJkOTRkNDEgMTAwNjQ0Ci0tLSBhL2NvbW1pdC5oCisrKyBiL2NvbW1pdC5oCkBAIC02Myw3ICs2Myw4IEBACiB9OwogCiBleHRlcm4gaW50IG5vbl9hc2NpaShpbnQpOwotZXh0ZXJuIGVudW0gY21pdF9mbXQgZ2V0X2NvbW1pdF9mb3JtYXQoY29uc3QgY2hhciAqYXJnKTsKK3N0cnVjdCByZXZfaW5mbzsgLyogaW4gcmV2aXNpb24uaCwgaXQgY2lyY3VsYXJseSB1c2VzIGVudW0gY21pdF9mbXQgKi8KK2V4dGVybiB2b2lkIGdldF9jb21taXRfZm9ybWF0KGNvbnN0IGNoYXIgKmFyZywgc3RydWN0IHJldl9pbmZvICopOwogZXh0ZXJuIHZvaWQgZm9ybWF0X2NvbW1pdF9tZXNzYWdlKGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpmb3JtYXQsIHN0cnVjdCBzdHJidWYgKnNiKTsKIGV4dGVybiB2b2lkIHByZXR0eV9wcmludF9jb21taXQoZW51bSBjbWl0X2ZtdCBmbXQsIGNvbnN0IHN0cnVjdCBjb21taXQqLApkaWZmIC0tZ2l0IGEvY29tcGF0L2ZvcGVuLmMgYi9jb21wYXQvZm9wZW4uYwppbmRleCBjY2I5ZTg5Li5iNWNhMTQyIDEwMDY0NAotLS0gYS9jb21wYXQvZm9wZW4uYworKysgYi9jb21wYXQvZm9wZW4uYwpAQCAtMSw1ICsxLDE2IEBACisvKgorICogIFRoZSBvcmRlciBvZiB0aGUgZm9sbG93aW5nIHR3byBsaW5lcyBpcyBpbXBvcnRhbnQuCisgKgorICogIEZSRUFEX1JFQURTX0RJUkVDVE9SSUVTIGlzIHVuZGVmaW5lZCBiZWZvcmUgaW5jbHVkaW5nIGdpdC1jb21wYXQtdXRpbC5oCisgKiAgdG8gYXZvaWQgdGhlIHJlZGVmaW5pdGlvbiBvZiBmb3BlbiB3aXRoaW4gZ2l0LWNvbXBhdC11dGlsLmguIFRoaXMgaXMKKyAqICBuZWNlc3Nhcnkgc2luY2UgZm9wZW4gaXMgYSBtYWNybyBvbiBzb21lIHBsYXRmb3JtcyB3aGljaCBtYXkgYmUgc2V0CisgKiAgYmFzZWQgb24gY29tcGlsZXIgb3B0aW9ucy4gRm9yIGV4YW1wbGUsIG9uIEFJWCBmb3BlbiBpcyBzZXQgdG8gZm9wZW42NAorICogIHdoZW4gX0xBUkdFX0ZJTEVTIGlzIGRlZmluZWQuIFRoZSBwcmV2aW91cyB0ZWNobmlxdWUgb2YgbWVyZWx5IHVuZGVmaW5pbmcKKyAqICBmb3BlbiBhZnRlciBpbmNsdWRpbmcgZ2l0LWNvbXBhdC11dGlsLmggaXMgaW5hZGVxdWF0ZSBpbiB0aGlzIGNhc2UuCisgKi8KKyN1bmRlZiBGUkVBRF9SRUFEU19ESVJFQ1RPUklFUwogI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgotI3VuZGVmIGZvcGVuCisKIEZJTEUgKmdpdF9mb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlKQogewogCUZJTEUgKmZwOwpkaWZmIC0tZ2l0IGEvY29uZmlnLmMgYi9jb25maWcuYwppbmRleCAwNjI0NDk0Li5iMmQ1YjRlIDEwMDY0NAotLS0gYS9jb25maWcuYworKysgYi9jb25maWcuYwpAQCAtMTExLDcgKzExMSw3IEBACiAJcmV0dXJuIGlzYWxudW0oYykgfHwgYyA9PSAnLSc7CiB9CiAKLXN0YXRpYyBpbnQgZ2V0X3ZhbHVlKGNvbmZpZ19mbl90IGZuLCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIGludCBnZXRfdmFsdWUoY29uZmlnX2ZuX3QgZm4sIHZvaWQgKmRhdGEsIGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJaW50IGM7CiAJY2hhciAqdmFsdWU7CkBAIC0xMzksNyArMTM5LDcgQEAKIAkJaWYgKCF2YWx1ZSkKIAkJCXJldHVybiAtMTsKIAl9Ci0JcmV0dXJuIGZuKG5hbWUsIHZhbHVlKTsKKwlyZXR1cm4gZm4obmFtZSwgdmFsdWUsIGRhdGEpOwogfQogCiBzdGF0aWMgaW50IGdldF9leHRlbmRlZF9iYXNlX3ZhcihjaGFyICpuYW1lLCBpbnQgYmFzZWxlbiwgaW50IGMpCkBAIC0xOTcsNyArMTk3LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgZ2l0X3BhcnNlX2ZpbGUoY29uZmlnX2ZuX3QgZm4pCitzdGF0aWMgaW50IGdpdF9wYXJzZV9maWxlKGNvbmZpZ19mbl90IGZuLCB2b2lkICpkYXRhKQogewogCWludCBjb21tZW50ID0gMDsKIAlpbnQgYmFzZWxlbiA9IDA7CkBAIC0yMjgsNyArMjI4LDcgQEAKIAkJaWYgKCFpc2FscGhhKGMpKQogCQkJYnJlYWs7CiAJCXZhcltiYXNlbGVuXSA9IHRvbG93ZXIoYyk7Ci0JCWlmIChnZXRfdmFsdWUoZm4sIHZhciwgYmFzZWxlbisxKSA8IDApCisJCWlmIChnZXRfdmFsdWUoZm4sIGRhdGEsIHZhciwgYmFzZWxlbisxKSA8IDApCiAJCQlicmVhazsKIAl9CiAJZGllKCJiYWQgY29uZmlnIGZpbGUgbGluZSAlZCBpbiAlcyIsIGNvbmZpZ19saW5lbnIsIGNvbmZpZ19maWxlX25hbWUpOwpAQCAtMzAzLDggKzMwMyw5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGdpdF9jb25maWdfYm9vbChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK2ludCBnaXRfY29uZmlnX2Jvb2xfb3JfaW50KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLCBpbnQgKmlzX2Jvb2wpCiB7CisJKmlzX2Jvb2wgPSAxOwogCWlmICghdmFsdWUpCiAJCXJldHVybiAxOwogCWlmICghKnZhbHVlKQpAQCAtMzEzLDcgKzMxNCwxNCBAQAogCQlyZXR1cm4gMTsKIAlpZiAoIXN0cmNhc2VjbXAodmFsdWUsICJmYWxzZSIpIHx8ICFzdHJjYXNlY21wKHZhbHVlLCAibm8iKSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIGdpdF9jb25maWdfaW50KG5hbWUsIHZhbHVlKSAhPSAwOworCSppc19ib29sID0gMDsKKwlyZXR1cm4gZ2l0X2NvbmZpZ19pbnQobmFtZSwgdmFsdWUpOworfQorCitpbnQgZ2l0X2NvbmZpZ19ib29sKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWludCBkaXNjYXJkOworCXJldHVybiAhIWdpdF9jb25maWdfYm9vbF9vcl9pbnQobmFtZSwgdmFsdWUsICZkaXNjYXJkKTsKIH0KIAogaW50IGdpdF9jb25maWdfc3RyaW5nKGNvbnN0IGNoYXIgKipkZXN0LCBjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQpAQCAtMzI0LDcgKzMzMiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBnaXRfZGVmYXVsdF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3N0YXRpYyBpbnQgZ2l0X2RlZmF1bHRfY29yZV9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKIHsKIAkvKiBUaGlzIG5lZWRzIGEgYmV0dGVyIG5hbWUgKi8KIAlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLmZpbGVtb2RlIikpIHsKQEAgLTM0Miw2ICszNTAsMTEgQEAKIAkJcmV0dXJuIDA7CiAJfQogCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5pZ25vcmVjYXNlIikpIHsKKwkJaWdub3JlX2Nhc2UgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwogCWlmICghc3RyY21wKHZhciwgImNvcmUuYmFyZSIpKSB7CiAJCWlzX2JhcmVfcmVwb3NpdG9yeV9jZmcgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CiAJCXJldHVybiAwOwpAQCAtNDMxLDMxICs0NDQsNiBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoIXN0cmNtcCh2YXIsICJ1c2VyLm5hbWUiKSkgewotCQlpZiAoIXZhbHVlKQotCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7Ci0JCXN0cmxjcHkoZ2l0X2RlZmF1bHRfbmFtZSwgdmFsdWUsIHNpemVvZihnaXRfZGVmYXVsdF9uYW1lKSk7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmICghc3RyY21wKHZhciwgInVzZXIuZW1haWwiKSkgewotCQlpZiAoIXZhbHVlKQotCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7Ci0JCXN0cmxjcHkoZ2l0X2RlZmF1bHRfZW1haWwsIHZhbHVlLCBzaXplb2YoZ2l0X2RlZmF1bHRfZW1haWwpKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKCFzdHJjbXAodmFyLCAiaTE4bi5jb21taXRlbmNvZGluZyIpKQotCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmdpdF9jb21taXRfZW5jb2RpbmcsIHZhciwgdmFsdWUpOwotCi0JaWYgKCFzdHJjbXAodmFyLCAiaTE4bi5sb2dvdXRwdXRlbmNvZGluZyIpKQotCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmdpdF9sb2dfb3V0cHV0X2VuY29kaW5nLCB2YXIsIHZhbHVlKTsKLQotCWlmICghc3RyY21wKHZhciwgInBhZ2VyLmNvbG9yIikgfHwgIXN0cmNtcCh2YXIsICJjb2xvci5wYWdlciIpKSB7Ci0JCXBhZ2VyX3VzZV9jb2xvciA9IGdpdF9jb25maWdfYm9vbCh2YXIsdmFsdWUpOwotCQlyZXR1cm4gMDsKLQl9Ci0KIAlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLnBhZ2VyIikpCiAJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmcGFnZXJfcHJvZ3JhbSwgdmFyLCB2YWx1ZSk7CiAKQEAgLTQ3MSw2ICs0NTksNTQgQEAKIAkJd2hpdGVzcGFjZV9ydWxlX2NmZyA9IHBhcnNlX3doaXRlc3BhY2VfcnVsZSh2YWx1ZSk7CiAJCXJldHVybiAwOwogCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUuZnN5bmNvYmplY3RmaWxlcyIpKSB7CisJCWZzeW5jX29iamVjdF9maWxlcyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogQWRkIG90aGVyIGNvbmZpZyB2YXJpYWJsZXMgaGVyZSBhbmQgdG8gRG9jdW1lbnRhdGlvbi9jb25maWcudHh0LiAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdpdF9kZWZhdWx0X3VzZXJfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKCFzdHJjbXAodmFyLCAidXNlci5uYW1lIikpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQlzdHJsY3B5KGdpdF9kZWZhdWx0X25hbWUsIHZhbHVlLCBzaXplb2YoZ2l0X2RlZmF1bHRfbmFtZSkpOworCQlpZiAoZ2l0X2RlZmF1bHRfZW1haWxbMF0pCisJCQl1c2VyX2lkZW50X2V4cGxpY2l0bHlfZ2l2ZW4gPSAxOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJ1c2VyLmVtYWlsIikpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQlzdHJsY3B5KGdpdF9kZWZhdWx0X2VtYWlsLCB2YWx1ZSwgc2l6ZW9mKGdpdF9kZWZhdWx0X2VtYWlsKSk7CisJCWlmIChnaXRfZGVmYXVsdF9uYW1lWzBdKQorCQkJdXNlcl9pZGVudF9leHBsaWNpdGx5X2dpdmVuID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogQWRkIG90aGVyIGNvbmZpZyB2YXJpYWJsZXMgaGVyZSBhbmQgdG8gRG9jdW1lbnRhdGlvbi9jb25maWcudHh0LiAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdpdF9kZWZhdWx0X2kxOG5fY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKCFzdHJjbXAodmFyLCAiaTE4bi5jb21taXRlbmNvZGluZyIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmdpdF9jb21taXRfZW5jb2RpbmcsIHZhciwgdmFsdWUpOworCisJaWYgKCFzdHJjbXAodmFyLCAiaTE4bi5sb2dvdXRwdXRlbmNvZGluZyIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmdpdF9sb2dfb3V0cHV0X2VuY29kaW5nLCB2YXIsIHZhbHVlKTsKKworCS8qIEFkZCBvdGhlciBjb25maWcgdmFyaWFibGVzIGhlcmUgYW5kIHRvIERvY3VtZW50YXRpb24vY29uZmlnLnR4dC4gKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaXRfZGVmYXVsdF9icmFuY2hfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCit7CiAJaWYgKCFzdHJjbXAodmFyLCAiYnJhbmNoLmF1dG9zZXR1cG1lcmdlIikpIHsKIAkJaWYgKHZhbHVlICYmICFzdHJjYXNlY21wKHZhbHVlLCAiYWx3YXlzIikpIHsKIAkJCWdpdF9icmFuY2hfdHJhY2sgPSBCUkFOQ0hfVFJBQ0tfQUxXQVlTOwpAQCAtNDc5LDEyICs1MTUsNTAgQEAKIAkJZ2l0X2JyYW5jaF90cmFjayA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKIAkJcmV0dXJuIDA7CiAJfQorCWlmICghc3RyY21wKHZhciwgImJyYW5jaC5hdXRvc2V0dXByZWJhc2UiKSkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJuZXZlciIpKQorCQkJYXV0b3JlYmFzZSA9IEFVVE9SRUJBU0VfTkVWRVI7CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJsb2NhbCIpKQorCQkJYXV0b3JlYmFzZSA9IEFVVE9SRUJBU0VfTE9DQUw7CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJyZW1vdGUiKSkKKwkJCWF1dG9yZWJhc2UgPSBBVVRPUkVCQVNFX1JFTU9URTsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgImFsd2F5cyIpKQorCQkJYXV0b3JlYmFzZSA9IEFVVE9SRUJBU0VfQUxXQVlTOworCQllbHNlCisJCQlyZXR1cm4gZXJyb3IoIk1hbGZvcm1lZCB2YWx1ZSBmb3IgJXMiLCB2YXIpOworCQlyZXR1cm4gMDsKKwl9CiAKIAkvKiBBZGQgb3RoZXIgY29uZmlnIHZhcmlhYmxlcyBoZXJlIGFuZCB0byBEb2N1bWVudGF0aW9uL2NvbmZpZy50eHQuICovCiAJcmV0dXJuIDA7CiB9CiAKLWludCBnaXRfY29uZmlnX2Zyb21fZmlsZShjb25maWdfZm5fdCBmbiwgY29uc3QgY2hhciAqZmlsZW5hbWUpCitpbnQgZ2l0X2RlZmF1bHRfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmR1bW15KQoreworCWlmICghcHJlZml4Y21wKHZhciwgImNvcmUuIikpCisJCXJldHVybiBnaXRfZGVmYXVsdF9jb3JlX2NvbmZpZyh2YXIsIHZhbHVlKTsKKworCWlmICghcHJlZml4Y21wKHZhciwgInVzZXIuIikpCisJCXJldHVybiBnaXRfZGVmYXVsdF91c2VyX2NvbmZpZyh2YXIsIHZhbHVlKTsKKworCWlmICghcHJlZml4Y21wKHZhciwgImkxOG4uIikpCisJCXJldHVybiBnaXRfZGVmYXVsdF9pMThuX2NvbmZpZyh2YXIsIHZhbHVlKTsKKworCWlmICghcHJlZml4Y21wKHZhciwgImJyYW5jaC4iKSkKKwkJcmV0dXJuIGdpdF9kZWZhdWx0X2JyYW5jaF9jb25maWcodmFyLCB2YWx1ZSk7CisKKwlpZiAoIXN0cmNtcCh2YXIsICJwYWdlci5jb2xvciIpIHx8ICFzdHJjbXAodmFyLCAiY29sb3IucGFnZXIiKSkgeworCQlwYWdlcl91c2VfY29sb3IgPSBnaXRfY29uZmlnX2Jvb2wodmFyLHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogQWRkIG90aGVyIGNvbmZpZyB2YXJpYWJsZXMgaGVyZSBhbmQgdG8gRG9jdW1lbnRhdGlvbi9jb25maWcudHh0LiAqLworCXJldHVybiAwOworfQorCitpbnQgZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoY29uZmlnX2ZuX3QgZm4sIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB2b2lkICpkYXRhKQogewogCWludCByZXQ7CiAJRklMRSAqZiA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOwpAQCAtNDk1LDcgKzU2OSw3IEBACiAJCWNvbmZpZ19maWxlX25hbWUgPSBmaWxlbmFtZTsKIAkJY29uZmlnX2xpbmVuciA9IDE7CiAJCWNvbmZpZ19maWxlX2VvZiA9IDA7Ci0JCXJldCA9IGdpdF9wYXJzZV9maWxlKGZuKTsKKwkJcmV0ID0gZ2l0X3BhcnNlX2ZpbGUoZm4sIGRhdGEpOwogCQlmY2xvc2UoZik7CiAJCWNvbmZpZ19maWxlX25hbWUgPSBOVUxMOwogCX0KQEAgLTUzMyw3ICs2MDcsNyBAQAogCXJldHVybiAhZ2l0X2Vudl9ib29sKCJHSVRfQ09ORklHX05PR0xPQkFMIiwgMCk7CiB9CiAKLWludCBnaXRfY29uZmlnKGNvbmZpZ19mbl90IGZuKQoraW50IGdpdF9jb25maWcoY29uZmlnX2ZuX3QgZm4sIHZvaWQgKmRhdGEpCiB7CiAJaW50IHJldCA9IDA7CiAJY2hhciAqcmVwb19jb25maWcgPSBOVUxMOwpAQCAtNTQ2LDcgKzYyMCw4IEBACiAJZmlsZW5hbWUgPSBnZXRlbnYoQ09ORklHX0VOVklST05NRU5UKTsKIAlpZiAoIWZpbGVuYW1lKSB7CiAJCWlmIChnaXRfY29uZmlnX3N5c3RlbSgpICYmICFhY2Nlc3MoZ2l0X2V0Y19naXRjb25maWcoKSwgUl9PSykpCi0JCQlyZXQgKz0gZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoZm4sIGdpdF9ldGNfZ2l0Y29uZmlnKCkpOworCQkJcmV0ICs9IGdpdF9jb25maWdfZnJvbV9maWxlKGZuLCBnaXRfZXRjX2dpdGNvbmZpZygpLAorCQkJCWRhdGEpOwogCQlob21lID0gZ2V0ZW52KCJIT01FIik7CiAJCWZpbGVuYW1lID0gZ2V0ZW52KENPTkZJR19MT0NBTF9FTlZJUk9OTUVOVCk7CiAJCWlmICghZmlsZW5hbWUpCkBAIC01NTYsMTEgKzYzMSwxMSBAQAogCWlmIChnaXRfY29uZmlnX2dsb2JhbCgpICYmIGhvbWUpIHsKIAkJY2hhciAqdXNlcl9jb25maWcgPSB4c3RyZHVwKG1rcGF0aCgiJXMvLmdpdGNvbmZpZyIsIGhvbWUpKTsKIAkJaWYgKCFhY2Nlc3ModXNlcl9jb25maWcsIFJfT0spKQotCQkJcmV0ID0gZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoZm4sIHVzZXJfY29uZmlnKTsKKwkJCXJldCA9IGdpdF9jb25maWdfZnJvbV9maWxlKGZuLCB1c2VyX2NvbmZpZywgZGF0YSk7CiAJCWZyZWUodXNlcl9jb25maWcpOwogCX0KIAotCXJldCArPSBnaXRfY29uZmlnX2Zyb21fZmlsZShmbiwgZmlsZW5hbWUpOworCXJldCArPSBnaXRfY29uZmlnX2Zyb21fZmlsZShmbiwgZmlsZW5hbWUsIGRhdGEpOwogCWZyZWUocmVwb19jb25maWcpOwogCXJldHVybiByZXQ7CiB9CkBAIC01OTAsNyArNjY1LDcgQEAKIAkJICAhcmVnZXhlYyhzdG9yZS52YWx1ZV9yZWdleCwgdmFsdWUsIDAsIE5VTEwsIDApKSk7CiB9CiAKLXN0YXRpYyBpbnQgc3RvcmVfYXV4KGNvbnN0IGNoYXIqIGtleSwgY29uc3QgY2hhciogdmFsdWUpCitzdGF0aWMgaW50IHN0b3JlX2F1eChjb25zdCBjaGFyKiBrZXksIGNvbnN0IGNoYXIqIHZhbHVlLCB2b2lkICpjYikKIHsKIAljb25zdCBjaGFyICplcDsKIAlzaXplX3Qgc2VjdGlvbl9sZW47CkBAIC01OTksMTEgKzY3NCw5IEBACiAJY2FzZSBLRVlfU0VFTjoKIAkJaWYgKG1hdGNoZXMoa2V5LCB2YWx1ZSkpIHsKIAkJCWlmIChzdG9yZS5zZWVuID09IDEgJiYgc3RvcmUubXVsdGlfcmVwbGFjZSA9PSAwKSB7Ci0JCQkJZnByaW50ZihzdGRlcnIsCi0JCQkJCSJXYXJuaW5nOiAlcyBoYXMgbXVsdGlwbGUgdmFsdWVzXG4iLAotCQkJCQlrZXkpOworCQkJCXdhcm5pbmcoIiVzIGhhcyBtdWx0aXBsZSB2YWx1ZXMiLCBrZXkpOwogCQkJfSBlbHNlIGlmIChzdG9yZS5zZWVuID49IE1BWF9NQVRDSEVTKSB7Ci0JCQkJZnByaW50ZihzdGRlcnIsICJUb28gbWFueSBtYXRjaGVzXG4iKTsKKwkJCQllcnJvcigidG9vIG1hbnkgbWF0Y2hlcyBmb3IgJXMiLCBrZXkpOwogCQkJCXJldHVybiAxOwogCQkJfQogCkBAIC02NTMsOSArNzI2LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB3cml0ZV9lcnJvcih2b2lkKQorc3RhdGljIGludCB3cml0ZV9lcnJvcihjb25zdCBjaGFyICpmaWxlbmFtZSkKIHsKLQlmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byB3cml0ZSBuZXcgY29uZmlndXJhdGlvbiBmaWxlXG4iKTsKKwllcnJvcigiZmFpbGVkIHRvIHdyaXRlIG5ldyBjb25maWd1cmF0aW9uIGZpbGUgJXMiLCBmaWxlbmFtZSk7CiAKIAkvKiBTYW1lIGVycm9yIGNvZGUgYXMgImZhaWxlZCB0byByZW5hbWUiLiAqLwogCXJldHVybiA0OwpAQCAtNjcyLDcgKzc0NSw3IEBACiAJaWYgKGRvdCkgewogCQlzdHJidWZfYWRkZigmc2IsICJbJS4qcyBcIiIsIChpbnQpKGRvdCAtIGtleSksIGtleSk7CiAJCWZvciAoaSA9IGRvdCAtIGtleSArIDE7IGkgPCBzdG9yZS5iYXNlbGVuOyBpKyspIHsKLQkJCWlmIChrZXlbaV0gPT0gJyInKQorCQkJaWYgKGtleVtpXSA9PSAnIicgfHwga2V5W2ldID09ICdcXCcpCiAJCQkJc3RyYnVmX2FkZGNoKCZzYiwgJ1xcJyk7CiAJCQlzdHJidWZfYWRkY2goJnNiLCBrZXlbaV0pOwogCQl9CkBAIC04MTQsNyArODg3LDcgQEAKIAkgKi8KIAogCWlmIChsYXN0X2RvdCA9PSBOVUxMKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAia2V5IGRvZXMgbm90IGNvbnRhaW4gYSBzZWN0aW9uOiAlc1xuIiwga2V5KTsKKwkJZXJyb3IoImtleSBkb2VzIG5vdCBjb250YWluIGEgc2VjdGlvbjogJXMiLCBrZXkpOwogCQlyZXQgPSAyOwogCQlnb3RvIG91dF9mcmVlOwogCX0KQEAgLTgzNCwxNCArOTA3LDE0IEBACiAJCS8qIExlYXZlIHRoZSBleHRlbmRlZCBiYXNlbmFtZSB1bnRvdWNoZWQuLiAqLwogCQlpZiAoIWRvdCB8fCBpID4gc3RvcmUuYmFzZWxlbikgewogCQkJaWYgKCFpc2tleWNoYXIoYykgfHwgKGkgPT0gc3RvcmUuYmFzZWxlbisxICYmICFpc2FscGhhKGMpKSkgewotCQkJCWZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBrZXk6ICVzXG4iLCBrZXkpOworCQkJCWVycm9yKCJpbnZhbGlkIGtleTogJXMiLCBrZXkpOwogCQkJCWZyZWUoc3RvcmUua2V5KTsKIAkJCQlyZXQgPSAxOwogCQkJCWdvdG8gb3V0X2ZyZWU7CiAJCQl9CiAJCQljID0gdG9sb3dlcihjKTsKIAkJfSBlbHNlIGlmIChjID09ICdcbicpIHsKLQkJCWZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBrZXkgKG5ld2xpbmUpOiAlc1xuIiwga2V5KTsKKwkJCWVycm9yKCJpbnZhbGlkIGtleSAobmV3bGluZSk6ICVzIiwga2V5KTsKIAkJCWZyZWUoc3RvcmUua2V5KTsKIAkJCXJldCA9IDE7CiAJCQlnb3RvIG91dF9mcmVlOwpAQCAtODU3LDcgKzkzMCw3IEBACiAJbG9jayA9IHhjYWxsb2Moc2l6ZW9mKHN0cnVjdCBsb2NrX2ZpbGUpLCAxKTsKIAlmZCA9IGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUobG9jaywgY29uZmlnX2ZpbGVuYW1lLCAwKTsKIAlpZiAoZmQgPCAwKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiY291bGQgbm90IGxvY2sgY29uZmlnIGZpbGVcbiIpOworCQllcnJvcigiY291bGQgbm90IGxvY2sgY29uZmlnIGZpbGUgJXMiLCBjb25maWdfZmlsZW5hbWUpOwogCQlmcmVlKHN0b3JlLmtleSk7CiAJCXJldCA9IC0xOwogCQlnb3RvIG91dF9mcmVlOwpAQCAtOTA0LDggKzk3Nyw3IEBACiAJCQlzdG9yZS52YWx1ZV9yZWdleCA9IChyZWdleF90Kil4bWFsbG9jKHNpemVvZihyZWdleF90KSk7CiAJCQlpZiAocmVnY29tcChzdG9yZS52YWx1ZV9yZWdleCwgdmFsdWVfcmVnZXgsCiAJCQkJCVJFR19FWFRFTkRFRCkpIHsKLQkJCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgcGF0dGVybjogJXNcbiIsCi0JCQkJCXZhbHVlX3JlZ2V4KTsKKwkJCQllcnJvcigiaW52YWxpZCBwYXR0ZXJuOiAlcyIsIHZhbHVlX3JlZ2V4KTsKIAkJCQlmcmVlKHN0b3JlLnZhbHVlX3JlZ2V4KTsKIAkJCQlyZXQgPSA2OwogCQkJCWdvdG8gb3V0X2ZyZWU7CkBAIC05MjIsOCArOTk0LDggQEAKIAkJICogQXMgYSBzaWRlIGVmZmVjdCwgd2UgbWFrZSBzdXJlIHRvIHRyYW5zZm9ybSBvbmx5IGEgdmFsaWQKIAkJICogZXhpc3RpbmcgY29uZmlnIGZpbGUuCiAJCSAqLwotCQlpZiAoZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoc3RvcmVfYXV4LCBjb25maWdfZmlsZW5hbWUpKSB7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgImludmFsaWQgY29uZmlnIGZpbGVcbiIpOworCQlpZiAoZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoc3RvcmVfYXV4LCBjb25maWdfZmlsZW5hbWUsIE5VTEwpKSB7CisJCQllcnJvcigiaW52YWxpZCBjb25maWcgZmlsZSAlcyIsIGNvbmZpZ19maWxlbmFtZSk7CiAJCQlmcmVlKHN0b3JlLmtleSk7CiAJCQlpZiAoc3RvcmUudmFsdWVfcmVnZXggIT0gTlVMTCkgewogCQkJCXJlZ2ZyZWUoc3RvcmUudmFsdWVfcmVnZXgpOwpAQCAtMTAwMiw3ICsxMDc0LDcgQEAKIAl9CiAKIAlpZiAoY29tbWl0X2xvY2tfZmlsZShsb2NrKSA8IDApIHsKLQkJZnByaW50ZihzdGRlcnIsICJDYW5ub3QgY29tbWl0IGNvbmZpZyBmaWxlIVxuIik7CisJCWVycm9yKCJjb3VsZCBub3QgY29tbWl0IGNvbmZpZyBmaWxlICVzIiwgY29uZmlnX2ZpbGVuYW1lKTsKIAkJcmV0ID0gNDsKIAkJZ290byBvdXRfZnJlZTsKIAl9CkBAIC0xMDIzLDcgKzEwOTUsNyBAQAogCXJldHVybiByZXQ7CiAKIHdyaXRlX2Vycl9vdXQ6Ci0JcmV0ID0gd3JpdGVfZXJyb3IoKTsKKwlyZXQgPSB3cml0ZV9lcnJvcihsb2NrLT5maWxlbmFtZSk7CiAJZ290byBvdXRfZnJlZTsKIAogfQpAQCAtMTA3Myw3ICsxMTQ1LDcgQEAKIAljb25maWdfZmlsZW5hbWUgPSB4c3RyZHVwKGNvbmZpZ19maWxlbmFtZSk7CiAJb3V0X2ZkID0gaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZShsb2NrLCBjb25maWdfZmlsZW5hbWUsIDApOwogCWlmIChvdXRfZmQgPCAwKSB7Ci0JCXJldCA9IGVycm9yKCJDb3VsZCBub3QgbG9jayBjb25maWcgZmlsZSEiKTsKKwkJcmV0ID0gZXJyb3IoImNvdWxkIG5vdCBsb2NrIGNvbmZpZyBmaWxlICVzIiwgY29uZmlnX2ZpbGVuYW1lKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0xMDk3LDcgKzExNjksNyBAQAogCQkJCX0KIAkJCQlzdG9yZS5iYXNlbGVuID0gc3RybGVuKG5ld19uYW1lKTsKIAkJCQlpZiAoIXN0b3JlX3dyaXRlX3NlY3Rpb24ob3V0X2ZkLCBuZXdfbmFtZSkpIHsKLQkJCQkJcmV0ID0gd3JpdGVfZXJyb3IoKTsKKwkJCQkJcmV0ID0gd3JpdGVfZXJyb3IobG9jay0+ZmlsZW5hbWUpOwogCQkJCQlnb3RvIG91dDsKIAkJCQl9CiAJCQkJY29udGludWU7CkBAIC0xMTA4LDE0ICsxMTgwLDE0IEBACiAJCQljb250aW51ZTsKIAkJbGVuZ3RoID0gc3RybGVuKGJ1Zik7CiAJCWlmICh3cml0ZV9pbl9mdWxsKG91dF9mZCwgYnVmLCBsZW5ndGgpICE9IGxlbmd0aCkgewotCQkJcmV0ID0gd3JpdGVfZXJyb3IoKTsKKwkJCXJldCA9IHdyaXRlX2Vycm9yKGxvY2stPmZpbGVuYW1lKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQogCWZjbG9zZShjb25maWdfZmlsZSk7CiAgdW5sb2NrX2FuZF9vdXQ6CiAJaWYgKGNvbW1pdF9sb2NrX2ZpbGUobG9jaykgPCAwKQotCQkJcmV0ID0gZXJyb3IoIkNhbm5vdCBjb21taXQgY29uZmlnIGZpbGUhIik7CisJCXJldCA9IGVycm9yKCJjb3VsZCBub3QgY29tbWl0IGNvbmZpZyBmaWxlICVzIiwgY29uZmlnX2ZpbGVuYW1lKTsKICBvdXQ6CiAJZnJlZShjb25maWdfZmlsZW5hbWUpOwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggODI1ODRlOS4uN2MyODU2ZSAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtMTU4LDcgKzE1OCw3IEBACiBBQ19TVUJTVChORUVEU19TU0xfV0lUSF9DUllQVE8pCiBBQ19TVUJTVChOT19PUEVOU1NMKQogIwotIyBEZWZpbmUgTk9fQ1VSTCBpZiB5b3UgZG8gbm90IGhhdmUgY3VybCBpbnN0YWxsZWQuICBnaXQtaHR0cC1wdWxsIGFuZAorIyBEZWZpbmUgTk9fQ1VSTCBpZiB5b3UgZG8gbm90IGhhdmUgbGliY3VybCBpbnN0YWxsZWQuICBnaXQtaHR0cC1wdWxsIGFuZAogIyBnaXQtaHR0cC1wdXNoIGFyZSBub3QgYnVpbHQsIGFuZCB5b3UgY2Fubm90IHVzZSBodHRwOi8vIGFuZCBodHRwczovLwogIyB0cmFuc3BvcnRzLgogQUNfQ0hFQ0tfTElCKFtjdXJsXSwgW2N1cmxfZ2xvYmFsX2luaXRdLApkaWZmIC0tZ2l0IGEvY29ubmVjdC5jIGIvY29ubmVjdC5jCmluZGV4IGQxMmIxMDUuLmU5MmFmMjkgMTAwNjQ0Ci0tLSBhL2Nvbm5lY3QuYworKysgYi9jb25uZWN0LmMKQEAgLTM2MCw3ICszNjAsOCBAQAogc3RhdGljIGNvbnN0IGNoYXIgKnJob3N0X25hbWU7CiBzdGF0aWMgaW50IHJob3N0X2xlbjsKIAotc3RhdGljIGludCBnaXRfcHJveHlfY29tbWFuZF9vcHRpb25zKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCitzdGF0aWMgaW50IGdpdF9wcm94eV9jb21tYW5kX29wdGlvbnMoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwKKwkJdm9pZCAqY2IpCiB7CiAJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5naXRwcm94eSIpKSB7CiAJCWNvbnN0IGNoYXIgKmZvcl9wb3M7CkBAIC00MDQsNyArNDA1LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlKTsKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKIH0KIAogc3RhdGljIGludCBnaXRfdXNlX3Byb3h5KGNvbnN0IGNoYXIgKmhvc3QpCkBAIC00MTIsNyArNDEzLDcgQEAKIAlyaG9zdF9uYW1lID0gaG9zdDsKIAlyaG9zdF9sZW4gPSBzdHJsZW4oaG9zdCk7CiAJZ2l0X3Byb3h5X2NvbW1hbmQgPSBnZXRlbnYoIkdJVF9QUk9YWV9DT01NQU5EIik7Ci0JZ2l0X2NvbmZpZyhnaXRfcHJveHlfY29tbWFuZF9vcHRpb25zKTsKKwlnaXRfY29uZmlnKGdpdF9wcm94eV9jb21tYW5kX29wdGlvbnMsIE5VTEwpOwogCXJob3N0X25hbWUgPSBOVUxMOwogCXJldHVybiAoZ2l0X3Byb3h5X2NvbW1hbmQgJiYgKmdpdF9wcm94eV9jb21tYW5kKTsKIH0KZGlmZiAtLWdpdCBhL2NvbnRyaWIvY29tcGxldGlvbi9naXQtY29tcGxldGlvbi5iYXNoIGIvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2gKaW5kZXggNjk0OWNhYy4uNzJmMDJmMiAxMDA3NTUKLS0tIGEvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2gKKysrIGIvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2gKQEAgLTQ1LDYgKzQ1LDExIEBACiAjICAgICAgIGdpdEB2Z2VyLmtlcm5lbC5vcmcKICMKIAorY2FzZSAiJENPTVBfV09SREJSRUFLUyIgaW4KKyo6KikgOiBncmVhdCA7OworKikgICBDT01QX1dPUkRCUkVBS1M9IiRDT01QX1dPUkRCUkVBS1M6IgorZXNhYworCiBfX2dpdGRpciAoKQogewogCWlmIFsgLXogIiQxIiBdOyB0aGVuCkBAIC0xMTQsOSArMTE5LDIwIEBACiAJZmkKIH0KIAorX19naXRjb21wXzEgKCkKK3sKKwlsb2NhbCBjIElGUz0nICckJ1x0JyQnXG4nCisJZm9yIGMgaW4gJDE7IGRvCisJCWNhc2UgIiRjJDIiIGluCisJCS0tKj0qKSBwcmludGYgJXMkJ1xuJyAiJGMkMiIgOzsKKwkJKi4pICAgIHByaW50ZiAlcyQnXG4nICIkYyQyIiA7OworCQkqKSAgICAgcHJpbnRmICVzJCdcbicgIiRjJDIgIiA7OworCQllc2FjCisJZG9uZQorfQorCiBfX2dpdGNvbXAgKCkKIHsKLQlsb2NhbCBhbGwgYyBzPSQnXG4nIElGUz0nICckJ1x0JyQnXG4nCiAJbG9jYWwgY3VyPSIke0NPTVBfV09SRFNbQ09NUF9DV09SRF19IgogCWlmIFsgJCMgLWd0IDIgXTsgdGhlbgogCQljdXI9IiQzIgpAQCAtMTI0LDIxICsxNDAsMTQgQEAKIAljYXNlICIkY3VyIiBpbgogCS0tKj0pCiAJCUNPTVBSRVBMWT0oKQotCQlyZXR1cm4KIAkJOzsKIAkqKQotCQlmb3IgYyBpbiAkMTsgZG8KLQkJCWNhc2UgIiRjJDQiIGluCi0JCQktLSo9KikgYWxsPSIkYWxsJGMkNCRzIiA7OwotCQkJKi4pICAgIGFsbD0iJGFsbCRjJDQkcyIgOzsKLQkJCSopICAgICBhbGw9IiRhbGwkYyQ0ICRzIiA7OwotCQkJZXNhYwotCQlkb25lCisJCWxvY2FsIElGUz0kJ1xuJworCQlDT01QUkVQTFk9KCQoY29tcGdlbiAtUCAiJDIiIFwKKwkJCS1XICIkKF9fZ2l0Y29tcF8xICIkMSIgIiQ0IikiIFwKKwkJCS0tICIkY3VyIikpCiAJCTs7CiAJZXNhYwotCUlGUz0kcwotCUNPTVBSRVBMWT0oJChjb21wZ2VuIC1QICIkMiIgLVcgIiRhbGwiIC0tICIkY3VyIikpCi0JcmV0dXJuCiB9CiAKIF9fZ2l0X2hlYWRzICgpCkBAIC0xNTIsNyArMTYxLDcgQEAKIAkJZG9uZQogCQlyZXR1cm4KIAlmaQotCWZvciBpIGluICQoZ2l0LWxzLXJlbW90ZSAiJDEiIDI+L2Rldi9udWxsKTsgZG8KKwlmb3IgaSBpbiAkKGdpdCBscy1yZW1vdGUgIiQxIiAyPi9kZXYvbnVsbCk7IGRvCiAJCWNhc2UgIiRpc19oYXNoLCRpIiBpbgogCQl5LCopIGlzX2hhc2g9biA7OwogCQluLCpee30pIGlzX2hhc2g9eSA7OwpAQCAtMTczLDcgKzE4Miw3IEBACiAJCWRvbmUKIAkJcmV0dXJuCiAJZmkKLQlmb3IgaSBpbiAkKGdpdC1scy1yZW1vdGUgIiQxIiAyPi9kZXYvbnVsbCk7IGRvCisJZm9yIGkgaW4gJChnaXQgbHMtcmVtb3RlICIkMSIgMj4vZGV2L251bGwpOyBkbwogCQljYXNlICIkaXNfaGFzaCwkaSIgaW4KIAkJeSwqKSBpc19oYXNoPW4gOzsKIAkJbiwqXnt9KSBpc19oYXNoPXkgOzsKQEAgLTIwMCw3ICsyMDksNyBAQAogCQlkb25lCiAJCXJldHVybgogCWZpCi0JZm9yIGkgaW4gJChnaXQtbHMtcmVtb3RlICIkZGlyIiAyPi9kZXYvbnVsbCk7IGRvCisJZm9yIGkgaW4gJChnaXQgbHMtcmVtb3RlICIkZGlyIiAyPi9kZXYvbnVsbCk7IGRvCiAJCWNhc2UgIiRpc19oYXNoLCRpIiBpbgogCQl5LCopIGlzX2hhc2g9biA7OwogCQluLCpee30pIGlzX2hhc2g9eSA7OwpAQCAtMjIzLDcgKzIzMiw3IEBACiBfX2dpdF9yZWZzX3JlbW90ZXMgKCkKIHsKIAlsb2NhbCBjbWQgaSBpc19oYXNoPXkKLQlmb3IgaSBpbiAkKGdpdC1scy1yZW1vdGUgIiQxIiAyPi9kZXYvbnVsbCk7IGRvCisJZm9yIGkgaW4gJChnaXQgbHMtcmVtb3RlICIkMSIgMj4vZGV2L251bGwpOyBkbwogCQljYXNlICIkaXNfaGFzaCwkaSIgaW4KIAkJbixyZWZzL2hlYWRzLyopCiAJCQlpc19oYXNoPXkKQEAgLTI5MCw5ICsyOTksMjMgQEAKIAkJCWxzPSIkcmVmIgogCQkJOzsKIAkgICAgZXNhYworCisJCWNhc2UgIiRDT01QX1dPUkRCUkVBS1MiIGluCisJCSo6KikgOiBncmVhdCA7OworCQkqKSAgIHBmeD0iJHJlZjokcGZ4IiA7OworCQllc2FjCisKKwkJbG9jYWwgSUZTPSQnXG4nCiAJCUNPTVBSRVBMWT0oJChjb21wZ2VuIC1QICIkcGZ4IiBcCiAJCQktVyAiJChnaXQgLS1naXQtZGlyPSIkKF9fZ2l0ZGlyKSIgbHMtdHJlZSAiJGxzIiBcCi0JCQkJfCBzZWQgJy9eMTAwLi4uIGJsb2IgL3MsXi4qCSwsCisJCQkJfCBzZWQgJy9eMTAwLi4uIGJsb2IgL3sKKwkJCQkgICAgICAgICAgIHMsXi4qCSwsCisJCQkJICAgICAgICAgICBzLCQsICwKKwkJCQkgICAgICAgfQorCQkJCSAgICAgICAvXjEyMDAwMCBibG9iIC97CisJCQkJICAgICAgICAgICBzLF4uKgksLAorCQkJCSAgICAgICAgICAgcywkLCAsCisJCQkJICAgICAgIH0KIAkJCQkgICAgICAgL14wNDAwMDAgdHJlZSAvewogCQkJCSAgICAgICAgICAgcyxeLioJLCwKIAkJCQkgICAgICAgICAgIHMsJCwvLApAQCAtMzIwLDkgKzM0Myw2IEBACiAJCWN1cj0iJHtjdXIjKi4ufSIKIAkJX19naXRjb21wICIkKF9fZ2l0X3JlZnMpIiAiJHBmeCIgIiRjdXIiCiAJCTs7Ci0JKi4pCi0JCV9fZ2l0Y29tcCAiJGN1ci4iCi0JCTs7CiAJKikKIAkJX19naXRjb21wICIkKF9fZ2l0X3JlZnMpIgogCQk7OwpAQCAtNDUxLDYgKzQ3MSwxOCBAQAogCWRvbmUKIH0KIAorX19naXRfaGFzX2RvdWJsZWRhc2ggKCkKK3sKKwlsb2NhbCBjPTEKKwl3aGlsZSBbICRjIC1sdCAkQ09NUF9DV09SRCBdOyBkbworCQlpZiBbICItLSIgPSAiJHtDT01QX1dPUkRTW2NdfSIgXTsgdGhlbgorCQkJcmV0dXJuIDAKKwkJZmkKKwkJYz0kKCgrK2MpKQorCWRvbmUKKwlyZXR1cm4gMQorfQorCiBfX2dpdF93aGl0ZXNwYWNlbGlzdD0ibm93YXJuIHdhcm4gZXJyb3IgZXJyb3ItYWxsIHN0cmlwIgogCiBfZ2l0X2FtICgpCkBAIC00OTcsMTAgKzUyOSwxNSBAQAogCiBfZ2l0X2FkZCAoKQogeworCV9fZ2l0X2hhc19kb3VibGVkYXNoICYmIHJldHVybgorCiAJbG9jYWwgY3VyPSIke0NPTVBfV09SRFNbQ09NUF9DV09SRF19IgogCWNhc2UgIiRjdXIiIGluCiAJLS0qKQotCQlfX2dpdGNvbXAgIi0taW50ZXJhY3RpdmUgLS1yZWZyZXNoIgorCQlfX2dpdGNvbXAgIgorCQkJLS1pbnRlcmFjdGl2ZSAtLXJlZnJlc2ggLS1wYXRjaCAtLXVwZGF0ZSAtLWRyeS1ydW4KKwkJCS0taWdub3JlLWVycm9ycworCQkJIgogCQlyZXR1cm4KIAllc2FjCiAJQ09NUFJFUExZPSgpCkBAIC01MDgsNiArNTQ1LDggQEAKIAogX2dpdF9iaXNlY3QgKCkKIHsKKwlfX2dpdF9oYXNfZG91YmxlZGFzaCAmJiByZXR1cm4KKwogCWxvY2FsIHN1YmNvbW1hbmRzPSJzdGFydCBiYWQgZ29vZCByZXNldCB2aXN1YWxpemUgcmVwbGF5IGxvZyIKIAlsb2NhbCBzdWJjb21tYW5kPSIkKF9fZ2l0X2ZpbmRfc3ViY29tbWFuZCAiJHN1YmNvbW1hbmRzIikiCiAJaWYgWyAteiAiJHN1YmNvbW1hbmQiIF07IHRoZW4KQEAgLTYxMCw2ICs2NDksOCBAQAogCiBfZ2l0X2NvbW1pdCAoKQogeworCV9fZ2l0X2hhc19kb3VibGVkYXNoICYmIHJldHVybgorCiAJbG9jYWwgY3VyPSIke0NPTVBfV09SRFNbQ09NUF9DV09SRF19IgogCWNhc2UgIiRjdXIiIGluCiAJLS0qKQpAQCAtNjI5LDYgKzY3MCw4IEBACiAKIF9naXRfZGlmZiAoKQogeworCV9fZ2l0X2hhc19kb3VibGVkYXNoICYmIHJldHVybgorCiAJbG9jYWwgY3VyPSIke0NPTVBfV09SRFNbQ09NUF9DV09SRF19IgogCWNhc2UgIiRjdXIiIGluCiAJLS0qKQpAQCAtNjY4LDcgKzcxMSwxMiBAQAogCSopCiAJCWNhc2UgIiRjdXIiIGluCiAJCSo6KikKLQkJCV9fZ2l0Y29tcCAiJChfX2dpdF9yZWZzKSIgIiIgIiR7Y3VyIyo6fSIKKwkJCWxvY2FsIHBmeD0iIgorCQkJY2FzZSAiJENPTVBfV09SREJSRUFLUyIgaW4KKwkJCSo6KikgOiBncmVhdCA7OworCQkJKikgICBwZng9IiR7Y3VyJSU6Kn06IiA7OworCQkJZXNhYworCQkJX19naXRjb21wICIkKF9fZ2l0X3JlZnMpIiAiJHBmeCIgIiR7Y3VyIyo6fSIKIAkJCTs7CiAJCSopCiAJCQlsb2NhbCByZW1vdGUKQEAgLTczMSw2ICs3NzksOCBAQAogCiBfZ2l0X2xvZyAoKQogeworCV9fZ2l0X2hhc19kb3VibGVkYXNoICYmIHJldHVybgorCiAJbG9jYWwgY3VyPSIke0NPTVBfV09SRFNbQ09NUF9DV09SRF19IgogCWNhc2UgIiRjdXIiIGluCiAJLS1wcmV0dHk9KikKQEAgLTc1OCw2ICs4MDgsNyBAQAogCQkJLS1wcmV0dHk9IC0tbmFtZS1zdGF0dXMgLS1uYW1lLW9ubHkgLS1yYXcKIAkJCS0tbm90IC0tYWxsCiAJCQktLWxlZnQtcmlnaHQgLS1jaGVycnktcGljaworCQkJLS1ncmFwaAogCQkJIgogCQlyZXR1cm4KIAkJOzsKQEAgLTc4MCw3ICs4MzEsNyBAQAogCQk7OwogCS0tKikKIAkJX19naXRjb21wICIKLQkJCS0tbm8tY29tbWl0IC0tbm8tc3VtbWFyeSAtLXNxdWFzaCAtLXN0cmF0ZWd5CisJCQktLW5vLWNvbW1pdCAtLW5vLXN0YXQgLS1sb2cgLS1uby1sb2cgLS1zcXVhc2ggLS1zdHJhdGVneQogCQkJIgogCQlyZXR1cm4KIAllc2FjCkBAIC04MzgsNyArODg5LDE0IEBACiAJCQlnaXQtcHVzaCkgIHJlbW90ZT0iJHtDT01QX1dPUkRTWzFdfSIgOzsKIAkJCWdpdCkgICAgICAgcmVtb3RlPSIke0NPTVBfV09SRFNbMl19IiA7OwogCQkJZXNhYwotCQkJX19naXRjb21wICIkKF9fZ2l0X3JlZnMgIiRyZW1vdGUiKSIgIiIgIiR7Y3VyIyo6fSIKKworCQkJbG9jYWwgcGZ4PSIiCisJCQljYXNlICIkQ09NUF9XT1JEQlJFQUtTIiBpbgorCQkJKjoqKSA6IGdyZWF0IDs7CisJCQkqKSAgIHBmeD0iJHtjdXIlJToqfToiIDs7CisJCQllc2FjCisKKwkJCV9fZ2l0Y29tcCAiJChfX2dpdF9yZWZzICIkcmVtb3RlIikiICIkcGZ4IiAiJHtjdXIjKjp9IgogCQkJOzsKIAkJKyopCiAJCQlfX2dpdGNvbXAgIiQoX19naXRfcmVmcykiICsgIiR7Y3VyIyt9IgpAQCAtMTA1Myw2ICsxMTExLDcgQEAKIAlsb2NhbCBzdWJjb21tYW5kcz0iYWRkIHJtIHNob3cgcHJ1bmUgdXBkYXRlIgogCWxvY2FsIHN1YmNvbW1hbmQ9IiQoX19naXRfZmluZF9zdWJjb21tYW5kICIkc3ViY29tbWFuZHMiKSIKIAlpZiBbIC16ICIkc3ViY29tbWFuZCIgXTsgdGhlbgorCQlfX2dpdGNvbXAgIiRzdWJjb21tYW5kcyIKIAkJcmV0dXJuCiAJZmkKIApAQCAtMTA4MCw2ICsxMTM5LDggQEAKIAogX2dpdF9yZXNldCAoKQogeworCV9fZ2l0X2hhc19kb3VibGVkYXNoICYmIHJldHVybgorCiAJbG9jYWwgY3VyPSIke0NPTVBfV09SRFNbQ09NUF9DV09SRF19IgogCWNhc2UgIiRjdXIiIGluCiAJLS0qKQpAQCAtMTA5Miw2ICsxMTUzLDggQEAKIAogX2dpdF9zaG9ydGxvZyAoKQogeworCV9fZ2l0X2hhc19kb3VibGVkYXNoICYmIHJldHVybgorCiAJbG9jYWwgY3VyPSIke0NPTVBfV09SRFNbQ09NUF9DV09SRF19IgogCWNhc2UgIiRjdXIiIGluCiAJLS0qKQpAQCAtMTEzOCw2ICsxMjAxLDggQEAKIAogX2dpdF9zdWJtb2R1bGUgKCkKIHsKKwlfX2dpdF9oYXNfZG91YmxlZGFzaCAmJiByZXR1cm4KKwogCWxvY2FsIHN1YmNvbW1hbmRzPSJhZGQgc3RhdHVzIGluaXQgdXBkYXRlIgogCWlmIFsgLXogIiQoX19naXRfZmluZF9zdWJjb21tYW5kICIkc3ViY29tbWFuZHMiKSIgXTsgdGhlbgogCQlsb2NhbCBjdXI9IiR7Q09NUF9XT1JEU1tDT01QX0NXT1JEXX0iCkBAIC0xMzQ0LDEwICsxNDA5LDE3IEBACiAKIF9naXRrICgpCiB7CisJX19naXRfaGFzX2RvdWJsZWRhc2ggJiYgcmV0dXJuCisKIAlsb2NhbCBjdXI9IiR7Q09NUF9XT1JEU1tDT01QX0NXT1JEXX0iCisJbG9jYWwgZz0iJChnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpciAyPi9kZXYvbnVsbCkiCisJbG9jYWwgbWVyZ2U9IiIKKwlpZiBbIC1mICRnL01FUkdFX0hFQUQgXTsgdGhlbgorCQltZXJnZT0iLS1tZXJnZSIKKwlmaQogCWNhc2UgIiRjdXIiIGluCiAJLS0qKQotCQlfX2dpdGNvbXAgIi0tbm90IC0tYWxsIgorCQlfX2dpdGNvbXAgIi0tbm90IC0tYWxsICRtZXJnZSIKIAkJcmV0dXJuCiAJCTs7CiAJZXNhYwpkaWZmIC0tZ2l0IGEvZ2l0LWNsb25lLnNoIGIvY29udHJpYi9leGFtcGxlcy9naXQtY2xvbmUuc2gKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gZ2l0LWNsb25lLnNoCnJlbmFtZSB0byBjb250cmliL2V4YW1wbGVzL2dpdC1jbG9uZS5zaAppbmRleCA4YzdmYzdmLi41NDcyMjhlIDEwMDc1NQotLS0gYS9naXQtY2xvbmUuc2gKKysrIGIvY29udHJpYi9leGFtcGxlcy9naXQtY2xvbmUuc2gKQEAgLTI0MCw3ICsyNDAsNiBAQAogRD0KIFc9CiBjbGVhbnVwKCkgewotCWVycj0kPwogCXRlc3QgLXogIiREIiAmJiBybSAtcmYgIiRkaXIiCiAJdGVzdCAteiAiJFciICYmIHRlc3QgLW4gIiRHSVRfV09SS19UUkVFIiAmJiBybSAtcmYgIiRHSVRfV09SS19UUkVFIgogCWNkIC4uCkBAIC0yNDgsNyArMjQ3LDcgQEAKIAl0ZXN0IC1uICIkVyIgJiYgcm0gLXJmICIkVyIKIAlleGl0ICRlcnIKIH0KLXRyYXAgY2xlYW51cCAwCit0cmFwICdlcnI9JD87IGNsZWFudXAnIDAKIG1rZGlyIC1wICIkZGlyIiAmJiBEPSQoY2QgIiRkaXIiICYmIHB3ZCkgfHwgdXNhZ2UKIHRlc3QgLW4gIiRHSVRfV09SS19UUkVFIiAmJiBta2RpciAtcCAiJEdJVF9XT1JLX1RSRUUiICYmCiBXPSQoY2QgIiRHSVRfV09SS19UUkVFIiAmJiBwd2QpICYmIEdJVF9XT1JLX1RSRUU9IiRXIiAmJiBleHBvcnQgR0lUX1dPUktfVFJFRQpAQCAtMzM0LDcgKzMzMywxMCBAQAogCQkJZmkKIAkJZmkgJiYKIAkJY2QgIiRyZXBvIiAmJgotCQlmaW5kIG9iamVjdHMgLWRlcHRoIC1wcmludCB8IGNwaW8gJGNwaW9fcXVpZXRfZmxhZyAtcHVtZCRsICIkR0lUX0RJUi8iIHx8IFwKKwkJIyBDcmVhdGUgZGlycyB1c2luZyB1bWFzayBhbmQgcGVybWlzc2lvbnMgYW5kIGRlc3RpbmF0aW9uCisJCWZpbmQgb2JqZWN0cyAtdHlwZSBkIC1wcmludCB8IChjZCAiJEdJVF9ESVIiICYmIHhhcmdzIG1rZGlyIC1wKSAmJgorCQkjIENvcHkgZXhpc3RpbmcgMDQ0NCBwZXJtaXNzaW9ucyBvbiBjb250ZW50CisJCWZpbmQgb2JqZWN0cyAhIC10eXBlIGQgLXByaW50IHwgY3BpbyAkY3Bpb19xdWlldF9mbGFnIC1wdW1kJGwgIiRHSVRfRElSLyIgfHwgXAogCQkJZXhpdCAxCiAJZmkKIAlnaXQtbHMtcmVtb3RlICIkcmVwbyIgPiIkR0lUX0RJUi9DTE9ORV9IRUFEIiB8fCBleGl0IDEKZGlmZiAtLWdpdCBhL2NvbnRyaWIvaGctdG8tZ2l0L2hnLXRvLWdpdC5weSBiL2NvbnRyaWIvaGctdG8tZ2l0L2hnLXRvLWdpdC5weQppbmRleCBkNzJmZmJiLi5mNjhlZjcyIDEwMDc1NQotLS0gYS9jb250cmliL2hnLXRvLWdpdC9oZy10by1naXQucHkKKysrIGIvY29udHJpYi9oZy10by1naXQvaGctdG8tZ2l0LnB5CkBAIC00Niw2ICs0Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGluY3JlbWVudGFscwogICAgIC1uLCAtLW5yZXBhY2s9SU5UOiAgIG51bWJlciBvZiBjaGFuZ2VzZXRzIHRoYXQgd2lsbCB0cmlnZ2VyCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSByZXBhY2sgKGRlZmF1bHQ9MCwgLTEgdG8gZGVhY3RpdmF0ZSkKKyAgICAtdiwgLS12ZXJib3NlOiAgICAgICBiZSB2ZXJib3NlCiAKIHJlcXVpcmVkOgogICAgIGhncHJqOiAgbmFtZSBvZiB0aGUgSEcgcHJvamVjdCB0byBpbXBvcnQgKGRpcmVjdG9yeSkKQEAgLTc1LDE1ICs3NiwxOCBAQAogCiBzdGF0ZSA9ICcnCiBvcHRfbnJlcGFjayA9IDAKK3ZlcmJvc2UgPSBGYWxzZQogCiB0cnk6Ci0gICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAnczp0Om46JywgWydnaXRzdGF0ZT0nLCAndGVtcGRpcj0nLCAnbnJlcGFjaz0nXSkKKyAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICdzOnQ6bjp2JywgWydnaXRzdGF0ZT0nLCAndGVtcGRpcj0nLCAnbnJlcGFjaz0nLCAndmVyYm9zZSddKQogICAgIGZvciBvLCBhIGluIG9wdHM6CiAgICAgICAgIGlmIG8gaW4gKCctcycsICctLWdpdHN0YXRlJyk6CiAgICAgICAgICAgICBzdGF0ZSA9IGEKICAgICAgICAgICAgIHN0YXRlID0gb3MucGF0aC5hYnNwYXRoKHN0YXRlKQogICAgICAgICBpZiBvIGluICgnLW4nLCAnLS1ucmVwYWNrJyk6CiAgICAgICAgICAgICBvcHRfbnJlcGFjayA9IGludChhKQorICAgICAgICBpZiBvIGluICgnLXYnLCAnLS12ZXJib3NlJyk6CisgICAgICAgICAgICB2ZXJib3NlID0gVHJ1ZQogICAgIGlmIGxlbihhcmdzKSAhPSAxOgogICAgICAgICByYWlzZSgncGFyYW1zJykKIGV4Y2VwdDoKQEAgLTk1LDE3ICs5OSwyMCBAQAogCiBpZiBzdGF0ZToKICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzdGF0ZSk6Ci0gICAgICAgIHByaW50ICdTdGF0ZSBkb2VzIGV4aXN0LCByZWFkaW5nJworICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJ1N0YXRlIGRvZXMgZXhpc3QsIHJlYWRpbmcnCiAgICAgICAgIGYgPSBvcGVuKHN0YXRlLCAncicpCiAgICAgICAgIGhndmVycyA9IHBpY2tsZS5sb2FkKGYpCiAgICAgZWxzZToKICAgICAgICAgcHJpbnQgJ1N0YXRlIGRvZXMgbm90IGV4aXN0LCBmaXJzdCBydW4nCiAKIHRpcCA9IG9zLnBvcGVuKCdoZyB0aXAgLS10ZW1wbGF0ZSAie3Jldn0iJykucmVhZCgpCi1wcmludCAndGlwIGlzJywgdGlwCitpZiB2ZXJib3NlOgorICAgIHByaW50ICd0aXAgaXMnLCB0aXAKIAogIyBDYWxjdWxhdGUgdGhlIGJyYW5jaGVzCi1wcmludCAnYW5hbHlzaW5nIHRoZSBicmFuY2hlcy4uLicKK2lmIHZlcmJvc2U6CisgICAgcHJpbnQgJ2FuYWx5c2luZyB0aGUgYnJhbmNoZXMuLi4nCiBoZ2NoaWxkcmVuWyIwIl0gPSAoKQogaGdwYXJlbnRzWyIwIl0gPSAoTm9uZSwgTm9uZSkKIGhnYnJhbmNoWyIwIl0gPSAibWFzdGVyIgpAQCAtMjMyLDcgKzIzOSw4IEBACiAKICMgd3JpdGUgdGhlIHN0YXRlIGZvciBpbmNyZW1lbnRhbHMKIGlmIHN0YXRlOgotICAgIHByaW50ICdXcml0aW5nIHN0YXRlJworICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHByaW50ICdXcml0aW5nIHN0YXRlJwogICAgIGYgPSBvcGVuKHN0YXRlLCAndycpCiAgICAgcGlja2xlLmR1bXAoaGd2ZXJzLCBmKQogCmRpZmYgLS1naXQgYS9jb250cmliL2hvb2tzL3ByZS1hdXRvLWdjLWJhdHRlcnkgYi9jb250cmliL2hvb2tzL3ByZS1hdXRvLWdjLWJhdHRlcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA5NmY1NwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvaG9va3MvcHJlLWF1dG8tZ2MtYmF0dGVyeQpAQCAtMCwwICsxLDM2IEBACisjIS9iaW4vc2gKKyMKKyMgQW4gZXhhbXBsZSBob29rIHNjcmlwdCB0byB2ZXJpZnkgaWYgeW91IGFyZSBvbiBiYXR0ZXJ5LCBpbiBjYXNlIHlvdQorIyBhcmUgcnVubmluZyBMaW51eC4gQ2FsbGVkIGJ5IGdpdC1nYyAtLWF1dG8gd2l0aCBubyBhcmd1bWVudHMuIFRoZSBob29rCisjIHNob3VsZCBleGl0IHdpdGggbm9uLXplcm8gc3RhdHVzIGFmdGVyIGlzc3VpbmcgYW4gYXBwcm9wcmlhdGUgbWVzc2FnZQorIyBpZiBpdCB3YW50cyB0byBzdG9wIHRoZSBhdXRvIHJlcGFja2luZy4KKyMKKyMgVGhpcyBob29rIGlzIHN0b3JlZCBpbiB0aGUgY29udHJpYi9ob29rcyBkaXJlY3RvcnkuIFlvdXIgZGlzdHJpYnV0aW9uCisjIG1heSBoYXZlIHB1dCB0aGlzIHNvbWV3aGVyZSBlbHNlLiBJZiB5b3Ugd2FudCB0byB1c2UgdGhpcyBob29rLCB5b3UKKyMgc2hvdWxkIG1ha2UgdGhpcyBzY3JpcHQgZXhlY3V0YWJsZSB0aGVuIGxpbmsgdG8gaXQgaW4gdGhlIHJlcG9zaXRvcnkKKyMgeW91IHdvdWxkIGxpa2UgdG8gdXNlIGl0IGluLgorIworIyBGb3IgZXhhbXBsZSwgaWYgdGhlIGhvb2sgaXMgc3RvcmVkIGluCisjIC91c3Ivc2hhcmUvZ2l0LWNvcmUvY29udHJpYi9ob29rcy9wcmUtYXV0by1nYy1iYXR0ZXJ5OgorIworIyBjaG1vZCBhK3ggcHJlLWF1dG8tZ2MtYmF0dGVyeQorIyBjZCAvcGF0aC90by95b3VyL3JlcG9zaXRvcnkuZ2l0CisjIGxuIC1zZiAvdXNyL3NoYXJlL2dpdC1jb3JlL2NvbnRyaWIvaG9va3MvcHJlLWF1dG8tZ2MtYmF0dGVyeSBcCisjCWhvb2tzL3ByZS1hdXRvLWdjCisKK2lmIHRlc3QgLXggL3NiaW4vb25fYWNfcG93ZXIgJiYgL3NiaW4vb25fYWNfcG93ZXIKK3RoZW4KKwlleGl0IDAKK2VsaWYgdGVzdCAiJChjYXQgL3N5cy9jbGFzcy9wb3dlcl9zdXBwbHkvQUMvb25saW5lIDI+L2Rldi9udWxsKSIgPSAxCit0aGVuCisJZXhpdCAwCitlbGlmIGdyZXAgLXEgJ29uLWxpbmUnIC9wcm9jL2FjcGkvYWNfYWRhcHRlci9BQy9zdGF0ZSAyPi9kZXYvbnVsbAordGhlbgorCWV4aXQgMAorZWxpZiBncmVwIC1xICcweDAxJCcgL3Byb2MvYXBtIDI+L2Rldi9udWxsCit0aGVuCisJZXhpdCAwCitmaQorCitlY2hvICJBdXRvIHBhY2tpbmcgZGVmZXJyZWQ7IG5vdCBvbiBBQyIKK2V4aXQgMQpkaWZmIC0tZ2l0IGEvY29udHJpYi9ob29rcy91cGRhdGUtcGFyYW5vaWQgYi9jb250cmliL2hvb2tzL3VwZGF0ZS1wYXJhbm9pZAppbmRleCAwNjhmYTM3Li5kMThiMzE3IDEwMDY0NAotLS0gYS9jb250cmliL2hvb2tzL3VwZGF0ZS1wYXJhbm9pZAorKysgYi9jb250cmliL2hvb2tzL3VwZGF0ZS1wYXJhbm9pZApAQCAtMTM2LDYgKzEzNiw3IEBACiAJbG9jYWwgJEVOVntHSVRfRElSfSA9IHNoaWZ0OwogCW15ICRiciA9IHNoaWZ0OwogCW15ICRmbiA9IHNoaWZ0OworCXJldHVybiB1bmxlc3MgZ2l0X3ZhbHVlKCdyZXYtbGlzdCcsJy0tbWF4LWNvdW50PTEnLCRiciwnLS0nLCRmbik7CiAJaW5mbyAiTG9hZGluZyAkYnI6JGZuIjsKIAlvcGVuKEksJy18JywnZ2l0JywnY2F0LWZpbGUnLCdibG9iJywiJGJyOiRmbiIpOwogCW15ICRzZWN0aW9uID0gJyc7CkBAIC0yMjUsMTQgKzIyNiwxMiBAQAogCQlsb2NhbCAkLyA9ICJcMCI7CiAJCW15ICV0aGlzX2RpZmY7CiAJCWlmICgkYmFzZSA9fiAvXjB7NDB9JC8pIHsKLQkJCW9wZW4oVCwnLXwnLCdnaXQnLCdscy10cmVlJywKLQkJCQknLXInLCctLW5hbWUtb25seScsJy16JywKLQkJCQkkbmV3KSBvciByZXR1cm4gdW5kZWY7Ci0JCQl3aGlsZSAoPFQ+KSB7Ci0JCQkJY2hvcDsKLQkJCQkkdGhpc19kaWZmeyRffSA9ICdBJzsKLQkJCX0KLQkJCWNsb3NlIFQgb3IgcmV0dXJuIHVuZGVmOworCQkJIyBEb24ndCBsb2FkIHRoZSBkaWZmIGF0IGFsbDsgd2UgYXJlIG1ha2luZyB0aGUKKwkJCSMgYnJhbmNoIGFuZCBoYXZlIG5vIGJhc2UgdG8gY29tcGFyZSB0byBpbiB0aGlzCisJCQkjIGNhc2UuICBBIGZpbGUgbGV2ZWwgQUNMIG1ha2VzIG5vIHNlbnNlIGluIHRoaXMKKwkJCSMgY29udGV4dC4gIEhhdmluZyBhbiBlbXB0eSBkaWZmIHdpbGwgYWxsb3cgdGhlCisJCQkjIGJyYW5jaCBjcmVhdGlvbi4KKwkJCSMKIAkJfSBlbHNlIHsKIAkJCW9wZW4oVCwnLXwnLCdnaXQnLCdkaWZmLXRyZWUnLAogCQkJCSctcicsJy0tbmFtZS1zdGF0dXMnLCcteicsCkBAIC0yNjAsNiArMjU5LDcgQEAKIGRlbnkgIkJhZCBvbGQgdmFsdWUgJG9sZCIgdW5sZXNzICRvbGQgPX4gL15bYS16MC05XXs0MH0kLzsKIGRlbnkgIkJhZCBuZXcgdmFsdWUgJG5ldyIgdW5sZXNzICRuZXcgPX4gL15bYS16MC05XXs0MH0kLzsKIGRlbnkgIkNhbm5vdCBkZXRlcm1pbmUgd2hvIHlvdSBhcmUuIiB1bmxlc3MgJHRoaXNfdXNlcjsKK2dyYW50ICJObyBjaGFuZ2UgcmVxdWVzdGVkLiIgaWYgJG9sZCBlcSAkbmV3OwogCiAkcmVwb3NpdG9yeV9uYW1lID0gRmlsZTo6U3BlYy0+cmVsMmFicygkZ2l0X2Rpcik7CiAkcmVwb3NpdG9yeV9uYW1lID1+IG0sLyhbXi9dKykoPzpcLmdpdHwvXC5naXQpJCw7CmRpZmYgLS1naXQgYS9jb252ZXJ0LmMgYi9jb252ZXJ0LmMKaW5kZXggZDhjOTRjYi4uMzUyYjY5ZCAxMDA2NDQKLS0tIGEvY29udmVydC5jCisrKyBiL2NvbnZlcnQuYwpAQCAtMzE5LDExICszMTksMTEgQEAKIHN0YXRpYyBzdHJ1Y3QgY29udmVydF9kcml2ZXIgewogCWNvbnN0IGNoYXIgKm5hbWU7CiAJc3RydWN0IGNvbnZlcnRfZHJpdmVyICpuZXh0OwotCWNoYXIgKnNtdWRnZTsKLQljaGFyICpjbGVhbjsKKwljb25zdCBjaGFyICpzbXVkZ2U7CisJY29uc3QgY2hhciAqY2xlYW47CiB9ICp1c2VyX2NvbnZlcnQsICoqdXNlcl9jb252ZXJ0X3RhaWw7CiAKLXN0YXRpYyBpbnQgcmVhZF9jb252ZXJ0X2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQorc3RhdGljIGludCByZWFkX2NvbnZlcnRfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQogewogCWNvbnN0IGNoYXIgKmVwLCAqbmFtZTsKIAlpbnQgbmFtZWxlbjsKQEAgLTM1OCwxOSArMzU4LDEyIEBACiAJICogVGhlIGNvbW1hbmQtbGluZSB3aWxsIG5vdCBiZSBpbnRlcnBvbGF0ZWQgaW4gYW55IHdheS4KIAkgKi8KIAotCWlmICghc3RyY21wKCJzbXVkZ2UiLCBlcCkpIHsKLQkJaWYgKCF2YWx1ZSkKLQkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOwotCQlkcnYtPnNtdWRnZSA9IHN0cmR1cCh2YWx1ZSk7Ci0JCXJldHVybiAwOwotCX0KKwlpZiAoIXN0cmNtcCgic211ZGdlIiwgZXApKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmRydi0+c211ZGdlLCB2YXIsIHZhbHVlKTsKIAotCWlmICghc3RyY21wKCJjbGVhbiIsIGVwKSkgewotCQlpZiAoIXZhbHVlKQotCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7Ci0JCWRydi0+Y2xlYW4gPSBzdHJkdXAodmFsdWUpOwotCQlyZXR1cm4gMDsKLQl9CisJaWYgKCFzdHJjbXAoImNsZWFuIiwgZXApKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmRydi0+Y2xlYW4sIHZhciwgdmFsdWUpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM4NSw3ICszNzgsNyBAQAogCQlhdHRyX2lkZW50ID0gZ2l0X2F0dHIoImlkZW50IiwgNSk7CiAJCWF0dHJfZmlsdGVyID0gZ2l0X2F0dHIoImZpbHRlciIsIDYpOwogCQl1c2VyX2NvbnZlcnRfdGFpbCA9ICZ1c2VyX2NvbnZlcnQ7Ci0JCWdpdF9jb25maWcocmVhZF9jb252ZXJ0X2NvbmZpZyk7CisJCWdpdF9jb25maWcocmVhZF9jb252ZXJ0X2NvbmZpZywgTlVMTCk7CiAJfQogCWNoZWNrWzBdLmF0dHIgPSBhdHRyX2NybGY7CiAJY2hlY2tbMV0uYXR0ciA9IGF0dHJfaWRlbnQ7CkBAIC01NzYsNyArNTY5LDcgQEAKIAlzdHJ1Y3QgZ2l0X2F0dHJfY2hlY2sgY2hlY2tbM107CiAJaW50IGNybGYgPSBDUkxGX0dVRVNTOwogCWludCBpZGVudCA9IDAsIHJldCA9IDA7Ci0JY2hhciAqZmlsdGVyID0gTlVMTDsKKwljb25zdCBjaGFyICpmaWx0ZXIgPSBOVUxMOwogCiAJc2V0dXBfY29udmVydF9jaGVjayhjaGVjayk7CiAJaWYgKCFnaXRfY2hlY2thdHRyKHBhdGgsIEFSUkFZX1NJWkUoY2hlY2spLCBjaGVjaykpIHsKQEAgLTYwNiw3ICs1OTksNyBAQAogCXN0cnVjdCBnaXRfYXR0cl9jaGVjayBjaGVja1szXTsKIAlpbnQgY3JsZiA9IENSTEZfR1VFU1M7CiAJaW50IGlkZW50ID0gMCwgcmV0ID0gMDsKLQljaGFyICpmaWx0ZXIgPSBOVUxMOworCWNvbnN0IGNoYXIgKmZpbHRlciA9IE5VTEw7CiAKIAlzZXR1cF9jb252ZXJ0X2NoZWNrKGNoZWNrKTsKIAlpZiAoIWdpdF9jaGVja2F0dHIocGF0aCwgQVJSQVlfU0laRShjaGVjayksIGNoZWNrKSkgewpkaWZmIC0tZ2l0IGEvY3N1bS1maWxlLmMgYi9jc3VtLWZpbGUuYwppbmRleCA5NzI4YTk5Li5hY2U2NGYxIDEwMDY0NAotLS0gYS9jc3VtLWZpbGUuYworKysgYi9jc3VtLWZpbGUuYwpAQCAtMzIsMjEgKzMyLDI0IEBACiAJfQogfQogCi1pbnQgc2hhMWNsb3NlKHN0cnVjdCBzaGExZmlsZSAqZiwgdW5zaWduZWQgY2hhciAqcmVzdWx0LCBpbnQgZmluYWwpCitpbnQgc2hhMWNsb3NlKHN0cnVjdCBzaGExZmlsZSAqZiwgdW5zaWduZWQgY2hhciAqcmVzdWx0LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJaW50IGZkOwogCXVuc2lnbmVkIG9mZnNldCA9IGYtPm9mZnNldDsKKwogCWlmIChvZmZzZXQpIHsKIAkJU0hBMV9VcGRhdGUoJmYtPmN0eCwgZi0+YnVmZmVyLCBvZmZzZXQpOwogCQlzaGExZmx1c2goZiwgb2Zmc2V0KTsKIAkJZi0+b2Zmc2V0ID0gMDsKIAl9Ci0JaWYgKGZpbmFsKSB7CisJaWYgKGZsYWdzICYgKENTVU1fQ0xPU0UgfCBDU1VNX0ZTWU5DKSkgewogCQkvKiB3cml0ZSBjaGVja3N1bSBhbmQgY2xvc2UgZmQgKi8KIAkJU0hBMV9GaW5hbChmLT5idWZmZXIsICZmLT5jdHgpOwogCQlpZiAocmVzdWx0KQogCQkJaGFzaGNweShyZXN1bHQsIGYtPmJ1ZmZlcik7CiAJCXNoYTFmbHVzaChmLCAyMCk7CisJCWlmIChmbGFncyAmIENTVU1fRlNZTkMpCisJCQlmc3luY19vcl9kaWUoZi0+ZmQsIGYtPm5hbWUpOwogCQlpZiAoY2xvc2UoZi0+ZmQpKQogCQkJZGllKCIlczogc2hhMSBmaWxlIGVycm9yIG9uIGNsb3NlICglcykiLAogCQkJICAgIGYtPm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CmRpZmYgLS1naXQgYS9jc3VtLWZpbGUuaCBiL2NzdW0tZmlsZS5oCmluZGV4IDFhZjc2NTYuLjcyYzk0ODcgMTAwNjQ0Ci0tLSBhL2NzdW0tZmlsZS5oCisrKyBiL2NzdW0tZmlsZS5oCkBAIC0xNiw5ICsxNiwxMyBAQAogCXVuc2lnbmVkIGNoYXIgYnVmZmVyWzgxOTJdOwogfTsKIAorLyogc2hhMWNsb3NlIGZsYWdzICovCisjZGVmaW5lIENTVU1fQ0xPU0UJMQorI2RlZmluZSBDU1VNX0ZTWU5DCTIKKwogZXh0ZXJuIHN0cnVjdCBzaGExZmlsZSAqc2hhMWZkKGludCBmZCwgY29uc3QgY2hhciAqbmFtZSk7CiBleHRlcm4gc3RydWN0IHNoYTFmaWxlICpzaGExZmRfdGhyb3VnaHB1dChpbnQgZmQsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBwcm9ncmVzcyAqdHApOwotZXh0ZXJuIGludCBzaGExY2xvc2Uoc3RydWN0IHNoYTFmaWxlICosIHVuc2lnbmVkIGNoYXIgKiwgaW50KTsKK2V4dGVybiBpbnQgc2hhMWNsb3NlKHN0cnVjdCBzaGExZmlsZSAqLCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGludCk7CiBleHRlcm4gaW50IHNoYTF3cml0ZShzdHJ1Y3Qgc2hhMWZpbGUgKiwgdm9pZCAqLCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIHZvaWQgY3JjMzJfYmVnaW4oc3RydWN0IHNoYTFmaWxlICopOwogZXh0ZXJuIHVpbnQzMl90IGNyYzMyX2VuZChzdHJ1Y3Qgc2hhMWZpbGUgKik7CmRpZmYgLS1naXQgYS9kYWVtb24uYyBiL2RhZW1vbi5jCmluZGV4IDJiNGE2ZjEuLmNlM2E2ZjUgMTAwNjQ0Ci0tLSBhL2RhZW1vbi5jCisrKyBiL2RhZW1vbi5jCkBAIC0zMDYsNyArMzA2LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgZGFlbW9uX3NlcnZpY2UgKnNlcnZpY2VfbG9va2luZ19hdDsKIHN0YXRpYyBpbnQgc2VydmljZV9lbmFibGVkOwogCi1zdGF0aWMgaW50IGdpdF9kYWVtb25fY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCitzdGF0aWMgaW50IGdpdF9kYWVtb25fY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQogewogCWlmICghcHJlZml4Y21wKHZhciwgImRhZW1vbi4iKSAmJgogCSAgICAhc3RyY21wKHZhciArIDcsIHNlcnZpY2VfbG9va2luZ19hdC0+Y29uZmlnX25hbWUpKSB7CkBAIC0zNTYsNyArMzU2LDcgQEAKIAlpZiAoc2VydmljZS0+b3ZlcnJpZGFibGUpIHsKIAkJc2VydmljZV9sb29raW5nX2F0ID0gc2VydmljZTsKIAkJc2VydmljZV9lbmFibGVkID0gLTE7Ci0JCWdpdF9jb25maWcoZ2l0X2RhZW1vbl9jb25maWcpOworCQlnaXRfY29uZmlnKGdpdF9kYWVtb25fY29uZmlnLCBOVUxMKTsKIAkJaWYgKDAgPD0gc2VydmljZV9lbmFibGVkKQogCQkJZW5hYmxlZCA9IHNlcnZpY2VfZW5hYmxlZDsKIAl9CkBAIC02OTQsMjMgKzY5NCw0NyBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgY2hlY2tfZGVhZF9jaGlsZHJlbih2b2lkKQoreworCXVuc2lnbmVkIHNwYXduZWQsIHJlYXBlZCwgZGVsZXRlZDsKKworCXNwYXduZWQgPSBjaGlsZHJlbl9zcGF3bmVkOworCXJlYXBlZCA9IGNoaWxkcmVuX3JlYXBlZDsKKwlkZWxldGVkID0gY2hpbGRyZW5fZGVsZXRlZDsKKworCXdoaWxlIChkZWxldGVkIDwgcmVhcGVkKSB7CisJCXBpZF90IHBpZCA9IGRlYWRfY2hpbGRbZGVsZXRlZCAlIE1BWF9DSElMRFJFTl07CisJCWNvbnN0IGNoYXIgKmRlYWQgPSBwaWQgPCAwID8gIiAod2l0aCBlcnJvcikiIDogIiI7CisKKwkJaWYgKHBpZCA8IDApCisJCQlwaWQgPSAtcGlkOworCisJCS8qIFhYWDogQ3VzdG9tIGxvZ2dpbmcsIHNpbmNlIHdlIGRvbid0IHdhbm5hIGdldHBpZCgpICovCisJCWlmICh2ZXJib3NlKSB7CisJCQlpZiAobG9nX3N5c2xvZykKKwkJCQlzeXNsb2coTE9HX0lORk8sICJbJWRdIERpc2Nvbm5lY3RlZCVzIiwKKwkJCQkJCXBpZCwgZGVhZCk7CisJCQllbHNlCisJCQkJZnByaW50ZihzdGRlcnIsICJbJWRdIERpc2Nvbm5lY3RlZCVzXG4iLAorCQkJCQkJcGlkLCBkZWFkKTsKKwkJfQorCQlyZW1vdmVfY2hpbGQocGlkLCBkZWxldGVkLCBzcGF3bmVkKTsKKwkJZGVsZXRlZCsrOworCX0KKwljaGlsZHJlbl9kZWxldGVkID0gZGVsZXRlZDsKK30KKwogc3RhdGljIHZvaWQgY2hlY2tfbWF4X2Nvbm5lY3Rpb25zKHZvaWQpCiB7CiAJZm9yICg7OykgewogCQlpbnQgYWN0aXZlOwotCQl1bnNpZ25lZCBzcGF3bmVkLCByZWFwZWQsIGRlbGV0ZWQ7CisJCXVuc2lnbmVkIHNwYXduZWQsIGRlbGV0ZWQ7CisKKwkJY2hlY2tfZGVhZF9jaGlsZHJlbigpOwogCiAJCXNwYXduZWQgPSBjaGlsZHJlbl9zcGF3bmVkOwotCQlyZWFwZWQgPSBjaGlsZHJlbl9yZWFwZWQ7CiAJCWRlbGV0ZWQgPSBjaGlsZHJlbl9kZWxldGVkOwogCi0JCXdoaWxlIChkZWxldGVkIDwgcmVhcGVkKSB7Ci0JCQlwaWRfdCBwaWQgPSBkZWFkX2NoaWxkW2RlbGV0ZWQgJSBNQVhfQ0hJTERSRU5dOwotCQkJcmVtb3ZlX2NoaWxkKHBpZCwgZGVsZXRlZCwgc3Bhd25lZCk7Ci0JCQlkZWxldGVkKys7Ci0JCX0KLQkJY2hpbGRyZW5fZGVsZXRlZCA9IGRlbGV0ZWQ7Ci0KIAkJYWN0aXZlID0gc3Bhd25lZCAtIGRlbGV0ZWQ7CiAJCWlmIChhY3RpdmUgPD0gbWF4X2Nvbm5lY3Rpb25zKQogCQkJYnJlYWs7CkBAIC03NjAsMTggKzc4NCwxMCBAQAogCiAJCWlmIChwaWQgPiAwKSB7CiAJCQl1bnNpZ25lZCByZWFwZWQgPSBjaGlsZHJlbl9yZWFwZWQ7CisJCQlpZiAoIVdJRkVYSVRFRChzdGF0dXMpIHx8IFdFWElUU1RBVFVTKHN0YXR1cykgPiAwKQorCQkJCXBpZCA9IC1waWQ7CiAJCQlkZWFkX2NoaWxkW3JlYXBlZCAlIE1BWF9DSElMRFJFTl0gPSBwaWQ7CiAJCQljaGlsZHJlbl9yZWFwZWQgPSByZWFwZWQgKyAxOwotCQkJLyogWFhYOiBDdXN0b20gbG9nZ2luZywgc2luY2Ugd2UgZG9uJ3Qgd2FubmEgZ2V0cGlkKCkgKi8KLQkJCWlmICh2ZXJib3NlKSB7Ci0JCQkJY29uc3QgY2hhciAqZGVhZCA9ICIiOwotCQkJCWlmICghV0lGRVhJVEVEKHN0YXR1cykgfHwgV0VYSVRTVEFUVVMoc3RhdHVzKSA+IDApCi0JCQkJCWRlYWQgPSAiICh3aXRoIGVycm9yKSI7Ci0JCQkJaWYgKGxvZ19zeXNsb2cpCi0JCQkJCXN5c2xvZyhMT0dfSU5GTywgIlslZF0gRGlzY29ubmVjdGVkJXMiLCBwaWQsIGRlYWQpOwotCQkJCWVsc2UKLQkJCQkJZnByaW50ZihzdGRlcnIsICJbJWRdIERpc2Nvbm5lY3RlZCVzXG4iLCBwaWQsIGRlYWQpOwotCQkJfQogCQkJY29udGludWU7CiAJCX0KIAkJYnJlYWs7CkBAIC05MjgsOCArOTQ0LDE4IEBACiAKIAlmb3IgKDs7KSB7CiAJCWludCBpOworCQlpbnQgdGltZW91dDsKIAotCQlpZiAocG9sbChwZmQsIHNvY2tudW0sIC0xKSA8IDApIHsKKwkJLyoKKwkJICogVGhpcyAxLXNlYyB0aW1lb3V0IGNvdWxkIGxlYWQgdG8gaWRseSBsb29waW5nIGJ1dCBpdCBpcworCQkgKiBoZXJlIHNvIHRoYXQgY2hpbGRyZW4gY3VsbGVkIGluIGNoaWxkX2hhbmRsZXIoKSBhcmUgcmVwb3J0ZWQKKwkJICogd2l0aG91dCB0b28gbXVjaCBkZWxheS4gIFdlIGNvdWxkIHByb2JhYmx5IHNldCB1cCBhIHBpcGUKKwkJICogdG8gb3Vyc2VsdmVzIHRoYXQgd2UgcG9sbCwgYW5kIHdyaXRlIHRvIHRoZSBmZCBmcm9tIGNoaWxkX2hhbmRsZXIoKQorCQkgKiB0byB3YWtlIHVzIHVwIChhbmQgY29uc3VtZSBpdCB3aGVuIHRoZSBwb2xsKCkgcmV0dXJucy4uLgorCQkgKi8KKwkJdGltZW91dCA9IChjaGlsZHJlbl9zcGF3bmVkICE9IGNoaWxkcmVuX2RlbGV0ZWQpID8gMTAwMCA6IC0xOworCQlpID0gcG9sbChwZmQsIHNvY2tudW0sIHRpbWVvdXQpOworCQlpZiAoaSA8IDApIHsKIAkJCWlmIChlcnJubyAhPSBFSU5UUikgewogCQkJCWVycm9yKCJwb2xsIGZhaWxlZCwgcmVzdW1pbmc6ICVzIiwKIAkJCQkgICAgICBzdHJlcnJvcihlcnJubykpOwpAQCAtOTM3LDYgKzk2MywxMCBAQAogCQkJfQogCQkJY29udGludWU7CiAJCX0KKwkJaWYgKGkgPT0gMCkgeworCQkJY2hlY2tfZGVhZF9jaGlsZHJlbigpOworCQkJY29udGludWU7CisJCX0KIAogCQlmb3IgKGkgPSAwOyBpIDwgc29ja251bTsgaSsrKSB7CiAJCQlpZiAocGZkW2ldLnJldmVudHMgJiBQT0xMSU4pIHsKZGlmZiAtLWdpdCBhL2RhdGUuYyBiL2RhdGUuYwppbmRleCBhNzRlZDg2Li4xYTRlYjg3IDEwMDY0NAotLS0gYS9kYXRlLmMKKysrIGIvZGF0ZS5jCkBAIC02ODIsMTAgKzY4Miw4IEBACiAKIHN0YXRpYyB2b2lkIGRhdGVfbmV2ZXIoc3RydWN0IHRtICp0bSwgaW50ICpudW0pCiB7Ci0JdG0tPnRtX21vbiA9IHRtLT50bV93ZGF5ID0gdG0tPnRtX3lkYXkKLQkJPSB0bS0+dG1faG91ciA9IHRtLT50bV9taW4gPSB0bS0+dG1fc2VjID0gMDsKLQl0bS0+dG1feWVhciA9IDcwOwotCXRtLT50bV9tZGF5ID0gMTsKKwl0aW1lX3QgbiA9IDA7CisJbG9jYWx0aW1lX3IoJm4sIHRtKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzcGVjaWFsIHsKZGlmZiAtLWdpdCBhL2RpZmYtbGliLmMgYi9kaWZmLWxpYi5jCmluZGV4IDA2OWU0NTAuLmU3ZWFmZjkgMTAwNjQ0Ci0tLSBhL2RpZmYtbGliLmMKKysrIGIvZGlmZi1saWIuYwpAQCAtOCw3ICs4LDYgQEAKICNpbmNsdWRlICJkaWZmY29yZS5oIgogI2luY2x1ZGUgInJldmlzaW9uLmgiCiAjaW5jbHVkZSAiY2FjaGUtdHJlZS5oIgotI2luY2x1ZGUgInBhdGgtbGlzdC5oIgogI2luY2x1ZGUgInVucGFjay10cmVlcy5oIgogI2luY2x1ZGUgInJlZnMuaCIKIApAQCAtMTYsMzQwICsxNSw0MCBAQAogICogZGlmZi1maWxlcwogICovCiAKLXN0YXRpYyBpbnQgcmVhZF9kaXJlY3RvcnkoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHBhdGhfbGlzdCAqbGlzdCkKLXsKLQlESVIgKmRpcjsKLQlzdHJ1Y3QgZGlyZW50ICplOwotCi0JaWYgKCEoZGlyID0gb3BlbmRpcihwYXRoKSkpCi0JCXJldHVybiBlcnJvcigiQ291bGQgbm90IG9wZW4gZGlyZWN0b3J5ICVzIiwgcGF0aCk7Ci0KLQl3aGlsZSAoKGUgPSByZWFkZGlyKGRpcikpKQotCQlpZiAoc3RyY21wKCIuIiwgZS0+ZF9uYW1lKSAmJiBzdHJjbXAoIi4uIiwgZS0+ZF9uYW1lKSkKLQkJCXBhdGhfbGlzdF9pbnNlcnQoZS0+ZF9uYW1lLCBsaXN0KTsKLQotCWNsb3NlZGlyKGRpcik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZ2V0X21vZGUoY29uc3QgY2hhciAqcGF0aCwgaW50ICptb2RlKQotewotCXN0cnVjdCBzdGF0IHN0OwotCi0JaWYgKCFwYXRoIHx8ICFzdHJjbXAocGF0aCwgIi9kZXYvbnVsbCIpKQotCQkqbW9kZSA9IDA7Ci0JZWxzZSBpZiAoIXN0cmNtcChwYXRoLCAiLSIpKQotCQkqbW9kZSA9IGNyZWF0ZV9jZV9tb2RlKDA2NjYpOwotCWVsc2UgaWYgKHN0YXQocGF0aCwgJnN0KSkKLQkJcmV0dXJuIGVycm9yKCJDb3VsZCBub3QgYWNjZXNzICclcyciLCBwYXRoKTsKLQllbHNlCi0JCSptb2RlID0gc3Quc3RfbW9kZTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBxdWV1ZV9kaWZmKHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sCi0JCWNvbnN0IGNoYXIgKm5hbWUxLCBjb25zdCBjaGFyICpuYW1lMikKLXsKLQlpbnQgbW9kZTEgPSAwLCBtb2RlMiA9IDA7Ci0KLQlpZiAoZ2V0X21vZGUobmFtZTEsICZtb2RlMSkgfHwgZ2V0X21vZGUobmFtZTIsICZtb2RlMikpCi0JCXJldHVybiAtMTsKLQotCWlmIChtb2RlMSAmJiBtb2RlMiAmJiBTX0lTRElSKG1vZGUxKSAhPSBTX0lTRElSKG1vZGUyKSkKLQkJcmV0dXJuIGVycm9yKCJmaWxlL2RpcmVjdG9yeSBjb25mbGljdDogJXMsICVzIiwgbmFtZTEsIG5hbWUyKTsKLQotCWlmIChTX0lTRElSKG1vZGUxKSB8fCBTX0lTRElSKG1vZGUyKSkgewotCQljaGFyIGJ1ZmZlcjFbUEFUSF9NQVhdLCBidWZmZXIyW1BBVEhfTUFYXTsKLQkJc3RydWN0IHBhdGhfbGlzdCBwMSA9IHtOVUxMLCAwLCAwLCAxfSwgcDIgPSB7TlVMTCwgMCwgMCwgMX07Ci0JCWludCBsZW4xID0gMCwgbGVuMiA9IDAsIGkxLCBpMiwgcmV0ID0gMDsKLQotCQlpZiAobmFtZTEgJiYgcmVhZF9kaXJlY3RvcnkobmFtZTEsICZwMSkpCi0JCQlyZXR1cm4gLTE7Ci0JCWlmIChuYW1lMiAmJiByZWFkX2RpcmVjdG9yeShuYW1lMiwgJnAyKSkgewotCQkJcGF0aF9saXN0X2NsZWFyKCZwMSwgMCk7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQotCQlpZiAobmFtZTEpIHsKLQkJCWxlbjEgPSBzdHJsZW4obmFtZTEpOwotCQkJaWYgKGxlbjEgPiAwICYmIG5hbWUxW2xlbjEgLSAxXSA9PSAnLycpCi0JCQkJbGVuMS0tOwotCQkJbWVtY3B5KGJ1ZmZlcjEsIG5hbWUxLCBsZW4xKTsKLQkJCWJ1ZmZlcjFbbGVuMSsrXSA9ICcvJzsKLQkJfQotCi0JCWlmIChuYW1lMikgewotCQkJbGVuMiA9IHN0cmxlbihuYW1lMik7Ci0JCQlpZiAobGVuMiA+IDAgJiYgbmFtZTJbbGVuMiAtIDFdID09ICcvJykKLQkJCQlsZW4yLS07Ci0JCQltZW1jcHkoYnVmZmVyMiwgbmFtZTIsIGxlbjIpOwotCQkJYnVmZmVyMltsZW4yKytdID0gJy8nOwotCQl9Ci0KLQkJZm9yIChpMSA9IGkyID0gMDsgIXJldCAmJiAoaTEgPCBwMS5uciB8fCBpMiA8IHAyLm5yKTsgKSB7Ci0JCQljb25zdCBjaGFyICpuMSwgKm4yOwotCQkJaW50IGNvbXA7Ci0KLQkJCWlmIChpMSA9PSBwMS5ucikKLQkJCQljb21wID0gMTsKLQkJCWVsc2UgaWYgKGkyID09IHAyLm5yKQotCQkJCWNvbXAgPSAtMTsKLQkJCWVsc2UKLQkJCQljb21wID0gc3RyY21wKHAxLml0ZW1zW2kxXS5wYXRoLAotCQkJCQlwMi5pdGVtc1tpMl0ucGF0aCk7Ci0KLQkJCWlmIChjb21wID4gMCkKLQkJCQluMSA9IE5VTEw7Ci0JCQllbHNlIHsKLQkJCQluMSA9IGJ1ZmZlcjE7Ci0JCQkJc3RybmNweShidWZmZXIxICsgbGVuMSwgcDEuaXRlbXNbaTErK10ucGF0aCwKLQkJCQkJCVBBVEhfTUFYIC0gbGVuMSk7Ci0JCQl9Ci0KLQkJCWlmIChjb21wIDwgMCkKLQkJCQluMiA9IE5VTEw7Ci0JCQllbHNlIHsKLQkJCQluMiA9IGJ1ZmZlcjI7Ci0JCQkJc3RybmNweShidWZmZXIyICsgbGVuMiwgcDIuaXRlbXNbaTIrK10ucGF0aCwKLQkJCQkJCVBBVEhfTUFYIC0gbGVuMik7Ci0JCQl9Ci0KLQkJCXJldCA9IHF1ZXVlX2RpZmYobywgbjEsIG4yKTsKLQkJfQotCQlwYXRoX2xpc3RfY2xlYXIoJnAxLCAwKTsKLQkJcGF0aF9saXN0X2NsZWFyKCZwMiwgMCk7Ci0KLQkJcmV0dXJuIHJldDsKLQl9IGVsc2UgewotCQlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqZDEsICpkMjsKLQotCQlpZiAoRElGRl9PUFRfVFNUKG8sIFJFVkVSU0VfRElGRikpIHsKLQkJCXVuc2lnbmVkIHRtcDsKLQkJCWNvbnN0IGNoYXIgKnRtcF9jOwotCQkJdG1wID0gbW9kZTE7IG1vZGUxID0gbW9kZTI7IG1vZGUyID0gdG1wOwotCQkJdG1wX2MgPSBuYW1lMTsgbmFtZTEgPSBuYW1lMjsgbmFtZTIgPSB0bXBfYzsKLQkJfQotCi0JCWlmICghbmFtZTEpCi0JCQluYW1lMSA9ICIvZGV2L251bGwiOwotCQlpZiAoIW5hbWUyKQotCQkJbmFtZTIgPSAiL2Rldi9udWxsIjsKLQkJZDEgPSBhbGxvY19maWxlc3BlYyhuYW1lMSk7Ci0JCWQyID0gYWxsb2NfZmlsZXNwZWMobmFtZTIpOwotCQlmaWxsX2ZpbGVzcGVjKGQxLCBudWxsX3NoYTEsIG1vZGUxKTsKLQkJZmlsbF9maWxlc3BlYyhkMiwgbnVsbF9zaGExLCBtb2RlMik7Ci0KLQkJZGlmZl9xdWV1ZSgmZGlmZl9xdWV1ZWRfZGlmZiwgZDEsIGQyKTsKLQkJcmV0dXJuIDA7Ci0JfQotfQotCiAvKgotICogRG9lcyB0aGUgcGF0aCBuYW1lIGEgYmxvYiBpbiB0aGUgd29ya2luZyB0cmVlLCBvciBhIGRpcmVjdG9yeQotICogaW4gdGhlIHdvcmtpbmcgdHJlZT8KKyAqIEhhcyB0aGUgd29yayB0cmVlIGVudGl0eSBiZWVuIHJlbW92ZWQ/CisgKgorICogUmV0dXJuIDEgaWYgaXQgd2FzIHJlbW92ZWQgZnJvbSB0aGUgd29yayB0cmVlLCAwIGlmIGFuIGVudGl0eSB0byBiZQorICogY29tcGFyZWQgd2l0aCB0aGUgY2FjaGUgZW50cnkgY2Ugc3RpbGwgZXhpc3RzICh0aGUgbGF0dGVyIGluY2x1ZGVzCisgKiB0aGUgY2FzZSB3aGVyZSBhIGRpcmVjdG9yeSB0aGF0IGlzIG5vdCBhIHN1Ym1vZHVsZSByZXBvc2l0b3J5CisgKiBleGlzdHMgZm9yIGNlIHRoYXQgaXMgYSBzdWJtb2R1bGUgLS0gaXQgaXMgYSBzdWJtb2R1bGUgdGhhdCBpcyBub3QKKyAqIGNoZWNrZWQgb3V0KS4gIFJldHVybiBuZWdhdGl2ZSBmb3IgYW4gZXJyb3IuCiAgKi8KLXN0YXRpYyBpbnQgaXNfaW5faW5kZXgoY29uc3QgY2hhciAqcGF0aCkKLXsKLQlpbnQgbGVuLCBwb3M7Ci0Jc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKLQotCWxlbiA9IHN0cmxlbihwYXRoKTsKLQl3aGlsZSAocGF0aFtsZW4tMV0gPT0gJy8nKQotCQlsZW4tLTsKLQlpZiAoIWxlbikKLQkJcmV0dXJuIDE7IC8qICIuIiAqLwotCXBvcyA9IGNhY2hlX25hbWVfcG9zKHBhdGgsIGxlbik7Ci0JaWYgKDAgPD0gcG9zKQotCQlyZXR1cm4gMTsKLQlwb3MgPSAtMSAtIHBvczsKLQl3aGlsZSAocG9zIDwgYWN0aXZlX25yKSB7Ci0JCWNlID0gYWN0aXZlX2NhY2hlW3BvcysrXTsKLQkJaWYgKGNlX25hbWVsZW4oY2UpIDw9IGxlbiB8fAotCQkgICAgc3RybmNtcChjZS0+bmFtZSwgcGF0aCwgbGVuKSB8fAotCQkgICAgKGNlLT5uYW1lW2xlbl0gPiAnLycpKQotCQkJYnJlYWs7IC8qIHBhdGggY2Fubm90IGJlIGEgcHJlZml4ICovCi0JCWlmIChjZS0+bmFtZVtsZW5dID09ICcvJykKLQkJCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBoYW5kbGVfZGlmZl9maWxlc19hcmdzKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKLQkJCQkgIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKLQkJCQkgIHVuc2lnbmVkIGludCAqb3B0aW9ucykKLXsKLQkqb3B0aW9ucyA9IDA7Ci0KLQkvKiByZXZzLT5tYXhfY291bnQgPT0gLTIgbWVhbnMgLS1uby1pbmRleCAqLwotCXdoaWxlICgxIDwgYXJnYyAmJiBhcmd2WzFdWzBdID09ICctJykgewotCQlpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1iYXNlIikpCi0JCQlyZXZzLT5tYXhfY291bnQgPSAxOwotCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICItLW91cnMiKSkKLQkJCXJldnMtPm1heF9jb3VudCA9IDI7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi0tdGhlaXJzIikpCi0JCQlyZXZzLT5tYXhfY291bnQgPSAzOwotCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICItbiIpIHx8Ci0JCQkJIXN0cmNtcChhcmd2WzFdLCAiLS1uby1pbmRleCIpKSB7Ci0JCQlyZXZzLT5tYXhfY291bnQgPSAtMjsKLQkJCURJRkZfT1BUX1NFVCgmcmV2cy0+ZGlmZm9wdCwgRVhJVF9XSVRIX1NUQVRVUyk7Ci0JCQlESUZGX09QVF9TRVQoJnJldnMtPmRpZmZvcHQsIE5PX0lOREVYKTsKLQkJfQotCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICItcSIpKQotCQkJKm9wdGlvbnMgfD0gRElGRl9TSUxFTlRfT05fUkVNT1ZFRDsKLQkJZWxzZQotCQkJcmV0dXJuIGVycm9yKCJpbnZhbGlkIG9wdGlvbjogJXMiLCBhcmd2WzFdKTsKLQkJYXJndisrOyBhcmdjLS07Ci0JfQotCi0JaWYgKHJldnMtPm1heF9jb3VudCA9PSAtMSAmJiByZXZzLT5kaWZmb3B0Lm5yX3BhdGhzID09IDIpIHsKLQkJLyoKLQkJICogSWYgdHdvIGZpbGVzIGFyZSBzcGVjaWZpZWQsIGFuZCBhdCBsZWFzdCBvbmUgaXMgdW50cmFja2VkLAotCQkgKiBkZWZhdWx0IHRvIG5vLWluZGV4LgotCQkgKi8KLQkJcmVhZF9jYWNoZSgpOwotCQlpZiAoIWlzX2luX2luZGV4KHJldnMtPmRpZmZvcHQucGF0aHNbMF0pIHx8Ci0JCQkJCSFpc19pbl9pbmRleChyZXZzLT5kaWZmb3B0LnBhdGhzWzFdKSkgewotCQkJcmV2cy0+bWF4X2NvdW50ID0gLTI7Ci0JCQlESUZGX09QVF9TRVQoJnJldnMtPmRpZmZvcHQsIE5PX0lOREVYKTsKLQkJfQotCX0KLQotCS8qCi0JICogTWFrZSBzdXJlIHRoZXJlIGFyZSBOTyByZXZpc2lvbiAoaS5lLiBwZW5kaW5nIG9iamVjdCkgcGFyYW1ldGVyLAotCSAqIHJldi5tYXhfY291bnQgaXMgcmVhc29uYWJsZSAoMCA8PSBuIDw9IDMpLAotCSAqIHRoZXJlIGlzIG5vIG90aGVyIHJldmlzaW9uIGZpbHRlcmluZyBwYXJhbWV0ZXJzLgotCSAqLwotCWlmIChyZXZzLT5wZW5kaW5nLm5yIHx8IHJldnMtPm1heF9jb3VudCA+IDMgfHwKLQkgICAgcmV2cy0+bWluX2FnZSAhPSAtMSB8fCByZXZzLT5tYXhfYWdlICE9IC0xKQotCQlyZXR1cm4gZXJyb3IoIm5vIHJldmlzaW9uIGFsbG93ZWQgd2l0aCBkaWZmLWZpbGVzIik7Ci0KLQlpZiAocmV2cy0+bWF4X2NvdW50ID09IC0xICYmCi0JICAgIChyZXZzLT5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9QQVRDSCkpCi0JCXJldnMtPmNvbWJpbmVfbWVyZ2VzID0gcmV2cy0+ZGVuc2VfY29tYmluZWRfbWVyZ2VzID0gMTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGlzX291dHNpZGVfcmVwbyhjb25zdCBjaGFyICpwYXRoLCBpbnQgbm9uZ2l0LCBjb25zdCBjaGFyICpwcmVmaXgpCi17Ci0JaW50IGk7Ci0JaWYgKG5vbmdpdCB8fCAhc3RyY21wKHBhdGgsICItIikgfHwgaXNfYWJzb2x1dGVfcGF0aChwYXRoKSkKLQkJcmV0dXJuIDE7Ci0JaWYgKHByZWZpeGNtcChwYXRoLCAiLi4vIikpCi0JCXJldHVybiAwOwotCWlmICghcHJlZml4KQotCQlyZXR1cm4gMTsKLQlmb3IgKGkgPSBzdHJsZW4ocHJlZml4KTsgIXByZWZpeGNtcChwYXRoLCAiLi4vIik7ICkgewotCQl3aGlsZSAoaSA+IDAgJiYgcHJlZml4W2kgLSAxXSAhPSAnLycpCi0JCQlpLS07Ci0JCWlmICgtLWkgPCAwKQotCQkJcmV0dXJuIDE7Ci0JCXBhdGggKz0gMzsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBzZXR1cF9kaWZmX25vX2luZGV4KHN0cnVjdCByZXZfaW5mbyAqcmV2cywKLQkJaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiogYXJndiwgaW50IG5vbmdpdCwgY29uc3QgY2hhciAqcHJlZml4KQotewotCWludCBpOwotCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCi0JCWlmIChhcmd2W2ldWzBdICE9ICctJyB8fCBhcmd2W2ldWzFdID09ICdcMCcpCi0JCQlicmVhazsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS0iKSkgewotCQkJaSsrOwotCQkJYnJlYWs7Ci0JCX0gZWxzZSBpZiAoaSA8IGFyZ2MgLSAzICYmICFzdHJjbXAoYXJndltpXSwgIi0tbm8taW5kZXgiKSkgewotCQkJaSA9IGFyZ2MgLSAzOwotCQkJRElGRl9PUFRfU0VUKCZyZXZzLT5kaWZmb3B0LCBFWElUX1dJVEhfU1RBVFVTKTsKLQkJCWJyZWFrOwotCQl9Ci0JaWYgKGFyZ2MgIT0gaSArIDIgfHwgKCFpc19vdXRzaWRlX3JlcG8oYXJndltpICsgMV0sIG5vbmdpdCwgcHJlZml4KSAmJgotCQkJCSFpc19vdXRzaWRlX3JlcG8oYXJndltpXSwgbm9uZ2l0LCBwcmVmaXgpKSkKLQkJcmV0dXJuIC0xOwotCi0JZGlmZl9zZXR1cCgmcmV2cy0+ZGlmZm9wdCk7Ci0JZm9yIChpID0gMTsgaSA8IGFyZ2MgLSAyOyApCi0JCWlmICghc3RyY21wKGFyZ3ZbaV0sICItLW5vLWluZGV4IikpCi0JCQlpKys7Ci0JCWVsc2UgewotCQkJaW50IGogPSBkaWZmX29wdF9wYXJzZSgmcmV2cy0+ZGlmZm9wdCwKLQkJCQkJYXJndiArIGksIGFyZ2MgLSBpKTsKLQkJCWlmICghaikKLQkJCQlkaWUoImludmFsaWQgZGlmZiBvcHRpb24vdmFsdWU6ICVzIiwgYXJndltpXSk7Ci0JCQlpICs9IGo7Ci0JCX0KLQotCWlmIChwcmVmaXgpIHsKLQkJaW50IGxlbiA9IHN0cmxlbihwcmVmaXgpOwotCi0JCXJldnMtPmRpZmZvcHQucGF0aHMgPSB4Y2FsbG9jKDIsIHNpemVvZihjaGFyKikpOwotCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0JCQljb25zdCBjaGFyICpwID0gYXJndlthcmdjIC0gMiArIGldOwotCQkJLyoKLQkJCSAqIHN0ZGluIHNob3VsZCBiZSBzcGVsbGVkIGFzICctJzsgaWYgeW91IGhhdmUKLQkJCSAqIHBhdGggdGhhdCBpcyAnLScsIHNwZWxsIGl0IGFzIC4vLS4KLQkJCSAqLwotCQkJcCA9IChzdHJjbXAocCwgIi0iKQotCQkJICAgICA/IHhzdHJkdXAocHJlZml4X2ZpbGVuYW1lKHByZWZpeCwgbGVuLCBwKSkKLQkJCSAgICAgOiBwKTsKLQkJCXJldnMtPmRpZmZvcHQucGF0aHNbaV0gPSBwOwotCQl9Ci0JfQotCWVsc2UKLQkJcmV2cy0+ZGlmZm9wdC5wYXRocyA9IGFyZ3YgKyBhcmdjIC0gMjsKLQlyZXZzLT5kaWZmb3B0Lm5yX3BhdGhzID0gMjsKLQlESUZGX09QVF9TRVQoJnJldnMtPmRpZmZvcHQsIE5PX0lOREVYKTsKLQlyZXZzLT5tYXhfY291bnQgPSAtMjsKLQlpZiAoZGlmZl9zZXR1cF9kb25lKCZyZXZzLT5kaWZmb3B0KSA8IDApCi0JCWRpZSgiZGlmZl9zZXR1cF9kb25lIGZhaWxlZCIpOwotCXJldHVybiAwOwotfQotCi1pbnQgcnVuX2RpZmZfZmlsZXNfY21kKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQotewotCXVuc2lnbmVkIGludCBvcHRpb25zOwotCi0JaWYgKGhhbmRsZV9kaWZmX2ZpbGVzX2FyZ3MocmV2cywgYXJnYywgYXJndiwgJm9wdGlvbnMpKQotCQlyZXR1cm4gLTE7Ci0KLQlpZiAoRElGRl9PUFRfVFNUKCZyZXZzLT5kaWZmb3B0LCBOT19JTkRFWCkpIHsKLQkJaWYgKHJldnMtPmRpZmZvcHQubnJfcGF0aHMgIT0gMikKLQkJCXJldHVybiBlcnJvcigibmVlZCB0d28gZmlsZXMvZGlyZWN0b3JpZXMgd2l0aCAtLW5vLWluZGV4Iik7Ci0JCWlmIChxdWV1ZV9kaWZmKCZyZXZzLT5kaWZmb3B0LCByZXZzLT5kaWZmb3B0LnBhdGhzWzBdLAotCQkJCXJldnMtPmRpZmZvcHQucGF0aHNbMV0pKQotCQkJcmV0dXJuIC0xOwotCQlkaWZmY29yZV9zdGQoJnJldnMtPmRpZmZvcHQpOwotCQlkaWZmX2ZsdXNoKCZyZXZzLT5kaWZmb3B0KTsKLQkJLyoKLQkJICogVGhlIHJldHVybiBjb2RlIGZvciAtLW5vLWluZGV4IGltaXRhdGVzIGRpZmYoMSk6Ci0JCSAqIDAgPSBubyBjaGFuZ2VzLCAxID0gY2hhbmdlcywgZWxzZSBlcnJvcgotCQkgKi8KLQkJcmV0dXJuIHJldnMtPmRpZmZvcHQuZm91bmRfY2hhbmdlczsKLQl9Ci0KLQlpZiAocmVhZF9jYWNoZSgpIDwgMCkgewotCQlwZXJyb3IoInJlYWRfY2FjaGUiKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlyZXR1cm4gcnVuX2RpZmZfZmlsZXMocmV2cywgb3B0aW9ucyk7Ci19Ci0vKgotICogU2VlIGlmIHdvcmsgdHJlZSBoYXMgYW4gZW50aXR5IHRoYXQgY2FuIGJlIHN0YWdlZC4gIFJldHVybiAwIGlmIHNvLAotICogcmV0dXJuIDEgaWYgbm90IGFuZCByZXR1cm4gLTEgaWYgZXJyb3IuCi0gKi8KLXN0YXRpYyBpbnQgY2hlY2tfd29ya190cmVlX2VudGl0eShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3Qgc3RhdCAqc3QsIGNoYXIgKnN5bWNhY2hlKQorc3RhdGljIGludCBjaGVja19yZW1vdmVkKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCBzdGF0ICpzdCkKIHsKIAlpZiAobHN0YXQoY2UtPm5hbWUsIHN0KSA8IDApIHsKIAkJaWYgKGVycm5vICE9IEVOT0VOVCAmJiBlcnJubyAhPSBFTk9URElSKQogCQkJcmV0dXJuIC0xOwogCQlyZXR1cm4gMTsKIAl9Ci0JaWYgKGhhc19zeW1saW5rX2xlYWRpbmdfcGF0aChjZS0+bmFtZSwgc3ltY2FjaGUpKQorCWlmIChoYXNfc3ltbGlua19sZWFkaW5nX3BhdGgoY2VfbmFtZWxlbihjZSksIGNlLT5uYW1lKSkKIAkJcmV0dXJuIDE7CiAJaWYgKFNfSVNESVIoc3QtPnN0X21vZGUpKSB7CiAJCXVuc2lnbmVkIGNoYXIgc3ViWzIwXTsKLQkJaWYgKHJlc29sdmVfZ2l0bGlua19yZWYoY2UtPm5hbWUsICJIRUFEIiwgc3ViKSkKKworCQkvKgorCQkgKiBJZiBjZSBpcyBhbHJlYWR5IGEgZ2l0bGluaywgd2UgY2FuIGhhdmUgYSBwbGFpbgorCQkgKiBkaXJlY3RvcnkgKGkuZS4gdGhlIHN1Ym1vZHVsZSBpcyBub3QgY2hlY2tlZCBvdXQpLAorCQkgKiBvciBhIGNoZWNrZWQgb3V0IHN1Ym1vZHVsZS4gIEVpdGhlciBjYXNlIHRoaXMgaXMgbm90CisJCSAqIGEgY2FzZSB3aGVyZSBzb21ldGhpbmcgd2FzIHJlbW92ZWQgZnJvbSB0aGUgd29yayB0cmVlLAorCQkgKiBzbyB3ZSB3aWxsIHJldHVybiAwLgorCQkgKgorCQkgKiBPdGhlcndpc2UsIGlmIHRoZSBkaXJlY3RvcnkgaXMgbm90IGEgc3VibW9kdWxlCisJCSAqIHJlcG9zaXRvcnksIHRoYXQgbWVhbnMgY2Ugd2hpY2ggd2FzIGEgYmxvYiB0dXJuZWQgaW50bworCQkgKiBhIGRpcmVjdG9yeSAtLS0gdGhlIGJsb2Igd2FzIHJlbW92ZWQhCisJCSAqLworCQlpZiAoIVNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSAmJgorCQkgICAgcmVzb2x2ZV9naXRsaW5rX3JlZihjZS0+bmFtZSwgIkhFQUQiLCBzdWIpKQogCQkJcmV0dXJuIDE7CiAJfQogCXJldHVybiAwOwpAQCAtMzk5LDcgKzk4LDcgQEAKIAkJCW1lbXNldCgmKGRwYXRoLT5wYXJlbnRbMF0pLCAwLAogCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgY29tYmluZV9kaWZmX3BhcmVudCkqNSk7CiAKLQkJCWNoYW5nZWQgPSBjaGVja193b3JrX3RyZWVfZW50aXR5KGNlLCAmc3QsIHN5bWNhY2hlKTsKKwkJCWNoYW5nZWQgPSBjaGVja19yZW1vdmVkKGNlLCAmc3QpOwogCQkJaWYgKCFjaGFuZ2VkKQogCQkJCWRwYXRoLT5tb2RlID0gY2VfbW9kZV9mcm9tX3N0YXQoY2UsIHN0LnN0X21vZGUpOwogCQkJZWxzZSB7CkBAIC00NjMsNyArMTYyLDcgQEAKIAkJaWYgKGNlX3VwdG9kYXRlKGNlKSkKIAkJCWNvbnRpbnVlOwogCi0JCWNoYW5nZWQgPSBjaGVja193b3JrX3RyZWVfZW50aXR5KGNlLCAmc3QsIHN5bWNhY2hlKTsKKwkJY2hhbmdlZCA9IGNoZWNrX3JlbW92ZWQoY2UsICZzdCk7CiAJCWlmIChjaGFuZ2VkKSB7CiAJCQlpZiAoY2hhbmdlZCA8IDApIHsKIAkJCQlwZXJyb3IoY2UtPm5hbWUpOwpAQCAtNDcyLDE3ICsxNzEsMjAgQEAKIAkJCWlmIChzaWxlbnRfb25fcmVtb3ZlZCkKIAkJCQljb250aW51ZTsKIAkJCWRpZmZfYWRkcmVtb3ZlKCZyZXZzLT5kaWZmb3B0LCAnLScsIGNlLT5jZV9tb2RlLAotCQkJCSAgICAgICBjZS0+c2hhMSwgY2UtPm5hbWUsIE5VTEwpOworCQkJCSAgICAgICBjZS0+c2hhMSwgY2UtPm5hbWUpOwogCQkJY29udGludWU7CiAJCX0KIAkJY2hhbmdlZCA9IGNlX21hdGNoX3N0YXQoY2UsICZzdCwgY2Vfb3B0aW9uKTsKLQkJaWYgKCFjaGFuZ2VkICYmICFESUZGX09QVF9UU1QoJnJldnMtPmRpZmZvcHQsIEZJTkRfQ09QSUVTX0hBUkRFUikpCi0JCQljb250aW51ZTsKKwkJaWYgKCFjaGFuZ2VkKSB7CisJCQljZV9tYXJrX3VwdG9kYXRlKGNlKTsKKwkJCWlmICghRElGRl9PUFRfVFNUKCZyZXZzLT5kaWZmb3B0LCBGSU5EX0NPUElFU19IQVJERVIpKQorCQkJCWNvbnRpbnVlOworCQl9CiAJCW9sZG1vZGUgPSBjZS0+Y2VfbW9kZTsKIAkJbmV3bW9kZSA9IGNlX21vZGVfZnJvbV9zdGF0KGNlLCBzdC5zdF9tb2RlKTsKIAkJZGlmZl9jaGFuZ2UoJnJldnMtPmRpZmZvcHQsIG9sZG1vZGUsIG5ld21vZGUsCiAJCQkgICAgY2UtPnNoYTEsIChjaGFuZ2VkID8gbnVsbF9zaGExIDogY2UtPnNoYTEpLAotCQkJICAgIGNlLT5uYW1lLCBOVUxMKTsKKwkJCSAgICBjZS0+bmFtZSk7CiAKIAl9CiAJZGlmZmNvcmVfc3RkKCZyZXZzLT5kaWZmb3B0KTsKQEAgLTUwNiw3ICsyMDgsNyBAQAogCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCB1bnNpZ25lZCBpbnQgbW9kZSkKIHsKIAlkaWZmX2FkZHJlbW92ZSgmcmV2cy0+ZGlmZm9wdCwgcHJlZml4WzBdLCBtb2RlLAotCQkgICAgICAgc2hhMSwgY2UtPm5hbWUsIE5VTEwpOworCQkgICAgICAgc2hhMSwgY2UtPm5hbWUpOwogfQogCiBzdGF0aWMgaW50IGdldF9zdGF0X2RhdGEoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKQEAgLTUyMSw3ICsyMjMsNyBAQAogCWlmICghY2FjaGVkKSB7CiAJCWludCBjaGFuZ2VkOwogCQlzdHJ1Y3Qgc3RhdCBzdDsKLQkJY2hhbmdlZCA9IGNoZWNrX3dvcmtfdHJlZV9lbnRpdHkoY2UsICZzdCwgY2JkYXRhLT5zeW1jYWNoZSk7CisJCWNoYW5nZWQgPSBjaGVja19yZW1vdmVkKGNlLCAmc3QpOwogCQlpZiAoY2hhbmdlZCA8IDApCiAJCQlyZXR1cm4gLTE7CiAJCWVsc2UgaWYgKGNoYW5nZWQpIHsKQEAgLTYxMCw3ICszMTIsNyBAQAogCQlyZXR1cm4gMDsKIAogCWRpZmZfY2hhbmdlKCZyZXZzLT5kaWZmb3B0LCBvbGRtb2RlLCBtb2RlLAotCQkgICAgb2xkLT5zaGExLCBzaGExLCBvbGQtPm5hbWUsIE5VTEwpOworCQkgICAgb2xkLT5zaGExLCBzaGExLCBvbGQtPm5hbWUpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kaWZmLW5vLWluZGV4LmMgYi9kaWZmLW5vLWluZGV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY5OTRjZgotLS0gL2Rldi9udWxsCisrKyBiL2RpZmYtbm8taW5kZXguYwpAQCAtMCwwICsxLDI2MyBAQAorLyoKKyAqICJkaWZmIC0tbm8taW5kZXgiIHN1cHBvcnQKKyAqIENvcHlyaWdodCAoYykgMjAwNyBieSBKb2hhbm5lcyBTY2hpbmRlbGluCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggYnkgSnVuaW8gQyBIYW1hbm8KKyAqLworCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb2xvci5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImxvZy10cmVlLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInBhdGgtbGlzdC5oIgorCitzdGF0aWMgaW50IHJlYWRfZGlyZWN0b3J5KGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBwYXRoX2xpc3QgKmxpc3QpCit7CisJRElSICpkaXI7CisJc3RydWN0IGRpcmVudCAqZTsKKworCWlmICghKGRpciA9IG9wZW5kaXIocGF0aCkpKQorCQlyZXR1cm4gZXJyb3IoIkNvdWxkIG5vdCBvcGVuIGRpcmVjdG9yeSAlcyIsIHBhdGgpOworCisJd2hpbGUgKChlID0gcmVhZGRpcihkaXIpKSkKKwkJaWYgKHN0cmNtcCgiLiIsIGUtPmRfbmFtZSkgJiYgc3RyY21wKCIuLiIsIGUtPmRfbmFtZSkpCisJCQlwYXRoX2xpc3RfaW5zZXJ0KGUtPmRfbmFtZSwgbGlzdCk7CisKKwljbG9zZWRpcihkaXIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF9tb2RlKGNvbnN0IGNoYXIgKnBhdGgsIGludCAqbW9kZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmICghcGF0aCB8fCAhc3RyY21wKHBhdGgsICIvZGV2L251bGwiKSkKKwkJKm1vZGUgPSAwOworCWVsc2UgaWYgKCFzdHJjbXAocGF0aCwgIi0iKSkKKwkJKm1vZGUgPSBjcmVhdGVfY2VfbW9kZSgwNjY2KTsKKwllbHNlIGlmIChzdGF0KHBhdGgsICZzdCkpCisJCXJldHVybiBlcnJvcigiQ291bGQgbm90IGFjY2VzcyAnJXMnIiwgcGF0aCk7CisJZWxzZQorCQkqbW9kZSA9IHN0LnN0X21vZGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcXVldWVfZGlmZihzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLAorCQljb25zdCBjaGFyICpuYW1lMSwgY29uc3QgY2hhciAqbmFtZTIpCit7CisJaW50IG1vZGUxID0gMCwgbW9kZTIgPSAwOworCisJaWYgKGdldF9tb2RlKG5hbWUxLCAmbW9kZTEpIHx8IGdldF9tb2RlKG5hbWUyLCAmbW9kZTIpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAobW9kZTEgJiYgbW9kZTIgJiYgU19JU0RJUihtb2RlMSkgIT0gU19JU0RJUihtb2RlMikpCisJCXJldHVybiBlcnJvcigiZmlsZS9kaXJlY3RvcnkgY29uZmxpY3Q6ICVzLCAlcyIsIG5hbWUxLCBuYW1lMik7CisKKwlpZiAoU19JU0RJUihtb2RlMSkgfHwgU19JU0RJUihtb2RlMikpIHsKKwkJY2hhciBidWZmZXIxW1BBVEhfTUFYXSwgYnVmZmVyMltQQVRIX01BWF07CisJCXN0cnVjdCBwYXRoX2xpc3QgcDEgPSB7TlVMTCwgMCwgMCwgMX0sIHAyID0ge05VTEwsIDAsIDAsIDF9OworCQlpbnQgbGVuMSA9IDAsIGxlbjIgPSAwLCBpMSwgaTIsIHJldCA9IDA7CisKKwkJaWYgKG5hbWUxICYmIHJlYWRfZGlyZWN0b3J5KG5hbWUxLCAmcDEpKQorCQkJcmV0dXJuIC0xOworCQlpZiAobmFtZTIgJiYgcmVhZF9kaXJlY3RvcnkobmFtZTIsICZwMikpIHsKKwkJCXBhdGhfbGlzdF9jbGVhcigmcDEsIDApOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaWYgKG5hbWUxKSB7CisJCQlsZW4xID0gc3RybGVuKG5hbWUxKTsKKwkJCWlmIChsZW4xID4gMCAmJiBuYW1lMVtsZW4xIC0gMV0gPT0gJy8nKQorCQkJCWxlbjEtLTsKKwkJCW1lbWNweShidWZmZXIxLCBuYW1lMSwgbGVuMSk7CisJCQlidWZmZXIxW2xlbjErK10gPSAnLyc7CisJCX0KKworCQlpZiAobmFtZTIpIHsKKwkJCWxlbjIgPSBzdHJsZW4obmFtZTIpOworCQkJaWYgKGxlbjIgPiAwICYmIG5hbWUyW2xlbjIgLSAxXSA9PSAnLycpCisJCQkJbGVuMi0tOworCQkJbWVtY3B5KGJ1ZmZlcjIsIG5hbWUyLCBsZW4yKTsKKwkJCWJ1ZmZlcjJbbGVuMisrXSA9ICcvJzsKKwkJfQorCisJCWZvciAoaTEgPSBpMiA9IDA7ICFyZXQgJiYgKGkxIDwgcDEubnIgfHwgaTIgPCBwMi5ucik7ICkgeworCQkJY29uc3QgY2hhciAqbjEsICpuMjsKKwkJCWludCBjb21wOworCisJCQlpZiAoaTEgPT0gcDEubnIpCisJCQkJY29tcCA9IDE7CisJCQllbHNlIGlmIChpMiA9PSBwMi5ucikKKwkJCQljb21wID0gLTE7CisJCQllbHNlCisJCQkJY29tcCA9IHN0cmNtcChwMS5pdGVtc1tpMV0ucGF0aCwKKwkJCQkJcDIuaXRlbXNbaTJdLnBhdGgpOworCisJCQlpZiAoY29tcCA+IDApCisJCQkJbjEgPSBOVUxMOworCQkJZWxzZSB7CisJCQkJbjEgPSBidWZmZXIxOworCQkJCXN0cm5jcHkoYnVmZmVyMSArIGxlbjEsIHAxLml0ZW1zW2kxKytdLnBhdGgsCisJCQkJCQlQQVRIX01BWCAtIGxlbjEpOworCQkJfQorCisJCQlpZiAoY29tcCA8IDApCisJCQkJbjIgPSBOVUxMOworCQkJZWxzZSB7CisJCQkJbjIgPSBidWZmZXIyOworCQkJCXN0cm5jcHkoYnVmZmVyMiArIGxlbjIsIHAyLml0ZW1zW2kyKytdLnBhdGgsCisJCQkJCQlQQVRIX01BWCAtIGxlbjIpOworCQkJfQorCisJCQlyZXQgPSBxdWV1ZV9kaWZmKG8sIG4xLCBuMik7CisJCX0KKwkJcGF0aF9saXN0X2NsZWFyKCZwMSwgMCk7CisJCXBhdGhfbGlzdF9jbGVhcigmcDIsIDApOworCisJCXJldHVybiByZXQ7CisJfSBlbHNlIHsKKwkJc3RydWN0IGRpZmZfZmlsZXNwZWMgKmQxLCAqZDI7CisKKwkJaWYgKERJRkZfT1BUX1RTVChvLCBSRVZFUlNFX0RJRkYpKSB7CisJCQl1bnNpZ25lZCB0bXA7CisJCQljb25zdCBjaGFyICp0bXBfYzsKKwkJCXRtcCA9IG1vZGUxOyBtb2RlMSA9IG1vZGUyOyBtb2RlMiA9IHRtcDsKKwkJCXRtcF9jID0gbmFtZTE7IG5hbWUxID0gbmFtZTI7IG5hbWUyID0gdG1wX2M7CisJCX0KKworCQlpZiAoIW5hbWUxKQorCQkJbmFtZTEgPSAiL2Rldi9udWxsIjsKKwkJaWYgKCFuYW1lMikKKwkJCW5hbWUyID0gIi9kZXYvbnVsbCI7CisJCWQxID0gYWxsb2NfZmlsZXNwZWMobmFtZTEpOworCQlkMiA9IGFsbG9jX2ZpbGVzcGVjKG5hbWUyKTsKKwkJZmlsbF9maWxlc3BlYyhkMSwgbnVsbF9zaGExLCBtb2RlMSk7CisJCWZpbGxfZmlsZXNwZWMoZDIsIG51bGxfc2hhMSwgbW9kZTIpOworCisJCWRpZmZfcXVldWUoJmRpZmZfcXVldWVkX2RpZmYsIGQxLCBkMik7CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIGludCBwYXRoX291dHNpZGVfcmVwbyhjb25zdCBjaGFyICpwYXRoKQoreworCS8qCisJICogV2UgaGF2ZSBhbHJlYWR5IGRvbmUgc2V0dXBfZ2l0X2RpcmVjdG9yeV9nZW50bHkoKSBzbyB3ZQorCSAqIGtub3cgd2UgYXJlIGluc2lkZSBhIGdpdCB3b3JrIHRyZWUgYWxyZWFkeS4KKwkgKi8KKwljb25zdCBjaGFyICp3b3JrX3RyZWU7CisJc2l6ZV90IGxlbjsKKworCWlmICghaXNfYWJzb2x1dGVfcGF0aChwYXRoKSkKKwkJcmV0dXJuIDA7CisJd29ya190cmVlID0gZ2V0X2dpdF93b3JrX3RyZWUoKTsKKwlsZW4gPSBzdHJsZW4od29ya190cmVlKTsKKwlpZiAoc3RybmNtcChwYXRoLCB3b3JrX3RyZWUsIGxlbikgfHwKKwkgICAgKHBhdGhbbGVuXSAhPSAnXDAnICYmIHBhdGhbbGVuXSAhPSAnLycpKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBkaWZmX25vX2luZGV4KHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJICAgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAorCQkgICBpbnQgbm9uZ2l0LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGk7CisJaW50IG5vX2luZGV4ID0gMDsKKwl1bnNpZ25lZCBvcHRpb25zID0gMDsKKworCS8qIFdlcmUgd2UgYXNrZWQgdG8gZG8gLS1uby1pbmRleCBleHBsaWNpdGx5PyAqLworCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKKwkJaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tIikpCisJCQlyZXR1cm47CisJCWlmICghc3RyY21wKGFyZ3ZbaV0sICItLW5vLWluZGV4IikpCisJCQlub19pbmRleCA9IDE7CisJCWlmIChhcmd2W2ldWzBdICE9ICctJykKKwkJCWJyZWFrOworCX0KKworCWlmICghbm9faW5kZXggJiYgIW5vbmdpdCkgeworCQkvKgorCQkgKiBJbnNpZGUgYSBnaXQgcmVwb3NpdG9yeSwgd2l0aG91dCAtLW5vLWluZGV4LiAgT25seQorCQkgKiB3aGVuIGEgcGF0aCBvdXRzaWRlIHRoZSByZXBvc2l0b3J5IGlzIGdpdmVuLAorCQkgKiBlLmcuICJnaXQgZGlmZiAvdmFyL3RtcC9bMTJdIiwgb3IgImdpdCBkaWZmCisJCSAqIE1ha2VmaWxlIC92YXIvdG1wL01ha2VmaWxlIiwgYWxsb3cgaXQgdG8gYmUgdXNlZCBhcworCQkgKiBhIGNvbG91cmZ1bCAiZGlmZiIgcmVwbGFjZW1lbnQuCisJCSAqLworCQlpZiAoKGFyZ2MgIT0gaSArIDIpIHx8CisJCSAgICAoIXBhdGhfb3V0c2lkZV9yZXBvKGFyZ3ZbaV0pICYmCisJCSAgICAgIXBhdGhfb3V0c2lkZV9yZXBvKGFyZ3ZbaSsxXSkpKQorCQkJcmV0dXJuOworCX0KKwlpZiAoYXJnYyAhPSBpICsgMikKKwkJZGllKCJnaXQgZGlmZiAlcyB0YWtlcyB0d28gcGF0aHMiLAorCQkgICAgbm9faW5kZXggPyAiLS1uby1pbmRleCIgOiAiWy0tbm8taW5kZXhdIik7CisKKwkvKgorCSAqIElmIHRoZSB1c2VyIGFza2VkIGZvciBvdXIgZXhpdCBjb2RlIHRoZW4gZG9uJ3Qgc3RhcnQgYQorCSAqIHBhZ2VyIG9yIHdlIHdvdWxkIGVuZCB1cCByZXBvcnRpbmcgaXRzIGV4aXQgY29kZSBpbnN0ZWFkLgorCSAqLworCWlmICghRElGRl9PUFRfVFNUKCZyZXZzLT5kaWZmb3B0LCBFWElUX1dJVEhfU1RBVFVTKSkKKwkJc2V0dXBfcGFnZXIoKTsKKworCWRpZmZfc2V0dXAoJnJldnMtPmRpZmZvcHQpOworCWlmICghcmV2cy0+ZGlmZm9wdC5vdXRwdXRfZm9ybWF0KQorCQlyZXZzLT5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9QQVRDSDsKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYyAtIDI7ICkgeworCQlpbnQgajsKKwkJaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tbm8taW5kZXgiKSkKKwkJCWkrKzsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLXEiKSkKKwkJCW9wdGlvbnMgfD0gRElGRl9TSUxFTlRfT05fUkVNT1ZFRDsKKwkJZWxzZSB7CisJCQlqID0gZGlmZl9vcHRfcGFyc2UoJnJldnMtPmRpZmZvcHQsIGFyZ3YgKyBpLCBhcmdjIC0gaSk7CisJCQlpZiAoIWopCisJCQkJZGllKCJpbnZhbGlkIGRpZmYgb3B0aW9uL3ZhbHVlOiAlcyIsIGFyZ3ZbaV0pOworCQkJaSArPSBqOworCQl9CisJfQorCisJaWYgKHByZWZpeCkgeworCQlpbnQgbGVuID0gc3RybGVuKHByZWZpeCk7CisKKwkJcmV2cy0+ZGlmZm9wdC5wYXRocyA9IHhjYWxsb2MoMiwgc2l6ZW9mKGNoYXIqKSk7CisJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJCWNvbnN0IGNoYXIgKnAgPSBhcmd2W2FyZ2MgLSAyICsgaV07CisJCQkvKgorCQkJICogc3RkaW4gc2hvdWxkIGJlIHNwZWxsZWQgYXMgJy0nOyBpZiB5b3UgaGF2ZQorCQkJICogcGF0aCB0aGF0IGlzICctJywgc3BlbGwgaXQgYXMgLi8tLgorCQkJICovCisJCQlwID0gKHN0cmNtcChwLCAiLSIpCisJCQkgICAgID8geHN0cmR1cChwcmVmaXhfZmlsZW5hbWUocHJlZml4LCBsZW4sIHApKQorCQkJICAgICA6IHApOworCQkJcmV2cy0+ZGlmZm9wdC5wYXRoc1tpXSA9IHA7CisJCX0KKwl9CisJZWxzZQorCQlyZXZzLT5kaWZmb3B0LnBhdGhzID0gYXJndiArIGFyZ2MgLSAyOworCXJldnMtPmRpZmZvcHQubnJfcGF0aHMgPSAyOworCisJRElGRl9PUFRfU0VUKCZyZXZzLT5kaWZmb3B0LCBFWElUX1dJVEhfU1RBVFVTKTsKKwlESUZGX09QVF9TRVQoJnJldnMtPmRpZmZvcHQsIE5PX0lOREVYKTsKKworCXJldnMtPm1heF9jb3VudCA9IC0yOworCWlmIChkaWZmX3NldHVwX2RvbmUoJnJldnMtPmRpZmZvcHQpIDwgMCkKKwkJZGllKCJkaWZmX3NldHVwX2RvbmUgZmFpbGVkIik7CisKKwlpZiAocXVldWVfZGlmZigmcmV2cy0+ZGlmZm9wdCwgcmV2cy0+ZGlmZm9wdC5wYXRoc1swXSwKKwkJICAgICAgIHJldnMtPmRpZmZvcHQucGF0aHNbMV0pKQorCQlleGl0KDEpOworCWRpZmZjb3JlX3N0ZCgmcmV2cy0+ZGlmZm9wdCk7CisJZGlmZl9mbHVzaCgmcmV2cy0+ZGlmZm9wdCk7CisKKwkvKgorCSAqIFRoZSByZXR1cm4gY29kZSBmb3IgLS1uby1pbmRleCBpbWl0YXRlcyBkaWZmKDEpOgorCSAqIDAgPSBubyBjaGFuZ2VzLCAxID0gY2hhbmdlcywgZWxzZSBlcnJvcgorCSAqLworCWV4aXQocmV2cy0+ZGlmZm9wdC5mb3VuZF9jaGFuZ2VzKTsKK30KZGlmZiAtLWdpdCBhL2RpZmYuYyBiL2RpZmYuYwppbmRleCAyMDEzNWNiLi4zNDI3MzNiIDEwMDY0NAotLS0gYS9kaWZmLmMKKysrIGIvZGlmZi5jCkBAIC0xOSw3ICsxOSw3IEBACiAjZW5kaWYKIAogc3RhdGljIGludCBkaWZmX2RldGVjdF9yZW5hbWVfZGVmYXVsdDsKLXN0YXRpYyBpbnQgZGlmZl9yZW5hbWVfbGltaXRfZGVmYXVsdCA9IDEwMDsKK3N0YXRpYyBpbnQgZGlmZl9yZW5hbWVfbGltaXRfZGVmYXVsdCA9IDIwMDsKIGludCBkaWZmX3VzZV9jb2xvcl9kZWZhdWx0ID0gLTE7CiBzdGF0aWMgY29uc3QgY2hhciAqZXh0ZXJuYWxfZGlmZl9jbWRfY2ZnOwogaW50IGRpZmZfYXV0b19yZWZyZXNoX2luZGV4ID0gMTsKQEAgLTEyOSwxMiArMTI5LDggQEAKICAqIG5ldmVyIGJlIGFmZmVjdGVkIGJ5IHRoZSBzZXR0aW5nIG9mIGRpZmYucmVuYW1lcwogICogdGhlIHVzZXIgaGFwcGVucyB0byBoYXZlIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuCiAgKi8KLWludCBnaXRfZGlmZl91aV9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK2ludCBnaXRfZGlmZl91aV9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCiB7Ci0JaWYgKCFzdHJjbXAodmFyLCAiZGlmZi5yZW5hbWVsaW1pdCIpKSB7Ci0JCWRpZmZfcmVuYW1lX2xpbWl0X2RlZmF1bHQgPSBnaXRfY29uZmlnX2ludCh2YXIsIHZhbHVlKTsKLQkJcmV0dXJuIDA7Ci0JfQogCWlmICghc3RyY21wKHZhciwgImRpZmYuY29sb3IiKSB8fCAhc3RyY21wKHZhciwgImNvbG9yLmRpZmYiKSkgewogCQlkaWZmX3VzZV9jb2xvcl9kZWZhdWx0ID0gZ2l0X2NvbmZpZ19jb2xvcmJvb2wodmFyLCB2YWx1ZSwgLTEpOwogCQlyZXR1cm4gMDsKQEAgLTE1MywxMiArMTQ5LDggQEAKIAkJZGlmZl9hdXRvX3JlZnJlc2hfaW5kZXggPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CiAJCXJldHVybiAwOwogCX0KLQlpZiAoIXN0cmNtcCh2YXIsICJkaWZmLmV4dGVybmFsIikpIHsKLQkJaWYgKCF2YWx1ZSkKLQkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOwotCQlleHRlcm5hbF9kaWZmX2NtZF9jZmcgPSB4c3RyZHVwKHZhbHVlKTsKLQkJcmV0dXJuIDA7Ci0JfQorCWlmICghc3RyY21wKHZhciwgImRpZmYuZXh0ZXJuYWwiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZleHRlcm5hbF9kaWZmX2NtZF9jZmcsIHZhciwgdmFsdWUpOwogCWlmICghcHJlZml4Y21wKHZhciwgImRpZmYuIikpIHsKIAkJY29uc3QgY2hhciAqZXAgPSBzdHJyY2hyKHZhciwgJy4nKTsKIApAQCAtMTY2LDExICsxNTgsMTYgQEAKIAkJCXJldHVybiBwYXJzZV9sbGRpZmZfY29tbWFuZCh2YXIsIGVwLCB2YWx1ZSk7CiAJfQogCi0JcmV0dXJuIGdpdF9kaWZmX2Jhc2ljX2NvbmZpZyh2YXIsIHZhbHVlKTsKKwlyZXR1cm4gZ2l0X2RpZmZfYmFzaWNfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKIH0KIAotaW50IGdpdF9kaWZmX2Jhc2ljX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQoraW50IGdpdF9kaWZmX2Jhc2ljX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKIHsKKwlpZiAoIXN0cmNtcCh2YXIsICJkaWZmLnJlbmFtZWxpbWl0IikpIHsKKwkJZGlmZl9yZW5hbWVfbGltaXRfZGVmYXVsdCA9IGdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKIAlpZiAoIXByZWZpeGNtcCh2YXIsICJkaWZmLmNvbG9yLiIpIHx8ICFwcmVmaXhjbXAodmFyLCAiY29sb3IuZGlmZi4iKSkgewogCQlpbnQgc2xvdCA9IHBhcnNlX2RpZmZfY29sb3Jfc2xvdCh2YXIsIDExKTsKIAkJaWYgKCF2YWx1ZSkKQEAgLTE5MCw3ICsxODcsNyBAQAogCQl9CiAJfQogCi0JcmV0dXJuIGdpdF9jb2xvcl9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlKTsKKwlyZXR1cm4gZ2l0X2NvbG9yX2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKIH0KIAogc3RhdGljIGNoYXIgKnF1b3RlX3R3byhjb25zdCBjaGFyICpvbmUsIGNvbnN0IGNoYXIgKnR3bykKQEAgLTk5NywxOCArOTk0LDIzIEBACiAJfQogfQogCi1zdHJ1Y3QgZGlmZnN0YXRfZGlyIHsKLQlzdHJ1Y3QgZGlmZnN0YXRfZmlsZSAqKmZpbGVzOwotCWludCBuciwgcGVyY2VudCwgY3VtdWxhdGl2ZTsKK3N0cnVjdCBkaXJzdGF0X2ZpbGUgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJdW5zaWduZWQgbG9uZyBjaGFuZ2VkOwogfTsKIAotc3RhdGljIGxvbmcgZ2F0aGVyX2RpcnN0YXQoRklMRSAqZmlsZSwgc3RydWN0IGRpZmZzdGF0X2RpciAqZGlyLCB1bnNpZ25lZCBsb25nIGNoYW5nZWQsIGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuKQorc3RydWN0IGRpcnN0YXRfZGlyIHsKKwlzdHJ1Y3QgZGlyc3RhdF9maWxlICpmaWxlczsKKwlpbnQgYWxsb2MsIG5yLCBwZXJjZW50LCBjdW11bGF0aXZlOworfTsKKworc3RhdGljIGxvbmcgZ2F0aGVyX2RpcnN0YXQoRklMRSAqZmlsZSwgc3RydWN0IGRpcnN0YXRfZGlyICpkaXIsIHVuc2lnbmVkIGxvbmcgY2hhbmdlZCwgY29uc3QgY2hhciAqYmFzZSwgaW50IGJhc2VsZW4pCiB7CiAJdW5zaWduZWQgbG9uZyB0aGlzX2RpciA9IDA7CiAJdW5zaWduZWQgaW50IHNvdXJjZXMgPSAwOwogCiAJd2hpbGUgKGRpci0+bnIpIHsKLQkJc3RydWN0IGRpZmZzdGF0X2ZpbGUgKmYgPSAqZGlyLT5maWxlczsKKwkJc3RydWN0IGRpcnN0YXRfZmlsZSAqZiA9IGRpci0+ZmlsZXM7CiAJCWludCBuYW1lbGVuID0gc3RybGVuKGYtPm5hbWUpOwogCQl1bnNpZ25lZCBsb25nIHRoaXM7CiAJCWNoYXIgKnNsYXNoOwpAQCAtMTAyMywxMCArMTAyNSw3IEBACiAJCQl0aGlzID0gZ2F0aGVyX2RpcnN0YXQoZmlsZSwgZGlyLCBjaGFuZ2VkLCBmLT5uYW1lLCBuZXdiYXNlbGVuKTsKIAkJCXNvdXJjZXMrKzsKIAkJfSBlbHNlIHsKLQkJCWlmIChmLT5pc191bm1lcmdlZCB8fCBmLT5pc19iaW5hcnkpCi0JCQkJdGhpcyA9IDA7Ci0JCQllbHNlCi0JCQkJdGhpcyA9IGYtPmFkZGVkICsgZi0+ZGVsZXRlZDsKKwkJCXRoaXMgPSBmLT5jaGFuZ2VkOwogCQkJZGlyLT5maWxlcysrOwogCQkJZGlyLT5uci0tOwogCQkJc291cmNlcyArPSAyOwpAQCAtMTA1NCwxOSArMTA1Myw1OCBAQAogCXJldHVybiB0aGlzX2RpcjsKIH0KIAotc3RhdGljIHZvaWQgc2hvd19kaXJzdGF0KHN0cnVjdCBkaWZmc3RhdF90ICpkYXRhLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zKQorc3RhdGljIHZvaWQgc2hvd19kaXJzdGF0KHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMpCiB7CiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyBjaGFuZ2VkOwotCXN0cnVjdCBkaWZmc3RhdF9kaXIgZGlyOworCXN0cnVjdCBkaXJzdGF0X2RpciBkaXI7CisJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxID0gJmRpZmZfcXVldWVkX2RpZmY7CiAKLQkvKiBDYWxjdWxhdGUgdG90YWwgY2hhbmdlcyAqLworCWRpci5maWxlcyA9IE5VTEw7CisJZGlyLmFsbG9jID0gMDsKKwlkaXIubnIgPSAwOworCWRpci5wZXJjZW50ID0gb3B0aW9ucy0+ZGlyc3RhdF9wZXJjZW50OworCWRpci5jdW11bGF0aXZlID0gb3B0aW9ucy0+b3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX0NVTVVMQVRJVkU7CisKIAljaGFuZ2VkID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+bnI7IGkrKykgewotCQlpZiAoZGF0YS0+ZmlsZXNbaV0tPmlzX2JpbmFyeSB8fCBkYXRhLT5maWxlc1tpXS0+aXNfdW5tZXJnZWQpCisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKwkJY29uc3QgY2hhciAqbmFtZTsKKwkJdW5zaWduZWQgbG9uZyBjb3BpZWQsIGFkZGVkLCBkYW1hZ2U7CisKKwkJbmFtZSA9IHAtPm9uZS0+cGF0aCA/IHAtPm9uZS0+cGF0aCA6IHAtPnR3by0+cGF0aDsKKworCQlpZiAoRElGRl9GSUxFX1ZBTElEKHAtPm9uZSkgJiYgRElGRl9GSUxFX1ZBTElEKHAtPnR3bykpIHsKKwkJCWRpZmZfcG9wdWxhdGVfZmlsZXNwZWMocC0+b25lLCAwKTsKKwkJCWRpZmZfcG9wdWxhdGVfZmlsZXNwZWMocC0+dHdvLCAwKTsKKwkJCWRpZmZjb3JlX2NvdW50X2NoYW5nZXMocC0+b25lLCBwLT50d28sIE5VTEwsIE5VTEwsIDAsCisJCQkJCSAgICAgICAmY29waWVkLCAmYWRkZWQpOworCQkJZGlmZl9mcmVlX2ZpbGVzcGVjX2RhdGEocC0+b25lKTsKKwkJCWRpZmZfZnJlZV9maWxlc3BlY19kYXRhKHAtPnR3byk7CisJCX0gZWxzZSBpZiAoRElGRl9GSUxFX1ZBTElEKHAtPm9uZSkpIHsKKwkJCWRpZmZfcG9wdWxhdGVfZmlsZXNwZWMocC0+b25lLCAxKTsKKwkJCWNvcGllZCA9IGFkZGVkID0gMDsKKwkJCWRpZmZfZnJlZV9maWxlc3BlY19kYXRhKHAtPm9uZSk7CisJCX0gZWxzZSBpZiAoRElGRl9GSUxFX1ZBTElEKHAtPnR3bykpIHsKKwkJCWRpZmZfcG9wdWxhdGVfZmlsZXNwZWMocC0+dHdvLCAxKTsKKwkJCWNvcGllZCA9IDA7CisJCQlhZGRlZCA9IHAtPnR3by0+c2l6ZTsKKwkJCWRpZmZfZnJlZV9maWxlc3BlY19kYXRhKHAtPnR3byk7CisJCX0gZWxzZQogCQkJY29udGludWU7Ci0JCWNoYW5nZWQgKz0gZGF0YS0+ZmlsZXNbaV0tPmFkZGVkOwotCQljaGFuZ2VkICs9IGRhdGEtPmZpbGVzW2ldLT5kZWxldGVkOworCisJCS8qCisJCSAqIE9yaWdpbmFsIG1pbnVzIGNvcGllZCBpcyB0aGUgcmVtb3ZlZCBtYXRlcmlhbCwKKwkJICogYWRkZWQgaXMgdGhlIG5ldyBtYXRlcmlhbC4gIFRoZXkgYXJlIGJvdGggZGFtYWdlcworCQkgKiBtYWRlIHRvIHRoZSBwcmVpbWFnZS4KKwkJICovCisJCWRhbWFnZSA9IChwLT5vbmUtPnNpemUgLSBjb3BpZWQpICsgYWRkZWQ7CisKKwkJQUxMT0NfR1JPVyhkaXIuZmlsZXMsIGRpci5uciArIDEsIGRpci5hbGxvYyk7CisJCWRpci5maWxlc1tkaXIubnJdLm5hbWUgPSBuYW1lOworCQlkaXIuZmlsZXNbZGlyLm5yXS5jaGFuZ2VkID0gZGFtYWdlOworCQljaGFuZ2VkICs9IGRhbWFnZTsKKwkJZGlyLm5yKys7CiAJfQogCiAJLyogVGhpcyBjYW4gaGFwcGVuIGV2ZW4gd2l0aCBtYW55IGZpbGVzLCBpZiBldmVyeXRoaW5nIHdhcyByZW5hbWVzICovCkBAIC0xMDc0LDEwICsxMTEyLDYgQEAKIAkJcmV0dXJuOwogCiAJLyogU2hvdyBhbGwgZGlyZWN0b3JpZXMgd2l0aCBtb3JlIHRoYW4geCUgb2YgdGhlIGNoYW5nZXMgKi8KLQlkaXIuZmlsZXMgPSBkYXRhLT5maWxlczsKLQlkaXIubnIgPSBkYXRhLT5ucjsKLQlkaXIucGVyY2VudCA9IG9wdGlvbnMtPmRpcnN0YXRfcGVyY2VudDsKLQlkaXIuY3VtdWxhdGl2ZSA9IG9wdGlvbnMtPm91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9DVU1VTEFUSVZFOwogCWdhdGhlcl9kaXJzdGF0KG9wdGlvbnMtPmZpbGUsICZkaXIsIGNoYW5nZWQsICIiLCAwKTsKIH0KIApAQCAtMTExMywxMiArMTE0NywxNCBAQAogCWNoYXIgKmVycjsKIAogCWlmIChsaW5lWzBdID09ICcrJykgeworCQl1bnNpZ25lZCBiYWQ7CiAJCWRhdGEtPmxpbmVubysrOwotCQlkYXRhLT5zdGF0dXMgPSBjaGVja19hbmRfZW1pdF9saW5lKGxpbmUgKyAxLCBsZW4gLSAxLAorCQliYWQgPSBjaGVja19hbmRfZW1pdF9saW5lKGxpbmUgKyAxLCBsZW4gLSAxLAogCQkgICAgZGF0YS0+d3NfcnVsZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0JCWlmICghZGF0YS0+c3RhdHVzKQorCQlpZiAoIWJhZCkKIAkJCXJldHVybjsKLQkJZXJyID0gd2hpdGVzcGFjZV9lcnJvcl9zdHJpbmcoZGF0YS0+c3RhdHVzKTsKKwkJZGF0YS0+c3RhdHVzIHw9IGJhZDsKKwkJZXJyID0gd2hpdGVzcGFjZV9lcnJvcl9zdHJpbmcoYmFkKTsKIAkJZnByaW50ZihkYXRhLT5maWxlLCAiJXM6JWQ6ICVzLlxuIiwgZGF0YS0+ZmlsZW5hbWUsIGRhdGEtPmxpbmVubywgZXJyKTsKIAkJZnJlZShlcnIpOwogCQllbWl0X2xpbmUoZGF0YS0+ZmlsZSwgc2V0LCByZXNldCwgbGluZSwgMSk7CkBAIC0yMTg5LDcgKzIyMjUsNiBAQAogCW9wdGlvbnMtPnJlbmFtZV9saW1pdCA9IC0xOwogCW9wdGlvbnMtPmRpcnN0YXRfcGVyY2VudCA9IDM7CiAJb3B0aW9ucy0+Y29udGV4dCA9IDM7Ci0Jb3B0aW9ucy0+bXNnX3NlcCA9ICIiOwogCiAJb3B0aW9ucy0+Y2hhbmdlID0gZGlmZl9jaGFuZ2U7CiAJb3B0aW9ucy0+YWRkX3JlbW92ZSA9IGRpZmZfYWRkcmVtb3ZlOwpAQCAtMjQ2Niw2ICsyNTAxLDggQEAKIAkJRElGRl9PUFRfU0VUKG9wdGlvbnMsIEFMTE9XX0VYVEVSTkFMKTsKIAllbHNlIGlmICghc3RyY21wKGFyZywgIi0tbm8tZXh0LWRpZmYiKSkKIAkJRElGRl9PUFRfQ0xSKG9wdGlvbnMsIEFMTE9XX0VYVEVSTkFMKTsKKwllbHNlIGlmICghc3RyY21wKGFyZywgIi0taWdub3JlLXN1Ym1vZHVsZXMiKSkKKwkJRElGRl9PUFRfU0VUKG9wdGlvbnMsIElHTk9SRV9TVUJNT0RVTEVTKTsKIAogCS8qIG1pc2Mgb3B0aW9ucyAqLwogCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLXoiKSkKQEAgLTMxMDEsNyArMzEzOCw3IEBACiAJCXNlcGFyYXRvcisrOwogCX0KIAotCWlmIChvdXRwdXRfZm9ybWF0ICYgKERJRkZfRk9STUFUX0RJRkZTVEFUfERJRkZfRk9STUFUX1NIT1JUU1RBVHxESUZGX0ZPUk1BVF9OVU1TVEFUfERJRkZfRk9STUFUX0RJUlNUQVQpKSB7CisJaWYgKG91dHB1dF9mb3JtYXQgJiAoRElGRl9GT1JNQVRfRElGRlNUQVR8RElGRl9GT1JNQVRfU0hPUlRTVEFUfERJRkZfRk9STUFUX05VTVNUQVQpKSB7CiAJCXN0cnVjdCBkaWZmc3RhdF90IGRpZmZzdGF0OwogCiAJCW1lbXNldCgmZGlmZnN0YXQsIDAsIHNpemVvZihzdHJ1Y3QgZGlmZnN0YXRfdCkpOwpAQCAtMzExMSw4ICszMTQ4LDYgQEAKIAkJCWlmIChjaGVja19wYWlyX3N0YXR1cyhwKSkKIAkJCQlkaWZmX2ZsdXNoX3N0YXQocCwgb3B0aW9ucywgJmRpZmZzdGF0KTsKIAkJfQotCQlpZiAob3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX0RJUlNUQVQpCi0JCQlzaG93X2RpcnN0YXQoJmRpZmZzdGF0LCBvcHRpb25zKTsKIAkJaWYgKG91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9OVU1TVEFUKQogCQkJc2hvd19udW1zdGF0KCZkaWZmc3RhdCwgb3B0aW9ucyk7CiAJCWlmIChvdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfRElGRlNUQVQpCkBAIC0zMTIyLDYgKzMxNTcsOCBAQAogCQlmcmVlX2RpZmZzdGF0X2luZm8oJmRpZmZzdGF0KTsKIAkJc2VwYXJhdG9yKys7CiAJfQorCWlmIChvdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfRElSU1RBVCkKKwkJc2hvd19kaXJzdGF0KG9wdGlvbnMpOwogCiAJaWYgKG91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9TVU1NQVJZICYmICFpc19zdW1tYXJ5X2VtcHR5KHEpKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKQpAQCAtMzMyMCwxMSArMzM1NywxMyBAQAogdm9pZCBkaWZmX2FkZHJlbW92ZShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAogCQkgICAgaW50IGFkZHJlbW92ZSwgdW5zaWduZWQgbW9kZSwKIAkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCi0JCSAgICBjb25zdCBjaGFyICpiYXNlLCBjb25zdCBjaGFyICpwYXRoKQorCQkgICAgY29uc3QgY2hhciAqY29uY2F0cGF0aCkKIHsKLQljaGFyIGNvbmNhdHBhdGhbUEFUSF9NQVhdOwogCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUsICp0d287CiAKKwlpZiAoRElGRl9PUFRfVFNUKG9wdGlvbnMsIElHTk9SRV9TVUJNT0RVTEVTKSAmJiBTX0lTR0lUTElOSyhtb2RlKSkKKwkJcmV0dXJuOworCiAJLyogVGhpcyBtYXkgbG9vayBvZGQsIGJ1dCBpdCBpcyBhIHByZXBhcmF0aW9uIGZvcgogCSAqIGZlZWRpbmcgInRoZXJlIGFyZSB1bmNoYW5nZWQgZmlsZXMgd2hpY2ggc2hvdWxkCiAJICogbm90IHByb2R1Y2UgZGlmZnMsIGJ1dCB3aGVuIHlvdSBhcmUgZG9pbmcgY29weQpAQCAtMzM0MSw5ICszMzgwLDYgQEAKIAkJYWRkcmVtb3ZlID0gKGFkZHJlbW92ZSA9PSAnKycgPyAnLScgOgogCQkJICAgICBhZGRyZW1vdmUgPT0gJy0nID8gJysnIDogYWRkcmVtb3ZlKTsKIAotCWlmICghcGF0aCkgcGF0aCA9ICIiOwotCXNwcmludGYoY29uY2F0cGF0aCwgIiVzJXMiLCBiYXNlLCBwYXRoKTsKLQogCWlmIChvcHRpb25zLT5wcmVmaXggJiYKIAkgICAgc3RybmNtcChjb25jYXRwYXRoLCBvcHRpb25zLT5wcmVmaXgsIG9wdGlvbnMtPnByZWZpeF9sZW5ndGgpKQogCQlyZXR1cm47CkBAIC0zMzY0LDE5ICszNDAwLDIwIEBACiAJCSB1bnNpZ25lZCBvbGRfbW9kZSwgdW5zaWduZWQgbmV3X21vZGUsCiAJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpvbGRfc2hhMSwKIAkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ld19zaGExLAotCQkgY29uc3QgY2hhciAqYmFzZSwgY29uc3QgY2hhciAqcGF0aCkKKwkJIGNvbnN0IGNoYXIgKmNvbmNhdHBhdGgpCiB7Ci0JY2hhciBjb25jYXRwYXRoW1BBVEhfTUFYXTsKIAlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lLCAqdHdvOwogCisJaWYgKERJRkZfT1BUX1RTVChvcHRpb25zLCBJR05PUkVfU1VCTU9EVUxFUykgJiYgU19JU0dJVExJTksob2xkX21vZGUpCisJCQkmJiBTX0lTR0lUTElOSyhuZXdfbW9kZSkpCisJCXJldHVybjsKKwogCWlmIChESUZGX09QVF9UU1Qob3B0aW9ucywgUkVWRVJTRV9ESUZGKSkgewogCQl1bnNpZ25lZCB0bXA7CiAJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnRtcF9jOwogCQl0bXAgPSBvbGRfbW9kZTsgb2xkX21vZGUgPSBuZXdfbW9kZTsgbmV3X21vZGUgPSB0bXA7CiAJCXRtcF9jID0gb2xkX3NoYTE7IG9sZF9zaGExID0gbmV3X3NoYTE7IG5ld19zaGExID0gdG1wX2M7CiAJfQotCWlmICghcGF0aCkgcGF0aCA9ICIiOwotCXNwcmludGYoY29uY2F0cGF0aCwgIiVzJXMiLCBiYXNlLCBwYXRoKTsKIAogCWlmIChvcHRpb25zLT5wcmVmaXggJiYKIAkgICAgc3RybmNtcChjb25jYXRwYXRoLCBvcHRpb25zLT5wcmVmaXgsIG9wdGlvbnMtPnByZWZpeF9sZW5ndGgpKQpkaWZmIC0tZ2l0IGEvZGlmZi5oIGIvZGlmZi5oCmluZGV4IGYyYzc3MzkuLjUwZmI1ZGQgMTAwNjQ0Ci0tLSBhL2RpZmYuaAorKysgYi9kaWZmLmgKQEAgLTE0LDEyICsxNCwxMiBAQAogCQkgdW5zaWduZWQgb2xkX21vZGUsIHVuc2lnbmVkIG5ld19tb2RlLAogCQkgY29uc3QgdW5zaWduZWQgY2hhciAqb2xkX3NoYTEsCiAJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpuZXdfc2hhMSwKLQkJIGNvbnN0IGNoYXIgKmJhc2UsIGNvbnN0IGNoYXIgKnBhdGgpOworCQkgY29uc3QgY2hhciAqZnVsbHBhdGgpOwogCiB0eXBlZGVmIHZvaWQgKCphZGRfcmVtb3ZlX2ZuX3QpKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsCiAJCSAgICBpbnQgYWRkcmVtb3ZlLCB1bnNpZ25lZCBtb2RlLAogCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKLQkJICAgIGNvbnN0IGNoYXIgKmJhc2UsIGNvbnN0IGNoYXIgKnBhdGgpOworCQkgICAgY29uc3QgY2hhciAqZnVsbHBhdGgpOwogCiB0eXBlZGVmIHZvaWQgKCpkaWZmX2Zvcm1hdF9mbl90KShzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEsCiAJCXN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsIHZvaWQgKmRhdGEpOwpAQCAtNjMsNiArNjMsNyBAQAogI2RlZmluZSBESUZGX09QVF9SRVZFUlNFX0RJRkYgICAgICAgICgxIDw8IDE1KQogI2RlZmluZSBESUZGX09QVF9DSEVDS19GQUlMRUQgICAgICAgICgxIDw8IDE2KQogI2RlZmluZSBESUZGX09QVF9SRUxBVElWRV9OQU1FICAgICAgICgxIDw8IDE3KQorI2RlZmluZSBESUZGX09QVF9JR05PUkVfU1VCTU9EVUxFUyAgICgxIDw8IDE4KQogI2RlZmluZSBESUZGX09QVF9UU1Qob3B0cywgZmxhZykgICAgKChvcHRzKS0+ZmxhZ3MgJiBESUZGX09QVF8jI2ZsYWcpCiAjZGVmaW5lIERJRkZfT1BUX1NFVChvcHRzLCBmbGFnKSAgICAoKG9wdHMpLT5mbGFncyB8PSBESUZGX09QVF8jI2ZsYWcpCiAjZGVmaW5lIERJRkZfT1BUX0NMUihvcHRzLCBmbGFnKSAgICAoKG9wdHMpLT5mbGFncyAmPSB+RElGRl9PUFRfIyNmbGFnKQpAQCAtODMsMTIgKzg0LDEyIEBACiAJaW50IHBpY2theGVfb3B0czsKIAlpbnQgcmVuYW1lX3Njb3JlOwogCWludCByZW5hbWVfbGltaXQ7CisJaW50IHdhcm5fb25fdG9vX2xhcmdlX3JlbmFtZTsKIAlpbnQgZGlyc3RhdF9wZXJjZW50OwogCWludCBzZXR1cDsKIAlpbnQgYWJicmV2OwogCWNvbnN0IGNoYXIgKnByZWZpeDsKIAlpbnQgcHJlZml4X2xlbmd0aDsKLQljb25zdCBjaGFyICptc2dfc2VwOwogCWNvbnN0IGNoYXIgKnN0YXRfc2VwOwogCWxvbmcgeGRsX29wdHM7CiAKQEAgLTE2MywxNCArMTY0LDEzIEBACiAJCQkgICBpbnQgYWRkcmVtb3ZlLAogCQkJICAgdW5zaWduZWQgbW9kZSwKIAkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCi0JCQkgICBjb25zdCBjaGFyICpiYXNlLAotCQkJICAgY29uc3QgY2hhciAqcGF0aCk7CisJCQkgICBjb25zdCBjaGFyICpmdWxscGF0aCk7CiAKIGV4dGVybiB2b2lkIGRpZmZfY2hhbmdlKHN0cnVjdCBkaWZmX29wdGlvbnMgKiwKIAkJCXVuc2lnbmVkIG1vZGUxLCB1bnNpZ25lZCBtb2RlMiwKIAkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCiAJCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGEyLAotCQkJY29uc3QgY2hhciAqYmFzZSwgY29uc3QgY2hhciAqcGF0aCk7CisJCQljb25zdCBjaGFyICpmdWxscGF0aCk7CiAKIGV4dGVybiB2b2lkIGRpZmZfdW5tZXJnZShzdHJ1Y3QgZGlmZl9vcHRpb25zICosCiAJCQkgY29uc3QgY2hhciAqcGF0aCwKQEAgLTE4MSw4ICsxODEsOCBAQAogI2RlZmluZSBESUZGX1NFVFVQX1VTRV9DQUNIRQkJMgogI2RlZmluZSBESUZGX1NFVFVQX1VTRV9TSVpFX0NBQ0hFCTQKIAotZXh0ZXJuIGludCBnaXRfZGlmZl9iYXNpY19jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSk7Ci1leHRlcm4gaW50IGdpdF9kaWZmX3VpX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKTsKK2V4dGVybiBpbnQgZ2l0X2RpZmZfYmFzaWNfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKTsKK2V4dGVybiBpbnQgZ2l0X2RpZmZfdWlfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKTsKIGV4dGVybiBpbnQgZGlmZl91c2VfY29sb3JfZGVmYXVsdDsKIGV4dGVybiB2b2lkIGRpZmZfc2V0dXAoc3RydWN0IGRpZmZfb3B0aW9ucyAqKTsKIGV4dGVybiBpbnQgZGlmZl9vcHRfcGFyc2Uoc3RydWN0IGRpZmZfb3B0aW9ucyAqLCBjb25zdCBjaGFyICoqLCBpbnQpOwpAQCAtMjUwLDEwICsyNTAsNiBAQAogLyogcmVwb3J0IHJhY2lseS1jbGVhbiBwYXRocyBhcyBtb2RpZmllZCAqLwogI2RlZmluZSBESUZGX1JBQ1lfSVNfTU9ESUZJRUQgMDIKIGV4dGVybiBpbnQgcnVuX2RpZmZfZmlsZXMoc3RydWN0IHJldl9pbmZvICpyZXZzLCB1bnNpZ25lZCBpbnQgb3B0aW9uKTsKLWV4dGVybiBpbnQgc2V0dXBfZGlmZl9ub19pbmRleChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCi0JCWludCBhcmdjLCBjb25zdCBjaGFyICoqIGFyZ3YsIGludCBub25naXQsIGNvbnN0IGNoYXIgKnByZWZpeCk7Ci1leHRlcm4gaW50IHJ1bl9kaWZmX2ZpbGVzX2NtZChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7Ci0KIGV4dGVybiBpbnQgcnVuX2RpZmZfaW5kZXgoc3RydWN0IHJldl9pbmZvICpyZXZzLCBpbnQgY2FjaGVkKTsKIAogZXh0ZXJuIGludCBkb19kaWZmX2NhY2hlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgc3RydWN0IGRpZmZfb3B0aW9ucyAqKTsKQEAgLTI2MSw0ICsyNTcsNiBAQAogCiBleHRlcm4gaW50IGRpZmZfcmVzdWx0X2NvZGUoc3RydWN0IGRpZmZfb3B0aW9ucyAqLCBpbnQpOwogCitleHRlcm4gdm9pZCBkaWZmX25vX2luZGV4KHN0cnVjdCByZXZfaW5mbyAqLCBpbnQsIGNvbnN0IGNoYXIgKiosIGludCwgY29uc3QgY2hhciAqKTsKKwogI2VuZGlmIC8qIERJRkZfSCAqLwpkaWZmIC0tZ2l0IGEvZGlmZmNvcmUtcmVuYW1lLmMgYi9kaWZmY29yZS1yZW5hbWUuYwppbmRleCAzMTk0MWJjLi4xYjJlYmI0IDEwMDY0NAotLS0gYS9kaWZmY29yZS1yZW5hbWUuYworKysgYi9kaWZmY29yZS1yZW5hbWUuYwpAQCAtMTEyLDggKzExMiw4IEBACiBzdHJ1Y3QgZGlmZl9zY29yZSB7CiAJaW50IHNyYzsgLyogaW5kZXggaW4gcmVuYW1lX3NyYyAqLwogCWludCBkc3Q7IC8qIGluZGV4IGluIHJlbmFtZV9kc3QgKi8KLQlpbnQgc2NvcmU7Ci0JaW50IG5hbWVfc2NvcmU7CisJdW5zaWduZWQgc2hvcnQgc2NvcmU7CisJc2hvcnQgbmFtZV9zY29yZTsKIH07CiAKIHN0YXRpYyBpbnQgZXN0aW1hdGVfc2ltaWxhcml0eShzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqc3JjLApAQCAtMjIzLDYgKzIyMywxMiBAQAogewogCWNvbnN0IHN0cnVjdCBkaWZmX3Njb3JlICphID0gYV8sICpiID0gYl87CiAKKwkvKiBzaW5rIHRoZSB1bnVzZWQgb25lcyB0byB0aGUgYm90dG9tICovCisJaWYgKGEtPmRzdCA8IDApCisJCXJldHVybiAoMCA8PSBiLT5kc3QpOworCWVsc2UgaWYgKGItPmRzdCA8IDApCisJCXJldHVybiAtMTsKKwogCWlmIChhLT5zY29yZSA9PSBiLT5zY29yZSkKIAkJcmV0dXJuIGItPm5hbWVfc2NvcmUgLSBhLT5uYW1lX3Njb3JlOwogCkBAIC0zODcsNiArMzkzLDIyIEBACiAJcmV0dXJuIGk7CiB9CiAKKyNkZWZpbmUgTlVNX0NBTkRJREFURV9QRVJfRFNUIDQKK3N0YXRpYyB2b2lkIHJlY29yZF9pZl9iZXR0ZXIoc3RydWN0IGRpZmZfc2NvcmUgbVtdLCBzdHJ1Y3QgZGlmZl9zY29yZSAqbykKK3sKKwlpbnQgaSwgd29yc3Q7CisKKwkvKiBmaW5kIHRoZSB3b3JzdCBvbmUgKi8KKwl3b3JzdCA9IDA7CisJZm9yIChpID0gMTsgaSA8IE5VTV9DQU5ESURBVEVfUEVSX0RTVDsgaSsrKQorCQlpZiAoc2NvcmVfY29tcGFyZSgmbVtpXSwgJm1bd29yc3RdKSA+IDApCisJCQl3b3JzdCA9IGk7CisKKwkvKiBpcyBpdCBiZXR0ZXIgdGhhbiB0aGUgd29yc3Qgb25lPyAqLworCWlmIChzY29yZV9jb21wYXJlKCZtW3dvcnN0XSwgbykgPiAwKQorCQltW3dvcnN0XSA9ICpvOworfQorCiB2b2lkIGRpZmZjb3JlX3JlbmFtZShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zKQogewogCWludCBkZXRlY3RfcmVuYW1lID0gb3B0aW9ucy0+ZGV0ZWN0X3JlbmFtZTsKQEAgLTQ3MCw1MSArNDkyLDY2IEBACiAJCXJlbmFtZV9saW1pdCA9IDMyNzY3OwogCWlmICgobnVtX2NyZWF0ZSA+IHJlbmFtZV9saW1pdCAmJiBudW1fc3JjID4gcmVuYW1lX2xpbWl0KSB8fAogCSAgICAobnVtX2NyZWF0ZSAqIG51bV9zcmMgPiByZW5hbWVfbGltaXQgKiByZW5hbWVfbGltaXQpKSB7Ci0JCXdhcm5pbmcoInRvbyBtYW55IGZpbGVzLCBza2lwcGluZyBpbmV4YWN0IHJlbmFtZSBkZXRlY3Rpb24iKTsKKwkJaWYgKG9wdGlvbnMtPndhcm5fb25fdG9vX2xhcmdlX3JlbmFtZSkKKwkJCXdhcm5pbmcoInRvbyBtYW55IGZpbGVzLCBza2lwcGluZyBpbmV4YWN0IHJlbmFtZSBkZXRlY3Rpb24iKTsKIAkJZ290byBjbGVhbnVwOwogCX0KIAotCW14ID0geG1hbGxvYyhzaXplb2YoKm14KSAqIG51bV9jcmVhdGUgKiBudW1fc3JjKTsKKwlteCA9IHhjYWxsb2MobnVtX2NyZWF0ZSAqIE5VTV9DQU5ESURBVEVfUEVSX0RTVCwgc2l6ZW9mKCpteCkpOwogCWZvciAoZHN0X2NudCA9IGkgPSAwOyBpIDwgcmVuYW1lX2RzdF9ucjsgaSsrKSB7Ci0JCWludCBiYXNlID0gZHN0X2NudCAqIG51bV9zcmM7CiAJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICp0d28gPSByZW5hbWVfZHN0W2ldLnR3bzsKKwkJc3RydWN0IGRpZmZfc2NvcmUgKm07CisKIAkJaWYgKHJlbmFtZV9kc3RbaV0ucGFpcikKIAkJCWNvbnRpbnVlOyAvKiBkZWFsdCB3aXRoIGV4YWN0IG1hdGNoIGFscmVhZHkuICovCisKKwkJbSA9ICZteFtkc3RfY250ICogTlVNX0NBTkRJREFURV9QRVJfRFNUXTsKKwkJZm9yIChqID0gMDsgaiA8IE5VTV9DQU5ESURBVEVfUEVSX0RTVDsgaisrKQorCQkJbVtqXS5kc3QgPSAtMTsKKwogCQlmb3IgKGogPSAwOyBqIDwgcmVuYW1lX3NyY19ucjsgaisrKSB7CiAJCQlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lID0gcmVuYW1lX3NyY1tqXS5vbmU7Ci0JCQlzdHJ1Y3QgZGlmZl9zY29yZSAqbSA9ICZteFtiYXNlK2pdOwotCQkJbS0+c3JjID0gajsKLQkJCW0tPmRzdCA9IGk7Ci0JCQltLT5zY29yZSA9IGVzdGltYXRlX3NpbWlsYXJpdHkob25lLCB0d28sCi0JCQkJCQkgICAgICAgbWluaW11bV9zY29yZSk7Ci0JCQltLT5uYW1lX3Njb3JlID0gYmFzZW5hbWVfc2FtZShvbmUsIHR3byk7CisJCQlzdHJ1Y3QgZGlmZl9zY29yZSB0aGlzX3NyYzsKKwkJCXRoaXNfc3JjLnNjb3JlID0gZXN0aW1hdGVfc2ltaWxhcml0eShvbmUsIHR3bywKKwkJCQkJCQkgICAgIG1pbmltdW1fc2NvcmUpOworCQkJdGhpc19zcmMubmFtZV9zY29yZSA9IGJhc2VuYW1lX3NhbWUob25lLCB0d28pOworCQkJdGhpc19zcmMuZHN0ID0gaTsKKwkJCXRoaXNfc3JjLnNyYyA9IGo7CisJCQlyZWNvcmRfaWZfYmV0dGVyKG0sICZ0aGlzX3NyYyk7CiAJCQlkaWZmX2ZyZWVfZmlsZXNwZWNfYmxvYihvbmUpOwogCQl9CiAJCS8qIFdlIGRvIG5vdCBuZWVkIHRoZSB0ZXh0IGFueW1vcmUgKi8KIAkJZGlmZl9mcmVlX2ZpbGVzcGVjX2Jsb2IodHdvKTsKIAkJZHN0X2NudCsrOwogCX0KKwogCS8qIGNvc3QgbWF0cml4IHNvcnRlZCBieSBtb3N0IHRvIGxlYXN0IHNpbWlsYXIgcGFpciAqLwotCXFzb3J0KG14LCBudW1fY3JlYXRlICogbnVtX3NyYywgc2l6ZW9mKCpteCksIHNjb3JlX2NvbXBhcmUpOwotCWZvciAoaSA9IDA7IGkgPCBudW1fY3JlYXRlICogbnVtX3NyYzsgaSsrKSB7Ci0JCXN0cnVjdCBkaWZmX3JlbmFtZV9kc3QgKmRzdCA9ICZyZW5hbWVfZHN0W214W2ldLmRzdF07Ci0JCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzcmM7CisJcXNvcnQobXgsIGRzdF9jbnQgKiBOVU1fQ0FORElEQVRFX1BFUl9EU1QsIHNpemVvZigqbXgpLCBzY29yZV9jb21wYXJlKTsKKworCWZvciAoaSA9IDA7IGkgPCBkc3RfY250ICogTlVNX0NBTkRJREFURV9QRVJfRFNUOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfcmVuYW1lX2RzdCAqZHN0OworCisJCWlmICgobXhbaV0uZHN0IDwgMCkgfHwKKwkJICAgIChteFtpXS5zY29yZSA8IG1pbmltdW1fc2NvcmUpKQorCQkJYnJlYWs7IC8qIHRoZXJlIGlzIG5vIG1vcmUgdXNhYmxlIHBhaXIuICovCisJCWRzdCA9ICZyZW5hbWVfZHN0W214W2ldLmRzdF07CiAJCWlmIChkc3QtPnBhaXIpCiAJCQljb250aW51ZTsgLyogYWxyZWFkeSBkb25lLCBlaXRoZXIgZXhhY3Qgb3IgZnV6enkuICovCi0JCWlmIChteFtpXS5zY29yZSA8IG1pbmltdW1fc2NvcmUpCi0JCQlicmVhazsgLyogdGhlcmUgaXMgbm8gbW9yZSB1c2FibGUgcGFpci4gKi8KLQkJc3JjID0gcmVuYW1lX3NyY1tteFtpXS5zcmNdLm9uZTsKLQkJaWYgKHNyYy0+cmVuYW1lX3VzZWQpCisJCWlmIChyZW5hbWVfc3JjW214W2ldLnNyY10ub25lLT5yZW5hbWVfdXNlZCkKIAkJCWNvbnRpbnVlOwogCQlyZWNvcmRfcmVuYW1lX3BhaXIobXhbaV0uZHN0LCBteFtpXS5zcmMsIG14W2ldLnNjb3JlKTsKIAkJcmVuYW1lX2NvdW50Kys7CiAJfQotCWZvciAoaSA9IDA7IGkgPCBudW1fY3JlYXRlICogbnVtX3NyYzsgaSsrKSB7Ci0JCXN0cnVjdCBkaWZmX3JlbmFtZV9kc3QgKmRzdCA9ICZyZW5hbWVfZHN0W214W2ldLmRzdF07CisKKwlmb3IgKGkgPSAwOyBpIDwgZHN0X2NudCAqIE5VTV9DQU5ESURBVEVfUEVSX0RTVDsgaSsrKSB7CisJCXN0cnVjdCBkaWZmX3JlbmFtZV9kc3QgKmRzdDsKKworCQlpZiAoKG14W2ldLmRzdCA8IDApIHx8CisJCSAgICAobXhbaV0uc2NvcmUgPCBtaW5pbXVtX3Njb3JlKSkKKwkJCWJyZWFrOyAvKiB0aGVyZSBpcyBubyBtb3JlIHVzYWJsZSBwYWlyLiAqLworCQlkc3QgPSAmcmVuYW1lX2RzdFtteFtpXS5kc3RdOwogCQlpZiAoZHN0LT5wYWlyKQogCQkJY29udGludWU7IC8qIGFscmVhZHkgZG9uZSwgZWl0aGVyIGV4YWN0IG9yIGZ1enp5LiAqLwotCQlpZiAobXhbaV0uc2NvcmUgPCBtaW5pbXVtX3Njb3JlKQotCQkJYnJlYWs7IC8qIHRoZXJlIGlzIG5vIG1vcmUgdXNhYmxlIHBhaXIuICovCiAJCXJlY29yZF9yZW5hbWVfcGFpcihteFtpXS5kc3QsIG14W2ldLnNyYywgbXhbaV0uc2NvcmUpOwogCQlyZW5hbWVfY291bnQrKzsKIAl9CmRpZmYgLS1naXQgYS9kaXIuYyBiL2Rpci5jCmluZGV4IGQ3OTc2MmMuLjEwOWUwNWIgMTAwNjQ0Ci0tLSBhL2Rpci5jCisrKyBiL2Rpci5jCkBAIC01Miw2ICs1MiwxMSBAQAogCXJldHVybiBwcmVmaXg7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHNwZWNpYWxfY2hhcih1bnNpZ25lZCBjaGFyIGMxKQoreworCXJldHVybiAhYzEgfHwgYzEgPT0gJyonIHx8IGMxID09ICdbJyB8fCBjMSA9PSAnPycgfHwgYzEgPT0gJ1xcJzsKK30KKwogLyoKICAqIERvZXMgJ21hdGNoJyBtYXRjaGVzIHRoZSBnaXZlbiBuYW1lPwogICogQSBtYXRjaCBpcyBmb3VuZCBpZgpAQCAtNjksMTQgKzc0LDI3IEBACiAJaW50IG1hdGNobGVuOwogCiAJLyogSWYgdGhlIG1hdGNoIHdhcyBqdXN0IHRoZSBwcmVmaXgsIHdlIG1hdGNoZWQgKi8KLQltYXRjaGxlbiA9IHN0cmxlbihtYXRjaCk7Ci0JaWYgKCFtYXRjaGxlbikKKwlpZiAoISptYXRjaCkKIAkJcmV0dXJuIE1BVENIRURfUkVDVVJTSVZFTFk7CiAKKwlmb3IgKDs7KSB7CisJCXVuc2lnbmVkIGNoYXIgYzEgPSAqbWF0Y2g7CisJCXVuc2lnbmVkIGNoYXIgYzIgPSAqbmFtZTsKKwkJaWYgKHNwZWNpYWxfY2hhcihjMSkpCisJCQlicmVhazsKKwkJaWYgKGMxICE9IGMyKQorCQkJcmV0dXJuIDA7CisJCW1hdGNoKys7CisJCW5hbWUrKzsKKwkJbmFtZWxlbi0tOworCX0KKworCiAJLyoKIAkgKiBJZiB3ZSBkb24ndCBtYXRjaCB0aGUgbWF0Y2hzdHJpbmcgZXhhY3RseSwKIAkgKiB3ZSBuZWVkIHRvIG1hdGNoIGJ5IGZubWF0Y2gKIAkgKi8KKwltYXRjaGxlbiA9IHN0cmxlbihtYXRjaCk7CiAJaWYgKHN0cm5jbXAobWF0Y2gsIG5hbWUsIG1hdGNobGVuKSkKIAkJcmV0dXJuICFmbm1hdGNoKG1hdGNoLCBuYW1lLCAwKSA/IE1BVENIRURfRk5NQVRDSCA6IDA7CiAKQEAgLTM3MSw3ICszODksNyBAQAogCiBzdHJ1Y3QgZGlyX2VudHJ5ICpkaXJfYWRkX25hbWUoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwgY29uc3QgY2hhciAqcGF0aG5hbWUsIGludCBsZW4pCiB7Ci0JaWYgKGNhY2hlX25hbWVfZXhpc3RzKHBhdGhuYW1lLCBsZW4pKQorCWlmIChjYWNoZV9uYW1lX2V4aXN0cyhwYXRobmFtZSwgbGVuLCBpZ25vcmVfY2FzZSkpCiAJCXJldHVybiBOVUxMOwogCiAJQUxMT0NfR1JPVyhkaXItPmVudHJpZXMsIGRpci0+bnIrMSwgZGlyLT5hbGxvYyk7CmRpZmYgLS1naXQgYS9lbnZpcm9ubWVudC5jIGIvZW52aXJvbm1lbnQuYwppbmRleCA2NzM5YTNmLi5kNWMzZTI5IDEwMDY0NAotLS0gYS9lbnZpcm9ubWVudC5jCisrKyBiL2Vudmlyb25tZW50LmMKQEAgLTExLDkgKzExLDExIEBACiAKIGNoYXIgZ2l0X2RlZmF1bHRfZW1haWxbTUFYX0dJVE5BTUVdOwogY2hhciBnaXRfZGVmYXVsdF9uYW1lW01BWF9HSVROQU1FXTsKK2ludCB1c2VyX2lkZW50X2V4cGxpY2l0bHlfZ2l2ZW47CiBpbnQgdHJ1c3RfZXhlY3V0YWJsZV9iaXQgPSAxOwogaW50IHF1b3RlX3BhdGhfZnVsbHkgPSAxOwogaW50IGhhc19zeW1saW5rcyA9IDE7CitpbnQgaWdub3JlX2Nhc2U7CiBpbnQgYXNzdW1lX3VuY2hhbmdlZDsKIGludCBwcmVmZXJfc3ltbGlua19yZWZzOwogaW50IGlzX2JhcmVfcmVwb3NpdG9yeV9jZmcgPSAtMTsgLyogdW5zcGVjaWZpZWQgKi8KQEAgLTI3LDYgKzI5LDcgQEAKIGludCB6bGliX2NvbXByZXNzaW9uX2xldmVsID0gWl9CRVNUX1NQRUVEOwogaW50IGNvcmVfY29tcHJlc3Npb25fbGV2ZWw7CiBpbnQgY29yZV9jb21wcmVzc2lvbl9zZWVuOworaW50IGZzeW5jX29iamVjdF9maWxlczsKIHNpemVfdCBwYWNrZWRfZ2l0X3dpbmRvd19zaXplID0gREVGQVVMVF9QQUNLRURfR0lUX1dJTkRPV19TSVpFOwogc2l6ZV90IHBhY2tlZF9naXRfbGltaXQgPSBERUZBVUxUX1BBQ0tFRF9HSVRfTElNSVQ7CiBzaXplX3QgZGVsdGFfYmFzZV9jYWNoZV9saW1pdCA9IDE2ICogMTAyNCAqIDEwMjQ7CkBAIC0zOCwxMCArNDEsMTEgQEAKIGVudW0gc2FmZV9jcmxmIHNhZmVfY3JsZiA9IFNBRkVfQ1JMRl9XQVJOOwogdW5zaWduZWQgd2hpdGVzcGFjZV9ydWxlX2NmZyA9IFdTX0RFRkFVTFRfUlVMRTsKIGVudW0gYnJhbmNoX3RyYWNrIGdpdF9icmFuY2hfdHJhY2sgPSBCUkFOQ0hfVFJBQ0tfUkVNT1RFOworZW51bSByZWJhc2Vfc2V0dXBfdHlwZSBhdXRvcmViYXNlID0gQVVUT1JFQkFTRV9ORVZFUjsKIAogLyogVGhpcyBpcyBzZXQgYnkgc2V0dXBfZ2l0X2Rpcl9nZW50bHkoKSBhbmQvb3IgZ2l0X2RlZmF1bHRfY29uZmlnKCkgKi8KIGNoYXIgKmdpdF93b3JrX3RyZWVfY2ZnOwotc3RhdGljIGNvbnN0IGNoYXIgKndvcmtfdHJlZTsKK3N0YXRpYyBjaGFyICp3b3JrX3RyZWU7CiAKIHN0YXRpYyBjb25zdCBjaGFyICpnaXRfZGlyOwogc3RhdGljIGNoYXIgKmdpdF9vYmplY3RfZGlyLCAqZ2l0X2luZGV4X2ZpbGUsICpnaXRfcmVmc19kaXIsICpnaXRfZ3JhZnRfZmlsZTsKQEAgLTUwLDYgKzU0LDggQEAKIHsKIAlnaXRfZGlyID0gZ2V0ZW52KEdJVF9ESVJfRU5WSVJPTk1FTlQpOwogCWlmICghZ2l0X2RpcikKKwkJZ2l0X2RpciA9IHJlYWRfZ2l0ZmlsZV9nZW50bHkoREVGQVVMVF9HSVRfRElSX0VOVklST05NRU5UKTsKKwlpZiAoIWdpdF9kaXIpCiAJCWdpdF9kaXIgPSBERUZBVUxUX0dJVF9ESVJfRU5WSVJPTk1FTlQ7CiAJZ2l0X29iamVjdF9kaXIgPSBnZXRlbnYoREJfRU5WSVJPTk1FTlQpOwogCWlmICghZ2l0X29iamVjdF9kaXIpIHsKQEAgLTgxLDEwICs4NywyNiBAQAogCXJldHVybiBnaXRfZGlyOwogfQogCitzdGF0aWMgaW50IGdpdF93b3JrX3RyZWVfaW5pdGlhbGl6ZWQ7CisKKy8qCisgKiBOb3RlLiAgVGhpcyB3b3JrcyBvbmx5IGJlZm9yZSB5b3UgdXNlZCBhIHdvcmsgdHJlZS4gIFRoaXMgd2FzIGFkZGVkCisgKiBwcmltYXJpbHkgdG8gc3VwcG9ydCBnaXQtY2xvbmUgdG8gd29yayBpbiBhIG5ldyByZXBvc2l0b3J5IGl0IGp1c3QKKyAqIGNyZWF0ZWQsIGFuZCBpcyBub3QgbWVhbnQgdG8gZmxpcCBiZXR3ZWVuIGRpZmZlcmVudCB3b3JrIHRyZWVzLgorICovCit2b2lkIHNldF9naXRfd29ya190cmVlKGNvbnN0IGNoYXIgKm5ld193b3JrX3RyZWUpCit7CisJaWYgKGlzX2JhcmVfcmVwb3NpdG9yeV9jZmcgPj0gMCkKKwkJZGllKCJjYW5ub3Qgc2V0IHdvcmsgdHJlZSBhZnRlciBpbml0aWFsaXphdGlvbiIpOworCWdpdF93b3JrX3RyZWVfaW5pdGlhbGl6ZWQgPSAxOworCWZyZWUod29ya190cmVlKTsKKwl3b3JrX3RyZWUgPSB4c3RyZHVwKG1ha2VfYWJzb2x1dGVfcGF0aChuZXdfd29ya190cmVlKSk7CisJaXNfYmFyZV9yZXBvc2l0b3J5X2NmZyA9IDA7Cit9CisKIGNvbnN0IGNoYXIgKmdldF9naXRfd29ya190cmVlKHZvaWQpCiB7Ci0Jc3RhdGljIGludCBpbml0aWFsaXplZCA9IDA7Ci0JaWYgKCFpbml0aWFsaXplZCkgeworCWlmICghZ2l0X3dvcmtfdHJlZV9pbml0aWFsaXplZCkgewogCQl3b3JrX3RyZWUgPSBnZXRlbnYoR0lUX1dPUktfVFJFRV9FTlZJUk9OTUVOVCk7CiAJCS8qIGNvcmUuYmFyZSA9IHRydWUgb3ZlcnJpZGVzIGltcGxpY2l0IGFuZCBjb25maWcgd29yayB0cmVlICovCiAJCWlmICghd29ya190cmVlICYmIGlzX2JhcmVfcmVwb3NpdG9yeV9jZmcgPCAxKSB7CkBAIC05NCw3ICsxMTYsNyBAQAogCQkJCXdvcmtfdHJlZSA9IHhzdHJkdXAobWFrZV9hYnNvbHV0ZV9wYXRoKGdpdF9wYXRoKHdvcmtfdHJlZSkpKTsKIAkJfSBlbHNlIGlmICh3b3JrX3RyZWUpCiAJCQl3b3JrX3RyZWUgPSB4c3RyZHVwKG1ha2VfYWJzb2x1dGVfcGF0aCh3b3JrX3RyZWUpKTsKLQkJaW5pdGlhbGl6ZWQgPSAxOworCQlnaXRfd29ya190cmVlX2luaXRpYWxpemVkID0gMTsKIAkJaWYgKHdvcmtfdHJlZSkKIAkJCWlzX2JhcmVfcmVwb3NpdG9yeV9jZmcgPSAwOwogCX0KZGlmZiAtLWdpdCBhL2Zhc3QtaW1wb3J0LmMgYi9mYXN0LWltcG9ydC5jCmluZGV4IDczZTU0MzkuLmU3MmIyODYgMTAwNjQ0Ci0tLSBhL2Zhc3QtaW1wb3J0LmMKKysrIGIvZmFzdC1pbXBvcnQuYwpAQCAtODkwLDcgKzg5MCw3IEBACiAJCVNIQTFfVXBkYXRlKCZjdHgsICgqYyktPnNoYTEsIDIwKTsKIAl9CiAJc2hhMXdyaXRlKGYsIHBhY2tfZGF0YS0+c2hhMSwgc2l6ZW9mKHBhY2tfZGF0YS0+c2hhMSkpOwotCXNoYTFjbG9zZShmLCBOVUxMLCAxKTsKKwlzaGExY2xvc2UoZiwgTlVMTCwgQ1NVTV9GU1lOQyk7CiAJZnJlZShpZHgpOwogCVNIQTFfRmluYWwocGFja19kYXRhLT5zaGExLCAmY3R4KTsKIAlyZXR1cm4gdG1wZmlsZTsKQEAgLTE2OTAsNyArMTY5MCw3IEBACiAJCXVuZ2V0Yyh0ZXJtX2NoYXIsIHN0ZGluKTsKIH0KIAotc3RhdGljIHZvaWQgY21kX21hcmsodm9pZCkKK3N0YXRpYyB2b2lkIHBhcnNlX21hcmsodm9pZCkKIHsKIAlpZiAoIXByZWZpeGNtcChjb21tYW5kX2J1Zi5idWYsICJtYXJrIDoiKSkgewogCQluZXh0X21hcmsgPSBzdHJ0b3VtYXgoY29tbWFuZF9idWYuYnVmICsgNiwgTlVMTCwgMTApOwpAQCAtMTcwMCw3ICsxNzAwLDcgQEAKIAkJbmV4dF9tYXJrID0gMDsKIH0KIAotc3RhdGljIHZvaWQgY21kX2RhdGEoc3RydWN0IHN0cmJ1ZiAqc2IpCitzdGF0aWMgdm9pZCBwYXJzZV9kYXRhKHN0cnVjdCBzdHJidWYgKnNiKQogewogCXN0cmJ1Zl9yZXNldChzYik7CiAKQEAgLTE3OTgsMTMgKzE3OTgsMTMgQEAKIAlyZXR1cm4gaWRlbnQ7CiB9CiAKLXN0YXRpYyB2b2lkIGNtZF9uZXdfYmxvYih2b2lkKQorc3RhdGljIHZvaWQgcGFyc2VfbmV3X2Jsb2Iodm9pZCkKIHsKIAlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKIAogCXJlYWRfbmV4dF9jb21tYW5kKCk7Ci0JY21kX21hcmsoKTsKLQljbWRfZGF0YSgmYnVmKTsKKwlwYXJzZV9tYXJrKCk7CisJcGFyc2VfZGF0YSgmYnVmKTsKIAlzdG9yZV9vYmplY3QoT0JKX0JMT0IsICZidWYsICZsYXN0X2Jsb2IsIE5VTEwsIG5leHRfbWFyayk7CiB9CiAKQEAgLTE5MDgsNyArMTkwOCw3IEBACiAJCQlwID0gdXEuYnVmOwogCQl9CiAJCXJlYWRfbmV4dF9jb21tYW5kKCk7Ci0JCWNtZF9kYXRhKCZidWYpOworCQlwYXJzZV9kYXRhKCZidWYpOwogCQlzdG9yZV9vYmplY3QoT0JKX0JMT0IsICZidWYsICZsYXN0X2Jsb2IsIHNoYTEsIDApOwogCX0gZWxzZSBpZiAob2UpIHsKIAkJaWYgKG9lLT50eXBlICE9IE9CSl9CTE9CKQpAQCAtMTk5NSw3ICsxOTk1LDcgQEAKIAlsb2FkX3RyZWUoJmItPmJyYW5jaF90cmVlKTsKIH0KIAotc3RhdGljIHZvaWQgY21kX2Zyb21fY29tbWl0KHN0cnVjdCBicmFuY2ggKmIsIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplKQorc3RhdGljIHZvaWQgcGFyc2VfZnJvbV9jb21taXQoc3RydWN0IGJyYW5jaCAqYiwgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJaWYgKCFidWYgfHwgc2l6ZSA8IDQ2KQogCQlkaWUoIk5vdCBhIHZhbGlkIGNvbW1pdDogJXMiLCBzaGExX3RvX2hleChiLT5zaGExKSk7CkBAIC0yMDA2LDcgKzIwMDYsNyBAQAogCQliLT5icmFuY2hfdHJlZS52ZXJzaW9uc1sxXS5zaGExKTsKIH0KIAotc3RhdGljIHZvaWQgY21kX2Zyb21fZXhpc3Rpbmcoc3RydWN0IGJyYW5jaCAqYikKK3N0YXRpYyB2b2lkIHBhcnNlX2Zyb21fZXhpc3Rpbmcoc3RydWN0IGJyYW5jaCAqYikKIHsKIAlpZiAoaXNfbnVsbF9zaGExKGItPnNoYTEpKSB7CiAJCWhhc2hjbHIoYi0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMF0uc2hhMSk7CkBAIC0yMDE3LDEyICsyMDE3LDEyIEBACiAKIAkJYnVmID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2UoYi0+c2hhMSwKIAkJCWNvbW1pdF90eXBlLCAmc2l6ZSwgYi0+c2hhMSk7Ci0JCWNtZF9mcm9tX2NvbW1pdChiLCBidWYsIHNpemUpOworCQlwYXJzZV9mcm9tX2NvbW1pdChiLCBidWYsIHNpemUpOwogCQlmcmVlKGJ1Zik7CiAJfQogfQogCi1zdGF0aWMgaW50IGNtZF9mcm9tKHN0cnVjdCBicmFuY2ggKmIpCitzdGF0aWMgaW50IHBhcnNlX2Zyb20oc3RydWN0IGJyYW5jaCAqYikKIHsKIAljb25zdCBjaGFyICpmcm9tOwogCXN0cnVjdCBicmFuY2ggKnM7CkBAIC0yMDUzLDEyICsyMDUzLDEyIEBACiAJCWlmIChvZS0+cGFja19pZCAhPSBNQVhfUEFDS19JRCkgewogCQkJdW5zaWduZWQgbG9uZyBzaXplOwogCQkJY2hhciAqYnVmID0gZ2ZpX3VucGFja19lbnRyeShvZSwgJnNpemUpOwotCQkJY21kX2Zyb21fY29tbWl0KGIsIGJ1Ziwgc2l6ZSk7CisJCQlwYXJzZV9mcm9tX2NvbW1pdChiLCBidWYsIHNpemUpOwogCQkJZnJlZShidWYpOwogCQl9IGVsc2UKLQkJCWNtZF9mcm9tX2V4aXN0aW5nKGIpOworCQkJcGFyc2VfZnJvbV9leGlzdGluZyhiKTsKIAl9IGVsc2UgaWYgKCFnZXRfc2hhMShmcm9tLCBiLT5zaGExKSkKLQkJY21kX2Zyb21fZXhpc3RpbmcoYik7CisJCXBhcnNlX2Zyb21fZXhpc3RpbmcoYik7CiAJZWxzZQogCQlkaWUoIkludmFsaWQgcmVmIG5hbWUgb3IgU0hBMSBleHByZXNzaW9uOiAlcyIsIGZyb20pOwogCkBAIC0yMDY2LDcgKzIwNjYsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgc3RydWN0IGhhc2hfbGlzdCAqY21kX21lcmdlKHVuc2lnbmVkIGludCAqY291bnQpCitzdGF0aWMgc3RydWN0IGhhc2hfbGlzdCAqcGFyc2VfbWVyZ2UodW5zaWduZWQgaW50ICpjb3VudCkKIHsKIAlzdHJ1Y3QgaGFzaF9saXN0ICpsaXN0ID0gTlVMTCwgKm4sICplID0gZTsKIAljb25zdCBjaGFyICpmcm9tOwpAQCAtMjEwNyw3ICsyMTA3LDcgQEAKIAlyZXR1cm4gbGlzdDsKIH0KIAotc3RhdGljIHZvaWQgY21kX25ld19jb21taXQodm9pZCkKK3N0YXRpYyB2b2lkIHBhcnNlX25ld19jb21taXQodm9pZCkKIHsKIAlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBtc2cgPSBTVFJCVUZfSU5JVDsKIAlzdHJ1Y3QgYnJhbmNoICpiOwpAQCAtMjEyNCw3ICsyMTI0LDcgQEAKIAkJYiA9IG5ld19icmFuY2goc3ApOwogCiAJcmVhZF9uZXh0X2NvbW1hbmQoKTsKLQljbWRfbWFyaygpOworCXBhcnNlX21hcmsoKTsKIAlpZiAoIXByZWZpeGNtcChjb21tYW5kX2J1Zi5idWYsICJhdXRob3IgIikpIHsKIAkJYXV0aG9yID0gcGFyc2VfaWRlbnQoY29tbWFuZF9idWYuYnVmICsgNyk7CiAJCXJlYWRfbmV4dF9jb21tYW5kKCk7CkBAIC0yMTM1LDEwICsyMTM1LDEwIEBACiAJfQogCWlmICghY29tbWl0dGVyKQogCQlkaWUoIkV4cGVjdGVkIGNvbW1pdHRlciBidXQgZGlkbid0IGdldCBvbmUiKTsKLQljbWRfZGF0YSgmbXNnKTsKKwlwYXJzZV9kYXRhKCZtc2cpOwogCXJlYWRfbmV4dF9jb21tYW5kKCk7Ci0JY21kX2Zyb20oYik7Ci0JbWVyZ2VfbGlzdCA9IGNtZF9tZXJnZSgmbWVyZ2VfY291bnQpOworCXBhcnNlX2Zyb20oYik7CisJbWVyZ2VfbGlzdCA9IHBhcnNlX21lcmdlKCZtZXJnZV9jb3VudCk7CiAKIAkvKiBlbnN1cmUgdGhlIGJyYW5jaCBpcyBhY3RpdmUvbG9hZGVkICovCiAJaWYgKCFiLT5icmFuY2hfdHJlZS50cmVlIHx8ICFtYXhfYWN0aXZlX2JyYW5jaGVzKSB7CkBAIC0yMTk2LDcgKzIxOTYsNyBAQAogCWItPmxhc3RfY29tbWl0ID0gb2JqZWN0X2NvdW50X2J5X3R5cGVbT0JKX0NPTU1JVF07CiB9CiAKLXN0YXRpYyB2b2lkIGNtZF9uZXdfdGFnKHZvaWQpCitzdGF0aWMgdm9pZCBwYXJzZV9uZXdfdGFnKHZvaWQpCiB7CiAJc3RhdGljIHN0cnVjdCBzdHJidWYgbXNnID0gU1RSQlVGX0lOSVQ7CiAJY2hhciAqc3A7CkBAIC0yMjUzLDcgKzIyNTMsNyBAQAogCiAJLyogdGFnIHBheWxvYWQvbWVzc2FnZSAqLwogCXJlYWRfbmV4dF9jb21tYW5kKCk7Ci0JY21kX2RhdGEoJm1zZyk7CisJcGFyc2VfZGF0YSgmbXNnKTsKIAogCS8qIGJ1aWxkIHRoZSB0YWcgb2JqZWN0ICovCiAJc3RyYnVmX3Jlc2V0KCZuZXdfZGF0YSk7CkBAIC0yMjczLDcgKzIyNzMsNyBAQAogCQl0LT5wYWNrX2lkID0gcGFja19pZDsKIH0KIAotc3RhdGljIHZvaWQgY21kX3Jlc2V0X2JyYW5jaCh2b2lkKQorc3RhdGljIHZvaWQgcGFyc2VfcmVzZXRfYnJhbmNoKHZvaWQpCiB7CiAJc3RydWN0IGJyYW5jaCAqYjsKIAljaGFyICpzcDsKQEAgLTIyOTMsMTIgKzIyOTMsMTIgQEAKIAllbHNlCiAJCWIgPSBuZXdfYnJhbmNoKHNwKTsKIAlyZWFkX25leHRfY29tbWFuZCgpOwotCWNtZF9mcm9tKGIpOworCXBhcnNlX2Zyb20oYik7CiAJaWYgKGNvbW1hbmRfYnVmLmxlbiA+IDApCiAJCXVucmVhZF9jb21tYW5kX2J1ZiA9IDE7CiB9CiAKLXN0YXRpYyB2b2lkIGNtZF9jaGVja3BvaW50KHZvaWQpCitzdGF0aWMgdm9pZCBwYXJzZV9jaGVja3BvaW50KHZvaWQpCiB7CiAJaWYgKG9iamVjdF9jb3VudCkgewogCQljeWNsZV9wYWNrZmlsZSgpOwpAQCAtMjMwOSw3ICsyMzA5LDcgQEAKIAlza2lwX29wdGlvbmFsX2xmKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNtZF9wcm9ncmVzcyh2b2lkKQorc3RhdGljIHZvaWQgcGFyc2VfcHJvZ3Jlc3Modm9pZCkKIHsKIAlmd3JpdGUoY29tbWFuZF9idWYuYnVmLCAxLCBjb21tYW5kX2J1Zi5sZW4sIHN0ZG91dCk7CiAJZnB1dGMoJ1xuJywgc3Rkb3V0KTsKQEAgLTIzNTIsNyArMjM1Miw3IEBACiAJZmNsb3NlKGYpOwogfQogCi1zdGF0aWMgaW50IGdpdF9wYWNrX2NvbmZpZyhjb25zdCBjaGFyICprLCBjb25zdCBjaGFyICp2KQorc3RhdGljIGludCBnaXRfcGFja19jb25maWcoY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdiwgdm9pZCAqY2IpCiB7CiAJaWYgKCFzdHJjbXAoaywgInBhY2suZGVwdGgiKSkgewogCQltYXhfZGVwdGggPSBnaXRfY29uZmlnX2ludChrLCB2KTsKQEAgLTIzNzAsNyArMjM3MCw3IEBACiAJCXBhY2tfY29tcHJlc3Npb25fc2VlbiA9IDE7CiAJCXJldHVybiAwOwogCX0KLQlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKGssIHYpOworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcoaywgdiwgY2IpOwogfQogCiBzdGF0aWMgY29uc3QgY2hhciBmYXN0X2ltcG9ydF91c2FnZVtdID0KQEAgLTIzODEsNyArMjM4MSw3IEBACiAJdW5zaWduZWQgaW50IGksIHNob3dfc3RhdHMgPSAxOwogCiAJc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOwotCWdpdF9jb25maWcoZ2l0X3BhY2tfY29uZmlnKTsKKwlnaXRfY29uZmlnKGdpdF9wYWNrX2NvbmZpZywgTlVMTCk7CiAJaWYgKCFwYWNrX2NvbXByZXNzaW9uX3NlZW4gJiYgY29yZV9jb21wcmVzc2lvbl9zZWVuKQogCQlwYWNrX2NvbXByZXNzaW9uX2xldmVsID0gY29yZV9jb21wcmVzc2lvbl9sZXZlbDsKIApAQCAtMjQ0OSwxNyArMjQ0OSwxNyBAQAogCXNldF9kaWVfcm91dGluZShkaWVfbmljZWx5KTsKIAl3aGlsZSAocmVhZF9uZXh0X2NvbW1hbmQoKSAhPSBFT0YpIHsKIAkJaWYgKCFzdHJjbXAoImJsb2IiLCBjb21tYW5kX2J1Zi5idWYpKQotCQkJY21kX25ld19ibG9iKCk7CisJCQlwYXJzZV9uZXdfYmxvYigpOwogCQllbHNlIGlmICghcHJlZml4Y21wKGNvbW1hbmRfYnVmLmJ1ZiwgImNvbW1pdCAiKSkKLQkJCWNtZF9uZXdfY29tbWl0KCk7CisJCQlwYXJzZV9uZXdfY29tbWl0KCk7CiAJCWVsc2UgaWYgKCFwcmVmaXhjbXAoY29tbWFuZF9idWYuYnVmLCAidGFnICIpKQotCQkJY21kX25ld190YWcoKTsKKwkJCXBhcnNlX25ld190YWcoKTsKIAkJZWxzZSBpZiAoIXByZWZpeGNtcChjb21tYW5kX2J1Zi5idWYsICJyZXNldCAiKSkKLQkJCWNtZF9yZXNldF9icmFuY2goKTsKKwkJCXBhcnNlX3Jlc2V0X2JyYW5jaCgpOwogCQllbHNlIGlmICghc3RyY21wKCJjaGVja3BvaW50IiwgY29tbWFuZF9idWYuYnVmKSkKLQkJCWNtZF9jaGVja3BvaW50KCk7CisJCQlwYXJzZV9jaGVja3BvaW50KCk7CiAJCWVsc2UgaWYgKCFwcmVmaXhjbXAoY29tbWFuZF9idWYuYnVmLCAicHJvZ3Jlc3MgIikpCi0JCQljbWRfcHJvZ3Jlc3MoKTsKKwkJCXBhcnNlX3Byb2dyZXNzKCk7CiAJCWVsc2UKIAkJCWRpZSgiVW5zdXBwb3J0ZWQgY29tbWFuZDogJXMiLCBjb21tYW5kX2J1Zi5idWYpOwogCX0KZGlmZiAtLWdpdCBhL2dpdC1hZGQtLWludGVyYWN0aXZlLnBlcmwgYi9naXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsCmluZGV4IGEwYTgxZjEuLjcwOWNhYTkgMTAwNzU1Ci0tLSBhL2dpdC1hZGQtLWludGVyYWN0aXZlLnBlcmwKKysrIGIvZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybApAQCAtMzk0LDkgKzM5NCw5IEBACiAJCQlpZiAoJGNob2ljZSA9fiBzL14tLy8pIHsKIAkJCQkkY2hvb3NlID0gMDsKIAkJCX0KLQkJCSMgQSByYW5nZSBjYW4gYmUgc3BlY2lmaWVkIGxpa2UgNS03Ci0JCQlpZiAoJGNob2ljZSA9fiAvXihcZCspLShcZCspJC8pIHsKLQkJCQkoJGJvdHRvbSwgJHRvcCkgPSAoJDEsICQyKTsKKwkJCSMgQSByYW5nZSBjYW4gYmUgc3BlY2lmaWVkIGxpa2UgNS03IG9yIDUtLgorCQkJaWYgKCRjaG9pY2UgPX4gL14oXGQrKS0oXGQqKSQvKSB7CisJCQkJKCRib3R0b20sICR0b3ApID0gKCQxLCBsZW5ndGgoJDIpID8gJDIgOiAxICsgQHN0dWZmKTsKIAkJCX0KIAkJCWVsc2lmICgkY2hvaWNlID1+IC9eXGQrJC8pIHsKIAkJCQkkYm90dG9tID0gJHRvcCA9ICRjaG9pY2U7CkBAIC01NTAsNiArNTUwLDIxIEBACiAJcmV0dXJuIEBodW5rOwogfQogCitzdWIgcGFyc2VfZGlmZl9oZWFkZXIgeworCW15ICRzcmMgPSBzaGlmdDsKKworCW15ICRoZWFkID0geyBURVhUID0+IFtdLCBESVNQTEFZID0+IFtdIH07CisJbXkgJG1vZGUgPSB7IFRFWFQgPT4gW10sIERJU1BMQVkgPT4gW10gfTsKKworCWZvciAobXkgJGkgPSAwOyAkaSA8IEB7JHNyYy0+e1RFWFR9fTsgJGkrKykgeworCQlteSAkZGVzdCA9ICRzcmMtPntURVhUfS0+WyRpXSA9fiAvXihvbGR8bmV3KSBtb2RlIChcZCspJC8gPworCQkJJG1vZGUgOiAkaGVhZDsKKwkJcHVzaCBAeyRkZXN0LT57VEVYVH19LCAkc3JjLT57VEVYVH0tPlskaV07CisJCXB1c2ggQHskZGVzdC0+e0RJU1BMQVl9fSwgJHNyYy0+e0RJU1BMQVl9LT5bJGldOworCX0KKwlyZXR1cm4gKCRoZWFkLCAkbW9kZSk7Cit9CisKIHN1YiBodW5rX3NwbGl0dGFibGUgewogCW15ICgkdGV4dCkgPSBAXzsKIApAQCAtNzk1LDkgKzgxMCw0MCBAQAogCW15ICgkaXgsICRudW0pOwogCW15ICRwYXRoID0gc2hpZnQ7CiAJbXkgKCRoZWFkLCBAaHVuaykgPSBwYXJzZV9kaWZmKCRwYXRoKTsKKwkoJGhlYWQsIG15ICRtb2RlKSA9IHBhcnNlX2RpZmZfaGVhZGVyKCRoZWFkKTsKIAlmb3IgKEB7JGhlYWQtPntESVNQTEFZfX0pIHsKIAkJcHJpbnQ7CiAJfQorCisJaWYgKEB7JG1vZGUtPntURVhUfX0pIHsKKwkJd2hpbGUgKDEpIHsKKwkJCXByaW50IEB7JG1vZGUtPntESVNQTEFZfX07CisJCQlwcmludCBjb2xvcmVkICRwcm9tcHRfY29sb3IsCisJCQkJIlN0YWdlIG1vZGUgY2hhbmdlIFt5L24vYS9kLz9dPyAiOworCQkJbXkgJGxpbmUgPSA8U1RESU4+OworCQkJaWYgKCRsaW5lID1+IC9eeS9pKSB7CisJCQkJJG1vZGUtPntVU0V9ID0gMTsKKwkJCQlsYXN0OworCQkJfQorCQkJZWxzaWYgKCRsaW5lID1+IC9ebi9pKSB7CisJCQkJJG1vZGUtPntVU0V9ID0gMDsKKwkJCQlsYXN0OworCQkJfQorCQkJZWxzaWYgKCRsaW5lID1+IC9eYS9pKSB7CisJCQkJJF8tPntVU0V9ID0gMSBmb3JlYWNoICgkbW9kZSwgQGh1bmspOworCQkJCWxhc3Q7CisJCQl9CisJCQllbHNpZiAoJGxpbmUgPX4gL15kL2kpIHsKKwkJCQkkXy0+e1VTRX0gPSAwIGZvcmVhY2ggKCRtb2RlLCBAaHVuayk7CisJCQkJbGFzdDsKKwkJCX0KKwkJCWVsc2UgeworCQkJCWhlbHBfcGF0Y2hfY21kKCcnKTsKKwkJCQluZXh0OworCQkJfQorCQl9CisJfQorCiAJJG51bSA9IHNjYWxhciBAaHVuazsKIAkkaXggPSAwOwogCkBAIC05MjAsNiArOTY2LDkgQEAKIAogCW15ICRuX2xvZnMgPSAwOwogCW15IEByZXN1bHQgPSAoKTsKKwlpZiAoJG1vZGUtPntVU0V9KSB7CisJCXB1c2ggQHJlc3VsdCwgQHskbW9kZS0+e1RFWFR9fTsKKwl9CiAJZm9yIChAaHVuaykgewogCQlteSAkdGV4dCA9ICRfLT57VEVYVH07CiAJCW15ICgkb19vZnMsICRvX2NudCwgJG5fb2ZzLCAkbl9jbnQpID0KZGlmZiAtLWdpdCBhL2dpdC1hbS5zaCBiL2dpdC1hbS5zaAppbmRleCBiNDgwOTZlLi44M2IyNzdhIDEwMDc1NQotLS0gYS9naXQtYW0uc2gKKysrIGIvZ2l0LWFtLnNoCkBAIC0zMCw3ICszMCw4IEBACiByZXF1aXJlX3dvcmtfdHJlZQogY2RfdG9fdG9wbGV2ZWwKIAotZ2l0IHZhciBHSVRfQ09NTUlUVEVSX0lERU5UID4vZGV2L251bGwgfHwgZXhpdAorZ2l0IHZhciBHSVRfQ09NTUlUVEVSX0lERU5UID4vZGV2L251bGwgfHwKKwlkaWUgIllvdSBuZWVkIHRvIHNldCB5b3VyIGNvbW1pdHRlciBpbmZvIGZpcnN0IgogCiBzdG9wX2hlcmUgKCkgewogICAgIGVjaG8gIiQxIiA+IiRkb3Rlc3QvbmV4dCIKQEAgLTQyMSw3ICs0MjIsNyBAQAogCWVsc2UKIAkgICAgYWN0aW9uPXllcwogCWZpCi0JRklSU1RMSU5FPSQoaGVhZCAtMSAiJGRvdGVzdC9maW5hbC1jb21taXQiKQorCUZJUlNUTElORT0kKHNlZCAxcSAiJGRvdGVzdC9maW5hbC1jb21taXQiKQogCiAJaWYgdGVzdCAkYWN0aW9uID0gc2tpcAogCXRoZW4KZGlmZiAtLWdpdCBhL2dpdC1iaXNlY3Quc2ggYi9naXQtYmlzZWN0LnNoCmluZGV4IGIxODAwZWQuLjZjNmMzZGUgMTAwNzU1Ci0tLSBhL2dpdC1iaXNlY3Quc2gKKysrIGIvZ2l0LWJpc2VjdC5zaApAQCAtMSw3ICsxLDkgQEAKICMhL2Jpbi9zaAogCi1VU0FHRT0nW3N0YXJ0fGJhZHxnb29kfHNraXB8bmV4dHxyZXNldHx2aXN1YWxpemV8cmVwbGF5fGxvZ3xydW5dJwotTE9OR19VU0FHRT0nZ2l0IGJpc2VjdCBzdGFydCBbPGJhZD4gWzxnb29kPi4uLl1dIFstLV0gWzxwYXRoc3BlYz4uLi5dCitVU0FHRT0nW2hlbHB8c3RhcnR8YmFkfGdvb2R8c2tpcHxuZXh0fHJlc2V0fHZpc3VhbGl6ZXxyZXBsYXl8bG9nfHJ1bl0nCitMT05HX1VTQUdFPSdnaXQgYmlzZWN0IGhlbHAKKyAgICAgICAgcHJpbnQgdGhpcyBsb25nIGhlbHAgbWVzc2FnZS4KK2dpdCBiaXNlY3Qgc3RhcnQgWzxiYWQ+IFs8Z29vZD4uLi5dXSBbLS1dIFs8cGF0aHNwZWM+Li4uXQogICAgICAgICByZXNldCBiaXNlY3Qgc3RhdGUgYW5kIHN0YXJ0IGJpc2VjdGlvbi4KIGdpdCBiaXNlY3QgYmFkIFs8cmV2Pl0KICAgICAgICAgbWFyayA8cmV2PiBhIGtub3duLWJhZCByZXZpc2lvbi4KQEAgLTIwLDcgKzIyLDkgQEAKIGdpdCBiaXNlY3QgbG9nCiAgICAgICAgIHNob3cgYmlzZWN0IGxvZy4KIGdpdCBiaXNlY3QgcnVuIDxjbWQ+Li4uCi0gICAgICAgIHVzZSA8Y21kPi4uLiB0byBhdXRvbWF0aWNhbGx5IGJpc2VjdC4nCisgICAgICAgIHVzZSA8Y21kPi4uLiB0byBhdXRvbWF0aWNhbGx5IGJpc2VjdC4KKworUGxlYXNlIHVzZSAiZ2l0IGhlbHAgYmlzZWN0IiB0byBnZXQgdGhlIGZ1bGwgbWFuIHBhZ2UuJwogCiBPUFRJT05TX1NQRUM9CiAuIGdpdC1zaC1zZXR1cApAQCAtNDAsNyArNDQsNyBAQAogfQogCiBiaXNlY3RfYXV0b3N0YXJ0KCkgewotCXRlc3QgLWYgIiRHSVRfRElSL0JJU0VDVF9OQU1FUyIgfHwgeworCXRlc3QgLXMgIiRHSVRfRElSL0JJU0VDVF9TVEFSVCIgfHwgewogCQllY2hvID4mMiAnWW91IG5lZWQgdG8gc3RhcnQgYnkgImdpdCBiaXNlY3Qgc3RhcnQiJwogCQlpZiB0ZXN0IC10IDAKIAkJdGhlbgpAQCAtNTksNDIgKzYzLDQyIEBACiAKIGJpc2VjdF9zdGFydCgpIHsKIAkjCi0JIyBWZXJpZnkgSEVBRC4gSWYgd2Ugd2VyZSBiaXNlY3RpbmcgYmVmb3JlIHRoaXMsIHJlc2V0IHRvIHRoZQotCSMgdG9wLW9mLWxpbmUgbWFzdGVyIGZpcnN0IQorCSMgVmVyaWZ5IEhFQUQuCiAJIwogCWhlYWQ9JChHSVRfRElSPSIkR0lUX0RJUiIgZ2l0IHN5bWJvbGljLXJlZiAtcSBIRUFEKSB8fAogCWhlYWQ9JChHSVRfRElSPSIkR0lUX0RJUiIgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSB8fAogCWRpZSAiQmFkIEhFQUQgLSBJIG5lZWQgYSBIRUFEIgotCSMKLQkjIENoZWNrIHRoYXQgd2UgZWl0aGVyIGFscmVhZHkgaGF2ZSBCSVNFQ1RfU1RBUlQsIG9yIHRoYXQgdGhlCi0JIyBicmFuY2hlcyBiaXNlY3QsIG5ldy1iaXNlY3QgZG9uJ3QgZXhpc3QsIHRvIG5vdCBvdmVycmlkZSB0aGVtLgotCSMKLQl0ZXN0IC1zICIkR0lUX0RJUi9CSVNFQ1RfU1RBUlQiIHx8Ci0JCWlmIGdpdCBzaG93LXJlZiAtLXZlcmlmeSAtcSByZWZzL2hlYWRzL2Jpc2VjdCB8fAotCQkgICAgZ2l0IHNob3ctcmVmIC0tdmVyaWZ5IC1xIHJlZnMvaGVhZHMvbmV3LWJpc2VjdDsgdGhlbgotCQkJZGllICdUaGUgYnJhbmNoZXMgImJpc2VjdCIgYW5kICJuZXctYmlzZWN0IiBtdXN0IG5vdCBleGlzdC4nCi0JCWZpCi0Jc3RhcnRfaGVhZD0nJwotCWNhc2UgIiRoZWFkIiBpbgotCXJlZnMvaGVhZHMvYmlzZWN0KQotCQlicmFuY2g9YGNhdCAiJEdJVF9ESVIvQklTRUNUX1NUQVJUImAKLQkJZ2l0IGNoZWNrb3V0ICRicmFuY2ggfHwgZXhpdAotCQk7OwotCXJlZnMvaGVhZHMvKnwkX3g0MCkKLQkJIyBUaGlzIGVycm9yIG1lc3NhZ2Ugc2hvdWxkIG9ubHkgYmUgdHJpZ2dlcmVkIGJ5IGNvZ2l0byB1c2FnZSwKLQkJIyBhbmQgY29naXRvIHVzZXJzIHNob3VsZCB1bmRlcnN0YW5kIGl0IHJlbGF0ZXMgdG8gY2ctc2Vlay4KLQkJWyAtcyAiJEdJVF9ESVIvaGVhZC1uYW1lIiBdICYmIGRpZSAid29uJ3QgYmlzZWN0IG9uIHNlZWtlZCB0cmVlIgotCQlzdGFydF9oZWFkPSIke2hlYWQjcmVmcy9oZWFkcy99IgotCQk7OwotCSopCi0JCWRpZSAiQmFkIEhFQUQgLSBzdHJhbmdlIHN5bWJvbGljIHJlZiIKLQkJOzsKLQllc2FjCiAKIAkjCi0JIyBHZXQgcmlkIG9mIGFueSBvbGQgYmlzZWN0IHN0YXRlCisJIyBDaGVjayBpZiB3ZSBhcmUgYmlzZWN0aW5nLgogCSMKLQliaXNlY3RfY2xlYW5fc3RhdGUKKwlzdGFydF9oZWFkPScnCisJaWYgdGVzdCAtcyAiJEdJVF9ESVIvQklTRUNUX1NUQVJUIgorCXRoZW4KKwkJIyBSZXNldCB0byB0aGUgcmV2IGZyb20gd2hlcmUgd2Ugc3RhcnRlZC4KKwkJc3RhcnRfaGVhZD0kKGNhdCAiJEdJVF9ESVIvQklTRUNUX1NUQVJUIikKKwkJZ2l0IGNoZWNrb3V0ICIkc3RhcnRfaGVhZCIgfHwgZXhpdAorCWVsc2UKKwkJIyBHZXQgcmV2IGZyb20gd2hlcmUgd2Ugc3RhcnQuCisJCWNhc2UgIiRoZWFkIiBpbgorCQlyZWZzL2hlYWRzLyp8JF94NDApCisJCQkjIFRoaXMgZXJyb3IgbWVzc2FnZSBzaG91bGQgb25seSBiZSB0cmlnZ2VyZWQgYnkKKwkJCSMgY29naXRvIHVzYWdlLCBhbmQgY29naXRvIHVzZXJzIHNob3VsZCB1bmRlcnN0YW5kCisJCQkjIGl0IHJlbGF0ZXMgdG8gY2ctc2Vlay4KKwkJCVsgLXMgIiRHSVRfRElSL2hlYWQtbmFtZSIgXSAmJgorCQkJCWRpZSAid29uJ3QgYmlzZWN0IG9uIHNlZWtlZCB0cmVlIgorCQkJc3RhcnRfaGVhZD0iJHtoZWFkI3JlZnMvaGVhZHMvfSIKKwkJCTs7CisJCSopCisJCQlkaWUgIkJhZCBIRUFEIC0gc3RyYW5nZSBzeW1ib2xpYyByZWYiCisJCQk7OworCQllc2FjCisJZmkKKworCSMKKwkjIEdldCByaWQgb2YgYW55IG9sZCBiaXNlY3Qgc3RhdGUuCisJIworCWJpc2VjdF9jbGVhbl9zdGF0ZSB8fCBleGl0CiAKIAkjCiAJIyBDaGVjayBmb3Igb25lIGJhZCBhbmQgdGhlbiBzb21lIGdvb2QgcmV2aXNpb25zLgpAQCAtMTE0LDcgKzExOCw3IEBACiAJCWJyZWFrCiAJCTs7CiAJICAgICopCi0JCXJldj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiRhcmdee2NvbW1pdH0iIDI+L2Rldi9udWxsKSB8fCB7CisJCXJldj0kKGdpdCByZXYtcGFyc2UgLXEgLS12ZXJpZnkgIiRhcmdee2NvbW1pdH0iKSB8fCB7CiAJCSAgICB0ZXN0ICRoYXNfZG91YmxlX2Rhc2ggLWVxIDEgJiYKIAkJICAgICAgICBkaWUgIickYXJnJyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB2YWxpZCByZXZpc2lvbiIKIAkJICAgIGJyZWFrCkBAIC0xMjksMTEgKzEzMywyOSBAQAogCSAgICBlc2FjCiAJZG9uZQogCi0Jc3EgIiRAIiA+IiRHSVRfRElSL0JJU0VDVF9OQU1FUyIKLQl0ZXN0IC1uICIkc3RhcnRfaGVhZCIgJiYgZWNobyAiJHN0YXJ0X2hlYWQiID4iJEdJVF9ESVIvQklTRUNUX1NUQVJUIgotCWV2YWwgIiRldmFsIgotCWVjaG8gImdpdC1iaXNlY3Qgc3RhcnQkb3JpZ19hcmdzIiA+PiIkR0lUX0RJUi9CSVNFQ1RfTE9HIgorCSMKKwkjIENoYW5nZSBzdGF0ZS4KKwkjIEluIGNhc2Ugb2YgbWlzdGFrZW4gcmV2cyBvciBjaGVja291dCBlcnJvciwgb3Igc2lnbmFscyByZWNlaXZlZCwKKwkjICJiaXNlY3RfYXV0b19uZXh0IiBiZWxvdyBtYXkgZXhpdCBvciBtaXNiZWhhdmUuCisJIyBXZSBoYXZlIHRvIHRyYXAgdGhpcyB0byBiZSBhYmxlIHRvIGNsZWFuIHVwIHVzaW5nCisJIyAiYmlzZWN0X2NsZWFuX3N0YXRlIi4KKwkjCisJdHJhcCAnYmlzZWN0X2NsZWFuX3N0YXRlJyAwCisJdHJhcCAnZXhpdCAyNTUnIDEgMiAzIDE1CisKKwkjCisJIyBXcml0ZSBuZXcgc3RhcnQgc3RhdGUuCisJIworCWVjaG8gIiRzdGFydF9oZWFkIiA+IiRHSVRfRElSL0JJU0VDVF9TVEFSVCIgJiYKKwlzcSAiJEAiID4iJEdJVF9ESVIvQklTRUNUX05BTUVTIiAmJgorCWV2YWwgIiRldmFsIiAmJgorCWVjaG8gImdpdC1iaXNlY3Qgc3RhcnQkb3JpZ19hcmdzIiA+PiIkR0lUX0RJUi9CSVNFQ1RfTE9HIiB8fCBleGl0CisJIworCSMgQ2hlY2sgaWYgd2UgY2FuIHByb2NlZWQgdG8gdGhlIG5leHQgYmlzZWN0IHN0YXRlLgorCSMKIAliaXNlY3RfYXV0b19uZXh0CisKKwl0cmFwICctJyAwCiB9CiAKIGJpc2VjdF93cml0ZSgpIHsKQEAgLTE0NSw5ICsxNjcsOSBAQAogCQlnb29kfHNraXApCXRhZz0iJHN0YXRlIi0iJHJldiIgOzsKIAkJKikJCWRpZSAiQmFkIGJpc2VjdF93cml0ZSBhcmd1bWVudDogJHN0YXRlIiA7OwogCWVzYWMKLQlnaXQgdXBkYXRlLXJlZiAicmVmcy9iaXNlY3QvJHRhZyIgIiRyZXYiCisJZ2l0IHVwZGF0ZS1yZWYgInJlZnMvYmlzZWN0LyR0YWciICIkcmV2IiB8fCBleGl0CiAJZWNobyAiIyAkc3RhdGU6ICQoZ2l0IHNob3ctYnJhbmNoICRyZXYpIiA+PiIkR0lUX0RJUi9CSVNFQ1RfTE9HIgotCXRlc3QgLXogIiRub2xvZyIgJiYgZWNobyAiZ2l0LWJpc2VjdCAkc3RhdGUgJHJldiIgPj4iJEdJVF9ESVIvQklTRUNUX0xPRyIKKwl0ZXN0IC1uICIkbm9sb2ciIHx8IGVjaG8gImdpdC1iaXNlY3QgJHN0YXRlICRyZXYiID4+IiRHSVRfRElSL0JJU0VDVF9MT0ciCiB9CiAKIGJpc2VjdF9zdGF0ZSgpIHsKQEAgLTE5OCwxMyArMjIwLDE0IEBACiAJCWlmIHRlc3QgLXQgMAogCQl0aGVuCiAJCQlwcmludGYgPiYyICdBcmUgeW91IHN1cmUgW1kvbl0/ICcKLQkJCWNhc2UgIiQocmVhZCB5ZXNubykiIGluIFtObl0qKSBleGl0IDEgOzsgZXNhYworCQkJcmVhZCB5ZXNubworCQkJY2FzZSAiJHllc25vIiBpbiBbTm5dKikgZXhpdCAxIDs7IGVzYWMKIAkJZmkKIAkJOiBiaXNlY3Qgd2l0aG91dCBnb29kLi4uCiAJCTs7CiAJKikKIAkJVEhFTj0nJwotCQl0ZXN0IC1mICIkR0lUX0RJUi9CSVNFQ1RfTkFNRVMiIHx8IHsKKwkJdGVzdCAtcyAiJEdJVF9ESVIvQklTRUNUX1NUQVJUIiB8fCB7CiAJCQllY2hvID4mMiAnWW91IG5lZWQgdG8gc3RhcnQgYnkgImdpdCBiaXNlY3Qgc3RhcnQiLicKIAkJCVRIRU49J3RoZW4gJwogCQl9CkBAIC0zNDQsOSArMzY3LDcgQEAKIAlleGl0X2lmX3NraXBwZWRfY29tbWl0cyAiJGJpc2VjdF9yZXYiCiAKIAllY2hvICJCaXNlY3Rpbmc6ICRiaXNlY3RfbnIgcmV2aXNpb25zIGxlZnQgdG8gdGVzdCBhZnRlciB0aGlzIgotCWdpdCBicmFuY2ggLUQgbmV3LWJpc2VjdCAyPiAvZGV2L251bGwKLQlnaXQgY2hlY2tvdXQgLXEgLWIgbmV3LWJpc2VjdCAiJGJpc2VjdF9yZXYiIHx8IGV4aXQKLQlnaXQgYnJhbmNoIC1NIG5ldy1iaXNlY3QgYmlzZWN0CisJZ2l0IGNoZWNrb3V0IC1xICIkYmlzZWN0X3JldiIgfHwgZXhpdAogCWdpdCBzaG93LWJyYW5jaCAiJGJpc2VjdF9yZXYiCiB9CiAKQEAgLTM3Miw0MCArMzkzLDM1IEBACiB9CiAKIGJpc2VjdF9yZXNldCgpIHsKLQl0ZXN0IC1mICIkR0lUX0RJUi9CSVNFQ1RfTkFNRVMiIHx8IHsKKwl0ZXN0IC1zICIkR0lUX0RJUi9CSVNFQ1RfU1RBUlQiIHx8IHsKIAkJZWNobyAiV2UgYXJlIG5vdCBiaXNlY3RpbmcuIgogCQlyZXR1cm4KIAl9CiAJY2FzZSAiJCMiIGluCi0JMCkgaWYgWyAtcyAiJEdJVF9ESVIvQklTRUNUX1NUQVJUIiBdOyB0aGVuCi0JICAgICAgIGJyYW5jaD1gY2F0ICIkR0lUX0RJUi9CSVNFQ1RfU1RBUlQiYAotCSAgIGVsc2UKLQkgICAgICAgYnJhbmNoPW1hc3RlcgotCSAgIGZpIDs7CisJMCkgYnJhbmNoPSQoY2F0ICIkR0lUX0RJUi9CSVNFQ1RfU1RBUlQiKSA7OwogCTEpIGdpdCBzaG93LXJlZiAtLXZlcmlmeSAtLXF1aWV0IC0tICJyZWZzL2hlYWRzLyQxIiB8fAogCSAgICAgICBkaWUgIiQxIGRvZXMgbm90IHNlZW0gdG8gYmUgYSB2YWxpZCBicmFuY2giCiAJICAgYnJhbmNoPSIkMSIgOzsKIAkqKQogCSAgICB1c2FnZSA7OwogCWVzYWMKLQlpZiBnaXQgY2hlY2tvdXQgIiRicmFuY2giOyB0aGVuCi0JCSMgQ2xlYW51cCBoZWFkLW5hbWUgaWYgaXQgZ290IGxlZnQgYnkgYW4gb2xkIHZlcnNpb24gb2YgZ2l0LWJpc2VjdAotCQlybSAtZiAiJEdJVF9ESVIvaGVhZC1uYW1lIgotCQlybSAtZiAiJEdJVF9ESVIvQklTRUNUX1NUQVJUIgotCQliaXNlY3RfY2xlYW5fc3RhdGUKLQlmaQorCWdpdCBjaGVja291dCAiJGJyYW5jaCIgJiYgYmlzZWN0X2NsZWFuX3N0YXRlCiB9CiAKIGJpc2VjdF9jbGVhbl9zdGF0ZSgpIHsKIAkjIFRoZXJlIG1heSBiZSBzb21lIHJlZnMgcGFja2VkIGR1cmluZyBiaXNlY3Rpb24uCi0JZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0nJShyZWZuYW1lKSAlKG9iamVjdG5hbWUpJyByZWZzL2Jpc2VjdC9cKiByZWZzL2hlYWRzL2Jpc2VjdCB8CisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0nJShyZWZuYW1lKSAlKG9iamVjdG5hbWUpJyByZWZzL2Jpc2VjdC9cKiB8CiAJd2hpbGUgcmVhZCByZWYgaGFzaAogCWRvCi0JCWdpdCB1cGRhdGUtcmVmIC1kICRyZWYgJGhhc2gKKwkJZ2l0IHVwZGF0ZS1yZWYgLWQgJHJlZiAkaGFzaCB8fCBleGl0CiAJZG9uZQotCXJtIC1mICIkR0lUX0RJUi9CSVNFQ1RfTE9HIgotCXJtIC1mICIkR0lUX0RJUi9CSVNFQ1RfTkFNRVMiCi0Jcm0gLWYgIiRHSVRfRElSL0JJU0VDVF9SVU4iCisJcm0gLWYgIiRHSVRfRElSL0JJU0VDVF9MT0ciICYmCisJcm0gLWYgIiRHSVRfRElSL0JJU0VDVF9OQU1FUyIgJiYKKwlybSAtZiAiJEdJVF9ESVIvQklTRUNUX1JVTiIgJiYKKwkjIENsZWFudXAgaGVhZC1uYW1lIGlmIGl0IGdvdCBsZWZ0IGJ5IGFuIG9sZCB2ZXJzaW9uIG9mIGdpdC1iaXNlY3QKKwlybSAtZiAiJEdJVF9ESVIvaGVhZC1uYW1lIiAmJgorCisJcm0gLWYgIiRHSVRfRElSL0JJU0VDVF9TVEFSVCIKIH0KIAogYmlzZWN0X3JlcGxheSAoKSB7CkBAIC00ODcsNiArNTAzLDggQEAKICAgICBjbWQ9IiQxIgogICAgIHNoaWZ0CiAgICAgY2FzZSAiJGNtZCIgaW4KKyAgICBoZWxwKQorICAgICAgICBnaXQgYmlzZWN0IC1oIDs7CiAgICAgc3RhcnQpCiAgICAgICAgIGJpc2VjdF9zdGFydCAiJEAiIDs7CiAgICAgYmFkfGdvb2R8c2tpcCkKZGlmZiAtLWdpdCBhL2dpdC1jb21wYXQtdXRpbC5oIGIvZ2l0LWNvbXBhdC11dGlsLmgKaW5kZXggYTE4MjM1ZS4uYzA0ZThiYSAxMDA2NDQKLS0tIGEvZ2l0LWNvbXBhdC11dGlsLmgKKysrIGIvZ2l0LWNvbXBhdC11dGlsLmgKQEAgLTM5LDcgKzM5LDcgQEAKIC8qIEFwcHJveGltYXRpb24gb2YgdGhlIGxlbmd0aCBvZiB0aGUgZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHR5cGUuICovCiAjZGVmaW5lIGRlY2ltYWxfbGVuZ3RoKHgpCSgoaW50KShzaXplb2YoeCkgKiAyLjU2ICsgMC41KSArIDEpCiAKLSNpZiAhZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKF9fRnJlZUJTRF9fKQorI2lmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19GcmVlQlNEX18pICAmJiAhZGVmaW5lZChfX1VTTENfXykgJiYgIWRlZmluZWQoX01fVU5JWCkKICNkZWZpbmUgX1hPUEVOX1NPVVJDRSA2MDAgLyogZ2xpYmMyIGFuZCBBSVggNS4zTCBuZWVkIDUwMCwgT3BlbkJTRCBuZWVkcyA2MDAgZm9yIFNfSVNMTksoKSAqLwogI2RlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVEIDEgLyogQUlYIDUuM0wgbmVlZHMgdGhpcyAqLwogI2VuZGlmCkBAIC0yMDYsNiArMjA2LDkgQEAKICNlbmRpZgogCiAjaWZkZWYgRlJFQURfUkVBRFNfRElSRUNUT1JJRVMKKyNpZmRlZiBmb3BlbgorI3VuZGVmIGZvcGVuCisjZW5kaWYKICNkZWZpbmUgZm9wZW4oYSxiKSBnaXRfZm9wZW4oYSxiKQogZXh0ZXJuIEZJTEUgKmdpdF9mb3Blbihjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOwogI2VuZGlmCkBAIC0yNjgsNiArMjcxLDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyoKKyAqIHhtZW1kdXB6KCkgYWxsb2NhdGVzIChsZW4gKyAxKSBieXRlcyBvZiBtZW1vcnksIGR1cGxpY2F0ZXMgImxlbiIgYnl0ZXMgb2YKKyAqICJkYXRhIiB0byB0aGUgYWxsb2NhdGVkIG1lbW9yeSwgemVybyB0ZXJtaW5hdGVzIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LAorICogYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiBJZiB0aGUgYWxsb2NhdGlvbiBmYWlscywKKyAqIHRoZSBwcm9ncmFtIGRpZXMuCisgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCAqeG1lbWR1cHooY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKIHsKIAljaGFyICpwID0geG1hbGxvYyhsZW4gKyAxKTsKQEAgLTMyOSw2ICszMzgsMTEgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKgorICogeHJlYWQoKSBpcyB0aGUgc2FtZSBhIHJlYWQoKSwgYnV0IGl0IGF1dG9tYXRpY2FsbHkgcmVzdGFydHMgcmVhZCgpCisgKiBvcGVyYXRpb25zIHdpdGggYSByZWNvdmVyYWJsZSBlcnJvciAoRUFHQUlOIGFuZCBFSU5UUikuIHhyZWFkKCkKKyAqIERPRVMgTk9UIEdVQVJBTlRFRSB0aGF0ICJsZW4iIGJ5dGVzIGlzIHJlYWQgZXZlbiBpZiB0aGUgZGF0YSBpcyBhdmFpbGFibGUuCisgKi8KIHN0YXRpYyBpbmxpbmUgc3NpemVfdCB4cmVhZChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKIAlzc2l6ZV90IG5yOwpAQCAtMzQwLDYgKzM1NCwxMSBAQAogCX0KIH0KIAorLyoKKyAqIHh3cml0ZSgpIGlzIHRoZSBzYW1lIGEgd3JpdGUoKSwgYnV0IGl0IGF1dG9tYXRpY2FsbHkgcmVzdGFydHMgd3JpdGUoKQorICogb3BlcmF0aW9ucyB3aXRoIGEgcmVjb3ZlcmFibGUgZXJyb3IgKEVBR0FJTiBhbmQgRUlOVFIpLiB4d3JpdGUoKSBET0VTIE5PVAorICogR1VBUkFOVEVFIHRoYXQgImxlbiIgYnl0ZXMgaXMgd3JpdHRlbiBldmVuIGlmIHRoZSBvcGVyYXRpb24gaXMgc3VjY2Vzc2Z1bC4KKyAqLwogc3RhdGljIGlubGluZSBzc2l6ZV90IHh3cml0ZShpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKIAlzc2l6ZV90IG5yOwpkaWZmIC0tZ2l0IGEvZ2l0LWN2c2V4cG9ydGNvbW1pdC5wZXJsIGIvZ2l0LWN2c2V4cG9ydGNvbW1pdC5wZXJsCmluZGV4IGI2MDM2YmQuLmM2YzcwZTkgMTAwNzU1Ci0tLSBhL2dpdC1jdnNleHBvcnRjb21taXQucGVybAorKysgYi9naXQtY3ZzZXhwb3J0Y29tbWl0LnBlcmwKQEAgLTYsMTYgKzYsMjEgQEAKIHVzZSBEYXRhOjpEdW1wZXI7CiB1c2UgRmlsZTo6QmFzZW5hbWUgcXcoYmFzZW5hbWUgZGlybmFtZSk7CiB1c2UgRmlsZTo6U3BlYzsKK3VzZSBHaXQ7CiAKLW91ciAoJG9wdF9oLCAkb3B0X1AsICRvcHRfcCwgJG9wdF92LCAkb3B0X2MsICRvcHRfZiwgJG9wdF9hLCAkb3B0X20sICRvcHRfZCwgJG9wdF91LCAkb3B0X3cpOworb3VyICgkb3B0X2gsICRvcHRfUCwgJG9wdF9wLCAkb3B0X3YsICRvcHRfYywgJG9wdF9mLCAkb3B0X2EsICRvcHRfbSwgJG9wdF9kLCAkb3B0X3UsICRvcHRfdywgJG9wdF9XKTsKIAotZ2V0b3B0cygndWhQcHZjZmFtOmQ6dzonKTsKK2dldG9wdHMoJ3VoUHB2Y2ZhbTpkOnc6VycpOwogCiAkb3B0X2ggJiYgdXNhZ2UoKTsKIAogZGllICJOZWVkIGF0IGxlYXN0IG9uZSBjb21taXQgaWRlbnRpZmllciEiIHVubGVzcyBAQVJHVjsKIAotaWYgKCRvcHRfdykgeworIyBHZXQgZ2l0LWNvbmZpZyBzZXR0aW5ncworbXkgJHJlcG8gPSBHaXQtPnJlcG9zaXRvcnkoKTsKKyRvcHRfdyA9ICRyZXBvLT5jb25maWcoJ2N2c2V4cG9ydGNvbW1pdC5jdnNkaXInKSB1bmxlc3MgZGVmaW5lZCAkb3B0X3c7CisKK2lmICgkb3B0X3cgfHwgJG9wdF9XKSB7CiAJIyBSZW1lbWJlciB3aGVyZSBHSVRfRElSIGlzIGJlZm9yZSBjaGFuZ2luZyB0byBDVlMgY2hlY2tvdXQKIAl1bmxlc3MgKCRFTlZ7R0lUX0RJUn0pIHsKIAkJIyBObyBHSVRfRElSIHNldC4gRmlndXJlIGl0IG91dCBmb3Igb3Vyc2VsdmVzCkBAIC0yNSw3ICszMCw5IEBACiAJfQogCSMgTWFrZSBzdXJlIEdJVF9ESVIgaXMgYWJzb2x1dGUKIAkkRU5We0dJVF9ESVJ9ID0gRmlsZTo6U3BlYy0+cmVsMmFicygkRU5We0dJVF9ESVJ9KTsKK30KIAoraWYgKCRvcHRfdykgewogCWlmICghIC1kICRvcHRfdy4iL0NWUyIgKSB7CiAJCWRpZSAiJG9wdF93IGlzIG5vdCBhIENWUyBjaGVja291dCI7CiAJfQpAQCAtMTE2LDYgKzEyMywxNSBAQAogICAgIH0KIH0KIAorbXkgJGdvX2JhY2tfdG8gPSAwOworCitpZiAoJG9wdF9XKSB7CisgICAgJG9wdF92ICYmIHByaW50ICJSZXNldHRpbmcgdG8gJHBhcmVudFxuIjsKKyAgICAkZ29fYmFja190byA9IGBnaXQgc3ltYm9saWMtcmVmIEhFQUQgMj4gL2Rldi9udWxsIHx8CisJZ2l0IHJldi1wYXJzZSBIRUFEYCB8fCBkaWUgIkNvdWxkIG5vdCBkZXRlcm1pbmUgY3VycmVudCBicmFuY2giOworICAgIHN5c3RlbSgiZ2l0IGNoZWNrb3V0IC1xICRwYXJlbnReMCIpICYmIGRpZSAiQ291bGQgbm90IGNoZWNrIG91dCAkcGFyZW50XjAiOworfQorCiAkb3B0X3YgJiYgcHJpbnQgIkFwcGx5aW5nIHRvIENWUyBjb21taXQgJGNvbW1pdCBmcm9tIHBhcmVudCAkcGFyZW50XG4iOwogCiAjIGdyYWIgdGhlIGNvbW1pdCBtZXNzYWdlCkBAIC0yMTAsNyArMjI2LDggQEAKIAlteSAkYmFzZW5hbWUgPSBiYXNlbmFtZSgkbmFtZSk7CiAKIAkkYmFzZW5hbWUgPSAibm8gZmlsZSAiIC4gJGJhc2VuYW1lIGlmIChleGlzdHMoJGFkZGVkeyRiYXNlbmFtZX0pKTsKLQljaG9tcCgkYmFzZW5hbWUpOworCSRiYXNlbmFtZSA9fiBzL15ccysvLzsKKwkkYmFzZW5hbWUgPX4gcy9ccyskLy87CiAKIAlpZiAoIWV4aXN0cygkZnVsbG5hbWV7JGJhc2VuYW1lfSkpIHsKIAkgICRmdWxsbmFtZXskYmFzZW5hbWV9ID0gJG5hbWU7CkBAIC0yNTksNyArMjc2LDExIEBACiB9CiAKIHByaW50ICJBcHBseWluZ1xuIjsKLWBHSVRfRElSPSBnaXQtYXBwbHkgJGNvbnRleHQgLS1zdW1tYXJ5IC0tbnVtc3RhdCAtLWFwcGx5IDwuY3ZzZXhwb3J0Y29tbWl0LmRpZmZgIHx8IGRpZSAiY2Fubm90IHBhdGNoIjsKK2lmICgkb3B0X1cpIHsKKyAgICBzeXN0ZW0oImdpdCBjaGVja291dCAtcSAkY29tbWl0XjAiKSAmJiBkaWUgImNhbm5vdCBwYXRjaCI7Cit9IGVsc2UgeworICAgIGBHSVRfRElSPSBnaXQtYXBwbHkgJGNvbnRleHQgLS1zdW1tYXJ5IC0tbnVtc3RhdCAtLWFwcGx5IDwuY3ZzZXhwb3J0Y29tbWl0LmRpZmZgIHx8IGRpZSAiY2Fubm90IHBhdGNoIjsKK30KIAogcHJpbnQgIlBhdGNoIGFwcGxpZWQgc3VjY2Vzc2Z1bGx5LiBBZGRpbmcgbmV3IGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBDVlNcbiI7CiBteSAkZGlydHlwYXRjaCA9IDA7CkBAIC0zMTIsNyArMzMzLDkgQEAKICAgICBwcmludCAidXNpbmcgYSBwYXRjaCBwcm9ncmFtLiBBZnRlciBhcHBseWluZyB0aGUgcGF0Y2ggYW5kIHJlc29sdmluZyB0aGVcbiI7CiAgICAgcHJpbnQgInByb2JsZW1zIHlvdSBtYXkgY29tbWl0IHVzaW5nOiI7CiAgICAgcHJpbnQgIlxuICAgIGNkIFwiJG9wdF93XCIiIGlmICRvcHRfdzsKLSAgICBwcmludCAiXG4gICAgJGNtZFxuXG4iOworICAgIHByaW50ICJcbiAgICAkY21kXG4iOworICAgIHByaW50ICJcbiAgICBnaXQgY2hlY2tvdXQgJGdvX2JhY2tfdG9cbiIgaWYgJGdvX2JhY2tfdG87CisgICAgcHJpbnQgIlxuIjsKICAgICBleGl0KDEpOwogfQogCkBAIC0zMzIsNiArMzU1LDE0IEBACiAjIGNsZWFuIHVwCiB1bmxpbmsoIi5jdnNleHBvcnRjb21taXQuZGlmZiIpOwogCitpZiAoJG9wdF9XKSB7CisgICAgc3lzdGVtKCJnaXQgY2hlY2tvdXQgJGdvX2JhY2tfdG8iKSAmJiBkaWUgImNhbm5vdCBtb3ZlIGJhY2sgdG8gJGdvX2JhY2tfdG8iOworICAgIGlmICghKCRnb19iYWNrX3RvID1+IC9eWzAtOWEtZkEtRl17NDB9JC8pKSB7CisJc3lzdGVtKCJnaXQgc3ltYm9saWMtcmVmIEhFQUQgJGdvX2JhY2tfdG8iKSAmJgorCSAgICBkaWUgImNhbm5vdCBtb3ZlIGJhY2sgdG8gJGdvX2JhY2tfdG8iOworICAgIH0KK30KKwogIyBDVlMgdmVyc2lvbiAxLjExLnggYW5kIDEuMTIueCBzbGVlcHMgdGhlIHdyb25nIHdheSB0byBlbnN1cmUgdGhlIHRpbWVzdGFtcAogIyB1c2VkIGJ5IENWUyBhbmQgdGhlIG9uZSBzZXQgYnkgc3Vic2VxdWVuY2UgZmlsZSBtb2RpZmljYXRpb25zIGFyZSBkaWZmZXJlbnQuCiAjIElmIHRoZXkgYXJlIG5vdCBkaWZmZXJlbnQgQ1ZTIHdpbGwgbm90IGRldGVjdCBjaGFuZ2VzLgpkaWZmIC0tZ2l0IGEvZ2l0LWN2c2ltcG9ydC5wZXJsIGIvZ2l0LWN2c2ltcG9ydC5wZXJsCmluZGV4IGJkYWM1ZDUuLjdlOTVmYjMgMTAwNzU1Ci0tLSBhL2dpdC1jdnNpbXBvcnQucGVybAorKysgYi9naXQtY3ZzaW1wb3J0LnBlcmwKQEAgLTIyNyw2ICsyMjcsNyBAQAogCQkJCSRwcm94eXBvcnQgPSAkMTsKIAkJCX0KIAkJfQorCQkkcmVwbyB8fD0gJy8nOwogCiAJCSMgaWYgdXNlcm5hbWUgaXMgbm90IGV4cGxpY2l0IGluIENWU1JPT1QsIHRoZW4gdXNlIGN1cnJlbnQgdXNlciwgYXMgY3ZzIHdvdWxkCiAJCSR1c2VyPShnZXRsb2dpbigpIHx8ICRFTlZ7J0xPR05BTUUnfSB8fCAkRU5WeydVU0VSJ30gfHwgImFub255bW91cyIpIHVubGVzcyAkdXNlcjsKQEAgLTc4MCw2ICs3ODEsNyBAQAogCQkkeHRhZyA9fiBzL1xzK1wqXCouKiQvLzsgIyBSZW1vdmUgc3R1ZmYgbGlrZSAqKiBJTlZBTElEICoqIGFuZCAqKiBGVU5LWSAqKgogCQkkeHRhZyA9fiB0ci9fL1wuLyBpZiAoICRvcHRfdSApOwogCQkkeHRhZyA9fiBzL1tcL10vJG9wdF9zL2c7CisJCSR4dGFnID1+IHMvXFsvL2c7CiAKIAkJc3lzdGVtKCdnaXQtdGFnJywgJy1mJywgJHh0YWcsICRjaWQpID09IDAKIAkJCW9yIGRpZSAiQ2Fubm90IGNyZWF0ZSB0YWcgJHh0YWc6ICQhXG4iOwpAQCAtOTUwLDcgKzk1Miw3IEBACiAJfSBlbHNpZiAoL14tKyQvKSB7ICMgZW5kIG9mIHVua25vd24tbGluZSBwcm9jZXNzaW5nCiAJCSRzdGF0ZSA9IDE7CiAJfSBlbHNpZiAoJHN0YXRlICE9IDExKSB7ICMgaWdub3JlIHN0dWZmIHdoZW4gc2tpcHBpbmcKLQkJcHJpbnQgIiogVU5LTk9XTiBMSU5FICogJF9cbiI7CisJCXByaW50IFNUREVSUiAiKiBVTktOT1dOIExJTkUgKiAkX1xuIjsKIAl9CiB9CiBjb21taXQoKSBpZiAkYnJhbmNoIGFuZCAkc3RhdGUgIT0gMTE7CmRpZmYgLS1naXQgYS9naXQtY3Zzc2VydmVyLnBlcmwgYi9naXQtY3Zzc2VydmVyLnBlcmwKaW5kZXggMjlkYmZjOS4uYjAwZDFjMiAxMDA3NTUKLS0tIGEvZ2l0LWN2c3NlcnZlci5wZXJsCisrKyBiL2dpdC1jdnNzZXJ2ZXIucGVybApAQCAtMjEsNiArMjEsNyBAQAogCiB1c2UgRmNudGw7CiB1c2UgRmlsZTo6VGVtcCBxdy90ZW1wZGlyIHRlbXBmaWxlLzsKK3VzZSBGaWxlOjpQYXRoIHF3L3JtdHJlZS87CiB1c2UgRmlsZTo6QmFzZW5hbWU7CiB1c2UgR2V0b3B0OjpMb25nIHF3KDpjb25maWcgcmVxdWlyZV9vcmRlciBub19pZ25vcmVfY2FzZSk7CiAKQEAgLTg2LDYgKzg3LDE3IEBACiAjICRzdGF0ZSBob2xkcyBhbGwgdGhlIGJpdHMgb2YgaW5mb3JtYXRpb24gdGhlIGNsaWVudHMgc2VuZHMgdXMgdGhhdCBjb3VsZAogIyBwb3RlbnRpYWxseSBiZSB1c2VmdWwgd2hlbiBpdCBjb21lcyB0byBhY3R1YWxseSBfZG9pbmdfIHNvbWV0aGluZy4KIG15ICRzdGF0ZSA9IHsgcHJlcGVuZGRpciA9PiAnJyB9OworCisjIFdvcmsgaXMgZm9yIG1hbmFnaW5nIHRlbXBvcmFyeSB3b3JraW5nIGRpcmVjdG9yeQorbXkgJHdvcmsgPQorICAgIHsKKyAgICAgICAgc3RhdGUgPT4gdW5kZWYsICAjIHVuZGVmLCAxIChlbXB0eSksIDIgKHdpdGggc3R1ZmYpCisgICAgICAgIHdvcmtEaXIgPT4gdW5kZWYsCisgICAgICAgIGluZGV4ID0+IHVuZGVmLAorICAgICAgICBlbXB0eURpciA9PiB1bmRlZiwKKyAgICAgICAgdG1wRGlyID0+IHVuZGVmCisgICAgfTsKKwogJGxvZy0+aW5mbygiLS0tLS0tLS0tLS0tLS0tIFNUQVJUSU5HIC0tLS0tLS0tLS0tLS0tLS0tIik7CiAKIG15ICR1c2FnZSA9CkBAIC0xODksNiArMjAxLDkgQEAKICRsb2ctPmRlYnVnKCJQcm9jZXNzaW5nIHRpbWUgOiB1c2VyPSIgLiAodGltZXMpWzBdIC4gIiBzeXN0ZW09IiAuICh0aW1lcylbMV0pOwogJGxvZy0+aW5mbygiLS0tLS0tLS0tLS0tLS0tIEZJTklTSCAtLS0tLS0tLS0tLS0tLS0tLSIpOwogCitjaGRpciAnLyc7CitleGl0IDA7CisKICMgTWFnaWMgY2F0Y2hhbGwgbWV0aG9kLgogIyAgICBUaGlzIGlzIHRoZSBtZXRob2QgdGhhdCB3aWxsIGhhbmRsZSBhbGwgY29tbWFuZHMgd2UgaGF2ZW4ndCB5ZXQKICMgICAgaW1wbGVtZW50ZWQuIEl0IHNpbXBseSBzZW5kcyBhIHdhcm5pbmcgdG8gdGhlIGxvZyBmaWxlIGluZGljYXRpbmcgYQpAQCAtNDg3LDcgKzUwMiw3IEBACiAgICAgICAgICAgICAgICAgcHJpbnQgJHN0YXRlLT57Q1ZTUk9PVH0gLiAiLyRzdGF0ZS0+e21vZHVsZX0vJGZpbGVuYW1lXG4iOwogCiAgICAgICAgICAgICAgICAgIyB0aGlzIGlzIGFuICJlbnRyaWVzIiBsaW5lCi0gICAgICAgICAgICAgICAgbXkgJGtvcHRzID0ga29wdHNfZnJvbV9wYXRoKCRmaWxlcGFydCk7CisgICAgICAgICAgICAgICAgbXkgJGtvcHRzID0ga29wdHNfZnJvbV9wYXRoKCRmaWxlbmFtZSwic2hhMSIsJG1ldGEtPntmaWxlaGFzaH0pOwogICAgICAgICAgICAgICAgICRsb2ctPmRlYnVnKCIvJGZpbGVwYXJ0LzEuJG1ldGEtPntyZXZpc2lvbn0vLyRrb3B0cy8iKTsKICAgICAgICAgICAgICAgICBwcmludCAiLyRmaWxlcGFydC8xLiRtZXRhLT57cmV2aXNpb259Ly8ka29wdHMvXG4iOwogICAgICAgICAgICAgICAgICMgcGVybWlzc2lvbnMKQEAgLTUxOCw5ICs1MzMsMjYgQEAKIAogICAgICAgICBwcmludCAiQ2hlY2tlZC1pbiAkZGlycGFydFxuIjsKICAgICAgICAgcHJpbnQgIiRmaWxlbmFtZVxuIjsKLSAgICAgICAgbXkgJGtvcHRzID0ga29wdHNfZnJvbV9wYXRoKCRmaWxlcGFydCk7CisgICAgICAgIG15ICRrb3B0cyA9IGtvcHRzX2Zyb21fcGF0aCgkZmlsZW5hbWUsImZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXttb2RpZmllZF9maWxlbmFtZX0pOwogICAgICAgICBwcmludCAiLyRmaWxlcGFydC8wLy8ka29wdHMvXG4iOwogCisgICAgICAgIG15ICRyZXF1ZXN0ZWRLb3B0cyA9ICRzdGF0ZS0+e29wdH17a307CisgICAgICAgIGlmKGRlZmluZWQoJHJlcXVlc3RlZEtvcHRzKSkKKyAgICAgICAgeworICAgICAgICAgICAgJHJlcXVlc3RlZEtvcHRzID0gIi1rJHJlcXVlc3RlZEtvcHRzIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgICRyZXF1ZXN0ZWRLb3B0cyA9ICIiOworICAgICAgICB9CisgICAgICAgIGlmKCAka29wdHMgbmUgJHJlcXVlc3RlZEtvcHRzICkKKyAgICAgICAgeworICAgICAgICAgICAgJGxvZy0+d2FybigiSWdub3JpbmcgcmVxdWVzdGVkIC1rPSckcmVxdWVzdGVkS29wdHMnIgorICAgICAgICAgICAgICAgICAgICAgICAgLiAiIGZvciAnJGZpbGVuYW1lJzsgZGV0ZWN0ZWQgLWs9JyRrb3B0cycgaW5zdGVhZCIpOworICAgICAgICAgICAgI1RPRE86IEFsc28gaGF2ZSBvcHRpb24gdG8gc2VuZCB3YXJuaW5nIHRvIHVzZXI/CisgICAgICAgIH0KKwogICAgICAgICAkYWRkY291bnQrKzsKICAgICB9CiAKQEAgLTYwMCw3ICs2MzIsNyBAQAogCiAgICAgICAgIHByaW50ICJDaGVja2VkLWluICRkaXJwYXJ0XG4iOwogICAgICAgICBwcmludCAiJGZpbGVuYW1lXG4iOwotICAgICAgICBteSAka29wdHMgPSBrb3B0c19mcm9tX3BhdGgoJGZpbGVwYXJ0KTsKKyAgICAgICAgbXkgJGtvcHRzID0ga29wdHNfZnJvbV9wYXRoKCRmaWxlbmFtZSwic2hhMSIsJG1ldGEtPntmaWxlaGFzaH0pOwogICAgICAgICBwcmludCAiLyRmaWxlcGFydC8tMS4kd3Jldi8vJGtvcHRzL1xuIjsKIAogICAgICAgICAkcm1jb3VudCsrOwpAQCAtNzcwLDYgKzgwMiw3IEBACiAgICAgYXJnc3BsaXQoImNvIik7CiAKICAgICBteSAkbW9kdWxlID0gJHN0YXRlLT57YXJnc31bMF07CisgICAgJHN0YXRlLT57bW9kdWxlfSA9ICRtb2R1bGU7CiAgICAgbXkgJGNoZWNrb3V0X3BhdGggPSAkbW9kdWxlOwogCiAgICAgIyB1c2UgdGhlIHVzZXIgc3BlY2lmaWVkIGRpcmVjdG9yeSBpZiB3ZSdyZSBnaXZlbiBpdApAQCAtODQ3LDYgKzg4MCw3IEBACiAgICAgICAgICMgRG9uJ3Qgd2FudCB0byBjaGVjayBvdXQgZGVsZXRlZCBmaWxlcwogICAgICAgICBuZXh0IGlmICggJGdpdC0+e2ZpbGVoYXNofSBlcSAiZGVsZXRlZCIgKTsKIAorICAgICAgICBteSAkZnVsbE5hbWUgPSAkZ2l0LT57bmFtZX07CiAgICAgICAgICggJGdpdC0+e25hbWV9LCAkZ2l0LT57ZGlyfSApID0gZmlsZW5hbWVzcGxpdCgkZ2l0LT57bmFtZX0pOwogCiAgICAgICAgaWYgKGxlbmd0aCgkZ2l0LT57ZGlyfSkgJiYgJGdpdC0+e2Rpcn0gbmUgJy4vJwpAQCAtODc3LDcgKzkxMSw3IEBACiAgICAgICAgcHJpbnQgJHN0YXRlLT57Q1ZTUk9PVH0gLiAiLyRtb2R1bGUvIiAuICggZGVmaW5lZCAoICRnaXQtPntkaXJ9ICkgYW5kICRnaXQtPntkaXJ9IG5lICIuLyIgPyAkZ2l0LT57ZGlyfSAuICIvIiA6ICIiICkgLiAiJGdpdC0+e25hbWV9XG4iOwogCiAgICAgICAgICMgdGhpcyBpcyBhbiAiZW50cmllcyIgbGluZQotICAgICAgICBteSAka29wdHMgPSBrb3B0c19mcm9tX3BhdGgoJGdpdC0+e25hbWV9KTsKKyAgICAgICAgbXkgJGtvcHRzID0ga29wdHNfZnJvbV9wYXRoKCRmdWxsTmFtZSwic2hhMSIsJGdpdC0+e2ZpbGVoYXNofSk7CiAgICAgICAgIHByaW50ICIvJGdpdC0+e25hbWV9LzEuJGdpdC0+e3JldmlzaW9ufS8vJGtvcHRzL1xuIjsKICAgICAgICAgIyBwZXJtaXNzaW9ucwogICAgICAgICBwcmludCAidT0kZ2l0LT57bW9kZX0sZz0kZ2l0LT57bW9kZX0sbz0kZ2l0LT57bW9kZX1cbiI7CkBAIC0xMDg2LDcgKzExMjAsNyBAQAogCQlwcmludCAkc3RhdGUtPntDVlNST09UfSAuICIvJHN0YXRlLT57bW9kdWxlfS8kZmlsZW5hbWVcbiI7CiAKIAkJIyB0aGlzIGlzIGFuICJlbnRyaWVzIiBsaW5lCi0JCW15ICRrb3B0cyA9IGtvcHRzX2Zyb21fcGF0aCgkZmlsZXBhcnQpOworCQlteSAka29wdHMgPSBrb3B0c19mcm9tX3BhdGgoJGZpbGVuYW1lLCJzaGExIiwkbWV0YS0+e2ZpbGVoYXNofSk7CiAJCSRsb2ctPmRlYnVnKCIvJGZpbGVwYXJ0LzEuJG1ldGEtPntyZXZpc2lvbn0vLyRrb3B0cy8iKTsKIAkJcHJpbnQgIi8kZmlsZXBhcnQvMS4kbWV0YS0+e3JldmlzaW9ufS8vJGtvcHRzL1xuIjsKIApAQCAtMTEwMSwxMCArMTEzNSwxMCBAQAogICAgICAgICAgICAgJGxvZy0+aW5mbygiVXBkYXRpbmcgJyRmaWxlbmFtZSciKTsKICAgICAgICAgICAgIG15ICggJGZpbGVwYXJ0LCAkZGlycGFydCApID0gZmlsZW5hbWVzcGxpdCgkbWV0YS0+e25hbWV9LDEpOwogCi0gICAgICAgICAgICBteSAkZGlyID0gdGVtcGRpciggRElSID0+ICRURU1QX0RJUiwgQ0xFQU5VUCA9PiAxICkgLiAiLyI7CisgICAgICAgICAgICBteSAkbWVyZ2VEaXIgPSBzZXR1cFRtcERpcigpOwogCi0gICAgICAgICAgICBjaGRpciAkZGlyOwogICAgICAgICAgICAgbXkgJGZpbGVfbG9jYWwgPSAkZmlsZXBhcnQgLiAiLm1pbmUiOworICAgICAgICAgICAgbXkgJG1lcmdlZEZpbGUgPSAiJG1lcmdlRGlyLyRmaWxlX2xvY2FsIjsKICAgICAgICAgICAgIHN5c3RlbSgibG4iLCItcyIsJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXttb2RpZmllZF9maWxlbmFtZX0sICRmaWxlX2xvY2FsKTsKICAgICAgICAgICAgIG15ICRmaWxlX29sZCA9ICRmaWxlcGFydCAuICIuIiAuICRvbGRtZXRhLT57cmV2aXNpb259OwogICAgICAgICAgICAgdHJhbnNtaXRmaWxlKCRvbGRtZXRhLT57ZmlsZWhhc2h9LCB7IHRhcmdldGZpbGUgPT4gJGZpbGVfb2xkIH0pOwpAQCAtMTExNSwxMSArMTE0OSwxMyBAQAogICAgICAgICAgICAgJGxvZy0+aW5mbygiTWVyZ2luZyAkZmlsZV9sb2NhbCwgJGZpbGVfb2xkLCAkZmlsZV9uZXciKTsKICAgICAgICAgICAgIHByaW50ICJNIE1lcmdpbmcgZGlmZmVyZW5jZXMgYmV0d2VlbiAxLiRvbGRtZXRhLT57cmV2aXNpb259IGFuZCAxLiRtZXRhLT57cmV2aXNpb259IGludG8gJGZpbGVuYW1lXG4iOwogCi0gICAgICAgICAgICAkbG9nLT5kZWJ1ZygiVGVtcG9yYXJ5IGRpcmVjdG9yeSBmb3IgbWVyZ2UgaXMgJGRpciIpOworICAgICAgICAgICAgJGxvZy0+ZGVidWcoIlRlbXBvcmFyeSBkaXJlY3RvcnkgZm9yIG1lcmdlIGlzICRtZXJnZURpciIpOwogCiAgICAgICAgICAgICBteSAkcmV0dXJuID0gc3lzdGVtKCJnaXQiLCAibWVyZ2UtZmlsZSIsICRmaWxlX2xvY2FsLCAkZmlsZV9vbGQsICRmaWxlX25ldyk7CiAgICAgICAgICAgICAkcmV0dXJuID4+PSA4OwogCisgICAgICAgICAgICBjbGVhbnVwVG1wRGlyKCk7CisKICAgICAgICAgICAgIGlmICggJHJldHVybiA9PSAwICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAkbG9nLT5pbmZvKCJNZXJnZWQgc3VjY2Vzc2Z1bGx5Iik7CkBAIC0xMTMyLDcgKzExNjgsOCBAQAogICAgICAgICAgICAgICAgICAgICBwcmludCAiTWVyZ2VkICRkaXJwYXJ0XG4iOwogICAgICAgICAgICAgICAgICAgICAkbG9nLT5kZWJ1Zygkc3RhdGUtPntDVlNST09UfSAuICIvJHN0YXRlLT57bW9kdWxlfS8kZmlsZW5hbWUiKTsKICAgICAgICAgICAgICAgICAgICAgcHJpbnQgJHN0YXRlLT57Q1ZTUk9PVH0gLiAiLyRzdGF0ZS0+e21vZHVsZX0vJGZpbGVuYW1lXG4iOwotICAgICAgICAgICAgICAgICAgICBteSAka29wdHMgPSBrb3B0c19mcm9tX3BhdGgoJGZpbGVwYXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgbXkgJGtvcHRzID0ga29wdHNfZnJvbV9wYXRoKCIkZGlycGFydC8kZmlsZXBhcnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiLCRtZXJnZWRGaWxlKTsKICAgICAgICAgICAgICAgICAgICAgJGxvZy0+ZGVidWcoIi8kZmlsZXBhcnQvMS4kbWV0YS0+e3JldmlzaW9ufS8vJGtvcHRzLyIpOwogICAgICAgICAgICAgICAgICAgICBwcmludCAiLyRmaWxlcGFydC8xLiRtZXRhLT57cmV2aXNpb259Ly8ka29wdHMvXG4iOwogICAgICAgICAgICAgICAgIH0KQEAgLTExNDgsNyArMTE4NSw4IEBACiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBwcmludCAiTWVyZ2VkICRkaXJwYXJ0XG4iOwogICAgICAgICAgICAgICAgICAgICBwcmludCAkc3RhdGUtPntDVlNST09UfSAuICIvJHN0YXRlLT57bW9kdWxlfS8kZmlsZW5hbWVcbiI7Ci0gICAgICAgICAgICAgICAgICAgIG15ICRrb3B0cyA9IGtvcHRzX2Zyb21fcGF0aCgkZmlsZXBhcnQpOworICAgICAgICAgICAgICAgICAgICBteSAka29wdHMgPSBrb3B0c19mcm9tX3BhdGgoIiRkaXJwYXJ0LyRmaWxlcGFydCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSIsJG1lcmdlZEZpbGUpOwogICAgICAgICAgICAgICAgICAgICBwcmludCAiLyRmaWxlcGFydC8xLiRtZXRhLT57cmV2aXNpb259LysvJGtvcHRzL1xuIjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0xMTY4LDEzICsxMjA2LDExIEBACiAgICAgICAgICAgICAgICAgIyB0cmFuc21pdCBmaWxlLCBmb3JtYXQgaXMgc2luZ2xlIGludGVnZXIgb24gYSBsaW5lIGJ5IGl0c2VsZiAoZmlsZQogICAgICAgICAgICAgICAgICMgc2l6ZSkgZm9sbG93ZWQgYnkgdGhlIGZpbGUgY29udGVudHMKICAgICAgICAgICAgICAgICAjIFRPRE8gOiB3ZSBzaG91bGQgY29weSBmaWxlcyBpbiBibG9ja3MKLSAgICAgICAgICAgICAgICBteSAkZGF0YSA9IGBjYXQgJGZpbGVfbG9jYWxgOworICAgICAgICAgICAgICAgIG15ICRkYXRhID0gYGNhdCAkbWVyZ2VkRmlsZWA7CiAgICAgICAgICAgICAgICAgJGxvZy0+ZGVidWcoIkZpbGUgc2l6ZSA6ICIgLiBsZW5ndGgoJGRhdGEpKTsKICAgICAgICAgICAgICAgICBwcmludCBsZW5ndGgoJGRhdGEpIC4gIlxuIjsKICAgICAgICAgICAgICAgICBwcmludCAkZGF0YTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2hkaXIgIi8iOwogICAgICAgICB9CiAKICAgICB9CkBAIC0xMTk1LDYgKzEyMzEsNyBAQAogICAgIGlmICggJHN0YXRlLT57bWV0aG9kfSBlcSAncHNlcnZlcicpCiAgICAgewogICAgICAgICBwcmludCAiZXJyb3IgMSBwc2VydmVyIGFjY2VzcyBjYW5ub3QgY29tbWl0XG4iOworICAgICAgICBjbGVhbnVwV29ya1RyZWUoKTsKICAgICAgICAgZXhpdDsKICAgICB9CiAKQEAgLTEyMDIsNiArMTIzOSw3IEBACiAgICAgewogICAgICAgICAkbG9nLT53YXJuKCJmaWxlICdpbmRleCcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGdpdCByZXBvc2l0b3J5Iik7CiAgICAgICAgIHByaW50ICJlcnJvciAxIEluZGV4IGFscmVhZHkgZXhpc3RzIGluIGdpdCByZXBvXG4iOworICAgICAgICBjbGVhbnVwV29ya1RyZWUoKTsKICAgICAgICAgZXhpdDsKICAgICB9CiAKQEAgLTEyMDksMzEgKzEyNDcsMjAgQEAKICAgICBteSAkdXBkYXRlciA9IEdJVENWUzo6dXBkYXRlci0+bmV3KCRzdGF0ZS0+e0NWU1JPT1R9LCAkc3RhdGUtPnttb2R1bGV9LCAkbG9nKTsKICAgICAkdXBkYXRlci0+dXBkYXRlKCk7CiAKLSAgICBteSAkdG1wZGlyID0gdGVtcGRpciAoIERJUiA9PiAkVEVNUF9ESVIgKTsKLSAgICBteSAoIHVuZGVmLCAkZmlsZV9pbmRleCApID0gdGVtcGZpbGUgKCBESVIgPT4gJFRFTVBfRElSLCBPUEVOID0+IDAgKTsKLSAgICAkbG9nLT5pbmZvKCJMb2NrbGVzcyBjb21taXQgc3RhcnQsIGJhc2luZyBjb21taXQgb24gJyR0bXBkaXInLCBpbmRleCBmaWxlIGlzICckZmlsZV9pbmRleCciKTsKLQotICAgICRFTlZ7R0lUX0RJUn0gPSAkc3RhdGUtPntDVlNST09UfSAuICIvIjsKLSAgICAkRU5We0dJVF9XT1JLX1RSRUV9ID0gIi4iOwotICAgICRFTlZ7R0lUX0lOREVYX0ZJTEV9ID0gJGZpbGVfaW5kZXg7Ci0KICAgICAjIFJlbWVtYmVyIHdoZXJlIHRoZSBoZWFkIHdhcyBhdCB0aGUgYmVnaW5uaW5nLgogICAgIG15ICRwYXJlbnRoYXNoID0gYGdpdCBzaG93LXJlZiAtcyByZWZzL2hlYWRzLyRzdGF0ZS0+e21vZHVsZX1gOwogICAgIGNob21wICRwYXJlbnRoYXNoOwogICAgIGlmICgkcGFyZW50aGFzaCAhfiAvXlswLTlhLWZdezQwfSQvKSB7CiAJICAgIHByaW50ICJlcnJvciAxIHBzZXJ2ZXIgY2Fubm90IGZpbmQgdGhlIGN1cnJlbnQgSEVBRCBvZiBtb2R1bGUiOworCSAgICBjbGVhbnVwV29ya1RyZWUoKTsKIAkgICAgZXhpdDsKICAgICB9CiAKLSAgICBjaGRpciAkdG1wZGlyOworICAgIHNldHVwV29ya1RyZWUoJHBhcmVudGhhc2gpOwogCi0gICAgIyBwb3B1bGF0ZSB0aGUgdGVtcG9yYXJ5IGluZGV4Ci0gICAgc3lzdGVtKCJnaXQtcmVhZC10cmVlIiwgJHBhcmVudGhhc2gpOwotICAgIHVubGVzcyAoJD8gPT0gMCkKLSAgICB7Ci0JZGllICJFcnJvciBydW5uaW5nIGdpdC1yZWFkLXRyZWUgJHN0YXRlLT57bW9kdWxlfSAkZmlsZV9pbmRleCAkISI7Ci0gICAgfQotICAgICRsb2ctPmluZm8oIkNyZWF0ZWQgaW5kZXggJyRmaWxlX2luZGV4JyBmb3IgaGVhZCAkc3RhdGUtPnttb2R1bGV9IC0gZXhpdCBzdGF0dXMgJD8iKTsKKyAgICAkbG9nLT5pbmZvKCJMb2NrbGVzcyBjb21taXQgc3RhcnQsIGJhc2luZyBjb21taXQgb24gJyR3b3JrLT57d29ya0Rpcn0nLCBpbmRleCBmaWxlIGlzICckd29yay0+e2luZGV4fSciKTsKKworICAgICRsb2ctPmluZm8oIkNyZWF0ZWQgaW5kZXggJyR3b3JrLT57aW5kZXh9JyBmb3IgaGVhZCAkc3RhdGUtPnttb2R1bGV9IC0gZXhpdCBzdGF0dXMgJD8iKTsKIAogICAgIG15IEBjb21taXR0ZWRmaWxlcyA9ICgpOwogICAgIG15ICVvbGRtZXRhOwpAQCAtMTI3MSw3ICsxMjk4LDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgIyBmYWlsIGV2ZXJ5dGhpbmcgaWYgYW4gdXAgdG8gZGF0ZSBjaGVjayBmYWlscwogICAgICAgICAgICAgcHJpbnQgImVycm9yIDEgVXAgdG8gZGF0ZSBjaGVjayBmYWlsZWQgZm9yICRmaWxlbmFtZVxuIjsKLSAgICAgICAgICAgIGNoZGlyICIvIjsKKyAgICAgICAgICAgIGNsZWFudXBXb3JrVHJlZSgpOwogICAgICAgICAgICAgZXhpdDsKICAgICAgICAgfQogCkBAIC0xMzEzLDcgKzEzNDAsNyBAQAogICAgIHsKICAgICAgICAgcHJpbnQgIkUgTm8gZmlsZXMgdG8gY29tbWl0XG4iOwogICAgICAgICBwcmludCAib2tcbiI7Ci0gICAgICAgIGNoZGlyICIvIjsKKyAgICAgICAgY2xlYW51cFdvcmtUcmVlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEzMzYsNyArMTM2Myw3IEBACiAgICAgewogICAgICAgICAkbG9nLT53YXJuKCJDb21taXQgZmFpbGVkIChJbnZhbGlkIGNvbW1pdCBoYXNoKSIpOwogICAgICAgICBwcmludCAiZXJyb3IgMSBDb21taXQgZmFpbGVkICh1bmtub3duIHJlYXNvbilcbiI7Ci0gICAgICAgIGNoZGlyICIvIjsKKyAgICAgICAgY2xlYW51cFdvcmtUcmVlKCk7CiAgICAgICAgIGV4aXQ7CiAgICAgfQogCkBAIC0xMzQ4LDcgKzEzNzUsNyBAQAogCQl7CiAJCQkkbG9nLT53YXJuKCJDb21taXQgZmFpbGVkICh1cGRhdGUgaG9vayBkZWNsaW5lZCB0byB1cGRhdGUgcmVmKSIpOwogCQkJcHJpbnQgImVycm9yIDEgQ29tbWl0IGZhaWxlZCAodXBkYXRlIGhvb2sgZGVjbGluZWQpXG4iOwotCQkJY2hkaXIgIi8iOworCQkJY2xlYW51cFdvcmtUcmVlKCk7CiAJCQlleGl0OwogCQl9CiAJfQpAQCAtMTM1OCw2ICsxMzg1LDcgQEAKIAkJCSJyZWZzL2hlYWRzLyRzdGF0ZS0+e21vZHVsZX0iLCAkY29tbWl0aGFzaCwgJHBhcmVudGhhc2gpKSB7CiAJCSRsb2ctPndhcm4oInVwZGF0ZS1yZWYgZm9yICRzdGF0ZS0+e21vZHVsZX0gZmFpbGVkLiIpOwogCQlwcmludCAiZXJyb3IgMSBDYW5ub3QgY29tbWl0IC0tIHVwZGF0ZSBmaXJzdFxuIjsKKwkJY2xlYW51cFdvcmtUcmVlKCk7CiAJCWV4aXQ7CiAJfQogCkBAIC0xNDA5LDEyICsxNDM3LDEyIEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBwcmludCAiQ2hlY2tlZC1pbiAkZGlycGFydFxuIjsKICAgICAgICAgICAgIHByaW50ICIkZmlsZW5hbWVcbiI7Ci0gICAgICAgICAgICBteSAka29wdHMgPSBrb3B0c19mcm9tX3BhdGgoJGZpbGVwYXJ0KTsKKyAgICAgICAgICAgIG15ICRrb3B0cyA9IGtvcHRzX2Zyb21fcGF0aCgkZmlsZW5hbWUsInNoYTEiLCRtZXRhLT57ZmlsZWhhc2h9KTsKICAgICAgICAgICAgIHByaW50ICIvJGZpbGVwYXJ0LzEuJG1ldGEtPntyZXZpc2lvbn0vLyRrb3B0cy9cbiI7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBjaGRpciAiLyI7CisgICAgY2xlYW51cFdvcmtUcmVlKCk7CiAgICAgcHJpbnQgIm9rXG4iOwogfQogCkBAIC0xNzU3LDE1ICsxNzg1LDkgQEAKICAgICBhcmdzZnJvbWRpcigkdXBkYXRlcik7CiAKICAgICAjIHdlJ2xsIG5lZWQgYSB0ZW1wb3JhcnkgY2hlY2tvdXQgZGlyCi0gICAgbXkgJHRtcGRpciA9IHRlbXBkaXIgKCBESVIgPT4gJFRFTVBfRElSICk7Ci0gICAgbXkgKCB1bmRlZiwgJGZpbGVfaW5kZXggKSA9IHRlbXBmaWxlICggRElSID0+ICRURU1QX0RJUiwgT1BFTiA9PiAwICk7Ci0gICAgJGxvZy0+aW5mbygiVGVtcCBjaGVja291dGRpciBjcmVhdGlvbiBzdWNjZXNzZnVsLCBiYXNpbmcgYW5ub3RhdGUgc2Vzc2lvbiB3b3JrIG9uICckdG1wZGlyJywgaW5kZXggZmlsZSBpcyAnJGZpbGVfaW5kZXgnIik7CisgICAgc2V0dXBXb3JrVHJlZSgpOwogCi0gICAgJEVOVntHSVRfRElSfSA9ICRzdGF0ZS0+e0NWU1JPT1R9IC4gIi8iOwotICAgICRFTlZ7R0lUX1dPUktfVFJFRX0gPSAiLiI7Ci0gICAgJEVOVntHSVRfSU5ERVhfRklMRX0gPSAkZmlsZV9pbmRleDsKLQotICAgIGNoZGlyICR0bXBkaXI7CisgICAgJGxvZy0+aW5mbygiVGVtcCBjaGVja291dGRpciBjcmVhdGlvbiBzdWNjZXNzZnVsLCBiYXNpbmcgYW5ub3RhdGUgc2Vzc2lvbiB3b3JrIG9uICckd29yay0+e3dvcmtEaXJ9JywgaW5kZXggZmlsZSBpcyAnJEVOVntHSVRfSU5ERVhfRklMRX0nIik7CiAKICAgICAjIGZvcmVhY2ggZmlsZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSAuLi4KICAgICBmb3JlYWNoIG15ICRmaWxlbmFtZSAoIEB7JHN0YXRlLT57YXJnc319ICkKQEAgLTE3ODksMTAgKzE4MTEsMTAgQEAKIAlzeXN0ZW0oImdpdC1yZWFkLXRyZWUiLCAkbGFzdHNlZW5pbik7CiAJdW5sZXNzICgkPyA9PSAwKQogCXsKLQkgICAgcHJpbnQgIkUgZXJyb3IgcnVubmluZyBnaXQtcmVhZC10cmVlICRsYXN0c2VlbmluICRmaWxlX2luZGV4ICQhXG4iOworCSAgICBwcmludCAiRSBlcnJvciBydW5uaW5nIGdpdC1yZWFkLXRyZWUgJGxhc3RzZWVuaW4gJEVOVntHSVRfSU5ERVhfRklMRX0gJCFcbiI7CiAJICAgIHJldHVybjsKIAl9Ci0JJGxvZy0+aW5mbygiQ3JlYXRlZCBpbmRleCAnJGZpbGVfaW5kZXgnIHdpdGggY29tbWl0ICRsYXN0c2VlbmluIC0gZXhpdCBzdGF0dXMgJD8iKTsKKwkkbG9nLT5pbmZvKCJDcmVhdGVkIGluZGV4ICckRU5We0dJVF9JTkRFWF9GSUxFfScgd2l0aCBjb21taXQgJGxhc3RzZWVuaW4gLSBleGl0IHN0YXR1cyAkPyIpOwogCiAgICAgICAgICMgZG8gYSBjaGVja291dCBvZiB0aGUgZmlsZQogICAgICAgICBzeXN0ZW0oJ2dpdC1jaGVja291dC1pbmRleCcsICctZicsICctdScsICRmaWxlbmFtZSk7CkBAIC0xODA4LDcgKzE4MzAsNyBAQAogICAgICAgICAjIGdpdC1qc2Fubm90YXRlIHRlbGxpbmcgdXMgYWJvdXQgY29tbWl0cyB3ZSBhcmUgaGlkaW5nCiAgICAgICAgICMgZnJvbSB0aGUgY2xpZW50LgogCi0gICAgICAgIG15ICRhX2hpbnRzID0gIiR0bXBkaXIvLmFubm90YXRlX2hpbnRzIjsKKyAgICAgICAgbXkgJGFfaGludHMgPSAiJHdvcmstPnt3b3JrRGlyfS8uYW5ub3RhdGVfaGludHMiOwogICAgICAgICBpZiAoIW9wZW4oQU5OT1RBVEVISU5UUywgJz4nLCAkYV9oaW50cykpIHsKICAgICAgICAgICAgIHByaW50ICJFIGZhaWxlZCB0byBvcGVuICckYV9oaW50cycgZm9yIHdyaXRpbmc6ICQhXG4iOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTg2Miw3ICsxODg0LDcgQEAKICAgICB9CiAKICAgICAjIGRvbmU7IGdldCBvdXQgb2YgdGhlIHRlbXBkaXIKLSAgICBjaGRpciAiLyI7CisgICAgY2xlYW51cFdvcmtUcmVlKCk7CiAKICAgICBwcmludCAib2tcbiI7CiAKQEAgLTIxMTUsMjYgKzIxMzcsMzg4IEBACiAgICAgcmV0dXJuICRmaWxlbmFtZTsKIH0KIAorc3ViIHZhbGlkYXRlR2l0RGlyCit7CisgICAgaWYoICFkZWZpbmVkKCRzdGF0ZS0+e0NWU1JPT1R9KSApCisgICAgeworICAgICAgICBwcmludCAiZXJyb3IgMSBDVlNST09UIG5vdCBzcGVjaWZpZWRcbiI7CisgICAgICAgIGNsZWFudXBXb3JrVHJlZSgpOworICAgICAgICBleGl0OworICAgIH0KKyAgICBpZiggJEVOVntHSVRfRElSfSBuZSAoJHN0YXRlLT57Q1ZTUk9PVH0gLiAnLycpICkKKyAgICB7CisgICAgICAgIHByaW50ICJlcnJvciAxIEludGVybmFsbHkgaW5jb25zaXN0ZW50IENWU1JPT1RcbiI7CisgICAgICAgIGNsZWFudXBXb3JrVHJlZSgpOworICAgICAgICBleGl0OworICAgIH0KK30KKworIyBTZXR1cCB3b3JraW5nIGRpcmVjdG9yeSBpbiBhIHdvcmsgdHJlZSB3aXRoIHRoZSByZXF1ZXN0ZWQgdmVyc2lvbgorIyBsb2FkZWQgaW4gdGhlIGluZGV4Lgorc3ViIHNldHVwV29ya1RyZWUKK3sKKyAgICBteSAoJHZlcikgPSBAXzsKKworICAgIHZhbGlkYXRlR2l0RGlyKCk7CisKKyAgICBpZiggKCBkZWZpbmVkKCR3b3JrLT57c3RhdGV9KSAmJiAkd29yay0+e3N0YXRlfSAhPSAxICkgfHwKKyAgICAgICAgZGVmaW5lZCgkd29yay0+e3RtcERpcn0pICkKKyAgICB7CisgICAgICAgICRsb2ctPndhcm4oIkJhZCB3b3JrIHRyZWUgc3RhdGUgbWFuYWdlbWVudCIpOworICAgICAgICBwcmludCAiZXJyb3IgMSBJbnRlcm5hbCBzZXR1cCBtdWx0aXBsZSB3b3JrIHRyZWVzIHdpdGhvdXQgY2xlYW51cFxuIjsKKyAgICAgICAgY2xlYW51cFdvcmtUcmVlKCk7CisgICAgICAgIGV4aXQ7CisgICAgfQorCisgICAgJHdvcmstPnt3b3JrRGlyfSA9IHRlbXBkaXIgKCBESVIgPT4gJFRFTVBfRElSICk7CisKKyAgICBpZiggIWRlZmluZWQoJHdvcmstPntpbmRleH0pICkKKyAgICB7CisgICAgICAgICh1bmRlZiwgJHdvcmstPntpbmRleH0pID0gdGVtcGZpbGUgKCBESVIgPT4gJFRFTVBfRElSLCBPUEVOID0+IDAgKTsKKyAgICB9CisKKyAgICBjaGRpciAkd29yay0+e3dvcmtEaXJ9IG9yCisgICAgICAgIGRpZSAiVW5hYmxlIHRvIGNoZGlyIHRvICR3b3JrLT57d29ya0Rpcn1cbiI7CisKKyAgICAkbG9nLT5pbmZvKCJTZXR0aW5nIHVwIEdJVF9XT1JLX1RSRUUgYXMgJy4nIGluICckd29yay0+e3dvcmtEaXJ9JywgaW5kZXggZmlsZSBpcyAnJHdvcmstPntpbmRleH0nIik7CisKKyAgICAkRU5We0dJVF9XT1JLX1RSRUV9ID0gIi4iOworICAgICRFTlZ7R0lUX0lOREVYX0ZJTEV9ID0gJHdvcmstPntpbmRleH07CisgICAgJHdvcmstPntzdGF0ZX0gPSAyOworCisgICAgaWYoJHZlcikKKyAgICB7CisgICAgICAgIHN5c3RlbSgiZ2l0IiwicmVhZC10cmVlIiwkdmVyKTsKKyAgICAgICAgdW5sZXNzICgkPyA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICAkbG9nLT53YXJuKCJFcnJvciBydW5uaW5nIGdpdC1yZWFkLXRyZWUiKTsKKyAgICAgICAgICAgIGRpZSAiRXJyb3IgcnVubmluZyBnaXQtcmVhZC10cmVlICR2ZXIgaW4gJHdvcmstPnt3b3JrRGlyfSAkIVxuIjsKKyAgICAgICAgfQorICAgIH0KKyAgICAjIGVsc2UgIyByZXFfYW5ub3RhdGUgcmVhZHMgdHJlZSBmb3IgZWFjaCBmaWxlCit9CisKKyMgRW5zdXJlIGN1cnJlbnQgZGlyZWN0b3J5IGlzIGluIHNvbWUga2luZCBvZiB3b3JraW5nIGRpcmVjdG9yeSwKKyMgd2l0aCBhIHJlY2VudCB2ZXJzaW9uIGxvYWRlZCBpbiB0aGUgaW5kZXguCitzdWIgZW5zdXJlV29ya1RyZWUKK3sKKyAgICBpZiggZGVmaW5lZCgkd29yay0+e3RtcERpcn0pICkKKyAgICB7CisgICAgICAgICRsb2ctPndhcm4oIkJhZCB3b3JrIHRyZWUgc3RhdGUgbWFuYWdlbWVudCBbZW5zdXJlV29ya1RyZWUoKV0iKTsKKyAgICAgICAgcHJpbnQgImVycm9yIDEgSW50ZXJuYWwgc2V0dXAgbXVsdGlwbGUgZGlycyB3aXRob3V0IGNsZWFudXBcbiI7CisgICAgICAgIGNsZWFudXBXb3JrVHJlZSgpOworICAgICAgICBleGl0OworICAgIH0KKyAgICBpZiggJHdvcmstPntzdGF0ZX0gKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZhbGlkYXRlR2l0RGlyKCk7CisKKyAgICBpZiggIWRlZmluZWQoJHdvcmstPntlbXB0eURpcn0pICkKKyAgICB7CisgICAgICAgICR3b3JrLT57ZW1wdHlEaXJ9ID0gdGVtcGRpciAoIERJUiA9PiAkVEVNUF9ESVIsIE9QRU4gPT4gMCk7CisgICAgfQorICAgIGNoZGlyICR3b3JrLT57ZW1wdHlEaXJ9IG9yCisgICAgICAgIGRpZSAiVW5hYmxlIHRvIGNoZGlyIHRvICR3b3JrLT57ZW1wdHlEaXJ9XG4iOworCisgICAgbXkgJHZlciA9IGBnaXQgc2hvdy1yZWYgLXMgcmVmcy9oZWFkcy8kc3RhdGUtPnttb2R1bGV9YDsKKyAgICBjaG9tcCAkdmVyOworICAgIGlmICgkdmVyICF+IC9eWzAtOWEtZl17NDB9JC8pCisgICAgeworICAgICAgICAkbG9nLT53YXJuKCJFcnJvciBmcm9tIGdpdCBzaG93LXJlZiAtcyByZWZzL2hlYWQkc3RhdGUtPnttb2R1bGV9Iik7CisgICAgICAgIHByaW50ICJlcnJvciAxIGNhbm5vdCBmaW5kIHRoZSBjdXJyZW50IEhFQUQgb2YgbW9kdWxlIjsKKyAgICAgICAgY2xlYW51cFdvcmtUcmVlKCk7CisgICAgICAgIGV4aXQ7CisgICAgfQorCisgICAgaWYoICFkZWZpbmVkKCR3b3JrLT57aW5kZXh9KSApCisgICAgeworICAgICAgICAodW5kZWYsICR3b3JrLT57aW5kZXh9KSA9IHRlbXBmaWxlICggRElSID0+ICRURU1QX0RJUiwgT1BFTiA9PiAwICk7CisgICAgfQorCisgICAgJEVOVntHSVRfV09SS19UUkVFfSA9ICIuIjsKKyAgICAkRU5We0dJVF9JTkRFWF9GSUxFfSA9ICR3b3JrLT57aW5kZXh9OworICAgICR3b3JrLT57c3RhdGV9ID0gMTsKKworICAgIHN5c3RlbSgiZ2l0IiwicmVhZC10cmVlIiwkdmVyKTsKKyAgICB1bmxlc3MgKCQ/ID09IDApCisgICAgeworICAgICAgICBkaWUgIkVycm9yIHJ1bm5pbmcgZ2l0LXJlYWQtdHJlZSAkdmVyICQhXG4iOworICAgIH0KK30KKworIyBDbGVhbnVwIHdvcmtpbmcgZGlyZWN0b3J5IHRoYXQgaXMgbm90IG5lZWRlZCBhbnkgbG9uZ2VyLgorc3ViIGNsZWFudXBXb3JrVHJlZQoreworICAgIGlmKCAhICR3b3JrLT57c3RhdGV9ICkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjaGRpciAiLyIgb3IgZGllICJVbmFibGUgdG8gY2hkaXIgJy8nXG4iOworCisgICAgaWYoIGRlZmluZWQoJHdvcmstPnt3b3JrRGlyfSkgKQorICAgIHsKKyAgICAgICAgcm10cmVlKCAkd29yay0+e3dvcmtEaXJ9ICk7CisgICAgICAgIHVuZGVmICR3b3JrLT57d29ya0Rpcn07CisgICAgfQorICAgIHVuZGVmICR3b3JrLT57c3RhdGV9OworfQorCisjIFNldHVwIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSAobm90IGEgd29ya2luZyB0cmVlKSwgdHlwaWNhbGx5IGZvcgorIyBtZXJnaW5nIGRpcnR5IHN0YXRlIGFzIGluIHJlcV91cGRhdGUuCitzdWIgc2V0dXBUbXBEaXIKK3sKKyAgICAkd29yay0+e3RtcERpcn0gPSB0ZW1wZGlyICggRElSID0+ICRURU1QX0RJUiApOworICAgIGNoZGlyICR3b3JrLT57dG1wRGlyfSBvciBkaWUgIlVuYWJsZSB0byBjaGRpciAkd29yay0+e3RtcERpcn1cbiI7CisKKyAgICByZXR1cm4gJHdvcmstPnt0bXBEaXJ9OworfQorCisjIENsZWFuIHVwIGEgcHJldmlvdXNseSBzZXR1cFRtcERpci4gIFJlc3RvcmUgcHJldmlvdXMgd29yayB0cmVlIGlmCisjIGFwcHJvcHJpYXRlLgorc3ViIGNsZWFudXBUbXBEaXIKK3sKKyAgICBpZiAoICFkZWZpbmVkKCR3b3JrLT57dG1wRGlyfSkgKQorICAgIHsKKyAgICAgICAgJGxvZy0+d2FybigiY2xlYW51cCB0bXBkaXIgdGhhdCBoYXMgbm90IGJlZW4gc2V0dXAiKTsKKyAgICAgICAgZGllICJDbGVhbnVwIHRtcERpciB0aGF0IGhhcyBub3QgYmVlbiBzZXR1cFxuIjsKKyAgICB9CisgICAgaWYoIGRlZmluZWQoJHdvcmstPntzdGF0ZX0pICkKKyAgICB7CisgICAgICAgIGlmKCAkd29yay0+e3N0YXRlfSA9PSAxICkKKyAgICAgICAgeworICAgICAgICAgICAgY2hkaXIgJHdvcmstPntlbXB0eURpcn0gb3IKKyAgICAgICAgICAgICAgICBkaWUgIlVuYWJsZSB0byBjaGRpciB0byAkd29yay0+e2VtcHR5RGlyfVxuIjsKKyAgICAgICAgfQorICAgICAgICBlbHNpZiggJHdvcmstPntzdGF0ZX0gPT0gMiApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNoZGlyICR3b3JrLT57d29ya0Rpcn0gb3IKKyAgICAgICAgICAgICAgICBkaWUgIlVuYWJsZSB0byBjaGRpciB0byAkd29yay0+e2VtcHR5RGlyfVxuIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgICRsb2ctPndhcm4oIkluY29uc2lzdGVudCB3b3JrIGRpciBzdGF0ZSIpOworICAgICAgICAgICAgZGllICJJbmNvbnNpc3RlbnQgd29yayBkaXIgc3RhdGVcbiI7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY2hkaXIgIi8iIG9yIGRpZSAiVW5hYmxlIHRvIGNoZGlyICcvJ1xuIjsKKyAgICB9Cit9CisKICMgR2l2ZW4gYSBwYXRoLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUga29wdHMKICMgdGhhdCBzaG91bGQgZ28gaW50byB0aGF0IHBhdGgncyBFbnRyaWVzIGxpbmUuICBGb3IgZXhhbXBsZSwgYSBiaW5hcnkKICMgZmlsZSBzaG91bGQgZ2V0IC1rYi4KIHN1YiBrb3B0c19mcm9tX3BhdGgKIHsKLQlteSAoJHBhdGgpID0gQF87CisgICAgbXkgKCRwYXRoLCAkc3JjVHlwZSwgJG5hbWUpID0gQF87CiAKLQkjIE9uY2UgaXQgZXhpc3RzLCB0aGUgZ2l0IGF0dHJpYnV0ZXMgc3lzdGVtIHNob3VsZCBiZSB1c2VkIHRvIGxvb2sgdXAKLQkjIHdoYXQgYXR0cmlidXRlcyBhcHBseSB0byB0aGlzIHBhdGguCi0KLQkjIFVudGlsIHRoZW4sIHRha2UgdGhlIHNldHRpbmcgZnJvbSB0aGUgY29uZmlnIGZpbGUKLSAgICB1bmxlc3MgKCBkZWZpbmVkICggJGNmZy0+e2dpdGN2c317YWxsYmluYXJ5fSApIGFuZCAkY2ZnLT57Z2l0Y3ZzfXthbGxiaW5hcnl9ID1+IC9eXHMqKDF8dHJ1ZXx5ZXMpXHMqJC9pICkKKyAgICBpZiAoIGRlZmluZWQgKCAkY2ZnLT57Z2l0Y3ZzfXt1c2VjcmxmYXR0cn0gKSBhbmQKKyAgICAgICAgICRjZmctPntnaXRjdnN9e3VzZWNybGZhdHRyfSA9fiAvXHMqKDF8dHJ1ZXx5ZXMpXHMqJC9pICkKICAgICB7Ci0JCSMgUmV0dXJuICIiIHRvIGdpdmUgbm8gc3BlY2lhbCB0cmVhdG1lbnQgdG8gYW55IHBhdGgKLQkJcmV0dXJuICIiOwotICAgIH0gZWxzZSB7Ci0JCSMgQWx0ZXJuYXRpdmVseSwgdG8gaGF2ZSBhbGwgZmlsZXMgdHJlYXRlZCBhcyBpZiB0aGV5IGFyZSBiaW5hcnkgKHdoaWNoCi0JCSMgaXMgbW9yZSBsaWtlIGdpdCBpdHNlbGYpLCBhbHdheXMgcmV0dXJuIHRoZSAiLWtiIiBvcHRpb24KLQkJcmV0dXJuICIta2IiOworICAgICAgICBteSAoJHZhbCkgPSBjaGVja19hdHRyKCAiY3JsZiIsICRwYXRoICk7CisgICAgICAgIGlmICggJHZhbCBlcSAic2V0IiApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAiIjsKKyAgICAgICAgfQorICAgICAgICBlbHNpZiAoICR2YWwgZXEgInVuc2V0IiApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAiLWtiIgorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgJGxvZy0+aW5mbygiVW5yZWNvZ25pemVkIGNoZWNrX2F0dHIgY3JsZiAkcGF0aCA6ICR2YWwiKTsKKyAgICAgICAgfQogICAgIH0KKworICAgIGlmICggZGVmaW5lZCAoICRjZmctPntnaXRjdnN9e2FsbGJpbmFyeX0gKSApCisgICAgeworICAgICAgICBpZiggKCRjZmctPntnaXRjdnN9e2FsbGJpbmFyeX0gPX4gL15ccyooMXx0cnVlfHllcylccyokL2kpICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICIta2IiOworICAgICAgICB9CisgICAgICAgIGVsc2lmKCAoJGNmZy0+e2dpdGN2c317YWxsYmluYXJ5fSA9fiAvXlxzKmd1ZXNzXHMqJC9pKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCAkc3JjVHlwZSBlcSAic2hhMU9yLWsiICYmCisgICAgICAgICAgICAgICAgIWRlZmluZWQoJG5hbWUpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBteSAoJHJldCk9JHN0YXRlLT57ZW50cmllc317JHBhdGh9e29wdGlvbnN9OworICAgICAgICAgICAgICAgIGlmKCAhZGVmaW5lZCgkcmV0KSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAkcmV0PSRzdGF0ZS0+e29wdH17a307CisgICAgICAgICAgICAgICAgICAgIGlmKGRlZmluZWQoJHJldCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICRyZXQ9Ii1rJHJldCI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAkcmV0PSIiOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmKCAhICgkcmV0PX4vXih8LWtifC1ra3Z8LWtrdmx8LWtrfC1rb3wta3YpJC8pICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ICJFIEJhZCAtayBvcHRpb25cbiI7CisgICAgICAgICAgICAgICAgICAgICRsb2ctPndhcm4oIkJhZCAtayBvcHRpb246ICRyZXQiKTsKKyAgICAgICAgICAgICAgICAgICAgZGllICJFcnJvcjogQmFkIC1rIG9wdGlvbjogJHJldFxuIjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gJHJldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggaXNfYmluYXJ5KCRzcmNUeXBlLCRuYW1lKSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAkbG9nLT5kZWJ1ZygiLi4uIGFzIGJpbmFyeSIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gIi1rYiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICRsb2ctPmRlYnVnKCIuLi4gYXMgdGV4dCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAjIFJldHVybiAiIiB0byBnaXZlIG5vIHNwZWNpYWwgdHJlYXRtZW50IHRvIGFueSBwYXRoCisgICAgcmV0dXJuICIiOworfQorCitzdWIgY2hlY2tfYXR0cgoreworICAgIG15ICgkYXR0ciwkcGF0aCkgPSBAXzsKKyAgICBlbnN1cmVXb3JrVHJlZSgpOworICAgIGlmICggb3BlbiBteSAkZmgsICctfCcsICJnaXQiLCAiY2hlY2stYXR0ciIsICRhdHRyLCAiLS0iLCAkcGF0aCApCisgICAgeworICAgICAgICBteSAkdmFsID0gPCRmaD47CisgICAgICAgIGNsb3NlICRmaDsKKyAgICAgICAgJHZhbCA9fiBzLy4qOiAoW146XHJcbl0qKVxzKiQvJDEvOworICAgICAgICByZXR1cm4gJHZhbDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHVuZGVmOworICAgIH0KK30KKworIyBUaGlzIHNob3VsZCBoYXZlIHRoZSBzYW1lIGhldXJpc3RpY3MgYXMgY29udmVydC5jOmlzX2JpbmFyeSgpIGFuZCByZWxhdGVkLgorIyBOb3RlIHRoYXQgdGhlIGJhcmUgQ1IgdGVzdCBpcyBkb25lIGJ5IGNhbGxlcnMgaW4gY29udmVydC5jLgorc3ViIGlzX2JpbmFyeQoreworICAgIG15ICgkc3JjVHlwZSwkbmFtZSkgPSBAXzsKKyAgICAkbG9nLT5kZWJ1ZygiaXNfYmluYXJ5KCRzcmNUeXBlLCRuYW1lKSIpOworCisgICAgIyBNaW5pbWl6ZSBhbW91bnQgb2YgaW50ZXJwcmV0ZWQgY29kZSBydW4gaW4gdGhlIGlubmVyIHBlci1jaGFyYWN0ZXIKKyAgICAjIGxvb3AgZm9yIGxhcmdlIGZpbGVzLCBieSB0b3RhbGxpbmcgZWFjaCBjaGFyYWN0ZXIgdmFsdWUgYW5kCisgICAgIyB0aGVuIGFuYWx5emluZyB0aGUgdG90YWxzLgorICAgIG15IEBjb3VudHM7CisgICAgbXkgJGk7CisgICAgZm9yKCRpPTA7JGk8MjU2OyRpKyspCisgICAgeworICAgICAgICAkY291bnRzWyRpXT0wOworICAgIH0KKworICAgIG15ICRmaCA9IG9wZW5fYmxvYl9vcl9kaWUoJHNyY1R5cGUsJG5hbWUpOworICAgIG15ICRsaW5lOworICAgIHdoaWxlKCBkZWZpbmVkKCRsaW5lPTwkZmg+KSApCisgICAgeworICAgICAgICAjIEFueSAnXDAnIGFuZCBiYXJlIENSIGFyZSBjb25zaWRlcmVkIGJpbmFyeS4KKyAgICAgICAgaWYoICRsaW5lID1+IC9cMHwoXHJbXlxuXSkvICkKKyAgICAgICAgeworICAgICAgICAgICAgY2xvc2UoJGZoKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisKKyAgICAgICAgIyBDb3VudCB1cCBlYWNoIGNoYXJhY3RlciBpbiB0aGUgbGluZToKKyAgICAgICAgbXkgJGxlbj1sZW5ndGgoJGxpbmUpOworICAgICAgICBmb3IoJGk9MDskaTwkbGVuOyRpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgICRjb3VudHNbb3JkKHN1YnN0cigkbGluZSwkaSwxKSldKys7CisgICAgICAgIH0KKyAgICB9CisgICAgY2xvc2UgJGZoOworCisgICAgIyBEb24ndCBjb3VudCBDUiBhbmQgTEYgYXMgZWl0aGVyIHByaW50YWJsZS9ub25wcmludGFibGUKKyAgICAkY291bnRzW29yZCgiXG4iKV09MDsKKyAgICAkY291bnRzW29yZCgiXHIiKV09MDsKKworICAgICMgQ2F0ZWdvcml6ZSBpbmRpdmlkdWFsIGNoYXJhY3RlciBjb3VudCBpbnRvIHByaW50YWJsZSBhbmQgbm9ucHJpbnRhYmxlOgorICAgIG15ICRwcmludGFibGU9MDsKKyAgICBteSAkbm9ucHJpbnRhYmxlPTA7CisgICAgZm9yKCRpPTA7JGk8MjU2OyRpKyspCisgICAgeworICAgICAgICBpZiggJGkgPCAzMiAmJgorICAgICAgICAgICAgJGkgIT0gb3JkKCJcYiIpICYmCisgICAgICAgICAgICAkaSAhPSBvcmQoIlx0IikgJiYKKyAgICAgICAgICAgICRpICE9IDAzMyAmJiAgICAgICAjIEVTQworICAgICAgICAgICAgJGkgIT0gMDE0ICkgICAgICAgICMgRkYKKyAgICAgICAgeworICAgICAgICAgICAgJG5vbnByaW50YWJsZSs9JGNvdW50c1skaV07CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoICRpPT0xMjcgKSAgIyBERUwKKyAgICAgICAgeworICAgICAgICAgICAgJG5vbnByaW50YWJsZSs9JGNvdW50c1skaV07CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAkcHJpbnRhYmxlKz0kY291bnRzWyRpXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAoJHByaW50YWJsZSA+PiA3KSA8ICRub25wcmludGFibGU7Cit9CisKKyMgUmV0dXJucyBvcGVuIGZpbGUgaGFuZGxlLiAgUG9zc2libGUgaW52b2NhdGlvbnM6CisjICAtIG9wZW5fYmxvYl9vcl9kaWUoImZpbGUiLCRmaWxlbmFtZSk7CisjICAtIG9wZW5fYmxvYl9vcl9kaWUoInNoYTEiLCRmaWxlaGFzaCk7CitzdWIgb3Blbl9ibG9iX29yX2RpZQoreworICAgIG15ICgkc3JjVHlwZSwkbmFtZSkgPSBAXzsKKyAgICBteSAoJGZoKTsKKyAgICBpZiggJHNyY1R5cGUgZXEgImZpbGUiICkKKyAgICB7CisgICAgICAgIGlmKCAhb3BlbiAkZmgsIjwiLCRuYW1lICkKKyAgICAgICAgeworICAgICAgICAgICAgJGxvZy0+d2FybigiVW5hYmxlIHRvIG9wZW4gZmlsZSAkbmFtZTogJCEiKTsKKyAgICAgICAgICAgIGRpZSAiVW5hYmxlIHRvIG9wZW4gZmlsZSAkbmFtZTogJCFcbiI7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzaWYoICRzcmNUeXBlIGVxICJzaGExIiB8fCAkc3JjVHlwZSBlcSAic2hhMU9yLWsiICkKKyAgICB7CisgICAgICAgIHVubGVzcyAoIGRlZmluZWQgKCAkbmFtZSApIGFuZCAkbmFtZSA9fiAvXlthLXpBLVowLTldezQwfSQvICkKKyAgICAgICAgeworICAgICAgICAgICAgJGxvZy0+d2FybigiTmVlZCBmaWxlaGFzaCIpOworICAgICAgICAgICAgZGllICJOZWVkIGZpbGVoYXNoXG4iOworICAgICAgICB9CisKKyAgICAgICAgbXkgJHR5cGUgPSBgZ2l0IGNhdC1maWxlIC10ICRuYW1lYDsKKyAgICAgICAgY2hvbXAgJHR5cGU7CisKKyAgICAgICAgdW5sZXNzICggZGVmaW5lZCAoICR0eXBlICkgYW5kICR0eXBlIGVxICJibG9iIiApCisgICAgICAgIHsKKyAgICAgICAgICAgICRsb2ctPndhcm4oIkludmFsaWQgdHlwZSAnJHR5cGUnIGZvciAnJG5hbWUnIik7CisgICAgICAgICAgICBkaWUgKCAiSW52YWxpZCB0eXBlICckdHlwZScgKGV4cGVjdGVkICdibG9iJykiICkKKyAgICAgICAgfQorCisgICAgICAgIG15ICRzaXplID0gYGdpdCBjYXQtZmlsZSAtcyAkbmFtZWA7CisgICAgICAgIGNob21wICRzaXplOworCisgICAgICAgICRsb2ctPmRlYnVnKCJvcGVuX2Jsb2Jfb3JfZGllKCRuYW1lKSBzaXplPSRzaXplLCB0eXBlPSR0eXBlIik7CisKKyAgICAgICAgdW5sZXNzKCBvcGVuICRmaCwgJy18JywgImdpdCIsICJjYXQtZmlsZSIsICJibG9iIiwgJG5hbWUgKQorICAgICAgICB7CisgICAgICAgICAgICAkbG9nLT53YXJuKCJVbmFibGUgdG8gb3BlbiBzaGExICRuYW1lIik7CisgICAgICAgICAgICBkaWUgIlVuYWJsZSB0byBvcGVuIHNoYTEgJG5hbWVcbiI7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgJGxvZy0+d2FybigiVW5rbm93biB0eXBlIG9mIGJsb2Igc291cmNlOiAkc3JjVHlwZSIpOworICAgICAgICBkaWUgIlVua25vd24gdHlwZSBvZiBibG9iIHNvdXJjZTogJHNyY1R5cGVcbiI7CisgICAgfQorICAgIHJldHVybiAkZmg7CiB9CiAKICMgR2VuZXJhdGUgYSBDVlMgYXV0aG9yIG5hbWUgZnJvbSBHaXQgYXV0aG9yIGluZm9ybWF0aW9uLCBieSB0YWtpbmcKZGlmZiAtLWdpdCBhL2dpdC1maWx0ZXItYnJhbmNoLnNoIGIvZ2l0LWZpbHRlci1icmFuY2guc2gKaW5kZXggZDg0NmNkOS4uZDA0YzM0NiAxMDA3NTUKLS0tIGEvZ2l0LWZpbHRlci1icmFuY2guc2gKKysrIGIvZ2l0LWZpbHRlci1icmFuY2guc2gKQEAgLTQwNiw4ICs0MDYsMjIgQEAKIAkJZWNobyAiJHJlZiAtPiAkbmV3X3JlZiAoJHNoYTEgLT4gJG5ld19zaGExKSIKIAogCQlpZiBbICIkdHlwZSIgPSAidGFnIiBdOyB0aGVuCi0JCQkjIFdhcm4gdGhhdCB3ZSBhcmUgbm90IHJld3JpdGluZyB0aGUgdGFnIG9iamVjdCBpdHNlbGYuCi0JCQl3YXJuICJ1bnJlZmVyZW5jaW5nIHRhZyBvYmplY3QgJHNoYTF0IgorCQkJbmV3X3NoYTE9JChnaXQgY2F0LWZpbGUgdGFnICIkcmVmIiB8CisJCQkJc2VkIC1uIFwKKwkJCQkgICAgLWUgIjEsL14kL3sKKwkJCQkJICBzL15vYmplY3QgLiovb2JqZWN0ICRuZXdfc2hhMS8KKwkJCQkJICBzL150eXBlIC4qL3R5cGUgY29tbWl0LworCQkJCQkgIHMvXnRhZyAuKi90YWcgJG5ld19yZWYvCisJCQkJCX0iIFwKKwkJCQkgICAgLWUgJy9eLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0vcScgXAorCQkJCSAgICAtZSAncCcgfAorCQkJCWdpdCBta3RhZykgfHwKKwkJCQlkaWUgIkNvdWxkIG5vdCBjcmVhdGUgbmV3IHRhZyBvYmplY3QgZm9yICRyZWYiCisJCQlpZiBnaXQgY2F0LWZpbGUgdGFnICIkcmVmIiB8IFwKKwkJCSAgIGdyZXAgJ14tLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLScgPi9kZXYvbnVsbCAyPiYxCisJCQl0aGVuCisJCQkJd2FybiAiZ3BnIHNpZ25hdHVyZSBzdHJpcHBlZCBmcm9tIHRhZyBvYmplY3QgJHNoYTF0IgorCQkJZmkKIAkJZmkKIAogCQlnaXQgdXBkYXRlLXJlZiAicmVmcy90YWdzLyRuZXdfcmVmIiAiJG5ld19zaGExIiB8fApAQCAtNDIxLDExICs0MzUsMTcgQEAKIHRyYXAgLSAwCiAKIHVuc2V0IEdJVF9ESVIgR0lUX1dPUktfVFJFRSBHSVRfSU5ERVhfRklMRQotdGVzdCAteiAiJE9SSUdfR0lUX0RJUiIgfHwgR0lUX0RJUj0iJE9SSUdfR0lUX0RJUiIgJiYgZXhwb3J0IEdJVF9ESVIKLXRlc3QgLXogIiRPUklHX0dJVF9XT1JLX1RSRUUiIHx8IEdJVF9XT1JLX1RSRUU9IiRPUklHX0dJVF9XT1JLX1RSRUUiICYmCit0ZXN0IC16ICIkT1JJR19HSVRfRElSIiB8fCB7CisJR0lUX0RJUj0iJE9SSUdfR0lUX0RJUiIgJiYgZXhwb3J0IEdJVF9ESVIKK30KK3Rlc3QgLXogIiRPUklHX0dJVF9XT1JLX1RSRUUiIHx8IHsKKwlHSVRfV09SS19UUkVFPSIkT1JJR19HSVRfV09SS19UUkVFIiAmJgogCWV4cG9ydCBHSVRfV09SS19UUkVFCi10ZXN0IC16ICIkT1JJR19HSVRfSU5ERVhfRklMRSIgfHwgR0lUX0lOREVYX0ZJTEU9IiRPUklHX0dJVF9JTkRFWF9GSUxFIiAmJgorfQordGVzdCAteiAiJE9SSUdfR0lUX0lOREVYX0ZJTEUiIHx8IHsKKwlHSVRfSU5ERVhfRklMRT0iJE9SSUdfR0lUX0lOREVYX0ZJTEUiICYmCiAJZXhwb3J0IEdJVF9JTkRFWF9GSUxFCit9CiBnaXQgcmVhZC10cmVlIC11IC1tIEhFQUQKIAogZXhpdCAkcmV0CmRpZmYgLS1naXQgYS9naXQtZ3VpL2dpdC1ndWkuc2ggYi9naXQtZ3VpL2dpdC1ndWkuc2gKaW5kZXggN2MyNWJiOS4uZTZlODg5MCAxMDA3NTUKLS0tIGEvZ2l0LWd1aS9naXQtZ3VpLnNoCisrKyBiL2dpdC1ndWkvZ2l0LWd1aS5zaApAQCAtMTIyLDYgKzEyMiwxNCBAQAogc2V0IF9pc2N5Z3dpbiB7fQogc2V0IF9zZWFyY2hfcGF0aCB7fQogCitzZXQgX3RyYWNlIFtsc2VhcmNoIC1leGFjdCAkYXJndiAtLXRyYWNlXQoraWYgeyRfdHJhY2UgPj0gMH0geworCXNldCBhcmd2IFtscmVwbGFjZSAkYXJndiAkX3RyYWNlICRfdHJhY2VdCisJc2V0IF90cmFjZSAxCit9IGVsc2UgeworCXNldCBfdHJhY2UgMAorfQorCiBwcm9jIGFwcG5hbWUge30gewogCWdsb2JhbCBfYXBwbmFtZQogCXJldHVybiAkX2FwcG5hbWUKQEAgLTI0NSw2ICsyNTMsMjEgQEAKICMjCiAjIyBoYW5keSB1dGlscwogCitwcm9jIF90cmFjZV9leGVjIHtjbWR9IHsKKwlpZiB7ISQ6Ol90cmFjZX0gcmV0dXJuCisJc2V0IGQge30KKwlmb3JlYWNoIHYgJGNtZCB7CisJCWlmIHskZCBuZSB7fX0geworCQkJYXBwZW5kIGQgeyB9CisJCX0KKwkJaWYge1tyZWdleHAge1sgXHRcclxuJyIkPypdfSAkdl19IHsKKwkJCXNldCB2IFtzcSAkdl0KKwkJfQorCQlhcHBlbmQgZCAkdgorCX0KKwlwdXRzIHN0ZGVyciAkZAorfQorCiBwcm9jIF9naXRfY21kIHtuYW1lfSB7CiAJZ2xvYmFsIF9naXRfY21kX3BhdGgKIApAQCAtMzM5LDcgKzM2Miw3IEBACiB9CiAKIHByb2MgZ2l0IHthcmdzfSB7Ci0Jc2V0IG9wdCBbbGlzdCBleGVjXQorCXNldCBvcHQgW2xpc3RdCiAKIAl3aGlsZSB7MX0gewogCQlzd2l0Y2ggLS0gW2xpbmRleCAkYXJncyAwXSB7CkBAIC0zNTksMTIgKzM4MiwxOCBAQAogCXNldCBjbWRwIFtfZ2l0X2NtZCBbbGluZGV4ICRhcmdzIDBdXQogCXNldCBhcmdzIFtscmFuZ2UgJGFyZ3MgMSBlbmRdCiAKLQlyZXR1cm4gW2V2YWwgJG9wdCAkY21kcCAkYXJnc10KKwlfdHJhY2VfZXhlYyBbY29uY2F0ICRvcHQgJGNtZHAgJGFyZ3NdCisJc2V0IHJlc3VsdCBbZXZhbCBleGVjICRvcHQgJGNtZHAgJGFyZ3NdCisJaWYgeyQ6Ol90cmFjZX0geworCQlwdXRzIHN0ZGVyciAiPCAkcmVzdWx0IgorCX0KKwlyZXR1cm4gJHJlc3VsdAogfQogCiBwcm9jIF9vcGVuX3N0ZG91dF9zdGRlcnIge2NtZH0geworCV90cmFjZV9leGVjICRjbWQKIAlpZiB7W2NhdGNoIHsKLQkJCXNldCBmZCBbb3BlbiAkY21kIHJdCisJCQlzZXQgZmQgW29wZW4gW2NvbmNhdCBbbGlzdCB8IF0gJGNtZF0gcl0KIAkJfSBlcnJdfSB7CiAJCWlmIHsgICBbbGluZGV4ICRjbWQgZW5kXSBlcSB7Mj5AMX0KIAkJICAgICYmICRlcnIgZXEge2NhbiBub3QgZmluZCBjaGFubmVsIG5hbWVkICIxIn0KQEAgLTM3NSw2ICs0MDQsNyBAQAogCQkJIyB0byB0cnkgdG8gc3RhcnQgaXQgYSBzZWNvbmQgdGltZS4KIAkJCSMKIAkJCXNldCBmZCBbb3BlbiBbY29uY2F0IFwKKwkJCQlbbGlzdCB8IF0gXAogCQkJCVtscmFuZ2UgJGNtZCAwIGVuZC0xXSBcCiAJCQkJW2xpc3QgfCYgY2F0XSBcCiAJCQkJXSByXQpAQCAtMzg3LDcgKzQxNyw3IEBACiB9CiAKIHByb2MgZ2l0X3JlYWQge2FyZ3N9IHsKLQlzZXQgb3B0IFtsaXN0IHxdCisJc2V0IG9wdCBbbGlzdF0KIAogCXdoaWxlIHsxfSB7CiAJCXN3aXRjaCAtLSBbbGluZGV4ICRhcmdzIDBdIHsKQEAgLTQxNSw3ICs0NDUsNyBAQAogfQogCiBwcm9jIGdpdF93cml0ZSB7YXJnc30gewotCXNldCBvcHQgW2xpc3QgfF0KKwlzZXQgb3B0IFtsaXN0XQogCiAJd2hpbGUgezF9IHsKIAkJc3dpdGNoIC0tIFtsaW5kZXggJGFyZ3MgMF0gewpAQCAtNDM1LDcgKzQ2NSw4IEBACiAJc2V0IGNtZHAgW19naXRfY21kIFtsaW5kZXggJGFyZ3MgMF1dCiAJc2V0IGFyZ3MgW2xyYW5nZSAkYXJncyAxIGVuZF0KIAotCXJldHVybiBbb3BlbiBbY29uY2F0ICRvcHQgJGNtZHAgJGFyZ3NdIHddCisJX3RyYWNlX2V4ZWMgW2NvbmNhdCAkb3B0ICRjbWRwICRhcmdzXQorCXJldHVybiBbb3BlbiBbY29uY2F0IFtsaXN0IHwgXSAkb3B0ICRjbWRwICRhcmdzXSB3XQogfQogCiBwcm9jIGdpdGhvb2tfcmVhZCB7aG9va19uYW1lIGFyZ3N9IHsKQEAgLTQ1NSwxMiArNDg2LDEyIEBACiAJCX0KIAogCQlzZXQgc2NyIHtpZiB0ZXN0IC14ICIkMSI7dGhlbiBleGVjICIkQCI7Zml9Ci0JCXNldCBzaF9jIFtsaXN0IHwgJGludGVycCAtYyAkc2NyICRpbnRlcnAgJHBjaG9va10KKwkJc2V0IHNoX2MgW2xpc3QgJGludGVycCAtYyAkc2NyICRpbnRlcnAgJHBjaG9va10KIAkJcmV0dXJuIFtfb3Blbl9zdGRvdXRfc3RkZXJyIFtjb25jYXQgJHNoX2MgJGFyZ3NdXQogCX0KIAogCWlmIHtbZmlsZSBleGVjdXRhYmxlICRwY2hvb2tdfSB7Ci0JCXJldHVybiBbX29wZW5fc3Rkb3V0X3N0ZGVyciBbY29uY2F0IFtsaXN0IHwgJHBjaG9va10gJGFyZ3NdXQorCQlyZXR1cm4gW19vcGVuX3N0ZG91dF9zdGRlcnIgW2NvbmNhdCBbbGlzdCAkcGNob29rXSAkYXJnc11dCiAJfQogCiAJcmV0dXJuIHt9CkBAIC02MDEsNiArNjMyLDcgQEAKIAl9CiB9CiAKK3NldCBkZWZhdWx0X2NvbmZpZyhicmFuY2guYXV0b3NldHVwbWVyZ2UpIHRydWUKIHNldCBkZWZhdWx0X2NvbmZpZyhtZXJnZS5kaWZmc3RhdCkgdHJ1ZQogc2V0IGRlZmF1bHRfY29uZmlnKG1lcmdlLnN1bW1hcnkpIGZhbHNlCiBzZXQgZGVmYXVsdF9jb25maWcobWVyZ2UudmVyYm9zaXR5KSAyCkBAIC0xMDk1LDI3ICsxMTI3LDE4IEBACiB9CiAKIGlmIHtbaXNfQ3lnd2luXX0gewotCXNldCBpc19naXRfaW5mb19saW5rIHt9CiAJc2V0IGlzX2dpdF9pbmZvX2V4Y2x1ZGUge30KIAlwcm9jIGhhdmVfaW5mb19leGNsdWRlIHt9IHsKLQkJZ2xvYmFsIGlzX2dpdF9pbmZvX2xpbmsgaXNfZ2l0X2luZm9fZXhjbHVkZQorCQlnbG9iYWwgaXNfZ2l0X2luZm9fZXhjbHVkZQogCi0JCWlmIHskaXNfZ2l0X2luZm9fbGluayBlcSB7fX0gewotCQkJc2V0IGlzX2dpdF9pbmZvX2xpbmsgW2ZpbGUgaXNmaWxlIFtnaXRkaXIgaW5mby5sbmtdXQotCQl9Ci0KLQkJaWYgeyRpc19naXRfaW5mb19saW5rfSB7Ci0JCQlpZiB7JGlzX2dpdF9pbmZvX2V4Y2x1ZGUgZXEge319IHsKLQkJCQlpZiB7W2NhdGNoIHtleGVjIHRlc3QgLWYgW2dpdGRpciBpbmZvIGV4Y2x1ZGVdfV19IHsKLQkJCQkJc2V0IGlzX2dpdF9pbmZvX2V4Y2x1ZGUgMAotCQkJCX0gZWxzZSB7Ci0JCQkJCXNldCBpc19naXRfaW5mb19leGNsdWRlIDEKLQkJCQl9CisJCWlmIHskaXNfZ2l0X2luZm9fZXhjbHVkZSBlcSB7fX0geworCQkJaWYge1tjYXRjaCB7ZXhlYyB0ZXN0IC1mIFtnaXRkaXIgaW5mbyBleGNsdWRlXX1dfSB7CisJCQkJc2V0IGlzX2dpdF9pbmZvX2V4Y2x1ZGUgMAorCQkJfSBlbHNlIHsKKwkJCQlzZXQgaXNfZ2l0X2luZm9fZXhjbHVkZSAxCiAJCQl9Ci0JCQlyZXR1cm4gJGlzX2dpdF9pbmZvX2V4Y2x1ZGUKLQkJfSBlbHNlIHsKLQkJCXJldHVybiBbZmlsZSByZWFkYWJsZSBbZ2l0ZGlyIGluZm8gZXhjbHVkZV1dCiAJCX0KKwkJcmV0dXJuICRpc19naXRfaW5mb19leGNsdWRlCiAJfQogfSBlbHNlIHsKIAlwcm9jIGhhdmVfaW5mb19leGNsdWRlIHt9IHsKZGlmZiAtLWdpdCBhL2dpdC1ndWkvbGliL2JyYW5jaF9jcmVhdGUudGNsIGIvZ2l0LWd1aS9saWIvYnJhbmNoX2NyZWF0ZS50Y2wKaW5kZXggNTNkZmI0Yy4uMzgxNzc3MSAxMDA2NDQKLS0tIGEvZ2l0LWd1aS9saWIvYnJhbmNoX2NyZWF0ZS50Y2wKKysrIGIvZ2l0LWd1aS9saWIvYnJhbmNoX2NyZWF0ZS50Y2wKQEAgLTE4Myw2ICsxODMsOSBAQAogCWlmIHskc3BlYyBuZSB7fSAmJiAkb3B0X2ZldGNofSB7CiAJCSRjbyBlbmFibGVfZmV0Y2ggJHNwZWMKIAl9CisJaWYgeyRzcGVjIG5lIHt9fSB7CisJCSRjbyByZW1vdGVfc291cmNlICRzcGVjCisJfQogCiAJaWYge1skY28gcnVuXX0gewogCQlkZXN0cm95ICR3CmRpZmYgLS1naXQgYS9naXQtZ3VpL2xpYi9icmFuY2hfZGVsZXRlLnRjbCBiL2dpdC1ndWkvbGliL2JyYW5jaF9kZWxldGUudGNsCmluZGV4IDg2YzRmNzMuLmVmMTkzMGIgMTAwNjQ0Ci0tLSBhL2dpdC1ndWkvbGliL2JyYW5jaF9kZWxldGUudGNsCisrKyBiL2dpdC1ndWkvbGliL2JyYW5jaF9kZWxldGUudGNsCkBAIC0xMjcsNyArMTI3LDcgQEAKIAlmb3JlYWNoIGkgJHRvX2RlbGV0ZSB7CiAJCXNldCBiIFtsaW5kZXggJGkgMF0KIAkJc2V0IG8gW2xpbmRleCAkaSAxXQotCQlpZiB7W2NhdGNoIHtnaXQgdXBkYXRlLXJlZiAtZCAicmVmcy9oZWFkcy8kYiIgJG99IGVycl19IHsKKwkJaWYge1tjYXRjaCB7Z2l0IGJyYW5jaCAtRCAkYn0gZXJyXX0gewogCQkJYXBwZW5kIGZhaWxlZCAiIC0gJGI6ICRlcnJcbiIKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2dpdC1ndWkvbGliL2NoZWNrb3V0X29wLnRjbCBiL2dpdC1ndWkvbGliL2NoZWNrb3V0X29wLnRjbAppbmRleCA2ZTE0MTE3Li5jYWNhODg4IDEwMDY0NAotLS0gYS9naXQtZ3VpL2xpYi9jaGVja291dF9vcC50Y2wKKysrIGIvZ2l0LWd1aS9saWIvY2hlY2tvdXRfb3AudGNsCkBAIC0xNiw2ICsxNiw3IEBACiBmaWVsZCBmZXRjaF9zcGVjICAge307ICMgcmVmZXRjaCB0cmFja2luZyBicmFuY2ggaWYgdXNlZD8KIGZpZWxkIGNoZWNrb3V0ICAgICAgMTsgIyBhY3R1YWxseSBjaGVja291dCB0aGUgYnJhbmNoPwogZmllbGQgY3JlYXRlICAgICAgICAwOyAjIGNyZWF0ZSB0aGUgYnJhbmNoIGlmIGl0IGRvZXNuJ3QgZXhpc3Q/CitmaWVsZCByZW1vdGVfc291cmNlIHt9OyAjIHNhbWUgYXMgZmV0Y2hfc3BlYywgdG8gc2V0dXAgdHJhY2tpbmcKIAogZmllbGQgcmVzZXRfb2sgICAgICAwOyAjIGRpZCB0aGUgdXNlciBhZ3JlZSB0byByZXNldD8KIGZpZWxkIGZldGNoX29rICAgICAgMDsgIyBkaWQgdGhlIGZldGNoIHN1Y2NlZWQ/CkBAIC00NCw2ICs0NSwxMCBAQAogCXNldCBmZXRjaF9zcGVjICRzcGVjCiB9CiAKK21ldGhvZCByZW1vdGVfc291cmNlIHtzcGVjfSB7CisJc2V0IHJlbW90ZV9zb3VyY2UgJHNwZWMKK30KKwogbWV0aG9kIGVuYWJsZV9jaGVja291dCB7Y299IHsKIAlzZXQgY2hlY2tvdXQgJGNvCiB9CkBAIC0xNDUsNyArMTUwLDcgQEAKIH0KIAogbWV0aG9kIF91cGRhdGVfcmVmIHt9IHsKLQlnbG9iYWwgbnVsbF9zaGExIGN1cnJlbnRfYnJhbmNoCisJZ2xvYmFsIG51bGxfc2hhMSBjdXJyZW50X2JyYW5jaCByZXBvX2NvbmZpZwogCiAJc2V0IHJlZiAkbmV3X3JlZgogCXNldCBuZXcgJG5ld19oYXNoCkBAIC0xNzIsNiArMTc3LDIzIEBACiAKIAkJc2V0IHJlZmxvZ19tc2cgImJyYW5jaDogQ3JlYXRlZCBmcm9tICRuZXdfZXhwciIKIAkJc2V0IGN1ciAkbnVsbF9zaGExCisKKwkJaWYgeygkcmVwb19jb25maWcoYnJhbmNoLmF1dG9zZXR1cG1lcmdlKSBlcSB7dHJ1ZX0KKwkJCXx8ICRyZXBvX2NvbmZpZyhicmFuY2guYXV0b3NldHVwbWVyZ2UpIGVxIHthbHdheXN9KQorCQkJJiYgJHJlbW90ZV9zb3VyY2UgbmUge30KKwkJCSYmICJyZWZzL2hlYWRzLyRuZXdicmFuY2giIGVxICRyZWZ9IHsKKworCQkJc2V0IGNfcmVtb3RlIFtsaW5kZXggJHJlbW90ZV9zb3VyY2UgMV0KKwkJCXNldCBjX21lcmdlIFtsaW5kZXggJHJlbW90ZV9zb3VyY2UgMl0KKwkJCWlmIHtbY2F0Y2ggeworCQkJCQlnaXQgY29uZmlnIGJyYW5jaC4kbmV3YnJhbmNoLnJlbW90ZSAkY19yZW1vdGUKKwkJCQkJZ2l0IGNvbmZpZyBicmFuY2guJG5ld2JyYW5jaC5tZXJnZSAgJGNfbWVyZ2UKKwkJCQl9IGVycl19IHsKKwkJCQlfZXJyb3IgJHRoaXMgW3N0cmNhdCBcCisJCQkJW21jICJGYWlsZWQgdG8gY29uZmlndXJlIHNpbXBsaWZpZWQgZ2l0LXB1bGwgZm9yICclcycuIiAkbmV3YnJhbmNoXSBcCisJCQkJIlxuXG4kZXJyIl0KKwkJCX0KKwkJfQogCX0gZWxzZWlmIHskY3JlYXRlICYmICRtZXJnZV90eXBlIGVxIHtub25lfX0gewogCQkjIFdlIHdlcmUgdG9sZCB0byBjcmVhdGUgaXQsIGJ1dCBub3QgZG8gYSBtZXJnZS4KIAkJIyBCYWQuICBOYW1lIHNob3VsZG4ndCBoYXZlIGV4aXN0ZWQuCmRpZmYgLS1naXQgYS9naXQtZ3VpL2xpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2wgYi9naXQtZ3VpL2xpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2wKaW5kZXggYWU0YTRjZC4uMzE4MDc4NiAxMDA2NDQKLS0tIGEvZ2l0LWd1aS9saWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsCisrKyBiL2dpdC1ndWkvbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbApAQCAtMzg4LDkgKzM4OCw3IEBACiAJCS1jb21tYW5kIFtjYiBfbmV3X2xvY2FsX3BhdGhdCiAJc2V0IHdfbG9jYWxwYXRoICR3X2JvZHkud2hlcmUudAogCi0JcGFjayAkd19ib2R5LndoZXJlLmIgLXNpZGUgcmlnaHQKLQlwYWNrICR3X2JvZHkud2hlcmUubCAtc2lkZSBsZWZ0Ci0JcGFjayAkd19ib2R5LndoZXJlLnQgLWZpbGwgeAorCWdyaWQgJHdfYm9keS53aGVyZS5sICR3X2JvZHkud2hlcmUudCAkd19ib2R5LndoZXJlLmIgLXN0aWNreSBldwogCXBhY2sgJHdfYm9keS53aGVyZSAtZmlsbCB4CiAKIAl0cmFjZSBhZGQgdmFyaWFibGUgQGxvY2FsX3BhdGggd3JpdGUgW2NiIF93cml0ZV9sb2NhbF9wYXRoXQpAQCAtOTg3LDkgKzk4NSw3IEBACiAJCS10ZXh0IFttYyAiQnJvd3NlIl0gXAogCQktY29tbWFuZCBbY2IgX29wZW5fbG9jYWxfcGF0aF0KIAotCXBhY2sgJHdfYm9keS53aGVyZS5iIC1zaWRlIHJpZ2h0Ci0JcGFjayAkd19ib2R5LndoZXJlLmwgLXNpZGUgbGVmdAotCXBhY2sgJHdfYm9keS53aGVyZS50IC1maWxsIHgKKwlncmlkICR3X2JvZHkud2hlcmUubCAkd19ib2R5LndoZXJlLnQgJHdfYm9keS53aGVyZS5iIC1zdGlja3kgZXcKIAlwYWNrICR3X2JvZHkud2hlcmUgLWZpbGwgeAogCiAJdHJhY2UgYWRkIHZhcmlhYmxlIEBsb2NhbF9wYXRoIHdyaXRlIFtjYiBfd3JpdGVfbG9jYWxfcGF0aF0KZGlmZiAtLWdpdCBhL2dpdC1ndWkvbGliL2RhdGFiYXNlLnRjbCBiL2dpdC1ndWkvbGliL2RhdGFiYXNlLnRjbAppbmRleCBkNjZhYTNmLi5hMThhYzhiIDEwMDY0NAotLS0gYS9naXQtZ3VpL2xpYi9kYXRhYmFzZS50Y2wKKysrIGIvZ2l0LWd1aS9saWIvZGF0YWJhc2UudGNsCkBAIC0xMDIsOCArMTAyLDggQEAKIAkJKl1dCiAKIAlpZiB7JG9iamVjdHNfY3VycmVudCA+PSAkb2JqZWN0X2xpbWl0fSB7Ci0JCXNldCBvYmplY3RzX2N1cnJlbnQgW2V4cHIgeyRvYmplY3RzX2N1cnJlbnQgKiAyNTZ9XQotCQlzZXQgb2JqZWN0X2xpbWl0ICAgIFtleHByIHskb2JqZWN0X2xpbWl0ICAgICogMjU2fV0KKwkJc2V0IG9iamVjdHNfY3VycmVudCBbZXhwciB7JG9iamVjdHNfY3VycmVudCAqIDI1MH1dCisJCXNldCBvYmplY3RfbGltaXQgICAgW2V4cHIgeyRvYmplY3RfbGltaXQgICAgKiAyNTB9XQogCQlpZiB7W2Fza19wb3B1cCBcCiAJCQlbbWMgIlRoaXMgcmVwb3NpdG9yeSBjdXJyZW50bHkgaGFzIGFwcHJveGltYXRlbHkgJWkgbG9vc2Ugb2JqZWN0cy4KIApkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9saWIvc3BlbGxjaGVjay50Y2wgYi9naXQtZ3VpL2xpYi9zcGVsbGNoZWNrLnRjbAppbmRleCA5YmU3NDg2Li43OGYzNDRmIDEwMDY0NAotLS0gYS9naXQtZ3VpL2xpYi9zcGVsbGNoZWNrLnRjbAorKysgYi9naXQtZ3VpL2xpYi9zcGVsbGNoZWNrLnRjbApAQCAtODQsMTMgKzg0LDE5IEBACiAJcmVnZXhwIFwKIAkJe0ludGVybmF0aW9uYWwgSXNwZWxsIFZlcnNpb24gLiogXChidXQgcmVhbGx5IChBc3BlbGwgLio/KVwpJH0gXAogCQkkc192ZXJzaW9uIF9qdW5rIHNfdmVyc2lvbgorCXJlZ2V4cCB7XkFzcGVsbCAoXGQpK1wuKFxkKyl9ICRzX3ZlcnNpb24gX2p1bmsgbWFqb3IgbWlub3IKIAogCXB1dHMgJHBpcGVfZmQgISAgICAgICAgICAgICA7ICMgZW5hYmxlIHRlcnNlIG1vZGUKLQlwdXRzICRwaXBlX2ZkIHskJGNyIG1hc3Rlcn0gOyAjIGZldGNoIHRoZSBsYW5ndWFnZQotCWZsdXNoICRwaXBlX2ZkCiAKLQlnZXRzICRwaXBlX2ZkIHNfbGFuZwotCXJlZ2V4cCB7Wy9cXF0oW14vXFxdKylcLlteXC5dKyR9ICRzX2xhbmcgXyBzX2xhbmcKKwkjIGZldGNoIHRoZSBsYW5ndWFnZQorCWlmIHskbWFqb3IgPiAwIHx8ICgkbWFqb3IgPT0gMCAmJiAkbWlub3IgPj0gNjApfSB7CisJCXB1dHMgJHBpcGVfZmQgeyQkY3IgbWFzdGVyfQorCQlmbHVzaCAkcGlwZV9mZAorCQlnZXRzICRwaXBlX2ZkIHNfbGFuZworCQlyZWdleHAge1svXFxdKFteL1xcXSspXC5bXlwuXSskfSAkc19sYW5nIF8gc19sYW5nCisJfSBlbHNlIHsKKwkJc2V0IHNfbGFuZyB7fQorCX0KIAogCWlmIHskOjpkZWZhdWx0X2NvbmZpZyhndWkuc3BlbGxpbmdkaWN0aW9uYXJ5KSBlcSB7fQogCSAmJiBbZ2V0X2NvbmZpZyBndWkuc3BlbGxpbmdkaWN0aW9uYXJ5XSBlcSB7fX0gewpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9wby9kZS5wbyBiL2dpdC1ndWkvcG8vZGUucG8KaW5kZXggMDIyYjgxNi4uZjIwOTU1YyAxMDA2NDQKLS0tIGEvZ2l0LWd1aS9wby9kZS5wbworKysgYi9naXQtZ3VpL3BvL2RlLnBvCkBAIC04LDcgKzgsNyBAQAogIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0LWd1aVxuIgogIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKICJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwOC0wMy0xNCAwNzoxOCswMTAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAwOC0wMi0xNiAyMTo1MiswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwOC0wNS0wMSAxMTo1MSswMjAwXG4iCiAiTGFzdC1UcmFuc2xhdG9yOiBDaHJpc3RpYW4gU3RpbW1pbmcgPHN0aW1taW5nQHR1aGguZGU+XG4iCiAiTGFuZ3VhZ2UtVGVhbTogR2VybWFuXG4iCiAiTUlNRS1WZXJzaW9uOiAxLjBcbiIKQEAgLTE3NTQsOSArMTc1NCw4IEBACiBtc2dzdHIgIkFuemFobCBkZXIgS29udGV4dHplaWxlbiBiZWltIFZlcmdsZWljaCIKIAogIzogbGliL29wdGlvbi50Y2w6MTI3Ci0jLCBmdXp6eQogbXNnaWQgIkNvbW1pdCBNZXNzYWdlIFRleHQgV2lkdGgiCi1tc2dzdHIgIlZlcnNpb25zYmVzY2hyZWlidW5nOiIKK21zZ3N0ciAiVGV4dGJyZWl0ZSBkZXIgVmVyc2lvbnNiZXNjaHJlaWJ1bmciCiAKICM6IGxpYi9vcHRpb24udGNsOjEyOAogbXNnaWQgIk5ldyBCcmFuY2ggTmFtZSBUZW1wbGF0ZSIKQEAgLTE4OTUsNDAgKzE4OTQsMzYgQEAKIAogIzogbGliL3NwZWxsY2hlY2sudGNsOjU3CiBtc2dpZCAiVW5zdXBwb3J0ZWQgc3BlbGwgY2hlY2tlciIKLW1zZ3N0ciAiIgorbXNnc3RyICJSZWNodHNjaHJlaWJwcsO8ZnVuZ3Nwcm9ncmFtbSBuaWNodCB1bnRlcnN0w7x0enQiCiAKICM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2NQotIywgZnV6enkKIG1zZ2lkICJTcGVsbCBjaGVja2luZyBpcyB1bmF2YWlsYWJsZSIKLW1zZ3N0ciAiUmVjaHRzY2hyZWlicHLDvGZ1bmcgZmVobGdlc2NobGFnZW4iCittc2dzdHIgIlJlY2h0c2NocmVpYnByw7xmdW5nIG5pY2h0IHZlcmbDvGdiYXIiCiAKICM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2OAogbXNnaWQgIkludmFsaWQgc3BlbGwgY2hlY2tpbmcgY29uZmlndXJhdGlvbiIKLW1zZ3N0ciAiIgorbXNnc3RyICJVbmJlbnV0emJhcmUgS29uZmlndXJhdGlvbiBkZXIgUmVjaHRzY2hyZWlicHLDvGZ1bmciCiAKICM6IGxpYi9zcGVsbGNoZWNrLnRjbDo3MAogIywgdGNsLWZvcm1hdAogbXNnaWQgIlJldmVydGluZyBkaWN0aW9uYXJ5IHRvICVzLiIKLW1zZ3N0ciAiIgorbXNnc3RyICJXw7ZydGVyYnVjaCBhdWYgJXMgenVyw7xja2dlc2V0enQuIgogCiAjOiBsaWIvc3BlbGxjaGVjay50Y2w6NzMKLSMsIGZ1enp5CiBtc2dpZCAiU3BlbGwgY2hlY2tlciBzaWxlbnRseSBmYWlsZWQgb24gc3RhcnR1cCIKLW1zZ3N0ciAiUmVjaHRzY2hyZWlicHLDvGZ1bmcgZmVobGdlc2NobGFnZW4iCittc2dzdHIgIlJlY2h0c2NocmVpYnByw7xmdW5nc3Byb2dyYW1tIG1pdCBGZWhsZXIgYWJnZWJyb2NoZW4iCiAKICM6IGxpYi9zcGVsbGNoZWNrLnRjbDo4MAotIywgZnV6enkKIG1zZ2lkICJVbnJlY29nbml6ZWQgc3BlbGwgY2hlY2tlciIKLW1zZ3N0ciAiVW5iZWthbm50ZSBWZXJzaW9uIHZvbiDCu2FzcGVsbMKrIgorbXNnc3RyICJVbmJla2FubnRlcyBSZWNodHNjaHJlaWJwcsO8ZnVuZ3Nwcm9ncmFtbSIKIAogIzogbGliL3NwZWxsY2hlY2sudGNsOjE4MAogbXNnaWQgIk5vIFN1Z2dlc3Rpb25zIgogbXNnc3RyICJLZWluZSBWb3JzY2hsw6RnZSIKIAogIzogbGliL3NwZWxsY2hlY2sudGNsOjM4MQotIywgZnV6enkKIG1zZ2lkICJVbmV4cGVjdGVkIEVPRiBmcm9tIHNwZWxsIGNoZWNrZXIiCi1tc2dzdHIgIlVuZXJ3YXJ0ZXRlcyBFT0Ygdm9uIMK7YXNwZWxswqsiCittc2dzdHIgIlVuZXJ3YXJ0ZXRlcyBFT0Ygdm9tIFJlY2h0c2NocmVpYnByw7xmdW5nc3Byb2dyYW1tIgogCiAjOiBsaWIvc3BlbGxjaGVjay50Y2w6Mzg1CiBtc2dpZCAiU3BlbGwgQ2hlY2tlciBGYWlsZWQiCkBAIC0yMDAyLDYgKzE5OTcsMyBAQAogIzogbGliL3RyYW5zcG9ydC50Y2w6MTY4CiBtc2dpZCAiSW5jbHVkZSB0YWdzIgogbXNnc3RyICJNaXQgTWFya2llcnVuZ2VuIMO8YmVydHJhZ2VuIgotCi0jfiBtc2dpZCAiTm90IGNvbm5lY3RlZCB0byBhc3BlbGwiCi0jfiBtc2dzdHIgIktlaW5lIFZlcmJpbmR1bmcgenUgwrthc3BlbGzCqyIKZGlmZiAtLWdpdCBhL2dpdC1pbnN0YXdlYi5zaCBiL2dpdC1pbnN0YXdlYi5zaAppbmRleCA2ZjkxYzhmLi5hZjBmZGU1IDEwMDc1NQotLS0gYS9naXQtaW5zdGF3ZWIuc2gKKysrIGIvZ2l0LWluc3Rhd2ViLnNoCkBAIC0yMiwxMCArMjIsMTAgQEAKIC4gZ2l0LXNoLXNldHVwCiAKIGZxZ2l0ZGlyPSIkR0lUX0RJUiIKLWxvY2FsPSJgZ2l0IGNvbmZpZyAtLWJvb2wgLS1nZXQgaW5zdGF3ZWIubG9jYWxgIgotaHR0cGQ9ImBnaXQgY29uZmlnIC0tZ2V0IGluc3Rhd2ViLmh0dHBkYCIKLXBvcnQ9YGdpdCBjb25maWcgLS1nZXQgaW5zdGF3ZWIucG9ydGAKLW1vZHVsZV9wYXRoPSJgZ2l0IGNvbmZpZyAtLWdldCBpbnN0YXdlYi5tb2R1bGVwYXRoYCIKK2xvY2FsPSIkKGdpdCBjb25maWcgLS1ib29sIC0tZ2V0IGluc3Rhd2ViLmxvY2FsKSIKK2h0dHBkPSIkKGdpdCBjb25maWcgLS1nZXQgaW5zdGF3ZWIuaHR0cGQpIgorcG9ydD0kKGdpdCBjb25maWcgLS1nZXQgaW5zdGF3ZWIucG9ydCkKK21vZHVsZV9wYXRoPSIkKGdpdCBjb25maWcgLS1nZXQgaW5zdGF3ZWIubW9kdWxlcGF0aCkiCiAKIGNvbmY9IiRHSVRfRElSL2dpdHdlYi9odHRwZC5jb25mIgogCkBAIC0zNywxMSArMzcsMjEgQEAKICMgYW55IHVudGFrZW4gbG9jYWwgcG9ydCB3aWxsIGRvLi4uCiB0ZXN0IC16ICIkcG9ydCIgJiYgcG9ydD0xMjM0CiAKLXN0YXJ0X2h0dHBkICgpIHsKLQlodHRwZF9vbmx5PSJgZWNobyAkaHR0cGQgfCBjdXQgLWYxIC1kJyAnYCIKK3Jlc29sdmVfZnVsbF9odHRwZCAoKSB7CisJY2FzZSAiJGh0dHBkIiBpbgorCSphcGFjaGUyKnwqbGlnaHR0cGQqKQorCQkjIGVuc3VyZSB0aGF0IHRoZSBhcGFjaGUyL2xpZ2h0dHBkIGNvbW1hbmQgZW5kcyB3aXRoICItZiIKKwkJaWYgISBlY2hvICIkaHR0cGQiIHwgZ3JlcCAtLSAnLWYgKiQnID4vZGV2L251bGwgMj4mMQorCQl0aGVuCisJCQlodHRwZD0iJGh0dHBkIC1mIgorCQlmaQorCQk7OworCWVzYWMKKworCWh0dHBkX29ubHk9IiQoZWNobyAkaHR0cGQgfCBjdXQgLWYxIC1kJyAnKSIKIAlpZiBjYXNlICIkaHR0cGRfb25seSIgaW4gLyopIDogOzsgKikgd2hpY2ggJGh0dHBkX29ubHkgPi9kZXYvbnVsbDs7IGVzYWMKIAl0aGVuCi0JCSRodHRwZCAiJGZxZ2l0ZGlyL2dpdHdlYi9odHRwZC5jb25mIgorCQlmdWxsX2h0dHBkPSRodHRwZAogCWVsc2UKIAkJIyBtYW55IGh0dHBkcyBhcmUgaW5zdGFsbGVkIGluIC91c3Ivc2JpbiBvciAvdXNyL2xvY2FsL3NiaW4KIAkJIyB0aGVzZSBkYXlzIGFuZCB0aG9zZSBhcmUgbm90IGluIG1vc3QgdXNlcnMgJFBBVEhzCkBAIC01MSwxNiArNjEsMjMgQEAKIAkJZG8KIAkJCWlmIHRlc3QgLXggIiRpLyRodHRwZF9vbmx5IgogCQkJdGhlbgotCQkJCSMgZG9uJ3QgcXVvdGUgJGh0dHBkLCB0aGVyZSBjYW4gYmUKLQkJCQkjIGFyZ3VtZW50cyB0byBpdCAoLWYpCi0JCQkJJGkvJGh0dHBkICIkZnFnaXRkaXIvZ2l0d2ViL2h0dHBkLmNvbmYiCisJCQkJZnVsbF9odHRwZD0kaS8kaHR0cGQKIAkJCQlyZXR1cm4KIAkJCWZpCiAJCWRvbmUKLQkJZWNobyAiJGh0dHBkX29ubHkgbm90IGZvdW5kLiBJbnN0YWxsICRodHRwZF9vbmx5IG9yIHVzZSIgXAotCQkgICAgICItLWh0dHBkIHRvIHNwZWNpZnkgYW5vdGhlciBodHRwIGRhZW1vbi4iCisKKwkJZWNobyA+JjIgIiRodHRwZF9vbmx5IG5vdCBmb3VuZC4gSW5zdGFsbCAkaHR0cGRfb25seSBvciB1c2UiIFwKKwkJICAgICAiLS1odHRwZCB0byBzcGVjaWZ5IGFub3RoZXIgaHR0cGQgZGFlbW9uLiIKIAkJZXhpdCAxCiAJZmkKK30KKworc3RhcnRfaHR0cGQgKCkgeworCSMgaGVyZSAkaHR0cGQgc2hvdWxkIGhhdmUgYSBtZWFuaW5nZnVsIHZhbHVlCisJcmVzb2x2ZV9mdWxsX2h0dHBkCisKKwkjIGRvbid0IHF1b3RlICRmdWxsX2h0dHBkLCB0aGVyZSBjYW4gYmUgYXJndW1lbnRzIHRvIGl0ICgtZikKKwkkZnVsbF9odHRwZCAiJGZxZ2l0ZGlyL2dpdHdlYi9odHRwZC5jb25mIgogCWlmIHRlc3QgJD8gIT0gMDsgdGhlbgogCQllY2hvICJDb3VsZCBub3QgZXhlY3V0ZSBodHRwIGRhZW1vbiAkaHR0cGQuIgogCQlleGl0IDEKQEAgLTY4LDcgKzg1LDcgQEAKIH0KIAogc3RvcF9odHRwZCAoKSB7Ci0JdGVzdCAtZiAiJGZxZ2l0ZGlyL3BpZCIgJiYga2lsbCBgY2F0ICIkZnFnaXRkaXIvcGlkImAKKwl0ZXN0IC1mICIkZnFnaXRkaXIvcGlkIiAmJiBraWxsICQoY2F0ICIkZnFnaXRkaXIvcGlkIikKIH0KIAogd2hpbGUgdGVzdCAkIyAhPSAwCkBAIC0xMTYsNyArMTMzLDcgQEAKIGRvbmUKIAogbWtkaXIgLXAgIiRHSVRfRElSL2dpdHdlYi90bXAiCi1HSVRfRVhFQ19QQVRIPSJgZ2l0IC0tZXhlYy1wYXRoYCIKK0dJVF9FWEVDX1BBVEg9IiQoZ2l0IC0tZXhlYy1wYXRoKSIKIEdJVF9ESVI9IiRmcWdpdGRpciIKIGV4cG9ydCBHSVRfRVhFQ19QQVRIIEdJVF9ESVIKIApAQCAtMjE1LDcgKzIzMiw4IEBACiBFT0YKIAllbHNlCiAJCSMgcGxhaW4tb2xkIENHSQotCQlsaXN0X21vZHM9YGVjaG8gIiRodHRwZCIgfCBzZWQgInMvLWYkLy1sLyJgCisJCXJlc29sdmVfZnVsbF9odHRwZAorCQlsaXN0X21vZHM9JChlY2hvICIkZnVsbF9odHRwZCIgfCBzZWQgInMvLWYkLy1sLyIpCiAJCSRsaXN0X21vZHMgfCBncmVwICdtb2RfY2dpXC5jJyA+L2Rldi9udWxsIDI+JjEgfHwgXAogCQllY2hvICJMb2FkTW9kdWxlIGNnaV9tb2R1bGUgJG1vZHVsZV9wYXRoL21vZF9jZ2kuc28iID4+ICIkY29uZiIKIAkJY2F0ID4+ICIkY29uZiIgPDxFT0YKZGlmZiAtLWdpdCBhL2dpdC1tZXJnZS5zaCBiL2dpdC1tZXJnZS5zaAppbmRleCA3ZGJiYjFkLi44MDI2Y2NmIDEwMDc1NQotLS0gYS9naXQtbWVyZ2Uuc2gKKysrIGIvZ2l0LW1lcmdlLnNoCkBAIC04LDEwICs4LDEyIEBACiBnaXQtbWVyZ2UgW29wdGlvbnNdIDxyZW1vdGU+Li4uCiBnaXQtbWVyZ2UgW29wdGlvbnNdIDxtc2c+IEhFQUQgPHJlbW90ZT4KIC0tCi1zdW1tYXJ5ICAgICAgICAgICAgICBzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UKLW4sbm8tc3VtbWFyeSAgICAgICAgIGRvbid0IHNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZQorc3RhdCAgICAgICAgICAgICAgICAgc2hvdyBhIGRpZmZzdGF0IGF0IHRoZSBlbmQgb2YgdGhlIG1lcmdlCituICAgICAgICAgICAgICAgICAgICBkb24ndCBzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UKK3N1bW1hcnkgICAgICAgICAgICAgIChzeW5vbnltIHRvIC0tc3RhdCkKK2xvZyAgICAgICAgICAgICAgICAgIGFkZCBsaXN0IG9mIG9uZS1saW5lIGxvZyB0byBtZXJnZSBjb21taXQgbWVzc2FnZQogc3F1YXNoICAgICAgICAgICAgICAgY3JlYXRlIGEgc2luZ2xlIGNvbW1pdCBpbnN0ZWFkIG9mIGRvaW5nIGEgbWVyZ2UKLWNvbW1pdCAgICAgICAgICAgICAgIHBlcmZvcm0gYSBjb21taXQgaWYgdGhlIG1lcmdlIHN1Y2Vzc2VzIChkZWZhdWx0KQorY29tbWl0ICAgICAgICAgICAgICAgcGVyZm9ybSBhIGNvbW1pdCBpZiB0aGUgbWVyZ2Ugc3VjY2VlZHMgKGRlZmF1bHQpCiBmZiAgICAgICAgICAgICAgICAgICBhbGxvdyBmYXN0IGZvcndhcmQgKGRlZmF1bHQpCiBzLHN0cmF0ZWd5PSAgICAgICAgICBtZXJnZSBzdHJhdGVneSB0byB1c2UKIG0sbWVzc2FnZT0gICAgICAgICAgIG1lc3NhZ2UgdG8gYmUgdXNlZCBmb3IgdGhlIG1lcmdlIGNvbW1pdCAoaWYgYW55KQpAQCAtMzcsNyArMzksNyBAQAogCiBhbGxvd19mYXN0X2ZvcndhcmQ9dAogYWxsb3dfdHJpdmlhbF9tZXJnZT10Ci1zcXVhc2g9IG5vX2NvbW1pdD0KK3NxdWFzaD0gbm9fY29tbWl0PSBsb2dfYXJnPQogCiBkcm9wc2F2ZSgpIHsKIAlybSAtZiAtLSAiJEdJVF9ESVIvTUVSR0VfSEVBRCIgIiRHSVRfRElSL01FUkdFX01TRyIgXApAQCAtMTQ4LDEwICsxNTAsMTIgQEAKIHBhcnNlX2NvbmZpZyAoKSB7CiAJd2hpbGUgdGVzdCAkIyAhPSAwOyBkbwogCQljYXNlICIkMSIgaW4KLQkJLW58LS1uby1zdW1tYXJ5KQorCQktbnwtLW5vLXN0YXR8LS1uby1zdW1tYXJ5KQogCQkJc2hvd19kaWZmc3RhdD1mYWxzZSA7OwotCQktLXN1bW1hcnkpCisJCS0tc3RhdHwtLXN1bW1hcnkpCiAJCQlzaG93X2RpZmZzdGF0PXQgOzsKKwkJLS1sb2d8LS1uby1sb2cpCisJCQlsb2dfYXJnPSQxIDs7CiAJCS0tc3F1YXNoKQogCQkJdGVzdCAiJGFsbG93X2Zhc3RfZm9yd2FyZCIgPSB0IHx8CiAJCQkJZGllICJZb3UgY2Fubm90IGNvbWJpbmUgLS1zcXVhc2ggd2l0aCAtLW5vLWZmLiIKQEAgLTIxMCw2ICsyMTQsNyBAQAogCiBpZiB0ZXN0IC16ICIkc2hvd19kaWZmc3RhdCI7IHRoZW4KICAgICB0ZXN0ICIkKGdpdCBjb25maWcgLS1ib29sIG1lcmdlLmRpZmZzdGF0KSIgPSBmYWxzZSAmJiBzaG93X2RpZmZzdGF0PWZhbHNlCisgICAgdGVzdCAiJChnaXQgY29uZmlnIC0tYm9vbCBtZXJnZS5zdGF0KSIgPSBmYWxzZSAmJiBzaG93X2RpZmZzdGF0PWZhbHNlCiAgICAgdGVzdCAteiAiJHNob3dfZGlmZnN0YXQiICYmIHNob3dfZGlmZnN0YXQ9dAogZmkKIApAQCAtMjU4LDcgKzI2Myw3IEBACiAJbWVyZ2VfbmFtZT0kKGZvciByZW1vdGUKIAkJZG8KIAkJCW1lcmdlX25hbWUgIiRyZW1vdGUiCi0JCWRvbmUgfCBnaXQgZm10LW1lcmdlLW1zZworCQlkb25lIHwgZ2l0IGZtdC1tZXJnZS1tc2cgJGxvZ19hcmcKIAkpCiAJbWVyZ2VfbXNnPSIke21lcmdlX21zZzorJG1lcmdlX21zZyRMRiRMRn0kbWVyZ2VfbmFtZSIKIGZpCmRpZmYgLS1naXQgYS9naXQtbWVyZ2V0b29sLnNoIGIvZ2l0LW1lcmdldG9vbC5zaAppbmRleCA1Yzg2ZjY5Li5mY2RlYzRhIDEwMDc1NQotLS0gYS9naXQtbWVyZ2V0b29sLnNoCisrKyBiL2dpdC1tZXJnZXRvb2wuc2gKQEAgLTIzNyw5ICsyMzcsOSBAQAogCWVjbWVyZ2UpCiAJICAgIHRvdWNoICIkQkFDS1VQIgogCSAgICBpZiBiYXNlX3ByZXNlbnQ7IHRoZW4KLQkJIiRtZXJnZV90b29sX3BhdGgiICIkQkFTRSIgIiRMT0NBTCIgIiRSRU1PVEUiIC0tbW9kZT1tZXJnZTMgLS10bz0iJE1FUkdFRCIKKwkJIiRtZXJnZV90b29sX3BhdGgiICIkQkFTRSIgIiRMT0NBTCIgIiRSRU1PVEUiIC0tZGVmYXVsdCAtLW1vZGU9bWVyZ2UzIC0tdG89IiRNRVJHRUQiCiAJICAgIGVsc2UKLQkJIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIiAtLW1vZGU9bWVyZ2UyIC0tdG89IiRNRVJHRUQiCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiAiJExPQ0FMIiAiJFJFTU9URSIgLS1kZWZhdWx0IC0tbW9kZT1tZXJnZTIgLS10bz0iJE1FUkdFRCIKIAkgICAgZmkKIAkgICAgY2hlY2tfdW5jaGFuZ2VkCiAJICAgIDs7CmRpZmYgLS1naXQgYS9naXQtcHVsbC5zaCBiL2dpdC1wdWxsLnNoCmluZGV4IDNjZTMyYjUuLjgwOWU1MzcgMTAwNzU1Ci0tLSBhL2dpdC1wdWxsLnNoCisrKyBiL2dpdC1wdWxsLnNoCkBAIC00LDcgKzQsNyBAQAogIwogIyBGZXRjaCBvbmUgb3IgbW9yZSByZW1vdGUgcmVmcyBhbmQgbWVyZ2UgaXQvdGhlbSBpbnRvIHRoZSBjdXJyZW50IEhFQUQuCiAKLVVTQUdFPSdbLW4gfCAtLW5vLXN1bW1hcnldIFstLVtuby1dY29tbWl0XSBbLS1bbm8tXXNxdWFzaF0gWy0tW25vLV1mZl0gWy1zIHN0cmF0ZWd5XS4uLiBbPGZldGNoLW9wdGlvbnM+XSA8cmVwbz4gPGhlYWQ+Li4uJworVVNBR0U9J1stbiB8IC0tbm8tc3RhdF0gWy0tW25vLV1jb21taXRdIFstLVtuby1dc3F1YXNoXSBbLS1bbm8tXWZmXSBbLXMgc3RyYXRlZ3ldLi4uIFs8ZmV0Y2gtb3B0aW9ucz5dIDxyZXBvPiA8aGVhZD4uLi4nCiBMT05HX1VTQUdFPSdGZXRjaCBvbmUgb3IgbW9yZSByZW1vdGUgcmVmcyBhbmQgbWVyZ2UgaXQvdGhlbSBpbnRvIHRoZSBjdXJyZW50IEhFQUQuJwogU1VCRElSRUNUT1JZX09LPVllcwogT1BUSU9OU19TUEVDPQpAQCAtMTYsMTkgKzE2LDE5IEBACiB0ZXN0IC16ICIkKGdpdCBscy1maWxlcyAtdSkiIHx8CiAJZGllICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjb25mbGljdGVkIG1lcmdlLiIKIAotc3RyYXRlZ3lfYXJncz0gbm9fc3VtbWFyeT0gbm9fY29tbWl0PSBzcXVhc2g9IG5vX2ZmPQorc3RyYXRlZ3lfYXJncz0gbm9fc3RhdD0gbm9fY29tbWl0PSBzcXVhc2g9IG5vX2ZmPSBsb2dfYXJnPQogY3Vycl9icmFuY2g9JChnaXQgc3ltYm9saWMtcmVmIC1xIEhFQUQpCiBjdXJyX2JyYW5jaF9zaG9ydD0kKGVjaG8gIiRjdXJyX2JyYW5jaCIgfCBzZWQgInN8cmVmcy9oZWFkcy98fCIpCiByZWJhc2U9JChnaXQgY29uZmlnIC0tYm9vbCBicmFuY2guJGN1cnJfYnJhbmNoX3Nob3J0LnJlYmFzZSkKIHdoaWxlIDoKIGRvCiAJY2FzZSAiJDEiIGluCi0JLW58LS1ufC0tbm98LS1uby18LS1uby1zfC0tbm8tc3V8LS1uby1zdW18LS1uby1zdW1tfFwKLQkJLS1uby1zdW1tYXwtLW5vLXN1bW1hcnwtLW5vLXN1bW1hcnkpCi0JCW5vX3N1bW1hcnk9LW4gOzsKLQktLXN1bW1hcnkpCi0JCW5vX3N1bW1hcnk9JDEKLQkJOzsKKwktbnwtLW5vLXN0YXR8LS1uby1zdW1tYXJ5KQorCQlub19zdGF0PS1uIDs7CisJLS1zdGF0fC0tc3VtbWFyeSkKKwkJbm9fc3RhdD0kMSA7OworCS0tbG9nfC0tbm8tbG9nKQorCQlsb2dfYXJnPSQxIDs7CiAJLS1uby1jfC0tbm8tY298LS1uby1jb218LS1uby1jb21tfC0tbm8tY29tbWl8LS1uby1jb21taXQpCiAJCW5vX2NvbW1pdD0tLW5vLWNvbW1pdCA7OwogCS0tY3wtLWNvfC0tY29tfC0tY29tbXwtLWNvbW1pfC0tY29tbWl0KQpAQCAtMTA3LDYgKzEwNywxMSBAQAogfQogCiB0ZXN0IHRydWUgPSAiJHJlYmFzZSIgJiYgeworCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCAmJgorCWdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIC0tcXVpZXQgSEVBRCAtLSB8fAorCWRpZSAicmVmdXNpbmcgdG8gcHVsbCB3aXRoIHJlYmFzZTogeW91ciB3b3JraW5nIHRyZWUgaXMgbm90IHVwLXRvLWRhdGUiCisKIAkuIGdpdC1wYXJzZS1yZW1vdGUgJiYKIAlvcmlnaW49IiQxIgogCXRlc3QgLXogIiRvcmlnaW4iICYmIG9yaWdpbj0kKGdldF9kZWZhdWx0X3JlbW90ZSkKQEAgLTE3Miw5ICsxNzcsOSBAQAogCWV4aXQKIGZpCiAKLW1lcmdlX25hbWU9JChnaXQgZm10LW1lcmdlLW1zZyA8IiRHSVRfRElSL0ZFVENIX0hFQUQiKSB8fCBleGl0CittZXJnZV9uYW1lPSQoZ2l0IGZtdC1tZXJnZS1tc2cgJGxvZ19hcmcgPCIkR0lUX0RJUi9GRVRDSF9IRUFEIikgfHwgZXhpdAogdGVzdCB0cnVlID0gIiRyZWJhc2UiICYmCiAJZXhlYyBnaXQtcmViYXNlICRzdHJhdGVneV9hcmdzIC0tb250byAkbWVyZ2VfaGVhZCBcCiAJJHtvbGRyZW1vdGVyZWY6LSRtZXJnZV9oZWFkfQotZXhlYyBnaXQtbWVyZ2UgJG5vX3N1bW1hcnkgJG5vX2NvbW1pdCAkc3F1YXNoICRub19mZiAkc3RyYXRlZ3lfYXJncyBcCitleGVjIGdpdC1tZXJnZSAkbm9fc3RhdCAkbm9fY29tbWl0ICRzcXVhc2ggJG5vX2ZmICRsb2dfYXJnICRzdHJhdGVneV9hcmdzIFwKIAkiJG1lcmdlX25hbWUiIEhFQUQgJG1lcmdlX2hlYWQKZGlmZiAtLWdpdCBhL2dpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoIGIvZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2gKaW5kZXggOGFhNzM3MS4uZTNmNjViZCAxMDA3NTUKLS0tIGEvZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2gKKysrIGIvZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2gKQEAgLTU2LDkgKzU2LDkgQEAKIHJlcXVpcmVfY2xlYW5fd29ya190cmVlICgpIHsKIAkjIHRlc3QgaWYgd29ya2luZyB0cmVlIGlzIGRpcnR5CiAJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID4gL2Rldi9udWxsICYmCi0JZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKLQlnaXQgZGlmZi1maWxlcyAtLXF1aWV0ICYmCi0JZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLS1xdWlldCBIRUFEIC0tIHx8CisJZ2l0IHVwZGF0ZS1pbmRleCAtLWlnbm9yZS1zdWJtb2R1bGVzIC0tcmVmcmVzaCAmJgorCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgLS1pZ25vcmUtc3VibW9kdWxlcyAmJgorCWdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIC0tcXVpZXQgSEVBRCAtLWlnbm9yZS1zdWJtb2R1bGVzIC0tIHx8CiAJZGllICJXb3JraW5nIHRyZWUgaXMgZGlydHkiCiB9CiAKQEAgLTE2Miw2ICsxNjIsOCBAQAogCQkJCW5ld19wYXJlbnRzPSIkbmV3X3BhcmVudHMgJG5ld19wIgogCQkJCTs7CiAJCQllc2FjCisJCWVsc2UKKwkJCW5ld19wYXJlbnRzPSIkbmV3X3BhcmVudHMgJHAiCiAJCWZpCiAJZG9uZQogCWNhc2UgJGZhc3RfZm9yd2FyZCBpbgpAQCAtMzc3LDExICszNzksMTIgQEAKIAkJIyBTYW5pdHkgY2hlY2sKIAkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID4vZGV2L251bGwgfHwKIAkJCWRpZSAiQ2Fubm90IHJlYWQgSEVBRCIKLQkJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYgZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCB8fAorCQlnaXQgdXBkYXRlLWluZGV4IC0taWdub3JlLXN1Ym1vZHVsZXMgLS1yZWZyZXNoICYmCisJCQlnaXQgZGlmZi1maWxlcyAtLXF1aWV0IC0taWdub3JlLXN1Ym1vZHVsZXMgfHwKIAkJCWRpZSAiV29ya2luZyB0cmVlIGlzIGRpcnR5IgogCiAJCSMgZG8gd2UgaGF2ZSBhbnl0aGluZyB0byBjb21taXQ/Ci0JCWlmIGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIC0tcXVpZXQgSEVBRCAtLQorCQlpZiBnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtLXF1aWV0IC0taWdub3JlLXN1Ym1vZHVsZXMgSEVBRCAtLQogCQl0aGVuCiAJCQk6IE5vdGhpbmcgdG8gY29tbWl0IC0tIHNraXAgdGhpcwogCQllbHNlCkBAIC00NzQsNiArNDc3LDkgQEAKIAogCQlyZXF1aXJlX2NsZWFuX3dvcmtfdHJlZQogCisJCVVQU1RSRUFNPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJDEiKSB8fCBkaWUgIkludmFsaWQgYmFzZSIKKwkJdGVzdCAteiAiJE9OVE8iICYmIE9OVE89JFVQU1RSRUFNCisKIAkJaWYgdGVzdCAhIC16ICIkMiIKIAkJdGhlbgogCQkJb3V0cHV0IGdpdCBzaG93LXJlZiAtLXZlcmlmeSAtLXF1aWV0ICJyZWZzL2hlYWRzLyQyIiB8fApAQCAtNDgzLDEyICs0ODksOCBAQAogCQlmaQogCiAJCUhFQUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIHx8IGRpZSAiTm8gSEVBRD8iCi0JCVVQU1RSRUFNPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJDEiKSB8fCBkaWUgIkludmFsaWQgYmFzZSIKLQogCQlta2RpciAiJERPVEVTVCIgfHwgZGllICJDb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSAkRE9URVNUIgogCi0JCXRlc3QgLXogIiRPTlRPIiAmJiBPTlRPPSRVUFNUUkVBTQotCiAJCTogPiAiJERPVEVTVCIvaW50ZXJhY3RpdmUgfHwgZGllICJDb3VsZCBub3QgbWFyayBhcyBpbnRlcmFjdGl2ZSIKIAkJZ2l0IHN5bWJvbGljLXJlZiBIRUFEID4gIiRET1RFU1QiL2hlYWQtbmFtZSAyPiAvZGV2L251bGwgfHwKIAkJCWVjaG8gImRldGFjaGVkIEhFQUQiID4gIiRET1RFU1QiL2hlYWQtbmFtZQpAQCAtNTMwLDkgKzUzMiw5IEBACiAjIFJlYmFzZSAkU0hPUlRVUFNUUkVBTS4uJFNIT1JUSEVBRCBvbnRvICRTSE9SVE9OVE8KICMKICMgQ29tbWFuZHM6Ci0jICBwaWNrID0gdXNlIGNvbW1pdAotIyAgZWRpdCA9IHVzZSBjb21taXQsIGJ1dCBzdG9wIGZvciBhbWVuZGluZwotIyAgc3F1YXNoID0gdXNlIGNvbW1pdCwgYnV0IG1lbGQgaW50byBwcmV2aW91cyBjb21taXQKKyMgIHAsIHBpY2sgPSB1c2UgY29tbWl0CisjICBlLCBlZGl0ID0gdXNlIGNvbW1pdCwgYnV0IHN0b3AgZm9yIGFtZW5kaW5nCisjICBzLCBzcXVhc2ggPSB1c2UgY29tbWl0LCBidXQgbWVsZCBpbnRvIHByZXZpb3VzIGNvbW1pdAogIwogIyBJZiB5b3UgcmVtb3ZlIGEgbGluZSBoZXJlIFRIQVQgQ09NTUlUIFdJTEwgQkUgTE9TVC4KICMgSG93ZXZlciwgaWYgeW91IHJlbW92ZSBldmVyeXRoaW5nLCB0aGUgcmViYXNlIHdpbGwgYmUgYWJvcnRlZC4KZGlmZiAtLWdpdCBhL2dpdC1yZWJhc2Uuc2ggYi9naXQtcmViYXNlLnNoCmluZGV4IDYwYzQ1OGYuLmUyZDg1ZWUgMTAwNzU1Ci0tLSBhL2dpdC1yZWJhc2Uuc2gKKysrIGIvZ2l0LXJlYmFzZS5zaApAQCAtNjAsNyArNjAsNyBAQAogCWZpCiAKIAljbXQ9YGNhdCAiJGRvdGVzdC9jdXJyZW50ImAKLQlpZiAhIGdpdCBkaWZmLWluZGV4IC0tcXVpZXQgSEVBRCAtLQorCWlmICEgZ2l0IGRpZmYtaW5kZXggLS1xdWlldCAtLWlnbm9yZS1zdWJtb2R1bGVzIEhFQUQgLS0KIAl0aGVuCiAJCWlmICEgZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeSAtQyAiJGNtdCIKIAkJdGhlbgpAQCAtMTUwLDcgKzE1MCwxMCBAQAogZG8KIAljYXNlICIkMSIgaW4KIAktLWNvbnRpbnVlKQotCQlnaXQgZGlmZi1maWxlcyAtLXF1aWV0IHx8IHsKKwkJdGVzdCAtZCAiJGRvdGVzdCIgLW8gLWQgLmRvdGVzdCB8fAorCQkJZGllICJObyByZWJhc2UgaW4gcHJvZ3Jlc3M/IgorCisJCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgLS1pZ25vcmUtc3VibW9kdWxlcyB8fCB7CiAJCQllY2hvICJZb3UgbXVzdCBlZGl0IGFsbCBtZXJnZSBjb25mbGljdHMgYW5kIHRoZW4iCiAJCQllY2hvICJtYXJrIHRoZW0gYXMgcmVzb2x2ZWQgdXNpbmcgZ2l0IGFkZCIKIAkJCWV4aXQgMQpAQCAtMTc4LDYgKzE4MSw5IEBACiAJCWV4aXQKIAkJOzsKIAktLXNraXApCisJCXRlc3QgLWQgIiRkb3Rlc3QiIC1vIC1kIC5kb3Rlc3QgfHwKKwkJCWRpZSAiTm8gcmViYXNlIGluIHByb2dyZXNzPyIKKwogCQlnaXQgcmVzZXQgLS1oYXJkIEhFQUQgfHwgZXhpdCAkPwogCQlpZiB0ZXN0IC1kICIkZG90ZXN0IgogCQl0aGVuCkBAIC0yMDMsMTggKzIwOSwxOCBAQAogCQlleGl0CiAJCTs7CiAJLS1hYm9ydCkKKwkJdGVzdCAtZCAiJGRvdGVzdCIgLW8gLWQgLmRvdGVzdCB8fAorCQkJZGllICJObyByZWJhc2UgaW4gcHJvZ3Jlc3M/IgorCiAJCWdpdCByZXJlcmUgY2xlYXIKIAkJaWYgdGVzdCAtZCAiJGRvdGVzdCIKIAkJdGhlbgogCQkJbW92ZV90b19vcmlnaW5hbF9icmFuY2gKLQkJZWxpZiB0ZXN0IC1kIC5kb3Rlc3QKLQkJdGhlbgorCQllbHNlCiAJCQlkb3Rlc3Q9LmRvdGVzdAogCQkJbW92ZV90b19vcmlnaW5hbF9icmFuY2gKLQkJZWxzZQotCQkJZGllICJObyByZWJhc2UgaW4gcHJvZ3Jlc3M/IgogCQlmaQotCQlnaXQgcmVzZXQgLS1oYXJkICQoY2F0ICRkb3Rlc3Qvb3JpZy1oZWFkKQorCQlnaXQgcmVzZXQgLS1oYXJkICQoY2F0ICIkZG90ZXN0L29yaWctaGVhZCIpCiAJCXJtIC1yICIkZG90ZXN0IgogCQlleGl0CiAJCTs7CkBAIC0yODIsOCArMjg4LDggQEAKIGZpCiAKICMgVGhlIHRyZWUgbXVzdCBiZSByZWFsbHkgcmVhbGx5IGNsZWFuLgotZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggfHwgZXhpdAotZGlmZj0kKGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIC0tbmFtZS1zdGF0dXMgLXIgSEVBRCAtLSkKK2dpdCB1cGRhdGUtaW5kZXggLS1pZ25vcmUtc3VibW9kdWxlcyAtLXJlZnJlc2ggfHwgZXhpdAorZGlmZj0kKGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIC0tbmFtZS1zdGF0dXMgLXIgLS1pZ25vcmUtc3VibW9kdWxlcyBIRUFEIC0tKQogY2FzZSAiJGRpZmYiIGluCiA/KikJZWNobyAiY2Fubm90IHJlYmFzZTogeW91ciBpbmRleCBpcyBub3QgdXAtdG8tZGF0ZSIKIAllY2hvICIkZGlmZiIKQEAgLTMwOSwyMiArMzE1LDQyIEBACiAJfQogZmkKIAotIyBJZiB0aGUgYnJhbmNoIHRvIHJlYmFzZSBpcyBnaXZlbiwgZmlyc3Qgc3dpdGNoIHRvIGl0LgorIyBJZiB0aGUgYnJhbmNoIHRvIHJlYmFzZSBpcyBnaXZlbiwgdGhhdCBpcyB0aGUgYnJhbmNoIHdlIHdpbGwgcmViYXNlCisjICRicmFuY2hfbmFtZSAtLSBicmFuY2ggYmVpbmcgcmViYXNlZCwgb3IgSEVBRCAoYWxyZWFkeSBkZXRhY2hlZCkKKyMgJG9yaWdfaGVhZCAtLSBjb21taXQgb2JqZWN0IG5hbWUgb2YgdGlwIG9mIHRoZSBicmFuY2ggYmVmb3JlIHJlYmFzaW5nCisjICRoZWFkX25hbWUgLS0gcmVmcy9oZWFkcy88dGhhdC1icmFuY2g+IG9yICJkZXRhY2hlZCBIRUFEIgorc3dpdGNoX3RvPQogY2FzZSAiJCMiIGluCiAyKQorCSMgSXMgaXQgInJlYmFzZSBvdGhlciAkYnJhbmNobmFtZSIgb3IgInJlYmFzZSBvdGhlciAkY29tbWl0Ij8KIAlicmFuY2hfbmFtZT0iJDIiCi0JZ2l0LWNoZWNrb3V0ICIkMiIgfHwgdXNhZ2UKLQk7OwotKikKLQlpZiBicmFuY2hfbmFtZT1gZ2l0IHN5bWJvbGljLXJlZiAtcSBIRUFEYAorCXN3aXRjaF90bz0iJDIiCisKKwlpZiBnaXQgc2hvdy1yZWYgLS12ZXJpZnkgLS1xdWlldCAtLSAicmVmcy9oZWFkcy8kMiIgJiYKKwkgICBicmFuY2g9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICJyZWZzL2hlYWRzLyQyIiAyPi9kZXYvbnVsbCkKIAl0aGVuCi0JCWJyYW5jaF9uYW1lPWBleHByICJ6JGJyYW5jaF9uYW1lIiA6ICd6cmVmcy9oZWFkcy9cKC4qXCknYAorCQloZWFkX25hbWU9InJlZnMvaGVhZHMvJDIiCisJZWxpZiBicmFuY2g9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIkMiIgMj4vZGV2L251bGwpCisJdGhlbgorCQloZWFkX25hbWU9ImRldGFjaGVkIEhFQUQiCiAJZWxzZQotCQlicmFuY2hfbmFtZT1IRUFEIDsjIGRldGFjaGVkCisJCXVzYWdlCiAJZmkKIAk7OworKikKKwkjIERvIG5vdCBuZWVkIHRvIHN3aXRjaCBicmFuY2hlcywgd2UgYXJlIGFscmVhZHkgb24gaXQuCisJaWYgYnJhbmNoX25hbWU9YGdpdCBzeW1ib2xpYy1yZWYgLXEgSEVBRGAKKwl0aGVuCisJCWhlYWRfbmFtZT0kYnJhbmNoX25hbWUKKwkJYnJhbmNoX25hbWU9YGV4cHIgInokYnJhbmNoX25hbWUiIDogJ3pyZWZzL2hlYWRzL1woLipcKSdgCisJZWxzZQorCQloZWFkX25hbWU9ImRldGFjaGVkIEhFQUQiCisJCWJyYW5jaF9uYW1lPUhFQUQgOyMgZGV0YWNoZWQKKwlmaQorCWJyYW5jaD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiR7YnJhbmNoX25hbWV9XjAiKSB8fCBleGl0CisJOzsKIGVzYWMKLWJyYW5jaD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiR7YnJhbmNoX25hbWV9XjAiKSB8fCBleGl0CitvcmlnX2hlYWQ9JGJyYW5jaAogCiAjIE5vdyB3ZSBhcmUgcmViYXNpbmcgY29tbWl0cyAkdXBzdHJlYW0uLiRicmFuY2ggb24gdG9wIG9mICRvbnRvCiAKQEAgLTMzMyw4ICszNTksMTAgQEAKIG1iPSQoZ2l0IG1lcmdlLWJhc2UgIiRvbnRvIiAiJGJyYW5jaCIpCiBpZiB0ZXN0ICIkdXBzdHJlYW0iID0gIiRvbnRvIiAmJiB0ZXN0ICIkbWIiID0gIiRvbnRvIiAmJgogCSMgbGluZWFyIGhpc3Rvcnk/Ci0JISBnaXQgcmV2LWxpc3QgLS1wYXJlbnRzICIkb250byIuLiIkYnJhbmNoIiB8IGdyZXAgIiAuKiAiID4gL2Rldi9udWxsCisJISAoZ2l0IHJldi1saXN0IC0tcGFyZW50cyAiJG9udG8iLi4iJGJyYW5jaCIgfCBncmVwICIgLiogIikgPiAvZGV2L251bGwKIHRoZW4KKwkjIExhemlseSBzd2l0Y2ggdG8gdGhlIHRhcmdldCBicmFuY2ggaWYgbmVlZGVkLi4uCisJdGVzdCAteiAiJHN3aXRjaF90byIgfHwgZ2l0IGNoZWNrb3V0ICIkc3dpdGNoX3RvIgogCWVjaG8gPiYyICJDdXJyZW50IGJyYW5jaCAkYnJhbmNoX25hbWUgaXMgdXAgdG8gZGF0ZS4iCiAJZXhpdCAwCiBmaQpAQCAtMzQ2LDIyICszNzQsMTEgQEAKIAlHSVRfUEFHRVI9JycgZ2l0IGRpZmYgLS1zdGF0IC0tc3VtbWFyeSAiJG1iIiAiJG9udG8iCiBmaQogCi0jIG1vdmUgdG8gYSBkZXRhY2hlZCBIRUFECi1vcmlnX2hlYWQ9JChnaXQgcmV2LXBhcnNlIEhFQUReMCkKLWhlYWRfbmFtZT0kKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCAyPiAvZGV2L251bGwpCi1jYXNlICIkaGVhZF9uYW1lIiBpbgotJycpCi0JaGVhZF9uYW1lPSJkZXRhY2hlZCBIRUFEIgotCTs7Ci0qKQotCWdpdCBjaGVja291dCAiJG9yaWdfaGVhZCIgPiAvZGV2L251bGwgMj4mMSB8fAotCQlkaWUgImNvdWxkIG5vdCBkZXRhY2ggSEVBRCIKLQk7OwotZXNhYwotCi0jIFJld2luZCB0aGUgaGVhZCB0byAiJG9udG8iOyB0aGlzIHNhdmVzIG91ciBjdXJyZW50IGhlYWQgaW4gT1JJR19IRUFELgorIyBEZXRhY2ggSEVBRCBhbmQgcmVzZXQgdGhlIHRyZWUKIGVjaG8gIkZpcnN0LCByZXdpbmRpbmcgaGVhZCB0byByZXBsYXkgeW91ciB3b3JrIG9uIHRvcCBvZiBpdC4uLiIKLWdpdC1yZXNldCAtLWhhcmQgIiRvbnRvIgorZ2l0IGNoZWNrb3V0ICIkb250b14wIiA+L2Rldi9udWxsIDI+JjEgfHwKKwlkaWUgImNvdWxkIG5vdCBkZXRhY2ggSEVBRCIKKyMgZ2l0IHJlc2V0IC0taGFyZCAiJG9udG9eMCIKIAogIyBJZiB0aGUgJG9udG8gaXMgYSBwcm9wZXIgZGVzY2VuZGFudCBvZiB0aGUgdGlwIG9mIHRoZSBicmFuY2gsIHRoZW4KICMgd2UganVzdCBmYXN0IGZvcndhcmRlZC4KQEAgLTM3NCw3ICszOTEsOCBAQAogCiBpZiB0ZXN0IC16ICIkZG9fbWVyZ2UiCiB0aGVuCi0JZ2l0IGZvcm1hdC1wYXRjaCAtayAtLXN0ZG91dCAtLWZ1bGwtaW5kZXggLS1pZ25vcmUtaWYtaW4tdXBzdHJlYW0gIiR1cHN0cmVhbSIuLk9SSUdfSEVBRCB8CisJZ2l0IGZvcm1hdC1wYXRjaCAtayAtLXN0ZG91dCAtLWZ1bGwtaW5kZXggLS1pZ25vcmUtaWYtaW4tdXBzdHJlYW0gXAorCQkiJHVwc3RyZWFtLi4kb3JpZ19oZWFkIiB8CiAJZ2l0IGFtICRnaXRfYW1fb3B0IC0tcmViYXNpbmcgLS1yZXNvbHZlbXNnPSIkUkVTT0xWRU1TRyIgJiYKIAltb3ZlX3RvX29yaWdpbmFsX2JyYW5jaAogCXJldD0kPwpAQCAtMzk3LDcgKzQxNSw3IEBACiBlY2hvICIkaGVhZF9uYW1lIiA+ICIkZG90ZXN0L2hlYWQtbmFtZSIKIAogbXNnbnVtPTAKLWZvciBjbXQgaW4gYGdpdCByZXYtbGlzdCAtLXJldmVyc2UgLS1uby1tZXJnZXMgIiR1cHN0cmVhbSIuLk9SSUdfSEVBRGAKK2ZvciBjbXQgaW4gYGdpdCByZXYtbGlzdCAtLXJldmVyc2UgLS1uby1tZXJnZXMgIiR1cHN0cmVhbS4uJG9yaWdfaGVhZCJgCiBkbwogCW1zZ251bT0kKCgkbXNnbnVtICsgMSkpCiAJZWNobyAiJGNtdCIgPiAiJGRvdGVzdC9jbXQuJG1zZ251bSIKZGlmZiAtLWdpdCBhL2dpdC1yZXBhY2suc2ggYi9naXQtcmVwYWNrLnNoCmluZGV4IDUwMTUxOWEuLjA3MmQxYjQgMTAwNzU1Ci0tLSBhL2dpdC1yZXBhY2suc2gKKysrIGIvZ2l0LXJlcGFjay5zaApAQCAtOCw3ICs4LDcgQEAKIGdpdC1yZXBhY2sgW29wdGlvbnNdCiAtLQogYSAgICAgICAgICAgICAgIHBhY2sgZXZlcnl0aGluZyBpbiBhIHNpbmdsZSBwYWNrCi1BICAgICAgICAgICAgICAgc2FtZSBhcyAtYSwgYW5kIGtlZXAgdW5yZWFjaGFibGUgb2JqZWN0cyB0b28KK0EgICAgICAgICAgICAgICBzYW1lIGFzIC1hLCBhbmQgdHVybiB1bnJlYWNoYWJsZSBvYmplY3RzIGxvb3NlCiBkICAgICAgICAgICAgICAgcmVtb3ZlIHJlZHVuZGFudCBwYWNrcywgYW5kIHJ1biBnaXQtcHJ1bmUtcGFja2VkCiBmICAgICAgICAgICAgICAgcGFzcyAtLW5vLXJldXNlLWRlbHRhIHRvIGdpdC1wYWNrLW9iamVjdHMKIG4gICAgICAgICAgICAgICBkbyBub3QgcnVuIGdpdC11cGRhdGUtc2VydmVyLWluZm8KQEAgLTIzLDcgKzIzLDcgQEAKIFNVQkRJUkVDVE9SWV9PSz0nWWVzJwogLiBnaXQtc2gtc2V0dXAKIAotbm9fdXBkYXRlX2luZm89IGFsbF9pbnRvX29uZT0gcmVtb3ZlX3JlZHVuZGFudD0ga2VlcF91bnJlYWNoYWJsZT0KK25vX3VwZGF0ZV9pbmZvPSBhbGxfaW50b19vbmU9IHJlbW92ZV9yZWR1bmRhbnQ9IHVucGFja191bnJlYWNoYWJsZT0KIGxvY2FsPSBxdWlldD0gbm9fcmV1c2U9IGV4dHJhPQogd2hpbGUgdGVzdCAkIyAhPSAwCiBkbwpAQCAtMzEsNyArMzEsNyBAQAogCS1uKQlub191cGRhdGVfaW5mbz10IDs7CiAJLWEpCWFsbF9pbnRvX29uZT10IDs7CiAJLUEpCWFsbF9pbnRvX29uZT10Ci0JCWtlZXBfdW5yZWFjaGFibGU9LS1rZWVwLXVucmVhY2hhYmxlIDs7CisJCXVucGFja191bnJlYWNoYWJsZT0tLXVucGFjay11bnJlYWNoYWJsZSA7OwogCS1kKQlyZW1vdmVfcmVkdW5kYW50PXQgOzsKIAktcSkJcXVpZXQ9LXEgOzsKIAktZikJbm9fcmV1c2U9LS1uby1yZXVzZS1vYmplY3QgOzsKQEAgLTc5LDkgKzc5LDkgQEAKIAlpZiB0ZXN0IC16ICIkYXJncyIKIAl0aGVuCiAJCWFyZ3M9Jy0tdW5wYWNrZWQgLS1pbmNyZW1lbnRhbCcKLQllbGlmIHRlc3QgLW4gIiRrZWVwX3VucmVhY2hhYmxlIgorCWVsaWYgdGVzdCAtbiAiJHVucGFja191bnJlYWNoYWJsZSIKIAl0aGVuCi0JCWFyZ3M9IiRhcmdzICRrZWVwX3VucmVhY2hhYmxlIgorCQlhcmdzPSIkYXJncyAkdW5wYWNrX3VucmVhY2hhYmxlIgogCWZpCiAJOzsKIGVzYWMKQEAgLTEyNSw3ICsxMjUsNiBAQAogCSMgV2Uga25vdyAkZXhpc3RpbmcgYXJlIGFsbCByZWR1bmRhbnQuCiAJaWYgWyAtbiAiJGV4aXN0aW5nIiBdCiAJdGhlbgotCQlzeW5jCiAJCSggY2QgIiRQQUNLRElSIiAmJgogCQkgIGZvciBlIGluICRleGlzdGluZwogCQkgIGRvCmRpZmYgLS1naXQgYS9naXQtc2VuZC1lbWFpbC5wZXJsIGIvZ2l0LXNlbmQtZW1haWwucGVybAppbmRleCBjNmJiYTQ3Li4zODVmZjdjIDEwMDc1NQotLS0gYS9naXQtc2VuZC1lbWFpbC5wZXJsCisrKyBiL2dpdC1zZW5kLWVtYWlsLnBlcmwKQEAgLTE2OCw3ICsxNjgsOCBAQAogIyBFeGFtcGxlIHJlcGx5IHRvOgogIyRpbml0aWFsX3JlcGx5X3RvID0gJyc7ICM8MjAwNTAyMDMxNzMyMDguR0EyMzk2NEBmb29iYXIuY29tPic7CiAKLW15ICRyZXBvID0gR2l0LT5yZXBvc2l0b3J5KCk7CitteSAkcmVwbyA9IGV2YWwgeyBHaXQtPnJlcG9zaXRvcnkoKSB9OworbXkgQHJlcG8gPSAkcmVwbyA/ICgkcmVwbykgOiAoKTsKIG15ICR0ZXJtID0gZXZhbCB7CiAJJEVOVnsiR0lUX1NFTkRfRU1BSUxfTk9UVFkifQogCQk/IG5ldyBUZXJtOjpSZWFkTGluZSAnZ2l0LXNlbmQtZW1haWwnLCBcKlNURElOLCBcKlNURE9VVApAQCAtMjAyLDExICsyMDMsMTMgQEAKICAgICAic210cHVzZXIiID0+IFwkc210cF9hdXRodXNlciwKICAgICAic210cHBhc3MiID0+IFwkc210cF9hdXRocGFzcywKICAgICAidG8iID0+IFxAdG8sCisgICAgImNjIiA9PiBcQGluaXRpYWxfY2MsCiAgICAgImNjY21kIiA9PiBcJGNjX2NtZCwKICAgICAiYWxpYXNmaWxldHlwZSIgPT4gXCRhbGlhc2ZpbGV0eXBlLAogICAgICJiY2MiID0+IFxAYmNjbGlzdCwKICAgICAiYWxpYXNlc2ZpbGUiID0+IFxAYWxpYXNfZmlsZXMsCiAgICAgInN1cHByZXNzY2MiID0+IFxAc3VwcHJlc3NfY2MsCisgICAgImVudmVsb3Blc2VuZGVyIiA9PiBcJGVudmVsb3BlX3NlbmRlciwKICk7CiAKICMgSGFuZGxlIFVuY291dGggVGVybWluYXRpb24KQEAgLTI3MSwyNSArMjc0LDI1IEBACiAKIAlmb3JlYWNoIG15ICRzZXR0aW5nIChrZXlzICVjb25maWdfYm9vbF9zZXR0aW5ncykgewogCQlteSAkdGFyZ2V0ID0gJGNvbmZpZ19ib29sX3NldHRpbmdzeyRzZXR0aW5nfS0+WzBdOwotCQkkJHRhcmdldCA9ICRyZXBvLT5jb25maWdfYm9vbCgiJHByZWZpeC4kc2V0dGluZyIpIHVubGVzcyAoZGVmaW5lZCAkJHRhcmdldCk7CisJCSQkdGFyZ2V0ID0gR2l0Ojpjb25maWdfYm9vbChAcmVwbywgIiRwcmVmaXguJHNldHRpbmciKSB1bmxlc3MgKGRlZmluZWQgJCR0YXJnZXQpOwogCX0KIAogCWZvcmVhY2ggbXkgJHNldHRpbmcgKGtleXMgJWNvbmZpZ19zZXR0aW5ncykgewogCQlteSAkdGFyZ2V0ID0gJGNvbmZpZ19zZXR0aW5nc3skc2V0dGluZ307CiAJCWlmIChyZWYoJHRhcmdldCkgZXEgIkFSUkFZIikgewogCQkJdW5sZXNzIChAJHRhcmdldCkgewotCQkJCW15IEB2YWx1ZXMgPSAkcmVwby0+Y29uZmlnKCIkcHJlZml4LiRzZXR0aW5nIik7CisJCQkJbXkgQHZhbHVlcyA9IEdpdDo6Y29uZmlnKEByZXBvLCAiJHByZWZpeC4kc2V0dGluZyIpOwogCQkJCUAkdGFyZ2V0ID0gQHZhbHVlcyBpZiAoQHZhbHVlcyAmJiBkZWZpbmVkICR2YWx1ZXNbMF0pOwogCQkJfQogCQl9CiAJCWVsc2UgewotCQkJJCR0YXJnZXQgPSAkcmVwby0+Y29uZmlnKCIkcHJlZml4LiRzZXR0aW5nIikgdW5sZXNzIChkZWZpbmVkICQkdGFyZ2V0KTsKKwkJCSQkdGFyZ2V0ID0gR2l0Ojpjb25maWcoQHJlcG8sICIkcHJlZml4LiRzZXR0aW5nIikgdW5sZXNzIChkZWZpbmVkICQkdGFyZ2V0KTsKIAkJfQogCX0KIH0KIAogIyByZWFkIGNvbmZpZ3VyYXRpb24gZnJvbSBbc2VuZGVtYWlsICIkaWRlbnRpdHkiXSwgZmFsbCBiYWNrIG9uIFtzZW5kZW1haWxdCi0kaWRlbnRpdHkgPSAkcmVwby0+Y29uZmlnKCJzZW5kZW1haWwuaWRlbnRpdHkiKSB1bmxlc3MgKGRlZmluZWQgJGlkZW50aXR5KTsKKyRpZGVudGl0eSA9IEdpdDo6Y29uZmlnKEByZXBvLCAic2VuZGVtYWlsLmlkZW50aXR5IikgdW5sZXNzIChkZWZpbmVkICRpZGVudGl0eSk7CiByZWFkX2NvbmZpZygic2VuZGVtYWlsLiRpZGVudGl0eSIpIGlmIChkZWZpbmVkICRpZGVudGl0eSk7CiByZWFkX2NvbmZpZygic2VuZGVtYWlsIik7CiAKQEAgLTMyNyw4ICszMzAsOSBAQAogCX0KIH0KIAotbXkgKCRyZXBvYXV0aG9yKSA9ICRyZXBvLT5pZGVudF9wZXJzb24oJ2F1dGhvcicpOwotbXkgKCRyZXBvY29tbWl0dGVyKSA9ICRyZXBvLT5pZGVudF9wZXJzb24oJ2NvbW1pdHRlcicpOworbXkgKCRyZXBvYXV0aG9yLCAkcmVwb2NvbW1pdHRlcik7CisoJHJlcG9hdXRob3IpID0gR2l0OjppZGVudF9wZXJzb24oQHJlcG8sICdhdXRob3InKTsKKygkcmVwb2NvbW1pdHRlcikgPSBHaXQ6OmlkZW50X3BlcnNvbihAcmVwbywgJ2NvbW1pdHRlcicpOwogCiAjIFZlcmlmeSB0aGUgdXNlciBpbnB1dAogCkBAIC00MTUsNyArNDE5LDcgQEAKIAogbXkgJHByb21wdGluZyA9IDA7CiBpZiAoIWRlZmluZWQgJHNlbmRlcikgewotCSRzZW5kZXIgPSAkcmVwb2F1dGhvciB8fCAkcmVwb2NvbW1pdHRlcjsKKwkkc2VuZGVyID0gJHJlcG9hdXRob3IgfHwgJHJlcG9jb21taXR0ZXIgfHwgJyc7CiAKIAl3aGlsZSAoMSkgewogCQkkXyA9ICR0ZXJtLT5yZWFkbGluZSgiV2hvIHNob3VsZCB0aGUgZW1haWxzIGFwcGVhciB0byBiZSBmcm9tPyBbJHNlbmRlcl0gIik7CkBAIC00MzgsNyArNDQyLDcgQEAKIAl9CiAKIAlteSAkdG8gPSAkXzsKLQlwdXNoIEB0bywgc3BsaXQgLywvLCAkdG87CisJcHVzaCBAdG8sIHNwbGl0IC8sXHMqLywgJHRvOwogCSRwcm9tcHRpbmcrKzsKIH0KIApAQCAtNTA5LDggKzUxMyw4IEBACiBFT1QKIAljbG9zZShDKTsKIAotCW15ICRlZGl0b3IgPSAkRU5We0dJVF9FRElUT1J9IHx8ICRyZXBvLT5jb25maWcoImNvcmUuZWRpdG9yIikgfHwgJEVOVntWSVNVQUx9IHx8ICRFTlZ7RURJVE9SfSB8fCAidmkiOwotCXN5c3RlbSgnc2gnLCAnLWMnLCAnJDAgJEAnLCAkZWRpdG9yLCAkY29tcG9zZV9maWxlbmFtZSk7CisJbXkgJGVkaXRvciA9ICRFTlZ7R0lUX0VESVRPUn0gfHwgR2l0Ojpjb25maWcoQHJlcG8sICJjb3JlLmVkaXRvciIpIHx8ICRFTlZ7VklTVUFMfSB8fCAkRU5We0VESVRPUn0gfHwgInZpIjsKKwlzeXN0ZW0oJ3NoJywgJy1jJywgJGVkaXRvci4nICIkQCInLCAkZWRpdG9yLCAkY29tcG9zZV9maWxlbmFtZSk7CiAKIAlvcGVuKEMyLCI+IiwkY29tcG9zZV9maWxlbmFtZSAuICIuZmluYWwiKQogCQlvciBkaWUgIkZhaWxlZCB0byBvcGVuICRjb21wb3NlX2ZpbGVuYW1lLmZpbmFsIDogIiAuICQhOwpAQCAtODQ2LDcgKzg1MCw3IEBACiAJCQkJfQogCQkJCWVsc2lmICgvXkNvbnRlbnQtdHlwZTovaSkgewogCQkJCQkkaGFzX2NvbnRlbnRfdHlwZSA9IDE7Ci0JCQkJCWlmICgvY2hhcnNldD0iP1teICJdKy8pIHsKKwkJCQkJaWYgKC9jaGFyc2V0PSI/KFteICJdKykvKSB7CiAJCQkJCQkkYm9keV9lbmNvZGluZyA9ICQxOwogCQkJCQl9CiAJCQkJCXB1c2ggQHhoLCAkXzsKZGlmZiAtLWdpdCBhL2dpdC1zdGFzaC5zaCBiL2dpdC1zdGFzaC5zaAppbmRleCBjMmI2ODIwLi40OTM4YWRlIDEwMDc1NQotLS0gYS9naXQtc3Rhc2guc2gKKysrIGIvZ2l0LXN0YXNoLnNoCkBAIC0xNSw4ICsxNSw4IEBACiByZWZfc3Rhc2g9cmVmcy9zdGFzaAogCiBub19jaGFuZ2VzICgpIHsKLQlnaXQgZGlmZi1pbmRleCAtLXF1aWV0IC0tY2FjaGVkIEhFQUQgLS0gJiYKLQlnaXQgZGlmZi1maWxlcyAtLXF1aWV0CisJZ2l0IGRpZmYtaW5kZXggLS1xdWlldCAtLWNhY2hlZCBIRUFEIC0taWdub3JlLXN1Ym1vZHVsZXMgLS0gJiYKKwlnaXQgZGlmZi1maWxlcyAtLXF1aWV0IC0taWdub3JlLXN1Ym1vZHVsZXMKIH0KIAogY2xlYXJfc3Rhc2ggKCkgewpAQCAtMTMwLDcgKzEzMCw3IEBACiB9CiAKIGFwcGx5X3N0YXNoICgpIHsKLQlnaXQgZGlmZi1maWxlcyAtLXF1aWV0IHx8CisJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCAtLWlnbm9yZS1zdWJtb2R1bGVzIHx8CiAJCWRpZSAnQ2Fubm90IHJlc3RvcmUgb24gdG9wIG9mIGEgZGlydHkgc3RhdGUnCiAKIAl1bnN0YXNoX2luZGV4PQpkaWZmIC0tZ2l0IGEvZ2l0LXN1Ym1vZHVsZS5zaCBiL2dpdC1zdWJtb2R1bGUuc2gKaW5kZXggYTc0NWU0Mi4uMjFlNWI1YiAxMDA3NTUKLS0tIGEvZ2l0LXN1Ym1vZHVsZS5zaAorKysgYi9naXQtc3VibW9kdWxlLnNoCkBAIC01LDcgKzUsNyBAQAogIyBDb3B5cmlnaHQgKGMpIDIwMDcgTGFycyBIamVtbGkKIAogVVNBR0U9IlstLXF1aWV0XSBbLS1jYWNoZWRdIFwKLVthZGQgPHJlcG8+IFstYiBicmFuY2hdfHN0YXR1c3xpbml0fHVwZGF0ZXxzdW1tYXJ5IFstbnwtLXN1bW1hcnktbGltaXQgPG4+XSBbPGNvbW1pdD5dXSBcCitbYWRkIDxyZXBvPiBbLWIgYnJhbmNoXXxzdGF0dXN8aW5pdHx1cGRhdGUgWy1pfC0taW5pdF18c3VtbWFyeSBbLW58LS1zdW1tYXJ5LWxpbWl0IDxuPl0gWzxjb21taXQ+XV0gXAogWy0tXSBbPHBhdGg+Li4uXSIKIE9QVElPTlNfU1BFQz0KIC4gZ2l0LXNoLXNldHVwCkBAIC00NSw4ICs0NSw4IEBACiAJYnJhbmNoPSIkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCAyPi9kZXYvbnVsbCkiCiAJcmVtb3RlPSIkKGdpdCBjb25maWcgYnJhbmNoLiR7YnJhbmNoI3JlZnMvaGVhZHMvfS5yZW1vdGUpIgogCXJlbW90ZT0iJHtyZW1vdGU6LW9yaWdpbn0iCi0JcmVtb3RldXJsPSIkKGdpdCBjb25maWcgcmVtb3RlLiRyZW1vdGUudXJsKSIgfHwKLQkJZGllICJyZW1vdGUgKCRyZW1vdGUpIGRvZXMgbm90IGhhdmUgYSB1cmwgaW4gLmdpdC9jb25maWciCisJcmVtb3RldXJsPSQoZ2l0IGNvbmZpZyAicmVtb3RlLiRyZW1vdGUudXJsIikgfHwKKwkJZGllICJyZW1vdGUgKCRyZW1vdGUpIGRvZXMgbm90IGhhdmUgYSB1cmwgZGVmaW5lZCBpbiAuZ2l0L2NvbmZpZyIKIAl1cmw9IiQxIgogCXdoaWxlIHRlc3QgLW4gIiR1cmwiCiAJZG8KQEAgLTczLDkgKzczLDggQEAKIG1vZHVsZV9uYW1lKCkKIHsKIAkjIERvIHdlIGhhdmUgInN1Ym1vZHVsZS48c29tZXRoaW5nPi5wYXRoID0gJDEiIGRlZmluZWQgaW4gLmdpdG1vZHVsZXMgZmlsZT8KLQlyZT0kKHByaW50ZiAnJXMnICIkMSIgfCBzZWQgLWUgJ3MvW10uW14kXFwqXS9cXCYvZycpCi0JbmFtZT0kKCBHSVRfQ09ORklHPS5naXRtb2R1bGVzIFwKLQkJZ2l0IGNvbmZpZyAtLWdldC1yZWdleHAgJ15zdWJtb2R1bGVcLi4qXC5wYXRoJCcgfAorCXJlPSQocHJpbnRmICclc1xuJyAiJDEiIHwgc2VkIC1lICdzL1tdLlteJFxcKl0vXFwmL2cnKQorCW5hbWU9JCggZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyAtLWdldC1yZWdleHAgJ15zdWJtb2R1bGVcLi4qXC5wYXRoJCcgfAogCQlzZWQgLW4gLWUgJ3N8XnN1Ym1vZHVsZVwuXCguKlwpXC5wYXRoICciJHJlIickfFwxfHAnICkKICAgICAgICB0ZXN0IC16ICIkbmFtZSIgJiYKICAgICAgICBkaWUgIk5vIHN1Ym1vZHVsZSBtYXBwaW5nIGZvdW5kIGluIC5naXRtb2R1bGVzIGZvciBwYXRoICckcGF0aCciCkBAIC0xNjgsOCArMTY3LDcgQEAKIAkjIHBlcmhhcHMgdGhlIHBhdGggZXhpc3RzIGFuZCBpcyBhbHJlYWR5IGEgZ2l0IHJlcG8sIGVsc2UgY2xvbmUgaXQKIAlpZiB0ZXN0IC1lICIkcGF0aCIKIAl0aGVuCi0JCWlmIHRlc3QgLWQgIiRwYXRoLy5naXQiICYmCi0JCXRlc3QgIiQodW5zZXQgR0lUX0RJUjsgY2QgJHBhdGg7IGdpdCByZXYtcGFyc2UgLS1naXQtZGlyKSIgPSAiLmdpdCIKKwkJaWYgdGVzdCAtZCAiJHBhdGgiLy5naXQgLW8gLWYgIiRwYXRoIi8uZ2l0CiAJCXRoZW4KIAkJCWVjaG8gIkFkZGluZyBleGlzdGluZyByZXBvIGF0ICckcGF0aCcgdG8gdGhlIGluZGV4IgogCQllbHNlCkBAIC0xNzksNyArMTc3LDggQEAKIAkJY2FzZSAiJHJlcG8iIGluCiAJCS4vKnwuLi8qKQogCQkJIyBkZXJlZmVyZW5jZSBzb3VyY2UgdXJsIHJlbGF0aXZlIHRvIHBhcmVudCdzIHVybAotCQkJcmVhbHJlcG89IiQocmVzb2x2ZV9yZWxhdGl2ZV91cmwgJHJlcG8pIiA7OworCQkJcmVhbHJlcG89JChyZXNvbHZlX3JlbGF0aXZlX3VybCAiJHJlcG8iKSB8fCBleGl0CisJCQk7OwogCQkqKQogCQkJIyBUdXJuIHRoZSBzb3VyY2UgaW50byBhbiBhYnNvbHV0ZSBwYXRoIGlmCiAJCQkjIGl0IGlzIGxvY2FsCkBAIC0xOTgsOCArMTk3LDggQEAKIAlnaXQgYWRkICIkcGF0aCIgfHwKIAlkaWUgIkZhaWxlZCB0byBhZGQgc3VibW9kdWxlICckcGF0aCciCiAKLQlHSVRfQ09ORklHPS5naXRtb2R1bGVzIGdpdCBjb25maWcgc3VibW9kdWxlLiIkcGF0aCIucGF0aCAiJHBhdGgiICYmCi0JR0lUX0NPTkZJRz0uZ2l0bW9kdWxlcyBnaXQgY29uZmlnIHN1Ym1vZHVsZS4iJHBhdGgiLnVybCAiJHJlcG8iICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuIiRwYXRoIi5wYXRoICIkcGF0aCIgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS4iJHBhdGgiLnVybCAiJHJlcG8iICYmCiAJZ2l0IGFkZCAuZ2l0bW9kdWxlcyB8fAogCWRpZSAiRmFpbGVkIHRvIHJlZ2lzdGVyIHN1Ym1vZHVsZSAnJHBhdGgnIgogfQpAQCAtMjQwLDE0ICsyMzksMTQgQEAKIAkJdXJsPSQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuIiRuYW1lIi51cmwpCiAJCXRlc3QgLXogIiR1cmwiIHx8IGNvbnRpbnVlCiAKLQkJdXJsPSQoR0lUX0NPTkZJRz0uZ2l0bW9kdWxlcyBnaXQgY29uZmlnIHN1Ym1vZHVsZS4iJG5hbWUiLnVybCkKKwkJdXJsPSQoZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuIiRuYW1lIi51cmwpCiAJCXRlc3QgLXogIiR1cmwiICYmCiAJCWRpZSAiTm8gdXJsIGZvdW5kIGZvciBzdWJtb2R1bGUgcGF0aCAnJHBhdGgnIGluIC5naXRtb2R1bGVzIgogCiAJCSMgUG9zc2libHkgYSB1cmwgcmVsYXRpdmUgdG8gcGFyZW50CiAJCWNhc2UgIiR1cmwiIGluCiAJCS4vKnwuLi8qKQotCQkJdXJsPSIkKHJlc29sdmVfcmVsYXRpdmVfdXJsICIkdXJsIikiCisJCQl1cmw9JChyZXNvbHZlX3JlbGF0aXZlX3VybCAiJHVybCIpIHx8IGV4aXQKIAkJCTs7CiAJCWVzYWMKIApAQCAtMjcwLDggKzI2OSwxMyBAQAogCWRvCiAJCWNhc2UgIiQxIiBpbgogCQktcXwtLXF1aWV0KQorCQkJc2hpZnQKIAkJCXF1aWV0PTEKIAkJCTs7CisJCS1pfC0taW5pdCkKKwkJCXNoaWZ0CisJCQljbWRfaW5pdCAiJEAiIHx8IHJldHVybgorCQkJOzsKIAkJLS0pCiAJCQlzaGlmdAogCQkJYnJlYWsKQEAgLTI4Myw3ICsyODcsNiBAQAogCQkJYnJlYWsKIAkJCTs7CiAJCWVzYWMKLQkJc2hpZnQKIAlkb25lCiAKIAlnaXQgbHMtZmlsZXMgLS1zdGFnZSAtLSAiJEAiIHwgZ3JlcCAnXjE2MDAwMCAnIHwKQEAgLTI5NywxMCArMzAwLDExIEBACiAJCQkjIHBhdGggaGF2ZSBiZWVuIHNwZWNpZmllZAogCQkJdGVzdCAiJCMiICE9ICIwIiAmJgogCQkJc2F5ICJTdWJtb2R1bGUgcGF0aCAnJHBhdGgnIG5vdCBpbml0aWFsaXplZCIKKwkJCXNheSAiTWF5YmUgeW91IHdhbnQgdG8gdXNlICd1cGRhdGUgLS1pbml0Jz8iCiAJCQljb250aW51ZQogCQlmaQogCi0JCWlmICEgdGVzdCAtZCAiJHBhdGgiLy5naXQKKwkJaWYgISB0ZXN0IC1kICIkcGF0aCIvLmdpdCAtbyAtZiAiJHBhdGgiLy5naXQKIAkJdGhlbgogCQkJbW9kdWxlX2Nsb25lICIkcGF0aCIgIiR1cmwiIHx8IGV4aXQKIAkJCXN1YnNoYTE9CkBAIC0zNDMsNiArMzQ3LDcgQEAKICMKIGNtZF9zdW1tYXJ5KCkgewogCXN1bW1hcnlfbGltaXQ9LTEKKwlmb3Jfc3RhdHVzPQogCiAJIyBwYXJzZSAkYXJncyBhZnRlciAic3VibW9kdWxlIC4uLiBzdW1tYXJ5Ii4KIAl3aGlsZSB0ZXN0ICQjIC1uZSAwCkBAIC0zNTEsNiArMzU2LDkgQEAKIAkJLS1jYWNoZWQpCiAJCQljYWNoZWQ9IiQxIgogCQkJOzsKKwkJLS1mb3Itc3RhdHVzKQorCQkJZm9yX3N0YXR1cz0iJDEiCisJCQk7OwogCQktbnwtLXN1bW1hcnktbGltaXQpCiAJCQlpZiBzdW1tYXJ5X2xpbWl0PSQoKCQyICsgMCkpIDI+L2Rldi9udWxsICYmIHRlc3QgIiRzdW1tYXJ5X2xpbWl0IiA9ICIkMiIKIAkJCXRoZW4KQEAgLTM5OCw3ICs0MDYsOCBAQAogCQlkb25lCiAJKQogCi0JdGVzdCAtbiAiJG1vZHVsZXMiICYmCisJdGVzdCAteiAiJG1vZHVsZXMiICYmIHJldHVybgorCiAJZ2l0IGRpZmYtaW5kZXggJGNhY2hlZCAtLXJhdyAkaGVhZCAtLSAkbW9kdWxlcyB8CiAJZ3JlcCAtZSAnXjoxNjAwMDAnIC1lICdeOlswLTddKiAxNjAwMDAnIHwKIAljdXQgLWMyLSB8CkBAIC01MDAsNyArNTA5LDE0IEBACiAJCQllY2hvCiAJCWZpCiAJCWVjaG8KLQlkb25lCisJZG9uZSB8CisJaWYgdGVzdCAtbiAiJGZvcl9zdGF0dXMiOyB0aGVuCisJCWVjaG8gIiMgTW9kaWZpZWQgc3VibW9kdWxlczoiCisJCWVjaG8gIiMiCisJCXNlZCAtZSAnc3xefCMgfCcgLWUgJ3N8XiMgJHwjfCcKKwllbHNlCisJCWNhdAorCWZpCiB9CiAjCiAjIExpc3QgYWxsIHN1Ym1vZHVsZXMsIHByZWZpeGVkIHdpdGg6CkBAIC01NDMsNyArNTU5LDcgQEAKIAlkbwogCQluYW1lPSQobW9kdWxlX25hbWUgIiRwYXRoIikgfHwgZXhpdAogCQl1cmw9JChnaXQgY29uZmlnIHN1Ym1vZHVsZS4iJG5hbWUiLnVybCkKLQkJaWYgdGVzdCAteiAiJHVybCIgfHwgISB0ZXN0IC1kICIkcGF0aCIvLmdpdAorCQlpZiB0ZXN0IC16ICIkdXJsIiB8fCAhIHRlc3QgLWQgIiRwYXRoIi8uZ2l0IC1vIC1mICIkcGF0aCIvLmdpdAogCQl0aGVuCiAJCQlzYXkgIi0kc2hhMSAkcGF0aCIKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvZ2l0LXN2bi5wZXJsIGIvZ2l0LXN2bi5wZXJsCmluZGV4IGIxNTEwNDkuLmEzNjZjODkgMTAwNzU1Ci0tLSBhL2dpdC1zdm4ucGVybAorKysgYi9naXQtc3ZuLnBlcmwKQEAgLTQsNyArNCw3IEBACiB1c2Ugd2FybmluZ3M7CiB1c2Ugc3RyaWN0OwogdXNlIHZhcnMgcXcvCSRBVVRIT1IgJFZFUlNJT04KLQkJJHNoYTEgJHNoYTFfc2hvcnQgJF9yZXZpc2lvbgorCQkkc2hhMSAkc2hhMV9zaG9ydCAkX3JldmlzaW9uICRfcmVwb3NpdG9yeQogCQkkX3EgJF9hdXRob3JzICV1c2Vycy87CiAkQVVUSE9SID0gJ0VyaWMgV29uZyA8bm9ybWFscGVyc29uQHloYnQubmV0Pic7CiAkVkVSU0lPTiA9ICdAQEdJVF9WRVJTSU9OQEAnOwpAQCAtNjUsNyArNjUsOCBAQAogCSRfdGVtcGxhdGUsICRfc2hhcmVkLAogCSRfdmVyc2lvbiwgJF9mZXRjaF9hbGwsICRfbm9fcmViYXNlLAogCSRfbWVyZ2UsICRfc3RyYXRlZ3ksICRfZHJ5X3J1biwgJF9sb2NhbCwKLQkkX3ByZWZpeCwgJF9ub19jaGVja291dCwgJF91cmwsICRfdmVyYm9zZSk7CisJJF9wcmVmaXgsICRfbm9fY2hlY2tvdXQsICRfdXJsLCAkX3ZlcmJvc2UsCisJJF9naXRfZm9ybWF0KTsKICRHaXQ6OlNWTjo6X2ZvbGxvd19wYXJlbnQgPSAxOwogbXkgJXJlbW90ZV9vcHRzID0gKCAndXNlcm5hbWU9cycgPT4gXCRHaXQ6OlNWTjo6UHJvbXB0OjpfdXNlcm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICdjb25maWctZGlyPXMnID0+IFwkR2l0OjpTVk46OlJhOjpjb25maWdfZGlyLApAQCAtODIsNiArODMsNyBAQAogCQkncmVwYWNrLWZsYWdzfHJlcGFjay1hcmdzfHJlcGFjay1vcHRzPXMnID0+CiAJCSAgIFwkR2l0OjpTVk46Ol9yZXBhY2tfZmxhZ3MsCiAJCSd1c2UtbG9nLWF1dGhvcicgPT4gXCRHaXQ6OlNWTjo6X3VzZV9sb2dfYXV0aG9yLAorCQknYWRkLWF1dGhvci1mcm9tJyA9PiBcJEdpdDo6U1ZOOjpfYWRkX2F1dGhvcl9mcm9tLAogCQklcmVtb3RlX29wdHMgKTsKIAogbXkgKCRfdHJ1bmssICRfdGFncywgJF9icmFuY2hlcywgJF9zdGRsYXlvdXQpOwpAQCAtMTc1LDYgKzE3Nyw3IEBACiAJCQkgICdzdHJhdGVneXxzPXMnID0+IFwkX3N0cmF0ZWd5LAogCQkJICAnbG9jYWx8bCcgPT4gXCRfbG9jYWwsCiAJCQkgICdmZXRjaC1hbGx8YWxsJyA9PiBcJF9mZXRjaF9hbGwsCisJCQkgICdkcnktcnVufG4nID0+IFwkX2RyeV9ydW4sCiAJCQkgICVmY19vcHRzIH0gXSwKIAknY29tbWl0LWRpZmYnID0+IFsgXCZjbWRfY29tbWl0X2RpZmYsCiAJICAgICAgICAgICAgICAgICAgICdDb21taXQgYSBkaWZmIGJldHdlZW4gdHdvIHRyZWVzJywKQEAgLTE4OCw3ICsxOTEsNyBAQAogCQkgICAgeyAndXJsJyA9PiBcJF91cmwsIH0gXSwKIAknYmxhbWUnID0+IFsgXCZHaXQ6OlNWTjo6TG9nOjpjbWRfYmxhbWUsCiAJICAgICAgICAgICAgIlNob3cgd2hhdCByZXZpc2lvbiBhbmQgYXV0aG9yIGxhc3QgbW9kaWZpZWQgZWFjaCBsaW5lIG9mIGEgZmlsZSIsCi0JICAgICAgICAgICAge30gXSwKKwkJICAgIHsgJ2dpdC1mb3JtYXQnID0+IFwkX2dpdF9mb3JtYXQgfSBdLAogKTsKIAogbXkgJGNtZDsKQEAgLTIyMCwxMiArMjIzLDEzIEBACiAJCX0KIAkJJEVOVntHSVRfRElSfSA9ICRnaXRfZGlyOwogCX0KKwkkX3JlcG9zaXRvcnkgPSBHaXQtPnJlcG9zaXRvcnkoUmVwb3NpdG9yeSA9PiAkRU5We0dJVF9ESVJ9KTsKIH0KIAogbXkgJW9wdHMgPSAleyRjbWR7JGNtZH0tPlsyXX0gaWYgKGRlZmluZWQgJGNtZCk7CiAKIHJlYWRfcmVwb19jb25maWcoXCVvcHRzKTsKLUdldG9wdDo6TG9uZzo6Q29uZmlndXJlKCdwYXNzX3Rocm91Z2gnKSBpZiAoJGNtZCAmJiAkY21kIGVxICdsb2cnKTsKK0dldG9wdDo6TG9uZzo6Q29uZmlndXJlKCdwYXNzX3Rocm91Z2gnKSBpZiAoJGNtZCAmJiAoJGNtZCBlcSAnbG9nJyB8fCAkY21kIGVxICdibGFtZScpKTsKIG15ICRydiA9IEdldE9wdGlvbnMoJW9wdHMsICdoZWxwfEh8aCcgPT4gXCRfaGVscCwgJ3ZlcnNpb258VicgPT4gXCRfdmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgJ21pbmltaXplLWNvbm5lY3Rpb25zJyA9PiBcJEdpdDo6U1ZOOjpNaWdyYXRpb246Ol9taW5pbWl6ZSwKICAgICAgICAgICAgICAgICAgICAgJ2lkfGk9cycgPT4gXCRHaXQ6OlNWTjo6ZGVmYXVsdF9yZWZfaWQsCkBAIC0zMDEsNiArMzA1LDcgQEAKIAkJCX0KIAkJfQogCQljb21tYW5kX25vaXN5KEBpbml0X2RiKTsKKwkJJF9yZXBvc2l0b3J5ID0gR2l0LT5yZXBvc2l0b3J5KFJlcG9zaXRvcnkgPT4gIi5naXQiKTsKIAl9CiAJbXkgJHNldDsKIAlteSAkcGZ4ID0gInN2bi1yZW1vdGUuJEdpdDo6U1ZOOjpkZWZhdWx0X3JlcG9faWQiOwpAQCAtMzE3LDYgKzMyMiw3IEBACiAJbWtwYXRoKFskcmVwb19wYXRoXSkgdW5sZXNzIC1kICRyZXBvX3BhdGg7CiAJY2hkaXIgJHJlcG9fcGF0aCBvciBkaWUgIkNvdWxkbid0IGNoZGlyIHRvICRyZXBvX3BhdGg6ICQhXG4iOwogCSRFTlZ7R0lUX0RJUn0gPSAnLmdpdCc7CisJJF9yZXBvc2l0b3J5ID0gR2l0LT5yZXBvc2l0b3J5KFJlcG9zaXRvcnkgPT4gJEVOVntHSVRfRElSfSk7CiB9CiAKIHN1YiBjbWRfY2xvbmUgewpAQCAtNDEwLDEwICs0MTYsMTIgQEAKIAkkaGVhZCB8fD0gJ0hFQUQnOwogCW15IEByZWZzOwogCW15ICgkdXJsLCAkcmV2LCAkdXVpZCwgJGdzKSA9IHdvcmtpbmdfaGVhZF9pbmZvKCRoZWFkLCBcQHJlZnMpOwotCXByaW50ICJDb21taXR0aW5nIHRvICR1cmwgLi4uXG4iOworCWlmICgkdXJsKSB7CisJCXByaW50ICJDb21taXR0aW5nIHRvICR1cmwgLi4uXG4iOworCX0KIAl1bmxlc3MgKCRncykgewogCQlkaWUgIlVuYWJsZSB0byBkZXRlcm1pbmUgdXBzdHJlYW0gU1ZOIGluZm9ybWF0aW9uIGZyb20gIiwKLQkJICAgICIkaGVhZCBoaXN0b3J5XG4iOworCQkgICAgIiRoZWFkIGhpc3RvcnkuXG5QZXJoYXBzIHRoZSByZXBvc2l0b3J5IGlzIGVtcHR5LiI7CiAJfQogCW15ICRsYXN0X3JldjsKIAlteSAoJGxpbmVhcl9yZWZzLCAkcGFyZW50cykgPSBsaW5lYXJpemVfaGlzdG9yeSgkZ3MsIFxAcmVmcyk7CkBAIC01NTAsNiArNTU4LDExIEBACiAJCWRpZSAiVW5hYmxlIHRvIGRldGVybWluZSB1cHN0cmVhbSBTVk4gaW5mb3JtYXRpb24gZnJvbSAiLAogCQkgICAgIndvcmtpbmcgdHJlZSBoaXN0b3J5XG4iOwogCX0KKwlpZiAoJF9kcnlfcnVuKSB7CisJCXByaW50ICJSZW1vdGUgQnJhbmNoOiAiIC4gJGdzLT5yZWZuYW1lIC4gIlxuIjsKKwkJcHJpbnQgIlNWTiBVUkw6ICIgLiAkdXJsIC4gIlxuIjsKKwkJcmV0dXJuOworCX0KIAlpZiAoY29tbWFuZChxdy9kaWZmLWluZGV4IEhFQUQgLS0vKSkgewogCQlwcmludCBTVERFUlIgIkNhbm5vdCByZWJhc2Ugd2l0aCB1bmNvbW1pdGVkIGNoYW5nZXM6XG4iOwogCQljb21tYW5kX25vaXN5KCdzdGF0dXMnKTsKQEAgLTYxMiw3ICs2MjUsNyBAQAogCQlwcmludCBHSVRJR05PUkUgIiRzXG4iOwogCQljbG9zZShHSVRJR05PUkUpCiAJCSAgb3IgZmF0YWwoIkZhaWxlZCB0byBjbG9zZSBgJGlnbm9yZSc6ICQhIik7Ci0JCWNvbW1hbmRfbm9pc3koJ2FkZCcsICRpZ25vcmUpOworCQljb21tYW5kX25vaXN5KCdhZGQnLCAnLWYnLCAkaWdub3JlKTsKIAl9KTsKIH0KIApAQCAtNjMwLDYgKzY0Myw4IEBACiAJJHBhdGggPX4gcyMvW14vXSsvXC5cLiMjZzsKIAkkcGF0aCA9fiBzIy8kIyNnOwogCSRwYXRoID1+IHMjXlwuLyMjIGlmICRkb3Rfc2xhc2hfYWRkZWQ7CisJJHBhdGggPX4gcyNeLyMjOworCSRwYXRoID1+IHMjXlwuJCMjOwogCXJldHVybiAkcGF0aDsKIH0KIApAQCAtNzM4LDcgKzc1Myw3IEBACiAJbXkgJHVzYWdlID0gIlVzYWdlOiAkMCBjb21taXQtZGlmZiAtcjxyZXZpc2lvbj4gIi4KIAkgICAgICAgICAgICAiPHRyZWUtaXNoPiA8dHJlZS1pc2g+IFs8VVJMPl0iOwogCWZhdGFsKCR1c2FnZSkgaWYgKCFkZWZpbmVkICR0YSB8fCAhZGVmaW5lZCAkdGIpOwotCW15ICRzdm5fcGF0aDsKKwlteSAkc3ZuX3BhdGggPSAnJzsKIAlpZiAoIWRlZmluZWQgJHVybCkgewogCQlteSAkZ3MgPSBldmFsIHsgR2l0OjpTVk4tPm5ldyB9OwogCQlpZiAoISRncykgewpAQCAtNzYyLDcgKzc3Nyw2IEBACiAJCSRfbWVzc2FnZSB8fD0gZ2V0X2NvbW1pdF9lbnRyeSgkdGIpLT57bG9nfTsKIAl9CiAJbXkgJHJhIHx8PSBHaXQ6OlNWTjo6UmEtPm5ldygkdXJsKTsKLQkkc3ZuX3BhdGggfHw9ICRyYS0+e3N2bl9wYXRofTsKIAlteSAkciA9ICRfcmV2aXNpb247CiAJaWYgKCRyIGVxICdIRUFEJykgewogCQkkciA9ICRyYS0+Z2V0X2xhdGVzdF9yZXZudW07CkBAIC0xMDA5LDE3ICsxMDIzLDMwIEBACiAJCW15ICgkbXNnX2ZoLCAkY3R4KSA9IGNvbW1hbmRfb3V0cHV0X3BpcGUoJ2NhdC1maWxlJywKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHlwZSwgJHRyZWVpc2gpOwogCQlteSAkaW5fbXNnID0gMDsKKwkJbXkgJGF1dGhvcjsKKwkJbXkgJHNhd19mcm9tID0gMDsKKwkJbXkgJG1zZ2J1ZiA9ICIiOwogCQl3aGlsZSAoPCRtc2dfZmg+KSB7CiAJCQlpZiAoISRpbl9tc2cpIHsKIAkJCQkkaW5fbXNnID0gMSBpZiAoL15ccyokLyk7CisJCQkJJGF1dGhvciA9ICQxIGlmICgvXmF1dGhvciAoLio+KS8pOwogCQkJfSBlbHNpZiAoL15naXQtc3ZuLWlkOiAvKSB7CiAJCQkJIyBza2lwIHRoaXMgZm9yIG5vdywgd2UgcmVnZW5lcmF0ZSB0aGUKIAkJCQkjIGNvcnJlY3Qgb25lIG9uIHJlLWZldGNoIGFueXdheXMKIAkJCQkjIFRPRE86IHNldCAqOm1lcmdlIHByb3BlcnRpZXMgb3IgbGlrZS4uLgogCQkJfSBlbHNlIHsKLQkJCQlwcmludCAkbG9nX2ZoICRfIG9yIGNyb2FrICQhOworCQkJCWlmICgvXkZyb206LyB8fCAvXlNpZ25lZC1vZmYtYnk6LykgeworCQkJCQkkc2F3X2Zyb20gPSAxOworCQkJCX0KKwkJCQkkbXNnYnVmIC49ICRfOwogCQkJfQogCQl9CisJCSRtc2didWYgPX4gcy9ccyskLy9zOworCQlpZiAoJEdpdDo6U1ZOOjpfYWRkX2F1dGhvcl9mcm9tICYmIGRlZmluZWQoJGF1dGhvcikKKwkJICAgICYmICEkc2F3X2Zyb20pIHsKKwkJCSRtc2didWYgLj0gIlxuXG5Gcm9tOiAkYXV0aG9yIjsKKwkJfQorCQlwcmludCAkbG9nX2ZoICRtc2didWYgb3IgY3JvYWsgJCE7CiAJCWNvbW1hbmRfY2xvc2VfcGlwZSgkbXNnX2ZoLCAkY3R4KTsKIAl9CiAJY2xvc2UgJGxvZ19maCBvciBjcm9hayAkITsKQEAgLTEyNDYsNyArMTI3Myw3IEBACiB1c2UgdmFycyBxdy8kZGVmYXVsdF9yZXBvX2lkICRkZWZhdWx0X3JlZl9pZCAkX25vX21ldGFkYXRhICRfZm9sbG93X3BhcmVudAogICAgICAgICAgICAgJF9yZXBhY2sgJF9yZXBhY2tfZmxhZ3MgJF91c2Vfc3ZtX3Byb3BzICRfaGVhZAogICAgICAgICAgICAgJF91c2Vfc3Zuc3luY19wcm9wcyAkbm9fcmV1c2VfZXhpc3RpbmcgJF9taW5pbWl6ZV91cmwKLQkgICAgJF91c2VfbG9nX2F1dGhvci87CisJICAgICRfdXNlX2xvZ19hdXRob3IgJF9hZGRfYXV0aG9yX2Zyb20vOwogdXNlIENhcnAgcXcvY3JvYWsvOwogdXNlIEZpbGU6OlBhdGggcXcvbWtwYXRoLzsKIHVzZSBGaWxlOjpDb3B5IHF3L2NvcHkvOwpAQCAtMTQzNywxMyArMTQ2NCw2IEBACiAJfQogfQogCi0jIHdlIGFsbG93IG1vcmUgY2hhcnMgdGhhbiByZW1vdGVzMmNvbmZpZy5zaC4uLgotc3ViIHNhbml0aXplX3JlbW90ZV9uYW1lIHsKLQlteSAoJG5hbWUpID0gQF87Ci0JJG5hbWUgPX4gdHJ7QS1aYS16MC05OiwvKy19ey59YzsKLQkkbmFtZTsKLX0KLQogc3ViIGZpbmRfZXhpc3RpbmdfcmVtb3RlIHsKIAlteSAoJHVybCwgJHJlbW90ZXMpID0gQF87CiAJcmV0dXJuIHVuZGVmIGlmICRub19yZXVzZV9leGlzdGluZzsKQEAgLTE5MDAsNyArMTkyMCw3IEBACiAKIAlmb3JlYWNoIChzb3J0IGtleXMgJSRkaXJlbnQpIHsKIAkJbmV4dCBpZiAkZGlyZW50LT57JF99LT57a2luZH0gIT0gJFNWTjo6Tm9kZTo6ZGlyOwotCQkkc2VsZi0+cHJvcF93YWxrKCRwIC4gJF8sICRyZXYsICRzdWIpOworCQkkc2VsZi0+cHJvcF93YWxrKCRzZWxmLT57cGF0aH0gLiAkcCAuICRfLCAkcmV2LCAkc3ViKTsKIAl9CiB9CiAKQEAgLTI0MjYsMTMgKzI0NDYsMTUgQEAKIAkJCSRuYW1lX2ZpZWxkID0gJDE7CiAJCX0KIAkJaWYgKCFkZWZpbmVkICRuYW1lX2ZpZWxkKSB7Ci0JCQkjCisJCQlpZiAoIWRlZmluZWQgJGVtYWlsKSB7CisJCQkJJGVtYWlsID0gJG5hbWU7CisJCQl9CiAJCX0gZWxzaWYgKCRuYW1lX2ZpZWxkID1+IC8oLio/KVxzKzwoLiopPi8pIHsKIAkJCSgkbmFtZSwgJGVtYWlsKSA9ICgkMSwgJDIpOwogCQl9IGVsc2lmICgkbmFtZV9maWVsZCA9fiAvKC4qKUAvKSB7CiAJCQkoJG5hbWUsICRlbWFpbCkgPSAoJDEsICRuYW1lX2ZpZWxkKTsKIAkJfSBlbHNlIHsKLQkJCSgkbmFtZSwgJGVtYWlsKSA9ICgkbmFtZV9maWVsZCwgJ3Vua25vd24nKTsKKwkJCSgkbmFtZSwgJGVtYWlsKSA9ICgkbmFtZV9maWVsZCwgJG5hbWVfZmllbGQpOwogCQl9CiAJfQogCWlmIChkZWZpbmVkICRoZWFkcmV2ICYmICRzZWxmLT51c2Vfc3ZtX3Byb3BzKSB7CkBAIC0yNTUwLDggKzI1NzIsOCBAQAogCW15ICgkbG9nLCAkY3R4KSA9CiAJICAgIGNvbW1hbmRfb3V0cHV0X3BpcGUocXcvcmV2LWxpc3QgLS1wcmV0dHk9cmF3IC0tbm8tY29sb3IgLS1yZXZlcnNlLywKIAkgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+cmVmbmFtZSwgJy0tJyk7Ci0JbXkgJGZ1bGxfdXJsID0gJHNlbGYtPmZ1bGxfdXJsOwotCXJlbW92ZV91c2VybmFtZSgkZnVsbF91cmwpOworCW15ICRtZXRhZGF0YV91cmwgPSAkc2VsZi0+bWV0YWRhdGFfdXJsOworCXJlbW92ZV91c2VybmFtZSgkbWV0YWRhdGFfdXJsKTsKIAlteSAkc3ZuX3V1aWQgPSAkc2VsZi0+cmFfdXVpZDsKIAlteSAkYzsKIAl3aGlsZSAoPCRsb2c+KSB7CkBAIC0yNTY5LDcgKzI1OTEsNyBAQAogCQkjIGlmIHdlIG1lcmdlZCBvciBvdGhlcndpc2Ugc3RhcnRlZCBlbHNld2hlcmUsIHRoaXMgaXMKIAkJIyBob3cgd2UgYnJlYWsgb3V0IG9mIGl0CiAJCWlmICgoJHV1aWQgbmUgJHN2bl91dWlkKSB8fAotCQkgICAgKCRmdWxsX3VybCAmJiAkdXJsICYmICgkdXJsIG5lICRmdWxsX3VybCkpKSB7CisJCSAgICAoJG1ldGFkYXRhX3VybCAmJiAkdXJsICYmICgkdXJsIG5lICRtZXRhZGF0YV91cmwpKSkgewogCQkJbmV4dDsKIAkJfQogCkBAIC0yODI2LDcgKzI4NDgsNyBAQAogCXVubGVzcyAoZGVmaW5lZCAkcmVmX2lkICYmIGxlbmd0aCAkcmVmX2lkKSB7CiAJCSRfWzJdID0gJHJlZl9pZCA9ICRHaXQ6OlNWTjo6ZGVmYXVsdF9yZWZfaWQ7CiAJfQotCSRfWzFdID0gJHJlcG9faWQgPSBzYW5pdGl6ZV9yZW1vdGVfbmFtZSgkcmVwb19pZCk7CisJJF9bMV0gPSAkcmVwb19pZDsKIAlteSAkZGlyID0gIiRFTlZ7R0lUX0RJUn0vc3ZuLyRyZWZfaWQiOwogCSRfWzNdID0gJHBhdGggPSAnJyB1bmxlc3MgKGRlZmluZWQgJHBhdGgpOwogCW1rcGF0aChbIiRFTlZ7R0lUX0RJUn0vc3ZuIl0pOwpAQCAtMzAxMyw2ICszMDM1LDcgQEAKIHVzZSBzdHJpY3Q7CiB1c2Ugd2FybmluZ3M7CiB1c2UgQ2FycCBxdy9jcm9hay87Cit1c2UgRmlsZTo6VGVtcCBxdy90ZW1wZmlsZS87CiB1c2UgSU86OkZpbGUgcXcvLzsKIAogIyBmaWxlIGJhdG9uIG1lbWJlcnM6IHBhdGgsIG1vZGVfYSwgbW9kZV9iLCBwb29sLCBmaCwgYmxvYiwgYmFzZQpAQCAtMzE2OCwxNCArMzE5MSw5IEBACiAJbXkgJGJhc2UgPSBJTzo6RmlsZS0+bmV3X3RtcGZpbGU7CiAJJGJhc2UtPmF1dG9mbHVzaCgxKTsKIAlpZiAoJGZiLT57YmxvYn0pIHsKLQkJZGVmaW5lZCAobXkgJHBpZCA9IGZvcmspIG9yIGNyb2FrICQhOwotCQlpZiAoISRwaWQpIHsKLQkJCW9wZW4gU1RET1VULCAnPiYnLCAkYmFzZSBvciBjcm9hayAkITsKLQkJCXByaW50IFNURE9VVCAnbGluayAnIGlmICgkZmItPnttb2RlX2F9ID09IDEyMDAwMCk7Ci0JCQlleGVjIHF3L2dpdC1jYXQtZmlsZSBibG9iLywgJGZiLT57YmxvYn0gb3IgY3JvYWsgJCE7Ci0JCX0KLQkJd2FpdHBpZCAkcGlkLCAwOwotCQljcm9hayAkPyBpZiAkPzsKKwkJcHJpbnQgJGJhc2UgJ2xpbmsgJyBpZiAoJGZiLT57bW9kZV9hfSA9PSAxMjAwMDApOworCQlteSAkc2l6ZSA9ICQ6Ol9yZXBvc2l0b3J5LT5jYXRfYmxvYigkZmItPntibG9ifSwgJGJhc2UpOworCQlkaWUgIkZhaWxlZCB0byByZWFkIG9iamVjdCAkZmItPntibG9ifSIgaWYgKCRzaXplIDwgMCk7CiAKIAkJaWYgKGRlZmluZWQgJGV4cCkgewogCQkJc2VlayAkYmFzZSwgMCwgMCBvciBjcm9hayAkITsKQEAgLTMyMTYsMTQgKzMyMzQsMjEgQEAKIAkJCQlzeXNzZWVrKCRmaCwgMCwgMCkgb3IgY3JvYWsgJCE7CiAJCQl9CiAJCX0KLQkJZGVmaW5lZChteSAkcGlkID0gb3BlbiBteSAkb3V0LCctfCcpIG9yIGRpZSAiQ2FuJ3QgZm9yazogJCFcbiI7Ci0JCWlmICghJHBpZCkgewotCQkJb3BlbiBTVERJTiwgJzwmJywgJGZoIG9yIGNyb2FrICQhOwotCQkJZXhlYyBxdy9naXQtaGFzaC1vYmplY3QgLXcgLS1zdGRpbi8gb3IgY3JvYWsgJCE7CisKKwkJbXkgKCR0bXBfZmgsICR0bXBfZmlsZW5hbWUpID0gRmlsZTo6VGVtcDo6dGVtcGZpbGUoVU5MSU5LID0+IDEpOworCQlteSAkcmVzdWx0OworCQl3aGlsZSAoJHJlc3VsdCA9IHN5c3JlYWQoJGZoLCBteSAkc3RyaW5nLCAxMDI0KSkgeworCQkJbXkgJHdyb3RlID0gc3lzd3JpdGUoJHRtcF9maCwgJHN0cmluZywgJHJlc3VsdCk7CisJCQlkZWZpbmVkKCR3cm90ZSkgJiYgJHdyb3RlID09ICRyZXN1bHQKKwkJCQlvciBjcm9haygid3JpdGUgJHRtcF9maWxlbmFtZTogJCFcbiIpOwogCQl9Ci0JCWNob21wKCRoYXNoID0gZG8geyBsb2NhbCAkLzsgPCRvdXQ+IH0pOwotCQljbG9zZSAkb3V0IG9yIGNyb2FrICQhOworCQlkZWZpbmVkICRyZXN1bHQgb3IgY3JvYWsgJCE7CisJCWNsb3NlICR0bXBfZmggb3IgY3JvYWsgJCE7CisKIAkJY2xvc2UgJGZoIG9yIGNyb2FrICQhOworCisJCSRoYXNoID0gJDo6X3JlcG9zaXRvcnktPmhhc2hfYW5kX2luc2VydF9vYmplY3QoJHRtcF9maWxlbmFtZSk7CisJCXVubGluaygkdG1wX2ZpbGVuYW1lKTsKIAkJJGhhc2ggPX4gL15bYS1mXGRdezQwfSQvIG9yIGRpZSAibm90IGEgc2hhMTogJGhhc2hcbiI7CiAJCWNsb3NlICRmYi0+e2Jhc2V9IG9yIGNyb2FrICQhOwogCX0gZWxzZSB7CkBAIC0zNTQ5LDEzICszNTc0LDggQEAKIAl9IGVsc2lmICgkbS0+e21vZGVfYX0gPX4gL14xMjAvICYmICRtLT57bW9kZV9ifSAhfiAvXjEyMC8pIHsKIAkJJHNlbGYtPmNoYW5nZV9maWxlX3Byb3AoJGZiYXQsJ3N2bjpzcGVjaWFsJyx1bmRlZik7CiAJfQotCWRlZmluZWQobXkgJHBpZCA9IGZvcmspIG9yIGNyb2FrICQhOwotCWlmICghJHBpZCkgewotCQlvcGVuIFNURE9VVCwgJz4mJywgJGZoIG9yIGNyb2FrICQhOwotCQlleGVjIHF3L2dpdC1jYXQtZmlsZSBibG9iLywgJG0tPntzaGExX2J9IG9yIGNyb2FrICQhOwotCX0KLQl3YWl0cGlkICRwaWQsIDA7Ci0JY3JvYWsgJD8gaWYgJD87CisJbXkgJHNpemUgPSAkOjpfcmVwb3NpdG9yeS0+Y2F0X2Jsb2IoJG0tPntzaGExX2J9LCAkZmgpOworCWNyb2FrICJGYWlsZWQgdG8gcmVhZCBvYmplY3QgJG0tPntzaGExX2J9IiBpZiAoJHNpemUgPCAwKTsKIAkkZmgtPmZsdXNoID09IDAgb3IgY3JvYWsgJCE7CiAJc2VlayAkZmgsIDAsIDAgb3IgY3JvYWsgJCE7CiAKQEAgLTM2NjksNyArMzY4OSw3IEBACiAJbXkgKCR1cmkpID0gQF87CiAJbXkgQHRtcDsKIAlmb3JlYWNoIChzcGxpdCBtey99LCAkdXJpKSB7Ci0JCXMvKFteXHcuJS1dfCUoPyFbYS1mQS1GMC05XXsyfSkpL3NwcmludGYoIiUlJTAyWCIsb3JkKCQxKSkvZWc7CisJCXMvKFteXHcuJSstXXwlKD8hW2EtZkEtRjAtOV17Mn0pKS9zcHJpbnRmKCIlJSUwMlgiLG9yZCgkMSkpL2VnOwogCQlwdXNoIEB0bXAsICRfOwogCX0KIAlqb2luKCcvJywgQHRtcCk7CkBAIC00NDY0LDE5ICs0NDg0LDUxIEBACiB9CiAKIHN1YiBjbWRfYmxhbWUgewotCW15ICRwYXRoID0gc2hpZnQ7CisJbXkgJHBhdGggPSBwb3A7CiAKIAljb25maWdfcGFnZXIoKTsKIAlydW5fcGFnZXIoKTsKIAotCW15ICgkZmgsICRjdHgpID0gY29tbWFuZF9vdXRwdXRfcGlwZSgnYmxhbWUnLCBAXywgJHBhdGgpOwotCXdoaWxlIChteSAkbGluZSA9IDwkZmg+KSB7Ci0JCWlmICgkbGluZSA9fiAvXlxePyhbWzp4ZGlnaXQ6XV0rKVxzLykgewotCQkJbXkgKHVuZGVmLCAkcmV2LCB1bmRlZikgPSA6OmNtdF9tZXRhZGF0YSgkMSk7Ci0JCQkkcmV2ID0gc3ByaW50ZignJS0xMHMnLCAkcmV2KTsKLQkJCSRsaW5lID1+IHMvXlxeP1tbOnhkaWdpdDpdXSsoXHMpLyRyZXYkMS87CisJbXkgKCRmaCwgJGN0eCwgJHJldik7CisKKwlpZiAoJF9naXRfZm9ybWF0KSB7CisJCSgkZmgsICRjdHgpID0gY29tbWFuZF9vdXRwdXRfcGlwZSgnYmxhbWUnLCBAXywgJHBhdGgpOworCQl3aGlsZSAobXkgJGxpbmUgPSA8JGZoPikgeworCQkJaWYgKCRsaW5lID1+IC9eXF4/KFtbOnhkaWdpdDpdXSspXHMvKSB7CisJCQkJIyBVbmNvbW1pdHRlZCBlZGl0cyBzaG93IHVwIGFzIGEgcmV2IElEIG9mCisJCQkJIyBhbGwgemVyb3MsIHdoaWNoIHdlIGNhbid0IGxvb2sgdXAgd2l0aAorCQkJCSMgY210X21ldGFkYXRhCisJCQkJaWYgKCQxICF+IC9eMCskLykgeworCQkJCQkodW5kZWYsICRyZXYsIHVuZGVmKSA9CisJCQkJCQk6OmNtdF9tZXRhZGF0YSgkMSk7CisJCQkJCSRyZXYgPSAnMCcgaWYgKCEkcmV2KTsKKwkJCQl9IGVsc2UgeworCQkJCQkkcmV2ID0gJzAnOworCQkJCX0KKwkJCQkkcmV2ID0gc3ByaW50ZignJS0xMHMnLCAkcmV2KTsKKwkJCQkkbGluZSA9fiBzL15cXj9bWzp4ZGlnaXQ6XV0rKFxzKS8kcmV2JDEvOworCQkJfQorCQkJcHJpbnQgJGxpbmU7CiAJCX0KLQkJcHJpbnQgJGxpbmU7CisJfSBlbHNlIHsKKwkJKCRmaCwgJGN0eCkgPSBjb21tYW5kX291dHB1dF9waXBlKCdibGFtZScsICctcCcsIEBfLCAnSEVBRCcsCisJCQkJCQkgICctLScsICRwYXRoKTsKKwkJbXkgKCRzaGExKTsKKwkJbXkgJWF1dGhvcnM7CisJCXdoaWxlIChteSAkbGluZSA9IDwkZmg+KSB7CisJCQlpZiAoJGxpbmUgPX4gL14oW1s6eGRpZ2l0Ol1dezQwfSlcc1xkK1xzXGQrLykgeworCQkJCSRzaGExID0gJDE7CisJCQkJKHVuZGVmLCAkcmV2LCB1bmRlZikgPSA6OmNtdF9tZXRhZGF0YSgkMSk7CisJCQkJJHJldiA9ICcwJyBpZiAoISRyZXYpOworCQkJfQorCQkJZWxzaWYgKCRsaW5lID1+IC9eYXV0aG9yICguKikvKSB7CisJCQkJJGF1dGhvcnN7JHJldn0gPSAkMTsKKwkJCQkkYXV0aG9yc3skcmV2fSA9fiBzL1xzL18vZzsKKwkJCX0KKwkJCWVsc2lmICgkbGluZSA9fiAvXlx0KC4qKSQvKSB7CisJCQkJcHJpbnRmKCIlNnMgJTEwcyAlc1xuIiwgJHJldiwgJGF1dGhvcnN7JHJldn0sICQxKTsKKwkJCX0KKwkJfQogCX0KIAljb21tYW5kX2Nsb3NlX3BpcGUoJGZoLCAkY3R4KTsKIH0KQEAgLTQ2NTAsOCArNDcwMiw3IEBACiAKIAkJIyBza2lwIGV4aXN0aW5nIGNhc2VzIHdoZXJlIHdlIGFscmVhZHkgY29ubmVjdCB0byB0aGUgcm9vdAogCQlpZiAoKCRyYS0+e3VybH0gZXEgJHJhLT57cmVwb3Nfcm9vdH0pIHx8Ci0JCSAgICAoR2l0OjpTVk46OnNhbml0aXplX3JlbW90ZV9uYW1lKCRyYS0+e3JlcG9zX3Jvb3R9KSBlcQotCQkgICAgICRyZXBvX2lkKSkgeworCQkgICAgKCRyYS0+e3JlcG9zX3Jvb3R9IGVxICRyZXBvX2lkKSkgewogCQkJJHJvb3RfcmVwb3MtPnskcmEtPnt1cmx9fSA9ICRyZXBvX2lkOwogCQkJbmV4dDsKIAkJfQpAQCAtNDY5MCw4ICs0NzQxLDcgQEAKIAlmb3JlYWNoIG15ICR1cmwgKGtleXMgJSRuZXdfdXJscykgewogCQkjIHNlZSBpZiB3ZSBjYW4gcmUtdXNlIGFuIGV4aXN0aW5nIFtzdm4tcmVtb3RlICJyZXBvX2lkIl0KIAkJIyBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEobiB1Z2x5KSBuZXcgc2VjdGlvbjoKLQkJbXkgJHJlcG9faWQgPSAkcm9vdF9yZXBvcy0+eyR1cmx9IHx8Ci0JCSAgICAgICAgICAgICAgR2l0OjpTVk46OnNhbml0aXplX3JlbW90ZV9uYW1lKCR1cmwpOworCQlteSAkcmVwb19pZCA9ICRyb290X3JlcG9zLT57JHVybH0gfHwgJHVybDsKIAogCQlteSAkZmV0Y2ggPSAkbmV3X3VybHMtPnskdXJsfTsKIAkJZm9yZWFjaCBteSAkcGF0aCAoa2V5cyAlJGZldGNoKSB7CmRpZmYgLS1naXQgYS9naXQuYyBiL2dpdC5jCmluZGV4IGM0ZTQ2NDRiLi41OWYwZmNjIDEwMDY0NAotLS0gYS9naXQuYworKysgYi9naXQuYwpAQCAtNiw2ICs2LDkgQEAKIGNvbnN0IGNoYXIgZ2l0X3VzYWdlX3N0cmluZ1tdID0KIAkiZ2l0IFstLXZlcnNpb25dIFstLWV4ZWMtcGF0aFs9R0lUX0VYRUNfUEFUSF1dIFstcHwtLXBhZ2luYXRlfC0tbm8tcGFnZXJdIFstLWJhcmVdIFstLWdpdC1kaXI9R0lUX0RJUl0gWy0td29yay10cmVlPUdJVF9XT1JLX1RSRUVdIFstLWhlbHBdIENPTU1BTkQgW0FSR1NdIjsKIAorY29uc3QgY2hhciBnaXRfbW9yZV9pbmZvX3N0cmluZ1tdID0KKwkiU2VlICdnaXQgaGVscCBDT01NQU5EJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBhIHNwZWNpZmljIGNvbW1hbmQuIjsKKwogc3RhdGljIGludCBoYW5kbGVfb3B0aW9ucyhjb25zdCBjaGFyKioqIGFyZ3YsIGludCogYXJnYywgaW50KiBlbnZjaGFuZ2VkKQogewogCWludCBoYW5kbGVkID0gMDsKQEAgLTI4Myw5ICsyODYsMTAgQEAKIAkJeyAiY2hlY2tvdXQtaW5kZXgiLCBjbWRfY2hlY2tvdXRfaW5kZXgsCiAJCQlSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRX0sCiAJCXsgImNoZWNrLXJlZi1mb3JtYXQiLCBjbWRfY2hlY2tfcmVmX2Zvcm1hdCB9LAotCQl7ICJjaGVjay1hdHRyIiwgY21kX2NoZWNrX2F0dHIsIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCisJCXsgImNoZWNrLWF0dHIiLCBjbWRfY2hlY2tfYXR0ciwgUlVOX1NFVFVQIH0sCiAJCXsgImNoZXJyeSIsIGNtZF9jaGVycnksIFJVTl9TRVRVUCB9LAogCQl7ICJjaGVycnktcGljayIsIGNtZF9jaGVycnlfcGljaywgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfSwKKwkJeyAiY2xvbmUiLCBjbWRfY2xvbmUgfSwKIAkJeyAiY2xlYW4iLCBjbWRfY2xlYW4sIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCiAJCXsgImNvbW1pdCIsIGNtZF9jb21taXQsIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCiAJCXsgImNvbW1pdC10cmVlIiwgY21kX2NvbW1pdF90cmVlLCBSVU5fU0VUVVAgfSwKQEAgLTI5Myw3ICsyOTcsNyBAQAogCQl7ICJjb3VudC1vYmplY3RzIiwgY21kX2NvdW50X29iamVjdHMsIFJVTl9TRVRVUCB9LAogCQl7ICJkZXNjcmliZSIsIGNtZF9kZXNjcmliZSwgUlVOX1NFVFVQIH0sCiAJCXsgImRpZmYiLCBjbWRfZGlmZiB9LAotCQl7ICJkaWZmLWZpbGVzIiwgY21kX2RpZmZfZmlsZXMgfSwKKwkJeyAiZGlmZi1maWxlcyIsIGNtZF9kaWZmX2ZpbGVzLCBSVU5fU0VUVVAgfSwKIAkJeyAiZGlmZi1pbmRleCIsIGNtZF9kaWZmX2luZGV4LCBSVU5fU0VUVVAgfSwKIAkJeyAiZGlmZi10cmVlIiwgY21kX2RpZmZfdHJlZSwgUlVOX1NFVFVQIH0sCiAJCXsgImZhc3QtZXhwb3J0IiwgY21kX2Zhc3RfZXhwb3J0LCBSVU5fU0VUVVAgfSwKQEAgLTM0Nyw3ICszNTEsNyBAQAogCQl7ICJzaG9ydGxvZyIsIGNtZF9zaG9ydGxvZywgVVNFX1BBR0VSIH0sCiAJCXsgInNob3ctYnJhbmNoIiwgY21kX3Nob3dfYnJhbmNoLCBSVU5fU0VUVVAgfSwKIAkJeyAic2hvdyIsIGNtZF9zaG93LCBSVU5fU0VUVVAgfCBVU0VfUEFHRVIgfSwKLQkJeyAic3RhdHVzIiwgY21kX3N0YXR1cywgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfSwKKwkJeyAic3RhdHVzIiwgY21kX3N0YXR1cywgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfCBVU0VfUEFHRVIgfSwKIAkJeyAic3RyaXBzcGFjZSIsIGNtZF9zdHJpcHNwYWNlIH0sCiAJCXsgInN5bWJvbGljLXJlZiIsIGNtZF9zeW1ib2xpY19yZWYsIFJVTl9TRVRVUCB9LAogCQl7ICJ0YWciLCBjbWRfdGFnLCBSVU5fU0VUVVAgfSwKQEAgLTQyNiw2ICs0MzAsNyBAQAogCQkvKiBUaGUgdXNlciBkaWRuJ3Qgc3BlY2lmeSBhIGNvbW1hbmQ7IGdpdmUgdGhlbSBoZWxwICovCiAJCXByaW50ZigidXNhZ2U6ICVzXG5cbiIsIGdpdF91c2FnZV9zdHJpbmcpOwogCQlsaXN0X2NvbW1vbl9jbWRzX2hlbHAoKTsKKwkJcHJpbnRmKCJcbiVzXG4iLCBnaXRfbW9yZV9pbmZvX3N0cmluZyk7CiAJCWV4aXQoMSk7CiAJfQogCWNtZCA9IGFyZ3ZbMF07CmRpZmYgLS1naXQgYS9naXQuc3BlYy5pbiBiL2dpdC5zcGVjLmluCmluZGV4IDk3YTI2YmUuLjNkN2YzZWYgMTAwNjQ0Ci0tLSBhL2dpdC5zcGVjLmluCisrKyBiL2dpdC5zcGVjLmluCkBAIC0xMiw3ICsxMiw3IEBACiBCdWlsZFJvb3Q6CSV7X3RtcHBhdGh9LyV7bmFtZX0tJXt2ZXJzaW9ufS0le3JlbGVhc2V9LXJvb3QtJSgle19faWRfdX0gLW4pCiAKIFJlcXVpcmVzOglwZXJsLUdpdCA9ICV7dmVyc2lvbn0tJXtyZWxlYXNlfQotUmVxdWlyZXM6CXpsaWIgPj0gMS4yLCByc3luYywgY3VybCwgbGVzcywgb3BlbnNzaC1jbGllbnRzLCBleHBhdAorUmVxdWlyZXM6CXpsaWIgPj0gMS4yLCByc3luYywgbGVzcywgb3BlbnNzaC1jbGllbnRzLCBleHBhdAogUHJvdmlkZXM6CWdpdC1jb3JlID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9CiBPYnNvbGV0ZXM6CWdpdC1jb3JlIDw9IDEuNS40LjIKIE9ic29sZXRlczoJZ2l0LXA0CkBAIC0xODcsNiArMTg3LDkgQEAKICMgTm8gZmlsZXMgZm9yIHlvdSEKIAogJWNoYW5nZWxvZworKiBTdW4gSnVuIDE1IDIwMDggSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgorLSBSZW1vdmUgY3VybCBmcm9tIFJlcXVpcmVzIGxpc3QuCisKICogRnJpIEZlYiAxNSAyMDA4IEtyaXN0aWFuIEjDuGdzYmVyZyA8a3JoQHJlZGhhdC5jb20+CiAtIFJlbmFtZSBnaXQtY29yZSB0byBqdXN0IGdpdCBhbmQgcmVuYW1lIG1ldGEgcGFja2FnZSBmcm9tIGdpdCB0byBnaXQtYWxsLgogCmRpZmYgLS1naXQgYS9naXRrLWdpdC9NYWtlZmlsZSBiL2dpdGstZ2l0L01ha2VmaWxlCmluZGV4IGY5MGRmYWIuLmUxYjYwNDUgMTAwNjQ0Ci0tLSBhL2dpdGstZ2l0L01ha2VmaWxlCisrKyBiL2dpdGstZ2l0L01ha2VmaWxlCkBAIC00MCw5ICs0MCw5IEBACiBhbGw6OiBnaXRrLXdpc2ggJChBTExfTVNHRklMRVMpCiAKIGluc3RhbGw6OiBhbGwKLQkkKElOU1RBTEwpIGdpdGstd2lzaCAnJChERVNURElSX1NRKSQoYmluZGlyX1NRKScvZ2l0awotCSQoSU5TVEFMTCkgLWQgJyQoREVTVERJUl9TUSkkKG1zZ3NkaXJfU1EpJwotCSQoZm9yZWFjaCBwLCQoQUxMX01TR0ZJTEVTKSwgJChJTlNUQUxMKSAkcCAnJChERVNURElSX1NRKSQobXNnc2Rpcl9TUSknICYmKSB0cnVlCisJJChJTlNUQUxMKSAtbSA3NTUgZ2l0ay13aXNoICckKERFU1RESVJfU1EpJChiaW5kaXJfU1EpJy9naXRrCisJJChJTlNUQUxMKSAtZCAtbSA3NTUgJyQoREVTVERJUl9TUSkkKG1zZ3NkaXJfU1EpJworCSQoZm9yZWFjaCBwLCQoQUxMX01TR0ZJTEVTKSwgJChJTlNUQUxMKSAtbSA2NDQgJHAgJyQoREVTVERJUl9TUSkkKG1zZ3NkaXJfU1EpJyAmJikgdHJ1ZQogCiB1bmluc3RhbGw6OgogCSQoZm9yZWFjaCBwLCQoQUxMX01TR0ZJTEVTKSwgJChSTSkgJyQoREVTVERJUl9TUSkkKG1zZ3NkaXJfU1EpJy8kKG5vdGRpciAkcCkgJiYpIHRydWUKZGlmZiAtLWdpdCBhL2dpdGstZ2l0L2dpdGsgYi9naXRrLWdpdC9naXRrCmluZGV4IDlhNGQ5YzQuLmZkZGNiNDUgMTAwNjQ0Ci0tLSBhL2dpdGstZ2l0L2dpdGsKKysrIGIvZ2l0ay1naXQvZ2l0awpAQCAtMiw3ICsyLDcgQEAKICMgVGNsIGlnbm9yZXMgdGhlIG5leHQgbGluZSAtKi0gdGNsIC0qLSBcCiBleGVjIHdpc2ggIiQwIiAtLSAiJEAiCiAKLSMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgUGF1bCBNYWNrZXJyYXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgwqkgMjAwNS0yMDA4IFBhdWwgTWFja2VycmFzLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IGl0IG1heSBiZSB1c2VkLCBjb3BpZWQsIG1vZGlmaWVkCiAjIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlLAogIyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgpAQCAtNDcsMTIgKzQ3LDI0IEBACiAgICAgbGFwcGVuZCBydW5xIFtsaXN0ICRmZCAkc2NyaXB0XQogfQogCitwcm9jIG51a2VmaWxlIHtmZH0geworICAgIGdsb2JhbCBydW5xCisKKyAgICBmb3Ige3NldCBpIDB9IHskaSA8IFtsbGVuZ3RoICRydW5xXX0ge30geworCWlmIHtbbGluZGV4ICRydW5xICRpIDBdIGVxICRmZH0geworCSAgICBzZXQgcnVucSBbbHJlcGxhY2UgJHJ1bnEgJGkgJGldCisJfSBlbHNlIHsKKwkgICAgaW5jciBpCisJfQorICAgIH0KK30KKwogcHJvYyBkb3J1bnEge30gewogICAgIGdsb2JhbCBpc29ucnVucSBydW5xCiAKICAgICBzZXQgdHN0YXJ0IFtjbG9jayBjbGlja3MgLW1pbGxpc2Vjb25kc10KICAgICBzZXQgdDAgJHRzdGFydAotICAgIHdoaWxlIHskcnVucSBuZSB7fX0geworICAgIHdoaWxlIHtbbGxlbmd0aCAkcnVucV0gPiAwfSB7CiAJc2V0IGZkIFtsaW5kZXggJHJ1bnEgMCAwXQogCXNldCBzY3JpcHQgW2xpbmRleCAkcnVucSAwIDFdCiAJc2V0IHJlcGVhdCBbZXZhbCAkc2NyaXB0XQpAQCAtNzgsNzcgKzkwLDQyNyBAQAogICAgIH0KIH0KIAotIyBTdGFydCBvZmYgYSBnaXQgcmV2LWxpc3QgcHJvY2VzcyBhbmQgYXJyYW5nZSB0byByZWFkIGl0cyBvdXRwdXQKK3Byb2MgdW5tZXJnZWRfZmlsZXMge2ZpbGVzfSB7CisgICAgZ2xvYmFsIG5yX3VubWVyZ2VkCisKKyAgICAjIGZpbmQgdGhlIGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXMKKyAgICBzZXQgbWxpc3Qge30KKyAgICBzZXQgbnJfdW5tZXJnZWQgMAorICAgIGlmIHtbY2F0Y2ggeworCXNldCBmZCBbb3BlbiAifCBnaXQgbHMtZmlsZXMgLXUiIHJdCisgICAgfSBlcnJdfSB7CisJc2hvd19lcnJvciB7fSAuICJbbWMgIkNvdWxkbid0IGdldCBsaXN0IG9mIHVubWVyZ2VkIGZpbGVzOiJdICRlcnIiCisJZXhpdCAxCisgICAgfQorICAgIHdoaWxlIHtbZ2V0cyAkZmQgbGluZV0gPj0gMH0geworCXNldCBpIFtzdHJpbmcgZmlyc3QgIlx0IiAkbGluZV0KKwlpZiB7JGkgPCAwfSBjb250aW51ZQorCXNldCBmbmFtZSBbc3RyaW5nIHJhbmdlICRsaW5lIFtleHByIHskaSsxfV0gZW5kXQorCWlmIHtbbHNlYXJjaCAtZXhhY3QgJG1saXN0ICRmbmFtZV0gPj0gMH0gY29udGludWUKKwlpbmNyIG5yX3VubWVyZ2VkCisJaWYgeyRmaWxlcyBlcSB7fSB8fCBbcGF0aF9maWx0ZXIgJGZpbGVzICRmbmFtZV19IHsKKwkgICAgbGFwcGVuZCBtbGlzdCAkZm5hbWUKKwl9CisgICAgfQorICAgIGNhdGNoIHtjbG9zZSAkZmR9CisgICAgcmV0dXJuICRtbGlzdAorfQorCitwcm9jIHBhcnNldmlld2FyZ3Mge24gYXJnbGlzdH0geworICAgIGdsb2JhbCB2ZGF0ZW1vZGUgdm1lcmdlb25seSB2ZmxhZ3MgdmRmbGFncyB2cmV2cyB2ZmlsdGVyZWQgdm9yaWdhcmdzCisKKyAgICBzZXQgdmRhdGVtb2RlKCRuKSAwCisgICAgc2V0IHZtZXJnZW9ubHkoJG4pIDAKKyAgICBzZXQgZ2xmbGFncyB7fQorICAgIHNldCBkaWZmYXJncyB7fQorICAgIHNldCBuZXh0aXN2YWwgMAorICAgIHNldCByZXZhcmdzIHt9CisgICAgc2V0IG9yaWdhcmdzICRhcmdsaXN0CisgICAgc2V0IGFsbGtub3duIDEKKyAgICBzZXQgZmlsdGVyZWQgMAorICAgIHNldCBpIC0xCisgICAgZm9yZWFjaCBhcmcgJGFyZ2xpc3QgeworCWluY3IgaQorCWlmIHskbmV4dGlzdmFsfSB7CisJICAgIGxhcHBlbmQgZ2xmbGFncyAkYXJnCisJICAgIHNldCBuZXh0aXN2YWwgMAorCSAgICBjb250aW51ZQorCX0KKwlzd2l0Y2ggLWdsb2IgLS0gJGFyZyB7CisJICAgICItZCIgLQorCSAgICAiLS1kYXRlLW9yZGVyIiB7CisJCXNldCB2ZGF0ZW1vZGUoJG4pIDEKKwkJIyByZW1vdmUgZnJvbSBvcmlnYXJncyBpbiBjYXNlIHdlIGhpdCBhbiB1bmtub3duIG9wdGlvbgorCQlzZXQgb3JpZ2FyZ3MgW2xyZXBsYWNlICRvcmlnYXJncyAkaSAkaV0KKwkJaW5jciBpIC0xCisJICAgIH0KKwkgICAgIyBUaGVzZSByZXF1ZXN0IG9yIGFmZmVjdCBkaWZmIG91dHB1dCwgd2hpY2ggd2UgZG9uJ3Qgd2FudC4KKwkgICAgIyBTb21lIGNvdWxkIGJlIHVzZWQgdG8gc2V0IG91ciBkZWZhdWx0cyBmb3IgZGlmZiBkaXNwbGF5LgorCSAgICAiLVtwdWFid2NyUkJNQ10iIC0KKwkgICAgIi0tbm8tcmVuYW1lcyIgLSAiLS1mdWxsLWluZGV4IiAtICItLWJpbmFyeSIgLSAiLS1hYmJyZXY9KiIgLQorCSAgICAiLS1maW5kLWNvcGllcy1oYXJkZXIiIC0gIi1sKiIgLSAiLS1leHQtZGlmZiIgLSAiLS1uby1leHQtZGlmZiIgLQorCSAgICAiLS1zcmMtcHJlZml4PSoiIC0gIi0tZHN0LXByZWZpeD0qIiAtICItLW5vLXByZWZpeCIgLQorCSAgICAiLU8qIiAtICItLXRleHQiIC0gIi0tZnVsbC1kaWZmIiAtICItLWlnbm9yZS1zcGFjZS1hdC1lb2wiIC0KKwkgICAgIi0taWdub3JlLXNwYWNlLWNoYW5nZSIgLSAiLVUqIiAtICItLXVuaWZpZWQ9KiIgeworCQlsYXBwZW5kIGRpZmZhcmdzICRhcmcKKwkgICAgfQorCSAgICAjIFRoZXNlIGNhdXNlIG91ciBwYXJzaW5nIG9mIGdpdCBsb2cncyBvdXRwdXQgdG8gZmFpbCwgb3IgZWxzZQorCSAgICAjIHRoZXkncmUgb3B0aW9ucyB3ZSB3YW50IHRvIHNldCBvdXJzZWx2ZXMsIHNvIGlnbm9yZSB0aGVtLgorCSAgICAiLS1yYXciIC0gIi0tcGF0Y2gtd2l0aC1yYXciIC0gIi0tcGF0Y2gtd2l0aC1zdGF0IiAtCisJICAgICItLW5hbWUtb25seSIgLSAiLS1uYW1lLXN0YXR1cyIgLSAiLS1jb2xvciIgLSAiLS1jb2xvci13b3JkcyIgLQorCSAgICAiLS1sb2ctc2l6ZSIgLSAiLS1wcmV0dHk9KiIgLSAiLS1kZWNvcmF0ZSIgLSAiLS1hYmJyZXYtY29tbWl0IiAtCisJICAgICItLWNjIiAtICIteiIgLSAiLS1oZWFkZXIiIC0gIi0tcGFyZW50cyIgLSAiLS1ib3VuZGFyeSIgLQorCSAgICAiLS1uby1jb2xvciIgLSAiLWciIC0gIi0td2Fsay1yZWZsb2dzIiAtICItLW5vLXdhbGsiIC0KKwkgICAgIi0tdGltZXN0YW1wIiAtICJyZWxhdGl2ZS1kYXRlIiAtICItLWRhdGU9KiIgLSAiLS1zdGRpbiIgLQorCSAgICAiLS1vYmplY3RzIiAtICItLW9iamVjdHMtZWRnZSIgLSAiLS1yZXZlcnNlIiB7CisJICAgIH0KKwkgICAgIyBUaGVzZSBhcmUgaGFybWxlc3MsIGFuZCBzb21lIGFyZSBldmVuIHVzZWZ1bAorCSAgICAiLS1zdGF0PSoiIC0gIi0tbnVtc3RhdCIgLSAiLS1zaG9ydHN0YXQiIC0gIi0tc3VtbWFyeSIgLQorCSAgICAiLS1jaGVjayIgLSAiLS1leGl0LWNvZGUiIC0gIi0tcXVpZXQiIC0gIi0tdG9wby1vcmRlciIgLQorCSAgICAiLS1mdWxsLWhpc3RvcnkiIC0gIi0tZGVuc2UiIC0gIi0tc3BhcnNlIiAtCisJICAgICItLWZvbGxvdyIgLSAiLS1sZWZ0LXJpZ2h0IiAtICItLWVuY29kaW5nPSoiIHsKKwkJbGFwcGVuZCBnbGZsYWdzICRhcmcKKwkgICAgfQorCSAgICAjIFRoZXNlIG1lYW4gdGhhdCB3ZSBnZXQgYSBzdWJzZXQgb2YgdGhlIGNvbW1pdHMKKwkgICAgIi0tZGlmZi1maWx0ZXI9KiIgLSAiLS1uby1tZXJnZXMiIC0gIi0tdW5wYWNrZWQiIC0KKwkgICAgIi0tbWF4LWNvdW50PSoiIC0gIi0tc2tpcD0qIiAtICItLXNpbmNlPSoiIC0gIi0tYWZ0ZXI9KiIgLQorCSAgICAiLS11bnRpbD0qIiAtICItLWJlZm9yZT0qIiAtICItLW1heC1hZ2U9KiIgLSAiLS1taW4tYWdlPSoiIC0KKwkgICAgIi0tYXV0aG9yPSoiIC0gIi0tY29tbWl0dGVyPSoiIC0gIi0tZ3JlcD0qIiAtICItW2lFXSIgLQorCSAgICAiLS1yZW1vdmUtZW1wdHkiIC0gIi0tZmlyc3QtcGFyZW50IiAtICItLWNoZXJyeS1waWNrIiAtCisJICAgICItUyoiIC0gIi0tcGlja2F4ZS1hbGwiIC0gIi0tcGlja2F4ZS1yZWdleCIgLSB7CisJCXNldCBmaWx0ZXJlZCAxCisJCWxhcHBlbmQgZ2xmbGFncyAkYXJnCisJICAgIH0KKwkgICAgIyBUaGlzIGFwcGVhcnMgdG8gYmUgdGhlIG9ubHkgb25lIHRoYXQgaGFzIGEgdmFsdWUgYXMgYQorCSAgICAjIHNlcGFyYXRlIHdvcmQgZm9sbG93aW5nIGl0CisJICAgICItbiIgeworCQlzZXQgZmlsdGVyZWQgMQorCQlzZXQgbmV4dGlzdmFsIDEKKwkJbGFwcGVuZCBnbGZsYWdzICRhcmcKKwkgICAgfQorCSAgICAiLS1ub3QiIHsKKwkJc2V0IG5vdGZsYWcgW2V4cHIgeyEkbm90ZmxhZ31dCisJCWxhcHBlbmQgcmV2YXJncyAkYXJnCisJICAgIH0KKwkgICAgIi0tYWxsIiB7CisJCWxhcHBlbmQgcmV2YXJncyAkYXJnCisJICAgIH0KKwkgICAgIi0tbWVyZ2UiIHsKKwkJc2V0IHZtZXJnZW9ubHkoJG4pIDEKKwkJIyBnaXQgcmV2LXBhcnNlIGRvZXNuJ3QgdW5kZXJzdGFuZCAtLW1lcmdlCisJCWxhcHBlbmQgcmV2YXJncyAtLWdpdGstc3ltbWV0cmljLWRpZmYtbWFya2VyIE1FUkdFX0hFQUQuLi5IRUFECisJICAgIH0KKwkgICAgIyBPdGhlciBmbGFnIGFyZ3VtZW50cyBpbmNsdWRpbmcgLTxuPgorCSAgICAiLSoiIHsKKwkJaWYge1tzdHJpbmcgaXMgZGlnaXQgLXN0cmljdCBbc3RyaW5nIHJhbmdlICRhcmcgMSBlbmRdXX0geworCQkgICAgc2V0IGZpbHRlcmVkIDEKKwkJfSBlbHNlIHsKKwkJICAgICMgYSBmbGFnIGFyZ3VtZW50IHRoYXQgd2UgZG9uJ3QgcmVjb2duaXplOworCQkgICAgIyB0aGF0IG1lYW5zIHdlIGNhbid0IG9wdGltaXplCisJCSAgICBzZXQgYWxsa25vd24gMAorCQl9CisJCWxhcHBlbmQgZ2xmbGFncyAkYXJnCisJICAgIH0KKwkgICAgIyBOb24tZmxhZyBhcmd1bWVudHMgc3BlY2lmeSBjb21taXRzIG9yIHJhbmdlcyBvZiBjb21taXRzCisJICAgIGRlZmF1bHQgeworCQlpZiB7W3N0cmluZyBtYXRjaCAiKi4uLioiICRhcmddfSB7CisJCSAgICBsYXBwZW5kIHJldmFyZ3MgLS1naXRrLXN5bW1ldHJpYy1kaWZmLW1hcmtlcgorCQl9CisJCWxhcHBlbmQgcmV2YXJncyAkYXJnCisJICAgIH0KKwl9CisgICAgfQorICAgIHNldCB2ZGZsYWdzKCRuKSAkZGlmZmFyZ3MKKyAgICBzZXQgdmZsYWdzKCRuKSAkZ2xmbGFncworICAgIHNldCB2cmV2cygkbikgJHJldmFyZ3MKKyAgICBzZXQgdmZpbHRlcmVkKCRuKSAkZmlsdGVyZWQKKyAgICBzZXQgdm9yaWdhcmdzKCRuKSAkb3JpZ2FyZ3MKKyAgICByZXR1cm4gJGFsbGtub3duCit9CisKK3Byb2MgcGFyc2V2aWV3cmV2cyB7dmlldyByZXZzfSB7CisgICAgZ2xvYmFsIHZwb3NpZHMgdm5lZ2lkcworCisgICAgaWYgeyRyZXZzIGVxIHt9fSB7CisJc2V0IHJldnMgSEVBRAorICAgIH0KKyAgICBpZiB7W2NhdGNoIHtzZXQgaWRzIFtldmFsIGV4ZWMgZ2l0IHJldi1wYXJzZSAkcmV2c119IGVycl19IHsKKwkjIHdlIGdldCBzdGRvdXQgZm9sbG93ZWQgYnkgc3RkZXJyIGluICRlcnIKKwkjIGZvciBhbiB1bmtub3duIHJldiwgZ2l0IHJldi1wYXJzZSBlY2hvZXMgaXQgYW5kIHRoZW4gZXJyb3JzIG91dAorCXNldCBlcnJsaW5lcyBbc3BsaXQgJGVyciAiXG4iXQorCXNldCBiYWRyZXYge30KKwlmb3Ige3NldCBsIDB9IHskbCA8IFtsbGVuZ3RoICRlcnJsaW5lc119IHtpbmNyIGx9IHsKKwkgICAgc2V0IGxpbmUgW2xpbmRleCAkZXJybGluZXMgJGxdCisJICAgIGlmIHshKFtzdHJpbmcgbGVuZ3RoICRsaW5lXSA9PSA0MCAmJiBbc3RyaW5nIGlzIHhkaWdpdCAkbGluZV0pfSB7CisJCWlmIHtbc3RyaW5nIG1hdGNoICJmYXRhbDoqIiAkbGluZV19IHsKKwkJICAgIGlmIHtbc3RyaW5nIG1hdGNoICJmYXRhbDogYW1iaWd1b3VzIGFyZ3VtZW50KiIgJGxpbmVdCisJCQkmJiAkYmFkcmV2IG5lIHt9fSB7CisJCQlpZiB7W2xsZW5ndGggJGJhZHJldl0gPT0gMX0geworCQkJICAgIHNldCBlcnIgInVua25vd24gcmV2aXNpb24gJGJhZHJldiIKKwkJCX0gZWxzZSB7CisJCQkgICAgc2V0IGVyciAidW5rbm93biByZXZpc2lvbnM6IFtqb2luICRiYWRyZXYgIiwgIl0iCisJCQl9CisJCSAgICB9IGVsc2UgeworCQkJc2V0IGVyciBbam9pbiBbbHJhbmdlICRlcnJsaW5lcyAkbCBlbmRdICJcbiJdCisJCSAgICB9CisJCSAgICBicmVhaworCQl9CisJCWxhcHBlbmQgYmFkcmV2ICRsaW5lCisJICAgIH0KKwl9CQkgICAgCisJZXJyb3JfcG9wdXAgIkVycm9yIHBhcnNpbmcgcmV2aXNpb25zOiAkZXJyIgorCXJldHVybiB7fQorICAgIH0KKyAgICBzZXQgcmV0IHt9CisgICAgc2V0IHBvcyB7fQorICAgIHNldCBuZWcge30KKyAgICBzZXQgc2RtIDAKKyAgICBmb3JlYWNoIGlkIFtzcGxpdCAkaWRzICJcbiJdIHsKKwlpZiB7JGlkIGVxICItLWdpdGstc3ltbWV0cmljLWRpZmYtbWFya2VyIn0geworCSAgICBzZXQgc2RtIDQKKwl9IGVsc2VpZiB7W3N0cmluZyBtYXRjaCAiXioiICRpZF19IHsKKwkgICAgaWYgeyRzZG0gIT0gMX0geworCQlsYXBwZW5kIHJldCAkaWQKKwkJaWYgeyRzZG0gPT0gM30geworCQkgICAgc2V0IHNkbSAwCisJCX0KKwkgICAgfQorCSAgICBsYXBwZW5kIG5lZyBbc3RyaW5nIHJhbmdlICRpZCAxIGVuZF0KKwl9IGVsc2UgeworCSAgICBpZiB7JHNkbSAhPSAyfSB7CisJCWxhcHBlbmQgcmV0ICRpZAorCSAgICB9IGVsc2UgeworCQlsc2V0IHJldCBlbmQgW2xpbmRleCAkcmV0IGVuZF0uLi4kaWQKKwkgICAgfQorCSAgICBsYXBwZW5kIHBvcyAkaWQKKwl9CisJaW5jciBzZG0gLTEKKyAgICB9CisgICAgc2V0IHZwb3NpZHMoJHZpZXcpICRwb3MKKyAgICBzZXQgdm5lZ2lkcygkdmlldykgJG5lZworICAgIHJldHVybiAkcmV0Cit9CisKKyMgU3RhcnQgb2ZmIGEgZ2l0IGxvZyBwcm9jZXNzIGFuZCBhcnJhbmdlIHRvIHJlYWQgaXRzIG91dHB1dAogcHJvYyBzdGFydF9yZXZfbGlzdCB7dmlld30gewotICAgIGdsb2JhbCBzdGFydG1zZWNzCi0gICAgZ2xvYmFsIGNvbW1mZCBsZWZ0b3ZlciB0Y2xlbmNvZGluZyBkYXRlbW9kZQotICAgIGdsb2JhbCB2aWV3YXJncyB2aWV3YXJnc2NtZCB2aWV3ZmlsZXMgY29tbWl0aWR4IHZpZXdjb21wbGV0ZSB2bmV4dHJvb3QKLSAgICBnbG9iYWwgc2hvd2xvY2FsY2hhbmdlcyBjb21taXRpbnRlcmVzdCBtYWluaGVhZGlkCi0gICAgZ2xvYmFsIHByb2dyZXNzZGlybiBwcm9ncmVzc2Nvb3JkcyBwcm9nbGFzdG5jIGN1cnZpZXcKKyAgICBnbG9iYWwgc3RhcnRtc2VjcyBjb21taXRpZHggdmlld2NvbXBsZXRlIGN1cnZpZXcKKyAgICBnbG9iYWwgY29tbWZkIGxlZnRvdmVyIHRjbGVuY29kaW5nCisgICAgZ2xvYmFsIHZpZXdhcmdzIHZpZXdhcmdzY21kIHZpZXdmaWxlcyB2ZmlsZWxpbWl0CisgICAgZ2xvYmFsIHNob3dsb2NhbGNoYW5nZXMgY29tbWl0aW50ZXJlc3QKKyAgICBnbG9iYWwgdmlld2FjdGl2ZSBsb2dpbnN0YW5jZSB2aWV3aW5zdGFuY2VzIHZtZXJnZW9ubHkKKyAgICBnbG9iYWwgcGVuZGluZ19zZWxlY3QgbWFpbmhlYWRpZAorICAgIGdsb2JhbCB2Y2Fub3B0IHZmbGFncyB2cmV2cyB2b3JpZ2FyZ3MKIAogICAgIHNldCBzdGFydG1zZWNzIFtjbG9jayBjbGlja3MgLW1pbGxpc2Vjb25kc10KICAgICBzZXQgY29tbWl0aWR4KCR2aWV3KSAwCi0gICAgc2V0IHZpZXdjb21wbGV0ZSgkdmlldykgMAotICAgIHNldCB2bmV4dHJvb3QoJHZpZXcpIDAKKyAgICAjIHRoZXNlIGFyZSBzZXQgdGhpcyB3YXkgZm9yIHRoZSBlcnJvciBleGl0cworICAgIHNldCB2aWV3Y29tcGxldGUoJHZpZXcpIDEKKyAgICBzZXQgdmlld2FjdGl2ZSgkdmlldykgMAorICAgIHZhcmNpbml0ICR2aWV3CisKICAgICBzZXQgYXJncyAkdmlld2FyZ3MoJHZpZXcpCiAgICAgaWYgeyR2aWV3YXJnc2NtZCgkdmlldykgbmUge319IHsKIAlpZiB7W2NhdGNoIHsKIAkgICAgc2V0IHN0ciBbZXhlYyBzaCAtYyAkdmlld2FyZ3NjbWQoJHZpZXcpXQogCX0gZXJyXX0gewogCSAgICBlcnJvcl9wb3B1cCAiRXJyb3IgZXhlY3V0aW5nIC0tYXJnc2NtZCBjb21tYW5kOiAkZXJyIgotCSAgICBleGl0IDEKKwkgICAgcmV0dXJuIDAKIAl9CiAJc2V0IGFyZ3MgW2NvbmNhdCAkYXJncyBbc3BsaXQgJHN0ciAiXG4iXV0KICAgICB9Ci0gICAgc2V0IG9yZGVyICItLXRvcG8tb3JkZXIiCi0gICAgaWYgeyRkYXRlbW9kZX0gewotCXNldCBvcmRlciAiLS1kYXRlLW9yZGVyIgorICAgIHNldCB2Y2Fub3B0KCR2aWV3KSBbcGFyc2V2aWV3YXJncyAkdmlldyAkYXJnc10KKworICAgIHNldCBmaWxlcyAkdmlld2ZpbGVzKCR2aWV3KQorICAgIGlmIHskdm1lcmdlb25seSgkdmlldyl9IHsKKwlzZXQgZmlsZXMgW3VubWVyZ2VkX2ZpbGVzICRmaWxlc10KKwlpZiB7JGZpbGVzIGVxIHt9fSB7CisJICAgIGdsb2JhbCBucl91bm1lcmdlZAorCSAgICBpZiB7JG5yX3VubWVyZ2VkID09IDB9IHsKKwkJZXJyb3JfcG9wdXAgW21jICJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0XAorCQkJICAgICBubyBmaWxlcyBhcmUgdW5tZXJnZWQuIl0KKwkgICAgfSBlbHNlIHsKKwkJZXJyb3JfcG9wdXAgW21jICJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0XAorCQkJICAgICBubyB1bm1lcmdlZCBmaWxlcyBhcmUgd2l0aGluIGZpbGUgbGltaXQuIl0KKwkgICAgfQorCSAgICByZXR1cm4gMAorCX0KICAgICB9CisgICAgc2V0IHZmaWxlbGltaXQoJHZpZXcpICRmaWxlcworCisgICAgaWYgeyR2Y2Fub3B0KCR2aWV3KX0geworCXNldCByZXZzIFtwYXJzZXZpZXdyZXZzICR2aWV3ICR2cmV2cygkdmlldyldCisJaWYgeyRyZXZzIGVxIHt9fSB7CisJICAgIHJldHVybiAwCisJfQorCXNldCBhcmdzIFtjb25jYXQgJHZmbGFncygkdmlldykgJHJldnNdCisgICAgfSBlbHNlIHsKKwlzZXQgYXJncyAkdm9yaWdhcmdzKCR2aWV3KQorICAgIH0KKwogICAgIGlmIHtbY2F0Y2ggewotCXNldCBmZCBbb3BlbiBbY29uY2F0IHwgZ2l0IGxvZyAtLW5vLWNvbG9yIC16IC0tcHJldHR5PXJhdyAkb3JkZXIgLS1wYXJlbnRzIFwKLQkJCSAtLWJvdW5kYXJ5ICRhcmdzICItLSIgJHZpZXdmaWxlcygkdmlldyldIHJdCisJc2V0IGZkIFtvcGVuIFtjb25jYXQgfCBnaXQgbG9nIC0tbm8tY29sb3IgLXogLS1wcmV0dHk9cmF3IC0tcGFyZW50cyBcCisJCQkgLS1ib3VuZGFyeSAkYXJncyAiLS0iICRmaWxlc10gcl0KICAgICB9IGVycl19IHsKLQllcnJvcl9wb3B1cCAiW21jICJFcnJvciBleGVjdXRpbmcgZ2l0IHJldi1saXN0OiJdICRlcnIiCi0JZXhpdCAxCisJZXJyb3JfcG9wdXAgIlttYyAiRXJyb3IgZXhlY3V0aW5nIGdpdCBsb2c6Il0gJGVyciIKKwlyZXR1cm4gMAogICAgIH0KLSAgICBzZXQgY29tbWZkKCR2aWV3KSAkZmQKLSAgICBzZXQgbGVmdG92ZXIoJHZpZXcpIHt9Ci0gICAgaWYgeyRzaG93bG9jYWxjaGFuZ2VzfSB7CisgICAgc2V0IGkgW2luY3IgbG9naW5zdGFuY2VdCisgICAgc2V0IHZpZXdpbnN0YW5jZXMoJHZpZXcpIFtsaXN0ICRpXQorICAgIHNldCBjb21tZmQoJGkpICRmZAorICAgIHNldCBsZWZ0b3ZlcigkaSkge30KKyAgICBpZiB7JHNob3dsb2NhbGNoYW5nZXMgJiYgJG1haW5oZWFkaWQgbmUge319IHsKIAlsYXBwZW5kIGNvbW1pdGludGVyZXN0KCRtYWluaGVhZGlkKSB7ZG9kaWZmaW5kZXh9CiAgICAgfQogICAgIGZjb25maWd1cmUgJGZkIC1ibG9ja2luZyAwIC10cmFuc2xhdGlvbiBsZiAtZW9mY2hhciB7fQogICAgIGlmIHskdGNsZW5jb2RpbmcgIT0ge319IHsKIAlmY29uZmlndXJlICRmZCAtZW5jb2RpbmcgJHRjbGVuY29kaW5nCiAgICAgfQotICAgIGZpbGVydW4gJGZkIFtsaXN0IGdldGNvbW1pdGxpbmVzICRmZCAkdmlld10KKyAgICBmaWxlcnVuICRmZCBbbGlzdCBnZXRjb21taXRsaW5lcyAkZmQgJGkgJHZpZXcgMF0KICAgICBub3didXN5ICR2aWV3IFttYyAiUmVhZGluZyJdCiAgICAgaWYgeyR2aWV3ID09ICRjdXJ2aWV3fSB7Ci0Jc2V0IHByb2dyZXNzZGlybiAxCi0Jc2V0IHByb2dyZXNzY29vcmRzIHswIDB9Ci0Jc2V0IHByb2dsYXN0bmMgMAorCXNldCBwZW5kaW5nX3NlbGVjdCAkbWFpbmhlYWRpZAogICAgIH0KKyAgICBzZXQgdmlld2NvbXBsZXRlKCR2aWV3KSAwCisgICAgc2V0IHZpZXdhY3RpdmUoJHZpZXcpIDEKKyAgICByZXR1cm4gMQogfQogCi1wcm9jIHN0b3BfcmV2X2xpc3Qge30gewotICAgIGdsb2JhbCBjb21tZmQgY3VydmlldworcHJvYyBzdG9wX3Jldl9saXN0IHt2aWV3fSB7CisgICAgZ2xvYmFsIGNvbW1mZCB2aWV3aW5zdGFuY2VzIGxlZnRvdmVyCiAKLSAgICBpZiB7IVtpbmZvIGV4aXN0cyBjb21tZmQoJGN1cnZpZXcpXX0gcmV0dXJuCi0gICAgc2V0IGZkICRjb21tZmQoJGN1cnZpZXcpCi0gICAgY2F0Y2ggewotCXNldCBwaWQgW3BpZCAkZmRdCi0JZXhlYyBraWxsICRwaWQKKyAgICBmb3JlYWNoIGluc3QgJHZpZXdpbnN0YW5jZXMoJHZpZXcpIHsKKwlzZXQgZmQgJGNvbW1mZCgkaW5zdCkKKwljYXRjaCB7CisJICAgIHNldCBwaWQgW3BpZCAkZmRdCisJICAgIGV4ZWMga2lsbCAkcGlkCisJfQorCWNhdGNoIHtjbG9zZSAkZmR9CisJbnVrZWZpbGUgJGZkCisJdW5zZXQgY29tbWZkKCRpbnN0KQorCXVuc2V0IGxlZnRvdmVyKCRpbnN0KQogICAgIH0KLSAgICBjYXRjaCB7Y2xvc2UgJGZkfQotICAgIHVuc2V0IGNvbW1mZCgkY3VydmlldykKKyAgICBzZXQgdmlld2luc3RhbmNlcygkdmlldykge30KIH0KIAogcHJvYyBnZXRjb21taXRzIHt9IHsKLSAgICBnbG9iYWwgcGhhc2UgY2FudiBjdXJ2aWV3CisgICAgZ2xvYmFsIGNhbnYgY3VydmlldyBuZWVkX3JlZGlzcGxheSB2aWV3YWN0aXZlCiAKLSAgICBzZXQgcGhhc2UgZ2V0Y29tbWl0cwogICAgIGluaXRsYXlvdXQKLSAgICBzdGFydF9yZXZfbGlzdCAkY3VydmlldwotICAgIHNob3dfc3RhdHVzIFttYyAiUmVhZGluZyBjb21taXRzLi4uIl0KKyAgICBpZiB7W3N0YXJ0X3Jldl9saXN0ICRjdXJ2aWV3XX0geworCXNob3dfc3RhdHVzIFttYyAiUmVhZGluZyBjb21taXRzLi4uIl0KKwlzZXQgbmVlZF9yZWRpc3BsYXkgMQorICAgIH0gZWxzZSB7CisJc2hvd19zdGF0dXMgW21jICJObyBjb21taXRzIHNlbGVjdGVkIl0KKyAgICB9Cit9CisKK3Byb2MgdXBkYXRlY29tbWl0cyB7fSB7CisgICAgZ2xvYmFsIGN1cnZpZXcgdmNhbm9wdCB2b3JpZ2FyZ3MgdmZpbGVsaW1pdCB2aWV3aW5zdGFuY2VzCisgICAgZ2xvYmFsIHZpZXdhY3RpdmUgdmlld2NvbXBsZXRlIGxvZ2luc3RhbmNlIHRjbGVuY29kaW5nCisgICAgZ2xvYmFsIHN0YXJ0bXNlY3MgY29tbWZkIHNob3duZWFydGFncyBzaG93bG9jYWxjaGFuZ2VzIGxlZnRvdmVyCisgICAgZ2xvYmFsIG1haW5oZWFkaWQgcGVuZGluZ19zZWxlY3QKKyAgICBnbG9iYWwgaXN3b3JrdHJlZQorICAgIGdsb2JhbCB2YXJjaWQgdnBvc2lkcyB2bmVnaWRzIHZmbGFncyB2cmV2cworCisgICAgc2V0IGlzd29ya3RyZWUgW2V4cHIge1tleGVjIGdpdCByZXYtcGFyc2UgLS1pcy1pbnNpZGUtd29yay10cmVlXSA9PSAidHJ1ZSJ9XQorICAgIHNldCBvbGRtYWluaWQgJG1haW5oZWFkaWQKKyAgICByZXJlYWRyZWZzCisgICAgaWYgeyRzaG93bG9jYWxjaGFuZ2VzfSB7CisJaWYgeyRtYWluaGVhZGlkIG5lICRvbGRtYWluaWR9IHsKKwkgICAgZG9oaWRlbG9jYWxjaGFuZ2VzCisJfQorCWlmIHtbY29tbWl0aW52aWV3ICRtYWluaGVhZGlkICRjdXJ2aWV3XX0geworCSAgICBkb2RpZmZpbmRleAorCX0KKyAgICB9CisgICAgc2V0IHZpZXcgJGN1cnZpZXcKKyAgICBpZiB7JHZjYW5vcHQoJHZpZXcpfSB7CisJc2V0IG9sZHBvcyAkdnBvc2lkcygkdmlldykKKwlzZXQgb2xkbmVnICR2bmVnaWRzKCR2aWV3KQorCXNldCByZXZzIFtwYXJzZXZpZXdyZXZzICR2aWV3ICR2cmV2cygkdmlldyldCisJaWYgeyRyZXZzIGVxIHt9fSB7CisJICAgIHJldHVybgorCX0KKwkjIG5vdGU6IGdldHRpbmcgdGhlIGRlbHRhIHdoZW4gbmVnYXRpdmUgcmVmcyBjaGFuZ2UgaXMgaGFyZCwKKwkjIGFuZCBjb3VsZCByZXF1aXJlIG11bHRpcGxlIGdpdCBsb2cgaW52b2NhdGlvbnMsIHNvIGluIHRoYXQKKwkjIGNhc2Ugd2UgYXNrIGdpdCBsb2cgZm9yIGFsbCB0aGUgY29tbWl0cyAobm90IGp1c3QgdGhlIGRlbHRhKQorCWlmIHskb2xkbmVnIGVxICR2bmVnaWRzKCR2aWV3KX0geworCSAgICBzZXQgbmV3cmV2cyB7fQorCSAgICBzZXQgbnBvcyAwCisJICAgICMgdGFrZSBvdXQgcG9zaXRpdmUgcmVmcyB0aGF0IHdlIGFza2VkIGZvciBiZWZvcmUgb3IKKwkgICAgIyB0aGF0IHdlIGhhdmUgYWxyZWFkeSBzZWVuCisJICAgIGZvcmVhY2ggcmV2ICRyZXZzIHsKKwkJaWYge1tzdHJpbmcgbGVuZ3RoICRyZXZdID09IDQwfSB7CisJCSAgICBpZiB7W2xzZWFyY2ggLWV4YWN0ICRvbGRwb3MgJHJldl0gPCAwCisJCQkmJiAhW2luZm8gZXhpc3RzIHZhcmNpZCgkdmlldywkcmV2KV19IHsKKwkJCWxhcHBlbmQgbmV3cmV2cyAkcmV2CisJCQlpbmNyIG5wb3MKKwkJICAgIH0KKwkJfSBlbHNlIHsKKwkJICAgIGxhcHBlbmQgJG5ld3JldnMgJHJldgorCQl9CisJICAgIH0KKwkgICAgaWYgeyRucG9zID09IDB9IHJldHVybgorCSAgICBzZXQgcmV2cyAkbmV3cmV2cworCSAgICBzZXQgdnBvc2lkcygkdmlldykgW2xzb3J0IC11bmlxdWUgW2NvbmNhdCAkb2xkcG9zICR2cG9zaWRzKCR2aWV3KV1dCisJfQorCXNldCBhcmdzIFtjb25jYXQgJHZmbGFncygkdmlldykgJHJldnMgLS1ub3QgJG9sZHBvc10KKyAgICB9IGVsc2UgeworCXNldCBhcmdzICR2b3JpZ2FyZ3MoJHZpZXcpCisgICAgfQorICAgIGlmIHtbY2F0Y2ggeworCXNldCBmZCBbb3BlbiBbY29uY2F0IHwgZ2l0IGxvZyAtLW5vLWNvbG9yIC16IC0tcHJldHR5PXJhdyAtLXBhcmVudHMgXAorCQkJICAtLWJvdW5kYXJ5ICRhcmdzICItLSIgJHZmaWxlbGltaXQoJHZpZXcpXSByXQorICAgIH0gZXJyXX0geworCWVycm9yX3BvcHVwICJFcnJvciBleGVjdXRpbmcgZ2l0IGxvZzogJGVyciIKKwlyZXR1cm4KKyAgICB9CisgICAgaWYgeyR2aWV3YWN0aXZlKCR2aWV3KSA9PSAwfSB7CisJc2V0IHN0YXJ0bXNlY3MgW2Nsb2NrIGNsaWNrcyAtbWlsbGlzZWNvbmRzXQorICAgIH0KKyAgICBzZXQgaSBbaW5jciBsb2dpbnN0YW5jZV0KKyAgICBsYXBwZW5kIHZpZXdpbnN0YW5jZXMoJHZpZXcpICRpCisgICAgc2V0IGNvbW1mZCgkaSkgJGZkCisgICAgc2V0IGxlZnRvdmVyKCRpKSB7fQorICAgIGZjb25maWd1cmUgJGZkIC1ibG9ja2luZyAwIC10cmFuc2xhdGlvbiBsZiAtZW9mY2hhciB7fQorICAgIGlmIHskdGNsZW5jb2RpbmcgIT0ge319IHsKKwlmY29uZmlndXJlICRmZCAtZW5jb2RpbmcgJHRjbGVuY29kaW5nCisgICAgfQorICAgIGZpbGVydW4gJGZkIFtsaXN0IGdldGNvbW1pdGxpbmVzICRmZCAkaSAkdmlldyAxXQorICAgIGluY3Igdmlld2FjdGl2ZSgkdmlldykKKyAgICBzZXQgdmlld2NvbXBsZXRlKCR2aWV3KSAwCisgICAgc2V0IHBlbmRpbmdfc2VsZWN0ICRtYWluaGVhZGlkCisgICAgbm93YnVzeSAkdmlldyAiUmVhZGluZyIKKyAgICBpZiB7JHNob3duZWFydGFnc30geworCWdldGFsbGNvbW1pdHMKKyAgICB9Cit9CisKK3Byb2MgcmVsb2FkY29tbWl0cyB7fSB7CisgICAgZ2xvYmFsIGN1cnZpZXcgdmlld2NvbXBsZXRlIHNlbGVjdGVkbGluZSBjdXJyZW50aWQgdGhpY2tlcmxpbmUKKyAgICBnbG9iYWwgc2hvd25lYXJ0YWdzIHRyZWVkaWZmcyBjb21taXRpbnRlcmVzdCBjYWNoZWRfY29tbWl0cm93CisgICAgZ2xvYmFsIHRhcmdldGlkCisKKyAgICBpZiB7ISR2aWV3Y29tcGxldGUoJGN1cnZpZXcpfSB7CisJc3RvcF9yZXZfbGlzdCAkY3VydmlldworICAgIH0KKyAgICByZXNldHZhcmNzICRjdXJ2aWV3CisgICAgc2V0IHNlbGVjdGVkbGluZSB7fQorICAgIGNhdGNoIHt1bnNldCBjdXJyZW50aWR9CisgICAgY2F0Y2gge3Vuc2V0IHRoaWNrZXJsaW5lfQorICAgIGNhdGNoIHt1bnNldCB0cmVlZGlmZnN9CisgICAgcmVhZHJlZnMKKyAgICBjaGFuZ2VkcmVmcworICAgIGlmIHskc2hvd25lYXJ0YWdzfSB7CisJZ2V0YWxsY29tbWl0cworICAgIH0KKyAgICBjbGVhcl9kaXNwbGF5CisgICAgY2F0Y2gge3Vuc2V0IGNvbW1pdGludGVyZXN0fQorICAgIGNhdGNoIHt1bnNldCBjYWNoZWRfY29tbWl0cm93fQorICAgIGNhdGNoIHt1bnNldCB0YXJnZXRpZH0KKyAgICBzZXRjYW52c2Nyb2xsCisgICAgZ2V0Y29tbWl0cworICAgIHJldHVybiAwCiB9CiAKICMgVGhpcyBtYWtlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHBvc2l0aXZlIGludGVnZXIgd2hpY2gKQEAgLTE2NCw0NiArNTI2LDc1OSBAQAogICAgIHJldHVybiBbZm9ybWF0ICJ6JS44eCIgJG5dCiB9CiAKLXByb2MgZ2V0Y29tbWl0bGluZXMge2ZkIHZpZXd9ICB7Ci0gICAgZ2xvYmFsIGNvbW1pdGxpc3RlZCBjb21taXRpbnRlcmVzdAotICAgIGdsb2JhbCBsZWZ0b3ZlciBjb21tZmQKLSAgICBnbG9iYWwgZGlzcGxheW9yZGVyIGNvbW1pdGlkeCB2aWV3Y29tcGxldGUgY29tbWl0cm93IGNvbW1pdGRhdGEKLSAgICBnbG9iYWwgcGFyZW50bGlzdCBjaGlsZHJlbiBjdXJ2aWV3IGhsdmlldwotICAgIGdsb2JhbCB2cGFyZW50bGlzdCB2ZGlzcG9yZGVyIHZjbWl0bGlzdGVkCi0gICAgZ2xvYmFsIG9yZGVydG9rIHZuZXh0cm9vdCBpZHBlbmRpbmcKKyMgUHJvY2VkdXJlcyB1c2VkIGluIHJlb3JkZXJpbmcgY29tbWl0cyBmcm9tIGdpdCBsb2cgKHdpdGhvdXQKKyMgLS10b3BvLW9yZGVyKSBpbnRvIHRoZSBvcmRlciBmb3IgZGlzcGxheS4KKworcHJvYyB2YXJjaW5pdCB7dmlld30geworICAgIGdsb2JhbCB2YXJjc3RhcnQgdnVwcHRyIHZkb3ducHRyIHZsZWZ0cHRyIHZiYWNrcHRyIHZhcmN0b2sgdmFyY3JvdworICAgIGdsb2JhbCB2dG9rbW9kIHZhcmNtb2QgdnJvd21vZCB2YXJjaXggdmxhc3RpbnMKKworICAgIHNldCB2YXJjc3RhcnQoJHZpZXcpIHt7fX0KKyAgICBzZXQgdnVwcHRyKCR2aWV3KSB7MH0KKyAgICBzZXQgdmRvd25wdHIoJHZpZXcpIHswfQorICAgIHNldCB2bGVmdHB0cigkdmlldykgezB9CisgICAgc2V0IHZiYWNrcHRyKCR2aWV3KSB7MH0KKyAgICBzZXQgdmFyY3Rvaygkdmlldykge3t9fQorICAgIHNldCB2YXJjcm93KCR2aWV3KSB7e319CisgICAgc2V0IHZ0b2ttb2QoJHZpZXcpIHt9CisgICAgc2V0IHZhcmNtb2QoJHZpZXcpIDAKKyAgICBzZXQgdnJvd21vZCgkdmlldykgMAorICAgIHNldCB2YXJjaXgoJHZpZXcpIHt7fX0KKyAgICBzZXQgdmxhc3RpbnMoJHZpZXcpIHswfQorfQorCitwcm9jIHJlc2V0dmFyY3Mge3ZpZXd9IHsKKyAgICBnbG9iYWwgdmFyY2lkIHZhcmNjb21taXRzIHBhcmVudHMgY2hpbGRyZW4gdnNlZWRjb3VudCBvcmRlcnRvaworCisgICAgZm9yZWFjaCB2aWQgW2FycmF5IG5hbWVzIHZhcmNpZCAkdmlldywqXSB7CisJdW5zZXQgdmFyY2lkKCR2aWQpCisJdW5zZXQgY2hpbGRyZW4oJHZpZCkKKwl1bnNldCBwYXJlbnRzKCR2aWQpCisgICAgfQorICAgICMgc29tZSBjb21taXRzIG1pZ2h0IGhhdmUgY2hpbGRyZW4gYnV0IGhhdmVuJ3QgYmVlbiBzZWVuIHlldAorICAgIGZvcmVhY2ggdmlkIFthcnJheSBuYW1lcyBjaGlsZHJlbiAkdmlldywqXSB7CisJdW5zZXQgY2hpbGRyZW4oJHZpZCkKKyAgICB9CisgICAgZm9yZWFjaCB2YSBbYXJyYXkgbmFtZXMgdmFyY2NvbW1pdHMgJHZpZXcsKl0geworCXVuc2V0IHZhcmNjb21taXRzKCR2YSkKKyAgICB9CisgICAgZm9yZWFjaCB2ZCBbYXJyYXkgbmFtZXMgdnNlZWRjb3VudCAkdmlldywqXSB7CisJdW5zZXQgdnNlZWRjb3VudCgkdmQpCisgICAgfQorICAgIGNhdGNoIHt1bnNldCBvcmRlcnRva30KK30KKworIyByZXR1cm5zIGEgbGlzdCBvZiB0aGUgY29tbWl0cyB3aXRoIG5vIGNoaWxkcmVuCitwcm9jIHNlZWRzIHt2fSB7CisgICAgZ2xvYmFsIHZkb3ducHRyIHZsZWZ0cHRyIHZhcmNzdGFydAorCisgICAgc2V0IHJldCB7fQorICAgIHNldCBhIFtsaW5kZXggJHZkb3ducHRyKCR2KSAwXQorICAgIHdoaWxlIHskYSAhPSAwfSB7CisJbGFwcGVuZCByZXQgW2xpbmRleCAkdmFyY3N0YXJ0KCR2KSAkYV0KKwlzZXQgYSBbbGluZGV4ICR2bGVmdHB0cigkdikgJGFdCisgICAgfQorICAgIHJldHVybiAkcmV0Cit9CisKK3Byb2MgbmV3dmFyYyB7dmlldyBpZH0geworICAgIGdsb2JhbCB2YXJjaWQgdmFyY3RvayBwYXJlbnRzIGNoaWxkcmVuIHZkYXRlbW9kZQorICAgIGdsb2JhbCB2dXBwdHIgdmRvd25wdHIgdmxlZnRwdHIgdmJhY2twdHIgdmFyY3JvdyB2YXJjaXggdmFyY3N0YXJ0CisgICAgZ2xvYmFsIGNvbW1pdGRhdGEgY29tbWl0aW5mbyB2c2VlZGNvdW50IHZhcmNjb21taXRzIHZsYXN0aW5zCisKKyAgICBzZXQgYSBbbGxlbmd0aCAkdmFyY3RvaygkdmlldyldCisgICAgc2V0IHZpZCAkdmlldywkaWQKKyAgICBpZiB7W2xsZW5ndGggJGNoaWxkcmVuKCR2aWQpXSA9PSAwIHx8ICR2ZGF0ZW1vZGUoJHZpZXcpfSB7CisJaWYgeyFbaW5mbyBleGlzdHMgY29tbWl0aW5mbygkaWQpXX0geworCSAgICBwYXJzZWNvbW1pdCAkaWQgJGNvbW1pdGRhdGEoJGlkKSAxCisJfQorCXNldCBjZGF0ZSBbbGluZGV4ICRjb21taXRpbmZvKCRpZCkgNF0KKwlpZiB7IVtzdHJpbmcgaXMgaW50ZWdlciAtc3RyaWN0ICRjZGF0ZV19IHsKKwkgICAgc2V0IGNkYXRlIDAKKwl9CisJaWYgeyFbaW5mbyBleGlzdHMgdnNlZWRjb3VudCgkdmlldywkY2RhdGUpXX0geworCSAgICBzZXQgdnNlZWRjb3VudCgkdmlldywkY2RhdGUpIC0xCisJfQorCXNldCBjIFtpbmNyIHZzZWVkY291bnQoJHZpZXcsJGNkYXRlKV0KKwlzZXQgY2RhdGUgW2V4cHIgeyRjZGF0ZSBeIDB4ZmZmZmZmZmZ9XQorCXNldCB0b2sgInNbc3RycmVwICRjZGF0ZV1bc3RycmVwICRjXSIKKyAgICB9IGVsc2UgeworCXNldCB0b2sge30KKyAgICB9CisgICAgc2V0IGthIDAKKyAgICBpZiB7W2xsZW5ndGggJGNoaWxkcmVuKCR2aWQpXSA+IDB9IHsKKwlzZXQga2lkIFtsaW5kZXggJGNoaWxkcmVuKCR2aWQpIGVuZF0KKwlzZXQgayAkdmFyY2lkKCR2aWV3LCRraWQpCisJaWYge1tzdHJpbmcgY29tcGFyZSBbbGluZGV4ICR2YXJjdG9rKCR2aWV3KSAka10gJHRva10gPiAwfSB7CisJICAgIHNldCBraSAka2lkCisJICAgIHNldCBrYSAkaworCSAgICBzZXQgdG9rIFtsaW5kZXggJHZhcmN0b2soJHZpZXcpICRrXQorCX0KKyAgICB9CisgICAgaWYgeyRrYSAhPSAwfSB7CisJc2V0IGkgW2xzZWFyY2ggLWV4YWN0ICRwYXJlbnRzKCR2aWV3LCRraSkgJGlkXQorCXNldCBqIFtleHByIHtbbGxlbmd0aCAkcGFyZW50cygkdmlldywka2kpXSAtIDEgLSAkaX1dCisJYXBwZW5kIHRvayBbc3RycmVwICRqXQorICAgIH0KKyAgICBzZXQgYyBbbGluZGV4ICR2bGFzdGlucygkdmlldykgJGthXQorICAgIGlmIHskYyA9PSAwIHx8IFtzdHJpbmcgY29tcGFyZSAkdG9rIFtsaW5kZXggJHZhcmN0b2soJHZpZXcpICRjXV0gPCAwfSB7CisJc2V0IGMgJGthCisJc2V0IGIgW2xpbmRleCAkdmRvd25wdHIoJHZpZXcpICRrYV0KKyAgICB9IGVsc2UgeworCXNldCBiIFtsaW5kZXggJHZsZWZ0cHRyKCR2aWV3KSAkY10KKyAgICB9CisgICAgd2hpbGUgeyRiICE9IDAgJiYgW3N0cmluZyBjb21wYXJlICR0b2sgW2xpbmRleCAkdmFyY3RvaygkdmlldykgJGJdXSA+PSAwfSB7CisJc2V0IGMgJGIKKwlzZXQgYiBbbGluZGV4ICR2bGVmdHB0cigkdmlldykgJGNdCisgICAgfQorICAgIGlmIHskYyA9PSAka2F9IHsKKwlsc2V0IHZkb3ducHRyKCR2aWV3KSAka2EgJGEKKwlsYXBwZW5kIHZiYWNrcHRyKCR2aWV3KSAwCisgICAgfSBlbHNlIHsKKwlsc2V0IHZsZWZ0cHRyKCR2aWV3KSAkYyAkYQorCWxhcHBlbmQgdmJhY2twdHIoJHZpZXcpICRjCisgICAgfQorICAgIGxzZXQgdmxhc3RpbnMoJHZpZXcpICRrYSAkYQorICAgIGxhcHBlbmQgdnVwcHRyKCR2aWV3KSAka2EKKyAgICBsYXBwZW5kIHZsZWZ0cHRyKCR2aWV3KSAkYgorICAgIGlmIHskYiAhPSAwfSB7CisJbHNldCB2YmFja3B0cigkdmlldykgJGIgJGEKKyAgICB9CisgICAgbGFwcGVuZCB2YXJjdG9rKCR2aWV3KSAkdG9rCisgICAgbGFwcGVuZCB2YXJjc3RhcnQoJHZpZXcpICRpZAorICAgIGxhcHBlbmQgdmRvd25wdHIoJHZpZXcpIDAKKyAgICBsYXBwZW5kIHZhcmNyb3coJHZpZXcpIHt9CisgICAgbGFwcGVuZCB2YXJjaXgoJHZpZXcpIHt9CisgICAgc2V0IHZhcmNjb21taXRzKCR2aWV3LCRhKSB7fQorICAgIGxhcHBlbmQgdmxhc3RpbnMoJHZpZXcpIDAKKyAgICByZXR1cm4gJGEKK30KKworcHJvYyBzcGxpdHZhcmMge3Agdn0geworICAgIGdsb2JhbCB2YXJjaWQgdmFyY3N0YXJ0IHZhcmNjb21taXRzIHZhcmN0b2sKKyAgICBnbG9iYWwgdnVwcHRyIHZkb3ducHRyIHZsZWZ0cHRyIHZiYWNrcHRyIHZhcmNpeCB2YXJjcm93IHZsYXN0aW5zCisKKyAgICBzZXQgb2EgJHZhcmNpZCgkdiwkcCkKKyAgICBzZXQgYWMgJHZhcmNjb21taXRzKCR2LCRvYSkKKyAgICBzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJHZhcmNjb21taXRzKCR2LCRvYSkgJHBdCisgICAgaWYgeyRpIDw9IDB9IHJldHVybgorICAgIHNldCBuYSBbbGxlbmd0aCAkdmFyY3RvaygkdildCisgICAgIyAiJSIgc29ydHMgYmVmb3JlICIwIi4uLgorICAgIHNldCB0b2sgIltsaW5kZXggJHZhcmN0b2soJHYpICRvYV0lW3N0cnJlcCAkaV0iCisgICAgbGFwcGVuZCB2YXJjdG9rKCR2KSAkdG9rCisgICAgbGFwcGVuZCB2YXJjcm93KCR2KSB7fQorICAgIGxhcHBlbmQgdmFyY2l4KCR2KSB7fQorICAgIHNldCB2YXJjY29tbWl0cygkdiwkb2EpIFtscmFuZ2UgJGFjIDAgW2V4cHIgeyRpIC0gMX1dXQorICAgIHNldCB2YXJjY29tbWl0cygkdiwkbmEpIFtscmFuZ2UgJGFjICRpIGVuZF0KKyAgICBsYXBwZW5kIHZhcmNzdGFydCgkdikgJHAKKyAgICBmb3JlYWNoIGlkICR2YXJjY29tbWl0cygkdiwkbmEpIHsKKwlzZXQgdmFyY2lkKCR2LCRpZCkgJG5hCisgICAgfQorICAgIGxhcHBlbmQgdmRvd25wdHIoJHYpIFtsaW5kZXggJHZkb3ducHRyKCR2KSAkb2FdCisgICAgbGFwcGVuZCB2bGFzdGlucygkdikgW2xpbmRleCAkdmxhc3RpbnMoJHYpICRvYV0KKyAgICBsc2V0IHZkb3ducHRyKCR2KSAkb2EgJG5hCisgICAgbHNldCB2bGFzdGlucygkdikgJG9hIDAKKyAgICBsYXBwZW5kIHZ1cHB0cigkdikgJG9hCisgICAgbGFwcGVuZCB2bGVmdHB0cigkdikgMAorICAgIGxhcHBlbmQgdmJhY2twdHIoJHYpIDAKKyAgICBmb3Ige3NldCBiIFtsaW5kZXggJHZkb3ducHRyKCR2KSAkbmFdfSB7JGIgIT0gMH0ge3NldCBiIFtsaW5kZXggJHZsZWZ0cHRyKCR2KSAkYl19IHsKKwlsc2V0IHZ1cHB0cigkdikgJGIgJG5hCisgICAgfQorfQorCitwcm9jIHJlbnVtYmVydmFyYyB7YSB2fSB7CisgICAgZ2xvYmFsIHBhcmVudHMgY2hpbGRyZW4gdmFyY3RvayB2YXJjc3RhcnQgdmFyY2NvbW1pdHMKKyAgICBnbG9iYWwgdnVwcHRyIHZkb3ducHRyIHZsZWZ0cHRyIHZiYWNrcHRyIHZsYXN0aW5zIHZhcmNpZCB2dG9rbW9kIHZkYXRlbW9kZQorCisgICAgc2V0IHQxIFtjbG9jayBjbGlja3MgLW1pbGxpc2Vjb25kc10KKyAgICBzZXQgdG9kbyB7fQorICAgIHNldCBpc3JlbGF0ZWQoJGEpIDEKKyAgICBzZXQga2lkY2hhbmdlZCgkYSkgMQorICAgIHNldCBudG90IDAKKyAgICB3aGlsZSB7JGEgIT0gMH0geworCWlmIHtbaW5mbyBleGlzdHMgaXNyZWxhdGVkKCRhKV19IHsKKwkgICAgbGFwcGVuZCB0b2RvICRhCisJICAgIHNldCBpZCBbbGluZGV4ICR2YXJjY29tbWl0cygkdiwkYSkgZW5kXQorCSAgICBmb3JlYWNoIHAgJHBhcmVudHMoJHYsJGlkKSB7CisJCWlmIHtbaW5mbyBleGlzdHMgdmFyY2lkKCR2LCRwKV19IHsKKwkJICAgIHNldCBpc3JlbGF0ZWQoJHZhcmNpZCgkdiwkcCkpIDEKKwkJfQorCSAgICB9CisJfQorCWluY3IgbnRvdAorCXNldCBiIFtsaW5kZXggJHZkb3ducHRyKCR2KSAkYV0KKwlpZiB7JGIgPT0gMH0geworCSAgICB3aGlsZSB7JGEgIT0gMH0geworCQlzZXQgYiBbbGluZGV4ICR2bGVmdHB0cigkdikgJGFdCisJCWlmIHskYiAhPSAwfSBicmVhaworCQlzZXQgYSBbbGluZGV4ICR2dXBwdHIoJHYpICRhXQorCSAgICB9CisJfQorCXNldCBhICRiCisgICAgfQorICAgIGZvcmVhY2ggYSAkdG9kbyB7CisJaWYgeyFbaW5mbyBleGlzdHMga2lkY2hhbmdlZCgkYSldfSBjb250aW51ZQorCXNldCBpZCBbbGluZGV4ICR2YXJjc3RhcnQoJHYpICRhXQorCWlmIHtbbGxlbmd0aCAkY2hpbGRyZW4oJHYsJGlkKV0gPiAxfSB7CisJICAgIHNldCBjaGlsZHJlbigkdiwkaWQpIFtsc29ydCAtY29tbWFuZCBbbGlzdCB2dG9rY21wICR2XSBcCisJCQkJICAgICAgJGNoaWxkcmVuKCR2LCRpZCldCisJfQorCXNldCBvbGR0b2sgW2xpbmRleCAkdmFyY3RvaygkdikgJGFdCisJaWYgeyEkdmRhdGVtb2RlKCR2KX0geworCSAgICBzZXQgdG9rIHt9CisJfSBlbHNlIHsKKwkgICAgc2V0IHRvayAkb2xkdG9rCisJfQorCXNldCBrYSAwCisJc2V0IGtpZCBbbGFzdF9yZWFsX2NoaWxkICR2LCRpZF0KKwlpZiB7JGtpZCBuZSB7fX0geworCSAgICBzZXQgayAkdmFyY2lkKCR2LCRraWQpCisJICAgIGlmIHtbc3RyaW5nIGNvbXBhcmUgW2xpbmRleCAkdmFyY3RvaygkdikgJGtdICR0b2tdID4gMH0geworCQlzZXQga2kgJGtpZAorCQlzZXQga2EgJGsKKwkJc2V0IHRvayBbbGluZGV4ICR2YXJjdG9rKCR2KSAka10KKwkgICAgfQorCX0KKwlpZiB7JGthICE9IDB9IHsKKwkgICAgc2V0IGkgW2xzZWFyY2ggLWV4YWN0ICRwYXJlbnRzKCR2LCRraSkgJGlkXQorCSAgICBzZXQgaiBbZXhwciB7W2xsZW5ndGggJHBhcmVudHMoJHYsJGtpKV0gLSAxIC0gJGl9XQorCSAgICBhcHBlbmQgdG9rIFtzdHJyZXAgJGpdCisJfQorCWlmIHskdG9rIGVxICRvbGR0b2t9IHsKKwkgICAgY29udGludWUKKwl9CisJc2V0IGlkIFtsaW5kZXggJHZhcmNjb21taXRzKCR2LCRhKSBlbmRdCisJZm9yZWFjaCBwICRwYXJlbnRzKCR2LCRpZCkgeworCSAgICBpZiB7W2luZm8gZXhpc3RzIHZhcmNpZCgkdiwkcCldfSB7CisJCXNldCBraWRjaGFuZ2VkKCR2YXJjaWQoJHYsJHApKSAxCisJICAgIH0gZWxzZSB7CisJCXNldCBzb3J0a2lkcygkcCkgMQorCSAgICB9CisJfQorCWxzZXQgdmFyY3RvaygkdikgJGEgJHRvaworCXNldCBiIFtsaW5kZXggJHZ1cHB0cigkdikgJGFdCisJaWYgeyRiICE9ICRrYX0geworCSAgICBpZiB7W3N0cmluZyBjb21wYXJlIFtsaW5kZXggJHZhcmN0b2soJHYpICRrYV0gJHZ0b2ttb2QoJHYpXSA8IDB9IHsKKwkJbW9kaWZ5X2FyYyAkdiAka2EKKwkgICAgfQorCSAgICBpZiB7W3N0cmluZyBjb21wYXJlIFtsaW5kZXggJHZhcmN0b2soJHYpICRiXSAkdnRva21vZCgkdildIDwgMH0geworCQltb2RpZnlfYXJjICR2ICRiCisJICAgIH0KKwkgICAgc2V0IGMgW2xpbmRleCAkdmJhY2twdHIoJHYpICRhXQorCSAgICBzZXQgZCBbbGluZGV4ICR2bGVmdHB0cigkdikgJGFdCisJICAgIGlmIHskYyA9PSAwfSB7CisJCWxzZXQgdmRvd25wdHIoJHYpICRiICRkCisJICAgIH0gZWxzZSB7CisJCWxzZXQgdmxlZnRwdHIoJHYpICRjICRkCisJICAgIH0KKwkgICAgaWYgeyRkICE9IDB9IHsKKwkJbHNldCB2YmFja3B0cigkdikgJGQgJGMKKwkgICAgfQorCSAgICBpZiB7W2xpbmRleCAkdmxhc3RpbnMoJHYpICRiXSA9PSAkYX0geworCQlsc2V0IHZsYXN0aW5zKCR2KSAkYiAkYworCSAgICB9CisJICAgIGxzZXQgdnVwcHRyKCR2KSAkYSAka2EKKwkgICAgc2V0IGMgW2xpbmRleCAkdmxhc3RpbnMoJHYpICRrYV0KKwkgICAgaWYgeyRjID09IDAgfHwgXAorCQkgICAgW3N0cmluZyBjb21wYXJlICR0b2sgW2xpbmRleCAkdmFyY3RvaygkdikgJGNdXSA8IDB9IHsKKwkJc2V0IGMgJGthCisJCXNldCBiIFtsaW5kZXggJHZkb3ducHRyKCR2KSAka2FdCisJICAgIH0gZWxzZSB7CisJCXNldCBiIFtsaW5kZXggJHZsZWZ0cHRyKCR2KSAkY10KKwkgICAgfQorCSAgICB3aGlsZSB7JGIgIT0gMCAmJiBcCisJCSAgICAgIFtzdHJpbmcgY29tcGFyZSAkdG9rIFtsaW5kZXggJHZhcmN0b2soJHYpICRiXV0gPj0gMH0geworCQlzZXQgYyAkYgorCQlzZXQgYiBbbGluZGV4ICR2bGVmdHB0cigkdikgJGNdCisJICAgIH0KKwkgICAgaWYgeyRjID09ICRrYX0geworIAkJbHNldCB2ZG93bnB0cigkdikgJGthICRhCisJCWxzZXQgdmJhY2twdHIoJHYpICRhIDAKKwkgICAgfSBlbHNlIHsKKwkJbHNldCB2bGVmdHB0cigkdikgJGMgJGEKKwkJbHNldCB2YmFja3B0cigkdikgJGEgJGMKKwkgICAgfQorCSAgICBsc2V0IHZsZWZ0cHRyKCR2KSAkYSAkYgorCSAgICBpZiB7JGIgIT0gMH0geworCQlsc2V0IHZiYWNrcHRyKCR2KSAkYiAkYQorCSAgICB9CisJICAgIGxzZXQgdmxhc3RpbnMoJHYpICRrYSAkYQorCX0KKyAgICB9CisgICAgZm9yZWFjaCBpZCBbYXJyYXkgbmFtZXMgc29ydGtpZHNdIHsKKwlpZiB7W2xsZW5ndGggJGNoaWxkcmVuKCR2LCRpZCldID4gMX0geworCSAgICBzZXQgY2hpbGRyZW4oJHYsJGlkKSBbbHNvcnQgLWNvbW1hbmQgW2xpc3QgdnRva2NtcCAkdl0gXAorCQkJCSAgICAgICRjaGlsZHJlbigkdiwkaWQpXQorCX0KKyAgICB9CisgICAgc2V0IHQyIFtjbG9jayBjbGlja3MgLW1pbGxpc2Vjb25kc10KKyAgICAjcHV0cyAicmVudW1iZXJ2YXJjIGRpZCBbbGxlbmd0aCAkdG9kb10gb2YgJG50b3QgYXJjcyBpbiBbZXhwciB7JHQyLSR0MX1dbXMiCit9CisKKyMgRml4IHVwIHRoZSBncmFwaCBhZnRlciB3ZSBoYXZlIGZvdW5kIG91dCB0aGF0IGluIHZpZXcgJHYsCisjICRwIChhIGNvbW1pdCB0aGF0IHdlIGhhdmUgYWxyZWFkeSBzZWVuKSBpcyBhY3R1YWxseSB0aGUgcGFyZW50CisjIG9mIHRoZSBsYXN0IGNvbW1pdCBpbiBhcmMgJGEuCitwcm9jIGZpeF9yZXZlcnNhbCB7cCBhIHZ9IHsKKyAgICBnbG9iYWwgdmFyY2lkIHZhcmNzdGFydCB2YXJjdG9rIHZ1cHB0cgorCisgICAgc2V0IHBhICR2YXJjaWQoJHYsJHApCisgICAgaWYgeyRwIG5lIFtsaW5kZXggJHZhcmNzdGFydCgkdikgJHBhXX0geworCXNwbGl0dmFyYyAkcCAkdgorCXNldCBwYSAkdmFyY2lkKCR2LCRwKQorICAgIH0KKyAgICAjIHNlZWRzIGFsd2F5cyBuZWVkIHRvIGJlIHJlbnVtYmVyZWQKKyAgICBpZiB7W2xpbmRleCAkdnVwcHRyKCR2KSAkcGFdID09IDAgfHwKKwlbc3RyaW5nIGNvbXBhcmUgW2xpbmRleCAkdmFyY3RvaygkdikgJGFdIFwKKwkgICAgIFtsaW5kZXggJHZhcmN0b2soJHYpICRwYV1dID4gMH0geworCXJlbnVtYmVydmFyYyAkcGEgJHYKKyAgICB9Cit9CisKK3Byb2MgaW5zZXJ0cm93IHtpZCBwIHZ9IHsKKyAgICBnbG9iYWwgY21pdGxpc3RlZCBjaGlsZHJlbiBwYXJlbnRzIHZhcmNpZCB2YXJjdG9rIHZ0b2ttb2QKKyAgICBnbG9iYWwgdmFyY2NvbW1pdHMgb3JkZXJ0b2sgY29tbWl0aWR4IG51bWNvbW1pdHMgY3VydmlldworICAgIGdsb2JhbCB0YXJnZXRpZCB0YXJnZXRyb3cKKworICAgIHJlYWRjb21taXQgJGlkCisgICAgc2V0IHZpZCAkdiwkaWQKKyAgICBzZXQgY21pdGxpc3RlZCgkdmlkKSAxCisgICAgc2V0IGNoaWxkcmVuKCR2aWQpIHt9CisgICAgc2V0IHBhcmVudHMoJHZpZCkgW2xpc3QgJHBdCisgICAgc2V0IGEgW25ld3ZhcmMgJHYgJGlkXQorICAgIHNldCB2YXJjaWQoJHZpZCkgJGEKKyAgICBpZiB7W3N0cmluZyBjb21wYXJlIFtsaW5kZXggJHZhcmN0b2soJHYpICRhXSAkdnRva21vZCgkdildIDwgMH0geworCW1vZGlmeV9hcmMgJHYgJGEKKyAgICB9CisgICAgbGFwcGVuZCB2YXJjY29tbWl0cygkdiwkYSkgJGlkCisgICAgc2V0IHZwICR2LCRwCisgICAgaWYge1tsbGVuZ3RoIFtsYXBwZW5kIGNoaWxkcmVuKCR2cCkgJGlkXV0gPiAxfSB7CisJc2V0IGNoaWxkcmVuKCR2cCkgW2xzb3J0IC1jb21tYW5kIFtsaXN0IHZ0b2tjbXAgJHZdICRjaGlsZHJlbigkdnApXQorCWNhdGNoIHt1bnNldCBvcmRlcnRva30KKyAgICB9CisgICAgZml4X3JldmVyc2FsICRwICRhICR2CisgICAgaW5jciBjb21taXRpZHgoJHYpCisgICAgaWYgeyR2ID09ICRjdXJ2aWV3fSB7CisJc2V0IG51bWNvbW1pdHMgJGNvbW1pdGlkeCgkdikKKwlzZXRjYW52c2Nyb2xsCisJaWYge1tpbmZvIGV4aXN0cyB0YXJnZXRpZF19IHsKKwkgICAgaWYgeyFbY29tZXNfYmVmb3JlICR0YXJnZXRpZCAkcF19IHsKKwkJaW5jciB0YXJnZXRyb3cKKwkgICAgfQorCX0KKyAgICB9Cit9CisKK3Byb2MgaW5zZXJ0ZmFrZXJvdyB7aWQgcH0geworICAgIGdsb2JhbCB2YXJjaWQgdmFyY2NvbW1pdHMgcGFyZW50cyBjaGlsZHJlbiBjbWl0bGlzdGVkCisgICAgZ2xvYmFsIGNvbW1pdGlkeCB2YXJjdG9rIHZ0b2ttb2QgdGFyZ2V0aWQgdGFyZ2V0cm93IGN1cnZpZXcgbnVtY29tbWl0cworCisgICAgc2V0IHYgJGN1cnZpZXcKKyAgICBzZXQgYSAkdmFyY2lkKCR2LCRwKQorICAgIHNldCBpIFtsc2VhcmNoIC1leGFjdCAkdmFyY2NvbW1pdHMoJHYsJGEpICRwXQorICAgIGlmIHskaSA8IDB9IHsKKwlwdXRzICJvb3BzOiBpbnNlcnRmYWtlcm93IGNhbid0IGZpbmQgW3Nob3J0aWRzICRwXSBvbiBhcmMgJGEiCisJcmV0dXJuCisgICAgfQorICAgIHNldCBjaGlsZHJlbigkdiwkaWQpIHt9CisgICAgc2V0IHBhcmVudHMoJHYsJGlkKSBbbGlzdCAkcF0KKyAgICBzZXQgdmFyY2lkKCR2LCRpZCkgJGEKKyAgICBsYXBwZW5kIGNoaWxkcmVuKCR2LCRwKSAkaWQKKyAgICBzZXQgY21pdGxpc3RlZCgkdiwkaWQpIDEKKyAgICBzZXQgbnVtY29tbWl0cyBbaW5jciBjb21taXRpZHgoJHYpXQorICAgICMgbm90ZSB3ZSBkZWxpYmVyYXRlbHkgZG9uJ3QgdXBkYXRlIHZhcmNzdGFydCgkdikgZXZlbiBpZiAkaSA9PSAwCisgICAgc2V0IHZhcmNjb21taXRzKCR2LCRhKSBbbGluc2VydCAkdmFyY2NvbW1pdHMoJHYsJGEpICRpICRpZF0KKyAgICBtb2RpZnlfYXJjICR2ICRhICRpCisgICAgaWYge1tpbmZvIGV4aXN0cyB0YXJnZXRpZF19IHsKKwlpZiB7IVtjb21lc19iZWZvcmUgJHRhcmdldGlkICRwXX0geworCSAgICBpbmNyIHRhcmdldHJvdworCX0KKyAgICB9CisgICAgc2V0Y2FudnNjcm9sbAorICAgIGRyYXd2aXNpYmxlCit9CisKK3Byb2MgcmVtb3ZlZmFrZXJvdyB7aWR9IHsKKyAgICBnbG9iYWwgdmFyY2lkIHZhcmNjb21taXRzIHBhcmVudHMgY2hpbGRyZW4gY29tbWl0aWR4CisgICAgZ2xvYmFsIHZhcmN0b2sgdnRva21vZCBjbWl0bGlzdGVkIGN1cnJlbnRpZCBzZWxlY3RlZGxpbmUKKyAgICBnbG9iYWwgdGFyZ2V0aWQgY3VydmlldyBudW1jb21taXRzCisKKyAgICBzZXQgdiAkY3VydmlldworICAgIGlmIHtbbGxlbmd0aCAkcGFyZW50cygkdiwkaWQpXSAhPSAxfSB7CisJcHV0cyAib29wczogcmVtb3ZlZmFrZXJvdyBbc2hvcnRpZHMgJGlkXSBoYXMgW2xsZW5ndGggJHBhcmVudHMoJHYsJGlkKV0gcGFyZW50cyIKKwlyZXR1cm4KKyAgICB9CisgICAgc2V0IHAgW2xpbmRleCAkcGFyZW50cygkdiwkaWQpIDBdCisgICAgc2V0IGEgJHZhcmNpZCgkdiwkaWQpCisgICAgc2V0IGkgW2xzZWFyY2ggLWV4YWN0ICR2YXJjY29tbWl0cygkdiwkYSkgJGlkXQorICAgIGlmIHskaSA8IDB9IHsKKwlwdXRzICJvb3BzOiByZW1vdmVmYWtlcm93IGNhbid0IGZpbmQgW3Nob3J0aWRzICRpZF0gb24gYXJjICRhIgorCXJldHVybgorICAgIH0KKyAgICB1bnNldCB2YXJjaWQoJHYsJGlkKQorICAgIHNldCB2YXJjY29tbWl0cygkdiwkYSkgW2xyZXBsYWNlICR2YXJjY29tbWl0cygkdiwkYSkgJGkgJGldCisgICAgdW5zZXQgcGFyZW50cygkdiwkaWQpCisgICAgdW5zZXQgY2hpbGRyZW4oJHYsJGlkKQorICAgIHVuc2V0IGNtaXRsaXN0ZWQoJHYsJGlkKQorICAgIHNldCBudW1jb21taXRzIFtpbmNyIGNvbW1pdGlkeCgkdikgLTFdCisgICAgc2V0IGogW2xzZWFyY2ggLWV4YWN0ICRjaGlsZHJlbigkdiwkcCkgJGlkXQorICAgIGlmIHskaiA+PSAwfSB7CisJc2V0IGNoaWxkcmVuKCR2LCRwKSBbbHJlcGxhY2UgJGNoaWxkcmVuKCR2LCRwKSAkaiAkal0KKyAgICB9CisgICAgbW9kaWZ5X2FyYyAkdiAkYSAkaQorICAgIGlmIHtbaW5mbyBleGlzdCBjdXJyZW50aWRdICYmICRpZCBlcSAkY3VycmVudGlkfSB7CisJdW5zZXQgY3VycmVudGlkCisJc2V0IHNlbGVjdGVkbGluZSB7fQorICAgIH0KKyAgICBpZiB7W2luZm8gZXhpc3RzIHRhcmdldGlkXSAmJiAkdGFyZ2V0aWQgZXEgJGlkfSB7CisJc2V0IHRhcmdldGlkICRwCisgICAgfQorICAgIHNldGNhbnZzY3JvbGwKKyAgICBkcmF3dmlzaWJsZQorfQorCitwcm9jIGZpcnN0X3JlYWxfY2hpbGQge3ZwfSB7CisgICAgZ2xvYmFsIGNoaWxkcmVuIG51bGxpZCBudWxsaWQyCisKKyAgICBmb3JlYWNoIGlkICRjaGlsZHJlbigkdnApIHsKKwlpZiB7JGlkIG5lICRudWxsaWQgJiYgJGlkIG5lICRudWxsaWQyfSB7CisJICAgIHJldHVybiAkaWQKKwl9CisgICAgfQorICAgIHJldHVybiB7fQorfQorCitwcm9jIGxhc3RfcmVhbF9jaGlsZCB7dnB9IHsKKyAgICBnbG9iYWwgY2hpbGRyZW4gbnVsbGlkIG51bGxpZDIKKworICAgIHNldCBraWRzICRjaGlsZHJlbigkdnApCisgICAgZm9yIHtzZXQgaSBbbGxlbmd0aCAka2lkc119IHtbaW5jciBpIC0xXSA+PSAwfSB7fSB7CisJc2V0IGlkIFtsaW5kZXggJGtpZHMgJGldCisJaWYgeyRpZCBuZSAkbnVsbGlkICYmICRpZCBuZSAkbnVsbGlkMn0geworCSAgICByZXR1cm4gJGlkCisJfQorICAgIH0KKyAgICByZXR1cm4ge30KK30KKworcHJvYyB2dG9rY21wIHt2IGEgYn0geworICAgIGdsb2JhbCB2YXJjdG9rIHZhcmNpZAorCisgICAgcmV0dXJuIFtzdHJpbmcgY29tcGFyZSBbbGluZGV4ICR2YXJjdG9rKCR2KSAkdmFyY2lkKCR2LCRhKV0gXAorCQlbbGluZGV4ICR2YXJjdG9rKCR2KSAkdmFyY2lkKCR2LCRiKV1dCit9CisKKyMgVGhpcyBhc3N1bWVzIHRoYXQgaWYgbGltIGlzIG5vdCBnaXZlbiwgdGhlIGNhbGxlciBoYXMgY2hlY2tlZCB0aGF0CisjIGFyYyBhJ3MgdG9rZW4gaXMgbGVzcyB0aGFuICR2dG9rbW9kKCR2KQorcHJvYyBtb2RpZnlfYXJjIHt2IGEge2xpbSB7fX19IHsKKyAgICBnbG9iYWwgdmFyY3RvayB2dG9rbW9kIHZhcmNtb2QgdmFyY3JvdyB2dXBwdHIgY3VydmlldyB2cm93bW9kIHZhcmNjb21taXRzCisKKyAgICBpZiB7JGxpbSBuZSB7fX0geworCXNldCBjIFtzdHJpbmcgY29tcGFyZSBbbGluZGV4ICR2YXJjdG9rKCR2KSAkYV0gJHZ0b2ttb2QoJHYpXQorCWlmIHskYyA+IDB9IHJldHVybgorCWlmIHskYyA9PSAwfSB7CisJICAgIHNldCByIFtsaW5kZXggJHZhcmNyb3coJHYpICRhXQorCSAgICBpZiB7JHIgbmUge30gJiYgJHZyb3dtb2QoJHYpIDw9ICRyICsgJGxpbX0gcmV0dXJuCisJfQorICAgIH0KKyAgICBzZXQgdnRva21vZCgkdikgW2xpbmRleCAkdmFyY3RvaygkdikgJGFdCisgICAgc2V0IHZhcmNtb2QoJHYpICRhCisgICAgaWYgeyR2ID09ICRjdXJ2aWV3fSB7CisJd2hpbGUgeyRhICE9IDAgJiYgW2xpbmRleCAkdmFyY3JvdygkdikgJGFdIGVxIHt9fSB7CisJICAgIHNldCBhIFtsaW5kZXggJHZ1cHB0cigkdikgJGFdCisJICAgIHNldCBsaW0ge30KKwl9CisJc2V0IHIgMAorCWlmIHskYSAhPSAwfSB7CisJICAgIGlmIHskbGltIGVxIHt9fSB7CisJCXNldCBsaW0gW2xsZW5ndGggJHZhcmNjb21taXRzKCR2LCRhKV0KKwkgICAgfQorCSAgICBzZXQgciBbZXhwciB7W2xpbmRleCAkdmFyY3JvdygkdikgJGFdICsgJGxpbX1dCisJfQorCXNldCB2cm93bW9kKCR2KSAkcgorCXVuZG9sYXlvdXQgJHIKKyAgICB9Cit9CisKK3Byb2MgdXBkYXRlX2FyY3Jvd3Mge3Z9IHsKKyAgICBnbG9iYWwgdnRva21vZCB2YXJjbW9kIHZyb3dtb2QgdmFyY3JvdyBjb21taXRpZHggY3VycmVudGlkIHNlbGVjdGVkbGluZQorICAgIGdsb2JhbCB2YXJjaWQgdnJvd251bSB2YXJjb3JkZXIgdmFyY2l4IHZhcmNjb21taXRzCisgICAgZ2xvYmFsIHZ1cHB0ciB2ZG93bnB0ciB2bGVmdHB0ciB2YXJjdG9rCisgICAgZ2xvYmFsIGRpc3BsYXlvcmRlciBwYXJlbnRsaXN0IGN1cnZpZXcgY2FjaGVkX2NvbW1pdHJvdworCisgICAgaWYgeyR2cm93bW9kKCR2KSA9PSAkY29tbWl0aWR4KCR2KX0gcmV0dXJuCisgICAgaWYgeyR2ID09ICRjdXJ2aWV3fSB7CisJaWYge1tsbGVuZ3RoICRkaXNwbGF5b3JkZXJdID4gJHZyb3dtb2QoJHYpfSB7CisJICAgIHNldCBkaXNwbGF5b3JkZXIgW2xyYW5nZSAkZGlzcGxheW9yZGVyIDAgW2V4cHIgeyR2cm93bW9kKCR2KSAtIDF9XV0KKwkgICAgc2V0IHBhcmVudGxpc3QgW2xyYW5nZSAkcGFyZW50bGlzdCAwIFtleHByIHskdnJvd21vZCgkdikgLSAxfV1dCisJfQorCWNhdGNoIHt1bnNldCBjYWNoZWRfY29tbWl0cm93fQorICAgIH0KKyAgICBzZXQgbmFyY3RvdCBbZXhwciB7W2xsZW5ndGggJHZhcmN0b2soJHYpXSAtIDF9XQorICAgIHNldCBhICR2YXJjbW9kKCR2KQorICAgIHdoaWxlIHskYSAhPSAwICYmIFtsaW5kZXggJHZhcmNpeCgkdikgJGFdIGVxIHt9fSB7CisJIyBnbyB1cCB0aGUgdHJlZSB1bnRpbCB3ZSBmaW5kIHNvbWV0aGluZyB0aGF0IGhhcyBhIHJvdyBudW1iZXIsCisJIyBvciB3ZSBnZXQgdG8gYSBzZWVkCisJc2V0IGEgW2xpbmRleCAkdnVwcHRyKCR2KSAkYV0KKyAgICB9CisgICAgaWYgeyRhID09IDB9IHsKKwlzZXQgYSBbbGluZGV4ICR2ZG93bnB0cigkdikgMF0KKwlpZiB7JGEgPT0gMH0gcmV0dXJuCisJc2V0IHZyb3dudW0oJHYpIHswfQorCXNldCB2YXJjb3JkZXIoJHYpIFtsaXN0ICRhXQorCWxzZXQgdmFyY2l4KCR2KSAkYSAwCisJbHNldCB2YXJjcm93KCR2KSAkYSAwCisJc2V0IGFyY24gMAorCXNldCByb3cgMAorICAgIH0gZWxzZSB7CisJc2V0IGFyY24gW2xpbmRleCAkdmFyY2l4KCR2KSAkYV0KKwlpZiB7W2xsZW5ndGggJHZyb3dudW0oJHYpXSA+ICRhcmNuICsgMX0geworCSAgICBzZXQgdnJvd251bSgkdikgW2xyYW5nZSAkdnJvd251bSgkdikgMCAkYXJjbl0KKwkgICAgc2V0IHZhcmNvcmRlcigkdikgW2xyYW5nZSAkdmFyY29yZGVyKCR2KSAwICRhcmNuXQorCX0KKwlzZXQgcm93IFtsaW5kZXggJHZhcmNyb3coJHYpICRhXQorICAgIH0KKyAgICB3aGlsZSB7MX0geworCXNldCBwICRhCisJaW5jciByb3cgW2xsZW5ndGggJHZhcmNjb21taXRzKCR2LCRhKV0KKwkjIGdvIGRvd24gaWYgcG9zc2libGUKKwlzZXQgYiBbbGluZGV4ICR2ZG93bnB0cigkdikgJGFdCisJaWYgeyRiID09IDB9IHsKKwkgICAgIyBpZiBub3QsIGdvIGxlZnQsIG9yIGdvIHVwIHVudGlsIHdlIGNhbiBnbyBsZWZ0CisJICAgIHdoaWxlIHskYSAhPSAwfSB7CisJCXNldCBiIFtsaW5kZXggJHZsZWZ0cHRyKCR2KSAkYV0KKwkJaWYgeyRiICE9IDB9IGJyZWFrCisJCXNldCBhIFtsaW5kZXggJHZ1cHB0cigkdikgJGFdCisJICAgIH0KKwkgICAgaWYgeyRhID09IDB9IGJyZWFrCisJfQorCXNldCBhICRiCisJaW5jciBhcmNuCisJbGFwcGVuZCB2cm93bnVtKCR2KSAkcm93CisJbGFwcGVuZCB2YXJjb3JkZXIoJHYpICRhCisJbHNldCB2YXJjaXgoJHYpICRhICRhcmNuCisJbHNldCB2YXJjcm93KCR2KSAkYSAkcm93CisgICAgfQorICAgIHNldCB2dG9rbW9kKCR2KSBbbGluZGV4ICR2YXJjdG9rKCR2KSAkcF0KKyAgICBzZXQgdmFyY21vZCgkdikgJHAKKyAgICBzZXQgdnJvd21vZCgkdikgJHJvdworICAgIGlmIHtbaW5mbyBleGlzdHMgY3VycmVudGlkXX0geworCXNldCBzZWxlY3RlZGxpbmUgW3Jvd29mY29tbWl0ICRjdXJyZW50aWRdCisgICAgfQorfQorCisjIFRlc3Qgd2hldGhlciB2aWV3ICR2IGNvbnRhaW5zIGNvbW1pdCAkaWQKK3Byb2MgY29tbWl0aW52aWV3IHtpZCB2fSB7CisgICAgZ2xvYmFsIHZhcmNpZAorCisgICAgcmV0dXJuIFtpbmZvIGV4aXN0cyB2YXJjaWQoJHYsJGlkKV0KK30KKworIyBSZXR1cm4gdGhlIHJvdyBudW1iZXIgZm9yIGNvbW1pdCAkaWQgaW4gdGhlIGN1cnJlbnQgdmlldworcHJvYyByb3dvZmNvbW1pdCB7aWR9IHsKKyAgICBnbG9iYWwgdmFyY2lkIHZhcmNjb21taXRzIHZhcmNyb3cgY3VydmlldyBjYWNoZWRfY29tbWl0cm93CisgICAgZ2xvYmFsIHZhcmN0b2sgdnRva21vZAorCisgICAgc2V0IHYgJGN1cnZpZXcKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyB2YXJjaWQoJHYsJGlkKV19IHsKKwlwdXRzICJvb3BzIHJvd29mY29tbWl0IG5vIGFyYyBmb3IgW3Nob3J0aWRzICRpZF0iCisJcmV0dXJuIHt9CisgICAgfQorICAgIHNldCBhICR2YXJjaWQoJHYsJGlkKQorICAgIGlmIHtbc3RyaW5nIGNvbXBhcmUgW2xpbmRleCAkdmFyY3RvaygkdikgJGFdICR2dG9rbW9kKCR2KV0gPj0gMH0geworCXVwZGF0ZV9hcmNyb3dzICR2CisgICAgfQorICAgIGlmIHtbaW5mbyBleGlzdHMgY2FjaGVkX2NvbW1pdHJvdygkaWQpXX0geworCXJldHVybiAkY2FjaGVkX2NvbW1pdHJvdygkaWQpCisgICAgfQorICAgIHNldCBpIFtsc2VhcmNoIC1leGFjdCAkdmFyY2NvbW1pdHMoJHYsJGEpICRpZF0KKyAgICBpZiB7JGkgPCAwfSB7CisJcHV0cyAib29wcyBkaWRuJ3QgZmluZCBjb21taXQgW3Nob3J0aWRzICRpZF0gaW4gYXJjICRhIgorCXJldHVybiB7fQorICAgIH0KKyAgICBpbmNyIGkgW2xpbmRleCAkdmFyY3JvdygkdikgJGFdCisgICAgc2V0IGNhY2hlZF9jb21taXRyb3coJGlkKSAkaQorICAgIHJldHVybiAkaQorfQorCisjIFJldHVybnMgMSBpZiBhIGlzIG9uIGFuIGVhcmxpZXIgcm93IHRoYW4gYiwgb3RoZXJ3aXNlIDAKK3Byb2MgY29tZXNfYmVmb3JlIHthIGJ9IHsKKyAgICBnbG9iYWwgdmFyY2lkIHZhcmN0b2sgY3VydmlldworCisgICAgc2V0IHYgJGN1cnZpZXcKKyAgICBpZiB7JGEgZXEgJGIgfHwgIVtpbmZvIGV4aXN0cyB2YXJjaWQoJHYsJGEpXSB8fCBcCisJICAgICFbaW5mbyBleGlzdHMgdmFyY2lkKCR2LCRiKV19IHsKKwlyZXR1cm4gMAorICAgIH0KKyAgICBpZiB7JHZhcmNpZCgkdiwkYSkgIT0gJHZhcmNpZCgkdiwkYil9IHsKKwlyZXR1cm4gW2V4cHIge1tzdHJpbmcgY29tcGFyZSBbbGluZGV4ICR2YXJjdG9rKCR2KSAkdmFyY2lkKCR2LCRhKV0gXAorCQkJICAgW2xpbmRleCAkdmFyY3RvaygkdikgJHZhcmNpZCgkdiwkYildXSA8IDB9XQorICAgIH0KKyAgICByZXR1cm4gW2V4cHIge1tyb3dvZmNvbW1pdCAkYV0gPCBbcm93b2Zjb21taXQgJGJdfV0KK30KKworcHJvYyBic2VhcmNoIHtsIGVsdH0geworICAgIGlmIHtbbGxlbmd0aCAkbF0gPT0gMCB8fCAkZWx0IDw9IFtsaW5kZXggJGwgMF19IHsKKwlyZXR1cm4gMAorICAgIH0KKyAgICBzZXQgbG8gMAorICAgIHNldCBoaSBbbGxlbmd0aCAkbF0KKyAgICB3aGlsZSB7JGhpIC0gJGxvID4gMX0geworCXNldCBtaWQgW2V4cHIge2ludCgoJGxvICsgJGhpKSAvIDIpfV0KKwlzZXQgdCBbbGluZGV4ICRsICRtaWRdCisJaWYgeyRlbHQgPCAkdH0geworCSAgICBzZXQgaGkgJG1pZAorCX0gZWxzZWlmIHskZWx0ID4gJHR9IHsKKwkgICAgc2V0IGxvICRtaWQKKwl9IGVsc2UgeworCSAgICByZXR1cm4gJG1pZAorCX0KKyAgICB9CisgICAgcmV0dXJuICRsbworfQorCisjIE1ha2Ugc3VyZSByb3dzICRzdGFydC4uJGVuZC0xIGFyZSB2YWxpZCBpbiBkaXNwbGF5b3JkZXIgYW5kIHBhcmVudGxpc3QKK3Byb2MgbWFrZV9kaXNwb3JkZXIge3N0YXJ0IGVuZH0geworICAgIGdsb2JhbCB2cm93bnVtIGN1cnZpZXcgY29tbWl0aWR4IGRpc3BsYXlvcmRlciBwYXJlbnRsaXN0CisgICAgZ2xvYmFsIHZhcmNjb21taXRzIHZhcmNvcmRlciBwYXJlbnRzIHZyb3dtb2QgdmFyY3JvdworICAgIGdsb2JhbCBkX3ZhbGlkX3N0YXJ0IGRfdmFsaWRfZW5kCisKKyAgICBpZiB7JGVuZCA+ICR2cm93bW9kKCRjdXJ2aWV3KX0geworCXVwZGF0ZV9hcmNyb3dzICRjdXJ2aWV3CisgICAgfQorICAgIHNldCBhaSBbYnNlYXJjaCAkdnJvd251bSgkY3VydmlldykgJHN0YXJ0XQorICAgIHNldCBzdGFydCBbbGluZGV4ICR2cm93bnVtKCRjdXJ2aWV3KSAkYWldCisgICAgc2V0IG5hcmMgW2xsZW5ndGggJHZyb3dudW0oJGN1cnZpZXcpXQorICAgIGZvciB7c2V0IHIgJHN0YXJ0fSB7JGFpIDwgJG5hcmMgJiYgJHIgPCAkZW5kfSB7aW5jciBhaX0geworCXNldCBhIFtsaW5kZXggJHZhcmNvcmRlcigkY3VydmlldykgJGFpXQorCXNldCBsIFtsbGVuZ3RoICRkaXNwbGF5b3JkZXJdCisJc2V0IGFsIFtsbGVuZ3RoICR2YXJjY29tbWl0cygkY3VydmlldywkYSldCisJaWYgeyRsIDwgJHIgKyAkYWx9IHsKKwkgICAgaWYgeyRsIDwgJHJ9IHsKKwkJc2V0IHBhZCBbbnRpbWVzIFtleHByIHskciAtICRsfV0ge31dCisJCXNldCBkaXNwbGF5b3JkZXIgW2NvbmNhdCAkZGlzcGxheW9yZGVyICRwYWRdCisJCXNldCBwYXJlbnRsaXN0IFtjb25jYXQgJHBhcmVudGxpc3QgJHBhZF0KKwkgICAgfSBlbHNlaWYgeyRsID4gJHJ9IHsKKwkJc2V0IGRpc3BsYXlvcmRlciBbbHJhbmdlICRkaXNwbGF5b3JkZXIgMCBbZXhwciB7JHIgLSAxfV1dCisJCXNldCBwYXJlbnRsaXN0IFtscmFuZ2UgJHBhcmVudGxpc3QgMCBbZXhwciB7JHIgLSAxfV1dCisJICAgIH0KKwkgICAgZm9yZWFjaCBpZCAkdmFyY2NvbW1pdHMoJGN1cnZpZXcsJGEpIHsKKwkJbGFwcGVuZCBkaXNwbGF5b3JkZXIgJGlkCisJCWxhcHBlbmQgcGFyZW50bGlzdCAkcGFyZW50cygkY3VydmlldywkaWQpCisJICAgIH0KKwl9IGVsc2VpZiB7W2xpbmRleCAkZGlzcGxheW9yZGVyIFtleHByIHskciArICRhbCAtIDF9XV0gZXEge319IHsKKwkgICAgc2V0IGkgJHIKKwkgICAgZm9yZWFjaCBpZCAkdmFyY2NvbW1pdHMoJGN1cnZpZXcsJGEpIHsKKwkJbHNldCBkaXNwbGF5b3JkZXIgJGkgJGlkCisJCWxzZXQgcGFyZW50bGlzdCAkaSAkcGFyZW50cygkY3VydmlldywkaWQpCisJCWluY3IgaQorCSAgICB9CisJfQorCWluY3IgciAkYWwKKyAgICB9Cit9CisKK3Byb2MgY29tbWl0b25yb3cge3Jvd30geworICAgIGdsb2JhbCBkaXNwbGF5b3JkZXIKKworICAgIHNldCBpZCBbbGluZGV4ICRkaXNwbGF5b3JkZXIgJHJvd10KKyAgICBpZiB7JGlkIGVxIHt9fSB7CisJbWFrZV9kaXNwb3JkZXIgJHJvdyBbZXhwciB7JHJvdyArIDF9XQorCXNldCBpZCBbbGluZGV4ICRkaXNwbGF5b3JkZXIgJHJvd10KKyAgICB9CisgICAgcmV0dXJuICRpZAorfQorCitwcm9jIGNsb3NldmFyY3Mge3Z9IHsKKyAgICBnbG9iYWwgdmFyY3RvayB2YXJjY29tbWl0cyB2YXJjaWQgcGFyZW50cyBjaGlsZHJlbgorICAgIGdsb2JhbCBjbWl0bGlzdGVkIGNvbW1pdGlkeCBjb21taXRpbnRlcmVzdCB2dG9rbW9kCisKKyAgICBzZXQgbWlzc2luZ19wYXJlbnRzIDAKKyAgICBzZXQgc2NyaXB0cyB7fQorICAgIHNldCBuYXJjcyBbbGxlbmd0aCAkdmFyY3RvaygkdildCisgICAgZm9yIHtzZXQgYSAxfSB7JGEgPCAkbmFyY3N9IHtpbmNyIGF9IHsKKwlzZXQgaWQgW2xpbmRleCAkdmFyY2NvbW1pdHMoJHYsJGEpIGVuZF0KKwlmb3JlYWNoIHAgJHBhcmVudHMoJHYsJGlkKSB7CisJICAgIGlmIHtbaW5mbyBleGlzdHMgdmFyY2lkKCR2LCRwKV19IGNvbnRpbnVlCisJICAgICMgYWRkIHAgYXMgYSBuZXcgY29tbWl0CisJICAgIGluY3IgbWlzc2luZ19wYXJlbnRzCisJICAgIHNldCBjbWl0bGlzdGVkKCR2LCRwKSAwCisJICAgIHNldCBwYXJlbnRzKCR2LCRwKSB7fQorCSAgICBpZiB7W2xsZW5ndGggJGNoaWxkcmVuKCR2LCRwKV0gPT0gMSAmJgorCQlbbGxlbmd0aCAkcGFyZW50cygkdiwkaWQpXSA9PSAxfSB7CisJCXNldCBiICRhCisJICAgIH0gZWxzZSB7CisJCXNldCBiIFtuZXd2YXJjICR2ICRwXQorCSAgICB9CisJICAgIHNldCB2YXJjaWQoJHYsJHApICRiCisJICAgIGlmIHtbc3RyaW5nIGNvbXBhcmUgW2xpbmRleCAkdmFyY3RvaygkdikgJGJdICR2dG9rbW9kKCR2KV0gPCAwfSB7CisJCW1vZGlmeV9hcmMgJHYgJGIKKwkgICAgfQorCSAgICBsYXBwZW5kIHZhcmNjb21taXRzKCR2LCRiKSAkcAorCSAgICBpbmNyIGNvbW1pdGlkeCgkdikKKwkgICAgaWYge1tpbmZvIGV4aXN0cyBjb21taXRpbnRlcmVzdCgkcCldfSB7CisJCWZvcmVhY2ggc2NyaXB0ICRjb21taXRpbnRlcmVzdCgkcCkgeworCQkgICAgbGFwcGVuZCBzY3JpcHRzIFtzdHJpbmcgbWFwIFtsaXN0ICIlSSIgJHBdICRzY3JpcHRdCisJCX0KKwkJdW5zZXQgY29tbWl0aW50ZXJlc3QoJGlkKQorCSAgICB9CisJfQorICAgIH0KKyAgICBpZiB7JG1pc3NpbmdfcGFyZW50cyA+IDB9IHsKKwlmb3JlYWNoIHMgJHNjcmlwdHMgeworCSAgICBldmFsICRzCisJfQorICAgIH0KK30KKworIyBVc2UgJHJ3aWQgYXMgYSBzdWJzdGl0dXRlIGZvciAkaWQsIGkuZS4gcmVwYXJlbnQgJGlkJ3MgY2hpbGRyZW4gdG8gJHJ3aWQKKyMgQXNzdW1lcyB3ZSBhbHJlYWR5IGhhdmUgYW4gYXJjIGZvciAkcndpZC4KK3Byb2MgcmV3cml0ZV9jb21taXQge3YgaWQgcndpZH0geworICAgIGdsb2JhbCBjaGlsZHJlbiBwYXJlbnRzIHZhcmNpZCB2YXJjdG9rIHZ0b2ttb2QgdmFyY2NvbW1pdHMKKworICAgIGZvcmVhY2ggY2ggJGNoaWxkcmVuKCR2LCRpZCkgeworCSMgbWFrZSAkcndpZCBiZSAkY2gncyBwYXJlbnQgaW4gcGxhY2Ugb2YgJGlkCisJc2V0IGkgW2xzZWFyY2ggLWV4YWN0ICRwYXJlbnRzKCR2LCRjaCkgJGlkXQorCWlmIHskaSA8IDB9IHsKKwkgICAgcHV0cyAib29wcyByZXdyaXRlX2NvbW1pdCBkaWRuJ3QgZmluZCAkaWQgaW4gcGFyZW50IGxpc3QgZm9yICRjaCIKKwl9CisJc2V0IHBhcmVudHMoJHYsJGNoKSBbbHJlcGxhY2UgJHBhcmVudHMoJHYsJGNoKSAkaSAkaSAkcndpZF0KKwkjIGFkZCAkY2ggdG8gJHJ3aWQncyBjaGlsZHJlbiBhbmQgc29ydCB0aGUgbGlzdCBpZiBuZWNlc3NhcnkKKwlpZiB7W2xsZW5ndGggW2xhcHBlbmQgY2hpbGRyZW4oJHYsJHJ3aWQpICRjaF1dID4gMX0geworCSAgICBzZXQgY2hpbGRyZW4oJHYsJHJ3aWQpIFtsc29ydCAtY29tbWFuZCBbbGlzdCB2dG9rY21wICR2XSBcCisJCQkJCSRjaGlsZHJlbigkdiwkcndpZCldCisJfQorCSMgZml4IHRoZSBncmFwaCBhZnRlciBqb2luaW5nICRpZCB0byAkcndpZAorCXNldCBhICR2YXJjaWQoJHYsJGNoKQorCWZpeF9yZXZlcnNhbCAkcndpZCAkYSAkdgorCSMgcGFyZW50bGlzdCBpcyB3cm9uZyBmb3IgdGhlIGxhc3QgZWxlbWVudCBvZiBhcmMgJGEKKwkjIGV2ZW4gaWYgZGlzcGxheW9yZGVyIGlzIHJpZ2h0LCBoZW5jZSB0aGUgM3JkIGFyZyBoZXJlCisJbW9kaWZ5X2FyYyAkdiAkYSBbZXhwciB7W2xsZW5ndGggJHZhcmNjb21taXRzKCR2LCRhKV0gLSAxfV0KKyAgICB9Cit9CisKK3Byb2MgZ2V0Y29tbWl0bGluZXMge2ZkIGluc3QgdmlldyB1cGRhdGluZ30gIHsKKyAgICBnbG9iYWwgY21pdGxpc3RlZCBjb21taXRpbnRlcmVzdCBsZWZ0b3ZlcgorICAgIGdsb2JhbCBjb21taXRpZHggY29tbWl0ZGF0YSB2ZGF0ZW1vZGUKKyAgICBnbG9iYWwgcGFyZW50cyBjaGlsZHJlbiBjdXJ2aWV3IGhsdmlldworICAgIGdsb2JhbCBpZHBlbmRpbmcgb3JkZXJ0b2sKKyAgICBnbG9iYWwgdmFyY2NvbW1pdHMgdmFyY2lkIHZhcmN0b2sgdnRva21vZCB2ZmlsZWxpbWl0CiAKICAgICBzZXQgc3R1ZmYgW3JlYWQgJGZkIDUwMDAwMF0KICAgICAjIGdpdCBsb2cgZG9lc24ndCB0ZXJtaW5hdGUgdGhlIGxhc3QgY29tbWl0IHdpdGggYSBudWxsLi4uCi0gICAgaWYgeyRzdHVmZiA9PSB7fSAmJiAkbGVmdG92ZXIoJHZpZXcpIG5lIHt9ICYmIFtlb2YgJGZkXX0geworICAgIGlmIHskc3R1ZmYgPT0ge30gJiYgJGxlZnRvdmVyKCRpbnN0KSBuZSB7fSAmJiBbZW9mICRmZF19IHsKIAlzZXQgc3R1ZmYgIlwwIgogICAgIH0KICAgICBpZiB7JHN0dWZmID09IHt9fSB7CiAJaWYgeyFbZW9mICRmZF19IHsKIAkgICAgcmV0dXJuIDEKIAl9Ci0JIyBDaGVjayBpZiB3ZSBoYXZlIHNlZW4gYW55IGlkcyBsaXN0ZWQgYXMgcGFyZW50cyB0aGF0IGhhdmVuJ3QKLQkjIGFwcGVhcmVkIGluIHRoZSBsaXN0Ci0JZm9yZWFjaCB2aWQgW2FycmF5IG5hbWVzIGlkcGVuZGluZyAiJHZpZXcsKiJdIHsKLQkgICAgIyBzaG91bGQgb25seSBnZXQgaGVyZSBpZiBnaXQgbG9nIGlzIGJ1Z2d5Ci0JICAgIHNldCBpZCBbbGluZGV4IFtzcGxpdCAkdmlkICIsIl0gMV0KLQkgICAgc2V0IGNvbW1pdHJvdygkdmlkKSAkY29tbWl0aWR4KCR2aWV3KQotCSAgICBpbmNyIGNvbW1pdGlkeCgkdmlldykKLQkgICAgaWYgeyR2aWV3ID09ICRjdXJ2aWV3fSB7Ci0JCWxhcHBlbmQgcGFyZW50bGlzdCB7fQotCQlsYXBwZW5kIGRpc3BsYXlvcmRlciAkaWQKLQkJbGFwcGVuZCBjb21taXRsaXN0ZWQgMAotCSAgICB9IGVsc2UgewotCQlsYXBwZW5kIHZwYXJlbnRsaXN0KCR2aWV3KSB7fQotCQlsYXBwZW5kIHZkaXNwb3JkZXIoJHZpZXcpICRpZAotCQlsYXBwZW5kIHZjbWl0bGlzdGVkKCR2aWV3KSAwCi0JICAgIH0KKwlnbG9iYWwgY29tbWZkIHZpZXdjb21wbGV0ZSB2aWV3YWN0aXZlIHZpZXduYW1lCisJZ2xvYmFsIHZpZXdpbnN0YW5jZXMKKwl1bnNldCBjb21tZmQoJGluc3QpCisJc2V0IGkgW2xzZWFyY2ggLWV4YWN0ICR2aWV3aW5zdGFuY2VzKCR2aWV3KSAkaW5zdF0KKwlpZiB7JGkgPj0gMH0geworCSAgICBzZXQgdmlld2luc3RhbmNlcygkdmlldykgW2xyZXBsYWNlICR2aWV3aW5zdGFuY2VzKCR2aWV3KSAkaSAkaV0KIAl9Ci0Jc2V0IHZpZXdjb21wbGV0ZSgkdmlldykgMQotCWdsb2JhbCB2aWV3bmFtZSBwcm9ncmVzc2Nvb3JkcwotCXVuc2V0IGNvbW1mZCgkdmlldykKLQlub3RidXN5ICR2aWV3Ci0Jc2V0IHByb2dyZXNzY29vcmRzIHswIDB9Ci0JYWRqdXN0cHJvZ3Jlc3MKIAkjIHNldCBpdCBibG9ja2luZyBzbyB3ZSB3YWl0IGZvciB0aGUgcHJvY2VzcyB0byB0ZXJtaW5hdGUKIAlmY29uZmlndXJlICRmZCAtYmxvY2tpbmcgMQogCWlmIHtbY2F0Y2gge2Nsb3NlICRmZH0gZXJyXX0gewpAQCAtMjEzLDEwICsxMjg4LDEwIEBACiAJICAgIH0KIAkgICAgaWYge1tzdHJpbmcgcmFuZ2UgJGVyciAwIDRdID09ICJ1c2FnZSJ9IHsKIAkJc2V0IGVyciAiR2l0azogZXJyb3IgcmVhZGluZyBjb21taXRzJGZ2OlwKLQkJCWJhZCBhcmd1bWVudHMgdG8gZ2l0IHJldi1saXN0LiIKKwkJCWJhZCBhcmd1bWVudHMgdG8gZ2l0IGxvZy4iCiAJCWlmIHskdmlld25hbWUoJHZpZXcpIGVxICJDb21tYW5kIGxpbmUifSB7CiAJCSAgICBhcHBlbmQgZXJyIFwKLQkJCSIgIChOb3RlOiBhcmd1bWVudHMgdG8gZ2l0ayBhcmUgcGFzc2VkIHRvIGdpdCByZXYtbGlzdFwKKwkJCSIgIChOb3RlOiBhcmd1bWVudHMgdG8gZ2l0ayBhcmUgcGFzc2VkIHRvIGdpdCBsb2dcCiAJCQkgdG8gYWxsb3cgc2VsZWN0aW9uIG9mIGNvbW1pdHMgdG8gYmUgZGlzcGxheWVkLikiCiAJCX0KIAkgICAgfSBlbHNlIHsKQEAgLTIyNCwyMyArMTI5OSwzMSBAQAogCSAgICB9CiAJICAgIGVycm9yX3BvcHVwICRlcnIKIAl9CisJaWYge1tpbmNyIHZpZXdhY3RpdmUoJHZpZXcpIC0xXSA8PSAwfSB7CisJICAgIHNldCB2aWV3Y29tcGxldGUoJHZpZXcpIDEKKwkgICAgIyBDaGVjayBpZiB3ZSBoYXZlIHNlZW4gYW55IGlkcyBsaXN0ZWQgYXMgcGFyZW50cyB0aGF0IGhhdmVuJ3QKKwkgICAgIyBhcHBlYXJlZCBpbiB0aGUgbGlzdAorCSAgICBjbG9zZXZhcmNzICR2aWV3CisJICAgIG5vdGJ1c3kgJHZpZXcKKwl9CiAJaWYgeyR2aWV3ID09ICRjdXJ2aWV3fSB7Ci0JICAgIHJ1biBjaGV3Y29tbWl0cyAkdmlldworCSAgICBydW4gY2hld2NvbW1pdHMKIAl9CiAJcmV0dXJuIDAKICAgICB9CiAgICAgc2V0IHN0YXJ0IDAKICAgICBzZXQgZ290c29tZSAwCisgICAgc2V0IHNjcmlwdHMge30KICAgICB3aGlsZSAxIHsKIAlzZXQgaSBbc3RyaW5nIGZpcnN0ICJcMCIgJHN0dWZmICRzdGFydF0KIAlpZiB7JGkgPCAwfSB7Ci0JICAgIGFwcGVuZCBsZWZ0b3ZlcigkdmlldykgW3N0cmluZyByYW5nZSAkc3R1ZmYgJHN0YXJ0IGVuZF0KKwkgICAgYXBwZW5kIGxlZnRvdmVyKCRpbnN0KSBbc3RyaW5nIHJhbmdlICRzdHVmZiAkc3RhcnQgZW5kXQogCSAgICBicmVhawogCX0KIAlpZiB7JHN0YXJ0ID09IDB9IHsKLQkgICAgc2V0IGNtaXQgJGxlZnRvdmVyKCR2aWV3KQorCSAgICBzZXQgY21pdCAkbGVmdG92ZXIoJGluc3QpCiAJICAgIGFwcGVuZCBjbWl0IFtzdHJpbmcgcmFuZ2UgJHN0dWZmIDAgW2V4cHIgeyRpIC0gMX1dXQotCSAgICBzZXQgbGVmdG92ZXIoJHZpZXcpIHt9CisJICAgIHNldCBsZWZ0b3ZlcigkaW5zdCkge30KIAl9IGVsc2UgewogCSAgICBzZXQgY21pdCBbc3RyaW5nIHJhbmdlICRzdHVmZiAkc3RhcnQgW2V4cHIgeyRpIC0gMX1dXQogCX0KQEAgLTI3NiwxMjEgKzEzNTksMTI3IEBACiAJICAgIGV4aXQgMQogCX0KIAlzZXQgaWQgW2xpbmRleCAkaWRzIDBdCi0JaWYgeyFbaW5mbyBleGlzdHMgb3JkZXJ0b2soJHZpZXcsJGlkKV19IHsKLQkgICAgc2V0IG90b2sgIm9bc3RycmVwICR2bmV4dHJvb3QoJHZpZXcpXSIKLQkgICAgaW5jciB2bmV4dHJvb3QoJHZpZXcpCi0JICAgIHNldCBvcmRlcnRvaygkdmlldywkaWQpICRvdG9rCi0JfSBlbHNlIHsKLQkgICAgc2V0IG90b2sgJG9yZGVydG9rKCR2aWV3LCRpZCkKLQkgICAgdW5zZXQgaWRwZW5kaW5nKCR2aWV3LCRpZCkKKwlzZXQgdmlkICR2aWV3LCRpZAorCisJaWYgeyEkbGlzdGVkICYmICR1cGRhdGluZyAmJiAhW2luZm8gZXhpc3RzIHZhcmNpZCgkdmlkKV0gJiYKKwkgICAgJHZmaWxlbGltaXQoJHZpZXcpIG5lIHt9fSB7CisJICAgICMgZ2l0IGxvZyBkb2Vzbid0IHJld3JpdGUgcGFyZW50cyBmb3IgdW5saXN0ZWQgY29tbWl0cworCSAgICAjIHdoZW4gZG9pbmcgcGF0aCBsaW1pdGluZywgc28gd29yayBhcm91bmQgdGhhdCBoZXJlCisJICAgICMgYnkgd29ya2luZyBvdXQgdGhlIHJld3JpdHRlbiBwYXJlbnQgd2l0aCBnaXQgcmV2LWxpc3QKKwkgICAgIyBhbmQgaWYgd2UgYWxyZWFkeSBrbm93IGFib3V0IGl0LCB1c2luZyB0aGUgcmV3cml0dGVuCisJICAgICMgcGFyZW50IGFzIGEgc3Vic3RpdHV0ZSBwYXJlbnQgZm9yICRpZCdzIGNoaWxkcmVuLgorCSAgICBpZiB7IVtjYXRjaCB7CisJCXNldCByd2lkIFtleGVjIGdpdCByZXYtbGlzdCAtLWZpcnN0LXBhcmVudCAtLW1heC1jb3VudD0xIFwKKwkJCSAgICAgICRpZCAtLSAkdmZpbGVsaW1pdCgkdmlldyldCisJICAgIH1dfSB7CisJCWlmIHskcndpZCBuZSB7fSAmJiBbaW5mbyBleGlzdHMgdmFyY2lkKCR2aWV3LCRyd2lkKV19IHsKKwkJICAgICMgdXNlICRyd2lkIGluIHBsYWNlIG9mICRpZAorCQkgICAgcmV3cml0ZV9jb21taXQgJHZpZXcgJGlkICRyd2lkCisJCSAgICBjb250aW51ZQorCQl9CisJICAgIH0KKwl9CisKKwlzZXQgYSAwCisJaWYge1tpbmZvIGV4aXN0cyB2YXJjaWQoJHZpZCldfSB7CisJICAgIGlmIHskY21pdGxpc3RlZCgkdmlkKSB8fCAhJGxpc3RlZH0gY29udGludWUKKwkgICAgc2V0IGEgJHZhcmNpZCgkdmlkKQogCX0KIAlpZiB7JGxpc3RlZH0gewogCSAgICBzZXQgb2xkcyBbbHJhbmdlICRpZHMgMSBlbmRdCi0JICAgIGlmIHtbbGxlbmd0aCAkb2xkc10gPT0gMX0gewotCQlzZXQgcCBbbGluZGV4ICRvbGRzIDBdCi0JCWxhcHBlbmQgY2hpbGRyZW4oJHZpZXcsJHApICRpZAotCQlpZiB7IVtpbmZvIGV4aXN0cyBvcmRlcnRvaygkdmlldywkcCldfSB7Ci0JCSAgICBzZXQgb3JkZXJ0b2soJHZpZXcsJHApICRvcmRlcnRvaygkdmlldywkaWQpCi0JCSAgICBzZXQgaWRwZW5kaW5nKCR2aWV3LCRwKSAxCi0JCX0KLQkgICAgfSBlbHNlIHsKLQkJc2V0IGkgMAotCQlmb3JlYWNoIHAgJG9sZHMgewotCQkgICAgaWYgeyRpID09IDAgfHwgW2xzZWFyY2ggLWV4YWN0ICRvbGRzICRwXSA+PSAkaX0gewotCQkJbGFwcGVuZCBjaGlsZHJlbigkdmlldywkcCkgJGlkCi0JCSAgICB9Ci0JCSAgICBpZiB7IVtpbmZvIGV4aXN0cyBvcmRlcnRvaygkdmlldywkcCldfSB7Ci0JCQlzZXQgb3JkZXJ0b2soJHZpZXcsJHApICIkb3Rva1tzdHJyZXAgJGldXSIKLQkJCXNldCBpZHBlbmRpbmcoJHZpZXcsJHApIDEKLQkJICAgIH0KLQkJICAgIGluY3IgaQotCQl9Ci0JICAgIH0KIAl9IGVsc2UgewogCSAgICBzZXQgb2xkcyB7fQogCX0KLQlpZiB7IVtpbmZvIGV4aXN0cyBjaGlsZHJlbigkdmlldywkaWQpXX0gewotCSAgICBzZXQgY2hpbGRyZW4oJHZpZXcsJGlkKSB7fQotCX0KIAlzZXQgY29tbWl0ZGF0YSgkaWQpIFtzdHJpbmcgcmFuZ2UgJGNtaXQgW2V4cHIgeyRqICsgMX1dIGVuZF0KLQlzZXQgY29tbWl0cm93KCR2aWV3LCRpZCkgJGNvbW1pdGlkeCgkdmlldykKLQlpbmNyIGNvbW1pdGlkeCgkdmlldykKLQlpZiB7JHZpZXcgPT0gJGN1cnZpZXd9IHsKLQkgICAgbGFwcGVuZCBwYXJlbnRsaXN0ICRvbGRzCi0JICAgIGxhcHBlbmQgZGlzcGxheW9yZGVyICRpZAotCSAgICBsYXBwZW5kIGNvbW1pdGxpc3RlZCAkbGlzdGVkCi0JfSBlbHNlIHsKLQkgICAgbGFwcGVuZCB2cGFyZW50bGlzdCgkdmlldykgJG9sZHMKLQkgICAgbGFwcGVuZCB2ZGlzcG9yZGVyKCR2aWV3KSAkaWQKLQkgICAgbGFwcGVuZCB2Y21pdGxpc3RlZCgkdmlldykgJGxpc3RlZAorCXNldCBjbWl0bGlzdGVkKCR2aWQpICRsaXN0ZWQKKwlzZXQgcGFyZW50cygkdmlkKSAkb2xkcworCWlmIHshW2luZm8gZXhpc3RzIGNoaWxkcmVuKCR2aWQpXX0geworCSAgICBzZXQgY2hpbGRyZW4oJHZpZCkge30KKwl9IGVsc2VpZiB7JGEgPT0gMCAmJiBbbGxlbmd0aCAkY2hpbGRyZW4oJHZpZCldID09IDF9IHsKKwkgICAgc2V0IGsgW2xpbmRleCAkY2hpbGRyZW4oJHZpZCkgMF0KKwkgICAgaWYge1tsbGVuZ3RoICRwYXJlbnRzKCR2aWV3LCRrKV0gPT0gMSAmJgorCQkoISR2ZGF0ZW1vZGUoJHZpZXcpIHx8CisJCSAkdmFyY2lkKCR2aWV3LCRrKSA9PSBbbGxlbmd0aCAkdmFyY3RvaygkdmlldyldIC0gMSl9IHsKKwkJc2V0IGEgJHZhcmNpZCgkdmlldywkaykKKwkgICAgfQogCX0KKwlpZiB7JGEgPT0gMH0geworCSAgICAjIG5ldyBhcmMKKwkgICAgc2V0IGEgW25ld3ZhcmMgJHZpZXcgJGlkXQorCX0KKwlpZiB7W3N0cmluZyBjb21wYXJlIFtsaW5kZXggJHZhcmN0b2soJHZpZXcpICRhXSAkdnRva21vZCgkdmlldyldIDwgMH0geworCSAgICBtb2RpZnlfYXJjICR2aWV3ICRhCisJfQorCWlmIHshW2luZm8gZXhpc3RzIHZhcmNpZCgkdmlkKV19IHsKKwkgICAgc2V0IHZhcmNpZCgkdmlkKSAkYQorCSAgICBsYXBwZW5kIHZhcmNjb21taXRzKCR2aWV3LCRhKSAkaWQKKwkgICAgaW5jciBjb21taXRpZHgoJHZpZXcpCisJfQorCisJc2V0IGkgMAorCWZvcmVhY2ggcCAkb2xkcyB7CisJICAgIGlmIHskaSA9PSAwIHx8IFtsc2VhcmNoIC1leGFjdCAkb2xkcyAkcF0gPj0gJGl9IHsKKwkJc2V0IHZwICR2aWV3LCRwCisJCWlmIHtbbGxlbmd0aCBbbGFwcGVuZCBjaGlsZHJlbigkdnApICRpZF1dID4gMSAmJgorCQkgICAgW3Z0b2tjbXAgJHZpZXcgW2xpbmRleCAkY2hpbGRyZW4oJHZwKSBlbmQtMV0gJGlkXSA+IDB9IHsKKwkJICAgIHNldCBjaGlsZHJlbigkdnApIFtsc29ydCAtY29tbWFuZCBbbGlzdCB2dG9rY21wICR2aWV3XSBcCisJCQkJCSAgICRjaGlsZHJlbigkdnApXQorCQkgICAgY2F0Y2gge3Vuc2V0IG9yZGVydG9rfQorCQl9CisJCWlmIHtbaW5mbyBleGlzdHMgdmFyY2lkKCR2aWV3LCRwKV19IHsKKwkJICAgIGZpeF9yZXZlcnNhbCAkcCAkYSAkdmlldworCQl9CisJICAgIH0KKwkgICAgaW5jciBpCisJfQorCiAJaWYge1tpbmZvIGV4aXN0cyBjb21taXRpbnRlcmVzdCgkaWQpXX0gewogCSAgICBmb3JlYWNoIHNjcmlwdCAkY29tbWl0aW50ZXJlc3QoJGlkKSB7Ci0JCWV2YWwgW3N0cmluZyBtYXAgW2xpc3QgIiVJIiAkaWRdICRzY3JpcHRdCisJCWxhcHBlbmQgc2NyaXB0cyBbc3RyaW5nIG1hcCBbbGlzdCAiJUkiICRpZF0gJHNjcmlwdF0KIAkgICAgfQogCSAgICB1bnNldCBjb21taXRpbnRlcmVzdCgkaWQpCiAJfQogCXNldCBnb3Rzb21lIDEKICAgICB9CiAgICAgaWYgeyRnb3Rzb21lfSB7Ci0JcnVuIGNoZXdjb21taXRzICR2aWV3CisJZ2xvYmFsIG51bWNvbW1pdHMgaGx2aWV3CisKIAlpZiB7JHZpZXcgPT0gJGN1cnZpZXd9IHsKLQkgICAgIyB1cGRhdGUgcHJvZ3Jlc3MgYmFyCi0JICAgIGdsb2JhbCBwcm9ncmVzc2Rpcm4gcHJvZ3Jlc3Njb29yZHMgcHJvZ2xhc3RuYwotCSAgICBzZXQgaW5jIFtleHByIHsoJGNvbW1pdGlkeCgkdmlldykgLSAkcHJvZ2xhc3RuYykgKiAwLjAwMDJ9XQotCSAgICBzZXQgcHJvZ2xhc3RuYyAkY29tbWl0aWR4KCR2aWV3KQotCSAgICBzZXQgbCBbbGluZGV4ICRwcm9ncmVzc2Nvb3JkcyAwXQotCSAgICBzZXQgciBbbGluZGV4ICRwcm9ncmVzc2Nvb3JkcyAxXQotCSAgICBpZiB7JHByb2dyZXNzZGlybn0gewotCQlzZXQgciBbZXhwciB7JHIgKyAkaW5jfV0KLQkJaWYgeyRyID49IDEuMH0gewotCQkgICAgc2V0IHIgMS4wCi0JCSAgICBzZXQgcHJvZ3Jlc3NkaXJuIDAKLQkJfQotCQlpZiB7JHIgPiAwLjJ9IHsKLQkJICAgIHNldCBsIFtleHByIHskciAtIDAuMn1dCi0JCX0KLQkgICAgfSBlbHNlIHsKLQkJc2V0IGwgW2V4cHIgeyRsIC0gJGluY31dCi0JCWlmIHskbCA8PSAwLjB9IHsKLQkJICAgIHNldCBsIDAuMAotCQkgICAgc2V0IHByb2dyZXNzZGlybiAxCi0JCX0KLQkJc2V0IHIgW2V4cHIgeyRsICsgMC4yfV0KLQkgICAgfQotCSAgICBzZXQgcHJvZ3Jlc3Njb29yZHMgW2xpc3QgJGwgJHJdCi0JICAgIGFkanVzdHByb2dyZXNzCisJICAgIHNldCBudW1jb21taXRzICRjb21taXRpZHgoJHZpZXcpCisJICAgIHJ1biBjaGV3Y29tbWl0cworCX0KKwlpZiB7W2luZm8gZXhpc3RzIGhsdmlld10gJiYgJHZpZXcgPT0gJGhsdmlld30geworCSAgICAjIHdlIG5ldmVyIGFjdHVhbGx5IGdldCBoZXJlLi4uCisJICAgIHJ1biB2aGlnaGxpZ2h0bW9yZQorCX0KKwlmb3JlYWNoIHMgJHNjcmlwdHMgeworCSAgICBldmFsICRzCiAJfQogICAgIH0KICAgICByZXR1cm4gMgogfQogCi1wcm9jIGNoZXdjb21taXRzIHt2aWV3fSB7Citwcm9jIGNoZXdjb21taXRzIHt9IHsKICAgICBnbG9iYWwgY3VydmlldyBobHZpZXcgdmlld2NvbXBsZXRlCi0gICAgZ2xvYmFsIHNlbGVjdGVkbGluZSBwZW5kaW5nX3NlbGVjdAorICAgIGdsb2JhbCBwZW5kaW5nX3NlbGVjdAogCi0gICAgaWYgeyR2aWV3ID09ICRjdXJ2aWV3fSB7Ci0JbGF5b3V0bW9yZQotCWlmIHskdmlld2NvbXBsZXRlKCR2aWV3KX0gewotCSAgICBnbG9iYWwgZGlzcGxheW9yZGVyIGNvbW1pdGlkeCBwaGFzZQotCSAgICBnbG9iYWwgbnVtY29tbWl0cyBzdGFydG1zZWNzCisgICAgbGF5b3V0bW9yZQorICAgIGlmIHskdmlld2NvbXBsZXRlKCRjdXJ2aWV3KX0geworCWdsb2JhbCBjb21taXRpZHggdmFyY3RvaworCWdsb2JhbCBudW1jb21taXRzIHN0YXJ0bXNlY3MKIAotCSAgICBpZiB7W2luZm8gZXhpc3RzIHBlbmRpbmdfc2VsZWN0XX0gewotCQlzZXQgcm93IFtmaXJzdF9yZWFsX3Jvd10KLQkJc2VsZWN0bGluZSAkcm93IDEKLQkgICAgfQotCSAgICBpZiB7JGNvbW1pdGlkeCgkY3VydmlldykgPiAwfSB7Ci0JCSNzZXQgbXMgW2V4cHIge1tjbG9jayBjbGlja3MgLW1pbGxpc2Vjb25kc10gLSAkc3RhcnRtc2Vjc31dCi0JCSNwdXRzICJvdmVyYWxsICRtcyBtcyBmb3IgJG51bWNvbW1pdHMgY29tbWl0cyIKLQkgICAgfSBlbHNlIHsKLQkJc2hvd19zdGF0dXMgW21jICJObyBjb21taXRzIHNlbGVjdGVkIl0KLQkgICAgfQotCSAgICBub3RidXN5IGxheW91dAotCSAgICBzZXQgcGhhc2Uge30KKwlpZiB7W2luZm8gZXhpc3RzIHBlbmRpbmdfc2VsZWN0XX0geworCSAgICBzZXQgcm93IFtmaXJzdF9yZWFsX3Jvd10KKwkgICAgc2VsZWN0bGluZSAkcm93IDEKIAl9Ci0gICAgfQotICAgIGlmIHtbaW5mbyBleGlzdHMgaGx2aWV3XSAmJiAkdmlldyA9PSAkaGx2aWV3fSB7Ci0JdmhpZ2hsaWdodG1vcmUKKwlpZiB7JGNvbW1pdGlkeCgkY3VydmlldykgPiAwfSB7CisJICAgICNzZXQgbXMgW2V4cHIge1tjbG9jayBjbGlja3MgLW1pbGxpc2Vjb25kc10gLSAkc3RhcnRtc2Vjc31dCisJICAgICNwdXRzICJvdmVyYWxsICRtcyBtcyBmb3IgJG51bWNvbW1pdHMgY29tbWl0cyIKKwkgICAgI3B1dHMgIltsbGVuZ3RoICR2YXJjdG9rKCR2aWV3KV0gYXJjcywgJGNvbW1pdGlkeCgkdmlldykgY29tbWl0cyIKKwl9IGVsc2UgeworCSAgICBzaG93X3N0YXR1cyBbbWMgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiXQorCX0KKwlub3RidXN5IGxheW91dAogICAgIH0KICAgICByZXR1cm4gMAogfQpAQCAtNDAwLDM4ICsxNDg5LDYgQEAKICAgICBwYXJzZWNvbW1pdCAkaWQgJGNvbnRlbnRzIDAKIH0KIAotcHJvYyB1cGRhdGVjb21taXRzIHt9IHsKLSAgICBnbG9iYWwgdmlld2RhdGEgY3VydmlldyBwaGFzZSBkaXNwbGF5b3JkZXIgb3JkZXJ0b2sgaWRwZW5kaW5nCi0gICAgZ2xvYmFsIGNoaWxkcmVuIGNvbW1pdHJvdyBzZWxlY3RlZGxpbmUgdGhpY2tlcmxpbmUgc2hvd25lYXJ0YWdzCi0gICAgZ2xvYmFsIGlzd29ya3RyZWUKLQotICAgIHNldCBpc3dvcmt0cmVlIFtleHByIHtbZXhlYyBnaXQgcmV2LXBhcnNlIC0taXMtaW5zaWRlLXdvcmstdHJlZV0gPT0gInRydWUifV0KLQotICAgIGlmIHskcGhhc2UgbmUge319IHsKLQlzdG9wX3Jldl9saXN0Ci0Jc2V0IHBoYXNlIHt9Ci0gICAgfQotICAgIHNldCBuICRjdXJ2aWV3Ci0gICAgZm9yZWFjaCBpZCAkZGlzcGxheW9yZGVyIHsKLQljYXRjaCB7dW5zZXQgY2hpbGRyZW4oJG4sJGlkKX0KLQljYXRjaCB7dW5zZXQgY29tbWl0cm93KCRuLCRpZCl9Ci0JY2F0Y2gge3Vuc2V0IG9yZGVydG9rKCRuLCRpZCl9Ci0gICAgfQotICAgIGZvcmVhY2ggdmlkIFthcnJheSBuYW1lcyBpZHBlbmRpbmcgIiRuLCoiXSB7Ci0JdW5zZXQgaWRwZW5kaW5nKCR2aWQpCi0gICAgfQotICAgIHNldCBjdXJ2aWV3IC0xCi0gICAgY2F0Y2gge3Vuc2V0IHNlbGVjdGVkbGluZX0KLSAgICBjYXRjaCB7dW5zZXQgdGhpY2tlcmxpbmV9Ci0gICAgY2F0Y2gge3Vuc2V0IHZpZXdkYXRhKCRuKX0KLSAgICByZWFkcmVmcwotICAgIGNoYW5nZWRyZWZzCi0gICAgaWYgeyRzaG93bmVhcnRhZ3N9IHsKLQlnZXRhbGxjb21taXRzCi0gICAgfQotICAgIHNob3d2aWV3ICRuCi19Ci0KIHByb2MgcGFyc2Vjb21taXQge2lkIGNvbnRlbnRzIGxpc3RlZH0gewogICAgIGdsb2JhbCBjb21taXRpbmZvIGNkYXRlCiAKQEAgLTQ3Miw3ICsxNTI5LDcgQEAKIAlzZXQgaGVhZGxpbmUgW3N0cmluZyB0cmltcmlnaHQgW3N0cmluZyByYW5nZSAkaGVhZGxpbmUgMCAkaV1dCiAgICAgfQogICAgIGlmIHshJGxpc3RlZH0gewotCSMgZ2l0IHJldi1saXN0IGluZGVudHMgdGhlIGNvbW1lbnQgYnkgNCBzcGFjZXM7CisJIyBnaXQgbG9nIGluZGVudHMgdGhlIGNvbW1lbnQgYnkgNCBzcGFjZXM7CiAJIyBpZiB3ZSBnb3QgdGhpcyB2aWEgZ2l0IGNhdC1maWxlLCBhZGQgdGhlIGluZGVudGF0aW9uCiAJc2V0IG5ld2NvbW1lbnQge30KIAlmb3JlYWNoIGxpbmUgW3NwbGl0ICRjb21tZW50ICJcbiJdIHsKQEAgLTU0NiwyMiArMTYwMywyMCBAQAogICAgIHNldCBtYWluaGVhZCB7fQogICAgIHNldCBtYWluaGVhZGlkIHt9CiAgICAgY2F0Y2ggeworCXNldCBtYWluaGVhZGlkIFtleGVjIGdpdCByZXYtcGFyc2UgSEVBRF0KIAlzZXQgdGhlaGVhZCBbZXhlYyBnaXQgc3ltYm9saWMtcmVmIEhFQURdCiAJaWYge1tzdHJpbmcgbWF0Y2ggInJlZnMvaGVhZHMvKiIgJHRoZWhlYWRdfSB7CiAJICAgIHNldCBtYWluaGVhZCBbc3RyaW5nIHJhbmdlICR0aGVoZWFkIDExIGVuZF0KLQkgICAgaWYge1tpbmZvIGV4aXN0cyBoZWFkaWRzKCRtYWluaGVhZCldfSB7Ci0JCXNldCBtYWluaGVhZGlkICRoZWFkaWRzKCRtYWluaGVhZCkKLQkgICAgfQogCX0KICAgICB9CiB9CiAKICMgc2tpcCBvdmVyIGZha2UgY29tbWl0cwogcHJvYyBmaXJzdF9yZWFsX3JvdyB7fSB7Ci0gICAgZ2xvYmFsIG51bGxpZCBudWxsaWQyIGRpc3BsYXlvcmRlciBudW1jb21taXRzCisgICAgZ2xvYmFsIG51bGxpZCBudWxsaWQyIG51bWNvbW1pdHMKIAogICAgIGZvciB7c2V0IHJvdyAwfSB7JHJvdyA8ICRudW1jb21taXRzfSB7aW5jciByb3d9IHsKLQlzZXQgaWQgW2xpbmRleCAkZGlzcGxheW9yZGVyICRyb3ddCisJc2V0IGlkIFtjb21taXRvbnJvdyAkcm93XQogCWlmIHskaWQgbmUgJG51bGxpZCAmJiAkaWQgbmUgJG51bGxpZDJ9IHsKIAkgICAgYnJlYWsKIAl9CkBAIC02NDEsNyArMTY5Niw3IEBACiB9CiAKIHByb2MgbWFrZXdpbmRvdyB7fSB7Ci0gICAgZ2xvYmFsIGNhbnYgY2FudjIgY2FudjMgbGluZXNwYyBjaGFyc3BjIGN0ZXh0IGNmbGlzdAorICAgIGdsb2JhbCBjYW52IGNhbnYyIGNhbnYzIGxpbmVzcGMgY2hhcnNwYyBjdGV4dCBjZmxpc3QgY3Njcm9sbAogICAgIGdsb2JhbCB0YWJzdG9wCiAgICAgZ2xvYmFsIGZpbmR0eXBlIGZpbmR0eXBlbWVudSBmaW5kbG9jIGZpbmRzdHJpbmcgZnN0cmluZyBnZW9tZXRyeQogICAgIGdsb2JhbCBlbnRyaWVzIHNoYTFlbnRyeSBzaGExc3RyaW5nIHNoYTFidXQKQEAgLTY1NCwxMyArMTcwOSwxNCBAQAogICAgIGdsb2JhbCBiZ2NvbG9yIGZnY29sb3IgYmdsaXN0IGZnbGlzdCBkaWZmY29sb3JzIHNlbGVjdGJnY29sb3IKICAgICBnbG9iYWwgaGVhZGN0eG1lbnUgcHJvZ3Jlc3NjYW52IHByb2dyZXNzaXRlbSBwcm9ncmVzc2Nvb3JkcyBzdGF0dXN3CiAgICAgZ2xvYmFsIGZwcm9naXRlbSBmcHJvZ2Nvb3JkIGxhc3Rwcm9ndXBkYXRlIHByb2d1cGRhdGVwZW5kaW5nCi0gICAgZ2xvYmFsIHJwcm9naXRlbSBycHJvZ2Nvb3JkCisgICAgZ2xvYmFsIHJwcm9naXRlbSBycHJvZ2Nvb3JkIHJvd251bXNlbCBudW1jb21taXRzCiAgICAgZ2xvYmFsIGhhdmVfdGs4NQogCiAgICAgbWVudSAuYmFyCiAgICAgLmJhciBhZGQgY2FzY2FkZSAtbGFiZWwgW21jICJGaWxlIl0gLW1lbnUgLmJhci5maWxlCiAgICAgbWVudSAuYmFyLmZpbGUKICAgICAuYmFyLmZpbGUgYWRkIGNvbW1hbmQgLWxhYmVsIFttYyAiVXBkYXRlIl0gLWNvbW1hbmQgdXBkYXRlY29tbWl0cworICAgIC5iYXIuZmlsZSBhZGQgY29tbWFuZCAtbGFiZWwgW21jICJSZWxvYWQiXSAtY29tbWFuZCByZWxvYWRjb21taXRzCiAgICAgLmJhci5maWxlIGFkZCBjb21tYW5kIC1sYWJlbCBbbWMgIlJlcmVhZCByZWZlcmVuY2VzIl0gLWNvbW1hbmQgcmVyZWFkcmVmcwogICAgIC5iYXIuZmlsZSBhZGQgY29tbWFuZCAtbGFiZWwgW21jICJMaXN0IHJlZmVyZW5jZXMiXSAtY29tbWFuZCBzaG93cmVmcwogICAgIC5iYXIuZmlsZSBhZGQgY29tbWFuZCAtbGFiZWwgW21jICJRdWl0Il0gLWNvbW1hbmQgZG9xdWl0CkBAIC03NjksNiArMTgyNSwxOCBAQAogCS1zdGF0ZSBkaXNhYmxlZCAtd2lkdGggMjYKICAgICBwYWNrIC50Zi5iYXIucmlnaHRidXQgLXNpZGUgbGVmdCAtZmlsbCB5CiAKKyAgICBsYWJlbCAudGYuYmFyLnJvd2xhYmVsIC10ZXh0IFttYyAiUm93Il0KKyAgICBzZXQgcm93bnVtc2VsIHt9CisgICAgbGFiZWwgLnRmLmJhci5yb3dudW0gLXdpZHRoIDcgLWZvbnQgdGV4dGZvbnQgLXRleHR2YXJpYWJsZSByb3dudW1zZWwgXAorCS1yZWxpZWYgc3Vua2VuIC1hbmNob3IgZQorICAgIGxhYmVsIC50Zi5iYXIucm93bGFiZWwyIC10ZXh0ICIvIgorICAgIGxhYmVsIC50Zi5iYXIubnVtY29tbWl0cyAtd2lkdGggNyAtZm9udCB0ZXh0Zm9udCAtdGV4dHZhcmlhYmxlIG51bWNvbW1pdHMgXAorCS1yZWxpZWYgc3Vua2VuIC1hbmNob3IgZQorICAgIHBhY2sgLnRmLmJhci5yb3dsYWJlbCAudGYuYmFyLnJvd251bSAudGYuYmFyLnJvd2xhYmVsMiAudGYuYmFyLm51bWNvbW1pdHMgXAorCS1zaWRlIGxlZnQKKyAgICBnbG9iYWwgc2VsZWN0ZWRsaW5lCisgICAgdHJhY2UgYWRkIHZhcmlhYmxlIHNlbGVjdGVkbGluZSB3cml0ZSBzZWxlY3RlZGxpbmVfY2hhbmdlCisKICAgICAjIFN0YXR1cyBsYWJlbCBhbmQgcHJvZ3Jlc3MgYmFyCiAgICAgc2V0IHN0YXR1c3cgLnRmLmJhci5zdGF0dXMKICAgICBsYWJlbCAkc3RhdHVzdyAtd2lkdGggMTUgLXJlbGllZiBzdW5rZW4KQEAgLTEwMTYsNyArMjA4NCw3IEBACiAgICAgYmluZGtleSBrICJzZWxuZXh0bGluZSAxIgogICAgIGJpbmRrZXkgaiAiZ29iYWNrIgogICAgIGJpbmRrZXkgbCAiZ29mb3J3IgotICAgIGJpbmRrZXkgYiAiJGN0ZXh0IHl2aWV3IHNjcm9sbCAtMSBwYWdlcyIKKyAgICBiaW5ka2V5IGIgcHJldmZpbGUKICAgICBiaW5ka2V5IGQgIiRjdGV4dCB5dmlldyBzY3JvbGwgMTggdW5pdHMiCiAgICAgYmluZGtleSB1ICIkY3RleHQgeXZpZXcgc2Nyb2xsIC0xOCB1bml0cyIKICAgICBiaW5ka2V5IC8ge2RvZmluZCAxIDF9CkBAIC0xMDg4LDYgKzIxNTYsOCBAQAogCS1jb21tYW5kIHtmbGlzdF9obCAwfQogICAgICRmbGlzdF9tZW51IGFkZCBjb21tYW5kIC1sYWJlbCBbbWMgIkhpZ2hsaWdodCB0aGlzIG9ubHkiXSBcCiAJLWNvbW1hbmQge2ZsaXN0X2hsIDF9CisgICAgJGZsaXN0X21lbnUgYWRkIGNvbW1hbmQgLWxhYmVsIFttYyAiRXh0ZXJuYWwgZGlmZiJdIFwKKyAgICAgICAgLWNvbW1hbmQge2V4dGVybmFsX2RpZmZ9CiB9CiAKICMgV2luZG93cyBzZW5kcyBhbGwgbW91c2Ugd2hlZWwgZXZlbnRzIHRvIHRoZSBjdXJyZW50IGZvY3VzZWQgd2luZG93LCBub3QKQEAgLTExMDgsNiArMjE3OCwxNyBAQAogICAgIH0KIH0KIAorIyBVcGRhdGUgcm93IG51bWJlciBsYWJlbCB3aGVuIHNlbGVjdGVkbGluZSBjaGFuZ2VzCitwcm9jIHNlbGVjdGVkbGluZV9jaGFuZ2Uge24xIG4yIG9wfSB7CisgICAgZ2xvYmFsIHNlbGVjdGVkbGluZSByb3dudW1zZWwKKworICAgIGlmIHskc2VsZWN0ZWRsaW5lIGVxIHt9fSB7CisJc2V0IHJvd251bXNlbCB7fQorICAgIH0gZWxzZSB7CisJc2V0IHJvd251bXNlbCBbZXhwciB7JHNlbGVjdGVkbGluZSArIDF9XQorICAgIH0KK30KKwogIyBtb3VzZS0yIG1ha2VzIGFsbCB3aW5kb3dzIHNjYW4gdmVydGljYWxseSwgYnV0IG9ubHkgdGhlIG9uZQogIyB0aGUgY3Vyc29yIGlzIGluIHNjYW5zIGhvcml6b250YWxseQogcHJvYyBjYW52c2NhbiB7b3AgdyB4IHl9IHsKQEAgLTExMjMsNyArMjIwNCw3IEBACiAKIHByb2Mgc2Nyb2xsY2FudiB7Y3Njcm9sbCBmMCBmMX0gewogICAgICRjc2Nyb2xsIHNldCAkZjAgJGYxCi0gICAgZHJhd2ZyYWMgJGYwICRmMQorICAgIGRyYXd2aXNpYmxlCiAgICAgZmx1c2hoaWdobGlnaHRzCiB9CiAKQEAgLTExOTIsNyArMjI3Myw3IEBACiAgICAgZ2xvYmFsIHZpZXduYW1lIHZpZXdmaWxlcyB2aWV3YXJncyB2aWV3YXJnc2NtZCB2aWV3cGVybSBuZXh0dmlld251bQogICAgIGdsb2JhbCBjbWl0bW9kZSB3cmFwY29tbWVudCBkYXRldGltZWZvcm1hdCBsaW1pdGRpZmZzCiAgICAgZ2xvYmFsIGNvbG9ycyBiZ2NvbG9yIGZnY29sb3IgZGlmZmNvbG9ycyBkaWZmY29udGV4dCBzZWxlY3RiZ2NvbG9yCi0gICAgZ2xvYmFsIGF1dG9zZWxlY3QKKyAgICBnbG9iYWwgYXV0b3NlbGVjdCBleHRkaWZmdG9vbAogCiAgICAgaWYgeyRzdHVmZnNhdmVkfSByZXR1cm4KICAgICBpZiB7IVt3aW5mbyB2aWV3YWJsZSAuXX0gcmV0dXJuCkBAIC0xMjE4LDYgKzIyOTksNyBAQAogCXB1dHMgJGYgW2xpc3Qgc2V0IGRpZmZjb2xvcnMgJGRpZmZjb2xvcnNdCiAJcHV0cyAkZiBbbGlzdCBzZXQgZGlmZmNvbnRleHQgJGRpZmZjb250ZXh0XQogCXB1dHMgJGYgW2xpc3Qgc2V0IHNlbGVjdGJnY29sb3IgJHNlbGVjdGJnY29sb3JdCisJcHV0cyAkZiBbbGlzdCBzZXQgZXh0ZGlmZnRvb2wgJGV4dGRpZmZ0b29sXQogCiAJcHV0cyAkZiAic2V0IGdlb21ldHJ5KG1haW4pIFt3bSBnZW9tZXRyeSAuXSIKIAlwdXRzICRmICJzZXQgZ2VvbWV0cnkodG9wd2lkdGgpIFt3aW5mbyB3aWR0aCAudGZdIgpAQCAtMTMxOCw3ICsyNDAwLDcgQEAKICAgICBtZXNzYWdlICR3Lm0gLXRleHQgW21jICIKIEdpdGsgLSBhIGNvbW1pdCB2aWV3ZXIgZm9yIGdpdAogCi1Db3B5cmlnaHQgwqkgMjAwNS0yMDA2IFBhdWwgTWFja2VycmFzCitDb3B5cmlnaHQgwqkgMjAwNS0yMDA4IFBhdWwgTWFja2VycmFzCiAKIFVzZSBhbmQgcmVkaXN0cmlidXRlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiXSBcCiAJICAgIC1qdXN0aWZ5IGNlbnRlciAtYXNwZWN0IDQwMCAtYm9yZGVyIDIgLWJnIHdoaXRlIC1yZWxpZWYgZ3Jvb3ZlCkBAIC0xNjc1LDcgKzI3NTcsNyBAQAogICAgIC1kYXRhICRyZWN0ZGF0YSAtbWFza2RhdGEgJHJlY3RtYXNrCiAKIHByb2MgaW5pdF9mbGlzdCB7Zmlyc3R9IHsKLSAgICBnbG9iYWwgY2ZsaXN0IGNmbGlzdF90b3Agc2VsZWN0ZWRsaW5lIGRpZmZmaWxlc3RhcnQKKyAgICBnbG9iYWwgY2ZsaXN0IGNmbGlzdF90b3AgZGlmZmZpbGVzdGFydAogCiAgICAgJGNmbGlzdCBjb25mIC1zdGF0ZSBub3JtYWwKICAgICAkY2ZsaXN0IGRlbGV0ZSAwLjAgZW5kCkBAIC0xNzY4LDYgKzI4NTAsMTIgQEAKIAlzZXQgZSBbbGluZGV4ICR0cmVlZGlmZnMoJGRpZmZpZHMpIFtleHByIHskbC0yfV1dCiAgICAgfQogICAgIHNldCBmbGlzdF9tZW51X2ZpbGUgJGUKKyAgICBzZXQgeGRpZmZzdGF0ZSAibm9ybWFsIgorICAgIGlmIHskY21pdG1vZGUgZXEgInRyZWUifSB7CisJc2V0IHhkaWZmc3RhdGUgImRpc2FibGVkIgorICAgIH0KKyAgICAjIERpc2FibGUgIkV4dGVybmFsIGRpZmYiIGl0ZW0gaW4gdHJlZSBtb2RlCisgICAgJGZsaXN0X21lbnUgZW50cnljb25mIDIgLXN0YXRlICR4ZGlmZnN0YXRlCiAgICAgdGtfcG9wdXAgJGZsaXN0X21lbnUgJFggJFkKIH0KIApAQCAtMTc4Myw2ICsyODcxLDExMyBAQAogICAgIHNldCBnZHR0eXBlIFttYyAidG91Y2hpbmcgcGF0aHM6Il0KIH0KIAorcHJvYyBzYXZlX2ZpbGVfZnJvbV9jb21taXQge2ZpbGVuYW1lIG91dHB1dCB3aGF0fSB7CisgICAgZ2xvYmFsIG51bGxmaWxlCisKKyAgICBpZiB7W2NhdGNoIHtleGVjIGdpdCBzaG93ICRmaWxlbmFtZSAtLSA+ICRvdXRwdXR9IGVycl19IHsKKwlpZiB7W3N0cmluZyBtYXRjaCAiZmF0YWw6IGJhZCByZXZpc2lvbiAqIiAkZXJyXX0geworCSAgICByZXR1cm4gJG51bGxmaWxlCisJfQorCWVycm9yX3BvcHVwICJFcnJvciBnZXR0aW5nIFwiJGZpbGVuYW1lXCIgZnJvbSAkd2hhdDogJGVyciIKKwlyZXR1cm4ge30KKyAgICB9CisgICAgcmV0dXJuICRvdXRwdXQKK30KKworcHJvYyBleHRlcm5hbF9kaWZmX2dldF9vbmVfZmlsZSB7ZGlmZmlkIGZpbGVuYW1lIGRpZmZkaXJ9IHsKKyAgICBnbG9iYWwgbnVsbGlkIG51bGxpZDIgbnVsbGZpbGUKKyAgICBnbG9iYWwgZ2l0ZGlyCisKKyAgICBpZiB7JGRpZmZpZCA9PSAkbnVsbGlkfSB7CisgICAgICAgIHNldCBkaWZmZmlsZSBbZmlsZSBqb2luIFtmaWxlIGRpcm5hbWUgJGdpdGRpcl0gJGZpbGVuYW1lXQorCWlmIHtbZmlsZSBleGlzdHMgJGRpZmZmaWxlXX0geworCSAgICByZXR1cm4gJGRpZmZmaWxlCisJfQorCXJldHVybiAkbnVsbGZpbGUKKyAgICB9CisgICAgaWYgeyRkaWZmaWQgPT0gJG51bGxpZDJ9IHsKKyAgICAgICAgc2V0IGRpZmZmaWxlIFtmaWxlIGpvaW4gJGRpZmZkaXIgIlxbaW5kZXhcXSBbZmlsZSB0YWlsICRmaWxlbmFtZV0iXQorICAgICAgICByZXR1cm4gW3NhdmVfZmlsZV9mcm9tX2NvbW1pdCA6JGZpbGVuYW1lICRkaWZmZmlsZSBpbmRleF0KKyAgICB9CisgICAgc2V0IGRpZmZmaWxlIFtmaWxlIGpvaW4gJGRpZmZkaXIgIlxbJGRpZmZpZFxdIFtmaWxlIHRhaWwgJGZpbGVuYW1lXSJdCisgICAgcmV0dXJuIFtzYXZlX2ZpbGVfZnJvbV9jb21taXQgJGRpZmZpZDokZmlsZW5hbWUgJGRpZmZmaWxlIFwKKwkgICAgICAgInJldmlzaW9uICRkaWZmaWQiXQorfQorCitwcm9jIGV4dGVybmFsX2RpZmYge30geworICAgIGdsb2JhbCBnaXRrdG1wZGlyIG51bGxpZCBudWxsaWQyCisgICAgZ2xvYmFsIGZsaXN0X21lbnVfZmlsZQorICAgIGdsb2JhbCBkaWZmaWRzCisgICAgZ2xvYmFsIGRpZmZudW0KKyAgICBnbG9iYWwgZ2l0ZGlyIGV4dGRpZmZ0b29sCisKKyAgICBpZiB7W2xsZW5ndGggJGRpZmZpZHNdID09IDF9IHsKKyAgICAgICAgIyBubyByZWZlcmVuY2UgY29tbWl0IGdpdmVuCisgICAgICAgIHNldCBkaWZmaWR0byBbbGluZGV4ICRkaWZmaWRzIDBdCisgICAgICAgIGlmIHskZGlmZmlkdG8gZXEgJG51bGxpZH0geworICAgICAgICAgICAgIyBkaWZmaW5nIHdvcmtpbmcgY29weSB3aXRoIGluZGV4CisgICAgICAgICAgICBzZXQgZGlmZmlkZnJvbSAkbnVsbGlkMgorICAgICAgICB9IGVsc2VpZiB7JGRpZmZpZHRvIGVxICRudWxsaWQyfSB7CisgICAgICAgICAgICAjIGRpZmZpbmcgaW5kZXggd2l0aCBIRUFECisgICAgICAgICAgICBzZXQgZGlmZmlkZnJvbSAiSEVBRCIKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICMgdXNlIGZpcnN0IHBhcmVudCBjb21taXQKKyAgICAgICAgICAgIGdsb2JhbCBwYXJlbnRsaXN0IHNlbGVjdGVkbGluZQorICAgICAgICAgICAgc2V0IGRpZmZpZGZyb20gW2xpbmRleCAkcGFyZW50bGlzdCAkc2VsZWN0ZWRsaW5lIDBdCisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBzZXQgZGlmZmlkZnJvbSBbbGluZGV4ICRkaWZmaWRzIDBdCisgICAgICAgIHNldCBkaWZmaWR0byBbbGluZGV4ICRkaWZmaWRzIDFdCisgICAgfQorCisgICAgIyBtYWtlIHN1cmUgdGhhdCBzZXZlcmFsIGRpZmZzIHdvbnQgY29sbGlkZQorICAgIGlmIHshW2luZm8gZXhpc3RzIGdpdGt0bXBkaXJdfSB7CisJc2V0IGdpdGt0bXBkaXIgW2ZpbGUgam9pbiBbZmlsZSBkaXJuYW1lICRnaXRkaXJdIFwKKwkJCSAgICBbZm9ybWF0ICIuZ2l0ay10bXAuJXMiIFtwaWRdXV0KKwlpZiB7W2NhdGNoIHtmaWxlIG1rZGlyICRnaXRrdG1wZGlyfSBlcnJdfSB7CisJICAgIGVycm9yX3BvcHVwICJFcnJvciBjcmVhdGluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5ICRnaXRrdG1wZGlyOiAkZXJyIgorCSAgICB1bnNldCBnaXRrdG1wZGlyCisJICAgIHJldHVybgorCX0KKwlzZXQgZGlmZm51bSAwCisgICAgfQorICAgIGluY3IgZGlmZm51bQorICAgIHNldCBkaWZmZGlyIFtmaWxlIGpvaW4gJGdpdGt0bXBkaXIgJGRpZmZudW1dCisgICAgaWYge1tjYXRjaCB7ZmlsZSBta2RpciAkZGlmZmRpcn0gZXJyXX0geworCWVycm9yX3BvcHVwICJFcnJvciBjcmVhdGluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5ICRkaWZmZGlyOiAkZXJyIgorCXJldHVybgorICAgIH0KKworICAgICMgZ2F0aGVyIGZpbGVzIHRvIGRpZmYKKyAgICBzZXQgZGlmZmZyb21maWxlIFtleHRlcm5hbF9kaWZmX2dldF9vbmVfZmlsZSAkZGlmZmlkZnJvbSAkZmxpc3RfbWVudV9maWxlICRkaWZmZGlyXQorICAgIHNldCBkaWZmdG9maWxlIFtleHRlcm5hbF9kaWZmX2dldF9vbmVfZmlsZSAkZGlmZmlkdG8gJGZsaXN0X21lbnVfZmlsZSAkZGlmZmRpcl0KKworICAgIGlmIHskZGlmZmZyb21maWxlIG5lIHt9ICYmICRkaWZmdG9maWxlIG5lIHt9fSB7CisgICAgICAgIHNldCBjbWQgW2NvbmNhdCB8IFtzaGVsbHNwbGl0ICRleHRkaWZmdG9vbF0gXAorCQkgICAgIFtsaXN0ICRkaWZmZnJvbWZpbGUgJGRpZmZ0b2ZpbGVdXQorICAgICAgICBpZiB7W2NhdGNoIHtzZXQgZmwgW29wZW4gJGNtZCByXX0gZXJyXX0geworICAgICAgICAgICAgZmlsZSBkZWxldGUgLWZvcmNlICRkaWZmZGlyCisgICAgICAgICAgICBlcnJvcl9wb3B1cCBbbWMgIiRleHRkaWZmdG9vbDogY29tbWFuZCBmYWlsZWQ6ICRlcnIiXQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZmNvbmZpZ3VyZSAkZmwgLWJsb2NraW5nIDAKKyAgICAgICAgICAgIGZpbGVydW4gJGZsIFtsaXN0IGRlbGV0ZV9hdF9lb2YgJGZsICRkaWZmZGlyXQorICAgICAgICB9CisgICAgfQorfQorCisjIGRlbGV0ZSAkZGlyIHdoZW4gd2Ugc2VlIGVvZiBvbiAkZiAocHJlc3VtYWJseSBiZWNhdXNlIHRoZSBjaGlsZCBoYXMgZXhpdGVkKQorcHJvYyBkZWxldGVfYXRfZW9mIHtmIGRpcn0geworICAgIHdoaWxlIHtbZ2V0cyAkZiBsaW5lXSA+PSAwfSB7fQorICAgIGlmIHtbZW9mICRmXX0geworCWlmIHtbY2F0Y2gge2Nsb3NlICRmfSBlcnJdfSB7CisJICAgIGVycm9yX3BvcHVwICJFeHRlcm5hbCBkaWZmIHZpZXdlciBmYWlsZWQ6ICRlcnIiCisJfQorCWZpbGUgZGVsZXRlIC1mb3JjZSAkZGlyCisJcmV0dXJuIDAKKyAgICB9CisgICAgcmV0dXJuIDEKK30KKwogIyBGdW5jdGlvbnMgZm9yIGFkZGluZyBhbmQgcmVtb3Zpbmcgc2hlbGwtdHlwZSBxdW90aW5nCiAKIHByb2Mgc2hlbGxxdW90ZSB7c3RyfSB7CkBAIC0xOTI1LDcgKzMxMjAsNyBAQAogCS12YXJpYWJsZSBuZXd2aWV3cGVybSgkbikKICAgICBncmlkICR0b3AucGVybSAtIC1wYWR5IDUgLXN0aWNreSB3CiAgICAgbWVzc2FnZSAkdG9wLmFsIC1hc3BlY3QgMTAwMCBcCi0JLXRleHQgW21jICJDb21taXRzIHRvIGluY2x1ZGUgKGFyZ3VtZW50cyB0byBnaXQgcmV2LWxpc3QpOiJdCisJLXRleHQgW21jICJDb21taXRzIHRvIGluY2x1ZGUgKGFyZ3VtZW50cyB0byBnaXQgbG9nKToiXQogICAgIGdyaWQgJHRvcC5hbCAtIC1zdGlja3kgdyAtcGFkeSA1CiAgICAgZW50cnkgJHRvcC5hcmdzIC13aWR0aCA1MCAtdGV4dHZhcmlhYmxlIG5ld3ZpZXdhcmdzKCRuKSBcCiAJLWJhY2tncm91bmQgJGJnY29sb3IKQEAgLTIwMjgsNyArMzIyMyw3IEBACiAJICAgIHNldCB2aWV3YXJncygkbikgJG5ld2FyZ3MKIAkgICAgc2V0IHZpZXdhcmdzY21kKCRuKSAkbmV3dmlld2FyZ3NjbWQoJG4pCiAJICAgIGlmIHskY3VydmlldyA9PSAkbn0gewotCQlydW4gdXBkYXRlY29tbWl0cworCQlydW4gcmVsb2FkY29tbWl0cwogCSAgICB9CiAJfQogICAgIH0KQEAgLTIwMzYsNyArMzIzMSw3IEBACiB9CiAKIHByb2MgZGVsdmlldyB7fSB7Ci0gICAgZ2xvYmFsIGN1cnZpZXcgdmlld2RhdGEgdmlld3Blcm0gaGx2aWV3IHNlbGVjdGVkaGx2aWV3CisgICAgZ2xvYmFsIGN1cnZpZXcgdmlld3Blcm0gaGx2aWV3IHNlbGVjdGVkaGx2aWV3CiAKICAgICBpZiB7JGN1cnZpZXcgPT0gMH0gcmV0dXJuCiAgICAgaWYge1tpbmZvIGV4aXN0cyBobHZpZXddICYmICRobHZpZXcgPT0gJGN1cnZpZXd9IHsKQEAgLTIwNDQsNyArMzIzOSw2IEBACiAJdW5zZXQgaGx2aWV3CiAgICAgfQogICAgIGFsbHZpZXdtZW51cyAkY3VydmlldyBkZWxldGUKLSAgICBzZXQgdmlld2RhdGEoJGN1cnZpZXcpIHt9CiAgICAgc2V0IHZpZXdwZXJtKCRjdXJ2aWV3KSAwCiAgICAgc2hvd3ZpZXcgMAogfQpAQCAtMjA1OCw0OCArMzI1MiwyOCBAQAogICAgICMJLWNvbW1hbmQgW2xpc3QgYWRkdmhpZ2hsaWdodCAkbl0gLXZhcmlhYmxlIHNlbGVjdGVkaGx2aWV3CiB9CiAKLXByb2MgZmxhdHRlbiB7dmFyfSB7Ci0gICAgZ2xvYmFsICR2YXIKLQotICAgIHNldCByZXQge30KLSAgICBmb3JlYWNoIGkgW2FycmF5IG5hbWVzICR2YXJdIHsKLQlsYXBwZW5kIHJldCAkaSBbc2V0ICR2YXJcKCRpXCldCi0gICAgfQotICAgIHJldHVybiAkcmV0Ci19Ci0KLXByb2MgdW5mbGF0dGVuIHt2YXIgbH0gewotICAgIGdsb2JhbCAkdmFyCi0KLSAgICBjYXRjaCB7dW5zZXQgJHZhcn0KLSAgICBmb3JlYWNoIHtpIHZ9ICRsIHsKLQlzZXQgJHZhclwoJGlcKSAkdgotICAgIH0KLX0KLQogcHJvYyBzaG93dmlldyB7bn0gewotICAgIGdsb2JhbCBjdXJ2aWV3IHZpZXdkYXRhIHZpZXdmaWxlcworICAgIGdsb2JhbCBjdXJ2aWV3IGNhY2hlZF9jb21taXRyb3cgb3JkZXJ0b2sKICAgICBnbG9iYWwgZGlzcGxheW9yZGVyIHBhcmVudGxpc3Qgcm93aWRsaXN0IHJvd2lzb3B0IHJvd2ZpbmFsCi0gICAgZ2xvYmFsIGNvbG9ybWFwIHJvd3RleHR4IGNvbW1pdHJvdyBuZXh0Y29sb3IgY2FudnhtYXgKLSAgICBnbG9iYWwgbnVtY29tbWl0cyBjb21taXRsaXN0ZWQKKyAgICBnbG9iYWwgY29sb3JtYXAgcm93dGV4dHggbmV4dGNvbG9yIGNhbnZ4bWF4CisgICAgZ2xvYmFsIG51bWNvbW1pdHMgdmlld2NvbXBsZXRlCiAgICAgZ2xvYmFsIHNlbGVjdGVkbGluZSBjdXJyZW50aWQgY2FudiBjYW52eTAKICAgICBnbG9iYWwgdHJlZWRpZmZzCi0gICAgZ2xvYmFsIHBlbmRpbmdfc2VsZWN0IHBoYXNlCisgICAgZ2xvYmFsIHBlbmRpbmdfc2VsZWN0IG1haW5oZWFkaWQKICAgICBnbG9iYWwgY29tbWl0aWR4Ci0gICAgZ2xvYmFsIGNvbW1mZAotICAgIGdsb2JhbCBzZWxlY3RlZHZpZXcgc2VsZWN0Zmlyc3QKLSAgICBnbG9iYWwgdnBhcmVudGxpc3QgdmRpc3BvcmRlciB2Y21pdGxpc3RlZAorICAgIGdsb2JhbCBzZWxlY3RlZHZpZXcKICAgICBnbG9iYWwgaGx2aWV3IHNlbGVjdGVkaGx2aWV3IGNvbW1pdGludGVyZXN0CiAKICAgICBpZiB7JG4gPT0gJGN1cnZpZXd9IHJldHVybgogICAgIHNldCBzZWxpZCB7fQotICAgIGlmIHtbaW5mbyBleGlzdHMgc2VsZWN0ZWRsaW5lXX0geworICAgIHNldCB5bWF4IFtsaW5kZXggWyRjYW52IGNnZXQgLXNjcm9sbHJlZ2lvbl0gM10KKyAgICBzZXQgc3BhbiBbJGNhbnYgeXZpZXddCisgICAgc2V0IHl0b3AgW2V4cHIge1tsaW5kZXggJHNwYW4gMF0gKiAkeW1heH1dCisgICAgc2V0IHlib3QgW2V4cHIge1tsaW5kZXggJHNwYW4gMV0gKiAkeW1heH1dCisgICAgc2V0IHlzY3JlZW4gW2V4cHIgeygkeWJvdCAtICR5dG9wKSAvIDJ9XQorICAgIGlmIHskc2VsZWN0ZWRsaW5lIG5lIHt9fSB7CiAJc2V0IHNlbGlkICRjdXJyZW50aWQKIAlzZXQgeSBbeWMgJHNlbGVjdGVkbGluZV0KLQlzZXQgeW1heCBbbGluZGV4IFskY2FudiBjZ2V0IC1zY3JvbGxyZWdpb25dIDNdCi0Jc2V0IHNwYW4gWyRjYW52IHl2aWV3XQotCXNldCB5dG9wIFtleHByIHtbbGluZGV4ICRzcGFuIDBdICogJHltYXh9XQotCXNldCB5Ym90IFtleHByIHtbbGluZGV4ICRzcGFuIDFdICogJHltYXh9XQogCWlmIHskeXRvcCA8ICR5ICYmICR5IDwgJHlib3R9IHsKIAkgICAgc2V0IHlzY3JlZW4gW2V4cHIgeyR5IC0gJHl0b3B9XQogCX0KQEAgLTIxMDksMTcgKzMyODMsNiBAQAogICAgIH0KICAgICB1bnNlbGVjdGxpbmUKICAgICBub3JtYWxsaW5lCi0gICAgaWYgeyRjdXJ2aWV3ID49IDB9IHsKLQlzZXQgdnBhcmVudGxpc3QoJGN1cnZpZXcpICRwYXJlbnRsaXN0Ci0Jc2V0IHZkaXNwb3JkZXIoJGN1cnZpZXcpICRkaXNwbGF5b3JkZXIKLQlzZXQgdmNtaXRsaXN0ZWQoJGN1cnZpZXcpICRjb21taXRsaXN0ZWQKLQlpZiB7JHBoYXNlIG5lIHt9IHx8Ci0JICAgICFbaW5mbyBleGlzdHMgdmlld2RhdGEoJGN1cnZpZXcpXSB8fAotCSAgICBbbGluZGV4ICR2aWV3ZGF0YSgkY3VydmlldykgMF0gbmUge319IHsKLQkgICAgc2V0IHZpZXdkYXRhKCRjdXJ2aWV3KSBcCi0JCVtsaXN0ICRwaGFzZSAkcm93aWRsaXN0ICRyb3dpc29wdCAkcm93ZmluYWxdCi0JfQotICAgIH0KICAgICBjYXRjaCB7dW5zZXQgdHJlZWRpZmZzfQogICAgIGNsZWFyX2Rpc3BsYXkKICAgICBpZiB7W2luZm8gZXhpc3RzIGhsdmlld10gJiYgJGhsdmlldyA9PSAkbn0gewpAQCAtMjEyNyw2ICszMjkwLDggQEAKIAlzZXQgc2VsZWN0ZWRobHZpZXcgW21jICJOb25lIl0KICAgICB9CiAgICAgY2F0Y2gge3Vuc2V0IGNvbW1pdGludGVyZXN0fQorICAgIGNhdGNoIHt1bnNldCBjYWNoZWRfY29tbWl0cm93fQorICAgIGNhdGNoIHt1bnNldCBvcmRlcnRva30KIAogICAgIHNldCBjdXJ2aWV3ICRuCiAgICAgc2V0IHNlbGVjdGVkdmlldyAkbgpAQCAtMjEzNCw3ICszMjk5LDcgQEAKICAgICAuYmFyLnZpZXcgZW50cnljb25mIFttYyAiRGVsZXRlIHZpZXciXSAtc3RhdGUgW2V4cHIgeyRuID09IDA/ICJkaXNhYmxlZCI6ICJub3JtYWwifV0KIAogICAgIHJ1biByZWZpbGxfcmVmbGlzdAotICAgIGlmIHshW2luZm8gZXhpc3RzIHZpZXdkYXRhKCRuKV19IHsKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyB2aWV3Y29tcGxldGUoJG4pXX0gewogCWlmIHskc2VsaWQgbmUge319IHsKIAkgICAgc2V0IHBlbmRpbmdfc2VsZWN0ICRzZWxpZAogCX0KQEAgLTIxNDIsMTQgKzMzMDcsMTEgQEAKIAlyZXR1cm4KICAgICB9CiAKLSAgICBzZXQgdiAkdmlld2RhdGEoJG4pCi0gICAgc2V0IHBoYXNlIFtsaW5kZXggJHYgMF0KLSAgICBzZXQgZGlzcGxheW9yZGVyICR2ZGlzcG9yZGVyKCRuKQotICAgIHNldCBwYXJlbnRsaXN0ICR2cGFyZW50bGlzdCgkbikKLSAgICBzZXQgY29tbWl0bGlzdGVkICR2Y21pdGxpc3RlZCgkbikKLSAgICBzZXQgcm93aWRsaXN0IFtsaW5kZXggJHYgMV0KLSAgICBzZXQgcm93aXNvcHQgW2xpbmRleCAkdiAyXQotICAgIHNldCByb3dmaW5hbCBbbGluZGV4ICR2IDNdCisgICAgc2V0IGRpc3BsYXlvcmRlciB7fQorICAgIHNldCBwYXJlbnRsaXN0IHt9CisgICAgc2V0IHJvd2lkbGlzdCB7fQorICAgIHNldCByb3dpc29wdCB7fQorICAgIHNldCByb3dmaW5hbCB7fQogICAgIHNldCBudW1jb21taXRzICRjb21taXRpZHgoJG4pCiAKICAgICBjYXRjaCB7dW5zZXQgY29sb3JtYXB9CkBAIC0yMTYxLDkgKzMzMjMsOCBAQAogICAgIHNldGNhbnZzY3JvbGwKICAgICBzZXQgeWYgMAogICAgIHNldCByb3cge30KLSAgICBzZXQgc2VsZWN0Zmlyc3QgMAotICAgIGlmIHtbaW5mbyBleGlzdHMgeXNjcmVlbl0gJiYgW2luZm8gZXhpc3RzIGNvbW1pdHJvdygkbiwkc2VsaWQpXX0gewotCXNldCByb3cgJGNvbW1pdHJvdygkbiwkc2VsaWQpCisgICAgaWYgeyRzZWxpZCBuZSB7fSAmJiBbY29tbWl0aW52aWV3ICRzZWxpZCAkbl19IHsKKwlzZXQgcm93IFtyb3dvZmNvbW1pdCAkc2VsaWRdCiAJIyB0cnkgdG8gZ2V0IHRoZSBzZWxlY3RlZCByb3cgaW4gdGhlIHNhbWUgcG9zaXRpb24gb24gdGhlIHNjcmVlbgogCXNldCB5bWF4IFtsaW5kZXggWyRjYW52IGNnZXQgLXNjcm9sbHJlZ2lvbl0gM10KIAlzZXQgeXRvcCBbZXhwciB7W3ljICRyb3ddIC0gJHlzY3JlZW59XQpAQCAtMjE3NiwyMSArMzMzNywyNCBAQAogICAgIGRyYXd2aXNpYmxlCiAgICAgaWYgeyRyb3cgbmUge319IHsKIAlzZWxlY3RsaW5lICRyb3cgMAotICAgIH0gZWxzZWlmIHskc2VsaWQgbmUge319IHsKLQlzZXQgcGVuZGluZ19zZWxlY3QgJHNlbGlkCisgICAgfSBlbHNlaWYgeyRtYWluaGVhZGlkIG5lIHt9ICYmIFtjb21taXRpbnZpZXcgJG1haW5oZWFkaWQgJGN1cnZpZXddfSB7CisJc2VsZWN0bGluZSBbcm93b2Zjb21taXQgJG1haW5oZWFkaWRdIDEKKyAgICB9IGVsc2VpZiB7ISR2aWV3Y29tcGxldGUoJG4pfSB7CisJaWYgeyRzZWxpZCBuZSB7fX0geworCSAgICBzZXQgcGVuZGluZ19zZWxlY3QgJHNlbGlkCisJfSBlbHNlIHsKKwkgICAgc2V0IHBlbmRpbmdfc2VsZWN0ICRtYWluaGVhZGlkCisJfQogICAgIH0gZWxzZSB7CiAJc2V0IHJvdyBbZmlyc3RfcmVhbF9yb3ddCiAJaWYgeyRyb3cgPCAkbnVtY29tbWl0c30gewogCSAgICBzZWxlY3RsaW5lICRyb3cgMAotCX0gZWxzZSB7Ci0JICAgIHNldCBzZWxlY3RmaXJzdCAxCiAJfQogICAgIH0KLSAgICBpZiB7JHBoYXNlIG5lIHt9fSB7Ci0JaWYgeyRwaGFzZSBlcSAiZ2V0Y29tbWl0cyJ9IHsKKyAgICBpZiB7ISR2aWV3Y29tcGxldGUoJG4pfSB7CisJaWYgeyRudW1jb21taXRzID09IDB9IHsKIAkgICAgc2hvd19zdGF0dXMgW21jICJSZWFkaW5nIGNvbW1pdHMuLi4iXQogCX0KLQlydW4gY2hld2NvbW1pdHMgJG4KICAgICB9IGVsc2VpZiB7JG51bWNvbW1pdHMgPT0gMH0gewogCXNob3dfc3RhdHVzIFttYyAiTm8gY29tbWl0cyBzZWxlY3RlZCJdCiAgICAgfQpAQCAtMjE5OCwyMCArMzM2MiwyMCBAQAogCiAjIFN0dWZmIHJlbGF0aW5nIHRvIHRoZSBoaWdobGlnaHRpbmcgZmFjaWxpdHkKIAotcHJvYyBpc2hpZ2hsaWdodGVkIHtyb3d9IHsKK3Byb2MgaXNoaWdobGlnaHRlZCB7aWR9IHsKICAgICBnbG9iYWwgdmhpZ2hsaWdodHMgZmhpZ2hsaWdodHMgbmhpZ2hsaWdodHMgcmhpZ2hsaWdodHMKIAotICAgIGlmIHtbaW5mbyBleGlzdHMgbmhpZ2hsaWdodHMoJHJvdyldICYmICRuaGlnaGxpZ2h0cygkcm93KSA+IDB9IHsKLQlyZXR1cm4gJG5oaWdobGlnaHRzKCRyb3cpCisgICAgaWYge1tpbmZvIGV4aXN0cyBuaGlnaGxpZ2h0cygkaWQpXSAmJiAkbmhpZ2hsaWdodHMoJGlkKSA+IDB9IHsKKwlyZXR1cm4gJG5oaWdobGlnaHRzKCRpZCkKICAgICB9Ci0gICAgaWYge1tpbmZvIGV4aXN0cyB2aGlnaGxpZ2h0cygkcm93KV0gJiYgJHZoaWdobGlnaHRzKCRyb3cpID4gMH0gewotCXJldHVybiAkdmhpZ2hsaWdodHMoJHJvdykKKyAgICBpZiB7W2luZm8gZXhpc3RzIHZoaWdobGlnaHRzKCRpZCldICYmICR2aGlnaGxpZ2h0cygkaWQpID4gMH0geworCXJldHVybiAkdmhpZ2hsaWdodHMoJGlkKQogICAgIH0KLSAgICBpZiB7W2luZm8gZXhpc3RzIGZoaWdobGlnaHRzKCRyb3cpXSAmJiAkZmhpZ2hsaWdodHMoJHJvdykgPiAwfSB7Ci0JcmV0dXJuICRmaGlnaGxpZ2h0cygkcm93KQorICAgIGlmIHtbaW5mbyBleGlzdHMgZmhpZ2hsaWdodHMoJGlkKV0gJiYgJGZoaWdobGlnaHRzKCRpZCkgPiAwfSB7CisJcmV0dXJuICRmaGlnaGxpZ2h0cygkaWQpCiAgICAgfQotICAgIGlmIHtbaW5mbyBleGlzdHMgcmhpZ2hsaWdodHMoJHJvdyldICYmICRyaGlnaGxpZ2h0cygkcm93KSA+IDB9IHsKLQlyZXR1cm4gJHJoaWdobGlnaHRzKCRyb3cpCisgICAgaWYge1tpbmZvIGV4aXN0cyByaGlnaGxpZ2h0cygkaWQpXSAmJiAkcmhpZ2hsaWdodHMoJGlkKSA+IDB9IHsKKwlyZXR1cm4gJHJoaWdobGlnaHRzKCRpZCkKICAgICB9CiAgICAgcmV0dXJuIDAKIH0KQEAgLTIyMjEsNyArMzM4NSw3IEBACiAKICAgICBsYXBwZW5kIGJvbGRyb3dzICRyb3cKICAgICAkY2FudiBpdGVtY29uZiAkbGluZWh0YWcoJHJvdykgLWZvbnQgJGZvbnQKLSAgICBpZiB7W2luZm8gZXhpc3RzIHNlbGVjdGVkbGluZV0gJiYgJHJvdyA9PSAkc2VsZWN0ZWRsaW5lfSB7CisgICAgaWYgeyRyb3cgPT0gJHNlbGVjdGVkbGluZX0gewogCSRjYW52IGRlbGV0ZSBzZWNzZWwKIAlzZXQgdCBbZXZhbCAkY2FudiBjcmVhdGUgcmVjdCBbJGNhbnYgYmJveCAkbGluZWh0YWcoJHJvdyldIFwKIAkJICAgLW91dGxpbmUge3t9fSAtdGFncyBzZWNzZWwgXApAQCAtMjIzNSw3ICszMzk5LDcgQEAKIAogICAgIGxhcHBlbmQgYm9sZG5hbWVyb3dzICRyb3cKICAgICAkY2FudjIgaXRlbWNvbmYgJGxpbmVudGFnKCRyb3cpIC1mb250ICRmb250Ci0gICAgaWYge1tpbmZvIGV4aXN0cyBzZWxlY3RlZGxpbmVdICYmICRyb3cgPT0gJHNlbGVjdGVkbGluZX0geworICAgIGlmIHskcm93ID09ICRzZWxlY3RlZGxpbmV9IHsKIAkkY2FudjIgZGVsZXRlIHNlY3NlbAogCXNldCB0IFtldmFsICRjYW52MiBjcmVhdGUgcmVjdCBbJGNhbnYyIGJib3ggJGxpbmVudGFnKCRyb3cpXSBcCiAJCSAgIC1vdXRsaW5lIHt7fX0gLXRhZ3Mgc2Vjc2VsIFwKQEAgLTIyNDksNyArMzQxMyw3IEBACiAKICAgICBzZXQgc3RpbGxib2xkIHt9CiAgICAgZm9yZWFjaCByb3cgJGJvbGRyb3dzIHsKLQlpZiB7IVtpc2hpZ2hsaWdodGVkICRyb3ddfSB7CisJaWYgeyFbaXNoaWdobGlnaHRlZCBbY29tbWl0b25yb3cgJHJvd11dfSB7CiAJICAgIGJvbGRlbiAkcm93IG1haW5mb250CiAJfSBlbHNlIHsKIAkgICAgbGFwcGVuZCBzdGlsbGJvbGQgJHJvdwpAQCAtMjI1OSwxNyArMzQyMywxMyBAQAogfQogCiBwcm9jIGFkZHZoaWdobGlnaHQge259IHsKLSAgICBnbG9iYWwgaGx2aWV3IGN1cnZpZXcgdmlld2RhdGEgdmhsX2RvbmUgdmhpZ2hsaWdodHMgY29tbWl0aWR4CisgICAgZ2xvYmFsIGhsdmlldyB2aWV3Y29tcGxldGUgY3VydmlldyB2aGxfZG9uZSBjb21taXRpZHgKIAogICAgIGlmIHtbaW5mbyBleGlzdHMgaGx2aWV3XX0gewogCWRlbHZoaWdobGlnaHQKICAgICB9CiAgICAgc2V0IGhsdmlldyAkbgotICAgIGlmIHskbiAhPSAkY3VydmlldyAmJiAhW2luZm8gZXhpc3RzIHZpZXdkYXRhKCRuKV19IHsKLQlzZXQgdmlld2RhdGEoJG4pIFtsaXN0IGdldGNvbW1pdHMge3t9fSAwIDAgMF0KLQlzZXQgdnBhcmVudGxpc3QoJG4pIHt9Ci0Jc2V0IHZkaXNwb3JkZXIoJG4pIHt9Ci0Jc2V0IHZjbWl0bGlzdGVkKCRuKSB7fQorICAgIGlmIHskbiAhPSAkY3VydmlldyAmJiAhW2luZm8gZXhpc3RzIHZpZXdjb21wbGV0ZSgkbildfSB7CiAJc3RhcnRfcmV2X2xpc3QgJG4KICAgICB9CiAgICAgc2V0IHZobF9kb25lICRjb21taXRpZHgoJGhsdmlldykKQEAgLTIyODgsNDMgKzM0NDgsMzggQEAKIH0KIAogcHJvYyB2aGlnaGxpZ2h0bW9yZSB7fSB7Ci0gICAgZ2xvYmFsIGhsdmlldyB2aGxfZG9uZSBjb21taXRpZHggdmhpZ2hsaWdodHMKLSAgICBnbG9iYWwgZGlzcGxheW9yZGVyIHZkaXNwb3JkZXIgY3VydmlldworICAgIGdsb2JhbCBobHZpZXcgdmhsX2RvbmUgY29tbWl0aWR4IHZoaWdobGlnaHRzIGN1cnZpZXcKIAogICAgIHNldCBtYXggJGNvbW1pdGlkeCgkaGx2aWV3KQotICAgIGlmIHskaGx2aWV3ID09ICRjdXJ2aWV3fSB7Ci0Jc2V0IGRpc3AgJGRpc3BsYXlvcmRlcgotICAgIH0gZWxzZSB7Ci0Jc2V0IGRpc3AgJHZkaXNwb3JkZXIoJGhsdmlldykKLSAgICB9CiAgICAgc2V0IHZyIFt2aXNpYmxlcm93c10KICAgICBzZXQgcjAgW2xpbmRleCAkdnIgMF0KICAgICBzZXQgcjEgW2xpbmRleCAkdnIgMV0KICAgICBmb3Ige3NldCBpICR2aGxfZG9uZX0geyRpIDwgJG1heH0ge2luY3IgaX0gewotCXNldCBpZCBbbGluZGV4ICRkaXNwICRpXQotCWlmIHtbaW5mbyBleGlzdHMgY29tbWl0cm93KCRjdXJ2aWV3LCRpZCldfSB7Ci0JICAgIHNldCByb3cgJGNvbW1pdHJvdygkY3VydmlldywkaWQpCisJc2V0IGlkIFtjb21taXRvbnJvdyAkaSAkaGx2aWV3XQorCWlmIHtbY29tbWl0aW52aWV3ICRpZCAkY3Vydmlld119IHsKKwkgICAgc2V0IHJvdyBbcm93b2Zjb21taXQgJGlkXQogCSAgICBpZiB7JHIwIDw9ICRyb3cgJiYgJHJvdyA8PSAkcjF9IHsKIAkJaWYgeyFbaGlnaGxpZ2h0ZWQgJHJvd119IHsKIAkJICAgIGJvbGRlbiAkcm93IG1haW5mb250Ym9sZAogCQl9Ci0JCXNldCB2aGlnaGxpZ2h0cygkcm93KSAxCisJCXNldCB2aGlnaGxpZ2h0cygkaWQpIDEKIAkgICAgfQogCX0KICAgICB9CiAgICAgc2V0IHZobF9kb25lICRtYXgKKyAgICByZXR1cm4gMAogfQogCiBwcm9jIGFza3ZoaWdobGlnaHQge3JvdyBpZH0gewotICAgIGdsb2JhbCBobHZpZXcgdmhpZ2hsaWdodHMgY29tbWl0cm93IGlkZHJhd24KKyAgICBnbG9iYWwgaGx2aWV3IHZoaWdobGlnaHRzIGlkZHJhd24KIAotICAgIGlmIHtbaW5mbyBleGlzdHMgY29tbWl0cm93KCRobHZpZXcsJGlkKV19IHsKLQlpZiB7W2luZm8gZXhpc3RzIGlkZHJhd24oJGlkKV0gJiYgIVtpc2hpZ2hsaWdodGVkICRyb3ddfSB7CisgICAgaWYge1tjb21taXRpbnZpZXcgJGlkICRobHZpZXddfSB7CisJaWYge1tpbmZvIGV4aXN0cyBpZGRyYXduKCRpZCldICYmICFbaXNoaWdobGlnaHRlZCAkaWRdfSB7CiAJICAgIGJvbGRlbiAkcm93IG1haW5mb250Ym9sZAogCX0KLQlzZXQgdmhpZ2hsaWdodHMoJHJvdykgMQorCXNldCB2aGlnaGxpZ2h0cygkaWQpIDEKICAgICB9IGVsc2UgewotCXNldCB2aGlnaGxpZ2h0cygkcm93KSAwCisJc2V0IHZoaWdobGlnaHRzKCRpZCkgMAogICAgIH0KIH0KIApAQCAtMjQ2MiwxMiArMzYxNywxMiBAQAogICAgIGdsb2JhbCBmaWxlaGlnaGxpZ2h0IGZoaWdobGlnaHRzIGZobF9saXN0CiAKICAgICBsYXBwZW5kIGZobF9saXN0ICRpZAotICAgIHNldCBmaGlnaGxpZ2h0cygkcm93KSAtMQorICAgIHNldCBmaGlnaGxpZ2h0cygkaWQpIC0xCiAgICAgcHV0cyAkZmlsZWhpZ2hsaWdodCAkaWQKIH0KIAogcHJvYyByZWFkZmhpZ2hsaWdodCB7fSB7Ci0gICAgZ2xvYmFsIGZpbGVoaWdobGlnaHQgZmhpZ2hsaWdodHMgY29tbWl0cm93IGN1cnZpZXcgaWRkcmF3bgorICAgIGdsb2JhbCBmaWxlaGlnaGxpZ2h0IGZoaWdobGlnaHRzIGN1cnZpZXcgaWRkcmF3bgogICAgIGdsb2JhbCBmaGxfbGlzdCBmaW5kX2Rpcm4KIAogICAgIGlmIHshW2luZm8gZXhpc3RzIGZpbGVoaWdobGlnaHRdfSB7CkBAIC0yNDgwLDE4ICszNjM1LDE2IEBACiAJaWYgeyRpIDwgMH0gY29udGludWUKIAlmb3Ige3NldCBqIDB9IHskaiA8ICRpfSB7aW5jciBqfSB7CiAJICAgIHNldCBpZCBbbGluZGV4ICRmaGxfbGlzdCAkal0KLQkgICAgaWYge1tpbmZvIGV4aXN0cyBjb21taXRyb3coJGN1cnZpZXcsJGlkKV19IHsKLQkJc2V0IGZoaWdobGlnaHRzKCRjb21taXRyb3coJGN1cnZpZXcsJGlkKSkgMAotCSAgICB9CisJICAgIHNldCBmaGlnaGxpZ2h0cygkaWQpIDAKIAl9CiAJc2V0IGZobF9saXN0IFtscmFuZ2UgJGZobF9saXN0IFtleHByIHskaSsxfV0gZW5kXQogCWlmIHskbGluZSBlcSB7fX0gY29udGludWUKLQlpZiB7IVtpbmZvIGV4aXN0cyBjb21taXRyb3coJGN1cnZpZXcsJGxpbmUpXX0gY29udGludWUKLQlzZXQgcm93ICRjb21taXRyb3coJGN1cnZpZXcsJGxpbmUpCi0JaWYge1tpbmZvIGV4aXN0cyBpZGRyYXduKCRsaW5lKV0gJiYgIVtpc2hpZ2hsaWdodGVkICRyb3ddfSB7CisJaWYgeyFbY29tbWl0aW52aWV3ICRsaW5lICRjdXJ2aWV3XX0gY29udGludWUKKwlzZXQgcm93IFtyb3dvZmNvbW1pdCAkbGluZV0KKwlpZiB7W2luZm8gZXhpc3RzIGlkZHJhd24oJGxpbmUpXSAmJiAhW2lzaGlnaGxpZ2h0ZWQgJGxpbmVdfSB7CiAJICAgIGJvbGRlbiAkcm93IG1haW5mb250Ym9sZAogCX0KLQlzZXQgZmhpZ2hsaWdodHMoJHJvdykgMQorCXNldCBmaGlnaGxpZ2h0cygkbGluZSkgMQogICAgIH0KICAgICBpZiB7W2VvZiAkZmlsZWhpZ2hsaWdodF19IHsKIAkjIHN0cmFuZ2UuLi4KQEAgLTI1NDAsNyArMzY5Myw3IEBACiAJfQogICAgIH0KICAgICBpZiB7JGlzYm9sZCAmJiBbaW5mbyBleGlzdHMgaWRkcmF3bigkaWQpXX0gewotCWlmIHshW2lzaGlnaGxpZ2h0ZWQgJHJvd119IHsKKwlpZiB7IVtpc2hpZ2hsaWdodGVkICRpZF19IHsKIAkgICAgYm9sZGVuICRyb3cgbWFpbmZvbnRib2xkCiAJICAgIGlmIHskaXNib2xkID4gMX0gewogCQlib2xkZW5fbmFtZSAkcm93IG1haW5mb250Ym9sZApAQCAtMjU1MCw3ICszNzAzLDcgQEAKIAkgICAgbWFya3Jvd21hdGNoZXMgJHJvdyAkaWQKIAl9CiAgICAgfQotICAgIHNldCBuaGlnaGxpZ2h0cygkcm93KSAkaXNib2xkCisgICAgc2V0IG5oaWdobGlnaHRzKCRpZCkgJGlzYm9sZAogfQogCiBwcm9jIG1hcmtyb3dtYXRjaGVzIHtyb3cgaWR9IHsKQEAgLTI1ODgsNyArMzc0MSw3IEBACiAjIHByZXBhcmUgZm9yIHRlc3Rpbmcgd2hldGhlciBjb21taXRzIGFyZSBkZXNjZW5kZW50cyBvciBhbmNlc3RvcnMgb2YgYQogcHJvYyByaGlnaGxpZ2h0X3NlbCB7YX0gewogICAgIGdsb2JhbCBkZXNjZW5kZW50IGRlc2NfdG9kbyBhbmNlc3RvciBhbmNfdG9kbwotICAgIGdsb2JhbCBoaWdobGlnaHRfcmVsYXRlZCByaGlnaGxpZ2h0cworICAgIGdsb2JhbCBoaWdobGlnaHRfcmVsYXRlZAogCiAgICAgY2F0Y2gge3Vuc2V0IGRlc2NlbmRlbnR9CiAgICAgc2V0IGRlc2NfdG9kbyBbbGlzdCAkYV0KQEAgLTI2MDgsMTYgKzM3NjEsMTYgQEAKIH0KIAogcHJvYyBpc19kZXNjZW5kZW50IHthfSB7Ci0gICAgZ2xvYmFsIGN1cnZpZXcgY2hpbGRyZW4gY29tbWl0cm93IGRlc2NlbmRlbnQgZGVzY190b2RvCisgICAgZ2xvYmFsIGN1cnZpZXcgY2hpbGRyZW4gZGVzY2VuZGVudCBkZXNjX3RvZG8KIAogICAgIHNldCB2ICRjdXJ2aWV3Ci0gICAgc2V0IGxhICRjb21taXRyb3coJHYsJGEpCisgICAgc2V0IGxhIFtyb3dvZmNvbW1pdCAkYV0KICAgICBzZXQgdG9kbyAkZGVzY190b2RvCiAgICAgc2V0IGxlZnRvdmVyIHt9CiAgICAgc2V0IGRvbmUgMAogICAgIGZvciB7c2V0IGkgMH0geyRpIDwgW2xsZW5ndGggJHRvZG9dfSB7aW5jciBpfSB7CiAJc2V0IGRvIFtsaW5kZXggJHRvZG8gJGldCi0JaWYgeyRjb21taXRyb3coJHYsJGRvKSA8ICRsYX0geworCWlmIHtbcm93b2Zjb21taXQgJGRvXSA8ICRsYX0gewogCSAgICBsYXBwZW5kIGxlZnRvdmVyICRkbwogCSAgICBjb250aW51ZQogCX0KQEAgLTI2NDAsMjAgKzM3OTMsMjAgQEAKIH0KIAogcHJvYyBpc19hbmNlc3RvciB7YX0gewotICAgIGdsb2JhbCBjdXJ2aWV3IHBhcmVudGxpc3QgY29tbWl0cm93IGFuY2VzdG9yIGFuY190b2RvCisgICAgZ2xvYmFsIGN1cnZpZXcgcGFyZW50cyBhbmNlc3RvciBhbmNfdG9kbwogCiAgICAgc2V0IHYgJGN1cnZpZXcKLSAgICBzZXQgbGEgJGNvbW1pdHJvdygkdiwkYSkKKyAgICBzZXQgbGEgW3Jvd29mY29tbWl0ICRhXQogICAgIHNldCB0b2RvICRhbmNfdG9kbwogICAgIHNldCBsZWZ0b3ZlciB7fQogICAgIHNldCBkb25lIDAKICAgICBmb3Ige3NldCBpIDB9IHskaSA8IFtsbGVuZ3RoICR0b2RvXX0ge2luY3IgaX0gewogCXNldCBkbyBbbGluZGV4ICR0b2RvICRpXQotCWlmIHshW2luZm8gZXhpc3RzIGNvbW1pdHJvdygkdiwkZG8pXSB8fCAkY29tbWl0cm93KCR2LCRkbykgPiAkbGF9IHsKKwlpZiB7IVtjb21taXRpbnZpZXcgJGRvICR2XSB8fCBbcm93b2Zjb21taXQgJGRvXSA+ICRsYX0gewogCSAgICBsYXBwZW5kIGxlZnRvdmVyICRkbwogCSAgICBjb250aW51ZQogCX0KLQlmb3JlYWNoIG5wIFtsaW5kZXggJHBhcmVudGxpc3QgJGNvbW1pdHJvdygkdiwkZG8pXSB7CisJZm9yZWFjaCBucCAkcGFyZW50cygkdiwkZG8pIHsKIAkgICAgaWYgeyFbaW5mbyBleGlzdHMgYW5jZXN0b3IoJG5wKV19IHsKIAkJc2V0IGFuY2VzdG9yKCRucCkgMQogCQlsYXBwZW5kIHRvZG8gJG5wCkBAIC0yNjc1LDcgKzM4MjgsNyBAQAogICAgIGdsb2JhbCBkZXNjZW5kZW50IGhpZ2hsaWdodF9yZWxhdGVkIGlkZHJhd24gcmhpZ2hsaWdodHMKICAgICBnbG9iYWwgc2VsZWN0ZWRsaW5lIGFuY2VzdG9yCiAKLSAgICBpZiB7IVtpbmZvIGV4aXN0cyBzZWxlY3RlZGxpbmVdfSByZXR1cm4KKyAgICBpZiB7JHNlbGVjdGVkbGluZSBlcSB7fX0gcmV0dXJuCiAgICAgc2V0IGlzYm9sZCAwCiAgICAgaWYgeyRoaWdobGlnaHRfcmVsYXRlZCBlcSBbbWMgIkRlc2NlbmRhbnQiXSB8fAogCSRoaWdobGlnaHRfcmVsYXRlZCBlcSBbbWMgIk5vdCBkZXNjZW5kYW50Il19IHsKQEAgLTI2OTUsMTEgKzM4NDgsMTEgQEAKIAl9CiAgICAgfQogICAgIGlmIHtbaW5mbyBleGlzdHMgaWRkcmF3bigkaWQpXX0gewotCWlmIHskaXNib2xkICYmICFbaXNoaWdobGlnaHRlZCAkcm93XX0geworCWlmIHskaXNib2xkICYmICFbaXNoaWdobGlnaHRlZCAkaWRdfSB7CiAJICAgIGJvbGRlbiAkcm93IG1haW5mb250Ym9sZAogCX0KICAgICB9Ci0gICAgc2V0IHJoaWdobGlnaHRzKCRyb3cpICRpc2JvbGQKKyAgICBzZXQgcmhpZ2hsaWdodHMoJGlkKSAkaXNib2xkCiB9CiAKICMgR3JhcGggbGF5b3V0IGZ1bmN0aW9ucwpAQCAtMjczMCw0MCArMzg4Myw4MSBAQAogICAgIHJldHVybiAkcmV0CiB9CiAKK3Byb2Mgb3JkZXJ0b2tlbiB7aWR9IHsKKyAgICBnbG9iYWwgb3JkZXJ0b2sgY3VydmlldyB2YXJjaWQgdmFyY3N0YXJ0IHZhcmN0b2sgY3VydmlldyBwYXJlbnRzIGNoaWxkcmVuCisgICAgZ2xvYmFsIG51bGxpZCBudWxsaWQyCisKKyAgICBpZiB7W2luZm8gZXhpc3RzIG9yZGVydG9rKCRpZCldfSB7CisJcmV0dXJuICRvcmRlcnRvaygkaWQpCisgICAgfQorICAgIHNldCBvcmlnaWQgJGlkCisgICAgc2V0IHRvZG8ge30KKyAgICB3aGlsZSB7MX0geworCWlmIHtbaW5mbyBleGlzdHMgdmFyY2lkKCRjdXJ2aWV3LCRpZCldfSB7CisJICAgIHNldCBhICR2YXJjaWQoJGN1cnZpZXcsJGlkKQorCSAgICBzZXQgcCBbbGluZGV4ICR2YXJjc3RhcnQoJGN1cnZpZXcpICRhXQorCX0gZWxzZSB7CisJICAgIHNldCBwIFtsaW5kZXggJGNoaWxkcmVuKCRjdXJ2aWV3LCRpZCkgMF0KKwl9CisJaWYge1tpbmZvIGV4aXN0cyBvcmRlcnRvaygkcCldfSB7CisJICAgIHNldCB0b2sgJG9yZGVydG9rKCRwKQorCSAgICBicmVhaworCX0KKwlzZXQgaWQgW2ZpcnN0X3JlYWxfY2hpbGQgJGN1cnZpZXcsJHBdCisJaWYgeyRpZCBlcSB7fX0geworCSAgICAjIGl0J3MgYSByb290CisJICAgIHNldCB0b2sgW2xpbmRleCAkdmFyY3RvaygkY3VydmlldykgJHZhcmNpZCgkY3VydmlldywkcCldCisJICAgIGJyZWFrCisJfQorCWlmIHtbbGxlbmd0aCAkcGFyZW50cygkY3VydmlldywkaWQpXSA9PSAxfSB7CisJICAgIGxhcHBlbmQgdG9kbyBbbGlzdCAkcCB7fV0KKwl9IGVsc2UgeworCSAgICBzZXQgaiBbbHNlYXJjaCAtZXhhY3QgJHBhcmVudHMoJGN1cnZpZXcsJGlkKSAkcF0KKwkgICAgaWYgeyRqIDwgMH0geworCQlwdXRzICJvb3BzIGRpZG4ndCBmaW5kIFtzaG9ydGlkcyAkcF0gaW4gcGFyZW50cyBvZiBbc2hvcnRpZHMgJGlkXSIKKwkgICAgfQorCSAgICBsYXBwZW5kIHRvZG8gW2xpc3QgJHAgW3N0cnJlcCAkal1dCisJfQorICAgIH0KKyAgICBmb3Ige3NldCBpIFtsbGVuZ3RoICR0b2RvXX0ge1tpbmNyIGkgLTFdID49IDB9IHt9IHsKKwlzZXQgcCBbbGluZGV4ICR0b2RvICRpIDBdCisJYXBwZW5kIHRvayBbbGluZGV4ICR0b2RvICRpIDFdCisJc2V0IG9yZGVydG9rKCRwKSAkdG9rCisgICAgfQorICAgIHNldCBvcmRlcnRvaygkb3JpZ2lkKSAkdG9rCisgICAgcmV0dXJuICR0b2sKK30KKwogIyBXb3JrIG91dCB3aGVyZSBpZCBzaG91bGQgZ28gaW4gaWRsaXN0IHNvIHRoYXQgb3JkZXItdG9rZW4KICMgdmFsdWVzIGluY3JlYXNlIGZyb20gbGVmdCB0byByaWdodAogcHJvYyBpZGNvbCB7aWRsaXN0IGlkIHtpIDB9fSB7Ci0gICAgZ2xvYmFsIG9yZGVydG9rIGN1cnZpZXcKLQotICAgIHNldCB0ICRvcmRlcnRvaygkY3VydmlldywkaWQpCi0gICAgaWYgeyRpID49IFtsbGVuZ3RoICRpZGxpc3RdIHx8Ci0JJHQgPCAkb3JkZXJ0b2soJGN1cnZpZXcsW2xpbmRleCAkaWRsaXN0ICRpXSl9IHsKKyAgICBzZXQgdCBbb3JkZXJ0b2tlbiAkaWRdCisgICAgaWYgeyRpIDwgMH0geworCXNldCBpIDAKKyAgICB9CisgICAgaWYgeyRpID49IFtsbGVuZ3RoICRpZGxpc3RdIHx8ICR0IDwgW29yZGVydG9rZW4gW2xpbmRleCAkaWRsaXN0ICRpXV19IHsKIAlpZiB7JGkgPiBbbGxlbmd0aCAkaWRsaXN0XX0gewogCSAgICBzZXQgaSBbbGxlbmd0aCAkaWRsaXN0XQogCX0KLQl3aGlsZSB7W2luY3IgaSAtMV0gPj0gMCAmJgotCSAgICAgICAkdCA8ICRvcmRlcnRvaygkY3VydmlldyxbbGluZGV4ICRpZGxpc3QgJGldKX0ge30KKwl3aGlsZSB7W2luY3IgaSAtMV0gPj0gMCAmJiAkdCA8IFtvcmRlcnRva2VuIFtsaW5kZXggJGlkbGlzdCAkaV1dfSB7fQogCWluY3IgaQogICAgIH0gZWxzZSB7Ci0JaWYgeyR0ID4gJG9yZGVydG9rKCRjdXJ2aWV3LFtsaW5kZXggJGlkbGlzdCAkaV0pfSB7CisJaWYgeyR0ID4gW29yZGVydG9rZW4gW2xpbmRleCAkaWRsaXN0ICRpXV19IHsKIAkgICAgd2hpbGUge1tpbmNyIGldIDwgW2xsZW5ndGggJGlkbGlzdF0gJiYKLQkJICAgJHQgPj0gJG9yZGVydG9rKCRjdXJ2aWV3LFtsaW5kZXggJGlkbGlzdCAkaV0pfSB7fQorCQkgICAkdCA+PSBbb3JkZXJ0b2tlbiBbbGluZGV4ICRpZGxpc3QgJGldXX0ge30KIAl9CiAgICAgfQogICAgIHJldHVybiAkaQogfQogCiBwcm9jIGluaXRsYXlvdXQge30gewotICAgIGdsb2JhbCByb3dpZGxpc3Qgcm93aXNvcHQgcm93ZmluYWwgZGlzcGxheW9yZGVyIGNvbW1pdGxpc3RlZAorICAgIGdsb2JhbCByb3dpZGxpc3Qgcm93aXNvcHQgcm93ZmluYWwgZGlzcGxheW9yZGVyIHBhcmVudGxpc3QKICAgICBnbG9iYWwgbnVtY29tbWl0cyBjYW52eG1heCBjYW52CiAgICAgZ2xvYmFsIG5leHRjb2xvcgotICAgIGdsb2JhbCBwYXJlbnRsaXN0CiAgICAgZ2xvYmFsIGNvbG9ybWFwIHJvd3RleHR4Ci0gICAgZ2xvYmFsIHNlbGVjdGZpcnN0CiAKICAgICBzZXQgbnVtY29tbWl0cyAwCiAgICAgc2V0IGRpc3BsYXlvcmRlciB7fQotICAgIHNldCBjb21taXRsaXN0ZWQge30KICAgICBzZXQgcGFyZW50bGlzdCB7fQogICAgIHNldCBuZXh0Y29sb3IgMAogICAgIHNldCByb3dpZGxpc3Qge30KQEAgLTI3NzIsMTYgKzM5NjYsMTkgQEAKICAgICBzZXQgY2FudnhtYXggWyRjYW52IGNnZXQgLXdpZHRoXQogICAgIGNhdGNoIHt1bnNldCBjb2xvcm1hcH0KICAgICBjYXRjaCB7dW5zZXQgcm93dGV4dHh9Ci0gICAgc2V0IHNlbGVjdGZpcnN0IDEKKyAgICBzZXRjYW52c2Nyb2xsCiB9CiAKIHByb2Mgc2V0Y2FudnNjcm9sbCB7fSB7CiAgICAgZ2xvYmFsIGNhbnYgY2FudjIgY2FudjMgbnVtY29tbWl0cyBsaW5lc3BjIGNhbnZ4bWF4IGNhbnZ5MAorICAgIGdsb2JhbCBsYXN0c2Nyb2xsc2V0IGxhc3RzY3JvbGxyb3dzCiAKICAgICBzZXQgeW1heCBbZXhwciB7JGNhbnZ5MCArICgkbnVtY29tbWl0cyAtIDAuNSkgKiAkbGluZXNwYyArIDJ9XQogICAgICRjYW52IGNvbmYgLXNjcm9sbHJlZ2lvbiBbbGlzdCAwIDAgJGNhbnZ4bWF4ICR5bWF4XQogICAgICRjYW52MiBjb25mIC1zY3JvbGxyZWdpb24gW2xpc3QgMCAwIDAgJHltYXhdCiAgICAgJGNhbnYzIGNvbmYgLXNjcm9sbHJlZ2lvbiBbbGlzdCAwIDAgMCAkeW1heF0KKyAgICBzZXQgbGFzdHNjcm9sbHNldCBbY2xvY2sgY2xpY2tzIC1taWxsaXNlY29uZHNdCisgICAgc2V0IGxhc3RzY3JvbGxyb3dzICRudW1jb21taXRzCiB9CiAKIHByb2MgdmlzaWJsZXJvd3Mge30gewpAQCAtMjgwNCwxMDIgKzQwMDEsNTggQEAKIH0KIAogcHJvYyBsYXlvdXRtb3JlIHt9IHsKLSAgICBnbG9iYWwgY29tbWl0aWR4IHZpZXdjb21wbGV0ZSBudW1jb21taXRzCi0gICAgZ2xvYmFsIHVwYXJyb3dsZW4gZG93bmFycm93bGVuIG1pbmdhcGxlbiBjdXJ2aWV3CisgICAgZ2xvYmFsIGNvbW1pdGlkeCB2aWV3Y29tcGxldGUgY3VydmlldworICAgIGdsb2JhbCBudW1jb21taXRzIHBlbmRpbmdfc2VsZWN0IGN1cnZpZXcKKyAgICBnbG9iYWwgbGFzdHNjcm9sbHNldCBsYXN0c2Nyb2xscm93cyBjb21taXRpbnRlcmVzdAogCi0gICAgc2V0IHNob3cgJGNvbW1pdGlkeCgkY3VydmlldykKLSAgICBpZiB7JHNob3cgPiAkbnVtY29tbWl0cyB8fCAkdmlld2NvbXBsZXRlKCRjdXJ2aWV3KX0gewotCXNob3dzdHVmZiAkc2hvdyAkdmlld2NvbXBsZXRlKCRjdXJ2aWV3KQotICAgIH0KLX0KLQotcHJvYyBzaG93c3R1ZmYge2NhbnNob3cgbGFzdH0gewotICAgIGdsb2JhbCBudW1jb21taXRzIGNvbW1pdHJvdyBwZW5kaW5nX3NlbGVjdCBzZWxlY3RlZGxpbmUgY3VydmlldwotICAgIGdsb2JhbCBtYWluaGVhZGlkIGRpc3BsYXlvcmRlciBzZWxlY3RmaXJzdAotICAgIGdsb2JhbCBsYXN0c2Nyb2xsc2V0IGNvbW1pdGludGVyZXN0Ci0KLSAgICBpZiB7JG51bWNvbW1pdHMgPT0gMH0gewotCWdsb2JhbCBwaGFzZQotCXNldCBwaGFzZSAiaW5jcmRyYXciCi0JYWxsY2FudnMgZGVsZXRlIGFsbAotICAgIH0KLSAgICBzZXQgcjAgJG51bWNvbW1pdHMKLSAgICBzZXQgcHJldiAkbnVtY29tbWl0cwotICAgIHNldCBudW1jb21taXRzICRjYW5zaG93Ci0gICAgc2V0IHQgW2Nsb2NrIGNsaWNrcyAtbWlsbGlzZWNvbmRzXQotICAgIGlmIHskcHJldiA8IDEwMCB8fCAkbGFzdCB8fCAkdCAtICRsYXN0c2Nyb2xsc2V0ID4gNTAwfSB7Ci0Jc2V0IGxhc3RzY3JvbGxzZXQgJHQKKyAgICBpZiB7JGxhc3RzY3JvbGxyb3dzIDwgMTAwIHx8ICR2aWV3Y29tcGxldGUoJGN1cnZpZXcpIHx8CisJW2Nsb2NrIGNsaWNrcyAtbWlsbGlzZWNvbmRzXSAtICRsYXN0c2Nyb2xsc2V0ID4gNTAwfSB7CiAJc2V0Y2FudnNjcm9sbAogICAgIH0KLSAgICBzZXQgcm93cyBbdmlzaWJsZXJvd3NdCi0gICAgc2V0IHIxIFtsaW5kZXggJHJvd3MgMV0KLSAgICBpZiB7JHIxID49ICRjYW5zaG93fSB7Ci0Jc2V0IHIxIFtleHByIHskY2Fuc2hvdyAtIDF9XQotICAgIH0KLSAgICBpZiB7JHIwIDw9ICRyMX0gewotCWRyYXdjb21taXRzICRyMCAkcjEKLSAgICB9CiAgICAgaWYge1tpbmZvIGV4aXN0cyBwZW5kaW5nX3NlbGVjdF0gJiYKLQlbaW5mbyBleGlzdHMgY29tbWl0cm93KCRjdXJ2aWV3LCRwZW5kaW5nX3NlbGVjdCldICYmCi0JJGNvbW1pdHJvdygkY3VydmlldywkcGVuZGluZ19zZWxlY3QpIDwgJG51bWNvbW1pdHN9IHsKLQlzZWxlY3RsaW5lICRjb21taXRyb3coJGN1cnZpZXcsJHBlbmRpbmdfc2VsZWN0KSAxCisJW2NvbW1pdGludmlldyAkcGVuZGluZ19zZWxlY3QgJGN1cnZpZXddfSB7CisJc2VsZWN0bGluZSBbcm93b2Zjb21taXQgJHBlbmRpbmdfc2VsZWN0XSAxCiAgICAgfQotICAgIGlmIHskc2VsZWN0Zmlyc3R9IHsKLQlpZiB7W2luZm8gZXhpc3RzIHNlbGVjdGVkbGluZV0gfHwgW2luZm8gZXhpc3RzIHBlbmRpbmdfc2VsZWN0XX0gewotCSAgICBzZXQgc2VsZWN0Zmlyc3QgMAotCX0gZWxzZSB7Ci0JICAgIHNldCBsIFtmaXJzdF9yZWFsX3Jvd10KLQkgICAgc2VsZWN0bGluZSAkbCAxCi0JICAgIHNldCBzZWxlY3RmaXJzdCAwCi0JfQotICAgIH0KKyAgICBkcmF3dmlzaWJsZQogfQogCiBwcm9jIGRvc2hvd2xvY2FsY2hhbmdlcyB7fSB7Ci0gICAgZ2xvYmFsIGN1cnZpZXcgbWFpbmhlYWRpZCBwaGFzZSBjb21taXRyb3cKKyAgICBnbG9iYWwgY3VydmlldyBtYWluaGVhZGlkCiAKLSAgICBpZiB7W2luZm8gZXhpc3RzIGNvbW1pdHJvdygkY3VydmlldywkbWFpbmhlYWRpZCldICYmCi0JKCRwaGFzZSBlcSB7fSB8fCAkY29tbWl0cm93KCRjdXJ2aWV3LCRtYWluaGVhZGlkKSA8ICRudW1jb21taXRzIC0gMSl9IHsKKyAgICBpZiB7JG1haW5oZWFkaWQgZXEge319IHJldHVybgorICAgIGlmIHtbY29tbWl0aW52aWV3ICRtYWluaGVhZGlkICRjdXJ2aWV3XX0gewogCWRvZGlmZmluZGV4Ci0gICAgfSBlbHNlaWYgeyRwaGFzZSBuZSB7fX0gewotCWxhcHBlbmQgY29tbWl0aW50ZXJlc3QoJG1haW5oZWFkaWQpIHt9CisgICAgfSBlbHNlIHsKKwlsYXBwZW5kIGNvbW1pdGludGVyZXN0KCRtYWluaGVhZGlkKSB7ZG9kaWZmaW5kZXh9CiAgICAgfQogfQogCiBwcm9jIGRvaGlkZWxvY2FsY2hhbmdlcyB7fSB7Ci0gICAgZ2xvYmFsIGxvY2FsZnJvdyBsb2NhbGlyb3cgbHNlcmlhbAorICAgIGdsb2JhbCBudWxsaWQgbnVsbGlkMiBsc2VyaWFsIGN1cnZpZXcKIAotICAgIGlmIHskbG9jYWxmcm93ID49IDB9IHsKLQlyZW1vdmVyb3cgJGxvY2FsZnJvdwotCXNldCBsb2NhbGZyb3cgLTEKLQlpZiB7JGxvY2FsaXJvdyA+IDB9IHsKLQkgICAgaW5jciBsb2NhbGlyb3cgLTEKLQl9CisgICAgaWYge1tjb21taXRpbnZpZXcgJG51bGxpZCAkY3Vydmlld119IHsKKwlyZW1vdmVmYWtlcm93ICRudWxsaWQKICAgICB9Ci0gICAgaWYgeyRsb2NhbGlyb3cgPj0gMH0gewotCXJlbW92ZXJvdyAkbG9jYWxpcm93Ci0Jc2V0IGxvY2FsaXJvdyAtMQorICAgIGlmIHtbY29tbWl0aW52aWV3ICRudWxsaWQyICRjdXJ2aWV3XX0geworCXJlbW92ZWZha2Vyb3cgJG51bGxpZDIKICAgICB9CiAgICAgaW5jciBsc2VyaWFsCiB9CiAKICMgc3Bhd24gb2ZmIGEgcHJvY2VzcyB0byBkbyBnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCBIRUFECiBwcm9jIGRvZGlmZmluZGV4IHt9IHsKLSAgICBnbG9iYWwgbG9jYWxpcm93IGxvY2FsZnJvdyBsc2VyaWFsIHNob3dsb2NhbGNoYW5nZXMKKyAgICBnbG9iYWwgbHNlcmlhbCBzaG93bG9jYWxjaGFuZ2VzCiAgICAgZ2xvYmFsIGlzd29ya3RyZWUKIAogICAgIGlmIHshJHNob3dsb2NhbGNoYW5nZXMgfHwgISRpc3dvcmt0cmVlfSByZXR1cm4KICAgICBpbmNyIGxzZXJpYWwKLSAgICBzZXQgbG9jYWxmcm93IC0xCi0gICAgc2V0IGxvY2FsaXJvdyAtMQogICAgIHNldCBmZCBbb3BlbiAifGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIEhFQUQiIHJdCiAgICAgZmNvbmZpZ3VyZSAkZmQgLWJsb2NraW5nIDAKICAgICBmaWxlcnVuICRmZCBbbGlzdCByZWFkZGlmZmluZGV4ICRmZCAkbHNlcmlhbF0KIH0KIAogcHJvYyByZWFkZGlmZmluZGV4IHtmZCBzZXJpYWx9IHsKLSAgICBnbG9iYWwgbG9jYWxpcm93IGNvbW1pdHJvdyBtYWluaGVhZGlkIG51bGxpZDIgY3VydmlldwotICAgIGdsb2JhbCBjb21taXRpbmZvIGNvbW1pdGRhdGEgbHNlcmlhbAorICAgIGdsb2JhbCBtYWluaGVhZGlkIG51bGxpZCBudWxsaWQyIGN1cnZpZXcgY29tbWl0aW5mbyBjb21taXRkYXRhIGxzZXJpYWwKIAogICAgIHNldCBpc2RpZmYgMQogICAgIGlmIHtbZ2V0cyAkZmQgbGluZV0gPCAwfSB7CkBAIC0yOTExLDI2ICs0MDY0LDMyIEBACiAgICAgIyB3ZSBvbmx5IG5lZWQgdG8gc2VlIG9uZSBsaW5lIGFuZCB3ZSBkb24ndCByZWFsbHkgY2FyZSB3aGF0IGl0IHNheXMuLi4KICAgICBjbG9zZSAkZmQKIAotICAgICMgbm93IHNlZSBpZiB0aGVyZSBhcmUgYW55IGxvY2FsIGNoYW5nZXMgbm90IGNoZWNrZWQgaW4gdG8gdGhlIGluZGV4Ci0gICAgaWYgeyRzZXJpYWwgPT0gJGxzZXJpYWx9IHsKLQlzZXQgZmQgW29wZW4gInxnaXQgZGlmZi1maWxlcyIgcl0KLQlmY29uZmlndXJlICRmZCAtYmxvY2tpbmcgMAotCWZpbGVydW4gJGZkIFtsaXN0IHJlYWRkaWZmZmlsZXMgJGZkICRzZXJpYWxdCisgICAgaWYgeyRzZXJpYWwgIT0gJGxzZXJpYWx9IHsKKwlyZXR1cm4gMAogICAgIH0KIAotICAgIGlmIHskaXNkaWZmICYmICRzZXJpYWwgPT0gJGxzZXJpYWwgJiYgJGxvY2FsaXJvdyA9PSAtMX0geworICAgICMgbm93IHNlZSBpZiB0aGVyZSBhcmUgYW55IGxvY2FsIGNoYW5nZXMgbm90IGNoZWNrZWQgaW4gdG8gdGhlIGluZGV4CisgICAgc2V0IGZkIFtvcGVuICJ8Z2l0IGRpZmYtZmlsZXMiIHJdCisgICAgZmNvbmZpZ3VyZSAkZmQgLWJsb2NraW5nIDAKKyAgICBmaWxlcnVuICRmZCBbbGlzdCByZWFkZGlmZmZpbGVzICRmZCAkc2VyaWFsXQorCisgICAgaWYgeyRpc2RpZmYgJiYgIVtjb21taXRpbnZpZXcgJG51bGxpZDIgJGN1cnZpZXddfSB7CiAJIyBhZGQgdGhlIGxpbmUgZm9yIHRoZSBjaGFuZ2VzIGluIHRoZSBpbmRleCB0byB0aGUgZ3JhcGgKLQlzZXQgbG9jYWxpcm93ICRjb21taXRyb3coJGN1cnZpZXcsJG1haW5oZWFkaWQpCiAJc2V0IGhsIFttYyAiTG9jYWwgY2hhbmdlcyBjaGVja2VkIGluIHRvIGluZGV4IGJ1dCBub3QgY29tbWl0dGVkIl0KIAlzZXQgY29tbWl0aW5mbygkbnVsbGlkMikgW2xpc3QgICRobCB7fSB7fSB7fSB7fSAiICAgICRobFxuIl0KIAlzZXQgY29tbWl0ZGF0YSgkbnVsbGlkMikgIlxuICAgICRobFxuIgotCWluc2VydHJvdyAkbG9jYWxpcm93ICRudWxsaWQyCisJaWYge1tjb21taXRpbnZpZXcgJG51bGxpZCAkY3Vydmlld119IHsKKwkgICAgcmVtb3ZlZmFrZXJvdyAkbnVsbGlkCisJfQorCWluc2VydGZha2Vyb3cgJG51bGxpZDIgJG1haW5oZWFkaWQKKyAgICB9IGVsc2VpZiB7ISRpc2RpZmYgJiYgW2NvbW1pdGludmlldyAkbnVsbGlkMiAkY3Vydmlld119IHsKKwlyZW1vdmVmYWtlcm93ICRudWxsaWQyCiAgICAgfQogICAgIHJldHVybiAwCiB9CiAKIHByb2MgcmVhZGRpZmZmaWxlcyB7ZmQgc2VyaWFsfSB7Ci0gICAgZ2xvYmFsIGxvY2FsaXJvdyBsb2NhbGZyb3cgY29tbWl0cm93IG1haW5oZWFkaWQgbnVsbGlkIGN1cnZpZXcKKyAgICBnbG9iYWwgbWFpbmhlYWRpZCBudWxsaWQgbnVsbGlkMiBjdXJ2aWV3CiAgICAgZ2xvYmFsIGNvbW1pdGluZm8gY29tbWl0ZGF0YSBsc2VyaWFsCiAKICAgICBzZXQgaXNkaWZmIDEKQEAgLTI5NDMsNTAgKzQxMDIsNTUgQEAKICAgICAjIHdlIG9ubHkgbmVlZCB0byBzZWUgb25lIGxpbmUgYW5kIHdlIGRvbid0IHJlYWxseSBjYXJlIHdoYXQgaXQgc2F5cy4uLgogICAgIGNsb3NlICRmZAogCi0gICAgaWYgeyRpc2RpZmYgJiYgJHNlcmlhbCA9PSAkbHNlcmlhbCAmJiAkbG9jYWxmcm93ID09IC0xfSB7CisgICAgaWYgeyRzZXJpYWwgIT0gJGxzZXJpYWx9IHsKKwlyZXR1cm4gMAorICAgIH0KKworICAgIGlmIHskaXNkaWZmICYmICFbY29tbWl0aW52aWV3ICRudWxsaWQgJGN1cnZpZXddfSB7CiAJIyBhZGQgdGhlIGxpbmUgZm9yIHRoZSBsb2NhbCBkaWZmIHRvIHRoZSBncmFwaAotCWlmIHskbG9jYWxpcm93ID49IDB9IHsKLQkgICAgc2V0IGxvY2FsZnJvdyAkbG9jYWxpcm93Ci0JICAgIGluY3IgbG9jYWxpcm93Ci0JfSBlbHNlIHsKLQkgICAgc2V0IGxvY2FsZnJvdyAkY29tbWl0cm93KCRjdXJ2aWV3LCRtYWluaGVhZGlkKQotCX0KIAlzZXQgaGwgW21jICJMb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzLCBub3QgY2hlY2tlZCBpbiB0byBpbmRleCJdCiAJc2V0IGNvbW1pdGluZm8oJG51bGxpZCkgW2xpc3QgICRobCB7fSB7fSB7fSB7fSAiICAgICRobFxuIl0KIAlzZXQgY29tbWl0ZGF0YSgkbnVsbGlkKSAiXG4gICAgJGhsXG4iCi0JaW5zZXJ0cm93ICRsb2NhbGZyb3cgJG51bGxpZAorCWlmIHtbY29tbWl0aW52aWV3ICRudWxsaWQyICRjdXJ2aWV3XX0geworCSAgICBzZXQgcCAkbnVsbGlkMgorCX0gZWxzZSB7CisJICAgIHNldCBwICRtYWluaGVhZGlkCisJfQorCWluc2VydGZha2Vyb3cgJG51bGxpZCAkcAorICAgIH0gZWxzZWlmIHshJGlzZGlmZiAmJiBbY29tbWl0aW52aWV3ICRudWxsaWQgJGN1cnZpZXddfSB7CisJcmVtb3ZlZmFrZXJvdyAkbnVsbGlkCiAgICAgfQogICAgIHJldHVybiAwCiB9CiAKIHByb2MgbmV4dHVzZSB7aWQgcm93fSB7Ci0gICAgZ2xvYmFsIGNvbW1pdHJvdyBjdXJ2aWV3IGNoaWxkcmVuCisgICAgZ2xvYmFsIGN1cnZpZXcgY2hpbGRyZW4KIAogICAgIGlmIHtbaW5mbyBleGlzdHMgY2hpbGRyZW4oJGN1cnZpZXcsJGlkKV19IHsKIAlmb3JlYWNoIGtpZCAkY2hpbGRyZW4oJGN1cnZpZXcsJGlkKSB7Ci0JICAgIGlmIHshW2luZm8gZXhpc3RzIGNvbW1pdHJvdygkY3Vydmlldywka2lkKV19IHsKKwkgICAgaWYgeyFbY29tbWl0aW52aWV3ICRraWQgJGN1cnZpZXddfSB7CiAJCXJldHVybiAtMQogCSAgICB9Ci0JICAgIGlmIHskY29tbWl0cm93KCRjdXJ2aWV3LCRraWQpID4gJHJvd30gewotCQlyZXR1cm4gJGNvbW1pdHJvdygkY3Vydmlldywka2lkKQorCSAgICBpZiB7W3Jvd29mY29tbWl0ICRraWRdID4gJHJvd30geworCQlyZXR1cm4gW3Jvd29mY29tbWl0ICRraWRdCiAJICAgIH0KIAl9CiAgICAgfQotICAgIGlmIHtbaW5mbyBleGlzdHMgY29tbWl0cm93KCRjdXJ2aWV3LCRpZCldfSB7Ci0JcmV0dXJuICRjb21taXRyb3coJGN1cnZpZXcsJGlkKQorICAgIGlmIHtbY29tbWl0aW52aWV3ICRpZCAkY3Vydmlld119IHsKKwlyZXR1cm4gW3Jvd29mY29tbWl0ICRpZF0KICAgICB9CiAgICAgcmV0dXJuIC0xCiB9CiAKIHByb2MgcHJldnVzZSB7aWQgcm93fSB7Ci0gICAgZ2xvYmFsIGNvbW1pdHJvdyBjdXJ2aWV3IGNoaWxkcmVuCisgICAgZ2xvYmFsIGN1cnZpZXcgY2hpbGRyZW4KIAogICAgIHNldCByZXQgLTEKICAgICBpZiB7W2luZm8gZXhpc3RzIGNoaWxkcmVuKCRjdXJ2aWV3LCRpZCldfSB7CiAJZm9yZWFjaCBraWQgJGNoaWxkcmVuKCRjdXJ2aWV3LCRpZCkgewotCSAgICBpZiB7IVtpbmZvIGV4aXN0cyBjb21taXRyb3coJGN1cnZpZXcsJGtpZCldfSBicmVhawotCSAgICBpZiB7JGNvbW1pdHJvdygkY3Vydmlldywka2lkKSA8ICRyb3d9IHsKLQkJc2V0IHJldCAkY29tbWl0cm93KCRjdXJ2aWV3LCRraWQpCisJICAgIGlmIHshW2NvbW1pdGludmlldyAka2lkICRjdXJ2aWV3XX0gYnJlYWsKKwkgICAgaWYge1tyb3dvZmNvbW1pdCAka2lkXSA8ICRyb3d9IHsKKwkJc2V0IHJldCBbcm93b2Zjb21taXQgJGtpZF0KIAkgICAgfQogCX0KICAgICB9CkBAIC0yOTk1LDcgKzQxNTksNyBAQAogCiBwcm9jIG1ha2VfaWRsaXN0IHtyb3d9IHsKICAgICBnbG9iYWwgZGlzcGxheW9yZGVyIHBhcmVudGxpc3QgdXBhcnJvd2xlbiBkb3duYXJyb3dsZW4gbWluZ2FwbGVuCi0gICAgZ2xvYmFsIGNvbW1pdGlkeCBjdXJ2aWV3IG9yZGVydG9rIGNoaWxkcmVuIGNvbW1pdHJvdworICAgIGdsb2JhbCBjb21taXRpZHggY3VydmlldyBjaGlsZHJlbgogCiAgICAgc2V0IHIgW2V4cHIgeyRyb3cgLSAkbWluZ2FwbGVuIC0gJGRvd25hcnJvd2xlbiAtIDF9XQogICAgIGlmIHskciA8IDB9IHsKQEAgLTMwMDksNiArNDE3Myw3IEBACiAgICAgaWYgeyRyYiA+ICRjb21taXRpZHgoJGN1cnZpZXcpfSB7CiAJc2V0IHJiICRjb21taXRpZHgoJGN1cnZpZXcpCiAgICAgfQorICAgIG1ha2VfZGlzcG9yZGVyICRyIFtleHByIHskcmIgKyAxfV0KICAgICBzZXQgaWRzIHt9CiAgICAgZm9yIHt9IHskciA8ICRyYX0ge2luY3Igcn0gewogCXNldCBuZXh0aWQgW2xpbmRleCAkZGlzcGxheW9yZGVyIFtleHByIHskciArIDF9XV0KQEAgLTMwMTcsNyArNDE4Miw3IEBACiAJICAgIHNldCBybiBbbmV4dHVzZSAkcCAkcl0KIAkgICAgaWYgeyRybiA+PSAkcm93ICYmCiAJCSRybiA8PSAkciArICRkb3duYXJyb3dsZW4gKyAkbWluZ2FwbGVuICsgJHVwYXJyb3dsZW59IHsKLQkJbGFwcGVuZCBpZHMgW2xpc3QgJG9yZGVydG9rKCRjdXJ2aWV3LCRwKSAkcF0KKwkJbGFwcGVuZCBpZHMgW2xpc3QgW29yZGVydG9rZW4gJHBdICRwXQogCSAgICB9CiAJfQogICAgIH0KQEAgLTMwMjcsMjUgKzQxOTIsMjUgQEAKIAkgICAgaWYgeyRwIGVxICRuZXh0aWR9IGNvbnRpbnVlCiAJICAgIHNldCBybiBbbmV4dHVzZSAkcCAkcl0KIAkgICAgaWYgeyRybiA8IDAgfHwgJHJuID49ICRyb3d9IHsKLQkJbGFwcGVuZCBpZHMgW2xpc3QgJG9yZGVydG9rKCRjdXJ2aWV3LCRwKSAkcF0KKwkJbGFwcGVuZCBpZHMgW2xpc3QgW29yZGVydG9rZW4gJHBdICRwXQogCSAgICB9CiAJfQogICAgIH0KICAgICBzZXQgaWQgW2xpbmRleCAkZGlzcGxheW9yZGVyICRyb3ddCi0gICAgbGFwcGVuZCBpZHMgW2xpc3QgJG9yZGVydG9rKCRjdXJ2aWV3LCRpZCkgJGlkXQorICAgIGxhcHBlbmQgaWRzIFtsaXN0IFtvcmRlcnRva2VuICRpZF0gJGlkXQogICAgIHdoaWxlIHskciA8ICRyYn0gewogCWZvcmVhY2ggcCBbbGluZGV4ICRwYXJlbnRsaXN0ICRyXSB7CiAJICAgIHNldCBmaXJzdGtpZCBbbGluZGV4ICRjaGlsZHJlbigkY3VydmlldywkcCkgMF0KLQkgICAgaWYgeyRjb21taXRyb3coJGN1cnZpZXcsJGZpcnN0a2lkKSA8ICRyb3d9IHsKLQkJbGFwcGVuZCBpZHMgW2xpc3QgJG9yZGVydG9rKCRjdXJ2aWV3LCRwKSAkcF0KKwkgICAgaWYge1tyb3dvZmNvbW1pdCAkZmlyc3RraWRdIDwgJHJvd30geworCQlsYXBwZW5kIGlkcyBbbGlzdCBbb3JkZXJ0b2tlbiAkcF0gJHBdCiAJICAgIH0KIAl9CiAJaW5jciByCiAJc2V0IGlkIFtsaW5kZXggJGRpc3BsYXlvcmRlciAkcl0KIAlpZiB7JGlkIG5lIHt9fSB7CiAJICAgIHNldCBmaXJzdGtpZCBbbGluZGV4ICRjaGlsZHJlbigkY3VydmlldywkaWQpIDBdCi0JICAgIGlmIHskZmlyc3RraWQgbmUge30gJiYgJGNvbW1pdHJvdygkY3VydmlldywkZmlyc3RraWQpIDwgJHJvd30gewotCQlsYXBwZW5kIGlkcyBbbGlzdCAkb3JkZXJ0b2soJGN1cnZpZXcsJGlkKSAkaWRdCisJICAgIGlmIHskZmlyc3RraWQgbmUge30gJiYgW3Jvd29mY29tbWl0ICRmaXJzdGtpZF0gPCAkcm93fSB7CisJCWxhcHBlbmQgaWRzIFtsaXN0IFtvcmRlcnRva2VuICRpZF0gJGlkXQogCSAgICB9CiAJfQogICAgIH0KQEAgLTMwOTEsOCArNDI1Niw5IEBACiAgICAgZ2xvYmFsIHJvd2lkbGlzdCByb3dpc29wdCByb3dmaW5hbCBkaXNwbGF5b3JkZXIKICAgICBnbG9iYWwgdXBhcnJvd2xlbiBkb3duYXJyb3dsZW4gbWF4d2lkdGggbWluZ2FwbGVuCiAgICAgZ2xvYmFsIGNoaWxkcmVuIHBhcmVudGxpc3QKLSAgICBnbG9iYWwgY29tbWl0aWR4IHZpZXdjb21wbGV0ZSBjdXJ2aWV3IGNvbW1pdHJvdworICAgIGdsb2JhbCBjb21taXRpZHggdmlld2NvbXBsZXRlIGN1cnZpZXcKIAorICAgIG1ha2VfZGlzcG9yZGVyIFtleHByIHskcm93IC0gMX1dIFtleHByIHskZW5kcm93ICsgJHVwYXJyb3dsZW59XQogICAgIHNldCBpZGxpc3Qge30KICAgICBpZiB7JHJvdyA+IDB9IHsKIAlzZXQgcm0xIFtleHByIHskcm93IC0gMX1dCkBAIC0zMTQ4LDcgKzQzMTQsNyBAQAogCQlmb3JlYWNoIHAgW2xpbmRleCAkcGFyZW50bGlzdCAkcl0gewogCQkgICAgaWYge1tsc2VhcmNoIC1leGFjdCAkaWRsaXN0ICRwXSA+PSAwfSBjb250aW51ZQogCQkgICAgc2V0IGZrIFtsaW5kZXggJGNoaWxkcmVuKCRjdXJ2aWV3LCRwKSAwXQotCQkgICAgaWYgeyRjb21taXRyb3coJGN1cnZpZXcsJGZrKSA8ICRyb3d9IHsKKwkJICAgIGlmIHtbcm93b2Zjb21taXQgJGZrXSA8ICRyb3d9IHsKIAkJCXNldCB4IFtpZGNvbCAkaWRsaXN0ICRwICR4XQogCQkJc2V0IGlkbGlzdCBbbGluc2VydCAkaWRsaXN0ICR4ICRwXQogCQkgICAgfQpAQCAtMzE1Nyw3ICs0MzIzLDcgQEAKIAkJICAgIHNldCBwIFtsaW5kZXggJGRpc3BsYXlvcmRlciAkcl0KIAkJICAgIGlmIHtbbHNlYXJjaCAtZXhhY3QgJGlkbGlzdCAkcF0gPCAwfSB7CiAJCQlzZXQgZmsgW2xpbmRleCAkY2hpbGRyZW4oJGN1cnZpZXcsJHApIDBdCi0JCQlpZiB7JGZrIG5lIHt9ICYmICRjb21taXRyb3coJGN1cnZpZXcsJGZrKSA8ICRyb3d9IHsKKwkJCWlmIHskZmsgbmUge30gJiYgW3Jvd29mY29tbWl0ICRma10gPCAkcm93fSB7CiAJCQkgICAgc2V0IHggW2lkY29sICRpZGxpc3QgJHAgJHhdCiAJCQkgICAgc2V0IGlkbGlzdCBbbGluc2VydCAkaWRsaXN0ICR4ICRwXQogCQkJfQpAQCAtMzM3Miw3ICs0NTM4LDcgQEAKIH0KIAogcHJvYyByb3dyYW5nZXMge2lkfSB7Ci0gICAgZ2xvYmFsIGNvbW1pdHJvdyBjdXJ2aWV3IGNoaWxkcmVuIHVwYXJyb3dsZW4gZG93bmFycm93bGVuCisgICAgZ2xvYmFsIGN1cnZpZXcgY2hpbGRyZW4gdXBhcnJvd2xlbiBkb3duYXJyb3dsZW4KICAgICBnbG9iYWwgcm93aWRsaXN0CiAKICAgICBzZXQga2lkcyAkY2hpbGRyZW4oJGN1cnZpZXcsJGlkKQpAQCAtMzM4MiwxMyArNDU0OCwxMyBAQAogICAgIHNldCByZXQge30KICAgICBsYXBwZW5kIGtpZHMgJGlkCiAgICAgZm9yZWFjaCBjaGlsZCAka2lkcyB7Ci0JaWYgeyFbaW5mbyBleGlzdHMgY29tbWl0cm93KCRjdXJ2aWV3LCRjaGlsZCldfSBicmVhawotCXNldCByb3cgJGNvbW1pdHJvdygkY3VydmlldywkY2hpbGQpCisJaWYgeyFbY29tbWl0aW52aWV3ICRjaGlsZCAkY3Vydmlld119IGJyZWFrCisJc2V0IHJvdyBbcm93b2Zjb21taXQgJGNoaWxkXQogCWlmIHshW2luZm8gZXhpc3RzIHByZXZdfSB7CiAJICAgIGxhcHBlbmQgcmV0IFtleHByIHskcm93ICsgMX1dCiAJfSBlbHNlIHsKIAkgICAgaWYgeyRyb3cgPD0gJHByZXZyb3d9IHsKLQkJcHV0cyAib29wcyBjaGlsZHJlbiBvdXQgb2Ygb3JkZXIgW3Nob3J0aWRzICRpZF0gJHJvdyA8IFtzaG9ydGlkcyAkcHJldl0gJHByZXZyb3ciCisJCXB1dHMgIm9vcHMgY2hpbGRyZW4gb2YgW3Nob3J0aWRzICRpZF0gb3V0IG9mIG9yZGVyIFtzaG9ydGlkcyAkY2hpbGRdICRyb3cgPD0gW3Nob3J0aWRzICRwcmV2XSAkcHJldnJvdyIKIAkgICAgfQogCSAgICAjIHNlZSBpZiB0aGUgbGluZSBleHRlbmRzIHRoZSB3aG9sZSB3YXkgZnJvbSBwcmV2cm93IHRvIHJvdwogCSAgICBpZiB7JHJvdyA+ICRwcmV2cm93ICsgJHVwYXJyb3dsZW4gKyAkZG93bmFycm93bGVuICYmCkBAIC0zNDIxLDcgKzQ1ODcsNyBAQAogCWlmIHskY2hpbGQgZXEgJGlkfSB7CiAJICAgIGxhcHBlbmQgcmV0ICRyb3cKIAl9Ci0Jc2V0IHByZXYgJGlkCisJc2V0IHByZXYgJGNoaWxkCiAJc2V0IHByZXZyb3cgJHJvdwogICAgIH0KICAgICByZXR1cm4gJHJldApAQCAtMzY2OSwyMCArNDgzNSwyMyBAQAogfQogCiBwcm9jIGRyYXdjbWl0dGV4dCB7aWQgcm93IGNvbH0gewotICAgIGdsb2JhbCBsaW5lc3BjIGNhbnYgY2FudjIgY2FudjMgY2FudnkwIGZnY29sb3IgY3VydmlldwotICAgIGdsb2JhbCBjb21taXRsaXN0ZWQgY29tbWl0aW5mbyByb3dpZGxpc3QgcGFyZW50bGlzdAorICAgIGdsb2JhbCBsaW5lc3BjIGNhbnYgY2FudjIgY2FudjMgZmdjb2xvciBjdXJ2aWV3CisgICAgZ2xvYmFsIGNtaXRsaXN0ZWQgY29tbWl0aW5mbyByb3dpZGxpc3QgcGFyZW50bGlzdAogICAgIGdsb2JhbCByb3d0ZXh0eCBpZHBvcyBpZHRhZ3MgaWRoZWFkcyBpZG90aGVycmVmcwogICAgIGdsb2JhbCBsaW5laHRhZyBsaW5lbnRhZyBsaW5lZHRhZyBzZWxlY3RlZGxpbmUKLSAgICBnbG9iYWwgY2FudnhtYXggYm9sZHJvd3MgYm9sZG5hbWVyb3dzIGZnY29sb3IgbnVsbGlkIG51bGxpZDIKKyAgICBnbG9iYWwgY2FudnhtYXggYm9sZHJvd3MgYm9sZG5hbWVyb3dzIGZnY29sb3IKKyAgICBnbG9iYWwgbWFpbmhlYWRpZCBudWxsaWQgbnVsbGlkMiBjaXJjbGVpdGVtIGNpcmNsZWNvbG9ycwogCiAgICAgIyBsaXN0ZWQgaXMgMCBmb3IgYm91bmRhcnksIDEgZm9yIG5vcm1hbCwgMiBmb3IgbmVnYXRpdmUsIDMgZm9yIGxlZnQsIDQgZm9yIHJpZ2h0Ci0gICAgc2V0IGxpc3RlZCBbbGluZGV4ICRjb21taXRsaXN0ZWQgJHJvd10KKyAgICBzZXQgbGlzdGVkICRjbWl0bGlzdGVkKCRjdXJ2aWV3LCRpZCkKICAgICBpZiB7JGlkIGVxICRudWxsaWR9IHsKIAlzZXQgb2ZpbGwgcmVkCiAgICAgfSBlbHNlaWYgeyRpZCBlcSAkbnVsbGlkMn0gewogCXNldCBvZmlsbCBncmVlbgorICAgIH0gZWxzZWlmIHskaWQgZXEgJG1haW5oZWFkaWR9IHsKKwlzZXQgb2ZpbGwgeWVsbG93CiAgICAgfSBlbHNlIHsKLQlzZXQgb2ZpbGwgW2V4cHIgeyRsaXN0ZWQgIT0gMCA/ICRsaXN0ZWQgPT0gMiA/ICJncmF5IiA6ICJibHVlIiA6ICJ3aGl0ZSJ9XQorCXNldCBvZmlsbCBbbGluZGV4ICRjaXJjbGVjb2xvcnMgJGxpc3RlZF0KICAgICB9CiAgICAgc2V0IHggW3hjICRyb3cgJGNvbF0KICAgICBzZXQgeSBbeWMgJHJvd10KQEAgLTM3MDYsNiArNDg3NSw3IEBACiAJCSAgIFtleHByIHskeCAtICRvcmFkfV0gW2V4cHIgeyR5ICsgJG9yYWQgLSAxfV0gXAogCQkgICAtZmlsbCAkb2ZpbGwgLW91dGxpbmUgJGZnY29sb3IgLXdpZHRoIDEgLXRhZ3MgY2lyY2xlXQogICAgIH0KKyAgICBzZXQgY2lyY2xlaXRlbSgkcm93KSAkdAogICAgICRjYW52IHJhaXNlICR0CiAgICAgJGNhbnYgYmluZCAkdCA8MT4ge3NlbGNhbnZsaW5lIHt9ICV4ICV5fQogICAgIHNldCBybXggW2xsZW5ndGggW2xpbmRleCAkcm93aWRsaXN0ICRyb3ddXQpAQCAtMzczMiw3ICs0OTAyLDcgQEAKICAgICBzZXQgZGF0ZSBbZm9ybWF0ZGF0ZSAkZGF0ZV0KICAgICBzZXQgZm9udCBtYWluZm9udAogICAgIHNldCBuZm9udCBtYWluZm9udAotICAgIHNldCBpc2JvbGQgW2lzaGlnaGxpZ2h0ZWQgJHJvd10KKyAgICBzZXQgaXNib2xkIFtpc2hpZ2hsaWdodGVkICRpZF0KICAgICBpZiB7JGlzYm9sZCA+IDB9IHsKIAlsYXBwZW5kIGJvbGRyb3dzICRyb3cKIAlzZXQgZm9udCBtYWluZm9udGJvbGQKQEAgLTM3NDgsNyArNDkxOCw3IEBACiAJCQkgICAgLXRleHQgJG5hbWUgLWZvbnQgJG5mb250IC10YWdzIHRleHRdCiAgICAgc2V0IGxpbmVkdGFnKCRyb3cpIFskY2FudjMgY3JlYXRlIHRleHQgMyAkeSAtYW5jaG9yIHcgLWZpbGwgJGZnY29sb3IgXAogCQkJICAgIC10ZXh0ICRkYXRlIC1mb250IG1haW5mb250IC10YWdzIHRleHRdCi0gICAgaWYge1tpbmZvIGV4aXN0cyBzZWxlY3RlZGxpbmVdICYmICRzZWxlY3RlZGxpbmUgPT0gJHJvd30geworICAgIGlmIHskc2VsZWN0ZWRsaW5lID09ICRyb3d9IHsKIAltYWtlX3NlY3NlbCAkcm93CiAgICAgfQogICAgIHNldCB4ciBbZXhwciB7JHh0ICsgW2ZvbnQgbWVhc3VyZSAkZm9udCAkaGVhZGxpbmVdfV0KQEAgLTM3NjEsNyArNDkzMSw3IEBACiBwcm9jIGRyYXdjbWl0cm93IHtyb3d9IHsKICAgICBnbG9iYWwgZGlzcGxheW9yZGVyIHJvd2lkbGlzdCBucm93c19kcmF3bgogICAgIGdsb2JhbCBpZGRyYXduIG1hcmtpbmdtYXRjaGVzCi0gICAgZ2xvYmFsIGNvbW1pdGluZm8gcGFyZW50bGlzdCBudW1jb21taXRzCisgICAgZ2xvYmFsIGNvbW1pdGluZm8gbnVtY29tbWl0cwogICAgIGdsb2JhbCBmaWxlaGlnaGxpZ2h0IGZoaWdobGlnaHRzIGZpbmRwYXR0ZXJuIG5oaWdobGlnaHRzCiAgICAgZ2xvYmFsIGhsdmlldyB2aGlnaGxpZ2h0cwogICAgIGdsb2JhbCBoaWdobGlnaHRfcmVsYXRlZCByaGlnaGxpZ2h0cwpAQCAtMzc2OSwxNiArNDkzOSwxNiBAQAogICAgIGlmIHskcm93ID49ICRudW1jb21taXRzfSByZXR1cm4KIAogICAgIHNldCBpZCBbbGluZGV4ICRkaXNwbGF5b3JkZXIgJHJvd10KLSAgICBpZiB7W2luZm8gZXhpc3RzIGhsdmlld10gJiYgIVtpbmZvIGV4aXN0cyB2aGlnaGxpZ2h0cygkcm93KV19IHsKKyAgICBpZiB7W2luZm8gZXhpc3RzIGhsdmlld10gJiYgIVtpbmZvIGV4aXN0cyB2aGlnaGxpZ2h0cygkaWQpXX0gewogCWFza3ZoaWdobGlnaHQgJHJvdyAkaWQKICAgICB9Ci0gICAgaWYge1tpbmZvIGV4aXN0cyBmaWxlaGlnaGxpZ2h0XSAmJiAhW2luZm8gZXhpc3RzIGZoaWdobGlnaHRzKCRyb3cpXX0geworICAgIGlmIHtbaW5mbyBleGlzdHMgZmlsZWhpZ2hsaWdodF0gJiYgIVtpbmZvIGV4aXN0cyBmaGlnaGxpZ2h0cygkaWQpXX0gewogCWFza2ZpbGVoaWdobGlnaHQgJHJvdyAkaWQKICAgICB9Ci0gICAgaWYgeyRmaW5kcGF0dGVybiBuZSB7fSAmJiAhW2luZm8gZXhpc3RzIG5oaWdobGlnaHRzKCRyb3cpXX0geworICAgIGlmIHskZmluZHBhdHRlcm4gbmUge30gJiYgIVtpbmZvIGV4aXN0cyBuaGlnaGxpZ2h0cygkaWQpXX0gewogCWFza2ZpbmRoaWdobGlnaHQgJHJvdyAkaWQKICAgICB9Ci0gICAgaWYgeyRoaWdobGlnaHRfcmVsYXRlZCBuZSBbbWMgIk5vbmUiXSAmJiAhW2luZm8gZXhpc3RzIHJoaWdobGlnaHRzKCRyb3cpXX0geworICAgIGlmIHskaGlnaGxpZ2h0X3JlbGF0ZWQgbmUgW21jICJOb25lIl0gJiYgIVtpbmZvIGV4aXN0cyByaGlnaGxpZ2h0cygkaWQpXX0gewogCWFza3JlbGhpZ2hsaWdodCAkcm93ICRpZAogICAgIH0KICAgICBpZiB7IVtpbmZvIGV4aXN0cyBpZGRyYXduKCRpZCldfSB7CkBAIC0zODgxLDMwICs1MDUxLDkyIEBACiAgICAgfQogfQogCi1wcm9jIGRyYXdmcmFjIHtmMCBmMX0gewotICAgIGdsb2JhbCBjYW52IGxpbmVzcGMKK3Byb2MgdW5kb2xheW91dCB7cm93fSB7CisgICAgZ2xvYmFsIHVwYXJyb3dsZW4gbWluZ2FwbGVuIGRvd25hcnJvd2xlbgorICAgIGdsb2JhbCByb3dpZGxpc3Qgcm93aXNvcHQgcm93ZmluYWwgbmVlZF9yZWRpc3BsYXkKIAotICAgIHNldCB5bWF4IFtsaW5kZXggWyRjYW52IGNnZXQgLXNjcm9sbHJlZ2lvbl0gM10KLSAgICBpZiB7JHltYXggZXEge30gfHwgJHltYXggPT0gMH0gcmV0dXJuCi0gICAgc2V0IHkwIFtleHByIHtpbnQoJGYwICogJHltYXgpfV0KLSAgICBzZXQgcm93IFtleHByIHtpbnQoKCR5MCAtIDMpIC8gJGxpbmVzcGMpIC0gMX1dCi0gICAgc2V0IHkxIFtleHByIHtpbnQoJGYxICogJHltYXgpfV0KLSAgICBzZXQgZW5kcm93IFtleHByIHtpbnQoKCR5MSAtIDMpIC8gJGxpbmVzcGMpICsgMX1dCi0gICAgZHJhd2NvbW1pdHMgJHJvdyAkZW5kcm93CisgICAgc2V0IHIgW2V4cHIgeyRyb3cgLSAoJHVwYXJyb3dsZW4gKyAkbWluZ2FwbGVuICsgJGRvd25hcnJvd2xlbil9XQorICAgIGlmIHskciA8IDB9IHsKKwlzZXQgciAwCisgICAgfQorICAgIGlmIHtbbGxlbmd0aCAkcm93aWRsaXN0XSA+ICRyfSB7CisJaW5jciByIC0xCisJc2V0IHJvd2lkbGlzdCBbbHJhbmdlICRyb3dpZGxpc3QgMCAkcl0KKwlzZXQgcm93ZmluYWwgW2xyYW5nZSAkcm93ZmluYWwgMCAkcl0KKwlzZXQgcm93aXNvcHQgW2xyYW5nZSAkcm93aXNvcHQgMCAkcl0KKwlzZXQgbmVlZF9yZWRpc3BsYXkgMQorCXJ1biBkcmF3dmlzaWJsZQorICAgIH0KIH0KIAogcHJvYyBkcmF3dmlzaWJsZSB7fSB7Ci0gICAgZ2xvYmFsIGNhbnYKLSAgICBldmFsIGRyYXdmcmFjIFskY2FudiB5dmlld10KKyAgICBnbG9iYWwgY2FudiBsaW5lc3BjIGN1cnZpZXcgdnJvd21vZCBzZWxlY3RlZGxpbmUgdGFyZ2V0cm93IHRhcmdldGlkCisgICAgZ2xvYmFsIG5lZWRfcmVkaXNwbGF5IGNzY3JvbGwgbnVtY29tbWl0cworCisgICAgc2V0IGZzIFskY2FudiB5dmlld10KKyAgICBzZXQgeW1heCBbbGluZGV4IFskY2FudiBjZ2V0IC1zY3JvbGxyZWdpb25dIDNdCisgICAgaWYgeyR5bWF4IGVxIHt9IHx8ICR5bWF4ID09IDAgfHwgJG51bWNvbW1pdHMgPT0gMH0gcmV0dXJuCisgICAgc2V0IGYwIFtsaW5kZXggJGZzIDBdCisgICAgc2V0IGYxIFtsaW5kZXggJGZzIDFdCisgICAgc2V0IHkwIFtleHByIHtpbnQoJGYwICogJHltYXgpfV0KKyAgICBzZXQgeTEgW2V4cHIge2ludCgkZjEgKiAkeW1heCl9XQorCisgICAgaWYge1tpbmZvIGV4aXN0cyB0YXJnZXRpZF19IHsKKwlpZiB7W2NvbW1pdGludmlldyAkdGFyZ2V0aWQgJGN1cnZpZXddfSB7CisJICAgIHNldCByIFtyb3dvZmNvbW1pdCAkdGFyZ2V0aWRdCisJICAgIGlmIHskciAhPSAkdGFyZ2V0cm93fSB7CisJCSMgRml4IHVwIHRoZSBzY3JvbGxyZWdpb24gYW5kIGNoYW5nZSB0aGUgc2Nyb2xsaW5nIHBvc2l0aW9uCisJCSMgbm93IHRoYXQgb3VyIHRhcmdldCByb3cgaGFzIG1vdmVkLgorCQlzZXQgZGlmZiBbZXhwciB7KCRyIC0gJHRhcmdldHJvdykgKiAkbGluZXNwY31dCisJCXNldCB0YXJnZXRyb3cgJHIKKwkJc2V0Y2FudnNjcm9sbAorCQlzZXQgeW1heCBbbGluZGV4IFskY2FudiBjZ2V0IC1zY3JvbGxyZWdpb25dIDNdCisJCWluY3IgeTAgJGRpZmYKKwkJaW5jciB5MSAkZGlmZgorCQlzZXQgZjAgW2V4cHIgeyR5MCAvICR5bWF4fV0KKwkJc2V0IGYxIFtleHByIHskeTEgLyAkeW1heH1dCisJCWFsbGNhbnZzIHl2aWV3IG1vdmV0byAkZjAKKwkJJGNzY3JvbGwgc2V0ICRmMCAkZjEKKwkJc2V0IG5lZWRfcmVkaXNwbGF5IDEKKwkgICAgfQorCX0gZWxzZSB7CisJICAgIHVuc2V0IHRhcmdldGlkCisJfQorICAgIH0KKworICAgIHNldCByb3cgW2V4cHIge2ludCgoJHkwIC0gMykgLyAkbGluZXNwYykgLSAxfV0KKyAgICBzZXQgZW5kcm93IFtleHByIHtpbnQoKCR5MSAtIDMpIC8gJGxpbmVzcGMpICsgMX1dCisgICAgaWYgeyRlbmRyb3cgPj0gJHZyb3dtb2QoJGN1cnZpZXcpfSB7CisJdXBkYXRlX2FyY3Jvd3MgJGN1cnZpZXcKKyAgICB9CisgICAgaWYgeyRzZWxlY3RlZGxpbmUgbmUge30gJiYKKwkkcm93IDw9ICRzZWxlY3RlZGxpbmUgJiYgJHNlbGVjdGVkbGluZSA8PSAkZW5kcm93fSB7CisJc2V0IHRhcmdldHJvdyAkc2VsZWN0ZWRsaW5lCisgICAgfSBlbHNlaWYge1tpbmZvIGV4aXN0cyB0YXJnZXRpZF19IHsKKwlzZXQgdGFyZ2V0cm93IFtleHByIHtpbnQoKCRyb3cgKyAkZW5kcm93KSAvIDIpfV0KKyAgICB9CisgICAgaWYge1tpbmZvIGV4aXN0cyB0YXJnZXRyb3ddfSB7CisJaWYgeyR0YXJnZXRyb3cgPj0gJG51bWNvbW1pdHN9IHsKKwkgICAgc2V0IHRhcmdldHJvdyBbZXhwciB7JG51bWNvbW1pdHMgLSAxfV0KKwl9CisJc2V0IHRhcmdldGlkIFtjb21taXRvbnJvdyAkdGFyZ2V0cm93XQorICAgIH0KKyAgICBkcmF3Y29tbWl0cyAkcm93ICRlbmRyb3cKIH0KIAogcHJvYyBjbGVhcl9kaXNwbGF5IHt9IHsKICAgICBnbG9iYWwgaWRkcmF3biBsaW5lc2VncyBuZWVkX3JlZGlzcGxheSBucm93c19kcmF3bgogICAgIGdsb2JhbCB2aGlnaGxpZ2h0cyBmaGlnaGxpZ2h0cyBuaGlnaGxpZ2h0cyByaGlnaGxpZ2h0cworICAgIGdsb2JhbCBsaW5laHRhZyBsaW5lbnRhZyBsaW5lZHRhZyBib2xkcm93cyBib2xkbmFtZXJvd3MKIAogICAgIGFsbGNhbnZzIGRlbGV0ZSBhbGwKICAgICBjYXRjaCB7dW5zZXQgaWRkcmF3bn0KICAgICBjYXRjaCB7dW5zZXQgbGluZXNlZ3N9CisgICAgY2F0Y2gge3Vuc2V0IGxpbmVodGFnfQorICAgIGNhdGNoIHt1bnNldCBsaW5lbnRhZ30KKyAgICBjYXRjaCB7dW5zZXQgbGluZWR0YWd9CisgICAgc2V0IGJvbGRyb3dzIHt9CisgICAgc2V0IGJvbGRuYW1lcm93cyB7fQogICAgIGNhdGNoIHt1bnNldCB2aGlnaGxpZ2h0c30KICAgICBjYXRjaCB7dW5zZXQgZmhpZ2hsaWdodHN9CiAgICAgY2F0Y2gge3Vuc2V0IG5oaWdobGlnaHRzfQpAQCAtMzk1MCw3ICs1MTgyLDcgQEAKIAogcHJvYyBhc3NpZ25jb2xvciB7aWR9IHsKICAgICBnbG9iYWwgY29sb3JtYXAgY29sb3JzIG5leHRjb2xvcgotICAgIGdsb2JhbCBjb21taXRyb3cgcGFyZW50bGlzdCBjaGlsZHJlbiBjaGlsZHJlbiBjdXJ2aWV3CisgICAgZ2xvYmFsIHBhcmVudHMgY2hpbGRyZW4gY2hpbGRyZW4gY3VydmlldwogCiAgICAgaWYge1tpbmZvIGV4aXN0cyBjb2xvcm1hcCgkaWQpXX0gcmV0dXJuCiAgICAgc2V0IG5jb2xvcnMgW2xsZW5ndGggJGNvbG9yc10KQEAgLTM5NjIsNyArNTE5NCw3IEBACiAgICAgaWYge1tsbGVuZ3RoICRraWRzXSA9PSAxfSB7CiAJc2V0IGNoaWxkIFtsaW5kZXggJGtpZHMgMF0KIAlpZiB7W2luZm8gZXhpc3RzIGNvbG9ybWFwKCRjaGlsZCldCi0JICAgICYmIFtsbGVuZ3RoIFtsaW5kZXggJHBhcmVudGxpc3QgJGNvbW1pdHJvdygkY3VydmlldywkY2hpbGQpXV0gPT0gMX0geworCSAgICAmJiBbbGxlbmd0aCAkcGFyZW50cygkY3VydmlldywkY2hpbGQpXSA9PSAxfSB7CiAJICAgIHNldCBjb2xvcm1hcCgkaWQpICRjb2xvcm1hcCgkY2hpbGQpCiAJICAgIHJldHVybgogCX0KQEAgLTM5OTAsNyArNTIyMiw3IEBACiAJCSYmIFtsc2VhcmNoIC1leGFjdCAkYmFkY29sb3JzICRjb2xvcm1hcCgkY2hpbGQpXSA8IDB9IHsKIAkJbGFwcGVuZCBiYWRjb2xvcnMgJGNvbG9ybWFwKCRjaGlsZCkKIAkgICAgfQotCSAgICBmb3JlYWNoIHAgW2xpbmRleCAkcGFyZW50bGlzdCAkY29tbWl0cm93KCRjdXJ2aWV3LCRjaGlsZCldIHsKKwkgICAgZm9yZWFjaCBwICRwYXJlbnRzKCRjdXJ2aWV3LCRjaGlsZCkgewogCQlpZiB7W2luZm8gZXhpc3RzIGNvbG9ybWFwKCRwKV0KIAkJICAgICYmIFtsc2VhcmNoIC1leGFjdCAkYmFkY29sb3JzICRjb2xvcm1hcCgkcCldIDwgMH0gewogCQkgICAgbGFwcGVuZCBiYWRjb2xvcnMgJGNvbG9ybWFwKCRwKQpAQCAtNDAyMyw3ICs1MjU1LDcgQEAKIHByb2MgZHJhd3RhZ3Mge2lkIHggeHQgeTF9IHsKICAgICBnbG9iYWwgaWR0YWdzIGlkaGVhZHMgaWRvdGhlcnJlZnMgbWFpbmhlYWQKICAgICBnbG9iYWwgbGluZXNwYyBsdGhpY2tuZXNzCi0gICAgZ2xvYmFsIGNhbnYgY29tbWl0cm93IHJvd3RleHR4IGN1cnZpZXcgZmdjb2xvciBiZ2NvbG9yCisgICAgZ2xvYmFsIGNhbnYgcm93dGV4dHggY3VydmlldyBmZ2NvbG9yIGJnY29sb3IKIAogICAgIHNldCBtYXJrcyB7fQogICAgIHNldCBudGFncyAwCkBAIC00MDczLDcgKzUzMDUsNyBAQAogCQkgICAgICAgJHhyICR5dCAkeHIgJHliICR4bCAkeWIgJHggW2V4cHIgeyR5YiAtICRkZWx0YX1dIFwKIAkJICAgICAgIC13aWR0aCAxIC1vdXRsaW5lIGJsYWNrIC1maWxsIHllbGxvdyAtdGFncyB0YWcuJGlkXQogCSAgICAkY2FudiBiaW5kICR0IDwxPiBbbGlzdCBzaG93dGFnICR0YWcgMV0KLQkgICAgc2V0IHJvd3RleHR4KCRjb21taXRyb3coJGN1cnZpZXcsJGlkKSkgW2V4cHIgeyR4ciArICRsaW5lc3BjfV0KKwkgICAgc2V0IHJvd3RleHR4KFtyb3dvZmNvbW1pdCAkaWRdKSBbZXhwciB7JHhyICsgJGxpbmVzcGN9XQogCX0gZWxzZSB7CiAJICAgICMgZHJhdyBhIGhlYWQgb3Igb3RoZXIgcmVmCiAJICAgIGlmIHtbaW5jciBuaGVhZHMgLTFdID49IDB9IHsKQEAgLTQxMjcsMTAzICs1MzU5LDYgQEAKIAktdGFncyB0ZXh0IC1maWxsICRmZ2NvbG9yCiB9CiAKLSMgSW5zZXJ0IGEgbmV3IGNvbW1pdCBhcyB0aGUgY2hpbGQgb2YgdGhlIGNvbW1pdCBvbiByb3cgJHJvdy4KLSMgVGhlIG5ldyBjb21taXQgd2lsbCBiZSBkaXNwbGF5ZWQgb24gcm93ICRyb3cgYW5kIHRoZSBjb21taXRzCi0jIG9uIHRoYXQgcm93IGFuZCBiZWxvdyB3aWxsIG1vdmUgZG93biBvbmUgcm93LgotcHJvYyBpbnNlcnRyb3cge3JvdyBuZXdjbWl0fSB7Ci0gICAgZ2xvYmFsIGRpc3BsYXlvcmRlciBwYXJlbnRsaXN0IGNvbW1pdGxpc3RlZCBjaGlsZHJlbgotICAgIGdsb2JhbCBjb21taXRyb3cgY3VydmlldyByb3dpZGxpc3Qgcm93aXNvcHQgcm93ZmluYWwgbnVtY29tbWl0cwotICAgIGdsb2JhbCBudW1jb21taXRzCi0gICAgZ2xvYmFsIHNlbGVjdGVkbGluZSBjb21taXRpZHggb3JkZXJ0b2sKLQotICAgIGlmIHskcm93ID49ICRudW1jb21taXRzfSB7Ci0JcHV0cyAib29wcywgaW5zZXJ0aW5nIG5ldyByb3cgJHJvdyBidXQgb25seSBoYXZlICRudW1jb21taXRzIHJvd3MiCi0JcmV0dXJuCi0gICAgfQotICAgIHNldCBwIFtsaW5kZXggJGRpc3BsYXlvcmRlciAkcm93XQotICAgIHNldCBkaXNwbGF5b3JkZXIgW2xpbnNlcnQgJGRpc3BsYXlvcmRlciAkcm93ICRuZXdjbWl0XQotICAgIHNldCBwYXJlbnRsaXN0IFtsaW5zZXJ0ICRwYXJlbnRsaXN0ICRyb3cgJHBdCi0gICAgc2V0IGtpZHMgJGNoaWxkcmVuKCRjdXJ2aWV3LCRwKQotICAgIGxhcHBlbmQga2lkcyAkbmV3Y21pdAotICAgIHNldCBjaGlsZHJlbigkY3VydmlldywkcCkgJGtpZHMKLSAgICBzZXQgY2hpbGRyZW4oJGN1cnZpZXcsJG5ld2NtaXQpIHt9Ci0gICAgc2V0IGNvbW1pdGxpc3RlZCBbbGluc2VydCAkY29tbWl0bGlzdGVkICRyb3cgMV0KLSAgICBzZXQgbCBbbGxlbmd0aCAkZGlzcGxheW9yZGVyXQotICAgIGZvciB7c2V0IHIgJHJvd30geyRyIDwgJGx9IHtpbmNyIHJ9IHsKLQlzZXQgaWQgW2xpbmRleCAkZGlzcGxheW9yZGVyICRyXQotCXNldCBjb21taXRyb3coJGN1cnZpZXcsJGlkKSAkcgotICAgIH0KLSAgICBpbmNyIGNvbW1pdGlkeCgkY3VydmlldykKLSAgICBzZXQgb3JkZXJ0b2soJGN1cnZpZXcsJG5ld2NtaXQpICRvcmRlcnRvaygkY3VydmlldywkcCkKLQotICAgIGlmIHskcm93IDwgW2xsZW5ndGggJHJvd2lkbGlzdF19IHsKLQlzZXQgaWRsaXN0IFtsaW5kZXggJHJvd2lkbGlzdCAkcm93XQotCWlmIHskaWRsaXN0IG5lIHt9fSB7Ci0JICAgIGlmIHtbbGxlbmd0aCAka2lkc10gPT0gMX0gewotCQlzZXQgY29sIFtsc2VhcmNoIC1leGFjdCAkaWRsaXN0ICRwXQotCQlsc2V0IGlkbGlzdCAkY29sICRuZXdjbWl0Ci0JICAgIH0gZWxzZSB7Ci0JCXNldCBjb2wgW2xsZW5ndGggJGlkbGlzdF0KLQkJbGFwcGVuZCBpZGxpc3QgJG5ld2NtaXQKLQkgICAgfQotCX0KLQlzZXQgcm93aWRsaXN0IFtsaW5zZXJ0ICRyb3dpZGxpc3QgJHJvdyAkaWRsaXN0XQotCXNldCByb3dpc29wdCBbbGluc2VydCAkcm93aXNvcHQgJHJvdyAwXQotCXNldCByb3dmaW5hbCBbbGluc2VydCAkcm93ZmluYWwgJHJvdyBbbGluZGV4ICRyb3dmaW5hbCAkcm93XV0KLSAgICB9Ci0KLSAgICBpbmNyIG51bWNvbW1pdHMKLQotICAgIGlmIHtbaW5mbyBleGlzdHMgc2VsZWN0ZWRsaW5lXSAmJiAkc2VsZWN0ZWRsaW5lID49ICRyb3d9IHsKLQlpbmNyIHNlbGVjdGVkbGluZQotICAgIH0KLSAgICByZWRpc3BsYXkKLX0KLQotIyBSZW1vdmUgYSBjb21taXQgdGhhdCB3YXMgaW5zZXJ0ZWQgd2l0aCBpbnNlcnRyb3cgb24gcm93ICRyb3cuCi1wcm9jIHJlbW92ZXJvdyB7cm93fSB7Ci0gICAgZ2xvYmFsIGRpc3BsYXlvcmRlciBwYXJlbnRsaXN0IGNvbW1pdGxpc3RlZCBjaGlsZHJlbgotICAgIGdsb2JhbCBjb21taXRyb3cgY3VydmlldyByb3dpZGxpc3Qgcm93aXNvcHQgcm93ZmluYWwgbnVtY29tbWl0cwotICAgIGdsb2JhbCBudW1jb21taXRzCi0gICAgZ2xvYmFsIGxpbmVzZWdlbmRzIHNlbGVjdGVkbGluZSBjb21taXRpZHgKLQotICAgIGlmIHskcm93ID49ICRudW1jb21taXRzfSB7Ci0JcHV0cyAib29wcywgcmVtb3Zpbmcgcm93ICRyb3cgYnV0IG9ubHkgaGF2ZSAkbnVtY29tbWl0cyByb3dzIgotCXJldHVybgotICAgIH0KLSAgICBzZXQgcnAxIFtleHByIHskcm93ICsgMX1dCi0gICAgc2V0IGlkIFtsaW5kZXggJGRpc3BsYXlvcmRlciAkcm93XQotICAgIHNldCBwIFtsaW5kZXggJHBhcmVudGxpc3QgJHJvd10KLSAgICBzZXQgZGlzcGxheW9yZGVyIFtscmVwbGFjZSAkZGlzcGxheW9yZGVyICRyb3cgJHJvd10KLSAgICBzZXQgcGFyZW50bGlzdCBbbHJlcGxhY2UgJHBhcmVudGxpc3QgJHJvdyAkcm93XQotICAgIHNldCBjb21taXRsaXN0ZWQgW2xyZXBsYWNlICRjb21taXRsaXN0ZWQgJHJvdyAkcm93XQotICAgIHNldCBraWRzICRjaGlsZHJlbigkY3VydmlldywkcCkKLSAgICBzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJGtpZHMgJGlkXQotICAgIGlmIHskaSA+PSAwfSB7Ci0Jc2V0IGtpZHMgW2xyZXBsYWNlICRraWRzICRpICRpXQotCXNldCBjaGlsZHJlbigkY3VydmlldywkcCkgJGtpZHMKLSAgICB9Ci0gICAgc2V0IGwgW2xsZW5ndGggJGRpc3BsYXlvcmRlcl0KLSAgICBmb3Ige3NldCByICRyb3d9IHskciA8ICRsfSB7aW5jciByfSB7Ci0Jc2V0IGlkIFtsaW5kZXggJGRpc3BsYXlvcmRlciAkcl0KLQlzZXQgY29tbWl0cm93KCRjdXJ2aWV3LCRpZCkgJHIKLSAgICB9Ci0gICAgaW5jciBjb21taXRpZHgoJGN1cnZpZXcpIC0xCi0KLSAgICBpZiB7JHJvdyA8IFtsbGVuZ3RoICRyb3dpZGxpc3RdfSB7Ci0Jc2V0IHJvd2lkbGlzdCBbbHJlcGxhY2UgJHJvd2lkbGlzdCAkcm93ICRyb3ddCi0Jc2V0IHJvd2lzb3B0IFtscmVwbGFjZSAkcm93aXNvcHQgJHJvdyAkcm93XQotCXNldCByb3dmaW5hbCBbbHJlcGxhY2UgJHJvd2ZpbmFsICRyb3cgJHJvd10KLSAgICB9Ci0KLSAgICBpbmNyIG51bWNvbW1pdHMgLTEKLQotICAgIGlmIHtbaW5mbyBleGlzdHMgc2VsZWN0ZWRsaW5lXSAmJiAkc2VsZWN0ZWRsaW5lID4gJHJvd30gewotCWluY3Igc2VsZWN0ZWRsaW5lIC0xCi0gICAgfQotICAgIHJlZGlzcGxheQotfQotCiAjIERvbid0IGNoYW5nZSB0aGUgdGV4dCBwYW5lIGN1cnNvciBpZiBpdCBpcyBjdXJyZW50bHkgdGhlIGhhbmQgY3Vyc29yLAogIyBzaG93aW5nIHRoYXQgd2UgYXJlIG92ZXIgYSBzaGExIElEIGxpbmsuCiBwcm9jIHNldHRleHRjdXJzb3Ige2N9IHsKQEAgLTQyOTYsNyArNTQzMSw3IEBACiAgICAgfQogICAgIGZvY3VzIC4KICAgICBpZiB7JGZpbmRzdHJpbmcgZXEge30gfHwgJG51bWNvbW1pdHMgPT0gMH0gcmV0dXJuCi0gICAgaWYgeyFbaW5mbyBleGlzdHMgc2VsZWN0ZWRsaW5lXX0geworICAgIGlmIHskc2VsZWN0ZWRsaW5lIGVxIHt9fSB7CiAJc2V0IGZpbmRzdGFydGxpbmUgW2xpbmRleCBbdmlzaWJsZXJvd3NdIFtleHByIHskZGlybiA8IDB9XV0KICAgICB9IGVsc2UgewogCXNldCBmaW5kc3RhcnRsaW5lICRzZWxlY3RlZGxpbmUKQEAgLTQzMjYsOSArNTQ2MSw5IEBACiAKIHByb2MgZmluZG1vcmUge30gewogICAgIGdsb2JhbCBjb21taXRkYXRhIGNvbW1pdGluZm8gbnVtY29tbWl0cyBmaW5kcGF0dGVybiBmaW5kbG9jCi0gICAgZ2xvYmFsIGZpbmRzdGFydGxpbmUgZmluZGN1cmxpbmUgZGlzcGxheW9yZGVyCisgICAgZ2xvYmFsIGZpbmRzdGFydGxpbmUgZmluZGN1cmxpbmUgZmluZGFsbG93d3JhcAogICAgIGdsb2JhbCBmaW5kX2Rpcm4gZ2R0dHlwZSBmaGlnaGxpZ2h0cyBmcHJvZ2Nvb3JkCi0gICAgZ2xvYmFsIGZpbmRhbGxvd3dyYXAKKyAgICBnbG9iYWwgY3VydmlldyB2YXJjb3JkZXIgdnJvd251bSB2YXJjY29tbWl0cyB2cm93bW9kCiAKICAgICBpZiB7IVtpbmZvIGV4aXN0cyBmaW5kX2Rpcm5dfSB7CiAJcmV0dXJuIDAKQEAgLTQzNjQsMTQgKzU0OTksMzEgQEAKIAlzZXQgbiA1MDAKIAlzZXQgbW9yZXRvZG8gMQogICAgIH0KKyAgICBpZiB7JGwgKyAoJGZpbmRfZGlybiA+IDA/ICRuOiAxKSA+ICR2cm93bW9kKCRjdXJ2aWV3KX0geworCXVwZGF0ZV9hcmNyb3dzICRjdXJ2aWV3CisgICAgfQogICAgIHNldCBmb3VuZCAwCiAgICAgc2V0IGRvbW9yZSAxCisgICAgc2V0IGFpIFtic2VhcmNoICR2cm93bnVtKCRjdXJ2aWV3KSAkbF0KKyAgICBzZXQgYSBbbGluZGV4ICR2YXJjb3JkZXIoJGN1cnZpZXcpICRhaV0KKyAgICBzZXQgYXJvdyBbbGluZGV4ICR2cm93bnVtKCRjdXJ2aWV3KSAkYWldCisgICAgc2V0IGlkcyBbbGluZGV4ICR2YXJjY29tbWl0cygkY3VydmlldywkYSldCisgICAgc2V0IGFyb3dlbmQgW2V4cHIgeyRhcm93ICsgW2xsZW5ndGggJGlkc119XQogICAgIGlmIHskZ2R0dHlwZSBlcSBbbWMgImNvbnRhaW5pbmc6Il19IHsKIAlmb3Ige30geyRuID4gMH0ge2luY3IgbiAtMTsgaW5jciBsICRmaW5kX2Rpcm59IHsKLQkgICAgc2V0IGlkIFtsaW5kZXggJGRpc3BsYXlvcmRlciAkbF0KKwkgICAgaWYgeyRsIDwgJGFyb3cgfHwgJGwgPj0gJGFyb3dlbmR9IHsKKwkJaW5jciBhaSAkZmluZF9kaXJuCisJCXNldCBhIFtsaW5kZXggJHZhcmNvcmRlcigkY3VydmlldykgJGFpXQorCQlzZXQgYXJvdyBbbGluZGV4ICR2cm93bnVtKCRjdXJ2aWV3KSAkYWldCisJCXNldCBpZHMgW2xpbmRleCAkdmFyY2NvbW1pdHMoJGN1cnZpZXcsJGEpXQorCQlzZXQgYXJvd2VuZCBbZXhwciB7JGFyb3cgKyBbbGxlbmd0aCAkaWRzXX1dCisJICAgIH0KKwkgICAgc2V0IGlkIFtsaW5kZXggJGlkcyBbZXhwciB7JGwgLSAkYXJvd31dXQogCSAgICAjIHNob3VsZG4ndCBoYXBwZW4gdW5sZXNzIGdpdCBsb2cgZG9lc24ndCBnaXZlIGFsbCB0aGUgY29tbWl0cy4uLgotCSAgICBpZiB7IVtpbmZvIGV4aXN0cyBjb21taXRkYXRhKCRpZCldfSBjb250aW51ZQotCSAgICBpZiB7IVtkb2VzbWF0Y2ggJGNvbW1pdGRhdGEoJGlkKV19IGNvbnRpbnVlCisJICAgIGlmIHshW2luZm8gZXhpc3RzIGNvbW1pdGRhdGEoJGlkKV0gfHwKKwkJIVtkb2VzbWF0Y2ggJGNvbW1pdGRhdGEoJGlkKV19IHsKKwkJY29udGludWUKKwkgICAgfQogCSAgICBpZiB7IVtpbmZvIGV4aXN0cyBjb21taXRpbmZvKCRpZCldfSB7CiAJCWdldGNvbW1pdCAkaWQKIAkgICAgfQpAQCAtNDM4NywxNiArNTUzOSwyNyBAQAogCX0KICAgICB9IGVsc2UgewogCWZvciB7fSB7JG4gPiAwfSB7aW5jciBuIC0xOyBpbmNyIGwgJGZpbmRfZGlybn0gewotCSAgICBzZXQgaWQgW2xpbmRleCAkZGlzcGxheW9yZGVyICRsXQotCSAgICBpZiB7IVtpbmZvIGV4aXN0cyBmaGlnaGxpZ2h0cygkbCldfSB7CisJICAgIGlmIHskbCA8ICRhcm93IHx8ICRsID49ICRhcm93ZW5kfSB7CisJCWluY3IgYWkgJGZpbmRfZGlybgorCQlzZXQgYSBbbGluZGV4ICR2YXJjb3JkZXIoJGN1cnZpZXcpICRhaV0KKwkJc2V0IGFyb3cgW2xpbmRleCAkdnJvd251bSgkY3VydmlldykgJGFpXQorCQlzZXQgaWRzIFtsaW5kZXggJHZhcmNjb21taXRzKCRjdXJ2aWV3LCRhKV0KKwkJc2V0IGFyb3dlbmQgW2V4cHIgeyRhcm93ICsgW2xsZW5ndGggJGlkc119XQorCSAgICB9CisJICAgIHNldCBpZCBbbGluZGV4ICRpZHMgW2V4cHIgeyRsIC0gJGFyb3d9XV0KKwkgICAgaWYgeyFbaW5mbyBleGlzdHMgZmhpZ2hsaWdodHMoJGlkKV19IHsKKwkJIyB0aGlzIHNldHMgZmhpZ2hsaWdodHMoJGlkKSB0byAtMQogCQlhc2tmaWxlaGlnaGxpZ2h0ICRsICRpZAorCSAgICB9CisJICAgIGlmIHskZmhpZ2hsaWdodHMoJGlkKSA+IDB9IHsKKwkJc2V0IGZvdW5kICRkb21vcmUKKwkJYnJlYWsKKwkgICAgfQorCSAgICBpZiB7JGZoaWdobGlnaHRzKCRpZCkgPCAwfSB7CiAJCWlmIHskZG9tb3JlfSB7CiAJCSAgICBzZXQgZG9tb3JlIDAKIAkJICAgIHNldCBmaW5kY3VybGluZSBbZXhwciB7JGwgLSAkZmluZF9kaXJufV0KIAkJfQotCSAgICB9IGVsc2VpZiB7JGZoaWdobGlnaHRzKCRsKX0gewotCQlzZXQgZm91bmQgJGRvbW9yZQotCQlicmVhawogCSAgICB9CiAJfQogICAgIH0KQEAgLTQ0NjQsNyArNTYyNyw3IEBACiAJCSAgIFtleHByIHskeDArJHhsZW4rMn1dICR5MSBcCiAJCSAgIC1vdXRsaW5lIHt9IC10YWdzIFtsaXN0IG1hdGNoJGwgbWF0Y2hlc10gLWZpbGwgeWVsbG93XQogCSRjYW52IGxvd2VyICR0Ci0JaWYge1tpbmZvIGV4aXN0cyBzZWxlY3RlZGxpbmVdICYmICRyb3cgPT0gJHNlbGVjdGVkbGluZX0geworCWlmIHskcm93ID09ICRzZWxlY3RlZGxpbmV9IHsKIAkgICAgJGNhbnYgcmFpc2UgJHQgc2Vjc2VsCiAJfQogICAgIH0KQEAgLTQ0OTAsNyArNTY1Myw5IEBACiAJc2V0IGwgMAogICAgIH0KICAgICBpZiB7JHcgZXEgJGNhbnZ9IHsKLQlpZiB7IVtpbmZvIGV4aXN0cyByb3d0ZXh0eCgkbCldIHx8ICR4IDwgJHJvd3RleHR4KCRsKX0gcmV0dXJuCisJc2V0IHhtYXggW2xpbmRleCBbJGNhbnYgY2dldCAtc2Nyb2xscmVnaW9uXSAyXQorCXNldCB4bGVmdCBbZXhwciB7W2xpbmRleCBbJGNhbnYgeHZpZXddIDBdICogJHhtYXh9XQorCWlmIHshW2luZm8gZXhpc3RzIHJvd3RleHR4KCRsKV0gfHwgJHhsZWZ0ICsgJHggPCAkcm93dGV4dHgoJGwpfSByZXR1cm4KICAgICB9CiAgICAgdW5tYXJrbWF0Y2hlcwogICAgIHNlbGVjdGxpbmUgJGwgMQpAQCAtNDUxMSw3ICs1Njc2LDcgQEAKICMgYXBwZW5kIHNvbWUgdGV4dCB0byB0aGUgY3RleHQgd2lkZ2V0LCBhbmQgbWFrZSBhbnkgU0hBMSBJRAogIyB0aGF0IHdlIGtub3cgYWJvdXQgYmUgYSBjbGlja2FibGUgbGluay4KIHByb2MgYXBwZW5kd2l0aGxpbmtzIHt0ZXh0IHRhZ3N9IHsKLSAgICBnbG9iYWwgY3RleHQgY29tbWl0cm93IGxpbmtudW0gY3VydmlldyBwZW5kaW5nbGlua3MKKyAgICBnbG9iYWwgY3RleHQgbGlua251bSBjdXJ2aWV3IHBlbmRpbmdsaW5rcwogCiAgICAgc2V0IHN0YXJ0IFskY3RleHQgaW5kZXggImVuZCAtIDFjIl0KICAgICAkY3RleHQgaW5zZXJ0IGVuZCAkdGV4dCAkdGFncwpAQCAtNDUyOSwxMSArNTY5NCwxMSBAQAogfQogCiBwcm9jIHNldGxpbmsge2lkIGxrfSB7Ci0gICAgZ2xvYmFsIGN1cnZpZXcgY29tbWl0cm93IGN0ZXh0IHBlbmRpbmdsaW5rcyBjb21taXRpbnRlcmVzdAorICAgIGdsb2JhbCBjdXJ2aWV3IGN0ZXh0IHBlbmRpbmdsaW5rcyBjb21taXRpbnRlcmVzdAogCi0gICAgaWYge1tpbmZvIGV4aXN0cyBjb21taXRyb3coJGN1cnZpZXcsJGlkKV19IHsKKyAgICBpZiB7W2NvbW1pdGludmlldyAkaWQgJGN1cnZpZXddfSB7CiAJJGN0ZXh0IHRhZyBjb25mICRsayAtZm9yZWdyb3VuZCBibHVlIC11bmRlcmxpbmUgMQotCSRjdGV4dCB0YWcgYmluZCAkbGsgPDE+IFtsaXN0IHNlbGVjdGxpbmUgJGNvbW1pdHJvdygkY3VydmlldywkaWQpIDFdCisJJGN0ZXh0IHRhZyBiaW5kICRsayA8MT4gW2xpc3Qgc2VsZWN0bGluZSBbcm93b2Zjb21taXQgJGlkXSAxXQogCSRjdGV4dCB0YWcgYmluZCAkbGsgPEVudGVyPiB7bGlua2N1cnNvciAlVyAxfQogCSRjdGV4dCB0YWcgYmluZCAkbGsgPExlYXZlPiB7bGlua2N1cnNvciAlVyAtMX0KICAgICB9IGVsc2UgewpAQCAtNDU4NCw3ICs1NzQ5LDcgQEAKICMgYWRkIGEgbGlzdCBvZiB0YWcgb3IgYnJhbmNoIG5hbWVzIGF0IHBvc2l0aW9uIHBvcwogIyByZXR1cm5zIHRoZSBudW1iZXIgb2YgbmFtZXMgaW5zZXJ0ZWQKIHByb2MgYXBwZW5kcmVmcyB7cG9zIGlkcyB2YXJ9IHsKLSAgICBnbG9iYWwgY3RleHQgY29tbWl0cm93IGxpbmtudW0gY3VydmlldyAkdmFyIG1heHJlZnMKKyAgICBnbG9iYWwgY3RleHQgbGlua251bSBjdXJ2aWV3ICR2YXIgbWF4cmVmcwogCiAgICAgaWYge1tjYXRjaCB7JGN0ZXh0IGluZGV4ICRwb3N9XX0gewogCXJldHVybiAwCkBAIC00NjIxLDcgKzU3ODYsNyBAQAogcHJvYyBkaXNwbmVhcnRhZ3Mge2RlbGF5fSB7CiAgICAgZ2xvYmFsIHNlbGVjdGVkbGluZSBjdXJyZW50aWQgc2hvd25lYXJ0YWdzIHRhZ3BoYXNlCiAKLSAgICBpZiB7IVtpbmZvIGV4aXN0cyBzZWxlY3RlZGxpbmVdIHx8ICEkc2hvd25lYXJ0YWdzfSByZXR1cm4KKyAgICBpZiB7JHNlbGVjdGVkbGluZSBlcSB7fSB8fCAhJHNob3duZWFydGFnc30gcmV0dXJuCiAgICAgYWZ0ZXIgY2FuY2VsIGRpc3BuZXh0dGFnCiAgICAgaWYgeyRkZWxheX0gewogCWFmdGVyIDIwMCBkaXNwbmV4dHRhZwpAQCAtNDYzNSw3ICs1ODAwLDcgQEAKIHByb2MgZGlzcG5leHR0YWcge30gewogICAgIGdsb2JhbCBzZWxlY3RlZGxpbmUgY3VycmVudGlkIHNob3duZWFydGFncyB0YWdwaGFzZSBjdGV4dAogCi0gICAgaWYgeyFbaW5mbyBleGlzdHMgc2VsZWN0ZWRsaW5lXSB8fCAhJHNob3duZWFydGFnc30gcmV0dXJuCisgICAgaWYgeyRzZWxlY3RlZGxpbmUgZXEge30gfHwgISRzaG93bmVhcnRhZ3N9IHJldHVybgogICAgIHN3aXRjaCAtLSAkdGFncGhhc2UgewogCTAgewogCSAgICBzZXQgZHRhZ3MgW2Rlc2N0YWdzICRjdXJyZW50aWRdCkBAIC00Njg3LDEyICs1ODUyLDEyIEBACiAKIHByb2Mgc2VsZWN0bGluZSB7bCBpc25ld30gewogICAgIGdsb2JhbCBjYW52IGN0ZXh0IGNvbW1pdGluZm8gc2VsZWN0ZWRsaW5lCi0gICAgZ2xvYmFsIGRpc3BsYXlvcmRlcgotICAgIGdsb2JhbCBjYW52eTAgbGluZXNwYyBwYXJlbnRsaXN0IGNoaWxkcmVuIGN1cnZpZXcKKyAgICBnbG9iYWwgY2FudnkwIGxpbmVzcGMgcGFyZW50cyBjaGlsZHJlbiBjdXJ2aWV3CiAgICAgZ2xvYmFsIGN1cnJlbnRpZCBzaGExZW50cnkKICAgICBnbG9iYWwgY29tbWVudGVuZCBpZHRhZ3MgbGlua251bQogICAgIGdsb2JhbCBtZXJnZW1heCBudW1jb21taXRzIHBlbmRpbmdfc2VsZWN0CiAgICAgZ2xvYmFsIGNtaXRtb2RlIHNob3duZWFydGFncyBhbGxjb21taXRzCisgICAgZ2xvYmFsIHRhcmdldHJvdyB0YXJnZXRpZCBsYXN0c2Nyb2xscm93cwogICAgIGdsb2JhbCBhdXRvc2VsZWN0CiAKICAgICBjYXRjaCB7dW5zZXQgcGVuZGluZ19zZWxlY3R9CkBAIC00NzAxLDYgKzU4NjYsMTUgQEAKICAgICB1bnNlbF9yZWZsaXN0CiAgICAgc3RvcGZpbmRpbmcKICAgICBpZiB7JGwgPCAwIHx8ICRsID49ICRudW1jb21taXRzfSByZXR1cm4KKyAgICBzZXQgaWQgW2NvbW1pdG9ucm93ICRsXQorICAgIHNldCB0YXJnZXRpZCAkaWQKKyAgICBzZXQgdGFyZ2V0cm93ICRsCisgICAgc2V0IHNlbGVjdGVkbGluZSAkbAorICAgIHNldCBjdXJyZW50aWQgJGlkCisgICAgaWYgeyRsYXN0c2Nyb2xscm93cyA8ICRudW1jb21taXRzfSB7CisJc2V0Y2FudnNjcm9sbAorICAgIH0KKwogICAgIHNldCB5IFtleHByIHskY2FudnkwICsgJGwgKiAkbGluZXNwY31dCiAgICAgc2V0IHltYXggW2xpbmRleCBbJGNhbnYgY2dldCAtc2Nyb2xscmVnaW9uXSAzXQogICAgIHNldCB5dG9wIFtleHByIHskeSAtICRsaW5lc3BjIC0gMX1dCkBAIC00NzQwLDEzICs1OTE0LDkgQEAKICAgICBtYWtlX3NlY3NlbCAkbAogCiAgICAgaWYgeyRpc25ld30gewotCWFkZHRvaGlzdG9yeSBbbGlzdCBzZWxlY3RsaW5lICRsIDBdCisJYWRkdG9oaXN0b3J5IFtsaXN0IHNlbGJ5aWQgJGlkXQogICAgIH0KIAotICAgIHNldCBzZWxlY3RlZGxpbmUgJGwKLQotICAgIHNldCBpZCBbbGluZGV4ICRkaXNwbGF5b3JkZXIgJGxdCi0gICAgc2V0IGN1cnJlbnRpZCAkaWQKICAgICAkc2hhMWVudHJ5IGRlbGV0ZSAwIGVuZAogICAgICRzaGExZW50cnkgaW5zZXJ0IDAgJGlkCiAgICAgaWYgeyRhdXRvc2VsZWN0fSB7CkBAIC00NzU4LDYgKzU5MjgsOSBAQAogICAgICRjdGV4dCBjb25mIC1zdGF0ZSBub3JtYWwKICAgICBjbGVhcl9jdGV4dAogICAgIHNldCBsaW5rbnVtIDAKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBjb21taXRpbmZvKCRpZCldfSB7CisJZ2V0Y29tbWl0ICRpZAorICAgIH0KICAgICBzZXQgaW5mbyAkY29tbWl0aW5mbygkaWQpCiAgICAgc2V0IGRhdGUgW2Zvcm1hdGRhdGUgW2xpbmRleCAkaW5mbyAyXV0KICAgICAkY3RleHQgaW5zZXJ0IGVuZCAiW21jICJBdXRob3IiXTogW2xpbmRleCAkaW5mbyAxXSAgJGRhdGVcbiIKQEAgLTQ3NzIsNyArNTk0NSw3IEBACiAgICAgfQogCiAgICAgc2V0IGhlYWRlcnMge30KLSAgICBzZXQgb2xkcyBbbGluZGV4ICRwYXJlbnRsaXN0ICRsXQorICAgIHNldCBvbGRzICRwYXJlbnRzKCRjdXJ2aWV3LCRpZCkKICAgICBpZiB7W2xsZW5ndGggJG9sZHNdID4gMX0gewogCXNldCBucCAwCiAJZm9yZWFjaCBwICRvbGRzIHsKQEAgLTQ4MzAsNyArNjAwMyw3IEBACiAgICAgfSBlbHNlaWYge1tsbGVuZ3RoICRvbGRzXSA8PSAxfSB7CiAJc3RhcnRkaWZmICRpZAogICAgIH0gZWxzZSB7Ci0JbWVyZ2VkaWZmICRpZCAkbAorCW1lcmdlZGlmZiAkaWQKICAgICB9CiB9CiAKQEAgLTQ4NDksNyArNjAyMiw3IEBACiBwcm9jIHNlbG5leHRsaW5lIHtkaXJ9IHsKICAgICBnbG9iYWwgc2VsZWN0ZWRsaW5lCiAgICAgZm9jdXMgLgotICAgIGlmIHshW2luZm8gZXhpc3RzIHNlbGVjdGVkbGluZV19IHJldHVybgorICAgIGlmIHskc2VsZWN0ZWRsaW5lIGVxIHt9fSByZXR1cm4KICAgICBzZXQgbCBbZXhwciB7JHNlbGVjdGVkbGluZSArICRkaXJ9XQogICAgIHVubWFya21hdGNoZXMKICAgICBzZWxlY3RsaW5lICRsIDEKQEAgLTQ4NjQsNyArNjAzNyw3IEBACiAgICAgfQogICAgIGFsbGNhbnZzIHl2aWV3IHNjcm9sbCBbZXhwciB7JGRpciAqICRscHB9XSB1bml0cwogICAgIGRyYXd2aXNpYmxlCi0gICAgaWYgeyFbaW5mbyBleGlzdHMgc2VsZWN0ZWRsaW5lXX0gcmV0dXJuCisgICAgaWYgeyRzZWxlY3RlZGxpbmUgZXEge319IHJldHVybgogICAgIHNldCBsIFtleHByIHskc2VsZWN0ZWRsaW5lICsgJGRpciAqICRscHB9XQogICAgIGlmIHskbCA8IDB9IHsKIAlzZXQgbCAwCkBAIC00ODc4LDcgKzYwNTEsNyBAQAogcHJvYyB1bnNlbGVjdGxpbmUge30gewogICAgIGdsb2JhbCBzZWxlY3RlZGxpbmUgY3VycmVudGlkCiAKLSAgICBjYXRjaCB7dW5zZXQgc2VsZWN0ZWRsaW5lfQorICAgIHNldCBzZWxlY3RlZGxpbmUge30KICAgICBjYXRjaCB7dW5zZXQgY3VycmVudGlkfQogICAgIGFsbGNhbnZzIGRlbGV0ZSBzZWNzZWwKICAgICByaGlnaGxpZ2h0X25vbmUKQEAgLTQ4ODcsNyArNjA2MCw3IEBACiBwcm9jIHJlc2VsZWN0bGluZSB7fSB7CiAgICAgZ2xvYmFsIHNlbGVjdGVkbGluZQogCi0gICAgaWYge1tpbmZvIGV4aXN0cyBzZWxlY3RlZGxpbmVdfSB7CisgICAgaWYgeyRzZWxlY3RlZGxpbmUgbmUge319IHsKIAlzZWxlY3RsaW5lICRzZWxlY3RlZGxpbmUgMAogICAgIH0KIH0KQEAgLTQ5OTIsMTEgKzYxNjUsMTIgQEAKIAlpZiB7JGRpZmZpZHMgZXEgJG51bGxpZH0gewogCSAgICBzZXQgZm5hbWUgJGxpbmUKIAl9IGVsc2UgewotCSAgICBpZiB7JGRpZmZpZHMgbmUgJG51bGxpZDIgJiYgW2xpbmRleCAkbGluZSAxXSBuZSAiYmxvYiJ9IGNvbnRpbnVlCiAJICAgIHNldCBpIFtzdHJpbmcgZmlyc3QgIlx0IiAkbGluZV0KIAkgICAgaWYgeyRpIDwgMH0gY29udGludWUKLQkgICAgc2V0IHNoYTEgW2xpbmRleCAkbGluZSAyXQogCSAgICBzZXQgZm5hbWUgW3N0cmluZyByYW5nZSAkbGluZSBbZXhwciB7JGkrMX1dIGVuZF0KKwkgICAgc2V0IGxpbmUgW3N0cmluZyByYW5nZSAkbGluZSAwIFtleHByIHskaS0xfV1dCisJICAgIGlmIHskZGlmZmlkcyBuZSAkbnVsbGlkMiAmJiBbbGluZGV4ICRsaW5lIDFdIG5lICJibG9iIn0gY29udGludWUKKwkgICAgc2V0IHNoYTEgW2xpbmRleCAkbGluZSAyXQogCSAgICBpZiB7W3N0cmluZyBpbmRleCAkZm5hbWUgMF0gZXEgIlwiIn0gewogCQlzZXQgZm5hbWUgW2xpbmRleCAkZm5hbWUgMF0KIAkgICAgfQpAQCAtNTA3NSwxOSArNjI0OSwxOSBAQAogICAgIHJldHVybiBbZXhwciB7JG5sID49IDEwMDA/IDI6IDF9XQogfQogCi1wcm9jIG1lcmdlZGlmZiB7aWQgbH0geworcHJvYyBtZXJnZWRpZmYge2lkfSB7CiAgICAgZ2xvYmFsIGRpZmZtZXJnZWlkIG1kaWZmZmQKICAgICBnbG9iYWwgZGlmZmlkcworICAgIGdsb2JhbCBwYXJlbnRzCiAgICAgZ2xvYmFsIGRpZmZjb250ZXh0Ci0gICAgZ2xvYmFsIHBhcmVudGxpc3QKLSAgICBnbG9iYWwgbGltaXRkaWZmcyB2aWV3ZmlsZXMgY3VydmlldworICAgIGdsb2JhbCBsaW1pdGRpZmZzIHZmaWxlbGltaXQgY3VydmlldwogCiAgICAgc2V0IGRpZmZtZXJnZWlkICRpZAogICAgIHNldCBkaWZmaWRzICRpZAogICAgICMgdGhpcyBkb2Vzbid0IHNlZW0gdG8gYWN0dWFsbHkgYWZmZWN0IGFueXRoaW5nLi4uCiAgICAgc2V0IGNtZCBbY29uY2F0IHwgZ2l0IGRpZmYtdHJlZSAtLW5vLWNvbW1pdC1pZCAtLWNjIC1VJGRpZmZjb250ZXh0ICRpZF0KLSAgICBpZiB7JGxpbWl0ZGlmZnMgJiYgJHZpZXdmaWxlcygkY3VydmlldykgbmUge319IHsKLQlzZXQgY21kIFtjb25jYXQgJGNtZCAtLSAkdmlld2ZpbGVzKCRjdXJ2aWV3KV0KKyAgICBpZiB7JGxpbWl0ZGlmZnMgJiYgJHZmaWxlbGltaXQoJGN1cnZpZXcpIG5lIHt9fSB7CisJc2V0IGNtZCBbY29uY2F0ICRjbWQgLS0gJHZmaWxlbGltaXQoJGN1cnZpZXcpXQogICAgIH0KICAgICBpZiB7W2NhdGNoIHtzZXQgbWRmIFtvcGVuICRjbWQgcl19IGVycl19IHsKIAllcnJvcl9wb3B1cCAiW21jICJFcnJvciBnZXR0aW5nIG1lcmdlIGRpZmZzOiJdICRlcnIiCkBAIC01MDk1LDcgKzYyNjksNyBAQAogICAgIH0KICAgICBmY29uZmlndXJlICRtZGYgLWJsb2NraW5nIDAKICAgICBzZXQgbWRpZmZmZCgkaWQpICRtZGYKLSAgICBzZXQgbnAgW2xsZW5ndGggW2xpbmRleCAkcGFyZW50bGlzdCAkbF1dCisgICAgc2V0IG5wIFtsbGVuZ3RoICRwYXJlbnRzKCRjdXJ2aWV3LCRpZCldCiAgICAgc2V0dGFicyAkbnAKICAgICBmaWxlcnVuICRtZGYgW2xpc3QgZ2V0bWVyZ2VkaWZmbGluZSAkbWRmICRpZCAkbnBdCiB9CkBAIC01MjY1LDcgKzY0MzksNyBAQAogCiBwcm9jIGdldHRyZWVkaWZmbGluZSB7Z2R0ZiBpZHN9IHsKICAgICBnbG9iYWwgdHJlZWRpZmYgdHJlZWRpZmZzIHRyZWVwZW5kaW5nIGRpZmZpZHMgZGlmZm1lcmdlaWQKLSAgICBnbG9iYWwgY21pdG1vZGUgdmlld2ZpbGVzIGN1cnZpZXcgbGltaXRkaWZmcworICAgIGdsb2JhbCBjbWl0bW9kZSB2ZmlsZWxpbWl0IGN1cnZpZXcgbGltaXRkaWZmcwogCiAgICAgc2V0IG5yIDAKICAgICB3aGlsZSB7W2luY3IgbnJdIDw9IDEwMDAgJiYgW2dldHMgJGdkdGYgbGluZV0gPj0gMH0gewpAQCAtNTI4MiwxMCArNjQ1NiwxMCBAQAogCXJldHVybiBbZXhwciB7JG5yID49IDEwMDA/IDI6IDF9XQogICAgIH0KICAgICBjbG9zZSAkZ2R0ZgotICAgIGlmIHskbGltaXRkaWZmcyAmJiAkdmlld2ZpbGVzKCRjdXJ2aWV3KSBuZSB7fX0geworICAgIGlmIHskbGltaXRkaWZmcyAmJiAkdmZpbGVsaW1pdCgkY3VydmlldykgbmUge319IHsKIAlzZXQgZmxpc3Qge30KIAlmb3JlYWNoIGYgJHRyZWVkaWZmIHsKLQkgICAgaWYge1twYXRoX2ZpbHRlciAkdmlld2ZpbGVzKCRjdXJ2aWV3KSAkZl19IHsKKwkgICAgaWYge1twYXRoX2ZpbHRlciAkdmZpbGVsaW1pdCgkY3VydmlldykgJGZdfSB7CiAJCWxhcHBlbmQgZmxpc3QgJGYKIAkgICAgfQogCX0KQEAgLTUzMzEsMTQgKzY1MDUsMTQgQEAKICAgICBnbG9iYWwgZGlmZmluaGRyIHRyZWVkaWZmcwogICAgIGdsb2JhbCBkaWZmY29udGV4dAogICAgIGdsb2JhbCBpZ25vcmVzcGFjZQotICAgIGdsb2JhbCBsaW1pdGRpZmZzIHZpZXdmaWxlcyBjdXJ2aWV3CisgICAgZ2xvYmFsIGxpbWl0ZGlmZnMgdmZpbGVsaW1pdCBjdXJ2aWV3CiAKICAgICBzZXQgY21kIFtkaWZmY21kICRpZHMgIi1wIC1DIC0tbm8tY29tbWl0LWlkIC1VJGRpZmZjb250ZXh0Il0KICAgICBpZiB7JGlnbm9yZXNwYWNlfSB7CiAJYXBwZW5kIGNtZCAiIC13IgogICAgIH0KLSAgICBpZiB7JGxpbWl0ZGlmZnMgJiYgJHZpZXdmaWxlcygkY3VydmlldykgbmUge319IHsKLQlzZXQgY21kIFtjb25jYXQgJGNtZCAtLSAkdmlld2ZpbGVzKCRjdXJ2aWV3KV0KKyAgICBpZiB7JGxpbWl0ZGlmZnMgJiYgJHZmaWxlbGltaXQoJGN1cnZpZXcpIG5lIHt9fSB7CisJc2V0IGNtZCBbY29uY2F0ICRjbWQgLS0gJHZmaWxlbGltaXQoJGN1cnZpZXcpXQogICAgIH0KICAgICBpZiB7W2NhdGNoIHtzZXQgYmRmIFtvcGVuICRjbWQgcl19IGVycl19IHsKIAlwdXRzICJlcnJvciBnZXR0aW5nIGRpZmZzOiAkZXJyIgpAQCAtNTQ3OCwyNiArNjY1Miw0NCBAQAogICAgICRjdGV4dCB0YWcgY29uZiBkMSAtZWxpZGUgW2xpbmRleCAkZGlmZmVsaWRlIDFdCiB9CiAKK3Byb2MgaGlnaGxpZ2h0ZmlsZSB7bG9jIGNsaW5lfSB7CisgICAgZ2xvYmFsIGN0ZXh0IGNmbGlzdCBjZmxpc3RfdG9wCisKKyAgICAkY3RleHQgeXZpZXcgJGxvYworICAgICRjZmxpc3QgdGFnIHJlbW92ZSBoaWdobGlnaHQgJGNmbGlzdF90b3AuMCAiJGNmbGlzdF90b3AuMCBsaW5lZW5kIgorICAgICRjZmxpc3QgdGFnIGFkZCBoaWdobGlnaHQgJGNsaW5lLjAgIiRjbGluZS4wIGxpbmVlbmQiCisgICAgJGNmbGlzdCBzZWUgJGNsaW5lLjAKKyAgICBzZXQgY2ZsaXN0X3RvcCAkY2xpbmUKK30KKwogcHJvYyBwcmV2ZmlsZSB7fSB7Ci0gICAgZ2xvYmFsIGRpZmZmaWxlc3RhcnQgY3RleHQKLSAgICBzZXQgcHJldiBbbGluZGV4ICRkaWZmZmlsZXN0YXJ0IDBdCisgICAgZ2xvYmFsIGRpZmZmaWxlc3RhcnQgY3RleHQgY21pdG1vZGUKKworICAgIGlmIHskY21pdG1vZGUgZXEgInRyZWUifSByZXR1cm4KKyAgICBzZXQgcHJldiAwLjAKKyAgICBzZXQgcHJldmxpbmUgMQogICAgIHNldCBoZXJlIFskY3RleHQgaW5kZXggQDAsMF0KICAgICBmb3JlYWNoIGxvYyAkZGlmZmZpbGVzdGFydCB7CiAJaWYge1skY3RleHQgY29tcGFyZSAkbG9jID49ICRoZXJlXX0gewotCSAgICAkY3RleHQgeXZpZXcgJHByZXYKKwkgICAgaGlnaGxpZ2h0ZmlsZSAkcHJldiAkcHJldmxpbmUKIAkgICAgcmV0dXJuCiAJfQogCXNldCBwcmV2ICRsb2MKKwlpbmNyIHByZXZsaW5lCiAgICAgfQotICAgICRjdGV4dCB5dmlldyAkcHJldgorICAgIGhpZ2hsaWdodGZpbGUgJHByZXYgJHByZXZsaW5lCiB9CiAKIHByb2MgbmV4dGZpbGUge30gewotICAgIGdsb2JhbCBkaWZmZmlsZXN0YXJ0IGN0ZXh0CisgICAgZ2xvYmFsIGRpZmZmaWxlc3RhcnQgY3RleHQgY21pdG1vZGUKKworICAgIGlmIHskY21pdG1vZGUgZXEgInRyZWUifSByZXR1cm4KICAgICBzZXQgaGVyZSBbJGN0ZXh0IGluZGV4IEAwLDBdCisgICAgc2V0IGxpbmUgMQogICAgIGZvcmVhY2ggbG9jICRkaWZmZmlsZXN0YXJ0IHsKKwlpbmNyIGxpbmUKIAlpZiB7WyRjdGV4dCBjb21wYXJlICRsb2MgPiAkaGVyZV19IHsKLQkgICAgJGN0ZXh0IHl2aWV3ICRsb2MKKwkgICAgaGlnaGxpZ2h0ZmlsZSAkbG9jICRsaW5lCiAJICAgIHJldHVybgogCX0KICAgICB9CkBAIC01NjgwLDcgKzY4NzIsNyBAQAogICAgIHNldGNhbnZzY3JvbGwKICAgICBhbGxjYW52cyB5dmlldyBtb3ZldG8gW2xpbmRleCAkc3BhbiAwXQogICAgIGRyYXd2aXNpYmxlCi0gICAgaWYge1tpbmZvIGV4aXN0cyBzZWxlY3RlZGxpbmVdfSB7CisgICAgaWYgeyRzZWxlY3RlZGxpbmUgbmUge319IHsKIAlzZWxlY3RsaW5lICRzZWxlY3RlZGxpbmUgMAogCWFsbGNhbnZzIHl2aWV3IG1vdmV0byBbbGluZGV4ICRzcGFuIDBdCiAgICAgfQpAQCAtNTczMSw3ICs2OTIzLDcgQEAKIH0KIAogcHJvYyBpbmNyZm9udCB7aW5jfSB7Ci0gICAgZ2xvYmFsIG1haW5mb250IHRleHRmb250IGN0ZXh0IGNhbnYgcGhhc2UgY2ZsaXN0IHNob3dyZWZzdG9wCisgICAgZ2xvYmFsIG1haW5mb250IHRleHRmb250IGN0ZXh0IGNhbnYgY2ZsaXN0IHNob3dyZWZzdG9wCiAgICAgZ2xvYmFsIHN0b3BwZWQgZW50cmllcyBmb250YXR0cgogCiAgICAgdW5tYXJrbWF0Y2hlcwpAQCAtNTc4Miw4ICs2OTc0LDcgQEAKIH0KIAogcHJvYyBnb3RvY29tbWl0IHt9IHsKLSAgICBnbG9iYWwgc2hhMXN0cmluZyBjdXJyZW50aWQgY29tbWl0cm93IHRhZ2lkcyBoZWFkaWRzCi0gICAgZ2xvYmFsIGRpc3BsYXlvcmRlciBudW1jb21taXRzIGN1cnZpZXcKKyAgICBnbG9iYWwgc2hhMXN0cmluZyB0YWdpZHMgaGVhZGlkcyBjdXJ2aWV3IHZhcmNpZAogCiAgICAgaWYgeyRzaGExc3RyaW5nID09IHt9CiAJfHwgKFtpbmZvIGV4aXN0cyBjdXJyZW50aWRdICYmICRzaGExc3RyaW5nID09ICRjdXJyZW50aWQpfSByZXR1cm4KQEAgLTU3OTQsMjMgKzY5ODUsMTggQEAKICAgICB9IGVsc2UgewogCXNldCBpZCBbc3RyaW5nIHRvbG93ZXIgJHNoYTFzdHJpbmddCiAJaWYge1tyZWdleHAge15bMC05YS1mXXs0LDM5fSR9ICRpZF19IHsKLQkgICAgc2V0IG1hdGNoZXMge30KLQkgICAgZm9yZWFjaCBpICRkaXNwbGF5b3JkZXIgewotCQlpZiB7W3N0cmluZyBtYXRjaCAkaWQqICRpXX0gewotCQkgICAgbGFwcGVuZCBtYXRjaGVzICRpCi0JCX0KLQkgICAgfQorCSAgICBzZXQgbWF0Y2hlcyBbYXJyYXkgbmFtZXMgdmFyY2lkICIkY3VydmlldywkaWQqIl0KIAkgICAgaWYgeyRtYXRjaGVzIG5lIHt9fSB7CiAJCWlmIHtbbGxlbmd0aCAkbWF0Y2hlc10gPiAxfSB7CiAJCSAgICBlcnJvcl9wb3B1cCBbbWMgIlNob3J0IFNIQTEgaWQgJXMgaXMgYW1iaWd1b3VzIiAkaWRdCiAJCSAgICByZXR1cm4KIAkJfQotCQlzZXQgaWQgW2xpbmRleCAkbWF0Y2hlcyAwXQorCQlzZXQgaWQgW2xpbmRleCBbc3BsaXQgW2xpbmRleCAkbWF0Y2hlcyAwXSAiLCJdIDFdCiAJICAgIH0KIAl9CiAgICAgfQotICAgIGlmIHtbaW5mbyBleGlzdHMgY29tbWl0cm93KCRjdXJ2aWV3LCRpZCldfSB7Ci0Jc2VsZWN0bGluZSAkY29tbWl0cm93KCRjdXJ2aWV3LCRpZCkgMQorICAgIGlmIHtbY29tbWl0aW52aWV3ICRpZCAkY3Vydmlld119IHsKKwlzZWxlY3RsaW5lIFtyb3dvZmNvbW1pdCAkaWRdIDEKIAlyZXR1cm4KICAgICB9CiAgICAgaWYge1tyZWdleHAge15bMC05YS1mQS1GXXs0LH0kfSAkc2hhMXN0cmluZ119IHsKQEAgLTU5MTksNyArNzEwNSw3IEBACiB9CiAKIHByb2MgbGluZWNsaWNrIHt4IHkgaWQgaXNuZXd9IHsKLSAgICBnbG9iYWwgY3RleHQgY29tbWl0aW5mbyBjaGlsZHJlbiBjYW52IHRoaWNrZXJsaW5lIGN1cnZpZXcgY29tbWl0cm93CisgICAgZ2xvYmFsIGN0ZXh0IGNvbW1pdGluZm8gY2hpbGRyZW4gY2FudiB0aGlja2VybGluZSBjdXJ2aWV3CiAKICAgICBpZiB7IVtpbmZvIGV4aXN0cyBjb21taXRpbmZvKCRpZCldICYmICFbZ2V0Y29tbWl0ICRpZF19IHJldHVybgogICAgIHVubWFya21hdGNoZXMKQEAgLTU5ODcsOSArNzE3Myw5IEBACiB9CiAKIHByb2Mgc2VsYnlpZCB7aWR9IHsKLSAgICBnbG9iYWwgY29tbWl0cm93IGN1cnZpZXcKLSAgICBpZiB7W2luZm8gZXhpc3RzIGNvbW1pdHJvdygkY3VydmlldywkaWQpXX0gewotCXNlbGVjdGxpbmUgJGNvbW1pdHJvdygkY3VydmlldywkaWQpIDEKKyAgICBnbG9iYWwgY3VydmlldworICAgIGlmIHtbY29tbWl0aW52aWV3ICRpZCAkY3Vydmlld119IHsKKwlzZWxlY3RsaW5lIFtyb3dvZmNvbW1pdCAkaWRdIDEKICAgICB9CiB9CiAKQEAgLTYwMDIsMjAgKzcxODgsMjMgQEAKIH0KIAogcHJvYyByb3dtZW51IHt4IHkgaWR9IHsKLSAgICBnbG9iYWwgcm93Y3R4bWVudSBjb21taXRyb3cgc2VsZWN0ZWRsaW5lIHJvd21lbnVpZCBjdXJ2aWV3CisgICAgZ2xvYmFsIHJvd2N0eG1lbnUgc2VsZWN0ZWRsaW5lIHJvd21lbnVpZCBjdXJ2aWV3CiAgICAgZ2xvYmFsIG51bGxpZCBudWxsaWQyIGZha2Vyb3dtZW51IG1haW5oZWFkCiAKICAgICBzdG9wZmluZGluZwogICAgIHNldCByb3dtZW51aWQgJGlkCi0gICAgaWYgeyFbaW5mbyBleGlzdHMgc2VsZWN0ZWRsaW5lXQotCXx8ICRjb21taXRyb3coJGN1cnZpZXcsJGlkKSBlcSAkc2VsZWN0ZWRsaW5lfSB7CisgICAgaWYgeyRzZWxlY3RlZGxpbmUgZXEge30gfHwgW3Jvd29mY29tbWl0ICRpZF0gZXEgJHNlbGVjdGVkbGluZX0gewogCXNldCBzdGF0ZSBkaXNhYmxlZAogICAgIH0gZWxzZSB7CiAJc2V0IHN0YXRlIG5vcm1hbAogICAgIH0KICAgICBpZiB7JGlkIG5lICRudWxsaWQgJiYgJGlkIG5lICRudWxsaWQyfSB7CiAJc2V0IG1lbnUgJHJvd2N0eG1lbnUKLQkkbWVudSBlbnRyeWNvbmZpZ3VyZSA3IC1sYWJlbCBbbWMgIlJlc2V0ICVzIGJyYW5jaCB0byBoZXJlIiAkbWFpbmhlYWRdCisJaWYgeyRtYWluaGVhZCBuZSB7fX0geworCSAgICAkbWVudSBlbnRyeWNvbmZpZ3VyZSA3IC1sYWJlbCBbbWMgIlJlc2V0ICVzIGJyYW5jaCB0byBoZXJlIiAkbWFpbmhlYWRdCisJfSBlbHNlIHsKKwkgICAgJG1lbnUgZW50cnljb25maWd1cmUgNyAtbGFiZWwgW21jICJEZXRhY2hlZCBoZWFkOiBjYW4ndCByZXNldCIgJG1haW5oZWFkXSAtc3RhdGUgZGlzYWJsZWQKKwl9CiAgICAgfSBlbHNlIHsKIAlzZXQgbWVudSAkZmFrZXJvd21lbnUKICAgICB9CkBAIC02MDI2LDE1ICs3MjE1LDE1IEBACiB9CiAKIHByb2MgZGlmZnZzc2VsIHtkaXJufSB7Ci0gICAgZ2xvYmFsIHJvd21lbnVpZCBzZWxlY3RlZGxpbmUgZGlzcGxheW9yZGVyCisgICAgZ2xvYmFsIHJvd21lbnVpZCBzZWxlY3RlZGxpbmUKIAotICAgIGlmIHshW2luZm8gZXhpc3RzIHNlbGVjdGVkbGluZV19IHJldHVybgorICAgIGlmIHskc2VsZWN0ZWRsaW5lIGVxIHt9fSByZXR1cm4KICAgICBpZiB7JGRpcm59IHsKLQlzZXQgb2xkaWQgW2xpbmRleCAkZGlzcGxheW9yZGVyICRzZWxlY3RlZGxpbmVdCisJc2V0IG9sZGlkIFtjb21taXRvbnJvdyAkc2VsZWN0ZWRsaW5lXQogCXNldCBuZXdpZCAkcm93bWVudWlkCiAgICAgfSBlbHNlIHsKIAlzZXQgb2xkaWQgJHJvd21lbnVpZAotCXNldCBuZXdpZCBbbGluZGV4ICRkaXNwbGF5b3JkZXIgJHNlbGVjdGVkbGluZV0KKwlzZXQgbmV3aWQgW2NvbW1pdG9ucm93ICRzZWxlY3RlZGxpbmVdCiAgICAgfQogICAgIGFkZHRvaGlzdG9yeSBbbGlzdCBkb3NlbGRpZmYgJG9sZGlkICRuZXdpZF0KICAgICBkb3NlbGRpZmYgJG9sZGlkICRuZXdpZApAQCAtNjIxMiwyNCArNzQwMSwzMCBAQAogfQogCiBwcm9jIHJlZHJhd3RhZ3Mge2lkfSB7Ci0gICAgZ2xvYmFsIGNhbnYgbGluZWh0YWcgY29tbWl0cm93IGlkcG9zIHNlbGVjdGVkbGluZSBjdXJ2aWV3Ci0gICAgZ2xvYmFsIGNhbnZ4bWF4IGlkZHJhd24KKyAgICBnbG9iYWwgY2FudiBsaW5laHRhZyBpZHBvcyBjdXJyZW50aWQgY3VydmlldyBjbWl0bGlzdGVkCisgICAgZ2xvYmFsIGNhbnZ4bWF4IGlkZHJhd24gY2lyY2xlaXRlbSBtYWluaGVhZGlkIGNpcmNsZWNvbG9ycwogCi0gICAgaWYgeyFbaW5mbyBleGlzdHMgY29tbWl0cm93KCRjdXJ2aWV3LCRpZCldfSByZXR1cm4KKyAgICBpZiB7IVtjb21taXRpbnZpZXcgJGlkICRjdXJ2aWV3XX0gcmV0dXJuCiAgICAgaWYgeyFbaW5mbyBleGlzdHMgaWRkcmF3bigkaWQpXX0gcmV0dXJuCi0gICAgZHJhd2NvbW1pdHMgJGNvbW1pdHJvdygkY3VydmlldywkaWQpCisgICAgc2V0IHJvdyBbcm93b2Zjb21taXQgJGlkXQorICAgIGlmIHskaWQgZXEgJG1haW5oZWFkaWR9IHsKKwlzZXQgb2ZpbGwgeWVsbG93CisgICAgfSBlbHNlIHsKKwlzZXQgb2ZpbGwgW2xpbmRleCAkY2lyY2xlY29sb3JzICRjbWl0bGlzdGVkKCRjdXJ2aWV3LCRpZCldCisgICAgfQorICAgICRjYW52IGl0ZW1jb25mICRjaXJjbGVpdGVtKCRyb3cpIC1maWxsICRvZmlsbAogICAgICRjYW52IGRlbGV0ZSB0YWcuJGlkCiAgICAgc2V0IHh0IFtldmFsIGRyYXd0YWdzICRpZCAkaWRwb3MoJGlkKV0KLSAgICAkY2FudiBjb29yZHMgJGxpbmVodGFnKCRjb21taXRyb3coJGN1cnZpZXcsJGlkKSkgJHh0IFtsaW5kZXggJGlkcG9zKCRpZCkgMl0KLSAgICBzZXQgdGV4dCBbJGNhbnYgaXRlbWNnZXQgJGxpbmVodGFnKCRjb21taXRyb3coJGN1cnZpZXcsJGlkKSkgLXRleHRdCi0gICAgc2V0IHhyIFtleHByIHskeHQgKyBbZm9udCBtZWFzdXJlIG1haW5mb250ICR0ZXh0XX1dCisgICAgJGNhbnYgY29vcmRzICRsaW5laHRhZygkcm93KSAkeHQgW2xpbmRleCAkaWRwb3MoJGlkKSAyXQorICAgIHNldCB0ZXh0IFskY2FudiBpdGVtY2dldCAkbGluZWh0YWcoJHJvdykgLXRleHRdCisgICAgc2V0IGZvbnQgWyRjYW52IGl0ZW1jZ2V0ICRsaW5laHRhZygkcm93KSAtZm9udF0KKyAgICBzZXQgeHIgW2V4cHIgeyR4dCArIFtmb250IG1lYXN1cmUgJGZvbnQgJHRleHRdfV0KICAgICBpZiB7JHhyID4gJGNhbnZ4bWF4fSB7CiAJc2V0IGNhbnZ4bWF4ICR4cgogCXNldGNhbnZzY3JvbGwKICAgICB9Ci0gICAgaWYge1tpbmZvIGV4aXN0cyBzZWxlY3RlZGxpbmVdCi0JJiYgJHNlbGVjdGVkbGluZSA9PSAkY29tbWl0cm93KCRjdXJ2aWV3LCRpZCl9IHsKLQlzZWxlY3RsaW5lICRzZWxlY3RlZGxpbmUgMAorICAgIGlmIHtbaW5mbyBleGlzdHMgY3VycmVudGlkXSAmJiAkY3VycmVudGlkID09ICRpZH0geworCW1ha2Vfc2Vjc2VsICRyb3cKICAgICB9CiB9CiAKQEAgLTYzNTUsOCArNzU1MCw4IEBACiB9CiAKIHByb2MgY2hlcnJ5cGljayB7fSB7Ci0gICAgZ2xvYmFsIHJvd21lbnVpZCBjdXJ2aWV3IGNvbW1pdHJvdwotICAgIGdsb2JhbCBtYWluaGVhZAorICAgIGdsb2JhbCByb3dtZW51aWQgY3VydmlldworICAgIGdsb2JhbCBtYWluaGVhZCBtYWluaGVhZGlkCiAKICAgICBzZXQgb2xkaGVhZCBbZXhlYyBnaXQgcmV2LXBhcnNlIEhFQURdCiAgICAgc2V0IGRoZWFkcyBbZGVzY2hlYWRzICRyb3dtZW51aWRdCkBAIC02MzgyLDIwICs3NTc3LDIyIEBACiAJcmV0dXJuCiAgICAgfQogICAgIGFkZG5ld2NoaWxkICRuZXdoZWFkICRvbGRoZWFkCi0gICAgaWYge1tpbmZvIGV4aXN0cyBjb21taXRyb3coJGN1cnZpZXcsJG9sZGhlYWQpXX0gewotCWluc2VydHJvdyAkY29tbWl0cm93KCRjdXJ2aWV3LCRvbGRoZWFkKSAkbmV3aGVhZAorICAgIGlmIHtbY29tbWl0aW52aWV3ICRvbGRoZWFkICRjdXJ2aWV3XX0geworCWluc2VydHJvdyAkbmV3aGVhZCAkb2xkaGVhZCAkY3VydmlldwogCWlmIHskbWFpbmhlYWQgbmUge319IHsKIAkgICAgbW92ZWhlYWQgJG5ld2hlYWQgJG1haW5oZWFkCiAJICAgIG1vdmVkaGVhZCAkbmV3aGVhZCAkbWFpbmhlYWQKIAl9CisJc2V0IG1haW5oZWFkaWQgJG5ld2hlYWQKIAlyZWRyYXd0YWdzICRvbGRoZWFkCiAJcmVkcmF3dGFncyAkbmV3aGVhZAorCXNlbGJ5aWQgJG5ld2hlYWQKICAgICB9CiAgICAgbm90YnVzeSBjaGVycnlwaWNrCiB9CiAKIHByb2MgcmVzZXRoZWFkIHt9IHsKLSAgICBnbG9iYWwgbWFpbmhlYWRpZCBtYWluaGVhZCByb3dtZW51aWQgY29uZmlybV9vayByZXNldHR5cGUKKyAgICBnbG9iYWwgbWFpbmhlYWQgcm93bWVudWlkIGNvbmZpcm1fb2sgcmVzZXR0eXBlCiAKICAgICBzZXQgY29uZmlybV9vayAwCiAgICAgc2V0IHcgIi5jb25maXJtcmVzZXQiCkBAIC02NDI4LDEyICs3NjI1LDEzIEBACiAgICAgdGt3YWl0IHdpbmRvdyAkdwogICAgIGlmIHshJGNvbmZpcm1fb2t9IHJldHVybgogICAgIGlmIHtbY2F0Y2gge3NldCBmZCBbb3BlbiBcCi0JICAgIFtsaXN0IHwgc2ggLWMgImdpdCByZXNldCAtLSRyZXNldHR5cGUgJHJvd21lbnVpZCAyPiYxIl0gcl19IGVycl19IHsKKwkgICAgW2xpc3QgfCBnaXQgcmVzZXQgLS0kcmVzZXR0eXBlICRyb3dtZW51aWQgMj5AMV0gcl19IGVycl19IHsKIAllcnJvcl9wb3B1cCAkZXJyCiAgICAgfSBlbHNlIHsKIAlkb2hpZGVsb2NhbGNoYW5nZXMKIAlmaWxlcnVuICRmZCBbbGlzdCByZWFkcmVzZXRzdGF0ICRmZF0KIAlub3didXN5IHJlc2V0IFttYyAiUmVzZXR0aW5nIl0KKwlzZWxieWlkICRyb3dtZW51aWQKICAgICB9CiB9CiAKQEAgLTY0ODUsMjggKzc2ODMsNDggQEAKIH0KIAogcHJvYyBjb2JyYW5jaCB7fSB7Ci0gICAgZ2xvYmFsIGhlYWRtZW51aWQgaGVhZG1lbnVoZWFkIG1haW5oZWFkIGhlYWRpZHMKKyAgICBnbG9iYWwgaGVhZG1lbnVpZCBoZWFkbWVudWhlYWQgaGVhZGlkcwogICAgIGdsb2JhbCBzaG93bG9jYWxjaGFuZ2VzIG1haW5oZWFkaWQKIAogICAgICMgY2hlY2sgdGhlIHRyZWUgaXMgY2xlYW4gZmlyc3Q/PwotICAgIHNldCBvbGRtYWluaGVhZCAkbWFpbmhlYWQKICAgICBub3didXN5IGNoZWNrb3V0IFttYyAiQ2hlY2tpbmcgb3V0Il0KICAgICB1cGRhdGUKICAgICBkb2hpZGVsb2NhbGNoYW5nZXMKICAgICBpZiB7W2NhdGNoIHsKLQlleGVjIGdpdCBjaGVja291dCAtcSAkaGVhZG1lbnVoZWFkCisJc2V0IGZkIFtvcGVuIFtsaXN0IHwgZ2l0IGNoZWNrb3V0ICRoZWFkbWVudWhlYWQgMj5AMV0gcl0KICAgICB9IGVycl19IHsKIAlub3RidXN5IGNoZWNrb3V0CiAJZXJyb3JfcG9wdXAgJGVycgotICAgIH0gZWxzZSB7Ci0Jbm90YnVzeSBjaGVja291dAotCXNldCBtYWluaGVhZCAkaGVhZG1lbnVoZWFkCi0Jc2V0IG1haW5oZWFkaWQgJGhlYWRtZW51aWQKLQlpZiB7W2luZm8gZXhpc3RzIGhlYWRpZHMoJG9sZG1haW5oZWFkKV19IHsKLQkgICAgcmVkcmF3dGFncyAkaGVhZGlkcygkb2xkbWFpbmhlYWQpCisJaWYgeyRzaG93bG9jYWxjaGFuZ2VzfSB7CisJICAgIGRvZGlmZmluZGV4CiAJfQotCXJlZHJhd3RhZ3MgJGhlYWRtZW51aWQKKyAgICB9IGVsc2UgeworCWZpbGVydW4gJGZkIFtsaXN0IHJlYWRjaGVja291dHN0YXQgJGZkICRoZWFkbWVudWhlYWQgJGhlYWRtZW51aWRdCiAgICAgfQorfQorCitwcm9jIHJlYWRjaGVja291dHN0YXQge2ZkIG5ld2hlYWQgbmV3aGVhZGlkfSB7CisgICAgZ2xvYmFsIG1haW5oZWFkIG1haW5oZWFkaWQgaGVhZGlkcyBzaG93bG9jYWxjaGFuZ2VzIHByb2dyZXNzY29vcmRzCisKKyAgICBpZiB7W2dldHMgJGZkIGxpbmVdID49IDB9IHsKKwlpZiB7W3JlZ2V4cCB7KFswLTldKyklIFwoKFswLTldKykvKFswLTldKylcKX0gJGxpbmUgbWF0Y2ggcCBtIG5dfSB7CisJICAgIHNldCBwcm9ncmVzc2Nvb3JkcyBbbGlzdCAwIFtleHByIHsxLjAgKiAkbSAvICRufV1dCisJICAgIGFkanVzdHByb2dyZXNzCisJfQorCXJldHVybiAxCisgICAgfQorICAgIHNldCBwcm9ncmVzc2Nvb3JkcyB7MCAwfQorICAgIGFkanVzdHByb2dyZXNzCisgICAgbm90YnVzeSBjaGVja291dAorICAgIGlmIHtbY2F0Y2gge2Nsb3NlICRmZH0gZXJyXX0geworCWVycm9yX3BvcHVwICRlcnIKKyAgICB9CisgICAgc2V0IG9sZG1haW5pZCAkbWFpbmhlYWRpZAorICAgIHNldCBtYWluaGVhZCAkbmV3aGVhZAorICAgIHNldCBtYWluaGVhZGlkICRuZXdoZWFkaWQKKyAgICByZWRyYXd0YWdzICRvbGRtYWluaWQKKyAgICByZWRyYXd0YWdzICRuZXdoZWFkaWQKKyAgICBzZWxieWlkICRuZXdoZWFkaWQKICAgICBpZiB7JHNob3dsb2NhbGNoYW5nZXN9IHsKIAlkb2RpZmZpbmRleAogICAgIH0KQEAgLTY2MjAsMTMgKzc4MzgsMTMgQEAKIAogcHJvYyByZWZpbGxfcmVmbGlzdCB7fSB7CiAgICAgZ2xvYmFsIHJlZmxpc3QgcmVmbGlzdGZpbHRlciBzaG93cmVmc3RvcCBoZWFkaWRzIHRhZ2lkcyBvdGhlcnJlZmlkcwotICAgIGdsb2JhbCBjb21taXRyb3cgY3VydmlldyBjb21taXRpbnRlcmVzdAorICAgIGdsb2JhbCBjdXJ2aWV3IGNvbW1pdGludGVyZXN0CiAKICAgICBpZiB7IVtpbmZvIGV4aXN0cyBzaG93cmVmc3RvcF0gfHwgIVt3aW5mbyBleGlzdHMgJHNob3dyZWZzdG9wXX0gcmV0dXJuCiAgICAgc2V0IHJlZnMge30KICAgICBmb3JlYWNoIG4gW2FycmF5IG5hbWVzIGhlYWRpZHNdIHsKIAlpZiB7W3N0cmluZyBtYXRjaCAkcmVmbGlzdGZpbHRlciAkbl19IHsKLQkgICAgaWYge1tpbmZvIGV4aXN0cyBjb21taXRyb3coJGN1cnZpZXcsJGhlYWRpZHMoJG4pKV19IHsKKwkgICAgaWYge1tjb21taXRpbnZpZXcgJGhlYWRpZHMoJG4pICRjdXJ2aWV3XX0gewogCQlsYXBwZW5kIHJlZnMgW2xpc3QgJG4gSF0KIAkgICAgfSBlbHNlIHsKIAkJc2V0IGNvbW1pdGludGVyZXN0KCRoZWFkaWRzKCRuKSkge3J1biByZWZpbGxfcmVmbGlzdH0KQEAgLTY2MzUsNyArNzg1Myw3IEBACiAgICAgfQogICAgIGZvcmVhY2ggbiBbYXJyYXkgbmFtZXMgdGFnaWRzXSB7CiAJaWYge1tzdHJpbmcgbWF0Y2ggJHJlZmxpc3RmaWx0ZXIgJG5dfSB7Ci0JICAgIGlmIHtbaW5mbyBleGlzdHMgY29tbWl0cm93KCRjdXJ2aWV3LCR0YWdpZHMoJG4pKV19IHsKKwkgICAgaWYge1tjb21taXRpbnZpZXcgJHRhZ2lkcygkbikgJGN1cnZpZXddfSB7CiAJCWxhcHBlbmQgcmVmcyBbbGlzdCAkbiBUXQogCSAgICB9IGVsc2UgewogCQlzZXQgY29tbWl0aW50ZXJlc3QoJHRhZ2lkcygkbikpIHtydW4gcmVmaWxsX3JlZmxpc3R9CkBAIC02NjQ0LDcgKzc4NjIsNyBAQAogICAgIH0KICAgICBmb3JlYWNoIG4gW2FycmF5IG5hbWVzIG90aGVycmVmaWRzXSB7CiAJaWYge1tzdHJpbmcgbWF0Y2ggJHJlZmxpc3RmaWx0ZXIgJG5dfSB7Ci0JICAgIGlmIHtbaW5mbyBleGlzdHMgY29tbWl0cm93KCRjdXJ2aWV3LCRvdGhlcnJlZmlkcygkbikpXX0geworCSAgICBpZiB7W2NvbW1pdGludmlldyAkb3RoZXJyZWZpZHMoJG4pICRjdXJ2aWV3XX0gewogCQlsYXBwZW5kIHJlZnMgW2xpc3QgJG4gb10KIAkgICAgfSBlbHNlIHsKIAkJc2V0IGNvbW1pdGludGVyZXN0KCRvdGhlcnJlZmlkcygkbikpIHtydW4gcmVmaWxsX3JlZmxpc3R9CkBAIC03Nzg4LDcgKzkwMDYsNyBAQAogfQogCiBwcm9jIHJlcmVhZHJlZnMge30gewotICAgIGdsb2JhbCBpZHRhZ3MgaWRoZWFkcyBpZG90aGVycmVmcyBtYWluaGVhZAorICAgIGdsb2JhbCBpZHRhZ3MgaWRoZWFkcyBpZG90aGVycmVmcyBtYWluaGVhZGlkCiAKICAgICBzZXQgcmVmaWRzIFtjb25jYXQgW2FycmF5IG5hbWVzIGlkdGFnc10gXAogCQkgICAgW2FycmF5IG5hbWVzIGlkaGVhZHNdIFthcnJheSBuYW1lcyBpZG90aGVycmVmc11dCkBAIC03Nzk3LDE5ICs5MDE1LDIxIEBACiAJICAgIHNldCByZWYoJGlkKSBbbGlzdHJlZnMgJGlkXQogCX0KICAgICB9Ci0gICAgc2V0IG9sZG1haW5oZWFkICRtYWluaGVhZAorICAgIHNldCBvbGRtYWluaGVhZCAkbWFpbmhlYWRpZAogICAgIHJlYWRyZWZzCiAgICAgY2hhbmdlZHJlZnMKICAgICBzZXQgcmVmaWRzIFtsc29ydCAtdW5pcXVlIFtjb25jYXQgJHJlZmlkcyBbYXJyYXkgbmFtZXMgaWR0YWdzXSBcCiAJCQlbYXJyYXkgbmFtZXMgaWRoZWFkc10gW2FycmF5IG5hbWVzIGlkb3RoZXJyZWZzXV1dCiAgICAgZm9yZWFjaCBpZCAkcmVmaWRzIHsKIAlzZXQgdiBbbGlzdHJlZnMgJGlkXQotCWlmIHshW2luZm8gZXhpc3RzIHJlZigkaWQpXSB8fCAkcmVmKCRpZCkgIT0gJHYgfHwKLQkgICAgKCRpZCBlcSAkb2xkbWFpbmhlYWQgJiYgJGlkIG5lICRtYWluaGVhZCkgfHwKLQkgICAgKCRpZCBlcSAkbWFpbmhlYWQgJiYgJGlkIG5lICRvbGRtYWluaGVhZCl9IHsKKwlpZiB7IVtpbmZvIGV4aXN0cyByZWYoJGlkKV0gfHwgJHJlZigkaWQpICE9ICR2fSB7CiAJICAgIHJlZHJhd3RhZ3MgJGlkCiAJfQogICAgIH0KKyAgICBpZiB7JG9sZG1haW5oZWFkIG5lICRtYWluaGVhZGlkfSB7CisJcmVkcmF3dGFncyAkb2xkbWFpbmhlYWQKKwlyZWRyYXd0YWdzICRtYWluaGVhZGlkCisgICAgfQogICAgIHJ1biByZWZpbGxfcmVmbGlzdAogfQogCkBAIC03ODU4LDkgKzkwNzgsMTUgQEAKIAogcHJvYyBkb3F1aXQge30gewogICAgIGdsb2JhbCBzdG9wcGVkCisgICAgZ2xvYmFsIGdpdGt0bXBkaXIKKwogICAgIHNldCBzdG9wcGVkIDEwMAogICAgIHNhdmVzdHVmZiAuCiAgICAgZGVzdHJveSAuCisKKyAgICBpZiB7W2luZm8gZXhpc3RzIGdpdGt0bXBkaXJdfSB7CisJY2F0Y2gge2ZpbGUgZGVsZXRlIC1mb3JjZSAkZ2l0a3RtcGRpcn0KKyAgICB9CiB9CiAKIHByb2MgbWtmb250ZGlzcCB7Zm9udCB0b3Agd2hpY2h9IHsKQEAgLTc5ODksNyArOTIxNSw3IEBACiAgICAgZ2xvYmFsIG1heHdpZHRoIG1heGdyYXBocGN0CiAgICAgZ2xvYmFsIG9sZHByZWZzIHByZWZzdG9wIHNob3duZWFydGFncyBzaG93bG9jYWxjaGFuZ2VzCiAgICAgZ2xvYmFsIGJnY29sb3IgZmdjb2xvciBjdGV4dCBkaWZmY29sb3JzIHNlbGVjdGJnY29sb3IKLSAgICBnbG9iYWwgdGFic3RvcCBsaW1pdGRpZmZzIGF1dG9zZWxlY3QKKyAgICBnbG9iYWwgdGFic3RvcCBsaW1pdGRpZmZzIGF1dG9zZWxlY3QgZXh0ZGlmZnRvb2wKIAogICAgIHNldCB0b3AgLmdpdGtwcmVmcwogICAgIHNldCBwcmVmc3RvcCAkdG9wCkBAIC04MDQxLDYgKzkyNjcsMTUgQEAKICAgICBwYWNrICR0b3AubGRpZmYuYiAkdG9wLmxkaWZmLmwgLXNpZGUgbGVmdAogICAgIGdyaWQgeCAkdG9wLmxkaWZmIC1zdGlja3kgdwogCisgICAgZW50cnkgJHRvcC5leHRkaWZmdCAtdGV4dHZhcmlhYmxlIGV4dGRpZmZ0b29sCisgICAgZnJhbWUgJHRvcC5leHRkaWZmZgorICAgIGxhYmVsICR0b3AuZXh0ZGlmZmYubCAtdGV4dCBbbWMgIkV4dGVybmFsIGRpZmYgdG9vbCIgXSAtZm9udCBvcHRpb25mb250IFwKKwktcGFkeCAxMAorICAgIGJ1dHRvbiAkdG9wLmV4dGRpZmZmLmIgLXRleHQgW21jICJDaG9vc2UuLi4iXSAtZm9udCBvcHRpb25mb250IFwKKwktY29tbWFuZCBjaG9vc2VfZXh0ZGlmZgorICAgIHBhY2sgJHRvcC5leHRkaWZmZi5sICR0b3AuZXh0ZGlmZmYuYiAtc2lkZSBsZWZ0CisgICAgZ3JpZCB4ICR0b3AuZXh0ZGlmZmYgJHRvcC5leHRkaWZmdCAtc3RpY2t5IHcKKwogICAgIGxhYmVsICR0b3AuY2Rpc3AgLXRleHQgW21jICJDb2xvcnM6IHByZXNzIHRvIGNob29zZSJdCiAgICAgZ3JpZCAkdG9wLmNkaXNwIC0gLXN0aWNreSB3IC1wYWR5IDEwCiAgICAgbGFiZWwgJHRvcC5iZyAtcGFkeCA0MCAtcmVsaWVmIHN1bmsgLWJhY2tncm91bmQgJGJnY29sb3IKQEAgLTgwODgsNiArOTMyMywxNSBAQAogICAgIGJpbmQgJHRvcCA8VmlzaWJpbGl0eT4gImZvY3VzICR0b3AuYnV0cy5vayIKIH0KIAorcHJvYyBjaG9vc2VfZXh0ZGlmZiB7fSB7CisgICAgZ2xvYmFsIGV4dGRpZmZ0b29sCisKKyAgICBzZXQgcHJvZyBbdGtfZ2V0T3BlbkZpbGUgLXRpdGxlICJFeHRlcm5hbCBkaWZmIHRvb2wiIC1tdWx0aXBsZSBmYWxzZV0KKyAgICBpZiB7JHByb2cgbmUge319IHsKKwlzZXQgZXh0ZGlmZnRvb2wgJHByb2cKKyAgICB9Cit9CisKIHByb2MgY2hvb3NlY29sb3Ige3YgdmkgdyB4IGNtZH0gewogICAgIGdsb2JhbCAkdgogCkBAIC04NDc5LDcgKzk3MjMsNiBAQAogfQogCiAjIGRlZmF1bHRzLi4uCi1zZXQgZGF0ZW1vZGUgMAogc2V0IHdyY29tY21kICJnaXQgZGlmZi10cmVlIC0tc3RkaW4gLXAgLS1wcmV0dHkiCiAKIHNldCBnaXRlbmNvZGluZyB7fQpAQCAtODUxNiw2ICs5NzU5LDggQEAKIHNldCBkYXRldGltZWZvcm1hdCAiJVktJW0tJWQgJUg6JU06JVMiCiBzZXQgYXV0b3NlbGVjdCAxCiAKK3NldCBleHRkaWZmdG9vbCAibWVsZCIKKwogc2V0IGNvbG9ycyB7Z3JlZW4gcmVkIGJsdWUgbWFnZW50YSBkYXJrZ3JleSBicm93biBvcmFuZ2V9CiBzZXQgYmdjb2xvciB3aGl0ZQogc2V0IGZnY29sb3IgYmxhY2sKQEAgLTg1MjQsNiArOTc2OSw4IEBACiBzZXQgaWdub3Jlc3BhY2UgMAogc2V0IHNlbGVjdGJnY29sb3IgZ3JheTg1CiAKK3NldCBjaXJjbGVjb2xvcnMge3doaXRlIGJsdWUgZ3JheSBibHVlIGJsdWV9CisKICMjIEZvciBtc2djYXQgbG9hZGluZywgZmlyc3QgbG9jYXRlIHRoZSBpbnN0YWxsYXRpb24gbG9jYXRpb24uCiBpZiB7IFtpbmZvIGV4aXN0cyA6OmVudihHSVRLX01TR1NESVIpXSB9IHsKICAgICAjIyBNc2dzZGlyIHdhcyBtYW51YWxseSBzZXQgaW4gdGhlIGVudmlyb25tZW50LgpAQCAtODU3MCw3ICs5ODE3LDYgQEAKICAgICBleGl0IDEKIH0KIAotc2V0IG1lcmdlb25seSAwCiBzZXQgcmV2dHJlZWFyZ3Mge30KIHNldCBjbWRsaW5lX2ZpbGVzIHt9CiBzZXQgaSAwCkBAIC04NTc4LDExICs5ODI0LDYgQEAKIGZvcmVhY2ggYXJnICRhcmd2IHsKICAgICBzd2l0Y2ggLWdsb2IgLS0gJGFyZyB7CiAJIiIgeyB9Ci0JIi1kIiB7IHNldCBkYXRlbW9kZSAxIH0KLQkiLS1tZXJnZSIgewotCSAgICBzZXQgbWVyZ2Vvbmx5IDEKLQkgICAgbGFwcGVuZCByZXZ0cmVlYXJncyAkYXJnCi0JfQogCSItLSIgewogCSAgICBzZXQgY21kbGluZV9maWxlcyBbbHJhbmdlICRhcmd2IFtleHByIHskaSArIDF9XSBlbmRdCiAJICAgIGJyZWFrCkBAIC04NTk4LDcgKzk4MzksNyBAQAogfQogCiBpZiB7JGkgPj0gW2xsZW5ndGggJGFyZ3ZdICYmICRyZXZ0cmVlYXJncyBuZSB7fX0gewotICAgICMgbm8gLS0gb24gY29tbWFuZCBsaW5lLCBidXQgc29tZSBhcmd1bWVudHMgKG90aGVyIHRoYW4gLWQpCisgICAgIyBubyAtLSBvbiBjb21tYW5kIGxpbmUsIGJ1dCBzb21lIGFyZ3VtZW50cyAob3RoZXIgdGhhbiAtLWFyZ3NjbWQpCiAgICAgaWYge1tjYXRjaCB7CiAJc2V0IGYgW2V2YWwgZXhlYyBnaXQgcmV2LXBhcnNlIC0tbm8tcmV2cyAtLW5vLWZsYWdzICRyZXZ0cmVlYXJnc10KIAlzZXQgY21kbGluZV9maWxlcyBbc3BsaXQgJGYgIlxuIl0KQEAgLTg2MjYsNDIgKzk4NjcsOSBAQAogICAgIH0KIH0KIAotaWYgeyRtZXJnZW9ubHl9IHsKLSAgICAjIGZpbmQgdGhlIGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXMKLSAgICBzZXQgbWxpc3Qge30KLSAgICBzZXQgbnJfdW5tZXJnZWQgMAotICAgIGlmIHtbY2F0Y2ggewotCXNldCBmZCBbb3BlbiAifCBnaXQgbHMtZmlsZXMgLXUiIHJdCi0gICAgfSBlcnJdfSB7Ci0Jc2hvd19lcnJvciB7fSAuICJbbWMgIkNvdWxkbid0IGdldCBsaXN0IG9mIHVubWVyZ2VkIGZpbGVzOiJdICRlcnIiCi0JZXhpdCAxCi0gICAgfQotICAgIHdoaWxlIHtbZ2V0cyAkZmQgbGluZV0gPj0gMH0gewotCXNldCBpIFtzdHJpbmcgZmlyc3QgIlx0IiAkbGluZV0KLQlpZiB7JGkgPCAwfSBjb250aW51ZQotCXNldCBmbmFtZSBbc3RyaW5nIHJhbmdlICRsaW5lIFtleHByIHskaSsxfV0gZW5kXQotCWlmIHtbbHNlYXJjaCAtZXhhY3QgJG1saXN0ICRmbmFtZV0gPj0gMH0gY29udGludWUKLQlpbmNyIG5yX3VubWVyZ2VkCi0JaWYgeyRjbWRsaW5lX2ZpbGVzIGVxIHt9IHx8IFtwYXRoX2ZpbHRlciAkY21kbGluZV9maWxlcyAkZm5hbWVdfSB7Ci0JICAgIGxhcHBlbmQgbWxpc3QgJGZuYW1lCi0JfQotICAgIH0KLSAgICBjYXRjaCB7Y2xvc2UgJGZkfQotICAgIGlmIHskbWxpc3QgZXEge319IHsKLQlpZiB7JG5yX3VubWVyZ2VkID09IDB9IHsKLQkgICAgc2hvd19lcnJvciB7fSAuIFttYyAiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dFwKLQkJCSAgICAgbm8gZmlsZXMgYXJlIHVubWVyZ2VkLiJdCi0JfSBlbHNlIHsKLQkgICAgc2hvd19lcnJvciB7fSAuIFttYyAiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dFwKLQkJCSAgICAgbm8gdW5tZXJnZWQgZmlsZXMgYXJlIHdpdGhpbiBmaWxlIGxpbWl0LiJdCi0JfQotCWV4aXQgMQotICAgIH0KLSAgICBzZXQgY21kbGluZV9maWxlcyAkbWxpc3QKLX0KLQogc2V0IG51bGxpZCAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIKIHNldCBudWxsaWQyICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIgorc2V0IG51bGxmaWxlICIvZGV2L251bGwiCiAKIHNldCBoYXZlX3RrODUgW2V4cHIge1twYWNrYWdlIHZjb21wYXJlICR0a192ZXJzaW9uICI4LjUiXSA+PSAwfV0KIApAQCAtODY5MywxMiArOTkwMSwxMyBAQAogc2V0IHZpZXdhcmdzKDApIHt9CiBzZXQgdmlld2FyZ3NjbWQoMCkge30KIAorc2V0IHNlbGVjdGVkbGluZSB7fQorc2V0IG51bWNvbW1pdHMgMAorc2V0IGxvZ2luc3RhbmNlIDAKIHNldCBjbWRsaW5lb2sgMAogc2V0IHN0b3BwZWQgMAogc2V0IHN0dWZmc2F2ZWQgMAogc2V0IHBhdGNobnVtIDAKLXNldCBsb2NhbGlyb3cgLTEKLXNldCBsb2NhbGZyb3cgLTEKIHNldCBsc2VyaWFsIDAKIHNldCBpc3dvcmt0cmVlIFtleHByIHtbZXhlYyBnaXQgcmV2LXBhcnNlIC0taXMtaW5zaWRlLXdvcmstdHJlZV0gPT0gInRydWUifV0KIHNldGNvb3JkcwpAQCAtODcxOCw2ICs5OTI3LDcgQEAKICAgICBzZXQgdmlld2FyZ3MoMSkgJHJldnRyZWVhcmdzCiAgICAgc2V0IHZpZXdhcmdzY21kKDEpICRyZXZ0cmVlYXJnc2NtZAogICAgIHNldCB2aWV3cGVybSgxKSAwCisgICAgc2V0IHZkYXRlbW9kZSgxKSAwCiAgICAgYWRkdmlld21lbnUgMQogICAgIC5iYXIudmlldyBlbnRyeWNvbmYgW21jICJFZGl0IHZpZXcuLi4iXSAtc3RhdGUgbm9ybWFsCiAgICAgLmJhci52aWV3IGVudHJ5Y29uZiBbbWMgIkRlbGV0ZSB2aWV3Il0gLXN0YXRlIG5vcm1hbApkaWZmIC0tZ2l0IGEvZ2l0ay1naXQvcG8vZGUucG8gYi9naXRrLWdpdC9wby9kZS5wbwppbmRleCA1ZWUyZmNhLi5iOTg2N2JmIDEwMDY0NAotLS0gYS9naXRrLWdpdC9wby9kZS5wbworKysgYi9naXRrLWdpdC9wby9kZS5wbwpAQCAtNywyNDkgKzcsMjUzIEBACiBtc2dzdHIgIiIKICJQcm9qZWN0LUlkLVZlcnNpb246IGdpdC1ndWlcbiIKICJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMDgtMDEtMDkgMjI6MjArMDEwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMDgtMDEtMDkgMjI6MjErMDEwMFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA4LTA1LTAxIDExOjU0KzAyMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA4LTA1LTAyIDIxOjEyKzAyMDBcbiIKICJMYXN0LVRyYW5zbGF0b3I6IENocmlzdGlhbiBTdGltbWluZyA8c3RpbW1pbmdAdHVoaC5kZT5cbiIKICJMYW5ndWFnZS1UZWFtOiBHZXJtYW5cbiIKICJNSU1FLVZlcnNpb246IDEuMFxuIgogIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgogIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKIAotIzogZ2l0azoxMDEKKyM6IGdpdGs6MTExCiBtc2dpZCAiRXJyb3IgZXhlY3V0aW5nIGdpdCByZXYtbGlzdDoiCiBtc2dzdHIgIkZlaGxlciBiZWltIEF1c2bDvGhyZW4gdm9uIGdpdC1yZXYtbGlzdDoiCiAKLSM6IGdpdGs6MTE0CisjOiBnaXRrOjEyNAogbXNnaWQgIlJlYWRpbmciCiBtc2dzdHIgIkxlc2VuIgogCi0jOiBnaXRrOjE0MSBnaXRrOjIxNDMKKyM6IGdpdGs6MTUxIGdpdGs6MjE5MQogbXNnaWQgIlJlYWRpbmcgY29tbWl0cy4uLiIKIG1zZ3N0ciAiVmVyc2lvbmVuIGxlc2VuLi4uIgogCi0jOiBnaXRrOjI2NAorIzogZ2l0azoyNzUKIG1zZ2lkICJDYW4ndCBwYXJzZSBnaXQgbG9nIG91dHB1dDoiCi1tc2dzdHIgIkdpdCBsb2cgQXVzZ2FiZSBrYW5uIG5pY2h0IGVya2FubnQgd2VyZGVuOiIKK21zZ3N0ciAiQXVzZ2FiZSB2b24gZ2l0LWxvZyBrYW5uIG5pY2h0IGVya2FubnQgd2VyZGVuOiIKIAotIzogZ2l0azozNzUgZ2l0azoyMTQ3CisjOiBnaXRrOjM4NiBnaXRrOjIxOTUKIG1zZ2lkICJObyBjb21taXRzIHNlbGVjdGVkIgogbXNnc3RyICJLZWluZSBWZXJzaW9uZW4gYXVzZ2V3w6RobHQuIgogCi0jOiBnaXRrOjQ4NgorIzogZ2l0azo1MDAKIG1zZ2lkICJObyBjb21taXQgaW5mb3JtYXRpb24gYXZhaWxhYmxlIgogbXNnc3RyICJLZWluZSBWZXJzaW9uc2luZm9ybWF0aW9uIHZlcmbDvGdiYXIiCiAKLSM6IGdpdGs6NTg1IGdpdGs6NjA3IGdpdGs6MTkwOCBnaXRrOjYzNjYgZ2l0azo3ODY2IGdpdGs6ODAyMAorIzogZ2l0azo1OTkgZ2l0azo2MjEgZ2l0azoxOTU1IGdpdGs6NjQyNCBnaXRrOjc5MjQgZ2l0azo4MDgzCiBtc2dpZCAiT0siCiBtc2dzdHIgIk9rIgogCi0jOiBnaXRrOjYwOSBnaXRrOjE5MDkgZ2l0azo2MDQ2IGdpdGs6NjExNyBnaXRrOjYyMTggZ2l0azo2MjY0IGdpdGs6NjM2OAotIzogZ2l0azo3ODY3IGdpdGs6ODAyMQorIzogZ2l0azo2MjMgZ2l0azoxOTU2IGdpdGs6NjEwOCBnaXRrOjYxNzkgZ2l0azo2Mjc2IGdpdGs6NjMyMiBnaXRrOjY0MjYKKyM6IGdpdGs6NzkyNSBnaXRrOjgwODQKIG1zZ2lkICJDYW5jZWwiCiBtc2dzdHIgIkFiYnJlY2hlbiIKIAotIzogZ2l0azo2NDYKKyM6IGdpdGs6NjYxCiBtc2dpZCAiRmlsZSIKIG1zZ3N0ciAiRGF0ZWkiCiAKLSM6IGdpdGs6NjQ4CisjOiBnaXRrOjY2MwogbXNnaWQgIlVwZGF0ZSIKIG1zZ3N0ciAiQWt0dWFsaXNpZXJlbiIKIAotIzogZ2l0azo2NDkKKyM6IGdpdGs6NjY0CiBtc2dpZCAiUmVyZWFkIHJlZmVyZW5jZXMiCiBtc2dzdHIgIlp3ZWlnZSBuZXUgbGFkZW4iCiAKLSM6IGdpdGs6NjUwCisjOiBnaXRrOjY2NQogbXNnaWQgIkxpc3QgcmVmZXJlbmNlcyIKLW1zZ3N0ciAiWndlaWdlIGF1Zmxpc3RlbiIKK21zZ3N0ciAiWndlaWdlL01hcmtpZXJ1bmdlbiBhdWZsaXN0ZW4iCiAKLSM6IGdpdGs6NjUxCisjOiBnaXRrOjY2NgogbXNnaWQgIlF1aXQiCiBtc2dzdHIgIkJlZW5kZW4iCiAKLSM6IGdpdGs6NjUzCisjOiBnaXRrOjY2OAogbXNnaWQgIkVkaXQiCiBtc2dzdHIgIkJlYXJiZWl0ZW4iCiAKLSM6IGdpdGs6NjU0CisjOiBnaXRrOjY2OQogbXNnaWQgIlByZWZlcmVuY2VzIgogbXNnc3RyICJFaW5zdGVsbHVuZ2VuIgogCi0jOiBnaXRrOjY1NworIzogZ2l0azo2NzIgZ2l0azoxODkyCiBtc2dpZCAiVmlldyIKIG1zZ3N0ciAiQW5zaWNodCIKIAotIzogZ2l0azo2NTgKKyM6IGdpdGs6NjczCiBtc2dpZCAiTmV3IHZpZXcuLi4iCiBtc2dzdHIgIk5ldWUgQW5zaWNodC4uLiIKIAotIzogZ2l0azo2NTkgZ2l0azoyMDg1IGdpdGs6ODY1MQorIzogZ2l0azo2NzQgZ2l0azoyMTMzIGdpdGs6ODcyMwogbXNnaWQgIkVkaXQgdmlldy4uLiIKIG1zZ3N0ciAiQW5zaWNodCBiZWFyYmVpdGVuLi4uIgogCi0jOiBnaXRrOjY2MSBnaXRrOjIwODYgZ2l0azo4NjUyCisjOiBnaXRrOjY3NiBnaXRrOjIxMzQgZ2l0azo4NzI0CiBtc2dpZCAiRGVsZXRlIHZpZXciCiBtc2dzdHIgIkFuc2ljaHQgbMO2c2NoZW4iCiAKLSM6IGdpdGs6NjYzCisjOiBnaXRrOjY3OAogbXNnaWQgIkFsbCBmaWxlcyIKIG1zZ3N0ciAiQWxsZSBEYXRlaWVuIgogCi0jOiBnaXRrOjY2NworIzogZ2l0azo2ODIKIG1zZ2lkICJIZWxwIgogbXNnc3RyICJIaWxmZSIKIAotIzogZ2l0azo2NjggZ2l0azoxMjgwCisjOiBnaXRrOjY4MyBnaXRrOjEzMTcKIG1zZ2lkICJBYm91dCBnaXRrIgogbXNnc3RyICLDnGJlciBnaXRrIgogCi0jOiBnaXRrOjY2OQorIzogZ2l0azo2ODQKIG1zZ2lkICJLZXkgYmluZGluZ3MiCiBtc2dzdHIgIlRhc3RlbmvDvHJ6ZWwiCiAKLSM6IGdpdGs6NzI2CisjOiBnaXRrOjc0MQogbXNnaWQgIlNIQTEgSUQ6ICIKIG1zZ3N0ciAiU0hBMToiCiAKLSM6IGdpdGs6Nzc2CisjOiBnaXRrOjc5MQogbXNnaWQgIkZpbmQiCiBtc2dzdHIgIlN1Y2hlIgogCi0jOiBnaXRrOjc3NworIzogZ2l0azo3OTIKIG1zZ2lkICJuZXh0IgogbXNnc3RyICJuw6RjaHN0ZSIKIAotIzogZ2l0azo3NzgKKyM6IGdpdGs6NzkzCiBtc2dpZCAicHJldiIKIG1zZ3N0ciAidm9yaWdlIgogCi0jOiBnaXRrOjc3OQorIzogZ2l0azo3OTQKIG1zZ2lkICJjb21taXQiCiBtc2dzdHIgIlZlcnNpb24iCiAKLSM6IGdpdGs6NzgyIGdpdGs6Nzg0IGdpdGs6MjMwOCBnaXRrOjIzMzEgZ2l0azoyMzU1IGdpdGs6NDI1NyBnaXRrOjQzMjAKKyM6IGdpdGs6Nzk3IGdpdGs6Nzk5IGdpdGs6MjM1NiBnaXRrOjIzNzkgZ2l0azoyNDAzIGdpdGs6NDMwNiBnaXRrOjQzNjkKIG1zZ2lkICJjb250YWluaW5nOiIKIG1zZ3N0ciAiZW50aGFsdGVuZDoiCiAKLSM6IGdpdGs6Nzg1IGdpdGs6MTc0MSBnaXRrOjE3NDYgZ2l0azoyMzgzCisjOiBnaXRrOjgwMCBnaXRrOjE3NzggZ2l0azoxNzgzIGdpdGs6MjQzMQogbXNnaWQgInRvdWNoaW5nIHBhdGhzOiIKIG1zZ3N0ciAiUGZhZCBiZXRyZWZmZW5kOiIKIAotIzogZ2l0azo3ODYgZ2l0azoyMzg4CisjOiBnaXRrOjgwMSBnaXRrOjI0MzYKIG1zZ2lkICJhZGRpbmcvcmVtb3Zpbmcgc3RyaW5nOiIKLW1zZ3N0ciAiU3RyaW5nIGRhenUvbMO2c2NoZW46IgorbXNnc3RyICJaZWljaGVua2V0dGUgw6RuZGVybmQ6IgogCi0jOiBnaXRrOjc5NSBnaXRrOjc5NworIzogZ2l0azo4MTAgZ2l0azo4MTIKIG1zZ2lkICJFeGFjdCIKIG1zZ3N0ciAiRXhha3QiCiAKLSM6IGdpdGs6Nzk3IGdpdGs6MjQ2NiBnaXRrOjQyMjUKKyM6IGdpdGs6ODEyIGdpdGs6MjUxNCBnaXRrOjQyNzQKIG1zZ2lkICJJZ25DYXNlIgogbXNnc3RyICJLZWluIEdyb8OfL0tsZWluIgogCi0jOiBnaXRrOjc5NyBnaXRrOjIzNTcgZ2l0azoyNDY0IGdpdGs6NDIyMQorIzogZ2l0azo4MTIgZ2l0azoyNDA1IGdpdGs6MjUxMiBnaXRrOjQyNzAKIG1zZ2lkICJSZWdleHAiCiBtc2dzdHIgIlJlZ2V4cCIKIAotIzogZ2l0azo3OTkgZ2l0azo4MDAgZ2l0azoyNDg1IGdpdGs6MjUxNSBnaXRrOjI1MjIgZ2l0azo0MzMxIGdpdGs6NDM4NworIzogZ2l0azo4MTQgZ2l0azo4MTUgZ2l0azoyNTMzIGdpdGs6MjU2MyBnaXRrOjI1NzAgZ2l0azo0MzgwIGdpdGs6NDQzNgogbXNnaWQgIkFsbCBmaWVsZHMiCiBtc2dzdHIgIkFsbGUgRmVsZGVyIgogCi0jOiBnaXRrOjgwMCBnaXRrOjI0ODMgZ2l0azoyNTE1IGdpdGs6NDI4NworIzogZ2l0azo4MTUgZ2l0azoyNTMxIGdpdGs6MjU2MyBnaXRrOjQzMzYKIG1zZ2lkICJIZWFkbGluZSIKIG1zZ3N0ciAiw5xiZXJzY2hyaWZ0IgogCi0jOiBnaXRrOjgwMSBnaXRrOjI0ODMgZ2l0azo0Mjg3IGdpdGs6NDM4NyBnaXRrOjQ3NzUKKyM6IGdpdGs6ODE2IGdpdGs6MjUzMSBnaXRrOjQzMzYgZ2l0azo0NDM2IGdpdGs6NDgyNwogbXNnaWQgIkNvbW1lbnRzIgogbXNnc3RyICJCZXNjaHJlaWJ1bmciCiAKLSM6IGdpdGs6ODAxIGdpdGs6MjQ4MyBnaXRrOjI0ODcgZ2l0azoyNTIyIGdpdGs6NDI4NyBnaXRrOjQ3MTEgZ2l0azo1ODk1Ci0jOiBnaXRrOjU5MTAKKyM6IGdpdGs6ODE2IGdpdGs6MjUzMSBnaXRrOjI1MzUgZ2l0azoyNTcwIGdpdGs6NDMzNiBnaXRrOjQ3NjMgZ2l0azo1OTU3CisjOiBnaXRrOjU5NzIKIG1zZ2lkICJBdXRob3IiCiBtc2dzdHIgIkF1dG9yIgogCi0jOiBnaXRrOjgwMSBnaXRrOjI0ODMgZ2l0azo0Mjg3IGdpdGs6NDcxMworIzogZ2l0azo4MTYgZ2l0azoyNTMxIGdpdGs6NDMzNiBnaXRrOjQ3NjUKIG1zZ2lkICJDb21taXR0ZXIiCiBtc2dzdHIgIkVpbnRyYWdlbmRlciIKIAotIzogZ2l0azo4MjkKKyM6IGdpdGs6ODQ1CiBtc2dpZCAiU2VhcmNoIgogbXNnc3RyICJTdWNoZSIKIAotIzogZ2l0azo4MzYKKyM6IGdpdGs6ODUyCiBtc2dpZCAiRGlmZiIKIG1zZ3N0ciAiVmVyZ2xlaWNoIgogCi0jOiBnaXRrOjgzOAorIzogZ2l0azo4NTQKIG1zZ2lkICJPbGQgdmVyc2lvbiIKIG1zZ3N0ciAiQWx0ZSBWZXJzaW9uIgogCi0jOiBnaXRrOjg0MAorIzogZ2l0azo4NTYKIG1zZ2lkICJOZXcgdmVyc2lvbiIKIG1zZ3N0ciAiTmV1ZSBWZXJzaW9uIgogCi0jOiBnaXRrOjg0MgorIzogZ2l0azo4NTgKIG1zZ2lkICJMaW5lcyBvZiBjb250ZXh0IgogbXNnc3RyICJLb250ZXh0emVpbGVuIgogCi0jOiBnaXRrOjkwMAorIzogZ2l0azo4NjgKK21zZ2lkICJJZ25vcmUgc3BhY2UgY2hhbmdlIgorbXNnc3RyICJMZWVyemVpY2hlbsOkbmRlcnVuZ2VuIGlnbm9yaWVyZW4iCisKKyM6IGdpdGs6OTI2CiBtc2dpZCAiUGF0Y2giCiBtc2dzdHIgIlBhdGNoIgogCi0jOiBnaXRrOjkwMgorIzogZ2l0azo5MjgKIG1zZ2lkICJUcmVlIgogbXNnc3RyICJCYXVtIgogCi0jOiBnaXRrOjEwMTggZ2l0azoxMDMzIGdpdGs6NTk2MQorIzogZ2l0azoxMDUzIGdpdGs6MTA2OCBnaXRrOjYwMjMKIG1zZ2lkICJEaWZmIHRoaXMgLT4gc2VsZWN0ZWQiCiBtc2dzdHIgIlZlcmdsZWljaCBkaWVzZSAtPiBnZXfDpGhsdGUiCiAKLSM6IGdpdGs6MTAyMCBnaXRrOjEwMzUgZ2l0azo1OTYyCisjOiBnaXRrOjEwNTUgZ2l0azoxMDcwIGdpdGs6NjAyNAogbXNnaWQgIkRpZmYgc2VsZWN0ZWQgLT4gdGhpcyIKIG1zZ3N0ciAiVmVyZ2xlaWNoIGdld8OkaGx0ZSAtPiBkaWVzZSIKIAotIzogZ2l0azoxMDIyIGdpdGs6MTAzNyBnaXRrOjU5NjMKKyM6IGdpdGs6MTA1NyBnaXRrOjEwNzIgZ2l0azo2MDI1CiBtc2dpZCAiTWFrZSBwYXRjaCIKIG1zZ3N0ciAiUGF0Y2ggZXJzdGVsbGVuIgogCi0jOiBnaXRrOjEwMjMgZ2l0azo2MTAxCisjOiBnaXRrOjEwNTggZ2l0azo2MTYzCiBtc2dpZCAiQ3JlYXRlIHRhZyIKIG1zZ3N0ciAiTWFya2llcnVuZyBlcnN0ZWxsZW4iCiAKLSM6IGdpdGs6MTAyNCBnaXRrOjYxOTgKKyM6IGdpdGs6MTA1OSBnaXRrOjYyNTYKIG1zZ2lkICJXcml0ZSBjb21taXQgdG8gZmlsZSIKIG1zZ3N0ciAiVmVyc2lvbiBpbiBEYXRlaSBzY2hyZWliZW4iCiAKLSM6IGdpdGs6MTAyNSBnaXRrOjYyNTIKKyM6IGdpdGs6MTA2MCBnaXRrOjYzMTAKIG1zZ2lkICJDcmVhdGUgbmV3IGJyYW5jaCIKIG1zZ3N0ciAiTmV1ZW4gWndlaWcgZXJzdGVsbGVuIgogCi0jOiBnaXRrOjEwMjYKKyM6IGdpdGs6MTA2MQogbXNnaWQgIkNoZXJyeS1waWNrIHRoaXMgY29tbWl0IgogbXNnc3RyICJEaWVzZSBWZXJzaW9uIHBmbMO8Y2tlbiIKIAotIzogZ2l0azoxMDI4CisjOiBnaXRrOjEwNjMKIG1zZ2lkICJSZXNldCBIRUFEIGJyYW5jaCB0byBoZXJlIgogbXNnc3RyICJIRUFELVp3ZWlnIGF1ZiBkaWVzZSBWZXJzaW9uIHp1csO8Y2tzZXR6ZW4iCiAKLSM6IGdpdGs6MTA0NAorIzogZ2l0azoxMDc5CiBtc2dpZCAiQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIgogbXNnc3RyICJBdWYgZGllc2VuIFp3ZWlnIHVtc3RlbGxlbiIKIAotIzogZ2l0azoxMDQ2CisjOiBnaXRrOjEwODEKIG1zZ2lkICJSZW1vdmUgdGhpcyBicmFuY2giCiBtc2dzdHIgIlp3ZWlnIGzDtnNjaGVuIgogCi0jOiBnaXRrOjEwNTIKKyM6IGdpdGs6MTA4NwogbXNnaWQgIkhpZ2hsaWdodCB0aGlzIHRvbyIKIG1zZ3N0ciAiRGllc2VuIGF1Y2ggaGVydm9yaGViZW4iCiAKLSM6IGdpdGs6MTA1NAorIzogZ2l0azoxMDg5CiBtc2dpZCAiSGlnaGxpZ2h0IHRoaXMgb25seSIKIG1zZ3N0ciAiTnVyIGRpZXNlbiBoZXJ2b3JoZWJlbiIKIAotIzogZ2l0azoxMjgxCisjOiBnaXRrOjEzMTgKIG1zZ2lkICIiCiAiXG4iCiAiR2l0ayAtIGEgY29tbWl0IHZpZXdlciBmb3IgZ2l0XG4iCkBAIC0yNjcsMjYyICsyNzEsNDI1IEBACiAiTGljZW5zZVxuIgogIiAgICAgICAgIgogCi0jOiBnaXRrOjEyODkgZ2l0azoxMzUwIGdpdGs6NjUyNAorIzogZ2l0azoxMzI2IGdpdGs6MTM4NyBnaXRrOjY1ODIKIG1zZ2lkICJDbG9zZSIKIG1zZ3N0ciAiU2NobGllw59lbiIKIAotIzogZ2l0azoxMzA4CisjOiBnaXRrOjEzNDUKIG1zZ2lkICJHaXRrIGtleSBiaW5kaW5ncyIKIG1zZ3N0ciAiR2l0ayBUYXN0YXR1cmJlbGVndW5nIgogCi0jOiBnaXRrOjE4NTgKKyM6IGdpdGs6MTM0NworbXNnaWQgIkdpdGsga2V5IGJpbmRpbmdzOiIKK21zZ3N0ciAiR2l0ayBUYXN0YXR1cmJlbGVndW5nOiIKKworIzogZ2l0azoxMzQ5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVE+XHRcdFF1aXQiCittc2dzdHIgIjwlcy1RPlx0XHRCZWVuZGVuIgorCisjOiBnaXRrOjEzNTAKK21zZ2lkICI8SG9tZT5cdFx0TW92ZSB0byBmaXJzdCBjb21taXQiCittc2dzdHIgIjxQb3MxPlx0XHRadXIgbmV1ZXN0ZW4gVmVyc2lvbiBzcHJpbmdlbiIKKworIzogZ2l0azoxMzUxCittc2dpZCAiPEVuZD5cdFx0TW92ZSB0byBsYXN0IGNvbW1pdCIKK21zZ3N0ciAiPEVuZGU+XHRcdFp1ciDDpGx0ZXN0ZW4gVmVyc2lvbiBzcHJpbmdlbiIKKworIzogZ2l0azoxMzUyCittc2dpZCAiPFVwPiwgcCwgaVx0TW92ZSB1cCBvbmUgY29tbWl0IgorbXNnc3RyICI8SG9jaD4sIHAsIGlcdE7DpGNoc3RlIG5ldWVyZSBWZXJzaW9uIgorCisjOiBnaXRrOjEzNTMKK21zZ2lkICI8RG93bj4sIG4sIGtcdE1vdmUgZG93biBvbmUgY29tbWl0IgorbXNnc3RyICI8UnVudGVyPiwgbiwga1x0TsOkY2hzdGUgw6RsdGVyZSBWZXJzaW9uIgorCisjOiBnaXRrOjEzNTQKK21zZ2lkICI8TGVmdD4sIHosIGpcdEdvIGJhY2sgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8TGlua3M+LCB6LCBqXHRFaW5lIFZlcnNpb24genVyw7xja2dlaGVuIgorCisjOiBnaXRrOjEzNTUKK21zZ2lkICI8UmlnaHQ+LCB4LCBsXHRHbyBmb3J3YXJkIGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiPFJlY2h0cz4sIHgsIGxcdEVpbmUgVmVyc2lvbiB3ZWl0ZXJnZWhlbiIKKworIzogZ2l0azoxMzU2Cittc2dpZCAiPFBhZ2VVcD5cdE1vdmUgdXAgb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCittc2dzdHIgIjxCaWxkSG9jaD5cdEVpbmUgU2VpdGUgbmFjaCBvYmVuIGJsw6R0dGVybiIKKworIzogZ2l0azoxMzU3Cittc2dpZCAiPFBhZ2VEb3duPlx0TW92ZSBkb3duIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8QmlsZFJ1bnRlcj5cdEVpbmUgU2VpdGUgbmFjaCB1bnRlbiBibMOkdHRlcm4iCisKKyM6IGdpdGs6MTM1OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Ib21lPlx0U2Nyb2xsIHRvIHRvcCBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLVBvczE+XHRadW0gb2JlcmVuIEVuZGUgZGVyIFZlcnNpb25zbGlzdGUgYmzDpHR0ZXJuIgorCisjOiBnaXRrOjEzNTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRW5kPlx0U2Nyb2xsIHRvIGJvdHRvbSBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLUVuZGU+XHRadW0gdW50ZXJlbiBFbmRlIGRlciBWZXJzaW9uc2xpc3RlIGJsw6R0dGVybiIKKworIzogZ2l0azoxMzYwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtSG9jaD5cdFZlcnNpb25zbGlzdGUgZWluZSBaZWlsZSBuYWNoIG9iZW4gYmzDpHR0ZXJuIgorCisjOiBnaXRrOjEzNjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtUnVudGVyPlx0VmVyc2lvbnNsaXN0ZSBlaW5lIFplaWxlIG5hY2ggdW50ZW4gYmzDpHR0ZXJuIgorCisjOiBnaXRrOjEzNjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUGFnZVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8JXMtQmlsZEhvY2g+XHRWZXJzaW9uc2xpc3RlIGVpbmUgU2VpdGUgaG9jaCBibMOkdHRlcm4iCisKKyM6IGdpdGs6MTM2MworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1QYWdlRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBwYWdlIgorbXNnc3RyICI8JXMtQmlsZFJ1bnRlcj5cdFZlcnNpb25zbGlzdGUgZWluZSBTZWl0ZSBuYWNoIHVudGVuIGJsw6R0dGVybiIKKworIzogZ2l0azoxMzY0Cittc2dpZCAiPFNoaWZ0LVVwPlx0RmluZCBiYWNrd2FyZHMgKHVwd2FyZHMsIGxhdGVyIGNvbW1pdHMpIgorbXNnc3RyICI8VW1zY2hhbHQtSG9jaD5cdFLDvGNrd8OkcnRzIHN1Y2hlbiAobmFjaCBvYmVuOyBuZXVlcmUgVmVyc2lvbmVuKSIKKworIzogZ2l0azoxMzY1Cittc2dpZCAiPFNoaWZ0LURvd24+XHRGaW5kIGZvcndhcmRzIChkb3dud2FyZHMsIGVhcmxpZXIgY29tbWl0cykiCittc2dzdHIgIjxVbXNjaGFsdC1SdW50ZXI+IFN1Y2hlbiAobmFjaCB1bnRlbjsgw6RsdGVyZSBWZXJzaW9uZW4pIgorCisjOiBnaXRrOjEzNjYKK21zZ2lkICI8RGVsZXRlPiwgYlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPEVudGY+LCBiXHRcdFZlcmdsZWljaCBlaW5lIFNlaXRlIG5hY2ggb2JlbiBibMOkdHRlcm4iCisKKyM6IGdpdGs6MTM2NworbXNnaWQgIjxCYWNrc3BhY2U+XHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8TMO2c2NodGFzdGU+XHRWZXJnbGVpY2ggZWluZSBTZWl0ZSBuYWNoIG9iZW4gYmzDpHR0ZXJuIgorCisjOiBnaXRrOjEzNjgKK21zZ2lkICI8U3BhY2U+XHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biBvbmUgcGFnZSIKK21zZ3N0ciAiPExlZXJ0YXN0ZT5cdFZlcmdsZWljaCBlaW5lIFNlaXRlIG5hY2ggdW50ZW4gYmzDpHR0ZXJuIgorCisjOiBnaXRrOjEzNjkKK21zZ2lkICJ1XHRcdFNjcm9sbCBkaWZmIHZpZXcgdXAgMTggbGluZXMiCittc2dzdHIgInVcdFx0VmVyZ2xlaWNoIHVtIDE4IFplaWxlbiBuYWNoIG9iZW4gKMK7dXDCqykgYmzDpHR0ZXJuIgorCisjOiBnaXRrOjEzNzAKK21zZ2lkICJkXHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biAxOCBsaW5lcyIKK21zZ3N0ciAiZFx0XHRWZXJnbGVpY2ggdW0gMTggWmVpbGVuIG5hY2ggdW50ZW4gKMK7ZG93bsKrKSBibMOkdHRlcm4iCisKKyM6IGdpdGs6MTM3MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1GPlx0XHRGaW5kIgorbXNnc3RyICI8JXMtRj5cdFx0U3VjaGVuIgorCisjOiBnaXRrOjEzNzIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRz5cdFx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgorbXNnc3RyICI8JXMtRz5cdFx0V2VpdGVyc3VjaGVuIgorCisjOiBnaXRrOjEzNzMKK21zZ2lkICI8UmV0dXJuPlx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgorbXNnc3RyICI8RWluZ2FiZXRhc3RlPlx0V2VpdGVyc3VjaGVuIgorCisjOiBnaXRrOjEzNzQKK21zZ2lkICIvXHRcdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCwgb3IgcmVkbyBmaW5kIgorbXNnc3RyICIvXHRcdFdlaXRlcnN1Y2hlbiBvZGVyIG5ldWUgU3VjaGUgYmVnaW5uZW4iCisKKyM6IGdpdGs6MTM3NQorbXNnaWQgIj9cdFx0TW92ZSB0byBwcmV2aW91cyBmaW5kIGhpdCIKK21zZ3N0ciAiP1x0XHRSw7xja3fDpHJ0cyB3ZWl0ZXJzdWNoZW4iCisKKyM6IGdpdGs6MTM3NgorbXNnaWQgImZcdFx0U2Nyb2xsIGRpZmYgdmlldyB0byBuZXh0IGZpbGUiCittc2dzdHIgImZcdFx0VmVyZ2xlaWNoIHp1ciBuw6RjaHN0ZW4gRGF0ZWkgKMK7ZmlsZcKrKSBibMOkdHRlcm4iCisKKyM6IGdpdGs6MTM3NworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1TPlx0XHRTZWFyY2ggZm9yIG5leHQgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVM+XHRcdFdlaXRlcnN1Y2hlbiBpbSBWZXJnbGVpY2giCisKKyM6IGdpdGs6MTM3OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1SPlx0XHRTZWFyY2ggZm9yIHByZXZpb3VzIGhpdCBpbiBkaWZmIHZpZXciCittc2dzdHIgIjwlcy1SPlx0XHRSw7xja3fDpHJ0cyB3ZWl0ZXJzdWNoZW4gaW0gVmVyZ2xlaWNoIgorCisjOiBnaXRrOjEzNzkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtS1ArPlx0SW5jcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtTnVtbWVyYmxvY2stUGx1cz5cdFNjaHJpZnRncsO2w59lIHZlcmdyw7bDn2VybiIKKworIzogZ2l0azoxMzgwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLXBsdXM+XHRJbmNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1QbHVzPlx0U2NocmlmdGdyw7bDn2UgdmVyZ3LDtsOfZXJuIgorCisjOiBnaXRrOjEzODEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtS1AtPlx0RGVjcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtTnVtbWVybmJsb2NrLT4gU2NocmlmdGdyw7bDn2UgdmVya2xlaW5lcm4iCisKKyM6IGdpdGs6MTM4MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1taW51cz5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLU1pbnVzPlx0U2NocmlmdGdyw7bDn2UgdmVya2xlaW5lcm4iCisKKyM6IGdpdGs6MTM4MworbXNnaWQgIjxGNT5cdFx0VXBkYXRlIgorbXNnc3RyICI8RjU+XHRcdEFrdHVhbGlzaWVyZW4iCisKKyM6IGdpdGs6MTg5NgogbXNnaWQgIkdpdGsgdmlldyBkZWZpbml0aW9uIgogbXNnc3RyICJHaXRrIEFuc2ljaHRlbiIKIAotIzogZ2l0azoxODgyCisjOiBnaXRrOjE5MjEKIG1zZ2lkICJOYW1lIgogbXNnc3RyICJOYW1lIgogCi0jOiBnaXRrOjE4ODUKKyM6IGdpdGs6MTkyNAogbXNnaWQgIlJlbWVtYmVyIHRoaXMgdmlldyIKIG1zZ3N0ciAiRGllc2UgQW5zaWNodCBzcGVpY2hlcm4iCiAKLSM6IGdpdGs6MTg4OQorIzogZ2l0azoxOTI4CiBtc2dpZCAiQ29tbWl0cyB0byBpbmNsdWRlIChhcmd1bWVudHMgdG8gZ2l0IHJldi1saXN0KToiCiBtc2dzdHIgIlZlcnNpb25lbiBhbnplaWdlbiAoQXJndW1lbnRlIHZvbiBnaXQtcmV2LWxpc3QpOiIKIAotIzogZ2l0azoxODk1CisjOiBnaXRrOjE5MzUKK21zZ2lkICJDb21tYW5kIHRvIGdlbmVyYXRlIG1vcmUgY29tbWl0cyB0byBpbmNsdWRlOiIKK21zZ3N0ciAiVmVyc2lvbnNsaXN0ZSBkdXJjaCBmb2xnZW5kZXMgS29tbWFuZG8gZXJ6ZXVnZW4gbGFzc2VuOiIKKworIzogZ2l0azoxOTQyCiBtc2dpZCAiRW50ZXIgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGluY2x1ZGUsIG9uZSBwZXIgbGluZToiCiBtc2dzdHIgIkZvbGdlbmRlIERhdGVpZW4gdW5kIFZlcnplaWNobmlzc2UgYW56ZWlnZW4gKGVpbmUgcHJvIFplaWxlKToiCiAKLSM6IGdpdGs6MTk0MgorIzogZ2l0azoxOTg5CiBtc2dpZCAiRXJyb3IgaW4gY29tbWl0IHNlbGVjdGlvbiBhcmd1bWVudHM6IgogbXNnc3RyICJGZWhsZXIgaW4gZGVuIGF1c2dld8OkaGx0ZW4gVmVyc2lvbmVuOiIKIAotIzogZ2l0azoxOTkzIGdpdGs6MjA3OSBnaXRrOjI1MzUgZ2l0azoyNTQ5IGdpdGs6MzczMiBnaXRrOjg2MjAgZ2l0azo4NjIxCisjOiBnaXRrOjIwNDMgZ2l0azoyMTI3IGdpdGs6MjU4MyBnaXRrOjI1OTcgZ2l0azozNzgxIGdpdGs6ODY4OSBnaXRrOjg2OTAKIG1zZ2lkICJOb25lIgogbXNnc3RyICJLZWluZSIKIAotIzogZ2l0azoyNDgzIGdpdGs6NDI4NyBnaXRrOjU4OTcgZ2l0azo1OTEyCisjOiBnaXRrOjI1MzEgZ2l0azo0MzM2IGdpdGs6NTk1OSBnaXRrOjU5NzQKIG1zZ2lkICJEYXRlIgogbXNnc3RyICJEYXR1bSIKIAotIzogZ2l0azoyNDgzIGdpdGs6NDI4NworIzogZ2l0azoyNTMxIGdpdGs6NDMzNgogbXNnaWQgIkNEYXRlIgogbXNnc3RyICJFaW50cmFnZWRhdHVtIgogCi0jOiBnaXRrOjI2MzIgZ2l0azoyNjM3CisjOiBnaXRrOjI2ODAgZ2l0azoyNjg1CiBtc2dpZCAiRGVzY2VuZGFudCIKIG1zZ3N0ciAiQWJrw7ZtbWxpbmciCiAKLSM6IGdpdGs6MjYzMworIzogZ2l0azoyNjgxCiBtc2dpZCAiTm90IGRlc2NlbmRhbnQiCiBtc2dzdHIgIk5pY2h0IEFia8O2bW1saW5nIgogCi0jOiBnaXRrOjI2NDAgZ2l0azoyNjQ1CisjOiBnaXRrOjI2ODggZ2l0azoyNjkzCiBtc2dpZCAiQW5jZXN0b3IiCiBtc2dzdHIgIlZvcmfDpG5nZXIiCiAKLSM6IGdpdGs6MjY0MQorIzogZ2l0azoyNjg5CiBtc2dpZCAiTm90IGFuY2VzdG9yIgogbXNnc3RyICJOaWNodCBWb3Jnw6RuZ2VyIgogCi0jOiBnaXRrOjI4NzUKKyM6IGdpdGs6MjkyNAogbXNnaWQgIkxvY2FsIGNoYW5nZXMgY2hlY2tlZCBpbiB0byBpbmRleCBidXQgbm90IGNvbW1pdHRlZCIKIG1zZ3N0ciAiTG9rYWxlIMOEbmRlcnVuZ2VuIGJlcmVpdGdlc3RlbGx0LCBhYmVyIG5pY2h0IGVpbmdldHJhZ2VuIgogCi0jOiBnaXRrOjI5MDUKKyM6IGdpdGs6Mjk1NAogbXNnaWQgIkxvY2FsIHVuY29tbWl0dGVkIGNoYW5nZXMsIG5vdCBjaGVja2VkIGluIHRvIGluZGV4IgogbXNnc3RyICJMb2thbGUgw4RuZGVydW5nZW4sIG5pY2h0IGJlcmVpdGdlc3RlbGx0IgogCi0jOiBnaXRrOjQyNTYKKyM6IGdpdGs6NDMwNQogbXNnaWQgIlNlYXJjaGluZyIKIG1zZ3N0ciAiU3VjaGVuIgogCi0jOiBnaXRrOjQ3MTUKKyM6IGdpdGs6NDc2NwogbXNnaWQgIlRhZ3M6IgogbXNnc3RyICJNYXJraWVydW5nZW46IgogCi0jOiBnaXRrOjQ3MzIgZ2l0azo0NzM4IGdpdGs6NTg5MAorIzogZ2l0azo0Nzg0IGdpdGs6NDc5MCBnaXRrOjU5NTIKIG1zZ2lkICJQYXJlbnQiCiBtc2dzdHIgIkVsdGVybiIKIAotIzogZ2l0azo0NzQzCisjOiBnaXRrOjQ3OTUKIG1zZ2lkICJDaGlsZCIKIG1zZ3N0ciAiS2luZCIKIAotIzogZ2l0azo0NzUyCisjOiBnaXRrOjQ4MDQKIG1zZ2lkICJCcmFuY2giCiBtc2dzdHIgIlp3ZWlnIgogCi0jOiBnaXRrOjQ3NTUKKyM6IGdpdGs6NDgwNwogbXNnaWQgIkZvbGxvd3MiCiBtc2dzdHIgIkZvbGd0IGF1ZiIKIAotIzogZ2l0azo0NzU4CisjOiBnaXRrOjQ4MTAKIG1zZ2lkICJQcmVjZWRlcyIKIG1zZ3N0ciAiVm9yZ8OkbmdlciB2b24iCiAKLSM6IGdpdGs6NTA0MAorIzogZ2l0azo1MDk0CiBtc2dpZCAiRXJyb3IgZ2V0dGluZyBtZXJnZSBkaWZmczoiCiBtc2dzdHIgIkZlaGxlciBiZWltIExhZGVuIGRlcyBWZXJnbGVpY2hzOiIKIAotIzogZ2l0azo1NzE3CisjOiBnaXRrOjU3NzkKIG1zZ2lkICJHb3RvOiIKIG1zZ3N0ciAiR2VoZSB6dToiCiAKLSM6IGdpdGs6NTcxOQorIzogZ2l0azo1NzgxCiBtc2dpZCAiU0hBMSBJRDoiCi1tc2dzdHIgIlNIQTEgS2VubnVuZzoiCittc2dzdHIgIlNIQTEtSGFzaHdlcnQ6IgogCi0jOiBnaXRrOjU3NDQKKyM6IGdpdGs6NTgwNgogIywgdGNsLWZvcm1hdAogbXNnaWQgIlNob3J0IFNIQTEgaWQgJXMgaXMgYW1iaWd1b3VzIgotbXNnc3RyICJLdXJ6ZSBTSEExLUtlbm51bmcgwrslc8KrIGlzdCBtZWhyZGV1dGlnIgorbXNnc3RyICJLdXJ6ZXIgU0hBMS1IYXNod2VydCDCuyVzwqsgaXN0IG1laHJkZXV0aWciCiAKLSM6IGdpdGs6NTc1NgorIzogZ2l0azo1ODE4CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiU0hBMSBpZCAlcyBpcyBub3Qga25vd24iCi1tc2dzdHIgIlNIQTEtS2VubnVuZyDCuyVzwqsgdW5iZWthbm50IgorbXNnc3RyICJTSEExLUhhc2h3ZXJ0IMK7JXPCqyB1bmJla2FubnQiCiAKLSM6IGdpdGs6NTc1OAorIzogZ2l0azo1ODIwCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiVGFnL0hlYWQgJXMgaXMgbm90IGtub3duIgogbXNnc3RyICJNYXJraWVydW5nL1p3ZWlnIMK7JXPCqyBpc3QgdW5iZWthbm50IgogCi0jOiBnaXRrOjU5MDAKKyM6IGdpdGs6NTk2MgogbXNnaWQgIkNoaWxkcmVuIgogbXNnc3RyICJLaW5kZXIiCiAKLSM6IGdpdGs6NTk1NworIzogZ2l0azo2MDE5CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiUmVzZXQgJXMgYnJhbmNoIHRvIGhlcmUiCiBtc2dzdHIgIlp3ZWlnIMK7JXPCqyBoaWVyaGVyIHp1csO8Y2tzZXR6ZW4iCiAKLSM6IGdpdGs6NTk4OAorIzogZ2l0azo2MDUwCiBtc2dpZCAiVG9wIgogbXNnc3RyICJPYmVuIgogCi0jOiBnaXRrOjU5ODkKKyM6IGdpdGs6NjA1MQogbXNnaWQgIkZyb20iCiBtc2dzdHIgIlZvbiIKIAotIzogZ2l0azo1OTk0CisjOiBnaXRrOjYwNTYKIG1zZ2lkICJUbyIKIG1zZ3N0ciAiYmlzIgogCi0jOiBnaXRrOjYwMTcKKyM6IGdpdGs6NjA3OQogbXNnaWQgIkdlbmVyYXRlIHBhdGNoIgogbXNnc3RyICJQYXRjaCBlcnN0ZWxsZW4iCiAKLSM6IGdpdGs6NjAxOQorIzogZ2l0azo2MDgxCiBtc2dpZCAiRnJvbToiCiBtc2dzdHIgIlZvbjoiCiAKLSM6IGdpdGs6NjAyOAorIzogZ2l0azo2MDkwCiBtc2dpZCAiVG86IgogbXNnc3RyICJiaXM6IgogCi0jOiBnaXRrOjYwMzcKKyM6IGdpdGs6NjA5OQogbXNnaWQgIlJldmVyc2UiCiBtc2dzdHIgIlVtZ2VrZWhydCIKIAotIzogZ2l0azo2MDM5IGdpdGs6NjIxMgorIzogZ2l0azo2MTAxIGdpdGs6NjI3MAogbXNnaWQgIk91dHB1dCBmaWxlOiIKIG1zZ3N0ciAiQXVzZ2FiZWRhdGVpOiIKIAotIzogZ2l0azo2MDQ1CisjOiBnaXRrOjYxMDcKIG1zZ2lkICJHZW5lcmF0ZSIKIG1zZ3N0ciAiRXJ6ZXVnZW4iCiAKLSM6IGdpdGs6NjA4MQorIzogZ2l0azo2MTQzCiBtc2dpZCAiRXJyb3IgY3JlYXRpbmcgcGF0Y2g6IgogbXNnc3RyICJGZWhsZXIgYmVpbSBQYXRjaCBlcnpldWdlbjoiCiAKLSM6IGdpdGs6NjEwMyBnaXRrOjYyMDAgZ2l0azo2MjU0CisjOiBnaXRrOjYxNjUgZ2l0azo2MjU4IGdpdGs6NjMxMgogbXNnaWQgIklEOiIKIG1zZ3N0ciAiSUQ6IgogCi0jOiBnaXRrOjYxMTIKKyM6IGdpdGs6NjE3NAogbXNnaWQgIlRhZyBuYW1lOiIKIG1zZ3N0ciAiTWFya2llcnVuZ3NuYW1lOiIKIAotIzogZ2l0azo2MTE2IGdpdGs6NjI2MworIzogZ2l0azo2MTc4IGdpdGs6NjMyMQogbXNnaWQgIkNyZWF0ZSIKIG1zZ3N0ciAiRXJzdGVsbGVuIgogCi0jOiBnaXRrOjYxMzEKKyM6IGdpdGs6NjE5MwogbXNnaWQgIk5vIHRhZyBuYW1lIHNwZWNpZmllZCIKIG1zZ3N0ciAiS2VpbiBNYXJraWVydW5nc25hbWUgYW5nZWdlYmVuIgogCi0jOiBnaXRrOjYxMzUKKyM6IGdpdGs6NjE5NwogIywgdGNsLWZvcm1hdAogbXNnaWQgIlRhZyBcIiVzXCIgYWxyZWFkeSBleGlzdHMiCiBtc2dzdHIgIk1hcmtpZXJ1bmcgwrslc8KrIGV4aXN0aWVydCBiZXJlaXRzLiIKIAotIzogZ2l0azo2MTQ1CisjOiBnaXRrOjYyMDMKIG1zZ2lkICJFcnJvciBjcmVhdGluZyB0YWc6IgogbXNnc3RyICJGZWhsZXIgYmVpIE1hcmtpZXJ1bmcgZXJzdGVsbGVuOiIKIAotIzogZ2l0azo2MjA5CisjOiBnaXRrOjYyNjcKIG1zZ2lkICJDb21tYW5kOiIKIG1zZ3N0ciAiS29tbWFuZG86IgogCi0jOiBnaXRrOjYyMTcKKyM6IGdpdGs6NjI3NQogbXNnaWQgIldyaXRlIgogbXNnc3RyICJTY2hyZWliZW4iCiAKLSM6IGdpdGs6NjIzMworIzogZ2l0azo2MjkxCiBtc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQ6IgotbXNnc3RyICJGZWhsZXIgYmVpbSBWZXJzaW9uIGVpbnRyYWdlbjoiCittc2dzdHIgIkZlaGxlciBiZWltIFNjaHJlaWJlbiBkZXIgVmVyc2lvbjoiCiAKLSM6IGdpdGs6NjI1OQorIzogZ2l0azo2MzE3CiBtc2dpZCAiTmFtZToiCiBtc2dzdHIgIk5hbWU6IgogCi0jOiBnaXRrOjYyNzgKKyM6IGdpdGs6NjMzNgogbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IGEgbmFtZSBmb3IgdGhlIG5ldyBicmFuY2giCiBtc2dzdHIgIkJpdHRlIGdlYmVuIFNpZSBlaW5lbiBOYW1lbiBmw7xyIGRlbiBuZXVlbiBad2VpZyBhbi4iCiAKLSM6IGdpdGs6NjMwNworIzogZ2l0azo2MzY1CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiQ29tbWl0ICVzIGlzIGFscmVhZHkgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZS1hcHBseSBpdD8iCiBtc2dzdHIgIiIKICJWZXJzaW9uIMK7JXPCqyBpc3QgYmVyZWl0cyBpbSBad2VpZyDCuyVzwqsgZW50aGFsdGVuIC0tIHRyb3R6ZGVtIGVybmV1dCAiCiAiZWludHJhZ2VuPyIKIAotIzogZ2l0azo2MzEyCisjOiBnaXRrOjYzNzAKIG1zZ2lkICJDaGVycnktcGlja2luZyIKIG1zZ3N0ciAiVmVyc2lvbiBwZmzDvGNrZW4iCiAKLSM6IGdpdGs6NjMyNAorIzogZ2l0azo2MzgyCiBtc2dpZCAiTm8gY2hhbmdlcyBjb21taXR0ZWQiCiBtc2dzdHIgIktlaW5lIMOEbmRlcnVuZ2VuIGVpbmdldHJhZ2VuIgogCi0jOiBnaXRrOjYzNDcKKyM6IGdpdGs6NjQwNQogbXNnaWQgIkNvbmZpcm0gcmVzZXQiCiBtc2dzdHIgIlp1csO8Y2tzZXR6ZW4gYmVzdMOkdGlnZW4iCiAKLSM6IGdpdGs6NjM0OQorIzogZ2l0azo2NDA3CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiUmVzZXQgYnJhbmNoICVzIHRvICVzPyIKIG1zZ3N0ciAiWndlaWcgwrslc8KrIGF1ZiDCuyVzwqsgenVyw7xja3NldHplbj8iCiAKLSM6IGdpdGs6NjM1MworIzogZ2l0azo2NDExCiBtc2dpZCAiUmVzZXQgdHlwZToiCiBtc2dzdHIgIkFydCBkZXMgWnVyw7xja3NldHplbnM6IgogCi0jOiBnaXRrOjYzNTcKKyM6IGdpdGs6NjQxNQogbXNnaWQgIlNvZnQ6IExlYXZlIHdvcmtpbmcgdHJlZSBhbmQgaW5kZXggdW50b3VjaGVkIgogbXNnc3RyICJIYXJtbG9zOiBBcmJlaXRza29waWUgdW5kIEJlcmVpdHN0ZWxsdW5nIHVudmVyw6RuZGVydCIKIAotIzogZ2l0azo2MzYwCisjOiBnaXRrOjY0MTgKIG1zZ2lkICJNaXhlZDogTGVhdmUgd29ya2luZyB0cmVlIHVudG91Y2hlZCwgcmVzZXQgaW5kZXgiCiBtc2dzdHIgIiIKICJHZW1pc2NodDogQXJiZWl0c2tvcGllIHVudmVyw6RuZGVydCxcbiIKICJCZXJlaXRzdGVsbHVuZyB6dXLDvGNrZ2VzZXR6dCIKIAotIzogZ2l0azo2MzYzCisjOiBnaXRrOjY0MjEKIG1zZ2lkICIiCiAiSGFyZDogUmVzZXQgd29ya2luZyB0cmVlIGFuZCBpbmRleFxuIgogIihkaXNjYXJkIEFMTCBsb2NhbCBjaGFuZ2VzKSIKQEAgLTUzMCwyMSArNjk3LDIxIEBACiAiSGFydDogQXJiZWl0c2tvcGllIHVuZCBCZXJlaXRzdGVsbHVuZ1xuIgogIihBbGxlIGxva2FsZW4gw4RuZGVydW5nZW4gd2VyZGVuIGdlbMO2c2NodCkiCiAKLSM6IGdpdGs6NjM3OQorIzogZ2l0azo2NDM3CiBtc2dpZCAiUmVzZXR0aW5nIgogbXNnc3RyICJadXLDvGNrc2V0emVuIgogCi0jOiBnaXRrOjY0MzYKKyM6IGdpdGs6NjQ5NAogbXNnaWQgIkNoZWNraW5nIG91dCIKIG1zZ3N0ciAiVW1zdGVsbGVuIgogCi0jOiBnaXRrOjY0NjYKKyM6IGdpdGs6NjUyNAogbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2giCiBtc2dzdHIgIiIKICJEZXIgWndlaWcsIGF1ZiBkZW4gZGllIEFyYmVpdHNrb3BpZSBtb21lbnRhbiB1bWdlc3RlbGx0IGlzdCwga2FubiBuaWNodCAiCiAiZ2Vsw7ZzY2h0IHdlcmRlbi4iCiAKLSM6IGdpdGs6NjQ3MgorIzogZ2l0azo2NTMwCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiIgogIlRoZSBjb21taXRzIG9uIGJyYW5jaCAlcyBhcmVuJ3Qgb24gYW55IG90aGVyIGJyYW5jaC5cbiIKQEAgLTU1MywxNiArNzIwLDE2IEBACiAiRGllIFZlcnNpb25lbiBhdWYgWndlaWcgwrslc8KrIGV4aXN0aWVyZW4gYXVmIGtlaW5lbSBhbmRlcmVuIFp3ZWlnLlxuIgogIlp3ZWlnIMK7JXPCqyB0cm90emRlbSBsw7ZzY2hlbj8iCiAKLSM6IGdpdGs6NjUwMworIzogZ2l0azo2NTYxCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiVGFncyBhbmQgaGVhZHM6ICVzIgogbXNnc3RyICJNYXJraWVydW5nZW4gdW5kIFp3ZWlnZTogJXMiCiAKLSM6IGdpdGs6NjUxNworIzogZ2l0azo2NTc1CiBtc2dpZCAiRmlsdGVyIgogbXNnc3RyICJGaWx0ZXJuIgogCi0jOiBnaXRrOjY4MTEKKyM6IGdpdGs6Njg2OQogbXNnaWQgIiIKICJFcnJvciByZWFkaW5nIGNvbW1pdCB0b3BvbG9neSBpbmZvcm1hdGlvbjsgYnJhbmNoIGFuZCBwcmVjZWRpbmcvZm9sbG93aW5nICIKICJ0YWcgaW5mb3JtYXRpb24gd2lsbCBiZSBpbmNvbXBsZXRlLiIKQEAgLTU3MCwxMTMgKzczNywxMTcgQEAKICJGZWhsZXIgYmVpbSBMZXNlbiBkZXIgU3RydWt0dXJpbmZvcm1hdGlvbmVuOyBad2VpZ2UgdW5kIFZvcmfDpG5nZXIvTmFjaGZvbGdlciAiCiAiSW5mb3JtYXRpb25lbiB3ZXJkZW4gdW52b2xsc3TDpG5kaWcgc2Vpbi4iCiAKLSM6IGdpdGs6Nzc5NQorIzogZ2l0azo3ODUzCiBtc2dpZCAiVGFnIgogbXNnc3RyICJNYXJraWVydW5nIgogCi0jOiBnaXRrOjc3OTUKKyM6IGdpdGs6Nzg1MwogbXNnaWQgIklkIgogbXNnc3RyICJJZCIKIAotIzogZ2l0azo3ODM1CisjOiBnaXRrOjc4OTMKIG1zZ2lkICJHaXRrIGZvbnQgY2hvb3NlciIKIG1zZ3N0ciAiR2l0ayBTY2hyaWZ0ZW4gd8OkaGxlbiIKIAotIzogZ2l0azo3ODUyCisjOiBnaXRrOjc5MTAKIG1zZ2lkICJCIgogbXNnc3RyICJGIgogCi0jOiBnaXRrOjc4NTUKKyM6IGdpdGs6NzkxMwogbXNnaWQgIkkiCiBtc2dzdHIgIksiCiAKLSM6IGdpdGs6Nzk0OAorIzogZ2l0azo4MDA2CiBtc2dpZCAiR2l0ayBwcmVmZXJlbmNlcyIKIG1zZ3N0ciAiR2l0ayBFaW5zdGVsbHVuZ2VuIgogCi0jOiBnaXRrOjc5NDkKKyM6IGdpdGs6ODAwNwogbXNnaWQgIkNvbW1pdCBsaXN0IGRpc3BsYXkgb3B0aW9ucyIKIG1zZ3N0ciAiQW56ZWlnZSBWZXJzaW9uc2xpc3RlIgogCi0jOiBnaXRrOjc5NTIKKyM6IGdpdGs6ODAxMAogbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKGxpbmVzKSIKIG1zZ3N0ciAiTWF4aW1hbGUgR3JhcGhlbmJyZWl0ZSAoWmVpbGVuKSIKIAotIzogZ2l0azo3OTU2CisjOiBnaXRrOjgwMTQKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoICglIG9mIHBhbmUpIgogbXNnc3RyICJNYXhpbWFsZSBHcmFwaGVuYnJlaXRlICglIGRlcyBGZW5zdGVycykiCiAKLSM6IGdpdGs6Nzk2MQorIzogZ2l0azo4MDE5CiBtc2dpZCAiU2hvdyBsb2NhbCBjaGFuZ2VzIgogbXNnc3RyICJMb2thbGUgw4RuZGVydW5nZW4gYW56ZWlnZW4iCiAKLSM6IGdpdGs6Nzk2NgorIzogZ2l0azo4MDI0Cittc2dpZCAiQXV0by1zZWxlY3QgU0hBMSIKK21zZ3N0ciAiU0hBMS1IYXNod2VydCBhdXRvbWF0aXNjaCBtYXJraWVyZW4iCisKKyM6IGdpdGs6ODAyOQogbXNnaWQgIkRpZmYgZGlzcGxheSBvcHRpb25zIgogbXNnc3RyICJBbnplaWdlIFZlcmdsZWljaCIKIAotIzogZ2l0azo3OTY4CisjOiBnaXRrOjgwMzEKIG1zZ2lkICJUYWIgc3BhY2luZyIKIG1zZ3N0ciAiVGFidWxhdG9yYnJlaXRlIgogCi0jOiBnaXRrOjc5NzIKKyM6IGdpdGs6ODAzNQogbXNnaWQgIkRpc3BsYXkgbmVhcmJ5IHRhZ3MiCiBtc2dzdHIgIk5haGVsaWVnZW5kZSDDnGJlcnNjaHJpZnRlbiBhbnplaWdlbiIKIAotIzogZ2l0azo3OTc3CisjOiBnaXRrOjgwNDAKIG1zZ2lkICJMaW1pdCBkaWZmcyB0byBsaXN0ZWQgcGF0aHMiCiBtc2dzdHIgIlZlcmdsZWljaCBudXIgZsO8ciBhbmdlemVpZ3RlIFBmYWRlIgogCi0jOiBnaXRrOjc5ODIKKyM6IGdpdGs6ODA0NQogbXNnaWQgIkNvbG9yczogcHJlc3MgdG8gY2hvb3NlIgogbXNnc3RyICJGYXJiZW46IEtsaWNrZW4genVtIFfDpGhsZW4iCiAKLSM6IGdpdGs6Nzk4NQorIzogZ2l0azo4MDQ4CiBtc2dpZCAiQmFja2dyb3VuZCIKLW1zZ3N0ciAiVm9yZGVyZ3J1bmQiCi0KLSM6IGdpdGs6Nzk4OQotbXNnaWQgIkZvcmVncm91bmQiCiBtc2dzdHIgIkhpbnRlcmdydW5kIgogCi0jOiBnaXRrOjc5OTMKKyM6IGdpdGs6ODA1MgorbXNnaWQgIkZvcmVncm91bmQiCittc2dzdHIgIlZvcmRlcmdydW5kIgorCisjOiBnaXRrOjgwNTYKIG1zZ2lkICJEaWZmOiBvbGQgbGluZXMiCiBtc2dzdHIgIlZlcmdsZWljaDogQWx0ZSBaZWlsZW4iCiAKLSM6IGdpdGs6Nzk5OAorIzogZ2l0azo4MDYxCiBtc2dpZCAiRGlmZjogbmV3IGxpbmVzIgogbXNnc3RyICJWZXJnbGVpY2g6IE5ldWUgWmVpbGVuIgogCi0jOiBnaXRrOjgwMDMKKyM6IGdpdGs6ODA2NgogbXNnaWQgIkRpZmY6IGh1bmsgaGVhZGVyIgogbXNnc3RyICJWZXJnbGVpY2g6IMOEbmRlcnVuZ3N0aXRlbCIKIAotIzogZ2l0azo4MDA5CisjOiBnaXRrOjgwNzIKIG1zZ2lkICJTZWxlY3QgYmciCiBtc2dzdHIgIkhpbnRlcmdydW5kZmFyYmUgQXVzd8OkaGxlbiIKIAotIzogZ2l0azo4MDEzCisjOiBnaXRrOjgwNzYKIG1zZ2lkICJGb250czogcHJlc3MgdG8gY2hvb3NlIgogbXNnc3RyICJTY2hyaWZ0YXJ0OiBLbGlja2VuIHp1bSBXw6RobGVuIgogCi0jOiBnaXRrOjgwMTUKKyM6IGdpdGs6ODA3OAogbXNnaWQgIk1haW4gZm9udCIKIG1zZ3N0ciAiUHJvZ3JhbW1zY2hyaWZ0YXJ0IgogCi0jOiBnaXRrOjgwMTYKKyM6IGdpdGs6ODA3OQogbXNnaWQgIkRpZmYgZGlzcGxheSBmb250IgogbXNnc3RyICJWZXJnbGVpY2giCiAKLSM6IGdpdGs6ODAxNworIzogZ2l0azo4MDgwCiBtc2dpZCAiVXNlciBpbnRlcmZhY2UgZm9udCIKIG1zZ3N0ciAiQmVzY2hyaWZ0dW5nZW4iCiAKLSM6IGdpdGs6ODAzMworIzogZ2l0azo4MDk2CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiR2l0azogY2hvb3NlIGNvbG9yIGZvciAlcyIKIG1zZ3N0ciAiR2l0azogRmFyYmUgd8OkaGxlbiBmw7xyICVzIgogCi0jOiBnaXRrOjg0MTQKKyM6IGdpdGs6ODQ3NwogbXNnaWQgIiIKICJTb3JyeSwgZ2l0ayBjYW5ub3QgcnVuIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFRjbC9Uay5cbiIKICIgR2l0ayByZXF1aXJlcyBhdCBsZWFzdCBUY2wvVGsgOC40LiIKQEAgLTY4NCwzNSArODU1LDMzIEBACiAiR2l0ayBsw6R1ZnQgbmljaHQgbWl0IGRpZXNlciBWZXJzaW9uIHZvbiBUY2wvVGsuXG4iCiAiR2l0ayBiZW7DtnRpZ3QgbWluZGVzdGVucyBUY2wvVGsgOC40LiIKIAotIzogZ2l0azo4NTAxCisjOiBnaXRrOjg1NjYKIG1zZ2lkICJDYW5ub3QgZmluZCBhIGdpdCByZXBvc2l0b3J5IGhlcmUuIgogbXNnc3RyICJLZWluIEdpdC1Qcm9qZWt0YXJjaGl2IGdlZnVuZGVuLiIKIAotIzogZ2l0azo4NTA1CisjOiBnaXRrOjg1NzAKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJDYW5ub3QgZmluZCB0aGUgZ2l0IGRpcmVjdG9yeSBcIiVzXCIuIgogbXNnc3RyICJHaXQtVmVyemVpY2huaXMgwrslc8KrIHd1cmRlIG5pY2h0IGdlZnVuZGVuLiIKIAotIzogZ2l0azo4NTQ0CisjOiBnaXRrOjg2MTMKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJBbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogYm90aCByZXZpc2lvbiBhbmQgZmlsZW5hbWUiCiBtc2dzdHIgIk1laHJkZXV0aWdlIEFuZ2FiZSDCuyVzwqs6IFNvd29obCBWZXJzaW9uIGFscyBhdWNoIERhdGVpbmFtZSBleGlzdGllcnQuIgogCi0jOiBnaXRrOjg1NTYKKyM6IGdpdGs6ODYyNQogbXNnaWQgIkJhZCBhcmd1bWVudHMgdG8gZ2l0azoiCiBtc2dzdHIgIkZhbHNjaGUgS29tbWFuZG96ZWlsZW4tUGFyYW1ldGVyIGbDvHIgZ2l0azoiCiAKLSM6IGdpdGs6ODU2OAorIzogZ2l0azo4NjM3CiBtc2dpZCAiQ291bGRuJ3QgZ2V0IGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXM6IgogbXNnc3RyICJMaXN0ZSBkZXIgbmljaHQtenVzYW1tZW5nZWbDvGhydGVuIERhdGVpZW4gbmljaHQgZ2VmdW5kZW46IgogCi0jOiBnaXRrOjg1ODQKKyM6IGdpdGs6ODY1MwogbXNnaWQgIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gZmlsZXMgYXJlIHVubWVyZ2VkLiIKLW1zZ3N0ciAiIgotIktlaW5lIERhdGVpZW4gYXVzZ2V3w6RobGU6IC0tbWVyZ2UgYW5nZWdlYmVuLCBlcyBleGlzdGllcmVuIGFiZXIga2VpbmUgbmljaHQtIgotInp1c2FtbWVuZ2Vmw7xocnRlbiBEYXRlaWVuLiIKK21zZ3N0ciAiS2VpbmUgRGF0ZWllbiBhdXNnZXfDpGhsdDogLS1tZXJnZSBhbmdlZ2ViZW4sIGVzIGV4aXN0aWVyZW4gYWJlciBrZWluZSBuaWNodC16dXNhbW1lbmdlZsO8aHJ0ZW4gRGF0ZWllbi4iCiAKLSM6IGdpdGs6ODU4NworIzogZ2l0azo4NjU2CiBtc2dpZCAiIgogIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gdW5tZXJnZWQgZmlsZXMgYXJlIHdpdGhpbiBmaWxlICIKICJsaW1pdC4iCkBAIC03MjAsNiArODg5LDYgQEAKICJLZWluZSBEYXRlaWVuIGF1c2dld8OkaGxlOiAtLW1lcmdlIGFuZ2VnZWJlbiwgYWJlciBrZWluZSBuaWNodC0iCiAienVzYW1tZW5nZWbDvGhydGVuIERhdGVpZW4gc2luZCBpbiBkZXIgRGF0ZWlhdXN3YWhsLiIKIAotIzogZ2l0azo4NjQ2CisjOiBnaXRrOjg3MTcKIG1zZ2lkICJDb21tYW5kIGxpbmUiCiBtc2dzdHIgIktvbW1hbmRvemVpbGUiCmRpZmYgLS1naXQgYS9naXRrLWdpdC9wby9lcy5wbyBiL2dpdGstZ2l0L3BvL2VzLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjYjE0ODYKLS0tIC9kZXYvbnVsbAorKysgYi9naXRrLWdpdC9wby9lcy5wbwpAQCAtMCwwICsxLDg5MCBAQAorIyBUcmFuc2xhdGlvbiBvZiBnaXRrCisjIENvcHlyaWdodCAoQykgMjAwNS0yMDA4IFNhbnRpYWdvIEdhbGEKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdpdGsgcGFja2FnZS4KKyMgU2FudGlhZ28gR2FsYSA8c2FudGlhZ28uZ2FsYUBnbWFpbC5jb20+LCAyMDA4LgorIworIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0a1xuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwOC0wMy0xMyAxNzoyOSswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwOC0wMy0yNSAxMToyMCswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBTYW50aWFnbyBHYWxhIDxzYW50aWFnby5nYWxhQGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBTcGFuaXNoXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IGdpdGs6MTExCittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIGdpdCByZXYtbGlzdDoiCittc2dzdHIgIkVycm9yIGFsIGVqZWN1dGFyIGdpdCByZXYtbGlzdDoiCisKKyM6IGdpdGs6MTI0Cittc2dpZCAiUmVhZGluZyIKK21zZ3N0ciAiTGV5ZW5kbyIKKworIzogZ2l0azoxNTEgZ2l0azoyMTkxCittc2dpZCAiUmVhZGluZyBjb21taXRzLi4uIgorbXNnc3RyICJMZXllbmRvIHJldmlzaW9uZXMuLi4iCisKKyM6IGdpdGs6Mjc1Cittc2dpZCAiQ2FuJ3QgcGFyc2UgZ2l0IGxvZyBvdXRwdXQ6IgorbXNnc3RyICJFcnJvciBhbmFsaXphbmRvIGxhIHNhbGlkYSBkZSBnaXQgbG9nOiIKKworIzogZ2l0azozODYgZ2l0azoyMTk1Cittc2dpZCAiTm8gY29tbWl0cyBzZWxlY3RlZCIKK21zZ3N0ciAiTm8gc2Ugc2VsZWNjaW9uYXJvbiByZXZpc2lvbmVzIgorCisjOiBnaXRrOjUwMAorbXNnaWQgIk5vIGNvbW1pdCBpbmZvcm1hdGlvbiBhdmFpbGFibGUiCittc2dzdHIgIkZhbHRhIGluZm9ybWFjacOzbiBzb2JyZSBsYXMgcmV2aXNpb25lcyIKKworIzogZ2l0azo1OTkgZ2l0azo2MjEgZ2l0azoxOTU1IGdpdGs6NjQyMyBnaXRrOjc5MjMgZ2l0azo4MDgyCittc2dpZCAiT0siCittc2dzdHIgIkFjZXB0YXIiCisKKyM6IGdpdGs6NjIzIGdpdGs6MTk1NiBnaXRrOjYxMDcgZ2l0azo2MTc4IGdpdGs6NjI3NSBnaXRrOjYzMjEgZ2l0azo2NDI1CisjOiBnaXRrOjc5MjQgZ2l0azo4MDgzCittc2dpZCAiQ2FuY2VsIgorbXNnc3RyICJDYW5jZWxhciIKKworIzogZ2l0azo2NjEKK21zZ2lkICJGaWxlIgorbXNnc3RyICJBcmNoaXZvIgorCisjOiBnaXRrOjY2MworbXNnaWQgIlVwZGF0ZSIKK21zZ3N0ciAiQWN0dWFsaXphciIKKworIzogZ2l0azo2NjQKK21zZ2lkICJSZXJlYWQgcmVmZXJlbmNlcyIKK21zZ3N0ciAiUmVsZWVyIHJlZmVyZW5jaWFzIgorCisjOiBnaXRrOjY2NQorbXNnaWQgIkxpc3QgcmVmZXJlbmNlcyIKK21zZ3N0ciAiTGlzdGEgZGUgcmVmZXJlbmNpYXMiCisKKyM6IGdpdGs6NjY2Cittc2dpZCAiUXVpdCIKK21zZ3N0ciAiU2FsaXIiCisKKyM6IGdpdGs6NjY4Cittc2dpZCAiRWRpdCIKK21zZ3N0ciAiRWRpdGFyIgorCisjOiBnaXRrOjY2OQorbXNnaWQgIlByZWZlcmVuY2VzIgorbXNnc3RyICJQcmVmZXJlbmNpYXMiCisKKyM6IGdpdGs6NjcyIGdpdGs6MTg5MgorbXNnaWQgIlZpZXciCittc2dzdHIgIlZpc3RhIgorCisjOiBnaXRrOjY3MworbXNnaWQgIk5ldyB2aWV3Li4uIgorbXNnc3RyICJOdWV2YSB2aXN0YS4uLiIKKworIzogZ2l0azo2NzQgZ2l0azoyMTMzIGdpdGs6ODcyMgorbXNnaWQgIkVkaXQgdmlldy4uLiIKK21zZ3N0ciAiTW9kaWZpY2FyIHZpc3RhLi4uIgorCisjOiBnaXRrOjY3NiBnaXRrOjIxMzQgZ2l0azo4NzIzCittc2dpZCAiRGVsZXRlIHZpZXciCittc2dzdHIgIkVsaW1pbmFyIHZpc3RhIgorCisjOiBnaXRrOjY3OAorbXNnaWQgIkFsbCBmaWxlcyIKK21zZ3N0ciAiVG9kb3MgbG9zIGFyY2hpdm9zIgorCisjOiBnaXRrOjY4MgorbXNnaWQgIkhlbHAiCittc2dzdHIgIkF5dWRhIgorCisjOiBnaXRrOjY4MyBnaXRrOjEzMTcKK21zZ2lkICJBYm91dCBnaXRrIgorbXNnc3RyICJBY2VyY2EgZGUgZ2l0ayIKKworIzogZ2l0azo2ODQKK21zZ2lkICJLZXkgYmluZGluZ3MiCittc2dzdHIgIkNvbWJpbmFjaW9uZXMgZGUgdGVjbGFzIgorCisjOiBnaXRrOjc0MQorbXNnaWQgIlNIQTEgSUQ6ICIKK21zZ3N0ciAiU0hBMSBJRDogIgorCisjOiBnaXRrOjc5MQorbXNnaWQgIkZpbmQiCittc2dzdHIgIkJ1c2NhciIKKworIzogZ2l0azo3OTIKK21zZ2lkICJuZXh0IgorbXNnc3RyICI8PCIKKworIzogZ2l0azo3OTMKK21zZ2lkICJwcmV2IgorbXNnc3RyICI+PiIKKworIzogZ2l0azo3OTQKK21zZ2lkICJjb21taXQiCittc2dzdHIgInJldmlzacOzbiIKKworIzogZ2l0azo3OTcgZ2l0azo3OTkgZ2l0azoyMzU2IGdpdGs6MjM3OSBnaXRrOjI0MDMgZ2l0azo0MzA2IGdpdGs6NDM2OQorbXNnaWQgImNvbnRhaW5pbmc6IgorbXNnc3RyICJxdWUgY29udGllbmU6IgorCisjOiBnaXRrOjgwMCBnaXRrOjE3NzggZ2l0azoxNzgzIGdpdGs6MjQzMQorbXNnaWQgInRvdWNoaW5nIHBhdGhzOiIKK21zZ3N0ciAicXVlIG1vZGlmaWNhIGxhIHJ1dGE6IgorCisjOiBnaXRrOjgwMSBnaXRrOjI0MzYKK21zZ2lkICJhZGRpbmcvcmVtb3Zpbmcgc3RyaW5nOiIKK21zZ3N0ciAicXVlIGHDsWFkZS9lbGltaW5hIGNhZGVuYToiCisKKyM6IGdpdGs6ODEwIGdpdGs6ODEyCittc2dpZCAiRXhhY3QiCittc2dzdHIgIkV4YWN0byIKKworIzogZ2l0azo4MTIgZ2l0azoyNTE0IGdpdGs6NDI3NAorbXNnaWQgIklnbkNhc2UiCittc2dzdHIgIk5vTWF5w7pzIgorCisjOiBnaXRrOjgxMiBnaXRrOjI0MDUgZ2l0azoyNTEyIGdpdGs6NDI3MAorbXNnaWQgIlJlZ2V4cCIKK21zZ3N0ciAiUmVnZXgiCisKKyM6IGdpdGs6ODE0IGdpdGs6ODE1IGdpdGs6MjUzMyBnaXRrOjI1NjMgZ2l0azoyNTcwIGdpdGs6NDM4MCBnaXRrOjQ0MzYKK21zZ2lkICJBbGwgZmllbGRzIgorbXNnc3RyICJUb2RvcyBsb3MgY2FtcG9zIgorCisjOiBnaXRrOjgxNSBnaXRrOjI1MzEgZ2l0azoyNTYzIGdpdGs6NDMzNgorbXNnaWQgIkhlYWRsaW5lIgorbXNnc3RyICJUw610dWxvIgorCisjOiBnaXRrOjgxNiBnaXRrOjI1MzEgZ2l0azo0MzM2IGdpdGs6NDQzNiBnaXRrOjQ4MjcKK21zZ2lkICJDb21tZW50cyIKK21zZ3N0ciAiQ29tZW50YXJpb3MiCisKKyM6IGdpdGs6ODE2IGdpdGs6MjUzMSBnaXRrOjI1MzUgZ2l0azoyNTcwIGdpdGs6NDMzNiBnaXRrOjQ3NjMgZ2l0azo1OTU2CisjOiBnaXRrOjU5NzEKK21zZ2lkICJBdXRob3IiCittc2dzdHIgIkF1dG9yIgorCisjOiBnaXRrOjgxNiBnaXRrOjI1MzEgZ2l0azo0MzM2IGdpdGs6NDc2NQorbXNnaWQgIkNvbW1pdHRlciIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjg0NQorbXNnaWQgIlNlYXJjaCIKK21zZ3N0ciAiQnVzY2FyIgorCisjOiBnaXRrOjg1MgorbXNnaWQgIkRpZmYiCittc2dzdHIgIkRpZmVyZW5jaWEiCisKKyM6IGdpdGs6ODU0Cittc2dpZCAiT2xkIHZlcnNpb24iCittc2dzdHIgIlZlcnNpw7NuIGFudGlndWEiCisKKyM6IGdpdGs6ODU2Cittc2dpZCAiTmV3IHZlcnNpb24iCittc2dzdHIgIlZlcnNpw7NuIG51ZXZhIgorCisjOiBnaXRrOjg1OAorbXNnaWQgIkxpbmVzIG9mIGNvbnRleHQiCittc2dzdHIgIkzDrW5lYXMgZGUgY29udGV4dG8iCisKKyM6IGdpdGs6ODY4Cittc2dpZCAiSWdub3JlIHNwYWNlIGNoYW5nZSIKK21zZ3N0ciAiSWdub3JhIGNhbWJpb3MgZGUgZXNwYWNpYWRvIgorCisjOiBnaXRrOjkyNgorbXNnaWQgIlBhdGNoIgorbXNnc3RyICJQYXJjaGUiCisKKyM6IGdpdGs6OTI4Cittc2dpZCAiVHJlZSIKK21zZ3N0ciAiw4FyYm9sIgorCisjOiBnaXRrOjEwNTMgZ2l0azoxMDY4IGdpdGs6NjAyMgorbXNnaWQgIkRpZmYgdGhpcyAtPiBzZWxlY3RlZCIKK21zZ3N0ciAiRGlmZXJlbmNpYSBkZSBlc3RhIC0+IHNlbGVjY2lvbmFkYSIKKworIzogZ2l0azoxMDU1IGdpdGs6MTA3MCBnaXRrOjYwMjMKK21zZ2lkICJEaWZmIHNlbGVjdGVkIC0+IHRoaXMiCittc2dzdHIgIkRpZmVyZW5jaWEgZGUgc2VsZWNjaW9uYWRhIC0+IGVzdGEiCisKKyM6IGdpdGs6MTA1NyBnaXRrOjEwNzIgZ2l0azo2MDI0Cittc2dpZCAiTWFrZSBwYXRjaCIKK21zZ3N0ciAiQ3JlYXIgcGF0Y2giCisKKyM6IGdpdGs6MTA1OCBnaXRrOjYxNjIKK21zZ2lkICJDcmVhdGUgdGFnIgorbXNnc3RyICJDcmVhciBldGlxdWV0YSIKKworIzogZ2l0azoxMDU5IGdpdGs6NjI1NQorbXNnaWQgIldyaXRlIGNvbW1pdCB0byBmaWxlIgorbXNnc3RyICJFc2NyaWJpciByZXZpc2lvbmVzIGEgYXJjaGl2byIKKworIzogZ2l0azoxMDYwIGdpdGs6NjMwOQorbXNnaWQgIkNyZWF0ZSBuZXcgYnJhbmNoIgorbXNnc3RyICJDcmVhciBudWV2YSByYW1hIgorCisjOiBnaXRrOjEwNjEKK21zZ2lkICJDaGVycnktcGljayB0aGlzIGNvbW1pdCIKK21zZ3N0ciAiQcOxYWRpciBlc3RhIHJldmlzacOzbiBhIGxhIHJhbWEgYWN0dWFsIChjaGVycnktcGljaykiCisKKyM6IGdpdGs6MTA2MworbXNnaWQgIlJlc2V0IEhFQUQgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgIlRyYWVyIGxhIHJhbWEgSEVBRCBhcXXDrSIKKworIzogZ2l0azoxMDc5Cittc2dpZCAiQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIgorbXNnc3RyICJDYW1iaWFyIGEgZXN0YSByYW1hIgorCisjOiBnaXRrOjEwODEKK21zZ2lkICJSZW1vdmUgdGhpcyBicmFuY2giCittc2dzdHIgIkVsaW1pbmFyIGVzdGEgcmFtYSIKKworIzogZ2l0azoxMDg3Cittc2dpZCAiSGlnaGxpZ2h0IHRoaXMgdG9vIgorbXNnc3RyICJTZWxlY2Npb25hciB0YW1iacOpbiIKKworIzogZ2l0azoxMDg5Cittc2dpZCAiSGlnaGxpZ2h0IHRoaXMgb25seSIKK21zZ3N0ciAiU2VsZWNjaW9uYXIgc8OzbG8iCisKKyM6IGdpdGs6MTMxOAorbXNnaWQgIiIKKyJcbiIKKyJHaXRrIC0gYSBjb21taXQgdmlld2VyIGZvciBnaXRcbiIKKyJcbiIKKyJDb3B5cmlnaHQgwqkgMjAwNS0yMDA2IFBhdWwgTWFja2VycmFzXG4iCisiXG4iCisiVXNlIGFuZCByZWRpc3RyaWJ1dGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIKK21zZ3N0ciAiIgorIlxuIgorIkdpdGsgLSB1biB2aXN1YWxpemFkb3IgZGUgcmV2aXNpb25lcyBwYXJhIGdpdFxuIgorIlxuIgorIkNvcHlyaWdodCDCqSAyMDA1LTIwMDYgUGF1bCBNYWNrZXJyYXNcbiIKKyJcbiIKKyJVc28geSByZWRpc3RyaWJ1Y2nDs24gcGVybWl0aWRvcyBzZWfDum4gbG9zIHTDqXJtaW5vcyBkZSBsYSBMaWNlbmNpYSBQw7pibGljYSBHZW5lcmFsIGRlICIKKyJHTlUgKEdOVSBHUEwpIgorCisjOiBnaXRrOjEzMjYgZ2l0azoxMzg3IGdpdGs6NjU4MQorbXNnaWQgIkNsb3NlIgorbXNnc3RyICJDZXJyYXIiCisKKyM6IGdpdGs6MTM0NQorbXNnaWQgIkdpdGsga2V5IGJpbmRpbmdzIgorbXNnc3RyICJDb21iaW5hY2lvbmVzIGRlIHRlY2xhIGRlIEdpdGsiCisKKyM6IGdpdGs6MTM0NworbXNnaWQgIkdpdGsga2V5IGJpbmRpbmdzOiIKK21zZ3N0ciAiQ29tYmluYWNpb25lcyBkZSB0ZWNsYSBkZSBHaXRrOiIKKworIzogZ2l0azoxMzQ5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVE+XHRcdFF1aXQiCittc2dzdHIgIjwlcy1RPlx0XHRTYWxpciIKKworIzogZ2l0azoxMzUwCittc2dpZCAiPEhvbWU+XHRcdE1vdmUgdG8gZmlyc3QgY29tbWl0IgorbXNnc3RyICI8SG9tZT5cdFx0SXIgYSBsYSBwcmltZXJhIHJldmlzacOzbiIKKworIzogZ2l0azoxMzUxCittc2dpZCAiPEVuZD5cdFx0TW92ZSB0byBsYXN0IGNvbW1pdCIKK21zZ3N0ciAiPEVuZD5cdFx0SXIgYSBsYSDDumx0aW1hIHJldmlzacOzbiIKKworIzogZ2l0azoxMzUyCittc2dpZCAiPFVwPiwgcCwgaVx0TW92ZSB1cCBvbmUgY29tbWl0IgorbXNnc3RyICI8VXA+LCBwLCBpXHRTdWJpciB1bmEgcmV2aXNpw7NuIgorCisjOiBnaXRrOjEzNTMKK21zZ2lkICI8RG93bj4sIG4sIGtcdE1vdmUgZG93biBvbmUgY29tbWl0IgorbXNnc3RyICI8RG93bj4sIG4sIGtcdEJhamFyIHVuYSByZXZpc2nDs24iCisKKyM6IGdpdGs6MTM1NAorbXNnaWQgIjxMZWZ0Piwgeiwgalx0R28gYmFjayBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxMZWZ0Piwgeiwgalx0UmV0cm9jZWRlciBlbiBsYSBoaXN0b3JpYSIKKworIzogZ2l0azoxMzU1Cittc2dpZCAiPFJpZ2h0PiwgeCwgbFx0R28gZm9yd2FyZCBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxSaWdodD4sIHgsIGxcdEF2YW56YXIgZW4gbGEgaGlzdG9yaWEiCisKKyM6IGdpdGs6MTM1NgorbXNnaWQgIjxQYWdlVXA+XHRNb3ZlIHVwIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8UGFnZVVwPlx0U3ViaXIgdW5hIHDDoWdpbmEgZW4gbGEgbGlzdGEgZGUgcmV2aXNpb25lcyIKKworIzogZ2l0azoxMzU3Cittc2dpZCAiPFBhZ2VEb3duPlx0TW92ZSBkb3duIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8UGFnZURvd24+XHRCYWphciB1bmEgcMOhZ2luYSBlbiBsYSBsaXN0YSBkZSByZXZpc2lvbmVzIgorCisjOiBnaXRrOjEzNTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtSG9tZT5cdFNjcm9sbCB0byB0b3Agb2YgY29tbWl0IGxpc3QiCittc2dzdHIgIjwlcy1Ib21lPlx0RGVzcGxhemFyc2UgYWwgaW5pY2lvIGRlIGxhIGxpc3RhIGRlIHJldmlzaW9uZXMiCisKKyM6IGdpdGs6MTM1OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1FbmQ+XHRTY3JvbGwgdG8gYm90dG9tIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtRW5kPlx0RGVzcGxhemFyc2UgYWwgZmluYWwgZGUgbGEgbGlzdGEgZGUgcmV2aXNpb25lcyIKKworIzogZ2l0azoxMzYwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtVXA+XHREZXNwbGF6YXIgdW5hIGzDrW5lYSBoYWNpYSBhcnJpYmEgbGEgbGlzdGEgZGUgcmV2aXNpb25lcyIKKworIzogZ2l0azoxMzYxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgbGluZSIKK21zZ3N0ciAiPCVzLURvd24+XHREZXNwbGF6YXIgdW5hIGzDrW5lYSBoYWNpYSBhYmFqbyBsYSBsaXN0YSBkZSByZXZpc2lvbmVzIgorCisjOiBnaXRrOjEzNjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUGFnZVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8JXMtUGFnZVVwPlx0RGVzcGxhemFyIHVuYSBww6FnaW5hIGhhY2lhIGFycmliYSBsYSBsaXN0YSBkZSByZXZpc2lvbmVzIgorCisjOiBnaXRrOjEzNjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUGFnZURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgcGFnZSIKK21zZ3N0ciAiPCVzLVBhZ2VEb3duPlx0RGVzcGxhemFyIHVuYSBww6FnaW5hIGhhY2lhIGFiYWpvIGxhIGxpc3RhIGRlIHJldmlzaW9uZXMiCisKKyM6IGdpdGs6MTM2NAorbXNnaWQgIjxTaGlmdC1VcD5cdEZpbmQgYmFja3dhcmRzICh1cHdhcmRzLCBsYXRlciBjb21taXRzKSIKK21zZ3N0ciAiPFNoaWZ0LVVwPlx0QnVzY2FyIGhhY2lhIGF0csOhcyAoYXJyaWJhLCByZXZpc2lvbmVzIHNpZ3VpZW50ZXMpIgorCisjOiBnaXRrOjEzNjUKK21zZ2lkICI8U2hpZnQtRG93bj5cdEZpbmQgZm9yd2FyZHMgKGRvd253YXJkcywgZWFybGllciBjb21taXRzKSIKK21zZ3N0ciAiPFNoaWZ0LURvd24+XHRCdXNjYXIgaGFjaWEgYWRlbGFudGUgKGFiYWpvLCByZXZpc2lvbmVzIGFudGVyaW9yZXMpIgorCisjOiBnaXRrOjEzNjYKK21zZ2lkICI8RGVsZXRlPiwgYlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPERlbGV0ZT4sIGJcdERlc3BsYXphIGhhY2lhIGFycmliYSB1bmEgcMOhZ2luYSBsYSB2aXN0YSBkZSBkaWZlcmVuY2lhcyIKKworIzogZ2l0azoxMzY3Cittc2dpZCAiPEJhY2tzcGFjZT5cdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxCYWNrc3BhY2U+XHREZXNwbGF6YSBoYWNpYSBhcnJpYmEgdW5hIHDDoWdpbmEgbGEgdmlzdGEgZGUgZGlmZXJlbmNpYXMiCisKKyM6IGdpdGs6MTM2OAorbXNnaWQgIjxTcGFjZT5cdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIG9uZSBwYWdlIgorbXNnc3RyICI8U3BhY2U+XHRcdERlc3BsYXphIGhhY2lhIGFiYWpvIHVuYSBww6FnaW5hIGxhIHZpc3RhIGRlIGRpZmVyZW5jaWFzIgorCisjOiBnaXRrOjEzNjkKK21zZ2lkICJ1XHRcdFNjcm9sbCBkaWZmIHZpZXcgdXAgMTggbGluZXMiCittc2dzdHIgInVcdFx0RGVzcGxhemEgaGFjaWEgYXJyaWJhIDE4IGzDrW5lYXMgbGEgdmlzdGEgZGUgZGlmZXJlbmNpYXMiCisKKyM6IGdpdGs6MTM3MAorbXNnaWQgImRcdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIDE4IGxpbmVzIgorbXNnc3RyICJkXHRcdERlc3BsYXphIGhhY2lhIGFiYWpvIDE4IGzDrW5lYXMgbGEgdmlzdGEgZGUgZGlmZXJlbmNpYXMiCisKKyM6IGdpdGs6MTM3MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1GPlx0XHRGaW5kIgorbXNnc3RyICI8JXMtRj5cdFx0QnVzY2FyIgorCisjOiBnaXRrOjEzNzIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRz5cdFx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgorbXNnc3RyICI8JXMtRz5cdFx0QnVzY2FyIGVsIHNpZ3VpZW50ZSIKKworIzogZ2l0azoxMzczCittc2dpZCAiPFJldHVybj5cdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPFJldHVybj5cdEJ1c2NhciBlbCBzaWd1aWVudGUiCisKKyM6IGdpdGs6MTM3NAorbXNnaWQgIi9cdFx0TW92ZSB0byBuZXh0IGZpbmQgaGl0LCBvciByZWRvIGZpbmQiCittc2dzdHIgIi9cdFx0QnVzY2FyIGVsIHNpZ3VpZW50ZSwgbyByZWluaWNpYXIgbGEgYsO6c3F1ZWRhIgorCisjOiBnaXRrOjEzNzUKK21zZ2lkICI/XHRcdE1vdmUgdG8gcHJldmlvdXMgZmluZCBoaXQiCittc2dzdHIgIj9cdFx0QnVzY2FyIGVsIGFudGVyaW9yIgorCisjOiBnaXRrOjEzNzYKK21zZ2lkICJmXHRcdFNjcm9sbCBkaWZmIHZpZXcgdG8gbmV4dCBmaWxlIgorbXNnc3RyICJmXHRcdERlc3BsYXphciBsYSB2aXN0YSBkZSBkaWZlcmVuY2lhcyBhbCBhcmNoaXZvIHNpZ3VpZW50ZSIKKworIzogZ2l0azoxMzc3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVM+XHRcdFNlYXJjaCBmb3IgbmV4dCBoaXQgaW4gZGlmZiB2aWV3IgorbXNnc3RyICI8JXMtUz5cdFx0QnVzY2FyIHNpZ3VpZW50ZSBlbiBsYSB2aXN0YSBkZSBkaWZlcmVuY2lhcyIKKworIzogZ2l0azoxMzc4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVI+XHRcdFNlYXJjaCBmb3IgcHJldmlvdXMgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVI+XHRcdEJ1c2NhciBhbnRlcmlvciBlbiBsYSB2aXN0YSBkZSBkaWZlcmVuY2lhcyIKKworIzogZ2l0azoxMzc5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQKz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLUtQKz5cdEF1bWVudGFyIHRhbWHDsW8gZGVsIHRleHRvIgorCisjOiBnaXRrOjEzODAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtcGx1cz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLXBsdXM+XHRBdW1lbnRhciB0YW1hw7FvIGRlbCB0ZXh0byIKKworIzogZ2l0azoxMzgxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQLT5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLUtQLT5cdERpc21pbnVpciB0YW1hw7FvIGRlbCB0ZXh0byIKKworIzogZ2l0azoxMzgyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLW1pbnVzPlx0RGVjcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtbWludXM+XHREaXNtaW51aXIgdGFtYcOxbyBkZWwgdGV4dG8iCisKKyM6IGdpdGs6MTM4MworbXNnaWQgIjxGNT5cdFx0VXBkYXRlIgorbXNnc3RyICI8RjU+XHRcdEFjdHVhbGl6YXIiCisKKyM6IGdpdGs6MTg5NgorbXNnaWQgIkdpdGsgdmlldyBkZWZpbml0aW9uIgorbXNnc3RyICJEZWZpbmljacOzbiBkZSB2aXN0YXMgZGUgR2l0ayIKKworIzogZ2l0azoxOTIxCittc2dpZCAiTmFtZSIKK21zZ3N0ciAiTm9tYnJlIgorCisjOiBnaXRrOjE5MjQKK21zZ2lkICJSZW1lbWJlciB0aGlzIHZpZXciCittc2dzdHIgIlJlY29yZGFyIGVzdGEgdmlzdGEiCisKKyM6IGdpdGs6MTkyOAorbXNnaWQgIkNvbW1pdHMgdG8gaW5jbHVkZSAoYXJndW1lbnRzIHRvIGdpdCByZXYtbGlzdCk6IgorbXNnc3RyICJSZXZpc2lvbmVzIGEgaW5jbHVpciAoYXJndW1lbnRvcyBhIGdpdCByZXYtbGlzdCk6IgorCisjOiBnaXRrOjE5MzUKK21zZ2lkICJDb21tYW5kIHRvIGdlbmVyYXRlIG1vcmUgY29tbWl0cyB0byBpbmNsdWRlOiIKK21zZ3N0ciAiQ29tYW5kbyBxdWUgZ2VuZXJhIG3DoXMgcmV2aXNpb25lcyBhIGluY2x1aXI6IgorCisjOiBnaXRrOjE5NDIKK21zZ2lkICJFbnRlciBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gaW5jbHVkZSwgb25lIHBlciBsaW5lOiIKK21zZ3N0ciAiSW50cm9kdWNpciBhcmNoaXZvcyB5IGRpcmVjdG9yaW9zIGEgaW5jbHVpciwgdW5vIHBvciBsw61uZWE6IgorCisjOiBnaXRrOjE5ODkKK21zZ2lkICJFcnJvciBpbiBjb21taXQgc2VsZWN0aW9uIGFyZ3VtZW50czoiCittc2dzdHIgIkVycm9yIGVuIGxvcyBhcmd1bWVudG9zIGRlIHNlbGVjY2nDs24gZGUgbGFzIHJldmlzaW9uZXM6IgorCisjOiBnaXRrOjIwNDMgZ2l0azoyMTI3IGdpdGs6MjU4MyBnaXRrOjI1OTcgZ2l0azozNzgxIGdpdGs6ODY4OCBnaXRrOjg2ODkKK21zZ2lkICJOb25lIgorbXNnc3RyICJOaW5ndW5vIgorCisjOiBnaXRrOjI1MzEgZ2l0azo0MzM2IGdpdGs6NTk1OCBnaXRrOjU5NzMKK21zZ2lkICJEYXRlIgorbXNnc3RyICJGZWNoYSIKKworIzogZ2l0azoyNTMxIGdpdGs6NDMzNgorbXNnaWQgIkNEYXRlIgorbXNnc3RyICJGZWNoYSBkZSBjcmVhY2nDs24iCisKKyM6IGdpdGs6MjY4MCBnaXRrOjI2ODUKK21zZ2lkICJEZXNjZW5kYW50IgorbXNnc3RyICJEZXNjZW5kaWVudGUiCisKKyM6IGdpdGs6MjY4MQorbXNnaWQgIk5vdCBkZXNjZW5kYW50IgorbXNnc3RyICJObyBkZXNjZW5kaWVudGUiCisKKyM6IGdpdGs6MjY4OCBnaXRrOjI2OTMKK21zZ2lkICJBbmNlc3RvciIKK21zZ3N0ciAiQW50ZXBhc2FkbyIKKworIzogZ2l0azoyNjg5Cittc2dpZCAiTm90IGFuY2VzdG9yIgorbXNnc3RyICJObyBhbnRlcGFzYWRvIgorCisjOiBnaXRrOjI5MjQKK21zZ2lkICJMb2NhbCBjaGFuZ2VzIGNoZWNrZWQgaW4gdG8gaW5kZXggYnV0IG5vdCBjb21taXR0ZWQiCittc2dzdHIgIkNhbWJpb3MgbG9jYWxlcyBhw7FhZGlkb3MgYWwgw61uZGljZSBwZXJvIHNpbiBjb21wbGV0YXIgcmV2aXNpw7NuIgorCisjOiBnaXRrOjI5NTQKK21zZ2lkICJMb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzLCBub3QgY2hlY2tlZCBpbiB0byBpbmRleCIKK21zZ3N0ciAiQ2FtYmlvcyBsb2NhbGVzIHNpbiBhw7FhZGlyIGFsIMOtbmRpY2UiCisKKyM6IGdpdGs6NDMwNQorbXNnaWQgIlNlYXJjaGluZyIKK21zZ3N0ciAiQnVzY2FuZG8iCisKKyM6IGdpdGs6NDc2NworbXNnaWQgIlRhZ3M6IgorbXNnc3RyICJFdGlxdWV0YXM6IgorCisjOiBnaXRrOjQ3ODQgZ2l0azo0NzkwIGdpdGs6NTk1MQorbXNnaWQgIlBhcmVudCIKK21zZ3N0ciAiUGFkcmUiCisKKyM6IGdpdGs6NDc5NQorbXNnaWQgIkNoaWxkIgorbXNnc3RyICJIaWphIgorCisjOiBnaXRrOjQ4MDQKK21zZ2lkICJCcmFuY2giCittc2dzdHIgIlJhbWEiCisKKyM6IGdpdGs6NDgwNworbXNnaWQgIkZvbGxvd3MiCittc2dzdHIgIlNpZ3VlLWEiCisKKyM6IGdpdGs6NDgxMAorbXNnaWQgIlByZWNlZGVzIgorbXNnc3RyICJQcmVjZWRlLWEiCisKKyM6IGdpdGs6NTA5MworbXNnaWQgIkVycm9yIGdldHRpbmcgbWVyZ2UgZGlmZnM6IgorbXNnc3RyICJFcnJvciBhbCBsZWVyIGxhcyBkaWZlcmVuY2lhcyBkZSBmdXNpw7NuOiIKKworIzogZ2l0azo1Nzc4Cittc2dpZCAiR290bzoiCittc2dzdHIgIklyIGE6IgorCisjOiBnaXRrOjU3ODAKK21zZ2lkICJTSEExIElEOiIKK21zZ3N0ciAiU0hBMSBJRDoiCisKKyM6IGdpdGs6NTgwNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNob3J0IFNIQTEgaWQgJXMgaXMgYW1iaWd1b3VzIgorbXNnc3RyICJMYSBpZCBTSEExIGFicmV2aWFkYSAlcyBlcyBhbWJpZ3VhIgorCisjOiBnaXRrOjU4MTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTSEExIGlkICVzIGlzIG5vdCBrbm93biIKK21zZ3N0ciAiTGEgaWQgU0hBMSAlcyBlcyBkZXNjb25vY2lkYSIKKworIzogZ2l0azo1ODE5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFnL0hlYWQgJXMgaXMgbm90IGtub3duIgorbXNnc3RyICJMYSBldGlxdWV0YS9yYW1hICVzIGVzIGRlY29ub2NpZGEiCisKKyM6IGdpdGs6NTk2MQorbXNnaWQgIkNoaWxkcmVuIgorbXNnc3RyICJIaWphcyIKKworIzogZ2l0azo2MDE4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgJXMgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgIlBvbmVyIGxhIHJhbWEgJXMgZW4gZXN0YSByZXZpc2nDs24iCisKKyM6IGdpdGs6NjA0OQorbXNnaWQgIlRvcCIKK21zZ3N0ciAiT3JpZ2VuIgorCisjOiBnaXRrOjYwNTAKK21zZ2lkICJGcm9tIgorbXNnc3RyICJEZSIKKworIzogZ2l0azo2MDU1Cittc2dpZCAiVG8iCittc2dzdHIgIkEiCisKKyM6IGdpdGs6NjA3OAorbXNnaWQgIkdlbmVyYXRlIHBhdGNoIgorbXNnc3RyICJHZW5lcmFyIHBhcmNoZSIKKworIzogZ2l0azo2MDgwCittc2dpZCAiRnJvbToiCittc2dzdHIgIkRlOiIKKworIzogZ2l0azo2MDg5Cittc2dpZCAiVG86IgorbXNnc3RyICJQYXJhOiIKKworIzogZ2l0azo2MDk4Cittc2dpZCAiUmV2ZXJzZSIKK21zZ3N0ciAiSW52ZXJ0aXIiCisKKyM6IGdpdGs6NjEwMCBnaXRrOjYyNjkKK21zZ2lkICJPdXRwdXQgZmlsZToiCittc2dzdHIgIkVzY3JpYmlyIGEgYXJjaGl2bzoiCisKKyM6IGdpdGs6NjEwNgorbXNnaWQgIkdlbmVyYXRlIgorbXNnc3RyICJHZW5lcmFyIgorCisjOiBnaXRrOjYxNDIKK21zZ2lkICJFcnJvciBjcmVhdGluZyBwYXRjaDoiCittc2dzdHIgIkVycm9yIGVuIGxhIGNyZWFjacOzbiBkZWwgcGFyY2hlOiIKKworIzogZ2l0azo2MTY0IGdpdGs6NjI1NyBnaXRrOjYzMTEKK21zZ2lkICJJRDoiCittc2dzdHIgIklEOiIKKworIzogZ2l0azo2MTczCittc2dpZCAiVGFnIG5hbWU6IgorbXNnc3RyICJOb21icmUgZGUgZXRpcXVldGE6IgorCisjOiBnaXRrOjYxNzcgZ2l0azo2MzIwCittc2dpZCAiQ3JlYXRlIgorbXNnc3RyICJDcmVhciIKKworIzogZ2l0azo2MTkyCittc2dpZCAiTm8gdGFnIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICJObyBzZSBoYSBlc3BlY2lmaWNhZG8gZXRpcXVldGEiCisKKyM6IGdpdGs6NjE5NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZyBcIiVzXCIgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIkxhIGV0aXF1ZXRhIFwiJXNcIiB5YSBleGlzdGUiCisKKyM6IGdpdGs6NjIwMgorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRhZzoiCittc2dzdHIgIkVycm9yIGFsIGNyZWFyIGxhIGV0aXF1ZXRhOiIKKworIzogZ2l0azo2MjY2Cittc2dpZCAiQ29tbWFuZDoiCittc2dzdHIgIkNvbWFuZG86IgorCisjOiBnaXRrOjYyNzQKK21zZ2lkICJXcml0ZSIKK21zZ3N0ciAiRXNjcmliaXIiCisKKyM6IGdpdGs6NjI5MAorbXNnaWQgIkVycm9yIHdyaXRpbmcgY29tbWl0OiIKK21zZ3N0ciAiRXJyb3IgYWwgZXNjcmliaXIgcmV2aXNpw7NuOiIKKworIzogZ2l0azo2MzE2Cittc2dpZCAiTmFtZToiCittc2dzdHIgIk5vbWJyZToiCisKKyM6IGdpdGs6NjMzNQorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IGEgbmFtZSBmb3IgdGhlIG5ldyBicmFuY2giCittc2dzdHIgIkVzcGVjaWZpcXVlIHVuIG5vbWJyZSBwYXJhIGxhIG51ZXZhIHJhbWEiCisKKyM6IGdpdGs6NjM2NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBpcyBhbHJlYWR5IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmUtYXBwbHkgaXQ/IgorbXNnc3RyICJMYSByZXZpc2nDs24gJXMgeWEgZXN0w6EgaW5jbHVpZGEgZW4gbGEgcmFtYSAlcyAtLSDCv1ZvbHZlciBhIGFwbGljYXJsYT8iCisKKyM6IGdpdGs6NjM2OQorbXNnaWQgIkNoZXJyeS1waWNraW5nIgorbXNnc3RyICJFbGlnaWVuZG8gcmV2aXNpb25lcyAoY2hlcnJ5LXBpY2tpbmcpIgorCisjOiBnaXRrOjYzODEKK21zZ2lkICJObyBjaGFuZ2VzIGNvbW1pdHRlZCIKK21zZ3N0ciAiTm8gc2UgaGFuIGd1YXJkYWRvIGNhbWJpb3MiCisKKyM6IGdpdGs6NjQwNAorbXNnaWQgIkNvbmZpcm0gcmVzZXQiCittc2dzdHIgIkNvbmZpcm1hciBnaXQgcmVzZXQiCisKKyM6IGdpdGs6NjQwNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAlcyB0byAlcz8iCittc2dzdHIgIsK/UmVwb25lciBsYSByYW1hICVzIGEgJXM/IgorCisjOiBnaXRrOjY0MTAKK21zZ2lkICJSZXNldCB0eXBlOiIKK21zZ3N0ciAiVGlwbyBkZSByZXBvc2ljacOzbjoiCisKKyM6IGdpdGs6NjQxNAorbXNnaWQgIlNvZnQ6IExlYXZlIHdvcmtpbmcgdHJlZSBhbmQgaW5kZXggdW50b3VjaGVkIgorbXNnc3RyICJTdWF2ZTogTm8gYWx0ZXJhIGxhIGNvcGlhIGRlIHRyYWJham8gbmkgZWwgw61uZGljZSIKKworIzogZ2l0azo2NDE3Cittc2dpZCAiTWl4ZWQ6IExlYXZlIHdvcmtpbmcgdHJlZSB1bnRvdWNoZWQsIHJlc2V0IGluZGV4IgorbXNnc3RyICJNaXh0YTogQWN0dWFsaXphIGVsIMOtbmRpY2UsIG5vIGFsdGVyYSBsYSBjb3BpYSBkZSB0cmFiYWpvIgorCisjOiBnaXRrOjY0MjAKK21zZ2lkICIiCisiSGFyZDogUmVzZXQgd29ya2luZyB0cmVlIGFuZCBpbmRleFxuIgorIihkaXNjYXJkIEFMTCBsb2NhbCBjaGFuZ2VzKSIKK21zZ3N0ciAiIgorIkR1cmE6IEFjdHVhbGl6YSBlbCDDrW5kaWNlIHkgbGEgY29waWEgZGUgdHJhYmFqb1xuIgorIihhYmFuZG9uYSBUT0RBUyBsYXMgbW9kaWZpY2FjaW9uZXMgbG9jYWxlcykiCisKKyM6IGdpdGs6NjQzNgorbXNnaWQgIlJlc2V0dGluZyIKK21zZ3N0ciAiUmVwb25pZW5kbyIKKworIzogZ2l0azo2NDkzCittc2dpZCAiQ2hlY2tpbmcgb3V0IgorbXNnc3RyICJDcmVhbmRvIGNvcGlhIGRlIHRyYWJham8iCisKKyM6IGdpdGs6NjUyMworbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2giCittc2dzdHIgIk5vIHNlIHB1ZWRlIGJvcnJhciBsYSByYW1hIGFjdHVhbCIKKworIzogZ2l0azo2NTI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjb21taXRzIG9uIGJyYW5jaCAlcyBhcmVuJ3Qgb24gYW55IG90aGVyIGJyYW5jaC5cbiIKKyJSZWFsbHkgZGVsZXRlIGJyYW5jaCAlcz8iCittc2dzdHIgIiIKKyJMYXMgcmV2aXNpb25lcyBkZSBsYSByYW1hICVzIG5vIGVzdMOhbiBwcmVzZW50ZXMgZW4gb3RyYXMgcmFtYXMuXG4iCisiwr9Cb3JyYXIgbGEgcmFtYSAlcz8iCisKKyM6IGdpdGs6NjU2MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZ3MgYW5kIGhlYWRzOiAlcyIKK21zZ3N0ciAiRXRpcXVldGFzIHkgcmFtYXM6ICVzIgorCisjOiBnaXRrOjY1NzQKK21zZ2lkICJGaWx0ZXIiCittc2dzdHIgIkZpbHRybyIKKworIzogZ2l0azo2ODY4Cittc2dpZCAiIgorIkVycm9yIHJlYWRpbmcgY29tbWl0IHRvcG9sb2d5IGluZm9ybWF0aW9uOyBicmFuY2ggYW5kIHByZWNlZGluZy9mb2xsb3dpbmcgIgorInRhZyBpbmZvcm1hdGlvbiB3aWxsIGJlIGluY29tcGxldGUuIgorbXNnc3RyICIiCisiRXJyb3IgYWwgbGVlciBsYSB0b3BvbG9nw61hIGRlIHJldmlzaW9uZXM6IGxhIGluZm9ybWFjacOzbiBzb2JyZSAiCisibGFzIHJhbWFzIHkgZXRpcXVldGFzIHByZWNlZGVudGVzIHkgc2lndWllbnRlcyBzZXLDoSBpbmNvbXBsZXRhLiIKKworIzogZ2l0azo3ODUyCittc2dpZCAiVGFnIgorbXNnc3RyICJFdGlxdWV0YSIKKworIzogZ2l0azo3ODUyCittc2dpZCAiSWQiCittc2dzdHIgIklkIgorCisjOiBnaXRrOjc4OTIKK21zZ2lkICJHaXRrIGZvbnQgY2hvb3NlciIKK21zZ3N0ciAiU2VsZWN0b3IgZGUgdGlwb2dyYWbDrWFzIGdpdGsiCisKKyM6IGdpdGs6NzkwOQorbXNnaWQgIkIiCittc2dzdHIgIkIiCisKKyM6IGdpdGs6NzkxMgorbXNnaWQgIkkiCittc2dzdHIgIkkiCisKKyM6IGdpdGs6ODAwNQorbXNnaWQgIkdpdGsgcHJlZmVyZW5jZXMiCittc2dzdHIgIlByZWZlcmVuY2lhcyBkZSBnaXRrIgorCisjOiBnaXRrOjgwMDYKK21zZ2lkICJDb21taXQgbGlzdCBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgIk9wY2lvbmVzIGRlIHZpc3VhbGl6YWNpw7NuIGRlIGxhIGxpc3RhIGRlIHJldmlzaW9uZXMiCisKKyM6IGdpdGs6ODAwOQorbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKGxpbmVzKSIKK21zZ3N0ciAiQW5jaG8gbcOheGltbyBkZWwgZ3LDoWZpY28gKGVuIGzDrW5lYXMpIgorCisjOiBnaXRrOjgwMTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoICglIG9mIHBhbmUpIgorbXNnc3RyICJBbmNobyBtw6F4aW1vIGRlbCBncsOhZmljbyAoZW4gJSBkZWwgcGFuZWwpIgorCisjOiBnaXRrOjgwMTgKK21zZ2lkICJTaG93IGxvY2FsIGNoYW5nZXMiCittc2dzdHIgIk1vc3RyYXIgY2FtYmlvcyBsb2NhbGVzIgorCisjOiBnaXRrOjgwMjMKK21zZ2lkICJBdXRvLXNlbGVjdCBTSEExIgorbXNnc3RyICJTZWxlY2Npb25hciBhdXRvbcOhdGljYW1lbnRlIFNIQTEgaGFzaCIKKworIzogZ2l0azo4MDI4Cittc2dpZCAiRGlmZiBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgIk9wY2lvbmVzIGRlIHZpc3VhbGl6YWNpw7NuIGRlIGRpZmVyZW5jaWFzIgorCisjOiBnaXRrOjgwMzAKK21zZ2lkICJUYWIgc3BhY2luZyIKK21zZ3N0ciAiRXNwYWNpYWRvIGRlIHRhYnVsYWRvciIKKworIzogZ2l0azo4MDM0Cittc2dpZCAiRGlzcGxheSBuZWFyYnkgdGFncyIKK21zZ3N0ciAiTW9zdHJhciBldGlxdWV0YXMgY2VyY2FuYXMiCisKKyM6IGdpdGs6ODAzOQorbXNnaWQgIkxpbWl0IGRpZmZzIHRvIGxpc3RlZCBwYXRocyIKK21zZ3N0ciAiTGltaXRhciBsYXMgZGlmZXJlbmNpYXMgYSBsYXMgcnV0YXMgc2VsZWNjaW9uYWRhcyIKKworIzogZ2l0azo4MDQ0Cittc2dpZCAiQ29sb3JzOiBwcmVzcyB0byBjaG9vc2UiCittc2dzdHIgIkNvbG9yZXM6IHB1bHNlIHBhcmEgc2VsZWNjaW9uYXIiCisKKyM6IGdpdGs6ODA0NworbXNnaWQgIkJhY2tncm91bmQiCittc2dzdHIgIkZvbmRvIgorCisjOiBnaXRrOjgwNTEKK21zZ2lkICJGb3JlZ3JvdW5kIgorbXNnc3RyICJQcmltZXIgcGxhbm8iCisKKyM6IGdpdGs6ODA1NQorbXNnaWQgIkRpZmY6IG9sZCBsaW5lcyIKK21zZ3N0ciAiRGlmZjogbMOtbmVhcyB2aWVqYXMiCisKKyM6IGdpdGs6ODA2MAorbXNnaWQgIkRpZmY6IG5ldyBsaW5lcyIKK21zZ3N0ciAiRGlmZjogbMOtbmVhcyBudWV2YXMiCisKKyM6IGdpdGs6ODA2NQorbXNnaWQgIkRpZmY6IGh1bmsgaGVhZGVyIgorbXNnc3RyICJEaWZmOiBjYWJlY2VyYSBkZSBmcmFnbWVudG8iCisKKyM6IGdpdGs6ODA3MQorbXNnaWQgIlNlbGVjdCBiZyIKK21zZ3N0ciAiQ29sb3IgZGUgZm9uZG8gZGUgbGEgc2VsZWNjacOzbiIKKworIzogZ2l0azo4MDc1Cittc2dpZCAiRm9udHM6IHByZXNzIHRvIGNob29zZSIKK21zZ3N0ciAiVGlwb2dyYWbDrWFzOiBwdWxzZSBwYXJhIGVsZWdpciIKKworIzogZ2l0azo4MDc3Cittc2dpZCAiTWFpbiBmb250IgorbXNnc3RyICJUaXBvZ3JhZsOtYSBwcmluY2lwYWwiCisKKyM6IGdpdGs6ODA3OAorbXNnaWQgIkRpZmYgZGlzcGxheSBmb250IgorbXNnc3RyICJUaXBvZ3JhZsOtYSBwYXJhIGRpZmVyZW5jaWFzIgorCisjOiBnaXRrOjgwNzkKK21zZ2lkICJVc2VyIGludGVyZmFjZSBmb250IgorbXNnc3RyICJUaXBvZ3JhZsOtYSBwYXJhIGludGVyZmF6IGRlIHVzdWFyaW8iCisKKyM6IGdpdGs6ODA5NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkdpdGs6IGNob29zZSBjb2xvciBmb3IgJXMiCittc2dzdHIgIkdpdGs6IGVsZWdpciBjb2xvciBwYXJhICVzIgorCisjOiBnaXRrOjg0NzYKK21zZ2lkICIiCisiU29ycnksIGdpdGsgY2Fubm90IHJ1biB3aXRoIHRoaXMgdmVyc2lvbiBvZiBUY2wvVGsuXG4iCisiIEdpdGsgcmVxdWlyZXMgYXQgbGVhc3QgVGNsL1RrIDguNC4iCittc2dzdHIgIiIKKyJFc3RhIHZlcnNpw7NuIGRlIFRjbC9UayBlcyBkZW1hc2lhZG8gYW50aWd1YS5cbiIKKyIgR2l0ayByZXF1aWVyZSBUY2wvVGsgdmVyc2nDs24gOC40IG8gc3VwZXJpb3IuIgorCisjOiBnaXRrOjg1NjUKK21zZ2lkICJDYW5ub3QgZmluZCBhIGdpdCByZXBvc2l0b3J5IGhlcmUuIgorbXNnc3RyICJObyBoYXkgdW4gcmVwb3NpdG9yaW8gZ2l0IGFxdcOtLiIKKworIzogZ2l0azo4NTY5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGZpbmQgdGhlIGdpdCBkaXJlY3RvcnkgXCIlc1wiLiIKK21zZ3N0ciAiTm8gaGF5IGRpcmVjdG9yaW8gZ2l0IFwiJXNcIi4iCisKKyM6IGdpdGs6ODYxMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFtYmlndW91cyBhcmd1bWVudCAnJXMnOiBib3RoIHJldmlzaW9uIGFuZCBmaWxlbmFtZSIKK21zZ3N0ciAiQXJndW1lbnRvIGFtYmlndW86ICclcycgZXMgdGFudG8gdW5hIHJldmlzacOzbiBjb21vIHVuIG5vbWJyZSBkZSBhcmNoaXZvIgorCisjOiBnaXRrOjg2MjQKK21zZ2lkICJCYWQgYXJndW1lbnRzIHRvIGdpdGs6IgorbXNnc3RyICJBcmd1bWVudG9zIGluY29ycmVjdG9zIGEgR2l0azoiCisKKyM6IGdpdGs6ODYzNgorbXNnaWQgIkNvdWxkbid0IGdldCBsaXN0IG9mIHVubWVyZ2VkIGZpbGVzOiIKK21zZ3N0ciAiSW1wb3NpYmxlIG9idGVuZXIgbGEgbGlzdGEgZGUgYXJjaGl2b3MgcGVuZGllbnRlcyBkZSBmdXNpw7NuOiIKKworIzogZ2l0azo4NjUyCittc2dpZCAiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyBmaWxlcyBhcmUgdW5tZXJnZWQuIgorbXNnc3RyICIiCisiTm8gaGF5IGFyY2hpdm9zIHNlbGVjY2lvbmFkb3M6IHNlIHNlbGVjY2lvbsOzIGxhIG9wY2nDs24gLS1tZXJnZSBwZXJvIG5vIGhheSAiCisiYXJjaGl2b3MgcGVuZGllbnRlcyBkZSBmdXNpw7NuLiIKKworIzogZ2l0azo4NjU1Cittc2dpZCAiIgorIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gdW5tZXJnZWQgZmlsZXMgYXJlIHdpdGhpbiBmaWxlICIKKyJsaW1pdC4iCittc2dzdHIgIiIKKyJObyBoYXkgYXJjaGl2b3Mgc2VsZWNjaW9uYWRvczogc2Ugc2VsZWNjaW9uw7MgbGEgb3BjacOzbiAtLW1lcmdlIHBlcm8gbG9zIGFyY2hpdm9zICIKKyJlc3BlY2lmaWNhZG9zIG5vIG5lY2VzaXRhbiBmdXNpw7NuLiIKKworIzogZ2l0azo4NzE2Cittc2dpZCAiQ29tbWFuZCBsaW5lIgorbXNnc3RyICJMw61uZWEgZGUgY29tYW5kb3MiCmRpZmYgLS1naXQgYS9naXRrLWdpdC9wby9zdi5wbyBiL2dpdGstZ2l0L3BvL3N2LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2YjA4MGQKLS0tIC9kZXYvbnVsbAorKysgYi9naXRrLWdpdC9wby9zdi5wbwpAQCAtMCwwICsxLDg4NyBAQAorIyBTd2VkaXNoIHRyYW5zbGF0aW9uIGZvciBnaXRrCisjIENvcHlyaWdodCAoQykgMjAwNS0yMDA4IFBhdWwgTWFja2VycmFzCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXRrIHBhY2thZ2UuCisjCisjIFBldGVyIEthcmxzc29uIDxwZXRlckBzb2Z0d29sdmVzLnBwLnNlPiwgMjAwOC4KK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IHN2XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA4LTAzLTE0IDE1OjAzKzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA4LTAzLTE0IDE2OjA2Q0VULTFcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFBldGVyIEthcmxzc29uIDxwZXRlckBzb2Z0d29sdmVzLnBwLnNlPlxuIgorIkxhbmd1YWdlLVRlYW06IFN3ZWRpc2ggPHN2QGxpLm9yZz5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQiCisKKyM6IGdpdGs6MTExCittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIGdpdCByZXYtbGlzdDoiCittc2dzdHIgIkZlbCB2aWQga8O2cm5pbmcgYXYgZ2l0IHJldi1saXN0OiIKKworIzogZ2l0azoxMjQKK21zZ2lkICJSZWFkaW5nIgorbXNnc3RyICJMw6RzZXIiCisKKyM6IGdpdGs6MTUxIGdpdGs6MjE5MQorbXNnaWQgIlJlYWRpbmcgY29tbWl0cy4uLiIKK21zZ3N0ciAiTMOkc2VyIGluY2hlY2tuaW5nYXIuLi4iCisKKyM6IGdpdGs6Mjc1Cittc2dpZCAiQ2FuJ3QgcGFyc2UgZ2l0IGxvZyBvdXRwdXQ6IgorbXNnc3RyICJLYW4gaW50ZSB0b2xrYSB1dGRhdGEgZnLDpW4gZ2l0IGxvZzoiCisKKyM6IGdpdGs6Mzg2IGdpdGs6MjE5NQorbXNnaWQgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiCittc2dzdHIgIkluZ2EgaW5jaGVja25pbmdhciBtYXJrZXJhZGUiCisKKyM6IGdpdGs6NTAwCittc2dpZCAiTm8gY29tbWl0IGluZm9ybWF0aW9uIGF2YWlsYWJsZSIKK21zZ3N0ciAiSW5nZW4gaW5jaGVja25pbmdzaW5mb3JtYXRpb24gw6RyIHRpbGxnw6RuZ2xpZyIKKworIzogZ2l0azo1OTkgZ2l0azo2MjEgZ2l0azoxOTU1IGdpdGs6NjQyMyBnaXRrOjc5MjMgZ2l0azo4MDgyCittc2dpZCAiT0siCittc2dzdHIgIk9LIgorCisjOiBnaXRrOjYyMyBnaXRrOjE5NTYgZ2l0azo2MTA3IGdpdGs6NjE3OCBnaXRrOjYyNzUgZ2l0azo2MzIxIGdpdGs6NjQyNQorIzogZ2l0azo3OTI0IGdpdGs6ODA4MworbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAiQXZicnl0IgorCisjOiBnaXRrOjY2MQorbXNnaWQgIkZpbGUiCittc2dzdHIgIkFya2l2IgorCisjOiBnaXRrOjY2MworbXNnaWQgIlVwZGF0ZSIKK21zZ3N0ciAiVXBwZGF0ZXJhIgorCisjOiBnaXRrOjY2NAorbXNnaWQgIlJlcmVhZCByZWZlcmVuY2VzIgorbXNnc3RyICJMw6RzIG9tIHJlZmVyZW5zZXIiCisKKyM6IGdpdGs6NjY1Cittc2dpZCAiTGlzdCByZWZlcmVuY2VzIgorbXNnc3RyICJWaXNhIHJlZmVyZW5zZXIiCisKKyM6IGdpdGs6NjY2Cittc2dpZCAiUXVpdCIKK21zZ3N0ciAiQXZzbHV0YSIKKworIzogZ2l0azo2NjgKK21zZ2lkICJFZGl0IgorbXNnc3RyICJSZWRpZ2VyYSIKKworIzogZ2l0azo2NjkKK21zZ2lkICJQcmVmZXJlbmNlcyIKK21zZ3N0ciAiSW5zdMOkbGxuaW5nYXIiCisKKyM6IGdpdGs6NjcyIGdpdGs6MTg5MgorbXNnaWQgIlZpZXciCittc2dzdHIgIlZpc2EiCisKKyM6IGdpdGs6NjczCittc2dpZCAiTmV3IHZpZXcuLi4iCittc2dzdHIgIk55IHZ5Li4uIgorCisjOiBnaXRrOjY3NCBnaXRrOjIxMzMgZ2l0azo4NzIyCittc2dpZCAiRWRpdCB2aWV3Li4uIgorbXNnc3RyICLDhG5kcmEgdnkuLi4iCisKKyM6IGdpdGs6Njc2IGdpdGs6MjEzNCBnaXRrOjg3MjMKK21zZ2lkICJEZWxldGUgdmlldyIKK21zZ3N0ciAiVGEgYm9ydCB2eSIKKworIzogZ2l0azo2NzgKK21zZ2lkICJBbGwgZmlsZXMiCittc2dzdHIgIkFsbGEgZmlsZXIiCisKKyM6IGdpdGs6NjgyCittc2dpZCAiSGVscCIKK21zZ3N0ciAiSGrDpGxwIgorCisjOiBnaXRrOjY4MyBnaXRrOjEzMTcKK21zZ2lkICJBYm91dCBnaXRrIgorbXNnc3RyICJPbSBnaXRrIgorCisjOiBnaXRrOjY4NAorbXNnaWQgIktleSBiaW5kaW5ncyIKK21zZ3N0ciAiVGFuZ2VudGJvcmRzYmluZG5pbmdhciIKKworIzogZ2l0azo3NDEKK21zZ2lkICJTSEExIElEOiAiCittc2dzdHIgIlNIQTEtaWQ6ICIKKworIzogZ2l0azo3OTEKK21zZ2lkICJGaW5kIgorbXNnc3RyICJTw7ZrIgorCisjOiBnaXRrOjc5MgorbXNnaWQgIm5leHQiCittc2dzdHIgIm7DpHN0YSIKKworIzogZ2l0azo3OTMKK21zZ2lkICJwcmV2IgorbXNnc3RyICJmw7ZyZWciCisKKyM6IGdpdGs6Nzk0Cittc2dpZCAiY29tbWl0IgorbXNnc3RyICJpbmNoZWNrbmluZyIKKworIzogZ2l0azo3OTcgZ2l0azo3OTkgZ2l0azoyMzU2IGdpdGs6MjM3OSBnaXRrOjI0MDMgZ2l0azo0MzA2IGdpdGs6NDM2OQorbXNnaWQgImNvbnRhaW5pbmc6IgorbXNnc3RyICJzb20gaW5uZWjDpWxsZXI6IgorCisjOiBnaXRrOjgwMCBnaXRrOjE3NzggZ2l0azoxNzgzIGdpdGs6MjQzMQorbXNnaWQgInRvdWNoaW5nIHBhdGhzOiIKK21zZ3N0ciAic29tIHLDtnIgc8O2a3bDpGc6IgorCisjOiBnaXRrOjgwMSBnaXRrOjI0MzYKK21zZ2lkICJhZGRpbmcvcmVtb3Zpbmcgc3RyaW5nOiIKK21zZ3N0ciAic29tIGzDpGdnZXIvdGlsbCB0YXIgYm9ydCBzdHLDpG5nOiIKKworIzogZ2l0azo4MTAgZ2l0azo4MTIKK21zZ2lkICJFeGFjdCIKK21zZ3N0ciAiRXhha3QiCisKKyM6IGdpdGs6ODEyIGdpdGs6MjUxNCBnaXRrOjQyNzQKK21zZ2lkICJJZ25DYXNlIgorbXNnc3RyICJJZ25WZXJzYWxlciIKKworIzogZ2l0azo4MTIgZ2l0azoyNDA1IGdpdGs6MjUxMiBnaXRrOjQyNzAKK21zZ2lkICJSZWdleHAiCittc2dzdHIgIlJlZy51dHRyLiIKKworIzogZ2l0azo4MTQgZ2l0azo4MTUgZ2l0azoyNTMzIGdpdGs6MjU2MyBnaXRrOjI1NzAgZ2l0azo0MzgwIGdpdGs6NDQzNgorbXNnaWQgIkFsbCBmaWVsZHMiCittc2dzdHIgIkFsbGEgZsOkbHQiCisKKyM6IGdpdGs6ODE1IGdpdGs6MjUzMSBnaXRrOjI1NjMgZ2l0azo0MzM2Cittc2dpZCAiSGVhZGxpbmUiCittc2dzdHIgIlJ1YnJpayIKKworIzogZ2l0azo4MTYgZ2l0azoyNTMxIGdpdGs6NDMzNiBnaXRrOjQ0MzYgZ2l0azo0ODI3Cittc2dpZCAiQ29tbWVudHMiCittc2dzdHIgIktvbW1lbnRhcmVyIgorCisjOiBnaXRrOjgxNiBnaXRrOjI1MzEgZ2l0azoyNTM1IGdpdGs6MjU3MCBnaXRrOjQzMzYgZ2l0azo0NzYzIGdpdGs6NTk1NgorIzogZ2l0azo1OTcxCittc2dpZCAiQXV0aG9yIgorbXNnc3RyICJGw7ZyZmF0dGFyZSIKKworIzogZ2l0azo4MTYgZ2l0azoyNTMxIGdpdGs6NDMzNiBnaXRrOjQ3NjUKK21zZ2lkICJDb21taXR0ZXIiCittc2dzdHIgIkluY2hlY2thcmUiCisKKyM6IGdpdGs6ODQ1Cittc2dpZCAiU2VhcmNoIgorbXNnc3RyICJTw7ZrIgorCisjOiBnaXRrOjg1MgorbXNnaWQgIkRpZmYiCittc2dzdHIgIkRpZmYiCisKKyM6IGdpdGs6ODU0Cittc2dpZCAiT2xkIHZlcnNpb24iCittc2dzdHIgIkdhbW1hbCB2ZXJzaW9uIgorCisjOiBnaXRrOjg1NgorbXNnaWQgIk5ldyB2ZXJzaW9uIgorbXNnc3RyICJOeSB2ZXJzaW9uIgorCisjOiBnaXRrOjg1OAorbXNnaWQgIkxpbmVzIG9mIGNvbnRleHQiCittc2dzdHIgIlJhZGVyIHNhbW1hbmhhbmciCisKKyM6IGdpdGs6ODY4Cittc2dpZCAiSWdub3JlIHNwYWNlIGNoYW5nZSIKK21zZ3N0ciAiSWdub3JlcmEgw6RuZHJpbmdhciBpIGJsYW5rc3RlZyIKKworIzogZ2l0azo5MjYKK21zZ2lkICJQYXRjaCIKK21zZ3N0ciAiUGF0Y2giCisKKyM6IGdpdGs6OTI4Cittc2dpZCAiVHJlZSIKK21zZ3N0ciAiVHLDpGQiCisKKyM6IGdpdGs6MTA1MyBnaXRrOjEwNjggZ2l0azo2MDIyCittc2dpZCAiRGlmZiB0aGlzIC0+IHNlbGVjdGVkIgorbXNnc3RyICJEaWZmIGRlbm5hIC0+IG1hcmtlcmFkIgorCisjOiBnaXRrOjEwNTUgZ2l0azoxMDcwIGdpdGs6NjAyMworbXNnaWQgIkRpZmYgc2VsZWN0ZWQgLT4gdGhpcyIKK21zZ3N0ciAiRGlmZiBtYXJrZXJhZCAtPiBkZW5uYSIKKworIzogZ2l0azoxMDU3IGdpdGs6MTA3MiBnaXRrOjYwMjQKK21zZ2lkICJNYWtlIHBhdGNoIgorbXNnc3RyICJTa2FwYSBwYXRjaCIKKworIzogZ2l0azoxMDU4IGdpdGs6NjE2MgorbXNnaWQgIkNyZWF0ZSB0YWciCittc2dzdHIgIlNrYXBhIHRhZ2ciCisKKyM6IGdpdGs6MTA1OSBnaXRrOjYyNTUKK21zZ2lkICJXcml0ZSBjb21taXQgdG8gZmlsZSIKK21zZ3N0ciAiU2tyaXYgaW5jaGVja25pbmcgdGlsbCBmaWwiCisKKyM6IGdpdGs6MTA2MCBnaXRrOjYzMDkKK21zZ2lkICJDcmVhdGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAiU2thcGEgbnkgZ3JlbiIKKworIzogZ2l0azoxMDYxCittc2dpZCAiQ2hlcnJ5LXBpY2sgdGhpcyBjb21taXQiCittc2dzdHIgIlBsb2NrYSBkZW5uYSBpbmNoZWNrbmluZyIKKworIzogZ2l0azoxMDYzCittc2dpZCAiUmVzZXQgSEVBRCBicmFuY2ggdG8gaGVyZSIKK21zZ3N0ciAiw4V0ZXJzdMOkbGwgSEVBRC1ncmVuZW4gaGl0IgorCisjOiBnaXRrOjEwNzkKK21zZ2lkICJDaGVjayBvdXQgdGhpcyBicmFuY2giCittc2dzdHIgIkNoZWNrYSB1dCBkZW5uYSBncmVuIgorCisjOiBnaXRrOjEwODEKK21zZ2lkICJSZW1vdmUgdGhpcyBicmFuY2giCittc2dzdHIgIlRhIGJvcnQgZGVubmEgZ3JlbiIKKworIzogZ2l0azoxMDg3Cittc2dpZCAiSGlnaGxpZ2h0IHRoaXMgdG9vIgorbXNnc3RyICJNYXJrZXJhIMOkdmVuIGRldHRhIgorCisjOiBnaXRrOjEwODkKK21zZ2lkICJIaWdobGlnaHQgdGhpcyBvbmx5IgorbXNnc3RyICJNYXJrZXJhIGJhcmEgZGV0dGEiCisKKyM6IGdpdGs6MTMxOAorbXNnaWQgIiIKKyJcbiIKKyJHaXRrIC0gYSBjb21taXQgdmlld2VyIGZvciBnaXRcbiIKKyJcbiIKKyJDb3B5cmlnaHQgwqkgMjAwNS0yMDA2IFBhdWwgTWFja2VycmFzXG4iCisiXG4iCisiVXNlIGFuZCByZWRpc3RyaWJ1dGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIKK21zZ3N0ciAiIgorIlxuIgorIkdpdGsgLSBlbiBpbmNoZWNrbmluZ3N2aXNhcmUgZsO2ciBnaXRcbiIKKyJcbiIKKyJDb3B5cmlnaHQgwqkgMjAwNS0yMDA2IFBhdWwgTWFja2VycmFzXG4iCisiXG4iCisiQW52w6RuZCBvY2ggdmlkYXJlZsO2cm1lZGxhIGVubGlndCB2aWxsa29yZW4gaSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIKKworIzogZ2l0azoxMzI2IGdpdGs6MTM4NyBnaXRrOjY1ODEKK21zZ2lkICJDbG9zZSIKK21zZ3N0ciAiU3TDpG5nIgorCisjOiBnaXRrOjEzNDUKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5ncyIKK21zZ3N0ciAiVGFuZ2VudGJvcmRzYmluZG5pbmdhciBmw7ZyIEdpdGsiCisKKyM6IGdpdGs6MTM0NworbXNnaWQgIkdpdGsga2V5IGJpbmRpbmdzOiIKK21zZ3N0ciAiVGFuZ2VudGJvcmRzYmluZG5pbmdhciBmw7ZyIEdpdGs6IgorCisjOiBnaXRrOjEzNDkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUT5cdFx0UXVpdCIKK21zZ3N0ciAiPCVzLVE+XHRcdEF2c2x1dGEiCisKKyM6IGdpdGs6MTM1MAorbXNnaWQgIjxIb21lPlx0XHRNb3ZlIHRvIGZpcnN0IGNvbW1pdCIKK21zZ3N0ciAiPEhvbWU+XHRcdEfDpSB0aWxsIGbDtnJzdGEgaW5jaGVja25pbmciCisKKyM6IGdpdGs6MTM1MQorbXNnaWQgIjxFbmQ+XHRcdE1vdmUgdG8gbGFzdCBjb21taXQiCittc2dzdHIgIjxFbmQ+XHRcdEfDpSB0aWxsIHNpc3RhIGluY2hlY2tuaW5nIgorCisjOiBnaXRrOjEzNTIKK21zZ2lkICI8VXA+LCBwLCBpXHRNb3ZlIHVwIG9uZSBjb21taXQiCittc2dzdHIgIjxVcHA+LCBwLCBpXHRHw6UgZW4gaW5jaGVja25pbmcgdXBwIgorCisjOiBnaXRrOjEzNTMKK21zZ2lkICI8RG93bj4sIG4sIGtcdE1vdmUgZG93biBvbmUgY29tbWl0IgorbXNnc3RyICI8TmVkPiwgbiwga1x0R8OlIGVuIGluY2hlY2tuaW5nIG5lZCIKKworIzogZ2l0azoxMzU0Cittc2dpZCAiPExlZnQ+LCB6LCBqXHRHbyBiYWNrIGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiPFbDpG5zdGVyPiwgeiwgalx0R8OlIGJha8OldCBpIGhpc3RvcmlrZW4iCisKKyM6IGdpdGs6MTM1NQorbXNnaWQgIjxSaWdodD4sIHgsIGxcdEdvIGZvcndhcmQgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8SMO2Z2VyPiwgeCwgbFx0R8OlIGZyYW3DpXQgaSBoaXN0b3Jpa2VuIgorCisjOiBnaXRrOjEzNTYKK21zZ2lkICI8UGFnZVVwPlx0TW92ZSB1cCBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPFBhZ2VVcD5cdEfDpSB1cHAgZW4gc2lkYSBpIGluY2hlY2tuaW5nc2xpc3RhbiIKKworIzogZ2l0azoxMzU3Cittc2dpZCAiPFBhZ2VEb3duPlx0TW92ZSBkb3duIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8UGFnZURvd24+XHRHw6UgbmVkIGVuIHNpZGEgaSBpbmNoZWNrbmluZ3NsaXN0YW4iCisKKyM6IGdpdGs6MTM1OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Ib21lPlx0U2Nyb2xsIHRvIHRvcCBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLUhvbWU+XHRSdWxsYSB0aWxsIGLDtnJqYW4gYXYgaW5jaGVja25pbmdzbGlzdGFuIgorCisjOiBnaXRrOjEzNTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRW5kPlx0U2Nyb2xsIHRvIGJvdHRvbSBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLUVuZD5cdFJ1bGxhIHRpbGwgc2x1dGV0IGF2IGluY2hlY2tuaW5nc2xpc3RhbiIKKworIzogZ2l0azoxMzYwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtVXBwPlx0UnVsbGEgaW5jaGVja25pbmdzbGlzdGFuIHVwcCBldHQgc3RlZyIKKworIzogZ2l0azoxMzYxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgbGluZSIKK21zZ3N0ciAiPCVzLU5lZD5cdFJ1bGxhIGluY2hlY2tuaW5nc2xpc3RhbiBuZWQgZXR0IHN0ZWciCisKKyM6IGdpdGs6MTM2MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1QYWdlVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIHBhZ2UiCittc2dzdHIgIjwlcy1QYWdlVXA+XHRSdWxsYSBpbmNoZWNrbmluZ3NsaXN0YW4gdXBwIGVuIHNpZGEiCisKKyM6IGdpdGs6MTM2MworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1QYWdlRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBwYWdlIgorbXNnc3RyICI8JXMtUGFnZURvd24+XHRSdWxsYSBpbmNoZWNrbmluZ3NsaXN0YW4gbmVkIGVuIHNpZGEiCisKKyM6IGdpdGs6MTM2NAorbXNnaWQgIjxTaGlmdC1VcD5cdEZpbmQgYmFja3dhcmRzICh1cHdhcmRzLCBsYXRlciBjb21taXRzKSIKK21zZ3N0ciAiPFNraWZ0LVVwcD5cdFPDtmsgYmFrw6V0ICh1cHDDpXQsIHNlbmFyZSBpbmNoZWNrbmluZ2FyKSIKKworIzogZ2l0azoxMzY1Cittc2dpZCAiPFNoaWZ0LURvd24+XHRGaW5kIGZvcndhcmRzIChkb3dud2FyZHMsIGVhcmxpZXIgY29tbWl0cykiCittc2dzdHIgIjxTa2lmdC1OZWQ+XHRTw7ZrIGZyYW3DpXQgKG5lZMOldCwgdGlkaWdhcmUgaW5jaGVja25pbmdhcikiCisKKyM6IGdpdGs6MTM2NgorbXNnaWQgIjxEZWxldGU+LCBiXHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8RGVsZXRlPiwgYlx0UnVsbGEgZGlmZnZpc25pbmdlbiB1cHAgZW4gc2lkYSIKKworIzogZ2l0azoxMzY3Cittc2dpZCAiPEJhY2tzcGFjZT5cdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxCYWtzdGVnPlx0UnVsbGEgZGlmZnZpc25pbmdlbiB1cHAgZW4gc2lkYSIKKworIzogZ2l0azoxMzY4Cittc2dpZCAiPFNwYWNlPlx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjxCbGFua3N0ZWc+XHRSdWxsYSBkaWZmdmlzbmluZ2VuIG5lZCBlbiBzaWRhIgorCisjOiBnaXRrOjEzNjkKK21zZ2lkICJ1XHRcdFNjcm9sbCBkaWZmIHZpZXcgdXAgMTggbGluZXMiCittc2dzdHIgInVcdFx0UnVsbGEgZGlmZnZpc25pbmdlbiB1cHAgMTggcmFkZXIiCisKKyM6IGdpdGs6MTM3MAorbXNnaWQgImRcdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIDE4IGxpbmVzIgorbXNnc3RyICJkXHRcdFJ1bGxhIGRpZmZ2aXNuaW5nZW4gbmVkIDE4IHJhZGVyIgorCisjOiBnaXRrOjEzNzEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRj5cdFx0RmluZCIKK21zZ3N0ciAiPCVzLUY+XHRcdFPDtmsiCisKKyM6IGdpdGs6MTM3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1HPlx0XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjwlcy1HPlx0XHRHw6UgdGlsbCBuw6RzdGEgc8O2a3Ryw6RmZiIKKworIzogZ2l0azoxMzczCittc2dpZCAiPFJldHVybj5cdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPFJldHVybj5cdFx0R8OlIHRpbGwgbsOkc3RhIHPDtmt0csOkZmYiCisKKyM6IGdpdGs6MTM3NAorbXNnaWQgIi9cdFx0TW92ZSB0byBuZXh0IGZpbmQgaGl0LCBvciByZWRvIGZpbmQiCittc2dzdHIgIi9cdFx0R8OlIHRpbGwgbsOkc3RhIHPDtmt0csOkZmYsIGVsbGVyIHPDtmsgcMOlIG55dHQiCisKKyM6IGdpdGs6MTM3NQorbXNnaWQgIj9cdFx0TW92ZSB0byBwcmV2aW91cyBmaW5kIGhpdCIKK21zZ3N0ciAiP1x0XHRHw6UgdGlsbCBmw7ZyZWfDpWVuZGUgc8O2a3Ryw6RmZiIKKworIzogZ2l0azoxMzc2Cittc2dpZCAiZlx0XHRTY3JvbGwgZGlmZiB2aWV3IHRvIG5leHQgZmlsZSIKK21zZ3N0ciAiZlx0XHRSdWxsYSBkaWZmdmlzbmluZ2VuIHRpbGwgbsOkc3RhIGZpbCIKKworIzogZ2l0azoxMzc3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVM+XHRcdFNlYXJjaCBmb3IgbmV4dCBoaXQgaW4gZGlmZiB2aWV3IgorbXNnc3RyICI8JXMtUz5cdFx0R8OlIHRpbGwgbsOkc3RhIHPDtmt0csOkZmYgaSBkaWZmdmlzbmluZ2VuIgorCisjOiBnaXRrOjEzNzgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUj5cdFx0U2VhcmNoIGZvciBwcmV2aW91cyBoaXQgaW4gZGlmZiB2aWV3IgorbXNnc3RyICI8JXMtUj5cdFx0R8OlIHRpbGwgZsO2cmVnw6VlbmRlIHPDtmt0csOkZmYgaSBkaWZmdmlzbmluZ2VuIgorCisjOiBnaXRrOjEzNzkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtS1ArPlx0SW5jcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtTnVtKz5cdMOWa2EgdGVja2Vuc3RvcmxlayIKKworIzogZ2l0azoxMzgwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLXBsdXM+XHRJbmNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1wbHVzPlx0w5ZrYSB0ZWNrZW5zdG9ybGVrIgorCisjOiBnaXRrOjEzODEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtS1AtPlx0RGVjcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtTnVtLT5cdE1pbnNrYSB0ZWNrZW5zdG9ybGVrIgorCisjOiBnaXRrOjEzODIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtbWludXM+XHREZWNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1taW51cz5cdE1pbnNrYSB0ZWNrZW5zdG9ybGVrIgorCisjOiBnaXRrOjEzODMKK21zZ2lkICI8RjU+XHRcdFVwZGF0ZSIKK21zZ3N0ciAiPEY1Plx0XHRVcHBkYXRlcmEiCisKKyM6IGdpdGs6MTg5NgorbXNnaWQgIkdpdGsgdmlldyBkZWZpbml0aW9uIgorbXNnc3RyICJEZWZpbml0aW9uIGF2IEdpdGstdnkiCisKKyM6IGdpdGs6MTkyMQorbXNnaWQgIk5hbWUiCittc2dzdHIgIk5hbW4iCisKKyM6IGdpdGs6MTkyNAorbXNnaWQgIlJlbWVtYmVyIHRoaXMgdmlldyIKK21zZ3N0ciAiU3BhcmEgZGVubmEgdnkiCisKKyM6IGdpdGs6MTkyOAorbXNnaWQgIkNvbW1pdHMgdG8gaW5jbHVkZSAoYXJndW1lbnRzIHRvIGdpdCByZXYtbGlzdCk6IgorbXNnc3RyICJJbmNoZWNrbmluZ2FyIGF0dCB0YSBtZWQgKGFyZ3VtZW50IHRpbGwgZ2l0IHJldi1saXN0KToiCisKKyM6IGdpdGs6MTkzNQorbXNnaWQgIkNvbW1hbmQgdG8gZ2VuZXJhdGUgbW9yZSBjb21taXRzIHRvIGluY2x1ZGU6IgorbXNnc3RyICJLb21tYW5kbyBmw7ZyIGF0dCBnZW5lcmVyYSBmbGVyIGluY2hlY2tuaW5nYXIgYXR0IHRhIG1lZDoiCisKKyM6IGdpdGs6MTk0MgorbXNnaWQgIkVudGVyIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBpbmNsdWRlLCBvbmUgcGVyIGxpbmU6IgorbXNnc3RyICJBbmdlIGZpbGVyIG9jaCBrYXRhbG9nZXIgYXR0IHRhIG1lZCwgZW4gcGVyIHJhZDoiCisKKyM6IGdpdGs6MTk4OQorbXNnaWQgIkVycm9yIGluIGNvbW1pdCBzZWxlY3Rpb24gYXJndW1lbnRzOiIKK21zZ3N0ciAiRmVsIGkgYXJndW1lbnQgZsO2ciB2YWwgYXYgaW5jaGVja25pbmdhcjoiCisKKyM6IGdpdGs6MjA0MyBnaXRrOjIxMjcgZ2l0azoyNTgzIGdpdGs6MjU5NyBnaXRrOjM3ODEgZ2l0azo4Njg4IGdpdGs6ODY4OQorbXNnaWQgIk5vbmUiCittc2dzdHIgIkluZ2V0IgorCisjOiBnaXRrOjI1MzEgZ2l0azo0MzM2IGdpdGs6NTk1OCBnaXRrOjU5NzMKK21zZ2lkICJEYXRlIgorbXNnc3RyICJEYXR1bSIKKworIzogZ2l0azoyNTMxIGdpdGs6NDMzNgorbXNnaWQgIkNEYXRlIgorbXNnc3RyICJTa2FwYXQgZGF0dW0iCisKKyM6IGdpdGs6MjY4MCBnaXRrOjI2ODUKK21zZ2lkICJEZXNjZW5kYW50IgorbXNnc3RyICJBdmtvbWxpbmciCisKKyM6IGdpdGs6MjY4MQorbXNnaWQgIk5vdCBkZXNjZW5kYW50IgorbXNnc3RyICJJbnRlIGF2a29tbGluZyIKKworIzogZ2l0azoyNjg4IGdpdGs6MjY5MworbXNnaWQgIkFuY2VzdG9yIgorbXNnc3RyICJGw7ZyZmFkZXIiCisKKyM6IGdpdGs6MjY4OQorbXNnaWQgIk5vdCBhbmNlc3RvciIKK21zZ3N0ciAiSW50ZSBmw7ZyZmFkZXIiCisKKyM6IGdpdGs6MjkyNAorbXNnaWQgIkxvY2FsIGNoYW5nZXMgY2hlY2tlZCBpbiB0byBpbmRleCBidXQgbm90IGNvbW1pdHRlZCIKK21zZ3N0ciAiTG9rYWxhIMOkbmRyaW5nYXIgc3BhcmFkZSBpIGluZGV4ZXQgbWVuIGludGUgaW5jaGVja2FkZSIKKworIzogZ2l0azoyOTU0Cittc2dpZCAiTG9jYWwgdW5jb21taXR0ZWQgY2hhbmdlcywgbm90IGNoZWNrZWQgaW4gdG8gaW5kZXgiCittc2dzdHIgIkxva2FsYSDDpG5kcmluZ2FyLCBlaiBzcGFyYWRlIGkgaW5kZXhldCIKKworIzogZ2l0azo0MzA1Cittc2dpZCAiU2VhcmNoaW5nIgorbXNnc3RyICJTw7ZrZXIiCisKKyM6IGdpdGs6NDc2NworbXNnaWQgIlRhZ3M6IgorbXNnc3RyICJUYWdnYXI6IgorCisjOiBnaXRrOjQ3ODQgZ2l0azo0NzkwIGdpdGs6NTk1MQorbXNnaWQgIlBhcmVudCIKK21zZ3N0ciAiRsO2csOkbGRlciIKKworIzogZ2l0azo0Nzk1Cittc2dpZCAiQ2hpbGQiCittc2dzdHIgIkJhcm4iCisKKyM6IGdpdGs6NDgwNAorbXNnaWQgIkJyYW5jaCIKK21zZ3N0ciAiR3JlbiIKKworIzogZ2l0azo0ODA3Cittc2dpZCAiRm9sbG93cyIKK21zZ3N0ciAiRsO2bGplciIKKworIzogZ2l0azo0ODEwCittc2dpZCAiUHJlY2VkZXMiCittc2dzdHIgIkbDtnJlZ8OlciIKKworIzogZ2l0azo1MDkzCittc2dpZCAiRXJyb3IgZ2V0dGluZyBtZXJnZSBkaWZmczoiCittc2dzdHIgIkZlbCB2aWQgaMOkbXRuaW5nIGF2IHNhbW1hbnNsYWduaW5nc2RpZmY6IgorCisjOiBnaXRrOjU3NzgKK21zZ2lkICJHb3RvOiIKK21zZ3N0ciAiR8OlIHRpbGw6IgorCisjOiBnaXRrOjU3ODAKK21zZ2lkICJTSEExIElEOiIKK21zZ3N0ciAiU0hBMS1pZDoiCisKKyM6IGdpdGs6NTgwNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNob3J0IFNIQTEgaWQgJXMgaXMgYW1iaWd1b3VzIgorbXNnc3RyICJGw7Zya29ydGF0IFNIQTEtaWQgJXMgw6RyIHR2ZXR5ZGlndCIKKworIzogZ2l0azo1ODE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU0hBMSBpZCAlcyBpcyBub3Qga25vd24iCittc2dzdHIgIlNIQS1pZDp0ICVzIMOkciBpbnRlIGvDpG50IgorCisjOiBnaXRrOjU4MTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUYWcvSGVhZCAlcyBpcyBub3Qga25vd24iCittc2dzdHIgIlRhZ2cvaHV2dWQgJXMgw6RyIG9rw6RudCIKKworIzogZ2l0azo1OTYxCittc2dpZCAiQ2hpbGRyZW4iCittc2dzdHIgIkJhcm4iCisKKyM6IGdpdGs6NjAxOAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0ICVzIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICLDhXRlcnN0w6RsbCBncmVuZW4gJXMgaGl0IgorCisjOiBnaXRrOjYwNDkKK21zZ2lkICJUb3AiCittc2dzdHIgIlRvcHAiCisKKyM6IGdpdGs6NjA1MAorbXNnaWQgIkZyb20iCittc2dzdHIgIkZyw6VuIgorCisjOiBnaXRrOjYwNTUKK21zZ2lkICJUbyIKK21zZ3N0ciAiVGlsbCIKKworIzogZ2l0azo2MDc4Cittc2dpZCAiR2VuZXJhdGUgcGF0Y2giCittc2dzdHIgIkdlbmVyZXJhIHBhdGNoIgorCisjOiBnaXRrOjYwODAKK21zZ2lkICJGcm9tOiIKK21zZ3N0ciAiRnLDpW46IgorCisjOiBnaXRrOjYwODkKK21zZ2lkICJUbzoiCittc2dzdHIgIlRpbGw6IgorCisjOiBnaXRrOjYwOTgKK21zZ2lkICJSZXZlcnNlIgorbXNnc3RyICJWw6RuZCIKKworIzogZ2l0azo2MTAwIGdpdGs6NjI2OQorbXNnaWQgIk91dHB1dCBmaWxlOiIKK21zZ3N0ciAiVXRkYXRhZmlsOiIKKworIzogZ2l0azo2MTA2Cittc2dpZCAiR2VuZXJhdGUiCittc2dzdHIgIkdlbmVyZXJhIgorCisjOiBnaXRrOjYxNDIKK21zZ2lkICJFcnJvciBjcmVhdGluZyBwYXRjaDoiCittc2dzdHIgIkZlbCB2aWQgZ2VuZXJlcmluZyBhdiBwYXRjaDoiCisKKyM6IGdpdGs6NjE2NCBnaXRrOjYyNTcgZ2l0azo2MzExCittc2dpZCAiSUQ6IgorbXNnc3RyICJJZDoiCisKKyM6IGdpdGs6NjE3MworbXNnaWQgIlRhZyBuYW1lOiIKK21zZ3N0ciAiVGFnZ25hbW46IgorCisjOiBnaXRrOjYxNzcgZ2l0azo2MzIwCittc2dpZCAiQ3JlYXRlIgorbXNnc3RyICJTa2FwYSIKKworIzogZ2l0azo2MTkyCittc2dpZCAiTm8gdGFnIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICJJbmdldCB0YWdnbmFtbiBhbmdhdnMiCisKKyM6IGdpdGs6NjE5NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZyBcIiVzXCIgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIlRhZ2dlbiBcIiVzXCIgZmlubnMgcmVkYW4iCisKKyM6IGdpdGs6NjIwMgorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRhZzoiCittc2dzdHIgIkZlbCB2aWQgc2thcGFuZGUgYXYgdGFnZzoiCisKKyM6IGdpdGs6NjI2NgorbXNnaWQgIkNvbW1hbmQ6IgorbXNnc3RyICJLb21tYW5kbzoiCisKKyM6IGdpdGs6NjI3NAorbXNnaWQgIldyaXRlIgorbXNnc3RyICJTa3JpdiIKKworIzogZ2l0azo2MjkwCittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQ6IgorbXNnc3RyICJGZWwgdmlkIHNrcml2bmluZyBhdiBpbmNoZWNrbmluZzoiCisKKyM6IGdpdGs6NjMxNgorbXNnaWQgIk5hbWU6IgorbXNnc3RyICJOYW1uOiIKKworIzogZ2l0azo2MzM1Cittc2dpZCAiUGxlYXNlIHNwZWNpZnkgYSBuYW1lIGZvciB0aGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAiQW5nZSBldHQgbmFtbiBmw7ZyIGRlbiBueWEgZ3JlbmVuIgorCisjOiBnaXRrOjYzNjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgYWxyZWFkeSBpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJlLWFwcGx5IGl0PyIKK21zZ3N0ciAiSW5jaGVja25pbmdlbiAlcyBmaW5ucyByZWRhbiBww6UgZ3JlbmVuICVzIC0tIHNrYWxsIGRlbiB2ZXJrbGlnZW4gYXBwbGljZXJhcyBww6Ugbnl0dD8iCisKKyM6IGdpdGs6NjM2OQorbXNnaWQgIkNoZXJyeS1waWNraW5nIgorbXNnc3RyICJQbG9ja2FyIgorCisjOiBnaXRrOjYzODEKK21zZ2lkICJObyBjaGFuZ2VzIGNvbW1pdHRlZCIKK21zZ3N0ciAiSW5nYSDDpG5kcmluZ2FyIGluY2hlY2thZGUiCisKKyM6IGdpdGs6NjQwNAorbXNnaWQgIkNvbmZpcm0gcmVzZXQiCittc2dzdHIgIkJla3LDpGZ0YSDDpXRlcnN0w6RsbG5pbmciCisKKyM6IGdpdGs6NjQwNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAlcyB0byAlcz8iCittc2dzdHIgIsOFdGVyc3TDpGxsYSBncmVuZW4gJXMgdGlsbCAlcz8iCisKKyM6IGdpdGs6NjQxMAorbXNnaWQgIlJlc2V0IHR5cGU6IgorbXNnc3RyICJUeXAgYXYgw6V0ZXJzdMOkbGxuaW5nOiIKKworIzogZ2l0azo2NDE0Cittc2dpZCAiU29mdDogTGVhdmUgd29ya2luZyB0cmVlIGFuZCBpbmRleCB1bnRvdWNoZWQiCittc2dzdHIgIk1qdWs6IFLDtnIgaW50ZSB1dGNoZWNrbmluZyBvY2ggaW5kZXgiCisKKyM6IGdpdGs6NjQxNworbXNnaWQgIk1peGVkOiBMZWF2ZSB3b3JraW5nIHRyZWUgdW50b3VjaGVkLCByZXNldCBpbmRleCIKK21zZ3N0ciAiQmxhbmRhZDogUsO2ciBpbnRlIHV0Y2hlY2tuaW5nLCDDpXRlcnN0w6RsbCBpbmRleCIKKworIzogZ2l0azo2NDIwCittc2dpZCAiIgorIkhhcmQ6IFJlc2V0IHdvcmtpbmcgdHJlZSBhbmQgaW5kZXhcbiIKKyIoZGlzY2FyZCBBTEwgbG9jYWwgY2hhbmdlcykiCittc2dzdHIgIiIKKyJIw6VyZDogw4V0ZXJzdMOkbGwgdXRjaGVja25pbmcgb2NoIGluZGV4XG4iCisiKGbDtnJrYXN0YXIgQUxMQSBsb2thbGEgw6RuZHJpbmdhcikiCisKKyM6IGdpdGs6NjQzNgorbXNnaWQgIlJlc2V0dGluZyIKK21zZ3N0ciAiw4V0ZXJzdMOkbGxlciIKKworIzogZ2l0azo2NDkzCittc2dpZCAiQ2hlY2tpbmcgb3V0IgorbXNnc3RyICJDaGVja2FyIHV0IgorCisjOiBnaXRrOjY1MjMKK21zZ2lkICJDYW5ub3QgZGVsZXRlIHRoZSBjdXJyZW50bHkgY2hlY2tlZC1vdXQgYnJhbmNoIgorbXNnc3RyICJLYW4gaW50ZSB0YSBib3J0IGRlbiBqdXN0IG51IHV0Y2hlY2thZGUgZ3JlbmVuIgorCisjOiBnaXRrOjY1MjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGNvbW1pdHMgb24gYnJhbmNoICVzIGFyZW4ndCBvbiBhbnkgb3RoZXIgYnJhbmNoLlxuIgorIlJlYWxseSBkZWxldGUgYnJhbmNoICVzPyIKK21zZ3N0ciAiIgorIkluY2hlY2tuaW5nYXJuYSBww6UgZ3JlbmVuICVzIGV4aXN0ZXJhciBpbnRlIHDDpSBuw6Vnb24gYW5uYW4gZ3Jlbi5cbiIKKyJWaWxsIGR1IHZlcmtsaWdlbiB0YSBib3J0IGdyZW5lbiAlcz8iCisKKyM6IGdpdGs6NjU2MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZ3MgYW5kIGhlYWRzOiAlcyIKK21zZ3N0ciAiVGFnZ2FyIG9jaCBodXZ1ZGVuOiAlcyIKKworIzogZ2l0azo2NTc0Cittc2dpZCAiRmlsdGVyIgorbXNnc3RyICJGaWx0ZXIiCisKKyM6IGdpdGs6Njg2OAorbXNnaWQgIiIKKyJFcnJvciByZWFkaW5nIGNvbW1pdCB0b3BvbG9neSBpbmZvcm1hdGlvbjsgYnJhbmNoIGFuZCBwcmVjZWRpbmcvZm9sbG93aW5nICIKKyJ0YWcgaW5mb3JtYXRpb24gd2lsbCBiZSBpbmNvbXBsZXRlLiIKK21zZ3N0ciAiIgorIkZlbCB2aWQgbMOkc25pbmcgYXYgaW5mb3JtYXRpb24gb20gaW5jaGVja25pbmdzdG9wb2xvZ2k7IGluZm9ybWF0aW9uIG9tICIKKyJncmVuYXIgb2NoIGbDtnJlZ8OlZW5kZS9zZW5hcmUgdGFnZ2FyIGtvbW1lciBpbnRlIHZhcmEga29tcGxldHQuIgorCisjOiBnaXRrOjc4NTIKK21zZ2lkICJUYWciCittc2dzdHIgIlRhZ2ciCisKKyM6IGdpdGs6Nzg1MgorbXNnaWQgIklkIgorbXNnc3RyICJJZCIKKworIzogZ2l0azo3ODkyCittc2dpZCAiR2l0ayBmb250IGNob29zZXIiCittc2dzdHIgIlRlY2tlbnNuaXR0c3bDpGxqYXJlIGbDtnIgR2l0ayIKKworIzogZ2l0azo3OTA5Cittc2dpZCAiQiIKK21zZ3N0ciAiRiIKKworIzogZ2l0azo3OTEyCittc2dpZCAiSSIKK21zZ3N0ciAiSyIKKworIzogZ2l0azo4MDA1Cittc2dpZCAiR2l0ayBwcmVmZXJlbmNlcyIKK21zZ3N0ciAiSW5zdMOkbGxuaW5nYXIgZsO2ciBHaXRrIgorCisjOiBnaXRrOjgwMDYKK21zZ2lkICJDb21taXQgbGlzdCBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgIkFsdGVybmF0aXYgZsO2ciBpbmNoZWNrbmluZ3NsaXN0dnkiCisKKyM6IGdpdGs6ODAwOQorbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKGxpbmVzKSIKK21zZ3N0ciAiTWF4aW1hbCBncmFmYnJlZGQgKHJhZGVyKSIKKworIzogZ2l0azo4MDEzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAoJSBvZiBwYW5lKSIKK21zZ3N0ciAiTWF4aW1hbCBncmFmYnJlZGQgKCUgYXYgcnV0YSkiCisKKyM6IGdpdGs6ODAxOAorbXNnaWQgIlNob3cgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAiVmlzYSBsb2thbGEgw6RuZHJpbmdhciIKKworIzogZ2l0azo4MDIzCittc2dpZCAiQXV0by1zZWxlY3QgU0hBMSIKK21zZ3N0ciAiVsOkbGogU0hBMSBhdXRvbWF0aXNrdCIKKworIzogZ2l0azo4MDI4Cittc2dpZCAiRGlmZiBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgIkFsdGVybmF0aXYgZsO2ciBkaWZmdnkiCisKKyM6IGdpdGs6ODAzMAorbXNnaWQgIlRhYiBzcGFjaW5nIgorbXNnc3RyICJCbGFua3N0ZWcgZsO2ciB0YWJ1bGF0b3J0ZWNrZW4iCisKKyM6IGdpdGs6ODAzNAorbXNnaWQgIkRpc3BsYXkgbmVhcmJ5IHRhZ3MiCittc2dzdHIgIlZpc2EgbsOkcmxpZ2dhbmRlIHRhZ2dhciIKKworIzogZ2l0azo4MDM5Cittc2dpZCAiTGltaXQgZGlmZnMgdG8gbGlzdGVkIHBhdGhzIgorbXNnc3RyICJCZWdyw6Ruc2EgZGlmZiB0aWxsIGxpc3RhZGUgc8O2a3bDpGdhciIKKworIzogZ2l0azo4MDQ0Cittc2dpZCAiQ29sb3JzOiBwcmVzcyB0byBjaG9vc2UiCittc2dzdHIgIkbDpHJnZXI6IHRyeWNrIGbDtnIgYXR0IHbDpGxqYSIKKworIzogZ2l0azo4MDQ3Cittc2dpZCAiQmFja2dyb3VuZCIKK21zZ3N0ciAiQmFrZ3J1bmQiCisKKyM6IGdpdGs6ODA1MQorbXNnaWQgIkZvcmVncm91bmQiCittc2dzdHIgIkbDtnJncnVuZCIKKworIzogZ2l0azo4MDU1Cittc2dpZCAiRGlmZjogb2xkIGxpbmVzIgorbXNnc3RyICJEaWZmOiBnYW1sYSByYWRlciIKKworIzogZ2l0azo4MDYwCittc2dpZCAiRGlmZjogbmV3IGxpbmVzIgorbXNnc3RyICJEaWZmOiBueWEgcmFkZXIiCisKKyM6IGdpdGs6ODA2NQorbXNnaWQgIkRpZmY6IGh1bmsgaGVhZGVyIgorbXNnc3RyICJEaWZmOiBkZWxodXZ1ZCIKKworIzogZ2l0azo4MDcxCittc2dpZCAiU2VsZWN0IGJnIgorbXNnc3RyICJNYXJrZXJhZCBiYWtncnVuZCIKKworIzogZ2l0azo4MDc1Cittc2dpZCAiRm9udHM6IHByZXNzIHRvIGNob29zZSIKK21zZ3N0ciAiVGVja2Vuc25pdHQ6IHRyeWNrIGbDtnIgYXR0IHbDpGxqYSIKKworIzogZ2l0azo4MDc3Cittc2dpZCAiTWFpbiBmb250IgorbXNnc3RyICJIdXZ1ZHRlY2tlbnNuaXR0IgorCisjOiBnaXRrOjgwNzgKK21zZ2lkICJEaWZmIGRpc3BsYXkgZm9udCIKK21zZ3N0ciAiVGVja2Vuc25pdHQgZsO2ciBkaWZmdmlzbmluZyIKKworIzogZ2l0azo4MDc5Cittc2dpZCAiVXNlciBpbnRlcmZhY2UgZm9udCIKK21zZ3N0ciAiVGVja2Vuc25pdHQgZsO2ciBhbnbDpG5kYXJncsOkbnNzbml0dCIKKworIzogZ2l0azo4MDk1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiR2l0azogY2hvb3NlIGNvbG9yIGZvciAlcyIKK21zZ3N0ciAiR2l0azogdsOkbGogZsOkcmcgZsO2ciAlcyIKKworIzogZ2l0azo4NDc2Cittc2dpZCAiIgorIlNvcnJ5LCBnaXRrIGNhbm5vdCBydW4gd2l0aCB0aGlzIHZlcnNpb24gb2YgVGNsL1RrLlxuIgorIiBHaXRrIHJlcXVpcmVzIGF0IGxlYXN0IFRjbC9UayA4LjQuIgorbXNnc3RyICIiCisiR2l0ayBrYW4gdHl2w6RyciBpbnRlIGvDtnJhIG1lZCBkZW5uYSB2ZXJzaW9uIGF2IFRjbC9Uay5cbiIKKyIgR2l0ayBrcsOkdmVyIMOldG1pbnN0b25lIFRjbC9UayA4LjQuIgorCisjOiBnaXRrOjg1NjUKK21zZ2lkICJDYW5ub3QgZmluZCBhIGdpdCByZXBvc2l0b3J5IGhlcmUuIgorbXNnc3RyICJIaXR0YXIgaW5nZXQgZ2l0ay1hcmtpdiBow6RyLiIKKworIzogZ2l0azo4NTY5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGZpbmQgdGhlIGdpdCBkaXJlY3RvcnkgXCIlc1wiLiIKK21zZ3N0ciAiSGl0dGFyIGludGUgZ2l0LWthdGFsb2dlbiBcIiVzXCIuIgorCisjOiBnaXRrOjg2MTIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogYm90aCByZXZpc2lvbiBhbmQgZmlsZW5hbWUiCittc2dzdHIgIlR2ZXR5ZGlndCBhcmd1bWVudCBcIiVzXCI6IGLDpWRlIHJldmlzaW9uIG9jaCBmaWxuYW1uIgorCisjOiBnaXRrOjg2MjQKK21zZ2lkICJCYWQgYXJndW1lbnRzIHRvIGdpdGs6IgorbXNnc3RyICJGZWxha3RpZ2EgYXJndW1lbnQgdGlsbCBnaXRrOiIKKworIzogZ2l0azo4NjM2Cittc2dpZCAiQ291bGRuJ3QgZ2V0IGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXM6IgorbXNnc3RyICJLdW5kZSBpbnRhIGjDpG10YSBsaXN0YSDDtnZlciBlaiBzYW1tYW5zbGFnbmEgZmlsZXI6IgorCisjOiBnaXRrOjg2NTIKK21zZ2lkICJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIGZpbGVzIGFyZSB1bm1lcmdlZC4iCittc2dzdHIgIkluZ2EgZmlsZXIgdmFsZGVzOiAtLW1lcmdlIGFuZ2F2cyBtZW4gZGV0IGZpbm5zIGluZ2EgZmlsZXIgc29tIGludGUgaGFyIHNsYWdpdHMgc2FtbWFuLiIKKworIzogZ2l0azo4NjU1Cittc2dpZCAiIgorIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gdW5tZXJnZWQgZmlsZXMgYXJlIHdpdGhpbiBmaWxlICIKKyJsaW1pdC4iCittc2dzdHIgIiIKKyJJbmdhIGZpbGVyIHZhbGRlczogLS1tZXJnZSBhbmdhdnMgbWVuIGRldCBmaW5ucyBpbmdhIGZpbGVyIGlub20gIgorImZpbGJlZ3LDpG5zbmluZ2VuLiIKKworIzogZ2l0azo4NzE2Cittc2dpZCAiQ29tbWFuZCBsaW5lIgorbXNnc3RyICJLb21tYW5kb3JhZCIKKwpkaWZmIC0tZ2l0IGEvZ2l0d2ViL0lOU1RBTEwgYi9naXR3ZWIvSU5TVEFMTAppbmRleCA5Y2Q1YjBhLi5mNzE5NGRiIDEwMDY0NAotLS0gYS9naXR3ZWIvSU5TVEFMTAorKysgYi9naXR3ZWIvSU5TVEFMTApAQCAtMjksNDAgKzI5LDQwIEBACiBTZWUgYWxzbyAiSG93IHRvIGNvbmZpZ3VyZSBnaXR3ZWIgZm9yIHlvdXIgbG9jYWwgc3lzdGVtIiBpbiBSRUFETUUKIGZpbGUgZm9yIGdpdHdlYiAoaW4gZ2l0d2ViL1JFQURNRSkuCiAKLS0gVGhlcmUgYXJlIG1hbnkgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgd2hpY2ggYWZmZWN0cyBidWlsZGluZyBvZgorLSBUaGVyZSBhcmUgbWFueSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyB3aGljaCBhZmZlY3QgYnVpbGRpbmcgb2YKICAgZ2l0d2ViLmNnaTsgc2VlICJkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIGdpdHdlYiIgc2VjdGlvbiBpbiBtYWluCiAgICh0b3AgZGlyKSBNYWtlZmlsZSwgYW5kIGluc3RydWN0aW9ucyBmb3IgYnVpbGRpbmcgZ2l0d2ViL2dpdHdlYi5jZ2kKICAgdGFyZ2V0LgogCi0gIE9uZSBvZiBtb3N0IGltcG9ydGFudCBpcyB3aGVyZSB0byBmaW5kIGdpdCB3cmFwcGVyIGJpbmFyeS4gR2l0d2ViCi0gIHRyaWVzIHRvIGZpbmQgZ2l0IHdyYXBwZXIgYXQgJChiaW5kaXIpL2dpdCwgc28geW91IGhhdmUgdG8gc2V0ICRiaW5kaXIKKyAgT25lIG9mIHRoZSBtb3N0IGltcG9ydGFudCBpcyB3aGVyZSB0byBmaW5kIHRoZSBnaXQgd3JhcHBlciBiaW5hcnkuIEdpdHdlYgorICB0cmllcyB0byBmaW5kIHRoZSBnaXQgd3JhcHBlciBhdCAkKGJpbmRpcikvZ2l0LCBzbyB5b3UgaGF2ZSB0byBzZXQgJGJpbmRpcgogICB3aGVuIGJ1aWxkaW5nIGdpdHdlYi5jZ2ksIG9yICRwcmVmaXggZnJvbSB3aGljaCAkYmluZGlyIGlzIGRlcml2ZWQuIElmCi0gIHlvdSBidWlsZCBhbmQgaW5zdGFsbCBnaXR3ZWIgdG9nZXRoZXIgd2l0aCB0aGUgcmVzdCBvZiBnaXQgc3VpdGUsCisgIHlvdSBidWlsZCBhbmQgaW5zdGFsbCBnaXR3ZWIgdG9nZXRoZXIgd2l0aCB0aGUgcmVzdCBvZiB0aGUgZ2l0IHN1aXRlLAogICB0aGVyZSBzaG91bGQgYmUgbm8gcHJvYmxlbXMuIE90aGVyd2lzZSwgaWYgZ2l0IHdhcyBmb3IgZXhhbXBsZQogICBpbnN0YWxsZWQgZnJvbSBhIGJpbmFyeSBwYWNrYWdlLCB5b3UgaGF2ZSB0byBzZXQgJHByZWZpeCAob3IgJGJpbmRpcikKICAgYWNjb3JkaW5nbHkuCiAKIC0gQW5vdGhlciBpbXBvcnRhbnQgaXNzdWUgaXMgd2hlcmUgYXJlIGdpdCByZXBvc2l0b3JpZXMgeW91IHdhbnQgdG8gbWFrZQotICBhdmFpbGFibGUgdG8gZ2l0d2ViLiBCeSBkZWZhdWx0IGdpdHdlYiBzZWFyY2ggZm9yIHJlcG9zaXRvcmllcyB1bmRlcgorICBhdmFpbGFibGUgdG8gZ2l0d2ViLiBCeSBkZWZhdWx0IGdpdHdlYiBzZWFyY2hlcyBmb3IgcmVwb3NpdG9yaWVzIHVuZGVyCiAgIC9wdWIvZ2l0OyBpZiB5b3Ugd2FudCB0byBoYXZlIHByb2plY3RzIHNvbWV3aGVyZSBlbHNlLCBsaWtlIC9ob21lL2dpdCwKICAgdXNlIEdJVFdFQl9QUk9KRUNUUk9PVCBidWlsZCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgogCiAgIEJ5IGRlZmF1bHQgYWxsIGdpdCByZXBvc2l0b3JpZXMgdW5kZXIgcHJvamVjdHJvb3QgYXJlIHZpc2libGUgYW5kCi0gIGF2YWlsYWJsZSB0byBnaXR3ZWIuIExpc3Qgb2YgcHJvamVjdHMgaXMgZ2VuZXJhdGVkIGJ5IGRlZmF1bHQgYnkKKyAgYXZhaWxhYmxlIHRvIGdpdHdlYi4gVGhlIGxpc3Qgb2YgcHJvamVjdHMgaXMgZ2VuZXJhdGVkIGJ5IGRlZmF1bHQgYnkKICAgc2Nhbm5pbmcgdGhlIHByb2plY3Ryb290IGRpcmVjdG9yeSBmb3IgZ2l0IHJlcG9zaXRvcmllcy4gVGhpcyBjYW4gYmUKICAgY2hhbmdlZCAoY29uZmlndXJlZCkgYXMgZGVzY3JpYmVkIGluICJHaXR3ZWIgcmVwb3NpdG9yaWVzIiBzZWN0aW9uCiAgIGJlbG93LgogCi0gIE5vdGUgdGhhdCBnaXR3ZWIgZGVhbHMgZGlyZWN0bHkgd2l0aCBvYmplY3QgZGF0YWJhc2UsIGFuZCBkb2VzIG5vdAotICBuZWVkIHdvcmtpbmcgZGlyZWN0b3J5OyB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBpcyB0aGUgbmFtZSBvZiBpdHMKKyAgTm90ZSB0aGF0IGdpdHdlYiBkZWFscyBkaXJlY3RseSB3aXRoIHRoZSBvYmplY3QgZGF0YWJhc2UsIGFuZCBkb2VzIG5vdAorICBuZWVkIGEgd29ya2luZyBkaXJlY3Rvcnk7IHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IGlzIHRoZSBuYW1lIG9mIGl0cwogICByZXBvc2l0b3J5IG9iamVjdCBkYXRhYmFzZSwgdXN1YWxseSBwcm9qZWN0bmFtZS5naXQgZm9yIGJhcmUKICAgcmVwb3NpdG9yaWVzLiBJZiB5b3Ugd2FudCB0byBwcm92aWRlIGdpdHdlYiBhY2Nlc3MgdG8gbm9uLWJhcmUgKGxpdmUpCi0gIHJlcG9zaXRvcnksIHlvdSBjYW4gbWFrZSBwcm9qZWN0bmFtZS5naXQgc3ltYm9saWMgbGluayB1bmRlcgorICByZXBvc2l0b3JpZXMsIHlvdSBjYW4gbWFrZSBwcm9qZWN0bmFtZS5naXQgYSBzeW1ib2xpYyBsaW5rIHVuZGVyCiAgIHByb2plY3Ryb290IGxpbmtpbmcgdG8gcHJvamVjdG5hbWUvLmdpdCAoYnV0IGl0IGlzIGp1c3QKICAgYSBzdWdnZXN0aW9uKS4KIAogLSBZb3UgY2FuIGNvbnRyb2wgd2hlcmUgZ2l0d2ViIHRyaWVzIHRvIGZpbmQgaXRzIG1haW4gQ1NTIHN0eWxlIGZpbGUsCi0gIGl0cyBmYXZpY29uIGFuZCBsb2dvIHdpdGggR0lUV0VCX0NTUywgR0lUV0VCX0ZBVklDT04gYW5kIEdJVFdFQl9MT0dPCisgIGl0cyBmYXZpY29uIGFuZCBsb2dvIHdpdGggdGhlIEdJVFdFQl9DU1MsIEdJVFdFQl9GQVZJQ09OIGFuZCBHSVRXRUJfTE9HTwogICBidWlsZCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4gQnkgZGVmYXVsdCBnaXR3ZWIgdHJpZXMgdG8gZmluZCB0aGVtCiAgIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyBnaXR3ZWIuY2dpIHNjcmlwdC4KIApAQCAtOTEsMTMgKzkxLDE3IEBACiBTZWUgYWxzbyAiUnVudGltZSBnaXR3ZWIgY29uZmlndXJhdGlvbiIgc2VjdGlvbiBpbiBSRUFETUUgZmlsZQogZm9yIGdpdHdlYiAoaW4gZ2l0d2ViL1JFQURNRSkuCiAKLS0gWW91IGNhbiBjb25maWd1cmUgZ2l0d2ViIGZ1cnRoZXIgdXNpbmcgZ2l0d2ViIGNvbmZpZ3VyYXRpb24gZmlsZTsKLSAgYnkgZGVmYXVsdCBpdCBpcyBmaWxlIG5hbWVkIGdpdHdlYl9jb25maWcucGVybCBpbiB0aGUgc2FtZSBwbGFjZSBhcwotICBnaXR3ZWIuY2dpIHNjcmlwdC4gWW91IGNhbiBjb250cm9sIGRlZmF1bHQgcGxhY2UgZm9yIGNvbmZpZyBmaWxlCi0gIHVzaW5nIEdJVFdFQl9DT05GSUcgYnVpbGQgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgYW5kIHlvdSBjYW4gc2V0IGl0Ci0gIHVzaW5nIEdJVFdFQl9DT05GSUcgZW52aXJvbm1lbnRhbCB2YXJpYWJsZS4KKy0gWW91IGNhbiBjb25maWd1cmUgZ2l0d2ViIGZ1cnRoZXIgdXNpbmcgdGhlIGdpdHdlYiBjb25maWd1cmF0aW9uIGZpbGU7CisgIGJ5IGRlZmF1bHQgdGhpcyBpcyBhIGZpbGUgbmFtZWQgZ2l0d2ViX2NvbmZpZy5wZXJsIGluIHRoZSBzYW1lIHBsYWNlIGFzCisgIGdpdHdlYi5jZ2kgc2NyaXB0LiBZb3UgY2FuIGNvbnRyb2wgdGhlIGRlZmF1bHQgcGxhY2UgZm9yIHRoZSBjb25maWcgZmlsZQorICB1c2luZyB0aGUgR0lUV0VCX0NPTkZJRyBidWlsZCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCBhbmQgeW91IGNhbiBzZXQgaXQKKyAgdXNpbmcgdGhlIEdJVFdFQl9DT05GSUcgZW52aXJvbm1lbnQgdmFyaWFibGUuIElmIHRoaXMgZmlsZSBkb2VzIG5vdAorICBleGlzdCwgZ2l0d2ViIGxvb2tzIGZvciBhIHN5c3RlbS13aWRlIGNvbmZpZ3VyYXRpb24gZmlsZSwgbm9ybWFsbHkKKyAgL2V0Yy9naXR3ZWIuY29uZi4gWW91IGNhbiBjaGFuZ2UgdGhlIGRlZmF1bHQgdXNpbmcgdGhlCisgIEdJVFdFQl9DT05GSUdfU1lTVEVNIGJ1aWxkIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUsIGFuZCBvdmVycmlkZSBpdAorICB0aHJvdWdoIHRoZSBHSVRXRUJfQ09ORklHX1NZU1RFTSBlbnZpcm9ubWVudCB2YXJpYWJsZS4KIAotLSBHaXR3ZWIgY29uZmlnIGZpbGUgaXMgW2ZyYWdtZW50XSBvZiBwZXJsIGNvZGUuIFlvdSBjYW4gc2V0IHZhcmlhYmxlcworLSBUaGUgZ2l0d2ViIGNvbmZpZyBmaWxlIGlzIGEgZnJhZ21lbnQgb2YgcGVybCBjb2RlLiBZb3UgY2FuIHNldCB2YXJpYWJsZXMKICAgdXNpbmcgIm91ciAkdmFyaWFibGUgPSB2YWx1ZSI7IHRleHQgZnJvbSAiIyIgY2hhcmFjdGVyIHVudGlsIHRoZSBlbmQKICAgb2YgYSBsaW5lIGlzIGlnbm9yZWQuIFNlZSBwZXJsc3luKDEpIGZvciBkZXRhaWxzLgogCkBAIC0xMjQsMzYgKzEyOCwzNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAtIEJ5IGRlZmF1bHQgYWxsIGdpdCByZXBvc2l0b3JpZXMgdW5kZXIgcHJvamVjdHJvb3QgYXJlIHZpc2libGUgYW5kCi0gIGF2YWlsYWJsZSB0byBnaXR3ZWIuIExpc3Qgb2YgcHJvamVjdHMgaXMgZ2VuZXJhdGVkIGJ5IGRlZmF1bHQgYnkKKyAgYXZhaWxhYmxlIHRvIGdpdHdlYi4gVGhlIGxpc3Qgb2YgcHJvamVjdHMgaXMgZ2VuZXJhdGVkIGJ5IGRlZmF1bHQgYnkKICAgc2Nhbm5pbmcgdGhlIHByb2plY3Ryb290IGRpcmVjdG9yeSBmb3IgZ2l0IHJlcG9zaXRvcmllcyAoZm9yIG9iamVjdAogICBkYXRhYmFzZXMgdG8gYmUgbW9yZSBleGFjdCkuCiAKLSAgWW91IGNhbiBwcm92aWRlIHByZS1nZW5lcmF0ZWQgbGlzdCBvZiBbdmlzaWJsZV0gcmVwb3NpdG9yaWVzLAorICBZb3UgY2FuIHByb3ZpZGUgYSBwcmUtZ2VuZXJhdGVkIGxpc3Qgb2YgW3Zpc2libGVdIHJlcG9zaXRvcmllcywKICAgdG9nZXRoZXIgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGVpciBvd25lcnMgKHRoZSBwcm9qZWN0IG93bmVyc2hpcAotICBpcyB0YWtlbiBmcm9tIG93bmVyIG9mIHJlcG9zaXRvcnkgZGlyZWN0b3J5IG90aGVyd2lzZSksIGJ5IHNldHRpbmcKLSAgR0lUV0VCX0xJU1QgYnVpbGQgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAob3IgJHByb2plY3RzX2xpc3QgdmFyaWFibGUKLSAgaW4gZ2l0d2ViIGNvbmZpZyBmaWxlKSB0byBwb2ludCB0byBhIHBsYWluIGZpbGUuCisgIGRlZmF1bHRzIHRvIHRoZSBvd25lciBvZiB0aGUgcmVwb3NpdG9yeSBkaXJlY3Rvcnkgb3RoZXJ3aXNlKSwgYnkgc2V0dGluZworICB0aGUgR0lUV0VCX0xJU1QgYnVpbGQgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAob3IgdGhlICRwcm9qZWN0c19saXN0CisgIHZhcmlhYmxlIGluIHRoZSBnaXR3ZWIgY29uZmlnIGZpbGUpIHRvIHBvaW50IHRvIGEgcGxhaW4gZmlsZS4KIAotICBFYWNoIGxpbmUgb2YgcHJvamVjdHMgbGlzdCBmaWxlIHNob3VsZCBjb25zaXN0IG9mIHVybC1lbmNvZGVkIHBhdGgKLSAgdG8gcHJvamVjdCByZXBvc2l0b3J5IGRhdGFiYXNlIChyZWxhdGl2ZSB0byBwcm9qZWN0cm9vdCkgc2VwYXJhdGVkCi0gIGJ5IHNwYWNlIGZyb20gdXJsLWVuY29kZWQgcHJvamVjdCBvd25lcjsgc3BhY2VzIGluIGJvdGggcHJvamVjdCBwYXRoCi0gIGFuZCBwcm9qZWN0IG93bmVyIGhhdmUgdG8gYmUgZW5jb2RlZCBhcyBlaXRoZXIgJyUyMCcgb3IgJysnLgorICBFYWNoIGxpbmUgb2YgdGhlIHByb2plY3RzIGxpc3QgZmlsZSBzaG91bGQgY29uc2lzdCBvZiB0aGUgdXJsLWVuY29kZWQgcGF0aAorICB0byB0aGUgcHJvamVjdCByZXBvc2l0b3J5IGRhdGFiYXNlIChyZWxhdGl2ZSB0byBwcm9qZWN0cm9vdCksIGZvbGxvd2VkCisgIGJ5IHRoZSB1cmwtZW5jb2RlZCBwcm9qZWN0IG93bmVyIG9uIHRoZSBzYW1lIGxpbmUgKHNlcGFyYXRlZCBieSBhIHNwYWNlKS4KKyAgU3BhY2VzIGluIGJvdGggcHJvamVjdCBwYXRoIGFuZCBwcm9qZWN0IG93bmVyIGhhdmUgdG8gYmUgZW5jb2RlZCBhcyBlaXRoZXIKKyAgJyUyMCcgb3IgJysnLgogCi0gIFlvdSBjYW4gZ2VuZXJhdGUgcHJvamVjdHMgbGlzdCBpbmRleCBmaWxlIHVzaW5nIHByb2plY3RfaW5kZXggYWN0aW9uCi0gICh0aGUgJ1RYVCcgbGluayBvbiBwcm9qZWN0cyBsaXN0IHBhZ2UpIGRpcmVjdGx5IGZyb20gZ2l0d2ViLgorICBZb3UgY2FuIGdlbmVyYXRlIHRoZSBwcm9qZWN0cyBsaXN0IGluZGV4IGZpbGUgdXNpbmcgdGhlIHByb2plY3RfaW5kZXgKKyAgYWN0aW9uICh0aGUgJ1RYVCcgbGluayBvbiBwcm9qZWN0cyBsaXN0IHBhZ2UpIGRpcmVjdGx5IGZyb20gZ2l0d2ViLgogCi0tIEJ5IGRlZmF1bHQgZXZlbiBpZiBwcm9qZWN0IGlzIG5vdCB2aXNpYmxlIG9uIHByb2plY3RzIGxpc3QgcGFnZSwgeW91Ci0gIGNhbiB2aWV3IGl0IG5ldmVydGhlbGVzcyBieSBoYW5kLWNyYWZ0aW5nIGdpdHdlYiBVUkwuIFlvdSBjYW4gc2V0Ci0gIEdJVFdFQl9TVFJJQ1RfRVhQT1JUIGJ1aWxkIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgKG9yICRzdHJpY3RfZXhwb3J0Ci0gIHZhcmlhYmxlIGluIGdpdHdlYiBjb25maWcgZmlsZSkgdG8gb25seSBhbGxvdyB2aWV3aW5nIG9mCistIEJ5IGRlZmF1bHQsIGV2ZW4gaWYgYSBwcm9qZWN0IGlzIG5vdCB2aXNpYmxlIG9uIHByb2plY3RzIGxpc3QgcGFnZSwgeW91CisgIGNhbiB2aWV3IGl0IG5ldmVydGhlbGVzcyBieSBoYW5kLWNyYWZ0aW5nIGEgZ2l0d2ViIFVSTC4gWW91IGNhbiBzZXQgdGhlCisgIEdJVFdFQl9TVFJJQ1RfRVhQT1JUIGJ1aWxkIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgKG9yIHRoZSAkc3RyaWN0X2V4cG9ydAorICB2YXJpYWJsZSBpbiB0aGUgZ2l0d2ViIGNvbmZpZyBmaWxlKSB0byBvbmx5IGFsbG93IHZpZXdpbmcgb2YKICAgcmVwb3NpdG9yaWVzIGFsc28gc2hvd24gb24gdGhlIG92ZXJ2aWV3IHBhZ2UuCiAKIC0gQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBjb25maWd1cmUgZ2l0d2ViIHRvIG9ubHkgbGlzdCBhbmQgYWxsb3cKLSAgdmlld2luZyBvZiB0aGUgZXhwbGljaXRseSBleHBvcnRlZCByZXBvc2l0b3JpZXMsIHZpYQotICBHSVRXRUJfRVhQT1JUX09LIGJ1aWxkIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgKG9yICRleHBvcnRfb2sKKyAgdmlld2luZyBvZiB0aGUgZXhwbGljaXRseSBleHBvcnRlZCByZXBvc2l0b3JpZXMsIHZpYSB0aGUKKyAgR0lUV0VCX0VYUE9SVF9PSyBidWlsZCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIChvciB0aGUgJGV4cG9ydF9vawogICB2YXJpYWJsZSBpbiBnaXR3ZWIgY29uZmlnIGZpbGUpLiBJZiBpdCBldmFsdWF0ZXMgdG8gdHJ1ZSwgZ2l0d2ViCi0gIHNob3cgcmVwb3NpdG9yeSBvbmx5IGlmIHRoaXMgZmlsZSBleGlzdHMgaW4gaXRzIG9iamVjdCBkYXRhYmFzZQotICAoaWYgZGlyZWN0b3J5IGhhcyB0aGUgbWFnaWMgZmlsZSAkZXhwb3J0X29rKS4KKyAgc2hvd3MgcmVwb3NpdG9yaWVzIG9ubHkgaWYgdGhpcyBmaWxlIGV4aXN0cyBpbiBpdHMgb2JqZWN0IGRhdGFiYXNlCisgIChpZiBkaXJlY3RvcnkgaGFzIHRoZSBtYWdpYyBmaWxlIG5hbWVkICRleHBvcnRfb2spLgogCiBHZW5lcmF0aW5nIHByb2plY3RzIGxpc3QgdXNpbmcgZ2l0d2ViCiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CmRpZmYgLS1naXQgYS9naXR3ZWIvUkVBRE1FIGIvZ2l0d2ViL1JFQURNRQppbmRleCAyMTYzMDcxLi4zNTZhYjdiIDEwMDY0NAotLS0gYS9naXR3ZWIvUkVBRE1FCisrKyBiL2dpdHdlYi9SRUFETUUKQEAgLTIsNyArMiw3IEBACiA9PT09PT09PT09PT09PT09PQogCiBUaGUgb25lIHdvcmtpbmcgb246Ci0gIGh0dHA6Ly93d3cua2VybmVsLm9yZy9naXQvCisgIGh0dHA6Ly9naXQua2VybmVsLm9yZy8KIAogRnJvbSB0aGUgZ2l0IHZlcnNpb24gMS40LjAgZ2l0d2ViIGlzIGJ1bmRsZWQgd2l0aCBnaXQuCiAKQEAgLTEwLDEzICsxMCwxMyBAQAogSG93IHRvIGNvbmZpZ3VyZSBnaXR3ZWIgZm9yIHlvdXIgbG9jYWwgc3lzdGVtCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotU2VlIGFsc28gIkJ1aWxkIHRpbWUgY29uZmlndXJhdGlvbiIgc2VjdGlvbiBpbiBJTlNUQUxMCitTZWUgYWxzbyB0aGUgIkJ1aWxkIHRpbWUgY29uZmlndXJhdGlvbiIgc2VjdGlvbiBpbiB0aGUgSU5TVEFMTAogZmlsZSBmb3IgZ2l0d2ViIChpbiBnaXR3ZWIvSU5TVEFMTCkuCiAKIFlvdSBjYW4gc3BlY2lmeSB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHdoZW4gYnVpbGRpbmcgR0lUOgogICogR0lUX0JJTkRJUgotICAgUG9pbnRzIG91dCB3aGVyZSB0byBmaW5kIGdpdCBleGVjdXRhYmxlLiAgWW91IHNob3VsZCBzZXQgdXAgaXQgdG8KLSAgIHRoZSBwbGFjZSB3aGVyZSBnaXQgYmluYXJ5IHdhcyBpbnN0YWxsZWQgKHVzdWFsbHkgL3Vzci9iaW4pIGlmIHlvdQorICAgUG9pbnRzIHdoZXJlIHRvIGZpbmQgdGhlIGdpdCBleGVjdXRhYmxlLiAgWW91IHNob3VsZCBzZXQgaXQgdXAgdG8KKyAgIHRoZSBwbGFjZSB3aGVyZSB0aGUgZ2l0IGJpbmFyeSB3YXMgaW5zdGFsbGVkICh1c3VhbGx5IC91c3IvYmluKSBpZiB5b3UKICAgIGRvbid0IGluc3RhbGwgZ2l0IGZyb20gc291cmNlcyB0b2dldGhlciB3aXRoIGdpdHdlYi4gIFtEZWZhdWx0OiAkKGJpbmRpcildCiAgKiBHSVRXRUJfU0lURU5BTUUKICAgIFNob3duIGluIHRoZSB0aXRsZSBvZiBhbGwgZ2VuZXJhdGVkIHBhZ2VzLCBkZWZhdWx0cyB0byB0aGUgc2VydmVyIG5hbWUKQEAgLTI0LDEzICsyNCwxMyBAQAogICogR0lUV0VCX1BST0pFQ1RST09UCiAgICBUaGUgcm9vdCBkaXJlY3RvcnkgZm9yIGFsbCBwcm9qZWN0cyBzaG93biBieSBnaXR3ZWIuIE11c3QgYmUgc2V0CiAgICBjb3JyZWN0bHkgZm9yIGdpdHdlYiB0byBmaW5kIHJlcG9zaXRvcmllcyB0byBkaXNwbGF5LiAgU2VlIGFsc28KLSAgICJHaXR3ZWIgcmVwb3NpdG9yaWVzIiBpbiBJTlNUQUxMIGZpbGUgZm9yIGdpdHdlYi4gIFtEZWZhdWx0OiAvcHViL2dpdF0KKyAgICJHaXR3ZWIgcmVwb3NpdG9yaWVzIiBpbiB0aGUgSU5TVEFMTCBmaWxlIGZvciBnaXR3ZWIuICBbRGVmYXVsdDogL3B1Yi9naXRdCiAgKiBHSVRXRUJfUFJPSkVDVF9NQVhERVBUSAotICAgVGhlIGZpbGVzeXN0ZW0gdHJhdmVyc2luZyBsaW1pdCBmb3IgZ2V0dGluZyBwcm9qZWN0cyBsaXN0OyB0aGUgbnVtYmVyCisgICBUaGUgZmlsZXN5c3RlbSB0cmF2ZXJzaW5nIGxpbWl0IGZvciBnZXR0aW5nIHRoZSBwcm9qZWN0IGxpc3Q7IHRoZSBudW1iZXIKICAgIGlzIHRha2VuIGFzIGRlcHRoIHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0cm9vdC4gIEl0IGlzIHVzZWQgd2hlbgogICAgR0lUV0VCX0xJU1QgaXMgYSBkaXJlY3RvcnkgKG9yIGlzIG5vdCBzZXQ7IHRoZW4gcHJvamVjdCByb290IGlzIHVzZWQpLgogICAgSXMgaXMgbWVhbnQgdG8gc3BlZWQgdXAgcHJvamVjdCBsaXN0aW5nIG9uIGxhcmdlIHdvcmsgdHJlZXMgYnkgbGltaXRpbmcKLSAgIGZpbmQgZGVwdGguICBbRGVmYXVsdDogMjAwN10KKyAgIHNlYXJjaCBkZXB0aC4gIFtEZWZhdWx0OiAyMDA3XQogICogR0lUV0VCX0xJU1QKICAgIFBvaW50cyB0byBhIGRpcmVjdG9yeSB0byBzY2FuIGZvciBwcm9qZWN0cyAoZGVmYXVsdHMgdG8gcHJvamVjdCByb290CiAgICBpZiBub3Qgc2V0IC8gaWYgZW1wdHkpIG9yIHRvIGEgZmlsZSB3aXRoIGV4cGxpY2l0IGxpc3Rpbmcgb2YgcHJvamVjdHMKQEAgLTcyLDE1ICs3MiwxNSBAQAogICAgR2l0IGJhc2UgVVJMcyB1c2VkIGZvciBVUkwgdG8gd2hlcmUgZmV0Y2ggcHJvamVjdCBmcm9tLCBpLmUuIGZ1bGwKICAgIFVSTCBpcyAiJGdpdF9iYXNlX3VybC8kcHJvamVjdCIuICBTaG93biBvbiBwcm9qZWN0cyBzdW1tYXJ5IHBhZ2UuCiAgICBSZXBvc2l0b3J5IFVSTCBmb3IgcHJvamVjdCBjYW4gYmUgYWxzbyBjb25maWd1cmVkIHBlciByZXBvc2l0b3J5OyB0aGlzCi0gICB0YWtlcyBwcmVjZW5kZW5jZSBvdmVyIFVSTCBjb21wb3NlZCBmcm9tIGJhc2UgVVJMIGFuZCBwcm9qZWN0IG5hbWUuCisgICB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgVVJMcyBjb21wb3NlZCBmcm9tIGJhc2UgVVJMIGFuZCBhIHByb2plY3QgbmFtZS4KICAgIE5vdGUgdGhhdCB5b3UgY2FuIHNldHVwIG11bHRpcGxlIGJhc2UgVVJMcyAoZm9yIGV4YW1wbGUgb25lIGZvcgotICAgZ2l0Oi8vIHByb3RvY29sIGFjY2Vzcywgb25lIGZvciBodHRwOi8vIGFjY2VzcykgZnJvbSBnaXR3ZWIgY29uZmlnCi0gICBmaWxlLiAgW05vIGRlZmF1bHRdCisgICBnaXQ6Ly8gcHJvdG9jb2wgYWNjZXNzLCBhbm90aGVyIGZvciBodHRwOi8vIGFjY2VzcykgZnJvbSB0aGUgZ2l0d2ViCisgICBjb25maWcgZmlsZS4gIFtObyBkZWZhdWx0XQogICogR0lUV0VCX0NTUwogICAgUG9pbnRzIHRvIHRoZSBsb2NhdGlvbiB3aGVyZSB5b3UgcHV0IGdpdHdlYi5jc3Mgb24geW91ciB3ZWIgc2VydmVyCi0gICAob3IgdG8gYmUgbW9yZSBnZW5lcmljIFVSSSBvZiBnaXR3ZWIgc3R5bGVzaGVldCkuICBSZWxhdGl2ZSB0byBiYXNlCi0gICBVUkkgb2YgZ2l0d2ViLiAgTm90ZSB0aGF0IHlvdSBjYW4gc2V0dXAgbXVsdGlwbGUgc3R5bGVzaGVldHMgZnJvbQotICAgZ2l0d2ViIGNvbmZpZyBmaWxlLiAgW0RlZmF1bHQ6IGdpdHdlYi5jc3NdCisgICAob3IgdG8gYmUgbW9yZSBnZW5lcmljLCB0aGUgVVJJIG9mIGdpdHdlYiBzdHlsZXNoZWV0KS4gIFJlbGF0aXZlIHRvIHRoZQorICAgYmFzZSBVUkkgb2YgZ2l0d2ViLiAgTm90ZSB0aGF0IHlvdSBjYW4gc2V0dXAgbXVsdGlwbGUgc3R5bGVzaGVldHMgZnJvbQorICAgdGhlIGdpdHdlYiBjb25maWcgZmlsZS4gIFtEZWZhdWx0OiBnaXR3ZWIuY3NzXQogICogR0lUV0VCX0xPR08KICAgIFBvaW50cyB0byB0aGUgbG9jYXRpb24gd2hlcmUgeW91IHB1dCBnaXQtbG9nby5wbmcgb24geW91ciB3ZWIgc2VydmVyCiAgICAob3IgdG8gYmUgbW9yZSBnZW5lcmljIFVSSSBvZiBsb2dvLCA3MngyNyBzaXplLCBkaXNwbGF5ZWQgaW4gdG9wIHJpZ2h0CkBAIC0xMDAsMTMgKzEwMCwyMCBAQAogICAgaXMgc2V0IHdoZW4gZ2l0d2ViLmNnaSBpcyBleGVjdXRlZCwgdGhlbiB0aGUgZmlsZSBzcGVjaWZpZWQgaW4gdGhlCiAgICBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aWxsIGJlIGxvYWRlZCBpbnN0ZWFkIG9mIHRoZSBmaWxlIHNwZWNpZmllZAogICAgd2hlbiBnaXR3ZWIuY2dpIHdhcyBjcmVhdGVkLiAgW0RlZmF1bHQ6IGdpdHdlYl9jb25maWcucGVybF0KKyAqIEdJVFdFQl9DT05GSUdfU1lTVEVNCisgICBUaGlzIFBlcmwgZmlsZSB3aWxsIGJlIGxvYWRlZCB1c2luZyAnZG8nIGFzIGEgZmFsbGJhY2sgaWYgR0lUV0VCX0NPTkZJRworICAgZG9lcyBub3QgZXhpc3QuICBJZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgR0lUV0VCX0NPTkZJR19TWVNURU0gaXMgc2V0CisgICB3aGVuIGdpdHdlYi5jZ2kgaXMgZXhlY3V0ZWQsIHRoZW4gdGhlIGZpbGUgc3BlY2lmaWVkIGluIHRoZSBlbnZpcm9ubWVudAorICAgdmFyaWFibGUgd2lsbCBiZSBsb2FkZWQgaW5zdGVhZCBvZiB0aGUgZmlsZSBzcGVjaWZpZWQgd2hlbiBnaXR3ZWIuY2dpIHdhcworICAgY3JlYXRlZC4gIFtEZWZhdWx0OiAvZXRjL2dpdHdlYi5jb25mXQogCiAKIFJ1bnRpbWUgZ2l0d2ViIGNvbmZpZ3VyYXRpb24KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogWW91IGNhbiBhZGp1c3QgZ2l0d2ViIGJlaGF2aW91ciB1c2luZyB0aGUgZmlsZSBzcGVjaWZpZWQgaW4gYEdJVFdFQl9DT05GSUdgCi0oZGVmYXVsdHMgdG8gJ2dpdHdlYl9jb25maWcucGVybCcgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBDR0kpLgorKGRlZmF1bHRzIHRvICdnaXR3ZWJfY29uZmlnLnBlcmwnIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgQ0dJKSwgYW5kCithcyBhIGZhbGxiYWNrIGBHSVRXRUJfQ09ORklHX1NZU1RFTWAgKGRlZmF1bHRzIHRvIC9ldGMvZ2l0d2ViLmNvbmYpLgogVGhlIG1vc3Qgbm90YWJsZSB0aGluZyB0aGF0IGlzIG5vdCBjb25maWd1cmFibGUgYXQgY29tcGlsZSB0aW1lIGFyZSB0aGUKIG9wdGlvbmFsIGZlYXR1cmVzLCBzdG9yZWQgaW4gdGhlICclZmVhdHVyZXMnIHZhcmlhYmxlLgogCkBAIC0xMTQsMTUgKzEyMSwxNSBAQAogaW4geW91ciBgR0lUV0VCX0NPTkZJR2Agb3IgcGVyLXByb2plY3QgaW4gYHByb2plY3QuZ2l0L2NvbmZpZ2AgY2FuIGJlIGZvdW5kCiBhcyBjb21tZW50cyBpbnNpZGUgJ2dpdHdlYi5jZ2knLgogCi1TZWUgYWxzbyAiR2l0d2ViIGNvbmZpZyBmaWxlIiAod2l0aCBleGFtcGxlIG9mIGdpdHdlYiBjb25maWcgZmlsZSksIGFuZAotIkdpdHdlYiByZXBvc2l0b3JpZXMiIHNlY3Rpb25zIGluIElOU1RBTEwgZmlsZSBmb3IgZ2l0d2ViLgorU2VlIGFsc28gdGhlICJHaXR3ZWIgY29uZmlnIGZpbGUiICh3aXRoIGFuIGV4YW1wbGUgb2YgY29uZmlnIGZpbGUpLCBhbmQKK3RoZSAiR2l0d2ViIHJlcG9zaXRvcmllcyIgc2VjdGlvbnMgaW4gSU5TVEFMTCBmaWxlIGZvciBnaXR3ZWIuCiAKIAotR2l0d2ViIGNvbmZpZyBmaWxlIGlzIFtmcmFnbWVudF0gb2YgcGVybCBjb2RlLiBZb3UgY2FuIHNldCB2YXJpYWJsZXMKK1RoZSBnaXR3ZWIgY29uZmlnIGZpbGUgaXMgYSBmcmFnbWVudCBvZiBwZXJsIGNvZGUuIFlvdSBjYW4gc2V0IHZhcmlhYmxlcwogdXNpbmcgIm91ciAkdmFyaWFibGUgPSB2YWx1ZSI7IHRleHQgZnJvbSAiIyIgY2hhcmFjdGVyIHVudGlsIHRoZSBlbmQKIG9mIGEgbGluZSBpcyBpZ25vcmVkLiBTZWUgcGVybHN5bigxKSBtYW4gcGFnZSBmb3IgZGV0YWlscy4KIAotQmVsb3cgdGhlcmUgaXMgbGlzdCBvZiB2YWlhYmxlcyB3aGljaCB5b3UgbWlnaHQgd2FudCB0byBzZXQgaW4gZ2l0d2ViIGNvbmZpZy4KK0JlbG93IGlzIHRoZSBsaXN0IG9mIHZhcmlhYmxlcyB3aGljaCB5b3UgbWlnaHQgd2FudCB0byBzZXQgaW4gZ2l0d2ViIGNvbmZpZy4KIFNlZSB0aGUgdG9wIG9mICdnaXR3ZWIuY2dpJyBmb3IgdGhlIGZ1bGwgbGlzdCBvZiB2YXJpYWJsZXMgYW5kIHRoZWlyCiBkZXNjcmlwdGlvbnMuCiAKQEAgLTEzMyw3ICsxNDAsNyBAQAogKHdpdGggdGhlIGV4Y2VwdGlvbiBvZiAkcHJvamVjdHJvb3QgYW5kICRwcm9qZWN0c19saXN0IHRoaXMgbGlzdCBkb2VzCiBub3QgaW5jbHVkZSB2YXJpYWJsZXMgdXN1YWxseSBkaXJlY3RseSBzZXQgZHVyaW5nIGJ1aWxkKToKICAqICRHSVQKLSAgIEN1cmUgZ2l0IGV4ZWN1dGFibGUgdG8gdXNlLiAgQnkgZGVmYXVsdCBzZXQgdG8gIiRHSVRfQklORElSL2dpdCIsIHdoaWNoCisgICBDb3JlIGdpdCBleGVjdXRhYmxlIHRvIHVzZS4gIEJ5IGRlZmF1bHQgc2V0IHRvICIkR0lUX0JJTkRJUi9naXQiLCB3aGljaAogICAgaW4gdHVybiBpcyBieSBkZWZhdWx0IHNldCB0byAiJChiaW5kaXIpL2dpdCIuICBJZiB5b3UgdXNlIGdpdCBmcm9tIGJpbmFyeQogICAgcGFja2FnZSwgc2V0IHRoaXMgdG8gIi91c3IvYmluL2dpdCIuICBUaGlzIGNhbiBqdXN0IGJlICJnaXQiIGlmIHlvdXIKICAgIHdlYnNlcnZlciBoYXMgYSBzZW5zaWJsZSBQQVRILiAgSWYgeW91IGhhdmUgbXVsdGlwbGUgZ2l0IHZlcnNpb25zCkBAIC0xNjksNyArMTc2LDcgQEAKICAgIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHVwZ3JhZGUgZ2l0d2ViLiBZb3UgY2FuIGFkZCAnc2l0ZScgc3R5bGVzaGVldAogICAgZm9yIGV4YW1wbGUgYnkgdXNpbmcKICAgICAgIHB1c2ggQHN0eWxlc2hlZXRzLCAiZ2l0d2ViLXNpdGUuY3NzIjsKLSAgIGluIGdpdHdlYiBjb25maWcgZmlsZS4KKyAgIGluIHRoZSBnaXR3ZWIgY29uZmlnIGZpbGUuCiAgKiAkbG9nb191cmwsICRsb2dvX2xhYmVsCiAgICBVUkkgYW5kIGxhYmVsICh0aXRsZSkgb2YgR0lUIGxvZ28gbGluayAob3IgeW91ciBzaXRlIGxvZ28sIGlmIHlvdSBjaG9vc2UKICAgIHRvIHVzZSBkaWZmZXJlbnQgbG9nbyBpbWFnZSkuIEJ5IGRlZmF1bHQgdGhleSBwb2ludCB0byBnaXQgaG9tZXBhZ2U7CkBAIC0xOTEsMTIgKzE5OCwxMiBAQAogICAgRGVmYXVsdCBtaW1ldHlwZSBmb3IgYmxvYl9wbGFpbiAocmF3KSB2aWV3LCBpZiBtaW1ldHlwZSBjaGVja2luZwogICAgZG9lc24ndCByZXN1bHQgaW4gc29tZSBvdGhlciB0eXBlOyBieSBkZWZhdWx0ICd0ZXh0L3BsYWluJy4KICAqICRkZWZhdWx0X3RleHRfcGxhaW5fY2hhcnNldAotICAgRGVmYXVsdCBjaGFyc2V0IGZvciB0ZXh0IGZpbGVzLiBJZiBub3Qgc2V0LCB3ZWIgc2Vyd2VyIGNvbmZpZ3VyYXRpb24KKyAgIERlZmF1bHQgY2hhcnNldCBmb3IgdGV4dCBmaWxlcy4gSWYgbm90IHNldCwgd2ViIHNlcnZlciBjb25maWd1cmF0aW9uCiAgICB3b3VsZCBiZSB1c2VkLgogICogJG1pbWV0eXBlc19maWxlCiAgICBGaWxlIHRvIHVzZSBmb3IgKGZpbGVuYW1lIGV4dGVuc2lvbiBiYXNlZCkgZ3Vlc3Npbmcgb2YgTUlNRSB0eXBlcyBiZWZvcmUKLSAgIHRyeWluZyAvZXRjL21pbWUudHlwZXMuIFBhdGgsIGlmIHJlbGF0aXZlLCBpcyB0YWtlbiBjdXJyZW50bHkgYXMgdGFrZW4KLSAgIHJlbGF0aXZlIHRvIGN1cnJlbnQgZ2l0IHJlcG9zaXRveS4KKyAgIHRyeWluZyAvZXRjL21pbWUudHlwZXMuIFBhdGgsIGlmIHJlbGF0aXZlLCBpcyB0YWtlbiBjdXJyZW50bHkgYXMKKyAgIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGdpdCByZXBvc2l0b3J5LgogICogJGZhbGxiYWNrX2VuY29kaW5nCiAgICBHaXR3ZWIgYXNzdW1lcyB0aGlzIGNoYXJzZXQgaWYgbGluZSBjb250YWlucyBub24tVVRGLTggY2hhcmFjdGVycy4KICAgIEZhbGxiYWNrIGRlY29kaW5nIGlzIHVzZWQgd2l0aG91dCBlcnJvciBjaGVja2luZywgc28gaXQgY2FuIGJlIGV2ZW4KQEAgLTIyNSwxNCArMjMyLDE0IEBACiAgICBzaW5nbGUgbGluZSBkZXNjcmlwdGlvbiBvZiBhIHByb2plY3QgKG9mIGEgcmVwb3NpdG9yeSkuIFBsYWluIHRleHQgZmlsZTsKICAgIEhUTUwgd2lsbCBiZSBlc2NhcGVkLiBCeSBkZWZhdWx0IHNldCB0bwogICAgICBVbm5hbWVkIHJlcG9zaXRvcnk7IGVkaXQgdGhpcyBmaWxlIHRvIG5hbWUgaXQgZm9yIGdpdHdlYi4KLSAgIGZyb20gdGhlIHRlbXBsYXRlIGR1cmluZyBjcmVhdGluZyByZXBvc2l0b3J5LiBZb3UgY2FuIHVzZQorICAgZnJvbSB0aGUgdGVtcGxhdGUgZHVyaW5nIHJlcG9zaXRvcnkgY3JlYXRpb24uIFlvdSBjYW4gdXNlIHRoZQogICAgZ2l0d2ViLmRlc2NyaXB0aW9uIHJlcG8gY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgYnV0IHRoZSBmaWxlIHRha2VzCi0gICBwcmVjZW5kZW5jZS4KKyAgIHByZWNlZGVuY2UuCiAgKiBjbG9uZXVybCAob3IgbXVsdGlwbGUtdmFsdWVkIGdpdHdlYi51cmwpCiAgICBGaWxlIHdpdGggcmVwb3NpdG9yeSBVUkwgKHVzZWQgZm9yIGNsb25lIGFuZCBmZXRjaCksIG9uZSBwZXIgbGluZS4KICAgIERpc3BsYXllZCBpbiB0aGUgcHJvamVjdCBzdW1tYXJ5IHBhZ2UuIFlvdSBjYW4gdXNlIG11bHRpcGxlLXZhbHVlZAogICAgZ2l0d2ViLnVybCByZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgZm9yIHRoYXQsIGJ1dCB0aGUgZmlsZQotICAgdGFrZXMgcHJlY2VuZGVuY2UuCisgICB0YWtlcyBwcmVjZWRlbmNlLgogICogZ2l0d2ViLm93bmVyCiAgICBZb3UgY2FuIHVzZSB0aGUgZ2l0d2ViLm93bmVyIHJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byBzZXQKICAgIHJlcG9zaXRvcnkncyBvd25lci4gSXQgaXMgZGlzcGxheWVkIGluIHRoZSBwcm9qZWN0IGxpc3QgYW5kIHN1bW1hcnkKQEAgLTI0OCwxMiArMjU1LDE1IEBACiBJZiB5b3Ugd2FudCB0byBoYXZlIG9uZSBVUkwgZm9yIGJvdGggZ2l0d2ViIGFuZCB5b3VyIGh0dHA6Ly8KIHJlcG9zaXRvcmllcywgeW91IGNhbiBjb25maWd1cmUgYXBhY2hlIGxpa2UgdGhpczoKIAotPFZpcnR1YWxIb3N0IHd3dzo4MD4KLSAgICBTZXJ2ZXJOYW1lIGdpdC5kb21haW4ub3JnCis8VmlydHVhbEhvc3QgKjo4MD4KKyAgICBTZXJ2ZXJOYW1lIGdpdC5leGFtcGxlLm9yZwogICAgIERvY3VtZW50Um9vdCAvcHViL2dpdAotICAgIFJld3JpdGVFbmdpbmUgb24KLSAgICBSZXdyaXRlUnVsZSBeLyguKlwuZ2l0Lyg/IS8/KGluZm98b2JqZWN0c3xyZWZzKSkuKik/JCAvY2dpLWJpbi9naXR3ZWIuY2dpJXtSRVFVRVNUX1VSSX0gIFtMLFBUXQogICAgIFNldEVudglHSVRXRUJfQ09ORklHCS9ldGMvZ2l0d2ViLmNvbmYKKyAgICBSZXdyaXRlRW5naW5lIG9uCisgICAgIyBtYWtlIHRoZSBmcm9udCBwYWdlIGFuIGludGVybmFsIHJld3JpdGUgdG8gdGhlIGdpdHdlYiBzY3JpcHQKKyAgICBSZXdyaXRlUnVsZSBeLyQgIC9jZ2ktYmluL2dpdHdlYi5jZ2kKKyAgICAjIG1ha2UgYWNjZXNzIGZvciAiZHVtYiBjbGllbnRzIiB3b3JrCisgICAgUmV3cml0ZVJ1bGUgXi8oLipcLmdpdC8oPyEvPyhIRUFEfGluZm98b2JqZWN0c3xyZWZzKSkuKik/JCAvY2dpLWJpbi9naXR3ZWIuY2dpJXtSRVFVRVNUX1VSSX0gIFtMLFBUXQogPC9WaXJ0dWFsSG9zdD4KIAogVGhlIGFib3ZlIGNvbmZpZ3VyYXRpb24gZXhwZWN0cyB5b3VyIHB1YmxpYyByZXBvc2l0b3JpZXMgdG8gbGl2ZSB1bmRlcgpAQCAtMjY5LDYgKzI3OSwxMyBAQAogZ2l0d2ViLmNnaSkuICBMb29rIGF0IHRoZSBjb21tZW50cyBpbiB0aGF0IGZpbGUgZm9yIGluZm9ybWF0aW9uIG9uCiB3aGljaCB2YXJpYWJsZXMgYW5kIHdoYXQgdGhleSBtZWFuLgogCitJZiB5b3UgdXNlIHRoZSByZXdyaXRlIHJ1bGVzIGZyb20gdGhlIGV4YW1wbGUgeW91J2xsIGxpa2VseSBhbHNvIG5lZWQKK3NvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmcgaW4geW91ciBnaXR3ZWIuY29uZiAob3IgZ2l0d2ViX2NvbmZpZy5wZXJsKSBmaWxlOgorCisgIEBzdHlsZXNoZWV0cyA9ICgiL3NvbWUvYWJzb2x1dGUvcGF0aC9naXR3ZWIuY3NzIik7CisgICRteV91cmkgPSAiLyI7CisgICRob21lX2xpbmsgPSAiLyI7CisKIAogT3JpZ2luYWxseSB3cml0dGVuIGJ5OgogICBLYXkgU2lldmVycyA8a2F5LnNpZXZlcnNAdnJmeS5vcmc+CmRpZmYgLS1naXQgYS9naXR3ZWIvZ2l0d2ViLmNzcyBiL2dpdHdlYi9naXR3ZWIuY3NzCmluZGV4IDQ0NmExYzMuLmFhMGVlY2EgMTAwNjQ0Ci0tLSBhL2dpdHdlYi9naXR3ZWIuY3NzCisrKyBiL2dpdHdlYi9naXR3ZWIuY3NzCkBAIC00NjQsNiArNDY0LDE0IEBACiAJYmFja2dyb3VuZC1jb2xvcjogI2VlNTUwMDsKIH0KIAorYS5yc3NfbG9nby5nZW5lcmljIHsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjZmY4ODAwOworfQorCithLnJzc19sb2dvLmdlbmVyaWM6aG92ZXIgeworCWJhY2tncm91bmQtY29sb3I6ICNlZTc3MDA7Cit9CisKIHNwYW4ucmVmcyBzcGFuIHsKIAlwYWRkaW5nOiAwcHggNHB4OwogCWZvbnQtc2l6ZTogNzAlOwpkaWZmIC0tZ2l0IGEvZ2l0d2ViL2dpdHdlYi5wZXJsIGIvZ2l0d2ViL2dpdHdlYi5wZXJsCmluZGV4IGYzN2I2ODcuLmY4OGNlMzUgMTAwNzU1Ci0tLSBhL2dpdHdlYi9naXR3ZWIucGVybAorKysgYi9naXR3ZWIvZ2l0d2ViLnBlcmwKQEAgLTM2OSwxMCArMzY5LDE1IEBACiB9CiAKIG91ciAkR0lUV0VCX0NPTkZJRyA9ICRFTlZ7J0dJVFdFQl9DT05GSUcnfSB8fCAiKytHSVRXRUJfQ09ORklHKysiOwotZG8gJEdJVFdFQl9DT05GSUcgaWYgLWUgJEdJVFdFQl9DT05GSUc7CitpZiAoLWUgJEdJVFdFQl9DT05GSUcpIHsKKwlkbyAkR0lUV0VCX0NPTkZJRzsKK30gZWxzZSB7CisJb3VyICRHSVRXRUJfQ09ORklHX1NZU1RFTSA9ICRFTlZ7J0dJVFdFQl9DT05GSUdfU1lTVEVNJ30gfHwgIisrR0lUV0VCX0NPTkZJR19TWVNURU0rKyI7CisJZG8gJEdJVFdFQl9DT05GSUdfU1lTVEVNIGlmIC1lICRHSVRXRUJfQ09ORklHX1NZU1RFTTsKK30KIAogIyB2ZXJzaW9uIG9mIHRoZSBjb3JlIGdpdCBiaW5hcnkKLW91ciAkZ2l0X3ZlcnNpb24gPSBxeCgkR0lUIC0tdmVyc2lvbikgPX4gbS9naXQgdmVyc2lvbiAoLiopJC8gPyAkMSA6ICJ1bmtub3duIjsKK291ciAkZ2l0X3ZlcnNpb24gPSBxeCgiJEdJVCIgLS12ZXJzaW9uKSA9fiBtL2dpdCB2ZXJzaW9uICguKikkLyA/ICQxIDogInVua25vd24iOwogCiAkcHJvamVjdHNfbGlzdCB8fD0gJHByb2plY3Ryb290OwogCkBAIC01ODcsNyArNTkyLDcgQEAKICMjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICMjIGFjdGlvbiBsaW5rcwogCi1zdWIgaHJlZiglKSB7CitzdWIgaHJlZiAoJSkgewogCW15ICVwYXJhbXMgPSBAXzsKIAkjIGRlZmF1bHQgaXMgdG8gdXNlIC1hYnNvbHV0ZSB1cmwoKSBpLmUuICRteV91cmkKIAlteSAkaHJlZiA9ICRwYXJhbXN7LWZ1bGx9ID8gJG15X3VybCA6ICRteV91cmk7CkBAIC04NjEsNiArODY2LDEwIEBACiAJbXkgJGFkZF9sZW4gPSBzaGlmdCB8fCAxMDsKIAlteSAkd2hlcmUgPSBzaGlmdCB8fCAncmlnaHQnOyAjICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0JwogCisJIyBNYWtlIHN1cmUgcGVybCBrbm93cyBpdCBpcyB1dGY4IGVuY29kZWQgc28gd2UgZG9uJ3QKKwkjIGN1dCBpbiB0aGUgbWlkZGxlIG9mIGEgdXRmOCBtdWx0aWJ5dGUgY2hhci4KKwkkc3RyID0gdG9fdXRmOCgkc3RyKTsKKwogCSMgYWxsb3cgb25seSAkbGVuIGNoYXJzLCBidXQgZG9uJ3QgY3V0IGEgd29yZCBpZiBpdCB3b3VsZCBmaXQgaW4gJGFkZF9sZW4KIAkjIGlmIGl0IGRvZXNuJ3QgZml0LCBjdXQgaXQgaWYgaXQncyBzdGlsbCBsb25nZXIgdGhhbiB0aGUgZG90cyB3ZSB3b3VsZCBhZGQKIAkjIHJlbW92ZSBjaG9wcGVkIGNoYXJhY3RlciBlbnRpdGllcyBlbnRpcmVseQpAQCAtMTQ0Myw2ICsxNDUyLDQ2IEBACiAJfQogfQogCisjIyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisjIyBmdW5jdGlvbnMgcmV0dXJuaW5nIHZhbHVlcyB0byBiZSBwYXNzZWQsIHBlcmhhcHMgYWZ0ZXIgc29tZQorIyMgdHJhbnNmb3JtYXRpb24sIHRvIG90aGVyIGZ1bmN0aW9uczsgZS5nLiByZXR1cm5pbmcgYXJndW1lbnRzIHRvIGhyZWYoKQorCisjIHJldHVybnMgaGFzaCB0byBiZSBwYXNzZWQgdG8gaHJlZiB0byBnZW5lcmF0ZSBnaXR3ZWIgVVJMCisjIGluIC10aXRsZSBrZXkgaXQgcmV0dXJucyBkZXNjcmlwdGlvbiBvZiBsaW5rCitzdWIgZ2V0X2ZlZWRfaW5mbyB7CisJbXkgJGZvcm1hdCA9IHNoaWZ0IHx8ICdBdG9tJzsKKwlteSAlcmVzID0gKGFjdGlvbiA9PiBsYygkZm9ybWF0KSk7CisKKwkjIGZlZWQgbGlua3MgYXJlIHBvc3NpYmxlIG9ubHkgZm9yIHByb2plY3Qgdmlld3MKKwlyZXR1cm4gdW5sZXNzIChkZWZpbmVkICRwcm9qZWN0KTsKKwkjIHNvbWUgdmlld3Mgc2hvdWxkIGxpbmsgdG8gT1BNTCwgb3IgdG8gZ2VuZXJpYyBwcm9qZWN0IGZlZWQsCisJIyBvciBkb24ndCBoYXZlIHNwZWNpZmljIGZlZWQgeWV0IChzbyB0aGV5IHNob3VsZCB1c2UgZ2VuZXJpYykKKwlyZXR1cm4gaWYgKCRhY3Rpb24gPX4gL14oPzp0YWdzfGhlYWRzfGZvcmtzfHRhZ3xzZWFyY2gpJC94KTsKKworCW15ICRicmFuY2g7CisJIyBicmFuY2hlcyByZWZzIHVzZXMgJ3JlZnMvaGVhZHMvJyBwcmVmaXggKGZ1bGxuYW1lKSB0byBkaWZmZXJlbnRpYXRlCisJIyBmcm9tIHRhZyBsaW5rczsgdGhpcyBhbHNvIG1ha2VzIHBvc3NpYmxlIHRvIGRldGVjdCBicmFuY2ggbGlua3MKKwlpZiAoKGRlZmluZWQgJGhhc2hfYmFzZSAmJiAkaGFzaF9iYXNlID1+IG0hXnJlZnMvaGVhZHMvKC4qKSQhKSB8fAorCSAgICAoZGVmaW5lZCAkaGFzaCAgICAgICYmICRoYXNoICAgICAgPX4gbSFecmVmcy9oZWFkcy8oLiopJCEpKSB7CisJCSRicmFuY2ggPSAkMTsKKwl9CisJIyBmaW5kIGxvZyB0eXBlIGZvciBmZWVkIGRlc2NyaXB0aW9uICh0aXRsZSkKKwlteSAkdHlwZSA9ICdsb2cnOworCWlmIChkZWZpbmVkICRmaWxlX25hbWUpIHsKKwkJJHR5cGUgID0gImhpc3Rvcnkgb2YgJGZpbGVfbmFtZSI7CisJCSR0eXBlIC49ICIvIiBpZiAoJGFjdGlvbiBlcSAndHJlZScpOworCQkkdHlwZSAuPSAiIG9uICckYnJhbmNoJyIgaWYgKGRlZmluZWQgJGJyYW5jaCk7CisJfSBlbHNlIHsKKwkJJHR5cGUgPSAibG9nIG9mICRicmFuY2giIGlmIChkZWZpbmVkICRicmFuY2gpOworCX0KKworCSRyZXN7LXRpdGxlfSA9ICR0eXBlOworCSRyZXN7J2hhc2gnfSA9IChkZWZpbmVkICRicmFuY2ggPyAicmVmcy9oZWFkcy8kYnJhbmNoIiA6IHVuZGVmKTsKKwkkcmVzeydmaWxlX25hbWUnfSA9ICRmaWxlX25hbWU7CisKKwlyZXR1cm4gJXJlczsKK30KKwogIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyMgZ2l0IHV0aWxpdHkgc3Vicm91dGluZXMsIGludm9raW5nIGdpdCBjb21tYW5kcwogCkBAIC0xNDUxLDkgKzE1MDAsMTMgQEAKIAlyZXR1cm4gJEdJVCwgJy0tZ2l0LWRpcj0nLiRnaXRfZGlyOwogfQogCi0jIHJldHVybnMgcGF0aCB0byB0aGUgY29yZSBnaXQgZXhlY3V0YWJsZSBhbmQgdGhlIC0tZ2l0LWRpciBwYXJhbWV0ZXIgYXMgc3RyaW5nCi1zdWIgZ2l0X2NtZF9zdHIgewotCXJldHVybiBqb2luKCcgJywgZ2l0X2NtZCgpKTsKKyMgcXVvdGUgdGhlIGdpdmVuIGFyZ3VtZW50cyBmb3IgcGFzc2luZyB0aGVtIHRvIHRoZSBzaGVsbAorIyBxdW90ZV9jb21tYW5kKCJjb21tYW5kIiwgImFyZyAxIiwgImFyZyB3aXRoICcgYW5kICEgY2hhcmFjdGVycyIpCisjID0+ICInY29tbWFuZCcgJ2FyZyAxJyAnYXJnIHdpdGggJ1wnJyBhbmQgJ1whJyBjaGFyYWN0ZXJzJyIKKyMgVHJ5IHRvIGF2b2lkIHVzaW5nIHRoaXMgZnVuY3Rpb24gd2hlcmV2ZXIgcG9zc2libGUuCitzdWIgcXVvdGVfY29tbWFuZCB7CisJcmV0dXJuIGpvaW4oJyAnLAorCQkgICAgbWFwKCB7IG15ICRhID0gJF87ICRhID1+IHMvKFsnIV0pLydcXCQxJy9nOyAiJyRhJyIgfSBAXyApKTsKIH0KIAogIyBnZXQgSEVBRCByZWYgb2YgZ2l2ZW4gcHJvamVjdCBhcyBoYXNoCkBAIC0yMTA5LDQ5ICsyMTYyLDYgQEAKIAlyZXR1cm4gd2FudGFycmF5ID8gQGNvcyA6IFxAY29zOwogfQogCi0jIHBhcnNlIHJlZiBmcm9tIHJlZl9maWxlLCBnaXZlbiBieSByZWZfaWQsIHdpdGggZ2l2ZW4gdHlwZQotc3ViIHBhcnNlX3JlZiB7Ci0JbXkgJHJlZl9maWxlID0gc2hpZnQ7Ci0JbXkgJHJlZl9pZCA9IHNoaWZ0OwotCW15ICR0eXBlID0gc2hpZnQgfHwgZ2l0X2dldF90eXBlKCRyZWZfaWQpOwotCW15ICVyZWZfaXRlbTsKLQotCSRyZWZfaXRlbXsndHlwZSd9ID0gJHR5cGU7Ci0JJHJlZl9pdGVteydpZCd9ID0gJHJlZl9pZDsKLQkkcmVmX2l0ZW17J2Vwb2NoJ30gPSAwOwotCSRyZWZfaXRlbXsnYWdlJ30gPSAidW5rbm93biI7Ci0JaWYgKCR0eXBlIGVxICJ0YWciKSB7Ci0JCW15ICV0YWcgPSBwYXJzZV90YWcoJHJlZl9pZCk7Ci0JCSRyZWZfaXRlbXsnY29tbWVudCd9ID0gJHRhZ3snY29tbWVudCd9OwotCQlpZiAoJHRhZ3sndHlwZSd9IGVxICJjb21taXQiKSB7Ci0JCQlteSAlY28gPSBwYXJzZV9jb21taXQoJHRhZ3snb2JqZWN0J30pOwotCQkJJHJlZl9pdGVteydlcG9jaCd9ID0gJGNveydjb21taXR0ZXJfZXBvY2gnfTsKLQkJCSRyZWZfaXRlbXsnYWdlJ30gPSAkY297J2FnZV9zdHJpbmcnfTsKLQkJfSBlbHNpZiAoZGVmaW5lZCgkdGFneydlcG9jaCd9KSkgewotCQkJbXkgJGFnZSA9IHRpbWUgLSAkdGFneydlcG9jaCd9OwotCQkJJHJlZl9pdGVteydlcG9jaCd9ID0gJHRhZ3snZXBvY2gnfTsKLQkJCSRyZWZfaXRlbXsnYWdlJ30gPSBhZ2Vfc3RyaW5nKCRhZ2UpOwotCQl9Ci0JCSRyZWZfaXRlbXsncmVmdHlwZSd9ID0gJHRhZ3sndHlwZSd9OwotCQkkcmVmX2l0ZW17J25hbWUnfSA9ICR0YWd7J25hbWUnfTsKLQkJJHJlZl9pdGVteydyZWZpZCd9ID0gJHRhZ3snb2JqZWN0J307Ci0JfSBlbHNpZiAoJHR5cGUgZXEgImNvbW1pdCIpewotCQlteSAlY28gPSBwYXJzZV9jb21taXQoJHJlZl9pZCk7Ci0JCSRyZWZfaXRlbXsncmVmdHlwZSd9ID0gImNvbW1pdCI7Ci0JCSRyZWZfaXRlbXsnbmFtZSd9ID0gJHJlZl9maWxlOwotCQkkcmVmX2l0ZW17J3RpdGxlJ30gPSAkY297J3RpdGxlJ307Ci0JCSRyZWZfaXRlbXsncmVmaWQnfSA9ICRyZWZfaWQ7Ci0JCSRyZWZfaXRlbXsnZXBvY2gnfSA9ICRjb3snY29tbWl0dGVyX2Vwb2NoJ307Ci0JCSRyZWZfaXRlbXsnYWdlJ30gPSAkY297J2FnZV9zdHJpbmcnfTsKLQl9IGVsc2UgewotCQkkcmVmX2l0ZW17J3JlZnR5cGUnfSA9ICR0eXBlOwotCQkkcmVmX2l0ZW17J25hbWUnfSA9ICRyZWZfZmlsZTsKLQkJJHJlZl9pdGVteydyZWZpZCd9ID0gJHJlZl9pZDsKLQl9Ci0KLQlyZXR1cm4gJXJlZl9pdGVtOwotfQotCiAjIHBhcnNlIGxpbmUgb2YgZ2l0LWRpZmYtdHJlZSAicmF3IiBvdXRwdXQKIHN1YiBwYXJzZV9kaWZmdHJlZV9yYXdfbGluZSB7CiAJbXkgJGxpbmUgPSBzaGlmdDsKQEAgLTI0MzIsOCArMjQ0Miw3IEBACiAJcmV0dXJuICRkZWZhdWx0X2Jsb2JfcGxhaW5fbWltZXR5cGUgdW5sZXNzICRmZDsKIAogCWlmICgtVCAkZmQpIHsKLQkJcmV0dXJuICd0ZXh0L3BsYWluJyAuCi0JCSAgICAgICAoJGRlZmF1bHRfdGV4dF9wbGFpbl9jaGFyc2V0ID8gJzsgY2hhcnNldD0nLiRkZWZhdWx0X3RleHRfcGxhaW5fY2hhcnNldCA6ICcnKTsKKwkJcmV0dXJuICd0ZXh0L3BsYWluJzsKIAl9IGVsc2lmICghICRmaWxlbmFtZSkgewogCQlyZXR1cm4gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7CiAJfSBlbHNpZiAoJGZpbGVuYW1lID1+IG0vXC5wbmckL2kpIHsKQEAgLTI0NDcsNiArMjQ1NiwxNyBAQAogCX0KIH0KIAorc3ViIGJsb2JfY29udGVudHR5cGUgeworCW15ICgkZmQsICRmaWxlX25hbWUsICR0eXBlKSA9IEBfOworCisJJHR5cGUgfHw9IGJsb2JfbWltZXR5cGUoJGZkLCAkZmlsZV9uYW1lKTsKKwlpZiAoJHR5cGUgZXEgJ3RleHQvcGxhaW4nICYmIGRlZmluZWQgJGRlZmF1bHRfdGV4dF9wbGFpbl9jaGFyc2V0KSB7CisJCSR0eXBlIC49ICI7IGNoYXJzZXQ9JGRlZmF1bHRfdGV4dF9wbGFpbl9jaGFyc2V0IjsKKwl9CisKKwlyZXR1cm4gJHR5cGU7Cit9CisKICMjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICMjIGZ1bmN0aW9ucyBwcmludGluZyBIVE1MOiBoZWFkZXIsIGZvb3RlciwgZXJyb3IgcGFnZQogCkBAIC0yNTA1LDMwICsyNTI1LDQ5IEBACiAJCX0KIAl9CiAJaWYgKGRlZmluZWQgJHByb2plY3QpIHsKLQkJcHJpbnRmKCc8bGluayByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IiVzIGxvZyBSU1MgZmVlZCIgJy4KLQkJICAgICAgICdocmVmPSIlcyIgdHlwZT0iYXBwbGljYXRpb24vcnNzK3htbCIgLz4nLiJcbiIsCi0JCSAgICAgICBlc2NfcGFyYW0oJHByb2plY3QpLCBocmVmKGFjdGlvbj0+InJzcyIpKTsKLQkJcHJpbnRmKCc8bGluayByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IiVzIGxvZyBSU1MgZmVlZCAobm8gbWVyZ2VzKSIgJy4KLQkJICAgICAgICdocmVmPSIlcyIgdHlwZT0iYXBwbGljYXRpb24vcnNzK3htbCIgLz4nLiJcbiIsCi0JCSAgICAgICBlc2NfcGFyYW0oJHByb2plY3QpLCBocmVmKGFjdGlvbj0+InJzcyIsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX29wdGlvbnM9PiItLW5vLW1lcmdlcyIpKTsKLQkJcHJpbnRmKCc8bGluayByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IiVzIGxvZyBBdG9tIGZlZWQiICcuCi0JCSAgICAgICAnaHJlZj0iJXMiIHR5cGU9ImFwcGxpY2F0aW9uL2F0b20reG1sIiAvPicuIlxuIiwKLQkJICAgICAgIGVzY19wYXJhbSgkcHJvamVjdCksIGhyZWYoYWN0aW9uPT4iYXRvbSIpKTsKLQkJcHJpbnRmKCc8bGluayByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IiVzIGxvZyBBdG9tIGZlZWQgKG5vIG1lcmdlcykiICcuCi0JCSAgICAgICAnaHJlZj0iJXMiIHR5cGU9ImFwcGxpY2F0aW9uL2F0b20reG1sIiAvPicuIlxuIiwKLQkJICAgICAgIGVzY19wYXJhbSgkcHJvamVjdCksIGhyZWYoYWN0aW9uPT4iYXRvbSIsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX29wdGlvbnM9PiItLW5vLW1lcmdlcyIpKTsKKwkJbXkgJWhyZWZfcGFyYW1zID0gZ2V0X2ZlZWRfaW5mbygpOworCQlpZiAoIWV4aXN0cyAkaHJlZl9wYXJhbXN7Jy10aXRsZSd9KSB7CisJCQkkaHJlZl9wYXJhbXN7Jy10aXRsZSd9ID0gJ2xvZyc7CisJCX0KKworCQlmb3JlYWNoIG15ICRmb3JtYXQgcXcoUlNTIEF0b20pIHsKKwkJCW15ICR0eXBlID0gbGMoJGZvcm1hdCk7CisJCQlteSAlbGlua19hdHRyID0gKAorCQkJCSctcmVsJyA9PiAnYWx0ZXJuYXRlJywKKwkJCQknLXRpdGxlJyA9PiAiJHByb2plY3QgLSAkaHJlZl9wYXJhbXN7Jy10aXRsZSd9IC0gJGZvcm1hdCBmZWVkIiwKKwkJCQknLXR5cGUnID0+ICJhcHBsaWNhdGlvbi8kdHlwZSt4bWwiCisJCQkpOworCisJCQkkaHJlZl9wYXJhbXN7J2FjdGlvbid9ID0gJHR5cGU7CisJCQkkbGlua19hdHRyeyctaHJlZid9ID0gaHJlZiglaHJlZl9wYXJhbXMpOworCQkJcHJpbnQgIjxsaW5rICIuCisJCQkgICAgICAicmVsPVwiJGxpbmtfYXR0cnsnLXJlbCd9XCIgIi4KKwkJCSAgICAgICJ0aXRsZT1cIiRsaW5rX2F0dHJ7Jy10aXRsZSd9XCIgIi4KKwkJCSAgICAgICJocmVmPVwiJGxpbmtfYXR0cnsnLWhyZWYnfVwiICIuCisJCQkgICAgICAidHlwZT1cIiRsaW5rX2F0dHJ7Jy10eXBlJ31cIiAiLgorCQkJICAgICAgIi8+XG4iOworCisJCQkkaHJlZl9wYXJhbXN7J2V4dHJhX29wdGlvbnMnfSA9ICctLW5vLW1lcmdlcyc7CisJCQkkbGlua19hdHRyeyctaHJlZid9ID0gaHJlZiglaHJlZl9wYXJhbXMpOworCQkJJGxpbmtfYXR0cnsnLXRpdGxlJ30gLj0gJyAobm8gbWVyZ2VzKSc7CisJCQlwcmludCAiPGxpbmsgIi4KKwkJCSAgICAgICJyZWw9XCIkbGlua19hdHRyeyctcmVsJ31cIiAiLgorCQkJICAgICAgInRpdGxlPVwiJGxpbmtfYXR0cnsnLXRpdGxlJ31cIiAiLgorCQkJICAgICAgImhyZWY9XCIkbGlua19hdHRyeyctaHJlZid9XCIgIi4KKwkJCSAgICAgICJ0eXBlPVwiJGxpbmtfYXR0cnsnLXR5cGUnfVwiICIuCisJCQkgICAgICAiLz5cbiI7CisJCX0KKwogCX0gZWxzZSB7CiAJCXByaW50ZignPGxpbmsgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSIlcyBwcm9qZWN0cyBsaXN0IiAnLgotCQkgICAgICAgJ2hyZWY9IiVzIiB0eXBlPSJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Ii8+Jy4iXG4iLAorCQkgICAgICAgJ2hyZWY9IiVzIiB0eXBlPSJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiAvPicuIlxuIiwKIAkJICAgICAgICRzaXRlX25hbWUsIGhyZWYocHJvamVjdD0+dW5kZWYsIGFjdGlvbj0+InByb2plY3RfaW5kZXgiKSk7CiAJCXByaW50ZignPGxpbmsgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSIlcyBwcm9qZWN0cyBmZWVkcyIgJy4KLQkJICAgICAgICdocmVmPSIlcyIgdHlwZT0idGV4dC94LW9wbWwiLz4nLiJcbiIsCisJCSAgICAgICAnaHJlZj0iJXMiIHR5cGU9InRleHQveC1vcG1sIiAvPicuIlxuIiwKIAkJICAgICAgICRzaXRlX25hbWUsIGhyZWYocHJvamVjdD0+dW5kZWYsIGFjdGlvbj0+Im9wbWwiKSk7CiAJfQogCWlmIChkZWZpbmVkICRmYXZpY29uKSB7Ci0JCXByaW50IHFxKDxsaW5rIHJlbD0ic2hvcnRjdXQgaWNvbiIgaHJlZj0iJGZhdmljb24iIHR5cGU9ImltYWdlL3BuZyIvPlxuKTsKKwkJcHJpbnQgcXEoPGxpbmsgcmVsPSJzaG9ydGN1dCBpY29uIiBocmVmPSIkZmF2aWNvbiIgdHlwZT0iaW1hZ2UvcG5nIiAvPlxuKTsKIAl9CiAKIAlwcmludCAiPC9oZWFkPlxuIiAuCkBAIC0yNTU1LDcgKzI1OTQsNyBAQAogCXByaW50ICI8L2Rpdj5cbiI7CiAKIAlteSAoJGhhdmVfc2VhcmNoKSA9IGdpdHdlYl9jaGVja19mZWF0dXJlKCdzZWFyY2gnKTsKLQlpZiAoKGRlZmluZWQgJHByb2plY3QpICYmICgkaGF2ZV9zZWFyY2gpKSB7CisJaWYgKGRlZmluZWQgJHByb2plY3QgJiYgJGhhdmVfc2VhcmNoKSB7CiAJCWlmICghZGVmaW5lZCAkc2VhcmNodGV4dCkgewogCQkJJHNlYXJjaHRleHQgPSAiIjsKIAkJfQpAQCAtMjU3MSwxNiArMjYxMCwxMyBAQAogCQlteSAoJHVzZV9wYXRoaW5mbykgPSBnaXR3ZWJfY2hlY2tfZmVhdHVyZSgncGF0aGluZm8nKTsKIAkJaWYgKCR1c2VfcGF0aGluZm8pIHsKIAkJCSRhY3Rpb24gLj0gIi8iLmVzY191cmwoJHByb2plY3QpOwotCQl9IGVsc2UgewotCQkJJGNnaS0+cGFyYW0oInAiLCAkcHJvamVjdCk7CiAJCX0KLQkJJGNnaS0+cGFyYW0oImEiLCAic2VhcmNoIik7Ci0JCSRjZ2ktPnBhcmFtKCJoIiwgJHNlYXJjaF9oYXNoKTsKIAkJcHJpbnQgJGNnaS0+c3RhcnRmb3JtKC1tZXRob2QgPT4gImdldCIsIC1hY3Rpb24gPT4gJGFjdGlvbikgLgogCQkgICAgICAiPGRpdiBjbGFzcz1cInNlYXJjaFwiPlxuIiAuCi0JCSAgICAgICghJHVzZV9wYXRoaW5mbyAmJiAkY2dpLT5oaWRkZW4oLW5hbWUgPT4gInAiKSAuICJcbiIpIC4KLQkJICAgICAgJGNnaS0+aGlkZGVuKC1uYW1lID0+ICJhIikgLiAiXG4iIC4KLQkJICAgICAgJGNnaS0+aGlkZGVuKC1uYW1lID0+ICJoIikgLiAiXG4iIC4KKwkJICAgICAgKCEkdXNlX3BhdGhpbmZvICYmCisJCSAgICAgICRjZ2ktPmlucHV0KHstbmFtZT0+InAiLCAtdmFsdWU9PiRwcm9qZWN0LCAtdHlwZT0+ImhpZGRlbiJ9KSAuICJcbiIpIC4KKwkJICAgICAgJGNnaS0+aW5wdXQoey1uYW1lPT4iYSIsIC12YWx1ZT0+InNlYXJjaCIsIC10eXBlPT4iaGlkZGVuIn0pIC4gIlxuIiAuCisJCSAgICAgICRjZ2ktPmlucHV0KHstbmFtZT0+ImgiLCAtdmFsdWU9PiRzZWFyY2hfaGFzaCwgLXR5cGU9PiJoaWRkZW4ifSkgLiAiXG4iIC4KIAkJICAgICAgJGNnaS0+cG9wdXBfbWVudSgtbmFtZSA9PiAnc3QnLCAtZGVmYXVsdCA9PiAnY29tbWl0JywKIAkJICAgICAgICAgICAgICAgICAgICAgICAtdmFsdWVzID0+IFsnY29tbWl0JywgJ2dyZXAnLCAnYXV0aG9yJywgJ2NvbW1pdHRlcicsICdwaWNrYXhlJ10pIC4KIAkJICAgICAgJGNnaS0+c3VwKCRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4ic2VhcmNoX2hlbHAiKX0sICI/IikpIC4KQEAgLTI1OTYsMjMgKzI2MzIsMzUgQEAKIH0KIAogc3ViIGdpdF9mb290ZXJfaHRtbCB7CisJbXkgJGZlZWRfY2xhc3MgPSAncnNzX2xvZ28nOworCiAJcHJpbnQgIjxkaXYgY2xhc3M9XCJwYWdlX2Zvb3RlclwiPlxuIjsKIAlpZiAoZGVmaW5lZCAkcHJvamVjdCkgewogCQlteSAkZGVzY3IgPSBnaXRfZ2V0X3Byb2plY3RfZGVzY3JpcHRpb24oJHByb2plY3QpOwogCQlpZiAoZGVmaW5lZCAkZGVzY3IpIHsKIAkJCXByaW50ICI8ZGl2IGNsYXNzPVwicGFnZV9mb290ZXJfdGV4dFwiPiIgLiBlc2NfaHRtbCgkZGVzY3IpIC4gIjwvZGl2PlxuIjsKIAkJfQotCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InJzcyIpLAotCQkgICAgICAgICAgICAgIC1jbGFzcyA9PiAicnNzX2xvZ28ifSwgIlJTUyIpIC4gIiAiOwotCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImF0b20iKSwKLQkJICAgICAgICAgICAgICAtY2xhc3MgPT4gInJzc19sb2dvIn0sICJBdG9tIikgLiAiXG4iOworCisJCW15ICVocmVmX3BhcmFtcyA9IGdldF9mZWVkX2luZm8oKTsKKwkJaWYgKCElaHJlZl9wYXJhbXMpIHsKKwkJCSRmZWVkX2NsYXNzIC49ICcgZ2VuZXJpYyc7CisJCX0KKwkJJGhyZWZfcGFyYW1zeyctdGl0bGUnfSB8fD0gJ2xvZyc7CisKKwkJZm9yZWFjaCBteSAkZm9ybWF0IHF3KFJTUyBBdG9tKSB7CisJCQkkaHJlZl9wYXJhbXN7J2FjdGlvbid9ID0gbGMoJGZvcm1hdCk7CisJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKCVocmVmX3BhcmFtcyksCisJCQkgICAgICAgICAgICAgIC10aXRsZSA9PiAiJGhyZWZfcGFyYW1zeyctdGl0bGUnfSAkZm9ybWF0IGZlZWQiLAorCQkJICAgICAgICAgICAgICAtY2xhc3MgPT4gJGZlZWRfY2xhc3N9LCAkZm9ybWF0KS4iXG4iOworCQl9CisKIAl9IGVsc2UgewogCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKHByb2plY3Q9PnVuZGVmLCBhY3Rpb249PiJvcG1sIiksCi0JCSAgICAgICAgICAgICAgLWNsYXNzID0+ICJyc3NfbG9nbyJ9LCAiT1BNTCIpIC4gIiAiOworCQkgICAgICAgICAgICAgIC1jbGFzcyA9PiAkZmVlZF9jbGFzc30sICJPUE1MIikgLiAiICI7CiAJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYocHJvamVjdD0+dW5kZWYsIGFjdGlvbj0+InByb2plY3RfaW5kZXgiKSwKLQkJICAgICAgICAgICAgICAtY2xhc3MgPT4gInJzc19sb2dvIn0sICJUWFQiKSAuICJcbiI7CisJCSAgICAgICAgICAgICAgLWNsYXNzID0+ICRmZWVkX2NsYXNzfSwgIlRYVCIpIC4gIlxuIjsKIAl9Ci0JcHJpbnQgIjwvZGl2PlxuIiA7CisJcHJpbnQgIjwvZGl2PlxuIjsgIyBjbGFzcz0icGFnZV9mb290ZXIiCiAKIAlpZiAoLWYgJHNpdGVfZm9vdGVyKSB7CiAJCW9wZW4gKG15ICRmZCwgJHNpdGVfZm9vdGVyKTsKQEAgLTQyOTcsNiArNDM0NSw3IEBACiB9CiAKIHN1YiBnaXRfYmxvYl9wbGFpbiB7CisJbXkgJHR5cGUgPSBzaGlmdDsKIAlteSAkZXhwaXJlczsKIAogCWlmICghZGVmaW5lZCAkaGFzaCkgewpAQCAtNDMxMiwxMyArNDM2MSwxMyBAQAogCQkkZXhwaXJlcyA9ICIrMWQiOwogCX0KIAotCW15ICR0eXBlID0gc2hpZnQ7CiAJb3BlbiBteSAkZmQsICItfCIsIGdpdF9jbWQoKSwgImNhdC1maWxlIiwgImJsb2IiLCAkaGFzaAotCQlvciBkaWVfZXJyb3IodW5kZWYsICJDb3VsZG4ndCBjYXQgJGZpbGVfbmFtZSwgJGhhc2giKTsKKwkJb3IgZGllX2Vycm9yKHVuZGVmLCAiT3BlbiBnaXQtY2F0LWZpbGUgYmxvYiAnJGhhc2gnIGZhaWxlZCIpOwogCi0JJHR5cGUgfHw9IGJsb2JfbWltZXR5cGUoJGZkLCAkZmlsZV9uYW1lKTsKKwkjIGNvbnRlbnQtdHlwZSAoY2FuIGluY2x1ZGUgY2hhcnNldCkKKwkkdHlwZSA9IGJsb2JfY29udGVudHR5cGUoJGZkLCAkZmlsZV9uYW1lLCAkdHlwZSk7CiAKLQkjIHNhdmUgYXMgZmlsZW5hbWUsIGV2ZW4gd2hlbiBubyAkZmlsZV9uYW1lIGlzIGdpdmVuCisJIyAic2F2ZSBhcyIgZmlsZW5hbWUsIGV2ZW4gd2hlbiBubyAkZmlsZV9uYW1lIGlzIGdpdmVuCiAJbXkgJHNhdmVfYXMgPSAiJGhhc2giOwogCWlmIChkZWZpbmVkICRmaWxlX25hbWUpIHsKIAkJJHNhdmVfYXMgPSAkZmlsZV9uYW1lOwpAQCAtNDMyNyw5ICs0Mzc2LDkgQEAKIAl9CiAKIAlwcmludCAkY2dpLT5oZWFkZXIoCi0JCS10eXBlID0+ICIkdHlwZSIsCi0JCS1leHBpcmVzPT4kZXhwaXJlcywKLQkJLWNvbnRlbnRfZGlzcG9zaXRpb24gPT4gJ2lubGluZTsgZmlsZW5hbWU9IicgLiAiJHNhdmVfYXMiIC4gJyInKTsKKwkJLXR5cGUgPT4gJHR5cGUsCisJCS1leHBpcmVzID0+ICRleHBpcmVzLAorCQktY29udGVudF9kaXNwb3NpdGlvbiA9PiAnaW5saW5lOyBmaWxlbmFtZT0iJyAuICRzYXZlX2FzIC4gJyInKTsKIAl1bmRlZiAkLzsKIAliaW5tb2RlIFNURE9VVCwgJzpyYXcnOwogCXByaW50IDwkZmQ+OwpAQCAtNDU0NSw3ICs0NTk0LDYgQEAKIAkJJGhhc2ggPSBnaXRfZ2V0X2hlYWRfaGFzaCgkcHJvamVjdCk7CiAJfQogCi0JbXkgJGdpdF9jb21tYW5kID0gZ2l0X2NtZF9zdHIoKTsKIAlteSAkbmFtZSA9ICRwcm9qZWN0OwogCSRuYW1lID1+IHMsKFteL10pLypcLmdpdCQsJDEsOwogCSRuYW1lID0gYmFzZW5hbWUoJG5hbWUpOwpAQCAtNDU1MywxMSArNDYwMSwxMiBAQAogCSRuYW1lID1+IHMvXDA0Ny9cMDQ3XFxcMDQ3XDA0Ny9nOwogCW15ICRjbWQ7CiAJJGZpbGVuYW1lIC49ICItJGhhc2gka25vd25fc25hcHNob3RfZm9ybWF0c3skZm9ybWF0fXsnc3VmZml4J30iOwotCSRjbWQgPSAiJGdpdF9jb21tYW5kIGFyY2hpdmUgIiAuCi0JCSItLWZvcm1hdD0ka25vd25fc25hcHNob3RfZm9ybWF0c3skZm9ybWF0fXsnZm9ybWF0J30gIiAuCi0JCSItLXByZWZpeD1cJyRuYW1lXCcvICRoYXNoIjsKKwkkY21kID0gcXVvdGVfY29tbWFuZCgKKwkJZ2l0X2NtZCgpLCAnYXJjaGl2ZScsCisJCSItLWZvcm1hdD0ka25vd25fc25hcHNob3RfZm9ybWF0c3skZm9ybWF0fXsnZm9ybWF0J30iLAorCQkiLS1wcmVmaXg9JG5hbWUvIiwgJGhhc2gpOwogCWlmIChleGlzdHMgJGtub3duX3NuYXBzaG90X2Zvcm1hdHN7JGZvcm1hdH17J2NvbXByZXNzb3InfSkgewotCQkkY21kIC49ICcgfCAnIC4gam9pbiAnICcsIEB7JGtub3duX3NuYXBzaG90X2Zvcm1hdHN7JGZvcm1hdH17J2NvbXByZXNzb3InfX07CisJCSRjbWQgLj0gJyB8ICcgLiBxdW90ZV9jb21tYW5kKEB7JGtub3duX3NuYXBzaG90X2Zvcm1hdHN7JGZvcm1hdH17J2NvbXByZXNzb3InfX0pOwogCX0KIAogCXByaW50ICRjZ2ktPmhlYWRlcigKQEAgLTQ3NzAsOCArNDgxOSw4IEBACiAJaWYgKCRoYXNoIHx8ICgkaGFzaF9iYXNlICYmICFkZWZpbmVkICRmaWxlX25hbWUpKSB7CiAJCW15ICRvYmplY3RfaWQgPSAkaGFzaCB8fCAkaGFzaF9iYXNlOwogCi0JCW15ICRnaXRfY29tbWFuZCA9IGdpdF9jbWRfc3RyKCk7Ci0JCW9wZW4gbXkgJGZkLCAiLXwiLCAiJGdpdF9jb21tYW5kIGNhdC1maWxlIC10ICRvYmplY3RfaWQgMj4vZGV2L251bGwiCisJCW9wZW4gbXkgJGZkLCAiLXwiLCBxdW90ZV9jb21tYW5kKAorCQkJZ2l0X2NtZCgpLCAnY2F0LWZpbGUnLCAnLXQnLCAkb2JqZWN0X2lkKSAuICcgMj4gL2Rldi9udWxsJwogCQkJb3IgZGllX2Vycm9yKCc0MDQgTm90IEZvdW5kJywgIk9iamVjdCBkb2VzIG5vdCBleGlzdCIpOwogCQkkdHlwZSA9IDwkZmQ+OwogCQljaG9tcCAkdHlwZTsKZGlmZiAtLWdpdCAiYS9naXR3ZWIvdGVzdC9NXDMwM1wyNDRyY2hlbiIgImIvZ2l0d2ViL3Rlc3QvTVwzMDNcMjQ0cmNoZW4iCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjdhMWQzLi4wMDAwMDAwCi0tLSAiYS9naXR3ZWIvdGVzdC9NXDMwM1wyNDRyY2hlbiIKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLU3DpHJjaGVuCi1N5HJjaGVuCmRpZmYgLS1naXQgYS9naXR3ZWIvdGVzdC9maWxlIHdpdGggc3BhY2VzIGIvZ2l0d2ViL3Rlc3QvZmlsZSB3aXRoIHNwYWNlcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjEwODU0My4uMDAwMDAwMAotLS0gYS9naXR3ZWIvdGVzdC9maWxlIHdpdGggc3BhY2VzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1UaGlzCi1maWxlbmFtZQotY29udGFpbnMKLXNwYWNlcy4KZGlmZiAtLWdpdCBhL2dpdHdlYi90ZXN0L2ZpbGUrcGx1cytzaWduIGIvZ2l0d2ViL3Rlc3QvZmlsZStwbHVzK3NpZ24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkMDUyNzguLjAwMDAwMDAKLS0tIGEvZ2l0d2ViL3Rlc3QvZmlsZStwbHVzK3NpZ24KKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLVRoaXMKLWZpbGVuYW1lCi1jb250YWlucwotKwotcGx1cwotY2hhcnMuCmRpZmYgLS1naXQgYS9ncmFwaC5jIGIvZ3JhcGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjYzM2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JhcGguYwpAQCAtMCwwICsxLDExMzIgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImdyYXBoLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisKKy8qCisgKiBUT0RPOgorICogLSBBZGQgY29sb3JzIHRvIHRoZSBncmFwaC4KKyAqICAgUGljayBhIGNvbG9yIGZvciBlYWNoIGNvbHVtbiwgYW5kIHByaW50IGFsbCBjaGFyYWN0ZXJzCisgKiAgIGluIHRoYXQgY29sdW1uIHdpdGggdGhlIHNwZWNpZmllZCBjb2xvci4KKyAqCisgKiAtIExpbWl0IHRoZSBudW1iZXIgb2YgY29sdW1ucywgc2ltaWxhciB0byB0aGUgd2F5IGdpdGsgZG9lcy4KKyAqICAgSWYgd2UgcmVhY2ggbW9yZSB0aGFuIGEgc3BlY2lmaWVkIG51bWJlciBvZiBjb2x1bW5zLCBvbWl0CisgKiAgIHNlY3Rpb25zIG9mIHNvbWUgY29sdW1ucy4KKyAqCisgKiAtIFRoZSBvdXRwdXQgZHVyaW5nIHRoZSBHUkFQSF9QUkVfQ09NTUlUIGFuZCBHUkFQSF9DT0xMQVBTSU5HIHN0YXRlcworICogICBjb3VsZCBiZSBtYWRlIG1vcmUgY29tcGFjdCBieSBwcmludGluZyBob3Jpem9udGFsIGxpbmVzLCBpbnN0ZWFkIG9mCisgKiAgIGxvbmcgZGlhZ29uYWwgbGluZXMuICBGb3IgZXhhbXBsZSwgZHVyaW5nIGNvbGxhcHNpbmcsIHNvbWV0aGluZyBsaWtlCisgKiAgIHRoaXM6ICAgICAgICAgIGluc3RlYWQgb2YgdGhpczoKKyAqICAgfCB8IHwgfCB8ICAgICAgfCB8IHwgfCB8CisgKiAgIHwgfF98X3wvICAgICAgIHwgfCB8IHwvCisgKiAgIHwvfCB8IHwgICAgICAgIHwgfCB8L3wKKyAqICAgfCB8IHwgfCAgICAgICAgfCB8L3wgfAorICogICAgICAgICAgICAgICAgICB8L3wgfCB8CisgKiAgICAgICAgICAgICAgICAgIHwgfCB8IHwKKyAqCisgKiAgIElmIHRoZXJlIGFyZSBzZXZlcmFsIHBhcmFsbGVsIGRpYWdvbmFsIGxpbmVzLCB0aGV5IHdpbGwgbmVlZCB0byBiZQorICogICByZXBsYWNlZCB3aXRoIGhvcml6b250YWwgbGluZXMgb24gc3Vic2VxdWVudCByb3dzLgorICovCisKK3N0cnVjdCBjb2x1bW4geworCS8qCisJICogVGhlIHBhcmVudCBjb21taXQgb2YgdGhpcyBjb2x1bW4uCisJICovCisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCS8qCisJICogWFhYOiBPbmNlIHdlIGFkZCBzdXBwb3J0IGZvciBjb2xvcnMsIHN0cnVjdCBjb2x1bW4gY291bGQgYWxzbworCSAqIGNvbnRhaW4gdGhlIGNvbG9yIG9mIGl0cyBicmFuY2ggbGluZS4KKwkgKi8KK307CisKK2VudW0gZ3JhcGhfc3RhdGUgeworCUdSQVBIX1BBRERJTkcsCisJR1JBUEhfU0tJUCwKKwlHUkFQSF9QUkVfQ09NTUlULAorCUdSQVBIX0NPTU1JVCwKKwlHUkFQSF9QT1NUX01FUkdFLAorCUdSQVBIX0NPTExBUFNJTkcKK307CisKK3N0cnVjdCBnaXRfZ3JhcGggeworCS8qCisJICogVGhlIGNvbW1pdCBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkCisJICovCisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCS8qIFRoZSByZXYtaW5mbyB1c2VkIGZvciB0aGUgY3VycmVudCB0cmF2ZXJzYWwgKi8KKwlzdHJ1Y3QgcmV2X2luZm8gKnJldnM7CisJLyoKKwkgKiBUaGUgbnVtYmVyIG9mIGludGVyZXN0aW5nIHBhcmVudHMgdGhhdCB0aGlzIGNvbW1pdCBoYXMuCisJICoKKwkgKiBOb3RlIHRoYXQgdGhpcyBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIGFjdHVhbCBudW1iZXIgb2YgcGFyZW50cy4KKwkgKiBUaGlzIGNvdW50IGV4Y2x1ZGVzIHBhcmVudHMgdGhhdCB3b24ndCBiZSBwcmludGVkIGluIHRoZSBncmFwaAorCSAqIG91dHB1dCwgYXMgZGV0ZXJtaW5lZCBieSBncmFwaF9pc19pbnRlcmVzdGluZygpLgorCSAqLworCWludCBudW1fcGFyZW50czsKKwkvKgorCSAqIFRoZSB3aWR0aCBvZiB0aGUgZ3JhcGggb3V0cHV0IGZvciB0aGlzIGNvbW1pdC4KKwkgKiBBbGwgcm93cyBmb3IgdGhpcyBjb21taXQgYXJlIHBhZGRlZCB0byB0aGlzIHdpZHRoLCBzbyB0aGF0CisJICogbWVzc2FnZXMgcHJpbnRlZCBhZnRlciB0aGUgZ3JhcGggb3V0cHV0IGFyZSBhbGlnbmVkLgorCSAqLworCWludCB3aWR0aDsKKwkvKgorCSAqIFRoZSBuZXh0IGV4cGFuc2lvbiByb3cgdG8gcHJpbnQKKwkgKiB3aGVuIHN0YXRlIGlzIEdSQVBIX1BSRV9DT01NSVQKKwkgKi8KKwlpbnQgZXhwYW5zaW9uX3JvdzsKKwkvKgorCSAqIFRoZSBjdXJyZW50IG91dHB1dCBzdGF0ZS4KKwkgKiBUaGlzIHRlbGxzIHVzIHdoYXQga2luZCBvZiBsaW5lIGdyYXBoX25leHRfbGluZSgpIHNob3VsZCBvdXRwdXQuCisJICovCisJZW51bSBncmFwaF9zdGF0ZSBzdGF0ZTsKKwkvKgorCSAqIFRoZSBvdXRwdXQgc3RhdGUgZm9yIHRoZSBwcmV2aW91cyBsaW5lIG9mIG91dHB1dC4KKwkgKiBUaGlzIGlzIHByaW1hcmlseSB1c2VkIHRvIGRldGVybWluZSBob3cgdGhlIGZpcnN0IG1lcmdlIGxpbmUKKwkgKiBzaG91bGQgYXBwZWFyLCBiYXNlZCBvbiB0aGUgbGFzdCBsaW5lIG9mIHRoZSBwcmV2aW91cyBjb21taXQuCisJICovCisJZW51bSBncmFwaF9zdGF0ZSBwcmV2X3N0YXRlOworCS8qCisJICogVGhlIGluZGV4IG9mIHRoZSBjb2x1bW4gdGhhdCByZWZlcnMgdG8gdGhpcyBjb21taXQuCisJICoKKwkgKiBJZiBub25lIG9mIHRoZSBpbmNvbWluZyBjb2x1bW5zIHJlZmVyIHRvIHRoaXMgY29tbWl0LAorCSAqIHRoaXMgd2lsbCBiZSBlcXVhbCB0byBudW1fY29sdW1ucy4KKwkgKi8KKwlpbnQgY29tbWl0X2luZGV4OworCS8qCisJICogVGhlIGNvbW1pdF9pbmRleCBmb3IgdGhlIHByZXZpb3VzbHkgZGlzcGxheWVkIGNvbW1pdC4KKwkgKgorCSAqIFRoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgaG93IHRoZSBmaXJzdCBsaW5lIG9mIGEgbWVyZ2UKKwkgKiBncmFwaCBvdXRwdXQgc2hvdWxkIGFwcGVhciwgYmFzZWQgb24gdGhlIGxhc3QgbGluZSBvZiB0aGUKKwkgKiBwcmV2aW91cyBjb21taXQuCisJICovCisJaW50IHByZXZfY29tbWl0X2luZGV4OworCS8qCisJICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbHVtbnMgdGhhdCBjYW4gYmUgc3RvcmVkIGluIHRoZSBjb2x1bW5zCisJICogYW5kIG5ld19jb2x1bW5zIGFycmF5cy4gIFRoaXMgaXMgYWxzbyBoYWxmIHRoZSBudW1iZXIgb2YgZW50cmllcworCSAqIHRoYXQgY2FuIGJlIHN0b3JlZCBpbiB0aGUgbWFwcGluZyBhbmQgbmV3X21hcHBpbmcgYXJyYXlzLgorCSAqLworCWludCBjb2x1bW5fY2FwYWNpdHk7CisJLyoKKwkgKiBUaGUgbnVtYmVyIG9mIGNvbHVtbnMgKGFsc28gY2FsbGVkICJicmFuY2ggbGluZXMiIGluIHNvbWUgcGxhY2VzKQorCSAqLworCWludCBudW1fY29sdW1uczsKKwkvKgorCSAqIFRoZSBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgbmV3X2NvbHVtbnMgYXJyYXkKKwkgKi8KKwlpbnQgbnVtX25ld19jb2x1bW5zOworCS8qCisJICogVGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBtYXBwaW5nIGFycmF5CisJICovCisJaW50IG1hcHBpbmdfc2l6ZTsKKwkvKgorCSAqIFRoZSBjb2x1bW4gc3RhdGUgYmVmb3JlIHdlIG91dHB1dCB0aGUgY3VycmVudCBjb21taXQuCisJICovCisJc3RydWN0IGNvbHVtbiAqY29sdW1uczsKKwkvKgorCSAqIFRoZSBuZXcgY29sdW1uIHN0YXRlIGFmdGVyIHdlIG91dHB1dCB0aGUgY3VycmVudCBjb21taXQuCisJICogT25seSB2YWxpZCB3aGVuIHN0YXRlIGlzIEdSQVBIX0NPTExBUFNJTkcuCisJICovCisJc3RydWN0IGNvbHVtbiAqbmV3X2NvbHVtbnM7CisJLyoKKwkgKiBBbiBhcnJheSB0aGF0IHRyYWNrcyB0aGUgY3VycmVudCBzdGF0ZSBvZiBlYWNoCisJICogY2hhcmFjdGVyIGluIHRoZSBvdXRwdXQgbGluZSBkdXJpbmcgc3RhdGUgR1JBUEhfQ09MTEFQU0lORy4KKwkgKiBFYWNoIGVudHJ5IGlzIC0xIGlmIHRoaXMgY2hhcmFjdGVyIGlzIGVtcHR5LCBvciBhIG5vbi1uZWdhdGl2ZQorCSAqIGludGVnZXIgaWYgdGhlIGNoYXJhY3RlciBjb250YWlucyBhIGJyYW5jaCBsaW5lLiAgVGhlIHZhbHVlIG9mCisJICogdGhlIGludGVnZXIgaW5kaWNhdGVzIHRoZSB0YXJnZXQgcG9zaXRpb24gZm9yIHRoaXMgYnJhbmNoIGxpbmUuCisJICogKEkuZS4sIHRoaXMgYXJyYXkgbWFwcyB0aGUgY3VycmVudCBjb2x1bW4gcG9zaXRpb25zIHRvIHRoZWlyCisJICogZGVzaXJlZCBwb3NpdGlvbnMuKQorCSAqCisJICogVGhlIG1heGltdW0gY2FwYWNpdHkgb2YgdGhpcyBhcnJheSBpcyBhbHdheXMKKwkgKiBzaXplb2YoaW50KSAqIDIgKiBjb2x1bW5fY2FwYWNpdHkuCisJICovCisJaW50ICptYXBwaW5nOworCS8qCisJICogQSB0ZW1wb3JhcnkgYXJyYXkgZm9yIGNvbXB1dGluZyB0aGUgbmV4dCBtYXBwaW5nIHN0YXRlCisJICogd2hpbGUgd2UgYXJlIG91dHB1dHRpbmcgYSBtYXBwaW5nIGxpbmUuICBUaGlzIGlzIHN0b3JlZCBhcyBwYXJ0CisJICogb2YgdGhlIGdpdF9ncmFwaCBzaW1wbHkgc28gd2UgZG9uJ3QgaGF2ZSB0byBhbGxvY2F0ZSBhIG5ldworCSAqIHRlbXBvcmFyeSBhcnJheSBlYWNoIHRpbWUgd2UgaGF2ZSB0byBvdXRwdXQgYSBjb2xsYXBzaW5nIGxpbmUuCisJICovCisJaW50ICpuZXdfbWFwcGluZzsKK307CisKK3N0cnVjdCBnaXRfZ3JhcGggKmdyYXBoX2luaXQoc3RydWN0IHJldl9pbmZvICpvcHQpCit7CisJc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGggPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgZ2l0X2dyYXBoKSk7CisJZ3JhcGgtPmNvbW1pdCA9IE5VTEw7CisJZ3JhcGgtPnJldnMgPSBvcHQ7CisJZ3JhcGgtPm51bV9wYXJlbnRzID0gMDsKKwlncmFwaC0+ZXhwYW5zaW9uX3JvdyA9IDA7CisJZ3JhcGgtPnN0YXRlID0gR1JBUEhfUEFERElORzsKKwlncmFwaC0+cHJldl9zdGF0ZSA9IEdSQVBIX1BBRERJTkc7CisJZ3JhcGgtPmNvbW1pdF9pbmRleCA9IDA7CisJZ3JhcGgtPnByZXZfY29tbWl0X2luZGV4ID0gMDsKKwlncmFwaC0+bnVtX2NvbHVtbnMgPSAwOworCWdyYXBoLT5udW1fbmV3X2NvbHVtbnMgPSAwOworCWdyYXBoLT5tYXBwaW5nX3NpemUgPSAwOworCisJLyoKKwkgKiBBbGxvY2F0ZSBhIHJlYXNvbmFibHkgbGFyZ2UgZGVmYXVsdCBudW1iZXIgb2YgY29sdW1ucworCSAqIFdlJ2xsIGF1dG9tYXRpY2FsbHkgZ3JvdyBjb2x1bW5zIGxhdGVyIGlmIHdlIG5lZWQgbW9yZSByb29tLgorCSAqLworCWdyYXBoLT5jb2x1bW5fY2FwYWNpdHkgPSAzMDsKKwlncmFwaC0+Y29sdW1ucyA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBjb2x1bW4pICoKKwkJCQkgZ3JhcGgtPmNvbHVtbl9jYXBhY2l0eSk7CisJZ3JhcGgtPm5ld19jb2x1bW5zID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGNvbHVtbikgKgorCQkJCSAgICAgZ3JhcGgtPmNvbHVtbl9jYXBhY2l0eSk7CisJZ3JhcGgtPm1hcHBpbmcgPSB4bWFsbG9jKHNpemVvZihpbnQpICogMiAqIGdyYXBoLT5jb2x1bW5fY2FwYWNpdHkpOworCWdyYXBoLT5uZXdfbWFwcGluZyA9IHhtYWxsb2Moc2l6ZW9mKGludCkgKiAyICogZ3JhcGgtPmNvbHVtbl9jYXBhY2l0eSk7CisKKwlyZXR1cm4gZ3JhcGg7Cit9CisKK3ZvaWQgZ3JhcGhfcmVsZWFzZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCkKK3sKKwlmcmVlKGdyYXBoLT5jb2x1bW5zKTsKKwlmcmVlKGdyYXBoLT5uZXdfY29sdW1ucyk7CisJZnJlZShncmFwaC0+bWFwcGluZyk7CisJZnJlZShncmFwaCk7Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoX3VwZGF0ZV9zdGF0ZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgZW51bSBncmFwaF9zdGF0ZSBzKQoreworCWdyYXBoLT5wcmV2X3N0YXRlID0gZ3JhcGgtPnN0YXRlOworCWdyYXBoLT5zdGF0ZSA9IHM7Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoX2Vuc3VyZV9jYXBhY2l0eShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgaW50IG51bV9jb2x1bW5zKQoreworCWlmIChncmFwaC0+Y29sdW1uX2NhcGFjaXR5ID49IG51bV9jb2x1bW5zKQorCQlyZXR1cm47CisKKwlkbyB7CisJCWdyYXBoLT5jb2x1bW5fY2FwYWNpdHkgKj0gMjsKKwl9IHdoaWxlIChncmFwaC0+Y29sdW1uX2NhcGFjaXR5IDwgbnVtX2NvbHVtbnMpOworCisJZ3JhcGgtPmNvbHVtbnMgPSB4cmVhbGxvYyhncmFwaC0+Y29sdW1ucywKKwkJCQkgIHNpemVvZihzdHJ1Y3QgY29sdW1uKSAqCisJCQkJICBncmFwaC0+Y29sdW1uX2NhcGFjaXR5KTsKKwlncmFwaC0+bmV3X2NvbHVtbnMgPSB4cmVhbGxvYyhncmFwaC0+bmV3X2NvbHVtbnMsCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBjb2x1bW4pICoKKwkJCQkgICAgICBncmFwaC0+Y29sdW1uX2NhcGFjaXR5KTsKKwlncmFwaC0+bWFwcGluZyA9IHhyZWFsbG9jKGdyYXBoLT5tYXBwaW5nLAorCQkJCSAgc2l6ZW9mKGludCkgKiAyICogZ3JhcGgtPmNvbHVtbl9jYXBhY2l0eSk7CisJZ3JhcGgtPm5ld19tYXBwaW5nID0geHJlYWxsb2MoZ3JhcGgtPm5ld19tYXBwaW5nLAorCQkJCSAgICAgIHNpemVvZihpbnQpICogMiAqIGdyYXBoLT5jb2x1bW5fY2FwYWNpdHkpOworfQorCisvKgorICogUmV0dXJucyAxIGlmIHRoZSBjb21taXQgd2lsbCBiZSBwcmludGVkIGluIHRoZSBncmFwaCBvdXRwdXQsCisgKiBhbmQgMCBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgZ3JhcGhfaXNfaW50ZXJlc3Rpbmcoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwkvKgorCSAqIElmIHJldnMtPmJvdW5kYXJ5IGlzIHNldCwgY29tbWl0cyB3aG9zZSBjaGlsZHJlbiBoYXZlCisJICogYmVlbiBzaG93biBhcmUgYWx3YXlzIGludGVyZXN0aW5nLCBldmVuIGlmIHRoZXkgaGF2ZSB0aGUKKwkgKiBVTklOVEVSRVNUSU5HIG9yIFRSRUVTQU1FIGZsYWdzIHNldC4KKwkgKi8KKwlpZiAoZ3JhcGgtPnJldnMgJiYgZ3JhcGgtPnJldnMtPmJvdW5kYXJ5KSB7CisJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIENISUxEX1NIT1dOKQorCQkJcmV0dXJuIDE7CisJfQorCisJLyoKKwkgKiBVbmludGVyZXN0aW5nIGFuZCBwcnVuZWQgY29tbWl0cyB3b24ndCBiZSBwcmludGVkCisJICovCisJcmV0dXJuIChjb21taXQtPm9iamVjdC5mbGFncyAmIChVTklOVEVSRVNUSU5HIHwgVFJFRVNBTUUpKSA/IDAgOiAxOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdF9saXN0ICpuZXh0X2ludGVyZXN0aW5nX3BhcmVudChzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwKKwkJCQkJCSAgIHN0cnVjdCBjb21taXRfbGlzdCAqb3JpZykKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3Q7CisKKwkvKgorCSAqIElmIHJldnMtPmZpcnN0X3BhcmVudF9vbmx5IGlzIHNldCwgb25seSB0aGUgZmlyc3QKKwkgKiBwYXJlbnQgaXMgaW50ZXJlc3RpbmcuICBOb25lIG9mIHRoZSBvdGhlcnMgYXJlLgorCSAqLworCWlmIChncmFwaC0+cmV2cy0+Zmlyc3RfcGFyZW50X29ubHkpCisJCXJldHVybiBOVUxMOworCisJLyoKKwkgKiBSZXR1cm4gdGhlIG5leHQgaW50ZXJlc3RpbmcgY29tbWl0IGFmdGVyIG9yaWcKKwkgKi8KKwlmb3IgKGxpc3QgPSBvcmlnLT5uZXh0OyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkgeworCQlpZiAoZ3JhcGhfaXNfaW50ZXJlc3RpbmcoZ3JhcGgsIGxpc3QtPml0ZW0pKQorCQkJcmV0dXJuIGxpc3Q7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKmZpcnN0X2ludGVyZXN0aW5nX3BhcmVudChzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMgPSBncmFwaC0+Y29tbWl0LT5wYXJlbnRzOworCisJLyoKKwkgKiBJZiB0aGlzIGNvbW1pdCBoYXMgbm8gcGFyZW50cywgaWdub3JlIGl0CisJICovCisJaWYgKCFwYXJlbnRzKQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogSWYgdGhlIGZpcnN0IHBhcmVudCBpcyBpbnRlcmVzdGluZywgcmV0dXJuIGl0CisJICovCisJaWYgKGdyYXBoX2lzX2ludGVyZXN0aW5nKGdyYXBoLCBwYXJlbnRzLT5pdGVtKSkKKwkJcmV0dXJuIHBhcmVudHM7CisKKwkvKgorCSAqIE90aGVyd2lzZSwgY2FsbCBuZXh0X2ludGVyZXN0aW5nX3BhcmVudCgpIHRvIGdldAorCSAqIHRoZSBuZXh0IGludGVyZXN0aW5nIHBhcmVudAorCSAqLworCXJldHVybiBuZXh0X2ludGVyZXN0aW5nX3BhcmVudChncmFwaCwgcGFyZW50cyk7Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoX2luc2VydF9pbnRvX25ld19jb2x1bW5zKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLAorCQkJCQkgIHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCQkJICBpbnQgKm1hcHBpbmdfaW5kZXgpCit7CisJaW50IGk7CisKKwkvKgorCSAqIElmIHRoZSBjb21taXQgaXMgYWxyZWFkeSBpbiB0aGUgbmV3X2NvbHVtbnMgbGlzdCwgd2UgZG9uJ3QgbmVlZCB0bworCSAqIGFkZCBpdC4gIEp1c3QgdXBkYXRlIHRoZSBtYXBwaW5nIGNvcnJlY3RseS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZ3JhcGgtPm51bV9uZXdfY29sdW1uczsgaSsrKSB7CisJCWlmIChncmFwaC0+bmV3X2NvbHVtbnNbaV0uY29tbWl0ID09IGNvbW1pdCkgeworCQkJZ3JhcGgtPm1hcHBpbmdbKm1hcHBpbmdfaW5kZXhdID0gaTsKKwkJCSptYXBwaW5nX2luZGV4ICs9IDI7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKgorCSAqIFRoaXMgY29tbWl0IGlzbid0IGFscmVhZHkgaW4gbmV3X2NvbHVtbnMuICBBZGQgaXQuCisJICovCisJZ3JhcGgtPm5ld19jb2x1bW5zW2dyYXBoLT5udW1fbmV3X2NvbHVtbnNdLmNvbW1pdCA9IGNvbW1pdDsKKwlncmFwaC0+bWFwcGluZ1sqbWFwcGluZ19pbmRleF0gPSBncmFwaC0+bnVtX25ld19jb2x1bW5zOworCSptYXBwaW5nX2luZGV4ICs9IDI7CisJZ3JhcGgtPm51bV9uZXdfY29sdW1ucysrOworfQorCitzdGF0aWMgdm9pZCBncmFwaF91cGRhdGVfd2lkdGgoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsCisJCQkgICAgICAgaW50IGlzX2NvbW1pdF9pbl9leGlzdGluZ19jb2x1bW5zKQoreworCS8qCisJICogQ29tcHV0ZSB0aGUgd2lkdGggbmVlZGVkIHRvIGRpc3BsYXkgdGhlIGdyYXBoIGZvciB0aGlzIGNvbW1pdC4KKwkgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIHdpZHRoIG5lZWRlZCBmb3IgYW55IHJvdy4gIEFsbCBvdGhlciByb3dzCisJICogd2lsbCBiZSBwYWRkZWQgdG8gdGhpcyB3aWR0aC4KKwkgKgorCSAqIENvbXB1dGUgdGhlIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSB3aWRlc3Qgcm93OgorCSAqIENvdW50IGVhY2ggZXhpc3RpbmcgY29sdW1uIChncmFwaC0+bnVtX2NvbHVtbnMpLCBhbmQgZWFjaCBuZXcKKwkgKiBjb2x1bW4gYWRkZWQgYnkgdGhpcyBjb21taXQuCisJICovCisJaW50IG1heF9jb2xzID0gZ3JhcGgtPm51bV9jb2x1bW5zICsgZ3JhcGgtPm51bV9wYXJlbnRzOworCisJLyoKKwkgKiBFdmVuIGlmIHRoZSBjdXJyZW50IGNvbW1pdCBoYXMgbm8gcGFyZW50cyB0byBiZSBwcmludGVkLCBpdAorCSAqIHN0aWxsIHRha2VzIHVwIGEgY29sdW1uIGZvciBpdHNlbGYuCisJICovCisJaWYgKGdyYXBoLT5udW1fcGFyZW50cyA8IDEpCisJCW1heF9jb2xzKys7CisKKwkvKgorCSAqIFdlIGFkZGVkIGEgY29sdW1uIGZvciB0aGUgdGhlIGN1cnJlbnQgY29tbWl0IGFzIHBhcnQgb2YKKwkgKiBncmFwaC0+bnVtX3BhcmVudHMuICBJZiB0aGUgY3VycmVudCBjb21taXQgd2FzIGFscmVhZHkgaW4KKwkgKiBncmFwaC0+Y29sdW1ucywgdGhlbiB3ZSBoYXZlIGRvdWJsZSBjb3VudGVkIGl0LgorCSAqLworCWlmIChpc19jb21taXRfaW5fZXhpc3RpbmdfY29sdW1ucykKKwkJbWF4X2NvbHMtLTsKKworCS8qCisJICogRWFjaCBjb2x1bW4gdGFrZXMgdXAgMiBzcGFjZXMKKwkgKi8KKwlncmFwaC0+d2lkdGggPSBtYXhfY29scyAqIDI7Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoX3VwZGF0ZV9jb2x1bW5zKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50OworCXN0cnVjdCBjb2x1bW4gKnRtcF9jb2x1bW5zOworCWludCBtYXhfbmV3X2NvbHVtbnM7CisJaW50IG1hcHBpbmdfaWR4OworCWludCBpLCBzZWVuX3RoaXMsIGlzX2NvbW1pdF9pbl9jb2x1bW5zOworCisJLyoKKwkgKiBTd2FwIGdyYXBoLT5jb2x1bW5zIHdpdGggZ3JhcGgtPm5ld19jb2x1bW5zCisJICogZ3JhcGgtPmNvbHVtbnMgY29udGFpbnMgdGhlIHN0YXRlIGZvciB0aGUgcHJldmlvdXMgY29tbWl0LAorCSAqIGFuZCBuZXdfY29sdW1ucyBub3cgY29udGFpbnMgdGhlIHN0YXRlIGZvciBvdXIgY29tbWl0LgorCSAqCisJICogV2UnbGwgcmUtdXNlIHRoZSBvbGQgY29sdW1ucyBhcnJheSBhcyBzdG9yYWdlIHRvIGNvbXB1dGUgdGhlIG5ldworCSAqIGNvbHVtbnMgbGlzdCBmb3IgdGhlIGNvbW1pdCBhZnRlciB0aGlzIG9uZS4KKwkgKi8KKwl0bXBfY29sdW1ucyA9IGdyYXBoLT5jb2x1bW5zOworCWdyYXBoLT5jb2x1bW5zID0gZ3JhcGgtPm5ld19jb2x1bW5zOworCWdyYXBoLT5udW1fY29sdW1ucyA9IGdyYXBoLT5udW1fbmV3X2NvbHVtbnM7CisKKwlncmFwaC0+bmV3X2NvbHVtbnMgPSB0bXBfY29sdW1uczsKKwlncmFwaC0+bnVtX25ld19jb2x1bW5zID0gMDsKKworCS8qCisJICogTm93IHVwZGF0ZSBuZXdfY29sdW1ucyBhbmQgbWFwcGluZyB3aXRoIHRoZSBpbmZvcm1hdGlvbiBmb3IgdGhlCisJICogY29tbWl0IGFmdGVyIHRoaXMgb25lLgorCSAqCisJICogRmlyc3QsIG1ha2Ugc3VyZSB3ZSBoYXZlIGVub3VnaCByb29tLiAgQXQgbW9zdCwgdGhlcmUgd2lsbAorCSAqIGJlIGdyYXBoLT5udW1fY29sdW1ucyArIGdyYXBoLT5udW1fcGFyZW50cyBjb2x1bW5zIGZvciB0aGUgbmV4dAorCSAqIGNvbW1pdC4KKwkgKi8KKwltYXhfbmV3X2NvbHVtbnMgPSBncmFwaC0+bnVtX2NvbHVtbnMgKyBncmFwaC0+bnVtX3BhcmVudHM7CisJZ3JhcGhfZW5zdXJlX2NhcGFjaXR5KGdyYXBoLCBtYXhfbmV3X2NvbHVtbnMpOworCisJLyoKKwkgKiBDbGVhciBvdXQgZ3JhcGgtPm1hcHBpbmcKKwkgKi8KKwlncmFwaC0+bWFwcGluZ19zaXplID0gMiAqIG1heF9uZXdfY29sdW1uczsKKwlmb3IgKGkgPSAwOyBpIDwgZ3JhcGgtPm1hcHBpbmdfc2l6ZTsgaSsrKQorCQlncmFwaC0+bWFwcGluZ1tpXSA9IC0xOworCisJLyoKKwkgKiBQb3B1bGF0ZSBncmFwaC0+bmV3X2NvbHVtbnMgYW5kIGdyYXBoLT5tYXBwaW5nCisJICoKKwkgKiBTb21lIG9mIHRoZSBwYXJlbnRzIG9mIHRoaXMgY29tbWl0IG1heSBhbHJlYWR5IGJlIGluCisJICogZ3JhcGgtPmNvbHVtbnMuICBJZiBzbywgZ3JhcGgtPm5ld19jb2x1bW5zIHNob3VsZCBvbmx5IGNvbnRhaW4gYQorCSAqIHNpbmdsZSBlbnRyeSBmb3IgZWFjaCBzdWNoIGNvbW1pdC4gIGdyYXBoLT5tYXBwaW5nIHNob3VsZAorCSAqIGNvbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgZWFjaCBjdXJyZW50IGJyYW5jaCBsaW5lIGlzCisJICogc3VwcG9zZWQgdG8gZW5kIHVwIGFmdGVyIHRoZSBjb2xsYXBzaW5nIGlzIHBlcmZvcm1lZC4KKwkgKi8KKwlzZWVuX3RoaXMgPSAwOworCW1hcHBpbmdfaWR4ID0gMDsKKwlpc19jb21taXRfaW5fY29sdW1ucyA9IDE7CisJZm9yIChpID0gMDsgaSA8PSBncmFwaC0+bnVtX2NvbHVtbnM7IGkrKykgeworCQlzdHJ1Y3QgY29tbWl0ICpjb2xfY29tbWl0OworCQlpZiAoaSA9PSBncmFwaC0+bnVtX2NvbHVtbnMpIHsKKwkJCWlmIChzZWVuX3RoaXMpCisJCQkJYnJlYWs7CisJCQlpc19jb21taXRfaW5fY29sdW1ucyA9IDA7CisJCQljb2xfY29tbWl0ID0gZ3JhcGgtPmNvbW1pdDsKKwkJfSBlbHNlIHsKKwkJCWNvbF9jb21taXQgPSBncmFwaC0+Y29sdW1uc1tpXS5jb21taXQ7CisJCX0KKworCQlpZiAoY29sX2NvbW1pdCA9PSBncmFwaC0+Y29tbWl0KSB7CisJCQlpbnQgb2xkX21hcHBpbmdfaWR4ID0gbWFwcGluZ19pZHg7CisJCQlzZWVuX3RoaXMgPSAxOworCQkJZ3JhcGgtPmNvbW1pdF9pbmRleCA9IGk7CisJCQlmb3IgKHBhcmVudCA9IGZpcnN0X2ludGVyZXN0aW5nX3BhcmVudChncmFwaCk7CisJCQkgICAgIHBhcmVudDsKKwkJCSAgICAgcGFyZW50ID0gbmV4dF9pbnRlcmVzdGluZ19wYXJlbnQoZ3JhcGgsIHBhcmVudCkpIHsKKwkJCQlncmFwaF9pbnNlcnRfaW50b19uZXdfY29sdW1ucyhncmFwaCwKKwkJCQkJCQkgICAgICBwYXJlbnQtPml0ZW0sCisJCQkJCQkJICAgICAgJm1hcHBpbmdfaWR4KTsKKwkJCX0KKwkJCS8qCisJCQkgKiBXZSBhbHdheXMgbmVlZCB0byBpbmNyZW1lbnQgbWFwcGluZ19pZHggYnkgYXQKKwkJCSAqIGxlYXN0IDIsIGV2ZW4gaWYgaXQgaGFzIG5vIGludGVyZXN0aW5nIHBhcmVudHMuCisJCQkgKiBUaGUgY3VycmVudCBjb21taXQgYWx3YXlzIHRha2VzIHVwIGF0IGxlYXN0IDIKKwkJCSAqIHNwYWNlcy4KKwkJCSAqLworCQkJaWYgKG1hcHBpbmdfaWR4ID09IG9sZF9tYXBwaW5nX2lkeCkKKwkJCQltYXBwaW5nX2lkeCArPSAyOworCQl9IGVsc2UgeworCQkJZ3JhcGhfaW5zZXJ0X2ludG9fbmV3X2NvbHVtbnMoZ3JhcGgsIGNvbF9jb21taXQsCisJCQkJCQkgICAgICAmbWFwcGluZ19pZHgpOworCQl9CisJfQorCisJLyoKKwkgKiBTaHJpbmsgbWFwcGluZ19zaXplIHRvIGJlIHRoZSBtaW5pbXVtIG5lY2Vzc2FyeQorCSAqLworCXdoaWxlIChncmFwaC0+bWFwcGluZ19zaXplID4gMSAmJgorCSAgICAgICBncmFwaC0+bWFwcGluZ1tncmFwaC0+bWFwcGluZ19zaXplIC0gMV0gPCAwKQorCQlncmFwaC0+bWFwcGluZ19zaXplLS07CisKKwkvKgorCSAqIENvbXB1dGUgZ3JhcGgtPndpZHRoIGZvciB0aGlzIGNvbW1pdAorCSAqLworCWdyYXBoX3VwZGF0ZV93aWR0aChncmFwaCwgaXNfY29tbWl0X2luX2NvbHVtbnMpOworfQorCit2b2lkIGdyYXBoX3VwZGF0ZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50OworCisJLyoKKwkgKiBTZXQgdGhlIG5ldyBjb21taXQKKwkgKi8KKwlncmFwaC0+Y29tbWl0ID0gY29tbWl0OworCisJLyoKKwkgKiBDb3VudCBob3cgbWFueSBpbnRlcmVzdGluZyBwYXJlbnRzIHRoaXMgY29tbWl0IGhhcworCSAqLworCWdyYXBoLT5udW1fcGFyZW50cyA9IDA7CisJZm9yIChwYXJlbnQgPSBmaXJzdF9pbnRlcmVzdGluZ19wYXJlbnQoZ3JhcGgpOworCSAgICAgcGFyZW50OworCSAgICAgcGFyZW50ID0gbmV4dF9pbnRlcmVzdGluZ19wYXJlbnQoZ3JhcGgsIHBhcmVudCkpCisJeworCQlncmFwaC0+bnVtX3BhcmVudHMrKzsKKwl9CisKKwkvKgorCSAqIFN0b3JlIHRoZSBvbGQgY29tbWl0X2luZGV4IGluIHByZXZfY29tbWl0X2luZGV4LgorCSAqIGdyYXBoX3VwZGF0ZV9jb2x1bW5zKCkgd2lsbCB1cGRhdGUgZ3JhcGgtPmNvbW1pdF9pbmRleCBmb3IgdGhpcworCSAqIGNvbW1pdC4KKwkgKi8KKwlncmFwaC0+cHJldl9jb21taXRfaW5kZXggPSBncmFwaC0+Y29tbWl0X2luZGV4OworCisJLyoKKwkgKiBDYWxsIGdyYXBoX3VwZGF0ZV9jb2x1bW5zKCkgdG8gdXBkYXRlCisJICogY29sdW1ucywgbmV3X2NvbHVtbnMsIGFuZCBtYXBwaW5nLgorCSAqLworCWdyYXBoX3VwZGF0ZV9jb2x1bW5zKGdyYXBoKTsKKworCWdyYXBoLT5leHBhbnNpb25fcm93ID0gMDsKKworCS8qCisJICogVXBkYXRlIGdyYXBoLT5zdGF0ZS4KKwkgKiBOb3RlIHRoYXQgd2UgZG9uJ3QgY2FsbCBncmFwaF91cGRhdGVfc3RhdGUoKSBoZXJlLCBzaW5jZQorCSAqIHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIGdyYXBoLT5wcmV2X3N0YXRlLiAgTm8gbGluZSBmb3IKKwkgKiBncmFwaC0+c3RhdGUgd2FzIGV2ZXIgcHJpbnRlZC4KKwkgKgorCSAqIElmIHRoZSBwcmV2aW91cyBjb21taXQgZGlkbid0IGdldCB0byB0aGUgR1JBUEhfUEFERElORyBzdGF0ZSwKKwkgKiBpdCBuZXZlciBmaW5pc2hlZCBpdHMgb3V0cHV0LiAgR290byBHUkFQSF9TS0lQLCB0byBwcmludCBvdXQKKwkgKiBhIGxpbmUgdG8gaW5kaWNhdGUgdGhhdCBwb3J0aW9uIG9mIHRoZSBncmFwaCBpcyBtaXNzaW5nLgorCSAqCisJICogSWYgdGhlcmUgYXJlIDMgb3IgbW9yZSBwYXJlbnRzLCB3ZSBtYXkgbmVlZCB0byBwcmludCBleHRyYSByb3dzCisJICogYmVmb3JlIHRoZSBjb21taXQsIHRvIGV4cGFuZCB0aGUgYnJhbmNoIGxpbmVzIGFyb3VuZCBpdCBhbmQgbWFrZQorCSAqIHJvb20gZm9yIGl0LiAgV2UgbmVlZCB0byBkbyB0aGlzIG9ubHkgaWYgdGhlcmUgaXMgYSBicmFuY2ggcm93CisJICogKG9yIG1vcmUpIHRvIHRoZSByaWdodCBvZiB0aGlzIGNvbW1pdC4KKwkgKgorCSAqIElmIHRoZXJlIGFyZSBsZXNzIHRoYW4gMyBwYXJlbnRzLCB3ZSBjYW4gaW1tZWRpYXRlbHkgcHJpbnQgdGhlCisJICogY29tbWl0IGxpbmUuCisJICovCisJaWYgKGdyYXBoLT5zdGF0ZSAhPSBHUkFQSF9QQURESU5HKQorCQlncmFwaC0+c3RhdGUgPSBHUkFQSF9TS0lQOworCWVsc2UgaWYgKGdyYXBoLT5udW1fcGFyZW50cyA+PSAzICYmCisJCSBncmFwaC0+Y29tbWl0X2luZGV4IDwgKGdyYXBoLT5udW1fY29sdW1ucyAtIDEpKQorCQlncmFwaC0+c3RhdGUgPSBHUkFQSF9QUkVfQ09NTUlUOworCWVsc2UKKwkJZ3JhcGgtPnN0YXRlID0gR1JBUEhfQ09NTUlUOworfQorCitzdGF0aWMgaW50IGdyYXBoX2lzX21hcHBpbmdfY29ycmVjdChzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCkKK3sKKwlpbnQgaTsKKworCS8qCisJICogVGhlIG1hcHBpbmcgaXMgdXAgdG8gZGF0ZSBpZiBlYWNoIGVudHJ5IGlzIGF0IGl0cyB0YXJnZXQsCisJICogb3IgaXMgMSBncmVhdGVyIHRoYW4gaXRzIHRhcmdldC4KKwkgKiAoSWYgaXQgaXMgMSBncmVhdGVyIHRoYW4gdGhlIHRhcmdldCwgJy8nIHdpbGwgYmUgcHJpbnRlZCwgc28gaXQKKwkgKiB3aWxsIGxvb2sgY29ycmVjdCBvbiB0aGUgbmV4dCByb3cuKQorCSAqLworCWZvciAoaSA9IDA7IGkgPCBncmFwaC0+bWFwcGluZ19zaXplOyBpKyspIHsKKwkJaW50IHRhcmdldCA9IGdyYXBoLT5tYXBwaW5nW2ldOworCQlpZiAodGFyZ2V0IDwgMCkKKwkJCWNvbnRpbnVlOworCQlpZiAodGFyZ2V0ID09IChpIC8gMikpCisJCQljb250aW51ZTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoX3BhZF9ob3Jpem9udGFsbHkoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBzdHJidWYgKnNiKQoreworCS8qCisJICogQWRkIGFkZGl0aW9uYWwgc3BhY2VzIHRvIHRoZSBlbmQgb2YgdGhlIHN0cmJ1Ziwgc28gdGhhdCBhbGwKKwkgKiBsaW5lcyBmb3IgYSBwYXJ0aWN1bGFyIGNvbW1pdCBoYXZlIHRoZSBzYW1lIHdpZHRoLgorCSAqCisJICogVGhpcyB3YXksIGZpZWxkcyBwcmludGVkIHRvIHRoZSByaWdodCBvZiB0aGUgZ3JhcGggd2lsbCByZW1haW4KKwkgKiBhbGlnbmVkIGZvciB0aGUgZW50aXJlIGNvbW1pdC4KKwkgKi8KKwlpbnQgZXh0cmE7CisJaWYgKHNiLT5sZW4gPj0gZ3JhcGgtPndpZHRoKQorCQlyZXR1cm47CisKKwlleHRyYSA9IGdyYXBoLT53aWR0aCAtIHNiLT5sZW47CisJc3RyYnVmX2FkZGYoc2IsICIlKnMiLCAoaW50KSBleHRyYSwgIiIpOworfQorCitzdGF0aWMgdm9pZCBncmFwaF9vdXRwdXRfcGFkZGluZ19saW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLAorCQkJCSAgICAgIHN0cnVjdCBzdHJidWYgKnNiKQoreworCWludCBpOworCisJLyoKKwkgKiBXZSBjb3VsZCBjb25jZWl2YWJsZSBiZSBjYWxsZWQgd2l0aCBhIE5VTEwgY29tbWl0CisJICogaWYgb3VyIGNhbGxlciBoYXMgYSBidWcsIGFuZCBpbnZva2VzIGdyYXBoX25leHRfbGluZSgpCisJICogaW1tZWRpYXRlbHkgYWZ0ZXIgZ3JhcGhfaW5pdCgpLCB3aXRob3V0IGZpcnN0IGNhbGxpbmcKKwkgKiBncmFwaF91cGRhdGUoKS4gIFJldHVybiB3aXRob3V0IG91dHB1dHRpbmcgYW55dGhpbmcgaW4gdGhpcworCSAqIGNhc2UuCisJICovCisJaWYgKCFncmFwaC0+Y29tbWl0KQorCQlyZXR1cm47CisKKwkvKgorCSAqIE91dHB1dCBhIHBhZGRpbmcgcm93LCB0aGF0IGxlYXZlcyBhbGwgYnJhbmNoIGxpbmVzIHVuY2hhbmdlZAorCSAqLworCWZvciAoaSA9IDA7IGkgPCBncmFwaC0+bnVtX25ld19jb2x1bW5zOyBpKyspIHsKKwkJc3RyYnVmX2FkZHN0cihzYiwgInwgIik7CisJfQorCisJZ3JhcGhfcGFkX2hvcml6b250YWxseShncmFwaCwgc2IpOworfQorCitzdGF0aWMgdm9pZCBncmFwaF9vdXRwdXRfc2tpcF9saW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwkvKgorCSAqIE91dHB1dCBhbiBlbGxpcHNpcyB0byBpbmRpY2F0ZSB0aGF0IGEgcG9ydGlvbgorCSAqIG9mIHRoZSBncmFwaCBpcyBtaXNzaW5nLgorCSAqLworCXN0cmJ1Zl9hZGRzdHIoc2IsICIuLi4iKTsKKwlncmFwaF9wYWRfaG9yaXpvbnRhbGx5KGdyYXBoLCBzYik7CisKKwlpZiAoZ3JhcGgtPm51bV9wYXJlbnRzID49IDMgJiYKKwkgICAgZ3JhcGgtPmNvbW1pdF9pbmRleCA8IChncmFwaC0+bnVtX2NvbHVtbnMgLSAxKSkKKwkJZ3JhcGhfdXBkYXRlX3N0YXRlKGdyYXBoLCBHUkFQSF9QUkVfQ09NTUlUKTsKKwllbHNlCisJCWdyYXBoX3VwZGF0ZV9zdGF0ZShncmFwaCwgR1JBUEhfQ09NTUlUKTsKK30KKworc3RhdGljIHZvaWQgZ3JhcGhfb3V0cHV0X3ByZV9jb21taXRfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwKKwkJCQkJIHN0cnVjdCBzdHJidWYgKnNiKQoreworCWludCBudW1fZXhwYW5zaW9uX3Jvd3M7CisJaW50IGksIHNlZW5fdGhpczsKKworCS8qCisJICogVGhpcyBmdW5jdGlvbiBmb3JtYXRzIGEgcm93IHRoYXQgaW5jcmVhc2VzIHRoZSBzcGFjZSBhcm91bmQgYSBjb21taXQKKwkgKiB3aXRoIG11bHRpcGxlIHBhcmVudHMsIHRvIG1ha2Ugcm9vbSBmb3IgaXQuICBJdCBzaG91bGQgb25seSBiZQorCSAqIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSAzIG9yIG1vcmUgcGFyZW50cy4KKwkgKgorCSAqIFdlIG5lZWQgMiBleHRyYSByb3dzIGZvciBldmVyeSBwYXJlbnQgb3ZlciAyLgorCSAqLworCWFzc2VydChncmFwaC0+bnVtX3BhcmVudHMgPj0gMyk7CisJbnVtX2V4cGFuc2lvbl9yb3dzID0gKGdyYXBoLT5udW1fcGFyZW50cyAtIDIpICogMjsKKworCS8qCisJICogZ3JhcGgtPmV4cGFuc2lvbl9yb3cgdHJhY2tzIHRoZSBjdXJyZW50IGV4cGFuc2lvbiByb3cgd2UgYXJlIG9uLgorCSAqIEl0IHNob3VsZCBiZSBpbiB0aGUgcmFuZ2UgWzAsIG51bV9leHBhbnNpb25fcm93cyAtIDFdCisJICovCisJYXNzZXJ0KDAgPD0gZ3JhcGgtPmV4cGFuc2lvbl9yb3cgJiYKKwkgICAgICAgZ3JhcGgtPmV4cGFuc2lvbl9yb3cgPCBudW1fZXhwYW5zaW9uX3Jvd3MpOworCisJLyoKKwkgKiBPdXRwdXQgdGhlIHJvdworCSAqLworCXNlZW5fdGhpcyA9IDA7CisJZm9yIChpID0gMDsgaSA8IGdyYXBoLT5udW1fY29sdW1uczsgaSsrKSB7CisJCXN0cnVjdCBjb2x1bW4gKmNvbCA9ICZncmFwaC0+Y29sdW1uc1tpXTsKKwkJaWYgKGNvbC0+Y29tbWl0ID09IGdyYXBoLT5jb21taXQpIHsKKwkJCXNlZW5fdGhpcyA9IDE7CisJCQlzdHJidWZfYWRkZihzYiwgInwgJSpzIiwgZ3JhcGgtPmV4cGFuc2lvbl9yb3csICIiKTsKKwkJfSBlbHNlIGlmIChzZWVuX3RoaXMgJiYgKGdyYXBoLT5leHBhbnNpb25fcm93ID09IDApKSB7CisJCQkvKgorCQkJICogVGhpcyBpcyB0aGUgZmlyc3QgbGluZSBvZiB0aGUgcHJlLWNvbW1pdCBvdXRwdXQuCisJCQkgKiBJZiB0aGUgcHJldmlvdXMgY29tbWl0IHdhcyBhIG1lcmdlIGNvbW1pdCBhbmQKKwkJCSAqIGVuZGVkIGluIHRoZSBHUkFQSF9QT1NUX01FUkdFIHN0YXRlLCBhbGwgYnJhbmNoCisJCQkgKiBsaW5lcyBhZnRlciBncmFwaC0+cHJldl9jb21taXRfaW5kZXggd2VyZQorCQkJICogcHJpbnRlZCBhcyAiXCIgb24gdGhlIHByZXZpb3VzIGxpbmUuICBDb250aW51ZQorCQkJICogdG8gcHJpbnQgdGhlbSBhcyAiXCIgb24gdGhpcyBsaW5lLiAgT3RoZXJ3aXNlLAorCQkJICogcHJpbnQgdGhlIGJyYW5jaCBsaW5lcyBhcyAifCIuCisJCQkgKi8KKwkJCWlmIChncmFwaC0+cHJldl9zdGF0ZSA9PSBHUkFQSF9QT1NUX01FUkdFICYmCisJCQkgICAgZ3JhcGgtPnByZXZfY29tbWl0X2luZGV4IDwgaSkKKwkJCQlzdHJidWZfYWRkc3RyKHNiLCAiXFwgIik7CisJCQllbHNlCisJCQkJc3RyYnVmX2FkZHN0cihzYiwgInwgIik7CisJCX0gZWxzZSBpZiAoc2Vlbl90aGlzICYmIChncmFwaC0+ZXhwYW5zaW9uX3JvdyA+IDApKSB7CisJCQlzdHJidWZfYWRkc3RyKHNiLCAiXFwgIik7CisJCX0gZWxzZSB7CisJCQlzdHJidWZfYWRkc3RyKHNiLCAifCAiKTsKKwkJfQorCX0KKworCWdyYXBoX3BhZF9ob3Jpem9udGFsbHkoZ3JhcGgsIHNiKTsKKworCS8qCisJICogSW5jcmVtZW50IGdyYXBoLT5leHBhbnNpb25fcm93LAorCSAqIGFuZCBtb3ZlIHRvIHN0YXRlIEdSQVBIX0NPTU1JVCBpZiBuZWNlc3NhcnkKKwkgKi8KKwlncmFwaC0+ZXhwYW5zaW9uX3JvdysrOworCWlmIChncmFwaC0+ZXhwYW5zaW9uX3JvdyA+PSBudW1fZXhwYW5zaW9uX3Jvd3MpCisJCWdyYXBoX3VwZGF0ZV9zdGF0ZShncmFwaCwgR1JBUEhfQ09NTUlUKTsKK30KKworc3RhdGljIHZvaWQgZ3JhcGhfb3V0cHV0X2NvbW1pdF9jaGFyKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwkvKgorCSAqIEZvciBib3VuZGFyeSBjb21taXRzLCBwcmludCAnbycKKwkgKiAoV2Ugc2hvdWxkIG9ubHkgc2VlIGJvdW5kYXJ5IGNvbW1pdHMgd2hlbiByZXZzLT5ib3VuZGFyeSBpcyBzZXQuKQorCSAqLworCWlmIChncmFwaC0+Y29tbWl0LT5vYmplY3QuZmxhZ3MgJiBCT1VOREFSWSkgeworCQlhc3NlcnQoZ3JhcGgtPnJldnMtPmJvdW5kYXJ5KTsKKwkJc3RyYnVmX2FkZGNoKHNiLCAnbycpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBJZiByZXZzLT5sZWZ0X3JpZ2h0IGlzIHNldCwgcHJpbnQgJzwnIGZvciBjb21taXRzIHRoYXQKKwkgKiBjb21lIGZyb20gdGhlIGxlZnQgc2lkZSwgYW5kICc+JyBmb3IgY29tbWl0cyBmcm9tIHRoZSByaWdodAorCSAqIHNpZGUuCisJICovCisJaWYgKGdyYXBoLT5yZXZzICYmIGdyYXBoLT5yZXZzLT5sZWZ0X3JpZ2h0KSB7CisJCWlmIChncmFwaC0+Y29tbWl0LT5vYmplY3QuZmxhZ3MgJiBTWU1NRVRSSUNfTEVGVCkKKwkJCXN0cmJ1Zl9hZGRjaChzYiwgJzwnKTsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZGNoKHNiLCAnPicpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBQcmludCAnKicgaW4gYWxsIG90aGVyIGNhc2VzCisJICovCisJc3RyYnVmX2FkZGNoKHNiLCAnKicpOworfQorCit2b2lkIGdyYXBoX291dHB1dF9jb21taXRfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IHN0cmJ1ZiAqc2IpCit7CisJaW50IHNlZW5fdGhpcyA9IDA7CisJaW50IGksIGo7CisKKwkvKgorCSAqIE91dHB1dCB0aGUgcm93IGNvbnRhaW5pbmcgdGhpcyBjb21taXQKKwkgKiBJdGVyYXRlIHVwIHRvIGFuZCBpbmNsdWRpbmcgZ3JhcGgtPm51bV9jb2x1bW5zLAorCSAqIHNpbmNlIHRoZSBjdXJyZW50IGNvbW1pdCBtYXkgbm90IGJlIGluIGFueSBvZiB0aGUgZXhpc3RpbmcKKwkgKiBjb2x1bW5zLiAgKFRoaXMgaGFwcGVucyB3aGVuIHRoZSBjdXJyZW50IGNvbW1pdCBkb2Vzbid0IGhhdmUgYW55CisJICogY2hpbGRyZW4gdGhhdCB3ZSBoYXZlIGFscmVhZHkgcHJvY2Vzc2VkLikKKwkgKi8KKwlzZWVuX3RoaXMgPSAwOworCWZvciAoaSA9IDA7IGkgPD0gZ3JhcGgtPm51bV9jb2x1bW5zOyBpKyspIHsKKwkJc3RydWN0IGNvbW1pdCAqY29sX2NvbW1pdDsKKwkJaWYgKGkgPT0gZ3JhcGgtPm51bV9jb2x1bW5zKSB7CisJCQlpZiAoc2Vlbl90aGlzKQorCQkJCWJyZWFrOworCQkJY29sX2NvbW1pdCA9IGdyYXBoLT5jb21taXQ7CisJCX0gZWxzZSB7CisJCQljb2xfY29tbWl0ID0gZ3JhcGgtPmNvbHVtbnNbaV0uY29tbWl0OworCQl9CisKKwkJaWYgKGNvbF9jb21taXQgPT0gZ3JhcGgtPmNvbW1pdCkgeworCQkJc2Vlbl90aGlzID0gMTsKKwkJCWdyYXBoX291dHB1dF9jb21taXRfY2hhcihncmFwaCwgc2IpOworCisJCQlpZiAoZ3JhcGgtPm51bV9wYXJlbnRzIDwgMykKKwkJCQlzdHJidWZfYWRkY2goc2IsICcgJyk7CisJCQllbHNlIHsKKwkJCQlpbnQgbnVtX2Rhc2hlcyA9CisJCQkJCSgoZ3JhcGgtPm51bV9wYXJlbnRzIC0gMikgKiAyKSAtIDE7CisJCQkJZm9yIChqID0gMDsgaiA8IG51bV9kYXNoZXM7IGorKykKKwkJCQkJc3RyYnVmX2FkZGNoKHNiLCAnLScpOworCQkJCXN0cmJ1Zl9hZGRzdHIoc2IsICIuICIpOworCQkJfQorCQl9IGVsc2UgaWYgKHNlZW5fdGhpcyAmJiAoZ3JhcGgtPm51bV9wYXJlbnRzID4gMikpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsICJcXCAiKTsKKwkJfSBlbHNlIGlmIChzZWVuX3RoaXMgJiYgKGdyYXBoLT5udW1fcGFyZW50cyA9PSAyKSkgeworCQkJLyoKKwkJCSAqIFRoaXMgaXMgYSAyLXdheSBtZXJnZSBjb21taXQuCisJCQkgKiBUaGVyZSBpcyBubyBHUkFQSF9QUkVfQ09NTUlUIHN0YWdlIGZvciAyLXdheQorCQkJICogbWVyZ2VzLCBzbyB0aGlzIGlzIHRoZSBmaXJzdCBsaW5lIG9mIG91dHB1dAorCQkJICogZm9yIHRoaXMgY29tbWl0LiAgQ2hlY2sgdG8gc2VlIHdoYXQgdGhlIHByZXZpb3VzCisJCQkgKiBsaW5lIG9mIG91dHB1dCB3YXMuCisJCQkgKgorCQkJICogSWYgaXQgd2FzIEdSQVBIX1BPU1RfTUVSR0UsIHRoZSBicmFuY2ggbGluZQorCQkJICogY29taW5nIGludG8gdGhpcyBjb21taXQgbWF5IGhhdmUgYmVlbiAnXCcsCisJCQkgKiBhbmQgbm90ICd8JyBvciAnLycuICBJZiBzbywgb3V0cHV0IHRoZSBicmFuY2gKKwkJCSAqIGxpbmUgYXMgJ1wnIG9uIHRoaXMgbGluZSwgaW5zdGVhZCBvZiAnfCcuICBUaGlzCisJCQkgKiBtYWtlcyB0aGUgb3V0cHV0IGxvb2sgbmljZXIuCisJCQkgKi8KKwkJCWlmIChncmFwaC0+cHJldl9zdGF0ZSA9PSBHUkFQSF9QT1NUX01FUkdFICYmCisJCQkgICAgZ3JhcGgtPnByZXZfY29tbWl0X2luZGV4IDwgaSkKKwkJCQlzdHJidWZfYWRkc3RyKHNiLCAiXFwgIik7CisJCQllbHNlCisJCQkJc3RyYnVmX2FkZHN0cihzYiwgInwgIik7CisJCX0gZWxzZSB7CisJCQlzdHJidWZfYWRkc3RyKHNiLCAifCAiKTsKKwkJfQorCX0KKworCWdyYXBoX3BhZF9ob3Jpem9udGFsbHkoZ3JhcGgsIHNiKTsKKworCS8qCisJICogVXBkYXRlIGdyYXBoLT5zdGF0ZQorCSAqLworCWlmIChncmFwaC0+bnVtX3BhcmVudHMgPiAxKQorCQlncmFwaF91cGRhdGVfc3RhdGUoZ3JhcGgsIEdSQVBIX1BPU1RfTUVSR0UpOworCWVsc2UgaWYgKGdyYXBoX2lzX21hcHBpbmdfY29ycmVjdChncmFwaCkpCisJCWdyYXBoX3VwZGF0ZV9zdGF0ZShncmFwaCwgR1JBUEhfUEFERElORyk7CisJZWxzZQorCQlncmFwaF91cGRhdGVfc3RhdGUoZ3JhcGgsIEdSQVBIX0NPTExBUFNJTkcpOworfQorCit2b2lkIGdyYXBoX291dHB1dF9wb3N0X21lcmdlX2xpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBzdHJidWYgKnNiKQoreworCWludCBzZWVuX3RoaXMgPSAwOworCWludCBpLCBqOworCisJLyoKKwkgKiBPdXRwdXQgdGhlIHBvc3QtbWVyZ2Ugcm93CisJICovCisJZm9yIChpID0gMDsgaSA8PSBncmFwaC0+bnVtX2NvbHVtbnM7IGkrKykgeworCQlzdHJ1Y3QgY29tbWl0ICpjb2xfY29tbWl0OworCQlpZiAoaSA9PSBncmFwaC0+bnVtX2NvbHVtbnMpIHsKKwkJCWlmIChzZWVuX3RoaXMpCisJCQkJYnJlYWs7CisJCQljb2xfY29tbWl0ID0gZ3JhcGgtPmNvbW1pdDsKKwkJfSBlbHNlIHsKKwkJCWNvbF9jb21taXQgPSBncmFwaC0+Y29sdW1uc1tpXS5jb21taXQ7CisJCX0KKworCQlpZiAoY29sX2NvbW1pdCA9PSBncmFwaC0+Y29tbWl0KSB7CisJCQlzZWVuX3RoaXMgPSAxOworCQkJc3RyYnVmX2FkZGNoKHNiLCAnfCcpOworCQkJZm9yIChqID0gMDsgaiA8IGdyYXBoLT5udW1fcGFyZW50cyAtIDE7IGorKykKKwkJCQlzdHJidWZfYWRkc3RyKHNiLCAiXFwgIik7CisJCX0gZWxzZSBpZiAoc2Vlbl90aGlzKSB7CisJCQlzdHJidWZfYWRkc3RyKHNiLCAiXFwgIik7CisJCX0gZWxzZSB7CisJCQlzdHJidWZfYWRkc3RyKHNiLCAifCAiKTsKKwkJfQorCX0KKworCWdyYXBoX3BhZF9ob3Jpem9udGFsbHkoZ3JhcGgsIHNiKTsKKworCS8qCisJICogVXBkYXRlIGdyYXBoLT5zdGF0ZQorCSAqLworCWlmIChncmFwaF9pc19tYXBwaW5nX2NvcnJlY3QoZ3JhcGgpKQorCQlncmFwaF91cGRhdGVfc3RhdGUoZ3JhcGgsIEdSQVBIX1BBRERJTkcpOworCWVsc2UKKwkJZ3JhcGhfdXBkYXRlX3N0YXRlKGdyYXBoLCBHUkFQSF9DT0xMQVBTSU5HKTsKK30KKwordm9pZCBncmFwaF9vdXRwdXRfY29sbGFwc2luZ19saW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlpbnQgaTsKKwlpbnQgKnRtcF9tYXBwaW5nOworCisJLyoKKwkgKiBDbGVhciBvdXQgdGhlIG5ld19tYXBwaW5nIGFycmF5CisJICovCisJZm9yIChpID0gMDsgaSA8IGdyYXBoLT5tYXBwaW5nX3NpemU7IGkrKykKKwkJZ3JhcGgtPm5ld19tYXBwaW5nW2ldID0gLTE7CisKKwlmb3IgKGkgPSAwOyBpIDwgZ3JhcGgtPm1hcHBpbmdfc2l6ZTsgaSsrKSB7CisJCWludCB0YXJnZXQgPSBncmFwaC0+bWFwcGluZ1tpXTsKKwkJaWYgKHRhcmdldCA8IDApCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBTaW5jZSB1cGRhdGVfY29sdW1ucygpIGFsd2F5cyBpbnNlcnRzIHRoZSBsZWZ0bW9zdAorCQkgKiBjb2x1bW4gZmlyc3QsIGVhY2ggYnJhbmNoJ3MgdGFyZ2V0IGxvY2F0aW9uIHNob3VsZAorCQkgKiBhbHdheXMgYmUgZWl0aGVyIGl0cyBjdXJyZW50IGxvY2F0aW9uIG9yIHRvIHRoZSBsZWZ0IG9mCisJCSAqIGl0cyBjdXJyZW50IGxvY2F0aW9uLgorCQkgKgorCQkgKiBXZSBuZXZlciBoYXZlIHRvIG1vdmUgYnJhbmNoZXMgdG8gdGhlIHJpZ2h0LiAgVGhpcyBtYWtlcworCQkgKiB0aGUgZ3JhcGggbXVjaCBtb3JlIGxlZ2libGUsIHNpbmNlIHdoZW5ldmVyIGJyYW5jaGVzCisJCSAqIGNyb3NzLCBvbmx5IG9uZSBpcyBtb3ZpbmcgZGlyZWN0aW9ucy4KKwkJICovCisJCWFzc2VydCh0YXJnZXQgKiAyIDw9IGkpOworCisJCWlmICh0YXJnZXQgKiAyID09IGkpIHsKKwkJCS8qCisJCQkgKiBUaGlzIGNvbHVtbiBpcyBhbHJlYWR5IGluIHRoZQorCQkJICogY29ycmVjdCBwbGFjZQorCQkJICovCisJCQlhc3NlcnQoZ3JhcGgtPm5ld19tYXBwaW5nW2ldID09IC0xKTsKKwkJCWdyYXBoLT5uZXdfbWFwcGluZ1tpXSA9IHRhcmdldDsKKwkJfSBlbHNlIGlmIChncmFwaC0+bmV3X21hcHBpbmdbaSAtIDFdIDwgMCkgeworCQkJLyoKKwkJCSAqIE5vdGhpbmcgaXMgdG8gdGhlIGxlZnQuCisJCQkgKiBNb3ZlIHRvIHRoZSBsZWZ0IGJ5IG9uZQorCQkJICovCisJCQlncmFwaC0+bmV3X21hcHBpbmdbaSAtIDFdID0gdGFyZ2V0OworCQl9IGVsc2UgaWYgKGdyYXBoLT5uZXdfbWFwcGluZ1tpIC0gMV0gPT0gdGFyZ2V0KSB7CisJCQkvKgorCQkJICogVGhlcmUgaXMgYSBicmFuY2ggbGluZSB0byBvdXIgbGVmdAorCQkJICogYWxyZWFkeSwgYW5kIGl0IGlzIG91ciB0YXJnZXQuICBXZQorCQkJICogY29tYmluZSB3aXRoIHRoaXMgbGluZSwgc2luY2Ugd2Ugc2hhcmUKKwkJCSAqIHRoZSBzYW1lIHBhcmVudCBjb21taXQuCisJCQkgKgorCQkJICogV2UgZG9uJ3QgaGF2ZSB0byBhZGQgYW55dGhpbmcgdG8gdGhlCisJCQkgKiBvdXRwdXQgb3IgbmV3X21hcHBpbmcsIHNpbmNlIHRoZQorCQkJICogZXhpc3RpbmcgYnJhbmNoIGxpbmUgaGFzIGFscmVhZHkgdGFrZW4KKwkJCSAqIGNhcmUgb2YgaXQuCisJCQkgKi8KKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBUaGVyZSBpcyBhIGJyYW5jaCBsaW5lIHRvIG91ciBsZWZ0LAorCQkJICogYnV0IGl0IGlzbid0IG91ciB0YXJnZXQuICBXZSBuZWVkIHRvCisJCQkgKiBjcm9zcyBvdmVyIGl0LgorCQkJICoKKwkJCSAqIFRoZSBzcGFjZSBqdXN0IHRvIHRoZSBsZWZ0IG9mIHRoaXMKKwkJCSAqIGJyYW5jaCBzaG91bGQgYWx3YXlzIGJlIGVtcHR5LgorCQkJICovCisJCQlhc3NlcnQoZ3JhcGgtPm5ld19tYXBwaW5nW2kgLSAxXSA+IHRhcmdldCk7CisJCQlhc3NlcnQoZ3JhcGgtPm5ld19tYXBwaW5nW2kgLSAyXSA8IDApOworCQkJZ3JhcGgtPm5ld19tYXBwaW5nW2kgLSAyXSA9IHRhcmdldDsKKwkJfQorCX0KKworCS8qCisJICogVGhlIG5ldyBtYXBwaW5nIG1heSBiZSAxIHNtYWxsZXIgdGhhbiB0aGUgb2xkIG1hcHBpbmcKKwkgKi8KKwlpZiAoZ3JhcGgtPm5ld19tYXBwaW5nW2dyYXBoLT5tYXBwaW5nX3NpemUgLSAxXSA8IDApCisJCWdyYXBoLT5tYXBwaW5nX3NpemUtLTsKKworCS8qCisJICogT3V0cHV0IG91dCBhIGxpbmUgYmFzZWQgb24gdGhlIG5ldyBtYXBwaW5nIGluZm8KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZ3JhcGgtPm1hcHBpbmdfc2l6ZTsgaSsrKSB7CisJCWludCB0YXJnZXQgPSBncmFwaC0+bmV3X21hcHBpbmdbaV07CisJCWlmICh0YXJnZXQgPCAwKQorCQkJc3RyYnVmX2FkZGNoKHNiLCAnICcpOworCQllbHNlIGlmICh0YXJnZXQgKiAyID09IGkpCisJCQlzdHJidWZfYWRkY2goc2IsICd8Jyk7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRjaChzYiwgJy8nKTsKKwl9CisKKwlncmFwaF9wYWRfaG9yaXpvbnRhbGx5KGdyYXBoLCBzYik7CisKKwkvKgorCSAqIFN3YXAgbWFwcGluZyBhbmQgbmV3X21hcHBpbmcKKwkgKi8KKwl0bXBfbWFwcGluZyA9IGdyYXBoLT5tYXBwaW5nOworCWdyYXBoLT5tYXBwaW5nID0gZ3JhcGgtPm5ld19tYXBwaW5nOworCWdyYXBoLT5uZXdfbWFwcGluZyA9IHRtcF9tYXBwaW5nOworCisJLyoKKwkgKiBJZiBncmFwaC0+bWFwcGluZyBpbmRpY2F0ZXMgdGhhdCBhbGwgb2YgdGhlIGJyYW5jaCBsaW5lcworCSAqIGFyZSBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IHBvc2l0aW9ucywgd2UgYXJlIGRvbmUuCisJICogT3RoZXJ3aXNlLCB3ZSBuZWVkIHRvIGNvbGxhcHNlIHNvbWUgYnJhbmNoIGxpbmVzIHRvZ2V0aGVyLgorCSAqLworCWlmIChncmFwaF9pc19tYXBwaW5nX2NvcnJlY3QoZ3JhcGgpKQorCQlncmFwaF91cGRhdGVfc3RhdGUoZ3JhcGgsIEdSQVBIX1BBRERJTkcpOworfQorCitpbnQgZ3JhcGhfbmV4dF9saW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlzd2l0Y2ggKGdyYXBoLT5zdGF0ZSkgeworCWNhc2UgR1JBUEhfUEFERElORzoKKwkJZ3JhcGhfb3V0cHV0X3BhZGRpbmdfbGluZShncmFwaCwgc2IpOworCQlyZXR1cm4gMDsKKwljYXNlIEdSQVBIX1NLSVA6CisJCWdyYXBoX291dHB1dF9za2lwX2xpbmUoZ3JhcGgsIHNiKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBHUkFQSF9QUkVfQ09NTUlUOgorCQlncmFwaF9vdXRwdXRfcHJlX2NvbW1pdF9saW5lKGdyYXBoLCBzYik7CisJCXJldHVybiAwOworCWNhc2UgR1JBUEhfQ09NTUlUOgorCQlncmFwaF9vdXRwdXRfY29tbWl0X2xpbmUoZ3JhcGgsIHNiKTsKKwkJcmV0dXJuIDE7CisJY2FzZSBHUkFQSF9QT1NUX01FUkdFOgorCQlncmFwaF9vdXRwdXRfcG9zdF9tZXJnZV9saW5lKGdyYXBoLCBzYik7CisJCXJldHVybiAwOworCWNhc2UgR1JBUEhfQ09MTEFQU0lORzoKKwkJZ3JhcGhfb3V0cHV0X2NvbGxhcHNpbmdfbGluZShncmFwaCwgc2IpOworCQlyZXR1cm4gMDsKKwl9CisKKwlhc3NlcnQoMCk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZ3JhcGhfcGFkZGluZ19saW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlpbnQgaSwgajsKKworCWlmIChncmFwaC0+c3RhdGUgIT0gR1JBUEhfQ09NTUlUKSB7CisJCWdyYXBoX25leHRfbGluZShncmFwaCwgc2IpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBPdXRwdXQgdGhlIHJvdyBjb250YWluaW5nIHRoaXMgY29tbWl0CisJICogSXRlcmF0ZSB1cCB0byBhbmQgaW5jbHVkaW5nIGdyYXBoLT5udW1fY29sdW1ucywKKwkgKiBzaW5jZSB0aGUgY3VycmVudCBjb21taXQgbWF5IG5vdCBiZSBpbiBhbnkgb2YgdGhlIGV4aXN0aW5nCisJICogY29sdW1ucy4gIChUaGlzIGhhcHBlbnMgd2hlbiB0aGUgY3VycmVudCBjb21taXQgZG9lc24ndCBoYXZlIGFueQorCSAqIGNoaWxkcmVuIHRoYXQgd2UgaGF2ZSBhbHJlYWR5IHByb2Nlc3NlZC4pCisJICovCisJZm9yIChpID0gMDsgaSA8IGdyYXBoLT5udW1fY29sdW1uczsgaSsrKSB7CisJCXN0cnVjdCBjb21taXQgKmNvbF9jb21taXQgPSBncmFwaC0+Y29sdW1uc1tpXS5jb21taXQ7CisJCWlmIChjb2xfY29tbWl0ID09IGdyYXBoLT5jb21taXQpIHsKKwkJCXN0cmJ1Zl9hZGRjaChzYiwgJ3wnKTsKKworCQkJaWYgKGdyYXBoLT5udW1fcGFyZW50cyA8IDMpCisJCQkJc3RyYnVmX2FkZGNoKHNiLCAnICcpOworCQkJZWxzZSB7CisJCQkJaW50IG51bV9zcGFjZXMgPSAoKGdyYXBoLT5udW1fcGFyZW50cyAtIDIpICogMik7CisJCQkJZm9yIChqID0gMDsgaiA8IG51bV9zcGFjZXM7IGorKykKKwkJCQkJc3RyYnVmX2FkZGNoKHNiLCAnICcpOworCQkJfQorCQl9IGVsc2UgeworCQkJc3RyYnVmX2FkZHN0cihzYiwgInwgIik7CisJCX0KKwl9CisKKwlncmFwaF9wYWRfaG9yaXpvbnRhbGx5KGdyYXBoLCBzYik7CisKKwkvKgorCSAqIFVwZGF0ZSBncmFwaC0+cHJldl9zdGF0ZSBzaW5jZSB3ZSBoYXZlIG91dHB1dCBhIHBhZGRpbmcgbGluZQorCSAqLworCWdyYXBoLT5wcmV2X3N0YXRlID0gR1JBUEhfUEFERElORzsKK30KKworaW50IGdyYXBoX2lzX2NvbW1pdF9maW5pc2hlZChzdHJ1Y3QgZ2l0X2dyYXBoIGNvbnN0ICpncmFwaCkKK3sKKwlyZXR1cm4gKGdyYXBoLT5zdGF0ZSA9PSBHUkFQSF9QQURESU5HKTsKK30KKwordm9pZCBncmFwaF9zaG93X2NvbW1pdChzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG1zZ2J1ZjsKKwlpbnQgc2hvd25fY29tbWl0X2xpbmUgPSAwOworCisJaWYgKCFncmFwaCkKKwkJcmV0dXJuOworCisJc3RyYnVmX2luaXQoJm1zZ2J1ZiwgMCk7CisKKwl3aGlsZSAoIXNob3duX2NvbW1pdF9saW5lKSB7CisJCXNob3duX2NvbW1pdF9saW5lID0gZ3JhcGhfbmV4dF9saW5lKGdyYXBoLCAmbXNnYnVmKTsKKwkJZndyaXRlKG1zZ2J1Zi5idWYsIHNpemVvZihjaGFyKSwgbXNnYnVmLmxlbiwgc3Rkb3V0KTsKKwkJaWYgKCFzaG93bl9jb21taXRfbGluZSkKKwkJCXB1dGNoYXIoJ1xuJyk7CisJCXN0cmJ1Zl9zZXRsZW4oJm1zZ2J1ZiwgMCk7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJm1zZ2J1Zik7Cit9CisKK3ZvaWQgZ3JhcGhfc2hvd19vbmVsaW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoKQoreworCXN0cnVjdCBzdHJidWYgbXNnYnVmOworCisJaWYgKCFncmFwaCkKKwkJcmV0dXJuOworCisJc3RyYnVmX2luaXQoJm1zZ2J1ZiwgMCk7CisJZ3JhcGhfbmV4dF9saW5lKGdyYXBoLCAmbXNnYnVmKTsKKwlmd3JpdGUobXNnYnVmLmJ1Ziwgc2l6ZW9mKGNoYXIpLCBtc2didWYubGVuLCBzdGRvdXQpOworCXN0cmJ1Zl9yZWxlYXNlKCZtc2didWYpOworfQorCit2b2lkIGdyYXBoX3Nob3dfcGFkZGluZyhzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG1zZ2J1ZjsKKworCWlmICghZ3JhcGgpCisJCXJldHVybjsKKworCXN0cmJ1Zl9pbml0KCZtc2didWYsIDApOworCWdyYXBoX3BhZGRpbmdfbGluZShncmFwaCwgJm1zZ2J1Zik7CisJZndyaXRlKG1zZ2J1Zi5idWYsIHNpemVvZihjaGFyKSwgbXNnYnVmLmxlbiwgc3Rkb3V0KTsKKwlzdHJidWZfcmVsZWFzZSgmbXNnYnVmKTsKK30KKworaW50IGdyYXBoX3Nob3dfcmVtYWluZGVyKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoKQoreworCXN0cnVjdCBzdHJidWYgbXNnYnVmOworCWludCBzaG93biA9IDA7CisKKwlpZiAoIWdyYXBoKQorCQlyZXR1cm4gMDsKKworCWlmIChncmFwaF9pc19jb21taXRfZmluaXNoZWQoZ3JhcGgpKQorCQlyZXR1cm4gMDsKKworCXN0cmJ1Zl9pbml0KCZtc2didWYsIDApOworCWZvciAoOzspIHsKKwkJZ3JhcGhfbmV4dF9saW5lKGdyYXBoLCAmbXNnYnVmKTsKKwkJZndyaXRlKG1zZ2J1Zi5idWYsIHNpemVvZihjaGFyKSwgbXNnYnVmLmxlbiwgc3Rkb3V0KTsKKwkJc3RyYnVmX3NldGxlbigmbXNnYnVmLCAwKTsKKwkJc2hvd24gPSAxOworCisJCWlmICghZ3JhcGhfaXNfY29tbWl0X2ZpbmlzaGVkKGdyYXBoKSkKKwkJCXB1dGNoYXIoJ1xuJyk7CisJCWVsc2UKKwkJCWJyZWFrOworCX0KKwlzdHJidWZfcmVsZWFzZSgmbXNnYnVmKTsKKworCXJldHVybiBzaG93bjsKK30KKworCit2b2lkIGdyYXBoX3Nob3dfc3RyYnVmKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3Qgc3RyYnVmIGNvbnN0ICpzYikKK3sKKwljaGFyICpwOworCisJaWYgKCFncmFwaCkgeworCQlmd3JpdGUoc2ItPmJ1Ziwgc2l6ZW9mKGNoYXIpLCBzYi0+bGVuLCBzdGRvdXQpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBQcmludCB0aGUgc3RyYnVmIGxpbmUgYnkgbGluZSwKKwkgKiBhbmQgZGlzcGxheSB0aGUgZ3JhcGggaW5mbyBiZWZvcmUgZWFjaCBsaW5lIGJ1dCB0aGUgZmlyc3QuCisJICovCisJcCA9IHNiLT5idWY7CisJd2hpbGUgKHApIHsKKwkJc2l6ZV90IGxlbjsKKwkJY2hhciAqbmV4dF9wID0gc3RyY2hyKHAsICdcbicpOworCQlpZiAobmV4dF9wKSB7CisJCQluZXh0X3ArKzsKKwkJCWxlbiA9IG5leHRfcCAtIHA7CisJCX0gZWxzZSB7CisJCQlsZW4gPSAoc2ItPmJ1ZiArIHNiLT5sZW4pIC0gcDsKKwkJfQorCQlmd3JpdGUocCwgc2l6ZW9mKGNoYXIpLCBsZW4sIHN0ZG91dCk7CisJCWlmIChuZXh0X3AgJiYgKm5leHRfcCAhPSAnXDAnKQorCQkJZ3JhcGhfc2hvd19vbmVsaW5lKGdyYXBoKTsKKwkJcCA9IG5leHRfcDsKKwl9Cit9CisKK3ZvaWQgZ3JhcGhfc2hvd19jb21taXRfbXNnKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLAorCQkJICAgc3RydWN0IHN0cmJ1ZiBjb25zdCAqc2IpCit7CisJaW50IG5ld2xpbmVfdGVybWluYXRlZDsKKworCWlmICghZ3JhcGgpIHsKKwkJLyoKKwkJICogSWYgdGhlcmUncyBubyBncmFwaCwganVzdCBwcmludCB0aGUgbWVzc2FnZSBidWZmZXIuCisJCSAqCisJCSAqIFRoZSBtZXNzYWdlIGJ1ZmZlciBmb3IgQ01JVF9GTVRfT05FTElORSBhbmQKKwkJICogQ01JVF9GTVRfVVNFUkZPUk1BVCBhcmUgYWxyZWFkeSBtaXNzaW5nIGEgdGVybWluYXRpbmcKKwkJICogbmV3bGluZS4gIEFsbCBvZiB0aGUgb3RoZXIgZm9ybWF0cyBzaG91bGQgaGF2ZSBpdC4KKwkJICovCisJCWZ3cml0ZShzYi0+YnVmLCBzaXplb2YoY2hhciksIHNiLT5sZW4sIHN0ZG91dCk7CisJCXJldHVybjsKKwl9CisKKwluZXdsaW5lX3Rlcm1pbmF0ZWQgPSAoc2ItPmxlbiAmJiBzYi0+YnVmW3NiLT5sZW4gLSAxXSA9PSAnXG4nKTsKKworCS8qCisJICogU2hvdyB0aGUgY29tbWl0IG1lc3NhZ2UKKwkgKi8KKwlncmFwaF9zaG93X3N0cmJ1ZihncmFwaCwgc2IpOworCisJLyoKKwkgKiBJZiB0aGVyZSBpcyBtb3JlIG91dHB1dCBuZWVkZWQgZm9yIHRoaXMgY29tbWl0LCBzaG93IGl0IG5vdworCSAqLworCWlmICghZ3JhcGhfaXNfY29tbWl0X2ZpbmlzaGVkKGdyYXBoKSkgeworCQkvKgorCQkgKiBJZiBzYiBkb2Vzbid0IGhhdmUgYSB0ZXJtaW5hdGluZyBuZXdsaW5lLCBwcmludCBvbmUgbm93LAorCQkgKiBzbyB3ZSBjYW4gc3RhcnQgdGhlIHJlbWFpbmRlciBvZiB0aGUgZ3JhcGggb3V0cHV0IG9uIGEKKwkJICogbmV3IGxpbmUuCisJCSAqLworCQlpZiAoIW5ld2xpbmVfdGVybWluYXRlZCkKKwkJCXB1dGNoYXIoJ1xuJyk7CisKKwkJZ3JhcGhfc2hvd19yZW1haW5kZXIoZ3JhcGgpOworCisJCS8qCisJCSAqIElmIHNiIGVuZHMgd2l0aCBhIG5ld2xpbmUsIG91ciBvdXRwdXQgc2hvdWxkIHRvby4KKwkJICovCisJCWlmIChuZXdsaW5lX3Rlcm1pbmF0ZWQpCisJCQlwdXRjaGFyKCdcbicpOworCX0KK30KZGlmZiAtLWdpdCBhL2dyYXBoLmggYi9ncmFwaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYjRlM2QKLS0tIC9kZXYvbnVsbAorKysgYi9ncmFwaC5oCkBAIC0wLDAgKzEsMTIxIEBACisjaWZuZGVmIEdSQVBIX0gKKyNkZWZpbmUgR1JBUEhfSAorCisvKiBBIGdyYXBoIGlzIGEgcG9pbnRlciB0byB0aGlzIG9wYXF1ZSBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBnaXRfZ3JhcGg7CisKKy8qCisgKiBDcmVhdGUgYSBuZXcgc3RydWN0IGdpdF9ncmFwaC4KKyAqIFRoZSBncmFwaCBzaG91bGQgYmUgZnJlZWQgd2l0aCBncmFwaF9yZWxlYXNlKCkgd2hlbiBubyBsb25nZXIgbmVlZGVkLgorICovCitzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaF9pbml0KHN0cnVjdCByZXZfaW5mbyAqb3B0KTsKKworLyoKKyAqIERlc3Ryb3kgYSBzdHJ1Y3QgZ2l0X2dyYXBoIGFuZCBmcmVlIGFzc29jaWF0ZWQgbWVtb3J5LgorICovCit2b2lkIGdyYXBoX3JlbGVhc2Uoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgpOworCisvKgorICogVXBkYXRlIGEgZ2l0X2dyYXBoIHdpdGggYSBuZXcgY29tbWl0LgorICogVGhpcyB3aWxsIGNhdXNlIHRoZSBncmFwaCB0byBiZWdpbiBvdXRwdXR0aW5nIGxpbmVzIGZvciB0aGUgbmV3IGNvbW1pdAorICogdGhlIG5leHQgdGltZSBncmFwaF9uZXh0X2xpbmUoKSBpcyBjYWxsZWQuCisgKgorICogSWYgZ3JhcGhfdXBkYXRlKCkgaXMgY2FsbGVkIGJlZm9yZSBncmFwaF9pc19jb21taXRfZmluaXNoZWQoKSByZXR1cm5zIDEsCisgKiB0aGUgbmV4dCBjYWxsIHRvIGdyYXBoX25leHRfbGluZSgpIHdpbGwgb3V0cHV0IGFuIGVsbGlwc2lzICgiLi4uIikKKyAqIHRvIGluZGljYXRlIHRoYXQgYSBwb3J0aW9uIG9mIHRoZSBncmFwaCBpcyBtaXNzaW5nLgorICovCit2b2lkIGdyYXBoX3VwZGF0ZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IGNvbW1pdCAqY29tbWl0KTsKKworLyoKKyAqIE91dHB1dCB0aGUgbmV4dCBsaW5lIGZvciBhIGdyYXBoLgorICogVGhpcyBmb3JtYXRzIHRoZSBuZXh0IGdyYXBoIGxpbmUgaW50byB0aGUgc3BlY2lmaWVkIHN0cmJ1Zi4gIEl0IGlzIG5vdAorICogdGVybWluYXRlZCB3aXRoIGEgbmV3bGluZS4KKyAqCisgKiBSZXR1cm5zIDEgaWYgdGhlIGxpbmUgaW5jbHVkZXMgdGhlIGN1cnJlbnQgY29tbWl0LCBhbmQgMCBvdGhlcndpc2UuCisgKiBncmFwaF9uZXh0X2xpbmUoKSB3aWxsIHJldHVybiAxIGV4YWN0bHkgb25jZSBmb3IgZWFjaCB0aW1lCisgKiBncmFwaF91cGRhdGUoKSBpcyBjYWxsZWQuCisgKi8KK2ludCBncmFwaF9uZXh0X2xpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBzdHJidWYgKnNiKTsKKworLyoKKyAqIE91dHB1dCBhIHBhZGRpbmcgbGluZSBpbiB0aGUgZ3JhcGguCisgKiBUaGlzIGlzIHNpbWlsYXIgdG8gZ3JhcGhfbmV4dF9saW5lKCkuICBIb3dldmVyLCBpdCBpcyBndWFyYW50ZWVkIHRvCisgKiBuZXZlciBwcmludCB0aGUgY3VycmVudCBjb21taXQgbGluZS4gIEluc3RlYWQsIGlmIHRoZSBjb21taXQgbGluZSBpcworICogbmV4dCwgaXQgd2lsbCBzaW1wbHkgb3V0cHV0IGEgbGluZSBvZiB2ZXJ0aWNhbCBwYWRkaW5nLCBleHRlbmRpbmcgdGhlCisgKiBicmFuY2ggbGluZXMgZG93bndhcmRzLCBidXQgbGVhdmluZyB0aGVtIG90aGVyd2lzZSB1bmNoYW5nZWQuCisgKi8KK3ZvaWQgZ3JhcGhfcGFkZGluZ19saW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3Qgc3RyYnVmICpzYik7CisKKy8qCisgKiBEZXRlcm1pbmUgaWYgYSBncmFwaCBoYXMgZmluaXNoZWQgb3V0cHV0dGluZyBsaW5lcyBmb3IgdGhlIGN1cnJlbnQKKyAqIGNvbW1pdC4KKyAqCisgKiBSZXR1cm5zIDEgaWYgZ3JhcGhfbmV4dF9saW5lKCkgbmVlZHMgdG8gYmUgY2FsbGVkIGFnYWluIGJlZm9yZQorICogZ3JhcGhfdXBkYXRlKCkgc2hvdWxkIGJlIGNhbGxlZC4gIFJldHVybnMgMCBpZiBubyBtb3JlIGxpbmVzIGFyZSBuZWVkZWQKKyAqIGZvciB0aGlzIGNvbW1pdC4gIElmIDAgaXMgcmV0dXJuZWQsIGdyYXBoX25leHRfbGluZSgpIG1heSBzdGlsbCBiZQorICogY2FsbGVkIHdpdGhvdXQgY2FsbGluZyBncmFwaF91cGRhdGUoKSwgYW5kIGl0IHdpbGwgbWVyZWx5IG91dHB1dAorICogYXBwcm9wcmlhdGUgInZlcnRpY2FsIHBhZGRpbmciIGluIHRoZSBncmFwaC4KKyAqLworaW50IGdyYXBoX2lzX2NvbW1pdF9maW5pc2hlZChzdHJ1Y3QgZ2l0X2dyYXBoIGNvbnN0ICpncmFwaCk7CisKKworLyoKKyAqIGdyYXBoX3Nob3dfKjogaGVscGVyIGZ1bmN0aW9ucyBmb3IgcHJpbnRpbmcgdG8gc3Rkb3V0CisgKi8KKworCisvKgorICogSWYgdGhlIGdyYXBoIGlzIG5vbi1OVUxMLCBwcmludCB0aGUgaGlzdG9yeSBncmFwaCB0byBzdGRvdXQsCisgKiB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBsaW5lIGNvbnRhaW5pbmcgdGhpcyBjb21taXQuCisgKiBEb2VzIG5vdCBwcmludCBhIHRlcm1pbmF0aW5nIG5ld2xpbmUgb24gdGhlIGxhc3QgbGluZS4KKyAqLwordm9pZCBncmFwaF9zaG93X2NvbW1pdChzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCk7CisKKy8qCisgKiBJZiB0aGUgZ3JhcGggaXMgbm9uLU5VTEwsIHByaW50IG9uZSBsaW5lIG9mIHRoZSBoaXN0b3J5IGdyYXBoIHRvIHN0ZG91dC4KKyAqIERvZXMgbm90IHByaW50IGEgdGVybWluYXRpbmcgbmV3bGluZSBvbiB0aGUgbGFzdCBsaW5lLgorICovCit2b2lkIGdyYXBoX3Nob3dfb25lbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCk7CisKKy8qCisgKiBJZiB0aGUgZ3JhcGggaXMgbm9uLU5VTEwsIHByaW50IG9uZSBsaW5lIG9mIHZlcnRpY2FsIGdyYXBoIHBhZGRpbmcgdG8KKyAqIHN0ZG91dC4gIERvZXMgbm90IHByaW50IGEgdGVybWluYXRpbmcgbmV3bGluZSBvbiB0aGUgbGFzdCBsaW5lLgorICovCit2b2lkIGdyYXBoX3Nob3dfcGFkZGluZyhzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCk7CisKKy8qCisgKiBJZiB0aGUgZ3JhcGggaXMgbm9uLU5VTEwsIHByaW50IHRoZSByZXN0IG9mIHRoZSBoaXN0b3J5IGdyYXBoIGZvciB0aGlzCisgKiBjb21taXQgdG8gc3Rkb3V0LiAgRG9lcyBub3QgcHJpbnQgYSB0ZXJtaW5hdGluZyBuZXdsaW5lIG9uIHRoZSBsYXN0IGxpbmUuCisgKi8KK2ludCBncmFwaF9zaG93X3JlbWFpbmRlcihzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCk7CisKKy8qCisgKiBQcmludCBhIHN0cmJ1ZiB0byBzdGRvdXQuICBJZiB0aGUgZ3JhcGggaXMgbm9uLU5VTEwsIGFsbCBsaW5lcyBidXQgdGhlCisgKiBmaXJzdCB3aWxsIGJlIHByZWZpeGVkIHdpdGggdGhlIGdyYXBoIG91dHB1dC4KKyAqCisgKiBJZiB0aGUgc3RyYnVmIGVuZHMgd2l0aCBhIG5ld2xpbmUsIHRoZSBvdXRwdXQgd2lsbCBlbmQgYWZ0ZXIgdGhpcworICogbmV3bGluZS4gIEEgbmV3IGdyYXBoIGxpbmUgd2lsbCBub3QgYmUgcHJpbnRlZCBhZnRlciB0aGUgZmluYWwgbmV3bGluZS4KKyAqIElmIHRoZSBzdHJidWYgaXMgZW1wdHksIG5vIG91dHB1dCB3aWxsIGJlIHByaW50ZWQuCisgKgorICogU2luY2UgdGhlIGZpcnN0IGxpbmUgd2lsbCBub3QgaW5jbHVkZSB0aGUgZ3JhcGggb3VwdXQsIHRoZSBjYWxsZXIgaXMKKyAqIHJlc3BvbnNpYmxlIGZvciBwcmludGluZyB0aGlzIGxpbmUncyBncmFwaCAocGVyaGFwcyB2aWEKKyAqIGdyYXBoX3Nob3dfY29tbWl0KCkgb3IgZ3JhcGhfc2hvd19vbmVsaW5lKCkpIGJlZm9yZSBjYWxsaW5nCisgKiBncmFwaF9zaG93X3N0cmJ1ZigpLgorICovCit2b2lkIGdyYXBoX3Nob3dfc3RyYnVmKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3Qgc3RyYnVmIGNvbnN0ICpzYik7CisKKy8qCisgKiBQcmludCBhIGNvbW1pdCBtZXNzYWdlIHN0cmJ1ZiBhbmQgdGhlIHJlbWFpbmRlciBvZiB0aGUgZ3JhcGggdG8gc3Rkb3V0LgorICoKKyAqIFRoaXMgaXMgc2ltaWxhciB0byBncmFwaF9zaG93X3N0cmJ1ZigpLCBidXQgaXQgYWx3YXlzIHByaW50cyB0aGUKKyAqIHJlbWFpbmRlciBvZiB0aGUgZ3JhcGguCisgKgorICogSWYgdGhlIHN0cmJ1ZiBlbmRzIHdpdGggYSBuZXdsaW5lLCB0aGUgb3V0cHV0IHByaW50ZWQgYnkKKyAqIGdyYXBoX3Nob3dfY29tbWl0X21zZygpIHdpbGwgZW5kIHdpdGggYSBuZXdsaW5lLiAgSWYgdGhlIHN0cmJ1ZiBpcworICogbWlzc2luZyBhIHRlcm1pbmF0aW5nIG5ld2xpbmUgKGluY2x1ZGluZyBpZiBpdCBpcyBlbXB0eSksIHRoZSBvdXRwdXQKKyAqIHByaW50ZWQgYnkgZ3JhcGhfc2hvd19jb21taXRfbXNnKCkgd2lsbCBhbHNvIGJlIG1pc3NpbmcgYSB0ZXJtaW5hdGluZworICogbmV3bGluZS4KKyAqLwordm9pZCBncmFwaF9zaG93X2NvbW1pdF9tc2coc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBzdHJidWYgY29uc3QgKnNiKTsKKworI2VuZGlmIC8qIEdSQVBIX0ggKi8KZGlmZiAtLWdpdCBhL2hhc2gtb2JqZWN0LmMgYi9oYXNoLW9iamVjdC5jCmluZGV4IDYxZTcxNjAuLjQ4ZDUyMjMgMTAwNjQ0Ci0tLSBhL2hhc2gtb2JqZWN0LmMKKysrIGIvaGFzaC1vYmplY3QuYwpAQCAtNiw2ICs2LDcgQEAKICAqLwogI2luY2x1ZGUgImNhY2hlLmgiCiAjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgInF1b3RlLmgiCiAKIHN0YXRpYyB2b2lkIGhhc2hfb2JqZWN0KGNvbnN0IGNoYXIgKnBhdGgsIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwgaW50IHdyaXRlX29iamVjdCkKIHsKQEAgLTIwLDYgKzIxLDcgQEAKIAkJICAgID8gIlVuYWJsZSB0byBhZGQgJXMgdG8gZGF0YWJhc2UiCiAJCSAgICA6ICJVbmFibGUgdG8gaGFzaCAlcyIsIHBhdGgpOwogCXByaW50ZigiJXNcbiIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwltYXliZV9mbHVzaF9vcl9kaWUoc3Rkb3V0LCAiaGFzaCB0byBzdGRvdXQiKTsKIH0KIAogc3RhdGljIHZvaWQgaGFzaF9zdGRpbihjb25zdCBjaGFyICp0eXBlLCBpbnQgd3JpdGVfb2JqZWN0KQpAQCAtMzAsOCArMzIsMjcgQEAKIAlwcmludGYoIiVzXG4iLCBzaGExX3RvX2hleChzaGExKSk7CiB9CiAKK3N0YXRpYyB2b2lkIGhhc2hfc3RkaW5fcGF0aHMoY29uc3QgY2hhciAqdHlwZSwgaW50IHdyaXRlX29iamVjdHMpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYsIG5idWY7CisKKwlzdHJidWZfaW5pdCgmYnVmLCAwKTsKKwlzdHJidWZfaW5pdCgmbmJ1ZiwgMCk7CisJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lKCZidWYsIHN0ZGluLCAnXG4nKSAhPSBFT0YpIHsKKwkJaWYgKGJ1Zi5idWZbMF0gPT0gJyInKSB7CisJCQlzdHJidWZfcmVzZXQoJm5idWYpOworCQkJaWYgKHVucXVvdGVfY19zdHlsZSgmbmJ1ZiwgYnVmLmJ1ZiwgTlVMTCkpCisJCQkJZGllKCJsaW5lIGlzIGJhZGx5IHF1b3RlZCIpOworCQkJc3RyYnVmX3N3YXAoJmJ1ZiwgJm5idWYpOworCQl9CisJCWhhc2hfb2JqZWN0KGJ1Zi5idWYsIHR5cGVfZnJvbV9zdHJpbmcodHlwZSksIHdyaXRlX29iamVjdHMpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmbmJ1Zik7Cit9CisKIHN0YXRpYyBjb25zdCBjaGFyIGhhc2hfb2JqZWN0X3VzYWdlW10gPQotImdpdC1oYXNoLW9iamVjdCBbLXQgPHR5cGU+XSBbLXddIFstLXN0ZGluXSA8ZmlsZT4uLi4iOworImdpdC1oYXNoLW9iamVjdCBbIFstdCA8dHlwZT5dIFstd10gWy0tc3RkaW5dIDxmaWxlPi4uLiB8IC0tc3RkaW4tcGF0aHMgPCA8bGlzdC1vZi1wYXRocz4gXSI7CiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKQEAgLTQyLDggKzYzLDkgQEAKIAlpbnQgcHJlZml4X2xlbmd0aCA9IC0xOwogCWludCBub19tb3JlX2ZsYWdzID0gMDsKIAlpbnQgaGFzaHN0ZGluID0gMDsKKwlpbnQgc3RkaW5fcGF0aHMgPSAwOwogCi0JZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcpOworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKIAogCWZvciAoaSA9IDEgOyBpIDwgYXJnYzsgaSsrKSB7CiAJCWlmICghbm9fbW9yZV9mbGFncyAmJiBhcmd2W2ldWzBdID09ICctJykgewpAQCAtNjUsNyArODcsMTkgQEAKIAkJCX0KIAkJCWVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgIi0taGVscCIpKQogCQkJCXVzYWdlKGhhc2hfb2JqZWN0X3VzYWdlKTsKKwkJCWVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tc3RkaW4tcGF0aHMiKSkgeworCQkJCWlmIChoYXNoc3RkaW4pIHsKKwkJCQkJZXJyb3IoIkNhbid0IHVzZSAtLXN0ZGluLXBhdGhzIHdpdGggLS1zdGRpbiIpOworCQkJCQl1c2FnZShoYXNoX29iamVjdF91c2FnZSk7CisJCQkJfQorCQkJCXN0ZGluX3BhdGhzID0gMTsKKworCQkJfQogCQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS1zdGRpbiIpKSB7CisJCQkJaWYgKHN0ZGluX3BhdGhzKSB7CisJCQkJCWVycm9yKCJDYW4ndCB1c2UgJXMgd2l0aCAtLXN0ZGluLXBhdGhzIiwgYXJndltpXSk7CisJCQkJCXVzYWdlKGhhc2hfb2JqZWN0X3VzYWdlKTsKKwkJCQl9CiAJCQkJaWYgKGhhc2hzdGRpbikKIAkJCQkJZGllKCJNdWx0aXBsZSAtLXN0ZGluIGFyZ3VtZW50cyBhcmUgbm90IHN1cHBvcnRlZCIpOwogCQkJCWhhc2hzdGRpbiA9IDE7CkBAIC03Niw2ICsxMTAsMTEgQEAKIAkJZWxzZSB7CiAJCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOwogCisJCQlpZiAoc3RkaW5fcGF0aHMpIHsKKwkJCQllcnJvcigiQ2FuJ3Qgc3BlY2lmeSBmaWxlcyAoc3VjaCBhcyBcIiVzXCIpIHdpdGggLS1zdGRpbi1wYXRocyIsIGFyZyk7CisJCQkJdXNhZ2UoaGFzaF9vYmplY3RfdXNhZ2UpOworCQkJfQorCiAJCQlpZiAoaGFzaHN0ZGluKSB7CiAJCQkJaGFzaF9zdGRpbih0eXBlLCB3cml0ZV9vYmplY3QpOwogCQkJCWhhc2hzdGRpbiA9IDA7CkBAIC04Nyw2ICsxMjYsMTAgQEAKIAkJCW5vX21vcmVfZmxhZ3MgPSAxOwogCQl9CiAJfQorCisJaWYgKHN0ZGluX3BhdGhzKQorCQloYXNoX3N0ZGluX3BhdGhzKHR5cGUsIHdyaXRlX29iamVjdCk7CisKIAlpZiAoaGFzaHN0ZGluKQogCQloYXNoX3N0ZGluKHR5cGUsIHdyaXRlX29iamVjdCk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9oZWxwLmMgYi9oZWxwLmMKaW5kZXggMTAyOThmYi4uOGFmZjk0YyAxMDA2NDQKLS0tIGEvaGVscC5jCisrKyBiL2hlbHAuYwpAQCAtMTEsMTAgKzExLDE2IEBACiAjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKIAogc3RhdGljIHN0cnVjdCBtYW5fdmlld2VyX2xpc3QgewotCXZvaWQgKCpleGVjKShjb25zdCBjaGFyICopOwogCXN0cnVjdCBtYW5fdmlld2VyX2xpc3QgKm5leHQ7CisJY2hhciBuYW1lW0ZMRVhfQVJSQVldOwogfSAqbWFuX3ZpZXdlcl9saXN0OwogCitzdGF0aWMgc3RydWN0IG1hbl92aWV3ZXJfaW5mb19saXN0IHsKKwlzdHJ1Y3QgbWFuX3ZpZXdlcl9pbmZvX2xpc3QgKm5leHQ7CisJY29uc3QgY2hhciAqaW5mbzsKKwljaGFyIG5hbWVbRkxFWF9BUlJBWV07Cit9ICptYW5fdmlld2VyX2luZm9fbGlzdDsKKwogZW51bSBoZWxwX2Zvcm1hdCB7CiAJSEVMUF9GT1JNQVRfTUFOLAogCUhFTFBfRk9STUFUX0lORk8sCkBAIC00OSw2ICs1NSwxOCBAQAogCWRpZSgidW5yZWNvZ25pemVkIGhlbHAgZm9ybWF0ICclcyciLCBmb3JtYXQpOwogfQogCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X21hbl92aWV3ZXJfaW5mbyhjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBtYW5fdmlld2VyX2luZm9fbGlzdCAqdmlld2VyOworCisJZm9yICh2aWV3ZXIgPSBtYW5fdmlld2VyX2luZm9fbGlzdDsgdmlld2VyOyB2aWV3ZXIgPSB2aWV3ZXItPm5leHQpCisJeworCQlpZiAoIXN0cmNhc2VjbXAobmFtZSwgdmlld2VyLT5uYW1lKSkKKwkJCXJldHVybiB2aWV3ZXItPmluZm87CisJfQorCXJldHVybiBOVUxMOworfQorCiBzdGF0aWMgaW50IGNoZWNrX2VtYWNzY2xpZW50X3ZlcnNpb24odm9pZCkKIHsKIAlzdHJ1Y3Qgc3RyYnVmIGJ1ZmZlciA9IFNUUkJVRl9JTklUOwpAQCAtOTUsNTcgKzExMywxNDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZXhlY193b21hbl9lbWFjcyhjb25zdCBjaGFyICpwYWdlKQorc3RhdGljIHZvaWQgZXhlY193b21hbl9lbWFjcyhjb25zdCBjaGFyKiBwYXRoLCBjb25zdCBjaGFyICpwYWdlKQogewogCWlmICghY2hlY2tfZW1hY3NjbGllbnRfdmVyc2lvbigpKSB7CiAJCS8qIFRoaXMgd29ya3Mgb25seSB3aXRoIGVtYWNzY2xpZW50IHZlcnNpb24gPj0gMjIuICovCiAJCXN0cnVjdCBzdHJidWYgbWFuX3BhZ2UgPSBTVFJCVUZfSU5JVDsKKworCQlpZiAoIXBhdGgpCisJCQlwYXRoID0gImVtYWNzY2xpZW50IjsKIAkJc3RyYnVmX2FkZGYoJm1hbl9wYWdlLCAiKHdvbWFuIFwiJXNcIikiLCBwYWdlKTsKLQkJZXhlY2xwKCJlbWFjc2NsaWVudCIsICJlbWFjc2NsaWVudCIsICItZSIsIG1hbl9wYWdlLmJ1ZiwgTlVMTCk7CisJCWV4ZWNscChwYXRoLCAiZW1hY3NjbGllbnQiLCAiLWUiLCBtYW5fcGFnZS5idWYsIE5VTEwpOworCQl3YXJuaW5nKCJmYWlsZWQgdG8gZXhlYyAnJXMnOiAlcyIsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBleGVjX21hbl9rb25xdWVyb3IoY29uc3QgY2hhciAqcGFnZSkKK3N0YXRpYyB2b2lkIGV4ZWNfbWFuX2tvbnF1ZXJvcihjb25zdCBjaGFyKiBwYXRoLCBjb25zdCBjaGFyICpwYWdlKQogewogCWNvbnN0IGNoYXIgKmRpc3BsYXkgPSBnZXRlbnYoIkRJU1BMQVkiKTsKIAlpZiAoZGlzcGxheSAmJiAqZGlzcGxheSkgewogCQlzdHJ1Y3Qgc3RyYnVmIG1hbl9wYWdlID0gU1RSQlVGX0lOSVQ7CisJCWNvbnN0IGNoYXIgKmZpbGVuYW1lID0gImtmbWNsaWVudCI7CisKKwkJLyogSXQncyBzaW1wbGVyIHRvIGxhdW5jaCBrb25xdWVyb3IgdXNpbmcga2ZtY2xpZW50LiAqLworCQlpZiAocGF0aCkgeworCQkJY29uc3QgY2hhciAqZmlsZSA9IHN0cnJjaHIocGF0aCwgJy8nKTsKKwkJCWlmIChmaWxlICYmICFzdHJjbXAoZmlsZSArIDEsICJrb25xdWVyb3IiKSkgeworCQkJCWNoYXIgKm5ldyA9IHhzdHJkdXAocGF0aCk7CisJCQkJY2hhciAqZGVzdCA9IHN0cnJjaHIobmV3LCAnLycpOworCisJCQkJLyogc3RybGVuKCJrb25xdWVyb3IiKSA9PSBzdHJsZW4oImtmbWNsaWVudCIpICovCisJCQkJc3RyY3B5KGRlc3QgKyAxLCAia2ZtY2xpZW50Iik7CisJCQkJcGF0aCA9IG5ldzsKKwkJCX0KKwkJCWlmIChmaWxlKQorCQkJCWZpbGVuYW1lID0gZmlsZTsKKwkJfSBlbHNlCisJCQlwYXRoID0gImtmbWNsaWVudCI7CiAJCXN0cmJ1Zl9hZGRmKCZtYW5fcGFnZSwgIm1hbjolcygxKSIsIHBhZ2UpOwotCQlleGVjbHAoImtmbWNsaWVudCIsICJrZm1jbGllbnQiLCAibmV3VGFiIiwgbWFuX3BhZ2UuYnVmLCBOVUxMKTsKKwkJZXhlY2xwKHBhdGgsIGZpbGVuYW1lLCAibmV3VGFiIiwgbWFuX3BhZ2UuYnVmLCBOVUxMKTsKKwkJd2FybmluZygiZmFpbGVkIHRvIGV4ZWMgJyVzJzogJXMiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOwogCX0KIH0KIAotc3RhdGljIHZvaWQgZXhlY19tYW5fbWFuKGNvbnN0IGNoYXIgKnBhZ2UpCitzdGF0aWMgdm9pZCBleGVjX21hbl9tYW4oY29uc3QgY2hhciogcGF0aCwgY29uc3QgY2hhciAqcGFnZSkKIHsKLQlleGVjbHAoIm1hbiIsICJtYW4iLCBwYWdlLCBOVUxMKTsKKwlpZiAoIXBhdGgpCisJCXBhdGggPSAibWFuIjsKKwlleGVjbHAocGF0aCwgIm1hbiIsIHBhZ2UsIE5VTEwpOworCXdhcm5pbmcoImZhaWxlZCB0byBleGVjICclcyc6ICVzIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKIH0KIAotc3RhdGljIHZvaWQgZG9fYWRkX21hbl92aWV3ZXIodm9pZCAoKmV4ZWMpKGNvbnN0IGNoYXIgKikpCitzdGF0aWMgdm9pZCBleGVjX21hbl9jbWQoY29uc3QgY2hhciAqY21kLCBjb25zdCBjaGFyICpwYWdlKQoreworCXN0cnVjdCBzdHJidWYgc2hlbGxfY21kID0gU1RSQlVGX0lOSVQ7CisJc3RyYnVmX2FkZGYoJnNoZWxsX2NtZCwgIiVzICVzIiwgY21kLCBwYWdlKTsKKwlleGVjbCgiL2Jpbi9zaCIsICJzaCIsICItYyIsIHNoZWxsX2NtZC5idWYsIE5VTEwpOworCXdhcm5pbmcoImZhaWxlZCB0byBleGVjICclcyc6ICVzIiwgY21kLCBzdHJlcnJvcihlcnJubykpOworfQorCitzdGF0aWMgdm9pZCBhZGRfbWFuX3ZpZXdlcihjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBtYW5fdmlld2VyX2xpc3QgKipwID0gJm1hbl92aWV3ZXJfbGlzdDsKKwlzaXplX3QgbGVuID0gc3RybGVuKG5hbWUpOwogCiAJd2hpbGUgKCpwKQogCQlwID0gJigoKnApLT5uZXh0KTsKLQkqcCA9IHhtYWxsb2Moc2l6ZW9mKCoqcCkpOwotCSgqcCktPm5leHQgPSBOVUxMOwotCSgqcCktPmV4ZWMgPSBleGVjOworCSpwID0geGNhbGxvYygxLCAoc2l6ZW9mKCoqcCkgKyBsZW4gKyAxKSk7CisJc3RybmNweSgoKnApLT5uYW1lLCBuYW1lLCBsZW4pOwogfQogCi1zdGF0aWMgaW50IGFkZF9tYW5fdmlld2VyKGNvbnN0IGNoYXIgKnZhbHVlKQorc3RhdGljIGludCBzdXBwb3J0ZWRfbWFuX3ZpZXdlcihjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbGVuKQogewotCWlmICghc3RyY2FzZWNtcCh2YWx1ZSwgIm1hbiIpKQotCQlkb19hZGRfbWFuX3ZpZXdlcihleGVjX21hbl9tYW4pOwotCWVsc2UgaWYgKCFzdHJjYXNlY21wKHZhbHVlLCAid29tYW4iKSkKLQkJZG9fYWRkX21hbl92aWV3ZXIoZXhlY193b21hbl9lbWFjcyk7Ci0JZWxzZSBpZiAoIXN0cmNhc2VjbXAodmFsdWUsICJrb25xdWVyb3IiKSkKLQkJZG9fYWRkX21hbl92aWV3ZXIoZXhlY19tYW5fa29ucXVlcm9yKTsKKwlyZXR1cm4gKCFzdHJuY2FzZWNtcCgibWFuIiwgbmFtZSwgbGVuKSB8fAorCQkhc3RybmNhc2VjbXAoIndvbWFuIiwgbmFtZSwgbGVuKSB8fAorCQkhc3RybmNhc2VjbXAoImtvbnF1ZXJvciIsIG5hbWUsIGxlbikpOworfQorCitzdGF0aWMgdm9pZCBkb19hZGRfbWFuX3ZpZXdlcl9pbmZvKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgc2l6ZV90IGxlbiwKKwkJCQkgICBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlzdHJ1Y3QgbWFuX3ZpZXdlcl9pbmZvX2xpc3QgKm5ldyA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpuZXcpICsgbGVuICsgMSk7CisKKwlzdHJuY3B5KG5ldy0+bmFtZSwgbmFtZSwgbGVuKTsKKwluZXctPmluZm8gPSB4c3RyZHVwKHZhbHVlKTsKKwluZXctPm5leHQgPSBtYW5fdmlld2VyX2luZm9fbGlzdDsKKwltYW5fdmlld2VyX2luZm9fbGlzdCA9IG5ldzsKK30KKworc3RhdGljIGludCBhZGRfbWFuX3ZpZXdlcl9wYXRoKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgICAgc2l6ZV90IGxlbiwKKwkJCSAgICAgICBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoc3VwcG9ydGVkX21hbl92aWV3ZXIobmFtZSwgbGVuKSkKKwkJZG9fYWRkX21hbl92aWV3ZXJfaW5mbyhuYW1lLCBsZW4sIHZhbHVlKTsKIAllbHNlCi0JCXdhcm5pbmcoIiclcyc6IHVuc3VwcG9ydGVkIG1hbiB2aWV3ZXIuIiwgdmFsdWUpOworCQl3YXJuaW5nKCInJXMnOiBwYXRoIGZvciB1bnN1cHBvcnRlZCBtYW4gdmlld2VyLlxuIgorCQkJIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5jbWQnIGluc3RlYWQuIiwKKwkJCW5hbWUpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ2l0X2hlbHBfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCitzdGF0aWMgaW50IGFkZF9tYW5fdmlld2VyX2NtZChjb25zdCBjaGFyICpuYW1lLAorCQkJICAgICAgc2l6ZV90IGxlbiwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmIChzdXBwb3J0ZWRfbWFuX3ZpZXdlcihuYW1lLCBsZW4pKQorCQl3YXJuaW5nKCInJXMnOiBjbWQgZm9yIHN1cHBvcnRlZCBtYW4gdmlld2VyLlxuIgorCQkJIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5wYXRoJyBpbnN0ZWFkLiIsCisJCQluYW1lKTsKKwllbHNlCisJCWRvX2FkZF9tYW5fdmlld2VyX2luZm8obmFtZSwgbGVuLCB2YWx1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZGRfbWFuX3ZpZXdlcl9pbmZvKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJY29uc3QgY2hhciAqbmFtZSA9IHZhciArIDQ7CisJY29uc3QgY2hhciAqc3Via2V5ID0gc3RycmNocihuYW1lLCAnLicpOworCisJaWYgKCFzdWJrZXkpCisJCXJldHVybiBlcnJvcigiQ29uZmlnIHdpdGggbm8ga2V5IGZvciBtYW4gdmlld2VyOiAlcyIsIG5hbWUpOworCisJaWYgKCFzdHJjbXAoc3Via2V5LCAiLnBhdGgiKSkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCXJldHVybiBhZGRfbWFuX3ZpZXdlcl9wYXRoKG5hbWUsIHN1YmtleSAtIG5hbWUsIHZhbHVlKTsKKwl9CisJaWYgKCFzdHJjbXAoc3Via2V5LCAiLmNtZCIpKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJcmV0dXJuIGFkZF9tYW5fdmlld2VyX2NtZChuYW1lLCBzdWJrZXkgLSBuYW1lLCB2YWx1ZSk7CisJfQorCisJd2FybmluZygiJyVzJzogdW5zdXBwb3J0ZWQgbWFuIHZpZXdlciBzdWIga2V5LiIsIHN1YmtleSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X2hlbHBfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQogewogCWlmICghc3RyY21wKHZhciwgImhlbHAuZm9ybWF0IikpIHsKIAkJaWYgKCF2YWx1ZSkKQEAgLTE1Niw5ICsyNjMsMTMgQEAKIAlpZiAoIXN0cmNtcCh2YXIsICJtYW4udmlld2VyIikpIHsKIAkJaWYgKCF2YWx1ZSkKIAkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOwotCQlyZXR1cm4gYWRkX21hbl92aWV3ZXIodmFsdWUpOworCQlhZGRfbWFuX3ZpZXdlcih2YWx1ZSk7CisJCXJldHVybiAwOwogCX0KLQlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUpOworCWlmICghcHJlZml4Y21wKHZhciwgIm1hbi4iKSkKKwkJcmV0dXJuIGFkZF9tYW5fdmlld2VyX2luZm8odmFyLCB2YWx1ZSk7CisKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKIH0KIAogLyogbW9zdCBHVUkgdGVybWluYWxzIHNldCBDT0xVTU5TIChhbHRob3VnaCBzb21lIGRvbid0IGV4cG9ydCBpdCkgKi8KQEAgLTQ1Myw2ICs1NjQsMjIgQEAKIAlzdHJidWZfcmVsZWFzZSgmbmV3X3BhdGgpOwogfQogCitzdGF0aWMgdm9pZCBleGVjX3ZpZXdlcihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYWdlKQoreworCWNvbnN0IGNoYXIgKmluZm8gPSBnZXRfbWFuX3ZpZXdlcl9pbmZvKG5hbWUpOworCisJaWYgKCFzdHJjYXNlY21wKG5hbWUsICJtYW4iKSkKKwkJZXhlY19tYW5fbWFuKGluZm8sIHBhZ2UpOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKG5hbWUsICJ3b21hbiIpKQorCQlleGVjX3dvbWFuX2VtYWNzKGluZm8sIHBhZ2UpOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKG5hbWUsICJrb25xdWVyb3IiKSkKKwkJZXhlY19tYW5fa29ucXVlcm9yKGluZm8sIHBhZ2UpOworCWVsc2UgaWYgKGluZm8pCisJCWV4ZWNfbWFuX2NtZChpbmZvLCBwYWdlKTsKKwllbHNlCisJCXdhcm5pbmcoIiclcyc6IHVua25vd24gbWFuIHZpZXdlci4iLCBuYW1lKTsKK30KKwogc3RhdGljIHZvaWQgc2hvd19tYW5fcGFnZShjb25zdCBjaGFyICpnaXRfY21kKQogewogCXN0cnVjdCBtYW5fdmlld2VyX2xpc3QgKnZpZXdlcjsKQEAgLTQ2MSw5ICs1ODgsOSBAQAogCXNldHVwX21hbl9wYXRoKCk7CiAJZm9yICh2aWV3ZXIgPSBtYW5fdmlld2VyX2xpc3Q7IHZpZXdlcjsgdmlld2VyID0gdmlld2VyLT5uZXh0KQogCXsKLQkJdmlld2VyLT5leGVjKHBhZ2UpOyAvKiB3aWxsIHJldHVybiB3aGVuIHVuYWJsZSAqLworCQlleGVjX3ZpZXdlcih2aWV3ZXItPm5hbWUsIHBhZ2UpOyAvKiB3aWxsIHJldHVybiB3aGVuIHVuYWJsZSAqLwogCX0KLQlleGVjX21hbl9tYW4ocGFnZSk7CisJZXhlY192aWV3ZXIoIm1hbiIsIHBhZ2UpOwogCWRpZSgibm8gbWFuIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0Iik7CiB9CiAKQEAgLTUxNCw3ICs2NDEsNyBAQAogCWNvbnN0IGNoYXIgKmFsaWFzOwogCiAJc2V0dXBfZ2l0X2RpcmVjdG9yeV9nZW50bHkoJm5vbmdpdCk7Ci0JZ2l0X2NvbmZpZyhnaXRfaGVscF9jb25maWcpOworCWdpdF9jb25maWcoZ2l0X2hlbHBfY29uZmlnLCBOVUxMKTsKIAogCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGJ1aWx0aW5faGVscF9vcHRpb25zLAogCQkJYnVpbHRpbl9oZWxwX3VzYWdlLCAwKTsKQEAgLTUyMiwxMiArNjQ5LDE0IEBACiAJaWYgKHNob3dfYWxsKSB7CiAJCXByaW50ZigidXNhZ2U6ICVzXG5cbiIsIGdpdF91c2FnZV9zdHJpbmcpOwogCQlsaXN0X2NvbW1hbmRzKCk7CisJCXByaW50ZigiJXNcbiIsIGdpdF9tb3JlX2luZm9fc3RyaW5nKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKCFhcmd2WzBdKSB7CiAJCXByaW50ZigidXNhZ2U6ICVzXG5cbiIsIGdpdF91c2FnZV9zdHJpbmcpOwogCQlsaXN0X2NvbW1vbl9jbWRzX2hlbHAoKTsKKwkJcHJpbnRmKCJcbiVzXG4iLCBnaXRfbW9yZV9pbmZvX3N0cmluZyk7CiAJCXJldHVybiAwOwogCX0KIApkaWZmIC0tZ2l0IGEvaHR0cC1wdXNoLmMgYi9odHRwLXB1c2guYwppbmRleCA1YjIzMDM4Li42NjU3MTJhIDEwMDY0NAotLS0gYS9odHRwLXB1c2guYworKysgYi9odHRwLXB1c2guYwpAQCAtOSw2ICs5LDcgQEAKICNpbmNsdWRlICJyZXZpc2lvbi5oIgogI2luY2x1ZGUgImV4ZWNfY21kLmgiCiAjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAibGlzdC1vYmplY3RzLmgiCiAKICNpbmNsdWRlIDxleHBhdC5oPgogCkBAIC0xMzQ5LDYgKzEzNTAsMjQgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyB2b2lkIHJlbW92ZV9sb2Nrcyh2b2lkKQoreworCXN0cnVjdCByZW1vdGVfbG9jayAqbG9jayA9IHJlbW90ZS0+bG9ja3M7CisKKwlmcHJpbnRmKHN0ZGVyciwgIlJlbW92aW5nIHJlbW90ZSBsb2Nrcy4uLlxuIik7CisJd2hpbGUgKGxvY2spIHsKKwkJdW5sb2NrX3JlbW90ZShsb2NrKTsKKwkJbG9jayA9IGxvY2stPm5leHQ7CisJfQorfQorCitzdGF0aWMgdm9pZCByZW1vdmVfbG9ja3Nfb25fc2lnbmFsKGludCBzaWdubykKK3sKKwlyZW1vdmVfbG9ja3MoKTsKKwlzaWduYWwoc2lnbm8sIFNJR19ERkwpOworCXJhaXNlKHNpZ25vKTsKK30KKwogc3RhdGljIHZvaWQgcmVtb3RlX2xzKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmbGFncywKIAkJICAgICAgdm9pZCAoKnVzZXJGdW5jKShzdHJ1Y3QgcmVtb3RlX2xzX2N0eCAqbHMpLAogCQkgICAgICB2b2lkICp1c2VyRGF0YSk7CkBAIC0xNzU5LDE1ICsxNzc4LDE1IEBACiBzdGF0aWMgdm9pZCBvbmVfcmVtb3RlX3JlZihjaGFyICpyZWZuYW1lKQogewogCXN0cnVjdCByZWYgKnJlZjsKLQl1bnNpZ25lZCBjaGFyIHJlbW90ZV9zaGExWzIwXTsKIAlzdHJ1Y3Qgb2JqZWN0ICpvYmo7Ci0JaW50IGxlbiA9IHN0cmxlbihyZWZuYW1lKSArIDE7CiAKLQlpZiAoaHR0cF9mZXRjaF9yZWYocmVtb3RlLT51cmwsIHJlZm5hbWUgKyA1IC8qICJyZWZzLyIgKi8sCi0JCQkgICByZW1vdGVfc2hhMSkgIT0gMCkgeworCXJlZiA9IGFsbG9jX3JlZl9mcm9tX3N0cihyZWZuYW1lKTsKKworCWlmIChodHRwX2ZldGNoX3JlZihyZW1vdGUtPnVybCwgcmVmKSAhPSAwKSB7CiAJCWZwcmludGYoc3RkZXJyLAogCQkJIlVuYWJsZSB0byBmZXRjaCByZWYgJXMgZnJvbSAlc1xuIiwKIAkJCXJlZm5hbWUsIHJlbW90ZS0+dXJsKTsKKwkJZnJlZShyZWYpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xNzc1LDE4ICsxNzk0LDE1IEBACiAJICogRmV0Y2ggYSBjb3B5IG9mIHRoZSBvYmplY3QgaWYgaXQgZG9lc24ndCBleGlzdCBsb2NhbGx5IC0gaXQKIAkgKiBtYXkgYmUgcmVxdWlyZWQgZm9yIHVwZGF0aW5nIHNlcnZlciBpbmZvIGxhdGVyLgogCSAqLwotCWlmIChyZW1vdGUtPmNhbl91cGRhdGVfaW5mb19yZWZzICYmICFoYXNfc2hhMV9maWxlKHJlbW90ZV9zaGExKSkgewotCQlvYmogPSBsb29rdXBfdW5rbm93bl9vYmplY3QocmVtb3RlX3NoYTEpOworCWlmIChyZW1vdGUtPmNhbl91cGRhdGVfaW5mb19yZWZzICYmICFoYXNfc2hhMV9maWxlKHJlZi0+b2xkX3NoYTEpKSB7CisJCW9iaiA9IGxvb2t1cF91bmtub3duX29iamVjdChyZWYtPm9sZF9zaGExKTsKIAkJaWYgKG9iaikgewogCQkJZnByaW50ZihzdGRlcnIsCSIgIGZldGNoICVzIGZvciAlc1xuIiwKLQkJCQlzaGExX3RvX2hleChyZW1vdGVfc2hhMSksIHJlZm5hbWUpOworCQkJCXNoYTFfdG9faGV4KHJlZi0+b2xkX3NoYTEpLCByZWZuYW1lKTsKIAkJCWFkZF9mZXRjaF9yZXF1ZXN0KG9iaik7CiAJCX0KIAl9CiAKLQlyZWYgPSB4Y2FsbG9jKDEsIHNpemVvZigqcmVmKSArIGxlbik7Ci0JaGFzaGNweShyZWYtPm9sZF9zaGExLCByZW1vdGVfc2hhMSk7Ci0JbWVtY3B5KHJlZi0+bmFtZSwgcmVmbmFtZSwgbGVuKTsKIAkqcmVtb3RlX3RhaWwgPSByZWY7CiAJcmVtb3RlX3RhaWwgPSAmcmVmLT5uZXh0OwogfQpAQCAtMTg2Myw2MSArMTg3OSwzOSBAQAogCXJldHVybiBmb3VuZDsKIH0KIAotc3RhdGljIHZvaWQgbWFya19lZGdlX3BhcmVudHNfdW5pbnRlcmVzdGluZyhzdHJ1Y3QgY29tbWl0ICpjb21taXQpCi17Ci0Jc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOwotCi0JZm9yIChwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzOyBwYXJlbnRzOyBwYXJlbnRzID0gcGFyZW50cy0+bmV4dCkgewotCQlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQgPSBwYXJlbnRzLT5pdGVtOwotCQlpZiAoIShwYXJlbnQtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpKQotCQkJY29udGludWU7Ci0JCW1hcmtfdHJlZV91bmludGVyZXN0aW5nKHBhcmVudC0+dHJlZSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBtYXJrX2VkZ2VzX3VuaW50ZXJlc3Rpbmcoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0KQotewotCWZvciAoIDsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpIHsKLQkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gbGlzdC0+aXRlbTsKLQotCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSB7Ci0JCQltYXJrX3RyZWVfdW5pbnRlcmVzdGluZyhjb21taXQtPnRyZWUpOwotCQkJY29udGludWU7Ci0JCX0KLQkJbWFya19lZGdlX3BhcmVudHNfdW5pbnRlcmVzdGluZyhjb21taXQpOwotCX0KLX0KLQogc3RhdGljIHZvaWQgYWRkX3JlbW90ZV9pbmZvX3JlZihzdHJ1Y3QgcmVtb3RlX2xzX2N0eCAqbHMpCiB7CiAJc3RydWN0IHN0cmJ1ZiAqYnVmID0gKHN0cnVjdCBzdHJidWYgKilscy0+dXNlckRhdGE7Ci0JdW5zaWduZWQgY2hhciByZW1vdGVfc2hhMVsyMF07CiAJc3RydWN0IG9iamVjdCAqbzsKIAlpbnQgbGVuOwogCWNoYXIgKnJlZl9pbmZvOworCXN0cnVjdCByZWYgKnJlZjsKIAotCWlmIChodHRwX2ZldGNoX3JlZihyZW1vdGUtPnVybCwgbHMtPmRlbnRyeV9uYW1lICsgNSAvKiAicmVmcy8iICovLAotCQkJICAgcmVtb3RlX3NoYTEpICE9IDApIHsKKwlyZWYgPSBhbGxvY19yZWZfZnJvbV9zdHIobHMtPmRlbnRyeV9uYW1lKTsKKworCWlmIChodHRwX2ZldGNoX3JlZihyZW1vdGUtPnVybCwgcmVmKSAhPSAwKSB7CiAJCWZwcmludGYoc3RkZXJyLAogCQkJIlVuYWJsZSB0byBmZXRjaCByZWYgJXMgZnJvbSAlc1xuIiwKIAkJCWxzLT5kZW50cnlfbmFtZSwgcmVtb3RlLT51cmwpOwogCQlhYm9ydGVkID0gMTsKKwkJZnJlZShyZWYpOwogCQlyZXR1cm47CiAJfQogCi0JbyA9IHBhcnNlX29iamVjdChyZW1vdGVfc2hhMSk7CisJbyA9IHBhcnNlX29iamVjdChyZWYtPm9sZF9zaGExKTsKIAlpZiAoIW8pIHsKIAkJZnByaW50ZihzdGRlcnIsCiAJCQkiVW5hYmxlIHRvIHBhcnNlIG9iamVjdCAlcyBmb3IgcmVtb3RlIHJlZiAlc1xuIiwKLQkJCXNoYTFfdG9faGV4KHJlbW90ZV9zaGExKSwgbHMtPmRlbnRyeV9uYW1lKTsKKwkJCXNoYTFfdG9faGV4KHJlZi0+b2xkX3NoYTEpLCBscy0+ZGVudHJ5X25hbWUpOwogCQlhYm9ydGVkID0gMTsKKwkJZnJlZShyZWYpOwogCQlyZXR1cm47CiAJfQogCiAJbGVuID0gc3RybGVuKGxzLT5kZW50cnlfbmFtZSkgKyA0MjsKIAlyZWZfaW5mbyA9IHhjYWxsb2MobGVuICsgMSwgMSk7CiAJc3ByaW50ZihyZWZfaW5mbywgIiVzCSVzXG4iLAotCQlzaGExX3RvX2hleChyZW1vdGVfc2hhMSksIGxzLT5kZW50cnlfbmFtZSk7CisJCXNoYTFfdG9faGV4KHJlZi0+b2xkX3NoYTEpLCBscy0+ZGVudHJ5X25hbWUpOwogCWZ3cml0ZV9idWZmZXIocmVmX2luZm8sIDEsIGxlbiwgYnVmKTsKIAlmcmVlKHJlZl9pbmZvKTsKIApAQCAtMTkzMiw2ICsxOTI2LDcgQEAKIAkJCWZyZWUocmVmX2luZm8pOwogCQl9CiAJfQorCWZyZWUocmVmKTsKIH0KIAogc3RhdGljIHZvaWQgdXBkYXRlX3JlbW90ZV9pbmZvX3JlZnMoc3RydWN0IHJlbW90ZV9sb2NrICpsb2NrKQpAQCAtMjI1NSw2ICsyMjUwLDExIEBACiAJCWdvdG8gY2xlYW51cDsKIAl9CiAKKwlzaWduYWwoU0lHSU5ULCByZW1vdmVfbG9ja3Nfb25fc2lnbmFsKTsKKwlzaWduYWwoU0lHSFVQLCByZW1vdmVfbG9ja3Nfb25fc2lnbmFsKTsKKwlzaWduYWwoU0lHUVVJVCwgcmVtb3ZlX2xvY2tzX29uX3NpZ25hbCk7CisJc2lnbmFsKFNJR1RFUk0sIHJlbW92ZV9sb2Nrc19vbl9zaWduYWwpOworCiAJLyogQ2hlY2sgd2hldGhlciB0aGUgcmVtb3RlIGhhcyBzZXJ2ZXIgaW5mbyBmaWxlcyAqLwogCXJlbW90ZS0+Y2FuX3VwZGF0ZV9pbmZvX3JlZnMgPSAwOwogCXJlbW90ZS0+aGFzX2luZm9fcmVmcyA9IHJlbW90ZV9leGlzdHMoImluZm8vcmVmcyIpOwpAQCAtMjM4NCw2ICsyMzg0LDcgQEAKIAkJfQogCQlpbml0X3JldmlzaW9ucygmcmV2cywgc2V0dXBfZ2l0X2RpcmVjdG9yeSgpKTsKIAkJc2V0dXBfcmV2aXNpb25zKGNvbW1pdF9hcmdjLCBjb21taXRfYXJndiwgJnJldnMsIE5VTEwpOworCQlyZXZzLmVkZ2VfaGludCA9IDA7IC8qIGp1c3QgaW4gY2FzZSAqLwogCQlmcmVlKG5ld19zaGExX2hleCk7CiAJCWlmIChvbGRfc2hhMV9oZXgpIHsKIAkJCWZyZWUob2xkX3NoYTFfaGV4KTsKQEAgLTIzOTQsNyArMjM5NSw3IEBACiAJCXB1c2hpbmcgPSAwOwogCQlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKCZyZXZzKSkKIAkJCWRpZSgicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKTsKLQkJbWFya19lZGdlc191bmludGVyZXN0aW5nKHJldnMuY29tbWl0cyk7CisJCW1hcmtfZWRnZXNfdW5pbnRlcmVzdGluZyhyZXZzLmNvbW1pdHMsICZyZXZzLCBOVUxMKTsKIAkJb2JqZWN0c190b19zZW5kID0gZ2V0X2RlbHRhKCZyZXZzLCByZWZfbG9jayk7CiAJCWZpbmlzaF9hbGxfYWN0aXZlX3Nsb3RzKCk7CiAKZGlmZiAtLWdpdCBhL2h0dHAtd2Fsa2VyLmMgYi9odHRwLXdhbGtlci5jCmluZGV4IDdiZGEzNGQuLjc0MDMzMDYgMTAwNjQ0Ci0tLSBhL2h0dHAtd2Fsa2VyLmMKKysrIGIvaHR0cC13YWxrZXIuYwpAQCAtNDQyLDYgKzQ0Miw4IEBACiAJCXJldHVybiAtMTsKIAogCW5ld19wYWNrID0gcGFyc2VfcGFja19pbmRleChzaGExKTsKKwlpZiAoIW5ld19wYWNrKQorCQlyZXR1cm4gLTE7IC8qIHBhcnNlX3BhY2tfaW5kZXgoKSBhbHJlYWR5IGlzc3VlZCBlcnJvciBtZXNzYWdlICovCiAJbmV3X3BhY2stPm5leHQgPSByZXBvLT5wYWNrczsKIAlyZXBvLT5wYWNrcyA9IG5ld19wYWNrOwogCXJldHVybiAwOwpAQCAtODg4LDEwICs4OTAsMTAgQEAKIAkJICAgICBkYXRhLT5hbHQtPmJhc2UpOwogfQogCi1zdGF0aWMgaW50IGZldGNoX3JlZihzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIGNoYXIgKnJlZiwgdW5zaWduZWQgY2hhciAqc2hhMSkKK3N0YXRpYyBpbnQgZmV0Y2hfcmVmKHN0cnVjdCB3YWxrZXIgKndhbGtlciwgc3RydWN0IHJlZiAqcmVmKQogewogCXN0cnVjdCB3YWxrZXJfZGF0YSAqZGF0YSA9IHdhbGtlci0+ZGF0YTsKLQlyZXR1cm4gaHR0cF9mZXRjaF9yZWYoZGF0YS0+YWx0LT5iYXNlLCByZWYsIHNoYTEpOworCXJldHVybiBodHRwX2ZldGNoX3JlZihkYXRhLT5hbHQtPmJhc2UsIHJlZik7CiB9CiAKIHN0YXRpYyB2b2lkIGNsZWFudXAoc3RydWN0IHdhbGtlciAqd2Fsa2VyKQpkaWZmIC0tZ2l0IGEvaHR0cC5jIGIvaHR0cC5jCmluZGV4IDI1NmE1ZjEuLjExMDhhYjQgMTAwNjQ0Ci0tLSBhL2h0dHAuYworKysgYi9odHRwLmMKQEAgLTEzLDE0ICsxMywxNCBAQAogY2hhciBjdXJsX2Vycm9yc3RyW0NVUkxfRVJST1JfU0laRV07CiAKIHN0YXRpYyBpbnQgY3VybF9zc2xfdmVyaWZ5ID0gLTE7Ci1zdGF0aWMgY2hhciAqc3NsX2NlcnQgPSBOVUxMOworc3RhdGljIGNvbnN0IGNoYXIgKnNzbF9jZXJ0ID0gTlVMTDsKICNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwOTAyCi1zdGF0aWMgY2hhciAqc3NsX2tleSA9IE5VTEw7CitzdGF0aWMgY29uc3QgY2hhciAqc3NsX2tleSA9IE5VTEw7CiAjZW5kaWYKICNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwOTA4Ci1zdGF0aWMgY2hhciAqc3NsX2NhcGF0aCA9IE5VTEw7CitzdGF0aWMgY29uc3QgY2hhciAqc3NsX2NhcGF0aCA9IE5VTEw7CiAjZW5kaWYKLXN0YXRpYyBjaGFyICpzc2xfY2FpbmZvID0gTlVMTDsKK3N0YXRpYyBjb25zdCBjaGFyICpzc2xfY2FpbmZvID0gTlVMTDsKIHN0YXRpYyBsb25nIGN1cmxfbG93X3NwZWVkX2xpbWl0ID0gLTE7CiBzdGF0aWMgbG9uZyBjdXJsX2xvd19zcGVlZF90aW1lID0gLTE7CiBzdGF0aWMgaW50IGN1cmxfZnRwX25vX2Vwc3YgPSAwOwpAQCAtMzAsMTAgKzMwLDExIEBACiAKIHN0YXRpYyBzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqYWN0aXZlX3F1ZXVlX2hlYWQgPSBOVUxMOwogCi1zaXplX3QgZnJlYWRfYnVmZmVyKHZvaWQgKnB0ciwgc2l6ZV90IGVsdHNpemUsIHNpemVfdCBubWVtYiwKLQkJCSAgIHN0cnVjdCBidWZmZXIgKmJ1ZmZlcikKK3NpemVfdCBmcmVhZF9idWZmZXIodm9pZCAqcHRyLCBzaXplX3QgZWx0c2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkICpidWZmZXJfKQogewogCXNpemVfdCBzaXplID0gZWx0c2l6ZSAqIG5tZW1iOworCXN0cnVjdCBidWZmZXIgKmJ1ZmZlciA9IGJ1ZmZlcl87CisKIAlpZiAoc2l6ZSA+IGJ1ZmZlci0+YnVmLmxlbiAtIGJ1ZmZlci0+cG9zbikKIAkJc2l6ZSA9IGJ1ZmZlci0+YnVmLmxlbiAtIGJ1ZmZlci0+cG9zbjsKIAltZW1jcHkocHRyLCBidWZmZXItPmJ1Zi5idWYgKyBidWZmZXItPnBvc24sIHNpemUpOwpAQCAtNDIsMTcgKzQzLDE3IEBACiAJcmV0dXJuIHNpemU7CiB9CiAKLXNpemVfdCBmd3JpdGVfYnVmZmVyKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IGVsdHNpemUsCi0JCQkgICAgc2l6ZV90IG5tZW1iLCBzdHJ1Y3Qgc3RyYnVmICpidWZmZXIpCitzaXplX3QgZndyaXRlX2J1ZmZlcihjb25zdCB2b2lkICpwdHIsIHNpemVfdCBlbHRzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQgKmJ1ZmZlcl8pCiB7CiAJc2l6ZV90IHNpemUgPSBlbHRzaXplICogbm1lbWI7CisJc3RydWN0IHN0cmJ1ZiAqYnVmZmVyID0gYnVmZmVyXzsKKwogCXN0cmJ1Zl9hZGQoYnVmZmVyLCBwdHIsIHNpemUpOwogCWRhdGFfcmVjZWl2ZWQrKzsKIAlyZXR1cm4gc2l6ZTsKIH0KIAotc2l6ZV90IGZ3cml0ZV9udWxsKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IGVsdHNpemUsCi0JCQkgIHNpemVfdCBubWVtYiwgc3RydWN0IHN0cmJ1ZiAqYnVmZmVyKQorc2l6ZV90IGZ3cml0ZV9udWxsKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IGVsdHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCAqc3RyYnVmKQogewogCWRhdGFfcmVjZWl2ZWQrKzsKIAlyZXR1cm4gZWx0c2l6ZSAqIG5tZW1iOwpAQCAtOTAsNyArOTEsNyBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgaHR0cF9vcHRpb25zKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCitzdGF0aWMgaW50IGh0dHBfb3B0aW9ucyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKIHsKIAlpZiAoIXN0cmNtcCgiaHR0cC5zc2x2ZXJpZnkiLCB2YXIpKSB7CiAJCWlmIChjdXJsX3NzbF92ZXJpZnkgPT0gLTEpIHsKQEAgLTEwMCwzOSArMTAxLDI3IEBACiAJfQogCiAJaWYgKCFzdHJjbXAoImh0dHAuc3NsY2VydCIsIHZhcikpIHsKLQkJaWYgKHNzbF9jZXJ0ID09IE5VTEwpIHsKLQkJCWlmICghdmFsdWUpCi0JCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7Ci0JCQlzc2xfY2VydCA9IHhzdHJkdXAodmFsdWUpOwotCQl9CisJCWlmIChzc2xfY2VydCA9PSBOVUxMKQorCQkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZzc2xfY2VydCwgdmFyLCB2YWx1ZSk7CiAJCXJldHVybiAwOwogCX0KICNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwOTAyCiAJaWYgKCFzdHJjbXAoImh0dHAuc3Nsa2V5IiwgdmFyKSkgewotCQlpZiAoc3NsX2tleSA9PSBOVUxMKSB7Ci0JCQlpZiAoIXZhbHVlKQotCQkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOwotCQkJc3NsX2tleSA9IHhzdHJkdXAodmFsdWUpOwotCQl9CisJCWlmIChzc2xfa2V5ID09IE5VTEwpCisJCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJnNzbF9rZXksIHZhciwgdmFsdWUpOwogCQlyZXR1cm4gMDsKIAl9CiAjZW5kaWYKICNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwOTA4CiAJaWYgKCFzdHJjbXAoImh0dHAuc3NsY2FwYXRoIiwgdmFyKSkgewotCQlpZiAoc3NsX2NhcGF0aCA9PSBOVUxMKSB7Ci0JCQlpZiAoIXZhbHVlKQotCQkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOwotCQkJc3NsX2NhcGF0aCA9IHhzdHJkdXAodmFsdWUpOwotCQl9CisJCWlmIChzc2xfY2FwYXRoID09IE5VTEwpCisJCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJnNzbF9jYXBhdGgsIHZhciwgdmFsdWUpOwogCQlyZXR1cm4gMDsKIAl9CiAjZW5kaWYKIAlpZiAoIXN0cmNtcCgiaHR0cC5zc2xjYWluZm8iLCB2YXIpKSB7Ci0JCWlmIChzc2xfY2FpbmZvID09IE5VTEwpIHsKLQkJCWlmICghdmFsdWUpCi0JCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7Ci0JCQlzc2xfY2FpbmZvID0geHN0cmR1cCh2YWx1ZSk7Ci0JCX0KKwkJaWYgKHNzbF9jYWluZm8gPT0gTlVMTCkKKwkJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmc3NsX2NhaW5mbywgdmFyLCB2YWx1ZSk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTY5LDcgKzE1OCw3IEBACiAJfQogCiAJLyogRmFsbCBiYWNrIG9uIHRoZSBkZWZhdWx0IG9uZXMgKi8KLQlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUpOworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOwogfQogCiBzdGF0aWMgQ1VSTCogZ2V0X2N1cmxfaGFuZGxlKHZvaWQpCkBAIC0yNjMsNyArMjUyLDcgQEAKIAlpZiAobG93X3NwZWVkX3RpbWUgIT0gTlVMTCkKIAkJY3VybF9sb3dfc3BlZWRfdGltZSA9IHN0cnRvbChsb3dfc3BlZWRfdGltZSwgTlVMTCwgMTApOwogCi0JZ2l0X2NvbmZpZyhodHRwX29wdGlvbnMpOworCWdpdF9jb25maWcoaHR0cF9vcHRpb25zLCBOVUxMKTsKIAogCWlmIChjdXJsX3NzbF92ZXJpZnkgPT0gLTEpCiAJCWN1cmxfc3NsX3ZlcmlmeSA9IDE7CkBAIC01ODMsMTQgKzU3MiwxNSBAQAogCWludCBsZW4sIGJhc2VsZW4sIGNoOwogCiAJYmFzZWxlbiA9IHN0cmxlbihiYXNlKTsKLQlsZW4gPSBiYXNlbGVuICsgNzsgLyogIi9yZWZzLyIgKyBOVUwgKi8KKwlsZW4gPSBiYXNlbGVuICsgMjsgLyogJy8nIGFmdGVyIGJhc2UgYW5kIHRlcm1pbmF0aW5nIE5VTCAqLwogCWZvciAoY3AgPSByZWY7IChjaCA9ICpjcCkgIT0gMDsgY3ArKywgbGVuKyspCiAJCWlmIChuZWVkc19xdW90ZShjaCkpCiAJCQlsZW4gKz0gMjsgLyogZXh0cmEgdHdvIGhleCBwbHVzIHJlcGxhY2VtZW50ICUgKi8KIAlxcmVmID0geG1hbGxvYyhsZW4pOwogCW1lbWNweShxcmVmLCBiYXNlLCBiYXNlbGVuKTsKLQltZW1jcHkocXJlZiArIGJhc2VsZW4sICIvcmVmcy8iLCA2KTsKLQlmb3IgKGNwID0gcmVmLCBkcCA9IHFyZWYgKyBiYXNlbGVuICsgNjsgKGNoID0gKmNwKSAhPSAwOyBjcCsrKSB7CisJZHAgPSBxcmVmICsgYmFzZWxlbjsKKwkqKGRwKyspID0gJy8nOworCWZvciAoY3AgPSByZWY7IChjaCA9ICpjcCkgIT0gMDsgY3ArKykgewogCQlpZiAobmVlZHNfcXVvdGUoY2gpKSB7CiAJCQkqZHArKyA9ICclJzsKIAkJCSpkcCsrID0gaGV4KChjaCA+PiA0KSAmIDB4Rik7CkBAIC02MDQsNyArNTk0LDcgQEAKIAlyZXR1cm4gcXJlZjsKIH0KIAotaW50IGh0dHBfZmV0Y2hfcmVmKGNvbnN0IGNoYXIgKmJhc2UsIGNvbnN0IGNoYXIgKnJlZiwgdW5zaWduZWQgY2hhciAqc2hhMSkKK2ludCBodHRwX2ZldGNoX3JlZihjb25zdCBjaGFyICpiYXNlLCBzdHJ1Y3QgcmVmICpyZWYpCiB7CiAJY2hhciAqdXJsOwogCXN0cnVjdCBzdHJidWYgYnVmZmVyID0gU1RSQlVGX0lOSVQ7CkBAIC02MTIsNyArNjAyLDcgQEAKIAlzdHJ1Y3Qgc2xvdF9yZXN1bHRzIHJlc3VsdHM7CiAJaW50IHJldDsKIAotCXVybCA9IHF1b3RlX3JlZl91cmwoYmFzZSwgcmVmKTsKKwl1cmwgPSBxdW90ZV9yZWZfdXJsKGJhc2UsIHJlZi0+bmFtZSk7CiAJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOwogCXNsb3QtPnJlc3VsdHMgPSAmcmVzdWx0czsKIAljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRklMRSwgJmJ1ZmZlcik7CkBAIC02MjQsMTIgKzYxNCwxNSBAQAogCQlpZiAocmVzdWx0cy5jdXJsX3Jlc3VsdCA9PSBDVVJMRV9PSykgewogCQkJc3RyYnVmX3J0cmltKCZidWZmZXIpOwogCQkJaWYgKGJ1ZmZlci5sZW4gPT0gNDApCi0JCQkJcmV0ID0gZ2V0X3NoYTFfaGV4KGJ1ZmZlci5idWYsIHNoYTEpOwotCQkJZWxzZQorCQkJCXJldCA9IGdldF9zaGExX2hleChidWZmZXIuYnVmLCByZWYtPm9sZF9zaGExKTsKKwkJCWVsc2UgaWYgKCFwcmVmaXhjbXAoYnVmZmVyLmJ1ZiwgInJlZjogIikpIHsKKwkJCQlyZWYtPnN5bXJlZiA9IHhzdHJkdXAoYnVmZmVyLmJ1ZiArIDUpOworCQkJCXJldCA9IDA7CisJCQl9IGVsc2UKIAkJCQlyZXQgPSAxOwogCQl9IGVsc2UgewogCQkJcmV0ID0gZXJyb3IoIkNvdWxkbid0IGdldCAlcyBmb3IgJXNcbiVzIiwKLQkJCQkgICAgdXJsLCByZWYsIGN1cmxfZXJyb3JzdHIpOworCQkJCSAgICB1cmwsIHJlZi0+bmFtZSwgY3VybF9lcnJvcnN0cik7CiAJCX0KIAl9IGVsc2UgewogCQlyZXQgPSBlcnJvcigiVW5hYmxlIHRvIHN0YXJ0IHJlcXVlc3QiKTsKZGlmZiAtLWdpdCBhL2h0dHAuaCBiL2h0dHAuaAppbmRleCAwNDE2OWQ1Li45MDViNDYyIDEwMDY0NAotLS0gYS9odHRwLmgKKysrIGIvaHR0cC5oCkBAIC02NCwxMiArNjQsOSBAQAogfTsKIAogLyogQ3VybCByZXF1ZXN0IHJlYWQvd3JpdGUgY2FsbGJhY2tzICovCi1leHRlcm4gc2l6ZV90IGZyZWFkX2J1ZmZlcih2b2lkICpwdHIsIHNpemVfdCBlbHRzaXplLCBzaXplX3Qgbm1lbWIsCi0JCQkgICBzdHJ1Y3QgYnVmZmVyICpidWZmZXIpOwotZXh0ZXJuIHNpemVfdCBmd3JpdGVfYnVmZmVyKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IGVsdHNpemUsCi0JCQkgICAgc2l6ZV90IG5tZW1iLCBzdHJ1Y3Qgc3RyYnVmICpidWZmZXIpOwotZXh0ZXJuIHNpemVfdCBmd3JpdGVfbnVsbChjb25zdCB2b2lkICpwdHIsIHNpemVfdCBlbHRzaXplLAotCQkJICBzaXplX3Qgbm1lbWIsIHN0cnVjdCBzdHJidWYgKmJ1ZmZlcik7CitleHRlcm4gc2l6ZV90IGZyZWFkX2J1ZmZlcih2b2lkICpwdHIsIHNpemVfdCBlbHRzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQgKnN0cmJ1Zik7CitleHRlcm4gc2l6ZV90IGZ3cml0ZV9idWZmZXIoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3QgZWx0c2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkICpzdHJidWYpOworZXh0ZXJuIHNpemVfdCBmd3JpdGVfbnVsbChjb25zdCB2b2lkICpwdHIsIHNpemVfdCBlbHRzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQgKnN0cmJ1Zik7CiAKIC8qIFNsb3QgbGlmZWN5Y2xlIGZ1bmN0aW9ucyAqLwogZXh0ZXJuIHN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpnZXRfYWN0aXZlX3Nsb3Qodm9pZCk7CkBAIC0xMDUsNiArMTAyLDYgQEAKIAogI2RlZmluZSBtaXNzaW5nX3RhcmdldChhKSBtaXNzaW5nX190YXJnZXQoKGEpLT5odHRwX2NvZGUsIChhKS0+Y3VybF9yZXN1bHQpCiAKLWV4dGVybiBpbnQgaHR0cF9mZXRjaF9yZWYoY29uc3QgY2hhciAqYmFzZSwgY29uc3QgY2hhciAqcmVmLCB1bnNpZ25lZCBjaGFyICpzaGExKTsKK2V4dGVybiBpbnQgaHR0cF9mZXRjaF9yZWYoY29uc3QgY2hhciAqYmFzZSwgc3RydWN0IHJlZiAqcmVmKTsKIAogI2VuZGlmIC8qIEhUVFBfSCAqLwpkaWZmIC0tZ2l0IGEvaWRlbnQuYyBiL2lkZW50LmMKaW5kZXggZWQ0NGE1My4uYjM1NTA0YSAxMDA2NDQKLS0tIGEvaWRlbnQuYworKysgYi9pZGVudC5jCkBAIC0yNTAsNiArMjUwLDkgQEAKIAogY29uc3QgY2hhciAqZ2l0X2NvbW1pdHRlcl9pbmZvKGludCBmbGFnKQogeworCWlmIChnZXRlbnYoIkdJVF9DT01NSVRURVJfTkFNRSIpICYmCisJICAgIGdldGVudigiR0lUX0NPTU1JVFRFUl9FTUFJTCIpKQorCQl1c2VyX2lkZW50X2V4cGxpY2l0bHlfZ2l2ZW4gPSAxOwogCXJldHVybiBmbXRfaWRlbnQoZ2V0ZW52KCJHSVRfQ09NTUlUVEVSX05BTUUiKSwKIAkJCSBnZXRlbnYoIkdJVF9DT01NSVRURVJfRU1BSUwiKSwKIAkJCSBnZXRlbnYoIkdJVF9DT01NSVRURVJfREFURSIpLApkaWZmIC0tZ2l0IGEvaW1hcC1zZW5kLmMgYi9pbWFwLXNlbmQuYwppbmRleCBkYjY1NTk3Li4xZWMxMzEwIDEwMDY0NAotLS0gYS9pbWFwLXNlbmQuYworKysgYi9pbWFwLXNlbmQuYwpAQCAtMTI0Nyw3ICsxMjQ3LDcgQEAKIHN0YXRpYyBjaGFyICppbWFwX2ZvbGRlcjsKIAogc3RhdGljIGludAotZ2l0X2ltYXBfY29uZmlnKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsKQorZ2l0X2ltYXBfY29uZmlnKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsLCB2b2lkICpjYikKIHsKIAljaGFyIGltYXBfa2V5W10gPSAiaW1hcC4iOwogCkBAIC0xMjk2LDcgKzEyOTYsNyBAQAogCS8qIGluaXQgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yICovCiAJYXJjNF9pbml0KCk7CiAKLQlnaXRfY29uZmlnKCBnaXRfaW1hcF9jb25maWcgKTsKKwlnaXRfY29uZmlnKGdpdF9pbWFwX2NvbmZpZywgTlVMTCk7CiAKIAlpZiAoIWltYXBfZm9sZGVyKSB7CiAJCWZwcmludGYoIHN0ZGVyciwgIm5vIGltYXAgc3RvcmUgc3BlY2lmaWVkXG4iICk7CmRpZmYgLS1naXQgYS9pbmRleC1wYWNrLmMgYi9pbmRleC1wYWNrLmMKaW5kZXggOWMwYzI3OC4uN2Q1MzQ0YSAxMDA2NDQKLS0tIGEvaW5kZXgtcGFjay5jCisrKyBiL2luZGV4LXBhY2suYwpAQCAtMjYsNiArMjYsMTQgQEAKIAlvZmZfdCBvZmZzZXQ7CiB9OwogCitzdHJ1Y3QgYmFzZV9kYXRhIHsKKwlzdHJ1Y3QgYmFzZV9kYXRhICpiYXNlOworCXN0cnVjdCBiYXNlX2RhdGEgKmNoaWxkOworCXN0cnVjdCBvYmplY3RfZW50cnkgKm9iajsKKwl2b2lkICpkYXRhOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKK307CisKIC8qCiAgKiBFdmVuIGlmIHNpemVvZih1bmlvbiBkZWx0YV9iYXNlKSA9PSAyNCBvbiA2NC1iaXQgYXJjaHMsIHdlIHJlYWxseSB3YW50CiAgKiB0byBtZW1jbXAoKSBvbmx5IHRoZSBmaXJzdCAyMCBieXRlcy4KQEAgLTQzLDYgKzUxLDggQEAKIAogc3RhdGljIHN0cnVjdCBvYmplY3RfZW50cnkgKm9iamVjdHM7CiBzdGF0aWMgc3RydWN0IGRlbHRhX2VudHJ5ICpkZWx0YXM7CitzdGF0aWMgc3RydWN0IGJhc2VfZGF0YSAqYmFzZV9jYWNoZTsKK3N0YXRpYyBzaXplX3QgYmFzZV9jYWNoZV91c2VkOwogc3RhdGljIGludCBucl9vYmplY3RzOwogc3RhdGljIGludCBucl9kZWx0YXM7CiBzdGF0aWMgaW50IG5yX3Jlc29sdmVkX2RlbHRhczsKQEAgLTIxMCw2ICsyMjAsNDYgQEAKIAlkaWUoInBhY2sgaGFzIGJhZCBvYmplY3QgYXQgb2Zmc2V0ICVsdTogJXMiLCBvZmZzZXQsIGJ1Zik7CiB9CiAKK3N0YXRpYyB2b2lkIHBydW5lX2Jhc2VfZGF0YShzdHJ1Y3QgYmFzZV9kYXRhICpyZXRhaW4pCit7CisJc3RydWN0IGJhc2VfZGF0YSAqYiA9IGJhc2VfY2FjaGU7CisJZm9yIChiID0gYmFzZV9jYWNoZTsKKwkgICAgIGJhc2VfY2FjaGVfdXNlZCA+IGRlbHRhX2Jhc2VfY2FjaGVfbGltaXQgJiYgYjsKKwkgICAgIGIgPSBiLT5jaGlsZCkgeworCQlpZiAoYi0+ZGF0YSAmJiBiICE9IHJldGFpbikgeworCQkJZnJlZShiLT5kYXRhKTsKKwkJCWItPmRhdGEgPSBOVUxMOworCQkJYmFzZV9jYWNoZV91c2VkIC09IGItPnNpemU7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGxpbmtfYmFzZV9kYXRhKHN0cnVjdCBiYXNlX2RhdGEgKmJhc2UsIHN0cnVjdCBiYXNlX2RhdGEgKmMpCit7CisJaWYgKGJhc2UpCisJCWJhc2UtPmNoaWxkID0gYzsKKwllbHNlCisJCWJhc2VfY2FjaGUgPSBjOworCisJYy0+YmFzZSA9IGJhc2U7CisJYy0+Y2hpbGQgPSBOVUxMOworCWJhc2VfY2FjaGVfdXNlZCArPSBjLT5zaXplOworCXBydW5lX2Jhc2VfZGF0YShjKTsKK30KKworc3RhdGljIHZvaWQgdW5saW5rX2Jhc2VfZGF0YShzdHJ1Y3QgYmFzZV9kYXRhICpjKQoreworCXN0cnVjdCBiYXNlX2RhdGEgKmJhc2UgPSBjLT5iYXNlOworCWlmIChiYXNlKQorCQliYXNlLT5jaGlsZCA9IE5VTEw7CisJZWxzZQorCQliYXNlX2NhY2hlID0gTlVMTDsKKwlpZiAoYy0+ZGF0YSkgeworCQlmcmVlKGMtPmRhdGEpOworCQliYXNlX2NhY2hlX3VzZWQgLT0gYy0+c2l6ZTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkICp1bnBhY2tfZW50cnlfZGF0YSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKQogewogCXpfc3RyZWFtIHN0cmVhbTsKQEAgLTQyNSwzMyArNDc1LDYwIEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCByZXNvbHZlX2RlbHRhKHN0cnVjdCBvYmplY3RfZW50cnkgKmRlbHRhX29iaiwgdm9pZCAqYmFzZV9kYXRhLAotCQkJICB1bnNpZ25lZCBsb25nIGJhc2Vfc2l6ZSwgZW51bSBvYmplY3RfdHlwZSB0eXBlKQorc3RhdGljIHZvaWQgKmdldF9iYXNlX2RhdGEoc3RydWN0IGJhc2VfZGF0YSAqYykKK3sKKwlpZiAoIWMtPmRhdGEpIHsKKwkJc3RydWN0IG9iamVjdF9lbnRyeSAqb2JqID0gYy0+b2JqOworCisJCWlmIChvYmotPnR5cGUgPT0gT0JKX1JFRl9ERUxUQSB8fCBvYmotPnR5cGUgPT0gT0JKX09GU19ERUxUQSkgeworCQkJdm9pZCAqYmFzZSA9IGdldF9iYXNlX2RhdGEoYy0+YmFzZSk7CisJCQl2b2lkICpyYXcgPSBnZXRfZGF0YV9mcm9tX3BhY2sob2JqKTsKKwkJCWMtPmRhdGEgPSBwYXRjaF9kZWx0YSgKKwkJCQliYXNlLCBjLT5iYXNlLT5zaXplLAorCQkJCXJhdywgb2JqLT5zaXplLAorCQkJCSZjLT5zaXplKTsKKwkJCWZyZWUocmF3KTsKKwkJCWlmICghYy0+ZGF0YSkKKwkJCQliYWRfb2JqZWN0KG9iai0+aWR4Lm9mZnNldCwgImZhaWxlZCB0byBhcHBseSBkZWx0YSIpOworCQl9IGVsc2UKKwkJCWMtPmRhdGEgPSBnZXRfZGF0YV9mcm9tX3BhY2sob2JqKTsKKworCQliYXNlX2NhY2hlX3VzZWQgKz0gYy0+c2l6ZTsKKwkJcHJ1bmVfYmFzZV9kYXRhKGMpOworCX0KKwlyZXR1cm4gYy0+ZGF0YTsKK30KKworc3RhdGljIHZvaWQgcmVzb2x2ZV9kZWx0YShzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpkZWx0YV9vYmosCisJCQkgIHN0cnVjdCBiYXNlX2RhdGEgKmJhc2Vfb2JqLCBlbnVtIG9iamVjdF90eXBlIHR5cGUpCiB7CiAJdm9pZCAqZGVsdGFfZGF0YTsKIAl1bnNpZ25lZCBsb25nIGRlbHRhX3NpemU7Ci0Jdm9pZCAqcmVzdWx0OwotCXVuc2lnbmVkIGxvbmcgcmVzdWx0X3NpemU7CiAJdW5pb24gZGVsdGFfYmFzZSBkZWx0YV9iYXNlOwogCWludCBqLCBmaXJzdCwgbGFzdDsKKwlzdHJ1Y3QgYmFzZV9kYXRhIHJlc3VsdDsKIAogCWRlbHRhX29iai0+cmVhbF90eXBlID0gdHlwZTsKIAlkZWx0YV9kYXRhID0gZ2V0X2RhdGFfZnJvbV9wYWNrKGRlbHRhX29iaik7CiAJZGVsdGFfc2l6ZSA9IGRlbHRhX29iai0+c2l6ZTsKLQlyZXN1bHQgPSBwYXRjaF9kZWx0YShiYXNlX2RhdGEsIGJhc2Vfc2l6ZSwgZGVsdGFfZGF0YSwgZGVsdGFfc2l6ZSwKLQkJCSAgICAgJnJlc3VsdF9zaXplKTsKKwlyZXN1bHQuZGF0YSA9IHBhdGNoX2RlbHRhKGdldF9iYXNlX2RhdGEoYmFzZV9vYmopLCBiYXNlX29iai0+c2l6ZSwKKwkJCSAgICAgZGVsdGFfZGF0YSwgZGVsdGFfc2l6ZSwKKwkJCSAgICAgJnJlc3VsdC5zaXplKTsKIAlmcmVlKGRlbHRhX2RhdGEpOwotCWlmICghcmVzdWx0KQorCWlmICghcmVzdWx0LmRhdGEpCiAJCWJhZF9vYmplY3QoZGVsdGFfb2JqLT5pZHgub2Zmc2V0LCAiZmFpbGVkIHRvIGFwcGx5IGRlbHRhIik7Ci0Jc2hhMV9vYmplY3QocmVzdWx0LCByZXN1bHRfc2l6ZSwgdHlwZSwgZGVsdGFfb2JqLT5pZHguc2hhMSk7CisJc2hhMV9vYmplY3QocmVzdWx0LmRhdGEsIHJlc3VsdC5zaXplLCB0eXBlLCBkZWx0YV9vYmotPmlkeC5zaGExKTsKIAlucl9yZXNvbHZlZF9kZWx0YXMrKzsKIAorCXJlc3VsdC5vYmogPSBkZWx0YV9vYmo7CisJbGlua19iYXNlX2RhdGEoYmFzZV9vYmosICZyZXN1bHQpOworCiAJaGFzaGNweShkZWx0YV9iYXNlLnNoYTEsIGRlbHRhX29iai0+aWR4LnNoYTEpOwogCWlmICghZmluZF9kZWx0YV9jaGlsZHJlbigmZGVsdGFfYmFzZSwgJmZpcnN0LCAmbGFzdCkpIHsKIAkJZm9yIChqID0gZmlyc3Q7IGogPD0gbGFzdDsgaisrKSB7CiAJCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpjaGlsZCA9IG9iamVjdHMgKyBkZWx0YXNbal0ub2JqX25vOwogCQkJaWYgKGNoaWxkLT5yZWFsX3R5cGUgPT0gT0JKX1JFRl9ERUxUQSkKLQkJCQlyZXNvbHZlX2RlbHRhKGNoaWxkLCByZXN1bHQsIHJlc3VsdF9zaXplLCB0eXBlKTsKKwkJCQlyZXNvbHZlX2RlbHRhKGNoaWxkLCAmcmVzdWx0LCB0eXBlKTsKIAkJfQogCX0KIApAQCAtNDYxLDExICs1MzgsMTEgQEAKIAkJZm9yIChqID0gZmlyc3Q7IGogPD0gbGFzdDsgaisrKSB7CiAJCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpjaGlsZCA9IG9iamVjdHMgKyBkZWx0YXNbal0ub2JqX25vOwogCQkJaWYgKGNoaWxkLT5yZWFsX3R5cGUgPT0gT0JKX09GU19ERUxUQSkKLQkJCQlyZXNvbHZlX2RlbHRhKGNoaWxkLCByZXN1bHQsIHJlc3VsdF9zaXplLCB0eXBlKTsKKwkJCQlyZXNvbHZlX2RlbHRhKGNoaWxkLCAmcmVzdWx0LCB0eXBlKTsKIAkJfQogCX0KIAotCWZyZWUocmVzdWx0KTsKKwl1bmxpbmtfYmFzZV9kYXRhKCZyZXN1bHQpOwogfQogCiBzdGF0aWMgaW50IGNvbXBhcmVfZGVsdGFfZW50cnkoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKQEAgLTQ4MCw3ICs1NTcsNiBAQAogewogCWludCBpOwogCXN0cnVjdCBkZWx0YV9lbnRyeSAqZGVsdGEgPSBkZWx0YXM7Ci0Jdm9pZCAqZGF0YTsKIAlzdHJ1Y3Qgc3RhdCBzdDsKIAogCS8qCkBAIC00OTUsNyArNTcxLDcgQEAKIAkJCQlucl9vYmplY3RzKTsKIAlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKSB7CiAJCXN0cnVjdCBvYmplY3RfZW50cnkgKm9iaiA9ICZvYmplY3RzW2ldOwotCQlkYXRhID0gdW5wYWNrX3Jhd19lbnRyeShvYmosICZkZWx0YS0+YmFzZSk7CisJCXZvaWQgKmRhdGEgPSB1bnBhY2tfcmF3X2VudHJ5KG9iaiwgJmRlbHRhLT5iYXNlKTsKIAkJb2JqLT5yZWFsX3R5cGUgPSBvYmotPnR5cGU7CiAJCWlmIChvYmotPnR5cGUgPT0gT0JKX1JFRl9ERUxUQSB8fCBvYmotPnR5cGUgPT0gT0JKX09GU19ERUxUQSkgewogCQkJbnJfZGVsdGFzKys7CkBAIC01NDQsNiArNjIwLDcgQEAKIAkJc3RydWN0IG9iamVjdF9lbnRyeSAqb2JqID0gJm9iamVjdHNbaV07CiAJCXVuaW9uIGRlbHRhX2Jhc2UgYmFzZTsKIAkJaW50IGosIHJlZiwgcmVmX2ZpcnN0LCByZWZfbGFzdCwgb2ZzLCBvZnNfZmlyc3QsIG9mc19sYXN0OworCQlzdHJ1Y3QgYmFzZV9kYXRhIGJhc2Vfb2JqOwogCiAJCWlmIChvYmotPnR5cGUgPT0gT0JKX1JFRl9ERUxUQSB8fCBvYmotPnR5cGUgPT0gT0JKX09GU19ERUxUQSkKIAkJCWNvbnRpbnVlOwpAQCAtNTU0LDIyICs2MzEsMjQgQEAKIAkJb2ZzID0gIWZpbmRfZGVsdGFfY2hpbGRyZW4oJmJhc2UsICZvZnNfZmlyc3QsICZvZnNfbGFzdCk7CiAJCWlmICghcmVmICYmICFvZnMpCiAJCQljb250aW51ZTsKLQkJZGF0YSA9IGdldF9kYXRhX2Zyb21fcGFjayhvYmopOworCQliYXNlX29iai5kYXRhID0gZ2V0X2RhdGFfZnJvbV9wYWNrKG9iaik7CisJCWJhc2Vfb2JqLnNpemUgPSBvYmotPnNpemU7CisJCWJhc2Vfb2JqLm9iaiA9IG9iajsKKwkJbGlua19iYXNlX2RhdGEoTlVMTCwgJmJhc2Vfb2JqKTsKKwogCQlpZiAocmVmKQogCQkJZm9yIChqID0gcmVmX2ZpcnN0OyBqIDw9IHJlZl9sYXN0OyBqKyspIHsKIAkJCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpjaGlsZCA9IG9iamVjdHMgKyBkZWx0YXNbal0ub2JqX25vOwogCQkJCWlmIChjaGlsZC0+cmVhbF90eXBlID09IE9CSl9SRUZfREVMVEEpCi0JCQkJCXJlc29sdmVfZGVsdGEoY2hpbGQsIGRhdGEsCi0JCQkJCQkgICAgICBvYmotPnNpemUsIG9iai0+dHlwZSk7CisJCQkJCXJlc29sdmVfZGVsdGEoY2hpbGQsICZiYXNlX29iaiwgb2JqLT50eXBlKTsKIAkJCX0KIAkJaWYgKG9mcykKIAkJCWZvciAoaiA9IG9mc19maXJzdDsgaiA8PSBvZnNfbGFzdDsgaisrKSB7CiAJCQkJc3RydWN0IG9iamVjdF9lbnRyeSAqY2hpbGQgPSBvYmplY3RzICsgZGVsdGFzW2pdLm9ial9ubzsKIAkJCQlpZiAoY2hpbGQtPnJlYWxfdHlwZSA9PSBPQkpfT0ZTX0RFTFRBKQotCQkJCQlyZXNvbHZlX2RlbHRhKGNoaWxkLCBkYXRhLAotCQkJCQkJICAgICAgb2JqLT5zaXplLCBvYmotPnR5cGUpOworCQkJCQlyZXNvbHZlX2RlbHRhKGNoaWxkLCAmYmFzZV9vYmosIG9iai0+dHlwZSk7CiAJCQl9Ci0JCWZyZWUoZGF0YSk7CisJCXVubGlua19iYXNlX2RhdGEoJmJhc2Vfb2JqKTsKIAkJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgbnJfcmVzb2x2ZWRfZGVsdGFzKTsKIAl9CiB9CkBAIC02MDAsNyArNjc5LDggQEAKIAlyZXR1cm4gc2l6ZTsKIH0KIAotc3RhdGljIHZvaWQgYXBwZW5kX29ial90b19wYWNrKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHZvaWQgKmJ1ZiwKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICphcHBlbmRfb2JqX3RvX3BhY2soCisJCQkgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgdm9pZCAqYnVmLAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgZW51bSBvYmplY3RfdHlwZSB0eXBlKQogewogCXN0cnVjdCBvYmplY3RfZW50cnkgKm9iaiA9ICZvYmplY3RzW25yX29iamVjdHMrK107CkBAIC02MTgsOSArNjk4LDE0IEBACiAJd3JpdGVfb3JfZGllKG91dHB1dF9mZCwgaGVhZGVyLCBuKTsKIAlvYmpbMF0uaWR4LmNyYzMyID0gY3JjMzIoMCwgWl9OVUxMLCAwKTsKIAlvYmpbMF0uaWR4LmNyYzMyID0gY3JjMzIob2JqWzBdLmlkeC5jcmMzMiwgaGVhZGVyLCBuKTsKKwlvYmpbMF0uc2l6ZSA9IHNpemU7CisJb2JqWzBdLmhkcl9zaXplID0gbjsKKwlvYmpbMF0udHlwZSA9IHR5cGU7CisJb2JqWzBdLnJlYWxfdHlwZSA9IHR5cGU7CiAJb2JqWzFdLmlkeC5vZmZzZXQgPSBvYmpbMF0uaWR4Lm9mZnNldCArIG47CiAJb2JqWzFdLmlkeC5vZmZzZXQgKz0gd3JpdGVfY29tcHJlc3NlZChvdXRwdXRfZmQsIGJ1Ziwgc2l6ZSwgJm9ialswXS5pZHguY3JjMzIpOwogCWhhc2hjcHkob2JqLT5pZHguc2hhMSwgc2hhMSk7CisJcmV0dXJuIG9iajsKIH0KIAogc3RhdGljIGludCBkZWx0YV9wb3NfY29tcGFyZShjb25zdCB2b2lkICpfYSwgY29uc3Qgdm9pZCAqX2IpCkBAIC02NTUsMjggKzc0MCwzMSBAQAogCiAJZm9yIChpID0gMDsgaSA8IG47IGkrKykgewogCQlzdHJ1Y3QgZGVsdGFfZW50cnkgKmQgPSBzb3J0ZWRfYnlfcG9zW2ldOwotCQl2b2lkICpkYXRhOwotCQl1bnNpZ25lZCBsb25nIHNpemU7CiAJCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKIAkJaW50IGosIGZpcnN0LCBsYXN0OworCQlzdHJ1Y3QgYmFzZV9kYXRhIGJhc2Vfb2JqOwogCiAJCWlmIChvYmplY3RzW2QtPm9ial9ub10ucmVhbF90eXBlICE9IE9CSl9SRUZfREVMVEEpCiAJCQljb250aW51ZTsKLQkJZGF0YSA9IHJlYWRfc2hhMV9maWxlKGQtPmJhc2Uuc2hhMSwgJnR5cGUsICZzaXplKTsKLQkJaWYgKCFkYXRhKQorCQliYXNlX29iai5kYXRhID0gcmVhZF9zaGExX2ZpbGUoZC0+YmFzZS5zaGExLCAmdHlwZSwgJmJhc2Vfb2JqLnNpemUpOworCQlpZiAoIWJhc2Vfb2JqLmRhdGEpCiAJCQljb250aW51ZTsKIAorCQlpZiAoY2hlY2tfc2hhMV9zaWduYXR1cmUoZC0+YmFzZS5zaGExLCBiYXNlX29iai5kYXRhLAorCQkJCWJhc2Vfb2JqLnNpemUsIHR5cGVuYW1lKHR5cGUpKSkKKwkJCWRpZSgibG9jYWwgb2JqZWN0ICVzIGlzIGNvcnJ1cHQiLCBzaGExX3RvX2hleChkLT5iYXNlLnNoYTEpKTsKKwkJYmFzZV9vYmoub2JqID0gYXBwZW5kX29ial90b19wYWNrKGQtPmJhc2Uuc2hhMSwgYmFzZV9vYmouZGF0YSwKKwkJCWJhc2Vfb2JqLnNpemUsIHR5cGUpOworCQlsaW5rX2Jhc2VfZGF0YShOVUxMLCAmYmFzZV9vYmopOworCiAJCWZpbmRfZGVsdGFfY2hpbGRyZW4oJmQtPmJhc2UsICZmaXJzdCwgJmxhc3QpOwogCQlmb3IgKGogPSBmaXJzdDsgaiA8PSBsYXN0OyBqKyspIHsKIAkJCXN0cnVjdCBvYmplY3RfZW50cnkgKmNoaWxkID0gb2JqZWN0cyArIGRlbHRhc1tqXS5vYmpfbm87CiAJCQlpZiAoY2hpbGQtPnJlYWxfdHlwZSA9PSBPQkpfUkVGX0RFTFRBKQotCQkJCXJlc29sdmVfZGVsdGEoY2hpbGQsIGRhdGEsIHNpemUsIHR5cGUpOworCQkJCXJlc29sdmVfZGVsdGEoY2hpbGQsICZiYXNlX29iaiwgdHlwZSk7CiAJCX0KIAotCQlpZiAoY2hlY2tfc2hhMV9zaWduYXR1cmUoZC0+YmFzZS5zaGExLCBkYXRhLCBzaXplLCB0eXBlbmFtZSh0eXBlKSkpCi0JCQlkaWUoImxvY2FsIG9iamVjdCAlcyBpcyBjb3JydXB0Iiwgc2hhMV90b19oZXgoZC0+YmFzZS5zaGExKSk7Ci0JCWFwcGVuZF9vYmpfdG9fcGFjayhkLT5iYXNlLnNoYTEsIGRhdGEsIHNpemUsIHR5cGUpOwotCQlmcmVlKGRhdGEpOworCQl1bmxpbmtfYmFzZV9kYXRhKCZiYXNlX29iaik7CiAJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsIG5yX3Jlc29sdmVkX2RlbHRhcyk7CiAJfQogCWZyZWUoc29ydGVkX2J5X3Bvcyk7CkBAIC02OTQsNiArNzgyLDcgQEAKIAlpZiAoIWZyb21fc3RkaW4pIHsKIAkJY2xvc2UoaW5wdXRfZmQpOwogCX0gZWxzZSB7CisJCWZzeW5jX29yX2RpZShvdXRwdXRfZmQsIGN1cnJfcGFja19uYW1lKTsKIAkJZXJyID0gY2xvc2Uob3V0cHV0X2ZkKTsKIAkJaWYgKGVycikKIAkJCWRpZSgiZXJyb3Igd2hpbGUgY2xvc2luZyBwYWNrIGZpbGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKQEAgLTc2NSw3ICs4NTQsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBnaXRfaW5kZXhfcGFja19jb25maWcoY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdikKK3N0YXRpYyBpbnQgZ2l0X2luZGV4X3BhY2tfY29uZmlnKGNvbnN0IGNoYXIgKmssIGNvbnN0IGNoYXIgKnYsIHZvaWQgKmNiKQogewogCWlmICghc3RyY21wKGssICJwYWNrLmluZGV4dmVyc2lvbiIpKSB7CiAJCXBhY2tfaWR4X2RlZmF1bHRfdmVyc2lvbiA9IGdpdF9jb25maWdfaW50KGssIHYpOwpAQCAtNzczLDcgKzg2Miw3IEBACiAJCQlkaWUoImJhZCBwYWNrLmluZGV4dmVyc2lvbj0lZCIsIHBhY2tfaWR4X2RlZmF1bHRfdmVyc2lvbik7CiAJCXJldHVybiAwOwogCX0KLQlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKGssIHYpOworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcoaywgdiwgY2IpOwogfQogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCkBAIC03ODYsNyArODc1LDcgQEAKIAlzdHJ1Y3QgcGFja19pZHhfZW50cnkgKippZHhfb2JqZWN0czsKIAl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwogCi0JZ2l0X2NvbmZpZyhnaXRfaW5kZXhfcGFja19jb25maWcpOworCWdpdF9jb25maWcoZ2l0X2luZGV4X3BhY2tfY29uZmlnLCBOVUxMKTsKIAogCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKIAkJY2hhciAqYXJnID0gYXJndltpXTsKZGlmZiAtLWdpdCBhL2xsLW1lcmdlLmMgYi9sbC1tZXJnZS5jCmluZGV4IDVhZTc0MzMuLjk4MzdjODQgMTAwNjQ0Ci0tLSBhL2xsLW1lcmdlLmMKKysrIGIvbGwtbWVyZ2UuYwpAQCAtMjI1LDcgKzIyNSw3IEBACiBzdGF0aWMgc3RydWN0IGxsX21lcmdlX2RyaXZlciAqbGxfdXNlcl9tZXJnZSwgKipsbF91c2VyX21lcmdlX3RhaWw7CiBzdGF0aWMgY29uc3QgY2hhciAqZGVmYXVsdF9sbF9tZXJnZTsKIAotc3RhdGljIGludCByZWFkX21lcmdlX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQorc3RhdGljIGludCByZWFkX21lcmdlX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKIHsKIAlzdHJ1Y3QgbGxfbWVyZ2VfZHJpdmVyICpmbjsKIAljb25zdCBjaGFyICplcCwgKm5hbWU7CkBAIC0zMDksNyArMzA5LDcgQEAKIAlpZiAobGxfdXNlcl9tZXJnZV90YWlsKQogCQlyZXR1cm47CiAJbGxfdXNlcl9tZXJnZV90YWlsID0gJmxsX3VzZXJfbWVyZ2U7Ci0JZ2l0X2NvbmZpZyhyZWFkX21lcmdlX2NvbmZpZyk7CisJZ2l0X2NvbmZpZyhyZWFkX21lcmdlX2NvbmZpZywgTlVMTCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbGxfbWVyZ2VfZHJpdmVyICpmaW5kX2xsX21lcmdlX2RyaXZlcihjb25zdCBjaGFyICptZXJnZV9hdHRyKQpkaWZmIC0tZ2l0IGEvbG9ja2ZpbGUuYyBiL2xvY2tmaWxlLmMKaW5kZXggNjYzZjE4Zi4uNDAyMzc5NyAxMDA2NDQKLS0tIGEvbG9ja2ZpbGUuYworKysgYi9sb2NrZmlsZS5jCkBAIC0yNCw3ICsyNCw3IEBACiBzdGF0aWMgdm9pZCByZW1vdmVfbG9ja19maWxlX29uX3NpZ25hbChpbnQgc2lnbm8pCiB7CiAJcmVtb3ZlX2xvY2tfZmlsZSgpOwotCXNpZ25hbChTSUdJTlQsIFNJR19ERkwpOworCXNpZ25hbChzaWdubywgU0lHX0RGTCk7CiAJcmFpc2Uoc2lnbm8pOwogfQogCkBAIC0xMzUsNiArMTM1LDkgQEAKIAlpZiAoMCA8PSBsay0+ZmQpIHsKIAkJaWYgKCFsb2NrX2ZpbGVfbGlzdCkgewogCQkJc2lnbmFsKFNJR0lOVCwgcmVtb3ZlX2xvY2tfZmlsZV9vbl9zaWduYWwpOworCQkJc2lnbmFsKFNJR0hVUCwgcmVtb3ZlX2xvY2tfZmlsZV9vbl9zaWduYWwpOworCQkJc2lnbmFsKFNJR1RFUk0sIHJlbW92ZV9sb2NrX2ZpbGVfb25fc2lnbmFsKTsKKwkJCXNpZ25hbChTSUdRVUlULCByZW1vdmVfbG9ja19maWxlX29uX3NpZ25hbCk7CiAJCQlhdGV4aXQocmVtb3ZlX2xvY2tfZmlsZSk7CiAJCX0KIAkJbGstPm93bmVyID0gZ2V0cGlkKCk7CkBAIC0xNjAsNiArMTYzLDM0IEBACiAJcmV0dXJuIGZkOwogfQogCitpbnQgaG9sZF9sb2NrX2ZpbGVfZm9yX2FwcGVuZChzdHJ1Y3QgbG9ja19maWxlICpsaywgY29uc3QgY2hhciAqcGF0aCwgaW50IGRpZV9vbl9lcnJvcikKK3sKKwlpbnQgZmQsIG9yaWdfZmQ7CisKKwlmZCA9IGxvY2tfZmlsZShsaywgcGF0aCk7CisJaWYgKGZkIDwgMCkgeworCQlpZiAoZGllX29uX2Vycm9yKQorCQkJZGllKCJ1bmFibGUgdG8gY3JlYXRlICclcy5sb2NrJzogJXMiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOworCQlyZXR1cm4gZmQ7CisJfQorCisJb3JpZ19mZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOworCWlmIChvcmlnX2ZkIDwgMCkgeworCQlpZiAoZXJybm8gIT0gRU5PRU5UKSB7CisJCQlpZiAoZGllX29uX2Vycm9yKQorCQkJCWRpZSgiY2Fubm90IG9wZW4gJyVzJyBmb3IgY29weWluZyIsIHBhdGgpOworCQkJY2xvc2UoZmQpOworCQkJcmV0dXJuIGVycm9yKCJjYW5ub3Qgb3BlbiAnJXMnIGZvciBjb3B5aW5nIiwgcGF0aCk7CisJCX0KKwl9IGVsc2UgaWYgKGNvcHlfZmQob3JpZ19mZCwgZmQpKSB7CisJCWlmIChkaWVfb25fZXJyb3IpCisJCQlleGl0KDEyOCk7CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gZmQ7Cit9CisKIGludCBjbG9zZV9sb2NrX2ZpbGUoc3RydWN0IGxvY2tfZmlsZSAqbGspCiB7CiAJaW50IGZkID0gbGstPmZkOwpkaWZmIC0tZ2l0IGEvbG9nLXRyZWUuYyBiL2xvZy10cmVlLmMKaW5kZXggNWIyOTYzOS4uNTUwNTYwNiAxMDA2NDQKLS0tIGEvbG9nLXRyZWUuYworKysgYi9sb2ctdHJlZS5jCkBAIC0xLDYgKzEsNyBAQAogI2luY2x1ZGUgImNhY2hlLmgiCiAjaW5jbHVkZSAiZGlmZi5oIgogI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImdyYXBoLmgiCiAjaW5jbHVkZSAibG9nLXRyZWUuaCIKICNpbmNsdWRlICJyZWZsb2ctd2Fsay5oIgogCkBAIC0xNjUsMTEgKzE2NiwxNiBAQAogCX0KIAogCXByaW50ZigiRnJvbSAlcyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDFcbiIsIG5hbWUpOwotCWlmIChvcHQtPm1lc3NhZ2VfaWQpCisJZ3JhcGhfc2hvd19vbmVsaW5lKG9wdC0+Z3JhcGgpOworCWlmIChvcHQtPm1lc3NhZ2VfaWQpIHsKIAkJcHJpbnRmKCJNZXNzYWdlLUlkOiA8JXM+XG4iLCBvcHQtPm1lc3NhZ2VfaWQpOwotCWlmIChvcHQtPnJlZl9tZXNzYWdlX2lkKQorCQlncmFwaF9zaG93X29uZWxpbmUob3B0LT5ncmFwaCk7CisJfQorCWlmIChvcHQtPnJlZl9tZXNzYWdlX2lkKSB7CiAJCXByaW50ZigiSW4tUmVwbHktVG86IDwlcz5cblJlZmVyZW5jZXM6IDwlcz5cbiIsCiAJCSAgICAgICBvcHQtPnJlZl9tZXNzYWdlX2lkLCBvcHQtPnJlZl9tZXNzYWdlX2lkKTsKKwkJZ3JhcGhfc2hvd19vbmVsaW5lKG9wdC0+Z3JhcGgpOworCX0KIAlpZiAob3B0LT5taW1lX2JvdW5kYXJ5KSB7CiAJCXN0YXRpYyBjaGFyIHN1YmplY3RfYnVmZmVyWzEwMjRdOwogCQlzdGF0aWMgY2hhciBidWZmZXJbMTAyNF07CkBAIC0yMDgsNTQgKzIxNCw3NiBAQAogCSpleHRyYV9oZWFkZXJzX3AgPSBleHRyYV9oZWFkZXJzOwogfQogCi12b2lkIHNob3dfbG9nKHN0cnVjdCByZXZfaW5mbyAqb3B0LCBjb25zdCBjaGFyICpzZXApCit2b2lkIHNob3dfbG9nKHN0cnVjdCByZXZfaW5mbyAqb3B0KQogewogCXN0cnVjdCBzdHJidWYgbXNnYnVmOwogCXN0cnVjdCBsb2dfaW5mbyAqbG9nID0gb3B0LT5sb2dpbmZvOwogCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGxvZy0+Y29tbWl0LCAqcGFyZW50ID0gbG9nLT5wYXJlbnQ7CiAJaW50IGFiYnJldiA9IG9wdC0+ZGlmZm9wdC5hYmJyZXY7CiAJaW50IGFiYnJldl9jb21taXQgPSBvcHQtPmFiYnJldl9jb21taXQgPyBvcHQtPmFiYnJldiA6IDQwOwotCWNvbnN0IGNoYXIgKmV4dHJhOwogCWNvbnN0IGNoYXIgKnN1YmplY3QgPSBOVUxMLCAqZXh0cmFfaGVhZGVycyA9IG9wdC0+ZXh0cmFfaGVhZGVyczsKIAlpbnQgbmVlZF84Yml0X2N0ZSA9IDA7CiAKIAlvcHQtPmxvZ2luZm8gPSBOVUxMOwogCWlmICghb3B0LT52ZXJib3NlX2hlYWRlcikgewotCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBCT1VOREFSWSkKLQkJCXB1dGNoYXIoJy0nKTsKLQkJZWxzZSBpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQotCQkJcHV0Y2hhcignXicpOwotCQllbHNlIGlmIChvcHQtPmxlZnRfcmlnaHQpIHsKLQkJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFNZTU1FVFJJQ19MRUZUKQotCQkJCXB1dGNoYXIoJzwnKTsKLQkJCWVsc2UKLQkJCQlwdXRjaGFyKCc+Jyk7CisJCWdyYXBoX3Nob3dfY29tbWl0KG9wdC0+Z3JhcGgpOworCisJCWlmICghb3B0LT5ncmFwaCkgeworCQkJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQk9VTkRBUlkpCisJCQkJcHV0Y2hhcignLScpOworCQkJZWxzZSBpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQkJCXB1dGNoYXIoJ14nKTsKKwkJCWVsc2UgaWYgKG9wdC0+bGVmdF9yaWdodCkgeworCQkJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFNZTU1FVFJJQ19MRUZUKQorCQkJCQlwdXRjaGFyKCc8Jyk7CisJCQkJZWxzZQorCQkJCQlwdXRjaGFyKCc+Jyk7CisJCQl9CiAJCX0KIAkJZnB1dHMoZGlmZl91bmlxdWVfYWJicmV2KGNvbW1pdC0+b2JqZWN0LnNoYTEsIGFiYnJldl9jb21taXQpLCBzdGRvdXQpOwotCQlpZiAob3B0LT5wYXJlbnRzKQorCQlpZiAob3B0LT5wcmludF9wYXJlbnRzKQogCQkJc2hvd19wYXJlbnRzKGNvbW1pdCwgYWJicmV2X2NvbW1pdCk7CiAJCXNob3dfZGVjb3JhdGlvbnMoY29tbWl0KTsKKwkJaWYgKG9wdC0+Z3JhcGggJiYgIWdyYXBoX2lzX2NvbW1pdF9maW5pc2hlZChvcHQtPmdyYXBoKSkgeworCQkJcHV0Y2hhcignXG4nKTsKKwkJCWdyYXBoX3Nob3dfcmVtYWluZGVyKG9wdC0+Z3JhcGgpOworCQl9CiAJCXB1dGNoYXIob3B0LT5kaWZmb3B0LmxpbmVfdGVybWluYXRpb24pOwogCQlyZXR1cm47CiAJfQogCiAJLyoKLQkgKiBUaGUgIm9uZWxpbmUiIGZvcm1hdCBoYXMgc2V2ZXJhbCBzcGVjaWFsIGNhc2VzOgotCSAqICAtIFRoZSBwcmV0dHktcHJpbnRlZCBjb21taXQgbGFja3MgYSBuZXdsaW5lIGF0IHRoZSBlbmQKLQkgKiAgICBvZiB0aGUgYnVmZmVyLCBidXQgd2UgZG8gd2FudCB0byBtYWtlIHN1cmUgdGhhdCB3ZQotCSAqICAgIGhhdmUgYSBuZXdsaW5lIHRoZXJlLiBJZiB0aGUgc2VwYXJhdG9yIGlzbid0IGFscmVhZHkKLQkgKiAgICBhIG5ld2xpbmUsIGFkZCBhbiBleHRyYSBvbmUuCi0JICogIC0gdW5saWtlIG90aGVyIGxvZyBtZXNzYWdlcywgdGhlIG9uZS1saW5lIGZvcm1hdCBkb2VzCi0JICogICAgbm90IGhhdmUgYW4gZW1wdHkgbGluZSBiZXR3ZWVuIGVudHJpZXMuCisJICogSWYgdXNlX3Rlcm1pbmF0b3IgaXMgc2V0LCBhZGQgYSBuZXdsaW5lIGF0IHRoZSBlbmQgb2YgdGhlIGVudHJ5LgorCSAqIE90aGVyd2lzZSwgYWRkIGEgZGlmZm9wdC5saW5lX3Rlcm1pbmF0aW9uIGNoYXJhY3RlciBiZWZvcmUgYWxsCisJICogZW50cmllcyBidXQgdGhlIGZpcnN0LiAgKElPVywgYXMgYSBzZXBhcmF0b3IgYmV0d2VlbiBlbnRyaWVzKQogCSAqLwotCWV4dHJhID0gIiI7Ci0JaWYgKCpzZXAgIT0gJ1xuJyAmJiBvcHQtPmNvbW1pdF9mb3JtYXQgPT0gQ01JVF9GTVRfT05FTElORSkKLQkJZXh0cmEgPSAiXG4iOwotCWlmIChvcHQtPnNob3duX29uZSAmJiBvcHQtPmNvbW1pdF9mb3JtYXQgIT0gQ01JVF9GTVRfT05FTElORSkKKwlpZiAob3B0LT5zaG93bl9vbmUgJiYgIW9wdC0+dXNlX3Rlcm1pbmF0b3IpIHsKKwkJLyoKKwkJICogSWYgZW50cmllcyBhcmUgc2VwYXJhdGVkIGJ5IGEgbmV3bGluZSwgdGhlIG91dHB1dAorCQkgKiBzaG91bGQgbG9vayBodW1hbi1yZWFkYWJsZS4gIElmIHRoZSBsYXN0IGVudHJ5IGVuZGVkCisJCSAqIHdpdGggYSBuZXdsaW5lLCBwcmludCB0aGUgZ3JhcGggb3V0cHV0IGJlZm9yZSB0aGlzCisJCSAqIG5ld2xpbmUuICBPdGhlcndpc2UgaXQgd2lsbCBlbmQgdXAgYXMgYSBjb21wbGV0ZWx5IGJsYW5rCisJCSAqIGxpbmUgYW5kIHdpbGwgbG9vayBsaWtlIGEgZ2FwIGluIHRoZSBncmFwaC4KKwkJICoKKwkJICogSWYgdGhlIGVudHJ5IHNlcGFyYXRvciBpcyBub3QgYSBuZXdsaW5lLCB0aGUgb3V0cHV0IGlzCisJCSAqIHByaW1hcmlseSBpbnRlbmRlZCBmb3IgcHJvZ3JhbW1hdGljIGNvbnN1bXB0aW9uLCBhbmQgd2UKKwkJICogbmV2ZXIgd2FudCB0aGUgZXh0cmEgZ3JhcGggb3V0cHV0IGJlZm9yZSB0aGUgZW50cnkKKwkJICogc2VwYXJhdG9yLgorCQkgKi8KKwkJaWYgKG9wdC0+ZGlmZm9wdC5saW5lX3Rlcm1pbmF0aW9uID09ICdcbicgJiYKKwkJICAgICFvcHQtPm1pc3NpbmdfbmV3bGluZSkKKwkJCWdyYXBoX3Nob3dfcGFkZGluZyhvcHQtPmdyYXBoKTsKIAkJcHV0Y2hhcihvcHQtPmRpZmZvcHQubGluZV90ZXJtaW5hdGlvbik7CisJfQogCW9wdC0+c2hvd25fb25lID0gMTsKIAogCS8qCisJICogSWYgdGhlIGhpc3RvcnkgZ3JhcGggd2FzIHJlcXVlc3RlZCwKKwkgKiBwcmludCB0aGUgZ3JhcGgsIHVwIHRvIHRoaXMgY29tbWl0J3MgbGluZQorCSAqLworCWdyYXBoX3Nob3dfY29tbWl0KG9wdC0+Z3JhcGgpOworCisJLyoKIAkgKiBQcmludCBoZWFkZXIgbGluZSBvZiBoZWFkZXIuLgogCSAqLwogCkBAIC0yNjcsMTkgKzI5NSwyMiBAQAogCQlmcHV0cyhkaWZmX2dldF9jb2xvcl9vcHQoJm9wdC0+ZGlmZm9wdCwgRElGRl9DT01NSVQpLCBzdGRvdXQpOwogCQlpZiAob3B0LT5jb21taXRfZm9ybWF0ICE9IENNSVRfRk1UX09ORUxJTkUpCiAJCQlmcHV0cygiY29tbWl0ICIsIHN0ZG91dCk7Ci0JCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIEJPVU5EQVJZKQotCQkJcHV0Y2hhcignLScpOwotCQllbHNlIGlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCi0JCQlwdXRjaGFyKCdeJyk7Ci0JCWVsc2UgaWYgKG9wdC0+bGVmdF9yaWdodCkgewotCQkJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgU1lNTUVUUklDX0xFRlQpCi0JCQkJcHV0Y2hhcignPCcpOwotCQkJZWxzZQotCQkJCXB1dGNoYXIoJz4nKTsKKworCQlpZiAoIW9wdC0+Z3JhcGgpIHsKKwkJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIEJPVU5EQVJZKQorCQkJCXB1dGNoYXIoJy0nKTsKKwkJCWVsc2UgaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykKKwkJCQlwdXRjaGFyKCdeJyk7CisJCQllbHNlIGlmIChvcHQtPmxlZnRfcmlnaHQpIHsKKwkJCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBTWU1NRVRSSUNfTEVGVCkKKwkJCQkJcHV0Y2hhcignPCcpOworCQkJCWVsc2UKKwkJCQkJcHV0Y2hhcignPicpOworCQkJfQogCQl9CiAJCWZwdXRzKGRpZmZfdW5pcXVlX2FiYnJldihjb21taXQtPm9iamVjdC5zaGExLCBhYmJyZXZfY29tbWl0KSwKIAkJICAgICAgc3Rkb3V0KTsKLQkJaWYgKG9wdC0+cGFyZW50cykKKwkJaWYgKG9wdC0+cHJpbnRfcGFyZW50cykKIAkJCXNob3dfcGFyZW50cyhjb21taXQsIGFiYnJldl9jb21taXQpOwogCQlpZiAocGFyZW50KQogCQkJcHJpbnRmKCIgKGZyb20gJXMpIiwKQEAgLTI4NywxNSArMzE4LDI0IEBACiAJCQkJCQkgIGFiYnJldl9jb21taXQpKTsKIAkJc2hvd19kZWNvcmF0aW9ucyhjb21taXQpOwogCQlwcmludGYoIiVzIiwgZGlmZl9nZXRfY29sb3Jfb3B0KCZvcHQtPmRpZmZvcHQsIERJRkZfUkVTRVQpKTsKLQkJcHV0Y2hhcihvcHQtPmNvbW1pdF9mb3JtYXQgPT0gQ01JVF9GTVRfT05FTElORSA/ICcgJyA6ICdcbicpOworCQlpZiAob3B0LT5jb21taXRfZm9ybWF0ID09IENNSVRfRk1UX09ORUxJTkUpIHsKKwkJCXB1dGNoYXIoJyAnKTsKKwkJfSBlbHNlIHsKKwkJCXB1dGNoYXIoJ1xuJyk7CisJCQlncmFwaF9zaG93X29uZWxpbmUob3B0LT5ncmFwaCk7CisJCX0KIAkJaWYgKG9wdC0+cmVmbG9nX2luZm8pIHsKKwkJCS8qCisJCQkgKiBzZXR1cF9yZXZpc2lvbnMoKSBlbnN1cmVzIHRoYXQgb3B0LT5yZWZsb2dfaW5mbworCQkJICogYW5kIG9wdC0+Z3JhcGggY2Fubm90IGJvdGggYmUgc2V0LAorCQkJICogc28gd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBwcmludGluZyB0aGUKKwkJCSAqIGdyYXBoIGluZm8gaGVyZS4KKwkJCSAqLwogCQkJc2hvd19yZWZsb2dfbWVzc2FnZShvcHQtPnJlZmxvZ19pbmZvLAogCQkJCSAgICBvcHQtPmNvbW1pdF9mb3JtYXQgPT0gQ01JVF9GTVRfT05FTElORSwKIAkJCQkgICAgb3B0LT5kYXRlX21vZGUpOwotCQkJaWYgKG9wdC0+Y29tbWl0X2Zvcm1hdCA9PSBDTUlUX0ZNVF9PTkVMSU5FKSB7Ci0JCQkJcHJpbnRmKCIlcyIsIHNlcCk7CisJCQlpZiAob3B0LT5jb21taXRfZm9ybWF0ID09IENNSVRfRk1UX09ORUxJTkUpCiAJCQkJcmV0dXJuOwotCQkJfQogCQl9CiAJfQogCkBAIC0zMTQsMTEgKzM1NCwzMCBAQAogCiAJaWYgKG9wdC0+YWRkX3NpZ25vZmYpCiAJCWFwcGVuZF9zaWdub2ZmKCZtc2didWYsIG9wdC0+YWRkX3NpZ25vZmYpOwotCWlmIChvcHQtPnNob3dfbG9nX3NpemUpCisJaWYgKG9wdC0+c2hvd19sb2dfc2l6ZSkgewogCQlwcmludGYoImxvZyBzaXplICVpXG4iLCAoaW50KW1zZ2J1Zi5sZW4pOworCQlncmFwaF9zaG93X29uZWxpbmUob3B0LT5ncmFwaCk7CisJfQogCi0JaWYgKG1zZ2J1Zi5sZW4pCi0JCXByaW50ZigiJXMlcyVzIiwgbXNnYnVmLmJ1ZiwgZXh0cmEsIHNlcCk7CisJLyoKKwkgKiBTZXQgb3B0LT5taXNzaW5nX25ld2xpbmUgaWYgbXNnYnVmIGRvZXNuJ3QKKwkgKiBlbmQgaW4gYSBuZXdsaW5lIChpbmNsdWRpbmcgaWYgaXQgaXMgZW1wdHkpCisJICovCisJaWYgKCFtc2didWYubGVuIHx8IG1zZ2J1Zi5idWZbbXNnYnVmLmxlbiAtIDFdICE9ICdcbicpCisJCW9wdC0+bWlzc2luZ19uZXdsaW5lID0gMTsKKwllbHNlCisJCW9wdC0+bWlzc2luZ19uZXdsaW5lID0gMDsKKworCWlmIChvcHQtPmdyYXBoKQorCQlncmFwaF9zaG93X2NvbW1pdF9tc2cob3B0LT5ncmFwaCwgJm1zZ2J1Zik7CisJZWxzZQorCQlmd3JpdGUobXNnYnVmLmJ1Ziwgc2l6ZW9mKGNoYXIpLCBtc2didWYubGVuLCBzdGRvdXQpOworCWlmIChvcHQtPnVzZV90ZXJtaW5hdG9yKSB7CisJCWlmICghb3B0LT5taXNzaW5nX25ld2xpbmUpCisJCQlncmFwaF9zaG93X3BhZGRpbmcob3B0LT5ncmFwaCk7CisJCXB1dGNoYXIoJ1xuJyk7CisJfQorCiAJc3RyYnVmX3JlbGVhc2UoJm1zZ2J1Zik7CiB9CiAKQEAgLTM0MCw3ICszOTksNyBAQAogCQkgKiBhbiBleHRyYSBuZXdsaW5lIGJldHdlZW4gdGhlIGVuZCBvZiBsb2cgYW5kIHRoZQogCQkgKiBvdXRwdXQgZm9yIHJlYWRhYmlsaXR5LgogCQkgKi8KLQkJc2hvd19sb2cob3B0LCBvcHQtPmRpZmZvcHQubXNnX3NlcCk7CisJCXNob3dfbG9nKG9wdCk7CiAJCWlmICgob3B0LT5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgJiB+RElGRl9GT1JNQVRfTk9fT1VUUFVUKSAmJgogCQkgICAgb3B0LT52ZXJib3NlX2hlYWRlciAmJgogCQkgICAgb3B0LT5jb21taXRfZm9ybWF0ICE9IENNSVRfRk1UX09ORUxJTkUpIHsKQEAgLTQyOCw3ICs0ODcsNyBAQAogCXNob3duID0gbG9nX3RyZWVfZGlmZihvcHQsIGNvbW1pdCwgJmxvZyk7CiAJaWYgKCFzaG93biAmJiBvcHQtPmxvZ2luZm8gJiYgb3B0LT5hbHdheXNfc2hvd19oZWFkZXIpIHsKIAkJbG9nLnBhcmVudCA9IE5VTEw7Ci0JCXNob3dfbG9nKG9wdCwgIiIpOworCQlzaG93X2xvZyhvcHQpOwogCQlzaG93biA9IDE7CiAJfQogCW9wdC0+bG9naW5mbyA9IE5VTEw7CmRpZmYgLS1naXQgYS9sb2ctdHJlZS5oIGIvbG9nLXRyZWUuaAppbmRleCA4OTQ2ZmYzLi41OWJhNGM0IDEwMDY0NAotLS0gYS9sb2ctdHJlZS5oCisrKyBiL2xvZy10cmVlLmgKQEAgLTExLDcgKzExLDcgQEAKIGludCBsb2dfdHJlZV9kaWZmX2ZsdXNoKHN0cnVjdCByZXZfaW5mbyAqKTsKIGludCBsb2dfdHJlZV9jb21taXQoc3RydWN0IHJldl9pbmZvICosIHN0cnVjdCBjb21taXQgKik7CiBpbnQgbG9nX3RyZWVfb3B0X3BhcnNlKHN0cnVjdCByZXZfaW5mbyAqLCBjb25zdCBjaGFyICoqLCBpbnQpOwotdm9pZCBzaG93X2xvZyhzdHJ1Y3QgcmV2X2luZm8gKm9wdCwgY29uc3QgY2hhciAqc2VwKTsKK3ZvaWQgc2hvd19sb2coc3RydWN0IHJldl9pbmZvICpvcHQpOwogdm9pZCBzaG93X2RlY29yYXRpb25zKHN0cnVjdCBjb21taXQgKmNvbW1pdCk7CiB2b2lkIGxvZ193cml0ZV9lbWFpbF9oZWFkZXJzKHN0cnVjdCByZXZfaW5mbyAqb3B0LCBjb25zdCBjaGFyICpuYW1lLAogCQkJICAgICBjb25zdCBjaGFyICoqc3ViamVjdF9wLApkaWZmIC0tZ2l0IGEvbmFtZS1oYXNoLmMgYi9uYW1lLWhhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDMxZDc4Ci0tLSAvZGV2L251bGwKKysrIGIvbmFtZS1oYXNoLmMKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBuYW1lLWhhc2guYworICoKKyAqIEhhc2hpbmcgbmFtZXMgaW4gdGhlIGluZGV4IHN0YXRlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IExpbnVzIFRvcnZhbGRzCisgKi8KKyNkZWZpbmUgTk9fVEhFX0lOREVYX0NPTVBBVElCSUxJVFlfTUFDUk9TCisjaW5jbHVkZSAiY2FjaGUuaCIKKworLyoKKyAqIFRoaXMgcmVtb3ZlcyBiaXQgNSBpZiBiaXQgNiBpcyBzZXQuCisgKgorICogVGhhdCB3aWxsIG1ha2UgVVMtQVNDSUkgY2hhcmFjdGVycyBoYXNoIHRvIHRoZWlyIHVwcGVyLWNhc2UKKyAqIGVxdWl2YWxlbnQuIFdlIGNvdWxkIGVhc2lseSBkbyB0aGlzIG9uZSB3aG9sZSB3b3JkIGF0IGEgdGltZSwKKyAqIGJ1dCB0aGF0J3MgZm9yIGZ1dHVyZSB3b3JyaWVzLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgaWNhc2VfaGFzaCh1bnNpZ25lZCBjaGFyIGMpCit7CisJcmV0dXJuIGMgJiB+KChjICYgMHg0MCkgPj4gMSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaGFzaF9uYW1lKGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuKQoreworCXVuc2lnbmVkIGludCBoYXNoID0gMHgxMjM7CisKKwlkbyB7CisJCXVuc2lnbmVkIGNoYXIgYyA9ICpuYW1lKys7CisJCWMgPSBpY2FzZV9oYXNoKGMpOworCQloYXNoID0gaGFzaCoxMDEgKyBjOworCX0gd2hpbGUgKC0tbmFtZWxlbik7CisJcmV0dXJuIGhhc2g7Cit9CisKK3N0YXRpYyB2b2lkIGhhc2hfaW5kZXhfZW50cnkoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCit7CisJdm9pZCAqKnBvczsKKwl1bnNpZ25lZCBpbnQgaGFzaDsKKworCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9IQVNIRUQpCisJCXJldHVybjsKKwljZS0+Y2VfZmxhZ3MgfD0gQ0VfSEFTSEVEOworCWNlLT5uZXh0ID0gTlVMTDsKKwloYXNoID0gaGFzaF9uYW1lKGNlLT5uYW1lLCBjZV9uYW1lbGVuKGNlKSk7CisJcG9zID0gaW5zZXJ0X2hhc2goaGFzaCwgY2UsICZpc3RhdGUtPm5hbWVfaGFzaCk7CisJaWYgKHBvcykgeworCQljZS0+bmV4dCA9ICpwb3M7CisJCSpwb3MgPSBjZTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGxhenlfaW5pdF9uYW1lX2hhc2goc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJaW50IG5yOworCisJaWYgKGlzdGF0ZS0+bmFtZV9oYXNoX2luaXRpYWxpemVkKQorCQlyZXR1cm47CisJZm9yIChuciA9IDA7IG5yIDwgaXN0YXRlLT5jYWNoZV9ucjsgbnIrKykKKwkJaGFzaF9pbmRleF9lbnRyeShpc3RhdGUsIGlzdGF0ZS0+Y2FjaGVbbnJdKTsKKwlpc3RhdGUtPm5hbWVfaGFzaF9pbml0aWFsaXplZCA9IDE7Cit9CisKK3ZvaWQgYWRkX25hbWVfaGFzaChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwljZS0+Y2VfZmxhZ3MgJj0gfkNFX1VOSEFTSEVEOworCWlmIChpc3RhdGUtPm5hbWVfaGFzaF9pbml0aWFsaXplZCkKKwkJaGFzaF9pbmRleF9lbnRyeShpc3RhdGUsIGNlKTsKK30KKworc3RhdGljIGludCBzbG93X3NhbWVfbmFtZShjb25zdCBjaGFyICpuYW1lMSwgaW50IGxlbjEsIGNvbnN0IGNoYXIgKm5hbWUyLCBpbnQgbGVuMikKK3sKKwlpZiAobGVuMSAhPSBsZW4yKQorCQlyZXR1cm4gMDsKKworCXdoaWxlIChsZW4xKSB7CisJCXVuc2lnbmVkIGNoYXIgYzEgPSAqbmFtZTErKzsKKwkJdW5zaWduZWQgY2hhciBjMiA9ICpuYW1lMisrOworCQlsZW4xLS07CisJCWlmIChjMSAhPSBjMikgeworCQkJYzEgPSB0b3VwcGVyKGMxKTsKKwkJCWMyID0gdG91cHBlcihjMik7CisJCQlpZiAoYzEgIT0gYzIpCisJCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgc2FtZV9uYW1lKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLCBpbnQgaWNhc2UpCit7CisJaW50IGxlbiA9IGNlX25hbWVsZW4oY2UpOworCisJLyoKKwkgKiBBbHdheXMgZG8gZXhhY3QgY29tcGFyZSwgZXZlbiBpZiB3ZSB3YW50IGEgY2FzZS1pZ25vcmluZyBjb21wYXJpc29uOworCSAqIHdlIGRvIHRoZSBxdWljayBleGFjdCBvbmUgZmlyc3QsIGJlY2F1c2UgaXQgd2lsbCBiZSB0aGUgY29tbW9uIGNhc2UuCisJICovCisJaWYgKGxlbiA9PSBuYW1lbGVuICYmICFjYWNoZV9uYW1lX2NvbXBhcmUobmFtZSwgbmFtZWxlbiwgY2UtPm5hbWUsIGxlbikpCisJCXJldHVybiAxOworCisJcmV0dXJuIGljYXNlICYmIHNsb3dfc2FtZV9uYW1lKG5hbWUsIG5hbWVsZW4sIGNlLT5uYW1lLCBsZW4pOworfQorCitzdHJ1Y3QgY2FjaGVfZW50cnkgKmluZGV4X25hbWVfZXhpc3RzKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwgaW50IGljYXNlKQoreworCXVuc2lnbmVkIGludCBoYXNoID0gaGFzaF9uYW1lKG5hbWUsIG5hbWVsZW4pOworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisKKwlsYXp5X2luaXRfbmFtZV9oYXNoKGlzdGF0ZSk7CisJY2UgPSBsb29rdXBfaGFzaChoYXNoLCAmaXN0YXRlLT5uYW1lX2hhc2gpOworCisJd2hpbGUgKGNlKSB7CisJCWlmICghKGNlLT5jZV9mbGFncyAmIENFX1VOSEFTSEVEKSkgeworCQkJaWYgKHNhbWVfbmFtZShjZSwgbmFtZSwgbmFtZWxlbiwgaWNhc2UpKQorCQkJCXJldHVybiBjZTsKKwkJfQorCQljZSA9IGNlLT5uZXh0OworCX0KKwlyZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL3BhY2stY2hlY2suYyBiL3BhY2stY2hlY2suYwppbmRleCAwZjhhZDJjLi5mNDg5ODczIDEwMDY0NAotLS0gYS9wYWNrLWNoZWNrLmMKKysrIGIvcGFjay1jaGVjay5jCkBAIC0yNSwxMCArMjUsMTAgQEAKIAlvZmZfdCBpbmRleF9zaXplID0gcC0+aW5kZXhfc2l6ZTsKIAljb25zdCB1bnNpZ25lZCBjaGFyICppbmRleF9iYXNlID0gcC0+aW5kZXhfZGF0YTsKIAlTSEFfQ1RYIGN0eDsKLQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwotCW9mZl90IG9mZnNldCA9IDAsIHBhY2tfc2lnID0gcC0+cGFja19zaXplIC0gMjA7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXSwgKnBhY2tfc2lnOworCW9mZl90IG9mZnNldCA9IDAsIHBhY2tfc2lnX29mcyA9IHAtPnBhY2tfc2l6ZSAtIDIwOwogCXVpbnQzMl90IG5yX29iamVjdHMsIGk7Ci0JaW50IGVycjsKKwlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgaWR4X2VudHJ5ICplbnRyaWVzOwogCiAJLyogTm90ZSB0aGF0IHRoZSBwYWNrIGhlYWRlciBjaGVja3MgYXJlIGFjdHVhbGx5IHBlcmZvcm1lZCBieQpAQCAtMzgsMjEgKzM4LDIyIEBACiAJICovCiAKIAlTSEExX0luaXQoJmN0eCk7Ci0Jd2hpbGUgKG9mZnNldCA8IHBhY2tfc2lnKSB7CisJd2hpbGUgKG9mZnNldCA8IHBhY2tfc2lnX29mcykgewogCQl1bnNpZ25lZCBpbnQgcmVtYWluaW5nOwogCQl1bnNpZ25lZCBjaGFyICppbiA9IHVzZV9wYWNrKHAsIHdfY3Vycywgb2Zmc2V0LCAmcmVtYWluaW5nKTsKIAkJb2Zmc2V0ICs9IHJlbWFpbmluZzsKLQkJaWYgKG9mZnNldCA+IHBhY2tfc2lnKQotCQkJcmVtYWluaW5nIC09ICh1bnNpZ25lZCBpbnQpKG9mZnNldCAtIHBhY2tfc2lnKTsKKwkJaWYgKG9mZnNldCA+IHBhY2tfc2lnX29mcykKKwkJCXJlbWFpbmluZyAtPSAodW5zaWduZWQgaW50KShvZmZzZXQgLSBwYWNrX3NpZ19vZnMpOwogCQlTSEExX1VwZGF0ZSgmY3R4LCBpbiwgcmVtYWluaW5nKTsKIAl9CiAJU0hBMV9GaW5hbChzaGExLCAmY3R4KTsKLQlpZiAoaGFzaGNtcChzaGExLCB1c2VfcGFjayhwLCB3X2N1cnMsIHBhY2tfc2lnLCBOVUxMKSkpCi0JCXJldHVybiBlcnJvcigiUGFja2ZpbGUgJXMgU0hBMSBtaXNtYXRjaCB3aXRoIGl0c2VsZiIsCi0JCQkgICAgIHAtPnBhY2tfbmFtZSk7Ci0JaWYgKGhhc2hjbXAoc2hhMSwgaW5kZXhfYmFzZSArIGluZGV4X3NpemUgLSA0MCkpCi0JCXJldHVybiBlcnJvcigiUGFja2ZpbGUgJXMgU0hBMSBtaXNtYXRjaCB3aXRoIGlkeCIsCi0JCQkgICAgIHAtPnBhY2tfbmFtZSk7CisJcGFja19zaWcgPSB1c2VfcGFjayhwLCB3X2N1cnMsIHBhY2tfc2lnX29mcywgTlVMTCk7CisJaWYgKGhhc2hjbXAoc2hhMSwgcGFja19zaWcpKQorCQllcnIgPSBlcnJvcigiJXMgU0hBMSBjaGVja3N1bSBtaXNtYXRjaCIsCisJCQkgICAgcC0+cGFja19uYW1lKTsKKwlpZiAoaGFzaGNtcChpbmRleF9iYXNlICsgaW5kZXhfc2l6ZSAtIDQwLCBwYWNrX3NpZykpCisJCWVyciA9IGVycm9yKCIlcyBTSEExIGRvZXMgbm90IG1hdGNoIGl0cyBpbmRkZXgiLAorCQkJICAgIHAtPnBhY2tfbmFtZSk7CiAJdW51c2VfcGFjayh3X2N1cnMpOwogCiAJLyogTWFrZSBzdXJlIGV2ZXJ5dGhpbmcgcmVhY2hhYmxlIGZyb20gaWR4IGlzIHZhbGlkLiAgU2luY2Ugd2UKQEAgLTcyLDIyICs3MywyMyBAQAogCX0KIAlxc29ydChlbnRyaWVzLCBucl9vYmplY3RzLCBzaXplb2YoKmVudHJpZXMpLCBjb21wYXJlX2VudHJpZXMpOwogCi0JZm9yIChpID0gMCwgZXJyID0gMDsgaSA8IG5yX29iamVjdHM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBucl9vYmplY3RzOyBpKyspIHsKIAkJdm9pZCAqZGF0YTsKIAkJZW51bSBvYmplY3RfdHlwZSB0eXBlOwogCQl1bnNpZ25lZCBsb25nIHNpemU7CiAKIAkJZGF0YSA9IHVucGFja19lbnRyeShwLCBlbnRyaWVzW2ldLm9mZnNldCwgJnR5cGUsICZzaXplKTsKIAkJaWYgKCFkYXRhKSB7Ci0JCQllcnIgPSBlcnJvcigiY2Fubm90IHVucGFjayAlcyBmcm9tICVzIiwKLQkJCQkgICAgc2hhMV90b19oZXgoZW50cmllc1tpXS5zaGExKSwgcC0+cGFja19uYW1lKTsKLQkJCWNvbnRpbnVlOworCQkJZXJyID0gZXJyb3IoImNhbm5vdCB1bnBhY2sgJXMgZnJvbSAlcyBhdCBvZmZzZXQgJSJQUkl1TUFYIiIsCisJCQkJICAgIHNoYTFfdG9faGV4KGVudHJpZXNbaV0uc2hhMSksIHAtPnBhY2tfbmFtZSwKKwkJCQkgICAgKHVpbnRtYXhfdCllbnRyaWVzW2ldLm9mZnNldCk7CisJCQlicmVhazsKIAkJfQogCQlpZiAoY2hlY2tfc2hhMV9zaWduYXR1cmUoZW50cmllc1tpXS5zaGExLCBkYXRhLCBzaXplLCB0eXBlbmFtZSh0eXBlKSkpIHsKIAkJCWVyciA9IGVycm9yKCJwYWNrZWQgJXMgZnJvbSAlcyBpcyBjb3JydXB0IiwKIAkJCQkgICAgc2hhMV90b19oZXgoZW50cmllc1tpXS5zaGExKSwgcC0+cGFja19uYW1lKTsKIAkJCWZyZWUoZGF0YSk7Ci0JCQljb250aW51ZTsKKwkJCWJyZWFrOwogCQl9CiAJCWZyZWUoZGF0YSk7CiAJfQpAQCAtMTU4LDMxICsxNjAsMjggQEAKIAljb25zdCB1bnNpZ25lZCBjaGFyICppbmRleF9iYXNlOwogCVNIQV9DVFggY3R4OwogCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07Ci0JaW50IHJldDsKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgcGFja193aW5kb3cgKndfY3VycyA9IE5VTEw7CiAKIAlpZiAob3Blbl9wYWNrX2luZGV4KHApKQogCQlyZXR1cm4gZXJyb3IoInBhY2tmaWxlICVzIGluZGV4IG5vdCBvcGVuZWQiLCBwLT5wYWNrX25hbWUpOwogCWluZGV4X3NpemUgPSBwLT5pbmRleF9zaXplOwogCWluZGV4X2Jhc2UgPSBwLT5pbmRleF9kYXRhOwogCi0JcmV0ID0gMDsKIAkvKiBWZXJpZnkgU0hBMSBzdW0gb2YgdGhlIGluZGV4IGZpbGUgKi8KIAlTSEExX0luaXQoJmN0eCk7CiAJU0hBMV9VcGRhdGUoJmN0eCwgaW5kZXhfYmFzZSwgKHVuc2lnbmVkIGludCkoaW5kZXhfc2l6ZSAtIDIwKSk7CiAJU0hBMV9GaW5hbChzaGExLCAmY3R4KTsKIAlpZiAoaGFzaGNtcChzaGExLCBpbmRleF9iYXNlICsgaW5kZXhfc2l6ZSAtIDIwKSkKLQkJcmV0ID0gZXJyb3IoIlBhY2tmaWxlIGluZGV4IGZvciAlcyBTSEExIG1pc21hdGNoIiwKKwkJZXJyID0gZXJyb3IoIlBhY2tmaWxlIGluZGV4IGZvciAlcyBTSEExIG1pc21hdGNoIiwKIAkJCSAgICBwLT5wYWNrX25hbWUpOwogCi0JaWYgKCFyZXQpIHsKLQkJLyogVmVyaWZ5IHBhY2sgZmlsZSAqLwotCQlzdHJ1Y3QgcGFja193aW5kb3cgKndfY3VycyA9IE5VTEw7Ci0JCXJldCA9IHZlcmlmeV9wYWNrZmlsZShwLCAmd19jdXJzKTsKLQkJdW51c2VfcGFjaygmd19jdXJzKTsKLQl9CisJLyogVmVyaWZ5IHBhY2sgZmlsZSAqLworCWVyciB8PSB2ZXJpZnlfcGFja2ZpbGUocCwgJndfY3Vycyk7CisJdW51c2VfcGFjaygmd19jdXJzKTsKIAogCWlmICh2ZXJib3NlKSB7Ci0JCWlmIChyZXQpCisJCWlmIChlcnIpCiAJCQlwcmludGYoIiVzOiBiYWRcbiIsIHAtPnBhY2tfbmFtZSk7CiAJCWVsc2UgewogCQkJc2hvd19wYWNrX2luZm8ocCk7CkBAIC0xOTAsNSArMTg5LDUgQEAKIAkJfQogCX0KIAotCXJldHVybiByZXQ7CisJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL3BhY2std3JpdGUuYyBiL3BhY2std3JpdGUuYwppbmRleCA2NjVlMmIyLi5mNTJjYWJlIDEwMDY0NAotLS0gYS9wYWNrLXdyaXRlLmMKKysrIGIvcGFjay13cml0ZS5jCkBAIC0xMzksNyArMTM5LDcgQEAKIAl9CiAKIAlzaGExd3JpdGUoZiwgc2hhMSwgMjApOwotCXNoYTFjbG9zZShmLCBOVUxMLCAxKTsKKwlzaGExY2xvc2UoZiwgTlVMTCwgQ1NVTV9GU1lOQyk7CiAJU0hBMV9GaW5hbChzaGExLCAmY3R4KTsKIAlyZXR1cm4gaW5kZXhfbmFtZTsKIH0KQEAgLTE4Myw3ICsxODMsNiBAQAogCiBjaGFyICppbmRleF9wYWNrX2xvY2tmaWxlKGludCBpcF9vdXQpCiB7Ci0JaW50IGxlbiwgczsKIAljaGFyIHBhY2tuYW1lWzQ2XTsKIAogCS8qCkBAIC0xOTMsMTEgKzE5Miw4IEBACiAJICogY2FzZSwgd2UgbmVlZCBpdCB0byByZW1vdmUgdGhlIGNvcnJlc3BvbmRpbmcgLmtlZXAgZmlsZQogCSAqIGxhdGVyIG9uLiAgSWYgd2UgZG9uJ3QgZ2V0IHRoYXQgdGhlbiB0b3VnaCBsdWNrIHdpdGggaXQuCiAJICovCi0JZm9yIChsZW4gPSAwOwotCQkgbGVuIDwgNDYgJiYgKHMgPSB4cmVhZChpcF9vdXQsIHBhY2tuYW1lK2xlbiwgNDYtbGVuKSkgPiAwOwotCQkgbGVuICs9IHMpOwotCWlmIChsZW4gPT0gNDYgJiYgcGFja25hbWVbNDVdID09ICdcbicgJiYKLQkJbWVtY21wKHBhY2tuYW1lLCAia2VlcFx0IiwgNSkgPT0gMCkgeworCWlmIChyZWFkX2luX2Z1bGwoaXBfb3V0LCBwYWNrbmFtZSwgNDYpID09IDQ2ICYmIHBhY2tuYW1lWzQ1XSA9PSAnXG4nICYmCisJICAgIG1lbWNtcChwYWNrbmFtZSwgImtlZXBcdCIsIDUpID09IDApIHsKIAkJY2hhciBwYXRoW1BBVEhfTUFYXTsKIAkJcGFja25hbWVbNDVdID0gMDsKIAkJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiJXMvcGFjay9wYWNrLSVzLmtlZXAiLApkaWZmIC0tZ2l0IGEvcGFnZXIuYyBiL3BhZ2VyLmMKaW5kZXggY2EwMDJmOS4uZGJkOTQxNCAxMDA2NDQKLS0tIGEvcGFnZXIuYworKysgYi9wYWdlci5jCkBAIC0zMyw3ICszMyw3IEBACiAJCXJldHVybjsKIAlpZiAoIXBhZ2VyKSB7CiAJCWlmICghcGFnZXJfcHJvZ3JhbSkKLQkJCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnKTsKKwkJCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKIAkJcGFnZXIgPSBwYWdlcl9wcm9ncmFtOwogCX0KIAlpZiAoIXBhZ2VyKQpkaWZmIC0tZ2l0IGEvcGFyc2Utb3B0aW9ucy5jIGIvcGFyc2Utb3B0aW9ucy5jCmluZGV4IGFjZjNmZTMuLjEyYzg4MjIgMTAwNjQ0Ci0tLSBhL3BhcnNlLW9wdGlvbnMuYworKysgYi9wYXJzZS1vcHRpb25zLmMKQEAgLTM0NCw3ICszNDQsMTAgQEAKIAkJCWJyZWFrOwogCQljYXNlIE9QVElPTl9JTlRFR0VSOgogCQkJaWYgKG9wdHMtPmZsYWdzICYgUEFSU0VfT1BUX09QVEFSRykKLQkJCQlwb3MgKz0gZnByaW50ZihzdGRlcnIsICJbPG4+XSIpOworCQkJCWlmIChvcHRzLT5sb25nX25hbWUpCisJCQkJCXBvcyArPSBmcHJpbnRmKHN0ZGVyciwgIls9PG4+XSIpOworCQkJCWVsc2UKKwkJCQkJcG9zICs9IGZwcmludGYoc3RkZXJyLCAiWzxuPl0iKTsKIAkJCWVsc2UKIAkJCQlwb3MgKz0gZnByaW50ZihzdGRlcnIsICIgPG4+Iik7CiAJCQlicmVhazsKQEAgLTM1NSwxMiArMzU4LDE4IEBACiAJCWNhc2UgT1BUSU9OX1NUUklORzoKIAkJCWlmIChvcHRzLT5hcmdoKSB7CiAJCQkJaWYgKG9wdHMtPmZsYWdzICYgUEFSU0VfT1BUX09QVEFSRykKLQkJCQkJcG9zICs9IGZwcmludGYoc3RkZXJyLCAiIFs8JXM+XSIsIG9wdHMtPmFyZ2gpOworCQkJCQlpZiAob3B0cy0+bG9uZ19uYW1lKQorCQkJCQkJcG9zICs9IGZwcmludGYoc3RkZXJyLCAiWz08JXM+XSIsIG9wdHMtPmFyZ2gpOworCQkJCQllbHNlCisJCQkJCQlwb3MgKz0gZnByaW50ZihzdGRlcnIsICJbPCVzPl0iLCBvcHRzLT5hcmdoKTsKIAkJCQllbHNlCiAJCQkJCXBvcyArPSBmcHJpbnRmKHN0ZGVyciwgIiA8JXM+Iiwgb3B0cy0+YXJnaCk7CiAJCQl9IGVsc2UgewogCQkJCWlmIChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9PUFRBUkcpCi0JCQkJCXBvcyArPSBmcHJpbnRmKHN0ZGVyciwgIiBbLi4uXSIpOworCQkJCQlpZiAob3B0cy0+bG9uZ19uYW1lKQorCQkJCQkJcG9zICs9IGZwcmludGYoc3RkZXJyLCAiWz0uLi5dIik7CisJCQkJCWVsc2UKKwkJCQkJCXBvcyArPSBmcHJpbnRmKHN0ZGVyciwgIlsuLi5dIik7CiAJCQkJZWxzZQogCQkJCQlwb3MgKz0gZnByaW50ZihzdGRlcnIsICIgLi4uIik7CiAJCQl9CkBAIC00MTYsMyArNDI1LDE1IEBACiAJKih1bnNpZ25lZCBsb25nICopKG9wdC0+dmFsdWUpID0gYXBwcm94aWRhdGUoYXJnKTsKIAlyZXR1cm4gMDsKIH0KKworLyoKKyAqIFRoaXMgc2hvdWxkIHJlYWxseSBiZSBPUFRJT05fRklMRU5BTUUgdHlwZSBhcyBhIHBhcnQgb2YKKyAqIHBhcnNlX29wdGlvbnMgdGhhdCB0YWtlIHByZWZpeCB0byBkbyB0aGlzIHdoaWxlIHBhcnNpbmcuCisgKi8KK2V4dGVybiBjb25zdCBjaGFyICpwYXJzZV9vcHRpb25zX2ZpeF9maWxlbmFtZShjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKmZpbGUpCit7CisJaWYgKCFmaWxlIHx8ICFwcmVmaXggfHwgaXNfYWJzb2x1dGVfcGF0aChmaWxlKSB8fCAhc3RyY21wKCItIiwgZmlsZSkpCisJCXJldHVybiBmaWxlOworCXJldHVybiBwcmVmaXhfZmlsZW5hbWUocHJlZml4LCBzdHJsZW4ocHJlZml4KSwgZmlsZSk7Cit9CisKZGlmZiAtLWdpdCBhL3BhcnNlLW9wdGlvbnMuaCBiL3BhcnNlLW9wdGlvbnMuaAppbmRleCA0ZWU0NDNkLi4xM2FkMTU4IDEwMDY0NAotLS0gYS9wYXJzZS1vcHRpb25zLmgKKysrIGIvcGFyc2Utb3B0aW9ucy5oCkBAIC0xMjMsNCArMTIzLDYgQEAKIAkgICJ1c2UgPG4+IGRpZ2l0cyB0byBkaXNwbGF5IFNIQS0xcyIsIFwKIAkgIFBBUlNFX09QVF9PUFRBUkcsICZwYXJzZV9vcHRfYWJicmV2X2NiLCAwIH0KIAorZXh0ZXJuIGNvbnN0IGNoYXIgKnBhcnNlX29wdGlvbnNfZml4X2ZpbGVuYW1lKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqZmlsZSk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvcGF0aC5jIGIvcGF0aC5jCmluZGV4IGY0ZWQ5NzkuLmMxZDU2NzkgMTAwNjQ0Ci0tLSBhL3BhdGguYworKysgYi9wYXRoLmMKQEAgLTkxLDcgKzkxLDggQEAKIAlzdHJ1Y3Qgc3RhdCBzdDsKIAljaGFyICpidWYsIGJ1ZmZlclsyNTZdOwogCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07Ci0JaW50IGxlbiwgZmQ7CisJaW50IGZkOworCXNzaXplX3QgbGVuOwogCiAJaWYgKGxzdGF0KHBhdGgsICZzdCkgPCAwKQogCQlyZXR1cm4gLTE7CkBAIC0yNjYsMzIgKzI2Nyw4NiBAQAogCWlmIChsc3RhdChwYXRoLCAmc3QpIDwgMCkKIAkJcmV0dXJuIC0xOwogCW1vZGUgPSBzdC5zdF9tb2RlOwotCWlmIChtb2RlICYgU19JUlVTUikKLQkJbW9kZSB8PSAoc2hhcmVkX3JlcG9zaXRvcnkgPT0gUEVSTV9HUk9VUAotCQkJID8gU19JUkdSUAotCQkJIDogKHNoYXJlZF9yZXBvc2l0b3J5ID09IFBFUk1fRVZFUllCT0RZCi0JCQkgICAgPyAoU19JUkdSUHxTX0lST1RIKQotCQkJICAgIDogMCkpOwogCi0JaWYgKG1vZGUgJiBTX0lXVVNSKQotCQltb2RlIHw9IFNfSVdHUlA7CisJaWYgKHNoYXJlZF9yZXBvc2l0b3J5KSB7CisJCWludCB0d2VhayA9IHNoYXJlZF9yZXBvc2l0b3J5OworCQlpZiAoIShtb2RlICYgU19JV1VTUikpCisJCQl0d2VhayAmPSB+MDIyMjsKKwkJbW9kZSB8PSB0d2VhazsKKwl9IGVsc2UgeworCQkvKiBQcmVzZXJ2ZSBvbGQgUEVSTV9VTUFTSyBiZWhhdmlvdXIgKi8KKwkJaWYgKG1vZGUgJiBTX0lXVVNSKQorCQkJbW9kZSB8PSBTX0lXR1JQOworCX0KIAotCWlmIChtb2RlICYgU19JWFVTUikKLQkJbW9kZSB8PSAoc2hhcmVkX3JlcG9zaXRvcnkgPT0gUEVSTV9HUk9VUAotCQkJID8gU19JWEdSUAotCQkJIDogKHNoYXJlZF9yZXBvc2l0b3J5ID09IFBFUk1fRVZFUllCT0RZCi0JCQkgICAgPyAoU19JWEdSUHxTX0lYT1RIKQotCQkJICAgIDogMCkpOwotCWlmIChTX0lTRElSKG1vZGUpKQorCWlmIChTX0lTRElSKG1vZGUpKSB7CiAJCW1vZGUgfD0gRk9SQ0VfRElSX1NFVF9HSUQ7CisKKwkJLyogQ29weSByZWFkIGJpdHMgdG8gZXhlY3V0ZSBiaXRzICovCisJCW1vZGUgfD0gKHNoYXJlZF9yZXBvc2l0b3J5ICYgMDQ0NCkgPj4gMjsKKwl9CisKIAlpZiAoKG1vZGUgJiBzdC5zdF9tb2RlKSAhPSBtb2RlICYmIGNobW9kKHBhdGgsIG1vZGUpIDwgMCkKIAkJcmV0dXJuIC0yOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X3B3ZF9jd2Qodm9pZCkKK3sKKwlzdGF0aWMgY2hhciBjd2RbUEFUSF9NQVggKyAxXTsKKwljaGFyICpwd2Q7CisJc3RydWN0IHN0YXQgY3dkX3N0YXQsIHB3ZF9zdGF0OworCWlmIChnZXRjd2QoY3dkLCBQQVRIX01BWCkgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJcHdkID0gZ2V0ZW52KCJQV0QiKTsKKwlpZiAocHdkICYmIHN0cmNtcChwd2QsIGN3ZCkpIHsKKwkJc3RhdChjd2QsICZjd2Rfc3RhdCk7CisJCWlmICghc3RhdChwd2QsICZwd2Rfc3RhdCkgJiYKKwkJICAgIHB3ZF9zdGF0LnN0X2RldiA9PSBjd2Rfc3RhdC5zdF9kZXYgJiYKKwkJICAgIHB3ZF9zdGF0LnN0X2lubyA9PSBjd2Rfc3RhdC5zdF9pbm8pIHsKKwkJCXN0cmxjcHkoY3dkLCBwd2QsIFBBVEhfTUFYKTsKKwkJfQorCX0KKwlyZXR1cm4gY3dkOworfQorCitjb25zdCBjaGFyICptYWtlX25vbnJlbGF0aXZlX3BhdGgoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdGF0aWMgY2hhciBidWZbUEFUSF9NQVggKyAxXTsKKworCWlmIChpc19hYnNvbHV0ZV9wYXRoKHBhdGgpKSB7CisJCWlmIChzdHJsY3B5KGJ1ZiwgcGF0aCwgUEFUSF9NQVgpID49IFBBVEhfTUFYKQorCQkJZGllICgiVG9vIGxvbmcgcGF0aDogJS4qcyIsIDYwLCBwYXRoKTsKKwl9IGVsc2UgeworCQljb25zdCBjaGFyICpjd2QgPSBnZXRfcHdkX2N3ZCgpOworCQlpZiAoIWN3ZCkKKwkJCWRpZSgiQ2Fubm90IGRldGVybWluZSB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIpOworCQlpZiAoc25wcmludGYoYnVmLCBQQVRIX01BWCwgIiVzLyVzIiwgY3dkLCBwYXRoKSA+PSBQQVRIX01BWCkKKwkJCWRpZSAoIlRvbyBsb25nIHBhdGg6ICUuKnMiLCA2MCwgcGF0aCk7CisJfQorCXJldHVybiBidWY7Cit9CisKIC8qIFdlIGFsbG93ICJyZWN1cnNpdmUiIHN5bWJvbGljIGxpbmtzLiBPbmx5IHdpdGhpbiByZWFzb24sIHRob3VnaC4gKi8KICNkZWZpbmUgTUFYREVQVEggNQogCitjb25zdCBjaGFyICptYWtlX3JlbGF0aXZlX3BhdGgoY29uc3QgY2hhciAqYWJzLCBjb25zdCBjaGFyICpiYXNlKQoreworCXN0YXRpYyBjaGFyIGJ1ZltQQVRIX01BWCArIDFdOworCWludCBiYXNlbGVuOworCWlmICghYmFzZSkKKwkJcmV0dXJuIGFiczsKKwliYXNlbGVuID0gc3RybGVuKGJhc2UpOworCWlmIChwcmVmaXhjbXAoYWJzLCBiYXNlKSkKKwkJcmV0dXJuIGFiczsKKwlpZiAoYWJzW2Jhc2VsZW5dID09ICcvJykKKwkJYmFzZWxlbisrOworCWVsc2UgaWYgKGJhc2VbYmFzZWxlbiAtIDFdICE9ICcvJykKKwkJcmV0dXJuIGFiczsKKwlzdHJjcHkoYnVmLCBhYnMgKyBiYXNlbGVuKTsKKwlyZXR1cm4gYnVmOworfQorCiBjb25zdCBjaGFyICptYWtlX2Fic29sdXRlX3BhdGgoY29uc3QgY2hhciAqcGF0aCkKIHsKIAlzdGF0aWMgY2hhciBidWZzWzJdW1BBVEhfTUFYICsgMV0sICpidWYgPSBidWZzWzBdLCAqbmV4dF9idWYgPSBidWZzWzFdOwpkaWZmIC0tZ2l0IGEvcGVybC9HaXQucG0gYi9wZXJsL0dpdC5wbQppbmRleCBhMjgxMmVhLi45N2U2MWVmIDEwMDY0NAotLS0gYS9wZXJsL0dpdC5wbQorKysgYi9wZXJsL0dpdC5wbQpAQCAtMzksNiArMzksMTAgQEAKICAgbXkgJGxhc3RyZXYgPSAkcmVwby0+Y29tbWFuZF9vbmVsaW5lKCBbICdyZXYtbGlzdCcsICctLWFsbCcgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVERFUlIgPT4gMCApOwogCisgIG15ICRzaGExID0gJHJlcG8tPmhhc2hfYW5kX2luc2VydF9vYmplY3QoJ2ZpbGUudHh0Jyk7CisgIG15ICR0ZW1wZmlsZSA9IHRlbXBmaWxlKCk7CisgIG15ICRzaXplID0gJHJlcG8tPmNhdF9ibG9iKCRzaGExLCAkdGVtcGZpbGUpOworCiA9Y3V0CiAKIApAQCAtNTEsNiArNTUsNyBAQAogIyBNZXRob2RzIHdoaWNoIGNhbiBiZSBjYWxsZWQgYXMgc3RhbmRhbG9uZSBmdW5jdGlvbnMgYXMgd2VsbDoKIEBFWFBPUlRfT0sgPSBxdyhjb21tYW5kIGNvbW1hbmRfb25lbGluZSBjb21tYW5kX25vaXN5CiAgICAgICAgICAgICAgICAgY29tbWFuZF9vdXRwdXRfcGlwZSBjb21tYW5kX2lucHV0X3BpcGUgY29tbWFuZF9jbG9zZV9waXBlCisgICAgICAgICAgICAgICAgY29tbWFuZF9iaWRpX3BpcGUgY29tbWFuZF9jbG9zZV9iaWRpX3BpcGUKICAgICAgICAgICAgICAgICB2ZXJzaW9uIGV4ZWNfcGF0aCBoYXNoX29iamVjdCBnaXRfY21kX3RyeSk7CiAKIApAQCAtOTIsNiArOTcsNyBAQAogdXNlIENhcnAgcXcoY2FycCBjcm9hayk7ICMgYnV0IGNyb2FrIGlzIGJhZCAtIHRocm93IGluc3RlYWQKIHVzZSBFcnJvciBxdyg6dHJ5KTsKIHVzZSBDd2QgcXcoYWJzX3BhdGgpOwordXNlIElQQzo6T3BlbjIgcXcob3BlbjIpOwogCiB9CiAKQEAgLTIxNiw3ICsyMjIsNiBAQAogCWJsZXNzICRzZWxmLCAkY2xhc3M7CiB9CiAKLQogPWJhY2sKIAogPWhlYWQxIE1FVEhPRFMKQEAgLTM3NSw2ICszODAsNjAgQEAKIAlfY21kX2Nsb3NlKCRmaCwgJGN0eCk7CiB9CiAKKz1pdGVtIGNvbW1hbmRfYmlkaV9waXBlICggQ09NTUFORCBbLCBBUkdVTUVOVFMuLi4gXSApCisKK0V4ZWN1dGUgdGhlIGdpdmVuIEM8Q09NTUFORD4gaW4gdGhlIHNhbWUgd2F5IGFzIGNvbW1hbmRfb3V0cHV0X3BpcGUoKQorZG9lcyBidXQgcmV0dXJuIGJvdGggYW4gaW5wdXQgcGlwZSBmaWxlaGFuZGxlIGFuZCBhbiBvdXRwdXQgcGlwZSBmaWxlaGFuZGxlLgorCitUaGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gcmV0dXJuIEM8KCRwaWQsICRwaXBlX2luLCAkcGlwZV9vdXQsICRjdHgpPi4KK1NlZSBDPGNvbW1hbmRfY2xvc2VfYmlkaV9waXBlKCk+IGZvciBkZXRhaWxzLgorCis9Y3V0CisKK3N1YiBjb21tYW5kX2JpZGlfcGlwZSB7CisJbXkgKCRwaWQsICRpbiwgJG91dCk7CisJJHBpZCA9IG9wZW4yKCRpbiwgJG91dCwgJ2dpdCcsIEBfKTsKKwlyZXR1cm4gKCRwaWQsICRpbiwgJG91dCwgam9pbignICcsIEBfKSk7Cit9CisKKz1pdGVtIGNvbW1hbmRfY2xvc2VfYmlkaV9waXBlICggUElELCBQSVBFX0lOLCBQSVBFX09VVCBbLCBDVFhdICkKKworQ2xvc2UgdGhlIEM8UElQRV9JTj4gYW5kIEM8UElQRV9PVVQ+IGFzIHJldHVybmVkIGZyb20gQzxjb21tYW5kX2JpZGlfcGlwZSgpPiwKK2NoZWNraW5nIHdoZXRoZXIgdGhlIGNvbW1hbmQgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5LiBUaGUgb3B0aW9uYWwgQzxDVFg+Cithcmd1bWVudCBpcyByZXF1aXJlZCBpZiB5b3Ugd2FudCB0byBzZWUgdGhlIGNvbW1hbmQgbmFtZSBpbiB0aGUgZXJyb3IgbWVzc2FnZSwKK2FuZCBpdCBpcyB0aGUgZm91cnRoIHZhbHVlIHJldHVybmVkIGJ5IEM8Y29tbWFuZF9iaWRpX3BpcGUoKT4uICBUaGUgY2FsbCBpZGlvbQoraXM6CisKKwlteSAoJHBpZCwgJGluLCAkb3V0LCAkY3R4KSA9ICRyLT5jb21tYW5kX2JpZGlfcGlwZSgnY2F0LWZpbGUgLS1iYXRjaC1jaGVjaycpOworCXByaW50ICIwMDAwMDAwMDBcbiIgJG91dDsKKwl3aGlsZSAoPCRpbj4pIHsgLi4uIH0KKwkkci0+Y29tbWFuZF9jbG9zZV9iaWRpX3BpcGUoJHBpZCwgJGluLCAkb3V0LCAkY3R4KTsKKworTm90ZSB0aGF0IHlvdSBzaG91bGQgbm90IHJlbHkgb24gd2hhdGV2ZXIgYWN0dWFsbHkgaXMgaW4gQzxDVFg+OworY3VycmVudGx5IGl0IGlzIHNpbXBseSB0aGUgY29tbWFuZCBuYW1lIGJ1dCBpbiBmdXR1cmUgdGhlIGNvbnRleHQgbWlnaHQKK2hhdmUgbW9yZSBjb21wbGljYXRlZCBzdHJ1Y3R1cmUuCisKKz1jdXQKKworc3ViIGNvbW1hbmRfY2xvc2VfYmlkaV9waXBlIHsKKwlteSAoJHBpZCwgJGluLCAkb3V0LCAkY3R4KSA9IEBfOworCWZvcmVhY2ggbXkgJGZoICgkaW4sICRvdXQpIHsKKwkJdW5sZXNzIChjbG9zZSAkZmgpIHsKKwkJCWlmICgkISkgeworCQkJCWNhcnAgImVycm9yIGNsb3NpbmcgcGlwZTogJCEiOworCQkJfSBlbHNpZiAoJD8gPj4gOCkgeworCQkJCXRocm93IEdpdDo6RXJyb3I6OkNvbW1hbmQoJGN0eCwgJD8gPj44KTsKKwkJCX0KKwkJfQorCX0KKworCXdhaXRwaWQgJHBpZCwgMDsKKworCWlmICgkPyA+PiA4KSB7CisJCXRocm93IEdpdDo6RXJyb3I6OkNvbW1hbmQoJGN0eCwgJD8gPj44KTsKKwl9Cit9CisKIAogPWl0ZW0gY29tbWFuZF9ub2lzeSAoIENPTU1BTkQgWywgQVJHVU1FTlRTLi4uIF0gKQogCkBAIC00ODcsMjggKzU0NiwyNiBAQAogKGV4Y2VwdGlvbiBpcyB0aHJvd24gb3RoZXJ3aXNlKSwgaW4gYXJyYXkgY29udGV4dCByZXR1cm5zIGFsbG93cyB0aGUKIHZhcmlhYmxlIHRvIGJlIHNldCBtdWx0aXBsZSB0aW1lcyBhbmQgcmV0dXJucyBhbGwgdGhlIHZhbHVlcy4KIAotTXVzdCBiZSBjYWxsZWQgb24gYSByZXBvc2l0b3J5IGluc3RhbmNlLgotCiBUaGlzIGN1cnJlbnRseSB3cmFwcyBjb21tYW5kKCdjb25maWcnKSBzbyBpdCBpcyBub3Qgc28gZmFzdC4KIAogPWN1dAogCiBzdWIgY29uZmlnIHsKLQlteSAoJHNlbGYsICR2YXIpID0gQF87Ci0JJHNlbGYtPnJlcG9fcGF0aCgpCi0JCW9yIHRocm93IEVycm9yOjpTaW1wbGUoIm5vdCBhIHJlcG9zaXRvcnkiKTsKKwlteSAoJHNlbGYsICR2YXIpID0gX21heWJlX3NlbGYoQF8pOwogCiAJdHJ5IHsKKwkJbXkgQGNtZCA9ICgnY29uZmlnJyk7CisJCXVuc2hpZnQgQGNtZCwgJHNlbGYgaWYgJHNlbGY7CiAJCWlmICh3YW50YXJyYXkpIHsKLQkJCXJldHVybiAkc2VsZi0+Y29tbWFuZCgnY29uZmlnJywgJy0tZ2V0LWFsbCcsICR2YXIpOworCQkJcmV0dXJuIGNvbW1hbmQoQGNtZCwgJy0tZ2V0LWFsbCcsICR2YXIpOwogCQl9IGVsc2UgewotCQkJcmV0dXJuICRzZWxmLT5jb21tYW5kX29uZWxpbmUoJ2NvbmZpZycsICctLWdldCcsICR2YXIpOworCQkJcmV0dXJuIGNvbW1hbmRfb25lbGluZShAY21kLCAnLS1nZXQnLCAkdmFyKTsKIAkJfQogCX0gY2F0Y2ggR2l0OjpFcnJvcjo6Q29tbWFuZCB3aXRoIHsKIAkJbXkgJEUgPSBzaGlmdDsKIAkJaWYgKCRFLT52YWx1ZSgpID09IDEpIHsKIAkJCSMgS2V5IG5vdCBmb3VuZC4KLQkJCXJldHVybiB1bmRlZjsKKwkJCXJldHVybjsKIAkJfSBlbHNlIHsKIAkJCXRocm93ICRFOwogCQl9CkBAIC01MjIsMjAgKzU3OSwxNyBAQAogaXMgdXNhYmxlIGFzIGEgYm9vbGVhbiBpbiBwZXJsIChhbmQgQzx1bmRlZj4gaWYgaXQncyBub3QgZGVmaW5lZCwKIG9mIGNvdXJzZSkuCiAKLU11c3QgYmUgY2FsbGVkIG9uIGEgcmVwb3NpdG9yeSBpbnN0YW5jZS4KLQogVGhpcyBjdXJyZW50bHkgd3JhcHMgY29tbWFuZCgnY29uZmlnJykgc28gaXQgaXMgbm90IHNvIGZhc3QuCiAKID1jdXQKIAogc3ViIGNvbmZpZ19ib29sIHsKLQlteSAoJHNlbGYsICR2YXIpID0gQF87Ci0JJHNlbGYtPnJlcG9fcGF0aCgpCi0JCW9yIHRocm93IEVycm9yOjpTaW1wbGUoIm5vdCBhIHJlcG9zaXRvcnkiKTsKKwlteSAoJHNlbGYsICR2YXIpID0gX21heWJlX3NlbGYoQF8pOwogCiAJdHJ5IHsKLQkJbXkgJHZhbCA9ICRzZWxmLT5jb21tYW5kX29uZWxpbmUoJ2NvbmZpZycsICctLWJvb2wnLCAnLS1nZXQnLAotCQkJCQkgICAgICAkdmFyKTsKKwkJbXkgQGNtZCA9ICgnY29uZmlnJywgJy0tYm9vbCcsICctLWdldCcsICR2YXIpOworCQl1bnNoaWZ0IEBjbWQsICRzZWxmIGlmICRzZWxmOworCQlteSAkdmFsID0gY29tbWFuZF9vbmVsaW5lKEBjbWQpOwogCQlyZXR1cm4gdW5kZWYgdW5sZXNzIGRlZmluZWQgJHZhbDsKIAkJcmV0dXJuICR2YWwgZXEgJ3RydWUnOwogCX0gY2F0Y2ggR2l0OjpFcnJvcjo6Q29tbWFuZCB3aXRoIHsKQEAgLTU1NywxOSArNjExLDE3IEBACiBieSAxMDI0LCAxMDQ4NTc2ICgxMDI0XjIpLCBvciAxMDczNzQxODI0ICgxMDI0XjMpIHByaW9yIHRvIG91dHB1dC4KIEl0IHdvdWxkIHJldHVybiBDPHVuZGVmPiBpZiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlzIG5vdCBkZWZpbmVkLAogCi1NdXN0IGJlIGNhbGxlZCBvbiBhIHJlcG9zaXRvcnkgaW5zdGFuY2UuCi0KIFRoaXMgY3VycmVudGx5IHdyYXBzIGNvbW1hbmQoJ2NvbmZpZycpIHNvIGl0IGlzIG5vdCBzbyBmYXN0LgogCiA9Y3V0CiAKIHN1YiBjb25maWdfaW50IHsKLQlteSAoJHNlbGYsICR2YXIpID0gQF87Ci0JJHNlbGYtPnJlcG9fcGF0aCgpCi0JCW9yIHRocm93IEVycm9yOjpTaW1wbGUoIm5vdCBhIHJlcG9zaXRvcnkiKTsKKwlteSAoJHNlbGYsICR2YXIpID0gX21heWJlX3NlbGYoQF8pOwogCiAJdHJ5IHsKLQkJcmV0dXJuICRzZWxmLT5jb21tYW5kX29uZWxpbmUoJ2NvbmZpZycsICctLWludCcsICctLWdldCcsICR2YXIpOworCQlteSBAY21kID0gKCdjb25maWcnLCAnLS1pbnQnLCAnLS1nZXQnLCAkdmFyKTsKKwkJdW5zaGlmdCBAY21kLCAkc2VsZiBpZiAkc2VsZjsKKwkJcmV0dXJuIGNvbW1hbmRfb25lbGluZShAY21kKTsKIAl9IGNhdGNoIEdpdDo6RXJyb3I6OkNvbW1hbmQgd2l0aCB7CiAJCW15ICRFID0gc2hpZnQ7CiAJCWlmICgkRS0+dmFsdWUoKSA9PSAxKSB7CkBAIC02MzksMTUgKzY5MSwxNSBAQAogCSIkbmFtZSA8JGVtYWlsPiIgZXEgaWRlbnRfcGVyc29uKCRuYW1lKTsKIAkkdGltZV90eiA9fiAvXlxkKyBbKy1dXGR7NH0kLzsKIAotQm90aCBtZXRob2RzIG11c3QgYmUgY2FsbGVkIG9uIGEgcmVwb3NpdG9yeSBpbnN0YW5jZS4KLQogPWN1dAogCiBzdWIgaWRlbnQgewotCW15ICgkc2VsZiwgJHR5cGUpID0gQF87CisJbXkgKCRzZWxmLCAkdHlwZSkgPSBfbWF5YmVfc2VsZihAXyk7CiAJbXkgJGlkZW50c3RyOwogCWlmIChsYyAkdHlwZSBlcSBsYyAnY29tbWl0dGVyJyBvciBsYyAkdHlwZSBlcSBsYyAnYXV0aG9yJykgewotCQkkaWRlbnRzdHIgPSAkc2VsZi0+Y29tbWFuZF9vbmVsaW5lKCd2YXInLCAnR0lUXycudWMoJHR5cGUpLidfSURFTlQnKTsKKwkJbXkgQGNtZCA9ICgndmFyJywgJ0dJVF8nLnVjKCR0eXBlKS4nX0lERU5UJyk7CisJCXVuc2hpZnQgQGNtZCwgJHNlbGYgaWYgJHNlbGY7CisJCSRpZGVudHN0ciA9IGNvbW1hbmRfb25lbGluZShAY21kKTsKIAl9IGVsc2UgewogCQkkaWRlbnRzdHIgPSAkdHlwZTsKIAl9CkBAIC02NTksMTcgKzcxMSwxNiBAQAogfQogCiBzdWIgaWRlbnRfcGVyc29uIHsKLQlteSAoJHNlbGYsIEBpZGVudCkgPSBAXzsKLQkkI2lkZW50ID09IDAgYW5kIEBpZGVudCA9ICRzZWxmLT5pZGVudCgkaWRlbnRbMF0pOworCW15ICgkc2VsZiwgQGlkZW50KSA9IF9tYXliZV9zZWxmKEBfKTsKKwkkI2lkZW50ID09IDAgYW5kIEBpZGVudCA9ICRzZWxmID8gJHNlbGYtPmlkZW50KCRpZGVudFswXSkgOiBpZGVudCgkaWRlbnRbMF0pOwogCXJldHVybiAiJGlkZW50WzBdIDwkaWRlbnRbMV0+IjsKIH0KIAogCiA9aXRlbSBoYXNoX29iamVjdCAoIFRZUEUsIEZJTEVOQU1FICkKIAotQ29tcHV0ZSB0aGUgU0hBMSBvYmplY3QgaWQgb2YgdGhlIGdpdmVuIEM8RklMRU5BTUU+IChvciBkYXRhIHdhaXRpbmcgaW4KLUM8RklMRUhBTkRMRT4pIGNvbnNpZGVyaW5nIGl0IGlzIG9mIHRoZSBDPFRZUEU+IG9iamVjdCB0eXBlIChDPGJsb2I+LAotQzxjb21taXQ+LCBDPHRyZWU+KS4KK0NvbXB1dGUgdGhlIFNIQTEgb2JqZWN0IGlkIG9mIHRoZSBnaXZlbiBDPEZJTEVOQU1FPiBjb25zaWRlcmluZyBpdCBpcworb2YgdGhlIEM8VFlQRT4gb2JqZWN0IHR5cGUgKEM8YmxvYj4sIEM8Y29tbWl0PiwgQzx0cmVlPikuCiAKIFRoZSBtZXRob2QgY2FuIGJlIGNhbGxlZCB3aXRob3V0IGFueSBpbnN0YW5jZSBvciBvbiBhIHNwZWNpZmllZCBHaXQgcmVwb3NpdG9yeSwKIGl0IG1ha2VzIHplcm8gZGlmZmVyZW5jZS4KQEAgLTY4NSw2ICs3MzYsMTQ3IEBACiB9CiAKIAorPWl0ZW0gaGFzaF9hbmRfaW5zZXJ0X29iamVjdCAoIEZJTEVOQU1FICkKKworQ29tcHV0ZSB0aGUgU0hBMSBvYmplY3QgaWQgb2YgdGhlIGdpdmVuIEM8RklMRU5BTUU+IGFuZCBhZGQgdGhlIG9iamVjdCB0byB0aGUKK29iamVjdCBkYXRhYmFzZS4KKworVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIFNIQTEgaGFzaC4KKworPWN1dAorCisjIFRPRE86IFN1cHBvcnQgZm9yIHBhc3NpbmcgRklMRUhBTkRMRSBpbnN0ZWFkIG9mIEZJTEVOQU1FCitzdWIgaGFzaF9hbmRfaW5zZXJ0X29iamVjdCB7CisJbXkgKCRzZWxmLCAkZmlsZW5hbWUpID0gQF87CisKKwljYXJwICJCYWQgZmlsZW5hbWUgXCIkZmlsZW5hbWVcIiIgaWYgJGZpbGVuYW1lID1+IC9bXHJcbl0vOworCisJJHNlbGYtPl9vcGVuX2hhc2hfYW5kX2luc2VydF9vYmplY3RfaWZfbmVlZGVkKCk7CisJbXkgKCRpbiwgJG91dCkgPSAoJHNlbGYtPntoYXNoX29iamVjdF9pbn0sICRzZWxmLT57aGFzaF9vYmplY3Rfb3V0fSk7CisKKwl1bmxlc3MgKHByaW50ICRvdXQgJGZpbGVuYW1lLCAiXG4iKSB7CisJCSRzZWxmLT5fY2xvc2VfaGFzaF9hbmRfaW5zZXJ0X29iamVjdCgpOworCQl0aHJvdyBFcnJvcjo6U2ltcGxlKCJvdXQgcGlwZSB3ZW50IGJhZCIpOworCX0KKworCWNob21wKG15ICRoYXNoID0gPCRpbj4pOworCXVubGVzcyAoZGVmaW5lZCgkaGFzaCkpIHsKKwkJJHNlbGYtPl9jbG9zZV9oYXNoX2FuZF9pbnNlcnRfb2JqZWN0KCk7CisJCXRocm93IEVycm9yOjpTaW1wbGUoImluIHBpcGUgd2VudCBiYWQiKTsKKwl9CisKKwlyZXR1cm4gJGhhc2g7Cit9CisKK3N1YiBfb3Blbl9oYXNoX2FuZF9pbnNlcnRfb2JqZWN0X2lmX25lZWRlZCB7CisJbXkgKCRzZWxmKSA9IEBfOworCisJcmV0dXJuIGlmIGRlZmluZWQoJHNlbGYtPntoYXNoX29iamVjdF9waWR9KTsKKworCSgkc2VsZi0+e2hhc2hfb2JqZWN0X3BpZH0sICRzZWxmLT57aGFzaF9vYmplY3RfaW59LAorCSAkc2VsZi0+e2hhc2hfb2JqZWN0X291dH0sICRzZWxmLT57aGFzaF9vYmplY3RfY3R4fSkgPQorCQljb21tYW5kX2JpZGlfcGlwZShxdyhoYXNoLW9iamVjdCAtdyAtLXN0ZGluLXBhdGhzKSk7Cit9CisKK3N1YiBfY2xvc2VfaGFzaF9hbmRfaW5zZXJ0X29iamVjdCB7CisJbXkgKCRzZWxmKSA9IEBfOworCisJcmV0dXJuIHVubGVzcyBkZWZpbmVkKCRzZWxmLT57aGFzaF9vYmplY3RfcGlkfSk7CisKKwlteSBAdmFycyA9IG1hcCB7ICdoYXNoX29iamVjdF8nIC4gJF8gfSBxdyhwaWQgaW4gb3V0IGN0eCk7CisKKwljb21tYW5kX2Nsb3NlX2JpZGlfcGlwZSgkc2VsZi0+e0B2YXJzfSk7CisJZGVsZXRlICRzZWxmLT57QHZhcnN9OworfQorCis9aXRlbSBjYXRfYmxvYiAoIFNIQTEsIEZJTEVIQU5ETEUgKQorCitQcmludHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBibG9iIGlkZW50aWZpZWQgYnkgQzxTSEExPiB0byBDPEZJTEVIQU5ETEU+IGFuZAorcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHByaW50ZWQuCisKKz1jdXQKKworc3ViIGNhdF9ibG9iIHsKKwlteSAoJHNlbGYsICRzaGExLCAkZmgpID0gQF87CisKKwkkc2VsZi0+X29wZW5fY2F0X2Jsb2JfaWZfbmVlZGVkKCk7CisJbXkgKCRpbiwgJG91dCkgPSAoJHNlbGYtPntjYXRfYmxvYl9pbn0sICRzZWxmLT57Y2F0X2Jsb2Jfb3V0fSk7CisKKwl1bmxlc3MgKHByaW50ICRvdXQgJHNoYTEsICJcbiIpIHsKKwkJJHNlbGYtPl9jbG9zZV9jYXRfYmxvYigpOworCQl0aHJvdyBFcnJvcjo6U2ltcGxlKCJvdXQgcGlwZSB3ZW50IGJhZCIpOworCX0KKworCW15ICRkZXNjcmlwdGlvbiA9IDwkaW4+OworCWlmICgkZGVzY3JpcHRpb24gPX4gLyBtaXNzaW5nJC8pIHsKKwkJY2FycCAiJHNoYTEgZG9lc24ndCBleGlzdCBpbiB0aGUgcmVwb3NpdG9yeSI7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoJGRlc2NyaXB0aW9uICF+IC9eWzAtOWEtZkEtRl17NDB9IFxTKyAoXGQrKSQvKSB7CisJCWNhcnAgIlVuZXhwZWN0ZWQgcmVzdWx0IHJldHVybmVkIGZyb20gZ2l0IGNhdC1maWxlIjsKKwkJcmV0dXJuIC0xOworCX0KKworCW15ICRzaXplID0gJDE7CisKKwlteSAkYmxvYjsKKwlteSAkYnl0ZXNSZWFkID0gMDsKKworCXdoaWxlICgxKSB7CisJCW15ICRieXRlc0xlZnQgPSAkc2l6ZSAtICRieXRlc1JlYWQ7CisJCWxhc3QgdW5sZXNzICRieXRlc0xlZnQ7CisKKwkJbXkgJGJ5dGVzVG9SZWFkID0gJGJ5dGVzTGVmdCA8IDEwMjQgPyAkYnl0ZXNMZWZ0IDogMTAyNDsKKwkJbXkgJHJlYWQgPSByZWFkKCRpbiwgJGJsb2IsICRieXRlc1RvUmVhZCwgJGJ5dGVzUmVhZCk7CisJCXVubGVzcyAoZGVmaW5lZCgkcmVhZCkpIHsKKwkJCSRzZWxmLT5fY2xvc2VfY2F0X2Jsb2IoKTsKKwkJCXRocm93IEVycm9yOjpTaW1wbGUoImluIHBpcGUgd2VudCBiYWQiKTsKKwkJfQorCisJCSRieXRlc1JlYWQgKz0gJHJlYWQ7CisJfQorCisJIyBTa2lwIHBhc3QgdGhlIHRyYWlsaW5nIG5ld2xpbmUuCisJbXkgJG5ld2xpbmU7CisJbXkgJHJlYWQgPSByZWFkKCRpbiwgJG5ld2xpbmUsIDEpOworCXVubGVzcyAoZGVmaW5lZCgkcmVhZCkpIHsKKwkJJHNlbGYtPl9jbG9zZV9jYXRfYmxvYigpOworCQl0aHJvdyBFcnJvcjo6U2ltcGxlKCJpbiBwaXBlIHdlbnQgYmFkIik7CisJfQorCXVubGVzcyAoJHJlYWQgPT0gMSAmJiAkbmV3bGluZSBlcSAiXG4iKSB7CisJCSRzZWxmLT5fY2xvc2VfY2F0X2Jsb2IoKTsKKwkJdGhyb3cgRXJyb3I6OlNpbXBsZSgiZGlkbid0IGZpbmQgbmV3bGluZSBhZnRlciBibG9iIik7CisJfQorCisJdW5sZXNzIChwcmludCAkZmggJGJsb2IpIHsKKwkJJHNlbGYtPl9jbG9zZV9jYXRfYmxvYigpOworCQl0aHJvdyBFcnJvcjo6U2ltcGxlKCJjb3VsZG4ndCB3cml0ZSB0byBwYXNzZWQgaW4gZmlsZWhhbmRsZSIpOworCX0KKworCXJldHVybiAkc2l6ZTsKK30KKworc3ViIF9vcGVuX2NhdF9ibG9iX2lmX25lZWRlZCB7CisJbXkgKCRzZWxmKSA9IEBfOworCisJcmV0dXJuIGlmIGRlZmluZWQoJHNlbGYtPntjYXRfYmxvYl9waWR9KTsKKworCSgkc2VsZi0+e2NhdF9ibG9iX3BpZH0sICRzZWxmLT57Y2F0X2Jsb2JfaW59LAorCSAkc2VsZi0+e2NhdF9ibG9iX291dH0sICRzZWxmLT57Y2F0X2Jsb2JfY3R4fSkgPQorCQljb21tYW5kX2JpZGlfcGlwZShxdyhjYXQtZmlsZSAtLWJhdGNoKSk7Cit9CisKK3N1YiBfY2xvc2VfY2F0X2Jsb2IgeworCW15ICgkc2VsZikgPSBAXzsKKworCXJldHVybiB1bmxlc3MgZGVmaW5lZCgkc2VsZi0+e2NhdF9ibG9iX3BpZH0pOworCisJbXkgQHZhcnMgPSBtYXAgeyAnY2F0X2Jsb2JfJyAuICRfIH0gcXcocGlkIGluIG91dCBjdHgpOworCisJY29tbWFuZF9jbG9zZV9iaWRpX3BpcGUoJHNlbGYtPntAdmFyc30pOworCWRlbGV0ZSAkc2VsZi0+e0B2YXJzfTsKK30KIAogPWJhY2sKIApAQCAtOTAyLDcgKzEwOTQsMTEgQEAKIH0KIAogCi1zdWIgREVTVFJPWSB7IH0KK3N1YiBERVNUUk9ZIHsKKwlteSAoJHNlbGYpID0gQF87CisJJHNlbGYtPl9jbG9zZV9oYXNoX2FuZF9pbnNlcnRfb2JqZWN0KCk7CisJJHNlbGYtPl9jbG9zZV9jYXRfYmxvYigpOworfQogCiAKICMgUGlwZSBpbXBsZW1lbnRhdGlvbiBmb3IgQWN0aXZlU3RhdGUgUGVybC4KZGlmZiAtLWdpdCBhL3BrdC1saW5lLmMgYi9wa3QtbGluZS5jCmluZGV4IDM1NTU0NmEuLmY1ZDAwODYgMTAwNjQ0Ci0tLSBhL3BrdC1saW5lLmMKKysrIGIvcGt0LWxpbmUuYwpAQCAtNjUsMTYgKzY1LDExIEBACiAKIHN0YXRpYyB2b2lkIHNhZmVfcmVhZChpbnQgZmQsIHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgc2l6ZSkKIHsKLQlzaXplX3QgbiA9IDA7Ci0KLQl3aGlsZSAobiA8IHNpemUpIHsKLQkJc3NpemVfdCByZXQgPSB4cmVhZChmZCwgKGNoYXIgKikgYnVmZmVyICsgbiwgc2l6ZSAtIG4pOwotCQlpZiAocmV0IDwgMCkKLQkJCWRpZSgicmVhZCBlcnJvciAoJXMpIiwgc3RyZXJyb3IoZXJybm8pKTsKLQkJaWYgKCFyZXQpCi0JCQlkaWUoIlRoZSByZW1vdGUgZW5kIGh1bmcgdXAgdW5leHBlY3RlZGx5Iik7Ci0JCW4gKz0gcmV0OwotCX0KKwlzc2l6ZV90IHJldCA9IHJlYWRfaW5fZnVsbChmZCwgYnVmZmVyLCBzaXplKTsKKwlpZiAocmV0IDwgMCkKKwkJZGllKCJyZWFkIGVycm9yICglcykiLCBzdHJlcnJvcihlcnJubykpOworCWVsc2UgaWYgKHJldCA8IHNpemUpCisJCWRpZSgiVGhlIHJlbW90ZSBlbmQgaHVuZyB1cCB1bmV4cGVjdGVkbHkiKTsKIH0KIAogaW50IHBhY2tldF9yZWFkX2xpbmUoaW50IGZkLCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIHNpemUpCmRpZmYgLS1naXQgYS9wcmV0dHkuYyBiL3ByZXR0eS5jCmluZGV4IDE2YmZiODYuLjYyOGE1MjAgMTAwNjQ0Ci0tLSBhL3ByZXR0eS5jCisrKyBiL3ByZXR0eS5jCkBAIC0zLDQxICszLDUwIEBACiAjaW5jbHVkZSAidXRmOC5oIgogI2luY2x1ZGUgImRpZmYuaCIKICNpbmNsdWRlICJyZXZpc2lvbi5oIgotCi1zdGF0aWMgc3RydWN0IGNtdF9mbXRfbWFwIHsKLQljb25zdCBjaGFyICpuOwotCXNpemVfdCBjbXBfbGVuOwotCWVudW0gY21pdF9mbXQgdjsKLX0gY210X2ZtdHNbXSA9IHsKLQl7ICJyYXciLAkxLAlDTUlUX0ZNVF9SQVcgfSwKLQl7ICJtZWRpdW0iLAkxLAlDTUlUX0ZNVF9NRURJVU0gfSwKLQl7ICJzaG9ydCIsCTEsCUNNSVRfRk1UX1NIT1JUIH0sCi0JeyAiZW1haWwiLAkxLAlDTUlUX0ZNVF9FTUFJTCB9LAotCXsgImZ1bGwiLAk1LAlDTUlUX0ZNVF9GVUxMIH0sCi0JeyAiZnVsbGVyIiwJNSwJQ01JVF9GTVRfRlVMTEVSIH0sCi0JeyAib25lbGluZSIsCTEsCUNNSVRfRk1UX09ORUxJTkUgfSwKLQl7ICJmb3JtYXQ6IiwJNywJQ01JVF9GTVRfVVNFUkZPUk1BVH0sCi19OworI2luY2x1ZGUgInBhdGgtbGlzdC5oIgorI2luY2x1ZGUgIm1haWxtYXAuaCIKIAogc3RhdGljIGNoYXIgKnVzZXJfZm9ybWF0OwogCi1lbnVtIGNtaXRfZm10IGdldF9jb21taXRfZm9ybWF0KGNvbnN0IGNoYXIgKmFyZykKK3ZvaWQgZ2V0X2NvbW1pdF9mb3JtYXQoY29uc3QgY2hhciAqYXJnLCBzdHJ1Y3QgcmV2X2luZm8gKnJldikKIHsKIAlpbnQgaTsKKwlzdGF0aWMgc3RydWN0IGNtdF9mbXRfbWFwIHsKKwkJY29uc3QgY2hhciAqbjsKKwkJc2l6ZV90IGNtcF9sZW47CisJCWVudW0gY21pdF9mbXQgdjsKKwl9IGNtdF9mbXRzW10gPSB7CisJCXsgInJhdyIsCTEsCUNNSVRfRk1UX1JBVyB9LAorCQl7ICJtZWRpdW0iLAkxLAlDTUlUX0ZNVF9NRURJVU0gfSwKKwkJeyAic2hvcnQiLAkxLAlDTUlUX0ZNVF9TSE9SVCB9LAorCQl7ICJlbWFpbCIsCTEsCUNNSVRfRk1UX0VNQUlMIH0sCisJCXsgImZ1bGwiLAk1LAlDTUlUX0ZNVF9GVUxMIH0sCisJCXsgImZ1bGxlciIsCTUsCUNNSVRfRk1UX0ZVTExFUiB9LAorCQl7ICJvbmVsaW5lIiwJMSwJQ01JVF9GTVRfT05FTElORSB9LAorCX07CiAKLQlpZiAoIWFyZyB8fCAhKmFyZykKLQkJcmV0dXJuIENNSVRfRk1UX0RFRkFVTFQ7Ci0JaWYgKCphcmcgPT0gJz0nKQotCQlhcmcrKzsKLQlpZiAoIXByZWZpeGNtcChhcmcsICJmb3JtYXQ6IikpIHsKKwlyZXYtPnVzZV90ZXJtaW5hdG9yID0gMDsKKwlpZiAoIWFyZyB8fCAhKmFyZykgeworCQlyZXYtPmNvbW1pdF9mb3JtYXQgPSBDTUlUX0ZNVF9ERUZBVUxUOworCQlyZXR1cm47CisJfQorCWlmICghcHJlZml4Y21wKGFyZywgImZvcm1hdDoiKSB8fCAhcHJlZml4Y21wKGFyZywgInRmb3JtYXQ6IikpIHsKKwkJY29uc3QgY2hhciAqY3AgPSBzdHJjaHIoYXJnLCAnOicpICsgMTsKIAkJZnJlZSh1c2VyX2Zvcm1hdCk7Ci0JCXVzZXJfZm9ybWF0ID0geHN0cmR1cChhcmcgKyA3KTsKLQkJcmV0dXJuIENNSVRfRk1UX1VTRVJGT1JNQVQ7CisJCXVzZXJfZm9ybWF0ID0geHN0cmR1cChjcCk7CisJCWlmIChhcmdbMF0gPT0gJ3QnKQorCQkJcmV2LT51c2VfdGVybWluYXRvciA9IDE7CisJCXJldi0+Y29tbWl0X2Zvcm1hdCA9IENNSVRfRk1UX1VTRVJGT1JNQVQ7CisJCXJldHVybjsKIAl9CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY210X2ZtdHMpOyBpKyspIHsKIAkJaWYgKCFzdHJuY21wKGFyZywgY210X2ZtdHNbaV0ubiwgY210X2ZtdHNbaV0uY21wX2xlbikgJiYKLQkJICAgICFzdHJuY21wKGFyZywgY210X2ZtdHNbaV0ubiwgc3RybGVuKGFyZykpKQotCQkJcmV0dXJuIGNtdF9mbXRzW2ldLnY7CisJCSAgICAhc3RybmNtcChhcmcsIGNtdF9mbXRzW2ldLm4sIHN0cmxlbihhcmcpKSkgeworCQkJaWYgKGNtdF9mbXRzW2ldLnYgPT0gQ01JVF9GTVRfT05FTElORSkKKwkJCQlyZXYtPnVzZV90ZXJtaW5hdG9yID0gMTsKKwkJCXJldi0+Y29tbWl0X2Zvcm1hdCA9IGNtdF9mbXRzW2ldLnY7CisJCQlyZXR1cm47CisJCX0KIAl9CiAKIAlkaWUoImludmFsaWQgLS1wcmV0dHkgZm9ybWF0OiAlcyIsIGFyZyk7CkBAIC0yODEsNiArMjkwLDI1IEBACiAJcmV0dXJuIG91dDsKIH0KIAorc3RhdGljIGludCBtYWlsbWFwX25hbWUoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKmVtYWlsKQoreworCXN0YXRpYyBzdHJ1Y3QgcGF0aF9saXN0ICptYWlsX21hcDsKKwljaGFyIGJ1ZmZlclsxMDI0XTsKKworCWlmICghbWFpbF9tYXApIHsKKwkJbWFpbF9tYXAgPSB4Y2FsbG9jKDEsIHNpemVvZigqbWFpbF9tYXApKTsKKwkJcmVhZF9tYWlsbWFwKG1haWxfbWFwLCAiLm1haWxtYXAiLCBOVUxMKTsKKwl9CisKKwlpZiAoIW1haWxfbWFwLT5ucikKKwkJcmV0dXJuIC0xOworCisJaWYgKCFtYXBfZW1haWwobWFpbF9tYXAsIGVtYWlsLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSkKKwkJcmV0dXJuIC0xOworCXN0cmJ1Zl9hZGRzdHIoc2IsIGJ1ZmZlcik7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzaXplX3QgZm9ybWF0X3BlcnNvbl9wYXJ0KHN0cnVjdCBzdHJidWYgKnNiLCBjaGFyIHBhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKQogewpAQCAtMzAyLDEwICszMzAsMTIgQEAKIAlpZiAoZW5kID49IGxlbiAtIDIpCiAJCWdvdG8gc2tpcDsKIAotCWlmIChwYXJ0ID09ICduJykgewkvKiBuYW1lICovCisJaWYgKHBhcnQgPT0gJ24nIHx8IHBhcnQgPT0gJ04nKSB7CS8qIG5hbWUgKi8KIAkJd2hpbGUgKGVuZCA+IDAgJiYgaXNzcGFjZShtc2dbZW5kIC0gMV0pKQogCQkJZW5kLS07Ci0JCXN0cmJ1Zl9hZGQoc2IsIG1zZywgZW5kKTsKKwkJaWYgKHBhcnQgIT0gJ04nIHx8ICFtc2dbZW5kXSB8fCAhbXNnW2VuZCArIDFdIHx8CisJCSAgICBtYWlsbWFwX25hbWUoc2IsIG1zZyArIGVuZCArIDIpIDwgMCkKKwkJCXN0cmJ1Zl9hZGQoc2IsIG1zZywgZW5kKTsKIAkJcmV0dXJuIHBsYWNlaG9sZGVyX2xlbjsKIAl9CiAJc3RhcnQgPSArK2VuZDsgLyogc2F2ZSBlbWFpbCBzdGFydCBwb3NpdGlvbiAqLwpAQCAtNDU3LDYgKzQ4Nyw3IEBACiAJY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gYy0+Y29tbWl0OwogCWNvbnN0IGNoYXIgKm1zZyA9IGNvbW1pdC0+YnVmZmVyOwogCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKKwlpbnQgaDEsIGgyOwogCiAJLyogdGhlc2UgYXJlIGluZGVwZW5kZW50IG9mIHRoZSBjb21taXQgKi8KIAlzd2l0Y2ggKHBsYWNlaG9sZGVyWzBdKSB7CkBAIC00NzgsNiArNTA5LDE2IEBACiAJY2FzZSAnbic6CQkvKiBuZXdsaW5lICovCiAJCXN0cmJ1Zl9hZGRjaChzYiwgJ1xuJyk7CiAJCXJldHVybiAxOworCWNhc2UgJ3gnOgorCQkvKiAleDAwID09IE5VTCwgJXgwYSA9PSBMRiwgZXRjLiAqLworCQlpZiAoMCA8PSAoaDEgPSBoZXh2YWxfdGFibGVbMHhmZiAmIHBsYWNlaG9sZGVyWzFdXSkgJiYKKwkJICAgIGgxIDw9IDE2ICYmCisJCSAgICAwIDw9IChoMiA9IGhleHZhbF90YWJsZVsweGZmICYgcGxhY2Vob2xkZXJbMl1dKSAmJgorCQkgICAgaDIgPD0gMTYpIHsKKwkJCXN0cmJ1Zl9hZGRjaChzYiwgKGgxPDw0KXxoMik7CisJCQlyZXR1cm4gMzsKKwkJfSBlbHNlCisJCQlyZXR1cm4gMDsKIAl9CiAKIAkvKiB0aGVzZSBkZXBlbmQgb24gdGhlIGNvbW1pdCAqLwpkaWZmIC0tZ2l0IGEvcHJvZ3Jlc3MuYyBiL3Byb2dyZXNzLmMKaW5kZXggZDE5ZjgwYy4uNTVhODY4NyAxMDA2NDQKLS0tIGEvcHJvZ3Jlc3MuYworKysgYi9wcm9ncmVzcy5jCkBAIC0yNDEsMTYgKzI0MSwyMSBAQAogCSpwX3Byb2dyZXNzID0gTlVMTDsKIAlpZiAocHJvZ3Jlc3MtPmxhc3RfdmFsdWUgIT0gLTEpIHsKIAkJLyogRm9yY2UgdGhlIGxhc3QgdXBkYXRlICovCi0JCWNoYXIgYnVmW3N0cmxlbihtc2cpICsgNV07CisJCWNoYXIgYnVmWzEyOF0sICpidWZwOworCQlzaXplX3QgbGVuID0gc3RybGVuKG1zZykgKyA1OwogCQlzdHJ1Y3QgdGhyb3VnaHB1dCAqdHAgPSBwcm9ncmVzcy0+dGhyb3VnaHB1dDsKKworCQlidWZwID0gKGxlbiA8IHNpemVvZihidWYpKSA/IGJ1ZiA6IHhtYWxsb2MobGVuICsgMSk7CiAJCWlmICh0cCkgewogCQkJdW5zaWduZWQgaW50IHJhdGUgPSAhdHAtPmF2Z19taXNlY3MgPyAwIDoKIAkJCQkJdHAtPmF2Z19ieXRlcyAvIHRwLT5hdmdfbWlzZWNzOwogCQkJdGhyb3VnaHB1dF9zdHJpbmcodHAsIHRwLT5jdXJyX3RvdGFsLCByYXRlKTsKIAkJfQogCQlwcm9ncmVzc191cGRhdGUgPSAxOwotCQlzcHJpbnRmKGJ1ZiwgIiwgJXMuXG4iLCBtc2cpOwotCQlkaXNwbGF5KHByb2dyZXNzLCBwcm9ncmVzcy0+bGFzdF92YWx1ZSwgYnVmKTsKKwkJc3ByaW50ZihidWZwLCAiLCAlcy5cbiIsIG1zZyk7CisJCWRpc3BsYXkocHJvZ3Jlc3MsIHByb2dyZXNzLT5sYXN0X3ZhbHVlLCBidWZwKTsKKwkJaWYgKGJ1ZiAhPSBidWZwKQorCQkJZnJlZShidWZwKTsKIAl9CiAJY2xlYXJfcHJvZ3Jlc3Nfc2lnbmFsKCk7CiAJZnJlZShwcm9ncmVzcy0+dGhyb3VnaHB1dCk7CmRpZmYgLS1naXQgYS9yZWFkLWNhY2hlLmMgYi9yZWFkLWNhY2hlLmMKaW5kZXggYTkyYjI1Yi4uZjgzZGU4YyAxMDA2NDQKLS0tIGEvcmVhZC1jYWNoZS5jCisrKyBiL3JlYWQtY2FjaGUuYwpAQCAtMjMsODAgKzIzLDIxIEBACiAKIHN0cnVjdCBpbmRleF9zdGF0ZSB0aGVfaW5kZXg7CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaGFzaF9uYW1lKGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuKQotewotCXVuc2lnbmVkIGludCBoYXNoID0gMHgxMjM7Ci0KLQlkbyB7Ci0JCXVuc2lnbmVkIGNoYXIgYyA9ICpuYW1lKys7Ci0JCWhhc2ggPSBoYXNoKjEwMSArIGM7Ci0JfSB3aGlsZSAoLS1uYW1lbGVuKTsKLQlyZXR1cm4gaGFzaDsKLX0KLQotc3RhdGljIHZvaWQgaGFzaF9pbmRleF9lbnRyeShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKLXsKLQl2b2lkICoqcG9zOwotCXVuc2lnbmVkIGludCBoYXNoOwotCi0JaWYgKGNlLT5jZV9mbGFncyAmIENFX0hBU0hFRCkKLQkJcmV0dXJuOwotCWNlLT5jZV9mbGFncyB8PSBDRV9IQVNIRUQ7Ci0JY2UtPm5leHQgPSBOVUxMOwotCWhhc2ggPSBoYXNoX25hbWUoY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpKTsKLQlwb3MgPSBpbnNlcnRfaGFzaChoYXNoLCBjZSwgJmlzdGF0ZS0+bmFtZV9oYXNoKTsKLQlpZiAocG9zKSB7Ci0JCWNlLT5uZXh0ID0gKnBvczsKLQkJKnBvcyA9IGNlOwotCX0KLX0KLQotc3RhdGljIHZvaWQgbGF6eV9pbml0X25hbWVfaGFzaChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKLXsKLQlpbnQgbnI7Ci0KLQlpZiAoaXN0YXRlLT5uYW1lX2hhc2hfaW5pdGlhbGl6ZWQpCi0JCXJldHVybjsKLQlmb3IgKG5yID0gMDsgbnIgPCBpc3RhdGUtPmNhY2hlX25yOyBucisrKQotCQloYXNoX2luZGV4X2VudHJ5KGlzdGF0ZSwgaXN0YXRlLT5jYWNoZVtucl0pOwotCWlzdGF0ZS0+bmFtZV9oYXNoX2luaXRpYWxpemVkID0gMTsKLX0KLQogc3RhdGljIHZvaWQgc2V0X2luZGV4X2VudHJ5KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBpbnQgbnIsIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCiB7Ci0JY2UtPmNlX2ZsYWdzICY9IH5DRV9VTkhBU0hFRDsKIAlpc3RhdGUtPmNhY2hlW25yXSA9IGNlOwotCWlmIChpc3RhdGUtPm5hbWVfaGFzaF9pbml0aWFsaXplZCkKLQkJaGFzaF9pbmRleF9lbnRyeShpc3RhdGUsIGNlKTsKKwlhZGRfbmFtZV9oYXNoKGlzdGF0ZSwgY2UpOwogfQogCiBzdGF0aWMgdm9pZCByZXBsYWNlX2luZGV4X2VudHJ5KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBpbnQgbnIsIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCiB7CiAJc3RydWN0IGNhY2hlX2VudHJ5ICpvbGQgPSBpc3RhdGUtPmNhY2hlW25yXTsKIAotCXJlbW92ZV9pbmRleF9lbnRyeShvbGQpOworCXJlbW92ZV9uYW1lX2hhc2gob2xkKTsKIAlzZXRfaW5kZXhfZW50cnkoaXN0YXRlLCBuciwgY2UpOwogCWlzdGF0ZS0+Y2FjaGVfY2hhbmdlZCA9IDE7CiB9CiAKLWludCBpbmRleF9uYW1lX2V4aXN0cyhzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4pCi17Ci0JdW5zaWduZWQgaW50IGhhc2ggPSBoYXNoX25hbWUobmFtZSwgbmFtZWxlbik7Ci0Jc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKLQotCWxhenlfaW5pdF9uYW1lX2hhc2goaXN0YXRlKTsKLQljZSA9IGxvb2t1cF9oYXNoKGhhc2gsICZpc3RhdGUtPm5hbWVfaGFzaCk7Ci0KLQl3aGlsZSAoY2UpIHsKLQkJaWYgKCEoY2UtPmNlX2ZsYWdzICYgQ0VfVU5IQVNIRUQpKSB7Ci0JCQlpZiAoIWNhY2hlX25hbWVfY29tcGFyZShuYW1lLCBuYW1lbGVuLCBjZS0+bmFtZSwgY2UtPmNlX2ZsYWdzKSkKLQkJCQlyZXR1cm4gMTsKLQkJfQotCQljZSA9IGNlLT5uZXh0OwotCX0KLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIFRoaXMgb25seSB1cGRhdGVzIHRoZSAibm9uLWNyaXRpY2FsIiBwYXJ0cyBvZiB0aGUgZGlyZWN0b3J5CiAgKiBjYWNoZSwgaWUgdGhlIHBhcnRzIHRoYXQgYXJlbid0IHRyYWNrZWQgYnkgR0lULCBhbmQgb25seSB1c2VkCkBAIC0xOTcsNiArMTM4LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaXNfZW1wdHlfYmxvYl9zaGExKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZW1wdHlfYmxvYl9zaGExWzIwXSA9IHsKKwkJMHhlNiwweDlkLDB4ZTIsMHg5YiwweGIyLDB4ZDEsMHhkNiwweDQzLDB4NGIsMHg4YiwKKwkJMHgyOSwweGFlLDB4NzcsMHg1YSwweGQ4LDB4YzIsMHhlNCwweDhjLDB4NTMsMHg5MQorCX07CisKKwlyZXR1cm4gIWhhc2hjbXAoc2hhMSwgZW1wdHlfYmxvYl9zaGExKTsKK30KKwogc3RhdGljIGludCBjZV9tYXRjaF9zdGF0X2Jhc2ljKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCBzdGF0ICpzdCkKIHsKIAl1bnNpZ25lZCBpbnQgY2hhbmdlZCA9IDA7CkBAIC0yNTIsMTIgKzIwMywxOSBAQAogCWlmIChjZS0+Y2Vfc2l6ZSAhPSAodW5zaWduZWQgaW50KSBzdC0+c3Rfc2l6ZSkKIAkJY2hhbmdlZCB8PSBEQVRBX0NIQU5HRUQ7CiAKKwkvKiBSYWNpbHkgc211ZGdlZCBlbnRyeT8gKi8KKwlpZiAoIWNlLT5jZV9zaXplKSB7CisJCWlmICghaXNfZW1wdHlfYmxvYl9zaGExKGNlLT5zaGExKSkKKwkJCWNoYW5nZWQgfD0gREFUQV9DSEFOR0VEOworCX0KKwogCXJldHVybiBjaGFuZ2VkOwogfQogCiBzdGF0aWMgaW50IGlzX3JhY3lfdGltZXN0YW1wKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQogewotCXJldHVybiAoaXN0YXRlLT50aW1lc3RhbXAgJiYKKwlyZXR1cm4gKCFTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkgJiYKKwkJaXN0YXRlLT50aW1lc3RhbXAgJiYKIAkJKCh1bnNpZ25lZCBpbnQpaXN0YXRlLT50aW1lc3RhbXApIDw9IGNlLT5jZV9tdGltZSk7CiB9CiAKQEAgLTQzOCw3ICszOTYsNyBAQAogewogCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpc3RhdGUtPmNhY2hlW3Bvc107CiAKLQlyZW1vdmVfaW5kZXhfZW50cnkoY2UpOworCXJlbW92ZV9uYW1lX2hhc2goY2UpOwogCWlzdGF0ZS0+Y2FjaGVfY2hhbmdlZCA9IDE7CiAJaXN0YXRlLT5jYWNoZV9uci0tOwogCWlmIChwb3MgPj0gaXN0YXRlLT5jYWNoZV9ucikKQEAgLTQ4OCwyMSArNDQ2LDUyIEBACiAJcmV0dXJuIHBvczsKIH0KIAotaW50IGFkZF9maWxlX3RvX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgdmVyYm9zZSkKK3N0YXRpYyBpbnQgZGlmZmVyZW50X25hbWUoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IGNhY2hlX2VudHJ5ICphbGlhcykKIHsKLQlpbnQgc2l6ZSwgbmFtZWxlbiwgcG9zOwotCXN0cnVjdCBzdGF0IHN0OwotCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisJaW50IGxlbiA9IGNlX25hbWVsZW4oY2UpOworCXJldHVybiBjZV9uYW1lbGVuKGFsaWFzKSAhPSBsZW4gfHwgbWVtY21wKGNlLT5uYW1lLCBhbGlhcy0+bmFtZSwgbGVuKTsKK30KKworLyoKKyAqIElmIHdlIGFkZCBhIGZpbGVuYW1lIHRoYXQgYWxpYXNlcyBpbiB0aGUgY2FjaGUsIHdlIHdpbGwgdXNlIHRoZQorICogbmFtZSB0aGF0IHdlIGFscmVhZHkgaGF2ZSAtIGJ1dCB3ZSBkb24ndCB3YW50IHRvIHVwZGF0ZSB0aGUgc2FtZQorICogYWxpYXMgdHdpY2UsIGJlY2F1c2UgdGhhdCBpbXBsaWVzIHRoYXQgdGhlcmUgd2VyZSBhY3R1YWxseSB0d28KKyAqIGRpZmZlcmVudCBmaWxlcyB3aXRoIGFsaWFzaW5nIG5hbWVzIQorICoKKyAqIFNvIHdlIHVzZSB0aGUgQ0VfQURERUQgZmxhZyB0byB2ZXJpZnkgdGhhdCB0aGUgYWxpYXMgd2FzIGFuIG9sZAorICogb25lIGJlZm9yZSB3ZSBhY2NlcHQgaXQgYXMKKyAqLworc3RhdGljIHN0cnVjdCBjYWNoZV9lbnRyeSAqY3JlYXRlX2FsaWFzX2NlKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCBjYWNoZV9lbnRyeSAqYWxpYXMpCit7CisJaW50IGxlbjsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKm5ldzsKKworCWlmIChhbGlhcy0+Y2VfZmxhZ3MgJiBDRV9BRERFRCkKKwkJZGllKCJXaWxsIG5vdCBhZGQgZmlsZSBhbGlhcyAnJXMnICgnJXMnIGFscmVhZHkgZXhpc3RzIGluIGluZGV4KSIsIGNlLT5uYW1lLCBhbGlhcy0+bmFtZSk7CisKKwkvKiBPaywgY3JlYXRlIHRoZSBuZXcgZW50cnkgdXNpbmcgdGhlIG5hbWUgb2YgdGhlIGV4aXN0aW5nIGFsaWFzICovCisJbGVuID0gY2VfbmFtZWxlbihhbGlhcyk7CisJbmV3ID0geGNhbGxvYygxLCBjYWNoZV9lbnRyeV9zaXplKGxlbikpOworCW1lbWNweShuZXctPm5hbWUsIGFsaWFzLT5uYW1lLCBsZW4pOworCWNvcHlfY2FjaGVfZW50cnkobmV3LCBjZSk7CisJZnJlZShjZSk7CisJcmV0dXJuIG5ldzsKK30KKworaW50IGFkZF90b19pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN0YXQgKnN0LCBpbnQgZmxhZ3MpCit7CisJaW50IHNpemUsIG5hbWVsZW4sIHdhc19zYW1lOworCW1vZGVfdCBzdF9tb2RlID0gc3QtPnN0X21vZGU7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgKmFsaWFzOwogCXVuc2lnbmVkIGNlX29wdGlvbiA9IENFX01BVENIX0lHTk9SRV9WQUxJRHxDRV9NQVRDSF9SQUNZX0lTX0RJUlRZOworCWludCB2ZXJib3NlID0gZmxhZ3MgJiAoQUREX0NBQ0hFX1ZFUkJPU0UgfCBBRERfQ0FDSEVfUFJFVEVORCk7CisJaW50IHByZXRlbmQgPSBmbGFncyAmIEFERF9DQUNIRV9QUkVURU5EOwogCi0JaWYgKGxzdGF0KHBhdGgsICZzdCkpCi0JCWRpZSgiJXM6IHVuYWJsZSB0byBzdGF0ICglcykiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOwotCi0JaWYgKCFTX0lTUkVHKHN0LnN0X21vZGUpICYmICFTX0lTTE5LKHN0LnN0X21vZGUpICYmICFTX0lTRElSKHN0LnN0X21vZGUpKQotCQlkaWUoIiVzOiBjYW4gb25seSBhZGQgcmVndWxhciBmaWxlcywgc3ltYm9saWMgbGlua3Mgb3IgZ2l0LWRpcmVjdG9yaWVzIiwgcGF0aCk7CisJaWYgKCFTX0lTUkVHKHN0X21vZGUpICYmICFTX0lTTE5LKHN0X21vZGUpICYmICFTX0lTRElSKHN0X21vZGUpKQorCQlyZXR1cm4gZXJyb3IoIiVzOiBjYW4gb25seSBhZGQgcmVndWxhciBmaWxlcywgc3ltYm9saWMgbGlua3Mgb3IgZ2l0LWRpcmVjdG9yaWVzIiwgcGF0aCk7CiAKIAluYW1lbGVuID0gc3RybGVuKHBhdGgpOwotCWlmIChTX0lTRElSKHN0LnN0X21vZGUpKSB7CisJaWYgKFNfSVNESVIoc3RfbW9kZSkpIHsKIAkJd2hpbGUgKG5hbWVsZW4gJiYgcGF0aFtuYW1lbGVuLTFdID09ICcvJykKIAkJCW5hbWVsZW4tLTsKIAl9CkBAIC01MTAsMTAgKzQ5OSwxMCBAQAogCWNlID0geGNhbGxvYygxLCBzaXplKTsKIAltZW1jcHkoY2UtPm5hbWUsIHBhdGgsIG5hbWVsZW4pOwogCWNlLT5jZV9mbGFncyA9IG5hbWVsZW47Ci0JZmlsbF9zdGF0X2NhY2hlX2luZm8oY2UsICZzdCk7CisJZmlsbF9zdGF0X2NhY2hlX2luZm8oY2UsIHN0KTsKIAogCWlmICh0cnVzdF9leGVjdXRhYmxlX2JpdCAmJiBoYXNfc3ltbGlua3MpCi0JCWNlLT5jZV9tb2RlID0gY3JlYXRlX2NlX21vZGUoc3Quc3RfbW9kZSk7CisJCWNlLT5jZV9tb2RlID0gY3JlYXRlX2NlX21vZGUoc3RfbW9kZSk7CiAJZWxzZSB7CiAJCS8qIElmIHRoZXJlIGlzIGFuIGV4aXN0aW5nIGVudHJ5LCBwaWNrIHRoZSBtb2RlIGJpdHMgYW5kIHR5cGUKIAkJICogZnJvbSBpdCwgb3RoZXJ3aXNlIGFzc3VtZSB1bmV4ZWN1dGFibGUgcmVndWxhciBmaWxlLgpAQCAtNTIyLDI4ICs1MTEsNDYgQEAKIAkJaW50IHBvcyA9IGluZGV4X25hbWVfcG9zX2Fsc29fdW5tZXJnZWQoaXN0YXRlLCBwYXRoLCBuYW1lbGVuKTsKIAogCQllbnQgPSAoMCA8PSBwb3MpID8gaXN0YXRlLT5jYWNoZVtwb3NdIDogTlVMTDsKLQkJY2UtPmNlX21vZGUgPSBjZV9tb2RlX2Zyb21fc3RhdChlbnQsIHN0LnN0X21vZGUpOworCQljZS0+Y2VfbW9kZSA9IGNlX21vZGVfZnJvbV9zdGF0KGVudCwgc3RfbW9kZSk7CiAJfQogCi0JcG9zID0gaW5kZXhfbmFtZV9wb3MoaXN0YXRlLCBjZS0+bmFtZSwgbmFtZWxlbik7Ci0JaWYgKDAgPD0gcG9zICYmCi0JICAgICFjZV9zdGFnZShpc3RhdGUtPmNhY2hlW3Bvc10pICYmCi0JICAgICFpZV9tYXRjaF9zdGF0KGlzdGF0ZSwgaXN0YXRlLT5jYWNoZVtwb3NdLCAmc3QsIGNlX29wdGlvbikpIHsKKwlhbGlhcyA9IGluZGV4X25hbWVfZXhpc3RzKGlzdGF0ZSwgY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpLCBpZ25vcmVfY2FzZSk7CisJaWYgKGFsaWFzICYmICFjZV9zdGFnZShhbGlhcykgJiYgIWllX21hdGNoX3N0YXQoaXN0YXRlLCBhbGlhcywgc3QsIGNlX29wdGlvbikpIHsKIAkJLyogTm90aGluZyBjaGFuZ2VkLCByZWFsbHkgKi8KIAkJZnJlZShjZSk7Ci0JCWNlX21hcmtfdXB0b2RhdGUoaXN0YXRlLT5jYWNoZVtwb3NdKTsKKwkJY2VfbWFya191cHRvZGF0ZShhbGlhcyk7CisJCWFsaWFzLT5jZV9mbGFncyB8PSBDRV9BRERFRDsKIAkJcmV0dXJuIDA7CiAJfQorCWlmIChpbmRleF9wYXRoKGNlLT5zaGExLCBwYXRoLCBzdCwgMSkpCisJCXJldHVybiBlcnJvcigidW5hYmxlIHRvIGluZGV4IGZpbGUgJXMiLCBwYXRoKTsKKwlpZiAoaWdub3JlX2Nhc2UgJiYgYWxpYXMgJiYgZGlmZmVyZW50X25hbWUoY2UsIGFsaWFzKSkKKwkJY2UgPSBjcmVhdGVfYWxpYXNfY2UoY2UsIGFsaWFzKTsKKwljZS0+Y2VfZmxhZ3MgfD0gQ0VfQURERUQ7CiAKLQlpZiAoaW5kZXhfcGF0aChjZS0+c2hhMSwgcGF0aCwgJnN0LCAxKSkKLQkJZGllKCJ1bmFibGUgdG8gaW5kZXggZmlsZSAlcyIsIHBhdGgpOwotCWlmIChhZGRfaW5kZXhfZW50cnkoaXN0YXRlLCBjZSwgQUREX0NBQ0hFX09LX1RPX0FERHxBRERfQ0FDSEVfT0tfVE9fUkVQTEFDRSkpCi0JCWRpZSgidW5hYmxlIHRvIGFkZCAlcyB0byBpbmRleCIscGF0aCk7Ci0JaWYgKHZlcmJvc2UpCisJLyogSXQgd2FzIHN1c3BlY3RlZCB0byBiZSByZWNpbHkgY2xlYW4sIGJ1dCBpdCB0dXJucyBvdXQgdG8gYmUgT2sgKi8KKwl3YXNfc2FtZSA9IChhbGlhcyAmJgorCQkgICAgIWNlX3N0YWdlKGFsaWFzKSAmJgorCQkgICAgIWhhc2hjbXAoYWxpYXMtPnNoYTEsIGNlLT5zaGExKSAmJgorCQkgICAgY2UtPmNlX21vZGUgPT0gYWxpYXMtPmNlX21vZGUpOworCisJaWYgKHByZXRlbmQpCisJCTsKKwllbHNlIGlmIChhZGRfaW5kZXhfZW50cnkoaXN0YXRlLCBjZSwgQUREX0NBQ0hFX09LX1RPX0FERHxBRERfQ0FDSEVfT0tfVE9fUkVQTEFDRSkpCisJCXJldHVybiBlcnJvcigidW5hYmxlIHRvIGFkZCAlcyB0byBpbmRleCIscGF0aCk7CisJaWYgKHZlcmJvc2UgJiYgIXdhc19zYW1lKQogCQlwcmludGYoImFkZCAnJXMnXG4iLCBwYXRoKTsKIAlyZXR1cm4gMDsKIH0KIAoraW50IGFkZF9maWxlX3RvX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHN0YXQgc3Q7CisJaWYgKGxzdGF0KHBhdGgsICZzdCkpCisJCWRpZSgiJXM6IHVuYWJsZSB0byBzdGF0ICglcykiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOworCXJldHVybiBhZGRfdG9faW5kZXgoaXN0YXRlLCBwYXRoLCAmc3QsIGZsYWdzKTsKK30KKwogc3RydWN0IGNhY2hlX2VudHJ5ICptYWtlX2NhY2hlX2VudHJ5KHVuc2lnbmVkIGludCBtb2RlLAogCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgc3RhZ2UsCiAJCWludCByZWZyZXNoKQpAQCAtOTAyLDYgKzkwOSwxNSBAQAogCWlmIChjZV91cHRvZGF0ZShjZSkpCiAJCXJldHVybiBjZTsKIAorCS8qCisJICogQ0VfVkFMSUQgbWVhbnMgdGhlIHVzZXIgcHJvbWlzZWQgdXMgdGhhdCB0aGUgY2hhbmdlIHRvCisJICogdGhlIHdvcmsgdHJlZSBkb2VzIG5vdCBtYXR0ZXIgYW5kIHRvbGQgdXMgbm90IHRvIHdvcnJ5LgorCSAqLworCWlmICghaWdub3JlX3ZhbGlkICYmIChjZS0+Y2VfZmxhZ3MgJiBDRV9WQUxJRCkpIHsKKwkJY2VfbWFya191cHRvZGF0ZShjZSk7CisJCXJldHVybiBjZTsKKwl9CisKIAlpZiAobHN0YXQoY2UtPm5hbWUsICZzdCkgPCAwKSB7CiAJCWlmIChlcnIpCiAJCQkqZXJyID0gZXJybm87CkBAIC05NjIsNiArOTc4LDcgQEAKIAlpbnQgYWxsb3dfdW5tZXJnZWQgPSAoZmxhZ3MgJiBSRUZSRVNIX1VOTUVSR0VEKSAhPSAwOwogCWludCBxdWlldCA9IChmbGFncyAmIFJFRlJFU0hfUVVJRVQpICE9IDA7CiAJaW50IG5vdF9uZXcgPSAoZmxhZ3MgJiBSRUZSRVNIX0lHTk9SRV9NSVNTSU5HKSAhPSAwOworCWludCBpZ25vcmVfc3VibW9kdWxlcyA9IChmbGFncyAmIFJFRlJFU0hfSUdOT1JFX1NVQk1PRFVMRVMpICE9IDA7CiAJdW5zaWduZWQgaW50IG9wdGlvbnMgPSByZWFsbHkgPyBDRV9NQVRDSF9JR05PUkVfVkFMSUQgOiAwOwogCiAJZm9yIChpID0gMDsgaSA8IGlzdGF0ZS0+Y2FjaGVfbnI7IGkrKykgewpAQCAtOTY5LDYgKzk4Niw5IEBACiAJCWludCBjYWNoZV9lcnJubyA9IDA7CiAKIAkJY2UgPSBpc3RhdGUtPmNhY2hlW2ldOworCQlpZiAoaWdub3JlX3N1Ym1vZHVsZXMgJiYgU19JU0dJVExJTksoY2UtPmNlX21vZGUpKQorCQkJY29udGludWU7CisKIAkJaWYgKGNlX3N0YWdlKGNlKSkgewogCQkJd2hpbGUgKChpIDwgaXN0YXRlLT5jYWNoZV9ucikgJiYKIAkJCSAgICAgICAhIHN0cmNtcChpc3RhdGUtPmNhY2hlW2ldLT5uYW1lLCBjZS0+bmFtZSkpCkBAIC0xMzcwLDcgKzEzOTAsNyBAQAogCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gY2FjaGVbaV07CiAJCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9SRU1PVkUpCiAJCQljb250aW51ZTsKLQkJaWYgKGlzX3JhY3lfdGltZXN0YW1wKGlzdGF0ZSwgY2UpKQorCQlpZiAoIWNlX3VwdG9kYXRlKGNlKSAmJiBpc19yYWN5X3RpbWVzdGFtcChpc3RhdGUsIGNlKSkKIAkJCWNlX3NtdWRnZV9yYWNpbHlfY2xlYW5fZW50cnkoY2UpOwogCQlpZiAoY2Vfd3JpdGVfZW50cnkoJmMsIG5ld2ZkLCBjZSkgPCAwKQogCQkJcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvcmVjZWl2ZS1wYWNrLmMgYi9yZWNlaXZlLXBhY2suYwppbmRleCBmODNhZTg3Li5iMjZmMmUzIDEwMDY0NAotLS0gYS9yZWNlaXZlLXBhY2suYworKysgYi9yZWNlaXZlLXBhY2suYwpAQCAtMTAsNiArMTAsNyBAQAogc3RhdGljIGNvbnN0IGNoYXIgcmVjZWl2ZV9wYWNrX3VzYWdlW10gPSAiZ2l0LXJlY2VpdmUtcGFjayA8Z2l0LWRpcj4iOwogCiBzdGF0aWMgaW50IGRlbnlfbm9uX2Zhc3RfZm9yd2FyZHMgPSAwOworc3RhdGljIGludCByZWNlaXZlX2ZzY2tfb2JqZWN0czsKIHN0YXRpYyBpbnQgcmVjZWl2ZV91bnBhY2tfbGltaXQgPSAtMTsKIHN0YXRpYyBpbnQgdHJhbnNmZXJfdW5wYWNrX2xpbWl0ID0gLTE7CiBzdGF0aWMgaW50IHVucGFja19saW1pdCA9IDEwMDsKQEAgLTE4LDcgKzE5LDcgQEAKIHN0YXRpYyBjaGFyIGNhcGFiaWxpdGllc1tdID0gIiByZXBvcnQtc3RhdHVzIGRlbGV0ZS1yZWZzICI7CiBzdGF0aWMgaW50IGNhcGFiaWxpdGllc19zZW50OwogCi1zdGF0aWMgaW50IHJlY2VpdmVfcGFja19jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3N0YXRpYyBpbnQgcmVjZWl2ZV9wYWNrX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKIHsKIAlpZiAoc3RyY21wKHZhciwgInJlY2VpdmUuZGVueW5vbmZhc3Rmb3J3YXJkcyIpID09IDApIHsKIAkJZGVueV9ub25fZmFzdF9mb3J3YXJkcyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKQEAgLTM1LDcgKzM2LDEyIEBACiAJCXJldHVybiAwOwogCX0KIAotCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSk7CisJaWYgKHN0cmNtcCh2YXIsICJyZWNlaXZlLmZzY2tvYmplY3RzIikgPT0gMCkgeworCQlyZWNlaXZlX2ZzY2tfb2JqZWN0cyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CiB9CiAKIHN0YXRpYyBpbnQgc2hvd19yZWYoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCkBAIC0zNjgsMTEgKzM3NCwxMyBAQAogCQkJbnRvaGwoaGRyLmhkcl92ZXJzaW9uKSwgbnRvaGwoaGRyLmhkcl9lbnRyaWVzKSk7CiAKIAlpZiAobnRvaGwoaGRyLmhkcl9lbnRyaWVzKSA8IHVucGFja19saW1pdCkgewotCQlpbnQgY29kZTsKLQkJY29uc3QgY2hhciAqdW5wYWNrZXJbM107Ci0JCXVucGFja2VyWzBdID0gInVucGFjay1vYmplY3RzIjsKLQkJdW5wYWNrZXJbMV0gPSBoZHJfYXJnOwotCQl1bnBhY2tlclsyXSA9IE5VTEw7CisJCWludCBjb2RlLCBpID0gMDsKKwkJY29uc3QgY2hhciAqdW5wYWNrZXJbNF07CisJCXVucGFja2VyW2krK10gPSAidW5wYWNrLW9iamVjdHMiOworCQlpZiAocmVjZWl2ZV9mc2NrX29iamVjdHMpCisJCQl1bnBhY2tlcltpKytdID0gIi0tc3RyaWN0IjsKKwkJdW5wYWNrZXJbaSsrXSA9IGhkcl9hcmc7CisJCXVucGFja2VyW2krK10gPSBOVUxMOwogCQljb2RlID0gcnVuX2NvbW1hbmRfdl9vcHQodW5wYWNrZXIsIFJVTl9HSVRfQ01EKTsKIAkJc3dpdGNoIChjb2RlKSB7CiAJCWNhc2UgMDoKQEAgLTM5Myw4ICs0MDEsOCBAQAogCQkJcmV0dXJuICJ1bnBhY2tlciBleGl0ZWQgd2l0aCBlcnJvciBjb2RlIjsKIAkJfQogCX0gZWxzZSB7Ci0JCWNvbnN0IGNoYXIgKmtlZXBlcls2XTsKLQkJaW50IHMsIHN0YXR1czsKKwkJY29uc3QgY2hhciAqa2VlcGVyWzddOworCQlpbnQgcywgc3RhdHVzLCBpID0gMDsKIAkJY2hhciBrZWVwX2FyZ1syNTZdOwogCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBpcDsKIApAQCAtNDAyLDEyICs0MTAsMTQgQEAKIAkJaWYgKGdldGhvc3RuYW1lKGtlZXBfYXJnICsgcywgc2l6ZW9mKGtlZXBfYXJnKSAtIHMpKQogCQkJc3RyY3B5KGtlZXBfYXJnICsgcywgImxvY2FsaG9zdCIpOwogCi0JCWtlZXBlclswXSA9ICJpbmRleC1wYWNrIjsKLQkJa2VlcGVyWzFdID0gIi0tc3RkaW4iOwotCQlrZWVwZXJbMl0gPSAiLS1maXgtdGhpbiI7Ci0JCWtlZXBlclszXSA9IGhkcl9hcmc7Ci0JCWtlZXBlcls0XSA9IGtlZXBfYXJnOwotCQlrZWVwZXJbNV0gPSBOVUxMOworCQlrZWVwZXJbaSsrXSA9ICJpbmRleC1wYWNrIjsKKwkJa2VlcGVyW2krK10gPSAiLS1zdGRpbiI7CisJCWlmIChyZWNlaXZlX2ZzY2tfb2JqZWN0cykKKwkJCWtlZXBlcltpKytdID0gIi0tc3RyaWN0IjsKKwkJa2VlcGVyW2krK10gPSAiLS1maXgtdGhpbiI7CisJCWtlZXBlcltpKytdID0gaGRyX2FyZzsKKwkJa2VlcGVyW2krK10gPSBrZWVwX2FyZzsKKwkJa2VlcGVyW2krK10gPSBOVUxMOwogCQltZW1zZXQoJmlwLCAwLCBzaXplb2YoaXApKTsKIAkJaXAuYXJndiA9IGtlZXBlcjsKIAkJaXAub3V0ID0gLTE7CkBAIC00NzksNyArNDg5LDcgQEAKIAlpZiAoaXNfcmVwb3NpdG9yeV9zaGFsbG93KCkpCiAJCWRpZSgiYXR0ZW1wdCB0byBwdXNoIGludG8gYSBzaGFsbG93IHJlcG9zaXRvcnkiKTsKIAotCWdpdF9jb25maWcocmVjZWl2ZV9wYWNrX2NvbmZpZyk7CisJZ2l0X2NvbmZpZyhyZWNlaXZlX3BhY2tfY29uZmlnLCBOVUxMKTsKIAogCWlmICgwIDw9IHRyYW5zZmVyX3VucGFja19saW1pdCkKIAkJdW5wYWNrX2xpbWl0ID0gdHJhbnNmZXJfdW5wYWNrX2xpbWl0OwpkaWZmIC0tZ2l0IGEvcmVmcy5jIGIvcmVmcy5jCmluZGV4IDFiMDA1MGUuLmM5YmNmMTQgMTAwNjQ0Ci0tLSBhL3JlZnMuYworKysgYi9yZWZzLmMKQEAgLTE1OSw2ICsxNTksOCBAQAogfSBjYWNoZWRfcmVmczsKIHN0YXRpYyBzdHJ1Y3QgcmVmX2xpc3QgKmN1cnJlbnRfcmVmOwogCitzdGF0aWMgc3RydWN0IHJlZl9saXN0ICpleHRyYV9yZWZzOworCiBzdGF0aWMgdm9pZCBmcmVlX3JlZl9saXN0KHN0cnVjdCByZWZfbGlzdCAqbGlzdCkKIHsKIAlzdHJ1Y3QgcmVmX2xpc3QgKm5leHQ7CkBAIC0yMTUsNiArMjE3LDE3IEBACiAJY2FjaGVkX3JlZnMtPnBhY2tlZCA9IHNvcnRfcmVmX2xpc3QobGlzdCk7CiB9CiAKK3ZvaWQgYWRkX2V4dHJhX3JlZihjb25zdCBjaGFyICpuYW1lLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmxhZykKK3sKKwlleHRyYV9yZWZzID0gYWRkX3JlZihuYW1lLCBzaGExLCBmbGFnLCBleHRyYV9yZWZzLCBOVUxMKTsKK30KKwordm9pZCBjbGVhcl9leHRyYV9yZWZzKHZvaWQpCit7CisJZnJlZV9yZWZfbGlzdChleHRyYV9yZWZzKTsKKwlleHRyYV9yZWZzID0gTlVMTDsKK30KKwogc3RhdGljIHN0cnVjdCByZWZfbGlzdCAqZ2V0X3BhY2tlZF9yZWZzKHZvaWQpCiB7CiAJaWYgKCFjYWNoZWRfcmVmcy5kaWRfcGFja2VkKSB7CkBAIC0zNTIsNiArMzY1LDcgQEAKIHsKIAlpbnQgbGVuID0gc3RybGVuKHBhdGgpLCByZXR2YWw7CiAJY2hhciAqZ2l0ZGlyOworCWNvbnN0IGNoYXIgKnRtcDsKIAogCXdoaWxlIChsZW4gJiYgcGF0aFtsZW4tMV0gPT0gJy8nKQogCQlsZW4tLTsKQEAgLTM1OSwxNiArMzczLDI3IEBACiAJCXJldHVybiAtMTsKIAlnaXRkaXIgPSB4bWFsbG9jKGxlbiArIE1BWFJFRkxFTiArIDgpOwogCW1lbWNweShnaXRkaXIsIHBhdGgsIGxlbik7Ci0JbWVtY3B5KGdpdGRpciArIGxlbiwgIi8uZ2l0LyIsIDcpOworCW1lbWNweShnaXRkaXIgKyBsZW4sICIvLmdpdCIsIDYpOworCWxlbiArPSA1OwogCi0JcmV0dmFsID0gcmVzb2x2ZV9naXRsaW5rX3JlZl9yZWN1cnNpdmUoZ2l0ZGlyLCBsZW4rNiwgcmVmbmFtZSwgcmVzdWx0LCAwKTsKKwl0bXAgPSByZWFkX2dpdGZpbGVfZ2VudGx5KGdpdGRpcik7CisJaWYgKHRtcCkgeworCQlmcmVlKGdpdGRpcik7CisJCWxlbiA9IHN0cmxlbih0bXApOworCQlnaXRkaXIgPSB4bWFsbG9jKGxlbiArIE1BWFJFRkxFTiArIDMpOworCQltZW1jcHkoZ2l0ZGlyLCB0bXAsIGxlbik7CisJfQorCWdpdGRpcltsZW5dID0gJy8nOworCWdpdGRpclsrK2xlbl0gPSAnXDAnOworCXJldHZhbCA9IHJlc29sdmVfZ2l0bGlua19yZWZfcmVjdXJzaXZlKGdpdGRpciwgbGVuLCByZWZuYW1lLCByZXN1bHQsIDApOwogCWZyZWUoZ2l0ZGlyKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCiBjb25zdCBjaGFyICpyZXNvbHZlX3JlZihjb25zdCBjaGFyICpyZWYsIHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCByZWFkaW5nLCBpbnQgKmZsYWcpCiB7Ci0JaW50IGRlcHRoID0gTUFYREVQVEgsIGxlbjsKKwlpbnQgZGVwdGggPSBNQVhERVBUSDsKKwlzc2l6ZV90IGxlbjsKIAljaGFyIGJ1ZmZlclsyNTZdOwogCXN0YXRpYyBjaGFyIHJlZl9idWZmZXJbMjU2XTsKIApAQCAtNTM1LDYgKzU2MCwxMSBAQAogCXN0cnVjdCByZWZfbGlzdCAqcGFja2VkID0gZ2V0X3BhY2tlZF9yZWZzKCk7CiAJc3RydWN0IHJlZl9saXN0ICpsb29zZSA9IGdldF9sb29zZV9yZWZzKCk7CiAKKwlzdHJ1Y3QgcmVmX2xpc3QgKmV4dHJhOworCisJZm9yIChleHRyYSA9IGV4dHJhX3JlZnM7IGV4dHJhOyBleHRyYSA9IGV4dHJhLT5uZXh0KQorCQlyZXR2YWwgPSBkb19vbmVfcmVmKGJhc2UsIGZuLCB0cmltLCBjYl9kYXRhLCBleHRyYSk7CisKIAl3aGlsZSAocGFja2VkICYmIGxvb3NlKSB7CiAJCXN0cnVjdCByZWZfbGlzdCAqZW50cnk7CiAJCWludCBjbXAgPSBzdHJjbXAocGFja2VkLT5uYW1lLCBsb29zZS0+bmFtZSk7CkBAIC04OTUsNyArOTI1LDcgQEAKIAkJaSA9IHN0cmxlbihsb2NrLT5say0+ZmlsZW5hbWUpIC0gNTsgLyogLmxvY2sgKi8KIAkJbG9jay0+bGstPmZpbGVuYW1lW2ldID0gMDsKIAkJZXJyID0gdW5saW5rKGxvY2stPmxrLT5maWxlbmFtZSk7Ci0JCWlmIChlcnIpIHsKKwkJaWYgKGVyciAmJiBlcnJubyAhPSBFTk9FTlQpIHsKIAkJCXJldCA9IDE7CiAJCQllcnJvcigidW5saW5rKCVzKSBmYWlsZWQ6ICVzIiwKIAkJCSAgICAgIGxvY2stPmxrLT5maWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKZGlmZiAtLWdpdCBhL3JlZnMuaCBiL3JlZnMuaAppbmRleCAwNmFiZWUxLi4wNmFkMjYwIDEwMDY0NAotLS0gYS9yZWZzLmgKKysrIGIvcmVmcy5oCkBAIC0yNCw2ICsyNCwxNSBAQAogZXh0ZXJuIGludCBmb3JfZWFjaF9icmFuY2hfcmVmKGVhY2hfcmVmX2ZuLCB2b2lkICopOwogZXh0ZXJuIGludCBmb3JfZWFjaF9yZW1vdGVfcmVmKGVhY2hfcmVmX2ZuLCB2b2lkICopOwogCisvKgorICogRXh0cmEgcmVmcyB3aWxsIGJlIGxpc3RlZCBieSBmb3JfZWFjaF9yZWYoKSBiZWZvcmUgYW55IGFjdHVhbCByZWZzCisgKiBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoaXMgcHJvY2VzcyBvciB1bnRpbCBjbGVhcl9leHRyYV9yZWZzKCkgaXMKKyAqIGNhbGxlZC4gT25seSBleHRyYSByZWZzIGFkZGVkIGJlZm9yZSBmb3JfZWFjaF9yZWYoKSBpcyBjYWxsZWQgd2lsbAorICogYmUgbGlzdGVkIG9uIGEgZ2l2ZW4gY2FsbCBvZiBmb3JfZWFjaF9yZWYoKS4KKyAqLworZXh0ZXJuIHZvaWQgYWRkX2V4dHJhX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmxhZ3MpOworZXh0ZXJuIHZvaWQgY2xlYXJfZXh0cmFfcmVmcyh2b2lkKTsKKwogZXh0ZXJuIGludCBwZWVsX3JlZihjb25zdCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKik7CiAKIC8qKiBMb2NrcyBhICJyZWZzLyIgcmVmIHJldHVybmluZyB0aGUgbG9jayBvbiBzdWNjZXNzIGFuZCBOVUxMIG9uIGZhaWx1cmUuICoqLwpkaWZmIC0tZ2l0IGEvcmVtb3RlLmMgYi9yZW1vdGUuYwppbmRleCAyZDlhZjQwLi41ZjY4N2IyIDEwMDY0NAotLS0gYS9yZW1vdGUuYworKysgYi9yZW1vdGUuYwpAQCAtMiw2ICsyLDE2IEBACiAjaW5jbHVkZSAicmVtb3RlLmgiCiAjaW5jbHVkZSAicmVmcy5oIgogCitzdGF0aWMgc3RydWN0IHJlZnNwZWMgc190YWdfcmVmc3BlYyA9IHsKKwkwLAorCTEsCisJMCwKKwkicmVmcy90YWdzLyIsCisJInJlZnMvdGFncy8iCit9OworCitjb25zdCBzdHJ1Y3QgcmVmc3BlYyAqdGFnX3JlZnNwZWMgPSAmc190YWdfcmVmc3BlYzsKKwogc3RydWN0IGNvdW50ZWRfc3RyaW5nIHsKIAlzaXplX3QgbGVuOwogCWNvbnN0IGNoYXIgKnM7CkBAIC0yODgsNyArMjk4LDcgQEAKIAlyZW1vdGUtPmZldGNoX3RhZ3MgPSAxOyAvKiBhbHdheXMgYXV0by1mb2xsb3cgKi8KIH0KIAotc3RhdGljIGludCBoYW5kbGVfY29uZmlnKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUpCitzdGF0aWMgaW50IGhhbmRsZV9jb25maWcoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCiB7CiAJY29uc3QgY2hhciAqbmFtZTsKIAljb25zdCBjaGFyICpzdWJrZXk7CkBAIC0zMzcsNDQgKzM0Nyw0OSBAQAogCQlyZXR1cm4gMDsKIAl9CiAJcmVtb3RlID0gbWFrZV9yZW1vdGUobmFtZSwgc3Via2V5IC0gbmFtZSk7Ci0JaWYgKCF2YWx1ZSkgewotCQkvKiBpZiB3ZSBldmVyIGhhdmUgYSBib29sZWFuIHZhcmlhYmxlLCBlLmcuICJyZW1vdGUuKi5kaXNhYmxlZCIKLQkJICogW3JlbW90ZSAiZnJvdHoiXQotCQkgKiAgICAgIGRpc2FibGVkCi0JCSAqIGlzIGEgdmFsaWQgd2F5IHRvIHNldCBpdCB0byB0cnVlOyB3ZSBnZXQgTlVMTCBpbiB2YWx1ZSBzbwotCQkgKiB3ZSBuZWVkIHRvIGhhbmRsZSBpdCBoZXJlLgotCQkgKgotCQkgKiBpZiAoIXN0cmNtcChzdWJrZXksICIuZGlzYWJsZWQiKSkgewotCQkgKiAgICAgIHZhbCA9IGdpdF9jb25maWdfYm9vbChrZXksIHZhbHVlKTsKLQkJICogICAgICByZXR1cm4gMDsKLQkJICogfSBlbHNlCi0JCSAqCi0JCSAqLwotCQlyZXR1cm4gMDsgLyogaWdub3JlIHVua25vd24gYm9vbGVhbnMgKi8KLQl9Ci0JaWYgKCFzdHJjbXAoc3Via2V5LCAiLnVybCIpKSB7Ci0JCWFkZF91cmwocmVtb3RlLCB4c3RyZHVwKHZhbHVlKSk7CisJaWYgKCFzdHJjbXAoc3Via2V5LCAiLm1pcnJvciIpKQorCQlyZW1vdGUtPm1pcnJvciA9IGdpdF9jb25maWdfYm9vbChrZXksIHZhbHVlKTsKKwllbHNlIGlmICghc3RyY21wKHN1YmtleSwgIi5za2lwZGVmYXVsdHVwZGF0ZSIpKQorCQlyZW1vdGUtPnNraXBfZGVmYXVsdF91cGRhdGUgPSBnaXRfY29uZmlnX2Jvb2woa2V5LCB2YWx1ZSk7CisKKwllbHNlIGlmICghc3RyY21wKHN1YmtleSwgIi51cmwiKSkgeworCQljb25zdCBjaGFyICp2OworCQlpZiAoZ2l0X2NvbmZpZ19zdHJpbmcoJnYsIGtleSwgdmFsdWUpKQorCQkJcmV0dXJuIC0xOworCQlhZGRfdXJsKHJlbW90ZSwgdik7CiAJfSBlbHNlIGlmICghc3RyY21wKHN1YmtleSwgIi5wdXNoIikpIHsKLQkJYWRkX3B1c2hfcmVmc3BlYyhyZW1vdGUsIHhzdHJkdXAodmFsdWUpKTsKKwkJY29uc3QgY2hhciAqdjsKKwkJaWYgKGdpdF9jb25maWdfc3RyaW5nKCZ2LCBrZXksIHZhbHVlKSkKKwkJCXJldHVybiAtMTsKKwkJYWRkX3B1c2hfcmVmc3BlYyhyZW1vdGUsIHYpOwogCX0gZWxzZSBpZiAoIXN0cmNtcChzdWJrZXksICIuZmV0Y2giKSkgewotCQlhZGRfZmV0Y2hfcmVmc3BlYyhyZW1vdGUsIHhzdHJkdXAodmFsdWUpKTsKKwkJY29uc3QgY2hhciAqdjsKKwkJaWYgKGdpdF9jb25maWdfc3RyaW5nKCZ2LCBrZXksIHZhbHVlKSkKKwkJCXJldHVybiAtMTsKKwkJYWRkX2ZldGNoX3JlZnNwZWMocmVtb3RlLCB2KTsKIAl9IGVsc2UgaWYgKCFzdHJjbXAoc3Via2V5LCAiLnJlY2VpdmVwYWNrIikpIHsKKwkJY29uc3QgY2hhciAqdjsKKwkJaWYgKGdpdF9jb25maWdfc3RyaW5nKCZ2LCBrZXksIHZhbHVlKSkKKwkJCXJldHVybiAtMTsKIAkJaWYgKCFyZW1vdGUtPnJlY2VpdmVwYWNrKQotCQkJcmVtb3RlLT5yZWNlaXZlcGFjayA9IHhzdHJkdXAodmFsdWUpOworCQkJcmVtb3RlLT5yZWNlaXZlcGFjayA9IHY7CiAJCWVsc2UKIAkJCWVycm9yKCJtb3JlIHRoYW4gb25lIHJlY2VpdmVwYWNrIGdpdmVuLCB1c2luZyB0aGUgZmlyc3QiKTsKIAl9IGVsc2UgaWYgKCFzdHJjbXAoc3Via2V5LCAiLnVwbG9hZHBhY2siKSkgeworCQljb25zdCBjaGFyICp2OworCQlpZiAoZ2l0X2NvbmZpZ19zdHJpbmcoJnYsIGtleSwgdmFsdWUpKQorCQkJcmV0dXJuIC0xOwogCQlpZiAoIXJlbW90ZS0+dXBsb2FkcGFjaykKLQkJCXJlbW90ZS0+dXBsb2FkcGFjayA9IHhzdHJkdXAodmFsdWUpOworCQkJcmVtb3RlLT51cGxvYWRwYWNrID0gdjsKIAkJZWxzZQogCQkJZXJyb3IoIm1vcmUgdGhhbiBvbmUgdXBsb2FkcGFjayBnaXZlbiwgdXNpbmcgdGhlIGZpcnN0Iik7CiAJfSBlbHNlIGlmICghc3RyY21wKHN1YmtleSwgIi50YWdvcHQiKSkgewogCQlpZiAoIXN0cmNtcCh2YWx1ZSwgIi0tbm8tdGFncyIpKQogCQkJcmVtb3RlLT5mZXRjaF90YWdzID0gLTE7CiAJfSBlbHNlIGlmICghc3RyY21wKHN1YmtleSwgIi5wcm94eSIpKSB7Ci0JCXJlbW90ZS0+aHR0cF9wcm94eSA9IHhzdHJkdXAodmFsdWUpOwotCX0gZWxzZSBpZiAoIXN0cmNtcChzdWJrZXksICIuc2tpcGRlZmF1bHR1cGRhdGUiKSkKLQkJcmVtb3RlLT5za2lwX2RlZmF1bHRfdXBkYXRlID0gMTsKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKChjb25zdCBjaGFyICoqKSZyZW1vdGUtPmh0dHBfcHJveHksCisJCQkJCSBrZXksIHZhbHVlKTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQwNSwxMCArNDIwLDMyIEBACiAJCWN1cnJlbnRfYnJhbmNoID0KIAkJCW1ha2VfYnJhbmNoKGhlYWRfcmVmICsgc3RybGVuKCJyZWZzL2hlYWRzLyIpLCAwKTsKIAl9Ci0JZ2l0X2NvbmZpZyhoYW5kbGVfY29uZmlnKTsKKwlnaXRfY29uZmlnKGhhbmRsZV9jb25maWcsIE5VTEwpOwogCWFsaWFzX2FsbF91cmxzKCk7CiB9CiAKKy8qCisgKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgdHJhY2tpbmcgYnJhbmNoZXMgYXJlIHdlbGwgZm9ybWVkLCBidXQgYQorICogd2lsZGNhcmQgcmVmc3BlYyBpbiAic3RydWN0IHJlZnNwZWMiIG11c3QgaGF2ZSBhIHRyYWlsaW5nIHNsYXNoLiBXZQorICogdGVtcG9yYXJpbHkgZHJvcCB0aGUgdHJhaWxpbmcgJy8nIHdoaWxlIGNhbGxpbmcgY2hlY2tfcmVmX2Zvcm1hdCgpLAorICogYW5kIHB1dCBpdCBiYWNrLiAgVGhlIGNhbGxlciBrbm93cyB0aGF0IGEgQ0hFQ0tfUkVGX0ZPUk1BVF9PTkVMRVZFTAorICogZXJyb3IgcmV0dXJuIGlzIE9rIGZvciBhIHdpbGRjYXJkIHJlZnNwZWMuCisgKi8KK3N0YXRpYyBpbnQgdmVyaWZ5X3JlZm5hbWUoY2hhciAqbmFtZSwgaW50IGlzX2dsb2IpCit7CisJaW50IHJlc3VsdCwgbGVuID0gLTE7CisKKwlpZiAoaXNfZ2xvYikgeworCQlsZW4gPSBzdHJsZW4obmFtZSk7CisJCWFzc2VydChuYW1lW2xlbiAtIDFdID09ICcvJyk7CisJCW5hbWVbbGVuIC0gMV0gPSAnXDAnOworCX0KKwlyZXN1bHQgPSBjaGVja19yZWZfZm9ybWF0KG5hbWUpOworCWlmIChpc19nbG9iKQorCQluYW1lW2xlbiAtIDFdID0gJy8nOworCXJldHVybiByZXN1bHQ7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcmVmc3BlYyAqcGFyc2VfcmVmc3BlY19pbnRlcm5hbChpbnQgbnJfcmVmc3BlYywgY29uc3QgY2hhciAqKnJlZnNwZWMsIGludCBmZXRjaCwgaW50IHZlcmlmeSkKIHsKIAlpbnQgaTsKQEAgLTQxNiwxMSArNDUzLDExIEBACiAJc3RydWN0IHJlZnNwZWMgKnJzID0geGNhbGxvYyhzaXplb2YoKnJzKSwgbnJfcmVmc3BlYyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnJfcmVmc3BlYzsgaSsrKSB7Ci0JCXNpemVfdCBsbGVuLCBybGVuOworCQlzaXplX3QgbGxlbjsKIAkJaW50IGlzX2dsb2I7CiAJCWNvbnN0IGNoYXIgKmxocywgKnJoczsKIAotCQlsbGVuID0gcmxlbiA9IGlzX2dsb2IgPSAwOworCQlsbGVuID0gaXNfZ2xvYiA9IDA7CiAKIAkJbGhzID0gcmVmc3BlY1tpXTsKIAkJaWYgKCpsaHMgPT0gJysnKSB7CkBAIC00MjksMTMgKzQ2NiwyMCBAQAogCQl9CiAKIAkJcmhzID0gc3RycmNocihsaHMsICc6Jyk7CisKKwkJLyoKKwkJICogQmVmb3JlIGdvaW5nIG9uLCBzcGVjaWFsIGNhc2UgIjoiIChvciAiKzoiKSBhcyBhIHJlZnNwZWMKKwkJICogZm9yIG1hdGNoaW5nIHJlZnMuCisJCSAqLworCQlpZiAoIWZldGNoICYmIHJocyA9PSBsaHMgJiYgcmhzWzFdID09ICdcMCcpIHsKKwkJCXJzW2ldLm1hdGNoaW5nID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisKIAkJaWYgKHJocykgewotCQkJcmhzKys7Ci0JCQlybGVuID0gc3RybGVuKHJocyk7CisJCQlzaXplX3QgcmxlbiA9IHN0cmxlbigrK3Jocyk7CiAJCQlpc19nbG9iID0gKDIgPD0gcmxlbiAmJiAhc3RyY21wKHJocyArIHJsZW4gLSAyLCAiLyoiKSk7Ci0JCQlpZiAoaXNfZ2xvYikKLQkJCQlybGVuIC09IDI7Ci0JCQlyc1tpXS5kc3QgPSB4c3RybmR1cChyaHMsIHJsZW4pOworCQkJcnNbaV0uZHN0ID0geHN0cm5kdXAocmhzLCBybGVuIC0gaXNfZ2xvYik7CiAJCX0KIAogCQlsbGVuID0gKHJocyA/IChyaHMgLSBsaHMgLSAxKSA6IHN0cmxlbihsaHMpKTsKQEAgLTQ0Myw3ICs0ODcsNyBAQAogCQkJaWYgKChyaHMgJiYgIWlzX2dsb2IpIHx8ICghcmhzICYmIGZldGNoKSkKIAkJCQlnb3RvIGludmFsaWQ7CiAJCQlpc19nbG9iID0gMTsKLQkJCWxsZW4gLT0gMjsKKwkJCWxsZW4tLTsKIAkJfSBlbHNlIGlmIChyaHMgJiYgaXNfZ2xvYikgewogCQkJZ290byBpbnZhbGlkOwogCQl9CkBAIC00NjAsNyArNTA0LDcgQEAKIAkJCWlmICghKnJzW2ldLnNyYykKIAkJCQk7IC8qIGVtcHR5IGlzIG9rICovCiAJCQllbHNlIHsKLQkJCQlzdCA9IGNoZWNrX3JlZl9mb3JtYXQocnNbaV0uc3JjKTsKKwkJCQlzdCA9IHZlcmlmeV9yZWZuYW1lKHJzW2ldLnNyYywgaXNfZ2xvYik7CiAJCQkJaWYgKHN0ICYmIHN0ICE9IENIRUNLX1JFRl9GT1JNQVRfT05FTEVWRUwpCiAJCQkJCWdvdG8gaW52YWxpZDsKIAkJCX0KQEAgLTQ3NSw3ICs1MTksNyBAQAogCQkJfSBlbHNlIGlmICghKnJzW2ldLmRzdCkgewogCQkJCTsgLyogb2sgKi8KIAkJCX0gZWxzZSB7Ci0JCQkJc3QgPSBjaGVja19yZWZfZm9ybWF0KHJzW2ldLmRzdCk7CisJCQkJc3QgPSB2ZXJpZnlfcmVmbmFtZShyc1tpXS5kc3QsIGlzX2dsb2IpOwogCQkJCWlmIChzdCAmJiBzdCAhPSBDSEVDS19SRUZfRk9STUFUX09ORUxFVkVMKQogCQkJCQlnb3RvIGludmFsaWQ7CiAJCQl9CkBAIC00OTAsNyArNTM0LDcgQEAKIAkJCWlmICghKnJzW2ldLnNyYykKIAkJCQk7IC8qIGVtcHR5IGlzIG9rICovCiAJCQllbHNlIGlmIChpc19nbG9iKSB7Ci0JCQkJc3QgPSBjaGVja19yZWZfZm9ybWF0KHJzW2ldLnNyYyk7CisJCQkJc3QgPSB2ZXJpZnlfcmVmbmFtZShyc1tpXS5zcmMsIGlzX2dsb2IpOwogCQkJCWlmIChzdCAmJiBzdCAhPSBDSEVDS19SRUZfRk9STUFUX09ORUxFVkVMKQogCQkJCQlnb3RvIGludmFsaWQ7CiAJCQl9CkBAIC01MDQsMTMgKzU0OCwxMyBAQAogCQkJICogLSBvdGhlcndpc2UgaXQgbXVzdCBiZSBhIHZhbGlkIGxvb2tpbmcgcmVmLgogCQkJICovCiAJCQlpZiAoIXJzW2ldLmRzdCkgewotCQkJCXN0ID0gY2hlY2tfcmVmX2Zvcm1hdChyc1tpXS5zcmMpOworCQkJCXN0ID0gdmVyaWZ5X3JlZm5hbWUocnNbaV0uc3JjLCBpc19nbG9iKTsKIAkJCQlpZiAoc3QgJiYgc3QgIT0gQ0hFQ0tfUkVGX0ZPUk1BVF9PTkVMRVZFTCkKIAkJCQkJZ290byBpbnZhbGlkOwogCQkJfSBlbHNlIGlmICghKnJzW2ldLmRzdCkgewogCQkJCWdvdG8gaW52YWxpZDsKIAkJCX0gZWxzZSB7Ci0JCQkJc3QgPSBjaGVja19yZWZfZm9ybWF0KHJzW2ldLmRzdCk7CisJCQkJc3QgPSB2ZXJpZnlfcmVmbmFtZShyc1tpXS5kc3QsIGlzX2dsb2IpOwogCQkJCWlmIChzdCAmJiBzdCAhPSBDSEVDS19SRUZfRk9STUFUX09ORUxFVkVMKQogCQkJCQlnb3RvIGludmFsaWQ7CiAJCQl9CkBAIC02NTksOCArNzAzLDcgQEAKIAkJaWYgKCFmZXRjaC0+ZHN0KQogCQkJY29udGludWU7CiAJCWlmIChmZXRjaC0+cGF0dGVybikgewotCQkJaWYgKCFwcmVmaXhjbXAobmVlZGxlLCBrZXkpICYmCi0JCQkgICAgbmVlZGxlW3N0cmxlbihrZXkpXSA9PSAnLycpIHsKKwkJCWlmICghcHJlZml4Y21wKG5lZWRsZSwga2V5KSkgewogCQkJCSpyZXN1bHQgPSB4bWFsbG9jKHN0cmxlbih2YWx1ZSkgKwogCQkJCQkJICBzdHJsZW4obmVlZGxlKSAtCiAJCQkJCQkgIHN0cmxlbihrZXkpICsgMSk7CkBAIC02ODYsNiArNzI5LDEzIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RydWN0IHJlZiAqYWxsb2NfcmVmX2Zyb21fc3RyKGNvbnN0IGNoYXIqIHN0cikKK3sKKwlzdHJ1Y3QgcmVmICpyZXQgPSBhbGxvY19yZWYoc3RybGVuKHN0cikgKyAxKTsKKwlzdHJjcHkocmV0LT5uYW1lLCBzdHIpOworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcmVmICpjb3B5X3JlZihjb25zdCBzdHJ1Y3QgcmVmICpyZWYpCiB7CiAJc3RydWN0IHJlZiAqcmV0ID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHJlZikgKyBzdHJsZW4ocmVmLT5uYW1lKSArIDEpOwpAQCAtNzA2LDEzICs3NTYsMjIgQEAKIAlyZXR1cm4gcmV0OwogfQogCit2b2lkIGZyZWVfcmVmKHN0cnVjdCByZWYgKnJlZikKK3sKKwlpZiAoIXJlZikKKwkJcmV0dXJuOworCWZyZWUocmVmLT5yZW1vdGVfc3RhdHVzKTsKKwlmcmVlKHJlZi0+c3ltcmVmKTsKKwlmcmVlKHJlZik7Cit9CisKIHZvaWQgZnJlZV9yZWZzKHN0cnVjdCByZWYgKnJlZikKIHsKIAlzdHJ1Y3QgcmVmICpuZXh0OwogCXdoaWxlIChyZWYpIHsKIAkJbmV4dCA9IHJlZi0+bmV4dDsKIAkJZnJlZShyZWYtPnBlZXJfcmVmKTsKLQkJZnJlZShyZWYpOworCQlmcmVlX3JlZihyZWYpOwogCQlyZWYgPSBuZXh0OwogCX0KIH0KQEAgLTc4Myw3ICs4NDIsNiBAQAogewogCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CiAJc3RydWN0IHJlZiAqcmVmOwotCWludCBsZW47CiAKIAlpZiAoISpuYW1lKSB7CiAJCXJlZiA9IGFsbG9jX3JlZigyMCk7CkBAIC03OTMsMjEgKzg1MSwxNCBAQAogCX0KIAlpZiAoZ2V0X3NoYTEobmFtZSwgc2hhMSkpCiAJCXJldHVybiBOVUxMOwotCWxlbiA9IHN0cmxlbihuYW1lKSArIDE7Ci0JcmVmID0gYWxsb2NfcmVmKGxlbik7Ci0JbWVtY3B5KHJlZi0+bmFtZSwgbmFtZSwgbGVuKTsKKwlyZWYgPSBhbGxvY19yZWZfZnJvbV9zdHIobmFtZSk7CiAJaGFzaGNweShyZWYtPm5ld19zaGExLCBzaGExKTsKIAlyZXR1cm4gcmVmOwogfQogCiBzdGF0aWMgc3RydWN0IHJlZiAqbWFrZV9saW5rZWRfcmVmKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCByZWYgKioqdGFpbCkKIHsKLQlzdHJ1Y3QgcmVmICpyZXQ7Ci0Jc2l6ZV90IGxlbjsKLQotCWxlbiA9IHN0cmxlbihuYW1lKSArIDE7Ci0JcmV0ID0gYWxsb2NfcmVmKGxlbik7Ci0JbWVtY3B5KHJldC0+bmFtZSwgbmFtZSwgbGVuKTsKKwlzdHJ1Y3QgcmVmICpyZXQgPSBhbGxvY19yZWZfZnJvbV9zdHIobmFtZSk7CiAJdGFpbF9saW5rX3JlZihyZXQsIHRhaWwpOwogCXJldHVybiByZXQ7CiB9CkBAIC04MzQsMTYgKzg4NSwxNSBAQAogCiBzdGF0aWMgaW50IG1hdGNoX2V4cGxpY2l0KHN0cnVjdCByZWYgKnNyYywgc3RydWN0IHJlZiAqZHN0LAogCQkJICBzdHJ1Y3QgcmVmICoqKmRzdF90YWlsLAotCQkJICBzdHJ1Y3QgcmVmc3BlYyAqcnMsCi0JCQkgIGludCBlcnJzKQorCQkJICBzdHJ1Y3QgcmVmc3BlYyAqcnMpCiB7CiAJc3RydWN0IHJlZiAqbWF0Y2hlZF9zcmMsICptYXRjaGVkX2RzdDsKIAogCWNvbnN0IGNoYXIgKmRzdF92YWx1ZSA9IHJzLT5kc3Q7CiAJY2hhciAqZHN0X2d1ZXNzOwogCi0JaWYgKHJzLT5wYXR0ZXJuKQotCQlyZXR1cm4gZXJyczsKKwlpZiAocnMtPnBhdHRlcm4gfHwgcnMtPm1hdGNoaW5nKQorCQlyZXR1cm4gMDsKIAogCW1hdGNoZWRfc3JjID0gbWF0Y2hlZF9kc3QgPSBOVUxMOwogCXN3aXRjaCAoY291bnRfcmVmc3BlY19tYXRjaChycy0+c3JjLCBzcmMsICZtYXRjaGVkX3NyYykpIHsKQEAgLTg1NiwyMyArOTA2LDE2IEBACiAJCSAqLwogCQltYXRjaGVkX3NyYyA9IHRyeV9leHBsaWNpdF9vYmplY3RfbmFtZShycy0+c3JjKTsKIAkJaWYgKCFtYXRjaGVkX3NyYykKLQkJCWVycm9yKCJzcmMgcmVmc3BlYyAlcyBkb2VzIG5vdCBtYXRjaCBhbnkuIiwgcnMtPnNyYyk7CisJCQlyZXR1cm4gZXJyb3IoInNyYyByZWZzcGVjICVzIGRvZXMgbm90IG1hdGNoIGFueS4iLCBycy0+c3JjKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJbWF0Y2hlZF9zcmMgPSBOVUxMOwotCQllcnJvcigic3JjIHJlZnNwZWMgJXMgbWF0Y2hlcyBtb3JlIHRoYW4gb25lLiIsIHJzLT5zcmMpOwotCQlicmVhazsKKwkJcmV0dXJuIGVycm9yKCJzcmMgcmVmc3BlYyAlcyBtYXRjaGVzIG1vcmUgdGhhbiBvbmUuIiwgcnMtPnNyYyk7CiAJfQogCi0JaWYgKCFtYXRjaGVkX3NyYykKLQkJZXJycyA9IDE7Ci0KIAlpZiAoIWRzdF92YWx1ZSkgewogCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwogCQlpbnQgZmxhZzsKIAotCQlpZiAoIW1hdGNoZWRfc3JjKQotCQkJcmV0dXJuIGVycnM7CiAJCWRzdF92YWx1ZSA9IHJlc29sdmVfcmVmKG1hdGNoZWRfc3JjLT5uYW1lLCBzaGExLCAxLCAmZmxhZyk7CiAJCWlmICghZHN0X3ZhbHVlIHx8CiAJCSAgICAoKGZsYWcgJiBSRUZfSVNTWU1SRUYpICYmCkBAIC05MDMsMTggKzk0NiwxNiBAQAogCQkgICAgICBkc3RfdmFsdWUpOwogCQlicmVhazsKIAl9Ci0JaWYgKGVycnMgfHwgIW1hdGNoZWRfZHN0KQotCQlyZXR1cm4gMTsKLQlpZiAobWF0Y2hlZF9kc3QtPnBlZXJfcmVmKSB7Ci0JCWVycnMgPSAxOwotCQllcnJvcigiZHN0IHJlZiAlcyByZWNlaXZlcyBmcm9tIG1vcmUgdGhhbiBvbmUgc3JjLiIsCisJaWYgKCFtYXRjaGVkX2RzdCkKKwkJcmV0dXJuIC0xOworCWlmIChtYXRjaGVkX2RzdC0+cGVlcl9yZWYpCisJCXJldHVybiBlcnJvcigiZHN0IHJlZiAlcyByZWNlaXZlcyBmcm9tIG1vcmUgdGhhbiBvbmUgc3JjLiIsCiAJCSAgICAgIG1hdGNoZWRfZHN0LT5uYW1lKTsKLQl9CiAJZWxzZSB7CiAJCW1hdGNoZWRfZHN0LT5wZWVyX3JlZiA9IG1hdGNoZWRfc3JjOwogCQltYXRjaGVkX2RzdC0+Zm9yY2UgPSBycy0+Zm9yY2U7CiAJfQotCXJldHVybiBlcnJzOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG1hdGNoX2V4cGxpY2l0X3JlZnMoc3RydWN0IHJlZiAqc3JjLCBzdHJ1Y3QgcmVmICpkc3QsCkBAIC05MjMsOCArOTY0LDggQEAKIHsKIAlpbnQgaSwgZXJyczsKIAlmb3IgKGkgPSBlcnJzID0gMDsgaSA8IHJzX25yOyBpKyspCi0JCWVycnMgfD0gbWF0Y2hfZXhwbGljaXQoc3JjLCBkc3QsIGRzdF90YWlsLCAmcnNbaV0sIGVycnMpOwotCXJldHVybiAtZXJyczsKKwkJZXJycyArPSBtYXRjaF9leHBsaWNpdChzcmMsIGRzdCwgZHN0X3RhaWwsICZyc1tpXSk7CisJcmV0dXJuIGVycnM7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVmc3BlYyAqY2hlY2tfcGF0dGVybl9tYXRjaChjb25zdCBzdHJ1Y3QgcmVmc3BlYyAqcnMsCkBAIC05MzIsMTMgKzk3MywyMSBAQAogCQkJCQkJIGNvbnN0IHN0cnVjdCByZWYgKnNyYykKIHsKIAlpbnQgaTsKKwlpbnQgbWF0Y2hpbmdfcmVmcyA9IC0xOwogCWZvciAoaSA9IDA7IGkgPCByc19ucjsgaSsrKSB7Ci0JCWlmIChyc1tpXS5wYXR0ZXJuICYmCi0JCSAgICAhcHJlZml4Y21wKHNyYy0+bmFtZSwgcnNbaV0uc3JjKSAmJgotCQkgICAgc3JjLT5uYW1lW3N0cmxlbihyc1tpXS5zcmMpXSA9PSAnLycpCisJCWlmIChyc1tpXS5tYXRjaGluZyAmJgorCQkgICAgKG1hdGNoaW5nX3JlZnMgPT0gLTEgfHwgcnNbaV0uZm9yY2UpKSB7CisJCQltYXRjaGluZ19yZWZzID0gaTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHJzW2ldLnBhdHRlcm4gJiYgIXByZWZpeGNtcChzcmMtPm5hbWUsIHJzW2ldLnNyYykpCiAJCQlyZXR1cm4gcnMgKyBpOwogCX0KLQlyZXR1cm4gTlVMTDsKKwlpZiAobWF0Y2hpbmdfcmVmcyAhPSAtMSkKKwkJcmV0dXJuIHJzICsgbWF0Y2hpbmdfcmVmczsKKwllbHNlCisJCXJldHVybiBOVUxMOwogfQogCiAvKgpAQCAtOTQ5LDExICs5OTgsMTYgQEAKIGludCBtYXRjaF9yZWZzKHN0cnVjdCByZWYgKnNyYywgc3RydWN0IHJlZiAqZHN0LCBzdHJ1Y3QgcmVmICoqKmRzdF90YWlsLAogCSAgICAgICBpbnQgbnJfcmVmc3BlYywgY29uc3QgY2hhciAqKnJlZnNwZWMsIGludCBmbGFncykKIHsKLQlzdHJ1Y3QgcmVmc3BlYyAqcnMgPQotCQlwYXJzZV9wdXNoX3JlZnNwZWMobnJfcmVmc3BlYywgKGNvbnN0IGNoYXIgKiopIHJlZnNwZWMpOworCXN0cnVjdCByZWZzcGVjICpyczsKIAlpbnQgc2VuZF9hbGwgPSBmbGFncyAmIE1BVENIX1JFRlNfQUxMOwogCWludCBzZW5kX21pcnJvciA9IGZsYWdzICYgTUFUQ0hfUkVGU19NSVJST1I7CisJc3RhdGljIGNvbnN0IGNoYXIgKmRlZmF1bHRfcmVmc3BlY1tdID0geyAiOiIsIDAgfTsKIAorCWlmICghbnJfcmVmc3BlYykgeworCQlucl9yZWZzcGVjID0gMTsKKwkJcmVmc3BlYyA9IGRlZmF1bHRfcmVmc3BlYzsKKwl9CisJcnMgPSBwYXJzZV9wdXNoX3JlZnNwZWMobnJfcmVmc3BlYywgKGNvbnN0IGNoYXIgKiopIHJlZnNwZWMpOwogCWlmIChtYXRjaF9leHBsaWNpdF9yZWZzKHNyYywgZHN0LCBkc3RfdGFpbCwgcnMsIG5yX3JlZnNwZWMpKQogCQlyZXR1cm4gLTE7CiAKQEAgLTk2NCw0OCArMTAxOCw1MCBAQAogCQljaGFyICpkc3RfbmFtZTsKIAkJaWYgKHNyYy0+cGVlcl9yZWYpCiAJCQljb250aW51ZTsKLQkJaWYgKG5yX3JlZnNwZWMpIHsKLQkJCXBhdCA9IGNoZWNrX3BhdHRlcm5fbWF0Y2gocnMsIG5yX3JlZnNwZWMsIHNyYyk7Ci0JCQlpZiAoIXBhdCkKLQkJCQljb250aW51ZTsKLQkJfQotCQllbHNlIGlmICghc2VuZF9taXJyb3IgJiYgcHJlZml4Y21wKHNyYy0+bmFtZSwgInJlZnMvaGVhZHMvIikpCisKKwkJcGF0ID0gY2hlY2tfcGF0dGVybl9tYXRjaChycywgbnJfcmVmc3BlYywgc3JjKTsKKwkJaWYgKCFwYXQpCisJCQljb250aW51ZTsKKworCQlpZiAocGF0LT5tYXRjaGluZykgewogCQkJLyoKIAkJCSAqICJtYXRjaGluZyByZWZzIjsgdHJhZGl0aW9uYWxseSB3ZSBwdXNoZWQgZXZlcnl0aGluZwogCQkJICogaW5jbHVkaW5nIHJlZnMgb3V0c2lkZSByZWZzL2hlYWRzLyBoaWVyYXJjaHksIGJ1dAogCQkJICogdGhhdCBkb2VzIG5vdCBtYWtlIG11Y2ggc2Vuc2UgdGhlc2UgZGF5cy4KIAkJCSAqLwotCQkJY29udGludWU7CisJCQlpZiAoIXNlbmRfbWlycm9yICYmIHByZWZpeGNtcChzcmMtPm5hbWUsICJyZWZzL2hlYWRzLyIpKQorCQkJCWNvbnRpbnVlOworCQkJZHN0X25hbWUgPSB4c3RyZHVwKHNyYy0+bmFtZSk7CiAKLQkJaWYgKHBhdCkgeworCQl9IGVsc2UgewogCQkJY29uc3QgY2hhciAqZHN0X3NpZGUgPSBwYXQtPmRzdCA/IHBhdC0+ZHN0IDogcGF0LT5zcmM7CiAJCQlkc3RfbmFtZSA9IHhtYWxsb2Moc3RybGVuKGRzdF9zaWRlKSArCiAJCQkJCSAgIHN0cmxlbihzcmMtPm5hbWUpIC0KIAkJCQkJICAgc3RybGVuKHBhdC0+c3JjKSArIDIpOwogCQkJc3RyY3B5KGRzdF9uYW1lLCBkc3Rfc2lkZSk7CiAJCQlzdHJjYXQoZHN0X25hbWUsIHNyYy0+bmFtZSArIHN0cmxlbihwYXQtPnNyYykpOwotCQl9IGVsc2UKLQkJCWRzdF9uYW1lID0geHN0cmR1cChzcmMtPm5hbWUpOworCQl9CiAJCWRzdF9wZWVyID0gZmluZF9yZWZfYnlfbmFtZShkc3QsIGRzdF9uYW1lKTsKLQkJaWYgKGRzdF9wZWVyICYmIGRzdF9wZWVyLT5wZWVyX3JlZikKLQkJCS8qIFdlJ3JlIGFscmVhZHkgc2VuZGluZyBzb21ldGhpbmcgdG8gdGhpcyByZWYuICovCi0JCQlnb3RvIGZyZWVfbmFtZTsKKwkJaWYgKGRzdF9wZWVyKSB7CisJCQlpZiAoZHN0X3BlZXItPnBlZXJfcmVmKQorCQkJCS8qIFdlJ3JlIGFscmVhZHkgc2VuZGluZyBzb21ldGhpbmcgdG8gdGhpcyByZWYuICovCisJCQkJZ290byBmcmVlX25hbWU7CiAKLQkJaWYgKCFkc3RfcGVlciAmJiAhbnJfcmVmc3BlYyAmJiAhKHNlbmRfYWxsIHx8IHNlbmRfbWlycm9yKSkKLQkJCS8qCi0JCQkgKiBSZW1vdGUgZG9lc24ndCBoYXZlIGl0LCBhbmQgd2UgaGF2ZSBubwotCQkJICogZXhwbGljaXQgcGF0dGVybiwgYW5kIHdlIGRvbid0IGhhdmUKLQkJCSAqIC0tYWxsIG5vciAtLW1pcnJvci4KLQkJCSAqLwotCQkJZ290byBmcmVlX25hbWU7Ci0JCWlmICghZHN0X3BlZXIpIHsKKwkJfSBlbHNlIHsKKwkJCWlmIChwYXQtPm1hdGNoaW5nICYmICEoc2VuZF9hbGwgfHwgc2VuZF9taXJyb3IpKQorCQkJCS8qCisJCQkJICogUmVtb3RlIGRvZXNuJ3QgaGF2ZSBpdCwgYW5kIHdlIGhhdmUgbm8KKwkJCQkgKiBleHBsaWNpdCBwYXR0ZXJuLCBhbmQgd2UgZG9uJ3QgaGF2ZQorCQkJCSAqIC0tYWxsIG5vciAtLW1pcnJvci4KKwkJCQkgKi8KKwkJCQlnb3RvIGZyZWVfbmFtZTsKKwogCQkJLyogQ3JlYXRlIGEgbmV3IG9uZSBhbmQgbGluayBpdCAqLwogCQkJZHN0X3BlZXIgPSBtYWtlX2xpbmtlZF9yZWYoZHN0X25hbWUsIGRzdF90YWlsKTsKIAkJCWhhc2hjcHkoZHN0X3BlZXItPm5ld19zaGExLCBzcmMtPm5ld19zaGExKTsKIAkJfQogCQlkc3RfcGVlci0+cGVlcl9yZWYgPSBzcmM7Ci0JCWlmIChwYXQpCi0JCQlkc3RfcGVlci0+Zm9yY2UgPSBwYXQtPmZvcmNlOworCQlkc3RfcGVlci0+Zm9yY2UgPSBwYXQtPmZvcmNlOwogCWZyZWVfbmFtZToKIAkJZnJlZShkc3RfbmFtZSk7CiAJfQpAQCAtMTExMSw5ICsxMTY3LDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAlpZiAoIXByZWZpeGNtcChuYW1lLCAicmVmcy8iKSkgewotCQlyZXQgPSBhbGxvY19yZWYoc3RybGVuKG5hbWUpICsgMSk7Ci0JCXN0cmNweShyZXQtPm5hbWUsIG5hbWUpOwotCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gYWxsb2NfcmVmX2Zyb21fc3RyKG5hbWUpOwogCX0KIAogCWlmICghcHJlZml4Y21wKG5hbWUsICJoZWFkcy8iKSB8fApAQCAtMTE3MiwzICsxMjI2LDE1IEBACiAKIAlyZXR1cm4gMDsKIH0KKworaW50IHJlc29sdmVfcmVtb3RlX3N5bXJlZihzdHJ1Y3QgcmVmICpyZWYsIHN0cnVjdCByZWYgKmxpc3QpCit7CisJaWYgKCFyZWYtPnN5bXJlZikKKwkJcmV0dXJuIDA7CisJZm9yICg7IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KQorCQlpZiAoIXN0cmNtcChyZWYtPnN5bXJlZiwgbGlzdC0+bmFtZSkpIHsKKwkJCWhhc2hjcHkocmVmLT5vbGRfc2hhMSwgbGlzdC0+b2xkX3NoYTEpOworCQkJcmV0dXJuIDA7CisJCX0KKwlyZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL3JlbW90ZS5oIGIvcmVtb3RlLmgKaW5kZXggYTM4Nzc0Yi4uOGVlZDg3YiAxMDA2NDQKLS0tIGEvcmVtb3RlLmgKKysrIGIvcmVtb3RlLmgKQEAgLTI2LDYgKzI2LDcgQEAKIAkgKi8KIAlpbnQgZmV0Y2hfdGFnczsKIAlpbnQgc2tpcF9kZWZhdWx0X3VwZGF0ZTsKKwlpbnQgbWlycm9yOwogCiAJY29uc3QgY2hhciAqcmVjZWl2ZXBhY2s7CiAJY29uc3QgY2hhciAqdXBsb2FkcGFjazsKQEAgLTQ2LDEzICs0NywxOCBAQAogc3RydWN0IHJlZnNwZWMgewogCXVuc2lnbmVkIGZvcmNlIDogMTsKIAl1bnNpZ25lZCBwYXR0ZXJuIDogMTsKKwl1bnNpZ25lZCBtYXRjaGluZyA6IDE7CiAKIAljaGFyICpzcmM7CiAJY2hhciAqZHN0OwogfTsKIAorZXh0ZXJuIGNvbnN0IHN0cnVjdCByZWZzcGVjICp0YWdfcmVmc3BlYzsKKwogc3RydWN0IHJlZiAqYWxsb2NfcmVmKHVuc2lnbmVkIG5hbWVsZW4pOwogCitzdHJ1Y3QgcmVmICphbGxvY19yZWZfZnJvbV9zdHIoY29uc3QgY2hhciogc3RyKTsKKwogc3RydWN0IHJlZiAqY29weV9yZWZfbGlzdChjb25zdCBzdHJ1Y3QgcmVmICpyZWYpOwogCiBpbnQgY2hlY2tfcmVmX3R5cGUoY29uc3Qgc3RydWN0IHJlZiAqcmVmLCBpbnQgZmxhZ3MpOwpAQCAtNjIsNiArNjgsOCBAQAogICovCiB2b2lkIGZyZWVfcmVmcyhzdHJ1Y3QgcmVmICpyZWYpOwogCitpbnQgcmVzb2x2ZV9yZW1vdGVfc3ltcmVmKHN0cnVjdCByZWYgKnJlZiwgc3RydWN0IHJlZiAqbGlzdCk7CisKIC8qCiAgKiBSZW1vdmVzIGFuZCBmcmVlcyBhbnkgZHVwbGljYXRlIHJlZnMgaW4gdGhlIG1hcC4KICAqLwpkaWZmIC0tZ2l0IGEvcmV2aXNpb24uYyBiL3JldmlzaW9uLmMKaW5kZXggZmZiZWQzZi4uYTY4YWJlYyAxMDA2NDQKLS0tIGEvcmV2aXNpb24uYworKysgYi9yZXZpc2lvbi5jCkBAIC02LDYgKzYsNyBAQAogI2luY2x1ZGUgImRpZmYuaCIKICNpbmNsdWRlICJyZWZzLmgiCiAjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJncmFwaC5oIgogI2luY2x1ZGUgImdyZXAuaCIKICNpbmNsdWRlICJyZWZsb2ctd2Fsay5oIgogI2luY2x1ZGUgInBhdGNoLWlkcy5oIgpAQCAtMjU4LDcgKzI1OSw3IEBACiBzdGF0aWMgdm9pZCBmaWxlX2FkZF9yZW1vdmUoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywKIAkJICAgIGludCBhZGRyZW1vdmUsIHVuc2lnbmVkIG1vZGUsCiAJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAotCQkgICAgY29uc3QgY2hhciAqYmFzZSwgY29uc3QgY2hhciAqcGF0aCkKKwkJICAgIGNvbnN0IGNoYXIgKmZ1bGxwYXRoKQogewogCWludCBkaWZmID0gUkVWX1RSRUVfRElGRkVSRU5UOwogCkBAIC0yODQsNyArMjg1LDcgQEAKIAkJIHVuc2lnbmVkIG9sZF9tb2RlLCB1bnNpZ25lZCBuZXdfbW9kZSwKIAkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZF9zaGExLAogCQkgY29uc3QgdW5zaWduZWQgY2hhciAqbmV3X3NoYTEsCi0JCSBjb25zdCBjaGFyICpiYXNlLCBjb25zdCBjaGFyICpwYXRoKQorCQkgY29uc3QgY2hhciAqZnVsbHBhdGgpCiB7CiAJdHJlZV9kaWZmZXJlbmNlID0gUkVWX1RSRUVfRElGRkVSRU5UOwogCURJRkZfT1BUX1NFVChvcHRpb25zLCBIQVNfQ0hBTkdFUyk7CkBAIC00MTEsMTEgKzQxMiwyNiBAQAogCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFRSRUVTQU1FOwogfQogCi1zdGF0aWMgaW50IGFkZF9wYXJlbnRzX3RvX2xpc3Qoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVjdCBjb21taXRfbGlzdCAqKmxpc3QpCitzdGF0aWMgdm9pZCBpbnNlcnRfYnlfZGF0ZV9jYWNoZWQoc3RydWN0IGNvbW1pdCAqcCwgc3RydWN0IGNvbW1pdF9saXN0ICoqaGVhZCwKKwkJICAgIHN0cnVjdCBjb21taXRfbGlzdCAqY2FjaGVkX2Jhc2UsIHN0cnVjdCBjb21taXRfbGlzdCAqKmNhY2hlKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqbmV3X2VudHJ5OworCisJaWYgKGNhY2hlZF9iYXNlICYmIHAtPmRhdGUgPCBjYWNoZWRfYmFzZS0+aXRlbS0+ZGF0ZSkKKwkJbmV3X2VudHJ5ID0gaW5zZXJ0X2J5X2RhdGUocCwgJmNhY2hlZF9iYXNlLT5uZXh0KTsKKwllbHNlCisJCW5ld19lbnRyeSA9IGluc2VydF9ieV9kYXRlKHAsIGhlYWQpOworCisJaWYgKGNhY2hlICYmICghKmNhY2hlIHx8IHAtPmRhdGUgPCAoKmNhY2hlKS0+aXRlbS0+ZGF0ZSkpCisJCSpjYWNoZSA9IG5ld19lbnRyeTsKK30KKworc3RhdGljIGludCBhZGRfcGFyZW50c190b19saXN0KHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkgICAgc3RydWN0IGNvbW1pdF9saXN0ICoqbGlzdCwgc3RydWN0IGNvbW1pdF9saXN0ICoqY2FjaGVfcHRyKQogewogCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50ID0gY29tbWl0LT5wYXJlbnRzOwogCXVuc2lnbmVkIGxlZnRfZmxhZzsKLQlpbnQgYWRkLCByZXN0OworCXN0cnVjdCBjb21taXRfbGlzdCAqY2FjaGVkX2Jhc2UgPSBjYWNoZV9wdHIgPyAqY2FjaGVfcHRyIDogTlVMTDsKIAogCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIEFEREVEKQogCQlyZXR1cm4gMDsKQEAgLTQ0NSw3ICs0NjEsNyBAQAogCQkJaWYgKHAtPm9iamVjdC5mbGFncyAmIFNFRU4pCiAJCQkJY29udGludWU7CiAJCQlwLT5vYmplY3QuZmxhZ3MgfD0gU0VFTjsKLQkJCWluc2VydF9ieV9kYXRlKHAsIGxpc3QpOworCQkJaW5zZXJ0X2J5X2RhdGVfY2FjaGVkKHAsIGxpc3QsIGNhY2hlZF9iYXNlLCBjYWNoZV9wdHIpOwogCQl9CiAJCXJldHVybiAwOwogCX0KQEAgLTQ2MiwxOSArNDc4LDE4IEBACiAKIAlsZWZ0X2ZsYWcgPSAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBTWU1NRVRSSUNfTEVGVCk7CiAKLQlyZXN0ID0gIXJldnMtPmZpcnN0X3BhcmVudF9vbmx5OwotCWZvciAocGFyZW50ID0gY29tbWl0LT5wYXJlbnRzLCBhZGQgPSAxOyBwYXJlbnQ7IGFkZCA9IHJlc3QpIHsKKwlmb3IgKHBhcmVudCA9IGNvbW1pdC0+cGFyZW50czsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPm5leHQpIHsKIAkJc3RydWN0IGNvbW1pdCAqcCA9IHBhcmVudC0+aXRlbTsKIAotCQlwYXJlbnQgPSBwYXJlbnQtPm5leHQ7CiAJCWlmIChwYXJzZV9jb21taXQocCkgPCAwKQogCQkJcmV0dXJuIC0xOwogCQlwLT5vYmplY3QuZmxhZ3MgfD0gbGVmdF9mbGFnOwotCQlpZiAocC0+b2JqZWN0LmZsYWdzICYgU0VFTikKLQkJCWNvbnRpbnVlOwotCQlwLT5vYmplY3QuZmxhZ3MgfD0gU0VFTjsKLQkJaWYgKGFkZCkKLQkJCWluc2VydF9ieV9kYXRlKHAsIGxpc3QpOworCQlpZiAoIShwLT5vYmplY3QuZmxhZ3MgJiBTRUVOKSkgeworCQkJcC0+b2JqZWN0LmZsYWdzIHw9IFNFRU47CisJCQlpbnNlcnRfYnlfZGF0ZV9jYWNoZWQocCwgbGlzdCwgY2FjaGVkX2Jhc2UsIGNhY2hlX3B0cik7CisJCX0KKwkJaWYocmV2cy0+Zmlyc3RfcGFyZW50X29ubHkpCisJCQlicmVhazsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC02MTIsNyArNjI3LDcgQEAKIAogCQlpZiAocmV2cy0+bWF4X2FnZSAhPSAtMSAmJiAoY29tbWl0LT5kYXRlIDwgcmV2cy0+bWF4X2FnZSkpCiAJCQlvYmotPmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7Ci0JCWlmIChhZGRfcGFyZW50c190b19saXN0KHJldnMsIGNvbW1pdCwgJmxpc3QpIDwgMCkKKwkJaWYgKGFkZF9wYXJlbnRzX3RvX2xpc3QocmV2cywgY29tbWl0LCAmbGlzdCwgTlVMTCkgPCAwKQogCQkJcmV0dXJuIC0xOwogCQlpZiAob2JqLT5mbGFncyAmIFVOSU5URVJFU1RJTkcpIHsKIAkJCW1hcmtfcGFyZW50c191bmludGVyZXN0aW5nKGNvbW1pdCk7CkBAIC0xMTA1LDcgKzExMjAsOCBAQAogCQkJCX0KIAkJCX0KIAkJCWlmICghc3RyY21wKGFyZywgIi0tcGFyZW50cyIpKSB7Ci0JCQkJcmV2cy0+cGFyZW50cyA9IDE7CisJCQkJcmV2cy0+cmV3cml0ZV9wYXJlbnRzID0gMTsKKwkJCQlyZXZzLT5wcmludF9wYXJlbnRzID0gMTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWlmICghc3RyY21wKGFyZywgIi0tZGVuc2UiKSkgewpAQCAtMTE5Nyw5ICsxMjEzLDIwIEBACiAJCQkJcmV2cy0+dmVyYm9zZV9oZWFkZXIgPSAxOwogCQkJCWNvbnRpbnVlOwogCQkJfQotCQkJaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1wcmV0dHkiKSkgeworCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1wcmV0dHkiKSkgewogCQkJCXJldnMtPnZlcmJvc2VfaGVhZGVyID0gMTsKLQkJCQlyZXZzLT5jb21taXRfZm9ybWF0ID0gZ2V0X2NvbW1pdF9mb3JtYXQoYXJnKzgpOworCQkJCWdldF9jb21taXRfZm9ybWF0KGFyZys4LCByZXZzKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghcHJlZml4Y21wKGFyZywgIi0tcHJldHR5PSIpKSB7CisJCQkJcmV2cy0+dmVyYm9zZV9oZWFkZXIgPSAxOworCQkJCWdldF9jb21taXRfZm9ybWF0KGFyZys5LCByZXZzKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tZ3JhcGgiKSkgeworCQkJCXJldnMtPnRvcG9fb3JkZXIgPSAxOworCQkJCXJldnMtPnJld3JpdGVfcGFyZW50cyA9IDE7CisJCQkJcmV2cy0+Z3JhcGggPSBncmFwaF9pbml0KHJldnMpOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1yb290IikpIHsKQEAgLTEzOTYsNiArMTQyMywxNSBAQAogCWlmIChyZXZzLT5yZXZlcnNlICYmIHJldnMtPnJlZmxvZ19pbmZvKQogCQlkaWUoImNhbm5vdCBjb21iaW5lIC0tcmV2ZXJzZSB3aXRoIC0td2Fsay1yZWZsb2dzIik7CiAKKwkvKgorCSAqIExpbWl0YXRpb25zIG9uIHRoZSBncmFwaCBmdW5jdGlvbmFsaXR5CisJICovCisJaWYgKHJldnMtPnJldmVyc2UgJiYgcmV2cy0+Z3JhcGgpCisJCWRpZSgiY2Fubm90IGNvbWJpbmUgLS1yZXZlcnNlIHdpdGggLS1ncmFwaCIpOworCisJaWYgKHJldnMtPnJlZmxvZ19pbmZvICYmIHJldnMtPmdyYXBoKQorCQlkaWUoImNhbm5vdCBjb21iaW5lIC0td2Fsay1yZWZsb2dzIHdpdGggLS1ncmFwaCIpOworCiAJcmV0dXJuIGxlZnQ7CiB9CiAKQEAgLTE0MzgsMTAgKzE0NzQsMTIgQEAKIAogc3RhdGljIGVudW0gcmV3cml0ZV9yZXN1bHQgcmV3cml0ZV9vbmUoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgY29tbWl0ICoqcHApCiB7CisJc3RydWN0IGNvbW1pdF9saXN0ICpjYWNoZSA9IE5VTEw7CisKIAlmb3IgKDs7KSB7CiAJCXN0cnVjdCBjb21taXQgKnAgPSAqcHA7CiAJCWlmICghcmV2cy0+bGltaXRlZCkKLQkJCWlmIChhZGRfcGFyZW50c190b19saXN0KHJldnMsIHAsICZyZXZzLT5jb21taXRzKSA8IDApCisJCQlpZiAoYWRkX3BhcmVudHNfdG9fbGlzdChyZXZzLCBwLCAmcmV2cy0+Y29tbWl0cywgJmNhY2hlKSA8IDApCiAJCQkJcmV0dXJuIHJld3JpdGVfb25lX2Vycm9yOwogCQlpZiAocC0+cGFyZW50cyAmJiBwLT5wYXJlbnRzLT5uZXh0KQogCQkJcmV0dXJuIHJld3JpdGVfb25lX29rOwpAQCAtMTUyNCwxMyArMTU2MiwxMyBAQAogCQkvKiBDb21taXQgd2l0aG91dCBjaGFuZ2VzPyAqLwogCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBUUkVFU0FNRSkgewogCQkJLyogZHJvcCBtZXJnZXMgdW5sZXNzIHdlIHdhbnQgcGFyZW50aG9vZCAqLwotCQkJaWYgKCFyZXZzLT5wYXJlbnRzKQorCQkJaWYgKCFyZXZzLT5yZXdyaXRlX3BhcmVudHMpCiAJCQkJcmV0dXJuIGNvbW1pdF9pZ25vcmU7CiAJCQkvKiBub24tbWVyZ2UgLSBhbHdheXMgaWdub3JlIGl0ICovCiAJCQlpZiAoIWNvbW1pdC0+cGFyZW50cyB8fCAhY29tbWl0LT5wYXJlbnRzLT5uZXh0KQogCQkJCXJldHVybiBjb21taXRfaWdub3JlOwogCQl9Ci0JCWlmIChyZXZzLT5wYXJlbnRzICYmIHJld3JpdGVfcGFyZW50cyhyZXZzLCBjb21taXQpIDwgMCkKKwkJaWYgKHJldnMtPnJld3JpdGVfcGFyZW50cyAmJiByZXdyaXRlX3BhcmVudHMocmV2cywgY29tbWl0KSA8IDApCiAJCQlyZXR1cm4gY29tbWl0X2Vycm9yOwogCX0KIAlyZXR1cm4gY29tbWl0X3Nob3c7CkBAIC0xNTYwLDcgKzE1OTgsNyBAQAogCQkJaWYgKHJldnMtPm1heF9hZ2UgIT0gLTEgJiYKIAkJCSAgICAoY29tbWl0LT5kYXRlIDwgcmV2cy0+bWF4X2FnZSkpCiAJCQkJY29udGludWU7Ci0JCQlpZiAoYWRkX3BhcmVudHNfdG9fbGlzdChyZXZzLCBjb21taXQsICZyZXZzLT5jb21taXRzKSA8IDApCisJCQlpZiAoYWRkX3BhcmVudHNfdG9fbGlzdChyZXZzLCBjb21taXQsICZyZXZzLT5jb21taXRzLCBOVUxMKSA8IDApCiAJCQkJcmV0dXJuIE5VTEw7CiAJCX0KIApAQCAtMTU5NywyOCArMTYzNSw2MiBAQAogCX0KIH0KIAotc3RydWN0IGNvbW1pdCAqZ2V0X3JldmlzaW9uKHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3N0YXRpYyB2b2lkIGNyZWF0ZV9ib3VuZGFyeV9jb21taXRfbGlzdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJdW5zaWduZWQgaTsKKwlzdHJ1Y3QgY29tbWl0ICpjOworCXN0cnVjdCBvYmplY3RfYXJyYXkgKmFycmF5ID0gJnJldnMtPmJvdW5kYXJ5X2NvbW1pdHM7CisJc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqb2JqZWN0cyA9IGFycmF5LT5vYmplY3RzOworCisJLyoKKwkgKiBJZiByZXZzLT5jb21taXRzIGlzIG5vbi1OVUxMIGF0IHRoaXMgcG9pbnQsIGFuIGVycm9yIG9jY3VycmVkIGluCisJICogZ2V0X3JldmlzaW9uXzEoKS4gIElnbm9yZSB0aGUgZXJyb3IgYW5kIGNvbnRpbnVlIHByaW50aW5nIHRoZQorCSAqIGJvdW5kYXJ5IGNvbW1pdHMgYW55d2F5LiAgKFRoaXMgaXMgd2hhdCB0aGUgY29kZSBoYXMgYWx3YXlzCisJICogZG9uZS4pCisJICovCisJaWYgKHJldnMtPmNvbW1pdHMpIHsKKwkJZnJlZV9jb21taXRfbGlzdChyZXZzLT5jb21taXRzKTsKKwkJcmV2cy0+Y29tbWl0cyA9IE5VTEw7CisJfQorCisJLyoKKwkgKiBQdXQgYWxsIG9mIHRoZSBhY3R1YWwgYm91bmRhcnkgY29tbWl0cyBmcm9tIHJldnMtPmJvdW5kYXJ5X2NvbW1pdHMKKwkgKiBpbnRvIHJldnMtPmNvbW1pdHMKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYXJyYXktPm5yOyBpKyspIHsKKwkJYyA9IChzdHJ1Y3QgY29tbWl0ICopKG9iamVjdHNbaV0uaXRlbSk7CisJCWlmICghYykKKwkJCWNvbnRpbnVlOworCQlpZiAoIShjLT5vYmplY3QuZmxhZ3MgJiBDSElMRF9TSE9XTikpCisJCQljb250aW51ZTsKKwkJaWYgKGMtPm9iamVjdC5mbGFncyAmIChTSE9XTiB8IEJPVU5EQVJZKSkKKwkJCWNvbnRpbnVlOworCQljLT5vYmplY3QuZmxhZ3MgfD0gQk9VTkRBUlk7CisJCWNvbW1pdF9saXN0X2luc2VydChjLCAmcmV2cy0+Y29tbWl0cyk7CisJfQorCisJLyoKKwkgKiBJZiByZXZzLT50b3BvX29yZGVyIGlzIHNldCwgc29ydCB0aGUgYm91bmRhcnkgY29tbWl0cworCSAqIGluIHRvcG9sb2dpY2FsIG9yZGVyCisJICovCisJc29ydF9pbl90b3BvbG9naWNhbF9vcmRlcigmcmV2cy0+Y29tbWl0cywgcmV2cy0+bGlmbyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0ICpnZXRfcmV2aXNpb25faW50ZXJuYWwoc3RydWN0IHJldl9pbmZvICpyZXZzKQogewogCXN0cnVjdCBjb21taXQgKmMgPSBOVUxMOwogCXN0cnVjdCBjb21taXRfbGlzdCAqbDsKIAogCWlmIChyZXZzLT5ib3VuZGFyeSA9PSAyKSB7Ci0JCXVuc2lnbmVkIGk7Ci0JCXN0cnVjdCBvYmplY3RfYXJyYXkgKmFycmF5ID0gJnJldnMtPmJvdW5kYXJ5X2NvbW1pdHM7Ci0JCXN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKm9iamVjdHMgPSBhcnJheS0+b2JqZWN0czsKLQkJZm9yIChpID0gMDsgaSA8IGFycmF5LT5ucjsgaSsrKSB7Ci0JCQljID0gKHN0cnVjdCBjb21taXQgKikob2JqZWN0c1tpXS5pdGVtKTsKLQkJCWlmICghYykKLQkJCQljb250aW51ZTsKLQkJCWlmICghKGMtPm9iamVjdC5mbGFncyAmIENISUxEX1NIT1dOKSkKLQkJCQljb250aW51ZTsKLQkJCWlmICghKGMtPm9iamVjdC5mbGFncyAmIFNIT1dOKSkKLQkJCQlicmVhazsKLQkJfQotCQlpZiAoYXJyYXktPm5yIDw9IGkpCi0JCQlyZXR1cm4gTlVMTDsKLQotCQljLT5vYmplY3QuZmxhZ3MgfD0gU0hPV04gfCBCT1VOREFSWTsKKwkJLyoKKwkJICogQWxsIG9mIHRoZSBub3JtYWwgY29tbWl0cyBoYXZlIGFscmVhZHkgYmVlbiByZXR1cm5lZCwKKwkJICogYW5kIHdlIGFyZSBub3cgcmV0dXJuaW5nIGJvdW5kYXJ5IGNvbW1pdHMuCisJCSAqIGNyZWF0ZV9ib3VuZGFyeV9jb21taXRfbGlzdCgpIGhhcyBwb3B1bGF0ZWQKKwkJICogcmV2cy0+Y29tbWl0cyB3aXRoIHRoZSByZW1haW5pbmcgY29tbWl0cyB0byByZXR1cm4uCisJCSAqLworCQljID0gcG9wX2NvbW1pdCgmcmV2cy0+Y29tbWl0cyk7CisJCWlmIChjKQorCQkJYy0+b2JqZWN0LmZsYWdzIHw9IFNIT1dOOwogCQlyZXR1cm4gYzsKIAl9CiAKQEAgLTE2ODIsNyArMTc1NCwxNCBAQAogCQkgKiBzd2l0Y2ggdG8gYm91bmRhcnkgY29tbWl0cyBvdXRwdXQgbW9kZS4KIAkJICovCiAJCXJldnMtPmJvdW5kYXJ5ID0gMjsKLQkJcmV0dXJuIGdldF9yZXZpc2lvbihyZXZzKTsKKworCQkvKgorCQkgKiBVcGRhdGUgcmV2cy0+Y29tbWl0cyB0byBjb250YWluIHRoZSBsaXN0IG9mCisJCSAqIGJvdW5kYXJ5IGNvbW1pdHMuCisJCSAqLworCQljcmVhdGVfYm91bmRhcnlfY29tbWl0X2xpc3QocmV2cyk7CisKKwkJcmV0dXJuIGdldF9yZXZpc2lvbl9pbnRlcm5hbChyZXZzKTsKIAl9CiAKIAkvKgpAQCAtMTcwNCwzICsxNzgzLDExIEBACiAKIAlyZXR1cm4gYzsKIH0KKworc3RydWN0IGNvbW1pdCAqZ2V0X3JldmlzaW9uKHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjID0gZ2V0X3JldmlzaW9uX2ludGVybmFsKHJldnMpOworCWlmIChjICYmIHJldnMtPmdyYXBoKQorCQlncmFwaF91cGRhdGUocmV2cy0+Z3JhcGgsIGMpOworCXJldHVybiBjOworfQpkaWZmIC0tZ2l0IGEvcmV2aXNpb24uaCBiL3JldmlzaW9uLmgKaW5kZXggYzhiM2I5NC4uMzFmMDhjNCAxMDA2NDQKLS0tIGEvcmV2aXNpb24uaAorKysgYi9yZXZpc2lvbi5oCkBAIC0xMCw3ICsxMCw2IEBACiAjZGVmaW5lIENISUxEX1NIT1dOCSgxdTw8NikKICNkZWZpbmUgQURERUQJCSgxdTw8NykJLyogUGFyZW50cyBhbHJlYWR5IHBhcnNlZCBhbmQgYWRkZWQ/ICovCiAjZGVmaW5lIFNZTU1FVFJJQ19MRUZUCSgxdTw8OCkKLSNkZWZpbmUgVE9QT1NPUlQJKDF1PDw5KQkvKiBJbiB0aGUgYWN0aXZlIHRvcG9zb3J0IGxpc3QuLiAqLwogCiBzdHJ1Y3QgcmV2X2luZm87CiBzdHJ1Y3QgbG9nX2luZm87CkBAIC00Niw3ICs0NSw4IEBACiAJCQl1bnBhY2tlZDoxLCAvKiBzZWUgYWxzbyBpZ25vcmVfcGFja2VkIGJlbG93ICovCiAJCQlib3VuZGFyeToyLAogCQkJbGVmdF9yaWdodDoxLAotCQkJcGFyZW50czoxLAorCQkJcmV3cml0ZV9wYXJlbnRzOjEsCisJCQlwcmludF9wYXJlbnRzOjEsCiAJCQlyZXZlcnNlOjEsCiAJCQljaGVycnlfcGljazoxLAogCQkJZmlyc3RfcGFyZW50X29ubHk6MTsKQEAgLTY0LDcgKzY0LDkgQEAKIAogCS8qIEZvcm1hdCBpbmZvICovCiAJdW5zaWduZWQgaW50CXNob3duX29uZToxLAotCQkJYWJicmV2X2NvbW1pdDoxOworCQkJYWJicmV2X2NvbW1pdDoxLAorCQkJdXNlX3Rlcm1pbmF0b3I6MSwKKwkJCW1pc3NpbmdfbmV3bGluZToxOwogCWVudW0gZGF0ZV9tb2RlIGRhdGVfbW9kZTsKIAogCWNvbnN0IGNoYXIgKippZ25vcmVfcGFja2VkOyAvKiBwcmV0ZW5kIG9iamVjdHMgaW4gdGhlc2UgYXJlIHVucGFja2VkICovCkBAIC04Nyw2ICs4OSw5IEBACiAJLyogRmlsdGVyIGJ5IGNvbW1pdCBsb2cgbWVzc2FnZSAqLwogCXN0cnVjdCBncmVwX29wdAkqZ3JlcF9maWx0ZXI7CiAKKwkvKiBEaXNwbGF5IGhpc3RvcnkgZ3JhcGggKi8KKwlzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaDsKKwogCS8qIHNwZWNpYWwgbGltaXRzICovCiAJaW50IHNraXBfY291bnQ7CiAJaW50IG1heF9jb3VudDsKZGlmZiAtLWdpdCBhL3J1bi1jb21tYW5kLmMgYi9ydW4tY29tbWFuZC5jCmluZGV4IDQ0MTAwYTcuLjcwNjhlYzcgMTAwNjQ0Ci0tLSBhL3J1bi1jb21tYW5kLmMKKysrIGIvcnVuLWNvbW1hbmQuYwpAQCAtNjUsNiArNjUsOCBAQAogCQljbWQtPmVyciA9IGZkZXJyWzBdOwogCX0KIAorCXRyYWNlX2FyZ3ZfcHJpbnRmKGNtZC0+YXJndiwgInRyYWNlOiBydW5fY29tbWFuZDoiKTsKKwogCWNtZC0+cGlkID0gZm9yaygpOwogCWlmIChjbWQtPnBpZCA8IDApIHsKIAkJaWYgKG5lZWRfaW4pCmRpZmYgLS1naXQgYS9zZXR1cC5jIGIvc2V0dXAuYwppbmRleCAzZDJkOTU4Li4zYjExMWVhIDEwMDY0NAotLS0gYS9zZXR1cC5jCisrKyBiL3NldHVwLmMKQEAgLTI5MiwxNSArMjkyLDE2IEBACiAJd29ya190cmVlID0gZ2V0X2dpdF93b3JrX3RyZWUoKTsKIAlnaXRfZGlyID0gZ2V0X2dpdF9kaXIoKTsKIAlpZiAoIWlzX2Fic29sdXRlX3BhdGgoZ2l0X2RpcikpCi0JCXNldF9naXRfZGlyKG1ha2VfYWJzb2x1dGVfcGF0aChnaXRfZGlyKSk7CisJCWdpdF9kaXIgPSBtYWtlX2Fic29sdXRlX3BhdGgoZ2l0X2Rpcik7CiAJaWYgKCF3b3JrX3RyZWUgfHwgY2hkaXIod29ya190cmVlKSkKIAkJZGllKCJUaGlzIG9wZXJhdGlvbiBtdXN0IGJlIHJ1biBpbiBhIHdvcmsgdHJlZSIpOworCXNldF9naXRfZGlyKG1ha2VfcmVsYXRpdmVfcGF0aChnaXRfZGlyLCB3b3JrX3RyZWUpKTsKIAlpbml0aWFsaXplZCA9IDE7CiB9CiAKIHN0YXRpYyBpbnQgY2hlY2tfcmVwb3NpdG9yeV9mb3JtYXRfZ2VudGx5KGludCAqbm9uZ2l0X29rKQogewotCWdpdF9jb25maWcoY2hlY2tfcmVwb3NpdG9yeV9mb3JtYXRfdmVyc2lvbik7CisJZ2l0X2NvbmZpZyhjaGVja19yZXBvc2l0b3J5X2Zvcm1hdF92ZXJzaW9uLCBOVUxMKTsKIAlpZiAoR0lUX1JFUE9fVkVSU0lPTiA8IHJlcG9zaXRvcnlfZm9ybWF0X3ZlcnNpb24pIHsKIAkJaWYgKCFub25naXRfb2spCiAJCQlkaWUgKCJFeHBlY3RlZCBnaXQgcmVwbyB2ZXJzaW9uIDw9ICVkLCBmb3VuZCAlZCIsCkBAIC0zMTUsNiArMzE2LDQ0IEBACiB9CiAKIC8qCisgKiBUcnkgdG8gcmVhZCB0aGUgbG9jYXRpb24gb2YgdGhlIGdpdCBkaXJlY3RvcnkgZnJvbSB0aGUgLmdpdCBmaWxlLAorICogcmV0dXJuIHBhdGggdG8gZ2l0IGRpcmVjdG9yeSBpZiBmb3VuZC4KKyAqLworY29uc3QgY2hhciAqcmVhZF9naXRmaWxlX2dlbnRseShjb25zdCBjaGFyICpwYXRoKQoreworCWNoYXIgKmJ1ZjsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlpbnQgZmQ7CisJc2l6ZV90IGxlbjsKKworCWlmIChzdGF0KHBhdGgsICZzdCkpCisJCXJldHVybiBOVUxMOworCWlmICghU19JU1JFRyhzdC5zdF9tb2RlKSkKKwkJcmV0dXJuIE5VTEw7CisJZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKQorCQlkaWUoIkVycm9yIG9wZW5pbmcgJXM6ICVzIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKwlidWYgPSB4bWFsbG9jKHN0LnN0X3NpemUgKyAxKTsKKwlsZW4gPSByZWFkX2luX2Z1bGwoZmQsIGJ1Ziwgc3Quc3Rfc2l6ZSk7CisJY2xvc2UoZmQpOworCWlmIChsZW4gIT0gc3Quc3Rfc2l6ZSkKKwkJZGllKCJFcnJvciByZWFkaW5nICVzIiwgcGF0aCk7CisJYnVmW2xlbl0gPSAnXDAnOworCWlmIChwcmVmaXhjbXAoYnVmLCAiZ2l0ZGlyOiAiKSkKKwkJZGllKCJJbnZhbGlkIGdpdGZpbGUgZm9ybWF0OiAlcyIsIHBhdGgpOworCXdoaWxlIChidWZbbGVuIC0gMV0gPT0gJ1xuJyB8fCBidWZbbGVuIC0gMV0gPT0gJ1xyJykKKwkJbGVuLS07CisJaWYgKGxlbiA8IDkpCisJCWRpZSgiTm8gcGF0aCBpbiBnaXRmaWxlOiAlcyIsIHBhdGgpOworCWJ1ZltsZW5dID0gJ1wwJzsKKwlpZiAoIWlzX2dpdF9kaXJlY3RvcnkoYnVmICsgOCkpCisJCWRpZSgiTm90IGEgZ2l0IHJlcG9zaXRvcnk6ICVzIiwgYnVmICsgOCk7CisJcGF0aCA9IG1ha2VfYWJzb2x1dGVfcGF0aChidWYgKyA4KTsKKwlmcmVlKGJ1Zik7CisJcmV0dXJuIHBhdGg7Cit9CisKKy8qCiAgKiBXZSBjYW5ub3QgZGVjaWRlIGluIHRoaXMgZnVuY3Rpb24gd2hldGhlciB3ZSBhcmUgaW4gdGhlIHdvcmsgdHJlZSBvcgogICogbm90LCBzaW5jZSB0aGUgY29uZmlnIGNhbiBvbmx5IGJlIHJlYWQgX2FmdGVyXyB0aGlzIGZ1bmN0aW9uIHdhcyBjYWxsZWQuCiAgKi8KQEAgLTMyMyw2ICszNjIsNyBAQAogCWNvbnN0IGNoYXIgKndvcmtfdHJlZV9lbnYgPSBnZXRlbnYoR0lUX1dPUktfVFJFRV9FTlZJUk9OTUVOVCk7CiAJc3RhdGljIGNoYXIgY3dkW1BBVEhfTUFYKzFdOwogCWNvbnN0IGNoYXIgKmdpdGRpcmVudjsKKwljb25zdCBjaGFyICpnaXRmaWxlX2RpcjsKIAlpbnQgbGVuLCBvZmZzZXQ7CiAKIAkvKgpAQCAtMzc3LDggKzQxNywxMCBAQAogCiAJLyoKIAkgKiBUZXN0IGluIHRoZSBmb2xsb3dpbmcgb3JkZXIgKHJlbGF0aXZlIHRvIHRoZSBjd2QpOgorCSAqIC0gLmdpdCAoZmlsZSBjb250YWluaW5nICJnaXRkaXI6IDxwYXRoPiIpCiAJICogLSAuZ2l0LwogCSAqIC0gLi8gKGJhcmUpCisJICogLSAuLi8uZ2l0CiAJICogLSAuLi8uZ2l0LwogCSAqIC0gLi4vIChiYXJlKQogCSAqIC0gLi4vLi4vLmdpdC8KQEAgLTM4Niw2ICs0MjgsMTIgQEAKIAkgKi8KIAlvZmZzZXQgPSBsZW4gPSBzdHJsZW4oY3dkKTsKIAlmb3IgKDs7KSB7CisJCWdpdGZpbGVfZGlyID0gcmVhZF9naXRmaWxlX2dlbnRseShERUZBVUxUX0dJVF9ESVJfRU5WSVJPTk1FTlQpOworCQlpZiAoZ2l0ZmlsZV9kaXIpIHsKKwkJCWlmIChzZXRfZ2l0X2RpcihnaXRmaWxlX2RpcikpCisJCQkJZGllKCJSZXBvc2l0b3J5IHNldHVwIGZhaWxlZCIpOworCQkJYnJlYWs7CisJCX0KIAkJaWYgKGlzX2dpdF9kaXJlY3RvcnkoREVGQVVMVF9HSVRfRElSX0VOVklST05NRU5UKSkKIAkJCWJyZWFrOwogCQlpZiAoaXNfZ2l0X2RpcmVjdG9yeSgiLiIpKSB7CkBAIC00MjgsMjQgKzQ3Niw1NiBAQAogCiBpbnQgZ2l0X2NvbmZpZ19wZXJtKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCiB7Ci0JaWYgKHZhbHVlKSB7Ci0JCWludCBpOwotCQlpZiAoIXN0cmNtcCh2YWx1ZSwgInVtYXNrIikpCi0JCQlyZXR1cm4gUEVSTV9VTUFTSzsKLQkJaWYgKCFzdHJjbXAodmFsdWUsICJncm91cCIpKQotCQkJcmV0dXJuIFBFUk1fR1JPVVA7Ci0JCWlmICghc3RyY21wKHZhbHVlLCAiYWxsIikgfHwKLQkJICAgICFzdHJjbXAodmFsdWUsICJ3b3JsZCIpIHx8Ci0JCSAgICAhc3RyY21wKHZhbHVlLCAiZXZlcnlib2R5IikpCi0JCQlyZXR1cm4gUEVSTV9FVkVSWUJPRFk7Ci0JCWkgPSBhdG9pKHZhbHVlKTsKLQkJaWYgKGkgPiAxKQotCQkJcmV0dXJuIGk7CisJaW50IGk7CisJY2hhciAqZW5kcHRyOworCisJaWYgKHZhbHVlID09IE5VTEwpCisJCXJldHVybiBQRVJNX0dST1VQOworCisJaWYgKCFzdHJjbXAodmFsdWUsICJ1bWFzayIpKQorCQlyZXR1cm4gUEVSTV9VTUFTSzsKKwlpZiAoIXN0cmNtcCh2YWx1ZSwgImdyb3VwIikpCisJCXJldHVybiBQRVJNX0dST1VQOworCWlmICghc3RyY21wKHZhbHVlLCAiYWxsIikgfHwKKwkgICAgIXN0cmNtcCh2YWx1ZSwgIndvcmxkIikgfHwKKwkgICAgIXN0cmNtcCh2YWx1ZSwgImV2ZXJ5Ym9keSIpKQorCQlyZXR1cm4gUEVSTV9FVkVSWUJPRFk7CisKKwkvKiBQYXJzZSBvY3RhbCBudW1iZXJzICovCisJaSA9IHN0cnRvbCh2YWx1ZSwgJmVuZHB0ciwgOCk7CisKKwkvKiBJZiBub3QgYW4gb2N0YWwgbnVtYmVyLCBtYXliZSB0cnVlL2ZhbHNlPyAqLworCWlmICgqZW5kcHRyICE9IDApCisJCXJldHVybiBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSkgPyBQRVJNX0dST1VQIDogUEVSTV9VTUFTSzsKKworCS8qCisJICogVHJlYXQgdmFsdWVzIDAsIDEgYW5kIDIgYXMgY29tcGF0aWJpbGl0eSBjYXNlcywgb3RoZXJ3aXNlIGl0IGlzCisJICogYSBjaG1vZCB2YWx1ZS4KKwkgKi8KKwlzd2l0Y2ggKGkpIHsKKwljYXNlIFBFUk1fVU1BU0s6ICAgICAgICAgICAgICAgLyogMCAqLworCQlyZXR1cm4gUEVSTV9VTUFTSzsKKwljYXNlIE9MRF9QRVJNX0dST1VQOiAgICAgICAgICAgLyogMSAqLworCQlyZXR1cm4gUEVSTV9HUk9VUDsKKwljYXNlIE9MRF9QRVJNX0VWRVJZQk9EWTogICAgICAgLyogMiAqLworCQlyZXR1cm4gUEVSTV9FVkVSWUJPRFk7CiAJfQotCXJldHVybiBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisKKwkvKiBBIGZpbGVtb2RlIHZhbHVlIHdhcyBnaXZlbjogMHh4eCAqLworCisJaWYgKChpICYgMDYwMCkgIT0gMDYwMCkKKwkJZGllKCJQcm9ibGVtIHdpdGggY29yZS5zaGFyZWRSZXBvc2l0b3J5IGZpbGVtb2RlIHZhbHVlICIKKwkJICAgICIoMCUuM28pLlxuVGhlIG93bmVyIG9mIGZpbGVzIG11c3QgYWx3YXlzIGhhdmUgIgorCQkgICAgInJlYWQgYW5kIHdyaXRlIHBlcm1pc3Npb25zLiIsIGkpOworCisJLyoKKwkgKiBNYXNrIGZpbGVtb2RlIHZhbHVlLiBPdGhlcnMgY2FuIG5vdCBnZXQgd3JpdGUgcGVybWlzc2lvbi4KKwkgKiB4IGZsYWdzIGZvciBkaXJlY3RvcmllcyBhcmUgaGFuZGxlZCBzZXBhcmF0ZWx5LgorCSAqLworCXJldHVybiBpICYgMDY2NjsKIH0KIAotaW50IGNoZWNrX3JlcG9zaXRvcnlfZm9ybWF0X3ZlcnNpb24oY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK2ludCBjaGVja19yZXBvc2l0b3J5X2Zvcm1hdF92ZXJzaW9uKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQogewogCWlmIChzdHJjbXAodmFyLCAiY29yZS5yZXBvc2l0b3J5Zm9ybWF0dmVyc2lvbiIpID09IDApCiAJCXJlcG9zaXRvcnlfZm9ybWF0X3ZlcnNpb24gPSBnaXRfY29uZmlnX2ludCh2YXIsIHZhbHVlKTsKZGlmZiAtLWdpdCBhL3NoYTEtbG9va3VwLmMgYi9zaGExLWxvb2t1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMzU3NDcKLS0tIC9kZXYvbnVsbAorKysgYi9zaGExLWxvb2t1cC5jCkBAIC0wLDAgKzEsMTcxIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJzaGExLWxvb2t1cC5oIgorCisvKgorICogQ29udmVudGlvbmFsIGJpbmFyeSBzZWFyY2ggbG9vcCBsb29rcyBsaWtlIHRoaXM6CisgKgorICoJdW5zaWduZWQgbG8sIGhpOworICogICAgICBkbyB7CisgKiAgICAgICAgICAgICAgdW5zaWduZWQgbWkgPSAobG8gKyBoaSkgLyAyOworICogICAgICAgICAgICAgIGludCBjbXAgPSAiZW50cnkgcG9pbnRlZCBhdCBieSBtaSIgbWludXMgInRhcmdldCI7CisgKiAgICAgICAgICAgICAgaWYgKCFjbXApCisgKiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG1pIGlzIHRoZSB3YW50ZWQgb25lKQorICogICAgICAgICAgICAgIGlmIChjbXAgPiAwKQorICogICAgICAgICAgICAgICAgICAgICAgaGkgPSBtaTsgIm1pIGlzIGxhcmdlciB0aGFuIHRhcmdldCIKKyAqICAgICAgICAgICAgICBlbHNlCisgKiAgICAgICAgICAgICAgICAgICAgICBsbyA9IG1pKzE7ICJtaSBpcyBzbWFsbGVyIHRoYW4gdGFyZ2V0IgorICogICAgICB9IHdoaWxlIChsbyA8IGhpKTsKKyAqCisgKiBUaGUgaW52YXJpYW50cyBhcmU6CisgKgorICogLSBXaGVuIGVudGVyaW5nIHRoZSBsb29wLCBsbyBwb2ludHMgYXQgYSBzbG90IHRoYXQgaXMgbmV2ZXIKKyAqICAgYWJvdmUgdGhlIHRhcmdldCAoaXQgY291bGQgYmUgYXQgdGhlIHRhcmdldCksIGhpIHBvaW50cyBhdCBhCisgKiAgIHNsb3QgdGhhdCBpcyBndWFyYW50ZWVkIHRvIGJlIGFib3ZlIHRoZSB0YXJnZXQgKGl0IGNhbiBuZXZlcgorICogICBiZSBhdCB0aGUgdGFyZ2V0KS4KKyAqCisgKiAtIFdlIGZpbmQgYSBwb2ludCAnbWknIGJldHdlZW4gbG8gYW5kIGhpIChtaSBjb3VsZCBiZSB0aGUgc2FtZQorICogICBhcyBsbywgYnV0IG5ldmVyIGNhbiBiZSBhcyBzYW1lIGFzIGhpKSwgYW5kIGNoZWNrIGlmIGl0IGhpdHMKKyAqICAgdGhlIHRhcmdldC4gIFRoZXJlIGFyZSB0aHJlZSBjYXNlczoKKyAqCisgKiAgICAtIGlmIGl0IGlzIGEgaGl0LCB3ZSBhcmUgaGFwcHkuCisgKgorICogICAgLSBpZiBpdCBpcyBzdHJpY3RseSBoaWdoZXIgdGhhbiB0aGUgdGFyZ2V0LCB3ZSBzZXQgaXQgdG8gaGksCisgKiAgICAgIGFuZCByZXBlYXQgdGhlIHNlYXJjaC4KKyAqCisgKiAgICAtIGlmIGl0IGlzIHN0cmljdGx5IGxvd2VyIHRoYW4gdGhlIHRhcmdldCwgd2UgdXBkYXRlIGxvIHRvCisgKiAgICAgIG9uZSBzbG90IGFmdGVyIGl0LCBiZWNhdXNlIHdlIGFsbG93IGxvIHRvIGJlIGF0IHRoZSB0YXJnZXQuCisgKgorICogICBJZiB0aGUgbG9vcCBleGl0cywgdGhlcmUgaXMgbm8gbWF0Y2hpbmcgZW50cnkuCisgKgorICogV2hlbiBjaG9vc2luZyAnbWknLCB3ZSBkbyBub3QgaGF2ZSB0byB0YWtlIHRoZSAibWlkZGxlIiBidXQKKyAqIGFueXdoZXJlIGluIGJldHdlZW4gbG8gYW5kIGhpLCBhcyBsb25nIGFzIGxvIDw9IG1pIDwgaGkgaXMKKyAqIHNhdGlzZmllZC4gIFdoZW4gd2Ugc29tZWhvdyBrbm93IHRoYXQgdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlCisgKiB0YXJnZXQgYW5kIGxvIGlzIG11Y2ggc2hvcnRlciB0aGFuIHRoZSB0YXJnZXQgYW5kIGhpLCB3ZSBjb3VsZAorICogcGljayBtaSB0aGF0IGlzIG11Y2ggY2xvc2VyIHRvIGxvIHRoYW4gdGhlIG1pZHdheS4KKyAqCisgKiBOb3csIHdlIGNhbiB0YWtlIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0IFNIQS0xIGlzIGEgZ29vZCBoYXNoCisgKiBmdW5jdGlvbiwgYW5kIGFzIGxvbmcgYXMgdGhlcmUgYXJlIGVub3VnaCBlbnRyaWVzIGluIHRoZSB0YWJsZSwgd2UKKyAqIGNhbiBleHBlY3QgdW5pZm9ybSBkaXN0cmlidXRpb24uICBBbiBlbnRyeSB0aGF0IGJlZ2lucyB3aXRoIGZvcgorICogZXhhbXBsZSAiZGVhZGJlZWYuLi4iIGlzIG11Y2ggbGlrZWx5IHRvIGFwcGVhciBtdWNoIGxhdGVyIHRoYW4gaW4KKyAqIHRoZSBtaWR3YXkgb2YgdGhlIHRhYmxlLiAgSXQgY2FuIHJlYXNvbmFibHkgYmUgZXhwZWN0ZWQgdG8gYmUgbmVhcgorICogODclICgyMjIvMjU2KSBmcm9tIHRoZSB0b3Agb2YgdGhlIHRhYmxlLgorICoKKyAqIEhvd2V2ZXIsIHdlIGRvIG5vdCB3YW50IHRvIHBpY2sgIm1pIiB0b28gcHJlY2lzZWx5LiAgSWYgdGhlIGVudHJ5IGF0CisgKiB0aGUgODclIGluIHRoZSBhYm92ZSBleGFtcGxlIHR1cm5zIG91dCB0byBiZSBoaWdoZXIgdGhhbiB0aGUgdGFyZ2V0CisgKiB3ZSBhcmUgbG9va2luZyBmb3IsIHdlIHdvdWxkIGVuZCB1cCBuYXJyb3dpbmcgdGhlIHNlYXJjaCBzcGFjZSBkb3duCisgKiBvbmx5IGJ5IDEzJSwgaW5zdGVhZCBvZiA1MCUgd2Ugd291bGQgZ2V0IGlmIHdlIGRpZCBhIHNpbXBsZSBiaW5hcnkKKyAqIHNlYXJjaC4gIFNvIHdlIHdvdWxkIHdhbnQgdG8gaGVkZ2Ugb3VyIGJldHMgYnkgYmVpbmcgbGVzcyBhZ2dyZXNzaXZlLgorICoKKyAqIFRoZSB0YWJsZSBhdCAidGFibGUiIGhvbGRzIGF0IGxlYXN0ICJuciIgZW50cmllcyBvZiAiZWxlbV9zaXplIgorICogYnl0ZXMgZWFjaC4gIEVhY2ggZW50cnkgaGFzIHRoZSBTSEEtMSBrZXkgYXQgImtleV9vZmZzZXQiLiAgVGhlCisgKiB0YWJsZSBpcyBzb3J0ZWQgYnkgdGhlIFNIQS0xIGtleSBvZiB0aGUgZW50cmllcy4gIFRoZSBjYWxsZXIgd2FudHMKKyAqIHRvIGZpbmQgdGhlIGVudHJ5IHdpdGggImtleSIsIGFuZCBrbm93cyB0aGF0IHRoZSBlbnRyeSBhdCAibG8iIGlzCisgKiBub3QgaGlnaGVyIHRoYW4gdGhlIGVudHJ5IGl0IGlzIGxvb2tpbmcgZm9yLCBhbmQgdGhhdCB0aGUgZW50cnkgYXQKKyAqICJoaSIgaXMgaGlnaGVyIHRoYW4gdGhlIGVudHJ5IGl0IGlzIGxvb2tpbmcgZm9yLgorICovCitpbnQgc2hhMV9lbnRyeV9wb3MoY29uc3Qgdm9pZCAqdGFibGUsCisJCSAgIHNpemVfdCBlbGVtX3NpemUsCisJCSAgIHNpemVfdCBrZXlfb2Zmc2V0LAorCQkgICB1bnNpZ25lZCBsbywgdW5zaWduZWQgaGksIHVuc2lnbmVkIG5yLAorCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXkpCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqYmFzZSA9IHRhYmxlOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmhpX2tleSwgKmxvX2tleTsKKwl1bnNpZ25lZCBvZnNfMDsKKwlzdGF0aWMgaW50IGRlYnVnX2xvb2t1cCA9IC0xOworCisJaWYgKGRlYnVnX2xvb2t1cCA8IDApCisJCWRlYnVnX2xvb2t1cCA9ICEhZ2V0ZW52KCJHSVRfREVCVUdfTE9PS1VQIik7CisKKwlpZiAoIW5yIHx8IGxvID49IGhpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAobnIgPT0gaGkpCisJCWhpX2tleSA9IE5VTEw7CisJZWxzZQorCQloaV9rZXkgPSBiYXNlICsgZWxlbV9zaXplICogaGkgKyBrZXlfb2Zmc2V0OworCWxvX2tleSA9IGJhc2UgKyBlbGVtX3NpemUgKiBsbyArIGtleV9vZmZzZXQ7CisKKwlvZnNfMCA9IDA7CisJZG8geworCQlpbnQgY21wOworCQl1bnNpZ25lZCBvZnMsIG1pLCByYW5nZTsKKwkJdW5zaWduZWQgbG92LCBoaXYsIGt5djsKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqbWlfa2V5OworCisJCXJhbmdlID0gaGkgLSBsbzsKKwkJaWYgKGhpX2tleSkgeworCQkJZm9yIChvZnMgPSBvZnNfMDsgb2ZzIDwgMjA7IG9mcysrKQorCQkJCWlmIChsb19rZXlbb2ZzXSAhPSBoaV9rZXlbb2ZzXSkKKwkJCQkJYnJlYWs7CisJCQlvZnNfMCA9IG9mczsKKwkJCS8qCisJCQkgKiBieXRlIDAgdGhydSAob2ZzLTEpIGFyZSB0aGUgc2FtZSBiZXR3ZWVuCisJCQkgKiBsbyBhbmQgaGk7IG9mcyBpcyB0aGUgZmlyc3QgYnl0ZSB0aGF0IGlzCisJCQkgKiBkaWZmZXJlbnQuCisJCQkgKi8KKwkJCWhpdiA9IGhpX2tleVtvZnNfMF07CisJCQlpZiAob2ZzXzAgPCAxOSkKKwkJCQloaXYgPSAoaGl2IDw8IDgpIHwgaGlfa2V5W29mc18wKzFdOworCQl9IGVsc2UgeworCQkJaGl2ID0gMjU2OworCQkJaWYgKG9mc18wIDwgMTkpCisJCQkJaGl2IDw8PSA4OworCQl9CisJCWxvdiA9IGxvX2tleVtvZnNfMF07CisJCWt5diA9IGtleVtvZnNfMF07CisJCWlmIChvZnNfMCA8IDE5KSB7CisJCQlsb3YgPSAobG92IDw8IDgpIHwgbG9fa2V5W29mc18wKzFdOworCQkJa3l2ID0gKGt5diA8PCA4KSB8IGtleVtvZnNfMCsxXTsKKwkJfQorCQlhc3NlcnQobG92IDwgaGl2KTsKKworCQlpZiAoa3l2IDwgbG92KQorCQkJcmV0dXJuIC0xIC0gbG87CisJCWlmIChoaXYgPCBreXYpCisJCQlyZXR1cm4gLTEgLSBoaTsKKworCQkvKgorCQkgKiBFdmVuIGlmIHdlIGtub3cgdGhlIHRhcmdldCBpcyBtdWNoIGNsb3NlciB0byAnaGknCisJCSAqIHRoYW4gJ2xvJywgaWYgd2UgcGljayB0b28gcHJlY2lzZWx5IGFuZCBvdmVyc2hvb3QKKwkJICogKGUuZy4gd2hlbiB3ZSBrbm93ICdtaScgaXMgY2xvc2VyIHRvICdoaScgdGhhbiB0bworCQkgKiAnbG8nLCBwaWNrICdtaScgdGhhdCBpcyBoaWdoZXIgdGhhbiB0aGUgdGFyZ2V0KSwgd2UKKwkJICogZW5kIHVwIG5hcnJvd2luZyB0aGUgc2VhcmNoIHNwYWNlIGJ5IGEgc21hbGxlcgorCQkgKiBhbW91bnQgKGkuZS4gdGhlIGRpc3RhbmNlIGJldHdlZW4gJ21pJyBhbmQgJ2hpJykKKwkJICogdGhhbiB3aGF0IHdlIHdvdWxkIGhhdmUgKGkuZS4gYWJvdXQgaGFsZiBvZiAnbG8nCisJCSAqIGFuZCAnaGknKS4gIEhlZGdlIG91ciBiZXRzIHRvIHBpY2sgJ21pJyBsZXNzCisJCSAqIGFnZ3Jlc3NpdmVseSwgaS5lLiBtYWtlICdtaScgYSBiaXQgY2xvc2VyIHRvIHRoZQorCQkgKiBtaWRkbGUgdGhhbiB3ZSB3b3VsZCBvdGhlcndpc2UgcGljay4KKwkJICovCisJCWt5diA9IChreXYgKiA2ICsgbG92ICsgaGl2KSAvIDg7CisJCWlmIChsb3YgPCBoaXYgLSAxKSB7CisJCQlpZiAoa3l2ID09IGxvdikKKwkJCQlreXYrKzsKKwkJCWVsc2UgaWYgKGt5diA9PSBoaXYpCisJCQkJa3l2LS07CisJCX0KKwkJbWkgPSAocmFuZ2UgLSAxKSAqIChreXYgLSBsb3YpIC8gKGhpdiAtIGxvdikgKyBsbzsKKworCQlpZiAoZGVidWdfbG9va3VwKSB7CisJCQlwcmludGYoImxvICV1IGhpICV1IHJnICV1IG1pICV1ICIsIGxvLCBoaSwgcmFuZ2UsIG1pKTsKKwkJCXByaW50Zigib2ZzICV1IGxvdiAleCwgaGl2ICV4LCBreXYgJXhcbiIsCisJCQkgICAgICAgb2ZzXzAsIGxvdiwgaGl2LCBreXYpOworCQl9CisJCWlmICghKGxvIDw9IG1pICYmIG1pIDwgaGkpKQorCQkJZGllKCJhc3NlcnRpb24gZmFpbHVyZSBsbyAldSBtaSAldSBoaSAldSAlcyIsCisJCQkgICAgbG8sIG1pLCBoaSwgc2hhMV90b19oZXgoa2V5KSk7CisKKwkJbWlfa2V5ID0gYmFzZSArIGVsZW1fc2l6ZSAqIG1pICsga2V5X29mZnNldDsKKwkJY21wID0gbWVtY21wKG1pX2tleSArIG9mc18wLCBrZXkgKyBvZnNfMCwgMjAgLSBvZnNfMCk7CisJCWlmICghY21wKQorCQkJcmV0dXJuIG1pOworCQlpZiAoY21wID4gMCkgeworCQkJaGkgPSBtaTsKKwkJCWhpX2tleSA9IG1pX2tleTsKKwkJfSBlbHNlIHsKKwkJCWxvID0gbWkgKyAxOworCQkJbG9fa2V5ID0gbWlfa2V5ICsgZWxlbV9zaXplOworCQl9CisJfSB3aGlsZSAobG8gPCBoaSk7CisJcmV0dXJuIC1sby0xOworfQpkaWZmIC0tZ2l0IGEvc2hhMS1sb29rdXAuaCBiL3NoYTEtbG9va3VwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI0OWE4MQotLS0gL2Rldi9udWxsCisrKyBiL3NoYTEtbG9va3VwLmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIFNIQTFfTE9PS1VQX0gKKyNkZWZpbmUgU0hBMV9MT09LVVBfSAorCitleHRlcm4gaW50IHNoYTFfZW50cnlfcG9zKGNvbnN0IHZvaWQgKnRhYmxlLAorCQkJICBzaXplX3QgZWxlbV9zaXplLAorCQkJICBzaXplX3Qga2V5X29mZnNldCwKKwkJCSAgdW5zaWduZWQgbG8sIHVuc2lnbmVkIGhpLCB1bnNpZ25lZCBuciwKKwkJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc2hhMV9maWxlLmMgYi9zaGExX2ZpbGUuYwppbmRleCA0NDVhODcxLi5mZjNiYjQ5IDEwMDY0NAotLS0gYS9zaGExX2ZpbGUuYworKysgYi9zaGExX2ZpbGUuYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgInRyZWUuaCIKICNpbmNsdWRlICJyZWZzLmgiCiAjaW5jbHVkZSAicGFjay1yZXZpbmRleC5oIgorI2luY2x1ZGUgInNoYTEtbG9va3VwLmgiCiAKICNpZm5kZWYgT19OT0FUSU1FCiAjaWYgZGVmaW5lZChfX2xpbnV4X18pICYmIChkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9fUFBDX18pKQpAQCAtMzQsOCArMzUsNiBAQAogCiBjb25zdCB1bnNpZ25lZCBjaGFyIG51bGxfc2hhMVsyMF07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hhMV9maWxlX29wZW5fZmxhZyA9IE9fTk9BVElNRTsKLQogY29uc3Qgc2lnbmVkIGNoYXIgaGV4dmFsX3RhYmxlWzI1Nl0gPSB7CiAJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDAwLTA3ICovCiAJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDA4LTBmICovCkBAIC0xMTcsNyArMTE2LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLWNoYXIgKiBzaGExX3RvX2hleChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoraW50IHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXNfY29uc3QoY29uc3QgY2hhciAqcGF0aCkKK3sKKwkvKiBwYXRoIHBvaW50cyB0byBjYWNoZSBlbnRyaWVzLCBzbyB4c3RyZHVwIGJlZm9yZSBtZXNzaW5nIHdpdGggaXQgKi8KKwljaGFyICpidWYgPSB4c3RyZHVwKHBhdGgpOworCWludCByZXN1bHQgPSBzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzKGJ1Zik7CisJZnJlZShidWYpOworCXJldHVybiByZXN1bHQ7Cit9CisKK2NoYXIgKnNoYTFfdG9faGV4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCiB7CiAJc3RhdGljIGludCBidWZubzsKIAlzdGF0aWMgY2hhciBoZXhidWZmZXJbNF1bNTBdOwpAQCAtMTc1LDIxICsxODMsMjMgQEAKIAlyZXR1cm4gYmFzZTsKIH0KIAotY2hhciAqc2hhMV9wYWNrX25hbWUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3N0YXRpYyBjaGFyICpzaGExX2dldF9wYWNrX25hbWUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCQljaGFyICoqbmFtZSwgY2hhciAqKmJhc2UsIGNvbnN0IGNoYXIgKndoaWNoKQogewogCXN0YXRpYyBjb25zdCBjaGFyIGhleFtdID0gIjAxMjM0NTY3ODlhYmNkZWYiOwotCXN0YXRpYyBjaGFyICpuYW1lLCAqYmFzZSwgKmJ1ZjsKKwljaGFyICpidWY7CiAJaW50IGk7CiAKLQlpZiAoIWJhc2UpIHsKKwlpZiAoISpiYXNlKSB7CiAJCWNvbnN0IGNoYXIgKnNoYTFfZmlsZV9kaXJlY3RvcnkgPSBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpOwogCQlpbnQgbGVuID0gc3RybGVuKHNoYTFfZmlsZV9kaXJlY3RvcnkpOwotCQliYXNlID0geG1hbGxvYyhsZW4gKyA2MCk7Ci0JCXNwcmludGYoYmFzZSwgIiVzL3BhY2svcGFjay0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwLnBhY2siLCBzaGExX2ZpbGVfZGlyZWN0b3J5KTsKLQkJbmFtZSA9IGJhc2UgKyBsZW4gKyAxMTsKKwkJKmJhc2UgPSB4bWFsbG9jKGxlbiArIDYwKTsKKwkJc3ByaW50ZigqYmFzZSwgIiVzL3BhY2svcGFjay0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwLiVzIiwKKwkJCXNoYTFfZmlsZV9kaXJlY3RvcnksIHdoaWNoKTsKKwkJKm5hbWUgPSAqYmFzZSArIGxlbiArIDExOwogCX0KIAotCWJ1ZiA9IG5hbWU7CisJYnVmID0gKm5hbWU7CiAKIAlmb3IgKGkgPSAwOyBpIDwgMjA7IGkrKykgewogCQl1bnNpZ25lZCBpbnQgdmFsID0gKnNoYTErKzsKQEAgLTE5NywzMiArMjA3LDIxIEBACiAJCSpidWYrKyA9IGhleFt2YWwgJiAweGZdOwogCX0KIAotCXJldHVybiBiYXNlOworCXJldHVybiAqYmFzZTsKK30KKworY2hhciAqc2hhMV9wYWNrX25hbWUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdGF0aWMgY2hhciAqbmFtZSwgKmJhc2U7CisKKwlyZXR1cm4gc2hhMV9nZXRfcGFja19uYW1lKHNoYTEsICZuYW1lLCAmYmFzZSwgInBhY2siKTsKIH0KIAogY2hhciAqc2hhMV9wYWNrX2luZGV4X25hbWUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKIHsKLQlzdGF0aWMgY29uc3QgY2hhciBoZXhbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKLQlzdGF0aWMgY2hhciAqbmFtZSwgKmJhc2UsICpidWY7Ci0JaW50IGk7CisJc3RhdGljIGNoYXIgKm5hbWUsICpiYXNlOwogCi0JaWYgKCFiYXNlKSB7Ci0JCWNvbnN0IGNoYXIgKnNoYTFfZmlsZV9kaXJlY3RvcnkgPSBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpOwotCQlpbnQgbGVuID0gc3RybGVuKHNoYTFfZmlsZV9kaXJlY3RvcnkpOwotCQliYXNlID0geG1hbGxvYyhsZW4gKyA2MCk7Ci0JCXNwcmludGYoYmFzZSwgIiVzL3BhY2svcGFjay0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwLmlkeCIsIHNoYTFfZmlsZV9kaXJlY3RvcnkpOwotCQluYW1lID0gYmFzZSArIGxlbiArIDExOwotCX0KLQotCWJ1ZiA9IG5hbWU7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMjA7IGkrKykgewotCQl1bnNpZ25lZCBpbnQgdmFsID0gKnNoYTErKzsKLQkJKmJ1ZisrID0gaGV4W3ZhbCA+PiA0XTsKLQkJKmJ1ZisrID0gaGV4W3ZhbCAmIDB4Zl07Ci0JfQotCi0JcmV0dXJuIGJhc2U7CisJcmV0dXJuIHNoYTFfZ2V0X3BhY2tfbmFtZShzaGExLCAmbmFtZSwgJmJhc2UsICJpZHgiKTsKIH0KIAogc3RydWN0IGFsdGVybmF0ZV9vYmplY3RfZGF0YWJhc2UgKmFsdF9vZGJfbGlzdDsKQEAgLTM3OSw2ICszNzgsMTggQEAKIAltdW5tYXAobWFwLCBtYXBzeik7CiB9CiAKK3ZvaWQgYWRkX3RvX2FsdGVybmF0ZXNfZmlsZShjb25zdCBjaGFyICpyZWZlcmVuY2UpCit7CisJc3RydWN0IGxvY2tfZmlsZSAqbG9jayA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBsb2NrX2ZpbGUpKTsKKwlpbnQgZmQgPSBob2xkX2xvY2tfZmlsZV9mb3JfYXBwZW5kKGxvY2ssIGdpdF9wYXRoKCJvYmplY3RzL2luZm8vYWx0ZXJuYXRlcyIpLCAxKTsKKwljaGFyICphbHQgPSBta3BhdGgoIiVzL29iamVjdHNcbiIsIHJlZmVyZW5jZSk7CisJd3JpdGVfb3JfZGllKGZkLCBhbHQsIHN0cmxlbihhbHQpKTsKKwlpZiAoY29tbWl0X2xvY2tfZmlsZShsb2NrKSkKKwkJZGllKCJjb3VsZCBub3QgY2xvc2UgYWx0ZXJuYXRlcyBmaWxlIik7CisJaWYgKGFsdF9vZGJfdGFpbCkKKwkJbGlua19hbHRfb2RiX2VudHJpZXMoYWx0LCBhbHQgKyBzdHJsZW4oYWx0KSwgJ1xuJywgTlVMTCwgMCk7Cit9CisKIHZvaWQgcHJlcGFyZV9hbHRfb2RiKHZvaWQpCiB7CiAJY29uc3QgY2hhciAqYWx0OwpAQCAtMzk1LDIxICs0MDYsMjEgQEAKIAlyZWFkX2luZm9fYWx0ZXJuYXRlcyhnZXRfb2JqZWN0X2RpcmVjdG9yeSgpLCAwKTsKIH0KIAotc3RhdGljIGNoYXIgKmZpbmRfc2hhMV9maWxlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHN0cnVjdCBzdGF0ICpzdCkKK3N0YXRpYyBpbnQgaGFzX2xvb3NlX29iamVjdChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQogewogCWNoYXIgKm5hbWUgPSBzaGExX2ZpbGVfbmFtZShzaGExKTsKIAlzdHJ1Y3QgYWx0ZXJuYXRlX29iamVjdF9kYXRhYmFzZSAqYWx0OwogCi0JaWYgKCFzdGF0KG5hbWUsIHN0KSkKLQkJcmV0dXJuIG5hbWU7CisJaWYgKCFhY2Nlc3MobmFtZSwgRl9PSykpCisJCXJldHVybiAxOwogCXByZXBhcmVfYWx0X29kYigpOwogCWZvciAoYWx0ID0gYWx0X29kYl9saXN0OyBhbHQ7IGFsdCA9IGFsdC0+bmV4dCkgewogCQluYW1lID0gYWx0LT5uYW1lOwogCQlmaWxsX3NoYTFfcGF0aChuYW1lLCBzaGExKTsKLQkJaWYgKCFzdGF0KGFsdC0+YmFzZSwgc3QpKQotCQkJcmV0dXJuIGFsdC0+YmFzZTsKKwkJaWYgKCFhY2Nlc3MoYWx0LT5iYXNlLCBGX09LKSkKKwkJCXJldHVybiAxOwogCX0KLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBwYWNrX3VzZWRfY3RyOwpAQCAtODI5LDEzICs4NDAsNyBAQAogCiBzdHJ1Y3QgcGFja2VkX2dpdCAqcGFyc2VfcGFja19pbmRleCh1bnNpZ25lZCBjaGFyICpzaGExKQogewotCWNoYXIgKnBhdGggPSBzaGExX3BhY2tfaW5kZXhfbmFtZShzaGExKTsKLQlyZXR1cm4gcGFyc2VfcGFja19pbmRleF9maWxlKHNoYTEsIHBhdGgpOwotfQotCi1zdHJ1Y3QgcGFja2VkX2dpdCAqcGFyc2VfcGFja19pbmRleF9maWxlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCi0JCQkJCSBjb25zdCBjaGFyICppZHhfcGF0aCkKLXsKKwljb25zdCBjaGFyICppZHhfcGF0aCA9IHNoYTFfcGFja19pbmRleF9uYW1lKHNoYTEpOwogCWNvbnN0IGNoYXIgKnBhdGggPSBzaGExX3BhY2tfbmFtZShzaGExKTsKIAlzdHJ1Y3QgcGFja2VkX2dpdCAqcCA9IHhtYWxsb2Moc2l6ZW9mKCpwKSArIHN0cmxlbihwYXRoKSArIDIpOwogCkBAIC05OTMsMzggKzk5OCw1OCBAQAogCXJldHVybiBoYXNoY21wKHNoYTEsIHJlYWxfc2hhMSkgPyAtMSA6IDA7CiB9CiAKK3N0YXRpYyBpbnQgZ2l0X29wZW5fbm9hdGltZShjb25zdCBjaGFyICpuYW1lKQoreworCXN0YXRpYyBpbnQgc2hhMV9maWxlX29wZW5fZmxhZyA9IE9fTk9BVElNRTsKKwlpbnQgZmQgPSBvcGVuKG5hbWUsIE9fUkRPTkxZIHwgc2hhMV9maWxlX29wZW5fZmxhZyk7CisKKwkvKiBNaWdodCB0aGUgZmFpbHVyZSBiZSBkdWUgdG8gT19OT0FUSU1FPyAqLworCWlmIChmZCA8IDAgJiYgZXJybm8gIT0gRU5PRU5UICYmIHNoYTFfZmlsZV9vcGVuX2ZsYWcpIHsKKwkJZmQgPSBvcGVuKG5hbWUsIE9fUkRPTkxZKTsKKwkJaWYgKGZkID49IDApCisJCQlzaGExX2ZpbGVfb3Blbl9mbGFnID0gMDsKKwl9CisJcmV0dXJuIGZkOworfQorCitzdGF0aWMgaW50IG9wZW5fc2hhMV9maWxlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJaW50IGZkOworCWNoYXIgKm5hbWUgPSBzaGExX2ZpbGVfbmFtZShzaGExKTsKKwlzdHJ1Y3QgYWx0ZXJuYXRlX29iamVjdF9kYXRhYmFzZSAqYWx0OworCisJZmQgPSBnaXRfb3Blbl9ub2F0aW1lKG5hbWUpOworCWlmIChmZCA+PSAwKQorCQlyZXR1cm4gZmQ7CisKKwlwcmVwYXJlX2FsdF9vZGIoKTsKKwllcnJubyA9IEVOT0VOVDsKKwlmb3IgKGFsdCA9IGFsdF9vZGJfbGlzdDsgYWx0OyBhbHQgPSBhbHQtPm5leHQpIHsKKwkJbmFtZSA9IGFsdC0+bmFtZTsKKwkJZmlsbF9zaGExX3BhdGgobmFtZSwgc2hhMSk7CisJCWZkID0gZ2l0X29wZW5fbm9hdGltZShhbHQtPmJhc2UpOworCQlpZiAoZmQgPj0gMCkKKwkJCXJldHVybiBmZDsKKwl9CisJcmV0dXJuIC0xOworfQorCiBzdGF0aWMgdm9pZCAqbWFwX3NoYTFfZmlsZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCB1bnNpZ25lZCBsb25nICpzaXplKQogewotCXN0cnVjdCBzdGF0IHN0OwogCXZvaWQgKm1hcDsKIAlpbnQgZmQ7Ci0JY2hhciAqZmlsZW5hbWUgPSBmaW5kX3NoYTFfZmlsZShzaGExLCAmc3QpOwogCi0JaWYgKCFmaWxlbmFtZSkgewotCQlyZXR1cm4gTlVMTDsKLQl9CisJZmQgPSBvcGVuX3NoYTFfZmlsZShzaGExKTsKKwltYXAgPSBOVUxMOworCWlmIChmZCA+PSAwKSB7CisJCXN0cnVjdCBzdGF0IHN0OwogCi0JZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05MWSB8IHNoYTFfZmlsZV9vcGVuX2ZsYWcpOwotCWlmIChmZCA8IDApIHsKLQkJLyogU2VlIGlmIGl0IHdvcmtzIHdpdGhvdXQgT19OT0FUSU1FICovCi0JCXN3aXRjaCAoc2hhMV9maWxlX29wZW5fZmxhZykgewotCQlkZWZhdWx0OgotCQkJZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05MWSk7Ci0JCQlpZiAoZmQgPj0gMCkKLQkJCQlicmVhazsKLQkJLyogRmFsbHRocm91Z2ggKi8KLQkJY2FzZSAwOgotCQkJcmV0dXJuIE5VTEw7CisJCWlmICghZnN0YXQoZmQsICZzdCkpIHsKKwkJCSpzaXplID0geHNpemVfdChzdC5zdF9zaXplKTsKKwkJCW1hcCA9IHhtbWFwKE5VTEwsICpzaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgMCk7CiAJCX0KLQotCQkvKiBJZiBpdCBmYWlsZWQgb25jZSwgaXQgd2lsbCBwcm9iYWJseSBmYWlsIGFnYWluLgotCQkgKiBTdG9wIHVzaW5nIE9fTk9BVElNRQotCQkgKi8KLQkJc2hhMV9maWxlX29wZW5fZmxhZyA9IDA7CisJCWNsb3NlKGZkKTsKIAl9Ci0JKnNpemUgPSB4c2l6ZV90KHN0LnN0X3NpemUpOwotCW1hcCA9IHhtbWFwKE5VTEwsICpzaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgMCk7Ci0JY2xvc2UoZmQpOwogCXJldHVybiBtYXA7CiB9CiAKQEAgLTE1ODQsNiArMTYwOSw3IEBACiAJb2ZmX3QgYmFzZV9vZmZzZXQ7CiAKIAliYXNlX29mZnNldCA9IGdldF9kZWx0YV9iYXNlKHAsIHdfY3VycywgJmN1cnBvcywgKnR5cGUsIG9ial9vZmZzZXQpOworCXVudXNlX3BhY2sod19jdXJzKTsKIAliYXNlID0gY2FjaGVfb3JfdW5wYWNrX2VudHJ5KHAsIGJhc2Vfb2Zmc2V0LCAmYmFzZV9zaXplLCB0eXBlLCAwKTsKIAlpZiAoIWJhc2UpCiAJCWRpZSgiZmFpbGVkIHRvIHJlYWQgZGVsdGEgYmFzZSBvYmplY3QiCkBAIC0xNjc1LDcgKzE3MDEsMTIgQEAKIHsKIAljb25zdCB1aW50MzJfdCAqbGV2ZWwxX29mcyA9IHAtPmluZGV4X2RhdGE7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqaW5kZXggPSBwLT5pbmRleF9kYXRhOwotCXVuc2lnbmVkIGhpLCBsbzsKKwl1bnNpZ25lZCBoaSwgbG8sIHN0cmlkZTsKKwlzdGF0aWMgaW50IHVzZV9sb29rdXAgPSAtMTsKKwlzdGF0aWMgaW50IGRlYnVnX2xvb2t1cCA9IC0xOworCisJaWYgKGRlYnVnX2xvb2t1cCA8IDApCisJCWRlYnVnX2xvb2t1cCA9ICEhZ2V0ZW52KCJHSVRfREVCVUdfTE9PS1VQIik7CiAKIAlpZiAoIWluZGV4KSB7CiAJCWlmIChvcGVuX3BhY2tfaW5kZXgocCkpCkBAIC0xNjkwLDExICsxNzIxLDM0IEBACiAJaW5kZXggKz0gNCAqIDI1NjsKIAloaSA9IG50b2hsKGxldmVsMV9vZnNbKnNoYTFdKTsKIAlsbyA9ICgoKnNoYTEgPT0gMHgwKSA/IDAgOiBudG9obChsZXZlbDFfb2ZzWypzaGExIC0gMV0pKTsKKwlpZiAocC0+aW5kZXhfdmVyc2lvbiA+IDEpIHsKKwkJc3RyaWRlID0gMjA7CisJfSBlbHNlIHsKKwkJc3RyaWRlID0gMjQ7CisJCWluZGV4ICs9IDQ7CisJfQorCisJaWYgKGRlYnVnX2xvb2t1cCkKKwkJcHJpbnRmKCIlMDJ4JTAyeCUwMnguLi4gbG8gJXUgaGkgJXUgbnIgJXVcbiIsCisJCSAgICAgICBzaGExWzBdLCBzaGExWzFdLCBzaGExWzJdLCBsbywgaGksIHAtPm51bV9vYmplY3RzKTsKKworCWlmICh1c2VfbG9va3VwIDwgMCkKKwkJdXNlX2xvb2t1cCA9ICEhZ2V0ZW52KCJHSVRfVVNFX0xPT0tVUCIpOworCWlmICh1c2VfbG9va3VwKSB7CisJCWludCBwb3MgPSBzaGExX2VudHJ5X3BvcyhpbmRleCwgc3RyaWRlLCAwLAorCQkJCQkgbG8sIGhpLCBwLT5udW1fb2JqZWN0cywgc2hhMSk7CisJCWlmIChwb3MgPCAwKQorCQkJcmV0dXJuIDA7CisJCXJldHVybiBudGhfcGFja2VkX29iamVjdF9vZmZzZXQocCwgcG9zKTsKKwl9CiAKIAlkbyB7CiAJCXVuc2lnbmVkIG1pID0gKGxvICsgaGkpIC8gMjsKLQkJdW5zaWduZWQgeCA9IChwLT5pbmRleF92ZXJzaW9uID4gMSkgPyAobWkgKiAyMCkgOiAobWkgKiAyNCArIDQpOwotCQlpbnQgY21wID0gaGFzaGNtcChpbmRleCArIHgsIHNoYTEpOworCQlpbnQgY21wID0gaGFzaGNtcChpbmRleCArIG1pICogc3RyaWRlLCBzaGExKTsKKworCQlpZiAoZGVidWdfbG9va3VwKQorCQkJcHJpbnRmKCJsbyAldSBoaSAldSByZyAldSBtaSAldVxuIiwKKwkJCSAgICAgICBsbywgaGksIGhpIC0gbG8sIG1pKTsKIAkJaWYgKCFjbXApCiAJCQlyZXR1cm4gbnRoX3BhY2tlZF9vYmplY3Rfb2Zmc2V0KHAsIG1pKTsKIAkJaWYgKGNtcCA+IDApCkBAIC0xOTg3LDQ4ICsyMDQxLDExIEBACiB9CiAKIC8qCi0gKiBMaW5rIHRoZSB0ZW1wZmlsZSB0byB0aGUgZmluYWwgcGxhY2UsIHBvc3NpYmx5IGNyZWF0aW5nIHRoZQotICogbGFzdCBkaXJlY3RvcnkgbGV2ZWwgYXMgeW91IGRvIHNvLgotICoKLSAqIFJldHVybnMgdGhlIGVycm5vIG9uIGZhaWx1cmUsIDAgb24gc3VjY2Vzcy4KLSAqLwotc3RhdGljIGludCBsaW5rX3RlbXBfdG9fZmlsZShjb25zdCBjaGFyICp0bXBmaWxlLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKLXsKLQlpbnQgcmV0OwotCWNoYXIgKmRpcjsKLQotCWlmICghbGluayh0bXBmaWxlLCBmaWxlbmFtZSkpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBUcnkgdG8gbWtkaXIgdGhlIGxhc3QgcGF0aCBjb21wb25lbnQgaWYgdGhhdCBmYWlsZWQuCi0JICoKLQkgKiBSZS10cnkgdGhlICJsaW5rKCkiIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgbWtkaXIKLQkgKiBzdWNjZWVkcywgc2luY2UgYSByYWNlIG1pZ2h0IG1lYW4gdGhhdCBzb21lYm9keQotCSAqIGVsc2Ugc3VjY2VlZGVkLgotCSAqLwotCXJldCA9IGVycm5vOwotCWRpciA9IHN0cnJjaHIoZmlsZW5hbWUsICcvJyk7Ci0JaWYgKGRpcikgewotCQkqZGlyID0gMDsKLQkJaWYgKCFta2RpcihmaWxlbmFtZSwgMDc3NykgJiYgYWRqdXN0X3NoYXJlZF9wZXJtKGZpbGVuYW1lKSkgewotCQkJKmRpciA9ICcvJzsKLQkJCXJldHVybiAtMjsKLQkJfQotCQkqZGlyID0gJy8nOwotCQlpZiAoIWxpbmsodG1wZmlsZSwgZmlsZW5hbWUpKQotCQkJcmV0dXJuIDA7Ci0JCXJldCA9IGVycm5vOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi0vKgogICogTW92ZSB0aGUganVzdCB3cml0dGVuIG9iamVjdCBpbnRvIGl0cyBmaW5hbCByZXN0aW5nIHBsYWNlCiAgKi8KIGludCBtb3ZlX3RlbXBfdG9fZmlsZShjb25zdCBjaGFyICp0bXBmaWxlLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKIHsKLQlpbnQgcmV0ID0gbGlua190ZW1wX3RvX2ZpbGUodG1wZmlsZSwgZmlsZW5hbWUpOworCWludCByZXQgPSBsaW5rKHRtcGZpbGUsIGZpbGVuYW1lKTsKIAogCS8qCiAJICogQ29kYSBoYWNrIC0gY29kYSBkb2Vzbid0IGxpa2UgY3Jvc3MtZGlyZWN0b3J5IGxpbmtzLApAQCAtMjA3Myw0MyArMjA5MCw2OCBAQAogCXJldHVybiAwOwogfQogCi1pbnQgd3JpdGVfc2hhMV9maWxlKHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBsZW4sIGNvbnN0IGNoYXIgKnR5cGUsIHVuc2lnbmVkIGNoYXIgKnJldHVybnNoYTEpCisvKiBGaW5hbGl6ZSBhIGZpbGUgb24gZGlzaywgYW5kIGNsb3NlIGl0LiAqLworc3RhdGljIHZvaWQgY2xvc2Vfc2hhMV9maWxlKGludCBmZCkKIHsKLQlpbnQgc2l6ZSwgcmV0OworCWlmIChmc3luY19vYmplY3RfZmlsZXMpCisJCWZzeW5jX29yX2RpZShmZCwgInNoYTEgZmlsZSIpOworCWZjaG1vZChmZCwgMDQ0NCk7CisJaWYgKGNsb3NlKGZkKSAhPSAwKQorCQlkaWUoInVuYWJsZSB0byB3cml0ZSBzaGExIGZpbGUiKTsKK30KKworLyogU2l6ZSBvZiBkaXJlY3RvcnkgY29tcG9uZW50LCBpbmNsdWRpbmcgdGhlIGVuZGluZyAnLycgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGRpcmVjdG9yeV9zaXplKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCWNvbnN0IGNoYXIgKnMgPSBzdHJyY2hyKGZpbGVuYW1lLCAnLycpOworCWlmICghcykKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHMgLSBmaWxlbmFtZSArIDE7Cit9CisKKy8qCisgKiBUaGlzIGNyZWF0ZXMgYSB0ZW1wb3JhcnkgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIGZpbmFsCisgKiAnZmlsZW5hbWUnCisgKgorICogV2Ugd2FudCB0byBhdm9pZCBjcm9zcy1kaXJlY3RvcnkgZmlsZW5hbWUgcmVuYW1lcywgYmVjYXVzZSB0aG9zZQorICogY2FuIGhhdmUgcHJvYmxlbXMgb24gdmFyaW91cyBmaWxlc3lzdGVtcyAoRkFULCBORlMsIENvZGEpLgorICovCitzdGF0aWMgaW50IGNyZWF0ZV90bXBmaWxlKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZnNpeiwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJaW50IGZkLCBkaXJsZW4gPSBkaXJlY3Rvcnlfc2l6ZShmaWxlbmFtZSk7CisKKwlpZiAoZGlybGVuICsgMjAgPiBidWZzaXopIHsKKwkJZXJybm8gPSBFTkFNRVRPT0xPTkc7CisJCXJldHVybiAtMTsKKwl9CisJbWVtY3B5KGJ1ZmZlciwgZmlsZW5hbWUsIGRpcmxlbik7CisJc3RyY3B5KGJ1ZmZlciArIGRpcmxlbiwgInRtcF9vYmpfWFhYWFhYIik7CisJZmQgPSBta3N0ZW1wKGJ1ZmZlcik7CisJaWYgKGZkIDwgMCAmJiBkaXJsZW4pIHsKKwkJLyogTWFrZSBzdXJlIHRoZSBkaXJlY3RvcnkgZXhpc3RzICovCisJCW1lbWNweShidWZmZXIsIGZpbGVuYW1lLCBkaXJsZW4pOworCQlidWZmZXJbZGlybGVuLTFdID0gMDsKKwkJaWYgKG1rZGlyKGJ1ZmZlciwgMDc3NykgfHwgYWRqdXN0X3NoYXJlZF9wZXJtKGJ1ZmZlcikpCisJCQlyZXR1cm4gLTE7CisKKwkJLyogVHJ5IGFnYWluICovCisJCXN0cmNweShidWZmZXIgKyBkaXJsZW4gLSAxLCAiL3RtcF9vYmpfWFhYWFhYIik7CisJCWZkID0gbWtzdGVtcChidWZmZXIpOworCX0KKwlyZXR1cm4gZmQ7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfbG9vc2Vfb2JqZWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNoYXIgKmhkciwgaW50IGhkcmxlbiwKKwkJCSAgICAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBsZW4sIHRpbWVfdCBtdGltZSkKK3sKKwlpbnQgZmQsIHNpemUsIHJldDsKIAl1bnNpZ25lZCBjaGFyICpjb21wcmVzc2VkOwogCXpfc3RyZWFtIHN0cmVhbTsKLQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwogCWNoYXIgKmZpbGVuYW1lOwogCXN0YXRpYyBjaGFyIHRtcGZpbGVbUEFUSF9NQVhdOwotCWNoYXIgaGRyWzMyXTsKLQlpbnQgZmQsIGhkcmxlbjsKIAotCS8qIE5vcm1hbGx5IGlmIHdlIGhhdmUgaXQgaW4gdGhlIHBhY2sgdGhlbiB3ZSBkbyBub3QgYm90aGVyIHdyaXRpbmcKLQkgKiBpdCBvdXQgaW50byAuZ2l0L29iamVjdHMvPz8vP3szOH0gZmlsZS4KLQkgKi8KLQl3cml0ZV9zaGExX2ZpbGVfcHJlcGFyZShidWYsIGxlbiwgdHlwZSwgc2hhMSwgaGRyLCAmaGRybGVuKTsKIAlmaWxlbmFtZSA9IHNoYTFfZmlsZV9uYW1lKHNoYTEpOwotCWlmIChyZXR1cm5zaGExKQotCQloYXNoY3B5KHJldHVybnNoYTEsIHNoYTEpOwotCWlmIChoYXNfc2hhMV9maWxlKHNoYTEpKQotCQlyZXR1cm4gMDsKLQlmZCA9IG9wZW4oZmlsZW5hbWUsIE9fUkRPTkxZKTsKLQlpZiAoZmQgPj0gMCkgewotCQkvKgotCQkgKiBGSVhNRSEhISBXZSBtaWdodCBkbyBjb2xsaXNpb24gY2hlY2tpbmcgaGVyZSwgYnV0IHdlJ2QKLQkJICogbmVlZCB0byB1bmNvbXByZXNzIHRoZSBvbGQgZmlsZSBhbmQgY2hlY2sgaXQuIExhdGVyLgotCQkgKi8KLQkJY2xvc2UoZmQpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoZXJybm8gIT0gRU5PRU5UKSB7Ci0JCXJldHVybiBlcnJvcigic2hhMSBmaWxlICVzOiAlc1xuIiwgZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7Ci0JfQotCi0Jc25wcmludGYodG1wZmlsZSwgc2l6ZW9mKHRtcGZpbGUpLCAiJXMvdG1wX29ial9YWFhYWFgiLCBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpKTsKLQotCWZkID0gbWtzdGVtcCh0bXBmaWxlKTsKKwlmZCA9IGNyZWF0ZV90bXBmaWxlKHRtcGZpbGUsIHNpemVvZih0bXBmaWxlKSwgZmlsZW5hbWUpOwogCWlmIChmZCA8IDApIHsKIAkJaWYgKGVycm5vID09IEVQRVJNKQogCQkJcmV0dXJuIGVycm9yKCJpbnN1ZmZpY2llbnQgcGVybWlzc2lvbiBmb3IgYWRkaW5nIGFuIG9iamVjdCB0byByZXBvc2l0b3J5IGRhdGFiYXNlICVzXG4iLCBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpKTsKQEAgLTIxNDgsMTU2ICsyMTkwLDUzIEBACiAKIAlpZiAod3JpdGVfYnVmZmVyKGZkLCBjb21wcmVzc2VkLCBzaXplKSA8IDApCiAJCWRpZSgidW5hYmxlIHRvIHdyaXRlIHNoYTEgZmlsZSIpOwotCWZjaG1vZChmZCwgMDQ0NCk7Ci0JaWYgKGNsb3NlKGZkKSkKLQkJZGllKCJ1bmFibGUgdG8gd3JpdGUgc2hhMSBmaWxlIik7CisJY2xvc2Vfc2hhMV9maWxlKGZkKTsKIAlmcmVlKGNvbXByZXNzZWQpOwogCisJaWYgKG10aW1lKSB7CisJCXN0cnVjdCB1dGltYnVmIHV0YjsKKwkJdXRiLmFjdGltZSA9IG10aW1lOworCQl1dGIubW9kdGltZSA9IG10aW1lOworCQlpZiAodXRpbWUodG1wZmlsZSwgJnV0YikgPCAwKQorCQkJd2FybmluZygiZmFpbGVkIHV0aW1lKCkgb24gJXM6ICVzIiwKKwkJCQl0bXBmaWxlLCBzdHJlcnJvcihlcnJubykpOworCX0KKwogCXJldHVybiBtb3ZlX3RlbXBfdG9fZmlsZSh0bXBmaWxlLCBmaWxlbmFtZSk7CiB9CiAKLS8qCi0gKiBXZSBuZWVkIHRvIHVucGFjayBhbmQgcmVjb21wcmVzcyB0aGUgb2JqZWN0IGZvciB3cml0aW5nCi0gKiBpdCBvdXQgdG8gYSBkaWZmZXJlbnQgZmlsZS4KLSAqLwotc3RhdGljIHZvaWQgKnJlcGFja19vYmplY3QoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgdW5zaWduZWQgbG9uZyAqb2Jqc2l6ZSkKK2ludCB3cml0ZV9zaGExX2ZpbGUodm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIGxlbiwgY29uc3QgY2hhciAqdHlwZSwgdW5zaWduZWQgY2hhciAqcmV0dXJuc2hhMSkKIHsKLQlzaXplX3Qgc2l6ZTsKLQl6X3N0cmVhbSBzdHJlYW07Ci0JdW5zaWduZWQgY2hhciAqdW5wYWNrZWQ7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwljaGFyIGhkclszMl07CisJaW50IGhkcmxlbjsKKworCS8qIE5vcm1hbGx5IGlmIHdlIGhhdmUgaXQgaW4gdGhlIHBhY2sgdGhlbiB3ZSBkbyBub3QgYm90aGVyIHdyaXRpbmcKKwkgKiBpdCBvdXQgaW50byAuZ2l0L29iamVjdHMvPz8vP3szOH0gZmlsZS4KKwkgKi8KKwl3cml0ZV9zaGExX2ZpbGVfcHJlcGFyZShidWYsIGxlbiwgdHlwZSwgc2hhMSwgaGRyLCAmaGRybGVuKTsKKwlpZiAocmV0dXJuc2hhMSkKKwkJaGFzaGNweShyZXR1cm5zaGExLCBzaGExKTsKKwlpZiAoaGFzX3NoYTFfZmlsZShzaGExKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHdyaXRlX2xvb3NlX29iamVjdChzaGExLCBoZHIsIGhkcmxlbiwgYnVmLCBsZW4sIDApOworfQorCitpbnQgZm9yY2Vfb2JqZWN0X2xvb3NlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHRpbWVfdCBtdGltZSkKK3sKKwl2b2lkICpidWY7CiAJdW5zaWduZWQgbG9uZyBsZW47CiAJZW51bSBvYmplY3RfdHlwZSB0eXBlOwogCWNoYXIgaGRyWzMyXTsKIAlpbnQgaGRybGVuOwotCXZvaWQgKmJ1ZjsKIAotCS8qIG5lZWQgdG8gdW5wYWNrIGFuZCByZWNvbXByZXNzIGl0IGJ5IGl0c2VsZiAqLwotCXVucGFja2VkID0gcmVhZF9wYWNrZWRfc2hhMShzaGExLCAmdHlwZSwgJmxlbik7Ci0JaWYgKCF1bnBhY2tlZCkKLQkJZXJyb3IoImNhbm5vdCByZWFkIHNoYTFfZmlsZSBmb3IgJXMiLCBzaGExX3RvX2hleChzaGExKSk7Ci0KKwlpZiAoaGFzX2xvb3NlX29iamVjdChzaGExKSkKKwkJcmV0dXJuIDA7CisJYnVmID0gcmVhZF9wYWNrZWRfc2hhMShzaGExLCAmdHlwZSwgJmxlbik7CisJaWYgKCFidWYpCisJCXJldHVybiBlcnJvcigiY2Fubm90IHJlYWQgc2hhMV9maWxlIGZvciAlcyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKIAloZHJsZW4gPSBzcHJpbnRmKGhkciwgIiVzICVsdSIsIHR5cGVuYW1lKHR5cGUpLCBsZW4pICsgMTsKLQotCS8qIFNldCBpdCB1cCAqLwotCW1lbXNldCgmc3RyZWFtLCAwLCBzaXplb2Yoc3RyZWFtKSk7Ci0JZGVmbGF0ZUluaXQoJnN0cmVhbSwgemxpYl9jb21wcmVzc2lvbl9sZXZlbCk7Ci0Jc2l6ZSA9IGRlZmxhdGVCb3VuZCgmc3RyZWFtLCBsZW4gKyBoZHJsZW4pOwotCWJ1ZiA9IHhtYWxsb2Moc2l6ZSk7Ci0KLQkvKiBDb21wcmVzcyBpdCAqLwotCXN0cmVhbS5uZXh0X291dCA9IGJ1ZjsKLQlzdHJlYW0uYXZhaWxfb3V0ID0gc2l6ZTsKLQotCS8qIEZpcnN0IGhlYWRlci4uICovCi0Jc3RyZWFtLm5leHRfaW4gPSAodm9pZCAqKWhkcjsKLQlzdHJlYW0uYXZhaWxfaW4gPSBoZHJsZW47Ci0Jd2hpbGUgKGRlZmxhdGUoJnN0cmVhbSwgMCkgPT0gWl9PSykKLQkJLyogbm90aGluZyAqLzsKLQotCS8qIFRoZW4gdGhlIGRhdGEgaXRzZWxmLi4gKi8KLQlzdHJlYW0ubmV4dF9pbiA9IHVucGFja2VkOwotCXN0cmVhbS5hdmFpbF9pbiA9IGxlbjsKLQl3aGlsZSAoZGVmbGF0ZSgmc3RyZWFtLCBaX0ZJTklTSCkgPT0gWl9PSykKLQkJLyogbm90aGluZyAqLzsKLQlkZWZsYXRlRW5kKCZzdHJlYW0pOwotCWZyZWUodW5wYWNrZWQpOwotCi0JKm9ianNpemUgPSBzdHJlYW0udG90YWxfb3V0OwotCXJldHVybiBidWY7Ci19Ci0KLWludCB3cml0ZV9zaGExX3RvX2ZkKGludCBmZCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKLXsKLQlpbnQgcmV0dmFsOwotCXVuc2lnbmVkIGxvbmcgb2Jqc2l6ZTsKLQl2b2lkICpidWYgPSBtYXBfc2hhMV9maWxlKHNoYTEsICZvYmpzaXplKTsKLQotCWlmIChidWYpIHsKLQkJcmV0dmFsID0gd3JpdGVfYnVmZmVyKGZkLCBidWYsIG9ianNpemUpOwotCQltdW5tYXAoYnVmLCBvYmpzaXplKTsKLQkJcmV0dXJuIHJldHZhbDsKLQl9Ci0KLQlidWYgPSByZXBhY2tfb2JqZWN0KHNoYTEsICZvYmpzaXplKTsKLQlyZXR2YWwgPSB3cml0ZV9idWZmZXIoZmQsIGJ1Ziwgb2Jqc2l6ZSk7Ci0JZnJlZShidWYpOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLWludCB3cml0ZV9zaGExX2Zyb21fZmQoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZkLCBjaGFyICpidWZmZXIsCi0JCSAgICAgICBzaXplX3QgYnVmc2l6ZSwgc2l6ZV90ICpidWZwb3NuKQotewotCWNoYXIgdG1wZmlsZVtQQVRIX01BWF07Ci0JaW50IGxvY2FsOwotCXpfc3RyZWFtIHN0cmVhbTsKLQl1bnNpZ25lZCBjaGFyIHJlYWxfc2hhMVsyMF07Ci0JdW5zaWduZWQgY2hhciBkaXNjYXJkWzQwOTZdOwotCWludCByZXQ7Ci0JU0hBX0NUWCBjOwotCi0Jc25wcmludGYodG1wZmlsZSwgc2l6ZW9mKHRtcGZpbGUpLCAiJXMvdG1wX29ial9YWFhYWFgiLCBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpKTsKLQotCWxvY2FsID0gbWtzdGVtcCh0bXBmaWxlKTsKLQlpZiAobG9jYWwgPCAwKSB7Ci0JCWlmIChlcnJubyA9PSBFUEVSTSkKLQkJCXJldHVybiBlcnJvcigiaW5zdWZmaWNpZW50IHBlcm1pc3Npb24gZm9yIGFkZGluZyBhbiBvYmplY3QgdG8gcmVwb3NpdG9yeSBkYXRhYmFzZSAlc1xuIiwgZ2V0X29iamVjdF9kaXJlY3RvcnkoKSk7Ci0JCWVsc2UKLQkJCXJldHVybiBlcnJvcigidW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3Jhcnkgc2hhMSBmaWxlbmFtZSAlczogJXNcbiIsIHRtcGZpbGUsIHN0cmVycm9yKGVycm5vKSk7Ci0JfQotCi0JbWVtc2V0KCZzdHJlYW0sIDAsIHNpemVvZihzdHJlYW0pKTsKLQotCWluZmxhdGVJbml0KCZzdHJlYW0pOwotCi0JU0hBMV9Jbml0KCZjKTsKLQotCWRvIHsKLQkJc3NpemVfdCBzaXplOwotCQlpZiAoKmJ1ZnBvc24pIHsKLQkJCXN0cmVhbS5hdmFpbF9pbiA9ICpidWZwb3NuOwotCQkJc3RyZWFtLm5leHRfaW4gPSAodW5zaWduZWQgY2hhciAqKSBidWZmZXI7Ci0JCQlkbyB7Ci0JCQkJc3RyZWFtLm5leHRfb3V0ID0gZGlzY2FyZDsKLQkJCQlzdHJlYW0uYXZhaWxfb3V0ID0gc2l6ZW9mKGRpc2NhcmQpOwotCQkJCXJldCA9IGluZmxhdGUoJnN0cmVhbSwgWl9TWU5DX0ZMVVNIKTsKLQkJCQlTSEExX1VwZGF0ZSgmYywgZGlzY2FyZCwgc2l6ZW9mKGRpc2NhcmQpIC0KLQkJCQkJICAgIHN0cmVhbS5hdmFpbF9vdXQpOwotCQkJfSB3aGlsZSAoc3RyZWFtLmF2YWlsX2luICYmIHJldCA9PSBaX09LKTsKLQkJCWlmICh3cml0ZV9idWZmZXIobG9jYWwsIGJ1ZmZlciwgKmJ1ZnBvc24gLSBzdHJlYW0uYXZhaWxfaW4pIDwgMCkKLQkJCQlkaWUoInVuYWJsZSB0byB3cml0ZSBzaGExIGZpbGUiKTsKLQkJCW1lbW1vdmUoYnVmZmVyLCBidWZmZXIgKyAqYnVmcG9zbiAtIHN0cmVhbS5hdmFpbF9pbiwKLQkJCQlzdHJlYW0uYXZhaWxfaW4pOwotCQkJKmJ1ZnBvc24gPSBzdHJlYW0uYXZhaWxfaW47Ci0JCQlpZiAocmV0ICE9IFpfT0spCi0JCQkJYnJlYWs7Ci0JCX0KLQkJc2l6ZSA9IHhyZWFkKGZkLCBidWZmZXIgKyAqYnVmcG9zbiwgYnVmc2l6ZSAtICpidWZwb3NuKTsKLQkJaWYgKHNpemUgPD0gMCkgewotCQkJY2xvc2UobG9jYWwpOwotCQkJdW5saW5rKHRtcGZpbGUpOwotCQkJaWYgKCFzaXplKQotCQkJCXJldHVybiBlcnJvcigiQ29ubmVjdGlvbiBjbG9zZWQ/Iik7Ci0JCQlwZXJyb3IoIlJlYWRpbmcgZnJvbSBjb25uZWN0aW9uIik7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQkJKmJ1ZnBvc24gKz0gc2l6ZTsKLQl9IHdoaWxlICgxKTsKLQlpbmZsYXRlRW5kKCZzdHJlYW0pOwotCi0JZmNobW9kKGxvY2FsLCAwNDQ0KTsKLQlpZiAoY2xvc2UobG9jYWwpICE9IDApCi0JCWRpZSgidW5hYmxlIHRvIHdyaXRlIHNoYTEgZmlsZSIpOwotCVNIQTFfRmluYWwocmVhbF9zaGExLCAmYyk7Ci0JaWYgKHJldCAhPSBaX1NUUkVBTV9FTkQpIHsKLQkJdW5saW5rKHRtcGZpbGUpOwotCQlyZXR1cm4gZXJyb3IoIkZpbGUgJXMgY29ycnVwdGVkIiwgc2hhMV90b19oZXgoc2hhMSkpOwotCX0KLQlpZiAoaGFzaGNtcChzaGExLCByZWFsX3NoYTEpKSB7Ci0JCXVubGluayh0bXBmaWxlKTsKLQkJcmV0dXJuIGVycm9yKCJGaWxlICVzIGhhcyBiYWQgaGFzaCIsIHNoYTFfdG9faGV4KHNoYTEpKTsKLQl9Ci0KLQlyZXR1cm4gbW92ZV90ZW1wX3RvX2ZpbGUodG1wZmlsZSwgc2hhMV9maWxlX25hbWUoc2hhMSkpOworCXJldHVybiB3cml0ZV9sb29zZV9vYmplY3Qoc2hhMSwgaGRyLCBoZHJsZW4sIGJ1ZiwgbGVuLCBtdGltZSk7CiB9CiAKIGludCBoYXNfcGFja19pbmRleChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQpAQCAtMjMyNCwxMiArMjI2MywxMSBAQAogCiBpbnQgaGFzX3NoYTFfZmlsZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQogewotCXN0cnVjdCBzdGF0IHN0OwogCXN0cnVjdCBwYWNrX2VudHJ5IGU7CiAKIAlpZiAoZmluZF9wYWNrX2VudHJ5KHNoYTEsICZlLCBOVUxMKSkKIAkJcmV0dXJuIDE7Ci0JcmV0dXJuIGZpbmRfc2hhMV9maWxlKHNoYTEsICZzdCkgPyAxIDogMDsKKwlyZXR1cm4gaGFzX2xvb3NlX29iamVjdChzaGExKTsKIH0KIAogaW50IGluZGV4X3BpcGUodW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZkLCBjb25zdCBjaGFyICp0eXBlLCBpbnQgd3JpdGVfb2JqZWN0KQpAQCAtMjQzNywxNiArMjM3NSwxMCBAQAogCiBpbnQgcmVhZF9wYWNrX2hlYWRlcihpbnQgZmQsIHN0cnVjdCBwYWNrX2hlYWRlciAqaGVhZGVyKQogewotCWNoYXIgKmMgPSAoY2hhciopaGVhZGVyOwotCXNzaXplX3QgcmVtYWluaW5nID0gc2l6ZW9mKHN0cnVjdCBwYWNrX2hlYWRlcik7Ci0JZG8gewotCQlzc2l6ZV90IHIgPSB4cmVhZChmZCwgYywgcmVtYWluaW5nKTsKLQkJaWYgKHIgPD0gMCkKLQkJCS8qICJlb2YgYmVmb3JlIHBhY2sgaGVhZGVyIHdhcyBmdWxseSByZWFkIiAqLwotCQkJcmV0dXJuIFBIX0VSUk9SX0VPRjsKLQkJcmVtYWluaW5nIC09IHI7Ci0JCWMgKz0gcjsKLQl9IHdoaWxlIChyZW1haW5pbmcgPiAwKTsKKwlpZiAocmVhZF9pbl9mdWxsKGZkLCBoZWFkZXIsIHNpemVvZigqaGVhZGVyKSkgPCBzaXplb2YoKmhlYWRlcikpCisJCS8qICJlb2YgYmVmb3JlIHBhY2sgaGVhZGVyIHdhcyBmdWxseSByZWFkIiAqLworCQlyZXR1cm4gUEhfRVJST1JfRU9GOworCiAJaWYgKGhlYWRlci0+aGRyX3NpZ25hdHVyZSAhPSBodG9ubChQQUNLX1NJR05BVFVSRSkpCiAJCS8qICJwcm90b2NvbCBlcnJvciAocGFjayBzaWduYXR1cmUgbWlzbWF0Y2ggZGV0ZWN0ZWQpIiAqLwogCQlyZXR1cm4gUEhfRVJST1JfUEFDS19TSUdOQVRVUkU7CmRpZmYgLS1naXQgYS9zeW1saW5rcy5jIGIvc3ltbGlua3MuYwppbmRleCBiZTlhY2U2Li41YTVlNzgxIDEwMDY0NAotLS0gYS9zeW1saW5rcy5jCisrKyBiL3N5bWxpbmtzLmMKQEAgLTEsNDggKzEsNjQgQEAKICNpbmNsdWRlICJjYWNoZS5oIgogCi1pbnQgaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKmxhc3Rfc3ltbGluaykKLXsKK3N0cnVjdCBwYXRobmFtZSB7CisJaW50IGxlbjsKIAljaGFyIHBhdGhbUEFUSF9NQVhdOwotCWNvbnN0IGNoYXIgKnNwLCAqZXA7Ci0JY2hhciAqZHA7Cit9OwogCi0Jc3AgPSBuYW1lOwotCWRwID0gcGF0aDsKKy8qIFJldHVybiBtYXRjaGluZyBwYXRobmFtZSBwcmVmaXggbGVuZ3RoLCBvciB6ZXJvIGlmIG5vdCBtYXRjaGluZyAqLworc3RhdGljIGlubGluZSBpbnQgbWF0Y2hfcGF0aG5hbWUoaW50IGxlbiwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHBhdGhuYW1lICptYXRjaCkKK3sKKwlpbnQgbWF0Y2hfbGVuID0gbWF0Y2gtPmxlbjsKKwlyZXR1cm4gKGxlbiA+IG1hdGNoX2xlbiAmJgorCQluYW1lW21hdGNoX2xlbl0gPT0gJy8nICYmCisJCSFtZW1jbXAobmFtZSwgbWF0Y2gtPnBhdGgsIG1hdGNoX2xlbikpID8gbWF0Y2hfbGVuIDogMDsKK30KIAotCWlmIChsYXN0X3N5bWxpbmsgJiYgKmxhc3Rfc3ltbGluaykgewotCQlzaXplX3QgbGFzdF9sZW4gPSBzdHJsZW4obGFzdF9zeW1saW5rKTsKLQkJc2l6ZV90IGxlbiA9IHN0cmxlbihuYW1lKTsKLQkJaWYgKGxhc3RfbGVuIDwgbGVuICYmCi0JCSAgICAhc3RybmNtcChuYW1lLCBsYXN0X3N5bWxpbmssIGxhc3RfbGVuKSAmJgotCQkgICAgbmFtZVtsYXN0X2xlbl0gPT0gJy8nKQotCQkJcmV0dXJuIDE7Ci0JCSpsYXN0X3N5bWxpbmsgPSAnXDAnOworc3RhdGljIGlubGluZSB2b2lkIHNldF9wYXRobmFtZShpbnQgbGVuLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgcGF0aG5hbWUgKm1hdGNoKQoreworCWlmIChsZW4gPCBQQVRIX01BWCkgeworCQltYXRjaC0+bGVuID0gbGVuOworCQltZW1jcHkobWF0Y2gtPnBhdGgsIG5hbWUsIGxlbik7CisJCW1hdGNoLT5wYXRoW2xlbl0gPSAwOwogCX0KK30KIAotCXdoaWxlICgxKSB7Ci0JCXNpemVfdCBsZW47Ci0JCXN0cnVjdCBzdGF0IHN0OworaW50IGhhc19zeW1saW5rX2xlYWRpbmdfcGF0aChpbnQgbGVuLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0YXRpYyBzdHJ1Y3QgcGF0aG5hbWUgbGluaywgbm9ubGluazsKKwljaGFyIHBhdGhbUEFUSF9NQVhdOworCXN0cnVjdCBzdGF0IHN0OworCWNoYXIgKnNwOworCWludCBrbm93bl9kaXI7CiAKLQkJZXAgPSBzdHJjaHIoc3AsICcvJyk7Ci0JCWlmICghZXApCi0JCQlicmVhazsKLQkJbGVuID0gZXAgLSBzcDsKLQkJaWYgKFBBVEhfTUFYIDw9IGRwICsgbGVuIC0gcGF0aCArIDIpCi0JCQlyZXR1cm4gMDsgLyogbmV3IG5hbWUgaXMgbG9uZ2VyIHRoYW4gdGhhdD8/PyAqLwotCQltZW1jcHkoZHAsIHNwLCBsZW4pOwotCQlkcFtsZW5dID0gMDsKKwkvKgorCSAqIFNlZSBpZiB0aGUgbGFzdCBrbm93biBzeW1saW5rIGNhY2hlIG1hdGNoZXMuCisJICovCisJaWYgKG1hdGNoX3BhdGhuYW1lKGxlbiwgbmFtZSwgJmxpbmspKQorCQlyZXR1cm4gMTsKKworCS8qCisJICogR2V0IHJpZCBvZiB0aGUgbGFzdCBrbm93biBkaXJlY3RvcnkgcGFydAorCSAqLworCWtub3duX2RpciA9IG1hdGNoX3BhdGhuYW1lKGxlbiwgbmFtZSwgJm5vbmxpbmspOworCisJd2hpbGUgKChzcCA9IHN0cmNocihuYW1lICsga25vd25fZGlyICsgMSwgJy8nKSkgIT0gTlVMTCkgeworCQlpbnQgdGhpc2xlbiA9IHNwIC0gbmFtZSA7CisJCW1lbWNweShwYXRoLCBuYW1lLCB0aGlzbGVuKTsKKwkJcGF0aFt0aGlzbGVuXSA9IDA7CiAKIAkJaWYgKGxzdGF0KHBhdGgsICZzdCkpCiAJCQlyZXR1cm4gMDsKKwkJaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpIHsKKwkJCXNldF9wYXRobmFtZSh0aGlzbGVuLCBwYXRoLCAmbm9ubGluayk7CisJCQlrbm93bl9kaXIgPSB0aGlzbGVuOworCQkJY29udGludWU7CisJCX0KIAkJaWYgKFNfSVNMTksoc3Quc3RfbW9kZSkpIHsKLQkJCWlmIChsYXN0X3N5bWxpbmspCi0JCQkJc3RyY3B5KGxhc3Rfc3ltbGluaywgcGF0aCk7CisJCQlzZXRfcGF0aG5hbWUodGhpc2xlbiwgcGF0aCwgJmxpbmspOwogCQkJcmV0dXJuIDE7CiAJCX0KLQotCQlkcFtsZW4rK10gPSAnLyc7Ci0JCWRwID0gZHAgKyBsZW47Ci0JCXNwID0gZXAgKyAxOworCQlicmVhazsKIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS90Ly5naXRhdHRyaWJ1dGVzIGIvdC8uZ2l0YXR0cmlidXRlcwppbmRleCA1NjJiMTJlLi5hYjZlZGJmIDEwMDY0NAotLS0gYS90Ly5naXRhdHRyaWJ1dGVzCisrKyBiL3QvLmdpdGF0dHJpYnV0ZXMKQEAgLTEgKzEsMiBAQAotKiAtd2hpdGVzcGFjZQordFswLTldWzAtOV1bMC05XVswLTldLSouc2ggLXdoaXRlc3BhY2UKK3RbMC05XVswLTldWzAtOV1bMC05XS8qIC13aGl0ZXNwYWNlCmRpZmYgLS1naXQgYS90Ly5naXRpZ25vcmUgYi90Ly5naXRpZ25vcmUKaW5kZXggZmFkNjdjMC4uMTFmZmQ5MSAxMDA2NDQKLS0tIGEvdC8uZ2l0aWdub3JlCisrKyBiL3QvLmdpdGlnbm9yZQpAQCAtMSArMSBAQAotdHJhc2gKKy90cmFzaCBkaXJlY3RvcnkKZGlmZiAtLWdpdCBhL3QvTWFrZWZpbGUgYi90L01ha2VmaWxlCmluZGV4IDcyZDc4ODQuLmM2YTYwYWIgMTAwNjQ0Ci0tLSBhL3QvTWFrZWZpbGUKKysrIGIvdC9NYWtlZmlsZQpAQCAtMjAsNyArMjAsNyBAQAogCUBlY2hvICIqKiogJEAgKioqIjsgR0lUX0NPTkZJRz0uZ2l0L2NvbmZpZyAnJChTSEVMTF9QQVRIX1NRKScgJEAgJChHSVRfVEVTVF9PUFRTKQogCiBjbGVhbjoKLQkkKFJNKSAtciB0cmFzaAorCSQoUk0pIC1yICd0cmFzaCBkaXJlY3RvcnknCiAKICMgd2UgY2FuIHRlc3QgTk9fT1BUSU1JWkVfQ09NTUlUUyBpbmRlcGVuZGVudGx5IG9mIExDX0FMTAogZnVsbC1zdm4tdGVzdDoKZGlmZiAtLWdpdCBhL3QvUkVBRE1FIGIvdC9SRUFETUUKaW5kZXggNzNlZDExYi4uNzA4NDFhNCAxMDA2NDQKLS0tIGEvdC9SRUFETUUKKysrIGIvdC9SRUFETUUKQEAgLTEyMyw3ICsxMjMsNyBAQAogICAgKG9yIC1oKSwgaXQgc2hvd3MgdGhlIHRlc3RfZGVzY3JpcHRpb24gYW5kIGV4aXRzLgogCiAgLSBDcmVhdGVzIGFuIGVtcHR5IHRlc3QgZGlyZWN0b3J5IHdpdGggYW4gZW1wdHkgLmdpdC9vYmplY3RzCi0gICBkYXRhYmFzZSBhbmQgY2hkaXIoMikgaW50byBpdC4gIFRoaXMgZGlyZWN0b3J5IGlzICd0L3RyYXNoJworICAgZGF0YWJhc2UgYW5kIGNoZGlyKDIpIGludG8gaXQuICBUaGlzIGRpcmVjdG9yeSBpcyAndC90cmFzaCBkaXJlY3RvcnknCiAgICBpZiB5b3UgbXVzdCBrbm93LCBidXQgSSBkbyBub3QgdGhpbmsgeW91IGNhcmUuCiAKICAtIERlZmluZXMgc3RhbmRhcmQgdGVzdCBoZWxwZXIgZnVuY3Rpb25zIGZvciB5b3VyIHNjcmlwdHMgdG8KZGlmZiAtLWdpdCBhL3QvZGlmZi1saWIuc2ggYi90L2RpZmYtbGliLnNoCmluZGV4IDI4Yjk0MWMuLjRiZGRlYjUgMTAwNjQ0Ci0tLSBhL3QvZGlmZi1saWIuc2gKKysrIGIvdC9kaWZmLWxpYi5zaApAQCAtMTEsNyArMTEsNyBAQAogCiAgICAgc2VkIC1lICIkc2FuaXRpemVfZGlmZl9yYXciIDwiJDEiID4udG1wLTEKICAgICBzZWQgLWUgIiRzYW5pdGl6ZV9kaWZmX3JhdyIgPCIkMiIgPi50bXAtMgotICAgIGdpdCBkaWZmIC50bXAtMSAudG1wLTIgJiYgcm0gLWYgLnRtcC0xIC50bXAtMgorICAgIHRlc3RfY21wIC50bXAtMSAudG1wLTIgJiYgcm0gLWYgLnRtcC0xIC50bXAtMgogfQogCiBzYW5pdGl6ZV9kaWZmX3Jhd196PScvXjovcy8gJyIkX3g0MCInICciJF94NDAiJyBcKFtBLVpdXClbMC05XSokLyBYIFggXDEjLycKQEAgLTIzLDcgKzIzLDcgQEAKIAogICAgIHBlcmwgLXBlICd5L1wwMDAvXDAxMi8nIDwiJDEiIHwgc2VkIC1lICIkc2FuaXRpemVfZGlmZl9yYXdfeiIgPi50bXAtMQogICAgIHBlcmwgLXBlICd5L1wwMDAvXDAxMi8nIDwiJDIiIHwgc2VkIC1lICIkc2FuaXRpemVfZGlmZl9yYXdfeiIgPi50bXAtMgotICAgIGdpdCBkaWZmIC50bXAtMSAudG1wLTIgJiYgcm0gLWYgLnRtcC0xIC50bXAtMgorICAgIHRlc3RfY21wIC50bXAtMSAudG1wLTIgJiYgcm0gLWYgLnRtcC0xIC50bXAtMgogfQogCiBjb21wYXJlX2RpZmZfcGF0Y2ggKCkgewpAQCAtMzcsNSArMzcsNSBAQAogCS9eW2Rpc10qaW1pbGFyaXR5IGluZGV4IFswLTldKiUkL2QKIAkvXmluZGV4IFswLTlhLWZdKlwuXC5bMC05YS1mXS9kCiAgICAgJyA8IiQyIiA+LnRtcC0yCi0gICAgZ2l0IGRpZmYgLnRtcC0xIC50bXAtMiAmJiBybSAtZiAudG1wLTEgLnRtcC0yCisgICAgdGVzdF9jbXAgLnRtcC0xIC50bXAtMiAmJiBybSAtZiAudG1wLTEgLnRtcC0yCiB9CmRpZmYgLS1naXQgYS90L2xpYi1naXQtc3ZuLnNoIGIvdC9saWItZ2l0LXN2bi5zaAppbmRleCA5ZGVjZDJlLi41ZDNiZDlkIDEwMDY0NAotLS0gYS90L2xpYi1naXQtc3ZuLnNoCisrKyBiL3QvbGliLWdpdC1zdm4uc2gKQEAgLTIwLDEyICsyMCwxMyBAQAogZmkKIAogc3ZucmVwbz0kUFdEL3N2bnJlcG8KK2V4cG9ydCBzdm5yZXBvCiAKIHBlcmwgLXcgLWUgIgogdXNlIFNWTjo6Q29yZTsKIHVzZSBTVk46OlJlcG9zOwogXCRTVk46OkNvcmU6OlZFUlNJT04gZ3QgJzEuMS4wJyBvciBleGl0KDQyKTsKLXN5c3RlbShxdy9zdm5hZG1pbiBjcmVhdGUgLS1mcy10eXBlIGZzZnMvLCAnJHN2bnJlcG8nKSA9PSAwIG9yIGV4aXQoNDEpOworc3lzdGVtKHF3L3N2bmFkbWluIGNyZWF0ZSAtLWZzLXR5cGUgZnNmcy8sIFwkRU5We3N2bnJlcG99KSA9PSAwIG9yIGV4aXQoNDEpOwogIiA+JjMgMj4mNAogeD0kPwogaWYgdGVzdCAkeCAtbmUgMApAQCAtNzMsMTEgKzc0LDE2IEBACiBkb25lCiAKIHN0YXJ0X2h0dHBkICgpIHsKKwlyZXBvX2Jhc2VfcGF0aD0iJDEiCiAJaWYgdGVzdCAteiAiJFNWTl9IVFRQRF9QT1JUIgogCXRoZW4KIAkJZWNobyA+JjIgJ1NWTl9IVFRQRF9QT1JUIGlzIG5vdCBkZWZpbmVkIScKIAkJcmV0dXJuCiAJZmkKKwlpZiB0ZXN0IC16ICIkcmVwb19iYXNlX3BhdGgiCisJdGhlbgorCQlyZXBvX2Jhc2VfcGF0aD1zdm4KKwlmaQogCiAJbWtkaXIgIiRHSVRfRElSIi9sb2dzCiAKQEAgLTkwLDEzICs5NiwxMyBAQAogTGlzdGVuIDEyNy4wLjAuMTokU1ZOX0hUVFBEX1BPUlQKIExvYWRNb2R1bGUgZGF2X21vZHVsZSAkU1ZOX0hUVFBEX01PRFVMRV9QQVRIL21vZF9kYXYuc28KIExvYWRNb2R1bGUgZGF2X3N2bl9tb2R1bGUgJFNWTl9IVFRQRF9NT0RVTEVfUEFUSC9tb2RfZGF2X3N2bi5zbwotPExvY2F0aW9uIC9zdm4+Cis8TG9jYXRpb24gLyRyZXBvX2Jhc2VfcGF0aD4KIAlEQVYgc3ZuCiAJU1ZOUGF0aCAkcmF3c3ZucmVwbwogPC9Mb2NhdGlvbj4KIEVPRgogCSIkU1ZOX0hUVFBEX1BBVEgiIC1mICIkR0lUX0RJUiIvaHR0cGQuY29uZiAtayBzdGFydAotCXN2bnJlcG89aHR0cDovLzEyNy4wLjAuMTokU1ZOX0hUVFBEX1BPUlQvc3ZuCisJc3ZucmVwbz0iaHR0cDovLzEyNy4wLjAuMTokU1ZOX0hUVFBEX1BPUlQvJHJlcG9fYmFzZV9wYXRoIgogfQogCiBzdG9wX2h0dHBkICgpIHsKZGlmZiAtLWdpdCBhL3QvbGliLWh0dHBkLnNoIGIvdC9saWItaHR0cGQuc2gKaW5kZXggN2YyMDZjNS4uYTVjNDQzNiAxMDA2NDQKLS0tIGEvdC9saWItaHR0cGQuc2gKKysrIGIvdC9saWItaHR0cGQuc2gKQEAgLTYxLDcgKzYxLDggQEAKIAkJCS1uZXcgLXg1MDkgLW5vZGVzIFwKIAkJCS1vdXQgJEhUVFBEX1JPT1RfUEFUSC9odHRwZC5wZW0gXAogCQkJLWtleW91dCAkSFRUUERfUk9PVF9QQVRIL2h0dHBkLnBlbQotCQlleHBvcnQgR0lUX1NTTF9OT19WRVJJRlk9dAorCQlHSVRfU1NMX05PX1ZFUklGWT10CisJCWV4cG9ydCBHSVRfU1NMX05PX1ZFUklGWQogCQlIVFRQRF9QQVJBPSIkSFRUUERfUEFSQSAtRFNTTCIKIAllbHNlCiAJCUhUVFBEX1VSTD1odHRwOi8vMTI3LjAuMC4xOiRMSUJfSFRUUERfUE9SVApkaWZmIC0tZ2l0IGEvdC90MDAwMC1iYXNpYy5zaCBiL3QvdDAwMDAtYmFzaWMuc2gKaW5kZXggMjdiNTRjYi4uNjkwZjgwYSAxMDA3NTUKLS0tIGEvdC90MDAwMC1iYXNpYy5zaAorKysgYi90L3QwMDAwLWJhc2ljLnNoCkBAIC0zMDUsMTAgKzMwNSwxMCBAQAogCWZpbGU9IiRkaXIiL2luZGV4ICYmCiAJdGVzdCAiJGZpbGUiID0gIiQodGVzdC1hYnNvbHV0ZS1wYXRoICRkaXIyL2luZGV4KSIgJiYKIAliYXNlbmFtZT1ibHViICYmCi0JdGVzdCAiJGRpci8kYmFzZW5hbWUiID0gJChjZCAuZ2l0ICYmIHRlc3QtYWJzb2x1dGUtcGF0aCAkYmFzZW5hbWUpICYmCisJdGVzdCAiJGRpci8kYmFzZW5hbWUiID0gIiQoY2QgLmdpdCAmJiB0ZXN0LWFic29sdXRlLXBhdGggIiRiYXNlbmFtZSIpIiAmJgogCWxuIC1zIC4uL2ZpcnN0L2ZpbGUgLmdpdC9zeW1sICYmCiAJc3ltPSIkKGNkIGZpcnN0OyBwd2QgLVApIi9maWxlICYmCi0JdGVzdCAiJHN5bSIgPSAiJCh0ZXN0LWFic29sdXRlLXBhdGggJGRpcjIvc3ltbCkiCisJdGVzdCAiJHN5bSIgPSAiJCh0ZXN0LWFic29sdXRlLXBhdGggIiRkaXIyL3N5bWwiKSIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyeSBsb25nIG5hbWUgaW4gdGhlIGluZGV4IGhhbmRsZWQgc2FuZWx5JyAnCmRpZmYgLS1naXQgYS90L3QwMDAxLWluaXQuc2ggYi90L3QwMDAxLWluaXQuc2gKaW5kZXggYjAyODllMy4uYzBiNzgxYSAxMDA3NTUKLS0tIGEvdC90MDAwMS1pbml0LnNoCisrKyBiL3QvdDAwMDEtaW5pdC5zaApAQCAtNzksNiArNzksMTcgQEAKIAljaGVja19jb25maWcgZ2l0LWRpci1iYXJlLmdpdCB0cnVlIHVuc2V0CiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgLS1iYXJlJyAnCisKKwkoCisJCXVuc2V0IEdJVF9ESVIgR0lUX1dPUktfVFJFRSBHSVRfQ09ORklHCisJCW1rZGlyIGdpdC1pbml0LWJhcmUuZ2l0ICYmCisJCWNkIGdpdC1pbml0LWJhcmUuZ2l0ICYmCisJCWdpdCBpbml0IC0tYmFyZQorCSkgJiYKKwljaGVja19jb25maWcgZ2l0LWluaXQtYmFyZS5naXQgdHJ1ZSB1bnNldAorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfRElSIG5vbi1iYXJlJyAnCiAKIAkoCkBAIC0xMzAsNCArMTQxLDMwIEBACiAJdGVzdF9jbXAgYWdhaW4vZW1wdHkgYWdhaW4vZXJyMgogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IHdpdGggLS10ZW1wbGF0ZScgJworCW1rZGlyIHRlbXBsYXRlLXNvdXJjZSAmJgorCWVjaG8gY29udGVudCA+dGVtcGxhdGUtc291cmNlL2ZpbGUgJiYKKwkoCisJCW1rZGlyIHRlbXBsYXRlLWN1c3RvbSAmJgorCQljZCB0ZW1wbGF0ZS1jdXN0b20gJiYKKwkJZ2l0IGluaXQgLS10ZW1wbGF0ZT0uLi90ZW1wbGF0ZS1zb3VyY2UKKwkpICYmCisJdGVzdF9jbXAgdGVtcGxhdGUtc291cmNlL2ZpbGUgdGVtcGxhdGUtY3VzdG9tLy5naXQvZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IHdpdGggLS10ZW1wbGF0ZSAoYmxhbmspJyAnCisJKAorCQlta2RpciB0ZW1wbGF0ZS1wbGFpbiAmJgorCQljZCB0ZW1wbGF0ZS1wbGFpbiAmJgorCQlnaXQgaW5pdAorCSkgJiYKKwl0ZXN0IC1mIHRlbXBsYXRlLXBsYWluLy5naXQvaW5mby9leGNsdWRlICYmCisJKAorCQlta2RpciB0ZW1wbGF0ZS1ibGFuayAmJgorCQljZCB0ZW1wbGF0ZS1ibGFuayAmJgorCQlnaXQgaW5pdCAtLXRlbXBsYXRlPQorCSkgJiYKKwkhIHRlc3QgLWYgdGVtcGxhdGUtYmxhbmsvLmdpdC9pbmZvL2V4Y2x1ZGUKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDAyLWdpdGZpbGUuc2ggYi90L3QwMDAyLWdpdGZpbGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzVkYmM3MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMDItZ2l0ZmlsZS5zaApAQCAtMCwwICsxLDEwMyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249Jy5naXQgZmlsZQorCitWZXJpZnkgdGhhdCBwbHVtYmluZyBjb21tYW5kcyB3b3JrIHdoZW4gLmdpdCBpcyBhIGZpbGUKKycKKy4gLi90ZXN0LWxpYi5zaAorCitvYmpwYXRoKCkgeworICAgIGVjaG8gIiQxIiB8IHNlZCAtZSAnc3xcKC4uXCl8XDEvfCcKK30KKworb2JqY2soKSB7CisJcD0kKG9ianBhdGggIiQxIikKKwlpZiB0ZXN0ICEgLWYgIiRSRUFML29iamVjdHMvJHAiCisJdGhlbgorCQllY2hvICJPYmplY3Qgbm90IGZvdW5kOiAkUkVBTC9vYmplY3RzLyRwIgorCQlmYWxzZQorCWZpCit9CisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbCBzZXR1cCcgJworCVJFQUw9IiQocHdkKS8ucmVhbCIgJiYKKwltdiAuZ2l0ICIkUkVBTCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFkIHNldHVwOiBpbnZhbGlkIC5naXQgZmlsZSBmb3JtYXQnICcKKwllY2hvICJnaXRkaXIgJFJFQUwiID4uZ2l0ICYmCisJaWYgZ2l0IHJldi1wYXJzZSAyPi5lcnIKKwl0aGVuCisJCWVjaG8gImdpdCByZXYtcGFyc2UgYWNjZXB0ZWQgYW4gaW52YWxpZCAuZ2l0IGZpbGUiCisJCWZhbHNlCisJZmkgJiYKKwlpZiAhIGdyZXAgLXFlICJJbnZhbGlkIGdpdGZpbGUgZm9ybWF0IiAuZXJyCisJdGhlbgorCQllY2hvICJnaXQgcmV2LXBhcnNlIHJldHVybmVkIHdyb25nIGVycm9yIgorCQlmYWxzZQorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JhZCBzZXR1cDogaW52YWxpZCAuZ2l0IGZpbGUgcGF0aCcgJworCWVjaG8gImdpdGRpcjogJFJFQUwubm90IiA+LmdpdCAmJgorCWlmIGdpdCByZXYtcGFyc2UgMj4uZXJyCisJdGhlbgorCQllY2hvICJnaXQgcmV2LXBhcnNlIGFjY2VwdGVkIGFuIGludmFsaWQgLmdpdCBmaWxlIHBhdGgiCisJCWZhbHNlCisJZmkgJiYKKwlpZiAhIGdyZXAgLXFlICJOb3QgYSBnaXQgcmVwb3NpdG9yeSIgLmVycgorCXRoZW4KKwkJZWNobyAiZ2l0IHJldi1wYXJzZSByZXR1cm5lZCB3cm9uZyBlcnJvciIKKwkJZmFsc2UKKwlmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaW5hbCBzZXR1cCArIGNoZWNrIHJldi1wYXJzZSAtLWdpdC1kaXInICcKKwllY2hvICJnaXRkaXI6ICRSRUFMIiA+LmdpdCAmJgorCXRlc3QgIiRSRUFMIiA9ICIkKGdpdCByZXYtcGFyc2UgLS1naXQtZGlyKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgaGFzaC1vYmplY3QnICcKKwllY2hvICJmb28iID5iYXIgJiYKKwlTSEE9JChjYXQgYmFyIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJb2JqY2sgJFNIQQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBjYXQtZmlsZScgJworCWdpdCBjYXQtZmlsZSBibG9iICRTSEEgPmFjdHVhbCAmJgorCWRpZmYgLXUgYmFyIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB1cGRhdGUtaW5kZXgnICcKKwlpZiB0ZXN0IC1mICIkUkVBTC9pbmRleCIKKwl0aGVuCisJCWVjaG8gIkhtbSwgJFJFQUwvaW5kZXggZXhpc3RzPyIKKwkJZmFsc2UKKwlmaSAmJgorCXJtIC1mICIkUkVBTC9vYmplY3RzLyQob2JqcGF0aCAkU0hBKSIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGJhciAmJgorCWlmICEgdGVzdCAtZiAiJFJFQUwvaW5kZXgiCisJdGhlbgorCQllY2hvICIkUkVBTC9pbmRleCBub3QgZm91bmQiCisJCWZhbHNlCisJZmkgJiYKKwlvYmpjayAkU0hBCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHdyaXRlLXRyZWUnICcKKwlTSEE9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwlvYmpjayAkU0hBCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGNvbW1pdC10cmVlJyAnCisJU0hBPSQoZWNobyAiY29tbWl0IGJhciIgfCBnaXQgY29tbWl0LXRyZWUgJFNIQSkgJiYKKwlvYmpjayAkU0hBCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHJldi1saXN0JyAnCisJZWNobyAkU0hBID4iJFJFQUwvSEVBRCIgJiYKKwl0ZXN0ICIkU0hBIiA9ICIkKGdpdCByZXYtbGlzdCBIRUFEKSIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDAzLWF0dHJpYnV0ZXMuc2ggYi90L3QwMDAzLWF0dHJpYnV0ZXMuc2gKaW5kZXggYzU2ZDJmYi4uM2Q4ZTA2YSAxMDA3NTUKLS0tIGEvdC90MDAwMy1hdHRyaWJ1dGVzLnNoCisrKyBiL3QvdDAwMDMtYXR0cmlidXRlcy5zaApAQCAtNTQsNCArNTQsMzkgQEAKIAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBiYXJlJyAnCisKKwlnaXQgY2xvbmUgLS1iYXJlIC4gYmFyZS5naXQgJiYKKwljZCBiYXJlLmdpdAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JhcmUgcmVwb3NpdG9yeTogY2hlY2sgdGhhdCAuZ2l0YXR0cmlidXRlIGlzIGlnbm9yZWQnICcKKworCSgKKwkJZWNobyAiZgl0ZXN0PWYiCisJCWVjaG8gImEvaSB0ZXN0PWEvaSIKKwkpID4uZ2l0YXR0cmlidXRlcyAmJgorCWF0dHJfY2hlY2sgZiB1bnNwZWNpZmllZCAmJgorCWF0dHJfY2hlY2sgYS9mIHVuc3BlY2lmaWVkICYmCisJYXR0cl9jaGVjayBhL2MvZiB1bnNwZWNpZmllZCAmJgorCWF0dHJfY2hlY2sgYS9pIHVuc3BlY2lmaWVkICYmCisJYXR0cl9jaGVjayBzdWJkaXIvYS9pIHVuc3BlY2lmaWVkCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFyZSByZXBvc2l0b3J5OiB0ZXN0IGluZm8vYXR0cmlidXRlcycgJworCisJKAorCQllY2hvICJmCXRlc3Q9ZiIKKwkJZWNobyAiYS9pIHRlc3Q9YS9pIgorCSkgPmluZm8vYXR0cmlidXRlcyAmJgorCWF0dHJfY2hlY2sgZiBmICYmCisJYXR0cl9jaGVjayBhL2YgZiAmJgorCWF0dHJfY2hlY2sgYS9jL2YgZiAmJgorCWF0dHJfY2hlY2sgYS9pIGEvaSAmJgorCWF0dHJfY2hlY2sgc3ViZGlyL2EvaSB1bnNwZWNpZmllZAorCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAwNC11bndyaXRhYmxlLnNoIGIvdC90MDAwNC11bndyaXRhYmxlLnNoCmluZGV4IDkyNTVjNjMuLjYzZTEyMTcgMTAwNzU1Ci0tLSBhL3QvdDAwMDQtdW53cml0YWJsZS5zaAorKysgYi90L3QwMDA0LXVud3JpdGFibGUuc2gKQEAgLTgsNiArOCw3IEBACiAKIAk+ZmlsZSAmJgogCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgogCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgogCWVjaG8gPmZpbGUgJiYKIAlnaXQgYWRkIGZpbGUKQEAgLTE3LDExICsxOCwxMSBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JpdGUtdHJlZSBzaG91bGQgbm90aWNlIHVud3JpdGFibGUgcmVwb3NpdG9yeScgJwogCiAJKAotCQljaG1vZCBhLXcgLmdpdC9vYmplY3RzCisJCWNobW9kIGEtdyAuZ2l0L29iamVjdHMgLmdpdC9vYmplY3RzLz8/ICYmCiAJCXRlc3RfbXVzdF9mYWlsIGdpdCB3cml0ZS10cmVlCiAJKQogCXN0YXR1cz0kPwotCWNobW9kIDc3NSAuZ2l0L29iamVjdHMKKwljaG1vZCA3NzUgLmdpdC9vYmplY3RzIC5naXQvb2JqZWN0cy8/PwogCShleGl0ICRzdGF0dXMpCiAKICcKQEAgLTI5LDExICszMCwxMSBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IHNob3VsZCBub3RpY2UgdW53cml0YWJsZSByZXBvc2l0b3J5JyAnCiAKIAkoCi0JCWNobW9kIGEtdyAuZ2l0L29iamVjdHMKKwkJY2htb2QgYS13IC5naXQvb2JqZWN0cyAuZ2l0L29iamVjdHMvPz8gJiYKIAkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtbSBzZWNvbmQKIAkpCiAJc3RhdHVzPSQ/Ci0JY2htb2QgNzc1IC5naXQvb2JqZWN0cworCWNobW9kIDc3NSAuZ2l0L29iamVjdHMgLmdpdC9vYmplY3RzLz8/CiAJKGV4aXQgJHN0YXR1cykKIAogJwpAQCAtNDEsMTIgKzQyLDEyIEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtaW5kZXggc2hvdWxkIG5vdGljZSB1bndyaXRhYmxlIHJlcG9zaXRvcnknICcKIAogCSgKLQkJZWNobyBhID5maWxlICYmCi0JCWNobW9kIGEtdyAuZ2l0L29iamVjdHMKKwkJZWNobyA2TyA+ZmlsZSAmJgorCQljaG1vZCBhLXcgLmdpdC9vYmplY3RzIC5naXQvb2JqZWN0cy8/PyAmJgogCQl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IGZpbGUKIAkpCiAJc3RhdHVzPSQ/Ci0JY2htb2QgNzc1IC5naXQvb2JqZWN0cworCWNobW9kIDc3NSAuZ2l0L29iamVjdHMgLmdpdC9vYmplY3RzLz8/CiAJKGV4aXQgJHN0YXR1cykKIAogJwpAQCAtNTUsMTEgKzU2LDExIEBACiAKIAkoCiAJCWVjaG8gYiA+ZmlsZSAmJgotCQljaG1vZCBhLXcgLmdpdC9vYmplY3RzCisJCWNobW9kIGEtdyAuZ2l0L29iamVjdHMgLmdpdC9vYmplY3RzLz8/ICYmCiAJCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgZmlsZQogCSkKIAlzdGF0dXM9JD8KLQljaG1vZCA3NzUgLmdpdC9vYmplY3RzCisJY2htb2QgNzc1IC5naXQvb2JqZWN0cyAuZ2l0L29iamVjdHMvPz8KIAkoZXhpdCAkc3RhdHVzKQogCiAnCmRpZmYgLS1naXQgYS90L3QwMDMwLXN0cmlwc3BhY2Uuc2ggYi90L3QwMDMwLXN0cmlwc3BhY2Uuc2gKaW5kZXggM2VjZGQ2Ni4uY2NiMGEzYyAxMDA3NTUKLS0tIGEvdC90MDAzMC1zdHJpcHNwYWNlLnNoCisrKyBiL3QvdDAwMzAtc3RyaXBzcGFjZS5zaApAQCAtMTYsOTYgKzE2LDk2IEBACiAgICAgJ2xvbmcgbGluZXMgd2l0aG91dCBzcGFjZXMgc2hvdWxkIGJlIHVuY2hhbmdlZCcgJwogICAgIGVjaG8gIiR0dHQiID5leHBlY3QgJiYKICAgICBnaXQgc3RyaXBzcGFjZSA8ZXhwZWN0ID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgZWNobyAiJHR0dCR0dHQiID5leHBlY3QgJiYKICAgICBnaXQgc3RyaXBzcGFjZSA8ZXhwZWN0ID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgZWNobyAiJHR0dCR0dHQkdHR0IiA+ZXhwZWN0ICYmCiAgICAgZ2l0IHN0cmlwc3BhY2UgPGV4cGVjdCA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIGVjaG8gIiR0dHQkdHR0JHR0dCR0dHQiID5leHBlY3QgJiYKICAgICBnaXQgc3RyaXBzcGFjZSA8ZXhwZWN0ID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnbGluZXMgd2l0aCBzcGFjZXMgYXQgdGhlIGJlZ2lubmluZyBzaG91bGQgYmUgdW5jaGFuZ2VkJyAnCiAgICAgZWNobyAiJHNzcyR0dHQiID5leHBlY3QgJiYKICAgICBnaXQgc3RyaXBzcGFjZSA8ZXhwZWN0ID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgZWNobyAiJHNzcyRzc3MkdHR0IiA+ZXhwZWN0ICYmCiAgICAgZ2l0IHN0cmlwc3BhY2UgPGV4cGVjdCA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIGVjaG8gIiRzc3Mkc3NzJHNzcyR0dHQiID5leHBlY3QgJiYKICAgICBnaXQgc3RyaXBzcGFjZSA8ZXhwZWN0ID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnbGluZXMgd2l0aCBpbnRlcm1lZGlhdGUgc3BhY2VzIHNob3VsZCBiZSB1bmNoYW5nZWQnICcKICAgICBlY2hvICIkdHR0JHNzcyR0dHQiID5leHBlY3QgJiYKICAgICBnaXQgc3RyaXBzcGFjZSA8ZXhwZWN0ID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgZWNobyAiJHR0dCRzc3Mkc3NzJHR0dCIgPmV4cGVjdCAmJgogICAgIGdpdCBzdHJpcHNwYWNlIDxleHBlY3QgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdjb25zZWN1dGl2ZSBibGFuayBsaW5lcyBzaG91bGQgYmUgdW5pZmllZCcgJwogICAgIHByaW50ZiAiJHR0dFxuXG4kdHR0XG4iID4gZXhwZWN0ICYmCiAgICAgcHJpbnRmICIkdHR0XG5cblxuXG5cbiR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIHByaW50ZiAiJHR0dCR0dHRcblxuJHR0dFxuIiA+IGV4cGVjdCAmJgogICAgIHByaW50ZiAiJHR0dCR0dHRcblxuXG5cblxuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgcHJpbnRmICIkdHR0JHR0dCR0dHRcblxuJHR0dFxuIiA+IGV4cGVjdCAmJgogICAgIHByaW50ZiAiJHR0dCR0dHQkdHR0XG5cblxuXG5cbiR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIHByaW50ZiAiJHR0dFxuXG4kdHR0XG4iID4gZXhwZWN0ICYmCiAgICAgcHJpbnRmICIkdHR0XG5cblxuXG5cbiR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIHByaW50ZiAiJHR0dFxuXG4kdHR0JHR0dFxuIiA+IGV4cGVjdCAmJgogICAgIHByaW50ZiAiJHR0dFxuXG5cblxuXG4kdHR0JHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgcHJpbnRmICIkdHR0XG5cbiR0dHQkdHR0JHR0dFxuIiA+IGV4cGVjdCAmJgogICAgIHByaW50ZiAiJHR0dFxuXG5cblxuXG4kdHR0JHR0dCR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIHByaW50ZiAiJHR0dFxuXG4kdHR0XG4iID4gZXhwZWN0ICYmCiAgICAgcHJpbnRmICIkdHR0XG5cdFxuIFxuXG4gIFx0XHRcbiR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIHByaW50ZiAiJHR0dCR0dHRcblxuJHR0dFxuIiA+IGV4cGVjdCAmJgogICAgIHByaW50ZiAiJHR0dCR0dHRcblx0XG4gXG5cbiAgXHRcdFxuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgcHJpbnRmICIkdHR0JHR0dCR0dHRcblxuJHR0dFxuIiA+IGV4cGVjdCAmJgogICAgIHByaW50ZiAiJHR0dCR0dHQkdHR0XG5cdFxuIFxuXG4gIFx0XHRcbiR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIHByaW50ZiAiJHR0dFxuXG4kdHR0XG4iID4gZXhwZWN0ICYmCiAgICAgcHJpbnRmICIkdHR0XG5cdFxuIFxuXG4gIFx0XHRcbiR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIHByaW50ZiAiJHR0dFxuXG4kdHR0JHR0dFxuIiA+IGV4cGVjdCAmJgogICAgIHByaW50ZiAiJHR0dFxuXHRcbiBcblxuICBcdFx0XG4kdHR0JHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgcHJpbnRmICIkdHR0XG5cbiR0dHQkdHR0JHR0dFxuIiA+IGV4cGVjdCAmJgogICAgIHByaW50ZiAiJHR0dFxuXHRcbiBcblxuICBcdFx0XG4kdHR0JHR0dCR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCkBAIC0xMTMsMTE0ICsxMTMsMTE0IEBACiAgICAgPiBleHBlY3QgJiYKIAogICAgIHByaW50ZiAiXG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBwcmludGYgIlxuXG5cbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIHByaW50ZiAiJHNzc1xuJHNzc1xuJHNzc1xuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgcHJpbnRmICIkc3NzJHNzc1xuJHNzc1xuXG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBwcmludGYgIlxuJHNzc1xuJHNzcyRzc3NcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIHByaW50ZiAiJHNzcyRzc3Mkc3NzJHNzc1xuXG5cbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIHByaW50ZiAiXG4kc3NzJHNzcyRzc3Mkc3NzXG5cbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIHByaW50ZiAiXG5cbiRzc3Mkc3NzJHNzcyRzc3NcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2NvbnNlY3V0aXZlIGJsYW5rIGxpbmVzIGF0IHRoZSBiZWdpbm5pbmcgc2hvdWxkIGJlIHJlbW92ZWQnICcKICAgICBwcmludGYgIiR0dHRcbiIgPiBleHBlY3QgJiYKICAgICBwcmludGYgIlxuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgcHJpbnRmICIkdHR0XG4iID4gZXhwZWN0ICYmCiAgICAgcHJpbnRmICJcblxuXG4kdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBwcmludGYgIiR0dHQkdHR0XG4iID4gZXhwZWN0ICYmCiAgICAgcHJpbnRmICJcblxuXG4kdHR0JHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgcHJpbnRmICIkdHR0JHR0dCR0dHRcbiIgPiBleHBlY3QgJiYKICAgICBwcmludGYgIlxuXG5cbiR0dHQkdHR0JHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgcHJpbnRmICIkdHR0JHR0dCR0dHQkdHR0XG4iID4gZXhwZWN0ICYmCiAgICAgcHJpbnRmICJcblxuXG4kdHR0JHR0dCR0dHQkdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBwcmludGYgIiR0dHRcbiIgPiBleHBlY3QgJiYKIAogICAgIHByaW50ZiAiJHNzc1xuJHNzc1xuJHNzc1xuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgcHJpbnRmICJcbiRzc3NcbiRzc3Mkc3NzXG4kdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBwcmludGYgIiRzc3Mkc3NzXG4kc3NzXG5cbiR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIHByaW50ZiAiJHNzcyRzc3Mkc3NzXG5cblxuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgcHJpbnRmICJcbiRzc3Mkc3NzJHNzc1xuXG4kdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBwcmludGYgIlxuXG4kc3NzJHNzcyRzc3NcbiR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2NvbnNlY3V0aXZlIGJsYW5rIGxpbmVzIGF0IHRoZSBlbmQgc2hvdWxkIGJlIHJlbW92ZWQnICcKICAgICBwcmludGYgIiR0dHRcbiIgPiBleHBlY3QgJiYKICAgICBwcmludGYgIiR0dHRcblxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgcHJpbnRmICIkdHR0XG4iID4gZXhwZWN0ICYmCiAgICAgcHJpbnRmICIkdHR0XG5cblxuXG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBwcmludGYgIiR0dHQkdHR0XG4iID4gZXhwZWN0ICYmCiAgICAgcHJpbnRmICIkdHR0JHR0dFxuXG5cblxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgcHJpbnRmICIkdHR0JHR0dCR0dHRcbiIgPiBleHBlY3QgJiYKICAgICBwcmludGYgIiR0dHQkdHR0JHR0dFxuXG5cblxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgcHJpbnRmICIkdHR0JHR0dCR0dHQkdHR0XG4iID4gZXhwZWN0ICYmCiAgICAgcHJpbnRmICIkdHR0JHR0dCR0dHQkdHR0XG5cblxuXG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBwcmludGYgIiR0dHRcbiIgPiBleHBlY3QgJiYKIAogICAgIHByaW50ZiAiJHR0dFxuJHNzc1xuJHNzc1xuJHNzc1xuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgcHJpbnRmICIkdHR0XG5cbiRzc3NcbiRzc3Mkc3NzXG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBwcmludGYgIiR0dHRcbiRzc3Mkc3NzXG4kc3NzXG5cbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIHByaW50ZiAiJHR0dFxuJHNzcyRzc3Mkc3NzXG5cblxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgcHJpbnRmICIkdHR0XG5cbiRzc3Mkc3NzJHNzc1xuXG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBwcmludGYgIiR0dHRcblxuXG4kc3NzJHNzcyRzc3NcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCkBAIC0yNTcsMjcgKzI1NywyNyBAQAogICAgICd0ZXh0IHBsdXMgc3BhY2VzIHdpdGhvdXQgbmV3bGluZSBzaG91bGQgc2hvdyB0aGUgY29ycmVjdCBsaW5lcycgJwogICAgIHByaW50ZiAiJHR0dFxuIiA+ZXhwZWN0ICYmCiAgICAgcHJpbnRmICIkdHR0JHNzcyIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIHByaW50ZiAiJHR0dFxuIiA+ZXhwZWN0ICYmCiAgICAgcHJpbnRmICIkdHR0JHNzcyRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBwcmludGYgIiR0dHRcbiIgPmV4cGVjdCAmJgogICAgIHByaW50ZiAiJHR0dCRzc3Mkc3NzJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIHByaW50ZiAiJHR0dCR0dHRcbiIgPmV4cGVjdCAmJgogICAgIHByaW50ZiAiJHR0dCR0dHQkc3NzIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgcHJpbnRmICIkdHR0JHR0dFxuIiA+ZXhwZWN0ICYmCiAgICAgcHJpbnRmICIkdHR0JHR0dCRzc3Mkc3NzIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgcHJpbnRmICIkdHR0JHR0dCR0dHRcbiIgPmV4cGVjdCAmJgogICAgIHByaW50ZiAiJHR0dCR0dHQkdHR0JHNzcyIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCkBAIC0yOTQsMjcgKzI5NCwyNyBAQAogICAgICd0ZXh0IHBsdXMgc3BhY2VzIGF0IGVuZCBzaG91bGQgYmUgY2xlYW5lZCBhbmQgbmV3bGluZSBtdXN0IHJlbWFpbicgJwogICAgIGVjaG8gIiR0dHQiID5leHBlY3QgJiYKICAgICBlY2hvICIkdHR0JHNzcyIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIGVjaG8gIiR0dHQiID5leHBlY3QgJiYKICAgICBlY2hvICIkdHR0JHNzcyRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBlY2hvICIkdHR0IiA+ZXhwZWN0ICYmCiAgICAgZWNobyAiJHR0dCRzc3Mkc3NzJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIGVjaG8gIiR0dHQkdHR0IiA+ZXhwZWN0ICYmCiAgICAgZWNobyAiJHR0dCR0dHQkc3NzIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgZWNobyAiJHR0dCR0dHQiID5leHBlY3QgJiYKICAgICBlY2hvICIkdHR0JHR0dCRzc3Mkc3NzIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgZWNobyAiJHR0dCR0dHQkdHR0IiA+ZXhwZWN0ICYmCiAgICAgZWNobyAiJHR0dCR0dHQkdHR0JHNzcyIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogIyBzcGFjZXMgb25seToKQEAgLTMyNCwxOSArMzI0LDE5IEBACiAgICAgcHJpbnRmICIiID5leHBlY3QgJiYKIAogICAgIGVjaG8gfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIGVjaG8gIiRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBlY2hvICIkc3NzJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIGVjaG8gIiRzc3Mkc3NzJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIGVjaG8gIiRzc3Mkc3NzJHNzcyRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXApAQCAtMzUzLDQzICszNTMsNDMgQEAKICAgICBwcmludGYgIiIgPmV4cGVjdCAmJgogCiAgICAgcHJpbnRmICIiIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBwcmludGYgIiRzc3Mkc3NzIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgcHJpbnRmICIkc3NzJHNzcyRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBwcmludGYgIiRzc3Mkc3NzJHNzcyRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdjb25zZWN1dGl2ZSB0ZXh0IGxpbmVzIHNob3VsZCBiZSB1bmNoYW5nZWQnICcKICAgICBwcmludGYgIiR0dHQkdHR0XG4kdHR0XG4iID5leHBlY3QgJiYKICAgICBwcmludGYgIiR0dHQkdHR0XG4kdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBwcmludGYgIiR0dHRcbiR0dHQkdHR0XG4kdHR0XG4iID5leHBlY3QgJiYKICAgICBwcmludGYgIiR0dHRcbiR0dHQkdHR0XG4kdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBwcmludGYgIiR0dHRcbiR0dHRcbiR0dHRcbiR0dHQkdHR0XG4iID5leHBlY3QgJiYKICAgICBwcmludGYgIiR0dHRcbiR0dHRcbiR0dHRcbiR0dHQkdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBwcmludGYgIiR0dHRcbiR0dHRcblxuJHR0dCR0dHRcbiR0dHRcbiIgPmV4cGVjdCAmJgogICAgIHByaW50ZiAiJHR0dFxuJHR0dFxuXG4kdHR0JHR0dFxuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgcHJpbnRmICIkdHR0JHR0dFxuXG4kdHR0XG4kdHR0JHR0dFxuIiA+ZXhwZWN0ICYmCiAgICAgcHJpbnRmICIkdHR0JHR0dFxuXG4kdHR0XG4kdHR0JHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgcHJpbnRmICIkdHR0XG4kdHR0JHR0dFxuXG4kdHR0XG4iID5leHBlY3QgJiYKICAgICBwcmludGYgIiR0dHRcbiR0dHQkdHR0XG5cbiR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RyaXAgY29tbWVudHMsIHRvbycgJwpkaWZmIC0tZ2l0IGEvdC90MDA0MC1wYXJzZS1vcHRpb25zLnNoIGIvdC90MDA0MC1wYXJzZS1vcHRpb25zLnNoCmluZGV4IGMyM2YwYWMuLjYzMDlhZWQgMTAwNzU1Ci0tLSBhL3QvdDAwNDAtcGFyc2Utb3B0aW9ucy5zaAorKysgYi90L3QwMDQwLXBhcnNlLW9wdGlvbnMuc2gKQEAgLTExLDU1ICsxMSw4MSBAQAogdXNhZ2U6IHRlc3QtcGFyc2Utb3B0aW9ucyA8b3B0aW9ucz4KIAogICAgIC1iLCAtLWJvb2xlYW4gICAgICAgICBnZXQgYSBib29sZWFuCisgICAgLTQsIC0tb3I0ICAgICAgICAgICAgIGJpdHdpc2Utb3IgYm9vbGVhbiB3aXRoIC4uLjAxMDAKKwogICAgIC1pLCAtLWludGVnZXIgPG4+ICAgICBnZXQgYSBpbnRlZ2VyCiAgICAgLWogPG4+ICAgICAgICAgICAgICAgIGdldCBhIGludGVnZXIsIHRvbworICAgIC0tc2V0MjMgICAgICAgICAgICAgICBzZXQgaW50ZWdlciB0byAyMworICAgIC10IDx0aW1lPiAgICAgICAgICAgICBnZXQgdGltZXN0YW1wIG9mIDx0aW1lPgorICAgIC1MLCAtLWxlbmd0aCA8c3RyPiAgICBnZXQgbGVuZ3RoIG9mIDxzdHI+CiAKLXN0cmluZyBvcHRpb25zCitTdHJpbmcgb3B0aW9ucwogICAgIC1zLCAtLXN0cmluZyA8c3RyaW5nPgogICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQgYSBzdHJpbmcKICAgICAtLXN0cmluZzIgPHN0cj4gICAgICAgZ2V0IGFub3RoZXIgc3RyaW5nCiAgICAgLS1zdCA8c3Q+ICAgICAgICAgICAgIGdldCBhbm90aGVyIHN0cmluZyAocGVydmVydCBvcmRlcmluZykKICAgICAtbyA8c3RyPiAgICAgICAgICAgICAgZ2V0IGFub3RoZXIgc3RyaW5nCisgICAgLS1kZWZhdWx0LXN0cmluZyAgICAgIHNldCBzdHJpbmcgdG8gZGVmYXVsdAogCi1tYWdpYyBhcmd1bWVudHMKK01hZ2ljIGFyZ3VtZW50cwogICAgIC0tcXV1eCAgICAgICAgICAgICAgICBtZWFucyAtLXF1dXgKIAorU3RhbmRhcmQgb3B0aW9ucworICAgIC0tYWJicmV2Wz08bj5dICAgICAgICB1c2UgPG4+IGRpZ2l0cyB0byBkaXNwbGF5IFNIQS0xcworICAgIC12LCAtLXZlcmJvc2UgICAgICAgICBiZSB2ZXJib3NlCisgICAgLW4sIC0tZHJ5LXJ1biAgICAgICAgIGRyeSBydW4KKyAgICAtcSwgLS1xdWlldCAgICAgICAgICAgYmUgcXVpZXQKKwogRU9GCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgaGVscCcgJwotCSEgdGVzdC1wYXJzZS1vcHRpb25zIC1oID4gb3V0cHV0IDI+IG91dHB1dC5lcnIgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXBhcnNlLW9wdGlvbnMgLWggPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgogCXRlc3QgISAtcyBvdXRwdXQgJiYKLQlnaXQgZGlmZiBleHBlY3QuZXJyIG91dHB1dC5lcnIKKwl0ZXN0X2NtcCBleHBlY3QuZXJyIG91dHB1dC5lcnIKICcKIAogY2F0ID4gZXhwZWN0IDw8IEVPRgogYm9vbGVhbjogMgogaW50ZWdlcjogMTcyOQogc3RyaW5nOiAxMjMKK2FiYnJldjogNwordmVyYm9zZTogMgorcXVpZXQ6IG5vCitkcnkgcnVuOiB5ZXMKIEVPRgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG9ydCBvcHRpb25zJyAnCi0JdGVzdC1wYXJzZS1vcHRpb25zIC1zMTIzIC1iIC1pIDE3MjkgLWIgPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgotCWdpdCBkaWZmIGV4cGVjdCBvdXRwdXQgJiYKKwl0ZXN0LXBhcnNlLW9wdGlvbnMgLXMxMjMgLWIgLWkgMTcyOSAtYiAtdnYgLW4gPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQgJiYKIAl0ZXN0ICEgLXMgb3V0cHV0LmVycgogJworCiBjYXQgPiBleHBlY3QgPDwgRU9GCiBib29sZWFuOiAyCiBpbnRlZ2VyOiAxNzI5CiBzdHJpbmc6IDMyMQorYWJicmV2OiAxMAordmVyYm9zZTogMgorcXVpZXQ6IG5vCitkcnkgcnVuOiBubwogRU9GCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvbmcgb3B0aW9ucycgJwogCXRlc3QtcGFyc2Utb3B0aW9ucyAtLWJvb2xlYW4gLS1pbnRlZ2VyIDE3MjkgLS1ib29sZWFuIC0tc3RyaW5nMj0zMjEgXAorCQktLXZlcmJvc2UgLS12ZXJib3NlIC0tbm8tZHJ5LXJ1biAtLWFiYnJldj0xMCBcCiAJCT4gb3V0cHV0IDI+IG91dHB1dC5lcnIgJiYKIAl0ZXN0ICEgLXMgb3V0cHV0LmVyciAmJgotCWdpdCBkaWZmIGV4cGVjdCBvdXRwdXQKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CiAnCiAKIGNhdCA+IGV4cGVjdCA8PCBFT0YKIGJvb2xlYW46IDEKIGludGVnZXI6IDEzCiBzdHJpbmc6IDEyMworYWJicmV2OiA3Cit2ZXJib3NlOiAwCitxdWlldDogbm8KK2RyeSBydW46IG5vCiBhcmcgMDA6IGExCiBhcmcgMDE6IGIxCiBhcmcgMDI6IC0tYm9vbGVhbgpAQCAtNjksMjUgKzk1LDI5IEBACiAJdGVzdC1wYXJzZS1vcHRpb25zIGExIC0tc3RyaW5nIDEyMyBiMSAtLWJvb2xlYW4gLWogMTMgLS0gLS1ib29sZWFuIFwKIAkJPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgogCXRlc3QgISAtcyBvdXRwdXQuZXJyICYmCi0JZ2l0IGRpZmYgZXhwZWN0IG91dHB1dAorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKICcKIAogY2F0ID4gZXhwZWN0IDw8IEVPRgogYm9vbGVhbjogMAogaW50ZWdlcjogMgogc3RyaW5nOiAobm90IHNldCkKK2FiYnJldjogNwordmVyYm9zZTogMAorcXVpZXQ6IG5vCitkcnkgcnVuOiBubwogRU9GCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VuYW1iaWd1b3VzbHkgYWJicmV2aWF0ZWQgb3B0aW9uJyAnCiAJdGVzdC1wYXJzZS1vcHRpb25zIC0taW50IDIgLS1ib29sZWFuIC0tbm8tYm8gPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgogCXRlc3QgISAtcyBvdXRwdXQuZXJyICYmCi0JZ2l0IGRpZmYgZXhwZWN0IG91dHB1dAorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAndW5hbWJpZ3VvdXNseSBhYmJyZXZpYXRlZCBvcHRpb24gd2l0aCAiPSInICcKIAl0ZXN0LXBhcnNlLW9wdGlvbnMgLS1pbnQ9MiA+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCiAJdGVzdCAhIC1zIG91dHB1dC5lcnIgJiYKLQlnaXQgZGlmZiBleHBlY3Qgb3V0cHV0CisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbWJpZ3VvdXNseSBhYmJyZXZpYXRlZCBvcHRpb24nICcKQEAgLTk5LDM1ICsxMjksMTA3IEBACiBib29sZWFuOiAwCiBpbnRlZ2VyOiAwCiBzdHJpbmc6IDEyMworYWJicmV2OiA3Cit2ZXJib3NlOiAwCitxdWlldDogbm8KK2RyeSBydW46IG5vCiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uIGFtYmlndW91cyBvcHRpb24gKGFmdGVyIHR3byBvcHRpb25zIGl0IGFiYnJldmlhdGVzKScgJwogCXRlc3QtcGFyc2Utb3B0aW9ucyAtLXN0IDEyMyA+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCiAJdGVzdCAhIC1zIG91dHB1dC5lcnIgJiYKLQlnaXQgZGlmZiBleHBlY3Qgb3V0cHV0CisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAogJwogCi1jYXQgPiBleHBlY3QuZXJyIDw8IEVPRgorY2F0ID4gdHlwby5lcnIgPDwgRU9GCiBlcnJvcjogZGlkIHlvdSBtZWFuIFxgLS1ib29sZWFuXGAgKHdpdGggdHdvIGRhc2hlcyA/KQogRU9GCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdCBwb3NzaWJsZSB0eXBvcycgJwotCSEgdGVzdC1wYXJzZS1vcHRpb25zIC1ib29sZWFuID4gb3V0cHV0IDI+IG91dHB1dC5lcnIgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXBhcnNlLW9wdGlvbnMgLWJvb2xlYW4gPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgogCXRlc3QgISAtcyBvdXRwdXQgJiYKLQlnaXQgZGlmZiBleHBlY3QuZXJyIG91dHB1dC5lcnIKKwl0ZXN0X2NtcCB0eXBvLmVyciBvdXRwdXQuZXJyCiAnCiAKIGNhdCA+IGV4cGVjdCA8PEVPRgogYm9vbGVhbjogMAogaW50ZWdlcjogMAogc3RyaW5nOiAobm90IHNldCkKK2FiYnJldjogNwordmVyYm9zZTogMAorcXVpZXQ6IG5vCitkcnkgcnVuOiBubwogYXJnIDAwOiAtLXF1dXgKIEVPRgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdrZWVwIHNvbWUgb3B0aW9ucyBhcyBhcmd1bWVudHMnICcKIAl0ZXN0LXBhcnNlLW9wdGlvbnMgLS1xdXV4ID4gb3V0cHV0IDI+IG91dHB1dC5lcnIgJiYKICAgICAgICAgdGVzdCAhIC1zIG91dHB1dC5lcnIgJiYKLSAgICAgICAgZ2l0IGRpZmYgZXhwZWN0IG91dHB1dAorICAgICAgICB0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CiAnCiAKK2NhdCA+IGV4cGVjdCA8PEVPRgorYm9vbGVhbjogMAoraW50ZWdlcjogMQorc3RyaW5nOiBkZWZhdWx0CithYmJyZXY6IDcKK3ZlcmJvc2U6IDAKK3F1aWV0OiB5ZXMKK2RyeSBydW46IG5vCithcmcgMDA6IGZvbworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9EQVRFKCkgYW5kIE9QVF9TRVRfUFRSKCkgd29yaycgJworCXRlc3QtcGFyc2Utb3B0aW9ucyAtdCAiMTk3MC0wMS0wMSAwMDowMDowMSArMDAwMCIgLS1kZWZhdWx0LXN0cmluZyBcCisJCWZvbyAtcSA+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCisJdGVzdCAhIC1zIG91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+IGV4cGVjdCA8PEVPRgorQ2FsbGJhY2s6ICJmb3VyIiwgMAorYm9vbGVhbjogNQoraW50ZWdlcjogNAorc3RyaW5nOiAobm90IHNldCkKK2FiYnJldjogNwordmVyYm9zZTogMAorcXVpZXQ6IG5vCitkcnkgcnVuOiBubworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9DQUxMQkFDSygpIGFuZCBPUFRfQklUKCkgd29yaycgJworCXRlc3QtcGFyc2Utb3B0aW9ucyAtLWxlbmd0aD1mb3VyIC1iIC00ID4gb3V0cHV0IDI+IG91dHB1dC5lcnIgJiYKKwl0ZXN0ICEgLXMgb3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKworY2F0ID4gZXhwZWN0IDw8RU9GCitDYWxsYmFjazogIm5vdCBzZXQiLCAxCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0NBTExCQUNLKCkgYW5kIGNhbGxiYWNrIGVycm9ycyB3b3JrJyAnCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1wYXJzZS1vcHRpb25zIC0tbm8tbGVuZ3RoID4gb3V0cHV0IDI+IG91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0LmVyciBvdXRwdXQuZXJyCisnCisKK2NhdCA+IGV4cGVjdCA8PEVPRgorYm9vbGVhbjogMQoraW50ZWdlcjogMjMKK3N0cmluZzogKG5vdCBzZXQpCithYmJyZXY6IDcKK3ZlcmJvc2U6IDAKK3F1aWV0OiBubworZHJ5IHJ1bjogbm8KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfQklUKCkgYW5kIE9QVF9TRVRfSU5UKCkgd29yaycgJworCXRlc3QtcGFyc2Utb3B0aW9ucyAtLXNldDIzIC1iYmJiYiAtLW5vLW9yNCA+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCisJdGVzdCAhIC1zIG91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKKyMgLS1vcjQKKyMgLS1uby1vcjQKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDUwLWZpbGVzeXN0ZW0uc2ggYi90L3QwMDUwLWZpbGVzeXN0ZW0uc2gKaW5kZXggM2ZiYWQ3Ny4uYzUzNjBlMiAxMDA3NTUKLS0tIGEvdC90MDA1MC1maWxlc3lzdGVtLnNoCisrKyBiL3QvdDAwNTAtZmlsZXN5c3RlbS5zaApAQCAtNyw2ICs3LDcgQEAKIGF1bWw9YHByaW50ZiAnXHhjM1x4YTQnYAogYXVtbGNkaWFyPWBwcmludGYgJ1x4NjFceGNjXHg4OCdgCiAKK2Nhc2VfaW5zZW5zaXRpdmU9CiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZWUgaWYgd2UgZXhwZWN0ICcgJwogCiAJdGVzdF9jYXNlPXRlc3RfZXhwZWN0X3N1Y2Nlc3MKQEAgLTE3LDYgKzE4LDcgQEAKIAlpZiB0ZXN0ICIkKGNhdCBqdW5rL0NhbWVsQ2FzZSkiICE9IGdvb2QKIAl0aGVuCiAJCXRlc3RfY2FzZT10ZXN0X2V4cGVjdF9mYWlsdXJlCisJCWNhc2VfaW5zZW5zaXRpdmU9dAogCQlzYXkgIndpbGwgdGVzdCBvbiBhIGNhc2UgaW5zZW5zaXRpdmUgZmlsZXN5c3RlbSIKIAlmaSAmJgogCXJtIC1mciBqdW5rICYmCkBAIC0zMiw4ICszNCwyMyBAQAogCXJtIC1mciBqdW5rCiAnCiAKK2lmIHRlc3QgIiRjYXNlX2luc2Vuc2l0aXZlIgordGhlbgordGVzdF9leHBlY3Rfc3VjY2VzcyAiZGV0ZWN0aW9uIG9mIGNhc2UgaW5zZW5zaXRpdmUgZmlsZXN5c3RlbSBkdXJpbmcgcmVwbyBpbml0IiAnCisKKwl0ZXN0ICQoZ2l0IGNvbmZpZyAtLWJvb2wgY29yZS5pZ25vcmVjYXNlKSA9IHRydWUKKycKK2Vsc2UKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImRldGVjdGlvbiBvZiBjYXNlIGluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0gZHVyaW5nIHJlcG8gaW5pdCIgJworCisJISBnaXQgY29uZmlnIC0tYm9vbCBjb3JlLmlnbm9yZWNhc2UgPi9kZXYvbnVsbCB8fAorCXRlc3QgJChnaXQgY29uZmlnIC0tYm9vbCBjb3JlLmlnbm9yZWNhc2UpID0gZmFsc2UKKycKK2ZpCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgInNldHVwIGNhc2UgdGVzdHMiICcKIAorCWdpdCBjb25maWcgY29yZS5pZ25vcmVjYXNlIHRydWUgJiYKIAl0b3VjaCBjYW1lbGNhc2UgJiYKIAlnaXQgYWRkIGNhbWVsY2FzZSAmJgogCWdpdCBjb21taXQgLW0gImluaXRpYWwiICYmCkBAIC01NSwxMSArNzIsMjMgQEAKIAogJHRlc3RfY2FzZSAnbWVyZ2UgKGNhc2UgY2hhbmdlKScgJwogCisJcm0gLWYgQ2FtZWxDYXNlICYmCisJcm0gLWYgY2FtZWxjYXNlICYmCiAJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCiAJZ2l0IG1lcmdlIHRvcGljCiAKICcKIAorJHRlc3RfY2FzZSAnYWRkICh3aXRoIGRpZmZlcmVudCBjYXNlKScgJworCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJcm0gY2FtZWxjYXNlICYmCisJZWNobyAxID5DYW1lbENhc2UgJiYKKwlnaXQgYWRkIENhbWVsQ2FzZSAmJgorCXRlc3QgJChnaXQtbHMtZmlsZXMgfCBncmVwIC1pIGNhbWVsY2FzZSB8IHdjIC1sKSA9IDEKKworJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICJzZXR1cCB1bmljb2RlIG5vcm1hbGl6YXRpb24gdGVzdHMiICcKIAogICB0ZXN0X2NyZWF0ZV9yZXBvIHVuaWNvZGUgJiYKZGlmZiAtLWdpdCBhL3QvdDEwMDAtcmVhZC10cmVlLW0tM3dheS5zaCBiL3QvdDEwMDAtcmVhZC10cmVlLW0tM3dheS5zaAppbmRleCAxN2Y1MTlmLi44MDdmYjgzIDEwMDc1NQotLS0gYS90L3QxMDAwLXJlYWQtdHJlZS1tLTN3YXkuc2gKKysrIGIvdC90MTAwMC1yZWFkLXRyZWUtbS0zd2F5LnNoCkBAIC0xMzEsNyArMTMxLDcgQEAKIAogY2hlY2tfcmVzdWx0ICgpIHsKICAgICBnaXQgbHMtZmlsZXMgLS1zdGFnZSB8IHNlZCAtZSAncy8gJyIkX3g0MCInIC8gWCAvJyA+Y3VycmVudCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdGVkIGN1cnJlbnQKKyAgICB0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CiB9CiAKICMgVGhpcyBpcyBkb25lIG9uIGFuIGVtcHR5IHdvcmsgZGlyZWN0b3J5LCB3aGljaCBpcyB0aGUgbm9ybWFsCmRpZmYgLS1naXQgYS90L3QxMDAxLXJlYWQtdHJlZS1tLTJ3YXkuc2ggYi90L3QxMDAxLXJlYWQtdHJlZS1tLTJ3YXkuc2gKaW5kZXggYjAxYjAwMy4uNGI0NGUxMyAxMDA3NTUKLS0tIGEvdC90MTAwMS1yZWFkLXRyZWUtbS0yd2F5LnNoCisrKyBiL3QvdDEwMDEtcmVhZC10cmVlLW0tMndheS5zaApAQCAtMzMsNyArMzMsNyBAQAogCSAgICAtZSAnL14tLS0gL2Q7IC9eKysrIC9kOyAvXkBAIC9kOycgXAogCSAgICAtZSAncy9eXChbLStdWzAtN11bMC03XVswLTddWzAtN11bMC03XVswLTddXCkgJyIkX3g0MCInIC9cMSBYIC9wJyBcCiAJICAgICIkMSIKLQlnaXQgZGlmZiBleHBlY3RlZCBjdXJyZW50CisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAogfQogCiBjaGVja19jYWNoZV9hdCAoKSB7CkBAIC04Niw3ICs4Niw3IEBACiAgICAgJ3JtIC1mIC5naXQvaW5kZXggJiYKICAgICAgcmVhZF90cmVlX3R3b3dheSAkdHJlZUggJHRyZWVNICYmCiAgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID4xLTMub3V0ICYmCi0gICAgIGdpdCBkaWZmIE0ub3V0IDEtMy5vdXQgJiYKKyAgICAgdGVzdF9jbXAgTS5vdXQgMS0zLm91dCAmJgogICAgICBjaGVja19jYWNoZV9hdCBib3piYXIgZGlydHkgJiYKICAgICAgY2hlY2tfY2FjaGVfYXQgZnJvdHogZGlydHkgJiYKICAgICAgY2hlY2tfY2FjaGVfYXQgbml0Zm9sIGRpcnR5JwpAQCAtMTAxLDcgKzEwMSw3IEBACiAgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgeW9taW4gJiYKICAgICAgcmVhZF90cmVlX3R3b3dheSAkdHJlZUggJHRyZWVNICYmCiAgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID40Lm91dCB8fCByZXR1cm4gMQotICAgICBnaXQgZGlmZiBNLm91dCA0Lm91dCA+NGRpZmYub3V0CisgICAgIGdpdCBkaWZmIC0tbm8taW5kZXggTS5vdXQgNC5vdXQgPjRkaWZmLm91dAogICAgICBjb21wYXJlX2NoYW5nZSA0ZGlmZi5vdXQgZXhwZWN0ZWQgJiYKICAgICAgY2hlY2tfY2FjaGVfYXQgeW9taW4gY2xlYW4nCiAKQEAgLTExNSw3ICsxMTUsNyBAQAogICAgICBlY2hvIHlvbWluIHlvbWluID55b21pbiAmJgogICAgICByZWFkX3RyZWVfdHdvd2F5ICR0cmVlSCAkdHJlZU0gJiYKICAgICAgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPjUub3V0IHx8IHJldHVybiAxCi0gICAgIGdpdCBkaWZmIE0ub3V0IDUub3V0ID41ZGlmZi5vdXQKKyAgICAgZ2l0IGRpZmYgLS1uby1pbmRleCBNLm91dCA1Lm91dCA+NWRpZmYub3V0CiAgICAgIGNvbXBhcmVfY2hhbmdlIDVkaWZmLm91dCBleHBlY3RlZCAmJgogICAgICBjaGVja19jYWNoZV9hdCB5b21pbiBkaXJ0eScKIApAQCAtMTI3LDcgKzEyNyw3IEBACiAgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZnJvdHogJiYKICAgICAgcmVhZF90cmVlX3R3b3dheSAkdHJlZUggJHRyZWVNICYmCiAgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID42Lm91dCAmJgotICAgICBnaXQgZGlmZiBNLm91dCA2Lm91dCAmJgorICAgICB0ZXN0X2NtcCBNLm91dCA2Lm91dCAmJgogICAgICBjaGVja19jYWNoZV9hdCBmcm90eiBjbGVhbicKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCkBAIC0xNDAsNyArMTQwLDcgQEAKICAgICAgZWNobyBmcm90eiBmcm90eiA+ZnJvdHogJiYKICAgICAgcmVhZF90cmVlX3R3b3dheSAkdHJlZUggJHRyZWVNICYmCiAgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID43Lm91dCAmJgotICAgICBnaXQgZGlmZiBNLm91dCA3Lm91dCAmJgorICAgICB0ZXN0X2NtcCBNLm91dCA3Lm91dCAmJgogICAgICBjaGVja19jYWNoZV9hdCBmcm90eiBkaXJ0eScKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCkBAIC0xNzEsNyArMTcxLDcgQEAKICAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCByZXpyb3YgJiYKICAgICAgcmVhZF90cmVlX3R3b3dheSAkdHJlZUggJHRyZWVNICYmCiAgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID4xMC5vdXQgJiYKLSAgICAgZ2l0IGRpZmYgTS5vdXQgMTAub3V0JworICAgICB0ZXN0X2NtcCBNLm91dCAxMC5vdXQnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICcxMSAtIGRpcnR5IHBhdGggcmVtb3ZlZC4nIFwKQEAgLTIxNiw3ICsyMTYsNyBAQAogICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIG5pdGZvbCAmJgogICAgICByZWFkX3RyZWVfdHdvd2F5ICR0cmVlSCAkdHJlZU0gJiYKICAgICAgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPjE0Lm91dCB8fCByZXR1cm4gMQotICAgICBnaXQgZGlmZiBNLm91dCAxNC5vdXQgPjE0ZGlmZi5vdXQKKyAgICAgZ2l0IGRpZmYgLS1uby1pbmRleCBNLm91dCAxNC5vdXQgPjE0ZGlmZi5vdXQKICAgICAgY29tcGFyZV9jaGFuZ2UgMTRkaWZmLm91dCBleHBlY3RlZCAmJgogICAgICBjaGVja19jYWNoZV9hdCBuaXRmb2wgY2xlYW4nCiAKQEAgLTIzMCw3ICsyMzAsNyBAQAogICAgICBlY2hvIG5pdGZvbCBuaXRmb2wgbml0Zm9sID5uaXRmb2wgJiYKICAgICAgcmVhZF90cmVlX3R3b3dheSAkdHJlZUggJHRyZWVNICYmCiAgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID4xNS5vdXQgfHwgcmV0dXJuIDEKLSAgICAgZ2l0IGRpZmYgTS5vdXQgMTUub3V0ID4xNWRpZmYub3V0CisgICAgIGdpdCBkaWZmIC0tbm8taW5kZXggTS5vdXQgMTUub3V0ID4xNWRpZmYub3V0CiAgICAgIGNvbXBhcmVfY2hhbmdlIDE1ZGlmZi5vdXQgZXhwZWN0ZWQgJiYKICAgICAgY2hlY2tfY2FjaGVfYXQgbml0Zm9sIGRpcnR5JwogCkBAIC0yNjIsNyArMjYyLDcgQEAKICAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBib3piYXIgJiYKICAgICAgcmVhZF90cmVlX3R3b3dheSAkdHJlZUggJHRyZWVNICYmCiAgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID4xOC5vdXQgJiYKLSAgICAgZ2l0IGRpZmYgTS5vdXQgMTgub3V0ICYmCisgICAgIHRlc3RfY21wIE0ub3V0IDE4Lm91dCAmJgogICAgICBjaGVja19jYWNoZV9hdCBib3piYXIgY2xlYW4nCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXApAQCAtMjc1LDcgKzI3NSw3IEBACiAgICAgIGVjaG8gZ251c3RvIGdudXN0byA+Ym96YmFyICYmCiAgICAgIHJlYWRfdHJlZV90d293YXkgJHRyZWVIICR0cmVlTSAmJgogICAgICBnaXQgbHMtZmlsZXMgLS1zdGFnZSA+MTkub3V0ICYmCi0gICAgIGdpdCBkaWZmIE0ub3V0IDE5Lm91dCAmJgorICAgICB0ZXN0X2NtcCBNLm91dCAxOS5vdXQgJiYKICAgICAgY2hlY2tfY2FjaGVfYXQgYm96YmFyIGRpcnR5JwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKQEAgLTI4Nyw3ICsyODcsNyBAQAogICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGJvemJhciAmJgogICAgICByZWFkX3RyZWVfdHdvd2F5ICR0cmVlSCAkdHJlZU0gJiYKICAgICAgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPjIwLm91dCAmJgotICAgICBnaXQgZGlmZiBNLm91dCAyMC5vdXQgJiYKKyAgICAgdGVzdF9jbXAgTS5vdXQgMjAub3V0ICYmCiAgICAgIGNoZWNrX2NhY2hlX2F0IGJvemJhciBkaXJ0eScKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCkBAIC0zMzcsNyArMzM3LDcgQEAKICAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBERiAmJgogICAgICByZWFkX3RyZWVfdHdvd2F5ICR0cmVlREYgJHRyZWVERkRGICYmCiAgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID5ERkRGY2hlY2sub3V0ICYmCi0gICAgIGdpdCBkaWZmIERGREYub3V0IERGREZjaGVjay5vdXQgJiYKKyAgICAgdGVzdF9jbXAgREZERi5vdXQgREZERmNoZWNrLm91dCAmJgogICAgICBjaGVja19jYWNoZV9hdCBERi9ERiBkaXJ0eSAmJgogICAgICA6JwogCmRpZmYgLS1naXQgYS90L3QxMDAyLXJlYWQtdHJlZS1tLXUtMndheS5zaCBiL3QvdDEwMDItcmVhZC10cmVlLW0tdS0yd2F5LnNoCmluZGV4IDQyZTVjZjguLmUwNDk5MGUgMTAwNzU1Ci0tLSBhL3QvdDEwMDItcmVhZC10cmVlLW0tdS0yd2F5LnNoCisrKyBiL3QvdDEwMDItcmVhZC10cmVlLW0tdS0yd2F5LnNoCkBAIC0xNiw3ICsxNiw3IEBACiAJc2VkID5jdXJyZW50IFwKIAkgICAgLWUgJy9eLS0tIC9kOyAvXisrKyAvZDsgL15AQCAvZDsnIFwKIAkgICAgLWUgJ3MvXlwoLlswLTddWzAtN11bMC03XVswLTddWzAtN11bMC03XVwpICciJF94NDAiJyAvXDEgWCAvJyAiJDEiCi0JZ2l0IGRpZmYgZXhwZWN0ZWQgY3VycmVudAorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKIH0KIAogY2hlY2tfY2FjaGVfYXQgKCkgewpkaWZmIC0tZ2l0IGEvdC90MTAwNi1jYXQtZmlsZS5zaCBiL3QvdDEwMDYtY2F0LWZpbGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDhiN2YyZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEwMDYtY2F0LWZpbGUuc2gKQEAgLTAsMCArMSwyNDQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgY2F0LWZpbGUnCisKKy4gLi90ZXN0LWxpYi5zaAorCitlY2hvX3dpdGhvdXRfbmV3bGluZSAoKSB7CisgICAgcHJpbnRmICclcycgIiQqIgorfQorCitzdHJsZW4gKCkgeworICAgIGVjaG9fd2l0aG91dF9uZXdsaW5lICIkMSIgfCB3YyAtYyB8IHNlZCAtZSAncy9eICovLycKK30KKworbWF5YmVfcmVtb3ZlX3RpbWVzdGFtcCAoKSB7CisgICAgaWYgdGVzdCAteiAiJDIiOyB0aGVuCisgICAgICAgIGVjaG9fd2l0aG91dF9uZXdsaW5lICIkMSIKKyAgICBlbHNlCisJZWNob193aXRob3V0X25ld2xpbmUgIiQocHJpbnRmICclc1xuJyAiJDEiIHwgc2VkIC1lICdzLyBbMC05XVswLTldKiBbLStdWzAtOV1bMC05XVswLTldWzAtOV0kLy8nKSIKKyAgICBmaQorfQorCitydW5fdGVzdHMgKCkgeworICAgIHR5cGU9JDEKKyAgICBzaGExPSQyCisgICAgc2l6ZT0kMworICAgIGNvbnRlbnQ9JDQKKyAgICBwcmV0dHlfY29udGVudD0kNQorICAgIG5vX3RzPSQ2CisKKyAgICBiYXRjaF9vdXRwdXQ9IiRzaGExICR0eXBlICRzaXplCiskY29udGVudCIKKworICAgIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiR0eXBlIGV4aXN0cyIgJworCWdpdCBjYXQtZmlsZSAtZSAkc2hhMQorICAgICcKKworICAgIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgIlR5cGUgb2YgJHR5cGUgaXMgY29ycmVjdCIgJworICAgICAgICB0ZXN0ICR0eXBlID0gIiQoZ2l0IGNhdC1maWxlIC10ICRzaGExKSIKKyAgICAnCisKKyAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzICJTaXplIG9mICR0eXBlIGlzIGNvcnJlY3QiICcKKyAgICAgICAgdGVzdCAkc2l6ZSA9ICIkKGdpdCBjYXQtZmlsZSAtcyAkc2hhMSkiCisgICAgJworCisgICAgdGVzdCAteiAiJGNvbnRlbnQiIHx8CisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyAiQ29udGVudCBvZiAkdHlwZSBpcyBjb3JyZWN0IiAnCisJZXhwZWN0PSIkKG1heWJlX3JlbW92ZV90aW1lc3RhbXAgIiRjb250ZW50IiAkbm9fdHMpIgorCWFjdHVhbD0iJChtYXliZV9yZW1vdmVfdGltZXN0YW1wICIkKGdpdCBjYXQtZmlsZSAkdHlwZSAkc2hhMSkiICRub190cykiCisKKyAgICAgICAgaWYgdGVzdCAieiRleHBlY3QiID0gInokYWN0dWFsIgorCXRoZW4KKwkJOiBoYXBweQorCWVsc2UKKwkJZWNobyAiT29wczogZXhwZWN0ZWQgJGV4cGVjdCIKKwkJZWNobyAiYnV0IGdvdCAkYWN0dWFsIgorCQlmYWxzZQorICAgICAgICBmaQorICAgICcKKworICAgIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgIlByZXR0eSBjb250ZW50IG9mICR0eXBlIGlzIGNvcnJlY3QiICcKKwlleHBlY3Q9IiQobWF5YmVfcmVtb3ZlX3RpbWVzdGFtcCAiJHByZXR0eV9jb250ZW50IiAkbm9fdHMpIgorCWFjdHVhbD0iJChtYXliZV9yZW1vdmVfdGltZXN0YW1wICIkKGdpdCBjYXQtZmlsZSAtcCAkc2hhMSkiICRub190cykiCisgICAgICAgIGlmIHRlc3QgInokZXhwZWN0IiA9ICJ6JGFjdHVhbCIKKwl0aGVuCisJCTogaGFwcHkKKwllbHNlCisJCWVjaG8gIk9vcHM6IGV4cGVjdGVkICRleHBlY3QiCisJCWVjaG8gImJ1dCBnb3QgJGFjdHVhbCIKKwkJZmFsc2UKKyAgICAgICAgZmkKKyAgICAnCisKKyAgICB0ZXN0IC16ICIkY29udGVudCIgfHwKKyAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzICItLWJhdGNoIG91dHB1dCBvZiAkdHlwZSBpcyBjb3JyZWN0IiAnCisJZXhwZWN0PSIkKG1heWJlX3JlbW92ZV90aW1lc3RhbXAgIiRiYXRjaF9vdXRwdXQiICRub190cykiCisJYWN0dWFsPSIkKG1heWJlX3JlbW92ZV90aW1lc3RhbXAgIiQoZWNobyAkc2hhMSB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoKSIgJG5vX3RzKSIKKyAgICAgICAgaWYgdGVzdCAieiRleHBlY3QiID0gInokYWN0dWFsIgorCXRoZW4KKwkJOiBoYXBweQorCWVsc2UKKwkJZWNobyAiT29wczogZXhwZWN0ZWQgJGV4cGVjdCIKKwkJZWNobyAiYnV0IGdvdCAkYWN0dWFsIgorCQlmYWxzZQorICAgICAgICBmaQorICAgICcKKworICAgIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0tYmF0Y2gtY2hlY2sgb3V0cHV0IG9mICR0eXBlIGlzIGNvcnJlY3QiICcKKwlleHBlY3Q9IiRzaGExICR0eXBlICRzaXplIgorCWFjdHVhbD0iJChlY2hvX3dpdGhvdXRfbmV3bGluZSAkc2hhMSB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrKSIKKyAgICAgICAgaWYgdGVzdCAieiRleHBlY3QiID0gInokYWN0dWFsIgorCXRoZW4KKwkJOiBoYXBweQorCWVsc2UKKwkJZWNobyAiT29wczogZXhwZWN0ZWQgJGV4cGVjdCIKKwkJZWNobyAiYnV0IGdvdCAkYWN0dWFsIgorCQlmYWxzZQorICAgICAgICBmaQorICAgICcKK30KKworaGVsbG9fY29udGVudD0iSGVsbG8gV29ybGQiCitoZWxsb19zaXplPSQoc3RybGVuICIkaGVsbG9fY29udGVudCIpCitoZWxsb19zaGExPSQoZWNob193aXRob3V0X25ld2xpbmUgIiRoZWxsb19jb250ZW50IiB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzZXR1cCIgJworCWVjaG9fd2l0aG91dF9uZXdsaW5lICIkaGVsbG9fY29udGVudCIgPiBoZWxsbyAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgaGVsbG8KKycKKworcnVuX3Rlc3RzICdibG9iJyAkaGVsbG9fc2hhMSAkaGVsbG9fc2l6ZSAiJGhlbGxvX2NvbnRlbnQiICIkaGVsbG9fY29udGVudCIKKwordHJlZV9zaGExPSQoZ2l0IHdyaXRlLXRyZWUpCit0cmVlX3NpemU9MzMKK3RyZWVfcHJldHR5X2NvbnRlbnQ9IjEwMDY0NCBibG9iICRoZWxsb19zaGExCWhlbGxvIgorCitydW5fdGVzdHMgJ3RyZWUnICR0cmVlX3NoYTEgJHRyZWVfc2l6ZSAiIiAiJHRyZWVfcHJldHR5X2NvbnRlbnQiCisKK2NvbW1pdF9tZXNzYWdlPSJJbnRpYWwgY29tbWl0IgorY29tbWl0X3NoYTE9JChlY2hvX3dpdGhvdXRfbmV3bGluZSAiJGNvbW1pdF9tZXNzYWdlIiB8IGdpdCBjb21taXQtdHJlZSAkdHJlZV9zaGExKQorY29tbWl0X3NpemU9MTc2Citjb21taXRfY29udGVudD0idHJlZSAkdHJlZV9zaGExCithdXRob3IgJEdJVF9BVVRIT1JfTkFNRSA8JEdJVF9BVVRIT1JfRU1BSUw+IDAwMDAwMDAwMDAgKzAwMDAKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gMDAwMDAwMDAwMCArMDAwMAorCiskY29tbWl0X21lc3NhZ2UiCisKK3J1bl90ZXN0cyAnY29tbWl0JyAkY29tbWl0X3NoYTEgJGNvbW1pdF9zaXplICIkY29tbWl0X2NvbnRlbnQiICIkY29tbWl0X2NvbnRlbnQiIDEKKwordGFnX2hlYWRlcl93aXRob3V0X3RpbWVzdGFtcD0ib2JqZWN0ICRoZWxsb19zaGExCit0eXBlIGJsb2IKK3RhZyBoZWxsb3RhZwordGFnZ2VyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiIKK3RhZ19kZXNjcmlwdGlvbj0iVGhpcyBpcyBhIHRhZyIKK3RhZ19jb250ZW50PSIkdGFnX2hlYWRlcl93aXRob3V0X3RpbWVzdGFtcCAwMDAwMDAwMDAwICswMDAwCisKKyR0YWdfZGVzY3JpcHRpb24iCit0YWdfcHJldHR5X2NvbnRlbnQ9IiR0YWdfaGVhZGVyX3dpdGhvdXRfdGltZXN0YW1wIFRodSBKYW4gMSAwMDowMDowMCAxOTcwICswMDAwCisKKyR0YWdfZGVzY3JpcHRpb24iCisKK3RhZ19zaGExPSQoZWNob193aXRob3V0X25ld2xpbmUgIiR0YWdfY29udGVudCIgfCBnaXQgbWt0YWcpCit0YWdfc2l6ZT0kKHN0cmxlbiAiJHRhZ19jb250ZW50IikKKworcnVuX3Rlc3RzICd0YWcnICR0YWdfc2hhMSAkdGFnX3NpemUgIiR0YWdfY29udGVudCIgIiR0YWdfcHJldHR5X2NvbnRlbnQiIDEKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgIlJlYWNoIGEgYmxvYiBmcm9tIGEgdGFnIHBvaW50aW5nIHRvIGl0IiBcCisgICAgInRlc3QgJyRoZWxsb19jb250ZW50JyA9IFwiXCQoZ2l0IGNhdC1maWxlIGJsb2IgJHRhZ19zaGExKVwiIgorCitmb3IgYmF0Y2ggaW4gYmF0Y2ggYmF0Y2gtY2hlY2sKK2RvCisgICAgZm9yIG9wdCBpbiB0IHMgZSBwCisgICAgZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJQYXNzaW5nIC0kb3B0IHdpdGggLS0kYmF0Y2ggZmFpbHMiICcKKwkgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIC0tJGJhdGNoIC0kb3B0ICRoZWxsb19zaGExCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiUGFzc2luZyAtLSRiYXRjaCB3aXRoIC0kb3B0IGZhaWxzIiAnCisJICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSAtJG9wdCAtLSRiYXRjaCAkaGVsbG9fc2hhMQorCScKKyAgICBkb25lCisKKyAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzICJQYXNzaW5nIDx0eXBlPiB3aXRoIC0tJGJhdGNoIGZhaWxzIiAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIC0tJGJhdGNoIGJsb2IgJGhlbGxvX3NoYTEKKyAgICAnCisKKyAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzICJQYXNzaW5nIC0tJGJhdGNoIHdpdGggPHR5cGU+IGZhaWxzIiAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgLS0kYmF0Y2ggJGhlbGxvX3NoYTEKKyAgICAnCisKKyAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzICJQYXNzaW5nIHNoYTEgd2l0aCAtLSRiYXRjaCBmYWlscyIgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSAtLSRiYXRjaCAkaGVsbG9fc2hhMQorICAgICcKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiLS1iYXRjaC1jaGVjayBmb3IgYSBub24tZXhpc3RlbnQgbmFtZWQgb2JqZWN0IiAnCisgICAgdGVzdCAiZm9vYmFyNDIgbWlzc2luZworZm9vYmFyODQgbWlzc2luZyIgPSBcCisgICAgIiQoICggZWNobyBmb29iYXI0MjsgZWNob193aXRob3V0X25ld2xpbmUgZm9vYmFyODQ7ICkgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjaykiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0tYmF0Y2gtY2hlY2sgZm9yIGEgbm9uLWV4aXN0ZW50IGhhc2giICcKKyAgICB0ZXN0ICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyIG1pc3NpbmcKKzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODQgbWlzc2luZyIgPSBcCisgICAgIiQoICggZWNobyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyOworICAgICAgICAgZWNob193aXRob3V0X25ld2xpbmUgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NDsgKSBcCisgICAgICAgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjaykiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0tYmF0Y2ggZm9yIGFuIGV4aXN0ZW50IGFuZCBhIG5vbi1leGlzdGVudCBoYXNoIiAnCisgICAgdGVzdCAiJHRhZ19zaGExIHRhZyAkdGFnX3NpemUKKyR0YWdfY29udGVudAorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBtaXNzaW5nIiA9IFwKKyAgICAiJCggKCBlY2hvICR0YWdfc2hhMTsKKyAgICAgICAgIGVjaG9fd2l0aG91dF9uZXdsaW5lIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA7ICkgXAorICAgICAgIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICItLWJhdGNoLWNoZWNrIGZvciBhbiBlbXRweSBsaW5lIiAnCisgICAgdGVzdCAiIG1pc3NpbmciID0gIiQoZWNobyB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrKSIKKycKKworYmF0Y2hfaW5wdXQ9IiRoZWxsb19zaGExCiskY29tbWl0X3NoYTEKKyR0YWdfc2hhMQorZGVhZGJlZWYKKworIgorCitiYXRjaF9vdXRwdXQ9IiRoZWxsb19zaGExIGJsb2IgJGhlbGxvX3NpemUKKyRoZWxsb19jb250ZW50CiskY29tbWl0X3NoYTEgY29tbWl0ICRjb21taXRfc2l6ZQorJGNvbW1pdF9jb250ZW50CiskdGFnX3NoYTEgdGFnICR0YWdfc2l6ZQorJHRhZ19jb250ZW50CitkZWFkYmVlZiBtaXNzaW5nCisgbWlzc2luZyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1iYXRjaCB3aXRoIG11bHRpcGxlIHNoYTFzIGdpdmVzIGNvcnJlY3QgZm9ybWF0JyAnCisJdGVzdCAiJChtYXliZV9yZW1vdmVfdGltZXN0YW1wICIkYmF0Y2hfb3V0cHV0IiAxKSIgPSAiJChtYXliZV9yZW1vdmVfdGltZXN0YW1wICIkKGVjaG9fd2l0aG91dF9uZXdsaW5lICIkYmF0Y2hfaW5wdXQiIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gpIiAxKSIKKycKKworYmF0Y2hfY2hlY2tfaW5wdXQ9IiRoZWxsb19zaGExCiskdHJlZV9zaGExCiskY29tbWl0X3NoYTEKKyR0YWdfc2hhMQorZGVhZGJlZWYKKworIgorCitiYXRjaF9jaGVja19vdXRwdXQ9IiRoZWxsb19zaGExIGJsb2IgJGhlbGxvX3NpemUKKyR0cmVlX3NoYTEgdHJlZSAkdHJlZV9zaXplCiskY29tbWl0X3NoYTEgY29tbWl0ICRjb21taXRfc2l6ZQorJHRhZ19zaGExIHRhZyAkdGFnX3NpemUKK2RlYWRiZWVmIG1pc3NpbmcKKyBtaXNzaW5nIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICItLWJhdGNoLWNoZWNrIHdpdGggbXVsdGlwbGUgc2hhMXMgZ2l2ZXMgY29ycmVjdCBmb3JtYXQiICcKKyAgICB0ZXN0ICIkYmF0Y2hfY2hlY2tfb3V0cHV0IiA9IFwKKyAgICAiJChlY2hvX3dpdGhvdXRfbmV3bGluZSAiJGJhdGNoX2NoZWNrX2lucHV0IiB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrKSIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMDA3LWhhc2gtb2JqZWN0LnNoIGIvdC90MTAwNy1oYXNoLW9iamVjdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNTI2Mjk1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MTAwNy1oYXNoLW9iamVjdC5zaApAQCAtMCwwICsxLDEzMyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249Z2l0LWhhc2gtb2JqZWN0CisKKy4gLi90ZXN0LWxpYi5zaAorCitlY2hvX3dpdGhvdXRfbmV3bGluZSgpIHsKKwlwcmludGYgJyVzJyAiJCoiCit9CisKK3Rlc3RfYmxvYl9kb2VzX25vdF9leGlzdCgpIHsKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdibG9iIGRvZXMgbm90IGV4aXN0IGluIGRhdGFiYXNlJyAiCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICQxCisJIgorfQorCit0ZXN0X2Jsb2JfZXhpc3RzKCkgeworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jsb2IgZXhpc3RzIGluIGRhdGFiYXNlJyAiCisJCWdpdCBjYXQtZmlsZSBibG9iICQxCisJIgorfQorCitoZWxsb19jb250ZW50PSJIZWxsbyBXb3JsZCIKK2hlbGxvX3NoYTE9NWUxYzMwOWRhZTdmNDVlMGYzOWIxYmYzYWMzY2Q5ZGIxMmU3ZDY4OQorCitleGFtcGxlX2NvbnRlbnQ9IlRoaXMgaXMgYW4gZXhhbXBsZSIKK2V4YW1wbGVfc2hhMT1kZGQzZjgzNmQzZTNmYmI3YWUyODlhYTlhZTgzNTM2Zjc2OTU2Mzk5CisKK3NldHVwX3JlcG8oKSB7CisJZWNob193aXRob3V0X25ld2xpbmUgIiRoZWxsb19jb250ZW50IiA+IGhlbGxvCisJZWNob193aXRob3V0X25ld2xpbmUgIiRleGFtcGxlX2NvbnRlbnQiID4gZXhhbXBsZQorfQorCit0ZXN0X3JlcG89dGVzdAorcHVzaF9yZXBvKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gJHRlc3RfcmVwbworCWNkICR0ZXN0X3JlcG8KKworCXNldHVwX3JlcG8KK30KKworcG9wX3JlcG8oKSB7CisJY2QgLi4KKwlybSAtcmYgJHRlc3RfcmVwbworfQorCitzZXR1cF9yZXBvCisKKyMgQXJndW1lbnQgY2hlY2tpbmcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAibXVsdGlwbGUgJy0tc3RkaW4ncyBhcmUgcmVqZWN0ZWQiICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbiAtLXN0ZGluIDwgZXhhbXBsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJDYW4ndCB1c2UgLS1zdGRpbiBhbmQgLS1zdGRpbi1wYXRocyB0b2dldGhlciIgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIC0tc3RkaW4tcGF0aHMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbi1wYXRocyAtLXN0ZGluCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIkNhbid0IHBhc3MgZmlsZW5hbWVzIGFzIGFyZ3VtZW50cyB3aXRoIC0tc3RkaW4tcGF0aHMiICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbi1wYXRocyBoZWxsbyA8IGV4YW1wbGUKKycKKworIyBCZWhhdmlvcgorCitwdXNoX3JlcG8KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaGFzaCBhIGZpbGUnICcKKwl0ZXN0ICRoZWxsb19zaGExID0gJChnaXQgaGFzaC1vYmplY3QgaGVsbG8pCisnCisKK3Rlc3RfYmxvYl9kb2VzX25vdF9leGlzdCAkaGVsbG9fc2hhMQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoYXNoIGZyb20gc3RkaW4nICcKKwl0ZXN0ICRleGFtcGxlX3NoYTEgPSAkKGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIDwgZXhhbXBsZSkKKycKKwordGVzdF9ibG9iX2RvZXNfbm90X2V4aXN0ICRleGFtcGxlX3NoYTEKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaGFzaCBhIGZpbGUgYW5kIHdyaXRlIHRvIGRhdGFiYXNlJyAnCisJdGVzdCAkaGVsbG9fc2hhMSA9ICQoZ2l0IGhhc2gtb2JqZWN0IC13IGhlbGxvKQorJworCit0ZXN0X2Jsb2JfZXhpc3RzICRoZWxsb19zaGExCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBoYXNoLW9iamVjdCAtLXN0ZGluIGZpbGUxIDxmaWxlMCBmaXJzdCBvcGVyYXRlcyBvbiBmaWxlMCwgdGhlbiBmaWxlMScgJworCWVjaG8gZm9vID4gZmlsZTEgJiYKKwlvYm5hbWUwPSQoZWNobyBiYXIgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbikgJiYKKwlvYm5hbWUxPSQoZ2l0IGhhc2gtb2JqZWN0IGZpbGUxKSAmJgorCW9ibmFtZTBuZXc9JChlY2hvIGJhciB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIGZpbGUxIHwgc2VkIC1uIC1lIDFwKSAmJgorCW9ibmFtZTFuZXc9JChlY2hvIGJhciB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIGZpbGUxIHwgc2VkIC1uIC1lIDJwKSAmJgorCXRlc3QgIiRvYm5hbWUwIiA9ICIkb2JuYW1lMG5ldyIgJiYKKwl0ZXN0ICIkb2JuYW1lMSIgPSAiJG9ibmFtZTFuZXciCisnCisKK3BvcF9yZXBvCisKK2ZvciBhcmdzIGluICItdyAtLXN0ZGluIiAiLS1zdGRpbiAtdyI7IGRvCisJcHVzaF9yZXBvCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJoYXNoIGZyb20gc3RkaW4gYW5kIHdyaXRlIHRvIGRhdGFiYXNlICgkYXJncykiICcKKwkJdGVzdCAkZXhhbXBsZV9zaGExID0gJChnaXQgaGFzaC1vYmplY3QgJGFyZ3MgPCBleGFtcGxlKQorCScKKworCXRlc3RfYmxvYl9leGlzdHMgJGV4YW1wbGVfc2hhMQorCisJcG9wX3JlcG8KK2RvbmUKKworZmlsZW5hbWVzPSJoZWxsbworZXhhbXBsZSIKKworc2hhMXM9IiRoZWxsb19zaGExCiskZXhhbXBsZV9zaGExIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJoYXNoIHR3byBmaWxlcyB3aXRoIG5hbWVzIG9uIHN0ZGluIiAnCisJdGVzdCAiJHNoYTFzIiA9ICIkKGVjaG9fd2l0aG91dF9uZXdsaW5lICIkZmlsZW5hbWVzIiB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluLXBhdGhzKSIKKycKKworZm9yIGFyZ3MgaW4gIi13IC0tc3RkaW4tcGF0aHMiICItLXN0ZGluLXBhdGhzIC13IjsgZG8KKwlwdXNoX3JlcG8KKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImhhc2ggdHdvIGZpbGVzIHdpdGggbmFtZXMgb24gc3RkaW4gYW5kIHdyaXRlIHRvIGRhdGFiYXNlICgkYXJncykiICcKKwkJdGVzdCAiJHNoYTFzIiA9ICIkKGVjaG9fd2l0aG91dF9uZXdsaW5lICIkZmlsZW5hbWVzIiB8IGdpdCBoYXNoLW9iamVjdCAkYXJncykiCisJJworCisJdGVzdF9ibG9iX2V4aXN0cyAkaGVsbG9fc2hhMQorCXRlc3RfYmxvYl9leGlzdHMgJGV4YW1wbGVfc2hhMQorCisJcG9wX3JlcG8KK2RvbmUKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMDIwLXN1YmRpcmVjdG9yeS5zaCBiL3QvdDEwMjAtc3ViZGlyZWN0b3J5LnNoCmluZGV4IGI5Y2VmMzQuLmZjMzg2YmEgMTAwNzU1Ci0tLSBhL3QvdDEwMjAtc3ViZGlyZWN0b3J5LnNoCisrKyBiL3QvdDEwMjAtc3ViZGlyZWN0b3J5LnNoCkBAIC0yMSw3ICsyMSw3IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1pbmRleCBhbmQgbHMtZmlsZXMnICcKLQljZCAkSEVSRSAmJgorCWNkICIkSEVSRSIgJiYKIAlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIG9uZSAmJgogCWNhc2UgImBnaXQgbHMtZmlsZXNgIiBpbgogCW9uZSkgZWNobyBvayBvbmUgOzsKQEAgLTQxLDcgKzQxLDcgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2F0LWZpbGUnICcKLQljZCAkSEVSRSAmJgorCWNkICIkSEVSRSIgJiYKIAl0d289YGdpdCBscy1maWxlcyAtcyBkaXIvdHdvYCAmJgogCXR3bz1gZXhwciAiJHR3byIgOiAiWzAtN10qIFxcKFswLTlhLWZdKlxcKSJgICYmCiAJZWNobyAiJHR3byIgJiYKQEAgLTU0LDcgKzU0LDcgQEAKIHJtIC1mIGFjdHVhbCBkaXIvYWN0dWFsCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtZmlsZXMnICcKLQljZCAkSEVSRSAmJgorCWNkICIkSEVSRSIgJiYKIAllY2hvIGEgPj5vbmUgJiYKIAllY2hvIGQgPj5kaXIvdHdvICYmCiAJY2FzZSAiYGdpdCBkaWZmLWZpbGVzIC0tbmFtZS1vbmx5YCIgaW4KQEAgLTc0LDcgKzc0LDcgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JpdGUtdHJlZScgJwotCWNkICRIRVJFICYmCisJY2QgIiRIRVJFIiAmJgogCXRvcD1gZ2l0IHdyaXRlLXRyZWVgICYmCiAJZWNobyAkdG9wICYmCiAJY2QgZGlyICYmCkBAIC04NCw3ICs4NCw3IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0LWluZGV4JyAnCi0JY2QgJEhFUkUgJiYKKwljZCAiJEhFUkUiICYmCiAJZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC11IG9uZSAmJgogCWNtcCBvbmUgb3JpZ2luYWwub25lICYmCiAJY2QgZGlyICYmCkBAIC05Myw3ICs5Myw3IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQtdHJlZScgJwotCWNkICRIRVJFICYmCisJY2QgIiRIRVJFIiAmJgogCXJtIC1mIG9uZSBkaXIvdHdvICYmCiAJdHJlZT1gZ2l0IHdyaXRlLXRyZWVgICYmCiAJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11ICIkdHJlZSIgJiYKQEAgLTEwNywyNyArMTA3LDI3IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGZpbGUvcmV2IGFtYmlndWl0eSBjaGVjayBpbnNpZGUgLmdpdCcgJwotCWNkICRIRVJFICYmCisJY2QgIiRIRVJFIiAmJgogCWdpdCBjb21taXQgLWEgLW0gMSAmJgotCWNkICRIRVJFLy5naXQgJiYKKwljZCAiJEhFUkUiLy5naXQgJiYKIAlnaXQgc2hvdyAtcyBIRUFECiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGZpbGUvcmV2IGFtYmlndWl0eSBjaGVjayBpbnNpZGUgYSBiYXJlIHJlcG8nICcKLQljZCAkSEVSRSAmJgorCWNkICIkSEVSRSIgJiYKIAlnaXQgY2xvbmUgLXMgLS1iYXJlIC5naXQgZm9vLmdpdCAmJgogCWNkIGZvby5naXQgJiYgR0lUX0RJUj0uIGdpdCBzaG93IC1zIEhFQUQKICcKIAogIyBUaGlzIHN0aWxsIGRvZXMgbm90IHdvcmsgYXMgaXQgc2hvdWxkLi4uCiA6IHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGZpbGUvcmV2IGFtYmlndWl0eSBjaGVjayBpbnNpZGUgYSBiYXJlIHJlcG8nICcKLQljZCAkSEVSRSAmJgorCWNkICIkSEVSRSIgJiYKIAlnaXQgY2xvbmUgLXMgLS1iYXJlIC5naXQgZm9vLmdpdCAmJgogCWNkIGZvby5naXQgJiYgZ2l0IHNob3cgLXMgSEVBRAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3Rpb24gc2hvdWxkIG5vdCBiZSBmb29sZWQgYnkgYSBzeW1saW5rJyAnCi0JY2QgJEhFUkUgJiYKKwljZCAiJEhFUkUiICYmCiAJcm0gLWZyIGZvby5naXQgJiYKIAlnaXQgY2xvbmUgLXMgLmdpdCBhbm90aGVyICYmCiAJbG4gLXMgYW5vdGhlciB5ZXRhbm90aGVyICYmCmRpZmYgLS1naXQgYS90L3QxMzAwLXJlcG8tY29uZmlnLnNoIGIvdC90MTMwMC1yZXBvLWNvbmZpZy5zaAppbmRleCBiMzZhOTAxLi5hZmU3ZTY2IDEwMDc1NQotLS0gYS90L3QxMzAwLXJlcG8tY29uZmlnLnNoCisrKyBiL3QvdDEzMDAtcmVwby1jb25maWcuc2gKQEAgLTQyNywxMyArNDI3LDEzIEBACiB3ZWlyZAogRU9GCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlbmFtZSBzdWNjZWVkZWQiICJnaXQgZGlmZiBleHBlY3QgLmdpdC9jb25maWciCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZW5hbWUgc3VjY2VlZGVkIiAidGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnIgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZW5hbWUgbm9uLWV4aXN0aW5nIHNlY3Rpb24iICcKIAkhIGdpdCBjb25maWcgLS1yZW5hbWUtc2VjdGlvbiBicmFuY2guIndvcmxkIGRvbWluYXRpb24iIGJyYW5jaC5kcmVpCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlbmFtZSBzdWNjZWVkZWQiICJnaXQgZGlmZiBleHBlY3QgLmdpdC9jb25maWciCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZW5hbWUgc3VjY2VlZGVkIiAidGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnIgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZW5hbWUgYW5vdGhlciBzZWN0aW9uIiBcCiAJJ2dpdCBjb25maWcgLS1yZW5hbWUtc2VjdGlvbiBicmFuY2guIjEgMjM0IGJsYWJsL2EiIGJyYW5jaC5kcmVpJwpAQCAtNDQ5LDcgKzQ0OSw3IEBACiB3ZWlyZAogRU9GCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlbmFtZSBzdWNjZWVkZWQiICJnaXQgZGlmZiBleHBlY3QgLmdpdC9jb25maWciCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZW5hbWUgc3VjY2VlZGVkIiAidGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnIgogCiBjYXQgPj4gLmdpdC9jb25maWcgPDwgRU9GCiAgIFticmFuY2ggInp3ZWkiXSBhID0gMSBbYnJhbmNoICJ2aWVyIl0KQEAgLTQ2NSw3ICs0NjUsNyBAQAogRU9GCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgInNlY3Rpb24gd2FzIHJlbW92ZWQgcHJvcGVybHkiIFwKLQkiZ2l0IGRpZmYgLXUgZXhwZWN0IC5naXQvY29uZmlnIgorCSJ0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWciCiAKIHJtIC5naXQvY29uZmlnCiAKQEAgLTU5NSw2ICs1OTUsNjQgQEAKIAogcm0gLmdpdC9jb25maWcKIAorY2F0ID5leHBlY3QgPDxcRU9GCitbYm9vbF0KKwl0cnVlMSA9IHRydWUKKwl0cnVlMiA9IHRydWUKKwlmYWxzZTEgPSBmYWxzZQorCWZhbHNlMiA9IGZhbHNlCitbaW50XQorCWludDEgPSAwCisJaW50MiA9IDEKKwlpbnQzID0gLTEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQgLS1ib29sLW9yLWludCcgJworCSgKKwkJZWNobyAiW2Jvb2xdIgorCQllY2hvIHRydWUxCisJCWVjaG8gdHJ1ZTIgPSB0cnVlCisJCWVjaG8gZmFsc2UgPSBmYWxzZQorCQllY2hvICJbaW50XSIKKwkJZWNobyBpbnQxID0gMAorCQllY2hvIGludDIgPSAxCisJCWVjaG8gaW50MyA9IC0xCisJKSA+Pi5naXQvY29uZmlnICYmCisJdGVzdCAkKGdpdCBjb25maWcgLS1ib29sLW9yLWludCBib29sLnRydWUxKSA9IHRydWUgJiYKKwl0ZXN0ICQoZ2l0IGNvbmZpZyAtLWJvb2wtb3ItaW50IGJvb2wudHJ1ZTIpID0gdHJ1ZSAmJgorCXRlc3QgJChnaXQgY29uZmlnIC0tYm9vbC1vci1pbnQgYm9vbC5mYWxzZSkgPSBmYWxzZSAmJgorCXRlc3QgJChnaXQgY29uZmlnIC0tYm9vbC1vci1pbnQgaW50LmludDEpID0gMCAmJgorCXRlc3QgJChnaXQgY29uZmlnIC0tYm9vbC1vci1pbnQgaW50LmludDIpID0gMSAmJgorCXRlc3QgJChnaXQgY29uZmlnIC0tYm9vbC1vci1pbnQgaW50LmludDMpID0gLTEKKworJworCitybSAuZ2l0L2NvbmZpZworY2F0ID5leHBlY3QgPDxcRU9GCitbYm9vbF0KKwl0cnVlMSA9IHRydWUKKwlmYWxzZTEgPSBmYWxzZQorCXRydWUyID0gdHJ1ZQorCWZhbHNlMiA9IGZhbHNlCitbaW50XQorCWludDEgPSAwCisJaW50MiA9IDEKKwlpbnQzID0gLTEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgLS1ib29sLW9yLWludCcgJworCWdpdCBjb25maWcgLS1ib29sLW9yLWludCBib29sLnRydWUxIHRydWUgJiYKKwlnaXQgY29uZmlnIC0tYm9vbC1vci1pbnQgYm9vbC5mYWxzZTEgZmFsc2UgJiYKKwlnaXQgY29uZmlnIC0tYm9vbC1vci1pbnQgYm9vbC50cnVlMiB5ZXMgJiYKKwlnaXQgY29uZmlnIC0tYm9vbC1vci1pbnQgYm9vbC5mYWxzZTIgbm8gJiYKKwlnaXQgY29uZmlnIC0tYm9vbC1vci1pbnQgaW50LmludDEgMCAmJgorCWdpdCBjb25maWcgLS1ib29sLW9yLWludCBpbnQuaW50MiAxICYmCisJZ2l0IGNvbmZpZyAtLWJvb2wtb3ItaW50IGludC5pbnQzIC0xICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnCisnCisKK3JtIC5naXQvY29uZmlnCisKIGdpdCBjb25maWcgcXVvdGUubGVhZGluZyAiIHRlc3QiCiBnaXQgY29uZmlnIHF1b3RlLmVuZGluZyAidGVzdCAiCiBnaXQgY29uZmlnIHF1b3RlLnNlbWljb2xvbiAidGVzdDt0ZXN0IgpkaWZmIC0tZ2l0IGEvdC90MTMwMS1zaGFyZWQtcmVwby5zaCBiL3QvdDEzMDEtc2hhcmVkLXJlcG8uc2gKaW5kZXggNmJmZTE5YS4uZGM4NWU4YiAxMDA3NTUKLS0tIGEvdC90MTMwMS1zaGFyZWQtcmVwby5zaAorKysgYi90L3QxMzAxLXNoYXJlZC1yZXBvLnNoCkBAIC03LDYgKzcsMzkgQEAKIAogLiAuL3Rlc3QtbGliLnNoCiAKKyMgVXNlciBtdXN0IGhhdmUgcmVhZCBwZXJtaXNzaW9ucyB0byB0aGUgcmVwbyAtPiBmYWlsdXJlIG9uIC0tc2hhcmVkPTA0MDAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NoYXJlZCA9IDA0MDAgKGZhdWx0eSBwZXJtaXNzaW9uIHUtdyknICcKKwlta2RpciBzdWIgJiYgKAorCQljZCBzdWIgJiYgZ2l0IGluaXQgLS1zaGFyZWQ9MDQwMAorCSkKKwlyZXQ9IiQ/IgorCXJtIC1yZiBzdWIKKwl0ZXN0ICRyZXQgIT0gIjAiCisnCisKK2ZvciB1IGluIDAwMiAwMjIKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAic2hhcmVkPTEgZG9lcyBub3QgY2xlYXIgYml0cyBwcmVzZXQgYnkgdW1hc2sgJHUiICcKKwkJbWtkaXIgc3ViICYmICgKKwkJCWNkIHN1YiAmJgorCQkJdW1hc2sgJHUgJiYKKwkJCWdpdCBpbml0IC0tc2hhcmVkPTEgJiYKKwkJCXRlc3QgMSA9ICIkKGdpdCBjb25maWcgY29yZS5zaGFyZWRyZXBvc2l0b3J5KSIKKwkJKSAmJgorCQlhY3R1YWw9JChscyAtbCBzdWIvLmdpdC9IRUFEKQorCQljYXNlICIkYWN0dWFsIiBpbgorCQktcnctcnctci0tKikKKwkJCTogaGFwcHkKKwkJCTs7CisJCSopCisJCQllY2hvIE9vcHMsIC5naXQvSEVBRCBpcyBub3QgMDY2NCBidXQgJGFjdHVhbAorCQkJZmFsc2UKKwkJCTs7CisJCWVzYWMKKwknCisJcm0gLXJmIHN1YgorZG9uZQorCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaGFyZWQ9YWxsJyAnCiAJbWtkaXIgc3ViICYmCiAJY2Qgc3ViICYmCkBAIC0zMyw0ICs2Niw1OSBAQAogCWVzYWMKICcKIAorZm9yIHUgaW4JMDY2MDpydy1ydy0tLS0gXAorCQkwNjQwOnJ3LXItLS0tLSBcCisJCTA2MDA6cnctLS0tLS0tIFwKKwkJMDY2Njpydy1ydy1ydy0gXAorCQkwNjY0OnJ3LXJ3LXItLQorZG8KKwl4PSQoZXhwciAiJHUiIDogIi4qOlwoW3J3LV0qXCkiKSAmJgorCXk9JChlY2hvICIkeCIgfCBzZWQgLWUgInMvdy8tL2ciKSAmJgorCXU9JChleHByICIkdSIgOiAiXChbMC03XSpcKSIpICYmCisJZ2l0IGNvbmZpZyBjb3JlLnNoYXJlZHJlcG9zaXRvcnkgIiR1IiAmJgorCXVtYXNrIDAyNzcgJiYKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInNoYXJlZCA9ICR1ICgkeSkgcm8iICcKKworCQlybSAtZiAuZ2l0L2luZm8vcmVmcyAmJgorCQlnaXQgdXBkYXRlLXNlcnZlci1pbmZvICYmCisJCWFjdHVhbD0iJChscyAtbCAuZ2l0L2luZm8vcmVmcykiICYmCisJCWFjdHVhbD0ke2FjdHVhbCUlICp9ICYmCisJCXRlc3QgIngkYWN0dWFsIiA9ICJ4LSR5IiB8fCB7CisJCQlscyAtbHQgLmdpdC9pbmZvCisJCQlmYWxzZQorCQl9CisJJworCisJdW1hc2sgMDc3ICYmCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAic2hhcmVkID0gJHUgKCR4KSBydyIgJworCisJCXJtIC1mIC5naXQvaW5mby9yZWZzICYmCisJCWdpdCB1cGRhdGUtc2VydmVyLWluZm8gJiYKKwkJYWN0dWFsPSIkKGxzIC1sIC5naXQvaW5mby9yZWZzKSIgJiYKKwkJYWN0dWFsPSR7YWN0dWFsJSUgKn0gJiYKKwkJdGVzdCAieCRhY3R1YWwiID0gIngtJHgiIHx8IHsKKwkJCWxzIC1sdCAuZ2l0L2luZm8KKwkJCWZhbHNlCisJCX0KKworCScKKworZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcmVmbG9nIGV4cGlyZSBob25vcnMgY29yZS5zaGFyZWRSZXBvc2l0b3J5JyAnCisJZ2l0IGNvbmZpZyBjb3JlLnNoYXJlZFJlcG9zaXRvcnkgZ3JvdXAgJiYKKwlnaXQgcmVmbG9nIGV4cGlyZSAtLWFsbCAmJgorCWFjdHVhbD0iJChscyAtbCAuZ2l0L2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIpIiAmJgorCWNhc2UgIiRhY3R1YWwiIGluCisJLXJ3LXJ3LSopCisJCTogaGFwcHkKKwkJOzsKKwkqKQorCQllY2hvIE9vb3BzLCAuZ2l0L2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIgaXMgbm90IDA2NjIgWyRhY3R1YWxdCisJCWZhbHNlCisJCTs7CisJZXNhYworJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEzMDMtd2Fja3ktY29uZmlnLnNoIGIvdC90MTMwMy13YWNreS1jb25maWcuc2gKaW5kZXggOTk5ODVkYy4uZjk4ZjRjNSAxMDA3NTUKLS0tIGEvdC90MTMwMy13YWNreS1jb25maWcuc2gKKysrIGIvdC90MTMwMy13YWNreS1jb25maWcuc2gKQEAgLTExLDcgKzExLDcgQEAKIGNoZWNrKCkgewogCWVjaG8gIiQyIiA+ZXhwZWN0ZWQKIAlnaXQgY29uZmlnIC0tZ2V0ICIkMSIgPmFjdHVhbAotCWdpdCBkaWZmIGFjdHVhbCBleHBlY3RlZAorCXRlc3RfY21wIGFjdHVhbCBleHBlY3RlZAogfQogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZnkgc2FtZSBrZXknICcKQEAgLTM0LDQgKzM0LDEwIEBACiAJY2hlY2sgc2VjdGlvbjIua2V5IGJhcgogJwogCitTRUNUSU9OPSJ0ZXN0LnFcInNcXHNxJ3NwIGUua2V5IgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZSBzdXJlIGdpdC1jb25maWcgZXNjYXBlcyBzZWN0aW9uIG5hbWVzIHByb3Blcmx5JyAnCisJZ2l0IGNvbmZpZyAiJFNFQ1RJT04iIGJhciAmJgorCWNoZWNrICIkU0VDVElPTiIgYmFyCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTQwMC11cGRhdGUtcmVmLnNoIGIvdC90MTQwMC11cGRhdGUtcmVmLnNoCmluZGV4IDc4Y2Q0MTIuLmI4YjdhYjQgMTAwNzU1Ci0tLSBhL3QvdDE0MDAtdXBkYXRlLXJlZi5zaAorKysgYi90L3QxNDAwLXVwZGF0ZS1yZWYuc2gKQEAgLTMyLDYgKzMyLDE0IEBACiAJImNyZWF0ZSAkbSIgXAogCSJnaXQgdXBkYXRlLXJlZiAkbSAkQiAkQSAmJgogCSB0ZXN0ICRCIicgPSAkKGNhdCAuZ2l0LyciJG0iJyknCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJmYWlsIHRvIGRlbGV0ZSAkbSB3aXRoIHN0YWxlIHJlZiIgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC1kICRtICRBICYmCisJdGVzdCAkQiA9ICIkKGNhdCAuZ2l0LyRtKSIKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImRlbGV0ZSAkbSIgJworCWdpdCB1cGRhdGUtcmVmIC1kICRtICRCICYmCisJISB0ZXN0IC1mIC5naXQvJG0KKycKIHJtIC1mIC5naXQvJG0KIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCkBAIC00OSw2ICs1NywxNCBAQAogCSJjcmVhdGUgJG0gKGJ5IEhFQUQpIiBcCiAJImdpdCB1cGRhdGUtcmVmIEhFQUQgJEIgJEEgJiYKIAkgdGVzdCAkQiInID0gJChjYXQgLmdpdC8nIiRtIicpJwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZmFpbCB0byBkZWxldGUgJG0gKGJ5IEhFQUQpIHdpdGggc3RhbGUgcmVmIiAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLWQgSEVBRCAkQSAmJgorCXRlc3QgJEIgPSAkKGNhdCAuZ2l0LyRtKQorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZGVsZXRlICRtIChieSBIRUFEKSIgJworCWdpdCB1cGRhdGUtcmVmIC1kIEhFQUQgJEIgJiYKKwkhIHRlc3QgLWYgLmdpdC8kbQorJwogcm0gLWYgLmdpdC8kbQogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICcobm90KSBjcmVhdGUgSEVBRCB3aXRoIG9sZCBzaGExJyAiCmRpZmYgLS1naXQgYS90L3QxNDEwLXJlZmxvZy5zaCBiL3QvdDE0MTAtcmVmbG9nLnNoCmluZGV4IDczZjgzMGQuLjViMjRmMDUgMTAwNzU1Ci0tLSBhL3QvdDE0MTAtcmVmbG9nLnNoCisrKyBiL3QvdDE0MTAtcmVmbG9nLnNoCkBAIC0xODgsMTYgKzE4OCwzMCBAQAogCXRlc3RfdGljayAmJgogCWdpdCBjb21taXQgLW0gdGlnZXIgQyAmJgogCi0JdGVzdCA1ID0gJChnaXQgcmVmbG9nIHwgd2MgLWwpICYmCisJSEVBRF9lbnRyeV9jb3VudD0kKGdpdCByZWZsb2cgfCB3YyAtbCkKKwltYXN0ZXJfZW50cnlfY291bnQ9JChnaXQgcmVmbG9nIHNob3cgbWFzdGVyIHwgd2MgLWwpCisKKwl0ZXN0ICRIRUFEX2VudHJ5X2NvdW50ID0gNSAmJgorCXRlc3QgJG1hc3Rlcl9lbnRyeV9jb3VudCA9IDUgJiYKKwogCiAJZ2l0IHJlZmxvZyBkZWxldGUgbWFzdGVyQHsxfSAmJgogCWdpdCByZWZsb2cgc2hvdyBtYXN0ZXIgPiBvdXRwdXQgJiYKLQl0ZXN0IDQgPSAkKHdjIC1sIDwgb3V0cHV0KSAmJgorCXRlc3QgJCgoJG1hc3Rlcl9lbnRyeV9jb3VudCAtIDEpKSA9ICQod2MgLWwgPCBvdXRwdXQpICYmCisJdGVzdCAkSEVBRF9lbnRyeV9jb3VudCA9ICQoZ2l0IHJlZmxvZyB8IHdjIC1sKSAmJgogCSEgZ3JlcCBveCA8IG91dHB1dCAmJgogCisJbWFzdGVyX2VudHJ5X2NvdW50PSQod2MgLWwgPCBvdXRwdXQpCisKKwlnaXQgcmVmbG9nIGRlbGV0ZSBIRUFEQHsxfSAmJgorCXRlc3QgJCgoJEhFQURfZW50cnlfY291bnQgLTEpKSA9ICQoZ2l0IHJlZmxvZyB8IHdjIC1sKSAmJgorCXRlc3QgJG1hc3Rlcl9lbnRyeV9jb3VudCA9ICQoZ2l0IHJlZmxvZyBzaG93IG1hc3RlciB8IHdjIC1sKSAmJgorCisJSEVBRF9lbnRyeV9jb3VudD0kKGdpdCByZWZsb2cgfCB3YyAtbCkKKwogCWdpdCByZWZsb2cgZGVsZXRlIG1hc3RlckB7MDcuMDQuMjAwNS4xNToxNTowMC4tMDcwMH0gJiYKIAlnaXQgcmVmbG9nIHNob3cgbWFzdGVyID4gb3V0cHV0ICYmCi0JdGVzdCAzID0gJCh3YyAtbCA8IG91dHB1dCkgJiYKKwl0ZXN0ICQoKCRtYXN0ZXJfZW50cnlfY291bnQgLSAxKSkgPSAkKHdjIC1sIDwgb3V0cHV0KSAmJgogCSEgZ3JlcCBkcmFnb24gPCBvdXRwdXQKIAogJwpkaWZmIC0tZ2l0IGEvdC90MTUwMC1yZXYtcGFyc2Uuc2ggYi90L3QxNTAwLXJldi1wYXJzZS5zaAppbmRleCAzOGEyYmYwLi44NWRhNGNhIDEwMDc1NQotLS0gYS90L3QxNTAwLXJldi1wYXJzZS5zaAorKysgYi90L3QxNTAwLXJldi1wYXJzZS5zaApAQCAtNTEsOCArNTEsOSBAQAogCiBta2RpciB3b3JrIHx8IGV4aXQgMQogY2Qgd29yayB8fCBleGl0IDEKLWV4cG9ydCBHSVRfRElSPS4uLy5naXQKLWV4cG9ydCBHSVRfQ09ORklHPSIkKHB3ZCkiLy4uLy5naXQvY29uZmlnCitHSVRfRElSPS4uLy5naXQKK0dJVF9DT05GSUc9IiQocHdkKSIvLi4vLmdpdC9jb25maWcKK2V4cG9ydCBHSVRfRElSIEdJVF9DT05GSUcKIAogZ2l0IGNvbmZpZyBjb3JlLmJhcmUgZmFsc2UKIHRlc3RfcmV2X3BhcnNlICdHSVRfRElSPS4uLy5naXQsIGNvcmUuYmFyZSA9IGZhbHNlJyBmYWxzZSBmYWxzZSB0cnVlICcnCkBAIC02NCw4ICs2NSw4IEBACiB0ZXN0X3Jldl9wYXJzZSAnR0lUX0RJUj0uLi8uZ2l0LCBjb3JlLmJhcmUgdW5kZWZpbmVkJyBmYWxzZSBmYWxzZSB0cnVlICcnCiAKIG12IC4uLy5naXQgLi4vcmVwby5naXQgfHwgZXhpdCAxCi1leHBvcnQgR0lUX0RJUj0uLi9yZXBvLmdpdAotZXhwb3J0IEdJVF9DT05GSUc9IiQocHdkKSIvLi4vcmVwby5naXQvY29uZmlnCitHSVRfRElSPS4uL3JlcG8uZ2l0CitHSVRfQ09ORklHPSIkKHB3ZCkiLy4uL3JlcG8uZ2l0L2NvbmZpZwogCiBnaXQgY29uZmlnIGNvcmUuYmFyZSBmYWxzZQogdGVzdF9yZXZfcGFyc2UgJ0dJVF9ESVI9Li4vcmVwby5naXQsIGNvcmUuYmFyZSA9IGZhbHNlJyBmYWxzZSBmYWxzZSB0cnVlICcnCmRpZmYgLS1naXQgYS90L3QxNTAxLXdvcmt0cmVlLnNoIGIvdC90MTUwMS13b3JrdHJlZS5zaAppbmRleCA3ZWUzODIwLi4yZWU4OGQ4IDEwMDc1NQotLS0gYS90L3QxNTAxLXdvcmt0cmVlLnNoCisrKyBiL3QvdDE1MDEtd29ya3RyZWUuc2gKQEAgLTMyLDI0ICszMiwyNSBAQAogbXYgLmdpdCByZXBvLmdpdCB8fCBleGl0IDEKIAogc2F5ICJjb3JlLndvcmt0cmVlID0gcmVsYXRpdmUgcGF0aCIKLWV4cG9ydCBHSVRfRElSPXJlcG8uZ2l0Ci1leHBvcnQgR0lUX0NPTkZJRz0iJChwd2QpIi8kR0lUX0RJUi9jb25maWcKK0dJVF9ESVI9cmVwby5naXQKK0dJVF9DT05GSUc9IiQocHdkKSIvJEdJVF9ESVIvY29uZmlnCitleHBvcnQgR0lUX0RJUiBHSVRfQ09ORklHCiB1bnNldCBHSVRfV09SS19UUkVFCiBnaXQgY29uZmlnIGNvcmUud29ya3RyZWUgLi4vd29yawogdGVzdF9yZXZfcGFyc2UgJ291dHNpZGUnICAgICAgZmFsc2UgZmFsc2UgZmFsc2UKIGNkIHdvcmsgfHwgZXhpdCAxCi1leHBvcnQgR0lUX0RJUj0uLi9yZXBvLmdpdAotZXhwb3J0IEdJVF9DT05GSUc9IiQocHdkKSIvJEdJVF9ESVIvY29uZmlnCitHSVRfRElSPS4uL3JlcG8uZ2l0CitHSVRfQ09ORklHPSIkKHB3ZCkiLyRHSVRfRElSL2NvbmZpZwogdGVzdF9yZXZfcGFyc2UgJ2luc2lkZScgICAgICAgZmFsc2UgZmFsc2UgdHJ1ZSAnJwogY2Qgc3ViL2RpciB8fCBleGl0IDEKLWV4cG9ydCBHSVRfRElSPS4uLy4uLy4uL3JlcG8uZ2l0Ci1leHBvcnQgR0lUX0NPTkZJRz0iJChwd2QpIi8kR0lUX0RJUi9jb25maWcKK0dJVF9ESVI9Li4vLi4vLi4vcmVwby5naXQKK0dJVF9DT05GSUc9IiQocHdkKSIvJEdJVF9ESVIvY29uZmlnCiB0ZXN0X3Jldl9wYXJzZSAnc3ViZGlyZWN0b3J5JyBmYWxzZSBmYWxzZSB0cnVlIHN1Yi9kaXIvCiBjZCAuLi8uLi8uLiB8fCBleGl0IDEKIAogc2F5ICJjb3JlLndvcmt0cmVlID0gYWJzb2x1dGUgcGF0aCIKLWV4cG9ydCBHSVRfRElSPSQocHdkKS9yZXBvLmdpdAotZXhwb3J0IEdJVF9DT05GSUc9JEdJVF9ESVIvY29uZmlnCitHSVRfRElSPSQocHdkKS9yZXBvLmdpdAorR0lUX0NPTkZJRz0kR0lUX0RJUi9jb25maWcKIGdpdCBjb25maWcgY29yZS53b3JrdHJlZSAiJChwd2QpL3dvcmsiCiB0ZXN0X3Jldl9wYXJzZSAnb3V0c2lkZScgICAgICBmYWxzZSBmYWxzZSBmYWxzZQogY2Qgd29yayB8fCBleGl0IDEKQEAgLTU5LDI1ICs2MCwyNiBAQAogY2QgLi4vLi4vLi4gfHwgZXhpdCAxCiAKIHNheSAiR0lUX1dPUktfVFJFRT1yZWxhdGl2ZSBwYXRoIChvdmVycmlkZSBjb3JlLndvcmt0cmVlKSIKLWV4cG9ydCBHSVRfRElSPSQocHdkKS9yZXBvLmdpdAotZXhwb3J0IEdJVF9DT05GSUc9JEdJVF9ESVIvY29uZmlnCitHSVRfRElSPSQocHdkKS9yZXBvLmdpdAorR0lUX0NPTkZJRz0kR0lUX0RJUi9jb25maWcKIGdpdCBjb25maWcgY29yZS53b3JrdHJlZSBub24tZXhpc3RlbnQKLWV4cG9ydCBHSVRfV09SS19UUkVFPXdvcmsKK0dJVF9XT1JLX1RSRUU9d29yaworZXhwb3J0IEdJVF9XT1JLX1RSRUUKIHRlc3RfcmV2X3BhcnNlICdvdXRzaWRlJyAgICAgIGZhbHNlIGZhbHNlIGZhbHNlCiBjZCB3b3JrIHx8IGV4aXQgMQotZXhwb3J0IEdJVF9XT1JLX1RSRUU9LgorR0lUX1dPUktfVFJFRT0uCiB0ZXN0X3Jldl9wYXJzZSAnaW5zaWRlJyAgICAgICBmYWxzZSBmYWxzZSB0cnVlICcnCiBjZCBzdWIvZGlyIHx8IGV4aXQgMQotZXhwb3J0IEdJVF9XT1JLX1RSRUU9Li4vLi4KK0dJVF9XT1JLX1RSRUU9Li4vLi4KIHRlc3RfcmV2X3BhcnNlICdzdWJkaXJlY3RvcnknIGZhbHNlIGZhbHNlIHRydWUgc3ViL2Rpci8KIGNkIC4uLy4uLy4uIHx8IGV4aXQgMQogCiBtdiB3b3JrIHJlcG8uZ2l0L3dvcmsKIAogc2F5ICJHSVRfV09SS19UUkVFPWFic29sdXRlIHBhdGgsIHdvcmsgdHJlZSBiZWxvdyBnaXQgZGlyIgotZXhwb3J0IEdJVF9ESVI9JChwd2QpL3JlcG8uZ2l0Ci1leHBvcnQgR0lUX0NPTkZJRz0kR0lUX0RJUi9jb25maWcKLWV4cG9ydCBHSVRfV09SS19UUkVFPSQocHdkKS9yZXBvLmdpdC93b3JrCitHSVRfRElSPSQocHdkKS9yZXBvLmdpdAorR0lUX0NPTkZJRz0kR0lUX0RJUi9jb25maWcKK0dJVF9XT1JLX1RSRUU9JChwd2QpL3JlcG8uZ2l0L3dvcmsKIHRlc3RfcmV2X3BhcnNlICdvdXRzaWRlJyAgICAgICAgICAgICAgZmFsc2UgZmFsc2UgZmFsc2UKIGNkIHJlcG8uZ2l0IHx8IGV4aXQgMQogdGVzdF9yZXZfcGFyc2UgJ2luIHJlcG8uZ2l0JyAgICAgICAgICAgICAgZmFsc2UgdHJ1ZSAgZmFsc2UKZGlmZiAtLWdpdCBhL3QvdDE1MDItcmV2LXBhcnNlLXBhcnNlb3B0LnNoIGIvdC90MTUwMi1yZXYtcGFyc2UtcGFyc2VvcHQuc2gKaW5kZXggNzYyYWY1Zi4uMzUwOGQwYSAxMDA3NTUKLS0tIGEvdC90MTUwMi1yZXYtcGFyc2UtcGFyc2VvcHQuc2gKKysrIGIvdC90MTUwMi1yZXYtcGFyc2UtcGFyc2VvcHQuc2gKQEAgLTEzLDcgKzEzLDcgQEAKICAgICAtLWJhciAuLi4gICAgICAgICAgICAgc29tZSBjb29sIG9wdGlvbiAtLWJhciB3aXRoIGFuIGFyZ3VtZW50CiAKIEFuIG9wdGlvbiBncm91cCBIZWFkZXIKLSAgICAtQyBbLi4uXSAgICAgICAgICAgICAgb3B0aW9uIEMgd2l0aCBhbiBvcHRpb25hbCBhcmd1bWVudAorICAgIC1DWy4uLl0gICAgICAgICAgICAgICBvcHRpb24gQyB3aXRoIGFuIG9wdGlvbmFsIGFyZ3VtZW50CiAKIEV4dHJhcwogICAgIC0tZXh0cmExICAgICAgICAgICAgICBsaW5lIGFib3ZlIHVzZWQgdG8gY2F1c2UgYSBzZWdmYXVsdCBidXQgbm8gbG9uZ2VyIGRvZXMKQEAgLTM3LDcgKzM3LDcgQEAKIEV4dHJhcwogZXh0cmExICAgIGxpbmUgYWJvdmUgdXNlZCB0byBjYXVzZSBhIHNlZ2ZhdWx0IGJ1dCBubyBsb25nZXIgZG9lcwogRU9GCi0JZ2l0IGRpZmYgZXhwZWN0LmVyciBvdXRwdXQuZXJyCisJdGVzdF9jbXAgZXhwZWN0LmVyciBvdXRwdXQuZXJyCiAnCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTUwMy1yZXYtcGFyc2UtdmVyaWZ5LnNoIGIvdC90MTUwMy1yZXYtcGFyc2UtdmVyaWZ5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk1MjQ0YzkKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNTAzLXJldi1wYXJzZS12ZXJpZnkuc2gKQEAgLTAsMCArMSwxMDcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggQ2hyaXN0aWFuIENvdWRlcgorIwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5JworCitleGVjIDwvZGV2L251bGwKKworLiAuL3Rlc3QtbGliLnNoCisKK2FkZF9saW5lX2ludG9fZmlsZSgpCit7CisgICAgX2xpbmU9JDEKKyAgICBfZmlsZT0kMgorCisgICAgaWYgWyAtZiAiJF9maWxlIiBdOyB0aGVuCisgICAgICAgIGVjaG8gIiRfbGluZSIgPj4gJF9maWxlIHx8IHJldHVybiAkPworICAgICAgICBNU0c9IkFkZCA8JF9saW5lPiBpbnRvIDwkX2ZpbGU+LiIKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIiRfbGluZSIgPiAkX2ZpbGUgfHwgcmV0dXJuICQ/CisgICAgICAgIGdpdCBhZGQgJF9maWxlIHx8IHJldHVybiAkPworICAgICAgICBNU0c9IkNyZWF0ZSBmaWxlIDwkX2ZpbGU+IHdpdGggPCRfbGluZT4gaW5zaWRlLiIKKyAgICBmaQorCisgICAgdGVzdF90aWNrCisgICAgZ2l0LWNvbW1pdCAtLXF1aWV0IC1tICIkTVNHIiAkX2ZpbGUKK30KKworSEFTSDE9CitIQVNIMj0KK0hBU0gzPQorSEFTSDQ9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBiYXNpYyByZXBvIHdpdGggMSBmaWxlIChoZWxsbykgYW5kIDQgY29tbWl0cycgJworCWFkZF9saW5lX2ludG9fZmlsZSAiMTogSGVsbG8gV29ybGQiIGhlbGxvICYmCisJSEFTSDE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJYWRkX2xpbmVfaW50b19maWxlICIyOiBBIG5ldyBkYXkgZm9yIGdpdCIgaGVsbG8gJiYKKwlIQVNIMj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlhZGRfbGluZV9pbnRvX2ZpbGUgIjM6IEFub3RoZXIgbmV3IGRheSBmb3IgZ2l0IiBoZWxsbyAmJgorCUhBU0gzPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWFkZF9saW5lX2ludG9fZmlsZSAiNDogQ2lhbyBmb3Igbm93IiBoZWxsbyAmJgorCUhBU0g0PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3b3JrcyB3aXRoIG9uZSBnb29kIHJldicgJworCXJldl9oYXNoMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgJEhBU0gxKSAmJgorCXRlc3QgIiRyZXZfaGFzaDEiID0gIiRIQVNIMSIgJiYKKwlyZXZfaGFzaDI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICRIQVNIMikgJiYKKwl0ZXN0ICIkcmV2X2hhc2gyIiA9ICIkSEFTSDIiICYmCisJcmV2X2hhc2gzPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAkSEFTSDMpICYmCisJdGVzdCAiJHJldl9oYXNoMyIgPSAiJEhBU0gzIiAmJgorCXJldl9oYXNoND0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgJEhBU0g0KSAmJgorCXRlc3QgIiRyZXZfaGFzaDQiID0gIiRIQVNINCIgJiYKKwlyZXZfbWFzdGVyPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXIpICYmCisJdGVzdCAiJHJldl9tYXN0ZXIiID0gIiRIQVNINCIgJiYKKwlyZXZfaGVhZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwl0ZXN0ICIkcmV2X2hlYWQiID0gIiRIQVNINCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbHMgd2l0aCBhbnkgYmFkIHJldiBvciBtYW55IGdvb2QgcmV2cycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgMj5lcnJvciAmJgorCWdyZXAgInNpbmdsZSByZXZpc2lvbiIgZXJyb3IgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGZvbyAyPmVycm9yICYmCisJZ3JlcCAic2luZ2xlIHJldmlzaW9uIiBlcnJvciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCBiYXIgMj5lcnJvciAmJgorCWdyZXAgInNpbmdsZSByZXZpc2lvbiIgZXJyb3IgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGJheiBIRUFEIDI+ZXJyb3IgJiYKKwlncmVwICJzaW5nbGUgcmV2aXNpb24iIGVycm9yICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAkSEFTSDIgSEVBRCAyPmVycm9yICYmCisJZ3JlcCAic2luZ2xlIHJldmlzaW9uIiBlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlscyBzaWxlbnRseSB3aGVuIHVzaW5nIC1xJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXF1aWV0IDI+ZXJyb3IgJiYKKwl0ZXN0IC16ICIkKGNhdCBlcnJvcikiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtcSAtLXZlcmlmeSBmb28gMj5lcnJvciAmJgorCXRlc3QgLXogIiQoY2F0IGVycm9yKSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xIEhFQUQgYmFyIDI+ZXJyb3IgJiYKKwl0ZXN0IC16ICIkKGNhdCBlcnJvcikiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXF1aWV0IC0tdmVyaWZ5IGJheiBIRUFEIDI+ZXJyb3IgJiYKKwl0ZXN0IC16ICIkKGNhdCBlcnJvcikiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtcSAtLXZlcmlmeSAkSEFTSDIgSEVBRCAyPmVycm9yICYmCisJdGVzdCAteiAiJChjYXQgZXJyb3IpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBzdGRvdXQgb3V0cHV0IG9uIGVycm9yJyAnCisJdGVzdCAteiAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5KSIgJiYKKwl0ZXN0IC16ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgZm9vKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgYmF6IEhFQUQpIiAmJgorCXRlc3QgLXogIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEIGJhcikiICYmCisJdGVzdCAteiAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICRIQVNIMiBIRUFEKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlIC0tZGVmYXVsdCcgJworCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1kZWZhdWx0IG1hc3RlciAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1kZWZhdWx0IG1hc3RlciBIRUFEICYmCisJZ2l0IHJldi1wYXJzZSAtLWRlZmF1bHQgbWFzdGVyIC0tdmVyaWZ5ICYmCisJZ2l0IHJldi1wYXJzZSAtLWRlZmF1bHQgbWFzdGVyIC0tdmVyaWZ5IEhFQUQgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgLS1kZWZhdWx0IG1hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgZm9vIC0tZGVmYXVsdCBtYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tZGVmYXVsdCBIRUFEIC0tdmVyaWZ5IGJhciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1kZWZhdWx0IEhFQUQgYmF6ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLWRlZmF1bHQgZm9vIC0tdmVyaWZ5ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLWRlZmF1bHQgYmFyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjAwMi1jaGVja291dC1jYWNoZS11LnNoIGIvdC90MjAwMi1jaGVja291dC1jYWNoZS11LnNoCmluZGV4IDBmNDQxYmMuLjcwMzYxYzggMTAwNzU1Ci0tLSBhL3QvdDIwMDItY2hlY2tvdXQtY2FjaGUtdS5zaAorKysgYi90L3QyMDAyLWNoZWNrb3V0LWNhY2hlLXUuc2gKQEAgLTIxLDEzICsyMSwxMyBAQAogcm0gLWYgcGF0aDAgJiYKIGdpdCByZWFkLXRyZWUgJHQgJiYKIGdpdCBjaGVja291dC1pbmRleCAtZiAtYSAmJgotISBnaXQgZGlmZi1maWxlcyB8IGRpZmYgLSAvZGV2L251bGwnCit0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi1maWxlcyAtLWV4aXQtY29kZScKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAnd2l0aCAtdSwgZ2l0IGNoZWNrb3V0LWluZGV4IHBpY2tzIHVwIHN0YXQgaW5mb3JtYXRpb24gZnJvbSBuZXcgZmlsZXMuJyAnCiBybSAtZiBwYXRoMCAmJgogZ2l0IHJlYWQtdHJlZSAkdCAmJgogZ2l0IGNoZWNrb3V0LWluZGV4IC11IC1mIC1hICYmCi1naXQgZGlmZi1maWxlcyB8IGRpZmYgLSAvZGV2L251bGwnCitnaXQgZGlmZi1maWxlcyAtLWV4aXQtY29kZScKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMTAzLXVwZGF0ZS1pbmRleC1pZ25vcmUtbWlzc2luZy5zaCBiL3QvdDIxMDMtdXBkYXRlLWluZGV4LWlnbm9yZS1taXNzaW5nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMzMjY5NGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMTAzLXVwZGF0ZS1pbmRleC1pZ25vcmUtbWlzc2luZy5zaApAQCAtMCwwICsxLDg5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndXBkYXRlLWluZGV4IHdpdGggb3B0aW9ucycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgYmFzaWNzICcKKwk+b25lICYmCisJPnR3byAmJgorCT50aHJlZSAmJgorCisJIyBuZWVkIC0tYWRkIHdoZW4gYWRkaW5nCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCBvbmUgJiYKKwl0ZXN0IC16ICIkKGdpdCBscy1maWxlcykiICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBvbmUgJiYKKwl0ZXN0IHpvbmUgPSAieiQoZ2l0IGxzLWZpbGVzKSIgJiYKKworCSMgdXBkYXRlLWluZGV4IGlzIGF0b21pYworCWVjaG8gMSA+b25lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCBvbmUgdHdvICYmCisJZWNobyAiTQlvbmUiID5leHBlY3QgJiYKKwlnaXQgZGlmZi1maWxlcyAtLW5hbWUtc3RhdHVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIG9uZSB0d28gdGhyZWUgJiYKKwlmb3IgaSBpbiBvbmUgdGhyZWUgdHdvOyBkbyBlY2hvICRpOyBkb25lID5leHBlY3QgJiYKKwlnaXQgbHMtZmlsZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCXRlc3RfdGljayAmJgorCSgKKwkJdGVzdF9jcmVhdGVfcmVwbyB4eXp6eSAmJgorCQljZCB4eXp6eSAmJgorCQk+ZmlsZSAmJgorCQlnaXQgYWRkIGZpbGUKKwkJZ2l0IGNvbW1pdCAtbSAic3ViIGluaXRpYWwiCisJKSAmJgorCWdpdCBhZGQgeHl6enkgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCB0YWcgaW5pdGlhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWlnbm9yZS1taXNzaW5nIC0tcmVmcmVzaCcgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCWVjaG8gMiA+b25lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwllY2hvIDEgPm9uZSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJcm0gLWYgdHdvICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0taWdub3JlLW1pc3NpbmcgLS1yZWZyZXNoCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS11bm1lcmdlZCAtLXJlZnJlc2gnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwlpbmZvPSQoZ2l0IGxzLWZpbGVzIC1zIG9uZSB8IHNlZCAtZSAicy8gMAkvIDEJLyIpICYmCisJZ2l0IHJtIC0tY2FjaGVkIG9uZSAmJgorCWVjaG8gIiRpbmZvIiB8IGdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tdW5tZXJnZWQgLS1yZWZyZXNoICYmCisJZWNobyAyID50d28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tdW5tZXJnZWQgLS1yZWZyZXNoID5hY3R1YWwgJiYKKwlncmVwIHR3byBhY3R1YWwgJiYKKwkhIGdyZXAgb25lIGFjdHVhbCAmJgorCSEgZ3JlcCB0aHJlZSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1pZ25vcmUtc3VibW9kdWxlcyAtLXJlZnJlc2ggKDEpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJcm0gLWYgdHdvICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLWlnbm9yZS1zdWJtb2R1bGVzIC0tcmVmcmVzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWlnbm9yZS1zdWJtb2R1bGVzIC0tcmVmcmVzaCAoMiknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X3RpY2sgJiYKKwkoCisJCWNkIHh5enp5ICYmCisJCWdpdCBjb21taXQgLW0gInN1YiBzZWNvbmQiIC0tYWxsb3ctZW1wdHkKKwkpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0taWdub3JlLW1pc3NpbmcgLS1yZWZyZXNoICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWlnbm9yZS1zdWJtb2R1bGVzIC0tcmVmcmVzaAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIyMDAtYWRkLXVwZGF0ZS5zaCBiL3QvdDIyMDAtYWRkLXVwZGF0ZS5zaAppbmRleCBiNjY0MzQxLi5mNTdhNmUwIDEwMDc1NQotLS0gYS90L3QyMjAwLWFkZC11cGRhdGUuc2gKKysrIGIvdC90MjIwMC1hZGQtdXBkYXRlLnNoCkBAIC0xMTEsNCArMTExLDIxIEBACiAKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIC1uIC11IHNob3VsZCBub3QgYWRkIGJ1dCBqdXN0IHJlcG9ydCcgJworCisJKAorCQllY2hvICJhZGQgJ1wnJ2NoZWNrJ1wnJyIgJiYKKwkJZWNobyAicmVtb3ZlICdcJyd0b3AnXCcnIgorCSkgPmV4cGVjdCAmJgorCWJlZm9yZT0kKGdpdCBscy1maWxlcyAtcyBjaGVjayB0b3ApICYmCisJZWNobyBjaGFuZ2VkID4+Y2hlY2sgJiYKKwlybSAtZiB0b3AgJiYKKwlnaXQgYWRkIC1uIC11ID5hY3R1YWwgJiYKKwlhZnRlcj0kKGdpdCBscy1maWxlcyAtcyBjaGVjayB0b3ApICYmCisKKwl0ZXN0ICIkYmVmb3JlIiA9ICIkYWZ0ZXIiICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzAwMS1scy1maWxlcy1vdGhlcnMtZXhjbHVkZS5zaCBiL3QvdDMwMDEtbHMtZmlsZXMtb3RoZXJzLWV4Y2x1ZGUuc2gKaW5kZXggNTVmMDU3Yy4uMWNhZWFjYSAxMDA3NTUKLS0tIGEvdC90MzAwMS1scy1maWxlcy1vdGhlcnMtZXhjbHVkZS5zaAorKysgYi90L3QzMDAxLWxzLWZpbGVzLW90aGVycy1leGNsdWRlLnNoCkBAIC02NSw3ICs2NSw3IEBACiAgICAgICAgLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9LmdpdGlnbm9yZSBcCiAgICAgICAgLS1leGNsdWRlLWZyb209LmdpdC9pZ25vcmUgXAogICAgICAgID5vdXRwdXQgJiYKLSAgICAgZ2l0IGRpZmYgZXhwZWN0IG91dHB1dCcKKyAgICAgdGVzdF9jbXAgZXhwZWN0IG91dHB1dCcKIAogIyBUZXN0IFxyXG4gKE1TRE9TLWxpa2Ugc3lzdGVtcykKIHByaW50ZiAnKi4xXHJcbi8qLjNcclxuISouNlxyXG4nID4uZ2l0aWdub3JlCkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgICAgLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9LmdpdGlnbm9yZSBcCiAgICAgICAgLS1leGNsdWRlLWZyb209LmdpdC9pZ25vcmUgXAogICAgICAgID5vdXRwdXQgJiYKLSAgICAgZ2l0IGRpZmYgZXhwZWN0IG91dHB1dCcKKyAgICAgdGVzdF9jbXAgZXhwZWN0IG91dHB1dCcKIAogY2F0ID4gZXhjbHVkZXMtZmlsZSA8PCBFT0YKICouWzEtOF0KZGlmZiAtLWdpdCBhL3QvdDMwMDItbHMtZmlsZXMtZGFzaHBhdGguc2ggYi90L3QzMDAyLWxzLWZpbGVzLWRhc2hwYXRoLnNoCmluZGV4IDg2ODdhMDEuLjg3MDRiMDQgMTAwNzU1Ci0tLSBhL3QvdDMwMDItbHMtZmlsZXMtZGFzaHBhdGguc2gKKysrIGIvdC90MzAwMi1scy1maWxlcy1kYXNocGF0aC5zaApAQCAtMjMsNyArMjMsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2dpdCBscy1maWxlcyB3aXRob3V0IHBhdGggcmVzdHJpY3Rpb24uJyBcCiAgICAgJ2dpdCBscy1maWxlcyAtLW90aGVycyA+b3V0cHV0ICYmCi0gICAgIGdpdCBkaWZmIG91dHB1dCAtIDw8RU9GCisgICAgIHRlc3RfY21wIG91dHB1dCAtIDw8RU9GCiAtLQogLWZvbwogb3V0cHV0CkBAIC0zNCw3ICszNCw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnZ2l0IGxzLWZpbGVzIHdpdGggcGF0aCByZXN0cmljdGlvbi4nIFwKICAgICAnZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIHBhdGgwID5vdXRwdXQgJiYKLQlnaXQgZGlmZiBvdXRwdXQgLSA8PEVPRgorCXRlc3RfY21wIG91dHB1dCAtIDw8RU9GCiBwYXRoMAogRU9GCiAnCkBAIC00Miw3ICs0Miw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnZ2l0IGxzLWZpbGVzIHdpdGggcGF0aCByZXN0cmljdGlvbiB3aXRoIC0tLicgXAogICAgICdnaXQgbHMtZmlsZXMgLS1vdGhlcnMgLS0gcGF0aDAgPm91dHB1dCAmJgotCWdpdCBkaWZmIG91dHB1dCAtIDw8RU9GCisJdGVzdF9jbXAgb3V0cHV0IC0gPDxFT0YKIHBhdGgwCiBFT0YKICcKQEAgLTUwLDcgKzUwLDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdnaXQgbHMtZmlsZXMgd2l0aCBwYXRoIHJlc3RyaWN0aW9uIHdpdGggLS0gLS0uJyBcCiAgICAgJ2dpdCBscy1maWxlcyAtLW90aGVycyAtLSAtLSA+b3V0cHV0ICYmCi0JZ2l0IGRpZmYgb3V0cHV0IC0gPDxFT0YKKwl0ZXN0X2NtcCBvdXRwdXQgLSA8PEVPRgogLS0KIEVPRgogJwpAQCAtNTgsNyArNTgsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2dpdCBscy1maWxlcyB3aXRoIG5vIHBhdGggcmVzdHJpY3Rpb24uJyBcCiAgICAgJ2dpdCBscy1maWxlcyAtLW90aGVycyAtLSA+b3V0cHV0ICYmCi0JZ2l0IGRpZmYgb3V0cHV0IC0gPDxFT0YKKwl0ZXN0X2NtcCBvdXRwdXQgLSA8PEVPRgogLS0KIC1mb28KIG91dHB1dApkaWZmIC0tZ2l0IGEvdC90MzAzMC1tZXJnZS1yZWN1cnNpdmUuc2ggYi90L3QzMDMwLW1lcmdlLXJlY3Vyc2l2ZS5zaAppbmRleCA2MDdmNTdmLi5hZmYzNjAzIDEwMDc1NQotLS0gYS90L3QzMDMwLW1lcmdlLXJlY3Vyc2l2ZS5zaAorKysgYi90L3QzMDMwLW1lcmdlLXJlY3Vyc2l2ZS5zaApAQCAtNDMsNyArNDMsNyBAQAogCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKIAkJZWNobyAiMTAwNjQ0ICRvMSAwCWQvZSIKIAkpID5leHBlY3RlZCAmJgotCWdpdCBkaWZmIC11IGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAyJyAnCkBAIC02MSw3ICs2MSw3IEBACiAJCWVjaG8gIjEwMDY0NCAkbzAgMAljIgogCQllY2hvICIxMDA2NDQgJG8wIDAJZC9lIgogCSkgPmV4cGVjdGVkICYmCi0JZ2l0IGRpZmYgLXUgZXhwZWN0ZWQgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCiAKIAllY2hvIGdvb2RieWUgPj5hICYmCiAJbzI9JChnaXQgaGFzaC1vYmplY3QgYSkgJiYKQEAgLTgyLDcgKzgyLDcgQEAKIAkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiCiAJCWVjaG8gIjEwMDY0NCAkbzAgMAlkL2UiCiAJKSA+ZXhwZWN0ZWQgJiYKLQlnaXQgZGlmZiAtdSBleHBlY3RlZCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgMycgJwpAQCAtMTAwLDcgKzEwMCw3IEBACiAJCWVjaG8gIjEwMDY0NCAkbzAgMAljIgogCQllY2hvICIxMDA2NDQgJG8wIDAJZC9lIgogCSkgPmV4cGVjdGVkICYmCi0JZ2l0IGRpZmYgLXUgZXhwZWN0ZWQgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCiAKIAlybSAtZiBiICYmIG1rZGlyIGIgJiYgZWNobyBkZi0xID5iL2MgJiYgZ2l0IGFkZCBiL2MgJiYKIAlvMz0kKGdpdCBoYXNoLW9iamVjdCBiL2MpICYmCkBAIC0xMTksNyArMTE5LDcgQEAKIAkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiCiAJCWVjaG8gIjEwMDY0NCAkbzAgMAlkL2UiCiAJKSA+ZXhwZWN0ZWQgJiYKLQlnaXQgZGlmZiAtdSBleHBlY3RlZCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgNCcgJwpAQCAtMTM3LDcgKzEzNyw3IEBACiAJCWVjaG8gIjEwMDY0NCAkbzAgMAljIgogCQllY2hvICIxMDA2NDQgJG8wIDAJZC9lIgogCSkgPmV4cGVjdGVkICYmCi0JZ2l0IGRpZmYgLXUgZXhwZWN0ZWQgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCiAKIAlybSAtZiBhICYmIG1rZGlyIGEgJiYgZWNobyBkZi0yID5hL2MgJiYgZ2l0IGFkZCBhL2MgJiYKIAlvND0kKGdpdCBoYXNoLW9iamVjdCBhL2MpICYmCkBAIC0xNTYsNyArMTU2LDcgQEAKIAkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiCiAJCWVjaG8gIjEwMDY0NCAkbzAgMAlkL2UiCiAJKSA+ZXhwZWN0ZWQgJiYKLQlnaXQgZGlmZiAtdSBleHBlY3RlZCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgNScgJwpAQCAtMTc0LDcgKzE3NCw3IEBACiAJCWVjaG8gIjEwMDY0NCAkbzAgMAljIgogCQllY2hvICIxMDA2NDQgJG8wIDAJZC9lIgogCSkgPmV4cGVjdGVkICYmCi0JZ2l0IGRpZmYgLXUgZXhwZWN0ZWQgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCiAKIAlybSAtZiBiICYmCiAJZWNobyByZW1vdmUtY29uZmxpY3QgPmEgJiYKQEAgLTE5NSw3ICsxOTUsNyBAQAogCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKIAkJZWNobyAiMTAwNjQ0ICRvMCAwCWQvZSIKIAkpID5leHBlY3RlZCAmJgotCWdpdCBkaWZmIC11IGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogCiAnCiAKQEAgLTIxNCw3ICsyMTQsNyBAQAogCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKIAkJZWNobyAiMTAwNjQ0ICRvMCAwCWQvZSIKIAkpID5leHBlY3RlZCAmJgotCWdpdCBkaWZmIC11IGV4cGVjdGVkIGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgogCiAJcm0gLWZyIGQgJiYgZWNobyBkZi0zID5kICYmIGdpdCBhZGQgZCAmJgogCW82PSQoZ2l0IGhhc2gtb2JqZWN0IGQpICYmCkBAIC0yMzMsNyArMjMzLDcgQEAKIAkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiCiAJCWVjaG8gIjEwMDY0NCAkbzYgMAlkIgogCSkgPmV4cGVjdGVkICYmCi0JZ2l0IGRpZmYgLXUgZXhwZWN0ZWQgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSBzaW1wbGUnICcKQEAgLTI2NSw3ICsyNjUsNyBAQAogCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKIAkJZWNobyAiMTAwNjQ0ICRvMSAwCWQvZSIKIAkpID5leHBlY3RlZCAmJgotCWdpdCBkaWZmIC11IGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogCiAnCiAKQEAgLTI5Nyw3ICsyOTcsNyBAQAogCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKIAkJZWNobyAiMTAwNjQ0ICRvMSAwCWQvZSIKIAkpID5leHBlY3RlZCAmJgotCWdpdCBkaWZmIC11IGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogCiAnCiAKQEAgLTMxOCw3ICszMTgsNyBAQAogCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKIAkJZWNobyAiMTAwNjQ0ICRvMSAwCWQvZSIKIAkpID5leHBlY3RlZCAmJgotCWdpdCBkaWZmIC11IGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogCiAnCiAKQEAgLTM1Miw3ICszNTIsNyBAQAogCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKIAkJZWNobyAiMTAwNjQ0ICRvMSAwCWQvZSIKIAkpID5leHBlY3RlZCAmJgotCWdpdCBkaWZmIC11IGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogCiAnCiAKQEAgLTM4Niw3ICszODYsNyBAQAogCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKIAkJZWNobyAiMTAwNjQ0ICRvMSAwCWQvZSIKIAkpID5leHBlY3RlZCAmJgotCWdpdCBkaWZmIC11IGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogCiAnCiAKQEAgLTQyMCw3ICs0MjAsNyBAQAogCQllY2hvICIxMDA2NDQgJG8wIDEJZC9lIgogCQllY2hvICIxMDA2NDQgJG8xIDIJZC9lIgogCSkgPmV4cGVjdGVkICYmCi0JZ2l0IGRpZmYgLXUgZXhwZWN0ZWQgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAKICcKIApAQCAtNDU0LDcgKzQ1NCw3IEBACiAJCWVjaG8gIjEwMDY0NCAkbzAgMQlkL2UiCiAJCWVjaG8gIjEwMDY0NCAkbzEgMwlkL2UiCiAJKSA+ZXhwZWN0ZWQgJiYKLQlnaXQgZGlmZiAtdSBleHBlY3RlZCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKIAogJwogCkBAIC00ODAsNyArNDgwLDcgQEAKIAkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiCiAJCWVjaG8gIjEwMDY0NCAkbzEgMAlkL2UiCiAJKSA+ZXhwZWN0ZWQgJiYKLQlnaXQgZGlmZiAtdSBleHBlY3RlZCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKIAogCWdpdCByZWFkLXRyZWUgLS1wcmVmaXg9YTEvIG1hc3RlciAmJgogCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsICYmCkBAIC00OTgsNyArNDk4LDcgQEAKIAkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiCiAJCWVjaG8gIjEwMDY0NCAkbzEgMAlkL2UiCiAJKSA+ZXhwZWN0ZWQgJiYKLQlnaXQgZGlmZiAtdSBleHBlY3RlZCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKIAogCWdpdCByZWFkLXRyZWUgLS1wcmVmaXg9ei8gbWFzdGVyICYmCiAJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwgJiYKQEAgLTUyMCw3ICs1MjAsNyBAQAogCQllY2hvICIxMDA2NDQgJG8wIDAJei9jIgogCQllY2hvICIxMDA2NDQgJG8xIDAJei9kL2UiCiAJKSA+ZXhwZWN0ZWQgJiYKLQlnaXQgZGlmZiAtdSBleHBlY3RlZCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKIAogJwogCmRpZmYgLS1naXQgYS90L3QzMDQwLXN1YnByb2plY3RzLWJhc2ljLnNoIGIvdC90MzA0MC1zdWJwcm9qZWN0cy1iYXNpYy5zaAppbmRleCA3OWI5ZjIzLi5mNjk3M2U5IDEwMDc1NQotLS0gYS90L3QzMDQwLXN1YnByb2plY3RzLWJhc2ljLnNoCisrKyBiL3QvdDMwNDAtc3VicHJvamVjdHMtYmFzaWMuc2gKQEAgLTI0LDcgKzI0LDcgQEAKICAgICBnaXQgYWRkIHN1YjIgJiYKICAgICBnaXQgY29tbWl0IC1xIC1tICJzdWJwcm9qZWN0cyBhZGRlZCIgJiYKICAgICBnaXQgZGlmZi10cmVlIC0tYWJicmV2PTUgSEVBRF4gSEVBRCB8Y3V0IC1kIiAiIC1mLTMsNS0gPmN1cnJlbnQgJiYKLSAgICBnaXQgZGlmZiBleHBlY3RlZCBjdXJyZW50JworICAgIHRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQnCiAKIGdpdCBicmFuY2ggc2F2ZSBIRUFECiAKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAnZ2l0IGxzLWZpbGVzIC1zID5leHBlY3RlZCAmJgogICAgIGdpdCBjbG9uZSAtbCAtcyAuIGNsb25lZCAmJgogICAgICggY2QgY2xvbmVkICYmIGdpdCBscy1maWxlcyAtcyApID5jdXJyZW50ICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0ZWQgY3VycmVudCcKKyAgICB0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50JwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmluZyBhbmQgYWRkaW5nIHN1YnByb2plY3QnIFwKICAgICAnZ2l0IHVwZGF0ZS1pbmRleCAtLWZvcmNlLXJlbW92ZSAtLSBzdWIyICYmCmRpZmYgLS1naXQgYS90L3QzMDUwLXN1YnByb2plY3RzLWZldGNoLnNoIGIvdC90MzA1MC1zdWJwcm9qZWN0cy1mZXRjaC5zaAppbmRleCAyYjIxYjEwLi40MjYxZTk2IDEwMDc1NQotLS0gYS90L3QzMDUwLXN1YnByb2plY3RzLWZldGNoLnNoCisrKyBiL3QvdDMwNTAtc3VicHJvamVjdHMtZmV0Y2guc2gKQEAgLTIwLDcgKzIwLDcgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBjbG9uZSAnCi0JZ2l0IGNsb25lIGZpbGU6Ly9gcHdkYC8uZ2l0IGNsb25lZCAmJgorCWdpdCBjbG9uZSAiZmlsZTovLyQocHdkKS8uZ2l0IiBjbG9uZWQgJiYKIAkoZ2l0IHJldi1wYXJzZSBIRUFEOyBnaXQgbHMtZmlsZXMgLXMpID5leHBlY3RlZCAmJgogCSgKIAkJY2QgY2xvbmVkICYmCmRpZmYgLS1naXQgYS90L3QzMTAwLWxzLXRyZWUtcmVzdHJpY3Quc2ggYi90L3QzMTAwLWxzLXRyZWUtcmVzdHJpY3Quc2gKaW5kZXggNDY0MjdlMy4uNmU2YTI1NCAxMDA3NTUKLS0tIGEvdC90MzEwMC1scy10cmVlLXJlc3RyaWN0LnNoCisrKyBiL3QvdDMxMDAtbHMtdHJlZS1yZXN0cmljdC5zaApAQCAtMzUsNyArMzUsNyBAQAogX3g0MD0iJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCIKIHRlc3Rfb3V0cHV0ICgpIHsKICAgICBzZWQgLWUgInMvICRfeDQwCS8gWAkvIiA8Y3VycmVudCA+Y2hlY2sKLSAgICBnaXQgZGlmZiBleHBlY3RlZCBjaGVjaworICAgIHRlc3RfY21wIGV4cGVjdGVkIGNoZWNrCiB9CiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXApkaWZmIC0tZ2l0IGEvdC90MzEwMS1scy10cmVlLWRpcm5hbWUuc2ggYi90L3QzMTAxLWxzLXRyZWUtZGlybmFtZS5zaAppbmRleCA3MGY5Y2U5Li40ZGQ3ZDEyIDEwMDc1NQotLS0gYS90L3QzMTAxLWxzLXRyZWUtZGlybmFtZS5zaAorKysgYi90L3QzMTAxLWxzLXRyZWUtZGlybmFtZS5zaApAQCAtNDMsNyArNDMsNyBAQAogX3g0MD0iJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCIKIHRlc3Rfb3V0cHV0ICgpIHsKICAgICBzZWQgLWUgInMvICRfeDQwCS8gWAkvIiA8Y3VycmVudCA+Y2hlY2sKLSAgICBnaXQgZGlmZiBleHBlY3RlZCBjaGVjaworICAgIHRlc3RfY21wIGV4cGVjdGVkIGNoZWNrCiB9CiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXApkaWZmIC0tZ2l0IGEvdC90MzIwMC1icmFuY2guc2ggYi90L3QzMjAwLWJyYW5jaC5zaAppbmRleCBjYjVmN2E0Li44ZDg3Njg2IDEwMDc1NQotLS0gYS90L3QzMjAwLWJyYW5jaC5zaAorKysgYi90L3QzMjAwLWJyYW5jaC5zaApAQCAtMjI0LDQgKzIyNCwyMzggQEAKIAl0ZXN0IC16ICIkKGdpdCBjb25maWcgYnJhbmNoLmFsbDEubWVyZ2UpIgogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgbG9jYWwgb24gYSB0cmFja2VkIGxvY2FsIGJyYW5jaCcgJworCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwcmViYXNlIGxvY2FsICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbyB8fCBnaXQtZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCBteWJhc2UgJiYKKwlnaXQgYnJhbmNoIC0tdHJhY2sgbXlyMSBteWJhc2UgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjEucmVtb3RlKSIgPSAuICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXIxLm1lcmdlKSIgPSByZWZzL2hlYWRzL215YmFzZSAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMS5yZWJhc2UpIiA9IHRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIGFsd2F5cyBvbiBhIHRyYWNrZWQgbG9jYWwgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXByZWJhc2UgYWx3YXlzICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbyB8fCBnaXQtZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCBteWJhc2UyICYmCisJZ2l0IGJyYW5jaCAtLXRyYWNrIG15cjIgbXliYXNlICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXIyLnJlbW90ZSkiID0gLiAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMi5tZXJnZSkiID0gcmVmcy9oZWFkcy9teWJhc2UgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjIucmViYXNlKSIgPSB0cnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSByZW1vdGUgb24gYSB0cmFja2VkIGxvY2FsIGJyYW5jaCcgJworCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwcmViYXNlIHJlbW90ZSAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL28gfHwgZ2l0LWZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggbXliYXNlMyAmJgorCWdpdCBicmFuY2ggLS10cmFjayBteXIzIG15YmFzZTIgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjMucmVtb3RlKSIgPSAuICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXIzLm1lcmdlKSIgPSByZWZzL2hlYWRzL215YmFzZTIgJiYKKwkhIHRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMy5yZWJhc2UpIiA9IHRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIG5ldmVyIG9uIGEgdHJhY2tlZCBsb2NhbCBicmFuY2gnICcKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSBuZXZlciAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL28gfHwgZ2l0LWZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggbXliYXNlNCAmJgorCWdpdCBicmFuY2ggLS10cmFjayBteXI0IG15YmFzZTIgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjQucmVtb3RlKSIgPSAuICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI0Lm1lcmdlKSIgPSByZWZzL2hlYWRzL215YmFzZTIgJiYKKwkhIHRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyNC5yZWJhc2UpIiA9IHRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIGxvY2FsIG9uIGEgdHJhY2tlZCByZW1vdGUgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXByZWJhc2UgbG9jYWwgJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgfHwgZ2l0LWZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggLS10cmFjayBteXI1IGxvY2FsL21hc3RlciAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyNS5yZW1vdGUpIiA9IGxvY2FsICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI1Lm1lcmdlKSIgPSByZWZzL2hlYWRzL21hc3RlciAmJgorCSEgdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI1LnJlYmFzZSkiID0gdHJ1ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgbmV2ZXIgb24gYSB0cmFja2VkIHJlbW90ZSBicmFuY2gnICcKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSBuZXZlciAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQtZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLXRyYWNrIG15cjYgbG9jYWwvbWFzdGVyICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI2LnJlbW90ZSkiID0gbG9jYWwgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjYubWVyZ2UpIiA9IHJlZnMvaGVhZHMvbWFzdGVyICYmCisJISB0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjYucmViYXNlKSIgPSB0cnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSByZW1vdGUgb24gYSB0cmFja2VkIHJlbW90ZSBicmFuY2gnICcKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSByZW1vdGUgJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgfHwgZ2l0LWZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggLS10cmFjayBteXI3IGxvY2FsL21hc3RlciAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyNy5yZW1vdGUpIiA9IGxvY2FsICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI3Lm1lcmdlKSIgPSByZWZzL2hlYWRzL21hc3RlciAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyNy5yZWJhc2UpIiA9IHRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIGFsd2F5cyBvbiBhIHRyYWNrZWQgcmVtb3RlIGJyYW5jaCcgJworCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwcmViYXNlIHJlbW90ZSAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQtZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLXRyYWNrIG15cjggbG9jYWwvbWFzdGVyICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI4LnJlbW90ZSkiID0gbG9jYWwgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjgubWVyZ2UpIiA9IHJlZnMvaGVhZHMvbWFzdGVyICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI4LnJlYmFzZSkiID0gdHJ1ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgdW5jb25maWd1cmVkIG9uIGEgdHJhY2tlZCByZW1vdGUgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGJyYW5jaC5hdXRvc2V0dXByZWJhc2UgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQtZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLXRyYWNrIG15cjkgbG9jYWwvbWFzdGVyICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI5LnJlbW90ZSkiID0gbG9jYWwgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjkubWVyZ2UpIiA9IHJlZnMvaGVhZHMvbWFzdGVyICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyOS5yZWJhc2UpIiA9IHoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIHVuY29uZmlndXJlZCBvbiBhIHRyYWNrZWQgbG9jYWwgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9vIHx8IGdpdC1mZXRjaCBsb2NhbCkgJiYKKwlnaXQgYnJhbmNoIG15YmFzZTEwICYmCisJZ2l0IGJyYW5jaCAtLXRyYWNrIG15cjEwIG15YmFzZTIgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjEwLnJlbW90ZSkiID0gLiAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTAubWVyZ2UpIiA9IHJlZnMvaGVhZHMvbXliYXNlMiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjEwLnJlYmFzZSkiID0gegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgdW5jb25maWd1cmVkIG9uIHVudHJhY2tlZCBsb2NhbCBicmFuY2gnICcKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQtZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLW5vLXRyYWNrIG15cjExIG15YmFzZTIgJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxMS5yZW1vdGUpIiA9IHogJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxMS5tZXJnZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjExLnJlYmFzZSkiID0gegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgdW5jb25maWd1cmVkIG9uIHVudHJhY2tlZCByZW1vdGUgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgfHwgZ2l0LWZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggLS1uby10cmFjayBteXIxMiBsb2NhbC9tYXN0ZXIgJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxMi5yZW1vdGUpIiA9IHogJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxMi5tZXJnZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjEyLnJlYmFzZSkiID0gegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgbmV2ZXIgb24gYW4gdW50cmFja2VkIGxvY2FsIGJyYW5jaCcgJworCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSBuZXZlciAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbWFzdGVyIHx8IGdpdC1mZXRjaCBsb2NhbCkgJiYKKwlnaXQgYnJhbmNoIC0tbm8tdHJhY2sgbXlyMTMgbXliYXNlMiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjEzLnJlbW90ZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjEzLm1lcmdlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTMucmViYXNlKSIgPSB6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSBsb2NhbCBvbiBhbiB1bnRyYWNrZWQgbG9jYWwgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwcmViYXNlIGxvY2FsICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgfHwgZ2l0LWZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggLS1uby10cmFjayBteXIxNCBteWJhc2UyICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTQucmVtb3RlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTQubWVyZ2UpIiA9IHogJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxNC5yZWJhc2UpIiA9IHoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIHJlbW90ZSBvbiBhbiB1bnRyYWNrZWQgbG9jYWwgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwcmViYXNlIHJlbW90ZSAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbWFzdGVyIHx8IGdpdC1mZXRjaCBsb2NhbCkgJiYKKwlnaXQgYnJhbmNoIC0tbm8tdHJhY2sgbXlyMTUgbXliYXNlMiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjE1LnJlbW90ZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjE1Lm1lcmdlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTUucmViYXNlKSIgPSB6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSBhbHdheXMgb24gYW4gdW50cmFja2VkIGxvY2FsIGJyYW5jaCcgJworCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSBhbHdheXMgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQtZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLW5vLXRyYWNrIG15cjE2IG15YmFzZTIgJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxNi5yZW1vdGUpIiA9IHogJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxNi5tZXJnZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjE2LnJlYmFzZSkiID0gegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgbmV2ZXIgb24gYW4gdW50cmFja2VkIHJlbW90ZSBicmFuY2gnICcKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXByZWJhc2UgbmV2ZXIgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQtZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLW5vLXRyYWNrIG15cjE3IGxvY2FsL21hc3RlciAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjE3LnJlbW90ZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjE3Lm1lcmdlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTcucmViYXNlKSIgPSB6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSBsb2NhbCBvbiBhbiB1bnRyYWNrZWQgcmVtb3RlIGJyYW5jaCcgJworCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSBsb2NhbCAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbWFzdGVyIHx8IGdpdC1mZXRjaCBsb2NhbCkgJiYKKwlnaXQgYnJhbmNoIC0tbm8tdHJhY2sgbXlyMTggbG9jYWwvbWFzdGVyICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTgucmVtb3RlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTgubWVyZ2UpIiA9IHogJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxOC5yZWJhc2UpIiA9IHoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIHJlbW90ZSBvbiBhbiB1bnRyYWNrZWQgcmVtb3RlIGJyYW5jaCcgJworCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSByZW1vdGUgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQtZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLW5vLXRyYWNrIG15cjE5IGxvY2FsL21hc3RlciAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjE5LnJlbW90ZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjE5Lm1lcmdlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTkucmViYXNlKSIgPSB6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSBhbHdheXMgb24gYW4gdW50cmFja2VkIHJlbW90ZSBicmFuY2gnICcKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXByZWJhc2UgYWx3YXlzICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgfHwgZ2l0LWZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggLS1uby10cmFjayBteXIyMCBsb2NhbC9tYXN0ZXIgJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIyMC5yZW1vdGUpIiA9IHogJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIyMC5tZXJnZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjIwLnJlYmFzZSkiID0gegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3QgbWlzY29uZmlndXJlZCBhdXRvc2V0dXByZWJhc2UgKGJhZCB2YWx1ZSknICcKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXByZWJhc2UgZ2FyYmFnZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZWN0IG1pc2NvbmZpZ3VyZWQgYXV0b3NldHVwcmViYXNlIChubyB2YWx1ZSknICcKKwlnaXQgY29uZmlnIC0tdW5zZXQgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSAmJgorCWVjaG8gIlticmFuY2hdIGF1dG9zZXR1cHJlYmFzZSIgPj4gLmdpdC9jb25maWcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGJyYW5jaC5hdXRvc2V0dXByZWJhc2UKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMjAxLWJyYW5jaC1jb250YWlucy5zaCBiL3QvdDMyMDEtYnJhbmNoLWNvbnRhaW5zLnNoCmluZGV4IGI0Y2Y2MjguLmY4NmY0YmMgMTAwNzU1Ci0tLSBhL3QvdDMyMDEtYnJhbmNoLWNvbnRhaW5zLnNoCisrKyBiL3QvdDMyMDEtYnJhbmNoLWNvbnRhaW5zLnNoCkBAIC0xLDYgKzEsNiBAQAogIyEvYmluL3NoCiAKLXRlc3RfZGVzY3JpcHRpb249J2JyYW5jaCAtLWNvbnRhaW5zIDxjb21taXQ+JwordGVzdF9kZXNjcmlwdGlvbj0nYnJhbmNoIC0tY29udGFpbnMgPGNvbW1pdD4sIC0tbWVyZ2VkLCBhbmQgLS1uby1tZXJnZWQnCiAKIC4gLi90ZXN0LWxpYi5zaAogCkBAIC01NSw0ICs1NSw0NCBAQAogCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZGU6IGJyYW5jaCAtLW1lcmdlZCcgJworCisJZ2l0IGJyYW5jaCAtLW1lcmdlZCA+YWN0dWFsICYmCisJeworCQllY2hvICIgIG1hc3RlciIgJiYKKwkJZWNobyAiKiBzaWRlIgorCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWRlOiBicmFuY2ggLS1uby1tZXJnZWQnICcKKworCWdpdCBicmFuY2ggLS1uby1tZXJnZWQgPmFjdHVhbCAmJgorCT5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFzdGVyOiBicmFuY2ggLS1tZXJnZWQnICcKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgYnJhbmNoIC0tbWVyZ2VkID5hY3R1YWwgJiYKKwl7CisJCWVjaG8gIiogbWFzdGVyIgorCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYXN0ZXI6IGJyYW5jaCAtLW5vLW1lcmdlZCcgJworCisJZ2l0IGJyYW5jaCAtLW5vLW1lcmdlZCA+YWN0dWFsICYmCisJeworCQllY2hvICIgIHNpZGUiCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzIwMi1zaG93LWJyYW5jaC1vY3RvcHVzLnNoIGIvdC90MzIwMi1zaG93LWJyYW5jaC1vY3RvcHVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdmZTRhNmUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMjAyLXNob3ctYnJhbmNoLW9jdG9wdXMuc2gKQEAgLTAsMCArMSw1OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3Qgc2hvdy1icmFuY2ggd2l0aCBtb3JlIHRoYW4gOCBoZWFkcycKKworLiAuL3Rlc3QtbGliLnNoCisKK251bWJlcnM9IjEgMiAzIDQgNSA2IDcgOCA5IDEwIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCisJPiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwlmb3IgaSBpbiAkbnVtYmVycworCWRvCisJCWdpdCBjaGVja291dCAtYiBicmFuY2gkaSBtYXN0ZXIgJiYKKwkJPiBmaWxlJGkgJiYKKwkJZ2l0IGFkZCBmaWxlJGkgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gYnJhbmNoJGkgfHwgYnJlYWsKKwlkb25lCisKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorISBbYnJhbmNoMV0gYnJhbmNoMQorICEgW2JyYW5jaDJdIGJyYW5jaDIKKyAgISBbYnJhbmNoM10gYnJhbmNoMworICAgISBbYnJhbmNoNF0gYnJhbmNoNAorICAgICEgW2JyYW5jaDVdIGJyYW5jaDUKKyAgICAgISBbYnJhbmNoNl0gYnJhbmNoNgorICAgICAgISBbYnJhbmNoN10gYnJhbmNoNworICAgICAgICEgW2JyYW5jaDhdIGJyYW5jaDgKKyAgICAgICAgISBbYnJhbmNoOV0gYnJhbmNoOQorICAgICAgICAgKiBbYnJhbmNoMTBdIGJyYW5jaDEwCistLS0tLS0tLS0tCisgICAgICAgICAqIFticmFuY2gxMF0gYnJhbmNoMTAKKyAgICAgICAgKyAgW2JyYW5jaDldIGJyYW5jaDkKKyAgICAgICArICAgW2JyYW5jaDhdIGJyYW5jaDgKKyAgICAgICsgICAgW2JyYW5jaDddIGJyYW5jaDcKKyAgICAgKyAgICAgW2JyYW5jaDZdIGJyYW5jaDYKKyAgICArICAgICAgW2JyYW5jaDVdIGJyYW5jaDUKKyAgICsgICAgICAgW2JyYW5jaDRdIGJyYW5jaDQKKyAgKyAgICAgICAgW2JyYW5jaDNdIGJyYW5jaDMKKyArICAgICAgICAgW2JyYW5jaDJdIGJyYW5jaDIKKysgICAgICAgICAgW2JyYW5jaDFdIGJyYW5jaDEKKysrKysrKysrKyogW2JyYW5jaDEwXl0gaW5pdGlhbAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3ctYnJhbmNoIHdpdGggbW9yZSB0aGFuIDggYnJhbmNoZXMnICcKKworCWdpdCBzaG93LWJyYW5jaCAkKGZvciBpIGluICRudW1iZXJzOyBkbyBlY2hvIGJyYW5jaCRpOyBkb25lKSA+IG91dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXQKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMzMDAtZnVubnktbmFtZXMuc2ggYi90L3QzMzAwLWZ1bm55LW5hbWVzLnNoCmluZGV4IDI0YTAwYTkuLjA1NzRlZjEgMTAwNzU1Ci0tLSBhL3QvdDMzMDAtZnVubnktbmFtZXMuc2gKKysrIGIvdC90MzMwMC1mdW5ueS1uYW1lcy5zaApAQCAtMzUsNyArMzUsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxzLWZpbGVzIG5vLWZ1bm55JyBcCiAJJ2dpdCB1cGRhdGUtaW5kZXggLS1hZGQgIiRwMCIgIiRwMiIgJiYKIAlnaXQgbHMtZmlsZXMgPmN1cnJlbnQgJiYKLQlnaXQgZGlmZiBleHBlY3RlZCBjdXJyZW50JworCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQnCiAKIHQwPWBnaXQgd3JpdGUtdHJlZWAKIGVjaG8gIiR0MCIgPnQwCkBAIC00OCwxNCArNDgsMTQgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBscy1maWxlcyB3aXRoLWZ1bm55JyBcCiAJJ2dpdCB1cGRhdGUtaW5kZXggLS1hZGQgIiRwMSIgJiYKIAlnaXQgbHMtZmlsZXMgPmN1cnJlbnQgJiYKLQlnaXQgZGlmZiBleHBlY3RlZCBjdXJyZW50JworCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQnCiAKIGVjaG8gJ2p1c3Qgc3BhY2UKIG5vLWZ1bm55CiB0YWJzCSwiIChkcSkgYW5kIHNwYWNlcycgPmV4cGVjdGVkCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbHMtZmlsZXMgLXogd2l0aC1mdW5ueScgXAogCSdnaXQgbHMtZmlsZXMgLXogfCBwZXJsIC1wZSB5L1xcMDAwL1xcMDEyLyA+Y3VycmVudCAmJgotCWdpdCBkaWZmIGV4cGVjdGVkIGN1cnJlbnQnCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudCcKIAogdDE9YGdpdCB3cml0ZS10cmVlYAogZWNobyAiJHQxIiA+dDEKQEAgLTY3LDI4ICs2NywyOCBAQAogRU9GCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbHMtdHJlZSB3aXRoIGZ1bm55JyBcCiAJJ2dpdCBscy10cmVlIC1yICR0MSB8IHNlZCAtZSAicy9eW14JXSoJLy8iID5jdXJyZW50ICYmCi0JIGdpdCBkaWZmIGV4cGVjdGVkIGN1cnJlbnQnCisJIHRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQnCiAKIGNhdCA+IGV4cGVjdGVkIDw8XEVPRgogQQkidGFic1x0LFwiIChkcSkgYW5kIHNwYWNlcyIKIEVPRgogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtaW5kZXggd2l0aC1mdW5ueScgXAogCSdnaXQgZGlmZi1pbmRleCAtLW5hbWUtc3RhdHVzICR0MCA+Y3VycmVudCAmJgotCWdpdCBkaWZmIGV4cGVjdGVkIGN1cnJlbnQnCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudCcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtdHJlZSB3aXRoLWZ1bm55JyBcCiAJJ2dpdCBkaWZmLXRyZWUgLS1uYW1lLXN0YXR1cyAkdDAgJHQxID5jdXJyZW50ICYmCi0JZ2l0IGRpZmYgZXhwZWN0ZWQgY3VycmVudCcKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50JwogCiBlY2hvICdBCiB0YWJzCSwiIChkcSkgYW5kIHNwYWNlcycgPmV4cGVjdGVkCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi1pbmRleCAteiB3aXRoLWZ1bm55JyBcCiAJJ2dpdCBkaWZmLWluZGV4IC16IC0tbmFtZS1zdGF0dXMgJHQwIHwgcGVybCAtcGUgeS9cXDAwMC9cXDAxMi8gPmN1cnJlbnQgJiYKLQlnaXQgZGlmZiBleHBlY3RlZCBjdXJyZW50JworCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLXRyZWUgLXogd2l0aC1mdW5ueScgXAogCSdnaXQgZGlmZi10cmVlIC16IC0tbmFtZS1zdGF0dXMgJHQwICR0MSB8IHBlcmwgLXBlIHkvXFwwMDAvXFwwMTIvID5jdXJyZW50ICYmCi0JZ2l0IGRpZmYgZXhwZWN0ZWQgY3VycmVudCcKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50JwogCiBjYXQgPiBleHBlY3RlZCA8PFxFT0YKIENOVU0Jbm8tZnVubnkJInRhYnNcdCxcIiAoZHEpIGFuZCBzcGFjZXMiCkBAIC05Niw3ICs5Niw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi10cmVlIC1DIHdpdGgtZnVubnknIFwKIAknZ2l0IGRpZmYtdHJlZSAtQyAtLWZpbmQtY29waWVzLWhhcmRlciAtLW5hbWUtc3RhdHVzIFwKIAkJJHQwICR0MSB8IHNlZCAtZSAncy9eQ1swLTldKi9DTlVNLycgPmN1cnJlbnQgJiYKLQlnaXQgZGlmZiBleHBlY3RlZCBjdXJyZW50JworCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQnCiAKIGNhdCA+IGV4cGVjdGVkIDw8XEVPRgogUk5VTQluby1mdW5ueQkidGFic1x0LFwiIChkcSkgYW5kIHNwYWNlcyIKQEAgLTEwNSw3ICsxMDUsNyBAQAogCSdnaXQgdXBkYXRlLWluZGV4IC0tZm9yY2UtcmVtb3ZlICIkcDAiICYmCiAJZ2l0IGRpZmYtaW5kZXggLU0gLS1uYW1lLXN0YXR1cyBcCiAJCSR0MCB8IHNlZCAtZSAncy9eUlswLTldKi9STlVNLycgPmN1cnJlbnQgJiYKLQlnaXQgZGlmZiBleHBlY3RlZCBjdXJyZW50JworCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQnCiAKIGNhdCA+IGV4cGVjdGVkIDw8XEVPRgogZGlmZiAtLWdpdCBhL25vLWZ1bm55ICJiL3RhYnNcdCxcIiAoZHEpIGFuZCBzcGFjZXMiCkBAIC0xMTYsNyArMTE2LDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLXRyZWUgZGVsZXRlIHdpdGgtZnVubnknIFwKIAknZ2l0IGRpZmYtaW5kZXggLU0gLXAgJHQwIHwKIAkgc2VkIC1lICJzL2luZGV4IFswLTldKiUvaW5kZXggTlVNJS8iID5jdXJyZW50ICYmCi0JIGdpdCBkaWZmIGV4cGVjdGVkIGN1cnJlbnQnCisJIHRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQnCiAKIGNobW9kICt4ICIkcDEiCiBjYXQgPiBleHBlY3RlZCA8PFxFT0YKQEAgLTEzMCw3ICsxMzAsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtdHJlZSBkZWxldGUgd2l0aC1mdW5ueScgXAogCSdnaXQgZGlmZi1pbmRleCAtTSAtcCAkdDAgfAogCSBzZWQgLWUgInMvaW5kZXggWzAtOV0qJS9pbmRleCBOVU0lLyIgPmN1cnJlbnQgJiYKLQkgZ2l0IGRpZmYgZXhwZWN0ZWQgY3VycmVudCcKKwkgdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudCcKIAogY2F0ID5leHBlY3RlZCA8PFxFT0YKICAidGFic1x0LFwiIChkcSkgYW5kIHNwYWNlcyIKQEAgLTEzOSw3ICsxMzksNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtdHJlZSByZW5hbWUgd2l0aC1mdW5ueSBhcHBsaWVkJyBcCiAJJ2dpdCBkaWZmLWluZGV4IC1NIC1wICR0MCB8CiAJIGdpdCBhcHBseSAtLXN0YXQgfCBzZWQgLWUgInMvfC4qLy8iIC1lICJzLyAqXCQvLyIgPmN1cnJlbnQgJiYKLQkgZ2l0IGRpZmYgZXhwZWN0ZWQgY3VycmVudCcKKwkgdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudCcKIAogY2F0ID4gZXhwZWN0ZWQgPDxcRU9GCiAgbm8tZnVubnkKQEAgLTE0OSwxMiArMTQ5LDEyIEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi10cmVlIGRlbGV0ZSB3aXRoLWZ1bm55IGFwcGxpZWQnIFwKIAknZ2l0IGRpZmYtaW5kZXggLXAgJHQwIHwKIAkgZ2l0IGFwcGx5IC0tc3RhdCB8IHNlZCAtZSAicy98LiovLyIgLWUgInMvICpcJC8vIiA+Y3VycmVudCAmJgotCSBnaXQgZGlmZiBleHBlY3RlZCBjdXJyZW50JworCSB0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50JwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXBwbHkgbm9uLWdpdCBkaWZmJyBcCiAJJ2dpdCBkaWZmLWluZGV4IC1wICR0MCB8CiAJIHNlZCAtbmUgIi9eWy0rQF0vcCIgfAogCSBnaXQgYXBwbHkgLS1zdGF0IHwgc2VkIC1lICJzL3wuKi8vIiAtZSAicy8gKlwkLy8iID5jdXJyZW50ICYmCi0JIGdpdCBkaWZmIGV4cGVjdGVkIGN1cnJlbnQnCisJIHRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQnCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQwMC1yZWJhc2Uuc2ggYi90L3QzNDAwLXJlYmFzZS5zaAppbmRleCA0OTZmNGVjLi45MWJiNWUxIDEwMDc1NQotLS0gYS90L3QzNDAwLXJlYmFzZS5zaAorKysgYi90L3QzNDAwLXJlYmFzZS5zaApAQCAtOSw3ICs5LDggQEAKICcKIC4gLi90ZXN0LWxpYi5zaAogCi1leHBvcnQgR0lUX0FVVEhPUl9FTUFJTD1ib2d1c19lbWFpbF9hZGRyZXNzCitHSVRfQVVUSE9SX0VNQUlMPWJvZ3VzX2VtYWlsX2FkZHJlc3MKK2V4cG9ydCBHSVRfQVVUSE9SX0VNQUlMCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdwcmVwYXJlIHJlcG9zaXRvcnkgd2l0aCB0b3BpYyBicmFuY2hlcycgXApAQCAtNDQsMTMgKzQ1LDEzIEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICd0aGUgcmViYXNlIG9wZXJhdGlvbiBzaG91bGQgbm90IGhhdmUgZGVzdHJveWVkIGF1dGhvciBpbmZvcm1hdGlvbicgXAotICAgICchIGdpdCBsb2cgfCBncmVwICJBdXRob3I6IiB8IGdyZXAgIjw+IicKKyAgICAnISAoZ2l0IGxvZyB8IGdyZXAgIkF1dGhvcjoiIHwgZ3JlcCAiPD4iKScKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGFmdGVyIG1lcmdlIG1hc3RlcicgJwogICAgICBnaXQgcmVzZXQgLS1oYXJkIHRvcGljICYmCiAgICAgIGdpdCBtZXJnZSBtYXN0ZXIgJiYKICAgICAgZ2l0IHJlYmFzZSBtYXN0ZXIgJiYKLSAgICAgISBnaXQgc2hvdyB8IGdyZXAgIl5NZXJnZToiCisgICAgICEgKGdpdCBzaG93IHwgZ3JlcCAiXk1lcmdlOiIpCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBvZiBoaXN0b3J5IHdpdGggbWVyZ2VzIGlzIGxpbmVhcml6ZWQnICcKZGlmZiAtLWdpdCBhL3QvdDM0MDQtcmViYXNlLWludGVyYWN0aXZlLnNoIGIvdC90MzQwNC1yZWJhc2UtaW50ZXJhY3RpdmUuc2gKaW5kZXggOWNmODczZi4uYjllM2RiZCAxMDA3NTUKLS0tIGEvdC90MzQwNC1yZWJhc2UtaW50ZXJhY3RpdmUuc2gKKysrIGIvdC90MzQwNC1yZWJhc2UtaW50ZXJhY3RpdmUuc2gKQEAgLTkxLDkgKzkxLDggQEAKIGRvbmUKIEVPRgogCit0ZXN0X3NldF9lZGl0b3IgIiQocHdkKS9mYWtlLWVkaXRvci5zaCIKIGNobW9kIGEreCBmYWtlLWVkaXRvci5zaAotVklTVUFMPSIkKHB3ZCkvZmFrZS1lZGl0b3Iuc2giCi1leHBvcnQgVklTVUFMCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGNoYW5nZXMgYXJlIGEgbm9wJyAnCiAJZ2l0IHJlYmFzZSAtaSBGICYmCmRpZmYgLS1naXQgYS90L3QzNDA3LXJlYmFzZS1hYm9ydC5zaCBiL3QvdDM0MDctcmViYXNlLWFib3J0LnNoCmluZGV4IDM3OTQ0YzMuLjE3NzdmZmUgMTAwNzU1Ci0tLSBhL3QvdDM0MDctcmViYXNlLWFib3J0LnNoCisrKyBiL3QvdDM0MDctcmViYXNlLWFib3J0LnNoCkBAIC00LDcgKzQsMTMgQEAKIAogLiAuL3Rlc3QtbGliLnNoCiAKKyMjIyBUZXN0IHRoYXQgd2UgaGFuZGxlIHNwYWNlIGNoYXJhY3RlcnMgcHJvcGVybHkKK3dvcmtfZGlyPSIkKHB3ZCkvdGVzdCBkaXIiCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCW1rZGlyIC1wICIkd29ya19kaXIiICYmCisJY2QgIiR3b3JrX2RpciIgJiYKKwlnaXQgaW5pdCAmJgogCWVjaG8gYSA+IGEgJiYKIAlnaXQgYWRkIGEgJiYKIAlnaXQgY29tbWl0IC1tIGEgJiYKQEAgLTI4LDMyICszNCwzNSBAQAogCWRvdGVzdD0kMgogCiAJdGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlJHR5cGUgLS1hYm9ydCIgJworCQljZCAiJHdvcmtfZGlyIiAmJgogCQkjIENsZWFuIHVwIHRoZSBzdGF0ZSBmcm9tIHRoZSBwcmV2aW91cyBvbmUKLQkJZ2l0IHJlc2V0IC0taGFyZCBwcmUtcmViYXNlCi0JCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UnIiR0eXBlIicgbWFzdGVyICYmCi0JCXRlc3QgLWQgJyRkb3Rlc3QnICYmCisJCWdpdCByZXNldCAtLWhhcmQgcHJlLXJlYmFzZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlJHR5cGUgbWFzdGVyICYmCisJCXRlc3QgLWQgIiRkb3Rlc3QiICYmCiAJCWdpdCByZWJhc2UgLS1hYm9ydCAmJgogCQl0ZXN0ICQoZ2l0IHJldi1wYXJzZSB0by1yZWJhc2UpID0gJChnaXQgcmV2LXBhcnNlIHByZS1yZWJhc2UpICYmCi0JCXRlc3QgISAtZCAnJGRvdGVzdCcKKwkJdGVzdCAhIC1kICIkZG90ZXN0IgogCScKIAogCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSR0eXBlIC0tYWJvcnQgYWZ0ZXIgLS1za2lwIiAnCisJCWNkICIkd29ya19kaXIiICYmCiAJCSMgQ2xlYW4gdXAgdGhlIHN0YXRlIGZyb20gdGhlIHByZXZpb3VzIG9uZQotCQlnaXQgcmVzZXQgLS1oYXJkIHByZS1yZWJhc2UKLQkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSciJHR5cGUiJyBtYXN0ZXIgJiYKLQkJdGVzdCAtZCAnJGRvdGVzdCcgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwcmUtcmViYXNlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UkdHlwZSBtYXN0ZXIgJiYKKwkJdGVzdCAtZCAiJGRvdGVzdCIgJiYKIAkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLXNraXAgJiYKIAkJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRCkgPSAkKGdpdCByZXYtcGFyc2UgbWFzdGVyKSAmJgogCQlnaXQtcmViYXNlIC0tYWJvcnQgJiYKIAkJdGVzdCAkKGdpdCByZXYtcGFyc2UgdG8tcmViYXNlKSA9ICQoZ2l0IHJldi1wYXJzZSBwcmUtcmViYXNlKSAmJgotCQl0ZXN0ICEgLWQgJyRkb3Rlc3QnCisJCXRlc3QgISAtZCAiJGRvdGVzdCIKIAknCiAKIAl0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWJhc2UkdHlwZSAtLWFib3J0IGFmdGVyIC0tY29udGludWUiICcKKwkJY2QgIiR3b3JrX2RpciIgJiYKIAkJIyBDbGVhbiB1cCB0aGUgc3RhdGUgZnJvbSB0aGUgcHJldmlvdXMgb25lCi0JCWdpdCByZXNldCAtLWhhcmQgcHJlLXJlYmFzZQotCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlJyIkdHlwZSInIG1hc3RlciAmJgotCQl0ZXN0IC1kICckZG90ZXN0JyAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHByZS1yZWJhc2UgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSR0eXBlIG1hc3RlciAmJgorCQl0ZXN0IC1kICIkZG90ZXN0IiAmJgogCQllY2hvIGMgPiBhICYmCiAJCWVjaG8gZCA+PiBhICYmCiAJCWdpdCBhZGQgYSAmJgpAQCAtNjEsNyArNzAsNyBAQAogCQl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSAhPSAkKGdpdCByZXYtcGFyc2UgbWFzdGVyKSAmJgogCQlnaXQgcmViYXNlIC0tYWJvcnQgJiYKIAkJdGVzdCAkKGdpdCByZXYtcGFyc2UgdG8tcmViYXNlKSA9ICQoZ2l0IHJldi1wYXJzZSBwcmUtcmViYXNlKSAmJgotCQl0ZXN0ICEgLWQgJyRkb3Rlc3QnCisJCXRlc3QgISAtZCAiJGRvdGVzdCIKIAknCiB9CiAKZGlmZiAtLWdpdCBhL3QvdDM1MDAtY2hlcnJ5LnNoIGIvdC90MzUwMC1jaGVycnkuc2gKaW5kZXggZDBhNDQwZi4uNDkxMWM0OCAxMDA3NTUKLS0tIGEvdC90MzUwMC1jaGVycnkuc2gKKysrIGIvdC90MzUwMC1jaGVycnkuc2gKQEAgLTEwLDcgKzEwLDggQEAKICcKIC4gLi90ZXN0LWxpYi5zaAogCi1leHBvcnQgR0lUX0FVVEhPUl9FTUFJTD1ib2d1c19lbWFpbF9hZGRyZXNzCitHSVRfQVVUSE9SX0VNQUlMPWJvZ3VzX2VtYWlsX2FkZHJlc3MKK2V4cG9ydCBHSVRfQVVUSE9SX0VNQUlMCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdwcmVwYXJlIHJlcG9zaXRvcnkgd2l0aCB0b3BpYyBicmFuY2gsIGFuZCBjaGVjayBjaGVycnkgZmluZHMgdGhlIDIgcGF0Y2hlcyBmcm9tIHRoZXJlJyBcCmRpZmYgLS1naXQgYS90L3QzNjAwLXJtLnNoIGIvdC90MzYwMC1ybS5zaAppbmRleCBmNTQyZjBhLi43ODkzZDhjIDEwMDc1NQotLS0gYS90L3QzNjAwLXJtLnNoCisrKyBiL3QvdDM2MDAtcm0uc2gKQEAgLTIxNyw0ICsyMTcsMTYgQEAKIAkhIGdpdCBybSBub25leGlzdGVudAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDYWxsICJybSIgZnJvbSBvdXRzaWRlIHRoZSB3b3JrIHRyZWUnICcKKwlta2RpciByZXBvICYmCisJY2QgcmVwbyAmJgorCWdpdCBpbml0ICYmCisJZWNobyBzb21ldGhpbmcgPiBzb21lZmlsZSAmJgorCWdpdCBhZGQgc29tZWZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgYSBmaWxlIiAmJgorCShjZCAuLiAmJgorCSBnaXQgLS1naXQtZGlyPXJlcG8vLmdpdCAtLXdvcmstdHJlZT1yZXBvIHJtIHNvbWVmaWxlKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggc29tZWZpbGUKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNzAwLWFkZC5zaCBiL3QvdDM3MDAtYWRkLnNoCmluZGV4IDI4N2UwNTguLmZjYmMyMDMgMTAwNzU1Ci0tLSBhL3QvdDM3MDAtYWRkLnNoCisrKyBiL3QvdDM3MDAtYWRkLnNoCkBAIC04MSwxNyArODEsMTcgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLmdpdGlnbm9yZSBpcyBob25vcmVkJyAnCiAJZ2l0IGFkZCAuICYmCi0JISBnaXQgbHMtZmlsZXMgfCBncmVwICJcXC5pZyIKKwkhIChnaXQgbHMtZmlsZXMgfCBncmVwICJcXC5pZyIpCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Vycm9yIG91dCB3aGVuIGF0dGVtcHRpbmcgdG8gYWRkIGlnbm9yZWQgb25lcyB3aXRob3V0IC1mJyAnCiAJISBnaXQgYWRkIGEuPz8gJiYKLQkhIGdpdCBscy1maWxlcyB8IGdyZXAgIlxcLmlnIgorCSEgKGdpdCBscy1maWxlcyB8IGdyZXAgIlxcLmlnIikKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZXJyb3Igb3V0IHdoZW4gYXR0ZW1wdGluZyB0byBhZGQgaWdub3JlZCBvbmVzIHdpdGhvdXQgLWYnICcKIAkhIGdpdCBhZGQgZC4/PyAmJgotCSEgZ2l0IGxzLWZpbGVzIHwgZ3JlcCAiXFwuaWciCisJISAoZ2l0IGxzLWZpbGVzIHwgZ3JlcCAiXFwuaWciKQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgaWdub3JlZCBvbmVzIHdpdGggLWYnICcKQEAgLTE3OSw0ICsxNzksNTUgQEAKIAl0ZXN0IC16ICJgZ2l0IGRpZmYtaW5kZXggSEVBRCAtLSBmb29gIgogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYWRkIHNob3VsZCBmYWlsIGF0b21pY2FsbHkgdXBvbiBhbiB1bnJlYWRhYmxlIGZpbGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZGF0ZSA+Zm9vMSAmJgorCWRhdGUgPmZvbzIgJiYKKwljaG1vZCAwIGZvbzIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIC0tdmVyYm9zZSAuICYmCisJISAoIGdpdCBscy1maWxlcyBmb28xIHwgZ3JlcCBmb28xICkKKycKKworcm0gLWYgZm9vMgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYWRkIC0taWdub3JlLWVycm9ycycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlkYXRlID5mb28xICYmCisJZGF0ZSA+Zm9vMiAmJgorCWNobW9kIDAgZm9vMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgLS12ZXJib3NlIC0taWdub3JlLWVycm9ycyAuICYmCisJZ2l0IGxzLWZpbGVzIGZvbzEgfCBncmVwIGZvbzEKKycKKworcm0gLWYgZm9vMgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYWRkIChhZGQuaWdub3JlLWVycm9ycyknICcKKwlnaXQgY29uZmlnIGFkZC5pZ25vcmUtZXJyb3JzIDEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZGF0ZSA+Zm9vMSAmJgorCWRhdGUgPmZvbzIgJiYKKwljaG1vZCAwIGZvbzIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIC0tdmVyYm9zZSAuICYmCisJZ2l0IGxzLWZpbGVzIGZvbzEgfCBncmVwIGZvbzEKKycKK3JtIC1mIGZvbzIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFkZCAoYWRkLmlnbm9yZS1lcnJvcnMgPSBmYWxzZSknICcKKwlnaXQgY29uZmlnIGFkZC5pZ25vcmUtZXJyb3JzIDAgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZGF0ZSA+Zm9vMSAmJgorCWRhdGUgPmZvbzIgJiYKKwljaG1vZCAwIGZvbzIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIC0tdmVyYm9zZSAuICYmCisJISAoIGdpdCBscy1maWxlcyBmb28xIHwgZ3JlcCBmb28xICkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFkZCAnXCcnZm9cP2JhcidcJycgaWdub3JlcyBmb29iYXInICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdG91Y2ggZm9cP2JhciBmb29iYXIgJiYKKwlnaXQgYWRkICdcJydmb1w/YmFyJ1wnJyAmJgorCWdpdCBscy1maWxlcyBmb1w/YmFyIHwgZ3JlcCAtRiBmb1w/YmFyICYmCisJISAoIGdpdCBscy1maWxlcyBmb29iYXIgfCBncmVwIGZvb2JhciApCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzcwMS1hZGQtaW50ZXJhY3RpdmUuc2ggYi90L3QzNzAxLWFkZC1pbnRlcmFjdGl2ZS5zaAppbmRleCA3N2M5MGY2Li5mYWU2NGVhIDEwMDc1NQotLS0gYS90L3QzNzAxLWFkZC1pbnRlcmFjdGl2ZS5zaAorKysgYi90L3QzNzAxLWFkZC1pbnRlcmFjdGl2ZS5zaApAQCAtNjYsNCArNjYsMzAgQEAKIAlncmVwICJ1bmNoYW5nZWQgKiszLy0wIGZpbGUiIG91dHB1dAogJwogCitpZiB0ZXN0ICIkKGdpdCBjb25maWcgLS1ib29sIGNvcmUuZmlsZW1vZGUpIiA9IGZhbHNlCit0aGVuCisgICAgc2F5ICdza2lwcGluZyBmaWxlbW9kZSB0ZXN0cyAoZmlsZXN5c3RlbSBkb2VzIG5vdCBwcm9wZXJseSBzdXBwb3J0IG1vZGVzKScKK2Vsc2UKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2ggZG9lcyBub3QgYWZmZWN0IG1vZGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBjb250ZW50ID4+ZmlsZSAmJgorCWNobW9kICt4IGZpbGUgJiYKKwlwcmludGYgIm5cXG55XFxuIiB8IGdpdCBhZGQgLXAgJiYKKwlnaXQgc2hvdyA6ZmlsZSB8IGdyZXAgY29udGVudCAmJgorCWdpdCBkaWZmIGZpbGUgfCBncmVwICJuZXcgbW9kZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhZ2UgbW9kZSBidXQgbm90IGh1bmsnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBjb250ZW50ID4+ZmlsZSAmJgorCWNobW9kICt4IGZpbGUgJiYKKwlwcmludGYgInlcXG5uXFxuIiB8IGdpdCBhZGQgLXAgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCBmaWxlIHwgZ3JlcCAibmV3IG1vZGUiICYmCisJZ2l0IGRpZmYgICAgICAgICAgZmlsZSB8IGdyZXAgIitjb250ZW50IgorJworCitmaQorIyBlbmQgb2YgdGVzdHMgZGlzYWJsZWQgd2hlbiBmaWxlbW9kZSBpcyBub3QgdXNhYmxlCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzkwMC1pMThuLWNvbW1pdC5zaCBiL3QvdDM5MDAtaTE4bi1jb21taXQuc2gKaW5kZXggOTRiMWMyNC4uODgzMjgxZCAxMDA3NTUKLS0tIGEvdC90MzkwMC1pMThuLWNvbW1pdC5zaAorKysgYi90L3QzOTAwLWkxOG4tY29tbWl0LnNoCkBAIC05LDcgKzksNyBAQAogCiBjb21wYXJlX3dpdGggKCkgewogCWdpdCBzaG93IC1zICQxIHwgc2VkIC1lICcxLC9eJC9kJyAtZSAncy9eICAgIC8vJyA+Y3VycmVudCAmJgotCWdpdCBkaWZmIGN1cnJlbnQgIiQyIgorCXRlc3RfY21wIGN1cnJlbnQgIiQyIgogfQogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKZGlmZiAtLWdpdCBhL3QvdDQwMDYtZGlmZi1tb2RlLnNoIGIvdC90NDAwNi1kaWZmLW1vZGUuc2gKaW5kZXggYWI1NDA2ZC4uNGU5MmZjZSAxMDA3NTUKLS0tIGEvdC90NDAwNi1kaWZmLW1vZGUuc2gKKysrIGIvdC90NDAwNi1kaWZmLW1vZGUuc2gKQEAgLTM4LDYgKzM4LDYgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ3ZlcmlmeScgXAotICAgICdnaXQgZGlmZiBleHBlY3RlZCBjaGVjaycKKyAgICAndGVzdF9jbXAgZXhwZWN0ZWQgY2hlY2snCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAxMy1kaWZmLXZhcmlvdXMuc2ggYi90L3Q0MDEzLWRpZmYtdmFyaW91cy5zaAppbmRleCA2YjRkMWM1Li45MzM3YjgxIDEwMDc1NQotLS0gYS90L3Q0MDEzLWRpZmYtdmFyaW91cy5zaAorKysgYi90L3Q0MDEzLWRpZmYtdmFyaW91cy5zaApAQCAtMTEyLDcgKzExMiw3IEBACiAJCX0gPiIkYWN0dWFsIiAmJgogCQlpZiB0ZXN0IC1mICIkZXhwZWN0IgogCQl0aGVuCi0JCQlnaXQgZGlmZiAiJGV4cGVjdCIgIiRhY3R1YWwiICYmCisJCQl0ZXN0X2NtcCAiJGV4cGVjdCIgIiRhY3R1YWwiICYmCiAJCQlybSAtZiAiJGFjdHVhbCIKIAkJZWxzZQogCQkJIyB0aGlzIGlzIHRvIGhlbHAgZGV2ZWxvcGluZyBuZXcgdGVzdHMuCkBAIC0yNTcsNiArMjU3LDcgQEAKIGRpZmYgLS1wYXRjaC13aXRoLXN0YXQgLXIgaW5pdGlhbC4uc2lkZQogZGlmZiAtLXBhdGNoLXdpdGgtcmF3IC1yIGluaXRpYWwuLnNpZGUKIGRpZmYgLS1uYW1lLXN0YXR1cyBkaXIyIGRpcgorZGlmZiAtLW5vLWluZGV4IC0tbmFtZS1zdGF0dXMgZGlyMiBkaXIKIEVPRgogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmXy0tbmFtZS1zdGF0dXNfZGlyMl9kaXIgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLW5hbWUtc3RhdHVzX2RpcjJfZGlyCmluZGV4IGVmN2ZkYjcuLmQwZDk2YWEgMTAwNjQ0Ci0tLSBhL3QvdDQwMTMvZGlmZi5kaWZmXy0tbmFtZS1zdGF0dXNfZGlyMl9kaXIKKysrIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1uYW1lLXN0YXR1c19kaXIyX2RpcgpAQCAtMSwzICsxLDIgQEAKICQgZ2l0IGRpZmYgLS1uYW1lLXN0YXR1cyBkaXIyIGRpcgotQQlkaXIvc3ViCiAkCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZl8tLW5vLWluZGV4Xy0tbmFtZS1zdGF0dXNfZGlyMl9kaXIgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLW5vLWluZGV4Xy0tbmFtZS1zdGF0dXNfZGlyMl9kaXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE0NzU4NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tbm8taW5kZXhfLS1uYW1lLXN0YXR1c19kaXIyX2RpcgpAQCAtMCwwICsxLDMgQEAKKyQgZ2l0IGRpZmYgLS1uby1pbmRleCAtLW5hbWUtc3RhdHVzIGRpcjIgZGlyCitBCWRpci9zdWIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTQtZm9ybWF0LXBhdGNoLnNoIGIvdC90NDAxNC1mb3JtYXQtcGF0Y2guc2gKaW5kZXggYjJiN2E4ZC4uMzU4M2U2OCAxMDA3NTUKLS0tIGEvdC90NDAxNC1mb3JtYXQtcGF0Y2guc2gKKysrIGIvdC90NDAxNC1mb3JtYXQtcGF0Y2guc2gKQEAgLTIyNiw3ICsyMjYsNyBAQAogCiAJZ2l0IGZvcm1hdC1wYXRjaCAtLWNvdmVyLWxldHRlciAtMiAmJgogCXNlZCAtZSAiMSwvQSBVIFRob3IvZCIgLWUgIi9eJC9xIiA8IDAwMDAtY292ZXItbGV0dGVyLnBhdGNoID4gb3V0cHV0ICYmCi0JZ2l0IGRpZmYgZXhwZWN0IG91dHB1dAorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKIAogJwogCmRpZmYgLS1naXQgYS90L3Q0MDE1LWRpZmYtd2hpdGVzcGFjZS5zaCBiL3QvdDQwMTUtZGlmZi13aGl0ZXNwYWNlLnNoCmluZGV4IDgzYzU0YjcuLmNhMDMwMmYgMTAwNzU1Ci0tLSBhL3QvdDQwMTUtZGlmZi13aGl0ZXNwYWNlLnNoCisrKyBiL3QvdDQwMTUtZGlmZi13aGl0ZXNwYWNlLnNoCkBAIC00MywxMyArNDMsMTMgQEAKIEVPRgogCiBnaXQgZGlmZiA+IG91dAotdGVzdF9leHBlY3Rfc3VjY2VzcyAiUmF5J3MgZXhhbXBsZSB3aXRob3V0IG9wdGlvbnMiICdnaXQgZGlmZiBleHBlY3Qgb3V0JwordGVzdF9leHBlY3Rfc3VjY2VzcyAiUmF5J3MgZXhhbXBsZSB3aXRob3V0IG9wdGlvbnMiICd0ZXN0X2NtcCBleHBlY3Qgb3V0JwogCiBnaXQgZGlmZiAtdyA+IG91dAotdGVzdF9leHBlY3Rfc3VjY2VzcyAiUmF5J3MgZXhhbXBsZSB3aXRoIC13IiAnZ2l0IGRpZmYgZXhwZWN0IG91dCcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIlJheSdzIGV4YW1wbGUgd2l0aCAtdyIgJ3Rlc3RfY21wIGV4cGVjdCBvdXQnCiAKIGdpdCBkaWZmIC1iID4gb3V0Ci10ZXN0X2V4cGVjdF9zdWNjZXNzICJSYXkncyBleGFtcGxlIHdpdGggLWIiICdnaXQgZGlmZiBleHBlY3Qgb3V0JwordGVzdF9leHBlY3Rfc3VjY2VzcyAiUmF5J3MgZXhhbXBsZSB3aXRoIC1iIiAndGVzdF9jbXAgZXhwZWN0IG91dCcKIAogdHIgJ1EnICdcMDE1JyA8PCBFT0YgPiB4CiB3aGl0ZXNwYWNlIGF0IGJlZ2lubmluZwpAQCAtOTAsMTQgKzkwLDE0IEBACiArQ1IgYXQgZW5kCiBFT0YKIGdpdCBkaWZmID4gb3V0Ci10ZXN0X2V4cGVjdF9zdWNjZXNzICdhbm90aGVyIHRlc3QsIHdpdGhvdXQgb3B0aW9ucycgJ2dpdCBkaWZmIGV4cGVjdCBvdXQnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbm90aGVyIHRlc3QsIHdpdGhvdXQgb3B0aW9ucycgJ3Rlc3RfY21wIGV4cGVjdCBvdXQnCiAKIGNhdCA8PCBFT0YgPiBleHBlY3QKIGRpZmYgLS1naXQgYS94IGIveAogaW5kZXggZDk5YWYyMy4uOGIzMmZiNSAxMDA2NDQKIEVPRgogZ2l0IGRpZmYgLXcgPiBvdXQKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fub3RoZXIgdGVzdCwgd2l0aCAtdycgJ2dpdCBkaWZmIGV4cGVjdCBvdXQnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbm90aGVyIHRlc3QsIHdpdGggLXcnICd0ZXN0X2NtcCBleHBlY3Qgb3V0JwogCiB0ciAnUScgJ1wwMTUnIDw8IEVPRiA+IGV4cGVjdAogZGlmZiAtLWdpdCBhL3ggYi94CkBAIC0xMTUsNyArMTE1LDcgQEAKICBDUiBhdCBlbmRRCiBFT0YKIGdpdCBkaWZmIC1iID4gb3V0Ci10ZXN0X2V4cGVjdF9zdWNjZXNzICdhbm90aGVyIHRlc3QsIHdpdGggLWInICdnaXQgZGlmZiBleHBlY3Qgb3V0JwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW5vdGhlciB0ZXN0LCB3aXRoIC1iJyAndGVzdF9jbXAgZXhwZWN0IG91dCcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgbWl4ZWQgc3BhY2VzIGFuZCB0YWJzIGluIGluZGVudCcgJwogCmRpZmYgLS1naXQgYS90L3Q0MDE2LWRpZmYtcXVvdGUuc2ggYi90L3Q0MDE2LWRpZmYtcXVvdGUuc2gKaW5kZXggNWRiZGMwYy4uMDk1MDI1MCAxMDA3NTUKLS0tIGEvdC90NDAxNi1kaWZmLXF1b3RlLnNoCisrKyBiL3QvdDQwMTYtZGlmZi1xdW90ZS5zaApAQCAtNDksNyArNDksNyBAQAogRU9GCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZiAtLXN1bW1hcnkgLU0gSEVBRCcgJwogCWdpdCBkaWZmIC0tc3VtbWFyeSAtTSBIRUFEID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiBjYXQgPmV4cGVjdCA8PFxFT0YKQEAgLTY0LDcgKzY0LDcgQEAKIEVPRgogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgLS1zdGF0IC1NIEhFQUQnICcKIAlnaXQgZGlmZiAtLXN0YXQgLU0gSEVBRCA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDE3LWRpZmYtcmV0dmFsLnNoIGIvdC90NDAxNy1kaWZmLXJldHZhbC5zaAppbmRleCBkYzBiNzEyLi4wZDBmYjg3IDEwMDc1NQotLS0gYS90L3Q0MDE3LWRpZmYtcmV0dmFsLnNoCisrKyBiL3QvdDQwMTctZGlmZi1yZXR2YWwuc2gKQEAgLTEwNSw0ICsxMDUsMTIgQEAKIAogJwogCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHNob3VsZCB0ZXN0IG5vdCBqdXN0IHRoZSBsYXN0IGxpbmUnICcKKwllY2hvICIiID4+YSAmJgorCWdpdCAtLW5vLXBhZ2VyIGRpZmYgLS1jaGVjaworCXRlc3QgJD8gPSAyCisKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDE4LWRpZmYtZnVuY25hbWUuc2ggYi90L3Q0MDE4LWRpZmYtZnVuY25hbWUuc2gKaW5kZXggZjlkYjgxZC4uNmQzZWY2YyAxMDA3NTUKLS0tIGEvdC90NDAxOC1kaWZmLWZ1bmNuYW1lLnNoCisrKyBiL3QvdDQwMTgtZGlmZi1mdW5jbmFtZS5zaApAQCAtMzMsMTMgKzMzLDEzIEBACiBzZWQgJ3MvYmVlclxcL2JlZXIsXFwvJyA8IEJlZXIuamF2YSA+IEJlZXItY29ycmVjdC5qYXZhCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlZmF1bHQgYmVoYXZpb3VyJyAnCi0JZ2l0IGRpZmYgQmVlci5qYXZhIEJlZXItY29ycmVjdC5qYXZhIHwKKwlnaXQgZGlmZiAtLW5vLWluZGV4IEJlZXIuamF2YSBCZWVyLWNvcnJlY3QuamF2YSB8CiAJZ3JlcCAiXkBALipAQCBwdWJsaWMgY2xhc3MgQmVlciIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlc2V0IGphdmEgcGF0dGVybicgJwogCWVjaG8gIiouamF2YSBkaWZmPWphdmEiID4uZ2l0YXR0cmlidXRlcyAmJgotCWdpdCBkaWZmIEJlZXIuamF2YSBCZWVyLWNvcnJlY3QuamF2YSB8CisJZ2l0IGRpZmYgLS1uby1pbmRleCBCZWVyLmphdmEgQmVlci1jb3JyZWN0LmphdmEgfAogCWdyZXAgIl5AQC4qQEAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oIgogJwogCkBAIC00OCwxMyArNDgsMTMgQEAKIFteIAldLipzLionCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N1c3RvbSBwYXR0ZXJuJyAnCi0JZ2l0IGRpZmYgQmVlci5qYXZhIEJlZXItY29ycmVjdC5qYXZhIHwKKwlnaXQgZGlmZiAtLW5vLWluZGV4IEJlZXIuamF2YSBCZWVyLWNvcnJlY3QuamF2YSB8CiAJZ3JlcCAiXkBALipAQCBpbnQgc3BlY2lhbDskIgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdsYXN0IHJlZ2V4cCBtdXN0IG5vdCBiZSBuZWdhdGVkJyAnCiAJZ2l0IGNvbmZpZyBkaWZmLmphdmEuZnVuY25hbWUgIiFzdGF0aWMiICYmCi0JISBnaXQgZGlmZiBCZWVyLmphdmEgQmVlci1jb3JyZWN0LmphdmEKKwkhIGdpdCBkaWZmIC0tbm8taW5kZXggQmVlci5qYXZhIEJlZXItY29ycmVjdC5qYXZhCiAnCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAyNy1kaWZmLXN1Ym1vZHVsZS5zaCBiL3QvdDQwMjctZGlmZi1zdWJtb2R1bGUuc2gKaW5kZXggMWZkM2ZiNy4uYmE2Njc5YyAxMDA3NTUKLS0tIGEvdC90NDAyNy1kaWZmLXN1Ym1vZHVsZS5zaAorKysgYi90L3Q0MDI3LWRpZmYtc3VibW9kdWxlLnNoCkBAIC01MCw0ICs1MCwxMSBAQAogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuZmlsZXMKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgKGVtcHR5IHN1Ym1vZHVsZSBkaXIpJyAnCisJOiA+ZW1wdHkgJiYKKwlybSAtcmYgc3ViLyogc3ViLy5naXQgJiYKKwlnaXQgZGlmZiA+IGFjdHVhbC5lbXB0eSAmJgorCXRlc3RfY21wIGVtcHR5IGFjdHVhbC5lbXB0eQorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMDAtYXBwbHktc3RhdC5zaCBiL3QvdDQxMDAtYXBwbHktc3RhdC5zaAppbmRleCA0MzVmNjViLi44MDczYTVhIDEwMDc1NQotLS0gYS90L3Q0MTAwLWFwcGx5LXN0YXQuc2gKKysrIGIvdC90NDEwMC1hcHBseS1zdGF0LnNoCkBAIC0xMSwzNiArMTEsMzYgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdyZW5hbWUnIFwKICAgICAnZ2l0IGFwcGx5IC0tc3RhdCAtLXN1bW1hcnkgPC4uL3Q0MTAwL3QtYXBwbHktMS5wYXRjaCA+Y3VycmVudCAmJgotICAgIGdpdCBkaWZmIC4uL3Q0MTAwL3QtYXBwbHktMS5leHBlY3QgY3VycmVudCcKKyAgICB0ZXN0X2NtcCAuLi90NDEwMC90LWFwcGx5LTEuZXhwZWN0IGN1cnJlbnQnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdjb3B5JyBcCiAgICAgJ2dpdCBhcHBseSAtLXN0YXQgLS1zdW1tYXJ5IDwuLi90NDEwMC90LWFwcGx5LTIucGF0Y2ggPmN1cnJlbnQgJiYKLSAgICBnaXQgZGlmZiAuLi90NDEwMC90LWFwcGx5LTIuZXhwZWN0IGN1cnJlbnQnCisgICAgdGVzdF9jbXAgLi4vdDQxMDAvdC1hcHBseS0yLmV4cGVjdCBjdXJyZW50JwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAncmV3cml0ZScgXAogICAgICdnaXQgYXBwbHkgLS1zdGF0IC0tc3VtbWFyeSA8Li4vdDQxMDAvdC1hcHBseS0zLnBhdGNoID5jdXJyZW50ICYmCi0gICAgZ2l0IGRpZmYgLi4vdDQxMDAvdC1hcHBseS0zLmV4cGVjdCBjdXJyZW50JworICAgIHRlc3RfY21wIC4uL3Q0MTAwL3QtYXBwbHktMy5leHBlY3QgY3VycmVudCcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ21vZGUnIFwKICAgICAnZ2l0IGFwcGx5IC0tc3RhdCAtLXN1bW1hcnkgPC4uL3Q0MTAwL3QtYXBwbHktNC5wYXRjaCA+Y3VycmVudCAmJgotICAgIGdpdCBkaWZmIC4uL3Q0MTAwL3QtYXBwbHktNC5leHBlY3QgY3VycmVudCcKKyAgICB0ZXN0X2NtcCAuLi90NDEwMC90LWFwcGx5LTQuZXhwZWN0IGN1cnJlbnQnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdub24gZ2l0JyBcCiAgICAgJ2dpdCBhcHBseSAtLXN0YXQgLS1zdW1tYXJ5IDwuLi90NDEwMC90LWFwcGx5LTUucGF0Y2ggPmN1cnJlbnQgJiYKLSAgICBnaXQgZGlmZiAuLi90NDEwMC90LWFwcGx5LTUuZXhwZWN0IGN1cnJlbnQnCisgICAgdGVzdF9jbXAgLi4vdDQxMDAvdC1hcHBseS01LmV4cGVjdCBjdXJyZW50JwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnbm9uIGdpdCcgXAogICAgICdnaXQgYXBwbHkgLS1zdGF0IC0tc3VtbWFyeSA8Li4vdDQxMDAvdC1hcHBseS02LnBhdGNoID5jdXJyZW50ICYmCi0gICAgZ2l0IGRpZmYgLi4vdDQxMDAvdC1hcHBseS02LmV4cGVjdCBjdXJyZW50JworICAgIHRlc3RfY21wIC4uL3Q0MTAwL3QtYXBwbHktNi5leHBlY3QgY3VycmVudCcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ25vbiBnaXQnIFwKICAgICAnZ2l0IGFwcGx5IC0tc3RhdCAtLXN1bW1hcnkgPC4uL3Q0MTAwL3QtYXBwbHktNy5wYXRjaCA+Y3VycmVudCAmJgotICAgIGdpdCBkaWZmIC4uL3Q0MTAwL3QtYXBwbHktNy5leHBlY3QgY3VycmVudCcKKyAgICB0ZXN0X2NtcCAuLi90NDEwMC90LWFwcGx5LTcuZXhwZWN0IGN1cnJlbnQnCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEwNC1hcHBseS1ib3VuZGFyeS5zaCBiL3QvdDQxMDQtYXBwbHktYm91bmRhcnkuc2gKaW5kZXggNDM5NDNhYi4uZTdlMjkxMyAxMDA3NTUKLS0tIGEvdC90NDEwNC1hcHBseS1ib3VuZGFyeS5zaAorKysgYi90L3Q0MTA0LWFwcGx5LWJvdW5kYXJ5LnNoCkBAIC05MCw3ICs5MCw3IEBACiAJCQkJY2F0ICciJGtpbmQtcGF0Y2guJHdpdGgiJwogCQkJCShleGl0IDEpCiAJCQl9ICYmCi0JCQlnaXQgZGlmZiAnIiRraW5kIictZXhwZWN0IHZpY3RpbQorCQkJdGVzdF9jbXAgJyIka2luZCInLWV4cGVjdCB2aWN0aW0KIAkJJwogCWRvbmUKIGRvbmUKQEAgLTEwOCw3ICsxMDgsNyBAQAogCQkJY2F0ICciJGtpbmQtbmcud2l0aG91dCInCiAJCQkoZXhpdCAxKQogCQl9ICYmCi0JCWdpdCBkaWZmICciJGtpbmQiJy1leHBlY3QgdmljdGltCisJCXRlc3RfY21wICciJGtpbmQiJy1leHBlY3QgdmljdGltCiAJJwogZG9uZQogCmRpZmYgLS1naXQgYS90L3Q0MTE1LWFwcGx5LXN5bWxpbmsuc2ggYi90L3Q0MTE1LWFwcGx5LXN5bWxpbmsuc2gKaW5kZXggYTA3ZmY0Mi4uOWFjZTU3OCAxMDA3NTUKLS0tIGEvdC90NDExNS1hcHBseS1zeW1saW5rLnNoCisrKyBiL3QvdDQxMTUtYXBwbHktc3ltbGluay5zaApAQCAtMzMsNyArMzMsNyBAQAogCWdpdCBjaGVja291dCBzaWRlICYmCiAJZ2l0IGFwcGx5IHBhdGNoICYmCiAJZ2l0IGRpZmYtZmlsZXMgLXAgPnBhdGNoZWQgJiYKLQlnaXQgZGlmZiBwYXRjaCBwYXRjaGVkCisJdGVzdF9jbXAgcGF0Y2ggcGF0Y2hlZAogCiAnCiAKQEAgLTQyLDcgKzQyLDcgQEAKIAlnaXQgY2hlY2tvdXQgLWYgc2lkZSAmJgogCWdpdCBhcHBseSAtLWluZGV4IHBhdGNoICYmCiAJZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLXAgSEVBRCA+cGF0Y2hlZCAmJgotCWdpdCBkaWZmIHBhdGNoIHBhdGNoZWQKKwl0ZXN0X2NtcCBwYXRjaCBwYXRjaGVkCiAKICcKIApkaWZmIC0tZ2l0IGEvdC90NDExNi1hcHBseS1yZXZlcnNlLnNoIGIvdC90NDExNi1hcHBseS1yZXZlcnNlLnNoCmluZGV4IGMzZjQ1NzkuLjE0NTlhOTAgMTAwNzU1Ci0tLSBhL3QvdDQxMTYtYXBwbHktcmV2ZXJzZS5zaAorKysgYi90L3Q0MTE2LWFwcGx5LXJldmVyc2Uuc2gKQEAgLTQyLDcgKzQyLDcgQEAKIAlnaXQgcmVzZXQgLS1oYXJkIHNlY29uZCAmJgogCWdpdCBhcHBseSAtLXJldmVyc2UgLS1iaW5hcnkgLS1pbmRleCBwYXRjaCAmJgogCWdpdCBkaWZmID5kaWZmICYmCi0JZ2l0IGRpZmYgL2Rldi9udWxsIGRpZmYKKwl0ZXN0X2NtcCAvZGV2L251bGwgZGlmZgogCiAnCiAKZGlmZiAtLWdpdCBhL3QvdDQxMTctYXBwbHktcmVqZWN0LnNoIGIvdC90NDExNy1hcHBseS1yZWplY3Quc2gKaW5kZXggNjU5ZTE3Yy4uZTljY2QxNiAxMDA3NTUKLS0tIGEvdC90NDExNy1hcHBseS1yZWplY3Quc2gKKysrIGIvdC90NDExNy1hcHBseS1yZWplY3Quc2gKQEAgLTU0LDcgKzU0LDcgQEAKIAkJZXhpdCAxCiAJZmkKIAotCWdpdCBkaWZmIGZpbGUxIHNhdmVkLmZpbGUxCisJdGVzdF9jbXAgZmlsZTEgc2F2ZWQuZmlsZTEKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgd2l0aG91dCAtLXJlamVjdCBzaG91bGQgZmFpbCcgJwpAQCAtNjUsNyArNjUsNyBAQAogCQlleGl0IDEKIAlmaQogCi0JZ2l0IGRpZmYgZmlsZTEgc2F2ZWQuZmlsZTEKKwl0ZXN0X2NtcCBmaWxlMSBzYXZlZC5maWxlMQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSB3aXRoIC0tcmVqZWN0IHNob3VsZCBmYWlsIGJ1dCB1cGRhdGUgdGhlIGZpbGUnICcKQEAgLTc5LDcgKzc5LDcgQEAKIAkJZXhpdCAxCiAJZmkKIAotCWdpdCBkaWZmIGZpbGUxIGV4cGVjdGVkICYmCisJdGVzdF9jbXAgZmlsZTEgZXhwZWN0ZWQgJiYKIAogCWNhdCBmaWxlMS5yZWogJiYKIApAQCAtMTA1LDcgKzEwNSw3IEBACiAJCWVjaG8gImZpbGUxIHN0aWxsIGV4aXN0cz8iCiAJCWV4aXQgMQogCX0KLQlnaXQgZGlmZiBmaWxlMiBleHBlY3RlZCAmJgorCXRlc3RfY21wIGZpbGUyIGV4cGVjdGVkICYmCiAKIAljYXQgZmlsZTIucmVqICYmCiAKQEAgLTEzMiw3ICsxMzIsNyBAQAogCQllY2hvICJmaWxlMSBzdGlsbCBleGlzdHM/IgogCQlleGl0IDEKIAl9Ci0JZ2l0IGRpZmYgZmlsZTIgZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBmaWxlMiBleHBlY3RlZCAmJgogCiAJY2F0IGZpbGUyLnJlaiAmJgogCkBAIC0xNTEsNyArMTUxLDcgQEAKIAogCWdpdCBhcHBseSAtLXZlcmJvc2UgcGF0Y2guMSAmJgogCi0JZ2l0IGRpZmYgZmlsZTEgY2xlYW4KKwl0ZXN0X2NtcCBmaWxlMSBjbGVhbgogJwogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMTgtYXBwbHktZW1wdHktY29udGV4dC5zaCBiL3QvdDQxMTgtYXBwbHktZW1wdHktY29udGV4dC5zaAppbmRleCAxZDUzMWNhLi5mOTJlMjU5IDEwMDc1NQotLS0gYS90L3Q0MTE4LWFwcGx5LWVtcHR5LWNvbnRleHQuc2gKKysrIGIvdC90NDExOC1hcHBseS1lbXB0eS1jb250ZXh0LnNoCkBAIC0zOCw3ICszOCw3IEBACiAJCWVjaG8gIjAJMQlmaWxlMSIgJiYKIAkJZWNobyAiMAkxCWZpbGUyIgogCX0gPmV4cGVjdCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAKICcKIApAQCAtNDgsOCArNDgsOCBAQAogCWNhdCBmaWxlMi5vcmlnID5maWxlMiAmJgogCWdpdCB1cGRhdGUtaW5kZXggZmlsZTEgZmlsZTIgJiYKIAlnaXQgYXBwbHkgLS1pbmRleCBkaWZmLm91dHB1dCAmJgotCWdpdCBkaWZmIGZpbGUxLm1vZHMgZmlsZTEgJiYKLQlnaXQgZGlmZiBmaWxlMi5tb2RzIGZpbGUyCisJdGVzdF9jbXAgZmlsZTEubW9kcyBmaWxlMSAmJgorCXRlc3RfY21wIGZpbGUyLm1vZHMgZmlsZTIKICcKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTI2LWFwcGx5LWVtcHR5LnNoIGIvdC90NDEyNi1hcHBseS1lbXB0eS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jZWI2YTc5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEyNi1hcHBseS1lbXB0eS5zaApAQCAtMCwwICsxLDU3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYXBwbHkgZW1wdHknCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwk+ZW1wdHkgJiYKKwlnaXQgYWRkIGVtcHR5ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZm9yIGkgaW4gYSBiIGMgZCBlCisJZG8KKwkJZWNobyAkaQorCWRvbmUgPmVtcHR5ICYmCisJY2F0IGVtcHR5ID5leHBlY3QgJiYKKwlnaXQgZGlmZiB8CisJc2VkIC1lICIvXmRpZmYgLS1naXQvZCIgXAorCSAgICAtZSAiL15pbmRleCAvZCIgXAorCSAgICAtZSAic3xhL2VtcHR5fGVtcHR5Lm9yaWd8IiBcCisJICAgIC1lICJzfGIvZW1wdHl8ZW1wdHl8IiA+cGF0Y2gwICYmCisJc2VkIC1lICJzfGVtcHR5fG1pc3Npbmd8IiBwYXRjaDAgPnBhdGNoMSAmJgorCT5lbXB0eSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGVtcHR5JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXJtIC1mIG1pc3NpbmcgJiYKKwlnaXQgYXBwbHkgcGF0Y2gwICYmCisJdGVzdF9jbXAgZXhwZWN0IGVtcHR5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IC0taW5kZXggZW1wdHknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJcm0gLWYgbWlzc2luZyAmJgorCWdpdCBhcHBseSAtLWluZGV4IHBhdGNoMCAmJgorCXRlc3RfY21wIGV4cGVjdCBlbXB0eSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGNyZWF0ZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlybSAtZiBtaXNzaW5nICYmCisJZ2l0IGFwcGx5IHBhdGNoMSAmJgorCXRlc3RfY21wIGV4cGVjdCBtaXNzaW5nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IC0taW5kZXggY3JlYXRlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXJtIC1mIG1pc3NpbmcgJiYKKwlnaXQgYXBwbHkgLS1pbmRleCBwYXRjaDEgJiYKKwl0ZXN0X2NtcCBleHBlY3QgbWlzc2luZyAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDE1MC1hbS1zdWJkaXIuc2ggYi90L3Q0MTUwLWFtLXN1YmRpci5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNTIwNjliNC4uMDAwMDAwMAotLS0gYS90L3Q0MTUwLWFtLXN1YmRpci5zaAorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLSMhL2Jpbi9zaAotCi10ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYW0gcnVubmluZyBmcm9tIGEgc3ViZGlyZWN0b3J5JwotCi0uIC4vdGVzdC1saWIuc2gKLQotdGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCi0JZWNobyBoZWxsbyA+d29ybGQgJiYKLQlnaXQgYWRkIHdvcmxkICYmCi0JdGVzdF90aWNrICYmCi0JZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCi0JZ2l0IHRhZyBpbml0aWFsICYmCi0JZWNobyBnb29kYnllID53b3JsZCAmJgotCWdpdCBhZGQgd29ybGQgJiYKLQl0ZXN0X3RpY2sgJiYKLQlnaXQgY29tbWl0IC1tIHNlY29uZCAmJgotCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgSEVBRF4gPnBhdGNoZmlsZSAmJgotCTogPmV4cGVjdAotJwotCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSByZWd1bGFybHkgZnJvbSBzdGRpbicgJwotCWdpdCBjaGVja291dCBpbml0aWFsICYmCi0JZ2l0IGFtIDxwYXRjaGZpbGUgJiYKLQlnaXQgZGlmZiBtYXN0ZXIgPmFjdHVhbCAmJgotCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKLScKLQotdGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gcmVndWxhcmx5IGZyb20gZmlsZScgJwotCWdpdCBjaGVja291dCBpbml0aWFsICYmCi0JZ2l0IGFtIHBhdGNoZmlsZSAmJgotCWdpdCBkaWZmIG1hc3RlciA+YWN0dWFsICYmCi0JdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAotJwotCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSByZWd1bGFybHkgZnJvbSBzdGRpbiBpbiBzdWJkaXJlY3RvcnknICcKLQlybSAtZnIgc3ViZGlyICYmCi0JZ2l0IGNoZWNrb3V0IGluaXRpYWwgJiYKLQkoCi0JCW1rZGlyIC1wIHN1YmRpciAmJgotCQljZCBzdWJkaXIgJiYKLQkJZ2l0IGFtIDwuLi9wYXRjaGZpbGUKLQkpICYmCi0JZ2l0IGRpZmYgbWFzdGVyPmFjdHVhbCAmJgotCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKLScKLQotdGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gcmVndWxhcmx5IGZyb20gZmlsZSBpbiBzdWJkaXJlY3RvcnknICcKLQlybSAtZnIgc3ViZGlyICYmCi0JZ2l0IGNoZWNrb3V0IGluaXRpYWwgJiYKLQkoCi0JCW1rZGlyIC1wIHN1YmRpciAmJgotCQljZCBzdWJkaXIgJiYKLQkJZ2l0IGFtIC4uL3BhdGNoZmlsZQotCSkgJiYKLQlnaXQgZGlmZiBtYXN0ZXIgPmFjdHVhbCAmJgotCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKLScKLQotdGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gcmVndWxhcmx5IGZyb20gZmlsZSBpbiBzdWJkaXJlY3Rvcnkgd2l0aCBmdWxsIHBhdGgnICcKLQlybSAtZnIgc3ViZGlyICYmCi0JZ2l0IGNoZWNrb3V0IGluaXRpYWwgJiYKLQlQPSQocHdkKSAmJgotCSgKLQkJbWtkaXIgLXAgc3ViZGlyICYmCi0JCWNkIHN1YmRpciAmJgotCQlnaXQgYW0gIiRQL3BhdGNoZmlsZSIKLQkpICYmCi0JZ2l0IGRpZmYgbWFzdGVyID5hY3R1YWwgJiYKLQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCi0nCi0KLXRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDE1MC1hbS5zaCBiL3QvdDQxNTAtYW0uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzIyYWU5NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxNTAtYW0uc2gKQEAgLTAsMCArMSwyNjAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYW0gcnVubmluZycKKworLiAuL3Rlc3QtbGliLnNoCisKK2NhdCA+bXNnIDw8RU9GCitzZWNvbmQKKworTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVlciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkKK2Vpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbQordm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEKK2thc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtCitpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kCit0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQKK3Zlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uCisKKwlEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQKKwllc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcworCWF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdAorCXByYWVzZW50IGx1cHRhdHVtIHp6cmlsIGRlbGVuaXQgYXVndWUgZHVpcyBkb2xvcmUgdGUgZmV1Z2FpdCBudWxsYQorCWZhY2lsaXNpLgorCisKK0xvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LAorY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0CitsYW9yZWV0IGRvbG9yZSBtYWduYSBhbGlxdWFtIGVyYXQgdm9sdXRwYXQuCisKKyAgZ2l0CisgIC0tLQorICArKysKKworVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQKK2xvYm9ydGlzIG5pc2wgdXQgYWxpcXVpcCBleCBlYSBjb21tb2RvIGNvbnNlcXVhdC4gRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZQorZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtCitkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMgYXQgdmVybyBlcm9zIGV0IGFjY3Vtc2FuIGV0IGl1c3RvIG9kaW8KK2RpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlCitmZXVnYWl0IG51bGxhIGZhY2lsaXNpLgorRU9GCisKK2NhdCA+ZmFpbG1haWwgPDxFT0YKK0Zyb20gZm9vQGV4YW1wbGUuY29tIEZyaSBNYXkgMjMgMTA6NDM6NDkgMjAwOAorRnJvbToJZm9vQGV4YW1wbGUuY29tCitUbzoJYmFyQGV4YW1wbGUuY29tCitTdWJqZWN0OiBSZTogW1JGQy9QQVRDSF0gZ2l0LWZvby5zaAorRGF0ZToJRnJpLCAyMyBNYXkgMjAwOCAwNToyMzo0MiArMDIwMAorCitTb21ldGltZXMgd2UgaGF2ZSB0byBmaW5kIG91dCB0aGF0IHRoZXJlJ3Mgbm90aGluZyBsZWZ0LgorCitFT0YKKworY2F0ID5waW5lIDw8RU9GCitGcm9tIE1BSUxFUi1EQUVNT04gRnJpIE1heSAyMyAxMDo0Mzo0OSAyMDA4CitEYXRlOiAyMyBNYXkgMjAwOCAwNToyMzo0MiArMDIwMAorRnJvbTogTWFpbCBTeXN0ZW0gSW50ZXJuYWwgRGF0YSA8TUFJTEVSLURBRU1PTkBleGFtcGxlLmNvbT4KK1N1YmplY3Q6IERPTidUIERFTEVURSBUSElTIE1FU1NBR0UgLS0gRk9MREVSIElOVEVSTkFMIERBVEEKK01lc3NhZ2UtSUQ6IDxmb28tMDAwMUBleGFtcGxlLmNvbT4KKworVGhpcyB0ZXh0IGlzIHBhcnQgb2YgdGhlIGludGVybmFsIGZvcm1hdCBvZiB5b3VyIG1haWwgZm9sZGVyLCBhbmQgaXMgbm90CithIHJlYWwgbWVzc2FnZS4gIEl0IGlzIGNyZWF0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgbWFpbCBzeXN0ZW0gc29mdHdhcmUuCitJZiBkZWxldGVkLCBpbXBvcnRhbnQgZm9sZGVyIGRhdGEgd2lsbCBiZSBsb3N0LCBhbmQgaXQgd2lsbCBiZSByZS1jcmVhdGVkCit3aXRoIHRoZSBkYXRhIHJlc2V0IHRvIGluaXRpYWwgdmFsdWVzLgorCitFT0YKKworZWNobyAiU2lnbmVkLW9mZi1ieTogJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IiA+ZXhwZWN0ZWQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBoZWxsbyA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gZmlyc3QgJiYKKwlnaXQgdGFnIGZpcnN0ICYmCisJZWNobyB3b3JsZCA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1zIC1GIG1zZyAmJgorCWdpdCB0YWcgc2Vjb25kICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBmaXJzdCA+cGF0Y2gxICYmCisJc2VkIC1uIC1lICIzLFwkcCIgbXNnID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSB0aGlyZCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgZmlyc3QgPnBhdGNoMgkmJgorCWdpdCBjaGVja291dCAtYiBsb3JlbSAmJgorCXNlZCAtbiAtZSAiMTEsXCRwIiBtc2cgPmZpbGUgJiYKKwloZWFkIC1uIDkgbXNnID4+ZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gIm1vdmVkIHN0dWZmIiAmJgorCWVjaG8gZ29vZGJ5ZSA+YW5vdGhlciAmJgorCWdpdCBhZGQgYW5vdGhlciAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImFkZGVkIGFub3RoZXIgZmlsZSIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IG1hc3RlciA+bG9yZW0tbW92ZS5wYXRjaAorJworCisjIHJlc2V0IHRpbWUKK3Vuc2V0IHRlc3RfdGljawordGVzdF90aWNrCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIGFwcGxpZXMgcGF0Y2ggY29ycmVjdGx5JyAnCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGFtIDxwYXRjaDEgJiYKKwkhIHRlc3QgLWQgLmRvdGVzdCAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYgc2Vjb25kKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2Ugc2Vjb25kKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBzZWNvbmReKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReKSIKKycKKworR0lUX0FVVEhPUl9OQU1FPSJBbm90aGVyIFRob3IiCitHSVRfQVVUSE9SX0VNQUlMPSJhLnRob3JAZXhhbXBsZS5jb20iCitHSVRfQ09NTUlUVEVSX05BTUU9IkNvIE0gTWl0ZXIiIAorR0lUX0NPTU1JVFRFUl9FTUFJTD0iYy5taXRlckBleGFtcGxlLmNvbSIKK2V4cG9ydCBHSVRfQVVUSE9SX05BTUUgR0lUX0FVVEhPUl9FTUFJTCBHSVRfQ09NTUlUVEVSX05BTUUgR0lUX0NPTU1JVFRFUl9FTUFJTAorCitjb21wYXJlICgpIHsKKwl0ZXN0ICIkKGdpdCBjYXQtZmlsZSBjb21taXQgIiQyIiB8IGdyZXAgIl4kMSAiKSIgPSBcCisJICAgICAiJChnaXQgY2F0LWZpbGUgY29tbWl0ICIkMyIgfCBncmVwICJeJDEgIikiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIGNoYW5nZXMgY29tbWl0dGVyIGFuZCBrZWVwcyBhdXRob3InICcKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKwlnaXQgYW0gcGF0Y2gyICYmCisJISB0ZXN0IC1kIC5kb3Rlc3QgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgbWFzdGVyXl4pIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRF5eKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmIG1hc3Rlci4uSEVBRCkiICYmCisJdGVzdCAteiAiJChnaXQgZGlmZiBtYXN0ZXJeLi5IRUFEXikiICYmCisJY29tcGFyZSBhdXRob3IgbWFzdGVyIEhFQUQgJiYKKwljb21wYXJlIGF1dGhvciBtYXN0ZXJeIEhFQUReICYmCisJdGVzdCAiJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IiA9IFwKKwkgICAgICIkKGdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiIlY24gPCVjZT4iIEhFQUQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtLXNpZ25vZmYgYWRkcyBTaWduZWQtb2ZmLWJ5OiBsaW5lJyAnCisJZ2l0IGNoZWNrb3V0IC1iIG1hc3RlcjIgZmlyc3QgJiYKKwlnaXQgYW0gLS1zaWdub2ZmIDxwYXRjaDIgJiYKKwllY2hvICJTaWduZWQtb2ZmLWJ5OiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4iID4+ZXhwZWN0ZWQgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReIHwgZ3JlcCAiU2lnbmVkLW9mZi1ieToiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgZXhwZWN0ZWQgJiYKKwllY2hvICJTaWduZWQtb2ZmLWJ5OiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4iID5leHBlY3RlZCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IGdyZXAgIlNpZ25lZC1vZmYtYnk6IiA+YWN0dWFsICYmCisJdGVzdF9jbXAgYWN0dWFsIGV4cGVjdGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIHN0YXlzIGluIGJyYW5jaCcgJworCXRlc3QgInJlZnMvaGVhZHMvbWFzdGVyMiIgPSAiJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtLXNpZ25vZmYgZG9lcyBub3QgYWRkIFNpZ25lZC1vZmYtYnk6IGxpbmUgaWYgYWxyZWFkeSB0aGVyZScgJworCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgSEVBRF4gPnBhdGNoMyAmJgorCXNlZCAtZSAiL15TdWJqZWN0LyBzLFxbUEFUQ0gsUmU6IFJlOiBSZTogJiAxLzUgdjIsIiBwYXRjaDMgPnBhdGNoNAorCWdpdCBjaGVja291dCBIRUFEXiAmJgorCWdpdCBhbSAtLXNpZ25vZmYgcGF0Y2g0ICYmCisJdGVzdCAiJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBncmVwIC1jICJeU2lnbmVkLW9mZi1ieToiKSIgLWVxIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gd2l0aG91dCAtLWtlZXAgcmVtb3ZlcyBSZTogYW5kIFtQQVRDSF0gc3R1ZmYnICcKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gIiQoZ2l0IHJldi1wYXJzZSBtYXN0ZXIyKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLS1rZWVwIHJlYWxseSBrZWVwcyB0aGUgc3ViamVjdCcgJworCWdpdCBjaGVja291dCBIRUFEXiAmJgorCWdpdCBhbSAtLWtlZXAgcGF0Y2g0ICYmCisJISB0ZXN0IC1kIC5kb3Rlc3QgJiYKKwlnaXQtY2F0LWZpbGUgY29tbWl0IEhFQUQgfAorCQlncmVwIC1xIC1GICJSZTogUmU6IFJlOiBbUEFUQ0ggMS81IHYyXSB0aGlyZCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLTMgZmFsbHMgYmFjayB0byAzLXdheSBtZXJnZScgJworCWdpdCBjaGVja291dCAtYiBsb3JlbTIgbWFzdGVyMiAmJgorCXNlZCAtbiAtZSAiMyxcJHAiIG1zZyA+ZmlsZSAmJgorCWhlYWQgLW4gOSBtc2cgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiY29waWVkIHN0dWZmIiAmJgorCWdpdCBhbSAtMyBsb3JlbS1tb3ZlLnBhdGNoICYmCisJISB0ZXN0IC1kIC5kb3Rlc3QgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmIGxvcmVtKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gcGF1c2VzIG9uIGNvbmZsaWN0JyAnCisJZ2l0IGNoZWNrb3V0IGxvcmVtMl5eICYmCisJISBnaXQgYW0gbG9yZW0tbW92ZS5wYXRjaCAmJgorCXRlc3QgLWQgLmRvdGVzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtLXNraXAgd29ya3MnICcKKwlnaXQgYW0gLS1za2lwICYmCisJISB0ZXN0IC1kIC5kb3Rlc3QgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmIGxvcmVtMl5eIC0tIGZpbGUpIiAmJgorCXRlc3QgZ29vZGJ5ZSA9ICIkKGNhdCBhbm90aGVyKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLS1yZXNvbHZlZCB3b3JrcycgJworCWdpdCBjaGVja291dCBsb3JlbTJeXiAmJgorCSEgZ2l0IGFtIGxvcmVtLW1vdmUucGF0Y2ggJiYKKwl0ZXN0IC1kIC5kb3Rlc3QgJiYKKwllY2hvIHJlc29sdmVkID4+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBhbSAtLXJlc29sdmVkICYmCisJISB0ZXN0IC1kIC5kb3Rlc3QgJiYKKwl0ZXN0IGdvb2RieWUgPSAiJChjYXQgYW5vdGhlcikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIHRha2VzIHBhdGNoZXMgZnJvbSBhIFBpbmUgbWFpbGJveCcgJworCWdpdCBjaGVja291dCBmaXJzdCAmJgorCWNhdCBwaW5lIHBhdGNoMSB8IGdpdCBhbSAmJgorCSEgdGVzdCAtZCAuZG90ZXN0ICYmCisJdGVzdCAteiAiJChnaXQgZGlmZiBtYXN0ZXJeLi5IRUFEKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gZmFpbHMgb24gbWFpbCB3aXRob3V0IHBhdGNoJyAnCisJISBnaXQgYW0gPGZhaWxtYWlsICYmCisJcm0gLXIgLmRvdGVzdC8KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gZmFpbHMgb24gZW1wdHkgcGF0Y2gnICcKKwllY2hvICItLS0iID4+ZmFpbG1haWwgJiYKKwkhIGdpdCBhbSA8ZmFpbG1haWwgJiYKKwlnaXQgYW0gLS1za2lwICYmCisJISB0ZXN0IC1kIC5kb3Rlc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gd29ya3MgZnJvbSBzdGRpbiBpbiBzdWJkaXJlY3RvcnknICcKKwlybSAtZnIgc3ViZGlyICYmCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisJKAorCQlta2RpciAtcCBzdWJkaXIgJiYKKwkJY2Qgc3ViZGlyICYmCisJCWdpdCBhbSA8Li4vcGF0Y2gxCisJKSAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYgc2Vjb25kKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gd29ya3MgZnJvbSBmaWxlIChyZWxhdGl2ZSBwYXRoIGdpdmVuKSBpbiBzdWJkaXJlY3RvcnknICcKKwlybSAtZnIgc3ViZGlyICYmCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisJKAorCQlta2RpciAtcCBzdWJkaXIgJiYKKwkJY2Qgc3ViZGlyICYmCisJCWdpdCBhbSAuLi9wYXRjaDEKKwkpICYmCisJdGVzdCAteiAiJChnaXQgZGlmZiBzZWNvbmQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSB3b3JrcyBmcm9tIGZpbGUgKGFic29sdXRlIHBhdGggZ2l2ZW4pIGluIHN1YmRpcmVjdG9yeScgJworCXJtIC1mciBzdWJkaXIgJiYKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKwlQPSQocHdkKSAmJgorCSgKKwkJbWtkaXIgLXAgc3ViZGlyICYmCisJCWNkIHN1YmRpciAmJgorCQlnaXQgYW0gIiRQL3BhdGNoMSIKKwkpICYmCisJdGVzdCAteiAiJChnaXQgZGlmZiBzZWNvbmQpIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQyMDAtcmVyZXJlLnNoIGIvdC90NDIwMC1yZXJlcmUuc2gKaW5kZXggM2NiZmVlNy4uODVkN2UzZSAxMDA3NTUKLS0tIGEvdC90NDIwMC1yZXJlcmUuc2gKKysrIGIvdC90NDIwMC1yZXJlcmUuc2gKQEAgLTEwMSw3ICsxMDEsNyBAQAogRU9GCiBnaXQgcmVyZXJlIGRpZmYgPiBvdXQKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAncmVyZXJlIGRpZmYnICdnaXQgZGlmZiBleHBlY3Qgb3V0JwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVyZXJlIGRpZmYnICd0ZXN0X2NtcCBleHBlY3Qgb3V0JwogCiBjYXQgPiBleHBlY3QgPDwgRU9GCiBhMQpAQCAtMTA5LDcgKzEwOSw3IEBACiAKIGdpdCByZXJlcmUgc3RhdHVzID4gb3V0CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcmVyZSBzdGF0dXMnICdnaXQgZGlmZiBleHBlY3Qgb3V0JwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVyZXJlIHN0YXR1cycgJ3Rlc3RfY21wIGV4cGVjdCBvdXQnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBzdWNjZWVkcycgXAogCSJnaXQgY29tbWl0IC1xIC1hIC1tICdwcmVmZXIgZmlyc3Qgb3ZlciBzZWNvbmQnIgpAQCAtMTI2LDcgKzEyNiw3IEBACiBnaXQgc2hvdyBmaXJzdDphMSB8IHNlZCAncy9UbyBkaWU6IHQvVG8gZGllISBULycgPiBleHBlY3QKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcmVyZSBraWNrZWQgaW4nICIhIGdyZXAgPT09PT09PSBhMSIKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAncmVyZXJlIHByZWZlcnMgZmlyc3QgY2hhbmdlJyAnZ2l0IGRpZmYgYTEgZXhwZWN0JwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVyZXJlIHByZWZlcnMgZmlyc3QgY2hhbmdlJyAndGVzdF9jbXAgYTEgZXhwZWN0JwogCiBybSAkcnIvcG9zdGltYWdlCiBlY2hvICIkc2hhMQlhMSIgfCBwZXJsIC1wZSAneS9cMDEyL1wwMDAvJyA+IC5naXQvcnItY2FjaGUvTUVSR0VfUlIKZGlmZiAtLWdpdCBhL3QvdDQyMDItbG9nLnNoIGIvdC90NDIwMi1sb2cuc2gKaW5kZXggYjUzNjQ1NC4uNGM4YWY0NSAxMDA3NTUKLS0tIGEvdC90NDIwMi1sb2cuc2gKKysrIGIvdC90NDIwMi1sb2cuc2gKQEAgLTcxLDQgKzcxLDUgQEAKIAogCiAKLXRlc3RfZG9uZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK3Rlc3RfZG9uZQorCmRpZmYgLS1naXQgYS90L3Q1MDAwLXRhci10cmVlLnNoIGIvdC90NTAwMC10YXItdHJlZS5zaAppbmRleCBmYTYyYjZhLi44NzkwMmY4IDEwMDc1NQotLS0gYS90L3Q1MDAwLXRhci10cmVlLnNoCisrKyBiL3QvdDUwMDAtdGFyLXRyZWUuc2gKQEAgLTI1LDcgKzI1LDYgQEAKICcKIAogLiAuL3Rlc3QtbGliLnNoCi1UQVI9JHtUQVI6LXRhcn0KIFVOWklQPSR7VU5aSVA6LXVuemlwfQogCiBTVUJTVEZPUk1BVD0lSCVuCkBAIC02NywxMCArNjYsMTAgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ3ZhbGlkYXRlIGZpbGUgbW9kaWZpY2F0aW9uIHRpbWUnIFwKLSAgICAnVFo9R01UICRUQVIgdHZmIGIudGFyIGEvYSB8Ci0gICAgIGF3ayBce3ByaW50XCBcJDQsXCBcKGxlbmd0aFwoXCQ1XClcPDdcKVwgP1wgXCQ1XCI6MDBcIlwgOlwgXCQ1XH0gXAotICAgICA+Yi5tdGltZSAmJgotICAgICBlY2hvICIyMDA1LTA1LTI3IDIyOjAwOjAwIiA+ZXhwZWN0ZWQubXRpbWUgJiYKKyAgICAnbWtkaXIgZXh0cmFjdCAmJgorICAgICAiJFRBUiIgeGYgYi50YXIgLUMgZXh0cmFjdCBhL2EgJiYKKyAgICAgcGVybCAtZSAnXCcncHJpbnQoKHN0YXQoImV4dHJhY3QvYS9hIikpWzldLCAiXG4iKSdcJycgPmIubXRpbWUgJiYKKyAgICAgZWNobyAiMTExNzIzMTIwMCIgPmV4cGVjdGVkLm10aW1lICYmCiAgICAgIGRpZmYgZXhwZWN0ZWQubXRpbWUgYi5tdGltZScKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCkBAIC04MCw3ICs3OSw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdleHRyYWN0IHRhciBhcmNoaXZlJyBcCi0gICAgJyhjZCBiICYmICRUQVIgeGYgLSkgPGIudGFyJworICAgICcoY2QgYiAmJiAiJFRBUiIgeGYgLSkgPGIudGFyJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAndmFsaWRhdGUgZmlsZW5hbWVzJyBcCkBAIC05Nyw3ICs5Niw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdleHRyYWN0IHRhciBhcmNoaXZlIHdpdGggcHJlZml4JyBcCi0gICAgJyhjZCBjICYmICRUQVIgeGYgLSkgPGMudGFyJworICAgICcoY2QgYyAmJiAiJFRBUiIgeGYgLSkgPGMudGFyJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAndmFsaWRhdGUgZmlsZW5hbWVzIHdpdGggcHJlZml4JyBcCkBAIC0xMTcsNyArMTE2LDcgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2V4dHJhY3Qgc3Vic3RmaWxlcycgXAotICAgICcobWtkaXIgZiAmJiBjZCBmICYmICRUQVIgeGYgLSkgPGYudGFyJworICAgICcobWtkaXIgZiAmJiBjZCBmICYmICIkVEFSIiB4ZiAtKSA8Zi50YXInCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICAndmFsaWRhdGUgc3Vic3RmaWxlIGNvbnRlbnRzJyBcCkBAIC0xMjksNyArMTI4LDcgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2V4dHJhY3Qgc3Vic3RmaWxlcyBmcm9tIGFyY2hpdmUgd2l0aCBwcmVmaXgnIFwKLSAgICAnKG1rZGlyIGcgJiYgY2QgZyAmJiAkVEFSIHhmIC0pIDxnLnRhcicKKyAgICAnKG1rZGlyIGcgJiYgY2QgZyAmJiAiJFRBUiIgeGYgLSkgPGcudGFyJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAgJ3ZhbGlkYXRlIHN1YnN0ZmlsZSBjb250ZW50cyBmcm9tIGFyY2hpdmUgd2l0aCBwcmVmaXgnIFwKZGlmZiAtLWdpdCBhL3QvdDUxMDAtbWFpbGluZm8uc2ggYi90L3Q1MTAwLW1haWxpbmZvLnNoCmluZGV4IGQ2YzU1YzEuLmU5ZjNlNzIgMTAwNzU1Ci0tLSBhL3QvdDUxMDAtbWFpbGluZm8uc2gKKysrIGIvdC90NTEwMC1tYWlsaW5mby5zaApAQCAtMTEsNyArMTEsNyBAQAogCSdnaXQgbWFpbHNwbGl0IC1vLiAuLi90NTEwMC9zYW1wbGUubWJveCA+bGFzdCAmJgogCWxhc3Q9YGNhdCBsYXN0YCAmJgogCWVjaG8gdG90YWwgaXMgJGxhc3QgJiYKLQl0ZXN0IGBjYXQgbGFzdGAgPSA5JworCXRlc3QgYGNhdCBsYXN0YCA9IDEwJwogCiBmb3IgbWFpbCBpbiBgZWNobyAwMCpgCiBkbwpAQCAtMjUsNCArMjUsMjIgQEAKIAkJZGlmZiAuLi90NTEwMC9pbmZvJG1haWwgaW5mbyRtYWlsIgogZG9uZQogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNwZWN0IE5VTHMnICcKKworCWdpdCBtYWlsc3BsaXQgLWQzIC1vLiAuLi90NTEwMC9udWwtcGxhaW4gJiYKKwljbXAgLi4vdDUxMDAvbnVsLXBsYWluIDAwMSAmJgorCShjYXQgMDAxIHwgZ2l0IG1haWxpbmZvIG1zZyBwYXRjaCkgJiYKKwl0ZXN0IDQgPSAkKHdjIC1sIDwgcGF0Y2gpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUHJlc2VydmUgTlVMcyBvdXQgb2YgTUlNRSBlbmNvZGVkIG1lc3NhZ2UnICcKKworCWdpdCBtYWlsc3BsaXQgLWQ1IC1vLiAuLi90NTEwMC9udWwtYjY0LmluICYmCisJY21wIC4uL3Q1MTAwL251bC1iNjQuaW4gMDAwMDEgJiYKKwlnaXQgbWFpbGluZm8gbXNnIHBhdGNoIDwwMDAwMSAmJgorCWNtcCAuLi90NTEwMC9udWwtYjY0LmV4cGVjdCBwYXRjaAorCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTEwMC8wMDEwIGIvdC90NTEwMC8wMDEwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ODkyYzkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwLzAwMTAKQEAgLTAsMCArMSwzNSBAQAorRnJvbSBiOTcwNGE1MThlMjExNTg0MzNiYWEyY2MyZDU5MWZlYTY4Nzk2N2Y2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0x1a2FzPTIwU2FuZHN0cj1DMz1CNm0/PSA8bHVrYXNzQGV0ZWsuY2hhbG1lcnMuc2U+CitEYXRlOiBUaHUsIDEwIEp1bCAyMDA4IDIzOjQxOjMzICswMjAwCitTdWJqZWN0OiBSZTogZGlzY3Vzc2lvbiB0aGF0IGxlYWQgdG8gdGhpcyBwYXRjaAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitbUEFUQ0hdIGdpdC1tYWlsaW5mbzogRml4IGdldHRpbmcgdGhlIHN1YmplY3QgZnJvbSB0aGUgYm9keQorCisiU3ViamVjdDogIiBpc24ndCBpbiB0aGUgc3RhdGljIGFycmF5ICJoZWFkZXIiLCBhbmQgdGh1cworbWVtY21wKCJTdWJqZWN0OiAiLCBoZWFkZXJbaV0sIDcpIHdpbGwgbmV2ZXIgbWF0Y2guCisKK1NpZ25lZC1vZmYtYnk6IEx1a2FzIFNhbmRzdHLDtm0gPGx1a2Fzc0BldGVrLmNoYWxtZXJzLnNlPgorU2lnbmVkLW9mZi1ieTogSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgorLS0tCisgYnVpbHRpbi1tYWlsaW5mby5jIHwgICAgMiArLQorIDEgZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYnVpbHRpbi1tYWlsaW5mby5jIGIvYnVpbHRpbi1tYWlsaW5mby5jCitpbmRleCA5NjJhYTM0Li4yZDE1MjBmIDEwMDY0NAorLS0tIGEvYnVpbHRpbi1tYWlsaW5mby5jCisrKysgYi9idWlsdGluLW1haWxpbmZvLmMKK0BAIC0zMzQsNyArMzM0LDcgQEAgc3RhdGljIGludCBjaGVja19oZWFkZXIoY2hhciAqbGluZSwgdW5zaWduZWQgbGluZXNpemUsIGNoYXIgKipoZHJfZGF0YSwgaW50IG92ZXIKKyAJCXJldHVybiAxOworIAlpZiAoIW1lbWNtcCgiW1BBVENIXSIsIGxpbmUsIDcpICYmIGlzc3BhY2UobGluZVs3XSkpIHsKKyAJCWZvciAoaSA9IDA7IGhlYWRlcltpXTsgaSsrKSB7CistCQkJaWYgKCFtZW1jbXAoIlN1YmplY3Q6ICIsIGhlYWRlcltpXSwgOSkpIHsKKysJCQlpZiAoIW1lbWNtcCgiU3ViamVjdCIsIGhlYWRlcltpXSwgNykpIHsKKyAJCQkJaWYgKCEgaGFuZGxlX2hlYWRlcihsaW5lLCBoZHJfZGF0YVtpXSwgMCkpIHsKKyAJCQkJCXJldHVybiAxOworIAkJCQl9CistLSAKKzEuNS42LjIuNDU1LmcxZWZiMgorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8wMDEwIGIvdC90NTEwMC9pbmZvMDAxMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzkxMjQxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9pbmZvMDAxMApAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogTHVrYXMgU2FuZHN0csO2bQorRW1haWw6IGx1a2Fzc0BldGVrLmNoYWxtZXJzLnNlCitTdWJqZWN0OiBnaXQtbWFpbGluZm86IEZpeCBnZXR0aW5nIHRoZSBzdWJqZWN0IGZyb20gdGhlIGJvZHkKK0RhdGU6IFRodSwgMTAgSnVsIDIwMDggMjM6NDE6MzMgKzAyMDAKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9tc2cwMDEwIGIvdC90NTEwMC9tc2cwMDEwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NmMyMzAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL21zZzAwMTAKQEAgLTAsMCArMSw1IEBACisiU3ViamVjdDogIiBpc24ndCBpbiB0aGUgc3RhdGljIGFycmF5ICJoZWFkZXIiLCBhbmQgdGh1cworbWVtY21wKCJTdWJqZWN0OiAiLCBoZWFkZXJbaV0sIDcpIHdpbGwgbmV2ZXIgbWF0Y2guCisKK1NpZ25lZC1vZmYtYnk6IEx1a2FzIFNhbmRzdHLDtm0gPGx1a2Fzc0BldGVrLmNoYWxtZXJzLnNlPgorU2lnbmVkLW9mZi1ieTogSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgpkaWZmIC0tZ2l0IGEvdC90NTEwMC9udWwtYjY0LmV4cGVjdCBiL3QvdDUxMDAvbnVsLWI2NC5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdkNjgwZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvbnVsLWI2NC5leHBlY3QKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC90NTEwMC9udWwtYjY0LmluIGIvdC90NTEwMC9udWwtYjY0LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NTQwZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL251bC1iNjQuaW4KQEAgLTAsMCArMSwzNyBAQAorRnJvbSA2NjdkODk0MGU3MTljZGRlZTFjZmUyMzdjYmJlMjE1ZTIwMjcwYjA5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgorRGF0ZTogU3VuLCAyNSBNYXkgMjAwOCAwMDozODoxOCAtMDcwMAorU3ViamVjdDogW1BBVENIXSBzZWNvbmQKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NAorCitMUzB0Q2lCbWFXeGxJSHdnSUVKcGJpQXhNelUzSUMwK0lERXpOVGNnWW5sMFpYTUtJREVnWm1sc1pYTWdZMmhoYm1kbFpDd2cKK01DQnBibk5sY25ScGIyNXpLQ3NwTENBd0lHUmxiR1YwYVc5dWN5Z3RLUW9LWkdsbVppQXRMV2RwZENCaEwyWnBiR1VnWWk5bQorYVd4bENtbHVaR1Y0SURjM016WXhaRGd1TGpsbE1ESmlaVFlnTVRBd05qUTBDaTB0TFNCaEwyWnBiR1VLS3lzcklHSXZabWxzCitaUXBBUUNBdE1Td3hNaUFyTVN3eE1pQkFRQW9nVEc5eVpXMGdhWEJ6ZFcwZ1pHOXNiM0lnYzJsMElHRnRaWFFzSUdOdmJuTmwKK1kzUmxkSFZsY2lCaFpHbHdhWE5qYVc1bklHVnNhWFF1SUZOMWMzQmxibVJwYzNObENpQnphWFFnWVcxbGRDQjBkWEp3YVhNZworWldkbGRDQmxjM1FnWTNWeWMzVnpJR3hoYjNKbFpYUXVJRUZzYVhGMVlXMGdiV0YxY21sekxpQlFjbUZsYzJWdWRBb3RkbTlzCitkWFJ3WVhRdUlGQnliMmx1SUdsdUlIQjFjblZ6TGlCT2RXeHNZU0IxY201aElITmhjR2xsYml3Z1pHRndhV0oxY3lCemFYUWcKK1lXMWxkQ3dLSzNadmJIVjBjR0YwTGlCUWNtOXBiaUJwYmlCd2RYSjFjeTRnVG5Wc2JHRWdkWEp1WVNCellYQnBaVzRzSUdSaAorY0drQWRYTWdjMmwwSUdGdFpYUXNDaUJvWlc1a2NtVnlhWFFnYm1WakxDQjBaVzF3ZFhNZ1pYVXNJRzFwTGlCVmRDQndiM0owCitZU3dnYkdWdklHbGtJSFJwYm1OcFpIVnVkQ0IxYkd4aGJXTnZjbkJsY2l3S0xYWmxiR2wwSUdabGJHbHpJSFJ5YVhOMGFYRjEKK1pTQmhiblJsTENCaGRDQnNiMkp2Y25ScGN5QmthV0Z0SUhCbFpHVWdkWFFnWkhWcExpQlFjbTlwYmlCaFl3b3JkbVZzYVhRZworWm1Wc2FYTWdkSEpwYzNScGNYVmxJR0Z1ZEdVc0lHRjBJR3h2QUc5eWRHbHpJR1JwWVcwZ2NHVmtaU0IxZENCa2RXa3VJRkJ5CitiMmx1SUdGakNpQnNaV04wZFhNdUlFUnZibVZqSUdGMElHMWhjM05oSUdGaklHbHdjM1Z0SUdobGJtUnlaWEpwZENCemIyeHMKK2FXTnBkSFZrYVc0dUlFNWhiU0JrYVdOMGRXMEtJRzVwYzJrZ2MyVmtJRzFwTGlCRWRXbHpJSE5sWkNCaGJuUmxMaUJWZENCMgorYVhSaFpTQmxjM1FnZFhRZ1pIVnBJSFZzZEhKcFkybGxjeUJrYVdkdWFYTnphVzB1Q2lBS0xVbHVJSFpsYkNCdlpHbHZJR1ZuCitaWFFnYm1semJDQmpiMjUyWVd4c2FYTWdkbTlzZFhSd1lYUXVJRTF2Y21KcElIWnBkR0ZsSUc1cFltZ3VJRTUxYkd4aGJRb3IKK1NXNGdkbVZzSUc5a2FXOGdaV2RsZENCdWFYTnNJR052Ym5aaGJHeHBjeUIyYjJ4MWRIQmhkQzRnVFc5eUFHa2dkbWwwWVdVZworYm1rQWFDNGdUblZzYkdGdENpQmhZMk4xYlhOaGJpd2daRzlzYjNJZ2NYVnBjeUJoYkdseGRXRnRJSE5qWld4bGNtbHpjWFZsCitMQ0JsYkdsMElHVnVhVzBnWTI5dVpHbHRaVzUwZFcwS0lHMWhkWEpwY3l3Z2JtOXVJSFJ5YVhOMGFYRjFaU0J0WVhWeWFYTWcKK2RIVnljR2x6SUdWMElHMWhkWEpwY3k0Z1ZYUWdibTl1SUc1cGMyd3VJRTVoYlNCa2FXRnRDaUJ0YVN3Z2MyVnRjR1Z5SUhCdgorYzNWbGNtVXNJR1ZzWldsbVpXNWtJSFYwTENCaGRXTjBiM0lnZG1Wc0xDQmxjbUYwTGlCVFpXUWdjRzl6ZFdWeVpRcEFRQ0F0CitNVFlzTnlBck1UWXNOeUJBUUNCelpXUWdaWE4wTGlCRmRHbGhiU0JrYVdGdElHWmxiR2x6TENCbVpYSnRaVzUwZFcwZ1pXZGwKK2RDd2dZV1JwY0dselkybHVaeUJoZEN3Z2NHOXpkV1Z5WlNCcGJpd0tJR1IxYVM0Z1JYUnBZVzBnYkhWamRIVnpMZ29nQ2lCTworZFd4c1lTQnBaQ0JoZFdkMVpTNGdUbUZ0SUdsaFkzVnNhWE1nWVdOamRXMXpZVzRnYm1semFTNGdVM1Z6Y0dWdVpHbHpjMlVnCitjRzkwWlc1MGFTNGdUblZ1WXdvdGRtRnlhWFZ6SUdGMVozVmxJRzVsWXlCdmNtTnBMaUJWZENCamIyNWthVzFsYm5SMWJTQmsKK2IyeHZjaUJ6WVdkcGRIUnBjeUJ1YVdKb0xpQlRkWE53Wlc1a2FYTnpaUW9yZG1GeWFYVnpJR0YxWjNWbElHNWxZeUJ2Y21OcAorTGlCVmRDQmpiMjVrYVcxbGJuUjFiU0JrYjJ4dmNpQnpZV2RwZEhScGN5QnVhUUJvTGlCVGRYTndaVzVrYVhOelpRb2dkR1Z0CitjRzl5SUd4bFkzUjFjeUJ6WldRZ2JXRm5ibUV1SUZOMWMzQmxibVJwYzNObElIQnZkR1Z1ZEdrdUlFNTFiR3hoYlNCMFpXMXcKK2IzSWdhWEJ6ZFcwdUlGTmxaQW9nYlc5c1pYTjBhV1VnZEdWc2JIVnpMaUJRYUdGelpXeHNkWE1nYkdsbmRXeGhMaUJKYmlCMgorWldocFkzVnNZU0IxYkhSeWFXTmxjd29nYm1semFTNGdVM1Z6Y0dWdVpHbHpjMlVnWm1Wc2FYTWdZWFZuZFdVc0lIQmxiR3hsCitiblJsYzNGMVpTQmhkQ3dnWkdsamRIVnRJSFpwZG1WeWNtRXNDaTB0SUFveExqVXVOUzR4TGpVME1DNW5OVGMzT0RBS0NnPT0KZGlmZiAtLWdpdCBhL3QvdDUxMDAvbnVsLXBsYWluIGIvdC90NTEwMC9udWwtcGxhaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q0MDY5MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvbnVsLXBsYWluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcGF0Y2gwMDEwIGIvdC90NTEwMC9wYXRjaDAwMTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA1NTQ4MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcGF0Y2gwMDEwCkBAIC0wLDAgKzEsMjAgQEAKKy0tLQorIGJ1aWx0aW4tbWFpbGluZm8uYyB8ICAgIDIgKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2J1aWx0aW4tbWFpbGluZm8uYyBiL2J1aWx0aW4tbWFpbGluZm8uYworaW5kZXggOTYyYWEzNC4uMmQxNTIwZiAxMDA2NDQKKy0tLSBhL2J1aWx0aW4tbWFpbGluZm8uYworKysrIGIvYnVpbHRpbi1tYWlsaW5mby5jCitAQCAtMzM0LDcgKzMzNCw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVhZGVyKGNoYXIgKmxpbmUsIHVuc2lnbmVkIGxpbmVzaXplLCBjaGFyICoqaGRyX2RhdGEsIGludCBvdmVyCisgCQlyZXR1cm4gMTsKKyAJaWYgKCFtZW1jbXAoIltQQVRDSF0iLCBsaW5lLCA3KSAmJiBpc3NwYWNlKGxpbmVbN10pKSB7CisgCQlmb3IgKGkgPSAwOyBoZWFkZXJbaV07IGkrKykgeworLQkJCWlmICghbWVtY21wKCJTdWJqZWN0OiAiLCBoZWFkZXJbaV0sIDkpKSB7CisrCQkJaWYgKCFtZW1jbXAoIlN1YmplY3QiLCBoZWFkZXJbaV0sIDcpKSB7CisgCQkJCWlmICghIGhhbmRsZV9oZWFkZXIobGluZSwgaGRyX2RhdGFbaV0sIDApKSB7CisgCQkJCQlyZXR1cm4gMTsKKyAJCQkJfQorLS0gCisxLjUuNi4yLjQ1NS5nMWVmYjIKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9zYW1wbGUubWJveCBiL3QvdDUxMDAvc2FtcGxlLm1ib3gKaW5kZXggMDQ3NmI5Ni4uYWJhNTdmOSAxMDA2NDQKLS0tIGEvdC90NTEwMC9zYW1wbGUubWJveAorKysgYi90L3Q1MTAwL3NhbXBsZS5tYm94CkBAIC00MzAsMyArNDMwLDM4IEBACiA9MjAKID0yMAogIDIuIFdoZW4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlICdHSVRfRVhURVJOQUxfRElGRicgaXMgc2V0LCB0aGUKK0Zyb20gYjk3MDRhNTE4ZTIxMTU4NDMzYmFhMmNjMmQ1OTFmZWE2ODc5NjdmNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9MdWthcz0yMFNhbmRzdHI9QzM9QjZtPz0gPGx1a2Fzc0BldGVrLmNoYWxtZXJzLnNlPgorRGF0ZTogVGh1LCAxMCBKdWwgMjAwOCAyMzo0MTozMyArMDIwMAorU3ViamVjdDogUmU6IGRpc2N1c3Npb24gdGhhdCBsZWFkIHRvIHRoaXMgcGF0Y2gKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworW1BBVENIXSBnaXQtbWFpbGluZm86IEZpeCBnZXR0aW5nIHRoZSBzdWJqZWN0IGZyb20gdGhlIGJvZHkKKworIlN1YmplY3Q6ICIgaXNuJ3QgaW4gdGhlIHN0YXRpYyBhcnJheSAiaGVhZGVyIiwgYW5kIHRodXMKK21lbWNtcCgiU3ViamVjdDogIiwgaGVhZGVyW2ldLCA3KSB3aWxsIG5ldmVyIG1hdGNoLgorCitTaWduZWQtb2ZmLWJ5OiBMdWthcyBTYW5kc3Ryw7ZtIDxsdWthc3NAZXRlay5jaGFsbWVycy5zZT4KK1NpZ25lZC1vZmYtYnk6IEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KKy0tLQorIGJ1aWx0aW4tbWFpbGluZm8uYyB8ICAgIDIgKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2J1aWx0aW4tbWFpbGluZm8uYyBiL2J1aWx0aW4tbWFpbGluZm8uYworaW5kZXggOTYyYWEzNC4uMmQxNTIwZiAxMDA2NDQKKy0tLSBhL2J1aWx0aW4tbWFpbGluZm8uYworKysrIGIvYnVpbHRpbi1tYWlsaW5mby5jCitAQCAtMzM0LDcgKzMzNCw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVhZGVyKGNoYXIgKmxpbmUsIHVuc2lnbmVkIGxpbmVzaXplLCBjaGFyICoqaGRyX2RhdGEsIGludCBvdmVyCisgCQlyZXR1cm4gMTsKKyAJaWYgKCFtZW1jbXAoIltQQVRDSF0iLCBsaW5lLCA3KSAmJiBpc3NwYWNlKGxpbmVbN10pKSB7CisgCQlmb3IgKGkgPSAwOyBoZWFkZXJbaV07IGkrKykgeworLQkJCWlmICghbWVtY21wKCJTdWJqZWN0OiAiLCBoZWFkZXJbaV0sIDkpKSB7CisrCQkJaWYgKCFtZW1jbXAoIlN1YmplY3QiLCBoZWFkZXJbaV0sIDcpKSB7CisgCQkJCWlmICghIGhhbmRsZV9oZWFkZXIobGluZSwgaGRyX2RhdGFbaV0sIDApKSB7CisgCQkJCQlyZXR1cm4gMTsKKyAJCQkJfQorLS0gCisxLjUuNi4yLjQ1NS5nMWVmYjIKKwpkaWZmIC0tZ2l0IGEvdC90NTMwMC1wYWNrLW9iamVjdC5zaCBiL3QvdDUzMDAtcGFjay1vYmplY3Quc2gKaW5kZXggYzk1NWZlNC4uOTgzYTM5MyAxMDA3NTUKLS0tIGEvdC90NTMwMC1wYWNrLW9iamVjdC5zaAorKysgYi90L3Q1MzAwLXBhY2stb2JqZWN0LnNoCkBAIC0yNzQsNCArMjc0LDk5IEBACiAgICAgIHBhY2tuYW1lXzQ9JChnaXQgcGFjay1vYmplY3RzIHRlc3QtNCA8b2JqLWxpc3QpICYmCiAgICAgIHRlc3QgMyA9ICQobHMgdGVzdC00LSoucGFjayB8IHdjIC1sKScKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5wYWNraW5nIHdpdGggLS1zdHJpY3QnICcKKworCWdpdCBjb25maWcgLS11bnNldCBwYWNrLnBhY2tzaXplbGltaXQgJiYKKwlmb3IgaiBpbiBhIGIgYyBkIGUgZiBnCisJZG8KKwkJZm9yIGkgaW4gMCAxIDIgMyA0IDUgNiA3IDggOQorCQlkbworCQkJbz0kKGVjaG8gJGokaSB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCQkJZWNobyAiMTAwNjQ0ICRvCTAgJGokaSIKKwkJZG9uZQorCWRvbmUgPkxJU1QgJiYKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gPExJU1QgJiYKKwlMSVNUPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCWhlYWQgLW4gMTAgTElTVCB8IGdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvICYmCisJTEk9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJdGFpbCAtbiAxMCBMSVNUIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwlTVD0kKGdpdCB3cml0ZS10cmVlKSAmJgorCVBBQ0s1PSQoIGdpdCByZXYtbGlzdCAtLW9iamVjdHMgIiRMSVNUIiAiJExJIiAiJFNUIiB8IFwKKwkJZ2l0IHBhY2stb2JqZWN0cyB0ZXN0LTUgKSAmJgorCVBBQ0s2PSQoICgKKwkJCWVjaG8gIiRMSVNUIgorCQkJZWNobyAiJExJIgorCQkJZWNobyAiJFNUIgorCQkgKSB8IGdpdCBwYWNrLW9iamVjdHMgdGVzdC02ICkgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHRlc3QtNSAmJgorCSgKKwkJY2QgdGVzdC01ICYmCisJCWdpdCB1bnBhY2stb2JqZWN0cyAtLXN0cmljdCA8Li4vdGVzdC01LSRQQUNLNS5wYWNrICYmCisJCWdpdCBscy10cmVlIC1yICRMSVNUICYmCisJCWdpdCBscy10cmVlIC1yICRMSSAmJgorCQlnaXQgbHMtdHJlZSAtciAkU1QKKwkpICYmCisJdGVzdF9jcmVhdGVfcmVwbyB0ZXN0LTYgJiYKKwkoCisJCSMgdHJlZS1vbmx5IGludG8gZW1wdHkgcmVwbyAtLSBtYW55IHVucmVhY2hhYmxlcworCQljZCB0ZXN0LTYgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVucGFjay1vYmplY3RzIC0tc3RyaWN0IDwuLi90ZXN0LTYtJFBBQ0s2LnBhY2sKKwkpICYmCisJKAorCQkjIGFscmVhZHkgcG9wdWxhdGVkIC0tIG5vIHVucmVhY2hhYmxlcworCQljZCB0ZXN0LTUgJiYKKwkJZ2l0IHVucGFjay1vYmplY3RzIC0tc3RyaWN0IDwuLi90ZXN0LTYtJFBBQ0s2LnBhY2sKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZGV4LXBhY2sgd2l0aCAtLXN0cmljdCcgJworCisJZm9yIGogaW4gYSBiIGMgZCBlIGYgZworCWRvCisJCWZvciBpIGluIDAgMSAyIDMgNCA1IDYgNyA4IDkKKwkJZG8KKwkJCW89JChlY2hvICRqJGkgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwkJCWVjaG8gIjEwMDY0NCAkbwkwICRqJGkiCisJCWRvbmUKKwlkb25lID5MSVNUICYmCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvIDxMSVNUICYmCisJTElTVD0kKGdpdCB3cml0ZS10cmVlKSAmJgorCXJtIC1mIC5naXQvaW5kZXggJiYKKwloZWFkIC1uIDEwIExJU1QgfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCUxJPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCXRhaWwgLW4gMTAgTElTVCB8IGdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvICYmCisJU1Q9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwlQQUNLNT0kKCBnaXQgcmV2LWxpc3QgLS1vYmplY3RzICIkTElTVCIgIiRMSSIgIiRTVCIgfCBcCisJCWdpdCBwYWNrLW9iamVjdHMgdGVzdC01ICkgJiYKKwlQQUNLNj0kKCAoCisJCQllY2hvICIkTElTVCIKKwkJCWVjaG8gIiRMSSIKKwkJCWVjaG8gIiRTVCIKKwkJICkgfCBnaXQgcGFjay1vYmplY3RzIHRlc3QtNiApICYmCisJdGVzdF9jcmVhdGVfcmVwbyB0ZXN0LTcgJiYKKwkoCisJCWNkIHRlc3QtNyAmJgorCQlnaXQgaW5kZXgtcGFjayAtLXN0cmljdCAtLXN0ZGluIDwuLi90ZXN0LTUtJFBBQ0s1LnBhY2sgJiYKKwkJZ2l0IGxzLXRyZWUgLXIgJExJU1QgJiYKKwkJZ2l0IGxzLXRyZWUgLXIgJExJICYmCisJCWdpdCBscy10cmVlIC1yICRTVAorCSkgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHRlc3QtOCAmJgorCSgKKwkJIyB0cmVlLW9ubHkgaW50byBlbXB0eSByZXBvIC0tIG1hbnkgdW5yZWFjaGFibGVzCisJCWNkIHRlc3QtOCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgaW5kZXgtcGFjayAtLXN0cmljdCAtLXN0ZGluIDwuLi90ZXN0LTYtJFBBQ0s2LnBhY2sKKwkpICYmCisJKAorCQkjIGFscmVhZHkgcG9wdWxhdGVkIC0tIG5vIHVucmVhY2hhYmxlcworCQljZCB0ZXN0LTcgJiYKKwkJZ2l0IGluZGV4LXBhY2sgLS1zdHJpY3QgLS1zdGRpbiA8Li4vdGVzdC02LSRQQUNLNi5wYWNrCisJKQorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDUzMDItcGFjay1pbmRleC5zaCBiL3QvdDUzMDItcGFjay1pbmRleC5zaAppbmRleCBiODhiNWJiLi4wOWZkOTE3IDEwMDc1NQotLS0gYS90L3Q1MzAyLXBhY2staW5kZXguc2gKKysrIGIvdC90NTMwMi1wYWNrLWluZGV4LnNoCkBAIC02NSw3ICs2NSw3IEBACiAKIGhhdmVfNjRiaXRzPQogaWYgbXNnPSQoZ2l0IHZlcmlmeS1wYWNrIC12ICJ0ZXN0LTMtJHtwYWNrM30ucGFjayIgMj4mMSkgfHwKLQkhIGVjaG8gIiRtc2ciIHwgZ3JlcCAicGFjayB0b28gbGFyZ2UgLiogb2ZmX3QiCisJISAoZWNobyAiJG1zZyIgfCBncmVwICJwYWNrIHRvbyBsYXJnZSAuKiBvZmZfdCIpCiB0aGVuCiAJaGF2ZV82NGJpdHM9dAogZWxzZQpkaWZmIC0tZ2l0IGEvdC90NTMwMy1oYXNoLW9iamVjdC5zaCBiL3QvdDUzMDMtaGFzaC1vYmplY3Quc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDU0M2MwNzguLjAwMDAwMDAKLS0tIGEvdC90NTMwMy1oYXNoLW9iamVjdC5zaAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLSMhL2Jpbi9zaAotCi10ZXN0X2Rlc2NyaXB0aW9uPWdpdC1oYXNoLW9iamVjdAotCi0uIC4vdGVzdC1saWIuc2gKLQotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0gICAgJ2dpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluIHNhdmVzIHRoZSBvYmplY3QnIFwKLSAgICAnb2JuYW1lPSQoZWNobyBmb28gfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKLSAgICBvYnBhdGg9JChlY2hvICRvYm5hbWUgfCBzZWQgLWUgInMvXCguLlwpL1wxXC8vIikgJiYKLSAgICB0ZXN0IC1yIC5naXQvb2JqZWN0cy8iJG9icGF0aCIgJiYKLSAgICBybSAtZiAuZ2l0L29iamVjdHMvIiRvYnBhdGgiJwotICAgIAotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0gICAgJ2dpdCBoYXNoLW9iamVjdCAtLXN0ZGluIC13IHNhdmVzIHRoZSBvYmplY3QnIFwKLSAgICAnb2JuYW1lPSQoZWNobyBmb28gfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbiAtdykgJiYKLSAgICBvYnBhdGg9JChlY2hvICRvYm5hbWUgfCBzZWQgLWUgInMvXCguLlwpL1wxXC8vIikgJiYKLSAgICB0ZXN0IC1yIC5naXQvb2JqZWN0cy8iJG9icGF0aCIgJiYKLSAgICBybSAtZiAuZ2l0L29iamVjdHMvIiRvYnBhdGgiJyAgICAKLQotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0gICAgJ2dpdCBoYXNoLW9iamVjdCAtLXN0ZGluIGZpbGUxIDxmaWxlMCBmaXJzdCBvcGVyYXRlcyBvbiBmaWxlMCwgdGhlbiBmaWxlMScgXAotICAgICdlY2hvIGZvbyA+IGZpbGUxICYmCi0gICAgb2JuYW1lMD0kKGVjaG8gYmFyIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4pICYmCi0gICAgb2JuYW1lMT0kKGdpdCBoYXNoLW9iamVjdCBmaWxlMSkgJiYKLSAgICBvYm5hbWUwbmV3PSQoZWNobyBiYXIgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbiBmaWxlMSB8IHNlZCAtbiAtZSAxcCkgJiYKLSAgICBvYm5hbWUxbmV3PSQoZWNobyBiYXIgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbiBmaWxlMSB8IHNlZCAtbiAtZSAycCkgJiYKLSAgICB0ZXN0ICIkb2JuYW1lMCIgPSAiJG9ibmFtZTBuZXciICYmCi0gICAgdGVzdCAiJG9ibmFtZTEiID0gIiRvYm5hbWUxbmV3IicKLQotdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0gICAgJ2dpdCBoYXNoLW9iamVjdCByZWZ1c2VzIG11bHRpcGxlIC0tc3RkaW4gYXJndW1lbnRzJyBcCi0gICAgJyEgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gLS1zdGRpbiA8IGZpbGUxJwotCi10ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDUzMDQtcHJ1bmUuc2ggYi90L3Q1MzA0LXBydW5lLnNoCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggOWZkOWQwNy4uNzcxYzBhMAotLS0gYS90L3Q1MzA0LXBydW5lLnNoCisrKyBiL3QvdDUzMDQtcHJ1bmUuc2gKQEAgLTIxLDcgKzIxLDcgQEAKIAlvcmlnX3BhY2s9JChlY2hvIC5naXQvb2JqZWN0cy9wYWNrLyoucGFjaykgJiYKIAk6ID4gLmdpdC9vYmplY3RzL3RtcF8xLnBhY2sgJiYKIAk6ID4gLmdpdC9vYmplY3RzL3RtcF8yLnBhY2sgJiYKLQl0ZXN0LWNobXRpbWUgLTg2NTAxIC5naXQvb2JqZWN0cy90bXBfMS5wYWNrICYmCisJdGVzdC1jaG10aW1lID0tODY1MDEgLmdpdC9vYmplY3RzL3RtcF8xLnBhY2sgJiYKIAlnaXQgcHJ1bmUgLS1leHBpcmUgMS5kYXkgJiYKIAl0ZXN0IC1mICRvcmlnX3BhY2sgJiYKIAl0ZXN0IC1mIC5naXQvb2JqZWN0cy90bXBfMi5wYWNrICYmCkBAIC0zOSw3ICszOSw3IEBACiAJZ2l0IHBydW5lIC0tZXhwaXJlPTEuaG91ci5hZ28gJiYKIAl0ZXN0ICQoKDEgKyAkYmVmb3JlKSkgPSAkKGdpdCBjb3VudC1vYmplY3RzIHwgc2VkICJzLyAuKi8vIikgJiYKIAl0ZXN0IC1mICRCTE9CX0ZJTEUgJiYKLQl0ZXN0LWNobXRpbWUgLTg2NTAwICRCTE9CX0ZJTEUgJiYKKwl0ZXN0LWNobXRpbWUgPS04NjUwMCAkQkxPQl9GSUxFICYmCiAJZ2l0IHBydW5lIC0tZXhwaXJlIDEuZGF5ICYmCiAJdGVzdCAkYmVmb3JlID0gJChnaXQgY291bnQtb2JqZWN0cyB8IHNlZCAicy8gLiovLyIpICYmCiAJISB0ZXN0IC1mICRCTE9CX0ZJTEUKQEAgLTUzLDExICs1MywxMSBAQAogCUJMT0JfRklMRT0uZ2l0L29iamVjdHMvJChlY2hvICRCTE9CIHwgc2VkICJzL14uLi8mXC8vIikgJiYKIAl0ZXN0ICQoKDEgKyAkYmVmb3JlKSkgPSAkKGdpdCBjb3VudC1vYmplY3RzIHwgc2VkICJzLyAuKi8vIikgJiYKIAl0ZXN0IC1mICRCTE9CX0ZJTEUgJiYKLQl0ZXN0LWNobXRpbWUgLSQoKDg2NDAwKjE0LTMwKSkgJEJMT0JfRklMRSAmJgorCXRlc3QtY2htdGltZSA9LSQoKDg2NDAwKjE0LTMwKSkgJEJMT0JfRklMRSAmJgogCWdpdCBnYyAmJgogCXRlc3QgJCgoMSArICRiZWZvcmUpKSA9ICQoZ2l0IGNvdW50LW9iamVjdHMgfCBzZWQgInMvIC4qLy8iKSAmJgogCXRlc3QgLWYgJEJMT0JfRklMRSAmJgotCXRlc3QtY2htdGltZSAtJCgoODY0MDAqMTQrMSkpICRCTE9CX0ZJTEUgJiYKKwl0ZXN0LWNobXRpbWUgPS0kKCg4NjQwMCoxNCsxKSkgJEJMT0JfRklMRSAmJgogCWdpdCBnYyAmJgogCXRlc3QgJGJlZm9yZSA9ICQoZ2l0IGNvdW50LW9iamVjdHMgfCBzZWQgInMvIC4qLy8iKSAmJgogCSEgdGVzdCAtZiAkQkxPQl9GSUxFCmRpZmYgLS1naXQgYS90L3Q1MzA1LWluY2x1ZGUtdGFnLnNoIGIvdC90NTMwNS1pbmNsdWRlLXRhZy5zaAppbmRleCAwZGIyNzU0Li5mYjQ3MWEwIDEwMDc1NQotLS0gYS90L3Q1MzA1LWluY2x1ZGUtdGFnLnNoCisrKyBiL3QvdDUzMDUtaW5jbHVkZS10YWcuc2gKQEAgLTUwLDcgKzUwLDcgQEAKIAkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIC1lICR0YWcgJiYKIAkJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAkY29tbWl0CiAJKSA+bGlzdC5hY3R1YWwgJiYKLQlnaXQgZGlmZiBsaXN0LmV4cGVjdCBsaXN0LmFjdHVhbAorCXRlc3RfY21wIGxpc3QuZXhwZWN0IGxpc3QuYWN0dWFsCiAnCiAKIHJtIC1yZiBjbG9uZS5naXQKQEAgLTc4LDcgKzc4LDcgQEAKIAkJZXhwb3J0IEdJVF9ESVIgJiYKIAkJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAkdGFnCiAJKSA+bGlzdC5hY3R1YWwgJiYKLQlnaXQgZGlmZiBsaXN0LmV4cGVjdCBsaXN0LmFjdHVhbAorCXRlc3RfY21wIGxpc3QuZXhwZWN0IGxpc3QuYWN0dWFsCiAnCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTQwMC1zZW5kLXBhY2suc2ggYi90L3Q1NDAwLXNlbmQtcGFjay5zaAppbmRleCAyYjZiNmUzLi42OGMyYWU2IDEwMDc1NQotLS0gYS90L3Q1NDAwLXNlbmQtcGFjay5zaAorKysgYi90L3Q1NDAwLXNlbmQtcGFjay5zaApAQCAtMTEwLDcgKzExMCw3IEBACiAJY2QgLi4gJiYKIAlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL21hc3RlciBtYXN0ZXJeIHx8IHJldHVybiAxCiAJZ2l0LXNlbmQtcGFjayAtLWZvcmNlIC4vdmljdGltLy5naXQvIG1hc3RlciAmJiByZXR1cm4gMQotCSEgZ2l0IGRpZmYgLmdpdC9yZWZzL2hlYWRzL21hc3RlciB2aWN0aW0vLmdpdC9yZWZzL2hlYWRzL21hc3RlcgorCSEgdGVzdF9jbXAgLmdpdC9yZWZzL2hlYWRzL21hc3RlciB2aWN0aW0vLmdpdC9yZWZzL2hlYWRzL21hc3RlcgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKZGlmZiAtLWdpdCBhL3QvdDU0MDEtdXBkYXRlLWhvb2tzLnNoIGIvdC90NTQwMS11cGRhdGUtaG9va3Muc2gKaW5kZXggOWExMjAyNC4uMmZmZjMwMCAxMDA3NTUKLS0tIGEvdC90NTQwMS11cGRhdGUtaG9va3Muc2gKKysrIGIvdC90NTQwMS11cGRhdGUtaG9va3Muc2gKQEAgLTgzLDIzICs4MywyMyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlLXJlY2VpdmUgaG9vayBpbnB1dCcgJwogCShlY2hvICRjb21taXQwICRjb21taXQxIHJlZnMvaGVhZHMvbWFzdGVyOwogCSBlY2hvICRjb21taXQxICRjb21taXQwIHJlZnMvaGVhZHMvdG9mYWlsCi0JKSB8IGdpdCBkaWZmIC0gdmljdGltLy5naXQvcHJlLXJlY2VpdmUuc3RkaW4KKwkpIHwgdGVzdF9jbXAgLSB2aWN0aW0vLmdpdC9wcmUtcmVjZWl2ZS5zdGRpbgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgaG9vayBhcmd1bWVudHMnICcKIAkoZWNobyByZWZzL2hlYWRzL21hc3RlciAkY29tbWl0MCAkY29tbWl0MTsKIAkgZWNobyByZWZzL2hlYWRzL3RvZmFpbCAkY29tbWl0MSAkY29tbWl0MAotCSkgfCBnaXQgZGlmZiAtIHZpY3RpbS8uZ2l0L3VwZGF0ZS5hcmdzCisJKSB8IHRlc3RfY21wIC0gdmljdGltLy5naXQvdXBkYXRlLmFyZ3MKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncG9zdC1yZWNlaXZlIGhvb2sgaW5wdXQnICcKIAllY2hvICRjb21taXQwICRjb21taXQxIHJlZnMvaGVhZHMvbWFzdGVyIHwKLQlnaXQgZGlmZiAtIHZpY3RpbS8uZ2l0L3Bvc3QtcmVjZWl2ZS5zdGRpbgorCXRlc3RfY21wIC0gdmljdGltLy5naXQvcG9zdC1yZWNlaXZlLnN0ZGluCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bvc3QtdXBkYXRlIGhvb2sgYXJndW1lbnRzJyAnCiAJZWNobyByZWZzL2hlYWRzL21hc3RlciB8Ci0JZ2l0IGRpZmYgLSB2aWN0aW0vLmdpdC9wb3N0LXVwZGF0ZS5hcmdzCisJdGVzdF9jbXAgLSB2aWN0aW0vLmdpdC9wb3N0LXVwZGF0ZS5hcmdzCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsbCBob29rIHN0ZGluIGlzIC9kZXYvbnVsbCcgJwpAQCAtMTMwLDcgKzEzMCw3IEBACiBFT0YKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlbmQtcGFjayBzdGRlcnIgY29udGFpbnMgaG9vayBtZXNzYWdlcycgJwogCWdyZXAgXlNURCBzZW5kLmVyciA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgLSBhY3R1YWwgPGV4cGVjdAorCXRlc3RfY21wIC0gYWN0dWFsIDxleHBlY3QKICcKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NDA0LXRyYWNraW5nLWJyYW5jaGVzLnNoIGIvdC90NTQwNC10cmFja2luZy1icmFuY2hlcy5zaAppbmRleCAxNDkzYTkyLi42NGZlMjYxIDEwMDc1NQotLS0gYS90L3Q1NDA0LXRyYWNraW5nLWJyYW5jaGVzLnNoCisrKyBiL3QvdDU0MDQtdHJhY2tpbmctYnJhbmNoZXMuc2gKQEAgLTEwLDYgKzEwLDcgQEAKIAlnaXQgY29tbWl0IC1tIDEgJiYKIAlnaXQgYnJhbmNoIGIxICYmCiAJZ2l0IGJyYW5jaCBiMiAmJgorCWdpdCBicmFuY2ggYjMgJiYKIAlnaXQgY2xvbmUgLiBhYSAmJgogCWdpdCBjaGVja291dCBiMSAmJgogCWVjaG8gYjEgPj5maWxlICYmCkBAIC01MCw0ICs1MSwxMCBAQAogCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBvcmlnaW4vYjEpIiA9ICJvcmlnaW4vYjEiCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FscmVhZHkgZGVsZXRlZCB0cmFja2luZyBicmFuY2hlcyBpZ25vcmVkJyAnCisJZ2l0IGJyYW5jaCAtZCAtciBvcmlnaW4vYjMgJiYKKwlnaXQgcHVzaCBvcmlnaW4gOmIzID5vdXRwdXQgMj4mMSAmJgorCSEgZ3JlcCBlcnJvciBvdXRwdXQKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTAwLWZldGNoLXBhY2suc2ggYi90L3Q1NTAwLWZldGNoLXBhY2suc2gKaW5kZXggNzg4YjRhNS4uMTQwZTg3NCAxMDA3NTUKLS0tIGEvdC90NTUwMC1mZXRjaC1wYWNrLnNoCisrKyBiL3QvdDU1MDAtZmV0Y2gtcGFjay5zaApAQCAtMzEsNyArMzEsNyBAQAogCXNlYz0kKCgkc2VjKzEpKQogCWNvbW1pdD0kKGVjaG8gIiR0ZXh0IiB8IEdJVF9BVVRIT1JfREFURT0kc2VjIFwKIAkJZ2l0IGNvbW1pdC10cmVlICR0cmVlICRwYXJlbnRzIDI+PmxvZzIudHh0KQotCWV4cG9ydCAkbmFtZT0kY29tbWl0CisJZXZhbCAiJG5hbWU9JGNvbW1pdDsgZXhwb3J0ICRuYW1lIgogCWVjaG8gJGNvbW1pdCA+IC5naXQvcmVmcy9oZWFkcy8kYnJhbmNoCiAJZXZhbCAke2JyYW5jaH1USVA9JGNvbW1pdAogfQpAQCAtMTI5LDcgKzEyOSw3IEBACiAKIHB1bGxfdG9fY2xpZW50IDNyZCAiQSIgJCgoMSozKSkgIyBvbGQgZmFpbHMKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAiY2xvbmUgc2hhbGxvdyIgImdpdC1jbG9uZSAtLWRlcHRoIDIgZmlsZTovL2Bwd2RgLy4gc2hhbGxvdyIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImNsb25lIHNoYWxsb3ciICdnaXQtY2xvbmUgLS1kZXB0aCAyICJmaWxlOi8vJChwd2QpLy4iIHNoYWxsb3cnCiAKIChjZCBzaGFsbG93OyBnaXQgY291bnQtb2JqZWN0cyAtdikgPiBjb3VudC5zaGFsbG93CiAKZGlmZiAtLWdpdCBhL3QvdDU1MDMtdGFnZm9sbG93LnNoIGIvdC90NTUwMy10YWdmb2xsb3cuc2gKaW5kZXggODZlNWI5Yi4uNDA3NGUyMyAxMDA3NTUKLS0tIGEvdC90NTUwMy10YWdmb2xsb3cuc2gKKysrIGIvdC90NTUwMy10YWdmb2xsb3cuc2gKQEAgLTUwLDcgKzUwLDcgQEAKIAkpICYmCiAJdGVzdCAtcyAkVSAmJgogCWN1dCAtZCIgIiAtZjEsMiAkVSA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAiY3JlYXRlIHRhZyBUIG9uIEEsIGNyZWF0ZSBDIG9uIGJyYW5jaCBjYXQiICcKQEAgLTgyLDcgKzgyLDcgQEAKIAkpICYmCiAJdGVzdCAtcyAkVSAmJgogCWN1dCAtZCIgIiAtZjEsMiAkVSA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAiY3JlYXRlIGNvbW1pdHMgTywgQiwgdGFnIFMgb24gQiIgJwpAQCAtMTE4LDcgKzExOCw3IEBACiAJKSAmJgogCXRlc3QgLXMgJFUgJiYKIAljdXQgLWQiICIgLWYxLDIgJFUgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIGNhdCAtIDw8RU9GID5leHBlY3QKQEAgLTE0NCw3ICsxNDQsNyBAQAogCSkgJiYKIAl0ZXN0IC1zICRVICYmCiAJY3V0IC1kIiAiIC1mMSwyICRVID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MDUtcmVtb3RlLnNoIGIvdC90NTUwNS1yZW1vdGUuc2gKaW5kZXggNDhmZjJkNC4uMWUxOTJhMiAxMDA3NTUKLS0tIGEvdC90NTUwNS1yZW1vdGUuc2gKKysrIGIvdC90NTUwNS1yZW1vdGUuc2gKQEAgLTEzNSw3ICsxMzUsMjYgQEAKIAkgZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUub3JpZ2luLnB1c2ggXAogCQkrcmVmcy90YWdzL2xhc3RiYWNrdXAgJiYKIAkgZ2l0IHJlbW90ZSBzaG93IG9yaWdpbiA+IG91dHB1dCAmJgotCSBnaXQgZGlmZiBleHBlY3Qgb3V0cHV0KQorCSB0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0KQorJworCitjYXQgPiB0ZXN0L2V4cGVjdCA8PCBFT0YKKyogcmVtb3RlIG9yaWdpbgorICBVUkw6ICQocHdkKS9vbmUvLmdpdAorICBSZW1vdGUgYnJhbmNoIG1lcmdlZCB3aXRoICdnaXQgcHVsbCcgd2hpbGUgb24gYnJhbmNoIG1hc3RlcgorICAgIG1hc3RlcgorICBUcmFja2VkIHJlbW90ZSBicmFuY2hlcworICAgIG1hc3RlciBzaWRlCisgIExvY2FsIGJyYW5jaGVzIHB1c2hlZCB3aXRoICdnaXQgcHVzaCcKKyAgICBtYXN0ZXI6dXBzdHJlYW0gK3JlZnMvdGFncy9sYXN0YmFja3VwCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdyAtbicgJworCShtdiBvbmUgb25lLnVucmVhY2hhYmxlICYmCisJIGNkIHRlc3QgJiYKKwkgZ2l0IHJlbW90ZSBzaG93IC1uIG9yaWdpbiA+IG91dHB1dCAmJgorCSBtdiAuLi9vbmUudW5yZWFjaGFibGUgLi4vb25lICYmCisJIHRlc3RfY21wIGV4cGVjdCBvdXRwdXQpCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BydW5lJyAnCkBAIC0xNDgsNiArMTY3LDI0IEBACiAJICEgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL3NpZGUpCiAnCiAKK2NhdCA+IHRlc3QvZXhwZWN0IDw8IEVPRgorUHJ1bmluZyBvcmlnaW4KK1VSTDogJChwd2QpL29uZS8uZ2l0CisgKiBbd291bGQgcHJ1bmVdIG9yaWdpbi9zaWRlMgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BydW5lIC0tZHJ5LXJ1bicgJworCShjZCBvbmUgJiYKKwkgZ2l0IGJyYW5jaCAtbSBzaWRlMiBzaWRlKSAmJgorCShjZCB0ZXN0ICYmCisJIGdpdCByZW1vdGUgcHJ1bmUgLS1kcnktcnVuIG9yaWdpbiA+IG91dHB1dCAmJgorCSBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9vcmlnaW4vc2lkZTIgJiYKKwkgISBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9vcmlnaW4vc2lkZSAmJgorCShjZCAuLi9vbmUgJiYKKwkgZ2l0IGJyYW5jaCAtbSBzaWRlIHNpZGUyKSAmJgorCSB0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0KQorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgLS1taXJyb3IgJiYgcHJ1bmUnICcKIAkobWtkaXIgbWlycm9yICYmCiAJIGNkIG1pcnJvciAmJgpAQCAtMTY0LDYgKzIwMSwyNCBAQAogCSBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvc2lkZSkKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGFsdCAmJiBwcnVuZScgJworCShta2RpciBhbHR0c3QgJiYKKwkgY2QgYWx0dHN0ICYmCisJIGdpdCBpbml0ICYmCisJIGdpdCByZW1vdGUgYWRkIC1mIG9yaWdpbiAuLi9vbmUgJiYKKwkgZ2l0IGNvbmZpZyByZW1vdGUuYWx0LnVybCAuLi9vbmUgJiYKKwkgZ2l0IGNvbmZpZyByZW1vdGUuYWx0LmZldGNoICIrcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiIpICYmCisJKGNkIG9uZSAmJgorCSBnaXQgYnJhbmNoIC1tIHNpZGUgc2lkZTIpICYmCisJKGNkIGFsdHRzdCAmJgorCSBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vc2lkZSAmJgorCSAhIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9zaWRlMiAmJgorCSBnaXQgZmV0Y2ggYWx0ICYmCisJIGdpdCByZW1vdGUgcHJ1bmUgYWx0ICYmCisJICEgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL3NpZGUgJiYKKwkgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL3NpZGUyKQorJworCiBjYXQgPiBvbmUvZXhwZWN0IDw8IEVPRgogICBhcGlzL21hc3RlcgogICBhcGlzL3NpZGUKQEAgLTE3OSw3ICsyMzQsNyBAQAogCSBnaXQgcmVtb3RlIGFkZCBhcGlzIC4uL21pcnJvciAmJgogCSBnaXQgcmVtb3RlIHVwZGF0ZSAmJgogCSBnaXQgYnJhbmNoIC1yID4gb3V0cHV0ICYmCi0JIGdpdCBkaWZmIGV4cGVjdCBvdXRwdXQpCisJIHRlc3RfY21wIGV4cGVjdCBvdXRwdXQpCiAKICcKIApAQCAtMjA2LDcgKzI2MSw3IEBACiAJIGdpdCBjb25maWcgcmVtb3Rlcy50aXRhbnVzIG1hbmR1Y2EgJiYKIAkgZ2l0IHJlbW90ZSB1cGRhdGUgcGhvYmFldGljdXMgdGl0YW51cyAmJgogCSBnaXQgYnJhbmNoIC1yID4gb3V0cHV0ICYmCi0JIGdpdCBkaWZmIGV4cGVjdCBvdXRwdXQpCisJIHRlc3RfY21wIGV4cGVjdCBvdXRwdXQpCiAKICcKIApAQCAtMjI5LDcgKzI4NCw3IEBACiAJIGdpdCBjb25maWcgcmVtb3RlLmRyb3NvcGhpbGEuc2tpcERlZmF1bHRVcGRhdGUgdHJ1ZSAmJgogCSBnaXQgcmVtb3RlIHVwZGF0ZSBkZWZhdWx0ICYmCiAJIGdpdCBicmFuY2ggLXIgPiBvdXRwdXQgJiYKLQkgZ2l0IGRpZmYgZXhwZWN0IG91dHB1dCkKKwkgdGVzdF9jbXAgZXhwZWN0IG91dHB1dCkKIAogJwogCkBAIC0yNDksNyArMzA0LDcgQEAKIAkgZ2l0IGNvbmZpZyByZW1vdGVzLmRlZmF1bHQgIiQocHJpbnRmICJcdCBkcm9zb3BoaWxhICBcbiIpIiAmJgogCSBnaXQgcmVtb3RlIHVwZGF0ZSBkZWZhdWx0ICYmCiAJIGdpdCBicmFuY2ggLXIgPiBvdXRwdXQgJiYKLQkgZ2l0IGRpZmYgZXhwZWN0IG91dHB1dCkKKwkgdGVzdF9jbXAgZXhwZWN0IG91dHB1dCkKIAogJwogCmRpZmYgLS1naXQgYS90L3Q1NTEwLWZldGNoLnNoIGIvdC90NTUxMC1mZXRjaC5zaAppbmRleCA2OTQ2NTU3Li5kZjc3NTBmIDEwMDc1NQotLS0gYS90L3Q1NTEwLWZldGNoLnNoCisrKyBiL3QvdDU1MTAtZmV0Y2guc2gKQEAgLTM3LDcgKzM3LDggQEAKIAkJZWNobyAiUHVsbDogcmVmcy9oZWFkcy9vbmU6cmVmcy9oZWFkcy9vbmUiCiAJfSA+LmdpdC9yZW1vdGVzL3R3byAmJgogCWNkIC4uICYmCi0JZ2l0IGNsb25lIC4gYnVuZGxlCisJZ2l0IGNsb25lIC4gYnVuZGxlICYmCisJZ2l0IGNsb25lIC4gc2V2ZW4KICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAiZmV0Y2ggdGVzdCIgJwpAQCAtMjk1LDQgKzI5NiwxMSBAQAogCSkKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaGluZyBub25leGlzdGVudCBicmFuY2ggYnkgbWlzdGFrZSBzaG91bGQgbm90IHNlZ3YnICcKKworCWNkICIkRCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCBzZXZlbiBubzpubworCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUxMS1yZWZzcGVjLnNoIGIvdC90NTUxMS1yZWZzcGVjLnNoCmluZGV4IDY3MGE4ZjEuLjIyYmEzODAgMTAwNzU1Ci0tLSBhL3QvdDU1MTEtcmVmc3BlYy5zaAorKysgYi90L3Q1NTExLXJlZnNwZWMuc2gKQEAgLTIzLDEwICsyMywxMyBAQAogfQogCiB0ZXN0X3JlZnNwZWMgcHVzaCAnJwkJCQkJCWludmFsaWQKLXRlc3RfcmVmc3BlYyBwdXNoICc6JwkJCQkJCWludmFsaWQKK3Rlc3RfcmVmc3BlYyBwdXNoICc6JwordGVzdF9yZWZzcGVjIHB1c2ggJzo6JwkJCQkJCWludmFsaWQKK3Rlc3RfcmVmc3BlYyBwdXNoICcrOicKIAogdGVzdF9yZWZzcGVjIGZldGNoICcnCiB0ZXN0X3JlZnNwZWMgZmV0Y2ggJzonCit0ZXN0X3JlZnNwZWMgZmV0Y2ggJzo6JwkJCQkJCWludmFsaWQKIAogdGVzdF9yZWZzcGVjIHB1c2ggJ3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvZnJvdHovKicKIHRlc3RfcmVmc3BlYyBwdXNoICdyZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2Zyb3R6JwkJaW52YWxpZApkaWZmIC0tZ2l0IGEvdC90NTUxMi1scy1yZW1vdGUuc2ggYi90L3Q1NTEyLWxzLXJlbW90ZS5zaAppbmRleCBjMGRjOTQ5Li4xZGQ4ZWVkIDEwMDc1NQotLS0gYS90L3Q1NTEyLWxzLXJlbW90ZS5zaAorKysgYi90L3Q1NTEyLWxzLXJlbW90ZS5zaApAQCAtMTcsNyArMTcsNyBAQAogCQlnaXQgc2hvdy1yZWYgLWQJfCBzZWQgLWUgInMvIC8JLyIKIAkpID5leHBlY3RlZC5hbGwgJiYKIAotCWdpdCByZW1vdGUgYWRkIHNlbGYgJChwd2QpLy5naXQKKwlnaXQgcmVtb3RlIGFkZCBzZWxmICIkKHB3ZCkvLmdpdCIKIAogJwogCmRpZmYgLS1naXQgYS90L3Q1NTEzLWZldGNoLXRyYWNrLnNoIGIvdC90NTUxMy1mZXRjaC10cmFjay5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZTc0ODYyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxMy1mZXRjaC10cmFjay5zaApAQCAtMCwwICsxLDMwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZmV0Y2ggZm9sbG93cyByZW1vdGUgdHJhY2tpbmcgYnJhbmNoZXMgY29ycmVjdGx5JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJPmZpbGUgJiYKKwlnaXQgYWRkIC4gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIEluaXRpYWwgJiYKKwlnaXQgYnJhbmNoIGItMCAmJgorCWdpdCBicmFuY2ggYjEgJiYKKwlnaXQgYnJhbmNoIGIvb25lICYmCisJdGVzdF9jcmVhdGVfcmVwbyBvdGhlciAmJgorCSgKKwkJY2Qgb3RoZXIgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCAuLiAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4uZmV0Y2ggIityZWZzL2hlYWRzL2IvKjpyZWZzL3JlbW90ZXMvYi8qIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBmZXRjaCAnCisJKAorCQljZCBvdGhlciAmJiBnaXQgZmV0Y2ggb3JpZ2luICYmCisJCXRlc3QgIiQoZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShyZWZuYW1lKSIpIiA9IHJlZnMvcmVtb3Rlcy9iL29uZQorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTE1LWZldGNoLW1lcmdlLWxvZ2ljLnNoIGIvdC90NTUxNS1mZXRjaC1tZXJnZS1sb2dpYy5zaAppbmRleCA2NWMzNzc0Li4zZGVmNzVlIDEwMDc1NQotLS0gYS90L3Q1NTE1LWZldGNoLW1lcmdlLWxvZ2ljLnNoCisrKyBiL3QvdDU1MTUtZmV0Y2gtbWVyZ2UtbG9naWMuc2gKQEAgLTE1MSw3ICsxNTEsNyBAQAogCQlnaXQgc2hvdy1yZWYgPiIkYWN0dWFsX3IiICYmCiAJCWlmIHRlc3QgLWYgIiRleHBlY3RfZiIKIAkJdGhlbgotCQkJZ2l0IGRpZmYgLXUgIiRleHBlY3RfZiIgIiRhY3R1YWxfZiIgJiYKKwkJCXRlc3RfY21wICIkZXhwZWN0X2YiICIkYWN0dWFsX2YiICYmCiAJCQlybSAtZiAiJGFjdHVhbF9mIgogCQllbHNlCiAJCQkjIHRoaXMgaXMgdG8gaGVscCBkZXZlbG9waW5nIG5ldyB0ZXN0cy4KQEAgLTE2MCw3ICsxNjAsNyBAQAogCQlmaSAmJgogCQlpZiB0ZXN0IC1mICIkZXhwZWN0X3IiCiAJCXRoZW4KLQkJCWdpdCBkaWZmIC11ICIkZXhwZWN0X3IiICIkYWN0dWFsX3IiICYmCisJCQl0ZXN0X2NtcCAiJGV4cGVjdF9yIiAiJGFjdHVhbF9yIiAmJgogCQkJcm0gLWYgIiRhY3R1YWxfciIKIAkJZWxzZQogCQkJIyB0aGlzIGlzIHRvIGhlbHAgZGV2ZWxvcGluZyBuZXcgdGVzdHMuCmRpZmYgLS1naXQgYS90L3Q1NTE2LWZldGNoLXB1c2guc2ggYi90L3Q1NTE2LWZldGNoLXB1c2guc2gKaW5kZXggMGE3NTdkNS4uNjgwNTAzMiAxMDA3NTUKLS0tIGEvdC90NTUxNi1mZXRjaC1wdXNoLnNoCisrKyBiL3QvdDU1MTYtZmV0Y2gtcHVzaC5zaApAQCAtMTA1LDcgKzEwNSw3IEBACiAJKAogCQlUUkFTSD0kKHB3ZCkvICYmCiAJCWNkIHRlc3RyZXBvICYmCi0JCWdpdCBjb25maWcgdXJsLiRUUkFTSC5pbnN0ZWFkT2YgdHJhc2gvCisJCWdpdCBjb25maWcgInVybC4kVFJBU0guaW5zdGVhZE9mIiB0cmFzaC8gJiYKIAkJZ2l0IGNvbmZpZyByZW1vdGUudXAudXJsIHRyYXNoLy4gJiYKIAkJZ2l0IGNvbmZpZyByZW1vdGUudXAuZmV0Y2ggInJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyoiICYmCiAJCWdpdCBmZXRjaCB1cCAmJgpAQCAtMTQ1LDggKzE0NSw4IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBpbnN0ZWFkT2YnICcKIAlta19lbXB0eSAmJgotCVRSQVNIPSQocHdkKS8gJiYKLQlnaXQgY29uZmlnIHVybC4kVFJBU0guaW5zdGVhZE9mIHRyYXNoLyAmJgorCVRSQVNIPSIkKHB3ZCkvIiAmJgorCWdpdCBjb25maWcgInVybC4kVFJBU0guaW5zdGVhZE9mIiB0cmFzaC8gJiYKIAlnaXQgcHVzaCB0cmFzaC90ZXN0cmVwbyByZWZzL2hlYWRzL21hc3RlcjpyZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciAmJgogCSgKIAkJY2QgdGVzdHJlcG8gJiYKQEAgLTE2NSw2ICsxNjUsNDcgQEAKIAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggbWF0Y2hpbmcgaGVhZHMgb24gdGhlIGNvbW1hbmQgbGluZScgJworCisJbWtfdGVzdCBoZWFkcy9tYXN0ZXIgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyA6ICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgJHRoZV9jb21taXQgaGVhZHMvbWFzdGVyCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbGVkIChub24tZmFzdC1mb3J3YXJkKSBwdXNoIHdpdGggbWF0Y2hpbmcgaGVhZHMnICcKKworCW1rX3Rlc3QgaGVhZHMvbWFzdGVyICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gOiAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAtbWFzc2FnZWQgJiYKKwkhIGdpdCBwdXNoIHRlc3RyZXBvICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgJHRoZV9jb21taXQgaGVhZHMvbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCAkdGhlX2NvbW1pdAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLS1mb3JjZSB3aXRoIG1hdGNoaW5nIGhlYWRzJyAnCisKKwlta190ZXN0IGhlYWRzL21hc3RlciAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIDogJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLW1hc3NhZ2VkICYmCisJZ2l0IHB1c2ggLS1mb3JjZSB0ZXN0cmVwbyAmJgorCSEgY2hlY2tfcHVzaF9yZXN1bHQgJHRoZV9jb21taXQgaGVhZHMvbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCAkdGhlX2NvbW1pdAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBtYXRjaGluZyBoZWFkcyBhbmQgZm9yY2VkIHVwZGF0ZScgJworCisJbWtfdGVzdCBoZWFkcy9tYXN0ZXIgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyA6ICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1tYXNzYWdlZCAmJgorCWdpdCBwdXNoIHRlc3RyZXBvICs6ICYmCisJISBjaGVja19wdXNoX3Jlc3VsdCAkdGhlX2NvbW1pdCBoZWFkcy9tYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICR0aGVfY29tbWl0CisKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIG5vIGFtYmlndWl0eSAoMSknICcKIAogCW1rX3Rlc3QgaGVhZHMvbWFzdGVyICYmCmRpZmYgLS1naXQgYS90L3Q1NTE3LXB1c2gtbWlycm9yLnNoIGIvdC90NTUxNy1wdXNoLW1pcnJvci5zaAppbmRleCBlZDNmZWMxLi5lYTQ5ZGVkIDEwMDc1NQotLS0gYS90L3Q1NTE3LXB1c2gtbWlycm9yLnNoCisrKyBiL3QvdDU1MTctcHVzaC1taXJyb3Iuc2gKQEAgLTI1LDcgKzI1LDcgQEAKIAkoCiAJCWNkIG1hc3RlciAmJgogCQlnaXQgaW5pdCAmJgotCQlnaXQgY29uZmlnIHJlbW90ZS51cC51cmwgLi4vbWlycm9yCisJCWdpdCByZW1vdGUgYWRkICQxIHVwIC4uL21pcnJvcgogCSkKIH0KIApAQCAtMjI1LDQgKzIyNSw0MyBAQAogCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZS5mb28ubWlycm9yIGFkZHMgYW5kIHJlbW92ZXMgYnJhbmNoZXMnICcKKworCW1rX3JlcG9fcGFpciAtLW1pcnJvciAmJgorCSgKKwkJY2QgbWFzdGVyICYmCisJCWVjaG8gb25lID5mb28gJiYgZ2l0IGFkZCBmb28gJiYgZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwkJZ2l0IGJyYW5jaCBrZWVwIG1hc3RlciAmJgorCQlnaXQgYnJhbmNoIHJlbW92ZSBtYXN0ZXIgJiYKKwkJZ2l0IHB1c2ggdXAgJiYKKwkJZ2l0IGJyYW5jaCAtRCByZW1vdmUKKwkJZ2l0IHB1c2ggdXAKKwkpICYmCisJKAorCQljZCBtaXJyb3IgJiYKKwkJZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMva2VlcCAmJgorCQlpbnZlcnQgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvcmVtb3ZlCisJKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZS5mb28ubWlycm9yPW5vIGhhcyBubyBlZmZlY3QnICcKKworCW1rX3JlcG9fcGFpciAmJgorCSgKKwkJY2QgbWFzdGVyICYmCisJCWVjaG8gb25lID5mb28gJiYgZ2l0IGFkZCBmb28gJiYgZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUudXAubWlycm9yIG5vICYmCisJCWdpdCBicmFuY2gga2VlcCBtYXN0ZXIgJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAgJiYKKwkJZ2l0IGJyYW5jaCAtRCBrZWVwICYmCisJCWdpdCBwdXNoIHVwCisJKSAmJgorCSgKKwkJY2QgbWlycm9yICYmCisJCWdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL2tlZXAKKwkpCisKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTE4LWZldGNoLWV4aXQtc3RhdHVzLnNoIGIvdC90NTUxOC1mZXRjaC1leGl0LXN0YXR1cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNmJjNjVmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxOC1mZXRjaC1leGl0LXN0YXR1cy5zaApAQCAtMCwwICsxLDM3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IERtaXRyeSBWLiBMZXZpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdmZXRjaCBleGl0IHN0YXR1cyB0ZXN0JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwk+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgJiYKKwllY2hvIHNpZGUgPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHNpZGUgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwllY2hvIG5leHQgPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIG5leHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uIGZhc3QgZm9yd2FyZCBmZXRjaCcgJworCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoIC4gbWFzdGVyOnNpZGUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JjZWQgdXBkYXRlJyAnCisKKwlnaXQgZmV0Y2ggLiArbWFzdGVyOnNpZGUKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MjAtcHVsbC5zaCBiL3QvdDU1MjAtcHVsbC5zaAppbmRleCA5NDg0MTI5Li45OTdiMmRiIDEwMDc1NQotLS0gYS90L3Q1NTIwLXB1bGwuc2gKKysrIGIvdC90NTUyMC1wdWxsLnNoCkBAIC05Miw0ICs5MiwyMiBAQAogCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgLS1yZWJhc2UgZGllcyBlYXJseSB3aXRoIGRpcnR5IHdvcmtpbmcgZGlyZWN0b3J5JyAnCisKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvbWUvY29weSBjb3B5XiAmJgorCUNPUFk9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1lL2NvcHkpICYmCisJZ2l0IHJlYmFzZSAtLW9udG8gJENPUFkgY29weSAmJgorCWdpdCBjb25maWcgYnJhbmNoLnRvLXJlYmFzZS5yZW1vdGUgbWUgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC50by1yZWJhc2UubWVyZ2UgcmVmcy9oZWFkcy9jb3B5ICYmCisJZ2l0IGNvbmZpZyBicmFuY2gudG8tcmViYXNlLnJlYmFzZSB0cnVlICYmCisJZWNobyBkaXJ0eSA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgJiYKKwl0ZXN0ICRDT1BZID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1lL2NvcHkpICYmCisJZ2l0IGNoZWNrb3V0IEhFQUQgLS0gZmlsZSAmJgorCWdpdCBwdWxsICYmCisJdGVzdCAkQ09QWSAhPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWUvY29weSkKKworJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU2MDEtY2xvbmUuc2ggYi90L3Q1NjAxLWNsb25lLnNoCmluZGV4IGRjOWQ2M2QuLmQ3ODViM2QgMTAwNzU1Ci0tLSBhL3QvdDU2MDEtY2xvbmUuc2gKKysrIGIvdC90NTYwMS1jbG9uZS5zaApAQCAtMTcsMTAgKzE3LDU3IEBACiAKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgd2l0aCBleGNlc3MgcGFyYW1ldGVycycgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgd2l0aCBleGNlc3MgcGFyYW1ldGVycyAoMSknICcKIAorCXJtIC1mciBkc3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgLW4gc3JjIGRzdCBqdW5rCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgd2l0aCBleGNlc3MgcGFyYW1ldGVycyAoMiknICcKKworCXJtIC1mciBkc3QgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgLW4gImZpbGU6Ly8kKHB3ZCkvc3JjIiBkc3QganVuawogCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGRvZXMgbm90IGtlZXAgcGFjaycgJworCisJcm0gLWZyIGRzdCAmJgorCWdpdCBjbG9uZSAtbiAiZmlsZTovLyQocHdkKS9zcmMiIGRzdCAmJgorCSEgdGVzdCAtZiBkc3QvZmlsZSAmJgorCSEgKGVjaG8gZHN0Ly5naXQvb2JqZWN0cy9wYWNrL3BhY2stKiB8IGdyZXAgIlwua2VlcCIpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgY2hlY2tzIG91dCBmaWxlcycgJworCisJcm0gLWZyIGRzdCAmJgorCWdpdCBjbG9uZSBzcmMgZHN0ICYmCisJdGVzdCAtZiBkc3QvZmlsZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHJlc3BlY3RzIEdJVF9XT1JLX1RSRUUnICcKKworCUdJVF9XT1JLX1RSRUU9d29ya3RyZWUgZ2l0IGNsb25lIHNyYyBiYXJlICYmCisJdGVzdCAtZiBiYXJlL2NvbmZpZyAmJgorCXRlc3QgLWYgd29ya3RyZWUvZmlsZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGNyZWF0ZXMgaW50ZXJtZWRpYXRlIGRpcmVjdG9yaWVzJyAnCisKKwlnaXQgY2xvbmUgc3JjIGxvbmcvcGF0aC90by9kc3QgJiYKKwl0ZXN0IC1mIGxvbmcvcGF0aC90by9kc3QvZmlsZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGNyZWF0ZXMgaW50ZXJtZWRpYXRlIGRpcmVjdG9yaWVzIGZvciBiYXJlIHJlcG8nICcKKworCWdpdCBjbG9uZSAtLWJhcmUgc3JjIGxvbmcvcGF0aC90by9iYXJlL2RzdCAmJgorCXRlc3QgLWYgbG9uZy9wYXRoL3RvL2JhcmUvZHN0L2NvbmZpZworCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTYwMi1jbG9uZS1yZW1vdGUtZXhlYy5zaCBiL3QvdDU2MDItY2xvbmUtcmVtb3RlLWV4ZWMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODM2N2E2OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU2MDItY2xvbmUtcmVtb3RlLWV4ZWMuc2gKQEAgLTAsMCArMSwyNiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249Y2xvbmUKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWVjaG8gIiMhL2Jpbi9zaCIgPiBub3Rfc3NoCisJZWNobyAiZWNobyBcIlwkKlwiID4gbm90X3NzaF9vdXRwdXQiID4+IG5vdF9zc2gKKwllY2hvICJleGl0IDEiID4+IG5vdF9zc2gKKwljaG1vZCAreCBub3Rfc3NoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGNhbGxzIGdpdC11cGxvYWQtcGFjayB1bnF1YWxpZmllZCB3aXRoIG5vIC11IG9wdGlvbicgJworCUdJVF9TU0g9Li9ub3Rfc3NoIGdpdCBjbG9uZSBsb2NhbGhvc3Q6L3BhdGgvdG8vcmVwbyBqdW5rCisJZWNobyAibG9jYWxob3N0IGdpdC11cGxvYWQtcGFjayAnXCcnL3BhdGgvdG8vcmVwbydcJyciID5leHBlY3RlZAorCXRlc3RfY21wIGV4cGVjdGVkIG5vdF9zc2hfb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGNhbGxzIHNwZWNpZmllZCBnaXQtdXBsb2FkLXBhY2sgd2l0aCAtdSBvcHRpb24nICcKKwlHSVRfU1NIPS4vbm90X3NzaCBnaXQgY2xvbmUgLXUgL3NvbWV0aGluZy9iaW4vZ2l0LXVwbG9hZC1wYWNrIGxvY2FsaG9zdDovcGF0aC90by9yZXBvIGp1bmsKKwllY2hvICJsb2NhbGhvc3QgL3NvbWV0aGluZy9iaW4vZ2l0LXVwbG9hZC1wYWNrICdcJycvcGF0aC90by9yZXBvJ1wnJyIgPmV4cGVjdGVkCisJdGVzdF9jbXAgZXhwZWN0ZWQgbm90X3NzaF9vdXRwdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NzAwLWNsb25lLXJlZmVyZW5jZS5zaCBiL3QvdDU3MDAtY2xvbmUtcmVmZXJlbmNlLnNoCmluZGV4IGI2YTU0ODYuLjFjMTA5MTYgMTAwNzU1Ci0tLSBhL3QvdDU3MDAtY2xvbmUtcmVmZXJlbmNlLnNoCisrKyBiL3QvdDU3MDAtY2xvbmUtcmVmZXJlbmNlLnNoCkBAIC04LDYgKzgsOCBAQAogCiBiYXNlX2Rpcj1gcHdkYAogCitVPSRiYXNlX2Rpci9VUExPQURfTE9HCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmluZyBmaXJzdCByZXBvc2l0b3J5JyBcCiAndGVzdF9jcmVhdGVfcmVwbyBBICYmIGNkIEEgJiYKIGVjaG8gZmlyc3QgPiBmaWxlMSAmJgpAQCAtNTAsOCArNTIsMTMgQEAKIAogY2QgIiRiYXNlX2RpciIKIAorcm0gLWYgIiRVIgorCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uaW5nIHdpdGggcmVmZXJlbmNlIChubyAtbCAtcyknIFwKLSdnaXQgY2xvbmUgLS1yZWZlcmVuY2UgQiBmaWxlOi8vYHB3ZGAvQSBEJworJ0dJVF9ERUJVR19TRU5EX1BBQ0s9MyBnaXQgY2xvbmUgLS1yZWZlcmVuY2UgQiAiZmlsZTovLyQocHdkKS9BIiBEIDM+IiRVIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2hlZCBubyBvYmplY3RzJyBcCisnISBncmVwICJed2FudCIgIiRVIicKIAogY2QgIiRiYXNlX2RpciIKIApAQCAtMTEzLDQgKzEyMCwzMCBAQAogCiBjZCAiJGJhc2VfZGlyIgogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJpbmcgYWx0ZXJuYXRlIHJlcG9zaXRvcnkgIzEnIFwKKyd0ZXN0X2NyZWF0ZV9yZXBvIEYgJiYgY2QgRiAmJgorZWNobyBmaXJzdCA+IGZpbGUxICYmCitnaXQgYWRkIGZpbGUxICYmCitnaXQgY29tbWl0IC1tIGluaXRpYWwnCisKK2NkICIkYmFzZV9kaXIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25pbmcgYWx0ZXJuYXRlIHJlcG8gIzIgYW5kIGFkZGluZyBjaGFuZ2VzIHRvIHJlcG8gIzEnIFwKKydnaXQgY2xvbmUgRiBHICYmIGNkIEYgJiYKK2VjaG8gc2Vjb25kID4gZmlsZTIgJiYKK2dpdCBhZGQgZmlsZTIgJiYKK2dpdCBjb21taXQgLW0gYWRkaXRpb24nCisKK2NkICIkYmFzZV9kaXIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25pbmcgYWx0ZXJuYXRlIHJlcG8gIzEsIHVzaW5nICMyIGFzIHJlZmVyZW5jZScgXAorJ2dpdCBjbG9uZSAtLXJlZmVyZW5jZSBHIEYgSCcKKworY2QgIiRiYXNlX2RpciIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmluZyB3aXRoIHJlZmVyZW5jZSBiZWluZyBzdWJzZXQgb2Ygc291cmNlICgtbCAtcyknIFwKKydnaXQgY2xvbmUgLWwgLXMgLS1yZWZlcmVuY2UgQSBCIEUnCisKK2NkICIkYmFzZV9kaXIiCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTcxMC1pbmZvLWFsdGVybmF0ZS5zaCBiL3QvdDU3MTAtaW5mby1hbHRlcm5hdGUuc2gKaW5kZXggOTEwY2NiNC4uZWY3MTI3YyAxMDA3NTUKLS0tIGEvdC90NTcxMC1pbmZvLWFsdGVybmF0ZS5zaAorKysgYi90L3Q1NzEwLWluZm8tYWx0ZXJuYXRlLnNoCkBAIC04MSw5ICs4MSw5IEBACiBjZCAiJGJhc2VfZGlyIgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmVha2luZyBvZiBsb29wcycgXAotImVjaG8gJyRiYXNlX2Rpci9CLy5naXQvb2JqZWN0cycgPj4gJyRiYXNlX2RpcicvQS8uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzJiYKKydlY2hvICIkYmFzZV9kaXIiL0IvLmdpdC9vYmplY3RzID4+ICIkYmFzZV9kaXIiL0EvLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyYmCiBjZCBDICYmCi10ZXN0X3ZhbGlkX3JlcG8iCit0ZXN0X3ZhbGlkX3JlcG8nCiAKIGNkICIkYmFzZV9kaXIiCiAKZGlmZiAtLWdpdCBhL3QvdDYwMDBsaWIuc2ggYi90L3Q2MDAwbGliLnNoCmluZGV4IGMwYmFhYTUuLmY1NTYyN2IgMTAwNzU1Ci0tLSBhL3QvdDYwMDBsaWIuc2gKKysrIGIvdC90NjAwMGxpYi5zaApAQCAtNDksMTMgKzQ5LDE1IEBACiAJc2hpZnQgMQogICAgICAgICBfc2F2ZT0kR0lUX0FVVEhPUl9FTUFJTAogCi0JZXhwb3J0IEdJVF9BVVRIT1JfRU1BSUw9IiRfYXV0aG9yIgorCUdJVF9BVVRIT1JfRU1BSUw9IiRfYXV0aG9yIgorCWV4cG9ydCBHSVRfQVVUSE9SX0VNQUlMCiAJIiRAIgogCWlmIHRlc3QgLXogIiRfc2F2ZSIKIAl0aGVuCiAJCXVuc2V0IEdJVF9BVVRIT1JfRU1BSUwKIAllbHNlCi0JCWV4cG9ydCBHSVRfQVVUSE9SX0VNQUlMPSIkX3NhdmUiCisJCUdJVF9BVVRIT1JfRU1BSUw9IiRfc2F2ZSIKKwkJZXhwb3J0IEdJVF9BVVRIT1JfRU1BSUwKIAlmaQogfQogCkBAIC02OSw3ICs3MSw4IEBACiB7CiAgICAgX2RhdGU9JDEKICAgICBzaGlmdCAxCi0gICAgZXhwb3J0IEdJVF9DT01NSVRURVJfREFURT0iJF9kYXRlIgorICAgIEdJVF9DT01NSVRURVJfREFURT0iJF9kYXRlIgorICAgIGV4cG9ydCBHSVRfQ09NTUlUVEVSX0RBVEUKICAgICAiJEAiCiAgICAgdW5zZXQgR0lUX0NPTU1JVFRFUl9EQVRFCiB9CmRpZmYgLS1naXQgYS90L3Q2MDA2LXJldi1saXN0LWZvcm1hdC5zaCBiL3QvdDYwMDYtcmV2LWxpc3QtZm9ybWF0LnNoCmluZGV4IDBkYzkxNWUuLjkxNzY0ODQgMTAwNzU1Ci0tLSBhL3QvdDYwMDYtcmV2LWxpc3QtZm9ybWF0LnNoCisrKyBiL3QvdDYwMDYtcmV2LWxpc3QtZm9ybWF0LnNoCkBAIC0xNSw3ICsxNSw3IEBACiAJY2F0ID5leHBlY3QuJDEKIAl0ZXN0X2V4cGVjdF9zdWNjZXNzICJmb3JtYXQgJDEiICIKIGdpdCByZXYtbGlzdCAtLXByZXR0eT1mb3JtYXQ6JDIgbWFzdGVyID5vdXRwdXQuJDEgJiYKLWdpdCBkaWZmIGV4cGVjdC4kMSBvdXRwdXQuJDEKK3Rlc3RfY21wIGV4cGVjdC4kMSBvdXRwdXQuJDEKICIKIH0KIApkaWZmIC0tZ2l0IGEvdC90NjAxMC1tZXJnZS1iYXNlLnNoIGIvdC90NjAxMC1tZXJnZS1iYXNlLnNoCmluZGV4IDk2ZjNkMzUuLmI2ZTU3YjIgMTAwNzU1Ci0tLSBhL3QvdDYwMTAtbWVyZ2UtYmFzZS5zaAorKysgYi90L3Q2MDEwLW1lcmdlLWJhc2Uuc2gKQEAgLTEzLDEwICsxMywxMSBAQAogTT0xMTMwMDAwMDAwCiBaPSswMDAwCiAKLWV4cG9ydCBHSVRfQ09NTUlUVEVSX0VNQUlMPWdpdEBjb21tLml0ZXIueHoKLWV4cG9ydCBHSVRfQ09NTUlUVEVSX05BTUU9J0MgTyBNbWl0ZXInCi1leHBvcnQgR0lUX0FVVEhPUl9OQU1FPSdBIFUgVGhvcicKLWV4cG9ydCBHSVRfQVVUSE9SX0VNQUlMPWdpdEBhdS50aG9yLnh6CitHSVRfQ09NTUlUVEVSX0VNQUlMPWdpdEBjb21tLml0ZXIueHoKK0dJVF9DT01NSVRURVJfTkFNRT0nQyBPIE1taXRlcicKK0dJVF9BVVRIT1JfTkFNRT0nQSBVIFRob3InCitHSVRfQVVUSE9SX0VNQUlMPWdpdEBhdS50aG9yLnh6CitleHBvcnQgR0lUX0NPTU1JVFRFUl9FTUFJTCBHSVRfQ09NTUlUVEVSX05BTUUgR0lUX0FVVEhPUl9OQU1FIEdJVF9BVVRIT1JfRU1BSUwKIAogZG9pdCgpIHsKIAlPRkZTRVQ9JDE7IHNoaWZ0CmRpZmYgLS1naXQgYS90L3Q2MDIzLW1lcmdlLWZpbGUuc2ggYi90L3Q2MDIzLW1lcmdlLWZpbGUuc2gKaW5kZXggNzlkYzU4Yi4uNzRlOWU2NiAxMDA3NTUKLS0tIGEvdC90NjAyMy1tZXJnZS1maWxlLnNoCisrKyBiL3QvdDYwMjMtbWVyZ2UtZmlsZS5zaApAQCAtNjMsNyArNjMsNyBAQAogCSJnaXQgbWVyZ2UtZmlsZSB0ZXN0Mi50eHQgb3JpZy50eHQgbmV3Mi50eHQiCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgIm1lcmdlIHJlc3VsdCBhZGRlZCBtaXNzaW5nIExGIiBcCi0JImdpdCBkaWZmIHRlc3QudHh0IHRlc3QyLnR4dCIKKwkidGVzdF9jbXAgdGVzdC50eHQgdGVzdDIudHh0IgogCiBjcCB0ZXN0LnR4dCBiYWNrdXAudHh0CiB0ZXN0X2V4cGVjdF9zdWNjZXNzICJtZXJnZSB3aXRoIGNvbmZsaWN0cyIgXApAQCAtODYsNyArODYsNyBAQAogdmlyZ2EgdHVhIGV0IGJhY3VsdXMgdHV1cyBpcHNhIG1lIGNvbnNvbGF0YSBzdW50LgogRU9GCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImV4cGVjdGVkIGNvbmZsaWN0IG1hcmtlcnMiICJnaXQgZGlmZiB0ZXN0LnR4dCBleHBlY3QudHh0IgordGVzdF9leHBlY3Rfc3VjY2VzcyAiZXhwZWN0ZWQgY29uZmxpY3QgbWFya2VycyIgInRlc3RfY21wIHRlc3QudHh0IGV4cGVjdC50eHQiCiAKIGNwIGJhY2t1cC50eHQgdGVzdC50eHQKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgIm1lcmdlIHdpdGggY29uZmxpY3RzLCB1c2luZyAtTCIgXApAQCAtMTEwLDcgKzExMCw3IEBACiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAiZXhwZWN0ZWQgY29uZmxpY3QgbWFya2Vycywgd2l0aCAtTCIgXAotCSJnaXQgZGlmZiB0ZXN0LnR4dCBleHBlY3QudHh0IgorCSJ0ZXN0X2NtcCB0ZXN0LnR4dCBleHBlY3QudHh0IgogCiBzZWQgInMvIHR1IC8gVFUgLyIgPCBuZXcxLnR4dCA+IG5ldzUudHh0CiB0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb25mbGljdCBpbiByZW1vdmVkIHRhaWwiIFwKQEAgLTEzMiw3ICsxMzIsNyBAQAogPj4+Pj4+PiBuZXc1LnR4dAogRU9GCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImV4cGVjdGVkIGNvbmZsaWN0IG1hcmtlcnMiICJnaXQgZGlmZiBleHBlY3Qgb3V0IgordGVzdF9leHBlY3Rfc3VjY2VzcyAiZXhwZWN0ZWQgY29uZmxpY3QgbWFya2VycyIgInRlc3RfY21wIGV4cGVjdCBvdXQiCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JpbmFyeSBmaWxlcyBjYW5ub3QgYmUgbWVyZ2VkJyAnCiAJISBnaXQgbWVyZ2UtZmlsZSAtcCBvcmlnLnR4dCAuLi90ZXN0NDAxMi5wbmcgbmV3MS50eHQgMj4gbWVyZ2UuZXJyICYmCmRpZmYgLS1naXQgYS90L3Q2MDI0LXJlY3Vyc2l2ZS1tZXJnZS5zaCBiL3QvdDYwMjQtcmVjdXJzaXZlLW1lcmdlLnNoCmluZGV4IDIzZDI0ZDMuLjZhNmExMzAgMTAwNzU1Ci0tLSBhL3QvdDYwMjQtcmVjdXJzaXZlLW1lcmdlLnNoCisrKyBiL3QvdDYwMjQtcmVjdXJzaXZlLW1lcmdlLnNoCkBAIC03MCw3ICs3MCw3IEBACiA+Pj4+Pj4+IEc6YTEKIEVPRgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICJyZXN1bHQgY29udGFpbnMgYSBjb25mbGljdCIgImdpdCBkaWZmIGV4cGVjdCBhMSIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlc3VsdCBjb250YWlucyBhIGNvbmZsaWN0IiAidGVzdF9jbXAgZXhwZWN0IGExIgogCiBnaXQgbHMtZmlsZXMgLS1zdGFnZSA+IG91dAogY2F0ID4gZXhwZWN0IDw8IEVPRgpAQCAtNzksNyArNzksNyBAQAogMTAwNjQ0IGZkNzkyMzUyOTg1NWQwYjI3NDc5NWFlMzM0OWM1ZTA0MzgzMzM5NzkgMwlhMQogRU9GCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInZpcnR1YWwgdHJlZXMgd2VyZSBwcm9jZXNzZWQiICJnaXQgZGlmZiBleHBlY3Qgb3V0IgordGVzdF9leHBlY3Rfc3VjY2VzcyAidmlydHVhbCB0cmVlcyB3ZXJlIHByb2Nlc3NlZCIgInRlc3RfY21wIGV4cGVjdCBvdXQiCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZnVzZSB0byBtZXJnZSBiaW5hcnkgZmlsZXMnICcKIAlnaXQgcmVzZXQgLS1oYXJkICYmCmRpZmYgLS1naXQgYS90L3Q2MDI5LW1lcmdlLXN1YnRyZWUuc2ggYi90L3Q2MDI5LW1lcmdlLXN1YnRyZWUuc2gKaW5kZXggNDNmNTQ1OS4uNWJiZmE0NCAxMDA3NTUKLS0tIGEvdC90NjAyOS1tZXJnZS1zdWJ0cmVlLnNoCisrKyBiL3QvdDYwMjktbWVyZ2Utc3VidHJlZS5zaApAQCAtNTcsNyArNTcsNyBAQAogCQllY2hvICIxMDA2NDQgJG8xIDAJZ2l0LWd1aS9naXQtZ3VpLnNoIgogCQllY2hvICIxMDA2NDQgJG8yIDAJZ2l0LmMiCiAJKSA+ZXhwZWN0ZWQgJiYKLQlnaXQgZGlmZiAtdSBleHBlY3RlZCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgdXBkYXRlJyAnCkBAIC03Myw3ICs3Myw3IEBACiAJCWVjaG8gIjEwMDY0NCAkbzMgMAlnaXQtZ3VpL2dpdC1ndWkuc2giCiAJCWVjaG8gIjEwMDY0NCAkbzIgMAlnaXQuYyIKIAkpID5leHBlY3RlZCAmJgotCWdpdCBkaWZmIC11IGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMzAtYmlzZWN0LXBvcmNlbGFpbi5zaCBiL3QvdDYwMzAtYmlzZWN0LXBvcmNlbGFpbi5zaAppbmRleCA5MzNmNTY3Li4wNjI2NTQ0IDEwMDc1NQotLS0gYS90L3Q2MDMwLWJpc2VjdC1wb3JjZWxhaW4uc2gKKysrIGIvdC90NjAzMC1iaXNlY3QtcG9yY2VsYWluLnNoCkBAIC0xMjYsNiArMTI2LDQ3IEBACiAJdGVzdCAteiAiJChnaXQgZm9yLWVhY2gtcmVmICJyZWZzL2hlYWRzL2Jpc2VjdCIpIgogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Qgc3RhcnQ6IGJhY2sgaW4gZ29vZCBicmFuY2gnICcKKwlnaXQgYnJhbmNoID4gYnJhbmNoLm91dHB1dCAmJgorCWdyZXAgIiogb3RoZXIiIGJyYW5jaC5vdXRwdXQgPiAvZGV2L251bGwgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0ICRIQVNINCAkSEFTSDEgLS0gJiYKKwlnaXQgYmlzZWN0IGdvb2QgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0ICRIQVNINCAkSEFTSDEgLS0gJiYKKwlnaXQgYmlzZWN0IGJhZCAmJgorCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYnJhbmNoID4gYnJhbmNoLm91dHB1dCAmJgorCWdyZXAgIiogb3RoZXIiIGJyYW5jaC5vdXRwdXQgPiAvZGV2L251bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHN0YXJ0OiBubyAiLmdpdC9CSVNFQ1RfU1RBUlQiIGlmIGp1bmsgcmV2JyAnCisJZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDQgJEhBU0gxIC0tICYmCisJZ2l0IGJpc2VjdCBnb29kICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDQgZm9vIC0tICYmCisJZ2l0IGJyYW5jaCA+IGJyYW5jaC5vdXRwdXQgJiYKKwlncmVwICIqIG90aGVyIiBicmFuY2gub3V0cHV0ID4gL2Rldi9udWxsICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdCAtZSAuZ2l0L0JJU0VDVF9TVEFSVAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Qgc3RhcnQ6IG5vICIuZ2l0L0JJU0VDVF9TVEFSVCIgaWYgbWlzdGFrZW4gcmV2JyAnCisJZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDQgJEhBU0gxIC0tICYmCisJZ2l0IGJpc2VjdCBnb29kICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDEgJEhBU0g0IC0tICYmCisJZ2l0IGJyYW5jaCA+IGJyYW5jaC5vdXRwdXQgJiYKKwlncmVwICIqIG90aGVyIiBicmFuY2gub3V0cHV0ID4gL2Rldi9udWxsICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdCAtZSAuZ2l0L0JJU0VDVF9TVEFSVAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Qgc3RhcnQ6IG5vICIuZ2l0L0JJU0VDVF9TVEFSVCIgaWYgY2hlY2tvdXQgZXJyb3InICcKKwllY2hvICJ0ZW1wIHN0dWZmIiA+IGhlbGxvICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDQgJEhBU0gxIC0tICYmCisJZ2l0IGJyYW5jaCAmJgorCWdpdCBicmFuY2ggPiBicmFuY2gub3V0cHV0ICYmCisJZ3JlcCAiKiBvdGhlciIgYnJhbmNoLm91dHB1dCA+IC9kZXYvbnVsbCAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3QgLWUgLmdpdC9CSVNFQ1RfU1RBUlQgJiYKKwl0ZXN0IC16ICIkKGdpdCBmb3ItZWFjaC1yZWYgInJlZnMvYmlzZWN0LyoiKSIgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRCBoZWxsbworJworCiAjICRIQVNIMSBpcyBnb29kLCAkSEFTSDQgaXMgYmFkLCB3ZSBza2lwICRIQVNIMwogIyBidXQgJEhBU0gyIGlzIGJhZCwKICMgc28gd2Ugc2hvdWxkIGZpbmQgJEhBU0gyIGFzIHRoZSBmaXJzdCBiYWQgY29tbWl0CkBAIC0yODEsMjUgKzMyMiw2IEBACiAJdGVzdCAkSEVBRCA9ICQoY2F0IC5naXQvQklTRUNUX1NUQVJUKSAmJgogCWdpdCBiaXNlY3QgcmVzZXQgJiYKIAl0ZXN0ICRIRUFEID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpCi0KLScKLQotdGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHJlZnVzZXMgdG8gc3RhcnQgaWYgYnJhbmNoIGJpc2VjdCBleGlzdHMnICcKLQlnaXQgYmlzZWN0IHJlc2V0ICYmCi0JZ2l0IGJyYW5jaCBiaXNlY3QgJiYKLQl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IHN0YXJ0ICYmCi0JZ2l0IGJyYW5jaCAtZCBiaXNlY3QgJiYKLQlnaXQgY2hlY2tvdXQgLWIgYmlzZWN0ICYmCi0JdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBzdGFydCAmJgotCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKLQlnaXQgYnJhbmNoIC1kIGJpc2VjdAotJwotCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3QgcmVmdXNlcyB0byBzdGFydCBpZiBicmFuY2ggbmV3LWJpc2VjdCBleGlzdHMnICcKLQlnaXQgYmlzZWN0IHJlc2V0ICYmCi0JZ2l0IGJyYW5jaCBuZXctYmlzZWN0ICYmCi0JdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBzdGFydCAmJgotCWdpdCBicmFuY2ggLWQgbmV3LWJpc2VjdAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3QgZXJyb3JzIG91dCBpZiBiYWQgYW5kIGdvb2QgYXJlIG1pc3Rha2VuJyAnCkBAIC0zMDksNiArMzMxLDI1IEBACiAJZ2l0IGJpc2VjdCByZXNldAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3QgZG9lcyBub3QgY3JlYXRlIGEgImJpc2VjdCIgYnJhbmNoJyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g3ICRIQVNIMSAmJgorCWdpdCBicmFuY2ggYmlzZWN0ICYmCisJcmV2X2hhc2g0PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCXRlc3QgIiRyZXZfaGFzaDQiID0gIiRIQVNINCIgJiYKKwlnaXQgYnJhbmNoIC1EIGJpc2VjdCAmJgorCWdpdCBiaXNlY3QgZ29vZCAmJgorCWdpdCBicmFuY2ggYmlzZWN0ICYmCisJcmV2X2hhc2g2PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCXRlc3QgIiRyZXZfaGFzaDYiID0gIiRIQVNINiIgJiYKKwlnaXQgYmlzZWN0IGdvb2QgPiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdyZXAgIiRIQVNINyBpcyBmaXJzdCBiYWQgY29tbWl0IiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlyZXZfaGFzaDY9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGJpc2VjdCkgJiYKKwl0ZXN0ICIkcmV2X2hhc2g2IiA9ICIkSEFTSDYiICYmCisJZ2l0IGJyYW5jaCAtRCBiaXNlY3QKKycKKwogIwogIwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDMxLW1lcmdlLXJlY3Vyc2l2ZS5zaCBiL3QvdDYwMzEtbWVyZ2UtcmVjdXJzaXZlLnNoCmluZGV4IGM4MzEwYWUuLjgwNzNlMGMgMTAwNzU1Ci0tLSBhL3QvdDYwMzEtbWVyZ2UtcmVjdXJzaXZlLnNoCisrKyBiL3QvdDYwMzEtbWVyZ2UtcmVjdXJzaXZlLnNoCkBAIC0zLDYgKzMsOSBAQAogdGVzdF9kZXNjcmlwdGlvbj0nbWVyZ2UtcmVjdXJzaXZlOiBoYW5kbGUgZmlsZSBtb2RlJwogLiAuL3Rlc3QtbGliLnNoCiAKKyMgTm90ZSB0aGF0IHdlIGZvbGxvdyAiY2htb2QgK3ggRiIgd2l0aCAidXBkYXRlLWluZGV4IC0tY2htb2Q9K3ggRiIgdG8KKyMgaGVscCBmaWxlc3lzdGVtcyB0aGF0IGRvIG5vdCBoYXZlIHRoZSBleGVjdXRhYmxlIGJpdC4KKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kZSBjaGFuZ2UgaW4gb25lIGJyYW5jaDoga2VlcCBjaGFuZ2VkIHZlcnNpb24nICcKIAk6ID5maWxlMSAmJgogCWdpdCBhZGQgZmlsZTEgJiYKQEAgLTEzLDcgKzE2LDcgQEAKIAlnaXQgY29tbWl0IC1tIGEgJiYKIAlnaXQgY2hlY2tvdXQgLWIgYjEgbWFzdGVyICYmCiAJY2htb2QgK3ggZmlsZTEgJiYKLQlnaXQgYWRkIGZpbGUxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWNobW9kPSt4IGZpbGUxICYmCiAJZ2l0IGNvbW1pdCAtbSBiMSAmJgogCWdpdCBjaGVja291dCBhMSAmJgogCWdpdCBtZXJnZS1yZWN1cnNpdmUgbWFzdGVyIC0tIGExIGIxICYmCkBAIC0yNiw3ICsyOSw3IEBACiAJOiA+ZmlsZTIgJiYKIAlIPSQoZ2l0IGhhc2gtb2JqZWN0IGZpbGUyKSAmJgogCWNobW9kICt4IGZpbGUyICYmCi0JZ2l0IGFkZCBmaWxlMiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jaG1vZD0reCBmaWxlMiAmJgogCWdpdCBjb21taXQgLW0gYTIgJiYKIAlnaXQgY2hlY2tvdXQgLWIgYjIgbWFzdGVyICYmCiAJOiA+ZmlsZTIgJiYKZGlmZiAtLWdpdCBhL3QvdDYwMzItbWVyZ2UtbGFyZ2UtcmVuYW1lLnNoIGIvdC90NjAzMi1tZXJnZS1sYXJnZS1yZW5hbWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWFjNWViYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMzItbWVyZ2UtbGFyZ2UtcmVuYW1lLnNoCkBAIC0wLDAgKzEsNzMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdtZXJnaW5nIHdpdGggbGFyZ2UgcmVuYW1lIG1hdHJpeCcKKy4gLi90ZXN0LWxpYi5zaAorCitjb3VudCgpIHsKKwlpPTEKKwl3aGlsZSB0ZXN0ICRpIC1sZSAkMTsgZG8KKwkJZWNobyAkaQorCQlpPSQoKCRpICsgMSkpCisJZG9uZQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAoaW5pdGlhbCknICcKKwl0b3VjaCBmaWxlICYmCisJZ2l0IGFkZCAuICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IHRhZyBpbml0aWFsCisnCisKK21ha2VfdGV4dCgpIHsKKwllY2hvICQxOiAkMgorCWZvciBpIGluIGBjb3VudCAyMGA7IGRvCisJCWVjaG8gJDE6ICRpCisJZG9uZQorCWVjaG8gJDE6ICQzCit9CisKK3Rlc3RfcmVuYW1lKCkgeworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlbmFtZSAoJDEsICQyKSIgJworCW49JyQxJworCWV4cGVjdD0nJDInCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCWdpdCBicmFuY2ggLUQgdGVzdCRuIHx8IHRydWUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwlmb3IgaSBpbiAkKGNvdW50ICRuKTsgZG8KKwkJbWFrZV90ZXh0ICRpIGluaXRpYWwgaW5pdGlhbCA+JGkKKwlkb25lICYmCisJZ2l0IGFkZCAuICYmCisJZ2l0IGNvbW1pdCAtbSBhZGQ9JG4gJiYKKwlmb3IgaSBpbiAkKGNvdW50ICRuKTsgZG8KKwkJbWFrZV90ZXh0ICRpIGNoYW5nZWQgaW5pdGlhbCA+JGkKKwlkb25lICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBjaGFuZ2U9JG4gJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCRuIEhFQUReICYmCisJZm9yIGkgaW4gJChjb3VudCAkbik7IGRvCisJCWdpdCBybSAkaQorCQltYWtlX3RleHQgJGkgaW5pdGlhbCBjaGFuZ2VkID4kaS5tb3ZlZAorCWRvbmUgJiYKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC1tIGNoYW5nZStyZW5hbWU9JG4gJiYKKwljYXNlICIkZXhwZWN0IiBpbgorCQlvaykgZ2l0IG1lcmdlIG1hc3RlciA7OworCQkgKikgdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciA7OworCWVzYWMKKwknCit9CisKK3Rlc3RfcmVuYW1lIDUgb2sKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IGRpZmYucmVuYW1lbGltaXQgdG8gNCcgJworCWdpdCBjb25maWcgZGlmZi5yZW5hbWVsaW1pdCA0CisnCit0ZXN0X3JlbmFtZSA0IG9rCit0ZXN0X3JlbmFtZSA1IGZhaWwKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IG1lcmdlLnJlbmFtZWxpbWl0IHRvIDUnICcKKwlnaXQgY29uZmlnIG1lcmdlLnJlbmFtZWxpbWl0IDUKKycKK3Rlc3RfcmVuYW1lIDUgb2sKK3Rlc3RfcmVuYW1lIDYgZmFpbAorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMzMtbWVyZ2UtY3JsZi5zaCBiL3QvdDYwMzMtbWVyZ2UtY3JsZi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NWQ5NjAyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAzMy1tZXJnZS1jcmxmLnNoCkBAIC0wLDAgKzEsNTIgQEAKKyMhL2Jpbi9zaAorCithcHBlbmRfY3IgKCkgeworCXNlZCAtZSAncy8kL1EvJyB8IHRyIFEgJ1wwMTUnCit9CisKK3JlbW92ZV9jciAoKSB7CisJdHIgJ1wwMTUnIFEgfCBzZWQgLWUgJ3MvUSQvLycKK30KKwordGVzdF9kZXNjcmlwdGlvbj0nbWVyZ2UgY29uZmxpY3QgaW4gY3JsZiByZXBvCisKKwkJYi0tLU0KKwkgICAgICAgLyAgIC8KKwlpbml0aWFsLS0tYQorCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgorCWVjaG8gZm9vIHwgYXBwZW5kX2NyID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCIgJiYKKwlnaXQgdGFnIGluaXRpYWwgJiYKKwlnaXQgYnJhbmNoIHNpZGUgJiYKKwllY2hvIGxpbmUgZnJvbSBhIHwgYXBwZW5kX2NyID5maWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGxpbmUgZnJvbSBhIiBmaWxlICYmCisJZ2l0IHRhZyBhICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwllY2hvIGxpbmUgZnJvbSBiIHwgYXBwZW5kX2NyID5maWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGxpbmUgZnJvbSBiIiBmaWxlICYmCisJZ2l0IHRhZyBiICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayAib3VycyIgaXMgQ1JMRicgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCWdpdCBtZXJnZSBzaWRlIC1zIG91cnMgJiYKKwljYXQgZmlsZSB8IHJlbW92ZV9jciB8IGFwcGVuZF9jciA+ZmlsZS50ZW1wICYmCisJdGVzdF9jbXAgZmlsZSBmaWxlLnRlbXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgdGhhdCBjb25mbGljdCBmaWxlIGlzIENSTEYnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2Ugc2lkZSAmJgorCWNhdCBmaWxlIHwgcmVtb3ZlX2NyIHwgYXBwZW5kX2NyID5maWxlLnRlbXAgJiYKKwl0ZXN0X2NtcCBmaWxlIGZpbGUudGVtcAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYxMjAtZGVzY3JpYmUuc2ggYi90L3Q2MTIwLWRlc2NyaWJlLnNoCmluZGV4IGM2YmZlZjUuLjJmYjY3MmMgMTAwNzU1Ci0tLSBhL3QvdDYxMjAtZGVzY3JpYmUuc2gKKysrIGIvdC90NjEyMC1kZXNjcmliZS5zaApAQCAtMTA4LDcgKzEwOCw3IEBACiBFT0YKIGNoZWNrX2Rlc2NyaWJlIEEtKiBIRUFECiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd3YXJuaW5nIHdhcyBkaXNwbGF5ZWQgZm9yIFEnICcKLQlnaXQgZGlmZiBlcnIuZXhwZWN0IGVyci5hY3R1YWwKKwl0ZXN0X2NtcCBlcnIuZXhwZWN0IGVyci5hY3R1YWwKICcKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSB0YWcgUSBiYWNrIHRvIEEnICcKIAltdiAuZ2l0L3JlZnMvdGFncy9RIC5naXQvcmVmcy90YWdzL0EKQEAgLTEzOSw0ICsxMzksNiBAQAogCiBjaGVja19kZXNjcmliZSAidGVzdDItbGlnaHR3ZWlnaHQtKiIgLS10YWdzIC0tbWF0Y2g9InRlc3QyLSoiCiAKK2NoZWNrX2Rlc2NyaWJlICJ0ZXN0Mi1saWdodHdlaWdodC0qIiAtLWxvbmcgLS10YWdzIC0tbWF0Y2g9InRlc3QyLSoiIEhFQUReCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjIwMC1mbXQtbWVyZ2UtbXNnLnNoIGIvdC90NjIwMC1mbXQtbWVyZ2UtbXNnLnNoCmluZGV4IDUyNmQ3ZDEuLmJjNzQzNDkgMTAwNzU1Ci0tLSBhL3QvdDYyMDAtZm10LW1lcmdlLW1zZy5zaAorKysgYi90L3Q2MjAwLWZtdC1tZXJnZS1tc2cuc2gKQEAgLTc5LDIwICs3OSwyMCBAQAogCWdpdCBmZXRjaCAuIGxlZnQgJiYKIAogCWdpdCBmbXQtbWVyZ2UtbXNnIDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGFjdHVhbCBleHBlY3RlZAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCi1jYXQgPmV4cGVjdGVkIDw8XEVPRgotTWVyZ2UgYnJhbmNoICdsZWZ0JyBvZiAuLi90cmFzaAorY2F0ID5leHBlY3RlZCA8PEVPRgorTWVyZ2UgYnJhbmNoICdsZWZ0JyBvZiAuLi8kdGVzdAogRU9GCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLW1zZyB0ZXN0ICMyJyAnCiAKIAlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCi0JZ2l0IGZldGNoIC4uL3RyYXNoIGxlZnQgJiYKKwlnaXQgZmV0Y2ggLi4vIiR0ZXN0IiBsZWZ0ICYmCiAKIAlnaXQgZm10LW1lcmdlLW1zZyA8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBhY3R1YWwgZXhwZWN0ZWQKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAogY2F0ID5leHBlY3RlZCA8PFxFT0YKQEAgLTEwNiw4ICsxMDYsMjQgQEAKICAgQ29tbW9uICMxCiBFT0YKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtbXNnIHRlc3QgIzMnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLW1zZyB0ZXN0ICMzLTEnICcKIAorCWdpdCBjb25maWcgLS11bnNldC1hbGwgbWVyZ2UubG9nCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBtZXJnZS5zdW1tYXJ5CisJZ2l0IGNvbmZpZyBtZXJnZS5sb2cgdHJ1ZSAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXNldGRhdGUgJiYKKwlnaXQgZmV0Y2ggLiBsZWZ0ICYmCisKKwlnaXQgZm10LW1lcmdlLW1zZyA8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtbXNnIHRlc3QgIzMtMicgJworCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBtZXJnZS5sb2cKKwlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIG1lcmdlLnN1bW1hcnkKIAlnaXQgY29uZmlnIG1lcmdlLnN1bW1hcnkgdHJ1ZSAmJgogCiAJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgpAQCAtMTE1LDcgKzEzMSw3IEBACiAJZ2l0IGZldGNoIC4gbGVmdCAmJgogCiAJZ2l0IGZtdC1tZXJnZS1tc2cgPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgYWN0dWFsIGV4cGVjdGVkCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GCkBAIC0xMzYsOCArMTUyLDI0IEBACiAgIENvbW1vbiAjMQogRU9GCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLW1zZyB0ZXN0ICM0JyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1tc2cgdGVzdCAjNC0xJyAnCiAKKwlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIG1lcmdlLmxvZworCWdpdCBjb25maWcgLS11bnNldC1hbGwgbWVyZ2Uuc3VtbWFyeQorCWdpdCBjb25maWcgbWVyZ2UubG9nIHRydWUgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlzZXRkYXRlICYmCisJZ2l0IGZldGNoIC4gbGVmdCByaWdodCAmJgorCisJZ2l0IGZtdC1tZXJnZS1tc2cgPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLW1zZyB0ZXN0ICM0LTInICcKKworCWdpdCBjb25maWcgLS11bnNldC1hbGwgbWVyZ2UubG9nCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBtZXJnZS5zdW1tYXJ5CiAJZ2l0IGNvbmZpZyBtZXJnZS5zdW1tYXJ5IHRydWUgJiYKIAogCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKQEAgLTE0NSwxMSArMTc3LDI3IEBACiAJZ2l0IGZldGNoIC4gbGVmdCByaWdodCAmJgogCiAJZ2l0IGZtdC1tZXJnZS1tc2cgPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgYWN0dWFsIGV4cGVjdGVkCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLW1zZyB0ZXN0ICM1JyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1tc2cgdGVzdCAjNS0xJyAnCiAKKwlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIG1lcmdlLmxvZworCWdpdCBjb25maWcgLS11bnNldC1hbGwgbWVyZ2Uuc3VtbWFyeQorCWdpdCBjb25maWcgbWVyZ2UubG9nIHllcyAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXNldGRhdGUgJiYKKwlnaXQgZmV0Y2ggLiBsZWZ0IHJpZ2h0ICYmCisKKwlnaXQgZm10LW1lcmdlLW1zZyA8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtbXNnIHRlc3QgIzUtMicgJworCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBtZXJnZS5sb2cKKwlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIG1lcmdlLnN1bW1hcnkKIAlnaXQgY29uZmlnIG1lcmdlLnN1bW1hcnkgeWVzICYmCiAKIAlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCkBAIC0xNTcsNyArMjA1LDcgQEAKIAlnaXQgZmV0Y2ggLiBsZWZ0IHJpZ2h0ICYmCiAKIAlnaXQgZm10LW1lcmdlLW1zZyA8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBhY3R1YWwgZXhwZWN0ZWQKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MzAwLWZvci1lYWNoLXJlZi5zaCBiL3QvdDYzMDAtZm9yLWVhY2gtcmVmLnNoCmluZGV4IGY0NmVjOTMuLjkxZWE4NWQgMTAwNzU1Ci0tLSBhL3QvdDYzMDAtZm9yLWVhY2gtcmVmLnNoCisrKyBiL3QvdDYzMDAtZm9yLWVhY2gtcmVmLnNoCkBAIC03NSwxNCArNzUsMTQgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIHVuZm9ybWF0dGVkIGRhdGUgZmllbGRzIG91dHB1dCcgJwogCShnaXQgZm9yLWVhY2gtcmVmIC0tc2hlbGwgLS1mb3JtYXQ9IiUocmVmbmFtZSkgJShjb21taXR0ZXJkYXRlKSAlKGF1dGhvcmRhdGUpIiByZWZzL2hlYWRzICYmCiAJZ2l0IGZvci1lYWNoLXJlZiAtLXNoZWxsIC0tZm9ybWF0PSIlKHJlZm5hbWUpICUodGFnZ2VyZGF0ZSkiIHJlZnMvdGFncykgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayBmb3JtYXQgImRlZmF1bHQiIGZvcm1hdHRlZCBkYXRlIGZpZWxkcyBvdXRwdXQnICcKIAlmPWRlZmF1bHQgJiYKIAkoZ2l0IGZvci1lYWNoLXJlZiAtLXNoZWxsIC0tZm9ybWF0PSIlKHJlZm5hbWUpICUoY29tbWl0dGVyZGF0ZTokZikgJShhdXRob3JkYXRlOiRmKSIgcmVmcy9oZWFkcyAmJgogCWdpdCBmb3ItZWFjaC1yZWYgLS1zaGVsbCAtLWZvcm1hdD0iJShyZWZuYW1lKSAlKHRhZ2dlcmRhdGU6JGYpIiByZWZzL3RhZ3MpID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3RlZCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAogIyBEb24ndCBrbm93IGhvdyB0byBkbyByZWxhdGl2ZSBjaGVjayBiZWNhdXNlIEkgY2FuJ3Qga25vdyB3aGVuIHRoaXMgc2NyaXB0CkBAIC0xMDksNyArMTA5LDcgQEAKIAlmPXNob3J0ICYmCiAJKGdpdCBmb3ItZWFjaC1yZWYgLS1zaGVsbCAtLWZvcm1hdD0iJShyZWZuYW1lKSAlKGNvbW1pdHRlcmRhdGU6JGYpICUoYXV0aG9yZGF0ZTokZikiIHJlZnMvaGVhZHMgJiYKIAlnaXQgZm9yLWVhY2gtcmVmIC0tc2hlbGwgLS1mb3JtYXQ9IiUocmVmbmFtZSkgJSh0YWdnZXJkYXRlOiRmKSIgcmVmcy90YWdzKSA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0ZWQgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GCkBAIC0xMjEsNyArMTIxLDcgQEAKIAlmPWxvY2FsICYmCiAJKGdpdCBmb3ItZWFjaC1yZWYgLS1zaGVsbCAtLWZvcm1hdD0iJShyZWZuYW1lKSAlKGNvbW1pdHRlcmRhdGU6JGYpICUoYXV0aG9yZGF0ZTokZikiIHJlZnMvaGVhZHMgJiYKIAlnaXQgZm9yLWVhY2gtcmVmIC0tc2hlbGwgLS1mb3JtYXQ9IiUocmVmbmFtZSkgJSh0YWdnZXJkYXRlOiRmKSIgcmVmcy90YWdzKSA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0ZWQgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GCkBAIC0xMzMsNyArMTMzLDcgQEAKIAlmPWlzbzg2MDEgJiYKIAkoZ2l0IGZvci1lYWNoLXJlZiAtLXNoZWxsIC0tZm9ybWF0PSIlKHJlZm5hbWUpICUoY29tbWl0dGVyZGF0ZTokZikgJShhdXRob3JkYXRlOiRmKSIgcmVmcy9oZWFkcyAmJgogCWdpdCBmb3ItZWFjaC1yZWYgLS1zaGVsbCAtLWZvcm1hdD0iJShyZWZuYW1lKSAlKHRhZ2dlcmRhdGU6JGYpIiByZWZzL3RhZ3MpID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3RlZCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAogY2F0ID5leHBlY3RlZCA8PFxFT0YKQEAgLTE0NSw3ICsxNDUsNyBAQAogCWY9cmZjMjgyMiAmJgogCShnaXQgZm9yLWVhY2gtcmVmIC0tc2hlbGwgLS1mb3JtYXQ9IiUocmVmbmFtZSkgJShjb21taXR0ZXJkYXRlOiRmKSAlKGF1dGhvcmRhdGU6JGYpIiByZWZzL2hlYWRzICYmCiAJZ2l0IGZvci1lYWNoLXJlZiAtLXNoZWxsIC0tZm9ybWF0PSIlKHJlZm5hbWUpICUodGFnZ2VyZGF0ZTokZikiIHJlZnMvdGFncykgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiBjYXQgPmV4cGVjdGVkIDw8XEVPRgpAQCAtMTU1LDcgKzE1NSw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1ZlcmlmeSBhc2NlbmRpbmcgc29ydCcgJwogCWdpdC1mb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUocmVmbmFtZSkiIC0tc29ydD1yZWZuYW1lID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3RlZCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAogCkBAIC0xNjYsNyArMTY2LDcgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnVmVyaWZ5IGRlc2NlbmRpbmcgc29ydCcgJwogCWdpdC1mb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUocmVmbmFtZSkiIC0tc29ydD0tcmVmbmFtZSA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0ZWQgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GCkBAIC0xNzYsMTcgKzE3NiwxNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdRdW90aW5nIHN0eWxlOiBzaGVsbCcgJwogCWdpdCBmb3ItZWFjaC1yZWYgLS1zaGVsbCAtLWZvcm1hdD0iJShyZWZuYW1lKSIgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdRdW90aW5nIHN0eWxlOiBwZXJsJyAnCiAJZ2l0IGZvci1lYWNoLXJlZiAtLXBlcmwgLS1mb3JtYXQ9IiUocmVmbmFtZSkiID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3RlZCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnUXVvdGluZyBzdHlsZTogcHl0aG9uJyAnCiAJZ2l0IGZvci1lYWNoLXJlZiAtLXB5dGhvbiAtLWZvcm1hdD0iJShyZWZuYW1lKSIgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiBjYXQgPmV4cGVjdGVkIDw8XEVPRgpAQCAtMTk2LDcgKzE5Niw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1F1b3Rpbmcgc3R5bGU6IHRjbCcgJwogCWdpdCBmb3ItZWFjaC1yZWYgLS10Y2wgLS1mb3JtYXQ9IiUocmVmbmFtZSkiID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3RlZCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAogZm9yIGkgaW4gIi0tcGVybCAtLXNoZWxsIiAiLXMgLS1weXRob24iICItLXB5dGhvbiAtLXRjbCIgIi0tdGNsIC0tcGVybCI7IGRvCmRpZmYgLS1naXQgYS90L3Q3MDAzLWZpbHRlci1icmFuY2guc2ggYi90L3Q3MDAzLWZpbHRlci1icmFuY2guc2gKaW5kZXggZjEyNjIwNC4uZTI2ZjcyNiAxMDA3NTUKLS0tIGEvdC90NzAwMy1maWx0ZXItYnJhbmNoLnNoCisrKyBiL3QvdDcwMDMtZmlsdGVyLWJyYW5jaC5zaApAQCAtMTE2LDcgKzExNiw3IEBACiAJCSAiZ2l0IGxzLWZpbGVzIC1zIHwgc2VkIFwicy1cXHQtJm5ld3N1YmRpci8tXCIgfAogCSAgICAgICAgICBHSVRfSU5ERVhfRklMRT1cJEdJVF9JTkRFWF9GSUxFLm5ldyBcCiAJCQlnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgotCQkgIG12IFwkR0lUX0lOREVYX0ZJTEUubmV3IFwkR0lUX0lOREVYX0ZJTEUiIGRpcmVjdG9yeW1vdmVkICYmCisJCSAgbXYgXCJcJEdJVF9JTkRFWF9GSUxFLm5ld1wiIFwiXCRHSVRfSU5ERVhfRklMRVwiIiBkaXJlY3Rvcnltb3ZlZCAmJgogCXRlc3QgLXogIiQoZ2l0IGRpZmYgSEVBRCBkaXJlY3Rvcnltb3ZlZDpuZXdzdWJkaXIpIicKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RvcHMgd2hlbiBtc2cgZmlsdGVyIGZhaWxzJyAnCkBAIC0yMTAsNCArMjEwLDM2IEBACiAJdGVzdCAkKGdpdCByZXYtbGlzdCBtYXN0ZXIgfCB3YyAtbCkgPSAzCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1RhZyBuYW1lIGZpbHRlcmluZyByZXRhaW5zIHRhZyBtZXNzYWdlJyAnCisJZ2l0IHRhZyAtbSBhdGFnIFQgJiYKKwlnaXQgY2F0LWZpbGUgdGFnIFQgPiBleHBlY3QgJiYKKwlnaXQgZmlsdGVyLWJyYW5jaCAtZiAtLXRhZy1uYW1lLWZpbHRlciBjYXQgJiYKKwlnaXQgY2F0LWZpbGUgdGFnIFQgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2ZhdXhfZ3BnX3RhZz0nb2JqZWN0IFhYWFhYWAordHlwZSBjb21taXQKK3RhZyBTCit0YWdnZXIgVCBBIEdnZXIgPHRhZ2dlckBleGFtcGxlLmNvbT4gMTIwNjAyNjMzOSAtMDUwMAorCitUaGlzIGlzIGEgZmF1eCBncGcgc2lnbmVkIHRhZy4KKy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tCitWZXJzaW9uOiBGYXV4R1BHIHYwLjAuMCAoRkFVWC9MaW51eCkKKworZ2RzZm9ld2h4dS82bDA2ZjFreHl4aEtkWmtyY2JhaU9NdGtKVUE5SVRBYzFtbGFtaDBvb2FzeGtIMVh3TWJZUQorYWNtd1hhV0VUMjBIMEdlQUdQKzd2b3c9Cis9YWdwTworLS0tLS1FTkQgUEdQIFNJR05BVFVSRS0tLS0tCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdUYWcgbmFtZSBmaWx0ZXJpbmcgc3RyaXBzIGdwZyBzaWduYXR1cmUnICcKKwlzaGExPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXNoYTF0PSQoZWNobyAiJGZhdXhfZ3BnX3RhZyIgfCBzZWQgLWUgcy9YWFhYWFgvJHNoYTEvIHwgZ2l0IG1rdGFnKSAmJgorCWdpdCB1cGRhdGUtcmVmICJyZWZzL3RhZ3MvUyIgIiRzaGExdCIgJiYKKwllY2hvICIkZmF1eF9ncGdfdGFnIiB8IHNlZCAtZSBzL1hYWFhYWC8kc2hhMS8gfCBoZWFkIC1uIDYgPiBleHBlY3QgJiYKKwlnaXQgZmlsdGVyLWJyYW5jaCAtZiAtLXRhZy1uYW1lLWZpbHRlciBjYXQgJiYKKwlnaXQgY2F0LWZpbGUgdGFnIFMgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzAwNC10YWcuc2ggYi90L3Q3MDA0LXRhZy5zaAppbmRleCAxYTcxNDFlLi5hY2RkYmY1IDEwMDc1NQotLS0gYS90L3Q3MDA0LXRhZy5zaAorKysgYi90L3Q3MDA0LXRhZy5zaApAQCAtMTE2LDkgKzExNiw5IEBACiBFT0YKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogCSd0cnlpbmcgdG8gZGVsZXRlIHRhZ3Mgd2l0aG91dCBwYXJhbXMgc2hvdWxkIHN1Y2NlZWQgYW5kIGRvIG5vdGhpbmcnICcKLQlnaXQgdGFnIC1sID4gYWN0dWFsICYmIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1sID4gYWN0dWFsICYmIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC1kICYmCi0JZ2l0IHRhZyAtbCA+IGFjdHVhbCAmJiBnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisJZ2l0IHRhZyAtbCA+IGFjdHVhbCAmJiB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXApAQCAtMTczLDkgKzE3Myw5IEBACiAJZ2l0IHRhZyB2MS4wICYmCiAJZ2l0IHRhZyB0MjEwICYmCiAJZ2l0IHRhZyAtbCA+IGFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0IHRhZyA+IGFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIGNhdCA+ZXhwZWN0IDw8RU9GCkBAIC0xODYsNyArMTg2LDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogCSdsaXN0aW5nIHRhZ3Mgd2l0aCBzdWJzdHJpbmcgYXMgcGF0dGVybiBtdXN0IHByaW50IHRob3NlIG1hdGNoaW5nJyAnCiAJZ2l0LXRhZyAtbCAiKmEqIiA+IGFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIGNhdCA+ZXhwZWN0IDw8RU9GCkBAIC0xOTYsNyArMTk2LDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogCSdsaXN0aW5nIHRhZ3Mgd2l0aCBhIHN1ZmZpeCBhcyBwYXR0ZXJuIG11c3QgcHJpbnQgdGhvc2UgbWF0Y2hpbmcnICcKIAlnaXQtdGFnIC1sICIqLjEiID4gYWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogY2F0ID5leHBlY3QgPDxFT0YKQEAgLTIwNiw3ICsyMDYsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAJJ2xpc3RpbmcgdGFncyB3aXRoIGEgcHJlZml4IGFzIHBhdHRlcm4gbXVzdCBwcmludCB0aG9zZSBtYXRjaGluZycgJwogCWdpdC10YWcgLWwgInQyMSoiID4gYWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogY2F0ID5leHBlY3QgPDxFT0YKQEAgLTIxNSw3ICsyMTUsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAJJ2xpc3RpbmcgdGFncyB1c2luZyBhIG5hbWUgYXMgcGF0dGVybiBtdXN0IHByaW50IHRoYXQgb25lIG1hdGNoaW5nJyAnCiAJZ2l0LXRhZyAtbCBhMSA+IGFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIGNhdCA+ZXhwZWN0IDw8RU9GCkBAIC0yMjQsNyArMjI0LDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogCSdsaXN0aW5nIHRhZ3MgdXNpbmcgYSBuYW1lIGFzIHBhdHRlcm4gbXVzdCBwcmludCB0aGF0IG9uZSBtYXRjaGluZycgJwogCWdpdC10YWcgLWwgdjEuMCA+IGFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIGNhdCA+ZXhwZWN0IDw8RU9GCkBAIC0yMzQsMTQgKzIzNCwxNCBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAJJ2xpc3RpbmcgdGFncyB3aXRoID8gaW4gdGhlIHBhdHRlcm4gc2hvdWxkIHByaW50IHRob3NlIG1hdGNoaW5nJyAnCiAJZ2l0LXRhZyAtbCAidjEuPy4/IiA+IGFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKID5leHBlY3QKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogCSdsaXN0aW5nIHRhZ3MgdXNpbmcgdi4qIHNob3VsZCBwcmludCBub3RoaW5nIGJlY2F1c2Ugbm9uZSBoYXZlIHYuJyAnCiAJZ2l0LXRhZyAtbCAidi4qIiA+IGFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIGNhdCA+ZXhwZWN0IDw8RU9GCkBAIC0yNTMsNyArMjUzLDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogCSdsaXN0aW5nIHRhZ3MgdXNpbmcgdiogc2hvdWxkIHByaW50IG9ubHkgdGhvc2UgaGF2aW5nIHYnICcKIAlnaXQtdGFnIC1sICJ2KiIgPiBhY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiAjIGNyZWF0aW5nIGFuZCB2ZXJpZnlpbmcgbGlnaHR3ZWlnaHQgdGFnczoKQEAgLTMwMiw3ICszMDIsNyBAQAogCSdjcmVhdGluZyBhbiBhbm5vdGF0ZWQgdGFnIHdpdGggLW0gbWVzc2FnZSBzaG91bGQgc3VjY2VlZCcgJwogCWdpdC10YWcgLW0gIkEgbWVzc2FnZSIgYW5ub3RhdGVkLXRhZyAmJgogCWdldF90YWdfbXNnIGFubm90YXRlZC10YWcgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIGNhdCA+bXNnZmlsZSA8PEVPRgpAQCAtMzE1LDcgKzMxNSw3IEBACiAJJ2NyZWF0aW5nIGFuIGFubm90YXRlZCB0YWcgd2l0aCAtRiBtZXNzYWdlZmlsZSBzaG91bGQgc3VjY2VlZCcgJwogCWdpdC10YWcgLUYgbXNnZmlsZSBmaWxlLWFubm90YXRlZC10YWcgJiYKIAlnZXRfdGFnX21zZyBmaWxlLWFubm90YXRlZC10YWcgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIGNhdCA+aW5wdXRtc2cgPDxFT0YKQEAgLTMyNyw3ICszMjcsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRpbmcgYW4gYW5ub3RhdGVkIHRhZyB3aXRoIC1GIC0gc2hvdWxkIHN1Y2NlZWQnICcKIAlnaXQtdGFnIC1GIC0gc3RkaW4tYW5ub3RhdGVkLXRhZyA8aW5wdXRtc2cgJiYKIAlnZXRfdGFnX21zZyBzdGRpbi1hbm5vdGF0ZWQtdGFnID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKQEAgLTM1OCw3ICszNTgsNyBAQAogCSdjcmVhdGluZyBhIHRhZyB3aXRoIGFuIGVtcHR5IC1tIG1lc3NhZ2Ugc2hvdWxkIHN1Y2NlZWQnICcKIAlnaXQtdGFnIC1tICIiIGVtcHR5LWFubm90YXRlZC10YWcgJiYKIAlnZXRfdGFnX21zZyBlbXB0eS1hbm5vdGF0ZWQtdGFnID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiA+ZW1wdHlmaWxlCkBAIC0zNjcsNyArMzY3LDcgQEAKIAknY3JlYXRpbmcgYSB0YWcgd2l0aCBhbiBlbXB0eSAtRiBtZXNzYWdlZmlsZSBzaG91bGQgc3VjY2VlZCcgJwogCWdpdC10YWcgLUYgZW1wdHlmaWxlIGVtcHR5ZmlsZS1hbm5vdGF0ZWQtdGFnICYmCiAJZ2V0X3RhZ19tc2cgZW1wdHlmaWxlLWFubm90YXRlZC10YWcgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHByaW50ZiAnXG5cbiAgXG5cdFxuTGVhZGluZyBibGFuayBsaW5lc1xuJyA+YmxhbmtzZmlsZQpAQCAtMzg4LDcgKzM4OCw3IEBACiAJJ2V4dHJhIGJsYW5rcyBpbiB0aGUgbWVzc2FnZSBmb3IgYW4gYW5ub3RhdGVkIHRhZyBzaG91bGQgYmUgcmVtb3ZlZCcgJwogCWdpdC10YWcgLUYgYmxhbmtzZmlsZSBibGFua3MtYW5ub3RhdGVkLXRhZyAmJgogCWdldF90YWdfbXNnIGJsYW5rcy1hbm5vdGF0ZWQtdGFnID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiBnZXRfdGFnX2hlYWRlciBibGFuay1hbm5vdGF0ZWQtdGFnICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKQEAgLTM5Niw3ICszOTYsNyBAQAogCSdjcmVhdGluZyBhIHRhZyB3aXRoIGJsYW5rIC1tIG1lc3NhZ2Ugd2l0aCBzcGFjZXMgc2hvdWxkIHN1Y2NlZWQnICcKIAlnaXQtdGFnIC1tICIgICAgICIgYmxhbmstYW5ub3RhdGVkLXRhZyAmJgogCWdldF90YWdfbXNnIGJsYW5rLWFubm90YXRlZC10YWcgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIGVjaG8gJyAgICAgJyA+YmxhbmtmaWxlCkBAIC00MDcsNyArNDA3LDcgQEAKIAknY3JlYXRpbmcgYSB0YWcgd2l0aCBibGFuayAtRiBtZXNzYWdlZmlsZSB3aXRoIHNwYWNlcyBzaG91bGQgc3VjY2VlZCcgJwogCWdpdC10YWcgLUYgYmxhbmtmaWxlIGJsYW5rZmlsZS1hbm5vdGF0ZWQtdGFnICYmCiAJZ2V0X3RhZ19tc2cgYmxhbmtmaWxlLWFubm90YXRlZC10YWcgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHByaW50ZiAnICAgICAgJyA+Ymxhbmtub25sZmlsZQpAQCAtNDE2LDcgKzQxNiw3IEBACiAJJ2NyZWF0aW5nIGEgdGFnIHdpdGggLUYgZmlsZSBvZiBzcGFjZXMgYW5kIG5vIG5ld2xpbmUgc2hvdWxkIHN1Y2NlZWQnICcKIAlnaXQtdGFnIC1GIGJsYW5rbm9ubGZpbGUgYmxhbmtub25sZmlsZS1hbm5vdGF0ZWQtdGFnICYmCiAJZ2V0X3RhZ19tc2cgYmxhbmtub25sZmlsZS1hbm5vdGF0ZWQtdGFnID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiAjIG1lc3NhZ2VzIHdpdGggY29tbWVudGVkIGxpbmVzOgpAQCAtNDUxLDcgKzQ1MSw3IEBACiAJJ2NyZWF0aW5nIGEgdGFnIHVzaW5nIGEgLUYgbWVzc2FnZWZpbGUgd2l0aCAjY29tbWVudHMgc2hvdWxkIHN1Y2NlZWQnICcKIAlnaXQtdGFnIC1GIGNvbW1lbnRzZmlsZSBjb21tZW50cy1hbm5vdGF0ZWQtdGFnICYmCiAJZ2V0X3RhZ19tc2cgY29tbWVudHMtYW5ub3RhdGVkLXRhZyA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogZ2V0X3RhZ19oZWFkZXIgY29tbWVudC1hbm5vdGF0ZWQtdGFnICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKQEAgLTQ1OSw3ICs0NTksNyBAQAogCSdjcmVhdGluZyBhIHRhZyB3aXRoIGEgI2NvbW1lbnQgaW4gdGhlIC1tIG1lc3NhZ2Ugc2hvdWxkIHN1Y2NlZWQnICcKIAlnaXQtdGFnIC1tICIjY29tbWVudCIgY29tbWVudC1hbm5vdGF0ZWQtdGFnICYmCiAJZ2V0X3RhZ19tc2cgY29tbWVudC1hbm5vdGF0ZWQtdGFnID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiBlY2hvICcjY29tbWVudCcgPmNvbW1lbnRmaWxlCkBAIC00NzAsNyArNDcwLDcgQEAKIAknY3JlYXRpbmcgYSB0YWcgd2l0aCAjY29tbWVudHMgaW4gdGhlIC1GIG1lc3NhZ2VmaWxlIHNob3VsZCBzdWNjZWVkJyAnCiAJZ2l0LXRhZyAtRiBjb21tZW50ZmlsZSBjb21tZW50ZmlsZS1hbm5vdGF0ZWQtdGFnICYmCiAJZ2V0X3RhZ19tc2cgY29tbWVudGZpbGUtYW5ub3RhdGVkLXRhZyA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogcHJpbnRmICcjY29tbWVudCcgPmNvbW1lbnRub25sZmlsZQpAQCAtNDc5LDcgKzQ3OSw3IEBACiAJJ2NyZWF0aW5nIGEgdGFnIHdpdGggYSBmaWxlIG9mICNjb21tZW50IGFuZCBubyBuZXdsaW5lIHNob3VsZCBzdWNjZWVkJyAnCiAJZ2l0LXRhZyAtRiBjb21tZW50bm9ubGZpbGUgY29tbWVudG5vbmxmaWxlLWFubm90YXRlZC10YWcgJiYKIAlnZXRfdGFnX21zZyBjb21tZW50bm9ubGZpbGUtYW5ub3RhdGVkLXRhZyA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogIyBsaXN0aW5nIG1lc3NhZ2VzIGZvciBhbm5vdGF0ZWQgbm9uLXNpZ25lZCB0YWdzOgpAQCAtNDkwLDIzICs0OTAsMjMgQEAKIAogCWVjaG8gInRhZy1vbmUtbGluZSIgPmV4cGVjdCAmJgogCWdpdC10YWcgLWwgfCBncmVwICJedGFnLW9uZS1saW5lIiA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC1uMCAtbCB8IGdyZXAgIl50YWctb25lLWxpbmUiID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLW4wIC1sIHRhZy1vbmUtbGluZSA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogCWVjaG8gInRhZy1vbmUtbGluZSAgICBBIG1zZyIgPmV4cGVjdCAmJgogCWdpdC10YWcgLW4xIC1sIHwgZ3JlcCAiXnRhZy1vbmUtbGluZSIgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0LXRhZyAtbiAtbCB8IGdyZXAgIl50YWctb25lLWxpbmUiID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLW4xIC1sIHRhZy1vbmUtbGluZSA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC1uMiAtbCB0YWctb25lLWxpbmUgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0LXRhZyAtbjk5OSAtbCB0YWctb25lLWxpbmUgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXApAQCAtNTE1LDIzICs1MTUsMjMgQEAKIAogCWVjaG8gInRhZy16ZXJvLWxpbmVzIiA+ZXhwZWN0ICYmCiAJZ2l0LXRhZyAtbCB8IGdyZXAgIl50YWctemVyby1saW5lcyIgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0LXRhZyAtbjAgLWwgfCBncmVwICJedGFnLXplcm8tbGluZXMiID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLW4wIC1sIHRhZy16ZXJvLWxpbmVzID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAJZWNobyAidGFnLXplcm8tbGluZXMgICIgPmV4cGVjdCAmJgogCWdpdC10YWcgLW4xIC1sIHwgZ3JlcCAiXnRhZy16ZXJvLWxpbmVzIiA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC1uIC1sIHwgZ3JlcCAiXnRhZy16ZXJvLWxpbmVzIiA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC1uMSAtbCB0YWctemVyby1saW5lcyA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC1uMiAtbCB0YWctemVyby1saW5lcyA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC1uOTk5IC1sIHRhZy16ZXJvLWxpbmVzID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiBlY2hvICd0YWcgbGluZSBvbmUnID5hbm5vdGFnbXNnCkBAIC01NDMsMzkgKzU0MywzOSBAQAogCiAJZWNobyAidGFnLWxpbmVzIiA+ZXhwZWN0ICYmCiAJZ2l0LXRhZyAtbCB8IGdyZXAgIl50YWctbGluZXMiID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLW4wIC1sIHwgZ3JlcCAiXnRhZy1saW5lcyIgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0LXRhZyAtbjAgLWwgdGFnLWxpbmVzID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAJZWNobyAidGFnLWxpbmVzICAgICAgIHRhZyBsaW5lIG9uZSIgPmV4cGVjdCAmJgogCWdpdC10YWcgLW4xIC1sIHwgZ3JlcCAiXnRhZy1saW5lcyIgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0LXRhZyAtbiAtbCB8IGdyZXAgIl50YWctbGluZXMiID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLW4xIC1sIHRhZy1saW5lcyA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogCWVjaG8gIiAgICB0YWcgbGluZSB0d28iID4+ZXhwZWN0ICYmCiAJZ2l0LXRhZyAtbjIgLWwgfCBncmVwICJeICp0YWcubGluZSIgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0LXRhZyAtbjIgLWwgdGFnLWxpbmVzID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAJZWNobyAiICAgIHRhZyBsaW5lIHRocmVlIiA+PmV4cGVjdCAmJgogCWdpdC10YWcgLW4zIC1sIHwgZ3JlcCAiXiAqdGFnLmxpbmUiID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLW4zIC1sIHRhZy1saW5lcyA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC1uNCAtbCB8IGdyZXAgIl4gKnRhZy5saW5lIiA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC1uNCAtbCB0YWctbGluZXMgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0LXRhZyAtbjk5IC1sIHwgZ3JlcCAiXiAqdGFnLmxpbmUiID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLW45OSAtbCB0YWctbGluZXMgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKICMgc3Vic2VxdWVudCB0ZXN0cyByZXF1aXJlIGdwZzsgY2hlY2sgaWYgaXQgaXMgYXZhaWxhYmxlCkBAIC02MjYsNyArNjI2LDggQEAKIAogY3AgLVIgLi4vdDcwMDQgLi9ncGdob21lCiBjaG1vZCAwNzAwIGdwZ2hvbWUKLWV4cG9ydCBHTlVQR0hPTUU9IiQocHdkKS9ncGdob21lIgorR05VUEdIT01FPSIkKHB3ZCkvZ3BnaG9tZSIKK2V4cG9ydCBHTlVQR0hPTUUKIAogZ2V0X3RhZ19oZWFkZXIgc2lnbmVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CiBlY2hvICdBIHNpZ25lZCB0YWcgbWVzc2FnZScgPj5leHBlY3QKQEAgLTYzNCw3ICs2MzUsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRpbmcgYSBzaWduZWQgdGFnIHdpdGggLW0gbWVzc2FnZSBzaG91bGQgc3VjY2VlZCcgJwogCWdpdC10YWcgLXMgLW0gIkEgc2lnbmVkIHRhZyBtZXNzYWdlIiBzaWduZWQtdGFnICYmCiAJZ2V0X3RhZ19tc2cgc2lnbmVkLXRhZyA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogZ2V0X3RhZ19oZWFkZXIgdS1zaWduZWQtdGFnICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKQEAgLTY0NCw3ICs2NDUsNyBAQAogCiAJZ2l0IHRhZyAtdSBjb21taXR0ZXJAZXhhbXBsZS5jb20gLW0gIkFub3RoZXIgbWVzc2FnZSIgdS1zaWduZWQtdGFnICYmCiAJZ2V0X3RhZ19tc2cgdS1zaWduZWQtdGFnID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogCiAnCiAKQEAgLTY3NCw3ICs2NzUsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLXUgaW1wbGllcyBzaWduZWQgdGFnJyAnCiAJR0lUX0VESVRPUj0uL2Zha2VlZGl0b3IgZ2l0LXRhZyAtdSBDRERFNDMwRCBpbXBsaWVkLXNpZ24gJiYKIAlnZXRfdGFnX21zZyBpbXBsaWVkLXNpZ24gPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIGNhdCA+c2lnbXNnZmlsZSA8PEVPRgpAQCAtNjg4LDcgKzY4OSw3IEBACiAJJ2NyZWF0aW5nIGEgc2lnbmVkIHRhZyB3aXRoIC1GIG1lc3NhZ2VmaWxlIHNob3VsZCBzdWNjZWVkJyAnCiAJZ2l0LXRhZyAtcyAtRiBzaWdtc2dmaWxlIGZpbGUtc2lnbmVkLXRhZyAmJgogCWdldF90YWdfbXNnIGZpbGUtc2lnbmVkLXRhZyA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogY2F0ID5zaWdpbnB1dG1zZyA8PEVPRgpAQCAtNzAxLDcgKzcwMiw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGluZyBhIHNpZ25lZCB0YWcgd2l0aCAtRiAtIHNob3VsZCBzdWNjZWVkJyAnCiAJZ2l0LXRhZyAtcyAtRiAtIHN0ZGluLXNpZ25lZC10YWcgPHNpZ2lucHV0bXNnICYmCiAJZ2V0X3RhZ19tc2cgc3RkaW4tc2lnbmVkLXRhZyA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogZ2V0X3RhZ19oZWFkZXIgaW1wbGllZC1hbm5vdGF0ZSAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CkBAIC03MTAsNyArNzExLDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJy1zIGltcGxpZXMgYW5ub3RhdGVkIHRhZycgJwogCUdJVF9FRElUT1I9Li9mYWtlZWRpdG9yIGdpdC10YWcgLXMgaW1wbGllZC1hbm5vdGF0ZSAmJgogCWdldF90YWdfbXNnIGltcGxpZWQtYW5ub3RhdGUgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXApAQCAtNzUxLDcgKzc1Miw3IEBACiAJJ2NyZWF0aW5nIGEgc2lnbmVkIHRhZyB3aXRoIGFuIGVtcHR5IC1tIG1lc3NhZ2Ugc2hvdWxkIHN1Y2NlZWQnICcKIAlnaXQtdGFnIC1zIC1tICIiIGVtcHR5LXNpZ25lZC10YWcgJiYKIAlnZXRfdGFnX21zZyBlbXB0eS1zaWduZWQtdGFnID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLXYgZW1wdHktc2lnbmVkLXRhZwogJwogCkBAIC03NjIsNyArNzYzLDcgQEAKIAknY3JlYXRpbmcgYSBzaWduZWQgdGFnIHdpdGggYW4gZW1wdHkgLUYgbWVzc2FnZWZpbGUgc2hvdWxkIHN1Y2NlZWQnICcKIAlnaXQtdGFnIC1zIC1GIHNpZ2VtcHR5ZmlsZSBlbXB0eWZpbGUtc2lnbmVkLXRhZyAmJgogCWdldF90YWdfbXNnIGVtcHR5ZmlsZS1zaWduZWQtdGFnID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLXYgZW1wdHlmaWxlLXNpZ25lZC10YWcKICcKIApAQCAtNzg1LDcgKzc4Niw3IEBACiAJJ2V4dHJhIGJsYW5rcyBpbiB0aGUgbWVzc2FnZSBmb3IgYSBzaWduZWQgdGFnIHNob3VsZCBiZSByZW1vdmVkJyAnCiAJZ2l0LXRhZyAtcyAtRiBzaWdibGFua3NmaWxlIGJsYW5rcy1zaWduZWQtdGFnICYmCiAJZ2V0X3RhZ19tc2cgYmxhbmtzLXNpZ25lZC10YWcgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0LXRhZyAtdiBibGFua3Mtc2lnbmVkLXRhZwogJwogCkBAIC03OTUsNyArNzk2LDcgQEAKIAknY3JlYXRpbmcgYSBzaWduZWQgdGFnIHdpdGggYSBibGFuayAtbSBtZXNzYWdlIHNob3VsZCBzdWNjZWVkJyAnCiAJZ2l0LXRhZyAtcyAtbSAiICAgICAiIGJsYW5rLXNpZ25lZC10YWcgJiYKIAlnZXRfdGFnX21zZyBibGFuay1zaWduZWQtdGFnID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLXYgYmxhbmstc2lnbmVkLXRhZwogJwogCkBAIC04MDgsNyArODA5LDcgQEAKIAknY3JlYXRpbmcgYSBzaWduZWQgdGFnIHdpdGggYmxhbmsgLUYgZmlsZSB3aXRoIHNwYWNlcyBzaG91bGQgc3VjY2VlZCcgJwogCWdpdC10YWcgLXMgLUYgc2lnYmxhbmtmaWxlIGJsYW5rZmlsZS1zaWduZWQtdGFnICYmCiAJZ2V0X3RhZ19tc2cgYmxhbmtmaWxlLXNpZ25lZC10YWcgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0LXRhZyAtdiBibGFua2ZpbGUtc2lnbmVkLXRhZwogJwogCkBAIC04MTksNyArODIwLDcgQEAKIAknY3JlYXRpbmcgYSBzaWduZWQgdGFnIHdpdGggc3BhY2VzIGFuZCBubyBuZXdsaW5lIHNob3VsZCBzdWNjZWVkJyAnCiAJZ2l0LXRhZyAtcyAtRiBzaWdibGFua25vbmxmaWxlIGJsYW5rbm9ubGZpbGUtc2lnbmVkLXRhZyAmJgogCWdldF90YWdfbXNnIGJsYW5rbm9ubGZpbGUtc2lnbmVkLXRhZyA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC12IHNpZ25lZC10YWcKICcKIApAQCAtODU2LDcgKzg1Nyw3IEBACiAJJ2NyZWF0aW5nIGEgc2lnbmVkIHRhZyB3aXRoIGEgLUYgZmlsZSB3aXRoICNjb21tZW50cyBzaG91bGQgc3VjY2VlZCcgJwogCWdpdC10YWcgLXMgLUYgc2lnY29tbWVudHNmaWxlIGNvbW1lbnRzLXNpZ25lZC10YWcgJiYKIAlnZXRfdGFnX21zZyBjb21tZW50cy1zaWduZWQtdGFnID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLXYgY29tbWVudHMtc2lnbmVkLXRhZwogJwogCkBAIC04NjYsNyArODY3LDcgQEAKIAknY3JlYXRpbmcgYSBzaWduZWQgdGFnIHdpdGggI2NvbW1lbnRlZCAtbSBtZXNzYWdlIHNob3VsZCBzdWNjZWVkJyAnCiAJZ2l0LXRhZyAtcyAtbSAiI2NvbW1lbnQiIGNvbW1lbnQtc2lnbmVkLXRhZyAmJgogCWdldF90YWdfbXNnIGNvbW1lbnQtc2lnbmVkLXRhZyA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC12IGNvbW1lbnQtc2lnbmVkLXRhZwogJwogCkBAIC04NzksNyArODgwLDcgQEAKIAknY3JlYXRpbmcgYSBzaWduZWQgdGFnIHdpdGggI2NvbW1lbnRlZCAtRiBtZXNzYWdlZmlsZSBzaG91bGQgc3VjY2VlZCcgJwogCWdpdC10YWcgLXMgLUYgc2lnY29tbWVudGZpbGUgY29tbWVudGZpbGUtc2lnbmVkLXRhZyAmJgogCWdldF90YWdfbXNnIGNvbW1lbnRmaWxlLXNpZ25lZC10YWcgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0LXRhZyAtdiBjb21tZW50ZmlsZS1zaWduZWQtdGFnCiAnCiAKQEAgLTg5MCw3ICs4OTEsNyBAQAogCSdjcmVhdGluZyBhIHNpZ25lZCB0YWcgd2l0aCBhICNjb21tZW50IGFuZCBubyBuZXdsaW5lIHNob3VsZCBzdWNjZWVkJyAnCiAJZ2l0LXRhZyAtcyAtRiBzaWdjb21tZW50bm9ubGZpbGUgY29tbWVudG5vbmxmaWxlLXNpZ25lZC10YWcgJiYKIAlnZXRfdGFnX21zZyBjb21tZW50bm9ubGZpbGUtc2lnbmVkLXRhZyA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC12IGNvbW1lbnRub25sZmlsZS1zaWduZWQtdGFnCiAnCiAKQEAgLTkwMiwyMyArOTAzLDIzIEBACiAKIAllY2hvICJzdGFnLW9uZS1saW5lIiA+ZXhwZWN0ICYmCiAJZ2l0LXRhZyAtbCB8IGdyZXAgIl5zdGFnLW9uZS1saW5lIiA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC1uMCAtbCB8IGdyZXAgIl5zdGFnLW9uZS1saW5lIiA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC1uMCAtbCBzdGFnLW9uZS1saW5lID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAJZWNobyAic3RhZy1vbmUtbGluZSAgIEEgbWVzc2FnZSBsaW5lIHNpZ25lZCIgPmV4cGVjdCAmJgogCWdpdC10YWcgLW4xIC1sIHwgZ3JlcCAiXnN0YWctb25lLWxpbmUiID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLW4gLWwgfCBncmVwICJec3RhZy1vbmUtbGluZSIgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0LXRhZyAtbjEgLWwgc3RhZy1vbmUtbGluZSA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC1uMiAtbCBzdGFnLW9uZS1saW5lID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLW45OTkgLWwgc3RhZy1vbmUtbGluZSA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCkBAIC05MjcsMjMgKzkyOCwyMyBAQAogCiAJZWNobyAic3RhZy16ZXJvLWxpbmVzIiA+ZXhwZWN0ICYmCiAJZ2l0LXRhZyAtbCB8IGdyZXAgIl5zdGFnLXplcm8tbGluZXMiID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLW4wIC1sIHwgZ3JlcCAiXnN0YWctemVyby1saW5lcyIgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0LXRhZyAtbjAgLWwgc3RhZy16ZXJvLWxpbmVzID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAJZWNobyAic3RhZy16ZXJvLWxpbmVzICIgPmV4cGVjdCAmJgogCWdpdC10YWcgLW4xIC1sIHwgZ3JlcCAiXnN0YWctemVyby1saW5lcyIgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0LXRhZyAtbiAtbCB8IGdyZXAgIl5zdGFnLXplcm8tbGluZXMiID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLW4xIC1sIHN0YWctemVyby1saW5lcyA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC1uMiAtbCBzdGFnLXplcm8tbGluZXMgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0LXRhZyAtbjk5OSAtbCBzdGFnLXplcm8tbGluZXMgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIGVjaG8gJ3N0YWcgbGluZSBvbmUnID5zaWd0YWdtc2cKQEAgLTk1NSwzOSArOTU2LDM5IEBACiAKIAllY2hvICJzdGFnLWxpbmVzIiA+ZXhwZWN0ICYmCiAJZ2l0LXRhZyAtbCB8IGdyZXAgIl5zdGFnLWxpbmVzIiA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC1uMCAtbCB8IGdyZXAgIl5zdGFnLWxpbmVzIiA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC1uMCAtbCBzdGFnLWxpbmVzID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAJZWNobyAic3RhZy1saW5lcyAgICAgIHN0YWcgbGluZSBvbmUiID5leHBlY3QgJiYKIAlnaXQtdGFnIC1uMSAtbCB8IGdyZXAgIl5zdGFnLWxpbmVzIiA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC1uIC1sIHwgZ3JlcCAiXnN0YWctbGluZXMiID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLW4xIC1sIHN0YWctbGluZXMgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKIAllY2hvICIgICAgc3RhZyBsaW5lIHR3byIgPj5leHBlY3QgJiYKIAlnaXQtdGFnIC1uMiAtbCB8IGdyZXAgIl4gKnN0YWcubGluZSIgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0LXRhZyAtbjIgLWwgc3RhZy1saW5lcyA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogCWVjaG8gIiAgICBzdGFnIGxpbmUgdGhyZWUiID4+ZXhwZWN0ICYmCiAJZ2l0LXRhZyAtbjMgLWwgfCBncmVwICJeICpzdGFnLmxpbmUiID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLW4zIC1sIHN0YWctbGluZXMgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0LXRhZyAtbjQgLWwgfCBncmVwICJeICpzdGFnLmxpbmUiID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLW40IC1sIHN0YWctbGluZXMgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0LXRhZyAtbjk5IC1sIHwgZ3JlcCAiXiAqc3RhZy5saW5lIiA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC1uOTkgLWwgc3RhZy1saW5lcyA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogIyB0YWdzIHBvaW50aW5nIHRvIG9iamVjdHMgZGlmZmVyZW50IGZyb20gY29tbWl0czoKQEAgLTEwMDMsNyArMTAwNCw3IEBACiAJJ2NyZWF0aW5nIGEgc2lnbmVkIHRhZyBwb2ludGluZyB0byBhIHRyZWUgc2hvdWxkIHN1Y2NlZWQnICcKIAlnaXQtdGFnIC1zIC1tICJBIG1lc3NhZ2UgZm9yIGEgdHJlZSIgdHJlZS1zaWduZWQtdGFnIEhFQURee3RyZWV9ICYmCiAJZ2V0X3RhZ19tc2cgdHJlZS1zaWduZWQtdGFnID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiBnZXRfdGFnX2hlYWRlciBibG9iLXNpZ25lZC10YWcgJGJsb2IgYmxvYiAkdGltZSA+ZXhwZWN0CkBAIC0xMDEzLDcgKzEwMTQsNyBAQAogCSdjcmVhdGluZyBhIHNpZ25lZCB0YWcgcG9pbnRpbmcgdG8gYSBibG9iIHNob3VsZCBzdWNjZWVkJyAnCiAJZ2l0LXRhZyAtcyAtbSAiQSBtZXNzYWdlIGZvciBhIGJsb2IiIGJsb2Itc2lnbmVkLXRhZyBIRUFEOmZvbyAmJgogCWdldF90YWdfbXNnIGJsb2Itc2lnbmVkLXRhZyA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogZ2V0X3RhZ19oZWFkZXIgdGFnLXNpZ25lZC10YWcgJHRhZyB0YWcgJHRpbWUgPmV4cGVjdApAQCAtMTAyMyw3ICsxMDI0LDcgQEAKIAknY3JlYXRpbmcgYSBzaWduZWQgdGFnIHBvaW50aW5nIHRvIGFub3RoZXIgdGFnIHNob3VsZCBzdWNjZWVkJyAnCiAJZ2l0LXRhZyAtcyAtbSAiQSBtZXNzYWdlIGZvciBhbm90aGVyIHRhZyIgdGFnLXNpZ25lZC10YWcgc2lnbmVkLXRhZyAmJgogCWdldF90YWdfbXNnIHRhZy1zaWduZWQtdGFnID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiAjIHRyeSB0byBzaWduIHdpdGggYmFkIHVzZXIuc2lnbmluZ2tleQpAQCAtMTA2Myw3ICsxMDY0LDI3IEBACiAJZ2l0IHRhZyAtYSAtbSAiQW4gYW5ub3RhdGlvbiB0byBiZSByZXVzZWQiIHJldXNlICYmCiAJR0lUX0VESVRPUj10cnVlIGdpdCB0YWcgLWYgLWEgcmV1c2UgJiYKIAlnZXRfdGFnX21zZyByZXVzZSA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZW5hbWUgZm9yIHRoZSBtZXNzYWdlIGlzIHJlbGF0aXZlIHRvIGN3ZCcgJworCW1rZGlyIHN1YmRpciAmJgorCWVjaG8gIlRhZyBtZXNzYWdlIGluIHRvcCBkaXJlY3RvcnkiID5tc2dmaWxlLTUgJiYKKwllY2hvICJUYWcgbWVzc2FnZSBpbiBzdWIgZGlyZWN0b3J5IiA+c3ViZGlyL21zZ2ZpbGUtNSAmJgorCSgKKwkJY2Qgc3ViZGlyICYmCisJCWdpdCB0YWcgLWEgLUYgbXNnZmlsZS01IHRhZy1mcm9tLXN1YmRpcgorCSkgJiYKKwlnaXQgY2F0LWZpbGUgdGFnIHRhZy1mcm9tLXN1YmRpciB8IGdyZXAgImluIHN1YiBkaXJlY3RvcnkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGVuYW1lIGZvciB0aGUgbWVzc2FnZSBpcyByZWxhdGl2ZSB0byBjd2QnICcKKwllY2hvICJUYWcgbWVzc2FnZSBpbiBzdWIgZGlyZWN0b3J5IiA+c3ViZGlyL21zZ2ZpbGUtNiAmJgorCSgKKwkJY2Qgc3ViZGlyICYmCisJCWdpdCB0YWcgLWEgLUYgbXNnZmlsZS02IHRhZy1mcm9tLXN1YmRpci0yCisJKSAmJgorCWdpdCBjYXQtZmlsZSB0YWcgdGFnLWZyb20tc3ViZGlyLTIgfCBncmVwICJpbiBzdWIgZGlyZWN0b3J5IgogJwogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcwMTAtc2V0dXAuc2ggYi90L3Q3MDEwLXNldHVwLnNoCmluZGV4IDAyY2Y3YzUuLmQ4YTdjNzkgMTAwNzU1Ci0tLSBhL3QvdDcwMTAtc2V0dXAuc2gKKysrIGIvdC90NzAxMC1zZXR1cC5zaApAQCAtMTIyLDcgKzEyMiw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyB1c2luZyBhYnNvbHV0ZSBwYXRoIG5hbWVzJyAnCiAJZWNobyBiYiA+PmEvYi9jL2QgJiYKLQlnaXQgY29tbWl0IC1tICJiYiIgJChwd2QpL2EvYi9jL2QgJiYKKwlnaXQgY29tbWl0IC1tICJiYiIgIiQocHdkKS9hL2IvYy9kIiAmJgogCiAJZ2l0IGxvZyBhL2IvYy9kID5mMS50eHQgJiYKIAlnaXQgbG9nICIkKHB3ZCkvYS9iL2MvZCIgPmYyLnR4dCAmJgpkaWZmIC0tZ2l0IGEvdC90NzEwMi1yZXNldC5zaCBiL3QvdDcxMDItcmVzZXQuc2gKaW5kZXggZTVjOWYzMC4uOTZkMTUwOCAxMDA3NTUKLS0tIGEvdC90NzEwMi1yZXNldC5zaAorKysgYi90L3Q3MTAyLXJlc2V0LnNoCkBAIC0zNCwxMyArMzQsMTMgQEAKIAogY2hlY2tfY2hhbmdlcyAoKSB7CiAJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiA9ICIkMSIgJiYKLQlnaXQgZGlmZiB8IGdpdCBkaWZmIC5kaWZmX2V4cGVjdCAtICYmCi0JZ2l0IGRpZmYgLS1jYWNoZWQgfCBnaXQgZGlmZiAuY2FjaGVkX2V4cGVjdCAtICYmCisJZ2l0IGRpZmYgfCB0ZXN0X2NtcCAuZGlmZl9leHBlY3QgLSAmJgorCWdpdCBkaWZmIC0tY2FjaGVkIHwgdGVzdF9jbXAgLmNhY2hlZF9leHBlY3QgLSAmJgogCWZvciBGSUxFIGluICoKIAlkbwogCQllY2hvICRGSUxFJzonCiAJCWNhdCAkRklMRSB8fCByZXR1cm4KLQlkb25lIHwgZ2l0IGRpZmYgLmNhdF9leHBlY3QgLQorCWRvbmUgfCB0ZXN0X2NtcCAuY2F0X2V4cGVjdCAtCiB9CiAKID4uZGlmZl9leHBlY3QKQEAgLTM5MCw5ICszOTAsOSBAQAogCWdpdCBhZGQgZmlsZTEgZmlsZTMgZmlsZTQgJiYKIAkhIGdpdCByZXNldCBIRUFEIC0tIGZpbGUxIGZpbGUyIGZpbGUzICYmCiAJZ2l0IGRpZmYgPiBvdXRwdXQgJiYKLQlnaXQgZGlmZiBvdXRwdXQgZXhwZWN0ICYmCisJdGVzdF9jbXAgb3V0cHV0IGV4cGVjdCAmJgogCWdpdCBkaWZmIC0tY2FjaGVkID4gb3V0cHV0ICYmCi0JZ2l0IGRpZmYgb3V0cHV0IGNhY2hlZF9leHBlY3QKKwl0ZXN0X2NtcCBvdXRwdXQgY2FjaGVkX2V4cGVjdAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHJlc2V0dGluZyB0aGUgaW5kZXggYXQgZ2l2ZSBwYXRocycgJwpAQCAtNDI1LDcgKzQyNSw1NCBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1taXhlZCByZWZyZXNoZXMgdGhlIGluZGV4JyAnCiAJZWNobyAxMjMgPj4gZmlsZTIgJiYKIAlnaXQgcmVzZXQgLS1taXhlZCBIRUFEID4gb3V0cHV0ICYmCi0JZ2l0IGRpZmYgLS1leGl0LWNvZGUgZXhwZWN0IG91dHB1dAorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlzYW1iaWd1YXRpb24gKDEpJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJPnNlY29uZGZpbGUgJiYKKwlnaXQgYWRkIHNlY29uZGZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgc2Vjb25kZmlsZSAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYgLS1jYWNoZWQgLS1uYW1lLW9ubHkpIiAmJgorCXRlc3QgLWYgc2Vjb25kZmlsZSAmJgorCXRlc3QgISAtcyBzZWNvbmRmaWxlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlzYW1iaWd1YXRpb24gKDIpJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJPnNlY29uZGZpbGUgJiYKKwlnaXQgYWRkIHNlY29uZGZpbGUgJiYKKwlybSAtZiBzZWNvbmRmaWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IHNlY29uZGZpbGUgJiYKKwl0ZXN0IC1uICIkKGdpdCBkaWZmIC0tY2FjaGVkIC0tbmFtZS1vbmx5IC0tIHNlY29uZGZpbGUpIiAmJgorCXRlc3QgISAtZiBzZWNvbmRmaWxlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlzYW1iaWd1YXRpb24gKDMpJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJPnNlY29uZGZpbGUgJiYKKwlnaXQgYWRkIHNlY29uZGZpbGUgJiYKKwlybSAtZiBzZWNvbmRmaWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IEhFQUQgc2Vjb25kZmlsZSAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYgLS1jYWNoZWQgLS1uYW1lLW9ubHkpIiAmJgorCXRlc3QgISAtZiBzZWNvbmRmaWxlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlzYW1iaWd1YXRpb24gKDQpJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJPnNlY29uZGZpbGUgJiYKKwlnaXQgYWRkIHNlY29uZGZpbGUgJiYKKwlybSAtZiBzZWNvbmRmaWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0tIHNlY29uZGZpbGUgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmIC0tY2FjaGVkIC0tbmFtZS1vbmx5KSIgJiYKKwl0ZXN0ICEgLWYgc2Vjb25kZmlsZQogJwogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDczMDAtY2xlYW4uc2ggYi90L3Q3MzAwLWNsZWFuLnNoCmluZGV4IGE1MDQ5MmYuLmJkNzcyMzkgMTAwNzU1Ci0tLSBhL3QvdDczMDAtY2xlYW4uc2gKKysrIGIvdC90NzMwMC1jbGVhbi5zaApAQCAtMTEyLDcgKzExMiw3IEBACiAJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgogCXdvdWxkX2NsZWFuPSQoCiAJCWNkIGRvY3MgJiYKLQkJZ2l0IGNsZWFuIC1uICQocHdkKS8uLi9zcmMgfAorCQlnaXQgY2xlYW4gLW4gIiQocHdkKS8uLi9zcmMiIHwKIAkJc2VkIC1uIC1lICJzfF5Xb3VsZCByZW1vdmUgfHxwIgogCSkgJiYKIAl0ZXN0ICIkd291bGRfY2xlYW4iID0gLi4vc3JjL3BhcnQzLmMgfHwgewpkaWZmIC0tZ2l0IGEvdC90NzQwMC1zdWJtb2R1bGUtYmFzaWMuc2ggYi90L3Q3NDAwLXN1Ym1vZHVsZS1iYXNpYy5zaAppbmRleCAyZWY4NWE4Li42YzdiOTAyIDEwMDc1NQotLS0gYS90L3Q3NDAwLXN1Ym1vZHVsZS1iYXNpYy5zaAorKysgYi90L3Q3NDAwLXN1Ym1vZHVsZS1iYXNpYy5zaApAQCAtMTk2LDQgKzE5NiwxNyBAQAogCXRlc3QgLXogIiREIgogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgLS1pbml0JyAnCisKKwltdiBpbml0IGluaXQyICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuZXhhbXBsZS51cmwgIiQocHdkKS9pbml0MiIgJiYKKwlnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLmV4YW1wbGUKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSBpbml0ID4gdXBkYXRlLm91dCAmJgorCWdyZXAgIm5vdCBpbml0aWFsaXplZCIgdXBkYXRlLm91dCAmJgorCXRlc3QgISAtZCBpbml0Ly5naXQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgaW5pdCAmJgorCXRlc3QgLWQgaW5pdC8uZ2l0CisKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NDAxLXN1Ym1vZHVsZS1zdW1tYXJ5LnNoIGIvdC90NzQwMS1zdWJtb2R1bGUtc3VtbWFyeS5zaAppbmRleCBiOWEyMjE5Li5iZjEyZGJkIDEwMDc1NQotLS0gYS90L3Q3NDAxLXN1Ym1vZHVsZS1zdW1tYXJ5LnNoCisrKyBiL3QvdDc0MDEtc3VibW9kdWxlLXN1bW1hcnkuc2gKQEAgLTE5Miw0ICsxOTIsMTcgQEAKIEVPRgogIgogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWZvci1zdGF0dXMnICIKKyAgICBnaXQgc3VibW9kdWxlIHN1bW1hcnkgLS1mb3Itc3RhdHVzIEhFQUReID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBhY3R1YWwgLSA8PEVPRgorIyBNb2RpZmllZCBzdWJtb2R1bGVzOgorIworIyAqIHNtMSAkaGVhZDYuLi4wMDAwMDAwOgorIworIyAqIHNtMiAwMDAwMDAwLi4uJGhlYWQ3ICgyKToKKyMgICA+IEFkZCBmb285CisjCitFT0YKKyIKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NDAyLXN1Ym1vZHVsZS1yZWJhc2Uuc2ggYi90L3Q3NDAyLXN1Ym1vZHVsZS1yZWJhc2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWJlY2IzZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc0MDItc3VibW9kdWxlLXJlYmFzZS5zaApAQCAtMCwwICsxLDkyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IEpvaGFubmVzIFNjaGluZGVsaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCByZWJhc2luZyBhbmQgc3Rhc2hpbmcgd2l0aCBkaXJ0eSBzdWJtb2R1bGVzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwllY2hvIGZpbGUgPiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IGNsb25lIC4gc3VibW9kdWxlICYmCisJZ2l0IGFkZCBzdWJtb2R1bGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHN1Ym1vZHVsZSAmJgorCWVjaG8gc2Vjb25kIGxpbmUgPj4gZmlsZSAmJgorCShjZCBzdWJtb2R1bGUgJiYgZ2l0IHB1bGwpICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBmaWxlLWFuZC1zdWJtb2R1bGUgLWEKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2Ugd2l0aCBhIGRpcnR5IHN1Ym1vZHVsZScgJworCisJKGNkIHN1Ym1vZHVsZSAmJgorCSBlY2hvIDNyZCBsaW5lID4+IGZpbGUgJiYKKwkgdGVzdF90aWNrICYmCisJIGdpdCBjb21taXQgLW0gZm9yayAtYSkgJiYKKwllY2hvIHVucmVsYXRlZCA+PiBmaWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHVucmVsYXRlZCBmaWxlMiAmJgorCWVjaG8gb3RoZXIgbGluZSA+PiBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSB1cGRhdGUgZmlsZSAmJgorCUNVUlJFTlQ9JChjZCBzdWJtb2R1bGUgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCUVYUEVDVEVEPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjI6c3VibW9kdWxlKSAmJgorCUdJVF9UUkFDRT0xIGdpdCByZWJhc2UgLS1vbnRvIEhFQUR+MiBIRUFEXiAmJgorCVNUT1JFRD0kKGdpdCByZXYtcGFyc2UgSEVBRDpzdWJtb2R1bGUpICYmCisJdGVzdCAkRVhQRUNURUQgPSAkU1RPUkVEICYmCisJdGVzdCAkQ1VSUkVOVCA9ICQoY2Qgc3VibW9kdWxlICYmIGdpdCByZXYtcGFyc2UgSEVBRCkKKworJworCitjYXQgPiBmYWtlLWVkaXRvci5zaCA8PCBcRU9GCisjIS9iaW4vc2gKK2VjaG8gJEVESVRPUl9URVhUCitFT0YKK2NobW9kIGEreCBmYWtlLWVkaXRvci5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlcmFjdGl2ZSByZWJhc2Ugd2l0aCBhIGRpcnR5IHN1Ym1vZHVsZScgJworCisJdGVzdCBzdWJtb2R1bGUgPSAkKGdpdCBkaWZmIC0tbmFtZS1vbmx5KSAmJgorCUhFQUQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJR0lUX0VESVRPUj0iXCIkKHB3ZCkvZmFrZS1lZGl0b3Iuc2hcIiIgRURJVE9SX1RFWFQ9InBpY2sgJEhFQUQiIFwKKwkJZ2l0IHJlYmFzZSAtaSBIRUFEXiAmJgorCXRlc3Qgc3VibW9kdWxlID0gJChnaXQgZGlmZiAtLW5hbWUtb25seSkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2Ugd2l0aCBkaXJ0eSBmaWxlIGFuZCBzdWJtb2R1bGUgZmFpbHMnICcKKworCWVjaG8geWV0IGFub3RoZXIgbGluZSA+PiBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBuZXh0IGZpbGUgJiYKKwllY2hvIHJld3JpdGUgPiBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSByZXdyaXRlIGZpbGUgJiYKKwllY2hvIGRpcnR5ID4gZmlsZSAmJgorCSEgZ2l0IHJlYmFzZSAtLW9udG8gSEVBRH4yIEhFQUReCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggd2l0aCBhIGRpcnR5IHN1Ym1vZHVsZScgJworCisJZWNobyBuZXcgPiBmaWxlICYmCisJQ1VSUkVOVD0kKGNkIHN1Ym1vZHVsZSAmJiBnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IHN0YXNoICYmCisJdGVzdCBuZXcgIT0gJChjYXQgZmlsZSkgJiYKKwl0ZXN0IHN1Ym1vZHVsZSA9ICQoZ2l0IGRpZmYgLS1uYW1lLW9ubHkpICYmCisJdGVzdCAkQ1VSUkVOVCA9ICQoY2Qgc3VibW9kdWxlICYmIGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgc3Rhc2ggYXBwbHkgJiYKKwl0ZXN0IG5ldyA9ICQoY2F0IGZpbGUpICYmCisJdGVzdCAkQ1VSUkVOVCA9ICQoY2Qgc3VibW9kdWxlICYmIGdpdCByZXYtcGFyc2UgSEVBRCkKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc1MDAtY29tbWl0LnNoIGIvdC90NzUwMC1jb21taXQuc2gKaW5kZXggYmFlZDZjZS4uODIzMjU2YSAxMDA3NTUKLS0tIGEvdC90NzUwMC1jb21taXQuc2gKKysrIGIvdC90NzUwMC1jb21taXQuc2gKQEAgLTEzOCw0ICsxMzgsMzMgQEAKIAlkaWZmIGV4cGVjdCBvdXRwdXQKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IG1lc3NhZ2UgZnJvbSBmaWxlICgxKScgJworCW1rZGlyIHN1YmRpciAmJgorCWVjaG8gIkxvZyBpbiB0b3AgZGlyZWN0b3J5IiA+bG9nICYmCisJZWNobyAiTG9nIGluIHN1YiBkaXJlY3RvcnkiID5zdWJkaXIvbG9nICYmCisJKAorCQljZCBzdWJkaXIgJiYKKwkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1GIGxvZworCSkgJiYKKwljb21taXRfbXNnX2lzICJMb2cgaW4gc3ViIGRpcmVjdG9yeSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IG1lc3NhZ2UgZnJvbSBmaWxlICgyKScgJworCXJtIC1mIGxvZyAmJgorCWVjaG8gIkxvZyBpbiBzdWIgZGlyZWN0b3J5IiA+c3ViZGlyL2xvZyAmJgorCSgKKwkJY2Qgc3ViZGlyICYmCisJCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtRiBsb2cKKwkpICYmCisJY29tbWl0X21zZ19pcyAiTG9nIGluIHN1YiBkaXJlY3RvcnkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBtZXNzYWdlIGZyb20gc3RkaW4nICcKKwkoCisJCWNkIHN1YmRpciAmJgorCQllY2hvICJMb2cgd2l0aCBmb28gd29yZCIgfCBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLUYgLQorCSkgJiYKKwljb21taXRfbXNnX2lzICJMb2cgd2l0aCBmb28gd29yZCIKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NTAxLWNvbW1pdC5zaCBiL3QvdDc1MDEtY29tbWl0LnNoCmluZGV4IGMwMjg4ZjMuLmQzMzcwZmYgMTAwNzU1Ci0tLSBhL3QvdDc1MDEtY29tbWl0LnNoCisrKyBiL3QvdDc1MDEtY29tbWl0LnNoCkBAIC00MSw3ICs0MSw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKIAkidXNpbmcgcGF0aHMgd2l0aCAtLWludGVyYWN0aXZlIiBcCiAJImVjaG8gYm9uZy1vLWJvbmcgPmZpbGUgJiYKLQkhIGVjaG8gNyB8IGdpdC1jb21taXQgLW0gZm9vIC0taW50ZXJhY3RpdmUgZmlsZSIKKwkhIChlY2hvIDcgfCBnaXQtY29tbWl0IC1tIGZvbyAtLWludGVyYWN0aXZlIGZpbGUpIgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKIAkidXNpbmcgaW52YWxpZCBjb21taXQgd2l0aCAtQyIgXApAQCAtNzksOCArNzksOCBAQAogCiBjYXQgPmVkaXRvciA8PFxFT0YKICMhL2Jpbi9zaAotc2VkIC1lICJzL2EgZmlsZS9hbiBhbWVuZCBjb21taXQvZyIgPCAkMSA+ICQxLQotbXYgJDEtICQxCitzZWQgLWUgInMvYSBmaWxlL2FuIGFtZW5kIGNvbW1pdC9nIiA8ICIkMSIgPiAiJDEtIgorbXYgIiQxLSIgIiQxIgogRU9GCiBjaG1vZCA3NTUgZWRpdG9yCiAKQEAgLTk5LDggKzk5LDggQEAKIAogY2F0ID5lZGl0b3IgPDxcRU9GCiAjIS9iaW4vc2gKLXNlZCAtZSAicy9hbWVuZC9vbGRlci9nIiAgPCAkMSA+ICQxLQotbXYgJDEtICQxCitzZWQgLWUgInMvYW1lbmQvb2xkZXIvZyIgIDwgIiQxIiA+ICIkMS0iCittdiAiJDEtIiAiJDEiCiBFT0YKIGNobW9kIDc1NSBlZGl0b3IKIApkaWZmIC0tZ2l0IGEvdC90NzUwMi1jb21taXQuc2ggYi90L3Q3NTAyLWNvbW1pdC5zaAppbmRleCAyODRjOTQxLi5jMjVlZmY5IDEwMDc1NQotLS0gYS90L3Q3NTAyLWNvbW1pdC5zaAorKysgYi90L3Q3NTAyLWNvbW1pdC5zaApAQCAtMTU0LDYgKzE1NCwzOCBAQAogCiAnCiAKK2VjaG8gIiMKKyMgQXV0aG9yOiAgICAkR0lUX0FVVEhPUl9OQU1FIDwkR0lUX0FVVEhPUl9FTUFJTD4KKyMiID4+IGV4cGVjdAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRob3IgZGlmZmVyZW50IGZyb20gY29tbWl0dGVyJyAnCisKKwllY2hvID4+bmVnYXRpdmUgJiYKKwlnaXQgY29tbWl0IC1lIC1tICJzYW1wbGUiCisJaGVhZCAtbiA3IC5naXQvQ09NTUlUX0VESVRNU0cgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworbXYgZXhwZWN0IGV4cGVjdC50bXAKK3NlZCAnJGQnIDwgZXhwZWN0LnRtcCA+IGV4cGVjdAorcm0gLWYgZXhwZWN0LnRtcAorZWNobyAiIyBDb21taXR0ZXI6CisjIiA+PiBleHBlY3QKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0dGVyIGlzIGF1dG9tYXRpYycgJworCisJZWNobyA+Pm5lZ2F0aXZlICYmCisJKAorCQl1bnNldCBHSVRfQ09NTUlUVEVSX0VNQUlMCisJCXVuc2V0IEdJVF9DT01NSVRURVJfTkFNRQorCQkjIG11c3QgZmFpbCBiZWNhdXNlIHRoZXJlIGlzIG5vIGNoYW5nZQorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1lIC1tICJzYW1wbGUiCisJKSAmJgorCWhlYWQgLW4gOCAuZ2l0L0NPTU1JVF9FRElUTVNHIHwJXAorCXNlZCAicy9eIyBDb21taXR0ZXI6IC4qLyMgQ29tbWl0dGVyOi8iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKIHB3ZD1gcHdkYAogY2F0ID4+IC5naXQvRkFLRV9FRElUT1IgPDwgRU9GCiAjISAvYmluL3NoCkBAIC0xNjQsMjMgKzE5Niw1NiBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdkbyBub3QgZmlyZSBlZGl0b3IgaW4gdGhlIHByZXNlbmNlIG9mIGNvbmZsaWN0cycgJwogCi0JZ2l0IGNsZWFuCi0JZWNobyBmPmcKLQlnaXQgYWRkIGcKLQlnaXQgY29tbWl0IC1teWVzCi0JZ2l0IGJyYW5jaCBzZWNvbmQKLQllY2hvIG1hc3Rlcj5nCi0JZWNobyBnPmgKLQlnaXQgYWRkIGcgaAotCWdpdCBjb21taXQgLW1tYXN0ZXIKLQlnaXQgY2hlY2tvdXQgc2Vjb25kCi0JZWNobyBzZWNvbmQ+ZwotCWdpdCBhZGQgZwotCWdpdCBjb21taXQgLW1zZWNvbmQKLQlnaXQgY2hlcnJ5LXBpY2sgLW4gbWFzdGVyCi0JZWNobyAiZWRpdG9yIG5vdCBzdGFydGVkIiA+IC5naXQvcmVzdWx0Ci0JR0lUX0VESVRPUj1gcHdkYC8uZ2l0L0ZBS0VfRURJVE9SIGdpdCBjb21taXQgJiYgZXhpdCAxICAjIHNob3VsZCBmYWlsCi0JdGVzdCAiYGNhdCAuZ2l0L3Jlc3VsdGAiID0gImVkaXRvciBub3Qgc3RhcnRlZCIKKwlnaXQgY2xlYW4gLWYgJiYKKwllY2hvIGYgPmcgJiYKKwlnaXQgYWRkIGcgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgZyIgJiYKKwlnaXQgYnJhbmNoIHNlY29uZCAmJgorCWVjaG8gbWFzdGVyID5nICYmCisJZWNobyBnID5oICYmCisJZ2l0IGFkZCBnIGggJiYKKwlnaXQgY29tbWl0IC1tICJtb2RpZnkgZyBhbmQgYWRkIGgiICYmCisJZ2l0IGNoZWNrb3V0IHNlY29uZCAmJgorCWVjaG8gc2Vjb25kID5nICYmCisJZ2l0IGFkZCBnICYmCisJZ2l0IGNvbW1pdCAtbSBzZWNvbmQgJiYKKwkjIE11c3QgZmFpbCBkdWUgdG8gY29uZmxpY3QKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLW4gbWFzdGVyICYmCisJZWNobyAiZWRpdG9yIG5vdCBzdGFydGVkIiA+LmdpdC9yZXN1bHQgJiYKKwkoCisJCUdJVF9FRElUT1I9IiQocHdkKS8uZ2l0L0ZBS0VfRURJVE9SIiAmJgorCQlleHBvcnQgR0lUX0VESVRPUiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0CisJKSAmJgorCXRlc3QgIiQoY2F0IC5naXQvcmVzdWx0KSIgPSAiZWRpdG9yIG5vdCBzdGFydGVkIgorJworCitwd2Q9YHB3ZGAKK2NhdCA+LmdpdC9GQUtFX0VESVRPUiA8PEVPRgorIyEgJFNIRUxMX1BBVEgKKyMga2lsbCAtVEVSTSBjb21tYW5kIGFkZGVkIGJlbG93LgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2EgU0lHVEVSTSBzaG91bGQgYnJlYWsgbG9ja3MnICcKKwllY2hvID4+bmVnYXRpdmUgJiYKKwkiJFNIRUxMX1BBVEgiIC1jICdcJycKKwkgIGVjaG8ga2lsbCAtVEVSTSAkJCA+PiAuZ2l0L0ZBS0VfRURJVE9SCisJICBHSVRfRURJVE9SPS5naXQvRkFLRV9FRElUT1IgZXhlYyBnaXQgY29tbWl0IC1hJ1wnJyAmJiBleGl0IDEgICMgc2hvdWxkIGZhaWwKKwkhIHRlc3QgLWYgLmdpdC9pbmRleC5sb2NrCisnCisKK3JtIC1mIC5naXQvTUVSR0VfTVNHIC5naXQvQ09NTUlUX0VESVRNU0cKK2dpdCByZXNldCAtcSAtLWhhcmQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnSGFuZCBjb21taXR0aW5nIG9mIGEgcmVkdW5kYW50IG1lcmdlIHJlbW92ZXMgZHVwcycgJworCisJZ2l0IHJldi1wYXJzZSBzZWNvbmQgbWFzdGVyID5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2Ugc2Vjb25kIG1hc3RlciAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgZyAmJgorCUVESVRPUj06IGdpdCBjb21taXQgLWEgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW4gLWUgInMvXnBhcmVudCAvL3AiIC1lICIvXiQvcSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwogJwogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc1MDItc3RhdHVzLnNoIGIvdC90NzUwMi1zdGF0dXMuc2gKaW5kZXggY2QwODUxNi4uODBhNDM4ZCAxMDA3NTUKLS0tIGEvdC90NzUwMi1zdGF0dXMuc2gKKysrIGIvdC90NzUwMi1zdGF0dXMuc2gKQEAgLTYzLDcgKzYzLDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAoMiknICcKIAogCWdpdCBzdGF0dXMgPiBvdXRwdXQgJiYKLQlnaXQgZGlmZiBleHBlY3Qgb3V0cHV0CisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAogCiAnCiAKQEAgLTkzLDcgKzkzLDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIHJlbGF0aXZlIHBhdGhzJyAnCiAKIAkoY2QgZGlyMSAmJiBnaXQgc3RhdHVzKSA+IG91dHB1dCAmJgotCWdpdCBkaWZmIGV4cGVjdCBvdXRwdXQKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CiAKICcKIApAQCAtMTI0LDcgKzEyNCw3IEBACiAKIAlnaXQgY29uZmlnIHN0YXR1cy5yZWxhdGl2ZVBhdGhzIGZhbHNlCiAJKGNkIGRpcjEgJiYgZ2l0IHN0YXR1cykgPiBvdXRwdXQgJiYKLQlnaXQgZGlmZiBleHBlY3Qgb3V0cHV0CisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAogCiAnCiAKQEAgLTE0OSw0ICsxNDksMTM4IEBACiAJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzdGF0dXMgc3VibW9kdWxlIHN1bW1hcnknICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIHNtICYmICgKKwkJY2Qgc20gJiYKKwkJPmZvbyAmJgorCQlnaXQgYWRkIGZvbyAmJgorCQlnaXQgY29tbWl0IC1tICJBZGQgZm9vIgorCSkgJiYKKwlnaXQgYWRkIHNtCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCisjIE9uIGJyYW5jaCBtYXN0ZXIKKyMgQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisjICAgKHVzZSAiZ2l0IHJlc2V0IEhFQUQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorIworIwluZXcgZmlsZTogICBkaXIyL2FkZGVkCisjCW5ldyBmaWxlOiAgIHNtCisjCisjIENoYW5nZWQgYnV0IG5vdCB1cGRhdGVkOgorIyAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyMKKyMJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAorIworIyBVbnRyYWNrZWQgZmlsZXM6CisjICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyMKKyMJZGlyMS91bnRyYWNrZWQKKyMJZGlyMi9tb2RpZmllZAorIwlkaXIyL3VudHJhY2tlZAorIwlleHBlY3QKKyMJb3V0cHV0CisjCXVudHJhY2tlZAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgc3VibW9kdWxlIHN1bW1hcnkgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCcgJworCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKworaGVhZD0kKGNkIHNtICYmIGdpdCByZXYtcGFyc2UgLS1zaG9ydD03IC0tdmVyaWZ5IEhFQUQpCisKK2NhdCA+ZXhwZWN0IDw8RU9GCisjIE9uIGJyYW5jaCBtYXN0ZXIKKyMgQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisjICAgKHVzZSAiZ2l0IHJlc2V0IEhFQUQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorIworIwluZXcgZmlsZTogICBkaXIyL2FkZGVkCisjCW5ldyBmaWxlOiAgIHNtCisjCisjIENoYW5nZWQgYnV0IG5vdCB1cGRhdGVkOgorIyAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyMKKyMJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAorIworIyBNb2RpZmllZCBzdWJtb2R1bGVzOgorIworIyAqIHNtIDAwMDAwMDAuLi4kaGVhZCAoMSk6CisjICAgPiBBZGQgZm9vCisjCisjIFVudHJhY2tlZCBmaWxlczoKKyMgICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorIworIwlkaXIxL3VudHJhY2tlZAorIwlkaXIyL21vZGlmaWVkCisjCWRpcjIvdW50cmFja2VkCisjCWV4cGVjdAorIwlvdXRwdXQKKyMJdW50cmFja2VkCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBzdWJtb2R1bGUgc3VtbWFyeScgJworCWdpdCBjb25maWcgc3RhdHVzLnN1Ym1vZHVsZXN1bW1hcnkgMTAgJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKKworY2F0ID5leHBlY3QgPDxFT0YKKyMgT24gYnJhbmNoIG1hc3RlcgorIyBDaGFuZ2VkIGJ1dCBub3QgdXBkYXRlZDoKKyMgICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisjCisjCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKKyMKKyMgVW50cmFja2VkIGZpbGVzOgorIyAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisjCisjCWRpcjEvdW50cmFja2VkCisjCWRpcjIvbW9kaWZpZWQKKyMJZGlyMi91bnRyYWNrZWQKKyMJZXhwZWN0CisjCW91dHB1dAorIwl1bnRyYWNrZWQKK25vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0ICh1c2UgImdpdCBhZGQiIGFuZC9vciAiZ2l0IGNvbW1pdCAtYSIpCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBzdWJtb2R1bGUgc3VtbWFyeSAoY2xlYW4gc3VibW9kdWxlKScgJworCWdpdCBjb21taXQgLW0gImNvbW1pdCBzdWJtb2R1bGUiICYmCisJZ2l0IGNvbmZpZyBzdGF0dXMuc3VibW9kdWxlc3VtbWFyeSAxMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKyMgT24gYnJhbmNoIG1hc3RlcgorIyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyMgICAodXNlICJnaXQgcmVzZXQgSEVBRF4xIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKKyMKKyMJbmV3IGZpbGU6ICAgZGlyMi9hZGRlZAorIwluZXcgZmlsZTogICBzbQorIworIyBDaGFuZ2VkIGJ1dCBub3QgdXBkYXRlZDoKKyMgICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisjCisjCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKKyMKKyMgTW9kaWZpZWQgc3VibW9kdWxlczoKKyMKKyMgKiBzbSAwMDAwMDAwLi4uJGhlYWQgKDEpOgorIyAgID4gQWRkIGZvbworIworIyBVbnRyYWNrZWQgZmlsZXM6CisjICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyMKKyMJZGlyMS91bnRyYWNrZWQKKyMJZGlyMi9tb2RpZmllZAorIwlkaXIyL3VudHJhY2tlZAorIwlleHBlY3QKKyMJb3V0cHV0CisjCXVudHJhY2tlZAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgc3VibW9kdWxlIHN1bW1hcnkgKC0tYW1lbmQpJyAnCisJZ2l0IGNvbmZpZyBzdGF0dXMuc3VibW9kdWxlc3VtbWFyeSAxMCAmJgorCWdpdCBzdGF0dXMgLS1hbWVuZCA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc1MDQtY29tbWl0LW1zZy1ob29rLnNoIGIvdC90NzUwNC1jb21taXQtbXNnLWhvb2suc2gKaW5kZXggZWZmMzZhYS4uODg1NzdhZiAxMDA3NTUKLS0tIGEvdC90NzUwNC1jb21taXQtbXNnLWhvb2suc2gKKysrIGIvdC90NzUwNC1jb21taXQtbXNnLWhvb2suc2gKQEAgLTE5LDYgKzE5LDkgQEAKIGV4aXQgMAogRU9GCiBjaG1vZCAreCBmYWtlLWVkaXRvcgorCisjIyBOb3QgdXNpbmcgdGVzdF9zZXRfZWRpdG9yIGhlcmUgc28gd2UgY2FuIGVhc2lseSBlbnN1cmUgdGhlIGVkaXRvciB2YXJpYWJsZQorIyMgaXMgb25seSBzZXQgZm9yIHRoZSBlZGl0b3IgdGVzdHMKIEZBS0VfRURJVE9SPSIkKHB3ZCkvZmFrZS1lZGl0b3IiCiBleHBvcnQgRkFLRV9FRElUT1IKIApAQCAtMjcsNyArMzAsNyBAQAogCWVjaG8gIm1vcmUgZm9vIiA+PiBmaWxlICYmCiAJZ2l0IGFkZCBmaWxlICYmCiAJZWNobyAibW9yZSBmb28iID4gRkFLRV9NU0cgJiYKLQlHSVRfRURJVE9SPSIkRkFLRV9FRElUT1IiIGdpdCBjb21taXQKKwlHSVRfRURJVE9SPSJcIlwkRkFLRV9FRElUT1JcIiIgZ2l0IGNvbW1pdAogCiAnCiAKQEAgLTQ0LDcgKzQ3LDcgQEAKIAllY2hvICJtb3JlIGJhciIgPiBmaWxlICYmCiAJZ2l0IGFkZCBmaWxlICYmCiAJZWNobyAibW9yZSBiYXIiID4gRkFLRV9NU0cgJiYKLQlHSVRfRURJVE9SPSIkRkFLRV9FRElUT1IiIGdpdCBjb21taXQgLS1uby12ZXJpZnkKKwlHSVRfRURJVE9SPSJcIlwkRkFLRV9FRElUT1JcIiIgZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeQogCiAnCiAKQEAgLTcxLDcgKzc0LDcgQEAKIAllY2hvICJtb3JlIG1vcmUiID4+IGZpbGUgJiYKIAlnaXQgYWRkIGZpbGUgJiYKIAllY2hvICJtb3JlIG1vcmUiID4gRkFLRV9NU0cgJiYKLQlHSVRfRURJVE9SPSIkRkFLRV9FRElUT1IiIGdpdCBjb21taXQKKwlHSVRfRURJVE9SPSJcIlwkRkFLRV9FRElUT1JcIiIgZ2l0IGNvbW1pdAogCiAnCiAKQEAgLTg4LDcgKzkxLDcgQEAKIAllY2hvICJldmVuIG1vcmUgbW9yZSIgPj4gZmlsZSAmJgogCWdpdCBhZGQgZmlsZSAmJgogCWVjaG8gImV2ZW4gbW9yZSBtb3JlIiA+IEZBS0VfTVNHICYmCi0JR0lUX0VESVRPUj0iJEZBS0VfRURJVE9SIiBnaXQgY29tbWl0IC0tbm8tdmVyaWZ5CisJR0lUX0VESVRPUj0iXCJcJEZBS0VfRURJVE9SXCIiIGdpdCBjb21taXQgLS1uby12ZXJpZnkKIAogJwogCkBAIC0xMTEsNyArMTE0LDcgQEAKIAllY2hvICJtb3JlIGFub3RoZXIiID4+IGZpbGUgJiYKIAlnaXQgYWRkIGZpbGUgJiYKIAllY2hvICJtb3JlIGFub3RoZXIiID4gRkFLRV9NU0cgJiYKLQkhIChHSVRfRURJVE9SPSIkRkFLRV9FRElUT1IiIGdpdCBjb21taXQpCisJISAoR0lUX0VESVRPUj0iXCJcJEZBS0VfRURJVE9SXCIiIGdpdCBjb21taXQpCiAKICcKIApAQCAtMTI4LDcgKzEzMSw3IEBACiAJZWNobyAibW9yZSBzdHVmZiIgPj4gZmlsZSAmJgogCWdpdCBhZGQgZmlsZSAmJgogCWVjaG8gIm1vcmUgc3R1ZmYiID4gRkFLRV9NU0cgJiYKLQlHSVRfRURJVE9SPSIkRkFLRV9FRElUT1IiIGdpdCBjb21taXQgLS1uby12ZXJpZnkKKwlHSVRfRURJVE9SPSJcIlwkRkFLRV9FRElUT1JcIiIgZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeQogCiAnCiAKQEAgLTE0Niw3ICsxNDksNyBAQAogCWVjaG8gImNvbnRlbnQgYWdhaW4iID4+IGZpbGUgJiYKIAlnaXQgYWRkIGZpbGUgJiYKIAllY2hvICJjb250ZW50IGFnYWluIiA+IEZBS0VfTVNHICYmCi0JR0lUX0VESVRPUj0iJEZBS0VfRURJVE9SIiBnaXQgY29tbWl0IC1tICJjb250ZW50IGFnYWluIgorCUdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0IC1tICJjb250ZW50IGFnYWluIgogCiAnCiAKQEAgLTE2Myw3ICsxNjYsNyBAQAogCWVjaG8gImV2ZW4gbW9yZSBjb250ZW50IiA+PiBmaWxlICYmCiAJZ2l0IGFkZCBmaWxlICYmCiAJZWNobyAiZXZlbiBtb3JlIGNvbnRlbnQiID4gRkFLRV9NU0cgJiYKLQlHSVRfRURJVE9SPSIkRkFLRV9FRElUT1IiIGdpdCBjb21taXQgLS1uby12ZXJpZnkKKwlHSVRfRURJVE9SPSJcIlwkRkFLRV9FRElUT1JcIiIgZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeQogCiAnCiAKQEAgLTE5Myw3ICsxOTYsNyBAQAogCWVjaG8gImFkZGl0aW9uYWwgY29udGVudCIgPj4gZmlsZSAmJgogCWdpdCBhZGQgZmlsZSAmJgogCWVjaG8gImFkZGl0aW9uYWwgY29udGVudCIgPiBGQUtFX01TRyAmJgotCUdJVF9FRElUT1I9IiRGQUtFX0VESVRPUiIgZ2l0IGNvbW1pdCAmJgorCUdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0ICYmCiAJY29tbWl0X21zZ19pcyAibmV3IG1lc3NhZ2UiCiAKICcKQEAgLTIxMiw3ICsyMTUsNyBAQAogCWVjaG8gIm1vcmUgcGx1cyIgPj4gZmlsZSAmJgogCWdpdCBhZGQgZmlsZSAmJgogCWVjaG8gIm1vcmUgcGx1cyIgPiBGQUtFX01TRyAmJgotCUdJVF9FRElUT1I9IiRGQUtFX0VESVRPUiIgZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeSAmJgorCUdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0IC0tbm8tdmVyaWZ5ICYmCiAJY29tbWl0X21zZ19pcyAibW9yZSBwbHVzIgogCiAnCmRpZmYgLS1naXQgYS90L3Q3NTA1LXByZXBhcmUtY29tbWl0LW1zZy1ob29rLnNoIGIvdC90NzUwNS1wcmVwYXJlLWNvbW1pdC1tc2ctaG9vay5zaAppbmRleCA4MDJhYTYyLi5jZDZjN2M4IDEwMDc1NQotLS0gYS90L3Q3NTA1LXByZXBhcmUtY29tbWl0LW1zZy1ob29rLnNoCisrKyBiL3QvdDc1MDUtcHJlcGFyZS1jb21taXQtbXNnLWhvb2suc2gKQEAgLTE4LDYgKzE4LDkgQEAKIGV4aXQgMAogRU9GCiBjaG1vZCAreCBmYWtlLWVkaXRvcgorCisjIyBOb3QgdXNpbmcgdGVzdF9zZXRfZWRpdG9yIGhlcmUgc28gd2UgY2FuIGVhc2lseSBlbnN1cmUgdGhlIGVkaXRvciB2YXJpYWJsZQorIyMgaXMgb25seSBzZXQgZm9yIHRoZSBlZGl0b3IgdGVzdHMKIEZBS0VfRURJVE9SPSIkKHB3ZCkvZmFrZS1lZGl0b3IiCiBleHBvcnQgRkFLRV9FRElUT1IKIApAQCAtNTgsNyArNjEsNyBAQAogCiAJZWNobyAibW9yZSIgPj4gZmlsZSAmJgogCWdpdCBhZGQgZmlsZSAmJgotCUdJVF9FRElUT1I9IiRGQUtFX0VESVRPUiIgZ2l0IGNvbW1pdCAtZSAtbSAibW9yZSBtb3JlIiAmJgorCUdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0IC1lIC1tICJtb3JlIG1vcmUiICYmCiAJdGVzdCAiYGdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVzYCIgPSBtZXNzYWdlCiAKICcKQEAgLTg1LDcgKzg4LDcgQEAKIAogCWVjaG8gIm1vcmUiID4+IGZpbGUgJiYKIAlnaXQgYWRkIGZpbGUgJiYKLQkoZWNobyBtb3JlIG1vcmUgfCBHSVRfRURJVE9SPSIkRkFLRV9FRElUT1IiIGdpdCBjb21taXQgLWUgLUYgLSkgJiYKKwkoZWNobyBtb3JlIG1vcmUgfCBHSVRfRURJVE9SPSJcIlwkRkFLRV9FRElUT1JcIiIgZ2l0IGNvbW1pdCAtZSAtRiAtKSAmJgogCXRlc3QgImBnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolc2AiID0gbWVzc2FnZQogCiAnCkBAIC0xMDQsNyArMTA3LDcgQEAKIAogCWVjaG8gIm1vcmUgbW9yZSIgPj4gZmlsZSAmJgogCWdpdCBhZGQgZmlsZSAmJgotCUdJVF9FRElUT1I9IiRGQUtFX0VESVRPUiIgZ2l0IGNvbW1pdCAmJgorCUdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0ICYmCiAJdGVzdCAiYGdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVzYCIgPSBkZWZhdWx0CiAKICcKQEAgLTExNCw3ICsxMTcsNyBAQAogCWhlYWQ9YGdpdCByZXYtcGFyc2UgSEVBRGAgJiYKIAllY2hvICJtb3JlIiA+PiBmaWxlICYmCiAJZ2l0IGFkZCBmaWxlICYmCi0JR0lUX0VESVRPUj0iJEZBS0VfRURJVE9SIiBnaXQgY29tbWl0IC0tYW1lbmQgJiYKKwlHSVRfRURJVE9SPSJcIlwkRkFLRV9FRElUT1JcIiIgZ2l0IGNvbW1pdCAtLWFtZW5kICYmCiAJdGVzdCAiYGdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVzYCIgPSAiJGhlYWQiCiAKICcKQEAgLTEyNCw3ICsxMjcsNyBAQAogCWhlYWQ9YGdpdCByZXYtcGFyc2UgSEVBRGAgJiYKIAllY2hvICJtb3JlIiA+PiBmaWxlICYmCiAJZ2l0IGFkZCBmaWxlICYmCi0JR0lUX0VESVRPUj0iJEZBS0VfRURJVE9SIiBnaXQgY29tbWl0IC1jICRoZWFkICYmCisJR0lUX0VESVRPUj0iXCJcJEZBS0VfRURJVE9SXCIiIGdpdCBjb21taXQgLWMgJGhlYWQgJiYKIAl0ZXN0ICJgZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JXNgIiA9ICIkaGVhZCIKIAogJwpAQCAtMTM5LDcgKzE0Miw3IEBACiAJaGVhZD1gZ2l0IHJldi1wYXJzZSBIRUFEYCAmJgogCWVjaG8gIm1vcmUiID4+IGZpbGUgJiYKIAlnaXQgYWRkIGZpbGUgJiYKLQkhIEdJVF9FRElUT1I9IiRGQUtFX0VESVRPUiIgZ2l0IGNvbW1pdCAtYyAkaGVhZAorCSEgR0lUX0VESVRPUj0iXCJcJEZBS0VfRURJVE9SXCIiIGdpdCBjb21taXQgLWMgJGhlYWQKIAogJwogCkBAIC0xNDgsNyArMTUxLDcgQEAKIAloZWFkPWBnaXQgcmV2LXBhcnNlIEhFQURgICYmCiAJZWNobyAibW9yZSIgPj4gZmlsZSAmJgogCWdpdCBhZGQgZmlsZSAmJgotCSEgR0lUX0VESVRPUj0iJEZBS0VfRURJVE9SIiBnaXQgY29tbWl0IC0tbm8tdmVyaWZ5IC1jICRoZWFkCisJISBHSVRfRURJVE9SPSJcIlwkRkFLRV9FRElUT1JcIiIgZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeSAtYyAkaGVhZAogCiAnCiAKZGlmZiAtLWdpdCBhL3QvdDc1MDYtc3RhdHVzLXN1Ym1vZHVsZS5zaCBiL3QvdDc1MDYtc3RhdHVzLXN1Ym1vZHVsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNzUxMzBjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzUwNi1zdGF0dXMtc3VibW9kdWxlLnNoCkBAIC0wLDAgKzEsMzggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtc3RhdHVzIGZvciBzdWJtb2R1bGUnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY3JlYXRlX3JlcG8gc3ViCisJY2Qgc3ViICYmCisJOiA+YmFyICYmCisJZ2l0IGFkZCBiYXIgJiYKKwlnaXQgY29tbWl0IC1tICIgQWRkIGJhciIgJiYKKwljZCAuLiAmJgorCWdpdCBhZGQgc3ViICYmCisJZ2l0IGNvbW1pdCAtbSAiQWRkIHN1Ym1vZHVsZSBzdWIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBjbGVhbicgJworCWdpdCBzdGF0dXMgfAorCWdyZXAgIm5vdGhpbmcgdG8gY29tbWl0IgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC1hIGNsZWFuJyAnCisJZ2l0IHN0YXR1cyAtYSB8CisJZ3JlcCAibm90aGluZyB0byBjb21taXQiCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdybSBzdWJtb2R1bGUgY29udGVudHMnICcKKwlybSAtcmYgc3ViLyogc3ViLy5naXQKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBjbGVhbiAoZW1wdHkgc3VibW9kdWxlIGRpciknICcKKwlnaXQgc3RhdHVzIHwKKwlncmVwICJub3RoaW5nIHRvIGNvbW1pdCIKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtYSBjbGVhbiAoZW1wdHkgc3VibW9kdWxlIGRpciknICcKKwlnaXQgc3RhdHVzIC1hIHwKKwlncmVwICJub3RoaW5nIHRvIGNvbW1pdCIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NjAwLW1lcmdlLnNoIGIvdC90NzYwMC1tZXJnZS5zaAppbmRleCA1Njg2OWFjLi5kYWY0NWI3IDEwMDc1NQotLS0gYS90L3Q3NjAwLW1lcmdlLnNoCisrKyBiL3QvdDc2MDAtbWVyZ2Uuc2gKQEAgLTEwNCw3ICsxMDQsMTEgQEAKIAlnaXQgbG9nIC0tbm8tbWVyZ2VzIF5IRUFEIGMyID4+c3F1YXNoLjEtNSAmJgogCWVjaG8gIlNxdWFzaGVkIGNvbW1pdCBvZiB0aGUgZm9sbG93aW5nOiIgPnNxdWFzaC4xLTUtOSAmJgogCWVjaG8gPj5zcXVhc2guMS01LTkgJiYKLQlnaXQgbG9nIC0tbm8tbWVyZ2VzIF5IRUFEIGMyIGMzID4+c3F1YXNoLjEtNS05CisJZ2l0IGxvZyAtLW5vLW1lcmdlcyBeSEVBRCBjMiBjMyA+PnNxdWFzaC4xLTUtOSAmJgorCWVjaG8gPiBtc2cubm9sb2cgJiYKKwllY2hvICIqIGNvbW1pdCAnYzMnOiIgPm1zZy5sb2cgJiYKKwllY2hvICIgIGNvbW1pdCAzIiA+Pm1zZy5sb2cgJiYKKwllY2hvID4+bXNnLmxvZwogfQogCiB2ZXJpZnlfZGlmZigpIHsKQEAgLTIxOCwzNiArMjIyLDEyIEBACiB0ZXN0X2RlYnVnICdnaXRrIC0tYWxsJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IG9wdGlvbiBwYXJzaW5nJyAnCi0JaWYgZ2l0IG1lcmdlIC0kIGMxCi0JdGhlbgotCQllY2hvICJbT09QU10gLSQgYWNjZXB0ZWQiCi0JCWZhbHNlCi0JZmkgJiYKLQlpZiBnaXQgbWVyZ2UgLS1uby1zdWNoIGMxCi0JdGhlbgotCQllY2hvICJbT09QU10gLS1uby1zdWNoIGFjY2VwdGVkIgotCQlmYWxzZQotCWZpICYmCi0JaWYgZ2l0IG1lcmdlIC1zIGZvb2JhciBjMQotCXRoZW4KLQkJZWNobyAiW09PUFNdIC1zIGZvb2JhciBhY2NlcHRlZCIKLQkJZmFsc2UKLQlmaSAmJgotCWlmIGdpdCBtZXJnZSAtcz1mb29iYXIgYzEKLQl0aGVuCi0JCWVjaG8gIltPT1BTXSAtcz1mb29iYXIgYWNjZXB0ZWQiCi0JCWZhbHNlCi0JZmkgJiYKLQlpZiBnaXQgbWVyZ2UgLW0KLQl0aGVuCi0JCWVjaG8gIltPT1BTXSBtaXNzaW5nIGNvbW1pdCBtc2cgYWNjZXB0ZWQiCi0JCWZhbHNlCi0JZmkgJiYKLQlpZiBnaXQgbWVyZ2UKLQl0aGVuCi0JCWVjaG8gIltPT1BTXSBtaXNzaW5nIGNvbW1pdCByZWZlcmVuY2VzIGFjY2VwdGVkIgotCQlmYWxzZQotCWZpCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0kIGMxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tbm8tc3VjaCBjMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyBmb29iYXIgYzEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXM9Zm9vYmFyIGMxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1tICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMwIHdpdGggYzEnICcKQEAgLTM2NCw3ICszNDQsNyBAQAogCiB0ZXN0X2RlYnVnICdnaXRrIC0tYWxsJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVycmlkZSBjb25maWcgb3B0aW9uIC1uJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVycmlkZSBjb25maWcgb3B0aW9uIC1uIHdpdGggLS1zdW1tYXJ5JyAnCiAJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgogCWdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZW9wdGlvbnMgIi1uIiAmJgogCXRlc3RfdGljayAmJgpAQCAtMzczLDE1ICszNTMsMzAgQEAKIAl2ZXJpZnlfcGFyZW50cyAkYzEgJGMyICYmCiAJaWYgISBncmVwICJeIGZpbGUgfCAgKjIgKy0kIiBkaWZmc3RhdC50eHQKIAl0aGVuCi0JCWVjaG8gIltPT1BTXSBkaWZmc3RhdCB3YXMgbm90IGdlbmVyYXRlZCIKKwkJZWNobyAiW09PUFNdIGRpZmZzdGF0IHdhcyBub3QgZ2VuZXJhdGVkIHdpdGggLS1zdW1tYXJ5IgorCQlmYWxzZQorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJyaWRlIGNvbmZpZyBvcHRpb24gLW4gd2l0aCAtLXN0YXQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlb3B0aW9ucyAiLW4iICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC0tc3RhdCBjMiA+ZGlmZnN0YXQudHh0ICYmCisJdmVyaWZ5X21lcmdlIGZpbGUgcmVzdWx0LjEtNSBtc2cuMS01ICYmCisJdmVyaWZ5X3BhcmVudHMgJGMxICRjMiAmJgorCWlmICEgZ3JlcCAiXiBmaWxlIHwgICoyICstJCIgZGlmZnN0YXQudHh0CisJdGhlbgorCQllY2hvICJbT09QU10gZGlmZnN0YXQgd2FzIG5vdCBnZW5lcmF0ZWQgd2l0aCAtLXN0YXQiCisJCWZhbHNlCiAJZmkKICcKIAogdGVzdF9kZWJ1ZyAnZ2l0ayAtLWFsbCcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcnJpZGUgY29uZmlnIG9wdGlvbiAtLXN1bW1hcnknICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJyaWRlIGNvbmZpZyBvcHRpb24gLS1zdGF0JyAnCiAJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgotCWdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZW9wdGlvbnMgIi0tc3VtbWFyeSIgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2VvcHRpb25zICItLXN0YXQiICYmCiAJdGVzdF90aWNrICYmCiAJZ2l0IG1lcmdlIC1uIGMyID5kaWZmc3RhdC50eHQgJiYKIAl2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMS01IG1zZy4xLTUgJiYKQEAgLTQ0MSw2ICs0MzYsMTYgQEAKIAl2ZXJpZnlfaGVhZCAkYzEKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgbG9nIG1lc3NhZ2UnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZ2l0IG1lcmdlIC0tbm8tbG9nIGMyICYmCisJZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiViIEhFQUQgPm1zZy5hY3QgJiYKKwl2ZXJpZnlfZGlmZiBtc2cubm9sb2cgbXNnLmFjdCAiW09PUFNdIGJhZCBtZXJnZSBsb2cgbWVzc2FnZSIgJiYKKwlnaXQgbWVyZ2UgLS1sb2cgYzMgJiYKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6JWIgSEVBRCA+bXNnLmFjdCAmJgorCXZlcmlmeV9kaWZmIG1zZy5sb2cgbXNnLmFjdCAiW09PUFNdIGJhZCBtZXJnZSBsb2cgbWVzc2FnZSIKKycKKwogdGVzdF9kZWJ1ZyAnZ2l0ayAtLWFsbCcKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NjEwLW1lcmdldG9vbC5zaCBiL3QvdDc2MTAtbWVyZ2V0b29sLnNoCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL3QvdDc3MDEtcmVwYWNrLXVucGFjay11bnJlYWNoYWJsZS5zaCBiL3QvdDc3MDEtcmVwYWNrLXVucGFjay11bnJlYWNoYWJsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42YTUyMTFmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzcwMS1yZXBhY2stdW5wYWNrLXVucmVhY2hhYmxlLnNoCkBAIC0wLDAgKzEsNDcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtcmVwYWNrIHdvcmtzIGNvcnJlY3RseScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy1BIG9wdGlvbiBsZWF2ZXMgdW5yZWFjaGFibGUgb2JqZWN0cyB1bnBhY2tlZCcgJworCWVjaG8gY29udGVudCA+IGZpbGUxICYmCisJZ2l0IGFkZCAuICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsX2NvbW1pdCAmJgorCSMgY3JlYXRlIGEgdHJhbnNpZW50IGJyYW5jaCB3aXRoIHVuaXF1ZSBjb250ZW50CisJZ2l0IGNoZWNrb3V0IC1iIHRyYW5zaWVudF9icmFuY2ggJiYKKwllY2hvIG1vcmUgY29udGVudCA+PiBmaWxlMSAmJgorCSMgcmVjb3JkIHRoZSBvYmplY3RzIGNyZWF0ZWQgaW4gdGhlIGRhdGFiYXNlIGZvciBmaWxlLCBjb21taXQsIHRyZWUKKwlmc2hhMT0kKGdpdCBoYXNoLW9iamVjdCBmaWxlMSkgJiYKKwlnaXQgY29tbWl0IC1hIC1tIG1vcmVfY29udGVudCAmJgorCWNzaGExPSQoZ2l0IHJldi1wYXJzZSBIRUFEXntjb21taXR9KSAmJgorCXRzaGExPSQoZ2l0IHJldi1wYXJzZSBIRUFEXnt0cmVlfSkgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZWNobyBldmVuIG1vcmUgY29udGVudCA+PiBmaWxlMSAmJgorCWdpdCBjb21taXQgLWEgLW0gZXZlbl9tb3JlX2NvbnRlbnQgJiYKKwkjIGRlbGV0ZSB0aGUgdHJhbnNpZW50IGJyYW5jaAorCWdpdCBicmFuY2ggLUQgdHJhbnNpZW50X2JyYW5jaCAmJgorCSMgcGFjayB0aGUgcmVwbworCWdpdCByZXBhY2sgLUEgLWQgLWwgJiYKKwkjIHZlcmlmeSBvYmplY3RzIGFyZSBwYWNrZWQgaW4gcmVwb3NpdG9yeQorCXRlc3QgMyA9ICQoZ2l0IHZlcmlmeS1wYWNrIC12IC0tIC5naXQvb2JqZWN0cy9wYWNrLyouaWR4IHwKKwkJICAgZ3JlcCAtZSAiXiRmc2hhMSAiIC1lICJeJGNzaGExICIgLWUgIl4kdHNoYTEgIiB8CisJCSAgIHNvcnQgfCB1bmlxIHwgd2MgLWwpICYmCisJZ2l0IHNob3cgJGZzaGExICYmCisJZ2l0IHNob3cgJGNzaGExICYmCisJZ2l0IHNob3cgJHRzaGExICYmCisJIyBub3cgZXhwaXJlIHRoZSByZWZsb2cKKwlzbGVlcCAxICYmCisJZ2l0IHJlZmxvZyBleHBpcmUgLS1leHBpcmUtdW5yZWFjaGFibGU9bm93IC0tYWxsICYmCisJIyBhbmQgcmVwYWNrCisJZ2l0IHJlcGFjayAtQSAtZCAtbCAmJgorCSMgdmVyaWZ5IG9iamVjdHMgYXJlIHJldGFpbmVkIHVucGFja2VkCisJdGVzdCAwID0gJChnaXQgdmVyaWZ5LXBhY2sgLXYgLS0gLmdpdC9vYmplY3RzL3BhY2svKi5pZHggfAorCQkgICBncmVwIC1lICJeJGZzaGExICIgLWUgIl4kY3NoYTEgIiAtZSAiXiR0c2hhMSAiIHwKKwkJICAgc29ydCB8IHVuaXEgfCB3YyAtbCkgJiYKKwlnaXQgc2hvdyAkZnNoYTEgJiYKKwlnaXQgc2hvdyAkY3NoYTEgJiYKKwlnaXQgc2hvdyAkdHNoYTEKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MDAxLXNlbmQtZW1haWwuc2ggYi90L3Q5MDAxLXNlbmQtZW1haWwuc2gKaW5kZXggYTRiY2QyOC4uM2U0ZWI2MyAxMDA3NTUKLS0tIGEvdC90OTAwMS1zZW5kLWVtYWlsLnNoCisrKyBiL3QvdDkwMDEtc2VuZC1lbWFpbC5zaApAQCAtMTM5LDE1ICsxMzksMTYgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZmFrZSBlZGl0b3InICcKIAkoZWNobyAiIyEvYmluL3NoIiAmJgotCSBlY2hvICJlY2hvIGZha2UgZWRpdCA+PlwkMSIKKwkgZWNobyAiZWNobyBmYWtlIGVkaXQgPj5cIlwkMVwiIgogCSkgPmZha2UtZWRpdG9yICYmCiAJY2htb2QgK3ggZmFrZS1lZGl0b3IKICcKIAordGVzdF9zZXRfZWRpdG9yICIkKHB3ZCkvZmFrZS1lZGl0b3IiCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY29tcG9zZSB3b3JrcycgJwogCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKIAllY2hvIHkgfCBcCi0JCUdJVF9FRElUT1I9JChwd2QpL2Zha2UtZWRpdG9yIFwKIAkJR0lUX1NFTkRfRU1BSUxfTk9UVFk9MSBcCiAJCWdpdCBzZW5kLWVtYWlsIFwKIAkJLS1jb21wb3NlIC0tc3ViamVjdCBmb28gXApAQCAtMTY2LDE0ICsxNjcsODAgQEAKIAlncmVwICJTdWJqZWN0Oi4qU2Vjb25kIiBtc2d0eHQyCiAnCiAKK2NhdCA+ZXhwZWN0ZWQtc2hvdy1hbGwtaGVhZGVycyA8PFxFT0YKKzAwMDEtU2Vjb25kLnBhdGNoCisobWJveCkgQWRkaW5nIGNjOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnRnJvbTogQSA8YXV0aG9yQGV4YW1wbGUuY29tPicKK0RyeS1PSy4gTG9nIHNheXM6CitTZXJ2ZXI6IHJlbGF5LmV4YW1wbGUuY29tCitNQUlMIEZST006PGZyb21AZXhhbXBsZS5jb20+CitSQ1BUIFRPOjx0b0BleGFtcGxlLmNvbT4sPGNjQGV4YW1wbGUuY29tPiw8YXV0aG9yQGV4YW1wbGUuY29tPgorRnJvbTogRXhhbXBsZSA8ZnJvbUBleGFtcGxlLmNvbT4KK1RvOiB0b0BleGFtcGxlLmNvbQorQ2M6IGNjQGV4YW1wbGUuY29tLCBBIDxhdXRob3JAZXhhbXBsZS5jb20+CitTdWJqZWN0OiBbUEFUQ0ggMS8xXSBTZWNvbmQuCitEYXRlOiBEQVRFLVNUUklORworTWVzc2FnZS1JZDogTUVTU0FHRS1JRC1TVFJJTkcKK1gtTWFpbGVyOiBYLU1BSUxFUi1TVFJJTkcKKworUmVzdWx0OiBPSworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlbmRlbWFpbC5jYyBzZXQnICcKKwlnaXQgY29uZmlnIHNlbmRlbWFpbC5jYyBjY0BleGFtcGxlLmNvbSAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1kcnktcnVuIFwKKwkJLS1mcm9tPSJFeGFtcGxlIDxmcm9tQGV4YW1wbGUuY29tPiIgXAorCQktLXRvPXRvQGV4YW1wbGUuY29tIFwKKwkJLS1zbXRwLXNlcnZlciByZWxheS5leGFtcGxlLmNvbSBcCisJCSRwYXRjaGVzIHwKKwlzZWQJLWUgInMvXlwoRGF0ZTpcKS4qL1wxIERBVEUtU1RSSU5HLyIgXAorCQktZSAicy9eXChNZXNzYWdlLUlkOlwpLiovXDEgTUVTU0FHRS1JRC1TVFJJTkcvIiBcCisJCS1lICJzL15cKFgtTWFpbGVyOlwpLiovXDEgWC1NQUlMRVItU1RSSU5HLyIgXAorCQk+YWN0dWFsLXNob3ctYWxsLWhlYWRlcnMgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC1zaG93LWFsbC1oZWFkZXJzIGFjdHVhbC1zaG93LWFsbC1oZWFkZXJzCisnCisKK2NhdCA+ZXhwZWN0ZWQtc2hvdy1hbGwtaGVhZGVycyA8PFxFT0YKKzAwMDEtU2Vjb25kLnBhdGNoCisobWJveCkgQWRkaW5nIGNjOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnRnJvbTogQSA8YXV0aG9yQGV4YW1wbGUuY29tPicKK0RyeS1PSy4gTG9nIHNheXM6CitTZXJ2ZXI6IHJlbGF5LmV4YW1wbGUuY29tCitNQUlMIEZST006PGZyb21AZXhhbXBsZS5jb20+CitSQ1BUIFRPOjx0b0BleGFtcGxlLmNvbT4sPGF1dGhvckBleGFtcGxlLmNvbT4KK0Zyb206IEV4YW1wbGUgPGZyb21AZXhhbXBsZS5jb20+CitUbzogdG9AZXhhbXBsZS5jb20KK0NjOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+CitTdWJqZWN0OiBbUEFUQ0ggMS8xXSBTZWNvbmQuCitEYXRlOiBEQVRFLVNUUklORworTWVzc2FnZS1JZDogTUVTU0FHRS1JRC1TVFJJTkcKK1gtTWFpbGVyOiBYLU1BSUxFUi1TVFJJTkcKKworUmVzdWx0OiBPSworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlbmRlbWFpbC5jYyB1bnNldCcgJworCWdpdCBjb25maWcgLS11bnNldCBzZW5kZW1haWwuY2MgJiYKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZHJ5LXJ1biBcCisJCS0tZnJvbT0iRXhhbXBsZSA8ZnJvbUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz10b0BleGFtcGxlLmNvbSBcCisJCS0tc210cC1zZXJ2ZXIgcmVsYXkuZXhhbXBsZS5jb20gXAorCQkkcGF0Y2hlcyB8CisJc2VkCS1lICJzL15cKERhdGU6XCkuKi9cMSBEQVRFLVNUUklORy8iIFwKKwkJLWUgInMvXlwoTWVzc2FnZS1JZDpcKS4qL1wxIE1FU1NBR0UtSUQtU1RSSU5HLyIgXAorCQktZSAicy9eXChYLU1haWxlcjpcKS4qL1wxIFgtTUFJTEVSLVNUUklORy8iIFwKKwkJPmFjdHVhbC1zaG93LWFsbC1oZWFkZXJzICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtc2hvdy1hbGwtaGVhZGVycyBhY3R1YWwtc2hvdy1hbGwtaGVhZGVycworJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNvbXBvc2UgYWRkcyBNSU1FIGZvciB1dGY4IGJvZHknICcKIAljbGVhbl9mYWtlX3NlbmRtYWlsICYmCiAJKGVjaG8gIiMhL2Jpbi9zaCIgJiYKLQkgZWNobyAiZWNobyB1dGY4IGJvZHk6IMOgw6nDrMO2w7ogPj5cJDEiCisJIGVjaG8gImVjaG8gdXRmOCBib2R5OiDDoMOpw6zDtsO6ID4+XCJcJDFcIiIKIAkpID5mYWtlLWVkaXRvci11dGY4ICYmCiAJY2htb2QgK3ggZmFrZS1lZGl0b3ItdXRmOCAmJgogCWVjaG8geSB8IFwKLQkgIEdJVF9FRElUT1I9JChwd2QpL2Zha2UtZWRpdG9yLXV0ZjggXAorCSAgR0lUX0VESVRPUj0iXCIkKHB3ZCkvZmFrZS1lZGl0b3ItdXRmOFwiIiBcCiAJICBHSVRfU0VORF9FTUFJTF9OT1RUWT0xIFwKIAkgIGdpdCBzZW5kLWVtYWlsIFwKIAkgIC0tY29tcG9zZSAtLXN1YmplY3QgZm9vIFwKQEAgLTE5MywxMSArMjYwLDExIEBACiAJIGVjaG8gIiBlY2hvIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQiCiAJIGVjaG8gIiBlY2hvIFN1YmplY3Q6IGZvbyIKIAkgZWNobyAiIGVjaG8gIgotCSBlY2hvICIgZWNobyB1dGY4IGJvZHk6IMOgw6nDrMO2w7opID5cJDEiCisJIGVjaG8gIiBlY2hvIHV0ZjggYm9keTogw6DDqcOsw7bDuikgPlwiXCQxXCIiCiAJKSA+ZmFrZS1lZGl0b3ItdXRmOC1taW1lICYmCiAJY2htb2QgK3ggZmFrZS1lZGl0b3ItdXRmOC1taW1lICYmCiAJZWNobyB5IHwgXAotCSAgR0lUX0VESVRPUj0kKHB3ZCkvZmFrZS1lZGl0b3ItdXRmOC1taW1lIFwKKwkgIEdJVF9FRElUT1I9IlwiJChwd2QpL2Zha2UtZWRpdG9yLXV0ZjgtbWltZVwiIiBcCiAJICBHSVRfU0VORF9FTUFJTF9OT1RUWT0xIFwKIAkgIGdpdCBzZW5kLWVtYWlsIFwKIAkgIC0tY29tcG9zZSAtLXN1YmplY3QgZm9vIFwKQEAgLTIxMyw3ICsyODAsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb21wb3NlIGFkZHMgTUlNRSBmb3IgdXRmOCBzdWJqZWN0JyAnCiAJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgogCWVjaG8geSB8IFwKLQkgIEdJVF9FRElUT1I9JChwd2QpL2Zha2UtZWRpdG9yIFwKKwkgIEdJVF9FRElUT1I9IlwiJChwd2QpL2Zha2UtZWRpdG9yXCIiIFwKIAkgIEdJVF9TRU5EX0VNQUlMX05PVFRZPTEgXAogCSAgZ2l0IHNlbmQtZW1haWwgXAogCSAgLS1jb21wb3NlIC0tc3ViamVjdCB1dGY4LXPDvGJqw6tjdCBcCmRpZmYgLS1naXQgYS90L3Q5MTAwLWdpdC1zdm4tYmFzaWMuc2ggYi90L3Q5MTAwLWdpdC1zdm4tYmFzaWMuc2gKaW5kZXggNGUyNGFiMy4uMjQyY2RmMCAxMDA3NTUKLS0tIGEvdC90OTEwMC1naXQtc3ZuLWJhc2ljLnNoCisrKyBiL3QvdDkxMDAtZ2l0LXN2bi1iYXNpYy5zaApAQCAtMjAsMzkgKzIwLDM5IEBACiBlY2hvICdkZWZpbmUgTk9fU1ZOX1RFU1RTIHRvIHNraXAgZ2l0LXN2biB0ZXN0cycKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0gICAgJ2luaXRpYWxpemUgZ2l0LXN2bicgIgorICAgICdpbml0aWFsaXplIGdpdC1zdm4nICcKIAlta2RpciBpbXBvcnQgJiYKIAljZCBpbXBvcnQgJiYKIAllY2hvIGZvbyA+IGZvbyAmJgogCWxuIC1zIGZvbyBmb28ubGluawogCW1rZGlyIC1wIGRpci9hL2IvYy9kL2UgJiYKLQllY2hvICdkZWVwIGRpcicgPiBkaXIvYS9iL2MvZC9lL2ZpbGUgJiYKKwllY2hvICJkZWVwIGRpciIgPiBkaXIvYS9iL2MvZC9lL2ZpbGUgJiYKIAlta2RpciBiYXIgJiYKLQllY2hvICd6enonID4gYmFyL3p6eiAmJgotCWVjaG8gJyMhL2Jpbi9zaCcgPiBleGVjLnNoICYmCisJZWNobyAienp6IiA+IGJhci96enogJiYKKwllY2hvICIjIS9iaW4vc2giID4gZXhlYy5zaCAmJgogCWNobW9kICt4IGV4ZWMuc2ggJiYKLQlzdm4gaW1wb3J0IC1tICdpbXBvcnQgZm9yIGdpdC1zdm4nIC4gJHN2bnJlcG8gPi9kZXYvbnVsbCAmJgorCXN2biBpbXBvcnQgLW0gImltcG9ydCBmb3IgZ2l0LXN2biIgLiAiJHN2bnJlcG8iID4vZGV2L251bGwgJiYKIAljZCAuLiAmJgogCXJtIC1yZiBpbXBvcnQgJiYKLQlnaXQtc3ZuIGluaXQgJHN2bnJlcG8iCisJZ2l0LXN2biBpbml0ICIkc3ZucmVwbyInCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdpbXBvcnQgYW4gU1ZOIHJldmlzaW9uIGludG8gZ2l0JyBcCiAgICAgJ2dpdC1zdm4gZmV0Y2gnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNoZWNrb3V0IGZyb20gc3ZuIiAic3ZuIGNvICRzdm5yZXBvICckU1ZOX1RSRUUnIgordGVzdF9leHBlY3Rfc3VjY2VzcyAiY2hlY2tvdXQgZnJvbSBzdm4iICdzdm4gY28gIiRzdm5yZXBvIiAiJFNWTl9UUkVFIicKIAogbmFtZT0ndHJ5IGEgZGVlcCAtLXJtZGlyIHdpdGggYSBjb21taXQnCi10ZXN0X2V4cGVjdF9zdWNjZXNzICIkbmFtZSIgIgordGVzdF9leHBlY3Rfc3VjY2VzcyAiJG5hbWUiICcKIAlnaXQgY2hlY2tvdXQgLWYgLWIgbXlicmFuY2ggcmVtb3Rlcy9naXQtc3ZuICYmCiAJbXYgZGlyL2EvYi9jL2QvZS9maWxlIGRpci9maWxlICYmCiAJY3AgZGlyL2ZpbGUgZmlsZSAmJgogCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZW1vdmUgZGlyL2EvYi9jL2QvZS9maWxlIGRpci9maWxlIGZpbGUgJiYKLQlnaXQgY29tbWl0IC1tICckbmFtZScgJiYKKwlnaXQgY29tbWl0IC1tICIkbmFtZSIgJiYKIAlnaXQtc3ZuIHNldC10cmVlIC0tZmluZC1jb3BpZXMtaGFyZGVyIC0tcm1kaXIgXAogCQlyZW1vdGVzL2dpdC1zdm4uLm15YnJhbmNoICYmCi0Jc3ZuIHVwICckU1ZOX1RSRUUnICYmCi0JdGVzdCAtZCAnJFNWTl9UUkVFJy9kaXIgJiYgdGVzdCAhIC1kICckU1ZOX1RSRUUnL2Rpci9hIgorCXN2biB1cCAiJFNWTl9UUkVFIiAmJgorCXRlc3QgLWQgIiRTVk5fVFJFRSIvZGlyICYmIHRlc3QgISAtZCAiJFNWTl9UUkVFIi9kaXIvYScKIAogCiBuYW1lPSdkZXRlY3Qgbm9kZSBjaGFuZ2UgZnJvbSBmaWxlIHRvIGRpcmVjdG9yeSAjMScKQEAgLTY4LDEwOCArNjgsMTA4IEBACiAKIAogbmFtZT0nZGV0ZWN0IG5vZGUgY2hhbmdlIGZyb20gZGlyZWN0b3J5IHRvIGZpbGUgIzEnCi10ZXN0X2V4cGVjdF9zdWNjZXNzICIkbmFtZSIgIgotCXJtIC1yZiBkaXIgJyRHSVRfRElSJy9pbmRleCAmJgordGVzdF9leHBlY3Rfc3VjY2VzcyAiJG5hbWUiICcKKwlybSAtcmYgZGlyICIkR0lUX0RJUiIvaW5kZXggJiYKIAlnaXQgY2hlY2tvdXQgLWYgLWIgbXlicmFuY2gyIHJlbW90ZXMvZ2l0LXN2biAmJgogCW12IGJhci96enogenp6ICYmCiAJcm0gLXJmIGJhciAmJgogCW12IHp6eiBiYXIgJiYKIAlnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIC0tIGJhci96enogJiYKIAlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tIGJhciAmJgotCWdpdCBjb21taXQgLW0gJyRuYW1lJyAmJgorCWdpdCBjb21taXQgLW0gIiRuYW1lIiAmJgogCSEgZ2l0LXN2biBzZXQtdHJlZSAtLWZpbmQtY29waWVzLWhhcmRlciAtLXJtZGlyIFwKLQkJcmVtb3Rlcy9naXQtc3ZuLi5teWJyYW5jaDIiIHx8IHRydWUKKwkJcmVtb3Rlcy9naXQtc3ZuLi5teWJyYW5jaDInIHx8IHRydWUKIAogCiBuYW1lPSdkZXRlY3Qgbm9kZSBjaGFuZ2UgZnJvbSBmaWxlIHRvIGRpcmVjdG9yeSAjMicKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRuYW1lIiAiCi0Jcm0gLWYgJyRHSVRfRElSJy9pbmRleCAmJgordGVzdF9leHBlY3Rfc3VjY2VzcyAiJG5hbWUiICcKKwlybSAtZiAiJEdJVF9ESVIiL2luZGV4ICYmCiAJZ2l0IGNoZWNrb3V0IC1mIC1iIG15YnJhbmNoMyByZW1vdGVzL2dpdC1zdm4gJiYKIAlybSBiYXIvenp6ICYmCiAJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSBiYXIvenp6ICYmCiAJbWtkaXIgYmFyL3p6eiAmJgogCWVjaG8geXl5ID4gYmFyL3p6ei95eXkgJiYKIAlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGJhci96enoveXl5ICYmCi0JZ2l0IGNvbW1pdCAtbSAnJG5hbWUnICYmCisJZ2l0IGNvbW1pdCAtbSAiJG5hbWUiICYmCiAJISBnaXQtc3ZuIHNldC10cmVlIC0tZmluZC1jb3BpZXMtaGFyZGVyIC0tcm1kaXIgXAotCQlyZW1vdGVzL2dpdC1zdm4uLm15YnJhbmNoMyIgfHwgdHJ1ZQorCQlyZW1vdGVzL2dpdC1zdm4uLm15YnJhbmNoMycgfHwgdHJ1ZQogCiAKIG5hbWU9J2RldGVjdCBub2RlIGNoYW5nZSBmcm9tIGRpcmVjdG9yeSB0byBmaWxlICMyJwotdGVzdF9leHBlY3Rfc3VjY2VzcyAiJG5hbWUiICIKLQlybSAtZiAnJEdJVF9ESVInL2luZGV4ICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICIkbmFtZSIgJworCXJtIC1mICIkR0lUX0RJUiIvaW5kZXggJiYKIAlnaXQgY2hlY2tvdXQgLWYgLWIgbXlicmFuY2g0IHJlbW90ZXMvZ2l0LXN2biAmJgogCXJtIC1yZiBkaXIgJiYKIAlnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIC0tIGRpci9maWxlICYmCiAJdG91Y2ggZGlyICYmCiAJZWNobyBhc2RmID4gZGlyICYmCiAJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLSBkaXIgJiYKLQlnaXQgY29tbWl0IC1tICckbmFtZScgJiYKKwlnaXQgY29tbWl0IC1tICIkbmFtZSIgJiYKIAkhIGdpdC1zdm4gc2V0LXRyZWUgLS1maW5kLWNvcGllcy1oYXJkZXIgLS1ybWRpciBcCi0JCXJlbW90ZXMvZ2l0LXN2bi4ubXlicmFuY2g0IiB8fCB0cnVlCisJCXJlbW90ZXMvZ2l0LXN2bi4ubXlicmFuY2g0JyB8fCB0cnVlCiAKIAogbmFtZT0ncmVtb3ZlIGV4ZWN1dGFibGUgYml0IGZyb20gYSBmaWxlJwotdGVzdF9leHBlY3Rfc3VjY2VzcyAiJG5hbWUiICIKLQlybSAtZiAnJEdJVF9ESVInL2luZGV4ICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICIkbmFtZSIgJworCXJtIC1mICIkR0lUX0RJUiIvaW5kZXggJiYKIAlnaXQgY2hlY2tvdXQgLWYgLWIgbXlicmFuY2g1IHJlbW90ZXMvZ2l0LXN2biAmJgogCWNobW9kIC14IGV4ZWMuc2ggJiYKIAlnaXQgdXBkYXRlLWluZGV4IGV4ZWMuc2ggJiYKLQlnaXQgY29tbWl0IC1tICckbmFtZScgJiYKKwlnaXQgY29tbWl0IC1tICIkbmFtZSIgJiYKIAlnaXQtc3ZuIHNldC10cmVlIC0tZmluZC1jb3BpZXMtaGFyZGVyIC0tcm1kaXIgXAogCQlyZW1vdGVzL2dpdC1zdm4uLm15YnJhbmNoNSAmJgotCXN2biB1cCAnJFNWTl9UUkVFJyAmJgotCXRlc3QgISAteCAnJFNWTl9UUkVFJy9leGVjLnNoIgorCXN2biB1cCAiJFNWTl9UUkVFIiAmJgorCXRlc3QgISAteCAiJFNWTl9UUkVFIi9leGVjLnNoJwogCiAKIG5hbWU9J2FkZCBleGVjdXRhYmxlIGJpdCBiYWNrIGZpbGUnCi10ZXN0X2V4cGVjdF9zdWNjZXNzICIkbmFtZSIgIgordGVzdF9leHBlY3Rfc3VjY2VzcyAiJG5hbWUiICcKIAljaG1vZCAreCBleGVjLnNoICYmCiAJZ2l0IHVwZGF0ZS1pbmRleCBleGVjLnNoICYmCi0JZ2l0IGNvbW1pdCAtbSAnJG5hbWUnICYmCisJZ2l0IGNvbW1pdCAtbSAiJG5hbWUiICYmCiAJZ2l0LXN2biBzZXQtdHJlZSAtLWZpbmQtY29waWVzLWhhcmRlciAtLXJtZGlyIFwKIAkJcmVtb3Rlcy9naXQtc3ZuLi5teWJyYW5jaDUgJiYKLQlzdm4gdXAgJyRTVk5fVFJFRScgJiYKLQl0ZXN0IC14ICckU1ZOX1RSRUUnL2V4ZWMuc2giCisJc3ZuIHVwICIkU1ZOX1RSRUUiICYmCisJdGVzdCAteCAiJFNWTl9UUkVFIi9leGVjLnNoJwogCiAKIG5hbWU9J2V4ZWN1dGFibGUgZmlsZSBiZWNvbWVzIGEgc3ltbGluayB0byBiYXIvenp6IChmaWxlKScKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRuYW1lIiAiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICIkbmFtZSIgJwogCXJtIGV4ZWMuc2ggJiYKIAlsbiAtcyBiYXIvenp6IGV4ZWMuc2ggJiYKIAlnaXQgdXBkYXRlLWluZGV4IGV4ZWMuc2ggJiYKLQlnaXQgY29tbWl0IC1tICckbmFtZScgJiYKKwlnaXQgY29tbWl0IC1tICIkbmFtZSIgJiYKIAlnaXQtc3ZuIHNldC10cmVlIC0tZmluZC1jb3BpZXMtaGFyZGVyIC0tcm1kaXIgXAogCQlyZW1vdGVzL2dpdC1zdm4uLm15YnJhbmNoNSAmJgotCXN2biB1cCAnJFNWTl9UUkVFJyAmJgotCXRlc3QgLUwgJyRTVk5fVFJFRScvZXhlYy5zaCIKKwlzdm4gdXAgIiRTVk5fVFJFRSIgJiYKKwl0ZXN0IC1MICIkU1ZOX1RSRUUiL2V4ZWMuc2gnCiAKIG5hbWU9J25ldyBzeW1saW5rIGlzIGFkZGVkIHRvIGEgZmlsZSB0aGF0IHdhcyBhbHNvIGp1c3QgbWFkZSBleGVjdXRhYmxlJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICIkbmFtZSIgIgordGVzdF9leHBlY3Rfc3VjY2VzcyAiJG5hbWUiICcKIAljaG1vZCAreCBiYXIvenp6ICYmCiAJbG4gLXMgYmFyL3p6eiBleGVjLTIuc2ggJiYKIAlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGJhci96enogZXhlYy0yLnNoICYmCi0JZ2l0IGNvbW1pdCAtbSAnJG5hbWUnICYmCisJZ2l0IGNvbW1pdCAtbSAiJG5hbWUiICYmCiAJZ2l0LXN2biBzZXQtdHJlZSAtLWZpbmQtY29waWVzLWhhcmRlciAtLXJtZGlyIFwKIAkJcmVtb3Rlcy9naXQtc3ZuLi5teWJyYW5jaDUgJiYKLQlzdm4gdXAgJyRTVk5fVFJFRScgJiYKLQl0ZXN0IC14ICckU1ZOX1RSRUUnL2Jhci96enogJiYKLQl0ZXN0IC1MICckU1ZOX1RSRUUnL2V4ZWMtMi5zaCIKKwlzdm4gdXAgIiRTVk5fVFJFRSIgJiYKKwl0ZXN0IC14ICIkU1ZOX1RSRUUiL2Jhci96enogJiYKKwl0ZXN0IC1MICIkU1ZOX1RSRUUiL2V4ZWMtMi5zaCcKIAogbmFtZT0nbW9kaWZ5IGEgc3ltbGluayB0byBiZWNvbWUgYSBmaWxlJwotdGVzdF9leHBlY3Rfc3VjY2VzcyAiJG5hbWUiICIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRuYW1lIiAnCiAJZWNobyBnaXQgaGVscCA+IGhlbHAgfHwgdHJ1ZSAmJgogCXJtIGV4ZWMtMi5zaCAmJgogCWNwIGhlbHAgZXhlYy0yLnNoICYmCiAJZ2l0IHVwZGF0ZS1pbmRleCBleGVjLTIuc2ggJiYKLQlnaXQgY29tbWl0IC1tICckbmFtZScgJiYKKwlnaXQgY29tbWl0IC1tICIkbmFtZSIgJiYKIAlnaXQtc3ZuIHNldC10cmVlIC0tZmluZC1jb3BpZXMtaGFyZGVyIC0tcm1kaXIgXAogCQlyZW1vdGVzL2dpdC1zdm4uLm15YnJhbmNoNSAmJgotCXN2biB1cCAnJFNWTl9UUkVFJyAmJgotCXRlc3QgLWYgJyRTVk5fVFJFRScvZXhlYy0yLnNoICYmCi0JdGVzdCAhIC1MICckU1ZOX1RSRUUnL2V4ZWMtMi5zaCAmJgotCWdpdCBkaWZmIGhlbHAgJFNWTl9UUkVFL2V4ZWMtMi5zaCIKKwlzdm4gdXAgIiRTVk5fVFJFRSIgJiYKKwl0ZXN0IC1mICIkU1ZOX1RSRUUiL2V4ZWMtMi5zaCAmJgorCXRlc3QgISAtTCAiJFNWTl9UUkVFIi9leGVjLTIuc2ggJiYKKwl0ZXN0X2NtcCBoZWxwICIkU1ZOX1RSRUUiL2V4ZWMtMi5zaCcKIAogaWYgdGVzdCAiJGhhdmVfdXRmOCIgPSB0CiB0aGVuCkBAIC0xOTAsMTAgKzE5MCwxMCBAQAogR0lUX1NWTl9JRD1hbHQKIGV4cG9ydCBHSVRfU1ZOX0lECiB0ZXN0X2V4cGVjdF9zdWNjZXNzICIkbmFtZSIgXAotICAgICJnaXQtc3ZuIGluaXQgJHN2bnJlcG8gJiYgZ2l0LXN2biBmZXRjaCAmJgorICAgICdnaXQtc3ZuIGluaXQgIiRzdm5yZXBvIiAmJiBnaXQtc3ZuIGZldGNoICYmCiAgICAgIGdpdCByZXYtbGlzdCAtLXByZXR0eT1yYXcgcmVtb3Rlcy9naXQtc3ZuIHwgZ3JlcCBedHJlZSB8IHVuaXEgPiBhICYmCiAgICAgIGdpdCByZXYtbGlzdCAtLXByZXR0eT1yYXcgcmVtb3Rlcy9hbHQgfCBncmVwIF50cmVlIHwgdW5pcSA+IGIgJiYKLSAgICAgZ2l0IGRpZmYgYSBiIgorICAgICB0ZXN0X2NtcCBhIGInCiAKIG5hbWU9J2NoZWNrIGltcG9ydGVkIHRyZWUgY2hlY2tzdW1zIGV4cGVjdGVkIHRyZWUgY2hlY2tzdW1zJwogcm0gLWYgZXhwZWN0ZWQKQEAgLTIxMSw3ICsyMTEsNyBAQAogdHJlZSA4ZjUxZjc0Y2YwMTYzYWZjOWFkNjhhNGIxNTM3Mjg4YzQ1NThiNWE0CiBFT0YKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAiJG5hbWUiICJnaXQgZGlmZiBhIGV4cGVjdGVkIgordGVzdF9leHBlY3Rfc3VjY2VzcyAiJG5hbWUiICJ0ZXN0X2NtcCBhIGV4cGVjdGVkIgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGl0IGlmIHJlbW90ZSByZWZzIGFyZSBhbWJpZ2lvdXMnICIKICAgICAgICAgZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi5mZXRjaCBcCkBAIC0yMTksMjIgKzIxOSwyMiBAQAogCSEgZ2l0LXN2biBtaWdyYXRlCiAiCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4aXQgaWYgaW5pdC1pbmcgYSB3b3VsZCBjbG9iYmVyIGEgVVJMJyAiCi0gICAgICAgIHN2bmFkbWluIGNyZWF0ZSAke1BXRH0vc3ZucmVwbzIgJiYKLSAgICAgICAgc3ZuIG1rZGlyIC1tICdta2RpciBiYXInICR7c3ZucmVwb30yL2JhciAmJgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhpdCBpZiBpbml0LWluZyBhIHdvdWxkIGNsb2JiZXIgYSBVUkwnICcKKyAgICAgICAgc3ZuYWRtaW4gY3JlYXRlICIke1BXRH0vc3ZucmVwbzIiICYmCisgICAgICAgIHN2biBta2RpciAtbSAibWtkaXIgYmFyIiAiJHtzdm5yZXBvfTIvYmFyIiAmJgogICAgICAgICBnaXQgY29uZmlnIC0tdW5zZXQgc3ZuLXJlbW90ZS5zdm4uZmV0Y2ggXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXmJhcjpyZWZzL3JlbW90ZXMvZ2l0LXN2biQnICYmCi0JISBnaXQtc3ZuIGluaXQgJHtzdm5yZXBvfTIvYmFyCi0gICAgICAgICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl5iYXI6cmVmcy9yZW1vdGVzL2dpdC1zdm4kIiAmJgorCSEgZ2l0LXN2biBpbml0ICIke3N2bnJlcG99Mi9iYXIiCisgICAgICAgICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0gICdpbml0IGFsbG93cyB1cyB0byBjb25uZWN0IHRvIGFub3RoZXIgZGlyZWN0b3J5IGluIHRoZSBzYW1lIHJlcG8nICIKLSAgICAgICAgZ2l0LXN2biBpbml0IC0tbWluaW1pemUtdXJsIC1pIGJhciAkc3ZucmVwby9iYXIgJiYKKyAgJ2luaXQgYWxsb3dzIHVzIHRvIGNvbm5lY3QgdG8gYW5vdGhlciBkaXJlY3RvcnkgaW4gdGhlIHNhbWUgcmVwbycgJworICAgICAgICBnaXQtc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLWkgYmFyICIkc3ZucmVwby9iYXIiICYmCiAgICAgICAgIGdpdCBjb25maWcgLS1nZXQgc3ZuLXJlbW90ZS5zdm4uZmV0Y2ggXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ15iYXI6cmVmcy9yZW1vdGVzL2JhciQnICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXmJhcjpyZWZzL3JlbW90ZXMvYmFyJCIgJiYKICAgICAgICAgZ2l0IGNvbmZpZyAtLWdldCBzdm4tcmVtb3RlLnN2bi5mZXRjaCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXjpyZWZzL3JlbW90ZXMvZ2l0LXN2biQnCi0gICAgICAgICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeOnJlZnMvcmVtb3Rlcy9naXQtc3ZuJCIKKyAgICAgICAgJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdhYmxlIHRvIGRjb21taXQgdG8gYSBzdWJkaXJlY3RvcnknICIKIAlnaXQtc3ZuIGZldGNoIC1pIGJhciAmJgpkaWZmIC0tZ2l0IGEvdC90OTEwMS1naXQtc3ZuLXByb3BzLnNoIGIvdC90OTEwMS1naXQtc3ZuLXByb3BzLnNoCmluZGV4IGQ3YTcwNDcuLmY0MjA3OTYgMTAwNzU1Ci0tLSBhL3QvdDkxMDEtZ2l0LXN2bi1wcm9wcy5zaAorKysgYi90L3Q5MTAxLWdpdC1zdm4tcHJvcHMuc2gKQEAgLTUyLDcgKzUyLDcgQEAKIGNkIC4uCiAKIHJtIC1yZiBpbXBvcnQKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdvcmtpbmcgY29weSBmcm9tIHN2bicgInN2biBjbyAkc3ZucmVwbyB0ZXN0X3djIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgd29ya2luZyBjb3B5IGZyb20gc3ZuJyAnc3ZuIGNvICIkc3ZucmVwbyIgdGVzdF93YycKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHNvbWUgY29tbWl0cyB0byBzdm4nIFwKIAknY2QgdGVzdF93YyAmJgogCQllY2hvIEdyZWV0aW5ncyA+PiBrdy5jICYmCkBAIC02Niw3ICs2Niw3IEBACiAJCXN2biBjb21taXQgLW0gIlByb3BzZXQgSWQiICYmCiAJY2QgLi4nCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgZ2l0LXN2bicgImdpdC1zdm4gaW5pdCAkc3ZucmVwbyIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgZ2l0LXN2bicgJ2dpdC1zdm4gaW5pdCAiJHN2bnJlcG8iJwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggcmV2aXNpb25zIGZyb20gc3ZuJyAnZ2l0LXN2biBmZXRjaCcKIAogbmFtZT0ndGVzdCBzdm46a2V5d29yZHMgaWdub3JpbmcnCkBAIC05MCw5ICs5MCw5IEBACiAJIGNkIC4uJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBhbmQgcHVsbCBsYXRlc3QgZnJvbSBzdm4gYW5kIGNoZWNrb3V0IGEgbmV3IHdjJyBcCi0JImdpdC1zdm4gZmV0Y2ggJiYKKwknZ2l0LXN2biBmZXRjaCAmJgogCSBnaXQgcHVsbCAuIHJlbW90ZXMvZ2l0LXN2biAmJgotCSBzdm4gY28gJHN2bnJlcG8gbmV3X3djIgorCSBzdm4gY28gIiRzdm5yZXBvIiBuZXdfd2MnCiAKIGZvciBpIGluIGNybGYgbmVfY3JsZiBsZiBuZV9sZiBjciBuZV9jciBlbXB0eV9jciBlbXB0eV9sZiBlbXB0eSBlbXB0eV9jcmxmCiBkbwpkaWZmIC0tZ2l0IGEvdC90OTEwMi1naXQtc3ZuLWRlZXAtcm1kaXIuc2ggYi90L3Q5MTAyLWdpdC1zdm4tZGVlcC1ybWRpci5zaAppbmRleCA0ZTA4MDgzLi4wZTdjZTM0IDEwMDc1NQotLS0gYS90L3Q5MTAyLWdpdC1zdm4tZGVlcC1ybWRpci5zaAorKysgYi90L3Q5MTAyLWdpdC1zdm4tZGVlcC1ybWRpci5zaApAQCAtMiwyOSArMiwyOSBAQAogdGVzdF9kZXNjcmlwdGlvbj0nZ2l0LXN2biBybWRpcicKIC4gLi9saWItZ2l0LXN2bi5zaAogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIHJlcG8nICIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgcmVwbycgJwogCW1rZGlyIGltcG9ydCAmJgogCWNkIGltcG9ydCAmJgogCW1rZGlyIC1wIGRlZXBseS9uZXN0ZWQvZGlyZWN0b3J5L251bWJlci8xICYmCiAJbWtkaXIgLXAgZGVlcGx5L25lc3RlZC9kaXJlY3RvcnkvbnVtYmVyLzIgJiYKIAllY2hvIGZvbyA+IGRlZXBseS9uZXN0ZWQvZGlyZWN0b3J5L251bWJlci8xL2ZpbGUgJiYKIAllY2hvIGZvbyA+IGRlZXBseS9uZXN0ZWQvZGlyZWN0b3J5L251bWJlci8yL2Fub3RoZXIgJiYKLQlzdm4gaW1wb3J0IC1tICdpbXBvcnQgZm9yIGdpdC1zdm4nIC4gJHN2bnJlcG8gJiYKKwlzdm4gaW1wb3J0IC1tICJpbXBvcnQgZm9yIGdpdC1zdm4iIC4gIiRzdm5yZXBvIiAmJgogCWNkIC4uCi0JIgorCScKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnbWlycm9yIHZpYSBnaXQtc3ZuJyAiCi0JZ2l0LXN2biBpbml0ICRzdm5yZXBvICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXJyb3IgdmlhIGdpdC1zdm4nICcKKwlnaXQtc3ZuIGluaXQgIiRzdm5yZXBvIiAmJgogCWdpdC1zdm4gZmV0Y2ggJiYKIAlnaXQgY2hlY2tvdXQgLWYgLWIgdGVzdC1ybWRpciByZW1vdGVzL2dpdC1zdm4KLQkiCisJJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdUcnkgYSBjb21taXQgb24gcm1kaXInICIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1RyeSBhIGNvbW1pdCBvbiBybWRpcicgJwogCWdpdCBybSAtZiBkZWVwbHkvbmVzdGVkL2RpcmVjdG9yeS9udW1iZXIvMi9hbm90aGVyICYmCi0JZ2l0IGNvbW1pdCAtYSAtbSAncmVtb3ZlIGFub3RoZXInICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAicmVtb3ZlIGFub3RoZXIiICYmCiAJZ2l0LXN2biBzZXQtdHJlZSAtLXJtZGlyIEhFQUQgJiYKLQlzdm4gbHMgLVIgJHN2bnJlcG8gfCBncmVwIF5kZWVwbHkvbmVzdGVkL2RpcmVjdG9yeS9udW1iZXIvMQotCSIKKwlzdm4gbHMgLVIgIiRzdm5yZXBvIiB8IGdyZXAgXmRlZXBseS9uZXN0ZWQvZGlyZWN0b3J5L251bWJlci8xCisJJwogCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEwMy1naXQtc3ZuLXRyYWNrZWQtZGlyZWN0b3J5LXJlbW92ZWQuc2ggYi90L3Q5MTAzLWdpdC1zdm4tdHJhY2tlZC1kaXJlY3RvcnktcmVtb3ZlZC5zaAppbmRleCAwZjBiMGZkLi45ZmZkODQ1IDEwMDc1NQotLS0gYS90L3Q5MTAzLWdpdC1zdm4tdHJhY2tlZC1kaXJlY3RvcnktcmVtb3ZlZC5zaAorKysgYi90L3Q5MTAzLWdpdC1zdm4tdHJhY2tlZC1kaXJlY3RvcnktcmVtb3ZlZC5zaApAQCAtMTAsMzAgKzEwLDMwIEBACiAJbWtkaXIgaW1wb3J0ICYmCiAJbWtkaXIgaW1wb3J0L3RydW5rICYmCiAJZWNobyBoZWxsbyA+PiBpbXBvcnQvdHJ1bmsvUkVBRE1FICYmCi0Jc3ZuIGltcG9ydCAtbSBpbml0aWFsIGltcG9ydCAkc3ZucmVwbyAmJgorCXN2biBpbXBvcnQgLW0gaW5pdGlhbCBpbXBvcnQgIiRzdm5yZXBvIiAmJgogCXJtIC1yZiBpbXBvcnQgJiYKLQlzdm4gY28gJHN2bnJlcG8vdHJ1bmsgdHJ1bmsgJiYKKwlzdm4gY28gIiRzdm5yZXBvIi90cnVuayB0cnVuayAmJgogCWVjaG8gYnllIGJ5ZSA+PiB0cnVuay9SRUFETUUgJiYKLQlzdm4gcm0gLW0gImdvbmUiICRzdm5yZXBvL3RydW5rICYmCisJc3ZuIHJtIC1tICJnb25lIiAiJHN2bnJlcG8iL3RydW5rICYmCiAJcm0gLXJmIHRydW5rICYmCiAJbWtkaXIgdHJ1bmsgJiYKIAllY2hvICJuZXciID4gdHJ1bmsvRk9MTE9XTUUgJiYKLQlzdm4gaW1wb3J0IC1tICJuZXcgdHJ1bmsiIHRydW5rICRzdm5yZXBvL3RydW5rCisJc3ZuIGltcG9ydCAtbSAibmV3IHRydW5rIiB0cnVuayAiJHN2bnJlcG8iL3RydW5rCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHJlcG8gd2l0aCBnaXQnICcKLQlnaXQgc3ZuIGNsb25lIC1zICRzdm5yZXBvIHggJiYKKwlnaXQgc3ZuIGNsb25lIC1zICIkc3ZucmVwbyIgeCAmJgogCXRlc3QgLWYgeC9GT0xMT1dNRSAmJgogCXRlc3QgISAtZiB4L1JFQURNRQogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWtlIHN1cmUgcjIgc3RpbGwgaGFzIG9sZCBmaWxlJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWtlIHN1cmUgcjIgc3RpbGwgaGFzIG9sZCBmaWxlJyAiCiAJY2QgeCAmJgotCQl0ZXN0IC1uICIkKGdpdCBzdm4gZmluZC1yZXYgcjEpIiAmJgotCQlnaXQgcmVzZXQgLS1oYXJkICQoZ2l0IHN2biBmaW5kLXJldiByMSkgJiYKKwkJdGVzdCAtbiBcIlwkKGdpdCBzdm4gZmluZC1yZXYgcjEpXCIgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBcJChnaXQgc3ZuIGZpbmQtcmV2IHIxKSAmJgogCQl0ZXN0IC1mIFJFQURNRSAmJgogCQl0ZXN0ICEgLWYgRk9MTE9XTUUgJiYKLQkJdGVzdCB4JChnaXQgc3ZuIGZpbmQtcmV2IHIyKSA9IHgKLScKKwkJdGVzdCB4XCQoZ2l0IHN2biBmaW5kLXJldiByMikgPSB4CisiCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEwNC1naXQtc3ZuLWZvbGxvdy1wYXJlbnQuc2ggYi90L3Q5MTA0LWdpdC1zdm4tZm9sbG93LXBhcmVudC5zaAppbmRleCA3YmE3NjMwLi40ZDk2NGUyIDEwMDc1NQotLS0gYS90L3Q5MTA0LWdpdC1zdm4tZm9sbG93LXBhcmVudC5zaAorKysgYi90L3Q5MTA0LWdpdC1zdm4tZm9sbG93LXBhcmVudC5zaApAQCAtNiwxNjUgKzYsMTY1IEBACiB0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtc3ZuIGZldGNoaW5nJwogLiAuL2xpYi1naXQtc3ZuLnNoCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgcmVwbycgIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSByZXBvJyAnCiAJbWtkaXIgaW1wb3J0ICYmCiAJY2QgaW1wb3J0ICYmCiAJbWtkaXIgLXAgdHJ1bmsgJiYKIAllY2hvIGhlbGxvID4gdHJ1bmsvcmVhZG1lICYmCi0Jc3ZuIGltcG9ydCAtbSAnaW5pdGlhbCcgLiAkc3ZucmVwbyAmJgorCXN2biBpbXBvcnQgLW0gImluaXRpYWwiIC4gIiRzdm5yZXBvIiAmJgogCWNkIC4uICYmCi0Jc3ZuIGNvICRzdm5yZXBvIHdjICYmCisJc3ZuIGNvICIkc3ZucmVwbyIgd2MgJiYKIAljZCB3YyAmJgogCWVjaG8gd29ybGQgPj4gdHJ1bmsvcmVhZG1lICYmCiAJcG9rZSB0cnVuay9yZWFkbWUgJiYKLQlzdm4gY29tbWl0IC1tICdhbm90aGVyIGNvbW1pdCcgJiYKKwlzdm4gY29tbWl0IC1tICJhbm90aGVyIGNvbW1pdCIgJiYKIAlzdm4gdXAgJiYKIAlzdm4gbXYgdHJ1bmsgdGh1bmsgJiYKIAllY2hvIGdvb2RieWUgPj4gdGh1bmsvcmVhZG1lICYmCiAJcG9rZSB0aHVuay9yZWFkbWUgJiYKLQlzdm4gY29tbWl0IC1tICdieWUgbm93JyAmJgorCXN2biBjb21taXQgLW0gImJ5ZSBub3ciICYmCiAJY2QgLi4KLQkiCisJJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IGFuZCBmZXRjaCBhIG1vdmVkIGRpcmVjdG9yeScgIgotCWdpdC1zdm4gaW5pdCAtLW1pbmltaXplLXVybCAtaSB0aHVuayAkc3ZucmVwby90aHVuayAmJgordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBhbmQgZmV0Y2ggYSBtb3ZlZCBkaXJlY3RvcnknICcKKwlnaXQtc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLWkgdGh1bmsgIiRzdm5yZXBvIi90aHVuayAmJgogCWdpdC1zdm4gZmV0Y2ggLWkgdGh1bmsgJiYKLQl0ZXN0IFwiXGBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy90aHVua0AyXGBcIiBcCi0gICAgICAgICAgID0gXCJcYGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL3RodW5rfjFcYFwiICYmCi0gICAgICAgIHRlc3QgXCJcYGdpdCBjYXQtZmlsZSBibG9iIHJlZnMvcmVtb3Rlcy90aHVuazpyZWFkbWUgfFwKLSAgICAgICAgICAgICAgICAgc2VkIC1uIC1lICczcCdcYFwiID0gZ29vZGJ5ZSAmJgotCXRlc3QgLXogXCJcYGdpdCBjb25maWcgLS1nZXQgc3ZuLXJlbW90ZS5zdm4uZmV0Y2ggXAotCSAgICAgICAgICdedHJ1bms6cmVmcy9yZW1vdGVzL3RodW5rQDIkJ1xgXCIKLQkiCisJdGVzdCAiYGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL3RodW5rQDJgIiBcCisgICAgICAgICAgID0gImBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy90aHVua34xYCIgJiYKKyAgICAgICAgdGVzdCAiYGdpdCBjYXQtZmlsZSBibG9iIHJlZnMvcmVtb3Rlcy90aHVuazpyZWFkbWUgfFwKKyAgICAgICAgICAgICAgICAgc2VkIC1uIC1lICIzcCJgIiA9IGdvb2RieWUgJiYKKwl0ZXN0IC16ICJgZ2l0IGNvbmZpZyAtLWdldCBzdm4tcmVtb3RlLnN2bi5mZXRjaCBcCisJICAgICAgICAgIl50cnVuazpyZWZzL3JlbW90ZXMvdGh1bmtAMiQiYCIKKwknCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgYW5kIGZldGNoIGZyb20gb25lIHN2bi1yZW1vdGUnICIKLSAgICAgICAgZ2l0IGNvbmZpZyBzdm4tcmVtb3RlLnN2bi51cmwgJHN2bnJlcG8gJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgYW5kIGZldGNoIGZyb20gb25lIHN2bi1yZW1vdGUnICcKKyAgICAgICAgZ2l0IGNvbmZpZyBzdm4tcmVtb3RlLnN2bi51cmwgIiRzdm5yZXBvIiAmJgogICAgICAgICBnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLmZldGNoIFwKICAgICAgICAgICB0cnVuazpyZWZzL3JlbW90ZXMvc3ZuL3RydW5rICYmCiAgICAgICAgIGdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5zdm4uZmV0Y2ggXAogICAgICAgICAgIHRodW5rOnJlZnMvcmVtb3Rlcy9zdm4vdGh1bmsgJiYKICAgICAgICAgZ2l0LXN2biBmZXRjaCAtaSBzdm4vdGh1bmsgJiYKLQl0ZXN0IFwiXGBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9zdm4vdHJ1bmtcYFwiIFwKLSAgICAgICAgICAgPSBcIlxgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvc3ZuL3RodW5rfjFcYFwiICYmCi0gICAgICAgIHRlc3QgXCJcYGdpdCBjYXQtZmlsZSBibG9iIHJlZnMvcmVtb3Rlcy9zdm4vdGh1bms6cmVhZG1lIHxcCi0gICAgICAgICAgICAgICAgIHNlZCAtbiAtZSAnM3AnXGBcIiA9IGdvb2RieWUKLSAgICAgICAgIgorCXRlc3QgImBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9zdm4vdHJ1bmtgIiBcCisgICAgICAgICAgID0gImBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9zdm4vdGh1bmt+MWAiICYmCisgICAgICAgIHRlc3QgImBnaXQgY2F0LWZpbGUgYmxvYiByZWZzL3JlbW90ZXMvc3ZuL3RodW5rOnJlYWRtZSB8XAorICAgICAgICAgICAgICAgICBzZWQgLW4gLWUgIjNwImAiID0gZ29vZGJ5ZQorICAgICAgICAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvbGxvdyBkZWxldGVkIHBhcmVudCcgIgotICAgICAgICAoc3ZuIGNwIC1tICdyZXN1cnJlY3RpbmcgdHJ1bmsgYXMganVuaycgXAotICAgICAgICAgICAgICAgJHN2bnJlcG8vdHJ1bmtAMiAkc3ZucmVwby9qdW5rIHx8Ci0gICAgICAgICBzdm4gY3AgLW0gJ3Jlc3VycmVjdGluZyB0cnVuayBhcyBqdW5rJyBcCi0gICAgICAgICAgICAgICAtcjIgJHN2bnJlcG8vdHJ1bmsgJHN2bnJlcG8vanVuaykgJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvbGxvdyBkZWxldGVkIHBhcmVudCcgJworICAgICAgICAoc3ZuIGNwIC1tICJyZXN1cnJlY3RpbmcgdHJ1bmsgYXMganVuayIgXAorICAgICAgICAgICAgICAgIiRzdm5yZXBvIi90cnVua0AyICIkc3ZucmVwbyIvanVuayB8fAorICAgICAgICAgc3ZuIGNwIC1tICJyZXN1cnJlY3RpbmcgdHJ1bmsgYXMganVuayIgXAorICAgICAgICAgICAgICAgLXIyICIkc3ZucmVwbyIvdHJ1bmsgIiRzdm5yZXBvIi9qdW5rKSAmJgogICAgICAgICBnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLmZldGNoIFwKICAgICAgICAgICBqdW5rOnJlZnMvcmVtb3Rlcy9zdm4vanVuayAmJgogICAgICAgICBnaXQtc3ZuIGZldGNoIC1pIHN2bi90aHVuayAmJgogICAgICAgICBnaXQtc3ZuIGZldGNoIC1pIHN2bi9qdW5rICYmCi0gICAgICAgIHRlc3QgLXogXCJcYGdpdCBkaWZmIHN2bi9qdW5rIHN2bi90cnVua1xgXCIgJiYKLSAgICAgICAgdGVzdCBcIlxgZ2l0IG1lcmdlLWJhc2Ugc3ZuL2p1bmsgc3ZuL3RydW5rXGBcIiBcCi0gICAgICAgICAgID0gXCJcYGdpdCByZXYtcGFyc2Ugc3ZuL3RydW5rXGBcIgotICAgICAgICAiCisgICAgICAgIHRlc3QgLXogImBnaXQgZGlmZiBzdm4vanVuayBzdm4vdHJ1bmtgIiAmJgorICAgICAgICB0ZXN0ICJgZ2l0IG1lcmdlLWJhc2Ugc3ZuL2p1bmsgc3ZuL3RydW5rYCIgXAorICAgICAgICAgICA9ICJgZ2l0IHJldi1wYXJzZSBzdm4vdHJ1bmtgIgorICAgICAgICAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvbGxvdyBsYXJnZXIgcGFyZW50JyAiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb2xsb3cgbGFyZ2VyIHBhcmVudCcgJwogICAgICAgICBta2RpciAtcCBpbXBvcnQvdHJ1bmsvdGh1bmsvYnVtcC90aHVkICYmCiAgICAgICAgIGVjaG8gaGkgPiBpbXBvcnQvdHJ1bmsvdGh1bmsvYnVtcC90aHVkL2ZpbGUgJiYKLSAgICAgICAgc3ZuIGltcG9ydCAtbSAnaW1wb3J0IGEgbGFyZ2VyIHBhcmVudCcgaW1wb3J0ICRzdm5yZXBvL2xhcmdlci1wYXJlbnQgJiYKLSAgICAgICAgc3ZuIGNwIC1tICdoaScgJHN2bnJlcG8vbGFyZ2VyLXBhcmVudCAkc3ZucmVwby9hbm90aGVyLWxhcmdlciAmJgorICAgICAgICBzdm4gaW1wb3J0IC1tICJpbXBvcnQgYSBsYXJnZXIgcGFyZW50IiBpbXBvcnQgIiRzdm5yZXBvIi9sYXJnZXItcGFyZW50ICYmCisgICAgICAgIHN2biBjcCAtbSAiaGkiICIkc3ZucmVwbyIvbGFyZ2VyLXBhcmVudCAiJHN2bnJlcG8iL2Fub3RoZXItbGFyZ2VyICYmCiAgICAgICAgIGdpdC1zdm4gaW5pdCAtLW1pbmltaXplLXVybCAtaSBsYXJnZXIgXAotICAgICAgICAgICRzdm5yZXBvL2Fub3RoZXItbGFyZ2VyL3RydW5rL3RodW5rL2J1bXAvdGh1ZCAmJgorICAgICAgICAgICIkc3ZucmVwbyIvYW5vdGhlci1sYXJnZXIvdHJ1bmsvdGh1bmsvYnVtcC90aHVkICYmCiAgICAgICAgIGdpdC1zdm4gZmV0Y2ggLWkgbGFyZ2VyICYmCiAgICAgICAgIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL2xhcmdlciAmJgogICAgICAgICBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IFwKICAgICAgICAgICAgcmVmcy9yZW1vdGVzL2xhcmdlci1wYXJlbnQvdHJ1bmsvdGh1bmsvYnVtcC90aHVkICYmCi0gICAgICAgIHRlc3QgXCJcYGdpdCBtZXJnZS1iYXNlIFwKKyAgICAgICAgdGVzdCAiYGdpdCBtZXJnZS1iYXNlIFwKICAgICAgICAgICAgICAgICAgcmVmcy9yZW1vdGVzL2xhcmdlci1wYXJlbnQvdHJ1bmsvdGh1bmsvYnVtcC90aHVkIFwKLSAgICAgICAgICAgICAgICAgcmVmcy9yZW1vdGVzL2xhcmdlclxgXCIgPSBcCi0gICAgICAgICAgICAgXCJcYGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL2xhcmdlclxgXCIKKyAgICAgICAgICAgICAgICAgcmVmcy9yZW1vdGVzL2xhcmdlcmAiID0gXAorICAgICAgICAgICAgICJgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvbGFyZ2VyYCIKICAgICAgICAgdHJ1ZQotICAgICAgICAiCisgICAgICAgICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9sbG93IGhpZ2hlci1sZXZlbCBwYXJlbnQnICIKLSAgICAgICAgc3ZuIG1rZGlyIC1tICdmb2xsb3cgaGlnaGVyLWxldmVsIHBhcmVudCcgJHN2bnJlcG8vYmxvYiAmJgotICAgICAgICBzdm4gY28gJHN2bnJlcG8vYmxvYiBibG9iICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb2xsb3cgaGlnaGVyLWxldmVsIHBhcmVudCcgJworICAgICAgICBzdm4gbWtkaXIgLW0gImZvbGxvdyBoaWdoZXItbGV2ZWwgcGFyZW50IiAiJHN2bnJlcG8iL2Jsb2IgJiYKKyAgICAgICAgc3ZuIGNvICIkc3ZucmVwbyIvYmxvYiBibG9iICYmCiAgICAgICAgIGNkIGJsb2IgJiYKICAgICAgICAgICAgICAgICBlY2hvIGhpID4gaGkgJiYKICAgICAgICAgICAgICAgICBzdm4gYWRkIGhpICYmCi0gICAgICAgICAgICAgICAgc3ZuIGNvbW1pdCAtbSAnaGloaScgJiYKKyAgICAgICAgICAgICAgICBzdm4gY29tbWl0IC1tICJoaWhpIiAmJgogICAgICAgICAgICAgICAgIGNkIC4uCi0gICAgICAgIHN2biBta2RpciAtbSAnbmV3IGdsb2IgYXQgdG9wIGxldmVsJyAkc3ZucmVwby9nbG9iICYmCi0gICAgICAgIHN2biBtdiAtbSAnbW92ZSBibG9iIGRvd24gYSBsZXZlbCcgJHN2bnJlcG8vYmxvYiAkc3ZucmVwby9nbG9iL2Jsb2IgJiYKLSAgICAgICAgZ2l0LXN2biBpbml0IC0tbWluaW1pemUtdXJsIC1pIGJsb2IgJHN2bnJlcG8vZ2xvYi9ibG9iICYmCisgICAgICAgIHN2biBta2RpciAtbSAibmV3IGdsb2IgYXQgdG9wIGxldmVsIiAiJHN2bnJlcG8iL2dsb2IgJiYKKyAgICAgICAgc3ZuIG12IC1tICJtb3ZlIGJsb2IgZG93biBhIGxldmVsIiAiJHN2bnJlcG8iL2Jsb2IgIiRzdm5yZXBvIi9nbG9iL2Jsb2IgJiYKKyAgICAgICAgZ2l0LXN2biBpbml0IC0tbWluaW1pemUtdXJsIC1pIGJsb2IgIiRzdm5yZXBvIi9nbG9iL2Jsb2IgJiYKICAgICAgICAgZ2l0LXN2biBmZXRjaCAtaSBibG9iCi0gICAgICAgICIKKyAgICAgICAgJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdmb2xsb3cgZGVsZXRlZCBkaXJlY3RvcnknICIKLQlzdm4gbXYgLW0gJ2J5ZSEnICRzdm5yZXBvL2dsb2IvYmxvYi9oaSAkc3ZucmVwby9nbG9iL2Jsb2IvYnllICYmCi0Jc3ZuIHJtIC1tICdyZW1vdmUgZ2xvYicgJHN2bnJlcG8vZ2xvYiAmJgotCWdpdC1zdm4gaW5pdCAtLW1pbmltaXplLXVybCAtaSBnbG9iICRzdm5yZXBvL2dsb2IgJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvbGxvdyBkZWxldGVkIGRpcmVjdG9yeScgJworCXN2biBtdiAtbSAiYnllISIgIiRzdm5yZXBvIi9nbG9iL2Jsb2IvaGkgIiRzdm5yZXBvIi9nbG9iL2Jsb2IvYnllICYmCisJc3ZuIHJtIC1tICJyZW1vdmUgZ2xvYiIgIiRzdm5yZXBvIi9nbG9iICYmCisJZ2l0LXN2biBpbml0IC0tbWluaW1pemUtdXJsIC1pIGdsb2IgIiRzdm5yZXBvIi9nbG9iICYmCiAJZ2l0LXN2biBmZXRjaCAtaSBnbG9iICYmCi0JdGVzdCBcIlxgZ2l0IGNhdC1maWxlIGJsb2IgcmVmcy9yZW1vdGVzL2dsb2I6YmxvYi9ieWVcYFwiID0gaGkgJiYKLQl0ZXN0IFwiXGBnaXQgbHMtdHJlZSByZWZzL3JlbW90ZXMvZ2xvYiB8IHdjIC1sIFxgXCIgLWVxIDEKLQkiCisJdGVzdCAiYGdpdCBjYXQtZmlsZSBibG9iIHJlZnMvcmVtb3Rlcy9nbG9iOmJsb2IvYnllYCIgPSBoaSAmJgorCXRlc3QgImBnaXQgbHMtdHJlZSByZWZzL3JlbW90ZXMvZ2xvYiB8IHdjIC1sIGAiIC1lcSAxCisJJwogCiAjIHJlZjogcjkyNzAgb2YgdGhlIFN1YnZlcnNpb24gcmVwb3NpdG9yeTogKGh0dHA6Ly9zdm4uY29sbGFiLm5ldC9yZXBvcy9zdm4pCiAjIGluIHRydW5rL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9wZXJsCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdmb2xsb3ctcGFyZW50IGF2b2lkcyBkZWxldGluZyByZWxldmFudCBpbmZvJyAiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb2xsb3ctcGFyZW50IGF2b2lkcyBkZWxldGluZyByZWxldmFudCBpbmZvJyAnCiAJbWtkaXIgLXAgaW1wb3J0L3RydW5rL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9wZXJsL3QgJiYKIAlmb3IgaSBpbiBhIGIgYyA7IGRvIFwKLQkgIGVjaG8gXCRpID4gaW1wb3J0L3RydW5rL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9wZXJsL1wkaS5wbSAmJgotCSAgZWNobyBfXCRpID4gaW1wb3J0L3RydW5rL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9wZXJsL3QvXCRpLnQ7IFwKKwkgIGVjaG8gJGkgPiBpbXBvcnQvdHJ1bmsvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3BlcmwvJGkucG0gJiYKKwkgIGVjaG8gXyRpID4gaW1wb3J0L3RydW5rL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9wZXJsL3QvJGkudDsgXAogCWRvbmUgJiYKLQkgIGVjaG8gJ2JhZCBkZWxldGUgdGVzdCcgPiBcCisJICBlY2hvICJiYWQgZGVsZXRlIHRlc3QiID4gXAogCSAgIGltcG9ydC90cnVuay9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcGVybC90L2xhcmdlci1wYXJlbnQgJiYKLQkgIGVjaG8gJ2JhZCBkZWxldGUgdGVzdCAyJyA+IFwKKwkgIGVjaG8gImJhZCBkZWxldGUgdGVzdCAyIiA+IFwKIAkgICBpbXBvcnQvdHJ1bmsvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3BlcmwvYW5vdGhlci1sYXJnZXIgJiYKIAljZCBpbXBvcnQgJiYKLQkgIHN2biBpbXBvcnQgLW0gJ3I5MjcwIHRlc3QnIC4gJHN2bnJlcG8vcjkyNzAgJiYKKwkgIHN2biBpbXBvcnQgLW0gInI5MjcwIHRlc3QiIC4gIiRzdm5yZXBvIi9yOTI3MCAmJgogCWNkIC4uICYmCi0Jc3ZuIGNvICRzdm5yZXBvL3I5MjcwL3RydW5rL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9wZXJsIHI5MjcwICYmCisJc3ZuIGNvICIkc3ZucmVwbyIvcjkyNzAvdHJ1bmsvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3BlcmwgcjkyNzAgJiYKIAljZCByOTI3MCAmJgogCSAgc3ZuIG1rZGlyIG5hdGl2ZSAmJgogCSAgc3ZuIG12IHQgbmF0aXZlL3QgJiYKLQkgIGZvciBpIGluIGEgYiBjOyBkbyBzdm4gbXYgXCRpLnBtIG5hdGl2ZS9cJGkucG07IGRvbmUgJiYKKwkgIGZvciBpIGluIGEgYiBjOyBkbyBzdm4gbXYgJGkucG0gbmF0aXZlLyRpLnBtOyBkb25lICYmCiAJICBlY2hvIHogPj4gbmF0aXZlL3QvYy50ICYmCiAJICBwb2tlIG5hdGl2ZS90L2MudCAmJgotCSAgc3ZuIGNvbW1pdCAtbSAncmVvcmcgdGVzdCcgJiYKKwkgIHN2biBjb21taXQgLW0gInJlb3JnIHRlc3QiICYmCiAJY2QgLi4gJiYKIAlnaXQtc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLWkgcjkyNzAtdCBcCi0JICAkc3ZucmVwby9yOTI3MC90cnVuay9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcGVybC9uYXRpdmUvdCAmJgorCSAgIiRzdm5yZXBvIi9yOTI3MC90cnVuay9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcGVybC9uYXRpdmUvdCAmJgogCWdpdC1zdm4gZmV0Y2ggLWkgcjkyNzAtdCAmJgotCXRlc3QgXGBnaXQgcmV2LWxpc3QgcjkyNzAtdCB8IHdjIC1sXGAgLWVxIDIgJiYKLQl0ZXN0IFwiXGBnaXQgbHMtdHJlZSAtLW5hbWUtb25seSByOTI3MC10fjFcYFwiID0gXAotCSAgICAgXCJcYGdpdCBscy10cmVlIC0tbmFtZS1vbmx5IHI5MjcwLXRcYFwiCi0JIgorCXRlc3QgYGdpdCByZXYtbGlzdCByOTI3MC10IHwgd2MgLWxgIC1lcSAyICYmCisJdGVzdCAiYGdpdCBscy10cmVlIC0tbmFtZS1vbmx5IHI5MjcwLXR+MWAiID0gXAorCSAgICAgImBnaXQgbHMtdHJlZSAtLW5hbWUtb25seSByOTI3MC10YCIKKwknCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInRyYWNrIGluaXRpYWwgY2hhbmdlIGlmIGl0IHdhcyBvbmx5IG1hZGUgdG8gcGFyZW50IiAiCi0Jc3ZuIGNwIC1tICd3aGVlZSEnICRzdm5yZXBvL3I5MjcwL3RydW5rICRzdm5yZXBvL3I5MjcwL2RydW5rICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJ0cmFjayBpbml0aWFsIGNoYW5nZSBpZiBpdCB3YXMgb25seSBtYWRlIHRvIHBhcmVudCIgJworCXN2biBjcCAtbSAid2hlZWUhIiAiJHN2bnJlcG8iL3I5MjcwL3RydW5rICIkc3ZucmVwbyIvcjkyNzAvZHJ1bmsgJiYKIAlnaXQtc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLWkgcjkyNzAtZCBcCi0JICAkc3ZucmVwby9yOTI3MC9kcnVuay9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcGVybC9uYXRpdmUvdCAmJgorCSAgIiRzdm5yZXBvIi9yOTI3MC9kcnVuay9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcGVybC9uYXRpdmUvdCAmJgogCWdpdC1zdm4gZmV0Y2ggLWkgcjkyNzAtZCAmJgotCXRlc3QgXGBnaXQgcmV2LWxpc3QgcjkyNzAtZCB8IHdjIC1sXGAgLWVxIDMgJiYKLQl0ZXN0IFwiXGBnaXQgbHMtdHJlZSAtLW5hbWUtb25seSByOTI3MC10XGBcIiA9IFwKLQkgICAgIFwiXGBnaXQgbHMtdHJlZSAtLW5hbWUtb25seSByOTI3MC1kXGBcIiAmJgotCXRlc3QgXCJcYGdpdCByZXYtcGFyc2UgcjkyNzAtdFxgXCIgPSBcCi0JICAgICBcIlxgZ2l0IHJldi1wYXJzZSByOTI3MC1kfjFcYFwiCi0JIgorCXRlc3QgYGdpdCByZXYtbGlzdCByOTI3MC1kIHwgd2MgLWxgIC1lcSAzICYmCisJdGVzdCAiYGdpdCBscy10cmVlIC0tbmFtZS1vbmx5IHI5MjcwLXRgIiA9IFwKKwkgICAgICJgZ2l0IGxzLXRyZWUgLS1uYW1lLW9ubHkgcjkyNzAtZGAiICYmCisJdGVzdCAiYGdpdCByZXYtcGFyc2UgcjkyNzAtdGAiID0gXAorCSAgICAgImBnaXQgcmV2LXBhcnNlIHI5MjcwLWR+MWAiCisJJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICJ0cmFjayBtdWx0aS1wYXJlbnQgcGF0aHMiICIKLQlzdm4gY3AgLW0gJ3Jlc3VycmVjdCAvZ2xvYicgJHN2bnJlcG8vcjkyNzAgJHN2bnJlcG8vZ2xvYiAmJgordGVzdF9leHBlY3Rfc3VjY2VzcyAidHJhY2sgbXVsdGktcGFyZW50IHBhdGhzIiAnCisJc3ZuIGNwIC1tICJyZXN1cnJlY3QgL2dsb2IiICIkc3ZucmVwbyIvcjkyNzAgIiRzdm5yZXBvIi9nbG9iICYmCiAJZ2l0LXN2biBtdWx0aS1mZXRjaCAmJgotCXRlc3QgXGBnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvcmVtb3Rlcy9nbG9iIHwgXAotCSAgICAgICBncmVwICdecGFyZW50ICcgfCB3YyAtbFxgIC1lcSAyCi0JIgorCXRlc3QgYGdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9yZW1vdGVzL2dsb2IgfCBcCisJICAgICAgIGdyZXAgIl5wYXJlbnQgIiB8IHdjIC1sYCAtZXEgMgorCScKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAibXVsdGktZmV0Y2ggY29udGludWVzIHRvIHdvcmsiICIKIAlnaXQtc3ZuIG11bHRpLWZldGNoCiAJIgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICJtdWx0aS1mZXRjaCB3b3JrcyBvZmYgYSAnY2xlYW4nIHJlcG9zaXRvcnkiICIKLQlybSAtciAkR0lUX0RJUi9zdm4gJEdJVF9ESVIvcmVmcy9yZW1vdGVzICRHSVRfRElSL2xvZ3MgJiYKLQlta2RpciAkR0lUX0RJUi9zdm4gJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIm11bHRpLWZldGNoIHdvcmtzIG9mZiBhICdjbGVhbicgcmVwb3NpdG9yeSIgJworCXJtIC1yICIkR0lUX0RJUi9zdm4iICIkR0lUX0RJUi9yZWZzL3JlbW90ZXMiICIkR0lUX0RJUi9sb2dzIiAmJgorCW1rZGlyICIkR0lUX0RJUi9zdm4iICYmCiAJZ2l0LXN2biBtdWx0aS1mZXRjaAotCSIKKwknCiAKIHRlc3RfZGVidWcgJ2dpdGsgLS1hbGwgJicKIApkaWZmIC0tZ2l0IGEvdC90OTEwNS1naXQtc3ZuLWNvbW1pdC1kaWZmLnNoIGIvdC90OTEwNS1naXQtc3ZuLWNvbW1pdC1kaWZmLnNoCmluZGV4IDMxOGUxNzIuLjYzMjMwMzYgMTAwNzU1Ci0tLSBhL3QvdDkxMDUtZ2l0LXN2bi1jb21taXQtZGlmZi5zaAorKysgYi90L3Q5MTA1LWdpdC1zdm4tY29tbWl0LWRpZmYuc2gKQEAgLTQsMTggKzQsMTggQEAKIHRlc3RfZGVzY3JpcHRpb249J2dpdC1zdm4gY29tbWl0LWRpZmYnCiAuIC4vbGliLWdpdC1zdm4uc2gKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSByZXBvJyAiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIHJlcG8nICcKIAlta2RpciBpbXBvcnQgJiYKIAljZCBpbXBvcnQgJiYKIAllY2hvIGhlbGxvID4gcmVhZG1lICYmCi0Jc3ZuIGltcG9ydCAtbSAnaW5pdGlhbCcgLiAkc3ZucmVwbyAmJgorCXN2biBpbXBvcnQgLW0gImluaXRpYWwiIC4gIiRzdm5yZXBvIiAmJgogCWNkIC4uICYmCiAJZWNobyBoZWxsbyA+IHJlYWRtZSAmJgogCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgcmVhZG1lICYmCi0JZ2l0IGNvbW1pdCAtYSAtbSAnaW5pdGlhbCcgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJpbml0aWFsIiAmJgogCWVjaG8gd29ybGQgPj4gcmVhZG1lICYmCi0JZ2l0IGNvbW1pdCAtYSAtbSAnYW5vdGhlcicKLQkiCisJZ2l0IGNvbW1pdCAtYSAtbSAiYW5vdGhlciIKKwknCiAKIGhlYWQ9YGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRF4wYAogcHJldj1gZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEXjFgCkBAIC0yNCwyMCArMjQsMjAgQEAKICMgY29tbWl0LCBzbyBvbmx5IGEgYmFzaWMgdGVzdCBvZiBmdW5jdGlvbmFsaXR5IGlzIG5lZWRlZCBzaW5jZSB3ZSd2ZQogIyBhbHJlYWR5IHRlc3RlZCBjb21taXQgZXh0ZW5zaXZlbHkgZWxzZXdoZXJlCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgdGhlIGNvbW1pdC1kaWZmIGNvbW1hbmQnICIKLQl0ZXN0IC1uICckcHJldicgJiYgdGVzdCAtbiAnJGhlYWQnICYmCi0JZ2l0LXN2biBjb21taXQtZGlmZiAtcjEgJyRwcmV2JyAnJGhlYWQnICckc3ZucmVwbycgJiYKLQlzdm4gY28gJHN2bnJlcG8gd2MgJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgdGhlIGNvbW1pdC1kaWZmIGNvbW1hbmQnICcKKwl0ZXN0IC1uICIkcHJldiIgJiYgdGVzdCAtbiAiJGhlYWQiICYmCisJZ2l0LXN2biBjb21taXQtZGlmZiAtcjEgIiRwcmV2IiAiJGhlYWQiICIkc3ZucmVwbyIgJiYKKwlzdm4gY28gIiRzdm5yZXBvIiB3YyAmJgogCWNtcCByZWFkbWUgd2MvcmVhZG1lCi0JIgorCScKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0LWRpZmYgdG8gYSBzdWItZGlyZWN0b3J5ICh3aXRoIGdpdC1zdm4gY29uZmlnKScgIgotCXN2biBpbXBvcnQgLW0gJ3N1Yi1kaXJlY3RvcnknIGltcG9ydCAkc3ZucmVwby9zdWJkaXIgJiYKLQlnaXQtc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgJHN2bnJlcG8vc3ViZGlyICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQtZGlmZiB0byBhIHN1Yi1kaXJlY3RvcnkgKHdpdGggZ2l0LXN2biBjb25maWcpJyAnCisJc3ZuIGltcG9ydCAtbSAic3ViLWRpcmVjdG9yeSIgaW1wb3J0ICIkc3ZucmVwbyIvc3ViZGlyICYmCisJZ2l0LXN2biBpbml0IC0tbWluaW1pemUtdXJsICIkc3ZucmVwbyIvc3ViZGlyICYmCiAJZ2l0LXN2biBmZXRjaCAmJgotCWdpdC1zdm4gY29tbWl0LWRpZmYgLXIzICckcHJldicgJyRoZWFkJyAmJgotCXN2biBjYXQgJHN2bnJlcG8vc3ViZGlyL3JlYWRtZSA+IHJlYWRtZS4yICYmCisJZ2l0LXN2biBjb21taXQtZGlmZiAtcjMgIiRwcmV2IiAiJGhlYWQiICYmCisJc3ZuIGNhdCAiJHN2bnJlcG8iL3N1YmRpci9yZWFkbWUgPiByZWFkbWUuMiAmJgogCWNtcCByZWFkbWUgcmVhZG1lLjIKLQkiCisJJwogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMDYtZ2l0LXN2bi1jb21taXQtZGlmZi1jbG9iYmVyLnNoIGIvdC90OTEwNi1naXQtc3ZuLWNvbW1pdC1kaWZmLWNsb2JiZXIuc2gKaW5kZXggZjc0YWIxMi4uNThhM2E3YiAxMDA3NTUKLS0tIGEvdC90OTEwNi1naXQtc3ZuLWNvbW1pdC1kaWZmLWNsb2JiZXIuc2gKKysrIGIvdC90OTEwNi1naXQtc3ZuLWNvbW1pdC1kaWZmLWNsb2JiZXIuc2gKQEAgLTQsNTYgKzQsNTYgQEAKIHRlc3RfZGVzY3JpcHRpb249J2dpdC1zdm4gY29tbWl0LWRpZmYgY2xvYmJlcicKIC4gLi9saWItZ2l0LXN2bi5zaAogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIHJlcG8nICIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgcmVwbycgJwogCW1rZGlyIGltcG9ydCAmJgogCWNkIGltcG9ydCAmJgogCWVjaG8gaW5pdGlhbCA+IGZpbGUgJiYKLQlzdm4gaW1wb3J0IC1tICdpbml0aWFsJyAuICRzdm5yZXBvICYmCisJc3ZuIGltcG9ydCAtbSAiaW5pdGlhbCIgLiAiJHN2bnJlcG8iICYmCiAJY2QgLi4gJiYKIAllY2hvIGluaXRpYWwgPiBmaWxlICYmCiAJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmaWxlICYmCi0JZ2l0IGNvbW1pdCAtYSAtbSAnaW5pdGlhbCcKLQkiCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgY2hhbmdlIGZyb20gc3ZuIHNpZGUnICIKLQlzdm4gY28gJHN2bnJlcG8gdC5zdm4gJiYKKwlnaXQgY29tbWl0IC1hIC1tICJpbml0aWFsIgorCScKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBjaGFuZ2UgZnJvbSBzdm4gc2lkZScgJworCXN2biBjbyAiJHN2bnJlcG8iIHQuc3ZuICYmCiAJY2QgdC5zdm4gJiYKIAllY2hvIHNlY29uZCBsaW5lIGZyb20gc3ZuID4+IGZpbGUgJiYKIAlwb2tlIGZpbGUgJiYKLQlzdm4gY29tbWl0IC1tICdzZWNvbmQgbGluZSBmcm9tIHN2bicgJiYKKwlzdm4gY29tbWl0IC1tICJzZWNvbmQgbGluZSBmcm9tIHN2biIgJiYKIAljZCAuLiAmJgogCXJtIC1yZiB0LnN2bgotCSIKKwknCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBjb25mbGljdGluZyBjaGFuZ2UgZnJvbSBnaXQnICIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBjb25mbGljdGluZyBjaGFuZ2UgZnJvbSBnaXQnICcKIAllY2hvIHNlY29uZCBsaW5lIGZyb20gZ2l0ID4+IGZpbGUgJiYKLQlnaXQgY29tbWl0IC1hIC1tICdzZWNvbmQgbGluZSBmcm9tIGdpdCcgJiYKLQkhIGdpdC1zdm4gY29tbWl0LWRpZmYgLXIxIEhFQUR+MSBIRUFEICRzdm5yZXBvCi0iCisJZ2l0IGNvbW1pdCAtYSAtbSAic2Vjb25kIGxpbmUgZnJvbSBnaXQiICYmCisJISBnaXQtc3ZuIGNvbW1pdC1kaWZmIC1yMSBIRUFEfjEgSEVBRCAiJHN2bnJlcG8iCisnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBjb21wbGVtZW50aW5nIGNoYW5nZSBmcm9tIGdpdCcgIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGNvbXBsZW1lbnRpbmcgY2hhbmdlIGZyb20gZ2l0JyAnCiAJZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjEgJiYKIAllY2hvIHNlY29uZCBsaW5lIGZyb20gc3ZuID4+IGZpbGUgJiYKLQlnaXQgY29tbWl0IC1hIC1tICdzZWNvbmQgbGluZSBmcm9tIHN2bicgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJzZWNvbmQgbGluZSBmcm9tIHN2biIgJiYKIAllY2hvIHRoaXJkIGxpbmUgZnJvbSBnaXQgPj4gZmlsZSAmJgotCWdpdCBjb21taXQgLWEgLW0gJ3RoaXJkIGxpbmUgZnJvbSBnaXQnICYmCi0JZ2l0LXN2biBjb21taXQtZGlmZiAtcjIgSEVBRH4xIEhFQUQgJHN2bnJlcG8KLQkiCisJZ2l0IGNvbW1pdCAtYSAtbSAidGhpcmQgbGluZSBmcm9tIGdpdCIgJiYKKwlnaXQtc3ZuIGNvbW1pdC1kaWZmIC1yMiBIRUFEfjEgSEVBRCAiJHN2bnJlcG8iCisJJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdkY29tbWl0IGZhaWxzIHRvIGNvbW1pdCBiZWNhdXNlIG9mIGNvbmZsaWN0JyAiCi0JZ2l0LXN2biBpbml0ICRzdm5yZXBvICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkY29tbWl0IGZhaWxzIHRvIGNvbW1pdCBiZWNhdXNlIG9mIGNvbmZsaWN0JyAnCisJZ2l0LXN2biBpbml0ICIkc3ZucmVwbyIgJiYKIAlnaXQtc3ZuIGZldGNoICYmCiAJZ2l0IHJlc2V0IC0taGFyZCByZWZzL3JlbW90ZXMvZ2l0LXN2biAmJgotCXN2biBjbyAkc3ZucmVwbyB0LnN2biAmJgorCXN2biBjbyAiJHN2bnJlcG8iIHQuc3ZuICYmCiAJY2QgdC5zdm4gJiYKIAllY2hvIGZvdXJ0aCBsaW5lIGZyb20gc3ZuID4+IGZpbGUgJiYKIAlwb2tlIGZpbGUgJiYKLQlzdm4gY29tbWl0IC1tICdmb3VydGggbGluZSBmcm9tIHN2bicgJiYKKwlzdm4gY29tbWl0IC1tICJmb3VydGggbGluZSBmcm9tIHN2biIgJiYKIAljZCAuLiAmJgogCXJtIC1yZiB0LnN2biAmJgotCWVjaG8gJ2ZvdXJ0aCBsaW5lIGZyb20gZ2l0JyA+PiBmaWxlICYmCi0JZ2l0IGNvbW1pdCAtYSAtbSAnZm91cnRoIGxpbmUgZnJvbSBnaXQnICYmCisJZWNobyAiZm91cnRoIGxpbmUgZnJvbSBnaXQiID4+IGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJmb3VydGggbGluZSBmcm9tIGdpdCIgJiYKIAkhIGdpdC1zdm4gZGNvbW1pdAotCSIKKwknCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rjb21taXQgZG9lcyB0aGUgc3ZuIGVxdWl2YWxlbnQgb2YgYW4gaW5kZXggbWVyZ2UnICIKIAlnaXQgcmVzZXQgLS1oYXJkIHJlZnMvcmVtb3Rlcy9naXQtc3ZuICYmCkBAIC02NiwxNSArNjYsMTUgQEAKIAlnaXQtc3ZuIGRjb21taXQKIAkiCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBhbm90aGVyIGNoYW5nZSBmcm9tIHN2biBzaWRlJyAiCi0Jc3ZuIGNvICRzdm5yZXBvIHQuc3ZuICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgYW5vdGhlciBjaGFuZ2UgZnJvbSBzdm4gc2lkZScgJworCXN2biBjbyAiJHN2bnJlcG8iIHQuc3ZuICYmCiAJY2QgdC5zdm4gJiYKIAkJZWNobyB0aGlyZCBsaW5lIGZyb20gc3ZuID4+IGZpbGUgJiYKIAkJcG9rZSBmaWxlICYmCi0JCXN2biBjb21taXQgLW0gJ3RoaXJkIGxpbmUgZnJvbSBzdm4nICYmCisJCXN2biBjb21taXQgLW0gInRoaXJkIGxpbmUgZnJvbSBzdm4iICYmCiAJY2QgLi4gJiYKIAlybSAtcmYgdC5zdm4KLQkiCisJJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXBsZSBkY29tbWl0IGZyb20gZ2l0LXN2biB3aWxsIG5vdCBjbG9iYmVyIHN2bicgIgogCWdpdCByZXNldCAtLWhhcmQgcmVmcy9yZW1vdGVzL2dpdC1zdm4gJiYKZGlmZiAtLWdpdCBhL3QvdDkxMDYtZ2l0LXN2bi1kY29tbWl0LWNsb2JiZXItc2VyaWVzLnNoIGIvdC90OTEwNi1naXQtc3ZuLWRjb21taXQtY2xvYmJlci1zZXJpZXMuc2gKaW5kZXggY2E4YTAwZS4uYTQwMGRjNyAxMDA3NTUKLS0tIGEvdC90OTEwNi1naXQtc3ZuLWRjb21taXQtY2xvYmJlci1zZXJpZXMuc2gKKysrIGIvdC90OTEwNi1naXQtc3ZuLWRjb21taXQtY2xvYmJlci1zZXJpZXMuc2gKQEAgLTQsMzAgKzQsMzAgQEAKIHRlc3RfZGVzY3JpcHRpb249J2dpdC1zdm4gZGNvbW1pdCBjbG9iYmVyIHNlcmllcycKIC4gLi9saWItZ2l0LXN2bi5zaAogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIHJlcG8nICIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgcmVwbycgJwogCW1rZGlyIGltcG9ydCAmJgogCWNkIGltcG9ydCAmJgotCWF3ayAnQkVHSU4geyBmb3IgKGkgPSAxOyBpIDwgNjQ7IGkrKykgeyBwcmludCBpIH0gfScgPiBmaWxlCi0Jc3ZuIGltcG9ydCAtbSAnaW5pdGlhbCcgLiAkc3ZucmVwbyAmJgorCWF3ayAiQkVHSU4geyBmb3IgKGkgPSAxOyBpIDwgNjQ7IGkrKykgeyBwcmludCBpIH0gfSIgPiBmaWxlCisJc3ZuIGltcG9ydCAtbSAiaW5pdGlhbCIgLiAiJHN2bnJlcG8iICYmCiAJY2QgLi4gJiYKLQlnaXQgc3ZuIGluaXQgJHN2bnJlcG8gJiYKKwlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIiAmJgogCWdpdCBzdm4gZmV0Y2ggJiYKIAl0ZXN0IC1lIGZpbGUKLQkiCisJJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcoc3VwcG9zZWRseSkgbm9uLWNvbmZsaWN0aW5nIGNoYW5nZSBmcm9tIFNWTicgIgotCXRlc3QgeFwiXGBzZWQgLW4gLWUgNThwIDwgZmlsZVxgXCIgPSB4NTggJiYKLQl0ZXN0IHhcIlxgc2VkIC1uIC1lIDYxcCA8IGZpbGVcYFwiID0geDYxICYmCi0Jc3ZuIGNvICRzdm5yZXBvIHRtcCAmJgordGVzdF9leHBlY3Rfc3VjY2VzcyAnKHN1cHBvc2VkbHkpIG5vbi1jb25mbGljdGluZyBjaGFuZ2UgZnJvbSBTVk4nICcKKwl0ZXN0IHgiYHNlZCAtbiAtZSA1OHAgPCBmaWxlYCIgPSB4NTggJiYKKwl0ZXN0IHgiYHNlZCAtbiAtZSA2MXAgPCBmaWxlYCIgPSB4NjEgJiYKKwlzdm4gY28gIiRzdm5yZXBvIiB0bXAgJiYKIAljZCB0bXAgJiYKLQkJcGVybCAtaSAtcCAtZSAncy9eNThcJC81NTg4LycgZmlsZSAmJgotCQlwZXJsIC1pIC1wIC1lICdzL142MVwkLzY2MTEvJyBmaWxlICYmCisJCXBlcmwgLWkgLXAgLWUgInMvXjU4JC81NTg4LyIgZmlsZSAmJgorCQlwZXJsIC1pIC1wIC1lICJzL142MSQvNjYxMS8iIGZpbGUgJiYKIAkJcG9rZSBmaWxlICYmCi0JCXRlc3QgeFwiXGBzZWQgLW4gLWUgNThwIDwgZmlsZVxgXCIgPSB4NTU4OCAmJgotCQl0ZXN0IHhcIlxgc2VkIC1uIC1lIDYxcCA8IGZpbGVcYFwiID0geDY2MTEgJiYKLQkJc3ZuIGNvbW1pdCAtbSAnNTggPT4gNTU4OCwgNjEgPT4gNjYxMScgJiYKKwkJdGVzdCB4ImBzZWQgLW4gLWUgNThwIDwgZmlsZWAiID0geDU1ODggJiYKKwkJdGVzdCB4ImBzZWQgLW4gLWUgNjFwIDwgZmlsZWAiID0geDY2MTEgJiYKKwkJc3ZuIGNvbW1pdCAtbSAiNTggPT4gNTU4OCwgNjEgPT4gNjYxMSIgJiYKIAkJY2QgLi4KLQkiCisJJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzb21lIHVucmVsYXRlZCBjaGFuZ2VzIHRvIGdpdCcgIgogCWVjaG8gaGkgPiBsaWZlICYmCmRpZmYgLS1naXQgYS90L3Q5MTA3LWdpdC1zdm4tbWlncmF0ZS5zaCBiL3QvdDkxMDctZ2l0LXN2bi1taWdyYXRlLnNoCmluZGV4IDBhNDFkNTIuLmQ5YjU1M2EgMTAwNzU1Ci0tLSBhL3QvdDkxMDctZ2l0LXN2bi1taWdyYXRlLnNoCisrKyBiL3QvdDkxMDctZ2l0LXN2bi1taWdyYXRlLnNoCkBAIC0zLDYxICszLDYxIEBACiB0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtc3ZuIG1ldGFkYXRhIG1pZ3JhdGlvbnMgZnJvbSBwcmV2aW91cyB2ZXJzaW9ucycKIC4gLi9saWItZ2l0LXN2bi5zaAogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBvbGQtbG9va2luZyBtZXRhZGF0YScgIgotCWNwICRHSVRfRElSL2NvbmZpZyAkR0lUX0RJUi9jb25maWctb2xkLWdpdC1zdm4gJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG9sZC1sb29raW5nIG1ldGFkYXRhJyAnCisJY3AgIiRHSVRfRElSIi9jb25maWcgIiRHSVRfRElSIi9jb25maWctb2xkLWdpdC1zdm4gJiYKIAlta2RpciBpbXBvcnQgJiYKIAljZCBpbXBvcnQgJiYKIAkJZm9yIGkgaW4gdHJ1bmsgYnJhbmNoZXMvYSBicmFuY2hlcy9iIFwKIAkJICAgICAgICAgdGFncy8wLjEgdGFncy8wLjIgdGFncy8wLjM7IGRvCi0JCQlta2RpciAtcCBcJGkgJiYgXAotCQkJZWNobyBoZWxsbyA+PiBcJGkvUkVBRE1FIHx8IGV4aXQgMQorCQkJbWtkaXIgLXAgJGkgJiYgXAorCQkJZWNobyBoZWxsbyA+PiAkaS9SRUFETUUgfHwgZXhpdCAxCiAJCWRvbmUgJiYgXAotCQlzdm4gaW1wb3J0IC1tIHRlc3QgLiAkc3ZucmVwbworCQlzdm4gaW1wb3J0IC1tIHRlc3QgLiAiJHN2bnJlcG8iCiAJCWNkIC4uICYmCi0JZ2l0LXN2biBpbml0ICRzdm5yZXBvICYmCisJZ2l0LXN2biBpbml0ICIkc3ZucmVwbyIgJiYKIAlnaXQtc3ZuIGZldGNoICYmCi0JbXYgJEdJVF9ESVIvc3ZuLyogJEdJVF9ESVIvICYmCi0JbXYgJEdJVF9ESVIvc3ZuLy5tZXRhZGF0YSAkR0lUX0RJUi8gJiYKLQlybWRpciAkR0lUX0RJUi9zdm4gJiYKKwltdiAiJEdJVF9ESVIiL3N2bi8qICIkR0lUX0RJUiIvICYmCisJbXYgIiRHSVRfRElSIi9zdm4vLm1ldGFkYXRhICIkR0lUX0RJUiIvICYmCisJcm1kaXIgIiRHSVRfRElSIi9zdm4gJiYKIAlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2dpdC1zdm4tSEVBRCByZWZzL3JlbW90ZXMvZ2l0LXN2biAmJgogCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvc3ZuLUhFQUQgcmVmcy9yZW1vdGVzL2dpdC1zdm4gJiYKIAlnaXQgdXBkYXRlLXJlZiAtZCByZWZzL3JlbW90ZXMvZ2l0LXN2biByZWZzL3JlbW90ZXMvZ2l0LXN2bgotCSIKKwknCiAKIGhlYWQ9YGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9naXQtc3ZuLUhFQUReMGAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1zdm4tSEVBRCBpcyBhIHJlYWwgSEVBRCcgInRlc3QgLW4gJyRoZWFkJyIKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSBvbGQtc3R5bGUgKHYwKSBnaXQtc3ZuIGxheW91dCcgIgotCW1rZGlyIC1wICRHSVRfRElSL2dpdC1zdm4vaW5mbyAkR0lUX0RJUi9zdm4vaW5mbyAmJgotCWVjaG8gJHN2bnJlcG8gPiAkR0lUX0RJUi9naXQtc3ZuL2luZm8vdXJsICYmCi0JZWNobyAkc3ZucmVwbyA+ICRHSVRfRElSL3N2bi9pbmZvL3VybCAmJgordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSBvbGQtc3R5bGUgKHYwKSBnaXQtc3ZuIGxheW91dCcgJworCW1rZGlyIC1wICIkR0lUX0RJUiIvZ2l0LXN2bi9pbmZvICIkR0lUX0RJUiIvc3ZuL2luZm8gJiYKKwllY2hvICIkc3ZucmVwbyIgPiAiJEdJVF9ESVIiL2dpdC1zdm4vaW5mby91cmwgJiYKKwllY2hvICIkc3ZucmVwbyIgPiAiJEdJVF9ESVIiL3N2bi9pbmZvL3VybCAmJgogCWdpdC1zdm4gbWlncmF0ZSAmJgotCSEgdGVzdCAtZCAkR0lUX0RJUi9naXQtc3ZuICYmCisJISB0ZXN0IC1kICIkR0lUX0RJUiIvZ2l0LXN2biAmJgogCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL2dpdC1zdm5eMCAmJgogCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL3N2bl4wICYmCi0JdGVzdCBcYGdpdCBjb25maWcgLS1nZXQgc3ZuLXJlbW90ZS5zdm4udXJsXGAgPSAnJHN2bnJlcG8nICYmCi0JdGVzdCBcYGdpdCBjb25maWcgLS1nZXQgc3ZuLXJlbW90ZS5zdm4uZmV0Y2hcYCA9IFwKLSAgICAgICAgICAgICAnOnJlZnMvcmVtb3Rlcy9naXQtc3ZuJwotCSIKKwl0ZXN0ICIkKGdpdCBjb25maWcgLS1nZXQgc3ZuLXJlbW90ZS5zdm4udXJsKSIgPSAiJHN2bnJlcG8iICYmCisJdGVzdCBgZ2l0IGNvbmZpZyAtLWdldCBzdm4tcmVtb3RlLnN2bi5mZXRjaGAgPSBcCisgICAgICAgICAgICAgIjpyZWZzL3JlbW90ZXMvZ2l0LXN2biIKKwknCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgYSBtdWx0aS1yZXBvc2l0b3J5IHJlcG8nICIKLQlnaXQtc3ZuIGluaXQgJHN2bnJlcG8gLVQgdHJ1bmsgLXQgdGFncyAtYiBicmFuY2hlcyAmJgordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSBhIG11bHRpLXJlcG9zaXRvcnkgcmVwbycgJworCWdpdC1zdm4gaW5pdCAiJHN2bnJlcG8iIC1UIHRydW5rIC10IHRhZ3MgLWIgYnJhbmNoZXMgJiYKIAlnaXQgY29uZmlnIC0tZ2V0LWFsbCBzdm4tcmVtb3RlLnN2bi5mZXRjaCA+IGZldGNoLm91dCAmJgotCWdyZXAgJ150cnVuazpyZWZzL3JlbW90ZXMvdHJ1bmskJyBmZXRjaC5vdXQgJiYKLQl0ZXN0IC1uIFwiXGBnaXQgY29uZmlnIC0tZ2V0IHN2bi1yZW1vdGUuc3ZuLmJyYW5jaGVzIFwKLQkgICAgICAgICAgICAnXmJyYW5jaGVzL1wqOnJlZnMvcmVtb3Rlcy9cKiQnXGBcIiAmJgotCXRlc3QgLW4gXCJcYGdpdCBjb25maWcgLS1nZXQgc3ZuLXJlbW90ZS5zdm4udGFncyBcCi0JICAgICAgICAgICAgJ150YWdzL1wqOnJlZnMvcmVtb3Rlcy90YWdzL1wqJCdcYFwiICYmCisJZ3JlcCAiXnRydW5rOnJlZnMvcmVtb3Rlcy90cnVuayQiIGZldGNoLm91dCAmJgorCXRlc3QgLW4gImBnaXQgY29uZmlnIC0tZ2V0IHN2bi1yZW1vdGUuc3ZuLmJyYW5jaGVzIFwKKwkgICAgICAgICAgICAiXmJyYW5jaGVzL1wqOnJlZnMvcmVtb3Rlcy9cKiQiYCIgJiYKKwl0ZXN0IC1uICJgZ2l0IGNvbmZpZyAtLWdldCBzdm4tcmVtb3RlLnN2bi50YWdzIFwKKwkgICAgICAgICAgICAiXnRhZ3MvXCo6cmVmcy9yZW1vdGVzL3RhZ3MvXCokImAiICYmCiAJZ2l0IGNvbmZpZyAtLXVuc2V0IHN2bi1yZW1vdGUuc3ZuLmJyYW5jaGVzIFwKLQkgICAgICAgICAgICAgICAgICAgICAgICAnXmJyYW5jaGVzL1wqOnJlZnMvcmVtb3Rlcy9cKiQnICYmCisJICAgICAgICAgICAgICAgICAgICAgICAgIl5icmFuY2hlcy9cKjpyZWZzL3JlbW90ZXMvXCokIiAmJgogCWdpdCBjb25maWcgLS11bnNldCBzdm4tcmVtb3RlLnN2bi50YWdzIFwKLQkgICAgICAgICAgICAgICAgICAgICAgICAnXnRhZ3MvXCo6cmVmcy9yZW1vdGVzL3RhZ3MvXCokJyAmJgotCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5zdm4uZmV0Y2ggJ2JyYW5jaGVzL2E6cmVmcy9yZW1vdGVzL2EnICYmCi0JZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi5mZXRjaCAnYnJhbmNoZXMvYjpyZWZzL3JlbW90ZXMvYicgJiYKKwkgICAgICAgICAgICAgICAgICAgICAgICAiXnRhZ3MvXCo6cmVmcy9yZW1vdGVzL3RhZ3MvXCokIiAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5zdm4uZmV0Y2ggImJyYW5jaGVzL2E6cmVmcy9yZW1vdGVzL2EiICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi5mZXRjaCAiYnJhbmNoZXMvYjpyZWZzL3JlbW90ZXMvYiIgJiYKIAlmb3IgaSBpbiB0YWdzLzAuMSB0YWdzLzAuMiB0YWdzLzAuMzsgZG8KIAkJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi5mZXRjaCBcCi0JCSAgICAgICAgICAgICAgICAgXCRpOnJlZnMvcmVtb3Rlcy9cJGkgfHwgZXhpdCAxOyBkb25lCi0JIgorCQkgICAgICAgICAgICAgICAgICRpOnJlZnMvcmVtb3Rlcy8kaSB8fCBleGl0IDE7IGRvbmUKKwknCiAKICMgcmVmcyBzaG91bGQgYWxsIGJlIGRpZmZlcmVudCwgYnV0IHRoZSB0cmVlcyBzaG91bGQgYWxsIGJlIHRoZSBzYW1lOgogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGktZmV0Y2ggd29ya3Mgb24gcGFydGlhbCB1cmxzICsgcGF0aHMnICIKQEAgLTczLDQzICs3Myw0MyBAQAogCSAgICAgICAgICAgICAgICAgICAgICAgICByZWZzL3JlbW90ZXMvXCRqXGBcIiB8fGV4aXQgMTsgZG9uZTsgZG9uZQogCSIKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnbWlncmF0ZSAtLW1pbmltaXplIG9uIG9sZCBpbml0ZWQgbGF5b3V0JyAiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaWdyYXRlIC0tbWluaW1pemUgb24gb2xkIGluaXRlZCBsYXlvdXQnICcKIAlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIHN2bi1yZW1vdGUuc3ZuLmZldGNoICYmCiAJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBzdm4tcmVtb3RlLnN2bi51cmwgJiYKLQlybSAtcmYgJEdJVF9ESVIvc3ZuICYmCi0JZm9yIGkgaW4gXGBjYXQgZmV0Y2gub3V0XGA7IGRvCi0JCXBhdGg9XGBleHByIFwkaSA6ICdcXChbXjpdKlxcKTouKiQnXGAKLQkJcmVmPVxgZXhwciBcJGkgOiAnW146XSo6cmVmcy9yZW1vdGVzL1xcKC4qXFwpJCdcYAotCQlpZiB0ZXN0IC16IFwiXCRyZWZcIjsgdGhlbiBjb250aW51ZTsgZmkKLQkJaWYgdGVzdCAtbiBcIlwkcGF0aFwiOyB0aGVuIHBhdGg9XCIvXCRwYXRoXCI7IGZpCi0JCSggbWtkaXIgLXAgJEdJVF9ESVIvc3ZuL1wkcmVmL2luZm8vICYmCi0JCWVjaG8gJHN2bnJlcG9cJHBhdGggPiAkR0lUX0RJUi9zdm4vXCRyZWYvaW5mby91cmwgKSB8fCBleGl0IDE7CisJcm0gLXJmICIkR0lUX0RJUiIvc3ZuICYmCisJZm9yIGkgaW4gYGNhdCBmZXRjaC5vdXRgOyBkbworCQlwYXRoPWBleHByICRpIDogIlwoW146XSpcKTouKiQiYAorCQlyZWY9YGV4cHIgJGkgOiAiW146XSo6cmVmcy9yZW1vdGVzL1woLipcKSQiYAorCQlpZiB0ZXN0IC16ICIkcmVmIjsgdGhlbiBjb250aW51ZTsgZmkKKwkJaWYgdGVzdCAtbiAiJHBhdGgiOyB0aGVuIHBhdGg9Ii8kcGF0aCI7IGZpCisJCSggbWtkaXIgLXAgIiRHSVRfRElSIi9zdm4vJHJlZi9pbmZvLyAmJgorCQllY2hvICIkc3ZucmVwbyIkcGF0aCA+ICIkR0lUX0RJUiIvc3ZuLyRyZWYvaW5mby91cmwgKSB8fCBleGl0IDE7CiAJZG9uZSAmJgogCWdpdC1zdm4gbWlncmF0ZSAtLW1pbmltaXplICYmCi0JdGVzdCAteiBcIlxgZ2l0IGNvbmZpZyAtbCB8Z3JlcCAtdiAnXnN2bi1yZW1vdGVcLmdpdC1zdm5cLidcYFwiICYmCisJdGVzdCAteiAiYGdpdCBjb25maWcgLWwgfGdyZXAgLXYgIl5zdm4tcmVtb3RlXC5naXQtc3ZuXC4iYCIgJiYKIAlnaXQgY29uZmlnIC0tZ2V0LWFsbCBzdm4tcmVtb3RlLnN2bi5mZXRjaCA+IGZldGNoLm91dCAmJgotCWdyZXAgJ150cnVuazpyZWZzL3JlbW90ZXMvdHJ1bmskJyBmZXRjaC5vdXQgJiYKLQlncmVwICdeYnJhbmNoZXMvYTpyZWZzL3JlbW90ZXMvYSQnIGZldGNoLm91dCAmJgotCWdyZXAgJ15icmFuY2hlcy9iOnJlZnMvcmVtb3Rlcy9iJCcgZmV0Y2gub3V0ICYmCi0JZ3JlcCAnXnRhZ3MvMFwuMTpyZWZzL3JlbW90ZXMvdGFncy8wXC4xJCcgZmV0Y2gub3V0ICYmCi0JZ3JlcCAnXnRhZ3MvMFwuMjpyZWZzL3JlbW90ZXMvdGFncy8wXC4yJCcgZmV0Y2gub3V0ICYmCi0JZ3JlcCAnXnRhZ3MvMFwuMzpyZWZzL3JlbW90ZXMvdGFncy8wXC4zJCcgZmV0Y2gub3V0Ci0JZ3JlcCAnXjpyZWZzL3JlbW90ZXMvZ2l0LXN2bicgZmV0Y2gub3V0Ci0JIgorCWdyZXAgIl50cnVuazpyZWZzL3JlbW90ZXMvdHJ1bmskIiBmZXRjaC5vdXQgJiYKKwlncmVwICJeYnJhbmNoZXMvYTpyZWZzL3JlbW90ZXMvYSQiIGZldGNoLm91dCAmJgorCWdyZXAgIl5icmFuY2hlcy9iOnJlZnMvcmVtb3Rlcy9iJCIgZmV0Y2gub3V0ICYmCisJZ3JlcCAiXnRhZ3MvMFwuMTpyZWZzL3JlbW90ZXMvdGFncy8wXC4xJCIgZmV0Y2gub3V0ICYmCisJZ3JlcCAiXnRhZ3MvMFwuMjpyZWZzL3JlbW90ZXMvdGFncy8wXC4yJCIgZmV0Y2gub3V0ICYmCisJZ3JlcCAiXnRhZ3MvMFwuMzpyZWZzL3JlbW90ZXMvdGFncy8wXC4zJCIgZmV0Y2gub3V0CisJZ3JlcCAiXjpyZWZzL3JlbW90ZXMvZ2l0LXN2biIgZmV0Y2gub3V0CisJJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICAiLnJldl9kYiBhdXRvLWNvbnZlcnRlZCB0byAucmV2X21hcC5VVUlEIiAiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICAiLnJldl9kYiBhdXRvLWNvbnZlcnRlZCB0byAucmV2X21hcC5VVUlEIiAnCiAJZ2l0LXN2biBmZXRjaCAtaSB0cnVuayAmJgotCXRlc3QgLXogXCJcJChscyAkR0lUX0RJUi9zdm4vdHJ1bmsvLnJldl9kYi4qIDI+L2Rldi9udWxsKVwiICYmCi0JZXhwZWN0PVwiXCQobHMgJEdJVF9ESVIvc3ZuL3RydW5rLy5yZXZfbWFwLiopXCIgJiYKLQl0ZXN0IC1uIFwiXCRleHBlY3RcIiAmJgotCXJldl9kYj1cJChlY2hvIFwkZXhwZWN0IHwgc2VkIC1lICdzLF9tYXAsX2RiLCcpICYmCi0JY29udmVydF90b19yZXZfZGIgXCRleHBlY3QgXCRyZXZfZGIgJiYKLQlybSAtZiBcJGV4cGVjdCAmJgotCXRlc3QgLWYgXCRyZXZfZGIgJiYKKwl0ZXN0IC16ICIkKGxzICIkR0lUX0RJUiIvc3ZuL3RydW5rLy5yZXZfZGIuKiAyPi9kZXYvbnVsbCkiICYmCisJZXhwZWN0PSIkKGxzICIkR0lUX0RJUiIvc3ZuL3RydW5rLy5yZXZfbWFwLiopIiAmJgorCXRlc3QgLW4gIiRleHBlY3QiICYmCisJcmV2X2RiPSIkKGVjaG8gJGV4cGVjdCB8IHNlZCAtZSAicyxfbWFwLF9kYiwiKSIgJiYKKwljb252ZXJ0X3RvX3Jldl9kYiAiJGV4cGVjdCIgIiRyZXZfZGIiICYmCisJcm0gLWYgIiRleHBlY3QiICYmCisJdGVzdCAtZiAiJHJldl9kYiIgJiYKIAlnaXQtc3ZuIGZldGNoIC1pIHRydW5rICYmCi0JdGVzdCAteiBcIlwkKGxzICRHSVRfRElSL3N2bi90cnVuay8ucmV2X2RiLiogMj4vZGV2L251bGwpXCIgJiYKLQl0ZXN0ICEgLWUgJEdJVF9ESVIvc3ZuL3RydW5rLy5yZXZfZGIgJiYKLQl0ZXN0IC1mIFwkZXhwZWN0Ci0JIgorCXRlc3QgLXogIiQobHMgIiRHSVRfRElSIi9zdm4vdHJ1bmsvLnJldl9kYi4qIDI+L2Rldi9udWxsKSIgJiYKKwl0ZXN0ICEgLWUgIiRHSVRfRElSIi9zdm4vdHJ1bmsvLnJldl9kYiAmJgorCXRlc3QgLWYgIiRleHBlY3QiCisJJwogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMDgtZ2l0LXN2bi1nbG9iLnNoIGIvdC90OTEwOC1naXQtc3ZuLWdsb2Iuc2gKaW5kZXggZGI0MzQ0Yy4uZjZmNzFkMCAxMDA3NTUKLS0tIGEvdC90OTEwOC1naXQtc3ZuLWdsb2Iuc2gKKysrIGIvdC90OTEwOC1naXQtc3ZuLWdsb2Iuc2gKQEAgLTEwLDc3ICsxMCw3NyBAQAogaW5pdGlhbAogRU9GCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgcmVmc3BlYyBnbG9iYmluZycgIgordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCByZWZzcGVjIGdsb2JiaW5nJyAnCiAJbWtkaXIgLXAgdHJ1bmsvc3JjL2EgdHJ1bmsvc3JjL2IgdHJ1bmsvZG9jICYmCi0JZWNobyAnaGVsbG8gd29ybGQnID4gdHJ1bmsvc3JjL2EvcmVhZG1lICYmCi0JZWNobyAnZ29vZGJ5ZSB3b3JsZCcgPiB0cnVuay9zcmMvYi9yZWFkbWUgJiYKLQlzdm4gaW1wb3J0IC1tICdpbml0aWFsJyB0cnVuayAkc3ZucmVwby90cnVuayAmJgotCXN2biBjbyAkc3ZucmVwbyB0bXAgJiYKKwllY2hvICJoZWxsbyB3b3JsZCIgPiB0cnVuay9zcmMvYS9yZWFkbWUgJiYKKwllY2hvICJnb29kYnllIHdvcmxkIiA+IHRydW5rL3NyYy9iL3JlYWRtZSAmJgorCXN2biBpbXBvcnQgLW0gImluaXRpYWwiIHRydW5rICIkc3ZucmVwbyIvdHJ1bmsgJiYKKwlzdm4gY28gIiRzdm5yZXBvIiB0bXAgJiYKIAljZCB0bXAgJiYKIAkJbWtkaXIgYnJhbmNoZXMgdGFncyAmJgogCQlzdm4gYWRkIGJyYW5jaGVzIHRhZ3MgJiYKIAkJc3ZuIGNwIHRydW5rIGJyYW5jaGVzL3N0YXJ0ICYmCi0JCXN2biBjb21taXQgLW0gJ3N0YXJ0IGEgbmV3IGJyYW5jaCcgJiYKKwkJc3ZuIGNvbW1pdCAtbSAic3RhcnQgYSBuZXcgYnJhbmNoIiAmJgogCQlzdm4gdXAgJiYKLQkJZWNobyAnaGknID4+IGJyYW5jaGVzL3N0YXJ0L3NyYy9iL3JlYWRtZSAmJgorCQllY2hvICJoaSIgPj4gYnJhbmNoZXMvc3RhcnQvc3JjL2IvcmVhZG1lICYmCiAJCXBva2UgYnJhbmNoZXMvc3RhcnQvc3JjL2IvcmVhZG1lICYmCi0JCWVjaG8gJ2hleScgPj4gYnJhbmNoZXMvc3RhcnQvc3JjL2EvcmVhZG1lICYmCisJCWVjaG8gImhleSIgPj4gYnJhbmNoZXMvc3RhcnQvc3JjL2EvcmVhZG1lICYmCiAJCXBva2UgYnJhbmNoZXMvc3RhcnQvc3JjL2EvcmVhZG1lICYmCi0JCXN2biBjb21taXQgLW0gJ2hpJyAmJgorCQlzdm4gY29tbWl0IC1tICJoaSIgJiYKIAkJc3ZuIHVwICYmCiAJCXN2biBjcCBicmFuY2hlcy9zdGFydCB0YWdzL2VuZCAmJgotCQllY2hvICdieWUnID4+IHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgorCQllY2hvICJieWUiID4+IHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgogCQlwb2tlIHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgotCQllY2hvICdheWUnID4+IHRhZ3MvZW5kL3NyYy9hL3JlYWRtZSAmJgorCQllY2hvICJheWUiID4+IHRhZ3MvZW5kL3NyYy9hL3JlYWRtZSAmJgogCQlwb2tlIHRhZ3MvZW5kL3NyYy9hL3JlYWRtZSAmJgotCQlzdm4gY29tbWl0IC1tICd0aGUgZW5kJyAmJgotCQllY2hvICdieWVieWUnID4+IHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgorCQlzdm4gY29tbWl0IC1tICJ0aGUgZW5kIiAmJgorCQllY2hvICJieWVieWUiID4+IHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgogCQlwb2tlIHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgotCQlzdm4gY29tbWl0IC1tICdub3RoaW5nIHRvIHNlZSBoZXJlJworCQlzdm4gY29tbWl0IC1tICJub3RoaW5nIHRvIHNlZSBoZXJlIgogCQljZCAuLiAmJgotCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5zdm4udXJsICRzdm5yZXBvICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi51cmwgIiRzdm5yZXBvIiAmJgogCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5zdm4uZmV0Y2ggXAotCSAgICAgICAgICAgICAgICAgJ3RydW5rL3NyYy9hOnJlZnMvcmVtb3Rlcy90cnVuaycgJiYKKwkgICAgICAgICAgICAgICAgICJ0cnVuay9zcmMvYTpyZWZzL3JlbW90ZXMvdHJ1bmsiICYmCiAJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi5icmFuY2hlcyBcCi0JICAgICAgICAgICAgICAgICAnYnJhbmNoZXMvKi9zcmMvYTpyZWZzL3JlbW90ZXMvYnJhbmNoZXMvKicgJiYKKwkgICAgICAgICAgICAgICAgICJicmFuY2hlcy8qL3NyYy9hOnJlZnMvcmVtb3Rlcy9icmFuY2hlcy8qIiAmJgogCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5zdm4udGFnc1wKLQkgICAgICAgICAgICAgICAgICd0YWdzLyovc3JjL2E6cmVmcy9yZW1vdGVzL3RhZ3MvKicgJiYKKwkgICAgICAgICAgICAgICAgICJ0YWdzLyovc3JjL2E6cmVmcy9yZW1vdGVzL3RhZ3MvKiIgJiYKIAlnaXQtc3ZuIG11bHRpLWZldGNoICYmCiAJZ2l0IGxvZyAtLXByZXR0eT1vbmVsaW5lIHJlZnMvcmVtb3Rlcy90YWdzL2VuZCB8IFwKLQkgICAgc2VkIC1lICdzL14uXHs0MVx9Ly8nID4gb3V0cHV0LmVuZCAmJgorCSAgICBzZWQgLWUgInMvXi5cezQxXH0vLyIgPiBvdXRwdXQuZW5kICYmCiAJY21wIGV4cGVjdC5lbmQgb3V0cHV0LmVuZCAmJgotCXRlc3QgXCJcYGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3RhZ3MvZW5kfjFcYFwiID0gXAotCQlcIlxgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvYnJhbmNoZXMvc3RhcnRcYFwiICYmCi0JdGVzdCBcIlxgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvYnJhbmNoZXMvc3RhcnR+MlxgXCIgPSBcCi0JCVwiXGBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90cnVua1xgXCIKLQkiCisJdGVzdCAiYGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3RhZ3MvZW5kfjFgIiA9IFwKKwkJImBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9icmFuY2hlcy9zdGFydGAiICYmCisJdGVzdCAiYGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL2JyYW5jaGVzL3N0YXJ0fjJgIiA9IFwKKwkJImBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90cnVua2AiCisJJwogCiBlY2hvIHRyeSB0byB0cnkgPiBleHBlY3QudHdvCiBlY2hvIG5vdGhpbmcgdG8gc2VlIGhlcmUgPj4gZXhwZWN0LnR3bwogY2F0IGV4cGVjdC5lbmQgPj4gZXhwZWN0LnR3bwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGxlZnQtaGFuZC1zaWRlIG9ubHkgZ2xvYmJpbmcnICIKLQlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUudHdvLnVybCAkc3ZucmVwbyAmJgordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBsZWZ0LWhhbmQtc2lkZSBvbmx5IGdsb2JiaW5nJyAnCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnR3by51cmwgIiRzdm5yZXBvIiAmJgogCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS50d28uZmV0Y2ggdHJ1bms6cmVmcy9yZW1vdGVzL3R3by90cnVuayAmJgogCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS50d28uYnJhbmNoZXMgXAotCSAgICAgICAgICAgICAgICAgJ2JyYW5jaGVzLyo6cmVmcy9yZW1vdGVzL3R3by9icmFuY2hlcy8qJyAmJgorCSAgICAgICAgICAgICAgICAgImJyYW5jaGVzLyo6cmVmcy9yZW1vdGVzL3R3by9icmFuY2hlcy8qIiAmJgogCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS50d28udGFncyBcCi0JICAgICAgICAgICAgICAgICAndGFncy8qOnJlZnMvcmVtb3Rlcy90d28vdGFncy8qJyAmJgorCSAgICAgICAgICAgICAgICAgInRhZ3MvKjpyZWZzL3JlbW90ZXMvdHdvL3RhZ3MvKiIgJiYKIAljZCB0bXAgJiYKLQkJZWNobyAndHJ5IHRyeScgPj4gdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCisJCWVjaG8gInRyeSB0cnkiID4+IHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgogCQlwb2tlIHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgotCQlzdm4gY29tbWl0IC1tICd0cnkgdG8gdHJ5JworCQlzdm4gY29tbWl0IC1tICJ0cnkgdG8gdHJ5IgogCQljZCAuLiAmJgogCWdpdC1zdm4gZmV0Y2ggdHdvICYmCi0JdGVzdCBcYGdpdCByZXYtbGlzdCByZWZzL3JlbW90ZXMvdHdvL3RhZ3MvZW5kIHwgd2MgLWxcYCAtZXEgNiAmJgotCXRlc3QgXGBnaXQgcmV2LWxpc3QgcmVmcy9yZW1vdGVzL3R3by9icmFuY2hlcy9zdGFydCB8IHdjIC1sXGAgLWVxIDMgJiYKLQl0ZXN0IFxgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdHdvL2JyYW5jaGVzL3N0YXJ0fjJcYCA9IFwKLQkgICAgIFxgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdHdvL3RydW5rXGAgJiYKLQl0ZXN0IFxgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdHdvL3RhZ3MvZW5kfjNcYCA9IFwKLQkgICAgIFxgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdHdvL2JyYW5jaGVzL3N0YXJ0XGAgJiYKKwl0ZXN0IGBnaXQgcmV2LWxpc3QgcmVmcy9yZW1vdGVzL3R3by90YWdzL2VuZCB8IHdjIC1sYCAtZXEgNiAmJgorCXRlc3QgYGdpdCByZXYtbGlzdCByZWZzL3JlbW90ZXMvdHdvL2JyYW5jaGVzL3N0YXJ0IHwgd2MgLWxgIC1lcSAzICYmCisJdGVzdCBgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdHdvL2JyYW5jaGVzL3N0YXJ0fjJgID0gXAorCSAgICAgYGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3R3by90cnVua2AgJiYKKwl0ZXN0IGBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90d28vdGFncy9lbmR+M2AgPSBcCisJICAgICBgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdHdvL2JyYW5jaGVzL3N0YXJ0YCAmJgogCWdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSByZWZzL3JlbW90ZXMvdHdvL3RhZ3MvZW5kIHwgXAotCSAgICBzZWQgLWUgJ3MvXi5cezQxXH0vLycgPiBvdXRwdXQudHdvICYmCisJICAgIHNlZCAtZSAicy9eLlx7NDFcfS8vIiA+IG91dHB1dC50d28gJiYKIAljbXAgZXhwZWN0LnR3byBvdXRwdXQudHdvCi0JIgorCScKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTEwLWdpdC1zdm4tdXNlLXN2bS1wcm9wcy5zaCBiL3QvdDkxMTAtZ2l0LXN2bi11c2Utc3ZtLXByb3BzLnNoCmluZGV4IDYyMzVhZjQuLjA0NzY1OWYgMTAwNzU1Ci0tLSBhL3QvdDkxMTAtZ2l0LXN2bi11c2Utc3ZtLXByb3BzLnNoCisrKyBiL3QvdDkxMTAtZ2l0LXN2bi11c2Utc3ZtLXByb3BzLnNoCkBAIC03LDE1ICs3LDE1IEBACiAKIC4gLi9saWItZ2l0LXN2bi5zaAogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2FkIHN2bSByZXBvJyAiCi0Jc3ZuYWRtaW4gbG9hZCAtcSAkcmF3c3ZucmVwbyA8IC4uL3Q5MTEwL3N2bS5kdW1wICYmCi0JZ2l0LXN2biBpbml0IC0tbWluaW1pemUtdXJsIC1SIGFyciAtaSBiYXIgJHN2bnJlcG8vbWlycm9yL2FyciAmJgotCWdpdC1zdm4gaW5pdCAtLW1pbmltaXplLXVybCAtUiBhcmdoIC1pIGRpciAkc3ZucmVwby9taXJyb3IvYXJnaCAmJgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9hZCBzdm0gcmVwbycgJworCXN2bmFkbWluIGxvYWQgLXEgIiRyYXdzdm5yZXBvIiA8IC4uL3Q5MTEwL3N2bS5kdW1wICYmCisJZ2l0LXN2biBpbml0IC0tbWluaW1pemUtdXJsIC1SIGFyciAtaSBiYXIgIiRzdm5yZXBvIi9taXJyb3IvYXJyICYmCisJZ2l0LXN2biBpbml0IC0tbWluaW1pemUtdXJsIC1SIGFyZ2ggLWkgZGlyICIkc3ZucmVwbyIvbWlycm9yL2FyZ2ggJiYKIAlnaXQtc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLVIgYXJnaCAtaSBlIFwKLQkgICRzdm5yZXBvL21pcnJvci9hcmdoL2EvYi9jL2QvZSAmJgorCSAgIiRzdm5yZXBvIi9taXJyb3IvYXJnaC9hL2IvYy9kL2UgJiYKIAlnaXQgY29uZmlnIHN2bi51c2VTdm1Qcm9wcyB0cnVlICYmCiAJZ2l0LXN2biBmZXRjaCAtLWFsbAotCSIKKwknCiAKIHV1aWQ9MTYxY2U0MjktYTlkZC00ODI4LWFmNGEtNTIwMjNmOTY4Yzg5CiAKZGlmZiAtLWdpdCBhL3QvdDkxMTEtZ2l0LXN2bi11c2Utc3Zuc3luYy1wcm9wcy5zaCBiL3QvdDkxMTEtZ2l0LXN2bi11c2Utc3Zuc3luYy1wcm9wcy5zaAppbmRleCBlYzdkZWRkLi5hOGQ3NGRjIDEwMDc1NQotLS0gYS90L3Q5MTExLWdpdC1zdm4tdXNlLXN2bnN5bmMtcHJvcHMuc2gKKysrIGIvdC90OTExMS1naXQtc3ZuLXVzZS1zdm5zeW5jLXByb3BzLnNoCkBAIC03LDE0ICs3LDE0IEBACiAKIC4gLi9saWItZ2l0LXN2bi5zaAogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2FkIHN2bnN5bmMgcmVwbycgIgotCXN2bmFkbWluIGxvYWQgLXEgJHJhd3N2bnJlcG8gPCAuLi90OTExMS9zdm5zeW5jLmR1bXAgJiYKLQlnaXQtc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLVIgYXJyIC1pIGJhciAkc3ZucmVwby9iYXIgJiYKLQlnaXQtc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLVIgYXJnaCAtaSBkaXIgJHN2bnJlcG8vZGlyICYmCi0JZ2l0LXN2biBpbml0IC0tbWluaW1pemUtdXJsIC1SIGFyZ2ggLWkgZSAkc3ZucmVwby9kaXIvYS9iL2MvZC9lICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2FkIHN2bnN5bmMgcmVwbycgJworCXN2bmFkbWluIGxvYWQgLXEgIiRyYXdzdm5yZXBvIiA8IC4uL3Q5MTExL3N2bnN5bmMuZHVtcCAmJgorCWdpdC1zdm4gaW5pdCAtLW1pbmltaXplLXVybCAtUiBhcnIgLWkgYmFyICIkc3ZucmVwbyIvYmFyICYmCisJZ2l0LXN2biBpbml0IC0tbWluaW1pemUtdXJsIC1SIGFyZ2ggLWkgZGlyICIkc3ZucmVwbyIvZGlyICYmCisJZ2l0LXN2biBpbml0IC0tbWluaW1pemUtdXJsIC1SIGFyZ2ggLWkgZSAiJHN2bnJlcG8iL2Rpci9hL2IvYy9kL2UgJiYKIAlnaXQgY29uZmlnIHN2bi51c2VTdm5zeW5jUHJvcHMgdHJ1ZSAmJgogCWdpdC1zdm4gZmV0Y2ggLS1hbGwKLQkiCisJJwogCiB1dWlkPTE2MWNlNDI5LWE5ZGQtNDgyOC1hZjRhLTUyMDIzZjk2OGM4OQogCmRpZmYgLS1naXQgYS90L3Q5MTEyLWdpdC1zdm4tbWQ1bGVzcy1maWxlLnNoIGIvdC90OTExMi1naXQtc3ZuLW1kNWxlc3MtZmlsZS5zaAppbmRleCA2NDZhNWYwLi5kNDcwYTkyIDEwMDc1NQotLS0gYS90L3Q5MTEyLWdpdC1zdm4tbWQ1bGVzcy1maWxlLnNoCisrKyBiL3QvdDkxMTItZ2l0LXN2bi1tZDVsZXNzLWZpbGUuc2gKQEAgLTQwLDggKzQwLDggQEAKIAogRU9GCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvYWQgc3ZuIGR1bXBmaWxlJyAic3ZuYWRtaW4gbG9hZCAkcmF3c3ZucmVwbyA8IGR1bXBmaWxlLnN2biIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvYWQgc3ZuIGR1bXBmaWxlJyAnc3ZuYWRtaW4gbG9hZCAiJHJhd3N2bnJlcG8iIDwgZHVtcGZpbGUuc3ZuJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIGdpdC1zdm4nICJnaXQtc3ZuIGluaXQgJHN2bnJlcG8iCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIGdpdC1zdm4nICdnaXQtc3ZuIGluaXQgIiRzdm5yZXBvIicKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHJldmlzaW9ucyBmcm9tIHN2bicgJ2dpdC1zdm4gZmV0Y2gnCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMTMtZ2l0LXN2bi1kY29tbWl0LW5ldy1maWxlLnNoIGIvdC90OTExMy1naXQtc3ZuLWRjb21taXQtbmV3LWZpbGUuc2gKaW5kZXggOWVmMGRiOS4uMzFjOTI5YiAxMDA3NTUKLS0tIGEvdC90OTExMy1naXQtc3ZuLWRjb21taXQtbmV3LWZpbGUuc2gKKysrIGIvdC90OTExMy1naXQtc3ZuLWRjb21taXQtbmV3LWZpbGUuc2gKQEAgLTE1LDE4ICsxNSwxOCBAQAogCiBzdGFydF9zdm5zZXJ2ZSAoKSB7CiAJc3Zuc2VydmUgLS1saXN0ZW4tcG9ydCAkU1ZOU0VSVkVfUE9SVCBcCi0JICAgICAgICAgLS1yb290ICRyYXdzdm5yZXBvIFwKKwkgICAgICAgICAtLXJvb3QgIiRyYXdzdm5yZXBvIiBcCiAJICAgICAgICAgLS1saXN0ZW4tb25jZSBcCiAJICAgICAgICAgLS1saXN0ZW4taG9zdCAxMjcuMC4wLjEgJgogfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCB0cmFja2luZyBhbiBlbXB0eSByZXBvJyAiCi0Jc3ZuIG1rZGlyIC1tICdlbXB0eSBkaXInICRzdm5yZXBvL2VtcHR5LWRpciAmJgotCWVjaG8gYW5vbi1hY2Nlc3MgPSB3cml0ZSA+PiAkcmF3c3ZucmVwby9jb25mL3N2bnNlcnZlLmNvbmYgJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHRyYWNraW5nIGFuIGVtcHR5IHJlcG8nICcKKwlzdm4gbWtkaXIgLW0gImVtcHR5IGRpciIgIiRzdm5yZXBvIi9lbXB0eS1kaXIgJiYKKwllY2hvIGFub24tYWNjZXNzID0gd3JpdGUgPj4gIiRyYXdzdm5yZXBvIi9jb25mL3N2bnNlcnZlLmNvbmYgJiYKIAlzdGFydF9zdm5zZXJ2ZSAmJgogCWdpdCBzdm4gaW5pdCBzdm46Ly8xMjcuMC4wLjE6JFNWTlNFUlZFX1BPUlQgJiYKIAlnaXQgc3ZuIGZldGNoCi0JIgorCScKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGZpbGVzIGluIG5ldyBkaXJlY3Rvcnkgd2l0aCBkY29tbWl0JyAiCiAJbWtkaXIgZ2l0LW5ldy1kaXIgJiYKZGlmZiAtLWdpdCBhL3QvdDkxMTQtZ2l0LXN2bi1kY29tbWl0LW1lcmdlLnNoIGIvdC90OTExNC1naXQtc3ZuLWRjb21taXQtbWVyZ2Uuc2gKaW5kZXggMjI1MDYwYi4uNjFkNzc4MSAxMDA3NTUKLS0tIGEvdC90OTExNC1naXQtc3ZuLWRjb21taXQtbWVyZ2Uuc2gKKysrIGIvdC90OTExNC1naXQtc3ZuLWRjb21taXQtbWVyZ2Uuc2gKQEAgLTM0LDM1ICszNCwzNSBAQAogRU9GCiB9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN2biByZXBvc2l0b3J5JyAiCi0Jc3ZuIGNvICRzdm5yZXBvIG15c3Zud29yayAmJgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3ZuIHJlcG9zaXRvcnknICcKKwlzdm4gY28gIiRzdm5yZXBvIiBteXN2bndvcmsgJiYKIAlta2RpciAtcCBteXN2bndvcmsvdHJ1bmsgJiYKIAljZCBteXN2bndvcmsgJiYKIAkJYmlnX3RleHRfYmxvY2sgPj4gdHJ1bmsvUkVBRE1FICYmCiAJCXN2biBhZGQgdHJ1bmsgJiYKLQkJc3ZuIGNpIC1tICdmaXJzdCBjb21taXQnIHRydW5rICYmCisJCXN2biBjaSAtbSAiZmlyc3QgY29tbWl0IiB0cnVuayAmJgogCQljZCAuLgotCSIKKwknCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGdpdCBtaXJyb3IgYW5kIG1lcmdlJyAiCi0JZ2l0IHN2biBpbml0ICRzdm5yZXBvIC10IHRhZ3MgLVQgdHJ1bmsgLWIgYnJhbmNoZXMgJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGdpdCBtaXJyb3IgYW5kIG1lcmdlJyAnCisJZ2l0IHN2biBpbml0ICIkc3ZucmVwbyIgLXQgdGFncyAtVCB0cnVuayAtYiBicmFuY2hlcyAmJgogCWdpdCBzdm4gZmV0Y2ggJiYKIAlnaXQgY2hlY2tvdXQgLS10cmFjayAtYiBzdm4gcmVtb3Rlcy90cnVuayAmJgogCWdpdCBjaGVja291dCAtYiBtZXJnZSAmJgogCWVjaG8gbmV3IGZpbGUgPiBuZXdfZmlsZSAmJgogCWdpdCBhZGQgbmV3X2ZpbGUgJiYKLQlnaXQgY29tbWl0IC1hIC1tICdOZXcgZmlsZScgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJOZXcgZmlsZSIgJiYKIAllY2hvIGhlbGxvID4+IFJFQURNRSAmJgotCWdpdCBjb21taXQgLWEgLW0gJ2hlbGxvJyAmJgorCWdpdCBjb21taXQgLWEgLW0gImhlbGxvIiAmJgogCWVjaG8gYWRkIHNvbWUgc3R1ZmYgPj4gbmV3X2ZpbGUgJiYKLQlnaXQgY29tbWl0IC1hIC1tICdhZGQgc29tZSBzdHVmZicgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJhZGQgc29tZSBzdHVmZiIgJiYKIAlnaXQgY2hlY2tvdXQgc3ZuICYmCiAJbXYgLWYgUkVBRE1FIHRtcCAmJgogCWVjaG8gZnJpZW5kID4gUkVBRE1FICYmCiAJY2F0IHRtcCA+PiBSRUFETUUgJiYKLQlnaXQgY29tbWl0IC1hIC1tICdmcmllbmQnICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiZnJpZW5kIiAmJgogCWdpdCBwdWxsIC4gbWVyZ2UKLQkiCisJJwogCiB0ZXN0X2RlYnVnICdnaXRrIC0tYWxsICYgc2xlZXAgMScKIApkaWZmIC0tZ2l0IGEvdC90OTExNS1naXQtc3ZuLWRjb21taXQtZnVua3ktcmVuYW1lcy5zaCBiL3QvdDkxMTUtZ2l0LXN2bi1kY29tbWl0LWZ1bmt5LXJlbmFtZXMuc2gKaW5kZXggMTgyMjk5Yy4uZjBmYmQzYSAxMDA3NTUKLS0tIGEvdC90OTExNS1naXQtc3ZuLWRjb21taXQtZnVua3ktcmVuYW1lcy5zaAorKysgYi90L3Q5MTE1LWdpdC1zdm4tZGNvbW1pdC1mdW5reS1yZW5hbWVzLnNoCkBAIC03LDE2ICs3LDE2IEBACiAKIC4gLi9saWItZ2l0LXN2bi5zaAogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2FkIHJlcG9zaXRvcnkgd2l0aCBzdHJhbmdlIG5hbWVzJyAiCi0Jc3ZuYWRtaW4gbG9hZCAtcSAkcmF3c3ZucmVwbyA8IC4uL3Q5MTE1L2Z1bmt5LW5hbWVzLmR1bXAgJiYKLQlzdGFydF9odHRwZAotCSIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvYWQgcmVwb3NpdG9yeSB3aXRoIHN0cmFuZ2UgbmFtZXMnICcKKwlzdm5hZG1pbiBsb2FkIC1xICIkcmF3c3ZucmVwbyIgPCAuLi90OTExNS9mdW5reS1uYW1lcy5kdW1wICYmCisJc3RhcnRfaHR0cGQgZ3RrKworCScKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBhbmQgZmV0Y2ggcmVwb3NpdG9yeScgIgotCWdpdCBzdm4gaW5pdCAkc3ZucmVwbyAmJgordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBhbmQgZmV0Y2ggcmVwb3NpdG9yeScgJworCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iICYmCiAJZ2l0IHN2biBmZXRjaCAmJgogCWdpdCByZXNldCAtLWhhcmQgZ2l0LXN2bgotCSIKKwknCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBmaWxlIGluIGV4aXN0aW5nIHVnbHkgYW5kIGVtcHR5IGRpcicgJwogCW1rZGlyICIje2JhZF9kaXJlY3RvcnlfbmFtZX0iICYmCkBAIC00OSw2ICs0OSwzOSBAQAogCWdpdCBzdm4gZGNvbW1pdAogCScKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGEgZmlsZSB3aXRoIHBsdXMgc2lnbnMnICcKKwllY2hvIC4uID4gK18rICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCArXysgJiYKKwlnaXQgY29tbWl0IC1tIHBsdXMgJiYKKwlta2RpciBndGsrICYmCisJZ2l0IG12ICtfKyBndGsrL18rXyAmJgorCWdpdCBjb21taXQgLW0gcGx1c19kaXIgJiYKKwlnaXQgc3ZuIGRjb21taXQKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHRoZSByZXBvc2l0b3J5IHRvIHRlc3QgcmViYXNlJyAnCisJZ2l0IHN2biBjbG9uZSAiJHN2bnJlcG8iIHRlc3QtcmViYXNlICYmCisJY2QgdGVzdC1yZWJhc2UgJiYKKwkJZWNobyB0ZXN0LXJlYmFzZSA+IHRlc3QtcmViYXNlICYmCisJCWdpdCBhZGQgdGVzdC1yZWJhc2UgJiYKKwkJZ2l0IGNvbW1pdCAtbSB0ZXN0LXJlYmFzZSAmJgorCQljZCAuLgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZSBhIGNvbW1pdCB0byB0ZXN0IHJlYmFzZScgJworCQllY2hvIHRlc3QtcmViYXNlLW1haW4gPiB0ZXN0LXJlYmFzZS1tYWluICYmCisJCWdpdCBhZGQgdGVzdC1yZWJhc2UtbWFpbiAmJgorCQlnaXQgY29tbWl0IC1tIHRlc3QtcmViYXNlLW1haW4gJiYKKwkJZ2l0IHN2biBkY29tbWl0CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQtc3ZuIHJlYmFzZSB3b3JrcyBpbnNpZGUgYSBmcmVzaC1jbG9uZWQgcmVwb3NpdG9yeScgJworCWNkIHRlc3QtcmViYXNlICYmCisJCWdpdCBzdm4gcmViYXNlICYmCisJCXRlc3QgLWUgdGVzdC1yZWJhc2UtbWFpbiAmJgorCQl0ZXN0IC1lIHRlc3QtcmViYXNlCisJJworCiBzdG9wX2h0dHBkCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTExNi1naXQtc3ZuLWxvZy5zaCBiL3QvdDkxMTYtZ2l0LXN2bi1sb2cuc2gKaW5kZXggZTFlOGJkZi4uNGIyY2M4NyAxMDA3NTUKLS0tIGEvdC90OTExNi1naXQtc3ZuLWxvZy5zaAorKysgYi90L3Q5MTE2LWdpdC1zdm4tbG9nLnNoCkBAIC02LDE3ICs2LDE3IEBACiB0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtc3ZuIGxvZyB0ZXN0cycKIC4gLi9saWItZ2l0LXN2bi5zaAogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZXBvc2l0b3J5IGFuZCBpbXBvcnQnICIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG9zaXRvcnkgYW5kIGltcG9ydCcgJwogCW1rZGlyIGltcG9ydCAmJgogCWNkIGltcG9ydCAmJgogCQlmb3IgaSBpbiB0cnVuayBicmFuY2hlcy9hIGJyYW5jaGVzL2IgXAogCQkgICAgICAgICB0YWdzLzAuMSB0YWdzLzAuMiB0YWdzLzAuMzsgZG8KLQkJCW1rZGlyIC1wIFwkaSAmJiBcCi0JCQllY2hvIGhlbGxvID4+IFwkaS9SRUFETUUgfHwgZXhpdCAxCisJCQlta2RpciAtcCAkaSAmJiBcCisJCQllY2hvIGhlbGxvID4+ICRpL1JFQURNRSB8fCBleGl0IDEKIAkJZG9uZSAmJiBcCi0JCXN2biBpbXBvcnQgLW0gdGVzdCAuICRzdm5yZXBvCisJCXN2biBpbXBvcnQgLW0gdGVzdCAuICIkc3ZucmVwbyIKIAkJY2QgLi4gJiYKLQlnaXQtc3ZuIGluaXQgJHN2bnJlcG8gLVQgdHJ1bmsgLWIgYnJhbmNoZXMgLXQgdGFncyAmJgorCWdpdC1zdm4gaW5pdCAiJHN2bnJlcG8iIC1UIHRydW5rIC1iIGJyYW5jaGVzIC10IHRhZ3MgJiYKIAlnaXQtc3ZuIGZldGNoICYmCiAJZ2l0IHJlc2V0IC0taGFyZCB0cnVuayAmJgogCWVjaG8gYnllID4+IFJFQURNRSAmJgpAQCAtMzcsNyArMzcsNyBAQAogCWVjaG8gdHJ5ID4+IFJFQURNRSAmJgogCWdpdCBjb21taXQgLWEgLW0gdHJ5ICYmCiAJZ2l0IHN2biBkY29tbWl0Ci0JIgorCScKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncnVuIGxvZycgIgogCWdpdCByZXNldCAtLWhhcmQgYSAmJgpkaWZmIC0tZ2l0IGEvdC90OTExNy1naXQtc3ZuLWluaXQtY2xvbmUuc2ggYi90L3Q5MTE3LWdpdC1zdm4taW5pdC1jbG9uZS5zaAppbmRleCBkNDgyYjQwLi43YTY4OWJiIDEwMDc1NQotLS0gYS90L3Q5MTE3LWdpdC1zdm4taW5pdC1jbG9uZS5zaAorKysgYi90L3Q5MTE3LWdpdC1zdm4taW5pdC1jbG9uZS5zaApAQCAtMTMsNDMgKzEzLDQzIEBACiBta2RpciB0bXAKIGNkIHRtcAogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzdm5yZXBvJyAiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzdm5yZXBvJyAnCiAJbWtkaXIgcHJvamVjdCBwcm9qZWN0L3RydW5rIHByb2plY3QvYnJhbmNoZXMgcHJvamVjdC90YWdzICYmCiAJZWNobyBmb28gPiBwcm9qZWN0L3RydW5rL2ZvbyAmJgotCXN2biBpbXBvcnQgLW0gJyR0ZXN0X2Rlc2NyaXB0aW9uJyBwcm9qZWN0ICRzdm5yZXBvL3Byb2plY3QgJiYKKwlzdm4gaW1wb3J0IC1tICIkdGVzdF9kZXNjcmlwdGlvbiIgcHJvamVjdCAiJHN2bnJlcG8iL3Byb2plY3QgJiYKIAlybSAtcmYgcHJvamVjdAotCSIKKwknCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jhc2ljIGNsb25lJyAiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXNpYyBjbG9uZScgJwogCXRlc3QgISAtZCB0cnVuayAmJgotCWdpdCBzdm4gY2xvbmUgJHN2bnJlcG8vcHJvamVjdC90cnVuayAmJgorCWdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvIi9wcm9qZWN0L3RydW5rICYmCiAJdGVzdCAtZCB0cnVuay8uZ2l0L3N2biAmJgogCXRlc3QgLWUgdHJ1bmsvZm9vICYmCiAJcm0gLXJmIHRydW5rCi0JIgorCScKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdG8gdGFyZ2V0IGRpcmVjdG9yeScgIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdG8gdGFyZ2V0IGRpcmVjdG9yeScgJwogCXRlc3QgISAtZCB0YXJnZXQgJiYKLQlnaXQgc3ZuIGNsb25lICRzdm5yZXBvL3Byb2plY3QvdHJ1bmsgdGFyZ2V0ICYmCisJZ2l0IHN2biBjbG9uZSAiJHN2bnJlcG8iL3Byb2plY3QvdHJ1bmsgdGFyZ2V0ICYmCiAJdGVzdCAtZCB0YXJnZXQvLmdpdC9zdm4gJiYKIAl0ZXN0IC1lIHRhcmdldC9mb28gJiYKIAlybSAtcmYgdGFyZ2V0Ci0JIgorCScKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgd2l0aCAtLXN0ZGxheW91dCcgIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgd2l0aCAtLXN0ZGxheW91dCcgJwogCXRlc3QgISAtZCBwcm9qZWN0ICYmCi0JZ2l0IHN2biBjbG9uZSAtcyAkc3ZucmVwby9wcm9qZWN0ICYmCisJZ2l0IHN2biBjbG9uZSAtcyAiJHN2bnJlcG8iL3Byb2plY3QgJiYKIAl0ZXN0IC1kIHByb2plY3QvLmdpdC9zdm4gJiYKIAl0ZXN0IC1lIHByb2plY3QvZm9vICYmCiAJcm0gLXJmIHByb2plY3QKLQkiCisJJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB0byB0YXJnZXQgZGlyZWN0b3J5IHdpdGggLS1zdGRsYXlvdXQnICIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHRvIHRhcmdldCBkaXJlY3Rvcnkgd2l0aCAtLXN0ZGxheW91dCcgJwogCXRlc3QgISAtZCB0YXJnZXQgJiYKLQlnaXQgc3ZuIGNsb25lIC1zICRzdm5yZXBvL3Byb2plY3QgdGFyZ2V0ICYmCisJZ2l0IHN2biBjbG9uZSAtcyAiJHN2bnJlcG8iL3Byb2plY3QgdGFyZ2V0ICYmCiAJdGVzdCAtZCB0YXJnZXQvLmdpdC9zdm4gJiYKIAl0ZXN0IC1lIHRhcmdldC9mb28gJiYKIAlybSAtcmYgdGFyZ2V0Ci0JIgorCScKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTE4LWdpdC1zdm4tZnVua3ktYnJhbmNoLW5hbWVzLnNoIGIvdC90OTExOC1naXQtc3ZuLWZ1bmt5LWJyYW5jaC1uYW1lcy5zaAppbmRleCA2NDBiYjA2Li4zMjgxY2JkIDEwMDc1NQotLS0gYS90L3Q5MTE4LWdpdC1zdm4tZnVua3ktYnJhbmNoLW5hbWVzLnNoCisrKyBiL3QvdDkxMTgtZ2l0LXN2bi1mdW5reS1icmFuY2gtbmFtZXMuc2gKQEAgLTYsMjUgKzYsMjUgQEAKIHRlc3RfZGVzY3JpcHRpb249J2dpdC1zdm4gZnVua3kgYnJhbmNoIG5hbWVzJwogLiAuL2xpYi1naXQtc3ZuLnNoCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN2bnJlcG8nICIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN2bnJlcG8nICcKIAlta2RpciBwcm9qZWN0IHByb2plY3QvdHJ1bmsgcHJvamVjdC9icmFuY2hlcyBwcm9qZWN0L3RhZ3MgJiYKIAllY2hvIGZvbyA+IHByb2plY3QvdHJ1bmsvZm9vICYmCi0Jc3ZuIGltcG9ydCAtbSAnJHRlc3RfZGVzY3JpcHRpb24nIHByb2plY3QgXCIkc3ZucmVwby9wciBqZWN0XCIgJiYKKwlzdm4gaW1wb3J0IC1tICIkdGVzdF9kZXNjcmlwdGlvbiIgcHJvamVjdCAiJHN2bnJlcG8vcHIgamVjdCIgJiYKIAlybSAtcmYgcHJvamVjdCAmJgotCXN2biBjcCAtbSAnZnVuJyBcIiRzdm5yZXBvL3ByIGplY3QvdHJ1bmtcIiBcCi0JICAgICAgICAgICAgICAgIFwiJHN2bnJlcG8vcHIgamVjdC9icmFuY2hlcy9mdW4gcGx1Z2luXCIgJiYKLQlzdm4gY3AgLW0gJ21vcmUgZnVuIScgXCIkc3ZucmVwby9wciBqZWN0L2JyYW5jaGVzL2Z1biBwbHVnaW5cIiBcCi0JICAgICAgICAgICAgICAgICAgICAgIFwiJHN2bnJlcG8vcHIgamVjdC9icmFuY2hlcy9tb3JlIGZ1biBwbHVnaW4hXCIgJiYKKwlzdm4gY3AgLW0gImZ1biIgIiRzdm5yZXBvL3ByIGplY3QvdHJ1bmsiIFwKKwkgICAgICAgICAgICAgICAgIiRzdm5yZXBvL3ByIGplY3QvYnJhbmNoZXMvZnVuIHBsdWdpbiIgJiYKKwlzdm4gY3AgLW0gIm1vcmUgZnVuISIgIiRzdm5yZXBvL3ByIGplY3QvYnJhbmNoZXMvZnVuIHBsdWdpbiIgXAorCSAgICAgICAgICAgICAgICAgICAgICAiJHN2bnJlcG8vcHIgamVjdC9icmFuY2hlcy9tb3JlIGZ1biBwbHVnaW4hIiAmJgogCXN0YXJ0X2h0dHBkCi0JIgorCScKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBjbG9uZSB3aXRoIGZ1bmt5IGJyYW5jaCBuYW1lcycgIgotCWdpdCBzdm4gY2xvbmUgLXMgXCIkc3ZucmVwby9wciBqZWN0XCIgcHJvamVjdCAmJgordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBjbG9uZSB3aXRoIGZ1bmt5IGJyYW5jaCBuYW1lcycgJworCWdpdCBzdm4gY2xvbmUgLXMgIiRzdm5yZXBvL3ByIGplY3QiIHByb2plY3QgJiYKIAljZCBwcm9qZWN0ICYmCi0JCWdpdCByZXYtcGFyc2UgJ3JlZnMvcmVtb3Rlcy9mdW4lMjBwbHVnaW4nICYmCi0JCWdpdCByZXYtcGFyc2UgJ3JlZnMvcmVtb3Rlcy9tb3JlJTIwZnVuJTIwcGx1Z2luIScgJiYKKwkJZ2l0IHJldi1wYXJzZSAicmVmcy9yZW1vdGVzL2Z1biUyMHBsdWdpbiIgJiYKKwkJZ2l0IHJldi1wYXJzZSAicmVmcy9yZW1vdGVzL21vcmUlMjBmdW4lMjBwbHVnaW4hIiAmJgogCWNkIC4uCi0JIgorCScKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBkY29tbWl0IHRvIGZ1bmt5IGJyYW5jaCcgIgogCWNkIHByb2plY3QgJiYKZGlmZiAtLWdpdCBhL3QvdDkxMjAtZ2l0LXN2bi1jbG9uZS13aXRoLXBlcmNlbnQtZXNjYXBlcy5zaCBiL3QvdDkxMjAtZ2l0LXN2bi1jbG9uZS13aXRoLXBlcmNlbnQtZXNjYXBlcy5zaAppbmRleCA5YTRlYWJlLi41OTc5ZTEzIDEwMDc1NQotLS0gYS90L3Q5MTIwLWdpdC1zdm4tY2xvbmUtd2l0aC1wZXJjZW50LWVzY2FwZXMuc2gKKysrIGIvdC90OTEyMC1naXQtc3ZuLWNsb25lLXdpdGgtcGVyY2VudC1lc2NhcGVzLnNoCkBAIC02LDEzICs2LDEzIEBACiB0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtc3ZuIGNsb25lIHdpdGggcGVyY2VudCBlc2NhcGVzJwogLiAuL2xpYi1naXQtc3ZuLnNoCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN2bnJlcG8nICIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN2bnJlcG8nICcKIAlta2RpciBwcm9qZWN0IHByb2plY3QvdHJ1bmsgcHJvamVjdC9icmFuY2hlcyBwcm9qZWN0L3RhZ3MgJiYKIAllY2hvIGZvbyA+IHByb2plY3QvdHJ1bmsvZm9vICYmCi0Jc3ZuIGltcG9ydCAtbSAnJHRlc3RfZGVzY3JpcHRpb24nIHByb2plY3QgJyRzdm5yZXBvL3ByIGplY3QnICYmCisJc3ZuIGltcG9ydCAtbSAiJHRlc3RfZGVzY3JpcHRpb24iIHByb2plY3QgIiRzdm5yZXBvL3ByIGplY3QiICYmCiAJcm0gLXJmIHByb2plY3QgJiYKIAlzdGFydF9odHRwZAotIgorJwogCiBpZiB0ZXN0ICIkU1ZOX0hUVFBEX1BPUlQiID0gIiIKIHRoZW4KZGlmZiAtLWdpdCBhL3QvdDkxMjEtZ2l0LXN2bi1mZXRjaC1yZW5hbWVkLWRpci5zaCBiL3QvdDkxMjEtZ2l0LXN2bi1mZXRjaC1yZW5hbWVkLWRpci5zaAppbmRleCA1MTQzZWQ2Li45OTIzMGIwIDEwMDc1NQotLS0gYS90L3Q5MTIxLWdpdC1zdm4tZmV0Y2gtcmVuYW1lZC1kaXIuc2gKKysrIGIvdC90OTEyMS1naXQtc3ZuLWZldGNoLXJlbmFtZWQtZGlyLnNoCkBAIC03LDE0ICs3LDE0IEBACiAKIC4gLi9saWItZ2l0LXN2bi5zaAogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2FkIHJlcG9zaXRvcnkgd2l0aCByZW5hbWVkIGRpcmVjdG9yeScgIgotCXN2bmFkbWluIGxvYWQgLXEgJHJhd3N2bnJlcG8gPCAuLi90OTEyMS9yZW5hbWVkLWRpci5kdW1wCi0JIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9hZCByZXBvc2l0b3J5IHdpdGggcmVuYW1lZCBkaXJlY3RvcnknICcKKwlzdm5hZG1pbiBsb2FkIC1xICIkcmF3c3ZucmVwbyIgPCAuLi90OTEyMS9yZW5hbWVkLWRpci5kdW1wCisJJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IGFuZCBmZXRjaCByZXBvc2l0b3J5JyAiCi0JZ2l0IHN2biBpbml0ICRzdm5yZXBvL25ld25hbWUgJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgYW5kIGZldGNoIHJlcG9zaXRvcnknICcKKwlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvL25ld25hbWUiICYmCiAJZ2l0IHN2biBmZXRjaAotCSIKKwknCiAKIHRlc3RfZG9uZQogCmRpZmYgLS1naXQgYS90L3Q5MTIyLWdpdC1zdm4tYXV0aG9yLnNoIGIvdC90OTEyMi1naXQtc3ZuLWF1dGhvci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMTkwNTc2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTEyMi1naXQtc3ZuLWF1dGhvci5zaApAQCAtMCwwICsxLDg0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBhdXRob3JzaGlwJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN2biByZXBvc2l0b3J5JyAnCisJc3ZuIGNoZWNrb3V0ICIkc3ZucmVwbyIgd29yay5zdm4gJiYKKwkoCisJCWNkIHdvcmsuc3ZuICYmCisJCWVjaG8gPmZpbGUKKwkJc3ZuIGFkZCBmaWxlCisJCXN2biBjb21taXQgLW0gImZpcnN0IGNvbW1pdCIgZmlsZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW50ZXJhY3Qgd2l0aCBpdCB2aWEgZ2l0LXN2bicgJworCW1rZGlyIHdvcmsuZ2l0ICYmCisJKAorCQljZCB3b3JrLmdpdCAmJgorCQlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIgorCQlnaXQgc3ZuIGZldGNoICYmCisKKwkJZWNobyBtb2RpZmljYXRpb24gPmZpbGUgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLWEgLW0gc2Vjb25kICYmCisKKwkJdGVzdF90aWNrICYmCisJCWdpdCBzdm4gZGNvbW1pdCAmJgorCisJCWVjaG8gImZ1cnRoZXIgbW9kaWZpY2F0aW9uIiA+ZmlsZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSB0aGlyZCAmJgorCisJCXRlc3RfdGljayAmJgorCQlnaXQgc3ZuIC0tYWRkLWF1dGhvci1mcm9tIGRjb21taXQgJiYKKworCQllY2hvICJ5ZXQgZnVydGhlciBtb2RpZmljYXRpb24iID5maWxlICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1hIC1tIGZvdXJ0aCAmJgorCisJCXRlc3RfdGljayAmJgorCQlnaXQgc3ZuIC0tYWRkLWF1dGhvci1mcm9tIC0tdXNlLWxvZy1hdXRob3IgZGNvbW1pdCAmJgorCisJCWdpdCBsb2cgJiYKKworCQlnaXQgc2hvdyAtcyBIRUFEXl4gPi4uL2FjdHVhbC4yICYmCisJCWdpdCBzaG93IC1zIEhFQUReICA+Li4vYWN0dWFsLjMgJiYKKwkJZ2l0IHNob3cgLXMgSEVBRCAgID4uLi9hY3R1YWwuNAorCisJKSAmJgorCisJIyBNYWtlIHN1cmUgdGhhdCAtLWFkZC1hdXRob3ItZnJvbSB3aXRob3V0IC0tdXNlLWxvZy1hdXRob3IKKwkjIGRpZCBub3QgYWZmZWN0IHRoZSBhdXRob3JzaGlwIGluZm9ybWF0aW9uCisJbXlzZWxmPSQoZ3JlcCAiXkF1dGhvcjogIiBhY3R1YWwuMikgJiYKKwl1bmFmZmVjdGVkPSQoZ3JlcCAiXkF1dGhvcjogIiBhY3R1YWwuMykgJiYKKwl0ZXN0ICJ6JG15c2VsZiIgPSAieiR1bmFmZmVjdGVkIiAmJgorCisJIyBNYWtlIHN1cmUgbGFjayBvZiAtLWFkZC1hdXRob3ItZnJvbSBkaWQgbm90IGFkZCBjcnVmdAorCSEgZ3JlcCAiXiAgICBGcm9tOiBBIFUgVGhvciAiIGFjdHVhbC4yICYmCisKKwkjIE1ha2Ugc3VyZSAtLWFkZC1hdXRob3ItZnJvbSBhZGRlZCBjcnVmdAorCWdyZXAgIl4gICAgRnJvbTogQSBVIFRob3IgIiBhY3R1YWwuMyAmJgorCWdyZXAgIl4gICAgRnJvbTogQSBVIFRob3IgIiBhY3R1YWwuNCAmJgorCisJIyBNYWtlIHN1cmUgLS1hZGQtYXV0aG9yLWZyb20gd2l0aCAtLXVzZS1sb2ctYXV0aG9yIGFmZmVjdGVkCisJIyB0aGUgYXV0aG9yc2hpcCBpbmZvcm1hdGlvbgorCWdyZXAgIl5BdXRob3I6IEEgVSBUaG9yICIgYWN0dWFsLjQgJiYKKworCSMgTWFrZSBzdXJlIHRoZXJlIGFyZSBubyBjb21taXQgbWVzc2FnZXMgd2l0aCBleGNlc3MgYmxhbmsgbGluZXMKKwl0ZXN0ICQoZ3JlcCAiXiAiIGFjdHVhbC4yIHwgd2MgLWwpID0gMyAmJgorCXRlc3QgJChncmVwICJeICIgYWN0dWFsLjMgfCB3YyAtbCkgPSA1ICYmCisJdGVzdCAkKGdyZXAgIl4gIiBhY3R1YWwuNCB8IHdjIC1sKSA9IDUgJiYKKworCSMgTWFrZSBzdXJlIHRoZXJlIGFyZSBubyBzdm4gY29tbWl0IG1lc3NhZ2VzIHdpdGggZXhjZXNzIGJsYW5rIGxpbmVzCisJKAorCQljZCB3b3JrLnN2biAmJgorCQlzdm4gdXAgJiYKKwkJCisJCXRlc3QgJChzdm4gbG9nIC1yMjoyIHwgd2MgLWwpID0gNSAmJgorCQl0ZXN0ICQoc3ZuIGxvZyAtcjQ6NCB8IHdjIC1sKSA9IDcKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEyMy1naXQtc3ZuLXJlYnVpbGQtd2l0aC1yZXdyaXRlcm9vdC5zaCBiL3QvdDkxMjMtZ2l0LXN2bi1yZWJ1aWxkLXdpdGgtcmV3cml0ZXJvb3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzE4ODc4ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMjMtZ2l0LXN2bi1yZWJ1aWxkLXdpdGgtcmV3cml0ZXJvb3Quc2gKQEAgLTAsMCArMSwzMiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBKYW4gS3LDvGdlcgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtc3ZuIHJlc3BlY3RzIHJld3JpdGVSb290IGR1cmluZyByZWJ1aWxkJworCisuIC4vbGliLWdpdC1zdm4uc2gKKworbWtkaXIgaW1wb3J0CitjZCBpbXBvcnQKKwl0b3VjaCBmb28KKwlzdm4gaW1wb3J0IC1tICdpbXBvcnQgZm9yIGdpdC1zdm4nIC4gIiRzdm5yZXBvIiA+L2Rldi9udWxsCitjZCAuLgorcm0gLXJmIGltcG9ydAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0LCBmZXRjaCBhbmQgY2hlY2tvdXQgcmVwb3NpdG9yeScgJworCWdpdCBzdm4gaW5pdCAtLXJld3JpdGUtcm9vdD1odHRwOi8vaW52YWxpZC5pbnZhbGlkLyAiJHN2bnJlcG8iICYmCisJZ2l0IHN2biBmZXRjaAorCWdpdCBjaGVja291dCAtYiBteWJyYW5jaCByZW1vdGVzL2dpdC1zdm4KKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZSByZXZfbWFwJyAnCisJcm0gIiRHSVRfU1ZOX0RJUiIvLnJldl9tYXAuKgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVidWlsZCByZXZfbWFwJyAnCisJZ2l0IHN2biByZWJhc2UgPi9kZXYvbnVsbAorCScKKwordGVzdF9kb25lCisKZGlmZiAtLWdpdCBhL3QvdDkyMDAtZ2l0LWN2c2V4cG9ydGNvbW1pdC5zaCBiL3QvdDkyMDAtZ2l0LWN2c2V4cG9ydGNvbW1pdC5zaAppbmRleCA0MmIxNDRiLi5iMWRjMzJkIDEwMDc1NQotLS0gYS90L3Q5MjAwLWdpdC1jdnNleHBvcnRjb21taXQuc2gKKysrIGIvdC90OTIwMC1naXQtY3ZzZXhwb3J0Y29tbWl0LnNoCkBAIC0yOTcsNCArMjk3LDIxIEBACiAKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlIHRoZSBzYW1lIGNoZWNrb3V0IGZvciBHaXQgYW5kIENWUycgJworCisJKG1rZGlyIHNoYXJlZCAmJgorCSBjZCBzaGFyZWQgJiYKKwkgdW5zZXQgR0lUX0RJUiAmJgorCSBjdnMgY28gLiAmJgorCSBnaXQgaW5pdCAmJgorCSBnaXQgYWRkICIgc3BhY2UiICYmCisJIGdpdCBjb21taXQgLW0gImZha2UgaW5pdGlhbCBjb21taXQiICYmCisJIGVjaG8gSGVsbG8gPj4gIiBzcGFjZSIgJiYKKwkgZ2l0IGNvbW1pdCAtbSAiQW5vdGhlciBjaGFuZ2UiICIgc3BhY2UiICYmCisJIGdpdCBjdnNleHBvcnRjb21taXQgLVcgLXAgLXUgLWMgSEVBRCAmJgorCSBncmVwIEhlbGxvICIgc3BhY2UiICYmCisJIGdpdCBkaWZmLWZpbGVzKQorCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTMwMC1mYXN0LWltcG9ydC5zaCBiL3QvdDkzMDAtZmFzdC1pbXBvcnQuc2gKaW5kZXggYzRmNDQ2NS4uNWVkZjU2ZiAxMDA3NTUKLS0tIGEvdC90OTMwMC1mYXN0LWltcG9ydC5zaAorKysgYi90L3Q5MzAwLWZhc3QtaW1wb3J0LnNoCkBAIC03NCw3ICs3NCw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKIAknQTogdmVyaWZ5IGNvbW1pdCcgXAogCSdnaXQgY2F0LWZpbGUgY29tbWl0IG1hc3RlciB8IHNlZCAxZCA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCcKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsJwogCiBjYXQgPmV4cGVjdCA8PEVPRgogMTAwNjQ0IGJsb2IgZmlsZTIKQEAgLTg0LDIyICs4NCwyMiBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAJJ0E6IHZlcmlmeSB0cmVlJyBcCiAJJ2dpdCBjYXQtZmlsZSAtcCBtYXN0ZXJee3RyZWV9IHwgc2VkICJzLyBbMC05YS1mXSoJLyAvIiA+YWN0dWFsICYmCi0JIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwnCisJIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCiAKIGVjaG8gIiRmaWxlMl9kYXRhIiA+ZXhwZWN0CiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKIAknQTogdmVyaWZ5IGZpbGUyJyBcCi0JJ2dpdCBjYXQtZmlsZSBibG9iIG1hc3RlcjpmaWxlMiA+YWN0dWFsICYmIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwnCisJJ2dpdCBjYXQtZmlsZSBibG9iIG1hc3RlcjpmaWxlMiA+YWN0dWFsICYmIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCiAKIGVjaG8gIiRmaWxlM19kYXRhIiA+ZXhwZWN0CiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKIAknQTogdmVyaWZ5IGZpbGUzJyBcCi0JJ2dpdCBjYXQtZmlsZSBibG9iIG1hc3RlcjpmaWxlMyA+YWN0dWFsICYmIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwnCisJJ2dpdCBjYXQtZmlsZSBibG9iIG1hc3RlcjpmaWxlMyA+YWN0dWFsICYmIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCiAKIHByaW50ZiAiJGZpbGU0X2RhdGEiID5leHBlY3QKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogCSdBOiB2ZXJpZnkgZmlsZTQnIFwKLQknZ2l0IGNhdC1maWxlIGJsb2IgbWFzdGVyOmZpbGU0ID5hY3R1YWwgJiYgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCcKKwknZ2l0IGNhdC1maWxlIGJsb2IgbWFzdGVyOmZpbGU0ID5hY3R1YWwgJiYgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKIAogY2F0ID5leHBlY3QgPDxFT0YKIDoyIGBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcjpmaWxlMmAKQEAgLTEwOSw3ICsxMDksNyBAQAogRU9GCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKIAknQTogdmVyaWZ5IG1hcmtzIG91dHB1dCcgXAotCSdnaXQgZGlmZiBleHBlY3QgbWFya3Mub3V0JworCSd0ZXN0X2NtcCBleHBlY3QgbWFya3Mub3V0JwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKIAknQTogdmVyaWZ5IG1hcmtzIGltcG9ydCcgXApAQCAtMTE3LDcgKzExNyw3IEBACiAJCS0taW1wb3J0LW1hcmtzPW1hcmtzLm91dCBcCiAJCS0tZXhwb3J0LW1hcmtzPW1hcmtzLm5ldyBcCiAJCTwvZGV2L251bGwgJiYKLQlnaXQgZGlmZiAtdSBleHBlY3QgbWFya3MubmV3JworCXRlc3RfY21wIGV4cGVjdCBtYXJrcy5uZXcnCiAKIHRlc3RfdGljawogY2F0ID5pbnB1dCA8PElOUFVUX0VORApAQCAtMjU5LDcgKzI1OSw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKIAknQzogdmVyaWZ5IGNvbW1pdCcgXAogCSdnaXQgY2F0LWZpbGUgY29tbWl0IGJyYW5jaCB8IHNlZCAxZCA+YWN0dWFsICYmCi0JIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwnCisJIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCiAKIGNhdCA+ZXhwZWN0IDw8RU9GCiA6MDAwMDAwIDEwMDc1NSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIGYxZmI1ZGE3MTgzOTI2OTRkMDA3NmQ2NzdkNmQwZTM2NGM3OWIwYmMgQQlmaWxlMi9uZXdmCkBAIC0zMTYsMTMgKzMxNiwxMyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAJJ0Q6IHZlcmlmeSBmaWxlNScgXAogCSdnaXQgY2F0LWZpbGUgYmxvYiBicmFuY2g6bmV3ZGlyL2ludGVyZXN0aW5nID5hY3R1YWwgJiYKLQkgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCcKKwkgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKIAogZWNobyAiJGZpbGU2X2RhdGEiID5leHBlY3QKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogCSdEOiB2ZXJpZnkgZmlsZTYnIFwKIAknZ2l0IGNhdC1maWxlIGJsb2IgYnJhbmNoOm5ld2Rpci9leGVjLnNoID5hY3R1YWwgJiYKLQkgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCcKKwkgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKIAogIyMjCiAjIyMgc2VyaWVzIEUKQEAgLTM1OCw3ICszNTgsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAJJ0U6IHZlcmlmeSBjb21taXQnIFwKIAknZ2l0IGNhdC1maWxlIGNvbW1pdCBicmFuY2ggfCBzZWQgMSwyZCA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCcKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsJwogCiAjIyMKICMjIyBzZXJpZXMgRgpAQCAtNDExLDcgKzQxMSw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKIAknRjogdmVyaWZ5IG90aGVyIGNvbW1pdCcgXAogCSdnaXQgY2F0LWZpbGUgY29tbWl0IG90aGVyID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsJworCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCiAKICMjIwogIyMjIHNlcmllcyBHCkBAIC00ODksNyArNDg5LDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogCSdIOiB2ZXJpZnkgZmlsZScgXAogCSdnaXQgY2F0LWZpbGUgYmxvYiBIOmgvZS9sL2xvID5hY3R1YWwgJiYKLQkgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCcKKwkgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKIAogIyMjCiAjIyMgc2VyaWVzIEkKQEAgLTUxNSw3ICs1MTUsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAJJ0k6IHZlcmlmeSBlZGdlIGxpc3QnIFwKIAknc2VkIC1lIHMvcGFjay0uKnBhY2svcGFjay0ucGFjay8gZWRnZXMubGlzdCA+YWN0dWFsICYmCi0JIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwnCisJIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCiAKICMjIwogIyMjIHNlcmllcyBKCkBAIC02MjUsNyArNjI1LDcgQEAKICAgICAnTDogdmVyaWZ5IGludGVybmFsIHRyZWUgc29ydGluZycgXAogCSdnaXQtZmFzdC1pbXBvcnQgPGlucHV0ICYmCiAJIGdpdCBkaWZmLXRyZWUgLS1hYmJyZXYgLS1yYXcgTF4gTCA+b3V0cHV0ICYmCi0JIGdpdCBkaWZmIGV4cGVjdCBvdXRwdXQnCisJIHRlc3RfY21wIGV4cGVjdCBvdXRwdXQnCiAKICMjIwogIyMjIHNlcmllcyBNCkBAIC04ODUsNyArODg1LDcgQEAKIAkgdGVzdCA4ID0gYGZpbmQgLmdpdC9vYmplY3RzL3BhY2sgLXR5cGUgZiB8IHdjIC1sYCAmJgogCSB0ZXN0IGBnaXQgcmV2LXBhcnNlIHJlZnMvdGFncy9PMy0ybmRgID0gYGdpdCByZXYtcGFyc2UgTzNeYCAmJgogCSBnaXQgbG9nIC0tcmV2ZXJzZSAtLXByZXR0eT1vbmVsaW5lIE8zIHwgc2VkIHMvXi4qei8vID5hY3R1YWwgJiYKLQkgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCcKKwkgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKIAogY2F0ID5pbnB1dCA8PElOUFVUX0VORAogY29tbWl0IHJlZnMvaGVhZHMvTzQKQEAgLTkxNiw2ICs5MTYsNiBAQAogCSdPOiBwcm9ncmVzcyBvdXRwdXRzIGFzIHJlcXVlc3RlZCBieSBpbnB1dCcgXAogCSdnaXQtZmFzdC1pbXBvcnQgPGlucHV0ID5hY3R1YWwgJiYKIAkgZ3JlcCAicHJvZ3Jlc3MgIiA8aW5wdXQgPmV4cGVjdCAmJgotCSBnaXQgZGlmZiBleHBlY3QgYWN0dWFsJworCSB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsJwogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk0MDAtZ2l0LWN2c3NlcnZlci1zZXJ2ZXIuc2ggYi90L3Q5NDAwLWdpdC1jdnNzZXJ2ZXItc2VydmVyLnNoCmluZGV4IDE2NmI0M2YuLmU5N2FhYTYgMTAwNzU1Ci0tLSBhL3QvdDk0MDAtZ2l0LWN2c3NlcnZlci1zZXJ2ZXIuc2gKKysrIGIvdC90OTQwMC1naXQtY3Zzc2VydmVyLXNlcnZlci5zaApAQCAtMTUzLDIxICsxNTMsMjEgQEAKICAgIHRhaWwgbG9nIHwgZ3JlcCAiXmVycm9yIDEgQ29uZmxpY3Rpbmcgcm9vdHMgc3BlY2lmaWVkJCInCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcV9Sb290IChzdHJpY3QgcGF0aHMpJyBcCi0gICdjYXQgcmVxdWVzdC1hbm9ueW1vdXMgfCBnaXQtY3Zzc2VydmVyIC0tc3RyaWN0LXBhdGhzIHBzZXJ2ZXIgJFNFUlZFUkRJUiA+bG9nIDI+JjEgJiYKKyAgJ2NhdCByZXF1ZXN0LWFub255bW91cyB8IGdpdC1jdnNzZXJ2ZXIgLS1zdHJpY3QtcGF0aHMgcHNlcnZlciAiJFNFUlZFUkRJUiIgPmxvZyAyPiYxICYmCiAgICBzZWQgLW5lIFwkcCBsb2cgfCBncmVwICJeSSBMT1ZFIFlPVSQiJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXFfUm9vdCBmYWlsdXJlIChzdHJpY3QtcGF0aHMpJyAnCiAgICAgISBjYXQgcmVxdWVzdC1hbm9ueW1vdXMgfAotICAgIGdpdC1jdnNzZXJ2ZXIgLS1zdHJpY3QtcGF0aHMgcHNlcnZlciAkV09SS0RJUiA+bG9nIDI+JjEKKyAgICBnaXQtY3Zzc2VydmVyIC0tc3RyaWN0LXBhdGhzIHBzZXJ2ZXIgIiRXT1JLRElSIiA+bG9nIDI+JjEKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmVxX1Jvb3QgKHcvbyBzdHJpY3QtcGF0aHMpJyBcCi0gICdjYXQgcmVxdWVzdC1hbm9ueW1vdXMgfCBnaXQtY3Zzc2VydmVyIHBzZXJ2ZXIgJFdPUktESVIvID5sb2cgMj4mMSAmJgorICAnY2F0IHJlcXVlc3QtYW5vbnltb3VzIHwgZ2l0LWN2c3NlcnZlciBwc2VydmVyICIkV09SS0RJUi8iID5sb2cgMj4mMSAmJgogICAgc2VkIC1uZSBcJHAgbG9nIHwgZ3JlcCAiXkkgTE9WRSBZT1UkIicKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmVxX1Jvb3QgZmFpbHVyZSAody9vIHN0cmljdC1wYXRocyknICcKICAgICAhIGNhdCByZXF1ZXN0LWFub255bW91cyB8Ci0gICAgZ2l0LWN2c3NlcnZlciBwc2VydmVyICRXT1JLRElSL2dpdGN2cyA+bG9nIDI+JjEKKyAgICBnaXQtY3Zzc2VydmVyIHBzZXJ2ZXIgIiRXT1JLRElSL2dpdGN2cyIgPmxvZyAyPiYxCiAnCiAKIGNhdCA+cmVxdWVzdC1iYXNlICA8PEVPRgpAQCAtMTgwLDI1ICsxODAsMjUgQEAKIEVPRgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXFfUm9vdCAoYmFzZS1wYXRoKScgXAotICAnY2F0IHJlcXVlc3QtYmFzZSB8IGdpdC1jdnNzZXJ2ZXIgLS1zdHJpY3QtcGF0aHMgLS1iYXNlLXBhdGggJFdPUktESVIvIHBzZXJ2ZXIgJFNFUlZFUkRJUiA+bG9nIDI+JjEgJiYKKyAgJ2NhdCByZXF1ZXN0LWJhc2UgfCBnaXQtY3Zzc2VydmVyIC0tc3RyaWN0LXBhdGhzIC0tYmFzZS1wYXRoICIkV09SS0RJUi8iIHBzZXJ2ZXIgIiRTRVJWRVJESVIiID5sb2cgMj4mMSAmJgogICAgc2VkIC1uZSBcJHAgbG9nIHwgZ3JlcCAiXkkgTE9WRSBZT1UkIicKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmVxX1Jvb3QgZmFpbHVyZSAoYmFzZS1wYXRoKScgJwogICAgICEgY2F0IHJlcXVlc3QtYW5vbnltb3VzIHwKLSAgICBnaXQtY3Zzc2VydmVyIC0tc3RyaWN0LXBhdGhzIC0tYmFzZS1wYXRoICRXT1JLRElSIHBzZXJ2ZXIgJFNFUlZFUkRJUiA+bG9nIDI+JjEKKyAgICBnaXQtY3Zzc2VydmVyIC0tc3RyaWN0LXBhdGhzIC0tYmFzZS1wYXRoICIkV09SS0RJUiIgcHNlcnZlciAiJFNFUlZFUkRJUiIgPmxvZyAyPiYxCiAnCiAKIEdJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgLS1ib29sIGdpdGN2cy5lbmFibGVkIGZhbHNlIHx8IGV4aXQgMQogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXFfUm9vdCAoZXhwb3J0LWFsbCknIFwKLSAgJ2NhdCByZXF1ZXN0LWFub255bW91cyB8IGdpdC1jdnNzZXJ2ZXIgLS1leHBvcnQtYWxsIHBzZXJ2ZXIgJFdPUktESVIgPmxvZyAyPiYxICYmCisgICdjYXQgcmVxdWVzdC1hbm9ueW1vdXMgfCBnaXQtY3Zzc2VydmVyIC0tZXhwb3J0LWFsbCBwc2VydmVyICIkV09SS0RJUiIgPmxvZyAyPiYxICYmCiAgICBzZWQgLW5lIFwkcCBsb2cgfCBncmVwICJeSSBMT1ZFIFlPVSQiJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXFfUm9vdCBmYWlsdXJlIChleHBvcnQtYWxsIHcvbyB3aGl0ZWxpc3QpJyBcCiAgICchIChjYXQgcmVxdWVzdC1hbm9ueW1vdXMgfCBnaXQtY3Zzc2VydmVyIC0tZXhwb3J0LWFsbCBwc2VydmVyID5sb2cgMj4mMSB8fCBmYWxzZSknCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcV9Sb290IChldmVyeXRoaW5nIHRvZ2V0aGVyKScgXAotICAnY2F0IHJlcXVlc3QtYmFzZSB8IGdpdC1jdnNzZXJ2ZXIgLS1leHBvcnQtYWxsIC0tc3RyaWN0LXBhdGhzIC0tYmFzZS1wYXRoICRXT1JLRElSLyBwc2VydmVyICRTRVJWRVJESVIgPmxvZyAyPiYxICYmCisgICdjYXQgcmVxdWVzdC1iYXNlIHwgZ2l0LWN2c3NlcnZlciAtLWV4cG9ydC1hbGwgLS1zdHJpY3QtcGF0aHMgLS1iYXNlLXBhdGggIiRXT1JLRElSLyIgcHNlcnZlciAiJFNFUlZFUkRJUiIgPmxvZyAyPiYxICYmCiAgICBzZWQgLW5lIFwkcCBsb2cgfCBncmVwICJeSSBMT1ZFIFlPVSQiJwogCiBHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIC0tYm9vbCBnaXRjdnMuZW5hYmxlZCB0cnVlIHx8IGV4aXQgMQpkaWZmIC0tZ2l0IGEvdC90OTQwMS1naXQtY3Zzc2VydmVyLWNybGYuc2ggYi90L3Q5NDAxLWdpdC1jdnNzZXJ2ZXItY3JsZi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMjdhMWM1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTQwMS1naXQtY3Zzc2VydmVyLWNybGYuc2gKQEAgLTAsMCArMSwzMzcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggTWF0dGhldyBPZ2lsdmllCisjIFBhcnRzIGFkYXB0ZWQgZnJvbSBvdGhlciB0ZXN0cy4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0LWN2c3NlcnZlciAta2IgbW9kZXMKKwordGVzdHMgLWtiIG1vZGUgZm9yIGJpbmFyeSBmaWxlcyB3aGVuIGFjY2Vzc2luZyBhIGdpdAorcmVwb3NpdG9yeSB1c2luZyBjdnMgQ0xJIGNsaWVudCB2aWEgZ2l0LWN2c3NlcnZlciBzZXJ2ZXInCisKKy4gLi90ZXN0LWxpYi5zaAorCitxX3RvX251bCAoKSB7CisgICAgcGVybCAtcGUgJ3kvUS9cMDAwLycKK30KKworcV90b19jciAoKSB7CisgICAgdHIgUSAnXDAxNScKK30KKworbWFya2VkX2FzICgpIHsKKyAgICBmb3VuZEVudHJ5PSIkKGdyZXAgIl4vJDIvIiAiJDEvQ1ZTL0VudHJpZXMiKSIKKyAgICBpZiBbIHgiJGZvdW5kRW50cnkiID0geCIiIF0gOyB0aGVuCisgICAgICAgZWNobyAiTk9UIEZPVU5EOiAkMSAkMiAxICQzIiA+PiAiJHtXT1JLRElSfS9tYXJrZWQubG9nIgorICAgICAgIHJldHVybiAxCisgICAgZmkKKyAgICB0ZXN0IHgiJChncmVwICJeLyQyLyIgIiQxL0NWUy9FbnRyaWVzIiB8IGN1dCAtZC8gLWY1KSIgPSB4IiQzIgorICAgIHN0YXQ9JD8KKyAgICBlY2hvICIkMSAkMiAkc3RhdCAnJDMnIiA+PiAiJHtXT1JLRElSfS9tYXJrZWQubG9nIgorICAgIHJldHVybiAkc3RhdAorfQorCitub3RfcHJlc2VudCgpIHsKKyAgICBmb3VuZEVudHJ5PSIkKGdyZXAgIl4vJDIvIiAiJDEvQ1ZTL0VudHJpZXMiKSIKKyAgICBpZiBbIC1yICIkMS8kMiIgXSA7IHRoZW4KKyAgICAgICAgZWNobyAiRXJyb3I6IEZpbGUgc3RpbGwgZXhpc3RzOiAkMSAkMiIgPj4gIiR7V09SS0RJUn0vbWFya2VkLmxvZyIKKyAgICAgICAgcmV0dXJuIDE7CisgICAgZmkKKyAgICBpZiBbIHgiJGZvdW5kRW50cnkiICE9IHgiIiBdIDsgdGhlbgorICAgICAgICBlY2hvICJFcnJvcjogc2hvdWxkIG5vdCBoYXZlIGZvdW5kOiAkMSAkMiIgPj4gIiR7V09SS0RJUn0vbWFya2VkLmxvZyIKKyAgICAgICAgcmV0dXJuIDE7CisgICAgZWxzZQorICAgICAgICBlY2hvICJDb3JyZWN0bHkgbm90IGZvdW5kOiAkMSAkMiIgPj4gIiR7V09SS0RJUn0vbWFya2VkLmxvZyIKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZmkKK30KKworY3ZzID4vZGV2L251bGwgMj4mMQoraWYgdGVzdCAkPyAtbmUgMQordGhlbgorICAgIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NraXBwaW5nIGdpdC1jdnNzZXJ2ZXIgdGVzdHMsIGN2cyBub3QgZm91bmQnIDoKKyAgICB0ZXN0X2RvbmUKKyAgICBleGl0CitmaQorcGVybCAtZSAndXNlIERCSTsgdXNlIERCRDo6U1FMaXRlJyA+L2Rldi9udWxsIDI+JjEgfHwgeworICAgIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NraXBwaW5nIGdpdC1jdnNzZXJ2ZXIgdGVzdHMsIFBlcmwgU1FMaXRlIGludGVyZmFjZSB1bmF2YWlsYWJsZScgOgorICAgIHRlc3RfZG9uZQorICAgIGV4aXQKK30KKwordW5zZXQgR0lUX0RJUiBHSVRfQ09ORklHCitXT1JLRElSPSQocHdkKQorU0VSVkVSRElSPSQocHdkKS9naXRjdnMuZ2l0CitnaXRfY29uZmlnPSIkU0VSVkVSRElSL2NvbmZpZyIKK0NWU1JPT1Q9Ijpmb3JrOiRTRVJWRVJESVIiCitDVlNXT1JLPSIkKHB3ZCkvY3Zzd29yayIKK0NWU19TRVJWRVI9Z2l0LWN2c3NlcnZlcgorZXhwb3J0IENWU1JPT1QgQ1ZTX1NFUlZFUgorCitybSAtcmYgIiRDVlNXT1JLIiAiJFNFUlZFUkRJUiIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisgICAgZWNobyAiU2ltcGxlIHRleHQgZmlsZSIgPnRleHRmaWxlLmMgJiYKKyAgICBlY2hvICJGaWxlIHdpdGggZW1iZWRkZWQgTlVMOiBRIDwtIHRoZXJlIiB8IHFfdG9fbnVsID4gYmluZmlsZS5iaW4gJiYKKyAgICBta2RpciBzdWJkaXIgJiYKKyAgICBlY2hvICJBbm90aGVyIHRleHQgZmlsZSIgPiBzdWJkaXIvZmlsZS5oICYmCisgICAgZWNobyAiQW5vdGhlciBiaW5hcnk6IFEgKHRoaXMgdGltZSBDUikiIHwgcV90b19jciA+IHN1YmRpci93aXRoQ3IuYmluICYmCisgICAgZWNobyAiTWl4ZWQgdXAgTlVMLCBidXQgbWFya2VkIHRleHQ6IFEgPC0gdGhlcmUiIHwgcV90b19udWwgPiBtaXhlZFVwLmMKKyAgICBlY2hvICJVbnNwZWNpZmllZCIgPiBzdWJkaXIvdW5zcGVjaWZpZWQub3RoZXIgJiYKKyAgICBlY2hvICIvKi5iaW4gLWNybGYiID4gLmdpdGF0dHJpYnV0ZXMgJiYKKyAgICBlY2hvICIvKi5jIGNybGYiID4+IC5naXRhdHRyaWJ1dGVzICYmCisgICAgZWNobyAic3ViZGlyLyouYmluIC1jcmxmIiA+PiAuZ2l0YXR0cmlidXRlcyAmJgorICAgIGVjaG8gInN1YmRpci8qLmMgY3JsZiIgPj4gLmdpdGF0dHJpYnV0ZXMgJiYKKyAgICBlY2hvICJzdWJkaXIvZmlsZS5oIGNybGYiID4+IC5naXRhdHRyaWJ1dGVzICYmCisgICAgZ2l0IGFkZCAuZ2l0YXR0cmlidXRlcyB0ZXh0ZmlsZS5jIGJpbmZpbGUuYmluIG1peGVkVXAuYyBzdWJkaXIvKiAmJgorICAgIGdpdCBjb21taXQgLXEgLW0gIkZpcnN0IENvbW1pdCIgJiYKKyAgICBnaXQgY2xvbmUgLXEgLS1sb2NhbCAtLWJhcmUgIiRXT1JLRElSLy5naXQiICIkU0VSVkVSRElSIiA+L2Rldi9udWxsIDI+JjEgJiYKKyAgICBHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIC0tYm9vbCBnaXRjdnMuZW5hYmxlZCB0cnVlICYmCisgICAgR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyBnaXRjdnMubG9nZmlsZSAiJFNFUlZFUkRJUi9naXRjdnMubG9nIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgY28gKGRlZmF1bHQgY3JsZiknICcKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGNvIC1kIGN2c3dvcmsgbWFzdGVyID5jdnMubG9nIDI+JjEgJiYKKyAgICB0ZXN0IHgiJChncmVwICcvLWsnIGN2c3dvcmsvQ1ZTL0VudHJpZXMgY3Zzd29yay9zdWJkaXIvQ1ZTL0VudHJpZXMpIiA9IHgiIgorJworCitybSAtcmYgY3Zzd29yawordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIGNvIChhbGxiaW5hcnkpJyAnCisgICAgR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyAtLWJvb2wgZ2l0Y3ZzLmFsbGJpbmFyeSB0cnVlICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBjbyAtZCBjdnN3b3JrIG1hc3RlciA+Y3ZzLmxvZyAyPiYxICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgdGV4dGZpbGUuYyAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBiaW5maWxlLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayAuZ2l0YXR0cmlidXRlcyAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBtaXhlZFVwLmMgLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIHdpdGhDci5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIGZpbGUuaCAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgdW5zcGVjaWZpZWQub3RoZXIgLWtiCisnCisKK3JtIC1yZiBjdnN3b3JrIGN2cy5sb2cKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBjbyAodXNlIGF0dHJpYnV0ZXMvYWxsYmluYXJ5KScgJworICAgIEdJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgLS1ib29sIGdpdGN2cy51c2VjcmxmYXR0ciB0cnVlICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBjbyAtZCBjdnN3b3JrIG1hc3RlciA+Y3ZzLmxvZyAyPiYxICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgdGV4dGZpbGUuYyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIGJpbmZpbGUuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIC5naXRhdHRyaWJ1dGVzIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIG1peGVkVXAuYyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciB3aXRoQ3IuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciBmaWxlLmggIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgdW5zcGVjaWZpZWQub3RoZXIgLWtiCisnCisKK3JtIC1yZiBjdnN3b3JrCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgY28gKHVzZSBhdHRyaWJ1dGVzKScgJworICAgIEdJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgLS1ib29sIGdpdGN2cy5hbGxiaW5hcnkgZmFsc2UgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGNvIC1kIGN2c3dvcmsgbWFzdGVyID5jdnMubG9nIDI+JjEgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayB0ZXh0ZmlsZS5jICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgYmluZmlsZS5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgLmdpdGF0dHJpYnV0ZXMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBtaXhlZFVwLmMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgd2l0aENyLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgZmlsZS5oICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIHVuc3BlY2lmaWVkLm90aGVyICIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZGluZyBmaWxlcycgJworICAgIGNkIGN2c3dvcmsvc3ViZGlyICYmCisgICAgZWNobyAibW9yZSB0ZXh0IiA+IHNyYy5jICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBhZGQgc3JjLmMgPmN2cy5sb2cgMj4mMSAmJgorICAgIG1hcmtlZF9hcyAuIHNyYy5jICIiICYmCisgICAgZWNobyAicHN1ZWRvLWJpbmFyeSIgPiB0ZW1wLmJpbiAmJgorICAgIGNkIC4uICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBhZGQgc3ViZGlyL3RlbXAuYmluID5jdnMubG9nIDI+JjEgJiYKKyAgICBtYXJrZWRfYXMgc3ViZGlyIHRlbXAuYmluICIta2IiICYmCisgICAgY2Qgc3ViZGlyICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBjaSAtbSAiYWRkaW5nIGZpbGVzIiA+Y3ZzLmxvZyAyPiYxICYmCisgICAgbWFya2VkX2FzIC4gdGVtcC5iaW4gIi1rYiIgJiYKKyAgICBtYXJrZWRfYXMgLiBzcmMuYyAiIgorJworCitjZCAiJFdPUktESVIiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGluZycgJworICAgIGdpdCBwdWxsIGdpdGN2cy5naXQgJiYKKyAgICBlY2hvICdoaScgPiBzdWJkaXIvbmV3ZmlsZS5iaW4gJiYKKyAgICBlY2hvICdqdW5rJyA+IHN1YmRpci9maWxlLmggJiYKKyAgICBlY2hvICdoaScgPiBzdWJkaXIvbmV3ZmlsZS5jICYmCisgICAgZWNobyAnaGVsbG8nID4+IGJpbmZpbGUuYmluICYmCisgICAgZ2l0IGFkZCBzdWJkaXIvbmV3ZmlsZS5iaW4gc3ViZGlyL2ZpbGUuaCBzdWJkaXIvbmV3ZmlsZS5jIGJpbmZpbGUuYmluICYmCisgICAgZ2l0IGNvbW1pdCAtcSAtbSAiQWRkIGFuZCBjaGFuZ2Ugc29tZSBmaWxlcyIgJiYKKyAgICBnaXQgcHVzaCBnaXRjdnMuZ2l0ID4vZGV2L251bGwgJiYKKyAgICBjZCBjdnN3b3JrICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSB1cGRhdGUgJiYKKyAgICBjZCAuLiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIHRleHRmaWxlLmMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBiaW5maWxlLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayAuZ2l0YXR0cmlidXRlcyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIG1peGVkVXAuYyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciB3aXRoQ3IuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciBmaWxlLmggIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgdW5zcGVjaWZpZWQub3RoZXIgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgbmV3ZmlsZS5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIG5ld2ZpbGUuYyAiIiAmJgorICAgIGVjaG8gIkZpbGUgd2l0aCBlbWJlZGRlZCBOVUw6IFEgPC0gdGhlcmUiIHwgcV90b19udWwgPiB0bXBFeHBlY3QxICYmCisgICAgZWNobyAiaGVsbG8iID4+IHRtcEV4cGVjdDEgJiYKKyAgICBjbXAgY3Zzd29yay9iaW5maWxlLmJpbiB0bXBFeHBlY3QxCisnCisKK3JtIC1yZiBjdnN3b3JrCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgY28gKHVzZSBhdHRyaWJ1dGVzL2d1ZXNzKScgJworICAgIEdJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgZ2l0Y3ZzLmFsbGJpbmFyeSBndWVzcyAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgY28gLWQgY3Zzd29yayBtYXN0ZXIgPmN2cy5sb2cgMj4mMSAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIHRleHRmaWxlLmMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBiaW5maWxlLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayAuZ2l0YXR0cmlidXRlcyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIG1peGVkVXAuYyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciB3aXRoQ3IuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciBmaWxlLmggIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgdW5zcGVjaWZpZWQub3RoZXIgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgbmV3ZmlsZS5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIG5ld2ZpbGUuYyAiIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBtdWx0aS1saW5lIGZpbGVzJyAnCisgICAgKCBlY2hvICJsaW5lIDEiICYmCisgICAgICBlY2hvICJsaW5lIDIiICYmCisgICAgICBlY2hvICJsaW5lIDMiICYmCisgICAgICBlY2hvICJsaW5lIDQgd2l0aCBOVUw6IFEgPC0iICkgfCBxX3RvX251bCA+IG11bHRpbGluZS5jICYmCisgICAgZ2l0IGFkZCBtdWx0aWxpbmUuYyAmJgorICAgICggZWNobyAibGluZSAxIiAmJgorICAgICAgZWNobyAibGluZSAyIiAmJgorICAgICAgZWNobyAibGluZSAzIiAmJgorICAgICAgZWNobyAibGluZSA0IiApIHwgcV90b19udWwgPiBtdWx0aWxpbmVUeHQuYyAmJgorICAgIGdpdCBhZGQgbXVsdGlsaW5lVHh0LmMgJiYKKyAgICBnaXQgY29tbWl0IC1xIC1tICJtdWx0aWxpbmUgZmlsZXMiICYmCisgICAgZ2l0IHB1c2ggZ2l0Y3ZzLmdpdCA+L2Rldi9udWxsCisnCisKK3JtIC1yZiBjdnN3b3JrCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgY28gKGd1ZXNzKScgJworICAgIEdJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgLS1ib29sIGdpdGN2cy51c2VjcmxmYXR0ciBmYWxzZSAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgY28gLWQgY3Zzd29yayBtYXN0ZXIgPmN2cy5sb2cgMj4mMSAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIHRleHRmaWxlLmMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBiaW5maWxlLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayAuZ2l0YXR0cmlidXRlcyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIG1peGVkVXAuYyAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBtdWx0aWxpbmUuYyAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBtdWx0aWxpbmVUeHQuYyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciB3aXRoQ3IuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciBmaWxlLmggIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgdW5zcGVjaWZpZWQub3RoZXIgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgbmV3ZmlsZS5iaW4gIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgbmV3ZmlsZS5jICIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBjbyBhbm90aGVyIGNvcHkgKGd1ZXNzKScgJworICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgY28gLWQgY3Zzd29yazIgbWFzdGVyID5jdnMubG9nIDI+JjEgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgdGV4dGZpbGUuYyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiBiaW5maWxlLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgLmdpdGF0dHJpYnV0ZXMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgbWl4ZWRVcC5jIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiBtdWx0aWxpbmUuYyAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgbXVsdGlsaW5lVHh0LmMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIvc3ViZGlyIHdpdGhDci5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyL3N1YmRpciBmaWxlLmggIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIvc3ViZGlyIHVuc3BlY2lmaWVkLm90aGVyICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyL3N1YmRpciBuZXdmaWxlLmJpbiAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMi9zdWJkaXIgbmV3ZmlsZS5jICIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCB0ZXh0IChndWVzcyknICcKKyAgICBjZCBjdnN3b3JrICYmCisgICAgZWNobyAic2ltcGxlVGV4dCIgPiBzaW1wbGVUZXh0LmMgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGFkZCBzaW1wbGVUZXh0LmMgJiYKKyAgICBjZCAuLiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIHNpbXBsZVRleHQuYyAiIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgYmluIChndWVzcyknICcKKyAgICBjZCBjdnN3b3JrICYmCisgICAgZWNobyAic2ltcGxlQmluOiBOVUw6IFEgPC0gdGhlcmUiIHwgcV90b19udWwgPiBzaW1wbGVCaW4uYmluICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBhZGQgc2ltcGxlQmluLmJpbiAmJgorICAgIGNkIC4uICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgc2ltcGxlQmluLmJpbiAta2IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIGZpbGVzIChndWVzcyknICcKKyAgICBjZCBjdnN3b3JrICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBybSAtZiBzdWJkaXIvZmlsZS5oICYmCisgICAgY2Qgc3ViZGlyICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBybSAtZiB3aXRoQ3IuYmluICYmCisgICAgY2QgLi4vLi4gJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgd2l0aENyLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgZmlsZS5oICIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBjaSAoZ3Vlc3MpJyAnCisgICAgY2QgY3Zzd29yayAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgY2kgLW0gImFkZC9ybSBmaWxlcyIgPmN2cy5sb2cgMj4mMSAmJgorICAgIGNkIC4uICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgdGV4dGZpbGUuYyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIGJpbmZpbGUuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIC5naXRhdHRyaWJ1dGVzICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgbWl4ZWRVcC5jIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIG11bHRpbGluZS5jIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIG11bHRpbGluZVR4dC5jICIiICYmCisgICAgbm90X3ByZXNlbnQgY3Zzd29yay9zdWJkaXIgd2l0aENyLmJpbiAmJgorICAgIG5vdF9wcmVzZW50IGN2c3dvcmsvc3ViZGlyIGZpbGUuaCAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciB1bnNwZWNpZmllZC5vdGhlciAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciBuZXdmaWxlLmJpbiAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciBuZXdmaWxlLmMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBzaW1wbGVCaW4uYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIHNpbXBsZVRleHQuYyAiIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgc3ViZGlyIG9mIG90aGVyIGNvcHkgKGd1ZXNzKScgJworICAgIGNkIGN2c3dvcmsyL3N1YmRpciAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgdXBkYXRlICYmCisgICAgY2QgLi4vLi4gJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgdGV4dGZpbGUuYyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiBiaW5maWxlLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgLmdpdGF0dHJpYnV0ZXMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgbWl4ZWRVcC5jIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiBtdWx0aWxpbmUuYyAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgbXVsdGlsaW5lVHh0LmMgIiIgJiYKKyAgICBub3RfcHJlc2VudCBjdnN3b3JrMi9zdWJkaXIgd2l0aENyLmJpbiAmJgorICAgIG5vdF9wcmVzZW50IGN2c3dvcmsyL3N1YmRpciBmaWxlLmggJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIvc3ViZGlyIHVuc3BlY2lmaWVkLm90aGVyICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyL3N1YmRpciBuZXdmaWxlLmJpbiAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMi9zdWJkaXIgbmV3ZmlsZS5jICIiICYmCisgICAgbm90X3ByZXNlbnQgY3Zzd29yazIgc2ltcGxlQmluLmJpbiAmJgorICAgIG5vdF9wcmVzZW50IGN2c3dvcmsyIHNpbXBsZVRleHQuYworJworCitlY2hvICJzdGFydGluZyB1cGRhdGUvbWVyZ2UiID4+ICIke1dPUktESVJ9L21hcmtlZC5sb2ciCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUvbWVyZ2UgZnVsbCBvdGhlciBjb3B5IChndWVzcyknICcKKyAgICBnaXQgcHVsbCBnaXRjdnMuZ2l0IG1hc3RlciAmJgorICAgIHNlZCAicy8zL3JlcGxhY2VkXzMvIiA8IG11bHRpbGluZVR4dC5jID4gbWwudGVtcCAmJgorICAgIG12IG1sLnRlbXAgbXVsdGlsaW5lVHh0LmMgJiYKKyAgICBnaXQgYWRkIG11bHRpbGluZVR4dC5jICYmCisgICAgZ2l0IGNvbW1pdCAtcSAtbSAibW9kaWZ5IG11bHRpbGluZSBmaWxlIiA+PiAiJHtXT1JLRElSfS9tYXJrZWQubG9nIiAmJgorICAgIGdpdCBwdXNoIGdpdGN2cy5naXQgPi9kZXYvbnVsbCAmJgorICAgIGNkIGN2c3dvcmsyICYmCisgICAgc2VkICJzLzEvcmVwbGFjZWRfMS8iIDwgbXVsdGlsaW5lVHh0LmMgPiBtbC50ZW1wICYmCisgICAgbXYgbWwudGVtcCBtdWx0aWxpbmVUeHQuYyAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgdXBkYXRlID4gY3ZzLmxvZyAyPiYxICYmCisgICAgY2QgLi4gJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgdGV4dGZpbGUuYyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiBiaW5maWxlLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgLmdpdGF0dHJpYnV0ZXMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgbWl4ZWRVcC5jIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiBtdWx0aWxpbmUuYyAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgbXVsdGlsaW5lVHh0LmMgIiIgJiYKKyAgICBub3RfcHJlc2VudCBjdnN3b3JrMi9zdWJkaXIgd2l0aENyLmJpbiAmJgorICAgIG5vdF9wcmVzZW50IGN2c3dvcmsyL3N1YmRpciBmaWxlLmggJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIvc3ViZGlyIHVuc3BlY2lmaWVkLm90aGVyICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyL3N1YmRpciBuZXdmaWxlLmJpbiAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMi9zdWJkaXIgbmV3ZmlsZS5jICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIHNpbXBsZUJpbi5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIHNpbXBsZVRleHQuYyAiIiAmJgorICAgIGVjaG8gImxpbmUgcmVwbGFjZWRfMSIgPiB0bXBFeHBlY3QyICYmCisgICAgZWNobyAibGluZSAyIiA+PiB0bXBFeHBlY3QyICYmCisgICAgZWNobyAibGluZSByZXBsYWNlZF8zIiA+PiB0bXBFeHBlY3QyICYmCisgICAgZWNobyAibGluZSA0IiB8IHFfdG9fbnVsID4+IHRtcEV4cGVjdDIgJiYKKyAgICBjbXAgY3Zzd29yazIvbXVsdGlsaW5lVHh0LmMgdG1wRXhwZWN0MgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk1MDAtZ2l0d2ViLXN0YW5kYWxvbmUtbm8tZXJyb3JzLnNoIGIvdC90OTUwMC1naXR3ZWItc3RhbmRhbG9uZS1uby1lcnJvcnMuc2gKaW5kZXggMDYxYTI1OS4uYWU3MDgyYiAxMDA3NTUKLS0tIGEvdC90OTUwMC1naXR3ZWItc3RhbmRhbG9uZS1uby1lcnJvcnMuc2gKKysrIGIvdC90OTUwMC1naXR3ZWItc3RhbmRhbG9uZS1uby1lcnJvcnMuc2gKQEAgLTEwLDYgKzEwLDcgQEAKIG9yIHdhcm5pbmdzIHRvIGxvZy4nCiAKIGdpdHdlYl9pbml0ICgpIHsKKwlzYWZlX3B3ZD0iJChwZXJsIC1NUE9TSVg9Z2V0Y3dkIC1lICdwcmludCBxdW90ZW1ldGEoZ2V0Y3dkKScpIgogCWNhdCA+Z2l0d2ViX2NvbmZpZy5wZXJsIDw8RU9GCiAjIS91c3IvYmluL3BlcmwKIApAQCAtMTcsMTYgKzE4LDE2IEBACiAKIG91ciBcJHZlcnNpb24gPSAiY3VycmVudCI7CiBvdXIgXCRHSVQgPSAiZ2l0IjsKLW91ciBcJHByb2plY3Ryb290ID0gIiQocHdkKSI7CitvdXIgXCRwcm9qZWN0cm9vdCA9ICIkc2FmZV9wd2QiOwogb3VyIFwkcHJvamVjdF9tYXhkZXB0aCA9IDg7CiBvdXIgXCRob21lX2xpbmtfc3RyID0gInByb2plY3RzIjsKIG91ciBcJHNpdGVfbmFtZSA9ICJbbG9jYWxob3N0XSI7CiBvdXIgXCRzaXRlX2hlYWRlciA9ICIiOwogb3VyIFwkc2l0ZV9mb290ZXIgPSAiIjsKIG91ciBcJGhvbWVfdGV4dCA9ICJpbmRleHRleHQuaHRtbCI7Ci1vdXIgQHN0eWxlc2hlZXRzID0gKCJmaWxlOi8vLyQocHdkKS8uLi8uLi9naXR3ZWIvZ2l0d2ViLmNzcyIpOwotb3VyIFwkbG9nbyA9ICJmaWxlOi8vLyQocHdkKS8uLi8uLi9naXR3ZWIvZ2l0LWxvZ28ucG5nIjsKLW91ciBcJGZhdmljb24gPSAiZmlsZTovLy8kKHB3ZCkvLi4vLi4vZ2l0d2ViL2dpdC1mYXZpY29uLnBuZyI7CitvdXIgQHN0eWxlc2hlZXRzID0gKCJmaWxlOi8vLyRzYWZlX3B3ZC8uLi8uLi9naXR3ZWIvZ2l0d2ViLmNzcyIpOworb3VyIFwkbG9nbyA9ICJmaWxlOi8vLyRzYWZlX3B3ZC8uLi8uLi9naXR3ZWIvZ2l0LWxvZ28ucG5nIjsKK291ciBcJGZhdmljb24gPSAiZmlsZTovLy8kc2FmZV9wd2QvLi4vLi4vZ2l0d2ViL2dpdC1mYXZpY29uLnBuZyI7CiBvdXIgXCRwcm9qZWN0c19saXN0ID0gIiI7CiBvdXIgXCRleHBvcnRfb2sgPSAiIjsKIG91ciBcJHN0cmljdF9leHBvcnQgPSAiIjsKQEAgLTM5LDE5ICs0MCwyMSBAQAogfQogCiBnaXR3ZWJfcnVuICgpIHsKLQlleHBvcnQgR0FURVdBWV9JTlRFUkZBQ0U9IkNHSS8xLjEiCi0JZXhwb3J0IEhUVFBfQUNDRVBUPSIqLyoiCi0JZXhwb3J0IFJFUVVFU1RfTUVUSE9EPSJHRVQiCi0JZXhwb3J0IFFVRVJZX1NUUklORz0iIiQxIiIKLQlleHBvcnQgUEFUSF9JTkZPPSIiJDIiIgorCUdBVEVXQVlfSU5URVJGQUNFPSJDR0kvMS4xIgorCUhUVFBfQUNDRVBUPSIqLyoiCisJUkVRVUVTVF9NRVRIT0Q9IkdFVCIKKwlRVUVSWV9TVFJJTkc9IiIkMSIiCisJUEFUSF9JTkZPPSIiJDIiIgorCWV4cG9ydCBHQVRFV0FZX0lOVEVSRkFDRSBIVFRQX0FDQ0VQVCBSRVFVRVNUX01FVEhPRCBRVUVSWV9TVFJJTkcgUEFUSF9JTkZPCiAKLQlleHBvcnQgR0lUV0VCX0NPTkZJRz0kKHB3ZCkvZ2l0d2ViX2NvbmZpZy5wZXJsCisJR0lUV0VCX0NPTkZJRz0kKHB3ZCkvZ2l0d2ViX2NvbmZpZy5wZXJsCisJZXhwb3J0IEdJVFdFQl9DT05GSUcKIAogCSMgc29tZSBvZiBnaXQgY29tbWFuZHMgd3JpdGUgdG8gU1RERVJSIG9uIGVycm9yLCBidXQgdGhpcyBpcyBub3QKIAkjIHdyaXR0ZW4gdG8gd2ViIHNlcnZlciBsb2dzLCBzbyB3ZSBhcmUgbm90IGludGVyZXN0ZWQgaW4gdGhhdDoKIAkjIHdlIGFyZSBpbnRlcmVzdGVkIG9ubHkgaW4gcHJvcGVybHkgZm9ybWF0dGVkIGVycm9ycy93YXJuaW5ncwogCXJtIC1mIGdpdHdlYi5sb2cgJiYKLQlwZXJsIC0tICQocHdkKS8uLi8uLi9naXR3ZWIvZ2l0d2ViLnBlcmwgXAorCXBlcmwgLS0gIiQocHdkKS8uLi8uLi9naXR3ZWIvZ2l0d2ViLnBlcmwiIFwKIAkJPi9kZXYvbnVsbCAyPmdpdHdlYi5sb2cgJiYKIAlpZiBncmVwIC1xIC1zICJeW1tdIiBnaXR3ZWIubG9nID4vZGV2L251bGw7IHRoZW4gZmFsc2U7IGVsc2UgdHJ1ZTsgZmkKIApkaWZmIC0tZ2l0IGEvdC90OTYwMC1jdnNpbXBvcnQuc2ggYi90L3Q5NjAwLWN2c2ltcG9ydC5zaAppbmRleCAwMGE3NGVlLi42NTVmODgyIDEwMDc1NQotLS0gYS90L3Q5NjAwLWN2c2ltcG9ydC5zaAorKysgYi90L3Q5NjAwLWN2c2ltcG9ydC5zaApAQCAtMzYsNyArMzYsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBhIGN2cyBtb2R1bGUnICcKIAotCW1rZGlyICRDVlNST09UL21vZHVsZSAmJgorCW1rZGlyICIkQ1ZTUk9PVC9tb2R1bGUiICYmCiAJY3ZzIGNvIC1kIG1vZHVsZS1jdnMgbW9kdWxlICYmCiAJY2QgbW9kdWxlLWN2cyAmJgogCWNhdCA8PEVPRiA+b19mb3J0dW5hICYmCkBAIC02OSw3ICs2OSw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbXBvcnQgYSB0cml2aWFsIG1vZHVsZScgJwogCiAJZ2l0IGN2c2ltcG9ydCAtYSAteiAwIC1DIG1vZHVsZS1naXQgbW9kdWxlICYmCi0JZ2l0IGRpZmYgbW9kdWxlLWN2cy9vX2ZvcnR1bmEgbW9kdWxlLWdpdC9vX2ZvcnR1bmEKKwl0ZXN0X2NtcCBtb2R1bGUtY3ZzL29fZm9ydHVuYSBtb2R1bGUtZ2l0L29fZm9ydHVuYQogCiAnCiAKQEAgLTExMCw3ICsxMTAsNyBAQAogCWdpdCBjdnNpbXBvcnQgLWEgLXogMCBtb2R1bGUgJiYKIAlnaXQgbWVyZ2Ugb3JpZ2luICYmCiAJY2QgLi4gJiYKLQlnaXQgZGlmZiBtb2R1bGUtY3ZzL29fZm9ydHVuYSBtb2R1bGUtZ2l0L29fZm9ydHVuYQorCXRlc3RfY21wIG1vZHVsZS1jdnMvb19mb3J0dW5hIG1vZHVsZS1naXQvb19mb3J0dW5hCiAKICcKIApAQCAtMTMxLDcgKzEzMSw3IEBACiAJCWdpdCBjdnNpbXBvcnQgLWEgLXowICYmCiAJCWdpdCBtZXJnZSBvcmlnaW4gJiYKIAljZCAuLiAmJgotCWdpdCBkaWZmIG1vZHVsZS1jdnMvdGljayBtb2R1bGUtZ2l0L3RpY2sKKwl0ZXN0X2NtcCBtb2R1bGUtY3ZzL3RpY2sgbW9kdWxlLWdpdC90aWNrCiAKICcKIApAQCAtMTQyLDcgKzE0Miw3IEBACiAJCWdpdCBjdnNpbXBvcnQgLWEgLXowICYmCiAJCWVjaG8gMSA+ZXhwZWN0ICYmCiAJCWdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVzJW4gPmFjdHVhbCAmJgotCQlnaXQgZGlmZiBhY3R1YWwgZXhwZWN0ICYmCisJCXRlc3RfY21wIGFjdHVhbCBleHBlY3QgJiYKIAljZCAuLgogCiAnCmRpZmYgLS1naXQgYS90L3Rlc3QtbGliLnNoIGIvdC90ZXN0LWxpYi5zaAppbmRleCA3YzJhOGJhLi5jODYxMTQxIDEwMDY0NAotLS0gYS90L3Rlc3QtbGliLnNoCisrKyBiL3QvdGVzdC1saWIuc2gKQEAgLTE2MCw2ICsxNjAsMjIgQEAKIAogdHJhcCAnZGllJyBleGl0CiAKKyMgVGhlIHNlbWFudGljcyBvZiB0aGUgZWRpdG9yIHZhcmlhYmxlcyBhcmUgdGhhdCBvZiBpbnZva2luZworIyBzaCAtYyAiJEVESVRPUiBcIiRAXCIiIGZpbGVzIC4uLgorIworIyBJZiBvdXIgdHJhc2ggZGlyZWN0b3J5IGNvbnRhaW5zIHNoZWxsIG1ldGFjaGFyYWN0ZXJzLCB0aGV5IHdpbGwgYmUKKyMgaW50ZXJwcmV0ZWQgaWYgd2UganVzdCBzZXQgJEVESVRPUiBkaXJlY3RseSwgc28gZG8gYSBsaXR0bGUgZGFuY2Ugd2l0aAorIyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gd29yayBhcm91bmQgdGhpcy4KKyMKKyMgSW4gcGFydGljdWxhciwgcXVvdGluZyBpc24ndCBlbm91Z2gsIGFzIHRoZSBwYXRoIG1heSBjb250YWluIHRoZSBzYW1lIHF1b3RlCisjIHRoYXQgd2UncmUgdXNpbmcuCit0ZXN0X3NldF9lZGl0b3IgKCkgeworCUZBS0VfRURJVE9SPSIkMSIKKwlleHBvcnQgRkFLRV9FRElUT1IKKwlWSVNVQUw9JyIkRkFLRV9FRElUT1IiJworCWV4cG9ydCBWSVNVQUwKK30KKwogdGVzdF90aWNrICgpIHsKIAlpZiB0ZXN0IC16ICIke3Rlc3RfdGljaytzZXR9IgogCXRoZW4KQEAgLTMyOSw3ICszNDUsNyBAQAogCXJlcG89IiQxIgogCW1rZGlyICIkcmVwbyIKIAljZCAiJHJlcG8iIHx8IGVycm9yICJDYW5ub3Qgc2V0dXAgdGVzdCBlbnZpcm9ubWVudCIKLQkiJEdJVF9FWEVDX1BBVEgvZ2l0IiBpbml0IC0tdGVtcGxhdGU9JEdJVF9FWEVDX1BBVEgvdGVtcGxhdGVzL2JsdC8gPi9kZXYvbnVsbCAyPiYxIHx8CisJIiRHSVRfRVhFQ19QQVRIL2dpdCIgaW5pdCAiLS10ZW1wbGF0ZT0kR0lUX0VYRUNfUEFUSC90ZW1wbGF0ZXMvYmx0LyIgPi9kZXYvbnVsbCAyPiYxIHx8CiAJZXJyb3IgImNhbm5vdCBydW4gZ2l0IGluaXQgLS0gaGF2ZSB5b3UgYnVpbHQgdGhpbmdzIHlldD8iCiAJbXYgLmdpdC9ob29rcyAuZ2l0L2hvb2tzLWRpc2FibGVkCiAJY2QgIiRvd2QiCkBAIC0zNTIsNyArMzY4LDcgQEAKIAljYXNlICIkdGVzdF9mYWlsdXJlIiBpbgogCTApCiAJCSMgV2UgY291bGQ6Ci0JCSMgY2QgLi4gJiYgcm0gLWZyIHRyYXNoCisJCSMgY2QgLi4gJiYgcm0gLWZyICd0cmFzaCBkaXJlY3RvcnknCiAJCSMgYnV0IHRoYXQgbWVhbnMgd2UgZm9yYmlkIGFueSB0ZXN0cyB0aGF0IHVzZSB0aGVpciBvd24KIAkJIyBzdWJkaXJlY3RvcnkgZnJvbSBjYWxsaW5nIHRlc3RfZG9uZSB3aXRob3V0IGNvbWluZyBiYWNrCiAJCSMgdG8gd2hlcmUgdGhleSBzdGFydGVkIGZyb20uCkBAIC0zNzAsNyArMzg2LDcgQEAKIH0KIAogIyBUZXN0IHRoZSBiaW5hcmllcyB3ZSBoYXZlIGp1c3QgYnVpbHQuICBUaGUgdGVzdHMgYXJlIGtlcHQgaW4KLSMgdC8gc3ViZGlyZWN0b3J5IGFuZCBhcmUgcnVuIGluIHRyYXNoIHN1YmRpcmVjdG9yeS4KKyMgdC8gc3ViZGlyZWN0b3J5IGFuZCBhcmUgcnVuIGluICd0cmFzaCBkaXJlY3RvcnknIHN1YmRpcmVjdG9yeS4KIFBBVEg9JChwd2QpLy4uOiRQQVRICiBHSVRfRVhFQ19QQVRIPSQocHdkKS8uLgogR0lUX1RFTVBMQVRFX0RJUj0kKHB3ZCkvLi4vdGVtcGxhdGVzL2JsdApAQCAtMzk1LDE1ICs0MTEsMTcgQEAKIC4gLi4vR0lULUJVSUxELU9QVElPTlMKIAogIyBUZXN0IHJlcG9zaXRvcnkKLXRlc3Q9dHJhc2gKK3Rlc3Q9InRyYXNoIGRpcmVjdG9yeSIKIHJtIC1mciAiJHRlc3QiIHx8IHsKIAl0cmFwIC0gZXhpdAogCWVjaG8gPiY1ICJGQVRBTDogQ2Fubm90IHByZXBhcmUgdGVzdCBhcmVhIgogCWV4aXQgMQogfQogCi10ZXN0X2NyZWF0ZV9yZXBvICR0ZXN0Ci1jZCAiJHRlc3QiCit0ZXN0X2NyZWF0ZV9yZXBvICIkdGVzdCIKKyMgVXNlIC1QIHRvIHJlc29sdmUgc3ltbGlua3MgaW4gb3VyIHdvcmtpbmcgZGlyZWN0b3J5IHNvIHRoYXQgdGhlIGN3ZAorIyBpbiBzdWJwcm9jZXNzZXMgbGlrZSBnaXQgZXF1YWxzIG91ciAkUFdEIChmb3IgcGF0aG5hbWUgY29tcGFyaXNvbnMpLgorY2QgLVAgIiR0ZXN0IiB8fCBleGl0IDEKIAogdGhpc190ZXN0PSQoZXhwciAiLi8kMCIgOiAnLiovXCh0WzAtOV0qXCktW14vXSokJykKIGZvciBza3AgaW4gJEdJVF9TS0lQX1RFU1RTCmRpZmYgLS1naXQgYS90ZW1wbGF0ZXMvaG9va3MtLXByZXBhcmUtY29tbWl0LW1zZyBiL3RlbXBsYXRlcy9ob29rcy0tcHJlcGFyZS1jb21taXQtbXNnCmluZGV4IGZmMGY0MmEuLmQzYzFkYTMgMTAwNjQ0Ci0tLSBhL3RlbXBsYXRlcy9ob29rcy0tcHJlcGFyZS1jb21taXQtbXNnCisrKyBiL3RlbXBsYXRlcy9ob29rcy0tcHJlcGFyZS1jb21taXQtbXNnCkBAIC0yMCwxMSArMjAsMTEgQEAKICMgVGhlIHRoaXJkIGV4YW1wbGUgYWRkcyBhIFNpZ25lZC1vZmYtYnkgbGluZSB0byB0aGUgbWVzc2FnZSwgdGhhdCBjYW4KICMgc3RpbGwgYmUgZWRpdGVkLiAgVGhpcyBpcyByYXJlbHkgYSBnb29kIGlkZWEuCiAKLWNhc2UgIiQyICQzIiBpbgotICBtZXJnZSkKLSAgICBzZWQgLWkgJy9eQ29uZmxpY3RzOi8sLyMvIWI7cy9eLyMgJi87cy9eIyAjLyMvJyAiJDEiIDs7CitjYXNlICIkMiwkMyIgaW4KKyAgbWVyZ2UsKQorICAgIHBlcmwgLWkgLW5lICdzL14vIyAvLCBzL14jICMvIy8gaWYgL15Db25mbGljdHMvIC4uIC8jLzsgcHJpbnQnICIkMSIgOzsKIAotIyAiInx0ZW1wbGF0ZSkKKyMgLHx0ZW1wbGF0ZSwpCiAjICAgcGVybCAtaSAtcGUgJwogIyAgICAgIHByaW50ICJcbiIgLiBgZ2l0IGRpZmYgLS1jYWNoZWQgLS1uYW1lLXN0YXR1cyAtcmAKICMJIGlmIC9eIy8gJiYgJGZpcnN0KysgPT0gMCcgIiQxIiA7OwpkaWZmIC0tZ2l0IGEvdGVzdC1wYXJzZS1vcHRpb25zLmMgYi90ZXN0LXBhcnNlLW9wdGlvbnMuYwppbmRleCA3MzM2MGQ3Li4yYTc5ZTcyIDEwMDY0NAotLS0gYS90ZXN0LXBhcnNlLW9wdGlvbnMuYworKysgYi90ZXN0LXBhcnNlLW9wdGlvbnMuYwpAQCAtMiw5ICsyLDIyIEBACiAjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgogCiBzdGF0aWMgaW50IGJvb2xlYW4gPSAwOwotc3RhdGljIGludCBpbnRlZ2VyID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGludGVnZXIgPSAwOworc3RhdGljIGludCBhYmJyZXYgPSA3Oworc3RhdGljIGludCB2ZXJib3NlID0gMCwgZHJ5X3J1biA9IDAsIHF1aWV0ID0gMDsKIHN0YXRpYyBjaGFyICpzdHJpbmcgPSBOVUxMOwogCitpbnQgbGVuZ3RoX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJcHJpbnRmKCJDYWxsYmFjazogXCIlc1wiLCAlZFxuIiwKKwkJKGFyZyA/IGFyZyA6ICJub3Qgc2V0IiksIHVuc2V0KTsKKwlpZiAodW5zZXQpCisJCXJldHVybiAxOyAvKiBkbyBub3Qgc3VwcG9ydCB1bnNldCAqLworCisJKih1bnNpZ25lZCBsb25nICopb3B0LT52YWx1ZSA9IHN0cmxlbihhcmcpOworCXJldHVybiAwOworfQorCiBpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiB7CiAJY29uc3QgY2hhciAqdXNhZ2VbXSA9IHsKQEAgLTEzLDE1ICsyNiwyOSBAQAogCX07CiAJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CiAJCU9QVF9CT09MRUFOKCdiJywgImJvb2xlYW4iLCAmYm9vbGVhbiwgImdldCBhIGJvb2xlYW4iKSwKKwkJT1BUX0JJVCgnNCcsICJvcjQiLCAmYm9vbGVhbiwKKwkJCSJiaXR3aXNlLW9yIGJvb2xlYW4gd2l0aCAuLi4wMTAwIiwgNCksCisJCU9QVF9HUk9VUCgiIiksCiAJCU9QVF9JTlRFR0VSKCdpJywgImludGVnZXIiLCAmaW50ZWdlciwgImdldCBhIGludGVnZXIiKSwKIAkJT1BUX0lOVEVHRVIoJ2onLCBOVUxMLCAmaW50ZWdlciwgImdldCBhIGludGVnZXIsIHRvbyIpLAotCQlPUFRfR1JPVVAoInN0cmluZyBvcHRpb25zIiksCisJCU9QVF9TRVRfSU5UKDAsICJzZXQyMyIsICZpbnRlZ2VyLCAic2V0IGludGVnZXIgdG8gMjMiLCAyMyksCisJCU9QVF9EQVRFKCd0JywgTlVMTCwgJmludGVnZXIsICJnZXQgdGltZXN0YW1wIG9mIDx0aW1lPiIpLAorCQlPUFRfQ0FMTEJBQ0soJ0wnLCAibGVuZ3RoIiwgJmludGVnZXIsICJzdHIiLAorCQkJImdldCBsZW5ndGggb2YgPHN0cj4iLCBsZW5ndGhfY2FsbGJhY2spLAorCQlPUFRfR1JPVVAoIlN0cmluZyBvcHRpb25zIiksCiAJCU9QVF9TVFJJTkcoJ3MnLCAic3RyaW5nIiwgJnN0cmluZywgInN0cmluZyIsICJnZXQgYSBzdHJpbmciKSwKIAkJT1BUX1NUUklORygwLCAic3RyaW5nMiIsICZzdHJpbmcsICJzdHIiLCAiZ2V0IGFub3RoZXIgc3RyaW5nIiksCiAJCU9QVF9TVFJJTkcoMCwgInN0IiwgJnN0cmluZywgInN0IiwgImdldCBhbm90aGVyIHN0cmluZyAocGVydmVydCBvcmRlcmluZykiKSwKIAkJT1BUX1NUUklORygnbycsIE5VTEwsICZzdHJpbmcsICJzdHIiLCAiZ2V0IGFub3RoZXIgc3RyaW5nIiksCi0JCU9QVF9HUk9VUCgibWFnaWMgYXJndW1lbnRzIiksCisJCU9QVF9TRVRfUFRSKDAsICJkZWZhdWx0LXN0cmluZyIsICZzdHJpbmcsCisJCQkic2V0IHN0cmluZyB0byBkZWZhdWx0IiwgKHVuc2lnbmVkIGxvbmcpImRlZmF1bHQiKSwKKwkJT1BUX0dST1VQKCJNYWdpYyBhcmd1bWVudHMiKSwKIAkJT1BUX0FSR1VNRU5UKCJxdXV4IiwgIm1lYW5zIC0tcXV1eCIpLAorCQlPUFRfR1JPVVAoIlN0YW5kYXJkIG9wdGlvbnMiKSwKKwkJT1BUX19BQkJSRVYoJmFiYnJldiksCisJCU9QVF9fVkVSQk9TRSgmdmVyYm9zZSksCisJCU9QVF9fRFJZX1JVTigmZHJ5X3J1biksCisJCU9QVF9fUVVJRVQoJnF1aWV0KSwKIAkJT1BUX0VORCgpLAogCX07CiAJaW50IGk7CkBAIC0yOSw4ICs1NiwxMiBAQAogCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIHVzYWdlLCAwKTsKIAogCXByaW50ZigiYm9vbGVhbjogJWRcbiIsIGJvb2xlYW4pOwotCXByaW50ZigiaW50ZWdlcjogJWRcbiIsIGludGVnZXIpOworCXByaW50ZigiaW50ZWdlcjogJWx1XG4iLCBpbnRlZ2VyKTsKIAlwcmludGYoInN0cmluZzogJXNcbiIsIHN0cmluZyA/IHN0cmluZyA6ICIobm90IHNldCkiKTsKKwlwcmludGYoImFiYnJldjogJWRcbiIsIGFiYnJldik7CisJcHJpbnRmKCJ2ZXJib3NlOiAlZFxuIiwgdmVyYm9zZSk7CisJcHJpbnRmKCJxdWlldDogJXNcbiIsIHF1aWV0ID8gInllcyIgOiAibm8iKTsKKwlwcmludGYoImRyeSBydW46ICVzXG4iLCBkcnlfcnVuID8gInllcyIgOiAibm8iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspCiAJCXByaW50ZigiYXJnICUwMmQ6ICVzXG4iLCBpLCBhcmd2W2ldKTsKZGlmZiAtLWdpdCBhL3RyYW5zcG9ydC5jIGIvdHJhbnNwb3J0LmMKaW5kZXggMzkzZTBlOC4uYjNlM2U2MSAxMDA2NDQKLS0tIGEvdHJhbnNwb3J0LmMKKysrIGIvdHJhbnNwb3J0LmMKQEAgLTIwMyw3ICsyMDMsNyBAQAogfQogCiBzdGF0aWMgaW50IGZldGNoX29ianNfdmlhX3JzeW5jKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKLQkJCQkgaW50IG5yX29ianMsIHN0cnVjdCByZWYgKip0b19mZXRjaCkKKwkJCQlpbnQgbnJfb2JqcywgY29uc3Qgc3RydWN0IHJlZiAqKnRvX2ZldGNoKQogewogCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CiAJc3RydWN0IGNoaWxkX3Byb2Nlc3MgcnN5bmM7CkBAIC0zNTAsNyArMzUwLDcgQEAKIAogI2lmbmRlZiBOT19DVVJMIC8qIGh0dHAgZmV0Y2ggaXMgdGhlIG9ubHkgdXNlciAqLwogc3RhdGljIGludCBmZXRjaF9vYmpzX3ZpYV93YWxrZXIoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAotCQkJCSBpbnQgbnJfb2Jqcywgc3RydWN0IHJlZiAqKnRvX2ZldGNoKQorCQkJCSBpbnQgbnJfb2JqcywgY29uc3Qgc3RydWN0IHJlZiAqKnRvX2ZldGNoKQogewogCWNoYXIgKmRlc3QgPSB4c3RyZHVwKHRyYW5zcG9ydC0+dXJsKTsKIAlzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIgPSB0cmFuc3BvcnQtPmRhdGE7CkBAIC00NDEsMTAgKzQ0MSwxNCBAQAogCXN0cnVjdCByZWYgKnJlZiA9IE5VTEw7CiAJc3RydWN0IHJlZiAqbGFzdF9yZWYgPSBOVUxMOwogCisJc3RydWN0IHdhbGtlciAqd2Fsa2VyOworCiAJaWYgKCF0cmFuc3BvcnQtPmRhdGEpCiAJCXRyYW5zcG9ydC0+ZGF0YSA9IGdldF9odHRwX3dhbGtlcih0cmFuc3BvcnQtPnVybCwKIAkJCQkJCXRyYW5zcG9ydC0+cmVtb3RlKTsKIAorCXdhbGtlciA9IHRyYW5zcG9ydC0+ZGF0YTsKKwogCXJlZnNfdXJsID0geG1hbGxvYyhzdHJsZW4odHJhbnNwb3J0LT51cmwpICsgMTEpOwogCXNwcmludGYocmVmc191cmwsICIlcy9pbmZvL3JlZnMiLCB0cmFuc3BvcnQtPnVybCk7CiAKQEAgLTQ1OSwxNyArNDYzLDE0IEBACiAJCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKIAkJaWYgKHJlc3VsdHMuY3VybF9yZXN1bHQgIT0gQ1VSTEVfT0spIHsKIAkJCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIpOwotCQkJaWYgKG1pc3NpbmdfdGFyZ2V0KCZyZXN1bHRzKSkgewotCQkJCXJldHVybiBOVUxMOwotCQkJfSBlbHNlIHsKLQkJCQllcnJvcigiJXMiLCBjdXJsX2Vycm9yc3RyKTsKLQkJCQlyZXR1cm4gTlVMTDsKLQkJCX0KKwkJCWlmIChtaXNzaW5nX3RhcmdldCgmcmVzdWx0cykpCisJCQkJZGllKCIlcyBub3QgZm91bmQ6IGRpZCB5b3UgcnVuIGdpdCB1cGRhdGUtc2VydmVyLWluZm8gb24gdGhlIHNlcnZlcj8iLCByZWZzX3VybCk7CisJCQllbHNlCisJCQkJZGllKCIlcyBkb3dubG9hZCBlcnJvciAtICVzIiwgcmVmc191cmwsIGN1cmxfZXJyb3JzdHIpOwogCQl9CiAJfSBlbHNlIHsKIAkJc3RyYnVmX3JlbGVhc2UoJmJ1ZmZlcik7Ci0JCWVycm9yKCJVbmFibGUgdG8gc3RhcnQgcmVxdWVzdCIpOwotCQlyZXR1cm4gTlVMTDsKKwkJZGllKCJVbmFibGUgdG8gc3RhcnQgSFRUUCByZXF1ZXN0Iik7CiAJfQogCiAJZGF0YSA9IGJ1ZmZlci5idWY7CkBAIC01MDAsMTEgKzUwMSwyMCBAQAogCiAJc3RyYnVmX3JlbGVhc2UoJmJ1ZmZlcik7CiAKKwlyZWYgPSBhbGxvY19yZWZfZnJvbV9zdHIoIkhFQUQiKTsKKwlpZiAoIXdhbGtlci0+ZmV0Y2hfcmVmKHdhbGtlciwgcmVmKSAmJgorCSAgICAhcmVzb2x2ZV9yZW1vdGVfc3ltcmVmKHJlZiwgcmVmcykpIHsKKwkJcmVmLT5uZXh0ID0gcmVmczsKKwkJcmVmcyA9IHJlZjsKKwl9IGVsc2UgeworCQlmcmVlKHJlZik7CisJfQorCiAJcmV0dXJuIHJlZnM7CiB9CiAKIHN0YXRpYyBpbnQgZmV0Y2hfb2Jqc192aWFfY3VybChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCi0JCQkJIGludCBucl9vYmpzLCBzdHJ1Y3QgcmVmICoqdG9fZmV0Y2gpCisJCQkJIGludCBucl9vYmpzLCBjb25zdCBzdHJ1Y3QgcmVmICoqdG9fZmV0Y2gpCiB7CiAJaWYgKCF0cmFuc3BvcnQtPmRhdGEpCiAJCXRyYW5zcG9ydC0+ZGF0YSA9IGdldF9odHRwX3dhbGtlcih0cmFuc3BvcnQtPnVybCwKQEAgLTUzMiw5ICs1NDIsOCBAQAogCQlkaWUgKCJDb3VsZCBub3QgcmVhZCBidW5kbGUgJyVzJy4iLCB0cmFuc3BvcnQtPnVybCk7CiAJZm9yIChpID0gMDsgaSA8IGRhdGEtPmhlYWRlci5yZWZlcmVuY2VzLm5yOyBpKyspIHsKIAkJc3RydWN0IHJlZl9saXN0X2VudHJ5ICplID0gZGF0YS0+aGVhZGVyLnJlZmVyZW5jZXMubGlzdCArIGk7Ci0JCXN0cnVjdCByZWYgKnJlZiA9IGFsbG9jX3JlZihzdHJsZW4oZS0+bmFtZSkgKyAxKTsKKwkJc3RydWN0IHJlZiAqcmVmID0gYWxsb2NfcmVmX2Zyb21fc3RyKGUtPm5hbWUpOwogCQloYXNoY3B5KHJlZi0+b2xkX3NoYTEsIGUtPnNoYTEpOwotCQlzdHJjcHkocmVmLT5uYW1lLCBlLT5uYW1lKTsKIAkJcmVmLT5uZXh0ID0gcmVzdWx0OwogCQlyZXN1bHQgPSByZWY7CiAJfQpAQCAtNTQyLDcgKzU1MSw3IEBACiB9CiAKIHN0YXRpYyBpbnQgZmV0Y2hfcmVmc19mcm9tX2J1bmRsZShzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCi0JCQkgICAgICAgaW50IG5yX2hlYWRzLCBzdHJ1Y3QgcmVmICoqdG9fZmV0Y2gpCisJCQkgICAgICAgaW50IG5yX2hlYWRzLCBjb25zdCBzdHJ1Y3QgcmVmICoqdG9fZmV0Y2gpCiB7CiAJc3RydWN0IGJ1bmRsZV90cmFuc3BvcnRfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKIAlyZXR1cm4gdW5idW5kbGUoJmRhdGEtPmhlYWRlciwgZGF0YS0+ZmQpOwpAQCAtNjE2LDcgKzYyNSw3IEBACiB9CiAKIHN0YXRpYyBpbnQgZmV0Y2hfcmVmc192aWFfcGFjayhzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCi0JCQkgICAgICAgaW50IG5yX2hlYWRzLCBzdHJ1Y3QgcmVmICoqdG9fZmV0Y2gpCisJCQkgICAgICAgaW50IG5yX2hlYWRzLCBjb25zdCBzdHJ1Y3QgcmVmICoqdG9fZmV0Y2gpCiB7CiAJc3RydWN0IGdpdF90cmFuc3BvcnRfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKIAljaGFyICoqaGVhZHMgPSB4bWFsbG9jKG5yX2hlYWRzICogc2l6ZW9mKCpoZWFkcykpOwpAQCAtNjMzLDcgKzY0Miw5IEBACiAJYXJncy5sb2NrX3BhY2sgPSAxOwogCWFyZ3MudXNlX3RoaW5fcGFjayA9IGRhdGEtPnRoaW47CiAJYXJncy5pbmNsdWRlX3RhZyA9IGRhdGEtPmZvbGxvd3RhZ3M7Ci0JYXJncy52ZXJib3NlID0gdHJhbnNwb3J0LT52ZXJib3NlID4gMDsKKwlhcmdzLnZlcmJvc2UgPSAodHJhbnNwb3J0LT52ZXJib3NlID4gMCk7CisJYXJncy5xdWlldCA9IGFyZ3Mubm9fcHJvZ3Jlc3MgPSAodHJhbnNwb3J0LT52ZXJib3NlIDwgMCk7CisJYXJncy5ub19wcm9ncmVzcyA9ICFpc2F0dHkoMSk7CiAJYXJncy5kZXB0aCA9IGRhdGEtPmRlcHRoOwogCiAJZm9yIChpID0gMDsgaSA8IG5yX2hlYWRzOyBpKyspCkBAIC03ODQsMTIgKzc5NSwxMiBAQAogCXJldHVybiB0cmFuc3BvcnQtPnJlbW90ZV9yZWZzOwogfQogCi1pbnQgdHJhbnNwb3J0X2ZldGNoX3JlZnMoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBzdHJ1Y3QgcmVmICpyZWZzKQoraW50IHRyYW5zcG9ydF9mZXRjaF9yZWZzKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgY29uc3Qgc3RydWN0IHJlZiAqcmVmcykKIHsKIAlpbnQgcmM7CiAJaW50IG5yX2hlYWRzID0gMCwgbnJfYWxsb2MgPSAwOwotCXN0cnVjdCByZWYgKipoZWFkcyA9IE5VTEw7Ci0Jc3RydWN0IHJlZiAqcm07CisJY29uc3Qgc3RydWN0IHJlZiAqKmhlYWRzID0gTlVMTDsKKwljb25zdCBzdHJ1Y3QgcmVmICpybTsKIAogCWZvciAocm0gPSByZWZzOyBybTsgcm0gPSBybS0+bmV4dCkgewogCQlpZiAocm0tPnBlZXJfcmVmICYmCmRpZmYgLS1naXQgYS90cmFuc3BvcnQuaCBiL3RyYW5zcG9ydC5oCmluZGV4IDhhYmZjMGEuLmQwYjUyMDUgMTAwNjQ0Ci0tLSBhL3RyYW5zcG9ydC5oCisrKyBiL3RyYW5zcG9ydC5oCkBAIC0xOSw3ICsxOSw3IEBACiAJCQkgIGNvbnN0IGNoYXIgKnZhbHVlKTsKIAogCXN0cnVjdCByZWYgKigqZ2V0X3JlZnNfbGlzdCkoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0KTsKLQlpbnQgKCpmZXRjaCkoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBpbnQgcmVmc19uciwgc3RydWN0IHJlZiAqKnJlZnMpOworCWludCAoKmZldGNoKShzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIGludCByZWZzX25yLCBjb25zdCBzdHJ1Y3QgcmVmICoqcmVmcyk7CiAJaW50ICgqcHVzaCkoc3RydWN0IHRyYW5zcG9ydCAqY29ubmVjdGlvbiwgaW50IHJlZnNwZWNfbnIsIGNvbnN0IGNoYXIgKipyZWZzcGVjLCBpbnQgZmxhZ3MpOwogCiAJaW50ICgqZGlzY29ubmVjdCkoc3RydWN0IHRyYW5zcG9ydCAqY29ubmVjdGlvbik7CkBAIC02OCw3ICs2OCw3IEBACiAKIGNvbnN0IHN0cnVjdCByZWYgKnRyYW5zcG9ydF9nZXRfcmVtb3RlX3JlZnMoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0KTsKIAotaW50IHRyYW5zcG9ydF9mZXRjaF9yZWZzKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgc3RydWN0IHJlZiAqcmVmcyk7CitpbnQgdHJhbnNwb3J0X2ZldGNoX3JlZnMoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBjb25zdCBzdHJ1Y3QgcmVmICpyZWZzKTsKIHZvaWQgdHJhbnNwb3J0X3VubG9ja19wYWNrKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCk7CiBpbnQgdHJhbnNwb3J0X2Rpc2Nvbm5lY3Qoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0KTsKIApkaWZmIC0tZ2l0IGEvdHJlZS1kaWZmLmMgYi90cmVlLWRpZmYuYwppbmRleCBlMWUyZTZjLi5iYmIxMjZmIDEwMDY0NAotLS0gYS90cmVlLWRpZmYuYworKysgYi90cmVlLWRpZmYuYwpAQCAtMTUsNiArMTUsMTUgQEAKIAlyZXR1cm4gbmV3YmFzZTsKIH0KIAorc3RhdGljIGNoYXIgKm1hbGxvY19mdWxsbmFtZShjb25zdCBjaGFyICpiYXNlLCBpbnQgYmFzZWxlbiwgY29uc3QgY2hhciAqcGF0aCwgaW50IHBhdGhsZW4pCit7CisJY2hhciAqZnVsbG5hbWUgPSB4bWFsbG9jKGJhc2VsZW4gKyBwYXRobGVuICsgMSk7CisJbWVtY3B5KGZ1bGxuYW1lLCBiYXNlLCBiYXNlbGVuKTsKKwltZW1jcHkoZnVsbG5hbWUgKyBiYXNlbGVuLCBwYXRoLCBwYXRobGVuKTsKKwlmdWxsbmFtZVtiYXNlbGVuICsgcGF0aGxlbl0gPSAwOworCXJldHVybiBmdWxsbmFtZTsKK30KKwogc3RhdGljIHZvaWQgc2hvd19lbnRyeShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQsIGNvbnN0IGNoYXIgKnByZWZpeCwgc3RydWN0IHRyZWVfZGVzYyAqZGVzYywKIAkJICAgICAgIGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuKTsKIApAQCAtMjQsNiArMzMsNyBAQAogCWNvbnN0IGNoYXIgKnBhdGgxLCAqcGF0aDI7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgKnNoYTI7CiAJaW50IGNtcCwgcGF0aGxlbjEsIHBhdGhsZW4yOworCWNoYXIgKmZ1bGxuYW1lOwogCiAJc2hhMSA9IHRyZWVfZW50cnlfZXh0cmFjdCh0MSwgJnBhdGgxLCAmbW9kZTEpOwogCXNoYTIgPSB0cmVlX2VudHJ5X2V4dHJhY3QodDIsICZwYXRoMiwgJm1vZGUyKTsKQEAgLTU1LDE1ICs2NSwyMCBAQAogCWlmIChESUZGX09QVF9UU1Qob3B0LCBSRUNVUlNJVkUpICYmIFNfSVNESVIobW9kZTEpKSB7CiAJCWludCByZXR2YWw7CiAJCWNoYXIgKm5ld2Jhc2UgPSBtYWxsb2NfYmFzZShiYXNlLCBiYXNlbGVuLCBwYXRoMSwgcGF0aGxlbjEpOwotCQlpZiAoRElGRl9PUFRfVFNUKG9wdCwgVFJFRV9JTl9SRUNVUlNJVkUpKQorCQlpZiAoRElGRl9PUFRfVFNUKG9wdCwgVFJFRV9JTl9SRUNVUlNJVkUpKSB7CisJCQluZXdiYXNlW2Jhc2VsZW4gKyBwYXRobGVuMV0gPSAwOwogCQkJb3B0LT5jaGFuZ2Uob3B0LCBtb2RlMSwgbW9kZTIsCi0JCQkJICAgIHNoYTEsIHNoYTIsIGJhc2UsIHBhdGgxKTsKKwkJCQkgICAgc2hhMSwgc2hhMiwgbmV3YmFzZSk7CisJCQluZXdiYXNlW2Jhc2VsZW4gKyBwYXRobGVuMV0gPSAnLyc7CisJCX0KIAkJcmV0dmFsID0gZGlmZl90cmVlX3NoYTEoc2hhMSwgc2hhMiwgbmV3YmFzZSwgb3B0KTsKIAkJZnJlZShuZXdiYXNlKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKLQlvcHQtPmNoYW5nZShvcHQsIG1vZGUxLCBtb2RlMiwgc2hhMSwgc2hhMiwgYmFzZSwgcGF0aDEpOworCWZ1bGxuYW1lID0gbWFsbG9jX2Z1bGxuYW1lKGJhc2UsIGJhc2VsZW4sIHBhdGgxLCBwYXRobGVuMSk7CisJb3B0LT5jaGFuZ2Uob3B0LCBtb2RlMSwgbW9kZTIsIHNoYTEsIHNoYTIsIGZ1bGxuYW1lKTsKKwlmcmVlKGZ1bGxuYW1lKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjA1LDEwICsyMjAsMTAgQEAKIAl1bnNpZ25lZCBtb2RlOwogCWNvbnN0IGNoYXIgKnBhdGg7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSA9IHRyZWVfZW50cnlfZXh0cmFjdChkZXNjLCAmcGF0aCwgJm1vZGUpOworCWludCBwYXRobGVuID0gdHJlZV9lbnRyeV9sZW4ocGF0aCwgc2hhMSk7CiAKIAlpZiAoRElGRl9PUFRfVFNUKG9wdCwgUkVDVVJTSVZFKSAmJiBTX0lTRElSKG1vZGUpKSB7CiAJCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKLQkJaW50IHBhdGhsZW4gPSB0cmVlX2VudHJ5X2xlbihwYXRoLCBzaGExKTsKIAkJY2hhciAqbmV3YmFzZSA9IG1hbGxvY19iYXNlKGJhc2UsIGJhc2VsZW4sIHBhdGgsIHBhdGhsZW4pOwogCQlzdHJ1Y3QgdHJlZV9kZXNjIGlubmVyOwogCQl2b2lkICp0cmVlOwpAQCAtMjI0LDcgKzIzOSw5IEBACiAJCWZyZWUodHJlZSk7CiAJCWZyZWUobmV3YmFzZSk7CiAJfSBlbHNlIHsKLQkJb3B0LT5hZGRfcmVtb3ZlKG9wdCwgcHJlZml4WzBdLCBtb2RlLCBzaGExLCBiYXNlLCBwYXRoKTsKKwkJY2hhciAqZnVsbG5hbWUgPSBtYWxsb2NfZnVsbG5hbWUoYmFzZSwgYmFzZWxlbiwgcGF0aCwgcGF0aGxlbik7CisJCW9wdC0+YWRkX3JlbW92ZShvcHQsIHByZWZpeFswXSwgbW9kZSwgc2hhMSwgZnVsbG5hbWUpOworCQlmcmVlKGZ1bGxuYW1lKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL3VucGFjay1maWxlLmMgYi91bnBhY2stZmlsZS5jCmluZGV4IDY1YzY2ZWIuLmJjZGM4YmIgMTAwNjQ0Ci0tLSBhL3VucGFjay1maWxlLmMKKysrIGIvdW5wYWNrLWZpbGUuYwpAQCAtMzEsNyArMzEsNyBAQAogCQlkaWUoIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIiwgYXJndlsxXSk7CiAKIAlzZXR1cF9naXRfZGlyZWN0b3J5KCk7Ci0JZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcpOworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKIAogCXB1dHMoY3JlYXRlX3RlbXBfZmlsZShzaGExKSk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS91bnBhY2stdHJlZXMuYyBiL3VucGFjay10cmVlcy5jCmluZGV4IGE1OWY0NzUuLmNiYTBhY2EgMTAwNjQ0Ci0tLSBhL3VucGFjay10cmVlcy5jCisrKyBiL3VucGFjay10cmVlcy5jCkBAIC04LDYgKzgsMzYgQEAKICNpbmNsdWRlICJwcm9ncmVzcy5oIgogI2luY2x1ZGUgInJlZnMuaCIKIAorLyoKKyAqIEVycm9yIG1lc3NhZ2VzIGV4cGVjdGVkIGJ5IHNjcmlwdHMgb3V0IG9mIHBsdW1iaW5nIGNvbW1hbmRzIHN1Y2ggYXMKKyAqIHJlYWQtdHJlZS4gIE5vbi1zY3JpcHRlZCBQb3JjZWxhaW4gaXMgbm90IHJlcXVpcmVkIHRvIHVzZSB0aGVzZSBtZXNzYWdlcworICogYW5kIGluIGZhY3QgYXJlIGVuY291cmFnZWQgdG8gcmV3b3JkIHRoZW0gdG8gYmV0dGVyIHN1aXQgdGhlaXIgcGFydGljdWxhcgorICogc2l0dWF0aW9uIGJldHRlci4gIFNlZSBob3cgImdpdCBjaGVja291dCIgcmVwbGFjZXMgbm90X3VwdG9kYXRlX2ZpbGUgdG8KKyAqIGV4cGxhaW4gd2h5IGl0IGRvZXMgbm90IGFsbG93IHN3aXRjaGluZyBiZXR3ZWVuIGJyYW5jaGVzIHdoZW4geW91IGhhdmUKKyAqIGxvY2FsIGNoYW5nZXMsIGZvciBleGFtcGxlLgorICovCitzdGF0aWMgc3RydWN0IHVucGFja190cmVlc19lcnJvcl9tc2dzIHVucGFja19wbHVtYmluZ19lcnJvcnMgPSB7CisJLyogd291bGRfb3ZlcndyaXRlICovCisJIkVudHJ5ICclcycgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2UuIENhbm5vdCBtZXJnZS4iLAorCisJLyogbm90X3VwdG9kYXRlX2ZpbGUgKi8KKwkiRW50cnkgJyVzJyBub3QgdXB0b2RhdGUuIENhbm5vdCBtZXJnZS4iLAorCisJLyogbm90X3VwdG9kYXRlX2RpciAqLworCSJVcGRhdGluZyAnJXMnIHdvdWxkIGxvc2UgdW50cmFja2VkIGZpbGVzIGluIGl0IiwKKworCS8qIHdvdWxkX2xvc2VfdW50cmFja2VkICovCisJIlVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZSAnJXMnIHdvdWxkIGJlICVzIGJ5IG1lcmdlLiIsCisKKwkvKiBiaW5kX292ZXJsYXAgKi8KKwkiRW50cnkgJyVzJyBvdmVybGFwcyB3aXRoICclcycuICBDYW5ub3QgYmluZC4iLAorfTsKKworI2RlZmluZSBFUlJPUk1TRyhvLGZsZCkgXAorCSggKChvKSAmJiAobyktPm1zZ3MuZmxkKSBcCisJPyAoKG8pLT5tc2dzLmZsZCkgXAorCTogKHVucGFja19wbHVtYmluZ19lcnJvcnMuZmxkKSApCisKIHN0YXRpYyB2b2lkIGFkZF9lbnRyeShzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8sIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCiAJdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQogewpAQCAtMjYsMTEgKzU2LDEyIEBACiAgKiBkaXJlY3RvcmllcywgaW4gY2FzZSB0aGlzIHVubGluayBpcyB0aGUgcmVtb3ZhbCBvZiB0aGUKICAqIGxhc3QgZW50cnkgaW4gdGhlIGRpcmVjdG9yeSAtLSBlbXB0eSBkaXJlY3RvcmllcyBhcmUgcmVtb3ZlZC4KICAqLwotc3RhdGljIHZvaWQgdW5saW5rX2VudHJ5KGNoYXIgKm5hbWUsIGNoYXIgKmxhc3Rfc3ltbGluaykKK3N0YXRpYyB2b2lkIHVubGlua19lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQogewogCWNoYXIgKmNwLCAqcHJldjsKKwljaGFyICpuYW1lID0gY2UtPm5hbWU7CiAKLQlpZiAoaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKG5hbWUsIGxhc3Rfc3ltbGluaykpCisJaWYgKGhhc19zeW1saW5rX2xlYWRpbmdfcGF0aChjZV9uYW1lbGVuKGNlKSwgY2UtPm5hbWUpKQogCQlyZXR1cm47CiAJaWYgKHVubGluayhuYW1lKSkKIAkJcmV0dXJuOwpAQCAtNTgsNyArODksNiBAQAogewogCXVuc2lnbmVkIGNudCA9IDAsIHRvdGFsID0gMDsKIAlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzID0gTlVMTDsKLQljaGFyIGxhc3Rfc3ltbGlua1tQQVRIX01BWF07CiAJc3RydWN0IGluZGV4X3N0YXRlICppbmRleCA9ICZvLT5yZXN1bHQ7CiAJaW50IGk7CiAJaW50IGVycnMgPSAwOwpAQCAtNzUsMjQgKzEwNSwyNyBAQAogCQljbnQgPSAwOwogCX0KIAotCSpsYXN0X3N5bWxpbmsgPSAnXDAnOwogCWZvciAoaSA9IDA7IGkgPCBpbmRleC0+Y2FjaGVfbnI7IGkrKykgewogCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaW5kZXgtPmNhY2hlW2ldOwogCi0JCWlmIChjZS0+Y2VfZmxhZ3MgJiAoQ0VfVVBEQVRFIHwgQ0VfUkVNT1ZFKSkKLQkJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsICsrY250KTsKIAkJaWYgKGNlLT5jZV9mbGFncyAmIENFX1JFTU9WRSkgeworCQkJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgKytjbnQpOwogCQkJaWYgKG8tPnVwZGF0ZSkKLQkJCQl1bmxpbmtfZW50cnkoY2UtPm5hbWUsIGxhc3Rfc3ltbGluayk7CisJCQkJdW5saW5rX2VudHJ5KGNlKTsKIAkJCXJlbW92ZV9pbmRleF9lbnRyeV9hdCgmby0+cmVzdWx0LCBpKTsKIAkJCWktLTsKIAkJCWNvbnRpbnVlOwogCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IGluZGV4LT5jYWNoZV9ucjsgaSsrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpbmRleC0+Y2FjaGVbaV07CisKIAkJaWYgKGNlLT5jZV9mbGFncyAmIENFX1VQREFURSkgeworCQkJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgKytjbnQpOwogCQkJY2UtPmNlX2ZsYWdzICY9IH5DRV9VUERBVEU7CiAJCQlpZiAoby0+dXBkYXRlKSB7CiAJCQkJZXJycyB8PSBjaGVja291dF9lbnRyeShjZSwgJnN0YXRlLCBOVUxMKTsKLQkJCQkqbGFzdF9zeW1saW5rID0gJ1wwJzsKIAkJCX0KIAkJfQogCX0KQEAgLTMyNSw4ICszNTgsMTMgQEAKIAlyZXR1cm4gLTE7CiB9CiAKKy8qCisgKiBOLXdheSBtZXJnZSAibGVuIiB0cmVlcy4gIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlIHRvIG1hbmlwdWxhdGUgdGhlCisgKiByZXN1bHRpbmcgaW5kZXgsIC0yIG9uIGZhaWx1cmUgdG8gcmVmbGVjdCB0aGUgY2hhbmdlcyB0byB0aGUgd29yayB0cmVlLgorICovCiBpbnQgdW5wYWNrX3RyZWVzKHVuc2lnbmVkIGxlbiwgc3RydWN0IHRyZWVfZGVzYyAqdCwgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQogeworCWludCByZXQ7CiAJc3RhdGljIHN0cnVjdCBjYWNoZV9lbnRyeSAqZGZjOwogCiAJaWYgKGxlbiA+IE1BWF9VTlBBQ0tfVFJFRVMpCkBAIC0zNzEsMTkgKzQwOSwxNyBAQAogCQlyZXR1cm4gdW5wYWNrX2ZhaWxlZChvLCAiTWVyZ2UgcmVxdWlyZXMgZmlsZS1sZXZlbCBtZXJnaW5nIik7CiAKIAlvLT5zcmNfaW5kZXggPSBOVUxMOwotCWlmIChjaGVja191cGRhdGVzKG8pKQotCQlyZXR1cm4gLTE7CisJcmV0ID0gY2hlY2tfdXBkYXRlcyhvKSA/ICgtMikgOiAwOwogCWlmIChvLT5kc3RfaW5kZXgpCiAJCSpvLT5kc3RfaW5kZXggPSBvLT5yZXN1bHQ7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogLyogSGVyZSBjb21lIHRoZSBtZXJnZSBmdW5jdGlvbnMgKi8KIAotc3RhdGljIGludCByZWplY3RfbWVyZ2Uoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3N0YXRpYyBpbnQgcmVqZWN0X21lcmdlKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKIHsKLQlyZXR1cm4gZXJyb3IoIkVudHJ5ICclcycgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2UuIENhbm5vdCBtZXJnZS4iLAotCQkgICAgIGNlLT5uYW1lKTsKKwlyZXR1cm4gZXJyb3IoRVJST1JNU0cobywgd291bGRfb3ZlcndyaXRlKSwgY2UtPm5hbWUpOwogfQogCiBzdGF0aWMgaW50IHNhbWUoc3RydWN0IGNhY2hlX2VudHJ5ICphLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmIpCkBAIC00MjcsNyArNDYzLDcgQEAKIAlpZiAoZXJybm8gPT0gRU5PRU5UKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gby0+Z2VudGx5ID8gLTEgOgotCQllcnJvcigiRW50cnkgJyVzJyBub3QgdXB0b2RhdGUuIENhbm5vdCBtZXJnZS4iLCBjZS0+bmFtZSk7CisJCWVycm9yKEVSUk9STVNHKG8sIG5vdF91cHRvZGF0ZV9maWxlKSwgY2UtPm5hbWUpOwogfQogCiBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX2NlX3BhdGgoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQpAQCAtNTE0LDEzICs1NTAsMjggQEAKIAlpID0gcmVhZF9kaXJlY3RvcnkoJmQsIGNlLT5uYW1lLCBwYXRoYnVmLCBuYW1lbGVuKzEsIE5VTEwpOwogCWlmIChpKQogCQlyZXR1cm4gby0+Z2VudGx5ID8gLTEgOgotCQkJZXJyb3IoIlVwZGF0aW5nICclcycgd291bGQgbG9zZSB1bnRyYWNrZWQgZmlsZXMgaW4gaXQiLAotCQkJICAgICAgY2UtPm5hbWUpOworCQkJZXJyb3IoRVJST1JNU0cobywgbm90X3VwdG9kYXRlX2RpciksIGNlLT5uYW1lKTsKIAlmcmVlKHBhdGhidWYpOwogCXJldHVybiBjbnQ7CiB9CiAKIC8qCisgKiBUaGlzIGdldHMgY2FsbGVkIHdoZW4gdGhlcmUgd2FzIG5vIGluZGV4IGVudHJ5IGZvciB0aGUgdHJlZSBlbnRyeSAnZHN0JywKKyAqIGJ1dCB3ZSBmb3VuZCBhIGZpbGUgaW4gdGhlIHdvcmtpbmcgdHJlZSB0aGF0ICdsc3RhdCgpJyBzYWlkIHdhcyBmaW5lLAorICogYW5kIHdlJ3JlIG9uIGEgY2FzZS1pbnNlbnNpdGl2ZSBmaWxlc3lzdGVtLgorICoKKyAqIFNlZSBpZiB3ZSBjYW4gZmluZCBhIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggaW4gdGhlIGluZGV4IHRoYXQgYWxzbworICogbWF0Y2hlcyB0aGUgc3RhdCBpbmZvcm1hdGlvbiwgYW5kIGFzc3VtZSBpdCdzIHRoYXQgb3RoZXIgZmlsZSEKKyAqLworc3RhdGljIGludCBpY2FzZV9leGlzdHMoc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmRzdCwgc3RydWN0IHN0YXQgKnN0KQoreworCXN0cnVjdCBjYWNoZV9lbnRyeSAqc3JjOworCisJc3JjID0gaW5kZXhfbmFtZV9leGlzdHMoby0+c3JjX2luZGV4LCBkc3QtPm5hbWUsIGNlX25hbWVsZW4oZHN0KSwgMSk7CisJcmV0dXJuIHNyYyAmJiAhaWVfbWF0Y2hfc3RhdChvLT5zcmNfaW5kZXgsIHNyYywgc3QsIENFX01BVENIX0lHTk9SRV9WQUxJRCk7Cit9CisKKy8qCiAgKiBXZSBkbyBub3Qgd2FudCB0byByZW1vdmUgb3Igb3ZlcndyaXRlIGEgd29ya2luZyB0cmVlIGZpbGUgdGhhdAogICogaXMgbm90IHRyYWNrZWQsIHVubGVzcyBpdCBpcyBpZ25vcmVkLgogICovCkBAIC01MzIsMTIgKzU4MywyMyBAQAogCWlmIChvLT5pbmRleF9vbmx5IHx8IG8tPnJlc2V0IHx8ICFvLT51cGRhdGUpCiAJCXJldHVybiAwOwogCi0JaWYgKGhhc19zeW1saW5rX2xlYWRpbmdfcGF0aChjZS0+bmFtZSwgTlVMTCkpCisJaWYgKGhhc19zeW1saW5rX2xlYWRpbmdfcGF0aChjZV9uYW1lbGVuKGNlKSwgY2UtPm5hbWUpKQogCQlyZXR1cm4gMDsKIAogCWlmICghbHN0YXQoY2UtPm5hbWUsICZzdCkpIHsKIAkJaW50IGNudDsKIAkJaW50IGR0eXBlID0gY2VfdG9fZHR5cGUoY2UpOworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKnJlc3VsdDsKKworCQkvKgorCQkgKiBJdCBtYXkgYmUgdGhhdCB0aGUgJ2xzdGF0KCknIHN1Y2NlZWRlZCBldmVuIHRob3VnaAorCQkgKiB0YXJnZXQgJ2NlJyB3YXMgYWJzZW50LCBiZWNhdXNlIHRoZXJlIGlzIGFuIG9sZAorCQkgKiBlbnRyeSB0aGF0IGlzIGRpZmZlcmVudCBvbmx5IGluIGNhc2UuLgorCQkgKgorCQkgKiBJZ25vcmUgdGhhdCBsc3RhdCgpIGlmIGl0IG1hdGNoZXMuCisJCSAqLworCQlpZiAoaWdub3JlX2Nhc2UgJiYgaWNhc2VfZXhpc3RzKG8sIGNlLCAmc3QpKQorCQkJcmV0dXJuIDA7CiAKIAkJaWYgKG8tPmRpciAmJiBleGNsdWRlZChvLT5kaXIsIGNlLT5uYW1lLCAmZHR5cGUpKQogCQkJLyoKQEAgLTU4MSwxNiArNjQzLDE0IEBACiAJCSAqIGRlbGV0ZSB0aGlzIHBhdGgsIHdoaWNoIGlzIGluIGEgc3ViZGlyZWN0b3J5IHRoYXQKIAkJICogaXMgYmVpbmcgcmVwbGFjZWQgd2l0aCBhIGJsb2IuCiAJCSAqLwotCQljbnQgPSBpbmRleF9uYW1lX3Bvcygmby0+cmVzdWx0LCBjZS0+bmFtZSwgc3RybGVuKGNlLT5uYW1lKSk7Ci0JCWlmICgwIDw9IGNudCkgewotCQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IG8tPnJlc3VsdC5jYWNoZVtjbnRdOwotCQkJaWYgKGNlLT5jZV9mbGFncyAmIENFX1JFTU9WRSkKKwkJcmVzdWx0ID0gaW5kZXhfbmFtZV9leGlzdHMoJm8tPnJlc3VsdCwgY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpLCAwKTsKKwkJaWYgKHJlc3VsdCkgeworCQkJaWYgKHJlc3VsdC0+Y2VfZmxhZ3MgJiBDRV9SRU1PVkUpCiAJCQkJcmV0dXJuIDA7CiAJCX0KIAogCQlyZXR1cm4gby0+Z2VudGx5ID8gLTEgOgotCQkJZXJyb3IoIlVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZSAnJXMnICIKLQkJCSAgICAgICJ3b3VsZCBiZSAlcyBieSBtZXJnZS4iLCBjZS0+bmFtZSwgYWN0aW9uKTsKKwkJCWVycm9yKEVSUk9STVNHKG8sIHdvdWxkX2xvc2VfdW50cmFja2VkKSwgY2UtPm5hbWUsIGFjdGlvbik7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNzIyLDcgKzc4Miw3IEBACiAJLyogIzE0LCAjMTRBTFQsICMyQUxUICovCiAJaWYgKHJlbW90ZSAmJiAhZGZfY29uZmxpY3RfaGVhZCAmJiBoZWFkX21hdGNoICYmICFyZW1vdGVfbWF0Y2gpIHsKIAkJaWYgKGluZGV4ICYmICFzYW1lKGluZGV4LCByZW1vdGUpICYmICFzYW1lKGluZGV4LCBoZWFkKSkKLQkJCXJldHVybiBvLT5nZW50bHkgPyAtMSA6IHJlamVjdF9tZXJnZShpbmRleCk7CisJCQlyZXR1cm4gby0+Z2VudGx5ID8gLTEgOiByZWplY3RfbWVyZ2UoaW5kZXgsIG8pOwogCQlyZXR1cm4gbWVyZ2VkX2VudHJ5KHJlbW90ZSwgaW5kZXgsIG8pOwogCX0KIAkvKgpAQCAtNzMwLDcgKzc5MCw3IEBACiAJICogbWFrZSBzdXJlIHRoYXQgaXQgbWF0Y2hlcyBoZWFkLgogCSAqLwogCWlmIChpbmRleCAmJiAhc2FtZShpbmRleCwgaGVhZCkpCi0JCXJldHVybiBvLT5nZW50bHkgPyAtMSA6IHJlamVjdF9tZXJnZShpbmRleCk7CisJCXJldHVybiBvLT5nZW50bHkgPyAtMSA6IHJlamVjdF9tZXJnZShpbmRleCwgbyk7CiAKIAlpZiAoaGVhZCkgewogCQkvKiAjNUFMVCwgIzE1ICovCkBAIC04NzIsMTEgKzkzMiwxMSBAQAogCQllbHNlIHsKIAkJCS8qIGFsbCBvdGhlciBmYWlsdXJlcyAqLwogCQkJaWYgKG9sZHRyZWUpCi0JCQkJcmV0dXJuIG8tPmdlbnRseSA/IC0xIDogcmVqZWN0X21lcmdlKG9sZHRyZWUpOworCQkJCXJldHVybiBvLT5nZW50bHkgPyAtMSA6IHJlamVjdF9tZXJnZShvbGR0cmVlLCBvKTsKIAkJCWlmIChjdXJyZW50KQotCQkJCXJldHVybiBvLT5nZW50bHkgPyAtMSA6IHJlamVjdF9tZXJnZShjdXJyZW50KTsKKwkJCQlyZXR1cm4gby0+Z2VudGx5ID8gLTEgOiByZWplY3RfbWVyZ2UoY3VycmVudCwgbyk7CiAJCQlpZiAobmV3dHJlZSkKLQkJCQlyZXR1cm4gby0+Z2VudGx5ID8gLTEgOiByZWplY3RfbWVyZ2UobmV3dHJlZSk7CisJCQkJcmV0dXJuIG8tPmdlbnRseSA/IC0xIDogcmVqZWN0X21lcmdlKG5ld3RyZWUsIG8pOwogCQkJcmV0dXJuIC0xOwogCQl9CiAJfQpAQCAtOTAyLDcgKzk2Miw3IEBACiAJCQkgICAgIG8tPm1lcmdlX3NpemUpOwogCWlmIChhICYmIG9sZCkKIAkJcmV0dXJuIG8tPmdlbnRseSA/IC0xIDoKLQkJCWVycm9yKCJFbnRyeSAnJXMnIG92ZXJsYXBzIHdpdGggJyVzJy4gIENhbm5vdCBiaW5kLiIsIGEtPm5hbWUsIG9sZC0+bmFtZSk7CisJCQllcnJvcihFUlJPUk1TRyhvLCBiaW5kX292ZXJsYXApLCBhLT5uYW1lLCBvbGQtPm5hbWUpOwogCWlmICghYSkKIAkJcmV0dXJuIGtlZXBfZW50cnkob2xkLCBvKTsKIAllbHNlCmRpZmYgLS1naXQgYS91bnBhY2stdHJlZXMuaCBiL3VucGFjay10cmVlcy5oCmluZGV4IDUwNDUzZWQuLjk0ZTU2NzIgMTAwNjQ0Ci0tLSBhL3VucGFjay10cmVlcy5oCisrKyBiL3VucGFjay10cmVlcy5oCkBAIC04LDIxICs4LDMwIEBACiB0eXBlZGVmIGludCAoKm1lcmdlX2ZuX3QpKHN0cnVjdCBjYWNoZV9lbnRyeSAqKnNyYywKIAkJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvcHRpb25zKTsKIAorc3RydWN0IHVucGFja190cmVlc19lcnJvcl9tc2dzIHsKKwljb25zdCBjaGFyICp3b3VsZF9vdmVyd3JpdGU7CisJY29uc3QgY2hhciAqbm90X3VwdG9kYXRlX2ZpbGU7CisJY29uc3QgY2hhciAqbm90X3VwdG9kYXRlX2RpcjsKKwljb25zdCBjaGFyICp3b3VsZF9sb3NlX3VudHJhY2tlZDsKKwljb25zdCBjaGFyICpiaW5kX292ZXJsYXA7Cit9OworCiBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgewotCWludCByZXNldDsKLQlpbnQgbWVyZ2U7Ci0JaW50IHVwZGF0ZTsKLQlpbnQgaW5kZXhfb25seTsKLQlpbnQgbm9udHJpdmlhbF9tZXJnZTsKLQlpbnQgdHJpdmlhbF9tZXJnZXNfb25seTsKLQlpbnQgdmVyYm9zZV91cGRhdGU7Ci0JaW50IGFnZ3Jlc3NpdmU7Ci0JaW50IHNraXBfdW5tZXJnZWQ7Ci0JaW50IGdlbnRseTsKKwl1bnNpZ25lZCBpbnQgcmVzZXQ6MSwKKwkJICAgICBtZXJnZToxLAorCQkgICAgIHVwZGF0ZToxLAorCQkgICAgIGluZGV4X29ubHk6MSwKKwkJICAgICBub250cml2aWFsX21lcmdlOjEsCisJCSAgICAgdHJpdmlhbF9tZXJnZXNfb25seToxLAorCQkgICAgIHZlcmJvc2VfdXBkYXRlOjEsCisJCSAgICAgYWdncmVzc2l2ZToxLAorCQkgICAgIHNraXBfdW5tZXJnZWQ6MSwKKwkJICAgICBnZW50bHk6MTsKIAljb25zdCBjaGFyICpwcmVmaXg7CiAJaW50IHBvczsKIAlzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyOwogCW1lcmdlX2ZuX3QgZm47CisJc3RydWN0IHVucGFja190cmVlc19lcnJvcl9tc2dzIG1zZ3M7CiAKIAlpbnQgaGVhZF9pZHg7CiAJaW50IG1lcmdlX3NpemU7CkBAIC0zMSw3ICs0MCw3IEBACiAJdm9pZCAqdW5wYWNrX2RhdGE7CiAKIAlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmRzdF9pbmRleDsKLQljb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKnNyY19pbmRleDsKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKnNyY19pbmRleDsKIAlzdHJ1Y3QgaW5kZXhfc3RhdGUgcmVzdWx0OwogfTsKIApkaWZmIC0tZ2l0IGEvdmFyLmMgYi92YXIuYwppbmRleCAwZGUwZWZhLi43MjRiYTg3IDEwMDY0NAotLS0gYS92YXIuYworKysgYi92YXIuYwpAQCAtMzksMzEgKzM5LDMyIEBACiAJcmV0dXJuIHZhbDsKIH0KIAotc3RhdGljIGludCBzaG93X2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQorc3RhdGljIGludCBzaG93X2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKIHsKIAlpZiAodmFsdWUpCiAJCXByaW50ZigiJXM9JXNcbiIsIHZhciwgdmFsdWUpOwogCWVsc2UKIAkJcHJpbnRmKCIlc1xuIiwgdmFyKTsKLQlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUpOworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOwogfQogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAJY29uc3QgY2hhciAqdmFsOworCWludCBub25naXQ7CiAJaWYgKGFyZ2MgIT0gMikgewogCQl1c2FnZSh2YXJfdXNhZ2UpOwogCX0KIAotCXNldHVwX2dpdF9kaXJlY3RvcnkoKTsKKwlzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseSgmbm9uZ2l0KTsKIAl2YWwgPSBOVUxMOwogCiAJaWYgKHN0cmNtcChhcmd2WzFdLCAiLWwiKSA9PSAwKSB7Ci0JCWdpdF9jb25maWcoc2hvd19jb25maWcpOworCQlnaXRfY29uZmlnKHNob3dfY29uZmlnLCBOVUxMKTsKIAkJbGlzdF92YXJzKCk7CiAJCXJldHVybiAwOwogCX0KLQlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZyk7CisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOwogCXZhbCA9IHJlYWRfdmFyKGFyZ3ZbMV0pOwogCWlmICghdmFsKQogCQl1c2FnZSh2YXJfdXNhZ2UpOwpkaWZmIC0tZ2l0IGEvd2Fsa2VyLmMgYi93YWxrZXIuYwppbmRleCBjMTBlY2E4Li4wZTY4ZWU2IDEwMDY0NAotLS0gYS93YWxrZXIuYworKysgYi93YWxrZXIuYwpAQCAtNTksNiArNTksNyBAQAogCWZyZWUodHJlZS0+YnVmZmVyKTsKIAl0cmVlLT5idWZmZXIgPSBOVUxMOwogCXRyZWUtPnNpemUgPSAwOworCXRyZWUtPm9iamVjdC5wYXJzZWQgPSAwOwogCXJldHVybiAwOwogfQogCkBAIC0xOTAsOSArMTkxLDEzIEBACiAJaWYgKCFnZXRfc2hhMV9oZXgodGFyZ2V0LCBzaGExKSkKIAkJcmV0dXJuIDA7CiAJaWYgKCFjaGVja19yZWZfZm9ybWF0KHRhcmdldCkpIHsKLQkJaWYgKCF3YWxrZXItPmZldGNoX3JlZih3YWxrZXIsIHRhcmdldCwgc2hhMSkpIHsKKwkJc3RydWN0IHJlZiAqcmVmID0gYWxsb2NfcmVmX2Zyb21fc3RyKHRhcmdldCk7CisJCWlmICghd2Fsa2VyLT5mZXRjaF9yZWYod2Fsa2VyLCByZWYpKSB7CisJCQloYXNoY3B5KHNoYTEsIHJlZi0+b2xkX3NoYTEpOworCQkJZnJlZShyZWYpOwogCQkJcmV0dXJuIDA7CiAJCX0KKwkJZnJlZShyZWYpOwogCX0KIAlyZXR1cm4gLTE7CiB9CmRpZmYgLS1naXQgYS93YWxrZXIuaCBiL3dhbGtlci5oCmluZGV4IGUxZDQwZGUuLjhhMTQ5ZTEgMTAwNjQ0Ci0tLSBhL3dhbGtlci5oCisrKyBiL3dhbGtlci5oCkBAIC01LDcgKzUsNyBAQAogCiBzdHJ1Y3Qgd2Fsa2VyIHsKIAl2b2lkICpkYXRhOwotCWludCAoKmZldGNoX3JlZikoc3RydWN0IHdhbGtlciAqLCBjaGFyICpyZWYsIHVuc2lnbmVkIGNoYXIgKnNoYTEpOworCWludCAoKmZldGNoX3JlZikoc3RydWN0IHdhbGtlciAqLCBzdHJ1Y3QgcmVmICpyZWYpOwogCXZvaWQgKCpwcmVmZXRjaCkoc3RydWN0IHdhbGtlciAqLCB1bnNpZ25lZCBjaGFyICpzaGExKTsKIAlpbnQgKCpmZXRjaCkoc3RydWN0IHdhbGtlciAqLCB1bnNpZ25lZCBjaGFyICpzaGExKTsKIAl2b2lkICgqY2xlYW51cCkoc3RydWN0IHdhbGtlciAqKTsKZGlmZiAtLWdpdCBhL3dyaXRlX29yX2RpZS5jIGIvd3JpdGVfb3JfZGllLmMKaW5kZXggZTEyNWUxMS4uNjMwYmU0YyAxMDA2NDQKLS0tIGEvd3JpdGVfb3JfZGllLmMKKysrIGIvd3JpdGVfb3JfZGllLmMKQEAgLTQwLDcgKzQwLDcgQEAKIAl9CiB9CiAKLWludCByZWFkX2luX2Z1bGwoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCkKK3NzaXplX3QgcmVhZF9pbl9mdWxsKGludCBmZCwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJY2hhciAqcCA9IGJ1ZjsKIAlzc2l6ZV90IHRvdGFsID0gMDsKQEAgLTU3LDcgKzU3LDcgQEAKIAlyZXR1cm4gdG90YWw7CiB9CiAKLWludCB3cml0ZV9pbl9mdWxsKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpCitzc2l6ZV90IHdyaXRlX2luX2Z1bGwoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAljb25zdCBjaGFyICpwID0gYnVmOwogCXNzaXplX3QgdG90YWwgPSAwOwpAQCAtNzgsNiArNzgsMTMgQEAKIAlyZXR1cm4gdG90YWw7CiB9CiAKK3ZvaWQgZnN5bmNfb3JfZGllKGludCBmZCwgY29uc3QgY2hhciAqbXNnKQoreworCWlmIChmc3luYyhmZCkgPCAwKSB7CisJCWRpZSgiJXM6IGZzeW5jIGVycm9yICglcykiLCBtc2csIHN0cmVycm9yKGVycm5vKSk7CisJfQorfQorCiB2b2lkIHdyaXRlX29yX2RpZShpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBidWYsIGNvdW50KSA8IDApIHsKZGlmZiAtLWdpdCBhL3d0LXN0YXR1cy5jIGIvd3Qtc3RhdHVzLmMKaW5kZXggYjNmZDU3Yi4uNWI0ZDc0YyAxMDA2NDQKLS0tIGEvd3Qtc3RhdHVzLmMKKysrIGIvd3Qtc3RhdHVzLmMKQEAgLTgsMTQgKzgsMTcgQEAKICNpbmNsdWRlICJyZXZpc2lvbi5oIgogI2luY2x1ZGUgImRpZmZjb3JlLmgiCiAjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgogCiBpbnQgd3Rfc3RhdHVzX3JlbGF0aXZlX3BhdGhzID0gMTsKIGludCB3dF9zdGF0dXNfdXNlX2NvbG9yID0gLTE7CitpbnQgd3Rfc3RhdHVzX3N1Ym1vZHVsZV9zdW1tYXJ5Owogc3RhdGljIGNoYXIgd3Rfc3RhdHVzX2NvbG9yc1tdW0NPTE9SX01BWExFTl0gPSB7CiAJIiIsICAgICAgICAgLyogV1RfU1RBVFVTX0hFQURFUjogbm9ybWFsICovCiAJIlwwMzNbMzJtIiwgLyogV1RfU1RBVFVTX1VQREFURUQ6IGdyZWVuICovCiAJIlwwMzNbMzFtIiwgLyogV1RfU1RBVFVTX0NIQU5HRUQ6IHJlZCAqLwogCSJcMDMzWzMxbSIsIC8qIFdUX1NUQVRVU19VTlRSQUNLRUQ6IHJlZCAqLworCSJcMDMzWzMxbSIsIC8qIFdUX1NUQVRVU19OT0JSQU5DSDogcmVkICovCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciB1c2VfYWRkX21zZ1tdID0KQEAgLTM2LDYgKzM5LDggQEAKIAkJcmV0dXJuIFdUX1NUQVRVU19DSEFOR0VEOwogCWlmICghc3RyY2FzZWNtcCh2YXIrb2Zmc2V0LCAidW50cmFja2VkIikpCiAJCXJldHVybiBXVF9TVEFUVVNfVU5UUkFDS0VEOworCWlmICghc3RyY2FzZWNtcCh2YXIrb2Zmc2V0LCAibm9icmFuY2giKSkKKwkJcmV0dXJuIFdUX1NUQVRVU19OT0JSQU5DSDsKIAlkaWUoImJhZCBjb25maWcgdmFyaWFibGUgJyVzJyIsIHZhcik7CiB9CiAKQEAgLTIwNCw3ICsyMDksNyBAQAogCXJldi5kaWZmb3B0LmZvcm1hdF9jYWxsYmFjayA9IHd0X3N0YXR1c19wcmludF91cGRhdGVkX2NiOwogCXJldi5kaWZmb3B0LmZvcm1hdF9jYWxsYmFja19kYXRhID0gczsKIAlyZXYuZGlmZm9wdC5kZXRlY3RfcmVuYW1lID0gMTsKLQlyZXYuZGlmZm9wdC5yZW5hbWVfbGltaXQgPSAxMDA7CisJcmV2LmRpZmZvcHQucmVuYW1lX2xpbWl0ID0gMjAwOwogCXJldi5kaWZmb3B0LmJyZWFrX29wdCA9IDA7CiAJcnVuX2RpZmZfaW5kZXgoJnJldiwgMSk7CiB9CkBAIC0yMjAsNiArMjI1LDM2IEBACiAJcnVuX2RpZmZfZmlsZXMoJnJldiwgMCk7CiB9CiAKK3N0YXRpYyB2b2lkIHd0X3N0YXR1c19wcmludF9zdWJtb2R1bGVfc3VtbWFyeShzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHNtX3N1bW1hcnk7CisJY2hhciBzdW1tYXJ5X2xpbWl0WzY0XTsKKwljaGFyIGluZGV4W1BBVEhfTUFYXTsKKwljb25zdCBjaGFyICplbnZbXSA9IHsgaW5kZXgsIE5VTEwgfTsKKwljb25zdCBjaGFyICphcmd2W10gPSB7CisJCSJzdWJtb2R1bGUiLAorCQkic3VtbWFyeSIsCisJCSItLWNhY2hlZCIsCisJCSItLWZvci1zdGF0dXMiLAorCQkiLS1zdW1tYXJ5LWxpbWl0IiwKKwkJc3VtbWFyeV9saW1pdCwKKwkJcy0+YW1lbmQgPyAiSEVBRF4iIDogIkhFQUQiLAorCQlOVUxMCisJfTsKKworCXNwcmludGYoc3VtbWFyeV9saW1pdCwgIiVkIiwgd3Rfc3RhdHVzX3N1Ym1vZHVsZV9zdW1tYXJ5KTsKKwlzbnByaW50ZihpbmRleCwgc2l6ZW9mKGluZGV4KSwgIkdJVF9JTkRFWF9GSUxFPSVzIiwgcy0+aW5kZXhfZmlsZSk7CisKKwltZW1zZXQoJnNtX3N1bW1hcnksIDAsIHNpemVvZihzbV9zdW1tYXJ5KSk7CisJc21fc3VtbWFyeS5hcmd2ID0gYXJndjsKKwlzbV9zdW1tYXJ5LmVudiA9IGVudjsKKwlzbV9zdW1tYXJ5LmdpdF9jbWQgPSAxOworCXNtX3N1bW1hcnkubm9fc3RkaW4gPSAxOworCWZmbHVzaChzLT5mcCk7CisJc21fc3VtbWFyeS5vdXQgPSBkdXAoZmlsZW5vKHMtPmZwKSk7ICAgIC8qIHJ1bl9jb21tYW5kIGNsb3NlcyBpdCAqLworCXJ1bl9jb21tYW5kKCZzbV9zdW1tYXJ5KTsKK30KKwogc3RhdGljIHZvaWQgd3Rfc3RhdHVzX3ByaW50X3VudHJhY2tlZChzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQogewogCXN0cnVjdCBkaXJfc3RydWN0IGRpcjsKQEAgLTI4Miw4ICszMTcsOSBAQAogdm9pZCB3dF9zdGF0dXNfcHJpbnQoc3RydWN0IHd0X3N0YXR1cyAqcykKIHsKIAl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwotCXMtPmlzX2luaXRpYWwgPSBnZXRfc2hhMShzLT5yZWZlcmVuY2UsIHNoYTEpID8gMSA6IDA7CisJY29uc3QgY2hhciAqYnJhbmNoX2NvbG9yID0gY29sb3IoV1RfU1RBVFVTX0hFQURFUik7CiAKKwlzLT5pc19pbml0aWFsID0gZ2V0X3NoYTEocy0+cmVmZXJlbmNlLCBzaGExKSA/IDEgOiAwOwogCWlmIChzLT5icmFuY2gpIHsKIAkJY29uc3QgY2hhciAqb25fd2hhdCA9ICJPbiBicmFuY2ggIjsKIAkJY29uc3QgY2hhciAqYnJhbmNoX25hbWUgPSBzLT5icmFuY2g7CkBAIC0yOTEsMTAgKzMyNywxMSBAQAogCQkJYnJhbmNoX25hbWUgKz0gMTE7CiAJCWVsc2UgaWYgKCFzdHJjbXAoYnJhbmNoX25hbWUsICJIRUFEIikpIHsKIAkJCWJyYW5jaF9uYW1lID0gIiI7CisJCQlicmFuY2hfY29sb3IgPSBjb2xvcihXVF9TVEFUVVNfTk9CUkFOQ0gpOwogCQkJb25fd2hhdCA9ICJOb3QgY3VycmVudGx5IG9uIGFueSBicmFuY2guIjsKIAkJfQotCQljb2xvcl9mcHJpbnRmX2xuKHMtPmZwLCBjb2xvcihXVF9TVEFUVVNfSEVBREVSKSwKLQkJCSIjICVzJXMiLCBvbl93aGF0LCBicmFuY2hfbmFtZSk7CisJCWNvbG9yX2ZwcmludGYocy0+ZnAsIGNvbG9yKFdUX1NUQVRVU19IRUFERVIpLCAiIyAiKTsKKwkJY29sb3JfZnByaW50Zl9sbihzLT5mcCwgYnJhbmNoX2NvbG9yLCAiJXMlcyIsIG9uX3doYXQsIGJyYW5jaF9uYW1lKTsKIAl9CiAKIAlpZiAocy0+aXNfaW5pdGlhbCkgewpAQCAtMzA4LDYgKzM0NSw4IEBACiAJfQogCiAJd3Rfc3RhdHVzX3ByaW50X2NoYW5nZWQocyk7CisJaWYgKHd0X3N0YXR1c19zdWJtb2R1bGVfc3VtbWFyeSkKKwkJd3Rfc3RhdHVzX3ByaW50X3N1Ym1vZHVsZV9zdW1tYXJ5KHMpOwogCXd0X3N0YXR1c19wcmludF91bnRyYWNrZWQocyk7CiAKIAlpZiAocy0+dmVyYm9zZSAmJiAhcy0+aXNfaW5pdGlhbCkKQEAgLTMyOCw4ICszNjcsMTUgQEAKIAl9CiB9CiAKLWludCBnaXRfc3RhdHVzX2NvbmZpZyhjb25zdCBjaGFyICprLCBjb25zdCBjaGFyICp2KQoraW50IGdpdF9zdGF0dXNfY29uZmlnKGNvbnN0IGNoYXIgKmssIGNvbnN0IGNoYXIgKnYsIHZvaWQgKmNiKQogeworCWlmICghc3RyY21wKGssICJzdGF0dXMuc3VibW9kdWxlc3VtbWFyeSIpKSB7CisJCWludCBpc19ib29sOworCQl3dF9zdGF0dXNfc3VibW9kdWxlX3N1bW1hcnkgPSBnaXRfY29uZmlnX2Jvb2xfb3JfaW50KGssIHYsICZpc19ib29sKTsKKwkJaWYgKGlzX2Jvb2wgJiYgd3Rfc3RhdHVzX3N1Ym1vZHVsZV9zdW1tYXJ5KQorCQkJd3Rfc3RhdHVzX3N1Ym1vZHVsZV9zdW1tYXJ5ID0gLTE7CisJCXJldHVybiAwOworCX0KIAlpZiAoIXN0cmNtcChrLCAic3RhdHVzLmNvbG9yIikgfHwgIXN0cmNtcChrLCAiY29sb3Iuc3RhdHVzIikpIHsKIAkJd3Rfc3RhdHVzX3VzZV9jb2xvciA9IGdpdF9jb25maWdfY29sb3Jib29sKGssIHYsIC0xKTsKIAkJcmV0dXJuIDA7CkBAIC0zNDUsNSArMzkxLDUgQEAKIAkJd3Rfc3RhdHVzX3JlbGF0aXZlX3BhdGhzID0gZ2l0X2NvbmZpZ19ib29sKGssIHYpOwogCQlyZXR1cm4gMDsKIAl9Ci0JcmV0dXJuIGdpdF9jb2xvcl9kZWZhdWx0X2NvbmZpZyhrLCB2KTsKKwlyZXR1cm4gZ2l0X2NvbG9yX2RlZmF1bHRfY29uZmlnKGssIHYsIGNiKTsKIH0KZGlmZiAtLWdpdCBhL3d0LXN0YXR1cy5oIGIvd3Qtc3RhdHVzLmgKaW5kZXggN2Q2MTQxMC4uNTk3YzdlYSAxMDA2NDQKLS0tIGEvd3Qtc3RhdHVzLmgKKysrIGIvd3Qtc3RhdHVzLmgKQEAgLTgsNiArOCw3IEBACiAJV1RfU1RBVFVTX1VQREFURUQsCiAJV1RfU1RBVFVTX0NIQU5HRUQsCiAJV1RfU1RBVFVTX1VOVFJBQ0tFRCwKKwlXVF9TVEFUVVNfTk9CUkFOQ0gsCiB9OwogCiBzdHJ1Y3Qgd3Rfc3RhdHVzIHsKQEAgLTI3LDcgKzI4LDcgQEAKIAljb25zdCBjaGFyICpwcmVmaXg7CiB9OwogCi1pbnQgZ2l0X3N0YXR1c19jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSk7CitpbnQgZ2l0X3N0YXR1c19jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpOwogZXh0ZXJuIGludCB3dF9zdGF0dXNfdXNlX2NvbG9yOwogZXh0ZXJuIGludCB3dF9zdGF0dXNfcmVsYXRpdmVfcGF0aHM7CiB2b2lkIHd0X3N0YXR1c19wcmVwYXJlKHN0cnVjdCB3dF9zdGF0dXMgKnMpOwo=