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/ICJ3b3VsZCBwcnVuZSIgOiAicHJ1bmVkIiwKKwkJCSAgICAgICBza2lwX3ByZWZpeChyZWZuYW1lLCAicmVmcy9yZW1vdGVzLyIpKTsKKwkJfQorCiAJCS8qIE5FRURTV09SSzogZnJlZSByZW1vdGUgKi8KIAkJcGF0aF9saXN0X2NsZWFyKCZzdGF0ZXMubmV3LCAwKTsKIAkJcGF0aF9saXN0X2NsZWFyKCZzdGF0ZXMuc3RhbGUsIDApOwpAQCAtNTAyLDcgKzYwMCw3IEBACiAJc3RydWN0IHBhdGhfbGlzdCAqbGlzdDsKIH0gcmVtb3RlX2dyb3VwOwogCi1zdGF0aWMgaW50IGdldF9yZW1vdGVfZ3JvdXAoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSkKK3N0YXRpYyBpbnQgZ2V0X3JlbW90ZV9ncm91cChjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKIHsKIAlpZiAoIXByZWZpeGNtcChrZXksICJyZW1vdGVzLiIpICYmCiAJCQkhc3RyY21wKGtleSArIDgsIHJlbW90ZV9ncm91cC5uYW1lKSkgewpAQCAtNTM0LDcgKzYzMiw3IEBACiAJcmVtb3RlX2dyb3VwLmxpc3QgPSAmbGlzdDsKIAlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CiAJCXJlbW90ZV9ncm91cC5uYW1lID0gYXJndltpXTsKLQkJcmVzdWx0ID0gZ2l0X2NvbmZpZyhnZXRfcmVtb3RlX2dyb3VwKTsKKwkJcmVzdWx0ID0gZ2l0X2NvbmZpZyhnZXRfcmVtb3RlX2dyb3VwLCBOVUxMKTsKIAl9CiAKIAlpZiAoIXJlc3VsdCAmJiAhbGlzdC5uciAgJiYgYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgImRlZmF1bHQiKSkKQEAgLTYwMCw5ICs2OTgsOSBAQAogCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgInJtIikpCiAJCXJlc3VsdCA9IHJtKGFyZ2MsIGFyZ3YpOwogCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgInNob3ciKSkKLQkJcmVzdWx0ID0gc2hvd19vcl9wcnVuZShhcmdjLCBhcmd2LCAwKTsKKwkJcmVzdWx0ID0gc2hvdyhhcmdjLCBhcmd2KTsKIAllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJwcnVuZSIpKQotCQlyZXN1bHQgPSBzaG93X29yX3BydW5lKGFyZ2MsIGFyZ3YsIDEpOworCQlyZXN1bHQgPSBwcnVuZShhcmdjLCBhcmd2KTsKIAllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJ1cGRhdGUiKSkKIAkJcmVzdWx0ID0gdXBkYXRlKGFyZ2MsIGFyZ3YpOwogCWVsc2UgewpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1yZXJlcmUuYyBiL2J1aWx0aW4tcmVyZXJlLmMKaW5kZXggYzYwN2FhZC4uODUyMjJkOSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1yZXJlcmUuYworKysgYi9idWlsdGluLXJlcmVyZS5jCkBAIC00Myw3ICs0Myw3IEBACiAJCQk7IC8qIGRvIG5vdGhpbmcgKi8KIAkJaWYgKGkgPT0gc2l6ZW9mKGJ1ZikpCiAJCQlkaWUoImZpbGVuYW1lIHRvbyBsb25nIik7Ci0JCXBhdGhfbGlzdF9pbnNlcnQoYnVmLCByciktPnV0aWwgPSB4c3RyZHVwKG5hbWUpOworCQlwYXRoX2xpc3RfaW5zZXJ0KGJ1ZiwgcnIpLT51dGlsID0gbmFtZTsKIAl9CiAJZmNsb3NlKGluKTsKIH0KQEAgLTMzOSw3ICszMzksNyBAQAogCXJldHVybiB3cml0ZV9ycihyciwgZmQpOwogfQogCi1zdGF0aWMgaW50IGdpdF9yZXJlcmVfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCitzdGF0aWMgaW50IGdpdF9yZXJlcmVfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQogewogCWlmICghc3RyY21wKHZhciwgImdjLnJlcmVyZXJlc29sdmVkIikpCiAJCWN1dG9mZl9yZXNvbHZlID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CkBAIC0zNDgsNyArMzQ4LDcgQEAKIAllbHNlIGlmICghc3RyY21wKHZhciwgInJlcmVyZS5lbmFibGVkIikpCiAJCXJlcmVyZV9lbmFibGVkID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOwogCWVsc2UKLQkJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM3Niw3ICszNzYsNyBAQAogewogCWludCBmZDsKIAotCWdpdF9jb25maWcoZ2l0X3JlcmVyZV9jb25maWcpOworCWdpdF9jb25maWcoZ2l0X3JlcmVyZV9jb25maWcsIE5VTEwpOwogCWlmICghaXNfcmVyZXJlX2VuYWJsZWQoKSkKIAkJcmV0dXJuIC0xOwogCmRpZmYgLS1naXQgYS9idWlsdGluLXJlc2V0LmMgYi9idWlsdGluLXJlc2V0LmMKaW5kZXggNzk0MjRiYi4uYTAzMjE2OSAxMDA2NDQKLS0tIGEvYnVpbHRpbi1yZXNldC5jCisrKyBiL2J1aWx0aW4tcmVzZXQuYwpAQCAtNDksMTMgKzQ5LDE0IEBACiAJcmV0dXJuICFhY2Nlc3MoZ2l0X3BhdGgoIk1FUkdFX0hFQUQiKSwgRl9PSyk7CiB9CiAKLXN0YXRpYyBpbnQgcmVzZXRfaW5kZXhfZmlsZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgaXNfaGFyZF9yZXNldCkKK3N0YXRpYyBpbnQgcmVzZXRfaW5kZXhfZmlsZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgaXNfaGFyZF9yZXNldCwgaW50IHF1aWV0KQogewogCWludCBpID0gMDsKIAljb25zdCBjaGFyICphcmdzWzZdOwogCiAJYXJnc1tpKytdID0gInJlYWQtdHJlZSI7Ci0JYXJnc1tpKytdID0gIi12IjsKKwlpZiAoIXF1aWV0KQorCQlhcmdzW2krK10gPSAiLXYiOwogCWFyZ3NbaSsrXSA9ICItLXJlc2V0IjsKIAlpZiAoaXNfaGFyZF9yZXNldCkKIAkJYXJnc1tpKytdID0gIi11IjsKQEAgLTE4MiwxOSArMTgzLDUxIEBACiAJCU9QVF9TRVRfSU5UKDAsICJoYXJkIiwgJnJlc2V0X3R5cGUsCiAJCQkJInJlc2V0IEhFQUQsIGluZGV4IGFuZCB3b3JraW5nIHRyZWUiLCBIQVJEKSwKIAkJT1BUX0JPT0xFQU4oJ3EnLCBOVUxMLCAmcXVpZXQsCi0JCQkJImRpc2FibGUgc2hvd2luZyBuZXcgSEVBRCBpbiBoYXJkIHJlc2V0IiksCisJCQkJImRpc2FibGUgc2hvd2luZyBuZXcgSEVBRCBpbiBoYXJkIHJlc2V0IGFuZCBwcm9ncmVzcyBtZXNzYWdlIiksCiAJCU9QVF9FTkQoKQogCX07CiAKLQlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZyk7CisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOwogCiAJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywgZ2l0X3Jlc2V0X3VzYWdlLAogCQkJCQkJUEFSU0VfT1BUX0tFRVBfREFTSERBU0gpOwogCXJlZmxvZ19hY3Rpb24gPSBhcmdzX3RvX3N0cihhcmd2KTsKIAlzZXRlbnYoIkdJVF9SRUZMT0dfQUNUSU9OIiwgcmVmbG9nX2FjdGlvbiwgMCk7CiAKLQlpZiAoaSA8IGFyZ2MgJiYgc3RyY21wKGFyZ3ZbaV0sICItLSIpKQotCQlyZXYgPSBhcmd2W2krK107CisJLyoKKwkgKiBQb3NzaWJsZSBhcmd1bWVudHMgYXJlOgorCSAqCisJICogZ2l0IHJlc2V0IFstb3B0c10gPHJldj4gPHBhdGhzPi4uLgorCSAqIGdpdCByZXNldCBbLW9wdHNdIDxyZXY+IC0tIDxwYXRocz4uLi4KKwkgKiBnaXQgcmVzZXQgWy1vcHRzXSAtLSA8cGF0aHM+Li4uCisJICogZ2l0IHJlc2V0IFstb3B0c10gPHBhdGhzPi4uLgorCSAqCisJICogQXQgdGhpcyBwb2ludCwgYXJndltpXSBwb2ludHMgaW1tZWRpYXRlbHkgYWZ0ZXIgWy1vcHRzXS4KKwkgKi8KKworCWlmIChpIDwgYXJnYykgeworCQlpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS0iKSkgeworCQkJaSsrOyAvKiByZXNldCB0byBIRUFELCBwb3NzaWJseSB3aXRoIHBhdGhzICovCisJCX0gZWxzZSBpZiAoaSArIDEgPCBhcmdjICYmICFzdHJjbXAoYXJndltpKzFdLCAiLS0iKSkgeworCQkJcmV2ID0gYXJndltpXTsKKwkJCWkgKz0gMjsKKwkJfQorCQkvKgorCQkgKiBPdGhlcndpc2UsIGFyZ3ZbaV0gY291bGQgYmUgZWl0aGVyIDxyZXY+IG9yIDxwYXRocz4gYW5kCisJCSAqIGhhcyB0byBiZSB1bmFtYmlnb3VzLgorCQkgKi8KKwkJZWxzZSBpZiAoIWdldF9zaGExKGFyZ3ZbaV0sIHNoYTEpKSB7CisJCQkvKgorCQkJICogT2ssIGFyZ3ZbaV0gbG9va3MgbGlrZSBhIHJldjsgaXQgc2hvdWxkIG5vdAorCQkJICogYmUgYSBmaWxlbmFtZS4KKwkJCSAqLworCQkJdmVyaWZ5X25vbl9maWxlbmFtZShwcmVmaXgsIGFyZ3ZbaV0pOworCQkJcmV2ID0gYXJndltpKytdOworCQl9IGVsc2UgeworCQkJLyogT3RoZXJ3aXNlIHdlIHRyZWF0IHRoaXMgYXMgYSBmaWxlbmFtZSAqLworCQkJdmVyaWZ5X2ZpbGVuYW1lKHByZWZpeCwgYXJndltpXSk7CisJCX0KKwl9CiAKIAlpZiAoZ2V0X3NoYTEocmV2LCBzaGExKSkKIAkJZGllKCJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIsIHJldik7CkBAIC0yMDQsOSArMjM3LDYgQEAKIAkJZGllKCJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcycuIiwgcmV2KTsKIAloYXNoY3B5KHNoYTEsIGNvbW1pdC0+b2JqZWN0LnNoYTEpOwogCi0JaWYgKGkgPCBhcmdjICYmICFzdHJjbXAoYXJndltpXSwgIi0tIikpCi0JCWkrKzsKLQogCS8qIGdpdCByZXNldCB0cmVlIFstLV0gcGF0aHMuLi4gY2FuIGJlIHVzZWQgdG8KIAkgKiBsb2FkIGNob3NlbiBwYXRocyBmcm9tIHRoZSB0cmVlIGludG8gdGhlIGluZGV4IHdpdGhvdXQKIAkgKiBhZmZlY3RpbmcgdGhlIHdvcmtpbmcgdHJlZSBub3IgSEVBRC4gKi8KQEAgLTIzMSw3ICsyNjEsNyBAQAogCQlpZiAoaXNfbWVyZ2UoKSB8fCByZWFkX2NhY2hlKCkgPCAwIHx8IHVubWVyZ2VkX2NhY2hlKCkpCiAJCQlkaWUoIkNhbm5vdCBkbyBhIHNvZnQgcmVzZXQgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlLiIpOwogCX0KLQllbHNlIGlmIChyZXNldF9pbmRleF9maWxlKHNoYTEsIChyZXNldF90eXBlID09IEhBUkQpKSkKKwllbHNlIGlmIChyZXNldF9pbmRleF9maWxlKHNoYTEsIChyZXNldF90eXBlID09IEhBUkQpLCBxdWlldCkpCiAJCWRpZSgiQ291bGQgbm90IHJlc2V0IGluZGV4IGZpbGUgdG8gcmV2aXNpb24gJyVzJy4iLCByZXYpOwogCiAJLyogQW55IHJlc2V0cyB1cGRhdGUgSEVBRCB0byB0aGUgaGVhZCBiZWluZyBzd2l0Y2hlZCB0bywKZGlmZiAtLWdpdCBhL2J1aWx0aW4tcmV2LWxpc3QuYyBiL2J1aWx0aW4tcmV2LWxpc3QuYwppbmRleCBlZGMwYmQzLi4zOWVjNjFjIDEwMDY0NAotLS0gYS9idWlsdGluLXJldi1saXN0LmMKKysrIGIvYnVpbHRpbi1yZXYtbGlzdC5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSAibGlzdC1vYmplY3RzLmgiCiAjaW5jbHVkZSAiYnVpbHRpbi5oIgogI2luY2x1ZGUgImxvZy10cmVlLmgiCisjaW5jbHVkZSAiZ3JhcGguaCIKIAogLyogYml0cyAjMC0xNSBpbiByZXZpc2lvbi5oICovCiAKQEAgLTU4LDI2ICs1OSwzMSBAQAogc3RhdGljIHZvaWQgZmluaXNoX2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21taXQpOwogc3RhdGljIHZvaWQgc2hvd19jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0KQogeworCWdyYXBoX3Nob3dfY29tbWl0KHJldnMuZ3JhcGgpOworCiAJaWYgKHNob3dfdGltZXN0YW1wKQogCQlwcmludGYoIiVsdSAiLCBjb21taXQtPmRhdGUpOwogCWlmIChoZWFkZXJfcHJlZml4KQogCQlmcHV0cyhoZWFkZXJfcHJlZml4LCBzdGRvdXQpOwotCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIEJPVU5EQVJZKQotCQlwdXRjaGFyKCctJyk7Ci0JZWxzZSBpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQotCQlwdXRjaGFyKCdeJyk7Ci0JZWxzZSBpZiAocmV2cy5sZWZ0X3JpZ2h0KSB7Ci0JCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFNZTU1FVFJJQ19MRUZUKQotCQkJcHV0Y2hhcignPCcpOwotCQllbHNlCi0JCQlwdXRjaGFyKCc+Jyk7CisKKwlpZiAoIXJldnMuZ3JhcGgpIHsKKwkJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQk9VTkRBUlkpCisJCQlwdXRjaGFyKCctJyk7CisJCWVsc2UgaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykKKwkJCXB1dGNoYXIoJ14nKTsKKwkJZWxzZSBpZiAocmV2cy5sZWZ0X3JpZ2h0KSB7CisJCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBTWU1NRVRSSUNfTEVGVCkKKwkJCQlwdXRjaGFyKCc8Jyk7CisJCQllbHNlCisJCQkJcHV0Y2hhcignPicpOworCQl9CiAJfQogCWlmIChyZXZzLmFiYnJldl9jb21taXQgJiYgcmV2cy5hYmJyZXYpCiAJCWZwdXRzKGZpbmRfdW5pcXVlX2FiYnJldihjb21taXQtPm9iamVjdC5zaGExLCByZXZzLmFiYnJldiksCiAJCSAgICAgIHN0ZG91dCk7CiAJZWxzZQogCQlmcHV0cyhzaGExX3RvX2hleChjb21taXQtPm9iamVjdC5zaGExKSwgc3Rkb3V0KTsKLQlpZiAocmV2cy5wYXJlbnRzKSB7CisJaWYgKHJldnMucHJpbnRfcGFyZW50cykgewogCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMgPSBjb21taXQtPnBhcmVudHM7CiAJCXdoaWxlIChwYXJlbnRzKSB7CiAJCQlwcmludGYoIiAlcyIsIHNoYTFfdG9faGV4KHBhcmVudHMtPml0ZW0tPm9iamVjdC5zaGExKSk7CkBAIC05Niw5ICsxMDIsNDggQEAKIAkJcHJldHR5X3ByaW50X2NvbW1pdChyZXZzLmNvbW1pdF9mb3JtYXQsIGNvbW1pdCwKIAkJCQkgICAgJmJ1ZiwgcmV2cy5hYmJyZXYsIE5VTEwsIE5VTEwsCiAJCQkJICAgIHJldnMuZGF0ZV9tb2RlLCAwKTsKLQkJaWYgKGJ1Zi5sZW4pCi0JCQlwcmludGYoIiVzJWMiLCBidWYuYnVmLCBoZHJfdGVybWluYXRpb24pOworCQlpZiAocmV2cy5ncmFwaCkgeworCQkJaWYgKGJ1Zi5sZW4pIHsKKwkJCQlpZiAocmV2cy5jb21taXRfZm9ybWF0ICE9IENNSVRfRk1UX09ORUxJTkUpCisJCQkJCWdyYXBoX3Nob3dfb25lbGluZShyZXZzLmdyYXBoKTsKKworCQkJCWdyYXBoX3Nob3dfY29tbWl0X21zZyhyZXZzLmdyYXBoLCAmYnVmKTsKKworCQkJCS8qCisJCQkJICogQWRkIGEgbmV3bGluZSBhZnRlciB0aGUgY29tbWl0IG1lc3NhZ2UuCisJCQkJICoKKwkJCQkgKiBVc3VhbGx5LCB0aGlzIG5ld2xpbmUgcHJvZHVjZXMgYSBibGFuaworCQkJCSAqIHBhZGRpbmcgbGluZSBiZXR3ZWVuIGVudHJpZXMsIGluIHdoaWNoIGNhc2UKKwkJCQkgKiB3ZSBuZWVkIHRvIGFkZCBncmFwaCBwYWRkaW5nIG9uIHRoaXMgbGluZS4KKwkJCQkgKgorCQkJCSAqIEhvd2V2ZXIsIHRoZSBjb21taXQgbWVzc2FnZSBtYXkgbm90IGVuZCBpbiBhCisJCQkJICogbmV3bGluZS4gIEluIHRoaXMgY2FzZSB0aGUgbmV3bGluZSBzaW1wbHkKKwkJCQkgKiBlbmRzIHRoZSBsYXN0IGxpbmUgb2YgdGhlIGNvbW1pdCBtZXNzYWdlLAorCQkJCSAqIGFuZCB3ZSBkb24ndCBuZWVkIGFueSBncmFwaCBvdXRwdXQuICAoVGhpcworCQkJCSAqIGFsd2F5cyBoYXBwZW5zIHdpdGggQ01JVF9GTVRfT05FTElORSwgYW5kIGl0CisJCQkJICogaGFwcGVucyB3aXRoIENNSVRfRk1UX1VTRVJGT1JNQVQgd2hlbiB0aGUKKwkJCQkgKiBmb3JtYXQgZG9lc24ndCBleHBsaWNpdGx5IGVuZCBpbiBhIG5ld2xpbmUuKQorCQkJCSAqLworCQkJCWlmIChidWYubGVuICYmIGJ1Zi5idWZbYnVmLmxlbiAtIDFdID09ICdcbicpCisJCQkJCWdyYXBoX3Nob3dfcGFkZGluZyhyZXZzLmdyYXBoKTsKKwkJCQlwdXRjaGFyKCdcbicpOworCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIElmIHRoZSBtZXNzYWdlIGJ1ZmZlciBpcyBlbXB0eSwganVzdCBzaG93CisJCQkJICogdGhlIHJlc3Qgb2YgdGhlIGdyYXBoIG91dHB1dCBmb3IgdGhpcworCQkJCSAqIGNvbW1pdC4KKwkJCQkgKi8KKwkJCQlpZiAoZ3JhcGhfc2hvd19yZW1haW5kZXIocmV2cy5ncmFwaCkpCisJCQkJCXB1dGNoYXIoJ1xuJyk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoYnVmLmxlbikKKwkJCQlwcmludGYoIiVzJWMiLCBidWYuYnVmLCBoZHJfdGVybWluYXRpb24pOworCQl9CiAJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCX0gZWxzZSB7CisJCWlmIChncmFwaF9zaG93X3JlbWFpbmRlcihyZXZzLmdyYXBoKSkKKwkJCXB1dGNoYXIoJ1xuJyk7CiAJfQogCW1heWJlX2ZsdXNoX29yX2RpZShzdGRvdXQsICJzdGRvdXQiKTsKIAlmaW5pc2hfY29tbWl0KGNvbW1pdCk7CkBAIC01NDYsMTIgKzU5MSwxMyBAQAogCWludCBiaXNlY3RfZmluZF9hbGwgPSAwOwogCWludCBxdWlldCA9IDA7CiAKLQlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZyk7CisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOwogCWluaXRfcmV2aXNpb25zKCZyZXZzLCBwcmVmaXgpOwogCXJldnMuYWJicmV2ID0gMDsKIAlyZXZzLmNvbW1pdF9mb3JtYXQgPSBDTUlUX0ZNVF9VTlNQRUNJRklFRDsKIAlhcmdjID0gc2V0dXBfcmV2aXNpb25zKGFyZ2MsIGFyZ3YsICZyZXZzLCBOVUxMKTsKIAorCXF1aWV0ID0gRElGRl9PUFRfVFNUKCZyZXZzLmRpZmZvcHQsIFFVSUVUKTsKIAlmb3IgKGkgPSAxIDsgaSA8IGFyZ2M7IGkrKykgewogCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOwogCkBAIC01ODMsMTAgKzYyOSw2IEBACiAJCQlyZWFkX3JldmlzaW9uc19mcm9tX3N0ZGluKCZyZXZzKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCWlmICghc3RyY21wKGFyZywgIi0tcXVpZXQiKSkgewotCQkJcXVpZXQgPSAxOwotCQkJY29udGludWU7Ci0JCX0KIAkJdXNhZ2UocmV2X2xpc3RfdXNhZ2UpOwogCiAJfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1yZXYtcGFyc2UuYyBiL2J1aWx0aW4tcmV2LXBhcnNlLmMKaW5kZXggMDBiNjA3OC4uYTc4NjBlZCAxMDA2NDQKLS0tIGEvYnVpbHRpbi1yZXYtcGFyc2UuYworKysgYi9idWlsdGluLXJldi1wYXJzZS5jCkBAIC0yOCw4ICsyOCw2IEBACiBzdGF0aWMgaW50IGFiYnJldjsKIHN0YXRpYyBpbnQgb3V0cHV0X3NxOwogCi1zdGF0aWMgaW50IHJldnNfY291bnQ7Ci0KIC8qCiAgKiBTb21lIGFyZ3VtZW50cyBhcmUgcmVsZXZhbnQgInJldmlzaW9uIiBhcmd1bWVudHMsCiAgKiBvdGhlcnMgYXJlIGFib3V0IG91dHB1dCBmb3JtYXQgb3Igb3RoZXIgZGV0YWlscy4KQEAgLTExMCw3ICsxMDgsNiBAQAogCWlmICghKGZpbHRlciAmIERPX1JFVlMpKQogCQlyZXR1cm47CiAJZGVmID0gTlVMTDsKLQlyZXZzX2NvdW50Kys7CiAKIAlpZiAoc3ltYm9saWMgJiYgbmFtZSkgewogCQlpZiAoc3ltYm9saWMgPT0gU0hPV19TWU1CT0xJQ19GVUxMKSB7CkBAIC0xNTYsNyArMTUzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc2hvd19kZWZhdWx0KHZvaWQpCitzdGF0aWMgaW50IHNob3dfZGVmYXVsdCh2b2lkKQogewogCWNvbnN0IGNoYXIgKnMgPSBkZWY7CiAKQEAgLTE2Niw5ICsxNjMsMTAgQEAKIAkJZGVmID0gTlVMTDsKIAkJaWYgKCFnZXRfc2hhMShzLCBzaGExKSkgewogCQkJc2hvd19yZXYoTk9STUFMLCBzaGExLCBzKTsKLQkJCXJldHVybjsKKwkJCXJldHVybiAxOwogCQl9CiAJfQorCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNob3dfcmVmZXJlbmNlKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQpAQCAtMzcxLDE2ICszNjksMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgZGllX25vX3NpbmdsZV9yZXYoaW50IHF1aWV0KQoreworCWlmIChxdWlldCkKKwkJZXhpdCgxKTsKKwllbHNlCisJCWRpZSgiTmVlZGVkIGEgc2luZ2xlIHJldmlzaW9uIik7Cit9CisKIGludCBjbWRfcmV2X3BhcnNlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQogewotCWludCBpLCBhc19pcyA9IDAsIHZlcmlmeSA9IDA7CisJaW50IGksIGFzX2lzID0gMCwgdmVyaWZ5ID0gMCwgcXVpZXQgPSAwLCByZXZzX2NvdW50ID0gMCwgdHlwZSA9IDA7CiAJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwljb25zdCBjaGFyICpuYW1lID0gTlVMTDsKIAogCWlmIChhcmdjID4gMSAmJiAhc3RyY21wKCItLXBhcnNlb3B0IiwgYXJndlsxXSkpCiAJCXJldHVybiBjbWRfcGFyc2VvcHQoYXJnYyAtIDEsIGFyZ3YgKyAxLCBwcmVmaXgpOwogCiAJcHJlZml4ID0gc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOwotCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnKTsKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CiAJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgewogCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOwogCkBAIC00MzgsNiArNDQ1LDEwIEBACiAJCQkJdmVyaWZ5ID0gMTsKIAkJCQljb250aW51ZTsKIAkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tcXVpZXQiKSB8fCAhc3RyY21wKGFyZywgIi1xIikpIHsKKwkJCQlxdWlldCA9IDE7CisJCQkJY29udGludWU7CisJCQl9CiAJCQlpZiAoIXN0cmNtcChhcmcsICItLXNob3J0IikgfHwKIAkJCSAgICAhcHJlZml4Y21wKGFyZywgIi0tc2hvcnQ9IikpIHsKIAkJCQlmaWx0ZXIgJj0gfihET19GTEFHU3xET19OT1JFVik7CkBAIC01NTUsMzAgKzU2Niw0MSBAQAogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJaWYgKHNob3dfZmxhZyhhcmcpICYmIHZlcmlmeSkKLQkJCQlkaWUoIk5lZWRlZCBhIHNpbmdsZSByZXZpc2lvbiIpOworCQkJCWRpZV9ub19zaW5nbGVfcmV2KHF1aWV0KTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJLyogTm90IGEgZmxhZyBhcmd1bWVudCAqLwogCQlpZiAodHJ5X2RpZmZlcmVuY2UoYXJnKSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoIWdldF9zaGExKGFyZywgc2hhMSkpIHsKLQkJCXNob3dfcmV2KE5PUk1BTCwgc2hhMSwgYXJnKTsKKwkJbmFtZSA9IGFyZzsKKwkJdHlwZSA9IE5PUk1BTDsKKwkJaWYgKCphcmcgPT0gJ14nKSB7CisJCQluYW1lKys7CisJCQl0eXBlID0gUkVWRVJTRUQ7CisJCX0KKwkJaWYgKCFnZXRfc2hhMShuYW1lLCBzaGExKSkgeworCQkJaWYgKHZlcmlmeSkKKwkJCQlyZXZzX2NvdW50Kys7CisJCQllbHNlCisJCQkJc2hvd19yZXYodHlwZSwgc2hhMSwgbmFtZSk7CiAJCQljb250aW51ZTsKIAkJfQotCQlpZiAoKmFyZyA9PSAnXicgJiYgIWdldF9zaGExKGFyZysxLCBzaGExKSkgewotCQkJc2hvd19yZXYoUkVWRVJTRUQsIHNoYTEsIGFyZysxKTsKLQkJCWNvbnRpbnVlOwotCQl9CisJCWlmICh2ZXJpZnkpCisJCQlkaWVfbm9fc2luZ2xlX3JldihxdWlldCk7CiAJCWFzX2lzID0gMTsKIAkJaWYgKCFzaG93X2ZpbGUoYXJnKSkKIAkJCWNvbnRpbnVlOwotCQlpZiAodmVyaWZ5KQotCQkJZGllKCJOZWVkZWQgYSBzaW5nbGUgcmV2aXNpb24iKTsKIAkJdmVyaWZ5X2ZpbGVuYW1lKHByZWZpeCwgYXJnKTsKIAl9Ci0Jc2hvd19kZWZhdWx0KCk7Ci0JaWYgKHZlcmlmeSAmJiByZXZzX2NvdW50ICE9IDEpCi0JCWRpZSgiTmVlZGVkIGEgc2luZ2xlIHJldmlzaW9uIik7CisJaWYgKHZlcmlmeSkgeworCQlpZiAocmV2c19jb3VudCA9PSAxKSB7CisJCQlzaG93X3Jldih0eXBlLCBzaGExLCBuYW1lKTsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgaWYgKHJldnNfY291bnQgPT0gMCAmJiBzaG93X2RlZmF1bHQoKSkKKwkJCXJldHVybiAwOworCQlkaWVfbm9fc2luZ2xlX3JldihxdWlldCk7CisJfSBlbHNlCisJCXNob3dfZGVmYXVsdCgpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1yZXZlcnQuYyBiL2J1aWx0aW4tcmV2ZXJ0LmMKaW5kZXggNjA3YTJmMC4uYmRlMjhiMiAxMDA2NDQKLS0tIGEvYnVpbHRpbi1yZXZlcnQuYworKysgYi9idWlsdGluLXJldmVydC5jCkBAIC0zMyw3ICszMyw3IEBACiAJTlVMTAogfTsKIAotc3RhdGljIGludCBlZGl0LCBub19yZXBsYXksIG5vX2NvbW1pdCwgbWFpbmxpbmU7CitzdGF0aWMgaW50IGVkaXQsIG5vX3JlcGxheSwgbm9fY29tbWl0LCBtYWlubGluZSwgc2lnbm9mZjsKIHN0YXRpYyBlbnVtIHsgUkVWRVJULCBDSEVSUllfUElDSyB9IGFjdGlvbjsKIHN0YXRpYyBzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CiAKQEAgLTUzLDYgKzUzLDcgQEAKIAkJT1BUX0JPT0xFQU4oJ2UnLCAiZWRpdCIsICZlZGl0LCAiZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2UiKSwKIAkJT1BUX0JPT0xFQU4oJ3gnLCBOVUxMLCAmbm9fcmVwbGF5LCAiYXBwZW5kIGNvbW1pdCBuYW1lIHdoZW4gY2hlcnJ5LXBpY2tpbmciKSwKIAkJT1BUX0JPT0xFQU4oJ3InLCBOVUxMLCAmbm9vcCwgIm5vLW9wIChiYWNrd2FyZCBjb21wYXRpYmlsaXR5KSIpLAorCQlPUFRfQk9PTEVBTigncycsICJzaWdub2ZmIiwgJnNpZ25vZmYsICJhZGQgU2lnbmVkLW9mZi1ieToiKSwKIAkJT1BUX0lOVEVHRVIoJ20nLCAibWFpbmxpbmUiLCAmbWFpbmxpbmUsICJwYXJlbnQgbnVtYmVyIiksCiAJCU9QVF9FTkQoKSwKIAl9OwpAQCAtMTc5LDcgKzE4MCw3IEBACiAJCQllbWFpbCsrOwogCQkJdGltZXN0YW1wID0gc3RyY2hyKGVtYWlsLCAnPicpOwogCQkJaWYgKCF0aW1lc3RhbXApCi0JCQkJZGllICgiQ291bGQgbm90IGV4dHJhY3QgYXV0aG9yIGVtYWlsIGZyb20gJXMiLAorCQkJCWRpZSAoIkNvdWxkIG5vdCBleHRyYWN0IGF1dGhvciB0aW1lIGZyb20gJXMiLAogCQkJCQlzaGExX3RvX2hleChjb21taXQtPm9iamVjdC5zaGExKSk7CiAJCQkqdGltZXN0YW1wID0gJ1wwJzsKIAkJCWZvciAodGltZXN0YW1wKys7ICp0aW1lc3RhbXAgJiYgaXNzcGFjZSgqdGltZXN0YW1wKTsKQEAgLTI2OCw3ICsyNjksNyBAQAogCWNvbnN0IGNoYXIgKm1lc3NhZ2UsICplbmNvZGluZzsKIAljb25zdCBjaGFyICpkZWZtc2cgPSB4c3RyZHVwKGdpdF9wYXRoKCJNRVJHRV9NU0ciKSk7CiAKLQlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZyk7CisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOwogCW1lID0gYWN0aW9uID09IFJFVkVSVCA/ICJyZXZlcnQiIDogImNoZXJyeS1waWNrIjsKIAlzZXRlbnYoR0lUX1JFRkxPR19BQ1RJT04sIG1lLCAwKTsKIAlwYXJzZV9hcmdzKGFyZ2MsIGFyZ3YpOwpAQCAtNDA0LDEwICs0MDUsMTkgQEAKIAkgKi8KIAogCWlmICghbm9fY29tbWl0KSB7Ci0JCWlmIChlZGl0KQotCQkJcmV0dXJuIGV4ZWNsX2dpdF9jbWQoImNvbW1pdCIsICItbiIsIE5VTEwpOwotCQllbHNlCi0JCQlyZXR1cm4gZXhlY2xfZ2l0X2NtZCgiY29tbWl0IiwgIi1uIiwgIi1GIiwgZGVmbXNnLCBOVUxMKTsKKwkJLyogNiBpcyBtYXggcG9zc2libGUgbGVuZ3RoIG9mIG91ciBhcmdzIGFycmF5IGluY2x1ZGluZyBOVUxMICovCisJCWNvbnN0IGNoYXIgKmFyZ3NbNl07CisJCWludCBpID0gMDsKKwkJYXJnc1tpKytdID0gImNvbW1pdCI7CisJCWFyZ3NbaSsrXSA9ICItbiI7CisJCWlmIChzaWdub2ZmKQorCQkJYXJnc1tpKytdID0gIi1zIjsKKwkJaWYgKCFlZGl0KSB7CisJCQlhcmdzW2krK10gPSAiLUYiOworCQkJYXJnc1tpKytdID0gZGVmbXNnOworCQl9CisJCWFyZ3NbaV0gPSBOVUxMOworCQlyZXR1cm4gZXhlY3ZfZ2l0X2NtZChhcmdzKTsKIAl9CiAJZnJlZShyZWVuY29kZWRfbWVzc2FnZSk7CiAKZGlmZiAtLWdpdCBhL2J1aWx0aW4tcm0uYyBiL2J1aWx0aW4tcm0uYwppbmRleCBjMGE4YmI2Li5hYmRhYjdmIDEwMDY0NAotLS0gYS9idWlsdGluLXJtLmMKKysrIGIvYnVpbHRpbi1ybS5jCkBAIC0xNDQsMTIgKzE0NCw3IEBACiAJY29uc3QgY2hhciAqKnBhdGhzcGVjOwogCWNoYXIgKnNlZW47CiAKLQlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZyk7Ci0KLQluZXdmZCA9IGhvbGRfbG9ja2VkX2luZGV4KCZsb2NrX2ZpbGUsIDEpOwotCi0JaWYgKHJlYWRfY2FjaGUoKSA8IDApCi0JCWRpZSgiaW5kZXggZmlsZSBjb3JydXB0Iik7CisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOwogCiAJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgYnVpbHRpbl9ybV9vcHRpb25zLCBidWlsdGluX3JtX3VzYWdlLCAwKTsKIAlpZiAoIWFyZ2MpCkBAIC0xNTgsNiArMTUzLDExIEBACiAJaWYgKCFpbmRleF9vbmx5KQogCQlzZXR1cF93b3JrX3RyZWUoKTsKIAorCW5ld2ZkID0gaG9sZF9sb2NrZWRfaW5kZXgoJmxvY2tfZmlsZSwgMSk7CisKKwlpZiAocmVhZF9jYWNoZSgpIDwgMCkKKwkJZGllKCJpbmRleCBmaWxlIGNvcnJ1cHQiKTsKKwogCXBhdGhzcGVjID0gZ2V0X3BhdGhzcGVjKHByZWZpeCwgYXJndik7CiAJc2VlbiA9IE5VTEw7CiAJZm9yIChpID0gMDsgcGF0aHNwZWNbaV0gOyBpKyspCmRpZmYgLS1naXQgYS9idWlsdGluLXNlbmQtcGFjay5jIGIvYnVpbHRpbi1zZW5kLXBhY2suYwppbmRleCBiYjljMzNhLi5hNzA4ZDBhIDEwMDY0NAotLS0gYS9idWlsdGluLXNlbmQtcGFjay5jCisrKyBiL2J1aWx0aW4tc2VuZC1wYWNrLmMKQEAgLTIyNiw4ICsyMjYsNyBAQAogCQlpZiAoYXJncy52ZXJib3NlKQogCQkJZnByaW50ZihzdGRlcnIsICJ1cGRhdGluZyBsb2NhbCB0cmFja2luZyByZWYgJyVzJ1xuIiwgcnMuZHN0KTsKIAkJaWYgKHJlZi0+ZGVsZXRpb24pIHsKLQkJCWlmIChkZWxldGVfcmVmKHJzLmRzdCwgTlVMTCkpCi0JCQkJZXJyb3IoIkZhaWxlZCB0byBkZWxldGUiKTsKKwkJCWRlbGV0ZV9yZWYocnMuZHN0LCBOVUxMKTsKIAkJfSBlbHNlCiAJCQl1cGRhdGVfcmVmKCJ1cGRhdGUgYnkgcHVzaCIsIHJzLmRzdCwKIAkJCQkJcmVmLT5uZXdfc2hhMSwgTlVMTCwgMCwgMCk7CkBAIC01MzcsOSArNTM2LDE3IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnJfaGVhZHM7IGkrKykgeworCQljb25zdCBjaGFyICpsb2NhbCA9IGhlYWRzW2ldOwogCQljb25zdCBjaGFyICpyZW1vdGUgPSBzdHJyY2hyKGhlYWRzW2ldLCAnOicpOwogCi0JCXJlbW90ZSA9IHJlbW90ZSA/IChyZW1vdGUgKyAxKSA6IGhlYWRzW2ldOworCQlpZiAoKmxvY2FsID09ICcrJykKKwkJCWxvY2FsKys7CisKKwkJLyogQSBtYXRjaGluZyByZWZzcGVjIGlzIG9rYXkuICAqLworCQlpZiAocmVtb3RlID09IGxvY2FsICYmIHJlbW90ZVsxXSA9PSAnXDAnKQorCQkJY29udGludWU7CisKKwkJcmVtb3RlID0gcmVtb3RlID8gKHJlbW90ZSArIDEpIDogbG9jYWw7CiAJCXN3aXRjaCAoY2hlY2tfcmVmX2Zvcm1hdChyZW1vdGUpKSB7CiAJCWNhc2UgMDogLyogb2sgKi8KIAkJY2FzZSBDSEVDS19SRUZfRk9STUFUX09ORUxFVkVMOgpkaWZmIC0tZ2l0IGEvYnVpbHRpbi1zaG93LWJyYW5jaC5jIGIvYnVpbHRpbi1zaG93LWJyYW5jaC5jCmluZGV4IGEzODMzMjMuLjkzMDQ3ZjUgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tc2hvdy1icmFuY2guYworKysgYi9idWlsdGluLXNob3ctYnJhbmNoLmMKQEAgLTUzMyw3ICs1MzMsNyBAQAogCWRpZSgiYmFkIHNoYTEgcmVmZXJlbmNlICVzIiwgYXYpOwogfQogCi1zdGF0aWMgaW50IGdpdF9zaG93X2JyYW5jaF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3N0YXRpYyBpbnQgZ2l0X3Nob3dfYnJhbmNoX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKIHsKIAlpZiAoIXN0cmNtcCh2YXIsICJzaG93YnJhbmNoLmRlZmF1bHQiKSkgewogCQlpZiAoIXZhbHVlKQpAQCAtNTQ3LDcgKzU0Nyw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSk7CisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CiB9CiAKIHN0YXRpYyBpbnQgb21pdF9pbl9kZW5zZShzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVjdCBjb21taXQgKipyZXYsIGludCBuKQpAQCAtNjExLDcgKzYxMSw3IEBACiAJaW50IHJlZmxvZyA9IDA7CiAJY29uc3QgY2hhciAqcmVmbG9nX2Jhc2UgPSBOVUxMOwogCi0JZ2l0X2NvbmZpZyhnaXRfc2hvd19icmFuY2hfY29uZmlnKTsKKwlnaXRfY29uZmlnKGdpdF9zaG93X2JyYW5jaF9jb25maWcsIE5VTEwpOwogCiAJLyogSWYgbm90aGluZyBpcyBzcGVjaWZpZWQsIHRyeSB0aGUgZGVmYXVsdCBmaXJzdCAqLwogCWlmIChhYyA9PSAxICYmIGRlZmF1bHRfbnVtKSB7CmRpZmYgLS1naXQgYS9idWlsdGluLXN5bWJvbGljLXJlZi5jIGIvYnVpbHRpbi1zeW1ib2xpYy1yZWYuYwppbmRleCBkMzM5ODJiLi5iNDliZGI2IDEwMDY0NAotLS0gYS9idWlsdGluLXN5bWJvbGljLXJlZi5jCisrKyBiL2J1aWx0aW4tc3ltYm9saWMtcmVmLmMKQEAgLTM1LDcgKzM1LDcgQEAKIAkJT1BUX0VORCgpLAogCX07CiAKLQlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZyk7CisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOwogCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGdpdF9zeW1ib2xpY19yZWZfdXNhZ2UsIDApOwogCWlmIChtc2cgJiYhKm1zZykKIAkJZGllKCJSZWZ1c2luZyB0byBwZXJmb3JtIHVwZGF0ZSB3aXRoIGVtcHR5IG1lc3NhZ2UiKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tdGFnLmMgYi9idWlsdGluLXRhZy5jCmluZGV4IDEyOWZmNTcuLjNiZDAxOWMgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tdGFnLmMKKysrIGIvYnVpbHRpbi10YWcuYwpAQCAtMjU2LDE2ICsyNTYsMTYgQEAKIAkJZGllKCJzaWduaW5nIGtleSB2YWx1ZSB0b28gbG9uZyAoJS4xMHMuLi4pIiwgdmFsdWUpOwogfQogCi1zdGF0aWMgaW50IGdpdF90YWdfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCitzdGF0aWMgaW50IGdpdF90YWdfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQogewogCWlmICghc3RyY21wKHZhciwgInVzZXIuc2lnbmluZ2tleSIpKSB7CiAJCWlmICghdmFsdWUpCi0JCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFsdWUpOworCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CiAJCXNldF9zaWduaW5na2V5KHZhbHVlKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlKTsKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKIH0KIAogc3RhdGljIHZvaWQgd3JpdGVfdGFnX2JvZHkoaW50IGZkLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQpAQCAtMzg1LDcgKzM4NSw3IEBACiAKIAlpbnQgYW5ub3RhdGUgPSAwLCBzaWduID0gMCwgZm9yY2UgPSAwLCBsaW5lcyA9IDAsCiAJCWxpc3QgPSAwLCBkZWxldGUgPSAwLCB2ZXJpZnkgPSAwOwotCWNoYXIgKm1zZ2ZpbGUgPSBOVUxMLCAqa2V5aWQgPSBOVUxMOworCWNvbnN0IGNoYXIgKm1zZ2ZpbGUgPSBOVUxMLCAqa2V5aWQgPSBOVUxMOwogCXN0cnVjdCBtc2dfYXJnIG1zZyA9IHsgMCwgU1RSQlVGX0lOSVQgfTsKIAlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKIAkJT1BUX0JPT0xFQU4oJ2wnLCBOVUxMLCAmbGlzdCwgImxpc3QgdGFnIG5hbWVzIiksCkBAIC00MDgsOSArNDA4LDEwIEBACiAJCU9QVF9FTkQoKQogCX07CiAKLQlnaXRfY29uZmlnKGdpdF90YWdfY29uZmlnKTsKKwlnaXRfY29uZmlnKGdpdF90YWdfY29uZmlnLCBOVUxMKTsKIAogCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGdpdF90YWdfdXNhZ2UsIDApOworCW1zZ2ZpbGUgPSBwYXJzZV9vcHRpb25zX2ZpeF9maWxlbmFtZShwcmVmaXgsIG1zZ2ZpbGUpOwogCiAJaWYgKGtleWlkKSB7CiAJCXNpZ24gPSAxOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi11bnBhY2stb2JqZWN0cy5jIGIvYnVpbHRpbi11bnBhY2stb2JqZWN0cy5jCmluZGV4IDUwZTA3ZmEuLjg1MDQzZDEgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tdW5wYWNrLW9iamVjdHMuYworKysgYi9idWlsdGluLXVucGFjay1vYmplY3RzLmMKQEAgLTcsMTEgKzcsMTMgQEAKICNpbmNsdWRlICJjb21taXQuaCIKICNpbmNsdWRlICJ0YWcuaCIKICNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCiAjaW5jbHVkZSAicHJvZ3Jlc3MuaCIKICNpbmNsdWRlICJkZWNvcmF0ZS5oIgorI2luY2x1ZGUgImZzY2suaCIKIAotc3RhdGljIGludCBkcnlfcnVuLCBxdWlldCwgcmVjb3ZlciwgaGFzX2Vycm9yczsKLXN0YXRpYyBjb25zdCBjaGFyIHVucGFja191c2FnZVtdID0gImdpdC11bnBhY2stb2JqZWN0cyBbLW5dIFstcV0gWy1yXSA8IHBhY2stZmlsZSI7CitzdGF0aWMgaW50IGRyeV9ydW4sIHF1aWV0LCByZWNvdmVyLCBoYXNfZXJyb3JzLCBzdHJpY3Q7CitzdGF0aWMgY29uc3QgY2hhciB1bnBhY2tfdXNhZ2VbXSA9ICJnaXQtdW5wYWNrLW9iamVjdHMgWy1uXSBbLXFdIFstcl0gWy0tc3RyaWN0XSA8IHBhY2stZmlsZSI7CiAKIC8qIFdlIGFsd2F5cyByZWFkIGluIDRrQiBjaHVua3MuICovCiBzdGF0aWMgdW5zaWduZWQgY2hhciBidWZmZXJbNDA5Nl07CkBAIC0xOSw2ICsyMSwxMSBAQAogc3RhdGljIG9mZl90IGNvbnN1bWVkX2J5dGVzOwogc3RhdGljIFNIQV9DVFggY3R4OwogCisvKgorICogV2hlbiBydW5uaW5nIHVuZGVyIC0tc3RyaWN0IG1vZGUsIG9iamVjdHMgd2hvc2UgcmVhY2hhYmlsaXR5IGFyZQorICogc3VzcGVjdCBhcmUga2VwdCBpbiBjb3JlIHdpdGhvdXQgZ2V0dGluZyB3cml0dGVuIGluIHRoZSBvYmplY3QKKyAqIHN0b3JlLgorICovCiBzdHJ1Y3Qgb2JqX2J1ZmZlciB7CiAJY2hhciAqYnVmZmVyOwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKQEAgLTMxLDYgKzM4LDE2IEBACiAJcmV0dXJuIGxvb2t1cF9kZWNvcmF0aW9uKCZvYmpfZGVjb3JhdGUsIGJhc2UpOwogfQogCitzdGF0aWMgdm9pZCBhZGRfb2JqZWN0X2J1ZmZlcihzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QsIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXN0cnVjdCBvYmpfYnVmZmVyICpvYmo7CisJb2JqID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IG9ial9idWZmZXIpKTsKKwlvYmotPmJ1ZmZlciA9IGJ1ZmZlcjsKKwlvYmotPnNpemUgPSBzaXplOworCWlmIChhZGRfZGVjb3JhdGlvbigmb2JqX2RlY29yYXRlLCBvYmplY3QsIG9iaikpCisJCWRpZSgib2JqZWN0ICVzIHRyaWVkIHRvIGFkZCBidWZmZXIgdHdpY2UhIiwgc2hhMV90b19oZXgob2JqZWN0LT5zaGExKSk7Cit9CisKIC8qCiAgKiBNYWtlIHN1cmUgYXQgbGVhc3QgIm1pbiIgYnl0ZXMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgYnVmZmVyLCBhbmQKICAqIHJldHVybiB0aGUgcG9pbnRlciB0byB0aGUgYnVmZmVyLgpAQCAtMTM0LDE5ICsxNTEsMTEwIEBACiBzdHJ1Y3Qgb2JqX2luZm8gewogCW9mZl90IG9mZnNldDsKIAl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCXN0cnVjdCBvYmplY3QgKm9iajsKIH07CiAKKyNkZWZpbmUgRkxBR19PUEVOICgxdTw8MjApCisjZGVmaW5lIEZMQUdfV1JJVFRFTiAoMXU8PDIxKQorCiBzdGF0aWMgc3RydWN0IG9ial9pbmZvICpvYmpfbGlzdDsKK3Vuc2lnbmVkIG5yX29iamVjdHM7CisKKy8qCisgKiBDYWxsZWQgb25seSBmcm9tIGNoZWNrX29iamVjdCgpIGFmdGVyIGl0IHZlcmlmaWVkIHRoaXMgb2JqZWN0CisgKiBpcyBPay4KKyAqLworc3RhdGljIHZvaWQgd3JpdGVfY2FjaGVkX29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmopCit7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlzdHJ1Y3Qgb2JqX2J1ZmZlciAqb2JqX2J1ZiA9IGxvb2t1cF9vYmplY3RfYnVmZmVyKG9iaik7CisJaWYgKHdyaXRlX3NoYTFfZmlsZShvYmpfYnVmLT5idWZmZXIsIG9ial9idWYtPnNpemUsIHR5cGVuYW1lKG9iai0+dHlwZSksIHNoYTEpIDwgMCkKKwkJZGllKCJmYWlsZWQgdG8gd3JpdGUgb2JqZWN0ICVzIiwgc2hhMV90b19oZXgob2JqLT5zaGExKSk7CisJb2JqLT5mbGFncyB8PSBGTEFHX1dSSVRURU47Cit9CisKKy8qCisgKiBBdCB0aGUgdmVyeSBlbmQgb2YgdGhlIHByb2Nlc3NpbmcsIHdyaXRlX3Jlc3QoKSBzY2FucyB0aGUgb2JqZWN0cworICogdGhhdCBoYXZlIHJlYWNoYWJpbGl0eSByZXF1aXJlbWVudHMgYW5kIGNhbGxzIHRoaXMgZnVuY3Rpb24uCisgKiBWZXJpZnkgaXRzIHJlYWNoYWJpbGl0eSBhbmQgdmFsaWRpdHkgcmVjdXJzaXZlbHkgYW5kIHdyaXRlIGl0IG91dC4KKyAqLworc3RhdGljIGludCBjaGVja19vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqLCBpbnQgdHlwZSwgdm9pZCAqZGF0YSkKK3sKKwlpZiAoIW9iaikKKwkJcmV0dXJuIDA7CisKKwlpZiAob2JqLT5mbGFncyAmIEZMQUdfV1JJVFRFTikKKwkJcmV0dXJuIDE7CisKKwlpZiAodHlwZSAhPSBPQkpfQU5ZICYmIG9iai0+dHlwZSAhPSB0eXBlKQorCQlkaWUoIm9iamVjdCB0eXBlIG1pc21hdGNoIik7CisKKwlpZiAoIShvYmotPmZsYWdzICYgRkxBR19PUEVOKSkgeworCQl1bnNpZ25lZCBsb25nIHNpemU7CisJCWludCB0eXBlID0gc2hhMV9vYmplY3RfaW5mbyhvYmotPnNoYTEsICZzaXplKTsKKwkJaWYgKHR5cGUgIT0gb2JqLT50eXBlIHx8IHR5cGUgPD0gMCkKKwkJCWRpZSgib2JqZWN0IG9mIHVuZXhwZWN0ZWQgdHlwZSIpOworCQlvYmotPmZsYWdzIHw9IEZMQUdfV1JJVFRFTjsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKGZzY2tfb2JqZWN0KG9iaiwgMSwgZnNja19lcnJvcl9mdW5jdGlvbikpCisJCWRpZSgiRXJyb3IgaW4gb2JqZWN0Iik7CisJaWYgKCFmc2NrX3dhbGsob2JqLCBjaGVja19vYmplY3QsIDApKQorCQlkaWUoIkVycm9yIG9uIHJlYWNoYWJsZSBvYmplY3RzIG9mICVzIiwgc2hhMV90b19oZXgob2JqLT5zaGExKSk7CisJd3JpdGVfY2FjaGVkX29iamVjdChvYmopOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9yZXN0KHZvaWQpCit7CisJdW5zaWduZWQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKQorCQljaGVja19vYmplY3Qob2JqX2xpc3RbaV0ub2JqLCBPQkpfQU5ZLCAwKTsKK30KIAogc3RhdGljIHZvaWQgYWRkZWRfb2JqZWN0KHVuc2lnbmVkIG5yLCBlbnVtIG9iamVjdF90eXBlIHR5cGUsCiAJCQkgdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplKTsKIAorLyoKKyAqIFdyaXRlIG91dCBuci10aCBvYmplY3QgZnJvbSB0aGUgbGlzdCwgbm93IHdlIGtub3cgdGhlIGNvbnRlbnRzCisgKiBvZiBpdC4gIFVuZGVyIC0tc3RyaWN0LCB0aGlzIGJ1ZmZlcnMgc3RydWN0dXJlZCBvYmplY3RzIGluLWNvcmUsCisgKiB0byBiZSBjaGVja2VkIGF0IHRoZSBlbmQuCisgKi8KIHN0YXRpYyB2b2lkIHdyaXRlX29iamVjdCh1bnNpZ25lZCBuciwgZW51bSBvYmplY3RfdHlwZSB0eXBlLAogCQkJIHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplKQogewotCWlmICh3cml0ZV9zaGExX2ZpbGUoYnVmLCBzaXplLCB0eXBlbmFtZSh0eXBlKSwgb2JqX2xpc3RbbnJdLnNoYTEpIDwgMCkKLQkJZGllKCJmYWlsZWQgdG8gd3JpdGUgb2JqZWN0Iik7Ci0JYWRkZWRfb2JqZWN0KG5yLCB0eXBlLCBidWYsIHNpemUpOworCWlmICghc3RyaWN0KSB7CisJCWlmICh3cml0ZV9zaGExX2ZpbGUoYnVmLCBzaXplLCB0eXBlbmFtZSh0eXBlKSwgb2JqX2xpc3RbbnJdLnNoYTEpIDwgMCkKKwkJCWRpZSgiZmFpbGVkIHRvIHdyaXRlIG9iamVjdCIpOworCQlhZGRlZF9vYmplY3QobnIsIHR5cGUsIGJ1Ziwgc2l6ZSk7CisJCWZyZWUoYnVmKTsKKwkJb2JqX2xpc3RbbnJdLm9iaiA9IE5VTEw7CisJfSBlbHNlIGlmICh0eXBlID09IE9CSl9CTE9CKSB7CisJCXN0cnVjdCBibG9iICpibG9iOworCQlpZiAod3JpdGVfc2hhMV9maWxlKGJ1Ziwgc2l6ZSwgdHlwZW5hbWUodHlwZSksIG9ial9saXN0W25yXS5zaGExKSA8IDApCisJCQlkaWUoImZhaWxlZCB0byB3cml0ZSBvYmplY3QiKTsKKwkJYWRkZWRfb2JqZWN0KG5yLCB0eXBlLCBidWYsIHNpemUpOworCQlmcmVlKGJ1Zik7CisKKwkJYmxvYiA9IGxvb2t1cF9ibG9iKG9ial9saXN0W25yXS5zaGExKTsKKwkJaWYgKGJsb2IpCisJCQlibG9iLT5vYmplY3QuZmxhZ3MgfD0gRkxBR19XUklUVEVOOworCQllbHNlCisJCQlkaWUoImludmFsaWQgYmxvYiBvYmplY3QiKTsKKwkJb2JqX2xpc3RbbnJdLm9iaiA9IE5VTEw7CisJfSBlbHNlIHsKKwkJc3RydWN0IG9iamVjdCAqb2JqOworCQlpbnQgZWF0ZW47CisJCWhhc2hfc2hhMV9maWxlKGJ1Ziwgc2l6ZSwgdHlwZW5hbWUodHlwZSksIG9ial9saXN0W25yXS5zaGExKTsKKwkJYWRkZWRfb2JqZWN0KG5yLCB0eXBlLCBidWYsIHNpemUpOworCQlvYmogPSBwYXJzZV9vYmplY3RfYnVmZmVyKG9ial9saXN0W25yXS5zaGExLCB0eXBlLCBzaXplLCBidWYsICZlYXRlbik7CisJCWlmICghb2JqKQorCQkJZGllKCJpbnZhbGlkICVzIiwgdHlwZW5hbWUodHlwZSkpOworCQlhZGRfb2JqZWN0X2J1ZmZlcihvYmosIGJ1Ziwgc2l6ZSk7CisJCW9iai0+ZmxhZ3MgfD0gRkxBR19PUEVOOworCQlvYmpfbGlzdFtucl0ub2JqID0gb2JqOworCX0KIH0KIAogc3RhdGljIHZvaWQgcmVzb2x2ZV9kZWx0YSh1bnNpZ25lZCBuciwgZW51bSBvYmplY3RfdHlwZSB0eXBlLApAQCAtMTYzLDkgKzI3MSwxMiBAQAogCQlkaWUoImZhaWxlZCB0byBhcHBseSBkZWx0YSIpOwogCWZyZWUoZGVsdGEpOwogCXdyaXRlX29iamVjdChuciwgdHlwZSwgcmVzdWx0LCByZXN1bHRfc2l6ZSk7Ci0JZnJlZShyZXN1bHQpOwogfQogCisvKgorICogV2Ugbm93IGtub3cgdGhlIGNvbnRlbnRzIG9mIGFuIG9iamVjdCAod2hpY2ggaXMgbnItdGggaW4gdGhlIHBhY2spOworICogcmVzb2x2ZSBhbGwgdGhlIGRlbHRpZmllZCBvYmplY3RzIHRoYXQgYXJlIGJhc2VkIG9uIGl0LgorICovCiBzdGF0aWMgdm9pZCBhZGRlZF9vYmplY3QodW5zaWduZWQgbnIsIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwKIAkJCSB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CkBAIC0xOTMsNyArMzA0LDI0IEBACiAKIAlpZiAoIWRyeV9ydW4gJiYgYnVmKQogCQl3cml0ZV9vYmplY3QobnIsIHR5cGUsIGJ1Ziwgc2l6ZSk7Ci0JZnJlZShidWYpOworCWVsc2UKKwkJZnJlZShidWYpOworfQorCitzdGF0aWMgaW50IHJlc29sdmVfYWdhaW5zdF9oZWxkKHVuc2lnbmVkIG5yLCBjb25zdCB1bnNpZ25lZCBjaGFyICpiYXNlLAorCQkJCXZvaWQgKmRlbHRhX2RhdGEsIHVuc2lnbmVkIGxvbmcgZGVsdGFfc2l6ZSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisJc3RydWN0IG9ial9idWZmZXIgKm9ial9idWZmZXI7CisJb2JqID0gbG9va3VwX29iamVjdChiYXNlKTsKKwlpZiAoIW9iaikKKwkJcmV0dXJuIDA7CisJb2JqX2J1ZmZlciA9IGxvb2t1cF9vYmplY3RfYnVmZmVyKG9iaik7CisJaWYgKCFvYmpfYnVmZmVyKQorCQlyZXR1cm4gMDsKKwlyZXNvbHZlX2RlbHRhKG5yLCBvYmotPnR5cGUsIG9ial9idWZmZXItPmJ1ZmZlciwKKwkJICAgICAgb2JqX2J1ZmZlci0+c2l6ZSwgZGVsdGFfZGF0YSwgZGVsdGFfc2l6ZSk7CisJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyB2b2lkIHVucGFja19kZWx0YV9lbnRyeShlbnVtIG9iamVjdF90eXBlIHR5cGUsIHVuc2lnbmVkIGxvbmcgZGVsdGFfc2l6ZSwKQEAgLTIwMiw3ICszMzAsNiBAQAogCXZvaWQgKmRlbHRhX2RhdGEsICpiYXNlOwogCXVuc2lnbmVkIGxvbmcgYmFzZV9zaXplOwogCXVuc2lnbmVkIGNoYXIgYmFzZV9zaGExWzIwXTsKLQlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CiAKIAlpZiAodHlwZSA9PSBPQkpfUkVGX0RFTFRBKSB7CiAJCWhhc2hjcHkoYmFzZV9zaGExLCBmaWxsKDIwKSk7CkBAIC0yMTIsNyArMzM5LDEzIEBACiAJCQlmcmVlKGRlbHRhX2RhdGEpOwogCQkJcmV0dXJuOwogCQl9Ci0JCWlmICghaGFzX3NoYTFfZmlsZShiYXNlX3NoYTEpKSB7CisJCWlmIChoYXNfc2hhMV9maWxlKGJhc2Vfc2hhMSkpCisJCQk7IC8qIE9rIHdlIGhhdmUgdGhpcyBvbmUgKi8KKwkJZWxzZSBpZiAocmVzb2x2ZV9hZ2FpbnN0X2hlbGQobnIsIGJhc2Vfc2hhMSwKKwkJCQkJICAgICAgZGVsdGFfZGF0YSwgZGVsdGFfc2l6ZSkpCisJCQlyZXR1cm47IC8qIHdlIGFyZSBkb25lICovCisJCWVsc2UgeworCQkJLyogY2Fubm90IHJlc29sdmUgeWV0IC0tLSBxdWV1ZSBpdCAqLwogCQkJaGFzaGNweShvYmpfbGlzdFtucl0uc2hhMSwgbnVsbF9zaGExKTsKIAkJCWFkZF9kZWx0YV90b19saXN0KG5yLCBiYXNlX3NoYTEsIDAsIGRlbHRhX2RhdGEsIGRlbHRhX3NpemUpOwogCQkJcmV0dXJuOwpAQCAtMjU4LDIyICszOTEsMTggQEAKIAkJCX0KIAkJfQogCQlpZiAoIWJhc2VfZm91bmQpIHsKLQkJCS8qIFRoZSBkZWx0YSBiYXNlIG9iamVjdCBpcyBpdHNlbGYgYSBkZWx0YSB0aGF0Ci0JCQkgICBoYXMgbm90IGJlZW4JcmVzb2x2ZWQgeWV0LiAqLworCQkJLyoKKwkJCSAqIFRoZSBkZWx0YSBiYXNlIG9iamVjdCBpcyBpdHNlbGYgYSBkZWx0YSB0aGF0CisJCQkgKiBoYXMgbm90IGJlZW4gcmVzb2x2ZWQgeWV0LgorCQkJICovCiAJCQloYXNoY3B5KG9ial9saXN0W25yXS5zaGExLCBudWxsX3NoYTEpOwogCQkJYWRkX2RlbHRhX3RvX2xpc3QobnIsIG51bGxfc2hhMSwgYmFzZV9vZmZzZXQsIGRlbHRhX2RhdGEsIGRlbHRhX3NpemUpOwogCQkJcmV0dXJuOwogCQl9CiAJfQogCi0Jb2JqID0gbG9va3VwX29iamVjdChiYXNlX3NoYTEpOwotCWlmIChvYmopIHsKLQkJc3RydWN0IG9ial9idWZmZXIgKm9ial9idWYgPSBsb29rdXBfb2JqZWN0X2J1ZmZlcihvYmopOwotCQlpZiAob2JqX2J1ZikgewotCQkJcmVzb2x2ZV9kZWx0YShuciwgb2JqLT50eXBlLCBvYmpfYnVmLT5idWZmZXIsIG9ial9idWYtPnNpemUsIGRlbHRhX2RhdGEsIGRlbHRhX3NpemUpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQorCWlmIChyZXNvbHZlX2FnYWluc3RfaGVsZChuciwgYmFzZV9zaGExLCBkZWx0YV9kYXRhLCBkZWx0YV9zaXplKSkKKwkJcmV0dXJuOwogCiAJYmFzZSA9IHJlYWRfc2hhMV9maWxlKGJhc2Vfc2hhMSwgJnR5cGUsICZiYXNlX3NpemUpOwogCWlmICghYmFzZSkgewpAQCAtMzM2LDcgKzQ2NSw4IEBACiAJaW50IGk7CiAJc3RydWN0IHByb2dyZXNzICpwcm9ncmVzcyA9IE5VTEw7CiAJc3RydWN0IHBhY2tfaGVhZGVyICpoZHIgPSBmaWxsKHNpemVvZihzdHJ1Y3QgcGFja19oZWFkZXIpKTsKLQl1bnNpZ25lZCBucl9vYmplY3RzID0gbnRvaGwoaGRyLT5oZHJfZW50cmllcyk7CisKKwlucl9vYmplY3RzID0gbnRvaGwoaGRyLT5oZHJfZW50cmllcyk7CiAKIAlpZiAobnRvaGwoaGRyLT5oZHJfc2lnbmF0dXJlKSAhPSBQQUNLX1NJR05BVFVSRSkKIAkJZGllKCJiYWQgcGFjayBmaWxlIik7CkBAIC0zNDcsNiArNDc3LDcgQEAKIAlpZiAoIXF1aWV0KQogCQlwcm9ncmVzcyA9IHN0YXJ0X3Byb2dyZXNzKCJVbnBhY2tpbmcgb2JqZWN0cyIsIG5yX29iamVjdHMpOwogCW9ial9saXN0ID0geG1hbGxvYyhucl9vYmplY3RzICogc2l6ZW9mKCpvYmpfbGlzdCkpOworCW1lbXNldChvYmpfbGlzdCwgMCwgbnJfb2JqZWN0cyAqIHNpemVvZigqb2JqX2xpc3QpKTsKIAlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKSB7CiAJCXVucGFja19vbmUoaSk7CiAJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsIGkgKyAxKTsKQEAgLTM2Miw3ICs0OTMsNyBAQAogCWludCBpOwogCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CiAKLQlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZyk7CisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOwogCiAJcXVpZXQgPSAhaXNhdHR5KDIpOwogCkBAIC0zODIsNiArNTEzLDEwIEBACiAJCQkJcmVjb3ZlciA9IDE7CiAJCQkJY29udGludWU7CiAJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLXN0cmljdCIpKSB7CisJCQkJc3RyaWN0ID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KIAkJCWlmICghcHJlZml4Y21wKGFyZywgIi0tcGFja19oZWFkZXI9IikpIHsKIAkJCQlzdHJ1Y3QgcGFja19oZWFkZXIgKmhkcjsKIAkJCQljaGFyICpjOwpAQCAtNDA3LDYgKzU0Miw4IEBACiAJdW5wYWNrX2FsbCgpOwogCVNIQTFfVXBkYXRlKCZjdHgsIGJ1ZmZlciwgb2Zmc2V0KTsKIAlTSEExX0ZpbmFsKHNoYTEsICZjdHgpOworCWlmIChzdHJpY3QpCisJCXdyaXRlX3Jlc3QoKTsKIAlpZiAoaGFzaGNtcChmaWxsKDIwKSwgc2hhMSkpCiAJCWRpZSgiZmluYWwgc2hhMSBkaWQgbm90IG1hdGNoIik7CiAJdXNlKDIwKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tdXBkYXRlLWluZGV4LmMgYi9idWlsdGluLXVwZGF0ZS1pbmRleC5jCmluZGV4IGE4Nzk1ZDMuLjllMGQ3YWIgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4tdXBkYXRlLWluZGV4LmMKKysrIGIvYnVpbHRpbi11cGRhdGUtaW5kZXguYwpAQCAtNTY3LDcgKzU2Nyw3IEBACiAJaW50IGxvY2tfZXJyb3IgPSAwOwogCXN0cnVjdCBsb2NrX2ZpbGUgKmxvY2tfZmlsZTsKIAotCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnKTsKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CiAKIAkvKiBXZSBjYW4ndCBmcmVlIHRoaXMgbWVtb3J5LCBpdCBiZWNvbWVzIHBhcnQgb2YgYSBsaW5rZWQgbGlzdCBwYXJzZWQgYXRleGl0KCkgKi8KIAlsb2NrX2ZpbGUgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbG9ja19maWxlKSk7CkBAIC01OTMsNiArNTkzLDEwIEBACiAJCQkJcmVmcmVzaF9mbGFncyB8PSBSRUZSRVNIX1FVSUVUOwogCQkJCWNvbnRpbnVlOwogCQkJfQorCQkJaWYgKCFzdHJjbXAocGF0aCwgIi0taWdub3JlLXN1Ym1vZHVsZXMiKSkgeworCQkJCXJlZnJlc2hfZmxhZ3MgfD0gUkVGUkVTSF9JR05PUkVfU1VCTU9EVUxFUzsKKwkJCQljb250aW51ZTsKKwkJCX0KIAkJCWlmICghc3RyY21wKHBhdGgsICItLWFkZCIpKSB7CiAJCQkJYWxsb3dfYWRkID0gMTsKIAkJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tdXBkYXRlLXJlZi5jIGIvYnVpbHRpbi11cGRhdGUtcmVmLmMKaW5kZXggZTkwNzM3Yy4uOTNjMTI3MSAxMDA2NDQKLS0tIGEvYnVpbHRpbi11cGRhdGUtcmVmLmMKKysrIGIvYnVpbHRpbi11cGRhdGUtcmVmLmMKQEAgLTIyLDcgKzIyLDcgQEAKIAkJT1BUX0VORCgpLAogCX07CiAKLQlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZyk7CisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOwogCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGdpdF91cGRhdGVfcmVmX3VzYWdlLCAwKTsKIAlpZiAobXNnICYmICEqbXNnKQogCQlkaWUoIlJlZnVzaW5nIHRvIHBlcmZvcm0gdXBkYXRlIHdpdGggZW1wdHkgbWVzc2FnZS4iKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4tdXBsb2FkLWFyY2hpdmUuYyBiL2J1aWx0aW4tdXBsb2FkLWFyY2hpdmUuYwppbmRleCA0OGFlMDllLi4zNzE0MDBkIDEwMDY0NAotLS0gYS9idWlsdGluLXVwbG9hZC1hcmNoaXZlLmMKKysrIGIvYnVpbHRpbi11cGxvYWQtYXJjaGl2ZS5jCkBAIC0zMCw3ICszMCw3IEBACiAJaWYgKGFyZ2MgIT0gMikKIAkJdXNhZ2UodXBsb2FkX2FyY2hpdmVfdXNhZ2UpOwogCi0JaWYgKHN0cmxlbihhcmd2WzFdKSA+IHNpemVvZihidWYpKQorCWlmIChzdHJsZW4oYXJndlsxXSkgKyAxID4gc2l6ZW9mKGJ1ZikpCiAJCWRpZSgiaW5zYW5lbHkgbG9uZyByZXBvc2l0b3J5IG5hbWUiKTsKIAogCXN0cmNweShidWYsIGFyZ3ZbMV0pOyAvKiBlbnRlci1yZXBvIHNtdWRnZXMgaXRzIGFyZ3VtZW50ICovCmRpZmYgLS1naXQgYS9idWlsdGluLXZlcmlmeS1wYWNrLmMgYi9idWlsdGluLXZlcmlmeS1wYWNrLmMKaW5kZXggNDk1OGJiYi4uNGM1MTVhMCAxMDA2NDQKLS0tIGEvYnVpbHRpbi12ZXJpZnktcGFjay5jCisrKyBiL2J1aWx0aW4tdmVyaWZ5LXBhY2suYwpAQCAtNTUsNyArNTUsNyBAQAogCWludCBub19tb3JlX29wdGlvbnMgPSAwOwogCWludCBub3RoaW5nX2RvbmUgPSAxOwogCi0JZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcpOworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKIAl3aGlsZSAoMSA8IGFyZ2MpIHsKIAkJaWYgKCFub19tb3JlX29wdGlvbnMgJiYgYXJndlsxXVswXSA9PSAnLScpIHsKIAkJCWlmICghc3RyY21wKCItdiIsIGFyZ3ZbMV0pKQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi12ZXJpZnktdGFnLmMgYi9idWlsdGluLXZlcmlmeS10YWcuYwppbmRleCBkYjgxNDk2Li45MmVhYTg5IDEwMDY0NAotLS0gYS9idWlsdGluLXZlcmlmeS10YWcuYworKysgYi9idWlsdGluLXZlcmlmeS10YWcuYwpAQCAtOTAsNyArOTAsNyBAQAogewogCWludCBpID0gMSwgdmVyYm9zZSA9IDAsIGhhZF9lcnJvciA9IDA7CiAKLQlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZyk7CisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOwogCiAJaWYgKGFyZ2MgPT0gMSkKIAkJdXNhZ2UoYnVpbHRpbl92ZXJpZnlfdGFnX3VzYWdlKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4td3JpdGUtdHJlZS5jIGIvYnVpbHRpbi13cml0ZS10cmVlLmMKaW5kZXggZTgzOGQwMS4uYzIxODc5OSAxMDA2NDQKLS0tIGEvYnVpbHRpbi13cml0ZS10cmVlLmMKKysrIGIvYnVpbHRpbi13cml0ZS10cmVlLmMKQEAgLTE4LDcgKzE4LDcgQEAKIAl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOwogCWNvbnN0IGNoYXIgKm1lID0gImdpdC13cml0ZS10cmVlIjsKIAotCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnKTsKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CiAJd2hpbGUgKDEgPCBhcmdjKSB7CiAJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbMV07CiAJCWlmICghc3RyY21wKGFyZywgIi0tbWlzc2luZy1vayIpKQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi5oIGIvYnVpbHRpbi5oCmluZGV4IDk1MTI2ZmQuLmI0NjBiMmQgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4uaAorKysgYi9idWlsdGluLmgKQEAgLTUsMTAgKzUsMTIgQEAKIAogZXh0ZXJuIGNvbnN0IGNoYXIgZ2l0X3ZlcnNpb25fc3RyaW5nW107CiBleHRlcm4gY29uc3QgY2hhciBnaXRfdXNhZ2Vfc3RyaW5nW107CitleHRlcm4gY29uc3QgY2hhciBnaXRfbW9yZV9pbmZvX3N0cmluZ1tdOwogCiBleHRlcm4gdm9pZCBsaXN0X2NvbW1vbl9jbWRzX2hlbHAodm9pZCk7CiBleHRlcm4gdm9pZCBoZWxwX3Vua25vd25fY21kKGNvbnN0IGNoYXIgKmNtZCk7CiBleHRlcm4gdm9pZCBwcnVuZV9wYWNrZWRfb2JqZWN0cyhpbnQpOworZXh0ZXJuIGludCByZWFkX2xpbmVfd2l0aF9udWwoY2hhciAqYnVmLCBpbnQgc2l6ZSwgRklMRSAqZmlsZSk7CiAKIGV4dGVybiBpbnQgY21kX2FkZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9hbm5vdGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CkBAIC0yNCw2ICsyNiw3IEBACiBleHRlcm4gaW50IGNtZF9jaGVja19yZWZfZm9ybWF0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKIGV4dGVybiBpbnQgY21kX2NoZXJyeShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9jaGVycnlfcGljayhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9jbG9uZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9jbGVhbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CiBleHRlcm4gaW50IGNtZF9jb21taXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwogZXh0ZXJuIGludCBjbWRfY29tbWl0X3RyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOwpkaWZmIC0tZ2l0IGEvY2FjaGUuaCBiL2NhY2hlLmgKaW5kZXggMmExZTdlYy4uODgyMjY1MSAxMDA2NDQKLS0tIGEvY2FjaGUuaAorKysgYi9jYWNoZS5oCkBAIC0xMzMsNiArMTMzLDcgQEAKICNkZWZpbmUgQ0VfVVBEQVRFICAgICgweDEwMDAwKQogI2RlZmluZSBDRV9SRU1PVkUgICAgKDB4MjAwMDApCiAjZGVmaW5lIENFX1VQVE9EQVRFICAoMHg0MDAwMCkKKyNkZWZpbmUgQ0VfQURERUQgICAgICgweDgwMDAwKQogCiAjZGVmaW5lIENFX0hBU0hFRCAgICAoMHgxMDAwMDApCiAjZGVmaW5lIENFX1VOSEFTSEVEICAoMHgyMDAwMDApCkBAIC0xNTMsMjAgKzE1NCw2IEBACiAJZHN0LT5jZV9mbGFncyA9IChkc3QtPmNlX2ZsYWdzICYgfkNFX1NUQVRFX01BU0spIHwgc3RhdGU7CiB9CiAKLS8qCi0gKiBXZSBkb24ndCBhY3R1YWxseSAqcmVtb3ZlKiBpdCwgd2UgY2FuIGp1c3QgbWFyayBpdCBpbnZhbGlkIHNvIHRoYXQKLSAqIHdlIHdvbid0IGZpbmQgaXQgaW4gbG9va3Vwcy4KLSAqCi0gKiBOb3Qgb25seSB3b3VsZCB3ZSBoYXZlIHRvIHNlYXJjaCB0aGUgbGlzdHMgKHNpbXBsZSBlbm91Z2gpLCBidXQKLSAqIHdlJ2QgYWxzbyBoYXZlIHRvIHJlaGFzaCBvdGhlciBoYXNoIGJ1Y2tldHMgaW4gY2FzZSB0aGlzIG1ha2VzIHRoZQotICogaGFzaCBidWNrZXQgZW1wdHkgKGNvbW1vbikuIFNvIGl0J3MgbXVjaCBiZXR0ZXIgdG8ganVzdCBtYXJrCi0gKiBpdC4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9pbmRleF9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQotewotCWNlLT5jZV9mbGFncyB8PSBDRV9VTkhBU0hFRDsKLX0KLQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBjcmVhdGVfY2VfZmxhZ3Moc2l6ZV90IGxlbiwgdW5zaWduZWQgc3RhZ2UpCiB7CiAJaWYgKGxlbiA+PSBDRV9OQU1FTUFTSykKQEAgLTI0MSw2ICsyMjgsMjMgQEAKIAogZXh0ZXJuIHN0cnVjdCBpbmRleF9zdGF0ZSB0aGVfaW5kZXg7CiAKKy8qIE5hbWUgaGFzaGluZyAqLworZXh0ZXJuIHZvaWQgYWRkX25hbWVfaGFzaChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSk7CisvKgorICogV2UgZG9uJ3QgYWN0dWFsbHkgKnJlbW92ZSogaXQsIHdlIGNhbiBqdXN0IG1hcmsgaXQgaW52YWxpZCBzbyB0aGF0CisgKiB3ZSB3b24ndCBmaW5kIGl0IGluIGxvb2t1cHMuCisgKgorICogTm90IG9ubHkgd291bGQgd2UgaGF2ZSB0byBzZWFyY2ggdGhlIGxpc3RzIChzaW1wbGUgZW5vdWdoKSwgYnV0CisgKiB3ZSdkIGFsc28gaGF2ZSB0byByZWhhc2ggb3RoZXIgaGFzaCBidWNrZXRzIGluIGNhc2UgdGhpcyBtYWtlcyB0aGUKKyAqIGhhc2ggYnVja2V0IGVtcHR5IChjb21tb24pLiBTbyBpdCdzIG11Y2ggYmV0dGVyIHRvIGp1c3QgbWFyaworICogaXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfbmFtZV9oYXNoKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCit7CisJY2UtPmNlX2ZsYWdzIHw9IENFX1VOSEFTSEVEOworfQorCisKICNpZm5kZWYgTk9fVEhFX0lOREVYX0NPTVBBVElCSUxJVFlfTUFDUk9TCiAjZGVmaW5lIGFjdGl2ZV9jYWNoZSAodGhlX2luZGV4LmNhY2hlKQogI2RlZmluZSBhY3RpdmVfbnIgKHRoZV9pbmRleC5jYWNoZV9ucikKQEAgLTI1NywxMSArMjYxLDEyIEBACiAjZGVmaW5lIGFkZF9jYWNoZV9lbnRyeShjZSwgb3B0aW9uKSBhZGRfaW5kZXhfZW50cnkoJnRoZV9pbmRleCwgKGNlKSwgKG9wdGlvbikpCiAjZGVmaW5lIHJlbW92ZV9jYWNoZV9lbnRyeV9hdChwb3MpIHJlbW92ZV9pbmRleF9lbnRyeV9hdCgmdGhlX2luZGV4LCAocG9zKSkKICNkZWZpbmUgcmVtb3ZlX2ZpbGVfZnJvbV9jYWNoZShwYXRoKSByZW1vdmVfZmlsZV9mcm9tX2luZGV4KCZ0aGVfaW5kZXgsIChwYXRoKSkKLSNkZWZpbmUgYWRkX2ZpbGVfdG9fY2FjaGUocGF0aCwgdmVyYm9zZSkgYWRkX2ZpbGVfdG9faW5kZXgoJnRoZV9pbmRleCwgKHBhdGgpLCAodmVyYm9zZSkpCisjZGVmaW5lIGFkZF90b19jYWNoZShwYXRoLCBzdCwgZmxhZ3MpIGFkZF90b19pbmRleCgmdGhlX2luZGV4LCAocGF0aCksIChzdCksIChmbGFncykpCisjZGVmaW5lIGFkZF9maWxlX3RvX2NhY2hlKHBhdGgsIGZsYWdzKSBhZGRfZmlsZV90b19pbmRleCgmdGhlX2luZGV4LCAocGF0aCksIChmbGFncykpCiAjZGVmaW5lIHJlZnJlc2hfY2FjaGUoZmxhZ3MpIHJlZnJlc2hfaW5kZXgoJnRoZV9pbmRleCwgKGZsYWdzKSwgTlVMTCwgTlVMTCkKICNkZWZpbmUgY2VfbWF0Y2hfc3RhdChjZSwgc3QsIG9wdGlvbnMpIGllX21hdGNoX3N0YXQoJnRoZV9pbmRleCwgKGNlKSwgKHN0KSwgKG9wdGlvbnMpKQogI2RlZmluZSBjZV9tb2RpZmllZChjZSwgc3QsIG9wdGlvbnMpIGllX21vZGlmaWVkKCZ0aGVfaW5kZXgsIChjZSksIChzdCksIChvcHRpb25zKSkKLSNkZWZpbmUgY2FjaGVfbmFtZV9leGlzdHMobmFtZSwgbmFtZWxlbikgaW5kZXhfbmFtZV9leGlzdHMoJnRoZV9pbmRleCwgKG5hbWUpLCAobmFtZWxlbikpCisjZGVmaW5lIGNhY2hlX25hbWVfZXhpc3RzKG5hbWUsIG5hbWVsZW4sIGlnbmNhc2UpIGluZGV4X25hbWVfZXhpc3RzKCZ0aGVfaW5kZXgsIChuYW1lKSwgKG5hbWVsZW4pLCAoaWduY2FzZSkpCiAjZW5kaWYKIAogZW51bSBvYmplY3RfdHlwZSB7CkBAIC0zMTEsNiArMzE2LDggQEAKIGV4dGVybiBjaGFyICpnZXRfZ3JhZnRfZmlsZSh2b2lkKTsKIGV4dGVybiBpbnQgc2V0X2dpdF9kaXIoY29uc3QgY2hhciAqcGF0aCk7CiBleHRlcm4gY29uc3QgY2hhciAqZ2V0X2dpdF93b3JrX3RyZWUodm9pZCk7CitleHRlcm4gY29uc3QgY2hhciAqcmVhZF9naXRmaWxlX2dlbnRseShjb25zdCBjaGFyICpwYXRoKTsKK2V4dGVybiB2b2lkIHNldF9naXRfd29ya190cmVlKGNvbnN0IGNoYXIgKnRyZWUpOwogCiAjZGVmaW5lIEFMVEVSTkFURV9EQl9FTlZJUk9OTUVOVCAiR0lUX0FMVEVSTkFURV9PQkpFQ1RfRElSRUNUT1JJRVMiCiAKQEAgLTMyMyw2ICszMzAsMTAgQEAKIGV4dGVybiB2b2lkIHZlcmlmeV9maWxlbmFtZShjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKm5hbWUpOwogZXh0ZXJuIHZvaWQgdmVyaWZ5X25vbl9maWxlbmFtZShjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKm5hbWUpOwogCisjZGVmaW5lIElOSVRfREJfUVVJRVQgMHgwMDAxCisKK2V4dGVybiBpbnQgaW5pdF9kYihjb25zdCBjaGFyICp0ZW1wbGF0ZV9kaXIsIHVuc2lnbmVkIGludCBmbGFncyk7CisKICNkZWZpbmUgYWxsb2NfbnIoeCkgKCgoeCkrMTYpKjMvMikKIAogLyoKQEAgLTM1MCw3ICszNjEsNyBAQAogZXh0ZXJuIGludCBkaXNjYXJkX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqKTsKIGV4dGVybiBpbnQgdW5tZXJnZWRfaW5kZXgoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICopOwogZXh0ZXJuIGludCB2ZXJpZnlfcGF0aChjb25zdCBjaGFyICpwYXRoKTsKLWV4dGVybiBpbnQgaW5kZXhfbmFtZV9leGlzdHMoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuKTsKK2V4dGVybiBzdHJ1Y3QgY2FjaGVfZW50cnkgKmluZGV4X25hbWVfZXhpc3RzKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwgaW50IGlnbmNhc2UpOwogZXh0ZXJuIGludCBpbmRleF9uYW1lX3Bvcyhjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4pOwogI2RlZmluZSBBRERfQ0FDSEVfT0tfVE9fQUREIDEJCS8qIE9rIHRvIGFkZCAqLwogI2RlZmluZSBBRERfQ0FDSEVfT0tfVE9fUkVQTEFDRSAyCS8qIE9rIHRvIHJlcGxhY2UgZmlsZS9kaXJlY3RvcnkgKi8KQEAgLTM2MCw3ICszNzEsMTEgQEAKIGV4dGVybiBzdHJ1Y3QgY2FjaGVfZW50cnkgKnJlZnJlc2hfY2FjaGVfZW50cnkoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgaW50IHJlYWxseSk7CiBleHRlcm4gaW50IHJlbW92ZV9pbmRleF9lbnRyeV9hdChzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgaW50IHBvcyk7CiBleHRlcm4gaW50IHJlbW92ZV9maWxlX2Zyb21faW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICosIGNvbnN0IGNoYXIgKnBhdGgpOwotZXh0ZXJuIGludCBhZGRfZmlsZV90b19pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgY29uc3QgY2hhciAqcGF0aCwgaW50IHZlcmJvc2UpOworI2RlZmluZSBBRERfQ0FDSEVfVkVSQk9TRSAxCisjZGVmaW5lIEFERF9DQUNIRV9QUkVURU5EIDIKKyNkZWZpbmUgQUREX0NBQ0hFX0lHTk9SRV9FUlJPUlMJNAorZXh0ZXJuIGludCBhZGRfdG9faW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICosIGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBzdGF0ICosIGludCBmbGFncyk7CitleHRlcm4gaW50IGFkZF9maWxlX3RvX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgZmxhZ3MpOwogZXh0ZXJuIHN0cnVjdCBjYWNoZV9lbnRyeSAqbWFrZV9jYWNoZV9lbnRyeSh1bnNpZ25lZCBpbnQgbW9kZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3QgY2hhciAqcGF0aCwgaW50IHN0YWdlLCBpbnQgcmVmcmVzaCk7CiBleHRlcm4gaW50IGNlX3NhbWVfbmFtZShzdHJ1Y3QgY2FjaGVfZW50cnkgKmEsIHN0cnVjdCBjYWNoZV9lbnRyeSAqYik7CiAKQEAgLTM4MSw2ICszOTYsNyBAQAogI2RlZmluZSBSRUZSRVNIX1VOTUVSR0VECTB4MDAwMgkvKiBhbGxvdyB1bm1lcmdlZCAqLwogI2RlZmluZSBSRUZSRVNIX1FVSUVUCQkweDAwMDQJLyogYmUgcXVpZXQgYWJvdXQgaXQgKi8KICNkZWZpbmUgUkVGUkVTSF9JR05PUkVfTUlTU0lORwkweDAwMDgJLyogaWdub3JlIG5vbi1leGlzdGVudCAqLworI2RlZmluZSBSRUZSRVNIX0lHTk9SRV9TVUJNT0RVTEVTCTB4MDAxMAkvKiBpZ25vcmUgc3VibW9kdWxlcyAqLwogZXh0ZXJuIGludCByZWZyZXNoX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKipwYXRoc3BlYywgY2hhciAqc2Vlbik7CiAKIHN0cnVjdCBsb2NrX2ZpbGUgewpAQCAtMzkxLDYgKzQwNyw3IEBACiAJY2hhciBmaWxlbmFtZVtQQVRIX01BWF07CiB9OwogZXh0ZXJuIGludCBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKHN0cnVjdCBsb2NrX2ZpbGUgKiwgY29uc3QgY2hhciAqcGF0aCwgaW50KTsKK2V4dGVybiBpbnQgaG9sZF9sb2NrX2ZpbGVfZm9yX2FwcGVuZChzdHJ1Y3QgbG9ja19maWxlICosIGNvbnN0IGNoYXIgKnBhdGgsIGludCk7CiBleHRlcm4gaW50IGNvbW1pdF9sb2NrX2ZpbGUoc3RydWN0IGxvY2tfZmlsZSAqKTsKIAogZXh0ZXJuIGludCBob2xkX2xvY2tlZF9pbmRleChzdHJ1Y3QgbG9ja19maWxlICosIGludCk7CkBAIC00MDQsNiArNDIxLDcgQEAKIGV4dGVybiBpbnQgdHJ1c3RfZXhlY3V0YWJsZV9iaXQ7CiBleHRlcm4gaW50IHF1b3RlX3BhdGhfZnVsbHk7CiBleHRlcm4gaW50IGhhc19zeW1saW5rczsKK2V4dGVybiBpbnQgaWdub3JlX2Nhc2U7CiBleHRlcm4gaW50IGFzc3VtZV91bmNoYW5nZWQ7CiBleHRlcm4gaW50IHByZWZlcl9zeW1saW5rX3JlZnM7CiBleHRlcm4gaW50IGxvZ19hbGxfcmVmX3VwZGF0ZXM7CkBAIC00MTcsNiArNDM1LDcgQEAKIGV4dGVybiBzaXplX3QgcGFja2VkX2dpdF9saW1pdDsKIGV4dGVybiBzaXplX3QgZGVsdGFfYmFzZV9jYWNoZV9saW1pdDsKIGV4dGVybiBpbnQgYXV0b19jcmxmOworZXh0ZXJuIGludCBmc3luY19vYmplY3RfZmlsZXM7CiAKIGVudW0gc2FmZV9jcmxmIHsKIAlTQUZFX0NSTEZfRkFMU0UgPSAwLApAQCAtNDMzLDcgKzQ1MiwxNSBAQAogCUJSQU5DSF9UUkFDS19FWFBMSUNJVCwKIH07CiAKK2VudW0gcmViYXNlX3NldHVwX3R5cGUgeworCUFVVE9SRUJBU0VfTkVWRVIgPSAwLAorCUFVVE9SRUJBU0VfTE9DQUwsCisJQVVUT1JFQkFTRV9SRU1PVEUsCisJQVVUT1JFQkFTRV9BTFdBWVMsCit9OworCiBleHRlcm4gZW51bSBicmFuY2hfdHJhY2sgZ2l0X2JyYW5jaF90cmFjazsKK2V4dGVybiBlbnVtIHJlYmFzZV9zZXR1cF90eXBlIGF1dG9yZWJhc2U7CiAKICNkZWZpbmUgR0lUX1JFUE9fVkVSU0lPTiAwCiBleHRlcm4gaW50IHJlcG9zaXRvcnlfZm9ybWF0X3ZlcnNpb247CkBAIC00NzQsMjAgKzUwMSwzMyBAQAogCiBpbnQgZ2l0X21rc3RlbXAoY2hhciAqcGF0aCwgc2l6ZV90IG4sIGNvbnN0IGNoYXIgKnRlbXBsYXRlKTsKIAorLyoKKyAqIE5PVEUgTk9URSBOT1RFISEKKyAqCisgKiBQRVJNX1VNQVNLLCBPTERfUEVSTV9HUk9VUCBhbmQgT0xEX1BFUk1fRVZFUllCT0RZIGVudW1lcmF0aW9ucyBtdXN0CisgKiBub3QgYmUgY2hhbmdlZC4gT2xkIHJlcG9zaXRvcmllcyBoYXZlIGNvcmUuc2hhcmVkcmVwb3NpdG9yeSB3cml0dGVuIGluCisgKiBudW1lcmljIGZvcm1hdCwgYW5kIHRoZXJlZm9yZSB0aGVzZSB2YWx1ZXMgYXJlIHByZXNlcnZlZCBmb3IgY29tcGF0aWJpbGl0eQorICogcmVhc29ucy4KKyAqLwogZW51bSBzaGFyZWRyZXBvIHsKLQlQRVJNX1VNQVNLID0gMCwKLQlQRVJNX0dST1VQLAotCVBFUk1fRVZFUllCT0RZCisJUEVSTV9VTUFTSyAgICAgICAgICA9IDAsCisJT0xEX1BFUk1fR1JPVVAgICAgICA9IDEsCisJT0xEX1BFUk1fRVZFUllCT0RZICA9IDIsCisJUEVSTV9HUk9VUCAgICAgICAgICA9IDA2NjAsCisJUEVSTV9FVkVSWUJPRFkgICAgICA9IDA2NjQsCiB9OwogaW50IGdpdF9jb25maWdfcGVybShjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKTsKIGludCBhZGp1c3Rfc2hhcmVkX3Blcm0oY29uc3QgY2hhciAqcGF0aCk7CiBpbnQgc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3RvcmllcyhjaGFyICpwYXRoKTsKK2ludCBzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzX2NvbnN0KGNvbnN0IGNoYXIgKnBhdGgpOwogY2hhciAqZW50ZXJfcmVwbyhjaGFyICpwYXRoLCBpbnQgc3RyaWN0KTsKIHN0YXRpYyBpbmxpbmUgaW50IGlzX2Fic29sdXRlX3BhdGgoY29uc3QgY2hhciAqcGF0aCkKIHsKIAlyZXR1cm4gcGF0aFswXSA9PSAnLyc7CiB9CiBjb25zdCBjaGFyICptYWtlX2Fic29sdXRlX3BhdGgoY29uc3QgY2hhciAqcGF0aCk7Citjb25zdCBjaGFyICptYWtlX25vbnJlbGF0aXZlX3BhdGgoY29uc3QgY2hhciAqcGF0aCk7Citjb25zdCBjaGFyICptYWtlX3JlbGF0aXZlX3BhdGgoY29uc3QgY2hhciAqYWJzLCBjb25zdCBjaGFyICpiYXNlKTsKIAogLyogUmVhZCBhbmQgdW5wYWNrIGEgc2hhMSBmaWxlIGludG8gbWVtb3J5LCB3cml0ZSBtZW1vcnkgdG8gYSBzaGExIGZpbGUgKi8KIGV4dGVybiBpbnQgc2hhMV9vYmplY3RfaW5mbyhjb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGxvbmcgKik7CkBAIC00OTUsMTIgKzUzNSwxMCBAQAogZXh0ZXJuIGludCBoYXNoX3NoYTFfZmlsZShjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgbGVuLCBjb25zdCBjaGFyICp0eXBlLCB1bnNpZ25lZCBjaGFyICpzaGExKTsKIGV4dGVybiBpbnQgd3JpdGVfc2hhMV9maWxlKHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBsZW4sIGNvbnN0IGNoYXIgKnR5cGUsIHVuc2lnbmVkIGNoYXIgKnJldHVybl9zaGExKTsKIGV4dGVybiBpbnQgcHJldGVuZF9zaGExX2ZpbGUodm9pZCAqLCB1bnNpZ25lZCBsb25nLCBlbnVtIG9iamVjdF90eXBlLCB1bnNpZ25lZCBjaGFyICopOworZXh0ZXJuIGludCBmb3JjZV9vYmplY3RfbG9vc2UoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgdGltZV90IG10aW1lKTsKIAogZXh0ZXJuIGludCBjaGVja19zaGExX3NpZ25hdHVyZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgY29uc3QgY2hhciAqdHlwZSk7CiAKLWV4dGVybiBpbnQgd3JpdGVfc2hhMV9mcm9tX2ZkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmZCwgY2hhciAqYnVmZmVyLAotCQkJICAgICAgc2l6ZV90IGJ1ZnNpemUsIHNpemVfdCAqYnVmcG9zbik7Ci1leHRlcm4gaW50IHdyaXRlX3NoYTFfdG9fZmQoaW50IGZkLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKIGV4dGVybiBpbnQgbW92ZV90ZW1wX3RvX2ZpbGUoY29uc3QgY2hhciAqdG1wZmlsZSwgY29uc3QgY2hhciAqZmlsZW5hbWUpOwogCiBleHRlcm4gaW50IGhhc19zaGExX3BhY2soY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3QgY2hhciAqKmlnbm9yZSk7CkBAIC01ODAsNyArNjE4LDcgQEAKIH07CiAKIGV4dGVybiBpbnQgY2hlY2tvdXRfZW50cnkoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgY29uc3Qgc3RydWN0IGNoZWNrb3V0ICpzdGF0ZSwgY2hhciAqdG9wYXRoKTsKLWV4dGVybiBpbnQgaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKmxhc3Rfc3ltbGluayk7CitleHRlcm4gaW50IGhhc19zeW1saW5rX2xlYWRpbmdfcGF0aChpbnQgbGVuLCBjb25zdCBjaGFyICpuYW1lKTsKIAogZXh0ZXJuIHN0cnVjdCBhbHRlcm5hdGVfb2JqZWN0X2RhdGFiYXNlIHsKIAlzdHJ1Y3QgYWx0ZXJuYXRlX29iamVjdF9kYXRhYmFzZSAqbmV4dDsKQEAgLTU4OCw2ICs2MjYsNyBAQAogCWNoYXIgYmFzZVtGTEVYX0FSUkFZXTsgLyogbW9yZSAqLwogfSAqYWx0X29kYl9saXN0OwogZXh0ZXJuIHZvaWQgcHJlcGFyZV9hbHRfb2RiKHZvaWQpOworZXh0ZXJuIHZvaWQgYWRkX3RvX2FsdGVybmF0ZXNfZmlsZShjb25zdCBjaGFyICpyZWZlcmVuY2UpOwogCiBzdHJ1Y3QgcGFja193aW5kb3cgewogCXN0cnVjdCBwYWNrX3dpbmRvdyAqbmV4dDsKQEAgLTYyNCw2ICs2NjMsNyBAQAogCXN0cnVjdCByZWYgKm5leHQ7CiAJdW5zaWduZWQgY2hhciBvbGRfc2hhMVsyMF07CiAJdW5zaWduZWQgY2hhciBuZXdfc2hhMVsyMF07CisJY2hhciAqc3ltcmVmOwogCXVuc2lnbmVkIGludCBmb3JjZToxLAogCQltZXJnZToxLAogCQlub25mYXN0Zm9yd2FyZDoxLApAQCAtNjU3LDggKzY5Nyw2IEBACiBleHRlcm4gaW50IHNlcnZlcl9zdXBwb3J0cyhjb25zdCBjaGFyICpmZWF0dXJlKTsKIAogZXh0ZXJuIHN0cnVjdCBwYWNrZWRfZ2l0ICpwYXJzZV9wYWNrX2luZGV4KHVuc2lnbmVkIGNoYXIgKnNoYTEpOwotZXh0ZXJuIHN0cnVjdCBwYWNrZWRfZ2l0ICpwYXJzZV9wYWNrX2luZGV4X2ZpbGUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKLQkJCQkJCWNvbnN0IGNoYXIgKmlkeF9wYXRoKTsKIAogZXh0ZXJuIHZvaWQgcHJlcGFyZV9wYWNrZWRfZ2l0KHZvaWQpOwogZXh0ZXJuIHZvaWQgcmVwcmVwYXJlX3BhY2tlZF9naXQodm9pZCk7CkBAIC02ODQsMjEgKzcyMiwyMiBAQAogLyogRHVtYiBzZXJ2ZXJzIHN1cHBvcnQgKi8KIGV4dGVybiBpbnQgdXBkYXRlX3NlcnZlcl9pbmZvKGludCk7CiAKLXR5cGVkZWYgaW50ICgqY29uZmlnX2ZuX3QpKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKLWV4dGVybiBpbnQgZ2l0X2RlZmF1bHRfY29uZmlnKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKLWV4dGVybiBpbnQgZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoY29uZmlnX2ZuX3QgZm4sIGNvbnN0IGNoYXIgKik7Ci1leHRlcm4gaW50IGdpdF9jb25maWcoY29uZmlnX2ZuX3QgZm4pOwordHlwZWRlZiBpbnQgKCpjb25maWdfZm5fdCkoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHZvaWQgKik7CitleHRlcm4gaW50IGdpdF9kZWZhdWx0X2NvbmZpZyhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdm9pZCAqKTsKK2V4dGVybiBpbnQgZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoY29uZmlnX2ZuX3QgZm4sIGNvbnN0IGNoYXIgKiwgdm9pZCAqKTsKK2V4dGVybiBpbnQgZ2l0X2NvbmZpZyhjb25maWdfZm5fdCBmbiwgdm9pZCAqKTsKIGV4dGVybiBpbnQgZ2l0X3BhcnNlX2xvbmcoY29uc3QgY2hhciAqLCBsb25nICopOwogZXh0ZXJuIGludCBnaXRfcGFyc2VfdWxvbmcoY29uc3QgY2hhciAqLCB1bnNpZ25lZCBsb25nICopOwogZXh0ZXJuIGludCBnaXRfY29uZmlnX2ludChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBnaXRfY29uZmlnX3Vsb25nKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiBpbnQgZ2l0X2NvbmZpZ19ib29sX29yX2ludChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50ICopOwogZXh0ZXJuIGludCBnaXRfY29uZmlnX2Jvb2woY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogZXh0ZXJuIGludCBnaXRfY29uZmlnX3N0cmluZyhjb25zdCBjaGFyICoqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CiBleHRlcm4gaW50IGdpdF9jb25maWdfc2V0KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKIGV4dGVybiBpbnQgZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXIoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KTsKIGV4dGVybiBpbnQgZ2l0X2NvbmZpZ19yZW5hbWVfc2VjdGlvbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CiBleHRlcm4gY29uc3QgY2hhciAqZ2l0X2V0Y19naXRjb25maWcodm9pZCk7Ci1leHRlcm4gaW50IGNoZWNrX3JlcG9zaXRvcnlfZm9ybWF0X3ZlcnNpb24oY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSk7CitleHRlcm4gaW50IGNoZWNrX3JlcG9zaXRvcnlfZm9ybWF0X3ZlcnNpb24oY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpOwogZXh0ZXJuIGludCBnaXRfZW52X2Jvb2woY29uc3QgY2hhciAqLCBpbnQpOwogZXh0ZXJuIGludCBnaXRfY29uZmlnX3N5c3RlbSh2b2lkKTsKIGV4dGVybiBpbnQgZ2l0X2NvbmZpZ19nbG9iYWwodm9pZCk7CkBAIC03MDcsNiArNzQ2LDcgQEAKICNkZWZpbmUgTUFYX0dJVE5BTUUgKDEwMDApCiBleHRlcm4gY2hhciBnaXRfZGVmYXVsdF9lbWFpbFtNQVhfR0lUTkFNRV07CiBleHRlcm4gY2hhciBnaXRfZGVmYXVsdF9uYW1lW01BWF9HSVROQU1FXTsKK2V4dGVybiBpbnQgdXNlcl9pZGVudF9leHBsaWNpdGx5X2dpdmVuOwogCiBleHRlcm4gY29uc3QgY2hhciAqZ2l0X2NvbW1pdF9lbmNvZGluZzsKIGV4dGVybiBjb25zdCBjaGFyICpnaXRfbG9nX291dHB1dF9lbmNvZGluZzsKQEAgLTcxNSwxMSArNzU1LDEyIEBACiBleHRlcm4gdm9pZCBtYXliZV9mbHVzaF9vcl9kaWUoRklMRSAqLCBjb25zdCBjaGFyICopOwogZXh0ZXJuIGludCBjb3B5X2ZkKGludCBpZmQsIGludCBvZmQpOwogZXh0ZXJuIGludCBjb3B5X2ZpbGUoY29uc3QgY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIGludCBtb2RlKTsKLWV4dGVybiBpbnQgcmVhZF9pbl9mdWxsKGludCBmZCwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpOwotZXh0ZXJuIGludCB3cml0ZV9pbl9mdWxsKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpOworZXh0ZXJuIHNzaXplX3QgcmVhZF9pbl9mdWxsKGludCBmZCwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpOworZXh0ZXJuIHNzaXplX3Qgd3JpdGVfaW5fZnVsbChpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKIGV4dGVybiB2b2lkIHdyaXRlX29yX2RpZShpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKIGV4dGVybiBpbnQgd3JpdGVfb3Jfd2hpbmUoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCwgY29uc3QgY2hhciAqbXNnKTsKIGV4dGVybiBpbnQgd3JpdGVfb3Jfd2hpbmVfcGlwZShpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50LCBjb25zdCBjaGFyICptc2cpOworZXh0ZXJuIHZvaWQgZnN5bmNfb3JfZGllKGludCBmZCwgY29uc3QgY2hhciAqKTsKIAogLyogcGFnZXIuYyAqLwogZXh0ZXJuIHZvaWQgc2V0dXBfcGFnZXIodm9pZCk7CkBAIC03NTMsNyArNzk0LDExIEBACiBleHRlcm4gaW50IGNvbnZlcnRfdG9fd29ya2luZ190cmVlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGxlbiwgc3RydWN0IHN0cmJ1ZiAqZHN0KTsKIAogLyogYWRkICovCi12b2lkIGFkZF9maWxlc190b19jYWNoZShpbnQgdmVyYm9zZSwgY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICoqcGF0aHNwZWMpOworLyoKKyAqIHJldHVybiAwIGlmIHN1Y2Nlc3MsIDEgLSBpZiBhZGRpdGlvbiBvZiBhIGZpbGUgZmFpbGVkIGFuZAorICogQUREX0ZJTEVTX0lHTk9SRV9FUlJPUlMgd2FzIHNwZWNpZmllZCBpbiBmbGFncworICovCitpbnQgYWRkX2ZpbGVzX3RvX2NhY2hlKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqKnBhdGhzcGVjLCBpbnQgZmxhZ3MpOwogCiAvKiBkaWZmLmMgKi8KIGV4dGVybiBpbnQgZGlmZl9hdXRvX3JlZnJlc2hfaW5kZXg7CmRpZmYgLS1naXQgYS9jb2xvci5jIGIvY29sb3IuYwppbmRleCAxMmE2NDUzLi5mYzBiNzJhIDEwMDY0NAotLS0gYS9jb2xvci5jCisrKyBiL2NvbG9yLmMKQEAgLTE0NSwxNCArMTQ1LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBnaXRfY29sb3JfZGVmYXVsdF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK2ludCBnaXRfY29sb3JfZGVmYXVsdF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCiB7CiAJaWYgKCFzdHJjbXAodmFyLCAiY29sb3IudWkiKSkgewogCQlnaXRfdXNlX2NvbG9yX2RlZmF1bHQgPSBnaXRfY29uZmlnX2NvbG9yYm9vbCh2YXIsIHZhbHVlLCAtMSk7CiAJCXJldHVybiAwOwogCX0KIAotCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSk7CisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CiB9CiAKIHN0YXRpYyBpbnQgY29sb3JfdmZwcmludGYoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmNvbG9yLCBjb25zdCBjaGFyICpmbXQsCmRpZmYgLS1naXQgYS9jb2xvci5oIGIvY29sb3IuaAppbmRleCBlY2RhNTU2Li42Y2Y1Yzg4IDEwMDY0NAotLS0gYS9jb2xvci5oCisrKyBiL2NvbG9yLmgKQEAgLTEzLDcgKzEzLDcgQEAKIC8qCiAgKiBVc2UgdGhpcyBpbnN0ZWFkIG9mIGdpdF9kZWZhdWx0X2NvbmZpZyBpZiB5b3UgbmVlZCB0aGUgdmFsdWUgb2YgY29sb3IudWkuCiAgKi8KLWludCBnaXRfY29sb3JfZGVmYXVsdF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSk7CitpbnQgZ2l0X2NvbG9yX2RlZmF1bHRfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKTsKIAogaW50IGdpdF9jb25maWdfY29sb3Jib29sKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIGludCBzdGRvdXRfaXNfdHR5KTsKIHZvaWQgY29sb3JfcGFyc2UoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgY2hhciAqZHN0KTsKZGlmZiAtLWdpdCBhL2NvbWJpbmUtZGlmZi5jIGIvY29tYmluZS1kaWZmLmMKaW5kZXggMGUxOWNiYS4uOWY4MGExYyAxMDA2NDQKLS0tIGEvY29tYmluZS1kaWZmLmMKKysrIGIvY29tYmluZS1kaWZmLmMKQEAgLTg0LDYgKzg0LDcgQEAKIAkvKiBiaXQgMCB1cCB0byAoTi0xKSBhcmUgb24gaWYgdGhlIHBhcmVudCBoYXMgdGhpcyBsaW5lIChpLmUuCiAJICogd2UgZGlkIG5vdCBjaGFuZ2UgaXQpLgogCSAqIGJpdCBOIGlzIHVzZWQgZm9yICJpbnRlcmVzdGluZyIgbGluZXMsIGluY2x1ZGluZyBjb250ZXh0LgorCSAqIGJpdCAoTisxKSBpcyB1c2VkIGZvciAiZG8gbm90IHNob3cgZGVsZXRpb24gYmVmb3JlIHRoaXMiLgogCSAqLwogCXVuc2lnbmVkIGxvbmcgZmxhZzsKIAl1bnNpZ25lZCBsb25nICpwX2xubzsKQEAgLTMwOCw2ICszMDksNyBAQAogewogCXVuc2lnbmVkIGxvbmcgYWxsX21hc2sgPSAoMVVMPDxudW1fcGFyZW50KSAtIDE7CiAJdW5zaWduZWQgbG9uZyBtYXJrID0gKDFVTDw8bnVtX3BhcmVudCk7CisJdW5zaWduZWQgbG9uZyBub19wcmVfZGVsZXRlID0gKDJVTDw8bnVtX3BhcmVudCk7CiAJdW5zaWduZWQgbG9uZyBpOwogCiAJLyogVHdvIGdyb3VwcyBvZiBpbnRlcmVzdGluZyBsaW5lcyBtYXkgaGF2ZSBhIHNob3J0IGdhcCBvZgpAQCAtMzI5LDcgKzMzMSw3IEBACiAKIAkJLyogUGFpbnQgYSBmZXcgbGluZXMgYmVmb3JlIHRoZSBmaXJzdCBpbnRlcmVzdGluZyBsaW5lLiAqLwogCQl3aGlsZSAoaiA8IGkpCi0JCQlzbGluZVtqKytdLmZsYWcgfD0gbWFyazsKKwkJCXNsaW5lW2orK10uZmxhZyB8PSBtYXJrIHwgbm9fcHJlX2RlbGV0ZTsKIAogCWFnYWluOgogCQkvKiB3ZSBrbm93IHVwIHRvIGkgaXMgdG8gYmUgaW5jbHVkZWQuICB3aGVyZSBkb2VzIHRoZQpAQCAtNTAyLDYgKzUwNCw3IEBACiAJCSAgICAgICBpbnQgdXNlX2NvbG9yKQogewogCXVuc2lnbmVkIGxvbmcgbWFyayA9ICgxVUw8PG51bV9wYXJlbnQpOworCXVuc2lnbmVkIGxvbmcgbm9fcHJlX2RlbGV0ZSA9ICgyVUw8PG51bV9wYXJlbnQpOwogCWludCBpOwogCXVuc2lnbmVkIGxvbmcgbG5vID0gMDsKIAljb25zdCBjaGFyICpjX2ZyYWcgPSBkaWZmX2dldF9jb2xvcih1c2VfY29sb3IsIERJRkZfRlJBR0lORk8pOwpAQCAtNTgxLDcgKzU4NCw3IEBACiAJCQlpbnQgajsKIAkJCXVuc2lnbmVkIGxvbmcgcF9tYXNrOwogCQkJc2wgPSAmc2xpbmVbbG5vKytdOwotCQkJbGwgPSBzbC0+bG9zdF9oZWFkOworCQkJbGwgPSAoc2wtPmZsYWcgJiBub19wcmVfZGVsZXRlKSA/IE5VTEwgOiBzbC0+bG9zdF9oZWFkOwogCQkJd2hpbGUgKGxsKSB7CiAJCQkJZnB1dHMoY19vbGQsIHN0ZG91dCk7CiAJCQkJZm9yIChqID0gMDsgaiA8IG51bV9wYXJlbnQ7IGorKykgewpAQCAtNzAxLDcgKzcwNCw3IEBACiAJCWVsc2UgaWYgKDAgPD0gKGZkID0gb3BlbihlbGVtLT5wYXRoLCBPX1JET05MWSkpICYmCiAJCQkgIWZzdGF0KGZkLCAmc3QpKSB7CiAJCQlzaXplX3QgbGVuID0geHNpemVfdChzdC5zdF9zaXplKTsKLQkJCXNpemVfdCBzeiA9IDA7CisJCQlzc2l6ZV90IGRvbmU7CiAJCQlpbnQgaXNfZmlsZSwgaTsKIAogCQkJZWxlbS0+bW9kZSA9IGNhbm9uX21vZGUoc3Quc3RfbW9kZSk7CkBAIC03MTYsMTQgKzcxOSwxMyBAQAogCiAJCQlyZXN1bHRfc2l6ZSA9IGxlbjsKIAkJCXJlc3VsdCA9IHhtYWxsb2MobGVuICsgMSk7Ci0JCQl3aGlsZSAoc3ogPCBsZW4pIHsKLQkJCQlzc2l6ZV90IGRvbmUgPSB4cmVhZChmZCwgcmVzdWx0K3N6LCBsZW4tc3opOwotCQkJCWlmIChkb25lID09IDApCi0JCQkJCWJyZWFrOwotCQkJCWlmIChkb25lIDwgMCkKLQkJCQkJZGllKCJyZWFkIGVycm9yICclcyciLCBlbGVtLT5wYXRoKTsKLQkJCQlzeiArPSBkb25lOwotCQkJfQorCisJCQlkb25lID0gcmVhZF9pbl9mdWxsKGZkLCByZXN1bHQsIGxlbik7CisJCQlpZiAoZG9uZSA8IDApCisJCQkJZGllKCJyZWFkIGVycm9yICclcyciLCBlbGVtLT5wYXRoKTsKKwkJCWVsc2UgaWYgKGRvbmUgPCBsZW4pCisJCQkJZGllKCJlYXJseSBFT0YgJyVzJyIsIGVsZW0tPnBhdGgpOworCiAJCQlyZXN1bHRbbGVuXSA9IDA7CiAJCX0KIAkJZWxzZSB7CkBAIC03OTgsNyArODAwLDcgQEAKIAkJaW50IGRlbGV0ZWQgPSAwOwogCiAJCWlmIChyZXYtPmxvZ2luZm8gJiYgIXJldi0+bm9fY29tbWl0X2lkKQotCQkJc2hvd19sb2cocmV2LCBvcHQtPm1zZ19zZXApOworCQkJc2hvd19sb2cocmV2KTsKIAkJZHVtcF9xdW90ZWRfcGF0aChkZW5zZSA/ICJkaWZmIC0tY2MgIiA6ICJkaWZmIC0tY29tYmluZWQgIiwKIAkJCQkgIiIsIGVsZW0tPnBhdGgsIGNfbWV0YSwgY19yZXNldCk7CiAJCXByaW50ZigiJXNpbmRleCAiLCBjX21ldGEpOwpAQCAtODgxLDcgKzg4Myw3IEBACiAJCWludGVyX25hbWVfdGVybWluYXRpb24gPSAwOwogCiAJaWYgKHJldi0+bG9naW5mbyAmJiAhcmV2LT5ub19jb21taXRfaWQpCi0JCXNob3dfbG9nKHJldiwgb3B0LT5tc2dfc2VwKTsKKwkJc2hvd19sb2cocmV2KTsKIAogCWlmIChvcHQtPm91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9SQVcpIHsKIAkJb2Zmc2V0ID0gc3RybGVuKENPTE9OUykgLSBudW1fcGFyZW50OwpAQCAtOTYyLDcgKzk2NCw3IEBACiAJCXBhdGhzID0gaW50ZXJzZWN0X3BhdGhzKHBhdGhzLCBpLCBudW1fcGFyZW50KTsKIAogCQlpZiAoc2hvd19sb2dfZmlyc3QgJiYgaSA9PSAwKSB7Ci0JCQlzaG93X2xvZyhyZXYsIG9wdC0+bXNnX3NlcCk7CisJCQlzaG93X2xvZyhyZXYpOwogCQkJaWYgKHJldi0+dmVyYm9zZV9oZWFkZXIgJiYgb3B0LT5vdXRwdXRfZm9ybWF0KQogCQkJCXB1dGNoYXIob3B0LT5saW5lX3Rlcm1pbmF0aW9uKTsKIAkJfQpkaWZmIC0tZ2l0IGEvY29tbWl0LmMgYi9jb21taXQuYwppbmRleCA5NGQ1YjNkLi4wOWNmMTY3IDEwMDY0NAotLS0gYS9jb21taXQuYworKysgYi9jb21taXQuYwpAQCAtMjQzLDcgKzI0Myw2IEBACiAJdW5zaWduZWQgY2hhciBwYXJlbnRbMjBdOwogCXN0cnVjdCBjb21taXRfbGlzdCAqKnBwdHI7CiAJc3RydWN0IGNvbW1pdF9ncmFmdCAqZ3JhZnQ7Ci0JdW5zaWduZWQgbl9yZWZzID0gMDsKIAogCWlmIChpdGVtLT5vYmplY3QucGFyc2VkKQogCQlyZXR1cm4gMDsKQEAgLTI1NSw4ICsyNTQsNiBAQAogCQlyZXR1cm4gZXJyb3IoImJhZCB0cmVlIHBvaW50ZXIgaW4gY29tbWl0ICVzIiwKIAkJCSAgICAgc2hhMV90b19oZXgoaXRlbS0+b2JqZWN0LnNoYTEpKTsKIAlpdGVtLT50cmVlID0gbG9va3VwX3RyZWUocGFyZW50KTsKLQlpZiAoaXRlbS0+dHJlZSkKLQkJbl9yZWZzKys7CiAJYnVmcHRyICs9IDQ2OyAvKiAidHJlZSAiICsgImhleCBzaGExIiArICJcbiIgKi8KIAlwcHRyID0gJml0ZW0tPnBhcmVudHM7CiAKQEAgLTI3MiwxMCArMjY5LDggQEAKIAkJaWYgKGdyYWZ0KQogCQkJY29udGludWU7CiAJCW5ld19wYXJlbnQgPSBsb29rdXBfY29tbWl0KHBhcmVudCk7Ci0JCWlmIChuZXdfcGFyZW50KSB7CisJCWlmIChuZXdfcGFyZW50KQogCQkJcHB0ciA9ICZjb21taXRfbGlzdF9pbnNlcnQobmV3X3BhcmVudCwgcHB0ciktPm5leHQ7Ci0JCQluX3JlZnMrKzsKLQkJfQogCX0KIAlpZiAoZ3JhZnQpIHsKIAkJaW50IGk7CkBAIC0yODUsNyArMjgwLDYgQEAKIAkJCWlmICghbmV3X3BhcmVudCkKIAkJCQljb250aW51ZTsKIAkJCXBwdHIgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KG5ld19wYXJlbnQsIHBwdHIpLT5uZXh0OwotCQkJbl9yZWZzKys7CiAJCX0KIAl9CiAJaXRlbS0+ZGF0ZSA9IHBhcnNlX2NvbW1pdF9kYXRlKGJ1ZnB0ciwgdGFpbCk7CkBAIC00MzQsOCArNDI4LDcgQEAKIAkvKiBNYXJrIHRoZW0gYW5kIGNsZWFyIHRoZSBpbmRlZ3JlZSAqLwogCWZvciAobmV4dCA9IG9yaWc7IG5leHQ7IG5leHQgPSBuZXh0LT5uZXh0KSB7CiAJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IG5leHQtPml0ZW07Ci0JCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFRPUE9TT1JUOwotCQljb21taXQtPmluZGVncmVlID0gMDsKKwkJY29tbWl0LT5pbmRlZ3JlZSA9IDE7CiAJfQogCiAJLyogdXBkYXRlIHRoZSBpbmRlZ3JlZSAqLwpAQCAtNDQ0LDcgKzQzNyw3IEBACiAJCXdoaWxlIChwYXJlbnRzKSB7CiAJCQlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQgPSBwYXJlbnRzLT5pdGVtOwogCi0JCQlpZiAocGFyZW50LT5vYmplY3QuZmxhZ3MgJiBUT1BPU09SVCkKKwkJCWlmIChwYXJlbnQtPmluZGVncmVlKQogCQkJCXBhcmVudC0+aW5kZWdyZWUrKzsKIAkJCXBhcmVudHMgPSBwYXJlbnRzLT5uZXh0OwogCQl9CkBAIC00NjIsNyArNDU1LDcgQEAKIAlmb3IgKG5leHQgPSBvcmlnOyBuZXh0OyBuZXh0ID0gbmV4dC0+bmV4dCkgewogCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBuZXh0LT5pdGVtOwogCi0JCWlmICghY29tbWl0LT5pbmRlZ3JlZSkKKwkJaWYgKGNvbW1pdC0+aW5kZWdyZWUgPT0gMSkKIAkJCWluc2VydCA9ICZjb21taXRfbGlzdF9pbnNlcnQoY29tbWl0LCBpbnNlcnQpLT5uZXh0OwogCX0KIApAQCAtNDg0LDcgKzQ3Nyw3IEBACiAJCWZvciAocGFyZW50cyA9IGNvbW1pdC0+cGFyZW50czsgcGFyZW50cyA7IHBhcmVudHMgPSBwYXJlbnRzLT5uZXh0KSB7CiAJCQlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQ9cGFyZW50cy0+aXRlbTsKIAotCQkJaWYgKCEocGFyZW50LT5vYmplY3QuZmxhZ3MgJiBUT1BPU09SVCkpCisJCQlpZiAoIXBhcmVudC0+aW5kZWdyZWUpCiAJCQkJY29udGludWU7CiAKIAkJCS8qCkBAIC00OTIsNyArNDg1LDcgQEAKIAkJCSAqIHdoZW4gYWxsIHRoZWlyIGNoaWxkcmVuIGhhdmUgYmVlbiBlbWl0dGVkIHRoZXJlYnkKIAkJCSAqIGd1YXJhbnRlZWluZyB0b3BvbG9naWNhbCBvcmRlci4KIAkJCSAqLwotCQkJaWYgKCEtLXBhcmVudC0+aW5kZWdyZWUpIHsKKwkJCWlmICgtLXBhcmVudC0+aW5kZWdyZWUgPT0gMSkgewogCQkJCWlmICghbGlmbykKIAkJCQkJaW5zZXJ0X2J5X2RhdGUocGFyZW50LCAmd29yayk7CiAJCQkJZWxzZQpAQCAtNTAzLDcgKzQ5Niw3IEBACiAJCSAqIHdvcmtfaXRlbSBpcyBhIGNvbW1pdCBhbGwgb2Ygd2hvc2UgY2hpbGRyZW4KIAkJICogaGF2ZSBhbHJlYWR5IGJlZW4gZW1pdHRlZC4gd2UgY2FuIGVtaXQgaXQgbm93LgogCQkgKi8KLQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgJj0gflRPUE9TT1JUOworCQljb21taXQtPmluZGVncmVlID0gMDsKIAkJKnBwdHIgPSB3b3JrX2l0ZW07CiAJCXBwdHIgPSAmd29ya19pdGVtLT5uZXh0OwogCX0KZGlmZiAtLWdpdCBhL2NvbW1pdC5oIGIvY29tbWl0LmgKaW5kZXggMmY2M2JjOC4uMmQ5NGQ0MSAxMDA2NDQKLS0tIGEvY29tbWl0LmgKKysrIGIvY29tbWl0LmgKQEAgLTYzLDcgKzYzLDggQEAKIH07CiAKIGV4dGVybiBpbnQgbm9uX2FzY2lpKGludCk7Ci1leHRlcm4gZW51bSBjbWl0X2ZtdCBnZXRfY29tbWl0X2Zvcm1hdChjb25zdCBjaGFyICphcmcpOworc3RydWN0IHJldl9pbmZvOyAvKiBpbiByZXZpc2lvbi5oLCBpdCBjaXJjdWxhcmx5IHVzZXMgZW51bSBjbWl0X2ZtdCAqLworZXh0ZXJuIHZvaWQgZ2V0X2NvbW1pdF9mb3JtYXQoY29uc3QgY2hhciAqYXJnLCBzdHJ1Y3QgcmV2X2luZm8gKik7CiBleHRlcm4gdm9pZCBmb3JtYXRfY29tbWl0X21lc3NhZ2UoY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmZvcm1hdCwgc3RydWN0IHN0cmJ1ZiAqc2IpOwogZXh0ZXJuIHZvaWQgcHJldHR5X3ByaW50X2NvbW1pdChlbnVtIGNtaXRfZm10IGZtdCwgY29uc3Qgc3RydWN0IGNvbW1pdCosCmRpZmYgLS1naXQgYS9jb21wYXQvZm9wZW4uYyBiL2NvbXBhdC9mb3Blbi5jCmluZGV4IGNjYjllODkuLmI1Y2ExNDIgMTAwNjQ0Ci0tLSBhL2NvbXBhdC9mb3Blbi5jCisrKyBiL2NvbXBhdC9mb3Blbi5jCkBAIC0xLDUgKzEsMTYgQEAKKy8qCisgKiAgVGhlIG9yZGVyIG9mIHRoZSBmb2xsb3dpbmcgdHdvIGxpbmVzIGlzIGltcG9ydGFudC4KKyAqCisgKiAgRlJFQURfUkVBRFNfRElSRUNUT1JJRVMgaXMgdW5kZWZpbmVkIGJlZm9yZSBpbmNsdWRpbmcgZ2l0LWNvbXBhdC11dGlsLmgKKyAqICB0byBhdm9pZCB0aGUgcmVkZWZpbml0aW9uIG9mIGZvcGVuIHdpdGhpbiBnaXQtY29tcGF0LXV0aWwuaC4gVGhpcyBpcworICogIG5lY2Vzc2FyeSBzaW5jZSBmb3BlbiBpcyBhIG1hY3JvIG9uIHNvbWUgcGxhdGZvcm1zIHdoaWNoIG1heSBiZSBzZXQKKyAqICBiYXNlZCBvbiBjb21waWxlciBvcHRpb25zLiBGb3IgZXhhbXBsZSwgb24gQUlYIGZvcGVuIGlzIHNldCB0byBmb3BlbjY0CisgKiAgd2hlbiBfTEFSR0VfRklMRVMgaXMgZGVmaW5lZC4gVGhlIHByZXZpb3VzIHRlY2huaXF1ZSBvZiBtZXJlbHkgdW5kZWZpbmluZworICogIGZvcGVuIGFmdGVyIGluY2x1ZGluZyBnaXQtY29tcGF0LXV0aWwuaCBpcyBpbmFkZXF1YXRlIGluIHRoaXMgY2FzZS4KKyAqLworI3VuZGVmIEZSRUFEX1JFQURTX0RJUkVDVE9SSUVTCiAjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCi0jdW5kZWYgZm9wZW4KKwogRklMRSAqZ2l0X2ZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpCiB7CiAJRklMRSAqZnA7CmRpZmYgLS1naXQgYS9jb25maWcuYyBiL2NvbmZpZy5jCmluZGV4IDA2MjQ0OTQuLmIyZDViNGUgMTAwNjQ0Ci0tLSBhL2NvbmZpZy5jCisrKyBiL2NvbmZpZy5jCkBAIC0xMTEsNyArMTExLDcgQEAKIAlyZXR1cm4gaXNhbG51bShjKSB8fCBjID09ICctJzsKIH0KIAotc3RhdGljIGludCBnZXRfdmFsdWUoY29uZmlnX2ZuX3QgZm4sIGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBsZW4pCitzdGF0aWMgaW50IGdldF92YWx1ZShjb25maWdfZm5fdCBmbiwgdm9pZCAqZGF0YSwgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGxlbikKIHsKIAlpbnQgYzsKIAljaGFyICp2YWx1ZTsKQEAgLTEzOSw3ICsxMzksNyBAQAogCQlpZiAoIXZhbHVlKQogCQkJcmV0dXJuIC0xOwogCX0KLQlyZXR1cm4gZm4obmFtZSwgdmFsdWUpOworCXJldHVybiBmbihuYW1lLCB2YWx1ZSwgZGF0YSk7CiB9CiAKIHN0YXRpYyBpbnQgZ2V0X2V4dGVuZGVkX2Jhc2VfdmFyKGNoYXIgKm5hbWUsIGludCBiYXNlbGVuLCBpbnQgYykKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBnaXRfcGFyc2VfZmlsZShjb25maWdfZm5fdCBmbikKK3N0YXRpYyBpbnQgZ2l0X3BhcnNlX2ZpbGUoY29uZmlnX2ZuX3QgZm4sIHZvaWQgKmRhdGEpCiB7CiAJaW50IGNvbW1lbnQgPSAwOwogCWludCBiYXNlbGVuID0gMDsKQEAgLTIyOCw3ICsyMjgsNyBAQAogCQlpZiAoIWlzYWxwaGEoYykpCiAJCQlicmVhazsKIAkJdmFyW2Jhc2VsZW5dID0gdG9sb3dlcihjKTsKLQkJaWYgKGdldF92YWx1ZShmbiwgdmFyLCBiYXNlbGVuKzEpIDwgMCkKKwkJaWYgKGdldF92YWx1ZShmbiwgZGF0YSwgdmFyLCBiYXNlbGVuKzEpIDwgMCkKIAkJCWJyZWFrOwogCX0KIAlkaWUoImJhZCBjb25maWcgZmlsZSBsaW5lICVkIGluICVzIiwgY29uZmlnX2xpbmVuciwgY29uZmlnX2ZpbGVfbmFtZSk7CkBAIC0zMDMsOCArMzAzLDkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgZ2l0X2NvbmZpZ19ib29sKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoraW50IGdpdF9jb25maWdfYm9vbF9vcl9pbnQoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUsIGludCAqaXNfYm9vbCkKIHsKKwkqaXNfYm9vbCA9IDE7CiAJaWYgKCF2YWx1ZSkKIAkJcmV0dXJuIDE7CiAJaWYgKCEqdmFsdWUpCkBAIC0zMTMsNyArMzE0LDE0IEBACiAJCXJldHVybiAxOwogCWlmICghc3RyY2FzZWNtcCh2YWx1ZSwgImZhbHNlIikgfHwgIXN0cmNhc2VjbXAodmFsdWUsICJubyIpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gZ2l0X2NvbmZpZ19pbnQobmFtZSwgdmFsdWUpICE9IDA7CisJKmlzX2Jvb2wgPSAwOworCXJldHVybiBnaXRfY29uZmlnX2ludChuYW1lLCB2YWx1ZSk7Cit9CisKK2ludCBnaXRfY29uZmlnX2Jvb2woY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaW50IGRpc2NhcmQ7CisJcmV0dXJuICEhZ2l0X2NvbmZpZ19ib29sX29yX2ludChuYW1lLCB2YWx1ZSwgJmRpc2NhcmQpOwogfQogCiBpbnQgZ2l0X2NvbmZpZ19zdHJpbmcoY29uc3QgY2hhciAqKmRlc3QsIGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCkBAIC0zMjQsNyArMzMyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGdpdF9kZWZhdWx0X2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQorc3RhdGljIGludCBnaXRfZGVmYXVsdF9jb3JlX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQogewogCS8qIFRoaXMgbmVlZHMgYSBiZXR0ZXIgbmFtZSAqLwogCWlmICghc3RyY21wKHZhciwgImNvcmUuZmlsZW1vZGUiKSkgewpAQCAtMzQyLDYgKzM1MCwxMSBAQAogCQlyZXR1cm4gMDsKIAl9CiAKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLmlnbm9yZWNhc2UiKSkgeworCQlpZ25vcmVfY2FzZSA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5iYXJlIikpIHsKIAkJaXNfYmFyZV9yZXBvc2l0b3J5X2NmZyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKIAkJcmV0dXJuIDA7CkBAIC00MzEsMzEgKzQ0NCw2IEBACiAJCXJldHVybiAwOwogCX0KIAotCWlmICghc3RyY21wKHZhciwgInVzZXIubmFtZSIpKSB7Ci0JCWlmICghdmFsdWUpCi0JCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKLQkJc3RybGNweShnaXRfZGVmYXVsdF9uYW1lLCB2YWx1ZSwgc2l6ZW9mKGdpdF9kZWZhdWx0X25hbWUpKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKCFzdHJjbXAodmFyLCAidXNlci5lbWFpbCIpKSB7Ci0JCWlmICghdmFsdWUpCi0JCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKLQkJc3RybGNweShnaXRfZGVmYXVsdF9lbWFpbCwgdmFsdWUsIHNpemVvZihnaXRfZGVmYXVsdF9lbWFpbCkpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoIXN0cmNtcCh2YXIsICJpMThuLmNvbW1pdGVuY29kaW5nIikpCi0JCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmZ2l0X2NvbW1pdF9lbmNvZGluZywgdmFyLCB2YWx1ZSk7Ci0KLQlpZiAoIXN0cmNtcCh2YXIsICJpMThuLmxvZ291dHB1dGVuY29kaW5nIikpCi0JCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmZ2l0X2xvZ19vdXRwdXRfZW5jb2RpbmcsIHZhciwgdmFsdWUpOwotCi0JaWYgKCFzdHJjbXAodmFyLCAicGFnZXIuY29sb3IiKSB8fCAhc3RyY21wKHZhciwgImNvbG9yLnBhZ2VyIikpIHsKLQkJcGFnZXJfdXNlX2NvbG9yID0gZ2l0X2NvbmZpZ19ib29sKHZhcix2YWx1ZSk7Ci0JCXJldHVybiAwOwotCX0KLQogCWlmICghc3RyY21wKHZhciwgImNvcmUucGFnZXIiKSkKIAkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZwYWdlcl9wcm9ncmFtLCB2YXIsIHZhbHVlKTsKIApAQCAtNDcxLDYgKzQ1OSw1NCBAQAogCQl3aGl0ZXNwYWNlX3J1bGVfY2ZnID0gcGFyc2Vfd2hpdGVzcGFjZV9ydWxlKHZhbHVlKTsKIAkJcmV0dXJuIDA7CiAJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5mc3luY29iamVjdGZpbGVzIikpIHsKKwkJZnN5bmNfb2JqZWN0X2ZpbGVzID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBBZGQgb3RoZXIgY29uZmlnIHZhcmlhYmxlcyBoZXJlIGFuZCB0byBEb2N1bWVudGF0aW9uL2NvbmZpZy50eHQuICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X2RlZmF1bHRfdXNlcl9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJ1c2VyLm5hbWUiKSkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCXN0cmxjcHkoZ2l0X2RlZmF1bHRfbmFtZSwgdmFsdWUsIHNpemVvZihnaXRfZGVmYXVsdF9uYW1lKSk7CisJCWlmIChnaXRfZGVmYXVsdF9lbWFpbFswXSkKKwkJCXVzZXJfaWRlbnRfZXhwbGljaXRseV9naXZlbiA9IDE7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgInVzZXIuZW1haWwiKSkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCXN0cmxjcHkoZ2l0X2RlZmF1bHRfZW1haWwsIHZhbHVlLCBzaXplb2YoZ2l0X2RlZmF1bHRfZW1haWwpKTsKKwkJaWYgKGdpdF9kZWZhdWx0X25hbWVbMF0pCisJCQl1c2VyX2lkZW50X2V4cGxpY2l0bHlfZ2l2ZW4gPSAxOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBBZGQgb3RoZXIgY29uZmlnIHZhcmlhYmxlcyBoZXJlIGFuZCB0byBEb2N1bWVudGF0aW9uL2NvbmZpZy50eHQuICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X2RlZmF1bHRfaTE4bl9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJpMThuLmNvbW1pdGVuY29kaW5nIikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmZ2l0X2NvbW1pdF9lbmNvZGluZywgdmFyLCB2YWx1ZSk7CisKKwlpZiAoIXN0cmNtcCh2YXIsICJpMThuLmxvZ291dHB1dGVuY29kaW5nIikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmZ2l0X2xvZ19vdXRwdXRfZW5jb2RpbmcsIHZhciwgdmFsdWUpOworCisJLyogQWRkIG90aGVyIGNvbmZpZyB2YXJpYWJsZXMgaGVyZSBhbmQgdG8gRG9jdW1lbnRhdGlvbi9jb25maWcudHh0LiAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdpdF9kZWZhdWx0X2JyYW5jaF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKIAlpZiAoIXN0cmNtcCh2YXIsICJicmFuY2guYXV0b3NldHVwbWVyZ2UiKSkgewogCQlpZiAodmFsdWUgJiYgIXN0cmNhc2VjbXAodmFsdWUsICJhbHdheXMiKSkgewogCQkJZ2l0X2JyYW5jaF90cmFjayA9IEJSQU5DSF9UUkFDS19BTFdBWVM7CkBAIC00NzksMTIgKzUxNSw1MCBAQAogCQlnaXRfYnJhbmNoX3RyYWNrID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOwogCQlyZXR1cm4gMDsKIAl9CisJaWYgKCFzdHJjbXAodmFyLCAiYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSIpKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIm5ldmVyIikpCisJCQlhdXRvcmViYXNlID0gQVVUT1JFQkFTRV9ORVZFUjsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgImxvY2FsIikpCisJCQlhdXRvcmViYXNlID0gQVVUT1JFQkFTRV9MT0NBTDsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgInJlbW90ZSIpKQorCQkJYXV0b3JlYmFzZSA9IEFVVE9SRUJBU0VfUkVNT1RFOworCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiYWx3YXlzIikpCisJCQlhdXRvcmViYXNlID0gQVVUT1JFQkFTRV9BTFdBWVM7CisJCWVsc2UKKwkJCXJldHVybiBlcnJvcigiTWFsZm9ybWVkIHZhbHVlIGZvciAlcyIsIHZhcik7CisJCXJldHVybiAwOworCX0KIAogCS8qIEFkZCBvdGhlciBjb25maWcgdmFyaWFibGVzIGhlcmUgYW5kIHRvIERvY3VtZW50YXRpb24vY29uZmlnLnR4dC4gKi8KIAlyZXR1cm4gMDsKIH0KIAotaW50IGdpdF9jb25maWdfZnJvbV9maWxlKGNvbmZpZ19mbl90IGZuLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK2ludCBnaXRfZGVmYXVsdF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqZHVtbXkpCit7CisJaWYgKCFwcmVmaXhjbXAodmFyLCAiY29yZS4iKSkKKwkJcmV0dXJuIGdpdF9kZWZhdWx0X2NvcmVfY29uZmlnKHZhciwgdmFsdWUpOworCisJaWYgKCFwcmVmaXhjbXAodmFyLCAidXNlci4iKSkKKwkJcmV0dXJuIGdpdF9kZWZhdWx0X3VzZXJfY29uZmlnKHZhciwgdmFsdWUpOworCisJaWYgKCFwcmVmaXhjbXAodmFyLCAiaTE4bi4iKSkKKwkJcmV0dXJuIGdpdF9kZWZhdWx0X2kxOG5fY29uZmlnKHZhciwgdmFsdWUpOworCisJaWYgKCFwcmVmaXhjbXAodmFyLCAiYnJhbmNoLiIpKQorCQlyZXR1cm4gZ2l0X2RlZmF1bHRfYnJhbmNoX2NvbmZpZyh2YXIsIHZhbHVlKTsKKworCWlmICghc3RyY21wKHZhciwgInBhZ2VyLmNvbG9yIikgfHwgIXN0cmNtcCh2YXIsICJjb2xvci5wYWdlciIpKSB7CisJCXBhZ2VyX3VzZV9jb2xvciA9IGdpdF9jb25maWdfYm9vbCh2YXIsdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBBZGQgb3RoZXIgY29uZmlnIHZhcmlhYmxlcyBoZXJlIGFuZCB0byBEb2N1bWVudGF0aW9uL2NvbmZpZy50eHQuICovCisJcmV0dXJuIDA7Cit9CisKK2ludCBnaXRfY29uZmlnX2Zyb21fZmlsZShjb25maWdfZm5fdCBmbiwgY29uc3QgY2hhciAqZmlsZW5hbWUsIHZvaWQgKmRhdGEpCiB7CiAJaW50IHJldDsKIAlGSUxFICpmID0gZm9wZW4oZmlsZW5hbWUsICJyIik7CkBAIC00OTUsNyArNTY5LDcgQEAKIAkJY29uZmlnX2ZpbGVfbmFtZSA9IGZpbGVuYW1lOwogCQljb25maWdfbGluZW5yID0gMTsKIAkJY29uZmlnX2ZpbGVfZW9mID0gMDsKLQkJcmV0ID0gZ2l0X3BhcnNlX2ZpbGUoZm4pOworCQlyZXQgPSBnaXRfcGFyc2VfZmlsZShmbiwgZGF0YSk7CiAJCWZjbG9zZShmKTsKIAkJY29uZmlnX2ZpbGVfbmFtZSA9IE5VTEw7CiAJfQpAQCAtNTMzLDcgKzYwNyw3IEBACiAJcmV0dXJuICFnaXRfZW52X2Jvb2woIkdJVF9DT05GSUdfTk9HTE9CQUwiLCAwKTsKIH0KIAotaW50IGdpdF9jb25maWcoY29uZmlnX2ZuX3QgZm4pCitpbnQgZ2l0X2NvbmZpZyhjb25maWdfZm5fdCBmbiwgdm9pZCAqZGF0YSkKIHsKIAlpbnQgcmV0ID0gMDsKIAljaGFyICpyZXBvX2NvbmZpZyA9IE5VTEw7CkBAIC01NDYsNyArNjIwLDggQEAKIAlmaWxlbmFtZSA9IGdldGVudihDT05GSUdfRU5WSVJPTk1FTlQpOwogCWlmICghZmlsZW5hbWUpIHsKIAkJaWYgKGdpdF9jb25maWdfc3lzdGVtKCkgJiYgIWFjY2VzcyhnaXRfZXRjX2dpdGNvbmZpZygpLCBSX09LKSkKLQkJCXJldCArPSBnaXRfY29uZmlnX2Zyb21fZmlsZShmbiwgZ2l0X2V0Y19naXRjb25maWcoKSk7CisJCQlyZXQgKz0gZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoZm4sIGdpdF9ldGNfZ2l0Y29uZmlnKCksCisJCQkJZGF0YSk7CiAJCWhvbWUgPSBnZXRlbnYoIkhPTUUiKTsKIAkJZmlsZW5hbWUgPSBnZXRlbnYoQ09ORklHX0xPQ0FMX0VOVklST05NRU5UKTsKIAkJaWYgKCFmaWxlbmFtZSkKQEAgLTU1NiwxMSArNjMxLDExIEBACiAJaWYgKGdpdF9jb25maWdfZ2xvYmFsKCkgJiYgaG9tZSkgewogCQljaGFyICp1c2VyX2NvbmZpZyA9IHhzdHJkdXAobWtwYXRoKCIlcy8uZ2l0Y29uZmlnIiwgaG9tZSkpOwogCQlpZiAoIWFjY2Vzcyh1c2VyX2NvbmZpZywgUl9PSykpCi0JCQlyZXQgPSBnaXRfY29uZmlnX2Zyb21fZmlsZShmbiwgdXNlcl9jb25maWcpOworCQkJcmV0ID0gZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoZm4sIHVzZXJfY29uZmlnLCBkYXRhKTsKIAkJZnJlZSh1c2VyX2NvbmZpZyk7CiAJfQogCi0JcmV0ICs9IGdpdF9jb25maWdfZnJvbV9maWxlKGZuLCBmaWxlbmFtZSk7CisJcmV0ICs9IGdpdF9jb25maWdfZnJvbV9maWxlKGZuLCBmaWxlbmFtZSwgZGF0YSk7CiAJZnJlZShyZXBvX2NvbmZpZyk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTU5MCw3ICs2NjUsNyBAQAogCQkgICFyZWdleGVjKHN0b3JlLnZhbHVlX3JlZ2V4LCB2YWx1ZSwgMCwgTlVMTCwgMCkpKTsKIH0KIAotc3RhdGljIGludCBzdG9yZV9hdXgoY29uc3QgY2hhcioga2V5LCBjb25zdCBjaGFyKiB2YWx1ZSkKK3N0YXRpYyBpbnQgc3RvcmVfYXV4KGNvbnN0IGNoYXIqIGtleSwgY29uc3QgY2hhciogdmFsdWUsIHZvaWQgKmNiKQogewogCWNvbnN0IGNoYXIgKmVwOwogCXNpemVfdCBzZWN0aW9uX2xlbjsKQEAgLTU5OSwxMSArNjc0LDkgQEAKIAljYXNlIEtFWV9TRUVOOgogCQlpZiAobWF0Y2hlcyhrZXksIHZhbHVlKSkgewogCQkJaWYgKHN0b3JlLnNlZW4gPT0gMSAmJiBzdG9yZS5tdWx0aV9yZXBsYWNlID09IDApIHsKLQkJCQlmcHJpbnRmKHN0ZGVyciwKLQkJCQkJIldhcm5pbmc6ICVzIGhhcyBtdWx0aXBsZSB2YWx1ZXNcbiIsCi0JCQkJCWtleSk7CisJCQkJd2FybmluZygiJXMgaGFzIG11bHRpcGxlIHZhbHVlcyIsIGtleSk7CiAJCQl9IGVsc2UgaWYgKHN0b3JlLnNlZW4gPj0gTUFYX01BVENIRVMpIHsKLQkJCQlmcHJpbnRmKHN0ZGVyciwgIlRvbyBtYW55IG1hdGNoZXNcbiIpOworCQkJCWVycm9yKCJ0b28gbWFueSBtYXRjaGVzIGZvciAlcyIsIGtleSk7CiAJCQkJcmV0dXJuIDE7CiAJCQl9CiAKQEAgLTY1Myw5ICs3MjYsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHdyaXRlX2Vycm9yKHZvaWQpCitzdGF0aWMgaW50IHdyaXRlX2Vycm9yKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewotCWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHdyaXRlIG5ldyBjb25maWd1cmF0aW9uIGZpbGVcbiIpOworCWVycm9yKCJmYWlsZWQgdG8gd3JpdGUgbmV3IGNvbmZpZ3VyYXRpb24gZmlsZSAlcyIsIGZpbGVuYW1lKTsKIAogCS8qIFNhbWUgZXJyb3IgY29kZSBhcyAiZmFpbGVkIHRvIHJlbmFtZSIuICovCiAJcmV0dXJuIDQ7CkBAIC02NzIsNyArNzQ1LDcgQEAKIAlpZiAoZG90KSB7CiAJCXN0cmJ1Zl9hZGRmKCZzYiwgIlslLipzIFwiIiwgKGludCkoZG90IC0ga2V5KSwga2V5KTsKIAkJZm9yIChpID0gZG90IC0ga2V5ICsgMTsgaSA8IHN0b3JlLmJhc2VsZW47IGkrKykgewotCQkJaWYgKGtleVtpXSA9PSAnIicpCisJCQlpZiAoa2V5W2ldID09ICciJyB8fCBrZXlbaV0gPT0gJ1xcJykKIAkJCQlzdHJidWZfYWRkY2goJnNiLCAnXFwnKTsKIAkJCXN0cmJ1Zl9hZGRjaCgmc2IsIGtleVtpXSk7CiAJCX0KQEAgLTgxNCw3ICs4ODcsNyBAQAogCSAqLwogCiAJaWYgKGxhc3RfZG90ID09IE5VTEwpIHsKLQkJZnByaW50ZihzdGRlcnIsICJrZXkgZG9lcyBub3QgY29udGFpbiBhIHNlY3Rpb246ICVzXG4iLCBrZXkpOworCQllcnJvcigia2V5IGRvZXMgbm90IGNvbnRhaW4gYSBzZWN0aW9uOiAlcyIsIGtleSk7CiAJCXJldCA9IDI7CiAJCWdvdG8gb3V0X2ZyZWU7CiAJfQpAQCAtODM0LDE0ICs5MDcsMTQgQEAKIAkJLyogTGVhdmUgdGhlIGV4dGVuZGVkIGJhc2VuYW1lIHVudG91Y2hlZC4uICovCiAJCWlmICghZG90IHx8IGkgPiBzdG9yZS5iYXNlbGVuKSB7CiAJCQlpZiAoIWlza2V5Y2hhcihjKSB8fCAoaSA9PSBzdG9yZS5iYXNlbGVuKzEgJiYgIWlzYWxwaGEoYykpKSB7Ci0JCQkJZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIGtleTogJXNcbiIsIGtleSk7CisJCQkJZXJyb3IoImludmFsaWQga2V5OiAlcyIsIGtleSk7CiAJCQkJZnJlZShzdG9yZS5rZXkpOwogCQkJCXJldCA9IDE7CiAJCQkJZ290byBvdXRfZnJlZTsKIAkJCX0KIAkJCWMgPSB0b2xvd2VyKGMpOwogCQl9IGVsc2UgaWYgKGMgPT0gJ1xuJykgewotCQkJZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIGtleSAobmV3bGluZSk6ICVzXG4iLCBrZXkpOworCQkJZXJyb3IoImludmFsaWQga2V5IChuZXdsaW5lKTogJXMiLCBrZXkpOwogCQkJZnJlZShzdG9yZS5rZXkpOwogCQkJcmV0ID0gMTsKIAkJCWdvdG8gb3V0X2ZyZWU7CkBAIC04NTcsNyArOTMwLDcgQEAKIAlsb2NrID0geGNhbGxvYyhzaXplb2Yoc3RydWN0IGxvY2tfZmlsZSksIDEpOwogCWZkID0gaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZShsb2NrLCBjb25maWdfZmlsZW5hbWUsIDApOwogCWlmIChmZCA8IDApIHsKLQkJZnByaW50ZihzdGRlcnIsICJjb3VsZCBub3QgbG9jayBjb25maWcgZmlsZVxuIik7CisJCWVycm9yKCJjb3VsZCBub3QgbG9jayBjb25maWcgZmlsZSAlcyIsIGNvbmZpZ19maWxlbmFtZSk7CiAJCWZyZWUoc3RvcmUua2V5KTsKIAkJcmV0ID0gLTE7CiAJCWdvdG8gb3V0X2ZyZWU7CkBAIC05MDQsOCArOTc3LDcgQEAKIAkJCXN0b3JlLnZhbHVlX3JlZ2V4ID0gKHJlZ2V4X3QqKXhtYWxsb2Moc2l6ZW9mKHJlZ2V4X3QpKTsKIAkJCWlmIChyZWdjb21wKHN0b3JlLnZhbHVlX3JlZ2V4LCB2YWx1ZV9yZWdleCwKIAkJCQkJUkVHX0VYVEVOREVEKSkgewotCQkJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBwYXR0ZXJuOiAlc1xuIiwKLQkJCQkJdmFsdWVfcmVnZXgpOworCQkJCWVycm9yKCJpbnZhbGlkIHBhdHRlcm46ICVzIiwgdmFsdWVfcmVnZXgpOwogCQkJCWZyZWUoc3RvcmUudmFsdWVfcmVnZXgpOwogCQkJCXJldCA9IDY7CiAJCQkJZ290byBvdXRfZnJlZTsKQEAgLTkyMiw4ICs5OTQsOCBAQAogCQkgKiBBcyBhIHNpZGUgZWZmZWN0LCB3ZSBtYWtlIHN1cmUgdG8gdHJhbnNmb3JtIG9ubHkgYSB2YWxpZAogCQkgKiBleGlzdGluZyBjb25maWcgZmlsZS4KIAkJICovCi0JCWlmIChnaXRfY29uZmlnX2Zyb21fZmlsZShzdG9yZV9hdXgsIGNvbmZpZ19maWxlbmFtZSkpIHsKLQkJCWZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBjb25maWcgZmlsZVxuIik7CisJCWlmIChnaXRfY29uZmlnX2Zyb21fZmlsZShzdG9yZV9hdXgsIGNvbmZpZ19maWxlbmFtZSwgTlVMTCkpIHsKKwkJCWVycm9yKCJpbnZhbGlkIGNvbmZpZyBmaWxlICVzIiwgY29uZmlnX2ZpbGVuYW1lKTsKIAkJCWZyZWUoc3RvcmUua2V5KTsKIAkJCWlmIChzdG9yZS52YWx1ZV9yZWdleCAhPSBOVUxMKSB7CiAJCQkJcmVnZnJlZShzdG9yZS52YWx1ZV9yZWdleCk7CkBAIC0xMDAyLDcgKzEwNzQsNyBAQAogCX0KIAogCWlmIChjb21taXRfbG9ja19maWxlKGxvY2spIDwgMCkgewotCQlmcHJpbnRmKHN0ZGVyciwgIkNhbm5vdCBjb21taXQgY29uZmlnIGZpbGUhXG4iKTsKKwkJZXJyb3IoImNvdWxkIG5vdCBjb21taXQgY29uZmlnIGZpbGUgJXMiLCBjb25maWdfZmlsZW5hbWUpOwogCQlyZXQgPSA0OwogCQlnb3RvIG91dF9mcmVlOwogCX0KQEAgLTEwMjMsNyArMTA5NSw3IEBACiAJcmV0dXJuIHJldDsKIAogd3JpdGVfZXJyX291dDoKLQlyZXQgPSB3cml0ZV9lcnJvcigpOworCXJldCA9IHdyaXRlX2Vycm9yKGxvY2stPmZpbGVuYW1lKTsKIAlnb3RvIG91dF9mcmVlOwogCiB9CkBAIC0xMDczLDcgKzExNDUsNyBAQAogCWNvbmZpZ19maWxlbmFtZSA9IHhzdHJkdXAoY29uZmlnX2ZpbGVuYW1lKTsKIAlvdXRfZmQgPSBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKGxvY2ssIGNvbmZpZ19maWxlbmFtZSwgMCk7CiAJaWYgKG91dF9mZCA8IDApIHsKLQkJcmV0ID0gZXJyb3IoIkNvdWxkIG5vdCBsb2NrIGNvbmZpZyBmaWxlISIpOworCQlyZXQgPSBlcnJvcigiY291bGQgbm90IGxvY2sgY29uZmlnIGZpbGUgJXMiLCBjb25maWdfZmlsZW5hbWUpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTEwOTcsNyArMTE2OSw3IEBACiAJCQkJfQogCQkJCXN0b3JlLmJhc2VsZW4gPSBzdHJsZW4obmV3X25hbWUpOwogCQkJCWlmICghc3RvcmVfd3JpdGVfc2VjdGlvbihvdXRfZmQsIG5ld19uYW1lKSkgewotCQkJCQlyZXQgPSB3cml0ZV9lcnJvcigpOworCQkJCQlyZXQgPSB3cml0ZV9lcnJvcihsb2NrLT5maWxlbmFtZSk7CiAJCQkJCWdvdG8gb3V0OwogCQkJCX0KIAkJCQljb250aW51ZTsKQEAgLTExMDgsMTQgKzExODAsMTQgQEAKIAkJCWNvbnRpbnVlOwogCQlsZW5ndGggPSBzdHJsZW4oYnVmKTsKIAkJaWYgKHdyaXRlX2luX2Z1bGwob3V0X2ZkLCBidWYsIGxlbmd0aCkgIT0gbGVuZ3RoKSB7Ci0JCQlyZXQgPSB3cml0ZV9lcnJvcigpOworCQkJcmV0ID0gd3JpdGVfZXJyb3IobG9jay0+ZmlsZW5hbWUpOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9CiAJZmNsb3NlKGNvbmZpZ19maWxlKTsKICB1bmxvY2tfYW5kX291dDoKIAlpZiAoY29tbWl0X2xvY2tfZmlsZShsb2NrKSA8IDApCi0JCQlyZXQgPSBlcnJvcigiQ2Fubm90IGNvbW1pdCBjb25maWcgZmlsZSEiKTsKKwkJcmV0ID0gZXJyb3IoImNvdWxkIG5vdCBjb21taXQgY29uZmlnIGZpbGUgJXMiLCBjb25maWdfZmlsZW5hbWUpOwogIG91dDoKIAlmcmVlKGNvbmZpZ19maWxlbmFtZSk7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCA4MjU4NGU5Li43YzI4NTZlIDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC0xNTgsNyArMTU4LDcgQEAKIEFDX1NVQlNUKE5FRURTX1NTTF9XSVRIX0NSWVBUTykKIEFDX1NVQlNUKE5PX09QRU5TU0wpCiAjCi0jIERlZmluZSBOT19DVVJMIGlmIHlvdSBkbyBub3QgaGF2ZSBjdXJsIGluc3RhbGxlZC4gIGdpdC1odHRwLXB1bGwgYW5kCisjIERlZmluZSBOT19DVVJMIGlmIHlvdSBkbyBub3QgaGF2ZSBsaWJjdXJsIGluc3RhbGxlZC4gIGdpdC1odHRwLXB1bGwgYW5kCiAjIGdpdC1odHRwLXB1c2ggYXJlIG5vdCBidWlsdCwgYW5kIHlvdSBjYW5ub3QgdXNlIGh0dHA6Ly8gYW5kIGh0dHBzOi8vCiAjIHRyYW5zcG9ydHMuCiBBQ19DSEVDS19MSUIoW2N1cmxdLCBbY3VybF9nbG9iYWxfaW5pdF0sCmRpZmYgLS1naXQgYS9jb25uZWN0LmMgYi9jb25uZWN0LmMKaW5kZXggZDEyYjEwNS4uZTkyYWYyOSAxMDA2NDQKLS0tIGEvY29ubmVjdC5jCisrKyBiL2Nvbm5lY3QuYwpAQCAtMzYwLDcgKzM2MCw4IEBACiBzdGF0aWMgY29uc3QgY2hhciAqcmhvc3RfbmFtZTsKIHN0YXRpYyBpbnQgcmhvc3RfbGVuOwogCi1zdGF0aWMgaW50IGdpdF9wcm94eV9jb21tYW5kX29wdGlvbnMoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3N0YXRpYyBpbnQgZ2l0X3Byb3h5X2NvbW1hbmRfb3B0aW9ucyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLAorCQl2b2lkICpjYikKIHsKIAlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLmdpdHByb3h5IikpIHsKIAkJY29uc3QgY2hhciAqZm9yX3BvczsKQEAgLTQwNCw3ICs0MDUsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUpOworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOwogfQogCiBzdGF0aWMgaW50IGdpdF91c2VfcHJveHkoY29uc3QgY2hhciAqaG9zdCkKQEAgLTQxMiw3ICs0MTMsNyBAQAogCXJob3N0X25hbWUgPSBob3N0OwogCXJob3N0X2xlbiA9IHN0cmxlbihob3N0KTsKIAlnaXRfcHJveHlfY29tbWFuZCA9IGdldGVudigiR0lUX1BST1hZX0NPTU1BTkQiKTsKLQlnaXRfY29uZmlnKGdpdF9wcm94eV9jb21tYW5kX29wdGlvbnMpOworCWdpdF9jb25maWcoZ2l0X3Byb3h5X2NvbW1hbmRfb3B0aW9ucywgTlVMTCk7CiAJcmhvc3RfbmFtZSA9IE5VTEw7CiAJcmV0dXJuIChnaXRfcHJveHlfY29tbWFuZCAmJiAqZ2l0X3Byb3h5X2NvbW1hbmQpOwogfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2ggYi9jb250cmliL2NvbXBsZXRpb24vZ2l0LWNvbXBsZXRpb24uYmFzaAppbmRleCA2OTQ5Y2FjLi43MmYwMmYyIDEwMDc1NQotLS0gYS9jb250cmliL2NvbXBsZXRpb24vZ2l0LWNvbXBsZXRpb24uYmFzaAorKysgYi9jb250cmliL2NvbXBsZXRpb24vZ2l0LWNvbXBsZXRpb24uYmFzaApAQCAtNDUsNiArNDUsMTEgQEAKICMgICAgICAgZ2l0QHZnZXIua2VybmVsLm9yZwogIwogCitjYXNlICIkQ09NUF9XT1JEQlJFQUtTIiBpbgorKjoqKSA6IGdyZWF0IDs7CisqKSAgIENPTVBfV09SREJSRUFLUz0iJENPTVBfV09SREJSRUFLUzoiCitlc2FjCisKIF9fZ2l0ZGlyICgpCiB7CiAJaWYgWyAteiAiJDEiIF07IHRoZW4KQEAgLTExNCw5ICsxMTksMjAgQEAKIAlmaQogfQogCitfX2dpdGNvbXBfMSAoKQoreworCWxvY2FsIGMgSUZTPScgJyQnXHQnJCdcbicKKwlmb3IgYyBpbiAkMTsgZG8KKwkJY2FzZSAiJGMkMiIgaW4KKwkJLS0qPSopIHByaW50ZiAlcyQnXG4nICIkYyQyIiA7OworCQkqLikgICAgcHJpbnRmICVzJCdcbicgIiRjJDIiIDs7CisJCSopICAgICBwcmludGYgJXMkJ1xuJyAiJGMkMiAiIDs7CisJCWVzYWMKKwlkb25lCit9CisKIF9fZ2l0Y29tcCAoKQogewotCWxvY2FsIGFsbCBjIHM9JCdcbicgSUZTPScgJyQnXHQnJCdcbicKIAlsb2NhbCBjdXI9IiR7Q09NUF9XT1JEU1tDT01QX0NXT1JEXX0iCiAJaWYgWyAkIyAtZ3QgMiBdOyB0aGVuCiAJCWN1cj0iJDMiCkBAIC0xMjQsMjEgKzE0MCwxNCBAQAogCWNhc2UgIiRjdXIiIGluCiAJLS0qPSkKIAkJQ09NUFJFUExZPSgpCi0JCXJldHVybgogCQk7OwogCSopCi0JCWZvciBjIGluICQxOyBkbwotCQkJY2FzZSAiJGMkNCIgaW4KLQkJCS0tKj0qKSBhbGw9IiRhbGwkYyQ0JHMiIDs7Ci0JCQkqLikgICAgYWxsPSIkYWxsJGMkNCRzIiA7OwotCQkJKikgICAgIGFsbD0iJGFsbCRjJDQgJHMiIDs7Ci0JCQllc2FjCi0JCWRvbmUKKwkJbG9jYWwgSUZTPSQnXG4nCisJCUNPTVBSRVBMWT0oJChjb21wZ2VuIC1QICIkMiIgXAorCQkJLVcgIiQoX19naXRjb21wXzEgIiQxIiAiJDQiKSIgXAorCQkJLS0gIiRjdXIiKSkKIAkJOzsKIAllc2FjCi0JSUZTPSRzCi0JQ09NUFJFUExZPSgkKGNvbXBnZW4gLVAgIiQyIiAtVyAiJGFsbCIgLS0gIiRjdXIiKSkKLQlyZXR1cm4KIH0KIAogX19naXRfaGVhZHMgKCkKQEAgLTE1Miw3ICsxNjEsNyBAQAogCQlkb25lCiAJCXJldHVybgogCWZpCi0JZm9yIGkgaW4gJChnaXQtbHMtcmVtb3RlICIkMSIgMj4vZGV2L251bGwpOyBkbworCWZvciBpIGluICQoZ2l0IGxzLXJlbW90ZSAiJDEiIDI+L2Rldi9udWxsKTsgZG8KIAkJY2FzZSAiJGlzX2hhc2gsJGkiIGluCiAJCXksKikgaXNfaGFzaD1uIDs7CiAJCW4sKl57fSkgaXNfaGFzaD15IDs7CkBAIC0xNzMsNyArMTgyLDcgQEAKIAkJZG9uZQogCQlyZXR1cm4KIAlmaQotCWZvciBpIGluICQoZ2l0LWxzLXJlbW90ZSAiJDEiIDI+L2Rldi9udWxsKTsgZG8KKwlmb3IgaSBpbiAkKGdpdCBscy1yZW1vdGUgIiQxIiAyPi9kZXYvbnVsbCk7IGRvCiAJCWNhc2UgIiRpc19oYXNoLCRpIiBpbgogCQl5LCopIGlzX2hhc2g9biA7OwogCQluLCpee30pIGlzX2hhc2g9eSA7OwpAQCAtMjAwLDcgKzIwOSw3IEBACiAJCWRvbmUKIAkJcmV0dXJuCiAJZmkKLQlmb3IgaSBpbiAkKGdpdC1scy1yZW1vdGUgIiRkaXIiIDI+L2Rldi9udWxsKTsgZG8KKwlmb3IgaSBpbiAkKGdpdCBscy1yZW1vdGUgIiRkaXIiIDI+L2Rldi9udWxsKTsgZG8KIAkJY2FzZSAiJGlzX2hhc2gsJGkiIGluCiAJCXksKikgaXNfaGFzaD1uIDs7CiAJCW4sKl57fSkgaXNfaGFzaD15IDs7CkBAIC0yMjMsNyArMjMyLDcgQEAKIF9fZ2l0X3JlZnNfcmVtb3RlcyAoKQogewogCWxvY2FsIGNtZCBpIGlzX2hhc2g9eQotCWZvciBpIGluICQoZ2l0LWxzLXJlbW90ZSAiJDEiIDI+L2Rldi9udWxsKTsgZG8KKwlmb3IgaSBpbiAkKGdpdCBscy1yZW1vdGUgIiQxIiAyPi9kZXYvbnVsbCk7IGRvCiAJCWNhc2UgIiRpc19oYXNoLCRpIiBpbgogCQluLHJlZnMvaGVhZHMvKikKIAkJCWlzX2hhc2g9eQpAQCAtMjkwLDkgKzI5OSwyMyBAQAogCQkJbHM9IiRyZWYiCiAJCQk7OwogCSAgICBlc2FjCisKKwkJY2FzZSAiJENPTVBfV09SREJSRUFLUyIgaW4KKwkJKjoqKSA6IGdyZWF0IDs7CisJCSopICAgcGZ4PSIkcmVmOiRwZngiIDs7CisJCWVzYWMKKworCQlsb2NhbCBJRlM9JCdcbicKIAkJQ09NUFJFUExZPSgkKGNvbXBnZW4gLVAgIiRwZngiIFwKIAkJCS1XICIkKGdpdCAtLWdpdC1kaXI9IiQoX19naXRkaXIpIiBscy10cmVlICIkbHMiIFwKLQkJCQl8IHNlZCAnL14xMDAuLi4gYmxvYiAvcyxeLioJLCwKKwkJCQl8IHNlZCAnL14xMDAuLi4gYmxvYiAveworCQkJCSAgICAgICAgICAgcyxeLioJLCwKKwkJCQkgICAgICAgICAgIHMsJCwgLAorCQkJCSAgICAgICB9CisJCQkJICAgICAgIC9eMTIwMDAwIGJsb2IgL3sKKwkJCQkgICAgICAgICAgIHMsXi4qCSwsCisJCQkJICAgICAgICAgICBzLCQsICwKKwkJCQkgICAgICAgfQogCQkJCSAgICAgICAvXjA0MDAwMCB0cmVlIC97CiAJCQkJICAgICAgICAgICBzLF4uKgksLAogCQkJCSAgICAgICAgICAgcywkLC8sCkBAIC0zMjAsOSArMzQzLDYgQEAKIAkJY3VyPSIke2N1ciMqLi59IgogCQlfX2dpdGNvbXAgIiQoX19naXRfcmVmcykiICIkcGZ4IiAiJGN1ciIKIAkJOzsKLQkqLikKLQkJX19naXRjb21wICIkY3VyLiIKLQkJOzsKIAkqKQogCQlfX2dpdGNvbXAgIiQoX19naXRfcmVmcykiCiAJCTs7CkBAIC00NTEsNiArNDcxLDE4IEBACiAJZG9uZQogfQogCitfX2dpdF9oYXNfZG91YmxlZGFzaCAoKQoreworCWxvY2FsIGM9MQorCXdoaWxlIFsgJGMgLWx0ICRDT01QX0NXT1JEIF07IGRvCisJCWlmIFsgIi0tIiA9ICIke0NPTVBfV09SRFNbY119IiBdOyB0aGVuCisJCQlyZXR1cm4gMAorCQlmaQorCQljPSQoKCsrYykpCisJZG9uZQorCXJldHVybiAxCit9CisKIF9fZ2l0X3doaXRlc3BhY2VsaXN0PSJub3dhcm4gd2FybiBlcnJvciBlcnJvci1hbGwgc3RyaXAiCiAKIF9naXRfYW0gKCkKQEAgLTQ5NywxMCArNTI5LDE1IEBACiAKIF9naXRfYWRkICgpCiB7CisJX19naXRfaGFzX2RvdWJsZWRhc2ggJiYgcmV0dXJuCisKIAlsb2NhbCBjdXI9IiR7Q09NUF9XT1JEU1tDT01QX0NXT1JEXX0iCiAJY2FzZSAiJGN1ciIgaW4KIAktLSopCi0JCV9fZ2l0Y29tcCAiLS1pbnRlcmFjdGl2ZSAtLXJlZnJlc2giCisJCV9fZ2l0Y29tcCAiCisJCQktLWludGVyYWN0aXZlIC0tcmVmcmVzaCAtLXBhdGNoIC0tdXBkYXRlIC0tZHJ5LXJ1bgorCQkJLS1pZ25vcmUtZXJyb3JzCisJCQkiCiAJCXJldHVybgogCWVzYWMKIAlDT01QUkVQTFk9KCkKQEAgLTUwOCw2ICs1NDUsOCBAQAogCiBfZ2l0X2Jpc2VjdCAoKQogeworCV9fZ2l0X2hhc19kb3VibGVkYXNoICYmIHJldHVybgorCiAJbG9jYWwgc3ViY29tbWFuZHM9InN0YXJ0IGJhZCBnb29kIHJlc2V0IHZpc3VhbGl6ZSByZXBsYXkgbG9nIgogCWxvY2FsIHN1YmNvbW1hbmQ9IiQoX19naXRfZmluZF9zdWJjb21tYW5kICIkc3ViY29tbWFuZHMiKSIKIAlpZiBbIC16ICIkc3ViY29tbWFuZCIgXTsgdGhlbgpAQCAtNjEwLDYgKzY0OSw4IEBACiAKIF9naXRfY29tbWl0ICgpCiB7CisJX19naXRfaGFzX2RvdWJsZWRhc2ggJiYgcmV0dXJuCisKIAlsb2NhbCBjdXI9IiR7Q09NUF9XT1JEU1tDT01QX0NXT1JEXX0iCiAJY2FzZSAiJGN1ciIgaW4KIAktLSopCkBAIC02MjksNiArNjcwLDggQEAKIAogX2dpdF9kaWZmICgpCiB7CisJX19naXRfaGFzX2RvdWJsZWRhc2ggJiYgcmV0dXJuCisKIAlsb2NhbCBjdXI9IiR7Q09NUF9XT1JEU1tDT01QX0NXT1JEXX0iCiAJY2FzZSAiJGN1ciIgaW4KIAktLSopCkBAIC02NjgsNyArNzExLDEyIEBACiAJKikKIAkJY2FzZSAiJGN1ciIgaW4KIAkJKjoqKQotCQkJX19naXRjb21wICIkKF9fZ2l0X3JlZnMpIiAiIiAiJHtjdXIjKjp9IgorCQkJbG9jYWwgcGZ4PSIiCisJCQljYXNlICIkQ09NUF9XT1JEQlJFQUtTIiBpbgorCQkJKjoqKSA6IGdyZWF0IDs7CisJCQkqKSAgIHBmeD0iJHtjdXIlJToqfToiIDs7CisJCQllc2FjCisJCQlfX2dpdGNvbXAgIiQoX19naXRfcmVmcykiICIkcGZ4IiAiJHtjdXIjKjp9IgogCQkJOzsKIAkJKikKIAkJCWxvY2FsIHJlbW90ZQpAQCAtNzMxLDYgKzc3OSw4IEBACiAKIF9naXRfbG9nICgpCiB7CisJX19naXRfaGFzX2RvdWJsZWRhc2ggJiYgcmV0dXJuCisKIAlsb2NhbCBjdXI9IiR7Q09NUF9XT1JEU1tDT01QX0NXT1JEXX0iCiAJY2FzZSAiJGN1ciIgaW4KIAktLXByZXR0eT0qKQpAQCAtNzU4LDYgKzgwOCw3IEBACiAJCQktLXByZXR0eT0gLS1uYW1lLXN0YXR1cyAtLW5hbWUtb25seSAtLXJhdwogCQkJLS1ub3QgLS1hbGwKIAkJCS0tbGVmdC1yaWdodCAtLWNoZXJyeS1waWNrCisJCQktLWdyYXBoCiAJCQkiCiAJCXJldHVybgogCQk7OwpAQCAtNzgwLDcgKzgzMSw3IEBACiAJCTs7CiAJLS0qKQogCQlfX2dpdGNvbXAgIgotCQkJLS1uby1jb21taXQgLS1uby1zdW1tYXJ5IC0tc3F1YXNoIC0tc3RyYXRlZ3kKKwkJCS0tbm8tY29tbWl0IC0tbm8tc3RhdCAtLWxvZyAtLW5vLWxvZyAtLXNxdWFzaCAtLXN0cmF0ZWd5CiAJCQkiCiAJCXJldHVybgogCWVzYWMKQEAgLTgzOCw3ICs4ODksMTQgQEAKIAkJCWdpdC1wdXNoKSAgcmVtb3RlPSIke0NPTVBfV09SRFNbMV19IiA7OwogCQkJZ2l0KSAgICAgICByZW1vdGU9IiR7Q09NUF9XT1JEU1syXX0iIDs7CiAJCQllc2FjCi0JCQlfX2dpdGNvbXAgIiQoX19naXRfcmVmcyAiJHJlbW90ZSIpIiAiIiAiJHtjdXIjKjp9IgorCisJCQlsb2NhbCBwZng9IiIKKwkJCWNhc2UgIiRDT01QX1dPUkRCUkVBS1MiIGluCisJCQkqOiopIDogZ3JlYXQgOzsKKwkJCSopICAgcGZ4PSIke2N1ciUlOip9OiIgOzsKKwkJCWVzYWMKKworCQkJX19naXRjb21wICIkKF9fZ2l0X3JlZnMgIiRyZW1vdGUiKSIgIiRwZngiICIke2N1ciMqOn0iCiAJCQk7OwogCQkrKikKIAkJCV9fZ2l0Y29tcCAiJChfX2dpdF9yZWZzKSIgKyAiJHtjdXIjK30iCkBAIC0xMDUzLDYgKzExMTEsNyBAQAogCWxvY2FsIHN1YmNvbW1hbmRzPSJhZGQgcm0gc2hvdyBwcnVuZSB1cGRhdGUiCiAJbG9jYWwgc3ViY29tbWFuZD0iJChfX2dpdF9maW5kX3N1YmNvbW1hbmQgIiRzdWJjb21tYW5kcyIpIgogCWlmIFsgLXogIiRzdWJjb21tYW5kIiBdOyB0aGVuCisJCV9fZ2l0Y29tcCAiJHN1YmNvbW1hbmRzIgogCQlyZXR1cm4KIAlmaQogCkBAIC0xMDgwLDYgKzExMzksOCBAQAogCiBfZ2l0X3Jlc2V0ICgpCiB7CisJX19naXRfaGFzX2RvdWJsZWRhc2ggJiYgcmV0dXJuCisKIAlsb2NhbCBjdXI9IiR7Q09NUF9XT1JEU1tDT01QX0NXT1JEXX0iCiAJY2FzZSAiJGN1ciIgaW4KIAktLSopCkBAIC0xMDkyLDYgKzExNTMsOCBAQAogCiBfZ2l0X3Nob3J0bG9nICgpCiB7CisJX19naXRfaGFzX2RvdWJsZWRhc2ggJiYgcmV0dXJuCisKIAlsb2NhbCBjdXI9IiR7Q09NUF9XT1JEU1tDT01QX0NXT1JEXX0iCiAJY2FzZSAiJGN1ciIgaW4KIAktLSopCkBAIC0xMTM4LDYgKzEyMDEsOCBAQAogCiBfZ2l0X3N1Ym1vZHVsZSAoKQogeworCV9fZ2l0X2hhc19kb3VibGVkYXNoICYmIHJldHVybgorCiAJbG9jYWwgc3ViY29tbWFuZHM9ImFkZCBzdGF0dXMgaW5pdCB1cGRhdGUiCiAJaWYgWyAteiAiJChfX2dpdF9maW5kX3N1YmNvbW1hbmQgIiRzdWJjb21tYW5kcyIpIiBdOyB0aGVuCiAJCWxvY2FsIGN1cj0iJHtDT01QX1dPUkRTW0NPTVBfQ1dPUkRdfSIKQEAgLTEzNDQsMTAgKzE0MDksMTcgQEAKIAogX2dpdGsgKCkKIHsKKwlfX2dpdF9oYXNfZG91YmxlZGFzaCAmJiByZXR1cm4KKwogCWxvY2FsIGN1cj0iJHtDT01QX1dPUkRTW0NPTVBfQ1dPUkRdfSIKKwlsb2NhbCBnPSIkKGdpdCByZXYtcGFyc2UgLS1naXQtZGlyIDI+L2Rldi9udWxsKSIKKwlsb2NhbCBtZXJnZT0iIgorCWlmIFsgLWYgJGcvTUVSR0VfSEVBRCBdOyB0aGVuCisJCW1lcmdlPSItLW1lcmdlIgorCWZpCiAJY2FzZSAiJGN1ciIgaW4KIAktLSopCi0JCV9fZ2l0Y29tcCAiLS1ub3QgLS1hbGwiCisJCV9fZ2l0Y29tcCAiLS1ub3QgLS1hbGwgJG1lcmdlIgogCQlyZXR1cm4KIAkJOzsKIAllc2FjCmRpZmYgLS1naXQgYS9naXQtY2xvbmUuc2ggYi9jb250cmliL2V4YW1wbGVzL2dpdC1jbG9uZS5zaApzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBnaXQtY2xvbmUuc2gKcmVuYW1lIHRvIGNvbnRyaWIvZXhhbXBsZXMvZ2l0LWNsb25lLnNoCmluZGV4IDhjN2ZjN2YuLjU0NzIyOGUgMTAwNzU1Ci0tLSBhL2dpdC1jbG9uZS5zaAorKysgYi9jb250cmliL2V4YW1wbGVzL2dpdC1jbG9uZS5zaApAQCAtMjQwLDcgKzI0MCw2IEBACiBEPQogVz0KIGNsZWFudXAoKSB7Ci0JZXJyPSQ/CiAJdGVzdCAteiAiJEQiICYmIHJtIC1yZiAiJGRpciIKIAl0ZXN0IC16ICIkVyIgJiYgdGVzdCAtbiAiJEdJVF9XT1JLX1RSRUUiICYmIHJtIC1yZiAiJEdJVF9XT1JLX1RSRUUiCiAJY2QgLi4KQEAgLTI0OCw3ICsyNDcsNyBAQAogCXRlc3QgLW4gIiRXIiAmJiBybSAtcmYgIiRXIgogCWV4aXQgJGVycgogfQotdHJhcCBjbGVhbnVwIDAKK3RyYXAgJ2Vycj0kPzsgY2xlYW51cCcgMAogbWtkaXIgLXAgIiRkaXIiICYmIEQ9JChjZCAiJGRpciIgJiYgcHdkKSB8fCB1c2FnZQogdGVzdCAtbiAiJEdJVF9XT1JLX1RSRUUiICYmIG1rZGlyIC1wICIkR0lUX1dPUktfVFJFRSIgJiYKIFc9JChjZCAiJEdJVF9XT1JLX1RSRUUiICYmIHB3ZCkgJiYgR0lUX1dPUktfVFJFRT0iJFciICYmIGV4cG9ydCBHSVRfV09SS19UUkVFCkBAIC0zMzQsNyArMzMzLDEwIEBACiAJCQlmaQogCQlmaSAmJgogCQljZCAiJHJlcG8iICYmCi0JCWZpbmQgb2JqZWN0cyAtZGVwdGggLXByaW50IHwgY3BpbyAkY3Bpb19xdWlldF9mbGFnIC1wdW1kJGwgIiRHSVRfRElSLyIgfHwgXAorCQkjIENyZWF0ZSBkaXJzIHVzaW5nIHVtYXNrIGFuZCBwZXJtaXNzaW9ucyBhbmQgZGVzdGluYXRpb24KKwkJZmluZCBvYmplY3RzIC10eXBlIGQgLXByaW50IHwgKGNkICIkR0lUX0RJUiIgJiYgeGFyZ3MgbWtkaXIgLXApICYmCisJCSMgQ29weSBleGlzdGluZyAwNDQ0IHBlcm1pc3Npb25zIG9uIGNvbnRlbnQKKwkJZmluZCBvYmplY3RzICEgLXR5cGUgZCAtcHJpbnQgfCBjcGlvICRjcGlvX3F1aWV0X2ZsYWcgLXB1bWQkbCAiJEdJVF9ESVIvIiB8fCBcCiAJCQlleGl0IDEKIAlmaQogCWdpdC1scy1yZW1vdGUgIiRyZXBvIiA+IiRHSVRfRElSL0NMT05FX0hFQUQiIHx8IGV4aXQgMQpkaWZmIC0tZ2l0IGEvY29udHJpYi9oZy10by1naXQvaGctdG8tZ2l0LnB5IGIvY29udHJpYi9oZy10by1naXQvaGctdG8tZ2l0LnB5CmluZGV4IGQ3MmZmYmIuLmY2OGVmNzIgMTAwNzU1Ci0tLSBhL2NvbnRyaWIvaGctdG8tZ2l0L2hnLXRvLWdpdC5weQorKysgYi9jb250cmliL2hnLXRvLWdpdC9oZy10by1naXQucHkKQEAgLTQ2LDYgKzQ2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaW5jcmVtZW50YWxzCiAgICAgLW4sIC0tbnJlcGFjaz1JTlQ6ICAgbnVtYmVyIG9mIGNoYW5nZXNldHMgdGhhdCB3aWxsIHRyaWdnZXIKICAgICAgICAgICAgICAgICAgICAgICAgICBhIHJlcGFjayAoZGVmYXVsdD0wLCAtMSB0byBkZWFjdGl2YXRlKQorICAgIC12LCAtLXZlcmJvc2U6ICAgICAgIGJlIHZlcmJvc2UKIAogcmVxdWlyZWQ6CiAgICAgaGdwcmo6ICBuYW1lIG9mIHRoZSBIRyBwcm9qZWN0IHRvIGltcG9ydCAoZGlyZWN0b3J5KQpAQCAtNzUsMTUgKzc2LDE4IEBACiAKIHN0YXRlID0gJycKIG9wdF9ucmVwYWNrID0gMAordmVyYm9zZSA9IEZhbHNlCiAKIHRyeToKLSAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICdzOnQ6bjonLCBbJ2dpdHN0YXRlPScsICd0ZW1wZGlyPScsICducmVwYWNrPSddKQorICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgJ3M6dDpuOnYnLCBbJ2dpdHN0YXRlPScsICd0ZW1wZGlyPScsICducmVwYWNrPScsICd2ZXJib3NlJ10pCiAgICAgZm9yIG8sIGEgaW4gb3B0czoKICAgICAgICAgaWYgbyBpbiAoJy1zJywgJy0tZ2l0c3RhdGUnKToKICAgICAgICAgICAgIHN0YXRlID0gYQogICAgICAgICAgICAgc3RhdGUgPSBvcy5wYXRoLmFic3BhdGgoc3RhdGUpCiAgICAgICAgIGlmIG8gaW4gKCctbicsICctLW5yZXBhY2snKToKICAgICAgICAgICAgIG9wdF9ucmVwYWNrID0gaW50KGEpCisgICAgICAgIGlmIG8gaW4gKCctdicsICctLXZlcmJvc2UnKToKKyAgICAgICAgICAgIHZlcmJvc2UgPSBUcnVlCiAgICAgaWYgbGVuKGFyZ3MpICE9IDE6CiAgICAgICAgIHJhaXNlKCdwYXJhbXMnKQogZXhjZXB0OgpAQCAtOTUsMTcgKzk5LDIwIEBACiAKIGlmIHN0YXRlOgogICAgIGlmIG9zLnBhdGguZXhpc3RzKHN0YXRlKToKLSAgICAgICAgcHJpbnQgJ1N0YXRlIGRvZXMgZXhpc3QsIHJlYWRpbmcnCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAnU3RhdGUgZG9lcyBleGlzdCwgcmVhZGluZycKICAgICAgICAgZiA9IG9wZW4oc3RhdGUsICdyJykKICAgICAgICAgaGd2ZXJzID0gcGlja2xlLmxvYWQoZikKICAgICBlbHNlOgogICAgICAgICBwcmludCAnU3RhdGUgZG9lcyBub3QgZXhpc3QsIGZpcnN0IHJ1bicKIAogdGlwID0gb3MucG9wZW4oJ2hnIHRpcCAtLXRlbXBsYXRlICJ7cmV2fSInKS5yZWFkKCkKLXByaW50ICd0aXAgaXMnLCB0aXAKK2lmIHZlcmJvc2U6CisgICAgcHJpbnQgJ3RpcCBpcycsIHRpcAogCiAjIENhbGN1bGF0ZSB0aGUgYnJhbmNoZXMKLXByaW50ICdhbmFseXNpbmcgdGhlIGJyYW5jaGVzLi4uJworaWYgdmVyYm9zZToKKyAgICBwcmludCAnYW5hbHlzaW5nIHRoZSBicmFuY2hlcy4uLicKIGhnY2hpbGRyZW5bIjAiXSA9ICgpCiBoZ3BhcmVudHNbIjAiXSA9IChOb25lLCBOb25lKQogaGdicmFuY2hbIjAiXSA9ICJtYXN0ZXIiCkBAIC0yMzIsNyArMjM5LDggQEAKIAogIyB3cml0ZSB0aGUgc3RhdGUgZm9yIGluY3JlbWVudGFscwogaWYgc3RhdGU6Ci0gICAgcHJpbnQgJ1dyaXRpbmcgc3RhdGUnCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQgJ1dyaXRpbmcgc3RhdGUnCiAgICAgZiA9IG9wZW4oc3RhdGUsICd3JykKICAgICBwaWNrbGUuZHVtcChoZ3ZlcnMsIGYpCiAKZGlmZiAtLWdpdCBhL2NvbnRyaWIvaG9va3MvcHJlLWF1dG8tZ2MtYmF0dGVyeSBiL2NvbnRyaWIvaG9va3MvcHJlLWF1dG8tZ2MtYmF0dGVyeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDk2ZjU3Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9ob29rcy9wcmUtYXV0by1nYy1iYXR0ZXJ5CkBAIC0wLDAgKzEsMzYgQEAKKyMhL2Jpbi9zaAorIworIyBBbiBleGFtcGxlIGhvb2sgc2NyaXB0IHRvIHZlcmlmeSBpZiB5b3UgYXJlIG9uIGJhdHRlcnksIGluIGNhc2UgeW91CisjIGFyZSBydW5uaW5nIExpbnV4LiBDYWxsZWQgYnkgZ2l0LWdjIC0tYXV0byB3aXRoIG5vIGFyZ3VtZW50cy4gVGhlIGhvb2sKKyMgc2hvdWxkIGV4aXQgd2l0aCBub24temVybyBzdGF0dXMgYWZ0ZXIgaXNzdWluZyBhbiBhcHByb3ByaWF0ZSBtZXNzYWdlCisjIGlmIGl0IHdhbnRzIHRvIHN0b3AgdGhlIGF1dG8gcmVwYWNraW5nLgorIworIyBUaGlzIGhvb2sgaXMgc3RvcmVkIGluIHRoZSBjb250cmliL2hvb2tzIGRpcmVjdG9yeS4gWW91ciBkaXN0cmlidXRpb24KKyMgbWF5IGhhdmUgcHV0IHRoaXMgc29tZXdoZXJlIGVsc2UuIElmIHlvdSB3YW50IHRvIHVzZSB0aGlzIGhvb2ssIHlvdQorIyBzaG91bGQgbWFrZSB0aGlzIHNjcmlwdCBleGVjdXRhYmxlIHRoZW4gbGluayB0byBpdCBpbiB0aGUgcmVwb3NpdG9yeQorIyB5b3Ugd291bGQgbGlrZSB0byB1c2UgaXQgaW4uCisjCisjIEZvciBleGFtcGxlLCBpZiB0aGUgaG9vayBpcyBzdG9yZWQgaW4KKyMgL3Vzci9zaGFyZS9naXQtY29yZS9jb250cmliL2hvb2tzL3ByZS1hdXRvLWdjLWJhdHRlcnk6CisjCisjIGNobW9kIGEreCBwcmUtYXV0by1nYy1iYXR0ZXJ5CisjIGNkIC9wYXRoL3RvL3lvdXIvcmVwb3NpdG9yeS5naXQKKyMgbG4gLXNmIC91c3Ivc2hhcmUvZ2l0LWNvcmUvY29udHJpYi9ob29rcy9wcmUtYXV0by1nYy1iYXR0ZXJ5IFwKKyMJaG9va3MvcHJlLWF1dG8tZ2MKKworaWYgdGVzdCAteCAvc2Jpbi9vbl9hY19wb3dlciAmJiAvc2Jpbi9vbl9hY19wb3dlcgordGhlbgorCWV4aXQgMAorZWxpZiB0ZXN0ICIkKGNhdCAvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS9BQy9vbmxpbmUgMj4vZGV2L251bGwpIiA9IDEKK3RoZW4KKwlleGl0IDAKK2VsaWYgZ3JlcCAtcSAnb24tbGluZScgL3Byb2MvYWNwaS9hY19hZGFwdGVyL0FDL3N0YXRlIDI+L2Rldi9udWxsCit0aGVuCisJZXhpdCAwCitlbGlmIGdyZXAgLXEgJzB4MDEkJyAvcHJvYy9hcG0gMj4vZGV2L251bGwKK3RoZW4KKwlleGl0IDAKK2ZpCisKK2VjaG8gIkF1dG8gcGFja2luZyBkZWZlcnJlZDsgbm90IG9uIEFDIgorZXhpdCAxCmRpZmYgLS1naXQgYS9jb250cmliL2hvb2tzL3VwZGF0ZS1wYXJhbm9pZCBiL2NvbnRyaWIvaG9va3MvdXBkYXRlLXBhcmFub2lkCmluZGV4IDA2OGZhMzcuLmQxOGIzMTcgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvaG9va3MvdXBkYXRlLXBhcmFub2lkCisrKyBiL2NvbnRyaWIvaG9va3MvdXBkYXRlLXBhcmFub2lkCkBAIC0xMzYsNiArMTM2LDcgQEAKIAlsb2NhbCAkRU5We0dJVF9ESVJ9ID0gc2hpZnQ7CiAJbXkgJGJyID0gc2hpZnQ7CiAJbXkgJGZuID0gc2hpZnQ7CisJcmV0dXJuIHVubGVzcyBnaXRfdmFsdWUoJ3Jldi1saXN0JywnLS1tYXgtY291bnQ9MScsJGJyLCctLScsJGZuKTsKIAlpbmZvICJMb2FkaW5nICRicjokZm4iOwogCW9wZW4oSSwnLXwnLCdnaXQnLCdjYXQtZmlsZScsJ2Jsb2InLCIkYnI6JGZuIik7CiAJbXkgJHNlY3Rpb24gPSAnJzsKQEAgLTIyNSwxNCArMjI2LDEyIEBACiAJCWxvY2FsICQvID0gIlwwIjsKIAkJbXkgJXRoaXNfZGlmZjsKIAkJaWYgKCRiYXNlID1+IC9eMHs0MH0kLykgewotCQkJb3BlbihULCctfCcsJ2dpdCcsJ2xzLXRyZWUnLAotCQkJCSctcicsJy0tbmFtZS1vbmx5JywnLXonLAotCQkJCSRuZXcpIG9yIHJldHVybiB1bmRlZjsKLQkJCXdoaWxlICg8VD4pIHsKLQkJCQljaG9wOwotCQkJCSR0aGlzX2RpZmZ7JF99ID0gJ0EnOwotCQkJfQotCQkJY2xvc2UgVCBvciByZXR1cm4gdW5kZWY7CisJCQkjIERvbid0IGxvYWQgdGhlIGRpZmYgYXQgYWxsOyB3ZSBhcmUgbWFraW5nIHRoZQorCQkJIyBicmFuY2ggYW5kIGhhdmUgbm8gYmFzZSB0byBjb21wYXJlIHRvIGluIHRoaXMKKwkJCSMgY2FzZS4gIEEgZmlsZSBsZXZlbCBBQ0wgbWFrZXMgbm8gc2Vuc2UgaW4gdGhpcworCQkJIyBjb250ZXh0LiAgSGF2aW5nIGFuIGVtcHR5IGRpZmYgd2lsbCBhbGxvdyB0aGUKKwkJCSMgYnJhbmNoIGNyZWF0aW9uLgorCQkJIwogCQl9IGVsc2UgewogCQkJb3BlbihULCctfCcsJ2dpdCcsJ2RpZmYtdHJlZScsCiAJCQkJJy1yJywnLS1uYW1lLXN0YXR1cycsJy16JywKQEAgLTI2MCw2ICsyNTksNyBAQAogZGVueSAiQmFkIG9sZCB2YWx1ZSAkb2xkIiB1bmxlc3MgJG9sZCA9fiAvXlthLXowLTldezQwfSQvOwogZGVueSAiQmFkIG5ldyB2YWx1ZSAkbmV3IiB1bmxlc3MgJG5ldyA9fiAvXlthLXowLTldezQwfSQvOwogZGVueSAiQ2Fubm90IGRldGVybWluZSB3aG8geW91IGFyZS4iIHVubGVzcyAkdGhpc191c2VyOworZ3JhbnQgIk5vIGNoYW5nZSByZXF1ZXN0ZWQuIiBpZiAkb2xkIGVxICRuZXc7CiAKICRyZXBvc2l0b3J5X25hbWUgPSBGaWxlOjpTcGVjLT5yZWwyYWJzKCRnaXRfZGlyKTsKICRyZXBvc2l0b3J5X25hbWUgPX4gbSwvKFteL10rKSg/OlwuZ2l0fC9cLmdpdCkkLDsKZGlmZiAtLWdpdCBhL2NvbnZlcnQuYyBiL2NvbnZlcnQuYwppbmRleCBkOGM5NGNiLi4zNTJiNjlkIDEwMDY0NAotLS0gYS9jb252ZXJ0LmMKKysrIGIvY29udmVydC5jCkBAIC0zMTksMTEgKzMxOSwxMSBAQAogc3RhdGljIHN0cnVjdCBjb252ZXJ0X2RyaXZlciB7CiAJY29uc3QgY2hhciAqbmFtZTsKIAlzdHJ1Y3QgY29udmVydF9kcml2ZXIgKm5leHQ7Ci0JY2hhciAqc211ZGdlOwotCWNoYXIgKmNsZWFuOworCWNvbnN0IGNoYXIgKnNtdWRnZTsKKwljb25zdCBjaGFyICpjbGVhbjsKIH0gKnVzZXJfY29udmVydCwgKip1c2VyX2NvbnZlcnRfdGFpbDsKIAotc3RhdGljIGludCByZWFkX2NvbnZlcnRfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCitzdGF0aWMgaW50IHJlYWRfY29udmVydF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCiB7CiAJY29uc3QgY2hhciAqZXAsICpuYW1lOwogCWludCBuYW1lbGVuOwpAQCAtMzU4LDE5ICszNTgsMTIgQEAKIAkgKiBUaGUgY29tbWFuZC1saW5lIHdpbGwgbm90IGJlIGludGVycG9sYXRlZCBpbiBhbnkgd2F5LgogCSAqLwogCi0JaWYgKCFzdHJjbXAoInNtdWRnZSIsIGVwKSkgewotCQlpZiAoIXZhbHVlKQotCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7Ci0JCWRydi0+c211ZGdlID0gc3RyZHVwKHZhbHVlKTsKLQkJcmV0dXJuIDA7Ci0JfQorCWlmICghc3RyY21wKCJzbXVkZ2UiLCBlcCkpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmZHJ2LT5zbXVkZ2UsIHZhciwgdmFsdWUpOwogCi0JaWYgKCFzdHJjbXAoImNsZWFuIiwgZXApKSB7Ci0JCWlmICghdmFsdWUpCi0JCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKLQkJZHJ2LT5jbGVhbiA9IHN0cmR1cCh2YWx1ZSk7Ci0JCXJldHVybiAwOwotCX0KKwlpZiAoIXN0cmNtcCgiY2xlYW4iLCBlcCkpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmZHJ2LT5jbGVhbiwgdmFyLCB2YWx1ZSk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzg1LDcgKzM3OCw3IEBACiAJCWF0dHJfaWRlbnQgPSBnaXRfYXR0cigiaWRlbnQiLCA1KTsKIAkJYXR0cl9maWx0ZXIgPSBnaXRfYXR0cigiZmlsdGVyIiwgNik7CiAJCXVzZXJfY29udmVydF90YWlsID0gJnVzZXJfY29udmVydDsKLQkJZ2l0X2NvbmZpZyhyZWFkX2NvbnZlcnRfY29uZmlnKTsKKwkJZ2l0X2NvbmZpZyhyZWFkX2NvbnZlcnRfY29uZmlnLCBOVUxMKTsKIAl9CiAJY2hlY2tbMF0uYXR0ciA9IGF0dHJfY3JsZjsKIAljaGVja1sxXS5hdHRyID0gYXR0cl9pZGVudDsKQEAgLTU3Niw3ICs1NjksNyBAQAogCXN0cnVjdCBnaXRfYXR0cl9jaGVjayBjaGVja1szXTsKIAlpbnQgY3JsZiA9IENSTEZfR1VFU1M7CiAJaW50IGlkZW50ID0gMCwgcmV0ID0gMDsKLQljaGFyICpmaWx0ZXIgPSBOVUxMOworCWNvbnN0IGNoYXIgKmZpbHRlciA9IE5VTEw7CiAKIAlzZXR1cF9jb252ZXJ0X2NoZWNrKGNoZWNrKTsKIAlpZiAoIWdpdF9jaGVja2F0dHIocGF0aCwgQVJSQVlfU0laRShjaGVjayksIGNoZWNrKSkgewpAQCAtNjA2LDcgKzU5OSw3IEBACiAJc3RydWN0IGdpdF9hdHRyX2NoZWNrIGNoZWNrWzNdOwogCWludCBjcmxmID0gQ1JMRl9HVUVTUzsKIAlpbnQgaWRlbnQgPSAwLCByZXQgPSAwOwotCWNoYXIgKmZpbHRlciA9IE5VTEw7CisJY29uc3QgY2hhciAqZmlsdGVyID0gTlVMTDsKIAogCXNldHVwX2NvbnZlcnRfY2hlY2soY2hlY2spOwogCWlmICghZ2l0X2NoZWNrYXR0cihwYXRoLCBBUlJBWV9TSVpFKGNoZWNrKSwgY2hlY2spKSB7CmRpZmYgLS1naXQgYS9jc3VtLWZpbGUuYyBiL2NzdW0tZmlsZS5jCmluZGV4IDk3MjhhOTkuLmFjZTY0ZjEgMTAwNjQ0Ci0tLSBhL2NzdW0tZmlsZS5jCisrKyBiL2NzdW0tZmlsZS5jCkBAIC0zMiwyMSArMzIsMjQgQEAKIAl9CiB9CiAKLWludCBzaGExY2xvc2Uoc3RydWN0IHNoYTFmaWxlICpmLCB1bnNpZ25lZCBjaGFyICpyZXN1bHQsIGludCBmaW5hbCkKK2ludCBzaGExY2xvc2Uoc3RydWN0IHNoYTFmaWxlICpmLCB1bnNpZ25lZCBjaGFyICpyZXN1bHQsIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlpbnQgZmQ7CiAJdW5zaWduZWQgb2Zmc2V0ID0gZi0+b2Zmc2V0OworCiAJaWYgKG9mZnNldCkgewogCQlTSEExX1VwZGF0ZSgmZi0+Y3R4LCBmLT5idWZmZXIsIG9mZnNldCk7CiAJCXNoYTFmbHVzaChmLCBvZmZzZXQpOwogCQlmLT5vZmZzZXQgPSAwOwogCX0KLQlpZiAoZmluYWwpIHsKKwlpZiAoZmxhZ3MgJiAoQ1NVTV9DTE9TRSB8IENTVU1fRlNZTkMpKSB7CiAJCS8qIHdyaXRlIGNoZWNrc3VtIGFuZCBjbG9zZSBmZCAqLwogCQlTSEExX0ZpbmFsKGYtPmJ1ZmZlciwgJmYtPmN0eCk7CiAJCWlmIChyZXN1bHQpCiAJCQloYXNoY3B5KHJlc3VsdCwgZi0+YnVmZmVyKTsKIAkJc2hhMWZsdXNoKGYsIDIwKTsKKwkJaWYgKGZsYWdzICYgQ1NVTV9GU1lOQykKKwkJCWZzeW5jX29yX2RpZShmLT5mZCwgZi0+bmFtZSk7CiAJCWlmIChjbG9zZShmLT5mZCkpCiAJCQlkaWUoIiVzOiBzaGExIGZpbGUgZXJyb3Igb24gY2xvc2UgKCVzKSIsCiAJCQkgICAgZi0+bmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKZGlmZiAtLWdpdCBhL2NzdW0tZmlsZS5oIGIvY3N1bS1maWxlLmgKaW5kZXggMWFmNzY1Ni4uNzJjOTQ4NyAxMDA2NDQKLS0tIGEvY3N1bS1maWxlLmgKKysrIGIvY3N1bS1maWxlLmgKQEAgLTE2LDkgKzE2LDEzIEBACiAJdW5zaWduZWQgY2hhciBidWZmZXJbODE5Ml07CiB9OwogCisvKiBzaGExY2xvc2UgZmxhZ3MgKi8KKyNkZWZpbmUgQ1NVTV9DTE9TRQkxCisjZGVmaW5lIENTVU1fRlNZTkMJMgorCiBleHRlcm4gc3RydWN0IHNoYTFmaWxlICpzaGExZmQoaW50IGZkLCBjb25zdCBjaGFyICpuYW1lKTsKIGV4dGVybiBzdHJ1Y3Qgc2hhMWZpbGUgKnNoYTFmZF90aHJvdWdocHV0KGludCBmZCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHByb2dyZXNzICp0cCk7Ci1leHRlcm4gaW50IHNoYTFjbG9zZShzdHJ1Y3Qgc2hhMWZpbGUgKiwgdW5zaWduZWQgY2hhciAqLCBpbnQpOworZXh0ZXJuIGludCBzaGExY2xvc2Uoc3RydWN0IHNoYTFmaWxlICosIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgaW50KTsKIGV4dGVybiBpbnQgc2hhMXdyaXRlKHN0cnVjdCBzaGExZmlsZSAqLCB2b2lkICosIHVuc2lnbmVkIGludCk7CiBleHRlcm4gdm9pZCBjcmMzMl9iZWdpbihzdHJ1Y3Qgc2hhMWZpbGUgKik7CiBleHRlcm4gdWludDMyX3QgY3JjMzJfZW5kKHN0cnVjdCBzaGExZmlsZSAqKTsKZGlmZiAtLWdpdCBhL2RhZW1vbi5jIGIvZGFlbW9uLmMKaW5kZXggMmI0YTZmMS4uY2UzYTZmNSAxMDA2NDQKLS0tIGEvZGFlbW9uLmMKKysrIGIvZGFlbW9uLmMKQEAgLTMwNiw3ICszMDYsNyBAQAogc3RhdGljIHN0cnVjdCBkYWVtb25fc2VydmljZSAqc2VydmljZV9sb29raW5nX2F0Owogc3RhdGljIGludCBzZXJ2aWNlX2VuYWJsZWQ7CiAKLXN0YXRpYyBpbnQgZ2l0X2RhZW1vbl9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3N0YXRpYyBpbnQgZ2l0X2RhZW1vbl9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCiB7CiAJaWYgKCFwcmVmaXhjbXAodmFyLCAiZGFlbW9uLiIpICYmCiAJICAgICFzdHJjbXAodmFyICsgNywgc2VydmljZV9sb29raW5nX2F0LT5jb25maWdfbmFtZSkpIHsKQEAgLTM1Niw3ICszNTYsNyBAQAogCWlmIChzZXJ2aWNlLT5vdmVycmlkYWJsZSkgewogCQlzZXJ2aWNlX2xvb2tpbmdfYXQgPSBzZXJ2aWNlOwogCQlzZXJ2aWNlX2VuYWJsZWQgPSAtMTsKLQkJZ2l0X2NvbmZpZyhnaXRfZGFlbW9uX2NvbmZpZyk7CisJCWdpdF9jb25maWcoZ2l0X2RhZW1vbl9jb25maWcsIE5VTEwpOwogCQlpZiAoMCA8PSBzZXJ2aWNlX2VuYWJsZWQpCiAJCQllbmFibGVkID0gc2VydmljZV9lbmFibGVkOwogCX0KQEAgLTY5NCwyMyArNjk0LDQ3IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBjaGVja19kZWFkX2NoaWxkcmVuKHZvaWQpCit7CisJdW5zaWduZWQgc3Bhd25lZCwgcmVhcGVkLCBkZWxldGVkOworCisJc3Bhd25lZCA9IGNoaWxkcmVuX3NwYXduZWQ7CisJcmVhcGVkID0gY2hpbGRyZW5fcmVhcGVkOworCWRlbGV0ZWQgPSBjaGlsZHJlbl9kZWxldGVkOworCisJd2hpbGUgKGRlbGV0ZWQgPCByZWFwZWQpIHsKKwkJcGlkX3QgcGlkID0gZGVhZF9jaGlsZFtkZWxldGVkICUgTUFYX0NISUxEUkVOXTsKKwkJY29uc3QgY2hhciAqZGVhZCA9IHBpZCA8IDAgPyAiICh3aXRoIGVycm9yKSIgOiAiIjsKKworCQlpZiAocGlkIDwgMCkKKwkJCXBpZCA9IC1waWQ7CisKKwkJLyogWFhYOiBDdXN0b20gbG9nZ2luZywgc2luY2Ugd2UgZG9uJ3Qgd2FubmEgZ2V0cGlkKCkgKi8KKwkJaWYgKHZlcmJvc2UpIHsKKwkJCWlmIChsb2dfc3lzbG9nKQorCQkJCXN5c2xvZyhMT0dfSU5GTywgIlslZF0gRGlzY29ubmVjdGVkJXMiLAorCQkJCQkJcGlkLCBkZWFkKTsKKwkJCWVsc2UKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIlslZF0gRGlzY29ubmVjdGVkJXNcbiIsCisJCQkJCQlwaWQsIGRlYWQpOworCQl9CisJCXJlbW92ZV9jaGlsZChwaWQsIGRlbGV0ZWQsIHNwYXduZWQpOworCQlkZWxldGVkKys7CisJfQorCWNoaWxkcmVuX2RlbGV0ZWQgPSBkZWxldGVkOworfQorCiBzdGF0aWMgdm9pZCBjaGVja19tYXhfY29ubmVjdGlvbnModm9pZCkKIHsKIAlmb3IgKDs7KSB7CiAJCWludCBhY3RpdmU7Ci0JCXVuc2lnbmVkIHNwYXduZWQsIHJlYXBlZCwgZGVsZXRlZDsKKwkJdW5zaWduZWQgc3Bhd25lZCwgZGVsZXRlZDsKKworCQljaGVja19kZWFkX2NoaWxkcmVuKCk7CiAKIAkJc3Bhd25lZCA9IGNoaWxkcmVuX3NwYXduZWQ7Ci0JCXJlYXBlZCA9IGNoaWxkcmVuX3JlYXBlZDsKIAkJZGVsZXRlZCA9IGNoaWxkcmVuX2RlbGV0ZWQ7CiAKLQkJd2hpbGUgKGRlbGV0ZWQgPCByZWFwZWQpIHsKLQkJCXBpZF90IHBpZCA9IGRlYWRfY2hpbGRbZGVsZXRlZCAlIE1BWF9DSElMRFJFTl07Ci0JCQlyZW1vdmVfY2hpbGQocGlkLCBkZWxldGVkLCBzcGF3bmVkKTsKLQkJCWRlbGV0ZWQrKzsKLQkJfQotCQljaGlsZHJlbl9kZWxldGVkID0gZGVsZXRlZDsKLQogCQlhY3RpdmUgPSBzcGF3bmVkIC0gZGVsZXRlZDsKIAkJaWYgKGFjdGl2ZSA8PSBtYXhfY29ubmVjdGlvbnMpCiAJCQlicmVhazsKQEAgLTc2MCwxOCArNzg0LDEwIEBACiAKIAkJaWYgKHBpZCA+IDApIHsKIAkJCXVuc2lnbmVkIHJlYXBlZCA9IGNoaWxkcmVuX3JlYXBlZDsKKwkJCWlmICghV0lGRVhJVEVEKHN0YXR1cykgfHwgV0VYSVRTVEFUVVMoc3RhdHVzKSA+IDApCisJCQkJcGlkID0gLXBpZDsKIAkJCWRlYWRfY2hpbGRbcmVhcGVkICUgTUFYX0NISUxEUkVOXSA9IHBpZDsKIAkJCWNoaWxkcmVuX3JlYXBlZCA9IHJlYXBlZCArIDE7Ci0JCQkvKiBYWFg6IEN1c3RvbSBsb2dnaW5nLCBzaW5jZSB3ZSBkb24ndCB3YW5uYSBnZXRwaWQoKSAqLwotCQkJaWYgKHZlcmJvc2UpIHsKLQkJCQljb25zdCBjaGFyICpkZWFkID0gIiI7Ci0JCQkJaWYgKCFXSUZFWElURUQoc3RhdHVzKSB8fCBXRVhJVFNUQVRVUyhzdGF0dXMpID4gMCkKLQkJCQkJZGVhZCA9ICIgKHdpdGggZXJyb3IpIjsKLQkJCQlpZiAobG9nX3N5c2xvZykKLQkJCQkJc3lzbG9nKExPR19JTkZPLCAiWyVkXSBEaXNjb25uZWN0ZWQlcyIsIHBpZCwgZGVhZCk7Ci0JCQkJZWxzZQotCQkJCQlmcHJpbnRmKHN0ZGVyciwgIlslZF0gRGlzY29ubmVjdGVkJXNcbiIsIHBpZCwgZGVhZCk7Ci0JCQl9CiAJCQljb250aW51ZTsKIAkJfQogCQlicmVhazsKQEAgLTkyOCw4ICs5NDQsMTggQEAKIAogCWZvciAoOzspIHsKIAkJaW50IGk7CisJCWludCB0aW1lb3V0OwogCi0JCWlmIChwb2xsKHBmZCwgc29ja251bSwgLTEpIDwgMCkgeworCQkvKgorCQkgKiBUaGlzIDEtc2VjIHRpbWVvdXQgY291bGQgbGVhZCB0byBpZGx5IGxvb3BpbmcgYnV0IGl0IGlzCisJCSAqIGhlcmUgc28gdGhhdCBjaGlsZHJlbiBjdWxsZWQgaW4gY2hpbGRfaGFuZGxlcigpIGFyZSByZXBvcnRlZAorCQkgKiB3aXRob3V0IHRvbyBtdWNoIGRlbGF5LiAgV2UgY291bGQgcHJvYmFibHkgc2V0IHVwIGEgcGlwZQorCQkgKiB0byBvdXJzZWx2ZXMgdGhhdCB3ZSBwb2xsLCBhbmQgd3JpdGUgdG8gdGhlIGZkIGZyb20gY2hpbGRfaGFuZGxlcigpCisJCSAqIHRvIHdha2UgdXMgdXAgKGFuZCBjb25zdW1lIGl0IHdoZW4gdGhlIHBvbGwoKSByZXR1cm5zLi4uCisJCSAqLworCQl0aW1lb3V0ID0gKGNoaWxkcmVuX3NwYXduZWQgIT0gY2hpbGRyZW5fZGVsZXRlZCkgPyAxMDAwIDogLTE7CisJCWkgPSBwb2xsKHBmZCwgc29ja251bSwgdGltZW91dCk7CisJCWlmIChpIDwgMCkgewogCQkJaWYgKGVycm5vICE9IEVJTlRSKSB7CiAJCQkJZXJyb3IoInBvbGwgZmFpbGVkLCByZXN1bWluZzogJXMiLAogCQkJCSAgICAgIHN0cmVycm9yKGVycm5vKSk7CkBAIC05MzcsNiArOTYzLDEwIEBACiAJCQl9CiAJCQljb250aW51ZTsKIAkJfQorCQlpZiAoaSA9PSAwKSB7CisJCQljaGVja19kZWFkX2NoaWxkcmVuKCk7CisJCQljb250aW51ZTsKKwkJfQogCiAJCWZvciAoaSA9IDA7IGkgPCBzb2NrbnVtOyBpKyspIHsKIAkJCWlmIChwZmRbaV0ucmV2ZW50cyAmIFBPTExJTikgewpkaWZmIC0tZ2l0IGEvZGF0ZS5jIGIvZGF0ZS5jCmluZGV4IGE3NGVkODYuLjFhNGViODcgMTAwNjQ0Ci0tLSBhL2RhdGUuYworKysgYi9kYXRlLmMKQEAgLTY4MiwxMCArNjgyLDggQEAKIAogc3RhdGljIHZvaWQgZGF0ZV9uZXZlcihzdHJ1Y3QgdG0gKnRtLCBpbnQgKm51bSkKIHsKLQl0bS0+dG1fbW9uID0gdG0tPnRtX3dkYXkgPSB0bS0+dG1feWRheQotCQk9IHRtLT50bV9ob3VyID0gdG0tPnRtX21pbiA9IHRtLT50bV9zZWMgPSAwOwotCXRtLT50bV95ZWFyID0gNzA7Ci0JdG0tPnRtX21kYXkgPSAxOworCXRpbWVfdCBuID0gMDsKKwlsb2NhbHRpbWVfcigmbiwgdG0pOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNwZWNpYWwgewpkaWZmIC0tZ2l0IGEvZGlmZi1saWIuYyBiL2RpZmYtbGliLmMKaW5kZXggMDY5ZTQ1MC4uZTdlYWZmOSAxMDA2NDQKLS0tIGEvZGlmZi1saWIuYworKysgYi9kaWZmLWxpYi5jCkBAIC04LDcgKzgsNiBAQAogI2luY2x1ZGUgImRpZmZjb3JlLmgiCiAjaW5jbHVkZSAicmV2aXNpb24uaCIKICNpbmNsdWRlICJjYWNoZS10cmVlLmgiCi0jaW5jbHVkZSAicGF0aC1saXN0LmgiCiAjaW5jbHVkZSAidW5wYWNrLXRyZWVzLmgiCiAjaW5jbHVkZSAicmVmcy5oIgogCkBAIC0xNiwzNDAgKzE1LDQwIEBACiAgKiBkaWZmLWZpbGVzCiAgKi8KIAotc3RhdGljIGludCByZWFkX2RpcmVjdG9yeShjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgcGF0aF9saXN0ICpsaXN0KQotewotCURJUiAqZGlyOwotCXN0cnVjdCBkaXJlbnQgKmU7Ci0KLQlpZiAoIShkaXIgPSBvcGVuZGlyKHBhdGgpKSkKLQkJcmV0dXJuIGVycm9yKCJDb3VsZCBub3Qgb3BlbiBkaXJlY3RvcnkgJXMiLCBwYXRoKTsKLQotCXdoaWxlICgoZSA9IHJlYWRkaXIoZGlyKSkpCi0JCWlmIChzdHJjbXAoIi4iLCBlLT5kX25hbWUpICYmIHN0cmNtcCgiLi4iLCBlLT5kX25hbWUpKQotCQkJcGF0aF9saXN0X2luc2VydChlLT5kX25hbWUsIGxpc3QpOwotCi0JY2xvc2VkaXIoZGlyKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBnZXRfbW9kZShjb25zdCBjaGFyICpwYXRoLCBpbnQgKm1vZGUpCi17Ci0Jc3RydWN0IHN0YXQgc3Q7Ci0KLQlpZiAoIXBhdGggfHwgIXN0cmNtcChwYXRoLCAiL2Rldi9udWxsIikpCi0JCSptb2RlID0gMDsKLQllbHNlIGlmICghc3RyY21wKHBhdGgsICItIikpCi0JCSptb2RlID0gY3JlYXRlX2NlX21vZGUoMDY2Nik7Ci0JZWxzZSBpZiAoc3RhdChwYXRoLCAmc3QpKQotCQlyZXR1cm4gZXJyb3IoIkNvdWxkIG5vdCBhY2Nlc3MgJyVzJyIsIHBhdGgpOwotCWVsc2UKLQkJKm1vZGUgPSBzdC5zdF9tb2RlOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHF1ZXVlX2RpZmYoc3RydWN0IGRpZmZfb3B0aW9ucyAqbywKLQkJY29uc3QgY2hhciAqbmFtZTEsIGNvbnN0IGNoYXIgKm5hbWUyKQotewotCWludCBtb2RlMSA9IDAsIG1vZGUyID0gMDsKLQotCWlmIChnZXRfbW9kZShuYW1lMSwgJm1vZGUxKSB8fCBnZXRfbW9kZShuYW1lMiwgJm1vZGUyKSkKLQkJcmV0dXJuIC0xOwotCi0JaWYgKG1vZGUxICYmIG1vZGUyICYmIFNfSVNESVIobW9kZTEpICE9IFNfSVNESVIobW9kZTIpKQotCQlyZXR1cm4gZXJyb3IoImZpbGUvZGlyZWN0b3J5IGNvbmZsaWN0OiAlcywgJXMiLCBuYW1lMSwgbmFtZTIpOwotCi0JaWYgKFNfSVNESVIobW9kZTEpIHx8IFNfSVNESVIobW9kZTIpKSB7Ci0JCWNoYXIgYnVmZmVyMVtQQVRIX01BWF0sIGJ1ZmZlcjJbUEFUSF9NQVhdOwotCQlzdHJ1Y3QgcGF0aF9saXN0IHAxID0ge05VTEwsIDAsIDAsIDF9LCBwMiA9IHtOVUxMLCAwLCAwLCAxfTsKLQkJaW50IGxlbjEgPSAwLCBsZW4yID0gMCwgaTEsIGkyLCByZXQgPSAwOwotCi0JCWlmIChuYW1lMSAmJiByZWFkX2RpcmVjdG9yeShuYW1lMSwgJnAxKSkKLQkJCXJldHVybiAtMTsKLQkJaWYgKG5hbWUyICYmIHJlYWRfZGlyZWN0b3J5KG5hbWUyLCAmcDIpKSB7Ci0JCQlwYXRoX2xpc3RfY2xlYXIoJnAxLCAwKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCi0JCWlmIChuYW1lMSkgewotCQkJbGVuMSA9IHN0cmxlbihuYW1lMSk7Ci0JCQlpZiAobGVuMSA+IDAgJiYgbmFtZTFbbGVuMSAtIDFdID09ICcvJykKLQkJCQlsZW4xLS07Ci0JCQltZW1jcHkoYnVmZmVyMSwgbmFtZTEsIGxlbjEpOwotCQkJYnVmZmVyMVtsZW4xKytdID0gJy8nOwotCQl9Ci0KLQkJaWYgKG5hbWUyKSB7Ci0JCQlsZW4yID0gc3RybGVuKG5hbWUyKTsKLQkJCWlmIChsZW4yID4gMCAmJiBuYW1lMltsZW4yIC0gMV0gPT0gJy8nKQotCQkJCWxlbjItLTsKLQkJCW1lbWNweShidWZmZXIyLCBuYW1lMiwgbGVuMik7Ci0JCQlidWZmZXIyW2xlbjIrK10gPSAnLyc7Ci0JCX0KLQotCQlmb3IgKGkxID0gaTIgPSAwOyAhcmV0ICYmIChpMSA8IHAxLm5yIHx8IGkyIDwgcDIubnIpOyApIHsKLQkJCWNvbnN0IGNoYXIgKm4xLCAqbjI7Ci0JCQlpbnQgY29tcDsKLQotCQkJaWYgKGkxID09IHAxLm5yKQotCQkJCWNvbXAgPSAxOwotCQkJZWxzZSBpZiAoaTIgPT0gcDIubnIpCi0JCQkJY29tcCA9IC0xOwotCQkJZWxzZQotCQkJCWNvbXAgPSBzdHJjbXAocDEuaXRlbXNbaTFdLnBhdGgsCi0JCQkJCXAyLml0ZW1zW2kyXS5wYXRoKTsKLQotCQkJaWYgKGNvbXAgPiAwKQotCQkJCW4xID0gTlVMTDsKLQkJCWVsc2UgewotCQkJCW4xID0gYnVmZmVyMTsKLQkJCQlzdHJuY3B5KGJ1ZmZlcjEgKyBsZW4xLCBwMS5pdGVtc1tpMSsrXS5wYXRoLAotCQkJCQkJUEFUSF9NQVggLSBsZW4xKTsKLQkJCX0KLQotCQkJaWYgKGNvbXAgPCAwKQotCQkJCW4yID0gTlVMTDsKLQkJCWVsc2UgewotCQkJCW4yID0gYnVmZmVyMjsKLQkJCQlzdHJuY3B5KGJ1ZmZlcjIgKyBsZW4yLCBwMi5pdGVtc1tpMisrXS5wYXRoLAotCQkJCQkJUEFUSF9NQVggLSBsZW4yKTsKLQkJCX0KLQotCQkJcmV0ID0gcXVldWVfZGlmZihvLCBuMSwgbjIpOwotCQl9Ci0JCXBhdGhfbGlzdF9jbGVhcigmcDEsIDApOwotCQlwYXRoX2xpc3RfY2xlYXIoJnAyLCAwKTsKLQotCQlyZXR1cm4gcmV0OwotCX0gZWxzZSB7Ci0JCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpkMSwgKmQyOwotCi0JCWlmIChESUZGX09QVF9UU1QobywgUkVWRVJTRV9ESUZGKSkgewotCQkJdW5zaWduZWQgdG1wOwotCQkJY29uc3QgY2hhciAqdG1wX2M7Ci0JCQl0bXAgPSBtb2RlMTsgbW9kZTEgPSBtb2RlMjsgbW9kZTIgPSB0bXA7Ci0JCQl0bXBfYyA9IG5hbWUxOyBuYW1lMSA9IG5hbWUyOyBuYW1lMiA9IHRtcF9jOwotCQl9Ci0KLQkJaWYgKCFuYW1lMSkKLQkJCW5hbWUxID0gIi9kZXYvbnVsbCI7Ci0JCWlmICghbmFtZTIpCi0JCQluYW1lMiA9ICIvZGV2L251bGwiOwotCQlkMSA9IGFsbG9jX2ZpbGVzcGVjKG5hbWUxKTsKLQkJZDIgPSBhbGxvY19maWxlc3BlYyhuYW1lMik7Ci0JCWZpbGxfZmlsZXNwZWMoZDEsIG51bGxfc2hhMSwgbW9kZTEpOwotCQlmaWxsX2ZpbGVzcGVjKGQyLCBudWxsX3NoYTEsIG1vZGUyKTsKLQotCQlkaWZmX3F1ZXVlKCZkaWZmX3F1ZXVlZF9kaWZmLCBkMSwgZDIpOwotCQlyZXR1cm4gMDsKLQl9Ci19Ci0KIC8qCi0gKiBEb2VzIHRoZSBwYXRoIG5hbWUgYSBibG9iIGluIHRoZSB3b3JraW5nIHRyZWUsIG9yIGEgZGlyZWN0b3J5Ci0gKiBpbiB0aGUgd29ya2luZyB0cmVlPworICogSGFzIHRoZSB3b3JrIHRyZWUgZW50aXR5IGJlZW4gcmVtb3ZlZD8KKyAqCisgKiBSZXR1cm4gMSBpZiBpdCB3YXMgcmVtb3ZlZCBmcm9tIHRoZSB3b3JrIHRyZWUsIDAgaWYgYW4gZW50aXR5IHRvIGJlCisgKiBjb21wYXJlZCB3aXRoIHRoZSBjYWNoZSBlbnRyeSBjZSBzdGlsbCBleGlzdHMgKHRoZSBsYXR0ZXIgaW5jbHVkZXMKKyAqIHRoZSBjYXNlIHdoZXJlIGEgZGlyZWN0b3J5IHRoYXQgaXMgbm90IGEgc3VibW9kdWxlIHJlcG9zaXRvcnkKKyAqIGV4aXN0cyBmb3IgY2UgdGhhdCBpcyBhIHN1Ym1vZHVsZSAtLSBpdCBpcyBhIHN1Ym1vZHVsZSB0aGF0IGlzIG5vdAorICogY2hlY2tlZCBvdXQpLiAgUmV0dXJuIG5lZ2F0aXZlIGZvciBhbiBlcnJvci4KICAqLwotc3RhdGljIGludCBpc19pbl9pbmRleChjb25zdCBjaGFyICpwYXRoKQotewotCWludCBsZW4sIHBvczsKLQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOwotCi0JbGVuID0gc3RybGVuKHBhdGgpOwotCXdoaWxlIChwYXRoW2xlbi0xXSA9PSAnLycpCi0JCWxlbi0tOwotCWlmICghbGVuKQotCQlyZXR1cm4gMTsgLyogIi4iICovCi0JcG9zID0gY2FjaGVfbmFtZV9wb3MocGF0aCwgbGVuKTsKLQlpZiAoMCA8PSBwb3MpCi0JCXJldHVybiAxOwotCXBvcyA9IC0xIC0gcG9zOwotCXdoaWxlIChwb3MgPCBhY3RpdmVfbnIpIHsKLQkJY2UgPSBhY3RpdmVfY2FjaGVbcG9zKytdOwotCQlpZiAoY2VfbmFtZWxlbihjZSkgPD0gbGVuIHx8Ci0JCSAgICBzdHJuY21wKGNlLT5uYW1lLCBwYXRoLCBsZW4pIHx8Ci0JCSAgICAoY2UtPm5hbWVbbGVuXSA+ICcvJykpCi0JCQlicmVhazsgLyogcGF0aCBjYW5ub3QgYmUgYSBwcmVmaXggKi8KLQkJaWYgKGNlLT5uYW1lW2xlbl0gPT0gJy8nKQotCQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGhhbmRsZV9kaWZmX2ZpbGVzX2FyZ3Moc3RydWN0IHJldl9pbmZvICpyZXZzLAotCQkJCSAgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAotCQkJCSAgdW5zaWduZWQgaW50ICpvcHRpb25zKQotewotCSpvcHRpb25zID0gMDsKLQotCS8qIHJldnMtPm1heF9jb3VudCA9PSAtMiBtZWFucyAtLW5vLWluZGV4ICovCi0Jd2hpbGUgKDEgPCBhcmdjICYmIGFyZ3ZbMV1bMF0gPT0gJy0nKSB7Ci0JCWlmICghc3RyY21wKGFyZ3ZbMV0sICItLWJhc2UiKSkKLQkJCXJldnMtPm1heF9jb3VudCA9IDE7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi0tb3VycyIpKQotCQkJcmV2cy0+bWF4X2NvdW50ID0gMjsKLQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS10aGVpcnMiKSkKLQkJCXJldnMtPm1heF9jb3VudCA9IDM7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi1uIikgfHwKLQkJCQkhc3RyY21wKGFyZ3ZbMV0sICItLW5vLWluZGV4IikpIHsKLQkJCXJldnMtPm1heF9jb3VudCA9IC0yOwotCQkJRElGRl9PUFRfU0VUKCZyZXZzLT5kaWZmb3B0LCBFWElUX1dJVEhfU1RBVFVTKTsKLQkJCURJRkZfT1BUX1NFVCgmcmV2cy0+ZGlmZm9wdCwgTk9fSU5ERVgpOwotCQl9Ci0JCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi1xIikpCi0JCQkqb3B0aW9ucyB8PSBESUZGX1NJTEVOVF9PTl9SRU1PVkVEOwotCQllbHNlCi0JCQlyZXR1cm4gZXJyb3IoImludmFsaWQgb3B0aW9uOiAlcyIsIGFyZ3ZbMV0pOwotCQlhcmd2Kys7IGFyZ2MtLTsKLQl9Ci0KLQlpZiAocmV2cy0+bWF4X2NvdW50ID09IC0xICYmIHJldnMtPmRpZmZvcHQubnJfcGF0aHMgPT0gMikgewotCQkvKgotCQkgKiBJZiB0d28gZmlsZXMgYXJlIHNwZWNpZmllZCwgYW5kIGF0IGxlYXN0IG9uZSBpcyB1bnRyYWNrZWQsCi0JCSAqIGRlZmF1bHQgdG8gbm8taW5kZXguCi0JCSAqLwotCQlyZWFkX2NhY2hlKCk7Ci0JCWlmICghaXNfaW5faW5kZXgocmV2cy0+ZGlmZm9wdC5wYXRoc1swXSkgfHwKLQkJCQkJIWlzX2luX2luZGV4KHJldnMtPmRpZmZvcHQucGF0aHNbMV0pKSB7Ci0JCQlyZXZzLT5tYXhfY291bnQgPSAtMjsKLQkJCURJRkZfT1BUX1NFVCgmcmV2cy0+ZGlmZm9wdCwgTk9fSU5ERVgpOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBNYWtlIHN1cmUgdGhlcmUgYXJlIE5PIHJldmlzaW9uIChpLmUuIHBlbmRpbmcgb2JqZWN0KSBwYXJhbWV0ZXIsCi0JICogcmV2Lm1heF9jb3VudCBpcyByZWFzb25hYmxlICgwIDw9IG4gPD0gMyksCi0JICogdGhlcmUgaXMgbm8gb3RoZXIgcmV2aXNpb24gZmlsdGVyaW5nIHBhcmFtZXRlcnMuCi0JICovCi0JaWYgKHJldnMtPnBlbmRpbmcubnIgfHwgcmV2cy0+bWF4X2NvdW50ID4gMyB8fAotCSAgICByZXZzLT5taW5fYWdlICE9IC0xIHx8IHJldnMtPm1heF9hZ2UgIT0gLTEpCi0JCXJldHVybiBlcnJvcigibm8gcmV2aXNpb24gYWxsb3dlZCB3aXRoIGRpZmYtZmlsZXMiKTsKLQotCWlmIChyZXZzLT5tYXhfY291bnQgPT0gLTEgJiYKLQkgICAgKHJldnMtPmRpZmZvcHQub3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX1BBVENIKSkKLQkJcmV2cy0+Y29tYmluZV9tZXJnZXMgPSByZXZzLT5kZW5zZV9jb21iaW5lZF9tZXJnZXMgPSAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaXNfb3V0c2lkZV9yZXBvKGNvbnN0IGNoYXIgKnBhdGgsIGludCBub25naXQsIGNvbnN0IGNoYXIgKnByZWZpeCkKLXsKLQlpbnQgaTsKLQlpZiAobm9uZ2l0IHx8ICFzdHJjbXAocGF0aCwgIi0iKSB8fCBpc19hYnNvbHV0ZV9wYXRoKHBhdGgpKQotCQlyZXR1cm4gMTsKLQlpZiAocHJlZml4Y21wKHBhdGgsICIuLi8iKSkKLQkJcmV0dXJuIDA7Ci0JaWYgKCFwcmVmaXgpCi0JCXJldHVybiAxOwotCWZvciAoaSA9IHN0cmxlbihwcmVmaXgpOyAhcHJlZml4Y21wKHBhdGgsICIuLi8iKTsgKSB7Ci0JCXdoaWxlIChpID4gMCAmJiBwcmVmaXhbaSAtIDFdICE9ICcvJykKLQkJCWktLTsKLQkJaWYgKC0taSA8IDApCi0JCQlyZXR1cm4gMTsKLQkJcGF0aCArPSAzOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHNldHVwX2RpZmZfbm9faW5kZXgoc3RydWN0IHJldl9pbmZvICpyZXZzLAotCQlpbnQgYXJnYywgY29uc3QgY2hhciAqKiBhcmd2LCBpbnQgbm9uZ2l0LCBjb25zdCBjaGFyICpwcmVmaXgpCi17Ci0JaW50IGk7Ci0JZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKLQkJaWYgKGFyZ3ZbaV1bMF0gIT0gJy0nIHx8IGFyZ3ZbaV1bMV0gPT0gJ1wwJykKLQkJCWJyZWFrOwotCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sICItLSIpKSB7Ci0JCQlpKys7Ci0JCQlicmVhazsKLQkJfSBlbHNlIGlmIChpIDwgYXJnYyAtIDMgJiYgIXN0cmNtcChhcmd2W2ldLCAiLS1uby1pbmRleCIpKSB7Ci0JCQlpID0gYXJnYyAtIDM7Ci0JCQlESUZGX09QVF9TRVQoJnJldnMtPmRpZmZvcHQsIEVYSVRfV0lUSF9TVEFUVVMpOwotCQkJYnJlYWs7Ci0JCX0KLQlpZiAoYXJnYyAhPSBpICsgMiB8fCAoIWlzX291dHNpZGVfcmVwbyhhcmd2W2kgKyAxXSwgbm9uZ2l0LCBwcmVmaXgpICYmCi0JCQkJIWlzX291dHNpZGVfcmVwbyhhcmd2W2ldLCBub25naXQsIHByZWZpeCkpKQotCQlyZXR1cm4gLTE7Ci0KLQlkaWZmX3NldHVwKCZyZXZzLT5kaWZmb3B0KTsKLQlmb3IgKGkgPSAxOyBpIDwgYXJnYyAtIDI7ICkKLQkJaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tbm8taW5kZXgiKSkKLQkJCWkrKzsKLQkJZWxzZSB7Ci0JCQlpbnQgaiA9IGRpZmZfb3B0X3BhcnNlKCZyZXZzLT5kaWZmb3B0LAotCQkJCQlhcmd2ICsgaSwgYXJnYyAtIGkpOwotCQkJaWYgKCFqKQotCQkJCWRpZSgiaW52YWxpZCBkaWZmIG9wdGlvbi92YWx1ZTogJXMiLCBhcmd2W2ldKTsKLQkJCWkgKz0gajsKLQkJfQotCi0JaWYgKHByZWZpeCkgewotCQlpbnQgbGVuID0gc3RybGVuKHByZWZpeCk7Ci0KLQkJcmV2cy0+ZGlmZm9wdC5wYXRocyA9IHhjYWxsb2MoMiwgc2l6ZW9mKGNoYXIqKSk7Ci0JCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKLQkJCWNvbnN0IGNoYXIgKnAgPSBhcmd2W2FyZ2MgLSAyICsgaV07Ci0JCQkvKgotCQkJICogc3RkaW4gc2hvdWxkIGJlIHNwZWxsZWQgYXMgJy0nOyBpZiB5b3UgaGF2ZQotCQkJICogcGF0aCB0aGF0IGlzICctJywgc3BlbGwgaXQgYXMgLi8tLgotCQkJICovCi0JCQlwID0gKHN0cmNtcChwLCAiLSIpCi0JCQkgICAgID8geHN0cmR1cChwcmVmaXhfZmlsZW5hbWUocHJlZml4LCBsZW4sIHApKQotCQkJICAgICA6IHApOwotCQkJcmV2cy0+ZGlmZm9wdC5wYXRoc1tpXSA9IHA7Ci0JCX0KLQl9Ci0JZWxzZQotCQlyZXZzLT5kaWZmb3B0LnBhdGhzID0gYXJndiArIGFyZ2MgLSAyOwotCXJldnMtPmRpZmZvcHQubnJfcGF0aHMgPSAyOwotCURJRkZfT1BUX1NFVCgmcmV2cy0+ZGlmZm9wdCwgTk9fSU5ERVgpOwotCXJldnMtPm1heF9jb3VudCA9IC0yOwotCWlmIChkaWZmX3NldHVwX2RvbmUoJnJldnMtPmRpZmZvcHQpIDwgMCkKLQkJZGllKCJkaWZmX3NldHVwX2RvbmUgZmFpbGVkIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBydW5fZGlmZl9maWxlc19jbWQoc3RydWN0IHJldl9pbmZvICpyZXZzLCBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCi17Ci0JdW5zaWduZWQgaW50IG9wdGlvbnM7Ci0KLQlpZiAoaGFuZGxlX2RpZmZfZmlsZXNfYXJncyhyZXZzLCBhcmdjLCBhcmd2LCAmb3B0aW9ucykpCi0JCXJldHVybiAtMTsKLQotCWlmIChESUZGX09QVF9UU1QoJnJldnMtPmRpZmZvcHQsIE5PX0lOREVYKSkgewotCQlpZiAocmV2cy0+ZGlmZm9wdC5ucl9wYXRocyAhPSAyKQotCQkJcmV0dXJuIGVycm9yKCJuZWVkIHR3byBmaWxlcy9kaXJlY3RvcmllcyB3aXRoIC0tbm8taW5kZXgiKTsKLQkJaWYgKHF1ZXVlX2RpZmYoJnJldnMtPmRpZmZvcHQsIHJldnMtPmRpZmZvcHQucGF0aHNbMF0sCi0JCQkJcmV2cy0+ZGlmZm9wdC5wYXRoc1sxXSkpCi0JCQlyZXR1cm4gLTE7Ci0JCWRpZmZjb3JlX3N0ZCgmcmV2cy0+ZGlmZm9wdCk7Ci0JCWRpZmZfZmx1c2goJnJldnMtPmRpZmZvcHQpOwotCQkvKgotCQkgKiBUaGUgcmV0dXJuIGNvZGUgZm9yIC0tbm8taW5kZXggaW1pdGF0ZXMgZGlmZigxKToKLQkJICogMCA9IG5vIGNoYW5nZXMsIDEgPSBjaGFuZ2VzLCBlbHNlIGVycm9yCi0JCSAqLwotCQlyZXR1cm4gcmV2cy0+ZGlmZm9wdC5mb3VuZF9jaGFuZ2VzOwotCX0KLQotCWlmIChyZWFkX2NhY2hlKCkgPCAwKSB7Ci0JCXBlcnJvcigicmVhZF9jYWNoZSIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXJldHVybiBydW5fZGlmZl9maWxlcyhyZXZzLCBvcHRpb25zKTsKLX0KLS8qCi0gKiBTZWUgaWYgd29yayB0cmVlIGhhcyBhbiBlbnRpdHkgdGhhdCBjYW4gYmUgc3RhZ2VkLiAgUmV0dXJuIDAgaWYgc28sCi0gKiByZXR1cm4gMSBpZiBub3QgYW5kIHJldHVybiAtMSBpZiBlcnJvci4KLSAqLwotc3RhdGljIGludCBjaGVja193b3JrX3RyZWVfZW50aXR5KGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCBzdGF0ICpzdCwgY2hhciAqc3ltY2FjaGUpCitzdGF0aWMgaW50IGNoZWNrX3JlbW92ZWQoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IHN0YXQgKnN0KQogewogCWlmIChsc3RhdChjZS0+bmFtZSwgc3QpIDwgMCkgewogCQlpZiAoZXJybm8gIT0gRU5PRU5UICYmIGVycm5vICE9IEVOT1RESVIpCiAJCQlyZXR1cm4gLTE7CiAJCXJldHVybiAxOwogCX0KLQlpZiAoaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKGNlLT5uYW1lLCBzeW1jYWNoZSkpCisJaWYgKGhhc19zeW1saW5rX2xlYWRpbmdfcGF0aChjZV9uYW1lbGVuKGNlKSwgY2UtPm5hbWUpKQogCQlyZXR1cm4gMTsKIAlpZiAoU19JU0RJUihzdC0+c3RfbW9kZSkpIHsKIAkJdW5zaWduZWQgY2hhciBzdWJbMjBdOwotCQlpZiAocmVzb2x2ZV9naXRsaW5rX3JlZihjZS0+bmFtZSwgIkhFQUQiLCBzdWIpKQorCisJCS8qCisJCSAqIElmIGNlIGlzIGFscmVhZHkgYSBnaXRsaW5rLCB3ZSBjYW4gaGF2ZSBhIHBsYWluCisJCSAqIGRpcmVjdG9yeSAoaS5lLiB0aGUgc3VibW9kdWxlIGlzIG5vdCBjaGVja2VkIG91dCksCisJCSAqIG9yIGEgY2hlY2tlZCBvdXQgc3VibW9kdWxlLiAgRWl0aGVyIGNhc2UgdGhpcyBpcyBub3QKKwkJICogYSBjYXNlIHdoZXJlIHNvbWV0aGluZyB3YXMgcmVtb3ZlZCBmcm9tIHRoZSB3b3JrIHRyZWUsCisJCSAqIHNvIHdlIHdpbGwgcmV0dXJuIDAuCisJCSAqCisJCSAqIE90aGVyd2lzZSwgaWYgdGhlIGRpcmVjdG9yeSBpcyBub3QgYSBzdWJtb2R1bGUKKwkJICogcmVwb3NpdG9yeSwgdGhhdCBtZWFucyBjZSB3aGljaCB3YXMgYSBibG9iIHR1cm5lZCBpbnRvCisJCSAqIGEgZGlyZWN0b3J5IC0tLSB0aGUgYmxvYiB3YXMgcmVtb3ZlZCEKKwkJICovCisJCWlmICghU19JU0dJVExJTksoY2UtPmNlX21vZGUpICYmCisJCSAgICByZXNvbHZlX2dpdGxpbmtfcmVmKGNlLT5uYW1lLCAiSEVBRCIsIHN1YikpCiAJCQlyZXR1cm4gMTsKIAl9CiAJcmV0dXJuIDA7CkBAIC0zOTksNyArOTgsNyBAQAogCQkJbWVtc2V0KCYoZHBhdGgtPnBhcmVudFswXSksIDAsCiAJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBjb21iaW5lX2RpZmZfcGFyZW50KSo1KTsKIAotCQkJY2hhbmdlZCA9IGNoZWNrX3dvcmtfdHJlZV9lbnRpdHkoY2UsICZzdCwgc3ltY2FjaGUpOworCQkJY2hhbmdlZCA9IGNoZWNrX3JlbW92ZWQoY2UsICZzdCk7CiAJCQlpZiAoIWNoYW5nZWQpCiAJCQkJZHBhdGgtPm1vZGUgPSBjZV9tb2RlX2Zyb21fc3RhdChjZSwgc3Quc3RfbW9kZSk7CiAJCQllbHNlIHsKQEAgLTQ2Myw3ICsxNjIsNyBAQAogCQlpZiAoY2VfdXB0b2RhdGUoY2UpKQogCQkJY29udGludWU7CiAKLQkJY2hhbmdlZCA9IGNoZWNrX3dvcmtfdHJlZV9lbnRpdHkoY2UsICZzdCwgc3ltY2FjaGUpOworCQljaGFuZ2VkID0gY2hlY2tfcmVtb3ZlZChjZSwgJnN0KTsKIAkJaWYgKGNoYW5nZWQpIHsKIAkJCWlmIChjaGFuZ2VkIDwgMCkgewogCQkJCXBlcnJvcihjZS0+bmFtZSk7CkBAIC00NzIsMTcgKzE3MSwyMCBAQAogCQkJaWYgKHNpbGVudF9vbl9yZW1vdmVkKQogCQkJCWNvbnRpbnVlOwogCQkJZGlmZl9hZGRyZW1vdmUoJnJldnMtPmRpZmZvcHQsICctJywgY2UtPmNlX21vZGUsCi0JCQkJICAgICAgIGNlLT5zaGExLCBjZS0+bmFtZSwgTlVMTCk7CisJCQkJICAgICAgIGNlLT5zaGExLCBjZS0+bmFtZSk7CiAJCQljb250aW51ZTsKIAkJfQogCQljaGFuZ2VkID0gY2VfbWF0Y2hfc3RhdChjZSwgJnN0LCBjZV9vcHRpb24pOwotCQlpZiAoIWNoYW5nZWQgJiYgIURJRkZfT1BUX1RTVCgmcmV2cy0+ZGlmZm9wdCwgRklORF9DT1BJRVNfSEFSREVSKSkKLQkJCWNvbnRpbnVlOworCQlpZiAoIWNoYW5nZWQpIHsKKwkJCWNlX21hcmtfdXB0b2RhdGUoY2UpOworCQkJaWYgKCFESUZGX09QVF9UU1QoJnJldnMtPmRpZmZvcHQsIEZJTkRfQ09QSUVTX0hBUkRFUikpCisJCQkJY29udGludWU7CisJCX0KIAkJb2xkbW9kZSA9IGNlLT5jZV9tb2RlOwogCQluZXdtb2RlID0gY2VfbW9kZV9mcm9tX3N0YXQoY2UsIHN0LnN0X21vZGUpOwogCQlkaWZmX2NoYW5nZSgmcmV2cy0+ZGlmZm9wdCwgb2xkbW9kZSwgbmV3bW9kZSwKIAkJCSAgICBjZS0+c2hhMSwgKGNoYW5nZWQgPyBudWxsX3NoYTEgOiBjZS0+c2hhMSksCi0JCQkgICAgY2UtPm5hbWUsIE5VTEwpOworCQkJICAgIGNlLT5uYW1lKTsKIAogCX0KIAlkaWZmY29yZV9zdGQoJnJldnMtPmRpZmZvcHQpOwpAQCAtNTA2LDcgKzIwOCw3IEBACiAJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHVuc2lnbmVkIGludCBtb2RlKQogewogCWRpZmZfYWRkcmVtb3ZlKCZyZXZzLT5kaWZmb3B0LCBwcmVmaXhbMF0sIG1vZGUsCi0JCSAgICAgICBzaGExLCBjZS0+bmFtZSwgTlVMTCk7CisJCSAgICAgICBzaGExLCBjZS0+bmFtZSk7CiB9CiAKIHN0YXRpYyBpbnQgZ2V0X3N0YXRfZGF0YShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLApAQCAtNTIxLDcgKzIyMyw3IEBACiAJaWYgKCFjYWNoZWQpIHsKIAkJaW50IGNoYW5nZWQ7CiAJCXN0cnVjdCBzdGF0IHN0OwotCQljaGFuZ2VkID0gY2hlY2tfd29ya190cmVlX2VudGl0eShjZSwgJnN0LCBjYmRhdGEtPnN5bWNhY2hlKTsKKwkJY2hhbmdlZCA9IGNoZWNrX3JlbW92ZWQoY2UsICZzdCk7CiAJCWlmIChjaGFuZ2VkIDwgMCkKIAkJCXJldHVybiAtMTsKIAkJZWxzZSBpZiAoY2hhbmdlZCkgewpAQCAtNjEwLDcgKzMxMiw3IEBACiAJCXJldHVybiAwOwogCiAJZGlmZl9jaGFuZ2UoJnJldnMtPmRpZmZvcHQsIG9sZG1vZGUsIG1vZGUsCi0JCSAgICBvbGQtPnNoYTEsIHNoYTEsIG9sZC0+bmFtZSwgTlVMTCk7CisJCSAgICBvbGQtPnNoYTEsIHNoYTEsIG9sZC0+bmFtZSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RpZmYtbm8taW5kZXguYyBiL2RpZmYtbm8taW5kZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjk5NGNmCi0tLSAvZGV2L251bGwKKysrIGIvZGlmZi1uby1pbmRleC5jCkBAIC0wLDAgKzEsMjYzIEBACisvKgorICogImRpZmYgLS1uby1pbmRleCIgc3VwcG9ydAorICogQ29weXJpZ2h0IChjKSAyMDA3IGJ5IEpvaGFubmVzIFNjaGluZGVsaW4KKyAqIENvcHlyaWdodCAoYykgMjAwOCBieSBKdW5pbyBDIEhhbWFubworICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbG9yLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAibG9nLXRyZWUuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicGF0aC1saXN0LmgiCisKK3N0YXRpYyBpbnQgcmVhZF9kaXJlY3RvcnkoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHBhdGhfbGlzdCAqbGlzdCkKK3sKKwlESVIgKmRpcjsKKwlzdHJ1Y3QgZGlyZW50ICplOworCisJaWYgKCEoZGlyID0gb3BlbmRpcihwYXRoKSkpCisJCXJldHVybiBlcnJvcigiQ291bGQgbm90IG9wZW4gZGlyZWN0b3J5ICVzIiwgcGF0aCk7CisKKwl3aGlsZSAoKGUgPSByZWFkZGlyKGRpcikpKQorCQlpZiAoc3RyY21wKCIuIiwgZS0+ZF9uYW1lKSAmJiBzdHJjbXAoIi4uIiwgZS0+ZF9uYW1lKSkKKwkJCXBhdGhfbGlzdF9pbnNlcnQoZS0+ZF9uYW1lLCBsaXN0KTsKKworCWNsb3NlZGlyKGRpcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X21vZGUoY29uc3QgY2hhciAqcGF0aCwgaW50ICptb2RlKQoreworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKCFwYXRoIHx8ICFzdHJjbXAocGF0aCwgIi9kZXYvbnVsbCIpKQorCQkqbW9kZSA9IDA7CisJZWxzZSBpZiAoIXN0cmNtcChwYXRoLCAiLSIpKQorCQkqbW9kZSA9IGNyZWF0ZV9jZV9tb2RlKDA2NjYpOworCWVsc2UgaWYgKHN0YXQocGF0aCwgJnN0KSkKKwkJcmV0dXJuIGVycm9yKCJDb3VsZCBub3QgYWNjZXNzICclcyciLCBwYXRoKTsKKwllbHNlCisJCSptb2RlID0gc3Quc3RfbW9kZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxdWV1ZV9kaWZmKHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sCisJCWNvbnN0IGNoYXIgKm5hbWUxLCBjb25zdCBjaGFyICpuYW1lMikKK3sKKwlpbnQgbW9kZTEgPSAwLCBtb2RlMiA9IDA7CisKKwlpZiAoZ2V0X21vZGUobmFtZTEsICZtb2RlMSkgfHwgZ2V0X21vZGUobmFtZTIsICZtb2RlMikpCisJCXJldHVybiAtMTsKKworCWlmIChtb2RlMSAmJiBtb2RlMiAmJiBTX0lTRElSKG1vZGUxKSAhPSBTX0lTRElSKG1vZGUyKSkKKwkJcmV0dXJuIGVycm9yKCJmaWxlL2RpcmVjdG9yeSBjb25mbGljdDogJXMsICVzIiwgbmFtZTEsIG5hbWUyKTsKKworCWlmIChTX0lTRElSKG1vZGUxKSB8fCBTX0lTRElSKG1vZGUyKSkgeworCQljaGFyIGJ1ZmZlcjFbUEFUSF9NQVhdLCBidWZmZXIyW1BBVEhfTUFYXTsKKwkJc3RydWN0IHBhdGhfbGlzdCBwMSA9IHtOVUxMLCAwLCAwLCAxfSwgcDIgPSB7TlVMTCwgMCwgMCwgMX07CisJCWludCBsZW4xID0gMCwgbGVuMiA9IDAsIGkxLCBpMiwgcmV0ID0gMDsKKworCQlpZiAobmFtZTEgJiYgcmVhZF9kaXJlY3RvcnkobmFtZTEsICZwMSkpCisJCQlyZXR1cm4gLTE7CisJCWlmIChuYW1lMiAmJiByZWFkX2RpcmVjdG9yeShuYW1lMiwgJnAyKSkgeworCQkJcGF0aF9saXN0X2NsZWFyKCZwMSwgMCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAobmFtZTEpIHsKKwkJCWxlbjEgPSBzdHJsZW4obmFtZTEpOworCQkJaWYgKGxlbjEgPiAwICYmIG5hbWUxW2xlbjEgLSAxXSA9PSAnLycpCisJCQkJbGVuMS0tOworCQkJbWVtY3B5KGJ1ZmZlcjEsIG5hbWUxLCBsZW4xKTsKKwkJCWJ1ZmZlcjFbbGVuMSsrXSA9ICcvJzsKKwkJfQorCisJCWlmIChuYW1lMikgeworCQkJbGVuMiA9IHN0cmxlbihuYW1lMik7CisJCQlpZiAobGVuMiA+IDAgJiYgbmFtZTJbbGVuMiAtIDFdID09ICcvJykKKwkJCQlsZW4yLS07CisJCQltZW1jcHkoYnVmZmVyMiwgbmFtZTIsIGxlbjIpOworCQkJYnVmZmVyMltsZW4yKytdID0gJy8nOworCQl9CisKKwkJZm9yIChpMSA9IGkyID0gMDsgIXJldCAmJiAoaTEgPCBwMS5uciB8fCBpMiA8IHAyLm5yKTsgKSB7CisJCQljb25zdCBjaGFyICpuMSwgKm4yOworCQkJaW50IGNvbXA7CisKKwkJCWlmIChpMSA9PSBwMS5ucikKKwkJCQljb21wID0gMTsKKwkJCWVsc2UgaWYgKGkyID09IHAyLm5yKQorCQkJCWNvbXAgPSAtMTsKKwkJCWVsc2UKKwkJCQljb21wID0gc3RyY21wKHAxLml0ZW1zW2kxXS5wYXRoLAorCQkJCQlwMi5pdGVtc1tpMl0ucGF0aCk7CisKKwkJCWlmIChjb21wID4gMCkKKwkJCQluMSA9IE5VTEw7CisJCQllbHNlIHsKKwkJCQluMSA9IGJ1ZmZlcjE7CisJCQkJc3RybmNweShidWZmZXIxICsgbGVuMSwgcDEuaXRlbXNbaTErK10ucGF0aCwKKwkJCQkJCVBBVEhfTUFYIC0gbGVuMSk7CisJCQl9CisKKwkJCWlmIChjb21wIDwgMCkKKwkJCQluMiA9IE5VTEw7CisJCQllbHNlIHsKKwkJCQluMiA9IGJ1ZmZlcjI7CisJCQkJc3RybmNweShidWZmZXIyICsgbGVuMiwgcDIuaXRlbXNbaTIrK10ucGF0aCwKKwkJCQkJCVBBVEhfTUFYIC0gbGVuMik7CisJCQl9CisKKwkJCXJldCA9IHF1ZXVlX2RpZmYobywgbjEsIG4yKTsKKwkJfQorCQlwYXRoX2xpc3RfY2xlYXIoJnAxLCAwKTsKKwkJcGF0aF9saXN0X2NsZWFyKCZwMiwgMCk7CisKKwkJcmV0dXJuIHJldDsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqZDEsICpkMjsKKworCQlpZiAoRElGRl9PUFRfVFNUKG8sIFJFVkVSU0VfRElGRikpIHsKKwkJCXVuc2lnbmVkIHRtcDsKKwkJCWNvbnN0IGNoYXIgKnRtcF9jOworCQkJdG1wID0gbW9kZTE7IG1vZGUxID0gbW9kZTI7IG1vZGUyID0gdG1wOworCQkJdG1wX2MgPSBuYW1lMTsgbmFtZTEgPSBuYW1lMjsgbmFtZTIgPSB0bXBfYzsKKwkJfQorCisJCWlmICghbmFtZTEpCisJCQluYW1lMSA9ICIvZGV2L251bGwiOworCQlpZiAoIW5hbWUyKQorCQkJbmFtZTIgPSAiL2Rldi9udWxsIjsKKwkJZDEgPSBhbGxvY19maWxlc3BlYyhuYW1lMSk7CisJCWQyID0gYWxsb2NfZmlsZXNwZWMobmFtZTIpOworCQlmaWxsX2ZpbGVzcGVjKGQxLCBudWxsX3NoYTEsIG1vZGUxKTsKKwkJZmlsbF9maWxlc3BlYyhkMiwgbnVsbF9zaGExLCBtb2RlMik7CisKKwkJZGlmZl9xdWV1ZSgmZGlmZl9xdWV1ZWRfZGlmZiwgZDEsIGQyKTsKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgaW50IHBhdGhfb3V0c2lkZV9yZXBvKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJLyoKKwkgKiBXZSBoYXZlIGFscmVhZHkgZG9uZSBzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseSgpIHNvIHdlCisJICoga25vdyB3ZSBhcmUgaW5zaWRlIGEgZ2l0IHdvcmsgdHJlZSBhbHJlYWR5LgorCSAqLworCWNvbnN0IGNoYXIgKndvcmtfdHJlZTsKKwlzaXplX3QgbGVuOworCisJaWYgKCFpc19hYnNvbHV0ZV9wYXRoKHBhdGgpKQorCQlyZXR1cm4gMDsKKwl3b3JrX3RyZWUgPSBnZXRfZ2l0X3dvcmtfdHJlZSgpOworCWxlbiA9IHN0cmxlbih3b3JrX3RyZWUpOworCWlmIChzdHJuY21wKHBhdGgsIHdvcmtfdHJlZSwgbGVuKSB8fAorCSAgICAocGF0aFtsZW5dICE9ICdcMCcgJiYgcGF0aFtsZW5dICE9ICcvJykpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCit2b2lkIGRpZmZfbm9faW5kZXgoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkgICBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsCisJCSAgIGludCBub25naXQsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgaTsKKwlpbnQgbm9faW5kZXggPSAwOworCXVuc2lnbmVkIG9wdGlvbnMgPSAwOworCisJLyogV2VyZSB3ZSBhc2tlZCB0byBkbyAtLW5vLWluZGV4IGV4cGxpY2l0bHk/ICovCisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCQlpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS0iKSkKKwkJCXJldHVybjsKKwkJaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tbm8taW5kZXgiKSkKKwkJCW5vX2luZGV4ID0gMTsKKwkJaWYgKGFyZ3ZbaV1bMF0gIT0gJy0nKQorCQkJYnJlYWs7CisJfQorCisJaWYgKCFub19pbmRleCAmJiAhbm9uZ2l0KSB7CisJCS8qCisJCSAqIEluc2lkZSBhIGdpdCByZXBvc2l0b3J5LCB3aXRob3V0IC0tbm8taW5kZXguICBPbmx5CisJCSAqIHdoZW4gYSBwYXRoIG91dHNpZGUgdGhlIHJlcG9zaXRvcnkgaXMgZ2l2ZW4sCisJCSAqIGUuZy4gImdpdCBkaWZmIC92YXIvdG1wL1sxMl0iLCBvciAiZ2l0IGRpZmYKKwkJICogTWFrZWZpbGUgL3Zhci90bXAvTWFrZWZpbGUiLCBhbGxvdyBpdCB0byBiZSB1c2VkIGFzCisJCSAqIGEgY29sb3VyZnVsICJkaWZmIiByZXBsYWNlbWVudC4KKwkJICovCisJCWlmICgoYXJnYyAhPSBpICsgMikgfHwKKwkJICAgICghcGF0aF9vdXRzaWRlX3JlcG8oYXJndltpXSkgJiYKKwkJICAgICAhcGF0aF9vdXRzaWRlX3JlcG8oYXJndltpKzFdKSkpCisJCQlyZXR1cm47CisJfQorCWlmIChhcmdjICE9IGkgKyAyKQorCQlkaWUoImdpdCBkaWZmICVzIHRha2VzIHR3byBwYXRocyIsCisJCSAgICBub19pbmRleCA/ICItLW5vLWluZGV4IiA6ICJbLS1uby1pbmRleF0iKTsKKworCS8qCisJICogSWYgdGhlIHVzZXIgYXNrZWQgZm9yIG91ciBleGl0IGNvZGUgdGhlbiBkb24ndCBzdGFydCBhCisJICogcGFnZXIgb3Igd2Ugd291bGQgZW5kIHVwIHJlcG9ydGluZyBpdHMgZXhpdCBjb2RlIGluc3RlYWQuCisJICovCisJaWYgKCFESUZGX09QVF9UU1QoJnJldnMtPmRpZmZvcHQsIEVYSVRfV0lUSF9TVEFUVVMpKQorCQlzZXR1cF9wYWdlcigpOworCisJZGlmZl9zZXR1cCgmcmV2cy0+ZGlmZm9wdCk7CisJaWYgKCFyZXZzLT5kaWZmb3B0Lm91dHB1dF9mb3JtYXQpCisJCXJldnMtPmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX1BBVENIOworCWZvciAoaSA9IDE7IGkgPCBhcmdjIC0gMjsgKSB7CisJCWludCBqOworCQlpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS1uby1pbmRleCIpKQorCQkJaSsrOworCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICItcSIpKQorCQkJb3B0aW9ucyB8PSBESUZGX1NJTEVOVF9PTl9SRU1PVkVEOworCQllbHNlIHsKKwkJCWogPSBkaWZmX29wdF9wYXJzZSgmcmV2cy0+ZGlmZm9wdCwgYXJndiArIGksIGFyZ2MgLSBpKTsKKwkJCWlmICghaikKKwkJCQlkaWUoImludmFsaWQgZGlmZiBvcHRpb24vdmFsdWU6ICVzIiwgYXJndltpXSk7CisJCQlpICs9IGo7CisJCX0KKwl9CisKKwlpZiAocHJlZml4KSB7CisJCWludCBsZW4gPSBzdHJsZW4ocHJlZml4KTsKKworCQlyZXZzLT5kaWZmb3B0LnBhdGhzID0geGNhbGxvYygyLCBzaXplb2YoY2hhciopKTsKKwkJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQkJY29uc3QgY2hhciAqcCA9IGFyZ3ZbYXJnYyAtIDIgKyBpXTsKKwkJCS8qCisJCQkgKiBzdGRpbiBzaG91bGQgYmUgc3BlbGxlZCBhcyAnLSc7IGlmIHlvdSBoYXZlCisJCQkgKiBwYXRoIHRoYXQgaXMgJy0nLCBzcGVsbCBpdCBhcyAuLy0uCisJCQkgKi8KKwkJCXAgPSAoc3RyY21wKHAsICItIikKKwkJCSAgICAgPyB4c3RyZHVwKHByZWZpeF9maWxlbmFtZShwcmVmaXgsIGxlbiwgcCkpCisJCQkgICAgIDogcCk7CisJCQlyZXZzLT5kaWZmb3B0LnBhdGhzW2ldID0gcDsKKwkJfQorCX0KKwllbHNlCisJCXJldnMtPmRpZmZvcHQucGF0aHMgPSBhcmd2ICsgYXJnYyAtIDI7CisJcmV2cy0+ZGlmZm9wdC5ucl9wYXRocyA9IDI7CisKKwlESUZGX09QVF9TRVQoJnJldnMtPmRpZmZvcHQsIEVYSVRfV0lUSF9TVEFUVVMpOworCURJRkZfT1BUX1NFVCgmcmV2cy0+ZGlmZm9wdCwgTk9fSU5ERVgpOworCisJcmV2cy0+bWF4X2NvdW50ID0gLTI7CisJaWYgKGRpZmZfc2V0dXBfZG9uZSgmcmV2cy0+ZGlmZm9wdCkgPCAwKQorCQlkaWUoImRpZmZfc2V0dXBfZG9uZSBmYWlsZWQiKTsKKworCWlmIChxdWV1ZV9kaWZmKCZyZXZzLT5kaWZmb3B0LCByZXZzLT5kaWZmb3B0LnBhdGhzWzBdLAorCQkgICAgICAgcmV2cy0+ZGlmZm9wdC5wYXRoc1sxXSkpCisJCWV4aXQoMSk7CisJZGlmZmNvcmVfc3RkKCZyZXZzLT5kaWZmb3B0KTsKKwlkaWZmX2ZsdXNoKCZyZXZzLT5kaWZmb3B0KTsKKworCS8qCisJICogVGhlIHJldHVybiBjb2RlIGZvciAtLW5vLWluZGV4IGltaXRhdGVzIGRpZmYoMSk6CisJICogMCA9IG5vIGNoYW5nZXMsIDEgPSBjaGFuZ2VzLCBlbHNlIGVycm9yCisJICovCisJZXhpdChyZXZzLT5kaWZmb3B0LmZvdW5kX2NoYW5nZXMpOworfQpkaWZmIC0tZ2l0IGEvZGlmZi5jIGIvZGlmZi5jCmluZGV4IDIwMTM1Y2IuLjM0MjczM2IgMTAwNjQ0Ci0tLSBhL2RpZmYuYworKysgYi9kaWZmLmMKQEAgLTE5LDcgKzE5LDcgQEAKICNlbmRpZgogCiBzdGF0aWMgaW50IGRpZmZfZGV0ZWN0X3JlbmFtZV9kZWZhdWx0Owotc3RhdGljIGludCBkaWZmX3JlbmFtZV9saW1pdF9kZWZhdWx0ID0gMTAwOworc3RhdGljIGludCBkaWZmX3JlbmFtZV9saW1pdF9kZWZhdWx0ID0gMjAwOwogaW50IGRpZmZfdXNlX2NvbG9yX2RlZmF1bHQgPSAtMTsKIHN0YXRpYyBjb25zdCBjaGFyICpleHRlcm5hbF9kaWZmX2NtZF9jZmc7CiBpbnQgZGlmZl9hdXRvX3JlZnJlc2hfaW5kZXggPSAxOwpAQCAtMTI5LDEyICsxMjksOCBAQAogICogbmV2ZXIgYmUgYWZmZWN0ZWQgYnkgdGhlIHNldHRpbmcgb2YgZGlmZi5yZW5hbWVzCiAgKiB0aGUgdXNlciBoYXBwZW5zIHRvIGhhdmUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KICAqLwotaW50IGdpdF9kaWZmX3VpX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQoraW50IGdpdF9kaWZmX3VpX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKIHsKLQlpZiAoIXN0cmNtcCh2YXIsICJkaWZmLnJlbmFtZWxpbWl0IikpIHsKLQkJZGlmZl9yZW5hbWVfbGltaXRfZGVmYXVsdCA9IGdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOwotCQlyZXR1cm4gMDsKLQl9CiAJaWYgKCFzdHJjbXAodmFyLCAiZGlmZi5jb2xvciIpIHx8ICFzdHJjbXAodmFyLCAiY29sb3IuZGlmZiIpKSB7CiAJCWRpZmZfdXNlX2NvbG9yX2RlZmF1bHQgPSBnaXRfY29uZmlnX2NvbG9yYm9vbCh2YXIsIHZhbHVlLCAtMSk7CiAJCXJldHVybiAwOwpAQCAtMTUzLDEyICsxNDksOCBAQAogCQlkaWZmX2F1dG9fcmVmcmVzaF9pbmRleCA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKIAkJcmV0dXJuIDA7CiAJfQotCWlmICghc3RyY21wKHZhciwgImRpZmYuZXh0ZXJuYWwiKSkgewotCQlpZiAoIXZhbHVlKQotCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7Ci0JCWV4dGVybmFsX2RpZmZfY21kX2NmZyA9IHhzdHJkdXAodmFsdWUpOwotCQlyZXR1cm4gMDsKLQl9CisJaWYgKCFzdHJjbXAodmFyLCAiZGlmZi5leHRlcm5hbCIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmV4dGVybmFsX2RpZmZfY21kX2NmZywgdmFyLCB2YWx1ZSk7CiAJaWYgKCFwcmVmaXhjbXAodmFyLCAiZGlmZi4iKSkgewogCQljb25zdCBjaGFyICplcCA9IHN0cnJjaHIodmFyLCAnLicpOwogCkBAIC0xNjYsMTEgKzE1OCwxNiBAQAogCQkJcmV0dXJuIHBhcnNlX2xsZGlmZl9jb21tYW5kKHZhciwgZXAsIHZhbHVlKTsKIAl9CiAKLQlyZXR1cm4gZ2l0X2RpZmZfYmFzaWNfY29uZmlnKHZhciwgdmFsdWUpOworCXJldHVybiBnaXRfZGlmZl9iYXNpY19jb25maWcodmFyLCB2YWx1ZSwgY2IpOwogfQogCi1pbnQgZ2l0X2RpZmZfYmFzaWNfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCitpbnQgZ2l0X2RpZmZfYmFzaWNfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQogeworCWlmICghc3RyY21wKHZhciwgImRpZmYucmVuYW1lbGltaXQiKSkgeworCQlkaWZmX3JlbmFtZV9saW1pdF9kZWZhdWx0ID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwogCWlmICghcHJlZml4Y21wKHZhciwgImRpZmYuY29sb3IuIikgfHwgIXByZWZpeGNtcCh2YXIsICJjb2xvci5kaWZmLiIpKSB7CiAJCWludCBzbG90ID0gcGFyc2VfZGlmZl9jb2xvcl9zbG90KHZhciwgMTEpOwogCQlpZiAoIXZhbHVlKQpAQCAtMTkwLDcgKzE4Nyw3IEBACiAJCX0KIAl9CiAKLQlyZXR1cm4gZ2l0X2NvbG9yX2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUpOworCXJldHVybiBnaXRfY29sb3JfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOwogfQogCiBzdGF0aWMgY2hhciAqcXVvdGVfdHdvKGNvbnN0IGNoYXIgKm9uZSwgY29uc3QgY2hhciAqdHdvKQpAQCAtOTk3LDE4ICs5OTQsMjMgQEAKIAl9CiB9CiAKLXN0cnVjdCBkaWZmc3RhdF9kaXIgewotCXN0cnVjdCBkaWZmc3RhdF9maWxlICoqZmlsZXM7Ci0JaW50IG5yLCBwZXJjZW50LCBjdW11bGF0aXZlOworc3RydWN0IGRpcnN0YXRfZmlsZSB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBsb25nIGNoYW5nZWQ7CiB9OwogCi1zdGF0aWMgbG9uZyBnYXRoZXJfZGlyc3RhdChGSUxFICpmaWxlLCBzdHJ1Y3QgZGlmZnN0YXRfZGlyICpkaXIsIHVuc2lnbmVkIGxvbmcgY2hhbmdlZCwgY29uc3QgY2hhciAqYmFzZSwgaW50IGJhc2VsZW4pCitzdHJ1Y3QgZGlyc3RhdF9kaXIgeworCXN0cnVjdCBkaXJzdGF0X2ZpbGUgKmZpbGVzOworCWludCBhbGxvYywgbnIsIHBlcmNlbnQsIGN1bXVsYXRpdmU7Cit9OworCitzdGF0aWMgbG9uZyBnYXRoZXJfZGlyc3RhdChGSUxFICpmaWxlLCBzdHJ1Y3QgZGlyc3RhdF9kaXIgKmRpciwgdW5zaWduZWQgbG9uZyBjaGFuZ2VkLCBjb25zdCBjaGFyICpiYXNlLCBpbnQgYmFzZWxlbikKIHsKIAl1bnNpZ25lZCBsb25nIHRoaXNfZGlyID0gMDsKIAl1bnNpZ25lZCBpbnQgc291cmNlcyA9IDA7CiAKIAl3aGlsZSAoZGlyLT5ucikgewotCQlzdHJ1Y3QgZGlmZnN0YXRfZmlsZSAqZiA9ICpkaXItPmZpbGVzOworCQlzdHJ1Y3QgZGlyc3RhdF9maWxlICpmID0gZGlyLT5maWxlczsKIAkJaW50IG5hbWVsZW4gPSBzdHJsZW4oZi0+bmFtZSk7CiAJCXVuc2lnbmVkIGxvbmcgdGhpczsKIAkJY2hhciAqc2xhc2g7CkBAIC0xMDIzLDEwICsxMDI1LDcgQEAKIAkJCXRoaXMgPSBnYXRoZXJfZGlyc3RhdChmaWxlLCBkaXIsIGNoYW5nZWQsIGYtPm5hbWUsIG5ld2Jhc2VsZW4pOwogCQkJc291cmNlcysrOwogCQl9IGVsc2UgewotCQkJaWYgKGYtPmlzX3VubWVyZ2VkIHx8IGYtPmlzX2JpbmFyeSkKLQkJCQl0aGlzID0gMDsKLQkJCWVsc2UKLQkJCQl0aGlzID0gZi0+YWRkZWQgKyBmLT5kZWxldGVkOworCQkJdGhpcyA9IGYtPmNoYW5nZWQ7CiAJCQlkaXItPmZpbGVzKys7CiAJCQlkaXItPm5yLS07CiAJCQlzb3VyY2VzICs9IDI7CkBAIC0xMDU0LDE5ICsxMDUzLDU4IEBACiAJcmV0dXJuIHRoaXNfZGlyOwogfQogCi1zdGF0aWMgdm9pZCBzaG93X2RpcnN0YXQoc3RydWN0IGRpZmZzdGF0X3QgKmRhdGEsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMpCitzdGF0aWMgdm9pZCBzaG93X2RpcnN0YXQoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucykKIHsKIAlpbnQgaTsKIAl1bnNpZ25lZCBsb25nIGNoYW5nZWQ7Ci0Jc3RydWN0IGRpZmZzdGF0X2RpciBkaXI7CisJc3RydWN0IGRpcnN0YXRfZGlyIGRpcjsKKwlzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEgPSAmZGlmZl9xdWV1ZWRfZGlmZjsKIAotCS8qIENhbGN1bGF0ZSB0b3RhbCBjaGFuZ2VzICovCisJZGlyLmZpbGVzID0gTlVMTDsKKwlkaXIuYWxsb2MgPSAwOworCWRpci5uciA9IDA7CisJZGlyLnBlcmNlbnQgPSBvcHRpb25zLT5kaXJzdGF0X3BlcmNlbnQ7CisJZGlyLmN1bXVsYXRpdmUgPSBvcHRpb25zLT5vdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfQ1VNVUxBVElWRTsKKwogCWNoYW5nZWQgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5ucjsgaSsrKSB7Ci0JCWlmIChkYXRhLT5maWxlc1tpXS0+aXNfYmluYXJ5IHx8IGRhdGEtPmZpbGVzW2ldLT5pc191bm1lcmdlZCkKKwlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IHEtPnF1ZXVlW2ldOworCQljb25zdCBjaGFyICpuYW1lOworCQl1bnNpZ25lZCBsb25nIGNvcGllZCwgYWRkZWQsIGRhbWFnZTsKKworCQluYW1lID0gcC0+b25lLT5wYXRoID8gcC0+b25lLT5wYXRoIDogcC0+dHdvLT5wYXRoOworCisJCWlmIChESUZGX0ZJTEVfVkFMSUQocC0+b25lKSAmJiBESUZGX0ZJTEVfVkFMSUQocC0+dHdvKSkgeworCQkJZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhwLT5vbmUsIDApOworCQkJZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhwLT50d28sIDApOworCQkJZGlmZmNvcmVfY291bnRfY2hhbmdlcyhwLT5vbmUsIHAtPnR3bywgTlVMTCwgTlVMTCwgMCwKKwkJCQkJICAgICAgICZjb3BpZWQsICZhZGRlZCk7CisJCQlkaWZmX2ZyZWVfZmlsZXNwZWNfZGF0YShwLT5vbmUpOworCQkJZGlmZl9mcmVlX2ZpbGVzcGVjX2RhdGEocC0+dHdvKTsKKwkJfSBlbHNlIGlmIChESUZGX0ZJTEVfVkFMSUQocC0+b25lKSkgeworCQkJZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhwLT5vbmUsIDEpOworCQkJY29waWVkID0gYWRkZWQgPSAwOworCQkJZGlmZl9mcmVlX2ZpbGVzcGVjX2RhdGEocC0+b25lKTsKKwkJfSBlbHNlIGlmIChESUZGX0ZJTEVfVkFMSUQocC0+dHdvKSkgeworCQkJZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhwLT50d28sIDEpOworCQkJY29waWVkID0gMDsKKwkJCWFkZGVkID0gcC0+dHdvLT5zaXplOworCQkJZGlmZl9mcmVlX2ZpbGVzcGVjX2RhdGEocC0+dHdvKTsKKwkJfSBlbHNlCiAJCQljb250aW51ZTsKLQkJY2hhbmdlZCArPSBkYXRhLT5maWxlc1tpXS0+YWRkZWQ7Ci0JCWNoYW5nZWQgKz0gZGF0YS0+ZmlsZXNbaV0tPmRlbGV0ZWQ7CisKKwkJLyoKKwkJICogT3JpZ2luYWwgbWludXMgY29waWVkIGlzIHRoZSByZW1vdmVkIG1hdGVyaWFsLAorCQkgKiBhZGRlZCBpcyB0aGUgbmV3IG1hdGVyaWFsLiAgVGhleSBhcmUgYm90aCBkYW1hZ2VzCisJCSAqIG1hZGUgdG8gdGhlIHByZWltYWdlLgorCQkgKi8KKwkJZGFtYWdlID0gKHAtPm9uZS0+c2l6ZSAtIGNvcGllZCkgKyBhZGRlZDsKKworCQlBTExPQ19HUk9XKGRpci5maWxlcywgZGlyLm5yICsgMSwgZGlyLmFsbG9jKTsKKwkJZGlyLmZpbGVzW2Rpci5ucl0ubmFtZSA9IG5hbWU7CisJCWRpci5maWxlc1tkaXIubnJdLmNoYW5nZWQgPSBkYW1hZ2U7CisJCWNoYW5nZWQgKz0gZGFtYWdlOworCQlkaXIubnIrKzsKIAl9CiAKIAkvKiBUaGlzIGNhbiBoYXBwZW4gZXZlbiB3aXRoIG1hbnkgZmlsZXMsIGlmIGV2ZXJ5dGhpbmcgd2FzIHJlbmFtZXMgKi8KQEAgLTEwNzQsMTAgKzExMTIsNiBAQAogCQlyZXR1cm47CiAKIAkvKiBTaG93IGFsbCBkaXJlY3RvcmllcyB3aXRoIG1vcmUgdGhhbiB4JSBvZiB0aGUgY2hhbmdlcyAqLwotCWRpci5maWxlcyA9IGRhdGEtPmZpbGVzOwotCWRpci5uciA9IGRhdGEtPm5yOwotCWRpci5wZXJjZW50ID0gb3B0aW9ucy0+ZGlyc3RhdF9wZXJjZW50OwotCWRpci5jdW11bGF0aXZlID0gb3B0aW9ucy0+b3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX0NVTVVMQVRJVkU7CiAJZ2F0aGVyX2RpcnN0YXQob3B0aW9ucy0+ZmlsZSwgJmRpciwgY2hhbmdlZCwgIiIsIDApOwogfQogCkBAIC0xMTEzLDEyICsxMTQ3LDE0IEBACiAJY2hhciAqZXJyOwogCiAJaWYgKGxpbmVbMF0gPT0gJysnKSB7CisJCXVuc2lnbmVkIGJhZDsKIAkJZGF0YS0+bGluZW5vKys7Ci0JCWRhdGEtPnN0YXR1cyA9IGNoZWNrX2FuZF9lbWl0X2xpbmUobGluZSArIDEsIGxlbiAtIDEsCisJCWJhZCA9IGNoZWNrX2FuZF9lbWl0X2xpbmUobGluZSArIDEsIGxlbiAtIDEsCiAJCSAgICBkYXRhLT53c19ydWxlLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKLQkJaWYgKCFkYXRhLT5zdGF0dXMpCisJCWlmICghYmFkKQogCQkJcmV0dXJuOwotCQllcnIgPSB3aGl0ZXNwYWNlX2Vycm9yX3N0cmluZyhkYXRhLT5zdGF0dXMpOworCQlkYXRhLT5zdGF0dXMgfD0gYmFkOworCQllcnIgPSB3aGl0ZXNwYWNlX2Vycm9yX3N0cmluZyhiYWQpOwogCQlmcHJpbnRmKGRhdGEtPmZpbGUsICIlczolZDogJXMuXG4iLCBkYXRhLT5maWxlbmFtZSwgZGF0YS0+bGluZW5vLCBlcnIpOwogCQlmcmVlKGVycik7CiAJCWVtaXRfbGluZShkYXRhLT5maWxlLCBzZXQsIHJlc2V0LCBsaW5lLCAxKTsKQEAgLTIxODksNyArMjIyNSw2IEBACiAJb3B0aW9ucy0+cmVuYW1lX2xpbWl0ID0gLTE7CiAJb3B0aW9ucy0+ZGlyc3RhdF9wZXJjZW50ID0gMzsKIAlvcHRpb25zLT5jb250ZXh0ID0gMzsKLQlvcHRpb25zLT5tc2dfc2VwID0gIiI7CiAKIAlvcHRpb25zLT5jaGFuZ2UgPSBkaWZmX2NoYW5nZTsKIAlvcHRpb25zLT5hZGRfcmVtb3ZlID0gZGlmZl9hZGRyZW1vdmU7CkBAIC0yNDY2LDYgKzI1MDEsOCBAQAogCQlESUZGX09QVF9TRVQob3B0aW9ucywgQUxMT1dfRVhURVJOQUwpOwogCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1uby1leHQtZGlmZiIpKQogCQlESUZGX09QVF9DTFIob3B0aW9ucywgQUxMT1dfRVhURVJOQUwpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1pZ25vcmUtc3VibW9kdWxlcyIpKQorCQlESUZGX09QVF9TRVQob3B0aW9ucywgSUdOT1JFX1NVQk1PRFVMRVMpOwogCiAJLyogbWlzYyBvcHRpb25zICovCiAJZWxzZSBpZiAoIXN0cmNtcChhcmcsICIteiIpKQpAQCAtMzEwMSw3ICszMTM4LDcgQEAKIAkJc2VwYXJhdG9yKys7CiAJfQogCi0JaWYgKG91dHB1dF9mb3JtYXQgJiAoRElGRl9GT1JNQVRfRElGRlNUQVR8RElGRl9GT1JNQVRfU0hPUlRTVEFUfERJRkZfRk9STUFUX05VTVNUQVR8RElGRl9GT1JNQVRfRElSU1RBVCkpIHsKKwlpZiAob3V0cHV0X2Zvcm1hdCAmIChESUZGX0ZPUk1BVF9ESUZGU1RBVHxESUZGX0ZPUk1BVF9TSE9SVFNUQVR8RElGRl9GT1JNQVRfTlVNU1RBVCkpIHsKIAkJc3RydWN0IGRpZmZzdGF0X3QgZGlmZnN0YXQ7CiAKIAkJbWVtc2V0KCZkaWZmc3RhdCwgMCwgc2l6ZW9mKHN0cnVjdCBkaWZmc3RhdF90KSk7CkBAIC0zMTExLDggKzMxNDgsNiBAQAogCQkJaWYgKGNoZWNrX3BhaXJfc3RhdHVzKHApKQogCQkJCWRpZmZfZmx1c2hfc3RhdChwLCBvcHRpb25zLCAmZGlmZnN0YXQpOwogCQl9Ci0JCWlmIChvdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfRElSU1RBVCkKLQkJCXNob3dfZGlyc3RhdCgmZGlmZnN0YXQsIG9wdGlvbnMpOwogCQlpZiAob3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX05VTVNUQVQpCiAJCQlzaG93X251bXN0YXQoJmRpZmZzdGF0LCBvcHRpb25zKTsKIAkJaWYgKG91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9ESUZGU1RBVCkKQEAgLTMxMjIsNiArMzE1Nyw4IEBACiAJCWZyZWVfZGlmZnN0YXRfaW5mbygmZGlmZnN0YXQpOwogCQlzZXBhcmF0b3IrKzsKIAl9CisJaWYgKG91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9ESVJTVEFUKQorCQlzaG93X2RpcnN0YXQob3B0aW9ucyk7CiAKIAlpZiAob3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX1NVTU1BUlkgJiYgIWlzX3N1bW1hcnlfZW1wdHkocSkpIHsKIAkJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspCkBAIC0zMzIwLDExICszMzU3LDEzIEBACiB2b2lkIGRpZmZfYWRkcmVtb3ZlKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsCiAJCSAgICBpbnQgYWRkcmVtb3ZlLCB1bnNpZ25lZCBtb2RlLAogCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKLQkJICAgIGNvbnN0IGNoYXIgKmJhc2UsIGNvbnN0IGNoYXIgKnBhdGgpCisJCSAgICBjb25zdCBjaGFyICpjb25jYXRwYXRoKQogewotCWNoYXIgY29uY2F0cGF0aFtQQVRIX01BWF07CiAJc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSwgKnR3bzsKIAorCWlmIChESUZGX09QVF9UU1Qob3B0aW9ucywgSUdOT1JFX1NVQk1PRFVMRVMpICYmIFNfSVNHSVRMSU5LKG1vZGUpKQorCQlyZXR1cm47CisKIAkvKiBUaGlzIG1heSBsb29rIG9kZCwgYnV0IGl0IGlzIGEgcHJlcGFyYXRpb24gZm9yCiAJICogZmVlZGluZyAidGhlcmUgYXJlIHVuY2hhbmdlZCBmaWxlcyB3aGljaCBzaG91bGQKIAkgKiBub3QgcHJvZHVjZSBkaWZmcywgYnV0IHdoZW4geW91IGFyZSBkb2luZyBjb3B5CkBAIC0zMzQxLDkgKzMzODAsNiBAQAogCQlhZGRyZW1vdmUgPSAoYWRkcmVtb3ZlID09ICcrJyA/ICctJyA6CiAJCQkgICAgIGFkZHJlbW92ZSA9PSAnLScgPyAnKycgOiBhZGRyZW1vdmUpOwogCi0JaWYgKCFwYXRoKSBwYXRoID0gIiI7Ci0Jc3ByaW50Zihjb25jYXRwYXRoLCAiJXMlcyIsIGJhc2UsIHBhdGgpOwotCiAJaWYgKG9wdGlvbnMtPnByZWZpeCAmJgogCSAgICBzdHJuY21wKGNvbmNhdHBhdGgsIG9wdGlvbnMtPnByZWZpeCwgb3B0aW9ucy0+cHJlZml4X2xlbmd0aCkpCiAJCXJldHVybjsKQEAgLTMzNjQsMTkgKzM0MDAsMjAgQEAKIAkJIHVuc2lnbmVkIG9sZF9tb2RlLCB1bnNpZ25lZCBuZXdfbW9kZSwKIAkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZF9zaGExLAogCQkgY29uc3QgdW5zaWduZWQgY2hhciAqbmV3X3NoYTEsCi0JCSBjb25zdCBjaGFyICpiYXNlLCBjb25zdCBjaGFyICpwYXRoKQorCQkgY29uc3QgY2hhciAqY29uY2F0cGF0aCkKIHsKLQljaGFyIGNvbmNhdHBhdGhbUEFUSF9NQVhdOwogCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUsICp0d287CiAKKwlpZiAoRElGRl9PUFRfVFNUKG9wdGlvbnMsIElHTk9SRV9TVUJNT0RVTEVTKSAmJiBTX0lTR0lUTElOSyhvbGRfbW9kZSkKKwkJCSYmIFNfSVNHSVRMSU5LKG5ld19tb2RlKSkKKwkJcmV0dXJuOworCiAJaWYgKERJRkZfT1BUX1RTVChvcHRpb25zLCBSRVZFUlNFX0RJRkYpKSB7CiAJCXVuc2lnbmVkIHRtcDsKIAkJY29uc3QgdW5zaWduZWQgY2hhciAqdG1wX2M7CiAJCXRtcCA9IG9sZF9tb2RlOyBvbGRfbW9kZSA9IG5ld19tb2RlOyBuZXdfbW9kZSA9IHRtcDsKIAkJdG1wX2MgPSBvbGRfc2hhMTsgb2xkX3NoYTEgPSBuZXdfc2hhMTsgbmV3X3NoYTEgPSB0bXBfYzsKIAl9Ci0JaWYgKCFwYXRoKSBwYXRoID0gIiI7Ci0Jc3ByaW50Zihjb25jYXRwYXRoLCAiJXMlcyIsIGJhc2UsIHBhdGgpOwogCiAJaWYgKG9wdGlvbnMtPnByZWZpeCAmJgogCSAgICBzdHJuY21wKGNvbmNhdHBhdGgsIG9wdGlvbnMtPnByZWZpeCwgb3B0aW9ucy0+cHJlZml4X2xlbmd0aCkpCmRpZmYgLS1naXQgYS9kaWZmLmggYi9kaWZmLmgKaW5kZXggZjJjNzczOS4uNTBmYjVkZCAxMDA2NDQKLS0tIGEvZGlmZi5oCisrKyBiL2RpZmYuaApAQCAtMTQsMTIgKzE0LDEyIEBACiAJCSB1bnNpZ25lZCBvbGRfbW9kZSwgdW5zaWduZWQgbmV3X21vZGUsCiAJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpvbGRfc2hhMSwKIAkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ld19zaGExLAotCQkgY29uc3QgY2hhciAqYmFzZSwgY29uc3QgY2hhciAqcGF0aCk7CisJCSBjb25zdCBjaGFyICpmdWxscGF0aCk7CiAKIHR5cGVkZWYgdm9pZCAoKmFkZF9yZW1vdmVfZm5fdCkoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywKIAkJICAgIGludCBhZGRyZW1vdmUsIHVuc2lnbmVkIG1vZGUsCiAJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAotCQkgICAgY29uc3QgY2hhciAqYmFzZSwgY29uc3QgY2hhciAqcGF0aCk7CisJCSAgICBjb25zdCBjaGFyICpmdWxscGF0aCk7CiAKIHR5cGVkZWYgdm9pZCAoKmRpZmZfZm9ybWF0X2ZuX3QpKHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSwKIAkJc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywgdm9pZCAqZGF0YSk7CkBAIC02Myw2ICs2Myw3IEBACiAjZGVmaW5lIERJRkZfT1BUX1JFVkVSU0VfRElGRiAgICAgICAgKDEgPDwgMTUpCiAjZGVmaW5lIERJRkZfT1BUX0NIRUNLX0ZBSUxFRCAgICAgICAgKDEgPDwgMTYpCiAjZGVmaW5lIERJRkZfT1BUX1JFTEFUSVZFX05BTUUgICAgICAgKDEgPDwgMTcpCisjZGVmaW5lIERJRkZfT1BUX0lHTk9SRV9TVUJNT0RVTEVTICAgKDEgPDwgMTgpCiAjZGVmaW5lIERJRkZfT1BUX1RTVChvcHRzLCBmbGFnKSAgICAoKG9wdHMpLT5mbGFncyAmIERJRkZfT1BUXyMjZmxhZykKICNkZWZpbmUgRElGRl9PUFRfU0VUKG9wdHMsIGZsYWcpICAgICgob3B0cyktPmZsYWdzIHw9IERJRkZfT1BUXyMjZmxhZykKICNkZWZpbmUgRElGRl9PUFRfQ0xSKG9wdHMsIGZsYWcpICAgICgob3B0cyktPmZsYWdzICY9IH5ESUZGX09QVF8jI2ZsYWcpCkBAIC04MywxMiArODQsMTIgQEAKIAlpbnQgcGlja2F4ZV9vcHRzOwogCWludCByZW5hbWVfc2NvcmU7CiAJaW50IHJlbmFtZV9saW1pdDsKKwlpbnQgd2Fybl9vbl90b29fbGFyZ2VfcmVuYW1lOwogCWludCBkaXJzdGF0X3BlcmNlbnQ7CiAJaW50IHNldHVwOwogCWludCBhYmJyZXY7CiAJY29uc3QgY2hhciAqcHJlZml4OwogCWludCBwcmVmaXhfbGVuZ3RoOwotCWNvbnN0IGNoYXIgKm1zZ19zZXA7CiAJY29uc3QgY2hhciAqc3RhdF9zZXA7CiAJbG9uZyB4ZGxfb3B0czsKIApAQCAtMTYzLDE0ICsxNjQsMTMgQEAKIAkJCSAgIGludCBhZGRyZW1vdmUsCiAJCQkgICB1bnNpZ25lZCBtb2RlLAogCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKLQkJCSAgIGNvbnN0IGNoYXIgKmJhc2UsCi0JCQkgICBjb25zdCBjaGFyICpwYXRoKTsKKwkJCSAgIGNvbnN0IGNoYXIgKmZ1bGxwYXRoKTsKIAogZXh0ZXJuIHZvaWQgZGlmZl9jaGFuZ2Uoc3RydWN0IGRpZmZfb3B0aW9ucyAqLAogCQkJdW5zaWduZWQgbW9kZTEsIHVuc2lnbmVkIG1vZGUyLAogCQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKIAkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTIsCi0JCQljb25zdCBjaGFyICpiYXNlLCBjb25zdCBjaGFyICpwYXRoKTsKKwkJCWNvbnN0IGNoYXIgKmZ1bGxwYXRoKTsKIAogZXh0ZXJuIHZvaWQgZGlmZl91bm1lcmdlKHN0cnVjdCBkaWZmX29wdGlvbnMgKiwKIAkJCSBjb25zdCBjaGFyICpwYXRoLApAQCAtMTgxLDggKzE4MSw4IEBACiAjZGVmaW5lIERJRkZfU0VUVVBfVVNFX0NBQ0hFCQkyCiAjZGVmaW5lIERJRkZfU0VUVVBfVVNFX1NJWkVfQ0FDSEUJNAogCi1leHRlcm4gaW50IGdpdF9kaWZmX2Jhc2ljX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKTsKLWV4dGVybiBpbnQgZ2l0X2RpZmZfdWlfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpOworZXh0ZXJuIGludCBnaXRfZGlmZl9iYXNpY19jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpOworZXh0ZXJuIGludCBnaXRfZGlmZl91aV9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpOwogZXh0ZXJuIGludCBkaWZmX3VzZV9jb2xvcl9kZWZhdWx0OwogZXh0ZXJuIHZvaWQgZGlmZl9zZXR1cChzdHJ1Y3QgZGlmZl9vcHRpb25zICopOwogZXh0ZXJuIGludCBkaWZmX29wdF9wYXJzZShzdHJ1Y3QgZGlmZl9vcHRpb25zICosIGNvbnN0IGNoYXIgKiosIGludCk7CkBAIC0yNTAsMTAgKzI1MCw2IEBACiAvKiByZXBvcnQgcmFjaWx5LWNsZWFuIHBhdGhzIGFzIG1vZGlmaWVkICovCiAjZGVmaW5lIERJRkZfUkFDWV9JU19NT0RJRklFRCAwMgogZXh0ZXJuIGludCBydW5fZGlmZl9maWxlcyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHVuc2lnbmVkIGludCBvcHRpb24pOwotZXh0ZXJuIGludCBzZXR1cF9kaWZmX25vX2luZGV4KHN0cnVjdCByZXZfaW5mbyAqcmV2cywKLQkJaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiogYXJndiwgaW50IG5vbmdpdCwgY29uc3QgY2hhciAqcHJlZml4KTsKLWV4dGVybiBpbnQgcnVuX2RpZmZfZmlsZXNfY21kKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKLQogZXh0ZXJuIGludCBydW5fZGlmZl9pbmRleChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGludCBjYWNoZWQpOwogCiBleHRlcm4gaW50IGRvX2RpZmZfY2FjaGUoY29uc3QgdW5zaWduZWQgY2hhciAqLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICopOwpAQCAtMjYxLDQgKzI1Nyw2IEBACiAKIGV4dGVybiBpbnQgZGlmZl9yZXN1bHRfY29kZShzdHJ1Y3QgZGlmZl9vcHRpb25zICosIGludCk7CiAKK2V4dGVybiB2b2lkIGRpZmZfbm9faW5kZXgoc3RydWN0IHJldl9pbmZvICosIGludCwgY29uc3QgY2hhciAqKiwgaW50LCBjb25zdCBjaGFyICopOworCiAjZW5kaWYgLyogRElGRl9IICovCmRpZmYgLS1naXQgYS9kaWZmY29yZS1yZW5hbWUuYyBiL2RpZmZjb3JlLXJlbmFtZS5jCmluZGV4IDMxOTQxYmMuLjFiMmViYjQgMTAwNjQ0Ci0tLSBhL2RpZmZjb3JlLXJlbmFtZS5jCisrKyBiL2RpZmZjb3JlLXJlbmFtZS5jCkBAIC0xMTIsOCArMTEyLDggQEAKIHN0cnVjdCBkaWZmX3Njb3JlIHsKIAlpbnQgc3JjOyAvKiBpbmRleCBpbiByZW5hbWVfc3JjICovCiAJaW50IGRzdDsgLyogaW5kZXggaW4gcmVuYW1lX2RzdCAqLwotCWludCBzY29yZTsKLQlpbnQgbmFtZV9zY29yZTsKKwl1bnNpZ25lZCBzaG9ydCBzY29yZTsKKwlzaG9ydCBuYW1lX3Njb3JlOwogfTsKIAogc3RhdGljIGludCBlc3RpbWF0ZV9zaW1pbGFyaXR5KHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzcmMsCkBAIC0yMjMsNiArMjIzLDEyIEBACiB7CiAJY29uc3Qgc3RydWN0IGRpZmZfc2NvcmUgKmEgPSBhXywgKmIgPSBiXzsKIAorCS8qIHNpbmsgdGhlIHVudXNlZCBvbmVzIHRvIHRoZSBib3R0b20gKi8KKwlpZiAoYS0+ZHN0IDwgMCkKKwkJcmV0dXJuICgwIDw9IGItPmRzdCk7CisJZWxzZSBpZiAoYi0+ZHN0IDwgMCkKKwkJcmV0dXJuIC0xOworCiAJaWYgKGEtPnNjb3JlID09IGItPnNjb3JlKQogCQlyZXR1cm4gYi0+bmFtZV9zY29yZSAtIGEtPm5hbWVfc2NvcmU7CiAKQEAgLTM4Nyw2ICszOTMsMjIgQEAKIAlyZXR1cm4gaTsKIH0KIAorI2RlZmluZSBOVU1fQ0FORElEQVRFX1BFUl9EU1QgNAorc3RhdGljIHZvaWQgcmVjb3JkX2lmX2JldHRlcihzdHJ1Y3QgZGlmZl9zY29yZSBtW10sIHN0cnVjdCBkaWZmX3Njb3JlICpvKQoreworCWludCBpLCB3b3JzdDsKKworCS8qIGZpbmQgdGhlIHdvcnN0IG9uZSAqLworCXdvcnN0ID0gMDsKKwlmb3IgKGkgPSAxOyBpIDwgTlVNX0NBTkRJREFURV9QRVJfRFNUOyBpKyspCisJCWlmIChzY29yZV9jb21wYXJlKCZtW2ldLCAmbVt3b3JzdF0pID4gMCkKKwkJCXdvcnN0ID0gaTsKKworCS8qIGlzIGl0IGJldHRlciB0aGFuIHRoZSB3b3JzdCBvbmU/ICovCisJaWYgKHNjb3JlX2NvbXBhcmUoJm1bd29yc3RdLCBvKSA+IDApCisJCW1bd29yc3RdID0gKm87Cit9CisKIHZvaWQgZGlmZmNvcmVfcmVuYW1lKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMpCiB7CiAJaW50IGRldGVjdF9yZW5hbWUgPSBvcHRpb25zLT5kZXRlY3RfcmVuYW1lOwpAQCAtNDcwLDUxICs0OTIsNjYgQEAKIAkJcmVuYW1lX2xpbWl0ID0gMzI3Njc7CiAJaWYgKChudW1fY3JlYXRlID4gcmVuYW1lX2xpbWl0ICYmIG51bV9zcmMgPiByZW5hbWVfbGltaXQpIHx8CiAJICAgIChudW1fY3JlYXRlICogbnVtX3NyYyA+IHJlbmFtZV9saW1pdCAqIHJlbmFtZV9saW1pdCkpIHsKLQkJd2FybmluZygidG9vIG1hbnkgZmlsZXMsIHNraXBwaW5nIGluZXhhY3QgcmVuYW1lIGRldGVjdGlvbiIpOworCQlpZiAob3B0aW9ucy0+d2Fybl9vbl90b29fbGFyZ2VfcmVuYW1lKQorCQkJd2FybmluZygidG9vIG1hbnkgZmlsZXMsIHNraXBwaW5nIGluZXhhY3QgcmVuYW1lIGRldGVjdGlvbiIpOwogCQlnb3RvIGNsZWFudXA7CiAJfQogCi0JbXggPSB4bWFsbG9jKHNpemVvZigqbXgpICogbnVtX2NyZWF0ZSAqIG51bV9zcmMpOworCW14ID0geGNhbGxvYyhudW1fY3JlYXRlICogTlVNX0NBTkRJREFURV9QRVJfRFNULCBzaXplb2YoKm14KSk7CiAJZm9yIChkc3RfY250ID0gaSA9IDA7IGkgPCByZW5hbWVfZHN0X25yOyBpKyspIHsKLQkJaW50IGJhc2UgPSBkc3RfY250ICogbnVtX3NyYzsKIAkJc3RydWN0IGRpZmZfZmlsZXNwZWMgKnR3byA9IHJlbmFtZV9kc3RbaV0udHdvOworCQlzdHJ1Y3QgZGlmZl9zY29yZSAqbTsKKwogCQlpZiAocmVuYW1lX2RzdFtpXS5wYWlyKQogCQkJY29udGludWU7IC8qIGRlYWx0IHdpdGggZXhhY3QgbWF0Y2ggYWxyZWFkeS4gKi8KKworCQltID0gJm14W2RzdF9jbnQgKiBOVU1fQ0FORElEQVRFX1BFUl9EU1RdOworCQlmb3IgKGogPSAwOyBqIDwgTlVNX0NBTkRJREFURV9QRVJfRFNUOyBqKyspCisJCQltW2pdLmRzdCA9IC0xOworCiAJCWZvciAoaiA9IDA7IGogPCByZW5hbWVfc3JjX25yOyBqKyspIHsKIAkJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUgPSByZW5hbWVfc3JjW2pdLm9uZTsKLQkJCXN0cnVjdCBkaWZmX3Njb3JlICptID0gJm14W2Jhc2Ural07Ci0JCQltLT5zcmMgPSBqOwotCQkJbS0+ZHN0ID0gaTsKLQkJCW0tPnNjb3JlID0gZXN0aW1hdGVfc2ltaWxhcml0eShvbmUsIHR3bywKLQkJCQkJCSAgICAgICBtaW5pbXVtX3Njb3JlKTsKLQkJCW0tPm5hbWVfc2NvcmUgPSBiYXNlbmFtZV9zYW1lKG9uZSwgdHdvKTsKKwkJCXN0cnVjdCBkaWZmX3Njb3JlIHRoaXNfc3JjOworCQkJdGhpc19zcmMuc2NvcmUgPSBlc3RpbWF0ZV9zaW1pbGFyaXR5KG9uZSwgdHdvLAorCQkJCQkJCSAgICAgbWluaW11bV9zY29yZSk7CisJCQl0aGlzX3NyYy5uYW1lX3Njb3JlID0gYmFzZW5hbWVfc2FtZShvbmUsIHR3byk7CisJCQl0aGlzX3NyYy5kc3QgPSBpOworCQkJdGhpc19zcmMuc3JjID0gajsKKwkJCXJlY29yZF9pZl9iZXR0ZXIobSwgJnRoaXNfc3JjKTsKIAkJCWRpZmZfZnJlZV9maWxlc3BlY19ibG9iKG9uZSk7CiAJCX0KIAkJLyogV2UgZG8gbm90IG5lZWQgdGhlIHRleHQgYW55bW9yZSAqLwogCQlkaWZmX2ZyZWVfZmlsZXNwZWNfYmxvYih0d28pOwogCQlkc3RfY250Kys7CiAJfQorCiAJLyogY29zdCBtYXRyaXggc29ydGVkIGJ5IG1vc3QgdG8gbGVhc3Qgc2ltaWxhciBwYWlyICovCi0JcXNvcnQobXgsIG51bV9jcmVhdGUgKiBudW1fc3JjLCBzaXplb2YoKm14KSwgc2NvcmVfY29tcGFyZSk7Ci0JZm9yIChpID0gMDsgaSA8IG51bV9jcmVhdGUgKiBudW1fc3JjOyBpKyspIHsKLQkJc3RydWN0IGRpZmZfcmVuYW1lX2RzdCAqZHN0ID0gJnJlbmFtZV9kc3RbbXhbaV0uZHN0XTsKLQkJc3RydWN0IGRpZmZfZmlsZXNwZWMgKnNyYzsKKwlxc29ydChteCwgZHN0X2NudCAqIE5VTV9DQU5ESURBVEVfUEVSX0RTVCwgc2l6ZW9mKCpteCksIHNjb3JlX2NvbXBhcmUpOworCisJZm9yIChpID0gMDsgaSA8IGRzdF9jbnQgKiBOVU1fQ0FORElEQVRFX1BFUl9EU1Q7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9yZW5hbWVfZHN0ICpkc3Q7CisKKwkJaWYgKChteFtpXS5kc3QgPCAwKSB8fAorCQkgICAgKG14W2ldLnNjb3JlIDwgbWluaW11bV9zY29yZSkpCisJCQlicmVhazsgLyogdGhlcmUgaXMgbm8gbW9yZSB1c2FibGUgcGFpci4gKi8KKwkJZHN0ID0gJnJlbmFtZV9kc3RbbXhbaV0uZHN0XTsKIAkJaWYgKGRzdC0+cGFpcikKIAkJCWNvbnRpbnVlOyAvKiBhbHJlYWR5IGRvbmUsIGVpdGhlciBleGFjdCBvciBmdXp6eS4gKi8KLQkJaWYgKG14W2ldLnNjb3JlIDwgbWluaW11bV9zY29yZSkKLQkJCWJyZWFrOyAvKiB0aGVyZSBpcyBubyBtb3JlIHVzYWJsZSBwYWlyLiAqLwotCQlzcmMgPSByZW5hbWVfc3JjW214W2ldLnNyY10ub25lOwotCQlpZiAoc3JjLT5yZW5hbWVfdXNlZCkKKwkJaWYgKHJlbmFtZV9zcmNbbXhbaV0uc3JjXS5vbmUtPnJlbmFtZV91c2VkKQogCQkJY29udGludWU7CiAJCXJlY29yZF9yZW5hbWVfcGFpcihteFtpXS5kc3QsIG14W2ldLnNyYywgbXhbaV0uc2NvcmUpOwogCQlyZW5hbWVfY291bnQrKzsKIAl9Ci0JZm9yIChpID0gMDsgaSA8IG51bV9jcmVhdGUgKiBudW1fc3JjOyBpKyspIHsKLQkJc3RydWN0IGRpZmZfcmVuYW1lX2RzdCAqZHN0ID0gJnJlbmFtZV9kc3RbbXhbaV0uZHN0XTsKKworCWZvciAoaSA9IDA7IGkgPCBkc3RfY250ICogTlVNX0NBTkRJREFURV9QRVJfRFNUOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfcmVuYW1lX2RzdCAqZHN0OworCisJCWlmICgobXhbaV0uZHN0IDwgMCkgfHwKKwkJICAgIChteFtpXS5zY29yZSA8IG1pbmltdW1fc2NvcmUpKQorCQkJYnJlYWs7IC8qIHRoZXJlIGlzIG5vIG1vcmUgdXNhYmxlIHBhaXIuICovCisJCWRzdCA9ICZyZW5hbWVfZHN0W214W2ldLmRzdF07CiAJCWlmIChkc3QtPnBhaXIpCiAJCQljb250aW51ZTsgLyogYWxyZWFkeSBkb25lLCBlaXRoZXIgZXhhY3Qgb3IgZnV6enkuICovCi0JCWlmIChteFtpXS5zY29yZSA8IG1pbmltdW1fc2NvcmUpCi0JCQlicmVhazsgLyogdGhlcmUgaXMgbm8gbW9yZSB1c2FibGUgcGFpci4gKi8KIAkJcmVjb3JkX3JlbmFtZV9wYWlyKG14W2ldLmRzdCwgbXhbaV0uc3JjLCBteFtpXS5zY29yZSk7CiAJCXJlbmFtZV9jb3VudCsrOwogCX0KZGlmZiAtLWdpdCBhL2Rpci5jIGIvZGlyLmMKaW5kZXggZDc5NzYyYy4uMTA5ZTA1YiAxMDA2NDQKLS0tIGEvZGlyLmMKKysrIGIvZGlyLmMKQEAgLTUyLDYgKzUyLDExIEBACiAJcmV0dXJuIHByZWZpeDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgc3BlY2lhbF9jaGFyKHVuc2lnbmVkIGNoYXIgYzEpCit7CisJcmV0dXJuICFjMSB8fCBjMSA9PSAnKicgfHwgYzEgPT0gJ1snIHx8IGMxID09ICc/JyB8fCBjMSA9PSAnXFwnOworfQorCiAvKgogICogRG9lcyAnbWF0Y2gnIG1hdGNoZXMgdGhlIGdpdmVuIG5hbWU/CiAgKiBBIG1hdGNoIGlzIGZvdW5kIGlmCkBAIC02OSwxNCArNzQsMjcgQEAKIAlpbnQgbWF0Y2hsZW47CiAKIAkvKiBJZiB0aGUgbWF0Y2ggd2FzIGp1c3QgdGhlIHByZWZpeCwgd2UgbWF0Y2hlZCAqLwotCW1hdGNobGVuID0gc3RybGVuKG1hdGNoKTsKLQlpZiAoIW1hdGNobGVuKQorCWlmICghKm1hdGNoKQogCQlyZXR1cm4gTUFUQ0hFRF9SRUNVUlNJVkVMWTsKIAorCWZvciAoOzspIHsKKwkJdW5zaWduZWQgY2hhciBjMSA9ICptYXRjaDsKKwkJdW5zaWduZWQgY2hhciBjMiA9ICpuYW1lOworCQlpZiAoc3BlY2lhbF9jaGFyKGMxKSkKKwkJCWJyZWFrOworCQlpZiAoYzEgIT0gYzIpCisJCQlyZXR1cm4gMDsKKwkJbWF0Y2grKzsKKwkJbmFtZSsrOworCQluYW1lbGVuLS07CisJfQorCisKIAkvKgogCSAqIElmIHdlIGRvbid0IG1hdGNoIHRoZSBtYXRjaHN0cmluZyBleGFjdGx5LAogCSAqIHdlIG5lZWQgdG8gbWF0Y2ggYnkgZm5tYXRjaAogCSAqLworCW1hdGNobGVuID0gc3RybGVuKG1hdGNoKTsKIAlpZiAoc3RybmNtcChtYXRjaCwgbmFtZSwgbWF0Y2hsZW4pKQogCQlyZXR1cm4gIWZubWF0Y2gobWF0Y2gsIG5hbWUsIDApID8gTUFUQ0hFRF9GTk1BVENIIDogMDsKIApAQCAtMzcxLDcgKzM4OSw3IEBACiAKIHN0cnVjdCBkaXJfZW50cnkgKmRpcl9hZGRfbmFtZShzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLCBjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IGxlbikKIHsKLQlpZiAoY2FjaGVfbmFtZV9leGlzdHMocGF0aG5hbWUsIGxlbikpCisJaWYgKGNhY2hlX25hbWVfZXhpc3RzKHBhdGhuYW1lLCBsZW4sIGlnbm9yZV9jYXNlKSkKIAkJcmV0dXJuIE5VTEw7CiAKIAlBTExPQ19HUk9XKGRpci0+ZW50cmllcywgZGlyLT5ucisxLCBkaXItPmFsbG9jKTsKZGlmZiAtLWdpdCBhL2Vudmlyb25tZW50LmMgYi9lbnZpcm9ubWVudC5jCmluZGV4IDY3MzlhM2YuLmQ1YzNlMjkgMTAwNjQ0Ci0tLSBhL2Vudmlyb25tZW50LmMKKysrIGIvZW52aXJvbm1lbnQuYwpAQCAtMTEsOSArMTEsMTEgQEAKIAogY2hhciBnaXRfZGVmYXVsdF9lbWFpbFtNQVhfR0lUTkFNRV07CiBjaGFyIGdpdF9kZWZhdWx0X25hbWVbTUFYX0dJVE5BTUVdOworaW50IHVzZXJfaWRlbnRfZXhwbGljaXRseV9naXZlbjsKIGludCB0cnVzdF9leGVjdXRhYmxlX2JpdCA9IDE7CiBpbnQgcXVvdGVfcGF0aF9mdWxseSA9IDE7CiBpbnQgaGFzX3N5bWxpbmtzID0gMTsKK2ludCBpZ25vcmVfY2FzZTsKIGludCBhc3N1bWVfdW5jaGFuZ2VkOwogaW50IHByZWZlcl9zeW1saW5rX3JlZnM7CiBpbnQgaXNfYmFyZV9yZXBvc2l0b3J5X2NmZyA9IC0xOyAvKiB1bnNwZWNpZmllZCAqLwpAQCAtMjcsNiArMjksNyBAQAogaW50IHpsaWJfY29tcHJlc3Npb25fbGV2ZWwgPSBaX0JFU1RfU1BFRUQ7CiBpbnQgY29yZV9jb21wcmVzc2lvbl9sZXZlbDsKIGludCBjb3JlX2NvbXByZXNzaW9uX3NlZW47CitpbnQgZnN5bmNfb2JqZWN0X2ZpbGVzOwogc2l6ZV90IHBhY2tlZF9naXRfd2luZG93X3NpemUgPSBERUZBVUxUX1BBQ0tFRF9HSVRfV0lORE9XX1NJWkU7CiBzaXplX3QgcGFja2VkX2dpdF9saW1pdCA9IERFRkFVTFRfUEFDS0VEX0dJVF9MSU1JVDsKIHNpemVfdCBkZWx0YV9iYXNlX2NhY2hlX2xpbWl0ID0gMTYgKiAxMDI0ICogMTAyNDsKQEAgLTM4LDEwICs0MSwxMSBAQAogZW51bSBzYWZlX2NybGYgc2FmZV9jcmxmID0gU0FGRV9DUkxGX1dBUk47CiB1bnNpZ25lZCB3aGl0ZXNwYWNlX3J1bGVfY2ZnID0gV1NfREVGQVVMVF9SVUxFOwogZW51bSBicmFuY2hfdHJhY2sgZ2l0X2JyYW5jaF90cmFjayA9IEJSQU5DSF9UUkFDS19SRU1PVEU7CitlbnVtIHJlYmFzZV9zZXR1cF90eXBlIGF1dG9yZWJhc2UgPSBBVVRPUkVCQVNFX05FVkVSOwogCiAvKiBUaGlzIGlzIHNldCBieSBzZXR1cF9naXRfZGlyX2dlbnRseSgpIGFuZC9vciBnaXRfZGVmYXVsdF9jb25maWcoKSAqLwogY2hhciAqZ2l0X3dvcmtfdHJlZV9jZmc7Ci1zdGF0aWMgY29uc3QgY2hhciAqd29ya190cmVlOworc3RhdGljIGNoYXIgKndvcmtfdHJlZTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKmdpdF9kaXI7CiBzdGF0aWMgY2hhciAqZ2l0X29iamVjdF9kaXIsICpnaXRfaW5kZXhfZmlsZSwgKmdpdF9yZWZzX2RpciwgKmdpdF9ncmFmdF9maWxlOwpAQCAtNTAsNiArNTQsOCBAQAogewogCWdpdF9kaXIgPSBnZXRlbnYoR0lUX0RJUl9FTlZJUk9OTUVOVCk7CiAJaWYgKCFnaXRfZGlyKQorCQlnaXRfZGlyID0gcmVhZF9naXRmaWxlX2dlbnRseShERUZBVUxUX0dJVF9ESVJfRU5WSVJPTk1FTlQpOworCWlmICghZ2l0X2RpcikKIAkJZ2l0X2RpciA9IERFRkFVTFRfR0lUX0RJUl9FTlZJUk9OTUVOVDsKIAlnaXRfb2JqZWN0X2RpciA9IGdldGVudihEQl9FTlZJUk9OTUVOVCk7CiAJaWYgKCFnaXRfb2JqZWN0X2RpcikgewpAQCAtODEsMTAgKzg3LDI2IEBACiAJcmV0dXJuIGdpdF9kaXI7CiB9CiAKK3N0YXRpYyBpbnQgZ2l0X3dvcmtfdHJlZV9pbml0aWFsaXplZDsKKworLyoKKyAqIE5vdGUuICBUaGlzIHdvcmtzIG9ubHkgYmVmb3JlIHlvdSB1c2VkIGEgd29yayB0cmVlLiAgVGhpcyB3YXMgYWRkZWQKKyAqIHByaW1hcmlseSB0byBzdXBwb3J0IGdpdC1jbG9uZSB0byB3b3JrIGluIGEgbmV3IHJlcG9zaXRvcnkgaXQganVzdAorICogY3JlYXRlZCwgYW5kIGlzIG5vdCBtZWFudCB0byBmbGlwIGJldHdlZW4gZGlmZmVyZW50IHdvcmsgdHJlZXMuCisgKi8KK3ZvaWQgc2V0X2dpdF93b3JrX3RyZWUoY29uc3QgY2hhciAqbmV3X3dvcmtfdHJlZSkKK3sKKwlpZiAoaXNfYmFyZV9yZXBvc2l0b3J5X2NmZyA+PSAwKQorCQlkaWUoImNhbm5vdCBzZXQgd29yayB0cmVlIGFmdGVyIGluaXRpYWxpemF0aW9uIik7CisJZ2l0X3dvcmtfdHJlZV9pbml0aWFsaXplZCA9IDE7CisJZnJlZSh3b3JrX3RyZWUpOworCXdvcmtfdHJlZSA9IHhzdHJkdXAobWFrZV9hYnNvbHV0ZV9wYXRoKG5ld193b3JrX3RyZWUpKTsKKwlpc19iYXJlX3JlcG9zaXRvcnlfY2ZnID0gMDsKK30KKwogY29uc3QgY2hhciAqZ2V0X2dpdF93b3JrX3RyZWUodm9pZCkKIHsKLQlzdGF0aWMgaW50IGluaXRpYWxpemVkID0gMDsKLQlpZiAoIWluaXRpYWxpemVkKSB7CisJaWYgKCFnaXRfd29ya190cmVlX2luaXRpYWxpemVkKSB7CiAJCXdvcmtfdHJlZSA9IGdldGVudihHSVRfV09SS19UUkVFX0VOVklST05NRU5UKTsKIAkJLyogY29yZS5iYXJlID0gdHJ1ZSBvdmVycmlkZXMgaW1wbGljaXQgYW5kIGNvbmZpZyB3b3JrIHRyZWUgKi8KIAkJaWYgKCF3b3JrX3RyZWUgJiYgaXNfYmFyZV9yZXBvc2l0b3J5X2NmZyA8IDEpIHsKQEAgLTk0LDcgKzExNiw3IEBACiAJCQkJd29ya190cmVlID0geHN0cmR1cChtYWtlX2Fic29sdXRlX3BhdGgoZ2l0X3BhdGgod29ya190cmVlKSkpOwogCQl9IGVsc2UgaWYgKHdvcmtfdHJlZSkKIAkJCXdvcmtfdHJlZSA9IHhzdHJkdXAobWFrZV9hYnNvbHV0ZV9wYXRoKHdvcmtfdHJlZSkpOwotCQlpbml0aWFsaXplZCA9IDE7CisJCWdpdF93b3JrX3RyZWVfaW5pdGlhbGl6ZWQgPSAxOwogCQlpZiAod29ya190cmVlKQogCQkJaXNfYmFyZV9yZXBvc2l0b3J5X2NmZyA9IDA7CiAJfQpkaWZmIC0tZ2l0IGEvZmFzdC1pbXBvcnQuYyBiL2Zhc3QtaW1wb3J0LmMKaW5kZXggNzNlNTQzOS4uZTcyYjI4NiAxMDA2NDQKLS0tIGEvZmFzdC1pbXBvcnQuYworKysgYi9mYXN0LWltcG9ydC5jCkBAIC04OTAsNyArODkwLDcgQEAKIAkJU0hBMV9VcGRhdGUoJmN0eCwgKCpjKS0+c2hhMSwgMjApOwogCX0KIAlzaGExd3JpdGUoZiwgcGFja19kYXRhLT5zaGExLCBzaXplb2YocGFja19kYXRhLT5zaGExKSk7Ci0Jc2hhMWNsb3NlKGYsIE5VTEwsIDEpOworCXNoYTFjbG9zZShmLCBOVUxMLCBDU1VNX0ZTWU5DKTsKIAlmcmVlKGlkeCk7CiAJU0hBMV9GaW5hbChwYWNrX2RhdGEtPnNoYTEsICZjdHgpOwogCXJldHVybiB0bXBmaWxlOwpAQCAtMTY5MCw3ICsxNjkwLDcgQEAKIAkJdW5nZXRjKHRlcm1fY2hhciwgc3RkaW4pOwogfQogCi1zdGF0aWMgdm9pZCBjbWRfbWFyayh2b2lkKQorc3RhdGljIHZvaWQgcGFyc2VfbWFyayh2b2lkKQogewogCWlmICghcHJlZml4Y21wKGNvbW1hbmRfYnVmLmJ1ZiwgIm1hcmsgOiIpKSB7CiAJCW5leHRfbWFyayA9IHN0cnRvdW1heChjb21tYW5kX2J1Zi5idWYgKyA2LCBOVUxMLCAxMCk7CkBAIC0xNzAwLDcgKzE3MDAsNyBAQAogCQluZXh0X21hcmsgPSAwOwogfQogCi1zdGF0aWMgdm9pZCBjbWRfZGF0YShzdHJ1Y3Qgc3RyYnVmICpzYikKK3N0YXRpYyB2b2lkIHBhcnNlX2RhdGEoc3RydWN0IHN0cmJ1ZiAqc2IpCiB7CiAJc3RyYnVmX3Jlc2V0KHNiKTsKIApAQCAtMTc5OCwxMyArMTc5OCwxMyBAQAogCXJldHVybiBpZGVudDsKIH0KIAotc3RhdGljIHZvaWQgY21kX25ld19ibG9iKHZvaWQpCitzdGF0aWMgdm9pZCBwYXJzZV9uZXdfYmxvYih2b2lkKQogewogCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOwogCiAJcmVhZF9uZXh0X2NvbW1hbmQoKTsKLQljbWRfbWFyaygpOwotCWNtZF9kYXRhKCZidWYpOworCXBhcnNlX21hcmsoKTsKKwlwYXJzZV9kYXRhKCZidWYpOwogCXN0b3JlX29iamVjdChPQkpfQkxPQiwgJmJ1ZiwgJmxhc3RfYmxvYiwgTlVMTCwgbmV4dF9tYXJrKTsKIH0KIApAQCAtMTkwOCw3ICsxOTA4LDcgQEAKIAkJCXAgPSB1cS5idWY7CiAJCX0KIAkJcmVhZF9uZXh0X2NvbW1hbmQoKTsKLQkJY21kX2RhdGEoJmJ1Zik7CisJCXBhcnNlX2RhdGEoJmJ1Zik7CiAJCXN0b3JlX29iamVjdChPQkpfQkxPQiwgJmJ1ZiwgJmxhc3RfYmxvYiwgc2hhMSwgMCk7CiAJfSBlbHNlIGlmIChvZSkgewogCQlpZiAob2UtPnR5cGUgIT0gT0JKX0JMT0IpCkBAIC0xOTk1LDcgKzE5OTUsNyBAQAogCWxvYWRfdHJlZSgmYi0+YnJhbmNoX3RyZWUpOwogfQogCi1zdGF0aWMgdm9pZCBjbWRfZnJvbV9jb21taXQoc3RydWN0IGJyYW5jaCAqYiwgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUpCitzdGF0aWMgdm9pZCBwYXJzZV9mcm9tX2NvbW1pdChzdHJ1Y3QgYnJhbmNoICpiLCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAlpZiAoIWJ1ZiB8fCBzaXplIDwgNDYpCiAJCWRpZSgiTm90IGEgdmFsaWQgY29tbWl0OiAlcyIsIHNoYTFfdG9faGV4KGItPnNoYTEpKTsKQEAgLTIwMDYsNyArMjAwNiw3IEBACiAJCWItPmJyYW5jaF90cmVlLnZlcnNpb25zWzFdLnNoYTEpOwogfQogCi1zdGF0aWMgdm9pZCBjbWRfZnJvbV9leGlzdGluZyhzdHJ1Y3QgYnJhbmNoICpiKQorc3RhdGljIHZvaWQgcGFyc2VfZnJvbV9leGlzdGluZyhzdHJ1Y3QgYnJhbmNoICpiKQogewogCWlmIChpc19udWxsX3NoYTEoYi0+c2hhMSkpIHsKIAkJaGFzaGNscihiLT5icmFuY2hfdHJlZS52ZXJzaW9uc1swXS5zaGExKTsKQEAgLTIwMTcsMTIgKzIwMTcsMTIgQEAKIAogCQlidWYgPSByZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZShiLT5zaGExLAogCQkJY29tbWl0X3R5cGUsICZzaXplLCBiLT5zaGExKTsKLQkJY21kX2Zyb21fY29tbWl0KGIsIGJ1Ziwgc2l6ZSk7CisJCXBhcnNlX2Zyb21fY29tbWl0KGIsIGJ1Ziwgc2l6ZSk7CiAJCWZyZWUoYnVmKTsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgY21kX2Zyb20oc3RydWN0IGJyYW5jaCAqYikKK3N0YXRpYyBpbnQgcGFyc2VfZnJvbShzdHJ1Y3QgYnJhbmNoICpiKQogewogCWNvbnN0IGNoYXIgKmZyb207CiAJc3RydWN0IGJyYW5jaCAqczsKQEAgLTIwNTMsMTIgKzIwNTMsMTIgQEAKIAkJaWYgKG9lLT5wYWNrX2lkICE9IE1BWF9QQUNLX0lEKSB7CiAJCQl1bnNpZ25lZCBsb25nIHNpemU7CiAJCQljaGFyICpidWYgPSBnZmlfdW5wYWNrX2VudHJ5KG9lLCAmc2l6ZSk7Ci0JCQljbWRfZnJvbV9jb21taXQoYiwgYnVmLCBzaXplKTsKKwkJCXBhcnNlX2Zyb21fY29tbWl0KGIsIGJ1Ziwgc2l6ZSk7CiAJCQlmcmVlKGJ1Zik7CiAJCX0gZWxzZQotCQkJY21kX2Zyb21fZXhpc3RpbmcoYik7CisJCQlwYXJzZV9mcm9tX2V4aXN0aW5nKGIpOwogCX0gZWxzZSBpZiAoIWdldF9zaGExKGZyb20sIGItPnNoYTEpKQotCQljbWRfZnJvbV9leGlzdGluZyhiKTsKKwkJcGFyc2VfZnJvbV9leGlzdGluZyhiKTsKIAllbHNlCiAJCWRpZSgiSW52YWxpZCByZWYgbmFtZSBvciBTSEExIGV4cHJlc3Npb246ICVzIiwgZnJvbSk7CiAKQEAgLTIwNjYsNyArMjA2Niw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaGFzaF9saXN0ICpjbWRfbWVyZ2UodW5zaWduZWQgaW50ICpjb3VudCkKK3N0YXRpYyBzdHJ1Y3QgaGFzaF9saXN0ICpwYXJzZV9tZXJnZSh1bnNpZ25lZCBpbnQgKmNvdW50KQogewogCXN0cnVjdCBoYXNoX2xpc3QgKmxpc3QgPSBOVUxMLCAqbiwgKmUgPSBlOwogCWNvbnN0IGNoYXIgKmZyb207CkBAIC0yMTA3LDcgKzIxMDcsNyBAQAogCXJldHVybiBsaXN0OwogfQogCi1zdGF0aWMgdm9pZCBjbWRfbmV3X2NvbW1pdCh2b2lkKQorc3RhdGljIHZvaWQgcGFyc2VfbmV3X2NvbW1pdCh2b2lkKQogewogCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIG1zZyA9IFNUUkJVRl9JTklUOwogCXN0cnVjdCBicmFuY2ggKmI7CkBAIC0yMTI0LDcgKzIxMjQsNyBAQAogCQliID0gbmV3X2JyYW5jaChzcCk7CiAKIAlyZWFkX25leHRfY29tbWFuZCgpOwotCWNtZF9tYXJrKCk7CisJcGFyc2VfbWFyaygpOwogCWlmICghcHJlZml4Y21wKGNvbW1hbmRfYnVmLmJ1ZiwgImF1dGhvciAiKSkgewogCQlhdXRob3IgPSBwYXJzZV9pZGVudChjb21tYW5kX2J1Zi5idWYgKyA3KTsKIAkJcmVhZF9uZXh0X2NvbW1hbmQoKTsKQEAgLTIxMzUsMTAgKzIxMzUsMTAgQEAKIAl9CiAJaWYgKCFjb21taXR0ZXIpCiAJCWRpZSgiRXhwZWN0ZWQgY29tbWl0dGVyIGJ1dCBkaWRuJ3QgZ2V0IG9uZSIpOwotCWNtZF9kYXRhKCZtc2cpOworCXBhcnNlX2RhdGEoJm1zZyk7CiAJcmVhZF9uZXh0X2NvbW1hbmQoKTsKLQljbWRfZnJvbShiKTsKLQltZXJnZV9saXN0ID0gY21kX21lcmdlKCZtZXJnZV9jb3VudCk7CisJcGFyc2VfZnJvbShiKTsKKwltZXJnZV9saXN0ID0gcGFyc2VfbWVyZ2UoJm1lcmdlX2NvdW50KTsKIAogCS8qIGVuc3VyZSB0aGUgYnJhbmNoIGlzIGFjdGl2ZS9sb2FkZWQgKi8KIAlpZiAoIWItPmJyYW5jaF90cmVlLnRyZWUgfHwgIW1heF9hY3RpdmVfYnJhbmNoZXMpIHsKQEAgLTIxOTYsNyArMjE5Niw3IEBACiAJYi0+bGFzdF9jb21taXQgPSBvYmplY3RfY291bnRfYnlfdHlwZVtPQkpfQ09NTUlUXTsKIH0KIAotc3RhdGljIHZvaWQgY21kX25ld190YWcodm9pZCkKK3N0YXRpYyB2b2lkIHBhcnNlX25ld190YWcodm9pZCkKIHsKIAlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBtc2cgPSBTVFJCVUZfSU5JVDsKIAljaGFyICpzcDsKQEAgLTIyNTMsNyArMjI1Myw3IEBACiAKIAkvKiB0YWcgcGF5bG9hZC9tZXNzYWdlICovCiAJcmVhZF9uZXh0X2NvbW1hbmQoKTsKLQljbWRfZGF0YSgmbXNnKTsKKwlwYXJzZV9kYXRhKCZtc2cpOwogCiAJLyogYnVpbGQgdGhlIHRhZyBvYmplY3QgKi8KIAlzdHJidWZfcmVzZXQoJm5ld19kYXRhKTsKQEAgLTIyNzMsNyArMjI3Myw3IEBACiAJCXQtPnBhY2tfaWQgPSBwYWNrX2lkOwogfQogCi1zdGF0aWMgdm9pZCBjbWRfcmVzZXRfYnJhbmNoKHZvaWQpCitzdGF0aWMgdm9pZCBwYXJzZV9yZXNldF9icmFuY2godm9pZCkKIHsKIAlzdHJ1Y3QgYnJhbmNoICpiOwogCWNoYXIgKnNwOwpAQCAtMjI5MywxMiArMjI5MywxMiBAQAogCWVsc2UKIAkJYiA9IG5ld19icmFuY2goc3ApOwogCXJlYWRfbmV4dF9jb21tYW5kKCk7Ci0JY21kX2Zyb20oYik7CisJcGFyc2VfZnJvbShiKTsKIAlpZiAoY29tbWFuZF9idWYubGVuID4gMCkKIAkJdW5yZWFkX2NvbW1hbmRfYnVmID0gMTsKIH0KIAotc3RhdGljIHZvaWQgY21kX2NoZWNrcG9pbnQodm9pZCkKK3N0YXRpYyB2b2lkIHBhcnNlX2NoZWNrcG9pbnQodm9pZCkKIHsKIAlpZiAob2JqZWN0X2NvdW50KSB7CiAJCWN5Y2xlX3BhY2tmaWxlKCk7CkBAIC0yMzA5LDcgKzIzMDksNyBAQAogCXNraXBfb3B0aW9uYWxfbGYoKTsKIH0KIAotc3RhdGljIHZvaWQgY21kX3Byb2dyZXNzKHZvaWQpCitzdGF0aWMgdm9pZCBwYXJzZV9wcm9ncmVzcyh2b2lkKQogewogCWZ3cml0ZShjb21tYW5kX2J1Zi5idWYsIDEsIGNvbW1hbmRfYnVmLmxlbiwgc3Rkb3V0KTsKIAlmcHV0YygnXG4nLCBzdGRvdXQpOwpAQCAtMjM1Miw3ICsyMzUyLDcgQEAKIAlmY2xvc2UoZik7CiB9CiAKLXN0YXRpYyBpbnQgZ2l0X3BhY2tfY29uZmlnKGNvbnN0IGNoYXIgKmssIGNvbnN0IGNoYXIgKnYpCitzdGF0aWMgaW50IGdpdF9wYWNrX2NvbmZpZyhjb25zdCBjaGFyICprLCBjb25zdCBjaGFyICp2LCB2b2lkICpjYikKIHsKIAlpZiAoIXN0cmNtcChrLCAicGFjay5kZXB0aCIpKSB7CiAJCW1heF9kZXB0aCA9IGdpdF9jb25maWdfaW50KGssIHYpOwpAQCAtMjM3MCw3ICsyMzcwLDcgQEAKIAkJcGFja19jb21wcmVzc2lvbl9zZWVuID0gMTsKIAkJcmV0dXJuIDA7CiAJfQotCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcoaywgdik7CisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyhrLCB2LCBjYik7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyIGZhc3RfaW1wb3J0X3VzYWdlW10gPQpAQCAtMjM4MSw3ICsyMzgxLDcgQEAKIAl1bnNpZ25lZCBpbnQgaSwgc2hvd19zdGF0cyA9IDE7CiAKIAlzZXR1cF9naXRfZGlyZWN0b3J5KCk7Ci0JZ2l0X2NvbmZpZyhnaXRfcGFja19jb25maWcpOworCWdpdF9jb25maWcoZ2l0X3BhY2tfY29uZmlnLCBOVUxMKTsKIAlpZiAoIXBhY2tfY29tcHJlc3Npb25fc2VlbiAmJiBjb3JlX2NvbXByZXNzaW9uX3NlZW4pCiAJCXBhY2tfY29tcHJlc3Npb25fbGV2ZWwgPSBjb3JlX2NvbXByZXNzaW9uX2xldmVsOwogCkBAIC0yNDQ5LDE3ICsyNDQ5LDE3IEBACiAJc2V0X2RpZV9yb3V0aW5lKGRpZV9uaWNlbHkpOwogCXdoaWxlIChyZWFkX25leHRfY29tbWFuZCgpICE9IEVPRikgewogCQlpZiAoIXN0cmNtcCgiYmxvYiIsIGNvbW1hbmRfYnVmLmJ1ZikpCi0JCQljbWRfbmV3X2Jsb2IoKTsKKwkJCXBhcnNlX25ld19ibG9iKCk7CiAJCWVsc2UgaWYgKCFwcmVmaXhjbXAoY29tbWFuZF9idWYuYnVmLCAiY29tbWl0ICIpKQotCQkJY21kX25ld19jb21taXQoKTsKKwkJCXBhcnNlX25ld19jb21taXQoKTsKIAkJZWxzZSBpZiAoIXByZWZpeGNtcChjb21tYW5kX2J1Zi5idWYsICJ0YWcgIikpCi0JCQljbWRfbmV3X3RhZygpOworCQkJcGFyc2VfbmV3X3RhZygpOwogCQllbHNlIGlmICghcHJlZml4Y21wKGNvbW1hbmRfYnVmLmJ1ZiwgInJlc2V0ICIpKQotCQkJY21kX3Jlc2V0X2JyYW5jaCgpOworCQkJcGFyc2VfcmVzZXRfYnJhbmNoKCk7CiAJCWVsc2UgaWYgKCFzdHJjbXAoImNoZWNrcG9pbnQiLCBjb21tYW5kX2J1Zi5idWYpKQotCQkJY21kX2NoZWNrcG9pbnQoKTsKKwkJCXBhcnNlX2NoZWNrcG9pbnQoKTsKIAkJZWxzZSBpZiAoIXByZWZpeGNtcChjb21tYW5kX2J1Zi5idWYsICJwcm9ncmVzcyAiKSkKLQkJCWNtZF9wcm9ncmVzcygpOworCQkJcGFyc2VfcHJvZ3Jlc3MoKTsKIAkJZWxzZQogCQkJZGllKCJVbnN1cHBvcnRlZCBjb21tYW5kOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CiAJfQpkaWZmIC0tZ2l0IGEvZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybCBiL2dpdC1hZGQtLWludGVyYWN0aXZlLnBlcmwKaW5kZXggYTBhODFmMS4uNzA5Y2FhOSAxMDA3NTUKLS0tIGEvZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybAorKysgYi9naXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsCkBAIC0zOTQsOSArMzk0LDkgQEAKIAkJCWlmICgkY2hvaWNlID1+IHMvXi0vLykgewogCQkJCSRjaG9vc2UgPSAwOwogCQkJfQotCQkJIyBBIHJhbmdlIGNhbiBiZSBzcGVjaWZpZWQgbGlrZSA1LTcKLQkJCWlmICgkY2hvaWNlID1+IC9eKFxkKyktKFxkKykkLykgewotCQkJCSgkYm90dG9tLCAkdG9wKSA9ICgkMSwgJDIpOworCQkJIyBBIHJhbmdlIGNhbiBiZSBzcGVjaWZpZWQgbGlrZSA1LTcgb3IgNS0uCisJCQlpZiAoJGNob2ljZSA9fiAvXihcZCspLShcZCopJC8pIHsKKwkJCQkoJGJvdHRvbSwgJHRvcCkgPSAoJDEsIGxlbmd0aCgkMikgPyAkMiA6IDEgKyBAc3R1ZmYpOwogCQkJfQogCQkJZWxzaWYgKCRjaG9pY2UgPX4gL15cZCskLykgewogCQkJCSRib3R0b20gPSAkdG9wID0gJGNob2ljZTsKQEAgLTU1MCw2ICs1NTAsMjEgQEAKIAlyZXR1cm4gQGh1bms7CiB9CiAKK3N1YiBwYXJzZV9kaWZmX2hlYWRlciB7CisJbXkgJHNyYyA9IHNoaWZ0OworCisJbXkgJGhlYWQgPSB7IFRFWFQgPT4gW10sIERJU1BMQVkgPT4gW10gfTsKKwlteSAkbW9kZSA9IHsgVEVYVCA9PiBbXSwgRElTUExBWSA9PiBbXSB9OworCisJZm9yIChteSAkaSA9IDA7ICRpIDwgQHskc3JjLT57VEVYVH19OyAkaSsrKSB7CisJCW15ICRkZXN0ID0gJHNyYy0+e1RFWFR9LT5bJGldID1+IC9eKG9sZHxuZXcpIG1vZGUgKFxkKykkLyA/CisJCQkkbW9kZSA6ICRoZWFkOworCQlwdXNoIEB7JGRlc3QtPntURVhUfX0sICRzcmMtPntURVhUfS0+WyRpXTsKKwkJcHVzaCBAeyRkZXN0LT57RElTUExBWX19LCAkc3JjLT57RElTUExBWX0tPlskaV07CisJfQorCXJldHVybiAoJGhlYWQsICRtb2RlKTsKK30KKwogc3ViIGh1bmtfc3BsaXR0YWJsZSB7CiAJbXkgKCR0ZXh0KSA9IEBfOwogCkBAIC03OTUsOSArODEwLDQwIEBACiAJbXkgKCRpeCwgJG51bSk7CiAJbXkgJHBhdGggPSBzaGlmdDsKIAlteSAoJGhlYWQsIEBodW5rKSA9IHBhcnNlX2RpZmYoJHBhdGgpOworCSgkaGVhZCwgbXkgJG1vZGUpID0gcGFyc2VfZGlmZl9oZWFkZXIoJGhlYWQpOwogCWZvciAoQHskaGVhZC0+e0RJU1BMQVl9fSkgewogCQlwcmludDsKIAl9CisKKwlpZiAoQHskbW9kZS0+e1RFWFR9fSkgeworCQl3aGlsZSAoMSkgeworCQkJcHJpbnQgQHskbW9kZS0+e0RJU1BMQVl9fTsKKwkJCXByaW50IGNvbG9yZWQgJHByb21wdF9jb2xvciwKKwkJCQkiU3RhZ2UgbW9kZSBjaGFuZ2UgW3kvbi9hL2QvP10/ICI7CisJCQlteSAkbGluZSA9IDxTVERJTj47CisJCQlpZiAoJGxpbmUgPX4gL155L2kpIHsKKwkJCQkkbW9kZS0+e1VTRX0gPSAxOworCQkJCWxhc3Q7CisJCQl9CisJCQllbHNpZiAoJGxpbmUgPX4gL15uL2kpIHsKKwkJCQkkbW9kZS0+e1VTRX0gPSAwOworCQkJCWxhc3Q7CisJCQl9CisJCQllbHNpZiAoJGxpbmUgPX4gL15hL2kpIHsKKwkJCQkkXy0+e1VTRX0gPSAxIGZvcmVhY2ggKCRtb2RlLCBAaHVuayk7CisJCQkJbGFzdDsKKwkJCX0KKwkJCWVsc2lmICgkbGluZSA9fiAvXmQvaSkgeworCQkJCSRfLT57VVNFfSA9IDAgZm9yZWFjaCAoJG1vZGUsIEBodW5rKTsKKwkJCQlsYXN0OworCQkJfQorCQkJZWxzZSB7CisJCQkJaGVscF9wYXRjaF9jbWQoJycpOworCQkJCW5leHQ7CisJCQl9CisJCX0KKwl9CisKIAkkbnVtID0gc2NhbGFyIEBodW5rOwogCSRpeCA9IDA7CiAKQEAgLTkyMCw2ICs5NjYsOSBAQAogCiAJbXkgJG5fbG9mcyA9IDA7CiAJbXkgQHJlc3VsdCA9ICgpOworCWlmICgkbW9kZS0+e1VTRX0pIHsKKwkJcHVzaCBAcmVzdWx0LCBAeyRtb2RlLT57VEVYVH19OworCX0KIAlmb3IgKEBodW5rKSB7CiAJCW15ICR0ZXh0ID0gJF8tPntURVhUfTsKIAkJbXkgKCRvX29mcywgJG9fY250LCAkbl9vZnMsICRuX2NudCkgPQpkaWZmIC0tZ2l0IGEvZ2l0LWFtLnNoIGIvZ2l0LWFtLnNoCmluZGV4IGI0ODA5NmUuLjgzYjI3N2EgMTAwNzU1Ci0tLSBhL2dpdC1hbS5zaAorKysgYi9naXQtYW0uc2gKQEAgLTMwLDcgKzMwLDggQEAKIHJlcXVpcmVfd29ya190cmVlCiBjZF90b190b3BsZXZlbAogCi1naXQgdmFyIEdJVF9DT01NSVRURVJfSURFTlQgPi9kZXYvbnVsbCB8fCBleGl0CitnaXQgdmFyIEdJVF9DT01NSVRURVJfSURFTlQgPi9kZXYvbnVsbCB8fAorCWRpZSAiWW91IG5lZWQgdG8gc2V0IHlvdXIgY29tbWl0dGVyIGluZm8gZmlyc3QiCiAKIHN0b3BfaGVyZSAoKSB7CiAgICAgZWNobyAiJDEiID4iJGRvdGVzdC9uZXh0IgpAQCAtNDIxLDcgKzQyMiw3IEBACiAJZWxzZQogCSAgICBhY3Rpb249eWVzCiAJZmkKLQlGSVJTVExJTkU9JChoZWFkIC0xICIkZG90ZXN0L2ZpbmFsLWNvbW1pdCIpCisJRklSU1RMSU5FPSQoc2VkIDFxICIkZG90ZXN0L2ZpbmFsLWNvbW1pdCIpCiAKIAlpZiB0ZXN0ICRhY3Rpb24gPSBza2lwCiAJdGhlbgpkaWZmIC0tZ2l0IGEvZ2l0LWJpc2VjdC5zaCBiL2dpdC1iaXNlY3Quc2gKaW5kZXggYjE4MDBlZC4uNmM2YzNkZSAxMDA3NTUKLS0tIGEvZ2l0LWJpc2VjdC5zaAorKysgYi9naXQtYmlzZWN0LnNoCkBAIC0xLDcgKzEsOSBAQAogIyEvYmluL3NoCiAKLVVTQUdFPSdbc3RhcnR8YmFkfGdvb2R8c2tpcHxuZXh0fHJlc2V0fHZpc3VhbGl6ZXxyZXBsYXl8bG9nfHJ1bl0nCi1MT05HX1VTQUdFPSdnaXQgYmlzZWN0IHN0YXJ0IFs8YmFkPiBbPGdvb2Q+Li4uXV0gWy0tXSBbPHBhdGhzcGVjPi4uLl0KK1VTQUdFPSdbaGVscHxzdGFydHxiYWR8Z29vZHxza2lwfG5leHR8cmVzZXR8dmlzdWFsaXplfHJlcGxheXxsb2d8cnVuXScKK0xPTkdfVVNBR0U9J2dpdCBiaXNlY3QgaGVscAorICAgICAgICBwcmludCB0aGlzIGxvbmcgaGVscCBtZXNzYWdlLgorZ2l0IGJpc2VjdCBzdGFydCBbPGJhZD4gWzxnb29kPi4uLl1dIFstLV0gWzxwYXRoc3BlYz4uLi5dCiAgICAgICAgIHJlc2V0IGJpc2VjdCBzdGF0ZSBhbmQgc3RhcnQgYmlzZWN0aW9uLgogZ2l0IGJpc2VjdCBiYWQgWzxyZXY+XQogICAgICAgICBtYXJrIDxyZXY+IGEga25vd24tYmFkIHJldmlzaW9uLgpAQCAtMjAsNyArMjIsOSBAQAogZ2l0IGJpc2VjdCBsb2cKICAgICAgICAgc2hvdyBiaXNlY3QgbG9nLgogZ2l0IGJpc2VjdCBydW4gPGNtZD4uLi4KLSAgICAgICAgdXNlIDxjbWQ+Li4uIHRvIGF1dG9tYXRpY2FsbHkgYmlzZWN0LicKKyAgICAgICAgdXNlIDxjbWQ+Li4uIHRvIGF1dG9tYXRpY2FsbHkgYmlzZWN0LgorCitQbGVhc2UgdXNlICJnaXQgaGVscCBiaXNlY3QiIHRvIGdldCB0aGUgZnVsbCBtYW4gcGFnZS4nCiAKIE9QVElPTlNfU1BFQz0KIC4gZ2l0LXNoLXNldHVwCkBAIC00MCw3ICs0NCw3IEBACiB9CiAKIGJpc2VjdF9hdXRvc3RhcnQoKSB7Ci0JdGVzdCAtZiAiJEdJVF9ESVIvQklTRUNUX05BTUVTIiB8fCB7CisJdGVzdCAtcyAiJEdJVF9ESVIvQklTRUNUX1NUQVJUIiB8fCB7CiAJCWVjaG8gPiYyICdZb3UgbmVlZCB0byBzdGFydCBieSAiZ2l0IGJpc2VjdCBzdGFydCInCiAJCWlmIHRlc3QgLXQgMAogCQl0aGVuCkBAIC01OSw0MiArNjMsNDIgQEAKIAogYmlzZWN0X3N0YXJ0KCkgewogCSMKLQkjIFZlcmlmeSBIRUFELiBJZiB3ZSB3ZXJlIGJpc2VjdGluZyBiZWZvcmUgdGhpcywgcmVzZXQgdG8gdGhlCi0JIyB0b3Atb2YtbGluZSBtYXN0ZXIgZmlyc3QhCisJIyBWZXJpZnkgSEVBRC4KIAkjCiAJaGVhZD0kKEdJVF9ESVI9IiRHSVRfRElSIiBnaXQgc3ltYm9saWMtcmVmIC1xIEhFQUQpIHx8CiAJaGVhZD0kKEdJVF9ESVI9IiRHSVRfRElSIiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIHx8CiAJZGllICJCYWQgSEVBRCAtIEkgbmVlZCBhIEhFQUQiCi0JIwotCSMgQ2hlY2sgdGhhdCB3ZSBlaXRoZXIgYWxyZWFkeSBoYXZlIEJJU0VDVF9TVEFSVCwgb3IgdGhhdCB0aGUKLQkjIGJyYW5jaGVzIGJpc2VjdCwgbmV3LWJpc2VjdCBkb24ndCBleGlzdCwgdG8gbm90IG92ZXJyaWRlIHRoZW0uCi0JIwotCXRlc3QgLXMgIiRHSVRfRElSL0JJU0VDVF9TVEFSVCIgfHwKLQkJaWYgZ2l0IHNob3ctcmVmIC0tdmVyaWZ5IC1xIHJlZnMvaGVhZHMvYmlzZWN0IHx8Ci0JCSAgICBnaXQgc2hvdy1yZWYgLS12ZXJpZnkgLXEgcmVmcy9oZWFkcy9uZXctYmlzZWN0OyB0aGVuCi0JCQlkaWUgJ1RoZSBicmFuY2hlcyAiYmlzZWN0IiBhbmQgIm5ldy1iaXNlY3QiIG11c3Qgbm90IGV4aXN0LicKLQkJZmkKLQlzdGFydF9oZWFkPScnCi0JY2FzZSAiJGhlYWQiIGluCi0JcmVmcy9oZWFkcy9iaXNlY3QpCi0JCWJyYW5jaD1gY2F0ICIkR0lUX0RJUi9CSVNFQ1RfU1RBUlQiYAotCQlnaXQgY2hlY2tvdXQgJGJyYW5jaCB8fCBleGl0Ci0JCTs7Ci0JcmVmcy9oZWFkcy8qfCRfeDQwKQotCQkjIFRoaXMgZXJyb3IgbWVzc2FnZSBzaG91bGQgb25seSBiZSB0cmlnZ2VyZWQgYnkgY29naXRvIHVzYWdlLAotCQkjIGFuZCBjb2dpdG8gdXNlcnMgc2hvdWxkIHVuZGVyc3RhbmQgaXQgcmVsYXRlcyB0byBjZy1zZWVrLgotCQlbIC1zICIkR0lUX0RJUi9oZWFkLW5hbWUiIF0gJiYgZGllICJ3b24ndCBiaXNlY3Qgb24gc2Vla2VkIHRyZWUiCi0JCXN0YXJ0X2hlYWQ9IiR7aGVhZCNyZWZzL2hlYWRzL30iCi0JCTs7Ci0JKikKLQkJZGllICJCYWQgSEVBRCAtIHN0cmFuZ2Ugc3ltYm9saWMgcmVmIgotCQk7OwotCWVzYWMKIAogCSMKLQkjIEdldCByaWQgb2YgYW55IG9sZCBiaXNlY3Qgc3RhdGUKKwkjIENoZWNrIGlmIHdlIGFyZSBiaXNlY3RpbmcuCiAJIwotCWJpc2VjdF9jbGVhbl9zdGF0ZQorCXN0YXJ0X2hlYWQ9JycKKwlpZiB0ZXN0IC1zICIkR0lUX0RJUi9CSVNFQ1RfU1RBUlQiCisJdGhlbgorCQkjIFJlc2V0IHRvIHRoZSByZXYgZnJvbSB3aGVyZSB3ZSBzdGFydGVkLgorCQlzdGFydF9oZWFkPSQoY2F0ICIkR0lUX0RJUi9CSVNFQ1RfU1RBUlQiKQorCQlnaXQgY2hlY2tvdXQgIiRzdGFydF9oZWFkIiB8fCBleGl0CisJZWxzZQorCQkjIEdldCByZXYgZnJvbSB3aGVyZSB3ZSBzdGFydC4KKwkJY2FzZSAiJGhlYWQiIGluCisJCXJlZnMvaGVhZHMvKnwkX3g0MCkKKwkJCSMgVGhpcyBlcnJvciBtZXNzYWdlIHNob3VsZCBvbmx5IGJlIHRyaWdnZXJlZCBieQorCQkJIyBjb2dpdG8gdXNhZ2UsIGFuZCBjb2dpdG8gdXNlcnMgc2hvdWxkIHVuZGVyc3RhbmQKKwkJCSMgaXQgcmVsYXRlcyB0byBjZy1zZWVrLgorCQkJWyAtcyAiJEdJVF9ESVIvaGVhZC1uYW1lIiBdICYmCisJCQkJZGllICJ3b24ndCBiaXNlY3Qgb24gc2Vla2VkIHRyZWUiCisJCQlzdGFydF9oZWFkPSIke2hlYWQjcmVmcy9oZWFkcy99IgorCQkJOzsKKwkJKikKKwkJCWRpZSAiQmFkIEhFQUQgLSBzdHJhbmdlIHN5bWJvbGljIHJlZiIKKwkJCTs7CisJCWVzYWMKKwlmaQorCisJIworCSMgR2V0IHJpZCBvZiBhbnkgb2xkIGJpc2VjdCBzdGF0ZS4KKwkjCisJYmlzZWN0X2NsZWFuX3N0YXRlIHx8IGV4aXQKIAogCSMKIAkjIENoZWNrIGZvciBvbmUgYmFkIGFuZCB0aGVuIHNvbWUgZ29vZCByZXZpc2lvbnMuCkBAIC0xMTQsNyArMTE4LDcgQEAKIAkJYnJlYWsKIAkJOzsKIAkgICAgKikKLQkJcmV2PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJGFyZ157Y29tbWl0fSIgMj4vZGV2L251bGwpIHx8IHsKKwkJcmV2PSQoZ2l0IHJldi1wYXJzZSAtcSAtLXZlcmlmeSAiJGFyZ157Y29tbWl0fSIpIHx8IHsKIAkJICAgIHRlc3QgJGhhc19kb3VibGVfZGFzaCAtZXEgMSAmJgogCQkgICAgICAgIGRpZSAiJyRhcmcnIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHZhbGlkIHJldmlzaW9uIgogCQkgICAgYnJlYWsKQEAgLTEyOSwxMSArMTMzLDI5IEBACiAJICAgIGVzYWMKIAlkb25lCiAKLQlzcSAiJEAiID4iJEdJVF9ESVIvQklTRUNUX05BTUVTIgotCXRlc3QgLW4gIiRzdGFydF9oZWFkIiAmJiBlY2hvICIkc3RhcnRfaGVhZCIgPiIkR0lUX0RJUi9CSVNFQ1RfU1RBUlQiCi0JZXZhbCAiJGV2YWwiCi0JZWNobyAiZ2l0LWJpc2VjdCBzdGFydCRvcmlnX2FyZ3MiID4+IiRHSVRfRElSL0JJU0VDVF9MT0ciCisJIworCSMgQ2hhbmdlIHN0YXRlLgorCSMgSW4gY2FzZSBvZiBtaXN0YWtlbiByZXZzIG9yIGNoZWNrb3V0IGVycm9yLCBvciBzaWduYWxzIHJlY2VpdmVkLAorCSMgImJpc2VjdF9hdXRvX25leHQiIGJlbG93IG1heSBleGl0IG9yIG1pc2JlaGF2ZS4KKwkjIFdlIGhhdmUgdG8gdHJhcCB0aGlzIHRvIGJlIGFibGUgdG8gY2xlYW4gdXAgdXNpbmcKKwkjICJiaXNlY3RfY2xlYW5fc3RhdGUiLgorCSMKKwl0cmFwICdiaXNlY3RfY2xlYW5fc3RhdGUnIDAKKwl0cmFwICdleGl0IDI1NScgMSAyIDMgMTUKKworCSMKKwkjIFdyaXRlIG5ldyBzdGFydCBzdGF0ZS4KKwkjCisJZWNobyAiJHN0YXJ0X2hlYWQiID4iJEdJVF9ESVIvQklTRUNUX1NUQVJUIiAmJgorCXNxICIkQCIgPiIkR0lUX0RJUi9CSVNFQ1RfTkFNRVMiICYmCisJZXZhbCAiJGV2YWwiICYmCisJZWNobyAiZ2l0LWJpc2VjdCBzdGFydCRvcmlnX2FyZ3MiID4+IiRHSVRfRElSL0JJU0VDVF9MT0ciIHx8IGV4aXQKKwkjCisJIyBDaGVjayBpZiB3ZSBjYW4gcHJvY2VlZCB0byB0aGUgbmV4dCBiaXNlY3Qgc3RhdGUuCisJIwogCWJpc2VjdF9hdXRvX25leHQKKworCXRyYXAgJy0nIDAKIH0KIAogYmlzZWN0X3dyaXRlKCkgewpAQCAtMTQ1LDkgKzE2Nyw5IEBACiAJCWdvb2R8c2tpcCkJdGFnPSIkc3RhdGUiLSIkcmV2IiA7OwogCQkqKQkJZGllICJCYWQgYmlzZWN0X3dyaXRlIGFyZ3VtZW50OiAkc3RhdGUiIDs7CiAJZXNhYwotCWdpdCB1cGRhdGUtcmVmICJyZWZzL2Jpc2VjdC8kdGFnIiAiJHJldiIKKwlnaXQgdXBkYXRlLXJlZiAicmVmcy9iaXNlY3QvJHRhZyIgIiRyZXYiIHx8IGV4aXQKIAllY2hvICIjICRzdGF0ZTogJChnaXQgc2hvdy1icmFuY2ggJHJldikiID4+IiRHSVRfRElSL0JJU0VDVF9MT0ciCi0JdGVzdCAteiAiJG5vbG9nIiAmJiBlY2hvICJnaXQtYmlzZWN0ICRzdGF0ZSAkcmV2IiA+PiIkR0lUX0RJUi9CSVNFQ1RfTE9HIgorCXRlc3QgLW4gIiRub2xvZyIgfHwgZWNobyAiZ2l0LWJpc2VjdCAkc3RhdGUgJHJldiIgPj4iJEdJVF9ESVIvQklTRUNUX0xPRyIKIH0KIAogYmlzZWN0X3N0YXRlKCkgewpAQCAtMTk4LDEzICsyMjAsMTQgQEAKIAkJaWYgdGVzdCAtdCAwCiAJCXRoZW4KIAkJCXByaW50ZiA+JjIgJ0FyZSB5b3Ugc3VyZSBbWS9uXT8gJwotCQkJY2FzZSAiJChyZWFkIHllc25vKSIgaW4gW05uXSopIGV4aXQgMSA7OyBlc2FjCisJCQlyZWFkIHllc25vCisJCQljYXNlICIkeWVzbm8iIGluIFtObl0qKSBleGl0IDEgOzsgZXNhYwogCQlmaQogCQk6IGJpc2VjdCB3aXRob3V0IGdvb2QuLi4KIAkJOzsKIAkqKQogCQlUSEVOPScnCi0JCXRlc3QgLWYgIiRHSVRfRElSL0JJU0VDVF9OQU1FUyIgfHwgeworCQl0ZXN0IC1zICIkR0lUX0RJUi9CSVNFQ1RfU1RBUlQiIHx8IHsKIAkJCWVjaG8gPiYyICdZb3UgbmVlZCB0byBzdGFydCBieSAiZ2l0IGJpc2VjdCBzdGFydCIuJwogCQkJVEhFTj0ndGhlbiAnCiAJCX0KQEAgLTM0NCw5ICszNjcsNyBAQAogCWV4aXRfaWZfc2tpcHBlZF9jb21taXRzICIkYmlzZWN0X3JldiIKIAogCWVjaG8gIkJpc2VjdGluZzogJGJpc2VjdF9uciByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMiCi0JZ2l0IGJyYW5jaCAtRCBuZXctYmlzZWN0IDI+IC9kZXYvbnVsbAotCWdpdCBjaGVja291dCAtcSAtYiBuZXctYmlzZWN0ICIkYmlzZWN0X3JldiIgfHwgZXhpdAotCWdpdCBicmFuY2ggLU0gbmV3LWJpc2VjdCBiaXNlY3QKKwlnaXQgY2hlY2tvdXQgLXEgIiRiaXNlY3RfcmV2IiB8fCBleGl0CiAJZ2l0IHNob3ctYnJhbmNoICIkYmlzZWN0X3JldiIKIH0KIApAQCAtMzcyLDQwICszOTMsMzUgQEAKIH0KIAogYmlzZWN0X3Jlc2V0KCkgewotCXRlc3QgLWYgIiRHSVRfRElSL0JJU0VDVF9OQU1FUyIgfHwgeworCXRlc3QgLXMgIiRHSVRfRElSL0JJU0VDVF9TVEFSVCIgfHwgewogCQllY2hvICJXZSBhcmUgbm90IGJpc2VjdGluZy4iCiAJCXJldHVybgogCX0KIAljYXNlICIkIyIgaW4KLQkwKSBpZiBbIC1zICIkR0lUX0RJUi9CSVNFQ1RfU1RBUlQiIF07IHRoZW4KLQkgICAgICAgYnJhbmNoPWBjYXQgIiRHSVRfRElSL0JJU0VDVF9TVEFSVCJgCi0JICAgZWxzZQotCSAgICAgICBicmFuY2g9bWFzdGVyCi0JICAgZmkgOzsKKwkwKSBicmFuY2g9JChjYXQgIiRHSVRfRElSL0JJU0VDVF9TVEFSVCIpIDs7CiAJMSkgZ2l0IHNob3ctcmVmIC0tdmVyaWZ5IC0tcXVpZXQgLS0gInJlZnMvaGVhZHMvJDEiIHx8CiAJICAgICAgIGRpZSAiJDEgZG9lcyBub3Qgc2VlbSB0byBiZSBhIHZhbGlkIGJyYW5jaCIKIAkgICBicmFuY2g9IiQxIiA7OwogCSopCiAJICAgIHVzYWdlIDs7CiAJZXNhYwotCWlmIGdpdCBjaGVja291dCAiJGJyYW5jaCI7IHRoZW4KLQkJIyBDbGVhbnVwIGhlYWQtbmFtZSBpZiBpdCBnb3QgbGVmdCBieSBhbiBvbGQgdmVyc2lvbiBvZiBnaXQtYmlzZWN0Ci0JCXJtIC1mICIkR0lUX0RJUi9oZWFkLW5hbWUiCi0JCXJtIC1mICIkR0lUX0RJUi9CSVNFQ1RfU1RBUlQiCi0JCWJpc2VjdF9jbGVhbl9zdGF0ZQotCWZpCisJZ2l0IGNoZWNrb3V0ICIkYnJhbmNoIiAmJiBiaXNlY3RfY2xlYW5fc3RhdGUKIH0KIAogYmlzZWN0X2NsZWFuX3N0YXRlKCkgewogCSMgVGhlcmUgbWF5IGJlIHNvbWUgcmVmcyBwYWNrZWQgZHVyaW5nIGJpc2VjdGlvbi4KLQlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSclKHJlZm5hbWUpICUob2JqZWN0bmFtZSknIHJlZnMvYmlzZWN0L1wqIHJlZnMvaGVhZHMvYmlzZWN0IHwKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSclKHJlZm5hbWUpICUob2JqZWN0bmFtZSknIHJlZnMvYmlzZWN0L1wqIHwKIAl3aGlsZSByZWFkIHJlZiBoYXNoCiAJZG8KLQkJZ2l0IHVwZGF0ZS1yZWYgLWQgJHJlZiAkaGFzaAorCQlnaXQgdXBkYXRlLXJlZiAtZCAkcmVmICRoYXNoIHx8IGV4aXQKIAlkb25lCi0Jcm0gLWYgIiRHSVRfRElSL0JJU0VDVF9MT0ciCi0Jcm0gLWYgIiRHSVRfRElSL0JJU0VDVF9OQU1FUyIKLQlybSAtZiAiJEdJVF9ESVIvQklTRUNUX1JVTiIKKwlybSAtZiAiJEdJVF9ESVIvQklTRUNUX0xPRyIgJiYKKwlybSAtZiAiJEdJVF9ESVIvQklTRUNUX05BTUVTIiAmJgorCXJtIC1mICIkR0lUX0RJUi9CSVNFQ1RfUlVOIiAmJgorCSMgQ2xlYW51cCBoZWFkLW5hbWUgaWYgaXQgZ290IGxlZnQgYnkgYW4gb2xkIHZlcnNpb24gb2YgZ2l0LWJpc2VjdAorCXJtIC1mICIkR0lUX0RJUi9oZWFkLW5hbWUiICYmCisKKwlybSAtZiAiJEdJVF9ESVIvQklTRUNUX1NUQVJUIgogfQogCiBiaXNlY3RfcmVwbGF5ICgpIHsKQEAgLTQ4Nyw2ICs1MDMsOCBAQAogICAgIGNtZD0iJDEiCiAgICAgc2hpZnQKICAgICBjYXNlICIkY21kIiBpbgorICAgIGhlbHApCisgICAgICAgIGdpdCBiaXNlY3QgLWggOzsKICAgICBzdGFydCkKICAgICAgICAgYmlzZWN0X3N0YXJ0ICIkQCIgOzsKICAgICBiYWR8Z29vZHxza2lwKQpkaWZmIC0tZ2l0IGEvZ2l0LWNvbXBhdC11dGlsLmggYi9naXQtY29tcGF0LXV0aWwuaAppbmRleCBhMTgyMzVlLi5jMDRlOGJhIDEwMDY0NAotLS0gYS9naXQtY29tcGF0LXV0aWwuaAorKysgYi9naXQtY29tcGF0LXV0aWwuaApAQCAtMzksNyArMzksNyBAQAogLyogQXBwcm94aW1hdGlvbiBvZiB0aGUgbGVuZ3RoIG9mIHRoZSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgdHlwZS4gKi8KICNkZWZpbmUgZGVjaW1hbF9sZW5ndGgoeCkJKChpbnQpKHNpemVvZih4KSAqIDIuNTYgKyAwLjUpICsgMSkKIAotI2lmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19GcmVlQlNEX18pCisjaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX0ZyZWVCU0RfXykgICYmICFkZWZpbmVkKF9fVVNMQ19fKSAmJiAhZGVmaW5lZChfTV9VTklYKQogI2RlZmluZSBfWE9QRU5fU09VUkNFIDYwMCAvKiBnbGliYzIgYW5kIEFJWCA1LjNMIG5lZWQgNTAwLCBPcGVuQlNEIG5lZWRzIDYwMCBmb3IgU19JU0xOSygpICovCiAjZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgMSAvKiBBSVggNS4zTCBuZWVkcyB0aGlzICovCiAjZW5kaWYKQEAgLTIwNiw2ICsyMDYsOSBAQAogI2VuZGlmCiAKICNpZmRlZiBGUkVBRF9SRUFEU19ESVJFQ1RPUklFUworI2lmZGVmIGZvcGVuCisjdW5kZWYgZm9wZW4KKyNlbmRpZgogI2RlZmluZSBmb3BlbihhLGIpIGdpdF9mb3BlbihhLGIpCiBleHRlcm4gRklMRSAqZ2l0X2ZvcGVuKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7CiAjZW5kaWYKQEAgLTI2OCw2ICsyNzEsMTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKgorICogeG1lbWR1cHooKSBhbGxvY2F0ZXMgKGxlbiArIDEpIGJ5dGVzIG9mIG1lbW9yeSwgZHVwbGljYXRlcyAibGVuIiBieXRlcyBvZgorICogImRhdGEiIHRvIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LCB6ZXJvIHRlcm1pbmF0ZXMgdGhlIGFsbG9jYXRlZCBtZW1vcnksCisgKiBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBtZW1vcnkuIElmIHRoZSBhbGxvY2F0aW9uIGZhaWxzLAorICogdGhlIHByb2dyYW0gZGllcy4KKyAqLwogc3RhdGljIGlubGluZSB2b2lkICp4bWVtZHVweihjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQogewogCWNoYXIgKnAgPSB4bWFsbG9jKGxlbiArIDEpOwpAQCAtMzI5LDYgKzMzOCwxMSBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qCisgKiB4cmVhZCgpIGlzIHRoZSBzYW1lIGEgcmVhZCgpLCBidXQgaXQgYXV0b21hdGljYWxseSByZXN0YXJ0cyByZWFkKCkKKyAqIG9wZXJhdGlvbnMgd2l0aCBhIHJlY292ZXJhYmxlIGVycm9yIChFQUdBSU4gYW5kIEVJTlRSKS4geHJlYWQoKQorICogRE9FUyBOT1QgR1VBUkFOVEVFIHRoYXQgImxlbiIgYnl0ZXMgaXMgcmVhZCBldmVuIGlmIHRoZSBkYXRhIGlzIGF2YWlsYWJsZS4KKyAqLwogc3RhdGljIGlubGluZSBzc2l6ZV90IHhyZWFkKGludCBmZCwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQogewogCXNzaXplX3QgbnI7CkBAIC0zNDAsNiArMzU0LDExIEBACiAJfQogfQogCisvKgorICogeHdyaXRlKCkgaXMgdGhlIHNhbWUgYSB3cml0ZSgpLCBidXQgaXQgYXV0b21hdGljYWxseSByZXN0YXJ0cyB3cml0ZSgpCisgKiBvcGVyYXRpb25zIHdpdGggYSByZWNvdmVyYWJsZSBlcnJvciAoRUFHQUlOIGFuZCBFSU5UUikuIHh3cml0ZSgpIERPRVMgTk9UCisgKiBHVUFSQU5URUUgdGhhdCAibGVuIiBieXRlcyBpcyB3cml0dGVuIGV2ZW4gaWYgdGhlIG9wZXJhdGlvbiBpcyBzdWNjZXNzZnVsLgorICovCiBzdGF0aWMgaW5saW5lIHNzaXplX3QgeHdyaXRlKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQogewogCXNzaXplX3QgbnI7CmRpZmYgLS1naXQgYS9naXQtY3ZzZXhwb3J0Y29tbWl0LnBlcmwgYi9naXQtY3ZzZXhwb3J0Y29tbWl0LnBlcmwKaW5kZXggYjYwMzZiZC4uYzZjNzBlOSAxMDA3NTUKLS0tIGEvZ2l0LWN2c2V4cG9ydGNvbW1pdC5wZXJsCisrKyBiL2dpdC1jdnNleHBvcnRjb21taXQucGVybApAQCAtNiwxNiArNiwyMSBAQAogdXNlIERhdGE6OkR1bXBlcjsKIHVzZSBGaWxlOjpCYXNlbmFtZSBxdyhiYXNlbmFtZSBkaXJuYW1lKTsKIHVzZSBGaWxlOjpTcGVjOwordXNlIEdpdDsKIAotb3VyICgkb3B0X2gsICRvcHRfUCwgJG9wdF9wLCAkb3B0X3YsICRvcHRfYywgJG9wdF9mLCAkb3B0X2EsICRvcHRfbSwgJG9wdF9kLCAkb3B0X3UsICRvcHRfdyk7CitvdXIgKCRvcHRfaCwgJG9wdF9QLCAkb3B0X3AsICRvcHRfdiwgJG9wdF9jLCAkb3B0X2YsICRvcHRfYSwgJG9wdF9tLCAkb3B0X2QsICRvcHRfdSwgJG9wdF93LCAkb3B0X1cpOwogCi1nZXRvcHRzKCd1aFBwdmNmYW06ZDp3OicpOworZ2V0b3B0cygndWhQcHZjZmFtOmQ6dzpXJyk7CiAKICRvcHRfaCAmJiB1c2FnZSgpOwogCiBkaWUgIk5lZWQgYXQgbGVhc3Qgb25lIGNvbW1pdCBpZGVudGlmaWVyISIgdW5sZXNzIEBBUkdWOwogCi1pZiAoJG9wdF93KSB7CisjIEdldCBnaXQtY29uZmlnIHNldHRpbmdzCitteSAkcmVwbyA9IEdpdC0+cmVwb3NpdG9yeSgpOworJG9wdF93ID0gJHJlcG8tPmNvbmZpZygnY3ZzZXhwb3J0Y29tbWl0LmN2c2RpcicpIHVubGVzcyBkZWZpbmVkICRvcHRfdzsKKworaWYgKCRvcHRfdyB8fCAkb3B0X1cpIHsKIAkjIFJlbWVtYmVyIHdoZXJlIEdJVF9ESVIgaXMgYmVmb3JlIGNoYW5naW5nIHRvIENWUyBjaGVja291dAogCXVubGVzcyAoJEVOVntHSVRfRElSfSkgewogCQkjIE5vIEdJVF9ESVIgc2V0LiBGaWd1cmUgaXQgb3V0IGZvciBvdXJzZWx2ZXMKQEAgLTI1LDcgKzMwLDkgQEAKIAl9CiAJIyBNYWtlIHN1cmUgR0lUX0RJUiBpcyBhYnNvbHV0ZQogCSRFTlZ7R0lUX0RJUn0gPSBGaWxlOjpTcGVjLT5yZWwyYWJzKCRFTlZ7R0lUX0RJUn0pOworfQogCitpZiAoJG9wdF93KSB7CiAJaWYgKCEgLWQgJG9wdF93LiIvQ1ZTIiApIHsKIAkJZGllICIkb3B0X3cgaXMgbm90IGEgQ1ZTIGNoZWNrb3V0IjsKIAl9CkBAIC0xMTYsNiArMTIzLDE1IEBACiAgICAgfQogfQogCitteSAkZ29fYmFja190byA9IDA7CisKK2lmICgkb3B0X1cpIHsKKyAgICAkb3B0X3YgJiYgcHJpbnQgIlJlc2V0dGluZyB0byAkcGFyZW50XG4iOworICAgICRnb19iYWNrX3RvID0gYGdpdCBzeW1ib2xpYy1yZWYgSEVBRCAyPiAvZGV2L251bGwgfHwKKwlnaXQgcmV2LXBhcnNlIEhFQURgIHx8IGRpZSAiQ291bGQgbm90IGRldGVybWluZSBjdXJyZW50IGJyYW5jaCI7CisgICAgc3lzdGVtKCJnaXQgY2hlY2tvdXQgLXEgJHBhcmVudF4wIikgJiYgZGllICJDb3VsZCBub3QgY2hlY2sgb3V0ICRwYXJlbnReMCI7Cit9CisKICRvcHRfdiAmJiBwcmludCAiQXBwbHlpbmcgdG8gQ1ZTIGNvbW1pdCAkY29tbWl0IGZyb20gcGFyZW50ICRwYXJlbnRcbiI7CiAKICMgZ3JhYiB0aGUgY29tbWl0IG1lc3NhZ2UKQEAgLTIxMCw3ICsyMjYsOCBAQAogCW15ICRiYXNlbmFtZSA9IGJhc2VuYW1lKCRuYW1lKTsKIAogCSRiYXNlbmFtZSA9ICJubyBmaWxlICIgLiAkYmFzZW5hbWUgaWYgKGV4aXN0cygkYWRkZWR7JGJhc2VuYW1lfSkpOwotCWNob21wKCRiYXNlbmFtZSk7CisJJGJhc2VuYW1lID1+IHMvXlxzKy8vOworCSRiYXNlbmFtZSA9fiBzL1xzKyQvLzsKIAogCWlmICghZXhpc3RzKCRmdWxsbmFtZXskYmFzZW5hbWV9KSkgewogCSAgJGZ1bGxuYW1leyRiYXNlbmFtZX0gPSAkbmFtZTsKQEAgLTI1OSw3ICsyNzYsMTEgQEAKIH0KIAogcHJpbnQgIkFwcGx5aW5nXG4iOwotYEdJVF9ESVI9IGdpdC1hcHBseSAkY29udGV4dCAtLXN1bW1hcnkgLS1udW1zdGF0IC0tYXBwbHkgPC5jdnNleHBvcnRjb21taXQuZGlmZmAgfHwgZGllICJjYW5ub3QgcGF0Y2giOworaWYgKCRvcHRfVykgeworICAgIHN5c3RlbSgiZ2l0IGNoZWNrb3V0IC1xICRjb21taXReMCIpICYmIGRpZSAiY2Fubm90IHBhdGNoIjsKK30gZWxzZSB7CisgICAgYEdJVF9ESVI9IGdpdC1hcHBseSAkY29udGV4dCAtLXN1bW1hcnkgLS1udW1zdGF0IC0tYXBwbHkgPC5jdnNleHBvcnRjb21taXQuZGlmZmAgfHwgZGllICJjYW5ub3QgcGF0Y2giOworfQogCiBwcmludCAiUGF0Y2ggYXBwbGllZCBzdWNjZXNzZnVsbHkuIEFkZGluZyBuZXcgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIENWU1xuIjsKIG15ICRkaXJ0eXBhdGNoID0gMDsKQEAgLTMxMiw3ICszMzMsOSBAQAogICAgIHByaW50ICJ1c2luZyBhIHBhdGNoIHByb2dyYW0uIEFmdGVyIGFwcGx5aW5nIHRoZSBwYXRjaCBhbmQgcmVzb2x2aW5nIHRoZVxuIjsKICAgICBwcmludCAicHJvYmxlbXMgeW91IG1heSBjb21taXQgdXNpbmc6IjsKICAgICBwcmludCAiXG4gICAgY2QgXCIkb3B0X3dcIiIgaWYgJG9wdF93OwotICAgIHByaW50ICJcbiAgICAkY21kXG5cbiI7CisgICAgcHJpbnQgIlxuICAgICRjbWRcbiI7CisgICAgcHJpbnQgIlxuICAgIGdpdCBjaGVja291dCAkZ29fYmFja190b1xuIiBpZiAkZ29fYmFja190bzsKKyAgICBwcmludCAiXG4iOwogICAgIGV4aXQoMSk7CiB9CiAKQEAgLTMzMiw2ICszNTUsMTQgQEAKICMgY2xlYW4gdXAKIHVubGluaygiLmN2c2V4cG9ydGNvbW1pdC5kaWZmIik7CiAKK2lmICgkb3B0X1cpIHsKKyAgICBzeXN0ZW0oImdpdCBjaGVja291dCAkZ29fYmFja190byIpICYmIGRpZSAiY2Fubm90IG1vdmUgYmFjayB0byAkZ29fYmFja190byI7CisgICAgaWYgKCEoJGdvX2JhY2tfdG8gPX4gL15bMC05YS1mQS1GXXs0MH0kLykpIHsKKwlzeXN0ZW0oImdpdCBzeW1ib2xpYy1yZWYgSEVBRCAkZ29fYmFja190byIpICYmCisJICAgIGRpZSAiY2Fubm90IG1vdmUgYmFjayB0byAkZ29fYmFja190byI7CisgICAgfQorfQorCiAjIENWUyB2ZXJzaW9uIDEuMTEueCBhbmQgMS4xMi54IHNsZWVwcyB0aGUgd3Jvbmcgd2F5IHRvIGVuc3VyZSB0aGUgdGltZXN0YW1wCiAjIHVzZWQgYnkgQ1ZTIGFuZCB0aGUgb25lIHNldCBieSBzdWJzZXF1ZW5jZSBmaWxlIG1vZGlmaWNhdGlvbnMgYXJlIGRpZmZlcmVudC4KICMgSWYgdGhleSBhcmUgbm90IGRpZmZlcmVudCBDVlMgd2lsbCBub3QgZGV0ZWN0IGNoYW5nZXMuCmRpZmYgLS1naXQgYS9naXQtY3ZzaW1wb3J0LnBlcmwgYi9naXQtY3ZzaW1wb3J0LnBlcmwKaW5kZXggYmRhYzVkNS4uN2U5NWZiMyAxMDA3NTUKLS0tIGEvZ2l0LWN2c2ltcG9ydC5wZXJsCisrKyBiL2dpdC1jdnNpbXBvcnQucGVybApAQCAtMjI3LDYgKzIyNyw3IEBACiAJCQkJJHByb3h5cG9ydCA9ICQxOwogCQkJfQogCQl9CisJCSRyZXBvIHx8PSAnLyc7CiAKIAkJIyBpZiB1c2VybmFtZSBpcyBub3QgZXhwbGljaXQgaW4gQ1ZTUk9PVCwgdGhlbiB1c2UgY3VycmVudCB1c2VyLCBhcyBjdnMgd291bGQKIAkJJHVzZXI9KGdldGxvZ2luKCkgfHwgJEVOVnsnTE9HTkFNRSd9IHx8ICRFTlZ7J1VTRVInfSB8fCAiYW5vbnltb3VzIikgdW5sZXNzICR1c2VyOwpAQCAtNzgwLDYgKzc4MSw3IEBACiAJCSR4dGFnID1+IHMvXHMrXCpcKi4qJC8vOyAjIFJlbW92ZSBzdHVmZiBsaWtlICoqIElOVkFMSUQgKiogYW5kICoqIEZVTktZICoqCiAJCSR4dGFnID1+IHRyL18vXC4vIGlmICggJG9wdF91ICk7CiAJCSR4dGFnID1+IHMvW1wvXS8kb3B0X3MvZzsKKwkJJHh0YWcgPX4gcy9cWy8vZzsKIAogCQlzeXN0ZW0oJ2dpdC10YWcnLCAnLWYnLCAkeHRhZywgJGNpZCkgPT0gMAogCQkJb3IgZGllICJDYW5ub3QgY3JlYXRlIHRhZyAkeHRhZzogJCFcbiI7CkBAIC05NTAsNyArOTUyLDcgQEAKIAl9IGVsc2lmICgvXi0rJC8pIHsgIyBlbmQgb2YgdW5rbm93bi1saW5lIHByb2Nlc3NpbmcKIAkJJHN0YXRlID0gMTsKIAl9IGVsc2lmICgkc3RhdGUgIT0gMTEpIHsgIyBpZ25vcmUgc3R1ZmYgd2hlbiBza2lwcGluZwotCQlwcmludCAiKiBVTktOT1dOIExJTkUgKiAkX1xuIjsKKwkJcHJpbnQgU1RERVJSICIqIFVOS05PV04gTElORSAqICRfXG4iOwogCX0KIH0KIGNvbW1pdCgpIGlmICRicmFuY2ggYW5kICRzdGF0ZSAhPSAxMTsKZGlmZiAtLWdpdCBhL2dpdC1jdnNzZXJ2ZXIucGVybCBiL2dpdC1jdnNzZXJ2ZXIucGVybAppbmRleCAyOWRiZmM5Li5iMDBkMWMyIDEwMDc1NQotLS0gYS9naXQtY3Zzc2VydmVyLnBlcmwKKysrIGIvZ2l0LWN2c3NlcnZlci5wZXJsCkBAIC0yMSw2ICsyMSw3IEBACiAKIHVzZSBGY250bDsKIHVzZSBGaWxlOjpUZW1wIHF3L3RlbXBkaXIgdGVtcGZpbGUvOwordXNlIEZpbGU6OlBhdGggcXcvcm10cmVlLzsKIHVzZSBGaWxlOjpCYXNlbmFtZTsKIHVzZSBHZXRvcHQ6OkxvbmcgcXcoOmNvbmZpZyByZXF1aXJlX29yZGVyIG5vX2lnbm9yZV9jYXNlKTsKIApAQCAtODYsNiArODcsMTcgQEAKICMgJHN0YXRlIGhvbGRzIGFsbCB0aGUgYml0cyBvZiBpbmZvcm1hdGlvbiB0aGUgY2xpZW50cyBzZW5kcyB1cyB0aGF0IGNvdWxkCiAjIHBvdGVudGlhbGx5IGJlIHVzZWZ1bCB3aGVuIGl0IGNvbWVzIHRvIGFjdHVhbGx5IF9kb2luZ18gc29tZXRoaW5nLgogbXkgJHN0YXRlID0geyBwcmVwZW5kZGlyID0+ICcnIH07CisKKyMgV29yayBpcyBmb3IgbWFuYWdpbmcgdGVtcG9yYXJ5IHdvcmtpbmcgZGlyZWN0b3J5CitteSAkd29yayA9CisgICAgeworICAgICAgICBzdGF0ZSA9PiB1bmRlZiwgICMgdW5kZWYsIDEgKGVtcHR5KSwgMiAod2l0aCBzdHVmZikKKyAgICAgICAgd29ya0RpciA9PiB1bmRlZiwKKyAgICAgICAgaW5kZXggPT4gdW5kZWYsCisgICAgICAgIGVtcHR5RGlyID0+IHVuZGVmLAorICAgICAgICB0bXBEaXIgPT4gdW5kZWYKKyAgICB9OworCiAkbG9nLT5pbmZvKCItLS0tLS0tLS0tLS0tLS0gU1RBUlRJTkcgLS0tLS0tLS0tLS0tLS0tLS0iKTsKIAogbXkgJHVzYWdlID0KQEAgLTE4OSw2ICsyMDEsOSBAQAogJGxvZy0+ZGVidWcoIlByb2Nlc3NpbmcgdGltZSA6IHVzZXI9IiAuICh0aW1lcylbMF0gLiAiIHN5c3RlbT0iIC4gKHRpbWVzKVsxXSk7CiAkbG9nLT5pbmZvKCItLS0tLS0tLS0tLS0tLS0gRklOSVNIIC0tLS0tLS0tLS0tLS0tLS0tIik7CiAKK2NoZGlyICcvJzsKK2V4aXQgMDsKKwogIyBNYWdpYyBjYXRjaGFsbCBtZXRob2QuCiAjICAgIFRoaXMgaXMgdGhlIG1ldGhvZCB0aGF0IHdpbGwgaGFuZGxlIGFsbCBjb21tYW5kcyB3ZSBoYXZlbid0IHlldAogIyAgICBpbXBsZW1lbnRlZC4gSXQgc2ltcGx5IHNlbmRzIGEgd2FybmluZyB0byB0aGUgbG9nIGZpbGUgaW5kaWNhdGluZyBhCkBAIC00ODcsNyArNTAyLDcgQEAKICAgICAgICAgICAgICAgICBwcmludCAkc3RhdGUtPntDVlNST09UfSAuICIvJHN0YXRlLT57bW9kdWxlfS8kZmlsZW5hbWVcbiI7CiAKICAgICAgICAgICAgICAgICAjIHRoaXMgaXMgYW4gImVudHJpZXMiIGxpbmUKLSAgICAgICAgICAgICAgICBteSAka29wdHMgPSBrb3B0c19mcm9tX3BhdGgoJGZpbGVwYXJ0KTsKKyAgICAgICAgICAgICAgICBteSAka29wdHMgPSBrb3B0c19mcm9tX3BhdGgoJGZpbGVuYW1lLCJzaGExIiwkbWV0YS0+e2ZpbGVoYXNofSk7CiAgICAgICAgICAgICAgICAgJGxvZy0+ZGVidWcoIi8kZmlsZXBhcnQvMS4kbWV0YS0+e3JldmlzaW9ufS8vJGtvcHRzLyIpOwogICAgICAgICAgICAgICAgIHByaW50ICIvJGZpbGVwYXJ0LzEuJG1ldGEtPntyZXZpc2lvbn0vLyRrb3B0cy9cbiI7CiAgICAgICAgICAgICAgICAgIyBwZXJtaXNzaW9ucwpAQCAtNTE4LDkgKzUzMywyNiBAQAogCiAgICAgICAgIHByaW50ICJDaGVja2VkLWluICRkaXJwYXJ0XG4iOwogICAgICAgICBwcmludCAiJGZpbGVuYW1lXG4iOwotICAgICAgICBteSAka29wdHMgPSBrb3B0c19mcm9tX3BhdGgoJGZpbGVwYXJ0KTsKKyAgICAgICAgbXkgJGtvcHRzID0ga29wdHNfZnJvbV9wYXRoKCRmaWxlbmFtZSwiZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e21vZGlmaWVkX2ZpbGVuYW1lfSk7CiAgICAgICAgIHByaW50ICIvJGZpbGVwYXJ0LzAvLyRrb3B0cy9cbiI7CiAKKyAgICAgICAgbXkgJHJlcXVlc3RlZEtvcHRzID0gJHN0YXRlLT57b3B0fXtrfTsKKyAgICAgICAgaWYoZGVmaW5lZCgkcmVxdWVzdGVkS29wdHMpKQorICAgICAgICB7CisgICAgICAgICAgICAkcmVxdWVzdGVkS29wdHMgPSAiLWskcmVxdWVzdGVkS29wdHMiOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgJHJlcXVlc3RlZEtvcHRzID0gIiI7CisgICAgICAgIH0KKyAgICAgICAgaWYoICRrb3B0cyBuZSAkcmVxdWVzdGVkS29wdHMgKQorICAgICAgICB7CisgICAgICAgICAgICAkbG9nLT53YXJuKCJJZ25vcmluZyByZXF1ZXN0ZWQgLWs9JyRyZXF1ZXN0ZWRLb3B0cyciCisgICAgICAgICAgICAgICAgICAgICAgICAuICIgZm9yICckZmlsZW5hbWUnOyBkZXRlY3RlZCAtaz0nJGtvcHRzJyBpbnN0ZWFkIik7CisgICAgICAgICAgICAjVE9ETzogQWxzbyBoYXZlIG9wdGlvbiB0byBzZW5kIHdhcm5pbmcgdG8gdXNlcj8KKyAgICAgICAgfQorCiAgICAgICAgICRhZGRjb3VudCsrOwogICAgIH0KIApAQCAtNjAwLDcgKzYzMiw3IEBACiAKICAgICAgICAgcHJpbnQgIkNoZWNrZWQtaW4gJGRpcnBhcnRcbiI7CiAgICAgICAgIHByaW50ICIkZmlsZW5hbWVcbiI7Ci0gICAgICAgIG15ICRrb3B0cyA9IGtvcHRzX2Zyb21fcGF0aCgkZmlsZXBhcnQpOworICAgICAgICBteSAka29wdHMgPSBrb3B0c19mcm9tX3BhdGgoJGZpbGVuYW1lLCJzaGExIiwkbWV0YS0+e2ZpbGVoYXNofSk7CiAgICAgICAgIHByaW50ICIvJGZpbGVwYXJ0Ly0xLiR3cmV2Ly8ka29wdHMvXG4iOwogCiAgICAgICAgICRybWNvdW50Kys7CkBAIC03NzAsNiArODAyLDcgQEAKICAgICBhcmdzcGxpdCgiY28iKTsKIAogICAgIG15ICRtb2R1bGUgPSAkc3RhdGUtPnthcmdzfVswXTsKKyAgICAkc3RhdGUtPnttb2R1bGV9ID0gJG1vZHVsZTsKICAgICBteSAkY2hlY2tvdXRfcGF0aCA9ICRtb2R1bGU7CiAKICAgICAjIHVzZSB0aGUgdXNlciBzcGVjaWZpZWQgZGlyZWN0b3J5IGlmIHdlJ3JlIGdpdmVuIGl0CkBAIC04NDcsNiArODgwLDcgQEAKICAgICAgICAgIyBEb24ndCB3YW50IHRvIGNoZWNrIG91dCBkZWxldGVkIGZpbGVzCiAgICAgICAgIG5leHQgaWYgKCAkZ2l0LT57ZmlsZWhhc2h9IGVxICJkZWxldGVkIiApOwogCisgICAgICAgIG15ICRmdWxsTmFtZSA9ICRnaXQtPntuYW1lfTsKICAgICAgICAgKCAkZ2l0LT57bmFtZX0sICRnaXQtPntkaXJ9ICkgPSBmaWxlbmFtZXNwbGl0KCRnaXQtPntuYW1lfSk7CiAKICAgICAgICBpZiAobGVuZ3RoKCRnaXQtPntkaXJ9KSAmJiAkZ2l0LT57ZGlyfSBuZSAnLi8nCkBAIC04NzcsNyArOTExLDcgQEAKICAgICAgICBwcmludCAkc3RhdGUtPntDVlNST09UfSAuICIvJG1vZHVsZS8iIC4gKCBkZWZpbmVkICggJGdpdC0+e2Rpcn0gKSBhbmQgJGdpdC0+e2Rpcn0gbmUgIi4vIiA/ICRnaXQtPntkaXJ9IC4gIi8iIDogIiIgKSAuICIkZ2l0LT57bmFtZX1cbiI7CiAKICAgICAgICAgIyB0aGlzIGlzIGFuICJlbnRyaWVzIiBsaW5lCi0gICAgICAgIG15ICRrb3B0cyA9IGtvcHRzX2Zyb21fcGF0aCgkZ2l0LT57bmFtZX0pOworICAgICAgICBteSAka29wdHMgPSBrb3B0c19mcm9tX3BhdGgoJGZ1bGxOYW1lLCJzaGExIiwkZ2l0LT57ZmlsZWhhc2h9KTsKICAgICAgICAgcHJpbnQgIi8kZ2l0LT57bmFtZX0vMS4kZ2l0LT57cmV2aXNpb259Ly8ka29wdHMvXG4iOwogICAgICAgICAjIHBlcm1pc3Npb25zCiAgICAgICAgIHByaW50ICJ1PSRnaXQtPnttb2RlfSxnPSRnaXQtPnttb2RlfSxvPSRnaXQtPnttb2RlfVxuIjsKQEAgLTEwODYsNyArMTEyMCw3IEBACiAJCXByaW50ICRzdGF0ZS0+e0NWU1JPT1R9IC4gIi8kc3RhdGUtPnttb2R1bGV9LyRmaWxlbmFtZVxuIjsKIAogCQkjIHRoaXMgaXMgYW4gImVudHJpZXMiIGxpbmUKLQkJbXkgJGtvcHRzID0ga29wdHNfZnJvbV9wYXRoKCRmaWxlcGFydCk7CisJCW15ICRrb3B0cyA9IGtvcHRzX2Zyb21fcGF0aCgkZmlsZW5hbWUsInNoYTEiLCRtZXRhLT57ZmlsZWhhc2h9KTsKIAkJJGxvZy0+ZGVidWcoIi8kZmlsZXBhcnQvMS4kbWV0YS0+e3JldmlzaW9ufS8vJGtvcHRzLyIpOwogCQlwcmludCAiLyRmaWxlcGFydC8xLiRtZXRhLT57cmV2aXNpb259Ly8ka29wdHMvXG4iOwogCkBAIC0xMTAxLDEwICsxMTM1LDEwIEBACiAgICAgICAgICAgICAkbG9nLT5pbmZvKCJVcGRhdGluZyAnJGZpbGVuYW1lJyIpOwogICAgICAgICAgICAgbXkgKCAkZmlsZXBhcnQsICRkaXJwYXJ0ICkgPSBmaWxlbmFtZXNwbGl0KCRtZXRhLT57bmFtZX0sMSk7CiAKLSAgICAgICAgICAgIG15ICRkaXIgPSB0ZW1wZGlyKCBESVIgPT4gJFRFTVBfRElSLCBDTEVBTlVQID0+IDEgKSAuICIvIjsKKyAgICAgICAgICAgIG15ICRtZXJnZURpciA9IHNldHVwVG1wRGlyKCk7CiAKLSAgICAgICAgICAgIGNoZGlyICRkaXI7CiAgICAgICAgICAgICBteSAkZmlsZV9sb2NhbCA9ICRmaWxlcGFydCAuICIubWluZSI7CisgICAgICAgICAgICBteSAkbWVyZ2VkRmlsZSA9ICIkbWVyZ2VEaXIvJGZpbGVfbG9jYWwiOwogICAgICAgICAgICAgc3lzdGVtKCJsbiIsIi1zIiwkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e21vZGlmaWVkX2ZpbGVuYW1lfSwgJGZpbGVfbG9jYWwpOwogICAgICAgICAgICAgbXkgJGZpbGVfb2xkID0gJGZpbGVwYXJ0IC4gIi4iIC4gJG9sZG1ldGEtPntyZXZpc2lvbn07CiAgICAgICAgICAgICB0cmFuc21pdGZpbGUoJG9sZG1ldGEtPntmaWxlaGFzaH0sIHsgdGFyZ2V0ZmlsZSA9PiAkZmlsZV9vbGQgfSk7CkBAIC0xMTE1LDExICsxMTQ5LDEzIEBACiAgICAgICAgICAgICAkbG9nLT5pbmZvKCJNZXJnaW5nICRmaWxlX2xvY2FsLCAkZmlsZV9vbGQsICRmaWxlX25ldyIpOwogICAgICAgICAgICAgcHJpbnQgIk0gTWVyZ2luZyBkaWZmZXJlbmNlcyBiZXR3ZWVuIDEuJG9sZG1ldGEtPntyZXZpc2lvbn0gYW5kIDEuJG1ldGEtPntyZXZpc2lvbn0gaW50byAkZmlsZW5hbWVcbiI7CiAKLSAgICAgICAgICAgICRsb2ctPmRlYnVnKCJUZW1wb3JhcnkgZGlyZWN0b3J5IGZvciBtZXJnZSBpcyAkZGlyIik7CisgICAgICAgICAgICAkbG9nLT5kZWJ1ZygiVGVtcG9yYXJ5IGRpcmVjdG9yeSBmb3IgbWVyZ2UgaXMgJG1lcmdlRGlyIik7CiAKICAgICAgICAgICAgIG15ICRyZXR1cm4gPSBzeXN0ZW0oImdpdCIsICJtZXJnZS1maWxlIiwgJGZpbGVfbG9jYWwsICRmaWxlX29sZCwgJGZpbGVfbmV3KTsKICAgICAgICAgICAgICRyZXR1cm4gPj49IDg7CiAKKyAgICAgICAgICAgIGNsZWFudXBUbXBEaXIoKTsKKwogICAgICAgICAgICAgaWYgKCAkcmV0dXJuID09IDAgKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICRsb2ctPmluZm8oIk1lcmdlZCBzdWNjZXNzZnVsbHkiKTsKQEAgLTExMzIsNyArMTE2OCw4IEBACiAgICAgICAgICAgICAgICAgICAgIHByaW50ICJNZXJnZWQgJGRpcnBhcnRcbiI7CiAgICAgICAgICAgICAgICAgICAgICRsb2ctPmRlYnVnKCRzdGF0ZS0+e0NWU1JPT1R9IC4gIi8kc3RhdGUtPnttb2R1bGV9LyRmaWxlbmFtZSIpOwogICAgICAgICAgICAgICAgICAgICBwcmludCAkc3RhdGUtPntDVlNST09UfSAuICIvJHN0YXRlLT57bW9kdWxlfS8kZmlsZW5hbWVcbiI7Ci0gICAgICAgICAgICAgICAgICAgIG15ICRrb3B0cyA9IGtvcHRzX2Zyb21fcGF0aCgkZmlsZXBhcnQpOworICAgICAgICAgICAgICAgICAgICBteSAka29wdHMgPSBrb3B0c19mcm9tX3BhdGgoIiRkaXJwYXJ0LyRmaWxlcGFydCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSIsJG1lcmdlZEZpbGUpOwogICAgICAgICAgICAgICAgICAgICAkbG9nLT5kZWJ1ZygiLyRmaWxlcGFydC8xLiRtZXRhLT57cmV2aXNpb259Ly8ka29wdHMvIik7CiAgICAgICAgICAgICAgICAgICAgIHByaW50ICIvJGZpbGVwYXJ0LzEuJG1ldGEtPntyZXZpc2lvbn0vLyRrb3B0cy9cbiI7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTE0OCw3ICsxMTg1LDggQEAKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHByaW50ICJNZXJnZWQgJGRpcnBhcnRcbiI7CiAgICAgICAgICAgICAgICAgICAgIHByaW50ICRzdGF0ZS0+e0NWU1JPT1R9IC4gIi8kc3RhdGUtPnttb2R1bGV9LyRmaWxlbmFtZVxuIjsKLSAgICAgICAgICAgICAgICAgICAgbXkgJGtvcHRzID0ga29wdHNfZnJvbV9wYXRoKCRmaWxlcGFydCk7CisgICAgICAgICAgICAgICAgICAgIG15ICRrb3B0cyA9IGtvcHRzX2Zyb21fcGF0aCgiJGRpcnBhcnQvJGZpbGVwYXJ0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIiwkbWVyZ2VkRmlsZSk7CiAgICAgICAgICAgICAgICAgICAgIHByaW50ICIvJGZpbGVwYXJ0LzEuJG1ldGEtPntyZXZpc2lvbn0vKy8ka29wdHMvXG4iOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTExNjgsMTMgKzEyMDYsMTEgQEAKICAgICAgICAgICAgICAgICAjIHRyYW5zbWl0IGZpbGUsIGZvcm1hdCBpcyBzaW5nbGUgaW50ZWdlciBvbiBhIGxpbmUgYnkgaXRzZWxmIChmaWxlCiAgICAgICAgICAgICAgICAgIyBzaXplKSBmb2xsb3dlZCBieSB0aGUgZmlsZSBjb250ZW50cwogICAgICAgICAgICAgICAgICMgVE9ETyA6IHdlIHNob3VsZCBjb3B5IGZpbGVzIGluIGJsb2NrcwotICAgICAgICAgICAgICAgIG15ICRkYXRhID0gYGNhdCAkZmlsZV9sb2NhbGA7CisgICAgICAgICAgICAgICAgbXkgJGRhdGEgPSBgY2F0ICRtZXJnZWRGaWxlYDsKICAgICAgICAgICAgICAgICAkbG9nLT5kZWJ1ZygiRmlsZSBzaXplIDogIiAuIGxlbmd0aCgkZGF0YSkpOwogICAgICAgICAgICAgICAgIHByaW50IGxlbmd0aCgkZGF0YSkgLiAiXG4iOwogICAgICAgICAgICAgICAgIHByaW50ICRkYXRhOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjaGRpciAiLyI7CiAgICAgICAgIH0KIAogICAgIH0KQEAgLTExOTUsNiArMTIzMSw3IEBACiAgICAgaWYgKCAkc3RhdGUtPnttZXRob2R9IGVxICdwc2VydmVyJykKICAgICB7CiAgICAgICAgIHByaW50ICJlcnJvciAxIHBzZXJ2ZXIgYWNjZXNzIGNhbm5vdCBjb21taXRcbiI7CisgICAgICAgIGNsZWFudXBXb3JrVHJlZSgpOwogICAgICAgICBleGl0OwogICAgIH0KIApAQCAtMTIwMiw2ICsxMjM5LDcgQEAKICAgICB7CiAgICAgICAgICRsb2ctPndhcm4oImZpbGUgJ2luZGV4JyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkiKTsKICAgICAgICAgcHJpbnQgImVycm9yIDEgSW5kZXggYWxyZWFkeSBleGlzdHMgaW4gZ2l0IHJlcG9cbiI7CisgICAgICAgIGNsZWFudXBXb3JrVHJlZSgpOwogICAgICAgICBleGl0OwogICAgIH0KIApAQCAtMTIwOSwzMSArMTI0NywyMCBAQAogICAgIG15ICR1cGRhdGVyID0gR0lUQ1ZTOjp1cGRhdGVyLT5uZXcoJHN0YXRlLT57Q1ZTUk9PVH0sICRzdGF0ZS0+e21vZHVsZX0sICRsb2cpOwogICAgICR1cGRhdGVyLT51cGRhdGUoKTsKIAotICAgIG15ICR0bXBkaXIgPSB0ZW1wZGlyICggRElSID0+ICRURU1QX0RJUiApOwotICAgIG15ICggdW5kZWYsICRmaWxlX2luZGV4ICkgPSB0ZW1wZmlsZSAoIERJUiA9PiAkVEVNUF9ESVIsIE9QRU4gPT4gMCApOwotICAgICRsb2ctPmluZm8oIkxvY2tsZXNzIGNvbW1pdCBzdGFydCwgYmFzaW5nIGNvbW1pdCBvbiAnJHRtcGRpcicsIGluZGV4IGZpbGUgaXMgJyRmaWxlX2luZGV4JyIpOwotCi0gICAgJEVOVntHSVRfRElSfSA9ICRzdGF0ZS0+e0NWU1JPT1R9IC4gIi8iOwotICAgICRFTlZ7R0lUX1dPUktfVFJFRX0gPSAiLiI7Ci0gICAgJEVOVntHSVRfSU5ERVhfRklMRX0gPSAkZmlsZV9pbmRleDsKLQogICAgICMgUmVtZW1iZXIgd2hlcmUgdGhlIGhlYWQgd2FzIGF0IHRoZSBiZWdpbm5pbmcuCiAgICAgbXkgJHBhcmVudGhhc2ggPSBgZ2l0IHNob3ctcmVmIC1zIHJlZnMvaGVhZHMvJHN0YXRlLT57bW9kdWxlfWA7CiAgICAgY2hvbXAgJHBhcmVudGhhc2g7CiAgICAgaWYgKCRwYXJlbnRoYXNoICF+IC9eWzAtOWEtZl17NDB9JC8pIHsKIAkgICAgcHJpbnQgImVycm9yIDEgcHNlcnZlciBjYW5ub3QgZmluZCB0aGUgY3VycmVudCBIRUFEIG9mIG1vZHVsZSI7CisJICAgIGNsZWFudXBXb3JrVHJlZSgpOwogCSAgICBleGl0OwogICAgIH0KIAotICAgIGNoZGlyICR0bXBkaXI7CisgICAgc2V0dXBXb3JrVHJlZSgkcGFyZW50aGFzaCk7CiAKLSAgICAjIHBvcHVsYXRlIHRoZSB0ZW1wb3JhcnkgaW5kZXgKLSAgICBzeXN0ZW0oImdpdC1yZWFkLXRyZWUiLCAkcGFyZW50aGFzaCk7Ci0gICAgdW5sZXNzICgkPyA9PSAwKQotICAgIHsKLQlkaWUgIkVycm9yIHJ1bm5pbmcgZ2l0LXJlYWQtdHJlZSAkc3RhdGUtPnttb2R1bGV9ICRmaWxlX2luZGV4ICQhIjsKLSAgICB9Ci0gICAgJGxvZy0+aW5mbygiQ3JlYXRlZCBpbmRleCAnJGZpbGVfaW5kZXgnIGZvciBoZWFkICRzdGF0ZS0+e21vZHVsZX0gLSBleGl0IHN0YXR1cyAkPyIpOworICAgICRsb2ctPmluZm8oIkxvY2tsZXNzIGNvbW1pdCBzdGFydCwgYmFzaW5nIGNvbW1pdCBvbiAnJHdvcmstPnt3b3JrRGlyfScsIGluZGV4IGZpbGUgaXMgJyR3b3JrLT57aW5kZXh9JyIpOworCisgICAgJGxvZy0+aW5mbygiQ3JlYXRlZCBpbmRleCAnJHdvcmstPntpbmRleH0nIGZvciBoZWFkICRzdGF0ZS0+e21vZHVsZX0gLSBleGl0IHN0YXR1cyAkPyIpOwogCiAgICAgbXkgQGNvbW1pdHRlZGZpbGVzID0gKCk7CiAgICAgbXkgJW9sZG1ldGE7CkBAIC0xMjcxLDcgKzEyOTgsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICAjIGZhaWwgZXZlcnl0aGluZyBpZiBhbiB1cCB0byBkYXRlIGNoZWNrIGZhaWxzCiAgICAgICAgICAgICBwcmludCAiZXJyb3IgMSBVcCB0byBkYXRlIGNoZWNrIGZhaWxlZCBmb3IgJGZpbGVuYW1lXG4iOwotICAgICAgICAgICAgY2hkaXIgIi8iOworICAgICAgICAgICAgY2xlYW51cFdvcmtUcmVlKCk7CiAgICAgICAgICAgICBleGl0OwogICAgICAgICB9CiAKQEAgLTEzMTMsNyArMTM0MCw3IEBACiAgICAgewogICAgICAgICBwcmludCAiRSBObyBmaWxlcyB0byBjb21taXRcbiI7CiAgICAgICAgIHByaW50ICJva1xuIjsKLSAgICAgICAgY2hkaXIgIi8iOworICAgICAgICBjbGVhbnVwV29ya1RyZWUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTMzNiw3ICsxMzYzLDcgQEAKICAgICB7CiAgICAgICAgICRsb2ctPndhcm4oIkNvbW1pdCBmYWlsZWQgKEludmFsaWQgY29tbWl0IGhhc2gpIik7CiAgICAgICAgIHByaW50ICJlcnJvciAxIENvbW1pdCBmYWlsZWQgKHVua25vd24gcmVhc29uKVxuIjsKLSAgICAgICAgY2hkaXIgIi8iOworICAgICAgICBjbGVhbnVwV29ya1RyZWUoKTsKICAgICAgICAgZXhpdDsKICAgICB9CiAKQEAgLTEzNDgsNyArMTM3NSw3IEBACiAJCXsKIAkJCSRsb2ctPndhcm4oIkNvbW1pdCBmYWlsZWQgKHVwZGF0ZSBob29rIGRlY2xpbmVkIHRvIHVwZGF0ZSByZWYpIik7CiAJCQlwcmludCAiZXJyb3IgMSBDb21taXQgZmFpbGVkICh1cGRhdGUgaG9vayBkZWNsaW5lZClcbiI7Ci0JCQljaGRpciAiLyI7CisJCQljbGVhbnVwV29ya1RyZWUoKTsKIAkJCWV4aXQ7CiAJCX0KIAl9CkBAIC0xMzU4LDYgKzEzODUsNyBAQAogCQkJInJlZnMvaGVhZHMvJHN0YXRlLT57bW9kdWxlfSIsICRjb21taXRoYXNoLCAkcGFyZW50aGFzaCkpIHsKIAkJJGxvZy0+d2FybigidXBkYXRlLXJlZiBmb3IgJHN0YXRlLT57bW9kdWxlfSBmYWlsZWQuIik7CiAJCXByaW50ICJlcnJvciAxIENhbm5vdCBjb21taXQgLS0gdXBkYXRlIGZpcnN0XG4iOworCQljbGVhbnVwV29ya1RyZWUoKTsKIAkJZXhpdDsKIAl9CiAKQEAgLTE0MDksMTIgKzE0MzcsMTIgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHByaW50ICJDaGVja2VkLWluICRkaXJwYXJ0XG4iOwogICAgICAgICAgICAgcHJpbnQgIiRmaWxlbmFtZVxuIjsKLSAgICAgICAgICAgIG15ICRrb3B0cyA9IGtvcHRzX2Zyb21fcGF0aCgkZmlsZXBhcnQpOworICAgICAgICAgICAgbXkgJGtvcHRzID0ga29wdHNfZnJvbV9wYXRoKCRmaWxlbmFtZSwic2hhMSIsJG1ldGEtPntmaWxlaGFzaH0pOwogICAgICAgICAgICAgcHJpbnQgIi8kZmlsZXBhcnQvMS4kbWV0YS0+e3JldmlzaW9ufS8vJGtvcHRzL1xuIjsKICAgICAgICAgfQogICAgIH0KIAotICAgIGNoZGlyICIvIjsKKyAgICBjbGVhbnVwV29ya1RyZWUoKTsKICAgICBwcmludCAib2tcbiI7CiB9CiAKQEAgLTE3NTcsMTUgKzE3ODUsOSBAQAogICAgIGFyZ3Nmcm9tZGlyKCR1cGRhdGVyKTsKIAogICAgICMgd2UnbGwgbmVlZCBhIHRlbXBvcmFyeSBjaGVja291dCBkaXIKLSAgICBteSAkdG1wZGlyID0gdGVtcGRpciAoIERJUiA9PiAkVEVNUF9ESVIgKTsKLSAgICBteSAoIHVuZGVmLCAkZmlsZV9pbmRleCApID0gdGVtcGZpbGUgKCBESVIgPT4gJFRFTVBfRElSLCBPUEVOID0+IDAgKTsKLSAgICAkbG9nLT5pbmZvKCJUZW1wIGNoZWNrb3V0ZGlyIGNyZWF0aW9uIHN1Y2Nlc3NmdWwsIGJhc2luZyBhbm5vdGF0ZSBzZXNzaW9uIHdvcmsgb24gJyR0bXBkaXInLCBpbmRleCBmaWxlIGlzICckZmlsZV9pbmRleCciKTsKKyAgICBzZXR1cFdvcmtUcmVlKCk7CiAKLSAgICAkRU5We0dJVF9ESVJ9ID0gJHN0YXRlLT57Q1ZTUk9PVH0gLiAiLyI7Ci0gICAgJEVOVntHSVRfV09SS19UUkVFfSA9ICIuIjsKLSAgICAkRU5We0dJVF9JTkRFWF9GSUxFfSA9ICRmaWxlX2luZGV4OwotCi0gICAgY2hkaXIgJHRtcGRpcjsKKyAgICAkbG9nLT5pbmZvKCJUZW1wIGNoZWNrb3V0ZGlyIGNyZWF0aW9uIHN1Y2Nlc3NmdWwsIGJhc2luZyBhbm5vdGF0ZSBzZXNzaW9uIHdvcmsgb24gJyR3b3JrLT57d29ya0Rpcn0nLCBpbmRleCBmaWxlIGlzICckRU5We0dJVF9JTkRFWF9GSUxFfSciKTsKIAogICAgICMgZm9yZWFjaCBmaWxlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lIC4uLgogICAgIGZvcmVhY2ggbXkgJGZpbGVuYW1lICggQHskc3RhdGUtPnthcmdzfX0gKQpAQCAtMTc4OSwxMCArMTgxMSwxMCBAQAogCXN5c3RlbSgiZ2l0LXJlYWQtdHJlZSIsICRsYXN0c2VlbmluKTsKIAl1bmxlc3MgKCQ/ID09IDApCiAJewotCSAgICBwcmludCAiRSBlcnJvciBydW5uaW5nIGdpdC1yZWFkLXRyZWUgJGxhc3RzZWVuaW4gJGZpbGVfaW5kZXggJCFcbiI7CisJICAgIHByaW50ICJFIGVycm9yIHJ1bm5pbmcgZ2l0LXJlYWQtdHJlZSAkbGFzdHNlZW5pbiAkRU5We0dJVF9JTkRFWF9GSUxFfSAkIVxuIjsKIAkgICAgcmV0dXJuOwogCX0KLQkkbG9nLT5pbmZvKCJDcmVhdGVkIGluZGV4ICckZmlsZV9pbmRleCcgd2l0aCBjb21taXQgJGxhc3RzZWVuaW4gLSBleGl0IHN0YXR1cyAkPyIpOworCSRsb2ctPmluZm8oIkNyZWF0ZWQgaW5kZXggJyRFTlZ7R0lUX0lOREVYX0ZJTEV9JyB3aXRoIGNvbW1pdCAkbGFzdHNlZW5pbiAtIGV4aXQgc3RhdHVzICQ/Iik7CiAKICAgICAgICAgIyBkbyBhIGNoZWNrb3V0IG9mIHRoZSBmaWxlCiAgICAgICAgIHN5c3RlbSgnZ2l0LWNoZWNrb3V0LWluZGV4JywgJy1mJywgJy11JywgJGZpbGVuYW1lKTsKQEAgLTE4MDgsNyArMTgzMCw3IEBACiAgICAgICAgICMgZ2l0LWpzYW5ub3RhdGUgdGVsbGluZyB1cyBhYm91dCBjb21taXRzIHdlIGFyZSBoaWRpbmcKICAgICAgICAgIyBmcm9tIHRoZSBjbGllbnQuCiAKLSAgICAgICAgbXkgJGFfaGludHMgPSAiJHRtcGRpci8uYW5ub3RhdGVfaGludHMiOworICAgICAgICBteSAkYV9oaW50cyA9ICIkd29yay0+e3dvcmtEaXJ9Ly5hbm5vdGF0ZV9oaW50cyI7CiAgICAgICAgIGlmICghb3BlbihBTk5PVEFURUhJTlRTLCAnPicsICRhX2hpbnRzKSkgewogICAgICAgICAgICAgcHJpbnQgIkUgZmFpbGVkIHRvIG9wZW4gJyRhX2hpbnRzJyBmb3Igd3JpdGluZzogJCFcbiI7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xODYyLDcgKzE4ODQsNyBAQAogICAgIH0KIAogICAgICMgZG9uZTsgZ2V0IG91dCBvZiB0aGUgdGVtcGRpcgotICAgIGNoZGlyICIvIjsKKyAgICBjbGVhbnVwV29ya1RyZWUoKTsKIAogICAgIHByaW50ICJva1xuIjsKIApAQCAtMjExNSwyNiArMjEzNywzODggQEAKICAgICByZXR1cm4gJGZpbGVuYW1lOwogfQogCitzdWIgdmFsaWRhdGVHaXREaXIKK3sKKyAgICBpZiggIWRlZmluZWQoJHN0YXRlLT57Q1ZTUk9PVH0pICkKKyAgICB7CisgICAgICAgIHByaW50ICJlcnJvciAxIENWU1JPT1Qgbm90IHNwZWNpZmllZFxuIjsKKyAgICAgICAgY2xlYW51cFdvcmtUcmVlKCk7CisgICAgICAgIGV4aXQ7CisgICAgfQorICAgIGlmKCAkRU5We0dJVF9ESVJ9IG5lICgkc3RhdGUtPntDVlNST09UfSAuICcvJykgKQorICAgIHsKKyAgICAgICAgcHJpbnQgImVycm9yIDEgSW50ZXJuYWxseSBpbmNvbnNpc3RlbnQgQ1ZTUk9PVFxuIjsKKyAgICAgICAgY2xlYW51cFdvcmtUcmVlKCk7CisgICAgICAgIGV4aXQ7CisgICAgfQorfQorCisjIFNldHVwIHdvcmtpbmcgZGlyZWN0b3J5IGluIGEgd29yayB0cmVlIHdpdGggdGhlIHJlcXVlc3RlZCB2ZXJzaW9uCisjIGxvYWRlZCBpbiB0aGUgaW5kZXguCitzdWIgc2V0dXBXb3JrVHJlZQoreworICAgIG15ICgkdmVyKSA9IEBfOworCisgICAgdmFsaWRhdGVHaXREaXIoKTsKKworICAgIGlmKCAoIGRlZmluZWQoJHdvcmstPntzdGF0ZX0pICYmICR3b3JrLT57c3RhdGV9ICE9IDEgKSB8fAorICAgICAgICBkZWZpbmVkKCR3b3JrLT57dG1wRGlyfSkgKQorICAgIHsKKyAgICAgICAgJGxvZy0+d2FybigiQmFkIHdvcmsgdHJlZSBzdGF0ZSBtYW5hZ2VtZW50Iik7CisgICAgICAgIHByaW50ICJlcnJvciAxIEludGVybmFsIHNldHVwIG11bHRpcGxlIHdvcmsgdHJlZXMgd2l0aG91dCBjbGVhbnVwXG4iOworICAgICAgICBjbGVhbnVwV29ya1RyZWUoKTsKKyAgICAgICAgZXhpdDsKKyAgICB9CisKKyAgICAkd29yay0+e3dvcmtEaXJ9ID0gdGVtcGRpciAoIERJUiA9PiAkVEVNUF9ESVIgKTsKKworICAgIGlmKCAhZGVmaW5lZCgkd29yay0+e2luZGV4fSkgKQorICAgIHsKKyAgICAgICAgKHVuZGVmLCAkd29yay0+e2luZGV4fSkgPSB0ZW1wZmlsZSAoIERJUiA9PiAkVEVNUF9ESVIsIE9QRU4gPT4gMCApOworICAgIH0KKworICAgIGNoZGlyICR3b3JrLT57d29ya0Rpcn0gb3IKKyAgICAgICAgZGllICJVbmFibGUgdG8gY2hkaXIgdG8gJHdvcmstPnt3b3JrRGlyfVxuIjsKKworICAgICRsb2ctPmluZm8oIlNldHRpbmcgdXAgR0lUX1dPUktfVFJFRSBhcyAnLicgaW4gJyR3b3JrLT57d29ya0Rpcn0nLCBpbmRleCBmaWxlIGlzICckd29yay0+e2luZGV4fSciKTsKKworICAgICRFTlZ7R0lUX1dPUktfVFJFRX0gPSAiLiI7CisgICAgJEVOVntHSVRfSU5ERVhfRklMRX0gPSAkd29yay0+e2luZGV4fTsKKyAgICAkd29yay0+e3N0YXRlfSA9IDI7CisKKyAgICBpZigkdmVyKQorICAgIHsKKyAgICAgICAgc3lzdGVtKCJnaXQiLCJyZWFkLXRyZWUiLCR2ZXIpOworICAgICAgICB1bmxlc3MgKCQ/ID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgICRsb2ctPndhcm4oIkVycm9yIHJ1bm5pbmcgZ2l0LXJlYWQtdHJlZSIpOworICAgICAgICAgICAgZGllICJFcnJvciBydW5uaW5nIGdpdC1yZWFkLXRyZWUgJHZlciBpbiAkd29yay0+e3dvcmtEaXJ9ICQhXG4iOworICAgICAgICB9CisgICAgfQorICAgICMgZWxzZSAjIHJlcV9hbm5vdGF0ZSByZWFkcyB0cmVlIGZvciBlYWNoIGZpbGUKK30KKworIyBFbnN1cmUgY3VycmVudCBkaXJlY3RvcnkgaXMgaW4gc29tZSBraW5kIG9mIHdvcmtpbmcgZGlyZWN0b3J5LAorIyB3aXRoIGEgcmVjZW50IHZlcnNpb24gbG9hZGVkIGluIHRoZSBpbmRleC4KK3N1YiBlbnN1cmVXb3JrVHJlZQoreworICAgIGlmKCBkZWZpbmVkKCR3b3JrLT57dG1wRGlyfSkgKQorICAgIHsKKyAgICAgICAgJGxvZy0+d2FybigiQmFkIHdvcmsgdHJlZSBzdGF0ZSBtYW5hZ2VtZW50IFtlbnN1cmVXb3JrVHJlZSgpXSIpOworICAgICAgICBwcmludCAiZXJyb3IgMSBJbnRlcm5hbCBzZXR1cCBtdWx0aXBsZSBkaXJzIHdpdGhvdXQgY2xlYW51cFxuIjsKKyAgICAgICAgY2xlYW51cFdvcmtUcmVlKCk7CisgICAgICAgIGV4aXQ7CisgICAgfQorICAgIGlmKCAkd29yay0+e3N0YXRlfSApCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdmFsaWRhdGVHaXREaXIoKTsKKworICAgIGlmKCAhZGVmaW5lZCgkd29yay0+e2VtcHR5RGlyfSkgKQorICAgIHsKKyAgICAgICAgJHdvcmstPntlbXB0eURpcn0gPSB0ZW1wZGlyICggRElSID0+ICRURU1QX0RJUiwgT1BFTiA9PiAwKTsKKyAgICB9CisgICAgY2hkaXIgJHdvcmstPntlbXB0eURpcn0gb3IKKyAgICAgICAgZGllICJVbmFibGUgdG8gY2hkaXIgdG8gJHdvcmstPntlbXB0eURpcn1cbiI7CisKKyAgICBteSAkdmVyID0gYGdpdCBzaG93LXJlZiAtcyByZWZzL2hlYWRzLyRzdGF0ZS0+e21vZHVsZX1gOworICAgIGNob21wICR2ZXI7CisgICAgaWYgKCR2ZXIgIX4gL15bMC05YS1mXXs0MH0kLykKKyAgICB7CisgICAgICAgICRsb2ctPndhcm4oIkVycm9yIGZyb20gZ2l0IHNob3ctcmVmIC1zIHJlZnMvaGVhZCRzdGF0ZS0+e21vZHVsZX0iKTsKKyAgICAgICAgcHJpbnQgImVycm9yIDEgY2Fubm90IGZpbmQgdGhlIGN1cnJlbnQgSEVBRCBvZiBtb2R1bGUiOworICAgICAgICBjbGVhbnVwV29ya1RyZWUoKTsKKyAgICAgICAgZXhpdDsKKyAgICB9CisKKyAgICBpZiggIWRlZmluZWQoJHdvcmstPntpbmRleH0pICkKKyAgICB7CisgICAgICAgICh1bmRlZiwgJHdvcmstPntpbmRleH0pID0gdGVtcGZpbGUgKCBESVIgPT4gJFRFTVBfRElSLCBPUEVOID0+IDAgKTsKKyAgICB9CisKKyAgICAkRU5We0dJVF9XT1JLX1RSRUV9ID0gIi4iOworICAgICRFTlZ7R0lUX0lOREVYX0ZJTEV9ID0gJHdvcmstPntpbmRleH07CisgICAgJHdvcmstPntzdGF0ZX0gPSAxOworCisgICAgc3lzdGVtKCJnaXQiLCJyZWFkLXRyZWUiLCR2ZXIpOworICAgIHVubGVzcyAoJD8gPT0gMCkKKyAgICB7CisgICAgICAgIGRpZSAiRXJyb3IgcnVubmluZyBnaXQtcmVhZC10cmVlICR2ZXIgJCFcbiI7CisgICAgfQorfQorCisjIENsZWFudXAgd29ya2luZyBkaXJlY3RvcnkgdGhhdCBpcyBub3QgbmVlZGVkIGFueSBsb25nZXIuCitzdWIgY2xlYW51cFdvcmtUcmVlCit7CisgICAgaWYoICEgJHdvcmstPntzdGF0ZX0gKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNoZGlyICIvIiBvciBkaWUgIlVuYWJsZSB0byBjaGRpciAnLydcbiI7CisKKyAgICBpZiggZGVmaW5lZCgkd29yay0+e3dvcmtEaXJ9KSApCisgICAgeworICAgICAgICBybXRyZWUoICR3b3JrLT57d29ya0Rpcn0gKTsKKyAgICAgICAgdW5kZWYgJHdvcmstPnt3b3JrRGlyfTsKKyAgICB9CisgICAgdW5kZWYgJHdvcmstPntzdGF0ZX07Cit9CisKKyMgU2V0dXAgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IChub3QgYSB3b3JraW5nIHRyZWUpLCB0eXBpY2FsbHkgZm9yCisjIG1lcmdpbmcgZGlydHkgc3RhdGUgYXMgaW4gcmVxX3VwZGF0ZS4KK3N1YiBzZXR1cFRtcERpcgoreworICAgICR3b3JrLT57dG1wRGlyfSA9IHRlbXBkaXIgKCBESVIgPT4gJFRFTVBfRElSICk7CisgICAgY2hkaXIgJHdvcmstPnt0bXBEaXJ9IG9yIGRpZSAiVW5hYmxlIHRvIGNoZGlyICR3b3JrLT57dG1wRGlyfVxuIjsKKworICAgIHJldHVybiAkd29yay0+e3RtcERpcn07Cit9CisKKyMgQ2xlYW4gdXAgYSBwcmV2aW91c2x5IHNldHVwVG1wRGlyLiAgUmVzdG9yZSBwcmV2aW91cyB3b3JrIHRyZWUgaWYKKyMgYXBwcm9wcmlhdGUuCitzdWIgY2xlYW51cFRtcERpcgoreworICAgIGlmICggIWRlZmluZWQoJHdvcmstPnt0bXBEaXJ9KSApCisgICAgeworICAgICAgICAkbG9nLT53YXJuKCJjbGVhbnVwIHRtcGRpciB0aGF0IGhhcyBub3QgYmVlbiBzZXR1cCIpOworICAgICAgICBkaWUgIkNsZWFudXAgdG1wRGlyIHRoYXQgaGFzIG5vdCBiZWVuIHNldHVwXG4iOworICAgIH0KKyAgICBpZiggZGVmaW5lZCgkd29yay0+e3N0YXRlfSkgKQorICAgIHsKKyAgICAgICAgaWYoICR3b3JrLT57c3RhdGV9ID09IDEgKQorICAgICAgICB7CisgICAgICAgICAgICBjaGRpciAkd29yay0+e2VtcHR5RGlyfSBvcgorICAgICAgICAgICAgICAgIGRpZSAiVW5hYmxlIHRvIGNoZGlyIHRvICR3b3JrLT57ZW1wdHlEaXJ9XG4iOworICAgICAgICB9CisgICAgICAgIGVsc2lmKCAkd29yay0+e3N0YXRlfSA9PSAyICkKKyAgICAgICAgeworICAgICAgICAgICAgY2hkaXIgJHdvcmstPnt3b3JrRGlyfSBvcgorICAgICAgICAgICAgICAgIGRpZSAiVW5hYmxlIHRvIGNoZGlyIHRvICR3b3JrLT57ZW1wdHlEaXJ9XG4iOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgJGxvZy0+d2FybigiSW5jb25zaXN0ZW50IHdvcmsgZGlyIHN0YXRlIik7CisgICAgICAgICAgICBkaWUgIkluY29uc2lzdGVudCB3b3JrIGRpciBzdGF0ZVxuIjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBjaGRpciAiLyIgb3IgZGllICJVbmFibGUgdG8gY2hkaXIgJy8nXG4iOworICAgIH0KK30KKwogIyBHaXZlbiBhIHBhdGgsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBrb3B0cwogIyB0aGF0IHNob3VsZCBnbyBpbnRvIHRoYXQgcGF0aCdzIEVudHJpZXMgbGluZS4gIEZvciBleGFtcGxlLCBhIGJpbmFyeQogIyBmaWxlIHNob3VsZCBnZXQgLWtiLgogc3ViIGtvcHRzX2Zyb21fcGF0aAogewotCW15ICgkcGF0aCkgPSBAXzsKKyAgICBteSAoJHBhdGgsICRzcmNUeXBlLCAkbmFtZSkgPSBAXzsKIAotCSMgT25jZSBpdCBleGlzdHMsIHRoZSBnaXQgYXR0cmlidXRlcyBzeXN0ZW0gc2hvdWxkIGJlIHVzZWQgdG8gbG9vayB1cAotCSMgd2hhdCBhdHRyaWJ1dGVzIGFwcGx5IHRvIHRoaXMgcGF0aC4KLQotCSMgVW50aWwgdGhlbiwgdGFrZSB0aGUgc2V0dGluZyBmcm9tIHRoZSBjb25maWcgZmlsZQotICAgIHVubGVzcyAoIGRlZmluZWQgKCAkY2ZnLT57Z2l0Y3ZzfXthbGxiaW5hcnl9ICkgYW5kICRjZmctPntnaXRjdnN9e2FsbGJpbmFyeX0gPX4gL15ccyooMXx0cnVlfHllcylccyokL2kgKQorICAgIGlmICggZGVmaW5lZCAoICRjZmctPntnaXRjdnN9e3VzZWNybGZhdHRyfSApIGFuZAorICAgICAgICAgJGNmZy0+e2dpdGN2c317dXNlY3JsZmF0dHJ9ID1+IC9ccyooMXx0cnVlfHllcylccyokL2kgKQogICAgIHsKLQkJIyBSZXR1cm4gIiIgdG8gZ2l2ZSBubyBzcGVjaWFsIHRyZWF0bWVudCB0byBhbnkgcGF0aAotCQlyZXR1cm4gIiI7Ci0gICAgfSBlbHNlIHsKLQkJIyBBbHRlcm5hdGl2ZWx5LCB0byBoYXZlIGFsbCBmaWxlcyB0cmVhdGVkIGFzIGlmIHRoZXkgYXJlIGJpbmFyeSAod2hpY2gKLQkJIyBpcyBtb3JlIGxpa2UgZ2l0IGl0c2VsZiksIGFsd2F5cyByZXR1cm4gdGhlICIta2IiIG9wdGlvbgotCQlyZXR1cm4gIi1rYiI7CisgICAgICAgIG15ICgkdmFsKSA9IGNoZWNrX2F0dHIoICJjcmxmIiwgJHBhdGggKTsKKyAgICAgICAgaWYgKCAkdmFsIGVxICJzZXQiICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICIiOworICAgICAgICB9CisgICAgICAgIGVsc2lmICggJHZhbCBlcSAidW5zZXQiICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICIta2IiCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAkbG9nLT5pbmZvKCJVbnJlY29nbml6ZWQgY2hlY2tfYXR0ciBjcmxmICRwYXRoIDogJHZhbCIpOworICAgICAgICB9CiAgICAgfQorCisgICAgaWYgKCBkZWZpbmVkICggJGNmZy0+e2dpdGN2c317YWxsYmluYXJ5fSApICkKKyAgICB7CisgICAgICAgIGlmKCAoJGNmZy0+e2dpdGN2c317YWxsYmluYXJ5fSA9fiAvXlxzKigxfHRydWV8eWVzKVxzKiQvaSkgKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gIi1rYiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoICgkY2ZnLT57Z2l0Y3ZzfXthbGxiaW5hcnl9ID1+IC9eXHMqZ3Vlc3NccyokL2kpICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoICRzcmNUeXBlIGVxICJzaGExT3ItayIgJiYKKyAgICAgICAgICAgICAgICAhZGVmaW5lZCgkbmFtZSkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG15ICgkcmV0KT0kc3RhdGUtPntlbnRyaWVzfXskcGF0aH17b3B0aW9uc307CisgICAgICAgICAgICAgICAgaWYoICFkZWZpbmVkKCRyZXQpICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICRyZXQ9JHN0YXRlLT57b3B0fXtrfTsKKyAgICAgICAgICAgICAgICAgICAgaWYoZGVmaW5lZCgkcmV0KSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgJHJldD0iLWskcmV0IjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICRyZXQ9IiI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYoICEgKCRyZXQ9fi9eKHwta2J8LWtrdnwta2t2bHwta2t8LWtvfC1rdikkLykgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkUgQmFkIC1rIG9wdGlvblxuIjsKKyAgICAgICAgICAgICAgICAgICAgJGxvZy0+d2FybigiQmFkIC1rIG9wdGlvbjogJHJldCIpOworICAgICAgICAgICAgICAgICAgICBkaWUgIkVycm9yOiBCYWQgLWsgb3B0aW9uOiAkcmV0XG4iOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiAkcmV0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCBpc19iaW5hcnkoJHNyY1R5cGUsJG5hbWUpICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICRsb2ctPmRlYnVnKCIuLi4gYXMgYmluYXJ5Iik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiLWtiIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgJGxvZy0+ZGVidWcoIi4uLiBhcyB0ZXh0Iik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgICMgUmV0dXJuICIiIHRvIGdpdmUgbm8gc3BlY2lhbCB0cmVhdG1lbnQgdG8gYW55IHBhdGgKKyAgICByZXR1cm4gIiI7Cit9CisKK3N1YiBjaGVja19hdHRyCit7CisgICAgbXkgKCRhdHRyLCRwYXRoKSA9IEBfOworICAgIGVuc3VyZVdvcmtUcmVlKCk7CisgICAgaWYgKCBvcGVuIG15ICRmaCwgJy18JywgImdpdCIsICJjaGVjay1hdHRyIiwgJGF0dHIsICItLSIsICRwYXRoICkKKyAgICB7CisgICAgICAgIG15ICR2YWwgPSA8JGZoPjsKKyAgICAgICAgY2xvc2UgJGZoOworICAgICAgICAkdmFsID1+IHMvLio6IChbXjpcclxuXSopXHMqJC8kMS87CisgICAgICAgIHJldHVybiAkdmFsOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gdW5kZWY7CisgICAgfQorfQorCisjIFRoaXMgc2hvdWxkIGhhdmUgdGhlIHNhbWUgaGV1cmlzdGljcyBhcyBjb252ZXJ0LmM6aXNfYmluYXJ5KCkgYW5kIHJlbGF0ZWQuCisjIE5vdGUgdGhhdCB0aGUgYmFyZSBDUiB0ZXN0IGlzIGRvbmUgYnkgY2FsbGVycyBpbiBjb252ZXJ0LmMuCitzdWIgaXNfYmluYXJ5Cit7CisgICAgbXkgKCRzcmNUeXBlLCRuYW1lKSA9IEBfOworICAgICRsb2ctPmRlYnVnKCJpc19iaW5hcnkoJHNyY1R5cGUsJG5hbWUpIik7CisKKyAgICAjIE1pbmltaXplIGFtb3VudCBvZiBpbnRlcnByZXRlZCBjb2RlIHJ1biBpbiB0aGUgaW5uZXIgcGVyLWNoYXJhY3RlcgorICAgICMgbG9vcCBmb3IgbGFyZ2UgZmlsZXMsIGJ5IHRvdGFsbGluZyBlYWNoIGNoYXJhY3RlciB2YWx1ZSBhbmQKKyAgICAjIHRoZW4gYW5hbHl6aW5nIHRoZSB0b3RhbHMuCisgICAgbXkgQGNvdW50czsKKyAgICBteSAkaTsKKyAgICBmb3IoJGk9MDskaTwyNTY7JGkrKykKKyAgICB7CisgICAgICAgICRjb3VudHNbJGldPTA7CisgICAgfQorCisgICAgbXkgJGZoID0gb3Blbl9ibG9iX29yX2RpZSgkc3JjVHlwZSwkbmFtZSk7CisgICAgbXkgJGxpbmU7CisgICAgd2hpbGUoIGRlZmluZWQoJGxpbmU9PCRmaD4pICkKKyAgICB7CisgICAgICAgICMgQW55ICdcMCcgYW5kIGJhcmUgQ1IgYXJlIGNvbnNpZGVyZWQgYmluYXJ5LgorICAgICAgICBpZiggJGxpbmUgPX4gL1wwfChcclteXG5dKS8gKQorICAgICAgICB7CisgICAgICAgICAgICBjbG9zZSgkZmgpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKworICAgICAgICAjIENvdW50IHVwIGVhY2ggY2hhcmFjdGVyIGluIHRoZSBsaW5lOgorICAgICAgICBteSAkbGVuPWxlbmd0aCgkbGluZSk7CisgICAgICAgIGZvcigkaT0wOyRpPCRsZW47JGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgJGNvdW50c1tvcmQoc3Vic3RyKCRsaW5lLCRpLDEpKV0rKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBjbG9zZSAkZmg7CisKKyAgICAjIERvbid0IGNvdW50IENSIGFuZCBMRiBhcyBlaXRoZXIgcHJpbnRhYmxlL25vbnByaW50YWJsZQorICAgICRjb3VudHNbb3JkKCJcbiIpXT0wOworICAgICRjb3VudHNbb3JkKCJcciIpXT0wOworCisgICAgIyBDYXRlZ29yaXplIGluZGl2aWR1YWwgY2hhcmFjdGVyIGNvdW50IGludG8gcHJpbnRhYmxlIGFuZCBub25wcmludGFibGU6CisgICAgbXkgJHByaW50YWJsZT0wOworICAgIG15ICRub25wcmludGFibGU9MDsKKyAgICBmb3IoJGk9MDskaTwyNTY7JGkrKykKKyAgICB7CisgICAgICAgIGlmKCAkaSA8IDMyICYmCisgICAgICAgICAgICAkaSAhPSBvcmQoIlxiIikgJiYKKyAgICAgICAgICAgICRpICE9IG9yZCgiXHQiKSAmJgorICAgICAgICAgICAgJGkgIT0gMDMzICYmICAgICAgICMgRVNDCisgICAgICAgICAgICAkaSAhPSAwMTQgKSAgICAgICAgIyBGRgorICAgICAgICB7CisgICAgICAgICAgICAkbm9ucHJpbnRhYmxlKz0kY291bnRzWyRpXTsKKyAgICAgICAgfQorICAgICAgICBlbHNpZiggJGk9PTEyNyApICAjIERFTAorICAgICAgICB7CisgICAgICAgICAgICAkbm9ucHJpbnRhYmxlKz0kY291bnRzWyRpXTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgICRwcmludGFibGUrPSRjb3VudHNbJGldOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuICgkcHJpbnRhYmxlID4+IDcpIDwgJG5vbnByaW50YWJsZTsKK30KKworIyBSZXR1cm5zIG9wZW4gZmlsZSBoYW5kbGUuICBQb3NzaWJsZSBpbnZvY2F0aW9uczoKKyMgIC0gb3Blbl9ibG9iX29yX2RpZSgiZmlsZSIsJGZpbGVuYW1lKTsKKyMgIC0gb3Blbl9ibG9iX29yX2RpZSgic2hhMSIsJGZpbGVoYXNoKTsKK3N1YiBvcGVuX2Jsb2Jfb3JfZGllCit7CisgICAgbXkgKCRzcmNUeXBlLCRuYW1lKSA9IEBfOworICAgIG15ICgkZmgpOworICAgIGlmKCAkc3JjVHlwZSBlcSAiZmlsZSIgKQorICAgIHsKKyAgICAgICAgaWYoICFvcGVuICRmaCwiPCIsJG5hbWUgKQorICAgICAgICB7CisgICAgICAgICAgICAkbG9nLT53YXJuKCJVbmFibGUgdG8gb3BlbiBmaWxlICRuYW1lOiAkISIpOworICAgICAgICAgICAgZGllICJVbmFibGUgdG8gb3BlbiBmaWxlICRuYW1lOiAkIVxuIjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNpZiggJHNyY1R5cGUgZXEgInNoYTEiIHx8ICRzcmNUeXBlIGVxICJzaGExT3ItayIgKQorICAgIHsKKyAgICAgICAgdW5sZXNzICggZGVmaW5lZCAoICRuYW1lICkgYW5kICRuYW1lID1+IC9eW2EtekEtWjAtOV17NDB9JC8gKQorICAgICAgICB7CisgICAgICAgICAgICAkbG9nLT53YXJuKCJOZWVkIGZpbGVoYXNoIik7CisgICAgICAgICAgICBkaWUgIk5lZWQgZmlsZWhhc2hcbiI7CisgICAgICAgIH0KKworICAgICAgICBteSAkdHlwZSA9IGBnaXQgY2F0LWZpbGUgLXQgJG5hbWVgOworICAgICAgICBjaG9tcCAkdHlwZTsKKworICAgICAgICB1bmxlc3MgKCBkZWZpbmVkICggJHR5cGUgKSBhbmQgJHR5cGUgZXEgImJsb2IiICkKKyAgICAgICAgeworICAgICAgICAgICAgJGxvZy0+d2FybigiSW52YWxpZCB0eXBlICckdHlwZScgZm9yICckbmFtZSciKTsKKyAgICAgICAgICAgIGRpZSAoICJJbnZhbGlkIHR5cGUgJyR0eXBlJyAoZXhwZWN0ZWQgJ2Jsb2InKSIgKQorICAgICAgICB9CisKKyAgICAgICAgbXkgJHNpemUgPSBgZ2l0IGNhdC1maWxlIC1zICRuYW1lYDsKKyAgICAgICAgY2hvbXAgJHNpemU7CisKKyAgICAgICAgJGxvZy0+ZGVidWcoIm9wZW5fYmxvYl9vcl9kaWUoJG5hbWUpIHNpemU9JHNpemUsIHR5cGU9JHR5cGUiKTsKKworICAgICAgICB1bmxlc3MoIG9wZW4gJGZoLCAnLXwnLCAiZ2l0IiwgImNhdC1maWxlIiwgImJsb2IiLCAkbmFtZSApCisgICAgICAgIHsKKyAgICAgICAgICAgICRsb2ctPndhcm4oIlVuYWJsZSB0byBvcGVuIHNoYTEgJG5hbWUiKTsKKyAgICAgICAgICAgIGRpZSAiVW5hYmxlIHRvIG9wZW4gc2hhMSAkbmFtZVxuIjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAkbG9nLT53YXJuKCJVbmtub3duIHR5cGUgb2YgYmxvYiBzb3VyY2U6ICRzcmNUeXBlIik7CisgICAgICAgIGRpZSAiVW5rbm93biB0eXBlIG9mIGJsb2Igc291cmNlOiAkc3JjVHlwZVxuIjsKKyAgICB9CisgICAgcmV0dXJuICRmaDsKIH0KIAogIyBHZW5lcmF0ZSBhIENWUyBhdXRob3IgbmFtZSBmcm9tIEdpdCBhdXRob3IgaW5mb3JtYXRpb24sIGJ5IHRha2luZwpkaWZmIC0tZ2l0IGEvZ2l0LWZpbHRlci1icmFuY2guc2ggYi9naXQtZmlsdGVyLWJyYW5jaC5zaAppbmRleCBkODQ2Y2Q5Li5kMDRjMzQ2IDEwMDc1NQotLS0gYS9naXQtZmlsdGVyLWJyYW5jaC5zaAorKysgYi9naXQtZmlsdGVyLWJyYW5jaC5zaApAQCAtNDA2LDggKzQwNiwyMiBAQAogCQllY2hvICIkcmVmIC0+ICRuZXdfcmVmICgkc2hhMSAtPiAkbmV3X3NoYTEpIgogCiAJCWlmIFsgIiR0eXBlIiA9ICJ0YWciIF07IHRoZW4KLQkJCSMgV2FybiB0aGF0IHdlIGFyZSBub3QgcmV3cml0aW5nIHRoZSB0YWcgb2JqZWN0IGl0c2VsZi4KLQkJCXdhcm4gInVucmVmZXJlbmNpbmcgdGFnIG9iamVjdCAkc2hhMXQiCisJCQluZXdfc2hhMT0kKGdpdCBjYXQtZmlsZSB0YWcgIiRyZWYiIHwKKwkJCQlzZWQgLW4gXAorCQkJCSAgICAtZSAiMSwvXiQveworCQkJCQkgIHMvXm9iamVjdCAuKi9vYmplY3QgJG5ld19zaGExLworCQkJCQkgIHMvXnR5cGUgLiovdHlwZSBjb21taXQvCisJCQkJCSAgcy9edGFnIC4qL3RhZyAkbmV3X3JlZi8KKwkJCQkJfSIgXAorCQkJCSAgICAtZSAnL14tLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLS9xJyBcCisJCQkJICAgIC1lICdwJyB8CisJCQkJZ2l0IG1rdGFnKSB8fAorCQkJCWRpZSAiQ291bGQgbm90IGNyZWF0ZSBuZXcgdGFnIG9iamVjdCBmb3IgJHJlZiIKKwkJCWlmIGdpdCBjYXQtZmlsZSB0YWcgIiRyZWYiIHwgXAorCQkJICAgZ3JlcCAnXi0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tJyA+L2Rldi9udWxsIDI+JjEKKwkJCXRoZW4KKwkJCQl3YXJuICJncGcgc2lnbmF0dXJlIHN0cmlwcGVkIGZyb20gdGFnIG9iamVjdCAkc2hhMXQiCisJCQlmaQogCQlmaQogCiAJCWdpdCB1cGRhdGUtcmVmICJyZWZzL3RhZ3MvJG5ld19yZWYiICIkbmV3X3NoYTEiIHx8CkBAIC00MjEsMTEgKzQzNSwxNyBAQAogdHJhcCAtIDAKIAogdW5zZXQgR0lUX0RJUiBHSVRfV09SS19UUkVFIEdJVF9JTkRFWF9GSUxFCi10ZXN0IC16ICIkT1JJR19HSVRfRElSIiB8fCBHSVRfRElSPSIkT1JJR19HSVRfRElSIiAmJiBleHBvcnQgR0lUX0RJUgotdGVzdCAteiAiJE9SSUdfR0lUX1dPUktfVFJFRSIgfHwgR0lUX1dPUktfVFJFRT0iJE9SSUdfR0lUX1dPUktfVFJFRSIgJiYKK3Rlc3QgLXogIiRPUklHX0dJVF9ESVIiIHx8IHsKKwlHSVRfRElSPSIkT1JJR19HSVRfRElSIiAmJiBleHBvcnQgR0lUX0RJUgorfQordGVzdCAteiAiJE9SSUdfR0lUX1dPUktfVFJFRSIgfHwgeworCUdJVF9XT1JLX1RSRUU9IiRPUklHX0dJVF9XT1JLX1RSRUUiICYmCiAJZXhwb3J0IEdJVF9XT1JLX1RSRUUKLXRlc3QgLXogIiRPUklHX0dJVF9JTkRFWF9GSUxFIiB8fCBHSVRfSU5ERVhfRklMRT0iJE9SSUdfR0lUX0lOREVYX0ZJTEUiICYmCit9Cit0ZXN0IC16ICIkT1JJR19HSVRfSU5ERVhfRklMRSIgfHwgeworCUdJVF9JTkRFWF9GSUxFPSIkT1JJR19HSVRfSU5ERVhfRklMRSIgJiYKIAlleHBvcnQgR0lUX0lOREVYX0ZJTEUKK30KIGdpdCByZWFkLXRyZWUgLXUgLW0gSEVBRAogCiBleGl0ICRyZXQKZGlmZiAtLWdpdCBhL2dpdC1ndWkvZ2l0LWd1aS5zaCBiL2dpdC1ndWkvZ2l0LWd1aS5zaAppbmRleCA3YzI1YmI5Li5lNmU4ODkwIDEwMDc1NQotLS0gYS9naXQtZ3VpL2dpdC1ndWkuc2gKKysrIGIvZ2l0LWd1aS9naXQtZ3VpLnNoCkBAIC0xMjIsNiArMTIyLDE0IEBACiBzZXQgX2lzY3lnd2luIHt9CiBzZXQgX3NlYXJjaF9wYXRoIHt9CiAKK3NldCBfdHJhY2UgW2xzZWFyY2ggLWV4YWN0ICRhcmd2IC0tdHJhY2VdCitpZiB7JF90cmFjZSA+PSAwfSB7CisJc2V0IGFyZ3YgW2xyZXBsYWNlICRhcmd2ICRfdHJhY2UgJF90cmFjZV0KKwlzZXQgX3RyYWNlIDEKK30gZWxzZSB7CisJc2V0IF90cmFjZSAwCit9CisKIHByb2MgYXBwbmFtZSB7fSB7CiAJZ2xvYmFsIF9hcHBuYW1lCiAJcmV0dXJuICRfYXBwbmFtZQpAQCAtMjQ1LDYgKzI1MywyMSBAQAogIyMKICMjIGhhbmR5IHV0aWxzCiAKK3Byb2MgX3RyYWNlX2V4ZWMge2NtZH0geworCWlmIHshJDo6X3RyYWNlfSByZXR1cm4KKwlzZXQgZCB7fQorCWZvcmVhY2ggdiAkY21kIHsKKwkJaWYgeyRkIG5lIHt9fSB7CisJCQlhcHBlbmQgZCB7IH0KKwkJfQorCQlpZiB7W3JlZ2V4cCB7WyBcdFxyXG4nIiQ/Kl19ICR2XX0geworCQkJc2V0IHYgW3NxICR2XQorCQl9CisJCWFwcGVuZCBkICR2CisJfQorCXB1dHMgc3RkZXJyICRkCit9CisKIHByb2MgX2dpdF9jbWQge25hbWV9IHsKIAlnbG9iYWwgX2dpdF9jbWRfcGF0aAogCkBAIC0zMzksNyArMzYyLDcgQEAKIH0KIAogcHJvYyBnaXQge2FyZ3N9IHsKLQlzZXQgb3B0IFtsaXN0IGV4ZWNdCisJc2V0IG9wdCBbbGlzdF0KIAogCXdoaWxlIHsxfSB7CiAJCXN3aXRjaCAtLSBbbGluZGV4ICRhcmdzIDBdIHsKQEAgLTM1OSwxMiArMzgyLDE4IEBACiAJc2V0IGNtZHAgW19naXRfY21kIFtsaW5kZXggJGFyZ3MgMF1dCiAJc2V0IGFyZ3MgW2xyYW5nZSAkYXJncyAxIGVuZF0KIAotCXJldHVybiBbZXZhbCAkb3B0ICRjbWRwICRhcmdzXQorCV90cmFjZV9leGVjIFtjb25jYXQgJG9wdCAkY21kcCAkYXJnc10KKwlzZXQgcmVzdWx0IFtldmFsIGV4ZWMgJG9wdCAkY21kcCAkYXJnc10KKwlpZiB7JDo6X3RyYWNlfSB7CisJCXB1dHMgc3RkZXJyICI8ICRyZXN1bHQiCisJfQorCXJldHVybiAkcmVzdWx0CiB9CiAKIHByb2MgX29wZW5fc3Rkb3V0X3N0ZGVyciB7Y21kfSB7CisJX3RyYWNlX2V4ZWMgJGNtZAogCWlmIHtbY2F0Y2ggewotCQkJc2V0IGZkIFtvcGVuICRjbWQgcl0KKwkJCXNldCBmZCBbb3BlbiBbY29uY2F0IFtsaXN0IHwgXSAkY21kXSByXQogCQl9IGVycl19IHsKIAkJaWYgeyAgIFtsaW5kZXggJGNtZCBlbmRdIGVxIHsyPkAxfQogCQkgICAgJiYgJGVyciBlcSB7Y2FuIG5vdCBmaW5kIGNoYW5uZWwgbmFtZWQgIjEifQpAQCAtMzc1LDYgKzQwNCw3IEBACiAJCQkjIHRvIHRyeSB0byBzdGFydCBpdCBhIHNlY29uZCB0aW1lLgogCQkJIwogCQkJc2V0IGZkIFtvcGVuIFtjb25jYXQgXAorCQkJCVtsaXN0IHwgXSBcCiAJCQkJW2xyYW5nZSAkY21kIDAgZW5kLTFdIFwKIAkJCQlbbGlzdCB8JiBjYXRdIFwKIAkJCQldIHJdCkBAIC0zODcsNyArNDE3LDcgQEAKIH0KIAogcHJvYyBnaXRfcmVhZCB7YXJnc30gewotCXNldCBvcHQgW2xpc3QgfF0KKwlzZXQgb3B0IFtsaXN0XQogCiAJd2hpbGUgezF9IHsKIAkJc3dpdGNoIC0tIFtsaW5kZXggJGFyZ3MgMF0gewpAQCAtNDE1LDcgKzQ0NSw3IEBACiB9CiAKIHByb2MgZ2l0X3dyaXRlIHthcmdzfSB7Ci0Jc2V0IG9wdCBbbGlzdCB8XQorCXNldCBvcHQgW2xpc3RdCiAKIAl3aGlsZSB7MX0gewogCQlzd2l0Y2ggLS0gW2xpbmRleCAkYXJncyAwXSB7CkBAIC00MzUsNyArNDY1LDggQEAKIAlzZXQgY21kcCBbX2dpdF9jbWQgW2xpbmRleCAkYXJncyAwXV0KIAlzZXQgYXJncyBbbHJhbmdlICRhcmdzIDEgZW5kXQogCi0JcmV0dXJuIFtvcGVuIFtjb25jYXQgJG9wdCAkY21kcCAkYXJnc10gd10KKwlfdHJhY2VfZXhlYyBbY29uY2F0ICRvcHQgJGNtZHAgJGFyZ3NdCisJcmV0dXJuIFtvcGVuIFtjb25jYXQgW2xpc3QgfCBdICRvcHQgJGNtZHAgJGFyZ3NdIHddCiB9CiAKIHByb2MgZ2l0aG9va19yZWFkIHtob29rX25hbWUgYXJnc30gewpAQCAtNDU1LDEyICs0ODYsMTIgQEAKIAkJfQogCiAJCXNldCBzY3Ige2lmIHRlc3QgLXggIiQxIjt0aGVuIGV4ZWMgIiRAIjtmaX0KLQkJc2V0IHNoX2MgW2xpc3QgfCAkaW50ZXJwIC1jICRzY3IgJGludGVycCAkcGNob29rXQorCQlzZXQgc2hfYyBbbGlzdCAkaW50ZXJwIC1jICRzY3IgJGludGVycCAkcGNob29rXQogCQlyZXR1cm4gW19vcGVuX3N0ZG91dF9zdGRlcnIgW2NvbmNhdCAkc2hfYyAkYXJnc11dCiAJfQogCiAJaWYge1tmaWxlIGV4ZWN1dGFibGUgJHBjaG9va119IHsKLQkJcmV0dXJuIFtfb3Blbl9zdGRvdXRfc3RkZXJyIFtjb25jYXQgW2xpc3QgfCAkcGNob29rXSAkYXJnc11dCisJCXJldHVybiBbX29wZW5fc3Rkb3V0X3N0ZGVyciBbY29uY2F0IFtsaXN0ICRwY2hvb2tdICRhcmdzXV0KIAl9CiAKIAlyZXR1cm4ge30KQEAgLTYwMSw2ICs2MzIsNyBAQAogCX0KIH0KIAorc2V0IGRlZmF1bHRfY29uZmlnKGJyYW5jaC5hdXRvc2V0dXBtZXJnZSkgdHJ1ZQogc2V0IGRlZmF1bHRfY29uZmlnKG1lcmdlLmRpZmZzdGF0KSB0cnVlCiBzZXQgZGVmYXVsdF9jb25maWcobWVyZ2Uuc3VtbWFyeSkgZmFsc2UKIHNldCBkZWZhdWx0X2NvbmZpZyhtZXJnZS52ZXJib3NpdHkpIDIKQEAgLTEwOTUsMjcgKzExMjcsMTggQEAKIH0KIAogaWYge1tpc19DeWd3aW5dfSB7Ci0Jc2V0IGlzX2dpdF9pbmZvX2xpbmsge30KIAlzZXQgaXNfZ2l0X2luZm9fZXhjbHVkZSB7fQogCXByb2MgaGF2ZV9pbmZvX2V4Y2x1ZGUge30gewotCQlnbG9iYWwgaXNfZ2l0X2luZm9fbGluayBpc19naXRfaW5mb19leGNsdWRlCisJCWdsb2JhbCBpc19naXRfaW5mb19leGNsdWRlCiAKLQkJaWYgeyRpc19naXRfaW5mb19saW5rIGVxIHt9fSB7Ci0JCQlzZXQgaXNfZ2l0X2luZm9fbGluayBbZmlsZSBpc2ZpbGUgW2dpdGRpciBpbmZvLmxua11dCi0JCX0KLQotCQlpZiB7JGlzX2dpdF9pbmZvX2xpbmt9IHsKLQkJCWlmIHskaXNfZ2l0X2luZm9fZXhjbHVkZSBlcSB7fX0gewotCQkJCWlmIHtbY2F0Y2gge2V4ZWMgdGVzdCAtZiBbZ2l0ZGlyIGluZm8gZXhjbHVkZV19XX0gewotCQkJCQlzZXQgaXNfZ2l0X2luZm9fZXhjbHVkZSAwCi0JCQkJfSBlbHNlIHsKLQkJCQkJc2V0IGlzX2dpdF9pbmZvX2V4Y2x1ZGUgMQotCQkJCX0KKwkJaWYgeyRpc19naXRfaW5mb19leGNsdWRlIGVxIHt9fSB7CisJCQlpZiB7W2NhdGNoIHtleGVjIHRlc3QgLWYgW2dpdGRpciBpbmZvIGV4Y2x1ZGVdfV19IHsKKwkJCQlzZXQgaXNfZ2l0X2luZm9fZXhjbHVkZSAwCisJCQl9IGVsc2UgeworCQkJCXNldCBpc19naXRfaW5mb19leGNsdWRlIDEKIAkJCX0KLQkJCXJldHVybiAkaXNfZ2l0X2luZm9fZXhjbHVkZQotCQl9IGVsc2UgewotCQkJcmV0dXJuIFtmaWxlIHJlYWRhYmxlIFtnaXRkaXIgaW5mbyBleGNsdWRlXV0KIAkJfQorCQlyZXR1cm4gJGlzX2dpdF9pbmZvX2V4Y2x1ZGUKIAl9CiB9IGVsc2UgewogCXByb2MgaGF2ZV9pbmZvX2V4Y2x1ZGUge30gewpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9saWIvYnJhbmNoX2NyZWF0ZS50Y2wgYi9naXQtZ3VpL2xpYi9icmFuY2hfY3JlYXRlLnRjbAppbmRleCA1M2RmYjRjLi4zODE3NzcxIDEwMDY0NAotLS0gYS9naXQtZ3VpL2xpYi9icmFuY2hfY3JlYXRlLnRjbAorKysgYi9naXQtZ3VpL2xpYi9icmFuY2hfY3JlYXRlLnRjbApAQCAtMTgzLDYgKzE4Myw5IEBACiAJaWYgeyRzcGVjIG5lIHt9ICYmICRvcHRfZmV0Y2h9IHsKIAkJJGNvIGVuYWJsZV9mZXRjaCAkc3BlYwogCX0KKwlpZiB7JHNwZWMgbmUge319IHsKKwkJJGNvIHJlbW90ZV9zb3VyY2UgJHNwZWMKKwl9CiAKIAlpZiB7WyRjbyBydW5dfSB7CiAJCWRlc3Ryb3kgJHcKZGlmZiAtLWdpdCBhL2dpdC1ndWkvbGliL2JyYW5jaF9kZWxldGUudGNsIGIvZ2l0LWd1aS9saWIvYnJhbmNoX2RlbGV0ZS50Y2wKaW5kZXggODZjNGY3My4uZWYxOTMwYiAxMDA2NDQKLS0tIGEvZ2l0LWd1aS9saWIvYnJhbmNoX2RlbGV0ZS50Y2wKKysrIGIvZ2l0LWd1aS9saWIvYnJhbmNoX2RlbGV0ZS50Y2wKQEAgLTEyNyw3ICsxMjcsNyBAQAogCWZvcmVhY2ggaSAkdG9fZGVsZXRlIHsKIAkJc2V0IGIgW2xpbmRleCAkaSAwXQogCQlzZXQgbyBbbGluZGV4ICRpIDFdCi0JCWlmIHtbY2F0Y2gge2dpdCB1cGRhdGUtcmVmIC1kICJyZWZzL2hlYWRzLyRiIiAkb30gZXJyXX0geworCQlpZiB7W2NhdGNoIHtnaXQgYnJhbmNoIC1EICRifSBlcnJdfSB7CiAJCQlhcHBlbmQgZmFpbGVkICIgLSAkYjogJGVyclxuIgogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9saWIvY2hlY2tvdXRfb3AudGNsIGIvZ2l0LWd1aS9saWIvY2hlY2tvdXRfb3AudGNsCmluZGV4IDZlMTQxMTcuLmNhY2E4ODggMTAwNjQ0Ci0tLSBhL2dpdC1ndWkvbGliL2NoZWNrb3V0X29wLnRjbAorKysgYi9naXQtZ3VpL2xpYi9jaGVja291dF9vcC50Y2wKQEAgLTE2LDYgKzE2LDcgQEAKIGZpZWxkIGZldGNoX3NwZWMgICB7fTsgIyByZWZldGNoIHRyYWNraW5nIGJyYW5jaCBpZiB1c2VkPwogZmllbGQgY2hlY2tvdXQgICAgICAxOyAjIGFjdHVhbGx5IGNoZWNrb3V0IHRoZSBicmFuY2g/CiBmaWVsZCBjcmVhdGUgICAgICAgIDA7ICMgY3JlYXRlIHRoZSBicmFuY2ggaWYgaXQgZG9lc24ndCBleGlzdD8KK2ZpZWxkIHJlbW90ZV9zb3VyY2Uge307ICMgc2FtZSBhcyBmZXRjaF9zcGVjLCB0byBzZXR1cCB0cmFja2luZwogCiBmaWVsZCByZXNldF9vayAgICAgIDA7ICMgZGlkIHRoZSB1c2VyIGFncmVlIHRvIHJlc2V0PwogZmllbGQgZmV0Y2hfb2sgICAgICAwOyAjIGRpZCB0aGUgZmV0Y2ggc3VjY2VlZD8KQEAgLTQ0LDYgKzQ1LDEwIEBACiAJc2V0IGZldGNoX3NwZWMgJHNwZWMKIH0KIAorbWV0aG9kIHJlbW90ZV9zb3VyY2Uge3NwZWN9IHsKKwlzZXQgcmVtb3RlX3NvdXJjZSAkc3BlYworfQorCiBtZXRob2QgZW5hYmxlX2NoZWNrb3V0IHtjb30gewogCXNldCBjaGVja291dCAkY28KIH0KQEAgLTE0NSw3ICsxNTAsNyBAQAogfQogCiBtZXRob2QgX3VwZGF0ZV9yZWYge30gewotCWdsb2JhbCBudWxsX3NoYTEgY3VycmVudF9icmFuY2gKKwlnbG9iYWwgbnVsbF9zaGExIGN1cnJlbnRfYnJhbmNoIHJlcG9fY29uZmlnCiAKIAlzZXQgcmVmICRuZXdfcmVmCiAJc2V0IG5ldyAkbmV3X2hhc2gKQEAgLTE3Miw2ICsxNzcsMjMgQEAKIAogCQlzZXQgcmVmbG9nX21zZyAiYnJhbmNoOiBDcmVhdGVkIGZyb20gJG5ld19leHByIgogCQlzZXQgY3VyICRudWxsX3NoYTEKKworCQlpZiB7KCRyZXBvX2NvbmZpZyhicmFuY2guYXV0b3NldHVwbWVyZ2UpIGVxIHt0cnVlfQorCQkJfHwgJHJlcG9fY29uZmlnKGJyYW5jaC5hdXRvc2V0dXBtZXJnZSkgZXEge2Fsd2F5c30pCisJCQkmJiAkcmVtb3RlX3NvdXJjZSBuZSB7fQorCQkJJiYgInJlZnMvaGVhZHMvJG5ld2JyYW5jaCIgZXEgJHJlZn0geworCisJCQlzZXQgY19yZW1vdGUgW2xpbmRleCAkcmVtb3RlX3NvdXJjZSAxXQorCQkJc2V0IGNfbWVyZ2UgW2xpbmRleCAkcmVtb3RlX3NvdXJjZSAyXQorCQkJaWYge1tjYXRjaCB7CisJCQkJCWdpdCBjb25maWcgYnJhbmNoLiRuZXdicmFuY2gucmVtb3RlICRjX3JlbW90ZQorCQkJCQlnaXQgY29uZmlnIGJyYW5jaC4kbmV3YnJhbmNoLm1lcmdlICAkY19tZXJnZQorCQkJCX0gZXJyXX0geworCQkJCV9lcnJvciAkdGhpcyBbc3RyY2F0IFwKKwkJCQlbbWMgIkZhaWxlZCB0byBjb25maWd1cmUgc2ltcGxpZmllZCBnaXQtcHVsbCBmb3IgJyVzJy4iICRuZXdicmFuY2hdIFwKKwkJCQkiXG5cbiRlcnIiXQorCQkJfQorCQl9CiAJfSBlbHNlaWYgeyRjcmVhdGUgJiYgJG1lcmdlX3R5cGUgZXEge25vbmV9fSB7CiAJCSMgV2Ugd2VyZSB0b2xkIHRvIGNyZWF0ZSBpdCwgYnV0IG5vdCBkbyBhIG1lcmdlLgogCQkjIEJhZC4gIE5hbWUgc2hvdWxkbid0IGhhdmUgZXhpc3RlZC4KZGlmZiAtLWdpdCBhL2dpdC1ndWkvbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbCBiL2dpdC1ndWkvbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbAppbmRleCBhZTRhNGNkLi4zMTgwNzg2IDEwMDY0NAotLS0gYS9naXQtZ3VpL2xpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2wKKysrIGIvZ2l0LWd1aS9saWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsCkBAIC0zODgsOSArMzg4LDcgQEAKIAkJLWNvbW1hbmQgW2NiIF9uZXdfbG9jYWxfcGF0aF0KIAlzZXQgd19sb2NhbHBhdGggJHdfYm9keS53aGVyZS50CiAKLQlwYWNrICR3X2JvZHkud2hlcmUuYiAtc2lkZSByaWdodAotCXBhY2sgJHdfYm9keS53aGVyZS5sIC1zaWRlIGxlZnQKLQlwYWNrICR3X2JvZHkud2hlcmUudCAtZmlsbCB4CisJZ3JpZCAkd19ib2R5LndoZXJlLmwgJHdfYm9keS53aGVyZS50ICR3X2JvZHkud2hlcmUuYiAtc3RpY2t5IGV3CiAJcGFjayAkd19ib2R5LndoZXJlIC1maWxsIHgKIAogCXRyYWNlIGFkZCB2YXJpYWJsZSBAbG9jYWxfcGF0aCB3cml0ZSBbY2IgX3dyaXRlX2xvY2FsX3BhdGhdCkBAIC05ODcsOSArOTg1LDcgQEAKIAkJLXRleHQgW21jICJCcm93c2UiXSBcCiAJCS1jb21tYW5kIFtjYiBfb3Blbl9sb2NhbF9wYXRoXQogCi0JcGFjayAkd19ib2R5LndoZXJlLmIgLXNpZGUgcmlnaHQKLQlwYWNrICR3X2JvZHkud2hlcmUubCAtc2lkZSBsZWZ0Ci0JcGFjayAkd19ib2R5LndoZXJlLnQgLWZpbGwgeAorCWdyaWQgJHdfYm9keS53aGVyZS5sICR3X2JvZHkud2hlcmUudCAkd19ib2R5LndoZXJlLmIgLXN0aWNreSBldwogCXBhY2sgJHdfYm9keS53aGVyZSAtZmlsbCB4CiAKIAl0cmFjZSBhZGQgdmFyaWFibGUgQGxvY2FsX3BhdGggd3JpdGUgW2NiIF93cml0ZV9sb2NhbF9wYXRoXQpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9saWIvZGF0YWJhc2UudGNsIGIvZ2l0LWd1aS9saWIvZGF0YWJhc2UudGNsCmluZGV4IGQ2NmFhM2YuLmExOGFjOGIgMTAwNjQ0Ci0tLSBhL2dpdC1ndWkvbGliL2RhdGFiYXNlLnRjbAorKysgYi9naXQtZ3VpL2xpYi9kYXRhYmFzZS50Y2wKQEAgLTEwMiw4ICsxMDIsOCBAQAogCQkqXV0KIAogCWlmIHskb2JqZWN0c19jdXJyZW50ID49ICRvYmplY3RfbGltaXR9IHsKLQkJc2V0IG9iamVjdHNfY3VycmVudCBbZXhwciB7JG9iamVjdHNfY3VycmVudCAqIDI1Nn1dCi0JCXNldCBvYmplY3RfbGltaXQgICAgW2V4cHIgeyRvYmplY3RfbGltaXQgICAgKiAyNTZ9XQorCQlzZXQgb2JqZWN0c19jdXJyZW50IFtleHByIHskb2JqZWN0c19jdXJyZW50ICogMjUwfV0KKwkJc2V0IG9iamVjdF9saW1pdCAgICBbZXhwciB7JG9iamVjdF9saW1pdCAgICAqIDI1MH1dCiAJCWlmIHtbYXNrX3BvcHVwIFwKIAkJCVttYyAiVGhpcyByZXBvc2l0b3J5IGN1cnJlbnRseSBoYXMgYXBwcm94aW1hdGVseSAlaSBsb29zZSBvYmplY3RzLgogCmRpZmYgLS1naXQgYS9naXQtZ3VpL2xpYi9zcGVsbGNoZWNrLnRjbCBiL2dpdC1ndWkvbGliL3NwZWxsY2hlY2sudGNsCmluZGV4IDliZTc0ODYuLjc4ZjM0NGYgMTAwNjQ0Ci0tLSBhL2dpdC1ndWkvbGliL3NwZWxsY2hlY2sudGNsCisrKyBiL2dpdC1ndWkvbGliL3NwZWxsY2hlY2sudGNsCkBAIC04NCwxMyArODQsMTkgQEAKIAlyZWdleHAgXAogCQl7SW50ZXJuYXRpb25hbCBJc3BlbGwgVmVyc2lvbiAuKiBcKGJ1dCByZWFsbHkgKEFzcGVsbCAuKj8pXCkkfSBcCiAJCSRzX3ZlcnNpb24gX2p1bmsgc192ZXJzaW9uCisJcmVnZXhwIHteQXNwZWxsIChcZCkrXC4oXGQrKX0gJHNfdmVyc2lvbiBfanVuayBtYWpvciBtaW5vcgogCiAJcHV0cyAkcGlwZV9mZCAhICAgICAgICAgICAgIDsgIyBlbmFibGUgdGVyc2UgbW9kZQotCXB1dHMgJHBpcGVfZmQgeyQkY3IgbWFzdGVyfSA7ICMgZmV0Y2ggdGhlIGxhbmd1YWdlCi0JZmx1c2ggJHBpcGVfZmQKIAotCWdldHMgJHBpcGVfZmQgc19sYW5nCi0JcmVnZXhwIHtbL1xcXShbXi9cXF0rKVwuW15cLl0rJH0gJHNfbGFuZyBfIHNfbGFuZworCSMgZmV0Y2ggdGhlIGxhbmd1YWdlCisJaWYgeyRtYWpvciA+IDAgfHwgKCRtYWpvciA9PSAwICYmICRtaW5vciA+PSA2MCl9IHsKKwkJcHV0cyAkcGlwZV9mZCB7JCRjciBtYXN0ZXJ9CisJCWZsdXNoICRwaXBlX2ZkCisJCWdldHMgJHBpcGVfZmQgc19sYW5nCisJCXJlZ2V4cCB7Wy9cXF0oW14vXFxdKylcLlteXC5dKyR9ICRzX2xhbmcgXyBzX2xhbmcKKwl9IGVsc2UgeworCQlzZXQgc19sYW5nIHt9CisJfQogCiAJaWYgeyQ6OmRlZmF1bHRfY29uZmlnKGd1aS5zcGVsbGluZ2RpY3Rpb25hcnkpIGVxIHt9CiAJICYmIFtnZXRfY29uZmlnIGd1aS5zcGVsbGluZ2RpY3Rpb25hcnldIGVxIHt9fSB7CmRpZmYgLS1naXQgYS9naXQtZ3VpL3BvL2RlLnBvIGIvZ2l0LWd1aS9wby9kZS5wbwppbmRleCAwMjJiODE2Li5mMjA5NTVjIDEwMDY0NAotLS0gYS9naXQtZ3VpL3BvL2RlLnBvCisrKyBiL2dpdC1ndWkvcG8vZGUucG8KQEAgLTgsNyArOCw3IEBACiAiUHJvamVjdC1JZC1WZXJzaW9uOiBnaXQtZ3VpXG4iCiAiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgogIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA4LTAzLTE0IDA3OjE4KzAxMDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDA4LTAyLTE2IDIxOjUyKzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA4LTA1LTAxIDExOjUxKzAyMDBcbiIKICJMYXN0LVRyYW5zbGF0b3I6IENocmlzdGlhbiBTdGltbWluZyA8c3RpbW1pbmdAdHVoaC5kZT5cbiIKICJMYW5ndWFnZS1UZWFtOiBHZXJtYW5cbiIKICJNSU1FLVZlcnNpb246IDEuMFxuIgpAQCAtMTc1NCw5ICsxNzU0LDggQEAKIG1zZ3N0ciAiQW56YWhsIGRlciBLb250ZXh0emVpbGVuIGJlaW0gVmVyZ2xlaWNoIgogCiAjOiBsaWIvb3B0aW9uLnRjbDoxMjcKLSMsIGZ1enp5CiBtc2dpZCAiQ29tbWl0IE1lc3NhZ2UgVGV4dCBXaWR0aCIKLW1zZ3N0ciAiVmVyc2lvbnNiZXNjaHJlaWJ1bmc6IgorbXNnc3RyICJUZXh0YnJlaXRlIGRlciBWZXJzaW9uc2Jlc2NocmVpYnVuZyIKIAogIzogbGliL29wdGlvbi50Y2w6MTI4CiBtc2dpZCAiTmV3IEJyYW5jaCBOYW1lIFRlbXBsYXRlIgpAQCAtMTg5NSw0MCArMTg5NCwzNiBAQAogCiAjOiBsaWIvc3BlbGxjaGVjay50Y2w6NTcKIG1zZ2lkICJVbnN1cHBvcnRlZCBzcGVsbCBjaGVja2VyIgotbXNnc3RyICIiCittc2dzdHIgIlJlY2h0c2NocmVpYnByw7xmdW5nc3Byb2dyYW1tIG5pY2h0IHVudGVyc3TDvHR6dCIKIAogIzogbGliL3NwZWxsY2hlY2sudGNsOjY1Ci0jLCBmdXp6eQogbXNnaWQgIlNwZWxsIGNoZWNraW5nIGlzIHVuYXZhaWxhYmxlIgotbXNnc3RyICJSZWNodHNjaHJlaWJwcsO8ZnVuZyBmZWhsZ2VzY2hsYWdlbiIKK21zZ3N0ciAiUmVjaHRzY2hyZWlicHLDvGZ1bmcgbmljaHQgdmVyZsO8Z2JhciIKIAogIzogbGliL3NwZWxsY2hlY2sudGNsOjY4CiBtc2dpZCAiSW52YWxpZCBzcGVsbCBjaGVja2luZyBjb25maWd1cmF0aW9uIgotbXNnc3RyICIiCittc2dzdHIgIlVuYmVudXR6YmFyZSBLb25maWd1cmF0aW9uIGRlciBSZWNodHNjaHJlaWJwcsO8ZnVuZyIKIAogIzogbGliL3NwZWxsY2hlY2sudGNsOjcwCiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiUmV2ZXJ0aW5nIGRpY3Rpb25hcnkgdG8gJXMuIgotbXNnc3RyICIiCittc2dzdHIgIlfDtnJ0ZXJidWNoIGF1ZiAlcyB6dXLDvGNrZ2VzZXR6dC4iCiAKICM6IGxpYi9zcGVsbGNoZWNrLnRjbDo3MwotIywgZnV6enkKIG1zZ2lkICJTcGVsbCBjaGVja2VyIHNpbGVudGx5IGZhaWxlZCBvbiBzdGFydHVwIgotbXNnc3RyICJSZWNodHNjaHJlaWJwcsO8ZnVuZyBmZWhsZ2VzY2hsYWdlbiIKK21zZ3N0ciAiUmVjaHRzY2hyZWlicHLDvGZ1bmdzcHJvZ3JhbW0gbWl0IEZlaGxlciBhYmdlYnJvY2hlbiIKIAogIzogbGliL3NwZWxsY2hlY2sudGNsOjgwCi0jLCBmdXp6eQogbXNnaWQgIlVucmVjb2duaXplZCBzcGVsbCBjaGVja2VyIgotbXNnc3RyICJVbmJla2FubnRlIFZlcnNpb24gdm9uIMK7YXNwZWxswqsiCittc2dzdHIgIlVuYmVrYW5udGVzIFJlY2h0c2NocmVpYnByw7xmdW5nc3Byb2dyYW1tIgogCiAjOiBsaWIvc3BlbGxjaGVjay50Y2w6MTgwCiBtc2dpZCAiTm8gU3VnZ2VzdGlvbnMiCiBtc2dzdHIgIktlaW5lIFZvcnNjaGzDpGdlIgogCiAjOiBsaWIvc3BlbGxjaGVjay50Y2w6MzgxCi0jLCBmdXp6eQogbXNnaWQgIlVuZXhwZWN0ZWQgRU9GIGZyb20gc3BlbGwgY2hlY2tlciIKLW1zZ3N0ciAiVW5lcndhcnRldGVzIEVPRiB2b24gwrthc3BlbGzCqyIKK21zZ3N0ciAiVW5lcndhcnRldGVzIEVPRiB2b20gUmVjaHRzY2hyZWlicHLDvGZ1bmdzcHJvZ3JhbW0iCiAKICM6IGxpYi9zcGVsbGNoZWNrLnRjbDozODUKIG1zZ2lkICJTcGVsbCBDaGVja2VyIEZhaWxlZCIKQEAgLTIwMDIsNiArMTk5NywzIEBACiAjOiBsaWIvdHJhbnNwb3J0LnRjbDoxNjgKIG1zZ2lkICJJbmNsdWRlIHRhZ3MiCiBtc2dzdHIgIk1pdCBNYXJraWVydW5nZW4gw7xiZXJ0cmFnZW4iCi0KLSN+IG1zZ2lkICJOb3QgY29ubmVjdGVkIHRvIGFzcGVsbCIKLSN+IG1zZ3N0ciAiS2VpbmUgVmVyYmluZHVuZyB6dSDCu2FzcGVsbMKrIgpkaWZmIC0tZ2l0IGEvZ2l0LWluc3Rhd2ViLnNoIGIvZ2l0LWluc3Rhd2ViLnNoCmluZGV4IDZmOTFjOGYuLmFmMGZkZTUgMTAwNzU1Ci0tLSBhL2dpdC1pbnN0YXdlYi5zaAorKysgYi9naXQtaW5zdGF3ZWIuc2gKQEAgLTIyLDEwICsyMiwxMCBAQAogLiBnaXQtc2gtc2V0dXAKIAogZnFnaXRkaXI9IiRHSVRfRElSIgotbG9jYWw9ImBnaXQgY29uZmlnIC0tYm9vbCAtLWdldCBpbnN0YXdlYi5sb2NhbGAiCi1odHRwZD0iYGdpdCBjb25maWcgLS1nZXQgaW5zdGF3ZWIuaHR0cGRgIgotcG9ydD1gZ2l0IGNvbmZpZyAtLWdldCBpbnN0YXdlYi5wb3J0YAotbW9kdWxlX3BhdGg9ImBnaXQgY29uZmlnIC0tZ2V0IGluc3Rhd2ViLm1vZHVsZXBhdGhgIgorbG9jYWw9IiQoZ2l0IGNvbmZpZyAtLWJvb2wgLS1nZXQgaW5zdGF3ZWIubG9jYWwpIgoraHR0cGQ9IiQoZ2l0IGNvbmZpZyAtLWdldCBpbnN0YXdlYi5odHRwZCkiCitwb3J0PSQoZ2l0IGNvbmZpZyAtLWdldCBpbnN0YXdlYi5wb3J0KQorbW9kdWxlX3BhdGg9IiQoZ2l0IGNvbmZpZyAtLWdldCBpbnN0YXdlYi5tb2R1bGVwYXRoKSIKIAogY29uZj0iJEdJVF9ESVIvZ2l0d2ViL2h0dHBkLmNvbmYiCiAKQEAgLTM3LDExICszNywyMSBAQAogIyBhbnkgdW50YWtlbiBsb2NhbCBwb3J0IHdpbGwgZG8uLi4KIHRlc3QgLXogIiRwb3J0IiAmJiBwb3J0PTEyMzQKIAotc3RhcnRfaHR0cGQgKCkgewotCWh0dHBkX29ubHk9ImBlY2hvICRodHRwZCB8IGN1dCAtZjEgLWQnICdgIgorcmVzb2x2ZV9mdWxsX2h0dHBkICgpIHsKKwljYXNlICIkaHR0cGQiIGluCisJKmFwYWNoZTIqfCpsaWdodHRwZCopCisJCSMgZW5zdXJlIHRoYXQgdGhlIGFwYWNoZTIvbGlnaHR0cGQgY29tbWFuZCBlbmRzIHdpdGggIi1mIgorCQlpZiAhIGVjaG8gIiRodHRwZCIgfCBncmVwIC0tICctZiAqJCcgPi9kZXYvbnVsbCAyPiYxCisJCXRoZW4KKwkJCWh0dHBkPSIkaHR0cGQgLWYiCisJCWZpCisJCTs7CisJZXNhYworCisJaHR0cGRfb25seT0iJChlY2hvICRodHRwZCB8IGN1dCAtZjEgLWQnICcpIgogCWlmIGNhc2UgIiRodHRwZF9vbmx5IiBpbiAvKikgOiA7OyAqKSB3aGljaCAkaHR0cGRfb25seSA+L2Rldi9udWxsOzsgZXNhYwogCXRoZW4KLQkJJGh0dHBkICIkZnFnaXRkaXIvZ2l0d2ViL2h0dHBkLmNvbmYiCisJCWZ1bGxfaHR0cGQ9JGh0dHBkCiAJZWxzZQogCQkjIG1hbnkgaHR0cGRzIGFyZSBpbnN0YWxsZWQgaW4gL3Vzci9zYmluIG9yIC91c3IvbG9jYWwvc2JpbgogCQkjIHRoZXNlIGRheXMgYW5kIHRob3NlIGFyZSBub3QgaW4gbW9zdCB1c2VycyAkUEFUSHMKQEAgLTUxLDE2ICs2MSwyMyBAQAogCQlkbwogCQkJaWYgdGVzdCAteCAiJGkvJGh0dHBkX29ubHkiCiAJCQl0aGVuCi0JCQkJIyBkb24ndCBxdW90ZSAkaHR0cGQsIHRoZXJlIGNhbiBiZQotCQkJCSMgYXJndW1lbnRzIHRvIGl0ICgtZikKLQkJCQkkaS8kaHR0cGQgIiRmcWdpdGRpci9naXR3ZWIvaHR0cGQuY29uZiIKKwkJCQlmdWxsX2h0dHBkPSRpLyRodHRwZAogCQkJCXJldHVybgogCQkJZmkKIAkJZG9uZQotCQllY2hvICIkaHR0cGRfb25seSBub3QgZm91bmQuIEluc3RhbGwgJGh0dHBkX29ubHkgb3IgdXNlIiBcCi0JCSAgICAgIi0taHR0cGQgdG8gc3BlY2lmeSBhbm90aGVyIGh0dHAgZGFlbW9uLiIKKworCQllY2hvID4mMiAiJGh0dHBkX29ubHkgbm90IGZvdW5kLiBJbnN0YWxsICRodHRwZF9vbmx5IG9yIHVzZSIgXAorCQkgICAgICItLWh0dHBkIHRvIHNwZWNpZnkgYW5vdGhlciBodHRwZCBkYWVtb24uIgogCQlleGl0IDEKIAlmaQorfQorCitzdGFydF9odHRwZCAoKSB7CisJIyBoZXJlICRodHRwZCBzaG91bGQgaGF2ZSBhIG1lYW5pbmdmdWwgdmFsdWUKKwlyZXNvbHZlX2Z1bGxfaHR0cGQKKworCSMgZG9uJ3QgcXVvdGUgJGZ1bGxfaHR0cGQsIHRoZXJlIGNhbiBiZSBhcmd1bWVudHMgdG8gaXQgKC1mKQorCSRmdWxsX2h0dHBkICIkZnFnaXRkaXIvZ2l0d2ViL2h0dHBkLmNvbmYiCiAJaWYgdGVzdCAkPyAhPSAwOyB0aGVuCiAJCWVjaG8gIkNvdWxkIG5vdCBleGVjdXRlIGh0dHAgZGFlbW9uICRodHRwZC4iCiAJCWV4aXQgMQpAQCAtNjgsNyArODUsNyBAQAogfQogCiBzdG9wX2h0dHBkICgpIHsKLQl0ZXN0IC1mICIkZnFnaXRkaXIvcGlkIiAmJiBraWxsIGBjYXQgIiRmcWdpdGRpci9waWQiYAorCXRlc3QgLWYgIiRmcWdpdGRpci9waWQiICYmIGtpbGwgJChjYXQgIiRmcWdpdGRpci9waWQiKQogfQogCiB3aGlsZSB0ZXN0ICQjICE9IDAKQEAgLTExNiw3ICsxMzMsNyBAQAogZG9uZQogCiBta2RpciAtcCAiJEdJVF9ESVIvZ2l0d2ViL3RtcCIKLUdJVF9FWEVDX1BBVEg9ImBnaXQgLS1leGVjLXBhdGhgIgorR0lUX0VYRUNfUEFUSD0iJChnaXQgLS1leGVjLXBhdGgpIgogR0lUX0RJUj0iJGZxZ2l0ZGlyIgogZXhwb3J0IEdJVF9FWEVDX1BBVEggR0lUX0RJUgogCkBAIC0yMTUsNyArMjMyLDggQEAKIEVPRgogCWVsc2UKIAkJIyBwbGFpbi1vbGQgQ0dJCi0JCWxpc3RfbW9kcz1gZWNobyAiJGh0dHBkIiB8IHNlZCAicy8tZiQvLWwvImAKKwkJcmVzb2x2ZV9mdWxsX2h0dHBkCisJCWxpc3RfbW9kcz0kKGVjaG8gIiRmdWxsX2h0dHBkIiB8IHNlZCAicy8tZiQvLWwvIikKIAkJJGxpc3RfbW9kcyB8IGdyZXAgJ21vZF9jZ2lcLmMnID4vZGV2L251bGwgMj4mMSB8fCBcCiAJCWVjaG8gIkxvYWRNb2R1bGUgY2dpX21vZHVsZSAkbW9kdWxlX3BhdGgvbW9kX2NnaS5zbyIgPj4gIiRjb25mIgogCQljYXQgPj4gIiRjb25mIiA8PEVPRgpkaWZmIC0tZ2l0IGEvZ2l0LW1lcmdlLnNoIGIvZ2l0LW1lcmdlLnNoCmluZGV4IDdkYmJiMWQuLjgwMjZjY2YgMTAwNzU1Ci0tLSBhL2dpdC1tZXJnZS5zaAorKysgYi9naXQtbWVyZ2Uuc2gKQEAgLTgsMTAgKzgsMTIgQEAKIGdpdC1tZXJnZSBbb3B0aW9uc10gPHJlbW90ZT4uLi4KIGdpdC1tZXJnZSBbb3B0aW9uc10gPG1zZz4gSEVBRCA8cmVtb3RlPgogLS0KLXN1bW1hcnkgICAgICAgICAgICAgIHNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZQotbixuby1zdW1tYXJ5ICAgICAgICAgZG9uJ3Qgc2hvdyBhIGRpZmZzdGF0IGF0IHRoZSBlbmQgb2YgdGhlIG1lcmdlCitzdGF0ICAgICAgICAgICAgICAgICBzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UKK24gICAgICAgICAgICAgICAgICAgIGRvbid0IHNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZQorc3VtbWFyeSAgICAgICAgICAgICAgKHN5bm9ueW0gdG8gLS1zdGF0KQorbG9nICAgICAgICAgICAgICAgICAgYWRkIGxpc3Qgb2Ygb25lLWxpbmUgbG9nIHRvIG1lcmdlIGNvbW1pdCBtZXNzYWdlCiBzcXVhc2ggICAgICAgICAgICAgICBjcmVhdGUgYSBzaW5nbGUgY29tbWl0IGluc3RlYWQgb2YgZG9pbmcgYSBtZXJnZQotY29tbWl0ICAgICAgICAgICAgICAgcGVyZm9ybSBhIGNvbW1pdCBpZiB0aGUgbWVyZ2Ugc3VjZXNzZXMgKGRlZmF1bHQpCitjb21taXQgICAgICAgICAgICAgICBwZXJmb3JtIGEgY29tbWl0IGlmIHRoZSBtZXJnZSBzdWNjZWVkcyAoZGVmYXVsdCkKIGZmICAgICAgICAgICAgICAgICAgIGFsbG93IGZhc3QgZm9yd2FyZCAoZGVmYXVsdCkKIHMsc3RyYXRlZ3k9ICAgICAgICAgIG1lcmdlIHN0cmF0ZWd5IHRvIHVzZQogbSxtZXNzYWdlPSAgICAgICAgICAgbWVzc2FnZSB0byBiZSB1c2VkIGZvciB0aGUgbWVyZ2UgY29tbWl0IChpZiBhbnkpCkBAIC0zNyw3ICszOSw3IEBACiAKIGFsbG93X2Zhc3RfZm9yd2FyZD10CiBhbGxvd190cml2aWFsX21lcmdlPXQKLXNxdWFzaD0gbm9fY29tbWl0PQorc3F1YXNoPSBub19jb21taXQ9IGxvZ19hcmc9CiAKIGRyb3BzYXZlKCkgewogCXJtIC1mIC0tICIkR0lUX0RJUi9NRVJHRV9IRUFEIiAiJEdJVF9ESVIvTUVSR0VfTVNHIiBcCkBAIC0xNDgsMTAgKzE1MCwxMiBAQAogcGFyc2VfY29uZmlnICgpIHsKIAl3aGlsZSB0ZXN0ICQjICE9IDA7IGRvCiAJCWNhc2UgIiQxIiBpbgotCQktbnwtLW5vLXN1bW1hcnkpCisJCS1ufC0tbm8tc3RhdHwtLW5vLXN1bW1hcnkpCiAJCQlzaG93X2RpZmZzdGF0PWZhbHNlIDs7Ci0JCS0tc3VtbWFyeSkKKwkJLS1zdGF0fC0tc3VtbWFyeSkKIAkJCXNob3dfZGlmZnN0YXQ9dCA7OworCQktLWxvZ3wtLW5vLWxvZykKKwkJCWxvZ19hcmc9JDEgOzsKIAkJLS1zcXVhc2gpCiAJCQl0ZXN0ICIkYWxsb3dfZmFzdF9mb3J3YXJkIiA9IHQgfHwKIAkJCQlkaWUgIllvdSBjYW5ub3QgY29tYmluZSAtLXNxdWFzaCB3aXRoIC0tbm8tZmYuIgpAQCAtMjEwLDYgKzIxNCw3IEBACiAKIGlmIHRlc3QgLXogIiRzaG93X2RpZmZzdGF0IjsgdGhlbgogICAgIHRlc3QgIiQoZ2l0IGNvbmZpZyAtLWJvb2wgbWVyZ2UuZGlmZnN0YXQpIiA9IGZhbHNlICYmIHNob3dfZGlmZnN0YXQ9ZmFsc2UKKyAgICB0ZXN0ICIkKGdpdCBjb25maWcgLS1ib29sIG1lcmdlLnN0YXQpIiA9IGZhbHNlICYmIHNob3dfZGlmZnN0YXQ9ZmFsc2UKICAgICB0ZXN0IC16ICIkc2hvd19kaWZmc3RhdCIgJiYgc2hvd19kaWZmc3RhdD10CiBmaQogCkBAIC0yNTgsNyArMjYzLDcgQEAKIAltZXJnZV9uYW1lPSQoZm9yIHJlbW90ZQogCQlkbwogCQkJbWVyZ2VfbmFtZSAiJHJlbW90ZSIKLQkJZG9uZSB8IGdpdCBmbXQtbWVyZ2UtbXNnCisJCWRvbmUgfCBnaXQgZm10LW1lcmdlLW1zZyAkbG9nX2FyZwogCSkKIAltZXJnZV9tc2c9IiR7bWVyZ2VfbXNnOiskbWVyZ2VfbXNnJExGJExGfSRtZXJnZV9uYW1lIgogZmkKZGlmZiAtLWdpdCBhL2dpdC1tZXJnZXRvb2wuc2ggYi9naXQtbWVyZ2V0b29sLnNoCmluZGV4IDVjODZmNjkuLmZjZGVjNGEgMTAwNzU1Ci0tLSBhL2dpdC1tZXJnZXRvb2wuc2gKKysrIGIvZ2l0LW1lcmdldG9vbC5zaApAQCAtMjM3LDkgKzIzNyw5IEBACiAJZWNtZXJnZSkKIAkgICAgdG91Y2ggIiRCQUNLVVAiCiAJICAgIGlmIGJhc2VfcHJlc2VudDsgdGhlbgotCQkiJG1lcmdlX3Rvb2xfcGF0aCIgIiRCQVNFIiAiJExPQ0FMIiAiJFJFTU9URSIgLS1tb2RlPW1lcmdlMyAtLXRvPSIkTUVSR0VEIgorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgIiRCQVNFIiAiJExPQ0FMIiAiJFJFTU9URSIgLS1kZWZhdWx0IC0tbW9kZT1tZXJnZTMgLS10bz0iJE1FUkdFRCIKIAkgICAgZWxzZQotCQkiJG1lcmdlX3Rvb2xfcGF0aCIgIiRMT0NBTCIgIiRSRU1PVEUiIC0tbW9kZT1tZXJnZTIgLS10bz0iJE1FUkdFRCIKKwkJIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIiAtLWRlZmF1bHQgLS1tb2RlPW1lcmdlMiAtLXRvPSIkTUVSR0VEIgogCSAgICBmaQogCSAgICBjaGVja191bmNoYW5nZWQKIAkgICAgOzsKZGlmZiAtLWdpdCBhL2dpdC1wdWxsLnNoIGIvZ2l0LXB1bGwuc2gKaW5kZXggM2NlMzJiNS4uODA5ZTUzNyAxMDA3NTUKLS0tIGEvZ2l0LXB1bGwuc2gKKysrIGIvZ2l0LXB1bGwuc2gKQEAgLTQsNyArNCw3IEBACiAjCiAjIEZldGNoIG9uZSBvciBtb3JlIHJlbW90ZSByZWZzIGFuZCBtZXJnZSBpdC90aGVtIGludG8gdGhlIGN1cnJlbnQgSEVBRC4KIAotVVNBR0U9J1stbiB8IC0tbm8tc3VtbWFyeV0gWy0tW25vLV1jb21taXRdIFstLVtuby1dc3F1YXNoXSBbLS1bbm8tXWZmXSBbLXMgc3RyYXRlZ3ldLi4uIFs8ZmV0Y2gtb3B0aW9ucz5dIDxyZXBvPiA8aGVhZD4uLi4nCitVU0FHRT0nWy1uIHwgLS1uby1zdGF0XSBbLS1bbm8tXWNvbW1pdF0gWy0tW25vLV1zcXVhc2hdIFstLVtuby1dZmZdIFstcyBzdHJhdGVneV0uLi4gWzxmZXRjaC1vcHRpb25zPl0gPHJlcG8+IDxoZWFkPi4uLicKIExPTkdfVVNBR0U9J0ZldGNoIG9uZSBvciBtb3JlIHJlbW90ZSByZWZzIGFuZCBtZXJnZSBpdC90aGVtIGludG8gdGhlIGN1cnJlbnQgSEVBRC4nCiBTVUJESVJFQ1RPUllfT0s9WWVzCiBPUFRJT05TX1NQRUM9CkBAIC0xNiwxOSArMTYsMTkgQEAKIHRlc3QgLXogIiQoZ2l0IGxzLWZpbGVzIC11KSIgfHwKIAlkaWUgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNvbmZsaWN0ZWQgbWVyZ2UuIgogCi1zdHJhdGVneV9hcmdzPSBub19zdW1tYXJ5PSBub19jb21taXQ9IHNxdWFzaD0gbm9fZmY9CitzdHJhdGVneV9hcmdzPSBub19zdGF0PSBub19jb21taXQ9IHNxdWFzaD0gbm9fZmY9IGxvZ19hcmc9CiBjdXJyX2JyYW5jaD0kKGdpdCBzeW1ib2xpYy1yZWYgLXEgSEVBRCkKIGN1cnJfYnJhbmNoX3Nob3J0PSQoZWNobyAiJGN1cnJfYnJhbmNoIiB8IHNlZCAic3xyZWZzL2hlYWRzL3x8IikKIHJlYmFzZT0kKGdpdCBjb25maWcgLS1ib29sIGJyYW5jaC4kY3Vycl9icmFuY2hfc2hvcnQucmViYXNlKQogd2hpbGUgOgogZG8KIAljYXNlICIkMSIgaW4KLQktbnwtLW58LS1ub3wtLW5vLXwtLW5vLXN8LS1uby1zdXwtLW5vLXN1bXwtLW5vLXN1bW18XAotCQktLW5vLXN1bW1hfC0tbm8tc3VtbWFyfC0tbm8tc3VtbWFyeSkKLQkJbm9fc3VtbWFyeT0tbiA7OwotCS0tc3VtbWFyeSkKLQkJbm9fc3VtbWFyeT0kMQotCQk7OworCS1ufC0tbm8tc3RhdHwtLW5vLXN1bW1hcnkpCisJCW5vX3N0YXQ9LW4gOzsKKwktLXN0YXR8LS1zdW1tYXJ5KQorCQlub19zdGF0PSQxIDs7CisJLS1sb2d8LS1uby1sb2cpCisJCWxvZ19hcmc9JDEgOzsKIAktLW5vLWN8LS1uby1jb3wtLW5vLWNvbXwtLW5vLWNvbW18LS1uby1jb21taXwtLW5vLWNvbW1pdCkKIAkJbm9fY29tbWl0PS0tbm8tY29tbWl0IDs7CiAJLS1jfC0tY298LS1jb218LS1jb21tfC0tY29tbWl8LS1jb21taXQpCkBAIC0xMDcsNiArMTA3LDExIEBACiB9CiAKIHRlc3QgdHJ1ZSA9ICIkcmViYXNlIiAmJiB7CisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgZGlmZi1maWxlcyAtLXF1aWV0ICYmCisJZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLS1xdWlldCBIRUFEIC0tIHx8CisJZGllICJyZWZ1c2luZyB0byBwdWxsIHdpdGggcmViYXNlOiB5b3VyIHdvcmtpbmcgdHJlZSBpcyBub3QgdXAtdG8tZGF0ZSIKKwogCS4gZ2l0LXBhcnNlLXJlbW90ZSAmJgogCW9yaWdpbj0iJDEiCiAJdGVzdCAteiAiJG9yaWdpbiIgJiYgb3JpZ2luPSQoZ2V0X2RlZmF1bHRfcmVtb3RlKQpAQCAtMTcyLDkgKzE3Nyw5IEBACiAJZXhpdAogZmkKIAotbWVyZ2VfbmFtZT0kKGdpdCBmbXQtbWVyZ2UtbXNnIDwiJEdJVF9ESVIvRkVUQ0hfSEVBRCIpIHx8IGV4aXQKK21lcmdlX25hbWU9JChnaXQgZm10LW1lcmdlLW1zZyAkbG9nX2FyZyA8IiRHSVRfRElSL0ZFVENIX0hFQUQiKSB8fCBleGl0CiB0ZXN0IHRydWUgPSAiJHJlYmFzZSIgJiYKIAlleGVjIGdpdC1yZWJhc2UgJHN0cmF0ZWd5X2FyZ3MgLS1vbnRvICRtZXJnZV9oZWFkIFwKIAkke29sZHJlbW90ZXJlZjotJG1lcmdlX2hlYWR9Ci1leGVjIGdpdC1tZXJnZSAkbm9fc3VtbWFyeSAkbm9fY29tbWl0ICRzcXVhc2ggJG5vX2ZmICRzdHJhdGVneV9hcmdzIFwKK2V4ZWMgZ2l0LW1lcmdlICRub19zdGF0ICRub19jb21taXQgJHNxdWFzaCAkbm9fZmYgJGxvZ19hcmcgJHN0cmF0ZWd5X2FyZ3MgXAogCSIkbWVyZ2VfbmFtZSIgSEVBRCAkbWVyZ2VfaGVhZApkaWZmIC0tZ2l0IGEvZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUuc2ggYi9naXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaAppbmRleCA4YWE3MzcxLi5lM2Y2NWJkIDEwMDc1NQotLS0gYS9naXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaAorKysgYi9naXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaApAQCAtNTYsOSArNTYsOSBAQAogcmVxdWlyZV9jbGVhbl93b3JrX3RyZWUgKCkgewogCSMgdGVzdCBpZiB3b3JraW5nIHRyZWUgaXMgZGlydHkKIAlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgPiAvZGV2L251bGwgJiYKLQlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgotCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgJiYKLQlnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtLXF1aWV0IEhFQUQgLS0gfHwKKwlnaXQgdXBkYXRlLWluZGV4IC0taWdub3JlLXN1Ym1vZHVsZXMgLS1yZWZyZXNoICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCAtLWlnbm9yZS1zdWJtb2R1bGVzICYmCisJZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLS1xdWlldCBIRUFEIC0taWdub3JlLXN1Ym1vZHVsZXMgLS0gfHwKIAlkaWUgIldvcmtpbmcgdHJlZSBpcyBkaXJ0eSIKIH0KIApAQCAtMTYyLDYgKzE2Miw4IEBACiAJCQkJbmV3X3BhcmVudHM9IiRuZXdfcGFyZW50cyAkbmV3X3AiCiAJCQkJOzsKIAkJCWVzYWMKKwkJZWxzZQorCQkJbmV3X3BhcmVudHM9IiRuZXdfcGFyZW50cyAkcCIKIAkJZmkKIAlkb25lCiAJY2FzZSAkZmFzdF9mb3J3YXJkIGluCkBAIC0zNzcsMTEgKzM3OSwxMiBAQAogCQkjIFNhbml0eSBjaGVjawogCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgPi9kZXYvbnVsbCB8fAogCQkJZGllICJDYW5ub3QgcmVhZCBIRUFEIgotCQlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJiBnaXQgZGlmZi1maWxlcyAtLXF1aWV0IHx8CisJCWdpdCB1cGRhdGUtaW5kZXggLS1pZ25vcmUtc3VibW9kdWxlcyAtLXJlZnJlc2ggJiYKKwkJCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgLS1pZ25vcmUtc3VibW9kdWxlcyB8fAogCQkJZGllICJXb3JraW5nIHRyZWUgaXMgZGlydHkiCiAKIAkJIyBkbyB3ZSBoYXZlIGFueXRoaW5nIHRvIGNvbW1pdD8KLQkJaWYgZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLS1xdWlldCBIRUFEIC0tCisJCWlmIGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIC0tcXVpZXQgLS1pZ25vcmUtc3VibW9kdWxlcyBIRUFEIC0tCiAJCXRoZW4KIAkJCTogTm90aGluZyB0byBjb21taXQgLS0gc2tpcCB0aGlzCiAJCWVsc2UKQEAgLTQ3NCw2ICs0NzcsOSBAQAogCiAJCXJlcXVpcmVfY2xlYW5fd29ya190cmVlCiAKKwkJVVBTVFJFQU09JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIkMSIpIHx8IGRpZSAiSW52YWxpZCBiYXNlIgorCQl0ZXN0IC16ICIkT05UTyIgJiYgT05UTz0kVVBTVFJFQU0KKwogCQlpZiB0ZXN0ICEgLXogIiQyIgogCQl0aGVuCiAJCQlvdXRwdXQgZ2l0IHNob3ctcmVmIC0tdmVyaWZ5IC0tcXVpZXQgInJlZnMvaGVhZHMvJDIiIHx8CkBAIC00ODMsMTIgKzQ4OSw4IEBACiAJCWZpCiAKIAkJSEVBRD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgfHwgZGllICJObyBIRUFEPyIKLQkJVVBTVFJFQU09JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIkMSIpIHx8IGRpZSAiSW52YWxpZCBiYXNlIgotCiAJCW1rZGlyICIkRE9URVNUIiB8fCBkaWUgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5ICRET1RFU1QiCiAKLQkJdGVzdCAteiAiJE9OVE8iICYmIE9OVE89JFVQU1RSRUFNCi0KIAkJOiA+ICIkRE9URVNUIi9pbnRlcmFjdGl2ZSB8fCBkaWUgIkNvdWxkIG5vdCBtYXJrIGFzIGludGVyYWN0aXZlIgogCQlnaXQgc3ltYm9saWMtcmVmIEhFQUQgPiAiJERPVEVTVCIvaGVhZC1uYW1lIDI+IC9kZXYvbnVsbCB8fAogCQkJZWNobyAiZGV0YWNoZWQgSEVBRCIgPiAiJERPVEVTVCIvaGVhZC1uYW1lCkBAIC01MzAsOSArNTMyLDkgQEAKICMgUmViYXNlICRTSE9SVFVQU1RSRUFNLi4kU0hPUlRIRUFEIG9udG8gJFNIT1JUT05UTwogIwogIyBDb21tYW5kczoKLSMgIHBpY2sgPSB1c2UgY29tbWl0Ci0jICBlZGl0ID0gdXNlIGNvbW1pdCwgYnV0IHN0b3AgZm9yIGFtZW5kaW5nCi0jICBzcXVhc2ggPSB1c2UgY29tbWl0LCBidXQgbWVsZCBpbnRvIHByZXZpb3VzIGNvbW1pdAorIyAgcCwgcGljayA9IHVzZSBjb21taXQKKyMgIGUsIGVkaXQgPSB1c2UgY29tbWl0LCBidXQgc3RvcCBmb3IgYW1lbmRpbmcKKyMgIHMsIHNxdWFzaCA9IHVzZSBjb21taXQsIGJ1dCBtZWxkIGludG8gcHJldmlvdXMgY29tbWl0CiAjCiAjIElmIHlvdSByZW1vdmUgYSBsaW5lIGhlcmUgVEhBVCBDT01NSVQgV0lMTCBCRSBMT1NULgogIyBIb3dldmVyLCBpZiB5b3UgcmVtb3ZlIGV2ZXJ5dGhpbmcsIHRoZSByZWJhc2Ugd2lsbCBiZSBhYm9ydGVkLgpkaWZmIC0tZ2l0IGEvZ2l0LXJlYmFzZS5zaCBiL2dpdC1yZWJhc2Uuc2gKaW5kZXggNjBjNDU4Zi4uZTJkODVlZSAxMDA3NTUKLS0tIGEvZ2l0LXJlYmFzZS5zaAorKysgYi9naXQtcmViYXNlLnNoCkBAIC02MCw3ICs2MCw3IEBACiAJZmkKIAogCWNtdD1gY2F0ICIkZG90ZXN0L2N1cnJlbnQiYAotCWlmICEgZ2l0IGRpZmYtaW5kZXggLS1xdWlldCBIRUFEIC0tCisJaWYgISBnaXQgZGlmZi1pbmRleCAtLXF1aWV0IC0taWdub3JlLXN1Ym1vZHVsZXMgSEVBRCAtLQogCXRoZW4KIAkJaWYgISBnaXQgY29tbWl0IC0tbm8tdmVyaWZ5IC1DICIkY210IgogCQl0aGVuCkBAIC0xNTAsNyArMTUwLDEwIEBACiBkbwogCWNhc2UgIiQxIiBpbgogCS0tY29udGludWUpCi0JCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgfHwgeworCQl0ZXN0IC1kICIkZG90ZXN0IiAtbyAtZCAuZG90ZXN0IHx8CisJCQlkaWUgIk5vIHJlYmFzZSBpbiBwcm9ncmVzcz8iCisKKwkJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCAtLWlnbm9yZS1zdWJtb2R1bGVzIHx8IHsKIAkJCWVjaG8gIllvdSBtdXN0IGVkaXQgYWxsIG1lcmdlIGNvbmZsaWN0cyBhbmQgdGhlbiIKIAkJCWVjaG8gIm1hcmsgdGhlbSBhcyByZXNvbHZlZCB1c2luZyBnaXQgYWRkIgogCQkJZXhpdCAxCkBAIC0xNzgsNiArMTgxLDkgQEAKIAkJZXhpdAogCQk7OwogCS0tc2tpcCkKKwkJdGVzdCAtZCAiJGRvdGVzdCIgLW8gLWQgLmRvdGVzdCB8fAorCQkJZGllICJObyByZWJhc2UgaW4gcHJvZ3Jlc3M/IgorCiAJCWdpdCByZXNldCAtLWhhcmQgSEVBRCB8fCBleGl0ICQ/CiAJCWlmIHRlc3QgLWQgIiRkb3Rlc3QiCiAJCXRoZW4KQEAgLTIwMywxOCArMjA5LDE4IEBACiAJCWV4aXQKIAkJOzsKIAktLWFib3J0KQorCQl0ZXN0IC1kICIkZG90ZXN0IiAtbyAtZCAuZG90ZXN0IHx8CisJCQlkaWUgIk5vIHJlYmFzZSBpbiBwcm9ncmVzcz8iCisKIAkJZ2l0IHJlcmVyZSBjbGVhcgogCQlpZiB0ZXN0IC1kICIkZG90ZXN0IgogCQl0aGVuCiAJCQltb3ZlX3RvX29yaWdpbmFsX2JyYW5jaAotCQllbGlmIHRlc3QgLWQgLmRvdGVzdAotCQl0aGVuCisJCWVsc2UKIAkJCWRvdGVzdD0uZG90ZXN0CiAJCQltb3ZlX3RvX29yaWdpbmFsX2JyYW5jaAotCQllbHNlCi0JCQlkaWUgIk5vIHJlYmFzZSBpbiBwcm9ncmVzcz8iCiAJCWZpCi0JCWdpdCByZXNldCAtLWhhcmQgJChjYXQgJGRvdGVzdC9vcmlnLWhlYWQpCisJCWdpdCByZXNldCAtLWhhcmQgJChjYXQgIiRkb3Rlc3Qvb3JpZy1oZWFkIikKIAkJcm0gLXIgIiRkb3Rlc3QiCiAJCWV4aXQKIAkJOzsKQEAgLTI4Miw4ICsyODgsOCBAQAogZmkKIAogIyBUaGUgdHJlZSBtdXN0IGJlIHJlYWxseSByZWFsbHkgY2xlYW4uCi1naXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCB8fCBleGl0Ci1kaWZmPSQoZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLS1uYW1lLXN0YXR1cyAtciBIRUFEIC0tKQorZ2l0IHVwZGF0ZS1pbmRleCAtLWlnbm9yZS1zdWJtb2R1bGVzIC0tcmVmcmVzaCB8fCBleGl0CitkaWZmPSQoZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLS1uYW1lLXN0YXR1cyAtciAtLWlnbm9yZS1zdWJtb2R1bGVzIEhFQUQgLS0pCiBjYXNlICIkZGlmZiIgaW4KID8qKQllY2hvICJjYW5ub3QgcmViYXNlOiB5b3VyIGluZGV4IGlzIG5vdCB1cC10by1kYXRlIgogCWVjaG8gIiRkaWZmIgpAQCAtMzA5LDIyICszMTUsNDIgQEAKIAl9CiBmaQogCi0jIElmIHRoZSBicmFuY2ggdG8gcmViYXNlIGlzIGdpdmVuLCBmaXJzdCBzd2l0Y2ggdG8gaXQuCisjIElmIHRoZSBicmFuY2ggdG8gcmViYXNlIGlzIGdpdmVuLCB0aGF0IGlzIHRoZSBicmFuY2ggd2Ugd2lsbCByZWJhc2UKKyMgJGJyYW5jaF9uYW1lIC0tIGJyYW5jaCBiZWluZyByZWJhc2VkLCBvciBIRUFEIChhbHJlYWR5IGRldGFjaGVkKQorIyAkb3JpZ19oZWFkIC0tIGNvbW1pdCBvYmplY3QgbmFtZSBvZiB0aXAgb2YgdGhlIGJyYW5jaCBiZWZvcmUgcmViYXNpbmcKKyMgJGhlYWRfbmFtZSAtLSByZWZzL2hlYWRzLzx0aGF0LWJyYW5jaD4gb3IgImRldGFjaGVkIEhFQUQiCitzd2l0Y2hfdG89CiBjYXNlICIkIyIgaW4KIDIpCisJIyBJcyBpdCAicmViYXNlIG90aGVyICRicmFuY2huYW1lIiBvciAicmViYXNlIG90aGVyICRjb21taXQiPwogCWJyYW5jaF9uYW1lPSIkMiIKLQlnaXQtY2hlY2tvdXQgIiQyIiB8fCB1c2FnZQotCTs7Ci0qKQotCWlmIGJyYW5jaF9uYW1lPWBnaXQgc3ltYm9saWMtcmVmIC1xIEhFQURgCisJc3dpdGNoX3RvPSIkMiIKKworCWlmIGdpdCBzaG93LXJlZiAtLXZlcmlmeSAtLXF1aWV0IC0tICJyZWZzL2hlYWRzLyQyIiAmJgorCSAgIGJyYW5jaD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgInJlZnMvaGVhZHMvJDIiIDI+L2Rldi9udWxsKQogCXRoZW4KLQkJYnJhbmNoX25hbWU9YGV4cHIgInokYnJhbmNoX25hbWUiIDogJ3pyZWZzL2hlYWRzL1woLipcKSdgCisJCWhlYWRfbmFtZT0icmVmcy9oZWFkcy8kMiIKKwllbGlmIGJyYW5jaD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiQyIiAyPi9kZXYvbnVsbCkKKwl0aGVuCisJCWhlYWRfbmFtZT0iZGV0YWNoZWQgSEVBRCIKIAllbHNlCi0JCWJyYW5jaF9uYW1lPUhFQUQgOyMgZGV0YWNoZWQKKwkJdXNhZ2UKIAlmaQogCTs7CisqKQorCSMgRG8gbm90IG5lZWQgdG8gc3dpdGNoIGJyYW5jaGVzLCB3ZSBhcmUgYWxyZWFkeSBvbiBpdC4KKwlpZiBicmFuY2hfbmFtZT1gZ2l0IHN5bWJvbGljLXJlZiAtcSBIRUFEYAorCXRoZW4KKwkJaGVhZF9uYW1lPSRicmFuY2hfbmFtZQorCQlicmFuY2hfbmFtZT1gZXhwciAieiRicmFuY2hfbmFtZSIgOiAnenJlZnMvaGVhZHMvXCguKlwpJ2AKKwllbHNlCisJCWhlYWRfbmFtZT0iZGV0YWNoZWQgSEVBRCIKKwkJYnJhbmNoX25hbWU9SEVBRCA7IyBkZXRhY2hlZAorCWZpCisJYnJhbmNoPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJHticmFuY2hfbmFtZX1eMCIpIHx8IGV4aXQKKwk7OwogZXNhYwotYnJhbmNoPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJHticmFuY2hfbmFtZX1eMCIpIHx8IGV4aXQKK29yaWdfaGVhZD0kYnJhbmNoCiAKICMgTm93IHdlIGFyZSByZWJhc2luZyBjb21taXRzICR1cHN0cmVhbS4uJGJyYW5jaCBvbiB0b3Agb2YgJG9udG8KIApAQCAtMzMzLDggKzM1OSwxMCBAQAogbWI9JChnaXQgbWVyZ2UtYmFzZSAiJG9udG8iICIkYnJhbmNoIikKIGlmIHRlc3QgIiR1cHN0cmVhbSIgPSAiJG9udG8iICYmIHRlc3QgIiRtYiIgPSAiJG9udG8iICYmCiAJIyBsaW5lYXIgaGlzdG9yeT8KLQkhIGdpdCByZXYtbGlzdCAtLXBhcmVudHMgIiRvbnRvIi4uIiRicmFuY2giIHwgZ3JlcCAiIC4qICIgPiAvZGV2L251bGwKKwkhIChnaXQgcmV2LWxpc3QgLS1wYXJlbnRzICIkb250byIuLiIkYnJhbmNoIiB8IGdyZXAgIiAuKiAiKSA+IC9kZXYvbnVsbAogdGhlbgorCSMgTGF6aWx5IHN3aXRjaCB0byB0aGUgdGFyZ2V0IGJyYW5jaCBpZiBuZWVkZWQuLi4KKwl0ZXN0IC16ICIkc3dpdGNoX3RvIiB8fCBnaXQgY2hlY2tvdXQgIiRzd2l0Y2hfdG8iCiAJZWNobyA+JjIgIkN1cnJlbnQgYnJhbmNoICRicmFuY2hfbmFtZSBpcyB1cCB0byBkYXRlLiIKIAlleGl0IDAKIGZpCkBAIC0zNDYsMjIgKzM3NCwxMSBAQAogCUdJVF9QQUdFUj0nJyBnaXQgZGlmZiAtLXN0YXQgLS1zdW1tYXJ5ICIkbWIiICIkb250byIKIGZpCiAKLSMgbW92ZSB0byBhIGRldGFjaGVkIEhFQUQKLW9yaWdfaGVhZD0kKGdpdCByZXYtcGFyc2UgSEVBRF4wKQotaGVhZF9uYW1lPSQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEIDI+IC9kZXYvbnVsbCkKLWNhc2UgIiRoZWFkX25hbWUiIGluCi0nJykKLQloZWFkX25hbWU9ImRldGFjaGVkIEhFQUQiCi0JOzsKLSopCi0JZ2l0IGNoZWNrb3V0ICIkb3JpZ19oZWFkIiA+IC9kZXYvbnVsbCAyPiYxIHx8Ci0JCWRpZSAiY291bGQgbm90IGRldGFjaCBIRUFEIgotCTs7Ci1lc2FjCi0KLSMgUmV3aW5kIHRoZSBoZWFkIHRvICIkb250byI7IHRoaXMgc2F2ZXMgb3VyIGN1cnJlbnQgaGVhZCBpbiBPUklHX0hFQUQuCisjIERldGFjaCBIRUFEIGFuZCByZXNldCB0aGUgdHJlZQogZWNobyAiRmlyc3QsIHJld2luZGluZyBoZWFkIHRvIHJlcGxheSB5b3VyIHdvcmsgb24gdG9wIG9mIGl0Li4uIgotZ2l0LXJlc2V0IC0taGFyZCAiJG9udG8iCitnaXQgY2hlY2tvdXQgIiRvbnRvXjAiID4vZGV2L251bGwgMj4mMSB8fAorCWRpZSAiY291bGQgbm90IGRldGFjaCBIRUFEIgorIyBnaXQgcmVzZXQgLS1oYXJkICIkb250b14wIgogCiAjIElmIHRoZSAkb250byBpcyBhIHByb3BlciBkZXNjZW5kYW50IG9mIHRoZSB0aXAgb2YgdGhlIGJyYW5jaCwgdGhlbgogIyB3ZSBqdXN0IGZhc3QgZm9yd2FyZGVkLgpAQCAtMzc0LDcgKzM5MSw4IEBACiAKIGlmIHRlc3QgLXogIiRkb19tZXJnZSIKIHRoZW4KLQlnaXQgZm9ybWF0LXBhdGNoIC1rIC0tc3Rkb3V0IC0tZnVsbC1pbmRleCAtLWlnbm9yZS1pZi1pbi11cHN0cmVhbSAiJHVwc3RyZWFtIi4uT1JJR19IRUFEIHwKKwlnaXQgZm9ybWF0LXBhdGNoIC1rIC0tc3Rkb3V0IC0tZnVsbC1pbmRleCAtLWlnbm9yZS1pZi1pbi11cHN0cmVhbSBcCisJCSIkdXBzdHJlYW0uLiRvcmlnX2hlYWQiIHwKIAlnaXQgYW0gJGdpdF9hbV9vcHQgLS1yZWJhc2luZyAtLXJlc29sdmVtc2c9IiRSRVNPTFZFTVNHIiAmJgogCW1vdmVfdG9fb3JpZ2luYWxfYnJhbmNoCiAJcmV0PSQ/CkBAIC0zOTcsNyArNDE1LDcgQEAKIGVjaG8gIiRoZWFkX25hbWUiID4gIiRkb3Rlc3QvaGVhZC1uYW1lIgogCiBtc2dudW09MAotZm9yIGNtdCBpbiBgZ2l0IHJldi1saXN0IC0tcmV2ZXJzZSAtLW5vLW1lcmdlcyAiJHVwc3RyZWFtIi4uT1JJR19IRUFEYAorZm9yIGNtdCBpbiBgZ2l0IHJldi1saXN0IC0tcmV2ZXJzZSAtLW5vLW1lcmdlcyAiJHVwc3RyZWFtLi4kb3JpZ19oZWFkImAKIGRvCiAJbXNnbnVtPSQoKCRtc2dudW0gKyAxKSkKIAllY2hvICIkY210IiA+ICIkZG90ZXN0L2NtdC4kbXNnbnVtIgpkaWZmIC0tZ2l0IGEvZ2l0LXJlcGFjay5zaCBiL2dpdC1yZXBhY2suc2gKaW5kZXggNTAxNTE5YS4uMDcyZDFiNCAxMDA3NTUKLS0tIGEvZ2l0LXJlcGFjay5zaAorKysgYi9naXQtcmVwYWNrLnNoCkBAIC04LDcgKzgsNyBAQAogZ2l0LXJlcGFjayBbb3B0aW9uc10KIC0tCiBhICAgICAgICAgICAgICAgcGFjayBldmVyeXRoaW5nIGluIGEgc2luZ2xlIHBhY2sKLUEgICAgICAgICAgICAgICBzYW1lIGFzIC1hLCBhbmQga2VlcCB1bnJlYWNoYWJsZSBvYmplY3RzIHRvbworQSAgICAgICAgICAgICAgIHNhbWUgYXMgLWEsIGFuZCB0dXJuIHVucmVhY2hhYmxlIG9iamVjdHMgbG9vc2UKIGQgICAgICAgICAgICAgICByZW1vdmUgcmVkdW5kYW50IHBhY2tzLCBhbmQgcnVuIGdpdC1wcnVuZS1wYWNrZWQKIGYgICAgICAgICAgICAgICBwYXNzIC0tbm8tcmV1c2UtZGVsdGEgdG8gZ2l0LXBhY2stb2JqZWN0cwogbiAgICAgICAgICAgICAgIGRvIG5vdCBydW4gZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mbwpAQCAtMjMsNyArMjMsNyBAQAogU1VCRElSRUNUT1JZX09LPSdZZXMnCiAuIGdpdC1zaC1zZXR1cAogCi1ub191cGRhdGVfaW5mbz0gYWxsX2ludG9fb25lPSByZW1vdmVfcmVkdW5kYW50PSBrZWVwX3VucmVhY2hhYmxlPQorbm9fdXBkYXRlX2luZm89IGFsbF9pbnRvX29uZT0gcmVtb3ZlX3JlZHVuZGFudD0gdW5wYWNrX3VucmVhY2hhYmxlPQogbG9jYWw9IHF1aWV0PSBub19yZXVzZT0gZXh0cmE9CiB3aGlsZSB0ZXN0ICQjICE9IDAKIGRvCkBAIC0zMSw3ICszMSw3IEBACiAJLW4pCW5vX3VwZGF0ZV9pbmZvPXQgOzsKIAktYSkJYWxsX2ludG9fb25lPXQgOzsKIAktQSkJYWxsX2ludG9fb25lPXQKLQkJa2VlcF91bnJlYWNoYWJsZT0tLWtlZXAtdW5yZWFjaGFibGUgOzsKKwkJdW5wYWNrX3VucmVhY2hhYmxlPS0tdW5wYWNrLXVucmVhY2hhYmxlIDs7CiAJLWQpCXJlbW92ZV9yZWR1bmRhbnQ9dCA7OwogCS1xKQlxdWlldD0tcSA7OwogCS1mKQlub19yZXVzZT0tLW5vLXJldXNlLW9iamVjdCA7OwpAQCAtNzksOSArNzksOSBAQAogCWlmIHRlc3QgLXogIiRhcmdzIgogCXRoZW4KIAkJYXJncz0nLS11bnBhY2tlZCAtLWluY3JlbWVudGFsJwotCWVsaWYgdGVzdCAtbiAiJGtlZXBfdW5yZWFjaGFibGUiCisJZWxpZiB0ZXN0IC1uICIkdW5wYWNrX3VucmVhY2hhYmxlIgogCXRoZW4KLQkJYXJncz0iJGFyZ3MgJGtlZXBfdW5yZWFjaGFibGUiCisJCWFyZ3M9IiRhcmdzICR1bnBhY2tfdW5yZWFjaGFibGUiCiAJZmkKIAk7OwogZXNhYwpAQCAtMTI1LDcgKzEyNSw2IEBACiAJIyBXZSBrbm93ICRleGlzdGluZyBhcmUgYWxsIHJlZHVuZGFudC4KIAlpZiBbIC1uICIkZXhpc3RpbmciIF0KIAl0aGVuCi0JCXN5bmMKIAkJKCBjZCAiJFBBQ0tESVIiICYmCiAJCSAgZm9yIGUgaW4gJGV4aXN0aW5nCiAJCSAgZG8KZGlmZiAtLWdpdCBhL2dpdC1zZW5kLWVtYWlsLnBlcmwgYi9naXQtc2VuZC1lbWFpbC5wZXJsCmluZGV4IGM2YmJhNDcuLjM4NWZmN2MgMTAwNzU1Ci0tLSBhL2dpdC1zZW5kLWVtYWlsLnBlcmwKKysrIGIvZ2l0LXNlbmQtZW1haWwucGVybApAQCAtMTY4LDcgKzE2OCw4IEBACiAjIEV4YW1wbGUgcmVwbHkgdG86CiAjJGluaXRpYWxfcmVwbHlfdG8gPSAnJzsgIzwyMDA1MDIwMzE3MzIwOC5HQTIzOTY0QGZvb2Jhci5jb20+JzsKIAotbXkgJHJlcG8gPSBHaXQtPnJlcG9zaXRvcnkoKTsKK215ICRyZXBvID0gZXZhbCB7IEdpdC0+cmVwb3NpdG9yeSgpIH07CitteSBAcmVwbyA9ICRyZXBvID8gKCRyZXBvKSA6ICgpOwogbXkgJHRlcm0gPSBldmFsIHsKIAkkRU5WeyJHSVRfU0VORF9FTUFJTF9OT1RUWSJ9CiAJCT8gbmV3IFRlcm06OlJlYWRMaW5lICdnaXQtc2VuZC1lbWFpbCcsIFwqU1RESU4sIFwqU1RET1VUCkBAIC0yMDIsMTEgKzIwMywxMyBAQAogICAgICJzbXRwdXNlciIgPT4gXCRzbXRwX2F1dGh1c2VyLAogICAgICJzbXRwcGFzcyIgPT4gXCRzbXRwX2F1dGhwYXNzLAogICAgICJ0byIgPT4gXEB0bywKKyAgICAiY2MiID0+IFxAaW5pdGlhbF9jYywKICAgICAiY2NjbWQiID0+IFwkY2NfY21kLAogICAgICJhbGlhc2ZpbGV0eXBlIiA9PiBcJGFsaWFzZmlsZXR5cGUsCiAgICAgImJjYyIgPT4gXEBiY2NsaXN0LAogICAgICJhbGlhc2VzZmlsZSIgPT4gXEBhbGlhc19maWxlcywKICAgICAic3VwcHJlc3NjYyIgPT4gXEBzdXBwcmVzc19jYywKKyAgICAiZW52ZWxvcGVzZW5kZXIiID0+IFwkZW52ZWxvcGVfc2VuZGVyLAogKTsKIAogIyBIYW5kbGUgVW5jb3V0aCBUZXJtaW5hdGlvbgpAQCAtMjcxLDI1ICsyNzQsMjUgQEAKIAogCWZvcmVhY2ggbXkgJHNldHRpbmcgKGtleXMgJWNvbmZpZ19ib29sX3NldHRpbmdzKSB7CiAJCW15ICR0YXJnZXQgPSAkY29uZmlnX2Jvb2xfc2V0dGluZ3N7JHNldHRpbmd9LT5bMF07Ci0JCSQkdGFyZ2V0ID0gJHJlcG8tPmNvbmZpZ19ib29sKCIkcHJlZml4LiRzZXR0aW5nIikgdW5sZXNzIChkZWZpbmVkICQkdGFyZ2V0KTsKKwkJJCR0YXJnZXQgPSBHaXQ6OmNvbmZpZ19ib29sKEByZXBvLCAiJHByZWZpeC4kc2V0dGluZyIpIHVubGVzcyAoZGVmaW5lZCAkJHRhcmdldCk7CiAJfQogCiAJZm9yZWFjaCBteSAkc2V0dGluZyAoa2V5cyAlY29uZmlnX3NldHRpbmdzKSB7CiAJCW15ICR0YXJnZXQgPSAkY29uZmlnX3NldHRpbmdzeyRzZXR0aW5nfTsKIAkJaWYgKHJlZigkdGFyZ2V0KSBlcSAiQVJSQVkiKSB7CiAJCQl1bmxlc3MgKEAkdGFyZ2V0KSB7Ci0JCQkJbXkgQHZhbHVlcyA9ICRyZXBvLT5jb25maWcoIiRwcmVmaXguJHNldHRpbmciKTsKKwkJCQlteSBAdmFsdWVzID0gR2l0Ojpjb25maWcoQHJlcG8sICIkcHJlZml4LiRzZXR0aW5nIik7CiAJCQkJQCR0YXJnZXQgPSBAdmFsdWVzIGlmIChAdmFsdWVzICYmIGRlZmluZWQgJHZhbHVlc1swXSk7CiAJCQl9CiAJCX0KIAkJZWxzZSB7Ci0JCQkkJHRhcmdldCA9ICRyZXBvLT5jb25maWcoIiRwcmVmaXguJHNldHRpbmciKSB1bmxlc3MgKGRlZmluZWQgJCR0YXJnZXQpOworCQkJJCR0YXJnZXQgPSBHaXQ6OmNvbmZpZyhAcmVwbywgIiRwcmVmaXguJHNldHRpbmciKSB1bmxlc3MgKGRlZmluZWQgJCR0YXJnZXQpOwogCQl9CiAJfQogfQogCiAjIHJlYWQgY29uZmlndXJhdGlvbiBmcm9tIFtzZW5kZW1haWwgIiRpZGVudGl0eSJdLCBmYWxsIGJhY2sgb24gW3NlbmRlbWFpbF0KLSRpZGVudGl0eSA9ICRyZXBvLT5jb25maWcoInNlbmRlbWFpbC5pZGVudGl0eSIpIHVubGVzcyAoZGVmaW5lZCAkaWRlbnRpdHkpOworJGlkZW50aXR5ID0gR2l0Ojpjb25maWcoQHJlcG8sICJzZW5kZW1haWwuaWRlbnRpdHkiKSB1bmxlc3MgKGRlZmluZWQgJGlkZW50aXR5KTsKIHJlYWRfY29uZmlnKCJzZW5kZW1haWwuJGlkZW50aXR5IikgaWYgKGRlZmluZWQgJGlkZW50aXR5KTsKIHJlYWRfY29uZmlnKCJzZW5kZW1haWwiKTsKIApAQCAtMzI3LDggKzMzMCw5IEBACiAJfQogfQogCi1teSAoJHJlcG9hdXRob3IpID0gJHJlcG8tPmlkZW50X3BlcnNvbignYXV0aG9yJyk7Ci1teSAoJHJlcG9jb21taXR0ZXIpID0gJHJlcG8tPmlkZW50X3BlcnNvbignY29tbWl0dGVyJyk7CitteSAoJHJlcG9hdXRob3IsICRyZXBvY29tbWl0dGVyKTsKKygkcmVwb2F1dGhvcikgPSBHaXQ6OmlkZW50X3BlcnNvbihAcmVwbywgJ2F1dGhvcicpOworKCRyZXBvY29tbWl0dGVyKSA9IEdpdDo6aWRlbnRfcGVyc29uKEByZXBvLCAnY29tbWl0dGVyJyk7CiAKICMgVmVyaWZ5IHRoZSB1c2VyIGlucHV0CiAKQEAgLTQxNSw3ICs0MTksNyBAQAogCiBteSAkcHJvbXB0aW5nID0gMDsKIGlmICghZGVmaW5lZCAkc2VuZGVyKSB7Ci0JJHNlbmRlciA9ICRyZXBvYXV0aG9yIHx8ICRyZXBvY29tbWl0dGVyOworCSRzZW5kZXIgPSAkcmVwb2F1dGhvciB8fCAkcmVwb2NvbW1pdHRlciB8fCAnJzsKIAogCXdoaWxlICgxKSB7CiAJCSRfID0gJHRlcm0tPnJlYWRsaW5lKCJXaG8gc2hvdWxkIHRoZSBlbWFpbHMgYXBwZWFyIHRvIGJlIGZyb20/IFskc2VuZGVyXSAiKTsKQEAgLTQzOCw3ICs0NDIsNyBAQAogCX0KIAogCW15ICR0byA9ICRfOwotCXB1c2ggQHRvLCBzcGxpdCAvLC8sICR0bzsKKwlwdXNoIEB0bywgc3BsaXQgLyxccyovLCAkdG87CiAJJHByb21wdGluZysrOwogfQogCkBAIC01MDksOCArNTEzLDggQEAKIEVPVAogCWNsb3NlKEMpOwogCi0JbXkgJGVkaXRvciA9ICRFTlZ7R0lUX0VESVRPUn0gfHwgJHJlcG8tPmNvbmZpZygiY29yZS5lZGl0b3IiKSB8fCAkRU5We1ZJU1VBTH0gfHwgJEVOVntFRElUT1J9IHx8ICJ2aSI7Ci0Jc3lzdGVtKCdzaCcsICctYycsICckMCAkQCcsICRlZGl0b3IsICRjb21wb3NlX2ZpbGVuYW1lKTsKKwlteSAkZWRpdG9yID0gJEVOVntHSVRfRURJVE9SfSB8fCBHaXQ6OmNvbmZpZyhAcmVwbywgImNvcmUuZWRpdG9yIikgfHwgJEVOVntWSVNVQUx9IHx8ICRFTlZ7RURJVE9SfSB8fCAidmkiOworCXN5c3RlbSgnc2gnLCAnLWMnLCAkZWRpdG9yLicgIiRAIicsICRlZGl0b3IsICRjb21wb3NlX2ZpbGVuYW1lKTsKIAogCW9wZW4oQzIsIj4iLCRjb21wb3NlX2ZpbGVuYW1lIC4gIi5maW5hbCIpCiAJCW9yIGRpZSAiRmFpbGVkIHRvIG9wZW4gJGNvbXBvc2VfZmlsZW5hbWUuZmluYWwgOiAiIC4gJCE7CkBAIC04NDYsNyArODUwLDcgQEAKIAkJCQl9CiAJCQkJZWxzaWYgKC9eQ29udGVudC10eXBlOi9pKSB7CiAJCQkJCSRoYXNfY29udGVudF90eXBlID0gMTsKLQkJCQkJaWYgKC9jaGFyc2V0PSI/W14gIl0rLykgeworCQkJCQlpZiAoL2NoYXJzZXQ9Ij8oW14gIl0rKS8pIHsKIAkJCQkJCSRib2R5X2VuY29kaW5nID0gJDE7CiAJCQkJCX0KIAkJCQkJcHVzaCBAeGgsICRfOwpkaWZmIC0tZ2l0IGEvZ2l0LXN0YXNoLnNoIGIvZ2l0LXN0YXNoLnNoCmluZGV4IGMyYjY4MjAuLjQ5MzhhZGUgMTAwNzU1Ci0tLSBhL2dpdC1zdGFzaC5zaAorKysgYi9naXQtc3Rhc2guc2gKQEAgLTE1LDggKzE1LDggQEAKIHJlZl9zdGFzaD1yZWZzL3N0YXNoCiAKIG5vX2NoYW5nZXMgKCkgewotCWdpdCBkaWZmLWluZGV4IC0tcXVpZXQgLS1jYWNoZWQgSEVBRCAtLSAmJgotCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQKKwlnaXQgZGlmZi1pbmRleCAtLXF1aWV0IC0tY2FjaGVkIEhFQUQgLS1pZ25vcmUtc3VibW9kdWxlcyAtLSAmJgorCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgLS1pZ25vcmUtc3VibW9kdWxlcwogfQogCiBjbGVhcl9zdGFzaCAoKSB7CkBAIC0xMzAsNyArMTMwLDcgQEAKIH0KIAogYXBwbHlfc3Rhc2ggKCkgewotCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgfHwKKwlnaXQgZGlmZi1maWxlcyAtLXF1aWV0IC0taWdub3JlLXN1Ym1vZHVsZXMgfHwKIAkJZGllICdDYW5ub3QgcmVzdG9yZSBvbiB0b3Agb2YgYSBkaXJ0eSBzdGF0ZScKIAogCXVuc3Rhc2hfaW5kZXg9CmRpZmYgLS1naXQgYS9naXQtc3VibW9kdWxlLnNoIGIvZ2l0LXN1Ym1vZHVsZS5zaAppbmRleCBhNzQ1ZTQyLi4yMWU1YjViIDEwMDc1NQotLS0gYS9naXQtc3VibW9kdWxlLnNoCisrKyBiL2dpdC1zdWJtb2R1bGUuc2gKQEAgLTUsNyArNSw3IEBACiAjIENvcHlyaWdodCAoYykgMjAwNyBMYXJzIEhqZW1saQogCiBVU0FHRT0iWy0tcXVpZXRdIFstLWNhY2hlZF0gXAotW2FkZCA8cmVwbz4gWy1iIGJyYW5jaF18c3RhdHVzfGluaXR8dXBkYXRlfHN1bW1hcnkgWy1ufC0tc3VtbWFyeS1saW1pdCA8bj5dIFs8Y29tbWl0Pl1dIFwKK1thZGQgPHJlcG8+IFstYiBicmFuY2hdfHN0YXR1c3xpbml0fHVwZGF0ZSBbLWl8LS1pbml0XXxzdW1tYXJ5IFstbnwtLXN1bW1hcnktbGltaXQgPG4+XSBbPGNvbW1pdD5dXSBcCiBbLS1dIFs8cGF0aD4uLi5dIgogT1BUSU9OU19TUEVDPQogLiBnaXQtc2gtc2V0dXAKQEAgLTQ1LDggKzQ1LDggQEAKIAlicmFuY2g9IiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEIDI+L2Rldi9udWxsKSIKIAlyZW1vdGU9IiQoZ2l0IGNvbmZpZyBicmFuY2guJHticmFuY2gjcmVmcy9oZWFkcy99LnJlbW90ZSkiCiAJcmVtb3RlPSIke3JlbW90ZTotb3JpZ2lufSIKLQlyZW1vdGV1cmw9IiQoZ2l0IGNvbmZpZyByZW1vdGUuJHJlbW90ZS51cmwpIiB8fAotCQlkaWUgInJlbW90ZSAoJHJlbW90ZSkgZG9lcyBub3QgaGF2ZSBhIHVybCBpbiAuZ2l0L2NvbmZpZyIKKwlyZW1vdGV1cmw9JChnaXQgY29uZmlnICJyZW1vdGUuJHJlbW90ZS51cmwiKSB8fAorCQlkaWUgInJlbW90ZSAoJHJlbW90ZSkgZG9lcyBub3QgaGF2ZSBhIHVybCBkZWZpbmVkIGluIC5naXQvY29uZmlnIgogCXVybD0iJDEiCiAJd2hpbGUgdGVzdCAtbiAiJHVybCIKIAlkbwpAQCAtNzMsOSArNzMsOCBAQAogbW9kdWxlX25hbWUoKQogewogCSMgRG8gd2UgaGF2ZSAic3VibW9kdWxlLjxzb21ldGhpbmc+LnBhdGggPSAkMSIgZGVmaW5lZCBpbiAuZ2l0bW9kdWxlcyBmaWxlPwotCXJlPSQocHJpbnRmICclcycgIiQxIiB8IHNlZCAtZSAncy9bXS5bXiRcXCpdL1xcJi9nJykKLQluYW1lPSQoIEdJVF9DT05GSUc9LmdpdG1vZHVsZXMgXAotCQlnaXQgY29uZmlnIC0tZ2V0LXJlZ2V4cCAnXnN1Ym1vZHVsZVwuLipcLnBhdGgkJyB8CisJcmU9JChwcmludGYgJyVzXG4nICIkMSIgfCBzZWQgLWUgJ3MvW10uW14kXFwqXS9cXCYvZycpCisJbmFtZT0kKCBnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIC0tZ2V0LXJlZ2V4cCAnXnN1Ym1vZHVsZVwuLipcLnBhdGgkJyB8CiAJCXNlZCAtbiAtZSAnc3xec3VibW9kdWxlXC5cKC4qXClcLnBhdGggJyIkcmUiJyR8XDF8cCcgKQogICAgICAgIHRlc3QgLXogIiRuYW1lIiAmJgogICAgICAgIGRpZSAiTm8gc3VibW9kdWxlIG1hcHBpbmcgZm91bmQgaW4gLmdpdG1vZHVsZXMgZm9yIHBhdGggJyRwYXRoJyIKQEAgLTE2OCw4ICsxNjcsNyBAQAogCSMgcGVyaGFwcyB0aGUgcGF0aCBleGlzdHMgYW5kIGlzIGFscmVhZHkgYSBnaXQgcmVwbywgZWxzZSBjbG9uZSBpdAogCWlmIHRlc3QgLWUgIiRwYXRoIgogCXRoZW4KLQkJaWYgdGVzdCAtZCAiJHBhdGgvLmdpdCIgJiYKLQkJdGVzdCAiJCh1bnNldCBHSVRfRElSOyBjZCAkcGF0aDsgZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIpIiA9ICIuZ2l0IgorCQlpZiB0ZXN0IC1kICIkcGF0aCIvLmdpdCAtbyAtZiAiJHBhdGgiLy5naXQKIAkJdGhlbgogCQkJZWNobyAiQWRkaW5nIGV4aXN0aW5nIHJlcG8gYXQgJyRwYXRoJyB0byB0aGUgaW5kZXgiCiAJCWVsc2UKQEAgLTE3OSw3ICsxNzcsOCBAQAogCQljYXNlICIkcmVwbyIgaW4KIAkJLi8qfC4uLyopCiAJCQkjIGRlcmVmZXJlbmNlIHNvdXJjZSB1cmwgcmVsYXRpdmUgdG8gcGFyZW50J3MgdXJsCi0JCQlyZWFscmVwbz0iJChyZXNvbHZlX3JlbGF0aXZlX3VybCAkcmVwbykiIDs7CisJCQlyZWFscmVwbz0kKHJlc29sdmVfcmVsYXRpdmVfdXJsICIkcmVwbyIpIHx8IGV4aXQKKwkJCTs7CiAJCSopCiAJCQkjIFR1cm4gdGhlIHNvdXJjZSBpbnRvIGFuIGFic29sdXRlIHBhdGggaWYKIAkJCSMgaXQgaXMgbG9jYWwKQEAgLTE5OCw4ICsxOTcsOCBAQAogCWdpdCBhZGQgIiRwYXRoIiB8fAogCWRpZSAiRmFpbGVkIHRvIGFkZCBzdWJtb2R1bGUgJyRwYXRoJyIKIAotCUdJVF9DT05GSUc9LmdpdG1vZHVsZXMgZ2l0IGNvbmZpZyBzdWJtb2R1bGUuIiRwYXRoIi5wYXRoICIkcGF0aCIgJiYKLQlHSVRfQ09ORklHPS5naXRtb2R1bGVzIGdpdCBjb25maWcgc3VibW9kdWxlLiIkcGF0aCIudXJsICIkcmVwbyIgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS4iJHBhdGgiLnBhdGggIiRwYXRoIiAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLiIkcGF0aCIudXJsICIkcmVwbyIgJiYKIAlnaXQgYWRkIC5naXRtb2R1bGVzIHx8CiAJZGllICJGYWlsZWQgdG8gcmVnaXN0ZXIgc3VibW9kdWxlICckcGF0aCciCiB9CkBAIC0yNDAsMTQgKzIzOSwxNCBAQAogCQl1cmw9JChnaXQgY29uZmlnIHN1Ym1vZHVsZS4iJG5hbWUiLnVybCkKIAkJdGVzdCAteiAiJHVybCIgfHwgY29udGludWUKIAotCQl1cmw9JChHSVRfQ09ORklHPS5naXRtb2R1bGVzIGdpdCBjb25maWcgc3VibW9kdWxlLiIkbmFtZSIudXJsKQorCQl1cmw9JChnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS4iJG5hbWUiLnVybCkKIAkJdGVzdCAteiAiJHVybCIgJiYKIAkJZGllICJObyB1cmwgZm91bmQgZm9yIHN1Ym1vZHVsZSBwYXRoICckcGF0aCcgaW4gLmdpdG1vZHVsZXMiCiAKIAkJIyBQb3NzaWJseSBhIHVybCByZWxhdGl2ZSB0byBwYXJlbnQKIAkJY2FzZSAiJHVybCIgaW4KIAkJLi8qfC4uLyopCi0JCQl1cmw9IiQocmVzb2x2ZV9yZWxhdGl2ZV91cmwgIiR1cmwiKSIKKwkJCXVybD0kKHJlc29sdmVfcmVsYXRpdmVfdXJsICIkdXJsIikgfHwgZXhpdAogCQkJOzsKIAkJZXNhYwogCkBAIC0yNzAsOCArMjY5LDEzIEBACiAJZG8KIAkJY2FzZSAiJDEiIGluCiAJCS1xfC0tcXVpZXQpCisJCQlzaGlmdAogCQkJcXVpZXQ9MQogCQkJOzsKKwkJLWl8LS1pbml0KQorCQkJc2hpZnQKKwkJCWNtZF9pbml0ICIkQCIgfHwgcmV0dXJuCisJCQk7OwogCQktLSkKIAkJCXNoaWZ0CiAJCQlicmVhawpAQCAtMjgzLDcgKzI4Nyw2IEBACiAJCQlicmVhawogCQkJOzsKIAkJZXNhYwotCQlzaGlmdAogCWRvbmUKIAogCWdpdCBscy1maWxlcyAtLXN0YWdlIC0tICIkQCIgfCBncmVwICdeMTYwMDAwICcgfApAQCAtMjk3LDEwICszMDAsMTEgQEAKIAkJCSMgcGF0aCBoYXZlIGJlZW4gc3BlY2lmaWVkCiAJCQl0ZXN0ICIkIyIgIT0gIjAiICYmCiAJCQlzYXkgIlN1Ym1vZHVsZSBwYXRoICckcGF0aCcgbm90IGluaXRpYWxpemVkIgorCQkJc2F5ICJNYXliZSB5b3Ugd2FudCB0byB1c2UgJ3VwZGF0ZSAtLWluaXQnPyIKIAkJCWNvbnRpbnVlCiAJCWZpCiAKLQkJaWYgISB0ZXN0IC1kICIkcGF0aCIvLmdpdAorCQlpZiAhIHRlc3QgLWQgIiRwYXRoIi8uZ2l0IC1vIC1mICIkcGF0aCIvLmdpdAogCQl0aGVuCiAJCQltb2R1bGVfY2xvbmUgIiRwYXRoIiAiJHVybCIgfHwgZXhpdAogCQkJc3Vic2hhMT0KQEAgLTM0Myw2ICszNDcsNyBAQAogIwogY21kX3N1bW1hcnkoKSB7CiAJc3VtbWFyeV9saW1pdD0tMQorCWZvcl9zdGF0dXM9CiAKIAkjIHBhcnNlICRhcmdzIGFmdGVyICJzdWJtb2R1bGUgLi4uIHN1bW1hcnkiLgogCXdoaWxlIHRlc3QgJCMgLW5lIDAKQEAgLTM1MSw2ICszNTYsOSBAQAogCQktLWNhY2hlZCkKIAkJCWNhY2hlZD0iJDEiCiAJCQk7OworCQktLWZvci1zdGF0dXMpCisJCQlmb3Jfc3RhdHVzPSIkMSIKKwkJCTs7CiAJCS1ufC0tc3VtbWFyeS1saW1pdCkKIAkJCWlmIHN1bW1hcnlfbGltaXQ9JCgoJDIgKyAwKSkgMj4vZGV2L251bGwgJiYgdGVzdCAiJHN1bW1hcnlfbGltaXQiID0gIiQyIgogCQkJdGhlbgpAQCAtMzk4LDcgKzQwNiw4IEBACiAJCWRvbmUKIAkpCiAKLQl0ZXN0IC1uICIkbW9kdWxlcyIgJiYKKwl0ZXN0IC16ICIkbW9kdWxlcyIgJiYgcmV0dXJuCisKIAlnaXQgZGlmZi1pbmRleCAkY2FjaGVkIC0tcmF3ICRoZWFkIC0tICRtb2R1bGVzIHwKIAlncmVwIC1lICdeOjE2MDAwMCcgLWUgJ146WzAtN10qIDE2MDAwMCcgfAogCWN1dCAtYzItIHwKQEAgLTUwMCw3ICs1MDksMTQgQEAKIAkJCWVjaG8KIAkJZmkKIAkJZWNobwotCWRvbmUKKwlkb25lIHwKKwlpZiB0ZXN0IC1uICIkZm9yX3N0YXR1cyI7IHRoZW4KKwkJZWNobyAiIyBNb2RpZmllZCBzdWJtb2R1bGVzOiIKKwkJZWNobyAiIyIKKwkJc2VkIC1lICdzfF58IyB8JyAtZSAnc3xeIyAkfCN8JworCWVsc2UKKwkJY2F0CisJZmkKIH0KICMKICMgTGlzdCBhbGwgc3VibW9kdWxlcywgcHJlZml4ZWQgd2l0aDoKQEAgLTU0Myw3ICs1NTksNyBAQAogCWRvCiAJCW5hbWU9JChtb2R1bGVfbmFtZSAiJHBhdGgiKSB8fCBleGl0CiAJCXVybD0kKGdpdCBjb25maWcgc3VibW9kdWxlLiIkbmFtZSIudXJsKQotCQlpZiB0ZXN0IC16ICIkdXJsIiB8fCAhIHRlc3QgLWQgIiRwYXRoIi8uZ2l0CisJCWlmIHRlc3QgLXogIiR1cmwiIHx8ICEgdGVzdCAtZCAiJHBhdGgiLy5naXQgLW8gLWYgIiRwYXRoIi8uZ2l0CiAJCXRoZW4KIAkJCXNheSAiLSRzaGExICRwYXRoIgogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9naXQtc3ZuLnBlcmwgYi9naXQtc3ZuLnBlcmwKaW5kZXggYjE1MTA0OS4uYTM2NmM4OSAxMDA3NTUKLS0tIGEvZ2l0LXN2bi5wZXJsCisrKyBiL2dpdC1zdm4ucGVybApAQCAtNCw3ICs0LDcgQEAKIHVzZSB3YXJuaW5nczsKIHVzZSBzdHJpY3Q7CiB1c2UgdmFycyBxdy8JJEFVVEhPUiAkVkVSU0lPTgotCQkkc2hhMSAkc2hhMV9zaG9ydCAkX3JldmlzaW9uCisJCSRzaGExICRzaGExX3Nob3J0ICRfcmV2aXNpb24gJF9yZXBvc2l0b3J5CiAJCSRfcSAkX2F1dGhvcnMgJXVzZXJzLzsKICRBVVRIT1IgPSAnRXJpYyBXb25nIDxub3JtYWxwZXJzb25AeWhidC5uZXQ+JzsKICRWRVJTSU9OID0gJ0BAR0lUX1ZFUlNJT05AQCc7CkBAIC02NSw3ICs2NSw4IEBACiAJJF90ZW1wbGF0ZSwgJF9zaGFyZWQsCiAJJF92ZXJzaW9uLCAkX2ZldGNoX2FsbCwgJF9ub19yZWJhc2UsCiAJJF9tZXJnZSwgJF9zdHJhdGVneSwgJF9kcnlfcnVuLCAkX2xvY2FsLAotCSRfcHJlZml4LCAkX25vX2NoZWNrb3V0LCAkX3VybCwgJF92ZXJib3NlKTsKKwkkX3ByZWZpeCwgJF9ub19jaGVja291dCwgJF91cmwsICRfdmVyYm9zZSwKKwkkX2dpdF9mb3JtYXQpOwogJEdpdDo6U1ZOOjpfZm9sbG93X3BhcmVudCA9IDE7CiBteSAlcmVtb3RlX29wdHMgPSAoICd1c2VybmFtZT1zJyA9PiBcJEdpdDo6U1ZOOjpQcm9tcHQ6Ol91c2VybmFtZSwKICAgICAgICAgICAgICAgICAgICAgJ2NvbmZpZy1kaXI9cycgPT4gXCRHaXQ6OlNWTjo6UmE6OmNvbmZpZ19kaXIsCkBAIC04Miw2ICs4Myw3IEBACiAJCSdyZXBhY2stZmxhZ3N8cmVwYWNrLWFyZ3N8cmVwYWNrLW9wdHM9cycgPT4KIAkJICAgXCRHaXQ6OlNWTjo6X3JlcGFja19mbGFncywKIAkJJ3VzZS1sb2ctYXV0aG9yJyA9PiBcJEdpdDo6U1ZOOjpfdXNlX2xvZ19hdXRob3IsCisJCSdhZGQtYXV0aG9yLWZyb20nID0+IFwkR2l0OjpTVk46Ol9hZGRfYXV0aG9yX2Zyb20sCiAJCSVyZW1vdGVfb3B0cyApOwogCiBteSAoJF90cnVuaywgJF90YWdzLCAkX2JyYW5jaGVzLCAkX3N0ZGxheW91dCk7CkBAIC0xNzUsNiArMTc3LDcgQEAKIAkJCSAgJ3N0cmF0ZWd5fHM9cycgPT4gXCRfc3RyYXRlZ3ksCiAJCQkgICdsb2NhbHxsJyA9PiBcJF9sb2NhbCwKIAkJCSAgJ2ZldGNoLWFsbHxhbGwnID0+IFwkX2ZldGNoX2FsbCwKKwkJCSAgJ2RyeS1ydW58bicgPT4gXCRfZHJ5X3J1biwKIAkJCSAgJWZjX29wdHMgfSBdLAogCSdjb21taXQtZGlmZicgPT4gWyBcJmNtZF9jb21taXRfZGlmZiwKIAkgICAgICAgICAgICAgICAgICAgJ0NvbW1pdCBhIGRpZmYgYmV0d2VlbiB0d28gdHJlZXMnLApAQCAtMTg4LDcgKzE5MSw3IEBACiAJCSAgICB7ICd1cmwnID0+IFwkX3VybCwgfSBdLAogCSdibGFtZScgPT4gWyBcJkdpdDo6U1ZOOjpMb2c6OmNtZF9ibGFtZSwKIAkgICAgICAgICAgICAiU2hvdyB3aGF0IHJldmlzaW9uIGFuZCBhdXRob3IgbGFzdCBtb2RpZmllZCBlYWNoIGxpbmUgb2YgYSBmaWxlIiwKLQkgICAgICAgICAgICB7fSBdLAorCQkgICAgeyAnZ2l0LWZvcm1hdCcgPT4gXCRfZ2l0X2Zvcm1hdCB9IF0sCiApOwogCiBteSAkY21kOwpAQCAtMjIwLDEyICsyMjMsMTMgQEAKIAkJfQogCQkkRU5We0dJVF9ESVJ9ID0gJGdpdF9kaXI7CiAJfQorCSRfcmVwb3NpdG9yeSA9IEdpdC0+cmVwb3NpdG9yeShSZXBvc2l0b3J5ID0+ICRFTlZ7R0lUX0RJUn0pOwogfQogCiBteSAlb3B0cyA9ICV7JGNtZHskY21kfS0+WzJdfSBpZiAoZGVmaW5lZCAkY21kKTsKIAogcmVhZF9yZXBvX2NvbmZpZyhcJW9wdHMpOwotR2V0b3B0OjpMb25nOjpDb25maWd1cmUoJ3Bhc3NfdGhyb3VnaCcpIGlmICgkY21kICYmICRjbWQgZXEgJ2xvZycpOworR2V0b3B0OjpMb25nOjpDb25maWd1cmUoJ3Bhc3NfdGhyb3VnaCcpIGlmICgkY21kICYmICgkY21kIGVxICdsb2cnIHx8ICRjbWQgZXEgJ2JsYW1lJykpOwogbXkgJHJ2ID0gR2V0T3B0aW9ucyglb3B0cywgJ2hlbHB8SHxoJyA9PiBcJF9oZWxwLCAndmVyc2lvbnxWJyA9PiBcJF92ZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAnbWluaW1pemUtY29ubmVjdGlvbnMnID0+IFwkR2l0OjpTVk46Ok1pZ3JhdGlvbjo6X21pbmltaXplLAogICAgICAgICAgICAgICAgICAgICAnaWR8aT1zJyA9PiBcJEdpdDo6U1ZOOjpkZWZhdWx0X3JlZl9pZCwKQEAgLTMwMSw2ICszMDUsNyBAQAogCQkJfQogCQl9CiAJCWNvbW1hbmRfbm9pc3koQGluaXRfZGIpOworCQkkX3JlcG9zaXRvcnkgPSBHaXQtPnJlcG9zaXRvcnkoUmVwb3NpdG9yeSA9PiAiLmdpdCIpOwogCX0KIAlteSAkc2V0OwogCW15ICRwZnggPSAic3ZuLXJlbW90ZS4kR2l0OjpTVk46OmRlZmF1bHRfcmVwb19pZCI7CkBAIC0zMTcsNiArMzIyLDcgQEAKIAlta3BhdGgoWyRyZXBvX3BhdGhdKSB1bmxlc3MgLWQgJHJlcG9fcGF0aDsKIAljaGRpciAkcmVwb19wYXRoIG9yIGRpZSAiQ291bGRuJ3QgY2hkaXIgdG8gJHJlcG9fcGF0aDogJCFcbiI7CiAJJEVOVntHSVRfRElSfSA9ICcuZ2l0JzsKKwkkX3JlcG9zaXRvcnkgPSBHaXQtPnJlcG9zaXRvcnkoUmVwb3NpdG9yeSA9PiAkRU5We0dJVF9ESVJ9KTsKIH0KIAogc3ViIGNtZF9jbG9uZSB7CkBAIC00MTAsMTAgKzQxNiwxMiBAQAogCSRoZWFkIHx8PSAnSEVBRCc7CiAJbXkgQHJlZnM7CiAJbXkgKCR1cmwsICRyZXYsICR1dWlkLCAkZ3MpID0gd29ya2luZ19oZWFkX2luZm8oJGhlYWQsIFxAcmVmcyk7Ci0JcHJpbnQgIkNvbW1pdHRpbmcgdG8gJHVybCAuLi5cbiI7CisJaWYgKCR1cmwpIHsKKwkJcHJpbnQgIkNvbW1pdHRpbmcgdG8gJHVybCAuLi5cbiI7CisJfQogCXVubGVzcyAoJGdzKSB7CiAJCWRpZSAiVW5hYmxlIHRvIGRldGVybWluZSB1cHN0cmVhbSBTVk4gaW5mb3JtYXRpb24gZnJvbSAiLAotCQkgICAgIiRoZWFkIGhpc3RvcnlcbiI7CisJCSAgICAiJGhlYWQgaGlzdG9yeS5cblBlcmhhcHMgdGhlIHJlcG9zaXRvcnkgaXMgZW1wdHkuIjsKIAl9CiAJbXkgJGxhc3RfcmV2OwogCW15ICgkbGluZWFyX3JlZnMsICRwYXJlbnRzKSA9IGxpbmVhcml6ZV9oaXN0b3J5KCRncywgXEByZWZzKTsKQEAgLTU1MCw2ICs1NTgsMTEgQEAKIAkJZGllICJVbmFibGUgdG8gZGV0ZXJtaW5lIHVwc3RyZWFtIFNWTiBpbmZvcm1hdGlvbiBmcm9tICIsCiAJCSAgICAid29ya2luZyB0cmVlIGhpc3RvcnlcbiI7CiAJfQorCWlmICgkX2RyeV9ydW4pIHsKKwkJcHJpbnQgIlJlbW90ZSBCcmFuY2g6ICIgLiAkZ3MtPnJlZm5hbWUgLiAiXG4iOworCQlwcmludCAiU1ZOIFVSTDogIiAuICR1cmwgLiAiXG4iOworCQlyZXR1cm47CisJfQogCWlmIChjb21tYW5kKHF3L2RpZmYtaW5kZXggSEVBRCAtLS8pKSB7CiAJCXByaW50IFNUREVSUiAiQ2Fubm90IHJlYmFzZSB3aXRoIHVuY29tbWl0ZWQgY2hhbmdlczpcbiI7CiAJCWNvbW1hbmRfbm9pc3koJ3N0YXR1cycpOwpAQCAtNjEyLDcgKzYyNSw3IEBACiAJCXByaW50IEdJVElHTk9SRSAiJHNcbiI7CiAJCWNsb3NlKEdJVElHTk9SRSkKIAkJICBvciBmYXRhbCgiRmFpbGVkIHRvIGNsb3NlIGAkaWdub3JlJzogJCEiKTsKLQkJY29tbWFuZF9ub2lzeSgnYWRkJywgJGlnbm9yZSk7CisJCWNvbW1hbmRfbm9pc3koJ2FkZCcsICctZicsICRpZ25vcmUpOwogCX0pOwogfQogCkBAIC02MzAsNiArNjQzLDggQEAKIAkkcGF0aCA9fiBzIy9bXi9dKy9cLlwuIyNnOwogCSRwYXRoID1+IHMjLyQjI2c7CiAJJHBhdGggPX4gcyNeXC4vIyMgaWYgJGRvdF9zbGFzaF9hZGRlZDsKKwkkcGF0aCA9fiBzI14vIyM7CisJJHBhdGggPX4gcyNeXC4kIyM7CiAJcmV0dXJuICRwYXRoOwogfQogCkBAIC03MzgsNyArNzUzLDcgQEAKIAlteSAkdXNhZ2UgPSAiVXNhZ2U6ICQwIGNvbW1pdC1kaWZmIC1yPHJldmlzaW9uPiAiLgogCSAgICAgICAgICAgICI8dHJlZS1pc2g+IDx0cmVlLWlzaD4gWzxVUkw+XSI7CiAJZmF0YWwoJHVzYWdlKSBpZiAoIWRlZmluZWQgJHRhIHx8ICFkZWZpbmVkICR0Yik7Ci0JbXkgJHN2bl9wYXRoOworCW15ICRzdm5fcGF0aCA9ICcnOwogCWlmICghZGVmaW5lZCAkdXJsKSB7CiAJCW15ICRncyA9IGV2YWwgeyBHaXQ6OlNWTi0+bmV3IH07CiAJCWlmICghJGdzKSB7CkBAIC03NjIsNyArNzc3LDYgQEAKIAkJJF9tZXNzYWdlIHx8PSBnZXRfY29tbWl0X2VudHJ5KCR0YiktPntsb2d9OwogCX0KIAlteSAkcmEgfHw9IEdpdDo6U1ZOOjpSYS0+bmV3KCR1cmwpOwotCSRzdm5fcGF0aCB8fD0gJHJhLT57c3ZuX3BhdGh9OwogCW15ICRyID0gJF9yZXZpc2lvbjsKIAlpZiAoJHIgZXEgJ0hFQUQnKSB7CiAJCSRyID0gJHJhLT5nZXRfbGF0ZXN0X3Jldm51bTsKQEAgLTEwMDksMTcgKzEwMjMsMzAgQEAKIAkJbXkgKCRtc2dfZmgsICRjdHgpID0gY29tbWFuZF9vdXRwdXRfcGlwZSgnY2F0LWZpbGUnLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlLCAkdHJlZWlzaCk7CiAJCW15ICRpbl9tc2cgPSAwOworCQlteSAkYXV0aG9yOworCQlteSAkc2F3X2Zyb20gPSAwOworCQlteSAkbXNnYnVmID0gIiI7CiAJCXdoaWxlICg8JG1zZ19maD4pIHsKIAkJCWlmICghJGluX21zZykgewogCQkJCSRpbl9tc2cgPSAxIGlmICgvXlxzKiQvKTsKKwkJCQkkYXV0aG9yID0gJDEgaWYgKC9eYXV0aG9yICguKj4pLyk7CiAJCQl9IGVsc2lmICgvXmdpdC1zdm4taWQ6IC8pIHsKIAkJCQkjIHNraXAgdGhpcyBmb3Igbm93LCB3ZSByZWdlbmVyYXRlIHRoZQogCQkJCSMgY29ycmVjdCBvbmUgb24gcmUtZmV0Y2ggYW55d2F5cwogCQkJCSMgVE9ETzogc2V0ICo6bWVyZ2UgcHJvcGVydGllcyBvciBsaWtlLi4uCiAJCQl9IGVsc2UgewotCQkJCXByaW50ICRsb2dfZmggJF8gb3IgY3JvYWsgJCE7CisJCQkJaWYgKC9eRnJvbTovIHx8IC9eU2lnbmVkLW9mZi1ieTovKSB7CisJCQkJCSRzYXdfZnJvbSA9IDE7CisJCQkJfQorCQkJCSRtc2didWYgLj0gJF87CiAJCQl9CiAJCX0KKwkJJG1zZ2J1ZiA9fiBzL1xzKyQvL3M7CisJCWlmICgkR2l0OjpTVk46Ol9hZGRfYXV0aG9yX2Zyb20gJiYgZGVmaW5lZCgkYXV0aG9yKQorCQkgICAgJiYgISRzYXdfZnJvbSkgeworCQkJJG1zZ2J1ZiAuPSAiXG5cbkZyb206ICRhdXRob3IiOworCQl9CisJCXByaW50ICRsb2dfZmggJG1zZ2J1ZiBvciBjcm9hayAkITsKIAkJY29tbWFuZF9jbG9zZV9waXBlKCRtc2dfZmgsICRjdHgpOwogCX0KIAljbG9zZSAkbG9nX2ZoIG9yIGNyb2FrICQhOwpAQCAtMTI0Niw3ICsxMjczLDcgQEAKIHVzZSB2YXJzIHF3LyRkZWZhdWx0X3JlcG9faWQgJGRlZmF1bHRfcmVmX2lkICRfbm9fbWV0YWRhdGEgJF9mb2xsb3dfcGFyZW50CiAgICAgICAgICAgICAkX3JlcGFjayAkX3JlcGFja19mbGFncyAkX3VzZV9zdm1fcHJvcHMgJF9oZWFkCiAgICAgICAgICAgICAkX3VzZV9zdm5zeW5jX3Byb3BzICRub19yZXVzZV9leGlzdGluZyAkX21pbmltaXplX3VybAotCSAgICAkX3VzZV9sb2dfYXV0aG9yLzsKKwkgICAgJF91c2VfbG9nX2F1dGhvciAkX2FkZF9hdXRob3JfZnJvbS87CiB1c2UgQ2FycCBxdy9jcm9hay87CiB1c2UgRmlsZTo6UGF0aCBxdy9ta3BhdGgvOwogdXNlIEZpbGU6OkNvcHkgcXcvY29weS87CkBAIC0xNDM3LDEzICsxNDY0LDYgQEAKIAl9CiB9CiAKLSMgd2UgYWxsb3cgbW9yZSBjaGFycyB0aGFuIHJlbW90ZXMyY29uZmlnLnNoLi4uCi1zdWIgc2FuaXRpemVfcmVtb3RlX25hbWUgewotCW15ICgkbmFtZSkgPSBAXzsKLQkkbmFtZSA9fiB0cntBLVphLXowLTk6LC8rLX17Ln1jOwotCSRuYW1lOwotfQotCiBzdWIgZmluZF9leGlzdGluZ19yZW1vdGUgewogCW15ICgkdXJsLCAkcmVtb3RlcykgPSBAXzsKIAlyZXR1cm4gdW5kZWYgaWYgJG5vX3JldXNlX2V4aXN0aW5nOwpAQCAtMTkwMCw3ICsxOTIwLDcgQEAKIAogCWZvcmVhY2ggKHNvcnQga2V5cyAlJGRpcmVudCkgewogCQluZXh0IGlmICRkaXJlbnQtPnskX30tPntraW5kfSAhPSAkU1ZOOjpOb2RlOjpkaXI7Ci0JCSRzZWxmLT5wcm9wX3dhbGsoJHAgLiAkXywgJHJldiwgJHN1Yik7CisJCSRzZWxmLT5wcm9wX3dhbGsoJHNlbGYtPntwYXRofSAuICRwIC4gJF8sICRyZXYsICRzdWIpOwogCX0KIH0KIApAQCAtMjQyNiwxMyArMjQ0NiwxNSBAQAogCQkJJG5hbWVfZmllbGQgPSAkMTsKIAkJfQogCQlpZiAoIWRlZmluZWQgJG5hbWVfZmllbGQpIHsKLQkJCSMKKwkJCWlmICghZGVmaW5lZCAkZW1haWwpIHsKKwkJCQkkZW1haWwgPSAkbmFtZTsKKwkJCX0KIAkJfSBlbHNpZiAoJG5hbWVfZmllbGQgPX4gLyguKj8pXHMrPCguKik+LykgewogCQkJKCRuYW1lLCAkZW1haWwpID0gKCQxLCAkMik7CiAJCX0gZWxzaWYgKCRuYW1lX2ZpZWxkID1+IC8oLiopQC8pIHsKIAkJCSgkbmFtZSwgJGVtYWlsKSA9ICgkMSwgJG5hbWVfZmllbGQpOwogCQl9IGVsc2UgewotCQkJKCRuYW1lLCAkZW1haWwpID0gKCRuYW1lX2ZpZWxkLCAndW5rbm93bicpOworCQkJKCRuYW1lLCAkZW1haWwpID0gKCRuYW1lX2ZpZWxkLCAkbmFtZV9maWVsZCk7CiAJCX0KIAl9CiAJaWYgKGRlZmluZWQgJGhlYWRyZXYgJiYgJHNlbGYtPnVzZV9zdm1fcHJvcHMpIHsKQEAgLTI1NTAsOCArMjU3Miw4IEBACiAJbXkgKCRsb2csICRjdHgpID0KIAkgICAgY29tbWFuZF9vdXRwdXRfcGlwZShxdy9yZXYtbGlzdCAtLXByZXR0eT1yYXcgLS1uby1jb2xvciAtLXJldmVyc2UvLAogCSAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT5yZWZuYW1lLCAnLS0nKTsKLQlteSAkZnVsbF91cmwgPSAkc2VsZi0+ZnVsbF91cmw7Ci0JcmVtb3ZlX3VzZXJuYW1lKCRmdWxsX3VybCk7CisJbXkgJG1ldGFkYXRhX3VybCA9ICRzZWxmLT5tZXRhZGF0YV91cmw7CisJcmVtb3ZlX3VzZXJuYW1lKCRtZXRhZGF0YV91cmwpOwogCW15ICRzdm5fdXVpZCA9ICRzZWxmLT5yYV91dWlkOwogCW15ICRjOwogCXdoaWxlICg8JGxvZz4pIHsKQEAgLTI1NjksNyArMjU5MSw3IEBACiAJCSMgaWYgd2UgbWVyZ2VkIG9yIG90aGVyd2lzZSBzdGFydGVkIGVsc2V3aGVyZSwgdGhpcyBpcwogCQkjIGhvdyB3ZSBicmVhayBvdXQgb2YgaXQKIAkJaWYgKCgkdXVpZCBuZSAkc3ZuX3V1aWQpIHx8Ci0JCSAgICAoJGZ1bGxfdXJsICYmICR1cmwgJiYgKCR1cmwgbmUgJGZ1bGxfdXJsKSkpIHsKKwkJICAgICgkbWV0YWRhdGFfdXJsICYmICR1cmwgJiYgKCR1cmwgbmUgJG1ldGFkYXRhX3VybCkpKSB7CiAJCQluZXh0OwogCQl9CiAKQEAgLTI4MjYsNyArMjg0OCw3IEBACiAJdW5sZXNzIChkZWZpbmVkICRyZWZfaWQgJiYgbGVuZ3RoICRyZWZfaWQpIHsKIAkJJF9bMl0gPSAkcmVmX2lkID0gJEdpdDo6U1ZOOjpkZWZhdWx0X3JlZl9pZDsKIAl9Ci0JJF9bMV0gPSAkcmVwb19pZCA9IHNhbml0aXplX3JlbW90ZV9uYW1lKCRyZXBvX2lkKTsKKwkkX1sxXSA9ICRyZXBvX2lkOwogCW15ICRkaXIgPSAiJEVOVntHSVRfRElSfS9zdm4vJHJlZl9pZCI7CiAJJF9bM10gPSAkcGF0aCA9ICcnIHVubGVzcyAoZGVmaW5lZCAkcGF0aCk7CiAJbWtwYXRoKFsiJEVOVntHSVRfRElSfS9zdm4iXSk7CkBAIC0zMDEzLDYgKzMwMzUsNyBAQAogdXNlIHN0cmljdDsKIHVzZSB3YXJuaW5nczsKIHVzZSBDYXJwIHF3L2Nyb2FrLzsKK3VzZSBGaWxlOjpUZW1wIHF3L3RlbXBmaWxlLzsKIHVzZSBJTzo6RmlsZSBxdy8vOwogCiAjIGZpbGUgYmF0b24gbWVtYmVyczogcGF0aCwgbW9kZV9hLCBtb2RlX2IsIHBvb2wsIGZoLCBibG9iLCBiYXNlCkBAIC0zMTY4LDE0ICszMTkxLDkgQEAKIAlteSAkYmFzZSA9IElPOjpGaWxlLT5uZXdfdG1wZmlsZTsKIAkkYmFzZS0+YXV0b2ZsdXNoKDEpOwogCWlmICgkZmItPntibG9ifSkgewotCQlkZWZpbmVkIChteSAkcGlkID0gZm9yaykgb3IgY3JvYWsgJCE7Ci0JCWlmICghJHBpZCkgewotCQkJb3BlbiBTVERPVVQsICc+JicsICRiYXNlIG9yIGNyb2FrICQhOwotCQkJcHJpbnQgU1RET1VUICdsaW5rICcgaWYgKCRmYi0+e21vZGVfYX0gPT0gMTIwMDAwKTsKLQkJCWV4ZWMgcXcvZ2l0LWNhdC1maWxlIGJsb2IvLCAkZmItPntibG9ifSBvciBjcm9hayAkITsKLQkJfQotCQl3YWl0cGlkICRwaWQsIDA7Ci0JCWNyb2FrICQ/IGlmICQ/OworCQlwcmludCAkYmFzZSAnbGluayAnIGlmICgkZmItPnttb2RlX2F9ID09IDEyMDAwMCk7CisJCW15ICRzaXplID0gJDo6X3JlcG9zaXRvcnktPmNhdF9ibG9iKCRmYi0+e2Jsb2J9LCAkYmFzZSk7CisJCWRpZSAiRmFpbGVkIHRvIHJlYWQgb2JqZWN0ICRmYi0+e2Jsb2J9IiBpZiAoJHNpemUgPCAwKTsKIAogCQlpZiAoZGVmaW5lZCAkZXhwKSB7CiAJCQlzZWVrICRiYXNlLCAwLCAwIG9yIGNyb2FrICQhOwpAQCAtMzIxNiwxNCArMzIzNCwyMSBAQAogCQkJCXN5c3NlZWsoJGZoLCAwLCAwKSBvciBjcm9hayAkITsKIAkJCX0KIAkJfQotCQlkZWZpbmVkKG15ICRwaWQgPSBvcGVuIG15ICRvdXQsJy18Jykgb3IgZGllICJDYW4ndCBmb3JrOiAkIVxuIjsKLQkJaWYgKCEkcGlkKSB7Ci0JCQlvcGVuIFNURElOLCAnPCYnLCAkZmggb3IgY3JvYWsgJCE7Ci0JCQlleGVjIHF3L2dpdC1oYXNoLW9iamVjdCAtdyAtLXN0ZGluLyBvciBjcm9hayAkITsKKworCQlteSAoJHRtcF9maCwgJHRtcF9maWxlbmFtZSkgPSBGaWxlOjpUZW1wOjp0ZW1wZmlsZShVTkxJTksgPT4gMSk7CisJCW15ICRyZXN1bHQ7CisJCXdoaWxlICgkcmVzdWx0ID0gc3lzcmVhZCgkZmgsIG15ICRzdHJpbmcsIDEwMjQpKSB7CisJCQlteSAkd3JvdGUgPSBzeXN3cml0ZSgkdG1wX2ZoLCAkc3RyaW5nLCAkcmVzdWx0KTsKKwkJCWRlZmluZWQoJHdyb3RlKSAmJiAkd3JvdGUgPT0gJHJlc3VsdAorCQkJCW9yIGNyb2FrKCJ3cml0ZSAkdG1wX2ZpbGVuYW1lOiAkIVxuIik7CiAJCX0KLQkJY2hvbXAoJGhhc2ggPSBkbyB7IGxvY2FsICQvOyA8JG91dD4gfSk7Ci0JCWNsb3NlICRvdXQgb3IgY3JvYWsgJCE7CisJCWRlZmluZWQgJHJlc3VsdCBvciBjcm9hayAkITsKKwkJY2xvc2UgJHRtcF9maCBvciBjcm9hayAkITsKKwogCQljbG9zZSAkZmggb3IgY3JvYWsgJCE7CisKKwkJJGhhc2ggPSAkOjpfcmVwb3NpdG9yeS0+aGFzaF9hbmRfaW5zZXJ0X29iamVjdCgkdG1wX2ZpbGVuYW1lKTsKKwkJdW5saW5rKCR0bXBfZmlsZW5hbWUpOwogCQkkaGFzaCA9fiAvXlthLWZcZF17NDB9JC8gb3IgZGllICJub3QgYSBzaGExOiAkaGFzaFxuIjsKIAkJY2xvc2UgJGZiLT57YmFzZX0gb3IgY3JvYWsgJCE7CiAJfSBlbHNlIHsKQEAgLTM1NDksMTMgKzM1NzQsOCBAQAogCX0gZWxzaWYgKCRtLT57bW9kZV9hfSA9fiAvXjEyMC8gJiYgJG0tPnttb2RlX2J9ICF+IC9eMTIwLykgewogCQkkc2VsZi0+Y2hhbmdlX2ZpbGVfcHJvcCgkZmJhdCwnc3ZuOnNwZWNpYWwnLHVuZGVmKTsKIAl9Ci0JZGVmaW5lZChteSAkcGlkID0gZm9yaykgb3IgY3JvYWsgJCE7Ci0JaWYgKCEkcGlkKSB7Ci0JCW9wZW4gU1RET1VULCAnPiYnLCAkZmggb3IgY3JvYWsgJCE7Ci0JCWV4ZWMgcXcvZ2l0LWNhdC1maWxlIGJsb2IvLCAkbS0+e3NoYTFfYn0gb3IgY3JvYWsgJCE7Ci0JfQotCXdhaXRwaWQgJHBpZCwgMDsKLQljcm9hayAkPyBpZiAkPzsKKwlteSAkc2l6ZSA9ICQ6Ol9yZXBvc2l0b3J5LT5jYXRfYmxvYigkbS0+e3NoYTFfYn0sICRmaCk7CisJY3JvYWsgIkZhaWxlZCB0byByZWFkIG9iamVjdCAkbS0+e3NoYTFfYn0iIGlmICgkc2l6ZSA8IDApOwogCSRmaC0+Zmx1c2ggPT0gMCBvciBjcm9hayAkITsKIAlzZWVrICRmaCwgMCwgMCBvciBjcm9hayAkITsKIApAQCAtMzY2OSw3ICszNjg5LDcgQEAKIAlteSAoJHVyaSkgPSBAXzsKIAlteSBAdG1wOwogCWZvcmVhY2ggKHNwbGl0IG17L30sICR1cmkpIHsKLQkJcy8oW15cdy4lLV18JSg/IVthLWZBLUYwLTldezJ9KSkvc3ByaW50ZigiJSUlMDJYIixvcmQoJDEpKS9lZzsKKwkJcy8oW15cdy4lKy1dfCUoPyFbYS1mQS1GMC05XXsyfSkpL3NwcmludGYoIiUlJTAyWCIsb3JkKCQxKSkvZWc7CiAJCXB1c2ggQHRtcCwgJF87CiAJfQogCWpvaW4oJy8nLCBAdG1wKTsKQEAgLTQ0NjQsMTkgKzQ0ODQsNTEgQEAKIH0KIAogc3ViIGNtZF9ibGFtZSB7Ci0JbXkgJHBhdGggPSBzaGlmdDsKKwlteSAkcGF0aCA9IHBvcDsKIAogCWNvbmZpZ19wYWdlcigpOwogCXJ1bl9wYWdlcigpOwogCi0JbXkgKCRmaCwgJGN0eCkgPSBjb21tYW5kX291dHB1dF9waXBlKCdibGFtZScsIEBfLCAkcGF0aCk7Ci0Jd2hpbGUgKG15ICRsaW5lID0gPCRmaD4pIHsKLQkJaWYgKCRsaW5lID1+IC9eXF4/KFtbOnhkaWdpdDpdXSspXHMvKSB7Ci0JCQlteSAodW5kZWYsICRyZXYsIHVuZGVmKSA9IDo6Y210X21ldGFkYXRhKCQxKTsKLQkJCSRyZXYgPSBzcHJpbnRmKCclLTEwcycsICRyZXYpOwotCQkJJGxpbmUgPX4gcy9eXF4/W1s6eGRpZ2l0Ol1dKyhccykvJHJldiQxLzsKKwlteSAoJGZoLCAkY3R4LCAkcmV2KTsKKworCWlmICgkX2dpdF9mb3JtYXQpIHsKKwkJKCRmaCwgJGN0eCkgPSBjb21tYW5kX291dHB1dF9waXBlKCdibGFtZScsIEBfLCAkcGF0aCk7CisJCXdoaWxlIChteSAkbGluZSA9IDwkZmg+KSB7CisJCQlpZiAoJGxpbmUgPX4gL15cXj8oW1s6eGRpZ2l0Ol1dKylccy8pIHsKKwkJCQkjIFVuY29tbWl0dGVkIGVkaXRzIHNob3cgdXAgYXMgYSByZXYgSUQgb2YKKwkJCQkjIGFsbCB6ZXJvcywgd2hpY2ggd2UgY2FuJ3QgbG9vayB1cCB3aXRoCisJCQkJIyBjbXRfbWV0YWRhdGEKKwkJCQlpZiAoJDEgIX4gL14wKyQvKSB7CisJCQkJCSh1bmRlZiwgJHJldiwgdW5kZWYpID0KKwkJCQkJCTo6Y210X21ldGFkYXRhKCQxKTsKKwkJCQkJJHJldiA9ICcwJyBpZiAoISRyZXYpOworCQkJCX0gZWxzZSB7CisJCQkJCSRyZXYgPSAnMCc7CisJCQkJfQorCQkJCSRyZXYgPSBzcHJpbnRmKCclLTEwcycsICRyZXYpOworCQkJCSRsaW5lID1+IHMvXlxeP1tbOnhkaWdpdDpdXSsoXHMpLyRyZXYkMS87CisJCQl9CisJCQlwcmludCAkbGluZTsKIAkJfQotCQlwcmludCAkbGluZTsKKwl9IGVsc2UgeworCQkoJGZoLCAkY3R4KSA9IGNvbW1hbmRfb3V0cHV0X3BpcGUoJ2JsYW1lJywgJy1wJywgQF8sICdIRUFEJywKKwkJCQkJCSAgJy0tJywgJHBhdGgpOworCQlteSAoJHNoYTEpOworCQlteSAlYXV0aG9yczsKKwkJd2hpbGUgKG15ICRsaW5lID0gPCRmaD4pIHsKKwkJCWlmICgkbGluZSA9fiAvXihbWzp4ZGlnaXQ6XV17NDB9KVxzXGQrXHNcZCsvKSB7CisJCQkJJHNoYTEgPSAkMTsKKwkJCQkodW5kZWYsICRyZXYsIHVuZGVmKSA9IDo6Y210X21ldGFkYXRhKCQxKTsKKwkJCQkkcmV2ID0gJzAnIGlmICghJHJldik7CisJCQl9CisJCQllbHNpZiAoJGxpbmUgPX4gL15hdXRob3IgKC4qKS8pIHsKKwkJCQkkYXV0aG9yc3skcmV2fSA9ICQxOworCQkJCSRhdXRob3JzeyRyZXZ9ID1+IHMvXHMvXy9nOworCQkJfQorCQkJZWxzaWYgKCRsaW5lID1+IC9eXHQoLiopJC8pIHsKKwkJCQlwcmludGYoIiU2cyAlMTBzICVzXG4iLCAkcmV2LCAkYXV0aG9yc3skcmV2fSwgJDEpOworCQkJfQorCQl9CiAJfQogCWNvbW1hbmRfY2xvc2VfcGlwZSgkZmgsICRjdHgpOwogfQpAQCAtNDY1MCw4ICs0NzAyLDcgQEAKIAogCQkjIHNraXAgZXhpc3RpbmcgY2FzZXMgd2hlcmUgd2UgYWxyZWFkeSBjb25uZWN0IHRvIHRoZSByb290CiAJCWlmICgoJHJhLT57dXJsfSBlcSAkcmEtPntyZXBvc19yb290fSkgfHwKLQkJICAgIChHaXQ6OlNWTjo6c2FuaXRpemVfcmVtb3RlX25hbWUoJHJhLT57cmVwb3Nfcm9vdH0pIGVxCi0JCSAgICAgJHJlcG9faWQpKSB7CisJCSAgICAoJHJhLT57cmVwb3Nfcm9vdH0gZXEgJHJlcG9faWQpKSB7CiAJCQkkcm9vdF9yZXBvcy0+eyRyYS0+e3VybH19ID0gJHJlcG9faWQ7CiAJCQluZXh0OwogCQl9CkBAIC00NjkwLDggKzQ3NDEsNyBAQAogCWZvcmVhY2ggbXkgJHVybCAoa2V5cyAlJG5ld191cmxzKSB7CiAJCSMgc2VlIGlmIHdlIGNhbiByZS11c2UgYW4gZXhpc3RpbmcgW3N2bi1yZW1vdGUgInJlcG9faWQiXQogCQkjIGluc3RlYWQgb2YgY3JlYXRpbmcgYShuIHVnbHkpIG5ldyBzZWN0aW9uOgotCQlteSAkcmVwb19pZCA9ICRyb290X3JlcG9zLT57JHVybH0gfHwKLQkJICAgICAgICAgICAgICBHaXQ6OlNWTjo6c2FuaXRpemVfcmVtb3RlX25hbWUoJHVybCk7CisJCW15ICRyZXBvX2lkID0gJHJvb3RfcmVwb3MtPnskdXJsfSB8fCAkdXJsOwogCiAJCW15ICRmZXRjaCA9ICRuZXdfdXJscy0+eyR1cmx9OwogCQlmb3JlYWNoIG15ICRwYXRoIChrZXlzICUkZmV0Y2gpIHsKZGlmZiAtLWdpdCBhL2dpdC5jIGIvZ2l0LmMKaW5kZXggYzRlNDY0NGIuLjU5ZjBmY2MgMTAwNjQ0Ci0tLSBhL2dpdC5jCisrKyBiL2dpdC5jCkBAIC02LDYgKzYsOSBAQAogY29uc3QgY2hhciBnaXRfdXNhZ2Vfc3RyaW5nW10gPQogCSJnaXQgWy0tdmVyc2lvbl0gWy0tZXhlYy1wYXRoWz1HSVRfRVhFQ19QQVRIXV0gWy1wfC0tcGFnaW5hdGV8LS1uby1wYWdlcl0gWy0tYmFyZV0gWy0tZ2l0LWRpcj1HSVRfRElSXSBbLS13b3JrLXRyZWU9R0lUX1dPUktfVFJFRV0gWy0taGVscF0gQ09NTUFORCBbQVJHU10iOwogCitjb25zdCBjaGFyIGdpdF9tb3JlX2luZm9fc3RyaW5nW10gPQorCSJTZWUgJ2dpdCBoZWxwIENPTU1BTkQnIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGEgc3BlY2lmaWMgY29tbWFuZC4iOworCiBzdGF0aWMgaW50IGhhbmRsZV9vcHRpb25zKGNvbnN0IGNoYXIqKiogYXJndiwgaW50KiBhcmdjLCBpbnQqIGVudmNoYW5nZWQpCiB7CiAJaW50IGhhbmRsZWQgPSAwOwpAQCAtMjgzLDkgKzI4NiwxMCBAQAogCQl7ICJjaGVja291dC1pbmRleCIsIGNtZF9jaGVja291dF9pbmRleCwKIAkJCVJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFfSwKIAkJeyAiY2hlY2stcmVmLWZvcm1hdCIsIGNtZF9jaGVja19yZWZfZm9ybWF0IH0sCi0JCXsgImNoZWNrLWF0dHIiLCBjbWRfY2hlY2tfYXR0ciwgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfSwKKwkJeyAiY2hlY2stYXR0ciIsIGNtZF9jaGVja19hdHRyLCBSVU5fU0VUVVAgfSwKIAkJeyAiY2hlcnJ5IiwgY21kX2NoZXJyeSwgUlVOX1NFVFVQIH0sCiAJCXsgImNoZXJyeS1waWNrIiwgY21kX2NoZXJyeV9waWNrLCBSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRSB9LAorCQl7ICJjbG9uZSIsIGNtZF9jbG9uZSB9LAogCQl7ICJjbGVhbiIsIGNtZF9jbGVhbiwgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfSwKIAkJeyAiY29tbWl0IiwgY21kX2NvbW1pdCwgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfSwKIAkJeyAiY29tbWl0LXRyZWUiLCBjbWRfY29tbWl0X3RyZWUsIFJVTl9TRVRVUCB9LApAQCAtMjkzLDcgKzI5Nyw3IEBACiAJCXsgImNvdW50LW9iamVjdHMiLCBjbWRfY291bnRfb2JqZWN0cywgUlVOX1NFVFVQIH0sCiAJCXsgImRlc2NyaWJlIiwgY21kX2Rlc2NyaWJlLCBSVU5fU0VUVVAgfSwKIAkJeyAiZGlmZiIsIGNtZF9kaWZmIH0sCi0JCXsgImRpZmYtZmlsZXMiLCBjbWRfZGlmZl9maWxlcyB9LAorCQl7ICJkaWZmLWZpbGVzIiwgY21kX2RpZmZfZmlsZXMsIFJVTl9TRVRVUCB9LAogCQl7ICJkaWZmLWluZGV4IiwgY21kX2RpZmZfaW5kZXgsIFJVTl9TRVRVUCB9LAogCQl7ICJkaWZmLXRyZWUiLCBjbWRfZGlmZl90cmVlLCBSVU5fU0VUVVAgfSwKIAkJeyAiZmFzdC1leHBvcnQiLCBjbWRfZmFzdF9leHBvcnQsIFJVTl9TRVRVUCB9LApAQCAtMzQ3LDcgKzM1MSw3IEBACiAJCXsgInNob3J0bG9nIiwgY21kX3Nob3J0bG9nLCBVU0VfUEFHRVIgfSwKIAkJeyAic2hvdy1icmFuY2giLCBjbWRfc2hvd19icmFuY2gsIFJVTl9TRVRVUCB9LAogCQl7ICJzaG93IiwgY21kX3Nob3csIFJVTl9TRVRVUCB8IFVTRV9QQUdFUiB9LAotCQl7ICJzdGF0dXMiLCBjbWRfc3RhdHVzLCBSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRSB9LAorCQl7ICJzdGF0dXMiLCBjbWRfc3RhdHVzLCBSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRSB8IFVTRV9QQUdFUiB9LAogCQl7ICJzdHJpcHNwYWNlIiwgY21kX3N0cmlwc3BhY2UgfSwKIAkJeyAic3ltYm9saWMtcmVmIiwgY21kX3N5bWJvbGljX3JlZiwgUlVOX1NFVFVQIH0sCiAJCXsgInRhZyIsIGNtZF90YWcsIFJVTl9TRVRVUCB9LApAQCAtNDI2LDYgKzQzMCw3IEBACiAJCS8qIFRoZSB1c2VyIGRpZG4ndCBzcGVjaWZ5IGEgY29tbWFuZDsgZ2l2ZSB0aGVtIGhlbHAgKi8KIAkJcHJpbnRmKCJ1c2FnZTogJXNcblxuIiwgZ2l0X3VzYWdlX3N0cmluZyk7CiAJCWxpc3RfY29tbW9uX2NtZHNfaGVscCgpOworCQlwcmludGYoIlxuJXNcbiIsIGdpdF9tb3JlX2luZm9fc3RyaW5nKTsKIAkJZXhpdCgxKTsKIAl9CiAJY21kID0gYXJndlswXTsKZGlmZiAtLWdpdCBhL2dpdC5zcGVjLmluIGIvZ2l0LnNwZWMuaW4KaW5kZXggOTdhMjZiZS4uM2Q3ZjNlZiAxMDA2NDQKLS0tIGEvZ2l0LnNwZWMuaW4KKysrIGIvZ2l0LnNwZWMuaW4KQEAgLTEyLDcgKzEyLDcgQEAKIEJ1aWxkUm9vdDoJJXtfdG1wcGF0aH0vJXtuYW1lfS0le3ZlcnNpb259LSV7cmVsZWFzZX0tcm9vdC0lKCV7X19pZF91fSAtbikKIAogUmVxdWlyZXM6CXBlcmwtR2l0ID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9Ci1SZXF1aXJlczoJemxpYiA+PSAxLjIsIHJzeW5jLCBjdXJsLCBsZXNzLCBvcGVuc3NoLWNsaWVudHMsIGV4cGF0CitSZXF1aXJlczoJemxpYiA+PSAxLjIsIHJzeW5jLCBsZXNzLCBvcGVuc3NoLWNsaWVudHMsIGV4cGF0CiBQcm92aWRlczoJZ2l0LWNvcmUgPSAle3ZlcnNpb259LSV7cmVsZWFzZX0KIE9ic29sZXRlczoJZ2l0LWNvcmUgPD0gMS41LjQuMgogT2Jzb2xldGVzOglnaXQtcDQKQEAgLTE4Nyw2ICsxODcsOSBAQAogIyBObyBmaWxlcyBmb3IgeW91IQogCiAlY2hhbmdlbG9nCisqIFN1biBKdW4gMTUgMjAwOCBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CistIFJlbW92ZSBjdXJsIGZyb20gUmVxdWlyZXMgbGlzdC4KKwogKiBGcmkgRmViIDE1IDIwMDggS3Jpc3RpYW4gSMO4Z3NiZXJnIDxrcmhAcmVkaGF0LmNvbT4KIC0gUmVuYW1lIGdpdC1jb3JlIHRvIGp1c3QgZ2l0IGFuZCByZW5hbWUgbWV0YSBwYWNrYWdlIGZyb20gZ2l0IHRvIGdpdC1hbGwuCiAKZGlmZiAtLWdpdCBhL2dpdGstZ2l0L01ha2VmaWxlIGIvZ2l0ay1naXQvTWFrZWZpbGUKaW5kZXggZjkwZGZhYi4uZTFiNjA0NSAxMDA2NDQKLS0tIGEvZ2l0ay1naXQvTWFrZWZpbGUKKysrIGIvZ2l0ay1naXQvTWFrZWZpbGUKQEAgLTQwLDkgKzQwLDkgQEAKIGFsbDo6IGdpdGstd2lzaCAkKEFMTF9NU0dGSUxFUykKIAogaW5zdGFsbDo6IGFsbAotCSQoSU5TVEFMTCkgZ2l0ay13aXNoICckKERFU1RESVJfU1EpJChiaW5kaXJfU1EpJy9naXRrCi0JJChJTlNUQUxMKSAtZCAnJChERVNURElSX1NRKSQobXNnc2Rpcl9TUSknCi0JJChmb3JlYWNoIHAsJChBTExfTVNHRklMRVMpLCAkKElOU1RBTEwpICRwICckKERFU1RESVJfU1EpJChtc2dzZGlyX1NRKScgJiYpIHRydWUKKwkkKElOU1RBTEwpIC1tIDc1NSBnaXRrLXdpc2ggJyQoREVTVERJUl9TUSkkKGJpbmRpcl9TUSknL2dpdGsKKwkkKElOU1RBTEwpIC1kIC1tIDc1NSAnJChERVNURElSX1NRKSQobXNnc2Rpcl9TUSknCisJJChmb3JlYWNoIHAsJChBTExfTVNHRklMRVMpLCAkKElOU1RBTEwpIC1tIDY0NCAkcCAnJChERVNURElSX1NRKSQobXNnc2Rpcl9TUSknICYmKSB0cnVlCiAKIHVuaW5zdGFsbDo6CiAJJChmb3JlYWNoIHAsJChBTExfTVNHRklMRVMpLCAkKFJNKSAnJChERVNURElSX1NRKSQobXNnc2Rpcl9TUSknLyQobm90ZGlyICRwKSAmJikgdHJ1ZQpkaWZmIC0tZ2l0IGEvZ2l0ay1naXQvZ2l0ayBiL2dpdGstZ2l0L2dpdGsKaW5kZXggOWE0ZDljNC4uZmRkY2I0NSAxMDA2NDQKLS0tIGEvZ2l0ay1naXQvZ2l0aworKysgYi9naXRrLWdpdC9naXRrCkBAIC0yLDcgKzIsNyBAQAogIyBUY2wgaWdub3JlcyB0aGUgbmV4dCBsaW5lIC0qLSB0Y2wgLSotIFwKIGV4ZWMgd2lzaCAiJDAiIC0tICIkQCIKIAotIyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBQYXVsIE1hY2tlcnJhcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCDCqSAyMDA1LTIwMDggUGF1bCBNYWNrZXJyYXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgaXQgbWF5IGJlIHVzZWQsIGNvcGllZCwgbW9kaWZpZWQKICMgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UsCiAjIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCkBAIC00NywxMiArNDcsMjQgQEAKICAgICBsYXBwZW5kIHJ1bnEgW2xpc3QgJGZkICRzY3JpcHRdCiB9CiAKK3Byb2MgbnVrZWZpbGUge2ZkfSB7CisgICAgZ2xvYmFsIHJ1bnEKKworICAgIGZvciB7c2V0IGkgMH0geyRpIDwgW2xsZW5ndGggJHJ1bnFdfSB7fSB7CisJaWYge1tsaW5kZXggJHJ1bnEgJGkgMF0gZXEgJGZkfSB7CisJICAgIHNldCBydW5xIFtscmVwbGFjZSAkcnVucSAkaSAkaV0KKwl9IGVsc2UgeworCSAgICBpbmNyIGkKKwl9CisgICAgfQorfQorCiBwcm9jIGRvcnVucSB7fSB7CiAgICAgZ2xvYmFsIGlzb25ydW5xIHJ1bnEKIAogICAgIHNldCB0c3RhcnQgW2Nsb2NrIGNsaWNrcyAtbWlsbGlzZWNvbmRzXQogICAgIHNldCB0MCAkdHN0YXJ0Ci0gICAgd2hpbGUgeyRydW5xIG5lIHt9fSB7CisgICAgd2hpbGUge1tsbGVuZ3RoICRydW5xXSA+IDB9IHsKIAlzZXQgZmQgW2xpbmRleCAkcnVucSAwIDBdCiAJc2V0IHNjcmlwdCBbbGluZGV4ICRydW5xIDAgMV0KIAlzZXQgcmVwZWF0IFtldmFsICRzY3JpcHRdCkBAIC03OCw3NyArOTAsNDI3IEBACiAgICAgfQogfQogCi0jIFN0YXJ0IG9mZiBhIGdpdCByZXYtbGlzdCBwcm9jZXNzIGFuZCBhcnJhbmdlIHRvIHJlYWQgaXRzIG91dHB1dAorcHJvYyB1bm1lcmdlZF9maWxlcyB7ZmlsZXN9IHsKKyAgICBnbG9iYWwgbnJfdW5tZXJnZWQKKworICAgICMgZmluZCB0aGUgbGlzdCBvZiB1bm1lcmdlZCBmaWxlcworICAgIHNldCBtbGlzdCB7fQorICAgIHNldCBucl91bm1lcmdlZCAwCisgICAgaWYge1tjYXRjaCB7CisJc2V0IGZkIFtvcGVuICJ8IGdpdCBscy1maWxlcyAtdSIgcl0KKyAgICB9IGVycl19IHsKKwlzaG93X2Vycm9yIHt9IC4gIlttYyAiQ291bGRuJ3QgZ2V0IGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXM6Il0gJGVyciIKKwlleGl0IDEKKyAgICB9CisgICAgd2hpbGUge1tnZXRzICRmZCBsaW5lXSA+PSAwfSB7CisJc2V0IGkgW3N0cmluZyBmaXJzdCAiXHQiICRsaW5lXQorCWlmIHskaSA8IDB9IGNvbnRpbnVlCisJc2V0IGZuYW1lIFtzdHJpbmcgcmFuZ2UgJGxpbmUgW2V4cHIgeyRpKzF9XSBlbmRdCisJaWYge1tsc2VhcmNoIC1leGFjdCAkbWxpc3QgJGZuYW1lXSA+PSAwfSBjb250aW51ZQorCWluY3IgbnJfdW5tZXJnZWQKKwlpZiB7JGZpbGVzIGVxIHt9IHx8IFtwYXRoX2ZpbHRlciAkZmlsZXMgJGZuYW1lXX0geworCSAgICBsYXBwZW5kIG1saXN0ICRmbmFtZQorCX0KKyAgICB9CisgICAgY2F0Y2gge2Nsb3NlICRmZH0KKyAgICByZXR1cm4gJG1saXN0Cit9CisKK3Byb2MgcGFyc2V2aWV3YXJncyB7biBhcmdsaXN0fSB7CisgICAgZ2xvYmFsIHZkYXRlbW9kZSB2bWVyZ2Vvbmx5IHZmbGFncyB2ZGZsYWdzIHZyZXZzIHZmaWx0ZXJlZCB2b3JpZ2FyZ3MKKworICAgIHNldCB2ZGF0ZW1vZGUoJG4pIDAKKyAgICBzZXQgdm1lcmdlb25seSgkbikgMAorICAgIHNldCBnbGZsYWdzIHt9CisgICAgc2V0IGRpZmZhcmdzIHt9CisgICAgc2V0IG5leHRpc3ZhbCAwCisgICAgc2V0IHJldmFyZ3Mge30KKyAgICBzZXQgb3JpZ2FyZ3MgJGFyZ2xpc3QKKyAgICBzZXQgYWxsa25vd24gMQorICAgIHNldCBmaWx0ZXJlZCAwCisgICAgc2V0IGkgLTEKKyAgICBmb3JlYWNoIGFyZyAkYXJnbGlzdCB7CisJaW5jciBpCisJaWYgeyRuZXh0aXN2YWx9IHsKKwkgICAgbGFwcGVuZCBnbGZsYWdzICRhcmcKKwkgICAgc2V0IG5leHRpc3ZhbCAwCisJICAgIGNvbnRpbnVlCisJfQorCXN3aXRjaCAtZ2xvYiAtLSAkYXJnIHsKKwkgICAgIi1kIiAtCisJICAgICItLWRhdGUtb3JkZXIiIHsKKwkJc2V0IHZkYXRlbW9kZSgkbikgMQorCQkjIHJlbW92ZSBmcm9tIG9yaWdhcmdzIGluIGNhc2Ugd2UgaGl0IGFuIHVua25vd24gb3B0aW9uCisJCXNldCBvcmlnYXJncyBbbHJlcGxhY2UgJG9yaWdhcmdzICRpICRpXQorCQlpbmNyIGkgLTEKKwkgICAgfQorCSAgICAjIFRoZXNlIHJlcXVlc3Qgb3IgYWZmZWN0IGRpZmYgb3V0cHV0LCB3aGljaCB3ZSBkb24ndCB3YW50LgorCSAgICAjIFNvbWUgY291bGQgYmUgdXNlZCB0byBzZXQgb3VyIGRlZmF1bHRzIGZvciBkaWZmIGRpc3BsYXkuCisJICAgICItW3B1YWJ3Y3JSQk1DXSIgLQorCSAgICAiLS1uby1yZW5hbWVzIiAtICItLWZ1bGwtaW5kZXgiIC0gIi0tYmluYXJ5IiAtICItLWFiYnJldj0qIiAtCisJICAgICItLWZpbmQtY29waWVzLWhhcmRlciIgLSAiLWwqIiAtICItLWV4dC1kaWZmIiAtICItLW5vLWV4dC1kaWZmIiAtCisJICAgICItLXNyYy1wcmVmaXg9KiIgLSAiLS1kc3QtcHJlZml4PSoiIC0gIi0tbm8tcHJlZml4IiAtCisJICAgICItTyoiIC0gIi0tdGV4dCIgLSAiLS1mdWxsLWRpZmYiIC0gIi0taWdub3JlLXNwYWNlLWF0LWVvbCIgLQorCSAgICAiLS1pZ25vcmUtc3BhY2UtY2hhbmdlIiAtICItVSoiIC0gIi0tdW5pZmllZD0qIiB7CisJCWxhcHBlbmQgZGlmZmFyZ3MgJGFyZworCSAgICB9CisJICAgICMgVGhlc2UgY2F1c2Ugb3VyIHBhcnNpbmcgb2YgZ2l0IGxvZydzIG91dHB1dCB0byBmYWlsLCBvciBlbHNlCisJICAgICMgdGhleSdyZSBvcHRpb25zIHdlIHdhbnQgdG8gc2V0IG91cnNlbHZlcywgc28gaWdub3JlIHRoZW0uCisJICAgICItLXJhdyIgLSAiLS1wYXRjaC13aXRoLXJhdyIgLSAiLS1wYXRjaC13aXRoLXN0YXQiIC0KKwkgICAgIi0tbmFtZS1vbmx5IiAtICItLW5hbWUtc3RhdHVzIiAtICItLWNvbG9yIiAtICItLWNvbG9yLXdvcmRzIiAtCisJICAgICItLWxvZy1zaXplIiAtICItLXByZXR0eT0qIiAtICItLWRlY29yYXRlIiAtICItLWFiYnJldi1jb21taXQiIC0KKwkgICAgIi0tY2MiIC0gIi16IiAtICItLWhlYWRlciIgLSAiLS1wYXJlbnRzIiAtICItLWJvdW5kYXJ5IiAtCisJICAgICItLW5vLWNvbG9yIiAtICItZyIgLSAiLS13YWxrLXJlZmxvZ3MiIC0gIi0tbm8td2FsayIgLQorCSAgICAiLS10aW1lc3RhbXAiIC0gInJlbGF0aXZlLWRhdGUiIC0gIi0tZGF0ZT0qIiAtICItLXN0ZGluIiAtCisJICAgICItLW9iamVjdHMiIC0gIi0tb2JqZWN0cy1lZGdlIiAtICItLXJldmVyc2UiIHsKKwkgICAgfQorCSAgICAjIFRoZXNlIGFyZSBoYXJtbGVzcywgYW5kIHNvbWUgYXJlIGV2ZW4gdXNlZnVsCisJICAgICItLXN0YXQ9KiIgLSAiLS1udW1zdGF0IiAtICItLXNob3J0c3RhdCIgLSAiLS1zdW1tYXJ5IiAtCisJICAgICItLWNoZWNrIiAtICItLWV4aXQtY29kZSIgLSAiLS1xdWlldCIgLSAiLS10b3BvLW9yZGVyIiAtCisJICAgICItLWZ1bGwtaGlzdG9yeSIgLSAiLS1kZW5zZSIgLSAiLS1zcGFyc2UiIC0KKwkgICAgIi0tZm9sbG93IiAtICItLWxlZnQtcmlnaHQiIC0gIi0tZW5jb2Rpbmc9KiIgeworCQlsYXBwZW5kIGdsZmxhZ3MgJGFyZworCSAgICB9CisJICAgICMgVGhlc2UgbWVhbiB0aGF0IHdlIGdldCBhIHN1YnNldCBvZiB0aGUgY29tbWl0cworCSAgICAiLS1kaWZmLWZpbHRlcj0qIiAtICItLW5vLW1lcmdlcyIgLSAiLS11bnBhY2tlZCIgLQorCSAgICAiLS1tYXgtY291bnQ9KiIgLSAiLS1za2lwPSoiIC0gIi0tc2luY2U9KiIgLSAiLS1hZnRlcj0qIiAtCisJICAgICItLXVudGlsPSoiIC0gIi0tYmVmb3JlPSoiIC0gIi0tbWF4LWFnZT0qIiAtICItLW1pbi1hZ2U9KiIgLQorCSAgICAiLS1hdXRob3I9KiIgLSAiLS1jb21taXR0ZXI9KiIgLSAiLS1ncmVwPSoiIC0gIi1baUVdIiAtCisJICAgICItLXJlbW92ZS1lbXB0eSIgLSAiLS1maXJzdC1wYXJlbnQiIC0gIi0tY2hlcnJ5LXBpY2siIC0KKwkgICAgIi1TKiIgLSAiLS1waWNrYXhlLWFsbCIgLSAiLS1waWNrYXhlLXJlZ2V4IiAtIHsKKwkJc2V0IGZpbHRlcmVkIDEKKwkJbGFwcGVuZCBnbGZsYWdzICRhcmcKKwkgICAgfQorCSAgICAjIFRoaXMgYXBwZWFycyB0byBiZSB0aGUgb25seSBvbmUgdGhhdCBoYXMgYSB2YWx1ZSBhcyBhCisJICAgICMgc2VwYXJhdGUgd29yZCBmb2xsb3dpbmcgaXQKKwkgICAgIi1uIiB7CisJCXNldCBmaWx0ZXJlZCAxCisJCXNldCBuZXh0aXN2YWwgMQorCQlsYXBwZW5kIGdsZmxhZ3MgJGFyZworCSAgICB9CisJICAgICItLW5vdCIgeworCQlzZXQgbm90ZmxhZyBbZXhwciB7ISRub3RmbGFnfV0KKwkJbGFwcGVuZCByZXZhcmdzICRhcmcKKwkgICAgfQorCSAgICAiLS1hbGwiIHsKKwkJbGFwcGVuZCByZXZhcmdzICRhcmcKKwkgICAgfQorCSAgICAiLS1tZXJnZSIgeworCQlzZXQgdm1lcmdlb25seSgkbikgMQorCQkjIGdpdCByZXYtcGFyc2UgZG9lc24ndCB1bmRlcnN0YW5kIC0tbWVyZ2UKKwkJbGFwcGVuZCByZXZhcmdzIC0tZ2l0ay1zeW1tZXRyaWMtZGlmZi1tYXJrZXIgTUVSR0VfSEVBRC4uLkhFQUQKKwkgICAgfQorCSAgICAjIE90aGVyIGZsYWcgYXJndW1lbnRzIGluY2x1ZGluZyAtPG4+CisJICAgICItKiIgeworCQlpZiB7W3N0cmluZyBpcyBkaWdpdCAtc3RyaWN0IFtzdHJpbmcgcmFuZ2UgJGFyZyAxIGVuZF1dfSB7CisJCSAgICBzZXQgZmlsdGVyZWQgMQorCQl9IGVsc2UgeworCQkgICAgIyBhIGZsYWcgYXJndW1lbnQgdGhhdCB3ZSBkb24ndCByZWNvZ25pemU7CisJCSAgICAjIHRoYXQgbWVhbnMgd2UgY2FuJ3Qgb3B0aW1pemUKKwkJICAgIHNldCBhbGxrbm93biAwCisJCX0KKwkJbGFwcGVuZCBnbGZsYWdzICRhcmcKKwkgICAgfQorCSAgICAjIE5vbi1mbGFnIGFyZ3VtZW50cyBzcGVjaWZ5IGNvbW1pdHMgb3IgcmFuZ2VzIG9mIGNvbW1pdHMKKwkgICAgZGVmYXVsdCB7CisJCWlmIHtbc3RyaW5nIG1hdGNoICIqLi4uKiIgJGFyZ119IHsKKwkJICAgIGxhcHBlbmQgcmV2YXJncyAtLWdpdGstc3ltbWV0cmljLWRpZmYtbWFya2VyCisJCX0KKwkJbGFwcGVuZCByZXZhcmdzICRhcmcKKwkgICAgfQorCX0KKyAgICB9CisgICAgc2V0IHZkZmxhZ3MoJG4pICRkaWZmYXJncworICAgIHNldCB2ZmxhZ3MoJG4pICRnbGZsYWdzCisgICAgc2V0IHZyZXZzKCRuKSAkcmV2YXJncworICAgIHNldCB2ZmlsdGVyZWQoJG4pICRmaWx0ZXJlZAorICAgIHNldCB2b3JpZ2FyZ3MoJG4pICRvcmlnYXJncworICAgIHJldHVybiAkYWxsa25vd24KK30KKworcHJvYyBwYXJzZXZpZXdyZXZzIHt2aWV3IHJldnN9IHsKKyAgICBnbG9iYWwgdnBvc2lkcyB2bmVnaWRzCisKKyAgICBpZiB7JHJldnMgZXEge319IHsKKwlzZXQgcmV2cyBIRUFECisgICAgfQorICAgIGlmIHtbY2F0Y2gge3NldCBpZHMgW2V2YWwgZXhlYyBnaXQgcmV2LXBhcnNlICRyZXZzXX0gZXJyXX0geworCSMgd2UgZ2V0IHN0ZG91dCBmb2xsb3dlZCBieSBzdGRlcnIgaW4gJGVycgorCSMgZm9yIGFuIHVua25vd24gcmV2LCBnaXQgcmV2LXBhcnNlIGVjaG9lcyBpdCBhbmQgdGhlbiBlcnJvcnMgb3V0CisJc2V0IGVycmxpbmVzIFtzcGxpdCAkZXJyICJcbiJdCisJc2V0IGJhZHJldiB7fQorCWZvciB7c2V0IGwgMH0geyRsIDwgW2xsZW5ndGggJGVycmxpbmVzXX0ge2luY3IgbH0geworCSAgICBzZXQgbGluZSBbbGluZGV4ICRlcnJsaW5lcyAkbF0KKwkgICAgaWYgeyEoW3N0cmluZyBsZW5ndGggJGxpbmVdID09IDQwICYmIFtzdHJpbmcgaXMgeGRpZ2l0ICRsaW5lXSl9IHsKKwkJaWYge1tzdHJpbmcgbWF0Y2ggImZhdGFsOioiICRsaW5lXX0geworCQkgICAgaWYge1tzdHJpbmcgbWF0Y2ggImZhdGFsOiBhbWJpZ3VvdXMgYXJndW1lbnQqIiAkbGluZV0KKwkJCSYmICRiYWRyZXYgbmUge319IHsKKwkJCWlmIHtbbGxlbmd0aCAkYmFkcmV2XSA9PSAxfSB7CisJCQkgICAgc2V0IGVyciAidW5rbm93biByZXZpc2lvbiAkYmFkcmV2IgorCQkJfSBlbHNlIHsKKwkJCSAgICBzZXQgZXJyICJ1bmtub3duIHJldmlzaW9uczogW2pvaW4gJGJhZHJldiAiLCAiXSIKKwkJCX0KKwkJICAgIH0gZWxzZSB7CisJCQlzZXQgZXJyIFtqb2luIFtscmFuZ2UgJGVycmxpbmVzICRsIGVuZF0gIlxuIl0KKwkJICAgIH0KKwkJICAgIGJyZWFrCisJCX0KKwkJbGFwcGVuZCBiYWRyZXYgJGxpbmUKKwkgICAgfQorCX0JCSAgICAKKwllcnJvcl9wb3B1cCAiRXJyb3IgcGFyc2luZyByZXZpc2lvbnM6ICRlcnIiCisJcmV0dXJuIHt9CisgICAgfQorICAgIHNldCByZXQge30KKyAgICBzZXQgcG9zIHt9CisgICAgc2V0IG5lZyB7fQorICAgIHNldCBzZG0gMAorICAgIGZvcmVhY2ggaWQgW3NwbGl0ICRpZHMgIlxuIl0geworCWlmIHskaWQgZXEgIi0tZ2l0ay1zeW1tZXRyaWMtZGlmZi1tYXJrZXIifSB7CisJICAgIHNldCBzZG0gNAorCX0gZWxzZWlmIHtbc3RyaW5nIG1hdGNoICJeKiIgJGlkXX0geworCSAgICBpZiB7JHNkbSAhPSAxfSB7CisJCWxhcHBlbmQgcmV0ICRpZAorCQlpZiB7JHNkbSA9PSAzfSB7CisJCSAgICBzZXQgc2RtIDAKKwkJfQorCSAgICB9CisJICAgIGxhcHBlbmQgbmVnIFtzdHJpbmcgcmFuZ2UgJGlkIDEgZW5kXQorCX0gZWxzZSB7CisJICAgIGlmIHskc2RtICE9IDJ9IHsKKwkJbGFwcGVuZCByZXQgJGlkCisJICAgIH0gZWxzZSB7CisJCWxzZXQgcmV0IGVuZCBbbGluZGV4ICRyZXQgZW5kXS4uLiRpZAorCSAgICB9CisJICAgIGxhcHBlbmQgcG9zICRpZAorCX0KKwlpbmNyIHNkbSAtMQorICAgIH0KKyAgICBzZXQgdnBvc2lkcygkdmlldykgJHBvcworICAgIHNldCB2bmVnaWRzKCR2aWV3KSAkbmVnCisgICAgcmV0dXJuICRyZXQKK30KKworIyBTdGFydCBvZmYgYSBnaXQgbG9nIHByb2Nlc3MgYW5kIGFycmFuZ2UgdG8gcmVhZCBpdHMgb3V0cHV0CiBwcm9jIHN0YXJ0X3Jldl9saXN0IHt2aWV3fSB7Ci0gICAgZ2xvYmFsIHN0YXJ0bXNlY3MKLSAgICBnbG9iYWwgY29tbWZkIGxlZnRvdmVyIHRjbGVuY29kaW5nIGRhdGVtb2RlCi0gICAgZ2xvYmFsIHZpZXdhcmdzIHZpZXdhcmdzY21kIHZpZXdmaWxlcyBjb21taXRpZHggdmlld2NvbXBsZXRlIHZuZXh0cm9vdAotICAgIGdsb2JhbCBzaG93bG9jYWxjaGFuZ2VzIGNvbW1pdGludGVyZXN0IG1haW5oZWFkaWQKLSAgICBnbG9iYWwgcHJvZ3Jlc3NkaXJuIHByb2dyZXNzY29vcmRzIHByb2dsYXN0bmMgY3VydmlldworICAgIGdsb2JhbCBzdGFydG1zZWNzIGNvbW1pdGlkeCB2aWV3Y29tcGxldGUgY3VydmlldworICAgIGdsb2JhbCBjb21tZmQgbGVmdG92ZXIgdGNsZW5jb2RpbmcKKyAgICBnbG9iYWwgdmlld2FyZ3Mgdmlld2FyZ3NjbWQgdmlld2ZpbGVzIHZmaWxlbGltaXQKKyAgICBnbG9iYWwgc2hvd2xvY2FsY2hhbmdlcyBjb21taXRpbnRlcmVzdAorICAgIGdsb2JhbCB2aWV3YWN0aXZlIGxvZ2luc3RhbmNlIHZpZXdpbnN0YW5jZXMgdm1lcmdlb25seQorICAgIGdsb2JhbCBwZW5kaW5nX3NlbGVjdCBtYWluaGVhZGlkCisgICAgZ2xvYmFsIHZjYW5vcHQgdmZsYWdzIHZyZXZzIHZvcmlnYXJncwogCiAgICAgc2V0IHN0YXJ0bXNlY3MgW2Nsb2NrIGNsaWNrcyAtbWlsbGlzZWNvbmRzXQogICAgIHNldCBjb21taXRpZHgoJHZpZXcpIDAKLSAgICBzZXQgdmlld2NvbXBsZXRlKCR2aWV3KSAwCi0gICAgc2V0IHZuZXh0cm9vdCgkdmlldykgMAorICAgICMgdGhlc2UgYXJlIHNldCB0aGlzIHdheSBmb3IgdGhlIGVycm9yIGV4aXRzCisgICAgc2V0IHZpZXdjb21wbGV0ZSgkdmlldykgMQorICAgIHNldCB2aWV3YWN0aXZlKCR2aWV3KSAwCisgICAgdmFyY2luaXQgJHZpZXcKKwogICAgIHNldCBhcmdzICR2aWV3YXJncygkdmlldykKICAgICBpZiB7JHZpZXdhcmdzY21kKCR2aWV3KSBuZSB7fX0gewogCWlmIHtbY2F0Y2ggewogCSAgICBzZXQgc3RyIFtleGVjIHNoIC1jICR2aWV3YXJnc2NtZCgkdmlldyldCiAJfSBlcnJdfSB7CiAJICAgIGVycm9yX3BvcHVwICJFcnJvciBleGVjdXRpbmcgLS1hcmdzY21kIGNvbW1hbmQ6ICRlcnIiCi0JICAgIGV4aXQgMQorCSAgICByZXR1cm4gMAogCX0KIAlzZXQgYXJncyBbY29uY2F0ICRhcmdzIFtzcGxpdCAkc3RyICJcbiJdXQogICAgIH0KLSAgICBzZXQgb3JkZXIgIi0tdG9wby1vcmRlciIKLSAgICBpZiB7JGRhdGVtb2RlfSB7Ci0Jc2V0IG9yZGVyICItLWRhdGUtb3JkZXIiCisgICAgc2V0IHZjYW5vcHQoJHZpZXcpIFtwYXJzZXZpZXdhcmdzICR2aWV3ICRhcmdzXQorCisgICAgc2V0IGZpbGVzICR2aWV3ZmlsZXMoJHZpZXcpCisgICAgaWYgeyR2bWVyZ2Vvbmx5KCR2aWV3KX0geworCXNldCBmaWxlcyBbdW5tZXJnZWRfZmlsZXMgJGZpbGVzXQorCWlmIHskZmlsZXMgZXEge319IHsKKwkgICAgZ2xvYmFsIG5yX3VubWVyZ2VkCisJICAgIGlmIHskbnJfdW5tZXJnZWQgPT0gMH0geworCQllcnJvcl9wb3B1cCBbbWMgIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXRcCisJCQkgICAgIG5vIGZpbGVzIGFyZSB1bm1lcmdlZC4iXQorCSAgICB9IGVsc2UgeworCQllcnJvcl9wb3B1cCBbbWMgIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXRcCisJCQkgICAgIG5vIHVubWVyZ2VkIGZpbGVzIGFyZSB3aXRoaW4gZmlsZSBsaW1pdC4iXQorCSAgICB9CisJICAgIHJldHVybiAwCisJfQogICAgIH0KKyAgICBzZXQgdmZpbGVsaW1pdCgkdmlldykgJGZpbGVzCisKKyAgICBpZiB7JHZjYW5vcHQoJHZpZXcpfSB7CisJc2V0IHJldnMgW3BhcnNldmlld3JldnMgJHZpZXcgJHZyZXZzKCR2aWV3KV0KKwlpZiB7JHJldnMgZXEge319IHsKKwkgICAgcmV0dXJuIDAKKwl9CisJc2V0IGFyZ3MgW2NvbmNhdCAkdmZsYWdzKCR2aWV3KSAkcmV2c10KKyAgICB9IGVsc2UgeworCXNldCBhcmdzICR2b3JpZ2FyZ3MoJHZpZXcpCisgICAgfQorCiAgICAgaWYge1tjYXRjaCB7Ci0Jc2V0IGZkIFtvcGVuIFtjb25jYXQgfCBnaXQgbG9nIC0tbm8tY29sb3IgLXogLS1wcmV0dHk9cmF3ICRvcmRlciAtLXBhcmVudHMgXAotCQkJIC0tYm91bmRhcnkgJGFyZ3MgIi0tIiAkdmlld2ZpbGVzKCR2aWV3KV0gcl0KKwlzZXQgZmQgW29wZW4gW2NvbmNhdCB8IGdpdCBsb2cgLS1uby1jb2xvciAteiAtLXByZXR0eT1yYXcgLS1wYXJlbnRzIFwKKwkJCSAtLWJvdW5kYXJ5ICRhcmdzICItLSIgJGZpbGVzXSByXQogICAgIH0gZXJyXX0gewotCWVycm9yX3BvcHVwICJbbWMgIkVycm9yIGV4ZWN1dGluZyBnaXQgcmV2LWxpc3Q6Il0gJGVyciIKLQlleGl0IDEKKwllcnJvcl9wb3B1cCAiW21jICJFcnJvciBleGVjdXRpbmcgZ2l0IGxvZzoiXSAkZXJyIgorCXJldHVybiAwCiAgICAgfQotICAgIHNldCBjb21tZmQoJHZpZXcpICRmZAotICAgIHNldCBsZWZ0b3Zlcigkdmlldykge30KLSAgICBpZiB7JHNob3dsb2NhbGNoYW5nZXN9IHsKKyAgICBzZXQgaSBbaW5jciBsb2dpbnN0YW5jZV0KKyAgICBzZXQgdmlld2luc3RhbmNlcygkdmlldykgW2xpc3QgJGldCisgICAgc2V0IGNvbW1mZCgkaSkgJGZkCisgICAgc2V0IGxlZnRvdmVyKCRpKSB7fQorICAgIGlmIHskc2hvd2xvY2FsY2hhbmdlcyAmJiAkbWFpbmhlYWRpZCBuZSB7fX0gewogCWxhcHBlbmQgY29tbWl0aW50ZXJlc3QoJG1haW5oZWFkaWQpIHtkb2RpZmZpbmRleH0KICAgICB9CiAgICAgZmNvbmZpZ3VyZSAkZmQgLWJsb2NraW5nIDAgLXRyYW5zbGF0aW9uIGxmIC1lb2ZjaGFyIHt9CiAgICAgaWYgeyR0Y2xlbmNvZGluZyAhPSB7fX0gewogCWZjb25maWd1cmUgJGZkIC1lbmNvZGluZyAkdGNsZW5jb2RpbmcKICAgICB9Ci0gICAgZmlsZXJ1biAkZmQgW2xpc3QgZ2V0Y29tbWl0bGluZXMgJGZkICR2aWV3XQorICAgIGZpbGVydW4gJGZkIFtsaXN0IGdldGNvbW1pdGxpbmVzICRmZCAkaSAkdmlldyAwXQogICAgIG5vd2J1c3kgJHZpZXcgW21jICJSZWFkaW5nIl0KICAgICBpZiB7JHZpZXcgPT0gJGN1cnZpZXd9IHsKLQlzZXQgcHJvZ3Jlc3NkaXJuIDEKLQlzZXQgcHJvZ3Jlc3Njb29yZHMgezAgMH0KLQlzZXQgcHJvZ2xhc3RuYyAwCisJc2V0IHBlbmRpbmdfc2VsZWN0ICRtYWluaGVhZGlkCiAgICAgfQorICAgIHNldCB2aWV3Y29tcGxldGUoJHZpZXcpIDAKKyAgICBzZXQgdmlld2FjdGl2ZSgkdmlldykgMQorICAgIHJldHVybiAxCiB9CiAKLXByb2Mgc3RvcF9yZXZfbGlzdCB7fSB7Ci0gICAgZ2xvYmFsIGNvbW1mZCBjdXJ2aWV3Citwcm9jIHN0b3BfcmV2X2xpc3Qge3ZpZXd9IHsKKyAgICBnbG9iYWwgY29tbWZkIHZpZXdpbnN0YW5jZXMgbGVmdG92ZXIKIAotICAgIGlmIHshW2luZm8gZXhpc3RzIGNvbW1mZCgkY3VydmlldyldfSByZXR1cm4KLSAgICBzZXQgZmQgJGNvbW1mZCgkY3VydmlldykKLSAgICBjYXRjaCB7Ci0Jc2V0IHBpZCBbcGlkICRmZF0KLQlleGVjIGtpbGwgJHBpZAorICAgIGZvcmVhY2ggaW5zdCAkdmlld2luc3RhbmNlcygkdmlldykgeworCXNldCBmZCAkY29tbWZkKCRpbnN0KQorCWNhdGNoIHsKKwkgICAgc2V0IHBpZCBbcGlkICRmZF0KKwkgICAgZXhlYyBraWxsICRwaWQKKwl9CisJY2F0Y2gge2Nsb3NlICRmZH0KKwludWtlZmlsZSAkZmQKKwl1bnNldCBjb21tZmQoJGluc3QpCisJdW5zZXQgbGVmdG92ZXIoJGluc3QpCiAgICAgfQotICAgIGNhdGNoIHtjbG9zZSAkZmR9Ci0gICAgdW5zZXQgY29tbWZkKCRjdXJ2aWV3KQorICAgIHNldCB2aWV3aW5zdGFuY2VzKCR2aWV3KSB7fQogfQogCiBwcm9jIGdldGNvbW1pdHMge30gewotICAgIGdsb2JhbCBwaGFzZSBjYW52IGN1cnZpZXcKKyAgICBnbG9iYWwgY2FudiBjdXJ2aWV3IG5lZWRfcmVkaXNwbGF5IHZpZXdhY3RpdmUKIAotICAgIHNldCBwaGFzZSBnZXRjb21taXRzCiAgICAgaW5pdGxheW91dAotICAgIHN0YXJ0X3Jldl9saXN0ICRjdXJ2aWV3Ci0gICAgc2hvd19zdGF0dXMgW21jICJSZWFkaW5nIGNvbW1pdHMuLi4iXQorICAgIGlmIHtbc3RhcnRfcmV2X2xpc3QgJGN1cnZpZXddfSB7CisJc2hvd19zdGF0dXMgW21jICJSZWFkaW5nIGNvbW1pdHMuLi4iXQorCXNldCBuZWVkX3JlZGlzcGxheSAxCisgICAgfSBlbHNlIHsKKwlzaG93X3N0YXR1cyBbbWMgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiXQorICAgIH0KK30KKworcHJvYyB1cGRhdGVjb21taXRzIHt9IHsKKyAgICBnbG9iYWwgY3VydmlldyB2Y2Fub3B0IHZvcmlnYXJncyB2ZmlsZWxpbWl0IHZpZXdpbnN0YW5jZXMKKyAgICBnbG9iYWwgdmlld2FjdGl2ZSB2aWV3Y29tcGxldGUgbG9naW5zdGFuY2UgdGNsZW5jb2RpbmcKKyAgICBnbG9iYWwgc3RhcnRtc2VjcyBjb21tZmQgc2hvd25lYXJ0YWdzIHNob3dsb2NhbGNoYW5nZXMgbGVmdG92ZXIKKyAgICBnbG9iYWwgbWFpbmhlYWRpZCBwZW5kaW5nX3NlbGVjdAorICAgIGdsb2JhbCBpc3dvcmt0cmVlCisgICAgZ2xvYmFsIHZhcmNpZCB2cG9zaWRzIHZuZWdpZHMgdmZsYWdzIHZyZXZzCisKKyAgICBzZXQgaXN3b3JrdHJlZSBbZXhwciB7W2V4ZWMgZ2l0IHJldi1wYXJzZSAtLWlzLWluc2lkZS13b3JrLXRyZWVdID09ICJ0cnVlIn1dCisgICAgc2V0IG9sZG1haW5pZCAkbWFpbmhlYWRpZAorICAgIHJlcmVhZHJlZnMKKyAgICBpZiB7JHNob3dsb2NhbGNoYW5nZXN9IHsKKwlpZiB7JG1haW5oZWFkaWQgbmUgJG9sZG1haW5pZH0geworCSAgICBkb2hpZGVsb2NhbGNoYW5nZXMKKwl9CisJaWYge1tjb21taXRpbnZpZXcgJG1haW5oZWFkaWQgJGN1cnZpZXddfSB7CisJICAgIGRvZGlmZmluZGV4CisJfQorICAgIH0KKyAgICBzZXQgdmlldyAkY3VydmlldworICAgIGlmIHskdmNhbm9wdCgkdmlldyl9IHsKKwlzZXQgb2xkcG9zICR2cG9zaWRzKCR2aWV3KQorCXNldCBvbGRuZWcgJHZuZWdpZHMoJHZpZXcpCisJc2V0IHJldnMgW3BhcnNldmlld3JldnMgJHZpZXcgJHZyZXZzKCR2aWV3KV0KKwlpZiB7JHJldnMgZXEge319IHsKKwkgICAgcmV0dXJuCisJfQorCSMgbm90ZTogZ2V0dGluZyB0aGUgZGVsdGEgd2hlbiBuZWdhdGl2ZSByZWZzIGNoYW5nZSBpcyBoYXJkLAorCSMgYW5kIGNvdWxkIHJlcXVpcmUgbXVsdGlwbGUgZ2l0IGxvZyBpbnZvY2F0aW9ucywgc28gaW4gdGhhdAorCSMgY2FzZSB3ZSBhc2sgZ2l0IGxvZyBmb3IgYWxsIHRoZSBjb21taXRzIChub3QganVzdCB0aGUgZGVsdGEpCisJaWYgeyRvbGRuZWcgZXEgJHZuZWdpZHMoJHZpZXcpfSB7CisJICAgIHNldCBuZXdyZXZzIHt9CisJICAgIHNldCBucG9zIDAKKwkgICAgIyB0YWtlIG91dCBwb3NpdGl2ZSByZWZzIHRoYXQgd2UgYXNrZWQgZm9yIGJlZm9yZSBvcgorCSAgICAjIHRoYXQgd2UgaGF2ZSBhbHJlYWR5IHNlZW4KKwkgICAgZm9yZWFjaCByZXYgJHJldnMgeworCQlpZiB7W3N0cmluZyBsZW5ndGggJHJldl0gPT0gNDB9IHsKKwkJICAgIGlmIHtbbHNlYXJjaCAtZXhhY3QgJG9sZHBvcyAkcmV2XSA8IDAKKwkJCSYmICFbaW5mbyBleGlzdHMgdmFyY2lkKCR2aWV3LCRyZXYpXX0geworCQkJbGFwcGVuZCBuZXdyZXZzICRyZXYKKwkJCWluY3IgbnBvcworCQkgICAgfQorCQl9IGVsc2UgeworCQkgICAgbGFwcGVuZCAkbmV3cmV2cyAkcmV2CisJCX0KKwkgICAgfQorCSAgICBpZiB7JG5wb3MgPT0gMH0gcmV0dXJuCisJICAgIHNldCByZXZzICRuZXdyZXZzCisJICAgIHNldCB2cG9zaWRzKCR2aWV3KSBbbHNvcnQgLXVuaXF1ZSBbY29uY2F0ICRvbGRwb3MgJHZwb3NpZHMoJHZpZXcpXV0KKwl9CisJc2V0IGFyZ3MgW2NvbmNhdCAkdmZsYWdzKCR2aWV3KSAkcmV2cyAtLW5vdCAkb2xkcG9zXQorICAgIH0gZWxzZSB7CisJc2V0IGFyZ3MgJHZvcmlnYXJncygkdmlldykKKyAgICB9CisgICAgaWYge1tjYXRjaCB7CisJc2V0IGZkIFtvcGVuIFtjb25jYXQgfCBnaXQgbG9nIC0tbm8tY29sb3IgLXogLS1wcmV0dHk9cmF3IC0tcGFyZW50cyBcCisJCQkgIC0tYm91bmRhcnkgJGFyZ3MgIi0tIiAkdmZpbGVsaW1pdCgkdmlldyldIHJdCisgICAgfSBlcnJdfSB7CisJZXJyb3JfcG9wdXAgIkVycm9yIGV4ZWN1dGluZyBnaXQgbG9nOiAkZXJyIgorCXJldHVybgorICAgIH0KKyAgICBpZiB7JHZpZXdhY3RpdmUoJHZpZXcpID09IDB9IHsKKwlzZXQgc3RhcnRtc2VjcyBbY2xvY2sgY2xpY2tzIC1taWxsaXNlY29uZHNdCisgICAgfQorICAgIHNldCBpIFtpbmNyIGxvZ2luc3RhbmNlXQorICAgIGxhcHBlbmQgdmlld2luc3RhbmNlcygkdmlldykgJGkKKyAgICBzZXQgY29tbWZkKCRpKSAkZmQKKyAgICBzZXQgbGVmdG92ZXIoJGkpIHt9CisgICAgZmNvbmZpZ3VyZSAkZmQgLWJsb2NraW5nIDAgLXRyYW5zbGF0aW9uIGxmIC1lb2ZjaGFyIHt9CisgICAgaWYgeyR0Y2xlbmNvZGluZyAhPSB7fX0geworCWZjb25maWd1cmUgJGZkIC1lbmNvZGluZyAkdGNsZW5jb2RpbmcKKyAgICB9CisgICAgZmlsZXJ1biAkZmQgW2xpc3QgZ2V0Y29tbWl0bGluZXMgJGZkICRpICR2aWV3IDFdCisgICAgaW5jciB2aWV3YWN0aXZlKCR2aWV3KQorICAgIHNldCB2aWV3Y29tcGxldGUoJHZpZXcpIDAKKyAgICBzZXQgcGVuZGluZ19zZWxlY3QgJG1haW5oZWFkaWQKKyAgICBub3didXN5ICR2aWV3ICJSZWFkaW5nIgorICAgIGlmIHskc2hvd25lYXJ0YWdzfSB7CisJZ2V0YWxsY29tbWl0cworICAgIH0KK30KKworcHJvYyByZWxvYWRjb21taXRzIHt9IHsKKyAgICBnbG9iYWwgY3VydmlldyB2aWV3Y29tcGxldGUgc2VsZWN0ZWRsaW5lIGN1cnJlbnRpZCB0aGlja2VybGluZQorICAgIGdsb2JhbCBzaG93bmVhcnRhZ3MgdHJlZWRpZmZzIGNvbW1pdGludGVyZXN0IGNhY2hlZF9jb21taXRyb3cKKyAgICBnbG9iYWwgdGFyZ2V0aWQKKworICAgIGlmIHshJHZpZXdjb21wbGV0ZSgkY3Vydmlldyl9IHsKKwlzdG9wX3Jldl9saXN0ICRjdXJ2aWV3CisgICAgfQorICAgIHJlc2V0dmFyY3MgJGN1cnZpZXcKKyAgICBzZXQgc2VsZWN0ZWRsaW5lIHt9CisgICAgY2F0Y2gge3Vuc2V0IGN1cnJlbnRpZH0KKyAgICBjYXRjaCB7dW5zZXQgdGhpY2tlcmxpbmV9CisgICAgY2F0Y2gge3Vuc2V0IHRyZWVkaWZmc30KKyAgICByZWFkcmVmcworICAgIGNoYW5nZWRyZWZzCisgICAgaWYgeyRzaG93bmVhcnRhZ3N9IHsKKwlnZXRhbGxjb21taXRzCisgICAgfQorICAgIGNsZWFyX2Rpc3BsYXkKKyAgICBjYXRjaCB7dW5zZXQgY29tbWl0aW50ZXJlc3R9CisgICAgY2F0Y2gge3Vuc2V0IGNhY2hlZF9jb21taXRyb3d9CisgICAgY2F0Y2gge3Vuc2V0IHRhcmdldGlkfQorICAgIHNldGNhbnZzY3JvbGwKKyAgICBnZXRjb21taXRzCisgICAgcmV0dXJuIDAKIH0KIAogIyBUaGlzIG1ha2VzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgcG9zaXRpdmUgaW50ZWdlciB3aGljaApAQCAtMTY0LDQ2ICs1MjYsNzU5IEBACiAgICAgcmV0dXJuIFtmb3JtYXQgInolLjh4IiAkbl0KIH0KIAotcHJvYyBnZXRjb21taXRsaW5lcyB7ZmQgdmlld30gIHsKLSAgICBnbG9iYWwgY29tbWl0bGlzdGVkIGNvbW1pdGludGVyZXN0Ci0gICAgZ2xvYmFsIGxlZnRvdmVyIGNvbW1mZAotICAgIGdsb2JhbCBkaXNwbGF5b3JkZXIgY29tbWl0aWR4IHZpZXdjb21wbGV0ZSBjb21taXRyb3cgY29tbWl0ZGF0YQotICAgIGdsb2JhbCBwYXJlbnRsaXN0IGNoaWxkcmVuIGN1cnZpZXcgaGx2aWV3Ci0gICAgZ2xvYmFsIHZwYXJlbnRsaXN0IHZkaXNwb3JkZXIgdmNtaXRsaXN0ZWQKLSAgICBnbG9iYWwgb3JkZXJ0b2sgdm5leHRyb290IGlkcGVuZGluZworIyBQcm9jZWR1cmVzIHVzZWQgaW4gcmVvcmRlcmluZyBjb21taXRzIGZyb20gZ2l0IGxvZyAod2l0aG91dAorIyAtLXRvcG8tb3JkZXIpIGludG8gdGhlIG9yZGVyIGZvciBkaXNwbGF5LgorCitwcm9jIHZhcmNpbml0IHt2aWV3fSB7CisgICAgZ2xvYmFsIHZhcmNzdGFydCB2dXBwdHIgdmRvd25wdHIgdmxlZnRwdHIgdmJhY2twdHIgdmFyY3RvayB2YXJjcm93CisgICAgZ2xvYmFsIHZ0b2ttb2QgdmFyY21vZCB2cm93bW9kIHZhcmNpeCB2bGFzdGlucworCisgICAgc2V0IHZhcmNzdGFydCgkdmlldykge3t9fQorICAgIHNldCB2dXBwdHIoJHZpZXcpIHswfQorICAgIHNldCB2ZG93bnB0cigkdmlldykgezB9CisgICAgc2V0IHZsZWZ0cHRyKCR2aWV3KSB7MH0KKyAgICBzZXQgdmJhY2twdHIoJHZpZXcpIHswfQorICAgIHNldCB2YXJjdG9rKCR2aWV3KSB7e319CisgICAgc2V0IHZhcmNyb3coJHZpZXcpIHt7fX0KKyAgICBzZXQgdnRva21vZCgkdmlldykge30KKyAgICBzZXQgdmFyY21vZCgkdmlldykgMAorICAgIHNldCB2cm93bW9kKCR2aWV3KSAwCisgICAgc2V0IHZhcmNpeCgkdmlldykge3t9fQorICAgIHNldCB2bGFzdGlucygkdmlldykgezB9Cit9CisKK3Byb2MgcmVzZXR2YXJjcyB7dmlld30geworICAgIGdsb2JhbCB2YXJjaWQgdmFyY2NvbW1pdHMgcGFyZW50cyBjaGlsZHJlbiB2c2VlZGNvdW50IG9yZGVydG9rCisKKyAgICBmb3JlYWNoIHZpZCBbYXJyYXkgbmFtZXMgdmFyY2lkICR2aWV3LCpdIHsKKwl1bnNldCB2YXJjaWQoJHZpZCkKKwl1bnNldCBjaGlsZHJlbigkdmlkKQorCXVuc2V0IHBhcmVudHMoJHZpZCkKKyAgICB9CisgICAgIyBzb21lIGNvbW1pdHMgbWlnaHQgaGF2ZSBjaGlsZHJlbiBidXQgaGF2ZW4ndCBiZWVuIHNlZW4geWV0CisgICAgZm9yZWFjaCB2aWQgW2FycmF5IG5hbWVzIGNoaWxkcmVuICR2aWV3LCpdIHsKKwl1bnNldCBjaGlsZHJlbigkdmlkKQorICAgIH0KKyAgICBmb3JlYWNoIHZhIFthcnJheSBuYW1lcyB2YXJjY29tbWl0cyAkdmlldywqXSB7CisJdW5zZXQgdmFyY2NvbW1pdHMoJHZhKQorICAgIH0KKyAgICBmb3JlYWNoIHZkIFthcnJheSBuYW1lcyB2c2VlZGNvdW50ICR2aWV3LCpdIHsKKwl1bnNldCB2c2VlZGNvdW50KCR2ZCkKKyAgICB9CisgICAgY2F0Y2gge3Vuc2V0IG9yZGVydG9rfQorfQorCisjIHJldHVybnMgYSBsaXN0IG9mIHRoZSBjb21taXRzIHdpdGggbm8gY2hpbGRyZW4KK3Byb2Mgc2VlZHMge3Z9IHsKKyAgICBnbG9iYWwgdmRvd25wdHIgdmxlZnRwdHIgdmFyY3N0YXJ0CisKKyAgICBzZXQgcmV0IHt9CisgICAgc2V0IGEgW2xpbmRleCAkdmRvd25wdHIoJHYpIDBdCisgICAgd2hpbGUgeyRhICE9IDB9IHsKKwlsYXBwZW5kIHJldCBbbGluZGV4ICR2YXJjc3RhcnQoJHYpICRhXQorCXNldCBhIFtsaW5kZXggJHZsZWZ0cHRyKCR2KSAkYV0KKyAgICB9CisgICAgcmV0dXJuICRyZXQKK30KKworcHJvYyBuZXd2YXJjIHt2aWV3IGlkfSB7CisgICAgZ2xvYmFsIHZhcmNpZCB2YXJjdG9rIHBhcmVudHMgY2hpbGRyZW4gdmRhdGVtb2RlCisgICAgZ2xvYmFsIHZ1cHB0ciB2ZG93bnB0ciB2bGVmdHB0ciB2YmFja3B0ciB2YXJjcm93IHZhcmNpeCB2YXJjc3RhcnQKKyAgICBnbG9iYWwgY29tbWl0ZGF0YSBjb21taXRpbmZvIHZzZWVkY291bnQgdmFyY2NvbW1pdHMgdmxhc3RpbnMKKworICAgIHNldCBhIFtsbGVuZ3RoICR2YXJjdG9rKCR2aWV3KV0KKyAgICBzZXQgdmlkICR2aWV3LCRpZAorICAgIGlmIHtbbGxlbmd0aCAkY2hpbGRyZW4oJHZpZCldID09IDAgfHwgJHZkYXRlbW9kZSgkdmlldyl9IHsKKwlpZiB7IVtpbmZvIGV4aXN0cyBjb21taXRpbmZvKCRpZCldfSB7CisJICAgIHBhcnNlY29tbWl0ICRpZCAkY29tbWl0ZGF0YSgkaWQpIDEKKwl9CisJc2V0IGNkYXRlIFtsaW5kZXggJGNvbW1pdGluZm8oJGlkKSA0XQorCWlmIHshW3N0cmluZyBpcyBpbnRlZ2VyIC1zdHJpY3QgJGNkYXRlXX0geworCSAgICBzZXQgY2RhdGUgMAorCX0KKwlpZiB7IVtpbmZvIGV4aXN0cyB2c2VlZGNvdW50KCR2aWV3LCRjZGF0ZSldfSB7CisJICAgIHNldCB2c2VlZGNvdW50KCR2aWV3LCRjZGF0ZSkgLTEKKwl9CisJc2V0IGMgW2luY3IgdnNlZWRjb3VudCgkdmlldywkY2RhdGUpXQorCXNldCBjZGF0ZSBbZXhwciB7JGNkYXRlIF4gMHhmZmZmZmZmZn1dCisJc2V0IHRvayAic1tzdHJyZXAgJGNkYXRlXVtzdHJyZXAgJGNdIgorICAgIH0gZWxzZSB7CisJc2V0IHRvayB7fQorICAgIH0KKyAgICBzZXQga2EgMAorICAgIGlmIHtbbGxlbmd0aCAkY2hpbGRyZW4oJHZpZCldID4gMH0geworCXNldCBraWQgW2xpbmRleCAkY2hpbGRyZW4oJHZpZCkgZW5kXQorCXNldCBrICR2YXJjaWQoJHZpZXcsJGtpZCkKKwlpZiB7W3N0cmluZyBjb21wYXJlIFtsaW5kZXggJHZhcmN0b2soJHZpZXcpICRrXSAkdG9rXSA+IDB9IHsKKwkgICAgc2V0IGtpICRraWQKKwkgICAgc2V0IGthICRrCisJICAgIHNldCB0b2sgW2xpbmRleCAkdmFyY3RvaygkdmlldykgJGtdCisJfQorICAgIH0KKyAgICBpZiB7JGthICE9IDB9IHsKKwlzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJHBhcmVudHMoJHZpZXcsJGtpKSAkaWRdCisJc2V0IGogW2V4cHIge1tsbGVuZ3RoICRwYXJlbnRzKCR2aWV3LCRraSldIC0gMSAtICRpfV0KKwlhcHBlbmQgdG9rIFtzdHJyZXAgJGpdCisgICAgfQorICAgIHNldCBjIFtsaW5kZXggJHZsYXN0aW5zKCR2aWV3KSAka2FdCisgICAgaWYgeyRjID09IDAgfHwgW3N0cmluZyBjb21wYXJlICR0b2sgW2xpbmRleCAkdmFyY3RvaygkdmlldykgJGNdXSA8IDB9IHsKKwlzZXQgYyAka2EKKwlzZXQgYiBbbGluZGV4ICR2ZG93bnB0cigkdmlldykgJGthXQorICAgIH0gZWxzZSB7CisJc2V0IGIgW2xpbmRleCAkdmxlZnRwdHIoJHZpZXcpICRjXQorICAgIH0KKyAgICB3aGlsZSB7JGIgIT0gMCAmJiBbc3RyaW5nIGNvbXBhcmUgJHRvayBbbGluZGV4ICR2YXJjdG9rKCR2aWV3KSAkYl1dID49IDB9IHsKKwlzZXQgYyAkYgorCXNldCBiIFtsaW5kZXggJHZsZWZ0cHRyKCR2aWV3KSAkY10KKyAgICB9CisgICAgaWYgeyRjID09ICRrYX0geworCWxzZXQgdmRvd25wdHIoJHZpZXcpICRrYSAkYQorCWxhcHBlbmQgdmJhY2twdHIoJHZpZXcpIDAKKyAgICB9IGVsc2UgeworCWxzZXQgdmxlZnRwdHIoJHZpZXcpICRjICRhCisJbGFwcGVuZCB2YmFja3B0cigkdmlldykgJGMKKyAgICB9CisgICAgbHNldCB2bGFzdGlucygkdmlldykgJGthICRhCisgICAgbGFwcGVuZCB2dXBwdHIoJHZpZXcpICRrYQorICAgIGxhcHBlbmQgdmxlZnRwdHIoJHZpZXcpICRiCisgICAgaWYgeyRiICE9IDB9IHsKKwlsc2V0IHZiYWNrcHRyKCR2aWV3KSAkYiAkYQorICAgIH0KKyAgICBsYXBwZW5kIHZhcmN0b2soJHZpZXcpICR0b2sKKyAgICBsYXBwZW5kIHZhcmNzdGFydCgkdmlldykgJGlkCisgICAgbGFwcGVuZCB2ZG93bnB0cigkdmlldykgMAorICAgIGxhcHBlbmQgdmFyY3Jvdygkdmlldykge30KKyAgICBsYXBwZW5kIHZhcmNpeCgkdmlldykge30KKyAgICBzZXQgdmFyY2NvbW1pdHMoJHZpZXcsJGEpIHt9CisgICAgbGFwcGVuZCB2bGFzdGlucygkdmlldykgMAorICAgIHJldHVybiAkYQorfQorCitwcm9jIHNwbGl0dmFyYyB7cCB2fSB7CisgICAgZ2xvYmFsIHZhcmNpZCB2YXJjc3RhcnQgdmFyY2NvbW1pdHMgdmFyY3RvaworICAgIGdsb2JhbCB2dXBwdHIgdmRvd25wdHIgdmxlZnRwdHIgdmJhY2twdHIgdmFyY2l4IHZhcmNyb3cgdmxhc3RpbnMKKworICAgIHNldCBvYSAkdmFyY2lkKCR2LCRwKQorICAgIHNldCBhYyAkdmFyY2NvbW1pdHMoJHYsJG9hKQorICAgIHNldCBpIFtsc2VhcmNoIC1leGFjdCAkdmFyY2NvbW1pdHMoJHYsJG9hKSAkcF0KKyAgICBpZiB7JGkgPD0gMH0gcmV0dXJuCisgICAgc2V0IG5hIFtsbGVuZ3RoICR2YXJjdG9rKCR2KV0KKyAgICAjICIlIiBzb3J0cyBiZWZvcmUgIjAiLi4uCisgICAgc2V0IHRvayAiW2xpbmRleCAkdmFyY3RvaygkdikgJG9hXSVbc3RycmVwICRpXSIKKyAgICBsYXBwZW5kIHZhcmN0b2soJHYpICR0b2sKKyAgICBsYXBwZW5kIHZhcmNyb3coJHYpIHt9CisgICAgbGFwcGVuZCB2YXJjaXgoJHYpIHt9CisgICAgc2V0IHZhcmNjb21taXRzKCR2LCRvYSkgW2xyYW5nZSAkYWMgMCBbZXhwciB7JGkgLSAxfV1dCisgICAgc2V0IHZhcmNjb21taXRzKCR2LCRuYSkgW2xyYW5nZSAkYWMgJGkgZW5kXQorICAgIGxhcHBlbmQgdmFyY3N0YXJ0KCR2KSAkcAorICAgIGZvcmVhY2ggaWQgJHZhcmNjb21taXRzKCR2LCRuYSkgeworCXNldCB2YXJjaWQoJHYsJGlkKSAkbmEKKyAgICB9CisgICAgbGFwcGVuZCB2ZG93bnB0cigkdikgW2xpbmRleCAkdmRvd25wdHIoJHYpICRvYV0KKyAgICBsYXBwZW5kIHZsYXN0aW5zKCR2KSBbbGluZGV4ICR2bGFzdGlucygkdikgJG9hXQorICAgIGxzZXQgdmRvd25wdHIoJHYpICRvYSAkbmEKKyAgICBsc2V0IHZsYXN0aW5zKCR2KSAkb2EgMAorICAgIGxhcHBlbmQgdnVwcHRyKCR2KSAkb2EKKyAgICBsYXBwZW5kIHZsZWZ0cHRyKCR2KSAwCisgICAgbGFwcGVuZCB2YmFja3B0cigkdikgMAorICAgIGZvciB7c2V0IGIgW2xpbmRleCAkdmRvd25wdHIoJHYpICRuYV19IHskYiAhPSAwfSB7c2V0IGIgW2xpbmRleCAkdmxlZnRwdHIoJHYpICRiXX0geworCWxzZXQgdnVwcHRyKCR2KSAkYiAkbmEKKyAgICB9Cit9CisKK3Byb2MgcmVudW1iZXJ2YXJjIHthIHZ9IHsKKyAgICBnbG9iYWwgcGFyZW50cyBjaGlsZHJlbiB2YXJjdG9rIHZhcmNzdGFydCB2YXJjY29tbWl0cworICAgIGdsb2JhbCB2dXBwdHIgdmRvd25wdHIgdmxlZnRwdHIgdmJhY2twdHIgdmxhc3RpbnMgdmFyY2lkIHZ0b2ttb2QgdmRhdGVtb2RlCisKKyAgICBzZXQgdDEgW2Nsb2NrIGNsaWNrcyAtbWlsbGlzZWNvbmRzXQorICAgIHNldCB0b2RvIHt9CisgICAgc2V0IGlzcmVsYXRlZCgkYSkgMQorICAgIHNldCBraWRjaGFuZ2VkKCRhKSAxCisgICAgc2V0IG50b3QgMAorICAgIHdoaWxlIHskYSAhPSAwfSB7CisJaWYge1tpbmZvIGV4aXN0cyBpc3JlbGF0ZWQoJGEpXX0geworCSAgICBsYXBwZW5kIHRvZG8gJGEKKwkgICAgc2V0IGlkIFtsaW5kZXggJHZhcmNjb21taXRzKCR2LCRhKSBlbmRdCisJICAgIGZvcmVhY2ggcCAkcGFyZW50cygkdiwkaWQpIHsKKwkJaWYge1tpbmZvIGV4aXN0cyB2YXJjaWQoJHYsJHApXX0geworCQkgICAgc2V0IGlzcmVsYXRlZCgkdmFyY2lkKCR2LCRwKSkgMQorCQl9CisJICAgIH0KKwl9CisJaW5jciBudG90CisJc2V0IGIgW2xpbmRleCAkdmRvd25wdHIoJHYpICRhXQorCWlmIHskYiA9PSAwfSB7CisJICAgIHdoaWxlIHskYSAhPSAwfSB7CisJCXNldCBiIFtsaW5kZXggJHZsZWZ0cHRyKCR2KSAkYV0KKwkJaWYgeyRiICE9IDB9IGJyZWFrCisJCXNldCBhIFtsaW5kZXggJHZ1cHB0cigkdikgJGFdCisJICAgIH0KKwl9CisJc2V0IGEgJGIKKyAgICB9CisgICAgZm9yZWFjaCBhICR0b2RvIHsKKwlpZiB7IVtpbmZvIGV4aXN0cyBraWRjaGFuZ2VkKCRhKV19IGNvbnRpbnVlCisJc2V0IGlkIFtsaW5kZXggJHZhcmNzdGFydCgkdikgJGFdCisJaWYge1tsbGVuZ3RoICRjaGlsZHJlbigkdiwkaWQpXSA+IDF9IHsKKwkgICAgc2V0IGNoaWxkcmVuKCR2LCRpZCkgW2xzb3J0IC1jb21tYW5kIFtsaXN0IHZ0b2tjbXAgJHZdIFwKKwkJCQkgICAgICAkY2hpbGRyZW4oJHYsJGlkKV0KKwl9CisJc2V0IG9sZHRvayBbbGluZGV4ICR2YXJjdG9rKCR2KSAkYV0KKwlpZiB7ISR2ZGF0ZW1vZGUoJHYpfSB7CisJICAgIHNldCB0b2sge30KKwl9IGVsc2UgeworCSAgICBzZXQgdG9rICRvbGR0b2sKKwl9CisJc2V0IGthIDAKKwlzZXQga2lkIFtsYXN0X3JlYWxfY2hpbGQgJHYsJGlkXQorCWlmIHska2lkIG5lIHt9fSB7CisJICAgIHNldCBrICR2YXJjaWQoJHYsJGtpZCkKKwkgICAgaWYge1tzdHJpbmcgY29tcGFyZSBbbGluZGV4ICR2YXJjdG9rKCR2KSAka10gJHRva10gPiAwfSB7CisJCXNldCBraSAka2lkCisJCXNldCBrYSAkaworCQlzZXQgdG9rIFtsaW5kZXggJHZhcmN0b2soJHYpICRrXQorCSAgICB9CisJfQorCWlmIHska2EgIT0gMH0geworCSAgICBzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJHBhcmVudHMoJHYsJGtpKSAkaWRdCisJICAgIHNldCBqIFtleHByIHtbbGxlbmd0aCAkcGFyZW50cygkdiwka2kpXSAtIDEgLSAkaX1dCisJICAgIGFwcGVuZCB0b2sgW3N0cnJlcCAkal0KKwl9CisJaWYgeyR0b2sgZXEgJG9sZHRva30geworCSAgICBjb250aW51ZQorCX0KKwlzZXQgaWQgW2xpbmRleCAkdmFyY2NvbW1pdHMoJHYsJGEpIGVuZF0KKwlmb3JlYWNoIHAgJHBhcmVudHMoJHYsJGlkKSB7CisJICAgIGlmIHtbaW5mbyBleGlzdHMgdmFyY2lkKCR2LCRwKV19IHsKKwkJc2V0IGtpZGNoYW5nZWQoJHZhcmNpZCgkdiwkcCkpIDEKKwkgICAgfSBlbHNlIHsKKwkJc2V0IHNvcnRraWRzKCRwKSAxCisJICAgIH0KKwl9CisJbHNldCB2YXJjdG9rKCR2KSAkYSAkdG9rCisJc2V0IGIgW2xpbmRleCAkdnVwcHRyKCR2KSAkYV0KKwlpZiB7JGIgIT0gJGthfSB7CisJICAgIGlmIHtbc3RyaW5nIGNvbXBhcmUgW2xpbmRleCAkdmFyY3RvaygkdikgJGthXSAkdnRva21vZCgkdildIDwgMH0geworCQltb2RpZnlfYXJjICR2ICRrYQorCSAgICB9CisJICAgIGlmIHtbc3RyaW5nIGNvbXBhcmUgW2xpbmRleCAkdmFyY3RvaygkdikgJGJdICR2dG9rbW9kKCR2KV0gPCAwfSB7CisJCW1vZGlmeV9hcmMgJHYgJGIKKwkgICAgfQorCSAgICBzZXQgYyBbbGluZGV4ICR2YmFja3B0cigkdikgJGFdCisJICAgIHNldCBkIFtsaW5kZXggJHZsZWZ0cHRyKCR2KSAkYV0KKwkgICAgaWYgeyRjID09IDB9IHsKKwkJbHNldCB2ZG93bnB0cigkdikgJGIgJGQKKwkgICAgfSBlbHNlIHsKKwkJbHNldCB2bGVmdHB0cigkdikgJGMgJGQKKwkgICAgfQorCSAgICBpZiB7JGQgIT0gMH0geworCQlsc2V0IHZiYWNrcHRyKCR2KSAkZCAkYworCSAgICB9CisJICAgIGlmIHtbbGluZGV4ICR2bGFzdGlucygkdikgJGJdID09ICRhfSB7CisJCWxzZXQgdmxhc3RpbnMoJHYpICRiICRjCisJICAgIH0KKwkgICAgbHNldCB2dXBwdHIoJHYpICRhICRrYQorCSAgICBzZXQgYyBbbGluZGV4ICR2bGFzdGlucygkdikgJGthXQorCSAgICBpZiB7JGMgPT0gMCB8fCBcCisJCSAgICBbc3RyaW5nIGNvbXBhcmUgJHRvayBbbGluZGV4ICR2YXJjdG9rKCR2KSAkY11dIDwgMH0geworCQlzZXQgYyAka2EKKwkJc2V0IGIgW2xpbmRleCAkdmRvd25wdHIoJHYpICRrYV0KKwkgICAgfSBlbHNlIHsKKwkJc2V0IGIgW2xpbmRleCAkdmxlZnRwdHIoJHYpICRjXQorCSAgICB9CisJICAgIHdoaWxlIHskYiAhPSAwICYmIFwKKwkJICAgICAgW3N0cmluZyBjb21wYXJlICR0b2sgW2xpbmRleCAkdmFyY3RvaygkdikgJGJdXSA+PSAwfSB7CisJCXNldCBjICRiCisJCXNldCBiIFtsaW5kZXggJHZsZWZ0cHRyKCR2KSAkY10KKwkgICAgfQorCSAgICBpZiB7JGMgPT0gJGthfSB7CisgCQlsc2V0IHZkb3ducHRyKCR2KSAka2EgJGEKKwkJbHNldCB2YmFja3B0cigkdikgJGEgMAorCSAgICB9IGVsc2UgeworCQlsc2V0IHZsZWZ0cHRyKCR2KSAkYyAkYQorCQlsc2V0IHZiYWNrcHRyKCR2KSAkYSAkYworCSAgICB9CisJICAgIGxzZXQgdmxlZnRwdHIoJHYpICRhICRiCisJICAgIGlmIHskYiAhPSAwfSB7CisJCWxzZXQgdmJhY2twdHIoJHYpICRiICRhCisJICAgIH0KKwkgICAgbHNldCB2bGFzdGlucygkdikgJGthICRhCisJfQorICAgIH0KKyAgICBmb3JlYWNoIGlkIFthcnJheSBuYW1lcyBzb3J0a2lkc10geworCWlmIHtbbGxlbmd0aCAkY2hpbGRyZW4oJHYsJGlkKV0gPiAxfSB7CisJICAgIHNldCBjaGlsZHJlbigkdiwkaWQpIFtsc29ydCAtY29tbWFuZCBbbGlzdCB2dG9rY21wICR2XSBcCisJCQkJICAgICAgJGNoaWxkcmVuKCR2LCRpZCldCisJfQorICAgIH0KKyAgICBzZXQgdDIgW2Nsb2NrIGNsaWNrcyAtbWlsbGlzZWNvbmRzXQorICAgICNwdXRzICJyZW51bWJlcnZhcmMgZGlkIFtsbGVuZ3RoICR0b2RvXSBvZiAkbnRvdCBhcmNzIGluIFtleHByIHskdDItJHQxfV1tcyIKK30KKworIyBGaXggdXAgdGhlIGdyYXBoIGFmdGVyIHdlIGhhdmUgZm91bmQgb3V0IHRoYXQgaW4gdmlldyAkdiwKKyMgJHAgKGEgY29tbWl0IHRoYXQgd2UgaGF2ZSBhbHJlYWR5IHNlZW4pIGlzIGFjdHVhbGx5IHRoZSBwYXJlbnQKKyMgb2YgdGhlIGxhc3QgY29tbWl0IGluIGFyYyAkYS4KK3Byb2MgZml4X3JldmVyc2FsIHtwIGEgdn0geworICAgIGdsb2JhbCB2YXJjaWQgdmFyY3N0YXJ0IHZhcmN0b2sgdnVwcHRyCisKKyAgICBzZXQgcGEgJHZhcmNpZCgkdiwkcCkKKyAgICBpZiB7JHAgbmUgW2xpbmRleCAkdmFyY3N0YXJ0KCR2KSAkcGFdfSB7CisJc3BsaXR2YXJjICRwICR2CisJc2V0IHBhICR2YXJjaWQoJHYsJHApCisgICAgfQorICAgICMgc2VlZHMgYWx3YXlzIG5lZWQgdG8gYmUgcmVudW1iZXJlZAorICAgIGlmIHtbbGluZGV4ICR2dXBwdHIoJHYpICRwYV0gPT0gMCB8fAorCVtzdHJpbmcgY29tcGFyZSBbbGluZGV4ICR2YXJjdG9rKCR2KSAkYV0gXAorCSAgICAgW2xpbmRleCAkdmFyY3RvaygkdikgJHBhXV0gPiAwfSB7CisJcmVudW1iZXJ2YXJjICRwYSAkdgorICAgIH0KK30KKworcHJvYyBpbnNlcnRyb3cge2lkIHAgdn0geworICAgIGdsb2JhbCBjbWl0bGlzdGVkIGNoaWxkcmVuIHBhcmVudHMgdmFyY2lkIHZhcmN0b2sgdnRva21vZAorICAgIGdsb2JhbCB2YXJjY29tbWl0cyBvcmRlcnRvayBjb21taXRpZHggbnVtY29tbWl0cyBjdXJ2aWV3CisgICAgZ2xvYmFsIHRhcmdldGlkIHRhcmdldHJvdworCisgICAgcmVhZGNvbW1pdCAkaWQKKyAgICBzZXQgdmlkICR2LCRpZAorICAgIHNldCBjbWl0bGlzdGVkKCR2aWQpIDEKKyAgICBzZXQgY2hpbGRyZW4oJHZpZCkge30KKyAgICBzZXQgcGFyZW50cygkdmlkKSBbbGlzdCAkcF0KKyAgICBzZXQgYSBbbmV3dmFyYyAkdiAkaWRdCisgICAgc2V0IHZhcmNpZCgkdmlkKSAkYQorICAgIGlmIHtbc3RyaW5nIGNvbXBhcmUgW2xpbmRleCAkdmFyY3RvaygkdikgJGFdICR2dG9rbW9kKCR2KV0gPCAwfSB7CisJbW9kaWZ5X2FyYyAkdiAkYQorICAgIH0KKyAgICBsYXBwZW5kIHZhcmNjb21taXRzKCR2LCRhKSAkaWQKKyAgICBzZXQgdnAgJHYsJHAKKyAgICBpZiB7W2xsZW5ndGggW2xhcHBlbmQgY2hpbGRyZW4oJHZwKSAkaWRdXSA+IDF9IHsKKwlzZXQgY2hpbGRyZW4oJHZwKSBbbHNvcnQgLWNvbW1hbmQgW2xpc3QgdnRva2NtcCAkdl0gJGNoaWxkcmVuKCR2cCldCisJY2F0Y2gge3Vuc2V0IG9yZGVydG9rfQorICAgIH0KKyAgICBmaXhfcmV2ZXJzYWwgJHAgJGEgJHYKKyAgICBpbmNyIGNvbW1pdGlkeCgkdikKKyAgICBpZiB7JHYgPT0gJGN1cnZpZXd9IHsKKwlzZXQgbnVtY29tbWl0cyAkY29tbWl0aWR4KCR2KQorCXNldGNhbnZzY3JvbGwKKwlpZiB7W2luZm8gZXhpc3RzIHRhcmdldGlkXX0geworCSAgICBpZiB7IVtjb21lc19iZWZvcmUgJHRhcmdldGlkICRwXX0geworCQlpbmNyIHRhcmdldHJvdworCSAgICB9CisJfQorICAgIH0KK30KKworcHJvYyBpbnNlcnRmYWtlcm93IHtpZCBwfSB7CisgICAgZ2xvYmFsIHZhcmNpZCB2YXJjY29tbWl0cyBwYXJlbnRzIGNoaWxkcmVuIGNtaXRsaXN0ZWQKKyAgICBnbG9iYWwgY29tbWl0aWR4IHZhcmN0b2sgdnRva21vZCB0YXJnZXRpZCB0YXJnZXRyb3cgY3VydmlldyBudW1jb21taXRzCisKKyAgICBzZXQgdiAkY3VydmlldworICAgIHNldCBhICR2YXJjaWQoJHYsJHApCisgICAgc2V0IGkgW2xzZWFyY2ggLWV4YWN0ICR2YXJjY29tbWl0cygkdiwkYSkgJHBdCisgICAgaWYgeyRpIDwgMH0geworCXB1dHMgIm9vcHM6IGluc2VydGZha2Vyb3cgY2FuJ3QgZmluZCBbc2hvcnRpZHMgJHBdIG9uIGFyYyAkYSIKKwlyZXR1cm4KKyAgICB9CisgICAgc2V0IGNoaWxkcmVuKCR2LCRpZCkge30KKyAgICBzZXQgcGFyZW50cygkdiwkaWQpIFtsaXN0ICRwXQorICAgIHNldCB2YXJjaWQoJHYsJGlkKSAkYQorICAgIGxhcHBlbmQgY2hpbGRyZW4oJHYsJHApICRpZAorICAgIHNldCBjbWl0bGlzdGVkKCR2LCRpZCkgMQorICAgIHNldCBudW1jb21taXRzIFtpbmNyIGNvbW1pdGlkeCgkdildCisgICAgIyBub3RlIHdlIGRlbGliZXJhdGVseSBkb24ndCB1cGRhdGUgdmFyY3N0YXJ0KCR2KSBldmVuIGlmICRpID09IDAKKyAgICBzZXQgdmFyY2NvbW1pdHMoJHYsJGEpIFtsaW5zZXJ0ICR2YXJjY29tbWl0cygkdiwkYSkgJGkgJGlkXQorICAgIG1vZGlmeV9hcmMgJHYgJGEgJGkKKyAgICBpZiB7W2luZm8gZXhpc3RzIHRhcmdldGlkXX0geworCWlmIHshW2NvbWVzX2JlZm9yZSAkdGFyZ2V0aWQgJHBdfSB7CisJICAgIGluY3IgdGFyZ2V0cm93CisJfQorICAgIH0KKyAgICBzZXRjYW52c2Nyb2xsCisgICAgZHJhd3Zpc2libGUKK30KKworcHJvYyByZW1vdmVmYWtlcm93IHtpZH0geworICAgIGdsb2JhbCB2YXJjaWQgdmFyY2NvbW1pdHMgcGFyZW50cyBjaGlsZHJlbiBjb21taXRpZHgKKyAgICBnbG9iYWwgdmFyY3RvayB2dG9rbW9kIGNtaXRsaXN0ZWQgY3VycmVudGlkIHNlbGVjdGVkbGluZQorICAgIGdsb2JhbCB0YXJnZXRpZCBjdXJ2aWV3IG51bWNvbW1pdHMKKworICAgIHNldCB2ICRjdXJ2aWV3CisgICAgaWYge1tsbGVuZ3RoICRwYXJlbnRzKCR2LCRpZCldICE9IDF9IHsKKwlwdXRzICJvb3BzOiByZW1vdmVmYWtlcm93IFtzaG9ydGlkcyAkaWRdIGhhcyBbbGxlbmd0aCAkcGFyZW50cygkdiwkaWQpXSBwYXJlbnRzIgorCXJldHVybgorICAgIH0KKyAgICBzZXQgcCBbbGluZGV4ICRwYXJlbnRzKCR2LCRpZCkgMF0KKyAgICBzZXQgYSAkdmFyY2lkKCR2LCRpZCkKKyAgICBzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJHZhcmNjb21taXRzKCR2LCRhKSAkaWRdCisgICAgaWYgeyRpIDwgMH0geworCXB1dHMgIm9vcHM6IHJlbW92ZWZha2Vyb3cgY2FuJ3QgZmluZCBbc2hvcnRpZHMgJGlkXSBvbiBhcmMgJGEiCisJcmV0dXJuCisgICAgfQorICAgIHVuc2V0IHZhcmNpZCgkdiwkaWQpCisgICAgc2V0IHZhcmNjb21taXRzKCR2LCRhKSBbbHJlcGxhY2UgJHZhcmNjb21taXRzKCR2LCRhKSAkaSAkaV0KKyAgICB1bnNldCBwYXJlbnRzKCR2LCRpZCkKKyAgICB1bnNldCBjaGlsZHJlbigkdiwkaWQpCisgICAgdW5zZXQgY21pdGxpc3RlZCgkdiwkaWQpCisgICAgc2V0IG51bWNvbW1pdHMgW2luY3IgY29tbWl0aWR4KCR2KSAtMV0KKyAgICBzZXQgaiBbbHNlYXJjaCAtZXhhY3QgJGNoaWxkcmVuKCR2LCRwKSAkaWRdCisgICAgaWYgeyRqID49IDB9IHsKKwlzZXQgY2hpbGRyZW4oJHYsJHApIFtscmVwbGFjZSAkY2hpbGRyZW4oJHYsJHApICRqICRqXQorICAgIH0KKyAgICBtb2RpZnlfYXJjICR2ICRhICRpCisgICAgaWYge1tpbmZvIGV4aXN0IGN1cnJlbnRpZF0gJiYgJGlkIGVxICRjdXJyZW50aWR9IHsKKwl1bnNldCBjdXJyZW50aWQKKwlzZXQgc2VsZWN0ZWRsaW5lIHt9CisgICAgfQorICAgIGlmIHtbaW5mbyBleGlzdHMgdGFyZ2V0aWRdICYmICR0YXJnZXRpZCBlcSAkaWR9IHsKKwlzZXQgdGFyZ2V0aWQgJHAKKyAgICB9CisgICAgc2V0Y2FudnNjcm9sbAorICAgIGRyYXd2aXNpYmxlCit9CisKK3Byb2MgZmlyc3RfcmVhbF9jaGlsZCB7dnB9IHsKKyAgICBnbG9iYWwgY2hpbGRyZW4gbnVsbGlkIG51bGxpZDIKKworICAgIGZvcmVhY2ggaWQgJGNoaWxkcmVuKCR2cCkgeworCWlmIHskaWQgbmUgJG51bGxpZCAmJiAkaWQgbmUgJG51bGxpZDJ9IHsKKwkgICAgcmV0dXJuICRpZAorCX0KKyAgICB9CisgICAgcmV0dXJuIHt9Cit9CisKK3Byb2MgbGFzdF9yZWFsX2NoaWxkIHt2cH0geworICAgIGdsb2JhbCBjaGlsZHJlbiBudWxsaWQgbnVsbGlkMgorCisgICAgc2V0IGtpZHMgJGNoaWxkcmVuKCR2cCkKKyAgICBmb3Ige3NldCBpIFtsbGVuZ3RoICRraWRzXX0ge1tpbmNyIGkgLTFdID49IDB9IHt9IHsKKwlzZXQgaWQgW2xpbmRleCAka2lkcyAkaV0KKwlpZiB7JGlkIG5lICRudWxsaWQgJiYgJGlkIG5lICRudWxsaWQyfSB7CisJICAgIHJldHVybiAkaWQKKwl9CisgICAgfQorICAgIHJldHVybiB7fQorfQorCitwcm9jIHZ0b2tjbXAge3YgYSBifSB7CisgICAgZ2xvYmFsIHZhcmN0b2sgdmFyY2lkCisKKyAgICByZXR1cm4gW3N0cmluZyBjb21wYXJlIFtsaW5kZXggJHZhcmN0b2soJHYpICR2YXJjaWQoJHYsJGEpXSBcCisJCVtsaW5kZXggJHZhcmN0b2soJHYpICR2YXJjaWQoJHYsJGIpXV0KK30KKworIyBUaGlzIGFzc3VtZXMgdGhhdCBpZiBsaW0gaXMgbm90IGdpdmVuLCB0aGUgY2FsbGVyIGhhcyBjaGVja2VkIHRoYXQKKyMgYXJjIGEncyB0b2tlbiBpcyBsZXNzIHRoYW4gJHZ0b2ttb2QoJHYpCitwcm9jIG1vZGlmeV9hcmMge3YgYSB7bGltIHt9fX0geworICAgIGdsb2JhbCB2YXJjdG9rIHZ0b2ttb2QgdmFyY21vZCB2YXJjcm93IHZ1cHB0ciBjdXJ2aWV3IHZyb3dtb2QgdmFyY2NvbW1pdHMKKworICAgIGlmIHskbGltIG5lIHt9fSB7CisJc2V0IGMgW3N0cmluZyBjb21wYXJlIFtsaW5kZXggJHZhcmN0b2soJHYpICRhXSAkdnRva21vZCgkdildCisJaWYgeyRjID4gMH0gcmV0dXJuCisJaWYgeyRjID09IDB9IHsKKwkgICAgc2V0IHIgW2xpbmRleCAkdmFyY3JvdygkdikgJGFdCisJICAgIGlmIHskciBuZSB7fSAmJiAkdnJvd21vZCgkdikgPD0gJHIgKyAkbGltfSByZXR1cm4KKwl9CisgICAgfQorICAgIHNldCB2dG9rbW9kKCR2KSBbbGluZGV4ICR2YXJjdG9rKCR2KSAkYV0KKyAgICBzZXQgdmFyY21vZCgkdikgJGEKKyAgICBpZiB7JHYgPT0gJGN1cnZpZXd9IHsKKwl3aGlsZSB7JGEgIT0gMCAmJiBbbGluZGV4ICR2YXJjcm93KCR2KSAkYV0gZXEge319IHsKKwkgICAgc2V0IGEgW2xpbmRleCAkdnVwcHRyKCR2KSAkYV0KKwkgICAgc2V0IGxpbSB7fQorCX0KKwlzZXQgciAwCisJaWYgeyRhICE9IDB9IHsKKwkgICAgaWYgeyRsaW0gZXEge319IHsKKwkJc2V0IGxpbSBbbGxlbmd0aCAkdmFyY2NvbW1pdHMoJHYsJGEpXQorCSAgICB9CisJICAgIHNldCByIFtleHByIHtbbGluZGV4ICR2YXJjcm93KCR2KSAkYV0gKyAkbGltfV0KKwl9CisJc2V0IHZyb3dtb2QoJHYpICRyCisJdW5kb2xheW91dCAkcgorICAgIH0KK30KKworcHJvYyB1cGRhdGVfYXJjcm93cyB7dn0geworICAgIGdsb2JhbCB2dG9rbW9kIHZhcmNtb2QgdnJvd21vZCB2YXJjcm93IGNvbW1pdGlkeCBjdXJyZW50aWQgc2VsZWN0ZWRsaW5lCisgICAgZ2xvYmFsIHZhcmNpZCB2cm93bnVtIHZhcmNvcmRlciB2YXJjaXggdmFyY2NvbW1pdHMKKyAgICBnbG9iYWwgdnVwcHRyIHZkb3ducHRyIHZsZWZ0cHRyIHZhcmN0b2sKKyAgICBnbG9iYWwgZGlzcGxheW9yZGVyIHBhcmVudGxpc3QgY3VydmlldyBjYWNoZWRfY29tbWl0cm93CisKKyAgICBpZiB7JHZyb3dtb2QoJHYpID09ICRjb21taXRpZHgoJHYpfSByZXR1cm4KKyAgICBpZiB7JHYgPT0gJGN1cnZpZXd9IHsKKwlpZiB7W2xsZW5ndGggJGRpc3BsYXlvcmRlcl0gPiAkdnJvd21vZCgkdil9IHsKKwkgICAgc2V0IGRpc3BsYXlvcmRlciBbbHJhbmdlICRkaXNwbGF5b3JkZXIgMCBbZXhwciB7JHZyb3dtb2QoJHYpIC0gMX1dXQorCSAgICBzZXQgcGFyZW50bGlzdCBbbHJhbmdlICRwYXJlbnRsaXN0IDAgW2V4cHIgeyR2cm93bW9kKCR2KSAtIDF9XV0KKwl9CisJY2F0Y2gge3Vuc2V0IGNhY2hlZF9jb21taXRyb3d9CisgICAgfQorICAgIHNldCBuYXJjdG90IFtleHByIHtbbGxlbmd0aCAkdmFyY3RvaygkdildIC0gMX1dCisgICAgc2V0IGEgJHZhcmNtb2QoJHYpCisgICAgd2hpbGUgeyRhICE9IDAgJiYgW2xpbmRleCAkdmFyY2l4KCR2KSAkYV0gZXEge319IHsKKwkjIGdvIHVwIHRoZSB0cmVlIHVudGlsIHdlIGZpbmQgc29tZXRoaW5nIHRoYXQgaGFzIGEgcm93IG51bWJlciwKKwkjIG9yIHdlIGdldCB0byBhIHNlZWQKKwlzZXQgYSBbbGluZGV4ICR2dXBwdHIoJHYpICRhXQorICAgIH0KKyAgICBpZiB7JGEgPT0gMH0geworCXNldCBhIFtsaW5kZXggJHZkb3ducHRyKCR2KSAwXQorCWlmIHskYSA9PSAwfSByZXR1cm4KKwlzZXQgdnJvd251bSgkdikgezB9CisJc2V0IHZhcmNvcmRlcigkdikgW2xpc3QgJGFdCisJbHNldCB2YXJjaXgoJHYpICRhIDAKKwlsc2V0IHZhcmNyb3coJHYpICRhIDAKKwlzZXQgYXJjbiAwCisJc2V0IHJvdyAwCisgICAgfSBlbHNlIHsKKwlzZXQgYXJjbiBbbGluZGV4ICR2YXJjaXgoJHYpICRhXQorCWlmIHtbbGxlbmd0aCAkdnJvd251bSgkdildID4gJGFyY24gKyAxfSB7CisJICAgIHNldCB2cm93bnVtKCR2KSBbbHJhbmdlICR2cm93bnVtKCR2KSAwICRhcmNuXQorCSAgICBzZXQgdmFyY29yZGVyKCR2KSBbbHJhbmdlICR2YXJjb3JkZXIoJHYpIDAgJGFyY25dCisJfQorCXNldCByb3cgW2xpbmRleCAkdmFyY3JvdygkdikgJGFdCisgICAgfQorICAgIHdoaWxlIHsxfSB7CisJc2V0IHAgJGEKKwlpbmNyIHJvdyBbbGxlbmd0aCAkdmFyY2NvbW1pdHMoJHYsJGEpXQorCSMgZ28gZG93biBpZiBwb3NzaWJsZQorCXNldCBiIFtsaW5kZXggJHZkb3ducHRyKCR2KSAkYV0KKwlpZiB7JGIgPT0gMH0geworCSAgICAjIGlmIG5vdCwgZ28gbGVmdCwgb3IgZ28gdXAgdW50aWwgd2UgY2FuIGdvIGxlZnQKKwkgICAgd2hpbGUgeyRhICE9IDB9IHsKKwkJc2V0IGIgW2xpbmRleCAkdmxlZnRwdHIoJHYpICRhXQorCQlpZiB7JGIgIT0gMH0gYnJlYWsKKwkJc2V0IGEgW2xpbmRleCAkdnVwcHRyKCR2KSAkYV0KKwkgICAgfQorCSAgICBpZiB7JGEgPT0gMH0gYnJlYWsKKwl9CisJc2V0IGEgJGIKKwlpbmNyIGFyY24KKwlsYXBwZW5kIHZyb3dudW0oJHYpICRyb3cKKwlsYXBwZW5kIHZhcmNvcmRlcigkdikgJGEKKwlsc2V0IHZhcmNpeCgkdikgJGEgJGFyY24KKwlsc2V0IHZhcmNyb3coJHYpICRhICRyb3cKKyAgICB9CisgICAgc2V0IHZ0b2ttb2QoJHYpIFtsaW5kZXggJHZhcmN0b2soJHYpICRwXQorICAgIHNldCB2YXJjbW9kKCR2KSAkcAorICAgIHNldCB2cm93bW9kKCR2KSAkcm93CisgICAgaWYge1tpbmZvIGV4aXN0cyBjdXJyZW50aWRdfSB7CisJc2V0IHNlbGVjdGVkbGluZSBbcm93b2Zjb21taXQgJGN1cnJlbnRpZF0KKyAgICB9Cit9CisKKyMgVGVzdCB3aGV0aGVyIHZpZXcgJHYgY29udGFpbnMgY29tbWl0ICRpZAorcHJvYyBjb21taXRpbnZpZXcge2lkIHZ9IHsKKyAgICBnbG9iYWwgdmFyY2lkCisKKyAgICByZXR1cm4gW2luZm8gZXhpc3RzIHZhcmNpZCgkdiwkaWQpXQorfQorCisjIFJldHVybiB0aGUgcm93IG51bWJlciBmb3IgY29tbWl0ICRpZCBpbiB0aGUgY3VycmVudCB2aWV3Citwcm9jIHJvd29mY29tbWl0IHtpZH0geworICAgIGdsb2JhbCB2YXJjaWQgdmFyY2NvbW1pdHMgdmFyY3JvdyBjdXJ2aWV3IGNhY2hlZF9jb21taXRyb3cKKyAgICBnbG9iYWwgdmFyY3RvayB2dG9rbW9kCisKKyAgICBzZXQgdiAkY3VydmlldworICAgIGlmIHshW2luZm8gZXhpc3RzIHZhcmNpZCgkdiwkaWQpXX0geworCXB1dHMgIm9vcHMgcm93b2Zjb21taXQgbm8gYXJjIGZvciBbc2hvcnRpZHMgJGlkXSIKKwlyZXR1cm4ge30KKyAgICB9CisgICAgc2V0IGEgJHZhcmNpZCgkdiwkaWQpCisgICAgaWYge1tzdHJpbmcgY29tcGFyZSBbbGluZGV4ICR2YXJjdG9rKCR2KSAkYV0gJHZ0b2ttb2QoJHYpXSA+PSAwfSB7CisJdXBkYXRlX2FyY3Jvd3MgJHYKKyAgICB9CisgICAgaWYge1tpbmZvIGV4aXN0cyBjYWNoZWRfY29tbWl0cm93KCRpZCldfSB7CisJcmV0dXJuICRjYWNoZWRfY29tbWl0cm93KCRpZCkKKyAgICB9CisgICAgc2V0IGkgW2xzZWFyY2ggLWV4YWN0ICR2YXJjY29tbWl0cygkdiwkYSkgJGlkXQorICAgIGlmIHskaSA8IDB9IHsKKwlwdXRzICJvb3BzIGRpZG4ndCBmaW5kIGNvbW1pdCBbc2hvcnRpZHMgJGlkXSBpbiBhcmMgJGEiCisJcmV0dXJuIHt9CisgICAgfQorICAgIGluY3IgaSBbbGluZGV4ICR2YXJjcm93KCR2KSAkYV0KKyAgICBzZXQgY2FjaGVkX2NvbW1pdHJvdygkaWQpICRpCisgICAgcmV0dXJuICRpCit9CisKKyMgUmV0dXJucyAxIGlmIGEgaXMgb24gYW4gZWFybGllciByb3cgdGhhbiBiLCBvdGhlcndpc2UgMAorcHJvYyBjb21lc19iZWZvcmUge2EgYn0geworICAgIGdsb2JhbCB2YXJjaWQgdmFyY3RvayBjdXJ2aWV3CisKKyAgICBzZXQgdiAkY3VydmlldworICAgIGlmIHskYSBlcSAkYiB8fCAhW2luZm8gZXhpc3RzIHZhcmNpZCgkdiwkYSldIHx8IFwKKwkgICAgIVtpbmZvIGV4aXN0cyB2YXJjaWQoJHYsJGIpXX0geworCXJldHVybiAwCisgICAgfQorICAgIGlmIHskdmFyY2lkKCR2LCRhKSAhPSAkdmFyY2lkKCR2LCRiKX0geworCXJldHVybiBbZXhwciB7W3N0cmluZyBjb21wYXJlIFtsaW5kZXggJHZhcmN0b2soJHYpICR2YXJjaWQoJHYsJGEpXSBcCisJCQkgICBbbGluZGV4ICR2YXJjdG9rKCR2KSAkdmFyY2lkKCR2LCRiKV1dIDwgMH1dCisgICAgfQorICAgIHJldHVybiBbZXhwciB7W3Jvd29mY29tbWl0ICRhXSA8IFtyb3dvZmNvbW1pdCAkYl19XQorfQorCitwcm9jIGJzZWFyY2gge2wgZWx0fSB7CisgICAgaWYge1tsbGVuZ3RoICRsXSA9PSAwIHx8ICRlbHQgPD0gW2xpbmRleCAkbCAwXX0geworCXJldHVybiAwCisgICAgfQorICAgIHNldCBsbyAwCisgICAgc2V0IGhpIFtsbGVuZ3RoICRsXQorICAgIHdoaWxlIHskaGkgLSAkbG8gPiAxfSB7CisJc2V0IG1pZCBbZXhwciB7aW50KCgkbG8gKyAkaGkpIC8gMil9XQorCXNldCB0IFtsaW5kZXggJGwgJG1pZF0KKwlpZiB7JGVsdCA8ICR0fSB7CisJICAgIHNldCBoaSAkbWlkCisJfSBlbHNlaWYgeyRlbHQgPiAkdH0geworCSAgICBzZXQgbG8gJG1pZAorCX0gZWxzZSB7CisJICAgIHJldHVybiAkbWlkCisJfQorICAgIH0KKyAgICByZXR1cm4gJGxvCit9CisKKyMgTWFrZSBzdXJlIHJvd3MgJHN0YXJ0Li4kZW5kLTEgYXJlIHZhbGlkIGluIGRpc3BsYXlvcmRlciBhbmQgcGFyZW50bGlzdAorcHJvYyBtYWtlX2Rpc3BvcmRlciB7c3RhcnQgZW5kfSB7CisgICAgZ2xvYmFsIHZyb3dudW0gY3VydmlldyBjb21taXRpZHggZGlzcGxheW9yZGVyIHBhcmVudGxpc3QKKyAgICBnbG9iYWwgdmFyY2NvbW1pdHMgdmFyY29yZGVyIHBhcmVudHMgdnJvd21vZCB2YXJjcm93CisgICAgZ2xvYmFsIGRfdmFsaWRfc3RhcnQgZF92YWxpZF9lbmQKKworICAgIGlmIHskZW5kID4gJHZyb3dtb2QoJGN1cnZpZXcpfSB7CisJdXBkYXRlX2FyY3Jvd3MgJGN1cnZpZXcKKyAgICB9CisgICAgc2V0IGFpIFtic2VhcmNoICR2cm93bnVtKCRjdXJ2aWV3KSAkc3RhcnRdCisgICAgc2V0IHN0YXJ0IFtsaW5kZXggJHZyb3dudW0oJGN1cnZpZXcpICRhaV0KKyAgICBzZXQgbmFyYyBbbGxlbmd0aCAkdnJvd251bSgkY3VydmlldyldCisgICAgZm9yIHtzZXQgciAkc3RhcnR9IHskYWkgPCAkbmFyYyAmJiAkciA8ICRlbmR9IHtpbmNyIGFpfSB7CisJc2V0IGEgW2xpbmRleCAkdmFyY29yZGVyKCRjdXJ2aWV3KSAkYWldCisJc2V0IGwgW2xsZW5ndGggJGRpc3BsYXlvcmRlcl0KKwlzZXQgYWwgW2xsZW5ndGggJHZhcmNjb21taXRzKCRjdXJ2aWV3LCRhKV0KKwlpZiB7JGwgPCAkciArICRhbH0geworCSAgICBpZiB7JGwgPCAkcn0geworCQlzZXQgcGFkIFtudGltZXMgW2V4cHIgeyRyIC0gJGx9XSB7fV0KKwkJc2V0IGRpc3BsYXlvcmRlciBbY29uY2F0ICRkaXNwbGF5b3JkZXIgJHBhZF0KKwkJc2V0IHBhcmVudGxpc3QgW2NvbmNhdCAkcGFyZW50bGlzdCAkcGFkXQorCSAgICB9IGVsc2VpZiB7JGwgPiAkcn0geworCQlzZXQgZGlzcGxheW9yZGVyIFtscmFuZ2UgJGRpc3BsYXlvcmRlciAwIFtleHByIHskciAtIDF9XV0KKwkJc2V0IHBhcmVudGxpc3QgW2xyYW5nZSAkcGFyZW50bGlzdCAwIFtleHByIHskciAtIDF9XV0KKwkgICAgfQorCSAgICBmb3JlYWNoIGlkICR2YXJjY29tbWl0cygkY3VydmlldywkYSkgeworCQlsYXBwZW5kIGRpc3BsYXlvcmRlciAkaWQKKwkJbGFwcGVuZCBwYXJlbnRsaXN0ICRwYXJlbnRzKCRjdXJ2aWV3LCRpZCkKKwkgICAgfQorCX0gZWxzZWlmIHtbbGluZGV4ICRkaXNwbGF5b3JkZXIgW2V4cHIgeyRyICsgJGFsIC0gMX1dXSBlcSB7fX0geworCSAgICBzZXQgaSAkcgorCSAgICBmb3JlYWNoIGlkICR2YXJjY29tbWl0cygkY3VydmlldywkYSkgeworCQlsc2V0IGRpc3BsYXlvcmRlciAkaSAkaWQKKwkJbHNldCBwYXJlbnRsaXN0ICRpICRwYXJlbnRzKCRjdXJ2aWV3LCRpZCkKKwkJaW5jciBpCisJICAgIH0KKwl9CisJaW5jciByICRhbAorICAgIH0KK30KKworcHJvYyBjb21taXRvbnJvdyB7cm93fSB7CisgICAgZ2xvYmFsIGRpc3BsYXlvcmRlcgorCisgICAgc2V0IGlkIFtsaW5kZXggJGRpc3BsYXlvcmRlciAkcm93XQorICAgIGlmIHskaWQgZXEge319IHsKKwltYWtlX2Rpc3BvcmRlciAkcm93IFtleHByIHskcm93ICsgMX1dCisJc2V0IGlkIFtsaW5kZXggJGRpc3BsYXlvcmRlciAkcm93XQorICAgIH0KKyAgICByZXR1cm4gJGlkCit9CisKK3Byb2MgY2xvc2V2YXJjcyB7dn0geworICAgIGdsb2JhbCB2YXJjdG9rIHZhcmNjb21taXRzIHZhcmNpZCBwYXJlbnRzIGNoaWxkcmVuCisgICAgZ2xvYmFsIGNtaXRsaXN0ZWQgY29tbWl0aWR4IGNvbW1pdGludGVyZXN0IHZ0b2ttb2QKKworICAgIHNldCBtaXNzaW5nX3BhcmVudHMgMAorICAgIHNldCBzY3JpcHRzIHt9CisgICAgc2V0IG5hcmNzIFtsbGVuZ3RoICR2YXJjdG9rKCR2KV0KKyAgICBmb3Ige3NldCBhIDF9IHskYSA8ICRuYXJjc30ge2luY3IgYX0geworCXNldCBpZCBbbGluZGV4ICR2YXJjY29tbWl0cygkdiwkYSkgZW5kXQorCWZvcmVhY2ggcCAkcGFyZW50cygkdiwkaWQpIHsKKwkgICAgaWYge1tpbmZvIGV4aXN0cyB2YXJjaWQoJHYsJHApXX0gY29udGludWUKKwkgICAgIyBhZGQgcCBhcyBhIG5ldyBjb21taXQKKwkgICAgaW5jciBtaXNzaW5nX3BhcmVudHMKKwkgICAgc2V0IGNtaXRsaXN0ZWQoJHYsJHApIDAKKwkgICAgc2V0IHBhcmVudHMoJHYsJHApIHt9CisJICAgIGlmIHtbbGxlbmd0aCAkY2hpbGRyZW4oJHYsJHApXSA9PSAxICYmCisJCVtsbGVuZ3RoICRwYXJlbnRzKCR2LCRpZCldID09IDF9IHsKKwkJc2V0IGIgJGEKKwkgICAgfSBlbHNlIHsKKwkJc2V0IGIgW25ld3ZhcmMgJHYgJHBdCisJICAgIH0KKwkgICAgc2V0IHZhcmNpZCgkdiwkcCkgJGIKKwkgICAgaWYge1tzdHJpbmcgY29tcGFyZSBbbGluZGV4ICR2YXJjdG9rKCR2KSAkYl0gJHZ0b2ttb2QoJHYpXSA8IDB9IHsKKwkJbW9kaWZ5X2FyYyAkdiAkYgorCSAgICB9CisJICAgIGxhcHBlbmQgdmFyY2NvbW1pdHMoJHYsJGIpICRwCisJICAgIGluY3IgY29tbWl0aWR4KCR2KQorCSAgICBpZiB7W2luZm8gZXhpc3RzIGNvbW1pdGludGVyZXN0KCRwKV19IHsKKwkJZm9yZWFjaCBzY3JpcHQgJGNvbW1pdGludGVyZXN0KCRwKSB7CisJCSAgICBsYXBwZW5kIHNjcmlwdHMgW3N0cmluZyBtYXAgW2xpc3QgIiVJIiAkcF0gJHNjcmlwdF0KKwkJfQorCQl1bnNldCBjb21taXRpbnRlcmVzdCgkaWQpCisJICAgIH0KKwl9CisgICAgfQorICAgIGlmIHskbWlzc2luZ19wYXJlbnRzID4gMH0geworCWZvcmVhY2ggcyAkc2NyaXB0cyB7CisJICAgIGV2YWwgJHMKKwl9CisgICAgfQorfQorCisjIFVzZSAkcndpZCBhcyBhIHN1YnN0aXR1dGUgZm9yICRpZCwgaS5lLiByZXBhcmVudCAkaWQncyBjaGlsZHJlbiB0byAkcndpZAorIyBBc3N1bWVzIHdlIGFscmVhZHkgaGF2ZSBhbiBhcmMgZm9yICRyd2lkLgorcHJvYyByZXdyaXRlX2NvbW1pdCB7diBpZCByd2lkfSB7CisgICAgZ2xvYmFsIGNoaWxkcmVuIHBhcmVudHMgdmFyY2lkIHZhcmN0b2sgdnRva21vZCB2YXJjY29tbWl0cworCisgICAgZm9yZWFjaCBjaCAkY2hpbGRyZW4oJHYsJGlkKSB7CisJIyBtYWtlICRyd2lkIGJlICRjaCdzIHBhcmVudCBpbiBwbGFjZSBvZiAkaWQKKwlzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJHBhcmVudHMoJHYsJGNoKSAkaWRdCisJaWYgeyRpIDwgMH0geworCSAgICBwdXRzICJvb3BzIHJld3JpdGVfY29tbWl0IGRpZG4ndCBmaW5kICRpZCBpbiBwYXJlbnQgbGlzdCBmb3IgJGNoIgorCX0KKwlzZXQgcGFyZW50cygkdiwkY2gpIFtscmVwbGFjZSAkcGFyZW50cygkdiwkY2gpICRpICRpICRyd2lkXQorCSMgYWRkICRjaCB0byAkcndpZCdzIGNoaWxkcmVuIGFuZCBzb3J0IHRoZSBsaXN0IGlmIG5lY2Vzc2FyeQorCWlmIHtbbGxlbmd0aCBbbGFwcGVuZCBjaGlsZHJlbigkdiwkcndpZCkgJGNoXV0gPiAxfSB7CisJICAgIHNldCBjaGlsZHJlbigkdiwkcndpZCkgW2xzb3J0IC1jb21tYW5kIFtsaXN0IHZ0b2tjbXAgJHZdIFwKKwkJCQkJJGNoaWxkcmVuKCR2LCRyd2lkKV0KKwl9CisJIyBmaXggdGhlIGdyYXBoIGFmdGVyIGpvaW5pbmcgJGlkIHRvICRyd2lkCisJc2V0IGEgJHZhcmNpZCgkdiwkY2gpCisJZml4X3JldmVyc2FsICRyd2lkICRhICR2CisJIyBwYXJlbnRsaXN0IGlzIHdyb25nIGZvciB0aGUgbGFzdCBlbGVtZW50IG9mIGFyYyAkYQorCSMgZXZlbiBpZiBkaXNwbGF5b3JkZXIgaXMgcmlnaHQsIGhlbmNlIHRoZSAzcmQgYXJnIGhlcmUKKwltb2RpZnlfYXJjICR2ICRhIFtleHByIHtbbGxlbmd0aCAkdmFyY2NvbW1pdHMoJHYsJGEpXSAtIDF9XQorICAgIH0KK30KKworcHJvYyBnZXRjb21taXRsaW5lcyB7ZmQgaW5zdCB2aWV3IHVwZGF0aW5nfSAgeworICAgIGdsb2JhbCBjbWl0bGlzdGVkIGNvbW1pdGludGVyZXN0IGxlZnRvdmVyCisgICAgZ2xvYmFsIGNvbW1pdGlkeCBjb21taXRkYXRhIHZkYXRlbW9kZQorICAgIGdsb2JhbCBwYXJlbnRzIGNoaWxkcmVuIGN1cnZpZXcgaGx2aWV3CisgICAgZ2xvYmFsIGlkcGVuZGluZyBvcmRlcnRvaworICAgIGdsb2JhbCB2YXJjY29tbWl0cyB2YXJjaWQgdmFyY3RvayB2dG9rbW9kIHZmaWxlbGltaXQKIAogICAgIHNldCBzdHVmZiBbcmVhZCAkZmQgNTAwMDAwXQogICAgICMgZ2l0IGxvZyBkb2Vzbid0IHRlcm1pbmF0ZSB0aGUgbGFzdCBjb21taXQgd2l0aCBhIG51bGwuLi4KLSAgICBpZiB7JHN0dWZmID09IHt9ICYmICRsZWZ0b3ZlcigkdmlldykgbmUge30gJiYgW2VvZiAkZmRdfSB7CisgICAgaWYgeyRzdHVmZiA9PSB7fSAmJiAkbGVmdG92ZXIoJGluc3QpIG5lIHt9ICYmIFtlb2YgJGZkXX0gewogCXNldCBzdHVmZiAiXDAiCiAgICAgfQogICAgIGlmIHskc3R1ZmYgPT0ge319IHsKIAlpZiB7IVtlb2YgJGZkXX0gewogCSAgICByZXR1cm4gMQogCX0KLQkjIENoZWNrIGlmIHdlIGhhdmUgc2VlbiBhbnkgaWRzIGxpc3RlZCBhcyBwYXJlbnRzIHRoYXQgaGF2ZW4ndAotCSMgYXBwZWFyZWQgaW4gdGhlIGxpc3QKLQlmb3JlYWNoIHZpZCBbYXJyYXkgbmFtZXMgaWRwZW5kaW5nICIkdmlldywqIl0gewotCSAgICAjIHNob3VsZCBvbmx5IGdldCBoZXJlIGlmIGdpdCBsb2cgaXMgYnVnZ3kKLQkgICAgc2V0IGlkIFtsaW5kZXggW3NwbGl0ICR2aWQgIiwiXSAxXQotCSAgICBzZXQgY29tbWl0cm93KCR2aWQpICRjb21taXRpZHgoJHZpZXcpCi0JICAgIGluY3IgY29tbWl0aWR4KCR2aWV3KQotCSAgICBpZiB7JHZpZXcgPT0gJGN1cnZpZXd9IHsKLQkJbGFwcGVuZCBwYXJlbnRsaXN0IHt9Ci0JCWxhcHBlbmQgZGlzcGxheW9yZGVyICRpZAotCQlsYXBwZW5kIGNvbW1pdGxpc3RlZCAwCi0JICAgIH0gZWxzZSB7Ci0JCWxhcHBlbmQgdnBhcmVudGxpc3QoJHZpZXcpIHt9Ci0JCWxhcHBlbmQgdmRpc3BvcmRlcigkdmlldykgJGlkCi0JCWxhcHBlbmQgdmNtaXRsaXN0ZWQoJHZpZXcpIDAKLQkgICAgfQorCWdsb2JhbCBjb21tZmQgdmlld2NvbXBsZXRlIHZpZXdhY3RpdmUgdmlld25hbWUKKwlnbG9iYWwgdmlld2luc3RhbmNlcworCXVuc2V0IGNvbW1mZCgkaW5zdCkKKwlzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJHZpZXdpbnN0YW5jZXMoJHZpZXcpICRpbnN0XQorCWlmIHskaSA+PSAwfSB7CisJICAgIHNldCB2aWV3aW5zdGFuY2VzKCR2aWV3KSBbbHJlcGxhY2UgJHZpZXdpbnN0YW5jZXMoJHZpZXcpICRpICRpXQogCX0KLQlzZXQgdmlld2NvbXBsZXRlKCR2aWV3KSAxCi0JZ2xvYmFsIHZpZXduYW1lIHByb2dyZXNzY29vcmRzCi0JdW5zZXQgY29tbWZkKCR2aWV3KQotCW5vdGJ1c3kgJHZpZXcKLQlzZXQgcHJvZ3Jlc3Njb29yZHMgezAgMH0KLQlhZGp1c3Rwcm9ncmVzcwogCSMgc2V0IGl0IGJsb2NraW5nIHNvIHdlIHdhaXQgZm9yIHRoZSBwcm9jZXNzIHRvIHRlcm1pbmF0ZQogCWZjb25maWd1cmUgJGZkIC1ibG9ja2luZyAxCiAJaWYge1tjYXRjaCB7Y2xvc2UgJGZkfSBlcnJdfSB7CkBAIC0yMTMsMTAgKzEyODgsMTAgQEAKIAkgICAgfQogCSAgICBpZiB7W3N0cmluZyByYW5nZSAkZXJyIDAgNF0gPT0gInVzYWdlIn0gewogCQlzZXQgZXJyICJHaXRrOiBlcnJvciByZWFkaW5nIGNvbW1pdHMkZnY6XAotCQkJYmFkIGFyZ3VtZW50cyB0byBnaXQgcmV2LWxpc3QuIgorCQkJYmFkIGFyZ3VtZW50cyB0byBnaXQgbG9nLiIKIAkJaWYgeyR2aWV3bmFtZSgkdmlldykgZXEgIkNvbW1hbmQgbGluZSJ9IHsKIAkJICAgIGFwcGVuZCBlcnIgXAotCQkJIiAgKE5vdGU6IGFyZ3VtZW50cyB0byBnaXRrIGFyZSBwYXNzZWQgdG8gZ2l0IHJldi1saXN0XAorCQkJIiAgKE5vdGU6IGFyZ3VtZW50cyB0byBnaXRrIGFyZSBwYXNzZWQgdG8gZ2l0IGxvZ1wKIAkJCSB0byBhbGxvdyBzZWxlY3Rpb24gb2YgY29tbWl0cyB0byBiZSBkaXNwbGF5ZWQuKSIKIAkJfQogCSAgICB9IGVsc2UgewpAQCAtMjI0LDIzICsxMjk5LDMxIEBACiAJICAgIH0KIAkgICAgZXJyb3JfcG9wdXAgJGVycgogCX0KKwlpZiB7W2luY3Igdmlld2FjdGl2ZSgkdmlldykgLTFdIDw9IDB9IHsKKwkgICAgc2V0IHZpZXdjb21wbGV0ZSgkdmlldykgMQorCSAgICAjIENoZWNrIGlmIHdlIGhhdmUgc2VlbiBhbnkgaWRzIGxpc3RlZCBhcyBwYXJlbnRzIHRoYXQgaGF2ZW4ndAorCSAgICAjIGFwcGVhcmVkIGluIHRoZSBsaXN0CisJICAgIGNsb3NldmFyY3MgJHZpZXcKKwkgICAgbm90YnVzeSAkdmlldworCX0KIAlpZiB7JHZpZXcgPT0gJGN1cnZpZXd9IHsKLQkgICAgcnVuIGNoZXdjb21taXRzICR2aWV3CisJICAgIHJ1biBjaGV3Y29tbWl0cwogCX0KIAlyZXR1cm4gMAogICAgIH0KICAgICBzZXQgc3RhcnQgMAogICAgIHNldCBnb3Rzb21lIDAKKyAgICBzZXQgc2NyaXB0cyB7fQogICAgIHdoaWxlIDEgewogCXNldCBpIFtzdHJpbmcgZmlyc3QgIlwwIiAkc3R1ZmYgJHN0YXJ0XQogCWlmIHskaSA8IDB9IHsKLQkgICAgYXBwZW5kIGxlZnRvdmVyKCR2aWV3KSBbc3RyaW5nIHJhbmdlICRzdHVmZiAkc3RhcnQgZW5kXQorCSAgICBhcHBlbmQgbGVmdG92ZXIoJGluc3QpIFtzdHJpbmcgcmFuZ2UgJHN0dWZmICRzdGFydCBlbmRdCiAJICAgIGJyZWFrCiAJfQogCWlmIHskc3RhcnQgPT0gMH0gewotCSAgICBzZXQgY21pdCAkbGVmdG92ZXIoJHZpZXcpCisJICAgIHNldCBjbWl0ICRsZWZ0b3ZlcigkaW5zdCkKIAkgICAgYXBwZW5kIGNtaXQgW3N0cmluZyByYW5nZSAkc3R1ZmYgMCBbZXhwciB7JGkgLSAxfV1dCi0JICAgIHNldCBsZWZ0b3Zlcigkdmlldykge30KKwkgICAgc2V0IGxlZnRvdmVyKCRpbnN0KSB7fQogCX0gZWxzZSB7CiAJICAgIHNldCBjbWl0IFtzdHJpbmcgcmFuZ2UgJHN0dWZmICRzdGFydCBbZXhwciB7JGkgLSAxfV1dCiAJfQpAQCAtMjc2LDEyMSArMTM1OSwxMjcgQEAKIAkgICAgZXhpdCAxCiAJfQogCXNldCBpZCBbbGluZGV4ICRpZHMgMF0KLQlpZiB7IVtpbmZvIGV4aXN0cyBvcmRlcnRvaygkdmlldywkaWQpXX0gewotCSAgICBzZXQgb3RvayAib1tzdHJyZXAgJHZuZXh0cm9vdCgkdmlldyldIgotCSAgICBpbmNyIHZuZXh0cm9vdCgkdmlldykKLQkgICAgc2V0IG9yZGVydG9rKCR2aWV3LCRpZCkgJG90b2sKLQl9IGVsc2UgewotCSAgICBzZXQgb3RvayAkb3JkZXJ0b2soJHZpZXcsJGlkKQotCSAgICB1bnNldCBpZHBlbmRpbmcoJHZpZXcsJGlkKQorCXNldCB2aWQgJHZpZXcsJGlkCisKKwlpZiB7ISRsaXN0ZWQgJiYgJHVwZGF0aW5nICYmICFbaW5mbyBleGlzdHMgdmFyY2lkKCR2aWQpXSAmJgorCSAgICAkdmZpbGVsaW1pdCgkdmlldykgbmUge319IHsKKwkgICAgIyBnaXQgbG9nIGRvZXNuJ3QgcmV3cml0ZSBwYXJlbnRzIGZvciB1bmxpc3RlZCBjb21taXRzCisJICAgICMgd2hlbiBkb2luZyBwYXRoIGxpbWl0aW5nLCBzbyB3b3JrIGFyb3VuZCB0aGF0IGhlcmUKKwkgICAgIyBieSB3b3JraW5nIG91dCB0aGUgcmV3cml0dGVuIHBhcmVudCB3aXRoIGdpdCByZXYtbGlzdAorCSAgICAjIGFuZCBpZiB3ZSBhbHJlYWR5IGtub3cgYWJvdXQgaXQsIHVzaW5nIHRoZSByZXdyaXR0ZW4KKwkgICAgIyBwYXJlbnQgYXMgYSBzdWJzdGl0dXRlIHBhcmVudCBmb3IgJGlkJ3MgY2hpbGRyZW4uCisJICAgIGlmIHshW2NhdGNoIHsKKwkJc2V0IHJ3aWQgW2V4ZWMgZ2l0IHJldi1saXN0IC0tZmlyc3QtcGFyZW50IC0tbWF4LWNvdW50PTEgXAorCQkJICAgICAgJGlkIC0tICR2ZmlsZWxpbWl0KCR2aWV3KV0KKwkgICAgfV19IHsKKwkJaWYgeyRyd2lkIG5lIHt9ICYmIFtpbmZvIGV4aXN0cyB2YXJjaWQoJHZpZXcsJHJ3aWQpXX0geworCQkgICAgIyB1c2UgJHJ3aWQgaW4gcGxhY2Ugb2YgJGlkCisJCSAgICByZXdyaXRlX2NvbW1pdCAkdmlldyAkaWQgJHJ3aWQKKwkJICAgIGNvbnRpbnVlCisJCX0KKwkgICAgfQorCX0KKworCXNldCBhIDAKKwlpZiB7W2luZm8gZXhpc3RzIHZhcmNpZCgkdmlkKV19IHsKKwkgICAgaWYgeyRjbWl0bGlzdGVkKCR2aWQpIHx8ICEkbGlzdGVkfSBjb250aW51ZQorCSAgICBzZXQgYSAkdmFyY2lkKCR2aWQpCiAJfQogCWlmIHskbGlzdGVkfSB7CiAJICAgIHNldCBvbGRzIFtscmFuZ2UgJGlkcyAxIGVuZF0KLQkgICAgaWYge1tsbGVuZ3RoICRvbGRzXSA9PSAxfSB7Ci0JCXNldCBwIFtsaW5kZXggJG9sZHMgMF0KLQkJbGFwcGVuZCBjaGlsZHJlbigkdmlldywkcCkgJGlkCi0JCWlmIHshW2luZm8gZXhpc3RzIG9yZGVydG9rKCR2aWV3LCRwKV19IHsKLQkJICAgIHNldCBvcmRlcnRvaygkdmlldywkcCkgJG9yZGVydG9rKCR2aWV3LCRpZCkKLQkJICAgIHNldCBpZHBlbmRpbmcoJHZpZXcsJHApIDEKLQkJfQotCSAgICB9IGVsc2UgewotCQlzZXQgaSAwCi0JCWZvcmVhY2ggcCAkb2xkcyB7Ci0JCSAgICBpZiB7JGkgPT0gMCB8fCBbbHNlYXJjaCAtZXhhY3QgJG9sZHMgJHBdID49ICRpfSB7Ci0JCQlsYXBwZW5kIGNoaWxkcmVuKCR2aWV3LCRwKSAkaWQKLQkJICAgIH0KLQkJICAgIGlmIHshW2luZm8gZXhpc3RzIG9yZGVydG9rKCR2aWV3LCRwKV19IHsKLQkJCXNldCBvcmRlcnRvaygkdmlldywkcCkgIiRvdG9rW3N0cnJlcCAkaV1dIgotCQkJc2V0IGlkcGVuZGluZygkdmlldywkcCkgMQotCQkgICAgfQotCQkgICAgaW5jciBpCi0JCX0KLQkgICAgfQogCX0gZWxzZSB7CiAJICAgIHNldCBvbGRzIHt9CiAJfQotCWlmIHshW2luZm8gZXhpc3RzIGNoaWxkcmVuKCR2aWV3LCRpZCldfSB7Ci0JICAgIHNldCBjaGlsZHJlbigkdmlldywkaWQpIHt9Ci0JfQogCXNldCBjb21taXRkYXRhKCRpZCkgW3N0cmluZyByYW5nZSAkY21pdCBbZXhwciB7JGogKyAxfV0gZW5kXQotCXNldCBjb21taXRyb3coJHZpZXcsJGlkKSAkY29tbWl0aWR4KCR2aWV3KQotCWluY3IgY29tbWl0aWR4KCR2aWV3KQotCWlmIHskdmlldyA9PSAkY3Vydmlld30gewotCSAgICBsYXBwZW5kIHBhcmVudGxpc3QgJG9sZHMKLQkgICAgbGFwcGVuZCBkaXNwbGF5b3JkZXIgJGlkCi0JICAgIGxhcHBlbmQgY29tbWl0bGlzdGVkICRsaXN0ZWQKLQl9IGVsc2UgewotCSAgICBsYXBwZW5kIHZwYXJlbnRsaXN0KCR2aWV3KSAkb2xkcwotCSAgICBsYXBwZW5kIHZkaXNwb3JkZXIoJHZpZXcpICRpZAotCSAgICBsYXBwZW5kIHZjbWl0bGlzdGVkKCR2aWV3KSAkbGlzdGVkCisJc2V0IGNtaXRsaXN0ZWQoJHZpZCkgJGxpc3RlZAorCXNldCBwYXJlbnRzKCR2aWQpICRvbGRzCisJaWYgeyFbaW5mbyBleGlzdHMgY2hpbGRyZW4oJHZpZCldfSB7CisJICAgIHNldCBjaGlsZHJlbigkdmlkKSB7fQorCX0gZWxzZWlmIHskYSA9PSAwICYmIFtsbGVuZ3RoICRjaGlsZHJlbigkdmlkKV0gPT0gMX0geworCSAgICBzZXQgayBbbGluZGV4ICRjaGlsZHJlbigkdmlkKSAwXQorCSAgICBpZiB7W2xsZW5ndGggJHBhcmVudHMoJHZpZXcsJGspXSA9PSAxICYmCisJCSghJHZkYXRlbW9kZSgkdmlldykgfHwKKwkJICR2YXJjaWQoJHZpZXcsJGspID09IFtsbGVuZ3RoICR2YXJjdG9rKCR2aWV3KV0gLSAxKX0geworCQlzZXQgYSAkdmFyY2lkKCR2aWV3LCRrKQorCSAgICB9CiAJfQorCWlmIHskYSA9PSAwfSB7CisJICAgICMgbmV3IGFyYworCSAgICBzZXQgYSBbbmV3dmFyYyAkdmlldyAkaWRdCisJfQorCWlmIHtbc3RyaW5nIGNvbXBhcmUgW2xpbmRleCAkdmFyY3RvaygkdmlldykgJGFdICR2dG9rbW9kKCR2aWV3KV0gPCAwfSB7CisJICAgIG1vZGlmeV9hcmMgJHZpZXcgJGEKKwl9CisJaWYgeyFbaW5mbyBleGlzdHMgdmFyY2lkKCR2aWQpXX0geworCSAgICBzZXQgdmFyY2lkKCR2aWQpICRhCisJICAgIGxhcHBlbmQgdmFyY2NvbW1pdHMoJHZpZXcsJGEpICRpZAorCSAgICBpbmNyIGNvbW1pdGlkeCgkdmlldykKKwl9CisKKwlzZXQgaSAwCisJZm9yZWFjaCBwICRvbGRzIHsKKwkgICAgaWYgeyRpID09IDAgfHwgW2xzZWFyY2ggLWV4YWN0ICRvbGRzICRwXSA+PSAkaX0geworCQlzZXQgdnAgJHZpZXcsJHAKKwkJaWYge1tsbGVuZ3RoIFtsYXBwZW5kIGNoaWxkcmVuKCR2cCkgJGlkXV0gPiAxICYmCisJCSAgICBbdnRva2NtcCAkdmlldyBbbGluZGV4ICRjaGlsZHJlbigkdnApIGVuZC0xXSAkaWRdID4gMH0geworCQkgICAgc2V0IGNoaWxkcmVuKCR2cCkgW2xzb3J0IC1jb21tYW5kIFtsaXN0IHZ0b2tjbXAgJHZpZXddIFwKKwkJCQkJICAgJGNoaWxkcmVuKCR2cCldCisJCSAgICBjYXRjaCB7dW5zZXQgb3JkZXJ0b2t9CisJCX0KKwkJaWYge1tpbmZvIGV4aXN0cyB2YXJjaWQoJHZpZXcsJHApXX0geworCQkgICAgZml4X3JldmVyc2FsICRwICRhICR2aWV3CisJCX0KKwkgICAgfQorCSAgICBpbmNyIGkKKwl9CisKIAlpZiB7W2luZm8gZXhpc3RzIGNvbW1pdGludGVyZXN0KCRpZCldfSB7CiAJICAgIGZvcmVhY2ggc2NyaXB0ICRjb21taXRpbnRlcmVzdCgkaWQpIHsKLQkJZXZhbCBbc3RyaW5nIG1hcCBbbGlzdCAiJUkiICRpZF0gJHNjcmlwdF0KKwkJbGFwcGVuZCBzY3JpcHRzIFtzdHJpbmcgbWFwIFtsaXN0ICIlSSIgJGlkXSAkc2NyaXB0XQogCSAgICB9CiAJICAgIHVuc2V0IGNvbW1pdGludGVyZXN0KCRpZCkKIAl9CiAJc2V0IGdvdHNvbWUgMQogICAgIH0KICAgICBpZiB7JGdvdHNvbWV9IHsKLQlydW4gY2hld2NvbW1pdHMgJHZpZXcKKwlnbG9iYWwgbnVtY29tbWl0cyBobHZpZXcKKwogCWlmIHskdmlldyA9PSAkY3Vydmlld30gewotCSAgICAjIHVwZGF0ZSBwcm9ncmVzcyBiYXIKLQkgICAgZ2xvYmFsIHByb2dyZXNzZGlybiBwcm9ncmVzc2Nvb3JkcyBwcm9nbGFzdG5jCi0JICAgIHNldCBpbmMgW2V4cHIgeygkY29tbWl0aWR4KCR2aWV3KSAtICRwcm9nbGFzdG5jKSAqIDAuMDAwMn1dCi0JICAgIHNldCBwcm9nbGFzdG5jICRjb21taXRpZHgoJHZpZXcpCi0JICAgIHNldCBsIFtsaW5kZXggJHByb2dyZXNzY29vcmRzIDBdCi0JICAgIHNldCByIFtsaW5kZXggJHByb2dyZXNzY29vcmRzIDFdCi0JICAgIGlmIHskcHJvZ3Jlc3NkaXJufSB7Ci0JCXNldCByIFtleHByIHskciArICRpbmN9XQotCQlpZiB7JHIgPj0gMS4wfSB7Ci0JCSAgICBzZXQgciAxLjAKLQkJICAgIHNldCBwcm9ncmVzc2Rpcm4gMAotCQl9Ci0JCWlmIHskciA+IDAuMn0gewotCQkgICAgc2V0IGwgW2V4cHIgeyRyIC0gMC4yfV0KLQkJfQotCSAgICB9IGVsc2UgewotCQlzZXQgbCBbZXhwciB7JGwgLSAkaW5jfV0KLQkJaWYgeyRsIDw9IDAuMH0gewotCQkgICAgc2V0IGwgMC4wCi0JCSAgICBzZXQgcHJvZ3Jlc3NkaXJuIDEKLQkJfQotCQlzZXQgciBbZXhwciB7JGwgKyAwLjJ9XQotCSAgICB9Ci0JICAgIHNldCBwcm9ncmVzc2Nvb3JkcyBbbGlzdCAkbCAkcl0KLQkgICAgYWRqdXN0cHJvZ3Jlc3MKKwkgICAgc2V0IG51bWNvbW1pdHMgJGNvbW1pdGlkeCgkdmlldykKKwkgICAgcnVuIGNoZXdjb21taXRzCisJfQorCWlmIHtbaW5mbyBleGlzdHMgaGx2aWV3XSAmJiAkdmlldyA9PSAkaGx2aWV3fSB7CisJICAgICMgd2UgbmV2ZXIgYWN0dWFsbHkgZ2V0IGhlcmUuLi4KKwkgICAgcnVuIHZoaWdobGlnaHRtb3JlCisJfQorCWZvcmVhY2ggcyAkc2NyaXB0cyB7CisJICAgIGV2YWwgJHMKIAl9CiAgICAgfQogICAgIHJldHVybiAyCiB9CiAKLXByb2MgY2hld2NvbW1pdHMge3ZpZXd9IHsKK3Byb2MgY2hld2NvbW1pdHMge30gewogICAgIGdsb2JhbCBjdXJ2aWV3IGhsdmlldyB2aWV3Y29tcGxldGUKLSAgICBnbG9iYWwgc2VsZWN0ZWRsaW5lIHBlbmRpbmdfc2VsZWN0CisgICAgZ2xvYmFsIHBlbmRpbmdfc2VsZWN0CiAKLSAgICBpZiB7JHZpZXcgPT0gJGN1cnZpZXd9IHsKLQlsYXlvdXRtb3JlCi0JaWYgeyR2aWV3Y29tcGxldGUoJHZpZXcpfSB7Ci0JICAgIGdsb2JhbCBkaXNwbGF5b3JkZXIgY29tbWl0aWR4IHBoYXNlCi0JICAgIGdsb2JhbCBudW1jb21taXRzIHN0YXJ0bXNlY3MKKyAgICBsYXlvdXRtb3JlCisgICAgaWYgeyR2aWV3Y29tcGxldGUoJGN1cnZpZXcpfSB7CisJZ2xvYmFsIGNvbW1pdGlkeCB2YXJjdG9rCisJZ2xvYmFsIG51bWNvbW1pdHMgc3RhcnRtc2VjcwogCi0JICAgIGlmIHtbaW5mbyBleGlzdHMgcGVuZGluZ19zZWxlY3RdfSB7Ci0JCXNldCByb3cgW2ZpcnN0X3JlYWxfcm93XQotCQlzZWxlY3RsaW5lICRyb3cgMQotCSAgICB9Ci0JICAgIGlmIHskY29tbWl0aWR4KCRjdXJ2aWV3KSA+IDB9IHsKLQkJI3NldCBtcyBbZXhwciB7W2Nsb2NrIGNsaWNrcyAtbWlsbGlzZWNvbmRzXSAtICRzdGFydG1zZWNzfV0KLQkJI3B1dHMgIm92ZXJhbGwgJG1zIG1zIGZvciAkbnVtY29tbWl0cyBjb21taXRzIgotCSAgICB9IGVsc2UgewotCQlzaG93X3N0YXR1cyBbbWMgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiXQotCSAgICB9Ci0JICAgIG5vdGJ1c3kgbGF5b3V0Ci0JICAgIHNldCBwaGFzZSB7fQorCWlmIHtbaW5mbyBleGlzdHMgcGVuZGluZ19zZWxlY3RdfSB7CisJICAgIHNldCByb3cgW2ZpcnN0X3JlYWxfcm93XQorCSAgICBzZWxlY3RsaW5lICRyb3cgMQogCX0KLSAgICB9Ci0gICAgaWYge1tpbmZvIGV4aXN0cyBobHZpZXddICYmICR2aWV3ID09ICRobHZpZXd9IHsKLQl2aGlnaGxpZ2h0bW9yZQorCWlmIHskY29tbWl0aWR4KCRjdXJ2aWV3KSA+IDB9IHsKKwkgICAgI3NldCBtcyBbZXhwciB7W2Nsb2NrIGNsaWNrcyAtbWlsbGlzZWNvbmRzXSAtICRzdGFydG1zZWNzfV0KKwkgICAgI3B1dHMgIm92ZXJhbGwgJG1zIG1zIGZvciAkbnVtY29tbWl0cyBjb21taXRzIgorCSAgICAjcHV0cyAiW2xsZW5ndGggJHZhcmN0b2soJHZpZXcpXSBhcmNzLCAkY29tbWl0aWR4KCR2aWV3KSBjb21taXRzIgorCX0gZWxzZSB7CisJICAgIHNob3dfc3RhdHVzIFttYyAiTm8gY29tbWl0cyBzZWxlY3RlZCJdCisJfQorCW5vdGJ1c3kgbGF5b3V0CiAgICAgfQogICAgIHJldHVybiAwCiB9CkBAIC00MDAsMzggKzE0ODksNiBAQAogICAgIHBhcnNlY29tbWl0ICRpZCAkY29udGVudHMgMAogfQogCi1wcm9jIHVwZGF0ZWNvbW1pdHMge30gewotICAgIGdsb2JhbCB2aWV3ZGF0YSBjdXJ2aWV3IHBoYXNlIGRpc3BsYXlvcmRlciBvcmRlcnRvayBpZHBlbmRpbmcKLSAgICBnbG9iYWwgY2hpbGRyZW4gY29tbWl0cm93IHNlbGVjdGVkbGluZSB0aGlja2VybGluZSBzaG93bmVhcnRhZ3MKLSAgICBnbG9iYWwgaXN3b3JrdHJlZQotCi0gICAgc2V0IGlzd29ya3RyZWUgW2V4cHIge1tleGVjIGdpdCByZXYtcGFyc2UgLS1pcy1pbnNpZGUtd29yay10cmVlXSA9PSAidHJ1ZSJ9XQotCi0gICAgaWYgeyRwaGFzZSBuZSB7fX0gewotCXN0b3BfcmV2X2xpc3QKLQlzZXQgcGhhc2Uge30KLSAgICB9Ci0gICAgc2V0IG4gJGN1cnZpZXcKLSAgICBmb3JlYWNoIGlkICRkaXNwbGF5b3JkZXIgewotCWNhdGNoIHt1bnNldCBjaGlsZHJlbigkbiwkaWQpfQotCWNhdGNoIHt1bnNldCBjb21taXRyb3coJG4sJGlkKX0KLQljYXRjaCB7dW5zZXQgb3JkZXJ0b2soJG4sJGlkKX0KLSAgICB9Ci0gICAgZm9yZWFjaCB2aWQgW2FycmF5IG5hbWVzIGlkcGVuZGluZyAiJG4sKiJdIHsKLQl1bnNldCBpZHBlbmRpbmcoJHZpZCkKLSAgICB9Ci0gICAgc2V0IGN1cnZpZXcgLTEKLSAgICBjYXRjaCB7dW5zZXQgc2VsZWN0ZWRsaW5lfQotICAgIGNhdGNoIHt1bnNldCB0aGlja2VybGluZX0KLSAgICBjYXRjaCB7dW5zZXQgdmlld2RhdGEoJG4pfQotICAgIHJlYWRyZWZzCi0gICAgY2hhbmdlZHJlZnMKLSAgICBpZiB7JHNob3duZWFydGFnc30gewotCWdldGFsbGNvbW1pdHMKLSAgICB9Ci0gICAgc2hvd3ZpZXcgJG4KLX0KLQogcHJvYyBwYXJzZWNvbW1pdCB7aWQgY29udGVudHMgbGlzdGVkfSB7CiAgICAgZ2xvYmFsIGNvbW1pdGluZm8gY2RhdGUKIApAQCAtNDcyLDcgKzE1MjksNyBAQAogCXNldCBoZWFkbGluZSBbc3RyaW5nIHRyaW1yaWdodCBbc3RyaW5nIHJhbmdlICRoZWFkbGluZSAwICRpXV0KICAgICB9CiAgICAgaWYgeyEkbGlzdGVkfSB7Ci0JIyBnaXQgcmV2LWxpc3QgaW5kZW50cyB0aGUgY29tbWVudCBieSA0IHNwYWNlczsKKwkjIGdpdCBsb2cgaW5kZW50cyB0aGUgY29tbWVudCBieSA0IHNwYWNlczsKIAkjIGlmIHdlIGdvdCB0aGlzIHZpYSBnaXQgY2F0LWZpbGUsIGFkZCB0aGUgaW5kZW50YXRpb24KIAlzZXQgbmV3Y29tbWVudCB7fQogCWZvcmVhY2ggbGluZSBbc3BsaXQgJGNvbW1lbnQgIlxuIl0gewpAQCAtNTQ2LDIyICsxNjAzLDIwIEBACiAgICAgc2V0IG1haW5oZWFkIHt9CiAgICAgc2V0IG1haW5oZWFkaWQge30KICAgICBjYXRjaCB7CisJc2V0IG1haW5oZWFkaWQgW2V4ZWMgZ2l0IHJldi1wYXJzZSBIRUFEXQogCXNldCB0aGVoZWFkIFtleGVjIGdpdCBzeW1ib2xpYy1yZWYgSEVBRF0KIAlpZiB7W3N0cmluZyBtYXRjaCAicmVmcy9oZWFkcy8qIiAkdGhlaGVhZF19IHsKIAkgICAgc2V0IG1haW5oZWFkIFtzdHJpbmcgcmFuZ2UgJHRoZWhlYWQgMTEgZW5kXQotCSAgICBpZiB7W2luZm8gZXhpc3RzIGhlYWRpZHMoJG1haW5oZWFkKV19IHsKLQkJc2V0IG1haW5oZWFkaWQgJGhlYWRpZHMoJG1haW5oZWFkKQotCSAgICB9CiAJfQogICAgIH0KIH0KIAogIyBza2lwIG92ZXIgZmFrZSBjb21taXRzCiBwcm9jIGZpcnN0X3JlYWxfcm93IHt9IHsKLSAgICBnbG9iYWwgbnVsbGlkIG51bGxpZDIgZGlzcGxheW9yZGVyIG51bWNvbW1pdHMKKyAgICBnbG9iYWwgbnVsbGlkIG51bGxpZDIgbnVtY29tbWl0cwogCiAgICAgZm9yIHtzZXQgcm93IDB9IHskcm93IDwgJG51bWNvbW1pdHN9IHtpbmNyIHJvd30gewotCXNldCBpZCBbbGluZGV4ICRkaXNwbGF5b3JkZXIgJHJvd10KKwlzZXQgaWQgW2NvbW1pdG9ucm93ICRyb3ddCiAJaWYgeyRpZCBuZSAkbnVsbGlkICYmICRpZCBuZSAkbnVsbGlkMn0gewogCSAgICBicmVhawogCX0KQEAgLTY0MSw3ICsxNjk2LDcgQEAKIH0KIAogcHJvYyBtYWtld2luZG93IHt9IHsKLSAgICBnbG9iYWwgY2FudiBjYW52MiBjYW52MyBsaW5lc3BjIGNoYXJzcGMgY3RleHQgY2ZsaXN0CisgICAgZ2xvYmFsIGNhbnYgY2FudjIgY2FudjMgbGluZXNwYyBjaGFyc3BjIGN0ZXh0IGNmbGlzdCBjc2Nyb2xsCiAgICAgZ2xvYmFsIHRhYnN0b3AKICAgICBnbG9iYWwgZmluZHR5cGUgZmluZHR5cGVtZW51IGZpbmRsb2MgZmluZHN0cmluZyBmc3RyaW5nIGdlb21ldHJ5CiAgICAgZ2xvYmFsIGVudHJpZXMgc2hhMWVudHJ5IHNoYTFzdHJpbmcgc2hhMWJ1dApAQCAtNjU0LDEzICsxNzA5LDE0IEBACiAgICAgZ2xvYmFsIGJnY29sb3IgZmdjb2xvciBiZ2xpc3QgZmdsaXN0IGRpZmZjb2xvcnMgc2VsZWN0Ymdjb2xvcgogICAgIGdsb2JhbCBoZWFkY3R4bWVudSBwcm9ncmVzc2NhbnYgcHJvZ3Jlc3NpdGVtIHByb2dyZXNzY29vcmRzIHN0YXR1c3cKICAgICBnbG9iYWwgZnByb2dpdGVtIGZwcm9nY29vcmQgbGFzdHByb2d1cGRhdGUgcHJvZ3VwZGF0ZXBlbmRpbmcKLSAgICBnbG9iYWwgcnByb2dpdGVtIHJwcm9nY29vcmQKKyAgICBnbG9iYWwgcnByb2dpdGVtIHJwcm9nY29vcmQgcm93bnVtc2VsIG51bWNvbW1pdHMKICAgICBnbG9iYWwgaGF2ZV90azg1CiAKICAgICBtZW51IC5iYXIKICAgICAuYmFyIGFkZCBjYXNjYWRlIC1sYWJlbCBbbWMgIkZpbGUiXSAtbWVudSAuYmFyLmZpbGUKICAgICBtZW51IC5iYXIuZmlsZQogICAgIC5iYXIuZmlsZSBhZGQgY29tbWFuZCAtbGFiZWwgW21jICJVcGRhdGUiXSAtY29tbWFuZCB1cGRhdGVjb21taXRzCisgICAgLmJhci5maWxlIGFkZCBjb21tYW5kIC1sYWJlbCBbbWMgIlJlbG9hZCJdIC1jb21tYW5kIHJlbG9hZGNvbW1pdHMKICAgICAuYmFyLmZpbGUgYWRkIGNvbW1hbmQgLWxhYmVsIFttYyAiUmVyZWFkIHJlZmVyZW5jZXMiXSAtY29tbWFuZCByZXJlYWRyZWZzCiAgICAgLmJhci5maWxlIGFkZCBjb21tYW5kIC1sYWJlbCBbbWMgIkxpc3QgcmVmZXJlbmNlcyJdIC1jb21tYW5kIHNob3dyZWZzCiAgICAgLmJhci5maWxlIGFkZCBjb21tYW5kIC1sYWJlbCBbbWMgIlF1aXQiXSAtY29tbWFuZCBkb3F1aXQKQEAgLTc2OSw2ICsxODI1LDE4IEBACiAJLXN0YXRlIGRpc2FibGVkIC13aWR0aCAyNgogICAgIHBhY2sgLnRmLmJhci5yaWdodGJ1dCAtc2lkZSBsZWZ0IC1maWxsIHkKIAorICAgIGxhYmVsIC50Zi5iYXIucm93bGFiZWwgLXRleHQgW21jICJSb3ciXQorICAgIHNldCByb3dudW1zZWwge30KKyAgICBsYWJlbCAudGYuYmFyLnJvd251bSAtd2lkdGggNyAtZm9udCB0ZXh0Zm9udCAtdGV4dHZhcmlhYmxlIHJvd251bXNlbCBcCisJLXJlbGllZiBzdW5rZW4gLWFuY2hvciBlCisgICAgbGFiZWwgLnRmLmJhci5yb3dsYWJlbDIgLXRleHQgIi8iCisgICAgbGFiZWwgLnRmLmJhci5udW1jb21taXRzIC13aWR0aCA3IC1mb250IHRleHRmb250IC10ZXh0dmFyaWFibGUgbnVtY29tbWl0cyBcCisJLXJlbGllZiBzdW5rZW4gLWFuY2hvciBlCisgICAgcGFjayAudGYuYmFyLnJvd2xhYmVsIC50Zi5iYXIucm93bnVtIC50Zi5iYXIucm93bGFiZWwyIC50Zi5iYXIubnVtY29tbWl0cyBcCisJLXNpZGUgbGVmdAorICAgIGdsb2JhbCBzZWxlY3RlZGxpbmUKKyAgICB0cmFjZSBhZGQgdmFyaWFibGUgc2VsZWN0ZWRsaW5lIHdyaXRlIHNlbGVjdGVkbGluZV9jaGFuZ2UKKwogICAgICMgU3RhdHVzIGxhYmVsIGFuZCBwcm9ncmVzcyBiYXIKICAgICBzZXQgc3RhdHVzdyAudGYuYmFyLnN0YXR1cwogICAgIGxhYmVsICRzdGF0dXN3IC13aWR0aCAxNSAtcmVsaWVmIHN1bmtlbgpAQCAtMTAxNiw3ICsyMDg0LDcgQEAKICAgICBiaW5ka2V5IGsgInNlbG5leHRsaW5lIDEiCiAgICAgYmluZGtleSBqICJnb2JhY2siCiAgICAgYmluZGtleSBsICJnb2ZvcnciCi0gICAgYmluZGtleSBiICIkY3RleHQgeXZpZXcgc2Nyb2xsIC0xIHBhZ2VzIgorICAgIGJpbmRrZXkgYiBwcmV2ZmlsZQogICAgIGJpbmRrZXkgZCAiJGN0ZXh0IHl2aWV3IHNjcm9sbCAxOCB1bml0cyIKICAgICBiaW5ka2V5IHUgIiRjdGV4dCB5dmlldyBzY3JvbGwgLTE4IHVuaXRzIgogICAgIGJpbmRrZXkgLyB7ZG9maW5kIDEgMX0KQEAgLTEwODgsNiArMjE1Niw4IEBACiAJLWNvbW1hbmQge2ZsaXN0X2hsIDB9CiAgICAgJGZsaXN0X21lbnUgYWRkIGNvbW1hbmQgLWxhYmVsIFttYyAiSGlnaGxpZ2h0IHRoaXMgb25seSJdIFwKIAktY29tbWFuZCB7Zmxpc3RfaGwgMX0KKyAgICAkZmxpc3RfbWVudSBhZGQgY29tbWFuZCAtbGFiZWwgW21jICJFeHRlcm5hbCBkaWZmIl0gXAorICAgICAgICAtY29tbWFuZCB7ZXh0ZXJuYWxfZGlmZn0KIH0KIAogIyBXaW5kb3dzIHNlbmRzIGFsbCBtb3VzZSB3aGVlbCBldmVudHMgdG8gdGhlIGN1cnJlbnQgZm9jdXNlZCB3aW5kb3csIG5vdApAQCAtMTEwOCw2ICsyMTc4LDE3IEBACiAgICAgfQogfQogCisjIFVwZGF0ZSByb3cgbnVtYmVyIGxhYmVsIHdoZW4gc2VsZWN0ZWRsaW5lIGNoYW5nZXMKK3Byb2Mgc2VsZWN0ZWRsaW5lX2NoYW5nZSB7bjEgbjIgb3B9IHsKKyAgICBnbG9iYWwgc2VsZWN0ZWRsaW5lIHJvd251bXNlbAorCisgICAgaWYgeyRzZWxlY3RlZGxpbmUgZXEge319IHsKKwlzZXQgcm93bnVtc2VsIHt9CisgICAgfSBlbHNlIHsKKwlzZXQgcm93bnVtc2VsIFtleHByIHskc2VsZWN0ZWRsaW5lICsgMX1dCisgICAgfQorfQorCiAjIG1vdXNlLTIgbWFrZXMgYWxsIHdpbmRvd3Mgc2NhbiB2ZXJ0aWNhbGx5LCBidXQgb25seSB0aGUgb25lCiAjIHRoZSBjdXJzb3IgaXMgaW4gc2NhbnMgaG9yaXpvbnRhbGx5CiBwcm9jIGNhbnZzY2FuIHtvcCB3IHggeX0gewpAQCAtMTEyMyw3ICsyMjA0LDcgQEAKIAogcHJvYyBzY3JvbGxjYW52IHtjc2Nyb2xsIGYwIGYxfSB7CiAgICAgJGNzY3JvbGwgc2V0ICRmMCAkZjEKLSAgICBkcmF3ZnJhYyAkZjAgJGYxCisgICAgZHJhd3Zpc2libGUKICAgICBmbHVzaGhpZ2hsaWdodHMKIH0KIApAQCAtMTE5Miw3ICsyMjczLDcgQEAKICAgICBnbG9iYWwgdmlld25hbWUgdmlld2ZpbGVzIHZpZXdhcmdzIHZpZXdhcmdzY21kIHZpZXdwZXJtIG5leHR2aWV3bnVtCiAgICAgZ2xvYmFsIGNtaXRtb2RlIHdyYXBjb21tZW50IGRhdGV0aW1lZm9ybWF0IGxpbWl0ZGlmZnMKICAgICBnbG9iYWwgY29sb3JzIGJnY29sb3IgZmdjb2xvciBkaWZmY29sb3JzIGRpZmZjb250ZXh0IHNlbGVjdGJnY29sb3IKLSAgICBnbG9iYWwgYXV0b3NlbGVjdAorICAgIGdsb2JhbCBhdXRvc2VsZWN0IGV4dGRpZmZ0b29sCiAKICAgICBpZiB7JHN0dWZmc2F2ZWR9IHJldHVybgogICAgIGlmIHshW3dpbmZvIHZpZXdhYmxlIC5dfSByZXR1cm4KQEAgLTEyMTgsNiArMjI5OSw3IEBACiAJcHV0cyAkZiBbbGlzdCBzZXQgZGlmZmNvbG9ycyAkZGlmZmNvbG9yc10KIAlwdXRzICRmIFtsaXN0IHNldCBkaWZmY29udGV4dCAkZGlmZmNvbnRleHRdCiAJcHV0cyAkZiBbbGlzdCBzZXQgc2VsZWN0Ymdjb2xvciAkc2VsZWN0Ymdjb2xvcl0KKwlwdXRzICRmIFtsaXN0IHNldCBleHRkaWZmdG9vbCAkZXh0ZGlmZnRvb2xdCiAKIAlwdXRzICRmICJzZXQgZ2VvbWV0cnkobWFpbikgW3dtIGdlb21ldHJ5IC5dIgogCXB1dHMgJGYgInNldCBnZW9tZXRyeSh0b3B3aWR0aCkgW3dpbmZvIHdpZHRoIC50Zl0iCkBAIC0xMzE4LDcgKzI0MDAsNyBAQAogICAgIG1lc3NhZ2UgJHcubSAtdGV4dCBbbWMgIgogR2l0ayAtIGEgY29tbWl0IHZpZXdlciBmb3IgZ2l0CiAKLUNvcHlyaWdodCDCqSAyMDA1LTIwMDYgUGF1bCBNYWNrZXJyYXMKK0NvcHlyaWdodCDCqSAyMDA1LTIwMDggUGF1bCBNYWNrZXJyYXMKIAogVXNlIGFuZCByZWRpc3RyaWJ1dGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSJdIFwKIAkgICAgLWp1c3RpZnkgY2VudGVyIC1hc3BlY3QgNDAwIC1ib3JkZXIgMiAtYmcgd2hpdGUgLXJlbGllZiBncm9vdmUKQEAgLTE2NzUsNyArMjc1Nyw3IEBACiAgICAgLWRhdGEgJHJlY3RkYXRhIC1tYXNrZGF0YSAkcmVjdG1hc2sKIAogcHJvYyBpbml0X2ZsaXN0IHtmaXJzdH0gewotICAgIGdsb2JhbCBjZmxpc3QgY2ZsaXN0X3RvcCBzZWxlY3RlZGxpbmUgZGlmZmZpbGVzdGFydAorICAgIGdsb2JhbCBjZmxpc3QgY2ZsaXN0X3RvcCBkaWZmZmlsZXN0YXJ0CiAKICAgICAkY2ZsaXN0IGNvbmYgLXN0YXRlIG5vcm1hbAogICAgICRjZmxpc3QgZGVsZXRlIDAuMCBlbmQKQEAgLTE3NjgsNiArMjg1MCwxMiBAQAogCXNldCBlIFtsaW5kZXggJHRyZWVkaWZmcygkZGlmZmlkcykgW2V4cHIgeyRsLTJ9XV0KICAgICB9CiAgICAgc2V0IGZsaXN0X21lbnVfZmlsZSAkZQorICAgIHNldCB4ZGlmZnN0YXRlICJub3JtYWwiCisgICAgaWYgeyRjbWl0bW9kZSBlcSAidHJlZSJ9IHsKKwlzZXQgeGRpZmZzdGF0ZSAiZGlzYWJsZWQiCisgICAgfQorICAgICMgRGlzYWJsZSAiRXh0ZXJuYWwgZGlmZiIgaXRlbSBpbiB0cmVlIG1vZGUKKyAgICAkZmxpc3RfbWVudSBlbnRyeWNvbmYgMiAtc3RhdGUgJHhkaWZmc3RhdGUKICAgICB0a19wb3B1cCAkZmxpc3RfbWVudSAkWCAkWQogfQogCkBAIC0xNzgzLDYgKzI4NzEsMTEzIEBACiAgICAgc2V0IGdkdHR5cGUgW21jICJ0b3VjaGluZyBwYXRoczoiXQogfQogCitwcm9jIHNhdmVfZmlsZV9mcm9tX2NvbW1pdCB7ZmlsZW5hbWUgb3V0cHV0IHdoYXR9IHsKKyAgICBnbG9iYWwgbnVsbGZpbGUKKworICAgIGlmIHtbY2F0Y2gge2V4ZWMgZ2l0IHNob3cgJGZpbGVuYW1lIC0tID4gJG91dHB1dH0gZXJyXX0geworCWlmIHtbc3RyaW5nIG1hdGNoICJmYXRhbDogYmFkIHJldmlzaW9uICoiICRlcnJdfSB7CisJICAgIHJldHVybiAkbnVsbGZpbGUKKwl9CisJZXJyb3JfcG9wdXAgIkVycm9yIGdldHRpbmcgXCIkZmlsZW5hbWVcIiBmcm9tICR3aGF0OiAkZXJyIgorCXJldHVybiB7fQorICAgIH0KKyAgICByZXR1cm4gJG91dHB1dAorfQorCitwcm9jIGV4dGVybmFsX2RpZmZfZ2V0X29uZV9maWxlIHtkaWZmaWQgZmlsZW5hbWUgZGlmZmRpcn0geworICAgIGdsb2JhbCBudWxsaWQgbnVsbGlkMiBudWxsZmlsZQorICAgIGdsb2JhbCBnaXRkaXIKKworICAgIGlmIHskZGlmZmlkID09ICRudWxsaWR9IHsKKyAgICAgICAgc2V0IGRpZmZmaWxlIFtmaWxlIGpvaW4gW2ZpbGUgZGlybmFtZSAkZ2l0ZGlyXSAkZmlsZW5hbWVdCisJaWYge1tmaWxlIGV4aXN0cyAkZGlmZmZpbGVdfSB7CisJICAgIHJldHVybiAkZGlmZmZpbGUKKwl9CisJcmV0dXJuICRudWxsZmlsZQorICAgIH0KKyAgICBpZiB7JGRpZmZpZCA9PSAkbnVsbGlkMn0geworICAgICAgICBzZXQgZGlmZmZpbGUgW2ZpbGUgam9pbiAkZGlmZmRpciAiXFtpbmRleFxdIFtmaWxlIHRhaWwgJGZpbGVuYW1lXSJdCisgICAgICAgIHJldHVybiBbc2F2ZV9maWxlX2Zyb21fY29tbWl0IDokZmlsZW5hbWUgJGRpZmZmaWxlIGluZGV4XQorICAgIH0KKyAgICBzZXQgZGlmZmZpbGUgW2ZpbGUgam9pbiAkZGlmZmRpciAiXFskZGlmZmlkXF0gW2ZpbGUgdGFpbCAkZmlsZW5hbWVdIl0KKyAgICByZXR1cm4gW3NhdmVfZmlsZV9mcm9tX2NvbW1pdCAkZGlmZmlkOiRmaWxlbmFtZSAkZGlmZmZpbGUgXAorCSAgICAgICAicmV2aXNpb24gJGRpZmZpZCJdCit9CisKK3Byb2MgZXh0ZXJuYWxfZGlmZiB7fSB7CisgICAgZ2xvYmFsIGdpdGt0bXBkaXIgbnVsbGlkIG51bGxpZDIKKyAgICBnbG9iYWwgZmxpc3RfbWVudV9maWxlCisgICAgZ2xvYmFsIGRpZmZpZHMKKyAgICBnbG9iYWwgZGlmZm51bQorICAgIGdsb2JhbCBnaXRkaXIgZXh0ZGlmZnRvb2wKKworICAgIGlmIHtbbGxlbmd0aCAkZGlmZmlkc10gPT0gMX0geworICAgICAgICAjIG5vIHJlZmVyZW5jZSBjb21taXQgZ2l2ZW4KKyAgICAgICAgc2V0IGRpZmZpZHRvIFtsaW5kZXggJGRpZmZpZHMgMF0KKyAgICAgICAgaWYgeyRkaWZmaWR0byBlcSAkbnVsbGlkfSB7CisgICAgICAgICAgICAjIGRpZmZpbmcgd29ya2luZyBjb3B5IHdpdGggaW5kZXgKKyAgICAgICAgICAgIHNldCBkaWZmaWRmcm9tICRudWxsaWQyCisgICAgICAgIH0gZWxzZWlmIHskZGlmZmlkdG8gZXEgJG51bGxpZDJ9IHsKKyAgICAgICAgICAgICMgZGlmZmluZyBpbmRleCB3aXRoIEhFQUQKKyAgICAgICAgICAgIHNldCBkaWZmaWRmcm9tICJIRUFEIgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgIyB1c2UgZmlyc3QgcGFyZW50IGNvbW1pdAorICAgICAgICAgICAgZ2xvYmFsIHBhcmVudGxpc3Qgc2VsZWN0ZWRsaW5lCisgICAgICAgICAgICBzZXQgZGlmZmlkZnJvbSBbbGluZGV4ICRwYXJlbnRsaXN0ICRzZWxlY3RlZGxpbmUgMF0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHNldCBkaWZmaWRmcm9tIFtsaW5kZXggJGRpZmZpZHMgMF0KKyAgICAgICAgc2V0IGRpZmZpZHRvIFtsaW5kZXggJGRpZmZpZHMgMV0KKyAgICB9CisKKyAgICAjIG1ha2Ugc3VyZSB0aGF0IHNldmVyYWwgZGlmZnMgd29udCBjb2xsaWRlCisgICAgaWYgeyFbaW5mbyBleGlzdHMgZ2l0a3RtcGRpcl19IHsKKwlzZXQgZ2l0a3RtcGRpciBbZmlsZSBqb2luIFtmaWxlIGRpcm5hbWUgJGdpdGRpcl0gXAorCQkJICAgIFtmb3JtYXQgIi5naXRrLXRtcC4lcyIgW3BpZF1dXQorCWlmIHtbY2F0Y2gge2ZpbGUgbWtkaXIgJGdpdGt0bXBkaXJ9IGVycl19IHsKKwkgICAgZXJyb3JfcG9wdXAgIkVycm9yIGNyZWF0aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkgJGdpdGt0bXBkaXI6ICRlcnIiCisJICAgIHVuc2V0IGdpdGt0bXBkaXIKKwkgICAgcmV0dXJuCisJfQorCXNldCBkaWZmbnVtIDAKKyAgICB9CisgICAgaW5jciBkaWZmbnVtCisgICAgc2V0IGRpZmZkaXIgW2ZpbGUgam9pbiAkZ2l0a3RtcGRpciAkZGlmZm51bV0KKyAgICBpZiB7W2NhdGNoIHtmaWxlIG1rZGlyICRkaWZmZGlyfSBlcnJdfSB7CisJZXJyb3JfcG9wdXAgIkVycm9yIGNyZWF0aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkgJGRpZmZkaXI6ICRlcnIiCisJcmV0dXJuCisgICAgfQorCisgICAgIyBnYXRoZXIgZmlsZXMgdG8gZGlmZgorICAgIHNldCBkaWZmZnJvbWZpbGUgW2V4dGVybmFsX2RpZmZfZ2V0X29uZV9maWxlICRkaWZmaWRmcm9tICRmbGlzdF9tZW51X2ZpbGUgJGRpZmZkaXJdCisgICAgc2V0IGRpZmZ0b2ZpbGUgW2V4dGVybmFsX2RpZmZfZ2V0X29uZV9maWxlICRkaWZmaWR0byAkZmxpc3RfbWVudV9maWxlICRkaWZmZGlyXQorCisgICAgaWYgeyRkaWZmZnJvbWZpbGUgbmUge30gJiYgJGRpZmZ0b2ZpbGUgbmUge319IHsKKyAgICAgICAgc2V0IGNtZCBbY29uY2F0IHwgW3NoZWxsc3BsaXQgJGV4dGRpZmZ0b29sXSBcCisJCSAgICAgW2xpc3QgJGRpZmZmcm9tZmlsZSAkZGlmZnRvZmlsZV1dCisgICAgICAgIGlmIHtbY2F0Y2gge3NldCBmbCBbb3BlbiAkY21kIHJdfSBlcnJdfSB7CisgICAgICAgICAgICBmaWxlIGRlbGV0ZSAtZm9yY2UgJGRpZmZkaXIKKyAgICAgICAgICAgIGVycm9yX3BvcHVwIFttYyAiJGV4dGRpZmZ0b29sOiBjb21tYW5kIGZhaWxlZDogJGVyciJdCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmY29uZmlndXJlICRmbCAtYmxvY2tpbmcgMAorICAgICAgICAgICAgZmlsZXJ1biAkZmwgW2xpc3QgZGVsZXRlX2F0X2VvZiAkZmwgJGRpZmZkaXJdCisgICAgICAgIH0KKyAgICB9Cit9CisKKyMgZGVsZXRlICRkaXIgd2hlbiB3ZSBzZWUgZW9mIG9uICRmIChwcmVzdW1hYmx5IGJlY2F1c2UgdGhlIGNoaWxkIGhhcyBleGl0ZWQpCitwcm9jIGRlbGV0ZV9hdF9lb2Yge2YgZGlyfSB7CisgICAgd2hpbGUge1tnZXRzICRmIGxpbmVdID49IDB9IHt9CisgICAgaWYge1tlb2YgJGZdfSB7CisJaWYge1tjYXRjaCB7Y2xvc2UgJGZ9IGVycl19IHsKKwkgICAgZXJyb3JfcG9wdXAgIkV4dGVybmFsIGRpZmYgdmlld2VyIGZhaWxlZDogJGVyciIKKwl9CisJZmlsZSBkZWxldGUgLWZvcmNlICRkaXIKKwlyZXR1cm4gMAorICAgIH0KKyAgICByZXR1cm4gMQorfQorCiAjIEZ1bmN0aW9ucyBmb3IgYWRkaW5nIGFuZCByZW1vdmluZyBzaGVsbC10eXBlIHF1b3RpbmcKIAogcHJvYyBzaGVsbHF1b3RlIHtzdHJ9IHsKQEAgLTE5MjUsNyArMzEyMCw3IEBACiAJLXZhcmlhYmxlIG5ld3ZpZXdwZXJtKCRuKQogICAgIGdyaWQgJHRvcC5wZXJtIC0gLXBhZHkgNSAtc3RpY2t5IHcKICAgICBtZXNzYWdlICR0b3AuYWwgLWFzcGVjdCAxMDAwIFwKLQktdGV4dCBbbWMgIkNvbW1pdHMgdG8gaW5jbHVkZSAoYXJndW1lbnRzIHRvIGdpdCByZXYtbGlzdCk6Il0KKwktdGV4dCBbbWMgIkNvbW1pdHMgdG8gaW5jbHVkZSAoYXJndW1lbnRzIHRvIGdpdCBsb2cpOiJdCiAgICAgZ3JpZCAkdG9wLmFsIC0gLXN0aWNreSB3IC1wYWR5IDUKICAgICBlbnRyeSAkdG9wLmFyZ3MgLXdpZHRoIDUwIC10ZXh0dmFyaWFibGUgbmV3dmlld2FyZ3MoJG4pIFwKIAktYmFja2dyb3VuZCAkYmdjb2xvcgpAQCAtMjAyOCw3ICszMjIzLDcgQEAKIAkgICAgc2V0IHZpZXdhcmdzKCRuKSAkbmV3YXJncwogCSAgICBzZXQgdmlld2FyZ3NjbWQoJG4pICRuZXd2aWV3YXJnc2NtZCgkbikKIAkgICAgaWYgeyRjdXJ2aWV3ID09ICRufSB7Ci0JCXJ1biB1cGRhdGVjb21taXRzCisJCXJ1biByZWxvYWRjb21taXRzCiAJICAgIH0KIAl9CiAgICAgfQpAQCAtMjAzNiw3ICszMjMxLDcgQEAKIH0KIAogcHJvYyBkZWx2aWV3IHt9IHsKLSAgICBnbG9iYWwgY3VydmlldyB2aWV3ZGF0YSB2aWV3cGVybSBobHZpZXcgc2VsZWN0ZWRobHZpZXcKKyAgICBnbG9iYWwgY3VydmlldyB2aWV3cGVybSBobHZpZXcgc2VsZWN0ZWRobHZpZXcKIAogICAgIGlmIHskY3VydmlldyA9PSAwfSByZXR1cm4KICAgICBpZiB7W2luZm8gZXhpc3RzIGhsdmlld10gJiYgJGhsdmlldyA9PSAkY3Vydmlld30gewpAQCAtMjA0NCw3ICszMjM5LDYgQEAKIAl1bnNldCBobHZpZXcKICAgICB9CiAgICAgYWxsdmlld21lbnVzICRjdXJ2aWV3IGRlbGV0ZQotICAgIHNldCB2aWV3ZGF0YSgkY3Vydmlldykge30KICAgICBzZXQgdmlld3Blcm0oJGN1cnZpZXcpIDAKICAgICBzaG93dmlldyAwCiB9CkBAIC0yMDU4LDQ4ICszMjUyLDI4IEBACiAgICAgIwktY29tbWFuZCBbbGlzdCBhZGR2aGlnaGxpZ2h0ICRuXSAtdmFyaWFibGUgc2VsZWN0ZWRobHZpZXcKIH0KIAotcHJvYyBmbGF0dGVuIHt2YXJ9IHsKLSAgICBnbG9iYWwgJHZhcgotCi0gICAgc2V0IHJldCB7fQotICAgIGZvcmVhY2ggaSBbYXJyYXkgbmFtZXMgJHZhcl0gewotCWxhcHBlbmQgcmV0ICRpIFtzZXQgJHZhclwoJGlcKV0KLSAgICB9Ci0gICAgcmV0dXJuICRyZXQKLX0KLQotcHJvYyB1bmZsYXR0ZW4ge3ZhciBsfSB7Ci0gICAgZ2xvYmFsICR2YXIKLQotICAgIGNhdGNoIHt1bnNldCAkdmFyfQotICAgIGZvcmVhY2gge2kgdn0gJGwgewotCXNldCAkdmFyXCgkaVwpICR2Ci0gICAgfQotfQotCiBwcm9jIHNob3d2aWV3IHtufSB7Ci0gICAgZ2xvYmFsIGN1cnZpZXcgdmlld2RhdGEgdmlld2ZpbGVzCisgICAgZ2xvYmFsIGN1cnZpZXcgY2FjaGVkX2NvbW1pdHJvdyBvcmRlcnRvawogICAgIGdsb2JhbCBkaXNwbGF5b3JkZXIgcGFyZW50bGlzdCByb3dpZGxpc3Qgcm93aXNvcHQgcm93ZmluYWwKLSAgICBnbG9iYWwgY29sb3JtYXAgcm93dGV4dHggY29tbWl0cm93IG5leHRjb2xvciBjYW52eG1heAotICAgIGdsb2JhbCBudW1jb21taXRzIGNvbW1pdGxpc3RlZAorICAgIGdsb2JhbCBjb2xvcm1hcCByb3d0ZXh0eCBuZXh0Y29sb3IgY2FudnhtYXgKKyAgICBnbG9iYWwgbnVtY29tbWl0cyB2aWV3Y29tcGxldGUKICAgICBnbG9iYWwgc2VsZWN0ZWRsaW5lIGN1cnJlbnRpZCBjYW52IGNhbnZ5MAogICAgIGdsb2JhbCB0cmVlZGlmZnMKLSAgICBnbG9iYWwgcGVuZGluZ19zZWxlY3QgcGhhc2UKKyAgICBnbG9iYWwgcGVuZGluZ19zZWxlY3QgbWFpbmhlYWRpZAogICAgIGdsb2JhbCBjb21taXRpZHgKLSAgICBnbG9iYWwgY29tbWZkCi0gICAgZ2xvYmFsIHNlbGVjdGVkdmlldyBzZWxlY3RmaXJzdAotICAgIGdsb2JhbCB2cGFyZW50bGlzdCB2ZGlzcG9yZGVyIHZjbWl0bGlzdGVkCisgICAgZ2xvYmFsIHNlbGVjdGVkdmlldwogICAgIGdsb2JhbCBobHZpZXcgc2VsZWN0ZWRobHZpZXcgY29tbWl0aW50ZXJlc3QKIAogICAgIGlmIHskbiA9PSAkY3Vydmlld30gcmV0dXJuCiAgICAgc2V0IHNlbGlkIHt9Ci0gICAgaWYge1tpbmZvIGV4aXN0cyBzZWxlY3RlZGxpbmVdfSB7CisgICAgc2V0IHltYXggW2xpbmRleCBbJGNhbnYgY2dldCAtc2Nyb2xscmVnaW9uXSAzXQorICAgIHNldCBzcGFuIFskY2FudiB5dmlld10KKyAgICBzZXQgeXRvcCBbZXhwciB7W2xpbmRleCAkc3BhbiAwXSAqICR5bWF4fV0KKyAgICBzZXQgeWJvdCBbZXhwciB7W2xpbmRleCAkc3BhbiAxXSAqICR5bWF4fV0KKyAgICBzZXQgeXNjcmVlbiBbZXhwciB7KCR5Ym90IC0gJHl0b3ApIC8gMn1dCisgICAgaWYgeyRzZWxlY3RlZGxpbmUgbmUge319IHsKIAlzZXQgc2VsaWQgJGN1cnJlbnRpZAogCXNldCB5IFt5YyAkc2VsZWN0ZWRsaW5lXQotCXNldCB5bWF4IFtsaW5kZXggWyRjYW52IGNnZXQgLXNjcm9sbHJlZ2lvbl0gM10KLQlzZXQgc3BhbiBbJGNhbnYgeXZpZXddCi0Jc2V0IHl0b3AgW2V4cHIge1tsaW5kZXggJHNwYW4gMF0gKiAkeW1heH1dCi0Jc2V0IHlib3QgW2V4cHIge1tsaW5kZXggJHNwYW4gMV0gKiAkeW1heH1dCiAJaWYgeyR5dG9wIDwgJHkgJiYgJHkgPCAkeWJvdH0gewogCSAgICBzZXQgeXNjcmVlbiBbZXhwciB7JHkgLSAkeXRvcH1dCiAJfQpAQCAtMjEwOSwxNyArMzI4Myw2IEBACiAgICAgfQogICAgIHVuc2VsZWN0bGluZQogICAgIG5vcm1hbGxpbmUKLSAgICBpZiB7JGN1cnZpZXcgPj0gMH0gewotCXNldCB2cGFyZW50bGlzdCgkY3VydmlldykgJHBhcmVudGxpc3QKLQlzZXQgdmRpc3BvcmRlcigkY3VydmlldykgJGRpc3BsYXlvcmRlcgotCXNldCB2Y21pdGxpc3RlZCgkY3VydmlldykgJGNvbW1pdGxpc3RlZAotCWlmIHskcGhhc2UgbmUge30gfHwKLQkgICAgIVtpbmZvIGV4aXN0cyB2aWV3ZGF0YSgkY3VydmlldyldIHx8Ci0JICAgIFtsaW5kZXggJHZpZXdkYXRhKCRjdXJ2aWV3KSAwXSBuZSB7fX0gewotCSAgICBzZXQgdmlld2RhdGEoJGN1cnZpZXcpIFwKLQkJW2xpc3QgJHBoYXNlICRyb3dpZGxpc3QgJHJvd2lzb3B0ICRyb3dmaW5hbF0KLQl9Ci0gICAgfQogICAgIGNhdGNoIHt1bnNldCB0cmVlZGlmZnN9CiAgICAgY2xlYXJfZGlzcGxheQogICAgIGlmIHtbaW5mbyBleGlzdHMgaGx2aWV3XSAmJiAkaGx2aWV3ID09ICRufSB7CkBAIC0yMTI3LDYgKzMyOTAsOCBAQAogCXNldCBzZWxlY3RlZGhsdmlldyBbbWMgIk5vbmUiXQogICAgIH0KICAgICBjYXRjaCB7dW5zZXQgY29tbWl0aW50ZXJlc3R9CisgICAgY2F0Y2gge3Vuc2V0IGNhY2hlZF9jb21taXRyb3d9CisgICAgY2F0Y2gge3Vuc2V0IG9yZGVydG9rfQogCiAgICAgc2V0IGN1cnZpZXcgJG4KICAgICBzZXQgc2VsZWN0ZWR2aWV3ICRuCkBAIC0yMTM0LDcgKzMyOTksNyBAQAogICAgIC5iYXIudmlldyBlbnRyeWNvbmYgW21jICJEZWxldGUgdmlldyJdIC1zdGF0ZSBbZXhwciB7JG4gPT0gMD8gImRpc2FibGVkIjogIm5vcm1hbCJ9XQogCiAgICAgcnVuIHJlZmlsbF9yZWZsaXN0Ci0gICAgaWYgeyFbaW5mbyBleGlzdHMgdmlld2RhdGEoJG4pXX0geworICAgIGlmIHshW2luZm8gZXhpc3RzIHZpZXdjb21wbGV0ZSgkbildfSB7CiAJaWYgeyRzZWxpZCBuZSB7fX0gewogCSAgICBzZXQgcGVuZGluZ19zZWxlY3QgJHNlbGlkCiAJfQpAQCAtMjE0MiwxNCArMzMwNywxMSBAQAogCXJldHVybgogICAgIH0KIAotICAgIHNldCB2ICR2aWV3ZGF0YSgkbikKLSAgICBzZXQgcGhhc2UgW2xpbmRleCAkdiAwXQotICAgIHNldCBkaXNwbGF5b3JkZXIgJHZkaXNwb3JkZXIoJG4pCi0gICAgc2V0IHBhcmVudGxpc3QgJHZwYXJlbnRsaXN0KCRuKQotICAgIHNldCBjb21taXRsaXN0ZWQgJHZjbWl0bGlzdGVkKCRuKQotICAgIHNldCByb3dpZGxpc3QgW2xpbmRleCAkdiAxXQotICAgIHNldCByb3dpc29wdCBbbGluZGV4ICR2IDJdCi0gICAgc2V0IHJvd2ZpbmFsIFtsaW5kZXggJHYgM10KKyAgICBzZXQgZGlzcGxheW9yZGVyIHt9CisgICAgc2V0IHBhcmVudGxpc3Qge30KKyAgICBzZXQgcm93aWRsaXN0IHt9CisgICAgc2V0IHJvd2lzb3B0IHt9CisgICAgc2V0IHJvd2ZpbmFsIHt9CiAgICAgc2V0IG51bWNvbW1pdHMgJGNvbW1pdGlkeCgkbikKIAogICAgIGNhdGNoIHt1bnNldCBjb2xvcm1hcH0KQEAgLTIxNjEsOSArMzMyMyw4IEBACiAgICAgc2V0Y2FudnNjcm9sbAogICAgIHNldCB5ZiAwCiAgICAgc2V0IHJvdyB7fQotICAgIHNldCBzZWxlY3RmaXJzdCAwCi0gICAgaWYge1tpbmZvIGV4aXN0cyB5c2NyZWVuXSAmJiBbaW5mbyBleGlzdHMgY29tbWl0cm93KCRuLCRzZWxpZCldfSB7Ci0Jc2V0IHJvdyAkY29tbWl0cm93KCRuLCRzZWxpZCkKKyAgICBpZiB7JHNlbGlkIG5lIHt9ICYmIFtjb21taXRpbnZpZXcgJHNlbGlkICRuXX0geworCXNldCByb3cgW3Jvd29mY29tbWl0ICRzZWxpZF0KIAkjIHRyeSB0byBnZXQgdGhlIHNlbGVjdGVkIHJvdyBpbiB0aGUgc2FtZSBwb3NpdGlvbiBvbiB0aGUgc2NyZWVuCiAJc2V0IHltYXggW2xpbmRleCBbJGNhbnYgY2dldCAtc2Nyb2xscmVnaW9uXSAzXQogCXNldCB5dG9wIFtleHByIHtbeWMgJHJvd10gLSAkeXNjcmVlbn1dCkBAIC0yMTc2LDIxICszMzM3LDI0IEBACiAgICAgZHJhd3Zpc2libGUKICAgICBpZiB7JHJvdyBuZSB7fX0gewogCXNlbGVjdGxpbmUgJHJvdyAwCi0gICAgfSBlbHNlaWYgeyRzZWxpZCBuZSB7fX0gewotCXNldCBwZW5kaW5nX3NlbGVjdCAkc2VsaWQKKyAgICB9IGVsc2VpZiB7JG1haW5oZWFkaWQgbmUge30gJiYgW2NvbW1pdGludmlldyAkbWFpbmhlYWRpZCAkY3Vydmlld119IHsKKwlzZWxlY3RsaW5lIFtyb3dvZmNvbW1pdCAkbWFpbmhlYWRpZF0gMQorICAgIH0gZWxzZWlmIHshJHZpZXdjb21wbGV0ZSgkbil9IHsKKwlpZiB7JHNlbGlkIG5lIHt9fSB7CisJICAgIHNldCBwZW5kaW5nX3NlbGVjdCAkc2VsaWQKKwl9IGVsc2UgeworCSAgICBzZXQgcGVuZGluZ19zZWxlY3QgJG1haW5oZWFkaWQKKwl9CiAgICAgfSBlbHNlIHsKIAlzZXQgcm93IFtmaXJzdF9yZWFsX3Jvd10KIAlpZiB7JHJvdyA8ICRudW1jb21taXRzfSB7CiAJICAgIHNlbGVjdGxpbmUgJHJvdyAwCi0JfSBlbHNlIHsKLQkgICAgc2V0IHNlbGVjdGZpcnN0IDEKIAl9CiAgICAgfQotICAgIGlmIHskcGhhc2UgbmUge319IHsKLQlpZiB7JHBoYXNlIGVxICJnZXRjb21taXRzIn0geworICAgIGlmIHshJHZpZXdjb21wbGV0ZSgkbil9IHsKKwlpZiB7JG51bWNvbW1pdHMgPT0gMH0gewogCSAgICBzaG93X3N0YXR1cyBbbWMgIlJlYWRpbmcgY29tbWl0cy4uLiJdCiAJfQotCXJ1biBjaGV3Y29tbWl0cyAkbgogICAgIH0gZWxzZWlmIHskbnVtY29tbWl0cyA9PSAwfSB7CiAJc2hvd19zdGF0dXMgW21jICJObyBjb21taXRzIHNlbGVjdGVkIl0KICAgICB9CkBAIC0yMTk4LDIwICszMzYyLDIwIEBACiAKICMgU3R1ZmYgcmVsYXRpbmcgdG8gdGhlIGhpZ2hsaWdodGluZyBmYWNpbGl0eQogCi1wcm9jIGlzaGlnaGxpZ2h0ZWQge3Jvd30geworcHJvYyBpc2hpZ2hsaWdodGVkIHtpZH0gewogICAgIGdsb2JhbCB2aGlnaGxpZ2h0cyBmaGlnaGxpZ2h0cyBuaGlnaGxpZ2h0cyByaGlnaGxpZ2h0cwogCi0gICAgaWYge1tpbmZvIGV4aXN0cyBuaGlnaGxpZ2h0cygkcm93KV0gJiYgJG5oaWdobGlnaHRzKCRyb3cpID4gMH0gewotCXJldHVybiAkbmhpZ2hsaWdodHMoJHJvdykKKyAgICBpZiB7W2luZm8gZXhpc3RzIG5oaWdobGlnaHRzKCRpZCldICYmICRuaGlnaGxpZ2h0cygkaWQpID4gMH0geworCXJldHVybiAkbmhpZ2hsaWdodHMoJGlkKQogICAgIH0KLSAgICBpZiB7W2luZm8gZXhpc3RzIHZoaWdobGlnaHRzKCRyb3cpXSAmJiAkdmhpZ2hsaWdodHMoJHJvdykgPiAwfSB7Ci0JcmV0dXJuICR2aGlnaGxpZ2h0cygkcm93KQorICAgIGlmIHtbaW5mbyBleGlzdHMgdmhpZ2hsaWdodHMoJGlkKV0gJiYgJHZoaWdobGlnaHRzKCRpZCkgPiAwfSB7CisJcmV0dXJuICR2aGlnaGxpZ2h0cygkaWQpCiAgICAgfQotICAgIGlmIHtbaW5mbyBleGlzdHMgZmhpZ2hsaWdodHMoJHJvdyldICYmICRmaGlnaGxpZ2h0cygkcm93KSA+IDB9IHsKLQlyZXR1cm4gJGZoaWdobGlnaHRzKCRyb3cpCisgICAgaWYge1tpbmZvIGV4aXN0cyBmaGlnaGxpZ2h0cygkaWQpXSAmJiAkZmhpZ2hsaWdodHMoJGlkKSA+IDB9IHsKKwlyZXR1cm4gJGZoaWdobGlnaHRzKCRpZCkKICAgICB9Ci0gICAgaWYge1tpbmZvIGV4aXN0cyByaGlnaGxpZ2h0cygkcm93KV0gJiYgJHJoaWdobGlnaHRzKCRyb3cpID4gMH0gewotCXJldHVybiAkcmhpZ2hsaWdodHMoJHJvdykKKyAgICBpZiB7W2luZm8gZXhpc3RzIHJoaWdobGlnaHRzKCRpZCldICYmICRyaGlnaGxpZ2h0cygkaWQpID4gMH0geworCXJldHVybiAkcmhpZ2hsaWdodHMoJGlkKQogICAgIH0KICAgICByZXR1cm4gMAogfQpAQCAtMjIyMSw3ICszMzg1LDcgQEAKIAogICAgIGxhcHBlbmQgYm9sZHJvd3MgJHJvdwogICAgICRjYW52IGl0ZW1jb25mICRsaW5laHRhZygkcm93KSAtZm9udCAkZm9udAotICAgIGlmIHtbaW5mbyBleGlzdHMgc2VsZWN0ZWRsaW5lXSAmJiAkcm93ID09ICRzZWxlY3RlZGxpbmV9IHsKKyAgICBpZiB7JHJvdyA9PSAkc2VsZWN0ZWRsaW5lfSB7CiAJJGNhbnYgZGVsZXRlIHNlY3NlbAogCXNldCB0IFtldmFsICRjYW52IGNyZWF0ZSByZWN0IFskY2FudiBiYm94ICRsaW5laHRhZygkcm93KV0gXAogCQkgICAtb3V0bGluZSB7e319IC10YWdzIHNlY3NlbCBcCkBAIC0yMjM1LDcgKzMzOTksNyBAQAogCiAgICAgbGFwcGVuZCBib2xkbmFtZXJvd3MgJHJvdwogICAgICRjYW52MiBpdGVtY29uZiAkbGluZW50YWcoJHJvdykgLWZvbnQgJGZvbnQKLSAgICBpZiB7W2luZm8gZXhpc3RzIHNlbGVjdGVkbGluZV0gJiYgJHJvdyA9PSAkc2VsZWN0ZWRsaW5lfSB7CisgICAgaWYgeyRyb3cgPT0gJHNlbGVjdGVkbGluZX0gewogCSRjYW52MiBkZWxldGUgc2Vjc2VsCiAJc2V0IHQgW2V2YWwgJGNhbnYyIGNyZWF0ZSByZWN0IFskY2FudjIgYmJveCAkbGluZW50YWcoJHJvdyldIFwKIAkJICAgLW91dGxpbmUge3t9fSAtdGFncyBzZWNzZWwgXApAQCAtMjI0OSw3ICszNDEzLDcgQEAKIAogICAgIHNldCBzdGlsbGJvbGQge30KICAgICBmb3JlYWNoIHJvdyAkYm9sZHJvd3MgewotCWlmIHshW2lzaGlnaGxpZ2h0ZWQgJHJvd119IHsKKwlpZiB7IVtpc2hpZ2hsaWdodGVkIFtjb21taXRvbnJvdyAkcm93XV19IHsKIAkgICAgYm9sZGVuICRyb3cgbWFpbmZvbnQKIAl9IGVsc2UgewogCSAgICBsYXBwZW5kIHN0aWxsYm9sZCAkcm93CkBAIC0yMjU5LDE3ICszNDIzLDEzIEBACiB9CiAKIHByb2MgYWRkdmhpZ2hsaWdodCB7bn0gewotICAgIGdsb2JhbCBobHZpZXcgY3VydmlldyB2aWV3ZGF0YSB2aGxfZG9uZSB2aGlnaGxpZ2h0cyBjb21taXRpZHgKKyAgICBnbG9iYWwgaGx2aWV3IHZpZXdjb21wbGV0ZSBjdXJ2aWV3IHZobF9kb25lIGNvbW1pdGlkeAogCiAgICAgaWYge1tpbmZvIGV4aXN0cyBobHZpZXddfSB7CiAJZGVsdmhpZ2hsaWdodAogICAgIH0KICAgICBzZXQgaGx2aWV3ICRuCi0gICAgaWYgeyRuICE9ICRjdXJ2aWV3ICYmICFbaW5mbyBleGlzdHMgdmlld2RhdGEoJG4pXX0gewotCXNldCB2aWV3ZGF0YSgkbikgW2xpc3QgZ2V0Y29tbWl0cyB7e319IDAgMCAwXQotCXNldCB2cGFyZW50bGlzdCgkbikge30KLQlzZXQgdmRpc3BvcmRlcigkbikge30KLQlzZXQgdmNtaXRsaXN0ZWQoJG4pIHt9CisgICAgaWYgeyRuICE9ICRjdXJ2aWV3ICYmICFbaW5mbyBleGlzdHMgdmlld2NvbXBsZXRlKCRuKV19IHsKIAlzdGFydF9yZXZfbGlzdCAkbgogICAgIH0KICAgICBzZXQgdmhsX2RvbmUgJGNvbW1pdGlkeCgkaGx2aWV3KQpAQCAtMjI4OCw0MyArMzQ0OCwzOCBAQAogfQogCiBwcm9jIHZoaWdobGlnaHRtb3JlIHt9IHsKLSAgICBnbG9iYWwgaGx2aWV3IHZobF9kb25lIGNvbW1pdGlkeCB2aGlnaGxpZ2h0cwotICAgIGdsb2JhbCBkaXNwbGF5b3JkZXIgdmRpc3BvcmRlciBjdXJ2aWV3CisgICAgZ2xvYmFsIGhsdmlldyB2aGxfZG9uZSBjb21taXRpZHggdmhpZ2hsaWdodHMgY3VydmlldwogCiAgICAgc2V0IG1heCAkY29tbWl0aWR4KCRobHZpZXcpCi0gICAgaWYgeyRobHZpZXcgPT0gJGN1cnZpZXd9IHsKLQlzZXQgZGlzcCAkZGlzcGxheW9yZGVyCi0gICAgfSBlbHNlIHsKLQlzZXQgZGlzcCAkdmRpc3BvcmRlcigkaGx2aWV3KQotICAgIH0KICAgICBzZXQgdnIgW3Zpc2libGVyb3dzXQogICAgIHNldCByMCBbbGluZGV4ICR2ciAwXQogICAgIHNldCByMSBbbGluZGV4ICR2ciAxXQogICAgIGZvciB7c2V0IGkgJHZobF9kb25lfSB7JGkgPCAkbWF4fSB7aW5jciBpfSB7Ci0Jc2V0IGlkIFtsaW5kZXggJGRpc3AgJGldCi0JaWYge1tpbmZvIGV4aXN0cyBjb21taXRyb3coJGN1cnZpZXcsJGlkKV19IHsKLQkgICAgc2V0IHJvdyAkY29tbWl0cm93KCRjdXJ2aWV3LCRpZCkKKwlzZXQgaWQgW2NvbW1pdG9ucm93ICRpICRobHZpZXddCisJaWYge1tjb21taXRpbnZpZXcgJGlkICRjdXJ2aWV3XX0geworCSAgICBzZXQgcm93IFtyb3dvZmNvbW1pdCAkaWRdCiAJICAgIGlmIHskcjAgPD0gJHJvdyAmJiAkcm93IDw9ICRyMX0gewogCQlpZiB7IVtoaWdobGlnaHRlZCAkcm93XX0gewogCQkgICAgYm9sZGVuICRyb3cgbWFpbmZvbnRib2xkCiAJCX0KLQkJc2V0IHZoaWdobGlnaHRzKCRyb3cpIDEKKwkJc2V0IHZoaWdobGlnaHRzKCRpZCkgMQogCSAgICB9CiAJfQogICAgIH0KICAgICBzZXQgdmhsX2RvbmUgJG1heAorICAgIHJldHVybiAwCiB9CiAKIHByb2MgYXNrdmhpZ2hsaWdodCB7cm93IGlkfSB7Ci0gICAgZ2xvYmFsIGhsdmlldyB2aGlnaGxpZ2h0cyBjb21taXRyb3cgaWRkcmF3bgorICAgIGdsb2JhbCBobHZpZXcgdmhpZ2hsaWdodHMgaWRkcmF3bgogCi0gICAgaWYge1tpbmZvIGV4aXN0cyBjb21taXRyb3coJGhsdmlldywkaWQpXX0gewotCWlmIHtbaW5mbyBleGlzdHMgaWRkcmF3bigkaWQpXSAmJiAhW2lzaGlnaGxpZ2h0ZWQgJHJvd119IHsKKyAgICBpZiB7W2NvbW1pdGludmlldyAkaWQgJGhsdmlld119IHsKKwlpZiB7W2luZm8gZXhpc3RzIGlkZHJhd24oJGlkKV0gJiYgIVtpc2hpZ2hsaWdodGVkICRpZF19IHsKIAkgICAgYm9sZGVuICRyb3cgbWFpbmZvbnRib2xkCiAJfQotCXNldCB2aGlnaGxpZ2h0cygkcm93KSAxCisJc2V0IHZoaWdobGlnaHRzKCRpZCkgMQogICAgIH0gZWxzZSB7Ci0Jc2V0IHZoaWdobGlnaHRzKCRyb3cpIDAKKwlzZXQgdmhpZ2hsaWdodHMoJGlkKSAwCiAgICAgfQogfQogCkBAIC0yNDYyLDEyICszNjE3LDEyIEBACiAgICAgZ2xvYmFsIGZpbGVoaWdobGlnaHQgZmhpZ2hsaWdodHMgZmhsX2xpc3QKIAogICAgIGxhcHBlbmQgZmhsX2xpc3QgJGlkCi0gICAgc2V0IGZoaWdobGlnaHRzKCRyb3cpIC0xCisgICAgc2V0IGZoaWdobGlnaHRzKCRpZCkgLTEKICAgICBwdXRzICRmaWxlaGlnaGxpZ2h0ICRpZAogfQogCiBwcm9jIHJlYWRmaGlnaGxpZ2h0IHt9IHsKLSAgICBnbG9iYWwgZmlsZWhpZ2hsaWdodCBmaGlnaGxpZ2h0cyBjb21taXRyb3cgY3VydmlldyBpZGRyYXduCisgICAgZ2xvYmFsIGZpbGVoaWdobGlnaHQgZmhpZ2hsaWdodHMgY3VydmlldyBpZGRyYXduCiAgICAgZ2xvYmFsIGZobF9saXN0IGZpbmRfZGlybgogCiAgICAgaWYgeyFbaW5mbyBleGlzdHMgZmlsZWhpZ2hsaWdodF19IHsKQEAgLTI0ODAsMTggKzM2MzUsMTYgQEAKIAlpZiB7JGkgPCAwfSBjb250aW51ZQogCWZvciB7c2V0IGogMH0geyRqIDwgJGl9IHtpbmNyIGp9IHsKIAkgICAgc2V0IGlkIFtsaW5kZXggJGZobF9saXN0ICRqXQotCSAgICBpZiB7W2luZm8gZXhpc3RzIGNvbW1pdHJvdygkY3VydmlldywkaWQpXX0gewotCQlzZXQgZmhpZ2hsaWdodHMoJGNvbW1pdHJvdygkY3VydmlldywkaWQpKSAwCi0JICAgIH0KKwkgICAgc2V0IGZoaWdobGlnaHRzKCRpZCkgMAogCX0KIAlzZXQgZmhsX2xpc3QgW2xyYW5nZSAkZmhsX2xpc3QgW2V4cHIgeyRpKzF9XSBlbmRdCiAJaWYgeyRsaW5lIGVxIHt9fSBjb250aW51ZQotCWlmIHshW2luZm8gZXhpc3RzIGNvbW1pdHJvdygkY3VydmlldywkbGluZSldfSBjb250aW51ZQotCXNldCByb3cgJGNvbW1pdHJvdygkY3VydmlldywkbGluZSkKLQlpZiB7W2luZm8gZXhpc3RzIGlkZHJhd24oJGxpbmUpXSAmJiAhW2lzaGlnaGxpZ2h0ZWQgJHJvd119IHsKKwlpZiB7IVtjb21taXRpbnZpZXcgJGxpbmUgJGN1cnZpZXddfSBjb250aW51ZQorCXNldCByb3cgW3Jvd29mY29tbWl0ICRsaW5lXQorCWlmIHtbaW5mbyBleGlzdHMgaWRkcmF3bigkbGluZSldICYmICFbaXNoaWdobGlnaHRlZCAkbGluZV19IHsKIAkgICAgYm9sZGVuICRyb3cgbWFpbmZvbnRib2xkCiAJfQotCXNldCBmaGlnaGxpZ2h0cygkcm93KSAxCisJc2V0IGZoaWdobGlnaHRzKCRsaW5lKSAxCiAgICAgfQogICAgIGlmIHtbZW9mICRmaWxlaGlnaGxpZ2h0XX0gewogCSMgc3RyYW5nZS4uLgpAQCAtMjU0MCw3ICszNjkzLDcgQEAKIAl9CiAgICAgfQogICAgIGlmIHskaXNib2xkICYmIFtpbmZvIGV4aXN0cyBpZGRyYXduKCRpZCldfSB7Ci0JaWYgeyFbaXNoaWdobGlnaHRlZCAkcm93XX0geworCWlmIHshW2lzaGlnaGxpZ2h0ZWQgJGlkXX0gewogCSAgICBib2xkZW4gJHJvdyBtYWluZm9udGJvbGQKIAkgICAgaWYgeyRpc2JvbGQgPiAxfSB7CiAJCWJvbGRlbl9uYW1lICRyb3cgbWFpbmZvbnRib2xkCkBAIC0yNTUwLDcgKzM3MDMsNyBAQAogCSAgICBtYXJrcm93bWF0Y2hlcyAkcm93ICRpZAogCX0KICAgICB9Ci0gICAgc2V0IG5oaWdobGlnaHRzKCRyb3cpICRpc2JvbGQKKyAgICBzZXQgbmhpZ2hsaWdodHMoJGlkKSAkaXNib2xkCiB9CiAKIHByb2MgbWFya3Jvd21hdGNoZXMge3JvdyBpZH0gewpAQCAtMjU4OCw3ICszNzQxLDcgQEAKICMgcHJlcGFyZSBmb3IgdGVzdGluZyB3aGV0aGVyIGNvbW1pdHMgYXJlIGRlc2NlbmRlbnRzIG9yIGFuY2VzdG9ycyBvZiBhCiBwcm9jIHJoaWdobGlnaHRfc2VsIHthfSB7CiAgICAgZ2xvYmFsIGRlc2NlbmRlbnQgZGVzY190b2RvIGFuY2VzdG9yIGFuY190b2RvCi0gICAgZ2xvYmFsIGhpZ2hsaWdodF9yZWxhdGVkIHJoaWdobGlnaHRzCisgICAgZ2xvYmFsIGhpZ2hsaWdodF9yZWxhdGVkCiAKICAgICBjYXRjaCB7dW5zZXQgZGVzY2VuZGVudH0KICAgICBzZXQgZGVzY190b2RvIFtsaXN0ICRhXQpAQCAtMjYwOCwxNiArMzc2MSwxNiBAQAogfQogCiBwcm9jIGlzX2Rlc2NlbmRlbnQge2F9IHsKLSAgICBnbG9iYWwgY3VydmlldyBjaGlsZHJlbiBjb21taXRyb3cgZGVzY2VuZGVudCBkZXNjX3RvZG8KKyAgICBnbG9iYWwgY3VydmlldyBjaGlsZHJlbiBkZXNjZW5kZW50IGRlc2NfdG9kbwogCiAgICAgc2V0IHYgJGN1cnZpZXcKLSAgICBzZXQgbGEgJGNvbW1pdHJvdygkdiwkYSkKKyAgICBzZXQgbGEgW3Jvd29mY29tbWl0ICRhXQogICAgIHNldCB0b2RvICRkZXNjX3RvZG8KICAgICBzZXQgbGVmdG92ZXIge30KICAgICBzZXQgZG9uZSAwCiAgICAgZm9yIHtzZXQgaSAwfSB7JGkgPCBbbGxlbmd0aCAkdG9kb119IHtpbmNyIGl9IHsKIAlzZXQgZG8gW2xpbmRleCAkdG9kbyAkaV0KLQlpZiB7JGNvbW1pdHJvdygkdiwkZG8pIDwgJGxhfSB7CisJaWYge1tyb3dvZmNvbW1pdCAkZG9dIDwgJGxhfSB7CiAJICAgIGxhcHBlbmQgbGVmdG92ZXIgJGRvCiAJICAgIGNvbnRpbnVlCiAJfQpAQCAtMjY0MCwyMCArMzc5MywyMCBAQAogfQogCiBwcm9jIGlzX2FuY2VzdG9yIHthfSB7Ci0gICAgZ2xvYmFsIGN1cnZpZXcgcGFyZW50bGlzdCBjb21taXRyb3cgYW5jZXN0b3IgYW5jX3RvZG8KKyAgICBnbG9iYWwgY3VydmlldyBwYXJlbnRzIGFuY2VzdG9yIGFuY190b2RvCiAKICAgICBzZXQgdiAkY3VydmlldwotICAgIHNldCBsYSAkY29tbWl0cm93KCR2LCRhKQorICAgIHNldCBsYSBbcm93b2Zjb21taXQgJGFdCiAgICAgc2V0IHRvZG8gJGFuY190b2RvCiAgICAgc2V0IGxlZnRvdmVyIHt9CiAgICAgc2V0IGRvbmUgMAogICAgIGZvciB7c2V0IGkgMH0geyRpIDwgW2xsZW5ndGggJHRvZG9dfSB7aW5jciBpfSB7CiAJc2V0IGRvIFtsaW5kZXggJHRvZG8gJGldCi0JaWYgeyFbaW5mbyBleGlzdHMgY29tbWl0cm93KCR2LCRkbyldIHx8ICRjb21taXRyb3coJHYsJGRvKSA+ICRsYX0geworCWlmIHshW2NvbW1pdGludmlldyAkZG8gJHZdIHx8IFtyb3dvZmNvbW1pdCAkZG9dID4gJGxhfSB7CiAJICAgIGxhcHBlbmQgbGVmdG92ZXIgJGRvCiAJICAgIGNvbnRpbnVlCiAJfQotCWZvcmVhY2ggbnAgW2xpbmRleCAkcGFyZW50bGlzdCAkY29tbWl0cm93KCR2LCRkbyldIHsKKwlmb3JlYWNoIG5wICRwYXJlbnRzKCR2LCRkbykgewogCSAgICBpZiB7IVtpbmZvIGV4aXN0cyBhbmNlc3RvcigkbnApXX0gewogCQlzZXQgYW5jZXN0b3IoJG5wKSAxCiAJCWxhcHBlbmQgdG9kbyAkbnAKQEAgLTI2NzUsNyArMzgyOCw3IEBACiAgICAgZ2xvYmFsIGRlc2NlbmRlbnQgaGlnaGxpZ2h0X3JlbGF0ZWQgaWRkcmF3biByaGlnaGxpZ2h0cwogICAgIGdsb2JhbCBzZWxlY3RlZGxpbmUgYW5jZXN0b3IKIAotICAgIGlmIHshW2luZm8gZXhpc3RzIHNlbGVjdGVkbGluZV19IHJldHVybgorICAgIGlmIHskc2VsZWN0ZWRsaW5lIGVxIHt9fSByZXR1cm4KICAgICBzZXQgaXNib2xkIDAKICAgICBpZiB7JGhpZ2hsaWdodF9yZWxhdGVkIGVxIFttYyAiRGVzY2VuZGFudCJdIHx8CiAJJGhpZ2hsaWdodF9yZWxhdGVkIGVxIFttYyAiTm90IGRlc2NlbmRhbnQiXX0gewpAQCAtMjY5NSwxMSArMzg0OCwxMSBAQAogCX0KICAgICB9CiAgICAgaWYge1tpbmZvIGV4aXN0cyBpZGRyYXduKCRpZCldfSB7Ci0JaWYgeyRpc2JvbGQgJiYgIVtpc2hpZ2hsaWdodGVkICRyb3ddfSB7CisJaWYgeyRpc2JvbGQgJiYgIVtpc2hpZ2hsaWdodGVkICRpZF19IHsKIAkgICAgYm9sZGVuICRyb3cgbWFpbmZvbnRib2xkCiAJfQogICAgIH0KLSAgICBzZXQgcmhpZ2hsaWdodHMoJHJvdykgJGlzYm9sZAorICAgIHNldCByaGlnaGxpZ2h0cygkaWQpICRpc2JvbGQKIH0KIAogIyBHcmFwaCBsYXlvdXQgZnVuY3Rpb25zCkBAIC0yNzMwLDQwICszODgzLDgxIEBACiAgICAgcmV0dXJuICRyZXQKIH0KIAorcHJvYyBvcmRlcnRva2VuIHtpZH0geworICAgIGdsb2JhbCBvcmRlcnRvayBjdXJ2aWV3IHZhcmNpZCB2YXJjc3RhcnQgdmFyY3RvayBjdXJ2aWV3IHBhcmVudHMgY2hpbGRyZW4KKyAgICBnbG9iYWwgbnVsbGlkIG51bGxpZDIKKworICAgIGlmIHtbaW5mbyBleGlzdHMgb3JkZXJ0b2soJGlkKV19IHsKKwlyZXR1cm4gJG9yZGVydG9rKCRpZCkKKyAgICB9CisgICAgc2V0IG9yaWdpZCAkaWQKKyAgICBzZXQgdG9kbyB7fQorICAgIHdoaWxlIHsxfSB7CisJaWYge1tpbmZvIGV4aXN0cyB2YXJjaWQoJGN1cnZpZXcsJGlkKV19IHsKKwkgICAgc2V0IGEgJHZhcmNpZCgkY3VydmlldywkaWQpCisJICAgIHNldCBwIFtsaW5kZXggJHZhcmNzdGFydCgkY3VydmlldykgJGFdCisJfSBlbHNlIHsKKwkgICAgc2V0IHAgW2xpbmRleCAkY2hpbGRyZW4oJGN1cnZpZXcsJGlkKSAwXQorCX0KKwlpZiB7W2luZm8gZXhpc3RzIG9yZGVydG9rKCRwKV19IHsKKwkgICAgc2V0IHRvayAkb3JkZXJ0b2soJHApCisJICAgIGJyZWFrCisJfQorCXNldCBpZCBbZmlyc3RfcmVhbF9jaGlsZCAkY3VydmlldywkcF0KKwlpZiB7JGlkIGVxIHt9fSB7CisJICAgICMgaXQncyBhIHJvb3QKKwkgICAgc2V0IHRvayBbbGluZGV4ICR2YXJjdG9rKCRjdXJ2aWV3KSAkdmFyY2lkKCRjdXJ2aWV3LCRwKV0KKwkgICAgYnJlYWsKKwl9CisJaWYge1tsbGVuZ3RoICRwYXJlbnRzKCRjdXJ2aWV3LCRpZCldID09IDF9IHsKKwkgICAgbGFwcGVuZCB0b2RvIFtsaXN0ICRwIHt9XQorCX0gZWxzZSB7CisJICAgIHNldCBqIFtsc2VhcmNoIC1leGFjdCAkcGFyZW50cygkY3VydmlldywkaWQpICRwXQorCSAgICBpZiB7JGogPCAwfSB7CisJCXB1dHMgIm9vcHMgZGlkbid0IGZpbmQgW3Nob3J0aWRzICRwXSBpbiBwYXJlbnRzIG9mIFtzaG9ydGlkcyAkaWRdIgorCSAgICB9CisJICAgIGxhcHBlbmQgdG9kbyBbbGlzdCAkcCBbc3RycmVwICRqXV0KKwl9CisgICAgfQorICAgIGZvciB7c2V0IGkgW2xsZW5ndGggJHRvZG9dfSB7W2luY3IgaSAtMV0gPj0gMH0ge30geworCXNldCBwIFtsaW5kZXggJHRvZG8gJGkgMF0KKwlhcHBlbmQgdG9rIFtsaW5kZXggJHRvZG8gJGkgMV0KKwlzZXQgb3JkZXJ0b2soJHApICR0b2sKKyAgICB9CisgICAgc2V0IG9yZGVydG9rKCRvcmlnaWQpICR0b2sKKyAgICByZXR1cm4gJHRvaworfQorCiAjIFdvcmsgb3V0IHdoZXJlIGlkIHNob3VsZCBnbyBpbiBpZGxpc3Qgc28gdGhhdCBvcmRlci10b2tlbgogIyB2YWx1ZXMgaW5jcmVhc2UgZnJvbSBsZWZ0IHRvIHJpZ2h0CiBwcm9jIGlkY29sIHtpZGxpc3QgaWQge2kgMH19IHsKLSAgICBnbG9iYWwgb3JkZXJ0b2sgY3VydmlldwotCi0gICAgc2V0IHQgJG9yZGVydG9rKCRjdXJ2aWV3LCRpZCkKLSAgICBpZiB7JGkgPj0gW2xsZW5ndGggJGlkbGlzdF0gfHwKLQkkdCA8ICRvcmRlcnRvaygkY3VydmlldyxbbGluZGV4ICRpZGxpc3QgJGldKX0geworICAgIHNldCB0IFtvcmRlcnRva2VuICRpZF0KKyAgICBpZiB7JGkgPCAwfSB7CisJc2V0IGkgMAorICAgIH0KKyAgICBpZiB7JGkgPj0gW2xsZW5ndGggJGlkbGlzdF0gfHwgJHQgPCBbb3JkZXJ0b2tlbiBbbGluZGV4ICRpZGxpc3QgJGldXX0gewogCWlmIHskaSA+IFtsbGVuZ3RoICRpZGxpc3RdfSB7CiAJICAgIHNldCBpIFtsbGVuZ3RoICRpZGxpc3RdCiAJfQotCXdoaWxlIHtbaW5jciBpIC0xXSA+PSAwICYmCi0JICAgICAgICR0IDwgJG9yZGVydG9rKCRjdXJ2aWV3LFtsaW5kZXggJGlkbGlzdCAkaV0pfSB7fQorCXdoaWxlIHtbaW5jciBpIC0xXSA+PSAwICYmICR0IDwgW29yZGVydG9rZW4gW2xpbmRleCAkaWRsaXN0ICRpXV19IHt9CiAJaW5jciBpCiAgICAgfSBlbHNlIHsKLQlpZiB7JHQgPiAkb3JkZXJ0b2soJGN1cnZpZXcsW2xpbmRleCAkaWRsaXN0ICRpXSl9IHsKKwlpZiB7JHQgPiBbb3JkZXJ0b2tlbiBbbGluZGV4ICRpZGxpc3QgJGldXX0gewogCSAgICB3aGlsZSB7W2luY3IgaV0gPCBbbGxlbmd0aCAkaWRsaXN0XSAmJgotCQkgICAkdCA+PSAkb3JkZXJ0b2soJGN1cnZpZXcsW2xpbmRleCAkaWRsaXN0ICRpXSl9IHt9CisJCSAgICR0ID49IFtvcmRlcnRva2VuIFtsaW5kZXggJGlkbGlzdCAkaV1dfSB7fQogCX0KICAgICB9CiAgICAgcmV0dXJuICRpCiB9CiAKIHByb2MgaW5pdGxheW91dCB7fSB7Ci0gICAgZ2xvYmFsIHJvd2lkbGlzdCByb3dpc29wdCByb3dmaW5hbCBkaXNwbGF5b3JkZXIgY29tbWl0bGlzdGVkCisgICAgZ2xvYmFsIHJvd2lkbGlzdCByb3dpc29wdCByb3dmaW5hbCBkaXNwbGF5b3JkZXIgcGFyZW50bGlzdAogICAgIGdsb2JhbCBudW1jb21taXRzIGNhbnZ4bWF4IGNhbnYKICAgICBnbG9iYWwgbmV4dGNvbG9yCi0gICAgZ2xvYmFsIHBhcmVudGxpc3QKICAgICBnbG9iYWwgY29sb3JtYXAgcm93dGV4dHgKLSAgICBnbG9iYWwgc2VsZWN0Zmlyc3QKIAogICAgIHNldCBudW1jb21taXRzIDAKICAgICBzZXQgZGlzcGxheW9yZGVyIHt9Ci0gICAgc2V0IGNvbW1pdGxpc3RlZCB7fQogICAgIHNldCBwYXJlbnRsaXN0IHt9CiAgICAgc2V0IG5leHRjb2xvciAwCiAgICAgc2V0IHJvd2lkbGlzdCB7fQpAQCAtMjc3MiwxNiArMzk2NiwxOSBAQAogICAgIHNldCBjYW52eG1heCBbJGNhbnYgY2dldCAtd2lkdGhdCiAgICAgY2F0Y2gge3Vuc2V0IGNvbG9ybWFwfQogICAgIGNhdGNoIHt1bnNldCByb3d0ZXh0eH0KLSAgICBzZXQgc2VsZWN0Zmlyc3QgMQorICAgIHNldGNhbnZzY3JvbGwKIH0KIAogcHJvYyBzZXRjYW52c2Nyb2xsIHt9IHsKICAgICBnbG9iYWwgY2FudiBjYW52MiBjYW52MyBudW1jb21taXRzIGxpbmVzcGMgY2FudnhtYXggY2FudnkwCisgICAgZ2xvYmFsIGxhc3RzY3JvbGxzZXQgbGFzdHNjcm9sbHJvd3MKIAogICAgIHNldCB5bWF4IFtleHByIHskY2FudnkwICsgKCRudW1jb21taXRzIC0gMC41KSAqICRsaW5lc3BjICsgMn1dCiAgICAgJGNhbnYgY29uZiAtc2Nyb2xscmVnaW9uIFtsaXN0IDAgMCAkY2FudnhtYXggJHltYXhdCiAgICAgJGNhbnYyIGNvbmYgLXNjcm9sbHJlZ2lvbiBbbGlzdCAwIDAgMCAkeW1heF0KICAgICAkY2FudjMgY29uZiAtc2Nyb2xscmVnaW9uIFtsaXN0IDAgMCAwICR5bWF4XQorICAgIHNldCBsYXN0c2Nyb2xsc2V0IFtjbG9jayBjbGlja3MgLW1pbGxpc2Vjb25kc10KKyAgICBzZXQgbGFzdHNjcm9sbHJvd3MgJG51bWNvbW1pdHMKIH0KIAogcHJvYyB2aXNpYmxlcm93cyB7fSB7CkBAIC0yODA0LDEwMiArNDAwMSw1OCBAQAogfQogCiBwcm9jIGxheW91dG1vcmUge30gewotICAgIGdsb2JhbCBjb21taXRpZHggdmlld2NvbXBsZXRlIG51bWNvbW1pdHMKLSAgICBnbG9iYWwgdXBhcnJvd2xlbiBkb3duYXJyb3dsZW4gbWluZ2FwbGVuIGN1cnZpZXcKKyAgICBnbG9iYWwgY29tbWl0aWR4IHZpZXdjb21wbGV0ZSBjdXJ2aWV3CisgICAgZ2xvYmFsIG51bWNvbW1pdHMgcGVuZGluZ19zZWxlY3QgY3VydmlldworICAgIGdsb2JhbCBsYXN0c2Nyb2xsc2V0IGxhc3RzY3JvbGxyb3dzIGNvbW1pdGludGVyZXN0CiAKLSAgICBzZXQgc2hvdyAkY29tbWl0aWR4KCRjdXJ2aWV3KQotICAgIGlmIHskc2hvdyA+ICRudW1jb21taXRzIHx8ICR2aWV3Y29tcGxldGUoJGN1cnZpZXcpfSB7Ci0Jc2hvd3N0dWZmICRzaG93ICR2aWV3Y29tcGxldGUoJGN1cnZpZXcpCi0gICAgfQotfQotCi1wcm9jIHNob3dzdHVmZiB7Y2Fuc2hvdyBsYXN0fSB7Ci0gICAgZ2xvYmFsIG51bWNvbW1pdHMgY29tbWl0cm93IHBlbmRpbmdfc2VsZWN0IHNlbGVjdGVkbGluZSBjdXJ2aWV3Ci0gICAgZ2xvYmFsIG1haW5oZWFkaWQgZGlzcGxheW9yZGVyIHNlbGVjdGZpcnN0Ci0gICAgZ2xvYmFsIGxhc3RzY3JvbGxzZXQgY29tbWl0aW50ZXJlc3QKLQotICAgIGlmIHskbnVtY29tbWl0cyA9PSAwfSB7Ci0JZ2xvYmFsIHBoYXNlCi0Jc2V0IHBoYXNlICJpbmNyZHJhdyIKLQlhbGxjYW52cyBkZWxldGUgYWxsCi0gICAgfQotICAgIHNldCByMCAkbnVtY29tbWl0cwotICAgIHNldCBwcmV2ICRudW1jb21taXRzCi0gICAgc2V0IG51bWNvbW1pdHMgJGNhbnNob3cKLSAgICBzZXQgdCBbY2xvY2sgY2xpY2tzIC1taWxsaXNlY29uZHNdCi0gICAgaWYgeyRwcmV2IDwgMTAwIHx8ICRsYXN0IHx8ICR0IC0gJGxhc3RzY3JvbGxzZXQgPiA1MDB9IHsKLQlzZXQgbGFzdHNjcm9sbHNldCAkdAorICAgIGlmIHskbGFzdHNjcm9sbHJvd3MgPCAxMDAgfHwgJHZpZXdjb21wbGV0ZSgkY3VydmlldykgfHwKKwlbY2xvY2sgY2xpY2tzIC1taWxsaXNlY29uZHNdIC0gJGxhc3RzY3JvbGxzZXQgPiA1MDB9IHsKIAlzZXRjYW52c2Nyb2xsCiAgICAgfQotICAgIHNldCByb3dzIFt2aXNpYmxlcm93c10KLSAgICBzZXQgcjEgW2xpbmRleCAkcm93cyAxXQotICAgIGlmIHskcjEgPj0gJGNhbnNob3d9IHsKLQlzZXQgcjEgW2V4cHIgeyRjYW5zaG93IC0gMX1dCi0gICAgfQotICAgIGlmIHskcjAgPD0gJHIxfSB7Ci0JZHJhd2NvbW1pdHMgJHIwICRyMQotICAgIH0KICAgICBpZiB7W2luZm8gZXhpc3RzIHBlbmRpbmdfc2VsZWN0XSAmJgotCVtpbmZvIGV4aXN0cyBjb21taXRyb3coJGN1cnZpZXcsJHBlbmRpbmdfc2VsZWN0KV0gJiYKLQkkY29tbWl0cm93KCRjdXJ2aWV3LCRwZW5kaW5nX3NlbGVjdCkgPCAkbnVtY29tbWl0c30gewotCXNlbGVjdGxpbmUgJGNvbW1pdHJvdygkY3VydmlldywkcGVuZGluZ19zZWxlY3QpIDEKKwlbY29tbWl0aW52aWV3ICRwZW5kaW5nX3NlbGVjdCAkY3Vydmlld119IHsKKwlzZWxlY3RsaW5lIFtyb3dvZmNvbW1pdCAkcGVuZGluZ19zZWxlY3RdIDEKICAgICB9Ci0gICAgaWYgeyRzZWxlY3RmaXJzdH0gewotCWlmIHtbaW5mbyBleGlzdHMgc2VsZWN0ZWRsaW5lXSB8fCBbaW5mbyBleGlzdHMgcGVuZGluZ19zZWxlY3RdfSB7Ci0JICAgIHNldCBzZWxlY3RmaXJzdCAwCi0JfSBlbHNlIHsKLQkgICAgc2V0IGwgW2ZpcnN0X3JlYWxfcm93XQotCSAgICBzZWxlY3RsaW5lICRsIDEKLQkgICAgc2V0IHNlbGVjdGZpcnN0IDAKLQl9Ci0gICAgfQorICAgIGRyYXd2aXNpYmxlCiB9CiAKIHByb2MgZG9zaG93bG9jYWxjaGFuZ2VzIHt9IHsKLSAgICBnbG9iYWwgY3VydmlldyBtYWluaGVhZGlkIHBoYXNlIGNvbW1pdHJvdworICAgIGdsb2JhbCBjdXJ2aWV3IG1haW5oZWFkaWQKIAotICAgIGlmIHtbaW5mbyBleGlzdHMgY29tbWl0cm93KCRjdXJ2aWV3LCRtYWluaGVhZGlkKV0gJiYKLQkoJHBoYXNlIGVxIHt9IHx8ICRjb21taXRyb3coJGN1cnZpZXcsJG1haW5oZWFkaWQpIDwgJG51bWNvbW1pdHMgLSAxKX0geworICAgIGlmIHskbWFpbmhlYWRpZCBlcSB7fX0gcmV0dXJuCisgICAgaWYge1tjb21taXRpbnZpZXcgJG1haW5oZWFkaWQgJGN1cnZpZXddfSB7CiAJZG9kaWZmaW5kZXgKLSAgICB9IGVsc2VpZiB7JHBoYXNlIG5lIHt9fSB7Ci0JbGFwcGVuZCBjb21taXRpbnRlcmVzdCgkbWFpbmhlYWRpZCkge30KKyAgICB9IGVsc2UgeworCWxhcHBlbmQgY29tbWl0aW50ZXJlc3QoJG1haW5oZWFkaWQpIHtkb2RpZmZpbmRleH0KICAgICB9CiB9CiAKIHByb2MgZG9oaWRlbG9jYWxjaGFuZ2VzIHt9IHsKLSAgICBnbG9iYWwgbG9jYWxmcm93IGxvY2FsaXJvdyBsc2VyaWFsCisgICAgZ2xvYmFsIG51bGxpZCBudWxsaWQyIGxzZXJpYWwgY3VydmlldwogCi0gICAgaWYgeyRsb2NhbGZyb3cgPj0gMH0gewotCXJlbW92ZXJvdyAkbG9jYWxmcm93Ci0Jc2V0IGxvY2FsZnJvdyAtMQotCWlmIHskbG9jYWxpcm93ID4gMH0gewotCSAgICBpbmNyIGxvY2FsaXJvdyAtMQotCX0KKyAgICBpZiB7W2NvbW1pdGludmlldyAkbnVsbGlkICRjdXJ2aWV3XX0geworCXJlbW92ZWZha2Vyb3cgJG51bGxpZAogICAgIH0KLSAgICBpZiB7JGxvY2FsaXJvdyA+PSAwfSB7Ci0JcmVtb3Zlcm93ICRsb2NhbGlyb3cKLQlzZXQgbG9jYWxpcm93IC0xCisgICAgaWYge1tjb21taXRpbnZpZXcgJG51bGxpZDIgJGN1cnZpZXddfSB7CisJcmVtb3ZlZmFrZXJvdyAkbnVsbGlkMgogICAgIH0KICAgICBpbmNyIGxzZXJpYWwKIH0KIAogIyBzcGF3biBvZmYgYSBwcm9jZXNzIHRvIGRvIGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIEhFQUQKIHByb2MgZG9kaWZmaW5kZXgge30gewotICAgIGdsb2JhbCBsb2NhbGlyb3cgbG9jYWxmcm93IGxzZXJpYWwgc2hvd2xvY2FsY2hhbmdlcworICAgIGdsb2JhbCBsc2VyaWFsIHNob3dsb2NhbGNoYW5nZXMKICAgICBnbG9iYWwgaXN3b3JrdHJlZQogCiAgICAgaWYgeyEkc2hvd2xvY2FsY2hhbmdlcyB8fCAhJGlzd29ya3RyZWV9IHJldHVybgogICAgIGluY3IgbHNlcmlhbAotICAgIHNldCBsb2NhbGZyb3cgLTEKLSAgICBzZXQgbG9jYWxpcm93IC0xCiAgICAgc2V0IGZkIFtvcGVuICJ8Z2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgSEVBRCIgcl0KICAgICBmY29uZmlndXJlICRmZCAtYmxvY2tpbmcgMAogICAgIGZpbGVydW4gJGZkIFtsaXN0IHJlYWRkaWZmaW5kZXggJGZkICRsc2VyaWFsXQogfQogCiBwcm9jIHJlYWRkaWZmaW5kZXgge2ZkIHNlcmlhbH0gewotICAgIGdsb2JhbCBsb2NhbGlyb3cgY29tbWl0cm93IG1haW5oZWFkaWQgbnVsbGlkMiBjdXJ2aWV3Ci0gICAgZ2xvYmFsIGNvbW1pdGluZm8gY29tbWl0ZGF0YSBsc2VyaWFsCisgICAgZ2xvYmFsIG1haW5oZWFkaWQgbnVsbGlkIG51bGxpZDIgY3VydmlldyBjb21taXRpbmZvIGNvbW1pdGRhdGEgbHNlcmlhbAogCiAgICAgc2V0IGlzZGlmZiAxCiAgICAgaWYge1tnZXRzICRmZCBsaW5lXSA8IDB9IHsKQEAgLTI5MTEsMjYgKzQwNjQsMzIgQEAKICAgICAjIHdlIG9ubHkgbmVlZCB0byBzZWUgb25lIGxpbmUgYW5kIHdlIGRvbid0IHJlYWxseSBjYXJlIHdoYXQgaXQgc2F5cy4uLgogICAgIGNsb3NlICRmZAogCi0gICAgIyBub3cgc2VlIGlmIHRoZXJlIGFyZSBhbnkgbG9jYWwgY2hhbmdlcyBub3QgY2hlY2tlZCBpbiB0byB0aGUgaW5kZXgKLSAgICBpZiB7JHNlcmlhbCA9PSAkbHNlcmlhbH0gewotCXNldCBmZCBbb3BlbiAifGdpdCBkaWZmLWZpbGVzIiByXQotCWZjb25maWd1cmUgJGZkIC1ibG9ja2luZyAwCi0JZmlsZXJ1biAkZmQgW2xpc3QgcmVhZGRpZmZmaWxlcyAkZmQgJHNlcmlhbF0KKyAgICBpZiB7JHNlcmlhbCAhPSAkbHNlcmlhbH0geworCXJldHVybiAwCiAgICAgfQogCi0gICAgaWYgeyRpc2RpZmYgJiYgJHNlcmlhbCA9PSAkbHNlcmlhbCAmJiAkbG9jYWxpcm93ID09IC0xfSB7CisgICAgIyBub3cgc2VlIGlmIHRoZXJlIGFyZSBhbnkgbG9jYWwgY2hhbmdlcyBub3QgY2hlY2tlZCBpbiB0byB0aGUgaW5kZXgKKyAgICBzZXQgZmQgW29wZW4gInxnaXQgZGlmZi1maWxlcyIgcl0KKyAgICBmY29uZmlndXJlICRmZCAtYmxvY2tpbmcgMAorICAgIGZpbGVydW4gJGZkIFtsaXN0IHJlYWRkaWZmZmlsZXMgJGZkICRzZXJpYWxdCisKKyAgICBpZiB7JGlzZGlmZiAmJiAhW2NvbW1pdGludmlldyAkbnVsbGlkMiAkY3Vydmlld119IHsKIAkjIGFkZCB0aGUgbGluZSBmb3IgdGhlIGNoYW5nZXMgaW4gdGhlIGluZGV4IHRvIHRoZSBncmFwaAotCXNldCBsb2NhbGlyb3cgJGNvbW1pdHJvdygkY3VydmlldywkbWFpbmhlYWRpZCkKIAlzZXQgaGwgW21jICJMb2NhbCBjaGFuZ2VzIGNoZWNrZWQgaW4gdG8gaW5kZXggYnV0IG5vdCBjb21taXR0ZWQiXQogCXNldCBjb21taXRpbmZvKCRudWxsaWQyKSBbbGlzdCAgJGhsIHt9IHt9IHt9IHt9ICIgICAgJGhsXG4iXQogCXNldCBjb21taXRkYXRhKCRudWxsaWQyKSAiXG4gICAgJGhsXG4iCi0JaW5zZXJ0cm93ICRsb2NhbGlyb3cgJG51bGxpZDIKKwlpZiB7W2NvbW1pdGludmlldyAkbnVsbGlkICRjdXJ2aWV3XX0geworCSAgICByZW1vdmVmYWtlcm93ICRudWxsaWQKKwl9CisJaW5zZXJ0ZmFrZXJvdyAkbnVsbGlkMiAkbWFpbmhlYWRpZAorICAgIH0gZWxzZWlmIHshJGlzZGlmZiAmJiBbY29tbWl0aW52aWV3ICRudWxsaWQyICRjdXJ2aWV3XX0geworCXJlbW92ZWZha2Vyb3cgJG51bGxpZDIKICAgICB9CiAgICAgcmV0dXJuIDAKIH0KIAogcHJvYyByZWFkZGlmZmZpbGVzIHtmZCBzZXJpYWx9IHsKLSAgICBnbG9iYWwgbG9jYWxpcm93IGxvY2FsZnJvdyBjb21taXRyb3cgbWFpbmhlYWRpZCBudWxsaWQgY3VydmlldworICAgIGdsb2JhbCBtYWluaGVhZGlkIG51bGxpZCBudWxsaWQyIGN1cnZpZXcKICAgICBnbG9iYWwgY29tbWl0aW5mbyBjb21taXRkYXRhIGxzZXJpYWwKIAogICAgIHNldCBpc2RpZmYgMQpAQCAtMjk0Myw1MCArNDEwMiw1NSBAQAogICAgICMgd2Ugb25seSBuZWVkIHRvIHNlZSBvbmUgbGluZSBhbmQgd2UgZG9uJ3QgcmVhbGx5IGNhcmUgd2hhdCBpdCBzYXlzLi4uCiAgICAgY2xvc2UgJGZkCiAKLSAgICBpZiB7JGlzZGlmZiAmJiAkc2VyaWFsID09ICRsc2VyaWFsICYmICRsb2NhbGZyb3cgPT0gLTF9IHsKKyAgICBpZiB7JHNlcmlhbCAhPSAkbHNlcmlhbH0geworCXJldHVybiAwCisgICAgfQorCisgICAgaWYgeyRpc2RpZmYgJiYgIVtjb21taXRpbnZpZXcgJG51bGxpZCAkY3Vydmlld119IHsKIAkjIGFkZCB0aGUgbGluZSBmb3IgdGhlIGxvY2FsIGRpZmYgdG8gdGhlIGdyYXBoCi0JaWYgeyRsb2NhbGlyb3cgPj0gMH0gewotCSAgICBzZXQgbG9jYWxmcm93ICRsb2NhbGlyb3cKLQkgICAgaW5jciBsb2NhbGlyb3cKLQl9IGVsc2UgewotCSAgICBzZXQgbG9jYWxmcm93ICRjb21taXRyb3coJGN1cnZpZXcsJG1haW5oZWFkaWQpCi0JfQogCXNldCBobCBbbWMgIkxvY2FsIHVuY29tbWl0dGVkIGNoYW5nZXMsIG5vdCBjaGVja2VkIGluIHRvIGluZGV4Il0KIAlzZXQgY29tbWl0aW5mbygkbnVsbGlkKSBbbGlzdCAgJGhsIHt9IHt9IHt9IHt9ICIgICAgJGhsXG4iXQogCXNldCBjb21taXRkYXRhKCRudWxsaWQpICJcbiAgICAkaGxcbiIKLQlpbnNlcnRyb3cgJGxvY2FsZnJvdyAkbnVsbGlkCisJaWYge1tjb21taXRpbnZpZXcgJG51bGxpZDIgJGN1cnZpZXddfSB7CisJICAgIHNldCBwICRudWxsaWQyCisJfSBlbHNlIHsKKwkgICAgc2V0IHAgJG1haW5oZWFkaWQKKwl9CisJaW5zZXJ0ZmFrZXJvdyAkbnVsbGlkICRwCisgICAgfSBlbHNlaWYgeyEkaXNkaWZmICYmIFtjb21taXRpbnZpZXcgJG51bGxpZCAkY3Vydmlld119IHsKKwlyZW1vdmVmYWtlcm93ICRudWxsaWQKICAgICB9CiAgICAgcmV0dXJuIDAKIH0KIAogcHJvYyBuZXh0dXNlIHtpZCByb3d9IHsKLSAgICBnbG9iYWwgY29tbWl0cm93IGN1cnZpZXcgY2hpbGRyZW4KKyAgICBnbG9iYWwgY3VydmlldyBjaGlsZHJlbgogCiAgICAgaWYge1tpbmZvIGV4aXN0cyBjaGlsZHJlbigkY3VydmlldywkaWQpXX0gewogCWZvcmVhY2gga2lkICRjaGlsZHJlbigkY3VydmlldywkaWQpIHsKLQkgICAgaWYgeyFbaW5mbyBleGlzdHMgY29tbWl0cm93KCRjdXJ2aWV3LCRraWQpXX0geworCSAgICBpZiB7IVtjb21taXRpbnZpZXcgJGtpZCAkY3Vydmlld119IHsKIAkJcmV0dXJuIC0xCiAJICAgIH0KLQkgICAgaWYgeyRjb21taXRyb3coJGN1cnZpZXcsJGtpZCkgPiAkcm93fSB7Ci0JCXJldHVybiAkY29tbWl0cm93KCRjdXJ2aWV3LCRraWQpCisJICAgIGlmIHtbcm93b2Zjb21taXQgJGtpZF0gPiAkcm93fSB7CisJCXJldHVybiBbcm93b2Zjb21taXQgJGtpZF0KIAkgICAgfQogCX0KICAgICB9Ci0gICAgaWYge1tpbmZvIGV4aXN0cyBjb21taXRyb3coJGN1cnZpZXcsJGlkKV19IHsKLQlyZXR1cm4gJGNvbW1pdHJvdygkY3VydmlldywkaWQpCisgICAgaWYge1tjb21taXRpbnZpZXcgJGlkICRjdXJ2aWV3XX0geworCXJldHVybiBbcm93b2Zjb21taXQgJGlkXQogICAgIH0KICAgICByZXR1cm4gLTEKIH0KIAogcHJvYyBwcmV2dXNlIHtpZCByb3d9IHsKLSAgICBnbG9iYWwgY29tbWl0cm93IGN1cnZpZXcgY2hpbGRyZW4KKyAgICBnbG9iYWwgY3VydmlldyBjaGlsZHJlbgogCiAgICAgc2V0IHJldCAtMQogICAgIGlmIHtbaW5mbyBleGlzdHMgY2hpbGRyZW4oJGN1cnZpZXcsJGlkKV19IHsKIAlmb3JlYWNoIGtpZCAkY2hpbGRyZW4oJGN1cnZpZXcsJGlkKSB7Ci0JICAgIGlmIHshW2luZm8gZXhpc3RzIGNvbW1pdHJvdygkY3Vydmlldywka2lkKV19IGJyZWFrCi0JICAgIGlmIHskY29tbWl0cm93KCRjdXJ2aWV3LCRraWQpIDwgJHJvd30gewotCQlzZXQgcmV0ICRjb21taXRyb3coJGN1cnZpZXcsJGtpZCkKKwkgICAgaWYgeyFbY29tbWl0aW52aWV3ICRraWQgJGN1cnZpZXddfSBicmVhaworCSAgICBpZiB7W3Jvd29mY29tbWl0ICRraWRdIDwgJHJvd30geworCQlzZXQgcmV0IFtyb3dvZmNvbW1pdCAka2lkXQogCSAgICB9CiAJfQogICAgIH0KQEAgLTI5OTUsNyArNDE1OSw3IEBACiAKIHByb2MgbWFrZV9pZGxpc3Qge3Jvd30gewogICAgIGdsb2JhbCBkaXNwbGF5b3JkZXIgcGFyZW50bGlzdCB1cGFycm93bGVuIGRvd25hcnJvd2xlbiBtaW5nYXBsZW4KLSAgICBnbG9iYWwgY29tbWl0aWR4IGN1cnZpZXcgb3JkZXJ0b2sgY2hpbGRyZW4gY29tbWl0cm93CisgICAgZ2xvYmFsIGNvbW1pdGlkeCBjdXJ2aWV3IGNoaWxkcmVuCiAKICAgICBzZXQgciBbZXhwciB7JHJvdyAtICRtaW5nYXBsZW4gLSAkZG93bmFycm93bGVuIC0gMX1dCiAgICAgaWYgeyRyIDwgMH0gewpAQCAtMzAwOSw2ICs0MTczLDcgQEAKICAgICBpZiB7JHJiID4gJGNvbW1pdGlkeCgkY3Vydmlldyl9IHsKIAlzZXQgcmIgJGNvbW1pdGlkeCgkY3VydmlldykKICAgICB9CisgICAgbWFrZV9kaXNwb3JkZXIgJHIgW2V4cHIgeyRyYiArIDF9XQogICAgIHNldCBpZHMge30KICAgICBmb3Ige30geyRyIDwgJHJhfSB7aW5jciByfSB7CiAJc2V0IG5leHRpZCBbbGluZGV4ICRkaXNwbGF5b3JkZXIgW2V4cHIgeyRyICsgMX1dXQpAQCAtMzAxNyw3ICs0MTgyLDcgQEAKIAkgICAgc2V0IHJuIFtuZXh0dXNlICRwICRyXQogCSAgICBpZiB7JHJuID49ICRyb3cgJiYKIAkJJHJuIDw9ICRyICsgJGRvd25hcnJvd2xlbiArICRtaW5nYXBsZW4gKyAkdXBhcnJvd2xlbn0gewotCQlsYXBwZW5kIGlkcyBbbGlzdCAkb3JkZXJ0b2soJGN1cnZpZXcsJHApICRwXQorCQlsYXBwZW5kIGlkcyBbbGlzdCBbb3JkZXJ0b2tlbiAkcF0gJHBdCiAJICAgIH0KIAl9CiAgICAgfQpAQCAtMzAyNywyNSArNDE5MiwyNSBAQAogCSAgICBpZiB7JHAgZXEgJG5leHRpZH0gY29udGludWUKIAkgICAgc2V0IHJuIFtuZXh0dXNlICRwICRyXQogCSAgICBpZiB7JHJuIDwgMCB8fCAkcm4gPj0gJHJvd30gewotCQlsYXBwZW5kIGlkcyBbbGlzdCAkb3JkZXJ0b2soJGN1cnZpZXcsJHApICRwXQorCQlsYXBwZW5kIGlkcyBbbGlzdCBbb3JkZXJ0b2tlbiAkcF0gJHBdCiAJICAgIH0KIAl9CiAgICAgfQogICAgIHNldCBpZCBbbGluZGV4ICRkaXNwbGF5b3JkZXIgJHJvd10KLSAgICBsYXBwZW5kIGlkcyBbbGlzdCAkb3JkZXJ0b2soJGN1cnZpZXcsJGlkKSAkaWRdCisgICAgbGFwcGVuZCBpZHMgW2xpc3QgW29yZGVydG9rZW4gJGlkXSAkaWRdCiAgICAgd2hpbGUgeyRyIDwgJHJifSB7CiAJZm9yZWFjaCBwIFtsaW5kZXggJHBhcmVudGxpc3QgJHJdIHsKIAkgICAgc2V0IGZpcnN0a2lkIFtsaW5kZXggJGNoaWxkcmVuKCRjdXJ2aWV3LCRwKSAwXQotCSAgICBpZiB7JGNvbW1pdHJvdygkY3VydmlldywkZmlyc3RraWQpIDwgJHJvd30gewotCQlsYXBwZW5kIGlkcyBbbGlzdCAkb3JkZXJ0b2soJGN1cnZpZXcsJHApICRwXQorCSAgICBpZiB7W3Jvd29mY29tbWl0ICRmaXJzdGtpZF0gPCAkcm93fSB7CisJCWxhcHBlbmQgaWRzIFtsaXN0IFtvcmRlcnRva2VuICRwXSAkcF0KIAkgICAgfQogCX0KIAlpbmNyIHIKIAlzZXQgaWQgW2xpbmRleCAkZGlzcGxheW9yZGVyICRyXQogCWlmIHskaWQgbmUge319IHsKIAkgICAgc2V0IGZpcnN0a2lkIFtsaW5kZXggJGNoaWxkcmVuKCRjdXJ2aWV3LCRpZCkgMF0KLQkgICAgaWYgeyRmaXJzdGtpZCBuZSB7fSAmJiAkY29tbWl0cm93KCRjdXJ2aWV3LCRmaXJzdGtpZCkgPCAkcm93fSB7Ci0JCWxhcHBlbmQgaWRzIFtsaXN0ICRvcmRlcnRvaygkY3VydmlldywkaWQpICRpZF0KKwkgICAgaWYgeyRmaXJzdGtpZCBuZSB7fSAmJiBbcm93b2Zjb21taXQgJGZpcnN0a2lkXSA8ICRyb3d9IHsKKwkJbGFwcGVuZCBpZHMgW2xpc3QgW29yZGVydG9rZW4gJGlkXSAkaWRdCiAJICAgIH0KIAl9CiAgICAgfQpAQCAtMzA5MSw4ICs0MjU2LDkgQEAKICAgICBnbG9iYWwgcm93aWRsaXN0IHJvd2lzb3B0IHJvd2ZpbmFsIGRpc3BsYXlvcmRlcgogICAgIGdsb2JhbCB1cGFycm93bGVuIGRvd25hcnJvd2xlbiBtYXh3aWR0aCBtaW5nYXBsZW4KICAgICBnbG9iYWwgY2hpbGRyZW4gcGFyZW50bGlzdAotICAgIGdsb2JhbCBjb21taXRpZHggdmlld2NvbXBsZXRlIGN1cnZpZXcgY29tbWl0cm93CisgICAgZ2xvYmFsIGNvbW1pdGlkeCB2aWV3Y29tcGxldGUgY3VydmlldwogCisgICAgbWFrZV9kaXNwb3JkZXIgW2V4cHIgeyRyb3cgLSAxfV0gW2V4cHIgeyRlbmRyb3cgKyAkdXBhcnJvd2xlbn1dCiAgICAgc2V0IGlkbGlzdCB7fQogICAgIGlmIHskcm93ID4gMH0gewogCXNldCBybTEgW2V4cHIgeyRyb3cgLSAxfV0KQEAgLTMxNDgsNyArNDMxNCw3IEBACiAJCWZvcmVhY2ggcCBbbGluZGV4ICRwYXJlbnRsaXN0ICRyXSB7CiAJCSAgICBpZiB7W2xzZWFyY2ggLWV4YWN0ICRpZGxpc3QgJHBdID49IDB9IGNvbnRpbnVlCiAJCSAgICBzZXQgZmsgW2xpbmRleCAkY2hpbGRyZW4oJGN1cnZpZXcsJHApIDBdCi0JCSAgICBpZiB7JGNvbW1pdHJvdygkY3VydmlldywkZmspIDwgJHJvd30geworCQkgICAgaWYge1tyb3dvZmNvbW1pdCAkZmtdIDwgJHJvd30gewogCQkJc2V0IHggW2lkY29sICRpZGxpc3QgJHAgJHhdCiAJCQlzZXQgaWRsaXN0IFtsaW5zZXJ0ICRpZGxpc3QgJHggJHBdCiAJCSAgICB9CkBAIC0zMTU3LDcgKzQzMjMsNyBAQAogCQkgICAgc2V0IHAgW2xpbmRleCAkZGlzcGxheW9yZGVyICRyXQogCQkgICAgaWYge1tsc2VhcmNoIC1leGFjdCAkaWRsaXN0ICRwXSA8IDB9IHsKIAkJCXNldCBmayBbbGluZGV4ICRjaGlsZHJlbigkY3VydmlldywkcCkgMF0KLQkJCWlmIHskZmsgbmUge30gJiYgJGNvbW1pdHJvdygkY3VydmlldywkZmspIDwgJHJvd30geworCQkJaWYgeyRmayBuZSB7fSAmJiBbcm93b2Zjb21taXQgJGZrXSA8ICRyb3d9IHsKIAkJCSAgICBzZXQgeCBbaWRjb2wgJGlkbGlzdCAkcCAkeF0KIAkJCSAgICBzZXQgaWRsaXN0IFtsaW5zZXJ0ICRpZGxpc3QgJHggJHBdCiAJCQl9CkBAIC0zMzcyLDcgKzQ1MzgsNyBAQAogfQogCiBwcm9jIHJvd3JhbmdlcyB7aWR9IHsKLSAgICBnbG9iYWwgY29tbWl0cm93IGN1cnZpZXcgY2hpbGRyZW4gdXBhcnJvd2xlbiBkb3duYXJyb3dsZW4KKyAgICBnbG9iYWwgY3VydmlldyBjaGlsZHJlbiB1cGFycm93bGVuIGRvd25hcnJvd2xlbgogICAgIGdsb2JhbCByb3dpZGxpc3QKIAogICAgIHNldCBraWRzICRjaGlsZHJlbigkY3VydmlldywkaWQpCkBAIC0zMzgyLDEzICs0NTQ4LDEzIEBACiAgICAgc2V0IHJldCB7fQogICAgIGxhcHBlbmQga2lkcyAkaWQKICAgICBmb3JlYWNoIGNoaWxkICRraWRzIHsKLQlpZiB7IVtpbmZvIGV4aXN0cyBjb21taXRyb3coJGN1cnZpZXcsJGNoaWxkKV19IGJyZWFrCi0Jc2V0IHJvdyAkY29tbWl0cm93KCRjdXJ2aWV3LCRjaGlsZCkKKwlpZiB7IVtjb21taXRpbnZpZXcgJGNoaWxkICRjdXJ2aWV3XX0gYnJlYWsKKwlzZXQgcm93IFtyb3dvZmNvbW1pdCAkY2hpbGRdCiAJaWYgeyFbaW5mbyBleGlzdHMgcHJldl19IHsKIAkgICAgbGFwcGVuZCByZXQgW2V4cHIgeyRyb3cgKyAxfV0KIAl9IGVsc2UgewogCSAgICBpZiB7JHJvdyA8PSAkcHJldnJvd30gewotCQlwdXRzICJvb3BzIGNoaWxkcmVuIG91dCBvZiBvcmRlciBbc2hvcnRpZHMgJGlkXSAkcm93IDwgW3Nob3J0aWRzICRwcmV2XSAkcHJldnJvdyIKKwkJcHV0cyAib29wcyBjaGlsZHJlbiBvZiBbc2hvcnRpZHMgJGlkXSBvdXQgb2Ygb3JkZXIgW3Nob3J0aWRzICRjaGlsZF0gJHJvdyA8PSBbc2hvcnRpZHMgJHByZXZdICRwcmV2cm93IgogCSAgICB9CiAJICAgICMgc2VlIGlmIHRoZSBsaW5lIGV4dGVuZHMgdGhlIHdob2xlIHdheSBmcm9tIHByZXZyb3cgdG8gcm93CiAJICAgIGlmIHskcm93ID4gJHByZXZyb3cgKyAkdXBhcnJvd2xlbiArICRkb3duYXJyb3dsZW4gJiYKQEAgLTM0MjEsNyArNDU4Nyw3IEBACiAJaWYgeyRjaGlsZCBlcSAkaWR9IHsKIAkgICAgbGFwcGVuZCByZXQgJHJvdwogCX0KLQlzZXQgcHJldiAkaWQKKwlzZXQgcHJldiAkY2hpbGQKIAlzZXQgcHJldnJvdyAkcm93CiAgICAgfQogICAgIHJldHVybiAkcmV0CkBAIC0zNjY5LDIwICs0ODM1LDIzIEBACiB9CiAKIHByb2MgZHJhd2NtaXR0ZXh0IHtpZCByb3cgY29sfSB7Ci0gICAgZ2xvYmFsIGxpbmVzcGMgY2FudiBjYW52MiBjYW52MyBjYW52eTAgZmdjb2xvciBjdXJ2aWV3Ci0gICAgZ2xvYmFsIGNvbW1pdGxpc3RlZCBjb21taXRpbmZvIHJvd2lkbGlzdCBwYXJlbnRsaXN0CisgICAgZ2xvYmFsIGxpbmVzcGMgY2FudiBjYW52MiBjYW52MyBmZ2NvbG9yIGN1cnZpZXcKKyAgICBnbG9iYWwgY21pdGxpc3RlZCBjb21taXRpbmZvIHJvd2lkbGlzdCBwYXJlbnRsaXN0CiAgICAgZ2xvYmFsIHJvd3RleHR4IGlkcG9zIGlkdGFncyBpZGhlYWRzIGlkb3RoZXJyZWZzCiAgICAgZ2xvYmFsIGxpbmVodGFnIGxpbmVudGFnIGxpbmVkdGFnIHNlbGVjdGVkbGluZQotICAgIGdsb2JhbCBjYW52eG1heCBib2xkcm93cyBib2xkbmFtZXJvd3MgZmdjb2xvciBudWxsaWQgbnVsbGlkMgorICAgIGdsb2JhbCBjYW52eG1heCBib2xkcm93cyBib2xkbmFtZXJvd3MgZmdjb2xvcgorICAgIGdsb2JhbCBtYWluaGVhZGlkIG51bGxpZCBudWxsaWQyIGNpcmNsZWl0ZW0gY2lyY2xlY29sb3JzCiAKICAgICAjIGxpc3RlZCBpcyAwIGZvciBib3VuZGFyeSwgMSBmb3Igbm9ybWFsLCAyIGZvciBuZWdhdGl2ZSwgMyBmb3IgbGVmdCwgNCBmb3IgcmlnaHQKLSAgICBzZXQgbGlzdGVkIFtsaW5kZXggJGNvbW1pdGxpc3RlZCAkcm93XQorICAgIHNldCBsaXN0ZWQgJGNtaXRsaXN0ZWQoJGN1cnZpZXcsJGlkKQogICAgIGlmIHskaWQgZXEgJG51bGxpZH0gewogCXNldCBvZmlsbCByZWQKICAgICB9IGVsc2VpZiB7JGlkIGVxICRudWxsaWQyfSB7CiAJc2V0IG9maWxsIGdyZWVuCisgICAgfSBlbHNlaWYgeyRpZCBlcSAkbWFpbmhlYWRpZH0geworCXNldCBvZmlsbCB5ZWxsb3cKICAgICB9IGVsc2UgewotCXNldCBvZmlsbCBbZXhwciB7JGxpc3RlZCAhPSAwID8gJGxpc3RlZCA9PSAyID8gImdyYXkiIDogImJsdWUiIDogIndoaXRlIn1dCisJc2V0IG9maWxsIFtsaW5kZXggJGNpcmNsZWNvbG9ycyAkbGlzdGVkXQogICAgIH0KICAgICBzZXQgeCBbeGMgJHJvdyAkY29sXQogICAgIHNldCB5IFt5YyAkcm93XQpAQCAtMzcwNiw2ICs0ODc1LDcgQEAKIAkJICAgW2V4cHIgeyR4IC0gJG9yYWR9XSBbZXhwciB7JHkgKyAkb3JhZCAtIDF9XSBcCiAJCSAgIC1maWxsICRvZmlsbCAtb3V0bGluZSAkZmdjb2xvciAtd2lkdGggMSAtdGFncyBjaXJjbGVdCiAgICAgfQorICAgIHNldCBjaXJjbGVpdGVtKCRyb3cpICR0CiAgICAgJGNhbnYgcmFpc2UgJHQKICAgICAkY2FudiBiaW5kICR0IDwxPiB7c2VsY2FudmxpbmUge30gJXggJXl9CiAgICAgc2V0IHJteCBbbGxlbmd0aCBbbGluZGV4ICRyb3dpZGxpc3QgJHJvd11dCkBAIC0zNzMyLDcgKzQ5MDIsNyBAQAogICAgIHNldCBkYXRlIFtmb3JtYXRkYXRlICRkYXRlXQogICAgIHNldCBmb250IG1haW5mb250CiAgICAgc2V0IG5mb250IG1haW5mb250Ci0gICAgc2V0IGlzYm9sZCBbaXNoaWdobGlnaHRlZCAkcm93XQorICAgIHNldCBpc2JvbGQgW2lzaGlnaGxpZ2h0ZWQgJGlkXQogICAgIGlmIHskaXNib2xkID4gMH0gewogCWxhcHBlbmQgYm9sZHJvd3MgJHJvdwogCXNldCBmb250IG1haW5mb250Ym9sZApAQCAtMzc0OCw3ICs0OTE4LDcgQEAKIAkJCSAgICAtdGV4dCAkbmFtZSAtZm9udCAkbmZvbnQgLXRhZ3MgdGV4dF0KICAgICBzZXQgbGluZWR0YWcoJHJvdykgWyRjYW52MyBjcmVhdGUgdGV4dCAzICR5IC1hbmNob3IgdyAtZmlsbCAkZmdjb2xvciBcCiAJCQkgICAgLXRleHQgJGRhdGUgLWZvbnQgbWFpbmZvbnQgLXRhZ3MgdGV4dF0KLSAgICBpZiB7W2luZm8gZXhpc3RzIHNlbGVjdGVkbGluZV0gJiYgJHNlbGVjdGVkbGluZSA9PSAkcm93fSB7CisgICAgaWYgeyRzZWxlY3RlZGxpbmUgPT0gJHJvd30gewogCW1ha2Vfc2Vjc2VsICRyb3cKICAgICB9CiAgICAgc2V0IHhyIFtleHByIHskeHQgKyBbZm9udCBtZWFzdXJlICRmb250ICRoZWFkbGluZV19XQpAQCAtMzc2MSw3ICs0OTMxLDcgQEAKIHByb2MgZHJhd2NtaXRyb3cge3Jvd30gewogICAgIGdsb2JhbCBkaXNwbGF5b3JkZXIgcm93aWRsaXN0IG5yb3dzX2RyYXduCiAgICAgZ2xvYmFsIGlkZHJhd24gbWFya2luZ21hdGNoZXMKLSAgICBnbG9iYWwgY29tbWl0aW5mbyBwYXJlbnRsaXN0IG51bWNvbW1pdHMKKyAgICBnbG9iYWwgY29tbWl0aW5mbyBudW1jb21taXRzCiAgICAgZ2xvYmFsIGZpbGVoaWdobGlnaHQgZmhpZ2hsaWdodHMgZmluZHBhdHRlcm4gbmhpZ2hsaWdodHMKICAgICBnbG9iYWwgaGx2aWV3IHZoaWdobGlnaHRzCiAgICAgZ2xvYmFsIGhpZ2hsaWdodF9yZWxhdGVkIHJoaWdobGlnaHRzCkBAIC0zNzY5LDE2ICs0OTM5LDE2IEBACiAgICAgaWYgeyRyb3cgPj0gJG51bWNvbW1pdHN9IHJldHVybgogCiAgICAgc2V0IGlkIFtsaW5kZXggJGRpc3BsYXlvcmRlciAkcm93XQotICAgIGlmIHtbaW5mbyBleGlzdHMgaGx2aWV3XSAmJiAhW2luZm8gZXhpc3RzIHZoaWdobGlnaHRzKCRyb3cpXX0geworICAgIGlmIHtbaW5mbyBleGlzdHMgaGx2aWV3XSAmJiAhW2luZm8gZXhpc3RzIHZoaWdobGlnaHRzKCRpZCldfSB7CiAJYXNrdmhpZ2hsaWdodCAkcm93ICRpZAogICAgIH0KLSAgICBpZiB7W2luZm8gZXhpc3RzIGZpbGVoaWdobGlnaHRdICYmICFbaW5mbyBleGlzdHMgZmhpZ2hsaWdodHMoJHJvdyldfSB7CisgICAgaWYge1tpbmZvIGV4aXN0cyBmaWxlaGlnaGxpZ2h0XSAmJiAhW2luZm8gZXhpc3RzIGZoaWdobGlnaHRzKCRpZCldfSB7CiAJYXNrZmlsZWhpZ2hsaWdodCAkcm93ICRpZAogICAgIH0KLSAgICBpZiB7JGZpbmRwYXR0ZXJuIG5lIHt9ICYmICFbaW5mbyBleGlzdHMgbmhpZ2hsaWdodHMoJHJvdyldfSB7CisgICAgaWYgeyRmaW5kcGF0dGVybiBuZSB7fSAmJiAhW2luZm8gZXhpc3RzIG5oaWdobGlnaHRzKCRpZCldfSB7CiAJYXNrZmluZGhpZ2hsaWdodCAkcm93ICRpZAogICAgIH0KLSAgICBpZiB7JGhpZ2hsaWdodF9yZWxhdGVkIG5lIFttYyAiTm9uZSJdICYmICFbaW5mbyBleGlzdHMgcmhpZ2hsaWdodHMoJHJvdyldfSB7CisgICAgaWYgeyRoaWdobGlnaHRfcmVsYXRlZCBuZSBbbWMgIk5vbmUiXSAmJiAhW2luZm8gZXhpc3RzIHJoaWdobGlnaHRzKCRpZCldfSB7CiAJYXNrcmVsaGlnaGxpZ2h0ICRyb3cgJGlkCiAgICAgfQogICAgIGlmIHshW2luZm8gZXhpc3RzIGlkZHJhd24oJGlkKV19IHsKQEAgLTM4ODEsMzAgKzUwNTEsOTIgQEAKICAgICB9CiB9CiAKLXByb2MgZHJhd2ZyYWMge2YwIGYxfSB7Ci0gICAgZ2xvYmFsIGNhbnYgbGluZXNwYworcHJvYyB1bmRvbGF5b3V0IHtyb3d9IHsKKyAgICBnbG9iYWwgdXBhcnJvd2xlbiBtaW5nYXBsZW4gZG93bmFycm93bGVuCisgICAgZ2xvYmFsIHJvd2lkbGlzdCByb3dpc29wdCByb3dmaW5hbCBuZWVkX3JlZGlzcGxheQogCi0gICAgc2V0IHltYXggW2xpbmRleCBbJGNhbnYgY2dldCAtc2Nyb2xscmVnaW9uXSAzXQotICAgIGlmIHskeW1heCBlcSB7fSB8fCAkeW1heCA9PSAwfSByZXR1cm4KLSAgICBzZXQgeTAgW2V4cHIge2ludCgkZjAgKiAkeW1heCl9XQotICAgIHNldCByb3cgW2V4cHIge2ludCgoJHkwIC0gMykgLyAkbGluZXNwYykgLSAxfV0KLSAgICBzZXQgeTEgW2V4cHIge2ludCgkZjEgKiAkeW1heCl9XQotICAgIHNldCBlbmRyb3cgW2V4cHIge2ludCgoJHkxIC0gMykgLyAkbGluZXNwYykgKyAxfV0KLSAgICBkcmF3Y29tbWl0cyAkcm93ICRlbmRyb3cKKyAgICBzZXQgciBbZXhwciB7JHJvdyAtICgkdXBhcnJvd2xlbiArICRtaW5nYXBsZW4gKyAkZG93bmFycm93bGVuKX1dCisgICAgaWYgeyRyIDwgMH0geworCXNldCByIDAKKyAgICB9CisgICAgaWYge1tsbGVuZ3RoICRyb3dpZGxpc3RdID4gJHJ9IHsKKwlpbmNyIHIgLTEKKwlzZXQgcm93aWRsaXN0IFtscmFuZ2UgJHJvd2lkbGlzdCAwICRyXQorCXNldCByb3dmaW5hbCBbbHJhbmdlICRyb3dmaW5hbCAwICRyXQorCXNldCByb3dpc29wdCBbbHJhbmdlICRyb3dpc29wdCAwICRyXQorCXNldCBuZWVkX3JlZGlzcGxheSAxCisJcnVuIGRyYXd2aXNpYmxlCisgICAgfQogfQogCiBwcm9jIGRyYXd2aXNpYmxlIHt9IHsKLSAgICBnbG9iYWwgY2FudgotICAgIGV2YWwgZHJhd2ZyYWMgWyRjYW52IHl2aWV3XQorICAgIGdsb2JhbCBjYW52IGxpbmVzcGMgY3VydmlldyB2cm93bW9kIHNlbGVjdGVkbGluZSB0YXJnZXRyb3cgdGFyZ2V0aWQKKyAgICBnbG9iYWwgbmVlZF9yZWRpc3BsYXkgY3Njcm9sbCBudW1jb21taXRzCisKKyAgICBzZXQgZnMgWyRjYW52IHl2aWV3XQorICAgIHNldCB5bWF4IFtsaW5kZXggWyRjYW52IGNnZXQgLXNjcm9sbHJlZ2lvbl0gM10KKyAgICBpZiB7JHltYXggZXEge30gfHwgJHltYXggPT0gMCB8fCAkbnVtY29tbWl0cyA9PSAwfSByZXR1cm4KKyAgICBzZXQgZjAgW2xpbmRleCAkZnMgMF0KKyAgICBzZXQgZjEgW2xpbmRleCAkZnMgMV0KKyAgICBzZXQgeTAgW2V4cHIge2ludCgkZjAgKiAkeW1heCl9XQorICAgIHNldCB5MSBbZXhwciB7aW50KCRmMSAqICR5bWF4KX1dCisKKyAgICBpZiB7W2luZm8gZXhpc3RzIHRhcmdldGlkXX0geworCWlmIHtbY29tbWl0aW52aWV3ICR0YXJnZXRpZCAkY3Vydmlld119IHsKKwkgICAgc2V0IHIgW3Jvd29mY29tbWl0ICR0YXJnZXRpZF0KKwkgICAgaWYgeyRyICE9ICR0YXJnZXRyb3d9IHsKKwkJIyBGaXggdXAgdGhlIHNjcm9sbHJlZ2lvbiBhbmQgY2hhbmdlIHRoZSBzY3JvbGxpbmcgcG9zaXRpb24KKwkJIyBub3cgdGhhdCBvdXIgdGFyZ2V0IHJvdyBoYXMgbW92ZWQuCisJCXNldCBkaWZmIFtleHByIHsoJHIgLSAkdGFyZ2V0cm93KSAqICRsaW5lc3BjfV0KKwkJc2V0IHRhcmdldHJvdyAkcgorCQlzZXRjYW52c2Nyb2xsCisJCXNldCB5bWF4IFtsaW5kZXggWyRjYW52IGNnZXQgLXNjcm9sbHJlZ2lvbl0gM10KKwkJaW5jciB5MCAkZGlmZgorCQlpbmNyIHkxICRkaWZmCisJCXNldCBmMCBbZXhwciB7JHkwIC8gJHltYXh9XQorCQlzZXQgZjEgW2V4cHIgeyR5MSAvICR5bWF4fV0KKwkJYWxsY2FudnMgeXZpZXcgbW92ZXRvICRmMAorCQkkY3Njcm9sbCBzZXQgJGYwICRmMQorCQlzZXQgbmVlZF9yZWRpc3BsYXkgMQorCSAgICB9CisJfSBlbHNlIHsKKwkgICAgdW5zZXQgdGFyZ2V0aWQKKwl9CisgICAgfQorCisgICAgc2V0IHJvdyBbZXhwciB7aW50KCgkeTAgLSAzKSAvICRsaW5lc3BjKSAtIDF9XQorICAgIHNldCBlbmRyb3cgW2V4cHIge2ludCgoJHkxIC0gMykgLyAkbGluZXNwYykgKyAxfV0KKyAgICBpZiB7JGVuZHJvdyA+PSAkdnJvd21vZCgkY3Vydmlldyl9IHsKKwl1cGRhdGVfYXJjcm93cyAkY3VydmlldworICAgIH0KKyAgICBpZiB7JHNlbGVjdGVkbGluZSBuZSB7fSAmJgorCSRyb3cgPD0gJHNlbGVjdGVkbGluZSAmJiAkc2VsZWN0ZWRsaW5lIDw9ICRlbmRyb3d9IHsKKwlzZXQgdGFyZ2V0cm93ICRzZWxlY3RlZGxpbmUKKyAgICB9IGVsc2VpZiB7W2luZm8gZXhpc3RzIHRhcmdldGlkXX0geworCXNldCB0YXJnZXRyb3cgW2V4cHIge2ludCgoJHJvdyArICRlbmRyb3cpIC8gMil9XQorICAgIH0KKyAgICBpZiB7W2luZm8gZXhpc3RzIHRhcmdldHJvd119IHsKKwlpZiB7JHRhcmdldHJvdyA+PSAkbnVtY29tbWl0c30geworCSAgICBzZXQgdGFyZ2V0cm93IFtleHByIHskbnVtY29tbWl0cyAtIDF9XQorCX0KKwlzZXQgdGFyZ2V0aWQgW2NvbW1pdG9ucm93ICR0YXJnZXRyb3ddCisgICAgfQorICAgIGRyYXdjb21taXRzICRyb3cgJGVuZHJvdwogfQogCiBwcm9jIGNsZWFyX2Rpc3BsYXkge30gewogICAgIGdsb2JhbCBpZGRyYXduIGxpbmVzZWdzIG5lZWRfcmVkaXNwbGF5IG5yb3dzX2RyYXduCiAgICAgZ2xvYmFsIHZoaWdobGlnaHRzIGZoaWdobGlnaHRzIG5oaWdobGlnaHRzIHJoaWdobGlnaHRzCisgICAgZ2xvYmFsIGxpbmVodGFnIGxpbmVudGFnIGxpbmVkdGFnIGJvbGRyb3dzIGJvbGRuYW1lcm93cwogCiAgICAgYWxsY2FudnMgZGVsZXRlIGFsbAogICAgIGNhdGNoIHt1bnNldCBpZGRyYXdufQogICAgIGNhdGNoIHt1bnNldCBsaW5lc2Vnc30KKyAgICBjYXRjaCB7dW5zZXQgbGluZWh0YWd9CisgICAgY2F0Y2gge3Vuc2V0IGxpbmVudGFnfQorICAgIGNhdGNoIHt1bnNldCBsaW5lZHRhZ30KKyAgICBzZXQgYm9sZHJvd3Mge30KKyAgICBzZXQgYm9sZG5hbWVyb3dzIHt9CiAgICAgY2F0Y2gge3Vuc2V0IHZoaWdobGlnaHRzfQogICAgIGNhdGNoIHt1bnNldCBmaGlnaGxpZ2h0c30KICAgICBjYXRjaCB7dW5zZXQgbmhpZ2hsaWdodHN9CkBAIC0zOTUwLDcgKzUxODIsNyBAQAogCiBwcm9jIGFzc2lnbmNvbG9yIHtpZH0gewogICAgIGdsb2JhbCBjb2xvcm1hcCBjb2xvcnMgbmV4dGNvbG9yCi0gICAgZ2xvYmFsIGNvbW1pdHJvdyBwYXJlbnRsaXN0IGNoaWxkcmVuIGNoaWxkcmVuIGN1cnZpZXcKKyAgICBnbG9iYWwgcGFyZW50cyBjaGlsZHJlbiBjaGlsZHJlbiBjdXJ2aWV3CiAKICAgICBpZiB7W2luZm8gZXhpc3RzIGNvbG9ybWFwKCRpZCldfSByZXR1cm4KICAgICBzZXQgbmNvbG9ycyBbbGxlbmd0aCAkY29sb3JzXQpAQCAtMzk2Miw3ICs1MTk0LDcgQEAKICAgICBpZiB7W2xsZW5ndGggJGtpZHNdID09IDF9IHsKIAlzZXQgY2hpbGQgW2xpbmRleCAka2lkcyAwXQogCWlmIHtbaW5mbyBleGlzdHMgY29sb3JtYXAoJGNoaWxkKV0KLQkgICAgJiYgW2xsZW5ndGggW2xpbmRleCAkcGFyZW50bGlzdCAkY29tbWl0cm93KCRjdXJ2aWV3LCRjaGlsZCldXSA9PSAxfSB7CisJICAgICYmIFtsbGVuZ3RoICRwYXJlbnRzKCRjdXJ2aWV3LCRjaGlsZCldID09IDF9IHsKIAkgICAgc2V0IGNvbG9ybWFwKCRpZCkgJGNvbG9ybWFwKCRjaGlsZCkKIAkgICAgcmV0dXJuCiAJfQpAQCAtMzk5MCw3ICs1MjIyLDcgQEAKIAkJJiYgW2xzZWFyY2ggLWV4YWN0ICRiYWRjb2xvcnMgJGNvbG9ybWFwKCRjaGlsZCldIDwgMH0gewogCQlsYXBwZW5kIGJhZGNvbG9ycyAkY29sb3JtYXAoJGNoaWxkKQogCSAgICB9Ci0JICAgIGZvcmVhY2ggcCBbbGluZGV4ICRwYXJlbnRsaXN0ICRjb21taXRyb3coJGN1cnZpZXcsJGNoaWxkKV0geworCSAgICBmb3JlYWNoIHAgJHBhcmVudHMoJGN1cnZpZXcsJGNoaWxkKSB7CiAJCWlmIHtbaW5mbyBleGlzdHMgY29sb3JtYXAoJHApXQogCQkgICAgJiYgW2xzZWFyY2ggLWV4YWN0ICRiYWRjb2xvcnMgJGNvbG9ybWFwKCRwKV0gPCAwfSB7CiAJCSAgICBsYXBwZW5kIGJhZGNvbG9ycyAkY29sb3JtYXAoJHApCkBAIC00MDIzLDcgKzUyNTUsNyBAQAogcHJvYyBkcmF3dGFncyB7aWQgeCB4dCB5MX0gewogICAgIGdsb2JhbCBpZHRhZ3MgaWRoZWFkcyBpZG90aGVycmVmcyBtYWluaGVhZAogICAgIGdsb2JhbCBsaW5lc3BjIGx0aGlja25lc3MKLSAgICBnbG9iYWwgY2FudiBjb21taXRyb3cgcm93dGV4dHggY3VydmlldyBmZ2NvbG9yIGJnY29sb3IKKyAgICBnbG9iYWwgY2FudiByb3d0ZXh0eCBjdXJ2aWV3IGZnY29sb3IgYmdjb2xvcgogCiAgICAgc2V0IG1hcmtzIHt9CiAgICAgc2V0IG50YWdzIDAKQEAgLTQwNzMsNyArNTMwNSw3IEBACiAJCSAgICAgICAkeHIgJHl0ICR4ciAkeWIgJHhsICR5YiAkeCBbZXhwciB7JHliIC0gJGRlbHRhfV0gXAogCQkgICAgICAgLXdpZHRoIDEgLW91dGxpbmUgYmxhY2sgLWZpbGwgeWVsbG93IC10YWdzIHRhZy4kaWRdCiAJICAgICRjYW52IGJpbmQgJHQgPDE+IFtsaXN0IHNob3d0YWcgJHRhZyAxXQotCSAgICBzZXQgcm93dGV4dHgoJGNvbW1pdHJvdygkY3VydmlldywkaWQpKSBbZXhwciB7JHhyICsgJGxpbmVzcGN9XQorCSAgICBzZXQgcm93dGV4dHgoW3Jvd29mY29tbWl0ICRpZF0pIFtleHByIHskeHIgKyAkbGluZXNwY31dCiAJfSBlbHNlIHsKIAkgICAgIyBkcmF3IGEgaGVhZCBvciBvdGhlciByZWYKIAkgICAgaWYge1tpbmNyIG5oZWFkcyAtMV0gPj0gMH0gewpAQCAtNDEyNywxMDMgKzUzNTksNiBAQAogCS10YWdzIHRleHQgLWZpbGwgJGZnY29sb3IKIH0KIAotIyBJbnNlcnQgYSBuZXcgY29tbWl0IGFzIHRoZSBjaGlsZCBvZiB0aGUgY29tbWl0IG9uIHJvdyAkcm93LgotIyBUaGUgbmV3IGNvbW1pdCB3aWxsIGJlIGRpc3BsYXllZCBvbiByb3cgJHJvdyBhbmQgdGhlIGNvbW1pdHMKLSMgb24gdGhhdCByb3cgYW5kIGJlbG93IHdpbGwgbW92ZSBkb3duIG9uZSByb3cuCi1wcm9jIGluc2VydHJvdyB7cm93IG5ld2NtaXR9IHsKLSAgICBnbG9iYWwgZGlzcGxheW9yZGVyIHBhcmVudGxpc3QgY29tbWl0bGlzdGVkIGNoaWxkcmVuCi0gICAgZ2xvYmFsIGNvbW1pdHJvdyBjdXJ2aWV3IHJvd2lkbGlzdCByb3dpc29wdCByb3dmaW5hbCBudW1jb21taXRzCi0gICAgZ2xvYmFsIG51bWNvbW1pdHMKLSAgICBnbG9iYWwgc2VsZWN0ZWRsaW5lIGNvbW1pdGlkeCBvcmRlcnRvawotCi0gICAgaWYgeyRyb3cgPj0gJG51bWNvbW1pdHN9IHsKLQlwdXRzICJvb3BzLCBpbnNlcnRpbmcgbmV3IHJvdyAkcm93IGJ1dCBvbmx5IGhhdmUgJG51bWNvbW1pdHMgcm93cyIKLQlyZXR1cm4KLSAgICB9Ci0gICAgc2V0IHAgW2xpbmRleCAkZGlzcGxheW9yZGVyICRyb3ddCi0gICAgc2V0IGRpc3BsYXlvcmRlciBbbGluc2VydCAkZGlzcGxheW9yZGVyICRyb3cgJG5ld2NtaXRdCi0gICAgc2V0IHBhcmVudGxpc3QgW2xpbnNlcnQgJHBhcmVudGxpc3QgJHJvdyAkcF0KLSAgICBzZXQga2lkcyAkY2hpbGRyZW4oJGN1cnZpZXcsJHApCi0gICAgbGFwcGVuZCBraWRzICRuZXdjbWl0Ci0gICAgc2V0IGNoaWxkcmVuKCRjdXJ2aWV3LCRwKSAka2lkcwotICAgIHNldCBjaGlsZHJlbigkY3VydmlldywkbmV3Y21pdCkge30KLSAgICBzZXQgY29tbWl0bGlzdGVkIFtsaW5zZXJ0ICRjb21taXRsaXN0ZWQgJHJvdyAxXQotICAgIHNldCBsIFtsbGVuZ3RoICRkaXNwbGF5b3JkZXJdCi0gICAgZm9yIHtzZXQgciAkcm93fSB7JHIgPCAkbH0ge2luY3Igcn0gewotCXNldCBpZCBbbGluZGV4ICRkaXNwbGF5b3JkZXIgJHJdCi0Jc2V0IGNvbW1pdHJvdygkY3VydmlldywkaWQpICRyCi0gICAgfQotICAgIGluY3IgY29tbWl0aWR4KCRjdXJ2aWV3KQotICAgIHNldCBvcmRlcnRvaygkY3VydmlldywkbmV3Y21pdCkgJG9yZGVydG9rKCRjdXJ2aWV3LCRwKQotCi0gICAgaWYgeyRyb3cgPCBbbGxlbmd0aCAkcm93aWRsaXN0XX0gewotCXNldCBpZGxpc3QgW2xpbmRleCAkcm93aWRsaXN0ICRyb3ddCi0JaWYgeyRpZGxpc3QgbmUge319IHsKLQkgICAgaWYge1tsbGVuZ3RoICRraWRzXSA9PSAxfSB7Ci0JCXNldCBjb2wgW2xzZWFyY2ggLWV4YWN0ICRpZGxpc3QgJHBdCi0JCWxzZXQgaWRsaXN0ICRjb2wgJG5ld2NtaXQKLQkgICAgfSBlbHNlIHsKLQkJc2V0IGNvbCBbbGxlbmd0aCAkaWRsaXN0XQotCQlsYXBwZW5kIGlkbGlzdCAkbmV3Y21pdAotCSAgICB9Ci0JfQotCXNldCByb3dpZGxpc3QgW2xpbnNlcnQgJHJvd2lkbGlzdCAkcm93ICRpZGxpc3RdCi0Jc2V0IHJvd2lzb3B0IFtsaW5zZXJ0ICRyb3dpc29wdCAkcm93IDBdCi0Jc2V0IHJvd2ZpbmFsIFtsaW5zZXJ0ICRyb3dmaW5hbCAkcm93IFtsaW5kZXggJHJvd2ZpbmFsICRyb3ddXQotICAgIH0KLQotICAgIGluY3IgbnVtY29tbWl0cwotCi0gICAgaWYge1tpbmZvIGV4aXN0cyBzZWxlY3RlZGxpbmVdICYmICRzZWxlY3RlZGxpbmUgPj0gJHJvd30gewotCWluY3Igc2VsZWN0ZWRsaW5lCi0gICAgfQotICAgIHJlZGlzcGxheQotfQotCi0jIFJlbW92ZSBhIGNvbW1pdCB0aGF0IHdhcyBpbnNlcnRlZCB3aXRoIGluc2VydHJvdyBvbiByb3cgJHJvdy4KLXByb2MgcmVtb3Zlcm93IHtyb3d9IHsKLSAgICBnbG9iYWwgZGlzcGxheW9yZGVyIHBhcmVudGxpc3QgY29tbWl0bGlzdGVkIGNoaWxkcmVuCi0gICAgZ2xvYmFsIGNvbW1pdHJvdyBjdXJ2aWV3IHJvd2lkbGlzdCByb3dpc29wdCByb3dmaW5hbCBudW1jb21taXRzCi0gICAgZ2xvYmFsIG51bWNvbW1pdHMKLSAgICBnbG9iYWwgbGluZXNlZ2VuZHMgc2VsZWN0ZWRsaW5lIGNvbW1pdGlkeAotCi0gICAgaWYgeyRyb3cgPj0gJG51bWNvbW1pdHN9IHsKLQlwdXRzICJvb3BzLCByZW1vdmluZyByb3cgJHJvdyBidXQgb25seSBoYXZlICRudW1jb21taXRzIHJvd3MiCi0JcmV0dXJuCi0gICAgfQotICAgIHNldCBycDEgW2V4cHIgeyRyb3cgKyAxfV0KLSAgICBzZXQgaWQgW2xpbmRleCAkZGlzcGxheW9yZGVyICRyb3ddCi0gICAgc2V0IHAgW2xpbmRleCAkcGFyZW50bGlzdCAkcm93XQotICAgIHNldCBkaXNwbGF5b3JkZXIgW2xyZXBsYWNlICRkaXNwbGF5b3JkZXIgJHJvdyAkcm93XQotICAgIHNldCBwYXJlbnRsaXN0IFtscmVwbGFjZSAkcGFyZW50bGlzdCAkcm93ICRyb3ddCi0gICAgc2V0IGNvbW1pdGxpc3RlZCBbbHJlcGxhY2UgJGNvbW1pdGxpc3RlZCAkcm93ICRyb3ddCi0gICAgc2V0IGtpZHMgJGNoaWxkcmVuKCRjdXJ2aWV3LCRwKQotICAgIHNldCBpIFtsc2VhcmNoIC1leGFjdCAka2lkcyAkaWRdCi0gICAgaWYgeyRpID49IDB9IHsKLQlzZXQga2lkcyBbbHJlcGxhY2UgJGtpZHMgJGkgJGldCi0Jc2V0IGNoaWxkcmVuKCRjdXJ2aWV3LCRwKSAka2lkcwotICAgIH0KLSAgICBzZXQgbCBbbGxlbmd0aCAkZGlzcGxheW9yZGVyXQotICAgIGZvciB7c2V0IHIgJHJvd30geyRyIDwgJGx9IHtpbmNyIHJ9IHsKLQlzZXQgaWQgW2xpbmRleCAkZGlzcGxheW9yZGVyICRyXQotCXNldCBjb21taXRyb3coJGN1cnZpZXcsJGlkKSAkcgotICAgIH0KLSAgICBpbmNyIGNvbW1pdGlkeCgkY3VydmlldykgLTEKLQotICAgIGlmIHskcm93IDwgW2xsZW5ndGggJHJvd2lkbGlzdF19IHsKLQlzZXQgcm93aWRsaXN0IFtscmVwbGFjZSAkcm93aWRsaXN0ICRyb3cgJHJvd10KLQlzZXQgcm93aXNvcHQgW2xyZXBsYWNlICRyb3dpc29wdCAkcm93ICRyb3ddCi0Jc2V0IHJvd2ZpbmFsIFtscmVwbGFjZSAkcm93ZmluYWwgJHJvdyAkcm93XQotICAgIH0KLQotICAgIGluY3IgbnVtY29tbWl0cyAtMQotCi0gICAgaWYge1tpbmZvIGV4aXN0cyBzZWxlY3RlZGxpbmVdICYmICRzZWxlY3RlZGxpbmUgPiAkcm93fSB7Ci0JaW5jciBzZWxlY3RlZGxpbmUgLTEKLSAgICB9Ci0gICAgcmVkaXNwbGF5Ci19Ci0KICMgRG9uJ3QgY2hhbmdlIHRoZSB0ZXh0IHBhbmUgY3Vyc29yIGlmIGl0IGlzIGN1cnJlbnRseSB0aGUgaGFuZCBjdXJzb3IsCiAjIHNob3dpbmcgdGhhdCB3ZSBhcmUgb3ZlciBhIHNoYTEgSUQgbGluay4KIHByb2Mgc2V0dGV4dGN1cnNvciB7Y30gewpAQCAtNDI5Niw3ICs1NDMxLDcgQEAKICAgICB9CiAgICAgZm9jdXMgLgogICAgIGlmIHskZmluZHN0cmluZyBlcSB7fSB8fCAkbnVtY29tbWl0cyA9PSAwfSByZXR1cm4KLSAgICBpZiB7IVtpbmZvIGV4aXN0cyBzZWxlY3RlZGxpbmVdfSB7CisgICAgaWYgeyRzZWxlY3RlZGxpbmUgZXEge319IHsKIAlzZXQgZmluZHN0YXJ0bGluZSBbbGluZGV4IFt2aXNpYmxlcm93c10gW2V4cHIgeyRkaXJuIDwgMH1dXQogICAgIH0gZWxzZSB7CiAJc2V0IGZpbmRzdGFydGxpbmUgJHNlbGVjdGVkbGluZQpAQCAtNDMyNiw5ICs1NDYxLDkgQEAKIAogcHJvYyBmaW5kbW9yZSB7fSB7CiAgICAgZ2xvYmFsIGNvbW1pdGRhdGEgY29tbWl0aW5mbyBudW1jb21taXRzIGZpbmRwYXR0ZXJuIGZpbmRsb2MKLSAgICBnbG9iYWwgZmluZHN0YXJ0bGluZSBmaW5kY3VybGluZSBkaXNwbGF5b3JkZXIKKyAgICBnbG9iYWwgZmluZHN0YXJ0bGluZSBmaW5kY3VybGluZSBmaW5kYWxsb3d3cmFwCiAgICAgZ2xvYmFsIGZpbmRfZGlybiBnZHR0eXBlIGZoaWdobGlnaHRzIGZwcm9nY29vcmQKLSAgICBnbG9iYWwgZmluZGFsbG93d3JhcAorICAgIGdsb2JhbCBjdXJ2aWV3IHZhcmNvcmRlciB2cm93bnVtIHZhcmNjb21taXRzIHZyb3dtb2QKIAogICAgIGlmIHshW2luZm8gZXhpc3RzIGZpbmRfZGlybl19IHsKIAlyZXR1cm4gMApAQCAtNDM2NCwxNCArNTQ5OSwzMSBAQAogCXNldCBuIDUwMAogCXNldCBtb3JldG9kbyAxCiAgICAgfQorICAgIGlmIHskbCArICgkZmluZF9kaXJuID4gMD8gJG46IDEpID4gJHZyb3dtb2QoJGN1cnZpZXcpfSB7CisJdXBkYXRlX2FyY3Jvd3MgJGN1cnZpZXcKKyAgICB9CiAgICAgc2V0IGZvdW5kIDAKICAgICBzZXQgZG9tb3JlIDEKKyAgICBzZXQgYWkgW2JzZWFyY2ggJHZyb3dudW0oJGN1cnZpZXcpICRsXQorICAgIHNldCBhIFtsaW5kZXggJHZhcmNvcmRlcigkY3VydmlldykgJGFpXQorICAgIHNldCBhcm93IFtsaW5kZXggJHZyb3dudW0oJGN1cnZpZXcpICRhaV0KKyAgICBzZXQgaWRzIFtsaW5kZXggJHZhcmNjb21taXRzKCRjdXJ2aWV3LCRhKV0KKyAgICBzZXQgYXJvd2VuZCBbZXhwciB7JGFyb3cgKyBbbGxlbmd0aCAkaWRzXX1dCiAgICAgaWYgeyRnZHR0eXBlIGVxIFttYyAiY29udGFpbmluZzoiXX0gewogCWZvciB7fSB7JG4gPiAwfSB7aW5jciBuIC0xOyBpbmNyIGwgJGZpbmRfZGlybn0gewotCSAgICBzZXQgaWQgW2xpbmRleCAkZGlzcGxheW9yZGVyICRsXQorCSAgICBpZiB7JGwgPCAkYXJvdyB8fCAkbCA+PSAkYXJvd2VuZH0geworCQlpbmNyIGFpICRmaW5kX2Rpcm4KKwkJc2V0IGEgW2xpbmRleCAkdmFyY29yZGVyKCRjdXJ2aWV3KSAkYWldCisJCXNldCBhcm93IFtsaW5kZXggJHZyb3dudW0oJGN1cnZpZXcpICRhaV0KKwkJc2V0IGlkcyBbbGluZGV4ICR2YXJjY29tbWl0cygkY3VydmlldywkYSldCisJCXNldCBhcm93ZW5kIFtleHByIHskYXJvdyArIFtsbGVuZ3RoICRpZHNdfV0KKwkgICAgfQorCSAgICBzZXQgaWQgW2xpbmRleCAkaWRzIFtleHByIHskbCAtICRhcm93fV1dCiAJICAgICMgc2hvdWxkbid0IGhhcHBlbiB1bmxlc3MgZ2l0IGxvZyBkb2Vzbid0IGdpdmUgYWxsIHRoZSBjb21taXRzLi4uCi0JICAgIGlmIHshW2luZm8gZXhpc3RzIGNvbW1pdGRhdGEoJGlkKV19IGNvbnRpbnVlCi0JICAgIGlmIHshW2RvZXNtYXRjaCAkY29tbWl0ZGF0YSgkaWQpXX0gY29udGludWUKKwkgICAgaWYgeyFbaW5mbyBleGlzdHMgY29tbWl0ZGF0YSgkaWQpXSB8fAorCQkhW2RvZXNtYXRjaCAkY29tbWl0ZGF0YSgkaWQpXX0geworCQljb250aW51ZQorCSAgICB9CiAJICAgIGlmIHshW2luZm8gZXhpc3RzIGNvbW1pdGluZm8oJGlkKV19IHsKIAkJZ2V0Y29tbWl0ICRpZAogCSAgICB9CkBAIC00Mzg3LDE2ICs1NTM5LDI3IEBACiAJfQogICAgIH0gZWxzZSB7CiAJZm9yIHt9IHskbiA+IDB9IHtpbmNyIG4gLTE7IGluY3IgbCAkZmluZF9kaXJufSB7Ci0JICAgIHNldCBpZCBbbGluZGV4ICRkaXNwbGF5b3JkZXIgJGxdCi0JICAgIGlmIHshW2luZm8gZXhpc3RzIGZoaWdobGlnaHRzKCRsKV19IHsKKwkgICAgaWYgeyRsIDwgJGFyb3cgfHwgJGwgPj0gJGFyb3dlbmR9IHsKKwkJaW5jciBhaSAkZmluZF9kaXJuCisJCXNldCBhIFtsaW5kZXggJHZhcmNvcmRlcigkY3VydmlldykgJGFpXQorCQlzZXQgYXJvdyBbbGluZGV4ICR2cm93bnVtKCRjdXJ2aWV3KSAkYWldCisJCXNldCBpZHMgW2xpbmRleCAkdmFyY2NvbW1pdHMoJGN1cnZpZXcsJGEpXQorCQlzZXQgYXJvd2VuZCBbZXhwciB7JGFyb3cgKyBbbGxlbmd0aCAkaWRzXX1dCisJICAgIH0KKwkgICAgc2V0IGlkIFtsaW5kZXggJGlkcyBbZXhwciB7JGwgLSAkYXJvd31dXQorCSAgICBpZiB7IVtpbmZvIGV4aXN0cyBmaGlnaGxpZ2h0cygkaWQpXX0geworCQkjIHRoaXMgc2V0cyBmaGlnaGxpZ2h0cygkaWQpIHRvIC0xCiAJCWFza2ZpbGVoaWdobGlnaHQgJGwgJGlkCisJICAgIH0KKwkgICAgaWYgeyRmaGlnaGxpZ2h0cygkaWQpID4gMH0geworCQlzZXQgZm91bmQgJGRvbW9yZQorCQlicmVhaworCSAgICB9CisJICAgIGlmIHskZmhpZ2hsaWdodHMoJGlkKSA8IDB9IHsKIAkJaWYgeyRkb21vcmV9IHsKIAkJICAgIHNldCBkb21vcmUgMAogCQkgICAgc2V0IGZpbmRjdXJsaW5lIFtleHByIHskbCAtICRmaW5kX2Rpcm59XQogCQl9Ci0JICAgIH0gZWxzZWlmIHskZmhpZ2hsaWdodHMoJGwpfSB7Ci0JCXNldCBmb3VuZCAkZG9tb3JlCi0JCWJyZWFrCiAJICAgIH0KIAl9CiAgICAgfQpAQCAtNDQ2NCw3ICs1NjI3LDcgQEAKIAkJICAgW2V4cHIgeyR4MCskeGxlbisyfV0gJHkxIFwKIAkJICAgLW91dGxpbmUge30gLXRhZ3MgW2xpc3QgbWF0Y2gkbCBtYXRjaGVzXSAtZmlsbCB5ZWxsb3ddCiAJJGNhbnYgbG93ZXIgJHQKLQlpZiB7W2luZm8gZXhpc3RzIHNlbGVjdGVkbGluZV0gJiYgJHJvdyA9PSAkc2VsZWN0ZWRsaW5lfSB7CisJaWYgeyRyb3cgPT0gJHNlbGVjdGVkbGluZX0gewogCSAgICAkY2FudiByYWlzZSAkdCBzZWNzZWwKIAl9CiAgICAgfQpAQCAtNDQ5MCw3ICs1NjUzLDkgQEAKIAlzZXQgbCAwCiAgICAgfQogICAgIGlmIHskdyBlcSAkY2Fudn0gewotCWlmIHshW2luZm8gZXhpc3RzIHJvd3RleHR4KCRsKV0gfHwgJHggPCAkcm93dGV4dHgoJGwpfSByZXR1cm4KKwlzZXQgeG1heCBbbGluZGV4IFskY2FudiBjZ2V0IC1zY3JvbGxyZWdpb25dIDJdCisJc2V0IHhsZWZ0IFtleHByIHtbbGluZGV4IFskY2FudiB4dmlld10gMF0gKiAkeG1heH1dCisJaWYgeyFbaW5mbyBleGlzdHMgcm93dGV4dHgoJGwpXSB8fCAkeGxlZnQgKyAkeCA8ICRyb3d0ZXh0eCgkbCl9IHJldHVybgogICAgIH0KICAgICB1bm1hcmttYXRjaGVzCiAgICAgc2VsZWN0bGluZSAkbCAxCkBAIC00NTExLDcgKzU2NzYsNyBAQAogIyBhcHBlbmQgc29tZSB0ZXh0IHRvIHRoZSBjdGV4dCB3aWRnZXQsIGFuZCBtYWtlIGFueSBTSEExIElECiAjIHRoYXQgd2Uga25vdyBhYm91dCBiZSBhIGNsaWNrYWJsZSBsaW5rLgogcHJvYyBhcHBlbmR3aXRobGlua3Mge3RleHQgdGFnc30gewotICAgIGdsb2JhbCBjdGV4dCBjb21taXRyb3cgbGlua251bSBjdXJ2aWV3IHBlbmRpbmdsaW5rcworICAgIGdsb2JhbCBjdGV4dCBsaW5rbnVtIGN1cnZpZXcgcGVuZGluZ2xpbmtzCiAKICAgICBzZXQgc3RhcnQgWyRjdGV4dCBpbmRleCAiZW5kIC0gMWMiXQogICAgICRjdGV4dCBpbnNlcnQgZW5kICR0ZXh0ICR0YWdzCkBAIC00NTI5LDExICs1Njk0LDExIEBACiB9CiAKIHByb2Mgc2V0bGluayB7aWQgbGt9IHsKLSAgICBnbG9iYWwgY3VydmlldyBjb21taXRyb3cgY3RleHQgcGVuZGluZ2xpbmtzIGNvbW1pdGludGVyZXN0CisgICAgZ2xvYmFsIGN1cnZpZXcgY3RleHQgcGVuZGluZ2xpbmtzIGNvbW1pdGludGVyZXN0CiAKLSAgICBpZiB7W2luZm8gZXhpc3RzIGNvbW1pdHJvdygkY3VydmlldywkaWQpXX0geworICAgIGlmIHtbY29tbWl0aW52aWV3ICRpZCAkY3Vydmlld119IHsKIAkkY3RleHQgdGFnIGNvbmYgJGxrIC1mb3JlZ3JvdW5kIGJsdWUgLXVuZGVybGluZSAxCi0JJGN0ZXh0IHRhZyBiaW5kICRsayA8MT4gW2xpc3Qgc2VsZWN0bGluZSAkY29tbWl0cm93KCRjdXJ2aWV3LCRpZCkgMV0KKwkkY3RleHQgdGFnIGJpbmQgJGxrIDwxPiBbbGlzdCBzZWxlY3RsaW5lIFtyb3dvZmNvbW1pdCAkaWRdIDFdCiAJJGN0ZXh0IHRhZyBiaW5kICRsayA8RW50ZXI+IHtsaW5rY3Vyc29yICVXIDF9CiAJJGN0ZXh0IHRhZyBiaW5kICRsayA8TGVhdmU+IHtsaW5rY3Vyc29yICVXIC0xfQogICAgIH0gZWxzZSB7CkBAIC00NTg0LDcgKzU3NDksNyBAQAogIyBhZGQgYSBsaXN0IG9mIHRhZyBvciBicmFuY2ggbmFtZXMgYXQgcG9zaXRpb24gcG9zCiAjIHJldHVybnMgdGhlIG51bWJlciBvZiBuYW1lcyBpbnNlcnRlZAogcHJvYyBhcHBlbmRyZWZzIHtwb3MgaWRzIHZhcn0gewotICAgIGdsb2JhbCBjdGV4dCBjb21taXRyb3cgbGlua251bSBjdXJ2aWV3ICR2YXIgbWF4cmVmcworICAgIGdsb2JhbCBjdGV4dCBsaW5rbnVtIGN1cnZpZXcgJHZhciBtYXhyZWZzCiAKICAgICBpZiB7W2NhdGNoIHskY3RleHQgaW5kZXggJHBvc31dfSB7CiAJcmV0dXJuIDAKQEAgLTQ2MjEsNyArNTc4Niw3IEBACiBwcm9jIGRpc3BuZWFydGFncyB7ZGVsYXl9IHsKICAgICBnbG9iYWwgc2VsZWN0ZWRsaW5lIGN1cnJlbnRpZCBzaG93bmVhcnRhZ3MgdGFncGhhc2UKIAotICAgIGlmIHshW2luZm8gZXhpc3RzIHNlbGVjdGVkbGluZV0gfHwgISRzaG93bmVhcnRhZ3N9IHJldHVybgorICAgIGlmIHskc2VsZWN0ZWRsaW5lIGVxIHt9IHx8ICEkc2hvd25lYXJ0YWdzfSByZXR1cm4KICAgICBhZnRlciBjYW5jZWwgZGlzcG5leHR0YWcKICAgICBpZiB7JGRlbGF5fSB7CiAJYWZ0ZXIgMjAwIGRpc3BuZXh0dGFnCkBAIC00NjM1LDcgKzU4MDAsNyBAQAogcHJvYyBkaXNwbmV4dHRhZyB7fSB7CiAgICAgZ2xvYmFsIHNlbGVjdGVkbGluZSBjdXJyZW50aWQgc2hvd25lYXJ0YWdzIHRhZ3BoYXNlIGN0ZXh0CiAKLSAgICBpZiB7IVtpbmZvIGV4aXN0cyBzZWxlY3RlZGxpbmVdIHx8ICEkc2hvd25lYXJ0YWdzfSByZXR1cm4KKyAgICBpZiB7JHNlbGVjdGVkbGluZSBlcSB7fSB8fCAhJHNob3duZWFydGFnc30gcmV0dXJuCiAgICAgc3dpdGNoIC0tICR0YWdwaGFzZSB7CiAJMCB7CiAJICAgIHNldCBkdGFncyBbZGVzY3RhZ3MgJGN1cnJlbnRpZF0KQEAgLTQ2ODcsMTIgKzU4NTIsMTIgQEAKIAogcHJvYyBzZWxlY3RsaW5lIHtsIGlzbmV3fSB7CiAgICAgZ2xvYmFsIGNhbnYgY3RleHQgY29tbWl0aW5mbyBzZWxlY3RlZGxpbmUKLSAgICBnbG9iYWwgZGlzcGxheW9yZGVyCi0gICAgZ2xvYmFsIGNhbnZ5MCBsaW5lc3BjIHBhcmVudGxpc3QgY2hpbGRyZW4gY3VydmlldworICAgIGdsb2JhbCBjYW52eTAgbGluZXNwYyBwYXJlbnRzIGNoaWxkcmVuIGN1cnZpZXcKICAgICBnbG9iYWwgY3VycmVudGlkIHNoYTFlbnRyeQogICAgIGdsb2JhbCBjb21tZW50ZW5kIGlkdGFncyBsaW5rbnVtCiAgICAgZ2xvYmFsIG1lcmdlbWF4IG51bWNvbW1pdHMgcGVuZGluZ19zZWxlY3QKICAgICBnbG9iYWwgY21pdG1vZGUgc2hvd25lYXJ0YWdzIGFsbGNvbW1pdHMKKyAgICBnbG9iYWwgdGFyZ2V0cm93IHRhcmdldGlkIGxhc3RzY3JvbGxyb3dzCiAgICAgZ2xvYmFsIGF1dG9zZWxlY3QKIAogICAgIGNhdGNoIHt1bnNldCBwZW5kaW5nX3NlbGVjdH0KQEAgLTQ3MDEsNiArNTg2NiwxNSBAQAogICAgIHVuc2VsX3JlZmxpc3QKICAgICBzdG9wZmluZGluZwogICAgIGlmIHskbCA8IDAgfHwgJGwgPj0gJG51bWNvbW1pdHN9IHJldHVybgorICAgIHNldCBpZCBbY29tbWl0b25yb3cgJGxdCisgICAgc2V0IHRhcmdldGlkICRpZAorICAgIHNldCB0YXJnZXRyb3cgJGwKKyAgICBzZXQgc2VsZWN0ZWRsaW5lICRsCisgICAgc2V0IGN1cnJlbnRpZCAkaWQKKyAgICBpZiB7JGxhc3RzY3JvbGxyb3dzIDwgJG51bWNvbW1pdHN9IHsKKwlzZXRjYW52c2Nyb2xsCisgICAgfQorCiAgICAgc2V0IHkgW2V4cHIgeyRjYW52eTAgKyAkbCAqICRsaW5lc3BjfV0KICAgICBzZXQgeW1heCBbbGluZGV4IFskY2FudiBjZ2V0IC1zY3JvbGxyZWdpb25dIDNdCiAgICAgc2V0IHl0b3AgW2V4cHIgeyR5IC0gJGxpbmVzcGMgLSAxfV0KQEAgLTQ3NDAsMTMgKzU5MTQsOSBAQAogICAgIG1ha2Vfc2Vjc2VsICRsCiAKICAgICBpZiB7JGlzbmV3fSB7Ci0JYWRkdG9oaXN0b3J5IFtsaXN0IHNlbGVjdGxpbmUgJGwgMF0KKwlhZGR0b2hpc3RvcnkgW2xpc3Qgc2VsYnlpZCAkaWRdCiAgICAgfQogCi0gICAgc2V0IHNlbGVjdGVkbGluZSAkbAotCi0gICAgc2V0IGlkIFtsaW5kZXggJGRpc3BsYXlvcmRlciAkbF0KLSAgICBzZXQgY3VycmVudGlkICRpZAogICAgICRzaGExZW50cnkgZGVsZXRlIDAgZW5kCiAgICAgJHNoYTFlbnRyeSBpbnNlcnQgMCAkaWQKICAgICBpZiB7JGF1dG9zZWxlY3R9IHsKQEAgLTQ3NTgsNiArNTkyOCw5IEBACiAgICAgJGN0ZXh0IGNvbmYgLXN0YXRlIG5vcm1hbAogICAgIGNsZWFyX2N0ZXh0CiAgICAgc2V0IGxpbmtudW0gMAorICAgIGlmIHshW2luZm8gZXhpc3RzIGNvbW1pdGluZm8oJGlkKV19IHsKKwlnZXRjb21taXQgJGlkCisgICAgfQogICAgIHNldCBpbmZvICRjb21taXRpbmZvKCRpZCkKICAgICBzZXQgZGF0ZSBbZm9ybWF0ZGF0ZSBbbGluZGV4ICRpbmZvIDJdXQogICAgICRjdGV4dCBpbnNlcnQgZW5kICJbbWMgIkF1dGhvciJdOiBbbGluZGV4ICRpbmZvIDFdICAkZGF0ZVxuIgpAQCAtNDc3Miw3ICs1OTQ1LDcgQEAKICAgICB9CiAKICAgICBzZXQgaGVhZGVycyB7fQotICAgIHNldCBvbGRzIFtsaW5kZXggJHBhcmVudGxpc3QgJGxdCisgICAgc2V0IG9sZHMgJHBhcmVudHMoJGN1cnZpZXcsJGlkKQogICAgIGlmIHtbbGxlbmd0aCAkb2xkc10gPiAxfSB7CiAJc2V0IG5wIDAKIAlmb3JlYWNoIHAgJG9sZHMgewpAQCAtNDgzMCw3ICs2MDAzLDcgQEAKICAgICB9IGVsc2VpZiB7W2xsZW5ndGggJG9sZHNdIDw9IDF9IHsKIAlzdGFydGRpZmYgJGlkCiAgICAgfSBlbHNlIHsKLQltZXJnZWRpZmYgJGlkICRsCisJbWVyZ2VkaWZmICRpZAogICAgIH0KIH0KIApAQCAtNDg0OSw3ICs2MDIyLDcgQEAKIHByb2Mgc2VsbmV4dGxpbmUge2Rpcn0gewogICAgIGdsb2JhbCBzZWxlY3RlZGxpbmUKICAgICBmb2N1cyAuCi0gICAgaWYgeyFbaW5mbyBleGlzdHMgc2VsZWN0ZWRsaW5lXX0gcmV0dXJuCisgICAgaWYgeyRzZWxlY3RlZGxpbmUgZXEge319IHJldHVybgogICAgIHNldCBsIFtleHByIHskc2VsZWN0ZWRsaW5lICsgJGRpcn1dCiAgICAgdW5tYXJrbWF0Y2hlcwogICAgIHNlbGVjdGxpbmUgJGwgMQpAQCAtNDg2NCw3ICs2MDM3LDcgQEAKICAgICB9CiAgICAgYWxsY2FudnMgeXZpZXcgc2Nyb2xsIFtleHByIHskZGlyICogJGxwcH1dIHVuaXRzCiAgICAgZHJhd3Zpc2libGUKLSAgICBpZiB7IVtpbmZvIGV4aXN0cyBzZWxlY3RlZGxpbmVdfSByZXR1cm4KKyAgICBpZiB7JHNlbGVjdGVkbGluZSBlcSB7fX0gcmV0dXJuCiAgICAgc2V0IGwgW2V4cHIgeyRzZWxlY3RlZGxpbmUgKyAkZGlyICogJGxwcH1dCiAgICAgaWYgeyRsIDwgMH0gewogCXNldCBsIDAKQEAgLTQ4NzgsNyArNjA1MSw3IEBACiBwcm9jIHVuc2VsZWN0bGluZSB7fSB7CiAgICAgZ2xvYmFsIHNlbGVjdGVkbGluZSBjdXJyZW50aWQKIAotICAgIGNhdGNoIHt1bnNldCBzZWxlY3RlZGxpbmV9CisgICAgc2V0IHNlbGVjdGVkbGluZSB7fQogICAgIGNhdGNoIHt1bnNldCBjdXJyZW50aWR9CiAgICAgYWxsY2FudnMgZGVsZXRlIHNlY3NlbAogICAgIHJoaWdobGlnaHRfbm9uZQpAQCAtNDg4Nyw3ICs2MDYwLDcgQEAKIHByb2MgcmVzZWxlY3RsaW5lIHt9IHsKICAgICBnbG9iYWwgc2VsZWN0ZWRsaW5lCiAKLSAgICBpZiB7W2luZm8gZXhpc3RzIHNlbGVjdGVkbGluZV19IHsKKyAgICBpZiB7JHNlbGVjdGVkbGluZSBuZSB7fX0gewogCXNlbGVjdGxpbmUgJHNlbGVjdGVkbGluZSAwCiAgICAgfQogfQpAQCAtNDk5MiwxMSArNjE2NSwxMiBAQAogCWlmIHskZGlmZmlkcyBlcSAkbnVsbGlkfSB7CiAJICAgIHNldCBmbmFtZSAkbGluZQogCX0gZWxzZSB7Ci0JICAgIGlmIHskZGlmZmlkcyBuZSAkbnVsbGlkMiAmJiBbbGluZGV4ICRsaW5lIDFdIG5lICJibG9iIn0gY29udGludWUKIAkgICAgc2V0IGkgW3N0cmluZyBmaXJzdCAiXHQiICRsaW5lXQogCSAgICBpZiB7JGkgPCAwfSBjb250aW51ZQotCSAgICBzZXQgc2hhMSBbbGluZGV4ICRsaW5lIDJdCiAJICAgIHNldCBmbmFtZSBbc3RyaW5nIHJhbmdlICRsaW5lIFtleHByIHskaSsxfV0gZW5kXQorCSAgICBzZXQgbGluZSBbc3RyaW5nIHJhbmdlICRsaW5lIDAgW2V4cHIgeyRpLTF9XV0KKwkgICAgaWYgeyRkaWZmaWRzIG5lICRudWxsaWQyICYmIFtsaW5kZXggJGxpbmUgMV0gbmUgImJsb2IifSBjb250aW51ZQorCSAgICBzZXQgc2hhMSBbbGluZGV4ICRsaW5lIDJdCiAJICAgIGlmIHtbc3RyaW5nIGluZGV4ICRmbmFtZSAwXSBlcSAiXCIifSB7CiAJCXNldCBmbmFtZSBbbGluZGV4ICRmbmFtZSAwXQogCSAgICB9CkBAIC01MDc1LDE5ICs2MjQ5LDE5IEBACiAgICAgcmV0dXJuIFtleHByIHskbmwgPj0gMTAwMD8gMjogMX1dCiB9CiAKLXByb2MgbWVyZ2VkaWZmIHtpZCBsfSB7Citwcm9jIG1lcmdlZGlmZiB7aWR9IHsKICAgICBnbG9iYWwgZGlmZm1lcmdlaWQgbWRpZmZmZAogICAgIGdsb2JhbCBkaWZmaWRzCisgICAgZ2xvYmFsIHBhcmVudHMKICAgICBnbG9iYWwgZGlmZmNvbnRleHQKLSAgICBnbG9iYWwgcGFyZW50bGlzdAotICAgIGdsb2JhbCBsaW1pdGRpZmZzIHZpZXdmaWxlcyBjdXJ2aWV3CisgICAgZ2xvYmFsIGxpbWl0ZGlmZnMgdmZpbGVsaW1pdCBjdXJ2aWV3CiAKICAgICBzZXQgZGlmZm1lcmdlaWQgJGlkCiAgICAgc2V0IGRpZmZpZHMgJGlkCiAgICAgIyB0aGlzIGRvZXNuJ3Qgc2VlbSB0byBhY3R1YWxseSBhZmZlY3QgYW55dGhpbmcuLi4KICAgICBzZXQgY21kIFtjb25jYXQgfCBnaXQgZGlmZi10cmVlIC0tbm8tY29tbWl0LWlkIC0tY2MgLVUkZGlmZmNvbnRleHQgJGlkXQotICAgIGlmIHskbGltaXRkaWZmcyAmJiAkdmlld2ZpbGVzKCRjdXJ2aWV3KSBuZSB7fX0gewotCXNldCBjbWQgW2NvbmNhdCAkY21kIC0tICR2aWV3ZmlsZXMoJGN1cnZpZXcpXQorICAgIGlmIHskbGltaXRkaWZmcyAmJiAkdmZpbGVsaW1pdCgkY3VydmlldykgbmUge319IHsKKwlzZXQgY21kIFtjb25jYXQgJGNtZCAtLSAkdmZpbGVsaW1pdCgkY3VydmlldyldCiAgICAgfQogICAgIGlmIHtbY2F0Y2gge3NldCBtZGYgW29wZW4gJGNtZCByXX0gZXJyXX0gewogCWVycm9yX3BvcHVwICJbbWMgIkVycm9yIGdldHRpbmcgbWVyZ2UgZGlmZnM6Il0gJGVyciIKQEAgLTUwOTUsNyArNjI2OSw3IEBACiAgICAgfQogICAgIGZjb25maWd1cmUgJG1kZiAtYmxvY2tpbmcgMAogICAgIHNldCBtZGlmZmZkKCRpZCkgJG1kZgotICAgIHNldCBucCBbbGxlbmd0aCBbbGluZGV4ICRwYXJlbnRsaXN0ICRsXV0KKyAgICBzZXQgbnAgW2xsZW5ndGggJHBhcmVudHMoJGN1cnZpZXcsJGlkKV0KICAgICBzZXR0YWJzICRucAogICAgIGZpbGVydW4gJG1kZiBbbGlzdCBnZXRtZXJnZWRpZmZsaW5lICRtZGYgJGlkICRucF0KIH0KQEAgLTUyNjUsNyArNjQzOSw3IEBACiAKIHByb2MgZ2V0dHJlZWRpZmZsaW5lIHtnZHRmIGlkc30gewogICAgIGdsb2JhbCB0cmVlZGlmZiB0cmVlZGlmZnMgdHJlZXBlbmRpbmcgZGlmZmlkcyBkaWZmbWVyZ2VpZAotICAgIGdsb2JhbCBjbWl0bW9kZSB2aWV3ZmlsZXMgY3VydmlldyBsaW1pdGRpZmZzCisgICAgZ2xvYmFsIGNtaXRtb2RlIHZmaWxlbGltaXQgY3VydmlldyBsaW1pdGRpZmZzCiAKICAgICBzZXQgbnIgMAogICAgIHdoaWxlIHtbaW5jciBucl0gPD0gMTAwMCAmJiBbZ2V0cyAkZ2R0ZiBsaW5lXSA+PSAwfSB7CkBAIC01MjgyLDEwICs2NDU2LDEwIEBACiAJcmV0dXJuIFtleHByIHskbnIgPj0gMTAwMD8gMjogMX1dCiAgICAgfQogICAgIGNsb3NlICRnZHRmCi0gICAgaWYgeyRsaW1pdGRpZmZzICYmICR2aWV3ZmlsZXMoJGN1cnZpZXcpIG5lIHt9fSB7CisgICAgaWYgeyRsaW1pdGRpZmZzICYmICR2ZmlsZWxpbWl0KCRjdXJ2aWV3KSBuZSB7fX0gewogCXNldCBmbGlzdCB7fQogCWZvcmVhY2ggZiAkdHJlZWRpZmYgewotCSAgICBpZiB7W3BhdGhfZmlsdGVyICR2aWV3ZmlsZXMoJGN1cnZpZXcpICRmXX0geworCSAgICBpZiB7W3BhdGhfZmlsdGVyICR2ZmlsZWxpbWl0KCRjdXJ2aWV3KSAkZl19IHsKIAkJbGFwcGVuZCBmbGlzdCAkZgogCSAgICB9CiAJfQpAQCAtNTMzMSwxNCArNjUwNSwxNCBAQAogICAgIGdsb2JhbCBkaWZmaW5oZHIgdHJlZWRpZmZzCiAgICAgZ2xvYmFsIGRpZmZjb250ZXh0CiAgICAgZ2xvYmFsIGlnbm9yZXNwYWNlCi0gICAgZ2xvYmFsIGxpbWl0ZGlmZnMgdmlld2ZpbGVzIGN1cnZpZXcKKyAgICBnbG9iYWwgbGltaXRkaWZmcyB2ZmlsZWxpbWl0IGN1cnZpZXcKIAogICAgIHNldCBjbWQgW2RpZmZjbWQgJGlkcyAiLXAgLUMgLS1uby1jb21taXQtaWQgLVUkZGlmZmNvbnRleHQiXQogICAgIGlmIHskaWdub3Jlc3BhY2V9IHsKIAlhcHBlbmQgY21kICIgLXciCiAgICAgfQotICAgIGlmIHskbGltaXRkaWZmcyAmJiAkdmlld2ZpbGVzKCRjdXJ2aWV3KSBuZSB7fX0gewotCXNldCBjbWQgW2NvbmNhdCAkY21kIC0tICR2aWV3ZmlsZXMoJGN1cnZpZXcpXQorICAgIGlmIHskbGltaXRkaWZmcyAmJiAkdmZpbGVsaW1pdCgkY3VydmlldykgbmUge319IHsKKwlzZXQgY21kIFtjb25jYXQgJGNtZCAtLSAkdmZpbGVsaW1pdCgkY3VydmlldyldCiAgICAgfQogICAgIGlmIHtbY2F0Y2gge3NldCBiZGYgW29wZW4gJGNtZCByXX0gZXJyXX0gewogCXB1dHMgImVycm9yIGdldHRpbmcgZGlmZnM6ICRlcnIiCkBAIC01NDc4LDI2ICs2NjUyLDQ0IEBACiAgICAgJGN0ZXh0IHRhZyBjb25mIGQxIC1lbGlkZSBbbGluZGV4ICRkaWZmZWxpZGUgMV0KIH0KIAorcHJvYyBoaWdobGlnaHRmaWxlIHtsb2MgY2xpbmV9IHsKKyAgICBnbG9iYWwgY3RleHQgY2ZsaXN0IGNmbGlzdF90b3AKKworICAgICRjdGV4dCB5dmlldyAkbG9jCisgICAgJGNmbGlzdCB0YWcgcmVtb3ZlIGhpZ2hsaWdodCAkY2ZsaXN0X3RvcC4wICIkY2ZsaXN0X3RvcC4wIGxpbmVlbmQiCisgICAgJGNmbGlzdCB0YWcgYWRkIGhpZ2hsaWdodCAkY2xpbmUuMCAiJGNsaW5lLjAgbGluZWVuZCIKKyAgICAkY2ZsaXN0IHNlZSAkY2xpbmUuMAorICAgIHNldCBjZmxpc3RfdG9wICRjbGluZQorfQorCiBwcm9jIHByZXZmaWxlIHt9IHsKLSAgICBnbG9iYWwgZGlmZmZpbGVzdGFydCBjdGV4dAotICAgIHNldCBwcmV2IFtsaW5kZXggJGRpZmZmaWxlc3RhcnQgMF0KKyAgICBnbG9iYWwgZGlmZmZpbGVzdGFydCBjdGV4dCBjbWl0bW9kZQorCisgICAgaWYgeyRjbWl0bW9kZSBlcSAidHJlZSJ9IHJldHVybgorICAgIHNldCBwcmV2IDAuMAorICAgIHNldCBwcmV2bGluZSAxCiAgICAgc2V0IGhlcmUgWyRjdGV4dCBpbmRleCBAMCwwXQogICAgIGZvcmVhY2ggbG9jICRkaWZmZmlsZXN0YXJ0IHsKIAlpZiB7WyRjdGV4dCBjb21wYXJlICRsb2MgPj0gJGhlcmVdfSB7Ci0JICAgICRjdGV4dCB5dmlldyAkcHJldgorCSAgICBoaWdobGlnaHRmaWxlICRwcmV2ICRwcmV2bGluZQogCSAgICByZXR1cm4KIAl9CiAJc2V0IHByZXYgJGxvYworCWluY3IgcHJldmxpbmUKICAgICB9Ci0gICAgJGN0ZXh0IHl2aWV3ICRwcmV2CisgICAgaGlnaGxpZ2h0ZmlsZSAkcHJldiAkcHJldmxpbmUKIH0KIAogcHJvYyBuZXh0ZmlsZSB7fSB7Ci0gICAgZ2xvYmFsIGRpZmZmaWxlc3RhcnQgY3RleHQKKyAgICBnbG9iYWwgZGlmZmZpbGVzdGFydCBjdGV4dCBjbWl0bW9kZQorCisgICAgaWYgeyRjbWl0bW9kZSBlcSAidHJlZSJ9IHJldHVybgogICAgIHNldCBoZXJlIFskY3RleHQgaW5kZXggQDAsMF0KKyAgICBzZXQgbGluZSAxCiAgICAgZm9yZWFjaCBsb2MgJGRpZmZmaWxlc3RhcnQgeworCWluY3IgbGluZQogCWlmIHtbJGN0ZXh0IGNvbXBhcmUgJGxvYyA+ICRoZXJlXX0gewotCSAgICAkY3RleHQgeXZpZXcgJGxvYworCSAgICBoaWdobGlnaHRmaWxlICRsb2MgJGxpbmUKIAkgICAgcmV0dXJuCiAJfQogICAgIH0KQEAgLTU2ODAsNyArNjg3Miw3IEBACiAgICAgc2V0Y2FudnNjcm9sbAogICAgIGFsbGNhbnZzIHl2aWV3IG1vdmV0byBbbGluZGV4ICRzcGFuIDBdCiAgICAgZHJhd3Zpc2libGUKLSAgICBpZiB7W2luZm8gZXhpc3RzIHNlbGVjdGVkbGluZV19IHsKKyAgICBpZiB7JHNlbGVjdGVkbGluZSBuZSB7fX0gewogCXNlbGVjdGxpbmUgJHNlbGVjdGVkbGluZSAwCiAJYWxsY2FudnMgeXZpZXcgbW92ZXRvIFtsaW5kZXggJHNwYW4gMF0KICAgICB9CkBAIC01NzMxLDcgKzY5MjMsNyBAQAogfQogCiBwcm9jIGluY3Jmb250IHtpbmN9IHsKLSAgICBnbG9iYWwgbWFpbmZvbnQgdGV4dGZvbnQgY3RleHQgY2FudiBwaGFzZSBjZmxpc3Qgc2hvd3JlZnN0b3AKKyAgICBnbG9iYWwgbWFpbmZvbnQgdGV4dGZvbnQgY3RleHQgY2FudiBjZmxpc3Qgc2hvd3JlZnN0b3AKICAgICBnbG9iYWwgc3RvcHBlZCBlbnRyaWVzIGZvbnRhdHRyCiAKICAgICB1bm1hcmttYXRjaGVzCkBAIC01NzgyLDggKzY5NzQsNyBAQAogfQogCiBwcm9jIGdvdG9jb21taXQge30gewotICAgIGdsb2JhbCBzaGExc3RyaW5nIGN1cnJlbnRpZCBjb21taXRyb3cgdGFnaWRzIGhlYWRpZHMKLSAgICBnbG9iYWwgZGlzcGxheW9yZGVyIG51bWNvbW1pdHMgY3VydmlldworICAgIGdsb2JhbCBzaGExc3RyaW5nIHRhZ2lkcyBoZWFkaWRzIGN1cnZpZXcgdmFyY2lkCiAKICAgICBpZiB7JHNoYTFzdHJpbmcgPT0ge30KIAl8fCAoW2luZm8gZXhpc3RzIGN1cnJlbnRpZF0gJiYgJHNoYTFzdHJpbmcgPT0gJGN1cnJlbnRpZCl9IHJldHVybgpAQCAtNTc5NCwyMyArNjk4NSwxOCBAQAogICAgIH0gZWxzZSB7CiAJc2V0IGlkIFtzdHJpbmcgdG9sb3dlciAkc2hhMXN0cmluZ10KIAlpZiB7W3JlZ2V4cCB7XlswLTlhLWZdezQsMzl9JH0gJGlkXX0gewotCSAgICBzZXQgbWF0Y2hlcyB7fQotCSAgICBmb3JlYWNoIGkgJGRpc3BsYXlvcmRlciB7Ci0JCWlmIHtbc3RyaW5nIG1hdGNoICRpZCogJGldfSB7Ci0JCSAgICBsYXBwZW5kIG1hdGNoZXMgJGkKLQkJfQotCSAgICB9CisJICAgIHNldCBtYXRjaGVzIFthcnJheSBuYW1lcyB2YXJjaWQgIiRjdXJ2aWV3LCRpZCoiXQogCSAgICBpZiB7JG1hdGNoZXMgbmUge319IHsKIAkJaWYge1tsbGVuZ3RoICRtYXRjaGVzXSA+IDF9IHsKIAkJICAgIGVycm9yX3BvcHVwIFttYyAiU2hvcnQgU0hBMSBpZCAlcyBpcyBhbWJpZ3VvdXMiICRpZF0KIAkJICAgIHJldHVybgogCQl9Ci0JCXNldCBpZCBbbGluZGV4ICRtYXRjaGVzIDBdCisJCXNldCBpZCBbbGluZGV4IFtzcGxpdCBbbGluZGV4ICRtYXRjaGVzIDBdICIsIl0gMV0KIAkgICAgfQogCX0KICAgICB9Ci0gICAgaWYge1tpbmZvIGV4aXN0cyBjb21taXRyb3coJGN1cnZpZXcsJGlkKV19IHsKLQlzZWxlY3RsaW5lICRjb21taXRyb3coJGN1cnZpZXcsJGlkKSAxCisgICAgaWYge1tjb21taXRpbnZpZXcgJGlkICRjdXJ2aWV3XX0geworCXNlbGVjdGxpbmUgW3Jvd29mY29tbWl0ICRpZF0gMQogCXJldHVybgogICAgIH0KICAgICBpZiB7W3JlZ2V4cCB7XlswLTlhLWZBLUZdezQsfSR9ICRzaGExc3RyaW5nXX0gewpAQCAtNTkxOSw3ICs3MTA1LDcgQEAKIH0KIAogcHJvYyBsaW5lY2xpY2sge3ggeSBpZCBpc25ld30gewotICAgIGdsb2JhbCBjdGV4dCBjb21taXRpbmZvIGNoaWxkcmVuIGNhbnYgdGhpY2tlcmxpbmUgY3VydmlldyBjb21taXRyb3cKKyAgICBnbG9iYWwgY3RleHQgY29tbWl0aW5mbyBjaGlsZHJlbiBjYW52IHRoaWNrZXJsaW5lIGN1cnZpZXcKIAogICAgIGlmIHshW2luZm8gZXhpc3RzIGNvbW1pdGluZm8oJGlkKV0gJiYgIVtnZXRjb21taXQgJGlkXX0gcmV0dXJuCiAgICAgdW5tYXJrbWF0Y2hlcwpAQCAtNTk4Nyw5ICs3MTczLDkgQEAKIH0KIAogcHJvYyBzZWxieWlkIHtpZH0gewotICAgIGdsb2JhbCBjb21taXRyb3cgY3VydmlldwotICAgIGlmIHtbaW5mbyBleGlzdHMgY29tbWl0cm93KCRjdXJ2aWV3LCRpZCldfSB7Ci0Jc2VsZWN0bGluZSAkY29tbWl0cm93KCRjdXJ2aWV3LCRpZCkgMQorICAgIGdsb2JhbCBjdXJ2aWV3CisgICAgaWYge1tjb21taXRpbnZpZXcgJGlkICRjdXJ2aWV3XX0geworCXNlbGVjdGxpbmUgW3Jvd29mY29tbWl0ICRpZF0gMQogICAgIH0KIH0KIApAQCAtNjAwMiwyMCArNzE4OCwyMyBAQAogfQogCiBwcm9jIHJvd21lbnUge3ggeSBpZH0gewotICAgIGdsb2JhbCByb3djdHhtZW51IGNvbW1pdHJvdyBzZWxlY3RlZGxpbmUgcm93bWVudWlkIGN1cnZpZXcKKyAgICBnbG9iYWwgcm93Y3R4bWVudSBzZWxlY3RlZGxpbmUgcm93bWVudWlkIGN1cnZpZXcKICAgICBnbG9iYWwgbnVsbGlkIG51bGxpZDIgZmFrZXJvd21lbnUgbWFpbmhlYWQKIAogICAgIHN0b3BmaW5kaW5nCiAgICAgc2V0IHJvd21lbnVpZCAkaWQKLSAgICBpZiB7IVtpbmZvIGV4aXN0cyBzZWxlY3RlZGxpbmVdCi0JfHwgJGNvbW1pdHJvdygkY3VydmlldywkaWQpIGVxICRzZWxlY3RlZGxpbmV9IHsKKyAgICBpZiB7JHNlbGVjdGVkbGluZSBlcSB7fSB8fCBbcm93b2Zjb21taXQgJGlkXSBlcSAkc2VsZWN0ZWRsaW5lfSB7CiAJc2V0IHN0YXRlIGRpc2FibGVkCiAgICAgfSBlbHNlIHsKIAlzZXQgc3RhdGUgbm9ybWFsCiAgICAgfQogICAgIGlmIHskaWQgbmUgJG51bGxpZCAmJiAkaWQgbmUgJG51bGxpZDJ9IHsKIAlzZXQgbWVudSAkcm93Y3R4bWVudQotCSRtZW51IGVudHJ5Y29uZmlndXJlIDcgLWxhYmVsIFttYyAiUmVzZXQgJXMgYnJhbmNoIHRvIGhlcmUiICRtYWluaGVhZF0KKwlpZiB7JG1haW5oZWFkIG5lIHt9fSB7CisJICAgICRtZW51IGVudHJ5Y29uZmlndXJlIDcgLWxhYmVsIFttYyAiUmVzZXQgJXMgYnJhbmNoIHRvIGhlcmUiICRtYWluaGVhZF0KKwl9IGVsc2UgeworCSAgICAkbWVudSBlbnRyeWNvbmZpZ3VyZSA3IC1sYWJlbCBbbWMgIkRldGFjaGVkIGhlYWQ6IGNhbid0IHJlc2V0IiAkbWFpbmhlYWRdIC1zdGF0ZSBkaXNhYmxlZAorCX0KICAgICB9IGVsc2UgewogCXNldCBtZW51ICRmYWtlcm93bWVudQogICAgIH0KQEAgLTYwMjYsMTUgKzcyMTUsMTUgQEAKIH0KIAogcHJvYyBkaWZmdnNzZWwge2Rpcm59IHsKLSAgICBnbG9iYWwgcm93bWVudWlkIHNlbGVjdGVkbGluZSBkaXNwbGF5b3JkZXIKKyAgICBnbG9iYWwgcm93bWVudWlkIHNlbGVjdGVkbGluZQogCi0gICAgaWYgeyFbaW5mbyBleGlzdHMgc2VsZWN0ZWRsaW5lXX0gcmV0dXJuCisgICAgaWYgeyRzZWxlY3RlZGxpbmUgZXEge319IHJldHVybgogICAgIGlmIHskZGlybn0gewotCXNldCBvbGRpZCBbbGluZGV4ICRkaXNwbGF5b3JkZXIgJHNlbGVjdGVkbGluZV0KKwlzZXQgb2xkaWQgW2NvbW1pdG9ucm93ICRzZWxlY3RlZGxpbmVdCiAJc2V0IG5ld2lkICRyb3dtZW51aWQKICAgICB9IGVsc2UgewogCXNldCBvbGRpZCAkcm93bWVudWlkCi0Jc2V0IG5ld2lkIFtsaW5kZXggJGRpc3BsYXlvcmRlciAkc2VsZWN0ZWRsaW5lXQorCXNldCBuZXdpZCBbY29tbWl0b25yb3cgJHNlbGVjdGVkbGluZV0KICAgICB9CiAgICAgYWRkdG9oaXN0b3J5IFtsaXN0IGRvc2VsZGlmZiAkb2xkaWQgJG5ld2lkXQogICAgIGRvc2VsZGlmZiAkb2xkaWQgJG5ld2lkCkBAIC02MjEyLDI0ICs3NDAxLDMwIEBACiB9CiAKIHByb2MgcmVkcmF3dGFncyB7aWR9IHsKLSAgICBnbG9iYWwgY2FudiBsaW5laHRhZyBjb21taXRyb3cgaWRwb3Mgc2VsZWN0ZWRsaW5lIGN1cnZpZXcKLSAgICBnbG9iYWwgY2FudnhtYXggaWRkcmF3bgorICAgIGdsb2JhbCBjYW52IGxpbmVodGFnIGlkcG9zIGN1cnJlbnRpZCBjdXJ2aWV3IGNtaXRsaXN0ZWQKKyAgICBnbG9iYWwgY2FudnhtYXggaWRkcmF3biBjaXJjbGVpdGVtIG1haW5oZWFkaWQgY2lyY2xlY29sb3JzCiAKLSAgICBpZiB7IVtpbmZvIGV4aXN0cyBjb21taXRyb3coJGN1cnZpZXcsJGlkKV19IHJldHVybgorICAgIGlmIHshW2NvbW1pdGludmlldyAkaWQgJGN1cnZpZXddfSByZXR1cm4KICAgICBpZiB7IVtpbmZvIGV4aXN0cyBpZGRyYXduKCRpZCldfSByZXR1cm4KLSAgICBkcmF3Y29tbWl0cyAkY29tbWl0cm93KCRjdXJ2aWV3LCRpZCkKKyAgICBzZXQgcm93IFtyb3dvZmNvbW1pdCAkaWRdCisgICAgaWYgeyRpZCBlcSAkbWFpbmhlYWRpZH0geworCXNldCBvZmlsbCB5ZWxsb3cKKyAgICB9IGVsc2UgeworCXNldCBvZmlsbCBbbGluZGV4ICRjaXJjbGVjb2xvcnMgJGNtaXRsaXN0ZWQoJGN1cnZpZXcsJGlkKV0KKyAgICB9CisgICAgJGNhbnYgaXRlbWNvbmYgJGNpcmNsZWl0ZW0oJHJvdykgLWZpbGwgJG9maWxsCiAgICAgJGNhbnYgZGVsZXRlIHRhZy4kaWQKICAgICBzZXQgeHQgW2V2YWwgZHJhd3RhZ3MgJGlkICRpZHBvcygkaWQpXQotICAgICRjYW52IGNvb3JkcyAkbGluZWh0YWcoJGNvbW1pdHJvdygkY3VydmlldywkaWQpKSAkeHQgW2xpbmRleCAkaWRwb3MoJGlkKSAyXQotICAgIHNldCB0ZXh0IFskY2FudiBpdGVtY2dldCAkbGluZWh0YWcoJGNvbW1pdHJvdygkY3VydmlldywkaWQpKSAtdGV4dF0KLSAgICBzZXQgeHIgW2V4cHIgeyR4dCArIFtmb250IG1lYXN1cmUgbWFpbmZvbnQgJHRleHRdfV0KKyAgICAkY2FudiBjb29yZHMgJGxpbmVodGFnKCRyb3cpICR4dCBbbGluZGV4ICRpZHBvcygkaWQpIDJdCisgICAgc2V0IHRleHQgWyRjYW52IGl0ZW1jZ2V0ICRsaW5laHRhZygkcm93KSAtdGV4dF0KKyAgICBzZXQgZm9udCBbJGNhbnYgaXRlbWNnZXQgJGxpbmVodGFnKCRyb3cpIC1mb250XQorICAgIHNldCB4ciBbZXhwciB7JHh0ICsgW2ZvbnQgbWVhc3VyZSAkZm9udCAkdGV4dF19XQogICAgIGlmIHskeHIgPiAkY2FudnhtYXh9IHsKIAlzZXQgY2FudnhtYXggJHhyCiAJc2V0Y2FudnNjcm9sbAogICAgIH0KLSAgICBpZiB7W2luZm8gZXhpc3RzIHNlbGVjdGVkbGluZV0KLQkmJiAkc2VsZWN0ZWRsaW5lID09ICRjb21taXRyb3coJGN1cnZpZXcsJGlkKX0gewotCXNlbGVjdGxpbmUgJHNlbGVjdGVkbGluZSAwCisgICAgaWYge1tpbmZvIGV4aXN0cyBjdXJyZW50aWRdICYmICRjdXJyZW50aWQgPT0gJGlkfSB7CisJbWFrZV9zZWNzZWwgJHJvdwogICAgIH0KIH0KIApAQCAtNjM1NSw4ICs3NTUwLDggQEAKIH0KIAogcHJvYyBjaGVycnlwaWNrIHt9IHsKLSAgICBnbG9iYWwgcm93bWVudWlkIGN1cnZpZXcgY29tbWl0cm93Ci0gICAgZ2xvYmFsIG1haW5oZWFkCisgICAgZ2xvYmFsIHJvd21lbnVpZCBjdXJ2aWV3CisgICAgZ2xvYmFsIG1haW5oZWFkIG1haW5oZWFkaWQKIAogICAgIHNldCBvbGRoZWFkIFtleGVjIGdpdCByZXYtcGFyc2UgSEVBRF0KICAgICBzZXQgZGhlYWRzIFtkZXNjaGVhZHMgJHJvd21lbnVpZF0KQEAgLTYzODIsMjAgKzc1NzcsMjIgQEAKIAlyZXR1cm4KICAgICB9CiAgICAgYWRkbmV3Y2hpbGQgJG5ld2hlYWQgJG9sZGhlYWQKLSAgICBpZiB7W2luZm8gZXhpc3RzIGNvbW1pdHJvdygkY3Vydmlldywkb2xkaGVhZCldfSB7Ci0JaW5zZXJ0cm93ICRjb21taXRyb3coJGN1cnZpZXcsJG9sZGhlYWQpICRuZXdoZWFkCisgICAgaWYge1tjb21taXRpbnZpZXcgJG9sZGhlYWQgJGN1cnZpZXddfSB7CisJaW5zZXJ0cm93ICRuZXdoZWFkICRvbGRoZWFkICRjdXJ2aWV3CiAJaWYgeyRtYWluaGVhZCBuZSB7fX0gewogCSAgICBtb3ZlaGVhZCAkbmV3aGVhZCAkbWFpbmhlYWQKIAkgICAgbW92ZWRoZWFkICRuZXdoZWFkICRtYWluaGVhZAogCX0KKwlzZXQgbWFpbmhlYWRpZCAkbmV3aGVhZAogCXJlZHJhd3RhZ3MgJG9sZGhlYWQKIAlyZWRyYXd0YWdzICRuZXdoZWFkCisJc2VsYnlpZCAkbmV3aGVhZAogICAgIH0KICAgICBub3RidXN5IGNoZXJyeXBpY2sKIH0KIAogcHJvYyByZXNldGhlYWQge30gewotICAgIGdsb2JhbCBtYWluaGVhZGlkIG1haW5oZWFkIHJvd21lbnVpZCBjb25maXJtX29rIHJlc2V0dHlwZQorICAgIGdsb2JhbCBtYWluaGVhZCByb3dtZW51aWQgY29uZmlybV9vayByZXNldHR5cGUKIAogICAgIHNldCBjb25maXJtX29rIDAKICAgICBzZXQgdyAiLmNvbmZpcm1yZXNldCIKQEAgLTY0MjgsMTIgKzc2MjUsMTMgQEAKICAgICB0a3dhaXQgd2luZG93ICR3CiAgICAgaWYgeyEkY29uZmlybV9va30gcmV0dXJuCiAgICAgaWYge1tjYXRjaCB7c2V0IGZkIFtvcGVuIFwKLQkgICAgW2xpc3QgfCBzaCAtYyAiZ2l0IHJlc2V0IC0tJHJlc2V0dHlwZSAkcm93bWVudWlkIDI+JjEiXSByXX0gZXJyXX0geworCSAgICBbbGlzdCB8IGdpdCByZXNldCAtLSRyZXNldHR5cGUgJHJvd21lbnVpZCAyPkAxXSByXX0gZXJyXX0gewogCWVycm9yX3BvcHVwICRlcnIKICAgICB9IGVsc2UgewogCWRvaGlkZWxvY2FsY2hhbmdlcwogCWZpbGVydW4gJGZkIFtsaXN0IHJlYWRyZXNldHN0YXQgJGZkXQogCW5vd2J1c3kgcmVzZXQgW21jICJSZXNldHRpbmciXQorCXNlbGJ5aWQgJHJvd21lbnVpZAogICAgIH0KIH0KIApAQCAtNjQ4NSwyOCArNzY4Myw0OCBAQAogfQogCiBwcm9jIGNvYnJhbmNoIHt9IHsKLSAgICBnbG9iYWwgaGVhZG1lbnVpZCBoZWFkbWVudWhlYWQgbWFpbmhlYWQgaGVhZGlkcworICAgIGdsb2JhbCBoZWFkbWVudWlkIGhlYWRtZW51aGVhZCBoZWFkaWRzCiAgICAgZ2xvYmFsIHNob3dsb2NhbGNoYW5nZXMgbWFpbmhlYWRpZAogCiAgICAgIyBjaGVjayB0aGUgdHJlZSBpcyBjbGVhbiBmaXJzdD8/Ci0gICAgc2V0IG9sZG1haW5oZWFkICRtYWluaGVhZAogICAgIG5vd2J1c3kgY2hlY2tvdXQgW21jICJDaGVja2luZyBvdXQiXQogICAgIHVwZGF0ZQogICAgIGRvaGlkZWxvY2FsY2hhbmdlcwogICAgIGlmIHtbY2F0Y2ggewotCWV4ZWMgZ2l0IGNoZWNrb3V0IC1xICRoZWFkbWVudWhlYWQKKwlzZXQgZmQgW29wZW4gW2xpc3QgfCBnaXQgY2hlY2tvdXQgJGhlYWRtZW51aGVhZCAyPkAxXSByXQogICAgIH0gZXJyXX0gewogCW5vdGJ1c3kgY2hlY2tvdXQKIAllcnJvcl9wb3B1cCAkZXJyCi0gICAgfSBlbHNlIHsKLQlub3RidXN5IGNoZWNrb3V0Ci0Jc2V0IG1haW5oZWFkICRoZWFkbWVudWhlYWQKLQlzZXQgbWFpbmhlYWRpZCAkaGVhZG1lbnVpZAotCWlmIHtbaW5mbyBleGlzdHMgaGVhZGlkcygkb2xkbWFpbmhlYWQpXX0gewotCSAgICByZWRyYXd0YWdzICRoZWFkaWRzKCRvbGRtYWluaGVhZCkKKwlpZiB7JHNob3dsb2NhbGNoYW5nZXN9IHsKKwkgICAgZG9kaWZmaW5kZXgKIAl9Ci0JcmVkcmF3dGFncyAkaGVhZG1lbnVpZAorICAgIH0gZWxzZSB7CisJZmlsZXJ1biAkZmQgW2xpc3QgcmVhZGNoZWNrb3V0c3RhdCAkZmQgJGhlYWRtZW51aGVhZCAkaGVhZG1lbnVpZF0KICAgICB9Cit9CisKK3Byb2MgcmVhZGNoZWNrb3V0c3RhdCB7ZmQgbmV3aGVhZCBuZXdoZWFkaWR9IHsKKyAgICBnbG9iYWwgbWFpbmhlYWQgbWFpbmhlYWRpZCBoZWFkaWRzIHNob3dsb2NhbGNoYW5nZXMgcHJvZ3Jlc3Njb29yZHMKKworICAgIGlmIHtbZ2V0cyAkZmQgbGluZV0gPj0gMH0geworCWlmIHtbcmVnZXhwIHsoWzAtOV0rKSUgXCgoWzAtOV0rKS8oWzAtOV0rKVwpfSAkbGluZSBtYXRjaCBwIG0gbl19IHsKKwkgICAgc2V0IHByb2dyZXNzY29vcmRzIFtsaXN0IDAgW2V4cHIgezEuMCAqICRtIC8gJG59XV0KKwkgICAgYWRqdXN0cHJvZ3Jlc3MKKwl9CisJcmV0dXJuIDEKKyAgICB9CisgICAgc2V0IHByb2dyZXNzY29vcmRzIHswIDB9CisgICAgYWRqdXN0cHJvZ3Jlc3MKKyAgICBub3RidXN5IGNoZWNrb3V0CisgICAgaWYge1tjYXRjaCB7Y2xvc2UgJGZkfSBlcnJdfSB7CisJZXJyb3JfcG9wdXAgJGVycgorICAgIH0KKyAgICBzZXQgb2xkbWFpbmlkICRtYWluaGVhZGlkCisgICAgc2V0IG1haW5oZWFkICRuZXdoZWFkCisgICAgc2V0IG1haW5oZWFkaWQgJG5ld2hlYWRpZAorICAgIHJlZHJhd3RhZ3MgJG9sZG1haW5pZAorICAgIHJlZHJhd3RhZ3MgJG5ld2hlYWRpZAorICAgIHNlbGJ5aWQgJG5ld2hlYWRpZAogICAgIGlmIHskc2hvd2xvY2FsY2hhbmdlc30gewogCWRvZGlmZmluZGV4CiAgICAgfQpAQCAtNjYyMCwxMyArNzgzOCwxMyBAQAogCiBwcm9jIHJlZmlsbF9yZWZsaXN0IHt9IHsKICAgICBnbG9iYWwgcmVmbGlzdCByZWZsaXN0ZmlsdGVyIHNob3dyZWZzdG9wIGhlYWRpZHMgdGFnaWRzIG90aGVycmVmaWRzCi0gICAgZ2xvYmFsIGNvbW1pdHJvdyBjdXJ2aWV3IGNvbW1pdGludGVyZXN0CisgICAgZ2xvYmFsIGN1cnZpZXcgY29tbWl0aW50ZXJlc3QKIAogICAgIGlmIHshW2luZm8gZXhpc3RzIHNob3dyZWZzdG9wXSB8fCAhW3dpbmZvIGV4aXN0cyAkc2hvd3JlZnN0b3BdfSByZXR1cm4KICAgICBzZXQgcmVmcyB7fQogICAgIGZvcmVhY2ggbiBbYXJyYXkgbmFtZXMgaGVhZGlkc10gewogCWlmIHtbc3RyaW5nIG1hdGNoICRyZWZsaXN0ZmlsdGVyICRuXX0gewotCSAgICBpZiB7W2luZm8gZXhpc3RzIGNvbW1pdHJvdygkY3VydmlldywkaGVhZGlkcygkbikpXX0geworCSAgICBpZiB7W2NvbW1pdGludmlldyAkaGVhZGlkcygkbikgJGN1cnZpZXddfSB7CiAJCWxhcHBlbmQgcmVmcyBbbGlzdCAkbiBIXQogCSAgICB9IGVsc2UgewogCQlzZXQgY29tbWl0aW50ZXJlc3QoJGhlYWRpZHMoJG4pKSB7cnVuIHJlZmlsbF9yZWZsaXN0fQpAQCAtNjYzNSw3ICs3ODUzLDcgQEAKICAgICB9CiAgICAgZm9yZWFjaCBuIFthcnJheSBuYW1lcyB0YWdpZHNdIHsKIAlpZiB7W3N0cmluZyBtYXRjaCAkcmVmbGlzdGZpbHRlciAkbl19IHsKLQkgICAgaWYge1tpbmZvIGV4aXN0cyBjb21taXRyb3coJGN1cnZpZXcsJHRhZ2lkcygkbikpXX0geworCSAgICBpZiB7W2NvbW1pdGludmlldyAkdGFnaWRzKCRuKSAkY3Vydmlld119IHsKIAkJbGFwcGVuZCByZWZzIFtsaXN0ICRuIFRdCiAJICAgIH0gZWxzZSB7CiAJCXNldCBjb21taXRpbnRlcmVzdCgkdGFnaWRzKCRuKSkge3J1biByZWZpbGxfcmVmbGlzdH0KQEAgLTY2NDQsNyArNzg2Miw3IEBACiAgICAgfQogICAgIGZvcmVhY2ggbiBbYXJyYXkgbmFtZXMgb3RoZXJyZWZpZHNdIHsKIAlpZiB7W3N0cmluZyBtYXRjaCAkcmVmbGlzdGZpbHRlciAkbl19IHsKLQkgICAgaWYge1tpbmZvIGV4aXN0cyBjb21taXRyb3coJGN1cnZpZXcsJG90aGVycmVmaWRzKCRuKSldfSB7CisJICAgIGlmIHtbY29tbWl0aW52aWV3ICRvdGhlcnJlZmlkcygkbikgJGN1cnZpZXddfSB7CiAJCWxhcHBlbmQgcmVmcyBbbGlzdCAkbiBvXQogCSAgICB9IGVsc2UgewogCQlzZXQgY29tbWl0aW50ZXJlc3QoJG90aGVycmVmaWRzKCRuKSkge3J1biByZWZpbGxfcmVmbGlzdH0KQEAgLTc3ODgsNyArOTAwNiw3IEBACiB9CiAKIHByb2MgcmVyZWFkcmVmcyB7fSB7Ci0gICAgZ2xvYmFsIGlkdGFncyBpZGhlYWRzIGlkb3RoZXJyZWZzIG1haW5oZWFkCisgICAgZ2xvYmFsIGlkdGFncyBpZGhlYWRzIGlkb3RoZXJyZWZzIG1haW5oZWFkaWQKIAogICAgIHNldCByZWZpZHMgW2NvbmNhdCBbYXJyYXkgbmFtZXMgaWR0YWdzXSBcCiAJCSAgICBbYXJyYXkgbmFtZXMgaWRoZWFkc10gW2FycmF5IG5hbWVzIGlkb3RoZXJyZWZzXV0KQEAgLTc3OTcsMTkgKzkwMTUsMjEgQEAKIAkgICAgc2V0IHJlZigkaWQpIFtsaXN0cmVmcyAkaWRdCiAJfQogICAgIH0KLSAgICBzZXQgb2xkbWFpbmhlYWQgJG1haW5oZWFkCisgICAgc2V0IG9sZG1haW5oZWFkICRtYWluaGVhZGlkCiAgICAgcmVhZHJlZnMKICAgICBjaGFuZ2VkcmVmcwogICAgIHNldCByZWZpZHMgW2xzb3J0IC11bmlxdWUgW2NvbmNhdCAkcmVmaWRzIFthcnJheSBuYW1lcyBpZHRhZ3NdIFwKIAkJCVthcnJheSBuYW1lcyBpZGhlYWRzXSBbYXJyYXkgbmFtZXMgaWRvdGhlcnJlZnNdXV0KICAgICBmb3JlYWNoIGlkICRyZWZpZHMgewogCXNldCB2IFtsaXN0cmVmcyAkaWRdCi0JaWYgeyFbaW5mbyBleGlzdHMgcmVmKCRpZCldIHx8ICRyZWYoJGlkKSAhPSAkdiB8fAotCSAgICAoJGlkIGVxICRvbGRtYWluaGVhZCAmJiAkaWQgbmUgJG1haW5oZWFkKSB8fAotCSAgICAoJGlkIGVxICRtYWluaGVhZCAmJiAkaWQgbmUgJG9sZG1haW5oZWFkKX0geworCWlmIHshW2luZm8gZXhpc3RzIHJlZigkaWQpXSB8fCAkcmVmKCRpZCkgIT0gJHZ9IHsKIAkgICAgcmVkcmF3dGFncyAkaWQKIAl9CiAgICAgfQorICAgIGlmIHskb2xkbWFpbmhlYWQgbmUgJG1haW5oZWFkaWR9IHsKKwlyZWRyYXd0YWdzICRvbGRtYWluaGVhZAorCXJlZHJhd3RhZ3MgJG1haW5oZWFkaWQKKyAgICB9CiAgICAgcnVuIHJlZmlsbF9yZWZsaXN0CiB9CiAKQEAgLTc4NTgsOSArOTA3OCwxNSBAQAogCiBwcm9jIGRvcXVpdCB7fSB7CiAgICAgZ2xvYmFsIHN0b3BwZWQKKyAgICBnbG9iYWwgZ2l0a3RtcGRpcgorCiAgICAgc2V0IHN0b3BwZWQgMTAwCiAgICAgc2F2ZXN0dWZmIC4KICAgICBkZXN0cm95IC4KKworICAgIGlmIHtbaW5mbyBleGlzdHMgZ2l0a3RtcGRpcl19IHsKKwljYXRjaCB7ZmlsZSBkZWxldGUgLWZvcmNlICRnaXRrdG1wZGlyfQorICAgIH0KIH0KIAogcHJvYyBta2ZvbnRkaXNwIHtmb250IHRvcCB3aGljaH0gewpAQCAtNzk4OSw3ICs5MjE1LDcgQEAKICAgICBnbG9iYWwgbWF4d2lkdGggbWF4Z3JhcGhwY3QKICAgICBnbG9iYWwgb2xkcHJlZnMgcHJlZnN0b3Agc2hvd25lYXJ0YWdzIHNob3dsb2NhbGNoYW5nZXMKICAgICBnbG9iYWwgYmdjb2xvciBmZ2NvbG9yIGN0ZXh0IGRpZmZjb2xvcnMgc2VsZWN0Ymdjb2xvcgotICAgIGdsb2JhbCB0YWJzdG9wIGxpbWl0ZGlmZnMgYXV0b3NlbGVjdAorICAgIGdsb2JhbCB0YWJzdG9wIGxpbWl0ZGlmZnMgYXV0b3NlbGVjdCBleHRkaWZmdG9vbAogCiAgICAgc2V0IHRvcCAuZ2l0a3ByZWZzCiAgICAgc2V0IHByZWZzdG9wICR0b3AKQEAgLTgwNDEsNiArOTI2NywxNSBAQAogICAgIHBhY2sgJHRvcC5sZGlmZi5iICR0b3AubGRpZmYubCAtc2lkZSBsZWZ0CiAgICAgZ3JpZCB4ICR0b3AubGRpZmYgLXN0aWNreSB3CiAKKyAgICBlbnRyeSAkdG9wLmV4dGRpZmZ0IC10ZXh0dmFyaWFibGUgZXh0ZGlmZnRvb2wKKyAgICBmcmFtZSAkdG9wLmV4dGRpZmZmCisgICAgbGFiZWwgJHRvcC5leHRkaWZmZi5sIC10ZXh0IFttYyAiRXh0ZXJuYWwgZGlmZiB0b29sIiBdIC1mb250IG9wdGlvbmZvbnQgXAorCS1wYWR4IDEwCisgICAgYnV0dG9uICR0b3AuZXh0ZGlmZmYuYiAtdGV4dCBbbWMgIkNob29zZS4uLiJdIC1mb250IG9wdGlvbmZvbnQgXAorCS1jb21tYW5kIGNob29zZV9leHRkaWZmCisgICAgcGFjayAkdG9wLmV4dGRpZmZmLmwgJHRvcC5leHRkaWZmZi5iIC1zaWRlIGxlZnQKKyAgICBncmlkIHggJHRvcC5leHRkaWZmZiAkdG9wLmV4dGRpZmZ0IC1zdGlja3kgdworCiAgICAgbGFiZWwgJHRvcC5jZGlzcCAtdGV4dCBbbWMgIkNvbG9yczogcHJlc3MgdG8gY2hvb3NlIl0KICAgICBncmlkICR0b3AuY2Rpc3AgLSAtc3RpY2t5IHcgLXBhZHkgMTAKICAgICBsYWJlbCAkdG9wLmJnIC1wYWR4IDQwIC1yZWxpZWYgc3VuayAtYmFja2dyb3VuZCAkYmdjb2xvcgpAQCAtODA4OCw2ICs5MzIzLDE1IEBACiAgICAgYmluZCAkdG9wIDxWaXNpYmlsaXR5PiAiZm9jdXMgJHRvcC5idXRzLm9rIgogfQogCitwcm9jIGNob29zZV9leHRkaWZmIHt9IHsKKyAgICBnbG9iYWwgZXh0ZGlmZnRvb2wKKworICAgIHNldCBwcm9nIFt0a19nZXRPcGVuRmlsZSAtdGl0bGUgIkV4dGVybmFsIGRpZmYgdG9vbCIgLW11bHRpcGxlIGZhbHNlXQorICAgIGlmIHskcHJvZyBuZSB7fX0geworCXNldCBleHRkaWZmdG9vbCAkcHJvZworICAgIH0KK30KKwogcHJvYyBjaG9vc2Vjb2xvciB7diB2aSB3IHggY21kfSB7CiAgICAgZ2xvYmFsICR2CiAKQEAgLTg0NzksNyArOTcyMyw2IEBACiB9CiAKICMgZGVmYXVsdHMuLi4KLXNldCBkYXRlbW9kZSAwCiBzZXQgd3Jjb21jbWQgImdpdCBkaWZmLXRyZWUgLS1zdGRpbiAtcCAtLXByZXR0eSIKIAogc2V0IGdpdGVuY29kaW5nIHt9CkBAIC04NTE2LDYgKzk3NTksOCBAQAogc2V0IGRhdGV0aW1lZm9ybWF0ICIlWS0lbS0lZCAlSDolTTolUyIKIHNldCBhdXRvc2VsZWN0IDEKIAorc2V0IGV4dGRpZmZ0b29sICJtZWxkIgorCiBzZXQgY29sb3JzIHtncmVlbiByZWQgYmx1ZSBtYWdlbnRhIGRhcmtncmV5IGJyb3duIG9yYW5nZX0KIHNldCBiZ2NvbG9yIHdoaXRlCiBzZXQgZmdjb2xvciBibGFjawpAQCAtODUyNCw2ICs5NzY5LDggQEAKIHNldCBpZ25vcmVzcGFjZSAwCiBzZXQgc2VsZWN0Ymdjb2xvciBncmF5ODUKIAorc2V0IGNpcmNsZWNvbG9ycyB7d2hpdGUgYmx1ZSBncmF5IGJsdWUgYmx1ZX0KKwogIyMgRm9yIG1zZ2NhdCBsb2FkaW5nLCBmaXJzdCBsb2NhdGUgdGhlIGluc3RhbGxhdGlvbiBsb2NhdGlvbi4KIGlmIHsgW2luZm8gZXhpc3RzIDo6ZW52KEdJVEtfTVNHU0RJUildIH0gewogICAgICMjIE1zZ3NkaXIgd2FzIG1hbnVhbGx5IHNldCBpbiB0aGUgZW52aXJvbm1lbnQuCkBAIC04NTcwLDcgKzk4MTcsNiBAQAogICAgIGV4aXQgMQogfQogCi1zZXQgbWVyZ2Vvbmx5IDAKIHNldCByZXZ0cmVlYXJncyB7fQogc2V0IGNtZGxpbmVfZmlsZXMge30KIHNldCBpIDAKQEAgLTg1NzgsMTEgKzk4MjQsNiBAQAogZm9yZWFjaCBhcmcgJGFyZ3YgewogICAgIHN3aXRjaCAtZ2xvYiAtLSAkYXJnIHsKIAkiIiB7IH0KLQkiLWQiIHsgc2V0IGRhdGVtb2RlIDEgfQotCSItLW1lcmdlIiB7Ci0JICAgIHNldCBtZXJnZW9ubHkgMQotCSAgICBsYXBwZW5kIHJldnRyZWVhcmdzICRhcmcKLQl9CiAJIi0tIiB7CiAJICAgIHNldCBjbWRsaW5lX2ZpbGVzIFtscmFuZ2UgJGFyZ3YgW2V4cHIgeyRpICsgMX1dIGVuZF0KIAkgICAgYnJlYWsKQEAgLTg1OTgsNyArOTgzOSw3IEBACiB9CiAKIGlmIHskaSA+PSBbbGxlbmd0aCAkYXJndl0gJiYgJHJldnRyZWVhcmdzIG5lIHt9fSB7Ci0gICAgIyBubyAtLSBvbiBjb21tYW5kIGxpbmUsIGJ1dCBzb21lIGFyZ3VtZW50cyAob3RoZXIgdGhhbiAtZCkKKyAgICAjIG5vIC0tIG9uIGNvbW1hbmQgbGluZSwgYnV0IHNvbWUgYXJndW1lbnRzIChvdGhlciB0aGFuIC0tYXJnc2NtZCkKICAgICBpZiB7W2NhdGNoIHsKIAlzZXQgZiBbZXZhbCBleGVjIGdpdCByZXYtcGFyc2UgLS1uby1yZXZzIC0tbm8tZmxhZ3MgJHJldnRyZWVhcmdzXQogCXNldCBjbWRsaW5lX2ZpbGVzIFtzcGxpdCAkZiAiXG4iXQpAQCAtODYyNiw0MiArOTg2Nyw5IEBACiAgICAgfQogfQogCi1pZiB7JG1lcmdlb25seX0gewotICAgICMgZmluZCB0aGUgbGlzdCBvZiB1bm1lcmdlZCBmaWxlcwotICAgIHNldCBtbGlzdCB7fQotICAgIHNldCBucl91bm1lcmdlZCAwCi0gICAgaWYge1tjYXRjaCB7Ci0Jc2V0IGZkIFtvcGVuICJ8IGdpdCBscy1maWxlcyAtdSIgcl0KLSAgICB9IGVycl19IHsKLQlzaG93X2Vycm9yIHt9IC4gIlttYyAiQ291bGRuJ3QgZ2V0IGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXM6Il0gJGVyciIKLQlleGl0IDEKLSAgICB9Ci0gICAgd2hpbGUge1tnZXRzICRmZCBsaW5lXSA+PSAwfSB7Ci0Jc2V0IGkgW3N0cmluZyBmaXJzdCAiXHQiICRsaW5lXQotCWlmIHskaSA8IDB9IGNvbnRpbnVlCi0Jc2V0IGZuYW1lIFtzdHJpbmcgcmFuZ2UgJGxpbmUgW2V4cHIgeyRpKzF9XSBlbmRdCi0JaWYge1tsc2VhcmNoIC1leGFjdCAkbWxpc3QgJGZuYW1lXSA+PSAwfSBjb250aW51ZQotCWluY3IgbnJfdW5tZXJnZWQKLQlpZiB7JGNtZGxpbmVfZmlsZXMgZXEge30gfHwgW3BhdGhfZmlsdGVyICRjbWRsaW5lX2ZpbGVzICRmbmFtZV19IHsKLQkgICAgbGFwcGVuZCBtbGlzdCAkZm5hbWUKLQl9Ci0gICAgfQotICAgIGNhdGNoIHtjbG9zZSAkZmR9Ci0gICAgaWYgeyRtbGlzdCBlcSB7fX0gewotCWlmIHskbnJfdW5tZXJnZWQgPT0gMH0gewotCSAgICBzaG93X2Vycm9yIHt9IC4gW21jICJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0XAotCQkJICAgICBubyBmaWxlcyBhcmUgdW5tZXJnZWQuIl0KLQl9IGVsc2UgewotCSAgICBzaG93X2Vycm9yIHt9IC4gW21jICJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0XAotCQkJICAgICBubyB1bm1lcmdlZCBmaWxlcyBhcmUgd2l0aGluIGZpbGUgbGltaXQuIl0KLQl9Ci0JZXhpdCAxCi0gICAgfQotICAgIHNldCBjbWRsaW5lX2ZpbGVzICRtbGlzdAotfQotCiBzZXQgbnVsbGlkICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgogc2V0IG51bGxpZDIgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiCitzZXQgbnVsbGZpbGUgIi9kZXYvbnVsbCIKIAogc2V0IGhhdmVfdGs4NSBbZXhwciB7W3BhY2thZ2UgdmNvbXBhcmUgJHRrX3ZlcnNpb24gIjguNSJdID49IDB9XQogCkBAIC04NjkzLDEyICs5OTAxLDEzIEBACiBzZXQgdmlld2FyZ3MoMCkge30KIHNldCB2aWV3YXJnc2NtZCgwKSB7fQogCitzZXQgc2VsZWN0ZWRsaW5lIHt9CitzZXQgbnVtY29tbWl0cyAwCitzZXQgbG9naW5zdGFuY2UgMAogc2V0IGNtZGxpbmVvayAwCiBzZXQgc3RvcHBlZCAwCiBzZXQgc3R1ZmZzYXZlZCAwCiBzZXQgcGF0Y2hudW0gMAotc2V0IGxvY2FsaXJvdyAtMQotc2V0IGxvY2FsZnJvdyAtMQogc2V0IGxzZXJpYWwgMAogc2V0IGlzd29ya3RyZWUgW2V4cHIge1tleGVjIGdpdCByZXYtcGFyc2UgLS1pcy1pbnNpZGUtd29yay10cmVlXSA9PSAidHJ1ZSJ9XQogc2V0Y29vcmRzCkBAIC04NzE4LDYgKzk5MjcsNyBAQAogICAgIHNldCB2aWV3YXJncygxKSAkcmV2dHJlZWFyZ3MKICAgICBzZXQgdmlld2FyZ3NjbWQoMSkgJHJldnRyZWVhcmdzY21kCiAgICAgc2V0IHZpZXdwZXJtKDEpIDAKKyAgICBzZXQgdmRhdGVtb2RlKDEpIDAKICAgICBhZGR2aWV3bWVudSAxCiAgICAgLmJhci52aWV3IGVudHJ5Y29uZiBbbWMgIkVkaXQgdmlldy4uLiJdIC1zdGF0ZSBub3JtYWwKICAgICAuYmFyLnZpZXcgZW50cnljb25mIFttYyAiRGVsZXRlIHZpZXciXSAtc3RhdGUgbm9ybWFsCmRpZmYgLS1naXQgYS9naXRrLWdpdC9wby9kZS5wbyBiL2dpdGstZ2l0L3BvL2RlLnBvCmluZGV4IDVlZTJmY2EuLmI5ODY3YmYgMTAwNjQ0Ci0tLSBhL2dpdGstZ2l0L3BvL2RlLnBvCisrKyBiL2dpdGstZ2l0L3BvL2RlLnBvCkBAIC03LDI0OSArNywyNTMgQEAKIG1zZ3N0ciAiIgogIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0LWd1aVxuIgogIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKLSJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwOC0wMS0wOSAyMjoyMCswMTAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAwOC0wMS0wOSAyMjoyMSswMTAwXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMDgtMDUtMDEgMTE6NTQrMDIwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDgtMDUtMDIgMjE6MTIrMDIwMFxuIgogIkxhc3QtVHJhbnNsYXRvcjogQ2hyaXN0aWFuIFN0aW1taW5nIDxzdGltbWluZ0B0dWhoLmRlPlxuIgogIkxhbmd1YWdlLVRlYW06IEdlcm1hblxuIgogIk1JTUUtVmVyc2lvbjogMS4wXG4iCiAiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCiAiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgogCi0jOiBnaXRrOjEwMQorIzogZ2l0azoxMTEKIG1zZ2lkICJFcnJvciBleGVjdXRpbmcgZ2l0IHJldi1saXN0OiIKIG1zZ3N0ciAiRmVobGVyIGJlaW0gQXVzZsO8aHJlbiB2b24gZ2l0LXJldi1saXN0OiIKIAotIzogZ2l0azoxMTQKKyM6IGdpdGs6MTI0CiBtc2dpZCAiUmVhZGluZyIKIG1zZ3N0ciAiTGVzZW4iCiAKLSM6IGdpdGs6MTQxIGdpdGs6MjE0MworIzogZ2l0azoxNTEgZ2l0azoyMTkxCiBtc2dpZCAiUmVhZGluZyBjb21taXRzLi4uIgogbXNnc3RyICJWZXJzaW9uZW4gbGVzZW4uLi4iCiAKLSM6IGdpdGs6MjY0CisjOiBnaXRrOjI3NQogbXNnaWQgIkNhbid0IHBhcnNlIGdpdCBsb2cgb3V0cHV0OiIKLW1zZ3N0ciAiR2l0IGxvZyBBdXNnYWJlIGthbm4gbmljaHQgZXJrYW5udCB3ZXJkZW46IgorbXNnc3RyICJBdXNnYWJlIHZvbiBnaXQtbG9nIGthbm4gbmljaHQgZXJrYW5udCB3ZXJkZW46IgogCi0jOiBnaXRrOjM3NSBnaXRrOjIxNDcKKyM6IGdpdGs6Mzg2IGdpdGs6MjE5NQogbXNnaWQgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiCiBtc2dzdHIgIktlaW5lIFZlcnNpb25lbiBhdXNnZXfDpGhsdC4iCiAKLSM6IGdpdGs6NDg2CisjOiBnaXRrOjUwMAogbXNnaWQgIk5vIGNvbW1pdCBpbmZvcm1hdGlvbiBhdmFpbGFibGUiCiBtc2dzdHIgIktlaW5lIFZlcnNpb25zaW5mb3JtYXRpb24gdmVyZsO8Z2JhciIKIAotIzogZ2l0azo1ODUgZ2l0azo2MDcgZ2l0azoxOTA4IGdpdGs6NjM2NiBnaXRrOjc4NjYgZ2l0azo4MDIwCisjOiBnaXRrOjU5OSBnaXRrOjYyMSBnaXRrOjE5NTUgZ2l0azo2NDI0IGdpdGs6NzkyNCBnaXRrOjgwODMKIG1zZ2lkICJPSyIKIG1zZ3N0ciAiT2siCiAKLSM6IGdpdGs6NjA5IGdpdGs6MTkwOSBnaXRrOjYwNDYgZ2l0azo2MTE3IGdpdGs6NjIxOCBnaXRrOjYyNjQgZ2l0azo2MzY4Ci0jOiBnaXRrOjc4NjcgZ2l0azo4MDIxCisjOiBnaXRrOjYyMyBnaXRrOjE5NTYgZ2l0azo2MTA4IGdpdGs6NjE3OSBnaXRrOjYyNzYgZ2l0azo2MzIyIGdpdGs6NjQyNgorIzogZ2l0azo3OTI1IGdpdGs6ODA4NAogbXNnaWQgIkNhbmNlbCIKIG1zZ3N0ciAiQWJicmVjaGVuIgogCi0jOiBnaXRrOjY0NgorIzogZ2l0azo2NjEKIG1zZ2lkICJGaWxlIgogbXNnc3RyICJEYXRlaSIKIAotIzogZ2l0azo2NDgKKyM6IGdpdGs6NjYzCiBtc2dpZCAiVXBkYXRlIgogbXNnc3RyICJBa3R1YWxpc2llcmVuIgogCi0jOiBnaXRrOjY0OQorIzogZ2l0azo2NjQKIG1zZ2lkICJSZXJlYWQgcmVmZXJlbmNlcyIKIG1zZ3N0ciAiWndlaWdlIG5ldSBsYWRlbiIKIAotIzogZ2l0azo2NTAKKyM6IGdpdGs6NjY1CiBtc2dpZCAiTGlzdCByZWZlcmVuY2VzIgotbXNnc3RyICJad2VpZ2UgYXVmbGlzdGVuIgorbXNnc3RyICJad2VpZ2UvTWFya2llcnVuZ2VuIGF1Zmxpc3RlbiIKIAotIzogZ2l0azo2NTEKKyM6IGdpdGs6NjY2CiBtc2dpZCAiUXVpdCIKIG1zZ3N0ciAiQmVlbmRlbiIKIAotIzogZ2l0azo2NTMKKyM6IGdpdGs6NjY4CiBtc2dpZCAiRWRpdCIKIG1zZ3N0ciAiQmVhcmJlaXRlbiIKIAotIzogZ2l0azo2NTQKKyM6IGdpdGs6NjY5CiBtc2dpZCAiUHJlZmVyZW5jZXMiCiBtc2dzdHIgIkVpbnN0ZWxsdW5nZW4iCiAKLSM6IGdpdGs6NjU3CisjOiBnaXRrOjY3MiBnaXRrOjE4OTIKIG1zZ2lkICJWaWV3IgogbXNnc3RyICJBbnNpY2h0IgogCi0jOiBnaXRrOjY1OAorIzogZ2l0azo2NzMKIG1zZ2lkICJOZXcgdmlldy4uLiIKIG1zZ3N0ciAiTmV1ZSBBbnNpY2h0Li4uIgogCi0jOiBnaXRrOjY1OSBnaXRrOjIwODUgZ2l0azo4NjUxCisjOiBnaXRrOjY3NCBnaXRrOjIxMzMgZ2l0azo4NzIzCiBtc2dpZCAiRWRpdCB2aWV3Li4uIgogbXNnc3RyICJBbnNpY2h0IGJlYXJiZWl0ZW4uLi4iCiAKLSM6IGdpdGs6NjYxIGdpdGs6MjA4NiBnaXRrOjg2NTIKKyM6IGdpdGs6Njc2IGdpdGs6MjEzNCBnaXRrOjg3MjQKIG1zZ2lkICJEZWxldGUgdmlldyIKIG1zZ3N0ciAiQW5zaWNodCBsw7ZzY2hlbiIKIAotIzogZ2l0azo2NjMKKyM6IGdpdGs6Njc4CiBtc2dpZCAiQWxsIGZpbGVzIgogbXNnc3RyICJBbGxlIERhdGVpZW4iCiAKLSM6IGdpdGs6NjY3CisjOiBnaXRrOjY4MgogbXNnaWQgIkhlbHAiCiBtc2dzdHIgIkhpbGZlIgogCi0jOiBnaXRrOjY2OCBnaXRrOjEyODAKKyM6IGdpdGs6NjgzIGdpdGs6MTMxNwogbXNnaWQgIkFib3V0IGdpdGsiCiBtc2dzdHIgIsOcYmVyIGdpdGsiCiAKLSM6IGdpdGs6NjY5CisjOiBnaXRrOjY4NAogbXNnaWQgIktleSBiaW5kaW5ncyIKIG1zZ3N0ciAiVGFzdGVua8O8cnplbCIKIAotIzogZ2l0azo3MjYKKyM6IGdpdGs6NzQxCiBtc2dpZCAiU0hBMSBJRDogIgogbXNnc3RyICJTSEExOiIKIAotIzogZ2l0azo3NzYKKyM6IGdpdGs6NzkxCiBtc2dpZCAiRmluZCIKIG1zZ3N0ciAiU3VjaGUiCiAKLSM6IGdpdGs6Nzc3CisjOiBnaXRrOjc5MgogbXNnaWQgIm5leHQiCiBtc2dzdHIgIm7DpGNoc3RlIgogCi0jOiBnaXRrOjc3OAorIzogZ2l0azo3OTMKIG1zZ2lkICJwcmV2IgogbXNnc3RyICJ2b3JpZ2UiCiAKLSM6IGdpdGs6Nzc5CisjOiBnaXRrOjc5NAogbXNnaWQgImNvbW1pdCIKIG1zZ3N0ciAiVmVyc2lvbiIKIAotIzogZ2l0azo3ODIgZ2l0azo3ODQgZ2l0azoyMzA4IGdpdGs6MjMzMSBnaXRrOjIzNTUgZ2l0azo0MjU3IGdpdGs6NDMyMAorIzogZ2l0azo3OTcgZ2l0azo3OTkgZ2l0azoyMzU2IGdpdGs6MjM3OSBnaXRrOjI0MDMgZ2l0azo0MzA2IGdpdGs6NDM2OQogbXNnaWQgImNvbnRhaW5pbmc6IgogbXNnc3RyICJlbnRoYWx0ZW5kOiIKIAotIzogZ2l0azo3ODUgZ2l0azoxNzQxIGdpdGs6MTc0NiBnaXRrOjIzODMKKyM6IGdpdGs6ODAwIGdpdGs6MTc3OCBnaXRrOjE3ODMgZ2l0azoyNDMxCiBtc2dpZCAidG91Y2hpbmcgcGF0aHM6IgogbXNnc3RyICJQZmFkIGJldHJlZmZlbmQ6IgogCi0jOiBnaXRrOjc4NiBnaXRrOjIzODgKKyM6IGdpdGs6ODAxIGdpdGs6MjQzNgogbXNnaWQgImFkZGluZy9yZW1vdmluZyBzdHJpbmc6IgotbXNnc3RyICJTdHJpbmcgZGF6dS9sw7ZzY2hlbjoiCittc2dzdHIgIlplaWNoZW5rZXR0ZSDDpG5kZXJuZDoiCiAKLSM6IGdpdGs6Nzk1IGdpdGs6Nzk3CisjOiBnaXRrOjgxMCBnaXRrOjgxMgogbXNnaWQgIkV4YWN0IgogbXNnc3RyICJFeGFrdCIKIAotIzogZ2l0azo3OTcgZ2l0azoyNDY2IGdpdGs6NDIyNQorIzogZ2l0azo4MTIgZ2l0azoyNTE0IGdpdGs6NDI3NAogbXNnaWQgIklnbkNhc2UiCiBtc2dzdHIgIktlaW4gR3Jvw58vS2xlaW4iCiAKLSM6IGdpdGs6Nzk3IGdpdGs6MjM1NyBnaXRrOjI0NjQgZ2l0azo0MjIxCisjOiBnaXRrOjgxMiBnaXRrOjI0MDUgZ2l0azoyNTEyIGdpdGs6NDI3MAogbXNnaWQgIlJlZ2V4cCIKIG1zZ3N0ciAiUmVnZXhwIgogCi0jOiBnaXRrOjc5OSBnaXRrOjgwMCBnaXRrOjI0ODUgZ2l0azoyNTE1IGdpdGs6MjUyMiBnaXRrOjQzMzEgZ2l0azo0Mzg3CisjOiBnaXRrOjgxNCBnaXRrOjgxNSBnaXRrOjI1MzMgZ2l0azoyNTYzIGdpdGs6MjU3MCBnaXRrOjQzODAgZ2l0azo0NDM2CiBtc2dpZCAiQWxsIGZpZWxkcyIKIG1zZ3N0ciAiQWxsZSBGZWxkZXIiCiAKLSM6IGdpdGs6ODAwIGdpdGs6MjQ4MyBnaXRrOjI1MTUgZ2l0azo0Mjg3CisjOiBnaXRrOjgxNSBnaXRrOjI1MzEgZ2l0azoyNTYzIGdpdGs6NDMzNgogbXNnaWQgIkhlYWRsaW5lIgogbXNnc3RyICLDnGJlcnNjaHJpZnQiCiAKLSM6IGdpdGs6ODAxIGdpdGs6MjQ4MyBnaXRrOjQyODcgZ2l0azo0Mzg3IGdpdGs6NDc3NQorIzogZ2l0azo4MTYgZ2l0azoyNTMxIGdpdGs6NDMzNiBnaXRrOjQ0MzYgZ2l0azo0ODI3CiBtc2dpZCAiQ29tbWVudHMiCiBtc2dzdHIgIkJlc2NocmVpYnVuZyIKIAotIzogZ2l0azo4MDEgZ2l0azoyNDgzIGdpdGs6MjQ4NyBnaXRrOjI1MjIgZ2l0azo0Mjg3IGdpdGs6NDcxMSBnaXRrOjU4OTUKLSM6IGdpdGs6NTkxMAorIzogZ2l0azo4MTYgZ2l0azoyNTMxIGdpdGs6MjUzNSBnaXRrOjI1NzAgZ2l0azo0MzM2IGdpdGs6NDc2MyBnaXRrOjU5NTcKKyM6IGdpdGs6NTk3MgogbXNnaWQgIkF1dGhvciIKIG1zZ3N0ciAiQXV0b3IiCiAKLSM6IGdpdGs6ODAxIGdpdGs6MjQ4MyBnaXRrOjQyODcgZ2l0azo0NzEzCisjOiBnaXRrOjgxNiBnaXRrOjI1MzEgZ2l0azo0MzM2IGdpdGs6NDc2NQogbXNnaWQgIkNvbW1pdHRlciIKIG1zZ3N0ciAiRWludHJhZ2VuZGVyIgogCi0jOiBnaXRrOjgyOQorIzogZ2l0azo4NDUKIG1zZ2lkICJTZWFyY2giCiBtc2dzdHIgIlN1Y2hlIgogCi0jOiBnaXRrOjgzNgorIzogZ2l0azo4NTIKIG1zZ2lkICJEaWZmIgogbXNnc3RyICJWZXJnbGVpY2giCiAKLSM6IGdpdGs6ODM4CisjOiBnaXRrOjg1NAogbXNnaWQgIk9sZCB2ZXJzaW9uIgogbXNnc3RyICJBbHRlIFZlcnNpb24iCiAKLSM6IGdpdGs6ODQwCisjOiBnaXRrOjg1NgogbXNnaWQgIk5ldyB2ZXJzaW9uIgogbXNnc3RyICJOZXVlIFZlcnNpb24iCiAKLSM6IGdpdGs6ODQyCisjOiBnaXRrOjg1OAogbXNnaWQgIkxpbmVzIG9mIGNvbnRleHQiCiBtc2dzdHIgIktvbnRleHR6ZWlsZW4iCiAKLSM6IGdpdGs6OTAwCisjOiBnaXRrOjg2OAorbXNnaWQgIklnbm9yZSBzcGFjZSBjaGFuZ2UiCittc2dzdHIgIkxlZXJ6ZWljaGVuw6RuZGVydW5nZW4gaWdub3JpZXJlbiIKKworIzogZ2l0azo5MjYKIG1zZ2lkICJQYXRjaCIKIG1zZ3N0ciAiUGF0Y2giCiAKLSM6IGdpdGs6OTAyCisjOiBnaXRrOjkyOAogbXNnaWQgIlRyZWUiCiBtc2dzdHIgIkJhdW0iCiAKLSM6IGdpdGs6MTAxOCBnaXRrOjEwMzMgZ2l0azo1OTYxCisjOiBnaXRrOjEwNTMgZ2l0azoxMDY4IGdpdGs6NjAyMwogbXNnaWQgIkRpZmYgdGhpcyAtPiBzZWxlY3RlZCIKIG1zZ3N0ciAiVmVyZ2xlaWNoIGRpZXNlIC0+IGdld8OkaGx0ZSIKIAotIzogZ2l0azoxMDIwIGdpdGs6MTAzNSBnaXRrOjU5NjIKKyM6IGdpdGs6MTA1NSBnaXRrOjEwNzAgZ2l0azo2MDI0CiBtc2dpZCAiRGlmZiBzZWxlY3RlZCAtPiB0aGlzIgogbXNnc3RyICJWZXJnbGVpY2ggZ2V3w6RobHRlIC0+IGRpZXNlIgogCi0jOiBnaXRrOjEwMjIgZ2l0azoxMDM3IGdpdGs6NTk2MworIzogZ2l0azoxMDU3IGdpdGs6MTA3MiBnaXRrOjYwMjUKIG1zZ2lkICJNYWtlIHBhdGNoIgogbXNnc3RyICJQYXRjaCBlcnN0ZWxsZW4iCiAKLSM6IGdpdGs6MTAyMyBnaXRrOjYxMDEKKyM6IGdpdGs6MTA1OCBnaXRrOjYxNjMKIG1zZ2lkICJDcmVhdGUgdGFnIgogbXNnc3RyICJNYXJraWVydW5nIGVyc3RlbGxlbiIKIAotIzogZ2l0azoxMDI0IGdpdGs6NjE5OAorIzogZ2l0azoxMDU5IGdpdGs6NjI1NgogbXNnaWQgIldyaXRlIGNvbW1pdCB0byBmaWxlIgogbXNnc3RyICJWZXJzaW9uIGluIERhdGVpIHNjaHJlaWJlbiIKIAotIzogZ2l0azoxMDI1IGdpdGs6NjI1MgorIzogZ2l0azoxMDYwIGdpdGs6NjMxMAogbXNnaWQgIkNyZWF0ZSBuZXcgYnJhbmNoIgogbXNnc3RyICJOZXVlbiBad2VpZyBlcnN0ZWxsZW4iCiAKLSM6IGdpdGs6MTAyNgorIzogZ2l0azoxMDYxCiBtc2dpZCAiQ2hlcnJ5LXBpY2sgdGhpcyBjb21taXQiCiBtc2dzdHIgIkRpZXNlIFZlcnNpb24gcGZsw7xja2VuIgogCi0jOiBnaXRrOjEwMjgKKyM6IGdpdGs6MTA2MwogbXNnaWQgIlJlc2V0IEhFQUQgYnJhbmNoIHRvIGhlcmUiCiBtc2dzdHIgIkhFQUQtWndlaWcgYXVmIGRpZXNlIFZlcnNpb24genVyw7xja3NldHplbiIKIAotIzogZ2l0azoxMDQ0CisjOiBnaXRrOjEwNzkKIG1zZ2lkICJDaGVjayBvdXQgdGhpcyBicmFuY2giCiBtc2dzdHIgIkF1ZiBkaWVzZW4gWndlaWcgdW1zdGVsbGVuIgogCi0jOiBnaXRrOjEwNDYKKyM6IGdpdGs6MTA4MQogbXNnaWQgIlJlbW92ZSB0aGlzIGJyYW5jaCIKIG1zZ3N0ciAiWndlaWcgbMO2c2NoZW4iCiAKLSM6IGdpdGs6MTA1MgorIzogZ2l0azoxMDg3CiBtc2dpZCAiSGlnaGxpZ2h0IHRoaXMgdG9vIgogbXNnc3RyICJEaWVzZW4gYXVjaCBoZXJ2b3JoZWJlbiIKIAotIzogZ2l0azoxMDU0CisjOiBnaXRrOjEwODkKIG1zZ2lkICJIaWdobGlnaHQgdGhpcyBvbmx5IgogbXNnc3RyICJOdXIgZGllc2VuIGhlcnZvcmhlYmVuIgogCi0jOiBnaXRrOjEyODEKKyM6IGdpdGs6MTMxOAogbXNnaWQgIiIKICJcbiIKICJHaXRrIC0gYSBjb21taXQgdmlld2VyIGZvciBnaXRcbiIKQEAgLTI2NywyNjIgKzI3MSw0MjUgQEAKICJMaWNlbnNlXG4iCiAiICAgICAgICAiCiAKLSM6IGdpdGs6MTI4OSBnaXRrOjEzNTAgZ2l0azo2NTI0CisjOiBnaXRrOjEzMjYgZ2l0azoxMzg3IGdpdGs6NjU4MgogbXNnaWQgIkNsb3NlIgogbXNnc3RyICJTY2hsaWXDn2VuIgogCi0jOiBnaXRrOjEzMDgKKyM6IGdpdGs6MTM0NQogbXNnaWQgIkdpdGsga2V5IGJpbmRpbmdzIgogbXNnc3RyICJHaXRrIFRhc3RhdHVyYmVsZWd1bmciCiAKLSM6IGdpdGs6MTg1OAorIzogZ2l0azoxMzQ3Cittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3M6IgorbXNnc3RyICJHaXRrIFRhc3RhdHVyYmVsZWd1bmc6IgorCisjOiBnaXRrOjEzNDkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUT5cdFx0UXVpdCIKK21zZ3N0ciAiPCVzLVE+XHRcdEJlZW5kZW4iCisKKyM6IGdpdGs6MTM1MAorbXNnaWQgIjxIb21lPlx0XHRNb3ZlIHRvIGZpcnN0IGNvbW1pdCIKK21zZ3N0ciAiPFBvczE+XHRcdFp1ciBuZXVlc3RlbiBWZXJzaW9uIHNwcmluZ2VuIgorCisjOiBnaXRrOjEzNTEKK21zZ2lkICI8RW5kPlx0XHRNb3ZlIHRvIGxhc3QgY29tbWl0IgorbXNnc3RyICI8RW5kZT5cdFx0WnVyIMOkbHRlc3RlbiBWZXJzaW9uIHNwcmluZ2VuIgorCisjOiBnaXRrOjEzNTIKK21zZ2lkICI8VXA+LCBwLCBpXHRNb3ZlIHVwIG9uZSBjb21taXQiCittc2dzdHIgIjxIb2NoPiwgcCwgaVx0TsOkY2hzdGUgbmV1ZXJlIFZlcnNpb24iCisKKyM6IGdpdGs6MTM1MworbXNnaWQgIjxEb3duPiwgbiwga1x0TW92ZSBkb3duIG9uZSBjb21taXQiCittc2dzdHIgIjxSdW50ZXI+LCBuLCBrXHROw6RjaHN0ZSDDpGx0ZXJlIFZlcnNpb24iCisKKyM6IGdpdGs6MTM1NAorbXNnaWQgIjxMZWZ0Piwgeiwgalx0R28gYmFjayBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxMaW5rcz4sIHosIGpcdEVpbmUgVmVyc2lvbiB6dXLDvGNrZ2VoZW4iCisKKyM6IGdpdGs6MTM1NQorbXNnaWQgIjxSaWdodD4sIHgsIGxcdEdvIGZvcndhcmQgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8UmVjaHRzPiwgeCwgbFx0RWluZSBWZXJzaW9uIHdlaXRlcmdlaGVuIgorCisjOiBnaXRrOjEzNTYKK21zZ2lkICI8UGFnZVVwPlx0TW92ZSB1cCBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPEJpbGRIb2NoPlx0RWluZSBTZWl0ZSBuYWNoIG9iZW4gYmzDpHR0ZXJuIgorCisjOiBnaXRrOjEzNTcKK21zZ2lkICI8UGFnZURvd24+XHRNb3ZlIGRvd24gb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCittc2dzdHIgIjxCaWxkUnVudGVyPlx0RWluZSBTZWl0ZSBuYWNoIHVudGVuIGJsw6R0dGVybiIKKworIzogZ2l0azoxMzU4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUhvbWU+XHRTY3JvbGwgdG8gdG9wIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtUG9zMT5cdFp1bSBvYmVyZW4gRW5kZSBkZXIgVmVyc2lvbnNsaXN0ZSBibMOkdHRlcm4iCisKKyM6IGdpdGs6MTM1OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1FbmQ+XHRTY3JvbGwgdG8gYm90dG9tIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtRW5kZT5cdFp1bSB1bnRlcmVuIEVuZGUgZGVyIFZlcnNpb25zbGlzdGUgYmzDpHR0ZXJuIgorCisjOiBnaXRrOjEzNjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIGxpbmUiCittc2dzdHIgIjwlcy1Ib2NoPlx0VmVyc2lvbnNsaXN0ZSBlaW5lIFplaWxlIG5hY2ggb2JlbiBibMOkdHRlcm4iCisKKyM6IGdpdGs6MTM2MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Eb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIGxpbmUiCittc2dzdHIgIjwlcy1SdW50ZXI+XHRWZXJzaW9uc2xpc3RlIGVpbmUgWmVpbGUgbmFjaCB1bnRlbiBibMOkdHRlcm4iCisKKyM6IGdpdGs6MTM2MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1QYWdlVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIHBhZ2UiCittc2dzdHIgIjwlcy1CaWxkSG9jaD5cdFZlcnNpb25zbGlzdGUgZWluZSBTZWl0ZSBob2NoIGJsw6R0dGVybiIKKworIzogZ2l0azoxMzYzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VEb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjwlcy1CaWxkUnVudGVyPlx0VmVyc2lvbnNsaXN0ZSBlaW5lIFNlaXRlIG5hY2ggdW50ZW4gYmzDpHR0ZXJuIgorCisjOiBnaXRrOjEzNjQKK21zZ2lkICI8U2hpZnQtVXA+XHRGaW5kIGJhY2t3YXJkcyAodXB3YXJkcywgbGF0ZXIgY29tbWl0cykiCittc2dzdHIgIjxVbXNjaGFsdC1Ib2NoPlx0UsO8Y2t3w6RydHMgc3VjaGVuIChuYWNoIG9iZW47IG5ldWVyZSBWZXJzaW9uZW4pIgorCisjOiBnaXRrOjEzNjUKK21zZ2lkICI8U2hpZnQtRG93bj5cdEZpbmQgZm9yd2FyZHMgKGRvd253YXJkcywgZWFybGllciBjb21taXRzKSIKK21zZ3N0ciAiPFVtc2NoYWx0LVJ1bnRlcj4gU3VjaGVuIChuYWNoIHVudGVuOyDDpGx0ZXJlIFZlcnNpb25lbikiCisKKyM6IGdpdGs6MTM2NgorbXNnaWQgIjxEZWxldGU+LCBiXHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8RW50Zj4sIGJcdFx0VmVyZ2xlaWNoIGVpbmUgU2VpdGUgbmFjaCBvYmVuIGJsw6R0dGVybiIKKworIzogZ2l0azoxMzY3Cittc2dpZCAiPEJhY2tzcGFjZT5cdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxMw7ZzY2h0YXN0ZT5cdFZlcmdsZWljaCBlaW5lIFNlaXRlIG5hY2ggb2JlbiBibMOkdHRlcm4iCisKKyM6IGdpdGs6MTM2OAorbXNnaWQgIjxTcGFjZT5cdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIG9uZSBwYWdlIgorbXNnc3RyICI8TGVlcnRhc3RlPlx0VmVyZ2xlaWNoIGVpbmUgU2VpdGUgbmFjaCB1bnRlbiBibMOkdHRlcm4iCisKKyM6IGdpdGs6MTM2OQorbXNnaWQgInVcdFx0U2Nyb2xsIGRpZmYgdmlldyB1cCAxOCBsaW5lcyIKK21zZ3N0ciAidVx0XHRWZXJnbGVpY2ggdW0gMTggWmVpbGVuIG5hY2ggb2JlbiAowrt1cMKrKSBibMOkdHRlcm4iCisKKyM6IGdpdGs6MTM3MAorbXNnaWQgImRcdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIDE4IGxpbmVzIgorbXNnc3RyICJkXHRcdFZlcmdsZWljaCB1bSAxOCBaZWlsZW4gbmFjaCB1bnRlbiAowrtkb3duwqspIGJsw6R0dGVybiIKKworIzogZ2l0azoxMzcxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUY+XHRcdEZpbmQiCittc2dzdHIgIjwlcy1GPlx0XHRTdWNoZW4iCisKKyM6IGdpdGs6MTM3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1HPlx0XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjwlcy1HPlx0XHRXZWl0ZXJzdWNoZW4iCisKKyM6IGdpdGs6MTM3MworbXNnaWQgIjxSZXR1cm4+XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjxFaW5nYWJldGFzdGU+XHRXZWl0ZXJzdWNoZW4iCisKKyM6IGdpdGs6MTM3NAorbXNnaWQgIi9cdFx0TW92ZSB0byBuZXh0IGZpbmQgaGl0LCBvciByZWRvIGZpbmQiCittc2dzdHIgIi9cdFx0V2VpdGVyc3VjaGVuIG9kZXIgbmV1ZSBTdWNoZSBiZWdpbm5lbiIKKworIzogZ2l0azoxMzc1Cittc2dpZCAiP1x0XHRNb3ZlIHRvIHByZXZpb3VzIGZpbmQgaGl0IgorbXNnc3RyICI/XHRcdFLDvGNrd8OkcnRzIHdlaXRlcnN1Y2hlbiIKKworIzogZ2l0azoxMzc2Cittc2dpZCAiZlx0XHRTY3JvbGwgZGlmZiB2aWV3IHRvIG5leHQgZmlsZSIKK21zZ3N0ciAiZlx0XHRWZXJnbGVpY2ggenVyIG7DpGNoc3RlbiBEYXRlaSAowrtmaWxlwqspIGJsw6R0dGVybiIKKworIzogZ2l0azoxMzc3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVM+XHRcdFNlYXJjaCBmb3IgbmV4dCBoaXQgaW4gZGlmZiB2aWV3IgorbXNnc3RyICI8JXMtUz5cdFx0V2VpdGVyc3VjaGVuIGltIFZlcmdsZWljaCIKKworIzogZ2l0azoxMzc4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVI+XHRcdFNlYXJjaCBmb3IgcHJldmlvdXMgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVI+XHRcdFLDvGNrd8OkcnRzIHdlaXRlcnN1Y2hlbiBpbSBWZXJnbGVpY2giCisKKyM6IGdpdGs6MTM3OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1LUCs+XHRJbmNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1OdW1tZXJibG9jay1QbHVzPlx0U2NocmlmdGdyw7bDn2UgdmVyZ3LDtsOfZXJuIgorCisjOiBnaXRrOjEzODAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtcGx1cz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLVBsdXM+XHRTY2hyaWZ0Z3LDtsOfZSB2ZXJncsO2w59lcm4iCisKKyM6IGdpdGs6MTM4MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1LUC0+XHREZWNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1OdW1tZXJuYmxvY2stPiBTY2hyaWZ0Z3LDtsOfZSB2ZXJrbGVpbmVybiIKKworIzogZ2l0azoxMzgyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLW1pbnVzPlx0RGVjcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtTWludXM+XHRTY2hyaWZ0Z3LDtsOfZSB2ZXJrbGVpbmVybiIKKworIzogZ2l0azoxMzgzCittc2dpZCAiPEY1Plx0XHRVcGRhdGUiCittc2dzdHIgIjxGNT5cdFx0QWt0dWFsaXNpZXJlbiIKKworIzogZ2l0azoxODk2CiBtc2dpZCAiR2l0ayB2aWV3IGRlZmluaXRpb24iCiBtc2dzdHIgIkdpdGsgQW5zaWNodGVuIgogCi0jOiBnaXRrOjE4ODIKKyM6IGdpdGs6MTkyMQogbXNnaWQgIk5hbWUiCiBtc2dzdHIgIk5hbWUiCiAKLSM6IGdpdGs6MTg4NQorIzogZ2l0azoxOTI0CiBtc2dpZCAiUmVtZW1iZXIgdGhpcyB2aWV3IgogbXNnc3RyICJEaWVzZSBBbnNpY2h0IHNwZWljaGVybiIKIAotIzogZ2l0azoxODg5CisjOiBnaXRrOjE5MjgKIG1zZ2lkICJDb21taXRzIHRvIGluY2x1ZGUgKGFyZ3VtZW50cyB0byBnaXQgcmV2LWxpc3QpOiIKIG1zZ3N0ciAiVmVyc2lvbmVuIGFuemVpZ2VuIChBcmd1bWVudGUgdm9uIGdpdC1yZXYtbGlzdCk6IgogCi0jOiBnaXRrOjE4OTUKKyM6IGdpdGs6MTkzNQorbXNnaWQgIkNvbW1hbmQgdG8gZ2VuZXJhdGUgbW9yZSBjb21taXRzIHRvIGluY2x1ZGU6IgorbXNnc3RyICJWZXJzaW9uc2xpc3RlIGR1cmNoIGZvbGdlbmRlcyBLb21tYW5kbyBlcnpldWdlbiBsYXNzZW46IgorCisjOiBnaXRrOjE5NDIKIG1zZ2lkICJFbnRlciBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gaW5jbHVkZSwgb25lIHBlciBsaW5lOiIKIG1zZ3N0ciAiRm9sZ2VuZGUgRGF0ZWllbiB1bmQgVmVyemVpY2huaXNzZSBhbnplaWdlbiAoZWluZSBwcm8gWmVpbGUpOiIKIAotIzogZ2l0azoxOTQyCisjOiBnaXRrOjE5ODkKIG1zZ2lkICJFcnJvciBpbiBjb21taXQgc2VsZWN0aW9uIGFyZ3VtZW50czoiCiBtc2dzdHIgIkZlaGxlciBpbiBkZW4gYXVzZ2V3w6RobHRlbiBWZXJzaW9uZW46IgogCi0jOiBnaXRrOjE5OTMgZ2l0azoyMDc5IGdpdGs6MjUzNSBnaXRrOjI1NDkgZ2l0azozNzMyIGdpdGs6ODYyMCBnaXRrOjg2MjEKKyM6IGdpdGs6MjA0MyBnaXRrOjIxMjcgZ2l0azoyNTgzIGdpdGs6MjU5NyBnaXRrOjM3ODEgZ2l0azo4Njg5IGdpdGs6ODY5MAogbXNnaWQgIk5vbmUiCiBtc2dzdHIgIktlaW5lIgogCi0jOiBnaXRrOjI0ODMgZ2l0azo0Mjg3IGdpdGs6NTg5NyBnaXRrOjU5MTIKKyM6IGdpdGs6MjUzMSBnaXRrOjQzMzYgZ2l0azo1OTU5IGdpdGs6NTk3NAogbXNnaWQgIkRhdGUiCiBtc2dzdHIgIkRhdHVtIgogCi0jOiBnaXRrOjI0ODMgZ2l0azo0Mjg3CisjOiBnaXRrOjI1MzEgZ2l0azo0MzM2CiBtc2dpZCAiQ0RhdGUiCiBtc2dzdHIgIkVpbnRyYWdlZGF0dW0iCiAKLSM6IGdpdGs6MjYzMiBnaXRrOjI2MzcKKyM6IGdpdGs6MjY4MCBnaXRrOjI2ODUKIG1zZ2lkICJEZXNjZW5kYW50IgogbXNnc3RyICJBYmvDtm1tbGluZyIKIAotIzogZ2l0azoyNjMzCisjOiBnaXRrOjI2ODEKIG1zZ2lkICJOb3QgZGVzY2VuZGFudCIKIG1zZ3N0ciAiTmljaHQgQWJrw7ZtbWxpbmciCiAKLSM6IGdpdGs6MjY0MCBnaXRrOjI2NDUKKyM6IGdpdGs6MjY4OCBnaXRrOjI2OTMKIG1zZ2lkICJBbmNlc3RvciIKIG1zZ3N0ciAiVm9yZ8OkbmdlciIKIAotIzogZ2l0azoyNjQxCisjOiBnaXRrOjI2ODkKIG1zZ2lkICJOb3QgYW5jZXN0b3IiCiBtc2dzdHIgIk5pY2h0IFZvcmfDpG5nZXIiCiAKLSM6IGdpdGs6Mjg3NQorIzogZ2l0azoyOTI0CiBtc2dpZCAiTG9jYWwgY2hhbmdlcyBjaGVja2VkIGluIHRvIGluZGV4IGJ1dCBub3QgY29tbWl0dGVkIgogbXNnc3RyICJMb2thbGUgw4RuZGVydW5nZW4gYmVyZWl0Z2VzdGVsbHQsIGFiZXIgbmljaHQgZWluZ2V0cmFnZW4iCiAKLSM6IGdpdGs6MjkwNQorIzogZ2l0azoyOTU0CiBtc2dpZCAiTG9jYWwgdW5jb21taXR0ZWQgY2hhbmdlcywgbm90IGNoZWNrZWQgaW4gdG8gaW5kZXgiCiBtc2dzdHIgIkxva2FsZSDDhG5kZXJ1bmdlbiwgbmljaHQgYmVyZWl0Z2VzdGVsbHQiCiAKLSM6IGdpdGs6NDI1NgorIzogZ2l0azo0MzA1CiBtc2dpZCAiU2VhcmNoaW5nIgogbXNnc3RyICJTdWNoZW4iCiAKLSM6IGdpdGs6NDcxNQorIzogZ2l0azo0NzY3CiBtc2dpZCAiVGFnczoiCiBtc2dzdHIgIk1hcmtpZXJ1bmdlbjoiCiAKLSM6IGdpdGs6NDczMiBnaXRrOjQ3MzggZ2l0azo1ODkwCisjOiBnaXRrOjQ3ODQgZ2l0azo0NzkwIGdpdGs6NTk1MgogbXNnaWQgIlBhcmVudCIKIG1zZ3N0ciAiRWx0ZXJuIgogCi0jOiBnaXRrOjQ3NDMKKyM6IGdpdGs6NDc5NQogbXNnaWQgIkNoaWxkIgogbXNnc3RyICJLaW5kIgogCi0jOiBnaXRrOjQ3NTIKKyM6IGdpdGs6NDgwNAogbXNnaWQgIkJyYW5jaCIKIG1zZ3N0ciAiWndlaWciCiAKLSM6IGdpdGs6NDc1NQorIzogZ2l0azo0ODA3CiBtc2dpZCAiRm9sbG93cyIKIG1zZ3N0ciAiRm9sZ3QgYXVmIgogCi0jOiBnaXRrOjQ3NTgKKyM6IGdpdGs6NDgxMAogbXNnaWQgIlByZWNlZGVzIgogbXNnc3RyICJWb3Jnw6RuZ2VyIHZvbiIKIAotIzogZ2l0azo1MDQwCisjOiBnaXRrOjUwOTQKIG1zZ2lkICJFcnJvciBnZXR0aW5nIG1lcmdlIGRpZmZzOiIKIG1zZ3N0ciAiRmVobGVyIGJlaW0gTGFkZW4gZGVzIFZlcmdsZWljaHM6IgogCi0jOiBnaXRrOjU3MTcKKyM6IGdpdGs6NTc3OQogbXNnaWQgIkdvdG86IgogbXNnc3RyICJHZWhlIHp1OiIKIAotIzogZ2l0azo1NzE5CisjOiBnaXRrOjU3ODEKIG1zZ2lkICJTSEExIElEOiIKLW1zZ3N0ciAiU0hBMSBLZW5udW5nOiIKK21zZ3N0ciAiU0hBMS1IYXNod2VydDoiCiAKLSM6IGdpdGs6NTc0NAorIzogZ2l0azo1ODA2CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiU2hvcnQgU0hBMSBpZCAlcyBpcyBhbWJpZ3VvdXMiCi1tc2dzdHIgIkt1cnplIFNIQTEtS2VubnVuZyDCuyVzwqsgaXN0IG1laHJkZXV0aWciCittc2dzdHIgIkt1cnplciBTSEExLUhhc2h3ZXJ0IMK7JXPCqyBpc3QgbWVocmRldXRpZyIKIAotIzogZ2l0azo1NzU2CisjOiBnaXRrOjU4MTgKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJTSEExIGlkICVzIGlzIG5vdCBrbm93biIKLW1zZ3N0ciAiU0hBMS1LZW5udW5nIMK7JXPCqyB1bmJla2FubnQiCittc2dzdHIgIlNIQTEtSGFzaHdlcnQgwrslc8KrIHVuYmVrYW5udCIKIAotIzogZ2l0azo1NzU4CisjOiBnaXRrOjU4MjAKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJUYWcvSGVhZCAlcyBpcyBub3Qga25vd24iCiBtc2dzdHIgIk1hcmtpZXJ1bmcvWndlaWcgwrslc8KrIGlzdCB1bmJla2FubnQiCiAKLSM6IGdpdGs6NTkwMAorIzogZ2l0azo1OTYyCiBtc2dpZCAiQ2hpbGRyZW4iCiBtc2dzdHIgIktpbmRlciIKIAotIzogZ2l0azo1OTU3CisjOiBnaXRrOjYwMTkKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJSZXNldCAlcyBicmFuY2ggdG8gaGVyZSIKIG1zZ3N0ciAiWndlaWcgwrslc8KrIGhpZXJoZXIgenVyw7xja3NldHplbiIKIAotIzogZ2l0azo1OTg4CisjOiBnaXRrOjYwNTAKIG1zZ2lkICJUb3AiCiBtc2dzdHIgIk9iZW4iCiAKLSM6IGdpdGs6NTk4OQorIzogZ2l0azo2MDUxCiBtc2dpZCAiRnJvbSIKIG1zZ3N0ciAiVm9uIgogCi0jOiBnaXRrOjU5OTQKKyM6IGdpdGs6NjA1NgogbXNnaWQgIlRvIgogbXNnc3RyICJiaXMiCiAKLSM6IGdpdGs6NjAxNworIzogZ2l0azo2MDc5CiBtc2dpZCAiR2VuZXJhdGUgcGF0Y2giCiBtc2dzdHIgIlBhdGNoIGVyc3RlbGxlbiIKIAotIzogZ2l0azo2MDE5CisjOiBnaXRrOjYwODEKIG1zZ2lkICJGcm9tOiIKIG1zZ3N0ciAiVm9uOiIKIAotIzogZ2l0azo2MDI4CisjOiBnaXRrOjYwOTAKIG1zZ2lkICJUbzoiCiBtc2dzdHIgImJpczoiCiAKLSM6IGdpdGs6NjAzNworIzogZ2l0azo2MDk5CiBtc2dpZCAiUmV2ZXJzZSIKIG1zZ3N0ciAiVW1nZWtlaHJ0IgogCi0jOiBnaXRrOjYwMzkgZ2l0azo2MjEyCisjOiBnaXRrOjYxMDEgZ2l0azo2MjcwCiBtc2dpZCAiT3V0cHV0IGZpbGU6IgogbXNnc3RyICJBdXNnYWJlZGF0ZWk6IgogCi0jOiBnaXRrOjYwNDUKKyM6IGdpdGs6NjEwNwogbXNnaWQgIkdlbmVyYXRlIgogbXNnc3RyICJFcnpldWdlbiIKIAotIzogZ2l0azo2MDgxCisjOiBnaXRrOjYxNDMKIG1zZ2lkICJFcnJvciBjcmVhdGluZyBwYXRjaDoiCiBtc2dzdHIgIkZlaGxlciBiZWltIFBhdGNoIGVyemV1Z2VuOiIKIAotIzogZ2l0azo2MTAzIGdpdGs6NjIwMCBnaXRrOjYyNTQKKyM6IGdpdGs6NjE2NSBnaXRrOjYyNTggZ2l0azo2MzEyCiBtc2dpZCAiSUQ6IgogbXNnc3RyICJJRDoiCiAKLSM6IGdpdGs6NjExMgorIzogZ2l0azo2MTc0CiBtc2dpZCAiVGFnIG5hbWU6IgogbXNnc3RyICJNYXJraWVydW5nc25hbWU6IgogCi0jOiBnaXRrOjYxMTYgZ2l0azo2MjYzCisjOiBnaXRrOjYxNzggZ2l0azo2MzIxCiBtc2dpZCAiQ3JlYXRlIgogbXNnc3RyICJFcnN0ZWxsZW4iCiAKLSM6IGdpdGs6NjEzMQorIzogZ2l0azo2MTkzCiBtc2dpZCAiTm8gdGFnIG5hbWUgc3BlY2lmaWVkIgogbXNnc3RyICJLZWluIE1hcmtpZXJ1bmdzbmFtZSBhbmdlZ2ViZW4iCiAKLSM6IGdpdGs6NjEzNQorIzogZ2l0azo2MTk3CiAjLCB0Y2wtZm9ybWF0CiBtc2dpZCAiVGFnIFwiJXNcIiBhbHJlYWR5IGV4aXN0cyIKIG1zZ3N0ciAiTWFya2llcnVuZyDCuyVzwqsgZXhpc3RpZXJ0IGJlcmVpdHMuIgogCi0jOiBnaXRrOjYxNDUKKyM6IGdpdGs6NjIwMwogbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRhZzoiCiBtc2dzdHIgIkZlaGxlciBiZWkgTWFya2llcnVuZyBlcnN0ZWxsZW46IgogCi0jOiBnaXRrOjYyMDkKKyM6IGdpdGs6NjI2NwogbXNnaWQgIkNvbW1hbmQ6IgogbXNnc3RyICJLb21tYW5kbzoiCiAKLSM6IGdpdGs6NjIxNworIzogZ2l0azo2Mjc1CiBtc2dpZCAiV3JpdGUiCiBtc2dzdHIgIlNjaHJlaWJlbiIKIAotIzogZ2l0azo2MjMzCisjOiBnaXRrOjYyOTEKIG1zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdDoiCi1tc2dzdHIgIkZlaGxlciBiZWltIFZlcnNpb24gZWludHJhZ2VuOiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gU2NocmVpYmVuIGRlciBWZXJzaW9uOiIKIAotIzogZ2l0azo2MjU5CisjOiBnaXRrOjYzMTcKIG1zZ2lkICJOYW1lOiIKIG1zZ3N0ciAiTmFtZToiCiAKLSM6IGdpdGs6NjI3OAorIzogZ2l0azo2MzM2CiBtc2dpZCAiUGxlYXNlIHNwZWNpZnkgYSBuYW1lIGZvciB0aGUgbmV3IGJyYW5jaCIKIG1zZ3N0ciAiQml0dGUgZ2ViZW4gU2llIGVpbmVuIE5hbWVuIGbDvHIgZGVuIG5ldWVuIFp3ZWlnIGFuLiIKIAotIzogZ2l0azo2MzA3CisjOiBnaXRrOjYzNjUKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJDb21taXQgJXMgaXMgYWxyZWFkeSBpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJlLWFwcGx5IGl0PyIKIG1zZ3N0ciAiIgogIlZlcnNpb24gwrslc8KrIGlzdCBiZXJlaXRzIGltIFp3ZWlnIMK7JXPCqyBlbnRoYWx0ZW4gLS0gdHJvdHpkZW0gZXJuZXV0ICIKICJlaW50cmFnZW4/IgogCi0jOiBnaXRrOjYzMTIKKyM6IGdpdGs6NjM3MAogbXNnaWQgIkNoZXJyeS1waWNraW5nIgogbXNnc3RyICJWZXJzaW9uIHBmbMO8Y2tlbiIKIAotIzogZ2l0azo2MzI0CisjOiBnaXRrOjYzODIKIG1zZ2lkICJObyBjaGFuZ2VzIGNvbW1pdHRlZCIKIG1zZ3N0ciAiS2VpbmUgw4RuZGVydW5nZW4gZWluZ2V0cmFnZW4iCiAKLSM6IGdpdGs6NjM0NworIzogZ2l0azo2NDA1CiBtc2dpZCAiQ29uZmlybSByZXNldCIKIG1zZ3N0ciAiWnVyw7xja3NldHplbiBiZXN0w6R0aWdlbiIKIAotIzogZ2l0azo2MzQ5CisjOiBnaXRrOjY0MDcKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJSZXNldCBicmFuY2ggJXMgdG8gJXM/IgogbXNnc3RyICJad2VpZyDCuyVzwqsgYXVmIMK7JXPCqyB6dXLDvGNrc2V0emVuPyIKIAotIzogZ2l0azo2MzUzCisjOiBnaXRrOjY0MTEKIG1zZ2lkICJSZXNldCB0eXBlOiIKIG1zZ3N0ciAiQXJ0IGRlcyBadXLDvGNrc2V0emVuczoiCiAKLSM6IGdpdGs6NjM1NworIzogZ2l0azo2NDE1CiBtc2dpZCAiU29mdDogTGVhdmUgd29ya2luZyB0cmVlIGFuZCBpbmRleCB1bnRvdWNoZWQiCiBtc2dzdHIgIkhhcm1sb3M6IEFyYmVpdHNrb3BpZSB1bmQgQmVyZWl0c3RlbGx1bmcgdW52ZXLDpG5kZXJ0IgogCi0jOiBnaXRrOjYzNjAKKyM6IGdpdGs6NjQxOAogbXNnaWQgIk1peGVkOiBMZWF2ZSB3b3JraW5nIHRyZWUgdW50b3VjaGVkLCByZXNldCBpbmRleCIKIG1zZ3N0ciAiIgogIkdlbWlzY2h0OiBBcmJlaXRza29waWUgdW52ZXLDpG5kZXJ0LFxuIgogIkJlcmVpdHN0ZWxsdW5nIHp1csO8Y2tnZXNldHp0IgogCi0jOiBnaXRrOjYzNjMKKyM6IGdpdGs6NjQyMQogbXNnaWQgIiIKICJIYXJkOiBSZXNldCB3b3JraW5nIHRyZWUgYW5kIGluZGV4XG4iCiAiKGRpc2NhcmQgQUxMIGxvY2FsIGNoYW5nZXMpIgpAQCAtNTMwLDIxICs2OTcsMjEgQEAKICJIYXJ0OiBBcmJlaXRza29waWUgdW5kIEJlcmVpdHN0ZWxsdW5nXG4iCiAiKEFsbGUgbG9rYWxlbiDDhG5kZXJ1bmdlbiB3ZXJkZW4gZ2Vsw7ZzY2h0KSIKIAotIzogZ2l0azo2Mzc5CisjOiBnaXRrOjY0MzcKIG1zZ2lkICJSZXNldHRpbmciCiBtc2dzdHIgIlp1csO8Y2tzZXR6ZW4iCiAKLSM6IGdpdGs6NjQzNgorIzogZ2l0azo2NDk0CiBtc2dpZCAiQ2hlY2tpbmcgb3V0IgogbXNnc3RyICJVbXN0ZWxsZW4iCiAKLSM6IGdpdGs6NjQ2NgorIzogZ2l0azo2NTI0CiBtc2dpZCAiQ2Fubm90IGRlbGV0ZSB0aGUgY3VycmVudGx5IGNoZWNrZWQtb3V0IGJyYW5jaCIKIG1zZ3N0ciAiIgogIkRlciBad2VpZywgYXVmIGRlbiBkaWUgQXJiZWl0c2tvcGllIG1vbWVudGFuIHVtZ2VzdGVsbHQgaXN0LCBrYW5uIG5pY2h0ICIKICJnZWzDtnNjaHQgd2VyZGVuLiIKIAotIzogZ2l0azo2NDcyCisjOiBnaXRrOjY1MzAKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICIiCiAiVGhlIGNvbW1pdHMgb24gYnJhbmNoICVzIGFyZW4ndCBvbiBhbnkgb3RoZXIgYnJhbmNoLlxuIgpAQCAtNTUzLDE2ICs3MjAsMTYgQEAKICJEaWUgVmVyc2lvbmVuIGF1ZiBad2VpZyDCuyVzwqsgZXhpc3RpZXJlbiBhdWYga2VpbmVtIGFuZGVyZW4gWndlaWcuXG4iCiAiWndlaWcgwrslc8KrIHRyb3R6ZGVtIGzDtnNjaGVuPyIKIAotIzogZ2l0azo2NTAzCisjOiBnaXRrOjY1NjEKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJUYWdzIGFuZCBoZWFkczogJXMiCiBtc2dzdHIgIk1hcmtpZXJ1bmdlbiB1bmQgWndlaWdlOiAlcyIKIAotIzogZ2l0azo2NTE3CisjOiBnaXRrOjY1NzUKIG1zZ2lkICJGaWx0ZXIiCiBtc2dzdHIgIkZpbHRlcm4iCiAKLSM6IGdpdGs6NjgxMQorIzogZ2l0azo2ODY5CiBtc2dpZCAiIgogIkVycm9yIHJlYWRpbmcgY29tbWl0IHRvcG9sb2d5IGluZm9ybWF0aW9uOyBicmFuY2ggYW5kIHByZWNlZGluZy9mb2xsb3dpbmcgIgogInRhZyBpbmZvcm1hdGlvbiB3aWxsIGJlIGluY29tcGxldGUuIgpAQCAtNTcwLDExMyArNzM3LDExNyBAQAogIkZlaGxlciBiZWltIExlc2VuIGRlciBTdHJ1a3R1cmluZm9ybWF0aW9uZW47IFp3ZWlnZSB1bmQgVm9yZ8Okbmdlci9OYWNoZm9sZ2VyICIKICJJbmZvcm1hdGlvbmVuIHdlcmRlbiB1bnZvbGxzdMOkbmRpZyBzZWluLiIKIAotIzogZ2l0azo3Nzk1CisjOiBnaXRrOjc4NTMKIG1zZ2lkICJUYWciCiBtc2dzdHIgIk1hcmtpZXJ1bmciCiAKLSM6IGdpdGs6Nzc5NQorIzogZ2l0azo3ODUzCiBtc2dpZCAiSWQiCiBtc2dzdHIgIklkIgogCi0jOiBnaXRrOjc4MzUKKyM6IGdpdGs6Nzg5MwogbXNnaWQgIkdpdGsgZm9udCBjaG9vc2VyIgogbXNnc3RyICJHaXRrIFNjaHJpZnRlbiB3w6RobGVuIgogCi0jOiBnaXRrOjc4NTIKKyM6IGdpdGs6NzkxMAogbXNnaWQgIkIiCiBtc2dzdHIgIkYiCiAKLSM6IGdpdGs6Nzg1NQorIzogZ2l0azo3OTEzCiBtc2dpZCAiSSIKIG1zZ3N0ciAiSyIKIAotIzogZ2l0azo3OTQ4CisjOiBnaXRrOjgwMDYKIG1zZ2lkICJHaXRrIHByZWZlcmVuY2VzIgogbXNnc3RyICJHaXRrIEVpbnN0ZWxsdW5nZW4iCiAKLSM6IGdpdGs6Nzk0OQorIzogZ2l0azo4MDA3CiBtc2dpZCAiQ29tbWl0IGxpc3QgZGlzcGxheSBvcHRpb25zIgogbXNnc3RyICJBbnplaWdlIFZlcnNpb25zbGlzdGUiCiAKLSM6IGdpdGs6Nzk1MgorIzogZ2l0azo4MDEwCiBtc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAobGluZXMpIgogbXNnc3RyICJNYXhpbWFsZSBHcmFwaGVuYnJlaXRlIChaZWlsZW4pIgogCi0jOiBnaXRrOjc5NTYKKyM6IGdpdGs6ODAxNAogIywgdGNsLWZvcm1hdAogbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKCUgb2YgcGFuZSkiCiBtc2dzdHIgIk1heGltYWxlIEdyYXBoZW5icmVpdGUgKCUgZGVzIEZlbnN0ZXJzKSIKIAotIzogZ2l0azo3OTYxCisjOiBnaXRrOjgwMTkKIG1zZ2lkICJTaG93IGxvY2FsIGNoYW5nZXMiCiBtc2dzdHIgIkxva2FsZSDDhG5kZXJ1bmdlbiBhbnplaWdlbiIKIAotIzogZ2l0azo3OTY2CisjOiBnaXRrOjgwMjQKK21zZ2lkICJBdXRvLXNlbGVjdCBTSEExIgorbXNnc3RyICJTSEExLUhhc2h3ZXJ0IGF1dG9tYXRpc2NoIG1hcmtpZXJlbiIKKworIzogZ2l0azo4MDI5CiBtc2dpZCAiRGlmZiBkaXNwbGF5IG9wdGlvbnMiCiBtc2dzdHIgIkFuemVpZ2UgVmVyZ2xlaWNoIgogCi0jOiBnaXRrOjc5NjgKKyM6IGdpdGs6ODAzMQogbXNnaWQgIlRhYiBzcGFjaW5nIgogbXNnc3RyICJUYWJ1bGF0b3JicmVpdGUiCiAKLSM6IGdpdGs6Nzk3MgorIzogZ2l0azo4MDM1CiBtc2dpZCAiRGlzcGxheSBuZWFyYnkgdGFncyIKIG1zZ3N0ciAiTmFoZWxpZWdlbmRlIMOcYmVyc2NocmlmdGVuIGFuemVpZ2VuIgogCi0jOiBnaXRrOjc5NzcKKyM6IGdpdGs6ODA0MAogbXNnaWQgIkxpbWl0IGRpZmZzIHRvIGxpc3RlZCBwYXRocyIKIG1zZ3N0ciAiVmVyZ2xlaWNoIG51ciBmw7xyIGFuZ2V6ZWlndGUgUGZhZGUiCiAKLSM6IGdpdGs6Nzk4MgorIzogZ2l0azo4MDQ1CiBtc2dpZCAiQ29sb3JzOiBwcmVzcyB0byBjaG9vc2UiCiBtc2dzdHIgIkZhcmJlbjogS2xpY2tlbiB6dW0gV8OkaGxlbiIKIAotIzogZ2l0azo3OTg1CisjOiBnaXRrOjgwNDgKIG1zZ2lkICJCYWNrZ3JvdW5kIgotbXNnc3RyICJWb3JkZXJncnVuZCIKLQotIzogZ2l0azo3OTg5Ci1tc2dpZCAiRm9yZWdyb3VuZCIKIG1zZ3N0ciAiSGludGVyZ3J1bmQiCiAKLSM6IGdpdGs6Nzk5MworIzogZ2l0azo4MDUyCittc2dpZCAiRm9yZWdyb3VuZCIKK21zZ3N0ciAiVm9yZGVyZ3J1bmQiCisKKyM6IGdpdGs6ODA1NgogbXNnaWQgIkRpZmY6IG9sZCBsaW5lcyIKIG1zZ3N0ciAiVmVyZ2xlaWNoOiBBbHRlIFplaWxlbiIKIAotIzogZ2l0azo3OTk4CisjOiBnaXRrOjgwNjEKIG1zZ2lkICJEaWZmOiBuZXcgbGluZXMiCiBtc2dzdHIgIlZlcmdsZWljaDogTmV1ZSBaZWlsZW4iCiAKLSM6IGdpdGs6ODAwMworIzogZ2l0azo4MDY2CiBtc2dpZCAiRGlmZjogaHVuayBoZWFkZXIiCiBtc2dzdHIgIlZlcmdsZWljaDogw4RuZGVydW5nc3RpdGVsIgogCi0jOiBnaXRrOjgwMDkKKyM6IGdpdGs6ODA3MgogbXNnaWQgIlNlbGVjdCBiZyIKIG1zZ3N0ciAiSGludGVyZ3J1bmRmYXJiZSBBdXN3w6RobGVuIgogCi0jOiBnaXRrOjgwMTMKKyM6IGdpdGs6ODA3NgogbXNnaWQgIkZvbnRzOiBwcmVzcyB0byBjaG9vc2UiCiBtc2dzdHIgIlNjaHJpZnRhcnQ6IEtsaWNrZW4genVtIFfDpGhsZW4iCiAKLSM6IGdpdGs6ODAxNQorIzogZ2l0azo4MDc4CiBtc2dpZCAiTWFpbiBmb250IgogbXNnc3RyICJQcm9ncmFtbXNjaHJpZnRhcnQiCiAKLSM6IGdpdGs6ODAxNgorIzogZ2l0azo4MDc5CiBtc2dpZCAiRGlmZiBkaXNwbGF5IGZvbnQiCiBtc2dzdHIgIlZlcmdsZWljaCIKIAotIzogZ2l0azo4MDE3CisjOiBnaXRrOjgwODAKIG1zZ2lkICJVc2VyIGludGVyZmFjZSBmb250IgogbXNnc3RyICJCZXNjaHJpZnR1bmdlbiIKIAotIzogZ2l0azo4MDMzCisjOiBnaXRrOjgwOTYKICMsIHRjbC1mb3JtYXQKIG1zZ2lkICJHaXRrOiBjaG9vc2UgY29sb3IgZm9yICVzIgogbXNnc3RyICJHaXRrOiBGYXJiZSB3w6RobGVuIGbDvHIgJXMiCiAKLSM6IGdpdGs6ODQxNAorIzogZ2l0azo4NDc3CiBtc2dpZCAiIgogIlNvcnJ5LCBnaXRrIGNhbm5vdCBydW4gd2l0aCB0aGlzIHZlcnNpb24gb2YgVGNsL1RrLlxuIgogIiBHaXRrIHJlcXVpcmVzIGF0IGxlYXN0IFRjbC9UayA4LjQuIgpAQCAtNjg0LDM1ICs4NTUsMzMgQEAKICJHaXRrIGzDpHVmdCBuaWNodCBtaXQgZGllc2VyIFZlcnNpb24gdm9uIFRjbC9Uay5cbiIKICJHaXRrIGJlbsO2dGlndCBtaW5kZXN0ZW5zIFRjbC9UayA4LjQuIgogCi0jOiBnaXRrOjg1MDEKKyM6IGdpdGs6ODU2NgogbXNnaWQgIkNhbm5vdCBmaW5kIGEgZ2l0IHJlcG9zaXRvcnkgaGVyZS4iCiBtc2dzdHIgIktlaW4gR2l0LVByb2pla3RhcmNoaXYgZ2VmdW5kZW4uIgogCi0jOiBnaXRrOjg1MDUKKyM6IGdpdGs6ODU3MAogIywgdGNsLWZvcm1hdAogbXNnaWQgIkNhbm5vdCBmaW5kIHRoZSBnaXQgZGlyZWN0b3J5IFwiJXNcIi4iCiBtc2dzdHIgIkdpdC1WZXJ6ZWljaG5pcyDCuyVzwqsgd3VyZGUgbmljaHQgZ2VmdW5kZW4uIgogCi0jOiBnaXRrOjg1NDQKKyM6IGdpdGs6ODYxMwogIywgdGNsLWZvcm1hdAogbXNnaWQgIkFtYmlndW91cyBhcmd1bWVudCAnJXMnOiBib3RoIHJldmlzaW9uIGFuZCBmaWxlbmFtZSIKIG1zZ3N0ciAiTWVocmRldXRpZ2UgQW5nYWJlIMK7JXPCqzogU293b2hsIFZlcnNpb24gYWxzIGF1Y2ggRGF0ZWluYW1lIGV4aXN0aWVydC4iCiAKLSM6IGdpdGs6ODU1NgorIzogZ2l0azo4NjI1CiBtc2dpZCAiQmFkIGFyZ3VtZW50cyB0byBnaXRrOiIKIG1zZ3N0ciAiRmFsc2NoZSBLb21tYW5kb3plaWxlbi1QYXJhbWV0ZXIgZsO8ciBnaXRrOiIKIAotIzogZ2l0azo4NTY4CisjOiBnaXRrOjg2MzcKIG1zZ2lkICJDb3VsZG4ndCBnZXQgbGlzdCBvZiB1bm1lcmdlZCBmaWxlczoiCiBtc2dzdHIgIkxpc3RlIGRlciBuaWNodC16dXNhbW1lbmdlZsO8aHJ0ZW4gRGF0ZWllbiBuaWNodCBnZWZ1bmRlbjoiCiAKLSM6IGdpdGs6ODU4NAorIzogZ2l0azo4NjUzCiBtc2dpZCAiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyBmaWxlcyBhcmUgdW5tZXJnZWQuIgotbXNnc3RyICIiCi0iS2VpbmUgRGF0ZWllbiBhdXNnZXfDpGhsZTogLS1tZXJnZSBhbmdlZ2ViZW4sIGVzIGV4aXN0aWVyZW4gYWJlciBrZWluZSBuaWNodC0iCi0ienVzYW1tZW5nZWbDvGhydGVuIERhdGVpZW4uIgorbXNnc3RyICJLZWluZSBEYXRlaWVuIGF1c2dld8OkaGx0OiAtLW1lcmdlIGFuZ2VnZWJlbiwgZXMgZXhpc3RpZXJlbiBhYmVyIGtlaW5lIG5pY2h0LXp1c2FtbWVuZ2Vmw7xocnRlbiBEYXRlaWVuLiIKIAotIzogZ2l0azo4NTg3CisjOiBnaXRrOjg2NTYKIG1zZ2lkICIiCiAiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyB1bm1lcmdlZCBmaWxlcyBhcmUgd2l0aGluIGZpbGUgIgogImxpbWl0LiIKQEAgLTcyMCw2ICs4ODksNiBAQAogIktlaW5lIERhdGVpZW4gYXVzZ2V3w6RobGU6IC0tbWVyZ2UgYW5nZWdlYmVuLCBhYmVyIGtlaW5lIG5pY2h0LSIKICJ6dXNhbW1lbmdlZsO8aHJ0ZW4gRGF0ZWllbiBzaW5kIGluIGRlciBEYXRlaWF1c3dhaGwuIgogCi0jOiBnaXRrOjg2NDYKKyM6IGdpdGs6ODcxNwogbXNnaWQgIkNvbW1hbmQgbGluZSIKIG1zZ3N0ciAiS29tbWFuZG96ZWlsZSIKZGlmZiAtLWdpdCBhL2dpdGstZ2l0L3BvL2VzLnBvIGIvZ2l0ay1naXQvcG8vZXMucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNiMTQ4NgotLS0gL2Rldi9udWxsCisrKyBiL2dpdGstZ2l0L3BvL2VzLnBvCkBAIC0wLDAgKzEsODkwIEBACisjIFRyYW5zbGF0aW9uIG9mIGdpdGsKKyMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDggU2FudGlhZ28gR2FsYQorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0ayBwYWNrYWdlLgorIyBTYW50aWFnbyBHYWxhIDxzYW50aWFnby5nYWxhQGdtYWlsLmNvbT4sIDIwMDguCisjCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBnaXRrXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA4LTAzLTEzIDE3OjI5KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA4LTAzLTI1IDExOjIwKzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFNhbnRpYWdvIEdhbGEgPHNhbnRpYWdvLmdhbGFAZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IFNwYW5pc2hcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogZ2l0azoxMTEKK21zZ2lkICJFcnJvciBleGVjdXRpbmcgZ2l0IHJldi1saXN0OiIKK21zZ3N0ciAiRXJyb3IgYWwgZWplY3V0YXIgZ2l0IHJldi1saXN0OiIKKworIzogZ2l0azoxMjQKK21zZ2lkICJSZWFkaW5nIgorbXNnc3RyICJMZXllbmRvIgorCisjOiBnaXRrOjE1MSBnaXRrOjIxOTEKK21zZ2lkICJSZWFkaW5nIGNvbW1pdHMuLi4iCittc2dzdHIgIkxleWVuZG8gcmV2aXNpb25lcy4uLiIKKworIzogZ2l0azoyNzUKK21zZ2lkICJDYW4ndCBwYXJzZSBnaXQgbG9nIG91dHB1dDoiCittc2dzdHIgIkVycm9yIGFuYWxpemFuZG8gbGEgc2FsaWRhIGRlIGdpdCBsb2c6IgorCisjOiBnaXRrOjM4NiBnaXRrOjIxOTUKK21zZ2lkICJObyBjb21taXRzIHNlbGVjdGVkIgorbXNnc3RyICJObyBzZSBzZWxlY2Npb25hcm9uIHJldmlzaW9uZXMiCisKKyM6IGdpdGs6NTAwCittc2dpZCAiTm8gY29tbWl0IGluZm9ybWF0aW9uIGF2YWlsYWJsZSIKK21zZ3N0ciAiRmFsdGEgaW5mb3JtYWNpw7NuIHNvYnJlIGxhcyByZXZpc2lvbmVzIgorCisjOiBnaXRrOjU5OSBnaXRrOjYyMSBnaXRrOjE5NTUgZ2l0azo2NDIzIGdpdGs6NzkyMyBnaXRrOjgwODIKK21zZ2lkICJPSyIKK21zZ3N0ciAiQWNlcHRhciIKKworIzogZ2l0azo2MjMgZ2l0azoxOTU2IGdpdGs6NjEwNyBnaXRrOjYxNzggZ2l0azo2Mjc1IGdpdGs6NjMyMSBnaXRrOjY0MjUKKyM6IGdpdGs6NzkyNCBnaXRrOjgwODMKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIkNhbmNlbGFyIgorCisjOiBnaXRrOjY2MQorbXNnaWQgIkZpbGUiCittc2dzdHIgIkFyY2hpdm8iCisKKyM6IGdpdGs6NjYzCittc2dpZCAiVXBkYXRlIgorbXNnc3RyICJBY3R1YWxpemFyIgorCisjOiBnaXRrOjY2NAorbXNnaWQgIlJlcmVhZCByZWZlcmVuY2VzIgorbXNnc3RyICJSZWxlZXIgcmVmZXJlbmNpYXMiCisKKyM6IGdpdGs6NjY1Cittc2dpZCAiTGlzdCByZWZlcmVuY2VzIgorbXNnc3RyICJMaXN0YSBkZSByZWZlcmVuY2lhcyIKKworIzogZ2l0azo2NjYKK21zZ2lkICJRdWl0IgorbXNnc3RyICJTYWxpciIKKworIzogZ2l0azo2NjgKK21zZ2lkICJFZGl0IgorbXNnc3RyICJFZGl0YXIiCisKKyM6IGdpdGs6NjY5Cittc2dpZCAiUHJlZmVyZW5jZXMiCittc2dzdHIgIlByZWZlcmVuY2lhcyIKKworIzogZ2l0azo2NzIgZ2l0azoxODkyCittc2dpZCAiVmlldyIKK21zZ3N0ciAiVmlzdGEiCisKKyM6IGdpdGs6NjczCittc2dpZCAiTmV3IHZpZXcuLi4iCittc2dzdHIgIk51ZXZhIHZpc3RhLi4uIgorCisjOiBnaXRrOjY3NCBnaXRrOjIxMzMgZ2l0azo4NzIyCittc2dpZCAiRWRpdCB2aWV3Li4uIgorbXNnc3RyICJNb2RpZmljYXIgdmlzdGEuLi4iCisKKyM6IGdpdGs6Njc2IGdpdGs6MjEzNCBnaXRrOjg3MjMKK21zZ2lkICJEZWxldGUgdmlldyIKK21zZ3N0ciAiRWxpbWluYXIgdmlzdGEiCisKKyM6IGdpdGs6Njc4Cittc2dpZCAiQWxsIGZpbGVzIgorbXNnc3RyICJUb2RvcyBsb3MgYXJjaGl2b3MiCisKKyM6IGdpdGs6NjgyCittc2dpZCAiSGVscCIKK21zZ3N0ciAiQXl1ZGEiCisKKyM6IGdpdGs6NjgzIGdpdGs6MTMxNworbXNnaWQgIkFib3V0IGdpdGsiCittc2dzdHIgIkFjZXJjYSBkZSBnaXRrIgorCisjOiBnaXRrOjY4NAorbXNnaWQgIktleSBiaW5kaW5ncyIKK21zZ3N0ciAiQ29tYmluYWNpb25lcyBkZSB0ZWNsYXMiCisKKyM6IGdpdGs6NzQxCittc2dpZCAiU0hBMSBJRDogIgorbXNnc3RyICJTSEExIElEOiAiCisKKyM6IGdpdGs6NzkxCittc2dpZCAiRmluZCIKK21zZ3N0ciAiQnVzY2FyIgorCisjOiBnaXRrOjc5MgorbXNnaWQgIm5leHQiCittc2dzdHIgIjw8IgorCisjOiBnaXRrOjc5MworbXNnaWQgInByZXYiCittc2dzdHIgIj4+IgorCisjOiBnaXRrOjc5NAorbXNnaWQgImNvbW1pdCIKK21zZ3N0ciAicmV2aXNpw7NuIgorCisjOiBnaXRrOjc5NyBnaXRrOjc5OSBnaXRrOjIzNTYgZ2l0azoyMzc5IGdpdGs6MjQwMyBnaXRrOjQzMDYgZ2l0azo0MzY5Cittc2dpZCAiY29udGFpbmluZzoiCittc2dzdHIgInF1ZSBjb250aWVuZToiCisKKyM6IGdpdGs6ODAwIGdpdGs6MTc3OCBnaXRrOjE3ODMgZ2l0azoyNDMxCittc2dpZCAidG91Y2hpbmcgcGF0aHM6IgorbXNnc3RyICJxdWUgbW9kaWZpY2EgbGEgcnV0YToiCisKKyM6IGdpdGs6ODAxIGdpdGs6MjQzNgorbXNnaWQgImFkZGluZy9yZW1vdmluZyBzdHJpbmc6IgorbXNnc3RyICJxdWUgYcOxYWRlL2VsaW1pbmEgY2FkZW5hOiIKKworIzogZ2l0azo4MTAgZ2l0azo4MTIKK21zZ2lkICJFeGFjdCIKK21zZ3N0ciAiRXhhY3RvIgorCisjOiBnaXRrOjgxMiBnaXRrOjI1MTQgZ2l0azo0Mjc0Cittc2dpZCAiSWduQ2FzZSIKK21zZ3N0ciAiTm9NYXnDunMiCisKKyM6IGdpdGs6ODEyIGdpdGs6MjQwNSBnaXRrOjI1MTIgZ2l0azo0MjcwCittc2dpZCAiUmVnZXhwIgorbXNnc3RyICJSZWdleCIKKworIzogZ2l0azo4MTQgZ2l0azo4MTUgZ2l0azoyNTMzIGdpdGs6MjU2MyBnaXRrOjI1NzAgZ2l0azo0MzgwIGdpdGs6NDQzNgorbXNnaWQgIkFsbCBmaWVsZHMiCittc2dzdHIgIlRvZG9zIGxvcyBjYW1wb3MiCisKKyM6IGdpdGs6ODE1IGdpdGs6MjUzMSBnaXRrOjI1NjMgZ2l0azo0MzM2Cittc2dpZCAiSGVhZGxpbmUiCittc2dzdHIgIlTDrXR1bG8iCisKKyM6IGdpdGs6ODE2IGdpdGs6MjUzMSBnaXRrOjQzMzYgZ2l0azo0NDM2IGdpdGs6NDgyNworbXNnaWQgIkNvbW1lbnRzIgorbXNnc3RyICJDb21lbnRhcmlvcyIKKworIzogZ2l0azo4MTYgZ2l0azoyNTMxIGdpdGs6MjUzNSBnaXRrOjI1NzAgZ2l0azo0MzM2IGdpdGs6NDc2MyBnaXRrOjU5NTYKKyM6IGdpdGs6NTk3MQorbXNnaWQgIkF1dGhvciIKK21zZ3N0ciAiQXV0b3IiCisKKyM6IGdpdGs6ODE2IGdpdGs6MjUzMSBnaXRrOjQzMzYgZ2l0azo0NzY1Cittc2dpZCAiQ29tbWl0dGVyIgorbXNnc3RyICIiCisKKyM6IGdpdGs6ODQ1Cittc2dpZCAiU2VhcmNoIgorbXNnc3RyICJCdXNjYXIiCisKKyM6IGdpdGs6ODUyCittc2dpZCAiRGlmZiIKK21zZ3N0ciAiRGlmZXJlbmNpYSIKKworIzogZ2l0azo4NTQKK21zZ2lkICJPbGQgdmVyc2lvbiIKK21zZ3N0ciAiVmVyc2nDs24gYW50aWd1YSIKKworIzogZ2l0azo4NTYKK21zZ2lkICJOZXcgdmVyc2lvbiIKK21zZ3N0ciAiVmVyc2nDs24gbnVldmEiCisKKyM6IGdpdGs6ODU4Cittc2dpZCAiTGluZXMgb2YgY29udGV4dCIKK21zZ3N0ciAiTMOtbmVhcyBkZSBjb250ZXh0byIKKworIzogZ2l0azo4NjgKK21zZ2lkICJJZ25vcmUgc3BhY2UgY2hhbmdlIgorbXNnc3RyICJJZ25vcmEgY2FtYmlvcyBkZSBlc3BhY2lhZG8iCisKKyM6IGdpdGs6OTI2Cittc2dpZCAiUGF0Y2giCittc2dzdHIgIlBhcmNoZSIKKworIzogZ2l0azo5MjgKK21zZ2lkICJUcmVlIgorbXNnc3RyICLDgXJib2wiCisKKyM6IGdpdGs6MTA1MyBnaXRrOjEwNjggZ2l0azo2MDIyCittc2dpZCAiRGlmZiB0aGlzIC0+IHNlbGVjdGVkIgorbXNnc3RyICJEaWZlcmVuY2lhIGRlIGVzdGEgLT4gc2VsZWNjaW9uYWRhIgorCisjOiBnaXRrOjEwNTUgZ2l0azoxMDcwIGdpdGs6NjAyMworbXNnaWQgIkRpZmYgc2VsZWN0ZWQgLT4gdGhpcyIKK21zZ3N0ciAiRGlmZXJlbmNpYSBkZSBzZWxlY2Npb25hZGEgLT4gZXN0YSIKKworIzogZ2l0azoxMDU3IGdpdGs6MTA3MiBnaXRrOjYwMjQKK21zZ2lkICJNYWtlIHBhdGNoIgorbXNnc3RyICJDcmVhciBwYXRjaCIKKworIzogZ2l0azoxMDU4IGdpdGs6NjE2MgorbXNnaWQgIkNyZWF0ZSB0YWciCittc2dzdHIgIkNyZWFyIGV0aXF1ZXRhIgorCisjOiBnaXRrOjEwNTkgZ2l0azo2MjU1Cittc2dpZCAiV3JpdGUgY29tbWl0IHRvIGZpbGUiCittc2dzdHIgIkVzY3JpYmlyIHJldmlzaW9uZXMgYSBhcmNoaXZvIgorCisjOiBnaXRrOjEwNjAgZ2l0azo2MzA5Cittc2dpZCAiQ3JlYXRlIG5ldyBicmFuY2giCittc2dzdHIgIkNyZWFyIG51ZXZhIHJhbWEiCisKKyM6IGdpdGs6MTA2MQorbXNnaWQgIkNoZXJyeS1waWNrIHRoaXMgY29tbWl0IgorbXNnc3RyICJBw7FhZGlyIGVzdGEgcmV2aXNpw7NuIGEgbGEgcmFtYSBhY3R1YWwgKGNoZXJyeS1waWNrKSIKKworIzogZ2l0azoxMDYzCittc2dpZCAiUmVzZXQgSEVBRCBicmFuY2ggdG8gaGVyZSIKK21zZ3N0ciAiVHJhZXIgbGEgcmFtYSBIRUFEIGFxdcOtIgorCisjOiBnaXRrOjEwNzkKK21zZ2lkICJDaGVjayBvdXQgdGhpcyBicmFuY2giCittc2dzdHIgIkNhbWJpYXIgYSBlc3RhIHJhbWEiCisKKyM6IGdpdGs6MTA4MQorbXNnaWQgIlJlbW92ZSB0aGlzIGJyYW5jaCIKK21zZ3N0ciAiRWxpbWluYXIgZXN0YSByYW1hIgorCisjOiBnaXRrOjEwODcKK21zZ2lkICJIaWdobGlnaHQgdGhpcyB0b28iCittc2dzdHIgIlNlbGVjY2lvbmFyIHRhbWJpw6luIgorCisjOiBnaXRrOjEwODkKK21zZ2lkICJIaWdobGlnaHQgdGhpcyBvbmx5IgorbXNnc3RyICJTZWxlY2Npb25hciBzw7NsbyIKKworIzogZ2l0azoxMzE4Cittc2dpZCAiIgorIlxuIgorIkdpdGsgLSBhIGNvbW1pdCB2aWV3ZXIgZm9yIGdpdFxuIgorIlxuIgorIkNvcHlyaWdodCDCqSAyMDA1LTIwMDYgUGF1bCBNYWNrZXJyYXNcbiIKKyJcbiIKKyJVc2UgYW5kIHJlZGlzdHJpYnV0ZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIgorbXNnc3RyICIiCisiXG4iCisiR2l0ayAtIHVuIHZpc3VhbGl6YWRvciBkZSByZXZpc2lvbmVzIHBhcmEgZ2l0XG4iCisiXG4iCisiQ29weXJpZ2h0IMKpIDIwMDUtMjAwNiBQYXVsIE1hY2tlcnJhc1xuIgorIlxuIgorIlVzbyB5IHJlZGlzdHJpYnVjacOzbiBwZXJtaXRpZG9zIHNlZ8O6biBsb3MgdMOpcm1pbm9zIGRlIGxhIExpY2VuY2lhIFDDumJsaWNhIEdlbmVyYWwgZGUgIgorIkdOVSAoR05VIEdQTCkiCisKKyM6IGdpdGs6MTMyNiBnaXRrOjEzODcgZ2l0azo2NTgxCittc2dpZCAiQ2xvc2UiCittc2dzdHIgIkNlcnJhciIKKworIzogZ2l0azoxMzQ1Cittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3MiCittc2dzdHIgIkNvbWJpbmFjaW9uZXMgZGUgdGVjbGEgZGUgR2l0ayIKKworIzogZ2l0azoxMzQ3Cittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3M6IgorbXNnc3RyICJDb21iaW5hY2lvbmVzIGRlIHRlY2xhIGRlIEdpdGs6IgorCisjOiBnaXRrOjEzNDkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUT5cdFx0UXVpdCIKK21zZ3N0ciAiPCVzLVE+XHRcdFNhbGlyIgorCisjOiBnaXRrOjEzNTAKK21zZ2lkICI8SG9tZT5cdFx0TW92ZSB0byBmaXJzdCBjb21taXQiCittc2dzdHIgIjxIb21lPlx0XHRJciBhIGxhIHByaW1lcmEgcmV2aXNpw7NuIgorCisjOiBnaXRrOjEzNTEKK21zZ2lkICI8RW5kPlx0XHRNb3ZlIHRvIGxhc3QgY29tbWl0IgorbXNnc3RyICI8RW5kPlx0XHRJciBhIGxhIMO6bHRpbWEgcmV2aXNpw7NuIgorCisjOiBnaXRrOjEzNTIKK21zZ2lkICI8VXA+LCBwLCBpXHRNb3ZlIHVwIG9uZSBjb21taXQiCittc2dzdHIgIjxVcD4sIHAsIGlcdFN1YmlyIHVuYSByZXZpc2nDs24iCisKKyM6IGdpdGs6MTM1MworbXNnaWQgIjxEb3duPiwgbiwga1x0TW92ZSBkb3duIG9uZSBjb21taXQiCittc2dzdHIgIjxEb3duPiwgbiwga1x0QmFqYXIgdW5hIHJldmlzacOzbiIKKworIzogZ2l0azoxMzU0Cittc2dpZCAiPExlZnQ+LCB6LCBqXHRHbyBiYWNrIGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiPExlZnQ+LCB6LCBqXHRSZXRyb2NlZGVyIGVuIGxhIGhpc3RvcmlhIgorCisjOiBnaXRrOjEzNTUKK21zZ2lkICI8UmlnaHQ+LCB4LCBsXHRHbyBmb3J3YXJkIGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiPFJpZ2h0PiwgeCwgbFx0QXZhbnphciBlbiBsYSBoaXN0b3JpYSIKKworIzogZ2l0azoxMzU2Cittc2dpZCAiPFBhZ2VVcD5cdE1vdmUgdXAgb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCittc2dzdHIgIjxQYWdlVXA+XHRTdWJpciB1bmEgcMOhZ2luYSBlbiBsYSBsaXN0YSBkZSByZXZpc2lvbmVzIgorCisjOiBnaXRrOjEzNTcKK21zZ2lkICI8UGFnZURvd24+XHRNb3ZlIGRvd24gb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCittc2dzdHIgIjxQYWdlRG93bj5cdEJhamFyIHVuYSBww6FnaW5hIGVuIGxhIGxpc3RhIGRlIHJldmlzaW9uZXMiCisKKyM6IGdpdGs6MTM1OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Ib21lPlx0U2Nyb2xsIHRvIHRvcCBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLUhvbWU+XHREZXNwbGF6YXJzZSBhbCBpbmljaW8gZGUgbGEgbGlzdGEgZGUgcmV2aXNpb25lcyIKKworIzogZ2l0azoxMzU5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUVuZD5cdFNjcm9sbCB0byBib3R0b20gb2YgY29tbWl0IGxpc3QiCittc2dzdHIgIjwlcy1FbmQ+XHREZXNwbGF6YXJzZSBhbCBmaW5hbCBkZSBsYSBsaXN0YSBkZSByZXZpc2lvbmVzIgorCisjOiBnaXRrOjEzNjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIGxpbmUiCittc2dzdHIgIjwlcy1VcD5cdERlc3BsYXphciB1bmEgbMOtbmVhIGhhY2lhIGFycmliYSBsYSBsaXN0YSBkZSByZXZpc2lvbmVzIgorCisjOiBnaXRrOjEzNjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtRG93bj5cdERlc3BsYXphciB1bmEgbMOtbmVhIGhhY2lhIGFiYWpvIGxhIGxpc3RhIGRlIHJldmlzaW9uZXMiCisKKyM6IGdpdGs6MTM2MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1QYWdlVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIHBhZ2UiCittc2dzdHIgIjwlcy1QYWdlVXA+XHREZXNwbGF6YXIgdW5hIHDDoWdpbmEgaGFjaWEgYXJyaWJhIGxhIGxpc3RhIGRlIHJldmlzaW9uZXMiCisKKyM6IGdpdGs6MTM2MworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1QYWdlRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBwYWdlIgorbXNnc3RyICI8JXMtUGFnZURvd24+XHREZXNwbGF6YXIgdW5hIHDDoWdpbmEgaGFjaWEgYWJham8gbGEgbGlzdGEgZGUgcmV2aXNpb25lcyIKKworIzogZ2l0azoxMzY0Cittc2dpZCAiPFNoaWZ0LVVwPlx0RmluZCBiYWNrd2FyZHMgKHVwd2FyZHMsIGxhdGVyIGNvbW1pdHMpIgorbXNnc3RyICI8U2hpZnQtVXA+XHRCdXNjYXIgaGFjaWEgYXRyw6FzIChhcnJpYmEsIHJldmlzaW9uZXMgc2lndWllbnRlcykiCisKKyM6IGdpdGs6MTM2NQorbXNnaWQgIjxTaGlmdC1Eb3duPlx0RmluZCBmb3J3YXJkcyAoZG93bndhcmRzLCBlYXJsaWVyIGNvbW1pdHMpIgorbXNnc3RyICI8U2hpZnQtRG93bj5cdEJ1c2NhciBoYWNpYSBhZGVsYW50ZSAoYWJham8sIHJldmlzaW9uZXMgYW50ZXJpb3JlcykiCisKKyM6IGdpdGs6MTM2NgorbXNnaWQgIjxEZWxldGU+LCBiXHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8RGVsZXRlPiwgYlx0RGVzcGxhemEgaGFjaWEgYXJyaWJhIHVuYSBww6FnaW5hIGxhIHZpc3RhIGRlIGRpZmVyZW5jaWFzIgorCisjOiBnaXRrOjEzNjcKK21zZ2lkICI8QmFja3NwYWNlPlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPEJhY2tzcGFjZT5cdERlc3BsYXphIGhhY2lhIGFycmliYSB1bmEgcMOhZ2luYSBsYSB2aXN0YSBkZSBkaWZlcmVuY2lhcyIKKworIzogZ2l0azoxMzY4Cittc2dpZCAiPFNwYWNlPlx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjxTcGFjZT5cdFx0RGVzcGxhemEgaGFjaWEgYWJham8gdW5hIHDDoWdpbmEgbGEgdmlzdGEgZGUgZGlmZXJlbmNpYXMiCisKKyM6IGdpdGs6MTM2OQorbXNnaWQgInVcdFx0U2Nyb2xsIGRpZmYgdmlldyB1cCAxOCBsaW5lcyIKK21zZ3N0ciAidVx0XHREZXNwbGF6YSBoYWNpYSBhcnJpYmEgMTggbMOtbmVhcyBsYSB2aXN0YSBkZSBkaWZlcmVuY2lhcyIKKworIzogZ2l0azoxMzcwCittc2dpZCAiZFx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gMTggbGluZXMiCittc2dzdHIgImRcdFx0RGVzcGxhemEgaGFjaWEgYWJham8gMTggbMOtbmVhcyBsYSB2aXN0YSBkZSBkaWZlcmVuY2lhcyIKKworIzogZ2l0azoxMzcxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUY+XHRcdEZpbmQiCittc2dzdHIgIjwlcy1GPlx0XHRCdXNjYXIiCisKKyM6IGdpdGs6MTM3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1HPlx0XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjwlcy1HPlx0XHRCdXNjYXIgZWwgc2lndWllbnRlIgorCisjOiBnaXRrOjEzNzMKK21zZ2lkICI8UmV0dXJuPlx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgorbXNnc3RyICI8UmV0dXJuPlx0QnVzY2FyIGVsIHNpZ3VpZW50ZSIKKworIzogZ2l0azoxMzc0Cittc2dpZCAiL1x0XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQsIG9yIHJlZG8gZmluZCIKK21zZ3N0ciAiL1x0XHRCdXNjYXIgZWwgc2lndWllbnRlLCBvIHJlaW5pY2lhciBsYSBiw7pzcXVlZGEiCisKKyM6IGdpdGs6MTM3NQorbXNnaWQgIj9cdFx0TW92ZSB0byBwcmV2aW91cyBmaW5kIGhpdCIKK21zZ3N0ciAiP1x0XHRCdXNjYXIgZWwgYW50ZXJpb3IiCisKKyM6IGdpdGs6MTM3NgorbXNnaWQgImZcdFx0U2Nyb2xsIGRpZmYgdmlldyB0byBuZXh0IGZpbGUiCittc2dzdHIgImZcdFx0RGVzcGxhemFyIGxhIHZpc3RhIGRlIGRpZmVyZW5jaWFzIGFsIGFyY2hpdm8gc2lndWllbnRlIgorCisjOiBnaXRrOjEzNzcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUz5cdFx0U2VhcmNoIGZvciBuZXh0IGhpdCBpbiBkaWZmIHZpZXciCittc2dzdHIgIjwlcy1TPlx0XHRCdXNjYXIgc2lndWllbnRlIGVuIGxhIHZpc3RhIGRlIGRpZmVyZW5jaWFzIgorCisjOiBnaXRrOjEzNzgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUj5cdFx0U2VhcmNoIGZvciBwcmV2aW91cyBoaXQgaW4gZGlmZiB2aWV3IgorbXNnc3RyICI8JXMtUj5cdFx0QnVzY2FyIGFudGVyaW9yIGVuIGxhIHZpc3RhIGRlIGRpZmVyZW5jaWFzIgorCisjOiBnaXRrOjEzNzkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtS1ArPlx0SW5jcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtS1ArPlx0QXVtZW50YXIgdGFtYcOxbyBkZWwgdGV4dG8iCisKKyM6IGdpdGs6MTM4MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1wbHVzPlx0SW5jcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtcGx1cz5cdEF1bWVudGFyIHRhbWHDsW8gZGVsIHRleHRvIgorCisjOiBnaXRrOjEzODEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtS1AtPlx0RGVjcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtS1AtPlx0RGlzbWludWlyIHRhbWHDsW8gZGVsIHRleHRvIgorCisjOiBnaXRrOjEzODIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtbWludXM+XHREZWNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1taW51cz5cdERpc21pbnVpciB0YW1hw7FvIGRlbCB0ZXh0byIKKworIzogZ2l0azoxMzgzCittc2dpZCAiPEY1Plx0XHRVcGRhdGUiCittc2dzdHIgIjxGNT5cdFx0QWN0dWFsaXphciIKKworIzogZ2l0azoxODk2Cittc2dpZCAiR2l0ayB2aWV3IGRlZmluaXRpb24iCittc2dzdHIgIkRlZmluaWNpw7NuIGRlIHZpc3RhcyBkZSBHaXRrIgorCisjOiBnaXRrOjE5MjEKK21zZ2lkICJOYW1lIgorbXNnc3RyICJOb21icmUiCisKKyM6IGdpdGs6MTkyNAorbXNnaWQgIlJlbWVtYmVyIHRoaXMgdmlldyIKK21zZ3N0ciAiUmVjb3JkYXIgZXN0YSB2aXN0YSIKKworIzogZ2l0azoxOTI4Cittc2dpZCAiQ29tbWl0cyB0byBpbmNsdWRlIChhcmd1bWVudHMgdG8gZ2l0IHJldi1saXN0KToiCittc2dzdHIgIlJldmlzaW9uZXMgYSBpbmNsdWlyIChhcmd1bWVudG9zIGEgZ2l0IHJldi1saXN0KToiCisKKyM6IGdpdGs6MTkzNQorbXNnaWQgIkNvbW1hbmQgdG8gZ2VuZXJhdGUgbW9yZSBjb21taXRzIHRvIGluY2x1ZGU6IgorbXNnc3RyICJDb21hbmRvIHF1ZSBnZW5lcmEgbcOhcyByZXZpc2lvbmVzIGEgaW5jbHVpcjoiCisKKyM6IGdpdGs6MTk0MgorbXNnaWQgIkVudGVyIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBpbmNsdWRlLCBvbmUgcGVyIGxpbmU6IgorbXNnc3RyICJJbnRyb2R1Y2lyIGFyY2hpdm9zIHkgZGlyZWN0b3Jpb3MgYSBpbmNsdWlyLCB1bm8gcG9yIGzDrW5lYToiCisKKyM6IGdpdGs6MTk4OQorbXNnaWQgIkVycm9yIGluIGNvbW1pdCBzZWxlY3Rpb24gYXJndW1lbnRzOiIKK21zZ3N0ciAiRXJyb3IgZW4gbG9zIGFyZ3VtZW50b3MgZGUgc2VsZWNjacOzbiBkZSBsYXMgcmV2aXNpb25lczoiCisKKyM6IGdpdGs6MjA0MyBnaXRrOjIxMjcgZ2l0azoyNTgzIGdpdGs6MjU5NyBnaXRrOjM3ODEgZ2l0azo4Njg4IGdpdGs6ODY4OQorbXNnaWQgIk5vbmUiCittc2dzdHIgIk5pbmd1bm8iCisKKyM6IGdpdGs6MjUzMSBnaXRrOjQzMzYgZ2l0azo1OTU4IGdpdGs6NTk3MworbXNnaWQgIkRhdGUiCittc2dzdHIgIkZlY2hhIgorCisjOiBnaXRrOjI1MzEgZ2l0azo0MzM2Cittc2dpZCAiQ0RhdGUiCittc2dzdHIgIkZlY2hhIGRlIGNyZWFjacOzbiIKKworIzogZ2l0azoyNjgwIGdpdGs6MjY4NQorbXNnaWQgIkRlc2NlbmRhbnQiCittc2dzdHIgIkRlc2NlbmRpZW50ZSIKKworIzogZ2l0azoyNjgxCittc2dpZCAiTm90IGRlc2NlbmRhbnQiCittc2dzdHIgIk5vIGRlc2NlbmRpZW50ZSIKKworIzogZ2l0azoyNjg4IGdpdGs6MjY5MworbXNnaWQgIkFuY2VzdG9yIgorbXNnc3RyICJBbnRlcGFzYWRvIgorCisjOiBnaXRrOjI2ODkKK21zZ2lkICJOb3QgYW5jZXN0b3IiCittc2dzdHIgIk5vIGFudGVwYXNhZG8iCisKKyM6IGdpdGs6MjkyNAorbXNnaWQgIkxvY2FsIGNoYW5nZXMgY2hlY2tlZCBpbiB0byBpbmRleCBidXQgbm90IGNvbW1pdHRlZCIKK21zZ3N0ciAiQ2FtYmlvcyBsb2NhbGVzIGHDsWFkaWRvcyBhbCDDrW5kaWNlIHBlcm8gc2luIGNvbXBsZXRhciByZXZpc2nDs24iCisKKyM6IGdpdGs6Mjk1NAorbXNnaWQgIkxvY2FsIHVuY29tbWl0dGVkIGNoYW5nZXMsIG5vdCBjaGVja2VkIGluIHRvIGluZGV4IgorbXNnc3RyICJDYW1iaW9zIGxvY2FsZXMgc2luIGHDsWFkaXIgYWwgw61uZGljZSIKKworIzogZ2l0azo0MzA1Cittc2dpZCAiU2VhcmNoaW5nIgorbXNnc3RyICJCdXNjYW5kbyIKKworIzogZ2l0azo0NzY3Cittc2dpZCAiVGFnczoiCittc2dzdHIgIkV0aXF1ZXRhczoiCisKKyM6IGdpdGs6NDc4NCBnaXRrOjQ3OTAgZ2l0azo1OTUxCittc2dpZCAiUGFyZW50IgorbXNnc3RyICJQYWRyZSIKKworIzogZ2l0azo0Nzk1Cittc2dpZCAiQ2hpbGQiCittc2dzdHIgIkhpamEiCisKKyM6IGdpdGs6NDgwNAorbXNnaWQgIkJyYW5jaCIKK21zZ3N0ciAiUmFtYSIKKworIzogZ2l0azo0ODA3Cittc2dpZCAiRm9sbG93cyIKK21zZ3N0ciAiU2lndWUtYSIKKworIzogZ2l0azo0ODEwCittc2dpZCAiUHJlY2VkZXMiCittc2dzdHIgIlByZWNlZGUtYSIKKworIzogZ2l0azo1MDkzCittc2dpZCAiRXJyb3IgZ2V0dGluZyBtZXJnZSBkaWZmczoiCittc2dzdHIgIkVycm9yIGFsIGxlZXIgbGFzIGRpZmVyZW5jaWFzIGRlIGZ1c2nDs246IgorCisjOiBnaXRrOjU3NzgKK21zZ2lkICJHb3RvOiIKK21zZ3N0ciAiSXIgYToiCisKKyM6IGdpdGs6NTc4MAorbXNnaWQgIlNIQTEgSUQ6IgorbXNnc3RyICJTSEExIElEOiIKKworIzogZ2l0azo1ODA1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU2hvcnQgU0hBMSBpZCAlcyBpcyBhbWJpZ3VvdXMiCittc2dzdHIgIkxhIGlkIFNIQTEgYWJyZXZpYWRhICVzIGVzIGFtYmlndWEiCisKKyM6IGdpdGs6NTgxNworIywgdGNsLWZvcm1hdAorbXNnaWQgIlNIQTEgaWQgJXMgaXMgbm90IGtub3duIgorbXNnc3RyICJMYSBpZCBTSEExICVzIGVzIGRlc2Nvbm9jaWRhIgorCisjOiBnaXRrOjU4MTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUYWcvSGVhZCAlcyBpcyBub3Qga25vd24iCittc2dzdHIgIkxhIGV0aXF1ZXRhL3JhbWEgJXMgZXMgZGVjb25vY2lkYSIKKworIzogZ2l0azo1OTYxCittc2dpZCAiQ2hpbGRyZW4iCittc2dzdHIgIkhpamFzIgorCisjOiBnaXRrOjYwMTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldCAlcyBicmFuY2ggdG8gaGVyZSIKK21zZ3N0ciAiUG9uZXIgbGEgcmFtYSAlcyBlbiBlc3RhIHJldmlzacOzbiIKKworIzogZ2l0azo2MDQ5Cittc2dpZCAiVG9wIgorbXNnc3RyICJPcmlnZW4iCisKKyM6IGdpdGs6NjA1MAorbXNnaWQgIkZyb20iCittc2dzdHIgIkRlIgorCisjOiBnaXRrOjYwNTUKK21zZ2lkICJUbyIKK21zZ3N0ciAiQSIKKworIzogZ2l0azo2MDc4Cittc2dpZCAiR2VuZXJhdGUgcGF0Y2giCittc2dzdHIgIkdlbmVyYXIgcGFyY2hlIgorCisjOiBnaXRrOjYwODAKK21zZ2lkICJGcm9tOiIKK21zZ3N0ciAiRGU6IgorCisjOiBnaXRrOjYwODkKK21zZ2lkICJUbzoiCittc2dzdHIgIlBhcmE6IgorCisjOiBnaXRrOjYwOTgKK21zZ2lkICJSZXZlcnNlIgorbXNnc3RyICJJbnZlcnRpciIKKworIzogZ2l0azo2MTAwIGdpdGs6NjI2OQorbXNnaWQgIk91dHB1dCBmaWxlOiIKK21zZ3N0ciAiRXNjcmliaXIgYSBhcmNoaXZvOiIKKworIzogZ2l0azo2MTA2Cittc2dpZCAiR2VuZXJhdGUiCittc2dzdHIgIkdlbmVyYXIiCisKKyM6IGdpdGs6NjE0MgorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHBhdGNoOiIKK21zZ3N0ciAiRXJyb3IgZW4gbGEgY3JlYWNpw7NuIGRlbCBwYXJjaGU6IgorCisjOiBnaXRrOjYxNjQgZ2l0azo2MjU3IGdpdGs6NjMxMQorbXNnaWQgIklEOiIKK21zZ3N0ciAiSUQ6IgorCisjOiBnaXRrOjYxNzMKK21zZ2lkICJUYWcgbmFtZToiCittc2dzdHIgIk5vbWJyZSBkZSBldGlxdWV0YToiCisKKyM6IGdpdGs6NjE3NyBnaXRrOjYzMjAKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIkNyZWFyIgorCisjOiBnaXRrOjYxOTIKK21zZ2lkICJObyB0YWcgbmFtZSBzcGVjaWZpZWQiCittc2dzdHIgIk5vIHNlIGhhIGVzcGVjaWZpY2FkbyBldGlxdWV0YSIKKworIzogZ2l0azo2MTk2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFnIFwiJXNcIiBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiTGEgZXRpcXVldGEgXCIlc1wiIHlhIGV4aXN0ZSIKKworIzogZ2l0azo2MjAyCittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGFnOiIKK21zZ3N0ciAiRXJyb3IgYWwgY3JlYXIgbGEgZXRpcXVldGE6IgorCisjOiBnaXRrOjYyNjYKK21zZ2lkICJDb21tYW5kOiIKK21zZ3N0ciAiQ29tYW5kbzoiCisKKyM6IGdpdGs6NjI3NAorbXNnaWQgIldyaXRlIgorbXNnc3RyICJFc2NyaWJpciIKKworIzogZ2l0azo2MjkwCittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQ6IgorbXNnc3RyICJFcnJvciBhbCBlc2NyaWJpciByZXZpc2nDs246IgorCisjOiBnaXRrOjYzMTYKK21zZ2lkICJOYW1lOiIKK21zZ3N0ciAiTm9tYnJlOiIKKworIzogZ2l0azo2MzM1Cittc2dpZCAiUGxlYXNlIHNwZWNpZnkgYSBuYW1lIGZvciB0aGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAiRXNwZWNpZmlxdWUgdW4gbm9tYnJlIHBhcmEgbGEgbnVldmEgcmFtYSIKKworIzogZ2l0azo2MzY0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGlzIGFscmVhZHkgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZS1hcHBseSBpdD8iCittc2dzdHIgIkxhIHJldmlzacOzbiAlcyB5YSBlc3TDoSBpbmNsdWlkYSBlbiBsYSByYW1hICVzIC0tIMK/Vm9sdmVyIGEgYXBsaWNhcmxhPyIKKworIzogZ2l0azo2MzY5Cittc2dpZCAiQ2hlcnJ5LXBpY2tpbmciCittc2dzdHIgIkVsaWdpZW5kbyByZXZpc2lvbmVzIChjaGVycnktcGlja2luZykiCisKKyM6IGdpdGs6NjM4MQorbXNnaWQgIk5vIGNoYW5nZXMgY29tbWl0dGVkIgorbXNnc3RyICJObyBzZSBoYW4gZ3VhcmRhZG8gY2FtYmlvcyIKKworIzogZ2l0azo2NDA0Cittc2dpZCAiQ29uZmlybSByZXNldCIKK21zZ3N0ciAiQ29uZmlybWFyIGdpdCByZXNldCIKKworIzogZ2l0azo2NDA2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgYnJhbmNoICVzIHRvICVzPyIKK21zZ3N0ciAiwr9SZXBvbmVyIGxhIHJhbWEgJXMgYSAlcz8iCisKKyM6IGdpdGs6NjQxMAorbXNnaWQgIlJlc2V0IHR5cGU6IgorbXNnc3RyICJUaXBvIGRlIHJlcG9zaWNpw7NuOiIKKworIzogZ2l0azo2NDE0Cittc2dpZCAiU29mdDogTGVhdmUgd29ya2luZyB0cmVlIGFuZCBpbmRleCB1bnRvdWNoZWQiCittc2dzdHIgIlN1YXZlOiBObyBhbHRlcmEgbGEgY29waWEgZGUgdHJhYmFqbyBuaSBlbCDDrW5kaWNlIgorCisjOiBnaXRrOjY0MTcKK21zZ2lkICJNaXhlZDogTGVhdmUgd29ya2luZyB0cmVlIHVudG91Y2hlZCwgcmVzZXQgaW5kZXgiCittc2dzdHIgIk1peHRhOiBBY3R1YWxpemEgZWwgw61uZGljZSwgbm8gYWx0ZXJhIGxhIGNvcGlhIGRlIHRyYWJham8iCisKKyM6IGdpdGs6NjQyMAorbXNnaWQgIiIKKyJIYXJkOiBSZXNldCB3b3JraW5nIHRyZWUgYW5kIGluZGV4XG4iCisiKGRpc2NhcmQgQUxMIGxvY2FsIGNoYW5nZXMpIgorbXNnc3RyICIiCisiRHVyYTogQWN0dWFsaXphIGVsIMOtbmRpY2UgeSBsYSBjb3BpYSBkZSB0cmFiYWpvXG4iCisiKGFiYW5kb25hIFRPREFTIGxhcyBtb2RpZmljYWNpb25lcyBsb2NhbGVzKSIKKworIzogZ2l0azo2NDM2Cittc2dpZCAiUmVzZXR0aW5nIgorbXNnc3RyICJSZXBvbmllbmRvIgorCisjOiBnaXRrOjY0OTMKK21zZ2lkICJDaGVja2luZyBvdXQiCittc2dzdHIgIkNyZWFuZG8gY29waWEgZGUgdHJhYmFqbyIKKworIzogZ2l0azo2NTIzCittc2dpZCAiQ2Fubm90IGRlbGV0ZSB0aGUgY3VycmVudGx5IGNoZWNrZWQtb3V0IGJyYW5jaCIKK21zZ3N0ciAiTm8gc2UgcHVlZGUgYm9ycmFyIGxhIHJhbWEgYWN0dWFsIgorCisjOiBnaXRrOjY1MjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGNvbW1pdHMgb24gYnJhbmNoICVzIGFyZW4ndCBvbiBhbnkgb3RoZXIgYnJhbmNoLlxuIgorIlJlYWxseSBkZWxldGUgYnJhbmNoICVzPyIKK21zZ3N0ciAiIgorIkxhcyByZXZpc2lvbmVzIGRlIGxhIHJhbWEgJXMgbm8gZXN0w6FuIHByZXNlbnRlcyBlbiBvdHJhcyByYW1hcy5cbiIKKyLCv0JvcnJhciBsYSByYW1hICVzPyIKKworIzogZ2l0azo2NTYwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFncyBhbmQgaGVhZHM6ICVzIgorbXNnc3RyICJFdGlxdWV0YXMgeSByYW1hczogJXMiCisKKyM6IGdpdGs6NjU3NAorbXNnaWQgIkZpbHRlciIKK21zZ3N0ciAiRmlsdHJvIgorCisjOiBnaXRrOjY4NjgKK21zZ2lkICIiCisiRXJyb3IgcmVhZGluZyBjb21taXQgdG9wb2xvZ3kgaW5mb3JtYXRpb247IGJyYW5jaCBhbmQgcHJlY2VkaW5nL2ZvbGxvd2luZyAiCisidGFnIGluZm9ybWF0aW9uIHdpbGwgYmUgaW5jb21wbGV0ZS4iCittc2dzdHIgIiIKKyJFcnJvciBhbCBsZWVyIGxhIHRvcG9sb2fDrWEgZGUgcmV2aXNpb25lczogbGEgaW5mb3JtYWNpw7NuIHNvYnJlICIKKyJsYXMgcmFtYXMgeSBldGlxdWV0YXMgcHJlY2VkZW50ZXMgeSBzaWd1aWVudGVzIHNlcsOhIGluY29tcGxldGEuIgorCisjOiBnaXRrOjc4NTIKK21zZ2lkICJUYWciCittc2dzdHIgIkV0aXF1ZXRhIgorCisjOiBnaXRrOjc4NTIKK21zZ2lkICJJZCIKK21zZ3N0ciAiSWQiCisKKyM6IGdpdGs6Nzg5MgorbXNnaWQgIkdpdGsgZm9udCBjaG9vc2VyIgorbXNnc3RyICJTZWxlY3RvciBkZSB0aXBvZ3JhZsOtYXMgZ2l0ayIKKworIzogZ2l0azo3OTA5Cittc2dpZCAiQiIKK21zZ3N0ciAiQiIKKworIzogZ2l0azo3OTEyCittc2dpZCAiSSIKK21zZ3N0ciAiSSIKKworIzogZ2l0azo4MDA1Cittc2dpZCAiR2l0ayBwcmVmZXJlbmNlcyIKK21zZ3N0ciAiUHJlZmVyZW5jaWFzIGRlIGdpdGsiCisKKyM6IGdpdGs6ODAwNgorbXNnaWQgIkNvbW1pdCBsaXN0IGRpc3BsYXkgb3B0aW9ucyIKK21zZ3N0ciAiT3BjaW9uZXMgZGUgdmlzdWFsaXphY2nDs24gZGUgbGEgbGlzdGEgZGUgcmV2aXNpb25lcyIKKworIzogZ2l0azo4MDA5Cittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAobGluZXMpIgorbXNnc3RyICJBbmNobyBtw6F4aW1vIGRlbCBncsOhZmljbyAoZW4gbMOtbmVhcykiCisKKyM6IGdpdGs6ODAxMworIywgdGNsLWZvcm1hdAorbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKCUgb2YgcGFuZSkiCittc2dzdHIgIkFuY2hvIG3DoXhpbW8gZGVsIGdyw6FmaWNvIChlbiAlIGRlbCBwYW5lbCkiCisKKyM6IGdpdGs6ODAxOAorbXNnaWQgIlNob3cgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAiTW9zdHJhciBjYW1iaW9zIGxvY2FsZXMiCisKKyM6IGdpdGs6ODAyMworbXNnaWQgIkF1dG8tc2VsZWN0IFNIQTEiCittc2dzdHIgIlNlbGVjY2lvbmFyIGF1dG9tw6F0aWNhbWVudGUgU0hBMSBoYXNoIgorCisjOiBnaXRrOjgwMjgKK21zZ2lkICJEaWZmIGRpc3BsYXkgb3B0aW9ucyIKK21zZ3N0ciAiT3BjaW9uZXMgZGUgdmlzdWFsaXphY2nDs24gZGUgZGlmZXJlbmNpYXMiCisKKyM6IGdpdGs6ODAzMAorbXNnaWQgIlRhYiBzcGFjaW5nIgorbXNnc3RyICJFc3BhY2lhZG8gZGUgdGFidWxhZG9yIgorCisjOiBnaXRrOjgwMzQKK21zZ2lkICJEaXNwbGF5IG5lYXJieSB0YWdzIgorbXNnc3RyICJNb3N0cmFyIGV0aXF1ZXRhcyBjZXJjYW5hcyIKKworIzogZ2l0azo4MDM5Cittc2dpZCAiTGltaXQgZGlmZnMgdG8gbGlzdGVkIHBhdGhzIgorbXNnc3RyICJMaW1pdGFyIGxhcyBkaWZlcmVuY2lhcyBhIGxhcyBydXRhcyBzZWxlY2Npb25hZGFzIgorCisjOiBnaXRrOjgwNDQKK21zZ2lkICJDb2xvcnM6IHByZXNzIHRvIGNob29zZSIKK21zZ3N0ciAiQ29sb3JlczogcHVsc2UgcGFyYSBzZWxlY2Npb25hciIKKworIzogZ2l0azo4MDQ3Cittc2dpZCAiQmFja2dyb3VuZCIKK21zZ3N0ciAiRm9uZG8iCisKKyM6IGdpdGs6ODA1MQorbXNnaWQgIkZvcmVncm91bmQiCittc2dzdHIgIlByaW1lciBwbGFubyIKKworIzogZ2l0azo4MDU1Cittc2dpZCAiRGlmZjogb2xkIGxpbmVzIgorbXNnc3RyICJEaWZmOiBsw61uZWFzIHZpZWphcyIKKworIzogZ2l0azo4MDYwCittc2dpZCAiRGlmZjogbmV3IGxpbmVzIgorbXNnc3RyICJEaWZmOiBsw61uZWFzIG51ZXZhcyIKKworIzogZ2l0azo4MDY1Cittc2dpZCAiRGlmZjogaHVuayBoZWFkZXIiCittc2dzdHIgIkRpZmY6IGNhYmVjZXJhIGRlIGZyYWdtZW50byIKKworIzogZ2l0azo4MDcxCittc2dpZCAiU2VsZWN0IGJnIgorbXNnc3RyICJDb2xvciBkZSBmb25kbyBkZSBsYSBzZWxlY2Npw7NuIgorCisjOiBnaXRrOjgwNzUKK21zZ2lkICJGb250czogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICJUaXBvZ3JhZsOtYXM6IHB1bHNlIHBhcmEgZWxlZ2lyIgorCisjOiBnaXRrOjgwNzcKK21zZ2lkICJNYWluIGZvbnQiCittc2dzdHIgIlRpcG9ncmFmw61hIHByaW5jaXBhbCIKKworIzogZ2l0azo4MDc4Cittc2dpZCAiRGlmZiBkaXNwbGF5IGZvbnQiCittc2dzdHIgIlRpcG9ncmFmw61hIHBhcmEgZGlmZXJlbmNpYXMiCisKKyM6IGdpdGs6ODA3OQorbXNnaWQgIlVzZXIgaW50ZXJmYWNlIGZvbnQiCittc2dzdHIgIlRpcG9ncmFmw61hIHBhcmEgaW50ZXJmYXogZGUgdXN1YXJpbyIKKworIzogZ2l0azo4MDk1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiR2l0azogY2hvb3NlIGNvbG9yIGZvciAlcyIKK21zZ3N0ciAiR2l0azogZWxlZ2lyIGNvbG9yIHBhcmEgJXMiCisKKyM6IGdpdGs6ODQ3NgorbXNnaWQgIiIKKyJTb3JyeSwgZ2l0ayBjYW5ub3QgcnVuIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFRjbC9Uay5cbiIKKyIgR2l0ayByZXF1aXJlcyBhdCBsZWFzdCBUY2wvVGsgOC40LiIKK21zZ3N0ciAiIgorIkVzdGEgdmVyc2nDs24gZGUgVGNsL1RrIGVzIGRlbWFzaWFkbyBhbnRpZ3VhLlxuIgorIiBHaXRrIHJlcXVpZXJlIFRjbC9UayB2ZXJzacOzbiA4LjQgbyBzdXBlcmlvci4iCisKKyM6IGdpdGs6ODU2NQorbXNnaWQgIkNhbm5vdCBmaW5kIGEgZ2l0IHJlcG9zaXRvcnkgaGVyZS4iCittc2dzdHIgIk5vIGhheSB1biByZXBvc2l0b3JpbyBnaXQgYXF1w60uIgorCisjOiBnaXRrOjg1NjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZmluZCB0aGUgZ2l0IGRpcmVjdG9yeSBcIiVzXCIuIgorbXNnc3RyICJObyBoYXkgZGlyZWN0b3JpbyBnaXQgXCIlc1wiLiIKKworIzogZ2l0azo4NjEyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lIgorbXNnc3RyICJBcmd1bWVudG8gYW1iaWd1bzogJyVzJyBlcyB0YW50byB1bmEgcmV2aXNpw7NuIGNvbW8gdW4gbm9tYnJlIGRlIGFyY2hpdm8iCisKKyM6IGdpdGs6ODYyNAorbXNnaWQgIkJhZCBhcmd1bWVudHMgdG8gZ2l0azoiCittc2dzdHIgIkFyZ3VtZW50b3MgaW5jb3JyZWN0b3MgYSBHaXRrOiIKKworIzogZ2l0azo4NjM2Cittc2dpZCAiQ291bGRuJ3QgZ2V0IGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXM6IgorbXNnc3RyICJJbXBvc2libGUgb2J0ZW5lciBsYSBsaXN0YSBkZSBhcmNoaXZvcyBwZW5kaWVudGVzIGRlIGZ1c2nDs246IgorCisjOiBnaXRrOjg2NTIKK21zZ2lkICJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIGZpbGVzIGFyZSB1bm1lcmdlZC4iCittc2dzdHIgIiIKKyJObyBoYXkgYXJjaGl2b3Mgc2VsZWNjaW9uYWRvczogc2Ugc2VsZWNjaW9uw7MgbGEgb3BjacOzbiAtLW1lcmdlIHBlcm8gbm8gaGF5ICIKKyJhcmNoaXZvcyBwZW5kaWVudGVzIGRlIGZ1c2nDs24uIgorCisjOiBnaXRrOjg2NTUKK21zZ2lkICIiCisiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyB1bm1lcmdlZCBmaWxlcyBhcmUgd2l0aGluIGZpbGUgIgorImxpbWl0LiIKK21zZ3N0ciAiIgorIk5vIGhheSBhcmNoaXZvcyBzZWxlY2Npb25hZG9zOiBzZSBzZWxlY2Npb27DsyBsYSBvcGNpw7NuIC0tbWVyZ2UgcGVybyBsb3MgYXJjaGl2b3MgIgorImVzcGVjaWZpY2Fkb3Mgbm8gbmVjZXNpdGFuIGZ1c2nDs24uIgorCisjOiBnaXRrOjg3MTYKK21zZ2lkICJDb21tYW5kIGxpbmUiCittc2dzdHIgIkzDrW5lYSBkZSBjb21hbmRvcyIKZGlmZiAtLWdpdCBhL2dpdGstZ2l0L3BvL3N2LnBvIGIvZ2l0ay1naXQvcG8vc3YucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZiMDgwZAotLS0gL2Rldi9udWxsCisrKyBiL2dpdGstZ2l0L3BvL3N2LnBvCkBAIC0wLDAgKzEsODg3IEBACisjIFN3ZWRpc2ggdHJhbnNsYXRpb24gZm9yIGdpdGsKKyMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDggUGF1bCBNYWNrZXJyYXMKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdpdGsgcGFja2FnZS4KKyMKKyMgUGV0ZXIgS2FybHNzb24gPHBldGVyQHNvZnR3b2x2ZXMucHAuc2U+LCAyMDA4LgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogc3ZcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMDgtMDMtMTQgMTU6MDMrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDgtMDMtMTQgMTY6MDZDRVQtMVxuIgorIkxhc3QtVHJhbnNsYXRvcjogUGV0ZXIgS2FybHNzb24gPHBldGVyQHNvZnR3b2x2ZXMucHAuc2U+XG4iCisiTGFuZ3VhZ2UtVGVhbTogU3dlZGlzaCA8c3ZAbGkub3JnPlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdCIKKworIzogZ2l0azoxMTEKK21zZ2lkICJFcnJvciBleGVjdXRpbmcgZ2l0IHJldi1saXN0OiIKK21zZ3N0ciAiRmVsIHZpZCBrw7ZybmluZyBhdiBnaXQgcmV2LWxpc3Q6IgorCisjOiBnaXRrOjEyNAorbXNnaWQgIlJlYWRpbmciCittc2dzdHIgIkzDpHNlciIKKworIzogZ2l0azoxNTEgZ2l0azoyMTkxCittc2dpZCAiUmVhZGluZyBjb21taXRzLi4uIgorbXNnc3RyICJMw6RzZXIgaW5jaGVja25pbmdhci4uLiIKKworIzogZ2l0azoyNzUKK21zZ2lkICJDYW4ndCBwYXJzZSBnaXQgbG9nIG91dHB1dDoiCittc2dzdHIgIkthbiBpbnRlIHRvbGthIHV0ZGF0YSBmcsOlbiBnaXQgbG9nOiIKKworIzogZ2l0azozODYgZ2l0azoyMTk1Cittc2dpZCAiTm8gY29tbWl0cyBzZWxlY3RlZCIKK21zZ3N0ciAiSW5nYSBpbmNoZWNrbmluZ2FyIG1hcmtlcmFkZSIKKworIzogZ2l0azo1MDAKK21zZ2lkICJObyBjb21taXQgaW5mb3JtYXRpb24gYXZhaWxhYmxlIgorbXNnc3RyICJJbmdlbiBpbmNoZWNrbmluZ3NpbmZvcm1hdGlvbiDDpHIgdGlsbGfDpG5nbGlnIgorCisjOiBnaXRrOjU5OSBnaXRrOjYyMSBnaXRrOjE5NTUgZ2l0azo2NDIzIGdpdGs6NzkyMyBnaXRrOjgwODIKK21zZ2lkICJPSyIKK21zZ3N0ciAiT0siCisKKyM6IGdpdGs6NjIzIGdpdGs6MTk1NiBnaXRrOjYxMDcgZ2l0azo2MTc4IGdpdGs6NjI3NSBnaXRrOjYzMjEgZ2l0azo2NDI1CisjOiBnaXRrOjc5MjQgZ2l0azo4MDgzCittc2dpZCAiQ2FuY2VsIgorbXNnc3RyICJBdmJyeXQiCisKKyM6IGdpdGs6NjYxCittc2dpZCAiRmlsZSIKK21zZ3N0ciAiQXJraXYiCisKKyM6IGdpdGs6NjYzCittc2dpZCAiVXBkYXRlIgorbXNnc3RyICJVcHBkYXRlcmEiCisKKyM6IGdpdGs6NjY0Cittc2dpZCAiUmVyZWFkIHJlZmVyZW5jZXMiCittc2dzdHIgIkzDpHMgb20gcmVmZXJlbnNlciIKKworIzogZ2l0azo2NjUKK21zZ2lkICJMaXN0IHJlZmVyZW5jZXMiCittc2dzdHIgIlZpc2EgcmVmZXJlbnNlciIKKworIzogZ2l0azo2NjYKK21zZ2lkICJRdWl0IgorbXNnc3RyICJBdnNsdXRhIgorCisjOiBnaXRrOjY2OAorbXNnaWQgIkVkaXQiCittc2dzdHIgIlJlZGlnZXJhIgorCisjOiBnaXRrOjY2OQorbXNnaWQgIlByZWZlcmVuY2VzIgorbXNnc3RyICJJbnN0w6RsbG5pbmdhciIKKworIzogZ2l0azo2NzIgZ2l0azoxODkyCittc2dpZCAiVmlldyIKK21zZ3N0ciAiVmlzYSIKKworIzogZ2l0azo2NzMKK21zZ2lkICJOZXcgdmlldy4uLiIKK21zZ3N0ciAiTnkgdnkuLi4iCisKKyM6IGdpdGs6Njc0IGdpdGs6MjEzMyBnaXRrOjg3MjIKK21zZ2lkICJFZGl0IHZpZXcuLi4iCittc2dzdHIgIsOEbmRyYSB2eS4uLiIKKworIzogZ2l0azo2NzYgZ2l0azoyMTM0IGdpdGs6ODcyMworbXNnaWQgIkRlbGV0ZSB2aWV3IgorbXNnc3RyICJUYSBib3J0IHZ5IgorCisjOiBnaXRrOjY3OAorbXNnaWQgIkFsbCBmaWxlcyIKK21zZ3N0ciAiQWxsYSBmaWxlciIKKworIzogZ2l0azo2ODIKK21zZ2lkICJIZWxwIgorbXNnc3RyICJIasOkbHAiCisKKyM6IGdpdGs6NjgzIGdpdGs6MTMxNworbXNnaWQgIkFib3V0IGdpdGsiCittc2dzdHIgIk9tIGdpdGsiCisKKyM6IGdpdGs6Njg0Cittc2dpZCAiS2V5IGJpbmRpbmdzIgorbXNnc3RyICJUYW5nZW50Ym9yZHNiaW5kbmluZ2FyIgorCisjOiBnaXRrOjc0MQorbXNnaWQgIlNIQTEgSUQ6ICIKK21zZ3N0ciAiU0hBMS1pZDogIgorCisjOiBnaXRrOjc5MQorbXNnaWQgIkZpbmQiCittc2dzdHIgIlPDtmsiCisKKyM6IGdpdGs6NzkyCittc2dpZCAibmV4dCIKK21zZ3N0ciAibsOkc3RhIgorCisjOiBnaXRrOjc5MworbXNnaWQgInByZXYiCittc2dzdHIgImbDtnJlZyIKKworIzogZ2l0azo3OTQKK21zZ2lkICJjb21taXQiCittc2dzdHIgImluY2hlY2tuaW5nIgorCisjOiBnaXRrOjc5NyBnaXRrOjc5OSBnaXRrOjIzNTYgZ2l0azoyMzc5IGdpdGs6MjQwMyBnaXRrOjQzMDYgZ2l0azo0MzY5Cittc2dpZCAiY29udGFpbmluZzoiCittc2dzdHIgInNvbSBpbm5laMOlbGxlcjoiCisKKyM6IGdpdGs6ODAwIGdpdGs6MTc3OCBnaXRrOjE3ODMgZ2l0azoyNDMxCittc2dpZCAidG91Y2hpbmcgcGF0aHM6IgorbXNnc3RyICJzb20gcsO2ciBzw7ZrdsOkZzoiCisKKyM6IGdpdGs6ODAxIGdpdGs6MjQzNgorbXNnaWQgImFkZGluZy9yZW1vdmluZyBzdHJpbmc6IgorbXNnc3RyICJzb20gbMOkZ2dlci90aWxsIHRhciBib3J0IHN0csOkbmc6IgorCisjOiBnaXRrOjgxMCBnaXRrOjgxMgorbXNnaWQgIkV4YWN0IgorbXNnc3RyICJFeGFrdCIKKworIzogZ2l0azo4MTIgZ2l0azoyNTE0IGdpdGs6NDI3NAorbXNnaWQgIklnbkNhc2UiCittc2dzdHIgIklnblZlcnNhbGVyIgorCisjOiBnaXRrOjgxMiBnaXRrOjI0MDUgZ2l0azoyNTEyIGdpdGs6NDI3MAorbXNnaWQgIlJlZ2V4cCIKK21zZ3N0ciAiUmVnLnV0dHIuIgorCisjOiBnaXRrOjgxNCBnaXRrOjgxNSBnaXRrOjI1MzMgZ2l0azoyNTYzIGdpdGs6MjU3MCBnaXRrOjQzODAgZ2l0azo0NDM2Cittc2dpZCAiQWxsIGZpZWxkcyIKK21zZ3N0ciAiQWxsYSBmw6RsdCIKKworIzogZ2l0azo4MTUgZ2l0azoyNTMxIGdpdGs6MjU2MyBnaXRrOjQzMzYKK21zZ2lkICJIZWFkbGluZSIKK21zZ3N0ciAiUnVicmlrIgorCisjOiBnaXRrOjgxNiBnaXRrOjI1MzEgZ2l0azo0MzM2IGdpdGs6NDQzNiBnaXRrOjQ4MjcKK21zZ2lkICJDb21tZW50cyIKK21zZ3N0ciAiS29tbWVudGFyZXIiCisKKyM6IGdpdGs6ODE2IGdpdGs6MjUzMSBnaXRrOjI1MzUgZ2l0azoyNTcwIGdpdGs6NDMzNiBnaXRrOjQ3NjMgZ2l0azo1OTU2CisjOiBnaXRrOjU5NzEKK21zZ2lkICJBdXRob3IiCittc2dzdHIgIkbDtnJmYXR0YXJlIgorCisjOiBnaXRrOjgxNiBnaXRrOjI1MzEgZ2l0azo0MzM2IGdpdGs6NDc2NQorbXNnaWQgIkNvbW1pdHRlciIKK21zZ3N0ciAiSW5jaGVja2FyZSIKKworIzogZ2l0azo4NDUKK21zZ2lkICJTZWFyY2giCittc2dzdHIgIlPDtmsiCisKKyM6IGdpdGs6ODUyCittc2dpZCAiRGlmZiIKK21zZ3N0ciAiRGlmZiIKKworIzogZ2l0azo4NTQKK21zZ2lkICJPbGQgdmVyc2lvbiIKK21zZ3N0ciAiR2FtbWFsIHZlcnNpb24iCisKKyM6IGdpdGs6ODU2Cittc2dpZCAiTmV3IHZlcnNpb24iCittc2dzdHIgIk55IHZlcnNpb24iCisKKyM6IGdpdGs6ODU4Cittc2dpZCAiTGluZXMgb2YgY29udGV4dCIKK21zZ3N0ciAiUmFkZXIgc2FtbWFuaGFuZyIKKworIzogZ2l0azo4NjgKK21zZ2lkICJJZ25vcmUgc3BhY2UgY2hhbmdlIgorbXNnc3RyICJJZ25vcmVyYSDDpG5kcmluZ2FyIGkgYmxhbmtzdGVnIgorCisjOiBnaXRrOjkyNgorbXNnaWQgIlBhdGNoIgorbXNnc3RyICJQYXRjaCIKKworIzogZ2l0azo5MjgKK21zZ2lkICJUcmVlIgorbXNnc3RyICJUcsOkZCIKKworIzogZ2l0azoxMDUzIGdpdGs6MTA2OCBnaXRrOjYwMjIKK21zZ2lkICJEaWZmIHRoaXMgLT4gc2VsZWN0ZWQiCittc2dzdHIgIkRpZmYgZGVubmEgLT4gbWFya2VyYWQiCisKKyM6IGdpdGs6MTA1NSBnaXRrOjEwNzAgZ2l0azo2MDIzCittc2dpZCAiRGlmZiBzZWxlY3RlZCAtPiB0aGlzIgorbXNnc3RyICJEaWZmIG1hcmtlcmFkIC0+IGRlbm5hIgorCisjOiBnaXRrOjEwNTcgZ2l0azoxMDcyIGdpdGs6NjAyNAorbXNnaWQgIk1ha2UgcGF0Y2giCittc2dzdHIgIlNrYXBhIHBhdGNoIgorCisjOiBnaXRrOjEwNTggZ2l0azo2MTYyCittc2dpZCAiQ3JlYXRlIHRhZyIKK21zZ3N0ciAiU2thcGEgdGFnZyIKKworIzogZ2l0azoxMDU5IGdpdGs6NjI1NQorbXNnaWQgIldyaXRlIGNvbW1pdCB0byBmaWxlIgorbXNnc3RyICJTa3JpdiBpbmNoZWNrbmluZyB0aWxsIGZpbCIKKworIzogZ2l0azoxMDYwIGdpdGs6NjMwOQorbXNnaWQgIkNyZWF0ZSBuZXcgYnJhbmNoIgorbXNnc3RyICJTa2FwYSBueSBncmVuIgorCisjOiBnaXRrOjEwNjEKK21zZ2lkICJDaGVycnktcGljayB0aGlzIGNvbW1pdCIKK21zZ3N0ciAiUGxvY2thIGRlbm5hIGluY2hlY2tuaW5nIgorCisjOiBnaXRrOjEwNjMKK21zZ2lkICJSZXNldCBIRUFEIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICLDhXRlcnN0w6RsbCBIRUFELWdyZW5lbiBoaXQiCisKKyM6IGdpdGs6MTA3OQorbXNnaWQgIkNoZWNrIG91dCB0aGlzIGJyYW5jaCIKK21zZ3N0ciAiQ2hlY2thIHV0IGRlbm5hIGdyZW4iCisKKyM6IGdpdGs6MTA4MQorbXNnaWQgIlJlbW92ZSB0aGlzIGJyYW5jaCIKK21zZ3N0ciAiVGEgYm9ydCBkZW5uYSBncmVuIgorCisjOiBnaXRrOjEwODcKK21zZ2lkICJIaWdobGlnaHQgdGhpcyB0b28iCittc2dzdHIgIk1hcmtlcmEgw6R2ZW4gZGV0dGEiCisKKyM6IGdpdGs6MTA4OQorbXNnaWQgIkhpZ2hsaWdodCB0aGlzIG9ubHkiCittc2dzdHIgIk1hcmtlcmEgYmFyYSBkZXR0YSIKKworIzogZ2l0azoxMzE4Cittc2dpZCAiIgorIlxuIgorIkdpdGsgLSBhIGNvbW1pdCB2aWV3ZXIgZm9yIGdpdFxuIgorIlxuIgorIkNvcHlyaWdodCDCqSAyMDA1LTIwMDYgUGF1bCBNYWNrZXJyYXNcbiIKKyJcbiIKKyJVc2UgYW5kIHJlZGlzdHJpYnV0ZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIgorbXNnc3RyICIiCisiXG4iCisiR2l0ayAtIGVuIGluY2hlY2tuaW5nc3Zpc2FyZSBmw7ZyIGdpdFxuIgorIlxuIgorIkNvcHlyaWdodCDCqSAyMDA1LTIwMDYgUGF1bCBNYWNrZXJyYXNcbiIKKyJcbiIKKyJBbnbDpG5kIG9jaCB2aWRhcmVmw7ZybWVkbGEgZW5saWd0IHZpbGxrb3JlbiBpIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIgorCisjOiBnaXRrOjEzMjYgZ2l0azoxMzg3IGdpdGs6NjU4MQorbXNnaWQgIkNsb3NlIgorbXNnc3RyICJTdMOkbmciCisKKyM6IGdpdGs6MTM0NQorbXNnaWQgIkdpdGsga2V5IGJpbmRpbmdzIgorbXNnc3RyICJUYW5nZW50Ym9yZHNiaW5kbmluZ2FyIGbDtnIgR2l0ayIKKworIzogZ2l0azoxMzQ3Cittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3M6IgorbXNnc3RyICJUYW5nZW50Ym9yZHNiaW5kbmluZ2FyIGbDtnIgR2l0azoiCisKKyM6IGdpdGs6MTM0OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1RPlx0XHRRdWl0IgorbXNnc3RyICI8JXMtUT5cdFx0QXZzbHV0YSIKKworIzogZ2l0azoxMzUwCittc2dpZCAiPEhvbWU+XHRcdE1vdmUgdG8gZmlyc3QgY29tbWl0IgorbXNnc3RyICI8SG9tZT5cdFx0R8OlIHRpbGwgZsO2cnN0YSBpbmNoZWNrbmluZyIKKworIzogZ2l0azoxMzUxCittc2dpZCAiPEVuZD5cdFx0TW92ZSB0byBsYXN0IGNvbW1pdCIKK21zZ3N0ciAiPEVuZD5cdFx0R8OlIHRpbGwgc2lzdGEgaW5jaGVja25pbmciCisKKyM6IGdpdGs6MTM1MgorbXNnaWQgIjxVcD4sIHAsIGlcdE1vdmUgdXAgb25lIGNvbW1pdCIKK21zZ3N0ciAiPFVwcD4sIHAsIGlcdEfDpSBlbiBpbmNoZWNrbmluZyB1cHAiCisKKyM6IGdpdGs6MTM1MworbXNnaWQgIjxEb3duPiwgbiwga1x0TW92ZSBkb3duIG9uZSBjb21taXQiCittc2dzdHIgIjxOZWQ+LCBuLCBrXHRHw6UgZW4gaW5jaGVja25pbmcgbmVkIgorCisjOiBnaXRrOjEzNTQKK21zZ2lkICI8TGVmdD4sIHosIGpcdEdvIGJhY2sgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8VsOkbnN0ZXI+LCB6LCBqXHRHw6UgYmFrw6V0IGkgaGlzdG9yaWtlbiIKKworIzogZ2l0azoxMzU1Cittc2dpZCAiPFJpZ2h0PiwgeCwgbFx0R28gZm9yd2FyZCBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxIw7ZnZXI+LCB4LCBsXHRHw6UgZnJhbcOldCBpIGhpc3RvcmlrZW4iCisKKyM6IGdpdGs6MTM1NgorbXNnaWQgIjxQYWdlVXA+XHRNb3ZlIHVwIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8UGFnZVVwPlx0R8OlIHVwcCBlbiBzaWRhIGkgaW5jaGVja25pbmdzbGlzdGFuIgorCisjOiBnaXRrOjEzNTcKK21zZ2lkICI8UGFnZURvd24+XHRNb3ZlIGRvd24gb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCittc2dzdHIgIjxQYWdlRG93bj5cdEfDpSBuZWQgZW4gc2lkYSBpIGluY2hlY2tuaW5nc2xpc3RhbiIKKworIzogZ2l0azoxMzU4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUhvbWU+XHRTY3JvbGwgdG8gdG9wIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtSG9tZT5cdFJ1bGxhIHRpbGwgYsO2cmphbiBhdiBpbmNoZWNrbmluZ3NsaXN0YW4iCisKKyM6IGdpdGs6MTM1OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1FbmQ+XHRTY3JvbGwgdG8gYm90dG9tIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtRW5kPlx0UnVsbGEgdGlsbCBzbHV0ZXQgYXYgaW5jaGVja25pbmdzbGlzdGFuIgorCisjOiBnaXRrOjEzNjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIGxpbmUiCittc2dzdHIgIjwlcy1VcHA+XHRSdWxsYSBpbmNoZWNrbmluZ3NsaXN0YW4gdXBwIGV0dCBzdGVnIgorCisjOiBnaXRrOjEzNjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtTmVkPlx0UnVsbGEgaW5jaGVja25pbmdzbGlzdGFuIG5lZCBldHQgc3RlZyIKKworIzogZ2l0azoxMzYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VVcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPCVzLVBhZ2VVcD5cdFJ1bGxhIGluY2hlY2tuaW5nc2xpc3RhbiB1cHAgZW4gc2lkYSIKKworIzogZ2l0azoxMzYzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VEb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjwlcy1QYWdlRG93bj5cdFJ1bGxhIGluY2hlY2tuaW5nc2xpc3RhbiBuZWQgZW4gc2lkYSIKKworIzogZ2l0azoxMzY0Cittc2dpZCAiPFNoaWZ0LVVwPlx0RmluZCBiYWNrd2FyZHMgKHVwd2FyZHMsIGxhdGVyIGNvbW1pdHMpIgorbXNnc3RyICI8U2tpZnQtVXBwPlx0U8O2ayBiYWvDpXQgKHVwcMOldCwgc2VuYXJlIGluY2hlY2tuaW5nYXIpIgorCisjOiBnaXRrOjEzNjUKK21zZ2lkICI8U2hpZnQtRG93bj5cdEZpbmQgZm9yd2FyZHMgKGRvd253YXJkcywgZWFybGllciBjb21taXRzKSIKK21zZ3N0ciAiPFNraWZ0LU5lZD5cdFPDtmsgZnJhbcOldCAobmVkw6V0LCB0aWRpZ2FyZSBpbmNoZWNrbmluZ2FyKSIKKworIzogZ2l0azoxMzY2Cittc2dpZCAiPERlbGV0ZT4sIGJcdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxEZWxldGU+LCBiXHRSdWxsYSBkaWZmdmlzbmluZ2VuIHVwcCBlbiBzaWRhIgorCisjOiBnaXRrOjEzNjcKK21zZ2lkICI8QmFja3NwYWNlPlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPEJha3N0ZWc+XHRSdWxsYSBkaWZmdmlzbmluZ2VuIHVwcCBlbiBzaWRhIgorCisjOiBnaXRrOjEzNjgKK21zZ2lkICI8U3BhY2U+XHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biBvbmUgcGFnZSIKK21zZ3N0ciAiPEJsYW5rc3RlZz5cdFJ1bGxhIGRpZmZ2aXNuaW5nZW4gbmVkIGVuIHNpZGEiCisKKyM6IGdpdGs6MTM2OQorbXNnaWQgInVcdFx0U2Nyb2xsIGRpZmYgdmlldyB1cCAxOCBsaW5lcyIKK21zZ3N0ciAidVx0XHRSdWxsYSBkaWZmdmlzbmluZ2VuIHVwcCAxOCByYWRlciIKKworIzogZ2l0azoxMzcwCittc2dpZCAiZFx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gMTggbGluZXMiCittc2dzdHIgImRcdFx0UnVsbGEgZGlmZnZpc25pbmdlbiBuZWQgMTggcmFkZXIiCisKKyM6IGdpdGs6MTM3MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1GPlx0XHRGaW5kIgorbXNnc3RyICI8JXMtRj5cdFx0U8O2ayIKKworIzogZ2l0azoxMzcyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUc+XHRcdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPCVzLUc+XHRcdEfDpSB0aWxsIG7DpHN0YSBzw7ZrdHLDpGZmIgorCisjOiBnaXRrOjEzNzMKK21zZ2lkICI8UmV0dXJuPlx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgorbXNnc3RyICI8UmV0dXJuPlx0XHRHw6UgdGlsbCBuw6RzdGEgc8O2a3Ryw6RmZiIKKworIzogZ2l0azoxMzc0Cittc2dpZCAiL1x0XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQsIG9yIHJlZG8gZmluZCIKK21zZ3N0ciAiL1x0XHRHw6UgdGlsbCBuw6RzdGEgc8O2a3Ryw6RmZiwgZWxsZXIgc8O2ayBww6Ugbnl0dCIKKworIzogZ2l0azoxMzc1Cittc2dpZCAiP1x0XHRNb3ZlIHRvIHByZXZpb3VzIGZpbmQgaGl0IgorbXNnc3RyICI/XHRcdEfDpSB0aWxsIGbDtnJlZ8OlZW5kZSBzw7ZrdHLDpGZmIgorCisjOiBnaXRrOjEzNzYKK21zZ2lkICJmXHRcdFNjcm9sbCBkaWZmIHZpZXcgdG8gbmV4dCBmaWxlIgorbXNnc3RyICJmXHRcdFJ1bGxhIGRpZmZ2aXNuaW5nZW4gdGlsbCBuw6RzdGEgZmlsIgorCisjOiBnaXRrOjEzNzcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUz5cdFx0U2VhcmNoIGZvciBuZXh0IGhpdCBpbiBkaWZmIHZpZXciCittc2dzdHIgIjwlcy1TPlx0XHRHw6UgdGlsbCBuw6RzdGEgc8O2a3Ryw6RmZiBpIGRpZmZ2aXNuaW5nZW4iCisKKyM6IGdpdGs6MTM3OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1SPlx0XHRTZWFyY2ggZm9yIHByZXZpb3VzIGhpdCBpbiBkaWZmIHZpZXciCittc2dzdHIgIjwlcy1SPlx0XHRHw6UgdGlsbCBmw7ZyZWfDpWVuZGUgc8O2a3Ryw6RmZiBpIGRpZmZ2aXNuaW5nZW4iCisKKyM6IGdpdGs6MTM3OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1LUCs+XHRJbmNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1OdW0rPlx0w5ZrYSB0ZWNrZW5zdG9ybGVrIgorCisjOiBnaXRrOjEzODAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtcGx1cz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLXBsdXM+XHTDlmthIHRlY2tlbnN0b3JsZWsiCisKKyM6IGdpdGs6MTM4MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1LUC0+XHREZWNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1OdW0tPlx0TWluc2thIHRlY2tlbnN0b3JsZWsiCisKKyM6IGdpdGs6MTM4MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1taW51cz5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLW1pbnVzPlx0TWluc2thIHRlY2tlbnN0b3JsZWsiCisKKyM6IGdpdGs6MTM4MworbXNnaWQgIjxGNT5cdFx0VXBkYXRlIgorbXNnc3RyICI8RjU+XHRcdFVwcGRhdGVyYSIKKworIzogZ2l0azoxODk2Cittc2dpZCAiR2l0ayB2aWV3IGRlZmluaXRpb24iCittc2dzdHIgIkRlZmluaXRpb24gYXYgR2l0ay12eSIKKworIzogZ2l0azoxOTIxCittc2dpZCAiTmFtZSIKK21zZ3N0ciAiTmFtbiIKKworIzogZ2l0azoxOTI0Cittc2dpZCAiUmVtZW1iZXIgdGhpcyB2aWV3IgorbXNnc3RyICJTcGFyYSBkZW5uYSB2eSIKKworIzogZ2l0azoxOTI4Cittc2dpZCAiQ29tbWl0cyB0byBpbmNsdWRlIChhcmd1bWVudHMgdG8gZ2l0IHJldi1saXN0KToiCittc2dzdHIgIkluY2hlY2tuaW5nYXIgYXR0IHRhIG1lZCAoYXJndW1lbnQgdGlsbCBnaXQgcmV2LWxpc3QpOiIKKworIzogZ2l0azoxOTM1Cittc2dpZCAiQ29tbWFuZCB0byBnZW5lcmF0ZSBtb3JlIGNvbW1pdHMgdG8gaW5jbHVkZToiCittc2dzdHIgIktvbW1hbmRvIGbDtnIgYXR0IGdlbmVyZXJhIGZsZXIgaW5jaGVja25pbmdhciBhdHQgdGEgbWVkOiIKKworIzogZ2l0azoxOTQyCittc2dpZCAiRW50ZXIgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGluY2x1ZGUsIG9uZSBwZXIgbGluZToiCittc2dzdHIgIkFuZ2UgZmlsZXIgb2NoIGthdGFsb2dlciBhdHQgdGEgbWVkLCBlbiBwZXIgcmFkOiIKKworIzogZ2l0azoxOTg5Cittc2dpZCAiRXJyb3IgaW4gY29tbWl0IHNlbGVjdGlvbiBhcmd1bWVudHM6IgorbXNnc3RyICJGZWwgaSBhcmd1bWVudCBmw7ZyIHZhbCBhdiBpbmNoZWNrbmluZ2FyOiIKKworIzogZ2l0azoyMDQzIGdpdGs6MjEyNyBnaXRrOjI1ODMgZ2l0azoyNTk3IGdpdGs6Mzc4MSBnaXRrOjg2ODggZ2l0azo4Njg5Cittc2dpZCAiTm9uZSIKK21zZ3N0ciAiSW5nZXQiCisKKyM6IGdpdGs6MjUzMSBnaXRrOjQzMzYgZ2l0azo1OTU4IGdpdGs6NTk3MworbXNnaWQgIkRhdGUiCittc2dzdHIgIkRhdHVtIgorCisjOiBnaXRrOjI1MzEgZ2l0azo0MzM2Cittc2dpZCAiQ0RhdGUiCittc2dzdHIgIlNrYXBhdCBkYXR1bSIKKworIzogZ2l0azoyNjgwIGdpdGs6MjY4NQorbXNnaWQgIkRlc2NlbmRhbnQiCittc2dzdHIgIkF2a29tbGluZyIKKworIzogZ2l0azoyNjgxCittc2dpZCAiTm90IGRlc2NlbmRhbnQiCittc2dzdHIgIkludGUgYXZrb21saW5nIgorCisjOiBnaXRrOjI2ODggZ2l0azoyNjkzCittc2dpZCAiQW5jZXN0b3IiCittc2dzdHIgIkbDtnJmYWRlciIKKworIzogZ2l0azoyNjg5Cittc2dpZCAiTm90IGFuY2VzdG9yIgorbXNnc3RyICJJbnRlIGbDtnJmYWRlciIKKworIzogZ2l0azoyOTI0Cittc2dpZCAiTG9jYWwgY2hhbmdlcyBjaGVja2VkIGluIHRvIGluZGV4IGJ1dCBub3QgY29tbWl0dGVkIgorbXNnc3RyICJMb2thbGEgw6RuZHJpbmdhciBzcGFyYWRlIGkgaW5kZXhldCBtZW4gaW50ZSBpbmNoZWNrYWRlIgorCisjOiBnaXRrOjI5NTQKK21zZ2lkICJMb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzLCBub3QgY2hlY2tlZCBpbiB0byBpbmRleCIKK21zZ3N0ciAiTG9rYWxhIMOkbmRyaW5nYXIsIGVqIHNwYXJhZGUgaSBpbmRleGV0IgorCisjOiBnaXRrOjQzMDUKK21zZ2lkICJTZWFyY2hpbmciCittc2dzdHIgIlPDtmtlciIKKworIzogZ2l0azo0NzY3Cittc2dpZCAiVGFnczoiCittc2dzdHIgIlRhZ2dhcjoiCisKKyM6IGdpdGs6NDc4NCBnaXRrOjQ3OTAgZ2l0azo1OTUxCittc2dpZCAiUGFyZW50IgorbXNnc3RyICJGw7Zyw6RsZGVyIgorCisjOiBnaXRrOjQ3OTUKK21zZ2lkICJDaGlsZCIKK21zZ3N0ciAiQmFybiIKKworIzogZ2l0azo0ODA0Cittc2dpZCAiQnJhbmNoIgorbXNnc3RyICJHcmVuIgorCisjOiBnaXRrOjQ4MDcKK21zZ2lkICJGb2xsb3dzIgorbXNnc3RyICJGw7ZsamVyIgorCisjOiBnaXRrOjQ4MTAKK21zZ2lkICJQcmVjZWRlcyIKK21zZ3N0ciAiRsO2cmVnw6VyIgorCisjOiBnaXRrOjUwOTMKK21zZ2lkICJFcnJvciBnZXR0aW5nIG1lcmdlIGRpZmZzOiIKK21zZ3N0ciAiRmVsIHZpZCBow6RtdG5pbmcgYXYgc2FtbWFuc2xhZ25pbmdzZGlmZjoiCisKKyM6IGdpdGs6NTc3OAorbXNnaWQgIkdvdG86IgorbXNnc3RyICJHw6UgdGlsbDoiCisKKyM6IGdpdGs6NTc4MAorbXNnaWQgIlNIQTEgSUQ6IgorbXNnc3RyICJTSEExLWlkOiIKKworIzogZ2l0azo1ODA1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU2hvcnQgU0hBMSBpZCAlcyBpcyBhbWJpZ3VvdXMiCittc2dzdHIgIkbDtnJrb3J0YXQgU0hBMS1pZCAlcyDDpHIgdHZldHlkaWd0IgorCisjOiBnaXRrOjU4MTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTSEExIGlkICVzIGlzIG5vdCBrbm93biIKK21zZ3N0ciAiU0hBLWlkOnQgJXMgw6RyIGludGUga8OkbnQiCisKKyM6IGdpdGs6NTgxOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZy9IZWFkICVzIGlzIG5vdCBrbm93biIKK21zZ3N0ciAiVGFnZy9odXZ1ZCAlcyDDpHIgb2vDpG50IgorCisjOiBnaXRrOjU5NjEKK21zZ2lkICJDaGlsZHJlbiIKK21zZ3N0ciAiQmFybiIKKworIzogZ2l0azo2MDE4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgJXMgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgIsOFdGVyc3TDpGxsIGdyZW5lbiAlcyBoaXQiCisKKyM6IGdpdGs6NjA0OQorbXNnaWQgIlRvcCIKK21zZ3N0ciAiVG9wcCIKKworIzogZ2l0azo2MDUwCittc2dpZCAiRnJvbSIKK21zZ3N0ciAiRnLDpW4iCisKKyM6IGdpdGs6NjA1NQorbXNnaWQgIlRvIgorbXNnc3RyICJUaWxsIgorCisjOiBnaXRrOjYwNzgKK21zZ2lkICJHZW5lcmF0ZSBwYXRjaCIKK21zZ3N0ciAiR2VuZXJlcmEgcGF0Y2giCisKKyM6IGdpdGs6NjA4MAorbXNnaWQgIkZyb206IgorbXNnc3RyICJGcsOlbjoiCisKKyM6IGdpdGs6NjA4OQorbXNnaWQgIlRvOiIKK21zZ3N0ciAiVGlsbDoiCisKKyM6IGdpdGs6NjA5OAorbXNnaWQgIlJldmVyc2UiCittc2dzdHIgIlbDpG5kIgorCisjOiBnaXRrOjYxMDAgZ2l0azo2MjY5Cittc2dpZCAiT3V0cHV0IGZpbGU6IgorbXNnc3RyICJVdGRhdGFmaWw6IgorCisjOiBnaXRrOjYxMDYKK21zZ2lkICJHZW5lcmF0ZSIKK21zZ3N0ciAiR2VuZXJlcmEiCisKKyM6IGdpdGs6NjE0MgorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHBhdGNoOiIKK21zZ3N0ciAiRmVsIHZpZCBnZW5lcmVyaW5nIGF2IHBhdGNoOiIKKworIzogZ2l0azo2MTY0IGdpdGs6NjI1NyBnaXRrOjYzMTEKK21zZ2lkICJJRDoiCittc2dzdHIgIklkOiIKKworIzogZ2l0azo2MTczCittc2dpZCAiVGFnIG5hbWU6IgorbXNnc3RyICJUYWdnbmFtbjoiCisKKyM6IGdpdGs6NjE3NyBnaXRrOjYzMjAKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIlNrYXBhIgorCisjOiBnaXRrOjYxOTIKK21zZ2lkICJObyB0YWcgbmFtZSBzcGVjaWZpZWQiCittc2dzdHIgIkluZ2V0IHRhZ2duYW1uIGFuZ2F2cyIKKworIzogZ2l0azo2MTk2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFnIFwiJXNcIiBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiVGFnZ2VuIFwiJXNcIiBmaW5ucyByZWRhbiIKKworIzogZ2l0azo2MjAyCittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGFnOiIKK21zZ3N0ciAiRmVsIHZpZCBza2FwYW5kZSBhdiB0YWdnOiIKKworIzogZ2l0azo2MjY2Cittc2dpZCAiQ29tbWFuZDoiCittc2dzdHIgIktvbW1hbmRvOiIKKworIzogZ2l0azo2Mjc0Cittc2dpZCAiV3JpdGUiCittc2dzdHIgIlNrcml2IgorCisjOiBnaXRrOjYyOTAKK21zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdDoiCittc2dzdHIgIkZlbCB2aWQgc2tyaXZuaW5nIGF2IGluY2hlY2tuaW5nOiIKKworIzogZ2l0azo2MzE2Cittc2dpZCAiTmFtZToiCittc2dzdHIgIk5hbW46IgorCisjOiBnaXRrOjYzMzUKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSBhIG5hbWUgZm9yIHRoZSBuZXcgYnJhbmNoIgorbXNnc3RyICJBbmdlIGV0dCBuYW1uIGbDtnIgZGVuIG55YSBncmVuZW4iCisKKyM6IGdpdGs6NjM2NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBpcyBhbHJlYWR5IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmUtYXBwbHkgaXQ/IgorbXNnc3RyICJJbmNoZWNrbmluZ2VuICVzIGZpbm5zIHJlZGFuIHDDpSBncmVuZW4gJXMgLS0gc2thbGwgZGVuIHZlcmtsaWdlbiBhcHBsaWNlcmFzIHDDpSBueXR0PyIKKworIzogZ2l0azo2MzY5Cittc2dpZCAiQ2hlcnJ5LXBpY2tpbmciCittc2dzdHIgIlBsb2NrYXIiCisKKyM6IGdpdGs6NjM4MQorbXNnaWQgIk5vIGNoYW5nZXMgY29tbWl0dGVkIgorbXNnc3RyICJJbmdhIMOkbmRyaW5nYXIgaW5jaGVja2FkZSIKKworIzogZ2l0azo2NDA0Cittc2dpZCAiQ29uZmlybSByZXNldCIKK21zZ3N0ciAiQmVrcsOkZnRhIMOldGVyc3TDpGxsbmluZyIKKworIzogZ2l0azo2NDA2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgYnJhbmNoICVzIHRvICVzPyIKK21zZ3N0ciAiw4V0ZXJzdMOkbGxhIGdyZW5lbiAlcyB0aWxsICVzPyIKKworIzogZ2l0azo2NDEwCittc2dpZCAiUmVzZXQgdHlwZToiCittc2dzdHIgIlR5cCBhdiDDpXRlcnN0w6RsbG5pbmc6IgorCisjOiBnaXRrOjY0MTQKK21zZ2lkICJTb2Z0OiBMZWF2ZSB3b3JraW5nIHRyZWUgYW5kIGluZGV4IHVudG91Y2hlZCIKK21zZ3N0ciAiTWp1azogUsO2ciBpbnRlIHV0Y2hlY2tuaW5nIG9jaCBpbmRleCIKKworIzogZ2l0azo2NDE3Cittc2dpZCAiTWl4ZWQ6IExlYXZlIHdvcmtpbmcgdHJlZSB1bnRvdWNoZWQsIHJlc2V0IGluZGV4IgorbXNnc3RyICJCbGFuZGFkOiBSw7ZyIGludGUgdXRjaGVja25pbmcsIMOldGVyc3TDpGxsIGluZGV4IgorCisjOiBnaXRrOjY0MjAKK21zZ2lkICIiCisiSGFyZDogUmVzZXQgd29ya2luZyB0cmVlIGFuZCBpbmRleFxuIgorIihkaXNjYXJkIEFMTCBsb2NhbCBjaGFuZ2VzKSIKK21zZ3N0ciAiIgorIkjDpXJkOiDDhXRlcnN0w6RsbCB1dGNoZWNrbmluZyBvY2ggaW5kZXhcbiIKKyIoZsO2cmthc3RhciBBTExBIGxva2FsYSDDpG5kcmluZ2FyKSIKKworIzogZ2l0azo2NDM2Cittc2dpZCAiUmVzZXR0aW5nIgorbXNnc3RyICLDhXRlcnN0w6RsbGVyIgorCisjOiBnaXRrOjY0OTMKK21zZ2lkICJDaGVja2luZyBvdXQiCittc2dzdHIgIkNoZWNrYXIgdXQiCisKKyM6IGdpdGs6NjUyMworbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2giCittc2dzdHIgIkthbiBpbnRlIHRhIGJvcnQgZGVuIGp1c3QgbnUgdXRjaGVja2FkZSBncmVuZW4iCisKKyM6IGdpdGs6NjUyOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY29tbWl0cyBvbiBicmFuY2ggJXMgYXJlbid0IG9uIGFueSBvdGhlciBicmFuY2guXG4iCisiUmVhbGx5IGRlbGV0ZSBicmFuY2ggJXM/IgorbXNnc3RyICIiCisiSW5jaGVja25pbmdhcm5hIHDDpSBncmVuZW4gJXMgZXhpc3RlcmFyIGludGUgcMOlIG7DpWdvbiBhbm5hbiBncmVuLlxuIgorIlZpbGwgZHUgdmVya2xpZ2VuIHRhIGJvcnQgZ3JlbmVuICVzPyIKKworIzogZ2l0azo2NTYwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFncyBhbmQgaGVhZHM6ICVzIgorbXNnc3RyICJUYWdnYXIgb2NoIGh1dnVkZW46ICVzIgorCisjOiBnaXRrOjY1NzQKK21zZ2lkICJGaWx0ZXIiCittc2dzdHIgIkZpbHRlciIKKworIzogZ2l0azo2ODY4Cittc2dpZCAiIgorIkVycm9yIHJlYWRpbmcgY29tbWl0IHRvcG9sb2d5IGluZm9ybWF0aW9uOyBicmFuY2ggYW5kIHByZWNlZGluZy9mb2xsb3dpbmcgIgorInRhZyBpbmZvcm1hdGlvbiB3aWxsIGJlIGluY29tcGxldGUuIgorbXNnc3RyICIiCisiRmVsIHZpZCBsw6RzbmluZyBhdiBpbmZvcm1hdGlvbiBvbSBpbmNoZWNrbmluZ3N0b3BvbG9naTsgaW5mb3JtYXRpb24gb20gIgorImdyZW5hciBvY2ggZsO2cmVnw6VlbmRlL3NlbmFyZSB0YWdnYXIga29tbWVyIGludGUgdmFyYSBrb21wbGV0dC4iCisKKyM6IGdpdGs6Nzg1MgorbXNnaWQgIlRhZyIKK21zZ3N0ciAiVGFnZyIKKworIzogZ2l0azo3ODUyCittc2dpZCAiSWQiCittc2dzdHIgIklkIgorCisjOiBnaXRrOjc4OTIKK21zZ2lkICJHaXRrIGZvbnQgY2hvb3NlciIKK21zZ3N0ciAiVGVja2Vuc25pdHRzdsOkbGphcmUgZsO2ciBHaXRrIgorCisjOiBnaXRrOjc5MDkKK21zZ2lkICJCIgorbXNnc3RyICJGIgorCisjOiBnaXRrOjc5MTIKK21zZ2lkICJJIgorbXNnc3RyICJLIgorCisjOiBnaXRrOjgwMDUKK21zZ2lkICJHaXRrIHByZWZlcmVuY2VzIgorbXNnc3RyICJJbnN0w6RsbG5pbmdhciBmw7ZyIEdpdGsiCisKKyM6IGdpdGs6ODAwNgorbXNnaWQgIkNvbW1pdCBsaXN0IGRpc3BsYXkgb3B0aW9ucyIKK21zZ3N0ciAiQWx0ZXJuYXRpdiBmw7ZyIGluY2hlY2tuaW5nc2xpc3R2eSIKKworIzogZ2l0azo4MDA5Cittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAobGluZXMpIgorbXNnc3RyICJNYXhpbWFsIGdyYWZicmVkZCAocmFkZXIpIgorCisjOiBnaXRrOjgwMTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoICglIG9mIHBhbmUpIgorbXNnc3RyICJNYXhpbWFsIGdyYWZicmVkZCAoJSBhdiBydXRhKSIKKworIzogZ2l0azo4MDE4Cittc2dpZCAiU2hvdyBsb2NhbCBjaGFuZ2VzIgorbXNnc3RyICJWaXNhIGxva2FsYSDDpG5kcmluZ2FyIgorCisjOiBnaXRrOjgwMjMKK21zZ2lkICJBdXRvLXNlbGVjdCBTSEExIgorbXNnc3RyICJWw6RsaiBTSEExIGF1dG9tYXRpc2t0IgorCisjOiBnaXRrOjgwMjgKK21zZ2lkICJEaWZmIGRpc3BsYXkgb3B0aW9ucyIKK21zZ3N0ciAiQWx0ZXJuYXRpdiBmw7ZyIGRpZmZ2eSIKKworIzogZ2l0azo4MDMwCittc2dpZCAiVGFiIHNwYWNpbmciCittc2dzdHIgIkJsYW5rc3RlZyBmw7ZyIHRhYnVsYXRvcnRlY2tlbiIKKworIzogZ2l0azo4MDM0Cittc2dpZCAiRGlzcGxheSBuZWFyYnkgdGFncyIKK21zZ3N0ciAiVmlzYSBuw6RybGlnZ2FuZGUgdGFnZ2FyIgorCisjOiBnaXRrOjgwMzkKK21zZ2lkICJMaW1pdCBkaWZmcyB0byBsaXN0ZWQgcGF0aHMiCittc2dzdHIgIkJlZ3LDpG5zYSBkaWZmIHRpbGwgbGlzdGFkZSBzw7ZrdsOkZ2FyIgorCisjOiBnaXRrOjgwNDQKK21zZ2lkICJDb2xvcnM6IHByZXNzIHRvIGNob29zZSIKK21zZ3N0ciAiRsOkcmdlcjogdHJ5Y2sgZsO2ciBhdHQgdsOkbGphIgorCisjOiBnaXRrOjgwNDcKK21zZ2lkICJCYWNrZ3JvdW5kIgorbXNnc3RyICJCYWtncnVuZCIKKworIzogZ2l0azo4MDUxCittc2dpZCAiRm9yZWdyb3VuZCIKK21zZ3N0ciAiRsO2cmdydW5kIgorCisjOiBnaXRrOjgwNTUKK21zZ2lkICJEaWZmOiBvbGQgbGluZXMiCittc2dzdHIgIkRpZmY6IGdhbWxhIHJhZGVyIgorCisjOiBnaXRrOjgwNjAKK21zZ2lkICJEaWZmOiBuZXcgbGluZXMiCittc2dzdHIgIkRpZmY6IG55YSByYWRlciIKKworIzogZ2l0azo4MDY1Cittc2dpZCAiRGlmZjogaHVuayBoZWFkZXIiCittc2dzdHIgIkRpZmY6IGRlbGh1dnVkIgorCisjOiBnaXRrOjgwNzEKK21zZ2lkICJTZWxlY3QgYmciCittc2dzdHIgIk1hcmtlcmFkIGJha2dydW5kIgorCisjOiBnaXRrOjgwNzUKK21zZ2lkICJGb250czogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICJUZWNrZW5zbml0dDogdHJ5Y2sgZsO2ciBhdHQgdsOkbGphIgorCisjOiBnaXRrOjgwNzcKK21zZ2lkICJNYWluIGZvbnQiCittc2dzdHIgIkh1dnVkdGVja2Vuc25pdHQiCisKKyM6IGdpdGs6ODA3OAorbXNnaWQgIkRpZmYgZGlzcGxheSBmb250IgorbXNnc3RyICJUZWNrZW5zbml0dCBmw7ZyIGRpZmZ2aXNuaW5nIgorCisjOiBnaXRrOjgwNzkKK21zZ2lkICJVc2VyIGludGVyZmFjZSBmb250IgorbXNnc3RyICJUZWNrZW5zbml0dCBmw7ZyIGFudsOkbmRhcmdyw6Ruc3NuaXR0IgorCisjOiBnaXRrOjgwOTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJHaXRrOiBjaG9vc2UgY29sb3IgZm9yICVzIgorbXNnc3RyICJHaXRrOiB2w6RsaiBmw6RyZyBmw7ZyICVzIgorCisjOiBnaXRrOjg0NzYKK21zZ2lkICIiCisiU29ycnksIGdpdGsgY2Fubm90IHJ1biB3aXRoIHRoaXMgdmVyc2lvbiBvZiBUY2wvVGsuXG4iCisiIEdpdGsgcmVxdWlyZXMgYXQgbGVhc3QgVGNsL1RrIDguNC4iCittc2dzdHIgIiIKKyJHaXRrIGthbiB0eXbDpHJyIGludGUga8O2cmEgbWVkIGRlbm5hIHZlcnNpb24gYXYgVGNsL1RrLlxuIgorIiBHaXRrIGtyw6R2ZXIgw6V0bWluc3RvbmUgVGNsL1RrIDguNC4iCisKKyM6IGdpdGs6ODU2NQorbXNnaWQgIkNhbm5vdCBmaW5kIGEgZ2l0IHJlcG9zaXRvcnkgaGVyZS4iCittc2dzdHIgIkhpdHRhciBpbmdldCBnaXRrLWFya2l2IGjDpHIuIgorCisjOiBnaXRrOjg1NjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZmluZCB0aGUgZ2l0IGRpcmVjdG9yeSBcIiVzXCIuIgorbXNnc3RyICJIaXR0YXIgaW50ZSBnaXQta2F0YWxvZ2VuIFwiJXNcIi4iCisKKyM6IGdpdGs6ODYxMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFtYmlndW91cyBhcmd1bWVudCAnJXMnOiBib3RoIHJldmlzaW9uIGFuZCBmaWxlbmFtZSIKK21zZ3N0ciAiVHZldHlkaWd0IGFyZ3VtZW50IFwiJXNcIjogYsOlZGUgcmV2aXNpb24gb2NoIGZpbG5hbW4iCisKKyM6IGdpdGs6ODYyNAorbXNnaWQgIkJhZCBhcmd1bWVudHMgdG8gZ2l0azoiCittc2dzdHIgIkZlbGFrdGlnYSBhcmd1bWVudCB0aWxsIGdpdGs6IgorCisjOiBnaXRrOjg2MzYKK21zZ2lkICJDb3VsZG4ndCBnZXQgbGlzdCBvZiB1bm1lcmdlZCBmaWxlczoiCittc2dzdHIgIkt1bmRlIGludGEgaMOkbXRhIGxpc3RhIMO2dmVyIGVqIHNhbW1hbnNsYWduYSBmaWxlcjoiCisKKyM6IGdpdGs6ODY1MgorbXNnaWQgIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gZmlsZXMgYXJlIHVubWVyZ2VkLiIKK21zZ3N0ciAiSW5nYSBmaWxlciB2YWxkZXM6IC0tbWVyZ2UgYW5nYXZzIG1lbiBkZXQgZmlubnMgaW5nYSBmaWxlciBzb20gaW50ZSBoYXIgc2xhZ2l0cyBzYW1tYW4uIgorCisjOiBnaXRrOjg2NTUKK21zZ2lkICIiCisiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyB1bm1lcmdlZCBmaWxlcyBhcmUgd2l0aGluIGZpbGUgIgorImxpbWl0LiIKK21zZ3N0ciAiIgorIkluZ2EgZmlsZXIgdmFsZGVzOiAtLW1lcmdlIGFuZ2F2cyBtZW4gZGV0IGZpbm5zIGluZ2EgZmlsZXIgaW5vbSAiCisiZmlsYmVncsOkbnNuaW5nZW4uIgorCisjOiBnaXRrOjg3MTYKK21zZ2lkICJDb21tYW5kIGxpbmUiCittc2dzdHIgIktvbW1hbmRvcmFkIgorCmRpZmYgLS1naXQgYS9naXR3ZWIvSU5TVEFMTCBiL2dpdHdlYi9JTlNUQUxMCmluZGV4IDljZDViMGEuLmY3MTk0ZGIgMTAwNjQ0Ci0tLSBhL2dpdHdlYi9JTlNUQUxMCisrKyBiL2dpdHdlYi9JTlNUQUxMCkBAIC0yOSw0MCArMjksNDAgQEAKIFNlZSBhbHNvICJIb3cgdG8gY29uZmlndXJlIGdpdHdlYiBmb3IgeW91ciBsb2NhbCBzeXN0ZW0iIGluIFJFQURNRQogZmlsZSBmb3IgZ2l0d2ViIChpbiBnaXR3ZWIvUkVBRE1FKS4KIAotLSBUaGVyZSBhcmUgbWFueSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyB3aGljaCBhZmZlY3RzIGJ1aWxkaW5nIG9mCistIFRoZXJlIGFyZSBtYW55IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHdoaWNoIGFmZmVjdCBidWlsZGluZyBvZgogICBnaXR3ZWIuY2dpOyBzZWUgImRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgZ2l0d2ViIiBzZWN0aW9uIGluIG1haW4KICAgKHRvcCBkaXIpIE1ha2VmaWxlLCBhbmQgaW5zdHJ1Y3Rpb25zIGZvciBidWlsZGluZyBnaXR3ZWIvZ2l0d2ViLmNnaQogICB0YXJnZXQuCiAKLSAgT25lIG9mIG1vc3QgaW1wb3J0YW50IGlzIHdoZXJlIHRvIGZpbmQgZ2l0IHdyYXBwZXIgYmluYXJ5LiBHaXR3ZWIKLSAgdHJpZXMgdG8gZmluZCBnaXQgd3JhcHBlciBhdCAkKGJpbmRpcikvZ2l0LCBzbyB5b3UgaGF2ZSB0byBzZXQgJGJpbmRpcgorICBPbmUgb2YgdGhlIG1vc3QgaW1wb3J0YW50IGlzIHdoZXJlIHRvIGZpbmQgdGhlIGdpdCB3cmFwcGVyIGJpbmFyeS4gR2l0d2ViCisgIHRyaWVzIHRvIGZpbmQgdGhlIGdpdCB3cmFwcGVyIGF0ICQoYmluZGlyKS9naXQsIHNvIHlvdSBoYXZlIHRvIHNldCAkYmluZGlyCiAgIHdoZW4gYnVpbGRpbmcgZ2l0d2ViLmNnaSwgb3IgJHByZWZpeCBmcm9tIHdoaWNoICRiaW5kaXIgaXMgZGVyaXZlZC4gSWYKLSAgeW91IGJ1aWxkIGFuZCBpbnN0YWxsIGdpdHdlYiB0b2dldGhlciB3aXRoIHRoZSByZXN0IG9mIGdpdCBzdWl0ZSwKKyAgeW91IGJ1aWxkIGFuZCBpbnN0YWxsIGdpdHdlYiB0b2dldGhlciB3aXRoIHRoZSByZXN0IG9mIHRoZSBnaXQgc3VpdGUsCiAgIHRoZXJlIHNob3VsZCBiZSBubyBwcm9ibGVtcy4gT3RoZXJ3aXNlLCBpZiBnaXQgd2FzIGZvciBleGFtcGxlCiAgIGluc3RhbGxlZCBmcm9tIGEgYmluYXJ5IHBhY2thZ2UsIHlvdSBoYXZlIHRvIHNldCAkcHJlZml4IChvciAkYmluZGlyKQogICBhY2NvcmRpbmdseS4KIAogLSBBbm90aGVyIGltcG9ydGFudCBpc3N1ZSBpcyB3aGVyZSBhcmUgZ2l0IHJlcG9zaXRvcmllcyB5b3Ugd2FudCB0byBtYWtlCi0gIGF2YWlsYWJsZSB0byBnaXR3ZWIuIEJ5IGRlZmF1bHQgZ2l0d2ViIHNlYXJjaCBmb3IgcmVwb3NpdG9yaWVzIHVuZGVyCisgIGF2YWlsYWJsZSB0byBnaXR3ZWIuIEJ5IGRlZmF1bHQgZ2l0d2ViIHNlYXJjaGVzIGZvciByZXBvc2l0b3JpZXMgdW5kZXIKICAgL3B1Yi9naXQ7IGlmIHlvdSB3YW50IHRvIGhhdmUgcHJvamVjdHMgc29tZXdoZXJlIGVsc2UsIGxpa2UgL2hvbWUvZ2l0LAogICB1c2UgR0lUV0VCX1BST0pFQ1RST09UIGJ1aWxkIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCiAKICAgQnkgZGVmYXVsdCBhbGwgZ2l0IHJlcG9zaXRvcmllcyB1bmRlciBwcm9qZWN0cm9vdCBhcmUgdmlzaWJsZSBhbmQKLSAgYXZhaWxhYmxlIHRvIGdpdHdlYi4gTGlzdCBvZiBwcm9qZWN0cyBpcyBnZW5lcmF0ZWQgYnkgZGVmYXVsdCBieQorICBhdmFpbGFibGUgdG8gZ2l0d2ViLiBUaGUgbGlzdCBvZiBwcm9qZWN0cyBpcyBnZW5lcmF0ZWQgYnkgZGVmYXVsdCBieQogICBzY2FubmluZyB0aGUgcHJvamVjdHJvb3QgZGlyZWN0b3J5IGZvciBnaXQgcmVwb3NpdG9yaWVzLiBUaGlzIGNhbiBiZQogICBjaGFuZ2VkIChjb25maWd1cmVkKSBhcyBkZXNjcmliZWQgaW4gIkdpdHdlYiByZXBvc2l0b3JpZXMiIHNlY3Rpb24KICAgYmVsb3cuCiAKLSAgTm90ZSB0aGF0IGdpdHdlYiBkZWFscyBkaXJlY3RseSB3aXRoIG9iamVjdCBkYXRhYmFzZSwgYW5kIGRvZXMgbm90Ci0gIG5lZWQgd29ya2luZyBkaXJlY3Rvcnk7IHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IGlzIHRoZSBuYW1lIG9mIGl0cworICBOb3RlIHRoYXQgZ2l0d2ViIGRlYWxzIGRpcmVjdGx5IHdpdGggdGhlIG9iamVjdCBkYXRhYmFzZSwgYW5kIGRvZXMgbm90CisgIG5lZWQgYSB3b3JraW5nIGRpcmVjdG9yeTsgdGhlIG5hbWUgb2YgdGhlIHByb2plY3QgaXMgdGhlIG5hbWUgb2YgaXRzCiAgIHJlcG9zaXRvcnkgb2JqZWN0IGRhdGFiYXNlLCB1c3VhbGx5IHByb2plY3RuYW1lLmdpdCBmb3IgYmFyZQogICByZXBvc2l0b3JpZXMuIElmIHlvdSB3YW50IHRvIHByb3ZpZGUgZ2l0d2ViIGFjY2VzcyB0byBub24tYmFyZSAobGl2ZSkKLSAgcmVwb3NpdG9yeSwgeW91IGNhbiBtYWtlIHByb2plY3RuYW1lLmdpdCBzeW1ib2xpYyBsaW5rIHVuZGVyCisgIHJlcG9zaXRvcmllcywgeW91IGNhbiBtYWtlIHByb2plY3RuYW1lLmdpdCBhIHN5bWJvbGljIGxpbmsgdW5kZXIKICAgcHJvamVjdHJvb3QgbGlua2luZyB0byBwcm9qZWN0bmFtZS8uZ2l0IChidXQgaXQgaXMganVzdAogICBhIHN1Z2dlc3Rpb24pLgogCiAtIFlvdSBjYW4gY29udHJvbCB3aGVyZSBnaXR3ZWIgdHJpZXMgdG8gZmluZCBpdHMgbWFpbiBDU1Mgc3R5bGUgZmlsZSwKLSAgaXRzIGZhdmljb24gYW5kIGxvZ28gd2l0aCBHSVRXRUJfQ1NTLCBHSVRXRUJfRkFWSUNPTiBhbmQgR0lUV0VCX0xPR08KKyAgaXRzIGZhdmljb24gYW5kIGxvZ28gd2l0aCB0aGUgR0lUV0VCX0NTUywgR0lUV0VCX0ZBVklDT04gYW5kIEdJVFdFQl9MT0dPCiAgIGJ1aWxkIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLiBCeSBkZWZhdWx0IGdpdHdlYiB0cmllcyB0byBmaW5kIHRoZW0KICAgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIGdpdHdlYi5jZ2kgc2NyaXB0LgogCkBAIC05MSwxMyArOTEsMTcgQEAKIFNlZSBhbHNvICJSdW50aW1lIGdpdHdlYiBjb25maWd1cmF0aW9uIiBzZWN0aW9uIGluIFJFQURNRSBmaWxlCiBmb3IgZ2l0d2ViIChpbiBnaXR3ZWIvUkVBRE1FKS4KIAotLSBZb3UgY2FuIGNvbmZpZ3VyZSBnaXR3ZWIgZnVydGhlciB1c2luZyBnaXR3ZWIgY29uZmlndXJhdGlvbiBmaWxlOwotICBieSBkZWZhdWx0IGl0IGlzIGZpbGUgbmFtZWQgZ2l0d2ViX2NvbmZpZy5wZXJsIGluIHRoZSBzYW1lIHBsYWNlIGFzCi0gIGdpdHdlYi5jZ2kgc2NyaXB0LiBZb3UgY2FuIGNvbnRyb2wgZGVmYXVsdCBwbGFjZSBmb3IgY29uZmlnIGZpbGUKLSAgdXNpbmcgR0lUV0VCX0NPTkZJRyBidWlsZCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCBhbmQgeW91IGNhbiBzZXQgaXQKLSAgdXNpbmcgR0lUV0VCX0NPTkZJRyBlbnZpcm9ubWVudGFsIHZhcmlhYmxlLgorLSBZb3UgY2FuIGNvbmZpZ3VyZSBnaXR3ZWIgZnVydGhlciB1c2luZyB0aGUgZ2l0d2ViIGNvbmZpZ3VyYXRpb24gZmlsZTsKKyAgYnkgZGVmYXVsdCB0aGlzIGlzIGEgZmlsZSBuYW1lZCBnaXR3ZWJfY29uZmlnLnBlcmwgaW4gdGhlIHNhbWUgcGxhY2UgYXMKKyAgZ2l0d2ViLmNnaSBzY3JpcHQuIFlvdSBjYW4gY29udHJvbCB0aGUgZGVmYXVsdCBwbGFjZSBmb3IgdGhlIGNvbmZpZyBmaWxlCisgIHVzaW5nIHRoZSBHSVRXRUJfQ09ORklHIGJ1aWxkIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUsIGFuZCB5b3UgY2FuIHNldCBpdAorICB1c2luZyB0aGUgR0lUV0VCX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZS4gSWYgdGhpcyBmaWxlIGRvZXMgbm90CisgIGV4aXN0LCBnaXR3ZWIgbG9va3MgZm9yIGEgc3lzdGVtLXdpZGUgY29uZmlndXJhdGlvbiBmaWxlLCBub3JtYWxseQorICAvZXRjL2dpdHdlYi5jb25mLiBZb3UgY2FuIGNoYW5nZSB0aGUgZGVmYXVsdCB1c2luZyB0aGUKKyAgR0lUV0VCX0NPTkZJR19TWVNURU0gYnVpbGQgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgYW5kIG92ZXJyaWRlIGl0CisgIHRocm91Z2ggdGhlIEdJVFdFQl9DT05GSUdfU1lTVEVNIGVudmlyb25tZW50IHZhcmlhYmxlLgogCi0tIEdpdHdlYiBjb25maWcgZmlsZSBpcyBbZnJhZ21lbnRdIG9mIHBlcmwgY29kZS4gWW91IGNhbiBzZXQgdmFyaWFibGVzCistIFRoZSBnaXR3ZWIgY29uZmlnIGZpbGUgaXMgYSBmcmFnbWVudCBvZiBwZXJsIGNvZGUuIFlvdSBjYW4gc2V0IHZhcmlhYmxlcwogICB1c2luZyAib3VyICR2YXJpYWJsZSA9IHZhbHVlIjsgdGV4dCBmcm9tICIjIiBjaGFyYWN0ZXIgdW50aWwgdGhlIGVuZAogICBvZiBhIGxpbmUgaXMgaWdub3JlZC4gU2VlIHBlcmxzeW4oMSkgZm9yIGRldGFpbHMuCiAKQEAgLTEyNCwzNiArMTI4LDM3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC0gQnkgZGVmYXVsdCBhbGwgZ2l0IHJlcG9zaXRvcmllcyB1bmRlciBwcm9qZWN0cm9vdCBhcmUgdmlzaWJsZSBhbmQKLSAgYXZhaWxhYmxlIHRvIGdpdHdlYi4gTGlzdCBvZiBwcm9qZWN0cyBpcyBnZW5lcmF0ZWQgYnkgZGVmYXVsdCBieQorICBhdmFpbGFibGUgdG8gZ2l0d2ViLiBUaGUgbGlzdCBvZiBwcm9qZWN0cyBpcyBnZW5lcmF0ZWQgYnkgZGVmYXVsdCBieQogICBzY2FubmluZyB0aGUgcHJvamVjdHJvb3QgZGlyZWN0b3J5IGZvciBnaXQgcmVwb3NpdG9yaWVzIChmb3Igb2JqZWN0CiAgIGRhdGFiYXNlcyB0byBiZSBtb3JlIGV4YWN0KS4KIAotICBZb3UgY2FuIHByb3ZpZGUgcHJlLWdlbmVyYXRlZCBsaXN0IG9mIFt2aXNpYmxlXSByZXBvc2l0b3JpZXMsCisgIFlvdSBjYW4gcHJvdmlkZSBhIHByZS1nZW5lcmF0ZWQgbGlzdCBvZiBbdmlzaWJsZV0gcmVwb3NpdG9yaWVzLAogICB0b2dldGhlciB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZWlyIG93bmVycyAodGhlIHByb2plY3Qgb3duZXJzaGlwCi0gIGlzIHRha2VuIGZyb20gb3duZXIgb2YgcmVwb3NpdG9yeSBkaXJlY3Rvcnkgb3RoZXJ3aXNlKSwgYnkgc2V0dGluZwotICBHSVRXRUJfTElTVCBidWlsZCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIChvciAkcHJvamVjdHNfbGlzdCB2YXJpYWJsZQotICBpbiBnaXR3ZWIgY29uZmlnIGZpbGUpIHRvIHBvaW50IHRvIGEgcGxhaW4gZmlsZS4KKyAgZGVmYXVsdHMgdG8gdGhlIG93bmVyIG9mIHRoZSByZXBvc2l0b3J5IGRpcmVjdG9yeSBvdGhlcndpc2UpLCBieSBzZXR0aW5nCisgIHRoZSBHSVRXRUJfTElTVCBidWlsZCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIChvciB0aGUgJHByb2plY3RzX2xpc3QKKyAgdmFyaWFibGUgaW4gdGhlIGdpdHdlYiBjb25maWcgZmlsZSkgdG8gcG9pbnQgdG8gYSBwbGFpbiBmaWxlLgogCi0gIEVhY2ggbGluZSBvZiBwcm9qZWN0cyBsaXN0IGZpbGUgc2hvdWxkIGNvbnNpc3Qgb2YgdXJsLWVuY29kZWQgcGF0aAotICB0byBwcm9qZWN0IHJlcG9zaXRvcnkgZGF0YWJhc2UgKHJlbGF0aXZlIHRvIHByb2plY3Ryb290KSBzZXBhcmF0ZWQKLSAgYnkgc3BhY2UgZnJvbSB1cmwtZW5jb2RlZCBwcm9qZWN0IG93bmVyOyBzcGFjZXMgaW4gYm90aCBwcm9qZWN0IHBhdGgKLSAgYW5kIHByb2plY3Qgb3duZXIgaGF2ZSB0byBiZSBlbmNvZGVkIGFzIGVpdGhlciAnJTIwJyBvciAnKycuCisgIEVhY2ggbGluZSBvZiB0aGUgcHJvamVjdHMgbGlzdCBmaWxlIHNob3VsZCBjb25zaXN0IG9mIHRoZSB1cmwtZW5jb2RlZCBwYXRoCisgIHRvIHRoZSBwcm9qZWN0IHJlcG9zaXRvcnkgZGF0YWJhc2UgKHJlbGF0aXZlIHRvIHByb2plY3Ryb290KSwgZm9sbG93ZWQKKyAgYnkgdGhlIHVybC1lbmNvZGVkIHByb2plY3Qgb3duZXIgb24gdGhlIHNhbWUgbGluZSAoc2VwYXJhdGVkIGJ5IGEgc3BhY2UpLgorICBTcGFjZXMgaW4gYm90aCBwcm9qZWN0IHBhdGggYW5kIHByb2plY3Qgb3duZXIgaGF2ZSB0byBiZSBlbmNvZGVkIGFzIGVpdGhlcgorICAnJTIwJyBvciAnKycuCiAKLSAgWW91IGNhbiBnZW5lcmF0ZSBwcm9qZWN0cyBsaXN0IGluZGV4IGZpbGUgdXNpbmcgcHJvamVjdF9pbmRleCBhY3Rpb24KLSAgKHRoZSAnVFhUJyBsaW5rIG9uIHByb2plY3RzIGxpc3QgcGFnZSkgZGlyZWN0bHkgZnJvbSBnaXR3ZWIuCisgIFlvdSBjYW4gZ2VuZXJhdGUgdGhlIHByb2plY3RzIGxpc3QgaW5kZXggZmlsZSB1c2luZyB0aGUgcHJvamVjdF9pbmRleAorICBhY3Rpb24gKHRoZSAnVFhUJyBsaW5rIG9uIHByb2plY3RzIGxpc3QgcGFnZSkgZGlyZWN0bHkgZnJvbSBnaXR3ZWIuCiAKLS0gQnkgZGVmYXVsdCBldmVuIGlmIHByb2plY3QgaXMgbm90IHZpc2libGUgb24gcHJvamVjdHMgbGlzdCBwYWdlLCB5b3UKLSAgY2FuIHZpZXcgaXQgbmV2ZXJ0aGVsZXNzIGJ5IGhhbmQtY3JhZnRpbmcgZ2l0d2ViIFVSTC4gWW91IGNhbiBzZXQKLSAgR0lUV0VCX1NUUklDVF9FWFBPUlQgYnVpbGQgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAob3IgJHN0cmljdF9leHBvcnQKLSAgdmFyaWFibGUgaW4gZ2l0d2ViIGNvbmZpZyBmaWxlKSB0byBvbmx5IGFsbG93IHZpZXdpbmcgb2YKKy0gQnkgZGVmYXVsdCwgZXZlbiBpZiBhIHByb2plY3QgaXMgbm90IHZpc2libGUgb24gcHJvamVjdHMgbGlzdCBwYWdlLCB5b3UKKyAgY2FuIHZpZXcgaXQgbmV2ZXJ0aGVsZXNzIGJ5IGhhbmQtY3JhZnRpbmcgYSBnaXR3ZWIgVVJMLiBZb3UgY2FuIHNldCB0aGUKKyAgR0lUV0VCX1NUUklDVF9FWFBPUlQgYnVpbGQgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAob3IgdGhlICRzdHJpY3RfZXhwb3J0CisgIHZhcmlhYmxlIGluIHRoZSBnaXR3ZWIgY29uZmlnIGZpbGUpIHRvIG9ubHkgYWxsb3cgdmlld2luZyBvZgogICByZXBvc2l0b3JpZXMgYWxzbyBzaG93biBvbiB0aGUgb3ZlcnZpZXcgcGFnZS4KIAogLSBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGNvbmZpZ3VyZSBnaXR3ZWIgdG8gb25seSBsaXN0IGFuZCBhbGxvdwotICB2aWV3aW5nIG9mIHRoZSBleHBsaWNpdGx5IGV4cG9ydGVkIHJlcG9zaXRvcmllcywgdmlhCi0gIEdJVFdFQl9FWFBPUlRfT0sgYnVpbGQgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAob3IgJGV4cG9ydF9vaworICB2aWV3aW5nIG9mIHRoZSBleHBsaWNpdGx5IGV4cG9ydGVkIHJlcG9zaXRvcmllcywgdmlhIHRoZQorICBHSVRXRUJfRVhQT1JUX09LIGJ1aWxkIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgKG9yIHRoZSAkZXhwb3J0X29rCiAgIHZhcmlhYmxlIGluIGdpdHdlYiBjb25maWcgZmlsZSkuIElmIGl0IGV2YWx1YXRlcyB0byB0cnVlLCBnaXR3ZWIKLSAgc2hvdyByZXBvc2l0b3J5IG9ubHkgaWYgdGhpcyBmaWxlIGV4aXN0cyBpbiBpdHMgb2JqZWN0IGRhdGFiYXNlCi0gIChpZiBkaXJlY3RvcnkgaGFzIHRoZSBtYWdpYyBmaWxlICRleHBvcnRfb2spLgorICBzaG93cyByZXBvc2l0b3JpZXMgb25seSBpZiB0aGlzIGZpbGUgZXhpc3RzIGluIGl0cyBvYmplY3QgZGF0YWJhc2UKKyAgKGlmIGRpcmVjdG9yeSBoYXMgdGhlIG1hZ2ljIGZpbGUgbmFtZWQgJGV4cG9ydF9vaykuCiAKIEdlbmVyYXRpbmcgcHJvamVjdHMgbGlzdCB1c2luZyBnaXR3ZWIKIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KZGlmZiAtLWdpdCBhL2dpdHdlYi9SRUFETUUgYi9naXR3ZWIvUkVBRE1FCmluZGV4IDIxNjMwNzEuLjM1NmFiN2IgMTAwNjQ0Ci0tLSBhL2dpdHdlYi9SRUFETUUKKysrIGIvZ2l0d2ViL1JFQURNRQpAQCAtMiw3ICsyLDcgQEAKID09PT09PT09PT09PT09PT09CiAKIFRoZSBvbmUgd29ya2luZyBvbjoKLSAgaHR0cDovL3d3dy5rZXJuZWwub3JnL2dpdC8KKyAgaHR0cDovL2dpdC5rZXJuZWwub3JnLwogCiBGcm9tIHRoZSBnaXQgdmVyc2lvbiAxLjQuMCBnaXR3ZWIgaXMgYnVuZGxlZCB3aXRoIGdpdC4KIApAQCAtMTAsMTMgKzEwLDEzIEBACiBIb3cgdG8gY29uZmlndXJlIGdpdHdlYiBmb3IgeW91ciBsb2NhbCBzeXN0ZW0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1TZWUgYWxzbyAiQnVpbGQgdGltZSBjb25maWd1cmF0aW9uIiBzZWN0aW9uIGluIElOU1RBTEwKK1NlZSBhbHNvIHRoZSAiQnVpbGQgdGltZSBjb25maWd1cmF0aW9uIiBzZWN0aW9uIGluIHRoZSBJTlNUQUxMCiBmaWxlIGZvciBnaXR3ZWIgKGluIGdpdHdlYi9JTlNUQUxMKS4KIAogWW91IGNhbiBzcGVjaWZ5IHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgd2hlbiBidWlsZGluZyBHSVQ6CiAgKiBHSVRfQklORElSCi0gICBQb2ludHMgb3V0IHdoZXJlIHRvIGZpbmQgZ2l0IGV4ZWN1dGFibGUuICBZb3Ugc2hvdWxkIHNldCB1cCBpdCB0bwotICAgdGhlIHBsYWNlIHdoZXJlIGdpdCBiaW5hcnkgd2FzIGluc3RhbGxlZCAodXN1YWxseSAvdXNyL2JpbikgaWYgeW91CisgICBQb2ludHMgd2hlcmUgdG8gZmluZCB0aGUgZ2l0IGV4ZWN1dGFibGUuICBZb3Ugc2hvdWxkIHNldCBpdCB1cCB0bworICAgdGhlIHBsYWNlIHdoZXJlIHRoZSBnaXQgYmluYXJ5IHdhcyBpbnN0YWxsZWQgKHVzdWFsbHkgL3Vzci9iaW4pIGlmIHlvdQogICAgZG9uJ3QgaW5zdGFsbCBnaXQgZnJvbSBzb3VyY2VzIHRvZ2V0aGVyIHdpdGggZ2l0d2ViLiAgW0RlZmF1bHQ6ICQoYmluZGlyKV0KICAqIEdJVFdFQl9TSVRFTkFNRQogICAgU2hvd24gaW4gdGhlIHRpdGxlIG9mIGFsbCBnZW5lcmF0ZWQgcGFnZXMsIGRlZmF1bHRzIHRvIHRoZSBzZXJ2ZXIgbmFtZQpAQCAtMjQsMTMgKzI0LDEzIEBACiAgKiBHSVRXRUJfUFJPSkVDVFJPT1QKICAgIFRoZSByb290IGRpcmVjdG9yeSBmb3IgYWxsIHByb2plY3RzIHNob3duIGJ5IGdpdHdlYi4gTXVzdCBiZSBzZXQKICAgIGNvcnJlY3RseSBmb3IgZ2l0d2ViIHRvIGZpbmQgcmVwb3NpdG9yaWVzIHRvIGRpc3BsYXkuICBTZWUgYWxzbwotICAgIkdpdHdlYiByZXBvc2l0b3JpZXMiIGluIElOU1RBTEwgZmlsZSBmb3IgZ2l0d2ViLiAgW0RlZmF1bHQ6IC9wdWIvZ2l0XQorICAgIkdpdHdlYiByZXBvc2l0b3JpZXMiIGluIHRoZSBJTlNUQUxMIGZpbGUgZm9yIGdpdHdlYi4gIFtEZWZhdWx0OiAvcHViL2dpdF0KICAqIEdJVFdFQl9QUk9KRUNUX01BWERFUFRICi0gICBUaGUgZmlsZXN5c3RlbSB0cmF2ZXJzaW5nIGxpbWl0IGZvciBnZXR0aW5nIHByb2plY3RzIGxpc3Q7IHRoZSBudW1iZXIKKyAgIFRoZSBmaWxlc3lzdGVtIHRyYXZlcnNpbmcgbGltaXQgZm9yIGdldHRpbmcgdGhlIHByb2plY3QgbGlzdDsgdGhlIG51bWJlcgogICAgaXMgdGFrZW4gYXMgZGVwdGggcmVsYXRpdmUgdG8gdGhlIHByb2plY3Ryb290LiAgSXQgaXMgdXNlZCB3aGVuCiAgICBHSVRXRUJfTElTVCBpcyBhIGRpcmVjdG9yeSAob3IgaXMgbm90IHNldDsgdGhlbiBwcm9qZWN0IHJvb3QgaXMgdXNlZCkuCiAgICBJcyBpcyBtZWFudCB0byBzcGVlZCB1cCBwcm9qZWN0IGxpc3Rpbmcgb24gbGFyZ2Ugd29yayB0cmVlcyBieSBsaW1pdGluZwotICAgZmluZCBkZXB0aC4gIFtEZWZhdWx0OiAyMDA3XQorICAgc2VhcmNoIGRlcHRoLiAgW0RlZmF1bHQ6IDIwMDddCiAgKiBHSVRXRUJfTElTVAogICAgUG9pbnRzIHRvIGEgZGlyZWN0b3J5IHRvIHNjYW4gZm9yIHByb2plY3RzIChkZWZhdWx0cyB0byBwcm9qZWN0IHJvb3QKICAgIGlmIG5vdCBzZXQgLyBpZiBlbXB0eSkgb3IgdG8gYSBmaWxlIHdpdGggZXhwbGljaXQgbGlzdGluZyBvZiBwcm9qZWN0cwpAQCAtNzIsMTUgKzcyLDE1IEBACiAgICBHaXQgYmFzZSBVUkxzIHVzZWQgZm9yIFVSTCB0byB3aGVyZSBmZXRjaCBwcm9qZWN0IGZyb20sIGkuZS4gZnVsbAogICAgVVJMIGlzICIkZ2l0X2Jhc2VfdXJsLyRwcm9qZWN0Ii4gIFNob3duIG9uIHByb2plY3RzIHN1bW1hcnkgcGFnZS4KICAgIFJlcG9zaXRvcnkgVVJMIGZvciBwcm9qZWN0IGNhbiBiZSBhbHNvIGNvbmZpZ3VyZWQgcGVyIHJlcG9zaXRvcnk7IHRoaXMKLSAgIHRha2VzIHByZWNlbmRlbmNlIG92ZXIgVVJMIGNvbXBvc2VkIGZyb20gYmFzZSBVUkwgYW5kIHByb2plY3QgbmFtZS4KKyAgIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBVUkxzIGNvbXBvc2VkIGZyb20gYmFzZSBVUkwgYW5kIGEgcHJvamVjdCBuYW1lLgogICAgTm90ZSB0aGF0IHlvdSBjYW4gc2V0dXAgbXVsdGlwbGUgYmFzZSBVUkxzIChmb3IgZXhhbXBsZSBvbmUgZm9yCi0gICBnaXQ6Ly8gcHJvdG9jb2wgYWNjZXNzLCBvbmUgZm9yIGh0dHA6Ly8gYWNjZXNzKSBmcm9tIGdpdHdlYiBjb25maWcKLSAgIGZpbGUuICBbTm8gZGVmYXVsdF0KKyAgIGdpdDovLyBwcm90b2NvbCBhY2Nlc3MsIGFub3RoZXIgZm9yIGh0dHA6Ly8gYWNjZXNzKSBmcm9tIHRoZSBnaXR3ZWIKKyAgIGNvbmZpZyBmaWxlLiAgW05vIGRlZmF1bHRdCiAgKiBHSVRXRUJfQ1NTCiAgICBQb2ludHMgdG8gdGhlIGxvY2F0aW9uIHdoZXJlIHlvdSBwdXQgZ2l0d2ViLmNzcyBvbiB5b3VyIHdlYiBzZXJ2ZXIKLSAgIChvciB0byBiZSBtb3JlIGdlbmVyaWMgVVJJIG9mIGdpdHdlYiBzdHlsZXNoZWV0KS4gIFJlbGF0aXZlIHRvIGJhc2UKLSAgIFVSSSBvZiBnaXR3ZWIuICBOb3RlIHRoYXQgeW91IGNhbiBzZXR1cCBtdWx0aXBsZSBzdHlsZXNoZWV0cyBmcm9tCi0gICBnaXR3ZWIgY29uZmlnIGZpbGUuICBbRGVmYXVsdDogZ2l0d2ViLmNzc10KKyAgIChvciB0byBiZSBtb3JlIGdlbmVyaWMsIHRoZSBVUkkgb2YgZ2l0d2ViIHN0eWxlc2hlZXQpLiAgUmVsYXRpdmUgdG8gdGhlCisgICBiYXNlIFVSSSBvZiBnaXR3ZWIuICBOb3RlIHRoYXQgeW91IGNhbiBzZXR1cCBtdWx0aXBsZSBzdHlsZXNoZWV0cyBmcm9tCisgICB0aGUgZ2l0d2ViIGNvbmZpZyBmaWxlLiAgW0RlZmF1bHQ6IGdpdHdlYi5jc3NdCiAgKiBHSVRXRUJfTE9HTwogICAgUG9pbnRzIHRvIHRoZSBsb2NhdGlvbiB3aGVyZSB5b3UgcHV0IGdpdC1sb2dvLnBuZyBvbiB5b3VyIHdlYiBzZXJ2ZXIKICAgIChvciB0byBiZSBtb3JlIGdlbmVyaWMgVVJJIG9mIGxvZ28sIDcyeDI3IHNpemUsIGRpc3BsYXllZCBpbiB0b3AgcmlnaHQKQEAgLTEwMCwxMyArMTAwLDIwIEBACiAgICBpcyBzZXQgd2hlbiBnaXR3ZWIuY2dpIGlzIGV4ZWN1dGVkLCB0aGVuIHRoZSBmaWxlIHNwZWNpZmllZCBpbiB0aGUKICAgIGVudmlyb25tZW50IHZhcmlhYmxlIHdpbGwgYmUgbG9hZGVkIGluc3RlYWQgb2YgdGhlIGZpbGUgc3BlY2lmaWVkCiAgICB3aGVuIGdpdHdlYi5jZ2kgd2FzIGNyZWF0ZWQuICBbRGVmYXVsdDogZ2l0d2ViX2NvbmZpZy5wZXJsXQorICogR0lUV0VCX0NPTkZJR19TWVNURU0KKyAgIFRoaXMgUGVybCBmaWxlIHdpbGwgYmUgbG9hZGVkIHVzaW5nICdkbycgYXMgYSBmYWxsYmFjayBpZiBHSVRXRUJfQ09ORklHCisgICBkb2VzIG5vdCBleGlzdC4gIElmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBHSVRXRUJfQ09ORklHX1NZU1RFTSBpcyBzZXQKKyAgIHdoZW4gZ2l0d2ViLmNnaSBpcyBleGVjdXRlZCwgdGhlbiB0aGUgZmlsZSBzcGVjaWZpZWQgaW4gdGhlIGVudmlyb25tZW50CisgICB2YXJpYWJsZSB3aWxsIGJlIGxvYWRlZCBpbnN0ZWFkIG9mIHRoZSBmaWxlIHNwZWNpZmllZCB3aGVuIGdpdHdlYi5jZ2kgd2FzCisgICBjcmVhdGVkLiAgW0RlZmF1bHQ6IC9ldGMvZ2l0d2ViLmNvbmZdCiAKIAogUnVudGltZSBnaXR3ZWIgY29uZmlndXJhdGlvbgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBZb3UgY2FuIGFkanVzdCBnaXR3ZWIgYmVoYXZpb3VyIHVzaW5nIHRoZSBmaWxlIHNwZWNpZmllZCBpbiBgR0lUV0VCX0NPTkZJR2AKLShkZWZhdWx0cyB0byAnZ2l0d2ViX2NvbmZpZy5wZXJsJyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIENHSSkuCisoZGVmYXVsdHMgdG8gJ2dpdHdlYl9jb25maWcucGVybCcgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBDR0kpLCBhbmQKK2FzIGEgZmFsbGJhY2sgYEdJVFdFQl9DT05GSUdfU1lTVEVNYCAoZGVmYXVsdHMgdG8gL2V0Yy9naXR3ZWIuY29uZikuCiBUaGUgbW9zdCBub3RhYmxlIHRoaW5nIHRoYXQgaXMgbm90IGNvbmZpZ3VyYWJsZSBhdCBjb21waWxlIHRpbWUgYXJlIHRoZQogb3B0aW9uYWwgZmVhdHVyZXMsIHN0b3JlZCBpbiB0aGUgJyVmZWF0dXJlcycgdmFyaWFibGUuCiAKQEAgLTExNCwxNSArMTIxLDE1IEBACiBpbiB5b3VyIGBHSVRXRUJfQ09ORklHYCBvciBwZXItcHJvamVjdCBpbiBgcHJvamVjdC5naXQvY29uZmlnYCBjYW4gYmUgZm91bmQKIGFzIGNvbW1lbnRzIGluc2lkZSAnZ2l0d2ViLmNnaScuCiAKLVNlZSBhbHNvICJHaXR3ZWIgY29uZmlnIGZpbGUiICh3aXRoIGV4YW1wbGUgb2YgZ2l0d2ViIGNvbmZpZyBmaWxlKSwgYW5kCi0iR2l0d2ViIHJlcG9zaXRvcmllcyIgc2VjdGlvbnMgaW4gSU5TVEFMTCBmaWxlIGZvciBnaXR3ZWIuCitTZWUgYWxzbyB0aGUgIkdpdHdlYiBjb25maWcgZmlsZSIgKHdpdGggYW4gZXhhbXBsZSBvZiBjb25maWcgZmlsZSksIGFuZAordGhlICJHaXR3ZWIgcmVwb3NpdG9yaWVzIiBzZWN0aW9ucyBpbiBJTlNUQUxMIGZpbGUgZm9yIGdpdHdlYi4KIAogCi1HaXR3ZWIgY29uZmlnIGZpbGUgaXMgW2ZyYWdtZW50XSBvZiBwZXJsIGNvZGUuIFlvdSBjYW4gc2V0IHZhcmlhYmxlcworVGhlIGdpdHdlYiBjb25maWcgZmlsZSBpcyBhIGZyYWdtZW50IG9mIHBlcmwgY29kZS4gWW91IGNhbiBzZXQgdmFyaWFibGVzCiB1c2luZyAib3VyICR2YXJpYWJsZSA9IHZhbHVlIjsgdGV4dCBmcm9tICIjIiBjaGFyYWN0ZXIgdW50aWwgdGhlIGVuZAogb2YgYSBsaW5lIGlzIGlnbm9yZWQuIFNlZSBwZXJsc3luKDEpIG1hbiBwYWdlIGZvciBkZXRhaWxzLgogCi1CZWxvdyB0aGVyZSBpcyBsaXN0IG9mIHZhaWFibGVzIHdoaWNoIHlvdSBtaWdodCB3YW50IHRvIHNldCBpbiBnaXR3ZWIgY29uZmlnLgorQmVsb3cgaXMgdGhlIGxpc3Qgb2YgdmFyaWFibGVzIHdoaWNoIHlvdSBtaWdodCB3YW50IHRvIHNldCBpbiBnaXR3ZWIgY29uZmlnLgogU2VlIHRoZSB0b3Agb2YgJ2dpdHdlYi5jZ2knIGZvciB0aGUgZnVsbCBsaXN0IG9mIHZhcmlhYmxlcyBhbmQgdGhlaXIKIGRlc2NyaXB0aW9ucy4KIApAQCAtMTMzLDcgKzE0MCw3IEBACiAod2l0aCB0aGUgZXhjZXB0aW9uIG9mICRwcm9qZWN0cm9vdCBhbmQgJHByb2plY3RzX2xpc3QgdGhpcyBsaXN0IGRvZXMKIG5vdCBpbmNsdWRlIHZhcmlhYmxlcyB1c3VhbGx5IGRpcmVjdGx5IHNldCBkdXJpbmcgYnVpbGQpOgogICogJEdJVAotICAgQ3VyZSBnaXQgZXhlY3V0YWJsZSB0byB1c2UuICBCeSBkZWZhdWx0IHNldCB0byAiJEdJVF9CSU5ESVIvZ2l0Iiwgd2hpY2gKKyAgIENvcmUgZ2l0IGV4ZWN1dGFibGUgdG8gdXNlLiAgQnkgZGVmYXVsdCBzZXQgdG8gIiRHSVRfQklORElSL2dpdCIsIHdoaWNoCiAgICBpbiB0dXJuIGlzIGJ5IGRlZmF1bHQgc2V0IHRvICIkKGJpbmRpcikvZ2l0Ii4gIElmIHlvdSB1c2UgZ2l0IGZyb20gYmluYXJ5CiAgICBwYWNrYWdlLCBzZXQgdGhpcyB0byAiL3Vzci9iaW4vZ2l0Ii4gIFRoaXMgY2FuIGp1c3QgYmUgImdpdCIgaWYgeW91cgogICAgd2Vic2VydmVyIGhhcyBhIHNlbnNpYmxlIFBBVEguICBJZiB5b3UgaGF2ZSBtdWx0aXBsZSBnaXQgdmVyc2lvbnMKQEAgLTE2OSw3ICsxNzYsNyBAQAogICAgdG8gbWFrZSBpdCBlYXNpZXIgdG8gdXBncmFkZSBnaXR3ZWIuIFlvdSBjYW4gYWRkICdzaXRlJyBzdHlsZXNoZWV0CiAgICBmb3IgZXhhbXBsZSBieSB1c2luZwogICAgICAgcHVzaCBAc3R5bGVzaGVldHMsICJnaXR3ZWItc2l0ZS5jc3MiOwotICAgaW4gZ2l0d2ViIGNvbmZpZyBmaWxlLgorICAgaW4gdGhlIGdpdHdlYiBjb25maWcgZmlsZS4KICAqICRsb2dvX3VybCwgJGxvZ29fbGFiZWwKICAgIFVSSSBhbmQgbGFiZWwgKHRpdGxlKSBvZiBHSVQgbG9nbyBsaW5rIChvciB5b3VyIHNpdGUgbG9nbywgaWYgeW91IGNob29zZQogICAgdG8gdXNlIGRpZmZlcmVudCBsb2dvIGltYWdlKS4gQnkgZGVmYXVsdCB0aGV5IHBvaW50IHRvIGdpdCBob21lcGFnZTsKQEAgLTE5MSwxMiArMTk4LDEyIEBACiAgICBEZWZhdWx0IG1pbWV0eXBlIGZvciBibG9iX3BsYWluIChyYXcpIHZpZXcsIGlmIG1pbWV0eXBlIGNoZWNraW5nCiAgICBkb2Vzbid0IHJlc3VsdCBpbiBzb21lIG90aGVyIHR5cGU7IGJ5IGRlZmF1bHQgJ3RleHQvcGxhaW4nLgogICogJGRlZmF1bHRfdGV4dF9wbGFpbl9jaGFyc2V0Ci0gICBEZWZhdWx0IGNoYXJzZXQgZm9yIHRleHQgZmlsZXMuIElmIG5vdCBzZXQsIHdlYiBzZXJ3ZXIgY29uZmlndXJhdGlvbgorICAgRGVmYXVsdCBjaGFyc2V0IGZvciB0ZXh0IGZpbGVzLiBJZiBub3Qgc2V0LCB3ZWIgc2VydmVyIGNvbmZpZ3VyYXRpb24KICAgIHdvdWxkIGJlIHVzZWQuCiAgKiAkbWltZXR5cGVzX2ZpbGUKICAgIEZpbGUgdG8gdXNlIGZvciAoZmlsZW5hbWUgZXh0ZW5zaW9uIGJhc2VkKSBndWVzc2luZyBvZiBNSU1FIHR5cGVzIGJlZm9yZQotICAgdHJ5aW5nIC9ldGMvbWltZS50eXBlcy4gUGF0aCwgaWYgcmVsYXRpdmUsIGlzIHRha2VuIGN1cnJlbnRseSBhcyB0YWtlbgotICAgcmVsYXRpdmUgdG8gY3VycmVudCBnaXQgcmVwb3NpdG95LgorICAgdHJ5aW5nIC9ldGMvbWltZS50eXBlcy4gUGF0aCwgaWYgcmVsYXRpdmUsIGlzIHRha2VuIGN1cnJlbnRseSBhcworICAgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgZ2l0IHJlcG9zaXRvcnkuCiAgKiAkZmFsbGJhY2tfZW5jb2RpbmcKICAgIEdpdHdlYiBhc3N1bWVzIHRoaXMgY2hhcnNldCBpZiBsaW5lIGNvbnRhaW5zIG5vbi1VVEYtOCBjaGFyYWN0ZXJzLgogICAgRmFsbGJhY2sgZGVjb2RpbmcgaXMgdXNlZCB3aXRob3V0IGVycm9yIGNoZWNraW5nLCBzbyBpdCBjYW4gYmUgZXZlbgpAQCAtMjI1LDE0ICsyMzIsMTQgQEAKICAgIHNpbmdsZSBsaW5lIGRlc2NyaXB0aW9uIG9mIGEgcHJvamVjdCAob2YgYSByZXBvc2l0b3J5KS4gUGxhaW4gdGV4dCBmaWxlOwogICAgSFRNTCB3aWxsIGJlIGVzY2FwZWQuIEJ5IGRlZmF1bHQgc2V0IHRvCiAgICAgIFVubmFtZWQgcmVwb3NpdG9yeTsgZWRpdCB0aGlzIGZpbGUgdG8gbmFtZSBpdCBmb3IgZ2l0d2ViLgotICAgZnJvbSB0aGUgdGVtcGxhdGUgZHVyaW5nIGNyZWF0aW5nIHJlcG9zaXRvcnkuIFlvdSBjYW4gdXNlCisgICBmcm9tIHRoZSB0ZW1wbGF0ZSBkdXJpbmcgcmVwb3NpdG9yeSBjcmVhdGlvbi4gWW91IGNhbiB1c2UgdGhlCiAgICBnaXR3ZWIuZGVzY3JpcHRpb24gcmVwbyBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCBidXQgdGhlIGZpbGUgdGFrZXMKLSAgIHByZWNlbmRlbmNlLgorICAgcHJlY2VkZW5jZS4KICAqIGNsb25ldXJsIChvciBtdWx0aXBsZS12YWx1ZWQgZ2l0d2ViLnVybCkKICAgIEZpbGUgd2l0aCByZXBvc2l0b3J5IFVSTCAodXNlZCBmb3IgY2xvbmUgYW5kIGZldGNoKSwgb25lIHBlciBsaW5lLgogICAgRGlzcGxheWVkIGluIHRoZSBwcm9qZWN0IHN1bW1hcnkgcGFnZS4gWW91IGNhbiB1c2UgbXVsdGlwbGUtdmFsdWVkCiAgICBnaXR3ZWIudXJsIHJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBmb3IgdGhhdCwgYnV0IHRoZSBmaWxlCi0gICB0YWtlcyBwcmVjZW5kZW5jZS4KKyAgIHRha2VzIHByZWNlZGVuY2UuCiAgKiBnaXR3ZWIub3duZXIKICAgIFlvdSBjYW4gdXNlIHRoZSBnaXR3ZWIub3duZXIgcmVwb3NpdG9yeSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvIHNldAogICAgcmVwb3NpdG9yeSdzIG93bmVyLiBJdCBpcyBkaXNwbGF5ZWQgaW4gdGhlIHByb2plY3QgbGlzdCBhbmQgc3VtbWFyeQpAQCAtMjQ4LDEyICsyNTUsMTUgQEAKIElmIHlvdSB3YW50IHRvIGhhdmUgb25lIFVSTCBmb3IgYm90aCBnaXR3ZWIgYW5kIHlvdXIgaHR0cDovLwogcmVwb3NpdG9yaWVzLCB5b3UgY2FuIGNvbmZpZ3VyZSBhcGFjaGUgbGlrZSB0aGlzOgogCi08VmlydHVhbEhvc3Qgd3d3OjgwPgotICAgIFNlcnZlck5hbWUgZ2l0LmRvbWFpbi5vcmcKKzxWaXJ0dWFsSG9zdCAqOjgwPgorICAgIFNlcnZlck5hbWUgZ2l0LmV4YW1wbGUub3JnCiAgICAgRG9jdW1lbnRSb290IC9wdWIvZ2l0Ci0gICAgUmV3cml0ZUVuZ2luZSBvbgotICAgIFJld3JpdGVSdWxlIF4vKC4qXC5naXQvKD8hLz8oaW5mb3xvYmplY3RzfHJlZnMpKS4qKT8kIC9jZ2ktYmluL2dpdHdlYi5jZ2kle1JFUVVFU1RfVVJJfSAgW0wsUFRdCiAgICAgU2V0RW52CUdJVFdFQl9DT05GSUcJL2V0Yy9naXR3ZWIuY29uZgorICAgIFJld3JpdGVFbmdpbmUgb24KKyAgICAjIG1ha2UgdGhlIGZyb250IHBhZ2UgYW4gaW50ZXJuYWwgcmV3cml0ZSB0byB0aGUgZ2l0d2ViIHNjcmlwdAorICAgIFJld3JpdGVSdWxlIF4vJCAgL2NnaS1iaW4vZ2l0d2ViLmNnaQorICAgICMgbWFrZSBhY2Nlc3MgZm9yICJkdW1iIGNsaWVudHMiIHdvcmsKKyAgICBSZXdyaXRlUnVsZSBeLyguKlwuZ2l0Lyg/IS8/KEhFQUR8aW5mb3xvYmplY3RzfHJlZnMpKS4qKT8kIC9jZ2ktYmluL2dpdHdlYi5jZ2kle1JFUVVFU1RfVVJJfSAgW0wsUFRdCiA8L1ZpcnR1YWxIb3N0PgogCiBUaGUgYWJvdmUgY29uZmlndXJhdGlvbiBleHBlY3RzIHlvdXIgcHVibGljIHJlcG9zaXRvcmllcyB0byBsaXZlIHVuZGVyCkBAIC0yNjksNiArMjc5LDEzIEBACiBnaXR3ZWIuY2dpKS4gIExvb2sgYXQgdGhlIGNvbW1lbnRzIGluIHRoYXQgZmlsZSBmb3IgaW5mb3JtYXRpb24gb24KIHdoaWNoIHZhcmlhYmxlcyBhbmQgd2hhdCB0aGV5IG1lYW4uCiAKK0lmIHlvdSB1c2UgdGhlIHJld3JpdGUgcnVsZXMgZnJvbSB0aGUgZXhhbXBsZSB5b3UnbGwgbGlrZWx5IGFsc28gbmVlZAorc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZyBpbiB5b3VyIGdpdHdlYi5jb25mIChvciBnaXR3ZWJfY29uZmlnLnBlcmwpIGZpbGU6CisKKyAgQHN0eWxlc2hlZXRzID0gKCIvc29tZS9hYnNvbHV0ZS9wYXRoL2dpdHdlYi5jc3MiKTsKKyAgJG15X3VyaSA9ICIvIjsKKyAgJGhvbWVfbGluayA9ICIvIjsKKwogCiBPcmlnaW5hbGx5IHdyaXR0ZW4gYnk6CiAgIEtheSBTaWV2ZXJzIDxrYXkuc2lldmVyc0B2cmZ5Lm9yZz4KZGlmZiAtLWdpdCBhL2dpdHdlYi9naXR3ZWIuY3NzIGIvZ2l0d2ViL2dpdHdlYi5jc3MKaW5kZXggNDQ2YTFjMy4uYWEwZWVjYSAxMDA2NDQKLS0tIGEvZ2l0d2ViL2dpdHdlYi5jc3MKKysrIGIvZ2l0d2ViL2dpdHdlYi5jc3MKQEAgLTQ2NCw2ICs0NjQsMTQgQEAKIAliYWNrZ3JvdW5kLWNvbG9yOiAjZWU1NTAwOwogfQogCithLnJzc19sb2dvLmdlbmVyaWMgeworCWJhY2tncm91bmQtY29sb3I6ICNmZjg4MDA7Cit9CisKK2EucnNzX2xvZ28uZ2VuZXJpYzpob3ZlciB7CisJYmFja2dyb3VuZC1jb2xvcjogI2VlNzcwMDsKK30KKwogc3Bhbi5yZWZzIHNwYW4gewogCXBhZGRpbmc6IDBweCA0cHg7CiAJZm9udC1zaXplOiA3MCU7CmRpZmYgLS1naXQgYS9naXR3ZWIvZ2l0d2ViLnBlcmwgYi9naXR3ZWIvZ2l0d2ViLnBlcmwKaW5kZXggZjM3YjY4Ny4uZjg4Y2UzNSAxMDA3NTUKLS0tIGEvZ2l0d2ViL2dpdHdlYi5wZXJsCisrKyBiL2dpdHdlYi9naXR3ZWIucGVybApAQCAtMzY5LDEwICszNjksMTUgQEAKIH0KIAogb3VyICRHSVRXRUJfQ09ORklHID0gJEVOVnsnR0lUV0VCX0NPTkZJRyd9IHx8ICIrK0dJVFdFQl9DT05GSUcrKyI7Ci1kbyAkR0lUV0VCX0NPTkZJRyBpZiAtZSAkR0lUV0VCX0NPTkZJRzsKK2lmICgtZSAkR0lUV0VCX0NPTkZJRykgeworCWRvICRHSVRXRUJfQ09ORklHOworfSBlbHNlIHsKKwlvdXIgJEdJVFdFQl9DT05GSUdfU1lTVEVNID0gJEVOVnsnR0lUV0VCX0NPTkZJR19TWVNURU0nfSB8fCAiKytHSVRXRUJfQ09ORklHX1NZU1RFTSsrIjsKKwlkbyAkR0lUV0VCX0NPTkZJR19TWVNURU0gaWYgLWUgJEdJVFdFQl9DT05GSUdfU1lTVEVNOworfQogCiAjIHZlcnNpb24gb2YgdGhlIGNvcmUgZ2l0IGJpbmFyeQotb3VyICRnaXRfdmVyc2lvbiA9IHF4KCRHSVQgLS12ZXJzaW9uKSA9fiBtL2dpdCB2ZXJzaW9uICguKikkLyA/ICQxIDogInVua25vd24iOworb3VyICRnaXRfdmVyc2lvbiA9IHF4KCIkR0lUIiAtLXZlcnNpb24pID1+IG0vZ2l0IHZlcnNpb24gKC4qKSQvID8gJDEgOiAidW5rbm93biI7CiAKICRwcm9qZWN0c19saXN0IHx8PSAkcHJvamVjdHJvb3Q7CiAKQEAgLTU4Nyw3ICs1OTIsNyBAQAogIyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIyMgYWN0aW9uIGxpbmtzCiAKLXN1YiBocmVmKCUpIHsKK3N1YiBocmVmICglKSB7CiAJbXkgJXBhcmFtcyA9IEBfOwogCSMgZGVmYXVsdCBpcyB0byB1c2UgLWFic29sdXRlIHVybCgpIGkuZS4gJG15X3VyaQogCW15ICRocmVmID0gJHBhcmFtc3stZnVsbH0gPyAkbXlfdXJsIDogJG15X3VyaTsKQEAgLTg2MSw2ICs4NjYsMTAgQEAKIAlteSAkYWRkX2xlbiA9IHNoaWZ0IHx8IDEwOwogCW15ICR3aGVyZSA9IHNoaWZ0IHx8ICdyaWdodCc7ICMgJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnCiAKKwkjIE1ha2Ugc3VyZSBwZXJsIGtub3dzIGl0IGlzIHV0ZjggZW5jb2RlZCBzbyB3ZSBkb24ndAorCSMgY3V0IGluIHRoZSBtaWRkbGUgb2YgYSB1dGY4IG11bHRpYnl0ZSBjaGFyLgorCSRzdHIgPSB0b191dGY4KCRzdHIpOworCiAJIyBhbGxvdyBvbmx5ICRsZW4gY2hhcnMsIGJ1dCBkb24ndCBjdXQgYSB3b3JkIGlmIGl0IHdvdWxkIGZpdCBpbiAkYWRkX2xlbgogCSMgaWYgaXQgZG9lc24ndCBmaXQsIGN1dCBpdCBpZiBpdCdzIHN0aWxsIGxvbmdlciB0aGFuIHRoZSBkb3RzIHdlIHdvdWxkIGFkZAogCSMgcmVtb3ZlIGNob3BwZWQgY2hhcmFjdGVyIGVudGl0aWVzIGVudGlyZWx5CkBAIC0xNDQzLDYgKzE0NTIsNDYgQEAKIAl9CiB9CiAKKyMjIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyMjIGZ1bmN0aW9ucyByZXR1cm5pbmcgdmFsdWVzIHRvIGJlIHBhc3NlZCwgcGVyaGFwcyBhZnRlciBzb21lCisjIyB0cmFuc2Zvcm1hdGlvbiwgdG8gb3RoZXIgZnVuY3Rpb25zOyBlLmcuIHJldHVybmluZyBhcmd1bWVudHMgdG8gaHJlZigpCisKKyMgcmV0dXJucyBoYXNoIHRvIGJlIHBhc3NlZCB0byBocmVmIHRvIGdlbmVyYXRlIGdpdHdlYiBVUkwKKyMgaW4gLXRpdGxlIGtleSBpdCByZXR1cm5zIGRlc2NyaXB0aW9uIG9mIGxpbmsKK3N1YiBnZXRfZmVlZF9pbmZvIHsKKwlteSAkZm9ybWF0ID0gc2hpZnQgfHwgJ0F0b20nOworCW15ICVyZXMgPSAoYWN0aW9uID0+IGxjKCRmb3JtYXQpKTsKKworCSMgZmVlZCBsaW5rcyBhcmUgcG9zc2libGUgb25seSBmb3IgcHJvamVjdCB2aWV3cworCXJldHVybiB1bmxlc3MgKGRlZmluZWQgJHByb2plY3QpOworCSMgc29tZSB2aWV3cyBzaG91bGQgbGluayB0byBPUE1MLCBvciB0byBnZW5lcmljIHByb2plY3QgZmVlZCwKKwkjIG9yIGRvbid0IGhhdmUgc3BlY2lmaWMgZmVlZCB5ZXQgKHNvIHRoZXkgc2hvdWxkIHVzZSBnZW5lcmljKQorCXJldHVybiBpZiAoJGFjdGlvbiA9fiAvXig/OnRhZ3N8aGVhZHN8Zm9ya3N8dGFnfHNlYXJjaCkkL3gpOworCisJbXkgJGJyYW5jaDsKKwkjIGJyYW5jaGVzIHJlZnMgdXNlcyAncmVmcy9oZWFkcy8nIHByZWZpeCAoZnVsbG5hbWUpIHRvIGRpZmZlcmVudGlhdGUKKwkjIGZyb20gdGFnIGxpbmtzOyB0aGlzIGFsc28gbWFrZXMgcG9zc2libGUgdG8gZGV0ZWN0IGJyYW5jaCBsaW5rcworCWlmICgoZGVmaW5lZCAkaGFzaF9iYXNlICYmICRoYXNoX2Jhc2UgPX4gbSFecmVmcy9oZWFkcy8oLiopJCEpIHx8CisJICAgIChkZWZpbmVkICRoYXNoICAgICAgJiYgJGhhc2ggICAgICA9fiBtIV5yZWZzL2hlYWRzLyguKikkISkpIHsKKwkJJGJyYW5jaCA9ICQxOworCX0KKwkjIGZpbmQgbG9nIHR5cGUgZm9yIGZlZWQgZGVzY3JpcHRpb24gKHRpdGxlKQorCW15ICR0eXBlID0gJ2xvZyc7CisJaWYgKGRlZmluZWQgJGZpbGVfbmFtZSkgeworCQkkdHlwZSAgPSAiaGlzdG9yeSBvZiAkZmlsZV9uYW1lIjsKKwkJJHR5cGUgLj0gIi8iIGlmICgkYWN0aW9uIGVxICd0cmVlJyk7CisJCSR0eXBlIC49ICIgb24gJyRicmFuY2gnIiBpZiAoZGVmaW5lZCAkYnJhbmNoKTsKKwl9IGVsc2UgeworCQkkdHlwZSA9ICJsb2cgb2YgJGJyYW5jaCIgaWYgKGRlZmluZWQgJGJyYW5jaCk7CisJfQorCisJJHJlc3stdGl0bGV9ID0gJHR5cGU7CisJJHJlc3snaGFzaCd9ID0gKGRlZmluZWQgJGJyYW5jaCA/ICJyZWZzL2hlYWRzLyRicmFuY2giIDogdW5kZWYpOworCSRyZXN7J2ZpbGVfbmFtZSd9ID0gJGZpbGVfbmFtZTsKKworCXJldHVybiAlcmVzOworfQorCiAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIyBnaXQgdXRpbGl0eSBzdWJyb3V0aW5lcywgaW52b2tpbmcgZ2l0IGNvbW1hbmRzCiAKQEAgLTE0NTEsOSArMTUwMCwxMyBAQAogCXJldHVybiAkR0lULCAnLS1naXQtZGlyPScuJGdpdF9kaXI7CiB9CiAKLSMgcmV0dXJucyBwYXRoIHRvIHRoZSBjb3JlIGdpdCBleGVjdXRhYmxlIGFuZCB0aGUgLS1naXQtZGlyIHBhcmFtZXRlciBhcyBzdHJpbmcKLXN1YiBnaXRfY21kX3N0ciB7Ci0JcmV0dXJuIGpvaW4oJyAnLCBnaXRfY21kKCkpOworIyBxdW90ZSB0aGUgZ2l2ZW4gYXJndW1lbnRzIGZvciBwYXNzaW5nIHRoZW0gdG8gdGhlIHNoZWxsCisjIHF1b3RlX2NvbW1hbmQoImNvbW1hbmQiLCAiYXJnIDEiLCAiYXJnIHdpdGggJyBhbmQgISBjaGFyYWN0ZXJzIikKKyMgPT4gIidjb21tYW5kJyAnYXJnIDEnICdhcmcgd2l0aCAnXCcnIGFuZCAnXCEnIGNoYXJhY3RlcnMnIgorIyBUcnkgdG8gYXZvaWQgdXNpbmcgdGhpcyBmdW5jdGlvbiB3aGVyZXZlciBwb3NzaWJsZS4KK3N1YiBxdW90ZV9jb21tYW5kIHsKKwlyZXR1cm4gam9pbignICcsCisJCSAgICBtYXAoIHsgbXkgJGEgPSAkXzsgJGEgPX4gcy8oWychXSkvJ1xcJDEnL2c7ICInJGEnIiB9IEBfICkpOwogfQogCiAjIGdldCBIRUFEIHJlZiBvZiBnaXZlbiBwcm9qZWN0IGFzIGhhc2gKQEAgLTIxMDksNDkgKzIxNjIsNiBAQAogCXJldHVybiB3YW50YXJyYXkgPyBAY29zIDogXEBjb3M7CiB9CiAKLSMgcGFyc2UgcmVmIGZyb20gcmVmX2ZpbGUsIGdpdmVuIGJ5IHJlZl9pZCwgd2l0aCBnaXZlbiB0eXBlCi1zdWIgcGFyc2VfcmVmIHsKLQlteSAkcmVmX2ZpbGUgPSBzaGlmdDsKLQlteSAkcmVmX2lkID0gc2hpZnQ7Ci0JbXkgJHR5cGUgPSBzaGlmdCB8fCBnaXRfZ2V0X3R5cGUoJHJlZl9pZCk7Ci0JbXkgJXJlZl9pdGVtOwotCi0JJHJlZl9pdGVteyd0eXBlJ30gPSAkdHlwZTsKLQkkcmVmX2l0ZW17J2lkJ30gPSAkcmVmX2lkOwotCSRyZWZfaXRlbXsnZXBvY2gnfSA9IDA7Ci0JJHJlZl9pdGVteydhZ2UnfSA9ICJ1bmtub3duIjsKLQlpZiAoJHR5cGUgZXEgInRhZyIpIHsKLQkJbXkgJXRhZyA9IHBhcnNlX3RhZygkcmVmX2lkKTsKLQkJJHJlZl9pdGVteydjb21tZW50J30gPSAkdGFneydjb21tZW50J307Ci0JCWlmICgkdGFneyd0eXBlJ30gZXEgImNvbW1pdCIpIHsKLQkJCW15ICVjbyA9IHBhcnNlX2NvbW1pdCgkdGFneydvYmplY3QnfSk7Ci0JCQkkcmVmX2l0ZW17J2Vwb2NoJ30gPSAkY297J2NvbW1pdHRlcl9lcG9jaCd9OwotCQkJJHJlZl9pdGVteydhZ2UnfSA9ICRjb3snYWdlX3N0cmluZyd9OwotCQl9IGVsc2lmIChkZWZpbmVkKCR0YWd7J2Vwb2NoJ30pKSB7Ci0JCQlteSAkYWdlID0gdGltZSAtICR0YWd7J2Vwb2NoJ307Ci0JCQkkcmVmX2l0ZW17J2Vwb2NoJ30gPSAkdGFneydlcG9jaCd9OwotCQkJJHJlZl9pdGVteydhZ2UnfSA9IGFnZV9zdHJpbmcoJGFnZSk7Ci0JCX0KLQkJJHJlZl9pdGVteydyZWZ0eXBlJ30gPSAkdGFneyd0eXBlJ307Ci0JCSRyZWZfaXRlbXsnbmFtZSd9ID0gJHRhZ3snbmFtZSd9OwotCQkkcmVmX2l0ZW17J3JlZmlkJ30gPSAkdGFneydvYmplY3QnfTsKLQl9IGVsc2lmICgkdHlwZSBlcSAiY29tbWl0Iil7Ci0JCW15ICVjbyA9IHBhcnNlX2NvbW1pdCgkcmVmX2lkKTsKLQkJJHJlZl9pdGVteydyZWZ0eXBlJ30gPSAiY29tbWl0IjsKLQkJJHJlZl9pdGVteyduYW1lJ30gPSAkcmVmX2ZpbGU7Ci0JCSRyZWZfaXRlbXsndGl0bGUnfSA9ICRjb3sndGl0bGUnfTsKLQkJJHJlZl9pdGVteydyZWZpZCd9ID0gJHJlZl9pZDsKLQkJJHJlZl9pdGVteydlcG9jaCd9ID0gJGNveydjb21taXR0ZXJfZXBvY2gnfTsKLQkJJHJlZl9pdGVteydhZ2UnfSA9ICRjb3snYWdlX3N0cmluZyd9OwotCX0gZWxzZSB7Ci0JCSRyZWZfaXRlbXsncmVmdHlwZSd9ID0gJHR5cGU7Ci0JCSRyZWZfaXRlbXsnbmFtZSd9ID0gJHJlZl9maWxlOwotCQkkcmVmX2l0ZW17J3JlZmlkJ30gPSAkcmVmX2lkOwotCX0KLQotCXJldHVybiAlcmVmX2l0ZW07Ci19Ci0KICMgcGFyc2UgbGluZSBvZiBnaXQtZGlmZi10cmVlICJyYXciIG91dHB1dAogc3ViIHBhcnNlX2RpZmZ0cmVlX3Jhd19saW5lIHsKIAlteSAkbGluZSA9IHNoaWZ0OwpAQCAtMjQzMiw4ICsyNDQyLDcgQEAKIAlyZXR1cm4gJGRlZmF1bHRfYmxvYl9wbGFpbl9taW1ldHlwZSB1bmxlc3MgJGZkOwogCiAJaWYgKC1UICRmZCkgewotCQlyZXR1cm4gJ3RleHQvcGxhaW4nIC4KLQkJICAgICAgICgkZGVmYXVsdF90ZXh0X3BsYWluX2NoYXJzZXQgPyAnOyBjaGFyc2V0PScuJGRlZmF1bHRfdGV4dF9wbGFpbl9jaGFyc2V0IDogJycpOworCQlyZXR1cm4gJ3RleHQvcGxhaW4nOwogCX0gZWxzaWYgKCEgJGZpbGVuYW1lKSB7CiAJCXJldHVybiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzsKIAl9IGVsc2lmICgkZmlsZW5hbWUgPX4gbS9cLnBuZyQvaSkgewpAQCAtMjQ0Nyw2ICsyNDU2LDE3IEBACiAJfQogfQogCitzdWIgYmxvYl9jb250ZW50dHlwZSB7CisJbXkgKCRmZCwgJGZpbGVfbmFtZSwgJHR5cGUpID0gQF87CisKKwkkdHlwZSB8fD0gYmxvYl9taW1ldHlwZSgkZmQsICRmaWxlX25hbWUpOworCWlmICgkdHlwZSBlcSAndGV4dC9wbGFpbicgJiYgZGVmaW5lZCAkZGVmYXVsdF90ZXh0X3BsYWluX2NoYXJzZXQpIHsKKwkJJHR5cGUgLj0gIjsgY2hhcnNldD0kZGVmYXVsdF90ZXh0X3BsYWluX2NoYXJzZXQiOworCX0KKworCXJldHVybiAkdHlwZTsKK30KKwogIyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIyMgZnVuY3Rpb25zIHByaW50aW5nIEhUTUw6IGhlYWRlciwgZm9vdGVyLCBlcnJvciBwYWdlCiAKQEAgLTI1MDUsMzAgKzI1MjUsNDkgQEAKIAkJfQogCX0KIAlpZiAoZGVmaW5lZCAkcHJvamVjdCkgewotCQlwcmludGYoJzxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iJXMgbG9nIFJTUyBmZWVkIiAnLgotCQkgICAgICAgJ2hyZWY9IiVzIiB0eXBlPSJhcHBsaWNhdGlvbi9yc3MreG1sIiAvPicuIlxuIiwKLQkJICAgICAgIGVzY19wYXJhbSgkcHJvamVjdCksIGhyZWYoYWN0aW9uPT4icnNzIikpOwotCQlwcmludGYoJzxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iJXMgbG9nIFJTUyBmZWVkIChubyBtZXJnZXMpIiAnLgotCQkgICAgICAgJ2hyZWY9IiVzIiB0eXBlPSJhcHBsaWNhdGlvbi9yc3MreG1sIiAvPicuIlxuIiwKLQkJICAgICAgIGVzY19wYXJhbSgkcHJvamVjdCksIGhyZWYoYWN0aW9uPT4icnNzIiwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfb3B0aW9ucz0+Ii0tbm8tbWVyZ2VzIikpOwotCQlwcmludGYoJzxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iJXMgbG9nIEF0b20gZmVlZCIgJy4KLQkJICAgICAgICdocmVmPSIlcyIgdHlwZT0iYXBwbGljYXRpb24vYXRvbSt4bWwiIC8+Jy4iXG4iLAotCQkgICAgICAgZXNjX3BhcmFtKCRwcm9qZWN0KSwgaHJlZihhY3Rpb249PiJhdG9tIikpOwotCQlwcmludGYoJzxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iJXMgbG9nIEF0b20gZmVlZCAobm8gbWVyZ2VzKSIgJy4KLQkJICAgICAgICdocmVmPSIlcyIgdHlwZT0iYXBwbGljYXRpb24vYXRvbSt4bWwiIC8+Jy4iXG4iLAotCQkgICAgICAgZXNjX3BhcmFtKCRwcm9qZWN0KSwgaHJlZihhY3Rpb249PiJhdG9tIiwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfb3B0aW9ucz0+Ii0tbm8tbWVyZ2VzIikpOworCQlteSAlaHJlZl9wYXJhbXMgPSBnZXRfZmVlZF9pbmZvKCk7CisJCWlmICghZXhpc3RzICRocmVmX3BhcmFtc3snLXRpdGxlJ30pIHsKKwkJCSRocmVmX3BhcmFtc3snLXRpdGxlJ30gPSAnbG9nJzsKKwkJfQorCisJCWZvcmVhY2ggbXkgJGZvcm1hdCBxdyhSU1MgQXRvbSkgeworCQkJbXkgJHR5cGUgPSBsYygkZm9ybWF0KTsKKwkJCW15ICVsaW5rX2F0dHIgPSAoCisJCQkJJy1yZWwnID0+ICdhbHRlcm5hdGUnLAorCQkJCSctdGl0bGUnID0+ICIkcHJvamVjdCAtICRocmVmX3BhcmFtc3snLXRpdGxlJ30gLSAkZm9ybWF0IGZlZWQiLAorCQkJCSctdHlwZScgPT4gImFwcGxpY2F0aW9uLyR0eXBlK3htbCIKKwkJCSk7CisKKwkJCSRocmVmX3BhcmFtc3snYWN0aW9uJ30gPSAkdHlwZTsKKwkJCSRsaW5rX2F0dHJ7Jy1ocmVmJ30gPSBocmVmKCVocmVmX3BhcmFtcyk7CisJCQlwcmludCAiPGxpbmsgIi4KKwkJCSAgICAgICJyZWw9XCIkbGlua19hdHRyeyctcmVsJ31cIiAiLgorCQkJICAgICAgInRpdGxlPVwiJGxpbmtfYXR0cnsnLXRpdGxlJ31cIiAiLgorCQkJICAgICAgImhyZWY9XCIkbGlua19hdHRyeyctaHJlZid9XCIgIi4KKwkJCSAgICAgICJ0eXBlPVwiJGxpbmtfYXR0cnsnLXR5cGUnfVwiICIuCisJCQkgICAgICAiLz5cbiI7CisKKwkJCSRocmVmX3BhcmFtc3snZXh0cmFfb3B0aW9ucyd9ID0gJy0tbm8tbWVyZ2VzJzsKKwkJCSRsaW5rX2F0dHJ7Jy1ocmVmJ30gPSBocmVmKCVocmVmX3BhcmFtcyk7CisJCQkkbGlua19hdHRyeyctdGl0bGUnfSAuPSAnIChubyBtZXJnZXMpJzsKKwkJCXByaW50ICI8bGluayAiLgorCQkJICAgICAgInJlbD1cIiRsaW5rX2F0dHJ7Jy1yZWwnfVwiICIuCisJCQkgICAgICAidGl0bGU9XCIkbGlua19hdHRyeyctdGl0bGUnfVwiICIuCisJCQkgICAgICAiaHJlZj1cIiRsaW5rX2F0dHJ7Jy1ocmVmJ31cIiAiLgorCQkJICAgICAgInR5cGU9XCIkbGlua19hdHRyeyctdHlwZSd9XCIgIi4KKwkJCSAgICAgICIvPlxuIjsKKwkJfQorCiAJfSBlbHNlIHsKIAkJcHJpbnRmKCc8bGluayByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IiVzIHByb2plY3RzIGxpc3QiICcuCi0JCSAgICAgICAnaHJlZj0iJXMiIHR5cGU9InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLz4nLiJcbiIsCisJCSAgICAgICAnaHJlZj0iJXMiIHR5cGU9InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiIC8+Jy4iXG4iLAogCQkgICAgICAgJHNpdGVfbmFtZSwgaHJlZihwcm9qZWN0PT51bmRlZiwgYWN0aW9uPT4icHJvamVjdF9pbmRleCIpKTsKIAkJcHJpbnRmKCc8bGluayByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IiVzIHByb2plY3RzIGZlZWRzIiAnLgotCQkgICAgICAgJ2hyZWY9IiVzIiB0eXBlPSJ0ZXh0L3gtb3BtbCIvPicuIlxuIiwKKwkJICAgICAgICdocmVmPSIlcyIgdHlwZT0idGV4dC94LW9wbWwiIC8+Jy4iXG4iLAogCQkgICAgICAgJHNpdGVfbmFtZSwgaHJlZihwcm9qZWN0PT51bmRlZiwgYWN0aW9uPT4ib3BtbCIpKTsKIAl9CiAJaWYgKGRlZmluZWQgJGZhdmljb24pIHsKLQkJcHJpbnQgcXEoPGxpbmsgcmVsPSJzaG9ydGN1dCBpY29uIiBocmVmPSIkZmF2aWNvbiIgdHlwZT0iaW1hZ2UvcG5nIi8+XG4pOworCQlwcmludCBxcSg8bGluayByZWw9InNob3J0Y3V0IGljb24iIGhyZWY9IiRmYXZpY29uIiB0eXBlPSJpbWFnZS9wbmciIC8+XG4pOwogCX0KIAogCXByaW50ICI8L2hlYWQ+XG4iIC4KQEAgLTI1NTUsNyArMjU5NCw3IEBACiAJcHJpbnQgIjwvZGl2PlxuIjsKIAogCW15ICgkaGF2ZV9zZWFyY2gpID0gZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ3NlYXJjaCcpOwotCWlmICgoZGVmaW5lZCAkcHJvamVjdCkgJiYgKCRoYXZlX3NlYXJjaCkpIHsKKwlpZiAoZGVmaW5lZCAkcHJvamVjdCAmJiAkaGF2ZV9zZWFyY2gpIHsKIAkJaWYgKCFkZWZpbmVkICRzZWFyY2h0ZXh0KSB7CiAJCQkkc2VhcmNodGV4dCA9ICIiOwogCQl9CkBAIC0yNTcxLDE2ICsyNjEwLDEzIEBACiAJCW15ICgkdXNlX3BhdGhpbmZvKSA9IGdpdHdlYl9jaGVja19mZWF0dXJlKCdwYXRoaW5mbycpOwogCQlpZiAoJHVzZV9wYXRoaW5mbykgewogCQkJJGFjdGlvbiAuPSAiLyIuZXNjX3VybCgkcHJvamVjdCk7Ci0JCX0gZWxzZSB7Ci0JCQkkY2dpLT5wYXJhbSgicCIsICRwcm9qZWN0KTsKIAkJfQotCQkkY2dpLT5wYXJhbSgiYSIsICJzZWFyY2giKTsKLQkJJGNnaS0+cGFyYW0oImgiLCAkc2VhcmNoX2hhc2gpOwogCQlwcmludCAkY2dpLT5zdGFydGZvcm0oLW1ldGhvZCA9PiAiZ2V0IiwgLWFjdGlvbiA9PiAkYWN0aW9uKSAuCiAJCSAgICAgICI8ZGl2IGNsYXNzPVwic2VhcmNoXCI+XG4iIC4KLQkJICAgICAgKCEkdXNlX3BhdGhpbmZvICYmICRjZ2ktPmhpZGRlbigtbmFtZSA9PiAicCIpIC4gIlxuIikgLgotCQkgICAgICAkY2dpLT5oaWRkZW4oLW5hbWUgPT4gImEiKSAuICJcbiIgLgotCQkgICAgICAkY2dpLT5oaWRkZW4oLW5hbWUgPT4gImgiKSAuICJcbiIgLgorCQkgICAgICAoISR1c2VfcGF0aGluZm8gJiYKKwkJICAgICAgJGNnaS0+aW5wdXQoey1uYW1lPT4icCIsIC12YWx1ZT0+JHByb2plY3QsIC10eXBlPT4iaGlkZGVuIn0pIC4gIlxuIikgLgorCQkgICAgICAkY2dpLT5pbnB1dCh7LW5hbWU9PiJhIiwgLXZhbHVlPT4ic2VhcmNoIiwgLXR5cGU9PiJoaWRkZW4ifSkgLiAiXG4iIC4KKwkJICAgICAgJGNnaS0+aW5wdXQoey1uYW1lPT4iaCIsIC12YWx1ZT0+JHNlYXJjaF9oYXNoLCAtdHlwZT0+ImhpZGRlbiJ9KSAuICJcbiIgLgogCQkgICAgICAkY2dpLT5wb3B1cF9tZW51KC1uYW1lID0+ICdzdCcsIC1kZWZhdWx0ID0+ICdjb21taXQnLAogCQkgICAgICAgICAgICAgICAgICAgICAgIC12YWx1ZXMgPT4gWydjb21taXQnLCAnZ3JlcCcsICdhdXRob3InLCAnY29tbWl0dGVyJywgJ3BpY2theGUnXSkgLgogCQkgICAgICAkY2dpLT5zdXAoJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJzZWFyY2hfaGVscCIpfSwgIj8iKSkgLgpAQCAtMjU5NiwyMyArMjYzMiwzNSBAQAogfQogCiBzdWIgZ2l0X2Zvb3Rlcl9odG1sIHsKKwlteSAkZmVlZF9jbGFzcyA9ICdyc3NfbG9nbyc7CisKIAlwcmludCAiPGRpdiBjbGFzcz1cInBhZ2VfZm9vdGVyXCI+XG4iOwogCWlmIChkZWZpbmVkICRwcm9qZWN0KSB7CiAJCW15ICRkZXNjciA9IGdpdF9nZXRfcHJvamVjdF9kZXNjcmlwdGlvbigkcHJvamVjdCk7CiAJCWlmIChkZWZpbmVkICRkZXNjcikgewogCQkJcHJpbnQgIjxkaXYgY2xhc3M9XCJwYWdlX2Zvb3Rlcl90ZXh0XCI+IiAuIGVzY19odG1sKCRkZXNjcikgLiAiPC9kaXY+XG4iOwogCQl9Ci0JCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4icnNzIiksCi0JCSAgICAgICAgICAgICAgLWNsYXNzID0+ICJyc3NfbG9nbyJ9LCAiUlNTIikgLiAiICI7Ci0JCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYXRvbSIpLAotCQkgICAgICAgICAgICAgIC1jbGFzcyA9PiAicnNzX2xvZ28ifSwgIkF0b20iKSAuICJcbiI7CisKKwkJbXkgJWhyZWZfcGFyYW1zID0gZ2V0X2ZlZWRfaW5mbygpOworCQlpZiAoISVocmVmX3BhcmFtcykgeworCQkJJGZlZWRfY2xhc3MgLj0gJyBnZW5lcmljJzsKKwkJfQorCQkkaHJlZl9wYXJhbXN7Jy10aXRsZSd9IHx8PSAnbG9nJzsKKworCQlmb3JlYWNoIG15ICRmb3JtYXQgcXcoUlNTIEF0b20pIHsKKwkJCSRocmVmX3BhcmFtc3snYWN0aW9uJ30gPSBsYygkZm9ybWF0KTsKKwkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoJWhyZWZfcGFyYW1zKSwKKwkJCSAgICAgICAgICAgICAgLXRpdGxlID0+ICIkaHJlZl9wYXJhbXN7Jy10aXRsZSd9ICRmb3JtYXQgZmVlZCIsCisJCQkgICAgICAgICAgICAgIC1jbGFzcyA9PiAkZmVlZF9jbGFzc30sICRmb3JtYXQpLiJcbiI7CisJCX0KKwogCX0gZWxzZSB7CiAJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYocHJvamVjdD0+dW5kZWYsIGFjdGlvbj0+Im9wbWwiKSwKLQkJICAgICAgICAgICAgICAtY2xhc3MgPT4gInJzc19sb2dvIn0sICJPUE1MIikgLiAiICI7CisJCSAgICAgICAgICAgICAgLWNsYXNzID0+ICRmZWVkX2NsYXNzfSwgIk9QTUwiKSAuICIgIjsKIAkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihwcm9qZWN0PT51bmRlZiwgYWN0aW9uPT4icHJvamVjdF9pbmRleCIpLAotCQkgICAgICAgICAgICAgIC1jbGFzcyA9PiAicnNzX2xvZ28ifSwgIlRYVCIpIC4gIlxuIjsKKwkJICAgICAgICAgICAgICAtY2xhc3MgPT4gJGZlZWRfY2xhc3N9LCAiVFhUIikgLiAiXG4iOwogCX0KLQlwcmludCAiPC9kaXY+XG4iIDsKKwlwcmludCAiPC9kaXY+XG4iOyAjIGNsYXNzPSJwYWdlX2Zvb3RlciIKIAogCWlmICgtZiAkc2l0ZV9mb290ZXIpIHsKIAkJb3BlbiAobXkgJGZkLCAkc2l0ZV9mb290ZXIpOwpAQCAtNDI5Nyw2ICs0MzQ1LDcgQEAKIH0KIAogc3ViIGdpdF9ibG9iX3BsYWluIHsKKwlteSAkdHlwZSA9IHNoaWZ0OwogCW15ICRleHBpcmVzOwogCiAJaWYgKCFkZWZpbmVkICRoYXNoKSB7CkBAIC00MzEyLDEzICs0MzYxLDEzIEBACiAJCSRleHBpcmVzID0gIisxZCI7CiAJfQogCi0JbXkgJHR5cGUgPSBzaGlmdDsKIAlvcGVuIG15ICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAiY2F0LWZpbGUiLCAiYmxvYiIsICRoYXNoCi0JCW9yIGRpZV9lcnJvcih1bmRlZiwgIkNvdWxkbid0IGNhdCAkZmlsZV9uYW1lLCAkaGFzaCIpOworCQlvciBkaWVfZXJyb3IodW5kZWYsICJPcGVuIGdpdC1jYXQtZmlsZSBibG9iICckaGFzaCcgZmFpbGVkIik7CiAKLQkkdHlwZSB8fD0gYmxvYl9taW1ldHlwZSgkZmQsICRmaWxlX25hbWUpOworCSMgY29udGVudC10eXBlIChjYW4gaW5jbHVkZSBjaGFyc2V0KQorCSR0eXBlID0gYmxvYl9jb250ZW50dHlwZSgkZmQsICRmaWxlX25hbWUsICR0eXBlKTsKIAotCSMgc2F2ZSBhcyBmaWxlbmFtZSwgZXZlbiB3aGVuIG5vICRmaWxlX25hbWUgaXMgZ2l2ZW4KKwkjICJzYXZlIGFzIiBmaWxlbmFtZSwgZXZlbiB3aGVuIG5vICRmaWxlX25hbWUgaXMgZ2l2ZW4KIAlteSAkc2F2ZV9hcyA9ICIkaGFzaCI7CiAJaWYgKGRlZmluZWQgJGZpbGVfbmFtZSkgewogCQkkc2F2ZV9hcyA9ICRmaWxlX25hbWU7CkBAIC00MzI3LDkgKzQzNzYsOSBAQAogCX0KIAogCXByaW50ICRjZ2ktPmhlYWRlcigKLQkJLXR5cGUgPT4gIiR0eXBlIiwKLQkJLWV4cGlyZXM9PiRleHBpcmVzLAotCQktY29udGVudF9kaXNwb3NpdGlvbiA9PiAnaW5saW5lOyBmaWxlbmFtZT0iJyAuICIkc2F2ZV9hcyIgLiAnIicpOworCQktdHlwZSA9PiAkdHlwZSwKKwkJLWV4cGlyZXMgPT4gJGV4cGlyZXMsCisJCS1jb250ZW50X2Rpc3Bvc2l0aW9uID0+ICdpbmxpbmU7IGZpbGVuYW1lPSInIC4gJHNhdmVfYXMgLiAnIicpOwogCXVuZGVmICQvOwogCWJpbm1vZGUgU1RET1VULCAnOnJhdyc7CiAJcHJpbnQgPCRmZD47CkBAIC00NTQ1LDcgKzQ1OTQsNiBAQAogCQkkaGFzaCA9IGdpdF9nZXRfaGVhZF9oYXNoKCRwcm9qZWN0KTsKIAl9CiAKLQlteSAkZ2l0X2NvbW1hbmQgPSBnaXRfY21kX3N0cigpOwogCW15ICRuYW1lID0gJHByb2plY3Q7CiAJJG5hbWUgPX4gcywoW14vXSkvKlwuZ2l0JCwkMSw7CiAJJG5hbWUgPSBiYXNlbmFtZSgkbmFtZSk7CkBAIC00NTUzLDExICs0NjAxLDEyIEBACiAJJG5hbWUgPX4gcy9cMDQ3L1wwNDdcXFwwNDdcMDQ3L2c7CiAJbXkgJGNtZDsKIAkkZmlsZW5hbWUgLj0gIi0kaGFzaCRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyRmb3JtYXR9eydzdWZmaXgnfSI7Ci0JJGNtZCA9ICIkZ2l0X2NvbW1hbmQgYXJjaGl2ZSAiIC4KLQkJIi0tZm9ybWF0PSRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyRmb3JtYXR9eydmb3JtYXQnfSAiIC4KLQkJIi0tcHJlZml4PVwnJG5hbWVcJy8gJGhhc2giOworCSRjbWQgPSBxdW90ZV9jb21tYW5kKAorCQlnaXRfY21kKCksICdhcmNoaXZlJywKKwkJIi0tZm9ybWF0PSRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyRmb3JtYXR9eydmb3JtYXQnfSIsCisJCSItLXByZWZpeD0kbmFtZS8iLCAkaGFzaCk7CiAJaWYgKGV4aXN0cyAka25vd25fc25hcHNob3RfZm9ybWF0c3skZm9ybWF0fXsnY29tcHJlc3Nvcid9KSB7Ci0JCSRjbWQgLj0gJyB8ICcgLiBqb2luICcgJywgQHska25vd25fc25hcHNob3RfZm9ybWF0c3skZm9ybWF0fXsnY29tcHJlc3Nvcid9fTsKKwkJJGNtZCAuPSAnIHwgJyAuIHF1b3RlX2NvbW1hbmQoQHska25vd25fc25hcHNob3RfZm9ybWF0c3skZm9ybWF0fXsnY29tcHJlc3Nvcid9fSk7CiAJfQogCiAJcHJpbnQgJGNnaS0+aGVhZGVyKApAQCAtNDc3MCw4ICs0ODE5LDggQEAKIAlpZiAoJGhhc2ggfHwgKCRoYXNoX2Jhc2UgJiYgIWRlZmluZWQgJGZpbGVfbmFtZSkpIHsKIAkJbXkgJG9iamVjdF9pZCA9ICRoYXNoIHx8ICRoYXNoX2Jhc2U7CiAKLQkJbXkgJGdpdF9jb21tYW5kID0gZ2l0X2NtZF9zdHIoKTsKLQkJb3BlbiBteSAkZmQsICItfCIsICIkZ2l0X2NvbW1hbmQgY2F0LWZpbGUgLXQgJG9iamVjdF9pZCAyPi9kZXYvbnVsbCIKKwkJb3BlbiBteSAkZmQsICItfCIsIHF1b3RlX2NvbW1hbmQoCisJCQlnaXRfY21kKCksICdjYXQtZmlsZScsICctdCcsICRvYmplY3RfaWQpIC4gJyAyPiAvZGV2L251bGwnCiAJCQlvciBkaWVfZXJyb3IoJzQwNCBOb3QgRm91bmQnLCAiT2JqZWN0IGRvZXMgbm90IGV4aXN0Iik7CiAJCSR0eXBlID0gPCRmZD47CiAJCWNob21wICR0eXBlOwpkaWZmIC0tZ2l0ICJhL2dpdHdlYi90ZXN0L01cMzAzXDI0NHJjaGVuIiAiYi9naXR3ZWIvdGVzdC9NXDMwM1wyNDRyY2hlbiIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmN2ExZDMuLjAwMDAwMDAKLS0tICJhL2dpdHdlYi90ZXN0L01cMzAzXDI0NHJjaGVuIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotTcOkcmNoZW4KLU3kcmNoZW4KZGlmZiAtLWdpdCBhL2dpdHdlYi90ZXN0L2ZpbGUgd2l0aCBzcGFjZXMgYi9naXR3ZWIvdGVzdC9maWxlIHdpdGggc3BhY2VzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTA4NTQzLi4wMDAwMDAwCi0tLSBhL2dpdHdlYi90ZXN0L2ZpbGUgd2l0aCBzcGFjZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLVRoaXMKLWZpbGVuYW1lCi1jb250YWlucwotc3BhY2VzLgpkaWZmIC0tZ2l0IGEvZ2l0d2ViL3Rlc3QvZmlsZStwbHVzK3NpZ24gYi9naXR3ZWIvdGVzdC9maWxlK3BsdXMrc2lnbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQwNTI3OC4uMDAwMDAwMAotLS0gYS9naXR3ZWIvdGVzdC9maWxlK3BsdXMrc2lnbgorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotVGhpcwotZmlsZW5hbWUKLWNvbnRhaW5zCi0rCi1wbHVzCi1jaGFycy4KZGlmZiAtLWdpdCBhL2dyYXBoLmMgYi9ncmFwaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNjMzZjgKLS0tIC9kZXYvbnVsbAorKysgYi9ncmFwaC5jCkBAIC0wLDAgKzEsMTEzMiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiZ3JhcGguaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKworLyoKKyAqIFRPRE86CisgKiAtIEFkZCBjb2xvcnMgdG8gdGhlIGdyYXBoLgorICogICBQaWNrIGEgY29sb3IgZm9yIGVhY2ggY29sdW1uLCBhbmQgcHJpbnQgYWxsIGNoYXJhY3RlcnMKKyAqICAgaW4gdGhhdCBjb2x1bW4gd2l0aCB0aGUgc3BlY2lmaWVkIGNvbG9yLgorICoKKyAqIC0gTGltaXQgdGhlIG51bWJlciBvZiBjb2x1bW5zLCBzaW1pbGFyIHRvIHRoZSB3YXkgZ2l0ayBkb2VzLgorICogICBJZiB3ZSByZWFjaCBtb3JlIHRoYW4gYSBzcGVjaWZpZWQgbnVtYmVyIG9mIGNvbHVtbnMsIG9taXQKKyAqICAgc2VjdGlvbnMgb2Ygc29tZSBjb2x1bW5zLgorICoKKyAqIC0gVGhlIG91dHB1dCBkdXJpbmcgdGhlIEdSQVBIX1BSRV9DT01NSVQgYW5kIEdSQVBIX0NPTExBUFNJTkcgc3RhdGVzCisgKiAgIGNvdWxkIGJlIG1hZGUgbW9yZSBjb21wYWN0IGJ5IHByaW50aW5nIGhvcml6b250YWwgbGluZXMsIGluc3RlYWQgb2YKKyAqICAgbG9uZyBkaWFnb25hbCBsaW5lcy4gIEZvciBleGFtcGxlLCBkdXJpbmcgY29sbGFwc2luZywgc29tZXRoaW5nIGxpa2UKKyAqICAgdGhpczogICAgICAgICAgaW5zdGVhZCBvZiB0aGlzOgorICogICB8IHwgfCB8IHwgICAgICB8IHwgfCB8IHwKKyAqICAgfCB8X3xffC8gICAgICAgfCB8IHwgfC8KKyAqICAgfC98IHwgfCAgICAgICAgfCB8IHwvfAorICogICB8IHwgfCB8ICAgICAgICB8IHwvfCB8CisgKiAgICAgICAgICAgICAgICAgIHwvfCB8IHwKKyAqICAgICAgICAgICAgICAgICAgfCB8IHwgfAorICoKKyAqICAgSWYgdGhlcmUgYXJlIHNldmVyYWwgcGFyYWxsZWwgZGlhZ29uYWwgbGluZXMsIHRoZXkgd2lsbCBuZWVkIHRvIGJlCisgKiAgIHJlcGxhY2VkIHdpdGggaG9yaXpvbnRhbCBsaW5lcyBvbiBzdWJzZXF1ZW50IHJvd3MuCisgKi8KKworc3RydWN0IGNvbHVtbiB7CisJLyoKKwkgKiBUaGUgcGFyZW50IGNvbW1pdCBvZiB0aGlzIGNvbHVtbi4KKwkgKi8KKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJLyoKKwkgKiBYWFg6IE9uY2Ugd2UgYWRkIHN1cHBvcnQgZm9yIGNvbG9ycywgc3RydWN0IGNvbHVtbiBjb3VsZCBhbHNvCisJICogY29udGFpbiB0aGUgY29sb3Igb2YgaXRzIGJyYW5jaCBsaW5lLgorCSAqLworfTsKKworZW51bSBncmFwaF9zdGF0ZSB7CisJR1JBUEhfUEFERElORywKKwlHUkFQSF9TS0lQLAorCUdSQVBIX1BSRV9DT01NSVQsCisJR1JBUEhfQ09NTUlULAorCUdSQVBIX1BPU1RfTUVSR0UsCisJR1JBUEhfQ09MTEFQU0lORworfTsKKworc3RydWN0IGdpdF9ncmFwaCB7CisJLyoKKwkgKiBUaGUgY29tbWl0IGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWQKKwkgKi8KKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJLyogVGhlIHJldi1pbmZvIHVzZWQgZm9yIHRoZSBjdXJyZW50IHRyYXZlcnNhbCAqLworCXN0cnVjdCByZXZfaW5mbyAqcmV2czsKKwkvKgorCSAqIFRoZSBudW1iZXIgb2YgaW50ZXJlc3RpbmcgcGFyZW50cyB0aGF0IHRoaXMgY29tbWl0IGhhcy4KKwkgKgorCSAqIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgYWN0dWFsIG51bWJlciBvZiBwYXJlbnRzLgorCSAqIFRoaXMgY291bnQgZXhjbHVkZXMgcGFyZW50cyB0aGF0IHdvbid0IGJlIHByaW50ZWQgaW4gdGhlIGdyYXBoCisJICogb3V0cHV0LCBhcyBkZXRlcm1pbmVkIGJ5IGdyYXBoX2lzX2ludGVyZXN0aW5nKCkuCisJICovCisJaW50IG51bV9wYXJlbnRzOworCS8qCisJICogVGhlIHdpZHRoIG9mIHRoZSBncmFwaCBvdXRwdXQgZm9yIHRoaXMgY29tbWl0LgorCSAqIEFsbCByb3dzIGZvciB0aGlzIGNvbW1pdCBhcmUgcGFkZGVkIHRvIHRoaXMgd2lkdGgsIHNvIHRoYXQKKwkgKiBtZXNzYWdlcyBwcmludGVkIGFmdGVyIHRoZSBncmFwaCBvdXRwdXQgYXJlIGFsaWduZWQuCisJICovCisJaW50IHdpZHRoOworCS8qCisJICogVGhlIG5leHQgZXhwYW5zaW9uIHJvdyB0byBwcmludAorCSAqIHdoZW4gc3RhdGUgaXMgR1JBUEhfUFJFX0NPTU1JVAorCSAqLworCWludCBleHBhbnNpb25fcm93OworCS8qCisJICogVGhlIGN1cnJlbnQgb3V0cHV0IHN0YXRlLgorCSAqIFRoaXMgdGVsbHMgdXMgd2hhdCBraW5kIG9mIGxpbmUgZ3JhcGhfbmV4dF9saW5lKCkgc2hvdWxkIG91dHB1dC4KKwkgKi8KKwllbnVtIGdyYXBoX3N0YXRlIHN0YXRlOworCS8qCisJICogVGhlIG91dHB1dCBzdGF0ZSBmb3IgdGhlIHByZXZpb3VzIGxpbmUgb2Ygb3V0cHV0LgorCSAqIFRoaXMgaXMgcHJpbWFyaWx5IHVzZWQgdG8gZGV0ZXJtaW5lIGhvdyB0aGUgZmlyc3QgbWVyZ2UgbGluZQorCSAqIHNob3VsZCBhcHBlYXIsIGJhc2VkIG9uIHRoZSBsYXN0IGxpbmUgb2YgdGhlIHByZXZpb3VzIGNvbW1pdC4KKwkgKi8KKwllbnVtIGdyYXBoX3N0YXRlIHByZXZfc3RhdGU7CisJLyoKKwkgKiBUaGUgaW5kZXggb2YgdGhlIGNvbHVtbiB0aGF0IHJlZmVycyB0byB0aGlzIGNvbW1pdC4KKwkgKgorCSAqIElmIG5vbmUgb2YgdGhlIGluY29taW5nIGNvbHVtbnMgcmVmZXIgdG8gdGhpcyBjb21taXQsCisJICogdGhpcyB3aWxsIGJlIGVxdWFsIHRvIG51bV9jb2x1bW5zLgorCSAqLworCWludCBjb21taXRfaW5kZXg7CisJLyoKKwkgKiBUaGUgY29tbWl0X2luZGV4IGZvciB0aGUgcHJldmlvdXNseSBkaXNwbGF5ZWQgY29tbWl0LgorCSAqCisJICogVGhpcyBpcyB1c2VkIHRvIGRldGVybWluZSBob3cgdGhlIGZpcnN0IGxpbmUgb2YgYSBtZXJnZQorCSAqIGdyYXBoIG91dHB1dCBzaG91bGQgYXBwZWFyLCBiYXNlZCBvbiB0aGUgbGFzdCBsaW5lIG9mIHRoZQorCSAqIHByZXZpb3VzIGNvbW1pdC4KKwkgKi8KKwlpbnQgcHJldl9jb21taXRfaW5kZXg7CisJLyoKKwkgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgY29sdW1ucyB0aGF0IGNhbiBiZSBzdG9yZWQgaW4gdGhlIGNvbHVtbnMKKwkgKiBhbmQgbmV3X2NvbHVtbnMgYXJyYXlzLiAgVGhpcyBpcyBhbHNvIGhhbGYgdGhlIG51bWJlciBvZiBlbnRyaWVzCisJICogdGhhdCBjYW4gYmUgc3RvcmVkIGluIHRoZSBtYXBwaW5nIGFuZCBuZXdfbWFwcGluZyBhcnJheXMuCisJICovCisJaW50IGNvbHVtbl9jYXBhY2l0eTsKKwkvKgorCSAqIFRoZSBudW1iZXIgb2YgY29sdW1ucyAoYWxzbyBjYWxsZWQgImJyYW5jaCBsaW5lcyIgaW4gc29tZSBwbGFjZXMpCisJICovCisJaW50IG51bV9jb2x1bW5zOworCS8qCisJICogVGhlIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBuZXdfY29sdW1ucyBhcnJheQorCSAqLworCWludCBudW1fbmV3X2NvbHVtbnM7CisJLyoKKwkgKiBUaGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIG1hcHBpbmcgYXJyYXkKKwkgKi8KKwlpbnQgbWFwcGluZ19zaXplOworCS8qCisJICogVGhlIGNvbHVtbiBzdGF0ZSBiZWZvcmUgd2Ugb3V0cHV0IHRoZSBjdXJyZW50IGNvbW1pdC4KKwkgKi8KKwlzdHJ1Y3QgY29sdW1uICpjb2x1bW5zOworCS8qCisJICogVGhlIG5ldyBjb2x1bW4gc3RhdGUgYWZ0ZXIgd2Ugb3V0cHV0IHRoZSBjdXJyZW50IGNvbW1pdC4KKwkgKiBPbmx5IHZhbGlkIHdoZW4gc3RhdGUgaXMgR1JBUEhfQ09MTEFQU0lORy4KKwkgKi8KKwlzdHJ1Y3QgY29sdW1uICpuZXdfY29sdW1uczsKKwkvKgorCSAqIEFuIGFycmF5IHRoYXQgdHJhY2tzIHRoZSBjdXJyZW50IHN0YXRlIG9mIGVhY2gKKwkgKiBjaGFyYWN0ZXIgaW4gdGhlIG91dHB1dCBsaW5lIGR1cmluZyBzdGF0ZSBHUkFQSF9DT0xMQVBTSU5HLgorCSAqIEVhY2ggZW50cnkgaXMgLTEgaWYgdGhpcyBjaGFyYWN0ZXIgaXMgZW1wdHksIG9yIGEgbm9uLW5lZ2F0aXZlCisJICogaW50ZWdlciBpZiB0aGUgY2hhcmFjdGVyIGNvbnRhaW5zIGEgYnJhbmNoIGxpbmUuICBUaGUgdmFsdWUgb2YKKwkgKiB0aGUgaW50ZWdlciBpbmRpY2F0ZXMgdGhlIHRhcmdldCBwb3NpdGlvbiBmb3IgdGhpcyBicmFuY2ggbGluZS4KKwkgKiAoSS5lLiwgdGhpcyBhcnJheSBtYXBzIHRoZSBjdXJyZW50IGNvbHVtbiBwb3NpdGlvbnMgdG8gdGhlaXIKKwkgKiBkZXNpcmVkIHBvc2l0aW9ucy4pCisJICoKKwkgKiBUaGUgbWF4aW11bSBjYXBhY2l0eSBvZiB0aGlzIGFycmF5IGlzIGFsd2F5cworCSAqIHNpemVvZihpbnQpICogMiAqIGNvbHVtbl9jYXBhY2l0eS4KKwkgKi8KKwlpbnQgKm1hcHBpbmc7CisJLyoKKwkgKiBBIHRlbXBvcmFyeSBhcnJheSBmb3IgY29tcHV0aW5nIHRoZSBuZXh0IG1hcHBpbmcgc3RhdGUKKwkgKiB3aGlsZSB3ZSBhcmUgb3V0cHV0dGluZyBhIG1hcHBpbmcgbGluZS4gIFRoaXMgaXMgc3RvcmVkIGFzIHBhcnQKKwkgKiBvZiB0aGUgZ2l0X2dyYXBoIHNpbXBseSBzbyB3ZSBkb24ndCBoYXZlIHRvIGFsbG9jYXRlIGEgbmV3CisJICogdGVtcG9yYXJ5IGFycmF5IGVhY2ggdGltZSB3ZSBoYXZlIHRvIG91dHB1dCBhIGNvbGxhcHNpbmcgbGluZS4KKwkgKi8KKwlpbnQgKm5ld19tYXBwaW5nOworfTsKKworc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGhfaW5pdChzdHJ1Y3QgcmV2X2luZm8gKm9wdCkKK3sKKwlzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBnaXRfZ3JhcGgpKTsKKwlncmFwaC0+Y29tbWl0ID0gTlVMTDsKKwlncmFwaC0+cmV2cyA9IG9wdDsKKwlncmFwaC0+bnVtX3BhcmVudHMgPSAwOworCWdyYXBoLT5leHBhbnNpb25fcm93ID0gMDsKKwlncmFwaC0+c3RhdGUgPSBHUkFQSF9QQURESU5HOworCWdyYXBoLT5wcmV2X3N0YXRlID0gR1JBUEhfUEFERElORzsKKwlncmFwaC0+Y29tbWl0X2luZGV4ID0gMDsKKwlncmFwaC0+cHJldl9jb21taXRfaW5kZXggPSAwOworCWdyYXBoLT5udW1fY29sdW1ucyA9IDA7CisJZ3JhcGgtPm51bV9uZXdfY29sdW1ucyA9IDA7CisJZ3JhcGgtPm1hcHBpbmdfc2l6ZSA9IDA7CisKKwkvKgorCSAqIEFsbG9jYXRlIGEgcmVhc29uYWJseSBsYXJnZSBkZWZhdWx0IG51bWJlciBvZiBjb2x1bW5zCisJICogV2UnbGwgYXV0b21hdGljYWxseSBncm93IGNvbHVtbnMgbGF0ZXIgaWYgd2UgbmVlZCBtb3JlIHJvb20uCisJICovCisJZ3JhcGgtPmNvbHVtbl9jYXBhY2l0eSA9IDMwOworCWdyYXBoLT5jb2x1bW5zID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGNvbHVtbikgKgorCQkJCSBncmFwaC0+Y29sdW1uX2NhcGFjaXR5KTsKKwlncmFwaC0+bmV3X2NvbHVtbnMgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgY29sdW1uKSAqCisJCQkJICAgICBncmFwaC0+Y29sdW1uX2NhcGFjaXR5KTsKKwlncmFwaC0+bWFwcGluZyA9IHhtYWxsb2Moc2l6ZW9mKGludCkgKiAyICogZ3JhcGgtPmNvbHVtbl9jYXBhY2l0eSk7CisJZ3JhcGgtPm5ld19tYXBwaW5nID0geG1hbGxvYyhzaXplb2YoaW50KSAqIDIgKiBncmFwaC0+Y29sdW1uX2NhcGFjaXR5KTsKKworCXJldHVybiBncmFwaDsKK30KKwordm9pZCBncmFwaF9yZWxlYXNlKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoKQoreworCWZyZWUoZ3JhcGgtPmNvbHVtbnMpOworCWZyZWUoZ3JhcGgtPm5ld19jb2x1bW5zKTsKKwlmcmVlKGdyYXBoLT5tYXBwaW5nKTsKKwlmcmVlKGdyYXBoKTsKK30KKworc3RhdGljIHZvaWQgZ3JhcGhfdXBkYXRlX3N0YXRlKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBlbnVtIGdyYXBoX3N0YXRlIHMpCit7CisJZ3JhcGgtPnByZXZfc3RhdGUgPSBncmFwaC0+c3RhdGU7CisJZ3JhcGgtPnN0YXRlID0gczsKK30KKworc3RhdGljIHZvaWQgZ3JhcGhfZW5zdXJlX2NhcGFjaXR5KHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBpbnQgbnVtX2NvbHVtbnMpCit7CisJaWYgKGdyYXBoLT5jb2x1bW5fY2FwYWNpdHkgPj0gbnVtX2NvbHVtbnMpCisJCXJldHVybjsKKworCWRvIHsKKwkJZ3JhcGgtPmNvbHVtbl9jYXBhY2l0eSAqPSAyOworCX0gd2hpbGUgKGdyYXBoLT5jb2x1bW5fY2FwYWNpdHkgPCBudW1fY29sdW1ucyk7CisKKwlncmFwaC0+Y29sdW1ucyA9IHhyZWFsbG9jKGdyYXBoLT5jb2x1bW5zLAorCQkJCSAgc2l6ZW9mKHN0cnVjdCBjb2x1bW4pICoKKwkJCQkgIGdyYXBoLT5jb2x1bW5fY2FwYWNpdHkpOworCWdyYXBoLT5uZXdfY29sdW1ucyA9IHhyZWFsbG9jKGdyYXBoLT5uZXdfY29sdW1ucywKKwkJCQkgICAgICBzaXplb2Yoc3RydWN0IGNvbHVtbikgKgorCQkJCSAgICAgIGdyYXBoLT5jb2x1bW5fY2FwYWNpdHkpOworCWdyYXBoLT5tYXBwaW5nID0geHJlYWxsb2MoZ3JhcGgtPm1hcHBpbmcsCisJCQkJICBzaXplb2YoaW50KSAqIDIgKiBncmFwaC0+Y29sdW1uX2NhcGFjaXR5KTsKKwlncmFwaC0+bmV3X21hcHBpbmcgPSB4cmVhbGxvYyhncmFwaC0+bmV3X21hcHBpbmcsCisJCQkJICAgICAgc2l6ZW9mKGludCkgKiAyICogZ3JhcGgtPmNvbHVtbl9jYXBhY2l0eSk7Cit9CisKKy8qCisgKiBSZXR1cm5zIDEgaWYgdGhlIGNvbW1pdCB3aWxsIGJlIHByaW50ZWQgaW4gdGhlIGdyYXBoIG91dHB1dCwKKyAqIGFuZCAwIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCBncmFwaF9pc19pbnRlcmVzdGluZyhzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCS8qCisJICogSWYgcmV2cy0+Ym91bmRhcnkgaXMgc2V0LCBjb21taXRzIHdob3NlIGNoaWxkcmVuIGhhdmUKKwkgKiBiZWVuIHNob3duIGFyZSBhbHdheXMgaW50ZXJlc3RpbmcsIGV2ZW4gaWYgdGhleSBoYXZlIHRoZQorCSAqIFVOSU5URVJFU1RJTkcgb3IgVFJFRVNBTUUgZmxhZ3Mgc2V0LgorCSAqLworCWlmIChncmFwaC0+cmV2cyAmJiBncmFwaC0+cmV2cy0+Ym91bmRhcnkpIHsKKwkJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQ0hJTERfU0hPV04pCisJCQlyZXR1cm4gMTsKKwl9CisKKwkvKgorCSAqIFVuaW50ZXJlc3RpbmcgYW5kIHBydW5lZCBjb21taXRzIHdvbid0IGJlIHByaW50ZWQKKwkgKi8KKwlyZXR1cm4gKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgKFVOSU5URVJFU1RJTkcgfCBUUkVFU0FNRSkpID8gMCA6IDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKm5leHRfaW50ZXJlc3RpbmdfcGFyZW50KHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLAorCQkJCQkJICAgc3RydWN0IGNvbW1pdF9saXN0ICpvcmlnKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdDsKKworCS8qCisJICogSWYgcmV2cy0+Zmlyc3RfcGFyZW50X29ubHkgaXMgc2V0LCBvbmx5IHRoZSBmaXJzdAorCSAqIHBhcmVudCBpcyBpbnRlcmVzdGluZy4gIE5vbmUgb2YgdGhlIG90aGVycyBhcmUuCisJICovCisJaWYgKGdyYXBoLT5yZXZzLT5maXJzdF9wYXJlbnRfb25seSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIFJldHVybiB0aGUgbmV4dCBpbnRlcmVzdGluZyBjb21taXQgYWZ0ZXIgb3JpZworCSAqLworCWZvciAobGlzdCA9IG9yaWctPm5leHQ7IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KSB7CisJCWlmIChncmFwaF9pc19pbnRlcmVzdGluZyhncmFwaCwgbGlzdC0+aXRlbSkpCisJCQlyZXR1cm4gbGlzdDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXRfbGlzdCAqZmlyc3RfaW50ZXJlc3RpbmdfcGFyZW50KHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cyA9IGdyYXBoLT5jb21taXQtPnBhcmVudHM7CisKKwkvKgorCSAqIElmIHRoaXMgY29tbWl0IGhhcyBubyBwYXJlbnRzLCBpZ25vcmUgaXQKKwkgKi8KKwlpZiAoIXBhcmVudHMpCisJCXJldHVybiBOVUxMOworCisJLyoKKwkgKiBJZiB0aGUgZmlyc3QgcGFyZW50IGlzIGludGVyZXN0aW5nLCByZXR1cm4gaXQKKwkgKi8KKwlpZiAoZ3JhcGhfaXNfaW50ZXJlc3RpbmcoZ3JhcGgsIHBhcmVudHMtPml0ZW0pKQorCQlyZXR1cm4gcGFyZW50czsKKworCS8qCisJICogT3RoZXJ3aXNlLCBjYWxsIG5leHRfaW50ZXJlc3RpbmdfcGFyZW50KCkgdG8gZ2V0CisJICogdGhlIG5leHQgaW50ZXJlc3RpbmcgcGFyZW50CisJICovCisJcmV0dXJuIG5leHRfaW50ZXJlc3RpbmdfcGFyZW50KGdyYXBoLCBwYXJlbnRzKTsKK30KKworc3RhdGljIHZvaWQgZ3JhcGhfaW5zZXJ0X2ludG9fbmV3X2NvbHVtbnMoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsCisJCQkJCSAgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJCQkgIGludCAqbWFwcGluZ19pbmRleCkKK3sKKwlpbnQgaTsKKworCS8qCisJICogSWYgdGhlIGNvbW1pdCBpcyBhbHJlYWR5IGluIHRoZSBuZXdfY29sdW1ucyBsaXN0LCB3ZSBkb24ndCBuZWVkIHRvCisJICogYWRkIGl0LiAgSnVzdCB1cGRhdGUgdGhlIG1hcHBpbmcgY29ycmVjdGx5LgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBncmFwaC0+bnVtX25ld19jb2x1bW5zOyBpKyspIHsKKwkJaWYgKGdyYXBoLT5uZXdfY29sdW1uc1tpXS5jb21taXQgPT0gY29tbWl0KSB7CisJCQlncmFwaC0+bWFwcGluZ1sqbWFwcGluZ19pbmRleF0gPSBpOworCQkJKm1hcHBpbmdfaW5kZXggKz0gMjsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qCisJICogVGhpcyBjb21taXQgaXNuJ3QgYWxyZWFkeSBpbiBuZXdfY29sdW1ucy4gIEFkZCBpdC4KKwkgKi8KKwlncmFwaC0+bmV3X2NvbHVtbnNbZ3JhcGgtPm51bV9uZXdfY29sdW1uc10uY29tbWl0ID0gY29tbWl0OworCWdyYXBoLT5tYXBwaW5nWyptYXBwaW5nX2luZGV4XSA9IGdyYXBoLT5udW1fbmV3X2NvbHVtbnM7CisJKm1hcHBpbmdfaW5kZXggKz0gMjsKKwlncmFwaC0+bnVtX25ld19jb2x1bW5zKys7Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoX3VwZGF0ZV93aWR0aChzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwKKwkJCSAgICAgICBpbnQgaXNfY29tbWl0X2luX2V4aXN0aW5nX2NvbHVtbnMpCit7CisJLyoKKwkgKiBDb21wdXRlIHRoZSB3aWR0aCBuZWVkZWQgdG8gZGlzcGxheSB0aGUgZ3JhcGggZm9yIHRoaXMgY29tbWl0LgorCSAqIFRoaXMgaXMgdGhlIG1heGltdW0gd2lkdGggbmVlZGVkIGZvciBhbnkgcm93LiAgQWxsIG90aGVyIHJvd3MKKwkgKiB3aWxsIGJlIHBhZGRlZCB0byB0aGlzIHdpZHRoLgorCSAqCisJICogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIHdpZGVzdCByb3c6CisJICogQ291bnQgZWFjaCBleGlzdGluZyBjb2x1bW4gKGdyYXBoLT5udW1fY29sdW1ucyksIGFuZCBlYWNoIG5ldworCSAqIGNvbHVtbiBhZGRlZCBieSB0aGlzIGNvbW1pdC4KKwkgKi8KKwlpbnQgbWF4X2NvbHMgPSBncmFwaC0+bnVtX2NvbHVtbnMgKyBncmFwaC0+bnVtX3BhcmVudHM7CisKKwkvKgorCSAqIEV2ZW4gaWYgdGhlIGN1cnJlbnQgY29tbWl0IGhhcyBubyBwYXJlbnRzIHRvIGJlIHByaW50ZWQsIGl0CisJICogc3RpbGwgdGFrZXMgdXAgYSBjb2x1bW4gZm9yIGl0c2VsZi4KKwkgKi8KKwlpZiAoZ3JhcGgtPm51bV9wYXJlbnRzIDwgMSkKKwkJbWF4X2NvbHMrKzsKKworCS8qCisJICogV2UgYWRkZWQgYSBjb2x1bW4gZm9yIHRoZSB0aGUgY3VycmVudCBjb21taXQgYXMgcGFydCBvZgorCSAqIGdyYXBoLT5udW1fcGFyZW50cy4gIElmIHRoZSBjdXJyZW50IGNvbW1pdCB3YXMgYWxyZWFkeSBpbgorCSAqIGdyYXBoLT5jb2x1bW5zLCB0aGVuIHdlIGhhdmUgZG91YmxlIGNvdW50ZWQgaXQuCisJICovCisJaWYgKGlzX2NvbW1pdF9pbl9leGlzdGluZ19jb2x1bW5zKQorCQltYXhfY29scy0tOworCisJLyoKKwkgKiBFYWNoIGNvbHVtbiB0YWtlcyB1cCAyIHNwYWNlcworCSAqLworCWdyYXBoLT53aWR0aCA9IG1heF9jb2xzICogMjsKK30KKworc3RhdGljIHZvaWQgZ3JhcGhfdXBkYXRlX2NvbHVtbnMoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQ7CisJc3RydWN0IGNvbHVtbiAqdG1wX2NvbHVtbnM7CisJaW50IG1heF9uZXdfY29sdW1uczsKKwlpbnQgbWFwcGluZ19pZHg7CisJaW50IGksIHNlZW5fdGhpcywgaXNfY29tbWl0X2luX2NvbHVtbnM7CisKKwkvKgorCSAqIFN3YXAgZ3JhcGgtPmNvbHVtbnMgd2l0aCBncmFwaC0+bmV3X2NvbHVtbnMKKwkgKiBncmFwaC0+Y29sdW1ucyBjb250YWlucyB0aGUgc3RhdGUgZm9yIHRoZSBwcmV2aW91cyBjb21taXQsCisJICogYW5kIG5ld19jb2x1bW5zIG5vdyBjb250YWlucyB0aGUgc3RhdGUgZm9yIG91ciBjb21taXQuCisJICoKKwkgKiBXZSdsbCByZS11c2UgdGhlIG9sZCBjb2x1bW5zIGFycmF5IGFzIHN0b3JhZ2UgdG8gY29tcHV0ZSB0aGUgbmV3CisJICogY29sdW1ucyBsaXN0IGZvciB0aGUgY29tbWl0IGFmdGVyIHRoaXMgb25lLgorCSAqLworCXRtcF9jb2x1bW5zID0gZ3JhcGgtPmNvbHVtbnM7CisJZ3JhcGgtPmNvbHVtbnMgPSBncmFwaC0+bmV3X2NvbHVtbnM7CisJZ3JhcGgtPm51bV9jb2x1bW5zID0gZ3JhcGgtPm51bV9uZXdfY29sdW1uczsKKworCWdyYXBoLT5uZXdfY29sdW1ucyA9IHRtcF9jb2x1bW5zOworCWdyYXBoLT5udW1fbmV3X2NvbHVtbnMgPSAwOworCisJLyoKKwkgKiBOb3cgdXBkYXRlIG5ld19jb2x1bW5zIGFuZCBtYXBwaW5nIHdpdGggdGhlIGluZm9ybWF0aW9uIGZvciB0aGUKKwkgKiBjb21taXQgYWZ0ZXIgdGhpcyBvbmUuCisJICoKKwkgKiBGaXJzdCwgbWFrZSBzdXJlIHdlIGhhdmUgZW5vdWdoIHJvb20uICBBdCBtb3N0LCB0aGVyZSB3aWxsCisJICogYmUgZ3JhcGgtPm51bV9jb2x1bW5zICsgZ3JhcGgtPm51bV9wYXJlbnRzIGNvbHVtbnMgZm9yIHRoZSBuZXh0CisJICogY29tbWl0LgorCSAqLworCW1heF9uZXdfY29sdW1ucyA9IGdyYXBoLT5udW1fY29sdW1ucyArIGdyYXBoLT5udW1fcGFyZW50czsKKwlncmFwaF9lbnN1cmVfY2FwYWNpdHkoZ3JhcGgsIG1heF9uZXdfY29sdW1ucyk7CisKKwkvKgorCSAqIENsZWFyIG91dCBncmFwaC0+bWFwcGluZworCSAqLworCWdyYXBoLT5tYXBwaW5nX3NpemUgPSAyICogbWF4X25ld19jb2x1bW5zOworCWZvciAoaSA9IDA7IGkgPCBncmFwaC0+bWFwcGluZ19zaXplOyBpKyspCisJCWdyYXBoLT5tYXBwaW5nW2ldID0gLTE7CisKKwkvKgorCSAqIFBvcHVsYXRlIGdyYXBoLT5uZXdfY29sdW1ucyBhbmQgZ3JhcGgtPm1hcHBpbmcKKwkgKgorCSAqIFNvbWUgb2YgdGhlIHBhcmVudHMgb2YgdGhpcyBjb21taXQgbWF5IGFscmVhZHkgYmUgaW4KKwkgKiBncmFwaC0+Y29sdW1ucy4gIElmIHNvLCBncmFwaC0+bmV3X2NvbHVtbnMgc2hvdWxkIG9ubHkgY29udGFpbiBhCisJICogc2luZ2xlIGVudHJ5IGZvciBlYWNoIHN1Y2ggY29tbWl0LiAgZ3JhcGgtPm1hcHBpbmcgc2hvdWxkCisJICogY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dCB3aGVyZSBlYWNoIGN1cnJlbnQgYnJhbmNoIGxpbmUgaXMKKwkgKiBzdXBwb3NlZCB0byBlbmQgdXAgYWZ0ZXIgdGhlIGNvbGxhcHNpbmcgaXMgcGVyZm9ybWVkLgorCSAqLworCXNlZW5fdGhpcyA9IDA7CisJbWFwcGluZ19pZHggPSAwOworCWlzX2NvbW1pdF9pbl9jb2x1bW5zID0gMTsKKwlmb3IgKGkgPSAwOyBpIDw9IGdyYXBoLT5udW1fY29sdW1uczsgaSsrKSB7CisJCXN0cnVjdCBjb21taXQgKmNvbF9jb21taXQ7CisJCWlmIChpID09IGdyYXBoLT5udW1fY29sdW1ucykgeworCQkJaWYgKHNlZW5fdGhpcykKKwkJCQlicmVhazsKKwkJCWlzX2NvbW1pdF9pbl9jb2x1bW5zID0gMDsKKwkJCWNvbF9jb21taXQgPSBncmFwaC0+Y29tbWl0OworCQl9IGVsc2UgeworCQkJY29sX2NvbW1pdCA9IGdyYXBoLT5jb2x1bW5zW2ldLmNvbW1pdDsKKwkJfQorCisJCWlmIChjb2xfY29tbWl0ID09IGdyYXBoLT5jb21taXQpIHsKKwkJCWludCBvbGRfbWFwcGluZ19pZHggPSBtYXBwaW5nX2lkeDsKKwkJCXNlZW5fdGhpcyA9IDE7CisJCQlncmFwaC0+Y29tbWl0X2luZGV4ID0gaTsKKwkJCWZvciAocGFyZW50ID0gZmlyc3RfaW50ZXJlc3RpbmdfcGFyZW50KGdyYXBoKTsKKwkJCSAgICAgcGFyZW50OworCQkJICAgICBwYXJlbnQgPSBuZXh0X2ludGVyZXN0aW5nX3BhcmVudChncmFwaCwgcGFyZW50KSkgeworCQkJCWdyYXBoX2luc2VydF9pbnRvX25ld19jb2x1bW5zKGdyYXBoLAorCQkJCQkJCSAgICAgIHBhcmVudC0+aXRlbSwKKwkJCQkJCQkgICAgICAmbWFwcGluZ19pZHgpOworCQkJfQorCQkJLyoKKwkJCSAqIFdlIGFsd2F5cyBuZWVkIHRvIGluY3JlbWVudCBtYXBwaW5nX2lkeCBieSBhdAorCQkJICogbGVhc3QgMiwgZXZlbiBpZiBpdCBoYXMgbm8gaW50ZXJlc3RpbmcgcGFyZW50cy4KKwkJCSAqIFRoZSBjdXJyZW50IGNvbW1pdCBhbHdheXMgdGFrZXMgdXAgYXQgbGVhc3QgMgorCQkJICogc3BhY2VzLgorCQkJICovCisJCQlpZiAobWFwcGluZ19pZHggPT0gb2xkX21hcHBpbmdfaWR4KQorCQkJCW1hcHBpbmdfaWR4ICs9IDI7CisJCX0gZWxzZSB7CisJCQlncmFwaF9pbnNlcnRfaW50b19uZXdfY29sdW1ucyhncmFwaCwgY29sX2NvbW1pdCwKKwkJCQkJCSAgICAgICZtYXBwaW5nX2lkeCk7CisJCX0KKwl9CisKKwkvKgorCSAqIFNocmluayBtYXBwaW5nX3NpemUgdG8gYmUgdGhlIG1pbmltdW0gbmVjZXNzYXJ5CisJICovCisJd2hpbGUgKGdyYXBoLT5tYXBwaW5nX3NpemUgPiAxICYmCisJICAgICAgIGdyYXBoLT5tYXBwaW5nW2dyYXBoLT5tYXBwaW5nX3NpemUgLSAxXSA8IDApCisJCWdyYXBoLT5tYXBwaW5nX3NpemUtLTsKKworCS8qCisJICogQ29tcHV0ZSBncmFwaC0+d2lkdGggZm9yIHRoaXMgY29tbWl0CisJICovCisJZ3JhcGhfdXBkYXRlX3dpZHRoKGdyYXBoLCBpc19jb21taXRfaW5fY29sdW1ucyk7Cit9CisKK3ZvaWQgZ3JhcGhfdXBkYXRlKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQ7CisKKwkvKgorCSAqIFNldCB0aGUgbmV3IGNvbW1pdAorCSAqLworCWdyYXBoLT5jb21taXQgPSBjb21taXQ7CisKKwkvKgorCSAqIENvdW50IGhvdyBtYW55IGludGVyZXN0aW5nIHBhcmVudHMgdGhpcyBjb21taXQgaGFzCisJICovCisJZ3JhcGgtPm51bV9wYXJlbnRzID0gMDsKKwlmb3IgKHBhcmVudCA9IGZpcnN0X2ludGVyZXN0aW5nX3BhcmVudChncmFwaCk7CisJICAgICBwYXJlbnQ7CisJICAgICBwYXJlbnQgPSBuZXh0X2ludGVyZXN0aW5nX3BhcmVudChncmFwaCwgcGFyZW50KSkKKwl7CisJCWdyYXBoLT5udW1fcGFyZW50cysrOworCX0KKworCS8qCisJICogU3RvcmUgdGhlIG9sZCBjb21taXRfaW5kZXggaW4gcHJldl9jb21taXRfaW5kZXguCisJICogZ3JhcGhfdXBkYXRlX2NvbHVtbnMoKSB3aWxsIHVwZGF0ZSBncmFwaC0+Y29tbWl0X2luZGV4IGZvciB0aGlzCisJICogY29tbWl0LgorCSAqLworCWdyYXBoLT5wcmV2X2NvbW1pdF9pbmRleCA9IGdyYXBoLT5jb21taXRfaW5kZXg7CisKKwkvKgorCSAqIENhbGwgZ3JhcGhfdXBkYXRlX2NvbHVtbnMoKSB0byB1cGRhdGUKKwkgKiBjb2x1bW5zLCBuZXdfY29sdW1ucywgYW5kIG1hcHBpbmcuCisJICovCisJZ3JhcGhfdXBkYXRlX2NvbHVtbnMoZ3JhcGgpOworCisJZ3JhcGgtPmV4cGFuc2lvbl9yb3cgPSAwOworCisJLyoKKwkgKiBVcGRhdGUgZ3JhcGgtPnN0YXRlLgorCSAqIE5vdGUgdGhhdCB3ZSBkb24ndCBjYWxsIGdyYXBoX3VwZGF0ZV9zdGF0ZSgpIGhlcmUsIHNpbmNlCisJICogd2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgZ3JhcGgtPnByZXZfc3RhdGUuICBObyBsaW5lIGZvcgorCSAqIGdyYXBoLT5zdGF0ZSB3YXMgZXZlciBwcmludGVkLgorCSAqCisJICogSWYgdGhlIHByZXZpb3VzIGNvbW1pdCBkaWRuJ3QgZ2V0IHRvIHRoZSBHUkFQSF9QQURESU5HIHN0YXRlLAorCSAqIGl0IG5ldmVyIGZpbmlzaGVkIGl0cyBvdXRwdXQuICBHb3RvIEdSQVBIX1NLSVAsIHRvIHByaW50IG91dAorCSAqIGEgbGluZSB0byBpbmRpY2F0ZSB0aGF0IHBvcnRpb24gb2YgdGhlIGdyYXBoIGlzIG1pc3NpbmcuCisJICoKKwkgKiBJZiB0aGVyZSBhcmUgMyBvciBtb3JlIHBhcmVudHMsIHdlIG1heSBuZWVkIHRvIHByaW50IGV4dHJhIHJvd3MKKwkgKiBiZWZvcmUgdGhlIGNvbW1pdCwgdG8gZXhwYW5kIHRoZSBicmFuY2ggbGluZXMgYXJvdW5kIGl0IGFuZCBtYWtlCisJICogcm9vbSBmb3IgaXQuICBXZSBuZWVkIHRvIGRvIHRoaXMgb25seSBpZiB0aGVyZSBpcyBhIGJyYW5jaCByb3cKKwkgKiAob3IgbW9yZSkgdG8gdGhlIHJpZ2h0IG9mIHRoaXMgY29tbWl0LgorCSAqCisJICogSWYgdGhlcmUgYXJlIGxlc3MgdGhhbiAzIHBhcmVudHMsIHdlIGNhbiBpbW1lZGlhdGVseSBwcmludCB0aGUKKwkgKiBjb21taXQgbGluZS4KKwkgKi8KKwlpZiAoZ3JhcGgtPnN0YXRlICE9IEdSQVBIX1BBRERJTkcpCisJCWdyYXBoLT5zdGF0ZSA9IEdSQVBIX1NLSVA7CisJZWxzZSBpZiAoZ3JhcGgtPm51bV9wYXJlbnRzID49IDMgJiYKKwkJIGdyYXBoLT5jb21taXRfaW5kZXggPCAoZ3JhcGgtPm51bV9jb2x1bW5zIC0gMSkpCisJCWdyYXBoLT5zdGF0ZSA9IEdSQVBIX1BSRV9DT01NSVQ7CisJZWxzZQorCQlncmFwaC0+c3RhdGUgPSBHUkFQSF9DT01NSVQ7Cit9CisKK3N0YXRpYyBpbnQgZ3JhcGhfaXNfbWFwcGluZ19jb3JyZWN0KHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoKQoreworCWludCBpOworCisJLyoKKwkgKiBUaGUgbWFwcGluZyBpcyB1cCB0byBkYXRlIGlmIGVhY2ggZW50cnkgaXMgYXQgaXRzIHRhcmdldCwKKwkgKiBvciBpcyAxIGdyZWF0ZXIgdGhhbiBpdHMgdGFyZ2V0LgorCSAqIChJZiBpdCBpcyAxIGdyZWF0ZXIgdGhhbiB0aGUgdGFyZ2V0LCAnLycgd2lsbCBiZSBwcmludGVkLCBzbyBpdAorCSAqIHdpbGwgbG9vayBjb3JyZWN0IG9uIHRoZSBuZXh0IHJvdy4pCisJICovCisJZm9yIChpID0gMDsgaSA8IGdyYXBoLT5tYXBwaW5nX3NpemU7IGkrKykgeworCQlpbnQgdGFyZ2V0ID0gZ3JhcGgtPm1hcHBpbmdbaV07CisJCWlmICh0YXJnZXQgPCAwKQorCQkJY29udGludWU7CisJCWlmICh0YXJnZXQgPT0gKGkgLyAyKSkKKwkJCWNvbnRpbnVlOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgZ3JhcGhfcGFkX2hvcml6b250YWxseShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IHN0cmJ1ZiAqc2IpCit7CisJLyoKKwkgKiBBZGQgYWRkaXRpb25hbCBzcGFjZXMgdG8gdGhlIGVuZCBvZiB0aGUgc3RyYnVmLCBzbyB0aGF0IGFsbAorCSAqIGxpbmVzIGZvciBhIHBhcnRpY3VsYXIgY29tbWl0IGhhdmUgdGhlIHNhbWUgd2lkdGguCisJICoKKwkgKiBUaGlzIHdheSwgZmllbGRzIHByaW50ZWQgdG8gdGhlIHJpZ2h0IG9mIHRoZSBncmFwaCB3aWxsIHJlbWFpbgorCSAqIGFsaWduZWQgZm9yIHRoZSBlbnRpcmUgY29tbWl0LgorCSAqLworCWludCBleHRyYTsKKwlpZiAoc2ItPmxlbiA+PSBncmFwaC0+d2lkdGgpCisJCXJldHVybjsKKworCWV4dHJhID0gZ3JhcGgtPndpZHRoIC0gc2ItPmxlbjsKKwlzdHJidWZfYWRkZihzYiwgIiUqcyIsIChpbnQpIGV4dHJhLCAiIik7Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoX291dHB1dF9wYWRkaW5nX2xpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsCisJCQkJICAgICAgc3RydWN0IHN0cmJ1ZiAqc2IpCit7CisJaW50IGk7CisKKwkvKgorCSAqIFdlIGNvdWxkIGNvbmNlaXZhYmxlIGJlIGNhbGxlZCB3aXRoIGEgTlVMTCBjb21taXQKKwkgKiBpZiBvdXIgY2FsbGVyIGhhcyBhIGJ1ZywgYW5kIGludm9rZXMgZ3JhcGhfbmV4dF9saW5lKCkKKwkgKiBpbW1lZGlhdGVseSBhZnRlciBncmFwaF9pbml0KCksIHdpdGhvdXQgZmlyc3QgY2FsbGluZworCSAqIGdyYXBoX3VwZGF0ZSgpLiAgUmV0dXJuIHdpdGhvdXQgb3V0cHV0dGluZyBhbnl0aGluZyBpbiB0aGlzCisJICogY2FzZS4KKwkgKi8KKwlpZiAoIWdyYXBoLT5jb21taXQpCisJCXJldHVybjsKKworCS8qCisJICogT3V0cHV0IGEgcGFkZGluZyByb3csIHRoYXQgbGVhdmVzIGFsbCBicmFuY2ggbGluZXMgdW5jaGFuZ2VkCisJICovCisJZm9yIChpID0gMDsgaSA8IGdyYXBoLT5udW1fbmV3X2NvbHVtbnM7IGkrKykgeworCQlzdHJidWZfYWRkc3RyKHNiLCAifCAiKTsKKwl9CisKKwlncmFwaF9wYWRfaG9yaXpvbnRhbGx5KGdyYXBoLCBzYik7Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoX291dHB1dF9za2lwX2xpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBzdHJidWYgKnNiKQoreworCS8qCisJICogT3V0cHV0IGFuIGVsbGlwc2lzIHRvIGluZGljYXRlIHRoYXQgYSBwb3J0aW9uCisJICogb2YgdGhlIGdyYXBoIGlzIG1pc3NpbmcuCisJICovCisJc3RyYnVmX2FkZHN0cihzYiwgIi4uLiIpOworCWdyYXBoX3BhZF9ob3Jpem9udGFsbHkoZ3JhcGgsIHNiKTsKKworCWlmIChncmFwaC0+bnVtX3BhcmVudHMgPj0gMyAmJgorCSAgICBncmFwaC0+Y29tbWl0X2luZGV4IDwgKGdyYXBoLT5udW1fY29sdW1ucyAtIDEpKQorCQlncmFwaF91cGRhdGVfc3RhdGUoZ3JhcGgsIEdSQVBIX1BSRV9DT01NSVQpOworCWVsc2UKKwkJZ3JhcGhfdXBkYXRlX3N0YXRlKGdyYXBoLCBHUkFQSF9DT01NSVQpOworfQorCitzdGF0aWMgdm9pZCBncmFwaF9vdXRwdXRfcHJlX2NvbW1pdF9saW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLAorCQkJCQkgc3RydWN0IHN0cmJ1ZiAqc2IpCit7CisJaW50IG51bV9leHBhbnNpb25fcm93czsKKwlpbnQgaSwgc2Vlbl90aGlzOworCisJLyoKKwkgKiBUaGlzIGZ1bmN0aW9uIGZvcm1hdHMgYSByb3cgdGhhdCBpbmNyZWFzZXMgdGhlIHNwYWNlIGFyb3VuZCBhIGNvbW1pdAorCSAqIHdpdGggbXVsdGlwbGUgcGFyZW50cywgdG8gbWFrZSByb29tIGZvciBpdC4gIEl0IHNob3VsZCBvbmx5IGJlCisJICogY2FsbGVkIHdoZW4gdGhlcmUgYXJlIDMgb3IgbW9yZSBwYXJlbnRzLgorCSAqCisJICogV2UgbmVlZCAyIGV4dHJhIHJvd3MgZm9yIGV2ZXJ5IHBhcmVudCBvdmVyIDIuCisJICovCisJYXNzZXJ0KGdyYXBoLT5udW1fcGFyZW50cyA+PSAzKTsKKwludW1fZXhwYW5zaW9uX3Jvd3MgPSAoZ3JhcGgtPm51bV9wYXJlbnRzIC0gMikgKiAyOworCisJLyoKKwkgKiBncmFwaC0+ZXhwYW5zaW9uX3JvdyB0cmFja3MgdGhlIGN1cnJlbnQgZXhwYW5zaW9uIHJvdyB3ZSBhcmUgb24uCisJICogSXQgc2hvdWxkIGJlIGluIHRoZSByYW5nZSBbMCwgbnVtX2V4cGFuc2lvbl9yb3dzIC0gMV0KKwkgKi8KKwlhc3NlcnQoMCA8PSBncmFwaC0+ZXhwYW5zaW9uX3JvdyAmJgorCSAgICAgICBncmFwaC0+ZXhwYW5zaW9uX3JvdyA8IG51bV9leHBhbnNpb25fcm93cyk7CisKKwkvKgorCSAqIE91dHB1dCB0aGUgcm93CisJICovCisJc2Vlbl90aGlzID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgZ3JhcGgtPm51bV9jb2x1bW5zOyBpKyspIHsKKwkJc3RydWN0IGNvbHVtbiAqY29sID0gJmdyYXBoLT5jb2x1bW5zW2ldOworCQlpZiAoY29sLT5jb21taXQgPT0gZ3JhcGgtPmNvbW1pdCkgeworCQkJc2Vlbl90aGlzID0gMTsKKwkJCXN0cmJ1Zl9hZGRmKHNiLCAifCAlKnMiLCBncmFwaC0+ZXhwYW5zaW9uX3JvdywgIiIpOworCQl9IGVsc2UgaWYgKHNlZW5fdGhpcyAmJiAoZ3JhcGgtPmV4cGFuc2lvbl9yb3cgPT0gMCkpIHsKKwkJCS8qCisJCQkgKiBUaGlzIGlzIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBwcmUtY29tbWl0IG91dHB1dC4KKwkJCSAqIElmIHRoZSBwcmV2aW91cyBjb21taXQgd2FzIGEgbWVyZ2UgY29tbWl0IGFuZAorCQkJICogZW5kZWQgaW4gdGhlIEdSQVBIX1BPU1RfTUVSR0Ugc3RhdGUsIGFsbCBicmFuY2gKKwkJCSAqIGxpbmVzIGFmdGVyIGdyYXBoLT5wcmV2X2NvbW1pdF9pbmRleCB3ZXJlCisJCQkgKiBwcmludGVkIGFzICJcIiBvbiB0aGUgcHJldmlvdXMgbGluZS4gIENvbnRpbnVlCisJCQkgKiB0byBwcmludCB0aGVtIGFzICJcIiBvbiB0aGlzIGxpbmUuICBPdGhlcndpc2UsCisJCQkgKiBwcmludCB0aGUgYnJhbmNoIGxpbmVzIGFzICJ8Ii4KKwkJCSAqLworCQkJaWYgKGdyYXBoLT5wcmV2X3N0YXRlID09IEdSQVBIX1BPU1RfTUVSR0UgJiYKKwkJCSAgICBncmFwaC0+cHJldl9jb21taXRfaW5kZXggPCBpKQorCQkJCXN0cmJ1Zl9hZGRzdHIoc2IsICJcXCAiKTsKKwkJCWVsc2UKKwkJCQlzdHJidWZfYWRkc3RyKHNiLCAifCAiKTsKKwkJfSBlbHNlIGlmIChzZWVuX3RoaXMgJiYgKGdyYXBoLT5leHBhbnNpb25fcm93ID4gMCkpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsICJcXCAiKTsKKwkJfSBlbHNlIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsICJ8ICIpOworCQl9CisJfQorCisJZ3JhcGhfcGFkX2hvcml6b250YWxseShncmFwaCwgc2IpOworCisJLyoKKwkgKiBJbmNyZW1lbnQgZ3JhcGgtPmV4cGFuc2lvbl9yb3csCisJICogYW5kIG1vdmUgdG8gc3RhdGUgR1JBUEhfQ09NTUlUIGlmIG5lY2Vzc2FyeQorCSAqLworCWdyYXBoLT5leHBhbnNpb25fcm93Kys7CisJaWYgKGdyYXBoLT5leHBhbnNpb25fcm93ID49IG51bV9leHBhbnNpb25fcm93cykKKwkJZ3JhcGhfdXBkYXRlX3N0YXRlKGdyYXBoLCBHUkFQSF9DT01NSVQpOworfQorCitzdGF0aWMgdm9pZCBncmFwaF9vdXRwdXRfY29tbWl0X2NoYXIoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBzdHJidWYgKnNiKQoreworCS8qCisJICogRm9yIGJvdW5kYXJ5IGNvbW1pdHMsIHByaW50ICdvJworCSAqIChXZSBzaG91bGQgb25seSBzZWUgYm91bmRhcnkgY29tbWl0cyB3aGVuIHJldnMtPmJvdW5kYXJ5IGlzIHNldC4pCisJICovCisJaWYgKGdyYXBoLT5jb21taXQtPm9iamVjdC5mbGFncyAmIEJPVU5EQVJZKSB7CisJCWFzc2VydChncmFwaC0+cmV2cy0+Ym91bmRhcnkpOworCQlzdHJidWZfYWRkY2goc2IsICdvJyk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIElmIHJldnMtPmxlZnRfcmlnaHQgaXMgc2V0LCBwcmludCAnPCcgZm9yIGNvbW1pdHMgdGhhdAorCSAqIGNvbWUgZnJvbSB0aGUgbGVmdCBzaWRlLCBhbmQgJz4nIGZvciBjb21taXRzIGZyb20gdGhlIHJpZ2h0CisJICogc2lkZS4KKwkgKi8KKwlpZiAoZ3JhcGgtPnJldnMgJiYgZ3JhcGgtPnJldnMtPmxlZnRfcmlnaHQpIHsKKwkJaWYgKGdyYXBoLT5jb21taXQtPm9iamVjdC5mbGFncyAmIFNZTU1FVFJJQ19MRUZUKQorCQkJc3RyYnVmX2FkZGNoKHNiLCAnPCcpOworCQllbHNlCisJCQlzdHJidWZfYWRkY2goc2IsICc+Jyk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFByaW50ICcqJyBpbiBhbGwgb3RoZXIgY2FzZXMKKwkgKi8KKwlzdHJidWZfYWRkY2goc2IsICcqJyk7Cit9CisKK3ZvaWQgZ3JhcGhfb3V0cHV0X2NvbW1pdF9saW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlpbnQgc2Vlbl90aGlzID0gMDsKKwlpbnQgaSwgajsKKworCS8qCisJICogT3V0cHV0IHRoZSByb3cgY29udGFpbmluZyB0aGlzIGNvbW1pdAorCSAqIEl0ZXJhdGUgdXAgdG8gYW5kIGluY2x1ZGluZyBncmFwaC0+bnVtX2NvbHVtbnMsCisJICogc2luY2UgdGhlIGN1cnJlbnQgY29tbWl0IG1heSBub3QgYmUgaW4gYW55IG9mIHRoZSBleGlzdGluZworCSAqIGNvbHVtbnMuICAoVGhpcyBoYXBwZW5zIHdoZW4gdGhlIGN1cnJlbnQgY29tbWl0IGRvZXNuJ3QgaGF2ZSBhbnkKKwkgKiBjaGlsZHJlbiB0aGF0IHdlIGhhdmUgYWxyZWFkeSBwcm9jZXNzZWQuKQorCSAqLworCXNlZW5fdGhpcyA9IDA7CisJZm9yIChpID0gMDsgaSA8PSBncmFwaC0+bnVtX2NvbHVtbnM7IGkrKykgeworCQlzdHJ1Y3QgY29tbWl0ICpjb2xfY29tbWl0OworCQlpZiAoaSA9PSBncmFwaC0+bnVtX2NvbHVtbnMpIHsKKwkJCWlmIChzZWVuX3RoaXMpCisJCQkJYnJlYWs7CisJCQljb2xfY29tbWl0ID0gZ3JhcGgtPmNvbW1pdDsKKwkJfSBlbHNlIHsKKwkJCWNvbF9jb21taXQgPSBncmFwaC0+Y29sdW1uc1tpXS5jb21taXQ7CisJCX0KKworCQlpZiAoY29sX2NvbW1pdCA9PSBncmFwaC0+Y29tbWl0KSB7CisJCQlzZWVuX3RoaXMgPSAxOworCQkJZ3JhcGhfb3V0cHV0X2NvbW1pdF9jaGFyKGdyYXBoLCBzYik7CisKKwkJCWlmIChncmFwaC0+bnVtX3BhcmVudHMgPCAzKQorCQkJCXN0cmJ1Zl9hZGRjaChzYiwgJyAnKTsKKwkJCWVsc2UgeworCQkJCWludCBudW1fZGFzaGVzID0KKwkJCQkJKChncmFwaC0+bnVtX3BhcmVudHMgLSAyKSAqIDIpIC0gMTsKKwkJCQlmb3IgKGogPSAwOyBqIDwgbnVtX2Rhc2hlczsgaisrKQorCQkJCQlzdHJidWZfYWRkY2goc2IsICctJyk7CisJCQkJc3RyYnVmX2FkZHN0cihzYiwgIi4gIik7CisJCQl9CisJCX0gZWxzZSBpZiAoc2Vlbl90aGlzICYmIChncmFwaC0+bnVtX3BhcmVudHMgPiAyKSkgeworCQkJc3RyYnVmX2FkZHN0cihzYiwgIlxcICIpOworCQl9IGVsc2UgaWYgKHNlZW5fdGhpcyAmJiAoZ3JhcGgtPm51bV9wYXJlbnRzID09IDIpKSB7CisJCQkvKgorCQkJICogVGhpcyBpcyBhIDItd2F5IG1lcmdlIGNvbW1pdC4KKwkJCSAqIFRoZXJlIGlzIG5vIEdSQVBIX1BSRV9DT01NSVQgc3RhZ2UgZm9yIDItd2F5CisJCQkgKiBtZXJnZXMsIHNvIHRoaXMgaXMgdGhlIGZpcnN0IGxpbmUgb2Ygb3V0cHV0CisJCQkgKiBmb3IgdGhpcyBjb21taXQuICBDaGVjayB0byBzZWUgd2hhdCB0aGUgcHJldmlvdXMKKwkJCSAqIGxpbmUgb2Ygb3V0cHV0IHdhcy4KKwkJCSAqCisJCQkgKiBJZiBpdCB3YXMgR1JBUEhfUE9TVF9NRVJHRSwgdGhlIGJyYW5jaCBsaW5lCisJCQkgKiBjb21pbmcgaW50byB0aGlzIGNvbW1pdCBtYXkgaGF2ZSBiZWVuICdcJywKKwkJCSAqIGFuZCBub3QgJ3wnIG9yICcvJy4gIElmIHNvLCBvdXRwdXQgdGhlIGJyYW5jaAorCQkJICogbGluZSBhcyAnXCcgb24gdGhpcyBsaW5lLCBpbnN0ZWFkIG9mICd8Jy4gIFRoaXMKKwkJCSAqIG1ha2VzIHRoZSBvdXRwdXQgbG9vayBuaWNlci4KKwkJCSAqLworCQkJaWYgKGdyYXBoLT5wcmV2X3N0YXRlID09IEdSQVBIX1BPU1RfTUVSR0UgJiYKKwkJCSAgICBncmFwaC0+cHJldl9jb21taXRfaW5kZXggPCBpKQorCQkJCXN0cmJ1Zl9hZGRzdHIoc2IsICJcXCAiKTsKKwkJCWVsc2UKKwkJCQlzdHJidWZfYWRkc3RyKHNiLCAifCAiKTsKKwkJfSBlbHNlIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsICJ8ICIpOworCQl9CisJfQorCisJZ3JhcGhfcGFkX2hvcml6b250YWxseShncmFwaCwgc2IpOworCisJLyoKKwkgKiBVcGRhdGUgZ3JhcGgtPnN0YXRlCisJICovCisJaWYgKGdyYXBoLT5udW1fcGFyZW50cyA+IDEpCisJCWdyYXBoX3VwZGF0ZV9zdGF0ZShncmFwaCwgR1JBUEhfUE9TVF9NRVJHRSk7CisJZWxzZSBpZiAoZ3JhcGhfaXNfbWFwcGluZ19jb3JyZWN0KGdyYXBoKSkKKwkJZ3JhcGhfdXBkYXRlX3N0YXRlKGdyYXBoLCBHUkFQSF9QQURESU5HKTsKKwllbHNlCisJCWdyYXBoX3VwZGF0ZV9zdGF0ZShncmFwaCwgR1JBUEhfQ09MTEFQU0lORyk7Cit9CisKK3ZvaWQgZ3JhcGhfb3V0cHV0X3Bvc3RfbWVyZ2VfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IHN0cmJ1ZiAqc2IpCit7CisJaW50IHNlZW5fdGhpcyA9IDA7CisJaW50IGksIGo7CisKKwkvKgorCSAqIE91dHB1dCB0aGUgcG9zdC1tZXJnZSByb3cKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDw9IGdyYXBoLT5udW1fY29sdW1uczsgaSsrKSB7CisJCXN0cnVjdCBjb21taXQgKmNvbF9jb21taXQ7CisJCWlmIChpID09IGdyYXBoLT5udW1fY29sdW1ucykgeworCQkJaWYgKHNlZW5fdGhpcykKKwkJCQlicmVhazsKKwkJCWNvbF9jb21taXQgPSBncmFwaC0+Y29tbWl0OworCQl9IGVsc2UgeworCQkJY29sX2NvbW1pdCA9IGdyYXBoLT5jb2x1bW5zW2ldLmNvbW1pdDsKKwkJfQorCisJCWlmIChjb2xfY29tbWl0ID09IGdyYXBoLT5jb21taXQpIHsKKwkJCXNlZW5fdGhpcyA9IDE7CisJCQlzdHJidWZfYWRkY2goc2IsICd8Jyk7CisJCQlmb3IgKGogPSAwOyBqIDwgZ3JhcGgtPm51bV9wYXJlbnRzIC0gMTsgaisrKQorCQkJCXN0cmJ1Zl9hZGRzdHIoc2IsICJcXCAiKTsKKwkJfSBlbHNlIGlmIChzZWVuX3RoaXMpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsICJcXCAiKTsKKwkJfSBlbHNlIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsICJ8ICIpOworCQl9CisJfQorCisJZ3JhcGhfcGFkX2hvcml6b250YWxseShncmFwaCwgc2IpOworCisJLyoKKwkgKiBVcGRhdGUgZ3JhcGgtPnN0YXRlCisJICovCisJaWYgKGdyYXBoX2lzX21hcHBpbmdfY29ycmVjdChncmFwaCkpCisJCWdyYXBoX3VwZGF0ZV9zdGF0ZShncmFwaCwgR1JBUEhfUEFERElORyk7CisJZWxzZQorCQlncmFwaF91cGRhdGVfc3RhdGUoZ3JhcGgsIEdSQVBIX0NPTExBUFNJTkcpOworfQorCit2b2lkIGdyYXBoX291dHB1dF9jb2xsYXBzaW5nX2xpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBzdHJidWYgKnNiKQoreworCWludCBpOworCWludCAqdG1wX21hcHBpbmc7CisKKwkvKgorCSAqIENsZWFyIG91dCB0aGUgbmV3X21hcHBpbmcgYXJyYXkKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZ3JhcGgtPm1hcHBpbmdfc2l6ZTsgaSsrKQorCQlncmFwaC0+bmV3X21hcHBpbmdbaV0gPSAtMTsKKworCWZvciAoaSA9IDA7IGkgPCBncmFwaC0+bWFwcGluZ19zaXplOyBpKyspIHsKKwkJaW50IHRhcmdldCA9IGdyYXBoLT5tYXBwaW5nW2ldOworCQlpZiAodGFyZ2V0IDwgMCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIFNpbmNlIHVwZGF0ZV9jb2x1bW5zKCkgYWx3YXlzIGluc2VydHMgdGhlIGxlZnRtb3N0CisJCSAqIGNvbHVtbiBmaXJzdCwgZWFjaCBicmFuY2gncyB0YXJnZXQgbG9jYXRpb24gc2hvdWxkCisJCSAqIGFsd2F5cyBiZSBlaXRoZXIgaXRzIGN1cnJlbnQgbG9jYXRpb24gb3IgdG8gdGhlIGxlZnQgb2YKKwkJICogaXRzIGN1cnJlbnQgbG9jYXRpb24uCisJCSAqCisJCSAqIFdlIG5ldmVyIGhhdmUgdG8gbW92ZSBicmFuY2hlcyB0byB0aGUgcmlnaHQuICBUaGlzIG1ha2VzCisJCSAqIHRoZSBncmFwaCBtdWNoIG1vcmUgbGVnaWJsZSwgc2luY2Ugd2hlbmV2ZXIgYnJhbmNoZXMKKwkJICogY3Jvc3MsIG9ubHkgb25lIGlzIG1vdmluZyBkaXJlY3Rpb25zLgorCQkgKi8KKwkJYXNzZXJ0KHRhcmdldCAqIDIgPD0gaSk7CisKKwkJaWYgKHRhcmdldCAqIDIgPT0gaSkgeworCQkJLyoKKwkJCSAqIFRoaXMgY29sdW1uIGlzIGFscmVhZHkgaW4gdGhlCisJCQkgKiBjb3JyZWN0IHBsYWNlCisJCQkgKi8KKwkJCWFzc2VydChncmFwaC0+bmV3X21hcHBpbmdbaV0gPT0gLTEpOworCQkJZ3JhcGgtPm5ld19tYXBwaW5nW2ldID0gdGFyZ2V0OworCQl9IGVsc2UgaWYgKGdyYXBoLT5uZXdfbWFwcGluZ1tpIC0gMV0gPCAwKSB7CisJCQkvKgorCQkJICogTm90aGluZyBpcyB0byB0aGUgbGVmdC4KKwkJCSAqIE1vdmUgdG8gdGhlIGxlZnQgYnkgb25lCisJCQkgKi8KKwkJCWdyYXBoLT5uZXdfbWFwcGluZ1tpIC0gMV0gPSB0YXJnZXQ7CisJCX0gZWxzZSBpZiAoZ3JhcGgtPm5ld19tYXBwaW5nW2kgLSAxXSA9PSB0YXJnZXQpIHsKKwkJCS8qCisJCQkgKiBUaGVyZSBpcyBhIGJyYW5jaCBsaW5lIHRvIG91ciBsZWZ0CisJCQkgKiBhbHJlYWR5LCBhbmQgaXQgaXMgb3VyIHRhcmdldC4gIFdlCisJCQkgKiBjb21iaW5lIHdpdGggdGhpcyBsaW5lLCBzaW5jZSB3ZSBzaGFyZQorCQkJICogdGhlIHNhbWUgcGFyZW50IGNvbW1pdC4KKwkJCSAqCisJCQkgKiBXZSBkb24ndCBoYXZlIHRvIGFkZCBhbnl0aGluZyB0byB0aGUKKwkJCSAqIG91dHB1dCBvciBuZXdfbWFwcGluZywgc2luY2UgdGhlCisJCQkgKiBleGlzdGluZyBicmFuY2ggbGluZSBoYXMgYWxyZWFkeSB0YWtlbgorCQkJICogY2FyZSBvZiBpdC4KKwkJCSAqLworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIFRoZXJlIGlzIGEgYnJhbmNoIGxpbmUgdG8gb3VyIGxlZnQsCisJCQkgKiBidXQgaXQgaXNuJ3Qgb3VyIHRhcmdldC4gIFdlIG5lZWQgdG8KKwkJCSAqIGNyb3NzIG92ZXIgaXQuCisJCQkgKgorCQkJICogVGhlIHNwYWNlIGp1c3QgdG8gdGhlIGxlZnQgb2YgdGhpcworCQkJICogYnJhbmNoIHNob3VsZCBhbHdheXMgYmUgZW1wdHkuCisJCQkgKi8KKwkJCWFzc2VydChncmFwaC0+bmV3X21hcHBpbmdbaSAtIDFdID4gdGFyZ2V0KTsKKwkJCWFzc2VydChncmFwaC0+bmV3X21hcHBpbmdbaSAtIDJdIDwgMCk7CisJCQlncmFwaC0+bmV3X21hcHBpbmdbaSAtIDJdID0gdGFyZ2V0OworCQl9CisJfQorCisJLyoKKwkgKiBUaGUgbmV3IG1hcHBpbmcgbWF5IGJlIDEgc21hbGxlciB0aGFuIHRoZSBvbGQgbWFwcGluZworCSAqLworCWlmIChncmFwaC0+bmV3X21hcHBpbmdbZ3JhcGgtPm1hcHBpbmdfc2l6ZSAtIDFdIDwgMCkKKwkJZ3JhcGgtPm1hcHBpbmdfc2l6ZS0tOworCisJLyoKKwkgKiBPdXRwdXQgb3V0IGEgbGluZSBiYXNlZCBvbiB0aGUgbmV3IG1hcHBpbmcgaW5mbworCSAqLworCWZvciAoaSA9IDA7IGkgPCBncmFwaC0+bWFwcGluZ19zaXplOyBpKyspIHsKKwkJaW50IHRhcmdldCA9IGdyYXBoLT5uZXdfbWFwcGluZ1tpXTsKKwkJaWYgKHRhcmdldCA8IDApCisJCQlzdHJidWZfYWRkY2goc2IsICcgJyk7CisJCWVsc2UgaWYgKHRhcmdldCAqIDIgPT0gaSkKKwkJCXN0cmJ1Zl9hZGRjaChzYiwgJ3wnKTsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZGNoKHNiLCAnLycpOworCX0KKworCWdyYXBoX3BhZF9ob3Jpem9udGFsbHkoZ3JhcGgsIHNiKTsKKworCS8qCisJICogU3dhcCBtYXBwaW5nIGFuZCBuZXdfbWFwcGluZworCSAqLworCXRtcF9tYXBwaW5nID0gZ3JhcGgtPm1hcHBpbmc7CisJZ3JhcGgtPm1hcHBpbmcgPSBncmFwaC0+bmV3X21hcHBpbmc7CisJZ3JhcGgtPm5ld19tYXBwaW5nID0gdG1wX21hcHBpbmc7CisKKwkvKgorCSAqIElmIGdyYXBoLT5tYXBwaW5nIGluZGljYXRlcyB0aGF0IGFsbCBvZiB0aGUgYnJhbmNoIGxpbmVzCisJICogYXJlIGFscmVhZHkgaW4gdGhlIGNvcnJlY3QgcG9zaXRpb25zLCB3ZSBhcmUgZG9uZS4KKwkgKiBPdGhlcndpc2UsIHdlIG5lZWQgdG8gY29sbGFwc2Ugc29tZSBicmFuY2ggbGluZXMgdG9nZXRoZXIuCisJICovCisJaWYgKGdyYXBoX2lzX21hcHBpbmdfY29ycmVjdChncmFwaCkpCisJCWdyYXBoX3VwZGF0ZV9zdGF0ZShncmFwaCwgR1JBUEhfUEFERElORyk7Cit9CisKK2ludCBncmFwaF9uZXh0X2xpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBzdHJidWYgKnNiKQoreworCXN3aXRjaCAoZ3JhcGgtPnN0YXRlKSB7CisJY2FzZSBHUkFQSF9QQURESU5HOgorCQlncmFwaF9vdXRwdXRfcGFkZGluZ19saW5lKGdyYXBoLCBzYik7CisJCXJldHVybiAwOworCWNhc2UgR1JBUEhfU0tJUDoKKwkJZ3JhcGhfb3V0cHV0X3NraXBfbGluZShncmFwaCwgc2IpOworCQlyZXR1cm4gMDsKKwljYXNlIEdSQVBIX1BSRV9DT01NSVQ6CisJCWdyYXBoX291dHB1dF9wcmVfY29tbWl0X2xpbmUoZ3JhcGgsIHNiKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBHUkFQSF9DT01NSVQ6CisJCWdyYXBoX291dHB1dF9jb21taXRfbGluZShncmFwaCwgc2IpOworCQlyZXR1cm4gMTsKKwljYXNlIEdSQVBIX1BPU1RfTUVSR0U6CisJCWdyYXBoX291dHB1dF9wb3N0X21lcmdlX2xpbmUoZ3JhcGgsIHNiKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBHUkFQSF9DT0xMQVBTSU5HOgorCQlncmFwaF9vdXRwdXRfY29sbGFwc2luZ19saW5lKGdyYXBoLCBzYik7CisJCXJldHVybiAwOworCX0KKworCWFzc2VydCgwKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBncmFwaF9wYWRkaW5nX2xpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBzdHJidWYgKnNiKQoreworCWludCBpLCBqOworCisJaWYgKGdyYXBoLT5zdGF0ZSAhPSBHUkFQSF9DT01NSVQpIHsKKwkJZ3JhcGhfbmV4dF9saW5lKGdyYXBoLCBzYik7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIE91dHB1dCB0aGUgcm93IGNvbnRhaW5pbmcgdGhpcyBjb21taXQKKwkgKiBJdGVyYXRlIHVwIHRvIGFuZCBpbmNsdWRpbmcgZ3JhcGgtPm51bV9jb2x1bW5zLAorCSAqIHNpbmNlIHRoZSBjdXJyZW50IGNvbW1pdCBtYXkgbm90IGJlIGluIGFueSBvZiB0aGUgZXhpc3RpbmcKKwkgKiBjb2x1bW5zLiAgKFRoaXMgaGFwcGVucyB3aGVuIHRoZSBjdXJyZW50IGNvbW1pdCBkb2Vzbid0IGhhdmUgYW55CisJICogY2hpbGRyZW4gdGhhdCB3ZSBoYXZlIGFscmVhZHkgcHJvY2Vzc2VkLikKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZ3JhcGgtPm51bV9jb2x1bW5zOyBpKyspIHsKKwkJc3RydWN0IGNvbW1pdCAqY29sX2NvbW1pdCA9IGdyYXBoLT5jb2x1bW5zW2ldLmNvbW1pdDsKKwkJaWYgKGNvbF9jb21taXQgPT0gZ3JhcGgtPmNvbW1pdCkgeworCQkJc3RyYnVmX2FkZGNoKHNiLCAnfCcpOworCisJCQlpZiAoZ3JhcGgtPm51bV9wYXJlbnRzIDwgMykKKwkJCQlzdHJidWZfYWRkY2goc2IsICcgJyk7CisJCQllbHNlIHsKKwkJCQlpbnQgbnVtX3NwYWNlcyA9ICgoZ3JhcGgtPm51bV9wYXJlbnRzIC0gMikgKiAyKTsKKwkJCQlmb3IgKGogPSAwOyBqIDwgbnVtX3NwYWNlczsgaisrKQorCQkJCQlzdHJidWZfYWRkY2goc2IsICcgJyk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlzdHJidWZfYWRkc3RyKHNiLCAifCAiKTsKKwkJfQorCX0KKworCWdyYXBoX3BhZF9ob3Jpem9udGFsbHkoZ3JhcGgsIHNiKTsKKworCS8qCisJICogVXBkYXRlIGdyYXBoLT5wcmV2X3N0YXRlIHNpbmNlIHdlIGhhdmUgb3V0cHV0IGEgcGFkZGluZyBsaW5lCisJICovCisJZ3JhcGgtPnByZXZfc3RhdGUgPSBHUkFQSF9QQURESU5HOworfQorCitpbnQgZ3JhcGhfaXNfY29tbWl0X2ZpbmlzaGVkKHN0cnVjdCBnaXRfZ3JhcGggY29uc3QgKmdyYXBoKQoreworCXJldHVybiAoZ3JhcGgtPnN0YXRlID09IEdSQVBIX1BBRERJTkcpOworfQorCit2b2lkIGdyYXBoX3Nob3dfY29tbWl0KHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoKQoreworCXN0cnVjdCBzdHJidWYgbXNnYnVmOworCWludCBzaG93bl9jb21taXRfbGluZSA9IDA7CisKKwlpZiAoIWdyYXBoKQorCQlyZXR1cm47CisKKwlzdHJidWZfaW5pdCgmbXNnYnVmLCAwKTsKKworCXdoaWxlICghc2hvd25fY29tbWl0X2xpbmUpIHsKKwkJc2hvd25fY29tbWl0X2xpbmUgPSBncmFwaF9uZXh0X2xpbmUoZ3JhcGgsICZtc2didWYpOworCQlmd3JpdGUobXNnYnVmLmJ1Ziwgc2l6ZW9mKGNoYXIpLCBtc2didWYubGVuLCBzdGRvdXQpOworCQlpZiAoIXNob3duX2NvbW1pdF9saW5lKQorCQkJcHV0Y2hhcignXG4nKTsKKwkJc3RyYnVmX3NldGxlbigmbXNnYnVmLCAwKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmbXNnYnVmKTsKK30KKwordm9pZCBncmFwaF9zaG93X29uZWxpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgpCit7CisJc3RydWN0IHN0cmJ1ZiBtc2didWY7CisKKwlpZiAoIWdyYXBoKQorCQlyZXR1cm47CisKKwlzdHJidWZfaW5pdCgmbXNnYnVmLCAwKTsKKwlncmFwaF9uZXh0X2xpbmUoZ3JhcGgsICZtc2didWYpOworCWZ3cml0ZShtc2didWYuYnVmLCBzaXplb2YoY2hhciksIG1zZ2J1Zi5sZW4sIHN0ZG91dCk7CisJc3RyYnVmX3JlbGVhc2UoJm1zZ2J1Zik7Cit9CisKK3ZvaWQgZ3JhcGhfc2hvd19wYWRkaW5nKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoKQoreworCXN0cnVjdCBzdHJidWYgbXNnYnVmOworCisJaWYgKCFncmFwaCkKKwkJcmV0dXJuOworCisJc3RyYnVmX2luaXQoJm1zZ2J1ZiwgMCk7CisJZ3JhcGhfcGFkZGluZ19saW5lKGdyYXBoLCAmbXNnYnVmKTsKKwlmd3JpdGUobXNnYnVmLmJ1Ziwgc2l6ZW9mKGNoYXIpLCBtc2didWYubGVuLCBzdGRvdXQpOworCXN0cmJ1Zl9yZWxlYXNlKCZtc2didWYpOworfQorCitpbnQgZ3JhcGhfc2hvd19yZW1haW5kZXIoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgpCit7CisJc3RydWN0IHN0cmJ1ZiBtc2didWY7CisJaW50IHNob3duID0gMDsKKworCWlmICghZ3JhcGgpCisJCXJldHVybiAwOworCisJaWYgKGdyYXBoX2lzX2NvbW1pdF9maW5pc2hlZChncmFwaCkpCisJCXJldHVybiAwOworCisJc3RyYnVmX2luaXQoJm1zZ2J1ZiwgMCk7CisJZm9yICg7OykgeworCQlncmFwaF9uZXh0X2xpbmUoZ3JhcGgsICZtc2didWYpOworCQlmd3JpdGUobXNnYnVmLmJ1Ziwgc2l6ZW9mKGNoYXIpLCBtc2didWYubGVuLCBzdGRvdXQpOworCQlzdHJidWZfc2V0bGVuKCZtc2didWYsIDApOworCQlzaG93biA9IDE7CisKKwkJaWYgKCFncmFwaF9pc19jb21taXRfZmluaXNoZWQoZ3JhcGgpKQorCQkJcHV0Y2hhcignXG4nKTsKKwkJZWxzZQorCQkJYnJlYWs7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZtc2didWYpOworCisJcmV0dXJuIHNob3duOworfQorCisKK3ZvaWQgZ3JhcGhfc2hvd19zdHJidWYoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBzdHJidWYgY29uc3QgKnNiKQoreworCWNoYXIgKnA7CisKKwlpZiAoIWdyYXBoKSB7CisJCWZ3cml0ZShzYi0+YnVmLCBzaXplb2YoY2hhciksIHNiLT5sZW4sIHN0ZG91dCk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFByaW50IHRoZSBzdHJidWYgbGluZSBieSBsaW5lLAorCSAqIGFuZCBkaXNwbGF5IHRoZSBncmFwaCBpbmZvIGJlZm9yZSBlYWNoIGxpbmUgYnV0IHRoZSBmaXJzdC4KKwkgKi8KKwlwID0gc2ItPmJ1ZjsKKwl3aGlsZSAocCkgeworCQlzaXplX3QgbGVuOworCQljaGFyICpuZXh0X3AgPSBzdHJjaHIocCwgJ1xuJyk7CisJCWlmIChuZXh0X3ApIHsKKwkJCW5leHRfcCsrOworCQkJbGVuID0gbmV4dF9wIC0gcDsKKwkJfSBlbHNlIHsKKwkJCWxlbiA9IChzYi0+YnVmICsgc2ItPmxlbikgLSBwOworCQl9CisJCWZ3cml0ZShwLCBzaXplb2YoY2hhciksIGxlbiwgc3Rkb3V0KTsKKwkJaWYgKG5leHRfcCAmJiAqbmV4dF9wICE9ICdcMCcpCisJCQlncmFwaF9zaG93X29uZWxpbmUoZ3JhcGgpOworCQlwID0gbmV4dF9wOworCX0KK30KKwordm9pZCBncmFwaF9zaG93X2NvbW1pdF9tc2coc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsCisJCQkgICBzdHJ1Y3Qgc3RyYnVmIGNvbnN0ICpzYikKK3sKKwlpbnQgbmV3bGluZV90ZXJtaW5hdGVkOworCisJaWYgKCFncmFwaCkgeworCQkvKgorCQkgKiBJZiB0aGVyZSdzIG5vIGdyYXBoLCBqdXN0IHByaW50IHRoZSBtZXNzYWdlIGJ1ZmZlci4KKwkJICoKKwkJICogVGhlIG1lc3NhZ2UgYnVmZmVyIGZvciBDTUlUX0ZNVF9PTkVMSU5FIGFuZAorCQkgKiBDTUlUX0ZNVF9VU0VSRk9STUFUIGFyZSBhbHJlYWR5IG1pc3NpbmcgYSB0ZXJtaW5hdGluZworCQkgKiBuZXdsaW5lLiAgQWxsIG9mIHRoZSBvdGhlciBmb3JtYXRzIHNob3VsZCBoYXZlIGl0LgorCQkgKi8KKwkJZndyaXRlKHNiLT5idWYsIHNpemVvZihjaGFyKSwgc2ItPmxlbiwgc3Rkb3V0KTsKKwkJcmV0dXJuOworCX0KKworCW5ld2xpbmVfdGVybWluYXRlZCA9IChzYi0+bGVuICYmIHNiLT5idWZbc2ItPmxlbiAtIDFdID09ICdcbicpOworCisJLyoKKwkgKiBTaG93IHRoZSBjb21taXQgbWVzc2FnZQorCSAqLworCWdyYXBoX3Nob3dfc3RyYnVmKGdyYXBoLCBzYik7CisKKwkvKgorCSAqIElmIHRoZXJlIGlzIG1vcmUgb3V0cHV0IG5lZWRlZCBmb3IgdGhpcyBjb21taXQsIHNob3cgaXQgbm93CisJICovCisJaWYgKCFncmFwaF9pc19jb21taXRfZmluaXNoZWQoZ3JhcGgpKSB7CisJCS8qCisJCSAqIElmIHNiIGRvZXNuJ3QgaGF2ZSBhIHRlcm1pbmF0aW5nIG5ld2xpbmUsIHByaW50IG9uZSBub3csCisJCSAqIHNvIHdlIGNhbiBzdGFydCB0aGUgcmVtYWluZGVyIG9mIHRoZSBncmFwaCBvdXRwdXQgb24gYQorCQkgKiBuZXcgbGluZS4KKwkJICovCisJCWlmICghbmV3bGluZV90ZXJtaW5hdGVkKQorCQkJcHV0Y2hhcignXG4nKTsKKworCQlncmFwaF9zaG93X3JlbWFpbmRlcihncmFwaCk7CisKKwkJLyoKKwkJICogSWYgc2IgZW5kcyB3aXRoIGEgbmV3bGluZSwgb3VyIG91dHB1dCBzaG91bGQgdG9vLgorCQkgKi8KKwkJaWYgKG5ld2xpbmVfdGVybWluYXRlZCkKKwkJCXB1dGNoYXIoJ1xuJyk7CisJfQorfQpkaWZmIC0tZ2l0IGEvZ3JhcGguaCBiL2dyYXBoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFiNGUzZAotLS0gL2Rldi9udWxsCisrKyBiL2dyYXBoLmgKQEAgLTAsMCArMSwxMjEgQEAKKyNpZm5kZWYgR1JBUEhfSAorI2RlZmluZSBHUkFQSF9ICisKKy8qIEEgZ3JhcGggaXMgYSBwb2ludGVyIHRvIHRoaXMgb3BhcXVlIHN0cnVjdHVyZSAqLworc3RydWN0IGdpdF9ncmFwaDsKKworLyoKKyAqIENyZWF0ZSBhIG5ldyBzdHJ1Y3QgZ2l0X2dyYXBoLgorICogVGhlIGdyYXBoIHNob3VsZCBiZSBmcmVlZCB3aXRoIGdyYXBoX3JlbGVhc2UoKSB3aGVuIG5vIGxvbmdlciBuZWVkZWQuCisgKi8KK3N0cnVjdCBnaXRfZ3JhcGggKmdyYXBoX2luaXQoc3RydWN0IHJldl9pbmZvICpvcHQpOworCisvKgorICogRGVzdHJveSBhIHN0cnVjdCBnaXRfZ3JhcGggYW5kIGZyZWUgYXNzb2NpYXRlZCBtZW1vcnkuCisgKi8KK3ZvaWQgZ3JhcGhfcmVsZWFzZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCk7CisKKy8qCisgKiBVcGRhdGUgYSBnaXRfZ3JhcGggd2l0aCBhIG5ldyBjb21taXQuCisgKiBUaGlzIHdpbGwgY2F1c2UgdGhlIGdyYXBoIHRvIGJlZ2luIG91dHB1dHRpbmcgbGluZXMgZm9yIHRoZSBuZXcgY29tbWl0CisgKiB0aGUgbmV4dCB0aW1lIGdyYXBoX25leHRfbGluZSgpIGlzIGNhbGxlZC4KKyAqCisgKiBJZiBncmFwaF91cGRhdGUoKSBpcyBjYWxsZWQgYmVmb3JlIGdyYXBoX2lzX2NvbW1pdF9maW5pc2hlZCgpIHJldHVybnMgMSwKKyAqIHRoZSBuZXh0IGNhbGwgdG8gZ3JhcGhfbmV4dF9saW5lKCkgd2lsbCBvdXRwdXQgYW4gZWxsaXBzaXMgKCIuLi4iKQorICogdG8gaW5kaWNhdGUgdGhhdCBhIHBvcnRpb24gb2YgdGhlIGdyYXBoIGlzIG1pc3NpbmcuCisgKi8KK3ZvaWQgZ3JhcGhfdXBkYXRlKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpOworCisvKgorICogT3V0cHV0IHRoZSBuZXh0IGxpbmUgZm9yIGEgZ3JhcGguCisgKiBUaGlzIGZvcm1hdHMgdGhlIG5leHQgZ3JhcGggbGluZSBpbnRvIHRoZSBzcGVjaWZpZWQgc3RyYnVmLiAgSXQgaXMgbm90CisgKiB0ZXJtaW5hdGVkIHdpdGggYSBuZXdsaW5lLgorICoKKyAqIFJldHVybnMgMSBpZiB0aGUgbGluZSBpbmNsdWRlcyB0aGUgY3VycmVudCBjb21taXQsIGFuZCAwIG90aGVyd2lzZS4KKyAqIGdyYXBoX25leHRfbGluZSgpIHdpbGwgcmV0dXJuIDEgZXhhY3RseSBvbmNlIGZvciBlYWNoIHRpbWUKKyAqIGdyYXBoX3VwZGF0ZSgpIGlzIGNhbGxlZC4KKyAqLworaW50IGdyYXBoX25leHRfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IHN0cmJ1ZiAqc2IpOworCisvKgorICogT3V0cHV0IGEgcGFkZGluZyBsaW5lIGluIHRoZSBncmFwaC4KKyAqIFRoaXMgaXMgc2ltaWxhciB0byBncmFwaF9uZXh0X2xpbmUoKS4gIEhvd2V2ZXIsIGl0IGlzIGd1YXJhbnRlZWQgdG8KKyAqIG5ldmVyIHByaW50IHRoZSBjdXJyZW50IGNvbW1pdCBsaW5lLiAgSW5zdGVhZCwgaWYgdGhlIGNvbW1pdCBsaW5lIGlzCisgKiBuZXh0LCBpdCB3aWxsIHNpbXBseSBvdXRwdXQgYSBsaW5lIG9mIHZlcnRpY2FsIHBhZGRpbmcsIGV4dGVuZGluZyB0aGUKKyAqIGJyYW5jaCBsaW5lcyBkb3dud2FyZHMsIGJ1dCBsZWF2aW5nIHRoZW0gb3RoZXJ3aXNlIHVuY2hhbmdlZC4KKyAqLwordm9pZCBncmFwaF9wYWRkaW5nX2xpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBzdHJidWYgKnNiKTsKKworLyoKKyAqIERldGVybWluZSBpZiBhIGdyYXBoIGhhcyBmaW5pc2hlZCBvdXRwdXR0aW5nIGxpbmVzIGZvciB0aGUgY3VycmVudAorICogY29tbWl0LgorICoKKyAqIFJldHVybnMgMSBpZiBncmFwaF9uZXh0X2xpbmUoKSBuZWVkcyB0byBiZSBjYWxsZWQgYWdhaW4gYmVmb3JlCisgKiBncmFwaF91cGRhdGUoKSBzaG91bGQgYmUgY2FsbGVkLiAgUmV0dXJucyAwIGlmIG5vIG1vcmUgbGluZXMgYXJlIG5lZWRlZAorICogZm9yIHRoaXMgY29tbWl0LiAgSWYgMCBpcyByZXR1cm5lZCwgZ3JhcGhfbmV4dF9saW5lKCkgbWF5IHN0aWxsIGJlCisgKiBjYWxsZWQgd2l0aG91dCBjYWxsaW5nIGdyYXBoX3VwZGF0ZSgpLCBhbmQgaXQgd2lsbCBtZXJlbHkgb3V0cHV0CisgKiBhcHByb3ByaWF0ZSAidmVydGljYWwgcGFkZGluZyIgaW4gdGhlIGdyYXBoLgorICovCitpbnQgZ3JhcGhfaXNfY29tbWl0X2ZpbmlzaGVkKHN0cnVjdCBnaXRfZ3JhcGggY29uc3QgKmdyYXBoKTsKKworCisvKgorICogZ3JhcGhfc2hvd18qOiBoZWxwZXIgZnVuY3Rpb25zIGZvciBwcmludGluZyB0byBzdGRvdXQKKyAqLworCisKKy8qCisgKiBJZiB0aGUgZ3JhcGggaXMgbm9uLU5VTEwsIHByaW50IHRoZSBoaXN0b3J5IGdyYXBoIHRvIHN0ZG91dCwKKyAqIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlIGxpbmUgY29udGFpbmluZyB0aGlzIGNvbW1pdC4KKyAqIERvZXMgbm90IHByaW50IGEgdGVybWluYXRpbmcgbmV3bGluZSBvbiB0aGUgbGFzdCBsaW5lLgorICovCit2b2lkIGdyYXBoX3Nob3dfY29tbWl0KHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoKTsKKworLyoKKyAqIElmIHRoZSBncmFwaCBpcyBub24tTlVMTCwgcHJpbnQgb25lIGxpbmUgb2YgdGhlIGhpc3RvcnkgZ3JhcGggdG8gc3Rkb3V0LgorICogRG9lcyBub3QgcHJpbnQgYSB0ZXJtaW5hdGluZyBuZXdsaW5lIG9uIHRoZSBsYXN0IGxpbmUuCisgKi8KK3ZvaWQgZ3JhcGhfc2hvd19vbmVsaW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoKTsKKworLyoKKyAqIElmIHRoZSBncmFwaCBpcyBub24tTlVMTCwgcHJpbnQgb25lIGxpbmUgb2YgdmVydGljYWwgZ3JhcGggcGFkZGluZyB0bworICogc3Rkb3V0LiAgRG9lcyBub3QgcHJpbnQgYSB0ZXJtaW5hdGluZyBuZXdsaW5lIG9uIHRoZSBsYXN0IGxpbmUuCisgKi8KK3ZvaWQgZ3JhcGhfc2hvd19wYWRkaW5nKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoKTsKKworLyoKKyAqIElmIHRoZSBncmFwaCBpcyBub24tTlVMTCwgcHJpbnQgdGhlIHJlc3Qgb2YgdGhlIGhpc3RvcnkgZ3JhcGggZm9yIHRoaXMKKyAqIGNvbW1pdCB0byBzdGRvdXQuICBEb2VzIG5vdCBwcmludCBhIHRlcm1pbmF0aW5nIG5ld2xpbmUgb24gdGhlIGxhc3QgbGluZS4KKyAqLworaW50IGdyYXBoX3Nob3dfcmVtYWluZGVyKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoKTsKKworLyoKKyAqIFByaW50IGEgc3RyYnVmIHRvIHN0ZG91dC4gIElmIHRoZSBncmFwaCBpcyBub24tTlVMTCwgYWxsIGxpbmVzIGJ1dCB0aGUKKyAqIGZpcnN0IHdpbGwgYmUgcHJlZml4ZWQgd2l0aCB0aGUgZ3JhcGggb3V0cHV0LgorICoKKyAqIElmIHRoZSBzdHJidWYgZW5kcyB3aXRoIGEgbmV3bGluZSwgdGhlIG91dHB1dCB3aWxsIGVuZCBhZnRlciB0aGlzCisgKiBuZXdsaW5lLiAgQSBuZXcgZ3JhcGggbGluZSB3aWxsIG5vdCBiZSBwcmludGVkIGFmdGVyIHRoZSBmaW5hbCBuZXdsaW5lLgorICogSWYgdGhlIHN0cmJ1ZiBpcyBlbXB0eSwgbm8gb3V0cHV0IHdpbGwgYmUgcHJpbnRlZC4KKyAqCisgKiBTaW5jZSB0aGUgZmlyc3QgbGluZSB3aWxsIG5vdCBpbmNsdWRlIHRoZSBncmFwaCBvdXB1dCwgdGhlIGNhbGxlciBpcworICogcmVzcG9uc2libGUgZm9yIHByaW50aW5nIHRoaXMgbGluZSdzIGdyYXBoIChwZXJoYXBzIHZpYQorICogZ3JhcGhfc2hvd19jb21taXQoKSBvciBncmFwaF9zaG93X29uZWxpbmUoKSkgYmVmb3JlIGNhbGxpbmcKKyAqIGdyYXBoX3Nob3dfc3RyYnVmKCkuCisgKi8KK3ZvaWQgZ3JhcGhfc2hvd19zdHJidWYoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBzdHJidWYgY29uc3QgKnNiKTsKKworLyoKKyAqIFByaW50IGEgY29tbWl0IG1lc3NhZ2Ugc3RyYnVmIGFuZCB0aGUgcmVtYWluZGVyIG9mIHRoZSBncmFwaCB0byBzdGRvdXQuCisgKgorICogVGhpcyBpcyBzaW1pbGFyIHRvIGdyYXBoX3Nob3dfc3RyYnVmKCksIGJ1dCBpdCBhbHdheXMgcHJpbnRzIHRoZQorICogcmVtYWluZGVyIG9mIHRoZSBncmFwaC4KKyAqCisgKiBJZiB0aGUgc3RyYnVmIGVuZHMgd2l0aCBhIG5ld2xpbmUsIHRoZSBvdXRwdXQgcHJpbnRlZCBieQorICogZ3JhcGhfc2hvd19jb21taXRfbXNnKCkgd2lsbCBlbmQgd2l0aCBhIG5ld2xpbmUuICBJZiB0aGUgc3RyYnVmIGlzCisgKiBtaXNzaW5nIGEgdGVybWluYXRpbmcgbmV3bGluZSAoaW5jbHVkaW5nIGlmIGl0IGlzIGVtcHR5KSwgdGhlIG91dHB1dAorICogcHJpbnRlZCBieSBncmFwaF9zaG93X2NvbW1pdF9tc2coKSB3aWxsIGFsc28gYmUgbWlzc2luZyBhIHRlcm1pbmF0aW5nCisgKiBuZXdsaW5lLgorICovCit2b2lkIGdyYXBoX3Nob3dfY29tbWl0X21zZyhzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IHN0cmJ1ZiBjb25zdCAqc2IpOworCisjZW5kaWYgLyogR1JBUEhfSCAqLwpkaWZmIC0tZ2l0IGEvaGFzaC1vYmplY3QuYyBiL2hhc2gtb2JqZWN0LmMKaW5kZXggNjFlNzE2MC4uNDhkNTIyMyAxMDA2NDQKLS0tIGEvaGFzaC1vYmplY3QuYworKysgYi9oYXNoLW9iamVjdC5jCkBAIC02LDYgKzYsNyBAQAogICovCiAjaW5jbHVkZSAiY2FjaGUuaCIKICNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKIAogc3RhdGljIHZvaWQgaGFzaF9vYmplY3QoY29uc3QgY2hhciAqcGF0aCwgZW51bSBvYmplY3RfdHlwZSB0eXBlLCBpbnQgd3JpdGVfb2JqZWN0KQogewpAQCAtMjAsNiArMjEsNyBAQAogCQkgICAgPyAiVW5hYmxlIHRvIGFkZCAlcyB0byBkYXRhYmFzZSIKIAkJICAgIDogIlVuYWJsZSB0byBoYXNoICVzIiwgcGF0aCk7CiAJcHJpbnRmKCIlc1xuIiwgc2hhMV90b19oZXgoc2hhMSkpOworCW1heWJlX2ZsdXNoX29yX2RpZShzdGRvdXQsICJoYXNoIHRvIHN0ZG91dCIpOwogfQogCiBzdGF0aWMgdm9pZCBoYXNoX3N0ZGluKGNvbnN0IGNoYXIgKnR5cGUsIGludCB3cml0ZV9vYmplY3QpCkBAIC0zMCw4ICszMiwyNyBAQAogCXByaW50ZigiJXNcbiIsIHNoYTFfdG9faGV4KHNoYTEpKTsKIH0KIAorc3RhdGljIHZvaWQgaGFzaF9zdGRpbl9wYXRocyhjb25zdCBjaGFyICp0eXBlLCBpbnQgd3JpdGVfb2JqZWN0cykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiwgbmJ1ZjsKKworCXN0cmJ1Zl9pbml0KCZidWYsIDApOworCXN0cmJ1Zl9pbml0KCZuYnVmLCAwKTsKKwl3aGlsZSAoc3RyYnVmX2dldGxpbmUoJmJ1Ziwgc3RkaW4sICdcbicpICE9IEVPRikgeworCQlpZiAoYnVmLmJ1ZlswXSA9PSAnIicpIHsKKwkJCXN0cmJ1Zl9yZXNldCgmbmJ1Zik7CisJCQlpZiAodW5xdW90ZV9jX3N0eWxlKCZuYnVmLCBidWYuYnVmLCBOVUxMKSkKKwkJCQlkaWUoImxpbmUgaXMgYmFkbHkgcXVvdGVkIik7CisJCQlzdHJidWZfc3dhcCgmYnVmLCAmbmJ1Zik7CisJCX0KKwkJaGFzaF9vYmplY3QoYnVmLmJ1ZiwgdHlwZV9mcm9tX3N0cmluZyh0eXBlKSwgd3JpdGVfb2JqZWN0cyk7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZuYnVmKTsKK30KKwogc3RhdGljIGNvbnN0IGNoYXIgaGFzaF9vYmplY3RfdXNhZ2VbXSA9Ci0iZ2l0LWhhc2gtb2JqZWN0IFstdCA8dHlwZT5dIFstd10gWy0tc3RkaW5dIDxmaWxlPi4uLiI7CisiZ2l0LWhhc2gtb2JqZWN0IFsgWy10IDx0eXBlPl0gWy13XSBbLS1zdGRpbl0gPGZpbGU+Li4uIHwgLS1zdGRpbi1wYXRocyA8IDxsaXN0LW9mLXBhdGhzPiBdIjsKIAogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewpAQCAtNDIsOCArNjMsOSBAQAogCWludCBwcmVmaXhfbGVuZ3RoID0gLTE7CiAJaW50IG5vX21vcmVfZmxhZ3MgPSAwOwogCWludCBoYXNoc3RkaW4gPSAwOworCWludCBzdGRpbl9wYXRocyA9IDA7CiAKLQlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZyk7CisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOwogCiAJZm9yIChpID0gMSA7IGkgPCBhcmdjOyBpKyspIHsKIAkJaWYgKCFub19tb3JlX2ZsYWdzICYmIGFyZ3ZbaV1bMF0gPT0gJy0nKSB7CkBAIC02NSw3ICs4NywxOSBAQAogCQkJfQogCQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS1oZWxwIikpCiAJCQkJdXNhZ2UoaGFzaF9vYmplY3RfdXNhZ2UpOworCQkJZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS1zdGRpbi1wYXRocyIpKSB7CisJCQkJaWYgKGhhc2hzdGRpbikgeworCQkJCQllcnJvcigiQ2FuJ3QgdXNlIC0tc3RkaW4tcGF0aHMgd2l0aCAtLXN0ZGluIik7CisJCQkJCXVzYWdlKGhhc2hfb2JqZWN0X3VzYWdlKTsKKwkJCQl9CisJCQkJc3RkaW5fcGF0aHMgPSAxOworCisJCQl9CiAJCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbaV0sICItLXN0ZGluIikpIHsKKwkJCQlpZiAoc3RkaW5fcGF0aHMpIHsKKwkJCQkJZXJyb3IoIkNhbid0IHVzZSAlcyB3aXRoIC0tc3RkaW4tcGF0aHMiLCBhcmd2W2ldKTsKKwkJCQkJdXNhZ2UoaGFzaF9vYmplY3RfdXNhZ2UpOworCQkJCX0KIAkJCQlpZiAoaGFzaHN0ZGluKQogCQkJCQlkaWUoIk11bHRpcGxlIC0tc3RkaW4gYXJndW1lbnRzIGFyZSBub3Qgc3VwcG9ydGVkIik7CiAJCQkJaGFzaHN0ZGluID0gMTsKQEAgLTc2LDYgKzExMCwxMSBAQAogCQllbHNlIHsKIAkJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CiAKKwkJCWlmIChzdGRpbl9wYXRocykgeworCQkJCWVycm9yKCJDYW4ndCBzcGVjaWZ5IGZpbGVzIChzdWNoIGFzIFwiJXNcIikgd2l0aCAtLXN0ZGluLXBhdGhzIiwgYXJnKTsKKwkJCQl1c2FnZShoYXNoX29iamVjdF91c2FnZSk7CisJCQl9CisKIAkJCWlmIChoYXNoc3RkaW4pIHsKIAkJCQloYXNoX3N0ZGluKHR5cGUsIHdyaXRlX29iamVjdCk7CiAJCQkJaGFzaHN0ZGluID0gMDsKQEAgLTg3LDYgKzEyNiwxMCBAQAogCQkJbm9fbW9yZV9mbGFncyA9IDE7CiAJCX0KIAl9CisKKwlpZiAoc3RkaW5fcGF0aHMpCisJCWhhc2hfc3RkaW5fcGF0aHModHlwZSwgd3JpdGVfb2JqZWN0KTsKKwogCWlmIChoYXNoc3RkaW4pCiAJCWhhc2hfc3RkaW4odHlwZSwgd3JpdGVfb2JqZWN0KTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2hlbHAuYyBiL2hlbHAuYwppbmRleCAxMDI5OGZiLi44YWZmOTRjIDEwMDY0NAotLS0gYS9oZWxwLmMKKysrIGIvaGVscC5jCkBAIC0xMSwxMCArMTEsMTYgQEAKICNpbmNsdWRlICJydW4tY29tbWFuZC5oIgogCiBzdGF0aWMgc3RydWN0IG1hbl92aWV3ZXJfbGlzdCB7Ci0Jdm9pZCAoKmV4ZWMpKGNvbnN0IGNoYXIgKik7CiAJc3RydWN0IG1hbl92aWV3ZXJfbGlzdCAqbmV4dDsKKwljaGFyIG5hbWVbRkxFWF9BUlJBWV07CiB9ICptYW5fdmlld2VyX2xpc3Q7CiAKK3N0YXRpYyBzdHJ1Y3QgbWFuX3ZpZXdlcl9pbmZvX2xpc3QgeworCXN0cnVjdCBtYW5fdmlld2VyX2luZm9fbGlzdCAqbmV4dDsKKwljb25zdCBjaGFyICppbmZvOworCWNoYXIgbmFtZVtGTEVYX0FSUkFZXTsKK30gKm1hbl92aWV3ZXJfaW5mb19saXN0OworCiBlbnVtIGhlbHBfZm9ybWF0IHsKIAlIRUxQX0ZPUk1BVF9NQU4sCiAJSEVMUF9GT1JNQVRfSU5GTywKQEAgLTQ5LDYgKzU1LDE4IEBACiAJZGllKCJ1bnJlY29nbml6ZWQgaGVscCBmb3JtYXQgJyVzJyIsIGZvcm1hdCk7CiB9CiAKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfbWFuX3ZpZXdlcl9pbmZvKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IG1hbl92aWV3ZXJfaW5mb19saXN0ICp2aWV3ZXI7CisKKwlmb3IgKHZpZXdlciA9IG1hbl92aWV3ZXJfaW5mb19saXN0OyB2aWV3ZXI7IHZpZXdlciA9IHZpZXdlci0+bmV4dCkKKwl7CisJCWlmICghc3RyY2FzZWNtcChuYW1lLCB2aWV3ZXItPm5hbWUpKQorCQkJcmV0dXJuIHZpZXdlci0+aW5mbzsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyBpbnQgY2hlY2tfZW1hY3NjbGllbnRfdmVyc2lvbih2b2lkKQogewogCXN0cnVjdCBzdHJidWYgYnVmZmVyID0gU1RSQlVGX0lOSVQ7CkBAIC05NSw1NyArMTEzLDE0NiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBleGVjX3dvbWFuX2VtYWNzKGNvbnN0IGNoYXIgKnBhZ2UpCitzdGF0aWMgdm9pZCBleGVjX3dvbWFuX2VtYWNzKGNvbnN0IGNoYXIqIHBhdGgsIGNvbnN0IGNoYXIgKnBhZ2UpCiB7CiAJaWYgKCFjaGVja19lbWFjc2NsaWVudF92ZXJzaW9uKCkpIHsKIAkJLyogVGhpcyB3b3JrcyBvbmx5IHdpdGggZW1hY3NjbGllbnQgdmVyc2lvbiA+PSAyMi4gKi8KIAkJc3RydWN0IHN0cmJ1ZiBtYW5fcGFnZSA9IFNUUkJVRl9JTklUOworCisJCWlmICghcGF0aCkKKwkJCXBhdGggPSAiZW1hY3NjbGllbnQiOwogCQlzdHJidWZfYWRkZigmbWFuX3BhZ2UsICIod29tYW4gXCIlc1wiKSIsIHBhZ2UpOwotCQlleGVjbHAoImVtYWNzY2xpZW50IiwgImVtYWNzY2xpZW50IiwgIi1lIiwgbWFuX3BhZ2UuYnVmLCBOVUxMKTsKKwkJZXhlY2xwKHBhdGgsICJlbWFjc2NsaWVudCIsICItZSIsIG1hbl9wYWdlLmJ1ZiwgTlVMTCk7CisJCXdhcm5pbmcoImZhaWxlZCB0byBleGVjICclcyc6ICVzIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGV4ZWNfbWFuX2tvbnF1ZXJvcihjb25zdCBjaGFyICpwYWdlKQorc3RhdGljIHZvaWQgZXhlY19tYW5fa29ucXVlcm9yKGNvbnN0IGNoYXIqIHBhdGgsIGNvbnN0IGNoYXIgKnBhZ2UpCiB7CiAJY29uc3QgY2hhciAqZGlzcGxheSA9IGdldGVudigiRElTUExBWSIpOwogCWlmIChkaXNwbGF5ICYmICpkaXNwbGF5KSB7CiAJCXN0cnVjdCBzdHJidWYgbWFuX3BhZ2UgPSBTVFJCVUZfSU5JVDsKKwkJY29uc3QgY2hhciAqZmlsZW5hbWUgPSAia2ZtY2xpZW50IjsKKworCQkvKiBJdCdzIHNpbXBsZXIgdG8gbGF1bmNoIGtvbnF1ZXJvciB1c2luZyBrZm1jbGllbnQuICovCisJCWlmIChwYXRoKSB7CisJCQljb25zdCBjaGFyICpmaWxlID0gc3RycmNocihwYXRoLCAnLycpOworCQkJaWYgKGZpbGUgJiYgIXN0cmNtcChmaWxlICsgMSwgImtvbnF1ZXJvciIpKSB7CisJCQkJY2hhciAqbmV3ID0geHN0cmR1cChwYXRoKTsKKwkJCQljaGFyICpkZXN0ID0gc3RycmNocihuZXcsICcvJyk7CisKKwkJCQkvKiBzdHJsZW4oImtvbnF1ZXJvciIpID09IHN0cmxlbigia2ZtY2xpZW50IikgKi8KKwkJCQlzdHJjcHkoZGVzdCArIDEsICJrZm1jbGllbnQiKTsKKwkJCQlwYXRoID0gbmV3OworCQkJfQorCQkJaWYgKGZpbGUpCisJCQkJZmlsZW5hbWUgPSBmaWxlOworCQl9IGVsc2UKKwkJCXBhdGggPSAia2ZtY2xpZW50IjsKIAkJc3RyYnVmX2FkZGYoJm1hbl9wYWdlLCAibWFuOiVzKDEpIiwgcGFnZSk7Ci0JCWV4ZWNscCgia2ZtY2xpZW50IiwgImtmbWNsaWVudCIsICJuZXdUYWIiLCBtYW5fcGFnZS5idWYsIE5VTEwpOworCQlleGVjbHAocGF0aCwgZmlsZW5hbWUsICJuZXdUYWIiLCBtYW5fcGFnZS5idWYsIE5VTEwpOworCQl3YXJuaW5nKCJmYWlsZWQgdG8gZXhlYyAnJXMnOiAlcyIsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBleGVjX21hbl9tYW4oY29uc3QgY2hhciAqcGFnZSkKK3N0YXRpYyB2b2lkIGV4ZWNfbWFuX21hbihjb25zdCBjaGFyKiBwYXRoLCBjb25zdCBjaGFyICpwYWdlKQogewotCWV4ZWNscCgibWFuIiwgIm1hbiIsIHBhZ2UsIE5VTEwpOworCWlmICghcGF0aCkKKwkJcGF0aCA9ICJtYW4iOworCWV4ZWNscChwYXRoLCAibWFuIiwgcGFnZSwgTlVMTCk7CisJd2FybmluZygiZmFpbGVkIHRvIGV4ZWMgJyVzJzogJXMiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOwogfQogCi1zdGF0aWMgdm9pZCBkb19hZGRfbWFuX3ZpZXdlcih2b2lkICgqZXhlYykoY29uc3QgY2hhciAqKSkKK3N0YXRpYyB2b2lkIGV4ZWNfbWFuX2NtZChjb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKnBhZ2UpCit7CisJc3RydWN0IHN0cmJ1ZiBzaGVsbF9jbWQgPSBTVFJCVUZfSU5JVDsKKwlzdHJidWZfYWRkZigmc2hlbGxfY21kLCAiJXMgJXMiLCBjbWQsIHBhZ2UpOworCWV4ZWNsKCIvYmluL3NoIiwgInNoIiwgIi1jIiwgc2hlbGxfY21kLmJ1ZiwgTlVMTCk7CisJd2FybmluZygiZmFpbGVkIHRvIGV4ZWMgJyVzJzogJXMiLCBjbWQsIHN0cmVycm9yKGVycm5vKSk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9tYW5fdmlld2VyKGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IG1hbl92aWV3ZXJfbGlzdCAqKnAgPSAmbWFuX3ZpZXdlcl9saXN0OworCXNpemVfdCBsZW4gPSBzdHJsZW4obmFtZSk7CiAKIAl3aGlsZSAoKnApCiAJCXAgPSAmKCgqcCktPm5leHQpOwotCSpwID0geG1hbGxvYyhzaXplb2YoKipwKSk7Ci0JKCpwKS0+bmV4dCA9IE5VTEw7Ci0JKCpwKS0+ZXhlYyA9IGV4ZWM7CisJKnAgPSB4Y2FsbG9jKDEsIChzaXplb2YoKipwKSArIGxlbiArIDEpKTsKKwlzdHJuY3B5KCgqcCktPm5hbWUsIG5hbWUsIGxlbik7CiB9CiAKLXN0YXRpYyBpbnQgYWRkX21hbl92aWV3ZXIoY29uc3QgY2hhciAqdmFsdWUpCitzdGF0aWMgaW50IHN1cHBvcnRlZF9tYW5fdmlld2VyKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBsZW4pCiB7Ci0JaWYgKCFzdHJjYXNlY21wKHZhbHVlLCAibWFuIikpCi0JCWRvX2FkZF9tYW5fdmlld2VyKGV4ZWNfbWFuX21hbik7Ci0JZWxzZSBpZiAoIXN0cmNhc2VjbXAodmFsdWUsICJ3b21hbiIpKQotCQlkb19hZGRfbWFuX3ZpZXdlcihleGVjX3dvbWFuX2VtYWNzKTsKLQllbHNlIGlmICghc3RyY2FzZWNtcCh2YWx1ZSwgImtvbnF1ZXJvciIpKQotCQlkb19hZGRfbWFuX3ZpZXdlcihleGVjX21hbl9rb25xdWVyb3IpOworCXJldHVybiAoIXN0cm5jYXNlY21wKCJtYW4iLCBuYW1lLCBsZW4pIHx8CisJCSFzdHJuY2FzZWNtcCgid29tYW4iLCBuYW1lLCBsZW4pIHx8CisJCSFzdHJuY2FzZWNtcCgia29ucXVlcm9yIiwgbmFtZSwgbGVuKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRvX2FkZF9tYW5fdmlld2VyX2luZm8oY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICBzaXplX3QgbGVuLAorCQkJCSAgIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCXN0cnVjdCBtYW5fdmlld2VyX2luZm9fbGlzdCAqbmV3ID0geGNhbGxvYygxLCBzaXplb2YoKm5ldykgKyBsZW4gKyAxKTsKKworCXN0cm5jcHkobmV3LT5uYW1lLCBuYW1lLCBsZW4pOworCW5ldy0+aW5mbyA9IHhzdHJkdXAodmFsdWUpOworCW5ldy0+bmV4dCA9IG1hbl92aWV3ZXJfaW5mb19saXN0OworCW1hbl92aWV3ZXJfaW5mb19saXN0ID0gbmV3OworfQorCitzdGF0aWMgaW50IGFkZF9tYW5fdmlld2VyX3BhdGgoY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgICBzaXplX3QgbGVuLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmIChzdXBwb3J0ZWRfbWFuX3ZpZXdlcihuYW1lLCBsZW4pKQorCQlkb19hZGRfbWFuX3ZpZXdlcl9pbmZvKG5hbWUsIGxlbiwgdmFsdWUpOwogCWVsc2UKLQkJd2FybmluZygiJyVzJzogdW5zdXBwb3J0ZWQgbWFuIHZpZXdlci4iLCB2YWx1ZSk7CisJCXdhcm5pbmcoIiclcyc6IHBhdGggZm9yIHVuc3VwcG9ydGVkIG1hbiB2aWV3ZXIuXG4iCisJCQkiUGxlYXNlIGNvbnNpZGVyIHVzaW5nICdtYW4uPHRvb2w+LmNtZCcgaW5zdGVhZC4iLAorCQkJbmFtZSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnaXRfaGVscF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3N0YXRpYyBpbnQgYWRkX21hbl92aWV3ZXJfY21kKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgICBzaXplX3QgbGVuLAorCQkJICAgICAgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKHN1cHBvcnRlZF9tYW5fdmlld2VyKG5hbWUsIGxlbikpCisJCXdhcm5pbmcoIiclcyc6IGNtZCBmb3Igc3VwcG9ydGVkIG1hbiB2aWV3ZXIuXG4iCisJCQkiUGxlYXNlIGNvbnNpZGVyIHVzaW5nICdtYW4uPHRvb2w+LnBhdGgnIGluc3RlYWQuIiwKKwkJCW5hbWUpOworCWVsc2UKKwkJZG9fYWRkX21hbl92aWV3ZXJfaW5mbyhuYW1lLCBsZW4sIHZhbHVlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkZF9tYW5fdmlld2VyX2luZm8oY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwljb25zdCBjaGFyICpuYW1lID0gdmFyICsgNDsKKwljb25zdCBjaGFyICpzdWJrZXkgPSBzdHJyY2hyKG5hbWUsICcuJyk7CisKKwlpZiAoIXN1YmtleSkKKwkJcmV0dXJuIGVycm9yKCJDb25maWcgd2l0aCBubyBrZXkgZm9yIG1hbiB2aWV3ZXI6ICVzIiwgbmFtZSk7CisKKwlpZiAoIXN0cmNtcChzdWJrZXksICIucGF0aCIpKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJcmV0dXJuIGFkZF9tYW5fdmlld2VyX3BhdGgobmFtZSwgc3Via2V5IC0gbmFtZSwgdmFsdWUpOworCX0KKwlpZiAoIXN0cmNtcChzdWJrZXksICIuY21kIikpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQlyZXR1cm4gYWRkX21hbl92aWV3ZXJfY21kKG5hbWUsIHN1YmtleSAtIG5hbWUsIHZhbHVlKTsKKwl9CisKKwl3YXJuaW5nKCInJXMnOiB1bnN1cHBvcnRlZCBtYW4gdmlld2VyIHN1YiBrZXkuIiwgc3Via2V5KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaXRfaGVscF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCiB7CiAJaWYgKCFzdHJjbXAodmFyLCAiaGVscC5mb3JtYXQiKSkgewogCQlpZiAoIXZhbHVlKQpAQCAtMTU2LDkgKzI2MywxMyBAQAogCWlmICghc3RyY21wKHZhciwgIm1hbi52aWV3ZXIiKSkgewogCQlpZiAoIXZhbHVlKQogCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7Ci0JCXJldHVybiBhZGRfbWFuX3ZpZXdlcih2YWx1ZSk7CisJCWFkZF9tYW5fdmlld2VyKHZhbHVlKTsKKwkJcmV0dXJuIDA7CiAJfQotCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSk7CisJaWYgKCFwcmVmaXhjbXAodmFyLCAibWFuLiIpKQorCQlyZXR1cm4gYWRkX21hbl92aWV3ZXJfaW5mbyh2YXIsIHZhbHVlKTsKKworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOwogfQogCiAvKiBtb3N0IEdVSSB0ZXJtaW5hbHMgc2V0IENPTFVNTlMgKGFsdGhvdWdoIHNvbWUgZG9uJ3QgZXhwb3J0IGl0KSAqLwpAQCAtNDUzLDYgKzU2NCwyMiBAQAogCXN0cmJ1Zl9yZWxlYXNlKCZuZXdfcGF0aCk7CiB9CiAKK3N0YXRpYyB2b2lkIGV4ZWNfdmlld2VyKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhZ2UpCit7CisJY29uc3QgY2hhciAqaW5mbyA9IGdldF9tYW5fdmlld2VyX2luZm8obmFtZSk7CisKKwlpZiAoIXN0cmNhc2VjbXAobmFtZSwgIm1hbiIpKQorCQlleGVjX21hbl9tYW4oaW5mbywgcGFnZSk7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAobmFtZSwgIndvbWFuIikpCisJCWV4ZWNfd29tYW5fZW1hY3MoaW5mbywgcGFnZSk7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAobmFtZSwgImtvbnF1ZXJvciIpKQorCQlleGVjX21hbl9rb25xdWVyb3IoaW5mbywgcGFnZSk7CisJZWxzZSBpZiAoaW5mbykKKwkJZXhlY19tYW5fY21kKGluZm8sIHBhZ2UpOworCWVsc2UKKwkJd2FybmluZygiJyVzJzogdW5rbm93biBtYW4gdmlld2VyLiIsIG5hbWUpOworfQorCiBzdGF0aWMgdm9pZCBzaG93X21hbl9wYWdlKGNvbnN0IGNoYXIgKmdpdF9jbWQpCiB7CiAJc3RydWN0IG1hbl92aWV3ZXJfbGlzdCAqdmlld2VyOwpAQCAtNDYxLDkgKzU4OCw5IEBACiAJc2V0dXBfbWFuX3BhdGgoKTsKIAlmb3IgKHZpZXdlciA9IG1hbl92aWV3ZXJfbGlzdDsgdmlld2VyOyB2aWV3ZXIgPSB2aWV3ZXItPm5leHQpCiAJewotCQl2aWV3ZXItPmV4ZWMocGFnZSk7IC8qIHdpbGwgcmV0dXJuIHdoZW4gdW5hYmxlICovCisJCWV4ZWNfdmlld2VyKHZpZXdlci0+bmFtZSwgcGFnZSk7IC8qIHdpbGwgcmV0dXJuIHdoZW4gdW5hYmxlICovCiAJfQotCWV4ZWNfbWFuX21hbihwYWdlKTsKKwlleGVjX3ZpZXdlcigibWFuIiwgcGFnZSk7CiAJZGllKCJubyBtYW4gdmlld2VyIGhhbmRsZWQgdGhlIHJlcXVlc3QiKTsKIH0KIApAQCAtNTE0LDcgKzY0MSw3IEBACiAJY29uc3QgY2hhciAqYWxpYXM7CiAKIAlzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseSgmbm9uZ2l0KTsKLQlnaXRfY29uZmlnKGdpdF9oZWxwX2NvbmZpZyk7CisJZ2l0X2NvbmZpZyhnaXRfaGVscF9jb25maWcsIE5VTEwpOwogCiAJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgYnVpbHRpbl9oZWxwX29wdGlvbnMsCiAJCQlidWlsdGluX2hlbHBfdXNhZ2UsIDApOwpAQCAtNTIyLDEyICs2NDksMTQgQEAKIAlpZiAoc2hvd19hbGwpIHsKIAkJcHJpbnRmKCJ1c2FnZTogJXNcblxuIiwgZ2l0X3VzYWdlX3N0cmluZyk7CiAJCWxpc3RfY29tbWFuZHMoKTsKKwkJcHJpbnRmKCIlc1xuIiwgZ2l0X21vcmVfaW5mb19zdHJpbmcpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoIWFyZ3ZbMF0pIHsKIAkJcHJpbnRmKCJ1c2FnZTogJXNcblxuIiwgZ2l0X3VzYWdlX3N0cmluZyk7CiAJCWxpc3RfY29tbW9uX2NtZHNfaGVscCgpOworCQlwcmludGYoIlxuJXNcbiIsIGdpdF9tb3JlX2luZm9fc3RyaW5nKTsKIAkJcmV0dXJuIDA7CiAJfQogCmRpZmYgLS1naXQgYS9odHRwLXB1c2guYyBiL2h0dHAtcHVzaC5jCmluZGV4IDViMjMwMzguLjY2NTcxMmEgMTAwNjQ0Ci0tLSBhL2h0dHAtcHVzaC5jCisrKyBiL2h0dHAtcHVzaC5jCkBAIC05LDYgKzksNyBAQAogI2luY2x1ZGUgInJldmlzaW9uLmgiCiAjaW5jbHVkZSAiZXhlY19jbWQuaCIKICNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJsaXN0LW9iamVjdHMuaCIKIAogI2luY2x1ZGUgPGV4cGF0Lmg+CiAKQEAgLTEzNDksNiArMTM1MCwyNCBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIHZvaWQgcmVtb3ZlX2xvY2tzKHZvaWQpCit7CisJc3RydWN0IHJlbW90ZV9sb2NrICpsb2NrID0gcmVtb3RlLT5sb2NrczsKKworCWZwcmludGYoc3RkZXJyLCAiUmVtb3ZpbmcgcmVtb3RlIGxvY2tzLi4uXG4iKTsKKwl3aGlsZSAobG9jaykgeworCQl1bmxvY2tfcmVtb3RlKGxvY2spOworCQlsb2NrID0gbG9jay0+bmV4dDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9sb2Nrc19vbl9zaWduYWwoaW50IHNpZ25vKQoreworCXJlbW92ZV9sb2NrcygpOworCXNpZ25hbChzaWdubywgU0lHX0RGTCk7CisJcmFpc2Uoc2lnbm8pOworfQorCiBzdGF0aWMgdm9pZCByZW1vdGVfbHMoY29uc3QgY2hhciAqcGF0aCwgaW50IGZsYWdzLAogCQkgICAgICB2b2lkICgqdXNlckZ1bmMpKHN0cnVjdCByZW1vdGVfbHNfY3R4ICpscyksCiAJCSAgICAgIHZvaWQgKnVzZXJEYXRhKTsKQEAgLTE3NTksMTUgKzE3NzgsMTUgQEAKIHN0YXRpYyB2b2lkIG9uZV9yZW1vdGVfcmVmKGNoYXIgKnJlZm5hbWUpCiB7CiAJc3RydWN0IHJlZiAqcmVmOwotCXVuc2lnbmVkIGNoYXIgcmVtb3RlX3NoYTFbMjBdOwogCXN0cnVjdCBvYmplY3QgKm9iajsKLQlpbnQgbGVuID0gc3RybGVuKHJlZm5hbWUpICsgMTsKIAotCWlmIChodHRwX2ZldGNoX3JlZihyZW1vdGUtPnVybCwgcmVmbmFtZSArIDUgLyogInJlZnMvIiAqLywKLQkJCSAgIHJlbW90ZV9zaGExKSAhPSAwKSB7CisJcmVmID0gYWxsb2NfcmVmX2Zyb21fc3RyKHJlZm5hbWUpOworCisJaWYgKGh0dHBfZmV0Y2hfcmVmKHJlbW90ZS0+dXJsLCByZWYpICE9IDApIHsKIAkJZnByaW50ZihzdGRlcnIsCiAJCQkiVW5hYmxlIHRvIGZldGNoIHJlZiAlcyBmcm9tICVzXG4iLAogCQkJcmVmbmFtZSwgcmVtb3RlLT51cmwpOworCQlmcmVlKHJlZik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTE3NzUsMTggKzE3OTQsMTUgQEAKIAkgKiBGZXRjaCBhIGNvcHkgb2YgdGhlIG9iamVjdCBpZiBpdCBkb2Vzbid0IGV4aXN0IGxvY2FsbHkgLSBpdAogCSAqIG1heSBiZSByZXF1aXJlZCBmb3IgdXBkYXRpbmcgc2VydmVyIGluZm8gbGF0ZXIuCiAJICovCi0JaWYgKHJlbW90ZS0+Y2FuX3VwZGF0ZV9pbmZvX3JlZnMgJiYgIWhhc19zaGExX2ZpbGUocmVtb3RlX3NoYTEpKSB7Ci0JCW9iaiA9IGxvb2t1cF91bmtub3duX29iamVjdChyZW1vdGVfc2hhMSk7CisJaWYgKHJlbW90ZS0+Y2FuX3VwZGF0ZV9pbmZvX3JlZnMgJiYgIWhhc19zaGExX2ZpbGUocmVmLT5vbGRfc2hhMSkpIHsKKwkJb2JqID0gbG9va3VwX3Vua25vd25fb2JqZWN0KHJlZi0+b2xkX3NoYTEpOwogCQlpZiAob2JqKSB7CiAJCQlmcHJpbnRmKHN0ZGVyciwJIiAgZmV0Y2ggJXMgZm9yICVzXG4iLAotCQkJCXNoYTFfdG9faGV4KHJlbW90ZV9zaGExKSwgcmVmbmFtZSk7CisJCQkJc2hhMV90b19oZXgocmVmLT5vbGRfc2hhMSksIHJlZm5hbWUpOwogCQkJYWRkX2ZldGNoX3JlcXVlc3Qob2JqKTsKIAkJfQogCX0KIAotCXJlZiA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpyZWYpICsgbGVuKTsKLQloYXNoY3B5KHJlZi0+b2xkX3NoYTEsIHJlbW90ZV9zaGExKTsKLQltZW1jcHkocmVmLT5uYW1lLCByZWZuYW1lLCBsZW4pOwogCSpyZW1vdGVfdGFpbCA9IHJlZjsKIAlyZW1vdGVfdGFpbCA9ICZyZWYtPm5leHQ7CiB9CkBAIC0xODYzLDYxICsxODc5LDM5IEBACiAJcmV0dXJuIGZvdW5kOwogfQogCi1zdGF0aWMgdm9pZCBtYXJrX2VkZ2VfcGFyZW50c191bmludGVyZXN0aW5nKHN0cnVjdCBjb21taXQgKmNvbW1pdCkKLXsKLQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHM7Ci0KLQlmb3IgKHBhcmVudHMgPSBjb21taXQtPnBhcmVudHM7IHBhcmVudHM7IHBhcmVudHMgPSBwYXJlbnRzLT5uZXh0KSB7Ci0JCXN0cnVjdCBjb21taXQgKnBhcmVudCA9IHBhcmVudHMtPml0ZW07Ci0JCWlmICghKHBhcmVudC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykpCi0JCQljb250aW51ZTsKLQkJbWFya190cmVlX3VuaW50ZXJlc3RpbmcocGFyZW50LT50cmVlKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIG1hcmtfZWRnZXNfdW5pbnRlcmVzdGluZyhzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QpCi17Ci0JZm9yICggOyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkgewotCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsaXN0LT5pdGVtOwotCi0JCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpIHsKLQkJCW1hcmtfdHJlZV91bmludGVyZXN0aW5nKGNvbW1pdC0+dHJlZSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQltYXJrX2VkZ2VfcGFyZW50c191bmludGVyZXN0aW5nKGNvbW1pdCk7Ci0JfQotfQotCiBzdGF0aWMgdm9pZCBhZGRfcmVtb3RlX2luZm9fcmVmKHN0cnVjdCByZW1vdGVfbHNfY3R4ICpscykKIHsKIAlzdHJ1Y3Qgc3RyYnVmICpidWYgPSAoc3RydWN0IHN0cmJ1ZiAqKWxzLT51c2VyRGF0YTsKLQl1bnNpZ25lZCBjaGFyIHJlbW90ZV9zaGExWzIwXTsKIAlzdHJ1Y3Qgb2JqZWN0ICpvOwogCWludCBsZW47CiAJY2hhciAqcmVmX2luZm87CisJc3RydWN0IHJlZiAqcmVmOwogCi0JaWYgKGh0dHBfZmV0Y2hfcmVmKHJlbW90ZS0+dXJsLCBscy0+ZGVudHJ5X25hbWUgKyA1IC8qICJyZWZzLyIgKi8sCi0JCQkgICByZW1vdGVfc2hhMSkgIT0gMCkgeworCXJlZiA9IGFsbG9jX3JlZl9mcm9tX3N0cihscy0+ZGVudHJ5X25hbWUpOworCisJaWYgKGh0dHBfZmV0Y2hfcmVmKHJlbW90ZS0+dXJsLCByZWYpICE9IDApIHsKIAkJZnByaW50ZihzdGRlcnIsCiAJCQkiVW5hYmxlIHRvIGZldGNoIHJlZiAlcyBmcm9tICVzXG4iLAogCQkJbHMtPmRlbnRyeV9uYW1lLCByZW1vdGUtPnVybCk7CiAJCWFib3J0ZWQgPSAxOworCQlmcmVlKHJlZik7CiAJCXJldHVybjsKIAl9CiAKLQlvID0gcGFyc2Vfb2JqZWN0KHJlbW90ZV9zaGExKTsKKwlvID0gcGFyc2Vfb2JqZWN0KHJlZi0+b2xkX3NoYTEpOwogCWlmICghbykgewogCQlmcHJpbnRmKHN0ZGVyciwKIAkJCSJVbmFibGUgdG8gcGFyc2Ugb2JqZWN0ICVzIGZvciByZW1vdGUgcmVmICVzXG4iLAotCQkJc2hhMV90b19oZXgocmVtb3RlX3NoYTEpLCBscy0+ZGVudHJ5X25hbWUpOworCQkJc2hhMV90b19oZXgocmVmLT5vbGRfc2hhMSksIGxzLT5kZW50cnlfbmFtZSk7CiAJCWFib3J0ZWQgPSAxOworCQlmcmVlKHJlZik7CiAJCXJldHVybjsKIAl9CiAKIAlsZW4gPSBzdHJsZW4obHMtPmRlbnRyeV9uYW1lKSArIDQyOwogCXJlZl9pbmZvID0geGNhbGxvYyhsZW4gKyAxLCAxKTsKIAlzcHJpbnRmKHJlZl9pbmZvLCAiJXMJJXNcbiIsCi0JCXNoYTFfdG9faGV4KHJlbW90ZV9zaGExKSwgbHMtPmRlbnRyeV9uYW1lKTsKKwkJc2hhMV90b19oZXgocmVmLT5vbGRfc2hhMSksIGxzLT5kZW50cnlfbmFtZSk7CiAJZndyaXRlX2J1ZmZlcihyZWZfaW5mbywgMSwgbGVuLCBidWYpOwogCWZyZWUocmVmX2luZm8pOwogCkBAIC0xOTMyLDYgKzE5MjYsNyBAQAogCQkJZnJlZShyZWZfaW5mbyk7CiAJCX0KIAl9CisJZnJlZShyZWYpOwogfQogCiBzdGF0aWMgdm9pZCB1cGRhdGVfcmVtb3RlX2luZm9fcmVmcyhzdHJ1Y3QgcmVtb3RlX2xvY2sgKmxvY2spCkBAIC0yMjU1LDYgKzIyNTAsMTEgQEAKIAkJZ290byBjbGVhbnVwOwogCX0KIAorCXNpZ25hbChTSUdJTlQsIHJlbW92ZV9sb2Nrc19vbl9zaWduYWwpOworCXNpZ25hbChTSUdIVVAsIHJlbW92ZV9sb2Nrc19vbl9zaWduYWwpOworCXNpZ25hbChTSUdRVUlULCByZW1vdmVfbG9ja3Nfb25fc2lnbmFsKTsKKwlzaWduYWwoU0lHVEVSTSwgcmVtb3ZlX2xvY2tzX29uX3NpZ25hbCk7CisKIAkvKiBDaGVjayB3aGV0aGVyIHRoZSByZW1vdGUgaGFzIHNlcnZlciBpbmZvIGZpbGVzICovCiAJcmVtb3RlLT5jYW5fdXBkYXRlX2luZm9fcmVmcyA9IDA7CiAJcmVtb3RlLT5oYXNfaW5mb19yZWZzID0gcmVtb3RlX2V4aXN0cygiaW5mby9yZWZzIik7CkBAIC0yMzg0LDYgKzIzODQsNyBAQAogCQl9CiAJCWluaXRfcmV2aXNpb25zKCZyZXZzLCBzZXR1cF9naXRfZGlyZWN0b3J5KCkpOwogCQlzZXR1cF9yZXZpc2lvbnMoY29tbWl0X2FyZ2MsIGNvbW1pdF9hcmd2LCAmcmV2cywgTlVMTCk7CisJCXJldnMuZWRnZV9oaW50ID0gMDsgLyoganVzdCBpbiBjYXNlICovCiAJCWZyZWUobmV3X3NoYTFfaGV4KTsKIAkJaWYgKG9sZF9zaGExX2hleCkgewogCQkJZnJlZShvbGRfc2hhMV9oZXgpOwpAQCAtMjM5NCw3ICsyMzk1LDcgQEAKIAkJcHVzaGluZyA9IDA7CiAJCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsoJnJldnMpKQogCQkJZGllKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpOwotCQltYXJrX2VkZ2VzX3VuaW50ZXJlc3RpbmcocmV2cy5jb21taXRzKTsKKwkJbWFya19lZGdlc191bmludGVyZXN0aW5nKHJldnMuY29tbWl0cywgJnJldnMsIE5VTEwpOwogCQlvYmplY3RzX3RvX3NlbmQgPSBnZXRfZGVsdGEoJnJldnMsIHJlZl9sb2NrKTsKIAkJZmluaXNoX2FsbF9hY3RpdmVfc2xvdHMoKTsKIApkaWZmIC0tZ2l0IGEvaHR0cC13YWxrZXIuYyBiL2h0dHAtd2Fsa2VyLmMKaW5kZXggN2JkYTM0ZC4uNzQwMzMwNiAxMDA2NDQKLS0tIGEvaHR0cC13YWxrZXIuYworKysgYi9odHRwLXdhbGtlci5jCkBAIC00NDIsNiArNDQyLDggQEAKIAkJcmV0dXJuIC0xOwogCiAJbmV3X3BhY2sgPSBwYXJzZV9wYWNrX2luZGV4KHNoYTEpOworCWlmICghbmV3X3BhY2spCisJCXJldHVybiAtMTsgLyogcGFyc2VfcGFja19pbmRleCgpIGFscmVhZHkgaXNzdWVkIGVycm9yIG1lc3NhZ2UgKi8KIAluZXdfcGFjay0+bmV4dCA9IHJlcG8tPnBhY2tzOwogCXJlcG8tPnBhY2tzID0gbmV3X3BhY2s7CiAJcmV0dXJuIDA7CkBAIC04ODgsMTAgKzg5MCwxMCBAQAogCQkgICAgIGRhdGEtPmFsdC0+YmFzZSk7CiB9CiAKLXN0YXRpYyBpbnQgZmV0Y2hfcmVmKHN0cnVjdCB3YWxrZXIgKndhbGtlciwgY2hhciAqcmVmLCB1bnNpZ25lZCBjaGFyICpzaGExKQorc3RhdGljIGludCBmZXRjaF9yZWYoc3RydWN0IHdhbGtlciAqd2Fsa2VyLCBzdHJ1Y3QgcmVmICpyZWYpCiB7CiAJc3RydWN0IHdhbGtlcl9kYXRhICpkYXRhID0gd2Fsa2VyLT5kYXRhOwotCXJldHVybiBodHRwX2ZldGNoX3JlZihkYXRhLT5hbHQtPmJhc2UsIHJlZiwgc2hhMSk7CisJcmV0dXJuIGh0dHBfZmV0Y2hfcmVmKGRhdGEtPmFsdC0+YmFzZSwgcmVmKTsKIH0KIAogc3RhdGljIHZvaWQgY2xlYW51cChzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIpCmRpZmYgLS1naXQgYS9odHRwLmMgYi9odHRwLmMKaW5kZXggMjU2YTVmMS4uMTEwOGFiNCAxMDA2NDQKLS0tIGEvaHR0cC5jCisrKyBiL2h0dHAuYwpAQCAtMTMsMTQgKzEzLDE0IEBACiBjaGFyIGN1cmxfZXJyb3JzdHJbQ1VSTF9FUlJPUl9TSVpFXTsKIAogc3RhdGljIGludCBjdXJsX3NzbF92ZXJpZnkgPSAtMTsKLXN0YXRpYyBjaGFyICpzc2xfY2VydCA9IE5VTEw7CitzdGF0aWMgY29uc3QgY2hhciAqc3NsX2NlcnQgPSBOVUxMOwogI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzA5MDIKLXN0YXRpYyBjaGFyICpzc2xfa2V5ID0gTlVMTDsKK3N0YXRpYyBjb25zdCBjaGFyICpzc2xfa2V5ID0gTlVMTDsKICNlbmRpZgogI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzA5MDgKLXN0YXRpYyBjaGFyICpzc2xfY2FwYXRoID0gTlVMTDsKK3N0YXRpYyBjb25zdCBjaGFyICpzc2xfY2FwYXRoID0gTlVMTDsKICNlbmRpZgotc3RhdGljIGNoYXIgKnNzbF9jYWluZm8gPSBOVUxMOworc3RhdGljIGNvbnN0IGNoYXIgKnNzbF9jYWluZm8gPSBOVUxMOwogc3RhdGljIGxvbmcgY3VybF9sb3dfc3BlZWRfbGltaXQgPSAtMTsKIHN0YXRpYyBsb25nIGN1cmxfbG93X3NwZWVkX3RpbWUgPSAtMTsKIHN0YXRpYyBpbnQgY3VybF9mdHBfbm9fZXBzdiA9IDA7CkBAIC0zMCwxMCArMzAsMTEgQEAKIAogc3RhdGljIHN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICphY3RpdmVfcXVldWVfaGVhZCA9IE5VTEw7CiAKLXNpemVfdCBmcmVhZF9idWZmZXIodm9pZCAqcHRyLCBzaXplX3QgZWx0c2l6ZSwgc2l6ZV90IG5tZW1iLAotCQkJICAgc3RydWN0IGJ1ZmZlciAqYnVmZmVyKQorc2l6ZV90IGZyZWFkX2J1ZmZlcih2b2lkICpwdHIsIHNpemVfdCBlbHRzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQgKmJ1ZmZlcl8pCiB7CiAJc2l6ZV90IHNpemUgPSBlbHRzaXplICogbm1lbWI7CisJc3RydWN0IGJ1ZmZlciAqYnVmZmVyID0gYnVmZmVyXzsKKwogCWlmIChzaXplID4gYnVmZmVyLT5idWYubGVuIC0gYnVmZmVyLT5wb3NuKQogCQlzaXplID0gYnVmZmVyLT5idWYubGVuIC0gYnVmZmVyLT5wb3NuOwogCW1lbWNweShwdHIsIGJ1ZmZlci0+YnVmLmJ1ZiArIGJ1ZmZlci0+cG9zbiwgc2l6ZSk7CkBAIC00MiwxNyArNDMsMTcgQEAKIAlyZXR1cm4gc2l6ZTsKIH0KIAotc2l6ZV90IGZ3cml0ZV9idWZmZXIoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3QgZWx0c2l6ZSwKLQkJCSAgICBzaXplX3Qgbm1lbWIsIHN0cnVjdCBzdHJidWYgKmJ1ZmZlcikKK3NpemVfdCBmd3JpdGVfYnVmZmVyKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IGVsdHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCAqYnVmZmVyXykKIHsKIAlzaXplX3Qgc2l6ZSA9IGVsdHNpemUgKiBubWVtYjsKKwlzdHJ1Y3Qgc3RyYnVmICpidWZmZXIgPSBidWZmZXJfOworCiAJc3RyYnVmX2FkZChidWZmZXIsIHB0ciwgc2l6ZSk7CiAJZGF0YV9yZWNlaXZlZCsrOwogCXJldHVybiBzaXplOwogfQogCi1zaXplX3QgZndyaXRlX251bGwoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3QgZWx0c2l6ZSwKLQkJCSAgc2l6ZV90IG5tZW1iLCBzdHJ1Y3Qgc3RyYnVmICpidWZmZXIpCitzaXplX3QgZndyaXRlX251bGwoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3QgZWx0c2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkICpzdHJidWYpCiB7CiAJZGF0YV9yZWNlaXZlZCsrOwogCXJldHVybiBlbHRzaXplICogbm1lbWI7CkBAIC05MCw3ICs5MSw3IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBodHRwX29wdGlvbnMoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3N0YXRpYyBpbnQgaHR0cF9vcHRpb25zKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQogewogCWlmICghc3RyY21wKCJodHRwLnNzbHZlcmlmeSIsIHZhcikpIHsKIAkJaWYgKGN1cmxfc3NsX3ZlcmlmeSA9PSAtMSkgewpAQCAtMTAwLDM5ICsxMDEsMjcgQEAKIAl9CiAKIAlpZiAoIXN0cmNtcCgiaHR0cC5zc2xjZXJ0IiwgdmFyKSkgewotCQlpZiAoc3NsX2NlcnQgPT0gTlVMTCkgewotCQkJaWYgKCF2YWx1ZSkKLQkJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKLQkJCXNzbF9jZXJ0ID0geHN0cmR1cCh2YWx1ZSk7Ci0JCX0KKwkJaWYgKHNzbF9jZXJ0ID09IE5VTEwpCisJCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJnNzbF9jZXJ0LCB2YXIsIHZhbHVlKTsKIAkJcmV0dXJuIDA7CiAJfQogI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzA5MDIKIAlpZiAoIXN0cmNtcCgiaHR0cC5zc2xrZXkiLCB2YXIpKSB7Ci0JCWlmIChzc2xfa2V5ID09IE5VTEwpIHsKLQkJCWlmICghdmFsdWUpCi0JCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7Ci0JCQlzc2xfa2V5ID0geHN0cmR1cCh2YWx1ZSk7Ci0JCX0KKwkJaWYgKHNzbF9rZXkgPT0gTlVMTCkKKwkJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmc3NsX2tleSwgdmFyLCB2YWx1ZSk7CiAJCXJldHVybiAwOwogCX0KICNlbmRpZgogI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzA5MDgKIAlpZiAoIXN0cmNtcCgiaHR0cC5zc2xjYXBhdGgiLCB2YXIpKSB7Ci0JCWlmIChzc2xfY2FwYXRoID09IE5VTEwpIHsKLQkJCWlmICghdmFsdWUpCi0JCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7Ci0JCQlzc2xfY2FwYXRoID0geHN0cmR1cCh2YWx1ZSk7Ci0JCX0KKwkJaWYgKHNzbF9jYXBhdGggPT0gTlVMTCkKKwkJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmc3NsX2NhcGF0aCwgdmFyLCB2YWx1ZSk7CiAJCXJldHVybiAwOwogCX0KICNlbmRpZgogCWlmICghc3RyY21wKCJodHRwLnNzbGNhaW5mbyIsIHZhcikpIHsKLQkJaWYgKHNzbF9jYWluZm8gPT0gTlVMTCkgewotCQkJaWYgKCF2YWx1ZSkKLQkJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKLQkJCXNzbF9jYWluZm8gPSB4c3RyZHVwKHZhbHVlKTsKLQkJfQorCQlpZiAoc3NsX2NhaW5mbyA9PSBOVUxMKQorCQkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZzc2xfY2FpbmZvLCB2YXIsIHZhbHVlKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xNjksNyArMTU4LDcgQEAKIAl9CiAKIAkvKiBGYWxsIGJhY2sgb24gdGhlIGRlZmF1bHQgb25lcyAqLwotCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSk7CisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CiB9CiAKIHN0YXRpYyBDVVJMKiBnZXRfY3VybF9oYW5kbGUodm9pZCkKQEAgLTI2Myw3ICsyNTIsNyBAQAogCWlmIChsb3dfc3BlZWRfdGltZSAhPSBOVUxMKQogCQljdXJsX2xvd19zcGVlZF90aW1lID0gc3RydG9sKGxvd19zcGVlZF90aW1lLCBOVUxMLCAxMCk7CiAKLQlnaXRfY29uZmlnKGh0dHBfb3B0aW9ucyk7CisJZ2l0X2NvbmZpZyhodHRwX29wdGlvbnMsIE5VTEwpOwogCiAJaWYgKGN1cmxfc3NsX3ZlcmlmeSA9PSAtMSkKIAkJY3VybF9zc2xfdmVyaWZ5ID0gMTsKQEAgLTU4MywxNCArNTcyLDE1IEBACiAJaW50IGxlbiwgYmFzZWxlbiwgY2g7CiAKIAliYXNlbGVuID0gc3RybGVuKGJhc2UpOwotCWxlbiA9IGJhc2VsZW4gKyA3OyAvKiAiL3JlZnMvIiArIE5VTCAqLworCWxlbiA9IGJhc2VsZW4gKyAyOyAvKiAnLycgYWZ0ZXIgYmFzZSBhbmQgdGVybWluYXRpbmcgTlVMICovCiAJZm9yIChjcCA9IHJlZjsgKGNoID0gKmNwKSAhPSAwOyBjcCsrLCBsZW4rKykKIAkJaWYgKG5lZWRzX3F1b3RlKGNoKSkKIAkJCWxlbiArPSAyOyAvKiBleHRyYSB0d28gaGV4IHBsdXMgcmVwbGFjZW1lbnQgJSAqLwogCXFyZWYgPSB4bWFsbG9jKGxlbik7CiAJbWVtY3B5KHFyZWYsIGJhc2UsIGJhc2VsZW4pOwotCW1lbWNweShxcmVmICsgYmFzZWxlbiwgIi9yZWZzLyIsIDYpOwotCWZvciAoY3AgPSByZWYsIGRwID0gcXJlZiArIGJhc2VsZW4gKyA2OyAoY2ggPSAqY3ApICE9IDA7IGNwKyspIHsKKwlkcCA9IHFyZWYgKyBiYXNlbGVuOworCSooZHArKykgPSAnLyc7CisJZm9yIChjcCA9IHJlZjsgKGNoID0gKmNwKSAhPSAwOyBjcCsrKSB7CiAJCWlmIChuZWVkc19xdW90ZShjaCkpIHsKIAkJCSpkcCsrID0gJyUnOwogCQkJKmRwKysgPSBoZXgoKGNoID4+IDQpICYgMHhGKTsKQEAgLTYwNCw3ICs1OTQsNyBAQAogCXJldHVybiBxcmVmOwogfQogCi1pbnQgaHR0cF9mZXRjaF9yZWYoY29uc3QgY2hhciAqYmFzZSwgY29uc3QgY2hhciAqcmVmLCB1bnNpZ25lZCBjaGFyICpzaGExKQoraW50IGh0dHBfZmV0Y2hfcmVmKGNvbnN0IGNoYXIgKmJhc2UsIHN0cnVjdCByZWYgKnJlZikKIHsKIAljaGFyICp1cmw7CiAJc3RydWN0IHN0cmJ1ZiBidWZmZXIgPSBTVFJCVUZfSU5JVDsKQEAgLTYxMiw3ICs2MDIsNyBAQAogCXN0cnVjdCBzbG90X3Jlc3VsdHMgcmVzdWx0czsKIAlpbnQgcmV0OwogCi0JdXJsID0gcXVvdGVfcmVmX3VybChiYXNlLCByZWYpOworCXVybCA9IHF1b3RlX3JlZl91cmwoYmFzZSwgcmVmLT5uYW1lKTsKIAlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CiAJc2xvdC0+cmVzdWx0cyA9ICZyZXN1bHRzOwogCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCAmYnVmZmVyKTsKQEAgLTYyNCwxMiArNjE0LDE1IEBACiAJCWlmIChyZXN1bHRzLmN1cmxfcmVzdWx0ID09IENVUkxFX09LKSB7CiAJCQlzdHJidWZfcnRyaW0oJmJ1ZmZlcik7CiAJCQlpZiAoYnVmZmVyLmxlbiA9PSA0MCkKLQkJCQlyZXQgPSBnZXRfc2hhMV9oZXgoYnVmZmVyLmJ1Ziwgc2hhMSk7Ci0JCQllbHNlCisJCQkJcmV0ID0gZ2V0X3NoYTFfaGV4KGJ1ZmZlci5idWYsIHJlZi0+b2xkX3NoYTEpOworCQkJZWxzZSBpZiAoIXByZWZpeGNtcChidWZmZXIuYnVmLCAicmVmOiAiKSkgeworCQkJCXJlZi0+c3ltcmVmID0geHN0cmR1cChidWZmZXIuYnVmICsgNSk7CisJCQkJcmV0ID0gMDsKKwkJCX0gZWxzZQogCQkJCXJldCA9IDE7CiAJCX0gZWxzZSB7CiAJCQlyZXQgPSBlcnJvcigiQ291bGRuJ3QgZ2V0ICVzIGZvciAlc1xuJXMiLAotCQkJCSAgICB1cmwsIHJlZiwgY3VybF9lcnJvcnN0cik7CisJCQkJICAgIHVybCwgcmVmLT5uYW1lLCBjdXJsX2Vycm9yc3RyKTsKIAkJfQogCX0gZWxzZSB7CiAJCXJldCA9IGVycm9yKCJVbmFibGUgdG8gc3RhcnQgcmVxdWVzdCIpOwpkaWZmIC0tZ2l0IGEvaHR0cC5oIGIvaHR0cC5oCmluZGV4IDA0MTY5ZDUuLjkwNWI0NjIgMTAwNjQ0Ci0tLSBhL2h0dHAuaAorKysgYi9odHRwLmgKQEAgLTY0LDEyICs2NCw5IEBACiB9OwogCiAvKiBDdXJsIHJlcXVlc3QgcmVhZC93cml0ZSBjYWxsYmFja3MgKi8KLWV4dGVybiBzaXplX3QgZnJlYWRfYnVmZmVyKHZvaWQgKnB0ciwgc2l6ZV90IGVsdHNpemUsIHNpemVfdCBubWVtYiwKLQkJCSAgIHN0cnVjdCBidWZmZXIgKmJ1ZmZlcik7Ci1leHRlcm4gc2l6ZV90IGZ3cml0ZV9idWZmZXIoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3QgZWx0c2l6ZSwKLQkJCSAgICBzaXplX3Qgbm1lbWIsIHN0cnVjdCBzdHJidWYgKmJ1ZmZlcik7Ci1leHRlcm4gc2l6ZV90IGZ3cml0ZV9udWxsKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IGVsdHNpemUsCi0JCQkgIHNpemVfdCBubWVtYiwgc3RydWN0IHN0cmJ1ZiAqYnVmZmVyKTsKK2V4dGVybiBzaXplX3QgZnJlYWRfYnVmZmVyKHZvaWQgKnB0ciwgc2l6ZV90IGVsdHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCAqc3RyYnVmKTsKK2V4dGVybiBzaXplX3QgZndyaXRlX2J1ZmZlcihjb25zdCB2b2lkICpwdHIsIHNpemVfdCBlbHRzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQgKnN0cmJ1Zik7CitleHRlcm4gc2l6ZV90IGZ3cml0ZV9udWxsKGNvbnN0IHZvaWQgKnB0ciwgc2l6ZV90IGVsdHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCAqc3RyYnVmKTsKIAogLyogU2xvdCBsaWZlY3ljbGUgZnVuY3Rpb25zICovCiBleHRlcm4gc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKmdldF9hY3RpdmVfc2xvdCh2b2lkKTsKQEAgLTEwNSw2ICsxMDIsNiBAQAogCiAjZGVmaW5lIG1pc3NpbmdfdGFyZ2V0KGEpIG1pc3NpbmdfX3RhcmdldCgoYSktPmh0dHBfY29kZSwgKGEpLT5jdXJsX3Jlc3VsdCkKIAotZXh0ZXJuIGludCBodHRwX2ZldGNoX3JlZihjb25zdCBjaGFyICpiYXNlLCBjb25zdCBjaGFyICpyZWYsIHVuc2lnbmVkIGNoYXIgKnNoYTEpOworZXh0ZXJuIGludCBodHRwX2ZldGNoX3JlZihjb25zdCBjaGFyICpiYXNlLCBzdHJ1Y3QgcmVmICpyZWYpOwogCiAjZW5kaWYgLyogSFRUUF9IICovCmRpZmYgLS1naXQgYS9pZGVudC5jIGIvaWRlbnQuYwppbmRleCBlZDQ0YTUzLi5iMzU1MDRhIDEwMDY0NAotLS0gYS9pZGVudC5jCisrKyBiL2lkZW50LmMKQEAgLTI1MCw2ICsyNTAsOSBAQAogCiBjb25zdCBjaGFyICpnaXRfY29tbWl0dGVyX2luZm8oaW50IGZsYWcpCiB7CisJaWYgKGdldGVudigiR0lUX0NPTU1JVFRFUl9OQU1FIikgJiYKKwkgICAgZ2V0ZW52KCJHSVRfQ09NTUlUVEVSX0VNQUlMIikpCisJCXVzZXJfaWRlbnRfZXhwbGljaXRseV9naXZlbiA9IDE7CiAJcmV0dXJuIGZtdF9pZGVudChnZXRlbnYoIkdJVF9DT01NSVRURVJfTkFNRSIpLAogCQkJIGdldGVudigiR0lUX0NPTU1JVFRFUl9FTUFJTCIpLAogCQkJIGdldGVudigiR0lUX0NPTU1JVFRFUl9EQVRFIiksCmRpZmYgLS1naXQgYS9pbWFwLXNlbmQuYyBiL2ltYXAtc2VuZC5jCmluZGV4IGRiNjU1OTcuLjFlYzEzMTAgMTAwNjQ0Ci0tLSBhL2ltYXAtc2VuZC5jCisrKyBiL2ltYXAtc2VuZC5jCkBAIC0xMjQ3LDcgKzEyNDcsNyBAQAogc3RhdGljIGNoYXIgKmltYXBfZm9sZGVyOwogCiBzdGF0aWMgaW50Ci1naXRfaW1hcF9jb25maWcoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWwpCitnaXRfaW1hcF9jb25maWcoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWwsIHZvaWQgKmNiKQogewogCWNoYXIgaW1hcF9rZXlbXSA9ICJpbWFwLiI7CiAKQEAgLTEyOTYsNyArMTI5Niw3IEBACiAJLyogaW5pdCB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKi8KIAlhcmM0X2luaXQoKTsKIAotCWdpdF9jb25maWcoIGdpdF9pbWFwX2NvbmZpZyApOworCWdpdF9jb25maWcoZ2l0X2ltYXBfY29uZmlnLCBOVUxMKTsKIAogCWlmICghaW1hcF9mb2xkZXIpIHsKIAkJZnByaW50Ziggc3RkZXJyLCAibm8gaW1hcCBzdG9yZSBzcGVjaWZpZWRcbiIgKTsKZGlmZiAtLWdpdCBhL2luZGV4LXBhY2suYyBiL2luZGV4LXBhY2suYwppbmRleCA5YzBjMjc4Li43ZDUzNDRhIDEwMDY0NAotLS0gYS9pbmRleC1wYWNrLmMKKysrIGIvaW5kZXgtcGFjay5jCkBAIC0yNiw2ICsyNiwxNCBAQAogCW9mZl90IG9mZnNldDsKIH07CiAKK3N0cnVjdCBiYXNlX2RhdGEgeworCXN0cnVjdCBiYXNlX2RhdGEgKmJhc2U7CisJc3RydWN0IGJhc2VfZGF0YSAqY2hpbGQ7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqb2JqOworCXZvaWQgKmRhdGE7CisJdW5zaWduZWQgbG9uZyBzaXplOworfTsKKwogLyoKICAqIEV2ZW4gaWYgc2l6ZW9mKHVuaW9uIGRlbHRhX2Jhc2UpID09IDI0IG9uIDY0LWJpdCBhcmNocywgd2UgcmVhbGx5IHdhbnQKICAqIHRvIG1lbWNtcCgpIG9ubHkgdGhlIGZpcnN0IDIwIGJ5dGVzLgpAQCAtNDMsNiArNTEsOCBAQAogCiBzdGF0aWMgc3RydWN0IG9iamVjdF9lbnRyeSAqb2JqZWN0czsKIHN0YXRpYyBzdHJ1Y3QgZGVsdGFfZW50cnkgKmRlbHRhczsKK3N0YXRpYyBzdHJ1Y3QgYmFzZV9kYXRhICpiYXNlX2NhY2hlOworc3RhdGljIHNpemVfdCBiYXNlX2NhY2hlX3VzZWQ7CiBzdGF0aWMgaW50IG5yX29iamVjdHM7CiBzdGF0aWMgaW50IG5yX2RlbHRhczsKIHN0YXRpYyBpbnQgbnJfcmVzb2x2ZWRfZGVsdGFzOwpAQCAtMjEwLDYgKzIyMCw0NiBAQAogCWRpZSgicGFjayBoYXMgYmFkIG9iamVjdCBhdCBvZmZzZXQgJWx1OiAlcyIsIG9mZnNldCwgYnVmKTsKIH0KIAorc3RhdGljIHZvaWQgcHJ1bmVfYmFzZV9kYXRhKHN0cnVjdCBiYXNlX2RhdGEgKnJldGFpbikKK3sKKwlzdHJ1Y3QgYmFzZV9kYXRhICpiID0gYmFzZV9jYWNoZTsKKwlmb3IgKGIgPSBiYXNlX2NhY2hlOworCSAgICAgYmFzZV9jYWNoZV91c2VkID4gZGVsdGFfYmFzZV9jYWNoZV9saW1pdCAmJiBiOworCSAgICAgYiA9IGItPmNoaWxkKSB7CisJCWlmIChiLT5kYXRhICYmIGIgIT0gcmV0YWluKSB7CisJCQlmcmVlKGItPmRhdGEpOworCQkJYi0+ZGF0YSA9IE5VTEw7CisJCQliYXNlX2NhY2hlX3VzZWQgLT0gYi0+c2l6ZTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgbGlua19iYXNlX2RhdGEoc3RydWN0IGJhc2VfZGF0YSAqYmFzZSwgc3RydWN0IGJhc2VfZGF0YSAqYykKK3sKKwlpZiAoYmFzZSkKKwkJYmFzZS0+Y2hpbGQgPSBjOworCWVsc2UKKwkJYmFzZV9jYWNoZSA9IGM7CisKKwljLT5iYXNlID0gYmFzZTsKKwljLT5jaGlsZCA9IE5VTEw7CisJYmFzZV9jYWNoZV91c2VkICs9IGMtPnNpemU7CisJcHJ1bmVfYmFzZV9kYXRhKGMpOworfQorCitzdGF0aWMgdm9pZCB1bmxpbmtfYmFzZV9kYXRhKHN0cnVjdCBiYXNlX2RhdGEgKmMpCit7CisJc3RydWN0IGJhc2VfZGF0YSAqYmFzZSA9IGMtPmJhc2U7CisJaWYgKGJhc2UpCisJCWJhc2UtPmNoaWxkID0gTlVMTDsKKwllbHNlCisJCWJhc2VfY2FjaGUgPSBOVUxMOworCWlmIChjLT5kYXRhKSB7CisJCWZyZWUoYy0+ZGF0YSk7CisJCWJhc2VfY2FjaGVfdXNlZCAtPSBjLT5zaXplOworCX0KK30KKwogc3RhdGljIHZvaWQgKnVucGFja19lbnRyeV9kYXRhKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJel9zdHJlYW0gc3RyZWFtOwpAQCAtNDI1LDMzICs0NzUsNjAgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHJlc29sdmVfZGVsdGEoc3RydWN0IG9iamVjdF9lbnRyeSAqZGVsdGFfb2JqLCB2b2lkICpiYXNlX2RhdGEsCi0JCQkgIHVuc2lnbmVkIGxvbmcgYmFzZV9zaXplLCBlbnVtIG9iamVjdF90eXBlIHR5cGUpCitzdGF0aWMgdm9pZCAqZ2V0X2Jhc2VfZGF0YShzdHJ1Y3QgYmFzZV9kYXRhICpjKQoreworCWlmICghYy0+ZGF0YSkgeworCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvYmogPSBjLT5vYmo7CisKKwkJaWYgKG9iai0+dHlwZSA9PSBPQkpfUkVGX0RFTFRBIHx8IG9iai0+dHlwZSA9PSBPQkpfT0ZTX0RFTFRBKSB7CisJCQl2b2lkICpiYXNlID0gZ2V0X2Jhc2VfZGF0YShjLT5iYXNlKTsKKwkJCXZvaWQgKnJhdyA9IGdldF9kYXRhX2Zyb21fcGFjayhvYmopOworCQkJYy0+ZGF0YSA9IHBhdGNoX2RlbHRhKAorCQkJCWJhc2UsIGMtPmJhc2UtPnNpemUsCisJCQkJcmF3LCBvYmotPnNpemUsCisJCQkJJmMtPnNpemUpOworCQkJZnJlZShyYXcpOworCQkJaWYgKCFjLT5kYXRhKQorCQkJCWJhZF9vYmplY3Qob2JqLT5pZHgub2Zmc2V0LCAiZmFpbGVkIHRvIGFwcGx5IGRlbHRhIik7CisJCX0gZWxzZQorCQkJYy0+ZGF0YSA9IGdldF9kYXRhX2Zyb21fcGFjayhvYmopOworCisJCWJhc2VfY2FjaGVfdXNlZCArPSBjLT5zaXplOworCQlwcnVuZV9iYXNlX2RhdGEoYyk7CisJfQorCXJldHVybiBjLT5kYXRhOworfQorCitzdGF0aWMgdm9pZCByZXNvbHZlX2RlbHRhKHN0cnVjdCBvYmplY3RfZW50cnkgKmRlbHRhX29iaiwKKwkJCSAgc3RydWN0IGJhc2VfZGF0YSAqYmFzZV9vYmosIGVudW0gb2JqZWN0X3R5cGUgdHlwZSkKIHsKIAl2b2lkICpkZWx0YV9kYXRhOwogCXVuc2lnbmVkIGxvbmcgZGVsdGFfc2l6ZTsKLQl2b2lkICpyZXN1bHQ7Ci0JdW5zaWduZWQgbG9uZyByZXN1bHRfc2l6ZTsKIAl1bmlvbiBkZWx0YV9iYXNlIGRlbHRhX2Jhc2U7CiAJaW50IGosIGZpcnN0LCBsYXN0OworCXN0cnVjdCBiYXNlX2RhdGEgcmVzdWx0OwogCiAJZGVsdGFfb2JqLT5yZWFsX3R5cGUgPSB0eXBlOwogCWRlbHRhX2RhdGEgPSBnZXRfZGF0YV9mcm9tX3BhY2soZGVsdGFfb2JqKTsKIAlkZWx0YV9zaXplID0gZGVsdGFfb2JqLT5zaXplOwotCXJlc3VsdCA9IHBhdGNoX2RlbHRhKGJhc2VfZGF0YSwgYmFzZV9zaXplLCBkZWx0YV9kYXRhLCBkZWx0YV9zaXplLAotCQkJICAgICAmcmVzdWx0X3NpemUpOworCXJlc3VsdC5kYXRhID0gcGF0Y2hfZGVsdGEoZ2V0X2Jhc2VfZGF0YShiYXNlX29iaiksIGJhc2Vfb2JqLT5zaXplLAorCQkJICAgICBkZWx0YV9kYXRhLCBkZWx0YV9zaXplLAorCQkJICAgICAmcmVzdWx0LnNpemUpOwogCWZyZWUoZGVsdGFfZGF0YSk7Ci0JaWYgKCFyZXN1bHQpCisJaWYgKCFyZXN1bHQuZGF0YSkKIAkJYmFkX29iamVjdChkZWx0YV9vYmotPmlkeC5vZmZzZXQsICJmYWlsZWQgdG8gYXBwbHkgZGVsdGEiKTsKLQlzaGExX29iamVjdChyZXN1bHQsIHJlc3VsdF9zaXplLCB0eXBlLCBkZWx0YV9vYmotPmlkeC5zaGExKTsKKwlzaGExX29iamVjdChyZXN1bHQuZGF0YSwgcmVzdWx0LnNpemUsIHR5cGUsIGRlbHRhX29iai0+aWR4LnNoYTEpOwogCW5yX3Jlc29sdmVkX2RlbHRhcysrOwogCisJcmVzdWx0Lm9iaiA9IGRlbHRhX29iajsKKwlsaW5rX2Jhc2VfZGF0YShiYXNlX29iaiwgJnJlc3VsdCk7CisKIAloYXNoY3B5KGRlbHRhX2Jhc2Uuc2hhMSwgZGVsdGFfb2JqLT5pZHguc2hhMSk7CiAJaWYgKCFmaW5kX2RlbHRhX2NoaWxkcmVuKCZkZWx0YV9iYXNlLCAmZmlyc3QsICZsYXN0KSkgewogCQlmb3IgKGogPSBmaXJzdDsgaiA8PSBsYXN0OyBqKyspIHsKIAkJCXN0cnVjdCBvYmplY3RfZW50cnkgKmNoaWxkID0gb2JqZWN0cyArIGRlbHRhc1tqXS5vYmpfbm87CiAJCQlpZiAoY2hpbGQtPnJlYWxfdHlwZSA9PSBPQkpfUkVGX0RFTFRBKQotCQkJCXJlc29sdmVfZGVsdGEoY2hpbGQsIHJlc3VsdCwgcmVzdWx0X3NpemUsIHR5cGUpOworCQkJCXJlc29sdmVfZGVsdGEoY2hpbGQsICZyZXN1bHQsIHR5cGUpOwogCQl9CiAJfQogCkBAIC00NjEsMTEgKzUzOCwxMSBAQAogCQlmb3IgKGogPSBmaXJzdDsgaiA8PSBsYXN0OyBqKyspIHsKIAkJCXN0cnVjdCBvYmplY3RfZW50cnkgKmNoaWxkID0gb2JqZWN0cyArIGRlbHRhc1tqXS5vYmpfbm87CiAJCQlpZiAoY2hpbGQtPnJlYWxfdHlwZSA9PSBPQkpfT0ZTX0RFTFRBKQotCQkJCXJlc29sdmVfZGVsdGEoY2hpbGQsIHJlc3VsdCwgcmVzdWx0X3NpemUsIHR5cGUpOworCQkJCXJlc29sdmVfZGVsdGEoY2hpbGQsICZyZXN1bHQsIHR5cGUpOwogCQl9CiAJfQogCi0JZnJlZShyZXN1bHQpOworCXVubGlua19iYXNlX2RhdGEoJnJlc3VsdCk7CiB9CiAKIHN0YXRpYyBpbnQgY29tcGFyZV9kZWx0YV9lbnRyeShjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQpAQCAtNDgwLDcgKzU1Nyw2IEBACiB7CiAJaW50IGk7CiAJc3RydWN0IGRlbHRhX2VudHJ5ICpkZWx0YSA9IGRlbHRhczsKLQl2b2lkICpkYXRhOwogCXN0cnVjdCBzdGF0IHN0OwogCiAJLyoKQEAgLTQ5NSw3ICs1NzEsNyBAQAogCQkJCW5yX29iamVjdHMpOwogCWZvciAoaSA9IDA7IGkgPCBucl9vYmplY3RzOyBpKyspIHsKIAkJc3RydWN0IG9iamVjdF9lbnRyeSAqb2JqID0gJm9iamVjdHNbaV07Ci0JCWRhdGEgPSB1bnBhY2tfcmF3X2VudHJ5KG9iaiwgJmRlbHRhLT5iYXNlKTsKKwkJdm9pZCAqZGF0YSA9IHVucGFja19yYXdfZW50cnkob2JqLCAmZGVsdGEtPmJhc2UpOwogCQlvYmotPnJlYWxfdHlwZSA9IG9iai0+dHlwZTsKIAkJaWYgKG9iai0+dHlwZSA9PSBPQkpfUkVGX0RFTFRBIHx8IG9iai0+dHlwZSA9PSBPQkpfT0ZTX0RFTFRBKSB7CiAJCQlucl9kZWx0YXMrKzsKQEAgLTU0NCw2ICs2MjAsNyBAQAogCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvYmogPSAmb2JqZWN0c1tpXTsKIAkJdW5pb24gZGVsdGFfYmFzZSBiYXNlOwogCQlpbnQgaiwgcmVmLCByZWZfZmlyc3QsIHJlZl9sYXN0LCBvZnMsIG9mc19maXJzdCwgb2ZzX2xhc3Q7CisJCXN0cnVjdCBiYXNlX2RhdGEgYmFzZV9vYmo7CiAKIAkJaWYgKG9iai0+dHlwZSA9PSBPQkpfUkVGX0RFTFRBIHx8IG9iai0+dHlwZSA9PSBPQkpfT0ZTX0RFTFRBKQogCQkJY29udGludWU7CkBAIC01NTQsMjIgKzYzMSwyNCBAQAogCQlvZnMgPSAhZmluZF9kZWx0YV9jaGlsZHJlbigmYmFzZSwgJm9mc19maXJzdCwgJm9mc19sYXN0KTsKIAkJaWYgKCFyZWYgJiYgIW9mcykKIAkJCWNvbnRpbnVlOwotCQlkYXRhID0gZ2V0X2RhdGFfZnJvbV9wYWNrKG9iaik7CisJCWJhc2Vfb2JqLmRhdGEgPSBnZXRfZGF0YV9mcm9tX3BhY2sob2JqKTsKKwkJYmFzZV9vYmouc2l6ZSA9IG9iai0+c2l6ZTsKKwkJYmFzZV9vYmoub2JqID0gb2JqOworCQlsaW5rX2Jhc2VfZGF0YShOVUxMLCAmYmFzZV9vYmopOworCiAJCWlmIChyZWYpCiAJCQlmb3IgKGogPSByZWZfZmlyc3Q7IGogPD0gcmVmX2xhc3Q7IGorKykgewogCQkJCXN0cnVjdCBvYmplY3RfZW50cnkgKmNoaWxkID0gb2JqZWN0cyArIGRlbHRhc1tqXS5vYmpfbm87CiAJCQkJaWYgKGNoaWxkLT5yZWFsX3R5cGUgPT0gT0JKX1JFRl9ERUxUQSkKLQkJCQkJcmVzb2x2ZV9kZWx0YShjaGlsZCwgZGF0YSwKLQkJCQkJCSAgICAgIG9iai0+c2l6ZSwgb2JqLT50eXBlKTsKKwkJCQkJcmVzb2x2ZV9kZWx0YShjaGlsZCwgJmJhc2Vfb2JqLCBvYmotPnR5cGUpOwogCQkJfQogCQlpZiAob2ZzKQogCQkJZm9yIChqID0gb2ZzX2ZpcnN0OyBqIDw9IG9mc19sYXN0OyBqKyspIHsKIAkJCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpjaGlsZCA9IG9iamVjdHMgKyBkZWx0YXNbal0ub2JqX25vOwogCQkJCWlmIChjaGlsZC0+cmVhbF90eXBlID09IE9CSl9PRlNfREVMVEEpCi0JCQkJCXJlc29sdmVfZGVsdGEoY2hpbGQsIGRhdGEsCi0JCQkJCQkgICAgICBvYmotPnNpemUsIG9iai0+dHlwZSk7CisJCQkJCXJlc29sdmVfZGVsdGEoY2hpbGQsICZiYXNlX29iaiwgb2JqLT50eXBlKTsKIAkJCX0KLQkJZnJlZShkYXRhKTsKKwkJdW5saW5rX2Jhc2VfZGF0YSgmYmFzZV9vYmopOwogCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCBucl9yZXNvbHZlZF9kZWx0YXMpOwogCX0KIH0KQEAgLTYwMCw3ICs2NzksOCBAQAogCXJldHVybiBzaXplOwogfQogCi1zdGF0aWMgdm9pZCBhcHBlbmRfb2JqX3RvX3BhY2soY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgdm9pZCAqYnVmLAorc3RhdGljIHN0cnVjdCBvYmplY3RfZW50cnkgKmFwcGVuZF9vYmpfdG9fcGFjaygKKwkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCB2b2lkICpidWYsCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBzaXplLCBlbnVtIG9iamVjdF90eXBlIHR5cGUpCiB7CiAJc3RydWN0IG9iamVjdF9lbnRyeSAqb2JqID0gJm9iamVjdHNbbnJfb2JqZWN0cysrXTsKQEAgLTYxOCw5ICs2OTgsMTQgQEAKIAl3cml0ZV9vcl9kaWUob3V0cHV0X2ZkLCBoZWFkZXIsIG4pOwogCW9ialswXS5pZHguY3JjMzIgPSBjcmMzMigwLCBaX05VTEwsIDApOwogCW9ialswXS5pZHguY3JjMzIgPSBjcmMzMihvYmpbMF0uaWR4LmNyYzMyLCBoZWFkZXIsIG4pOworCW9ialswXS5zaXplID0gc2l6ZTsKKwlvYmpbMF0uaGRyX3NpemUgPSBuOworCW9ialswXS50eXBlID0gdHlwZTsKKwlvYmpbMF0ucmVhbF90eXBlID0gdHlwZTsKIAlvYmpbMV0uaWR4Lm9mZnNldCA9IG9ialswXS5pZHgub2Zmc2V0ICsgbjsKIAlvYmpbMV0uaWR4Lm9mZnNldCArPSB3cml0ZV9jb21wcmVzc2VkKG91dHB1dF9mZCwgYnVmLCBzaXplLCAmb2JqWzBdLmlkeC5jcmMzMik7CiAJaGFzaGNweShvYmotPmlkeC5zaGExLCBzaGExKTsKKwlyZXR1cm4gb2JqOwogfQogCiBzdGF0aWMgaW50IGRlbHRhX3Bvc19jb21wYXJlKGNvbnN0IHZvaWQgKl9hLCBjb25zdCB2b2lkICpfYikKQEAgLTY1NSwyOCArNzQwLDMxIEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAJCXN0cnVjdCBkZWx0YV9lbnRyeSAqZCA9IHNvcnRlZF9ieV9wb3NbaV07Ci0JCXZvaWQgKmRhdGE7Ci0JCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIAkJZW51bSBvYmplY3RfdHlwZSB0eXBlOwogCQlpbnQgaiwgZmlyc3QsIGxhc3Q7CisJCXN0cnVjdCBiYXNlX2RhdGEgYmFzZV9vYmo7CiAKIAkJaWYgKG9iamVjdHNbZC0+b2JqX25vXS5yZWFsX3R5cGUgIT0gT0JKX1JFRl9ERUxUQSkKIAkJCWNvbnRpbnVlOwotCQlkYXRhID0gcmVhZF9zaGExX2ZpbGUoZC0+YmFzZS5zaGExLCAmdHlwZSwgJnNpemUpOwotCQlpZiAoIWRhdGEpCisJCWJhc2Vfb2JqLmRhdGEgPSByZWFkX3NoYTFfZmlsZShkLT5iYXNlLnNoYTEsICZ0eXBlLCAmYmFzZV9vYmouc2l6ZSk7CisJCWlmICghYmFzZV9vYmouZGF0YSkKIAkJCWNvbnRpbnVlOwogCisJCWlmIChjaGVja19zaGExX3NpZ25hdHVyZShkLT5iYXNlLnNoYTEsIGJhc2Vfb2JqLmRhdGEsCisJCQkJYmFzZV9vYmouc2l6ZSwgdHlwZW5hbWUodHlwZSkpKQorCQkJZGllKCJsb2NhbCBvYmplY3QgJXMgaXMgY29ycnVwdCIsIHNoYTFfdG9faGV4KGQtPmJhc2Uuc2hhMSkpOworCQliYXNlX29iai5vYmogPSBhcHBlbmRfb2JqX3RvX3BhY2soZC0+YmFzZS5zaGExLCBiYXNlX29iai5kYXRhLAorCQkJYmFzZV9vYmouc2l6ZSwgdHlwZSk7CisJCWxpbmtfYmFzZV9kYXRhKE5VTEwsICZiYXNlX29iaik7CisKIAkJZmluZF9kZWx0YV9jaGlsZHJlbigmZC0+YmFzZSwgJmZpcnN0LCAmbGFzdCk7CiAJCWZvciAoaiA9IGZpcnN0OyBqIDw9IGxhc3Q7IGorKykgewogCQkJc3RydWN0IG9iamVjdF9lbnRyeSAqY2hpbGQgPSBvYmplY3RzICsgZGVsdGFzW2pdLm9ial9ubzsKIAkJCWlmIChjaGlsZC0+cmVhbF90eXBlID09IE9CSl9SRUZfREVMVEEpCi0JCQkJcmVzb2x2ZV9kZWx0YShjaGlsZCwgZGF0YSwgc2l6ZSwgdHlwZSk7CisJCQkJcmVzb2x2ZV9kZWx0YShjaGlsZCwgJmJhc2Vfb2JqLCB0eXBlKTsKIAkJfQogCi0JCWlmIChjaGVja19zaGExX3NpZ25hdHVyZShkLT5iYXNlLnNoYTEsIGRhdGEsIHNpemUsIHR5cGVuYW1lKHR5cGUpKSkKLQkJCWRpZSgibG9jYWwgb2JqZWN0ICVzIGlzIGNvcnJ1cHQiLCBzaGExX3RvX2hleChkLT5iYXNlLnNoYTEpKTsKLQkJYXBwZW5kX29ial90b19wYWNrKGQtPmJhc2Uuc2hhMSwgZGF0YSwgc2l6ZSwgdHlwZSk7Ci0JCWZyZWUoZGF0YSk7CisJCXVubGlua19iYXNlX2RhdGEoJmJhc2Vfb2JqKTsKIAkJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgbnJfcmVzb2x2ZWRfZGVsdGFzKTsKIAl9CiAJZnJlZShzb3J0ZWRfYnlfcG9zKTsKQEAgLTY5NCw2ICs3ODIsNyBAQAogCWlmICghZnJvbV9zdGRpbikgewogCQljbG9zZShpbnB1dF9mZCk7CiAJfSBlbHNlIHsKKwkJZnN5bmNfb3JfZGllKG91dHB1dF9mZCwgY3Vycl9wYWNrX25hbWUpOwogCQllcnIgPSBjbG9zZShvdXRwdXRfZmQpOwogCQlpZiAoZXJyKQogCQkJZGllKCJlcnJvciB3aGlsZSBjbG9zaW5nIHBhY2sgZmlsZTogJXMiLCBzdHJlcnJvcihlcnJubykpOwpAQCAtNzY1LDcgKzg1NCw3IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGdpdF9pbmRleF9wYWNrX2NvbmZpZyhjb25zdCBjaGFyICprLCBjb25zdCBjaGFyICp2KQorc3RhdGljIGludCBnaXRfaW5kZXhfcGFja19jb25maWcoY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdiwgdm9pZCAqY2IpCiB7CiAJaWYgKCFzdHJjbXAoaywgInBhY2suaW5kZXh2ZXJzaW9uIikpIHsKIAkJcGFja19pZHhfZGVmYXVsdF92ZXJzaW9uID0gZ2l0X2NvbmZpZ19pbnQoaywgdik7CkBAIC03NzMsNyArODYyLDcgQEAKIAkJCWRpZSgiYmFkIHBhY2suaW5kZXh2ZXJzaW9uPSVkIiwgcGFja19pZHhfZGVmYXVsdF92ZXJzaW9uKTsKIAkJcmV0dXJuIDA7CiAJfQotCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcoaywgdik7CisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyhrLCB2LCBjYik7CiB9CiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKQEAgLTc4Niw3ICs4NzUsNyBAQAogCXN0cnVjdCBwYWNrX2lkeF9lbnRyeSAqKmlkeF9vYmplY3RzOwogCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CiAKLQlnaXRfY29uZmlnKGdpdF9pbmRleF9wYWNrX2NvbmZpZyk7CisJZ2l0X2NvbmZpZyhnaXRfaW5kZXhfcGFja19jb25maWcsIE5VTEwpOwogCiAJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgewogCQljaGFyICphcmcgPSBhcmd2W2ldOwpkaWZmIC0tZ2l0IGEvbGwtbWVyZ2UuYyBiL2xsLW1lcmdlLmMKaW5kZXggNWFlNzQzMy4uOTgzN2M4NCAxMDA2NDQKLS0tIGEvbGwtbWVyZ2UuYworKysgYi9sbC1tZXJnZS5jCkBAIC0yMjUsNyArMjI1LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgbGxfbWVyZ2VfZHJpdmVyICpsbF91c2VyX21lcmdlLCAqKmxsX3VzZXJfbWVyZ2VfdGFpbDsKIHN0YXRpYyBjb25zdCBjaGFyICpkZWZhdWx0X2xsX21lcmdlOwogCi1zdGF0aWMgaW50IHJlYWRfbWVyZ2VfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCitzdGF0aWMgaW50IHJlYWRfbWVyZ2VfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQogewogCXN0cnVjdCBsbF9tZXJnZV9kcml2ZXIgKmZuOwogCWNvbnN0IGNoYXIgKmVwLCAqbmFtZTsKQEAgLTMwOSw3ICszMDksNyBAQAogCWlmIChsbF91c2VyX21lcmdlX3RhaWwpCiAJCXJldHVybjsKIAlsbF91c2VyX21lcmdlX3RhaWwgPSAmbGxfdXNlcl9tZXJnZTsKLQlnaXRfY29uZmlnKHJlYWRfbWVyZ2VfY29uZmlnKTsKKwlnaXRfY29uZmlnKHJlYWRfbWVyZ2VfY29uZmlnLCBOVUxMKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBsbF9tZXJnZV9kcml2ZXIgKmZpbmRfbGxfbWVyZ2VfZHJpdmVyKGNvbnN0IGNoYXIgKm1lcmdlX2F0dHIpCmRpZmYgLS1naXQgYS9sb2NrZmlsZS5jIGIvbG9ja2ZpbGUuYwppbmRleCA2NjNmMThmLi40MDIzNzk3IDEwMDY0NAotLS0gYS9sb2NrZmlsZS5jCisrKyBiL2xvY2tmaWxlLmMKQEAgLTI0LDcgKzI0LDcgQEAKIHN0YXRpYyB2b2lkIHJlbW92ZV9sb2NrX2ZpbGVfb25fc2lnbmFsKGludCBzaWdubykKIHsKIAlyZW1vdmVfbG9ja19maWxlKCk7Ci0Jc2lnbmFsKFNJR0lOVCwgU0lHX0RGTCk7CisJc2lnbmFsKHNpZ25vLCBTSUdfREZMKTsKIAlyYWlzZShzaWdubyk7CiB9CiAKQEAgLTEzNSw2ICsxMzUsOSBAQAogCWlmICgwIDw9IGxrLT5mZCkgewogCQlpZiAoIWxvY2tfZmlsZV9saXN0KSB7CiAJCQlzaWduYWwoU0lHSU5ULCByZW1vdmVfbG9ja19maWxlX29uX3NpZ25hbCk7CisJCQlzaWduYWwoU0lHSFVQLCByZW1vdmVfbG9ja19maWxlX29uX3NpZ25hbCk7CisJCQlzaWduYWwoU0lHVEVSTSwgcmVtb3ZlX2xvY2tfZmlsZV9vbl9zaWduYWwpOworCQkJc2lnbmFsKFNJR1FVSVQsIHJlbW92ZV9sb2NrX2ZpbGVfb25fc2lnbmFsKTsKIAkJCWF0ZXhpdChyZW1vdmVfbG9ja19maWxlKTsKIAkJfQogCQlsay0+b3duZXIgPSBnZXRwaWQoKTsKQEAgLTE2MCw2ICsxNjMsMzQgQEAKIAlyZXR1cm4gZmQ7CiB9CiAKK2ludCBob2xkX2xvY2tfZmlsZV9mb3JfYXBwZW5kKHN0cnVjdCBsb2NrX2ZpbGUgKmxrLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgZGllX29uX2Vycm9yKQoreworCWludCBmZCwgb3JpZ19mZDsKKworCWZkID0gbG9ja19maWxlKGxrLCBwYXRoKTsKKwlpZiAoZmQgPCAwKSB7CisJCWlmIChkaWVfb25fZXJyb3IpCisJCQlkaWUoInVuYWJsZSB0byBjcmVhdGUgJyVzLmxvY2snOiAlcyIsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisJCXJldHVybiBmZDsKKwl9CisKKwlvcmlnX2ZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7CisJaWYgKG9yaWdfZmQgPCAwKSB7CisJCWlmIChlcnJubyAhPSBFTk9FTlQpIHsKKwkJCWlmIChkaWVfb25fZXJyb3IpCisJCQkJZGllKCJjYW5ub3Qgb3BlbiAnJXMnIGZvciBjb3B5aW5nIiwgcGF0aCk7CisJCQljbG9zZShmZCk7CisJCQlyZXR1cm4gZXJyb3IoImNhbm5vdCBvcGVuICclcycgZm9yIGNvcHlpbmciLCBwYXRoKTsKKwkJfQorCX0gZWxzZSBpZiAoY29weV9mZChvcmlnX2ZkLCBmZCkpIHsKKwkJaWYgKGRpZV9vbl9lcnJvcikKKwkJCWV4aXQoMTI4KTsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiBmZDsKK30KKwogaW50IGNsb3NlX2xvY2tfZmlsZShzdHJ1Y3QgbG9ja19maWxlICpsaykKIHsKIAlpbnQgZmQgPSBsay0+ZmQ7CmRpZmYgLS1naXQgYS9sb2ctdHJlZS5jIGIvbG9nLXRyZWUuYwppbmRleCA1YjI5NjM5Li41NTA1NjA2IDEwMDY0NAotLS0gYS9sb2ctdHJlZS5jCisrKyBiL2xvZy10cmVlLmMKQEAgLTEsNiArMSw3IEBACiAjaW5jbHVkZSAiY2FjaGUuaCIKICNpbmNsdWRlICJkaWZmLmgiCiAjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiZ3JhcGguaCIKICNpbmNsdWRlICJsb2ctdHJlZS5oIgogI2luY2x1ZGUgInJlZmxvZy13YWxrLmgiCiAKQEAgLTE2NSwxMSArMTY2LDE2IEBACiAJfQogCiAJcHJpbnRmKCJGcm9tICVzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMVxuIiwgbmFtZSk7Ci0JaWYgKG9wdC0+bWVzc2FnZV9pZCkKKwlncmFwaF9zaG93X29uZWxpbmUob3B0LT5ncmFwaCk7CisJaWYgKG9wdC0+bWVzc2FnZV9pZCkgewogCQlwcmludGYoIk1lc3NhZ2UtSWQ6IDwlcz5cbiIsIG9wdC0+bWVzc2FnZV9pZCk7Ci0JaWYgKG9wdC0+cmVmX21lc3NhZ2VfaWQpCisJCWdyYXBoX3Nob3dfb25lbGluZShvcHQtPmdyYXBoKTsKKwl9CisJaWYgKG9wdC0+cmVmX21lc3NhZ2VfaWQpIHsKIAkJcHJpbnRmKCJJbi1SZXBseS1UbzogPCVzPlxuUmVmZXJlbmNlczogPCVzPlxuIiwKIAkJICAgICAgIG9wdC0+cmVmX21lc3NhZ2VfaWQsIG9wdC0+cmVmX21lc3NhZ2VfaWQpOworCQlncmFwaF9zaG93X29uZWxpbmUob3B0LT5ncmFwaCk7CisJfQogCWlmIChvcHQtPm1pbWVfYm91bmRhcnkpIHsKIAkJc3RhdGljIGNoYXIgc3ViamVjdF9idWZmZXJbMTAyNF07CiAJCXN0YXRpYyBjaGFyIGJ1ZmZlclsxMDI0XTsKQEAgLTIwOCw1NCArMjE0LDc2IEBACiAJKmV4dHJhX2hlYWRlcnNfcCA9IGV4dHJhX2hlYWRlcnM7CiB9CiAKLXZvaWQgc2hvd19sb2coc3RydWN0IHJldl9pbmZvICpvcHQsIGNvbnN0IGNoYXIgKnNlcCkKK3ZvaWQgc2hvd19sb2coc3RydWN0IHJldl9pbmZvICpvcHQpCiB7CiAJc3RydWN0IHN0cmJ1ZiBtc2didWY7CiAJc3RydWN0IGxvZ19pbmZvICpsb2cgPSBvcHQtPmxvZ2luZm87CiAJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gbG9nLT5jb21taXQsICpwYXJlbnQgPSBsb2ctPnBhcmVudDsKIAlpbnQgYWJicmV2ID0gb3B0LT5kaWZmb3B0LmFiYnJldjsKIAlpbnQgYWJicmV2X2NvbW1pdCA9IG9wdC0+YWJicmV2X2NvbW1pdCA/IG9wdC0+YWJicmV2IDogNDA7Ci0JY29uc3QgY2hhciAqZXh0cmE7CiAJY29uc3QgY2hhciAqc3ViamVjdCA9IE5VTEwsICpleHRyYV9oZWFkZXJzID0gb3B0LT5leHRyYV9oZWFkZXJzOwogCWludCBuZWVkXzhiaXRfY3RlID0gMDsKIAogCW9wdC0+bG9naW5mbyA9IE5VTEw7CiAJaWYgKCFvcHQtPnZlcmJvc2VfaGVhZGVyKSB7Ci0JCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIEJPVU5EQVJZKQotCQkJcHV0Y2hhcignLScpOwotCQllbHNlIGlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCi0JCQlwdXRjaGFyKCdeJyk7Ci0JCWVsc2UgaWYgKG9wdC0+bGVmdF9yaWdodCkgewotCQkJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgU1lNTUVUUklDX0xFRlQpCi0JCQkJcHV0Y2hhcignPCcpOwotCQkJZWxzZQotCQkJCXB1dGNoYXIoJz4nKTsKKwkJZ3JhcGhfc2hvd19jb21taXQob3B0LT5ncmFwaCk7CisKKwkJaWYgKCFvcHQtPmdyYXBoKSB7CisJCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBCT1VOREFSWSkKKwkJCQlwdXRjaGFyKCctJyk7CisJCQllbHNlIGlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCQkJcHV0Y2hhcignXicpOworCQkJZWxzZSBpZiAob3B0LT5sZWZ0X3JpZ2h0KSB7CisJCQkJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgU1lNTUVUUklDX0xFRlQpCisJCQkJCXB1dGNoYXIoJzwnKTsKKwkJCQllbHNlCisJCQkJCXB1dGNoYXIoJz4nKTsKKwkJCX0KIAkJfQogCQlmcHV0cyhkaWZmX3VuaXF1ZV9hYmJyZXYoY29tbWl0LT5vYmplY3Quc2hhMSwgYWJicmV2X2NvbW1pdCksIHN0ZG91dCk7Ci0JCWlmIChvcHQtPnBhcmVudHMpCisJCWlmIChvcHQtPnByaW50X3BhcmVudHMpCiAJCQlzaG93X3BhcmVudHMoY29tbWl0LCBhYmJyZXZfY29tbWl0KTsKIAkJc2hvd19kZWNvcmF0aW9ucyhjb21taXQpOworCQlpZiAob3B0LT5ncmFwaCAmJiAhZ3JhcGhfaXNfY29tbWl0X2ZpbmlzaGVkKG9wdC0+Z3JhcGgpKSB7CisJCQlwdXRjaGFyKCdcbicpOworCQkJZ3JhcGhfc2hvd19yZW1haW5kZXIob3B0LT5ncmFwaCk7CisJCX0KIAkJcHV0Y2hhcihvcHQtPmRpZmZvcHQubGluZV90ZXJtaW5hdGlvbik7CiAJCXJldHVybjsKIAl9CiAKIAkvKgotCSAqIFRoZSAib25lbGluZSIgZm9ybWF0IGhhcyBzZXZlcmFsIHNwZWNpYWwgY2FzZXM6Ci0JICogIC0gVGhlIHByZXR0eS1wcmludGVkIGNvbW1pdCBsYWNrcyBhIG5ld2xpbmUgYXQgdGhlIGVuZAotCSAqICAgIG9mIHRoZSBidWZmZXIsIGJ1dCB3ZSBkbyB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHdlCi0JICogICAgaGF2ZSBhIG5ld2xpbmUgdGhlcmUuIElmIHRoZSBzZXBhcmF0b3IgaXNuJ3QgYWxyZWFkeQotCSAqICAgIGEgbmV3bGluZSwgYWRkIGFuIGV4dHJhIG9uZS4KLQkgKiAgLSB1bmxpa2Ugb3RoZXIgbG9nIG1lc3NhZ2VzLCB0aGUgb25lLWxpbmUgZm9ybWF0IGRvZXMKLQkgKiAgICBub3QgaGF2ZSBhbiBlbXB0eSBsaW5lIGJldHdlZW4gZW50cmllcy4KKwkgKiBJZiB1c2VfdGVybWluYXRvciBpcyBzZXQsIGFkZCBhIG5ld2xpbmUgYXQgdGhlIGVuZCBvZiB0aGUgZW50cnkuCisJICogT3RoZXJ3aXNlLCBhZGQgYSBkaWZmb3B0LmxpbmVfdGVybWluYXRpb24gY2hhcmFjdGVyIGJlZm9yZSBhbGwKKwkgKiBlbnRyaWVzIGJ1dCB0aGUgZmlyc3QuICAoSU9XLCBhcyBhIHNlcGFyYXRvciBiZXR3ZWVuIGVudHJpZXMpCiAJICovCi0JZXh0cmEgPSAiIjsKLQlpZiAoKnNlcCAhPSAnXG4nICYmIG9wdC0+Y29tbWl0X2Zvcm1hdCA9PSBDTUlUX0ZNVF9PTkVMSU5FKQotCQlleHRyYSA9ICJcbiI7Ci0JaWYgKG9wdC0+c2hvd25fb25lICYmIG9wdC0+Y29tbWl0X2Zvcm1hdCAhPSBDTUlUX0ZNVF9PTkVMSU5FKQorCWlmIChvcHQtPnNob3duX29uZSAmJiAhb3B0LT51c2VfdGVybWluYXRvcikgeworCQkvKgorCQkgKiBJZiBlbnRyaWVzIGFyZSBzZXBhcmF0ZWQgYnkgYSBuZXdsaW5lLCB0aGUgb3V0cHV0CisJCSAqIHNob3VsZCBsb29rIGh1bWFuLXJlYWRhYmxlLiAgSWYgdGhlIGxhc3QgZW50cnkgZW5kZWQKKwkJICogd2l0aCBhIG5ld2xpbmUsIHByaW50IHRoZSBncmFwaCBvdXRwdXQgYmVmb3JlIHRoaXMKKwkJICogbmV3bGluZS4gIE90aGVyd2lzZSBpdCB3aWxsIGVuZCB1cCBhcyBhIGNvbXBsZXRlbHkgYmxhbmsKKwkJICogbGluZSBhbmQgd2lsbCBsb29rIGxpa2UgYSBnYXAgaW4gdGhlIGdyYXBoLgorCQkgKgorCQkgKiBJZiB0aGUgZW50cnkgc2VwYXJhdG9yIGlzIG5vdCBhIG5ld2xpbmUsIHRoZSBvdXRwdXQgaXMKKwkJICogcHJpbWFyaWx5IGludGVuZGVkIGZvciBwcm9ncmFtbWF0aWMgY29uc3VtcHRpb24sIGFuZCB3ZQorCQkgKiBuZXZlciB3YW50IHRoZSBleHRyYSBncmFwaCBvdXRwdXQgYmVmb3JlIHRoZSBlbnRyeQorCQkgKiBzZXBhcmF0b3IuCisJCSAqLworCQlpZiAob3B0LT5kaWZmb3B0LmxpbmVfdGVybWluYXRpb24gPT0gJ1xuJyAmJgorCQkgICAgIW9wdC0+bWlzc2luZ19uZXdsaW5lKQorCQkJZ3JhcGhfc2hvd19wYWRkaW5nKG9wdC0+Z3JhcGgpOwogCQlwdXRjaGFyKG9wdC0+ZGlmZm9wdC5saW5lX3Rlcm1pbmF0aW9uKTsKKwl9CiAJb3B0LT5zaG93bl9vbmUgPSAxOwogCiAJLyoKKwkgKiBJZiB0aGUgaGlzdG9yeSBncmFwaCB3YXMgcmVxdWVzdGVkLAorCSAqIHByaW50IHRoZSBncmFwaCwgdXAgdG8gdGhpcyBjb21taXQncyBsaW5lCisJICovCisJZ3JhcGhfc2hvd19jb21taXQob3B0LT5ncmFwaCk7CisKKwkvKgogCSAqIFByaW50IGhlYWRlciBsaW5lIG9mIGhlYWRlci4uCiAJICovCiAKQEAgLTI2NywxOSArMjk1LDIyIEBACiAJCWZwdXRzKGRpZmZfZ2V0X2NvbG9yX29wdCgmb3B0LT5kaWZmb3B0LCBESUZGX0NPTU1JVCksIHN0ZG91dCk7CiAJCWlmIChvcHQtPmNvbW1pdF9mb3JtYXQgIT0gQ01JVF9GTVRfT05FTElORSkKIAkJCWZwdXRzKCJjb21taXQgIiwgc3Rkb3V0KTsKLQkJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQk9VTkRBUlkpCi0JCQlwdXRjaGFyKCctJyk7Ci0JCWVsc2UgaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykKLQkJCXB1dGNoYXIoJ14nKTsKLQkJZWxzZSBpZiAob3B0LT5sZWZ0X3JpZ2h0KSB7Ci0JCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBTWU1NRVRSSUNfTEVGVCkKLQkJCQlwdXRjaGFyKCc8Jyk7Ci0JCQllbHNlCi0JCQkJcHV0Y2hhcignPicpOworCisJCWlmICghb3B0LT5ncmFwaCkgeworCQkJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQk9VTkRBUlkpCisJCQkJcHV0Y2hhcignLScpOworCQkJZWxzZSBpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQkJCXB1dGNoYXIoJ14nKTsKKwkJCWVsc2UgaWYgKG9wdC0+bGVmdF9yaWdodCkgeworCQkJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFNZTU1FVFJJQ19MRUZUKQorCQkJCQlwdXRjaGFyKCc8Jyk7CisJCQkJZWxzZQorCQkJCQlwdXRjaGFyKCc+Jyk7CisJCQl9CiAJCX0KIAkJZnB1dHMoZGlmZl91bmlxdWVfYWJicmV2KGNvbW1pdC0+b2JqZWN0LnNoYTEsIGFiYnJldl9jb21taXQpLAogCQkgICAgICBzdGRvdXQpOwotCQlpZiAob3B0LT5wYXJlbnRzKQorCQlpZiAob3B0LT5wcmludF9wYXJlbnRzKQogCQkJc2hvd19wYXJlbnRzKGNvbW1pdCwgYWJicmV2X2NvbW1pdCk7CiAJCWlmIChwYXJlbnQpCiAJCQlwcmludGYoIiAoZnJvbSAlcykiLApAQCAtMjg3LDE1ICszMTgsMjQgQEAKIAkJCQkJCSAgYWJicmV2X2NvbW1pdCkpOwogCQlzaG93X2RlY29yYXRpb25zKGNvbW1pdCk7CiAJCXByaW50ZigiJXMiLCBkaWZmX2dldF9jb2xvcl9vcHQoJm9wdC0+ZGlmZm9wdCwgRElGRl9SRVNFVCkpOwotCQlwdXRjaGFyKG9wdC0+Y29tbWl0X2Zvcm1hdCA9PSBDTUlUX0ZNVF9PTkVMSU5FID8gJyAnIDogJ1xuJyk7CisJCWlmIChvcHQtPmNvbW1pdF9mb3JtYXQgPT0gQ01JVF9GTVRfT05FTElORSkgeworCQkJcHV0Y2hhcignICcpOworCQl9IGVsc2UgeworCQkJcHV0Y2hhcignXG4nKTsKKwkJCWdyYXBoX3Nob3dfb25lbGluZShvcHQtPmdyYXBoKTsKKwkJfQogCQlpZiAob3B0LT5yZWZsb2dfaW5mbykgeworCQkJLyoKKwkJCSAqIHNldHVwX3JldmlzaW9ucygpIGVuc3VyZXMgdGhhdCBvcHQtPnJlZmxvZ19pbmZvCisJCQkgKiBhbmQgb3B0LT5ncmFwaCBjYW5ub3QgYm90aCBiZSBzZXQsCisJCQkgKiBzbyB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHByaW50aW5nIHRoZQorCQkJICogZ3JhcGggaW5mbyBoZXJlLgorCQkJICovCiAJCQlzaG93X3JlZmxvZ19tZXNzYWdlKG9wdC0+cmVmbG9nX2luZm8sCiAJCQkJICAgIG9wdC0+Y29tbWl0X2Zvcm1hdCA9PSBDTUlUX0ZNVF9PTkVMSU5FLAogCQkJCSAgICBvcHQtPmRhdGVfbW9kZSk7Ci0JCQlpZiAob3B0LT5jb21taXRfZm9ybWF0ID09IENNSVRfRk1UX09ORUxJTkUpIHsKLQkJCQlwcmludGYoIiVzIiwgc2VwKTsKKwkJCWlmIChvcHQtPmNvbW1pdF9mb3JtYXQgPT0gQ01JVF9GTVRfT05FTElORSkKIAkJCQlyZXR1cm47Ci0JCQl9CiAJCX0KIAl9CiAKQEAgLTMxNCwxMSArMzU0LDMwIEBACiAKIAlpZiAob3B0LT5hZGRfc2lnbm9mZikKIAkJYXBwZW5kX3NpZ25vZmYoJm1zZ2J1Ziwgb3B0LT5hZGRfc2lnbm9mZik7Ci0JaWYgKG9wdC0+c2hvd19sb2dfc2l6ZSkKKwlpZiAob3B0LT5zaG93X2xvZ19zaXplKSB7CiAJCXByaW50ZigibG9nIHNpemUgJWlcbiIsIChpbnQpbXNnYnVmLmxlbik7CisJCWdyYXBoX3Nob3dfb25lbGluZShvcHQtPmdyYXBoKTsKKwl9CiAKLQlpZiAobXNnYnVmLmxlbikKLQkJcHJpbnRmKCIlcyVzJXMiLCBtc2didWYuYnVmLCBleHRyYSwgc2VwKTsKKwkvKgorCSAqIFNldCBvcHQtPm1pc3NpbmdfbmV3bGluZSBpZiBtc2didWYgZG9lc24ndAorCSAqIGVuZCBpbiBhIG5ld2xpbmUgKGluY2x1ZGluZyBpZiBpdCBpcyBlbXB0eSkKKwkgKi8KKwlpZiAoIW1zZ2J1Zi5sZW4gfHwgbXNnYnVmLmJ1Zlttc2didWYubGVuIC0gMV0gIT0gJ1xuJykKKwkJb3B0LT5taXNzaW5nX25ld2xpbmUgPSAxOworCWVsc2UKKwkJb3B0LT5taXNzaW5nX25ld2xpbmUgPSAwOworCisJaWYgKG9wdC0+Z3JhcGgpCisJCWdyYXBoX3Nob3dfY29tbWl0X21zZyhvcHQtPmdyYXBoLCAmbXNnYnVmKTsKKwllbHNlCisJCWZ3cml0ZShtc2didWYuYnVmLCBzaXplb2YoY2hhciksIG1zZ2J1Zi5sZW4sIHN0ZG91dCk7CisJaWYgKG9wdC0+dXNlX3Rlcm1pbmF0b3IpIHsKKwkJaWYgKCFvcHQtPm1pc3NpbmdfbmV3bGluZSkKKwkJCWdyYXBoX3Nob3dfcGFkZGluZyhvcHQtPmdyYXBoKTsKKwkJcHV0Y2hhcignXG4nKTsKKwl9CisKIAlzdHJidWZfcmVsZWFzZSgmbXNnYnVmKTsKIH0KIApAQCAtMzQwLDcgKzM5OSw3IEBACiAJCSAqIGFuIGV4dHJhIG5ld2xpbmUgYmV0d2VlbiB0aGUgZW5kIG9mIGxvZyBhbmQgdGhlCiAJCSAqIG91dHB1dCBmb3IgcmVhZGFiaWxpdHkuCiAJCSAqLwotCQlzaG93X2xvZyhvcHQsIG9wdC0+ZGlmZm9wdC5tc2dfc2VwKTsKKwkJc2hvd19sb2cob3B0KTsKIAkJaWYgKChvcHQtPmRpZmZvcHQub3V0cHV0X2Zvcm1hdCAmIH5ESUZGX0ZPUk1BVF9OT19PVVRQVVQpICYmCiAJCSAgICBvcHQtPnZlcmJvc2VfaGVhZGVyICYmCiAJCSAgICBvcHQtPmNvbW1pdF9mb3JtYXQgIT0gQ01JVF9GTVRfT05FTElORSkgewpAQCAtNDI4LDcgKzQ4Nyw3IEBACiAJc2hvd24gPSBsb2dfdHJlZV9kaWZmKG9wdCwgY29tbWl0LCAmbG9nKTsKIAlpZiAoIXNob3duICYmIG9wdC0+bG9naW5mbyAmJiBvcHQtPmFsd2F5c19zaG93X2hlYWRlcikgewogCQlsb2cucGFyZW50ID0gTlVMTDsKLQkJc2hvd19sb2cob3B0LCAiIik7CisJCXNob3dfbG9nKG9wdCk7CiAJCXNob3duID0gMTsKIAl9CiAJb3B0LT5sb2dpbmZvID0gTlVMTDsKZGlmZiAtLWdpdCBhL2xvZy10cmVlLmggYi9sb2ctdHJlZS5oCmluZGV4IDg5NDZmZjMuLjU5YmE0YzQgMTAwNjQ0Ci0tLSBhL2xvZy10cmVlLmgKKysrIGIvbG9nLXRyZWUuaApAQCAtMTEsNyArMTEsNyBAQAogaW50IGxvZ190cmVlX2RpZmZfZmx1c2goc3RydWN0IHJldl9pbmZvICopOwogaW50IGxvZ190cmVlX2NvbW1pdChzdHJ1Y3QgcmV2X2luZm8gKiwgc3RydWN0IGNvbW1pdCAqKTsKIGludCBsb2dfdHJlZV9vcHRfcGFyc2Uoc3RydWN0IHJldl9pbmZvICosIGNvbnN0IGNoYXIgKiosIGludCk7Ci12b2lkIHNob3dfbG9nKHN0cnVjdCByZXZfaW5mbyAqb3B0LCBjb25zdCBjaGFyICpzZXApOwordm9pZCBzaG93X2xvZyhzdHJ1Y3QgcmV2X2luZm8gKm9wdCk7CiB2b2lkIHNob3dfZGVjb3JhdGlvbnMoc3RydWN0IGNvbW1pdCAqY29tbWl0KTsKIHZvaWQgbG9nX3dyaXRlX2VtYWlsX2hlYWRlcnMoc3RydWN0IHJldl9pbmZvICpvcHQsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkgICAgIGNvbnN0IGNoYXIgKipzdWJqZWN0X3AsCmRpZmYgLS1naXQgYS9uYW1lLWhhc2guYyBiL25hbWUtaGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMzFkNzgKLS0tIC9kZXYvbnVsbAorKysgYi9uYW1lLWhhc2guYwpAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIG5hbWUtaGFzaC5jCisgKgorICogSGFzaGluZyBuYW1lcyBpbiB0aGUgaW5kZXggc3RhdGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTGludXMgVG9ydmFsZHMKKyAqLworI2RlZmluZSBOT19USEVfSU5ERVhfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNpbmNsdWRlICJjYWNoZS5oIgorCisvKgorICogVGhpcyByZW1vdmVzIGJpdCA1IGlmIGJpdCA2IGlzIHNldC4KKyAqCisgKiBUaGF0IHdpbGwgbWFrZSBVUy1BU0NJSSBjaGFyYWN0ZXJzIGhhc2ggdG8gdGhlaXIgdXBwZXItY2FzZQorICogZXF1aXZhbGVudC4gV2UgY291bGQgZWFzaWx5IGRvIHRoaXMgb25lIHdob2xlIHdvcmQgYXQgYSB0aW1lLAorICogYnV0IHRoYXQncyBmb3IgZnV0dXJlIHdvcnJpZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBpY2FzZV9oYXNoKHVuc2lnbmVkIGNoYXIgYykKK3sKKwlyZXR1cm4gYyAmIH4oKGMgJiAweDQwKSA+PiAxKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBoYXNoX25hbWUoY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4pCit7CisJdW5zaWduZWQgaW50IGhhc2ggPSAweDEyMzsKKworCWRvIHsKKwkJdW5zaWduZWQgY2hhciBjID0gKm5hbWUrKzsKKwkJYyA9IGljYXNlX2hhc2goYyk7CisJCWhhc2ggPSBoYXNoKjEwMSArIGM7CisJfSB3aGlsZSAoLS1uYW1lbGVuKTsKKwlyZXR1cm4gaGFzaDsKK30KKworc3RhdGljIHZvaWQgaGFzaF9pbmRleF9lbnRyeShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwl2b2lkICoqcG9zOworCXVuc2lnbmVkIGludCBoYXNoOworCisJaWYgKGNlLT5jZV9mbGFncyAmIENFX0hBU0hFRCkKKwkJcmV0dXJuOworCWNlLT5jZV9mbGFncyB8PSBDRV9IQVNIRUQ7CisJY2UtPm5leHQgPSBOVUxMOworCWhhc2ggPSBoYXNoX25hbWUoY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpKTsKKwlwb3MgPSBpbnNlcnRfaGFzaChoYXNoLCBjZSwgJmlzdGF0ZS0+bmFtZV9oYXNoKTsKKwlpZiAocG9zKSB7CisJCWNlLT5uZXh0ID0gKnBvczsKKwkJKnBvcyA9IGNlOworCX0KK30KKworc3RhdGljIHZvaWQgbGF6eV9pbml0X25hbWVfaGFzaChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKK3sKKwlpbnQgbnI7CisKKwlpZiAoaXN0YXRlLT5uYW1lX2hhc2hfaW5pdGlhbGl6ZWQpCisJCXJldHVybjsKKwlmb3IgKG5yID0gMDsgbnIgPCBpc3RhdGUtPmNhY2hlX25yOyBucisrKQorCQloYXNoX2luZGV4X2VudHJ5KGlzdGF0ZSwgaXN0YXRlLT5jYWNoZVtucl0pOworCWlzdGF0ZS0+bmFtZV9oYXNoX2luaXRpYWxpemVkID0gMTsKK30KKwordm9pZCBhZGRfbmFtZV9oYXNoKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQoreworCWNlLT5jZV9mbGFncyAmPSB+Q0VfVU5IQVNIRUQ7CisJaWYgKGlzdGF0ZS0+bmFtZV9oYXNoX2luaXRpYWxpemVkKQorCQloYXNoX2luZGV4X2VudHJ5KGlzdGF0ZSwgY2UpOworfQorCitzdGF0aWMgaW50IHNsb3dfc2FtZV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUxLCBpbnQgbGVuMSwgY29uc3QgY2hhciAqbmFtZTIsIGludCBsZW4yKQoreworCWlmIChsZW4xICE9IGxlbjIpCisJCXJldHVybiAwOworCisJd2hpbGUgKGxlbjEpIHsKKwkJdW5zaWduZWQgY2hhciBjMSA9ICpuYW1lMSsrOworCQl1bnNpZ25lZCBjaGFyIGMyID0gKm5hbWUyKys7CisJCWxlbjEtLTsKKwkJaWYgKGMxICE9IGMyKSB7CisJCQljMSA9IHRvdXBwZXIoYzEpOworCQkJYzIgPSB0b3VwcGVyKGMyKTsKKwkJCWlmIChjMSAhPSBjMikKKwkJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBzYW1lX25hbWUoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIGludCBpY2FzZSkKK3sKKwlpbnQgbGVuID0gY2VfbmFtZWxlbihjZSk7CisKKwkvKgorCSAqIEFsd2F5cyBkbyBleGFjdCBjb21wYXJlLCBldmVuIGlmIHdlIHdhbnQgYSBjYXNlLWlnbm9yaW5nIGNvbXBhcmlzb247CisJICogd2UgZG8gdGhlIHF1aWNrIGV4YWN0IG9uZSBmaXJzdCwgYmVjYXVzZSBpdCB3aWxsIGJlIHRoZSBjb21tb24gY2FzZS4KKwkgKi8KKwlpZiAobGVuID09IG5hbWVsZW4gJiYgIWNhY2hlX25hbWVfY29tcGFyZShuYW1lLCBuYW1lbGVuLCBjZS0+bmFtZSwgbGVuKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gaWNhc2UgJiYgc2xvd19zYW1lX25hbWUobmFtZSwgbmFtZWxlbiwgY2UtPm5hbWUsIGxlbik7Cit9CisKK3N0cnVjdCBjYWNoZV9lbnRyeSAqaW5kZXhfbmFtZV9leGlzdHMoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLCBpbnQgaWNhc2UpCit7CisJdW5zaWduZWQgaW50IGhhc2ggPSBoYXNoX25hbWUobmFtZSwgbmFtZWxlbik7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKworCWxhenlfaW5pdF9uYW1lX2hhc2goaXN0YXRlKTsKKwljZSA9IGxvb2t1cF9oYXNoKGhhc2gsICZpc3RhdGUtPm5hbWVfaGFzaCk7CisKKwl3aGlsZSAoY2UpIHsKKwkJaWYgKCEoY2UtPmNlX2ZsYWdzICYgQ0VfVU5IQVNIRUQpKSB7CisJCQlpZiAoc2FtZV9uYW1lKGNlLCBuYW1lLCBuYW1lbGVuLCBpY2FzZSkpCisJCQkJcmV0dXJuIGNlOworCQl9CisJCWNlID0gY2UtPm5leHQ7CisJfQorCXJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvcGFjay1jaGVjay5jIGIvcGFjay1jaGVjay5jCmluZGV4IDBmOGFkMmMuLmY0ODk4NzMgMTAwNjQ0Ci0tLSBhL3BhY2stY2hlY2suYworKysgYi9wYWNrLWNoZWNrLmMKQEAgLTI1LDEwICsyNSwxMCBAQAogCW9mZl90IGluZGV4X3NpemUgPSBwLT5pbmRleF9zaXplOwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluZGV4X2Jhc2UgPSBwLT5pbmRleF9kYXRhOwogCVNIQV9DVFggY3R4OwotCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07Ci0Jb2ZmX3Qgb2Zmc2V0ID0gMCwgcGFja19zaWcgPSBwLT5wYWNrX3NpemUgLSAyMDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdLCAqcGFja19zaWc7CisJb2ZmX3Qgb2Zmc2V0ID0gMCwgcGFja19zaWdfb2ZzID0gcC0+cGFja19zaXplIC0gMjA7CiAJdWludDMyX3QgbnJfb2JqZWN0cywgaTsKLQlpbnQgZXJyOworCWludCBlcnIgPSAwOwogCXN0cnVjdCBpZHhfZW50cnkgKmVudHJpZXM7CiAKIAkvKiBOb3RlIHRoYXQgdGhlIHBhY2sgaGVhZGVyIGNoZWNrcyBhcmUgYWN0dWFsbHkgcGVyZm9ybWVkIGJ5CkBAIC0zOCwyMSArMzgsMjIgQEAKIAkgKi8KIAogCVNIQTFfSW5pdCgmY3R4KTsKLQl3aGlsZSAob2Zmc2V0IDwgcGFja19zaWcpIHsKKwl3aGlsZSAob2Zmc2V0IDwgcGFja19zaWdfb2ZzKSB7CiAJCXVuc2lnbmVkIGludCByZW1haW5pbmc7CiAJCXVuc2lnbmVkIGNoYXIgKmluID0gdXNlX3BhY2socCwgd19jdXJzLCBvZmZzZXQsICZyZW1haW5pbmcpOwogCQlvZmZzZXQgKz0gcmVtYWluaW5nOwotCQlpZiAob2Zmc2V0ID4gcGFja19zaWcpCi0JCQlyZW1haW5pbmcgLT0gKHVuc2lnbmVkIGludCkob2Zmc2V0IC0gcGFja19zaWcpOworCQlpZiAob2Zmc2V0ID4gcGFja19zaWdfb2ZzKQorCQkJcmVtYWluaW5nIC09ICh1bnNpZ25lZCBpbnQpKG9mZnNldCAtIHBhY2tfc2lnX29mcyk7CiAJCVNIQTFfVXBkYXRlKCZjdHgsIGluLCByZW1haW5pbmcpOwogCX0KIAlTSEExX0ZpbmFsKHNoYTEsICZjdHgpOwotCWlmIChoYXNoY21wKHNoYTEsIHVzZV9wYWNrKHAsIHdfY3VycywgcGFja19zaWcsIE5VTEwpKSkKLQkJcmV0dXJuIGVycm9yKCJQYWNrZmlsZSAlcyBTSEExIG1pc21hdGNoIHdpdGggaXRzZWxmIiwKLQkJCSAgICAgcC0+cGFja19uYW1lKTsKLQlpZiAoaGFzaGNtcChzaGExLCBpbmRleF9iYXNlICsgaW5kZXhfc2l6ZSAtIDQwKSkKLQkJcmV0dXJuIGVycm9yKCJQYWNrZmlsZSAlcyBTSEExIG1pc21hdGNoIHdpdGggaWR4IiwKLQkJCSAgICAgcC0+cGFja19uYW1lKTsKKwlwYWNrX3NpZyA9IHVzZV9wYWNrKHAsIHdfY3VycywgcGFja19zaWdfb2ZzLCBOVUxMKTsKKwlpZiAoaGFzaGNtcChzaGExLCBwYWNrX3NpZykpCisJCWVyciA9IGVycm9yKCIlcyBTSEExIGNoZWNrc3VtIG1pc21hdGNoIiwKKwkJCSAgICBwLT5wYWNrX25hbWUpOworCWlmIChoYXNoY21wKGluZGV4X2Jhc2UgKyBpbmRleF9zaXplIC0gNDAsIHBhY2tfc2lnKSkKKwkJZXJyID0gZXJyb3IoIiVzIFNIQTEgZG9lcyBub3QgbWF0Y2ggaXRzIGluZGRleCIsCisJCQkgICAgcC0+cGFja19uYW1lKTsKIAl1bnVzZV9wYWNrKHdfY3Vycyk7CiAKIAkvKiBNYWtlIHN1cmUgZXZlcnl0aGluZyByZWFjaGFibGUgZnJvbSBpZHggaXMgdmFsaWQuICBTaW5jZSB3ZQpAQCAtNzIsMjIgKzczLDIzIEBACiAJfQogCXFzb3J0KGVudHJpZXMsIG5yX29iamVjdHMsIHNpemVvZigqZW50cmllcyksIGNvbXBhcmVfZW50cmllcyk7CiAKLQlmb3IgKGkgPSAwLCBlcnIgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IG5yX29iamVjdHM7IGkrKykgewogCQl2b2lkICpkYXRhOwogCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CiAJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIAogCQlkYXRhID0gdW5wYWNrX2VudHJ5KHAsIGVudHJpZXNbaV0ub2Zmc2V0LCAmdHlwZSwgJnNpemUpOwogCQlpZiAoIWRhdGEpIHsKLQkJCWVyciA9IGVycm9yKCJjYW5ub3QgdW5wYWNrICVzIGZyb20gJXMiLAotCQkJCSAgICBzaGExX3RvX2hleChlbnRyaWVzW2ldLnNoYTEpLCBwLT5wYWNrX25hbWUpOwotCQkJY29udGludWU7CisJCQllcnIgPSBlcnJvcigiY2Fubm90IHVucGFjayAlcyBmcm9tICVzIGF0IG9mZnNldCAlIlBSSXVNQVgiIiwKKwkJCQkgICAgc2hhMV90b19oZXgoZW50cmllc1tpXS5zaGExKSwgcC0+cGFja19uYW1lLAorCQkJCSAgICAodWludG1heF90KWVudHJpZXNbaV0ub2Zmc2V0KTsKKwkJCWJyZWFrOwogCQl9CiAJCWlmIChjaGVja19zaGExX3NpZ25hdHVyZShlbnRyaWVzW2ldLnNoYTEsIGRhdGEsIHNpemUsIHR5cGVuYW1lKHR5cGUpKSkgewogCQkJZXJyID0gZXJyb3IoInBhY2tlZCAlcyBmcm9tICVzIGlzIGNvcnJ1cHQiLAogCQkJCSAgICBzaGExX3RvX2hleChlbnRyaWVzW2ldLnNoYTEpLCBwLT5wYWNrX25hbWUpOwogCQkJZnJlZShkYXRhKTsKLQkJCWNvbnRpbnVlOworCQkJYnJlYWs7CiAJCX0KIAkJZnJlZShkYXRhKTsKIAl9CkBAIC0xNTgsMzEgKzE2MCwyOCBAQAogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluZGV4X2Jhc2U7CiAJU0hBX0NUWCBjdHg7CiAJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKLQlpbnQgcmV0OworCWludCBlcnIgPSAwOworCXN0cnVjdCBwYWNrX3dpbmRvdyAqd19jdXJzID0gTlVMTDsKIAogCWlmIChvcGVuX3BhY2tfaW5kZXgocCkpCiAJCXJldHVybiBlcnJvcigicGFja2ZpbGUgJXMgaW5kZXggbm90IG9wZW5lZCIsIHAtPnBhY2tfbmFtZSk7CiAJaW5kZXhfc2l6ZSA9IHAtPmluZGV4X3NpemU7CiAJaW5kZXhfYmFzZSA9IHAtPmluZGV4X2RhdGE7CiAKLQlyZXQgPSAwOwogCS8qIFZlcmlmeSBTSEExIHN1bSBvZiB0aGUgaW5kZXggZmlsZSAqLwogCVNIQTFfSW5pdCgmY3R4KTsKIAlTSEExX1VwZGF0ZSgmY3R4LCBpbmRleF9iYXNlLCAodW5zaWduZWQgaW50KShpbmRleF9zaXplIC0gMjApKTsKIAlTSEExX0ZpbmFsKHNoYTEsICZjdHgpOwogCWlmIChoYXNoY21wKHNoYTEsIGluZGV4X2Jhc2UgKyBpbmRleF9zaXplIC0gMjApKQotCQlyZXQgPSBlcnJvcigiUGFja2ZpbGUgaW5kZXggZm9yICVzIFNIQTEgbWlzbWF0Y2giLAorCQllcnIgPSBlcnJvcigiUGFja2ZpbGUgaW5kZXggZm9yICVzIFNIQTEgbWlzbWF0Y2giLAogCQkJICAgIHAtPnBhY2tfbmFtZSk7CiAKLQlpZiAoIXJldCkgewotCQkvKiBWZXJpZnkgcGFjayBmaWxlICovCi0JCXN0cnVjdCBwYWNrX3dpbmRvdyAqd19jdXJzID0gTlVMTDsKLQkJcmV0ID0gdmVyaWZ5X3BhY2tmaWxlKHAsICZ3X2N1cnMpOwotCQl1bnVzZV9wYWNrKCZ3X2N1cnMpOwotCX0KKwkvKiBWZXJpZnkgcGFjayBmaWxlICovCisJZXJyIHw9IHZlcmlmeV9wYWNrZmlsZShwLCAmd19jdXJzKTsKKwl1bnVzZV9wYWNrKCZ3X2N1cnMpOwogCiAJaWYgKHZlcmJvc2UpIHsKLQkJaWYgKHJldCkKKwkJaWYgKGVycikKIAkJCXByaW50ZigiJXM6IGJhZFxuIiwgcC0+cGFja19uYW1lKTsKIAkJZWxzZSB7CiAJCQlzaG93X3BhY2tfaW5mbyhwKTsKQEAgLTE5MCw1ICsxODksNSBAQAogCQl9CiAJfQogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvcGFjay13cml0ZS5jIGIvcGFjay13cml0ZS5jCmluZGV4IDY2NWUyYjIuLmY1MmNhYmUgMTAwNjQ0Ci0tLSBhL3BhY2std3JpdGUuYworKysgYi9wYWNrLXdyaXRlLmMKQEAgLTEzOSw3ICsxMzksNyBAQAogCX0KIAogCXNoYTF3cml0ZShmLCBzaGExLCAyMCk7Ci0Jc2hhMWNsb3NlKGYsIE5VTEwsIDEpOworCXNoYTFjbG9zZShmLCBOVUxMLCBDU1VNX0ZTWU5DKTsKIAlTSEExX0ZpbmFsKHNoYTEsICZjdHgpOwogCXJldHVybiBpbmRleF9uYW1lOwogfQpAQCAtMTgzLDcgKzE4Myw2IEBACiAKIGNoYXIgKmluZGV4X3BhY2tfbG9ja2ZpbGUoaW50IGlwX291dCkKIHsKLQlpbnQgbGVuLCBzOwogCWNoYXIgcGFja25hbWVbNDZdOwogCiAJLyoKQEAgLTE5MywxMSArMTkyLDggQEAKIAkgKiBjYXNlLCB3ZSBuZWVkIGl0IHRvIHJlbW92ZSB0aGUgY29ycmVzcG9uZGluZyAua2VlcCBmaWxlCiAJICogbGF0ZXIgb24uICBJZiB3ZSBkb24ndCBnZXQgdGhhdCB0aGVuIHRvdWdoIGx1Y2sgd2l0aCBpdC4KIAkgKi8KLQlmb3IgKGxlbiA9IDA7Ci0JCSBsZW4gPCA0NiAmJiAocyA9IHhyZWFkKGlwX291dCwgcGFja25hbWUrbGVuLCA0Ni1sZW4pKSA+IDA7Ci0JCSBsZW4gKz0gcyk7Ci0JaWYgKGxlbiA9PSA0NiAmJiBwYWNrbmFtZVs0NV0gPT0gJ1xuJyAmJgotCQltZW1jbXAocGFja25hbWUsICJrZWVwXHQiLCA1KSA9PSAwKSB7CisJaWYgKHJlYWRfaW5fZnVsbChpcF9vdXQsIHBhY2tuYW1lLCA0NikgPT0gNDYgJiYgcGFja25hbWVbNDVdID09ICdcbicgJiYKKwkgICAgbWVtY21wKHBhY2tuYW1lLCAia2VlcFx0IiwgNSkgPT0gMCkgewogCQljaGFyIHBhdGhbUEFUSF9NQVhdOwogCQlwYWNrbmFtZVs0NV0gPSAwOwogCQlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICIlcy9wYWNrL3BhY2stJXMua2VlcCIsCmRpZmYgLS1naXQgYS9wYWdlci5jIGIvcGFnZXIuYwppbmRleCBjYTAwMmY5Li5kYmQ5NDE0IDEwMDY0NAotLS0gYS9wYWdlci5jCisrKyBiL3BhZ2VyLmMKQEAgLTMzLDcgKzMzLDcgQEAKIAkJcmV0dXJuOwogCWlmICghcGFnZXIpIHsKIAkJaWYgKCFwYWdlcl9wcm9ncmFtKQotCQkJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcpOworCQkJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOwogCQlwYWdlciA9IHBhZ2VyX3Byb2dyYW07CiAJfQogCWlmICghcGFnZXIpCmRpZmYgLS1naXQgYS9wYXJzZS1vcHRpb25zLmMgYi9wYXJzZS1vcHRpb25zLmMKaW5kZXggYWNmM2ZlMy4uMTJjODgyMiAxMDA2NDQKLS0tIGEvcGFyc2Utb3B0aW9ucy5jCisrKyBiL3BhcnNlLW9wdGlvbnMuYwpAQCAtMzQ0LDcgKzM0NCwxMCBAQAogCQkJYnJlYWs7CiAJCWNhc2UgT1BUSU9OX0lOVEVHRVI6CiAJCQlpZiAob3B0cy0+ZmxhZ3MgJiBQQVJTRV9PUFRfT1BUQVJHKQotCQkJCXBvcyArPSBmcHJpbnRmKHN0ZGVyciwgIls8bj5dIik7CisJCQkJaWYgKG9wdHMtPmxvbmdfbmFtZSkKKwkJCQkJcG9zICs9IGZwcmludGYoc3RkZXJyLCAiWz08bj5dIik7CisJCQkJZWxzZQorCQkJCQlwb3MgKz0gZnByaW50ZihzdGRlcnIsICJbPG4+XSIpOwogCQkJZWxzZQogCQkJCXBvcyArPSBmcHJpbnRmKHN0ZGVyciwgIiA8bj4iKTsKIAkJCWJyZWFrOwpAQCAtMzU1LDEyICszNTgsMTggQEAKIAkJY2FzZSBPUFRJT05fU1RSSU5HOgogCQkJaWYgKG9wdHMtPmFyZ2gpIHsKIAkJCQlpZiAob3B0cy0+ZmxhZ3MgJiBQQVJTRV9PUFRfT1BUQVJHKQotCQkJCQlwb3MgKz0gZnByaW50ZihzdGRlcnIsICIgWzwlcz5dIiwgb3B0cy0+YXJnaCk7CisJCQkJCWlmIChvcHRzLT5sb25nX25hbWUpCisJCQkJCQlwb3MgKz0gZnByaW50ZihzdGRlcnIsICJbPTwlcz5dIiwgb3B0cy0+YXJnaCk7CisJCQkJCWVsc2UKKwkJCQkJCXBvcyArPSBmcHJpbnRmKHN0ZGVyciwgIls8JXM+XSIsIG9wdHMtPmFyZ2gpOwogCQkJCWVsc2UKIAkJCQkJcG9zICs9IGZwcmludGYoc3RkZXJyLCAiIDwlcz4iLCBvcHRzLT5hcmdoKTsKIAkJCX0gZWxzZSB7CiAJCQkJaWYgKG9wdHMtPmZsYWdzICYgUEFSU0VfT1BUX09QVEFSRykKLQkJCQkJcG9zICs9IGZwcmludGYoc3RkZXJyLCAiIFsuLi5dIik7CisJCQkJCWlmIChvcHRzLT5sb25nX25hbWUpCisJCQkJCQlwb3MgKz0gZnByaW50ZihzdGRlcnIsICJbPS4uLl0iKTsKKwkJCQkJZWxzZQorCQkJCQkJcG9zICs9IGZwcmludGYoc3RkZXJyLCAiWy4uLl0iKTsKIAkJCQllbHNlCiAJCQkJCXBvcyArPSBmcHJpbnRmKHN0ZGVyciwgIiAuLi4iKTsKIAkJCX0KQEAgLTQxNiwzICs0MjUsMTUgQEAKIAkqKHVuc2lnbmVkIGxvbmcgKikob3B0LT52YWx1ZSkgPSBhcHByb3hpZGF0ZShhcmcpOwogCXJldHVybiAwOwogfQorCisvKgorICogVGhpcyBzaG91bGQgcmVhbGx5IGJlIE9QVElPTl9GSUxFTkFNRSB0eXBlIGFzIGEgcGFydCBvZgorICogcGFyc2Vfb3B0aW9ucyB0aGF0IHRha2UgcHJlZml4IHRvIGRvIHRoaXMgd2hpbGUgcGFyc2luZy4KKyAqLworZXh0ZXJuIGNvbnN0IGNoYXIgKnBhcnNlX29wdGlvbnNfZml4X2ZpbGVuYW1lKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqZmlsZSkKK3sKKwlpZiAoIWZpbGUgfHwgIXByZWZpeCB8fCBpc19hYnNvbHV0ZV9wYXRoKGZpbGUpIHx8ICFzdHJjbXAoIi0iLCBmaWxlKSkKKwkJcmV0dXJuIGZpbGU7CisJcmV0dXJuIHByZWZpeF9maWxlbmFtZShwcmVmaXgsIHN0cmxlbihwcmVmaXgpLCBmaWxlKTsKK30KKwpkaWZmIC0tZ2l0IGEvcGFyc2Utb3B0aW9ucy5oIGIvcGFyc2Utb3B0aW9ucy5oCmluZGV4IDRlZTQ0M2QuLjEzYWQxNTggMTAwNjQ0Ci0tLSBhL3BhcnNlLW9wdGlvbnMuaAorKysgYi9wYXJzZS1vcHRpb25zLmgKQEAgLTEyMyw0ICsxMjMsNiBAQAogCSAgInVzZSA8bj4gZGlnaXRzIHRvIGRpc3BsYXkgU0hBLTFzIiwgXAogCSAgUEFSU0VfT1BUX09QVEFSRywgJnBhcnNlX29wdF9hYmJyZXZfY2IsIDAgfQogCitleHRlcm4gY29uc3QgY2hhciAqcGFyc2Vfb3B0aW9uc19maXhfZmlsZW5hbWUoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpmaWxlKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9wYXRoLmMgYi9wYXRoLmMKaW5kZXggZjRlZDk3OS4uYzFkNTY3OSAxMDA2NDQKLS0tIGEvcGF0aC5jCisrKyBiL3BhdGguYwpAQCAtOTEsNyArOTEsOCBAQAogCXN0cnVjdCBzdGF0IHN0OwogCWNoYXIgKmJ1ZiwgYnVmZmVyWzI1Nl07CiAJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKLQlpbnQgbGVuLCBmZDsKKwlpbnQgZmQ7CisJc3NpemVfdCBsZW47CiAKIAlpZiAobHN0YXQocGF0aCwgJnN0KSA8IDApCiAJCXJldHVybiAtMTsKQEAgLTI2NiwzMiArMjY3LDg2IEBACiAJaWYgKGxzdGF0KHBhdGgsICZzdCkgPCAwKQogCQlyZXR1cm4gLTE7CiAJbW9kZSA9IHN0LnN0X21vZGU7Ci0JaWYgKG1vZGUgJiBTX0lSVVNSKQotCQltb2RlIHw9IChzaGFyZWRfcmVwb3NpdG9yeSA9PSBQRVJNX0dST1VQCi0JCQkgPyBTX0lSR1JQCi0JCQkgOiAoc2hhcmVkX3JlcG9zaXRvcnkgPT0gUEVSTV9FVkVSWUJPRFkKLQkJCSAgICA/IChTX0lSR1JQfFNfSVJPVEgpCi0JCQkgICAgOiAwKSk7CiAKLQlpZiAobW9kZSAmIFNfSVdVU1IpCi0JCW1vZGUgfD0gU19JV0dSUDsKKwlpZiAoc2hhcmVkX3JlcG9zaXRvcnkpIHsKKwkJaW50IHR3ZWFrID0gc2hhcmVkX3JlcG9zaXRvcnk7CisJCWlmICghKG1vZGUgJiBTX0lXVVNSKSkKKwkJCXR3ZWFrICY9IH4wMjIyOworCQltb2RlIHw9IHR3ZWFrOworCX0gZWxzZSB7CisJCS8qIFByZXNlcnZlIG9sZCBQRVJNX1VNQVNLIGJlaGF2aW91ciAqLworCQlpZiAobW9kZSAmIFNfSVdVU1IpCisJCQltb2RlIHw9IFNfSVdHUlA7CisJfQogCi0JaWYgKG1vZGUgJiBTX0lYVVNSKQotCQltb2RlIHw9IChzaGFyZWRfcmVwb3NpdG9yeSA9PSBQRVJNX0dST1VQCi0JCQkgPyBTX0lYR1JQCi0JCQkgOiAoc2hhcmVkX3JlcG9zaXRvcnkgPT0gUEVSTV9FVkVSWUJPRFkKLQkJCSAgICA/IChTX0lYR1JQfFNfSVhPVEgpCi0JCQkgICAgOiAwKSk7Ci0JaWYgKFNfSVNESVIobW9kZSkpCisJaWYgKFNfSVNESVIobW9kZSkpIHsKIAkJbW9kZSB8PSBGT1JDRV9ESVJfU0VUX0dJRDsKKworCQkvKiBDb3B5IHJlYWQgYml0cyB0byBleGVjdXRlIGJpdHMgKi8KKwkJbW9kZSB8PSAoc2hhcmVkX3JlcG9zaXRvcnkgJiAwNDQ0KSA+PiAyOworCX0KKwogCWlmICgobW9kZSAmIHN0LnN0X21vZGUpICE9IG1vZGUgJiYgY2htb2QocGF0aCwgbW9kZSkgPCAwKQogCQlyZXR1cm4gLTI7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfcHdkX2N3ZCh2b2lkKQoreworCXN0YXRpYyBjaGFyIGN3ZFtQQVRIX01BWCArIDFdOworCWNoYXIgKnB3ZDsKKwlzdHJ1Y3Qgc3RhdCBjd2Rfc3RhdCwgcHdkX3N0YXQ7CisJaWYgKGdldGN3ZChjd2QsIFBBVEhfTUFYKSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwlwd2QgPSBnZXRlbnYoIlBXRCIpOworCWlmIChwd2QgJiYgc3RyY21wKHB3ZCwgY3dkKSkgeworCQlzdGF0KGN3ZCwgJmN3ZF9zdGF0KTsKKwkJaWYgKCFzdGF0KHB3ZCwgJnB3ZF9zdGF0KSAmJgorCQkgICAgcHdkX3N0YXQuc3RfZGV2ID09IGN3ZF9zdGF0LnN0X2RldiAmJgorCQkgICAgcHdkX3N0YXQuc3RfaW5vID09IGN3ZF9zdGF0LnN0X2lubykgeworCQkJc3RybGNweShjd2QsIHB3ZCwgUEFUSF9NQVgpOworCQl9CisJfQorCXJldHVybiBjd2Q7Cit9CisKK2NvbnN0IGNoYXIgKm1ha2Vfbm9ucmVsYXRpdmVfcGF0aChjb25zdCBjaGFyICpwYXRoKQoreworCXN0YXRpYyBjaGFyIGJ1ZltQQVRIX01BWCArIDFdOworCisJaWYgKGlzX2Fic29sdXRlX3BhdGgocGF0aCkpIHsKKwkJaWYgKHN0cmxjcHkoYnVmLCBwYXRoLCBQQVRIX01BWCkgPj0gUEFUSF9NQVgpCisJCQlkaWUgKCJUb28gbG9uZyBwYXRoOiAlLipzIiwgNjAsIHBhdGgpOworCX0gZWxzZSB7CisJCWNvbnN0IGNoYXIgKmN3ZCA9IGdldF9wd2RfY3dkKCk7CisJCWlmICghY3dkKQorCQkJZGllKCJDYW5ub3QgZGV0ZXJtaW5lIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5Iik7CisJCWlmIChzbnByaW50ZihidWYsIFBBVEhfTUFYLCAiJXMvJXMiLCBjd2QsIHBhdGgpID49IFBBVEhfTUFYKQorCQkJZGllICgiVG9vIGxvbmcgcGF0aDogJS4qcyIsIDYwLCBwYXRoKTsKKwl9CisJcmV0dXJuIGJ1ZjsKK30KKwogLyogV2UgYWxsb3cgInJlY3Vyc2l2ZSIgc3ltYm9saWMgbGlua3MuIE9ubHkgd2l0aGluIHJlYXNvbiwgdGhvdWdoLiAqLwogI2RlZmluZSBNQVhERVBUSCA1CiAKK2NvbnN0IGNoYXIgKm1ha2VfcmVsYXRpdmVfcGF0aChjb25zdCBjaGFyICphYnMsIGNvbnN0IGNoYXIgKmJhc2UpCit7CisJc3RhdGljIGNoYXIgYnVmW1BBVEhfTUFYICsgMV07CisJaW50IGJhc2VsZW47CisJaWYgKCFiYXNlKQorCQlyZXR1cm4gYWJzOworCWJhc2VsZW4gPSBzdHJsZW4oYmFzZSk7CisJaWYgKHByZWZpeGNtcChhYnMsIGJhc2UpKQorCQlyZXR1cm4gYWJzOworCWlmIChhYnNbYmFzZWxlbl0gPT0gJy8nKQorCQliYXNlbGVuKys7CisJZWxzZSBpZiAoYmFzZVtiYXNlbGVuIC0gMV0gIT0gJy8nKQorCQlyZXR1cm4gYWJzOworCXN0cmNweShidWYsIGFicyArIGJhc2VsZW4pOworCXJldHVybiBidWY7Cit9CisKIGNvbnN0IGNoYXIgKm1ha2VfYWJzb2x1dGVfcGF0aChjb25zdCBjaGFyICpwYXRoKQogewogCXN0YXRpYyBjaGFyIGJ1ZnNbMl1bUEFUSF9NQVggKyAxXSwgKmJ1ZiA9IGJ1ZnNbMF0sICpuZXh0X2J1ZiA9IGJ1ZnNbMV07CmRpZmYgLS1naXQgYS9wZXJsL0dpdC5wbSBiL3BlcmwvR2l0LnBtCmluZGV4IGEyODEyZWEuLjk3ZTYxZWYgMTAwNjQ0Ci0tLSBhL3BlcmwvR2l0LnBtCisrKyBiL3BlcmwvR2l0LnBtCkBAIC0zOSw2ICszOSwxMCBAQAogICBteSAkbGFzdHJldiA9ICRyZXBvLT5jb21tYW5kX29uZWxpbmUoIFsgJ3Jldi1saXN0JywgJy0tYWxsJyBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUREVSUiA9PiAwICk7CiAKKyAgbXkgJHNoYTEgPSAkcmVwby0+aGFzaF9hbmRfaW5zZXJ0X29iamVjdCgnZmlsZS50eHQnKTsKKyAgbXkgJHRlbXBmaWxlID0gdGVtcGZpbGUoKTsKKyAgbXkgJHNpemUgPSAkcmVwby0+Y2F0X2Jsb2IoJHNoYTEsICR0ZW1wZmlsZSk7CisKID1jdXQKIAogCkBAIC01MSw2ICs1NSw3IEBACiAjIE1ldGhvZHMgd2hpY2ggY2FuIGJlIGNhbGxlZCBhcyBzdGFuZGFsb25lIGZ1bmN0aW9ucyBhcyB3ZWxsOgogQEVYUE9SVF9PSyA9IHF3KGNvbW1hbmQgY29tbWFuZF9vbmVsaW5lIGNvbW1hbmRfbm9pc3kKICAgICAgICAgICAgICAgICBjb21tYW5kX291dHB1dF9waXBlIGNvbW1hbmRfaW5wdXRfcGlwZSBjb21tYW5kX2Nsb3NlX3BpcGUKKyAgICAgICAgICAgICAgICBjb21tYW5kX2JpZGlfcGlwZSBjb21tYW5kX2Nsb3NlX2JpZGlfcGlwZQogICAgICAgICAgICAgICAgIHZlcnNpb24gZXhlY19wYXRoIGhhc2hfb2JqZWN0IGdpdF9jbWRfdHJ5KTsKIAogCkBAIC05Miw2ICs5Nyw3IEBACiB1c2UgQ2FycCBxdyhjYXJwIGNyb2FrKTsgIyBidXQgY3JvYWsgaXMgYmFkIC0gdGhyb3cgaW5zdGVhZAogdXNlIEVycm9yIHF3KDp0cnkpOwogdXNlIEN3ZCBxdyhhYnNfcGF0aCk7Cit1c2UgSVBDOjpPcGVuMiBxdyhvcGVuMik7CiAKIH0KIApAQCAtMjE2LDcgKzIyMiw2IEBACiAJYmxlc3MgJHNlbGYsICRjbGFzczsKIH0KIAotCiA9YmFjawogCiA9aGVhZDEgTUVUSE9EUwpAQCAtMzc1LDYgKzM4MCw2MCBAQAogCV9jbWRfY2xvc2UoJGZoLCAkY3R4KTsKIH0KIAorPWl0ZW0gY29tbWFuZF9iaWRpX3BpcGUgKCBDT01NQU5EIFssIEFSR1VNRU5UUy4uLiBdICkKKworRXhlY3V0ZSB0aGUgZ2l2ZW4gQzxDT01NQU5EPiBpbiB0aGUgc2FtZSB3YXkgYXMgY29tbWFuZF9vdXRwdXRfcGlwZSgpCitkb2VzIGJ1dCByZXR1cm4gYm90aCBhbiBpbnB1dCBwaXBlIGZpbGVoYW5kbGUgYW5kIGFuIG91dHB1dCBwaXBlIGZpbGVoYW5kbGUuCisKK1RoZSBmdW5jdGlvbiB3aWxsIHJldHVybiByZXR1cm4gQzwoJHBpZCwgJHBpcGVfaW4sICRwaXBlX291dCwgJGN0eCk+LgorU2VlIEM8Y29tbWFuZF9jbG9zZV9iaWRpX3BpcGUoKT4gZm9yIGRldGFpbHMuCisKKz1jdXQKKworc3ViIGNvbW1hbmRfYmlkaV9waXBlIHsKKwlteSAoJHBpZCwgJGluLCAkb3V0KTsKKwkkcGlkID0gb3BlbjIoJGluLCAkb3V0LCAnZ2l0JywgQF8pOworCXJldHVybiAoJHBpZCwgJGluLCAkb3V0LCBqb2luKCcgJywgQF8pKTsKK30KKworPWl0ZW0gY29tbWFuZF9jbG9zZV9iaWRpX3BpcGUgKCBQSUQsIFBJUEVfSU4sIFBJUEVfT1VUIFssIENUWF0gKQorCitDbG9zZSB0aGUgQzxQSVBFX0lOPiBhbmQgQzxQSVBFX09VVD4gYXMgcmV0dXJuZWQgZnJvbSBDPGNvbW1hbmRfYmlkaV9waXBlKCk+LAorY2hlY2tpbmcgd2hldGhlciB0aGUgY29tbWFuZCBmaW5pc2hlZCBzdWNjZXNzZnVsbHkuIFRoZSBvcHRpb25hbCBDPENUWD4KK2FyZ3VtZW50IGlzIHJlcXVpcmVkIGlmIHlvdSB3YW50IHRvIHNlZSB0aGUgY29tbWFuZCBuYW1lIGluIHRoZSBlcnJvciBtZXNzYWdlLAorYW5kIGl0IGlzIHRoZSBmb3VydGggdmFsdWUgcmV0dXJuZWQgYnkgQzxjb21tYW5kX2JpZGlfcGlwZSgpPi4gIFRoZSBjYWxsIGlkaW9tCitpczoKKworCW15ICgkcGlkLCAkaW4sICRvdXQsICRjdHgpID0gJHItPmNvbW1hbmRfYmlkaV9waXBlKCdjYXQtZmlsZSAtLWJhdGNoLWNoZWNrJyk7CisJcHJpbnQgIjAwMDAwMDAwMFxuIiAkb3V0OworCXdoaWxlICg8JGluPikgeyAuLi4gfQorCSRyLT5jb21tYW5kX2Nsb3NlX2JpZGlfcGlwZSgkcGlkLCAkaW4sICRvdXQsICRjdHgpOworCitOb3RlIHRoYXQgeW91IHNob3VsZCBub3QgcmVseSBvbiB3aGF0ZXZlciBhY3R1YWxseSBpcyBpbiBDPENUWD47CitjdXJyZW50bHkgaXQgaXMgc2ltcGx5IHRoZSBjb21tYW5kIG5hbWUgYnV0IGluIGZ1dHVyZSB0aGUgY29udGV4dCBtaWdodAoraGF2ZSBtb3JlIGNvbXBsaWNhdGVkIHN0cnVjdHVyZS4KKworPWN1dAorCitzdWIgY29tbWFuZF9jbG9zZV9iaWRpX3BpcGUgeworCW15ICgkcGlkLCAkaW4sICRvdXQsICRjdHgpID0gQF87CisJZm9yZWFjaCBteSAkZmggKCRpbiwgJG91dCkgeworCQl1bmxlc3MgKGNsb3NlICRmaCkgeworCQkJaWYgKCQhKSB7CisJCQkJY2FycCAiZXJyb3IgY2xvc2luZyBwaXBlOiAkISI7CisJCQl9IGVsc2lmICgkPyA+PiA4KSB7CisJCQkJdGhyb3cgR2l0OjpFcnJvcjo6Q29tbWFuZCgkY3R4LCAkPyA+PjgpOworCQkJfQorCQl9CisJfQorCisJd2FpdHBpZCAkcGlkLCAwOworCisJaWYgKCQ/ID4+IDgpIHsKKwkJdGhyb3cgR2l0OjpFcnJvcjo6Q29tbWFuZCgkY3R4LCAkPyA+PjgpOworCX0KK30KKwogCiA9aXRlbSBjb21tYW5kX25vaXN5ICggQ09NTUFORCBbLCBBUkdVTUVOVFMuLi4gXSApCiAKQEAgLTQ4NywyOCArNTQ2LDI2IEBACiAoZXhjZXB0aW9uIGlzIHRocm93biBvdGhlcndpc2UpLCBpbiBhcnJheSBjb250ZXh0IHJldHVybnMgYWxsb3dzIHRoZQogdmFyaWFibGUgdG8gYmUgc2V0IG11bHRpcGxlIHRpbWVzIGFuZCByZXR1cm5zIGFsbCB0aGUgdmFsdWVzLgogCi1NdXN0IGJlIGNhbGxlZCBvbiBhIHJlcG9zaXRvcnkgaW5zdGFuY2UuCi0KIFRoaXMgY3VycmVudGx5IHdyYXBzIGNvbW1hbmQoJ2NvbmZpZycpIHNvIGl0IGlzIG5vdCBzbyBmYXN0LgogCiA9Y3V0CiAKIHN1YiBjb25maWcgewotCW15ICgkc2VsZiwgJHZhcikgPSBAXzsKLQkkc2VsZi0+cmVwb19wYXRoKCkKLQkJb3IgdGhyb3cgRXJyb3I6OlNpbXBsZSgibm90IGEgcmVwb3NpdG9yeSIpOworCW15ICgkc2VsZiwgJHZhcikgPSBfbWF5YmVfc2VsZihAXyk7CiAKIAl0cnkgeworCQlteSBAY21kID0gKCdjb25maWcnKTsKKwkJdW5zaGlmdCBAY21kLCAkc2VsZiBpZiAkc2VsZjsKIAkJaWYgKHdhbnRhcnJheSkgewotCQkJcmV0dXJuICRzZWxmLT5jb21tYW5kKCdjb25maWcnLCAnLS1nZXQtYWxsJywgJHZhcik7CisJCQlyZXR1cm4gY29tbWFuZChAY21kLCAnLS1nZXQtYWxsJywgJHZhcik7CiAJCX0gZWxzZSB7Ci0JCQlyZXR1cm4gJHNlbGYtPmNvbW1hbmRfb25lbGluZSgnY29uZmlnJywgJy0tZ2V0JywgJHZhcik7CisJCQlyZXR1cm4gY29tbWFuZF9vbmVsaW5lKEBjbWQsICctLWdldCcsICR2YXIpOwogCQl9CiAJfSBjYXRjaCBHaXQ6OkVycm9yOjpDb21tYW5kIHdpdGggewogCQlteSAkRSA9IHNoaWZ0OwogCQlpZiAoJEUtPnZhbHVlKCkgPT0gMSkgewogCQkJIyBLZXkgbm90IGZvdW5kLgotCQkJcmV0dXJuIHVuZGVmOworCQkJcmV0dXJuOwogCQl9IGVsc2UgewogCQkJdGhyb3cgJEU7CiAJCX0KQEAgLTUyMiwyMCArNTc5LDE3IEBACiBpcyB1c2FibGUgYXMgYSBib29sZWFuIGluIHBlcmwgKGFuZCBDPHVuZGVmPiBpZiBpdCdzIG5vdCBkZWZpbmVkLAogb2YgY291cnNlKS4KIAotTXVzdCBiZSBjYWxsZWQgb24gYSByZXBvc2l0b3J5IGluc3RhbmNlLgotCiBUaGlzIGN1cnJlbnRseSB3cmFwcyBjb21tYW5kKCdjb25maWcnKSBzbyBpdCBpcyBub3Qgc28gZmFzdC4KIAogPWN1dAogCiBzdWIgY29uZmlnX2Jvb2wgewotCW15ICgkc2VsZiwgJHZhcikgPSBAXzsKLQkkc2VsZi0+cmVwb19wYXRoKCkKLQkJb3IgdGhyb3cgRXJyb3I6OlNpbXBsZSgibm90IGEgcmVwb3NpdG9yeSIpOworCW15ICgkc2VsZiwgJHZhcikgPSBfbWF5YmVfc2VsZihAXyk7CiAKIAl0cnkgewotCQlteSAkdmFsID0gJHNlbGYtPmNvbW1hbmRfb25lbGluZSgnY29uZmlnJywgJy0tYm9vbCcsICctLWdldCcsCi0JCQkJCSAgICAgICR2YXIpOworCQlteSBAY21kID0gKCdjb25maWcnLCAnLS1ib29sJywgJy0tZ2V0JywgJHZhcik7CisJCXVuc2hpZnQgQGNtZCwgJHNlbGYgaWYgJHNlbGY7CisJCW15ICR2YWwgPSBjb21tYW5kX29uZWxpbmUoQGNtZCk7CiAJCXJldHVybiB1bmRlZiB1bmxlc3MgZGVmaW5lZCAkdmFsOwogCQlyZXR1cm4gJHZhbCBlcSAndHJ1ZSc7CiAJfSBjYXRjaCBHaXQ6OkVycm9yOjpDb21tYW5kIHdpdGggewpAQCAtNTU3LDE5ICs2MTEsMTcgQEAKIGJ5IDEwMjQsIDEwNDg1NzYgKDEwMjReMiksIG9yIDEwNzM3NDE4MjQgKDEwMjReMykgcHJpb3IgdG8gb3V0cHV0LgogSXQgd291bGQgcmV0dXJuIEM8dW5kZWY+IGlmIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMgbm90IGRlZmluZWQsCiAKLU11c3QgYmUgY2FsbGVkIG9uIGEgcmVwb3NpdG9yeSBpbnN0YW5jZS4KLQogVGhpcyBjdXJyZW50bHkgd3JhcHMgY29tbWFuZCgnY29uZmlnJykgc28gaXQgaXMgbm90IHNvIGZhc3QuCiAKID1jdXQKIAogc3ViIGNvbmZpZ19pbnQgewotCW15ICgkc2VsZiwgJHZhcikgPSBAXzsKLQkkc2VsZi0+cmVwb19wYXRoKCkKLQkJb3IgdGhyb3cgRXJyb3I6OlNpbXBsZSgibm90IGEgcmVwb3NpdG9yeSIpOworCW15ICgkc2VsZiwgJHZhcikgPSBfbWF5YmVfc2VsZihAXyk7CiAKIAl0cnkgewotCQlyZXR1cm4gJHNlbGYtPmNvbW1hbmRfb25lbGluZSgnY29uZmlnJywgJy0taW50JywgJy0tZ2V0JywgJHZhcik7CisJCW15IEBjbWQgPSAoJ2NvbmZpZycsICctLWludCcsICctLWdldCcsICR2YXIpOworCQl1bnNoaWZ0IEBjbWQsICRzZWxmIGlmICRzZWxmOworCQlyZXR1cm4gY29tbWFuZF9vbmVsaW5lKEBjbWQpOwogCX0gY2F0Y2ggR2l0OjpFcnJvcjo6Q29tbWFuZCB3aXRoIHsKIAkJbXkgJEUgPSBzaGlmdDsKIAkJaWYgKCRFLT52YWx1ZSgpID09IDEpIHsKQEAgLTYzOSwxNSArNjkxLDE1IEBACiAJIiRuYW1lIDwkZW1haWw+IiBlcSBpZGVudF9wZXJzb24oJG5hbWUpOwogCSR0aW1lX3R6ID1+IC9eXGQrIFsrLV1cZHs0fSQvOwogCi1Cb3RoIG1ldGhvZHMgbXVzdCBiZSBjYWxsZWQgb24gYSByZXBvc2l0b3J5IGluc3RhbmNlLgotCiA9Y3V0CiAKIHN1YiBpZGVudCB7Ci0JbXkgKCRzZWxmLCAkdHlwZSkgPSBAXzsKKwlteSAoJHNlbGYsICR0eXBlKSA9IF9tYXliZV9zZWxmKEBfKTsKIAlteSAkaWRlbnRzdHI7CiAJaWYgKGxjICR0eXBlIGVxIGxjICdjb21taXR0ZXInIG9yIGxjICR0eXBlIGVxIGxjICdhdXRob3InKSB7Ci0JCSRpZGVudHN0ciA9ICRzZWxmLT5jb21tYW5kX29uZWxpbmUoJ3ZhcicsICdHSVRfJy51YygkdHlwZSkuJ19JREVOVCcpOworCQlteSBAY21kID0gKCd2YXInLCAnR0lUXycudWMoJHR5cGUpLidfSURFTlQnKTsKKwkJdW5zaGlmdCBAY21kLCAkc2VsZiBpZiAkc2VsZjsKKwkJJGlkZW50c3RyID0gY29tbWFuZF9vbmVsaW5lKEBjbWQpOwogCX0gZWxzZSB7CiAJCSRpZGVudHN0ciA9ICR0eXBlOwogCX0KQEAgLTY1OSwxNyArNzExLDE2IEBACiB9CiAKIHN1YiBpZGVudF9wZXJzb24gewotCW15ICgkc2VsZiwgQGlkZW50KSA9IEBfOwotCSQjaWRlbnQgPT0gMCBhbmQgQGlkZW50ID0gJHNlbGYtPmlkZW50KCRpZGVudFswXSk7CisJbXkgKCRzZWxmLCBAaWRlbnQpID0gX21heWJlX3NlbGYoQF8pOworCSQjaWRlbnQgPT0gMCBhbmQgQGlkZW50ID0gJHNlbGYgPyAkc2VsZi0+aWRlbnQoJGlkZW50WzBdKSA6IGlkZW50KCRpZGVudFswXSk7CiAJcmV0dXJuICIkaWRlbnRbMF0gPCRpZGVudFsxXT4iOwogfQogCiAKID1pdGVtIGhhc2hfb2JqZWN0ICggVFlQRSwgRklMRU5BTUUgKQogCi1Db21wdXRlIHRoZSBTSEExIG9iamVjdCBpZCBvZiB0aGUgZ2l2ZW4gQzxGSUxFTkFNRT4gKG9yIGRhdGEgd2FpdGluZyBpbgotQzxGSUxFSEFORExFPikgY29uc2lkZXJpbmcgaXQgaXMgb2YgdGhlIEM8VFlQRT4gb2JqZWN0IHR5cGUgKEM8YmxvYj4sCi1DPGNvbW1pdD4sIEM8dHJlZT4pLgorQ29tcHV0ZSB0aGUgU0hBMSBvYmplY3QgaWQgb2YgdGhlIGdpdmVuIEM8RklMRU5BTUU+IGNvbnNpZGVyaW5nIGl0IGlzCitvZiB0aGUgQzxUWVBFPiBvYmplY3QgdHlwZSAoQzxibG9iPiwgQzxjb21taXQ+LCBDPHRyZWU+KS4KIAogVGhlIG1ldGhvZCBjYW4gYmUgY2FsbGVkIHdpdGhvdXQgYW55IGluc3RhbmNlIG9yIG9uIGEgc3BlY2lmaWVkIEdpdCByZXBvc2l0b3J5LAogaXQgbWFrZXMgemVybyBkaWZmZXJlbmNlLgpAQCAtNjg1LDYgKzczNiwxNDcgQEAKIH0KIAogCis9aXRlbSBoYXNoX2FuZF9pbnNlcnRfb2JqZWN0ICggRklMRU5BTUUgKQorCitDb21wdXRlIHRoZSBTSEExIG9iamVjdCBpZCBvZiB0aGUgZ2l2ZW4gQzxGSUxFTkFNRT4gYW5kIGFkZCB0aGUgb2JqZWN0IHRvIHRoZQorb2JqZWN0IGRhdGFiYXNlLgorCitUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgU0hBMSBoYXNoLgorCis9Y3V0CisKKyMgVE9ETzogU3VwcG9ydCBmb3IgcGFzc2luZyBGSUxFSEFORExFIGluc3RlYWQgb2YgRklMRU5BTUUKK3N1YiBoYXNoX2FuZF9pbnNlcnRfb2JqZWN0IHsKKwlteSAoJHNlbGYsICRmaWxlbmFtZSkgPSBAXzsKKworCWNhcnAgIkJhZCBmaWxlbmFtZSBcIiRmaWxlbmFtZVwiIiBpZiAkZmlsZW5hbWUgPX4gL1tcclxuXS87CisKKwkkc2VsZi0+X29wZW5faGFzaF9hbmRfaW5zZXJ0X29iamVjdF9pZl9uZWVkZWQoKTsKKwlteSAoJGluLCAkb3V0KSA9ICgkc2VsZi0+e2hhc2hfb2JqZWN0X2lufSwgJHNlbGYtPntoYXNoX29iamVjdF9vdXR9KTsKKworCXVubGVzcyAocHJpbnQgJG91dCAkZmlsZW5hbWUsICJcbiIpIHsKKwkJJHNlbGYtPl9jbG9zZV9oYXNoX2FuZF9pbnNlcnRfb2JqZWN0KCk7CisJCXRocm93IEVycm9yOjpTaW1wbGUoIm91dCBwaXBlIHdlbnQgYmFkIik7CisJfQorCisJY2hvbXAobXkgJGhhc2ggPSA8JGluPik7CisJdW5sZXNzIChkZWZpbmVkKCRoYXNoKSkgeworCQkkc2VsZi0+X2Nsb3NlX2hhc2hfYW5kX2luc2VydF9vYmplY3QoKTsKKwkJdGhyb3cgRXJyb3I6OlNpbXBsZSgiaW4gcGlwZSB3ZW50IGJhZCIpOworCX0KKworCXJldHVybiAkaGFzaDsKK30KKworc3ViIF9vcGVuX2hhc2hfYW5kX2luc2VydF9vYmplY3RfaWZfbmVlZGVkIHsKKwlteSAoJHNlbGYpID0gQF87CisKKwlyZXR1cm4gaWYgZGVmaW5lZCgkc2VsZi0+e2hhc2hfb2JqZWN0X3BpZH0pOworCisJKCRzZWxmLT57aGFzaF9vYmplY3RfcGlkfSwgJHNlbGYtPntoYXNoX29iamVjdF9pbn0sCisJICRzZWxmLT57aGFzaF9vYmplY3Rfb3V0fSwgJHNlbGYtPntoYXNoX29iamVjdF9jdHh9KSA9CisJCWNvbW1hbmRfYmlkaV9waXBlKHF3KGhhc2gtb2JqZWN0IC13IC0tc3RkaW4tcGF0aHMpKTsKK30KKworc3ViIF9jbG9zZV9oYXNoX2FuZF9pbnNlcnRfb2JqZWN0IHsKKwlteSAoJHNlbGYpID0gQF87CisKKwlyZXR1cm4gdW5sZXNzIGRlZmluZWQoJHNlbGYtPntoYXNoX29iamVjdF9waWR9KTsKKworCW15IEB2YXJzID0gbWFwIHsgJ2hhc2hfb2JqZWN0XycgLiAkXyB9IHF3KHBpZCBpbiBvdXQgY3R4KTsKKworCWNvbW1hbmRfY2xvc2VfYmlkaV9waXBlKCRzZWxmLT57QHZhcnN9KTsKKwlkZWxldGUgJHNlbGYtPntAdmFyc307Cit9CisKKz1pdGVtIGNhdF9ibG9iICggU0hBMSwgRklMRUhBTkRMRSApCisKK1ByaW50cyB0aGUgY29udGVudHMgb2YgdGhlIGJsb2IgaWRlbnRpZmllZCBieSBDPFNIQTE+IHRvIEM8RklMRUhBTkRMRT4gYW5kCityZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcHJpbnRlZC4KKworPWN1dAorCitzdWIgY2F0X2Jsb2IgeworCW15ICgkc2VsZiwgJHNoYTEsICRmaCkgPSBAXzsKKworCSRzZWxmLT5fb3Blbl9jYXRfYmxvYl9pZl9uZWVkZWQoKTsKKwlteSAoJGluLCAkb3V0KSA9ICgkc2VsZi0+e2NhdF9ibG9iX2lufSwgJHNlbGYtPntjYXRfYmxvYl9vdXR9KTsKKworCXVubGVzcyAocHJpbnQgJG91dCAkc2hhMSwgIlxuIikgeworCQkkc2VsZi0+X2Nsb3NlX2NhdF9ibG9iKCk7CisJCXRocm93IEVycm9yOjpTaW1wbGUoIm91dCBwaXBlIHdlbnQgYmFkIik7CisJfQorCisJbXkgJGRlc2NyaXB0aW9uID0gPCRpbj47CisJaWYgKCRkZXNjcmlwdGlvbiA9fiAvIG1pc3NpbmckLykgeworCQljYXJwICIkc2hhMSBkb2Vzbid0IGV4aXN0IGluIHRoZSByZXBvc2l0b3J5IjsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmICgkZGVzY3JpcHRpb24gIX4gL15bMC05YS1mQS1GXXs0MH0gXFMrIChcZCspJC8pIHsKKwkJY2FycCAiVW5leHBlY3RlZCByZXN1bHQgcmV0dXJuZWQgZnJvbSBnaXQgY2F0LWZpbGUiOworCQlyZXR1cm4gLTE7CisJfQorCisJbXkgJHNpemUgPSAkMTsKKworCW15ICRibG9iOworCW15ICRieXRlc1JlYWQgPSAwOworCisJd2hpbGUgKDEpIHsKKwkJbXkgJGJ5dGVzTGVmdCA9ICRzaXplIC0gJGJ5dGVzUmVhZDsKKwkJbGFzdCB1bmxlc3MgJGJ5dGVzTGVmdDsKKworCQlteSAkYnl0ZXNUb1JlYWQgPSAkYnl0ZXNMZWZ0IDwgMTAyNCA/ICRieXRlc0xlZnQgOiAxMDI0OworCQlteSAkcmVhZCA9IHJlYWQoJGluLCAkYmxvYiwgJGJ5dGVzVG9SZWFkLCAkYnl0ZXNSZWFkKTsKKwkJdW5sZXNzIChkZWZpbmVkKCRyZWFkKSkgeworCQkJJHNlbGYtPl9jbG9zZV9jYXRfYmxvYigpOworCQkJdGhyb3cgRXJyb3I6OlNpbXBsZSgiaW4gcGlwZSB3ZW50IGJhZCIpOworCQl9CisKKwkJJGJ5dGVzUmVhZCArPSAkcmVhZDsKKwl9CisKKwkjIFNraXAgcGFzdCB0aGUgdHJhaWxpbmcgbmV3bGluZS4KKwlteSAkbmV3bGluZTsKKwlteSAkcmVhZCA9IHJlYWQoJGluLCAkbmV3bGluZSwgMSk7CisJdW5sZXNzIChkZWZpbmVkKCRyZWFkKSkgeworCQkkc2VsZi0+X2Nsb3NlX2NhdF9ibG9iKCk7CisJCXRocm93IEVycm9yOjpTaW1wbGUoImluIHBpcGUgd2VudCBiYWQiKTsKKwl9CisJdW5sZXNzICgkcmVhZCA9PSAxICYmICRuZXdsaW5lIGVxICJcbiIpIHsKKwkJJHNlbGYtPl9jbG9zZV9jYXRfYmxvYigpOworCQl0aHJvdyBFcnJvcjo6U2ltcGxlKCJkaWRuJ3QgZmluZCBuZXdsaW5lIGFmdGVyIGJsb2IiKTsKKwl9CisKKwl1bmxlc3MgKHByaW50ICRmaCAkYmxvYikgeworCQkkc2VsZi0+X2Nsb3NlX2NhdF9ibG9iKCk7CisJCXRocm93IEVycm9yOjpTaW1wbGUoImNvdWxkbid0IHdyaXRlIHRvIHBhc3NlZCBpbiBmaWxlaGFuZGxlIik7CisJfQorCisJcmV0dXJuICRzaXplOworfQorCitzdWIgX29wZW5fY2F0X2Jsb2JfaWZfbmVlZGVkIHsKKwlteSAoJHNlbGYpID0gQF87CisKKwlyZXR1cm4gaWYgZGVmaW5lZCgkc2VsZi0+e2NhdF9ibG9iX3BpZH0pOworCisJKCRzZWxmLT57Y2F0X2Jsb2JfcGlkfSwgJHNlbGYtPntjYXRfYmxvYl9pbn0sCisJICRzZWxmLT57Y2F0X2Jsb2Jfb3V0fSwgJHNlbGYtPntjYXRfYmxvYl9jdHh9KSA9CisJCWNvbW1hbmRfYmlkaV9waXBlKHF3KGNhdC1maWxlIC0tYmF0Y2gpKTsKK30KKworc3ViIF9jbG9zZV9jYXRfYmxvYiB7CisJbXkgKCRzZWxmKSA9IEBfOworCisJcmV0dXJuIHVubGVzcyBkZWZpbmVkKCRzZWxmLT57Y2F0X2Jsb2JfcGlkfSk7CisKKwlteSBAdmFycyA9IG1hcCB7ICdjYXRfYmxvYl8nIC4gJF8gfSBxdyhwaWQgaW4gb3V0IGN0eCk7CisKKwljb21tYW5kX2Nsb3NlX2JpZGlfcGlwZSgkc2VsZi0+e0B2YXJzfSk7CisJZGVsZXRlICRzZWxmLT57QHZhcnN9OworfQogCiA9YmFjawogCkBAIC05MDIsNyArMTA5NCwxMSBAQAogfQogCiAKLXN1YiBERVNUUk9ZIHsgfQorc3ViIERFU1RST1kgeworCW15ICgkc2VsZikgPSBAXzsKKwkkc2VsZi0+X2Nsb3NlX2hhc2hfYW5kX2luc2VydF9vYmplY3QoKTsKKwkkc2VsZi0+X2Nsb3NlX2NhdF9ibG9iKCk7Cit9CiAKIAogIyBQaXBlIGltcGxlbWVudGF0aW9uIGZvciBBY3RpdmVTdGF0ZSBQZXJsLgpkaWZmIC0tZ2l0IGEvcGt0LWxpbmUuYyBiL3BrdC1saW5lLmMKaW5kZXggMzU1NTQ2YS4uZjVkMDA4NiAxMDA2NDQKLS0tIGEvcGt0LWxpbmUuYworKysgYi9wa3QtbGluZS5jCkBAIC02NSwxNiArNjUsMTEgQEAKIAogc3RhdGljIHZvaWQgc2FmZV9yZWFkKGludCBmZCwgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBzaXplKQogewotCXNpemVfdCBuID0gMDsKLQotCXdoaWxlIChuIDwgc2l6ZSkgewotCQlzc2l6ZV90IHJldCA9IHhyZWFkKGZkLCAoY2hhciAqKSBidWZmZXIgKyBuLCBzaXplIC0gbik7Ci0JCWlmIChyZXQgPCAwKQotCQkJZGllKCJyZWFkIGVycm9yICglcykiLCBzdHJlcnJvcihlcnJubykpOwotCQlpZiAoIXJldCkKLQkJCWRpZSgiVGhlIHJlbW90ZSBlbmQgaHVuZyB1cCB1bmV4cGVjdGVkbHkiKTsKLQkJbiArPSByZXQ7Ci0JfQorCXNzaXplX3QgcmV0ID0gcmVhZF9pbl9mdWxsKGZkLCBidWZmZXIsIHNpemUpOworCWlmIChyZXQgPCAwKQorCQlkaWUoInJlYWQgZXJyb3IgKCVzKSIsIHN0cmVycm9yKGVycm5vKSk7CisJZWxzZSBpZiAocmV0IDwgc2l6ZSkKKwkJZGllKCJUaGUgcmVtb3RlIGVuZCBodW5nIHVwIHVuZXhwZWN0ZWRseSIpOwogfQogCiBpbnQgcGFja2V0X3JlYWRfbGluZShpbnQgZmQsIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgc2l6ZSkKZGlmZiAtLWdpdCBhL3ByZXR0eS5jIGIvcHJldHR5LmMKaW5kZXggMTZiZmI4Ni4uNjI4YTUyMCAxMDA2NDQKLS0tIGEvcHJldHR5LmMKKysrIGIvcHJldHR5LmMKQEAgLTMsNDEgKzMsNTAgQEAKICNpbmNsdWRlICJ1dGY4LmgiCiAjaW5jbHVkZSAiZGlmZi5oIgogI2luY2x1ZGUgInJldmlzaW9uLmgiCi0KLXN0YXRpYyBzdHJ1Y3QgY210X2ZtdF9tYXAgewotCWNvbnN0IGNoYXIgKm47Ci0Jc2l6ZV90IGNtcF9sZW47Ci0JZW51bSBjbWl0X2ZtdCB2OwotfSBjbXRfZm10c1tdID0gewotCXsgInJhdyIsCTEsCUNNSVRfRk1UX1JBVyB9LAotCXsgIm1lZGl1bSIsCTEsCUNNSVRfRk1UX01FRElVTSB9LAotCXsgInNob3J0IiwJMSwJQ01JVF9GTVRfU0hPUlQgfSwKLQl7ICJlbWFpbCIsCTEsCUNNSVRfRk1UX0VNQUlMIH0sCi0JeyAiZnVsbCIsCTUsCUNNSVRfRk1UX0ZVTEwgfSwKLQl7ICJmdWxsZXIiLAk1LAlDTUlUX0ZNVF9GVUxMRVIgfSwKLQl7ICJvbmVsaW5lIiwJMSwJQ01JVF9GTVRfT05FTElORSB9LAotCXsgImZvcm1hdDoiLAk3LAlDTUlUX0ZNVF9VU0VSRk9STUFUfSwKLX07CisjaW5jbHVkZSAicGF0aC1saXN0LmgiCisjaW5jbHVkZSAibWFpbG1hcC5oIgogCiBzdGF0aWMgY2hhciAqdXNlcl9mb3JtYXQ7CiAKLWVudW0gY21pdF9mbXQgZ2V0X2NvbW1pdF9mb3JtYXQoY29uc3QgY2hhciAqYXJnKQordm9pZCBnZXRfY29tbWl0X2Zvcm1hdChjb25zdCBjaGFyICphcmcsIHN0cnVjdCByZXZfaW5mbyAqcmV2KQogewogCWludCBpOworCXN0YXRpYyBzdHJ1Y3QgY210X2ZtdF9tYXAgeworCQljb25zdCBjaGFyICpuOworCQlzaXplX3QgY21wX2xlbjsKKwkJZW51bSBjbWl0X2ZtdCB2OworCX0gY210X2ZtdHNbXSA9IHsKKwkJeyAicmF3IiwJMSwJQ01JVF9GTVRfUkFXIH0sCisJCXsgIm1lZGl1bSIsCTEsCUNNSVRfRk1UX01FRElVTSB9LAorCQl7ICJzaG9ydCIsCTEsCUNNSVRfRk1UX1NIT1JUIH0sCisJCXsgImVtYWlsIiwJMSwJQ01JVF9GTVRfRU1BSUwgfSwKKwkJeyAiZnVsbCIsCTUsCUNNSVRfRk1UX0ZVTEwgfSwKKwkJeyAiZnVsbGVyIiwJNSwJQ01JVF9GTVRfRlVMTEVSIH0sCisJCXsgIm9uZWxpbmUiLAkxLAlDTUlUX0ZNVF9PTkVMSU5FIH0sCisJfTsKIAotCWlmICghYXJnIHx8ICEqYXJnKQotCQlyZXR1cm4gQ01JVF9GTVRfREVGQVVMVDsKLQlpZiAoKmFyZyA9PSAnPScpCi0JCWFyZysrOwotCWlmICghcHJlZml4Y21wKGFyZywgImZvcm1hdDoiKSkgeworCXJldi0+dXNlX3Rlcm1pbmF0b3IgPSAwOworCWlmICghYXJnIHx8ICEqYXJnKSB7CisJCXJldi0+Y29tbWl0X2Zvcm1hdCA9IENNSVRfRk1UX0RFRkFVTFQ7CisJCXJldHVybjsKKwl9CisJaWYgKCFwcmVmaXhjbXAoYXJnLCAiZm9ybWF0OiIpIHx8ICFwcmVmaXhjbXAoYXJnLCAidGZvcm1hdDoiKSkgeworCQljb25zdCBjaGFyICpjcCA9IHN0cmNocihhcmcsICc6JykgKyAxOwogCQlmcmVlKHVzZXJfZm9ybWF0KTsKLQkJdXNlcl9mb3JtYXQgPSB4c3RyZHVwKGFyZyArIDcpOwotCQlyZXR1cm4gQ01JVF9GTVRfVVNFUkZPUk1BVDsKKwkJdXNlcl9mb3JtYXQgPSB4c3RyZHVwKGNwKTsKKwkJaWYgKGFyZ1swXSA9PSAndCcpCisJCQlyZXYtPnVzZV90ZXJtaW5hdG9yID0gMTsKKwkJcmV2LT5jb21taXRfZm9ybWF0ID0gQ01JVF9GTVRfVVNFUkZPUk1BVDsKKwkJcmV0dXJuOwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjbXRfZm10cyk7IGkrKykgewogCQlpZiAoIXN0cm5jbXAoYXJnLCBjbXRfZm10c1tpXS5uLCBjbXRfZm10c1tpXS5jbXBfbGVuKSAmJgotCQkgICAgIXN0cm5jbXAoYXJnLCBjbXRfZm10c1tpXS5uLCBzdHJsZW4oYXJnKSkpCi0JCQlyZXR1cm4gY210X2ZtdHNbaV0udjsKKwkJICAgICFzdHJuY21wKGFyZywgY210X2ZtdHNbaV0ubiwgc3RybGVuKGFyZykpKSB7CisJCQlpZiAoY210X2ZtdHNbaV0udiA9PSBDTUlUX0ZNVF9PTkVMSU5FKQorCQkJCXJldi0+dXNlX3Rlcm1pbmF0b3IgPSAxOworCQkJcmV2LT5jb21taXRfZm9ybWF0ID0gY210X2ZtdHNbaV0udjsKKwkJCXJldHVybjsKKwkJfQogCX0KIAogCWRpZSgiaW52YWxpZCAtLXByZXR0eSBmb3JtYXQ6ICVzIiwgYXJnKTsKQEAgLTI4MSw2ICsyOTAsMjUgQEAKIAlyZXR1cm4gb3V0OwogfQogCitzdGF0aWMgaW50IG1haWxtYXBfbmFtZShzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqZW1haWwpCit7CisJc3RhdGljIHN0cnVjdCBwYXRoX2xpc3QgKm1haWxfbWFwOworCWNoYXIgYnVmZmVyWzEwMjRdOworCisJaWYgKCFtYWlsX21hcCkgeworCQltYWlsX21hcCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCptYWlsX21hcCkpOworCQlyZWFkX21haWxtYXAobWFpbF9tYXAsICIubWFpbG1hcCIsIE5VTEwpOworCX0KKworCWlmICghbWFpbF9tYXAtPm5yKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIW1hcF9lbWFpbChtYWlsX21hcCwgZW1haWwsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpKQorCQlyZXR1cm4gLTE7CisJc3RyYnVmX2FkZHN0cihzYiwgYnVmZmVyKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHNpemVfdCBmb3JtYXRfcGVyc29uX3BhcnQoc3RydWN0IHN0cmJ1ZiAqc2IsIGNoYXIgcGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptc2csIGludCBsZW4pCiB7CkBAIC0zMDIsMTAgKzMzMCwxMiBAQAogCWlmIChlbmQgPj0gbGVuIC0gMikKIAkJZ290byBza2lwOwogCi0JaWYgKHBhcnQgPT0gJ24nKSB7CS8qIG5hbWUgKi8KKwlpZiAocGFydCA9PSAnbicgfHwgcGFydCA9PSAnTicpIHsJLyogbmFtZSAqLwogCQl3aGlsZSAoZW5kID4gMCAmJiBpc3NwYWNlKG1zZ1tlbmQgLSAxXSkpCiAJCQllbmQtLTsKLQkJc3RyYnVmX2FkZChzYiwgbXNnLCBlbmQpOworCQlpZiAocGFydCAhPSAnTicgfHwgIW1zZ1tlbmRdIHx8ICFtc2dbZW5kICsgMV0gfHwKKwkJICAgIG1haWxtYXBfbmFtZShzYiwgbXNnICsgZW5kICsgMikgPCAwKQorCQkJc3RyYnVmX2FkZChzYiwgbXNnLCBlbmQpOwogCQlyZXR1cm4gcGxhY2Vob2xkZXJfbGVuOwogCX0KIAlzdGFydCA9ICsrZW5kOyAvKiBzYXZlIGVtYWlsIHN0YXJ0IHBvc2l0aW9uICovCkBAIC00NTcsNiArNDg3LDcgQEAKIAljb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBjLT5jb21taXQ7CiAJY29uc3QgY2hhciAqbXNnID0gY29tbWl0LT5idWZmZXI7CiAJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCWludCBoMSwgaDI7CiAKIAkvKiB0aGVzZSBhcmUgaW5kZXBlbmRlbnQgb2YgdGhlIGNvbW1pdCAqLwogCXN3aXRjaCAocGxhY2Vob2xkZXJbMF0pIHsKQEAgLTQ3OCw2ICs1MDksMTYgQEAKIAljYXNlICduJzoJCS8qIG5ld2xpbmUgKi8KIAkJc3RyYnVmX2FkZGNoKHNiLCAnXG4nKTsKIAkJcmV0dXJuIDE7CisJY2FzZSAneCc6CisJCS8qICV4MDAgPT0gTlVMLCAleDBhID09IExGLCBldGMuICovCisJCWlmICgwIDw9IChoMSA9IGhleHZhbF90YWJsZVsweGZmICYgcGxhY2Vob2xkZXJbMV1dKSAmJgorCQkgICAgaDEgPD0gMTYgJiYKKwkJICAgIDAgPD0gKGgyID0gaGV4dmFsX3RhYmxlWzB4ZmYgJiBwbGFjZWhvbGRlclsyXV0pICYmCisJCSAgICBoMiA8PSAxNikgeworCQkJc3RyYnVmX2FkZGNoKHNiLCAoaDE8PDQpfGgyKTsKKwkJCXJldHVybiAzOworCQl9IGVsc2UKKwkJCXJldHVybiAwOwogCX0KIAogCS8qIHRoZXNlIGRlcGVuZCBvbiB0aGUgY29tbWl0ICovCmRpZmYgLS1naXQgYS9wcm9ncmVzcy5jIGIvcHJvZ3Jlc3MuYwppbmRleCBkMTlmODBjLi41NWE4Njg3IDEwMDY0NAotLS0gYS9wcm9ncmVzcy5jCisrKyBiL3Byb2dyZXNzLmMKQEAgLTI0MSwxNiArMjQxLDIxIEBACiAJKnBfcHJvZ3Jlc3MgPSBOVUxMOwogCWlmIChwcm9ncmVzcy0+bGFzdF92YWx1ZSAhPSAtMSkgewogCQkvKiBGb3JjZSB0aGUgbGFzdCB1cGRhdGUgKi8KLQkJY2hhciBidWZbc3RybGVuKG1zZykgKyA1XTsKKwkJY2hhciBidWZbMTI4XSwgKmJ1ZnA7CisJCXNpemVfdCBsZW4gPSBzdHJsZW4obXNnKSArIDU7CiAJCXN0cnVjdCB0aHJvdWdocHV0ICp0cCA9IHByb2dyZXNzLT50aHJvdWdocHV0OworCisJCWJ1ZnAgPSAobGVuIDwgc2l6ZW9mKGJ1ZikpID8gYnVmIDogeG1hbGxvYyhsZW4gKyAxKTsKIAkJaWYgKHRwKSB7CiAJCQl1bnNpZ25lZCBpbnQgcmF0ZSA9ICF0cC0+YXZnX21pc2VjcyA/IDAgOgogCQkJCQl0cC0+YXZnX2J5dGVzIC8gdHAtPmF2Z19taXNlY3M7CiAJCQl0aHJvdWdocHV0X3N0cmluZyh0cCwgdHAtPmN1cnJfdG90YWwsIHJhdGUpOwogCQl9CiAJCXByb2dyZXNzX3VwZGF0ZSA9IDE7Ci0JCXNwcmludGYoYnVmLCAiLCAlcy5cbiIsIG1zZyk7Ci0JCWRpc3BsYXkocHJvZ3Jlc3MsIHByb2dyZXNzLT5sYXN0X3ZhbHVlLCBidWYpOworCQlzcHJpbnRmKGJ1ZnAsICIsICVzLlxuIiwgbXNnKTsKKwkJZGlzcGxheShwcm9ncmVzcywgcHJvZ3Jlc3MtPmxhc3RfdmFsdWUsIGJ1ZnApOworCQlpZiAoYnVmICE9IGJ1ZnApCisJCQlmcmVlKGJ1ZnApOwogCX0KIAljbGVhcl9wcm9ncmVzc19zaWduYWwoKTsKIAlmcmVlKHByb2dyZXNzLT50aHJvdWdocHV0KTsKZGlmZiAtLWdpdCBhL3JlYWQtY2FjaGUuYyBiL3JlYWQtY2FjaGUuYwppbmRleCBhOTJiMjViLi5mODNkZThjIDEwMDY0NAotLS0gYS9yZWFkLWNhY2hlLmMKKysrIGIvcmVhZC1jYWNoZS5jCkBAIC0yMyw4MCArMjMsMjEgQEAKIAogc3RydWN0IGluZGV4X3N0YXRlIHRoZV9pbmRleDsKIAotc3RhdGljIHVuc2lnbmVkIGludCBoYXNoX25hbWUoY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4pCi17Ci0JdW5zaWduZWQgaW50IGhhc2ggPSAweDEyMzsKLQotCWRvIHsKLQkJdW5zaWduZWQgY2hhciBjID0gKm5hbWUrKzsKLQkJaGFzaCA9IGhhc2gqMTAxICsgYzsKLQl9IHdoaWxlICgtLW5hbWVsZW4pOwotCXJldHVybiBoYXNoOwotfQotCi1zdGF0aWMgdm9pZCBoYXNoX2luZGV4X2VudHJ5KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQotewotCXZvaWQgKipwb3M7Ci0JdW5zaWduZWQgaW50IGhhc2g7Ci0KLQlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfSEFTSEVEKQotCQlyZXR1cm47Ci0JY2UtPmNlX2ZsYWdzIHw9IENFX0hBU0hFRDsKLQljZS0+bmV4dCA9IE5VTEw7Ci0JaGFzaCA9IGhhc2hfbmFtZShjZS0+bmFtZSwgY2VfbmFtZWxlbihjZSkpOwotCXBvcyA9IGluc2VydF9oYXNoKGhhc2gsIGNlLCAmaXN0YXRlLT5uYW1lX2hhc2gpOwotCWlmIChwb3MpIHsKLQkJY2UtPm5leHQgPSAqcG9zOwotCQkqcG9zID0gY2U7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBsYXp5X2luaXRfbmFtZV9oYXNoKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQotewotCWludCBucjsKLQotCWlmIChpc3RhdGUtPm5hbWVfaGFzaF9pbml0aWFsaXplZCkKLQkJcmV0dXJuOwotCWZvciAobnIgPSAwOyBuciA8IGlzdGF0ZS0+Y2FjaGVfbnI7IG5yKyspCi0JCWhhc2hfaW5kZXhfZW50cnkoaXN0YXRlLCBpc3RhdGUtPmNhY2hlW25yXSk7Ci0JaXN0YXRlLT5uYW1lX2hhc2hfaW5pdGlhbGl6ZWQgPSAxOwotfQotCiBzdGF0aWMgdm9pZCBzZXRfaW5kZXhfZW50cnkoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGludCBuciwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKIHsKLQljZS0+Y2VfZmxhZ3MgJj0gfkNFX1VOSEFTSEVEOwogCWlzdGF0ZS0+Y2FjaGVbbnJdID0gY2U7Ci0JaWYgKGlzdGF0ZS0+bmFtZV9oYXNoX2luaXRpYWxpemVkKQotCQloYXNoX2luZGV4X2VudHJ5KGlzdGF0ZSwgY2UpOworCWFkZF9uYW1lX2hhc2goaXN0YXRlLCBjZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlcGxhY2VfaW5kZXhfZW50cnkoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGludCBuciwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKIHsKIAlzdHJ1Y3QgY2FjaGVfZW50cnkgKm9sZCA9IGlzdGF0ZS0+Y2FjaGVbbnJdOwogCi0JcmVtb3ZlX2luZGV4X2VudHJ5KG9sZCk7CisJcmVtb3ZlX25hbWVfaGFzaChvbGQpOwogCXNldF9pbmRleF9lbnRyeShpc3RhdGUsIG5yLCBjZSk7CiAJaXN0YXRlLT5jYWNoZV9jaGFuZ2VkID0gMTsKIH0KIAotaW50IGluZGV4X25hbWVfZXhpc3RzKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbikKLXsKLQl1bnNpZ25lZCBpbnQgaGFzaCA9IGhhc2hfbmFtZShuYW1lLCBuYW1lbGVuKTsKLQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOwotCi0JbGF6eV9pbml0X25hbWVfaGFzaChpc3RhdGUpOwotCWNlID0gbG9va3VwX2hhc2goaGFzaCwgJmlzdGF0ZS0+bmFtZV9oYXNoKTsKLQotCXdoaWxlIChjZSkgewotCQlpZiAoIShjZS0+Y2VfZmxhZ3MgJiBDRV9VTkhBU0hFRCkpIHsKLQkJCWlmICghY2FjaGVfbmFtZV9jb21wYXJlKG5hbWUsIG5hbWVsZW4sIGNlLT5uYW1lLCBjZS0+Y2VfZmxhZ3MpKQotCQkJCXJldHVybiAxOwotCQl9Ci0JCWNlID0gY2UtPm5leHQ7Ci0JfQotCXJldHVybiAwOwotfQotCiAvKgogICogVGhpcyBvbmx5IHVwZGF0ZXMgdGhlICJub24tY3JpdGljYWwiIHBhcnRzIG9mIHRoZSBkaXJlY3RvcnkKICAqIGNhY2hlLCBpZSB0aGUgcGFydHMgdGhhdCBhcmVuJ3QgdHJhY2tlZCBieSBHSVQsIGFuZCBvbmx5IHVzZWQKQEAgLTE5Nyw2ICsxMzgsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBpc19lbXB0eV9ibG9iX3NoYTEoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBlbXB0eV9ibG9iX3NoYTFbMjBdID0geworCQkweGU2LDB4OWQsMHhlMiwweDliLDB4YjIsMHhkMSwweGQ2LDB4NDMsMHg0YiwweDhiLAorCQkweDI5LDB4YWUsMHg3NywweDVhLDB4ZDgsMHhjMiwweGU0LDB4OGMsMHg1MywweDkxCisJfTsKKworCXJldHVybiAhaGFzaGNtcChzaGExLCBlbXB0eV9ibG9iX3NoYTEpOworfQorCiBzdGF0aWMgaW50IGNlX21hdGNoX3N0YXRfYmFzaWMoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IHN0YXQgKnN0KQogewogCXVuc2lnbmVkIGludCBjaGFuZ2VkID0gMDsKQEAgLTI1MiwxMiArMjAzLDE5IEBACiAJaWYgKGNlLT5jZV9zaXplICE9ICh1bnNpZ25lZCBpbnQpIHN0LT5zdF9zaXplKQogCQljaGFuZ2VkIHw9IERBVEFfQ0hBTkdFRDsKIAorCS8qIFJhY2lseSBzbXVkZ2VkIGVudHJ5PyAqLworCWlmICghY2UtPmNlX3NpemUpIHsKKwkJaWYgKCFpc19lbXB0eV9ibG9iX3NoYTEoY2UtPnNoYTEpKQorCQkJY2hhbmdlZCB8PSBEQVRBX0NIQU5HRUQ7CisJfQorCiAJcmV0dXJuIGNoYW5nZWQ7CiB9CiAKIHN0YXRpYyBpbnQgaXNfcmFjeV90aW1lc3RhbXAoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCiB7Ci0JcmV0dXJuIChpc3RhdGUtPnRpbWVzdGFtcCAmJgorCXJldHVybiAoIVNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSAmJgorCQlpc3RhdGUtPnRpbWVzdGFtcCAmJgogCQkoKHVuc2lnbmVkIGludClpc3RhdGUtPnRpbWVzdGFtcCkgPD0gY2UtPmNlX210aW1lKTsKIH0KIApAQCAtNDM4LDcgKzM5Niw3IEBACiB7CiAJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGlzdGF0ZS0+Y2FjaGVbcG9zXTsKIAotCXJlbW92ZV9pbmRleF9lbnRyeShjZSk7CisJcmVtb3ZlX25hbWVfaGFzaChjZSk7CiAJaXN0YXRlLT5jYWNoZV9jaGFuZ2VkID0gMTsKIAlpc3RhdGUtPmNhY2hlX25yLS07CiAJaWYgKHBvcyA+PSBpc3RhdGUtPmNhY2hlX25yKQpAQCAtNDg4LDIxICs0NDYsNTIgQEAKIAlyZXR1cm4gcG9zOwogfQogCi1pbnQgYWRkX2ZpbGVfdG9faW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGNvbnN0IGNoYXIgKnBhdGgsIGludCB2ZXJib3NlKQorc3RhdGljIGludCBkaWZmZXJlbnRfbmFtZShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmFsaWFzKQogewotCWludCBzaXplLCBuYW1lbGVuLCBwb3M7Ci0Jc3RydWN0IHN0YXQgc3Q7Ci0Jc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKwlpbnQgbGVuID0gY2VfbmFtZWxlbihjZSk7CisJcmV0dXJuIGNlX25hbWVsZW4oYWxpYXMpICE9IGxlbiB8fCBtZW1jbXAoY2UtPm5hbWUsIGFsaWFzLT5uYW1lLCBsZW4pOworfQorCisvKgorICogSWYgd2UgYWRkIGEgZmlsZW5hbWUgdGhhdCBhbGlhc2VzIGluIHRoZSBjYWNoZSwgd2Ugd2lsbCB1c2UgdGhlCisgKiBuYW1lIHRoYXQgd2UgYWxyZWFkeSBoYXZlIC0gYnV0IHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIHRoZSBzYW1lCisgKiBhbGlhcyB0d2ljZSwgYmVjYXVzZSB0aGF0IGltcGxpZXMgdGhhdCB0aGVyZSB3ZXJlIGFjdHVhbGx5IHR3bworICogZGlmZmVyZW50IGZpbGVzIHdpdGggYWxpYXNpbmcgbmFtZXMhCisgKgorICogU28gd2UgdXNlIHRoZSBDRV9BRERFRCBmbGFnIHRvIHZlcmlmeSB0aGF0IHRoZSBhbGlhcyB3YXMgYW4gb2xkCisgKiBvbmUgYmVmb3JlIHdlIGFjY2VwdCBpdCBhcworICovCitzdGF0aWMgc3RydWN0IGNhY2hlX2VudHJ5ICpjcmVhdGVfYWxpYXNfY2Uoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IGNhY2hlX2VudHJ5ICphbGlhcykKK3sKKwlpbnQgbGVuOworCXN0cnVjdCBjYWNoZV9lbnRyeSAqbmV3OworCisJaWYgKGFsaWFzLT5jZV9mbGFncyAmIENFX0FEREVEKQorCQlkaWUoIldpbGwgbm90IGFkZCBmaWxlIGFsaWFzICclcycgKCclcycgYWxyZWFkeSBleGlzdHMgaW4gaW5kZXgpIiwgY2UtPm5hbWUsIGFsaWFzLT5uYW1lKTsKKworCS8qIE9rLCBjcmVhdGUgdGhlIG5ldyBlbnRyeSB1c2luZyB0aGUgbmFtZSBvZiB0aGUgZXhpc3RpbmcgYWxpYXMgKi8KKwlsZW4gPSBjZV9uYW1lbGVuKGFsaWFzKTsKKwluZXcgPSB4Y2FsbG9jKDEsIGNhY2hlX2VudHJ5X3NpemUobGVuKSk7CisJbWVtY3B5KG5ldy0+bmFtZSwgYWxpYXMtPm5hbWUsIGxlbik7CisJY29weV9jYWNoZV9lbnRyeShuZXcsIGNlKTsKKwlmcmVlKGNlKTsKKwlyZXR1cm4gbmV3OworfQorCitpbnQgYWRkX3RvX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RhdCAqc3QsIGludCBmbGFncykKK3sKKwlpbnQgc2l6ZSwgbmFtZWxlbiwgd2FzX3NhbWU7CisJbW9kZV90IHN0X21vZGUgPSBzdC0+c3RfbW9kZTsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCAqYWxpYXM7CiAJdW5zaWduZWQgY2Vfb3B0aW9uID0gQ0VfTUFUQ0hfSUdOT1JFX1ZBTElEfENFX01BVENIX1JBQ1lfSVNfRElSVFk7CisJaW50IHZlcmJvc2UgPSBmbGFncyAmIChBRERfQ0FDSEVfVkVSQk9TRSB8IEFERF9DQUNIRV9QUkVURU5EKTsKKwlpbnQgcHJldGVuZCA9IGZsYWdzICYgQUREX0NBQ0hFX1BSRVRFTkQ7CiAKLQlpZiAobHN0YXQocGF0aCwgJnN0KSkKLQkJZGllKCIlczogdW5hYmxlIHRvIHN0YXQgKCVzKSIsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7Ci0KLQlpZiAoIVNfSVNSRUcoc3Quc3RfbW9kZSkgJiYgIVNfSVNMTksoc3Quc3RfbW9kZSkgJiYgIVNfSVNESVIoc3Quc3RfbW9kZSkpCi0JCWRpZSgiJXM6IGNhbiBvbmx5IGFkZCByZWd1bGFyIGZpbGVzLCBzeW1ib2xpYyBsaW5rcyBvciBnaXQtZGlyZWN0b3JpZXMiLCBwYXRoKTsKKwlpZiAoIVNfSVNSRUcoc3RfbW9kZSkgJiYgIVNfSVNMTksoc3RfbW9kZSkgJiYgIVNfSVNESVIoc3RfbW9kZSkpCisJCXJldHVybiBlcnJvcigiJXM6IGNhbiBvbmx5IGFkZCByZWd1bGFyIGZpbGVzLCBzeW1ib2xpYyBsaW5rcyBvciBnaXQtZGlyZWN0b3JpZXMiLCBwYXRoKTsKIAogCW5hbWVsZW4gPSBzdHJsZW4ocGF0aCk7Ci0JaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpIHsKKwlpZiAoU19JU0RJUihzdF9tb2RlKSkgewogCQl3aGlsZSAobmFtZWxlbiAmJiBwYXRoW25hbWVsZW4tMV0gPT0gJy8nKQogCQkJbmFtZWxlbi0tOwogCX0KQEAgLTUxMCwxMCArNDk5LDEwIEBACiAJY2UgPSB4Y2FsbG9jKDEsIHNpemUpOwogCW1lbWNweShjZS0+bmFtZSwgcGF0aCwgbmFtZWxlbik7CiAJY2UtPmNlX2ZsYWdzID0gbmFtZWxlbjsKLQlmaWxsX3N0YXRfY2FjaGVfaW5mbyhjZSwgJnN0KTsKKwlmaWxsX3N0YXRfY2FjaGVfaW5mbyhjZSwgc3QpOwogCiAJaWYgKHRydXN0X2V4ZWN1dGFibGVfYml0ICYmIGhhc19zeW1saW5rcykKLQkJY2UtPmNlX21vZGUgPSBjcmVhdGVfY2VfbW9kZShzdC5zdF9tb2RlKTsKKwkJY2UtPmNlX21vZGUgPSBjcmVhdGVfY2VfbW9kZShzdF9tb2RlKTsKIAllbHNlIHsKIAkJLyogSWYgdGhlcmUgaXMgYW4gZXhpc3RpbmcgZW50cnksIHBpY2sgdGhlIG1vZGUgYml0cyBhbmQgdHlwZQogCQkgKiBmcm9tIGl0LCBvdGhlcndpc2UgYXNzdW1lIHVuZXhlY3V0YWJsZSByZWd1bGFyIGZpbGUuCkBAIC01MjIsMjggKzUxMSw0NiBAQAogCQlpbnQgcG9zID0gaW5kZXhfbmFtZV9wb3NfYWxzb191bm1lcmdlZChpc3RhdGUsIHBhdGgsIG5hbWVsZW4pOwogCiAJCWVudCA9ICgwIDw9IHBvcykgPyBpc3RhdGUtPmNhY2hlW3Bvc10gOiBOVUxMOwotCQljZS0+Y2VfbW9kZSA9IGNlX21vZGVfZnJvbV9zdGF0KGVudCwgc3Quc3RfbW9kZSk7CisJCWNlLT5jZV9tb2RlID0gY2VfbW9kZV9mcm9tX3N0YXQoZW50LCBzdF9tb2RlKTsKIAl9CiAKLQlwb3MgPSBpbmRleF9uYW1lX3Bvcyhpc3RhdGUsIGNlLT5uYW1lLCBuYW1lbGVuKTsKLQlpZiAoMCA8PSBwb3MgJiYKLQkgICAgIWNlX3N0YWdlKGlzdGF0ZS0+Y2FjaGVbcG9zXSkgJiYKLQkgICAgIWllX21hdGNoX3N0YXQoaXN0YXRlLCBpc3RhdGUtPmNhY2hlW3Bvc10sICZzdCwgY2Vfb3B0aW9uKSkgeworCWFsaWFzID0gaW5kZXhfbmFtZV9leGlzdHMoaXN0YXRlLCBjZS0+bmFtZSwgY2VfbmFtZWxlbihjZSksIGlnbm9yZV9jYXNlKTsKKwlpZiAoYWxpYXMgJiYgIWNlX3N0YWdlKGFsaWFzKSAmJiAhaWVfbWF0Y2hfc3RhdChpc3RhdGUsIGFsaWFzLCBzdCwgY2Vfb3B0aW9uKSkgewogCQkvKiBOb3RoaW5nIGNoYW5nZWQsIHJlYWxseSAqLwogCQlmcmVlKGNlKTsKLQkJY2VfbWFya191cHRvZGF0ZShpc3RhdGUtPmNhY2hlW3Bvc10pOworCQljZV9tYXJrX3VwdG9kYXRlKGFsaWFzKTsKKwkJYWxpYXMtPmNlX2ZsYWdzIHw9IENFX0FEREVEOwogCQlyZXR1cm4gMDsKIAl9CisJaWYgKGluZGV4X3BhdGgoY2UtPnNoYTEsIHBhdGgsIHN0LCAxKSkKKwkJcmV0dXJuIGVycm9yKCJ1bmFibGUgdG8gaW5kZXggZmlsZSAlcyIsIHBhdGgpOworCWlmIChpZ25vcmVfY2FzZSAmJiBhbGlhcyAmJiBkaWZmZXJlbnRfbmFtZShjZSwgYWxpYXMpKQorCQljZSA9IGNyZWF0ZV9hbGlhc19jZShjZSwgYWxpYXMpOworCWNlLT5jZV9mbGFncyB8PSBDRV9BRERFRDsKIAotCWlmIChpbmRleF9wYXRoKGNlLT5zaGExLCBwYXRoLCAmc3QsIDEpKQotCQlkaWUoInVuYWJsZSB0byBpbmRleCBmaWxlICVzIiwgcGF0aCk7Ci0JaWYgKGFkZF9pbmRleF9lbnRyeShpc3RhdGUsIGNlLCBBRERfQ0FDSEVfT0tfVE9fQUREfEFERF9DQUNIRV9PS19UT19SRVBMQUNFKSkKLQkJZGllKCJ1bmFibGUgdG8gYWRkICVzIHRvIGluZGV4IixwYXRoKTsKLQlpZiAodmVyYm9zZSkKKwkvKiBJdCB3YXMgc3VzcGVjdGVkIHRvIGJlIHJlY2lseSBjbGVhbiwgYnV0IGl0IHR1cm5zIG91dCB0byBiZSBPayAqLworCXdhc19zYW1lID0gKGFsaWFzICYmCisJCSAgICAhY2Vfc3RhZ2UoYWxpYXMpICYmCisJCSAgICAhaGFzaGNtcChhbGlhcy0+c2hhMSwgY2UtPnNoYTEpICYmCisJCSAgICBjZS0+Y2VfbW9kZSA9PSBhbGlhcy0+Y2VfbW9kZSk7CisKKwlpZiAocHJldGVuZCkKKwkJOworCWVsc2UgaWYgKGFkZF9pbmRleF9lbnRyeShpc3RhdGUsIGNlLCBBRERfQ0FDSEVfT0tfVE9fQUREfEFERF9DQUNIRV9PS19UT19SRVBMQUNFKSkKKwkJcmV0dXJuIGVycm9yKCJ1bmFibGUgdG8gYWRkICVzIHRvIGluZGV4IixwYXRoKTsKKwlpZiAodmVyYm9zZSAmJiAhd2FzX3NhbWUpCiAJCXByaW50ZigiYWRkICclcydcbiIsIHBhdGgpOwogCXJldHVybiAwOwogfQogCitpbnQgYWRkX2ZpbGVfdG9faW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGNvbnN0IGNoYXIgKnBhdGgsIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlpZiAobHN0YXQocGF0aCwgJnN0KSkKKwkJZGllKCIlczogdW5hYmxlIHRvIHN0YXQgKCVzKSIsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisJcmV0dXJuIGFkZF90b19pbmRleChpc3RhdGUsIHBhdGgsICZzdCwgZmxhZ3MpOworfQorCiBzdHJ1Y3QgY2FjaGVfZW50cnkgKm1ha2VfY2FjaGVfZW50cnkodW5zaWduZWQgaW50IG1vZGUsCiAJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKnBhdGgsIGludCBzdGFnZSwKIAkJaW50IHJlZnJlc2gpCkBAIC05MDIsNiArOTA5LDE1IEBACiAJaWYgKGNlX3VwdG9kYXRlKGNlKSkKIAkJcmV0dXJuIGNlOwogCisJLyoKKwkgKiBDRV9WQUxJRCBtZWFucyB0aGUgdXNlciBwcm9taXNlZCB1cyB0aGF0IHRoZSBjaGFuZ2UgdG8KKwkgKiB0aGUgd29yayB0cmVlIGRvZXMgbm90IG1hdHRlciBhbmQgdG9sZCB1cyBub3QgdG8gd29ycnkuCisJICovCisJaWYgKCFpZ25vcmVfdmFsaWQgJiYgKGNlLT5jZV9mbGFncyAmIENFX1ZBTElEKSkgeworCQljZV9tYXJrX3VwdG9kYXRlKGNlKTsKKwkJcmV0dXJuIGNlOworCX0KKwogCWlmIChsc3RhdChjZS0+bmFtZSwgJnN0KSA8IDApIHsKIAkJaWYgKGVycikKIAkJCSplcnIgPSBlcnJubzsKQEAgLTk2Miw2ICs5NzgsNyBAQAogCWludCBhbGxvd191bm1lcmdlZCA9IChmbGFncyAmIFJFRlJFU0hfVU5NRVJHRUQpICE9IDA7CiAJaW50IHF1aWV0ID0gKGZsYWdzICYgUkVGUkVTSF9RVUlFVCkgIT0gMDsKIAlpbnQgbm90X25ldyA9IChmbGFncyAmIFJFRlJFU0hfSUdOT1JFX01JU1NJTkcpICE9IDA7CisJaW50IGlnbm9yZV9zdWJtb2R1bGVzID0gKGZsYWdzICYgUkVGUkVTSF9JR05PUkVfU1VCTU9EVUxFUykgIT0gMDsKIAl1bnNpZ25lZCBpbnQgb3B0aW9ucyA9IHJlYWxseSA/IENFX01BVENIX0lHTk9SRV9WQUxJRCA6IDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgaXN0YXRlLT5jYWNoZV9ucjsgaSsrKSB7CkBAIC05NjksNiArOTg2LDkgQEAKIAkJaW50IGNhY2hlX2Vycm5vID0gMDsKIAogCQljZSA9IGlzdGF0ZS0+Y2FjaGVbaV07CisJCWlmIChpZ25vcmVfc3VibW9kdWxlcyAmJiBTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpCisJCQljb250aW51ZTsKKwogCQlpZiAoY2Vfc3RhZ2UoY2UpKSB7CiAJCQl3aGlsZSAoKGkgPCBpc3RhdGUtPmNhY2hlX25yKSAmJgogCQkJICAgICAgICEgc3RyY21wKGlzdGF0ZS0+Y2FjaGVbaV0tPm5hbWUsIGNlLT5uYW1lKSkKQEAgLTEzNzAsNyArMTM5MCw3IEBACiAJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBjYWNoZVtpXTsKIAkJaWYgKGNlLT5jZV9mbGFncyAmIENFX1JFTU9WRSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoaXNfcmFjeV90aW1lc3RhbXAoaXN0YXRlLCBjZSkpCisJCWlmICghY2VfdXB0b2RhdGUoY2UpICYmIGlzX3JhY3lfdGltZXN0YW1wKGlzdGF0ZSwgY2UpKQogCQkJY2Vfc211ZGdlX3JhY2lseV9jbGVhbl9lbnRyeShjZSk7CiAJCWlmIChjZV93cml0ZV9lbnRyeSgmYywgbmV3ZmQsIGNlKSA8IDApCiAJCQlyZXR1cm4gLTE7CmRpZmYgLS1naXQgYS9yZWNlaXZlLXBhY2suYyBiL3JlY2VpdmUtcGFjay5jCmluZGV4IGY4M2FlODcuLmIyNmYyZTMgMTAwNjQ0Ci0tLSBhL3JlY2VpdmUtcGFjay5jCisrKyBiL3JlY2VpdmUtcGFjay5jCkBAIC0xMCw2ICsxMCw3IEBACiBzdGF0aWMgY29uc3QgY2hhciByZWNlaXZlX3BhY2tfdXNhZ2VbXSA9ICJnaXQtcmVjZWl2ZS1wYWNrIDxnaXQtZGlyPiI7CiAKIHN0YXRpYyBpbnQgZGVueV9ub25fZmFzdF9mb3J3YXJkcyA9IDA7CitzdGF0aWMgaW50IHJlY2VpdmVfZnNja19vYmplY3RzOwogc3RhdGljIGludCByZWNlaXZlX3VucGFja19saW1pdCA9IC0xOwogc3RhdGljIGludCB0cmFuc2Zlcl91bnBhY2tfbGltaXQgPSAtMTsKIHN0YXRpYyBpbnQgdW5wYWNrX2xpbWl0ID0gMTAwOwpAQCAtMTgsNyArMTksNyBAQAogc3RhdGljIGNoYXIgY2FwYWJpbGl0aWVzW10gPSAiIHJlcG9ydC1zdGF0dXMgZGVsZXRlLXJlZnMgIjsKIHN0YXRpYyBpbnQgY2FwYWJpbGl0aWVzX3NlbnQ7CiAKLXN0YXRpYyBpbnQgcmVjZWl2ZV9wYWNrX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQorc3RhdGljIGludCByZWNlaXZlX3BhY2tfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQogewogCWlmIChzdHJjbXAodmFyLCAicmVjZWl2ZS5kZW55bm9uZmFzdGZvcndhcmRzIikgPT0gMCkgewogCQlkZW55X25vbl9mYXN0X2ZvcndhcmRzID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOwpAQCAtMzUsNyArMzYsMTIgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlKTsKKwlpZiAoc3RyY21wKHZhciwgInJlY2VpdmUuZnNja29iamVjdHMiKSA9PSAwKSB7CisJCXJlY2VpdmVfZnNja19vYmplY3RzID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKIH0KIAogc3RhdGljIGludCBzaG93X3JlZihjb25zdCBjaGFyICpwYXRoLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKQEAgLTM2OCwxMSArMzc0LDEzIEBACiAJCQludG9obChoZHIuaGRyX3ZlcnNpb24pLCBudG9obChoZHIuaGRyX2VudHJpZXMpKTsKIAogCWlmIChudG9obChoZHIuaGRyX2VudHJpZXMpIDwgdW5wYWNrX2xpbWl0KSB7Ci0JCWludCBjb2RlOwotCQljb25zdCBjaGFyICp1bnBhY2tlclszXTsKLQkJdW5wYWNrZXJbMF0gPSAidW5wYWNrLW9iamVjdHMiOwotCQl1bnBhY2tlclsxXSA9IGhkcl9hcmc7Ci0JCXVucGFja2VyWzJdID0gTlVMTDsKKwkJaW50IGNvZGUsIGkgPSAwOworCQljb25zdCBjaGFyICp1bnBhY2tlcls0XTsKKwkJdW5wYWNrZXJbaSsrXSA9ICJ1bnBhY2stb2JqZWN0cyI7CisJCWlmIChyZWNlaXZlX2ZzY2tfb2JqZWN0cykKKwkJCXVucGFja2VyW2krK10gPSAiLS1zdHJpY3QiOworCQl1bnBhY2tlcltpKytdID0gaGRyX2FyZzsKKwkJdW5wYWNrZXJbaSsrXSA9IE5VTEw7CiAJCWNvZGUgPSBydW5fY29tbWFuZF92X29wdCh1bnBhY2tlciwgUlVOX0dJVF9DTUQpOwogCQlzd2l0Y2ggKGNvZGUpIHsKIAkJY2FzZSAwOgpAQCAtMzkzLDggKzQwMSw4IEBACiAJCQlyZXR1cm4gInVucGFja2VyIGV4aXRlZCB3aXRoIGVycm9yIGNvZGUiOwogCQl9CiAJfSBlbHNlIHsKLQkJY29uc3QgY2hhciAqa2VlcGVyWzZdOwotCQlpbnQgcywgc3RhdHVzOworCQljb25zdCBjaGFyICprZWVwZXJbN107CisJCWludCBzLCBzdGF0dXMsIGkgPSAwOwogCQljaGFyIGtlZXBfYXJnWzI1Nl07CiAJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGlwOwogCkBAIC00MDIsMTIgKzQxMCwxNCBAQAogCQlpZiAoZ2V0aG9zdG5hbWUoa2VlcF9hcmcgKyBzLCBzaXplb2Yoa2VlcF9hcmcpIC0gcykpCiAJCQlzdHJjcHkoa2VlcF9hcmcgKyBzLCAibG9jYWxob3N0Iik7CiAKLQkJa2VlcGVyWzBdID0gImluZGV4LXBhY2siOwotCQlrZWVwZXJbMV0gPSAiLS1zdGRpbiI7Ci0JCWtlZXBlclsyXSA9ICItLWZpeC10aGluIjsKLQkJa2VlcGVyWzNdID0gaGRyX2FyZzsKLQkJa2VlcGVyWzRdID0ga2VlcF9hcmc7Ci0JCWtlZXBlcls1XSA9IE5VTEw7CisJCWtlZXBlcltpKytdID0gImluZGV4LXBhY2siOworCQlrZWVwZXJbaSsrXSA9ICItLXN0ZGluIjsKKwkJaWYgKHJlY2VpdmVfZnNja19vYmplY3RzKQorCQkJa2VlcGVyW2krK10gPSAiLS1zdHJpY3QiOworCQlrZWVwZXJbaSsrXSA9ICItLWZpeC10aGluIjsKKwkJa2VlcGVyW2krK10gPSBoZHJfYXJnOworCQlrZWVwZXJbaSsrXSA9IGtlZXBfYXJnOworCQlrZWVwZXJbaSsrXSA9IE5VTEw7CiAJCW1lbXNldCgmaXAsIDAsIHNpemVvZihpcCkpOwogCQlpcC5hcmd2ID0ga2VlcGVyOwogCQlpcC5vdXQgPSAtMTsKQEAgLTQ3OSw3ICs0ODksNyBAQAogCWlmIChpc19yZXBvc2l0b3J5X3NoYWxsb3coKSkKIAkJZGllKCJhdHRlbXB0IHRvIHB1c2ggaW50byBhIHNoYWxsb3cgcmVwb3NpdG9yeSIpOwogCi0JZ2l0X2NvbmZpZyhyZWNlaXZlX3BhY2tfY29uZmlnKTsKKwlnaXRfY29uZmlnKHJlY2VpdmVfcGFja19jb25maWcsIE5VTEwpOwogCiAJaWYgKDAgPD0gdHJhbnNmZXJfdW5wYWNrX2xpbWl0KQogCQl1bnBhY2tfbGltaXQgPSB0cmFuc2Zlcl91bnBhY2tfbGltaXQ7CmRpZmYgLS1naXQgYS9yZWZzLmMgYi9yZWZzLmMKaW5kZXggMWIwMDUwZS4uYzliY2YxNCAxMDA2NDQKLS0tIGEvcmVmcy5jCisrKyBiL3JlZnMuYwpAQCAtMTU5LDYgKzE1OSw4IEBACiB9IGNhY2hlZF9yZWZzOwogc3RhdGljIHN0cnVjdCByZWZfbGlzdCAqY3VycmVudF9yZWY7CiAKK3N0YXRpYyBzdHJ1Y3QgcmVmX2xpc3QgKmV4dHJhX3JlZnM7CisKIHN0YXRpYyB2b2lkIGZyZWVfcmVmX2xpc3Qoc3RydWN0IHJlZl9saXN0ICpsaXN0KQogewogCXN0cnVjdCByZWZfbGlzdCAqbmV4dDsKQEAgLTIxNSw2ICsyMTcsMTcgQEAKIAljYWNoZWRfcmVmcy0+cGFja2VkID0gc29ydF9yZWZfbGlzdChsaXN0KTsKIH0KIAordm9pZCBhZGRfZXh0cmFfcmVmKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmbGFnKQoreworCWV4dHJhX3JlZnMgPSBhZGRfcmVmKG5hbWUsIHNoYTEsIGZsYWcsIGV4dHJhX3JlZnMsIE5VTEwpOworfQorCit2b2lkIGNsZWFyX2V4dHJhX3JlZnModm9pZCkKK3sKKwlmcmVlX3JlZl9saXN0KGV4dHJhX3JlZnMpOworCWV4dHJhX3JlZnMgPSBOVUxMOworfQorCiBzdGF0aWMgc3RydWN0IHJlZl9saXN0ICpnZXRfcGFja2VkX3JlZnModm9pZCkKIHsKIAlpZiAoIWNhY2hlZF9yZWZzLmRpZF9wYWNrZWQpIHsKQEAgLTM1Miw2ICszNjUsNyBAQAogewogCWludCBsZW4gPSBzdHJsZW4ocGF0aCksIHJldHZhbDsKIAljaGFyICpnaXRkaXI7CisJY29uc3QgY2hhciAqdG1wOwogCiAJd2hpbGUgKGxlbiAmJiBwYXRoW2xlbi0xXSA9PSAnLycpCiAJCWxlbi0tOwpAQCAtMzU5LDE2ICszNzMsMjcgQEAKIAkJcmV0dXJuIC0xOwogCWdpdGRpciA9IHhtYWxsb2MobGVuICsgTUFYUkVGTEVOICsgOCk7CiAJbWVtY3B5KGdpdGRpciwgcGF0aCwgbGVuKTsKLQltZW1jcHkoZ2l0ZGlyICsgbGVuLCAiLy5naXQvIiwgNyk7CisJbWVtY3B5KGdpdGRpciArIGxlbiwgIi8uZ2l0IiwgNik7CisJbGVuICs9IDU7CiAKLQlyZXR2YWwgPSByZXNvbHZlX2dpdGxpbmtfcmVmX3JlY3Vyc2l2ZShnaXRkaXIsIGxlbis2LCByZWZuYW1lLCByZXN1bHQsIDApOworCXRtcCA9IHJlYWRfZ2l0ZmlsZV9nZW50bHkoZ2l0ZGlyKTsKKwlpZiAodG1wKSB7CisJCWZyZWUoZ2l0ZGlyKTsKKwkJbGVuID0gc3RybGVuKHRtcCk7CisJCWdpdGRpciA9IHhtYWxsb2MobGVuICsgTUFYUkVGTEVOICsgMyk7CisJCW1lbWNweShnaXRkaXIsIHRtcCwgbGVuKTsKKwl9CisJZ2l0ZGlyW2xlbl0gPSAnLyc7CisJZ2l0ZGlyWysrbGVuXSA9ICdcMCc7CisJcmV0dmFsID0gcmVzb2x2ZV9naXRsaW5rX3JlZl9yZWN1cnNpdmUoZ2l0ZGlyLCBsZW4sIHJlZm5hbWUsIHJlc3VsdCwgMCk7CiAJZnJlZShnaXRkaXIpOwogCXJldHVybiByZXR2YWw7CiB9CiAKIGNvbnN0IGNoYXIgKnJlc29sdmVfcmVmKGNvbnN0IGNoYXIgKnJlZiwgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IHJlYWRpbmcsIGludCAqZmxhZykKIHsKLQlpbnQgZGVwdGggPSBNQVhERVBUSCwgbGVuOworCWludCBkZXB0aCA9IE1BWERFUFRIOworCXNzaXplX3QgbGVuOwogCWNoYXIgYnVmZmVyWzI1Nl07CiAJc3RhdGljIGNoYXIgcmVmX2J1ZmZlclsyNTZdOwogCkBAIC01MzUsNiArNTYwLDExIEBACiAJc3RydWN0IHJlZl9saXN0ICpwYWNrZWQgPSBnZXRfcGFja2VkX3JlZnMoKTsKIAlzdHJ1Y3QgcmVmX2xpc3QgKmxvb3NlID0gZ2V0X2xvb3NlX3JlZnMoKTsKIAorCXN0cnVjdCByZWZfbGlzdCAqZXh0cmE7CisKKwlmb3IgKGV4dHJhID0gZXh0cmFfcmVmczsgZXh0cmE7IGV4dHJhID0gZXh0cmEtPm5leHQpCisJCXJldHZhbCA9IGRvX29uZV9yZWYoYmFzZSwgZm4sIHRyaW0sIGNiX2RhdGEsIGV4dHJhKTsKKwogCXdoaWxlIChwYWNrZWQgJiYgbG9vc2UpIHsKIAkJc3RydWN0IHJlZl9saXN0ICplbnRyeTsKIAkJaW50IGNtcCA9IHN0cmNtcChwYWNrZWQtPm5hbWUsIGxvb3NlLT5uYW1lKTsKQEAgLTg5NSw3ICs5MjUsNyBAQAogCQlpID0gc3RybGVuKGxvY2stPmxrLT5maWxlbmFtZSkgLSA1OyAvKiAubG9jayAqLwogCQlsb2NrLT5say0+ZmlsZW5hbWVbaV0gPSAwOwogCQllcnIgPSB1bmxpbmsobG9jay0+bGstPmZpbGVuYW1lKTsKLQkJaWYgKGVycikgeworCQlpZiAoZXJyICYmIGVycm5vICE9IEVOT0VOVCkgewogCQkJcmV0ID0gMTsKIAkJCWVycm9yKCJ1bmxpbmsoJXMpIGZhaWxlZDogJXMiLAogCQkJICAgICAgbG9jay0+bGstPmZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOwpkaWZmIC0tZ2l0IGEvcmVmcy5oIGIvcmVmcy5oCmluZGV4IDA2YWJlZTEuLjA2YWQyNjAgMTAwNjQ0Ci0tLSBhL3JlZnMuaAorKysgYi9yZWZzLmgKQEAgLTI0LDYgKzI0LDE1IEBACiBleHRlcm4gaW50IGZvcl9lYWNoX2JyYW5jaF9yZWYoZWFjaF9yZWZfZm4sIHZvaWQgKik7CiBleHRlcm4gaW50IGZvcl9lYWNoX3JlbW90ZV9yZWYoZWFjaF9yZWZfZm4sIHZvaWQgKik7CiAKKy8qCisgKiBFeHRyYSByZWZzIHdpbGwgYmUgbGlzdGVkIGJ5IGZvcl9lYWNoX3JlZigpIGJlZm9yZSBhbnkgYWN0dWFsIHJlZnMKKyAqIGZvciB0aGUgZHVyYXRpb24gb2YgdGhpcyBwcm9jZXNzIG9yIHVudGlsIGNsZWFyX2V4dHJhX3JlZnMoKSBpcworICogY2FsbGVkLiBPbmx5IGV4dHJhIHJlZnMgYWRkZWQgYmVmb3JlIGZvcl9lYWNoX3JlZigpIGlzIGNhbGxlZCB3aWxsCisgKiBiZSBsaXN0ZWQgb24gYSBnaXZlbiBjYWxsIG9mIGZvcl9lYWNoX3JlZigpLgorICovCitleHRlcm4gdm9pZCBhZGRfZXh0cmFfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmbGFncyk7CitleHRlcm4gdm9pZCBjbGVhcl9leHRyYV9yZWZzKHZvaWQpOworCiBleHRlcm4gaW50IHBlZWxfcmVmKGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsKIAogLyoqIExvY2tzIGEgInJlZnMvIiByZWYgcmV0dXJuaW5nIHRoZSBsb2NrIG9uIHN1Y2Nlc3MgYW5kIE5VTEwgb24gZmFpbHVyZS4gKiovCmRpZmYgLS1naXQgYS9yZW1vdGUuYyBiL3JlbW90ZS5jCmluZGV4IDJkOWFmNDAuLjVmNjg3YjIgMTAwNjQ0Ci0tLSBhL3JlbW90ZS5jCisrKyBiL3JlbW90ZS5jCkBAIC0yLDYgKzIsMTYgQEAKICNpbmNsdWRlICJyZW1vdGUuaCIKICNpbmNsdWRlICJyZWZzLmgiCiAKK3N0YXRpYyBzdHJ1Y3QgcmVmc3BlYyBzX3RhZ19yZWZzcGVjID0geworCTAsCisJMSwKKwkwLAorCSJyZWZzL3RhZ3MvIiwKKwkicmVmcy90YWdzLyIKK307CisKK2NvbnN0IHN0cnVjdCByZWZzcGVjICp0YWdfcmVmc3BlYyA9ICZzX3RhZ19yZWZzcGVjOworCiBzdHJ1Y3QgY291bnRlZF9zdHJpbmcgewogCXNpemVfdCBsZW47CiAJY29uc3QgY2hhciAqczsKQEAgLTI4OCw3ICsyOTgsNyBAQAogCXJlbW90ZS0+ZmV0Y2hfdGFncyA9IDE7IC8qIGFsd2F5cyBhdXRvLWZvbGxvdyAqLwogfQogCi1zdGF0aWMgaW50IGhhbmRsZV9jb25maWcoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSkKK3N0YXRpYyBpbnQgaGFuZGxlX2NvbmZpZyhjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKIHsKIAljb25zdCBjaGFyICpuYW1lOwogCWNvbnN0IGNoYXIgKnN1YmtleTsKQEAgLTMzNyw0NCArMzQ3LDQ5IEBACiAJCXJldHVybiAwOwogCX0KIAlyZW1vdGUgPSBtYWtlX3JlbW90ZShuYW1lLCBzdWJrZXkgLSBuYW1lKTsKLQlpZiAoIXZhbHVlKSB7Ci0JCS8qIGlmIHdlIGV2ZXIgaGF2ZSBhIGJvb2xlYW4gdmFyaWFibGUsIGUuZy4gInJlbW90ZS4qLmRpc2FibGVkIgotCQkgKiBbcmVtb3RlICJmcm90eiJdCi0JCSAqICAgICAgZGlzYWJsZWQKLQkJICogaXMgYSB2YWxpZCB3YXkgdG8gc2V0IGl0IHRvIHRydWU7IHdlIGdldCBOVUxMIGluIHZhbHVlIHNvCi0JCSAqIHdlIG5lZWQgdG8gaGFuZGxlIGl0IGhlcmUuCi0JCSAqCi0JCSAqIGlmICghc3RyY21wKHN1YmtleSwgIi5kaXNhYmxlZCIpKSB7Ci0JCSAqICAgICAgdmFsID0gZ2l0X2NvbmZpZ19ib29sKGtleSwgdmFsdWUpOwotCQkgKiAgICAgIHJldHVybiAwOwotCQkgKiB9IGVsc2UKLQkJICoKLQkJICovCi0JCXJldHVybiAwOyAvKiBpZ25vcmUgdW5rbm93biBib29sZWFucyAqLwotCX0KLQlpZiAoIXN0cmNtcChzdWJrZXksICIudXJsIikpIHsKLQkJYWRkX3VybChyZW1vdGUsIHhzdHJkdXAodmFsdWUpKTsKKwlpZiAoIXN0cmNtcChzdWJrZXksICIubWlycm9yIikpCisJCXJlbW90ZS0+bWlycm9yID0gZ2l0X2NvbmZpZ19ib29sKGtleSwgdmFsdWUpOworCWVsc2UgaWYgKCFzdHJjbXAoc3Via2V5LCAiLnNraXBkZWZhdWx0dXBkYXRlIikpCisJCXJlbW90ZS0+c2tpcF9kZWZhdWx0X3VwZGF0ZSA9IGdpdF9jb25maWdfYm9vbChrZXksIHZhbHVlKTsKKworCWVsc2UgaWYgKCFzdHJjbXAoc3Via2V5LCAiLnVybCIpKSB7CisJCWNvbnN0IGNoYXIgKnY7CisJCWlmIChnaXRfY29uZmlnX3N0cmluZygmdiwga2V5LCB2YWx1ZSkpCisJCQlyZXR1cm4gLTE7CisJCWFkZF91cmwocmVtb3RlLCB2KTsKIAl9IGVsc2UgaWYgKCFzdHJjbXAoc3Via2V5LCAiLnB1c2giKSkgewotCQlhZGRfcHVzaF9yZWZzcGVjKHJlbW90ZSwgeHN0cmR1cCh2YWx1ZSkpOworCQljb25zdCBjaGFyICp2OworCQlpZiAoZ2l0X2NvbmZpZ19zdHJpbmcoJnYsIGtleSwgdmFsdWUpKQorCQkJcmV0dXJuIC0xOworCQlhZGRfcHVzaF9yZWZzcGVjKHJlbW90ZSwgdik7CiAJfSBlbHNlIGlmICghc3RyY21wKHN1YmtleSwgIi5mZXRjaCIpKSB7Ci0JCWFkZF9mZXRjaF9yZWZzcGVjKHJlbW90ZSwgeHN0cmR1cCh2YWx1ZSkpOworCQljb25zdCBjaGFyICp2OworCQlpZiAoZ2l0X2NvbmZpZ19zdHJpbmcoJnYsIGtleSwgdmFsdWUpKQorCQkJcmV0dXJuIC0xOworCQlhZGRfZmV0Y2hfcmVmc3BlYyhyZW1vdGUsIHYpOwogCX0gZWxzZSBpZiAoIXN0cmNtcChzdWJrZXksICIucmVjZWl2ZXBhY2siKSkgeworCQljb25zdCBjaGFyICp2OworCQlpZiAoZ2l0X2NvbmZpZ19zdHJpbmcoJnYsIGtleSwgdmFsdWUpKQorCQkJcmV0dXJuIC0xOwogCQlpZiAoIXJlbW90ZS0+cmVjZWl2ZXBhY2spCi0JCQlyZW1vdGUtPnJlY2VpdmVwYWNrID0geHN0cmR1cCh2YWx1ZSk7CisJCQlyZW1vdGUtPnJlY2VpdmVwYWNrID0gdjsKIAkJZWxzZQogCQkJZXJyb3IoIm1vcmUgdGhhbiBvbmUgcmVjZWl2ZXBhY2sgZ2l2ZW4sIHVzaW5nIHRoZSBmaXJzdCIpOwogCX0gZWxzZSBpZiAoIXN0cmNtcChzdWJrZXksICIudXBsb2FkcGFjayIpKSB7CisJCWNvbnN0IGNoYXIgKnY7CisJCWlmIChnaXRfY29uZmlnX3N0cmluZygmdiwga2V5LCB2YWx1ZSkpCisJCQlyZXR1cm4gLTE7CiAJCWlmICghcmVtb3RlLT51cGxvYWRwYWNrKQotCQkJcmVtb3RlLT51cGxvYWRwYWNrID0geHN0cmR1cCh2YWx1ZSk7CisJCQlyZW1vdGUtPnVwbG9hZHBhY2sgPSB2OwogCQllbHNlCiAJCQllcnJvcigibW9yZSB0aGFuIG9uZSB1cGxvYWRwYWNrIGdpdmVuLCB1c2luZyB0aGUgZmlyc3QiKTsKIAl9IGVsc2UgaWYgKCFzdHJjbXAoc3Via2V5LCAiLnRhZ29wdCIpKSB7CiAJCWlmICghc3RyY21wKHZhbHVlLCAiLS1uby10YWdzIikpCiAJCQlyZW1vdGUtPmZldGNoX3RhZ3MgPSAtMTsKIAl9IGVsc2UgaWYgKCFzdHJjbXAoc3Via2V5LCAiLnByb3h5IikpIHsKLQkJcmVtb3RlLT5odHRwX3Byb3h5ID0geHN0cmR1cCh2YWx1ZSk7Ci0JfSBlbHNlIGlmICghc3RyY21wKHN1YmtleSwgIi5za2lwZGVmYXVsdHVwZGF0ZSIpKQotCQlyZW1vdGUtPnNraXBfZGVmYXVsdF91cGRhdGUgPSAxOworCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoKGNvbnN0IGNoYXIgKiopJnJlbW90ZS0+aHR0cF9wcm94eSwKKwkJCQkJIGtleSwgdmFsdWUpOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNDA1LDEwICs0MjAsMzIgQEAKIAkJY3VycmVudF9icmFuY2ggPQogCQkJbWFrZV9icmFuY2goaGVhZF9yZWYgKyBzdHJsZW4oInJlZnMvaGVhZHMvIiksIDApOwogCX0KLQlnaXRfY29uZmlnKGhhbmRsZV9jb25maWcpOworCWdpdF9jb25maWcoaGFuZGxlX2NvbmZpZywgTlVMTCk7CiAJYWxpYXNfYWxsX3VybHMoKTsKIH0KIAorLyoKKyAqIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSB0cmFja2luZyBicmFuY2hlcyBhcmUgd2VsbCBmb3JtZWQsIGJ1dCBhCisgKiB3aWxkY2FyZCByZWZzcGVjIGluICJzdHJ1Y3QgcmVmc3BlYyIgbXVzdCBoYXZlIGEgdHJhaWxpbmcgc2xhc2guIFdlCisgKiB0ZW1wb3JhcmlseSBkcm9wIHRoZSB0cmFpbGluZyAnLycgd2hpbGUgY2FsbGluZyBjaGVja19yZWZfZm9ybWF0KCksCisgKiBhbmQgcHV0IGl0IGJhY2suICBUaGUgY2FsbGVyIGtub3dzIHRoYXQgYSBDSEVDS19SRUZfRk9STUFUX09ORUxFVkVMCisgKiBlcnJvciByZXR1cm4gaXMgT2sgZm9yIGEgd2lsZGNhcmQgcmVmc3BlYy4KKyAqLworc3RhdGljIGludCB2ZXJpZnlfcmVmbmFtZShjaGFyICpuYW1lLCBpbnQgaXNfZ2xvYikKK3sKKwlpbnQgcmVzdWx0LCBsZW4gPSAtMTsKKworCWlmIChpc19nbG9iKSB7CisJCWxlbiA9IHN0cmxlbihuYW1lKTsKKwkJYXNzZXJ0KG5hbWVbbGVuIC0gMV0gPT0gJy8nKTsKKwkJbmFtZVtsZW4gLSAxXSA9ICdcMCc7CisJfQorCXJlc3VsdCA9IGNoZWNrX3JlZl9mb3JtYXQobmFtZSk7CisJaWYgKGlzX2dsb2IpCisJCW5hbWVbbGVuIC0gMV0gPSAnLyc7CisJcmV0dXJuIHJlc3VsdDsKK30KKwogc3RhdGljIHN0cnVjdCByZWZzcGVjICpwYXJzZV9yZWZzcGVjX2ludGVybmFsKGludCBucl9yZWZzcGVjLCBjb25zdCBjaGFyICoqcmVmc3BlYywgaW50IGZldGNoLCBpbnQgdmVyaWZ5KQogewogCWludCBpOwpAQCAtNDE2LDExICs0NTMsMTEgQEAKIAlzdHJ1Y3QgcmVmc3BlYyAqcnMgPSB4Y2FsbG9jKHNpemVvZigqcnMpLCBucl9yZWZzcGVjKTsKIAogCWZvciAoaSA9IDA7IGkgPCBucl9yZWZzcGVjOyBpKyspIHsKLQkJc2l6ZV90IGxsZW4sIHJsZW47CisJCXNpemVfdCBsbGVuOwogCQlpbnQgaXNfZ2xvYjsKIAkJY29uc3QgY2hhciAqbGhzLCAqcmhzOwogCi0JCWxsZW4gPSBybGVuID0gaXNfZ2xvYiA9IDA7CisJCWxsZW4gPSBpc19nbG9iID0gMDsKIAogCQlsaHMgPSByZWZzcGVjW2ldOwogCQlpZiAoKmxocyA9PSAnKycpIHsKQEAgLTQyOSwxMyArNDY2LDIwIEBACiAJCX0KIAogCQlyaHMgPSBzdHJyY2hyKGxocywgJzonKTsKKworCQkvKgorCQkgKiBCZWZvcmUgZ29pbmcgb24sIHNwZWNpYWwgY2FzZSAiOiIgKG9yICIrOiIpIGFzIGEgcmVmc3BlYworCQkgKiBmb3IgbWF0Y2hpbmcgcmVmcy4KKwkJICovCisJCWlmICghZmV0Y2ggJiYgcmhzID09IGxocyAmJiByaHNbMV0gPT0gJ1wwJykgeworCQkJcnNbaV0ubWF0Y2hpbmcgPSAxOworCQkJY29udGludWU7CisJCX0KKwogCQlpZiAocmhzKSB7Ci0JCQlyaHMrKzsKLQkJCXJsZW4gPSBzdHJsZW4ocmhzKTsKKwkJCXNpemVfdCBybGVuID0gc3RybGVuKCsrcmhzKTsKIAkJCWlzX2dsb2IgPSAoMiA8PSBybGVuICYmICFzdHJjbXAocmhzICsgcmxlbiAtIDIsICIvKiIpKTsKLQkJCWlmIChpc19nbG9iKQotCQkJCXJsZW4gLT0gMjsKLQkJCXJzW2ldLmRzdCA9IHhzdHJuZHVwKHJocywgcmxlbik7CisJCQlyc1tpXS5kc3QgPSB4c3RybmR1cChyaHMsIHJsZW4gLSBpc19nbG9iKTsKIAkJfQogCiAJCWxsZW4gPSAocmhzID8gKHJocyAtIGxocyAtIDEpIDogc3RybGVuKGxocykpOwpAQCAtNDQzLDcgKzQ4Nyw3IEBACiAJCQlpZiAoKHJocyAmJiAhaXNfZ2xvYikgfHwgKCFyaHMgJiYgZmV0Y2gpKQogCQkJCWdvdG8gaW52YWxpZDsKIAkJCWlzX2dsb2IgPSAxOwotCQkJbGxlbiAtPSAyOworCQkJbGxlbi0tOwogCQl9IGVsc2UgaWYgKHJocyAmJiBpc19nbG9iKSB7CiAJCQlnb3RvIGludmFsaWQ7CiAJCX0KQEAgLTQ2MCw3ICs1MDQsNyBAQAogCQkJaWYgKCEqcnNbaV0uc3JjKQogCQkJCTsgLyogZW1wdHkgaXMgb2sgKi8KIAkJCWVsc2UgewotCQkJCXN0ID0gY2hlY2tfcmVmX2Zvcm1hdChyc1tpXS5zcmMpOworCQkJCXN0ID0gdmVyaWZ5X3JlZm5hbWUocnNbaV0uc3JjLCBpc19nbG9iKTsKIAkJCQlpZiAoc3QgJiYgc3QgIT0gQ0hFQ0tfUkVGX0ZPUk1BVF9PTkVMRVZFTCkKIAkJCQkJZ290byBpbnZhbGlkOwogCQkJfQpAQCAtNDc1LDcgKzUxOSw3IEBACiAJCQl9IGVsc2UgaWYgKCEqcnNbaV0uZHN0KSB7CiAJCQkJOyAvKiBvayAqLwogCQkJfSBlbHNlIHsKLQkJCQlzdCA9IGNoZWNrX3JlZl9mb3JtYXQocnNbaV0uZHN0KTsKKwkJCQlzdCA9IHZlcmlmeV9yZWZuYW1lKHJzW2ldLmRzdCwgaXNfZ2xvYik7CiAJCQkJaWYgKHN0ICYmIHN0ICE9IENIRUNLX1JFRl9GT1JNQVRfT05FTEVWRUwpCiAJCQkJCWdvdG8gaW52YWxpZDsKIAkJCX0KQEAgLTQ5MCw3ICs1MzQsNyBAQAogCQkJaWYgKCEqcnNbaV0uc3JjKQogCQkJCTsgLyogZW1wdHkgaXMgb2sgKi8KIAkJCWVsc2UgaWYgKGlzX2dsb2IpIHsKLQkJCQlzdCA9IGNoZWNrX3JlZl9mb3JtYXQocnNbaV0uc3JjKTsKKwkJCQlzdCA9IHZlcmlmeV9yZWZuYW1lKHJzW2ldLnNyYywgaXNfZ2xvYik7CiAJCQkJaWYgKHN0ICYmIHN0ICE9IENIRUNLX1JFRl9GT1JNQVRfT05FTEVWRUwpCiAJCQkJCWdvdG8gaW52YWxpZDsKIAkJCX0KQEAgLTUwNCwxMyArNTQ4LDEzIEBACiAJCQkgKiAtIG90aGVyd2lzZSBpdCBtdXN0IGJlIGEgdmFsaWQgbG9va2luZyByZWYuCiAJCQkgKi8KIAkJCWlmICghcnNbaV0uZHN0KSB7Ci0JCQkJc3QgPSBjaGVja19yZWZfZm9ybWF0KHJzW2ldLnNyYyk7CisJCQkJc3QgPSB2ZXJpZnlfcmVmbmFtZShyc1tpXS5zcmMsIGlzX2dsb2IpOwogCQkJCWlmIChzdCAmJiBzdCAhPSBDSEVDS19SRUZfRk9STUFUX09ORUxFVkVMKQogCQkJCQlnb3RvIGludmFsaWQ7CiAJCQl9IGVsc2UgaWYgKCEqcnNbaV0uZHN0KSB7CiAJCQkJZ290byBpbnZhbGlkOwogCQkJfSBlbHNlIHsKLQkJCQlzdCA9IGNoZWNrX3JlZl9mb3JtYXQocnNbaV0uZHN0KTsKKwkJCQlzdCA9IHZlcmlmeV9yZWZuYW1lKHJzW2ldLmRzdCwgaXNfZ2xvYik7CiAJCQkJaWYgKHN0ICYmIHN0ICE9IENIRUNLX1JFRl9GT1JNQVRfT05FTEVWRUwpCiAJCQkJCWdvdG8gaW52YWxpZDsKIAkJCX0KQEAgLTY1OSw4ICs3MDMsNyBAQAogCQlpZiAoIWZldGNoLT5kc3QpCiAJCQljb250aW51ZTsKIAkJaWYgKGZldGNoLT5wYXR0ZXJuKSB7Ci0JCQlpZiAoIXByZWZpeGNtcChuZWVkbGUsIGtleSkgJiYKLQkJCSAgICBuZWVkbGVbc3RybGVuKGtleSldID09ICcvJykgeworCQkJaWYgKCFwcmVmaXhjbXAobmVlZGxlLCBrZXkpKSB7CiAJCQkJKnJlc3VsdCA9IHhtYWxsb2Moc3RybGVuKHZhbHVlKSArCiAJCQkJCQkgIHN0cmxlbihuZWVkbGUpIC0KIAkJCQkJCSAgc3RybGVuKGtleSkgKyAxKTsKQEAgLTY4Niw2ICs3MjksMTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdHJ1Y3QgcmVmICphbGxvY19yZWZfZnJvbV9zdHIoY29uc3QgY2hhciogc3RyKQoreworCXN0cnVjdCByZWYgKnJldCA9IGFsbG9jX3JlZihzdHJsZW4oc3RyKSArIDEpOworCXN0cmNweShyZXQtPm5hbWUsIHN0cik7CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHN0cnVjdCByZWYgKmNvcHlfcmVmKGNvbnN0IHN0cnVjdCByZWYgKnJlZikKIHsKIAlzdHJ1Y3QgcmVmICpyZXQgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgcmVmKSArIHN0cmxlbihyZWYtPm5hbWUpICsgMSk7CkBAIC03MDYsMTMgKzc1NiwyMiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3ZvaWQgZnJlZV9yZWYoc3RydWN0IHJlZiAqcmVmKQoreworCWlmICghcmVmKQorCQlyZXR1cm47CisJZnJlZShyZWYtPnJlbW90ZV9zdGF0dXMpOworCWZyZWUocmVmLT5zeW1yZWYpOworCWZyZWUocmVmKTsKK30KKwogdm9pZCBmcmVlX3JlZnMoc3RydWN0IHJlZiAqcmVmKQogewogCXN0cnVjdCByZWYgKm5leHQ7CiAJd2hpbGUgKHJlZikgewogCQluZXh0ID0gcmVmLT5uZXh0OwogCQlmcmVlKHJlZi0+cGVlcl9yZWYpOwotCQlmcmVlKHJlZik7CisJCWZyZWVfcmVmKHJlZik7CiAJCXJlZiA9IG5leHQ7CiAJfQogfQpAQCAtNzgzLDcgKzg0Miw2IEBACiB7CiAJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKIAlzdHJ1Y3QgcmVmICpyZWY7Ci0JaW50IGxlbjsKIAogCWlmICghKm5hbWUpIHsKIAkJcmVmID0gYWxsb2NfcmVmKDIwKTsKQEAgLTc5MywyMSArODUxLDE0IEBACiAJfQogCWlmIChnZXRfc2hhMShuYW1lLCBzaGExKSkKIAkJcmV0dXJuIE5VTEw7Ci0JbGVuID0gc3RybGVuKG5hbWUpICsgMTsKLQlyZWYgPSBhbGxvY19yZWYobGVuKTsKLQltZW1jcHkocmVmLT5uYW1lLCBuYW1lLCBsZW4pOworCXJlZiA9IGFsbG9jX3JlZl9mcm9tX3N0cihuYW1lKTsKIAloYXNoY3B5KHJlZi0+bmV3X3NoYTEsIHNoYTEpOwogCXJldHVybiByZWY7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcmVmICptYWtlX2xpbmtlZF9yZWYoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHJlZiAqKip0YWlsKQogewotCXN0cnVjdCByZWYgKnJldDsKLQlzaXplX3QgbGVuOwotCi0JbGVuID0gc3RybGVuKG5hbWUpICsgMTsKLQlyZXQgPSBhbGxvY19yZWYobGVuKTsKLQltZW1jcHkocmV0LT5uYW1lLCBuYW1lLCBsZW4pOworCXN0cnVjdCByZWYgKnJldCA9IGFsbG9jX3JlZl9mcm9tX3N0cihuYW1lKTsKIAl0YWlsX2xpbmtfcmVmKHJldCwgdGFpbCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTgzNCwxNiArODg1LDE1IEBACiAKIHN0YXRpYyBpbnQgbWF0Y2hfZXhwbGljaXQoc3RydWN0IHJlZiAqc3JjLCBzdHJ1Y3QgcmVmICpkc3QsCiAJCQkgIHN0cnVjdCByZWYgKioqZHN0X3RhaWwsCi0JCQkgIHN0cnVjdCByZWZzcGVjICpycywKLQkJCSAgaW50IGVycnMpCisJCQkgIHN0cnVjdCByZWZzcGVjICpycykKIHsKIAlzdHJ1Y3QgcmVmICptYXRjaGVkX3NyYywgKm1hdGNoZWRfZHN0OwogCiAJY29uc3QgY2hhciAqZHN0X3ZhbHVlID0gcnMtPmRzdDsKIAljaGFyICpkc3RfZ3Vlc3M7CiAKLQlpZiAocnMtPnBhdHRlcm4pCi0JCXJldHVybiBlcnJzOworCWlmIChycy0+cGF0dGVybiB8fCBycy0+bWF0Y2hpbmcpCisJCXJldHVybiAwOwogCiAJbWF0Y2hlZF9zcmMgPSBtYXRjaGVkX2RzdCA9IE5VTEw7CiAJc3dpdGNoIChjb3VudF9yZWZzcGVjX21hdGNoKHJzLT5zcmMsIHNyYywgJm1hdGNoZWRfc3JjKSkgewpAQCAtODU2LDIzICs5MDYsMTYgQEAKIAkJICovCiAJCW1hdGNoZWRfc3JjID0gdHJ5X2V4cGxpY2l0X29iamVjdF9uYW1lKHJzLT5zcmMpOwogCQlpZiAoIW1hdGNoZWRfc3JjKQotCQkJZXJyb3IoInNyYyByZWZzcGVjICVzIGRvZXMgbm90IG1hdGNoIGFueS4iLCBycy0+c3JjKTsKKwkJCXJldHVybiBlcnJvcigic3JjIHJlZnNwZWMgJXMgZG9lcyBub3QgbWF0Y2ggYW55LiIsIHJzLT5zcmMpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQltYXRjaGVkX3NyYyA9IE5VTEw7Ci0JCWVycm9yKCJzcmMgcmVmc3BlYyAlcyBtYXRjaGVzIG1vcmUgdGhhbiBvbmUuIiwgcnMtPnNyYyk7Ci0JCWJyZWFrOworCQlyZXR1cm4gZXJyb3IoInNyYyByZWZzcGVjICVzIG1hdGNoZXMgbW9yZSB0aGFuIG9uZS4iLCBycy0+c3JjKTsKIAl9CiAKLQlpZiAoIW1hdGNoZWRfc3JjKQotCQllcnJzID0gMTsKLQogCWlmICghZHN0X3ZhbHVlKSB7CiAJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CiAJCWludCBmbGFnOwogCi0JCWlmICghbWF0Y2hlZF9zcmMpCi0JCQlyZXR1cm4gZXJyczsKIAkJZHN0X3ZhbHVlID0gcmVzb2x2ZV9yZWYobWF0Y2hlZF9zcmMtPm5hbWUsIHNoYTEsIDEsICZmbGFnKTsKIAkJaWYgKCFkc3RfdmFsdWUgfHwKIAkJICAgICgoZmxhZyAmIFJFRl9JU1NZTVJFRikgJiYKQEAgLTkwMywxOCArOTQ2LDE2IEBACiAJCSAgICAgIGRzdF92YWx1ZSk7CiAJCWJyZWFrOwogCX0KLQlpZiAoZXJycyB8fCAhbWF0Y2hlZF9kc3QpCi0JCXJldHVybiAxOwotCWlmIChtYXRjaGVkX2RzdC0+cGVlcl9yZWYpIHsKLQkJZXJycyA9IDE7Ci0JCWVycm9yKCJkc3QgcmVmICVzIHJlY2VpdmVzIGZyb20gbW9yZSB0aGFuIG9uZSBzcmMuIiwKKwlpZiAoIW1hdGNoZWRfZHN0KQorCQlyZXR1cm4gLTE7CisJaWYgKG1hdGNoZWRfZHN0LT5wZWVyX3JlZikKKwkJcmV0dXJuIGVycm9yKCJkc3QgcmVmICVzIHJlY2VpdmVzIGZyb20gbW9yZSB0aGFuIG9uZSBzcmMuIiwKIAkJICAgICAgbWF0Y2hlZF9kc3QtPm5hbWUpOwotCX0KIAllbHNlIHsKIAkJbWF0Y2hlZF9kc3QtPnBlZXJfcmVmID0gbWF0Y2hlZF9zcmM7CiAJCW1hdGNoZWRfZHN0LT5mb3JjZSA9IHJzLT5mb3JjZTsKIAl9Ci0JcmV0dXJuIGVycnM7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgbWF0Y2hfZXhwbGljaXRfcmVmcyhzdHJ1Y3QgcmVmICpzcmMsIHN0cnVjdCByZWYgKmRzdCwKQEAgLTkyMyw4ICs5NjQsOCBAQAogewogCWludCBpLCBlcnJzOwogCWZvciAoaSA9IGVycnMgPSAwOyBpIDwgcnNfbnI7IGkrKykKLQkJZXJycyB8PSBtYXRjaF9leHBsaWNpdChzcmMsIGRzdCwgZHN0X3RhaWwsICZyc1tpXSwgZXJycyk7Ci0JcmV0dXJuIC1lcnJzOworCQllcnJzICs9IG1hdGNoX2V4cGxpY2l0KHNyYywgZHN0LCBkc3RfdGFpbCwgJnJzW2ldKTsKKwlyZXR1cm4gZXJyczsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCByZWZzcGVjICpjaGVja19wYXR0ZXJuX21hdGNoKGNvbnN0IHN0cnVjdCByZWZzcGVjICpycywKQEAgLTkzMiwxMyArOTczLDIxIEBACiAJCQkJCQkgY29uc3Qgc3RydWN0IHJlZiAqc3JjKQogewogCWludCBpOworCWludCBtYXRjaGluZ19yZWZzID0gLTE7CiAJZm9yIChpID0gMDsgaSA8IHJzX25yOyBpKyspIHsKLQkJaWYgKHJzW2ldLnBhdHRlcm4gJiYKLQkJICAgICFwcmVmaXhjbXAoc3JjLT5uYW1lLCByc1tpXS5zcmMpICYmCi0JCSAgICBzcmMtPm5hbWVbc3RybGVuKHJzW2ldLnNyYyldID09ICcvJykKKwkJaWYgKHJzW2ldLm1hdGNoaW5nICYmCisJCSAgICAobWF0Y2hpbmdfcmVmcyA9PSAtMSB8fCByc1tpXS5mb3JjZSkpIHsKKwkJCW1hdGNoaW5nX3JlZnMgPSBpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAocnNbaV0ucGF0dGVybiAmJiAhcHJlZml4Y21wKHNyYy0+bmFtZSwgcnNbaV0uc3JjKSkKIAkJCXJldHVybiBycyArIGk7CiAJfQotCXJldHVybiBOVUxMOworCWlmIChtYXRjaGluZ19yZWZzICE9IC0xKQorCQlyZXR1cm4gcnMgKyBtYXRjaGluZ19yZWZzOworCWVsc2UKKwkJcmV0dXJuIE5VTEw7CiB9CiAKIC8qCkBAIC05NDksMTEgKzk5OCwxNiBAQAogaW50IG1hdGNoX3JlZnMoc3RydWN0IHJlZiAqc3JjLCBzdHJ1Y3QgcmVmICpkc3QsIHN0cnVjdCByZWYgKioqZHN0X3RhaWwsCiAJICAgICAgIGludCBucl9yZWZzcGVjLCBjb25zdCBjaGFyICoqcmVmc3BlYywgaW50IGZsYWdzKQogewotCXN0cnVjdCByZWZzcGVjICpycyA9Ci0JCXBhcnNlX3B1c2hfcmVmc3BlYyhucl9yZWZzcGVjLCAoY29uc3QgY2hhciAqKikgcmVmc3BlYyk7CisJc3RydWN0IHJlZnNwZWMgKnJzOwogCWludCBzZW5kX2FsbCA9IGZsYWdzICYgTUFUQ0hfUkVGU19BTEw7CiAJaW50IHNlbmRfbWlycm9yID0gZmxhZ3MgJiBNQVRDSF9SRUZTX01JUlJPUjsKKwlzdGF0aWMgY29uc3QgY2hhciAqZGVmYXVsdF9yZWZzcGVjW10gPSB7ICI6IiwgMCB9OwogCisJaWYgKCFucl9yZWZzcGVjKSB7CisJCW5yX3JlZnNwZWMgPSAxOworCQlyZWZzcGVjID0gZGVmYXVsdF9yZWZzcGVjOworCX0KKwlycyA9IHBhcnNlX3B1c2hfcmVmc3BlYyhucl9yZWZzcGVjLCAoY29uc3QgY2hhciAqKikgcmVmc3BlYyk7CiAJaWYgKG1hdGNoX2V4cGxpY2l0X3JlZnMoc3JjLCBkc3QsIGRzdF90YWlsLCBycywgbnJfcmVmc3BlYykpCiAJCXJldHVybiAtMTsKIApAQCAtOTY0LDQ4ICsxMDE4LDUwIEBACiAJCWNoYXIgKmRzdF9uYW1lOwogCQlpZiAoc3JjLT5wZWVyX3JlZikKIAkJCWNvbnRpbnVlOwotCQlpZiAobnJfcmVmc3BlYykgewotCQkJcGF0ID0gY2hlY2tfcGF0dGVybl9tYXRjaChycywgbnJfcmVmc3BlYywgc3JjKTsKLQkJCWlmICghcGF0KQotCQkJCWNvbnRpbnVlOwotCQl9Ci0JCWVsc2UgaWYgKCFzZW5kX21pcnJvciAmJiBwcmVmaXhjbXAoc3JjLT5uYW1lLCAicmVmcy9oZWFkcy8iKSkKKworCQlwYXQgPSBjaGVja19wYXR0ZXJuX21hdGNoKHJzLCBucl9yZWZzcGVjLCBzcmMpOworCQlpZiAoIXBhdCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChwYXQtPm1hdGNoaW5nKSB7CiAJCQkvKgogCQkJICogIm1hdGNoaW5nIHJlZnMiOyB0cmFkaXRpb25hbGx5IHdlIHB1c2hlZCBldmVyeXRoaW5nCiAJCQkgKiBpbmNsdWRpbmcgcmVmcyBvdXRzaWRlIHJlZnMvaGVhZHMvIGhpZXJhcmNoeSwgYnV0CiAJCQkgKiB0aGF0IGRvZXMgbm90IG1ha2UgbXVjaCBzZW5zZSB0aGVzZSBkYXlzLgogCQkJICovCi0JCQljb250aW51ZTsKKwkJCWlmICghc2VuZF9taXJyb3IgJiYgcHJlZml4Y21wKHNyYy0+bmFtZSwgInJlZnMvaGVhZHMvIikpCisJCQkJY29udGludWU7CisJCQlkc3RfbmFtZSA9IHhzdHJkdXAoc3JjLT5uYW1lKTsKIAotCQlpZiAocGF0KSB7CisJCX0gZWxzZSB7CiAJCQljb25zdCBjaGFyICpkc3Rfc2lkZSA9IHBhdC0+ZHN0ID8gcGF0LT5kc3QgOiBwYXQtPnNyYzsKIAkJCWRzdF9uYW1lID0geG1hbGxvYyhzdHJsZW4oZHN0X3NpZGUpICsKIAkJCQkJICAgc3RybGVuKHNyYy0+bmFtZSkgLQogCQkJCQkgICBzdHJsZW4ocGF0LT5zcmMpICsgMik7CiAJCQlzdHJjcHkoZHN0X25hbWUsIGRzdF9zaWRlKTsKIAkJCXN0cmNhdChkc3RfbmFtZSwgc3JjLT5uYW1lICsgc3RybGVuKHBhdC0+c3JjKSk7Ci0JCX0gZWxzZQotCQkJZHN0X25hbWUgPSB4c3RyZHVwKHNyYy0+bmFtZSk7CisJCX0KIAkJZHN0X3BlZXIgPSBmaW5kX3JlZl9ieV9uYW1lKGRzdCwgZHN0X25hbWUpOwotCQlpZiAoZHN0X3BlZXIgJiYgZHN0X3BlZXItPnBlZXJfcmVmKQotCQkJLyogV2UncmUgYWxyZWFkeSBzZW5kaW5nIHNvbWV0aGluZyB0byB0aGlzIHJlZi4gKi8KLQkJCWdvdG8gZnJlZV9uYW1lOworCQlpZiAoZHN0X3BlZXIpIHsKKwkJCWlmIChkc3RfcGVlci0+cGVlcl9yZWYpCisJCQkJLyogV2UncmUgYWxyZWFkeSBzZW5kaW5nIHNvbWV0aGluZyB0byB0aGlzIHJlZi4gKi8KKwkJCQlnb3RvIGZyZWVfbmFtZTsKIAotCQlpZiAoIWRzdF9wZWVyICYmICFucl9yZWZzcGVjICYmICEoc2VuZF9hbGwgfHwgc2VuZF9taXJyb3IpKQotCQkJLyoKLQkJCSAqIFJlbW90ZSBkb2Vzbid0IGhhdmUgaXQsIGFuZCB3ZSBoYXZlIG5vCi0JCQkgKiBleHBsaWNpdCBwYXR0ZXJuLCBhbmQgd2UgZG9uJ3QgaGF2ZQotCQkJICogLS1hbGwgbm9yIC0tbWlycm9yLgotCQkJICovCi0JCQlnb3RvIGZyZWVfbmFtZTsKLQkJaWYgKCFkc3RfcGVlcikgeworCQl9IGVsc2UgeworCQkJaWYgKHBhdC0+bWF0Y2hpbmcgJiYgIShzZW5kX2FsbCB8fCBzZW5kX21pcnJvcikpCisJCQkJLyoKKwkJCQkgKiBSZW1vdGUgZG9lc24ndCBoYXZlIGl0LCBhbmQgd2UgaGF2ZSBubworCQkJCSAqIGV4cGxpY2l0IHBhdHRlcm4sIGFuZCB3ZSBkb24ndCBoYXZlCisJCQkJICogLS1hbGwgbm9yIC0tbWlycm9yLgorCQkJCSAqLworCQkJCWdvdG8gZnJlZV9uYW1lOworCiAJCQkvKiBDcmVhdGUgYSBuZXcgb25lIGFuZCBsaW5rIGl0ICovCiAJCQlkc3RfcGVlciA9IG1ha2VfbGlua2VkX3JlZihkc3RfbmFtZSwgZHN0X3RhaWwpOwogCQkJaGFzaGNweShkc3RfcGVlci0+bmV3X3NoYTEsIHNyYy0+bmV3X3NoYTEpOwogCQl9CiAJCWRzdF9wZWVyLT5wZWVyX3JlZiA9IHNyYzsKLQkJaWYgKHBhdCkKLQkJCWRzdF9wZWVyLT5mb3JjZSA9IHBhdC0+Zm9yY2U7CisJCWRzdF9wZWVyLT5mb3JjZSA9IHBhdC0+Zm9yY2U7CiAJZnJlZV9uYW1lOgogCQlmcmVlKGRzdF9uYW1lKTsKIAl9CkBAIC0xMTExLDkgKzExNjcsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAogCWlmICghcHJlZml4Y21wKG5hbWUsICJyZWZzLyIpKSB7Ci0JCXJldCA9IGFsbG9jX3JlZihzdHJsZW4obmFtZSkgKyAxKTsKLQkJc3RyY3B5KHJldC0+bmFtZSwgbmFtZSk7Ci0JCXJldHVybiByZXQ7CisJCXJldHVybiBhbGxvY19yZWZfZnJvbV9zdHIobmFtZSk7CiAJfQogCiAJaWYgKCFwcmVmaXhjbXAobmFtZSwgImhlYWRzLyIpIHx8CkBAIC0xMTcyLDMgKzEyMjYsMTUgQEAKIAogCXJldHVybiAwOwogfQorCitpbnQgcmVzb2x2ZV9yZW1vdGVfc3ltcmVmKHN0cnVjdCByZWYgKnJlZiwgc3RydWN0IHJlZiAqbGlzdCkKK3sKKwlpZiAoIXJlZi0+c3ltcmVmKQorCQlyZXR1cm4gMDsKKwlmb3IgKDsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpCisJCWlmICghc3RyY21wKHJlZi0+c3ltcmVmLCBsaXN0LT5uYW1lKSkgeworCQkJaGFzaGNweShyZWYtPm9sZF9zaGExLCBsaXN0LT5vbGRfc2hhMSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCXJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvcmVtb3RlLmggYi9yZW1vdGUuaAppbmRleCBhMzg3NzRiLi44ZWVkODdiIDEwMDY0NAotLS0gYS9yZW1vdGUuaAorKysgYi9yZW1vdGUuaApAQCAtMjYsNiArMjYsNyBAQAogCSAqLwogCWludCBmZXRjaF90YWdzOwogCWludCBza2lwX2RlZmF1bHRfdXBkYXRlOworCWludCBtaXJyb3I7CiAKIAljb25zdCBjaGFyICpyZWNlaXZlcGFjazsKIAljb25zdCBjaGFyICp1cGxvYWRwYWNrOwpAQCAtNDYsMTMgKzQ3LDE4IEBACiBzdHJ1Y3QgcmVmc3BlYyB7CiAJdW5zaWduZWQgZm9yY2UgOiAxOwogCXVuc2lnbmVkIHBhdHRlcm4gOiAxOworCXVuc2lnbmVkIG1hdGNoaW5nIDogMTsKIAogCWNoYXIgKnNyYzsKIAljaGFyICpkc3Q7CiB9OwogCitleHRlcm4gY29uc3Qgc3RydWN0IHJlZnNwZWMgKnRhZ19yZWZzcGVjOworCiBzdHJ1Y3QgcmVmICphbGxvY19yZWYodW5zaWduZWQgbmFtZWxlbik7CiAKK3N0cnVjdCByZWYgKmFsbG9jX3JlZl9mcm9tX3N0cihjb25zdCBjaGFyKiBzdHIpOworCiBzdHJ1Y3QgcmVmICpjb3B5X3JlZl9saXN0KGNvbnN0IHN0cnVjdCByZWYgKnJlZik7CiAKIGludCBjaGVja19yZWZfdHlwZShjb25zdCBzdHJ1Y3QgcmVmICpyZWYsIGludCBmbGFncyk7CkBAIC02Miw2ICs2OCw4IEBACiAgKi8KIHZvaWQgZnJlZV9yZWZzKHN0cnVjdCByZWYgKnJlZik7CiAKK2ludCByZXNvbHZlX3JlbW90ZV9zeW1yZWYoc3RydWN0IHJlZiAqcmVmLCBzdHJ1Y3QgcmVmICpsaXN0KTsKKwogLyoKICAqIFJlbW92ZXMgYW5kIGZyZWVzIGFueSBkdXBsaWNhdGUgcmVmcyBpbiB0aGUgbWFwLgogICovCmRpZmYgLS1naXQgYS9yZXZpc2lvbi5jIGIvcmV2aXNpb24uYwppbmRleCBmZmJlZDNmLi5hNjhhYmVjIDEwMDY0NAotLS0gYS9yZXZpc2lvbi5jCisrKyBiL3JldmlzaW9uLmMKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSAiZGlmZi5oIgogI2luY2x1ZGUgInJlZnMuaCIKICNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImdyYXBoLmgiCiAjaW5jbHVkZSAiZ3JlcC5oIgogI2luY2x1ZGUgInJlZmxvZy13YWxrLmgiCiAjaW5jbHVkZSAicGF0Y2gtaWRzLmgiCkBAIC0yNTgsNyArMjU5LDcgQEAKIHN0YXRpYyB2b2lkIGZpbGVfYWRkX3JlbW92ZShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAogCQkgICAgaW50IGFkZHJlbW92ZSwgdW5zaWduZWQgbW9kZSwKIAkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCi0JCSAgICBjb25zdCBjaGFyICpiYXNlLCBjb25zdCBjaGFyICpwYXRoKQorCQkgICAgY29uc3QgY2hhciAqZnVsbHBhdGgpCiB7CiAJaW50IGRpZmYgPSBSRVZfVFJFRV9ESUZGRVJFTlQ7CiAKQEAgLTI4NCw3ICsyODUsNyBAQAogCQkgdW5zaWduZWQgb2xkX21vZGUsIHVuc2lnbmVkIG5ld19tb2RlLAogCQkgY29uc3QgdW5zaWduZWQgY2hhciAqb2xkX3NoYTEsCiAJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpuZXdfc2hhMSwKLQkJIGNvbnN0IGNoYXIgKmJhc2UsIGNvbnN0IGNoYXIgKnBhdGgpCisJCSBjb25zdCBjaGFyICpmdWxscGF0aCkKIHsKIAl0cmVlX2RpZmZlcmVuY2UgPSBSRVZfVFJFRV9ESUZGRVJFTlQ7CiAJRElGRl9PUFRfU0VUKG9wdGlvbnMsIEhBU19DSEFOR0VTKTsKQEAgLTQxMSwxMSArNDEyLDI2IEBACiAJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gVFJFRVNBTUU7CiB9CiAKLXN0YXRpYyBpbnQgYWRkX3BhcmVudHNfdG9fbGlzdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IGNvbW1pdF9saXN0ICoqbGlzdCkKK3N0YXRpYyB2b2lkIGluc2VydF9ieV9kYXRlX2NhY2hlZChzdHJ1Y3QgY29tbWl0ICpwLCBzdHJ1Y3QgY29tbWl0X2xpc3QgKipoZWFkLAorCQkgICAgc3RydWN0IGNvbW1pdF9saXN0ICpjYWNoZWRfYmFzZSwgc3RydWN0IGNvbW1pdF9saXN0ICoqY2FjaGUpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpuZXdfZW50cnk7CisKKwlpZiAoY2FjaGVkX2Jhc2UgJiYgcC0+ZGF0ZSA8IGNhY2hlZF9iYXNlLT5pdGVtLT5kYXRlKQorCQluZXdfZW50cnkgPSBpbnNlcnRfYnlfZGF0ZShwLCAmY2FjaGVkX2Jhc2UtPm5leHQpOworCWVsc2UKKwkJbmV3X2VudHJ5ID0gaW5zZXJ0X2J5X2RhdGUocCwgaGVhZCk7CisKKwlpZiAoY2FjaGUgJiYgKCEqY2FjaGUgfHwgcC0+ZGF0ZSA8ICgqY2FjaGUpLT5pdGVtLT5kYXRlKSkKKwkJKmNhY2hlID0gbmV3X2VudHJ5OworfQorCitzdGF0aWMgaW50IGFkZF9wYXJlbnRzX3RvX2xpc3Qoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCSAgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKipsaXN0LCBzdHJ1Y3QgY29tbWl0X2xpc3QgKipjYWNoZV9wdHIpCiB7CiAJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQgPSBjb21taXQtPnBhcmVudHM7CiAJdW5zaWduZWQgbGVmdF9mbGFnOwotCWludCBhZGQsIHJlc3Q7CisJc3RydWN0IGNvbW1pdF9saXN0ICpjYWNoZWRfYmFzZSA9IGNhY2hlX3B0ciA/ICpjYWNoZV9wdHIgOiBOVUxMOwogCiAJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQURERUQpCiAJCXJldHVybiAwOwpAQCAtNDQ1LDcgKzQ2MSw3IEBACiAJCQlpZiAocC0+b2JqZWN0LmZsYWdzICYgU0VFTikKIAkJCQljb250aW51ZTsKIAkJCXAtPm9iamVjdC5mbGFncyB8PSBTRUVOOwotCQkJaW5zZXJ0X2J5X2RhdGUocCwgbGlzdCk7CisJCQlpbnNlcnRfYnlfZGF0ZV9jYWNoZWQocCwgbGlzdCwgY2FjaGVkX2Jhc2UsIGNhY2hlX3B0cik7CiAJCX0KIAkJcmV0dXJuIDA7CiAJfQpAQCAtNDYyLDE5ICs0NzgsMTggQEAKIAogCWxlZnRfZmxhZyA9IChjb21taXQtPm9iamVjdC5mbGFncyAmIFNZTU1FVFJJQ19MRUZUKTsKIAotCXJlc3QgPSAhcmV2cy0+Zmlyc3RfcGFyZW50X29ubHk7Ci0JZm9yIChwYXJlbnQgPSBjb21taXQtPnBhcmVudHMsIGFkZCA9IDE7IHBhcmVudDsgYWRkID0gcmVzdCkgeworCWZvciAocGFyZW50ID0gY29tbWl0LT5wYXJlbnRzOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+bmV4dCkgewogCQlzdHJ1Y3QgY29tbWl0ICpwID0gcGFyZW50LT5pdGVtOwogCi0JCXBhcmVudCA9IHBhcmVudC0+bmV4dDsKIAkJaWYgKHBhcnNlX2NvbW1pdChwKSA8IDApCiAJCQlyZXR1cm4gLTE7CiAJCXAtPm9iamVjdC5mbGFncyB8PSBsZWZ0X2ZsYWc7Ci0JCWlmIChwLT5vYmplY3QuZmxhZ3MgJiBTRUVOKQotCQkJY29udGludWU7Ci0JCXAtPm9iamVjdC5mbGFncyB8PSBTRUVOOwotCQlpZiAoYWRkKQotCQkJaW5zZXJ0X2J5X2RhdGUocCwgbGlzdCk7CisJCWlmICghKHAtPm9iamVjdC5mbGFncyAmIFNFRU4pKSB7CisJCQlwLT5vYmplY3QuZmxhZ3MgfD0gU0VFTjsKKwkJCWluc2VydF9ieV9kYXRlX2NhY2hlZChwLCBsaXN0LCBjYWNoZWRfYmFzZSwgY2FjaGVfcHRyKTsKKwkJfQorCQlpZihyZXZzLT5maXJzdF9wYXJlbnRfb25seSkKKwkJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTYxMiw3ICs2MjcsNyBAQAogCiAJCWlmIChyZXZzLT5tYXhfYWdlICE9IC0xICYmIChjb21taXQtPmRhdGUgPCByZXZzLT5tYXhfYWdlKSkKIAkJCW9iai0+ZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKLQkJaWYgKGFkZF9wYXJlbnRzX3RvX2xpc3QocmV2cywgY29tbWl0LCAmbGlzdCkgPCAwKQorCQlpZiAoYWRkX3BhcmVudHNfdG9fbGlzdChyZXZzLCBjb21taXQsICZsaXN0LCBOVUxMKSA8IDApCiAJCQlyZXR1cm4gLTE7CiAJCWlmIChvYmotPmZsYWdzICYgVU5JTlRFUkVTVElORykgewogCQkJbWFya19wYXJlbnRzX3VuaW50ZXJlc3RpbmcoY29tbWl0KTsKQEAgLTExMDUsNyArMTEyMCw4IEBACiAJCQkJfQogCQkJfQogCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1wYXJlbnRzIikpIHsKLQkJCQlyZXZzLT5wYXJlbnRzID0gMTsKKwkJCQlyZXZzLT5yZXdyaXRlX3BhcmVudHMgPSAxOworCQkJCXJldnMtPnByaW50X3BhcmVudHMgPSAxOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1kZW5zZSIpKSB7CkBAIC0xMTk3LDkgKzEyMTMsMjAgQEAKIAkJCQlyZXZzLT52ZXJib3NlX2hlYWRlciA9IDE7CiAJCQkJY29udGludWU7CiAJCQl9Ci0JCQlpZiAoIXByZWZpeGNtcChhcmcsICItLXByZXR0eSIpKSB7CisJCQlpZiAoIXN0cmNtcChhcmcsICItLXByZXR0eSIpKSB7CiAJCQkJcmV2cy0+dmVyYm9zZV9oZWFkZXIgPSAxOwotCQkJCXJldnMtPmNvbW1pdF9mb3JtYXQgPSBnZXRfY29tbWl0X2Zvcm1hdChhcmcrOCk7CisJCQkJZ2V0X2NvbW1pdF9mb3JtYXQoYXJnKzgsIHJldnMpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFwcmVmaXhjbXAoYXJnLCAiLS1wcmV0dHk9IikpIHsKKwkJCQlyZXZzLT52ZXJib3NlX2hlYWRlciA9IDE7CisJCQkJZ2V0X2NvbW1pdF9mb3JtYXQoYXJnKzksIHJldnMpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1ncmFwaCIpKSB7CisJCQkJcmV2cy0+dG9wb19vcmRlciA9IDE7CisJCQkJcmV2cy0+cmV3cml0ZV9wYXJlbnRzID0gMTsKKwkJCQlyZXZzLT5ncmFwaCA9IGdyYXBoX2luaXQocmV2cyk7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlpZiAoIXN0cmNtcChhcmcsICItLXJvb3QiKSkgewpAQCAtMTM5Niw2ICsxNDIzLDE1IEBACiAJaWYgKHJldnMtPnJldmVyc2UgJiYgcmV2cy0+cmVmbG9nX2luZm8pCiAJCWRpZSgiY2Fubm90IGNvbWJpbmUgLS1yZXZlcnNlIHdpdGggLS13YWxrLXJlZmxvZ3MiKTsKIAorCS8qCisJICogTGltaXRhdGlvbnMgb24gdGhlIGdyYXBoIGZ1bmN0aW9uYWxpdHkKKwkgKi8KKwlpZiAocmV2cy0+cmV2ZXJzZSAmJiByZXZzLT5ncmFwaCkKKwkJZGllKCJjYW5ub3QgY29tYmluZSAtLXJldmVyc2Ugd2l0aCAtLWdyYXBoIik7CisKKwlpZiAocmV2cy0+cmVmbG9nX2luZm8gJiYgcmV2cy0+Z3JhcGgpCisJCWRpZSgiY2Fubm90IGNvbWJpbmUgLS13YWxrLXJlZmxvZ3Mgd2l0aCAtLWdyYXBoIik7CisKIAlyZXR1cm4gbGVmdDsKIH0KIApAQCAtMTQzOCwxMCArMTQ3NCwxMiBAQAogCiBzdGF0aWMgZW51bSByZXdyaXRlX3Jlc3VsdCByZXdyaXRlX29uZShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKipwcCkKIHsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmNhY2hlID0gTlVMTDsKKwogCWZvciAoOzspIHsKIAkJc3RydWN0IGNvbW1pdCAqcCA9ICpwcDsKIAkJaWYgKCFyZXZzLT5saW1pdGVkKQotCQkJaWYgKGFkZF9wYXJlbnRzX3RvX2xpc3QocmV2cywgcCwgJnJldnMtPmNvbW1pdHMpIDwgMCkKKwkJCWlmIChhZGRfcGFyZW50c190b19saXN0KHJldnMsIHAsICZyZXZzLT5jb21taXRzLCAmY2FjaGUpIDwgMCkKIAkJCQlyZXR1cm4gcmV3cml0ZV9vbmVfZXJyb3I7CiAJCWlmIChwLT5wYXJlbnRzICYmIHAtPnBhcmVudHMtPm5leHQpCiAJCQlyZXR1cm4gcmV3cml0ZV9vbmVfb2s7CkBAIC0xNTI0LDEzICsxNTYyLDEzIEBACiAJCS8qIENvbW1pdCB3aXRob3V0IGNoYW5nZXM/ICovCiAJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFRSRUVTQU1FKSB7CiAJCQkvKiBkcm9wIG1lcmdlcyB1bmxlc3Mgd2Ugd2FudCBwYXJlbnRob29kICovCi0JCQlpZiAoIXJldnMtPnBhcmVudHMpCisJCQlpZiAoIXJldnMtPnJld3JpdGVfcGFyZW50cykKIAkJCQlyZXR1cm4gY29tbWl0X2lnbm9yZTsKIAkJCS8qIG5vbi1tZXJnZSAtIGFsd2F5cyBpZ25vcmUgaXQgKi8KIAkJCWlmICghY29tbWl0LT5wYXJlbnRzIHx8ICFjb21taXQtPnBhcmVudHMtPm5leHQpCiAJCQkJcmV0dXJuIGNvbW1pdF9pZ25vcmU7CiAJCX0KLQkJaWYgKHJldnMtPnBhcmVudHMgJiYgcmV3cml0ZV9wYXJlbnRzKHJldnMsIGNvbW1pdCkgPCAwKQorCQlpZiAocmV2cy0+cmV3cml0ZV9wYXJlbnRzICYmIHJld3JpdGVfcGFyZW50cyhyZXZzLCBjb21taXQpIDwgMCkKIAkJCXJldHVybiBjb21taXRfZXJyb3I7CiAJfQogCXJldHVybiBjb21taXRfc2hvdzsKQEAgLTE1NjAsNyArMTU5OCw3IEBACiAJCQlpZiAocmV2cy0+bWF4X2FnZSAhPSAtMSAmJgogCQkJICAgIChjb21taXQtPmRhdGUgPCByZXZzLT5tYXhfYWdlKSkKIAkJCQljb250aW51ZTsKLQkJCWlmIChhZGRfcGFyZW50c190b19saXN0KHJldnMsIGNvbW1pdCwgJnJldnMtPmNvbW1pdHMpIDwgMCkKKwkJCWlmIChhZGRfcGFyZW50c190b19saXN0KHJldnMsIGNvbW1pdCwgJnJldnMtPmNvbW1pdHMsIE5VTEwpIDwgMCkKIAkJCQlyZXR1cm4gTlVMTDsKIAkJfQogCkBAIC0xNTk3LDI4ICsxNjM1LDYyIEBACiAJfQogfQogCi1zdHJ1Y3QgY29tbWl0ICpnZXRfcmV2aXNpb24oc3RydWN0IHJldl9pbmZvICpyZXZzKQorc3RhdGljIHZvaWQgY3JlYXRlX2JvdW5kYXJ5X2NvbW1pdF9saXN0KHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwl1bnNpZ25lZCBpOworCXN0cnVjdCBjb21taXQgKmM7CisJc3RydWN0IG9iamVjdF9hcnJheSAqYXJyYXkgPSAmcmV2cy0+Ym91bmRhcnlfY29tbWl0czsKKwlzdHJ1Y3Qgb2JqZWN0X2FycmF5X2VudHJ5ICpvYmplY3RzID0gYXJyYXktPm9iamVjdHM7CisKKwkvKgorCSAqIElmIHJldnMtPmNvbW1pdHMgaXMgbm9uLU5VTEwgYXQgdGhpcyBwb2ludCwgYW4gZXJyb3Igb2NjdXJyZWQgaW4KKwkgKiBnZXRfcmV2aXNpb25fMSgpLiAgSWdub3JlIHRoZSBlcnJvciBhbmQgY29udGludWUgcHJpbnRpbmcgdGhlCisJICogYm91bmRhcnkgY29tbWl0cyBhbnl3YXkuICAoVGhpcyBpcyB3aGF0IHRoZSBjb2RlIGhhcyBhbHdheXMKKwkgKiBkb25lLikKKwkgKi8KKwlpZiAocmV2cy0+Y29tbWl0cykgeworCQlmcmVlX2NvbW1pdF9saXN0KHJldnMtPmNvbW1pdHMpOworCQlyZXZzLT5jb21taXRzID0gTlVMTDsKKwl9CisKKwkvKgorCSAqIFB1dCBhbGwgb2YgdGhlIGFjdHVhbCBib3VuZGFyeSBjb21taXRzIGZyb20gcmV2cy0+Ym91bmRhcnlfY29tbWl0cworCSAqIGludG8gcmV2cy0+Y29tbWl0cworCSAqLworCWZvciAoaSA9IDA7IGkgPCBhcnJheS0+bnI7IGkrKykgeworCQljID0gKHN0cnVjdCBjb21taXQgKikob2JqZWN0c1tpXS5pdGVtKTsKKwkJaWYgKCFjKQorCQkJY29udGludWU7CisJCWlmICghKGMtPm9iamVjdC5mbGFncyAmIENISUxEX1NIT1dOKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoYy0+b2JqZWN0LmZsYWdzICYgKFNIT1dOIHwgQk9VTkRBUlkpKQorCQkJY29udGludWU7CisJCWMtPm9iamVjdC5mbGFncyB8PSBCT1VOREFSWTsKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KGMsICZyZXZzLT5jb21taXRzKTsKKwl9CisKKwkvKgorCSAqIElmIHJldnMtPnRvcG9fb3JkZXIgaXMgc2V0LCBzb3J0IHRoZSBib3VuZGFyeSBjb21taXRzCisJICogaW4gdG9wb2xvZ2ljYWwgb3JkZXIKKwkgKi8KKwlzb3J0X2luX3RvcG9sb2dpY2FsX29yZGVyKCZyZXZzLT5jb21taXRzLCByZXZzLT5saWZvKTsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXQgKmdldF9yZXZpc2lvbl9pbnRlcm5hbChzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCiB7CiAJc3RydWN0IGNvbW1pdCAqYyA9IE5VTEw7CiAJc3RydWN0IGNvbW1pdF9saXN0ICpsOwogCiAJaWYgKHJldnMtPmJvdW5kYXJ5ID09IDIpIHsKLQkJdW5zaWduZWQgaTsKLQkJc3RydWN0IG9iamVjdF9hcnJheSAqYXJyYXkgPSAmcmV2cy0+Ym91bmRhcnlfY29tbWl0czsKLQkJc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqb2JqZWN0cyA9IGFycmF5LT5vYmplY3RzOwotCQlmb3IgKGkgPSAwOyBpIDwgYXJyYXktPm5yOyBpKyspIHsKLQkJCWMgPSAoc3RydWN0IGNvbW1pdCAqKShvYmplY3RzW2ldLml0ZW0pOwotCQkJaWYgKCFjKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKCEoYy0+b2JqZWN0LmZsYWdzICYgQ0hJTERfU0hPV04pKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKCEoYy0+b2JqZWN0LmZsYWdzICYgU0hPV04pKQotCQkJCWJyZWFrOwotCQl9Ci0JCWlmIChhcnJheS0+bnIgPD0gaSkKLQkJCXJldHVybiBOVUxMOwotCi0JCWMtPm9iamVjdC5mbGFncyB8PSBTSE9XTiB8IEJPVU5EQVJZOworCQkvKgorCQkgKiBBbGwgb2YgdGhlIG5vcm1hbCBjb21taXRzIGhhdmUgYWxyZWFkeSBiZWVuIHJldHVybmVkLAorCQkgKiBhbmQgd2UgYXJlIG5vdyByZXR1cm5pbmcgYm91bmRhcnkgY29tbWl0cy4KKwkJICogY3JlYXRlX2JvdW5kYXJ5X2NvbW1pdF9saXN0KCkgaGFzIHBvcHVsYXRlZAorCQkgKiByZXZzLT5jb21taXRzIHdpdGggdGhlIHJlbWFpbmluZyBjb21taXRzIHRvIHJldHVybi4KKwkJICovCisJCWMgPSBwb3BfY29tbWl0KCZyZXZzLT5jb21taXRzKTsKKwkJaWYgKGMpCisJCQljLT5vYmplY3QuZmxhZ3MgfD0gU0hPV047CiAJCXJldHVybiBjOwogCX0KIApAQCAtMTY4Miw3ICsxNzU0LDE0IEBACiAJCSAqIHN3aXRjaCB0byBib3VuZGFyeSBjb21taXRzIG91dHB1dCBtb2RlLgogCQkgKi8KIAkJcmV2cy0+Ym91bmRhcnkgPSAyOwotCQlyZXR1cm4gZ2V0X3JldmlzaW9uKHJldnMpOworCisJCS8qCisJCSAqIFVwZGF0ZSByZXZzLT5jb21taXRzIHRvIGNvbnRhaW4gdGhlIGxpc3Qgb2YKKwkJICogYm91bmRhcnkgY29tbWl0cy4KKwkJICovCisJCWNyZWF0ZV9ib3VuZGFyeV9jb21taXRfbGlzdChyZXZzKTsKKworCQlyZXR1cm4gZ2V0X3JldmlzaW9uX2ludGVybmFsKHJldnMpOwogCX0KIAogCS8qCkBAIC0xNzA0LDMgKzE3ODMsMTEgQEAKIAogCXJldHVybiBjOwogfQorCitzdHJ1Y3QgY29tbWl0ICpnZXRfcmV2aXNpb24oc3RydWN0IHJldl9pbmZvICpyZXZzKQoreworCXN0cnVjdCBjb21taXQgKmMgPSBnZXRfcmV2aXNpb25faW50ZXJuYWwocmV2cyk7CisJaWYgKGMgJiYgcmV2cy0+Z3JhcGgpCisJCWdyYXBoX3VwZGF0ZShyZXZzLT5ncmFwaCwgYyk7CisJcmV0dXJuIGM7Cit9CmRpZmYgLS1naXQgYS9yZXZpc2lvbi5oIGIvcmV2aXNpb24uaAppbmRleCBjOGIzYjk0Li4zMWYwOGM0IDEwMDY0NAotLS0gYS9yZXZpc2lvbi5oCisrKyBiL3JldmlzaW9uLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNkZWZpbmUgQ0hJTERfU0hPV04JKDF1PDw2KQogI2RlZmluZSBBRERFRAkJKDF1PDw3KQkvKiBQYXJlbnRzIGFscmVhZHkgcGFyc2VkIGFuZCBhZGRlZD8gKi8KICNkZWZpbmUgU1lNTUVUUklDX0xFRlQJKDF1PDw4KQotI2RlZmluZSBUT1BPU09SVAkoMXU8PDkpCS8qIEluIHRoZSBhY3RpdmUgdG9wb3NvcnQgbGlzdC4uICovCiAKIHN0cnVjdCByZXZfaW5mbzsKIHN0cnVjdCBsb2dfaW5mbzsKQEAgLTQ2LDcgKzQ1LDggQEAKIAkJCXVucGFja2VkOjEsIC8qIHNlZSBhbHNvIGlnbm9yZV9wYWNrZWQgYmVsb3cgKi8KIAkJCWJvdW5kYXJ5OjIsCiAJCQlsZWZ0X3JpZ2h0OjEsCi0JCQlwYXJlbnRzOjEsCisJCQlyZXdyaXRlX3BhcmVudHM6MSwKKwkJCXByaW50X3BhcmVudHM6MSwKIAkJCXJldmVyc2U6MSwKIAkJCWNoZXJyeV9waWNrOjEsCiAJCQlmaXJzdF9wYXJlbnRfb25seToxOwpAQCAtNjQsNyArNjQsOSBAQAogCiAJLyogRm9ybWF0IGluZm8gKi8KIAl1bnNpZ25lZCBpbnQJc2hvd25fb25lOjEsCi0JCQlhYmJyZXZfY29tbWl0OjE7CisJCQlhYmJyZXZfY29tbWl0OjEsCisJCQl1c2VfdGVybWluYXRvcjoxLAorCQkJbWlzc2luZ19uZXdsaW5lOjE7CiAJZW51bSBkYXRlX21vZGUgZGF0ZV9tb2RlOwogCiAJY29uc3QgY2hhciAqKmlnbm9yZV9wYWNrZWQ7IC8qIHByZXRlbmQgb2JqZWN0cyBpbiB0aGVzZSBhcmUgdW5wYWNrZWQgKi8KQEAgLTg3LDYgKzg5LDkgQEAKIAkvKiBGaWx0ZXIgYnkgY29tbWl0IGxvZyBtZXNzYWdlICovCiAJc3RydWN0IGdyZXBfb3B0CSpncmVwX2ZpbHRlcjsKIAorCS8qIERpc3BsYXkgaGlzdG9yeSBncmFwaCAqLworCXN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoOworCiAJLyogc3BlY2lhbCBsaW1pdHMgKi8KIAlpbnQgc2tpcF9jb3VudDsKIAlpbnQgbWF4X2NvdW50OwpkaWZmIC0tZ2l0IGEvcnVuLWNvbW1hbmQuYyBiL3J1bi1jb21tYW5kLmMKaW5kZXggNDQxMDBhNy4uNzA2OGVjNyAxMDA2NDQKLS0tIGEvcnVuLWNvbW1hbmQuYworKysgYi9ydW4tY29tbWFuZC5jCkBAIC02NSw2ICs2NSw4IEBACiAJCWNtZC0+ZXJyID0gZmRlcnJbMF07CiAJfQogCisJdHJhY2VfYXJndl9wcmludGYoY21kLT5hcmd2LCAidHJhY2U6IHJ1bl9jb21tYW5kOiIpOworCiAJY21kLT5waWQgPSBmb3JrKCk7CiAJaWYgKGNtZC0+cGlkIDwgMCkgewogCQlpZiAobmVlZF9pbikKZGlmZiAtLWdpdCBhL3NldHVwLmMgYi9zZXR1cC5jCmluZGV4IDNkMmQ5NTguLjNiMTExZWEgMTAwNjQ0Ci0tLSBhL3NldHVwLmMKKysrIGIvc2V0dXAuYwpAQCAtMjkyLDE1ICsyOTIsMTYgQEAKIAl3b3JrX3RyZWUgPSBnZXRfZ2l0X3dvcmtfdHJlZSgpOwogCWdpdF9kaXIgPSBnZXRfZ2l0X2RpcigpOwogCWlmICghaXNfYWJzb2x1dGVfcGF0aChnaXRfZGlyKSkKLQkJc2V0X2dpdF9kaXIobWFrZV9hYnNvbHV0ZV9wYXRoKGdpdF9kaXIpKTsKKwkJZ2l0X2RpciA9IG1ha2VfYWJzb2x1dGVfcGF0aChnaXRfZGlyKTsKIAlpZiAoIXdvcmtfdHJlZSB8fCBjaGRpcih3b3JrX3RyZWUpKQogCQlkaWUoIlRoaXMgb3BlcmF0aW9uIG11c3QgYmUgcnVuIGluIGEgd29yayB0cmVlIik7CisJc2V0X2dpdF9kaXIobWFrZV9yZWxhdGl2ZV9wYXRoKGdpdF9kaXIsIHdvcmtfdHJlZSkpOwogCWluaXRpYWxpemVkID0gMTsKIH0KIAogc3RhdGljIGludCBjaGVja19yZXBvc2l0b3J5X2Zvcm1hdF9nZW50bHkoaW50ICpub25naXRfb2spCiB7Ci0JZ2l0X2NvbmZpZyhjaGVja19yZXBvc2l0b3J5X2Zvcm1hdF92ZXJzaW9uKTsKKwlnaXRfY29uZmlnKGNoZWNrX3JlcG9zaXRvcnlfZm9ybWF0X3ZlcnNpb24sIE5VTEwpOwogCWlmIChHSVRfUkVQT19WRVJTSU9OIDwgcmVwb3NpdG9yeV9mb3JtYXRfdmVyc2lvbikgewogCQlpZiAoIW5vbmdpdF9vaykKIAkJCWRpZSAoIkV4cGVjdGVkIGdpdCByZXBvIHZlcnNpb24gPD0gJWQsIGZvdW5kICVkIiwKQEAgLTMxNSw2ICszMTYsNDQgQEAKIH0KIAogLyoKKyAqIFRyeSB0byByZWFkIHRoZSBsb2NhdGlvbiBvZiB0aGUgZ2l0IGRpcmVjdG9yeSBmcm9tIHRoZSAuZ2l0IGZpbGUsCisgKiByZXR1cm4gcGF0aCB0byBnaXQgZGlyZWN0b3J5IGlmIGZvdW5kLgorICovCitjb25zdCBjaGFyICpyZWFkX2dpdGZpbGVfZ2VudGx5KGNvbnN0IGNoYXIgKnBhdGgpCit7CisJY2hhciAqYnVmOworCXN0cnVjdCBzdGF0IHN0OworCWludCBmZDsKKwlzaXplX3QgbGVuOworCisJaWYgKHN0YXQocGF0aCwgJnN0KSkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKCFTX0lTUkVHKHN0LnN0X21vZGUpKQorCQlyZXR1cm4gTlVMTDsKKwlmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOworCWlmIChmZCA8IDApCisJCWRpZSgiRXJyb3Igb3BlbmluZyAlczogJXMiLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOworCWJ1ZiA9IHhtYWxsb2Moc3Quc3Rfc2l6ZSArIDEpOworCWxlbiA9IHJlYWRfaW5fZnVsbChmZCwgYnVmLCBzdC5zdF9zaXplKTsKKwljbG9zZShmZCk7CisJaWYgKGxlbiAhPSBzdC5zdF9zaXplKQorCQlkaWUoIkVycm9yIHJlYWRpbmcgJXMiLCBwYXRoKTsKKwlidWZbbGVuXSA9ICdcMCc7CisJaWYgKHByZWZpeGNtcChidWYsICJnaXRkaXI6ICIpKQorCQlkaWUoIkludmFsaWQgZ2l0ZmlsZSBmb3JtYXQ6ICVzIiwgcGF0aCk7CisJd2hpbGUgKGJ1ZltsZW4gLSAxXSA9PSAnXG4nIHx8IGJ1ZltsZW4gLSAxXSA9PSAnXHInKQorCQlsZW4tLTsKKwlpZiAobGVuIDwgOSkKKwkJZGllKCJObyBwYXRoIGluIGdpdGZpbGU6ICVzIiwgcGF0aCk7CisJYnVmW2xlbl0gPSAnXDAnOworCWlmICghaXNfZ2l0X2RpcmVjdG9yeShidWYgKyA4KSkKKwkJZGllKCJOb3QgYSBnaXQgcmVwb3NpdG9yeTogJXMiLCBidWYgKyA4KTsKKwlwYXRoID0gbWFrZV9hYnNvbHV0ZV9wYXRoKGJ1ZiArIDgpOworCWZyZWUoYnVmKTsKKwlyZXR1cm4gcGF0aDsKK30KKworLyoKICAqIFdlIGNhbm5vdCBkZWNpZGUgaW4gdGhpcyBmdW5jdGlvbiB3aGV0aGVyIHdlIGFyZSBpbiB0aGUgd29yayB0cmVlIG9yCiAgKiBub3QsIHNpbmNlIHRoZSBjb25maWcgY2FuIG9ubHkgYmUgcmVhZCBfYWZ0ZXJfIHRoaXMgZnVuY3Rpb24gd2FzIGNhbGxlZC4KICAqLwpAQCAtMzIzLDYgKzM2Miw3IEBACiAJY29uc3QgY2hhciAqd29ya190cmVlX2VudiA9IGdldGVudihHSVRfV09SS19UUkVFX0VOVklST05NRU5UKTsKIAlzdGF0aWMgY2hhciBjd2RbUEFUSF9NQVgrMV07CiAJY29uc3QgY2hhciAqZ2l0ZGlyZW52OworCWNvbnN0IGNoYXIgKmdpdGZpbGVfZGlyOwogCWludCBsZW4sIG9mZnNldDsKIAogCS8qCkBAIC0zNzcsOCArNDE3LDEwIEBACiAKIAkvKgogCSAqIFRlc3QgaW4gdGhlIGZvbGxvd2luZyBvcmRlciAocmVsYXRpdmUgdG8gdGhlIGN3ZCk6CisJICogLSAuZ2l0IChmaWxlIGNvbnRhaW5pbmcgImdpdGRpcjogPHBhdGg+IikKIAkgKiAtIC5naXQvCiAJICogLSAuLyAoYmFyZSkKKwkgKiAtIC4uLy5naXQKIAkgKiAtIC4uLy5naXQvCiAJICogLSAuLi8gKGJhcmUpCiAJICogLSAuLi8uLi8uZ2l0LwpAQCAtMzg2LDYgKzQyOCwxMiBAQAogCSAqLwogCW9mZnNldCA9IGxlbiA9IHN0cmxlbihjd2QpOwogCWZvciAoOzspIHsKKwkJZ2l0ZmlsZV9kaXIgPSByZWFkX2dpdGZpbGVfZ2VudGx5KERFRkFVTFRfR0lUX0RJUl9FTlZJUk9OTUVOVCk7CisJCWlmIChnaXRmaWxlX2RpcikgeworCQkJaWYgKHNldF9naXRfZGlyKGdpdGZpbGVfZGlyKSkKKwkJCQlkaWUoIlJlcG9zaXRvcnkgc2V0dXAgZmFpbGVkIik7CisJCQlicmVhazsKKwkJfQogCQlpZiAoaXNfZ2l0X2RpcmVjdG9yeShERUZBVUxUX0dJVF9ESVJfRU5WSVJPTk1FTlQpKQogCQkJYnJlYWs7CiAJCWlmIChpc19naXRfZGlyZWN0b3J5KCIuIikpIHsKQEAgLTQyOCwyNCArNDc2LDU2IEBACiAKIGludCBnaXRfY29uZmlnX3Blcm0oY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKIHsKLQlpZiAodmFsdWUpIHsKLQkJaW50IGk7Ci0JCWlmICghc3RyY21wKHZhbHVlLCAidW1hc2siKSkKLQkJCXJldHVybiBQRVJNX1VNQVNLOwotCQlpZiAoIXN0cmNtcCh2YWx1ZSwgImdyb3VwIikpCi0JCQlyZXR1cm4gUEVSTV9HUk9VUDsKLQkJaWYgKCFzdHJjbXAodmFsdWUsICJhbGwiKSB8fAotCQkgICAgIXN0cmNtcCh2YWx1ZSwgIndvcmxkIikgfHwKLQkJICAgICFzdHJjbXAodmFsdWUsICJldmVyeWJvZHkiKSkKLQkJCXJldHVybiBQRVJNX0VWRVJZQk9EWTsKLQkJaSA9IGF0b2kodmFsdWUpOwotCQlpZiAoaSA+IDEpCi0JCQlyZXR1cm4gaTsKKwlpbnQgaTsKKwljaGFyICplbmRwdHI7CisKKwlpZiAodmFsdWUgPT0gTlVMTCkKKwkJcmV0dXJuIFBFUk1fR1JPVVA7CisKKwlpZiAoIXN0cmNtcCh2YWx1ZSwgInVtYXNrIikpCisJCXJldHVybiBQRVJNX1VNQVNLOworCWlmICghc3RyY21wKHZhbHVlLCAiZ3JvdXAiKSkKKwkJcmV0dXJuIFBFUk1fR1JPVVA7CisJaWYgKCFzdHJjbXAodmFsdWUsICJhbGwiKSB8fAorCSAgICAhc3RyY21wKHZhbHVlLCAid29ybGQiKSB8fAorCSAgICAhc3RyY21wKHZhbHVlLCAiZXZlcnlib2R5IikpCisJCXJldHVybiBQRVJNX0VWRVJZQk9EWTsKKworCS8qIFBhcnNlIG9jdGFsIG51bWJlcnMgKi8KKwlpID0gc3RydG9sKHZhbHVlLCAmZW5kcHRyLCA4KTsKKworCS8qIElmIG5vdCBhbiBvY3RhbCBudW1iZXIsIG1heWJlIHRydWUvZmFsc2U/ICovCisJaWYgKCplbmRwdHIgIT0gMCkKKwkJcmV0dXJuIGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKSA/IFBFUk1fR1JPVVAgOiBQRVJNX1VNQVNLOworCisJLyoKKwkgKiBUcmVhdCB2YWx1ZXMgMCwgMSBhbmQgMiBhcyBjb21wYXRpYmlsaXR5IGNhc2VzLCBvdGhlcndpc2UgaXQgaXMKKwkgKiBhIGNobW9kIHZhbHVlLgorCSAqLworCXN3aXRjaCAoaSkgeworCWNhc2UgUEVSTV9VTUFTSzogICAgICAgICAgICAgICAvKiAwICovCisJCXJldHVybiBQRVJNX1VNQVNLOworCWNhc2UgT0xEX1BFUk1fR1JPVVA6ICAgICAgICAgICAvKiAxICovCisJCXJldHVybiBQRVJNX0dST1VQOworCWNhc2UgT0xEX1BFUk1fRVZFUllCT0RZOiAgICAgICAvKiAyICovCisJCXJldHVybiBQRVJNX0VWRVJZQk9EWTsKIAl9Ci0JcmV0dXJuIGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKworCS8qIEEgZmlsZW1vZGUgdmFsdWUgd2FzIGdpdmVuOiAweHh4ICovCisKKwlpZiAoKGkgJiAwNjAwKSAhPSAwNjAwKQorCQlkaWUoIlByb2JsZW0gd2l0aCBjb3JlLnNoYXJlZFJlcG9zaXRvcnkgZmlsZW1vZGUgdmFsdWUgIgorCQkgICAgIigwJS4zbykuXG5UaGUgb3duZXIgb2YgZmlsZXMgbXVzdCBhbHdheXMgaGF2ZSAiCisJCSAgICAicmVhZCBhbmQgd3JpdGUgcGVybWlzc2lvbnMuIiwgaSk7CisKKwkvKgorCSAqIE1hc2sgZmlsZW1vZGUgdmFsdWUuIE90aGVycyBjYW4gbm90IGdldCB3cml0ZSBwZXJtaXNzaW9uLgorCSAqIHggZmxhZ3MgZm9yIGRpcmVjdG9yaWVzIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkuCisJICovCisJcmV0dXJuIGkgJiAwNjY2OwogfQogCi1pbnQgY2hlY2tfcmVwb3NpdG9yeV9mb3JtYXRfdmVyc2lvbihjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQoraW50IGNoZWNrX3JlcG9zaXRvcnlfZm9ybWF0X3ZlcnNpb24oY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCiB7CiAJaWYgKHN0cmNtcCh2YXIsICJjb3JlLnJlcG9zaXRvcnlmb3JtYXR2ZXJzaW9uIikgPT0gMCkKIAkJcmVwb3NpdG9yeV9mb3JtYXRfdmVyc2lvbiA9IGdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOwpkaWZmIC0tZ2l0IGEvc2hhMS1sb29rdXAuYyBiL3NoYTEtbG9va3VwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGEzNTc0NwotLS0gL2Rldi9udWxsCisrKyBiL3NoYTEtbG9va3VwLmMKQEAgLTAsMCArMSwxNzEgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInNoYTEtbG9va3VwLmgiCisKKy8qCisgKiBDb252ZW50aW9uYWwgYmluYXJ5IHNlYXJjaCBsb29wIGxvb2tzIGxpa2UgdGhpczoKKyAqCisgKgl1bnNpZ25lZCBsbywgaGk7CisgKiAgICAgIGRvIHsKKyAqICAgICAgICAgICAgICB1bnNpZ25lZCBtaSA9IChsbyArIGhpKSAvIDI7CisgKiAgICAgICAgICAgICAgaW50IGNtcCA9ICJlbnRyeSBwb2ludGVkIGF0IGJ5IG1pIiBtaW51cyAidGFyZ2V0IjsKKyAqICAgICAgICAgICAgICBpZiAoIWNtcCkKKyAqICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAobWkgaXMgdGhlIHdhbnRlZCBvbmUpCisgKiAgICAgICAgICAgICAgaWYgKGNtcCA+IDApCisgKiAgICAgICAgICAgICAgICAgICAgICBoaSA9IG1pOyAibWkgaXMgbGFyZ2VyIHRoYW4gdGFyZ2V0IgorICogICAgICAgICAgICAgIGVsc2UKKyAqICAgICAgICAgICAgICAgICAgICAgIGxvID0gbWkrMTsgIm1pIGlzIHNtYWxsZXIgdGhhbiB0YXJnZXQiCisgKiAgICAgIH0gd2hpbGUgKGxvIDwgaGkpOworICoKKyAqIFRoZSBpbnZhcmlhbnRzIGFyZToKKyAqCisgKiAtIFdoZW4gZW50ZXJpbmcgdGhlIGxvb3AsIGxvIHBvaW50cyBhdCBhIHNsb3QgdGhhdCBpcyBuZXZlcgorICogICBhYm92ZSB0aGUgdGFyZ2V0IChpdCBjb3VsZCBiZSBhdCB0aGUgdGFyZ2V0KSwgaGkgcG9pbnRzIGF0IGEKKyAqICAgc2xvdCB0aGF0IGlzIGd1YXJhbnRlZWQgdG8gYmUgYWJvdmUgdGhlIHRhcmdldCAoaXQgY2FuIG5ldmVyCisgKiAgIGJlIGF0IHRoZSB0YXJnZXQpLgorICoKKyAqIC0gV2UgZmluZCBhIHBvaW50ICdtaScgYmV0d2VlbiBsbyBhbmQgaGkgKG1pIGNvdWxkIGJlIHRoZSBzYW1lCisgKiAgIGFzIGxvLCBidXQgbmV2ZXIgY2FuIGJlIGFzIHNhbWUgYXMgaGkpLCBhbmQgY2hlY2sgaWYgaXQgaGl0cworICogICB0aGUgdGFyZ2V0LiAgVGhlcmUgYXJlIHRocmVlIGNhc2VzOgorICoKKyAqICAgIC0gaWYgaXQgaXMgYSBoaXQsIHdlIGFyZSBoYXBweS4KKyAqCisgKiAgICAtIGlmIGl0IGlzIHN0cmljdGx5IGhpZ2hlciB0aGFuIHRoZSB0YXJnZXQsIHdlIHNldCBpdCB0byBoaSwKKyAqICAgICAgYW5kIHJlcGVhdCB0aGUgc2VhcmNoLgorICoKKyAqICAgIC0gaWYgaXQgaXMgc3RyaWN0bHkgbG93ZXIgdGhhbiB0aGUgdGFyZ2V0LCB3ZSB1cGRhdGUgbG8gdG8KKyAqICAgICAgb25lIHNsb3QgYWZ0ZXIgaXQsIGJlY2F1c2Ugd2UgYWxsb3cgbG8gdG8gYmUgYXQgdGhlIHRhcmdldC4KKyAqCisgKiAgIElmIHRoZSBsb29wIGV4aXRzLCB0aGVyZSBpcyBubyBtYXRjaGluZyBlbnRyeS4KKyAqCisgKiBXaGVuIGNob29zaW5nICdtaScsIHdlIGRvIG5vdCBoYXZlIHRvIHRha2UgdGhlICJtaWRkbGUiIGJ1dAorICogYW55d2hlcmUgaW4gYmV0d2VlbiBsbyBhbmQgaGksIGFzIGxvbmcgYXMgbG8gPD0gbWkgPCBoaSBpcworICogc2F0aXNmaWVkLiAgV2hlbiB3ZSBzb21laG93IGtub3cgdGhhdCB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUKKyAqIHRhcmdldCBhbmQgbG8gaXMgbXVjaCBzaG9ydGVyIHRoYW4gdGhlIHRhcmdldCBhbmQgaGksIHdlIGNvdWxkCisgKiBwaWNrIG1pIHRoYXQgaXMgbXVjaCBjbG9zZXIgdG8gbG8gdGhhbiB0aGUgbWlkd2F5LgorICoKKyAqIE5vdywgd2UgY2FuIHRha2UgYWR2YW50YWdlIG9mIHRoZSBmYWN0IHRoYXQgU0hBLTEgaXMgYSBnb29kIGhhc2gKKyAqIGZ1bmN0aW9uLCBhbmQgYXMgbG9uZyBhcyB0aGVyZSBhcmUgZW5vdWdoIGVudHJpZXMgaW4gdGhlIHRhYmxlLCB3ZQorICogY2FuIGV4cGVjdCB1bmlmb3JtIGRpc3RyaWJ1dGlvbi4gIEFuIGVudHJ5IHRoYXQgYmVnaW5zIHdpdGggZm9yCisgKiBleGFtcGxlICJkZWFkYmVlZi4uLiIgaXMgbXVjaCBsaWtlbHkgdG8gYXBwZWFyIG11Y2ggbGF0ZXIgdGhhbiBpbgorICogdGhlIG1pZHdheSBvZiB0aGUgdGFibGUuICBJdCBjYW4gcmVhc29uYWJseSBiZSBleHBlY3RlZCB0byBiZSBuZWFyCisgKiA4NyUgKDIyMi8yNTYpIGZyb20gdGhlIHRvcCBvZiB0aGUgdGFibGUuCisgKgorICogSG93ZXZlciwgd2UgZG8gbm90IHdhbnQgdG8gcGljayAibWkiIHRvbyBwcmVjaXNlbHkuICBJZiB0aGUgZW50cnkgYXQKKyAqIHRoZSA4NyUgaW4gdGhlIGFib3ZlIGV4YW1wbGUgdHVybnMgb3V0IHRvIGJlIGhpZ2hlciB0aGFuIHRoZSB0YXJnZXQKKyAqIHdlIGFyZSBsb29raW5nIGZvciwgd2Ugd291bGQgZW5kIHVwIG5hcnJvd2luZyB0aGUgc2VhcmNoIHNwYWNlIGRvd24KKyAqIG9ubHkgYnkgMTMlLCBpbnN0ZWFkIG9mIDUwJSB3ZSB3b3VsZCBnZXQgaWYgd2UgZGlkIGEgc2ltcGxlIGJpbmFyeQorICogc2VhcmNoLiAgU28gd2Ugd291bGQgd2FudCB0byBoZWRnZSBvdXIgYmV0cyBieSBiZWluZyBsZXNzIGFnZ3Jlc3NpdmUuCisgKgorICogVGhlIHRhYmxlIGF0ICJ0YWJsZSIgaG9sZHMgYXQgbGVhc3QgIm5yIiBlbnRyaWVzIG9mICJlbGVtX3NpemUiCisgKiBieXRlcyBlYWNoLiAgRWFjaCBlbnRyeSBoYXMgdGhlIFNIQS0xIGtleSBhdCAia2V5X29mZnNldCIuICBUaGUKKyAqIHRhYmxlIGlzIHNvcnRlZCBieSB0aGUgU0hBLTEga2V5IG9mIHRoZSBlbnRyaWVzLiAgVGhlIGNhbGxlciB3YW50cworICogdG8gZmluZCB0aGUgZW50cnkgd2l0aCAia2V5IiwgYW5kIGtub3dzIHRoYXQgdGhlIGVudHJ5IGF0ICJsbyIgaXMKKyAqIG5vdCBoaWdoZXIgdGhhbiB0aGUgZW50cnkgaXQgaXMgbG9va2luZyBmb3IsIGFuZCB0aGF0IHRoZSBlbnRyeSBhdAorICogImhpIiBpcyBoaWdoZXIgdGhhbiB0aGUgZW50cnkgaXQgaXMgbG9va2luZyBmb3IuCisgKi8KK2ludCBzaGExX2VudHJ5X3Bvcyhjb25zdCB2b2lkICp0YWJsZSwKKwkJICAgc2l6ZV90IGVsZW1fc2l6ZSwKKwkJICAgc2l6ZV90IGtleV9vZmZzZXQsCisJCSAgIHVuc2lnbmVkIGxvLCB1bnNpZ25lZCBoaSwgdW5zaWduZWQgbnIsCisJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSkKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpiYXNlID0gdGFibGU7CisJY29uc3QgdW5zaWduZWQgY2hhciAqaGlfa2V5LCAqbG9fa2V5OworCXVuc2lnbmVkIG9mc18wOworCXN0YXRpYyBpbnQgZGVidWdfbG9va3VwID0gLTE7CisKKwlpZiAoZGVidWdfbG9va3VwIDwgMCkKKwkJZGVidWdfbG9va3VwID0gISFnZXRlbnYoIkdJVF9ERUJVR19MT09LVVAiKTsKKworCWlmICghbnIgfHwgbG8gPj0gaGkpCisJCXJldHVybiAtMTsKKworCWlmIChuciA9PSBoaSkKKwkJaGlfa2V5ID0gTlVMTDsKKwllbHNlCisJCWhpX2tleSA9IGJhc2UgKyBlbGVtX3NpemUgKiBoaSArIGtleV9vZmZzZXQ7CisJbG9fa2V5ID0gYmFzZSArIGVsZW1fc2l6ZSAqIGxvICsga2V5X29mZnNldDsKKworCW9mc18wID0gMDsKKwlkbyB7CisJCWludCBjbXA7CisJCXVuc2lnbmVkIG9mcywgbWksIHJhbmdlOworCQl1bnNpZ25lZCBsb3YsIGhpdiwga3l2OworCQljb25zdCB1bnNpZ25lZCBjaGFyICptaV9rZXk7CisKKwkJcmFuZ2UgPSBoaSAtIGxvOworCQlpZiAoaGlfa2V5KSB7CisJCQlmb3IgKG9mcyA9IG9mc18wOyBvZnMgPCAyMDsgb2ZzKyspCisJCQkJaWYgKGxvX2tleVtvZnNdICE9IGhpX2tleVtvZnNdKQorCQkJCQlicmVhazsKKwkJCW9mc18wID0gb2ZzOworCQkJLyoKKwkJCSAqIGJ5dGUgMCB0aHJ1IChvZnMtMSkgYXJlIHRoZSBzYW1lIGJldHdlZW4KKwkJCSAqIGxvIGFuZCBoaTsgb2ZzIGlzIHRoZSBmaXJzdCBieXRlIHRoYXQgaXMKKwkJCSAqIGRpZmZlcmVudC4KKwkJCSAqLworCQkJaGl2ID0gaGlfa2V5W29mc18wXTsKKwkJCWlmIChvZnNfMCA8IDE5KQorCQkJCWhpdiA9IChoaXYgPDwgOCkgfCBoaV9rZXlbb2ZzXzArMV07CisJCX0gZWxzZSB7CisJCQloaXYgPSAyNTY7CisJCQlpZiAob2ZzXzAgPCAxOSkKKwkJCQloaXYgPDw9IDg7CisJCX0KKwkJbG92ID0gbG9fa2V5W29mc18wXTsKKwkJa3l2ID0ga2V5W29mc18wXTsKKwkJaWYgKG9mc18wIDwgMTkpIHsKKwkJCWxvdiA9IChsb3YgPDwgOCkgfCBsb19rZXlbb2ZzXzArMV07CisJCQlreXYgPSAoa3l2IDw8IDgpIHwga2V5W29mc18wKzFdOworCQl9CisJCWFzc2VydChsb3YgPCBoaXYpOworCisJCWlmIChreXYgPCBsb3YpCisJCQlyZXR1cm4gLTEgLSBsbzsKKwkJaWYgKGhpdiA8IGt5dikKKwkJCXJldHVybiAtMSAtIGhpOworCisJCS8qCisJCSAqIEV2ZW4gaWYgd2Uga25vdyB0aGUgdGFyZ2V0IGlzIG11Y2ggY2xvc2VyIHRvICdoaScKKwkJICogdGhhbiAnbG8nLCBpZiB3ZSBwaWNrIHRvbyBwcmVjaXNlbHkgYW5kIG92ZXJzaG9vdAorCQkgKiAoZS5nLiB3aGVuIHdlIGtub3cgJ21pJyBpcyBjbG9zZXIgdG8gJ2hpJyB0aGFuIHRvCisJCSAqICdsbycsIHBpY2sgJ21pJyB0aGF0IGlzIGhpZ2hlciB0aGFuIHRoZSB0YXJnZXQpLCB3ZQorCQkgKiBlbmQgdXAgbmFycm93aW5nIHRoZSBzZWFyY2ggc3BhY2UgYnkgYSBzbWFsbGVyCisJCSAqIGFtb3VudCAoaS5lLiB0aGUgZGlzdGFuY2UgYmV0d2VlbiAnbWknIGFuZCAnaGknKQorCQkgKiB0aGFuIHdoYXQgd2Ugd291bGQgaGF2ZSAoaS5lLiBhYm91dCBoYWxmIG9mICdsbycKKwkJICogYW5kICdoaScpLiAgSGVkZ2Ugb3VyIGJldHMgdG8gcGljayAnbWknIGxlc3MKKwkJICogYWdncmVzc2l2ZWx5LCBpLmUuIG1ha2UgJ21pJyBhIGJpdCBjbG9zZXIgdG8gdGhlCisJCSAqIG1pZGRsZSB0aGFuIHdlIHdvdWxkIG90aGVyd2lzZSBwaWNrLgorCQkgKi8KKwkJa3l2ID0gKGt5diAqIDYgKyBsb3YgKyBoaXYpIC8gODsKKwkJaWYgKGxvdiA8IGhpdiAtIDEpIHsKKwkJCWlmIChreXYgPT0gbG92KQorCQkJCWt5disrOworCQkJZWxzZSBpZiAoa3l2ID09IGhpdikKKwkJCQlreXYtLTsKKwkJfQorCQltaSA9IChyYW5nZSAtIDEpICogKGt5diAtIGxvdikgLyAoaGl2IC0gbG92KSArIGxvOworCisJCWlmIChkZWJ1Z19sb29rdXApIHsKKwkJCXByaW50ZigibG8gJXUgaGkgJXUgcmcgJXUgbWkgJXUgIiwgbG8sIGhpLCByYW5nZSwgbWkpOworCQkJcHJpbnRmKCJvZnMgJXUgbG92ICV4LCBoaXYgJXgsIGt5diAleFxuIiwKKwkJCSAgICAgICBvZnNfMCwgbG92LCBoaXYsIGt5dik7CisJCX0KKwkJaWYgKCEobG8gPD0gbWkgJiYgbWkgPCBoaSkpCisJCQlkaWUoImFzc2VydGlvbiBmYWlsdXJlIGxvICV1IG1pICV1IGhpICV1ICVzIiwKKwkJCSAgICBsbywgbWksIGhpLCBzaGExX3RvX2hleChrZXkpKTsKKworCQltaV9rZXkgPSBiYXNlICsgZWxlbV9zaXplICogbWkgKyBrZXlfb2Zmc2V0OworCQljbXAgPSBtZW1jbXAobWlfa2V5ICsgb2ZzXzAsIGtleSArIG9mc18wLCAyMCAtIG9mc18wKTsKKwkJaWYgKCFjbXApCisJCQlyZXR1cm4gbWk7CisJCWlmIChjbXAgPiAwKSB7CisJCQloaSA9IG1pOworCQkJaGlfa2V5ID0gbWlfa2V5OworCQl9IGVsc2UgeworCQkJbG8gPSBtaSArIDE7CisJCQlsb19rZXkgPSBtaV9rZXkgKyBlbGVtX3NpemU7CisJCX0KKwl9IHdoaWxlIChsbyA8IGhpKTsKKwlyZXR1cm4gLWxvLTE7Cit9CmRpZmYgLS1naXQgYS9zaGExLWxvb2t1cC5oIGIvc2hhMS1sb29rdXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjQ5YTgxCi0tLSAvZGV2L251bGwKKysrIGIvc2hhMS1sb29rdXAuaApAQCAtMCwwICsxLDkgQEAKKyNpZm5kZWYgU0hBMV9MT09LVVBfSAorI2RlZmluZSBTSEExX0xPT0tVUF9ICisKK2V4dGVybiBpbnQgc2hhMV9lbnRyeV9wb3MoY29uc3Qgdm9pZCAqdGFibGUsCisJCQkgIHNpemVfdCBlbGVtX3NpemUsCisJCQkgIHNpemVfdCBrZXlfb2Zmc2V0LAorCQkJICB1bnNpZ25lZCBsbywgdW5zaWduZWQgaGksIHVuc2lnbmVkIG5yLAorCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXkpOworI2VuZGlmCmRpZmYgLS1naXQgYS9zaGExX2ZpbGUuYyBiL3NoYTFfZmlsZS5jCmluZGV4IDQ0NWE4NzEuLmZmM2JiNDkgMTAwNjQ0Ci0tLSBhL3NoYTFfZmlsZS5jCisrKyBiL3NoYTFfZmlsZS5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSAidHJlZS5oIgogI2luY2x1ZGUgInJlZnMuaCIKICNpbmNsdWRlICJwYWNrLXJldmluZGV4LmgiCisjaW5jbHVkZSAic2hhMS1sb29rdXAuaCIKIAogI2lmbmRlZiBPX05PQVRJTUUKICNpZiBkZWZpbmVkKF9fbGludXhfXykgJiYgKGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX19QUENfXykpCkBAIC0zNCw4ICszNSw2IEBACiAKIGNvbnN0IHVuc2lnbmVkIGNoYXIgbnVsbF9zaGExWzIwXTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBzaGExX2ZpbGVfb3Blbl9mbGFnID0gT19OT0FUSU1FOwotCiBjb25zdCBzaWduZWQgY2hhciBoZXh2YWxfdGFibGVbMjU2XSA9IHsKIAkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogMDAtMDcgKi8KIAkgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAkJLyogMDgtMGYgKi8KQEAgLTExNyw3ICsxMTYsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotY2hhciAqIHNoYTFfdG9faGV4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCitpbnQgc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChjb25zdCBjaGFyICpwYXRoKQoreworCS8qIHBhdGggcG9pbnRzIHRvIGNhY2hlIGVudHJpZXMsIHNvIHhzdHJkdXAgYmVmb3JlIG1lc3Npbmcgd2l0aCBpdCAqLworCWNoYXIgKmJ1ZiA9IHhzdHJkdXAocGF0aCk7CisJaW50IHJlc3VsdCA9IHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXMoYnVmKTsKKwlmcmVlKGJ1Zik7CisJcmV0dXJuIHJlc3VsdDsKK30KKworY2hhciAqc2hhMV90b19oZXgoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKIHsKIAlzdGF0aWMgaW50IGJ1Zm5vOwogCXN0YXRpYyBjaGFyIGhleGJ1ZmZlcls0XVs1MF07CkBAIC0xNzUsMjEgKzE4MywyMyBAQAogCXJldHVybiBiYXNlOwogfQogCi1jaGFyICpzaGExX3BhY2tfbmFtZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQorc3RhdGljIGNoYXIgKnNoYTFfZ2V0X3BhY2tfbmFtZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJCWNoYXIgKipuYW1lLCBjaGFyICoqYmFzZSwgY29uc3QgY2hhciAqd2hpY2gpCiB7CiAJc3RhdGljIGNvbnN0IGNoYXIgaGV4W10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7Ci0Jc3RhdGljIGNoYXIgKm5hbWUsICpiYXNlLCAqYnVmOworCWNoYXIgKmJ1ZjsKIAlpbnQgaTsKIAotCWlmICghYmFzZSkgeworCWlmICghKmJhc2UpIHsKIAkJY29uc3QgY2hhciAqc2hhMV9maWxlX2RpcmVjdG9yeSA9IGdldF9vYmplY3RfZGlyZWN0b3J5KCk7CiAJCWludCBsZW4gPSBzdHJsZW4oc2hhMV9maWxlX2RpcmVjdG9yeSk7Ci0JCWJhc2UgPSB4bWFsbG9jKGxlbiArIDYwKTsKLQkJc3ByaW50ZihiYXNlLCAiJXMvcGFjay9wYWNrLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAucGFjayIsIHNoYTFfZmlsZV9kaXJlY3RvcnkpOwotCQluYW1lID0gYmFzZSArIGxlbiArIDExOworCQkqYmFzZSA9IHhtYWxsb2MobGVuICsgNjApOworCQlzcHJpbnRmKCpiYXNlLCAiJXMvcGFjay9wYWNrLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAuJXMiLAorCQkJc2hhMV9maWxlX2RpcmVjdG9yeSwgd2hpY2gpOworCQkqbmFtZSA9ICpiYXNlICsgbGVuICsgMTE7CiAJfQogCi0JYnVmID0gbmFtZTsKKwlidWYgPSAqbmFtZTsKIAogCWZvciAoaSA9IDA7IGkgPCAyMDsgaSsrKSB7CiAJCXVuc2lnbmVkIGludCB2YWwgPSAqc2hhMSsrOwpAQCAtMTk3LDMyICsyMDcsMjEgQEAKIAkJKmJ1ZisrID0gaGV4W3ZhbCAmIDB4Zl07CiAJfQogCi0JcmV0dXJuIGJhc2U7CisJcmV0dXJuICpiYXNlOworfQorCitjaGFyICpzaGExX3BhY2tfbmFtZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0YXRpYyBjaGFyICpuYW1lLCAqYmFzZTsKKworCXJldHVybiBzaGExX2dldF9wYWNrX25hbWUoc2hhMSwgJm5hbWUsICZiYXNlLCAicGFjayIpOwogfQogCiBjaGFyICpzaGExX3BhY2tfaW5kZXhfbmFtZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQogewotCXN0YXRpYyBjb25zdCBjaGFyIGhleFtdID0gIjAxMjM0NTY3ODlhYmNkZWYiOwotCXN0YXRpYyBjaGFyICpuYW1lLCAqYmFzZSwgKmJ1ZjsKLQlpbnQgaTsKKwlzdGF0aWMgY2hhciAqbmFtZSwgKmJhc2U7CiAKLQlpZiAoIWJhc2UpIHsKLQkJY29uc3QgY2hhciAqc2hhMV9maWxlX2RpcmVjdG9yeSA9IGdldF9vYmplY3RfZGlyZWN0b3J5KCk7Ci0JCWludCBsZW4gPSBzdHJsZW4oc2hhMV9maWxlX2RpcmVjdG9yeSk7Ci0JCWJhc2UgPSB4bWFsbG9jKGxlbiArIDYwKTsKLQkJc3ByaW50ZihiYXNlLCAiJXMvcGFjay9wYWNrLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAuaWR4Iiwgc2hhMV9maWxlX2RpcmVjdG9yeSk7Ci0JCW5hbWUgPSBiYXNlICsgbGVuICsgMTE7Ci0JfQotCi0JYnVmID0gbmFtZTsKLQotCWZvciAoaSA9IDA7IGkgPCAyMDsgaSsrKSB7Ci0JCXVuc2lnbmVkIGludCB2YWwgPSAqc2hhMSsrOwotCQkqYnVmKysgPSBoZXhbdmFsID4+IDRdOwotCQkqYnVmKysgPSBoZXhbdmFsICYgMHhmXTsKLQl9Ci0KLQlyZXR1cm4gYmFzZTsKKwlyZXR1cm4gc2hhMV9nZXRfcGFja19uYW1lKHNoYTEsICZuYW1lLCAmYmFzZSwgImlkeCIpOwogfQogCiBzdHJ1Y3QgYWx0ZXJuYXRlX29iamVjdF9kYXRhYmFzZSAqYWx0X29kYl9saXN0OwpAQCAtMzc5LDYgKzM3OCwxOCBAQAogCW11bm1hcChtYXAsIG1hcHN6KTsKIH0KIAordm9pZCBhZGRfdG9fYWx0ZXJuYXRlc19maWxlKGNvbnN0IGNoYXIgKnJlZmVyZW5jZSkKK3sKKwlzdHJ1Y3QgbG9ja19maWxlICpsb2NrID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGxvY2tfZmlsZSkpOworCWludCBmZCA9IGhvbGRfbG9ja19maWxlX2Zvcl9hcHBlbmQobG9jaywgZ2l0X3BhdGgoIm9iamVjdHMvaW5mby9hbHRlcm5hdGVzIiksIDEpOworCWNoYXIgKmFsdCA9IG1rcGF0aCgiJXMvb2JqZWN0c1xuIiwgcmVmZXJlbmNlKTsKKwl3cml0ZV9vcl9kaWUoZmQsIGFsdCwgc3RybGVuKGFsdCkpOworCWlmIChjb21taXRfbG9ja19maWxlKGxvY2spKQorCQlkaWUoImNvdWxkIG5vdCBjbG9zZSBhbHRlcm5hdGVzIGZpbGUiKTsKKwlpZiAoYWx0X29kYl90YWlsKQorCQlsaW5rX2FsdF9vZGJfZW50cmllcyhhbHQsIGFsdCArIHN0cmxlbihhbHQpLCAnXG4nLCBOVUxMLCAwKTsKK30KKwogdm9pZCBwcmVwYXJlX2FsdF9vZGIodm9pZCkKIHsKIAljb25zdCBjaGFyICphbHQ7CkBAIC0zOTUsMjEgKzQwNiwyMSBAQAogCXJlYWRfaW5mb19hbHRlcm5hdGVzKGdldF9vYmplY3RfZGlyZWN0b3J5KCksIDApOwogfQogCi1zdGF0aWMgY2hhciAqZmluZF9zaGExX2ZpbGUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgc3RydWN0IHN0YXQgKnN0KQorc3RhdGljIGludCBoYXNfbG9vc2Vfb2JqZWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCiB7CiAJY2hhciAqbmFtZSA9IHNoYTFfZmlsZV9uYW1lKHNoYTEpOwogCXN0cnVjdCBhbHRlcm5hdGVfb2JqZWN0X2RhdGFiYXNlICphbHQ7CiAKLQlpZiAoIXN0YXQobmFtZSwgc3QpKQotCQlyZXR1cm4gbmFtZTsKKwlpZiAoIWFjY2VzcyhuYW1lLCBGX09LKSkKKwkJcmV0dXJuIDE7CiAJcHJlcGFyZV9hbHRfb2RiKCk7CiAJZm9yIChhbHQgPSBhbHRfb2RiX2xpc3Q7IGFsdDsgYWx0ID0gYWx0LT5uZXh0KSB7CiAJCW5hbWUgPSBhbHQtPm5hbWU7CiAJCWZpbGxfc2hhMV9wYXRoKG5hbWUsIHNoYTEpOwotCQlpZiAoIXN0YXQoYWx0LT5iYXNlLCBzdCkpCi0JCQlyZXR1cm4gYWx0LT5iYXNlOworCQlpZiAoIWFjY2VzcyhhbHQtPmJhc2UsIEZfT0spKQorCQkJcmV0dXJuIDE7CiAJfQotCXJldHVybiBOVUxMOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IHBhY2tfdXNlZF9jdHI7CkBAIC04MjksMTMgKzg0MCw3IEBACiAKIHN0cnVjdCBwYWNrZWRfZ2l0ICpwYXJzZV9wYWNrX2luZGV4KHVuc2lnbmVkIGNoYXIgKnNoYTEpCiB7Ci0JY2hhciAqcGF0aCA9IHNoYTFfcGFja19pbmRleF9uYW1lKHNoYTEpOwotCXJldHVybiBwYXJzZV9wYWNrX2luZGV4X2ZpbGUoc2hhMSwgcGF0aCk7Ci19Ci0KLXN0cnVjdCBwYWNrZWRfZ2l0ICpwYXJzZV9wYWNrX2luZGV4X2ZpbGUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKLQkJCQkJIGNvbnN0IGNoYXIgKmlkeF9wYXRoKQoteworCWNvbnN0IGNoYXIgKmlkeF9wYXRoID0gc2hhMV9wYWNrX2luZGV4X25hbWUoc2hhMSk7CiAJY29uc3QgY2hhciAqcGF0aCA9IHNoYTFfcGFja19uYW1lKHNoYTEpOwogCXN0cnVjdCBwYWNrZWRfZ2l0ICpwID0geG1hbGxvYyhzaXplb2YoKnApICsgc3RybGVuKHBhdGgpICsgMik7CiAKQEAgLTk5MywzOCArOTk4LDU4IEBACiAJcmV0dXJuIGhhc2hjbXAoc2hhMSwgcmVhbF9zaGExKSA/IC0xIDogMDsKIH0KIAorc3RhdGljIGludCBnaXRfb3Blbl9ub2F0aW1lKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RhdGljIGludCBzaGExX2ZpbGVfb3Blbl9mbGFnID0gT19OT0FUSU1FOworCWludCBmZCA9IG9wZW4obmFtZSwgT19SRE9OTFkgfCBzaGExX2ZpbGVfb3Blbl9mbGFnKTsKKworCS8qIE1pZ2h0IHRoZSBmYWlsdXJlIGJlIGR1ZSB0byBPX05PQVRJTUU/ICovCisJaWYgKGZkIDwgMCAmJiBlcnJubyAhPSBFTk9FTlQgJiYgc2hhMV9maWxlX29wZW5fZmxhZykgeworCQlmZCA9IG9wZW4obmFtZSwgT19SRE9OTFkpOworCQlpZiAoZmQgPj0gMCkKKwkJCXNoYTFfZmlsZV9vcGVuX2ZsYWcgPSAwOworCX0KKwlyZXR1cm4gZmQ7Cit9CisKK3N0YXRpYyBpbnQgb3Blbl9zaGExX2ZpbGUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlpbnQgZmQ7CisJY2hhciAqbmFtZSA9IHNoYTFfZmlsZV9uYW1lKHNoYTEpOworCXN0cnVjdCBhbHRlcm5hdGVfb2JqZWN0X2RhdGFiYXNlICphbHQ7CisKKwlmZCA9IGdpdF9vcGVuX25vYXRpbWUobmFtZSk7CisJaWYgKGZkID49IDApCisJCXJldHVybiBmZDsKKworCXByZXBhcmVfYWx0X29kYigpOworCWVycm5vID0gRU5PRU5UOworCWZvciAoYWx0ID0gYWx0X29kYl9saXN0OyBhbHQ7IGFsdCA9IGFsdC0+bmV4dCkgeworCQluYW1lID0gYWx0LT5uYW1lOworCQlmaWxsX3NoYTFfcGF0aChuYW1lLCBzaGExKTsKKwkJZmQgPSBnaXRfb3Blbl9ub2F0aW1lKGFsdC0+YmFzZSk7CisJCWlmIChmZCA+PSAwKQorCQkJcmV0dXJuIGZkOworCX0KKwlyZXR1cm4gLTE7Cit9CisKIHN0YXRpYyB2b2lkICptYXBfc2hhMV9maWxlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHVuc2lnbmVkIGxvbmcgKnNpemUpCiB7Ci0Jc3RydWN0IHN0YXQgc3Q7CiAJdm9pZCAqbWFwOwogCWludCBmZDsKLQljaGFyICpmaWxlbmFtZSA9IGZpbmRfc2hhMV9maWxlKHNoYTEsICZzdCk7CiAKLQlpZiAoIWZpbGVuYW1lKSB7Ci0JCXJldHVybiBOVUxMOwotCX0KKwlmZCA9IG9wZW5fc2hhMV9maWxlKHNoYTEpOworCW1hcCA9IE5VTEw7CisJaWYgKGZkID49IDApIHsKKwkJc3RydWN0IHN0YXQgc3Q7CiAKLQlmZCA9IG9wZW4oZmlsZW5hbWUsIE9fUkRPTkxZIHwgc2hhMV9maWxlX29wZW5fZmxhZyk7Ci0JaWYgKGZkIDwgMCkgewotCQkvKiBTZWUgaWYgaXQgd29ya3Mgd2l0aG91dCBPX05PQVRJTUUgKi8KLQkJc3dpdGNoIChzaGExX2ZpbGVfb3Blbl9mbGFnKSB7Ci0JCWRlZmF1bHQ6Ci0JCQlmZCA9IG9wZW4oZmlsZW5hbWUsIE9fUkRPTkxZKTsKLQkJCWlmIChmZCA+PSAwKQotCQkJCWJyZWFrOwotCQkvKiBGYWxsdGhyb3VnaCAqLwotCQljYXNlIDA6Ci0JCQlyZXR1cm4gTlVMTDsKKwkJaWYgKCFmc3RhdChmZCwgJnN0KSkgeworCQkJKnNpemUgPSB4c2l6ZV90KHN0LnN0X3NpemUpOworCQkJbWFwID0geG1tYXAoTlVMTCwgKnNpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCAwKTsKIAkJfQotCi0JCS8qIElmIGl0IGZhaWxlZCBvbmNlLCBpdCB3aWxsIHByb2JhYmx5IGZhaWwgYWdhaW4uCi0JCSAqIFN0b3AgdXNpbmcgT19OT0FUSU1FCi0JCSAqLwotCQlzaGExX2ZpbGVfb3Blbl9mbGFnID0gMDsKKwkJY2xvc2UoZmQpOwogCX0KLQkqc2l6ZSA9IHhzaXplX3Qoc3Quc3Rfc2l6ZSk7Ci0JbWFwID0geG1tYXAoTlVMTCwgKnNpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCAwKTsKLQljbG9zZShmZCk7CiAJcmV0dXJuIG1hcDsKIH0KIApAQCAtMTU4NCw2ICsxNjA5LDcgQEAKIAlvZmZfdCBiYXNlX29mZnNldDsKIAogCWJhc2Vfb2Zmc2V0ID0gZ2V0X2RlbHRhX2Jhc2UocCwgd19jdXJzLCAmY3VycG9zLCAqdHlwZSwgb2JqX29mZnNldCk7CisJdW51c2VfcGFjayh3X2N1cnMpOwogCWJhc2UgPSBjYWNoZV9vcl91bnBhY2tfZW50cnkocCwgYmFzZV9vZmZzZXQsICZiYXNlX3NpemUsIHR5cGUsIDApOwogCWlmICghYmFzZSkKIAkJZGllKCJmYWlsZWQgdG8gcmVhZCBkZWx0YSBiYXNlIG9iamVjdCIKQEAgLTE2NzUsNyArMTcwMSwxMiBAQAogewogCWNvbnN0IHVpbnQzMl90ICpsZXZlbDFfb2ZzID0gcC0+aW5kZXhfZGF0YTsKIAljb25zdCB1bnNpZ25lZCBjaGFyICppbmRleCA9IHAtPmluZGV4X2RhdGE7Ci0JdW5zaWduZWQgaGksIGxvOworCXVuc2lnbmVkIGhpLCBsbywgc3RyaWRlOworCXN0YXRpYyBpbnQgdXNlX2xvb2t1cCA9IC0xOworCXN0YXRpYyBpbnQgZGVidWdfbG9va3VwID0gLTE7CisKKwlpZiAoZGVidWdfbG9va3VwIDwgMCkKKwkJZGVidWdfbG9va3VwID0gISFnZXRlbnYoIkdJVF9ERUJVR19MT09LVVAiKTsKIAogCWlmICghaW5kZXgpIHsKIAkJaWYgKG9wZW5fcGFja19pbmRleChwKSkKQEAgLTE2OTAsMTEgKzE3MjEsMzQgQEAKIAlpbmRleCArPSA0ICogMjU2OwogCWhpID0gbnRvaGwobGV2ZWwxX29mc1sqc2hhMV0pOwogCWxvID0gKCgqc2hhMSA9PSAweDApID8gMCA6IG50b2hsKGxldmVsMV9vZnNbKnNoYTEgLSAxXSkpOworCWlmIChwLT5pbmRleF92ZXJzaW9uID4gMSkgeworCQlzdHJpZGUgPSAyMDsKKwl9IGVsc2UgeworCQlzdHJpZGUgPSAyNDsKKwkJaW5kZXggKz0gNDsKKwl9CisKKwlpZiAoZGVidWdfbG9va3VwKQorCQlwcmludGYoIiUwMnglMDJ4JTAyeC4uLiBsbyAldSBoaSAldSBuciAldVxuIiwKKwkJICAgICAgIHNoYTFbMF0sIHNoYTFbMV0sIHNoYTFbMl0sIGxvLCBoaSwgcC0+bnVtX29iamVjdHMpOworCisJaWYgKHVzZV9sb29rdXAgPCAwKQorCQl1c2VfbG9va3VwID0gISFnZXRlbnYoIkdJVF9VU0VfTE9PS1VQIik7CisJaWYgKHVzZV9sb29rdXApIHsKKwkJaW50IHBvcyA9IHNoYTFfZW50cnlfcG9zKGluZGV4LCBzdHJpZGUsIDAsCisJCQkJCSBsbywgaGksIHAtPm51bV9vYmplY3RzLCBzaGExKTsKKwkJaWYgKHBvcyA8IDApCisJCQlyZXR1cm4gMDsKKwkJcmV0dXJuIG50aF9wYWNrZWRfb2JqZWN0X29mZnNldChwLCBwb3MpOworCX0KIAogCWRvIHsKIAkJdW5zaWduZWQgbWkgPSAobG8gKyBoaSkgLyAyOwotCQl1bnNpZ25lZCB4ID0gKHAtPmluZGV4X3ZlcnNpb24gPiAxKSA/IChtaSAqIDIwKSA6IChtaSAqIDI0ICsgNCk7Ci0JCWludCBjbXAgPSBoYXNoY21wKGluZGV4ICsgeCwgc2hhMSk7CisJCWludCBjbXAgPSBoYXNoY21wKGluZGV4ICsgbWkgKiBzdHJpZGUsIHNoYTEpOworCisJCWlmIChkZWJ1Z19sb29rdXApCisJCQlwcmludGYoImxvICV1IGhpICV1IHJnICV1IG1pICV1XG4iLAorCQkJICAgICAgIGxvLCBoaSwgaGkgLSBsbywgbWkpOwogCQlpZiAoIWNtcCkKIAkJCXJldHVybiBudGhfcGFja2VkX29iamVjdF9vZmZzZXQocCwgbWkpOwogCQlpZiAoY21wID4gMCkKQEAgLTE5ODcsNDggKzIwNDEsMTEgQEAKIH0KIAogLyoKLSAqIExpbmsgdGhlIHRlbXBmaWxlIHRvIHRoZSBmaW5hbCBwbGFjZSwgcG9zc2libHkgY3JlYXRpbmcgdGhlCi0gKiBsYXN0IGRpcmVjdG9yeSBsZXZlbCBhcyB5b3UgZG8gc28uCi0gKgotICogUmV0dXJucyB0aGUgZXJybm8gb24gZmFpbHVyZSwgMCBvbiBzdWNjZXNzLgotICovCi1zdGF0aWMgaW50IGxpbmtfdGVtcF90b19maWxlKGNvbnN0IGNoYXIgKnRtcGZpbGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQotewotCWludCByZXQ7Ci0JY2hhciAqZGlyOwotCi0JaWYgKCFsaW5rKHRtcGZpbGUsIGZpbGVuYW1lKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIFRyeSB0byBta2RpciB0aGUgbGFzdCBwYXRoIGNvbXBvbmVudCBpZiB0aGF0IGZhaWxlZC4KLQkgKgotCSAqIFJlLXRyeSB0aGUgImxpbmsoKSIgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBta2RpcgotCSAqIHN1Y2NlZWRzLCBzaW5jZSBhIHJhY2UgbWlnaHQgbWVhbiB0aGF0IHNvbWVib2R5Ci0JICogZWxzZSBzdWNjZWVkZWQuCi0JICovCi0JcmV0ID0gZXJybm87Ci0JZGlyID0gc3RycmNocihmaWxlbmFtZSwgJy8nKTsKLQlpZiAoZGlyKSB7Ci0JCSpkaXIgPSAwOwotCQlpZiAoIW1rZGlyKGZpbGVuYW1lLCAwNzc3KSAmJiBhZGp1c3Rfc2hhcmVkX3Blcm0oZmlsZW5hbWUpKSB7Ci0JCQkqZGlyID0gJy8nOwotCQkJcmV0dXJuIC0yOwotCQl9Ci0JCSpkaXIgPSAnLyc7Ci0JCWlmICghbGluayh0bXBmaWxlLCBmaWxlbmFtZSkpCi0JCQlyZXR1cm4gMDsKLQkJcmV0ID0gZXJybm87Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLS8qCiAgKiBNb3ZlIHRoZSBqdXN0IHdyaXR0ZW4gb2JqZWN0IGludG8gaXRzIGZpbmFsIHJlc3RpbmcgcGxhY2UKICAqLwogaW50IG1vdmVfdGVtcF90b19maWxlKGNvbnN0IGNoYXIgKnRtcGZpbGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewotCWludCByZXQgPSBsaW5rX3RlbXBfdG9fZmlsZSh0bXBmaWxlLCBmaWxlbmFtZSk7CisJaW50IHJldCA9IGxpbmsodG1wZmlsZSwgZmlsZW5hbWUpOwogCiAJLyoKIAkgKiBDb2RhIGhhY2sgLSBjb2RhIGRvZXNuJ3QgbGlrZSBjcm9zcy1kaXJlY3RvcnkgbGlua3MsCkBAIC0yMDczLDQzICsyMDkwLDY4IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCB3cml0ZV9zaGExX2ZpbGUodm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIGxlbiwgY29uc3QgY2hhciAqdHlwZSwgdW5zaWduZWQgY2hhciAqcmV0dXJuc2hhMSkKKy8qIEZpbmFsaXplIGEgZmlsZSBvbiBkaXNrLCBhbmQgY2xvc2UgaXQuICovCitzdGF0aWMgdm9pZCBjbG9zZV9zaGExX2ZpbGUoaW50IGZkKQogewotCWludCBzaXplLCByZXQ7CisJaWYgKGZzeW5jX29iamVjdF9maWxlcykKKwkJZnN5bmNfb3JfZGllKGZkLCAic2hhMSBmaWxlIik7CisJZmNobW9kKGZkLCAwNDQ0KTsKKwlpZiAoY2xvc2UoZmQpICE9IDApCisJCWRpZSgidW5hYmxlIHRvIHdyaXRlIHNoYTEgZmlsZSIpOworfQorCisvKiBTaXplIG9mIGRpcmVjdG9yeSBjb21wb25lbnQsIGluY2x1ZGluZyB0aGUgZW5kaW5nICcvJyAqLworc3RhdGljIGlubGluZSBpbnQgZGlyZWN0b3J5X3NpemUoY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJY29uc3QgY2hhciAqcyA9IHN0cnJjaHIoZmlsZW5hbWUsICcvJyk7CisJaWYgKCFzKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gcyAtIGZpbGVuYW1lICsgMTsKK30KKworLyoKKyAqIFRoaXMgY3JlYXRlcyBhIHRlbXBvcmFyeSBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgZmluYWwKKyAqICdmaWxlbmFtZScKKyAqCisgKiBXZSB3YW50IHRvIGF2b2lkIGNyb3NzLWRpcmVjdG9yeSBmaWxlbmFtZSByZW5hbWVzLCBiZWNhdXNlIHRob3NlCisgKiBjYW4gaGF2ZSBwcm9ibGVtcyBvbiB2YXJpb3VzIGZpbGVzeXN0ZW1zIChGQVQsIE5GUywgQ29kYSkuCisgKi8KK3N0YXRpYyBpbnQgY3JlYXRlX3RtcGZpbGUoY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmc2l6LCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlpbnQgZmQsIGRpcmxlbiA9IGRpcmVjdG9yeV9zaXplKGZpbGVuYW1lKTsKKworCWlmIChkaXJsZW4gKyAyMCA+IGJ1ZnNpeikgeworCQllcnJubyA9IEVOQU1FVE9PTE9ORzsKKwkJcmV0dXJuIC0xOworCX0KKwltZW1jcHkoYnVmZmVyLCBmaWxlbmFtZSwgZGlybGVuKTsKKwlzdHJjcHkoYnVmZmVyICsgZGlybGVuLCAidG1wX29ial9YWFhYWFgiKTsKKwlmZCA9IG1rc3RlbXAoYnVmZmVyKTsKKwlpZiAoZmQgPCAwICYmIGRpcmxlbikgeworCQkvKiBNYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSBleGlzdHMgKi8KKwkJbWVtY3B5KGJ1ZmZlciwgZmlsZW5hbWUsIGRpcmxlbik7CisJCWJ1ZmZlcltkaXJsZW4tMV0gPSAwOworCQlpZiAobWtkaXIoYnVmZmVyLCAwNzc3KSB8fCBhZGp1c3Rfc2hhcmVkX3Blcm0oYnVmZmVyKSkKKwkJCXJldHVybiAtMTsKKworCQkvKiBUcnkgYWdhaW4gKi8KKwkJc3RyY3B5KGJ1ZmZlciArIGRpcmxlbiAtIDEsICIvdG1wX29ial9YWFhYWFgiKTsKKwkJZmQgPSBta3N0ZW1wKGJ1ZmZlcik7CisJfQorCXJldHVybiBmZDsKK30KKworc3RhdGljIGludCB3cml0ZV9sb29zZV9vYmplY3QoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgY2hhciAqaGRyLCBpbnQgaGRybGVuLAorCQkJICAgICAgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIGxlbiwgdGltZV90IG10aW1lKQoreworCWludCBmZCwgc2l6ZSwgcmV0OwogCXVuc2lnbmVkIGNoYXIgKmNvbXByZXNzZWQ7CiAJel9zdHJlYW0gc3RyZWFtOwotCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CiAJY2hhciAqZmlsZW5hbWU7CiAJc3RhdGljIGNoYXIgdG1wZmlsZVtQQVRIX01BWF07Ci0JY2hhciBoZHJbMzJdOwotCWludCBmZCwgaGRybGVuOwogCi0JLyogTm9ybWFsbHkgaWYgd2UgaGF2ZSBpdCBpbiB0aGUgcGFjayB0aGVuIHdlIGRvIG5vdCBib3RoZXIgd3JpdGluZwotCSAqIGl0IG91dCBpbnRvIC5naXQvb2JqZWN0cy8/Py8/ezM4fSBmaWxlLgotCSAqLwotCXdyaXRlX3NoYTFfZmlsZV9wcmVwYXJlKGJ1ZiwgbGVuLCB0eXBlLCBzaGExLCBoZHIsICZoZHJsZW4pOwogCWZpbGVuYW1lID0gc2hhMV9maWxlX25hbWUoc2hhMSk7Ci0JaWYgKHJldHVybnNoYTEpCi0JCWhhc2hjcHkocmV0dXJuc2hhMSwgc2hhMSk7Ci0JaWYgKGhhc19zaGExX2ZpbGUoc2hhMSkpCi0JCXJldHVybiAwOwotCWZkID0gb3BlbihmaWxlbmFtZSwgT19SRE9OTFkpOwotCWlmIChmZCA+PSAwKSB7Ci0JCS8qCi0JCSAqIEZJWE1FISEhIFdlIG1pZ2h0IGRvIGNvbGxpc2lvbiBjaGVja2luZyBoZXJlLCBidXQgd2UnZAotCQkgKiBuZWVkIHRvIHVuY29tcHJlc3MgdGhlIG9sZCBmaWxlIGFuZCBjaGVjayBpdC4gTGF0ZXIuCi0JCSAqLwotCQljbG9zZShmZCk7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChlcnJubyAhPSBFTk9FTlQpIHsKLQkJcmV0dXJuIGVycm9yKCJzaGExIGZpbGUgJXM6ICVzXG4iLCBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKLQl9Ci0KLQlzbnByaW50Zih0bXBmaWxlLCBzaXplb2YodG1wZmlsZSksICIlcy90bXBfb2JqX1hYWFhYWCIsIGdldF9vYmplY3RfZGlyZWN0b3J5KCkpOwotCi0JZmQgPSBta3N0ZW1wKHRtcGZpbGUpOworCWZkID0gY3JlYXRlX3RtcGZpbGUodG1wZmlsZSwgc2l6ZW9mKHRtcGZpbGUpLCBmaWxlbmFtZSk7CiAJaWYgKGZkIDwgMCkgewogCQlpZiAoZXJybm8gPT0gRVBFUk0pCiAJCQlyZXR1cm4gZXJyb3IoImluc3VmZmljaWVudCBwZXJtaXNzaW9uIGZvciBhZGRpbmcgYW4gb2JqZWN0IHRvIHJlcG9zaXRvcnkgZGF0YWJhc2UgJXNcbiIsIGdldF9vYmplY3RfZGlyZWN0b3J5KCkpOwpAQCAtMjE0OCwxNTYgKzIxOTAsNTMgQEAKIAogCWlmICh3cml0ZV9idWZmZXIoZmQsIGNvbXByZXNzZWQsIHNpemUpIDwgMCkKIAkJZGllKCJ1bmFibGUgdG8gd3JpdGUgc2hhMSBmaWxlIik7Ci0JZmNobW9kKGZkLCAwNDQ0KTsKLQlpZiAoY2xvc2UoZmQpKQotCQlkaWUoInVuYWJsZSB0byB3cml0ZSBzaGExIGZpbGUiKTsKKwljbG9zZV9zaGExX2ZpbGUoZmQpOwogCWZyZWUoY29tcHJlc3NlZCk7CiAKKwlpZiAobXRpbWUpIHsKKwkJc3RydWN0IHV0aW1idWYgdXRiOworCQl1dGIuYWN0aW1lID0gbXRpbWU7CisJCXV0Yi5tb2R0aW1lID0gbXRpbWU7CisJCWlmICh1dGltZSh0bXBmaWxlLCAmdXRiKSA8IDApCisJCQl3YXJuaW5nKCJmYWlsZWQgdXRpbWUoKSBvbiAlczogJXMiLAorCQkJCXRtcGZpbGUsIHN0cmVycm9yKGVycm5vKSk7CisJfQorCiAJcmV0dXJuIG1vdmVfdGVtcF90b19maWxlKHRtcGZpbGUsIGZpbGVuYW1lKTsKIH0KIAotLyoKLSAqIFdlIG5lZWQgdG8gdW5wYWNrIGFuZCByZWNvbXByZXNzIHRoZSBvYmplY3QgZm9yIHdyaXRpbmcKLSAqIGl0IG91dCB0byBhIGRpZmZlcmVudCBmaWxlLgotICovCi1zdGF0aWMgdm9pZCAqcmVwYWNrX29iamVjdChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCB1bnNpZ25lZCBsb25nICpvYmpzaXplKQoraW50IHdyaXRlX3NoYTFfZmlsZSh2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgbGVuLCBjb25zdCBjaGFyICp0eXBlLCB1bnNpZ25lZCBjaGFyICpyZXR1cm5zaGExKQogewotCXNpemVfdCBzaXplOwotCXpfc3RyZWFtIHN0cmVhbTsKLQl1bnNpZ25lZCBjaGFyICp1bnBhY2tlZDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWNoYXIgaGRyWzMyXTsKKwlpbnQgaGRybGVuOworCisJLyogTm9ybWFsbHkgaWYgd2UgaGF2ZSBpdCBpbiB0aGUgcGFjayB0aGVuIHdlIGRvIG5vdCBib3RoZXIgd3JpdGluZworCSAqIGl0IG91dCBpbnRvIC5naXQvb2JqZWN0cy8/Py8/ezM4fSBmaWxlLgorCSAqLworCXdyaXRlX3NoYTFfZmlsZV9wcmVwYXJlKGJ1ZiwgbGVuLCB0eXBlLCBzaGExLCBoZHIsICZoZHJsZW4pOworCWlmIChyZXR1cm5zaGExKQorCQloYXNoY3B5KHJldHVybnNoYTEsIHNoYTEpOworCWlmIChoYXNfc2hhMV9maWxlKHNoYTEpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gd3JpdGVfbG9vc2Vfb2JqZWN0KHNoYTEsIGhkciwgaGRybGVuLCBidWYsIGxlbiwgMCk7Cit9CisKK2ludCBmb3JjZV9vYmplY3RfbG9vc2UoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgdGltZV90IG10aW1lKQoreworCXZvaWQgKmJ1ZjsKIAl1bnNpZ25lZCBsb25nIGxlbjsKIAllbnVtIG9iamVjdF90eXBlIHR5cGU7CiAJY2hhciBoZHJbMzJdOwogCWludCBoZHJsZW47Ci0Jdm9pZCAqYnVmOwogCi0JLyogbmVlZCB0byB1bnBhY2sgYW5kIHJlY29tcHJlc3MgaXQgYnkgaXRzZWxmICovCi0JdW5wYWNrZWQgPSByZWFkX3BhY2tlZF9zaGExKHNoYTEsICZ0eXBlLCAmbGVuKTsKLQlpZiAoIXVucGFja2VkKQotCQllcnJvcigiY2Fubm90IHJlYWQgc2hhMV9maWxlIGZvciAlcyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKLQorCWlmIChoYXNfbG9vc2Vfb2JqZWN0KHNoYTEpKQorCQlyZXR1cm4gMDsKKwlidWYgPSByZWFkX3BhY2tlZF9zaGExKHNoYTEsICZ0eXBlLCAmbGVuKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIGVycm9yKCJjYW5ub3QgcmVhZCBzaGExX2ZpbGUgZm9yICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOwogCWhkcmxlbiA9IHNwcmludGYoaGRyLCAiJXMgJWx1IiwgdHlwZW5hbWUodHlwZSksIGxlbikgKyAxOwotCi0JLyogU2V0IGl0IHVwICovCi0JbWVtc2V0KCZzdHJlYW0sIDAsIHNpemVvZihzdHJlYW0pKTsKLQlkZWZsYXRlSW5pdCgmc3RyZWFtLCB6bGliX2NvbXByZXNzaW9uX2xldmVsKTsKLQlzaXplID0gZGVmbGF0ZUJvdW5kKCZzdHJlYW0sIGxlbiArIGhkcmxlbik7Ci0JYnVmID0geG1hbGxvYyhzaXplKTsKLQotCS8qIENvbXByZXNzIGl0ICovCi0Jc3RyZWFtLm5leHRfb3V0ID0gYnVmOwotCXN0cmVhbS5hdmFpbF9vdXQgPSBzaXplOwotCi0JLyogRmlyc3QgaGVhZGVyLi4gKi8KLQlzdHJlYW0ubmV4dF9pbiA9ICh2b2lkICopaGRyOwotCXN0cmVhbS5hdmFpbF9pbiA9IGhkcmxlbjsKLQl3aGlsZSAoZGVmbGF0ZSgmc3RyZWFtLCAwKSA9PSBaX09LKQotCQkvKiBub3RoaW5nICovOwotCi0JLyogVGhlbiB0aGUgZGF0YSBpdHNlbGYuLiAqLwotCXN0cmVhbS5uZXh0X2luID0gdW5wYWNrZWQ7Ci0Jc3RyZWFtLmF2YWlsX2luID0gbGVuOwotCXdoaWxlIChkZWZsYXRlKCZzdHJlYW0sIFpfRklOSVNIKSA9PSBaX09LKQotCQkvKiBub3RoaW5nICovOwotCWRlZmxhdGVFbmQoJnN0cmVhbSk7Ci0JZnJlZSh1bnBhY2tlZCk7Ci0KLQkqb2Jqc2l6ZSA9IHN0cmVhbS50b3RhbF9vdXQ7Ci0JcmV0dXJuIGJ1ZjsKLX0KLQotaW50IHdyaXRlX3NoYTFfdG9fZmQoaW50IGZkLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQotewotCWludCByZXR2YWw7Ci0JdW5zaWduZWQgbG9uZyBvYmpzaXplOwotCXZvaWQgKmJ1ZiA9IG1hcF9zaGExX2ZpbGUoc2hhMSwgJm9ianNpemUpOwotCi0JaWYgKGJ1ZikgewotCQlyZXR2YWwgPSB3cml0ZV9idWZmZXIoZmQsIGJ1Ziwgb2Jqc2l6ZSk7Ci0JCW11bm1hcChidWYsIG9ianNpemUpOwotCQlyZXR1cm4gcmV0dmFsOwotCX0KLQotCWJ1ZiA9IHJlcGFja19vYmplY3Qoc2hhMSwgJm9ianNpemUpOwotCXJldHZhbCA9IHdyaXRlX2J1ZmZlcihmZCwgYnVmLCBvYmpzaXplKTsKLQlmcmVlKGJ1Zik7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotaW50IHdyaXRlX3NoYTFfZnJvbV9mZChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmQsIGNoYXIgKmJ1ZmZlciwKLQkJICAgICAgIHNpemVfdCBidWZzaXplLCBzaXplX3QgKmJ1ZnBvc24pCi17Ci0JY2hhciB0bXBmaWxlW1BBVEhfTUFYXTsKLQlpbnQgbG9jYWw7Ci0Jel9zdHJlYW0gc3RyZWFtOwotCXVuc2lnbmVkIGNoYXIgcmVhbF9zaGExWzIwXTsKLQl1bnNpZ25lZCBjaGFyIGRpc2NhcmRbNDA5Nl07Ci0JaW50IHJldDsKLQlTSEFfQ1RYIGM7Ci0KLQlzbnByaW50Zih0bXBmaWxlLCBzaXplb2YodG1wZmlsZSksICIlcy90bXBfb2JqX1hYWFhYWCIsIGdldF9vYmplY3RfZGlyZWN0b3J5KCkpOwotCi0JbG9jYWwgPSBta3N0ZW1wKHRtcGZpbGUpOwotCWlmIChsb2NhbCA8IDApIHsKLQkJaWYgKGVycm5vID09IEVQRVJNKQotCQkJcmV0dXJuIGVycm9yKCJpbnN1ZmZpY2llbnQgcGVybWlzc2lvbiBmb3IgYWRkaW5nIGFuIG9iamVjdCB0byByZXBvc2l0b3J5IGRhdGFiYXNlICVzXG4iLCBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpKTsKLQkJZWxzZQotCQkJcmV0dXJuIGVycm9yKCJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBzaGExIGZpbGVuYW1lICVzOiAlc1xuIiwgdG1wZmlsZSwgc3RyZXJyb3IoZXJybm8pKTsKLQl9Ci0KLQltZW1zZXQoJnN0cmVhbSwgMCwgc2l6ZW9mKHN0cmVhbSkpOwotCi0JaW5mbGF0ZUluaXQoJnN0cmVhbSk7Ci0KLQlTSEExX0luaXQoJmMpOwotCi0JZG8gewotCQlzc2l6ZV90IHNpemU7Ci0JCWlmICgqYnVmcG9zbikgewotCQkJc3RyZWFtLmF2YWlsX2luID0gKmJ1ZnBvc247Ci0JCQlzdHJlYW0ubmV4dF9pbiA9ICh1bnNpZ25lZCBjaGFyICopIGJ1ZmZlcjsKLQkJCWRvIHsKLQkJCQlzdHJlYW0ubmV4dF9vdXQgPSBkaXNjYXJkOwotCQkJCXN0cmVhbS5hdmFpbF9vdXQgPSBzaXplb2YoZGlzY2FyZCk7Ci0JCQkJcmV0ID0gaW5mbGF0ZSgmc3RyZWFtLCBaX1NZTkNfRkxVU0gpOwotCQkJCVNIQTFfVXBkYXRlKCZjLCBkaXNjYXJkLCBzaXplb2YoZGlzY2FyZCkgLQotCQkJCQkgICAgc3RyZWFtLmF2YWlsX291dCk7Ci0JCQl9IHdoaWxlIChzdHJlYW0uYXZhaWxfaW4gJiYgcmV0ID09IFpfT0spOwotCQkJaWYgKHdyaXRlX2J1ZmZlcihsb2NhbCwgYnVmZmVyLCAqYnVmcG9zbiAtIHN0cmVhbS5hdmFpbF9pbikgPCAwKQotCQkJCWRpZSgidW5hYmxlIHRvIHdyaXRlIHNoYTEgZmlsZSIpOwotCQkJbWVtbW92ZShidWZmZXIsIGJ1ZmZlciArICpidWZwb3NuIC0gc3RyZWFtLmF2YWlsX2luLAotCQkJCXN0cmVhbS5hdmFpbF9pbik7Ci0JCQkqYnVmcG9zbiA9IHN0cmVhbS5hdmFpbF9pbjsKLQkJCWlmIChyZXQgIT0gWl9PSykKLQkJCQlicmVhazsKLQkJfQotCQlzaXplID0geHJlYWQoZmQsIGJ1ZmZlciArICpidWZwb3NuLCBidWZzaXplIC0gKmJ1ZnBvc24pOwotCQlpZiAoc2l6ZSA8PSAwKSB7Ci0JCQljbG9zZShsb2NhbCk7Ci0JCQl1bmxpbmsodG1wZmlsZSk7Ci0JCQlpZiAoIXNpemUpCi0JCQkJcmV0dXJuIGVycm9yKCJDb25uZWN0aW9uIGNsb3NlZD8iKTsKLQkJCXBlcnJvcigiUmVhZGluZyBmcm9tIGNvbm5lY3Rpb24iKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCQkqYnVmcG9zbiArPSBzaXplOwotCX0gd2hpbGUgKDEpOwotCWluZmxhdGVFbmQoJnN0cmVhbSk7Ci0KLQlmY2htb2QobG9jYWwsIDA0NDQpOwotCWlmIChjbG9zZShsb2NhbCkgIT0gMCkKLQkJZGllKCJ1bmFibGUgdG8gd3JpdGUgc2hhMSBmaWxlIik7Ci0JU0hBMV9GaW5hbChyZWFsX3NoYTEsICZjKTsKLQlpZiAocmV0ICE9IFpfU1RSRUFNX0VORCkgewotCQl1bmxpbmsodG1wZmlsZSk7Ci0JCXJldHVybiBlcnJvcigiRmlsZSAlcyBjb3JydXB0ZWQiLCBzaGExX3RvX2hleChzaGExKSk7Ci0JfQotCWlmIChoYXNoY21wKHNoYTEsIHJlYWxfc2hhMSkpIHsKLQkJdW5saW5rKHRtcGZpbGUpOwotCQlyZXR1cm4gZXJyb3IoIkZpbGUgJXMgaGFzIGJhZCBoYXNoIiwgc2hhMV90b19oZXgoc2hhMSkpOwotCX0KLQotCXJldHVybiBtb3ZlX3RlbXBfdG9fZmlsZSh0bXBmaWxlLCBzaGExX2ZpbGVfbmFtZShzaGExKSk7CisJcmV0dXJuIHdyaXRlX2xvb3NlX29iamVjdChzaGExLCBoZHIsIGhkcmxlbiwgYnVmLCBsZW4sIG10aW1lKTsKIH0KIAogaW50IGhhc19wYWNrX2luZGV4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCkBAIC0yMzI0LDEyICsyMjYzLDExIEBACiAKIGludCBoYXNfc2hhMV9maWxlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCiB7Ci0Jc3RydWN0IHN0YXQgc3Q7CiAJc3RydWN0IHBhY2tfZW50cnkgZTsKIAogCWlmIChmaW5kX3BhY2tfZW50cnkoc2hhMSwgJmUsIE5VTEwpKQogCQlyZXR1cm4gMTsKLQlyZXR1cm4gZmluZF9zaGExX2ZpbGUoc2hhMSwgJnN0KSA/IDEgOiAwOworCXJldHVybiBoYXNfbG9vc2Vfb2JqZWN0KHNoYTEpOwogfQogCiBpbnQgaW5kZXhfcGlwZSh1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmQsIGNvbnN0IGNoYXIgKnR5cGUsIGludCB3cml0ZV9vYmplY3QpCkBAIC0yNDM3LDE2ICsyMzc1LDEwIEBACiAKIGludCByZWFkX3BhY2tfaGVhZGVyKGludCBmZCwgc3RydWN0IHBhY2tfaGVhZGVyICpoZWFkZXIpCiB7Ci0JY2hhciAqYyA9IChjaGFyKiloZWFkZXI7Ci0Jc3NpemVfdCByZW1haW5pbmcgPSBzaXplb2Yoc3RydWN0IHBhY2tfaGVhZGVyKTsKLQlkbyB7Ci0JCXNzaXplX3QgciA9IHhyZWFkKGZkLCBjLCByZW1haW5pbmcpOwotCQlpZiAociA8PSAwKQotCQkJLyogImVvZiBiZWZvcmUgcGFjayBoZWFkZXIgd2FzIGZ1bGx5IHJlYWQiICovCi0JCQlyZXR1cm4gUEhfRVJST1JfRU9GOwotCQlyZW1haW5pbmcgLT0gcjsKLQkJYyArPSByOwotCX0gd2hpbGUgKHJlbWFpbmluZyA+IDApOworCWlmIChyZWFkX2luX2Z1bGwoZmQsIGhlYWRlciwgc2l6ZW9mKCpoZWFkZXIpKSA8IHNpemVvZigqaGVhZGVyKSkKKwkJLyogImVvZiBiZWZvcmUgcGFjayBoZWFkZXIgd2FzIGZ1bGx5IHJlYWQiICovCisJCXJldHVybiBQSF9FUlJPUl9FT0Y7CisKIAlpZiAoaGVhZGVyLT5oZHJfc2lnbmF0dXJlICE9IGh0b25sKFBBQ0tfU0lHTkFUVVJFKSkKIAkJLyogInByb3RvY29sIGVycm9yIChwYWNrIHNpZ25hdHVyZSBtaXNtYXRjaCBkZXRlY3RlZCkiICovCiAJCXJldHVybiBQSF9FUlJPUl9QQUNLX1NJR05BVFVSRTsKZGlmZiAtLWdpdCBhL3N5bWxpbmtzLmMgYi9zeW1saW5rcy5jCmluZGV4IGJlOWFjZTYuLjVhNWU3ODEgMTAwNjQ0Ci0tLSBhL3N5bWxpbmtzLmMKKysrIGIvc3ltbGlua3MuYwpAQCAtMSw0OCArMSw2NCBAQAogI2luY2x1ZGUgImNhY2hlLmgiCiAKLWludCBoYXNfc3ltbGlua19sZWFkaW5nX3BhdGgoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqbGFzdF9zeW1saW5rKQoteworc3RydWN0IHBhdGhuYW1lIHsKKwlpbnQgbGVuOwogCWNoYXIgcGF0aFtQQVRIX01BWF07Ci0JY29uc3QgY2hhciAqc3AsICplcDsKLQljaGFyICpkcDsKK307CiAKLQlzcCA9IG5hbWU7Ci0JZHAgPSBwYXRoOworLyogUmV0dXJuIG1hdGNoaW5nIHBhdGhuYW1lIHByZWZpeCBsZW5ndGgsIG9yIHplcm8gaWYgbm90IG1hdGNoaW5nICovCitzdGF0aWMgaW5saW5lIGludCBtYXRjaF9wYXRobmFtZShpbnQgbGVuLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgcGF0aG5hbWUgKm1hdGNoKQoreworCWludCBtYXRjaF9sZW4gPSBtYXRjaC0+bGVuOworCXJldHVybiAobGVuID4gbWF0Y2hfbGVuICYmCisJCW5hbWVbbWF0Y2hfbGVuXSA9PSAnLycgJiYKKwkJIW1lbWNtcChuYW1lLCBtYXRjaC0+cGF0aCwgbWF0Y2hfbGVuKSkgPyBtYXRjaF9sZW4gOiAwOworfQogCi0JaWYgKGxhc3Rfc3ltbGluayAmJiAqbGFzdF9zeW1saW5rKSB7Ci0JCXNpemVfdCBsYXN0X2xlbiA9IHN0cmxlbihsYXN0X3N5bWxpbmspOwotCQlzaXplX3QgbGVuID0gc3RybGVuKG5hbWUpOwotCQlpZiAobGFzdF9sZW4gPCBsZW4gJiYKLQkJICAgICFzdHJuY21wKG5hbWUsIGxhc3Rfc3ltbGluaywgbGFzdF9sZW4pICYmCi0JCSAgICBuYW1lW2xhc3RfbGVuXSA9PSAnLycpCi0JCQlyZXR1cm4gMTsKLQkJKmxhc3Rfc3ltbGluayA9ICdcMCc7CitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhdGhuYW1lKGludCBsZW4sIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBwYXRobmFtZSAqbWF0Y2gpCit7CisJaWYgKGxlbiA8IFBBVEhfTUFYKSB7CisJCW1hdGNoLT5sZW4gPSBsZW47CisJCW1lbWNweShtYXRjaC0+cGF0aCwgbmFtZSwgbGVuKTsKKwkJbWF0Y2gtPnBhdGhbbGVuXSA9IDA7CiAJfQorfQogCi0Jd2hpbGUgKDEpIHsKLQkJc2l6ZV90IGxlbjsKLQkJc3RydWN0IHN0YXQgc3Q7CitpbnQgaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKGludCBsZW4sIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RhdGljIHN0cnVjdCBwYXRobmFtZSBsaW5rLCBub25saW5rOworCWNoYXIgcGF0aFtQQVRIX01BWF07CisJc3RydWN0IHN0YXQgc3Q7CisJY2hhciAqc3A7CisJaW50IGtub3duX2RpcjsKIAotCQllcCA9IHN0cmNocihzcCwgJy8nKTsKLQkJaWYgKCFlcCkKLQkJCWJyZWFrOwotCQlsZW4gPSBlcCAtIHNwOwotCQlpZiAoUEFUSF9NQVggPD0gZHAgKyBsZW4gLSBwYXRoICsgMikKLQkJCXJldHVybiAwOyAvKiBuZXcgbmFtZSBpcyBsb25nZXIgdGhhbiB0aGF0Pz8/ICovCi0JCW1lbWNweShkcCwgc3AsIGxlbik7Ci0JCWRwW2xlbl0gPSAwOworCS8qCisJICogU2VlIGlmIHRoZSBsYXN0IGtub3duIHN5bWxpbmsgY2FjaGUgbWF0Y2hlcy4KKwkgKi8KKwlpZiAobWF0Y2hfcGF0aG5hbWUobGVuLCBuYW1lLCAmbGluaykpCisJCXJldHVybiAxOworCisJLyoKKwkgKiBHZXQgcmlkIG9mIHRoZSBsYXN0IGtub3duIGRpcmVjdG9yeSBwYXJ0CisJICovCisJa25vd25fZGlyID0gbWF0Y2hfcGF0aG5hbWUobGVuLCBuYW1lLCAmbm9ubGluayk7CisKKwl3aGlsZSAoKHNwID0gc3RyY2hyKG5hbWUgKyBrbm93bl9kaXIgKyAxLCAnLycpKSAhPSBOVUxMKSB7CisJCWludCB0aGlzbGVuID0gc3AgLSBuYW1lIDsKKwkJbWVtY3B5KHBhdGgsIG5hbWUsIHRoaXNsZW4pOworCQlwYXRoW3RoaXNsZW5dID0gMDsKIAogCQlpZiAobHN0YXQocGF0aCwgJnN0KSkKIAkJCXJldHVybiAwOworCQlpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkgeworCQkJc2V0X3BhdGhuYW1lKHRoaXNsZW4sIHBhdGgsICZub25saW5rKTsKKwkJCWtub3duX2RpciA9IHRoaXNsZW47CisJCQljb250aW51ZTsKKwkJfQogCQlpZiAoU19JU0xOSyhzdC5zdF9tb2RlKSkgewotCQkJaWYgKGxhc3Rfc3ltbGluaykKLQkJCQlzdHJjcHkobGFzdF9zeW1saW5rLCBwYXRoKTsKKwkJCXNldF9wYXRobmFtZSh0aGlzbGVuLCBwYXRoLCAmbGluayk7CiAJCQlyZXR1cm4gMTsKIAkJfQotCi0JCWRwW2xlbisrXSA9ICcvJzsKLQkJZHAgPSBkcCArIGxlbjsKLQkJc3AgPSBlcCArIDE7CisJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3QvLmdpdGF0dHJpYnV0ZXMgYi90Ly5naXRhdHRyaWJ1dGVzCmluZGV4IDU2MmIxMmUuLmFiNmVkYmYgMTAwNjQ0Ci0tLSBhL3QvLmdpdGF0dHJpYnV0ZXMKKysrIGIvdC8uZ2l0YXR0cmlidXRlcwpAQCAtMSArMSwyIEBACi0qIC13aGl0ZXNwYWNlCit0WzAtOV1bMC05XVswLTldWzAtOV0tKi5zaCAtd2hpdGVzcGFjZQordFswLTldWzAtOV1bMC05XVswLTldLyogLXdoaXRlc3BhY2UKZGlmZiAtLWdpdCBhL3QvLmdpdGlnbm9yZSBiL3QvLmdpdGlnbm9yZQppbmRleCBmYWQ2N2MwLi4xMWZmZDkxIDEwMDY0NAotLS0gYS90Ly5naXRpZ25vcmUKKysrIGIvdC8uZ2l0aWdub3JlCkBAIC0xICsxIEBACi10cmFzaAorL3RyYXNoIGRpcmVjdG9yeQpkaWZmIC0tZ2l0IGEvdC9NYWtlZmlsZSBiL3QvTWFrZWZpbGUKaW5kZXggNzJkNzg4NC4uYzZhNjBhYiAxMDA2NDQKLS0tIGEvdC9NYWtlZmlsZQorKysgYi90L01ha2VmaWxlCkBAIC0yMCw3ICsyMCw3IEBACiAJQGVjaG8gIioqKiAkQCAqKioiOyBHSVRfQ09ORklHPS5naXQvY29uZmlnICckKFNIRUxMX1BBVEhfU1EpJyAkQCAkKEdJVF9URVNUX09QVFMpCiAKIGNsZWFuOgotCSQoUk0pIC1yIHRyYXNoCisJJChSTSkgLXIgJ3RyYXNoIGRpcmVjdG9yeScKIAogIyB3ZSBjYW4gdGVzdCBOT19PUFRJTUlaRV9DT01NSVRTIGluZGVwZW5kZW50bHkgb2YgTENfQUxMCiBmdWxsLXN2bi10ZXN0OgpkaWZmIC0tZ2l0IGEvdC9SRUFETUUgYi90L1JFQURNRQppbmRleCA3M2VkMTFiLi43MDg0MWE0IDEwMDY0NAotLS0gYS90L1JFQURNRQorKysgYi90L1JFQURNRQpAQCAtMTIzLDcgKzEyMyw3IEBACiAgICAob3IgLWgpLCBpdCBzaG93cyB0aGUgdGVzdF9kZXNjcmlwdGlvbiBhbmQgZXhpdHMuCiAKICAtIENyZWF0ZXMgYW4gZW1wdHkgdGVzdCBkaXJlY3Rvcnkgd2l0aCBhbiBlbXB0eSAuZ2l0L29iamVjdHMKLSAgIGRhdGFiYXNlIGFuZCBjaGRpcigyKSBpbnRvIGl0LiAgVGhpcyBkaXJlY3RvcnkgaXMgJ3QvdHJhc2gnCisgICBkYXRhYmFzZSBhbmQgY2hkaXIoMikgaW50byBpdC4gIFRoaXMgZGlyZWN0b3J5IGlzICd0L3RyYXNoIGRpcmVjdG9yeScKICAgIGlmIHlvdSBtdXN0IGtub3csIGJ1dCBJIGRvIG5vdCB0aGluayB5b3UgY2FyZS4KIAogIC0gRGVmaW5lcyBzdGFuZGFyZCB0ZXN0IGhlbHBlciBmdW5jdGlvbnMgZm9yIHlvdXIgc2NyaXB0cyB0bwpkaWZmIC0tZ2l0IGEvdC9kaWZmLWxpYi5zaCBiL3QvZGlmZi1saWIuc2gKaW5kZXggMjhiOTQxYy4uNGJkZGViNSAxMDA2NDQKLS0tIGEvdC9kaWZmLWxpYi5zaAorKysgYi90L2RpZmYtbGliLnNoCkBAIC0xMSw3ICsxMSw3IEBACiAKICAgICBzZWQgLWUgIiRzYW5pdGl6ZV9kaWZmX3JhdyIgPCIkMSIgPi50bXAtMQogICAgIHNlZCAtZSAiJHNhbml0aXplX2RpZmZfcmF3IiA8IiQyIiA+LnRtcC0yCi0gICAgZ2l0IGRpZmYgLnRtcC0xIC50bXAtMiAmJiBybSAtZiAudG1wLTEgLnRtcC0yCisgICAgdGVzdF9jbXAgLnRtcC0xIC50bXAtMiAmJiBybSAtZiAudG1wLTEgLnRtcC0yCiB9CiAKIHNhbml0aXplX2RpZmZfcmF3X3o9Jy9eOi9zLyAnIiRfeDQwIicgJyIkX3g0MCInIFwoW0EtWl1cKVswLTldKiQvIFggWCBcMSMvJwpAQCAtMjMsNyArMjMsNyBAQAogCiAgICAgcGVybCAtcGUgJ3kvXDAwMC9cMDEyLycgPCIkMSIgfCBzZWQgLWUgIiRzYW5pdGl6ZV9kaWZmX3Jhd196IiA+LnRtcC0xCiAgICAgcGVybCAtcGUgJ3kvXDAwMC9cMDEyLycgPCIkMiIgfCBzZWQgLWUgIiRzYW5pdGl6ZV9kaWZmX3Jhd196IiA+LnRtcC0yCi0gICAgZ2l0IGRpZmYgLnRtcC0xIC50bXAtMiAmJiBybSAtZiAudG1wLTEgLnRtcC0yCisgICAgdGVzdF9jbXAgLnRtcC0xIC50bXAtMiAmJiBybSAtZiAudG1wLTEgLnRtcC0yCiB9CiAKIGNvbXBhcmVfZGlmZl9wYXRjaCAoKSB7CkBAIC0zNyw1ICszNyw1IEBACiAJL15bZGlzXSppbWlsYXJpdHkgaW5kZXggWzAtOV0qJSQvZAogCS9eaW5kZXggWzAtOWEtZl0qXC5cLlswLTlhLWZdL2QKICAgICAnIDwiJDIiID4udG1wLTIKLSAgICBnaXQgZGlmZiAudG1wLTEgLnRtcC0yICYmIHJtIC1mIC50bXAtMSAudG1wLTIKKyAgICB0ZXN0X2NtcCAudG1wLTEgLnRtcC0yICYmIHJtIC1mIC50bXAtMSAudG1wLTIKIH0KZGlmZiAtLWdpdCBhL3QvbGliLWdpdC1zdm4uc2ggYi90L2xpYi1naXQtc3ZuLnNoCmluZGV4IDlkZWNkMmUuLjVkM2JkOWQgMTAwNjQ0Ci0tLSBhL3QvbGliLWdpdC1zdm4uc2gKKysrIGIvdC9saWItZ2l0LXN2bi5zaApAQCAtMjAsMTIgKzIwLDEzIEBACiBmaQogCiBzdm5yZXBvPSRQV0Qvc3ZucmVwbworZXhwb3J0IHN2bnJlcG8KIAogcGVybCAtdyAtZSAiCiB1c2UgU1ZOOjpDb3JlOwogdXNlIFNWTjo6UmVwb3M7CiBcJFNWTjo6Q29yZTo6VkVSU0lPTiBndCAnMS4xLjAnIG9yIGV4aXQoNDIpOwotc3lzdGVtKHF3L3N2bmFkbWluIGNyZWF0ZSAtLWZzLXR5cGUgZnNmcy8sICckc3ZucmVwbycpID09IDAgb3IgZXhpdCg0MSk7CitzeXN0ZW0ocXcvc3ZuYWRtaW4gY3JlYXRlIC0tZnMtdHlwZSBmc2ZzLywgXCRFTlZ7c3ZucmVwb30pID09IDAgb3IgZXhpdCg0MSk7CiAiID4mMyAyPiY0CiB4PSQ/CiBpZiB0ZXN0ICR4IC1uZSAwCkBAIC03MywxMSArNzQsMTYgQEAKIGRvbmUKIAogc3RhcnRfaHR0cGQgKCkgeworCXJlcG9fYmFzZV9wYXRoPSIkMSIKIAlpZiB0ZXN0IC16ICIkU1ZOX0hUVFBEX1BPUlQiCiAJdGhlbgogCQllY2hvID4mMiAnU1ZOX0hUVFBEX1BPUlQgaXMgbm90IGRlZmluZWQhJwogCQlyZXR1cm4KIAlmaQorCWlmIHRlc3QgLXogIiRyZXBvX2Jhc2VfcGF0aCIKKwl0aGVuCisJCXJlcG9fYmFzZV9wYXRoPXN2bgorCWZpCiAKIAlta2RpciAiJEdJVF9ESVIiL2xvZ3MKIApAQCAtOTAsMTMgKzk2LDEzIEBACiBMaXN0ZW4gMTI3LjAuMC4xOiRTVk5fSFRUUERfUE9SVAogTG9hZE1vZHVsZSBkYXZfbW9kdWxlICRTVk5fSFRUUERfTU9EVUxFX1BBVEgvbW9kX2Rhdi5zbwogTG9hZE1vZHVsZSBkYXZfc3ZuX21vZHVsZSAkU1ZOX0hUVFBEX01PRFVMRV9QQVRIL21vZF9kYXZfc3ZuLnNvCi08TG9jYXRpb24gL3N2bj4KKzxMb2NhdGlvbiAvJHJlcG9fYmFzZV9wYXRoPgogCURBViBzdm4KIAlTVk5QYXRoICRyYXdzdm5yZXBvCiA8L0xvY2F0aW9uPgogRU9GCiAJIiRTVk5fSFRUUERfUEFUSCIgLWYgIiRHSVRfRElSIi9odHRwZC5jb25mIC1rIHN0YXJ0Ci0Jc3ZucmVwbz1odHRwOi8vMTI3LjAuMC4xOiRTVk5fSFRUUERfUE9SVC9zdm4KKwlzdm5yZXBvPSJodHRwOi8vMTI3LjAuMC4xOiRTVk5fSFRUUERfUE9SVC8kcmVwb19iYXNlX3BhdGgiCiB9CiAKIHN0b3BfaHR0cGQgKCkgewpkaWZmIC0tZ2l0IGEvdC9saWItaHR0cGQuc2ggYi90L2xpYi1odHRwZC5zaAppbmRleCA3ZjIwNmM1Li5hNWM0NDM2IDEwMDY0NAotLS0gYS90L2xpYi1odHRwZC5zaAorKysgYi90L2xpYi1odHRwZC5zaApAQCAtNjEsNyArNjEsOCBAQAogCQkJLW5ldyAteDUwOSAtbm9kZXMgXAogCQkJLW91dCAkSFRUUERfUk9PVF9QQVRIL2h0dHBkLnBlbSBcCiAJCQkta2V5b3V0ICRIVFRQRF9ST09UX1BBVEgvaHR0cGQucGVtCi0JCWV4cG9ydCBHSVRfU1NMX05PX1ZFUklGWT10CisJCUdJVF9TU0xfTk9fVkVSSUZZPXQKKwkJZXhwb3J0IEdJVF9TU0xfTk9fVkVSSUZZCiAJCUhUVFBEX1BBUkE9IiRIVFRQRF9QQVJBIC1EU1NMIgogCWVsc2UKIAkJSFRUUERfVVJMPWh0dHA6Ly8xMjcuMC4wLjE6JExJQl9IVFRQRF9QT1JUCmRpZmYgLS1naXQgYS90L3QwMDAwLWJhc2ljLnNoIGIvdC90MDAwMC1iYXNpYy5zaAppbmRleCAyN2I1NGNiLi42OTBmODBhIDEwMDc1NQotLS0gYS90L3QwMDAwLWJhc2ljLnNoCisrKyBiL3QvdDAwMDAtYmFzaWMuc2gKQEAgLTMwNSwxMCArMzA1LDEwIEBACiAJZmlsZT0iJGRpciIvaW5kZXggJiYKIAl0ZXN0ICIkZmlsZSIgPSAiJCh0ZXN0LWFic29sdXRlLXBhdGggJGRpcjIvaW5kZXgpIiAmJgogCWJhc2VuYW1lPWJsdWIgJiYKLQl0ZXN0ICIkZGlyLyRiYXNlbmFtZSIgPSAkKGNkIC5naXQgJiYgdGVzdC1hYnNvbHV0ZS1wYXRoICRiYXNlbmFtZSkgJiYKKwl0ZXN0ICIkZGlyLyRiYXNlbmFtZSIgPSAiJChjZCAuZ2l0ICYmIHRlc3QtYWJzb2x1dGUtcGF0aCAiJGJhc2VuYW1lIikiICYmCiAJbG4gLXMgLi4vZmlyc3QvZmlsZSAuZ2l0L3N5bWwgJiYKIAlzeW09IiQoY2QgZmlyc3Q7IHB3ZCAtUCkiL2ZpbGUgJiYKLQl0ZXN0ICIkc3ltIiA9ICIkKHRlc3QtYWJzb2x1dGUtcGF0aCAkZGlyMi9zeW1sKSIKKwl0ZXN0ICIkc3ltIiA9ICIkKHRlc3QtYWJzb2x1dGUtcGF0aCAiJGRpcjIvc3ltbCIpIgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJ5IGxvbmcgbmFtZSBpbiB0aGUgaW5kZXggaGFuZGxlZCBzYW5lbHknICcKZGlmZiAtLWdpdCBhL3QvdDAwMDEtaW5pdC5zaCBiL3QvdDAwMDEtaW5pdC5zaAppbmRleCBiMDI4OWUzLi5jMGI3ODFhIDEwMDc1NQotLS0gYS90L3QwMDAxLWluaXQuc2gKKysrIGIvdC90MDAwMS1pbml0LnNoCkBAIC03OSw2ICs3OSwxNyBAQAogCWNoZWNrX2NvbmZpZyBnaXQtZGlyLWJhcmUuZ2l0IHRydWUgdW5zZXQKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCAtLWJhcmUnICcKKworCSgKKwkJdW5zZXQgR0lUX0RJUiBHSVRfV09SS19UUkVFIEdJVF9DT05GSUcKKwkJbWtkaXIgZ2l0LWluaXQtYmFyZS5naXQgJiYKKwkJY2QgZ2l0LWluaXQtYmFyZS5naXQgJiYKKwkJZ2l0IGluaXQgLS1iYXJlCisJKSAmJgorCWNoZWNrX2NvbmZpZyBnaXQtaW5pdC1iYXJlLmdpdCB0cnVlIHVuc2V0CisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9ESVIgbm9uLWJhcmUnICcKIAogCSgKQEAgLTEzMCw0ICsxNDEsMzAgQEAKIAl0ZXN0X2NtcCBhZ2Fpbi9lbXB0eSBhZ2Fpbi9lcnIyCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgd2l0aCAtLXRlbXBsYXRlJyAnCisJbWtkaXIgdGVtcGxhdGUtc291cmNlICYmCisJZWNobyBjb250ZW50ID50ZW1wbGF0ZS1zb3VyY2UvZmlsZSAmJgorCSgKKwkJbWtkaXIgdGVtcGxhdGUtY3VzdG9tICYmCisJCWNkIHRlbXBsYXRlLWN1c3RvbSAmJgorCQlnaXQgaW5pdCAtLXRlbXBsYXRlPS4uL3RlbXBsYXRlLXNvdXJjZQorCSkgJiYKKwl0ZXN0X2NtcCB0ZW1wbGF0ZS1zb3VyY2UvZmlsZSB0ZW1wbGF0ZS1jdXN0b20vLmdpdC9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgd2l0aCAtLXRlbXBsYXRlIChibGFuayknICcKKwkoCisJCW1rZGlyIHRlbXBsYXRlLXBsYWluICYmCisJCWNkIHRlbXBsYXRlLXBsYWluICYmCisJCWdpdCBpbml0CisJKSAmJgorCXRlc3QgLWYgdGVtcGxhdGUtcGxhaW4vLmdpdC9pbmZvL2V4Y2x1ZGUgJiYKKwkoCisJCW1rZGlyIHRlbXBsYXRlLWJsYW5rICYmCisJCWNkIHRlbXBsYXRlLWJsYW5rICYmCisJCWdpdCBpbml0IC0tdGVtcGxhdGU9CisJKSAmJgorCSEgdGVzdCAtZiB0ZW1wbGF0ZS1ibGFuay8uZ2l0L2luZm8vZXhjbHVkZQorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwMDItZ2l0ZmlsZS5zaCBiL3QvdDAwMDItZ2l0ZmlsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNWRiYzcyCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDAwMi1naXRmaWxlLnNoCkBAIC0wLDAgKzEsMTAzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nLmdpdCBmaWxlCisKK1ZlcmlmeSB0aGF0IHBsdW1iaW5nIGNvbW1hbmRzIHdvcmsgd2hlbiAuZ2l0IGlzIGEgZmlsZQorJworLiAuL3Rlc3QtbGliLnNoCisKK29ianBhdGgoKSB7CisgICAgZWNobyAiJDEiIHwgc2VkIC1lICdzfFwoLi5cKXxcMS98JworfQorCitvYmpjaygpIHsKKwlwPSQob2JqcGF0aCAiJDEiKQorCWlmIHRlc3QgISAtZiAiJFJFQUwvb2JqZWN0cy8kcCIKKwl0aGVuCisJCWVjaG8gIk9iamVjdCBub3QgZm91bmQ6ICRSRUFML29iamVjdHMvJHAiCisJCWZhbHNlCisJZmkKK30KKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsIHNldHVwJyAnCisJUkVBTD0iJChwd2QpLy5yZWFsIiAmJgorCW12IC5naXQgIiRSRUFMIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYWQgc2V0dXA6IGludmFsaWQgLmdpdCBmaWxlIGZvcm1hdCcgJworCWVjaG8gImdpdGRpciAkUkVBTCIgPi5naXQgJiYKKwlpZiBnaXQgcmV2LXBhcnNlIDI+LmVycgorCXRoZW4KKwkJZWNobyAiZ2l0IHJldi1wYXJzZSBhY2NlcHRlZCBhbiBpbnZhbGlkIC5naXQgZmlsZSIKKwkJZmFsc2UKKwlmaSAmJgorCWlmICEgZ3JlcCAtcWUgIkludmFsaWQgZ2l0ZmlsZSBmb3JtYXQiIC5lcnIKKwl0aGVuCisJCWVjaG8gImdpdCByZXYtcGFyc2UgcmV0dXJuZWQgd3JvbmcgZXJyb3IiCisJCWZhbHNlCisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFkIHNldHVwOiBpbnZhbGlkIC5naXQgZmlsZSBwYXRoJyAnCisJZWNobyAiZ2l0ZGlyOiAkUkVBTC5ub3QiID4uZ2l0ICYmCisJaWYgZ2l0IHJldi1wYXJzZSAyPi5lcnIKKwl0aGVuCisJCWVjaG8gImdpdCByZXYtcGFyc2UgYWNjZXB0ZWQgYW4gaW52YWxpZCAuZ2l0IGZpbGUgcGF0aCIKKwkJZmFsc2UKKwlmaSAmJgorCWlmICEgZ3JlcCAtcWUgIk5vdCBhIGdpdCByZXBvc2l0b3J5IiAuZXJyCisJdGhlbgorCQllY2hvICJnaXQgcmV2LXBhcnNlIHJldHVybmVkIHdyb25nIGVycm9yIgorCQlmYWxzZQorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbmFsIHNldHVwICsgY2hlY2sgcmV2LXBhcnNlIC0tZ2l0LWRpcicgJworCWVjaG8gImdpdGRpcjogJFJFQUwiID4uZ2l0ICYmCisJdGVzdCAiJFJFQUwiID0gIiQoZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBoYXNoLW9iamVjdCcgJworCWVjaG8gImZvbyIgPmJhciAmJgorCVNIQT0kKGNhdCBiYXIgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwlvYmpjayAkU0hBCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGNhdC1maWxlJyAnCisJZ2l0IGNhdC1maWxlIGJsb2IgJFNIQSA+YWN0dWFsICYmCisJZGlmZiAtdSBiYXIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHVwZGF0ZS1pbmRleCcgJworCWlmIHRlc3QgLWYgIiRSRUFML2luZGV4IgorCXRoZW4KKwkJZWNobyAiSG1tLCAkUkVBTC9pbmRleCBleGlzdHM/IgorCQlmYWxzZQorCWZpICYmCisJcm0gLWYgIiRSRUFML29iamVjdHMvJChvYmpwYXRoICRTSEEpIiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYmFyICYmCisJaWYgISB0ZXN0IC1mICIkUkVBTC9pbmRleCIKKwl0aGVuCisJCWVjaG8gIiRSRUFML2luZGV4IG5vdCBmb3VuZCIKKwkJZmFsc2UKKwlmaSAmJgorCW9iamNrICRTSEEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgd3JpdGUtdHJlZScgJworCVNIQT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCW9iamNrICRTSEEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgY29tbWl0LXRyZWUnICcKKwlTSEE9JChlY2hvICJjb21taXQgYmFyIiB8IGdpdCBjb21taXQtdHJlZSAkU0hBKSAmJgorCW9iamNrICRTSEEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgcmV2LWxpc3QnICcKKwllY2hvICRTSEEgPiIkUkVBTC9IRUFEIiAmJgorCXRlc3QgIiRTSEEiID0gIiQoZ2l0IHJldi1saXN0IEhFQUQpIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwMDMtYXR0cmlidXRlcy5zaCBiL3QvdDAwMDMtYXR0cmlidXRlcy5zaAppbmRleCBjNTZkMmZiLi4zZDhlMDZhIDEwMDc1NQotLS0gYS90L3QwMDAzLWF0dHJpYnV0ZXMuc2gKKysrIGIvdC90MDAwMy1hdHRyaWJ1dGVzLnNoCkBAIC01NCw0ICs1NCwzOSBAQAogCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGJhcmUnICcKKworCWdpdCBjbG9uZSAtLWJhcmUgLiBiYXJlLmdpdCAmJgorCWNkIGJhcmUuZ2l0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFyZSByZXBvc2l0b3J5OiBjaGVjayB0aGF0IC5naXRhdHRyaWJ1dGUgaXMgaWdub3JlZCcgJworCisJKAorCQllY2hvICJmCXRlc3Q9ZiIKKwkJZWNobyAiYS9pIHRlc3Q9YS9pIgorCSkgPi5naXRhdHRyaWJ1dGVzICYmCisJYXR0cl9jaGVjayBmIHVuc3BlY2lmaWVkICYmCisJYXR0cl9jaGVjayBhL2YgdW5zcGVjaWZpZWQgJiYKKwlhdHRyX2NoZWNrIGEvYy9mIHVuc3BlY2lmaWVkICYmCisJYXR0cl9jaGVjayBhL2kgdW5zcGVjaWZpZWQgJiYKKwlhdHRyX2NoZWNrIHN1YmRpci9hL2kgdW5zcGVjaWZpZWQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXJlIHJlcG9zaXRvcnk6IHRlc3QgaW5mby9hdHRyaWJ1dGVzJyAnCisKKwkoCisJCWVjaG8gImYJdGVzdD1mIgorCQllY2hvICJhL2kgdGVzdD1hL2kiCisJKSA+aW5mby9hdHRyaWJ1dGVzICYmCisJYXR0cl9jaGVjayBmIGYgJiYKKwlhdHRyX2NoZWNrIGEvZiBmICYmCisJYXR0cl9jaGVjayBhL2MvZiBmICYmCisJYXR0cl9jaGVjayBhL2kgYS9pICYmCisJYXR0cl9jaGVjayBzdWJkaXIvYS9pIHVuc3BlY2lmaWVkCisKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDA0LXVud3JpdGFibGUuc2ggYi90L3QwMDA0LXVud3JpdGFibGUuc2gKaW5kZXggOTI1NWM2My4uNjNlMTIxNyAxMDA3NTUKLS0tIGEvdC90MDAwNC11bndyaXRhYmxlLnNoCisrKyBiL3QvdDAwMDQtdW53cml0YWJsZS5zaApAQCAtOCw2ICs4LDcgQEAKIAogCT5maWxlICYmCiAJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCiAJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCiAJZWNobyA+ZmlsZSAmJgogCWdpdCBhZGQgZmlsZQpAQCAtMTcsMTEgKzE4LDExIEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd3cml0ZS10cmVlIHNob3VsZCBub3RpY2UgdW53cml0YWJsZSByZXBvc2l0b3J5JyAnCiAKIAkoCi0JCWNobW9kIGEtdyAuZ2l0L29iamVjdHMKKwkJY2htb2QgYS13IC5naXQvb2JqZWN0cyAuZ2l0L29iamVjdHMvPz8gJiYKIAkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdyaXRlLXRyZWUKIAkpCiAJc3RhdHVzPSQ/Ci0JY2htb2QgNzc1IC5naXQvb2JqZWN0cworCWNobW9kIDc3NSAuZ2l0L29iamVjdHMgLmdpdC9vYmplY3RzLz8/CiAJKGV4aXQgJHN0YXR1cykKIAogJwpAQCAtMjksMTEgKzMwLDExIEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgc2hvdWxkIG5vdGljZSB1bndyaXRhYmxlIHJlcG9zaXRvcnknICcKIAogCSgKLQkJY2htb2QgYS13IC5naXQvb2JqZWN0cworCQljaG1vZCBhLXcgLmdpdC9vYmplY3RzIC5naXQvb2JqZWN0cy8/PyAmJgogCQl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1tIHNlY29uZAogCSkKIAlzdGF0dXM9JD8KLQljaG1vZCA3NzUgLmdpdC9vYmplY3RzCisJY2htb2QgNzc1IC5naXQvb2JqZWN0cyAuZ2l0L29iamVjdHMvPz8KIAkoZXhpdCAkc3RhdHVzKQogCiAnCkBAIC00MSwxMiArNDIsMTIgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1pbmRleCBzaG91bGQgbm90aWNlIHVud3JpdGFibGUgcmVwb3NpdG9yeScgJwogCiAJKAotCQllY2hvIGEgPmZpbGUgJiYKLQkJY2htb2QgYS13IC5naXQvb2JqZWN0cworCQllY2hvIDZPID5maWxlICYmCisJCWNobW9kIGEtdyAuZ2l0L29iamVjdHMgLmdpdC9vYmplY3RzLz8/ICYmCiAJCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggZmlsZQogCSkKIAlzdGF0dXM9JD8KLQljaG1vZCA3NzUgLmdpdC9vYmplY3RzCisJY2htb2QgNzc1IC5naXQvb2JqZWN0cyAuZ2l0L29iamVjdHMvPz8KIAkoZXhpdCAkc3RhdHVzKQogCiAnCkBAIC01NSwxMSArNTYsMTEgQEAKIAogCSgKIAkJZWNobyBiID5maWxlICYmCi0JCWNobW9kIGEtdyAuZ2l0L29iamVjdHMKKwkJY2htb2QgYS13IC5naXQvb2JqZWN0cyAuZ2l0L29iamVjdHMvPz8gJiYKIAkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCBmaWxlCiAJKQogCXN0YXR1cz0kPwotCWNobW9kIDc3NSAuZ2l0L29iamVjdHMKKwljaG1vZCA3NzUgLmdpdC9vYmplY3RzIC5naXQvb2JqZWN0cy8/PwogCShleGl0ICRzdGF0dXMpCiAKICcKZGlmZiAtLWdpdCBhL3QvdDAwMzAtc3RyaXBzcGFjZS5zaCBiL3QvdDAwMzAtc3RyaXBzcGFjZS5zaAppbmRleCAzZWNkZDY2Li5jY2IwYTNjIDEwMDc1NQotLS0gYS90L3QwMDMwLXN0cmlwc3BhY2Uuc2gKKysrIGIvdC90MDAzMC1zdHJpcHNwYWNlLnNoCkBAIC0xNiw5NiArMTYsOTYgQEAKICAgICAnbG9uZyBsaW5lcyB3aXRob3V0IHNwYWNlcyBzaG91bGQgYmUgdW5jaGFuZ2VkJyAnCiAgICAgZWNobyAiJHR0dCIgPmV4cGVjdCAmJgogICAgIGdpdCBzdHJpcHNwYWNlIDxleHBlY3QgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBlY2hvICIkdHR0JHR0dCIgPmV4cGVjdCAmJgogICAgIGdpdCBzdHJpcHNwYWNlIDxleHBlY3QgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBlY2hvICIkdHR0JHR0dCR0dHQiID5leHBlY3QgJiYKICAgICBnaXQgc3RyaXBzcGFjZSA8ZXhwZWN0ID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgZWNobyAiJHR0dCR0dHQkdHR0JHR0dCIgPmV4cGVjdCAmJgogICAgIGdpdCBzdHJpcHNwYWNlIDxleHBlY3QgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdsaW5lcyB3aXRoIHNwYWNlcyBhdCB0aGUgYmVnaW5uaW5nIHNob3VsZCBiZSB1bmNoYW5nZWQnICcKICAgICBlY2hvICIkc3NzJHR0dCIgPmV4cGVjdCAmJgogICAgIGdpdCBzdHJpcHNwYWNlIDxleHBlY3QgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBlY2hvICIkc3NzJHNzcyR0dHQiID5leHBlY3QgJiYKICAgICBnaXQgc3RyaXBzcGFjZSA8ZXhwZWN0ID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgZWNobyAiJHNzcyRzc3Mkc3NzJHR0dCIgPmV4cGVjdCAmJgogICAgIGdpdCBzdHJpcHNwYWNlIDxleHBlY3QgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdsaW5lcyB3aXRoIGludGVybWVkaWF0ZSBzcGFjZXMgc2hvdWxkIGJlIHVuY2hhbmdlZCcgJwogICAgIGVjaG8gIiR0dHQkc3NzJHR0dCIgPmV4cGVjdCAmJgogICAgIGdpdCBzdHJpcHNwYWNlIDxleHBlY3QgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBlY2hvICIkdHR0JHNzcyRzc3MkdHR0IiA+ZXhwZWN0ICYmCiAgICAgZ2l0IHN0cmlwc3BhY2UgPGV4cGVjdCA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2NvbnNlY3V0aXZlIGJsYW5rIGxpbmVzIHNob3VsZCBiZSB1bmlmaWVkJyAnCiAgICAgcHJpbnRmICIkdHR0XG5cbiR0dHRcbiIgPiBleHBlY3QgJiYKICAgICBwcmludGYgIiR0dHRcblxuXG5cblxuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgcHJpbnRmICIkdHR0JHR0dFxuXG4kdHR0XG4iID4gZXhwZWN0ICYmCiAgICAgcHJpbnRmICIkdHR0JHR0dFxuXG5cblxuXG4kdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBwcmludGYgIiR0dHQkdHR0JHR0dFxuXG4kdHR0XG4iID4gZXhwZWN0ICYmCiAgICAgcHJpbnRmICIkdHR0JHR0dCR0dHRcblxuXG5cblxuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgcHJpbnRmICIkdHR0XG5cbiR0dHRcbiIgPiBleHBlY3QgJiYKICAgICBwcmludGYgIiR0dHRcblxuXG5cblxuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgcHJpbnRmICIkdHR0XG5cbiR0dHQkdHR0XG4iID4gZXhwZWN0ICYmCiAgICAgcHJpbnRmICIkdHR0XG5cblxuXG5cbiR0dHQkdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBwcmludGYgIiR0dHRcblxuJHR0dCR0dHQkdHR0XG4iID4gZXhwZWN0ICYmCiAgICAgcHJpbnRmICIkdHR0XG5cblxuXG5cbiR0dHQkdHR0JHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgcHJpbnRmICIkdHR0XG5cbiR0dHRcbiIgPiBleHBlY3QgJiYKICAgICBwcmludGYgIiR0dHRcblx0XG4gXG5cbiAgXHRcdFxuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgcHJpbnRmICIkdHR0JHR0dFxuXG4kdHR0XG4iID4gZXhwZWN0ICYmCiAgICAgcHJpbnRmICIkdHR0JHR0dFxuXHRcbiBcblxuICBcdFx0XG4kdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBwcmludGYgIiR0dHQkdHR0JHR0dFxuXG4kdHR0XG4iID4gZXhwZWN0ICYmCiAgICAgcHJpbnRmICIkdHR0JHR0dCR0dHRcblx0XG4gXG5cbiAgXHRcdFxuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgcHJpbnRmICIkdHR0XG5cbiR0dHRcbiIgPiBleHBlY3QgJiYKICAgICBwcmludGYgIiR0dHRcblx0XG4gXG5cbiAgXHRcdFxuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgcHJpbnRmICIkdHR0XG5cbiR0dHQkdHR0XG4iID4gZXhwZWN0ICYmCiAgICAgcHJpbnRmICIkdHR0XG5cdFxuIFxuXG4gIFx0XHRcbiR0dHQkdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBwcmludGYgIiR0dHRcblxuJHR0dCR0dHQkdHR0XG4iID4gZXhwZWN0ICYmCiAgICAgcHJpbnRmICIkdHR0XG5cdFxuIFxuXG4gIFx0XHRcbiR0dHQkdHR0JHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKQEAgLTExMywxMTQgKzExMywxMTQgQEAKICAgICA+IGV4cGVjdCAmJgogCiAgICAgcHJpbnRmICJcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIHByaW50ZiAiXG5cblxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgcHJpbnRmICIkc3NzXG4kc3NzXG4kc3NzXG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBwcmludGYgIiRzc3Mkc3NzXG4kc3NzXG5cbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIHByaW50ZiAiXG4kc3NzXG4kc3NzJHNzc1xuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgcHJpbnRmICIkc3NzJHNzcyRzc3Mkc3NzXG5cblxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgcHJpbnRmICJcbiRzc3Mkc3NzJHNzcyRzc3NcblxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgcHJpbnRmICJcblxuJHNzcyRzc3Mkc3NzJHNzc1xuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnY29uc2VjdXRpdmUgYmxhbmsgbGluZXMgYXQgdGhlIGJlZ2lubmluZyBzaG91bGQgYmUgcmVtb3ZlZCcgJwogICAgIHByaW50ZiAiJHR0dFxuIiA+IGV4cGVjdCAmJgogICAgIHByaW50ZiAiXG4kdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBwcmludGYgIiR0dHRcbiIgPiBleHBlY3QgJiYKICAgICBwcmludGYgIlxuXG5cbiR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIHByaW50ZiAiJHR0dCR0dHRcbiIgPiBleHBlY3QgJiYKICAgICBwcmludGYgIlxuXG5cbiR0dHQkdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBwcmludGYgIiR0dHQkdHR0JHR0dFxuIiA+IGV4cGVjdCAmJgogICAgIHByaW50ZiAiXG5cblxuJHR0dCR0dHQkdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBwcmludGYgIiR0dHQkdHR0JHR0dCR0dHRcbiIgPiBleHBlY3QgJiYKICAgICBwcmludGYgIlxuXG5cbiR0dHQkdHR0JHR0dCR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIHByaW50ZiAiJHR0dFxuIiA+IGV4cGVjdCAmJgogCiAgICAgcHJpbnRmICIkc3NzXG4kc3NzXG4kc3NzXG4kdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBwcmludGYgIlxuJHNzc1xuJHNzcyRzc3NcbiR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIHByaW50ZiAiJHNzcyRzc3NcbiRzc3NcblxuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgcHJpbnRmICIkc3NzJHNzcyRzc3NcblxuXG4kdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBwcmludGYgIlxuJHNzcyRzc3Mkc3NzXG5cbiR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIHByaW50ZiAiXG5cbiRzc3Mkc3NzJHNzc1xuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnY29uc2VjdXRpdmUgYmxhbmsgbGluZXMgYXQgdGhlIGVuZCBzaG91bGQgYmUgcmVtb3ZlZCcgJwogICAgIHByaW50ZiAiJHR0dFxuIiA+IGV4cGVjdCAmJgogICAgIHByaW50ZiAiJHR0dFxuXG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBwcmludGYgIiR0dHRcbiIgPiBleHBlY3QgJiYKICAgICBwcmludGYgIiR0dHRcblxuXG5cbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIHByaW50ZiAiJHR0dCR0dHRcbiIgPiBleHBlY3QgJiYKICAgICBwcmludGYgIiR0dHQkdHR0XG5cblxuXG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBwcmludGYgIiR0dHQkdHR0JHR0dFxuIiA+IGV4cGVjdCAmJgogICAgIHByaW50ZiAiJHR0dCR0dHQkdHR0XG5cblxuXG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBwcmludGYgIiR0dHQkdHR0JHR0dCR0dHRcbiIgPiBleHBlY3QgJiYKICAgICBwcmludGYgIiR0dHQkdHR0JHR0dCR0dHRcblxuXG5cbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIHByaW50ZiAiJHR0dFxuIiA+IGV4cGVjdCAmJgogCiAgICAgcHJpbnRmICIkdHR0XG4kc3NzXG4kc3NzXG4kc3NzXG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBwcmludGYgIiR0dHRcblxuJHNzc1xuJHNzcyRzc3NcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIHByaW50ZiAiJHR0dFxuJHNzcyRzc3NcbiRzc3NcblxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgcHJpbnRmICIkdHR0XG4kc3NzJHNzcyRzc3NcblxuXG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBwcmludGYgIiR0dHRcblxuJHNzcyRzc3Mkc3NzXG5cbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIHByaW50ZiAiJHR0dFxuXG5cbiRzc3Mkc3NzJHNzc1xuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKQEAgLTI1NywyNyArMjU3LDI3IEBACiAgICAgJ3RleHQgcGx1cyBzcGFjZXMgd2l0aG91dCBuZXdsaW5lIHNob3VsZCBzaG93IHRoZSBjb3JyZWN0IGxpbmVzJyAnCiAgICAgcHJpbnRmICIkdHR0XG4iID5leHBlY3QgJiYKICAgICBwcmludGYgIiR0dHQkc3NzIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgcHJpbnRmICIkdHR0XG4iID5leHBlY3QgJiYKICAgICBwcmludGYgIiR0dHQkc3NzJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIHByaW50ZiAiJHR0dFxuIiA+ZXhwZWN0ICYmCiAgICAgcHJpbnRmICIkdHR0JHNzcyRzc3Mkc3NzIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgcHJpbnRmICIkdHR0JHR0dFxuIiA+ZXhwZWN0ICYmCiAgICAgcHJpbnRmICIkdHR0JHR0dCRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBwcmludGYgIiR0dHQkdHR0XG4iID5leHBlY3QgJiYKICAgICBwcmludGYgIiR0dHQkdHR0JHNzcyRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBwcmludGYgIiR0dHQkdHR0JHR0dFxuIiA+ZXhwZWN0ICYmCiAgICAgcHJpbnRmICIkdHR0JHR0dCR0dHQkc3NzIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKQEAgLTI5NCwyNyArMjk0LDI3IEBACiAgICAgJ3RleHQgcGx1cyBzcGFjZXMgYXQgZW5kIHNob3VsZCBiZSBjbGVhbmVkIGFuZCBuZXdsaW5lIG11c3QgcmVtYWluJyAnCiAgICAgZWNobyAiJHR0dCIgPmV4cGVjdCAmJgogICAgIGVjaG8gIiR0dHQkc3NzIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgZWNobyAiJHR0dCIgPmV4cGVjdCAmJgogICAgIGVjaG8gIiR0dHQkc3NzJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIGVjaG8gIiR0dHQiID5leHBlY3QgJiYKICAgICBlY2hvICIkdHR0JHNzcyRzc3Mkc3NzIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgZWNobyAiJHR0dCR0dHQiID5leHBlY3QgJiYKICAgICBlY2hvICIkdHR0JHR0dCRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBlY2hvICIkdHR0JHR0dCIgPmV4cGVjdCAmJgogICAgIGVjaG8gIiR0dHQkdHR0JHNzcyRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBlY2hvICIkdHR0JHR0dCR0dHQiID5leHBlY3QgJiYKICAgICBlY2hvICIkdHR0JHR0dCR0dHQkc3NzIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiAjIHNwYWNlcyBvbmx5OgpAQCAtMzI0LDE5ICszMjQsMTkgQEAKICAgICBwcmludGYgIiIgPmV4cGVjdCAmJgogCiAgICAgZWNobyB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgZWNobyAiJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIGVjaG8gIiRzc3Mkc3NzIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgZWNobyAiJHNzcyRzc3Mkc3NzIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAgICAgZWNobyAiJHNzcyRzc3Mkc3NzJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCkBAIC0zNTMsNDMgKzM1Myw0MyBAQAogICAgIHByaW50ZiAiIiA+ZXhwZWN0ICYmCiAKICAgICBwcmludGYgIiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIHByaW50ZiAiJHNzcyRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBwcmludGYgIiRzc3Mkc3NzJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIHByaW50ZiAiJHNzcyRzc3Mkc3NzJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2NvbnNlY3V0aXZlIHRleHQgbGluZXMgc2hvdWxkIGJlIHVuY2hhbmdlZCcgJwogICAgIHByaW50ZiAiJHR0dCR0dHRcbiR0dHRcbiIgPmV4cGVjdCAmJgogICAgIHByaW50ZiAiJHR0dCR0dHRcbiR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIHByaW50ZiAiJHR0dFxuJHR0dCR0dHRcbiR0dHRcbiIgPmV4cGVjdCAmJgogICAgIHByaW50ZiAiJHR0dFxuJHR0dCR0dHRcbiR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIHByaW50ZiAiJHR0dFxuJHR0dFxuJHR0dFxuJHR0dCR0dHRcbiIgPmV4cGVjdCAmJgogICAgIHByaW50ZiAiJHR0dFxuJHR0dFxuJHR0dFxuJHR0dCR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogICAgIHByaW50ZiAiJHR0dFxuJHR0dFxuXG4kdHR0JHR0dFxuJHR0dFxuIiA+ZXhwZWN0ICYmCiAgICAgcHJpbnRmICIkdHR0XG4kdHR0XG5cbiR0dHQkdHR0XG4kdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBwcmludGYgIiR0dHQkdHR0XG5cbiR0dHRcbiR0dHQkdHR0XG4iID5leHBlY3QgJiYKICAgICBwcmludGYgIiR0dHQkdHR0XG5cbiR0dHRcbiR0dHQkdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKICAgICBwcmludGYgIiR0dHRcbiR0dHQkdHR0XG5cbiR0dHRcbiIgPmV4cGVjdCAmJgogICAgIHByaW50ZiAiJHR0dFxuJHR0dCR0dHRcblxuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKLSAgICBnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdHJpcCBjb21tZW50cywgdG9vJyAnCmRpZmYgLS1naXQgYS90L3QwMDQwLXBhcnNlLW9wdGlvbnMuc2ggYi90L3QwMDQwLXBhcnNlLW9wdGlvbnMuc2gKaW5kZXggYzIzZjBhYy4uNjMwOWFlZCAxMDA3NTUKLS0tIGEvdC90MDA0MC1wYXJzZS1vcHRpb25zLnNoCisrKyBiL3QvdDAwNDAtcGFyc2Utb3B0aW9ucy5zaApAQCAtMTEsNTUgKzExLDgxIEBACiB1c2FnZTogdGVzdC1wYXJzZS1vcHRpb25zIDxvcHRpb25zPgogCiAgICAgLWIsIC0tYm9vbGVhbiAgICAgICAgIGdldCBhIGJvb2xlYW4KKyAgICAtNCwgLS1vcjQgICAgICAgICAgICAgYml0d2lzZS1vciBib29sZWFuIHdpdGggLi4uMDEwMAorCiAgICAgLWksIC0taW50ZWdlciA8bj4gICAgIGdldCBhIGludGVnZXIKICAgICAtaiA8bj4gICAgICAgICAgICAgICAgZ2V0IGEgaW50ZWdlciwgdG9vCisgICAgLS1zZXQyMyAgICAgICAgICAgICAgIHNldCBpbnRlZ2VyIHRvIDIzCisgICAgLXQgPHRpbWU+ICAgICAgICAgICAgIGdldCB0aW1lc3RhbXAgb2YgPHRpbWU+CisgICAgLUwsIC0tbGVuZ3RoIDxzdHI+ICAgIGdldCBsZW5ndGggb2YgPHN0cj4KIAotc3RyaW5nIG9wdGlvbnMKK1N0cmluZyBvcHRpb25zCiAgICAgLXMsIC0tc3RyaW5nIDxzdHJpbmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldCBhIHN0cmluZwogICAgIC0tc3RyaW5nMiA8c3RyPiAgICAgICBnZXQgYW5vdGhlciBzdHJpbmcKICAgICAtLXN0IDxzdD4gICAgICAgICAgICAgZ2V0IGFub3RoZXIgc3RyaW5nIChwZXJ2ZXJ0IG9yZGVyaW5nKQogICAgIC1vIDxzdHI+ICAgICAgICAgICAgICBnZXQgYW5vdGhlciBzdHJpbmcKKyAgICAtLWRlZmF1bHQtc3RyaW5nICAgICAgc2V0IHN0cmluZyB0byBkZWZhdWx0CiAKLW1hZ2ljIGFyZ3VtZW50cworTWFnaWMgYXJndW1lbnRzCiAgICAgLS1xdXV4ICAgICAgICAgICAgICAgIG1lYW5zIC0tcXV1eAogCitTdGFuZGFyZCBvcHRpb25zCisgICAgLS1hYmJyZXZbPTxuPl0gICAgICAgIHVzZSA8bj4gZGlnaXRzIHRvIGRpc3BsYXkgU0hBLTFzCisgICAgLXYsIC0tdmVyYm9zZSAgICAgICAgIGJlIHZlcmJvc2UKKyAgICAtbiwgLS1kcnktcnVuICAgICAgICAgZHJ5IHJ1bgorICAgIC1xLCAtLXF1aWV0ICAgICAgICAgICBiZSBxdWlldAorCiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBoZWxwJyAnCi0JISB0ZXN0LXBhcnNlLW9wdGlvbnMgLWggPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3QtcGFyc2Utb3B0aW9ucyAtaCA+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCiAJdGVzdCAhIC1zIG91dHB1dCAmJgotCWdpdCBkaWZmIGV4cGVjdC5lcnIgb3V0cHV0LmVycgorCXRlc3RfY21wIGV4cGVjdC5lcnIgb3V0cHV0LmVycgogJwogCiBjYXQgPiBleHBlY3QgPDwgRU9GCiBib29sZWFuOiAyCiBpbnRlZ2VyOiAxNzI5CiBzdHJpbmc6IDEyMworYWJicmV2OiA3Cit2ZXJib3NlOiAyCitxdWlldDogbm8KK2RyeSBydW46IHllcwogRU9GCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3J0IG9wdGlvbnMnICcKLQl0ZXN0LXBhcnNlLW9wdGlvbnMgLXMxMjMgLWIgLWkgMTcyOSAtYiA+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCi0JZ2l0IGRpZmYgZXhwZWN0IG91dHB1dCAmJgorCXRlc3QtcGFyc2Utb3B0aW9ucyAtczEyMyAtYiAtaSAxNzI5IC1iIC12diAtbiA+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dCAmJgogCXRlc3QgISAtcyBvdXRwdXQuZXJyCiAnCisKIGNhdCA+IGV4cGVjdCA8PCBFT0YKIGJvb2xlYW46IDIKIGludGVnZXI6IDE3MjkKIHN0cmluZzogMzIxCithYmJyZXY6IDEwCit2ZXJib3NlOiAyCitxdWlldDogbm8KK2RyeSBydW46IG5vCiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9uZyBvcHRpb25zJyAnCiAJdGVzdC1wYXJzZS1vcHRpb25zIC0tYm9vbGVhbiAtLWludGVnZXIgMTcyOSAtLWJvb2xlYW4gLS1zdHJpbmcyPTMyMSBcCisJCS0tdmVyYm9zZSAtLXZlcmJvc2UgLS1uby1kcnktcnVuIC0tYWJicmV2PTEwIFwKIAkJPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgogCXRlc3QgISAtcyBvdXRwdXQuZXJyICYmCi0JZ2l0IGRpZmYgZXhwZWN0IG91dHB1dAorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKICcKIAogY2F0ID4gZXhwZWN0IDw8IEVPRgogYm9vbGVhbjogMQogaW50ZWdlcjogMTMKIHN0cmluZzogMTIzCithYmJyZXY6IDcKK3ZlcmJvc2U6IDAKK3F1aWV0OiBubworZHJ5IHJ1bjogbm8KIGFyZyAwMDogYTEKIGFyZyAwMTogYjEKIGFyZyAwMjogLS1ib29sZWFuCkBAIC02OSwyNSArOTUsMjkgQEAKIAl0ZXN0LXBhcnNlLW9wdGlvbnMgYTEgLS1zdHJpbmcgMTIzIGIxIC0tYm9vbGVhbiAtaiAxMyAtLSAtLWJvb2xlYW4gXAogCQk+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCiAJdGVzdCAhIC1zIG91dHB1dC5lcnIgJiYKLQlnaXQgZGlmZiBleHBlY3Qgb3V0cHV0CisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAogJwogCiBjYXQgPiBleHBlY3QgPDwgRU9GCiBib29sZWFuOiAwCiBpbnRlZ2VyOiAyCiBzdHJpbmc6IChub3Qgc2V0KQorYWJicmV2OiA3Cit2ZXJib3NlOiAwCitxdWlldDogbm8KK2RyeSBydW46IG5vCiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAndW5hbWJpZ3VvdXNseSBhYmJyZXZpYXRlZCBvcHRpb24nICcKIAl0ZXN0LXBhcnNlLW9wdGlvbnMgLS1pbnQgMiAtLWJvb2xlYW4gLS1uby1ibyA+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCiAJdGVzdCAhIC1zIG91dHB1dC5lcnIgJiYKLQlnaXQgZGlmZiBleHBlY3Qgb3V0cHV0CisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bmFtYmlndW91c2x5IGFiYnJldmlhdGVkIG9wdGlvbiB3aXRoICI9IicgJwogCXRlc3QtcGFyc2Utb3B0aW9ucyAtLWludD0yID4gb3V0cHV0IDI+IG91dHB1dC5lcnIgJiYKIAl0ZXN0ICEgLXMgb3V0cHV0LmVyciAmJgotCWdpdCBkaWZmIGV4cGVjdCBvdXRwdXQKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtYmlndW91c2x5IGFiYnJldmlhdGVkIG9wdGlvbicgJwpAQCAtOTksMzUgKzEyOSwxMDcgQEAKIGJvb2xlYW46IDAKIGludGVnZXI6IDAKIHN0cmluZzogMTIzCithYmJyZXY6IDcKK3ZlcmJvc2U6IDAKK3F1aWV0OiBubworZHJ5IHJ1bjogbm8KIEVPRgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdub24gYW1iaWd1b3VzIG9wdGlvbiAoYWZ0ZXIgdHdvIG9wdGlvbnMgaXQgYWJicmV2aWF0ZXMpJyAnCiAJdGVzdC1wYXJzZS1vcHRpb25zIC0tc3QgMTIzID4gb3V0cHV0IDI+IG91dHB1dC5lcnIgJiYKIAl0ZXN0ICEgLXMgb3V0cHV0LmVyciAmJgotCWdpdCBkaWZmIGV4cGVjdCBvdXRwdXQKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CiAnCiAKLWNhdCA+IGV4cGVjdC5lcnIgPDwgRU9GCitjYXQgPiB0eXBvLmVyciA8PCBFT0YKIGVycm9yOiBkaWQgeW91IG1lYW4gXGAtLWJvb2xlYW5cYCAod2l0aCB0d28gZGFzaGVzID8pCiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZWN0IHBvc3NpYmxlIHR5cG9zJyAnCi0JISB0ZXN0LXBhcnNlLW9wdGlvbnMgLWJvb2xlYW4gPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3QtcGFyc2Utb3B0aW9ucyAtYm9vbGVhbiA+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCiAJdGVzdCAhIC1zIG91dHB1dCAmJgotCWdpdCBkaWZmIGV4cGVjdC5lcnIgb3V0cHV0LmVycgorCXRlc3RfY21wIHR5cG8uZXJyIG91dHB1dC5lcnIKICcKIAogY2F0ID4gZXhwZWN0IDw8RU9GCiBib29sZWFuOiAwCiBpbnRlZ2VyOiAwCiBzdHJpbmc6IChub3Qgc2V0KQorYWJicmV2OiA3Cit2ZXJib3NlOiAwCitxdWlldDogbm8KK2RyeSBydW46IG5vCiBhcmcgMDA6IC0tcXV1eAogRU9GCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2tlZXAgc29tZSBvcHRpb25zIGFzIGFyZ3VtZW50cycgJwogCXRlc3QtcGFyc2Utb3B0aW9ucyAtLXF1dXggPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgogICAgICAgICB0ZXN0ICEgLXMgb3V0cHV0LmVyciAmJgotICAgICAgICBnaXQgZGlmZiBleHBlY3Qgb3V0cHV0CisgICAgICAgIHRlc3RfY21wIGV4cGVjdCBvdXRwdXQKICcKIAorY2F0ID4gZXhwZWN0IDw8RU9GCitib29sZWFuOiAwCitpbnRlZ2VyOiAxCitzdHJpbmc6IGRlZmF1bHQKK2FiYnJldjogNwordmVyYm9zZTogMAorcXVpZXQ6IHllcworZHJ5IHJ1bjogbm8KK2FyZyAwMDogZm9vCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0RBVEUoKSBhbmQgT1BUX1NFVF9QVFIoKSB3b3JrJyAnCisJdGVzdC1wYXJzZS1vcHRpb25zIC10ICIxOTcwLTAxLTAxIDAwOjAwOjAxICswMDAwIiAtLWRlZmF1bHQtc3RyaW5nIFwKKwkJZm9vIC1xID4gb3V0cHV0IDI+IG91dHB1dC5lcnIgJiYKKwl0ZXN0ICEgLXMgb3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKworY2F0ID4gZXhwZWN0IDw8RU9GCitDYWxsYmFjazogImZvdXIiLCAwCitib29sZWFuOiA1CitpbnRlZ2VyOiA0CitzdHJpbmc6IChub3Qgc2V0KQorYWJicmV2OiA3Cit2ZXJib3NlOiAwCitxdWlldDogbm8KK2RyeSBydW46IG5vCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0NBTExCQUNLKCkgYW5kIE9QVF9CSVQoKSB3b3JrJyAnCisJdGVzdC1wYXJzZS1vcHRpb25zIC0tbGVuZ3RoPWZvdXIgLWIgLTQgPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgorCXRlc3QgISAtcyBvdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPiBleHBlY3QgPDxFT0YKK0NhbGxiYWNrOiAibm90IHNldCIsIDEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfQ0FMTEJBQ0soKSBhbmQgY2FsbGJhY2sgZXJyb3JzIHdvcmsnICcKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXBhcnNlLW9wdGlvbnMgLS1uby1sZW5ndGggPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3QuZXJyIG91dHB1dC5lcnIKKycKKworY2F0ID4gZXhwZWN0IDw8RU9GCitib29sZWFuOiAxCitpbnRlZ2VyOiAyMworc3RyaW5nOiAobm90IHNldCkKK2FiYnJldjogNwordmVyYm9zZTogMAorcXVpZXQ6IG5vCitkcnkgcnVuOiBubworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9CSVQoKSBhbmQgT1BUX1NFVF9JTlQoKSB3b3JrJyAnCisJdGVzdC1wYXJzZS1vcHRpb25zIC0tc2V0MjMgLWJiYmJiIC0tbm8tb3I0ID4gb3V0cHV0IDI+IG91dHB1dC5lcnIgJiYKKwl0ZXN0ICEgLXMgb3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKworIyAtLW9yNAorIyAtLW5vLW9yNAorCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwNTAtZmlsZXN5c3RlbS5zaCBiL3QvdDAwNTAtZmlsZXN5c3RlbS5zaAppbmRleCAzZmJhZDc3Li5jNTM2MGUyIDEwMDc1NQotLS0gYS90L3QwMDUwLWZpbGVzeXN0ZW0uc2gKKysrIGIvdC90MDA1MC1maWxlc3lzdGVtLnNoCkBAIC03LDYgKzcsNyBAQAogYXVtbD1gcHJpbnRmICdceGMzXHhhNCdgCiBhdW1sY2RpYXI9YHByaW50ZiAnXHg2MVx4Y2NceDg4J2AKIAorY2FzZV9pbnNlbnNpdGl2ZT0KIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlZSBpZiB3ZSBleHBlY3QgJyAnCiAKIAl0ZXN0X2Nhc2U9dGVzdF9leHBlY3Rfc3VjY2VzcwpAQCAtMTcsNiArMTgsNyBAQAogCWlmIHRlc3QgIiQoY2F0IGp1bmsvQ2FtZWxDYXNlKSIgIT0gZ29vZAogCXRoZW4KIAkJdGVzdF9jYXNlPXRlc3RfZXhwZWN0X2ZhaWx1cmUKKwkJY2FzZV9pbnNlbnNpdGl2ZT10CiAJCXNheSAid2lsbCB0ZXN0IG9uIGEgY2FzZSBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtIgogCWZpICYmCiAJcm0gLWZyIGp1bmsgJiYKQEAgLTMyLDggKzM0LDIzIEBACiAJcm0gLWZyIGp1bmsKICcKIAoraWYgdGVzdCAiJGNhc2VfaW5zZW5zaXRpdmUiCit0aGVuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJkZXRlY3Rpb24gb2YgY2FzZSBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtIGR1cmluZyByZXBvIGluaXQiICcKKworCXRlc3QgJChnaXQgY29uZmlnIC0tYm9vbCBjb3JlLmlnbm9yZWNhc2UpID0gdHJ1ZQorJworZWxzZQordGVzdF9leHBlY3Rfc3VjY2VzcyAiZGV0ZWN0aW9uIG9mIGNhc2UgaW5zZW5zaXRpdmUgZmlsZXN5c3RlbSBkdXJpbmcgcmVwbyBpbml0IiAnCisKKwkhIGdpdCBjb25maWcgLS1ib29sIGNvcmUuaWdub3JlY2FzZSA+L2Rldi9udWxsIHx8CisJdGVzdCAkKGdpdCBjb25maWcgLS1ib29sIGNvcmUuaWdub3JlY2FzZSkgPSBmYWxzZQorJworZmkKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAic2V0dXAgY2FzZSB0ZXN0cyIgJwogCisJZ2l0IGNvbmZpZyBjb3JlLmlnbm9yZWNhc2UgdHJ1ZSAmJgogCXRvdWNoIGNhbWVsY2FzZSAmJgogCWdpdCBhZGQgY2FtZWxjYXNlICYmCiAJZ2l0IGNvbW1pdCAtbSAiaW5pdGlhbCIgJiYKQEAgLTU1LDExICs3MiwyMyBAQAogCiAkdGVzdF9jYXNlICdtZXJnZSAoY2FzZSBjaGFuZ2UpJyAnCiAKKwlybSAtZiBDYW1lbENhc2UgJiYKKwlybSAtZiBjYW1lbGNhc2UgJiYKIAlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKIAlnaXQgbWVyZ2UgdG9waWMKIAogJwogCiskdGVzdF9jYXNlICdhZGQgKHdpdGggZGlmZmVyZW50IGNhc2UpJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwlybSBjYW1lbGNhc2UgJiYKKwllY2hvIDEgPkNhbWVsQ2FzZSAmJgorCWdpdCBhZGQgQ2FtZWxDYXNlICYmCisJdGVzdCAkKGdpdC1scy1maWxlcyB8IGdyZXAgLWkgY2FtZWxjYXNlIHwgd2MgLWwpID0gMQorCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgInNldHVwIHVuaWNvZGUgbm9ybWFsaXphdGlvbiB0ZXN0cyIgJwogCiAgIHRlc3RfY3JlYXRlX3JlcG8gdW5pY29kZSAmJgpkaWZmIC0tZ2l0IGEvdC90MTAwMC1yZWFkLXRyZWUtbS0zd2F5LnNoIGIvdC90MTAwMC1yZWFkLXRyZWUtbS0zd2F5LnNoCmluZGV4IDE3ZjUxOWYuLjgwN2ZiODMgMTAwNzU1Ci0tLSBhL3QvdDEwMDAtcmVhZC10cmVlLW0tM3dheS5zaAorKysgYi90L3QxMDAwLXJlYWQtdHJlZS1tLTN3YXkuc2gKQEAgLTEzMSw3ICsxMzEsNyBAQAogCiBjaGVja19yZXN1bHQgKCkgewogICAgIGdpdCBscy1maWxlcyAtLXN0YWdlIHwgc2VkIC1lICdzLyAnIiRfeDQwIicgLyBYIC8nID5jdXJyZW50ICYmCi0gICAgZ2l0IGRpZmYgZXhwZWN0ZWQgY3VycmVudAorICAgIHRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKIH0KIAogIyBUaGlzIGlzIGRvbmUgb24gYW4gZW1wdHkgd29yayBkaXJlY3RvcnksIHdoaWNoIGlzIHRoZSBub3JtYWwKZGlmZiAtLWdpdCBhL3QvdDEwMDEtcmVhZC10cmVlLW0tMndheS5zaCBiL3QvdDEwMDEtcmVhZC10cmVlLW0tMndheS5zaAppbmRleCBiMDFiMDAzLi40YjQ0ZTEzIDEwMDc1NQotLS0gYS90L3QxMDAxLXJlYWQtdHJlZS1tLTJ3YXkuc2gKKysrIGIvdC90MTAwMS1yZWFkLXRyZWUtbS0yd2F5LnNoCkBAIC0zMyw3ICszMyw3IEBACiAJICAgIC1lICcvXi0tLSAvZDsgL14rKysgL2Q7IC9eQEAgL2Q7JyBcCiAJICAgIC1lICdzL15cKFstK11bMC03XVswLTddWzAtN11bMC03XVswLTddWzAtN11cKSAnIiRfeDQwIicgL1wxIFggL3AnIFwKIAkgICAgIiQxIgotCWdpdCBkaWZmIGV4cGVjdGVkIGN1cnJlbnQKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CiB9CiAKIGNoZWNrX2NhY2hlX2F0ICgpIHsKQEAgLTg2LDcgKzg2LDcgQEAKICAgICAncm0gLWYgLmdpdC9pbmRleCAmJgogICAgICByZWFkX3RyZWVfdHdvd2F5ICR0cmVlSCAkdHJlZU0gJiYKICAgICAgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPjEtMy5vdXQgJiYKLSAgICAgZ2l0IGRpZmYgTS5vdXQgMS0zLm91dCAmJgorICAgICB0ZXN0X2NtcCBNLm91dCAxLTMub3V0ICYmCiAgICAgIGNoZWNrX2NhY2hlX2F0IGJvemJhciBkaXJ0eSAmJgogICAgICBjaGVja19jYWNoZV9hdCBmcm90eiBkaXJ0eSAmJgogICAgICBjaGVja19jYWNoZV9hdCBuaXRmb2wgZGlydHknCkBAIC0xMDEsNyArMTAxLDcgQEAKICAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCB5b21pbiAmJgogICAgICByZWFkX3RyZWVfdHdvd2F5ICR0cmVlSCAkdHJlZU0gJiYKICAgICAgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPjQub3V0IHx8IHJldHVybiAxCi0gICAgIGdpdCBkaWZmIE0ub3V0IDQub3V0ID40ZGlmZi5vdXQKKyAgICAgZ2l0IGRpZmYgLS1uby1pbmRleCBNLm91dCA0Lm91dCA+NGRpZmYub3V0CiAgICAgIGNvbXBhcmVfY2hhbmdlIDRkaWZmLm91dCBleHBlY3RlZCAmJgogICAgICBjaGVja19jYWNoZV9hdCB5b21pbiBjbGVhbicKIApAQCAtMTE1LDcgKzExNSw3IEBACiAgICAgIGVjaG8geW9taW4geW9taW4gPnlvbWluICYmCiAgICAgIHJlYWRfdHJlZV90d293YXkgJHRyZWVIICR0cmVlTSAmJgogICAgICBnaXQgbHMtZmlsZXMgLS1zdGFnZSA+NS5vdXQgfHwgcmV0dXJuIDEKLSAgICAgZ2l0IGRpZmYgTS5vdXQgNS5vdXQgPjVkaWZmLm91dAorICAgICBnaXQgZGlmZiAtLW5vLWluZGV4IE0ub3V0IDUub3V0ID41ZGlmZi5vdXQKICAgICAgY29tcGFyZV9jaGFuZ2UgNWRpZmYub3V0IGV4cGVjdGVkICYmCiAgICAgIGNoZWNrX2NhY2hlX2F0IHlvbWluIGRpcnR5JwogCkBAIC0xMjcsNyArMTI3LDcgQEAKICAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmcm90eiAmJgogICAgICByZWFkX3RyZWVfdHdvd2F5ICR0cmVlSCAkdHJlZU0gJiYKICAgICAgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPjYub3V0ICYmCi0gICAgIGdpdCBkaWZmIE0ub3V0IDYub3V0ICYmCisgICAgIHRlc3RfY21wIE0ub3V0IDYub3V0ICYmCiAgICAgIGNoZWNrX2NhY2hlX2F0IGZyb3R6IGNsZWFuJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKQEAgLTE0MCw3ICsxNDAsNyBAQAogICAgICBlY2hvIGZyb3R6IGZyb3R6ID5mcm90eiAmJgogICAgICByZWFkX3RyZWVfdHdvd2F5ICR0cmVlSCAkdHJlZU0gJiYKICAgICAgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPjcub3V0ICYmCi0gICAgIGdpdCBkaWZmIE0ub3V0IDcub3V0ICYmCisgICAgIHRlc3RfY21wIE0ub3V0IDcub3V0ICYmCiAgICAgIGNoZWNrX2NhY2hlX2F0IGZyb3R6IGRpcnR5JwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKQEAgLTE3MSw3ICsxNzEsNyBAQAogICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHJlenJvdiAmJgogICAgICByZWFkX3RyZWVfdHdvd2F5ICR0cmVlSCAkdHJlZU0gJiYKICAgICAgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPjEwLm91dCAmJgotICAgICBnaXQgZGlmZiBNLm91dCAxMC5vdXQnCisgICAgIHRlc3RfY21wIE0ub3V0IDEwLm91dCcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJzExIC0gZGlydHkgcGF0aCByZW1vdmVkLicgXApAQCAtMjE2LDcgKzIxNiw3IEBACiAgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgbml0Zm9sICYmCiAgICAgIHJlYWRfdHJlZV90d293YXkgJHRyZWVIICR0cmVlTSAmJgogICAgICBnaXQgbHMtZmlsZXMgLS1zdGFnZSA+MTQub3V0IHx8IHJldHVybiAxCi0gICAgIGdpdCBkaWZmIE0ub3V0IDE0Lm91dCA+MTRkaWZmLm91dAorICAgICBnaXQgZGlmZiAtLW5vLWluZGV4IE0ub3V0IDE0Lm91dCA+MTRkaWZmLm91dAogICAgICBjb21wYXJlX2NoYW5nZSAxNGRpZmYub3V0IGV4cGVjdGVkICYmCiAgICAgIGNoZWNrX2NhY2hlX2F0IG5pdGZvbCBjbGVhbicKIApAQCAtMjMwLDcgKzIzMCw3IEBACiAgICAgIGVjaG8gbml0Zm9sIG5pdGZvbCBuaXRmb2wgPm5pdGZvbCAmJgogICAgICByZWFkX3RyZWVfdHdvd2F5ICR0cmVlSCAkdHJlZU0gJiYKICAgICAgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPjE1Lm91dCB8fCByZXR1cm4gMQotICAgICBnaXQgZGlmZiBNLm91dCAxNS5vdXQgPjE1ZGlmZi5vdXQKKyAgICAgZ2l0IGRpZmYgLS1uby1pbmRleCBNLm91dCAxNS5vdXQgPjE1ZGlmZi5vdXQKICAgICAgY29tcGFyZV9jaGFuZ2UgMTVkaWZmLm91dCBleHBlY3RlZCAmJgogICAgICBjaGVja19jYWNoZV9hdCBuaXRmb2wgZGlydHknCiAKQEAgLTI2Miw3ICsyNjIsNyBAQAogICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGJvemJhciAmJgogICAgICByZWFkX3RyZWVfdHdvd2F5ICR0cmVlSCAkdHJlZU0gJiYKICAgICAgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPjE4Lm91dCAmJgotICAgICBnaXQgZGlmZiBNLm91dCAxOC5vdXQgJiYKKyAgICAgdGVzdF9jbXAgTS5vdXQgMTgub3V0ICYmCiAgICAgIGNoZWNrX2NhY2hlX2F0IGJvemJhciBjbGVhbicKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCkBAIC0yNzUsNyArMjc1LDcgQEAKICAgICAgZWNobyBnbnVzdG8gZ251c3RvID5ib3piYXIgJiYKICAgICAgcmVhZF90cmVlX3R3b3dheSAkdHJlZUggJHRyZWVNICYmCiAgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID4xOS5vdXQgJiYKLSAgICAgZ2l0IGRpZmYgTS5vdXQgMTkub3V0ICYmCisgICAgIHRlc3RfY21wIE0ub3V0IDE5Lm91dCAmJgogICAgICBjaGVja19jYWNoZV9hdCBib3piYXIgZGlydHknCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXApAQCAtMjg3LDcgKzI4Nyw3IEBACiAgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYm96YmFyICYmCiAgICAgIHJlYWRfdHJlZV90d293YXkgJHRyZWVIICR0cmVlTSAmJgogICAgICBnaXQgbHMtZmlsZXMgLS1zdGFnZSA+MjAub3V0ICYmCi0gICAgIGdpdCBkaWZmIE0ub3V0IDIwLm91dCAmJgorICAgICB0ZXN0X2NtcCBNLm91dCAyMC5vdXQgJiYKICAgICAgY2hlY2tfY2FjaGVfYXQgYm96YmFyIGRpcnR5JwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKQEAgLTMzNyw3ICszMzcsNyBAQAogICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIERGICYmCiAgICAgIHJlYWRfdHJlZV90d293YXkgJHRyZWVERiAkdHJlZURGREYgJiYKICAgICAgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPkRGREZjaGVjay5vdXQgJiYKLSAgICAgZ2l0IGRpZmYgREZERi5vdXQgREZERmNoZWNrLm91dCAmJgorICAgICB0ZXN0X2NtcCBERkRGLm91dCBERkRGY2hlY2sub3V0ICYmCiAgICAgIGNoZWNrX2NhY2hlX2F0IERGL0RGIGRpcnR5ICYmCiAgICAgIDonCiAKZGlmZiAtLWdpdCBhL3QvdDEwMDItcmVhZC10cmVlLW0tdS0yd2F5LnNoIGIvdC90MTAwMi1yZWFkLXRyZWUtbS11LTJ3YXkuc2gKaW5kZXggNDJlNWNmOC4uZTA0OTkwZSAxMDA3NTUKLS0tIGEvdC90MTAwMi1yZWFkLXRyZWUtbS11LTJ3YXkuc2gKKysrIGIvdC90MTAwMi1yZWFkLXRyZWUtbS11LTJ3YXkuc2gKQEAgLTE2LDcgKzE2LDcgQEAKIAlzZWQgPmN1cnJlbnQgXAogCSAgICAtZSAnL14tLS0gL2Q7IC9eKysrIC9kOyAvXkBAIC9kOycgXAogCSAgICAtZSAncy9eXCguWzAtN11bMC03XVswLTddWzAtN11bMC03XVswLTddXCkgJyIkX3g0MCInIC9cMSBYIC8nICIkMSIKLQlnaXQgZGlmZiBleHBlY3RlZCBjdXJyZW50CisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAogfQogCiBjaGVja19jYWNoZV9hdCAoKSB7CmRpZmYgLS1naXQgYS90L3QxMDA2LWNhdC1maWxlLnNoIGIvdC90MTAwNi1jYXQtZmlsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kOGI3ZjJmCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTAwNi1jYXQtZmlsZS5zaApAQCAtMCwwICsxLDI0NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjYXQtZmlsZScKKworLiAuL3Rlc3QtbGliLnNoCisKK2VjaG9fd2l0aG91dF9uZXdsaW5lICgpIHsKKyAgICBwcmludGYgJyVzJyAiJCoiCit9CisKK3N0cmxlbiAoKSB7CisgICAgZWNob193aXRob3V0X25ld2xpbmUgIiQxIiB8IHdjIC1jIHwgc2VkIC1lICdzL14gKi8vJworfQorCittYXliZV9yZW1vdmVfdGltZXN0YW1wICgpIHsKKyAgICBpZiB0ZXN0IC16ICIkMiI7IHRoZW4KKyAgICAgICAgZWNob193aXRob3V0X25ld2xpbmUgIiQxIgorICAgIGVsc2UKKwllY2hvX3dpdGhvdXRfbmV3bGluZSAiJChwcmludGYgJyVzXG4nICIkMSIgfCBzZWQgLWUgJ3MvIFswLTldWzAtOV0qIFstK11bMC05XVswLTldWzAtOV1bMC05XSQvLycpIgorICAgIGZpCit9CisKK3J1bl90ZXN0cyAoKSB7CisgICAgdHlwZT0kMQorICAgIHNoYTE9JDIKKyAgICBzaXplPSQzCisgICAgY29udGVudD0kNAorICAgIHByZXR0eV9jb250ZW50PSQ1CisgICAgbm9fdHM9JDYKKworICAgIGJhdGNoX291dHB1dD0iJHNoYTEgJHR5cGUgJHNpemUKKyRjb250ZW50IgorCisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyAiJHR5cGUgZXhpc3RzIiAnCisJZ2l0IGNhdC1maWxlIC1lICRzaGExCisgICAgJworCisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyAiVHlwZSBvZiAkdHlwZSBpcyBjb3JyZWN0IiAnCisgICAgICAgIHRlc3QgJHR5cGUgPSAiJChnaXQgY2F0LWZpbGUgLXQgJHNoYTEpIgorICAgICcKKworICAgIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgIlNpemUgb2YgJHR5cGUgaXMgY29ycmVjdCIgJworICAgICAgICB0ZXN0ICRzaXplID0gIiQoZ2l0IGNhdC1maWxlIC1zICRzaGExKSIKKyAgICAnCisKKyAgICB0ZXN0IC16ICIkY29udGVudCIgfHwKKyAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzICJDb250ZW50IG9mICR0eXBlIGlzIGNvcnJlY3QiICcKKwlleHBlY3Q9IiQobWF5YmVfcmVtb3ZlX3RpbWVzdGFtcCAiJGNvbnRlbnQiICRub190cykiCisJYWN0dWFsPSIkKG1heWJlX3JlbW92ZV90aW1lc3RhbXAgIiQoZ2l0IGNhdC1maWxlICR0eXBlICRzaGExKSIgJG5vX3RzKSIKKworICAgICAgICBpZiB0ZXN0ICJ6JGV4cGVjdCIgPSAieiRhY3R1YWwiCisJdGhlbgorCQk6IGhhcHB5CisJZWxzZQorCQllY2hvICJPb3BzOiBleHBlY3RlZCAkZXhwZWN0IgorCQllY2hvICJidXQgZ290ICRhY3R1YWwiCisJCWZhbHNlCisgICAgICAgIGZpCisgICAgJworCisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyAiUHJldHR5IGNvbnRlbnQgb2YgJHR5cGUgaXMgY29ycmVjdCIgJworCWV4cGVjdD0iJChtYXliZV9yZW1vdmVfdGltZXN0YW1wICIkcHJldHR5X2NvbnRlbnQiICRub190cykiCisJYWN0dWFsPSIkKG1heWJlX3JlbW92ZV90aW1lc3RhbXAgIiQoZ2l0IGNhdC1maWxlIC1wICRzaGExKSIgJG5vX3RzKSIKKyAgICAgICAgaWYgdGVzdCAieiRleHBlY3QiID0gInokYWN0dWFsIgorCXRoZW4KKwkJOiBoYXBweQorCWVsc2UKKwkJZWNobyAiT29wczogZXhwZWN0ZWQgJGV4cGVjdCIKKwkJZWNobyAiYnV0IGdvdCAkYWN0dWFsIgorCQlmYWxzZQorICAgICAgICBmaQorICAgICcKKworICAgIHRlc3QgLXogIiRjb250ZW50IiB8fAorICAgIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0tYmF0Y2ggb3V0cHV0IG9mICR0eXBlIGlzIGNvcnJlY3QiICcKKwlleHBlY3Q9IiQobWF5YmVfcmVtb3ZlX3RpbWVzdGFtcCAiJGJhdGNoX291dHB1dCIgJG5vX3RzKSIKKwlhY3R1YWw9IiQobWF5YmVfcmVtb3ZlX3RpbWVzdGFtcCAiJChlY2hvICRzaGExIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gpIiAkbm9fdHMpIgorICAgICAgICBpZiB0ZXN0ICJ6JGV4cGVjdCIgPSAieiRhY3R1YWwiCisJdGhlbgorCQk6IGhhcHB5CisJZWxzZQorCQllY2hvICJPb3BzOiBleHBlY3RlZCAkZXhwZWN0IgorCQllY2hvICJidXQgZ290ICRhY3R1YWwiCisJCWZhbHNlCisgICAgICAgIGZpCisgICAgJworCisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyAiLS1iYXRjaC1jaGVjayBvdXRwdXQgb2YgJHR5cGUgaXMgY29ycmVjdCIgJworCWV4cGVjdD0iJHNoYTEgJHR5cGUgJHNpemUiCisJYWN0dWFsPSIkKGVjaG9fd2l0aG91dF9uZXdsaW5lICRzaGExIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2spIgorICAgICAgICBpZiB0ZXN0ICJ6JGV4cGVjdCIgPSAieiRhY3R1YWwiCisJdGhlbgorCQk6IGhhcHB5CisJZWxzZQorCQllY2hvICJPb3BzOiBleHBlY3RlZCAkZXhwZWN0IgorCQllY2hvICJidXQgZ290ICRhY3R1YWwiCisJCWZhbHNlCisgICAgICAgIGZpCisgICAgJworfQorCitoZWxsb19jb250ZW50PSJIZWxsbyBXb3JsZCIKK2hlbGxvX3NpemU9JChzdHJsZW4gIiRoZWxsb19jb250ZW50IikKK2hlbGxvX3NoYTE9JChlY2hvX3dpdGhvdXRfbmV3bGluZSAiJGhlbGxvX2NvbnRlbnQiIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4pCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInNldHVwIiAnCisJZWNob193aXRob3V0X25ld2xpbmUgIiRoZWxsb19jb250ZW50IiA+IGhlbGxvICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBoZWxsbworJworCitydW5fdGVzdHMgJ2Jsb2InICRoZWxsb19zaGExICRoZWxsb19zaXplICIkaGVsbG9fY29udGVudCIgIiRoZWxsb19jb250ZW50IgorCit0cmVlX3NoYTE9JChnaXQgd3JpdGUtdHJlZSkKK3RyZWVfc2l6ZT0zMwordHJlZV9wcmV0dHlfY29udGVudD0iMTAwNjQ0IGJsb2IgJGhlbGxvX3NoYTEJaGVsbG8iCisKK3J1bl90ZXN0cyAndHJlZScgJHRyZWVfc2hhMSAkdHJlZV9zaXplICIiICIkdHJlZV9wcmV0dHlfY29udGVudCIKKworY29tbWl0X21lc3NhZ2U9IkludGlhbCBjb21taXQiCitjb21taXRfc2hhMT0kKGVjaG9fd2l0aG91dF9uZXdsaW5lICIkY29tbWl0X21lc3NhZ2UiIHwgZ2l0IGNvbW1pdC10cmVlICR0cmVlX3NoYTEpCitjb21taXRfc2l6ZT0xNzYKK2NvbW1pdF9jb250ZW50PSJ0cmVlICR0cmVlX3NoYTEKK2F1dGhvciAkR0lUX0FVVEhPUl9OQU1FIDwkR0lUX0FVVEhPUl9FTUFJTD4gMDAwMDAwMDAwMCArMDAwMAorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAwMDAwMDAwMDAwICswMDAwCisKKyRjb21taXRfbWVzc2FnZSIKKworcnVuX3Rlc3RzICdjb21taXQnICRjb21taXRfc2hhMSAkY29tbWl0X3NpemUgIiRjb21taXRfY29udGVudCIgIiRjb21taXRfY29udGVudCIgMQorCit0YWdfaGVhZGVyX3dpdGhvdXRfdGltZXN0YW1wPSJvYmplY3QgJGhlbGxvX3NoYTEKK3R5cGUgYmxvYgordGFnIGhlbGxvdGFnCit0YWdnZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IgordGFnX2Rlc2NyaXB0aW9uPSJUaGlzIGlzIGEgdGFnIgordGFnX2NvbnRlbnQ9IiR0YWdfaGVhZGVyX3dpdGhvdXRfdGltZXN0YW1wIDAwMDAwMDAwMDAgKzAwMDAKKworJHRhZ19kZXNjcmlwdGlvbiIKK3RhZ19wcmV0dHlfY29udGVudD0iJHRhZ19oZWFkZXJfd2l0aG91dF90aW1lc3RhbXAgVGh1IEphbiAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKworJHRhZ19kZXNjcmlwdGlvbiIKKwordGFnX3NoYTE9JChlY2hvX3dpdGhvdXRfbmV3bGluZSAiJHRhZ19jb250ZW50IiB8IGdpdCBta3RhZykKK3RhZ19zaXplPSQoc3RybGVuICIkdGFnX2NvbnRlbnQiKQorCitydW5fdGVzdHMgJ3RhZycgJHRhZ19zaGExICR0YWdfc2l6ZSAiJHRhZ19jb250ZW50IiAiJHRhZ19wcmV0dHlfY29udGVudCIgMQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAiUmVhY2ggYSBibG9iIGZyb20gYSB0YWcgcG9pbnRpbmcgdG8gaXQiIFwKKyAgICAidGVzdCAnJGhlbGxvX2NvbnRlbnQnID0gXCJcJChnaXQgY2F0LWZpbGUgYmxvYiAkdGFnX3NoYTEpXCIiCisKK2ZvciBiYXRjaCBpbiBiYXRjaCBiYXRjaC1jaGVjaworZG8KKyAgICBmb3Igb3B0IGluIHQgcyBlIHAKKyAgICBkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIlBhc3NpbmcgLSRvcHQgd2l0aCAtLSRiYXRjaCBmYWlscyIgJworCSAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgLS0kYmF0Y2ggLSRvcHQgJGhlbGxvX3NoYTEKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJQYXNzaW5nIC0tJGJhdGNoIHdpdGggLSRvcHQgZmFpbHMiICcKKwkgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIC0kb3B0IC0tJGJhdGNoICRoZWxsb19zaGExCisJJworICAgIGRvbmUKKworICAgIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgIlBhc3NpbmcgPHR5cGU+IHdpdGggLS0kYmF0Y2ggZmFpbHMiICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgLS0kYmF0Y2ggYmxvYiAkaGVsbG9fc2hhMQorICAgICcKKworICAgIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgIlBhc3NpbmcgLS0kYmF0Y2ggd2l0aCA8dHlwZT4gZmFpbHMiICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAtLSRiYXRjaCAkaGVsbG9fc2hhMQorICAgICcKKworICAgIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgIlBhc3Npbmcgc2hhMSB3aXRoIC0tJGJhdGNoIGZhaWxzIiAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIC0tJGJhdGNoICRoZWxsb19zaGExCisgICAgJworZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICItLWJhdGNoLWNoZWNrIGZvciBhIG5vbi1leGlzdGVudCBuYW1lZCBvYmplY3QiICcKKyAgICB0ZXN0ICJmb29iYXI0MiBtaXNzaW5nCitmb29iYXI4NCBtaXNzaW5nIiA9IFwKKyAgICAiJCggKCBlY2hvIGZvb2JhcjQyOyBlY2hvX3dpdGhvdXRfbmV3bGluZSBmb29iYXI4NDsgKSB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiLS1iYXRjaC1jaGVjayBmb3IgYSBub24tZXhpc3RlbnQgaGFzaCIgJworICAgIHRlc3QgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDIgbWlzc2luZworMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NCBtaXNzaW5nIiA9IFwKKyAgICAiJCggKCBlY2hvIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDI7CisgICAgICAgICBlY2hvX3dpdGhvdXRfbmV3bGluZSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg0OyApIFwKKyAgICAgICB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiLS1iYXRjaCBmb3IgYW4gZXhpc3RlbnQgYW5kIGEgbm9uLWV4aXN0ZW50IGhhc2giICcKKyAgICB0ZXN0ICIkdGFnX3NoYTEgdGFnICR0YWdfc2l6ZQorJHRhZ19jb250ZW50CiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIG1pc3NpbmciID0gXAorICAgICIkKCAoIGVjaG8gJHRhZ19zaGExOworICAgICAgICAgZWNob193aXRob3V0X25ld2xpbmUgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDsgKSBcCisgICAgICAgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0tYmF0Y2gtY2hlY2sgZm9yIGFuIGVtdHB5IGxpbmUiICcKKyAgICB0ZXN0ICIgbWlzc2luZyIgPSAiJChlY2hvIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2spIgorJworCitiYXRjaF9pbnB1dD0iJGhlbGxvX3NoYTEKKyRjb21taXRfc2hhMQorJHRhZ19zaGExCitkZWFkYmVlZgorCisiCisKK2JhdGNoX291dHB1dD0iJGhlbGxvX3NoYTEgYmxvYiAkaGVsbG9fc2l6ZQorJGhlbGxvX2NvbnRlbnQKKyRjb21taXRfc2hhMSBjb21taXQgJGNvbW1pdF9zaXplCiskY29tbWl0X2NvbnRlbnQKKyR0YWdfc2hhMSB0YWcgJHRhZ19zaXplCiskdGFnX2NvbnRlbnQKK2RlYWRiZWVmIG1pc3NpbmcKKyBtaXNzaW5nIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWJhdGNoIHdpdGggbXVsdGlwbGUgc2hhMXMgZ2l2ZXMgY29ycmVjdCBmb3JtYXQnICcKKwl0ZXN0ICIkKG1heWJlX3JlbW92ZV90aW1lc3RhbXAgIiRiYXRjaF9vdXRwdXQiIDEpIiA9ICIkKG1heWJlX3JlbW92ZV90aW1lc3RhbXAgIiQoZWNob193aXRob3V0X25ld2xpbmUgIiRiYXRjaF9pbnB1dCIgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaCkiIDEpIgorJworCitiYXRjaF9jaGVja19pbnB1dD0iJGhlbGxvX3NoYTEKKyR0cmVlX3NoYTEKKyRjb21taXRfc2hhMQorJHRhZ19zaGExCitkZWFkYmVlZgorCisiCisKK2JhdGNoX2NoZWNrX291dHB1dD0iJGhlbGxvX3NoYTEgYmxvYiAkaGVsbG9fc2l6ZQorJHRyZWVfc2hhMSB0cmVlICR0cmVlX3NpemUKKyRjb21taXRfc2hhMSBjb21taXQgJGNvbW1pdF9zaXplCiskdGFnX3NoYTEgdGFnICR0YWdfc2l6ZQorZGVhZGJlZWYgbWlzc2luZworIG1pc3NpbmciCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0tYmF0Y2gtY2hlY2sgd2l0aCBtdWx0aXBsZSBzaGExcyBnaXZlcyBjb3JyZWN0IGZvcm1hdCIgJworICAgIHRlc3QgIiRiYXRjaF9jaGVja19vdXRwdXQiID0gXAorICAgICIkKGVjaG9fd2l0aG91dF9uZXdsaW5lICIkYmF0Y2hfY2hlY2tfaW5wdXQiIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2spIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEwMDctaGFzaC1vYmplY3Quc2ggYi90L3QxMDA3LWhhc2gtb2JqZWN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA1MjYyOTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDA3LWhhc2gtb2JqZWN0LnNoCkBAIC0wLDAgKzEsMTMzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj1naXQtaGFzaC1vYmplY3QKKworLiAuL3Rlc3QtbGliLnNoCisKK2VjaG9fd2l0aG91dF9uZXdsaW5lKCkgeworCXByaW50ZiAnJXMnICIkKiIKK30KKwordGVzdF9ibG9iX2RvZXNfbm90X2V4aXN0KCkgeworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jsb2IgZG9lcyBub3QgZXhpc3QgaW4gZGF0YWJhc2UnICIKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJDEKKwkiCit9CisKK3Rlc3RfYmxvYl9leGlzdHMoKSB7CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxvYiBleGlzdHMgaW4gZGF0YWJhc2UnICIKKwkJZ2l0IGNhdC1maWxlIGJsb2IgJDEKKwkiCit9CisKK2hlbGxvX2NvbnRlbnQ9IkhlbGxvIFdvcmxkIgoraGVsbG9fc2hhMT01ZTFjMzA5ZGFlN2Y0NWUwZjM5YjFiZjNhYzNjZDlkYjEyZTdkNjg5CisKK2V4YW1wbGVfY29udGVudD0iVGhpcyBpcyBhbiBleGFtcGxlIgorZXhhbXBsZV9zaGExPWRkZDNmODM2ZDNlM2ZiYjdhZTI4OWFhOWFlODM1MzZmNzY5NTYzOTkKKworc2V0dXBfcmVwbygpIHsKKwllY2hvX3dpdGhvdXRfbmV3bGluZSAiJGhlbGxvX2NvbnRlbnQiID4gaGVsbG8KKwllY2hvX3dpdGhvdXRfbmV3bGluZSAiJGV4YW1wbGVfY29udGVudCIgPiBleGFtcGxlCit9CisKK3Rlc3RfcmVwbz10ZXN0CitwdXNoX3JlcG8oKSB7CisJdGVzdF9jcmVhdGVfcmVwbyAkdGVzdF9yZXBvCisJY2QgJHRlc3RfcmVwbworCisJc2V0dXBfcmVwbworfQorCitwb3BfcmVwbygpIHsKKwljZCAuLgorCXJtIC1yZiAkdGVzdF9yZXBvCit9CisKK3NldHVwX3JlcG8KKworIyBBcmd1bWVudCBjaGVja2luZworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJtdWx0aXBsZSAnLS1zdGRpbidzIGFyZSByZWplY3RlZCIgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIC0tc3RkaW4gPCBleGFtcGxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIkNhbid0IHVzZSAtLXN0ZGluIGFuZCAtLXN0ZGluLXBhdGhzIHRvZ2V0aGVyIiAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gLS1zdGRpbi1wYXRocyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluLXBhdGhzIC0tc3RkaW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiQ2FuJ3QgcGFzcyBmaWxlbmFtZXMgYXMgYXJndW1lbnRzIHdpdGggLS1zdGRpbi1wYXRocyIgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluLXBhdGhzIGhlbGxvIDwgZXhhbXBsZQorJworCisjIEJlaGF2aW9yCisKK3B1c2hfcmVwbworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoYXNoIGEgZmlsZScgJworCXRlc3QgJGhlbGxvX3NoYTEgPSAkKGdpdCBoYXNoLW9iamVjdCBoZWxsbykKKycKKwordGVzdF9ibG9iX2RvZXNfbm90X2V4aXN0ICRoZWxsb19zaGExCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hhc2ggZnJvbSBzdGRpbicgJworCXRlc3QgJGV4YW1wbGVfc2hhMSA9ICQoZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gPCBleGFtcGxlKQorJworCit0ZXN0X2Jsb2JfZG9lc19ub3RfZXhpc3QgJGV4YW1wbGVfc2hhMQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoYXNoIGEgZmlsZSBhbmQgd3JpdGUgdG8gZGF0YWJhc2UnICcKKwl0ZXN0ICRoZWxsb19zaGExID0gJChnaXQgaGFzaC1vYmplY3QgLXcgaGVsbG8pCisnCisKK3Rlc3RfYmxvYl9leGlzdHMgJGhlbGxvX3NoYTEKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gZmlsZTEgPGZpbGUwIGZpcnN0IG9wZXJhdGVzIG9uIGZpbGUwLCB0aGVuIGZpbGUxJyAnCisJZWNobyBmb28gPiBmaWxlMSAmJgorCW9ibmFtZTA9JChlY2hvIGJhciB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluKSAmJgorCW9ibmFtZTE9JChnaXQgaGFzaC1vYmplY3QgZmlsZTEpICYmCisJb2JuYW1lMG5ldz0kKGVjaG8gYmFyIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gZmlsZTEgfCBzZWQgLW4gLWUgMXApICYmCisJb2JuYW1lMW5ldz0kKGVjaG8gYmFyIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gZmlsZTEgfCBzZWQgLW4gLWUgMnApICYmCisJdGVzdCAiJG9ibmFtZTAiID0gIiRvYm5hbWUwbmV3IiAmJgorCXRlc3QgIiRvYm5hbWUxIiA9ICIkb2JuYW1lMW5ldyIKKycKKworcG9wX3JlcG8KKworZm9yIGFyZ3MgaW4gIi13IC0tc3RkaW4iICItLXN0ZGluIC13IjsgZG8KKwlwdXNoX3JlcG8KKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImhhc2ggZnJvbSBzdGRpbiBhbmQgd3JpdGUgdG8gZGF0YWJhc2UgKCRhcmdzKSIgJworCQl0ZXN0ICRleGFtcGxlX3NoYTEgPSAkKGdpdCBoYXNoLW9iamVjdCAkYXJncyA8IGV4YW1wbGUpCisJJworCisJdGVzdF9ibG9iX2V4aXN0cyAkZXhhbXBsZV9zaGExCisKKwlwb3BfcmVwbworZG9uZQorCitmaWxlbmFtZXM9ImhlbGxvCitleGFtcGxlIgorCitzaGExcz0iJGhlbGxvX3NoYTEKKyRleGFtcGxlX3NoYTEiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImhhc2ggdHdvIGZpbGVzIHdpdGggbmFtZXMgb24gc3RkaW4iICcKKwl0ZXN0ICIkc2hhMXMiID0gIiQoZWNob193aXRob3V0X25ld2xpbmUgIiRmaWxlbmFtZXMiIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4tcGF0aHMpIgorJworCitmb3IgYXJncyBpbiAiLXcgLS1zdGRpbi1wYXRocyIgIi0tc3RkaW4tcGF0aHMgLXciOyBkbworCXB1c2hfcmVwbworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiaGFzaCB0d28gZmlsZXMgd2l0aCBuYW1lcyBvbiBzdGRpbiBhbmQgd3JpdGUgdG8gZGF0YWJhc2UgKCRhcmdzKSIgJworCQl0ZXN0ICIkc2hhMXMiID0gIiQoZWNob193aXRob3V0X25ld2xpbmUgIiRmaWxlbmFtZXMiIHwgZ2l0IGhhc2gtb2JqZWN0ICRhcmdzKSIKKwknCisKKwl0ZXN0X2Jsb2JfZXhpc3RzICRoZWxsb19zaGExCisJdGVzdF9ibG9iX2V4aXN0cyAkZXhhbXBsZV9zaGExCisKKwlwb3BfcmVwbworZG9uZQorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEwMjAtc3ViZGlyZWN0b3J5LnNoIGIvdC90MTAyMC1zdWJkaXJlY3Rvcnkuc2gKaW5kZXggYjljZWYzNC4uZmMzODZiYSAxMDA3NTUKLS0tIGEvdC90MTAyMC1zdWJkaXJlY3Rvcnkuc2gKKysrIGIvdC90MTAyMC1zdWJkaXJlY3Rvcnkuc2gKQEAgLTIxLDcgKzIxLDcgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLWluZGV4IGFuZCBscy1maWxlcycgJwotCWNkICRIRVJFICYmCisJY2QgIiRIRVJFIiAmJgogCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgb25lICYmCiAJY2FzZSAiYGdpdCBscy1maWxlc2AiIGluCiAJb25lKSBlY2hvIG9rIG9uZSA7OwpAQCAtNDEsNyArNDEsNyBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYXQtZmlsZScgJwotCWNkICRIRVJFICYmCisJY2QgIiRIRVJFIiAmJgogCXR3bz1gZ2l0IGxzLWZpbGVzIC1zIGRpci90d29gICYmCiAJdHdvPWBleHByICIkdHdvIiA6ICJbMC03XSogXFwoWzAtOWEtZl0qXFwpImAgJiYKIAllY2hvICIkdHdvIiAmJgpAQCAtNTQsNyArNTQsNyBAQAogcm0gLWYgYWN0dWFsIGRpci9hY3R1YWwKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1maWxlcycgJwotCWNkICRIRVJFICYmCisJY2QgIiRIRVJFIiAmJgogCWVjaG8gYSA+Pm9uZSAmJgogCWVjaG8gZCA+PmRpci90d28gJiYKIAljYXNlICJgZ2l0IGRpZmYtZmlsZXMgLS1uYW1lLW9ubHlgIiBpbgpAQCAtNzQsNyArNzQsNyBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd3cml0ZS10cmVlJyAnCi0JY2QgJEhFUkUgJiYKKwljZCAiJEhFUkUiICYmCiAJdG9wPWBnaXQgd3JpdGUtdHJlZWAgJiYKIAllY2hvICR0b3AgJiYKIAljZCBkaXIgJiYKQEAgLTg0LDcgKzg0LDcgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQtaW5kZXgnICcKLQljZCAkSEVSRSAmJgorCWNkICIkSEVSRSIgJiYKIAlnaXQgY2hlY2tvdXQtaW5kZXggLWYgLXUgb25lICYmCiAJY21wIG9uZSBvcmlnaW5hbC5vbmUgJiYKIAljZCBkaXIgJiYKQEAgLTkzLDcgKzkzLDcgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZC10cmVlJyAnCi0JY2QgJEhFUkUgJiYKKwljZCAiJEhFUkUiICYmCiAJcm0gLWYgb25lIGRpci90d28gJiYKIAl0cmVlPWBnaXQgd3JpdGUtdHJlZWAgJiYKIAlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgIiR0cmVlIiAmJgpAQCAtMTA3LDI3ICsxMDcsMjcgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gZmlsZS9yZXYgYW1iaWd1aXR5IGNoZWNrIGluc2lkZSAuZ2l0JyAnCi0JY2QgJEhFUkUgJiYKKwljZCAiJEhFUkUiICYmCiAJZ2l0IGNvbW1pdCAtYSAtbSAxICYmCi0JY2QgJEhFUkUvLmdpdCAmJgorCWNkICIkSEVSRSIvLmdpdCAmJgogCWdpdCBzaG93IC1zIEhFQUQKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gZmlsZS9yZXYgYW1iaWd1aXR5IGNoZWNrIGluc2lkZSBhIGJhcmUgcmVwbycgJwotCWNkICRIRVJFICYmCisJY2QgIiRIRVJFIiAmJgogCWdpdCBjbG9uZSAtcyAtLWJhcmUgLmdpdCBmb28uZ2l0ICYmCiAJY2QgZm9vLmdpdCAmJiBHSVRfRElSPS4gZ2l0IHNob3cgLXMgSEVBRAogJwogCiAjIFRoaXMgc3RpbGwgZG9lcyBub3Qgd29yayBhcyBpdCBzaG91bGQuLi4KIDogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gZmlsZS9yZXYgYW1iaWd1aXR5IGNoZWNrIGluc2lkZSBhIGJhcmUgcmVwbycgJwotCWNkICRIRVJFICYmCisJY2QgIiRIRVJFIiAmJgogCWdpdCBjbG9uZSAtcyAtLWJhcmUgLmdpdCBmb28uZ2l0ICYmCiAJY2QgZm9vLmdpdCAmJiBnaXQgc2hvdyAtcyBIRUFECiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdGlvbiBzaG91bGQgbm90IGJlIGZvb2xlZCBieSBhIHN5bWxpbmsnICcKLQljZCAkSEVSRSAmJgorCWNkICIkSEVSRSIgJiYKIAlybSAtZnIgZm9vLmdpdCAmJgogCWdpdCBjbG9uZSAtcyAuZ2l0IGFub3RoZXIgJiYKIAlsbiAtcyBhbm90aGVyIHlldGFub3RoZXIgJiYKZGlmZiAtLWdpdCBhL3QvdDEzMDAtcmVwby1jb25maWcuc2ggYi90L3QxMzAwLXJlcG8tY29uZmlnLnNoCmluZGV4IGIzNmE5MDEuLmFmZTdlNjYgMTAwNzU1Ci0tLSBhL3QvdDEzMDAtcmVwby1jb25maWcuc2gKKysrIGIvdC90MTMwMC1yZXBvLWNvbmZpZy5zaApAQCAtNDI3LDEzICs0MjcsMTMgQEAKIHdlaXJkCiBFT0YKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAicmVuYW1lIHN1Y2NlZWRlZCIgImdpdCBkaWZmIGV4cGVjdCAuZ2l0L2NvbmZpZyIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlbmFtZSBzdWNjZWVkZWQiICJ0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWciCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlbmFtZSBub24tZXhpc3Rpbmcgc2VjdGlvbiIgJwogCSEgZ2l0IGNvbmZpZyAtLXJlbmFtZS1zZWN0aW9uIGJyYW5jaC4id29ybGQgZG9taW5hdGlvbiIgYnJhbmNoLmRyZWkKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAicmVuYW1lIHN1Y2NlZWRlZCIgImdpdCBkaWZmIGV4cGVjdCAuZ2l0L2NvbmZpZyIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlbmFtZSBzdWNjZWVkZWQiICJ0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWciCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlbmFtZSBhbm90aGVyIHNlY3Rpb24iIFwKIAknZ2l0IGNvbmZpZyAtLXJlbmFtZS1zZWN0aW9uIGJyYW5jaC4iMSAyMzQgYmxhYmwvYSIgYnJhbmNoLmRyZWknCkBAIC00NDksNyArNDQ5LDcgQEAKIHdlaXJkCiBFT0YKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAicmVuYW1lIHN1Y2NlZWRlZCIgImdpdCBkaWZmIGV4cGVjdCAuZ2l0L2NvbmZpZyIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlbmFtZSBzdWNjZWVkZWQiICJ0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWciCiAKIGNhdCA+PiAuZ2l0L2NvbmZpZyA8PCBFT0YKICAgW2JyYW5jaCAiendlaSJdIGEgPSAxIFticmFuY2ggInZpZXIiXQpAQCAtNDY1LDcgKzQ2NSw3IEBACiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAic2VjdGlvbiB3YXMgcmVtb3ZlZCBwcm9wZXJseSIgXAotCSJnaXQgZGlmZiAtdSBleHBlY3QgLmdpdC9jb25maWciCisJInRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZyIKIAogcm0gLmdpdC9jb25maWcKIApAQCAtNTk1LDYgKzU5NSw2NCBAQAogCiBybSAuZ2l0L2NvbmZpZwogCitjYXQgPmV4cGVjdCA8PFxFT0YKK1tib29sXQorCXRydWUxID0gdHJ1ZQorCXRydWUyID0gdHJ1ZQorCWZhbHNlMSA9IGZhbHNlCisJZmFsc2UyID0gZmFsc2UKK1tpbnRdCisJaW50MSA9IDAKKwlpbnQyID0gMQorCWludDMgPSAtMQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCAtLWJvb2wtb3ItaW50JyAnCisJKAorCQllY2hvICJbYm9vbF0iCisJCWVjaG8gdHJ1ZTEKKwkJZWNobyB0cnVlMiA9IHRydWUKKwkJZWNobyBmYWxzZSA9IGZhbHNlCisJCWVjaG8gIltpbnRdIgorCQllY2hvIGludDEgPSAwCisJCWVjaG8gaW50MiA9IDEKKwkJZWNobyBpbnQzID0gLTEKKwkpID4+LmdpdC9jb25maWcgJiYKKwl0ZXN0ICQoZ2l0IGNvbmZpZyAtLWJvb2wtb3ItaW50IGJvb2wudHJ1ZTEpID0gdHJ1ZSAmJgorCXRlc3QgJChnaXQgY29uZmlnIC0tYm9vbC1vci1pbnQgYm9vbC50cnVlMikgPSB0cnVlICYmCisJdGVzdCAkKGdpdCBjb25maWcgLS1ib29sLW9yLWludCBib29sLmZhbHNlKSA9IGZhbHNlICYmCisJdGVzdCAkKGdpdCBjb25maWcgLS1ib29sLW9yLWludCBpbnQuaW50MSkgPSAwICYmCisJdGVzdCAkKGdpdCBjb25maWcgLS1ib29sLW9yLWludCBpbnQuaW50MikgPSAxICYmCisJdGVzdCAkKGdpdCBjb25maWcgLS1ib29sLW9yLWludCBpbnQuaW50MykgPSAtMQorCisnCisKK3JtIC5naXQvY29uZmlnCitjYXQgPmV4cGVjdCA8PFxFT0YKK1tib29sXQorCXRydWUxID0gdHJ1ZQorCWZhbHNlMSA9IGZhbHNlCisJdHJ1ZTIgPSB0cnVlCisJZmFsc2UyID0gZmFsc2UKK1tpbnRdCisJaW50MSA9IDAKKwlpbnQyID0gMQorCWludDMgPSAtMQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCAtLWJvb2wtb3ItaW50JyAnCisJZ2l0IGNvbmZpZyAtLWJvb2wtb3ItaW50IGJvb2wudHJ1ZTEgdHJ1ZSAmJgorCWdpdCBjb25maWcgLS1ib29sLW9yLWludCBib29sLmZhbHNlMSBmYWxzZSAmJgorCWdpdCBjb25maWcgLS1ib29sLW9yLWludCBib29sLnRydWUyIHllcyAmJgorCWdpdCBjb25maWcgLS1ib29sLW9yLWludCBib29sLmZhbHNlMiBubyAmJgorCWdpdCBjb25maWcgLS1ib29sLW9yLWludCBpbnQuaW50MSAwICYmCisJZ2l0IGNvbmZpZyAtLWJvb2wtb3ItaW50IGludC5pbnQyIDEgJiYKKwlnaXQgY29uZmlnIC0tYm9vbC1vci1pbnQgaW50LmludDMgLTEgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWcKKycKKworcm0gLmdpdC9jb25maWcKKwogZ2l0IGNvbmZpZyBxdW90ZS5sZWFkaW5nICIgdGVzdCIKIGdpdCBjb25maWcgcXVvdGUuZW5kaW5nICJ0ZXN0ICIKIGdpdCBjb25maWcgcXVvdGUuc2VtaWNvbG9uICJ0ZXN0O3Rlc3QiCmRpZmYgLS1naXQgYS90L3QxMzAxLXNoYXJlZC1yZXBvLnNoIGIvdC90MTMwMS1zaGFyZWQtcmVwby5zaAppbmRleCA2YmZlMTlhLi5kYzg1ZThiIDEwMDc1NQotLS0gYS90L3QxMzAxLXNoYXJlZC1yZXBvLnNoCisrKyBiL3QvdDEzMDEtc2hhcmVkLXJlcG8uc2gKQEAgLTcsNiArNywzOSBAQAogCiAuIC4vdGVzdC1saWIuc2gKIAorIyBVc2VyIG11c3QgaGF2ZSByZWFkIHBlcm1pc3Npb25zIHRvIHRoZSByZXBvIC0+IGZhaWx1cmUgb24gLS1zaGFyZWQ9MDQwMAordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hhcmVkID0gMDQwMCAoZmF1bHR5IHBlcm1pc3Npb24gdS13KScgJworCW1rZGlyIHN1YiAmJiAoCisJCWNkIHN1YiAmJiBnaXQgaW5pdCAtLXNoYXJlZD0wNDAwCisJKQorCXJldD0iJD8iCisJcm0gLXJmIHN1YgorCXRlc3QgJHJldCAhPSAiMCIKKycKKworZm9yIHUgaW4gMDAyIDAyMgorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJzaGFyZWQ9MSBkb2VzIG5vdCBjbGVhciBiaXRzIHByZXNldCBieSB1bWFzayAkdSIgJworCQlta2RpciBzdWIgJiYgKAorCQkJY2Qgc3ViICYmCisJCQl1bWFzayAkdSAmJgorCQkJZ2l0IGluaXQgLS1zaGFyZWQ9MSAmJgorCQkJdGVzdCAxID0gIiQoZ2l0IGNvbmZpZyBjb3JlLnNoYXJlZHJlcG9zaXRvcnkpIgorCQkpICYmCisJCWFjdHVhbD0kKGxzIC1sIHN1Yi8uZ2l0L0hFQUQpCisJCWNhc2UgIiRhY3R1YWwiIGluCisJCS1ydy1ydy1yLS0qKQorCQkJOiBoYXBweQorCQkJOzsKKwkJKikKKwkJCWVjaG8gT29wcywgLmdpdC9IRUFEIGlzIG5vdCAwNjY0IGJ1dCAkYWN0dWFsCisJCQlmYWxzZQorCQkJOzsKKwkJZXNhYworCScKKwlybSAtcmYgc3ViCitkb25lCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NoYXJlZD1hbGwnICcKIAlta2RpciBzdWIgJiYKIAljZCBzdWIgJiYKQEAgLTMzLDQgKzY2LDU5IEBACiAJZXNhYwogJwogCitmb3IgdSBpbgkwNjYwOnJ3LXJ3LS0tLSBcCisJCTA2NDA6cnctci0tLS0tIFwKKwkJMDYwMDpydy0tLS0tLS0gXAorCQkwNjY2OnJ3LXJ3LXJ3LSBcCisJCTA2NjQ6cnctcnctci0tCitkbworCXg9JChleHByICIkdSIgOiAiLio6XChbcnctXSpcKSIpICYmCisJeT0kKGVjaG8gIiR4IiB8IHNlZCAtZSAicy93Ly0vZyIpICYmCisJdT0kKGV4cHIgIiR1IiA6ICJcKFswLTddKlwpIikgJiYKKwlnaXQgY29uZmlnIGNvcmUuc2hhcmVkcmVwb3NpdG9yeSAiJHUiICYmCisJdW1hc2sgMDI3NyAmJgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAic2hhcmVkID0gJHUgKCR5KSBybyIgJworCisJCXJtIC1mIC5naXQvaW5mby9yZWZzICYmCisJCWdpdCB1cGRhdGUtc2VydmVyLWluZm8gJiYKKwkJYWN0dWFsPSIkKGxzIC1sIC5naXQvaW5mby9yZWZzKSIgJiYKKwkJYWN0dWFsPSR7YWN0dWFsJSUgKn0gJiYKKwkJdGVzdCAieCRhY3R1YWwiID0gIngtJHkiIHx8IHsKKwkJCWxzIC1sdCAuZ2l0L2luZm8KKwkJCWZhbHNlCisJCX0KKwknCisKKwl1bWFzayAwNzcgJiYKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJzaGFyZWQgPSAkdSAoJHgpIHJ3IiAnCisKKwkJcm0gLWYgLmdpdC9pbmZvL3JlZnMgJiYKKwkJZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyAmJgorCQlhY3R1YWw9IiQobHMgLWwgLmdpdC9pbmZvL3JlZnMpIiAmJgorCQlhY3R1YWw9JHthY3R1YWwlJSAqfSAmJgorCQl0ZXN0ICJ4JGFjdHVhbCIgPSAieC0keCIgfHwgeworCQkJbHMgLWx0IC5naXQvaW5mbworCQkJZmFsc2UKKwkJfQorCisJJworCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCByZWZsb2cgZXhwaXJlIGhvbm9ycyBjb3JlLnNoYXJlZFJlcG9zaXRvcnknICcKKwlnaXQgY29uZmlnIGNvcmUuc2hhcmVkUmVwb3NpdG9yeSBncm91cCAmJgorCWdpdCByZWZsb2cgZXhwaXJlIC0tYWxsICYmCisJYWN0dWFsPSIkKGxzIC1sIC5naXQvbG9ncy9yZWZzL2hlYWRzL21hc3RlcikiICYmCisJY2FzZSAiJGFjdHVhbCIgaW4KKwktcnctcnctKikKKwkJOiBoYXBweQorCQk7OworCSopCisJCWVjaG8gT29vcHMsIC5naXQvbG9ncy9yZWZzL2hlYWRzL21hc3RlciBpcyBub3QgMDY2MiBbJGFjdHVhbF0KKwkJZmFsc2UKKwkJOzsKKwllc2FjCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTMwMy13YWNreS1jb25maWcuc2ggYi90L3QxMzAzLXdhY2t5LWNvbmZpZy5zaAppbmRleCA5OTk4NWRjLi5mOThmNGM1IDEwMDc1NQotLS0gYS90L3QxMzAzLXdhY2t5LWNvbmZpZy5zaAorKysgYi90L3QxMzAzLXdhY2t5LWNvbmZpZy5zaApAQCAtMTEsNyArMTEsNyBAQAogY2hlY2soKSB7CiAJZWNobyAiJDIiID5leHBlY3RlZAogCWdpdCBjb25maWcgLS1nZXQgIiQxIiA+YWN0dWFsCi0JZ2l0IGRpZmYgYWN0dWFsIGV4cGVjdGVkCisJdGVzdF9jbXAgYWN0dWFsIGV4cGVjdGVkCiB9CiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmeSBzYW1lIGtleScgJwpAQCAtMzQsNCArMzQsMTAgQEAKIAljaGVjayBzZWN0aW9uMi5rZXkgYmFyCiAnCiAKK1NFQ1RJT049InRlc3QucVwic1xcc3Enc3AgZS5rZXkiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWtlIHN1cmUgZ2l0LWNvbmZpZyBlc2NhcGVzIHNlY3Rpb24gbmFtZXMgcHJvcGVybHknICcKKwlnaXQgY29uZmlnICIkU0VDVElPTiIgYmFyICYmCisJY2hlY2sgIiRTRUNUSU9OIiBiYXIKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNDAwLXVwZGF0ZS1yZWYuc2ggYi90L3QxNDAwLXVwZGF0ZS1yZWYuc2gKaW5kZXggNzhjZDQxMi4uYjhiN2FiNCAxMDA3NTUKLS0tIGEvdC90MTQwMC11cGRhdGUtcmVmLnNoCisrKyBiL3QvdDE0MDAtdXBkYXRlLXJlZi5zaApAQCAtMzIsNiArMzIsMTQgQEAKIAkiY3JlYXRlICRtIiBcCiAJImdpdCB1cGRhdGUtcmVmICRtICRCICRBICYmCiAJIHRlc3QgJEIiJyA9ICQoY2F0IC5naXQvJyIkbSInKScKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImZhaWwgdG8gZGVsZXRlICRtIHdpdGggc3RhbGUgcmVmIiAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLWQgJG0gJEEgJiYKKwl0ZXN0ICRCID0gIiQoY2F0IC5naXQvJG0pIgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZGVsZXRlICRtIiAnCisJZ2l0IHVwZGF0ZS1yZWYgLWQgJG0gJEIgJiYKKwkhIHRlc3QgLWYgLmdpdC8kbQorJwogcm0gLWYgLmdpdC8kbQogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKQEAgLTQ5LDYgKzU3LDE0IEBACiAJImNyZWF0ZSAkbSAoYnkgSEVBRCkiIFwKIAkiZ2l0IHVwZGF0ZS1yZWYgSEVBRCAkQiAkQSAmJgogCSB0ZXN0ICRCIicgPSAkKGNhdCAuZ2l0LyciJG0iJyknCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJmYWlsIHRvIGRlbGV0ZSAkbSAoYnkgSEVBRCkgd2l0aCBzdGFsZSByZWYiICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtZCBIRUFEICRBICYmCisJdGVzdCAkQiA9ICQoY2F0IC5naXQvJG0pCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJkZWxldGUgJG0gKGJ5IEhFQUQpIiAnCisJZ2l0IHVwZGF0ZS1yZWYgLWQgSEVBRCAkQiAmJgorCSEgdGVzdCAtZiAuZ2l0LyRtCisnCiBybSAtZiAuZ2l0LyRtCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJyhub3QpIGNyZWF0ZSBIRUFEIHdpdGggb2xkIHNoYTEnICIKZGlmZiAtLWdpdCBhL3QvdDE0MTAtcmVmbG9nLnNoIGIvdC90MTQxMC1yZWZsb2cuc2gKaW5kZXggNzNmODMwZC4uNWIyNGYwNSAxMDA3NTUKLS0tIGEvdC90MTQxMC1yZWZsb2cuc2gKKysrIGIvdC90MTQxMC1yZWZsb2cuc2gKQEAgLTE4OCwxNiArMTg4LDMwIEBACiAJdGVzdF90aWNrICYmCiAJZ2l0IGNvbW1pdCAtbSB0aWdlciBDICYmCiAKLQl0ZXN0IDUgPSAkKGdpdCByZWZsb2cgfCB3YyAtbCkgJiYKKwlIRUFEX2VudHJ5X2NvdW50PSQoZ2l0IHJlZmxvZyB8IHdjIC1sKQorCW1hc3Rlcl9lbnRyeV9jb3VudD0kKGdpdCByZWZsb2cgc2hvdyBtYXN0ZXIgfCB3YyAtbCkKKworCXRlc3QgJEhFQURfZW50cnlfY291bnQgPSA1ICYmCisJdGVzdCAkbWFzdGVyX2VudHJ5X2NvdW50ID0gNSAmJgorCiAKIAlnaXQgcmVmbG9nIGRlbGV0ZSBtYXN0ZXJAezF9ICYmCiAJZ2l0IHJlZmxvZyBzaG93IG1hc3RlciA+IG91dHB1dCAmJgotCXRlc3QgNCA9ICQod2MgLWwgPCBvdXRwdXQpICYmCisJdGVzdCAkKCgkbWFzdGVyX2VudHJ5X2NvdW50IC0gMSkpID0gJCh3YyAtbCA8IG91dHB1dCkgJiYKKwl0ZXN0ICRIRUFEX2VudHJ5X2NvdW50ID0gJChnaXQgcmVmbG9nIHwgd2MgLWwpICYmCiAJISBncmVwIG94IDwgb3V0cHV0ICYmCiAKKwltYXN0ZXJfZW50cnlfY291bnQ9JCh3YyAtbCA8IG91dHB1dCkKKworCWdpdCByZWZsb2cgZGVsZXRlIEhFQURAezF9ICYmCisJdGVzdCAkKCgkSEVBRF9lbnRyeV9jb3VudCAtMSkpID0gJChnaXQgcmVmbG9nIHwgd2MgLWwpICYmCisJdGVzdCAkbWFzdGVyX2VudHJ5X2NvdW50ID0gJChnaXQgcmVmbG9nIHNob3cgbWFzdGVyIHwgd2MgLWwpICYmCisKKwlIRUFEX2VudHJ5X2NvdW50PSQoZ2l0IHJlZmxvZyB8IHdjIC1sKQorCiAJZ2l0IHJlZmxvZyBkZWxldGUgbWFzdGVyQHswNy4wNC4yMDA1LjE1OjE1OjAwLi0wNzAwfSAmJgogCWdpdCByZWZsb2cgc2hvdyBtYXN0ZXIgPiBvdXRwdXQgJiYKLQl0ZXN0IDMgPSAkKHdjIC1sIDwgb3V0cHV0KSAmJgorCXRlc3QgJCgoJG1hc3Rlcl9lbnRyeV9jb3VudCAtIDEpKSA9ICQod2MgLWwgPCBvdXRwdXQpICYmCiAJISBncmVwIGRyYWdvbiA8IG91dHB1dAogCiAnCmRpZmYgLS1naXQgYS90L3QxNTAwLXJldi1wYXJzZS5zaCBiL3QvdDE1MDAtcmV2LXBhcnNlLnNoCmluZGV4IDM4YTJiZjAuLjg1ZGE0Y2EgMTAwNzU1Ci0tLSBhL3QvdDE1MDAtcmV2LXBhcnNlLnNoCisrKyBiL3QvdDE1MDAtcmV2LXBhcnNlLnNoCkBAIC01MSw4ICs1MSw5IEBACiAKIG1rZGlyIHdvcmsgfHwgZXhpdCAxCiBjZCB3b3JrIHx8IGV4aXQgMQotZXhwb3J0IEdJVF9ESVI9Li4vLmdpdAotZXhwb3J0IEdJVF9DT05GSUc9IiQocHdkKSIvLi4vLmdpdC9jb25maWcKK0dJVF9ESVI9Li4vLmdpdAorR0lUX0NPTkZJRz0iJChwd2QpIi8uLi8uZ2l0L2NvbmZpZworZXhwb3J0IEdJVF9ESVIgR0lUX0NPTkZJRwogCiBnaXQgY29uZmlnIGNvcmUuYmFyZSBmYWxzZQogdGVzdF9yZXZfcGFyc2UgJ0dJVF9ESVI9Li4vLmdpdCwgY29yZS5iYXJlID0gZmFsc2UnIGZhbHNlIGZhbHNlIHRydWUgJycKQEAgLTY0LDggKzY1LDggQEAKIHRlc3RfcmV2X3BhcnNlICdHSVRfRElSPS4uLy5naXQsIGNvcmUuYmFyZSB1bmRlZmluZWQnIGZhbHNlIGZhbHNlIHRydWUgJycKIAogbXYgLi4vLmdpdCAuLi9yZXBvLmdpdCB8fCBleGl0IDEKLWV4cG9ydCBHSVRfRElSPS4uL3JlcG8uZ2l0Ci1leHBvcnQgR0lUX0NPTkZJRz0iJChwd2QpIi8uLi9yZXBvLmdpdC9jb25maWcKK0dJVF9ESVI9Li4vcmVwby5naXQKK0dJVF9DT05GSUc9IiQocHdkKSIvLi4vcmVwby5naXQvY29uZmlnCiAKIGdpdCBjb25maWcgY29yZS5iYXJlIGZhbHNlCiB0ZXN0X3Jldl9wYXJzZSAnR0lUX0RJUj0uLi9yZXBvLmdpdCwgY29yZS5iYXJlID0gZmFsc2UnIGZhbHNlIGZhbHNlIHRydWUgJycKZGlmZiAtLWdpdCBhL3QvdDE1MDEtd29ya3RyZWUuc2ggYi90L3QxNTAxLXdvcmt0cmVlLnNoCmluZGV4IDdlZTM4MjAuLjJlZTg4ZDggMTAwNzU1Ci0tLSBhL3QvdDE1MDEtd29ya3RyZWUuc2gKKysrIGIvdC90MTUwMS13b3JrdHJlZS5zaApAQCAtMzIsMjQgKzMyLDI1IEBACiBtdiAuZ2l0IHJlcG8uZ2l0IHx8IGV4aXQgMQogCiBzYXkgImNvcmUud29ya3RyZWUgPSByZWxhdGl2ZSBwYXRoIgotZXhwb3J0IEdJVF9ESVI9cmVwby5naXQKLWV4cG9ydCBHSVRfQ09ORklHPSIkKHB3ZCkiLyRHSVRfRElSL2NvbmZpZworR0lUX0RJUj1yZXBvLmdpdAorR0lUX0NPTkZJRz0iJChwd2QpIi8kR0lUX0RJUi9jb25maWcKK2V4cG9ydCBHSVRfRElSIEdJVF9DT05GSUcKIHVuc2V0IEdJVF9XT1JLX1RSRUUKIGdpdCBjb25maWcgY29yZS53b3JrdHJlZSAuLi93b3JrCiB0ZXN0X3Jldl9wYXJzZSAnb3V0c2lkZScgICAgICBmYWxzZSBmYWxzZSBmYWxzZQogY2Qgd29yayB8fCBleGl0IDEKLWV4cG9ydCBHSVRfRElSPS4uL3JlcG8uZ2l0Ci1leHBvcnQgR0lUX0NPTkZJRz0iJChwd2QpIi8kR0lUX0RJUi9jb25maWcKK0dJVF9ESVI9Li4vcmVwby5naXQKK0dJVF9DT05GSUc9IiQocHdkKSIvJEdJVF9ESVIvY29uZmlnCiB0ZXN0X3Jldl9wYXJzZSAnaW5zaWRlJyAgICAgICBmYWxzZSBmYWxzZSB0cnVlICcnCiBjZCBzdWIvZGlyIHx8IGV4aXQgMQotZXhwb3J0IEdJVF9ESVI9Li4vLi4vLi4vcmVwby5naXQKLWV4cG9ydCBHSVRfQ09ORklHPSIkKHB3ZCkiLyRHSVRfRElSL2NvbmZpZworR0lUX0RJUj0uLi8uLi8uLi9yZXBvLmdpdAorR0lUX0NPTkZJRz0iJChwd2QpIi8kR0lUX0RJUi9jb25maWcKIHRlc3RfcmV2X3BhcnNlICdzdWJkaXJlY3RvcnknIGZhbHNlIGZhbHNlIHRydWUgc3ViL2Rpci8KIGNkIC4uLy4uLy4uIHx8IGV4aXQgMQogCiBzYXkgImNvcmUud29ya3RyZWUgPSBhYnNvbHV0ZSBwYXRoIgotZXhwb3J0IEdJVF9ESVI9JChwd2QpL3JlcG8uZ2l0Ci1leHBvcnQgR0lUX0NPTkZJRz0kR0lUX0RJUi9jb25maWcKK0dJVF9ESVI9JChwd2QpL3JlcG8uZ2l0CitHSVRfQ09ORklHPSRHSVRfRElSL2NvbmZpZwogZ2l0IGNvbmZpZyBjb3JlLndvcmt0cmVlICIkKHB3ZCkvd29yayIKIHRlc3RfcmV2X3BhcnNlICdvdXRzaWRlJyAgICAgIGZhbHNlIGZhbHNlIGZhbHNlCiBjZCB3b3JrIHx8IGV4aXQgMQpAQCAtNTksMjUgKzYwLDI2IEBACiBjZCAuLi8uLi8uLiB8fCBleGl0IDEKIAogc2F5ICJHSVRfV09SS19UUkVFPXJlbGF0aXZlIHBhdGggKG92ZXJyaWRlIGNvcmUud29ya3RyZWUpIgotZXhwb3J0IEdJVF9ESVI9JChwd2QpL3JlcG8uZ2l0Ci1leHBvcnQgR0lUX0NPTkZJRz0kR0lUX0RJUi9jb25maWcKK0dJVF9ESVI9JChwd2QpL3JlcG8uZ2l0CitHSVRfQ09ORklHPSRHSVRfRElSL2NvbmZpZwogZ2l0IGNvbmZpZyBjb3JlLndvcmt0cmVlIG5vbi1leGlzdGVudAotZXhwb3J0IEdJVF9XT1JLX1RSRUU9d29yaworR0lUX1dPUktfVFJFRT13b3JrCitleHBvcnQgR0lUX1dPUktfVFJFRQogdGVzdF9yZXZfcGFyc2UgJ291dHNpZGUnICAgICAgZmFsc2UgZmFsc2UgZmFsc2UKIGNkIHdvcmsgfHwgZXhpdCAxCi1leHBvcnQgR0lUX1dPUktfVFJFRT0uCitHSVRfV09SS19UUkVFPS4KIHRlc3RfcmV2X3BhcnNlICdpbnNpZGUnICAgICAgIGZhbHNlIGZhbHNlIHRydWUgJycKIGNkIHN1Yi9kaXIgfHwgZXhpdCAxCi1leHBvcnQgR0lUX1dPUktfVFJFRT0uLi8uLgorR0lUX1dPUktfVFJFRT0uLi8uLgogdGVzdF9yZXZfcGFyc2UgJ3N1YmRpcmVjdG9yeScgZmFsc2UgZmFsc2UgdHJ1ZSBzdWIvZGlyLwogY2QgLi4vLi4vLi4gfHwgZXhpdCAxCiAKIG12IHdvcmsgcmVwby5naXQvd29yawogCiBzYXkgIkdJVF9XT1JLX1RSRUU9YWJzb2x1dGUgcGF0aCwgd29yayB0cmVlIGJlbG93IGdpdCBkaXIiCi1leHBvcnQgR0lUX0RJUj0kKHB3ZCkvcmVwby5naXQKLWV4cG9ydCBHSVRfQ09ORklHPSRHSVRfRElSL2NvbmZpZwotZXhwb3J0IEdJVF9XT1JLX1RSRUU9JChwd2QpL3JlcG8uZ2l0L3dvcmsKK0dJVF9ESVI9JChwd2QpL3JlcG8uZ2l0CitHSVRfQ09ORklHPSRHSVRfRElSL2NvbmZpZworR0lUX1dPUktfVFJFRT0kKHB3ZCkvcmVwby5naXQvd29yawogdGVzdF9yZXZfcGFyc2UgJ291dHNpZGUnICAgICAgICAgICAgICBmYWxzZSBmYWxzZSBmYWxzZQogY2QgcmVwby5naXQgfHwgZXhpdCAxCiB0ZXN0X3Jldl9wYXJzZSAnaW4gcmVwby5naXQnICAgICAgICAgICAgICBmYWxzZSB0cnVlICBmYWxzZQpkaWZmIC0tZ2l0IGEvdC90MTUwMi1yZXYtcGFyc2UtcGFyc2VvcHQuc2ggYi90L3QxNTAyLXJldi1wYXJzZS1wYXJzZW9wdC5zaAppbmRleCA3NjJhZjVmLi4zNTA4ZDBhIDEwMDc1NQotLS0gYS90L3QxNTAyLXJldi1wYXJzZS1wYXJzZW9wdC5zaAorKysgYi90L3QxNTAyLXJldi1wYXJzZS1wYXJzZW9wdC5zaApAQCAtMTMsNyArMTMsNyBAQAogICAgIC0tYmFyIC4uLiAgICAgICAgICAgICBzb21lIGNvb2wgb3B0aW9uIC0tYmFyIHdpdGggYW4gYXJndW1lbnQKIAogQW4gb3B0aW9uIGdyb3VwIEhlYWRlcgotICAgIC1DIFsuLi5dICAgICAgICAgICAgICBvcHRpb24gQyB3aXRoIGFuIG9wdGlvbmFsIGFyZ3VtZW50CisgICAgLUNbLi4uXSAgICAgICAgICAgICAgIG9wdGlvbiBDIHdpdGggYW4gb3B0aW9uYWwgYXJndW1lbnQKIAogRXh0cmFzCiAgICAgLS1leHRyYTEgICAgICAgICAgICAgIGxpbmUgYWJvdmUgdXNlZCB0byBjYXVzZSBhIHNlZ2ZhdWx0IGJ1dCBubyBsb25nZXIgZG9lcwpAQCAtMzcsNyArMzcsNyBAQAogRXh0cmFzCiBleHRyYTEgICAgbGluZSBhYm92ZSB1c2VkIHRvIGNhdXNlIGEgc2VnZmF1bHQgYnV0IG5vIGxvbmdlciBkb2VzCiBFT0YKLQlnaXQgZGlmZiBleHBlY3QuZXJyIG91dHB1dC5lcnIKKwl0ZXN0X2NtcCBleHBlY3QuZXJyIG91dHB1dC5lcnIKICcKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNTAzLXJldi1wYXJzZS12ZXJpZnkuc2ggYi90L3QxNTAzLXJldi1wYXJzZS12ZXJpZnkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTUyNDRjOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE1MDMtcmV2LXBhcnNlLXZlcmlmeS5zaApAQCAtMCwwICsxLDEwNyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBDaHJpc3RpYW4gQ291ZGVyCisjCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGdpdCByZXYtcGFyc2UgLS12ZXJpZnknCisKK2V4ZWMgPC9kZXYvbnVsbAorCisuIC4vdGVzdC1saWIuc2gKKworYWRkX2xpbmVfaW50b19maWxlKCkKK3sKKyAgICBfbGluZT0kMQorICAgIF9maWxlPSQyCisKKyAgICBpZiBbIC1mICIkX2ZpbGUiIF07IHRoZW4KKyAgICAgICAgZWNobyAiJF9saW5lIiA+PiAkX2ZpbGUgfHwgcmV0dXJuICQ/CisgICAgICAgIE1TRz0iQWRkIDwkX2xpbmU+IGludG8gPCRfZmlsZT4uIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiJF9saW5lIiA+ICRfZmlsZSB8fCByZXR1cm4gJD8KKyAgICAgICAgZ2l0IGFkZCAkX2ZpbGUgfHwgcmV0dXJuICQ/CisgICAgICAgIE1TRz0iQ3JlYXRlIGZpbGUgPCRfZmlsZT4gd2l0aCA8JF9saW5lPiBpbnNpZGUuIgorICAgIGZpCisKKyAgICB0ZXN0X3RpY2sKKyAgICBnaXQtY29tbWl0IC0tcXVpZXQgLW0gIiRNU0ciICRfZmlsZQorfQorCitIQVNIMT0KK0hBU0gyPQorSEFTSDM9CitIQVNIND0KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGJhc2ljIHJlcG8gd2l0aCAxIGZpbGUgKGhlbGxvKSBhbmQgNCBjb21taXRzJyAnCisJYWRkX2xpbmVfaW50b19maWxlICIxOiBIZWxsbyBXb3JsZCIgaGVsbG8gJiYKKwlIQVNIMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlhZGRfbGluZV9pbnRvX2ZpbGUgIjI6IEEgbmV3IGRheSBmb3IgZ2l0IiBoZWxsbyAmJgorCUhBU0gyPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWFkZF9saW5lX2ludG9fZmlsZSAiMzogQW5vdGhlciBuZXcgZGF5IGZvciBnaXQiIGhlbGxvICYmCisJSEFTSDM9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJYWRkX2xpbmVfaW50b19maWxlICI0OiBDaWFvIGZvciBub3ciIGhlbGxvICYmCisJSEFTSDQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dvcmtzIHdpdGggb25lIGdvb2QgcmV2JyAnCisJcmV2X2hhc2gxPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAkSEFTSDEpICYmCisJdGVzdCAiJHJldl9oYXNoMSIgPSAiJEhBU0gxIiAmJgorCXJldl9oYXNoMj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgJEhBU0gyKSAmJgorCXRlc3QgIiRyZXZfaGFzaDIiID0gIiRIQVNIMiIgJiYKKwlyZXZfaGFzaDM9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICRIQVNIMykgJiYKKwl0ZXN0ICIkcmV2X2hhc2gzIiA9ICIkSEFTSDMiICYmCisJcmV2X2hhc2g0PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAkSEFTSDQpICYmCisJdGVzdCAiJHJldl9oYXNoNCIgPSAiJEhBU0g0IiAmJgorCXJldl9tYXN0ZXI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcikgJiYKKwl0ZXN0ICIkcmV2X21hc3RlciIgPSAiJEhBU0g0IiAmJgorCXJldl9oZWFkPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCXRlc3QgIiRyZXZfaGVhZCIgPSAiJEhBU0g0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlscyB3aXRoIGFueSBiYWQgcmV2IG9yIG1hbnkgZ29vZCByZXZzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAyPmVycm9yICYmCisJZ3JlcCAic2luZ2xlIHJldmlzaW9uIiBlcnJvciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgZm9vIDI+ZXJyb3IgJiYKKwlncmVwICJzaW5nbGUgcmV2aXNpb24iIGVycm9yICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEIGJhciAyPmVycm9yICYmCisJZ3JlcCAic2luZ2xlIHJldmlzaW9uIiBlcnJvciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgYmF6IEhFQUQgMj5lcnJvciAmJgorCWdyZXAgInNpbmdsZSByZXZpc2lvbiIgZXJyb3IgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICRIQVNIMiBIRUFEIDI+ZXJyb3IgJiYKKwlncmVwICJzaW5nbGUgcmV2aXNpb24iIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxzIHNpbGVudGx5IHdoZW4gdXNpbmcgLXEnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tcXVpZXQgMj5lcnJvciAmJgorCXRlc3QgLXogIiQoY2F0IGVycm9yKSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC1xIC0tdmVyaWZ5IGZvbyAyPmVycm9yICYmCisJdGVzdCAteiAiJChjYXQgZXJyb3IpIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgSEVBRCBiYXIgMj5lcnJvciAmJgorCXRlc3QgLXogIiQoY2F0IGVycm9yKSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tcXVpZXQgLS12ZXJpZnkgYmF6IEhFQUQgMj5lcnJvciAmJgorCXRlc3QgLXogIiQoY2F0IGVycm9yKSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC1xIC0tdmVyaWZ5ICRIQVNIMiBIRUFEIDI+ZXJyb3IgJiYKKwl0ZXN0IC16ICIkKGNhdCBlcnJvcikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIHN0ZG91dCBvdXRwdXQgb24gZXJyb3InICcKKwl0ZXN0IC16ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkpIiAmJgorCXRlc3QgLXogIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBmb28pIiAmJgorCXRlc3QgLXogIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBiYXogSEVBRCkiICYmCisJdGVzdCAteiAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgYmFyKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgJEhBU0gyIEhFQUQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgLS1kZWZhdWx0JyAnCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLWRlZmF1bHQgbWFzdGVyICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLWRlZmF1bHQgbWFzdGVyIEhFQUQgJiYKKwlnaXQgcmV2LXBhcnNlIC0tZGVmYXVsdCBtYXN0ZXIgLS12ZXJpZnkgJiYKKwlnaXQgcmV2LXBhcnNlIC0tZGVmYXVsdCBtYXN0ZXIgLS12ZXJpZnkgSEVBRCAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCAtLWRlZmF1bHQgbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBmb28gLS1kZWZhdWx0IG1hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1kZWZhdWx0IEhFQUQgLS12ZXJpZnkgYmFyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLWRlZmF1bHQgSEVBRCBiYXogJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tZGVmYXVsdCBmb28gLS12ZXJpZnkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tZGVmYXVsdCBiYXIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDAyLWNoZWNrb3V0LWNhY2hlLXUuc2ggYi90L3QyMDAyLWNoZWNrb3V0LWNhY2hlLXUuc2gKaW5kZXggMGY0NDFiYy4uNzAzNjFjOCAxMDA3NTUKLS0tIGEvdC90MjAwMi1jaGVja291dC1jYWNoZS11LnNoCisrKyBiL3QvdDIwMDItY2hlY2tvdXQtY2FjaGUtdS5zaApAQCAtMjEsMTMgKzIxLDEzIEBACiBybSAtZiBwYXRoMCAmJgogZ2l0IHJlYWQtdHJlZSAkdCAmJgogZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC1hICYmCi0hIGdpdCBkaWZmLWZpbGVzIHwgZGlmZiAtIC9kZXYvbnVsbCcKK3Rlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLWZpbGVzIC0tZXhpdC1jb2RlJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICd3aXRoIC11LCBnaXQgY2hlY2tvdXQtaW5kZXggcGlja3MgdXAgc3RhdCBpbmZvcm1hdGlvbiBmcm9tIG5ldyBmaWxlcy4nICcKIHJtIC1mIHBhdGgwICYmCiBnaXQgcmVhZC10cmVlICR0ICYmCiBnaXQgY2hlY2tvdXQtaW5kZXggLXUgLWYgLWEgJiYKLWdpdCBkaWZmLWZpbGVzIHwgZGlmZiAtIC9kZXYvbnVsbCcKK2dpdCBkaWZmLWZpbGVzIC0tZXhpdC1jb2RlJwogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIxMDMtdXBkYXRlLWluZGV4LWlnbm9yZS1taXNzaW5nLnNoIGIvdC90MjEwMy11cGRhdGUtaW5kZXgtaWdub3JlLW1pc3Npbmcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzMyNjk0ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIxMDMtdXBkYXRlLWluZGV4LWlnbm9yZS1taXNzaW5nLnNoCkBAIC0wLDAgKzEsODkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd1cGRhdGUtaW5kZXggd2l0aCBvcHRpb25zJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBiYXNpY3MgJworCT5vbmUgJiYKKwk+dHdvICYmCisJPnRocmVlICYmCisKKwkjIG5lZWQgLS1hZGQgd2hlbiBhZGRpbmcKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IG9uZSAmJgorCXRlc3QgLXogIiQoZ2l0IGxzLWZpbGVzKSIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIG9uZSAmJgorCXRlc3Qgem9uZSA9ICJ6JChnaXQgbHMtZmlsZXMpIiAmJgorCisJIyB1cGRhdGUtaW5kZXggaXMgYXRvbWljCisJZWNobyAxID5vbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IG9uZSB0d28gJiYKKwllY2hvICJNCW9uZSIgPmV4cGVjdCAmJgorCWdpdCBkaWZmLWZpbGVzIC0tbmFtZS1zdGF0dXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgb25lIHR3byB0aHJlZSAmJgorCWZvciBpIGluIG9uZSB0aHJlZSB0d287IGRvIGVjaG8gJGk7IGRvbmUgPmV4cGVjdCAmJgorCWdpdCBscy1maWxlcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJdGVzdF90aWNrICYmCisJKAorCQl0ZXN0X2NyZWF0ZV9yZXBvIHh5enp5ICYmCisJCWNkIHh5enp5ICYmCisJCT5maWxlICYmCisJCWdpdCBhZGQgZmlsZQorCQlnaXQgY29tbWl0IC1tICJzdWIgaW5pdGlhbCIKKwkpICYmCisJZ2l0IGFkZCB4eXp6eSAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IHRhZyBpbml0aWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0taWdub3JlLW1pc3NpbmcgLS1yZWZyZXNoJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJZWNobyAyID5vbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWVjaG8gMSA+b25lICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlybSAtZiB0d28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1pZ25vcmUtbWlzc2luZyAtLXJlZnJlc2gKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXVubWVyZ2VkIC0tcmVmcmVzaCcgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCWluZm89JChnaXQgbHMtZmlsZXMgLXMgb25lIHwgc2VkIC1lICJzLyAwCS8gMQkvIikgJiYKKwlnaXQgcm0gLS1jYWNoZWQgb25lICYmCisJZWNobyAiJGluZm8iIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS11bm1lcmdlZCAtLXJlZnJlc2ggJiYKKwllY2hvIDIgPnR3byAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS11bm1lcmdlZCAtLXJlZnJlc2ggPmFjdHVhbCAmJgorCWdyZXAgdHdvIGFjdHVhbCAmJgorCSEgZ3JlcCBvbmUgYWN0dWFsICYmCisJISBncmVwIHRocmVlIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWlnbm9yZS1zdWJtb2R1bGVzIC0tcmVmcmVzaCAoMSknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwlybSAtZiB0d28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0taWdub3JlLXN1Ym1vZHVsZXMgLS1yZWZyZXNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0taWdub3JlLXN1Ym1vZHVsZXMgLS1yZWZyZXNoICgyKScgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfdGljayAmJgorCSgKKwkJY2QgeHl6enkgJiYKKwkJZ2l0IGNvbW1pdCAtbSAic3ViIHNlY29uZCIgLS1hbGxvdy1lbXB0eQorCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS1pZ25vcmUtbWlzc2luZyAtLXJlZnJlc2ggJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0taWdub3JlLXN1Ym1vZHVsZXMgLS1yZWZyZXNoCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjIwMC1hZGQtdXBkYXRlLnNoIGIvdC90MjIwMC1hZGQtdXBkYXRlLnNoCmluZGV4IGI2NjQzNDEuLmY1N2E2ZTAgMTAwNzU1Ci0tLSBhL3QvdDIyMDAtYWRkLXVwZGF0ZS5zaAorKysgYi90L3QyMjAwLWFkZC11cGRhdGUuc2gKQEAgLTExMSw0ICsxMTEsMjEgQEAKIAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgLW4gLXUgc2hvdWxkIG5vdCBhZGQgYnV0IGp1c3QgcmVwb3J0JyAnCisKKwkoCisJCWVjaG8gImFkZCAnXCcnY2hlY2snXCcnIiAmJgorCQllY2hvICJyZW1vdmUgJ1wnJ3RvcCdcJyciCisJKSA+ZXhwZWN0ICYmCisJYmVmb3JlPSQoZ2l0IGxzLWZpbGVzIC1zIGNoZWNrIHRvcCkgJiYKKwllY2hvIGNoYW5nZWQgPj5jaGVjayAmJgorCXJtIC1mIHRvcCAmJgorCWdpdCBhZGQgLW4gLXUgPmFjdHVhbCAmJgorCWFmdGVyPSQoZ2l0IGxzLWZpbGVzIC1zIGNoZWNrIHRvcCkgJiYKKworCXRlc3QgIiRiZWZvcmUiID0gIiRhZnRlciIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMDAxLWxzLWZpbGVzLW90aGVycy1leGNsdWRlLnNoIGIvdC90MzAwMS1scy1maWxlcy1vdGhlcnMtZXhjbHVkZS5zaAppbmRleCA1NWYwNTdjLi4xY2FlYWNhIDEwMDc1NQotLS0gYS90L3QzMDAxLWxzLWZpbGVzLW90aGVycy1leGNsdWRlLnNoCisrKyBiL3QvdDMwMDEtbHMtZmlsZXMtb3RoZXJzLWV4Y2x1ZGUuc2gKQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAtLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT0uZ2l0aWdub3JlIFwKICAgICAgICAtLWV4Y2x1ZGUtZnJvbT0uZ2l0L2lnbm9yZSBcCiAgICAgICAgPm91dHB1dCAmJgotICAgICBnaXQgZGlmZiBleHBlY3Qgb3V0cHV0JworICAgICB0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0JwogCiAjIFRlc3QgXHJcbiAoTVNET1MtbGlrZSBzeXN0ZW1zKQogcHJpbnRmICcqLjFcclxuLyouM1xyXG4hKi42XHJcbicgPi5naXRpZ25vcmUKQEAgLTc3LDcgKzc3LDcgQEAKICAgICAgICAtLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT0uZ2l0aWdub3JlIFwKICAgICAgICAtLWV4Y2x1ZGUtZnJvbT0uZ2l0L2lnbm9yZSBcCiAgICAgICAgPm91dHB1dCAmJgotICAgICBnaXQgZGlmZiBleHBlY3Qgb3V0cHV0JworICAgICB0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0JwogCiBjYXQgPiBleGNsdWRlcy1maWxlIDw8IEVPRgogKi5bMS04XQpkaWZmIC0tZ2l0IGEvdC90MzAwMi1scy1maWxlcy1kYXNocGF0aC5zaCBiL3QvdDMwMDItbHMtZmlsZXMtZGFzaHBhdGguc2gKaW5kZXggODY4N2EwMS4uODcwNGIwNCAxMDA3NTUKLS0tIGEvdC90MzAwMi1scy1maWxlcy1kYXNocGF0aC5zaAorKysgYi90L3QzMDAyLWxzLWZpbGVzLWRhc2hwYXRoLnNoCkBAIC0yMyw3ICsyMyw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnZ2l0IGxzLWZpbGVzIHdpdGhvdXQgcGF0aCByZXN0cmljdGlvbi4nIFwKICAgICAnZ2l0IGxzLWZpbGVzIC0tb3RoZXJzID5vdXRwdXQgJiYKLSAgICAgZ2l0IGRpZmYgb3V0cHV0IC0gPDxFT0YKKyAgICAgdGVzdF9jbXAgb3V0cHV0IC0gPDxFT0YKIC0tCiAtZm9vCiBvdXRwdXQKQEAgLTM0LDcgKzM0LDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdnaXQgbHMtZmlsZXMgd2l0aCBwYXRoIHJlc3RyaWN0aW9uLicgXAogICAgICdnaXQgbHMtZmlsZXMgLS1vdGhlcnMgcGF0aDAgPm91dHB1dCAmJgotCWdpdCBkaWZmIG91dHB1dCAtIDw8RU9GCisJdGVzdF9jbXAgb3V0cHV0IC0gPDxFT0YKIHBhdGgwCiBFT0YKICcKQEAgLTQyLDcgKzQyLDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdnaXQgbHMtZmlsZXMgd2l0aCBwYXRoIHJlc3RyaWN0aW9uIHdpdGggLS0uJyBcCiAgICAgJ2dpdCBscy1maWxlcyAtLW90aGVycyAtLSBwYXRoMCA+b3V0cHV0ICYmCi0JZ2l0IGRpZmYgb3V0cHV0IC0gPDxFT0YKKwl0ZXN0X2NtcCBvdXRwdXQgLSA8PEVPRgogcGF0aDAKIEVPRgogJwpAQCAtNTAsNyArNTAsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2dpdCBscy1maWxlcyB3aXRoIHBhdGggcmVzdHJpY3Rpb24gd2l0aCAtLSAtLS4nIFwKICAgICAnZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIC0tIC0tID5vdXRwdXQgJiYKLQlnaXQgZGlmZiBvdXRwdXQgLSA8PEVPRgorCXRlc3RfY21wIG91dHB1dCAtIDw8RU9GCiAtLQogRU9GCiAnCkBAIC01OCw3ICs1OCw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnZ2l0IGxzLWZpbGVzIHdpdGggbm8gcGF0aCByZXN0cmljdGlvbi4nIFwKICAgICAnZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIC0tID5vdXRwdXQgJiYKLQlnaXQgZGlmZiBvdXRwdXQgLSA8PEVPRgorCXRlc3RfY21wIG91dHB1dCAtIDw8RU9GCiAtLQogLWZvbwogb3V0cHV0CmRpZmYgLS1naXQgYS90L3QzMDMwLW1lcmdlLXJlY3Vyc2l2ZS5zaCBiL3QvdDMwMzAtbWVyZ2UtcmVjdXJzaXZlLnNoCmluZGV4IDYwN2Y1N2YuLmFmZjM2MDMgMTAwNzU1Ci0tLSBhL3QvdDMwMzAtbWVyZ2UtcmVjdXJzaXZlLnNoCisrKyBiL3QvdDMwMzAtbWVyZ2UtcmVjdXJzaXZlLnNoCkBAIC00Myw3ICs0Myw3IEBACiAJCWVjaG8gIjEwMDY0NCAkbzAgMAljIgogCQllY2hvICIxMDA2NDQgJG8xIDAJZC9lIgogCSkgPmV4cGVjdGVkICYmCi0JZ2l0IGRpZmYgLXUgZXhwZWN0ZWQgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIDInICcKQEAgLTYxLDcgKzYxLDcgQEAKIAkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiCiAJCWVjaG8gIjEwMDY0NCAkbzAgMAlkL2UiCiAJKSA+ZXhwZWN0ZWQgJiYKLQlnaXQgZGlmZiAtdSBleHBlY3RlZCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKIAogCWVjaG8gZ29vZGJ5ZSA+PmEgJiYKIAlvMj0kKGdpdCBoYXNoLW9iamVjdCBhKSAmJgpAQCAtODIsNyArODIsNyBAQAogCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKIAkJZWNobyAiMTAwNjQ0ICRvMCAwCWQvZSIKIAkpID5leHBlY3RlZCAmJgotCWdpdCBkaWZmIC11IGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAzJyAnCkBAIC0xMDAsNyArMTAwLDcgQEAKIAkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiCiAJCWVjaG8gIjEwMDY0NCAkbzAgMAlkL2UiCiAJKSA+ZXhwZWN0ZWQgJiYKLQlnaXQgZGlmZiAtdSBleHBlY3RlZCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKIAogCXJtIC1mIGIgJiYgbWtkaXIgYiAmJiBlY2hvIGRmLTEgPmIvYyAmJiBnaXQgYWRkIGIvYyAmJgogCW8zPSQoZ2l0IGhhc2gtb2JqZWN0IGIvYykgJiYKQEAgLTExOSw3ICsxMTksNyBAQAogCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKIAkJZWNobyAiMTAwNjQ0ICRvMCAwCWQvZSIKIAkpID5leHBlY3RlZCAmJgotCWdpdCBkaWZmIC11IGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCA0JyAnCkBAIC0xMzcsNyArMTM3LDcgQEAKIAkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiCiAJCWVjaG8gIjEwMDY0NCAkbzAgMAlkL2UiCiAJKSA+ZXhwZWN0ZWQgJiYKLQlnaXQgZGlmZiAtdSBleHBlY3RlZCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKIAogCXJtIC1mIGEgJiYgbWtkaXIgYSAmJiBlY2hvIGRmLTIgPmEvYyAmJiBnaXQgYWRkIGEvYyAmJgogCW80PSQoZ2l0IGhhc2gtb2JqZWN0IGEvYykgJiYKQEAgLTE1Niw3ICsxNTYsNyBAQAogCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKIAkJZWNobyAiMTAwNjQ0ICRvMCAwCWQvZSIKIAkpID5leHBlY3RlZCAmJgotCWdpdCBkaWZmIC11IGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCA1JyAnCkBAIC0xNzQsNyArMTc0LDcgQEAKIAkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiCiAJCWVjaG8gIjEwMDY0NCAkbzAgMAlkL2UiCiAJKSA+ZXhwZWN0ZWQgJiYKLQlnaXQgZGlmZiAtdSBleHBlY3RlZCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKIAogCXJtIC1mIGIgJiYKIAllY2hvIHJlbW92ZS1jb25mbGljdCA+YSAmJgpAQCAtMTk1LDcgKzE5NSw3IEBACiAJCWVjaG8gIjEwMDY0NCAkbzAgMAljIgogCQllY2hvICIxMDA2NDQgJG8wIDAJZC9lIgogCSkgPmV4cGVjdGVkICYmCi0JZ2l0IGRpZmYgLXUgZXhwZWN0ZWQgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAKICcKIApAQCAtMjE0LDcgKzIxNCw3IEBACiAJCWVjaG8gIjEwMDY0NCAkbzAgMAljIgogCQllY2hvICIxMDA2NDQgJG8wIDAJZC9lIgogCSkgPmV4cGVjdGVkICYmCi0JZ2l0IGRpZmYgLXUgZXhwZWN0ZWQgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCiAKIAlybSAtZnIgZCAmJiBlY2hvIGRmLTMgPmQgJiYgZ2l0IGFkZCBkICYmCiAJbzY9JChnaXQgaGFzaC1vYmplY3QgZCkgJiYKQEAgLTIzMyw3ICsyMzMsNyBAQAogCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKIAkJZWNobyAiMTAwNjQ0ICRvNiAwCWQiCiAJKSA+ZXhwZWN0ZWQgJiYKLQlnaXQgZGlmZiAtdSBleHBlY3RlZCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtcmVjdXJzaXZlIHNpbXBsZScgJwpAQCAtMjY1LDcgKzI2NSw3IEBACiAJCWVjaG8gIjEwMDY0NCAkbzAgMAljIgogCQllY2hvICIxMDA2NDQgJG8xIDAJZC9lIgogCSkgPmV4cGVjdGVkICYmCi0JZ2l0IGRpZmYgLXUgZXhwZWN0ZWQgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAKICcKIApAQCAtMjk3LDcgKzI5Nyw3IEBACiAJCWVjaG8gIjEwMDY0NCAkbzAgMAljIgogCQllY2hvICIxMDA2NDQgJG8xIDAJZC9lIgogCSkgPmV4cGVjdGVkICYmCi0JZ2l0IGRpZmYgLXUgZXhwZWN0ZWQgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAKICcKIApAQCAtMzE4LDcgKzMxOCw3IEBACiAJCWVjaG8gIjEwMDY0NCAkbzAgMAljIgogCQllY2hvICIxMDA2NDQgJG8xIDAJZC9lIgogCSkgPmV4cGVjdGVkICYmCi0JZ2l0IGRpZmYgLXUgZXhwZWN0ZWQgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAKICcKIApAQCAtMzUyLDcgKzM1Miw3IEBACiAJCWVjaG8gIjEwMDY0NCAkbzAgMAljIgogCQllY2hvICIxMDA2NDQgJG8xIDAJZC9lIgogCSkgPmV4cGVjdGVkICYmCi0JZ2l0IGRpZmYgLXUgZXhwZWN0ZWQgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAKICcKIApAQCAtMzg2LDcgKzM4Niw3IEBACiAJCWVjaG8gIjEwMDY0NCAkbzAgMAljIgogCQllY2hvICIxMDA2NDQgJG8xIDAJZC9lIgogCSkgPmV4cGVjdGVkICYmCi0JZ2l0IGRpZmYgLXUgZXhwZWN0ZWQgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAKICcKIApAQCAtNDIwLDcgKzQyMCw3IEBACiAJCWVjaG8gIjEwMDY0NCAkbzAgMQlkL2UiCiAJCWVjaG8gIjEwMDY0NCAkbzEgMglkL2UiCiAJKSA+ZXhwZWN0ZWQgJiYKLQlnaXQgZGlmZiAtdSBleHBlY3RlZCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKIAogJwogCkBAIC00NTQsNyArNDU0LDcgQEAKIAkJZWNobyAiMTAwNjQ0ICRvMCAxCWQvZSIKIAkJZWNobyAiMTAwNjQ0ICRvMSAzCWQvZSIKIAkpID5leHBlY3RlZCAmJgotCWdpdCBkaWZmIC11IGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogCiAnCiAKQEAgLTQ4MCw3ICs0ODAsNyBAQAogCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKIAkJZWNobyAiMTAwNjQ0ICRvMSAwCWQvZSIKIAkpID5leHBlY3RlZCAmJgotCWdpdCBkaWZmIC11IGV4cGVjdGVkIGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgogCiAJZ2l0IHJlYWQtdHJlZSAtLXByZWZpeD1hMS8gbWFzdGVyICYmCiAJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwgJiYKQEAgLTQ5OCw3ICs0OTgsNyBAQAogCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKIAkJZWNobyAiMTAwNjQ0ICRvMSAwCWQvZSIKIAkpID5leHBlY3RlZCAmJgotCWdpdCBkaWZmIC11IGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogCiAJZ2l0IHJlYWQtdHJlZSAtLXByZWZpeD16LyBtYXN0ZXIgJiYKIAlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgpAQCAtNTIwLDcgKzUyMCw3IEBACiAJCWVjaG8gIjEwMDY0NCAkbzAgMAl6L2MiCiAJCWVjaG8gIjEwMDY0NCAkbzEgMAl6L2QvZSIKIAkpID5leHBlY3RlZCAmJgotCWdpdCBkaWZmIC11IGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogCiAnCiAKZGlmZiAtLWdpdCBhL3QvdDMwNDAtc3VicHJvamVjdHMtYmFzaWMuc2ggYi90L3QzMDQwLXN1YnByb2plY3RzLWJhc2ljLnNoCmluZGV4IDc5YjlmMjMuLmY2OTczZTkgMTAwNzU1Ci0tLSBhL3QvdDMwNDAtc3VicHJvamVjdHMtYmFzaWMuc2gKKysrIGIvdC90MzA0MC1zdWJwcm9qZWN0cy1iYXNpYy5zaApAQCAtMjQsNyArMjQsNyBAQAogICAgIGdpdCBhZGQgc3ViMiAmJgogICAgIGdpdCBjb21taXQgLXEgLW0gInN1YnByb2plY3RzIGFkZGVkIiAmJgogICAgIGdpdCBkaWZmLXRyZWUgLS1hYmJyZXY9NSBIRUFEXiBIRUFEIHxjdXQgLWQiICIgLWYtMyw1LSA+Y3VycmVudCAmJgotICAgIGdpdCBkaWZmIGV4cGVjdGVkIGN1cnJlbnQnCisgICAgdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudCcKIAogZ2l0IGJyYW5jaCBzYXZlIEhFQUQKIApAQCAtNjIsNyArNjIsNyBAQAogICAgICdnaXQgbHMtZmlsZXMgLXMgPmV4cGVjdGVkICYmCiAgICAgZ2l0IGNsb25lIC1sIC1zIC4gY2xvbmVkICYmCiAgICAgKCBjZCBjbG9uZWQgJiYgZ2l0IGxzLWZpbGVzIC1zICkgPmN1cnJlbnQgJiYKLSAgICBnaXQgZGlmZiBleHBlY3RlZCBjdXJyZW50JworICAgIHRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92aW5nIGFuZCBhZGRpbmcgc3VicHJvamVjdCcgXAogICAgICdnaXQgdXBkYXRlLWluZGV4IC0tZm9yY2UtcmVtb3ZlIC0tIHN1YjIgJiYKZGlmZiAtLWdpdCBhL3QvdDMwNTAtc3VicHJvamVjdHMtZmV0Y2guc2ggYi90L3QzMDUwLXN1YnByb2plY3RzLWZldGNoLnNoCmluZGV4IDJiMjFiMTAuLjQyNjFlOTYgMTAwNzU1Ci0tLSBhL3QvdDMwNTAtc3VicHJvamVjdHMtZmV0Y2guc2gKKysrIGIvdC90MzA1MC1zdWJwcm9qZWN0cy1mZXRjaC5zaApAQCAtMjAsNyArMjAsNyBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIGNsb25lICcKLQlnaXQgY2xvbmUgZmlsZTovL2Bwd2RgLy5naXQgY2xvbmVkICYmCisJZ2l0IGNsb25lICJmaWxlOi8vJChwd2QpLy5naXQiIGNsb25lZCAmJgogCShnaXQgcmV2LXBhcnNlIEhFQUQ7IGdpdCBscy1maWxlcyAtcykgPmV4cGVjdGVkICYmCiAJKAogCQljZCBjbG9uZWQgJiYKZGlmZiAtLWdpdCBhL3QvdDMxMDAtbHMtdHJlZS1yZXN0cmljdC5zaCBiL3QvdDMxMDAtbHMtdHJlZS1yZXN0cmljdC5zaAppbmRleCA0NjQyN2UzLi42ZTZhMjU0IDEwMDc1NQotLS0gYS90L3QzMTAwLWxzLXRyZWUtcmVzdHJpY3Quc2gKKysrIGIvdC90MzEwMC1scy10cmVlLXJlc3RyaWN0LnNoCkBAIC0zNSw3ICszNSw3IEBACiBfeDQwPSIkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwIgogdGVzdF9vdXRwdXQgKCkgewogICAgIHNlZCAtZSAicy8gJF94NDAJLyBYCS8iIDxjdXJyZW50ID5jaGVjawotICAgIGdpdCBkaWZmIGV4cGVjdGVkIGNoZWNrCisgICAgdGVzdF9jbXAgZXhwZWN0ZWQgY2hlY2sKIH0KIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCmRpZmYgLS1naXQgYS90L3QzMTAxLWxzLXRyZWUtZGlybmFtZS5zaCBiL3QvdDMxMDEtbHMtdHJlZS1kaXJuYW1lLnNoCmluZGV4IDcwZjljZTkuLjRkZDdkMTIgMTAwNzU1Ci0tLSBhL3QvdDMxMDEtbHMtdHJlZS1kaXJuYW1lLnNoCisrKyBiL3QvdDMxMDEtbHMtdHJlZS1kaXJuYW1lLnNoCkBAIC00Myw3ICs0Myw3IEBACiBfeDQwPSIkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwIgogdGVzdF9vdXRwdXQgKCkgewogICAgIHNlZCAtZSAicy8gJF94NDAJLyBYCS8iIDxjdXJyZW50ID5jaGVjawotICAgIGdpdCBkaWZmIGV4cGVjdGVkIGNoZWNrCisgICAgdGVzdF9jbXAgZXhwZWN0ZWQgY2hlY2sKIH0KIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCmRpZmYgLS1naXQgYS90L3QzMjAwLWJyYW5jaC5zaCBiL3QvdDMyMDAtYnJhbmNoLnNoCmluZGV4IGNiNWY3YTQuLjhkODc2ODYgMTAwNzU1Ci0tLSBhL3QvdDMyMDAtYnJhbmNoLnNoCisrKyBiL3QvdDMyMDAtYnJhbmNoLnNoCkBAIC0yMjQsNCArMjI0LDIzOCBAQAogCXRlc3QgLXogIiQoZ2l0IGNvbmZpZyBicmFuY2guYWxsMS5tZXJnZSkiCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSBsb2NhbCBvbiBhIHRyYWNrZWQgbG9jYWwgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXByZWJhc2UgbG9jYWwgJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9vIHx8IGdpdC1mZXRjaCBsb2NhbCkgJiYKKwlnaXQgYnJhbmNoIG15YmFzZSAmJgorCWdpdCBicmFuY2ggLS10cmFjayBteXIxIG15YmFzZSAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMS5yZW1vdGUpIiA9IC4gJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjEubWVyZ2UpIiA9IHJlZnMvaGVhZHMvbXliYXNlICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXIxLnJlYmFzZSkiID0gdHJ1ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgYWx3YXlzIG9uIGEgdHJhY2tlZCBsb2NhbCBicmFuY2gnICcKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSBhbHdheXMgJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9vIHx8IGdpdC1mZXRjaCBsb2NhbCkgJiYKKwlnaXQgYnJhbmNoIG15YmFzZTIgJiYKKwlnaXQgYnJhbmNoIC0tdHJhY2sgbXlyMiBteWJhc2UgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjIucmVtb3RlKSIgPSAuICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXIyLm1lcmdlKSIgPSByZWZzL2hlYWRzL215YmFzZSAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMi5yZWJhc2UpIiA9IHRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIHJlbW90ZSBvbiBhIHRyYWNrZWQgbG9jYWwgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXByZWJhc2UgcmVtb3RlICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbyB8fCBnaXQtZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCBteWJhc2UzICYmCisJZ2l0IGJyYW5jaCAtLXRyYWNrIG15cjMgbXliYXNlMiAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMy5yZW1vdGUpIiA9IC4gJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjMubWVyZ2UpIiA9IHJlZnMvaGVhZHMvbXliYXNlMiAmJgorCSEgdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXIzLnJlYmFzZSkiID0gdHJ1ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgbmV2ZXIgb24gYSB0cmFja2VkIGxvY2FsIGJyYW5jaCcgJworCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwcmViYXNlIG5ldmVyICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbyB8fCBnaXQtZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCBteWJhc2U0ICYmCisJZ2l0IGJyYW5jaCAtLXRyYWNrIG15cjQgbXliYXNlMiAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyNC5yZW1vdGUpIiA9IC4gJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjQubWVyZ2UpIiA9IHJlZnMvaGVhZHMvbXliYXNlMiAmJgorCSEgdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI0LnJlYmFzZSkiID0gdHJ1ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgbG9jYWwgb24gYSB0cmFja2VkIHJlbW90ZSBicmFuY2gnICcKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSBsb2NhbCAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQtZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLXRyYWNrIG15cjUgbG9jYWwvbWFzdGVyICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI1LnJlbW90ZSkiID0gbG9jYWwgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjUubWVyZ2UpIiA9IHJlZnMvaGVhZHMvbWFzdGVyICYmCisJISB0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjUucmViYXNlKSIgPSB0cnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSBuZXZlciBvbiBhIHRyYWNrZWQgcmVtb3RlIGJyYW5jaCcgJworCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwcmViYXNlIG5ldmVyICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbWFzdGVyIHx8IGdpdC1mZXRjaCBsb2NhbCkgJiYKKwlnaXQgYnJhbmNoIC0tdHJhY2sgbXlyNiBsb2NhbC9tYXN0ZXIgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjYucmVtb3RlKSIgPSBsb2NhbCAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyNi5tZXJnZSkiID0gcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwkhIHRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyNi5yZWJhc2UpIiA9IHRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIHJlbW90ZSBvbiBhIHRyYWNrZWQgcmVtb3RlIGJyYW5jaCcgJworCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwcmViYXNlIHJlbW90ZSAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQtZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLXRyYWNrIG15cjcgbG9jYWwvbWFzdGVyICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI3LnJlbW90ZSkiID0gbG9jYWwgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjcubWVyZ2UpIiA9IHJlZnMvaGVhZHMvbWFzdGVyICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI3LnJlYmFzZSkiID0gdHJ1ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgYWx3YXlzIG9uIGEgdHJhY2tlZCByZW1vdGUgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXByZWJhc2UgcmVtb3RlICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbWFzdGVyIHx8IGdpdC1mZXRjaCBsb2NhbCkgJiYKKwlnaXQgYnJhbmNoIC0tdHJhY2sgbXlyOCBsb2NhbC9tYXN0ZXIgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjgucmVtb3RlKSIgPSBsb2NhbCAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyOC5tZXJnZSkiID0gcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjgucmViYXNlKSIgPSB0cnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSB1bmNvbmZpZ3VyZWQgb24gYSB0cmFja2VkIHJlbW90ZSBicmFuY2gnICcKKwlnaXQgY29uZmlnIC0tdW5zZXQgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbWFzdGVyIHx8IGdpdC1mZXRjaCBsb2NhbCkgJiYKKwlnaXQgYnJhbmNoIC0tdHJhY2sgbXlyOSBsb2NhbC9tYXN0ZXIgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjkucmVtb3RlKSIgPSBsb2NhbCAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyOS5tZXJnZSkiID0gcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXI5LnJlYmFzZSkiID0gegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgdW5jb25maWd1cmVkIG9uIGEgdHJhY2tlZCBsb2NhbCBicmFuY2gnICcKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL28gfHwgZ2l0LWZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggbXliYXNlMTAgJiYKKwlnaXQgYnJhbmNoIC0tdHJhY2sgbXlyMTAgbXliYXNlMiAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTAucmVtb3RlKSIgPSAuICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXIxMC5tZXJnZSkiID0gcmVmcy9oZWFkcy9teWJhc2UyICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTAucmViYXNlKSIgPSB6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSB1bmNvbmZpZ3VyZWQgb24gdW50cmFja2VkIGxvY2FsIGJyYW5jaCcgJworCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbWFzdGVyIHx8IGdpdC1mZXRjaCBsb2NhbCkgJiYKKwlnaXQgYnJhbmNoIC0tbm8tdHJhY2sgbXlyMTEgbXliYXNlMiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjExLnJlbW90ZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjExLm1lcmdlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTEucmViYXNlKSIgPSB6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSB1bmNvbmZpZ3VyZWQgb24gdW50cmFja2VkIHJlbW90ZSBicmFuY2gnICcKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQtZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLW5vLXRyYWNrIG15cjEyIGxvY2FsL21hc3RlciAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjEyLnJlbW90ZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjEyLm1lcmdlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTIucmViYXNlKSIgPSB6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSBuZXZlciBvbiBhbiB1bnRyYWNrZWQgbG9jYWwgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwcmViYXNlIG5ldmVyICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgfHwgZ2l0LWZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggLS1uby10cmFjayBteXIxMyBteWJhc2UyICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTMucmVtb3RlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTMubWVyZ2UpIiA9IHogJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxMy5yZWJhc2UpIiA9IHoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIGxvY2FsIG9uIGFuIHVudHJhY2tlZCBsb2NhbCBicmFuY2gnICcKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXByZWJhc2UgbG9jYWwgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQtZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLW5vLXRyYWNrIG15cjE0IG15YmFzZTIgJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxNC5yZW1vdGUpIiA9IHogJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxNC5tZXJnZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjE0LnJlYmFzZSkiID0gegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgcmVtb3RlIG9uIGFuIHVudHJhY2tlZCBsb2NhbCBicmFuY2gnICcKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXByZWJhc2UgcmVtb3RlICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgfHwgZ2l0LWZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggLS1uby10cmFjayBteXIxNSBteWJhc2UyICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTUucmVtb3RlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTUubWVyZ2UpIiA9IHogJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxNS5yZWJhc2UpIiA9IHoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIGFsd2F5cyBvbiBhbiB1bnRyYWNrZWQgbG9jYWwgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwcmViYXNlIGFsd2F5cyAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbWFzdGVyIHx8IGdpdC1mZXRjaCBsb2NhbCkgJiYKKwlnaXQgYnJhbmNoIC0tbm8tdHJhY2sgbXlyMTYgbXliYXNlMiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjE2LnJlbW90ZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjE2Lm1lcmdlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTYucmViYXNlKSIgPSB6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSBuZXZlciBvbiBhbiB1bnRyYWNrZWQgcmVtb3RlIGJyYW5jaCcgJworCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSBuZXZlciAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbWFzdGVyIHx8IGdpdC1mZXRjaCBsb2NhbCkgJiYKKwlnaXQgYnJhbmNoIC0tbm8tdHJhY2sgbXlyMTcgbG9jYWwvbWFzdGVyICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTcucmVtb3RlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTcubWVyZ2UpIiA9IHogJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxNy5yZWJhc2UpIiA9IHoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIGxvY2FsIG9uIGFuIHVudHJhY2tlZCByZW1vdGUgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwcmViYXNlIGxvY2FsICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgfHwgZ2l0LWZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggLS1uby10cmFjayBteXIxOCBsb2NhbC9tYXN0ZXIgJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxOC5yZW1vdGUpIiA9IHogJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxOC5tZXJnZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjE4LnJlYmFzZSkiID0gegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgcmVtb3RlIG9uIGFuIHVudHJhY2tlZCByZW1vdGUgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwcmViYXNlIHJlbW90ZSAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbWFzdGVyIHx8IGdpdC1mZXRjaCBsb2NhbCkgJiYKKwlnaXQgYnJhbmNoIC0tbm8tdHJhY2sgbXlyMTkgbG9jYWwvbWFzdGVyICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTkucmVtb3RlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTkubWVyZ2UpIiA9IHogJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxOS5yZWJhc2UpIiA9IHoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIGFsd2F5cyBvbiBhbiB1bnRyYWNrZWQgcmVtb3RlIGJyYW5jaCcgJworCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSBhbHdheXMgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQtZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLW5vLXRyYWNrIG15cjIwIGxvY2FsL21hc3RlciAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjIwLnJlbW90ZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjIwLm1lcmdlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMjAucmViYXNlKSIgPSB6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdCBtaXNjb25maWd1cmVkIGF1dG9zZXR1cHJlYmFzZSAoYmFkIHZhbHVlKScgJworCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSBnYXJiYWdlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3QgbWlzY29uZmlndXJlZCBhdXRvc2V0dXByZWJhc2UgKG5vIHZhbHVlKScgJworCWdpdCBjb25maWcgLS11bnNldCBicmFuY2guYXV0b3NldHVwcmViYXNlICYmCisJZWNobyAiW2JyYW5jaF0gYXV0b3NldHVwcmViYXNlIiA+PiAuZ2l0L2NvbmZpZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZQorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMyMDEtYnJhbmNoLWNvbnRhaW5zLnNoIGIvdC90MzIwMS1icmFuY2gtY29udGFpbnMuc2gKaW5kZXggYjRjZjYyOC4uZjg2ZjRiYyAxMDA3NTUKLS0tIGEvdC90MzIwMS1icmFuY2gtY29udGFpbnMuc2gKKysrIGIvdC90MzIwMS1icmFuY2gtY29udGFpbnMuc2gKQEAgLTEsNiArMSw2IEBACiAjIS9iaW4vc2gKIAotdGVzdF9kZXNjcmlwdGlvbj0nYnJhbmNoIC0tY29udGFpbnMgPGNvbW1pdD4nCit0ZXN0X2Rlc2NyaXB0aW9uPSdicmFuY2ggLS1jb250YWlucyA8Y29tbWl0PiwgLS1tZXJnZWQsIGFuZCAtLW5vLW1lcmdlZCcKIAogLiAuL3Rlc3QtbGliLnNoCiAKQEAgLTU1LDQgKzU1LDQ0IEBACiAKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2lkZTogYnJhbmNoIC0tbWVyZ2VkJyAnCisKKwlnaXQgYnJhbmNoIC0tbWVyZ2VkID5hY3R1YWwgJiYKKwl7CisJCWVjaG8gIiAgbWFzdGVyIiAmJgorCQllY2hvICIqIHNpZGUiCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZGU6IGJyYW5jaCAtLW5vLW1lcmdlZCcgJworCisJZ2l0IGJyYW5jaCAtLW5vLW1lcmdlZCA+YWN0dWFsICYmCisJPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYXN0ZXI6IGJyYW5jaCAtLW1lcmdlZCcgJworCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBicmFuY2ggLS1tZXJnZWQgPmFjdHVhbCAmJgorCXsKKwkJZWNobyAiKiBtYXN0ZXIiCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hc3RlcjogYnJhbmNoIC0tbm8tbWVyZ2VkJyAnCisKKwlnaXQgYnJhbmNoIC0tbm8tbWVyZ2VkID5hY3R1YWwgJiYKKwl7CisJCWVjaG8gIiAgc2lkZSIKKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMjAyLXNob3ctYnJhbmNoLW9jdG9wdXMuc2ggYi90L3QzMjAyLXNob3ctYnJhbmNoLW9jdG9wdXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2ZlNGE2ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMyMDItc2hvdy1icmFuY2gtb2N0b3B1cy5zaApAQCAtMCwwICsxLDU5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBzaG93LWJyYW5jaCB3aXRoIG1vcmUgdGhhbiA4IGhlYWRzJworCisuIC4vdGVzdC1saWIuc2gKKworbnVtYmVycz0iMSAyIDMgNCA1IDYgNyA4IDkgMTAiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisKKwk+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKworCWZvciBpIGluICRudW1iZXJzCisJZG8KKwkJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaCRpIG1hc3RlciAmJgorCQk+IGZpbGUkaSAmJgorCQlnaXQgYWRkIGZpbGUkaSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSBicmFuY2gkaSB8fCBicmVhaworCWRvbmUKKworJworCitjYXQgPiBleHBlY3QgPDwgRU9GCishIFticmFuY2gxXSBicmFuY2gxCisgISBbYnJhbmNoMl0gYnJhbmNoMgorICAhIFticmFuY2gzXSBicmFuY2gzCisgICAhIFticmFuY2g0XSBicmFuY2g0CisgICAgISBbYnJhbmNoNV0gYnJhbmNoNQorICAgICAhIFticmFuY2g2XSBicmFuY2g2CisgICAgICAhIFticmFuY2g3XSBicmFuY2g3CisgICAgICAgISBbYnJhbmNoOF0gYnJhbmNoOAorICAgICAgICAhIFticmFuY2g5XSBicmFuY2g5CisgICAgICAgICAqIFticmFuY2gxMF0gYnJhbmNoMTAKKy0tLS0tLS0tLS0KKyAgICAgICAgICogW2JyYW5jaDEwXSBicmFuY2gxMAorICAgICAgICArICBbYnJhbmNoOV0gYnJhbmNoOQorICAgICAgICsgICBbYnJhbmNoOF0gYnJhbmNoOAorICAgICAgKyAgICBbYnJhbmNoN10gYnJhbmNoNworICAgICArICAgICBbYnJhbmNoNl0gYnJhbmNoNgorICAgICsgICAgICBbYnJhbmNoNV0gYnJhbmNoNQorICAgKyAgICAgICBbYnJhbmNoNF0gYnJhbmNoNAorICArICAgICAgICBbYnJhbmNoM10gYnJhbmNoMworICsgICAgICAgICBbYnJhbmNoMl0gYnJhbmNoMgorKyAgICAgICAgICBbYnJhbmNoMV0gYnJhbmNoMQorKysrKysrKysrKiBbYnJhbmNoMTBeXSBpbml0aWFsCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdy1icmFuY2ggd2l0aCBtb3JlIHRoYW4gOCBicmFuY2hlcycgJworCisJZ2l0IHNob3ctYnJhbmNoICQoZm9yIGkgaW4gJG51bWJlcnM7IGRvIGVjaG8gYnJhbmNoJGk7IGRvbmUpID4gb3V0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dAorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzMwMC1mdW5ueS1uYW1lcy5zaCBiL3QvdDMzMDAtZnVubnktbmFtZXMuc2gKaW5kZXggMjRhMDBhOS4uMDU3NGVmMSAxMDA3NTUKLS0tIGEvdC90MzMwMC1mdW5ueS1uYW1lcy5zaAorKysgYi90L3QzMzAwLWZ1bm55LW5hbWVzLnNoCkBAIC0zNSw3ICszNSw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbHMtZmlsZXMgbm8tZnVubnknIFwKIAknZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAiJHAwIiAiJHAyIiAmJgogCWdpdCBscy1maWxlcyA+Y3VycmVudCAmJgotCWdpdCBkaWZmIGV4cGVjdGVkIGN1cnJlbnQnCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudCcKIAogdDA9YGdpdCB3cml0ZS10cmVlYAogZWNobyAiJHQwIiA+dDAKQEAgLTQ4LDE0ICs0OCwxNCBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxzLWZpbGVzIHdpdGgtZnVubnknIFwKIAknZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAiJHAxIiAmJgogCWdpdCBscy1maWxlcyA+Y3VycmVudCAmJgotCWdpdCBkaWZmIGV4cGVjdGVkIGN1cnJlbnQnCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudCcKIAogZWNobyAnanVzdCBzcGFjZQogbm8tZnVubnkKIHRhYnMJLCIgKGRxKSBhbmQgc3BhY2VzJyA+ZXhwZWN0ZWQKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBscy1maWxlcyAteiB3aXRoLWZ1bm55JyBcCiAJJ2dpdCBscy1maWxlcyAteiB8IHBlcmwgLXBlIHkvXFwwMDAvXFwwMTIvID5jdXJyZW50ICYmCi0JZ2l0IGRpZmYgZXhwZWN0ZWQgY3VycmVudCcKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50JwogCiB0MT1gZ2l0IHdyaXRlLXRyZWVgCiBlY2hvICIkdDEiID50MQpAQCAtNjcsMjggKzY3LDI4IEBACiBFT0YKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBscy10cmVlIHdpdGggZnVubnknIFwKIAknZ2l0IGxzLXRyZWUgLXIgJHQxIHwgc2VkIC1lICJzL15bXgldKgkvLyIgPmN1cnJlbnQgJiYKLQkgZ2l0IGRpZmYgZXhwZWN0ZWQgY3VycmVudCcKKwkgdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudCcKIAogY2F0ID4gZXhwZWN0ZWQgPDxcRU9GCiBBCSJ0YWJzXHQsXCIgKGRxKSBhbmQgc3BhY2VzIgogRU9GCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi1pbmRleCB3aXRoLWZ1bm55JyBcCiAJJ2dpdCBkaWZmLWluZGV4IC0tbmFtZS1zdGF0dXMgJHQwID5jdXJyZW50ICYmCi0JZ2l0IGRpZmYgZXhwZWN0ZWQgY3VycmVudCcKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50JwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi10cmVlIHdpdGgtZnVubnknIFwKIAknZ2l0IGRpZmYtdHJlZSAtLW5hbWUtc3RhdHVzICR0MCAkdDEgPmN1cnJlbnQgJiYKLQlnaXQgZGlmZiBleHBlY3RlZCBjdXJyZW50JworCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQnCiAKIGVjaG8gJ0EKIHRhYnMJLCIgKGRxKSBhbmQgc3BhY2VzJyA+ZXhwZWN0ZWQKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLWluZGV4IC16IHdpdGgtZnVubnknIFwKIAknZ2l0IGRpZmYtaW5kZXggLXogLS1uYW1lLXN0YXR1cyAkdDAgfCBwZXJsIC1wZSB5L1xcMDAwL1xcMDEyLyA+Y3VycmVudCAmJgotCWdpdCBkaWZmIGV4cGVjdGVkIGN1cnJlbnQnCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudCcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtdHJlZSAteiB3aXRoLWZ1bm55JyBcCiAJJ2dpdCBkaWZmLXRyZWUgLXogLS1uYW1lLXN0YXR1cyAkdDAgJHQxIHwgcGVybCAtcGUgeS9cXDAwMC9cXDAxMi8gPmN1cnJlbnQgJiYKLQlnaXQgZGlmZiBleHBlY3RlZCBjdXJyZW50JworCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQnCiAKIGNhdCA+IGV4cGVjdGVkIDw8XEVPRgogQ05VTQluby1mdW5ueQkidGFic1x0LFwiIChkcSkgYW5kIHNwYWNlcyIKQEAgLTk2LDcgKzk2LDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLXRyZWUgLUMgd2l0aC1mdW5ueScgXAogCSdnaXQgZGlmZi10cmVlIC1DIC0tZmluZC1jb3BpZXMtaGFyZGVyIC0tbmFtZS1zdGF0dXMgXAogCQkkdDAgJHQxIHwgc2VkIC1lICdzL15DWzAtOV0qL0NOVU0vJyA+Y3VycmVudCAmJgotCWdpdCBkaWZmIGV4cGVjdGVkIGN1cnJlbnQnCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudCcKIAogY2F0ID4gZXhwZWN0ZWQgPDxcRU9GCiBSTlVNCW5vLWZ1bm55CSJ0YWJzXHQsXCIgKGRxKSBhbmQgc3BhY2VzIgpAQCAtMTA1LDcgKzEwNSw3IEBACiAJJ2dpdCB1cGRhdGUtaW5kZXggLS1mb3JjZS1yZW1vdmUgIiRwMCIgJiYKIAlnaXQgZGlmZi1pbmRleCAtTSAtLW5hbWUtc3RhdHVzIFwKIAkJJHQwIHwgc2VkIC1lICdzL15SWzAtOV0qL1JOVU0vJyA+Y3VycmVudCAmJgotCWdpdCBkaWZmIGV4cGVjdGVkIGN1cnJlbnQnCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudCcKIAogY2F0ID4gZXhwZWN0ZWQgPDxcRU9GCiBkaWZmIC0tZ2l0IGEvbm8tZnVubnkgImIvdGFic1x0LFwiIChkcSkgYW5kIHNwYWNlcyIKQEAgLTExNiw3ICsxMTYsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtdHJlZSBkZWxldGUgd2l0aC1mdW5ueScgXAogCSdnaXQgZGlmZi1pbmRleCAtTSAtcCAkdDAgfAogCSBzZWQgLWUgInMvaW5kZXggWzAtOV0qJS9pbmRleCBOVU0lLyIgPmN1cnJlbnQgJiYKLQkgZ2l0IGRpZmYgZXhwZWN0ZWQgY3VycmVudCcKKwkgdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudCcKIAogY2htb2QgK3ggIiRwMSIKIGNhdCA+IGV4cGVjdGVkIDw8XEVPRgpAQCAtMTMwLDcgKzEzMCw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi10cmVlIGRlbGV0ZSB3aXRoLWZ1bm55JyBcCiAJJ2dpdCBkaWZmLWluZGV4IC1NIC1wICR0MCB8CiAJIHNlZCAtZSAicy9pbmRleCBbMC05XSolL2luZGV4IE5VTSUvIiA+Y3VycmVudCAmJgotCSBnaXQgZGlmZiBleHBlY3RlZCBjdXJyZW50JworCSB0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50JwogCiBjYXQgPmV4cGVjdGVkIDw8XEVPRgogICJ0YWJzXHQsXCIgKGRxKSBhbmQgc3BhY2VzIgpAQCAtMTM5LDcgKzEzOSw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi10cmVlIHJlbmFtZSB3aXRoLWZ1bm55IGFwcGxpZWQnIFwKIAknZ2l0IGRpZmYtaW5kZXggLU0gLXAgJHQwIHwKIAkgZ2l0IGFwcGx5IC0tc3RhdCB8IHNlZCAtZSAicy98LiovLyIgLWUgInMvICpcJC8vIiA+Y3VycmVudCAmJgotCSBnaXQgZGlmZiBleHBlY3RlZCBjdXJyZW50JworCSB0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50JwogCiBjYXQgPiBleHBlY3RlZCA8PFxFT0YKICBuby1mdW5ueQpAQCAtMTQ5LDEyICsxNDksMTIgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLXRyZWUgZGVsZXRlIHdpdGgtZnVubnkgYXBwbGllZCcgXAogCSdnaXQgZGlmZi1pbmRleCAtcCAkdDAgfAogCSBnaXQgYXBwbHkgLS1zdGF0IHwgc2VkIC1lICJzL3wuKi8vIiAtZSAicy8gKlwkLy8iID5jdXJyZW50ICYmCi0JIGdpdCBkaWZmIGV4cGVjdGVkIGN1cnJlbnQnCisJIHRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhcHBseSBub24tZ2l0IGRpZmYnIFwKIAknZ2l0IGRpZmYtaW5kZXggLXAgJHQwIHwKIAkgc2VkIC1uZSAiL15bLStAXS9wIiB8CiAJIGdpdCBhcHBseSAtLXN0YXQgfCBzZWQgLWUgInMvfC4qLy8iIC1lICJzLyAqXCQvLyIgPmN1cnJlbnQgJiYKLQkgZ2l0IGRpZmYgZXhwZWN0ZWQgY3VycmVudCcKKwkgdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudCcKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDAwLXJlYmFzZS5zaCBiL3QvdDM0MDAtcmViYXNlLnNoCmluZGV4IDQ5NmY0ZWMuLjkxYmI1ZTEgMTAwNzU1Ci0tLSBhL3QvdDM0MDAtcmViYXNlLnNoCisrKyBiL3QvdDM0MDAtcmViYXNlLnNoCkBAIC05LDcgKzksOCBAQAogJwogLiAuL3Rlc3QtbGliLnNoCiAKLWV4cG9ydCBHSVRfQVVUSE9SX0VNQUlMPWJvZ3VzX2VtYWlsX2FkZHJlc3MKK0dJVF9BVVRIT1JfRU1BSUw9Ym9ndXNfZW1haWxfYWRkcmVzcworZXhwb3J0IEdJVF9BVVRIT1JfRU1BSUwKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ3ByZXBhcmUgcmVwb3NpdG9yeSB3aXRoIHRvcGljIGJyYW5jaGVzJyBcCkBAIC00NCwxMyArNDUsMTMgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ3RoZSByZWJhc2Ugb3BlcmF0aW9uIHNob3VsZCBub3QgaGF2ZSBkZXN0cm95ZWQgYXV0aG9yIGluZm9ybWF0aW9uJyBcCi0gICAgJyEgZ2l0IGxvZyB8IGdyZXAgIkF1dGhvcjoiIHwgZ3JlcCAiPD4iJworICAgICchIChnaXQgbG9nIHwgZ3JlcCAiQXV0aG9yOiIgfCBncmVwICI8PiIpJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgYWZ0ZXIgbWVyZ2UgbWFzdGVyJyAnCiAgICAgIGdpdCByZXNldCAtLWhhcmQgdG9waWMgJiYKICAgICAgZ2l0IG1lcmdlIG1hc3RlciAmJgogICAgICBnaXQgcmViYXNlIG1hc3RlciAmJgotICAgICAhIGdpdCBzaG93IHwgZ3JlcCAiXk1lcmdlOiIKKyAgICAgISAoZ2l0IHNob3cgfCBncmVwICJeTWVyZ2U6IikKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIG9mIGhpc3Rvcnkgd2l0aCBtZXJnZXMgaXMgbGluZWFyaXplZCcgJwpkaWZmIC0tZ2l0IGEvdC90MzQwNC1yZWJhc2UtaW50ZXJhY3RpdmUuc2ggYi90L3QzNDA0LXJlYmFzZS1pbnRlcmFjdGl2ZS5zaAppbmRleCA5Y2Y4NzNmLi5iOWUzZGJkIDEwMDc1NQotLS0gYS90L3QzNDA0LXJlYmFzZS1pbnRlcmFjdGl2ZS5zaAorKysgYi90L3QzNDA0LXJlYmFzZS1pbnRlcmFjdGl2ZS5zaApAQCAtOTEsOSArOTEsOCBAQAogZG9uZQogRU9GCiAKK3Rlc3Rfc2V0X2VkaXRvciAiJChwd2QpL2Zha2UtZWRpdG9yLnNoIgogY2htb2QgYSt4IGZha2UtZWRpdG9yLnNoCi1WSVNVQUw9IiQocHdkKS9mYWtlLWVkaXRvci5zaCIKLWV4cG9ydCBWSVNVQUwKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gY2hhbmdlcyBhcmUgYSBub3AnICcKIAlnaXQgcmViYXNlIC1pIEYgJiYKZGlmZiAtLWdpdCBhL3QvdDM0MDctcmViYXNlLWFib3J0LnNoIGIvdC90MzQwNy1yZWJhc2UtYWJvcnQuc2gKaW5kZXggMzc5NDRjMy4uMTc3N2ZmZSAxMDA3NTUKLS0tIGEvdC90MzQwNy1yZWJhc2UtYWJvcnQuc2gKKysrIGIvdC90MzQwNy1yZWJhc2UtYWJvcnQuc2gKQEAgLTQsNyArNCwxMyBAQAogCiAuIC4vdGVzdC1saWIuc2gKIAorIyMjIFRlc3QgdGhhdCB3ZSBoYW5kbGUgc3BhY2UgY2hhcmFjdGVycyBwcm9wZXJseQord29ya19kaXI9IiQocHdkKS90ZXN0IGRpciIKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJbWtkaXIgLXAgIiR3b3JrX2RpciIgJiYKKwljZCAiJHdvcmtfZGlyIiAmJgorCWdpdCBpbml0ICYmCiAJZWNobyBhID4gYSAmJgogCWdpdCBhZGQgYSAmJgogCWdpdCBjb21taXQgLW0gYSAmJgpAQCAtMjgsMzIgKzM0LDM1IEBACiAJZG90ZXN0PSQyCiAKIAl0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWJhc2UkdHlwZSAtLWFib3J0IiAnCisJCWNkICIkd29ya19kaXIiICYmCiAJCSMgQ2xlYW4gdXAgdGhlIHN0YXRlIGZyb20gdGhlIHByZXZpb3VzIG9uZQotCQlnaXQgcmVzZXQgLS1oYXJkIHByZS1yZWJhc2UKLQkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSciJHR5cGUiJyBtYXN0ZXIgJiYKLQkJdGVzdCAtZCAnJGRvdGVzdCcgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwcmUtcmViYXNlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UkdHlwZSBtYXN0ZXIgJiYKKwkJdGVzdCAtZCAiJGRvdGVzdCIgJiYKIAkJZ2l0IHJlYmFzZSAtLWFib3J0ICYmCiAJCXRlc3QgJChnaXQgcmV2LXBhcnNlIHRvLXJlYmFzZSkgPSAkKGdpdCByZXYtcGFyc2UgcHJlLXJlYmFzZSkgJiYKLQkJdGVzdCAhIC1kICckZG90ZXN0JworCQl0ZXN0ICEgLWQgIiRkb3Rlc3QiCiAJJwogCiAJdGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlJHR5cGUgLS1hYm9ydCBhZnRlciAtLXNraXAiICcKKwkJY2QgIiR3b3JrX2RpciIgJiYKIAkJIyBDbGVhbiB1cCB0aGUgc3RhdGUgZnJvbSB0aGUgcHJldmlvdXMgb25lCi0JCWdpdCByZXNldCAtLWhhcmQgcHJlLXJlYmFzZQotCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlJyIkdHlwZSInIG1hc3RlciAmJgotCQl0ZXN0IC1kICckZG90ZXN0JyAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHByZS1yZWJhc2UgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSR0eXBlIG1hc3RlciAmJgorCQl0ZXN0IC1kICIkZG90ZXN0IiAmJgogCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tc2tpcCAmJgogCQl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSA9ICQoZ2l0IHJldi1wYXJzZSBtYXN0ZXIpICYmCiAJCWdpdC1yZWJhc2UgLS1hYm9ydCAmJgogCQl0ZXN0ICQoZ2l0IHJldi1wYXJzZSB0by1yZWJhc2UpID0gJChnaXQgcmV2LXBhcnNlIHByZS1yZWJhc2UpICYmCi0JCXRlc3QgISAtZCAnJGRvdGVzdCcKKwkJdGVzdCAhIC1kICIkZG90ZXN0IgogCScKIAogCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSR0eXBlIC0tYWJvcnQgYWZ0ZXIgLS1jb250aW51ZSIgJworCQljZCAiJHdvcmtfZGlyIiAmJgogCQkjIENsZWFuIHVwIHRoZSBzdGF0ZSBmcm9tIHRoZSBwcmV2aW91cyBvbmUKLQkJZ2l0IHJlc2V0IC0taGFyZCBwcmUtcmViYXNlCi0JCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UnIiR0eXBlIicgbWFzdGVyICYmCi0JCXRlc3QgLWQgJyRkb3Rlc3QnICYmCisJCWdpdCByZXNldCAtLWhhcmQgcHJlLXJlYmFzZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlJHR5cGUgbWFzdGVyICYmCisJCXRlc3QgLWQgIiRkb3Rlc3QiICYmCiAJCWVjaG8gYyA+IGEgJiYKIAkJZWNobyBkID4+IGEgJiYKIAkJZ2l0IGFkZCBhICYmCkBAIC02MSw3ICs3MCw3IEBACiAJCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUQpICE9ICQoZ2l0IHJldi1wYXJzZSBtYXN0ZXIpICYmCiAJCWdpdCByZWJhc2UgLS1hYm9ydCAmJgogCQl0ZXN0ICQoZ2l0IHJldi1wYXJzZSB0by1yZWJhc2UpID0gJChnaXQgcmV2LXBhcnNlIHByZS1yZWJhc2UpICYmCi0JCXRlc3QgISAtZCAnJGRvdGVzdCcKKwkJdGVzdCAhIC1kICIkZG90ZXN0IgogCScKIH0KIApkaWZmIC0tZ2l0IGEvdC90MzUwMC1jaGVycnkuc2ggYi90L3QzNTAwLWNoZXJyeS5zaAppbmRleCBkMGE0NDBmLi40OTExYzQ4IDEwMDc1NQotLS0gYS90L3QzNTAwLWNoZXJyeS5zaAorKysgYi90L3QzNTAwLWNoZXJyeS5zaApAQCAtMTAsNyArMTAsOCBAQAogJwogLiAuL3Rlc3QtbGliLnNoCiAKLWV4cG9ydCBHSVRfQVVUSE9SX0VNQUlMPWJvZ3VzX2VtYWlsX2FkZHJlc3MKK0dJVF9BVVRIT1JfRU1BSUw9Ym9ndXNfZW1haWxfYWRkcmVzcworZXhwb3J0IEdJVF9BVVRIT1JfRU1BSUwKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ3ByZXBhcmUgcmVwb3NpdG9yeSB3aXRoIHRvcGljIGJyYW5jaCwgYW5kIGNoZWNrIGNoZXJyeSBmaW5kcyB0aGUgMiBwYXRjaGVzIGZyb20gdGhlcmUnIFwKZGlmZiAtLWdpdCBhL3QvdDM2MDAtcm0uc2ggYi90L3QzNjAwLXJtLnNoCmluZGV4IGY1NDJmMGEuLjc4OTNkOGMgMTAwNzU1Ci0tLSBhL3QvdDM2MDAtcm0uc2gKKysrIGIvdC90MzYwMC1ybS5zaApAQCAtMjE3LDQgKzIxNywxNiBAQAogCSEgZ2l0IHJtIG5vbmV4aXN0ZW50CiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NhbGwgInJtIiBmcm9tIG91dHNpZGUgdGhlIHdvcmsgdHJlZScgJworCW1rZGlyIHJlcG8gJiYKKwljZCByZXBvICYmCisJZ2l0IGluaXQgJiYKKwllY2hvIHNvbWV0aGluZyA+IHNvbWVmaWxlICYmCisJZ2l0IGFkZCBzb21lZmlsZSAmJgorCWdpdCBjb21taXQgLW0gImFkZCBhIGZpbGUiICYmCisJKGNkIC4uICYmCisJIGdpdCAtLWdpdC1kaXI9cmVwby8uZ2l0IC0td29yay10cmVlPXJlcG8gcm0gc29tZWZpbGUpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBzb21lZmlsZQorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM3MDAtYWRkLnNoIGIvdC90MzcwMC1hZGQuc2gKaW5kZXggMjg3ZTA1OC4uZmNiYzIwMyAxMDA3NTUKLS0tIGEvdC90MzcwMC1hZGQuc2gKKysrIGIvdC90MzcwMC1hZGQuc2gKQEAgLTgxLDE3ICs4MSwxNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICcuZ2l0aWdub3JlIGlzIGhvbm9yZWQnICcKIAlnaXQgYWRkIC4gJiYKLQkhIGdpdCBscy1maWxlcyB8IGdyZXAgIlxcLmlnIgorCSEgKGdpdCBscy1maWxlcyB8IGdyZXAgIlxcLmlnIikKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZXJyb3Igb3V0IHdoZW4gYXR0ZW1wdGluZyB0byBhZGQgaWdub3JlZCBvbmVzIHdpdGhvdXQgLWYnICcKIAkhIGdpdCBhZGQgYS4/PyAmJgotCSEgZ2l0IGxzLWZpbGVzIHwgZ3JlcCAiXFwuaWciCisJISAoZ2l0IGxzLWZpbGVzIHwgZ3JlcCAiXFwuaWciKQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdlcnJvciBvdXQgd2hlbiBhdHRlbXB0aW5nIHRvIGFkZCBpZ25vcmVkIG9uZXMgd2l0aG91dCAtZicgJwogCSEgZ2l0IGFkZCBkLj8/ICYmCi0JISBnaXQgbHMtZmlsZXMgfCBncmVwICJcXC5pZyIKKwkhIChnaXQgbHMtZmlsZXMgfCBncmVwICJcXC5pZyIpCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBpZ25vcmVkIG9uZXMgd2l0aCAtZicgJwpAQCAtMTc5LDQgKzE3OSw1NSBAQAogCXRlc3QgLXogImBnaXQgZGlmZi1pbmRleCBIRUFEIC0tIGZvb2AiCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhZGQgc2hvdWxkIGZhaWwgYXRvbWljYWxseSB1cG9uIGFuIHVucmVhZGFibGUgZmlsZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlkYXRlID5mb28xICYmCisJZGF0ZSA+Zm9vMiAmJgorCWNobW9kIDAgZm9vMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgLS12ZXJib3NlIC4gJiYKKwkhICggZ2l0IGxzLWZpbGVzIGZvbzEgfCBncmVwIGZvbzEgKQorJworCitybSAtZiBmb28yCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhZGQgLS1pZ25vcmUtZXJyb3JzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWRhdGUgPmZvbzEgJiYKKwlkYXRlID5mb28yICYmCisJY2htb2QgMCBmb28yICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCAtLXZlcmJvc2UgLS1pZ25vcmUtZXJyb3JzIC4gJiYKKwlnaXQgbHMtZmlsZXMgZm9vMSB8IGdyZXAgZm9vMQorJworCitybSAtZiBmb28yCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhZGQgKGFkZC5pZ25vcmUtZXJyb3JzKScgJworCWdpdCBjb25maWcgYWRkLmlnbm9yZS1lcnJvcnMgMSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlkYXRlID5mb28xICYmCisJZGF0ZSA+Zm9vMiAmJgorCWNobW9kIDAgZm9vMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgLS12ZXJib3NlIC4gJiYKKwlnaXQgbHMtZmlsZXMgZm9vMSB8IGdyZXAgZm9vMQorJworcm0gLWYgZm9vMgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYWRkIChhZGQuaWdub3JlLWVycm9ycyA9IGZhbHNlKScgJworCWdpdCBjb25maWcgYWRkLmlnbm9yZS1lcnJvcnMgMCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlkYXRlID5mb28xICYmCisJZGF0ZSA+Zm9vMiAmJgorCWNobW9kIDAgZm9vMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgLS12ZXJib3NlIC4gJiYKKwkhICggZ2l0IGxzLWZpbGVzIGZvbzEgfCBncmVwIGZvbzEgKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYWRkICdcJydmb1w/YmFyJ1wnJyBpZ25vcmVzIGZvb2JhcicgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0b3VjaCBmb1w/YmFyIGZvb2JhciAmJgorCWdpdCBhZGQgJ1wnJ2ZvXD9iYXInXCcnICYmCisJZ2l0IGxzLWZpbGVzIGZvXD9iYXIgfCBncmVwIC1GIGZvXD9iYXIgJiYKKwkhICggZ2l0IGxzLWZpbGVzIGZvb2JhciB8IGdyZXAgZm9vYmFyICkKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNzAxLWFkZC1pbnRlcmFjdGl2ZS5zaCBiL3QvdDM3MDEtYWRkLWludGVyYWN0aXZlLnNoCmluZGV4IDc3YzkwZjYuLmZhZTY0ZWEgMTAwNzU1Ci0tLSBhL3QvdDM3MDEtYWRkLWludGVyYWN0aXZlLnNoCisrKyBiL3QvdDM3MDEtYWRkLWludGVyYWN0aXZlLnNoCkBAIC02Niw0ICs2NiwzMCBAQAogCWdyZXAgInVuY2hhbmdlZCAqKzMvLTAgZmlsZSIgb3V0cHV0CiAnCiAKK2lmIHRlc3QgIiQoZ2l0IGNvbmZpZyAtLWJvb2wgY29yZS5maWxlbW9kZSkiID0gZmFsc2UKK3RoZW4KKyAgICBzYXkgJ3NraXBwaW5nIGZpbGVtb2RlIHRlc3RzIChmaWxlc3lzdGVtIGRvZXMgbm90IHByb3Blcmx5IHN1cHBvcnQgbW9kZXMpJworZWxzZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRjaCBkb2VzIG5vdCBhZmZlY3QgbW9kZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJY2htb2QgK3ggZmlsZSAmJgorCXByaW50ZiAiblxcbnlcXG4iIHwgZ2l0IGFkZCAtcCAmJgorCWdpdCBzaG93IDpmaWxlIHwgZ3JlcCBjb250ZW50ICYmCisJZ2l0IGRpZmYgZmlsZSB8IGdyZXAgIm5ldyBtb2RlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFnZSBtb2RlIGJ1dCBub3QgaHVuaycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJY2htb2QgK3ggZmlsZSAmJgorCXByaW50ZiAieVxcbm5cXG4iIHwgZ2l0IGFkZCAtcCAmJgorCWdpdCBkaWZmIC0tY2FjaGVkIGZpbGUgfCBncmVwICJuZXcgbW9kZSIgJiYKKwlnaXQgZGlmZiAgICAgICAgICBmaWxlIHwgZ3JlcCAiK2NvbnRlbnQiCisnCisKK2ZpCisjIGVuZCBvZiB0ZXN0cyBkaXNhYmxlZCB3aGVuIGZpbGVtb2RlIGlzIG5vdCB1c2FibGUKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzOTAwLWkxOG4tY29tbWl0LnNoIGIvdC90MzkwMC1pMThuLWNvbW1pdC5zaAppbmRleCA5NGIxYzI0Li44ODMyODFkIDEwMDc1NQotLS0gYS90L3QzOTAwLWkxOG4tY29tbWl0LnNoCisrKyBiL3QvdDM5MDAtaTE4bi1jb21taXQuc2gKQEAgLTksNyArOSw3IEBACiAKIGNvbXBhcmVfd2l0aCAoKSB7CiAJZ2l0IHNob3cgLXMgJDEgfCBzZWQgLWUgJzEsL14kL2QnIC1lICdzL14gICAgLy8nID5jdXJyZW50ICYmCi0JZ2l0IGRpZmYgY3VycmVudCAiJDIiCisJdGVzdF9jbXAgY3VycmVudCAiJDIiCiB9CiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJwpkaWZmIC0tZ2l0IGEvdC90NDAwNi1kaWZmLW1vZGUuc2ggYi90L3Q0MDA2LWRpZmYtbW9kZS5zaAppbmRleCBhYjU0MDZkLi40ZTkyZmNlIDEwMDc1NQotLS0gYS90L3Q0MDA2LWRpZmYtbW9kZS5zaAorKysgYi90L3Q0MDA2LWRpZmYtbW9kZS5zaApAQCAtMzgsNiArMzgsNiBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAndmVyaWZ5JyBcCi0gICAgJ2dpdCBkaWZmIGV4cGVjdGVkIGNoZWNrJworICAgICd0ZXN0X2NtcCBleHBlY3RlZCBjaGVjaycKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDEzLWRpZmYtdmFyaW91cy5zaCBiL3QvdDQwMTMtZGlmZi12YXJpb3VzLnNoCmluZGV4IDZiNGQxYzUuLjkzMzdiODEgMTAwNzU1Ci0tLSBhL3QvdDQwMTMtZGlmZi12YXJpb3VzLnNoCisrKyBiL3QvdDQwMTMtZGlmZi12YXJpb3VzLnNoCkBAIC0xMTIsNyArMTEyLDcgQEAKIAkJfSA+IiRhY3R1YWwiICYmCiAJCWlmIHRlc3QgLWYgIiRleHBlY3QiCiAJCXRoZW4KLQkJCWdpdCBkaWZmICIkZXhwZWN0IiAiJGFjdHVhbCIgJiYKKwkJCXRlc3RfY21wICIkZXhwZWN0IiAiJGFjdHVhbCIgJiYKIAkJCXJtIC1mICIkYWN0dWFsIgogCQllbHNlCiAJCQkjIHRoaXMgaXMgdG8gaGVscCBkZXZlbG9waW5nIG5ldyB0ZXN0cy4KQEAgLTI1Nyw2ICsyNTcsNyBAQAogZGlmZiAtLXBhdGNoLXdpdGgtc3RhdCAtciBpbml0aWFsLi5zaWRlCiBkaWZmIC0tcGF0Y2gtd2l0aC1yYXcgLXIgaW5pdGlhbC4uc2lkZQogZGlmZiAtLW5hbWUtc3RhdHVzIGRpcjIgZGlyCitkaWZmIC0tbm8taW5kZXggLS1uYW1lLXN0YXR1cyBkaXIyIGRpcgogRU9GCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfLS1uYW1lLXN0YXR1c19kaXIyX2RpciBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tbmFtZS1zdGF0dXNfZGlyMl9kaXIKaW5kZXggZWY3ZmRiNy4uZDBkOTZhYSAxMDA2NDQKLS0tIGEvdC90NDAxMy9kaWZmLmRpZmZfLS1uYW1lLXN0YXR1c19kaXIyX2RpcgorKysgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLW5hbWUtc3RhdHVzX2RpcjJfZGlyCkBAIC0xLDMgKzEsMiBAQAogJCBnaXQgZGlmZiAtLW5hbWUtc3RhdHVzIGRpcjIgZGlyCi1BCWRpci9zdWIKICQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmXy0tbm8taW5kZXhfLS1uYW1lLXN0YXR1c19kaXIyX2RpciBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tbm8taW5kZXhfLS1uYW1lLXN0YXR1c19kaXIyX2RpcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTQ3NTg0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1uby1pbmRleF8tLW5hbWUtc3RhdHVzX2RpcjJfZGlyCkBAIC0wLDAgKzEsMyBAQAorJCBnaXQgZGlmZiAtLW5vLWluZGV4IC0tbmFtZS1zdGF0dXMgZGlyMiBkaXIKK0EJZGlyL3N1YgorJApkaWZmIC0tZ2l0IGEvdC90NDAxNC1mb3JtYXQtcGF0Y2guc2ggYi90L3Q0MDE0LWZvcm1hdC1wYXRjaC5zaAppbmRleCBiMmI3YThkLi4zNTgzZTY4IDEwMDc1NQotLS0gYS90L3Q0MDE0LWZvcm1hdC1wYXRjaC5zaAorKysgYi90L3Q0MDE0LWZvcm1hdC1wYXRjaC5zaApAQCAtMjI2LDcgKzIyNiw3IEBACiAKIAlnaXQgZm9ybWF0LXBhdGNoIC0tY292ZXItbGV0dGVyIC0yICYmCiAJc2VkIC1lICIxLC9BIFUgVGhvci9kIiAtZSAiL14kL3EiIDwgMDAwMC1jb3Zlci1sZXR0ZXIucGF0Y2ggPiBvdXRwdXQgJiYKLQlnaXQgZGlmZiBleHBlY3Qgb3V0cHV0CisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAogCiAnCiAKZGlmZiAtLWdpdCBhL3QvdDQwMTUtZGlmZi13aGl0ZXNwYWNlLnNoIGIvdC90NDAxNS1kaWZmLXdoaXRlc3BhY2Uuc2gKaW5kZXggODNjNTRiNy4uY2EwMzAyZiAxMDA3NTUKLS0tIGEvdC90NDAxNS1kaWZmLXdoaXRlc3BhY2Uuc2gKKysrIGIvdC90NDAxNS1kaWZmLXdoaXRlc3BhY2Uuc2gKQEAgLTQzLDEzICs0MywxMyBAQAogRU9GCiAKIGdpdCBkaWZmID4gb3V0Ci10ZXN0X2V4cGVjdF9zdWNjZXNzICJSYXkncyBleGFtcGxlIHdpdGhvdXQgb3B0aW9ucyIgJ2dpdCBkaWZmIGV4cGVjdCBvdXQnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJSYXkncyBleGFtcGxlIHdpdGhvdXQgb3B0aW9ucyIgJ3Rlc3RfY21wIGV4cGVjdCBvdXQnCiAKIGdpdCBkaWZmIC13ID4gb3V0Ci10ZXN0X2V4cGVjdF9zdWNjZXNzICJSYXkncyBleGFtcGxlIHdpdGggLXciICdnaXQgZGlmZiBleHBlY3Qgb3V0JwordGVzdF9leHBlY3Rfc3VjY2VzcyAiUmF5J3MgZXhhbXBsZSB3aXRoIC13IiAndGVzdF9jbXAgZXhwZWN0IG91dCcKIAogZ2l0IGRpZmYgLWIgPiBvdXQKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIlJheSdzIGV4YW1wbGUgd2l0aCAtYiIgJ2dpdCBkaWZmIGV4cGVjdCBvdXQnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJSYXkncyBleGFtcGxlIHdpdGggLWIiICd0ZXN0X2NtcCBleHBlY3Qgb3V0JwogCiB0ciAnUScgJ1wwMTUnIDw8IEVPRiA+IHgKIHdoaXRlc3BhY2UgYXQgYmVnaW5uaW5nCkBAIC05MCwxNCArOTAsMTQgQEAKICtDUiBhdCBlbmQKIEVPRgogZ2l0IGRpZmYgPiBvdXQKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fub3RoZXIgdGVzdCwgd2l0aG91dCBvcHRpb25zJyAnZ2l0IGRpZmYgZXhwZWN0IG91dCcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fub3RoZXIgdGVzdCwgd2l0aG91dCBvcHRpb25zJyAndGVzdF9jbXAgZXhwZWN0IG91dCcKIAogY2F0IDw8IEVPRiA+IGV4cGVjdAogZGlmZiAtLWdpdCBhL3ggYi94CiBpbmRleCBkOTlhZjIzLi44YjMyZmI1IDEwMDY0NAogRU9GCiBnaXQgZGlmZiAtdyA+IG91dAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnYW5vdGhlciB0ZXN0LCB3aXRoIC13JyAnZ2l0IGRpZmYgZXhwZWN0IG91dCcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fub3RoZXIgdGVzdCwgd2l0aCAtdycgJ3Rlc3RfY21wIGV4cGVjdCBvdXQnCiAKIHRyICdRJyAnXDAxNScgPDwgRU9GID4gZXhwZWN0CiBkaWZmIC0tZ2l0IGEveCBiL3gKQEAgLTExNSw3ICsxMTUsNyBAQAogIENSIGF0IGVuZFEKIEVPRgogZ2l0IGRpZmYgLWIgPiBvdXQKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fub3RoZXIgdGVzdCwgd2l0aCAtYicgJ2dpdCBkaWZmIGV4cGVjdCBvdXQnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbm90aGVyIHRlc3QsIHdpdGggLWInICd0ZXN0X2NtcCBleHBlY3Qgb3V0JwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBtaXhlZCBzcGFjZXMgYW5kIHRhYnMgaW4gaW5kZW50JyAnCiAKZGlmZiAtLWdpdCBhL3QvdDQwMTYtZGlmZi1xdW90ZS5zaCBiL3QvdDQwMTYtZGlmZi1xdW90ZS5zaAppbmRleCA1ZGJkYzBjLi4wOTUwMjUwIDEwMDc1NQotLS0gYS90L3Q0MDE2LWRpZmYtcXVvdGUuc2gKKysrIGIvdC90NDAxNi1kaWZmLXF1b3RlLnNoCkBAIC00OSw3ICs0OSw3IEBACiBFT0YKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIC0tc3VtbWFyeSAtTSBIRUFEJyAnCiAJZ2l0IGRpZmYgLS1zdW1tYXJ5IC1NIEhFQUQgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIGNhdCA+ZXhwZWN0IDw8XEVPRgpAQCAtNjQsNyArNjQsNyBAQAogRU9GCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZiAtLXN0YXQgLU0gSEVBRCcgJwogCWdpdCBkaWZmIC0tc3RhdCAtTSBIRUFEID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMTctZGlmZi1yZXR2YWwuc2ggYi90L3Q0MDE3LWRpZmYtcmV0dmFsLnNoCmluZGV4IGRjMGI3MTIuLjBkMGZiODcgMTAwNzU1Ci0tLSBhL3QvdDQwMTctZGlmZi1yZXR2YWwuc2gKKysrIGIvdC90NDAxNy1kaWZmLXJldHZhbC5zaApAQCAtMTA1LDQgKzEwNSwxMiBAQAogCiAnCiAKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgc2hvdWxkIHRlc3Qgbm90IGp1c3QgdGhlIGxhc3QgbGluZScgJworCWVjaG8gIiIgPj5hICYmCisJZ2l0IC0tbm8tcGFnZXIgZGlmZiAtLWNoZWNrCisJdGVzdCAkPyA9IDIKKworJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMTgtZGlmZi1mdW5jbmFtZS5zaCBiL3QvdDQwMTgtZGlmZi1mdW5jbmFtZS5zaAppbmRleCBmOWRiODFkLi42ZDNlZjZjIDEwMDc1NQotLS0gYS90L3Q0MDE4LWRpZmYtZnVuY25hbWUuc2gKKysrIGIvdC90NDAxOC1kaWZmLWZ1bmNuYW1lLnNoCkBAIC0zMywxMyArMzMsMTMgQEAKIHNlZCAncy9iZWVyXFwvYmVlcixcXC8nIDwgQmVlci5qYXZhID4gQmVlci1jb3JyZWN0LmphdmEKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVmYXVsdCBiZWhhdmlvdXInICcKLQlnaXQgZGlmZiBCZWVyLmphdmEgQmVlci1jb3JyZWN0LmphdmEgfAorCWdpdCBkaWZmIC0tbm8taW5kZXggQmVlci5qYXZhIEJlZXItY29ycmVjdC5qYXZhIHwKIAlncmVwICJeQEAuKkBAIHB1YmxpYyBjbGFzcyBCZWVyIgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVzZXQgamF2YSBwYXR0ZXJuJyAnCiAJZWNobyAiKi5qYXZhIGRpZmY9amF2YSIgPi5naXRhdHRyaWJ1dGVzICYmCi0JZ2l0IGRpZmYgQmVlci5qYXZhIEJlZXItY29ycmVjdC5qYXZhIHwKKwlnaXQgZGlmZiAtLW5vLWluZGV4IEJlZXIuamF2YSBCZWVyLWNvcnJlY3QuamF2YSB8CiAJZ3JlcCAiXkBALipAQCBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbigiCiAnCiAKQEAgLTQ4LDEzICs0OCwxMyBAQAogW14gCV0uKnMuKicKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY3VzdG9tIHBhdHRlcm4nICcKLQlnaXQgZGlmZiBCZWVyLmphdmEgQmVlci1jb3JyZWN0LmphdmEgfAorCWdpdCBkaWZmIC0tbm8taW5kZXggQmVlci5qYXZhIEJlZXItY29ycmVjdC5qYXZhIHwKIAlncmVwICJeQEAuKkBAIGludCBzcGVjaWFsOyQiCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xhc3QgcmVnZXhwIG11c3Qgbm90IGJlIG5lZ2F0ZWQnICcKIAlnaXQgY29uZmlnIGRpZmYuamF2YS5mdW5jbmFtZSAiIXN0YXRpYyIgJiYKLQkhIGdpdCBkaWZmIEJlZXIuamF2YSBCZWVyLWNvcnJlY3QuamF2YQorCSEgZ2l0IGRpZmYgLS1uby1pbmRleCBCZWVyLmphdmEgQmVlci1jb3JyZWN0LmphdmEKICcKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDI3LWRpZmYtc3VibW9kdWxlLnNoIGIvdC90NDAyNy1kaWZmLXN1Ym1vZHVsZS5zaAppbmRleCAxZmQzZmI3Li5iYTY2NzljIDEwMDc1NQotLS0gYS90L3Q0MDI3LWRpZmYtc3VibW9kdWxlLnNoCisrKyBiL3QvdDQwMjctZGlmZi1zdWJtb2R1bGUuc2gKQEAgLTUwLDQgKzUwLDExIEBACiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5maWxlcwogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZiAoZW1wdHkgc3VibW9kdWxlIGRpciknICcKKwk6ID5lbXB0eSAmJgorCXJtIC1yZiBzdWIvKiBzdWIvLmdpdCAmJgorCWdpdCBkaWZmID4gYWN0dWFsLmVtcHR5ICYmCisJdGVzdF9jbXAgZW1wdHkgYWN0dWFsLmVtcHR5CisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEwMC1hcHBseS1zdGF0LnNoIGIvdC90NDEwMC1hcHBseS1zdGF0LnNoCmluZGV4IDQzNWY2NWIuLjgwNzNhNWEgMTAwNzU1Ci0tLSBhL3QvdDQxMDAtYXBwbHktc3RhdC5zaAorKysgYi90L3Q0MTAwLWFwcGx5LXN0YXQuc2gKQEAgLTExLDM2ICsxMSwzNiBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ3JlbmFtZScgXAogICAgICdnaXQgYXBwbHkgLS1zdGF0IC0tc3VtbWFyeSA8Li4vdDQxMDAvdC1hcHBseS0xLnBhdGNoID5jdXJyZW50ICYmCi0gICAgZ2l0IGRpZmYgLi4vdDQxMDAvdC1hcHBseS0xLmV4cGVjdCBjdXJyZW50JworICAgIHRlc3RfY21wIC4uL3Q0MTAwL3QtYXBwbHktMS5leHBlY3QgY3VycmVudCcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2NvcHknIFwKICAgICAnZ2l0IGFwcGx5IC0tc3RhdCAtLXN1bW1hcnkgPC4uL3Q0MTAwL3QtYXBwbHktMi5wYXRjaCA+Y3VycmVudCAmJgotICAgIGdpdCBkaWZmIC4uL3Q0MTAwL3QtYXBwbHktMi5leHBlY3QgY3VycmVudCcKKyAgICB0ZXN0X2NtcCAuLi90NDEwMC90LWFwcGx5LTIuZXhwZWN0IGN1cnJlbnQnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdyZXdyaXRlJyBcCiAgICAgJ2dpdCBhcHBseSAtLXN0YXQgLS1zdW1tYXJ5IDwuLi90NDEwMC90LWFwcGx5LTMucGF0Y2ggPmN1cnJlbnQgJiYKLSAgICBnaXQgZGlmZiAuLi90NDEwMC90LWFwcGx5LTMuZXhwZWN0IGN1cnJlbnQnCisgICAgdGVzdF9jbXAgLi4vdDQxMDAvdC1hcHBseS0zLmV4cGVjdCBjdXJyZW50JwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnbW9kZScgXAogICAgICdnaXQgYXBwbHkgLS1zdGF0IC0tc3VtbWFyeSA8Li4vdDQxMDAvdC1hcHBseS00LnBhdGNoID5jdXJyZW50ICYmCi0gICAgZ2l0IGRpZmYgLi4vdDQxMDAvdC1hcHBseS00LmV4cGVjdCBjdXJyZW50JworICAgIHRlc3RfY21wIC4uL3Q0MTAwL3QtYXBwbHktNC5leHBlY3QgY3VycmVudCcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ25vbiBnaXQnIFwKICAgICAnZ2l0IGFwcGx5IC0tc3RhdCAtLXN1bW1hcnkgPC4uL3Q0MTAwL3QtYXBwbHktNS5wYXRjaCA+Y3VycmVudCAmJgotICAgIGdpdCBkaWZmIC4uL3Q0MTAwL3QtYXBwbHktNS5leHBlY3QgY3VycmVudCcKKyAgICB0ZXN0X2NtcCAuLi90NDEwMC90LWFwcGx5LTUuZXhwZWN0IGN1cnJlbnQnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdub24gZ2l0JyBcCiAgICAgJ2dpdCBhcHBseSAtLXN0YXQgLS1zdW1tYXJ5IDwuLi90NDEwMC90LWFwcGx5LTYucGF0Y2ggPmN1cnJlbnQgJiYKLSAgICBnaXQgZGlmZiAuLi90NDEwMC90LWFwcGx5LTYuZXhwZWN0IGN1cnJlbnQnCisgICAgdGVzdF9jbXAgLi4vdDQxMDAvdC1hcHBseS02LmV4cGVjdCBjdXJyZW50JwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnbm9uIGdpdCcgXAogICAgICdnaXQgYXBwbHkgLS1zdGF0IC0tc3VtbWFyeSA8Li4vdDQxMDAvdC1hcHBseS03LnBhdGNoID5jdXJyZW50ICYmCi0gICAgZ2l0IGRpZmYgLi4vdDQxMDAvdC1hcHBseS03LmV4cGVjdCBjdXJyZW50JworICAgIHRlc3RfY21wIC4uL3Q0MTAwL3QtYXBwbHktNy5leHBlY3QgY3VycmVudCcKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTA0LWFwcGx5LWJvdW5kYXJ5LnNoIGIvdC90NDEwNC1hcHBseS1ib3VuZGFyeS5zaAppbmRleCA0Mzk0M2FiLi5lN2UyOTEzIDEwMDc1NQotLS0gYS90L3Q0MTA0LWFwcGx5LWJvdW5kYXJ5LnNoCisrKyBiL3QvdDQxMDQtYXBwbHktYm91bmRhcnkuc2gKQEAgLTkwLDcgKzkwLDcgQEAKIAkJCQljYXQgJyIka2luZC1wYXRjaC4kd2l0aCInCiAJCQkJKGV4aXQgMSkKIAkJCX0gJiYKLQkJCWdpdCBkaWZmICciJGtpbmQiJy1leHBlY3QgdmljdGltCisJCQl0ZXN0X2NtcCAnIiRraW5kIictZXhwZWN0IHZpY3RpbQogCQknCiAJZG9uZQogZG9uZQpAQCAtMTA4LDcgKzEwOCw3IEBACiAJCQljYXQgJyIka2luZC1uZy53aXRob3V0IicKIAkJCShleGl0IDEpCiAJCX0gJiYKLQkJZ2l0IGRpZmYgJyIka2luZCInLWV4cGVjdCB2aWN0aW0KKwkJdGVzdF9jbXAgJyIka2luZCInLWV4cGVjdCB2aWN0aW0KIAknCiBkb25lCiAKZGlmZiAtLWdpdCBhL3QvdDQxMTUtYXBwbHktc3ltbGluay5zaCBiL3QvdDQxMTUtYXBwbHktc3ltbGluay5zaAppbmRleCBhMDdmZjQyLi45YWNlNTc4IDEwMDc1NQotLS0gYS90L3Q0MTE1LWFwcGx5LXN5bWxpbmsuc2gKKysrIGIvdC90NDExNS1hcHBseS1zeW1saW5rLnNoCkBAIC0zMyw3ICszMyw3IEBACiAJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKIAlnaXQgYXBwbHkgcGF0Y2ggJiYKIAlnaXQgZGlmZi1maWxlcyAtcCA+cGF0Y2hlZCAmJgotCWdpdCBkaWZmIHBhdGNoIHBhdGNoZWQKKwl0ZXN0X2NtcCBwYXRjaCBwYXRjaGVkCiAKICcKIApAQCAtNDIsNyArNDIsNyBAQAogCWdpdCBjaGVja291dCAtZiBzaWRlICYmCiAJZ2l0IGFwcGx5IC0taW5kZXggcGF0Y2ggJiYKIAlnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtcCBIRUFEID5wYXRjaGVkICYmCi0JZ2l0IGRpZmYgcGF0Y2ggcGF0Y2hlZAorCXRlc3RfY21wIHBhdGNoIHBhdGNoZWQKIAogJwogCmRpZmYgLS1naXQgYS90L3Q0MTE2LWFwcGx5LXJldmVyc2Uuc2ggYi90L3Q0MTE2LWFwcGx5LXJldmVyc2Uuc2gKaW5kZXggYzNmNDU3OS4uMTQ1OWE5MCAxMDA3NTUKLS0tIGEvdC90NDExNi1hcHBseS1yZXZlcnNlLnNoCisrKyBiL3QvdDQxMTYtYXBwbHktcmV2ZXJzZS5zaApAQCAtNDIsNyArNDIsNyBAQAogCWdpdCByZXNldCAtLWhhcmQgc2Vjb25kICYmCiAJZ2l0IGFwcGx5IC0tcmV2ZXJzZSAtLWJpbmFyeSAtLWluZGV4IHBhdGNoICYmCiAJZ2l0IGRpZmYgPmRpZmYgJiYKLQlnaXQgZGlmZiAvZGV2L251bGwgZGlmZgorCXRlc3RfY21wIC9kZXYvbnVsbCBkaWZmCiAKICcKIApkaWZmIC0tZ2l0IGEvdC90NDExNy1hcHBseS1yZWplY3Quc2ggYi90L3Q0MTE3LWFwcGx5LXJlamVjdC5zaAppbmRleCA2NTllMTdjLi5lOWNjZDE2IDEwMDc1NQotLS0gYS90L3Q0MTE3LWFwcGx5LXJlamVjdC5zaAorKysgYi90L3Q0MTE3LWFwcGx5LXJlamVjdC5zaApAQCAtNTQsNyArNTQsNyBAQAogCQlleGl0IDEKIAlmaQogCi0JZ2l0IGRpZmYgZmlsZTEgc2F2ZWQuZmlsZTEKKwl0ZXN0X2NtcCBmaWxlMSBzYXZlZC5maWxlMQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSB3aXRob3V0IC0tcmVqZWN0IHNob3VsZCBmYWlsJyAnCkBAIC02NSw3ICs2NSw3IEBACiAJCWV4aXQgMQogCWZpCiAKLQlnaXQgZGlmZiBmaWxlMSBzYXZlZC5maWxlMQorCXRlc3RfY21wIGZpbGUxIHNhdmVkLmZpbGUxCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHdpdGggLS1yZWplY3Qgc2hvdWxkIGZhaWwgYnV0IHVwZGF0ZSB0aGUgZmlsZScgJwpAQCAtNzksNyArNzksNyBAQAogCQlleGl0IDEKIAlmaQogCi0JZ2l0IGRpZmYgZmlsZTEgZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBmaWxlMSBleHBlY3RlZCAmJgogCiAJY2F0IGZpbGUxLnJlaiAmJgogCkBAIC0xMDUsNyArMTA1LDcgQEAKIAkJZWNobyAiZmlsZTEgc3RpbGwgZXhpc3RzPyIKIAkJZXhpdCAxCiAJfQotCWdpdCBkaWZmIGZpbGUyIGV4cGVjdGVkICYmCisJdGVzdF9jbXAgZmlsZTIgZXhwZWN0ZWQgJiYKIAogCWNhdCBmaWxlMi5yZWogJiYKIApAQCAtMTMyLDcgKzEzMiw3IEBACiAJCWVjaG8gImZpbGUxIHN0aWxsIGV4aXN0cz8iCiAJCWV4aXQgMQogCX0KLQlnaXQgZGlmZiBmaWxlMiBleHBlY3RlZCAmJgorCXRlc3RfY21wIGZpbGUyIGV4cGVjdGVkICYmCiAKIAljYXQgZmlsZTIucmVqICYmCiAKQEAgLTE1MSw3ICsxNTEsNyBAQAogCiAJZ2l0IGFwcGx5IC0tdmVyYm9zZSBwYXRjaC4xICYmCiAKLQlnaXQgZGlmZiBmaWxlMSBjbGVhbgorCXRlc3RfY21wIGZpbGUxIGNsZWFuCiAnCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDExOC1hcHBseS1lbXB0eS1jb250ZXh0LnNoIGIvdC90NDExOC1hcHBseS1lbXB0eS1jb250ZXh0LnNoCmluZGV4IDFkNTMxY2EuLmY5MmUyNTkgMTAwNzU1Ci0tLSBhL3QvdDQxMTgtYXBwbHktZW1wdHktY29udGV4dC5zaAorKysgYi90L3Q0MTE4LWFwcGx5LWVtcHR5LWNvbnRleHQuc2gKQEAgLTM4LDcgKzM4LDcgQEAKIAkJZWNobyAiMAkxCWZpbGUxIiAmJgogCQllY2hvICIwCTEJZmlsZTIiCiAJfSA+ZXhwZWN0ICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKIAogJwogCkBAIC00OCw4ICs0OCw4IEBACiAJY2F0IGZpbGUyLm9yaWcgPmZpbGUyICYmCiAJZ2l0IHVwZGF0ZS1pbmRleCBmaWxlMSBmaWxlMiAmJgogCWdpdCBhcHBseSAtLWluZGV4IGRpZmYub3V0cHV0ICYmCi0JZ2l0IGRpZmYgZmlsZTEubW9kcyBmaWxlMSAmJgotCWdpdCBkaWZmIGZpbGUyLm1vZHMgZmlsZTIKKwl0ZXN0X2NtcCBmaWxlMS5tb2RzIGZpbGUxICYmCisJdGVzdF9jbXAgZmlsZTIubW9kcyBmaWxlMgogJwogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMjYtYXBwbHktZW1wdHkuc2ggYi90L3Q0MTI2LWFwcGx5LWVtcHR5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNlYjZhNzkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTI2LWFwcGx5LWVtcHR5LnNoCkBAIC0wLDAgKzEsNTcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdhcHBseSBlbXB0eScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCT5lbXB0eSAmJgorCWdpdCBhZGQgZW1wdHkgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlmb3IgaSBpbiBhIGIgYyBkIGUKKwlkbworCQllY2hvICRpCisJZG9uZSA+ZW1wdHkgJiYKKwljYXQgZW1wdHkgPmV4cGVjdCAmJgorCWdpdCBkaWZmIHwKKwlzZWQgLWUgIi9eZGlmZiAtLWdpdC9kIiBcCisJICAgIC1lICIvXmluZGV4IC9kIiBcCisJICAgIC1lICJzfGEvZW1wdHl8ZW1wdHkub3JpZ3wiIFwKKwkgICAgLWUgInN8Yi9lbXB0eXxlbXB0eXwiID5wYXRjaDAgJiYKKwlzZWQgLWUgInN8ZW1wdHl8bWlzc2luZ3wiIHBhdGNoMCA+cGF0Y2gxICYmCisJPmVtcHR5ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgZW1wdHknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJcm0gLWYgbWlzc2luZyAmJgorCWdpdCBhcHBseSBwYXRjaDAgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZW1wdHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1pbmRleCBlbXB0eScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlybSAtZiBtaXNzaW5nICYmCisJZ2l0IGFwcGx5IC0taW5kZXggcGF0Y2gwICYmCisJdGVzdF9jbXAgZXhwZWN0IGVtcHR5ICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgY3JlYXRlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXJtIC1mIG1pc3NpbmcgJiYKKwlnaXQgYXBwbHkgcGF0Y2gxICYmCisJdGVzdF9jbXAgZXhwZWN0IG1pc3NpbmcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1pbmRleCBjcmVhdGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJcm0gLWYgbWlzc2luZyAmJgorCWdpdCBhcHBseSAtLWluZGV4IHBhdGNoMSAmJgorCXRlc3RfY21wIGV4cGVjdCBtaXNzaW5nICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTUwLWFtLXN1YmRpci5zaCBiL3QvdDQxNTAtYW0tc3ViZGlyLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA1MjA2OWI0Li4wMDAwMDAwCi0tLSBhL3QvdDQxNTAtYW0tc3ViZGlyLnNoCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotIyEvYmluL3NoCi0KLXRlc3RfZGVzY3JpcHRpb249J2dpdCBhbSBydW5uaW5nIGZyb20gYSBzdWJkaXJlY3RvcnknCi0KLS4gLi90ZXN0LWxpYi5zaAotCi10ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKLQllY2hvIGhlbGxvID53b3JsZCAmJgotCWdpdCBhZGQgd29ybGQgJiYKLQl0ZXN0X3RpY2sgJiYKLQlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKLQlnaXQgdGFnIGluaXRpYWwgJiYKLQllY2hvIGdvb2RieWUgPndvcmxkICYmCi0JZ2l0IGFkZCB3b3JsZCAmJgotCXRlc3RfdGljayAmJgotCWdpdCBjb21taXQgLW0gc2Vjb25kICYmCi0JZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBIRUFEXiA+cGF0Y2hmaWxlICYmCi0JOiA+ZXhwZWN0Ci0nCi0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIHJlZ3VsYXJseSBmcm9tIHN0ZGluJyAnCi0JZ2l0IGNoZWNrb3V0IGluaXRpYWwgJiYKLQlnaXQgYW0gPHBhdGNoZmlsZSAmJgotCWdpdCBkaWZmIG1hc3RlciA+YWN0dWFsICYmCi0JdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAotJwotCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSByZWd1bGFybHkgZnJvbSBmaWxlJyAnCi0JZ2l0IGNoZWNrb3V0IGluaXRpYWwgJiYKLQlnaXQgYW0gcGF0Y2hmaWxlICYmCi0JZ2l0IGRpZmYgbWFzdGVyID5hY3R1YWwgJiYKLQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCi0nCi0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIHJlZ3VsYXJseSBmcm9tIHN0ZGluIGluIHN1YmRpcmVjdG9yeScgJwotCXJtIC1mciBzdWJkaXIgJiYKLQlnaXQgY2hlY2tvdXQgaW5pdGlhbCAmJgotCSgKLQkJbWtkaXIgLXAgc3ViZGlyICYmCi0JCWNkIHN1YmRpciAmJgotCQlnaXQgYW0gPC4uL3BhdGNoZmlsZQotCSkgJiYKLQlnaXQgZGlmZiBtYXN0ZXI+YWN0dWFsICYmCi0JdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAotJwotCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSByZWd1bGFybHkgZnJvbSBmaWxlIGluIHN1YmRpcmVjdG9yeScgJwotCXJtIC1mciBzdWJkaXIgJiYKLQlnaXQgY2hlY2tvdXQgaW5pdGlhbCAmJgotCSgKLQkJbWtkaXIgLXAgc3ViZGlyICYmCi0JCWNkIHN1YmRpciAmJgotCQlnaXQgYW0gLi4vcGF0Y2hmaWxlCi0JKSAmJgotCWdpdCBkaWZmIG1hc3RlciA+YWN0dWFsICYmCi0JdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAotJwotCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSByZWd1bGFybHkgZnJvbSBmaWxlIGluIHN1YmRpcmVjdG9yeSB3aXRoIGZ1bGwgcGF0aCcgJwotCXJtIC1mciBzdWJkaXIgJiYKLQlnaXQgY2hlY2tvdXQgaW5pdGlhbCAmJgotCVA9JChwd2QpICYmCi0JKAotCQlta2RpciAtcCBzdWJkaXIgJiYKLQkJY2Qgc3ViZGlyICYmCi0JCWdpdCBhbSAiJFAvcGF0Y2hmaWxlIgotCSkgJiYKLQlnaXQgZGlmZiBtYXN0ZXIgPmFjdHVhbCAmJgotCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKLScKLQotdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTUwLWFtLnNoIGIvdC90NDE1MC1hbS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MjJhZTk2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDE1MC1hbS5zaApAQCAtMCwwICsxLDI2MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhbSBydW5uaW5nJworCisuIC4vdGVzdC1saWIuc2gKKworY2F0ID5tc2cgPDxFT0YKK3NlY29uZAorCitMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteQorZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtCit2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YQora2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0KK2lwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QKK3RlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdAordmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4KKworCUR1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdAorCWVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzCisJYXQgdmVybyBlcm9zIGV0IGFjY3Vtc2FuIGV0IGl1c3RvIG9kaW8gZGlnbmlzc2ltIHF1aSBibGFuZGl0CisJcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhCisJZmFjaWxpc2kuCisKKworTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsCitjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQKK2xhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4KKworICBnaXQKKyAgLS0tCisgICsrKworCitVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdAorbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0LiBEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlCitkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0KK2RvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbworZGlnbmlzc2ltIHF1aSBibGFuZGl0IHByYWVzZW50IGx1cHRhdHVtIHp6cmlsIGRlbGVuaXQgYXVndWUgZHVpcyBkb2xvcmUgdGUKK2ZldWdhaXQgbnVsbGEgZmFjaWxpc2kuCitFT0YKKworY2F0ID5mYWlsbWFpbCA8PEVPRgorRnJvbSBmb29AZXhhbXBsZS5jb20gRnJpIE1heSAyMyAxMDo0Mzo0OSAyMDA4CitGcm9tOglmb29AZXhhbXBsZS5jb20KK1RvOgliYXJAZXhhbXBsZS5jb20KK1N1YmplY3Q6IFJlOiBbUkZDL1BBVENIXSBnaXQtZm9vLnNoCitEYXRlOglGcmksIDIzIE1heSAyMDA4IDA1OjIzOjQyICswMjAwCisKK1NvbWV0aW1lcyB3ZSBoYXZlIHRvIGZpbmQgb3V0IHRoYXQgdGhlcmUncyBub3RoaW5nIGxlZnQuCisKK0VPRgorCitjYXQgPnBpbmUgPDxFT0YKK0Zyb20gTUFJTEVSLURBRU1PTiBGcmkgTWF5IDIzIDEwOjQzOjQ5IDIwMDgKK0RhdGU6IDIzIE1heSAyMDA4IDA1OjIzOjQyICswMjAwCitGcm9tOiBNYWlsIFN5c3RlbSBJbnRlcm5hbCBEYXRhIDxNQUlMRVItREFFTU9OQGV4YW1wbGUuY29tPgorU3ViamVjdDogRE9OJ1QgREVMRVRFIFRISVMgTUVTU0FHRSAtLSBGT0xERVIgSU5URVJOQUwgREFUQQorTWVzc2FnZS1JRDogPGZvby0wMDAxQGV4YW1wbGUuY29tPgorCitUaGlzIHRleHQgaXMgcGFydCBvZiB0aGUgaW50ZXJuYWwgZm9ybWF0IG9mIHlvdXIgbWFpbCBmb2xkZXIsIGFuZCBpcyBub3QKK2EgcmVhbCBtZXNzYWdlLiAgSXQgaXMgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBtYWlsIHN5c3RlbSBzb2Z0d2FyZS4KK0lmIGRlbGV0ZWQsIGltcG9ydGFudCBmb2xkZXIgZGF0YSB3aWxsIGJlIGxvc3QsIGFuZCBpdCB3aWxsIGJlIHJlLWNyZWF0ZWQKK3dpdGggdGhlIGRhdGEgcmVzZXQgdG8gaW5pdGlhbCB2YWx1ZXMuCisKK0VPRgorCitlY2hvICJTaWduZWQtb2ZmLWJ5OiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4iID5leHBlY3RlZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIGhlbGxvID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBmaXJzdCAmJgorCWdpdCB0YWcgZmlyc3QgJiYKKwllY2hvIHdvcmxkID4+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLXMgLUYgbXNnICYmCisJZ2l0IHRhZyBzZWNvbmQgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IGZpcnN0ID5wYXRjaDEgJiYKKwlzZWQgLW4gLWUgIjMsXCRwIiBtc2cgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHRoaXJkICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBmaXJzdCA+cGF0Y2gyCSYmCisJZ2l0IGNoZWNrb3V0IC1iIGxvcmVtICYmCisJc2VkIC1uIC1lICIxMSxcJHAiIG1zZyA+ZmlsZSAmJgorCWhlYWQgLW4gOSBtc2cgPj5maWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAibW92ZWQgc3R1ZmYiICYmCisJZWNobyBnb29kYnllID5hbm90aGVyICYmCisJZ2l0IGFkZCBhbm90aGVyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkZWQgYW5vdGhlciBmaWxlIiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgbWFzdGVyID5sb3JlbS1tb3ZlLnBhdGNoCisnCisKKyMgcmVzZXQgdGltZQordW5zZXQgdGVzdF90aWNrCit0ZXN0X3RpY2sKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gYXBwbGllcyBwYXRjaCBjb3JyZWN0bHknICcKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgYW0gPHBhdGNoMSAmJgorCSEgdGVzdCAtZCAuZG90ZXN0ICYmCisJdGVzdCAteiAiJChnaXQgZGlmZiBzZWNvbmQpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBzZWNvbmQpIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHNlY29uZF4pIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4pIgorJworCitHSVRfQVVUSE9SX05BTUU9IkFub3RoZXIgVGhvciIKK0dJVF9BVVRIT1JfRU1BSUw9ImEudGhvckBleGFtcGxlLmNvbSIKK0dJVF9DT01NSVRURVJfTkFNRT0iQ28gTSBNaXRlciIgCitHSVRfQ09NTUlUVEVSX0VNQUlMPSJjLm1pdGVyQGV4YW1wbGUuY29tIgorZXhwb3J0IEdJVF9BVVRIT1JfTkFNRSBHSVRfQVVUSE9SX0VNQUlMIEdJVF9DT01NSVRURVJfTkFNRSBHSVRfQ09NTUlUVEVSX0VNQUlMCisKK2NvbXBhcmUgKCkgeworCXRlc3QgIiQoZ2l0IGNhdC1maWxlIGNvbW1pdCAiJDIiIHwgZ3JlcCAiXiQxICIpIiA9IFwKKwkgICAgICIkKGdpdCBjYXQtZmlsZSBjb21taXQgIiQzIiB8IGdyZXAgIl4kMSAiKSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gY2hhbmdlcyBjb21taXR0ZXIgYW5kIGtlZXBzIGF1dGhvcicgJworCXRlc3RfdGljayAmJgorCWdpdCBjaGVja291dCBmaXJzdCAmJgorCWdpdCBhbSBwYXRjaDIgJiYKKwkhIHRlc3QgLWQgLmRvdGVzdCAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBtYXN0ZXJeXikiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEXl4pIiAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYgbWFzdGVyLi5IRUFEKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmIG1hc3Rlcl4uLkhFQUReKSIgJiYKKwljb21wYXJlIGF1dGhvciBtYXN0ZXIgSEVBRCAmJgorCWNvbXBhcmUgYXV0aG9yIG1hc3Rlcl4gSEVBRF4gJiYKKwl0ZXN0ICIkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4iID0gXAorCSAgICAgIiQoZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6IiVjbiA8JWNlPiIgSEVBRCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0tc2lnbm9mZiBhZGRzIFNpZ25lZC1vZmYtYnk6IGxpbmUnICcKKwlnaXQgY2hlY2tvdXQgLWIgbWFzdGVyMiBmaXJzdCAmJgorCWdpdCBhbSAtLXNpZ25vZmYgPHBhdGNoMiAmJgorCWVjaG8gIlNpZ25lZC1vZmYtYnk6ICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiIgPj5leHBlY3RlZCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gfCBncmVwICJTaWduZWQtb2ZmLWJ5OiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGFjdHVhbCBleHBlY3RlZCAmJgorCWVjaG8gIlNpZ25lZC1vZmYtYnk6ICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiIgPmV4cGVjdGVkICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgZ3JlcCAiU2lnbmVkLW9mZi1ieToiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgZXhwZWN0ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gc3RheXMgaW4gYnJhbmNoJyAnCisJdGVzdCAicmVmcy9oZWFkcy9tYXN0ZXIyIiA9ICIkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0tc2lnbm9mZiBkb2VzIG5vdCBhZGQgU2lnbmVkLW9mZi1ieTogbGluZSBpZiBhbHJlYWR5IHRoZXJlJyAnCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBIRUFEXiA+cGF0Y2gzICYmCisJc2VkIC1lICIvXlN1YmplY3QvIHMsXFtQQVRDSCxSZTogUmU6IFJlOiAmIDEvNSB2MiwiIHBhdGNoMyA+cGF0Y2g0CisJZ2l0IGNoZWNrb3V0IEhFQUReICYmCisJZ2l0IGFtIC0tc2lnbm9mZiBwYXRjaDQgJiYKKwl0ZXN0ICIkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IGdyZXAgLWMgIl5TaWduZWQtb2ZmLWJ5OiIpIiAtZXEgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSB3aXRob3V0IC0ta2VlcCByZW1vdmVzIFJlOiBhbmQgW1BBVENIXSBzdHVmZicgJworCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgPSAiJChnaXQgcmV2LXBhcnNlIG1hc3RlcjIpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtLWtlZXAgcmVhbGx5IGtlZXBzIHRoZSBzdWJqZWN0JyAnCisJZ2l0IGNoZWNrb3V0IEhFQUReICYmCisJZ2l0IGFtIC0ta2VlcCBwYXRjaDQgJiYKKwkhIHRlc3QgLWQgLmRvdGVzdCAmJgorCWdpdC1jYXQtZmlsZSBjb21taXQgSEVBRCB8CisJCWdyZXAgLXEgLUYgIlJlOiBSZTogUmU6IFtQQVRDSCAxLzUgdjJdIHRoaXJkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtMyBmYWxscyBiYWNrIHRvIDMtd2F5IG1lcmdlJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGxvcmVtMiBtYXN0ZXIyICYmCisJc2VkIC1uIC1lICIzLFwkcCIgbXNnID5maWxlICYmCisJaGVhZCAtbiA5IG1zZyA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJjb3BpZWQgc3R1ZmYiICYmCisJZ2l0IGFtIC0zIGxvcmVtLW1vdmUucGF0Y2ggJiYKKwkhIHRlc3QgLWQgLmRvdGVzdCAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYgbG9yZW0pIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSBwYXVzZXMgb24gY29uZmxpY3QnICcKKwlnaXQgY2hlY2tvdXQgbG9yZW0yXl4gJiYKKwkhIGdpdCBhbSBsb3JlbS1tb3ZlLnBhdGNoICYmCisJdGVzdCAtZCAuZG90ZXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0tc2tpcCB3b3JrcycgJworCWdpdCBhbSAtLXNraXAgJiYKKwkhIHRlc3QgLWQgLmRvdGVzdCAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYgbG9yZW0yXl4gLS0gZmlsZSkiICYmCisJdGVzdCBnb29kYnllID0gIiQoY2F0IGFub3RoZXIpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtLXJlc29sdmVkIHdvcmtzJyAnCisJZ2l0IGNoZWNrb3V0IGxvcmVtMl5eICYmCisJISBnaXQgYW0gbG9yZW0tbW92ZS5wYXRjaCAmJgorCXRlc3QgLWQgLmRvdGVzdCAmJgorCWVjaG8gcmVzb2x2ZWQgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGFtIC0tcmVzb2x2ZWQgJiYKKwkhIHRlc3QgLWQgLmRvdGVzdCAmJgorCXRlc3QgZ29vZGJ5ZSA9ICIkKGNhdCBhbm90aGVyKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gdGFrZXMgcGF0Y2hlcyBmcm9tIGEgUGluZSBtYWlsYm94JyAnCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisJY2F0IHBpbmUgcGF0Y2gxIHwgZ2l0IGFtICYmCisJISB0ZXN0IC1kIC5kb3Rlc3QgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmIG1hc3Rlcl4uLkhFQUQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSBmYWlscyBvbiBtYWlsIHdpdGhvdXQgcGF0Y2gnICcKKwkhIGdpdCBhbSA8ZmFpbG1haWwgJiYKKwlybSAtciAuZG90ZXN0LworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSBmYWlscyBvbiBlbXB0eSBwYXRjaCcgJworCWVjaG8gIi0tLSIgPj5mYWlsbWFpbCAmJgorCSEgZ2l0IGFtIDxmYWlsbWFpbCAmJgorCWdpdCBhbSAtLXNraXAgJiYKKwkhIHRlc3QgLWQgLmRvdGVzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSB3b3JrcyBmcm9tIHN0ZGluIGluIHN1YmRpcmVjdG9yeScgJworCXJtIC1mciBzdWJkaXIgJiYKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKwkoCisJCW1rZGlyIC1wIHN1YmRpciAmJgorCQljZCBzdWJkaXIgJiYKKwkJZ2l0IGFtIDwuLi9wYXRjaDEKKwkpICYmCisJdGVzdCAteiAiJChnaXQgZGlmZiBzZWNvbmQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSB3b3JrcyBmcm9tIGZpbGUgKHJlbGF0aXZlIHBhdGggZ2l2ZW4pIGluIHN1YmRpcmVjdG9yeScgJworCXJtIC1mciBzdWJkaXIgJiYKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKwkoCisJCW1rZGlyIC1wIHN1YmRpciAmJgorCQljZCBzdWJkaXIgJiYKKwkJZ2l0IGFtIC4uL3BhdGNoMQorCSkgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmIHNlY29uZCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIHdvcmtzIGZyb20gZmlsZSAoYWJzb2x1dGUgcGF0aCBnaXZlbikgaW4gc3ViZGlyZWN0b3J5JyAnCisJcm0gLWZyIHN1YmRpciAmJgorCWdpdCBjaGVja291dCBmaXJzdCAmJgorCVA9JChwd2QpICYmCisJKAorCQlta2RpciAtcCBzdWJkaXIgJiYKKwkJY2Qgc3ViZGlyICYmCisJCWdpdCBhbSAiJFAvcGF0Y2gxIgorCSkgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmIHNlY29uZCkiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDIwMC1yZXJlcmUuc2ggYi90L3Q0MjAwLXJlcmVyZS5zaAppbmRleCAzY2JmZWU3Li44NWQ3ZTNlIDEwMDc1NQotLS0gYS90L3Q0MjAwLXJlcmVyZS5zaAorKysgYi90L3Q0MjAwLXJlcmVyZS5zaApAQCAtMTAxLDcgKzEwMSw3IEBACiBFT0YKIGdpdCByZXJlcmUgZGlmZiA+IG91dAogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXJlcmUgZGlmZicgJ2dpdCBkaWZmIGV4cGVjdCBvdXQnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXJlcmUgZGlmZicgJ3Rlc3RfY21wIGV4cGVjdCBvdXQnCiAKIGNhdCA+IGV4cGVjdCA8PCBFT0YKIGExCkBAIC0xMDksNyArMTA5LDcgQEAKIAogZ2l0IHJlcmVyZSBzdGF0dXMgPiBvdXQKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAncmVyZXJlIHN0YXR1cycgJ2dpdCBkaWZmIGV4cGVjdCBvdXQnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXJlcmUgc3RhdHVzJyAndGVzdF9jbXAgZXhwZWN0IG91dCcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IHN1Y2NlZWRzJyBcCiAJImdpdCBjb21taXQgLXEgLWEgLW0gJ3ByZWZlciBmaXJzdCBvdmVyIHNlY29uZCciCkBAIC0xMjYsNyArMTI2LDcgQEAKIGdpdCBzaG93IGZpcnN0OmExIHwgc2VkICdzL1RvIGRpZTogdC9UbyBkaWUhIFQvJyA+IGV4cGVjdAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmVyZXJlIGtpY2tlZCBpbicgIiEgZ3JlcCA9PT09PT09IGExIgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXJlcmUgcHJlZmVycyBmaXJzdCBjaGFuZ2UnICdnaXQgZGlmZiBhMSBleHBlY3QnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXJlcmUgcHJlZmVycyBmaXJzdCBjaGFuZ2UnICd0ZXN0X2NtcCBhMSBleHBlY3QnCiAKIHJtICRyci9wb3N0aW1hZ2UKIGVjaG8gIiRzaGExCWExIiB8IHBlcmwgLXBlICd5L1wwMTIvXDAwMC8nID4gLmdpdC9yci1jYWNoZS9NRVJHRV9SUgpkaWZmIC0tZ2l0IGEvdC90NDIwMi1sb2cuc2ggYi90L3Q0MjAyLWxvZy5zaAppbmRleCBiNTM2NDU0Li40YzhhZjQ1IDEwMDc1NQotLS0gYS90L3Q0MjAyLWxvZy5zaAorKysgYi90L3Q0MjAyLWxvZy5zaApAQCAtNzEsNCArNzEsNSBAQAogCiAKIAotdGVzdF9kb25lClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQordGVzdF9kb25lCisKZGlmZiAtLWdpdCBhL3QvdDUwMDAtdGFyLXRyZWUuc2ggYi90L3Q1MDAwLXRhci10cmVlLnNoCmluZGV4IGZhNjJiNmEuLjg3OTAyZjggMTAwNzU1Ci0tLSBhL3QvdDUwMDAtdGFyLXRyZWUuc2gKKysrIGIvdC90NTAwMC10YXItdHJlZS5zaApAQCAtMjUsNyArMjUsNiBAQAogJwogCiAuIC4vdGVzdC1saWIuc2gKLVRBUj0ke1RBUjotdGFyfQogVU5aSVA9JHtVTlpJUDotdW56aXB9CiAKIFNVQlNURk9STUFUPSVIJW4KQEAgLTY3LDEwICs2NiwxMCBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAndmFsaWRhdGUgZmlsZSBtb2RpZmljYXRpb24gdGltZScgXAotICAgICdUWj1HTVQgJFRBUiB0dmYgYi50YXIgYS9hIHwKLSAgICAgYXdrIFx7cHJpbnRcIFwkNCxcIFwobGVuZ3RoXChcJDVcKVw8N1wpXCA/XCBcJDVcIjowMFwiXCA6XCBcJDVcfSBcCi0gICAgID5iLm10aW1lICYmCi0gICAgIGVjaG8gIjIwMDUtMDUtMjcgMjI6MDA6MDAiID5leHBlY3RlZC5tdGltZSAmJgorICAgICdta2RpciBleHRyYWN0ICYmCisgICAgICIkVEFSIiB4ZiBiLnRhciAtQyBleHRyYWN0IGEvYSAmJgorICAgICBwZXJsIC1lICdcJydwcmludCgoc3RhdCgiZXh0cmFjdC9hL2EiKSlbOV0sICJcbiIpJ1wnJyA+Yi5tdGltZSAmJgorICAgICBlY2hvICIxMTE3MjMxMjAwIiA+ZXhwZWN0ZWQubXRpbWUgJiYKICAgICAgZGlmZiBleHBlY3RlZC5tdGltZSBiLm10aW1lJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKQEAgLTgwLDcgKzc5LDcgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2V4dHJhY3QgdGFyIGFyY2hpdmUnIFwKLSAgICAnKGNkIGIgJiYgJFRBUiB4ZiAtKSA8Yi50YXInCisgICAgJyhjZCBiICYmICIkVEFSIiB4ZiAtKSA8Yi50YXInCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICd2YWxpZGF0ZSBmaWxlbmFtZXMnIFwKQEAgLTk3LDcgKzk2LDcgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2V4dHJhY3QgdGFyIGFyY2hpdmUgd2l0aCBwcmVmaXgnIFwKLSAgICAnKGNkIGMgJiYgJFRBUiB4ZiAtKSA8Yy50YXInCisgICAgJyhjZCBjICYmICIkVEFSIiB4ZiAtKSA8Yy50YXInCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICd2YWxpZGF0ZSBmaWxlbmFtZXMgd2l0aCBwcmVmaXgnIFwKQEAgLTExNyw3ICsxMTYsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnZXh0cmFjdCBzdWJzdGZpbGVzJyBcCi0gICAgJyhta2RpciBmICYmIGNkIGYgJiYgJFRBUiB4ZiAtKSA8Zi50YXInCisgICAgJyhta2RpciBmICYmIGNkIGYgJiYgIiRUQVIiIHhmIC0pIDxmLnRhcicKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgICd2YWxpZGF0ZSBzdWJzdGZpbGUgY29udGVudHMnIFwKQEAgLTEyOSw3ICsxMjgsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKICAgICAnZXh0cmFjdCBzdWJzdGZpbGVzIGZyb20gYXJjaGl2ZSB3aXRoIHByZWZpeCcgXAotICAgICcobWtkaXIgZyAmJiBjZCBnICYmICRUQVIgeGYgLSkgPGcudGFyJworICAgICcobWtkaXIgZyAmJiBjZCBnICYmICIkVEFSIiB4ZiAtKSA8Zy50YXInCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICAndmFsaWRhdGUgc3Vic3RmaWxlIGNvbnRlbnRzIGZyb20gYXJjaGl2ZSB3aXRoIHByZWZpeCcgXApkaWZmIC0tZ2l0IGEvdC90NTEwMC1tYWlsaW5mby5zaCBiL3QvdDUxMDAtbWFpbGluZm8uc2gKaW5kZXggZDZjNTVjMS4uZTlmM2U3MiAxMDA3NTUKLS0tIGEvdC90NTEwMC1tYWlsaW5mby5zaAorKysgYi90L3Q1MTAwLW1haWxpbmZvLnNoCkBAIC0xMSw3ICsxMSw3IEBACiAJJ2dpdCBtYWlsc3BsaXQgLW8uIC4uL3Q1MTAwL3NhbXBsZS5tYm94ID5sYXN0ICYmCiAJbGFzdD1gY2F0IGxhc3RgICYmCiAJZWNobyB0b3RhbCBpcyAkbGFzdCAmJgotCXRlc3QgYGNhdCBsYXN0YCA9IDknCisJdGVzdCBgY2F0IGxhc3RgID0gMTAnCiAKIGZvciBtYWlsIGluIGBlY2hvIDAwKmAKIGRvCkBAIC0yNSw0ICsyNSwyMiBAQAogCQlkaWZmIC4uL3Q1MTAwL2luZm8kbWFpbCBpbmZvJG1haWwiCiBkb25lCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc3BlY3QgTlVMcycgJworCisJZ2l0IG1haWxzcGxpdCAtZDMgLW8uIC4uL3Q1MTAwL251bC1wbGFpbiAmJgorCWNtcCAuLi90NTEwMC9udWwtcGxhaW4gMDAxICYmCisJKGNhdCAwMDEgfCBnaXQgbWFpbGluZm8gbXNnIHBhdGNoKSAmJgorCXRlc3QgNCA9ICQod2MgLWwgPCBwYXRjaCkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdQcmVzZXJ2ZSBOVUxzIG91dCBvZiBNSU1FIGVuY29kZWQgbWVzc2FnZScgJworCisJZ2l0IG1haWxzcGxpdCAtZDUgLW8uIC4uL3Q1MTAwL251bC1iNjQuaW4gJiYKKwljbXAgLi4vdDUxMDAvbnVsLWI2NC5pbiAwMDAwMSAmJgorCWdpdCBtYWlsaW5mbyBtc2cgcGF0Y2ggPDAwMDAxICYmCisJY21wIC4uL3Q1MTAwL251bC1iNjQuZXhwZWN0IHBhdGNoCisKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MTAwLzAwMTAgYi90L3Q1MTAwLzAwMTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU4OTJjOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvMDAxMApAQCAtMCwwICsxLDM1IEBACitGcm9tIGI5NzA0YTUxOGUyMTE1ODQzM2JhYTJjYzJkNTkxZmVhNjg3OTY3ZjYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/THVrYXM9MjBTYW5kc3RyPUMzPUI2bT89IDxsdWthc3NAZXRlay5jaGFsbWVycy5zZT4KK0RhdGU6IFRodSwgMTAgSnVsIDIwMDggMjM6NDE6MzMgKzAyMDAKK1N1YmplY3Q6IFJlOiBkaXNjdXNzaW9uIHRoYXQgbGVhZCB0byB0aGlzIHBhdGNoCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK1tQQVRDSF0gZ2l0LW1haWxpbmZvOiBGaXggZ2V0dGluZyB0aGUgc3ViamVjdCBmcm9tIHRoZSBib2R5CisKKyJTdWJqZWN0OiAiIGlzbid0IGluIHRoZSBzdGF0aWMgYXJyYXkgImhlYWRlciIsIGFuZCB0aHVzCittZW1jbXAoIlN1YmplY3Q6ICIsIGhlYWRlcltpXSwgNykgd2lsbCBuZXZlciBtYXRjaC4KKworU2lnbmVkLW9mZi1ieTogTHVrYXMgU2FuZHN0csO2bSA8bHVrYXNzQGV0ZWsuY2hhbG1lcnMuc2U+CitTaWduZWQtb2ZmLWJ5OiBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CistLS0KKyBidWlsdGluLW1haWxpbmZvLmMgfCAgICAyICstCisgMSBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9idWlsdGluLW1haWxpbmZvLmMgYi9idWlsdGluLW1haWxpbmZvLmMKK2luZGV4IDk2MmFhMzQuLjJkMTUyMGYgMTAwNjQ0CistLS0gYS9idWlsdGluLW1haWxpbmZvLmMKKysrKyBiL2J1aWx0aW4tbWFpbGluZm8uYworQEAgLTMzNCw3ICszMzQsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2hlYWRlcihjaGFyICpsaW5lLCB1bnNpZ25lZCBsaW5lc2l6ZSwgY2hhciAqKmhkcl9kYXRhLCBpbnQgb3ZlcgorIAkJcmV0dXJuIDE7CisgCWlmICghbWVtY21wKCJbUEFUQ0hdIiwgbGluZSwgNykgJiYgaXNzcGFjZShsaW5lWzddKSkgeworIAkJZm9yIChpID0gMDsgaGVhZGVyW2ldOyBpKyspIHsKKy0JCQlpZiAoIW1lbWNtcCgiU3ViamVjdDogIiwgaGVhZGVyW2ldLCA5KSkgeworKwkJCWlmICghbWVtY21wKCJTdWJqZWN0IiwgaGVhZGVyW2ldLCA3KSkgeworIAkJCQlpZiAoISBoYW5kbGVfaGVhZGVyKGxpbmUsIGhkcl9kYXRhW2ldLCAwKSkgeworIAkJCQkJcmV0dXJuIDE7CisgCQkJCX0KKy0tIAorMS41LjYuMi40NTUuZzFlZmIyCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvaW5mbzAwMTAgYi90L3Q1MTAwL2luZm8wMDEwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3OTEyNDEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL2luZm8wMDEwCkBAIC0wLDAgKzEsNSBAQAorQXV0aG9yOiBMdWthcyBTYW5kc3Ryw7ZtCitFbWFpbDogbHVrYXNzQGV0ZWsuY2hhbG1lcnMuc2UKK1N1YmplY3Q6IGdpdC1tYWlsaW5mbzogRml4IGdldHRpbmcgdGhlIHN1YmplY3QgZnJvbSB0aGUgYm9keQorRGF0ZTogVGh1LCAxMCBKdWwgMjAwOCAyMzo0MTozMyArMDIwMAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL21zZzAwMTAgYi90L3Q1MTAwL21zZzAwMTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk2YzIzMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvbXNnMDAxMApAQCAtMCwwICsxLDUgQEAKKyJTdWJqZWN0OiAiIGlzbid0IGluIHRoZSBzdGF0aWMgYXJyYXkgImhlYWRlciIsIGFuZCB0aHVzCittZW1jbXAoIlN1YmplY3Q6ICIsIGhlYWRlcltpXSwgNykgd2lsbCBuZXZlciBtYXRjaC4KKworU2lnbmVkLW9mZi1ieTogTHVrYXMgU2FuZHN0csO2bSA8bHVrYXNzQGV0ZWsuY2hhbG1lcnMuc2U+CitTaWduZWQtb2ZmLWJ5OiBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CmRpZmYgLS1naXQgYS90L3Q1MTAwL251bC1iNjQuZXhwZWN0IGIvdC90NTEwMC9udWwtYjY0LmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2Q2ODBmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9udWwtYjY0LmV4cGVjdApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90L3Q1MTAwL251bC1iNjQuaW4gYi90L3Q1MTAwL251bC1iNjQuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY1NDBkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvbnVsLWI2NC5pbgpAQCAtMCwwICsxLDM3IEBACitGcm9tIDY2N2Q4OTQwZTcxOWNkZGVlMWNmZTIzN2NiYmUyMTVlMjAyNzBiMDkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CitEYXRlOiBTdW4sIDI1IE1heSAyMDA4IDAwOjM4OjE4IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHNlY29uZAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKK0xTMHRDaUJtYVd4bElId2dJRUpwYmlBeE16VTNJQzArSURFek5UY2dZbmwwWlhNS0lERWdabWxzWlhNZ1kyaGhibWRsWkN3ZworTUNCcGJuTmxjblJwYjI1ektDc3BMQ0F3SUdSbGJHVjBhVzl1Y3lndEtRb0taR2xtWmlBdExXZHBkQ0JoTDJacGJHVWdZaTltCithV3hsQ21sdVpHVjRJRGMzTXpZeFpEZ3VMamxsTURKaVpUWWdNVEF3TmpRMENpMHRMU0JoTDJacGJHVUtLeXNySUdJdlptbHMKK1pRcEFRQ0F0TVN3eE1pQXJNU3d4TWlCQVFBb2dURzl5WlcwZ2FYQnpkVzBnWkc5c2IzSWdjMmwwSUdGdFpYUXNJR052Ym5ObAorWTNSbGRIVmxjaUJoWkdsd2FYTmphVzVuSUdWc2FYUXVJRk4xYzNCbGJtUnBjM05sQ2lCemFYUWdZVzFsZENCMGRYSndhWE1nCitaV2RsZENCbGMzUWdZM1Z5YzNWeklHeGhiM0psWlhRdUlFRnNhWEYxWVcwZ2JXRjFjbWx6TGlCUWNtRmxjMlZ1ZEFvdGRtOXMKK2RYUndZWFF1SUZCeWIybHVJR2x1SUhCMWNuVnpMaUJPZFd4c1lTQjFjbTVoSUhOaGNHbGxiaXdnWkdGd2FXSjFjeUJ6YVhRZworWVcxbGRDd0tLM1p2YkhWMGNHRjBMaUJRY205cGJpQnBiaUJ3ZFhKMWN5NGdUblZzYkdFZ2RYSnVZU0J6WVhCcFpXNHNJR1JoCitjR2tBZFhNZ2MybDBJR0Z0WlhRc0NpQm9aVzVrY21WeWFYUWdibVZqTENCMFpXMXdkWE1nWlhVc0lHMXBMaUJWZENCd2IzSjAKK1lTd2diR1Z2SUdsa0lIUnBibU5wWkhWdWRDQjFiR3hoYldOdmNuQmxjaXdLTFhabGJHbDBJR1psYkdseklIUnlhWE4wYVhGMQorWlNCaGJuUmxMQ0JoZENCc2IySnZjblJwY3lCa2FXRnRJSEJsWkdVZ2RYUWdaSFZwTGlCUWNtOXBiaUJoWXdvcmRtVnNhWFFnCitabVZzYVhNZ2RISnBjM1JwY1hWbElHRnVkR1VzSUdGMElHeHZBRzl5ZEdseklHUnBZVzBnY0dWa1pTQjFkQ0JrZFdrdUlGQnkKK2IybHVJR0ZqQ2lCc1pXTjBkWE11SUVSdmJtVmpJR0YwSUcxaGMzTmhJR0ZqSUdsd2MzVnRJR2hsYm1SeVpYSnBkQ0J6YjJ4cworYVdOcGRIVmthVzR1SUU1aGJTQmthV04wZFcwS0lHNXBjMmtnYzJWa0lHMXBMaUJFZFdseklITmxaQ0JoYm5SbExpQlZkQ0IyCithWFJoWlNCbGMzUWdkWFFnWkhWcElIVnNkSEpwWTJsbGN5QmthV2R1YVhOemFXMHVDaUFLTFVsdUlIWmxiQ0J2WkdsdklHVm4KK1pYUWdibWx6YkNCamIyNTJZV3hzYVhNZ2RtOXNkWFJ3WVhRdUlFMXZjbUpwSUhacGRHRmxJRzVwWW1ndUlFNTFiR3hoYlFvcgorU1c0Z2RtVnNJRzlrYVc4Z1pXZGxkQ0J1YVhOc0lHTnZiblpoYkd4cGN5QjJiMngxZEhCaGRDNGdUVzl5QUdrZ2RtbDBZV1VnCitibWtBYUM0Z1RuVnNiR0Z0Q2lCaFkyTjFiWE5oYml3Z1pHOXNiM0lnY1hWcGN5QmhiR2x4ZFdGdElITmpaV3hsY21semNYVmwKK0xDQmxiR2wwSUdWdWFXMGdZMjl1WkdsdFpXNTBkVzBLSUcxaGRYSnBjeXdnYm05dUlIUnlhWE4wYVhGMVpTQnRZWFZ5YVhNZworZEhWeWNHbHpJR1YwSUcxaGRYSnBjeTRnVlhRZ2JtOXVJRzVwYzJ3dUlFNWhiU0JrYVdGdENpQnRhU3dnYzJWdGNHVnlJSEJ2CitjM1ZsY21Vc0lHVnNaV2xtWlc1a0lIVjBMQ0JoZFdOMGIzSWdkbVZzTENCbGNtRjBMaUJUWldRZ2NHOXpkV1Z5WlFwQVFDQXQKK01UWXNOeUFyTVRZc055QkFRQ0J6WldRZ1pYTjBMaUJGZEdsaGJTQmthV0Z0SUdabGJHbHpMQ0JtWlhKdFpXNTBkVzBnWldkbAorZEN3Z1lXUnBjR2x6WTJsdVp5QmhkQ3dnY0c5emRXVnlaU0JwYml3S0lHUjFhUzRnUlhScFlXMGdiSFZqZEhWekxnb2dDaUJPCitkV3hzWVNCcFpDQmhkV2QxWlM0Z1RtRnRJR2xoWTNWc2FYTWdZV05qZFcxellXNGdibWx6YVM0Z1UzVnpjR1Z1WkdsemMyVWcKK2NHOTBaVzUwYVM0Z1RuVnVZd290ZG1GeWFYVnpJR0YxWjNWbElHNWxZeUJ2Y21OcExpQlZkQ0JqYjI1a2FXMWxiblIxYlNCaworYjJ4dmNpQnpZV2RwZEhScGN5QnVhV0pvTGlCVGRYTndaVzVrYVhOelpRb3JkbUZ5YVhWeklHRjFaM1ZsSUc1bFl5QnZjbU5wCitMaUJWZENCamIyNWthVzFsYm5SMWJTQmtiMnh2Y2lCellXZHBkSFJwY3lCdWFRQm9MaUJUZFhOd1pXNWthWE56WlFvZ2RHVnQKK2NHOXlJR3hsWTNSMWN5QnpaV1FnYldGbmJtRXVJRk4xYzNCbGJtUnBjM05sSUhCdmRHVnVkR2t1SUU1MWJHeGhiU0IwWlcxdworYjNJZ2FYQnpkVzB1SUZObFpBb2diVzlzWlhOMGFXVWdkR1ZzYkhWekxpQlFhR0Z6Wld4c2RYTWdiR2xuZFd4aExpQkpiaUIyCitaV2hwWTNWc1lTQjFiSFJ5YVdObGN3b2dibWx6YVM0Z1UzVnpjR1Z1WkdsemMyVWdabVZzYVhNZ1lYVm5kV1VzSUhCbGJHeGwKK2JuUmxjM0YxWlNCaGRDd2daR2xqZEhWdElIWnBkbVZ5Y21Fc0NpMHRJQW94TGpVdU5TNHhMalUwTUM1bk5UYzNPREFLQ2c9PQpkaWZmIC0tZ2l0IGEvdC90NTEwMC9udWwtcGxhaW4gYi90L3Q1MTAwL251bC1wbGFpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDQwNjkxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9udWwtcGxhaW4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC90NTEwMC9wYXRjaDAwMTAgYi90L3Q1MTAwL3BhdGNoMDAxMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDU1NDgxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9wYXRjaDAwMTAKQEAgLTAsMCArMSwyMCBAQAorLS0tCisgYnVpbHRpbi1tYWlsaW5mby5jIHwgICAgMiArLQorIDEgZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYnVpbHRpbi1tYWlsaW5mby5jIGIvYnVpbHRpbi1tYWlsaW5mby5jCitpbmRleCA5NjJhYTM0Li4yZDE1MjBmIDEwMDY0NAorLS0tIGEvYnVpbHRpbi1tYWlsaW5mby5jCisrKysgYi9idWlsdGluLW1haWxpbmZvLmMKK0BAIC0zMzQsNyArMzM0LDcgQEAgc3RhdGljIGludCBjaGVja19oZWFkZXIoY2hhciAqbGluZSwgdW5zaWduZWQgbGluZXNpemUsIGNoYXIgKipoZHJfZGF0YSwgaW50IG92ZXIKKyAJCXJldHVybiAxOworIAlpZiAoIW1lbWNtcCgiW1BBVENIXSIsIGxpbmUsIDcpICYmIGlzc3BhY2UobGluZVs3XSkpIHsKKyAJCWZvciAoaSA9IDA7IGhlYWRlcltpXTsgaSsrKSB7CistCQkJaWYgKCFtZW1jbXAoIlN1YmplY3Q6ICIsIGhlYWRlcltpXSwgOSkpIHsKKysJCQlpZiAoIW1lbWNtcCgiU3ViamVjdCIsIGhlYWRlcltpXSwgNykpIHsKKyAJCQkJaWYgKCEgaGFuZGxlX2hlYWRlcihsaW5lLCBoZHJfZGF0YVtpXSwgMCkpIHsKKyAJCQkJCXJldHVybiAxOworIAkJCQl9CistLSAKKzEuNS42LjIuNDU1LmcxZWZiMgorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3NhbXBsZS5tYm94IGIvdC90NTEwMC9zYW1wbGUubWJveAppbmRleCAwNDc2Yjk2Li5hYmE1N2Y5IDEwMDY0NAotLS0gYS90L3Q1MTAwL3NhbXBsZS5tYm94CisrKyBiL3QvdDUxMDAvc2FtcGxlLm1ib3gKQEAgLTQzMCwzICs0MzAsMzggQEAKID0yMAogPTIwCiAgMi4gV2hlbiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgJ0dJVF9FWFRFUk5BTF9ESUZGJyBpcyBzZXQsIHRoZQorRnJvbSBiOTcwNGE1MThlMjExNTg0MzNiYWEyY2MyZDU5MWZlYTY4Nzk2N2Y2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0x1a2FzPTIwU2FuZHN0cj1DMz1CNm0/PSA8bHVrYXNzQGV0ZWsuY2hhbG1lcnMuc2U+CitEYXRlOiBUaHUsIDEwIEp1bCAyMDA4IDIzOjQxOjMzICswMjAwCitTdWJqZWN0OiBSZTogZGlzY3Vzc2lvbiB0aGF0IGxlYWQgdG8gdGhpcyBwYXRjaAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitbUEFUQ0hdIGdpdC1tYWlsaW5mbzogRml4IGdldHRpbmcgdGhlIHN1YmplY3QgZnJvbSB0aGUgYm9keQorCisiU3ViamVjdDogIiBpc24ndCBpbiB0aGUgc3RhdGljIGFycmF5ICJoZWFkZXIiLCBhbmQgdGh1cworbWVtY21wKCJTdWJqZWN0OiAiLCBoZWFkZXJbaV0sIDcpIHdpbGwgbmV2ZXIgbWF0Y2guCisKK1NpZ25lZC1vZmYtYnk6IEx1a2FzIFNhbmRzdHLDtm0gPGx1a2Fzc0BldGVrLmNoYWxtZXJzLnNlPgorU2lnbmVkLW9mZi1ieTogSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgorLS0tCisgYnVpbHRpbi1tYWlsaW5mby5jIHwgICAgMiArLQorIDEgZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYnVpbHRpbi1tYWlsaW5mby5jIGIvYnVpbHRpbi1tYWlsaW5mby5jCitpbmRleCA5NjJhYTM0Li4yZDE1MjBmIDEwMDY0NAorLS0tIGEvYnVpbHRpbi1tYWlsaW5mby5jCisrKysgYi9idWlsdGluLW1haWxpbmZvLmMKK0BAIC0zMzQsNyArMzM0LDcgQEAgc3RhdGljIGludCBjaGVja19oZWFkZXIoY2hhciAqbGluZSwgdW5zaWduZWQgbGluZXNpemUsIGNoYXIgKipoZHJfZGF0YSwgaW50IG92ZXIKKyAJCXJldHVybiAxOworIAlpZiAoIW1lbWNtcCgiW1BBVENIXSIsIGxpbmUsIDcpICYmIGlzc3BhY2UobGluZVs3XSkpIHsKKyAJCWZvciAoaSA9IDA7IGhlYWRlcltpXTsgaSsrKSB7CistCQkJaWYgKCFtZW1jbXAoIlN1YmplY3Q6ICIsIGhlYWRlcltpXSwgOSkpIHsKKysJCQlpZiAoIW1lbWNtcCgiU3ViamVjdCIsIGhlYWRlcltpXSwgNykpIHsKKyAJCQkJaWYgKCEgaGFuZGxlX2hlYWRlcihsaW5lLCBoZHJfZGF0YVtpXSwgMCkpIHsKKyAJCQkJCXJldHVybiAxOworIAkJCQl9CistLSAKKzEuNS42LjIuNDU1LmcxZWZiMgorCmRpZmYgLS1naXQgYS90L3Q1MzAwLXBhY2stb2JqZWN0LnNoIGIvdC90NTMwMC1wYWNrLW9iamVjdC5zaAppbmRleCBjOTU1ZmU0Li45ODNhMzkzIDEwMDc1NQotLS0gYS90L3Q1MzAwLXBhY2stb2JqZWN0LnNoCisrKyBiL3QvdDUzMDAtcGFjay1vYmplY3Quc2gKQEAgLTI3NCw0ICsyNzQsOTkgQEAKICAgICAgcGFja25hbWVfND0kKGdpdCBwYWNrLW9iamVjdHMgdGVzdC00IDxvYmotbGlzdCkgJiYKICAgICAgdGVzdCAzID0gJChscyB0ZXN0LTQtKi5wYWNrIHwgd2MgLWwpJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bnBhY2tpbmcgd2l0aCAtLXN0cmljdCcgJworCisJZ2l0IGNvbmZpZyAtLXVuc2V0IHBhY2sucGFja3NpemVsaW1pdCAmJgorCWZvciBqIGluIGEgYiBjIGQgZSBmIGcKKwlkbworCQlmb3IgaSBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5CisJCWRvCisJCQlvPSQoZWNobyAkaiRpIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJCQllY2hvICIxMDA2NDQgJG8JMCAkaiRpIgorCQlkb25lCisJZG9uZSA+TElTVCAmJgorCXJtIC1mIC5naXQvaW5kZXggJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyA8TElTVCAmJgorCUxJU1Q9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJaGVhZCAtbiAxMCBMSVNUIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwlMST0kKGdpdCB3cml0ZS10cmVlKSAmJgorCXJtIC1mIC5naXQvaW5kZXggJiYKKwl0YWlsIC1uIDEwIExJU1QgfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCVNUPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJUEFDSzU9JCggZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAiJExJU1QiICIkTEkiICIkU1QiIHwgXAorCQlnaXQgcGFjay1vYmplY3RzIHRlc3QtNSApICYmCisJUEFDSzY9JCggKAorCQkJZWNobyAiJExJU1QiCisJCQllY2hvICIkTEkiCisJCQllY2hvICIkU1QiCisJCSApIHwgZ2l0IHBhY2stb2JqZWN0cyB0ZXN0LTYgKSAmJgorCXRlc3RfY3JlYXRlX3JlcG8gdGVzdC01ICYmCisJKAorCQljZCB0ZXN0LTUgJiYKKwkJZ2l0IHVucGFjay1vYmplY3RzIC0tc3RyaWN0IDwuLi90ZXN0LTUtJFBBQ0s1LnBhY2sgJiYKKwkJZ2l0IGxzLXRyZWUgLXIgJExJU1QgJiYKKwkJZ2l0IGxzLXRyZWUgLXIgJExJICYmCisJCWdpdCBscy10cmVlIC1yICRTVAorCSkgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHRlc3QtNiAmJgorCSgKKwkJIyB0cmVlLW9ubHkgaW50byBlbXB0eSByZXBvIC0tIG1hbnkgdW5yZWFjaGFibGVzCisJCWNkIHRlc3QtNiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgdW5wYWNrLW9iamVjdHMgLS1zdHJpY3QgPC4uL3Rlc3QtNi0kUEFDSzYucGFjaworCSkgJiYKKwkoCisJCSMgYWxyZWFkeSBwb3B1bGF0ZWQgLS0gbm8gdW5yZWFjaGFibGVzCisJCWNkIHRlc3QtNSAmJgorCQlnaXQgdW5wYWNrLW9iamVjdHMgLS1zdHJpY3QgPC4uL3Rlc3QtNi0kUEFDSzYucGFjaworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXgtcGFjayB3aXRoIC0tc3RyaWN0JyAnCisKKwlmb3IgaiBpbiBhIGIgYyBkIGUgZiBnCisJZG8KKwkJZm9yIGkgaW4gMCAxIDIgMyA0IDUgNiA3IDggOQorCQlkbworCQkJbz0kKGVjaG8gJGokaSB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCQkJZWNobyAiMTAwNjQ0ICRvCTAgJGokaSIKKwkJZG9uZQorCWRvbmUgPkxJU1QgJiYKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gPExJU1QgJiYKKwlMSVNUPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCWhlYWQgLW4gMTAgTElTVCB8IGdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvICYmCisJTEk9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJdGFpbCAtbiAxMCBMSVNUIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwlTVD0kKGdpdCB3cml0ZS10cmVlKSAmJgorCVBBQ0s1PSQoIGdpdCByZXYtbGlzdCAtLW9iamVjdHMgIiRMSVNUIiAiJExJIiAiJFNUIiB8IFwKKwkJZ2l0IHBhY2stb2JqZWN0cyB0ZXN0LTUgKSAmJgorCVBBQ0s2PSQoICgKKwkJCWVjaG8gIiRMSVNUIgorCQkJZWNobyAiJExJIgorCQkJZWNobyAiJFNUIgorCQkgKSB8IGdpdCBwYWNrLW9iamVjdHMgdGVzdC02ICkgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHRlc3QtNyAmJgorCSgKKwkJY2QgdGVzdC03ICYmCisJCWdpdCBpbmRleC1wYWNrIC0tc3RyaWN0IC0tc3RkaW4gPC4uL3Rlc3QtNS0kUEFDSzUucGFjayAmJgorCQlnaXQgbHMtdHJlZSAtciAkTElTVCAmJgorCQlnaXQgbHMtdHJlZSAtciAkTEkgJiYKKwkJZ2l0IGxzLXRyZWUgLXIgJFNUCisJKSAmJgorCXRlc3RfY3JlYXRlX3JlcG8gdGVzdC04ICYmCisJKAorCQkjIHRyZWUtb25seSBpbnRvIGVtcHR5IHJlcG8gLS0gbWFueSB1bnJlYWNoYWJsZXMKKwkJY2QgdGVzdC04ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBpbmRleC1wYWNrIC0tc3RyaWN0IC0tc3RkaW4gPC4uL3Rlc3QtNi0kUEFDSzYucGFjaworCSkgJiYKKwkoCisJCSMgYWxyZWFkeSBwb3B1bGF0ZWQgLS0gbm8gdW5yZWFjaGFibGVzCisJCWNkIHRlc3QtNyAmJgorCQlnaXQgaW5kZXgtcGFjayAtLXN0cmljdCAtLXN0ZGluIDwuLi90ZXN0LTYtJFBBQ0s2LnBhY2sKKwkpCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTMwMi1wYWNrLWluZGV4LnNoIGIvdC90NTMwMi1wYWNrLWluZGV4LnNoCmluZGV4IGI4OGI1YmIuLjA5ZmQ5MTcgMTAwNzU1Ci0tLSBhL3QvdDUzMDItcGFjay1pbmRleC5zaAorKysgYi90L3Q1MzAyLXBhY2staW5kZXguc2gKQEAgLTY1LDcgKzY1LDcgQEAKIAogaGF2ZV82NGJpdHM9CiBpZiBtc2c9JChnaXQgdmVyaWZ5LXBhY2sgLXYgInRlc3QtMy0ke3BhY2szfS5wYWNrIiAyPiYxKSB8fAotCSEgZWNobyAiJG1zZyIgfCBncmVwICJwYWNrIHRvbyBsYXJnZSAuKiBvZmZfdCIKKwkhIChlY2hvICIkbXNnIiB8IGdyZXAgInBhY2sgdG9vIGxhcmdlIC4qIG9mZl90IikKIHRoZW4KIAloYXZlXzY0Yml0cz10CiBlbHNlCmRpZmYgLS1naXQgYS90L3Q1MzAzLWhhc2gtb2JqZWN0LnNoIGIvdC90NTMwMy1oYXNoLW9iamVjdC5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNTQzYzA3OC4uMDAwMDAwMAotLS0gYS90L3Q1MzAzLWhhc2gtb2JqZWN0LnNoCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotIyEvYmluL3NoCi0KLXRlc3RfZGVzY3JpcHRpb249Z2l0LWhhc2gtb2JqZWN0Ci0KLS4gLi90ZXN0LWxpYi5zaAotCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKLSAgICAnZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4gc2F2ZXMgdGhlIG9iamVjdCcgXAotICAgICdvYm5hbWU9JChlY2hvIGZvbyB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgotICAgIG9icGF0aD0kKGVjaG8gJG9ibmFtZSB8IHNlZCAtZSAicy9cKC4uXCkvXDFcLy8iKSAmJgotICAgIHRlc3QgLXIgLmdpdC9vYmplY3RzLyIkb2JwYXRoIiAmJgotICAgIHJtIC1mIC5naXQvb2JqZWN0cy8iJG9icGF0aCInCi0gICAgCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKLSAgICAnZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gLXcgc2F2ZXMgdGhlIG9iamVjdCcgXAotICAgICdvYm5hbWU9JChlY2hvIGZvbyB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIC13KSAmJgotICAgIG9icGF0aD0kKGVjaG8gJG9ibmFtZSB8IHNlZCAtZSAicy9cKC4uXCkvXDFcLy8iKSAmJgotICAgIHRlc3QgLXIgLmdpdC9vYmplY3RzLyIkb2JwYXRoIiAmJgotICAgIHJtIC1mIC5naXQvb2JqZWN0cy8iJG9icGF0aCInICAgIAotCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKLSAgICAnZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gZmlsZTEgPGZpbGUwIGZpcnN0IG9wZXJhdGVzIG9uIGZpbGUwLCB0aGVuIGZpbGUxJyBcCi0gICAgJ2VjaG8gZm9vID4gZmlsZTEgJiYKLSAgICBvYm5hbWUwPSQoZWNobyBiYXIgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbikgJiYKLSAgICBvYm5hbWUxPSQoZ2l0IGhhc2gtb2JqZWN0IGZpbGUxKSAmJgotICAgIG9ibmFtZTBuZXc9JChlY2hvIGJhciB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIGZpbGUxIHwgc2VkIC1uIC1lIDFwKSAmJgotICAgIG9ibmFtZTFuZXc9JChlY2hvIGJhciB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIGZpbGUxIHwgc2VkIC1uIC1lIDJwKSAmJgotICAgIHRlc3QgIiRvYm5hbWUwIiA9ICIkb2JuYW1lMG5ldyIgJiYKLSAgICB0ZXN0ICIkb2JuYW1lMSIgPSAiJG9ibmFtZTFuZXciJwotCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFwKLSAgICAnZ2l0IGhhc2gtb2JqZWN0IHJlZnVzZXMgbXVsdGlwbGUgLS1zdGRpbiBhcmd1bWVudHMnIFwKLSAgICAnISBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbiAtLXN0ZGluIDwgZmlsZTEnCi0KLXRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTMwNC1wcnVuZS5zaCBiL3QvdDUzMDQtcHJ1bmUuc2gKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA5ZmQ5ZDA3Li43NzFjMGEwCi0tLSBhL3QvdDUzMDQtcHJ1bmUuc2gKKysrIGIvdC90NTMwNC1wcnVuZS5zaApAQCAtMjEsNyArMjEsNyBAQAogCW9yaWdfcGFjaz0kKGVjaG8gLmdpdC9vYmplY3RzL3BhY2svKi5wYWNrKSAmJgogCTogPiAuZ2l0L29iamVjdHMvdG1wXzEucGFjayAmJgogCTogPiAuZ2l0L29iamVjdHMvdG1wXzIucGFjayAmJgotCXRlc3QtY2htdGltZSAtODY1MDEgLmdpdC9vYmplY3RzL3RtcF8xLnBhY2sgJiYKKwl0ZXN0LWNobXRpbWUgPS04NjUwMSAuZ2l0L29iamVjdHMvdG1wXzEucGFjayAmJgogCWdpdCBwcnVuZSAtLWV4cGlyZSAxLmRheSAmJgogCXRlc3QgLWYgJG9yaWdfcGFjayAmJgogCXRlc3QgLWYgLmdpdC9vYmplY3RzL3RtcF8yLnBhY2sgJiYKQEAgLTM5LDcgKzM5LDcgQEAKIAlnaXQgcHJ1bmUgLS1leHBpcmU9MS5ob3VyLmFnbyAmJgogCXRlc3QgJCgoMSArICRiZWZvcmUpKSA9ICQoZ2l0IGNvdW50LW9iamVjdHMgfCBzZWQgInMvIC4qLy8iKSAmJgogCXRlc3QgLWYgJEJMT0JfRklMRSAmJgotCXRlc3QtY2htdGltZSAtODY1MDAgJEJMT0JfRklMRSAmJgorCXRlc3QtY2htdGltZSA9LTg2NTAwICRCTE9CX0ZJTEUgJiYKIAlnaXQgcHJ1bmUgLS1leHBpcmUgMS5kYXkgJiYKIAl0ZXN0ICRiZWZvcmUgPSAkKGdpdCBjb3VudC1vYmplY3RzIHwgc2VkICJzLyAuKi8vIikgJiYKIAkhIHRlc3QgLWYgJEJMT0JfRklMRQpAQCAtNTMsMTEgKzUzLDExIEBACiAJQkxPQl9GSUxFPS5naXQvb2JqZWN0cy8kKGVjaG8gJEJMT0IgfCBzZWQgInMvXi4uLyZcLy8iKSAmJgogCXRlc3QgJCgoMSArICRiZWZvcmUpKSA9ICQoZ2l0IGNvdW50LW9iamVjdHMgfCBzZWQgInMvIC4qLy8iKSAmJgogCXRlc3QgLWYgJEJMT0JfRklMRSAmJgotCXRlc3QtY2htdGltZSAtJCgoODY0MDAqMTQtMzApKSAkQkxPQl9GSUxFICYmCisJdGVzdC1jaG10aW1lID0tJCgoODY0MDAqMTQtMzApKSAkQkxPQl9GSUxFICYmCiAJZ2l0IGdjICYmCiAJdGVzdCAkKCgxICsgJGJlZm9yZSkpID0gJChnaXQgY291bnQtb2JqZWN0cyB8IHNlZCAicy8gLiovLyIpICYmCiAJdGVzdCAtZiAkQkxPQl9GSUxFICYmCi0JdGVzdC1jaG10aW1lIC0kKCg4NjQwMCoxNCsxKSkgJEJMT0JfRklMRSAmJgorCXRlc3QtY2htdGltZSA9LSQoKDg2NDAwKjE0KzEpKSAkQkxPQl9GSUxFICYmCiAJZ2l0IGdjICYmCiAJdGVzdCAkYmVmb3JlID0gJChnaXQgY291bnQtb2JqZWN0cyB8IHNlZCAicy8gLiovLyIpICYmCiAJISB0ZXN0IC1mICRCTE9CX0ZJTEUKZGlmZiAtLWdpdCBhL3QvdDUzMDUtaW5jbHVkZS10YWcuc2ggYi90L3Q1MzA1LWluY2x1ZGUtdGFnLnNoCmluZGV4IDBkYjI3NTQuLmZiNDcxYTAgMTAwNzU1Ci0tLSBhL3QvdDUzMDUtaW5jbHVkZS10YWcuc2gKKysrIGIvdC90NTMwNS1pbmNsdWRlLXRhZy5zaApAQCAtNTAsNyArNTAsNyBAQAogCQl0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgLWUgJHRhZyAmJgogCQlnaXQgcmV2LWxpc3QgLS1vYmplY3RzICRjb21taXQKIAkpID5saXN0LmFjdHVhbCAmJgotCWdpdCBkaWZmIGxpc3QuZXhwZWN0IGxpc3QuYWN0dWFsCisJdGVzdF9jbXAgbGlzdC5leHBlY3QgbGlzdC5hY3R1YWwKICcKIAogcm0gLXJmIGNsb25lLmdpdApAQCAtNzgsNyArNzgsNyBAQAogCQlleHBvcnQgR0lUX0RJUiAmJgogCQlnaXQgcmV2LWxpc3QgLS1vYmplY3RzICR0YWcKIAkpID5saXN0LmFjdHVhbCAmJgotCWdpdCBkaWZmIGxpc3QuZXhwZWN0IGxpc3QuYWN0dWFsCisJdGVzdF9jbXAgbGlzdC5leHBlY3QgbGlzdC5hY3R1YWwKICcKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NDAwLXNlbmQtcGFjay5zaCBiL3QvdDU0MDAtc2VuZC1wYWNrLnNoCmluZGV4IDJiNmI2ZTMuLjY4YzJhZTYgMTAwNzU1Ci0tLSBhL3QvdDU0MDAtc2VuZC1wYWNrLnNoCisrKyBiL3QvdDU0MDAtc2VuZC1wYWNrLnNoCkBAIC0xMTAsNyArMTEwLDcgQEAKIAljZCAuLiAmJgogCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvbWFzdGVyIG1hc3Rlcl4gfHwgcmV0dXJuIDEKIAlnaXQtc2VuZC1wYWNrIC0tZm9yY2UgLi92aWN0aW0vLmdpdC8gbWFzdGVyICYmIHJldHVybiAxCi0JISBnaXQgZGlmZiAuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyIHZpY3RpbS8uZ2l0L3JlZnMvaGVhZHMvbWFzdGVyCisJISB0ZXN0X2NtcCAuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyIHZpY3RpbS8uZ2l0L3JlZnMvaGVhZHMvbWFzdGVyCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXApkaWZmIC0tZ2l0IGEvdC90NTQwMS11cGRhdGUtaG9va3Muc2ggYi90L3Q1NDAxLXVwZGF0ZS1ob29rcy5zaAppbmRleCA5YTEyMDI0Li4yZmZmMzAwIDEwMDc1NQotLS0gYS90L3Q1NDAxLXVwZGF0ZS1ob29rcy5zaAorKysgYi90L3Q1NDAxLXVwZGF0ZS1ob29rcy5zaApAQCAtODMsMjMgKzgzLDIzIEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmUtcmVjZWl2ZSBob29rIGlucHV0JyAnCiAJKGVjaG8gJGNvbW1pdDAgJGNvbW1pdDEgcmVmcy9oZWFkcy9tYXN0ZXI7CiAJIGVjaG8gJGNvbW1pdDEgJGNvbW1pdDAgcmVmcy9oZWFkcy90b2ZhaWwKLQkpIHwgZ2l0IGRpZmYgLSB2aWN0aW0vLmdpdC9wcmUtcmVjZWl2ZS5zdGRpbgorCSkgfCB0ZXN0X2NtcCAtIHZpY3RpbS8uZ2l0L3ByZS1yZWNlaXZlLnN0ZGluCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBob29rIGFyZ3VtZW50cycgJwogCShlY2hvIHJlZnMvaGVhZHMvbWFzdGVyICRjb21taXQwICRjb21taXQxOwogCSBlY2hvIHJlZnMvaGVhZHMvdG9mYWlsICRjb21taXQxICRjb21taXQwCi0JKSB8IGdpdCBkaWZmIC0gdmljdGltLy5naXQvdXBkYXRlLmFyZ3MKKwkpIHwgdGVzdF9jbXAgLSB2aWN0aW0vLmdpdC91cGRhdGUuYXJncwogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwb3N0LXJlY2VpdmUgaG9vayBpbnB1dCcgJwogCWVjaG8gJGNvbW1pdDAgJGNvbW1pdDEgcmVmcy9oZWFkcy9tYXN0ZXIgfAotCWdpdCBkaWZmIC0gdmljdGltLy5naXQvcG9zdC1yZWNlaXZlLnN0ZGluCisJdGVzdF9jbXAgLSB2aWN0aW0vLmdpdC9wb3N0LXJlY2VpdmUuc3RkaW4KICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncG9zdC11cGRhdGUgaG9vayBhcmd1bWVudHMnICcKIAllY2hvIHJlZnMvaGVhZHMvbWFzdGVyIHwKLQlnaXQgZGlmZiAtIHZpY3RpbS8uZ2l0L3Bvc3QtdXBkYXRlLmFyZ3MKKwl0ZXN0X2NtcCAtIHZpY3RpbS8uZ2l0L3Bvc3QtdXBkYXRlLmFyZ3MKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxsIGhvb2sgc3RkaW4gaXMgL2Rldi9udWxsJyAnCkBAIC0xMzAsNyArMTMwLDcgQEAKIEVPRgogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2VuZC1wYWNrIHN0ZGVyciBjb250YWlucyBob29rIG1lc3NhZ2VzJyAnCiAJZ3JlcCBeU1REIHNlbmQuZXJyID5hY3R1YWwgJiYKLQlnaXQgZGlmZiAtIGFjdHVhbCA8ZXhwZWN0CisJdGVzdF9jbXAgLSBhY3R1YWwgPGV4cGVjdAogJwogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU0MDQtdHJhY2tpbmctYnJhbmNoZXMuc2ggYi90L3Q1NDA0LXRyYWNraW5nLWJyYW5jaGVzLnNoCmluZGV4IDE0OTNhOTIuLjY0ZmUyNjEgMTAwNzU1Ci0tLSBhL3QvdDU0MDQtdHJhY2tpbmctYnJhbmNoZXMuc2gKKysrIGIvdC90NTQwNC10cmFja2luZy1icmFuY2hlcy5zaApAQCAtMTAsNiArMTAsNyBAQAogCWdpdCBjb21taXQgLW0gMSAmJgogCWdpdCBicmFuY2ggYjEgJiYKIAlnaXQgYnJhbmNoIGIyICYmCisJZ2l0IGJyYW5jaCBiMyAmJgogCWdpdCBjbG9uZSAuIGFhICYmCiAJZ2l0IGNoZWNrb3V0IGIxICYmCiAJZWNobyBiMSA+PmZpbGUgJiYKQEAgLTUwLDQgKzUxLDEwIEBACiAJdGVzdCAiJChnaXQgcmV2LXBhcnNlIG9yaWdpbi9iMSkiID0gIm9yaWdpbi9iMSIKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxyZWFkeSBkZWxldGVkIHRyYWNraW5nIGJyYW5jaGVzIGlnbm9yZWQnICcKKwlnaXQgYnJhbmNoIC1kIC1yIG9yaWdpbi9iMyAmJgorCWdpdCBwdXNoIG9yaWdpbiA6YjMgPm91dHB1dCAyPiYxICYmCisJISBncmVwIGVycm9yIG91dHB1dAorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MDAtZmV0Y2gtcGFjay5zaCBiL3QvdDU1MDAtZmV0Y2gtcGFjay5zaAppbmRleCA3ODhiNGE1Li4xNDBlODc0IDEwMDc1NQotLS0gYS90L3Q1NTAwLWZldGNoLXBhY2suc2gKKysrIGIvdC90NTUwMC1mZXRjaC1wYWNrLnNoCkBAIC0zMSw3ICszMSw3IEBACiAJc2VjPSQoKCRzZWMrMSkpCiAJY29tbWl0PSQoZWNobyAiJHRleHQiIHwgR0lUX0FVVEhPUl9EQVRFPSRzZWMgXAogCQlnaXQgY29tbWl0LXRyZWUgJHRyZWUgJHBhcmVudHMgMj4+bG9nMi50eHQpCi0JZXhwb3J0ICRuYW1lPSRjb21taXQKKwlldmFsICIkbmFtZT0kY29tbWl0OyBleHBvcnQgJG5hbWUiCiAJZWNobyAkY29tbWl0ID4gLmdpdC9yZWZzL2hlYWRzLyRicmFuY2gKIAlldmFsICR7YnJhbmNofVRJUD0kY29tbWl0CiB9CkBAIC0xMjksNyArMTI5LDcgQEAKIAogcHVsbF90b19jbGllbnQgM3JkICJBIiAkKCgxKjMpKSAjIG9sZCBmYWlscwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICJjbG9uZSBzaGFsbG93IiAiZ2l0LWNsb25lIC0tZGVwdGggMiBmaWxlOi8vYHB3ZGAvLiBzaGFsbG93IgordGVzdF9leHBlY3Rfc3VjY2VzcyAiY2xvbmUgc2hhbGxvdyIgJ2dpdC1jbG9uZSAtLWRlcHRoIDIgImZpbGU6Ly8kKHB3ZCkvLiIgc2hhbGxvdycKIAogKGNkIHNoYWxsb3c7IGdpdCBjb3VudC1vYmplY3RzIC12KSA+IGNvdW50LnNoYWxsb3cKIApkaWZmIC0tZ2l0IGEvdC90NTUwMy10YWdmb2xsb3cuc2ggYi90L3Q1NTAzLXRhZ2ZvbGxvdy5zaAppbmRleCA4NmU1YjliLi40MDc0ZTIzIDEwMDc1NQotLS0gYS90L3Q1NTAzLXRhZ2ZvbGxvdy5zaAorKysgYi90L3Q1NTAzLXRhZ2ZvbGxvdy5zaApAQCAtNTAsNyArNTAsNyBAQAogCSkgJiYKIAl0ZXN0IC1zICRVICYmCiAJY3V0IC1kIiAiIC1mMSwyICRVID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICJjcmVhdGUgdGFnIFQgb24gQSwgY3JlYXRlIEMgb24gYnJhbmNoIGNhdCIgJwpAQCAtODIsNyArODIsNyBAQAogCSkgJiYKIAl0ZXN0IC1zICRVICYmCiAJY3V0IC1kIiAiIC1mMSwyICRVID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICJjcmVhdGUgY29tbWl0cyBPLCBCLCB0YWcgUyBvbiBCIiAnCkBAIC0xMTgsNyArMTE4LDcgQEAKIAkpICYmCiAJdGVzdCAtcyAkVSAmJgogCWN1dCAtZCIgIiAtZjEsMiAkVSA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogY2F0IC0gPDxFT0YgPmV4cGVjdApAQCAtMTQ0LDcgKzE0NCw3IEBACiAJKSAmJgogCXRlc3QgLXMgJFUgJiYKIAljdXQgLWQiICIgLWYxLDIgJFUgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUwNS1yZW1vdGUuc2ggYi90L3Q1NTA1LXJlbW90ZS5zaAppbmRleCA0OGZmMmQ0Li4xZTE5MmEyIDEwMDc1NQotLS0gYS90L3Q1NTA1LXJlbW90ZS5zaAorKysgYi90L3Q1NTA1LXJlbW90ZS5zaApAQCAtMTM1LDcgKzEzNSwyNiBAQAogCSBnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS5vcmlnaW4ucHVzaCBcCiAJCStyZWZzL3RhZ3MvbGFzdGJhY2t1cCAmJgogCSBnaXQgcmVtb3RlIHNob3cgb3JpZ2luID4gb3V0cHV0ICYmCi0JIGdpdCBkaWZmIGV4cGVjdCBvdXRwdXQpCisJIHRlc3RfY21wIGV4cGVjdCBvdXRwdXQpCisnCisKK2NhdCA+IHRlc3QvZXhwZWN0IDw8IEVPRgorKiByZW1vdGUgb3JpZ2luCisgIFVSTDogJChwd2QpL29uZS8uZ2l0CisgIFJlbW90ZSBicmFuY2ggbWVyZ2VkIHdpdGggJ2dpdCBwdWxsJyB3aGlsZSBvbiBicmFuY2ggbWFzdGVyCisgICAgbWFzdGVyCisgIFRyYWNrZWQgcmVtb3RlIGJyYW5jaGVzCisgICAgbWFzdGVyIHNpZGUKKyAgTG9jYWwgYnJhbmNoZXMgcHVzaGVkIHdpdGggJ2dpdCBwdXNoJworICAgIG1hc3Rlcjp1cHN0cmVhbSArcmVmcy90YWdzL2xhc3RiYWNrdXAKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93IC1uJyAnCisJKG12IG9uZSBvbmUudW5yZWFjaGFibGUgJiYKKwkgY2QgdGVzdCAmJgorCSBnaXQgcmVtb3RlIHNob3cgLW4gb3JpZ2luID4gb3V0cHV0ICYmCisJIG12IC4uL29uZS51bnJlYWNoYWJsZSAuLi9vbmUgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IG91dHB1dCkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmUnICcKQEAgLTE0OCw2ICsxNjcsMjQgQEAKIAkgISBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9vcmlnaW4vc2lkZSkKICcKIAorY2F0ID4gdGVzdC9leHBlY3QgPDwgRU9GCitQcnVuaW5nIG9yaWdpbgorVVJMOiAkKHB3ZCkvb25lLy5naXQKKyAqIFt3b3VsZCBwcnVuZV0gb3JpZ2luL3NpZGUyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmUgLS1kcnktcnVuJyAnCisJKGNkIG9uZSAmJgorCSBnaXQgYnJhbmNoIC1tIHNpZGUyIHNpZGUpICYmCisJKGNkIHRlc3QgJiYKKwkgZ2l0IHJlbW90ZSBwcnVuZSAtLWRyeS1ydW4gb3JpZ2luID4gb3V0cHV0ICYmCisJIGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi9zaWRlMiAmJgorCSAhIGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi9zaWRlICYmCisJKGNkIC4uL29uZSAmJgorCSBnaXQgYnJhbmNoIC1tIHNpZGUgc2lkZTIpICYmCisJIHRlc3RfY21wIGV4cGVjdCBvdXRwdXQpCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCAtLW1pcnJvciAmJiBwcnVuZScgJwogCShta2RpciBtaXJyb3IgJiYKIAkgY2QgbWlycm9yICYmCkBAIC0xNjQsNiArMjAxLDI0IEBACiAJIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9zaWRlKQogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgYWx0ICYmIHBydW5lJyAnCisJKG1rZGlyIGFsdHRzdCAmJgorCSBjZCBhbHR0c3QgJiYKKwkgZ2l0IGluaXQgJiYKKwkgZ2l0IHJlbW90ZSBhZGQgLWYgb3JpZ2luIC4uL29uZSAmJgorCSBnaXQgY29uZmlnIHJlbW90ZS5hbHQudXJsIC4uL29uZSAmJgorCSBnaXQgY29uZmlnIHJlbW90ZS5hbHQuZmV0Y2ggIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIikgJiYKKwkoY2Qgb25lICYmCisJIGdpdCBicmFuY2ggLW0gc2lkZSBzaWRlMikgJiYKKwkoY2QgYWx0dHN0ICYmCisJIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9zaWRlICYmCisJICEgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL3NpZGUyICYmCisJIGdpdCBmZXRjaCBhbHQgJiYKKwkgZ2l0IHJlbW90ZSBwcnVuZSBhbHQgJiYKKwkgISBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vc2lkZSAmJgorCSBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vc2lkZTIpCisnCisKIGNhdCA+IG9uZS9leHBlY3QgPDwgRU9GCiAgIGFwaXMvbWFzdGVyCiAgIGFwaXMvc2lkZQpAQCAtMTc5LDcgKzIzNCw3IEBACiAJIGdpdCByZW1vdGUgYWRkIGFwaXMgLi4vbWlycm9yICYmCiAJIGdpdCByZW1vdGUgdXBkYXRlICYmCiAJIGdpdCBicmFuY2ggLXIgPiBvdXRwdXQgJiYKLQkgZ2l0IGRpZmYgZXhwZWN0IG91dHB1dCkKKwkgdGVzdF9jbXAgZXhwZWN0IG91dHB1dCkKIAogJwogCkBAIC0yMDYsNyArMjYxLDcgQEAKIAkgZ2l0IGNvbmZpZyByZW1vdGVzLnRpdGFudXMgbWFuZHVjYSAmJgogCSBnaXQgcmVtb3RlIHVwZGF0ZSBwaG9iYWV0aWN1cyB0aXRhbnVzICYmCiAJIGdpdCBicmFuY2ggLXIgPiBvdXRwdXQgJiYKLQkgZ2l0IGRpZmYgZXhwZWN0IG91dHB1dCkKKwkgdGVzdF9jbXAgZXhwZWN0IG91dHB1dCkKIAogJwogCkBAIC0yMjksNyArMjg0LDcgQEAKIAkgZ2l0IGNvbmZpZyByZW1vdGUuZHJvc29waGlsYS5za2lwRGVmYXVsdFVwZGF0ZSB0cnVlICYmCiAJIGdpdCByZW1vdGUgdXBkYXRlIGRlZmF1bHQgJiYKIAkgZ2l0IGJyYW5jaCAtciA+IG91dHB1dCAmJgotCSBnaXQgZGlmZiBleHBlY3Qgb3V0cHV0KQorCSB0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0KQogCiAnCiAKQEAgLTI0OSw3ICszMDQsNyBAQAogCSBnaXQgY29uZmlnIHJlbW90ZXMuZGVmYXVsdCAiJChwcmludGYgIlx0IGRyb3NvcGhpbGEgIFxuIikiICYmCiAJIGdpdCByZW1vdGUgdXBkYXRlIGRlZmF1bHQgJiYKIAkgZ2l0IGJyYW5jaCAtciA+IG91dHB1dCAmJgotCSBnaXQgZGlmZiBleHBlY3Qgb3V0cHV0KQorCSB0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0KQogCiAnCiAKZGlmZiAtLWdpdCBhL3QvdDU1MTAtZmV0Y2guc2ggYi90L3Q1NTEwLWZldGNoLnNoCmluZGV4IDY5NDY1NTcuLmRmNzc1MGYgMTAwNzU1Ci0tLSBhL3QvdDU1MTAtZmV0Y2guc2gKKysrIGIvdC90NTUxMC1mZXRjaC5zaApAQCAtMzcsNyArMzcsOCBAQAogCQllY2hvICJQdWxsOiByZWZzL2hlYWRzL29uZTpyZWZzL2hlYWRzL29uZSIKIAl9ID4uZ2l0L3JlbW90ZXMvdHdvICYmCiAJY2QgLi4gJiYKLQlnaXQgY2xvbmUgLiBidW5kbGUKKwlnaXQgY2xvbmUgLiBidW5kbGUgJiYKKwlnaXQgY2xvbmUgLiBzZXZlbgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICJmZXRjaCB0ZXN0IiAnCkBAIC0yOTUsNCArMjk2LDExIEBACiAJKQogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoaW5nIG5vbmV4aXN0ZW50IGJyYW5jaCBieSBtaXN0YWtlIHNob3VsZCBub3Qgc2VndicgJworCisJY2QgIiREIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIHNldmVuIG5vOm5vCisKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTExLXJlZnNwZWMuc2ggYi90L3Q1NTExLXJlZnNwZWMuc2gKaW5kZXggNjcwYThmMS4uMjJiYTM4MCAxMDA3NTUKLS0tIGEvdC90NTUxMS1yZWZzcGVjLnNoCisrKyBiL3QvdDU1MTEtcmVmc3BlYy5zaApAQCAtMjMsMTAgKzIzLDEzIEBACiB9CiAKIHRlc3RfcmVmc3BlYyBwdXNoICcnCQkJCQkJaW52YWxpZAotdGVzdF9yZWZzcGVjIHB1c2ggJzonCQkJCQkJaW52YWxpZAordGVzdF9yZWZzcGVjIHB1c2ggJzonCit0ZXN0X3JlZnNwZWMgcHVzaCAnOjonCQkJCQkJaW52YWxpZAordGVzdF9yZWZzcGVjIHB1c2ggJys6JwogCiB0ZXN0X3JlZnNwZWMgZmV0Y2ggJycKIHRlc3RfcmVmc3BlYyBmZXRjaCAnOicKK3Rlc3RfcmVmc3BlYyBmZXRjaCAnOjonCQkJCQkJaW52YWxpZAogCiB0ZXN0X3JlZnNwZWMgcHVzaCAncmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9mcm90ei8qJwogdGVzdF9yZWZzcGVjIHB1c2ggJ3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvZnJvdHonCQlpbnZhbGlkCmRpZmYgLS1naXQgYS90L3Q1NTEyLWxzLXJlbW90ZS5zaCBiL3QvdDU1MTItbHMtcmVtb3RlLnNoCmluZGV4IGMwZGM5NDkuLjFkZDhlZWQgMTAwNzU1Ci0tLSBhL3QvdDU1MTItbHMtcmVtb3RlLnNoCisrKyBiL3QvdDU1MTItbHMtcmVtb3RlLnNoCkBAIC0xNyw3ICsxNyw3IEBACiAJCWdpdCBzaG93LXJlZiAtZAl8IHNlZCAtZSAicy8gLwkvIgogCSkgPmV4cGVjdGVkLmFsbCAmJgogCi0JZ2l0IHJlbW90ZSBhZGQgc2VsZiAkKHB3ZCkvLmdpdAorCWdpdCByZW1vdGUgYWRkIHNlbGYgIiQocHdkKS8uZ2l0IgogCiAnCiAKZGlmZiAtLWdpdCBhL3QvdDU1MTMtZmV0Y2gtdHJhY2suc2ggYi90L3Q1NTEzLWZldGNoLXRyYWNrLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjllNzQ4NjIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTEzLWZldGNoLXRyYWNrLnNoCkBAIC0wLDAgKzEsMzAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdmZXRjaCBmb2xsb3dzIHJlbW90ZSB0cmFja2luZyBicmFuY2hlcyBjb3JyZWN0bHknCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwk+ZmlsZSAmJgorCWdpdCBhZGQgLiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gSW5pdGlhbCAmJgorCWdpdCBicmFuY2ggYi0wICYmCisJZ2l0IGJyYW5jaCBiMSAmJgorCWdpdCBicmFuY2ggYi9vbmUgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIG90aGVyICYmCisJKAorCQljZCBvdGhlciAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsIC4uICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi5mZXRjaCAiK3JlZnMvaGVhZHMvYi8qOnJlZnMvcmVtb3Rlcy9iLyoiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIGZldGNoICcKKwkoCisJCWNkIG90aGVyICYmIGdpdCBmZXRjaCBvcmlnaW4gJiYKKwkJdGVzdCAiJChnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHJlZm5hbWUpIikiID0gcmVmcy9yZW1vdGVzL2Ivb25lCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MTUtZmV0Y2gtbWVyZ2UtbG9naWMuc2ggYi90L3Q1NTE1LWZldGNoLW1lcmdlLWxvZ2ljLnNoCmluZGV4IDY1YzM3NzQuLjNkZWY3NWUgMTAwNzU1Ci0tLSBhL3QvdDU1MTUtZmV0Y2gtbWVyZ2UtbG9naWMuc2gKKysrIGIvdC90NTUxNS1mZXRjaC1tZXJnZS1sb2dpYy5zaApAQCAtMTUxLDcgKzE1MSw3IEBACiAJCWdpdCBzaG93LXJlZiA+IiRhY3R1YWxfciIgJiYKIAkJaWYgdGVzdCAtZiAiJGV4cGVjdF9mIgogCQl0aGVuCi0JCQlnaXQgZGlmZiAtdSAiJGV4cGVjdF9mIiAiJGFjdHVhbF9mIiAmJgorCQkJdGVzdF9jbXAgIiRleHBlY3RfZiIgIiRhY3R1YWxfZiIgJiYKIAkJCXJtIC1mICIkYWN0dWFsX2YiCiAJCWVsc2UKIAkJCSMgdGhpcyBpcyB0byBoZWxwIGRldmVsb3BpbmcgbmV3IHRlc3RzLgpAQCAtMTYwLDcgKzE2MCw3IEBACiAJCWZpICYmCiAJCWlmIHRlc3QgLWYgIiRleHBlY3RfciIKIAkJdGhlbgotCQkJZ2l0IGRpZmYgLXUgIiRleHBlY3RfciIgIiRhY3R1YWxfciIgJiYKKwkJCXRlc3RfY21wICIkZXhwZWN0X3IiICIkYWN0dWFsX3IiICYmCiAJCQlybSAtZiAiJGFjdHVhbF9yIgogCQllbHNlCiAJCQkjIHRoaXMgaXMgdG8gaGVscCBkZXZlbG9waW5nIG5ldyB0ZXN0cy4KZGlmZiAtLWdpdCBhL3QvdDU1MTYtZmV0Y2gtcHVzaC5zaCBiL3QvdDU1MTYtZmV0Y2gtcHVzaC5zaAppbmRleCAwYTc1N2Q1Li42ODA1MDMyIDEwMDc1NQotLS0gYS90L3Q1NTE2LWZldGNoLXB1c2guc2gKKysrIGIvdC90NTUxNi1mZXRjaC1wdXNoLnNoCkBAIC0xMDUsNyArMTA1LDcgQEAKIAkoCiAJCVRSQVNIPSQocHdkKS8gJiYKIAkJY2QgdGVzdHJlcG8gJiYKLQkJZ2l0IGNvbmZpZyB1cmwuJFRSQVNILmluc3RlYWRPZiB0cmFzaC8KKwkJZ2l0IGNvbmZpZyAidXJsLiRUUkFTSC5pbnN0ZWFkT2YiIHRyYXNoLyAmJgogCQlnaXQgY29uZmlnIHJlbW90ZS51cC51cmwgdHJhc2gvLiAmJgogCQlnaXQgY29uZmlnIHJlbW90ZS51cC5mZXRjaCAicmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiIgJiYKIAkJZ2l0IGZldGNoIHVwICYmCkBAIC0xNDUsOCArMTQ1LDggQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIGluc3RlYWRPZicgJwogCW1rX2VtcHR5ICYmCi0JVFJBU0g9JChwd2QpLyAmJgotCWdpdCBjb25maWcgdXJsLiRUUkFTSC5pbnN0ZWFkT2YgdHJhc2gvICYmCisJVFJBU0g9IiQocHdkKS8iICYmCisJZ2l0IGNvbmZpZyAidXJsLiRUUkFTSC5pbnN0ZWFkT2YiIHRyYXNoLyAmJgogCWdpdCBwdXNoIHRyYXNoL3Rlc3RyZXBvIHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyICYmCiAJKAogCQljZCB0ZXN0cmVwbyAmJgpAQCAtMTY1LDYgKzE2NSw0NyBAQAogCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBtYXRjaGluZyBoZWFkcyBvbiB0aGUgY29tbWFuZCBsaW5lJyAnCisKKwlta190ZXN0IGhlYWRzL21hc3RlciAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIDogJiYKKwljaGVja19wdXNoX3Jlc3VsdCAkdGhlX2NvbW1pdCBoZWFkcy9tYXN0ZXIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsZWQgKG5vbi1mYXN0LWZvcndhcmQpIHB1c2ggd2l0aCBtYXRjaGluZyBoZWFkcycgJworCisJbWtfdGVzdCBoZWFkcy9tYXN0ZXIgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyA6ICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1tYXNzYWdlZCAmJgorCSEgZ2l0IHB1c2ggdGVzdHJlcG8gJiYKKwljaGVja19wdXNoX3Jlc3VsdCAkdGhlX2NvbW1pdCBoZWFkcy9tYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICR0aGVfY29tbWl0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCAtLWZvcmNlIHdpdGggbWF0Y2hpbmcgaGVhZHMnICcKKworCW1rX3Rlc3QgaGVhZHMvbWFzdGVyICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gOiAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAtbWFzc2FnZWQgJiYKKwlnaXQgcHVzaCAtLWZvcmNlIHRlc3RyZXBvICYmCisJISBjaGVja19wdXNoX3Jlc3VsdCAkdGhlX2NvbW1pdCBoZWFkcy9tYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICR0aGVfY29tbWl0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIG1hdGNoaW5nIGhlYWRzIGFuZCBmb3JjZWQgdXBkYXRlJyAnCisKKwlta190ZXN0IGhlYWRzL21hc3RlciAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIDogJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLW1hc3NhZ2VkICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gKzogJiYKKwkhIGNoZWNrX3B1c2hfcmVzdWx0ICR0aGVfY29tbWl0IGhlYWRzL21hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgJHRoZV9jb21taXQKKworJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggbm8gYW1iaWd1aXR5ICgxKScgJwogCiAJbWtfdGVzdCBoZWFkcy9tYXN0ZXIgJiYKZGlmZiAtLWdpdCBhL3QvdDU1MTctcHVzaC1taXJyb3Iuc2ggYi90L3Q1NTE3LXB1c2gtbWlycm9yLnNoCmluZGV4IGVkM2ZlYzEuLmVhNDlkZWQgMTAwNzU1Ci0tLSBhL3QvdDU1MTctcHVzaC1taXJyb3Iuc2gKKysrIGIvdC90NTUxNy1wdXNoLW1pcnJvci5zaApAQCAtMjUsNyArMjUsNyBAQAogCSgKIAkJY2QgbWFzdGVyICYmCiAJCWdpdCBpbml0ICYmCi0JCWdpdCBjb25maWcgcmVtb3RlLnVwLnVybCAuLi9taXJyb3IKKwkJZ2l0IHJlbW90ZSBhZGQgJDEgdXAgLi4vbWlycm9yCiAJKQogfQogCkBAIC0yMjUsNCArMjI1LDQzIEBACiAKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlLmZvby5taXJyb3IgYWRkcyBhbmQgcmVtb3ZlcyBicmFuY2hlcycgJworCisJbWtfcmVwb19wYWlyIC0tbWlycm9yICYmCisJKAorCQljZCBtYXN0ZXIgJiYKKwkJZWNobyBvbmUgPmZvbyAmJiBnaXQgYWRkIGZvbyAmJiBnaXQgY29tbWl0IC1tIG9uZSAmJgorCQlnaXQgYnJhbmNoIGtlZXAgbWFzdGVyICYmCisJCWdpdCBicmFuY2ggcmVtb3ZlIG1hc3RlciAmJgorCQlnaXQgcHVzaCB1cCAmJgorCQlnaXQgYnJhbmNoIC1EIHJlbW92ZQorCQlnaXQgcHVzaCB1cAorCSkgJiYKKwkoCisJCWNkIG1pcnJvciAmJgorCQlnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9rZWVwICYmCisJCWludmVydCBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9yZW1vdmUKKwkpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlLmZvby5taXJyb3I9bm8gaGFzIG5vIGVmZmVjdCcgJworCisJbWtfcmVwb19wYWlyICYmCisJKAorCQljZCBtYXN0ZXIgJiYKKwkJZWNobyBvbmUgPmZvbyAmJiBnaXQgYWRkIGZvbyAmJiBnaXQgY29tbWl0IC1tIG9uZSAmJgorCQlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS51cC5taXJyb3Igbm8gJiYKKwkJZ2l0IGJyYW5jaCBrZWVwIG1hc3RlciAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cCAmJgorCQlnaXQgYnJhbmNoIC1EIGtlZXAgJiYKKwkJZ2l0IHB1c2ggdXAKKwkpICYmCisJKAorCQljZCBtaXJyb3IgJiYKKwkJZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMva2VlcAorCSkKKworJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MTgtZmV0Y2gtZXhpdC1zdGF0dXMuc2ggYi90L3Q1NTE4LWZldGNoLWV4aXQtc3RhdHVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM2YmM2NWYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE4LWZldGNoLWV4aXQtc3RhdHVzLnNoCkBAIC0wLDAgKzEsMzcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggRG1pdHJ5IFYuIExldmluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2ZldGNoIGV4aXQgc3RhdHVzIHRlc3QnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCT5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSAmJgorCWVjaG8gc2lkZSA+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gc2lkZSAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWVjaG8gbmV4dCA+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gbmV4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub24gZmFzdCBmb3J3YXJkIGZldGNoJyAnCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2ggLiBtYXN0ZXI6c2lkZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvcmNlZCB1cGRhdGUnICcKKworCWdpdCBmZXRjaCAuICttYXN0ZXI6c2lkZQorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUyMC1wdWxsLnNoIGIvdC90NTUyMC1wdWxsLnNoCmluZGV4IDk0ODQxMjkuLjk5N2IyZGIgMTAwNzU1Ci0tLSBhL3QvdDU1MjAtcHVsbC5zaAorKysgYi90L3Q1NTIwLXB1bGwuc2gKQEAgLTkyLDQgKzkyLDIyIEBACiAKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCAtLXJlYmFzZSBkaWVzIGVhcmx5IHdpdGggZGlydHkgd29ya2luZyBkaXJlY3RvcnknICcKKworCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9tZS9jb3B5IGNvcHleICYmCisJQ09QWT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWUvY29weSkgJiYKKwlnaXQgcmViYXNlIC0tb250byAkQ09QWSBjb3B5ICYmCisJZ2l0IGNvbmZpZyBicmFuY2gudG8tcmViYXNlLnJlbW90ZSBtZSAmJgorCWdpdCBjb25maWcgYnJhbmNoLnRvLXJlYmFzZS5tZXJnZSByZWZzL2hlYWRzL2NvcHkgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC50by1yZWJhc2UucmViYXNlIHRydWUgJiYKKwllY2hvIGRpcnR5ID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAmJgorCXRlc3QgJENPUFkgPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWUvY29weSkgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRCAtLSBmaWxlICYmCisJZ2l0IHB1bGwgJiYKKwl0ZXN0ICRDT1BZICE9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtZS9jb3B5KQorCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTYwMS1jbG9uZS5zaCBiL3QvdDU2MDEtY2xvbmUuc2gKaW5kZXggZGM5ZDYzZC4uZDc4NWIzZCAxMDA3NTUKLS0tIGEvdC90NTYwMS1jbG9uZS5zaAorKysgYi90L3Q1NjAxLWNsb25lLnNoCkBAIC0xNywxMCArMTcsNTcgQEAKIAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB3aXRoIGV4Y2VzcyBwYXJhbWV0ZXJzJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB3aXRoIGV4Y2VzcyBwYXJhbWV0ZXJzICgxKScgJwogCisJcm0gLWZyIGRzdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtbiBzcmMgZHN0IGp1bmsKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB3aXRoIGV4Y2VzcyBwYXJhbWV0ZXJzICgyKScgJworCisJcm0gLWZyIGRzdCAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtbiAiZmlsZTovLyQocHdkKS9zcmMiIGRzdCBqdW5rCiAKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgZG9lcyBub3Qga2VlcCBwYWNrJyAnCisKKwlybSAtZnIgZHN0ICYmCisJZ2l0IGNsb25lIC1uICJmaWxlOi8vJChwd2QpL3NyYyIgZHN0ICYmCisJISB0ZXN0IC1mIGRzdC9maWxlICYmCisJISAoZWNobyBkc3QvLmdpdC9vYmplY3RzL3BhY2svcGFjay0qIHwgZ3JlcCAiXC5rZWVwIikKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBjaGVja3Mgb3V0IGZpbGVzJyAnCisKKwlybSAtZnIgZHN0ICYmCisJZ2l0IGNsb25lIHNyYyBkc3QgJiYKKwl0ZXN0IC1mIGRzdC9maWxlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgcmVzcGVjdHMgR0lUX1dPUktfVFJFRScgJworCisJR0lUX1dPUktfVFJFRT13b3JrdHJlZSBnaXQgY2xvbmUgc3JjIGJhcmUgJiYKKwl0ZXN0IC1mIGJhcmUvY29uZmlnICYmCisJdGVzdCAtZiB3b3JrdHJlZS9maWxlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgY3JlYXRlcyBpbnRlcm1lZGlhdGUgZGlyZWN0b3JpZXMnICcKKworCWdpdCBjbG9uZSBzcmMgbG9uZy9wYXRoL3RvL2RzdCAmJgorCXRlc3QgLWYgbG9uZy9wYXRoL3RvL2RzdC9maWxlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgY3JlYXRlcyBpbnRlcm1lZGlhdGUgZGlyZWN0b3JpZXMgZm9yIGJhcmUgcmVwbycgJworCisJZ2l0IGNsb25lIC0tYmFyZSBzcmMgbG9uZy9wYXRoL3RvL2JhcmUvZHN0ICYmCisJdGVzdCAtZiBsb25nL3BhdGgvdG8vYmFyZS9kc3QvY29uZmlnCisKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NjAyLWNsb25lLXJlbW90ZS1leGVjLnNoIGIvdC90NTYwMi1jbG9uZS1yZW1vdGUtZXhlYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44MzY3YTY4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTYwMi1jbG9uZS1yZW1vdGUtZXhlYy5zaApAQCAtMCwwICsxLDI2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj1jbG9uZQorCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyAiIyEvYmluL3NoIiA+IG5vdF9zc2gKKwllY2hvICJlY2hvIFwiXCQqXCIgPiBub3Rfc3NoX291dHB1dCIgPj4gbm90X3NzaAorCWVjaG8gImV4aXQgMSIgPj4gbm90X3NzaAorCWNobW9kICt4IG5vdF9zc2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgY2FsbHMgZ2l0LXVwbG9hZC1wYWNrIHVucXVhbGlmaWVkIHdpdGggbm8gLXUgb3B0aW9uJyAnCisJR0lUX1NTSD0uL25vdF9zc2ggZ2l0IGNsb25lIGxvY2FsaG9zdDovcGF0aC90by9yZXBvIGp1bmsKKwllY2hvICJsb2NhbGhvc3QgZ2l0LXVwbG9hZC1wYWNrICdcJycvcGF0aC90by9yZXBvJ1wnJyIgPmV4cGVjdGVkCisJdGVzdF9jbXAgZXhwZWN0ZWQgbm90X3NzaF9vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgY2FsbHMgc3BlY2lmaWVkIGdpdC11cGxvYWQtcGFjayB3aXRoIC11IG9wdGlvbicgJworCUdJVF9TU0g9Li9ub3Rfc3NoIGdpdCBjbG9uZSAtdSAvc29tZXRoaW5nL2Jpbi9naXQtdXBsb2FkLXBhY2sgbG9jYWxob3N0Oi9wYXRoL3RvL3JlcG8ganVuaworCWVjaG8gImxvY2FsaG9zdCAvc29tZXRoaW5nL2Jpbi9naXQtdXBsb2FkLXBhY2sgJ1wnJy9wYXRoL3RvL3JlcG8nXCcnIiA+ZXhwZWN0ZWQKKwl0ZXN0X2NtcCBleHBlY3RlZCBub3Rfc3NoX291dHB1dAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU3MDAtY2xvbmUtcmVmZXJlbmNlLnNoIGIvdC90NTcwMC1jbG9uZS1yZWZlcmVuY2Uuc2gKaW5kZXggYjZhNTQ4Ni4uMWMxMDkxNiAxMDA3NTUKLS0tIGEvdC90NTcwMC1jbG9uZS1yZWZlcmVuY2Uuc2gKKysrIGIvdC90NTcwMC1jbG9uZS1yZWZlcmVuY2Uuc2gKQEAgLTgsNiArOCw4IEBACiAKIGJhc2VfZGlyPWBwd2RgCiAKK1U9JGJhc2VfZGlyL1VQTE9BRF9MT0cKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyaW5nIGZpcnN0IHJlcG9zaXRvcnknIFwKICd0ZXN0X2NyZWF0ZV9yZXBvIEEgJiYgY2QgQSAmJgogZWNobyBmaXJzdCA+IGZpbGUxICYmCkBAIC01MCw4ICs1MiwxMyBAQAogCiBjZCAiJGJhc2VfZGlyIgogCitybSAtZiAiJFUiCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25pbmcgd2l0aCByZWZlcmVuY2UgKG5vIC1sIC1zKScgXAotJ2dpdCBjbG9uZSAtLXJlZmVyZW5jZSBCIGZpbGU6Ly9gcHdkYC9BIEQnCisnR0lUX0RFQlVHX1NFTkRfUEFDSz0zIGdpdCBjbG9uZSAtLXJlZmVyZW5jZSBCICJmaWxlOi8vJChwd2QpL0EiIEQgMz4iJFUiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaGVkIG5vIG9iamVjdHMnIFwKKychIGdyZXAgIl53YW50IiAiJFUiJwogCiBjZCAiJGJhc2VfZGlyIgogCkBAIC0xMTMsNCArMTIwLDMwIEBACiAKIGNkICIkYmFzZV9kaXIiCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmluZyBhbHRlcm5hdGUgcmVwb3NpdG9yeSAjMScgXAorJ3Rlc3RfY3JlYXRlX3JlcG8gRiAmJiBjZCBGICYmCitlY2hvIGZpcnN0ID4gZmlsZTEgJiYKK2dpdCBhZGQgZmlsZTEgJiYKK2dpdCBjb21taXQgLW0gaW5pdGlhbCcKKworY2QgIiRiYXNlX2RpciIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmluZyBhbHRlcm5hdGUgcmVwbyAjMiBhbmQgYWRkaW5nIGNoYW5nZXMgdG8gcmVwbyAjMScgXAorJ2dpdCBjbG9uZSBGIEcgJiYgY2QgRiAmJgorZWNobyBzZWNvbmQgPiBmaWxlMiAmJgorZ2l0IGFkZCBmaWxlMiAmJgorZ2l0IGNvbW1pdCAtbSBhZGRpdGlvbicKKworY2QgIiRiYXNlX2RpciIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmluZyBhbHRlcm5hdGUgcmVwbyAjMSwgdXNpbmcgIzIgYXMgcmVmZXJlbmNlJyBcCisnZ2l0IGNsb25lIC0tcmVmZXJlbmNlIEcgRiBIJworCitjZCAiJGJhc2VfZGlyIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uaW5nIHdpdGggcmVmZXJlbmNlIGJlaW5nIHN1YnNldCBvZiBzb3VyY2UgKC1sIC1zKScgXAorJ2dpdCBjbG9uZSAtbCAtcyAtLXJlZmVyZW5jZSBBIEIgRScKKworY2QgIiRiYXNlX2RpciIKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NzEwLWluZm8tYWx0ZXJuYXRlLnNoIGIvdC90NTcxMC1pbmZvLWFsdGVybmF0ZS5zaAppbmRleCA5MTBjY2I0Li5lZjcxMjdjIDEwMDc1NQotLS0gYS90L3Q1NzEwLWluZm8tYWx0ZXJuYXRlLnNoCisrKyBiL3QvdDU3MTAtaW5mby1hbHRlcm5hdGUuc2gKQEAgLTgxLDkgKzgxLDkgQEAKIGNkICIkYmFzZV9kaXIiCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyZWFraW5nIG9mIGxvb3BzJyBcCi0iZWNobyAnJGJhc2VfZGlyL0IvLmdpdC9vYmplY3RzJyA+PiAnJGJhc2VfZGlyJy9BLy5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMmJgorJ2VjaG8gIiRiYXNlX2RpciIvQi8uZ2l0L29iamVjdHMgPj4gIiRiYXNlX2RpciIvQS8uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzJiYKIGNkIEMgJiYKLXRlc3RfdmFsaWRfcmVwbyIKK3Rlc3RfdmFsaWRfcmVwbycKIAogY2QgIiRiYXNlX2RpciIKIApkaWZmIC0tZ2l0IGEvdC90NjAwMGxpYi5zaCBiL3QvdDYwMDBsaWIuc2gKaW5kZXggYzBiYWFhNS4uZjU1NjI3YiAxMDA3NTUKLS0tIGEvdC90NjAwMGxpYi5zaAorKysgYi90L3Q2MDAwbGliLnNoCkBAIC00OSwxMyArNDksMTUgQEAKIAlzaGlmdCAxCiAgICAgICAgIF9zYXZlPSRHSVRfQVVUSE9SX0VNQUlMCiAKLQlleHBvcnQgR0lUX0FVVEhPUl9FTUFJTD0iJF9hdXRob3IiCisJR0lUX0FVVEhPUl9FTUFJTD0iJF9hdXRob3IiCisJZXhwb3J0IEdJVF9BVVRIT1JfRU1BSUwKIAkiJEAiCiAJaWYgdGVzdCAteiAiJF9zYXZlIgogCXRoZW4KIAkJdW5zZXQgR0lUX0FVVEhPUl9FTUFJTAogCWVsc2UKLQkJZXhwb3J0IEdJVF9BVVRIT1JfRU1BSUw9IiRfc2F2ZSIKKwkJR0lUX0FVVEhPUl9FTUFJTD0iJF9zYXZlIgorCQlleHBvcnQgR0lUX0FVVEhPUl9FTUFJTAogCWZpCiB9CiAKQEAgLTY5LDcgKzcxLDggQEAKIHsKICAgICBfZGF0ZT0kMQogICAgIHNoaWZ0IDEKLSAgICBleHBvcnQgR0lUX0NPTU1JVFRFUl9EQVRFPSIkX2RhdGUiCisgICAgR0lUX0NPTU1JVFRFUl9EQVRFPSIkX2RhdGUiCisgICAgZXhwb3J0IEdJVF9DT01NSVRURVJfREFURQogICAgICIkQCIKICAgICB1bnNldCBHSVRfQ09NTUlUVEVSX0RBVEUKIH0KZGlmZiAtLWdpdCBhL3QvdDYwMDYtcmV2LWxpc3QtZm9ybWF0LnNoIGIvdC90NjAwNi1yZXYtbGlzdC1mb3JtYXQuc2gKaW5kZXggMGRjOTE1ZS4uOTE3NjQ4NCAxMDA3NTUKLS0tIGEvdC90NjAwNi1yZXYtbGlzdC1mb3JtYXQuc2gKKysrIGIvdC90NjAwNi1yZXYtbGlzdC1mb3JtYXQuc2gKQEAgLTE1LDcgKzE1LDcgQEAKIAljYXQgPmV4cGVjdC4kMQogCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImZvcm1hdCAkMSIgIgogZ2l0IHJldi1saXN0IC0tcHJldHR5PWZvcm1hdDokMiBtYXN0ZXIgPm91dHB1dC4kMSAmJgotZ2l0IGRpZmYgZXhwZWN0LiQxIG91dHB1dC4kMQordGVzdF9jbXAgZXhwZWN0LiQxIG91dHB1dC4kMQogIgogfQogCmRpZmYgLS1naXQgYS90L3Q2MDEwLW1lcmdlLWJhc2Uuc2ggYi90L3Q2MDEwLW1lcmdlLWJhc2Uuc2gKaW5kZXggOTZmM2QzNS4uYjZlNTdiMiAxMDA3NTUKLS0tIGEvdC90NjAxMC1tZXJnZS1iYXNlLnNoCisrKyBiL3QvdDYwMTAtbWVyZ2UtYmFzZS5zaApAQCAtMTMsMTAgKzEzLDExIEBACiBNPTExMzAwMDAwMDAKIFo9KzAwMDAKIAotZXhwb3J0IEdJVF9DT01NSVRURVJfRU1BSUw9Z2l0QGNvbW0uaXRlci54egotZXhwb3J0IEdJVF9DT01NSVRURVJfTkFNRT0nQyBPIE1taXRlcicKLWV4cG9ydCBHSVRfQVVUSE9SX05BTUU9J0EgVSBUaG9yJwotZXhwb3J0IEdJVF9BVVRIT1JfRU1BSUw9Z2l0QGF1LnRob3IueHoKK0dJVF9DT01NSVRURVJfRU1BSUw9Z2l0QGNvbW0uaXRlci54egorR0lUX0NPTU1JVFRFUl9OQU1FPSdDIE8gTW1pdGVyJworR0lUX0FVVEhPUl9OQU1FPSdBIFUgVGhvcicKK0dJVF9BVVRIT1JfRU1BSUw9Z2l0QGF1LnRob3IueHoKK2V4cG9ydCBHSVRfQ09NTUlUVEVSX0VNQUlMIEdJVF9DT01NSVRURVJfTkFNRSBHSVRfQVVUSE9SX05BTUUgR0lUX0FVVEhPUl9FTUFJTAogCiBkb2l0KCkgewogCU9GRlNFVD0kMTsgc2hpZnQKZGlmZiAtLWdpdCBhL3QvdDYwMjMtbWVyZ2UtZmlsZS5zaCBiL3QvdDYwMjMtbWVyZ2UtZmlsZS5zaAppbmRleCA3OWRjNThiLi43NGU5ZTY2IDEwMDc1NQotLS0gYS90L3Q2MDIzLW1lcmdlLWZpbGUuc2gKKysrIGIvdC90NjAyMy1tZXJnZS1maWxlLnNoCkBAIC02Myw3ICs2Myw3IEBACiAJImdpdCBtZXJnZS1maWxlIHRlc3QyLnR4dCBvcmlnLnR4dCBuZXcyLnR4dCIKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAibWVyZ2UgcmVzdWx0IGFkZGVkIG1pc3NpbmcgTEYiIFwKLQkiZ2l0IGRpZmYgdGVzdC50eHQgdGVzdDIudHh0IgorCSJ0ZXN0X2NtcCB0ZXN0LnR4dCB0ZXN0Mi50eHQiCiAKIGNwIHRlc3QudHh0IGJhY2t1cC50eHQKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgIm1lcmdlIHdpdGggY29uZmxpY3RzIiBcCkBAIC04Niw3ICs4Niw3IEBACiB2aXJnYSB0dWEgZXQgYmFjdWx1cyB0dXVzIGlwc2EgbWUgY29uc29sYXRhIHN1bnQuCiBFT0YKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAiZXhwZWN0ZWQgY29uZmxpY3QgbWFya2VycyIgImdpdCBkaWZmIHRlc3QudHh0IGV4cGVjdC50eHQiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJleHBlY3RlZCBjb25mbGljdCBtYXJrZXJzIiAidGVzdF9jbXAgdGVzdC50eHQgZXhwZWN0LnR4dCIKIAogY3AgYmFja3VwLnR4dCB0ZXN0LnR4dAogdGVzdF9leHBlY3Rfc3VjY2VzcyAibWVyZ2Ugd2l0aCBjb25mbGljdHMsIHVzaW5nIC1MIiBcCkBAIC0xMTAsNyArMTEwLDcgQEAKIEVPRgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICJleHBlY3RlZCBjb25mbGljdCBtYXJrZXJzLCB3aXRoIC1MIiBcCi0JImdpdCBkaWZmIHRlc3QudHh0IGV4cGVjdC50eHQiCisJInRlc3RfY21wIHRlc3QudHh0IGV4cGVjdC50eHQiCiAKIHNlZCAicy8gdHUgLyBUVSAvIiA8IG5ldzEudHh0ID4gbmV3NS50eHQKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNvbmZsaWN0IGluIHJlbW92ZWQgdGFpbCIgXApAQCAtMTMyLDcgKzEzMiw3IEBACiA+Pj4+Pj4+IG5ldzUudHh0CiBFT0YKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAiZXhwZWN0ZWQgY29uZmxpY3QgbWFya2VycyIgImdpdCBkaWZmIGV4cGVjdCBvdXQiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJleHBlY3RlZCBjb25mbGljdCBtYXJrZXJzIiAidGVzdF9jbXAgZXhwZWN0IG91dCIKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYmluYXJ5IGZpbGVzIGNhbm5vdCBiZSBtZXJnZWQnICcKIAkhIGdpdCBtZXJnZS1maWxlIC1wIG9yaWcudHh0IC4uL3Rlc3Q0MDEyLnBuZyBuZXcxLnR4dCAyPiBtZXJnZS5lcnIgJiYKZGlmZiAtLWdpdCBhL3QvdDYwMjQtcmVjdXJzaXZlLW1lcmdlLnNoIGIvdC90NjAyNC1yZWN1cnNpdmUtbWVyZ2Uuc2gKaW5kZXggMjNkMjRkMy4uNmE2YTEzMCAxMDA3NTUKLS0tIGEvdC90NjAyNC1yZWN1cnNpdmUtbWVyZ2Uuc2gKKysrIGIvdC90NjAyNC1yZWN1cnNpdmUtbWVyZ2Uuc2gKQEAgLTcwLDcgKzcwLDcgQEAKID4+Pj4+Pj4gRzphMQogRU9GCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlc3VsdCBjb250YWlucyBhIGNvbmZsaWN0IiAiZ2l0IGRpZmYgZXhwZWN0IGExIgordGVzdF9leHBlY3Rfc3VjY2VzcyAicmVzdWx0IGNvbnRhaW5zIGEgY29uZmxpY3QiICJ0ZXN0X2NtcCBleHBlY3QgYTEiCiAKIGdpdCBscy1maWxlcyAtLXN0YWdlID4gb3V0CiBjYXQgPiBleHBlY3QgPDwgRU9GCkBAIC03OSw3ICs3OSw3IEBACiAxMDA2NDQgZmQ3OTIzNTI5ODU1ZDBiMjc0Nzk1YWUzMzQ5YzVlMDQzODMzMzk3OSAzCWExCiBFT0YKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAidmlydHVhbCB0cmVlcyB3ZXJlIHByb2Nlc3NlZCIgImdpdCBkaWZmIGV4cGVjdCBvdXQiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJ2aXJ0dWFsIHRyZWVzIHdlcmUgcHJvY2Vzc2VkIiAidGVzdF9jbXAgZXhwZWN0IG91dCIKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmdXNlIHRvIG1lcmdlIGJpbmFyeSBmaWxlcycgJwogCWdpdCByZXNldCAtLWhhcmQgJiYKZGlmZiAtLWdpdCBhL3QvdDYwMjktbWVyZ2Utc3VidHJlZS5zaCBiL3QvdDYwMjktbWVyZ2Utc3VidHJlZS5zaAppbmRleCA0M2Y1NDU5Li41YmJmYTQ0IDEwMDc1NQotLS0gYS90L3Q2MDI5LW1lcmdlLXN1YnRyZWUuc2gKKysrIGIvdC90NjAyOS1tZXJnZS1zdWJ0cmVlLnNoCkBAIC01Nyw3ICs1Nyw3IEBACiAJCWVjaG8gIjEwMDY0NCAkbzEgMAlnaXQtZ3VpL2dpdC1ndWkuc2giCiAJCWVjaG8gIjEwMDY0NCAkbzIgMAlnaXQuYyIKIAkpID5leHBlY3RlZCAmJgotCWdpdCBkaWZmIC11IGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSB1cGRhdGUnICcKQEAgLTczLDcgKzczLDcgQEAKIAkJZWNobyAiMTAwNjQ0ICRvMyAwCWdpdC1ndWkvZ2l0LWd1aS5zaCIKIAkJZWNobyAiMTAwNjQ0ICRvMiAwCWdpdC5jIgogCSkgPmV4cGVjdGVkICYmCi0JZ2l0IGRpZmYgLXUgZXhwZWN0ZWQgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAzMC1iaXNlY3QtcG9yY2VsYWluLnNoIGIvdC90NjAzMC1iaXNlY3QtcG9yY2VsYWluLnNoCmluZGV4IDkzM2Y1NjcuLjA2MjY1NDQgMTAwNzU1Ci0tLSBhL3QvdDYwMzAtYmlzZWN0LXBvcmNlbGFpbi5zaAorKysgYi90L3Q2MDMwLWJpc2VjdC1wb3JjZWxhaW4uc2gKQEAgLTEyNiw2ICsxMjYsNDcgQEAKIAl0ZXN0IC16ICIkKGdpdCBmb3ItZWFjaC1yZWYgInJlZnMvaGVhZHMvYmlzZWN0IikiCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBzdGFydDogYmFjayBpbiBnb29kIGJyYW5jaCcgJworCWdpdCBicmFuY2ggPiBicmFuY2gub3V0cHV0ICYmCisJZ3JlcCAiKiBvdGhlciIgYnJhbmNoLm91dHB1dCA+IC9kZXYvbnVsbCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g0ICRIQVNIMSAtLSAmJgorCWdpdCBiaXNlY3QgZ29vZCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g0ICRIQVNIMSAtLSAmJgorCWdpdCBiaXNlY3QgYmFkICYmCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBicmFuY2ggPiBicmFuY2gub3V0cHV0ICYmCisJZ3JlcCAiKiBvdGhlciIgYnJhbmNoLm91dHB1dCA+IC9kZXYvbnVsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Qgc3RhcnQ6IG5vICIuZ2l0L0JJU0VDVF9TVEFSVCIgaWYganVuayByZXYnICcKKwlnaXQgYmlzZWN0IHN0YXJ0ICRIQVNINCAkSEFTSDEgLS0gJiYKKwlnaXQgYmlzZWN0IGdvb2QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IHN0YXJ0ICRIQVNINCBmb28gLS0gJiYKKwlnaXQgYnJhbmNoID4gYnJhbmNoLm91dHB1dCAmJgorCWdyZXAgIiogb3RoZXIiIGJyYW5jaC5vdXRwdXQgPiAvZGV2L251bGwgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0IC1lIC5naXQvQklTRUNUX1NUQVJUCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBzdGFydDogbm8gIi5naXQvQklTRUNUX1NUQVJUIiBpZiBtaXN0YWtlbiByZXYnICcKKwlnaXQgYmlzZWN0IHN0YXJ0ICRIQVNINCAkSEFTSDEgLS0gJiYKKwlnaXQgYmlzZWN0IGdvb2QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IHN0YXJ0ICRIQVNIMSAkSEFTSDQgLS0gJiYKKwlnaXQgYnJhbmNoID4gYnJhbmNoLm91dHB1dCAmJgorCWdyZXAgIiogb3RoZXIiIGJyYW5jaC5vdXRwdXQgPiAvZGV2L251bGwgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0IC1lIC5naXQvQklTRUNUX1NUQVJUCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBzdGFydDogbm8gIi5naXQvQklTRUNUX1NUQVJUIiBpZiBjaGVja291dCBlcnJvcicgJworCWVjaG8gInRlbXAgc3R1ZmYiID4gaGVsbG8gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IHN0YXJ0ICRIQVNINCAkSEFTSDEgLS0gJiYKKwlnaXQgYnJhbmNoICYmCisJZ2l0IGJyYW5jaCA+IGJyYW5jaC5vdXRwdXQgJiYKKwlncmVwICIqIG90aGVyIiBicmFuY2gub3V0cHV0ID4gL2Rldi9udWxsICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdCAtZSAuZ2l0L0JJU0VDVF9TVEFSVCAmJgorCXRlc3QgLXogIiQoZ2l0IGZvci1lYWNoLXJlZiAicmVmcy9iaXNlY3QvKiIpIiAmJgorCWdpdCBjaGVja291dCBIRUFEIGhlbGxvCisnCisKICMgJEhBU0gxIGlzIGdvb2QsICRIQVNINCBpcyBiYWQsIHdlIHNraXAgJEhBU0gzCiAjIGJ1dCAkSEFTSDIgaXMgYmFkLAogIyBzbyB3ZSBzaG91bGQgZmluZCAkSEFTSDIgYXMgdGhlIGZpcnN0IGJhZCBjb21taXQKQEAgLTI4MSwyNSArMzIyLDYgQEAKIAl0ZXN0ICRIRUFEID0gJChjYXQgLmdpdC9CSVNFQ1RfU1RBUlQpICYmCiAJZ2l0IGJpc2VjdCByZXNldCAmJgogCXRlc3QgJEhFQUQgPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkKLQotJwotCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3QgcmVmdXNlcyB0byBzdGFydCBpZiBicmFuY2ggYmlzZWN0IGV4aXN0cycgJwotCWdpdCBiaXNlY3QgcmVzZXQgJiYKLQlnaXQgYnJhbmNoIGJpc2VjdCAmJgotCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3Qgc3RhcnQgJiYKLQlnaXQgYnJhbmNoIC1kIGJpc2VjdCAmJgotCWdpdCBjaGVja291dCAtYiBiaXNlY3QgJiYKLQl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IHN0YXJ0ICYmCi0JZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgotCWdpdCBicmFuY2ggLWQgYmlzZWN0Ci0nCi0KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCByZWZ1c2VzIHRvIHN0YXJ0IGlmIGJyYW5jaCBuZXctYmlzZWN0IGV4aXN0cycgJwotCWdpdCBiaXNlY3QgcmVzZXQgJiYKLQlnaXQgYnJhbmNoIG5ldy1iaXNlY3QgJiYKLQl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IHN0YXJ0ICYmCi0JZ2l0IGJyYW5jaCAtZCBuZXctYmlzZWN0CiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBlcnJvcnMgb3V0IGlmIGJhZCBhbmQgZ29vZCBhcmUgbWlzdGFrZW4nICcKQEAgLTMwOSw2ICszMzEsMjUgQEAKIAlnaXQgYmlzZWN0IHJlc2V0CiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBkb2VzIG5vdCBjcmVhdGUgYSAiYmlzZWN0IiBicmFuY2gnICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDcgJEhBU0gxICYmCisJZ2l0IGJyYW5jaCBiaXNlY3QgJiYKKwlyZXZfaGFzaDQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJdGVzdCAiJHJldl9oYXNoNCIgPSAiJEhBU0g0IiAmJgorCWdpdCBicmFuY2ggLUQgYmlzZWN0ICYmCisJZ2l0IGJpc2VjdCBnb29kICYmCisJZ2l0IGJyYW5jaCBiaXNlY3QgJiYKKwlyZXZfaGFzaDY9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJdGVzdCAiJHJldl9oYXNoNiIgPSAiJEhBU0g2IiAmJgorCWdpdCBiaXNlY3QgZ29vZCA+IG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAiJEhBU0g3IGlzIGZpcnN0IGJhZCBjb21taXQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCXJldl9oYXNoNj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgYmlzZWN0KSAmJgorCXRlc3QgIiRyZXZfaGFzaDYiID0gIiRIQVNINiIgJiYKKwlnaXQgYnJhbmNoIC1EIGJpc2VjdAorJworCiAjCiAjCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMzEtbWVyZ2UtcmVjdXJzaXZlLnNoIGIvdC90NjAzMS1tZXJnZS1yZWN1cnNpdmUuc2gKaW5kZXggYzgzMTBhZS4uODA3M2UwYyAxMDA3NTUKLS0tIGEvdC90NjAzMS1tZXJnZS1yZWN1cnNpdmUuc2gKKysrIGIvdC90NjAzMS1tZXJnZS1yZWN1cnNpdmUuc2gKQEAgLTMsNiArMyw5IEBACiB0ZXN0X2Rlc2NyaXB0aW9uPSdtZXJnZS1yZWN1cnNpdmU6IGhhbmRsZSBmaWxlIG1vZGUnCiAuIC4vdGVzdC1saWIuc2gKIAorIyBOb3RlIHRoYXQgd2UgZm9sbG93ICJjaG1vZCAreCBGIiB3aXRoICJ1cGRhdGUtaW5kZXggLS1jaG1vZD0reCBGIiB0bworIyBoZWxwIGZpbGVzeXN0ZW1zIHRoYXQgZG8gbm90IGhhdmUgdGhlIGV4ZWN1dGFibGUgYml0LgorCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RlIGNoYW5nZSBpbiBvbmUgYnJhbmNoOiBrZWVwIGNoYW5nZWQgdmVyc2lvbicgJwogCTogPmZpbGUxICYmCiAJZ2l0IGFkZCBmaWxlMSAmJgpAQCAtMTMsNyArMTYsNyBAQAogCWdpdCBjb21taXQgLW0gYSAmJgogCWdpdCBjaGVja291dCAtYiBiMSBtYXN0ZXIgJiYKIAljaG1vZCAreCBmaWxlMSAmJgotCWdpdCBhZGQgZmlsZTEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tY2htb2Q9K3ggZmlsZTEgJiYKIAlnaXQgY29tbWl0IC1tIGIxICYmCiAJZ2l0IGNoZWNrb3V0IGExICYmCiAJZ2l0IG1lcmdlLXJlY3Vyc2l2ZSBtYXN0ZXIgLS0gYTEgYjEgJiYKQEAgLTI2LDcgKzI5LDcgQEAKIAk6ID5maWxlMiAmJgogCUg9JChnaXQgaGFzaC1vYmplY3QgZmlsZTIpICYmCiAJY2htb2QgK3ggZmlsZTIgJiYKLQlnaXQgYWRkIGZpbGUyICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNobW9kPSt4IGZpbGUyICYmCiAJZ2l0IGNvbW1pdCAtbSBhMiAmJgogCWdpdCBjaGVja291dCAtYiBiMiBtYXN0ZXIgJiYKIAk6ID5maWxlMiAmJgpkaWZmIC0tZ2l0IGEvdC90NjAzMi1tZXJnZS1sYXJnZS1yZW5hbWUuc2ggYi90L3Q2MDMyLW1lcmdlLWxhcmdlLXJlbmFtZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lYWM1ZWJhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAzMi1tZXJnZS1sYXJnZS1yZW5hbWUuc2gKQEAgLTAsMCArMSw3MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J21lcmdpbmcgd2l0aCBsYXJnZSByZW5hbWUgbWF0cml4JworLiAuL3Rlc3QtbGliLnNoCisKK2NvdW50KCkgeworCWk9MQorCXdoaWxlIHRlc3QgJGkgLWxlICQxOyBkbworCQllY2hvICRpCisJCWk9JCgoJGkgKyAxKSkKKwlkb25lCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIChpbml0aWFsKScgJworCXRvdWNoIGZpbGUgJiYKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgdGFnIGluaXRpYWwKKycKKworbWFrZV90ZXh0KCkgeworCWVjaG8gJDE6ICQyCisJZm9yIGkgaW4gYGNvdW50IDIwYDsgZG8KKwkJZWNobyAkMTogJGkKKwlkb25lCisJZWNobyAkMTogJDMKK30KKwordGVzdF9yZW5hbWUoKSB7CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicmVuYW1lICgkMSwgJDIpIiAnCisJbj0nJDEnCisJZXhwZWN0PSckMicKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZ2l0IGJyYW5jaCAtRCB0ZXN0JG4gfHwgdHJ1ZSAmJgorCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCWZvciBpIGluICQoY291bnQgJG4pOyBkbworCQltYWtlX3RleHQgJGkgaW5pdGlhbCBpbml0aWFsID4kaQorCWRvbmUgJiYKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC1tIGFkZD0kbiAmJgorCWZvciBpIGluICQoY291bnQgJG4pOyBkbworCQltYWtlX3RleHQgJGkgY2hhbmdlZCBpbml0aWFsID4kaQorCWRvbmUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGNoYW5nZT0kbiAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0JG4gSEVBRF4gJiYKKwlmb3IgaSBpbiAkKGNvdW50ICRuKTsgZG8KKwkJZ2l0IHJtICRpCisJCW1ha2VfdGV4dCAkaSBpbml0aWFsIGNoYW5nZWQgPiRpLm1vdmVkCisJZG9uZSAmJgorCWdpdCBhZGQgLiAmJgorCWdpdCBjb21taXQgLW0gY2hhbmdlK3JlbmFtZT0kbiAmJgorCWNhc2UgIiRleHBlY3QiIGluCisJCW9rKSBnaXQgbWVyZ2UgbWFzdGVyIDs7CisJCSAqKSB0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyIDs7CisJZXNhYworCScKK30KKwordGVzdF9yZW5hbWUgNSBvaworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgZGlmZi5yZW5hbWVsaW1pdCB0byA0JyAnCisJZ2l0IGNvbmZpZyBkaWZmLnJlbmFtZWxpbWl0IDQKKycKK3Rlc3RfcmVuYW1lIDQgb2sKK3Rlc3RfcmVuYW1lIDUgZmFpbAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgbWVyZ2UucmVuYW1lbGltaXQgdG8gNScgJworCWdpdCBjb25maWcgbWVyZ2UucmVuYW1lbGltaXQgNQorJwordGVzdF9yZW5hbWUgNSBvawordGVzdF9yZW5hbWUgNiBmYWlsCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAzMy1tZXJnZS1jcmxmLnNoIGIvdC90NjAzMy1tZXJnZS1jcmxmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc1ZDk2MDIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDMzLW1lcmdlLWNybGYuc2gKQEAgLTAsMCArMSw1MiBAQAorIyEvYmluL3NoCisKK2FwcGVuZF9jciAoKSB7CisJc2VkIC1lICdzLyQvUS8nIHwgdHIgUSAnXDAxNScKK30KKworcmVtb3ZlX2NyICgpIHsKKwl0ciAnXDAxNScgUSB8IHNlZCAtZSAncy9RJC8vJworfQorCit0ZXN0X2Rlc2NyaXB0aW9uPSdtZXJnZSBjb25mbGljdCBpbiBjcmxmIHJlcG8KKworCQliLS0tTQorCSAgICAgICAvICAgLworCWluaXRpYWwtLS1hCisKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisJZWNobyBmb28gfCBhcHBlbmRfY3IgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJJbml0aWFsIiAmJgorCWdpdCB0YWcgaW5pdGlhbCAmJgorCWdpdCBicmFuY2ggc2lkZSAmJgorCWVjaG8gbGluZSBmcm9tIGEgfCBhcHBlbmRfY3IgPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgbGluZSBmcm9tIGEiIGZpbGUgJiYKKwlnaXQgdGFnIGEgJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWVjaG8gbGluZSBmcm9tIGIgfCBhcHBlbmRfY3IgPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgbGluZSBmcm9tIGIiIGZpbGUgJiYKKwlnaXQgdGFnIGIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrICJvdXJzIiBpcyBDUkxGJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJZ2l0IG1lcmdlIHNpZGUgLXMgb3VycyAmJgorCWNhdCBmaWxlIHwgcmVtb3ZlX2NyIHwgYXBwZW5kX2NyID5maWxlLnRlbXAgJiYKKwl0ZXN0X2NtcCBmaWxlIGZpbGUudGVtcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayB0aGF0IGNvbmZsaWN0IGZpbGUgaXMgQ1JMRicgJworCWdpdCByZXNldCAtLWhhcmQgYSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBzaWRlICYmCisJY2F0IGZpbGUgfCByZW1vdmVfY3IgfCBhcHBlbmRfY3IgPmZpbGUudGVtcCAmJgorCXRlc3RfY21wIGZpbGUgZmlsZS50ZW1wCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjEyMC1kZXNjcmliZS5zaCBiL3QvdDYxMjAtZGVzY3JpYmUuc2gKaW5kZXggYzZiZmVmNS4uMmZiNjcyYyAxMDA3NTUKLS0tIGEvdC90NjEyMC1kZXNjcmliZS5zaAorKysgYi90L3Q2MTIwLWRlc2NyaWJlLnNoCkBAIC0xMDgsNyArMTA4LDcgQEAKIEVPRgogY2hlY2tfZGVzY3JpYmUgQS0qIEhFQUQKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dhcm5pbmcgd2FzIGRpc3BsYXllZCBmb3IgUScgJwotCWdpdCBkaWZmIGVyci5leHBlY3QgZXJyLmFjdHVhbAorCXRlc3RfY21wIGVyci5leHBlY3QgZXJyLmFjdHVhbAogJwogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIHRhZyBRIGJhY2sgdG8gQScgJwogCW12IC5naXQvcmVmcy90YWdzL1EgLmdpdC9yZWZzL3RhZ3MvQQpAQCAtMTM5LDQgKzEzOSw2IEBACiAKIGNoZWNrX2Rlc2NyaWJlICJ0ZXN0Mi1saWdodHdlaWdodC0qIiAtLXRhZ3MgLS1tYXRjaD0idGVzdDItKiIKIAorY2hlY2tfZGVzY3JpYmUgInRlc3QyLWxpZ2h0d2VpZ2h0LSoiIC0tbG9uZyAtLXRhZ3MgLS1tYXRjaD0idGVzdDItKiIgSEVBRF4KKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MjAwLWZtdC1tZXJnZS1tc2cuc2ggYi90L3Q2MjAwLWZtdC1tZXJnZS1tc2cuc2gKaW5kZXggNTI2ZDdkMS4uYmM3NDM0OSAxMDA3NTUKLS0tIGEvdC90NjIwMC1mbXQtbWVyZ2UtbXNnLnNoCisrKyBiL3QvdDYyMDAtZm10LW1lcmdlLW1zZy5zaApAQCAtNzksMjAgKzc5LDIwIEBACiAJZ2l0IGZldGNoIC4gbGVmdCAmJgogCiAJZ2l0IGZtdC1tZXJnZS1tc2cgPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgYWN0dWFsIGV4cGVjdGVkCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKLWNhdCA+ZXhwZWN0ZWQgPDxcRU9GCi1NZXJnZSBicmFuY2ggJ2xlZnQnIG9mIC4uL3RyYXNoCitjYXQgPmV4cGVjdGVkIDw8RU9GCitNZXJnZSBicmFuY2ggJ2xlZnQnIG9mIC4uLyR0ZXN0CiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtbXNnIHRlc3QgIzInICcKIAogCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKLQlnaXQgZmV0Y2ggLi4vdHJhc2ggbGVmdCAmJgorCWdpdCBmZXRjaCAuLi8iJHRlc3QiIGxlZnQgJiYKIAogCWdpdCBmbXQtbWVyZ2UtbXNnIDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGFjdHVhbCBleHBlY3RlZAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiBjYXQgPmV4cGVjdGVkIDw8XEVPRgpAQCAtMTA2LDggKzEwNiwyNCBAQAogICBDb21tb24gIzEKIEVPRgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1tc2cgdGVzdCAjMycgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtbXNnIHRlc3QgIzMtMScgJwogCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBtZXJnZS5sb2cKKwlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIG1lcmdlLnN1bW1hcnkKKwlnaXQgY29uZmlnIG1lcmdlLmxvZyB0cnVlICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJc2V0ZGF0ZSAmJgorCWdpdCBmZXRjaCAuIGxlZnQgJiYKKworCWdpdCBmbXQtbWVyZ2UtbXNnIDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1tc2cgdGVzdCAjMy0yJyAnCisKKwlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIG1lcmdlLmxvZworCWdpdCBjb25maWcgLS11bnNldC1hbGwgbWVyZ2Uuc3VtbWFyeQogCWdpdCBjb25maWcgbWVyZ2Uuc3VtbWFyeSB0cnVlICYmCiAKIAlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCkBAIC0xMTUsNyArMTMxLDcgQEAKIAlnaXQgZmV0Y2ggLiBsZWZ0ICYmCiAKIAlnaXQgZm10LW1lcmdlLW1zZyA8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBhY3R1YWwgZXhwZWN0ZWQKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAogY2F0ID5leHBlY3RlZCA8PFxFT0YKQEAgLTEzNiw4ICsxNTIsMjQgQEAKICAgQ29tbW9uICMxCiBFT0YKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtbXNnIHRlc3QgIzQnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLW1zZyB0ZXN0ICM0LTEnICcKIAorCWdpdCBjb25maWcgLS11bnNldC1hbGwgbWVyZ2UubG9nCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBtZXJnZS5zdW1tYXJ5CisJZ2l0IGNvbmZpZyBtZXJnZS5sb2cgdHJ1ZSAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXNldGRhdGUgJiYKKwlnaXQgZmV0Y2ggLiBsZWZ0IHJpZ2h0ICYmCisKKwlnaXQgZm10LW1lcmdlLW1zZyA8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtbXNnIHRlc3QgIzQtMicgJworCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBtZXJnZS5sb2cKKwlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIG1lcmdlLnN1bW1hcnkKIAlnaXQgY29uZmlnIG1lcmdlLnN1bW1hcnkgdHJ1ZSAmJgogCiAJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgpAQCAtMTQ1LDExICsxNzcsMjcgQEAKIAlnaXQgZmV0Y2ggLiBsZWZ0IHJpZ2h0ICYmCiAKIAlnaXQgZm10LW1lcmdlLW1zZyA8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBhY3R1YWwgZXhwZWN0ZWQKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtbXNnIHRlc3QgIzUnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLW1zZyB0ZXN0ICM1LTEnICcKIAorCWdpdCBjb25maWcgLS11bnNldC1hbGwgbWVyZ2UubG9nCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBtZXJnZS5zdW1tYXJ5CisJZ2l0IGNvbmZpZyBtZXJnZS5sb2cgeWVzICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJc2V0ZGF0ZSAmJgorCWdpdCBmZXRjaCAuIGxlZnQgcmlnaHQgJiYKKworCWdpdCBmbXQtbWVyZ2UtbXNnIDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1tc2cgdGVzdCAjNS0yJyAnCisKKwlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIG1lcmdlLmxvZworCWdpdCBjb25maWcgLS11bnNldC1hbGwgbWVyZ2Uuc3VtbWFyeQogCWdpdCBjb25maWcgbWVyZ2Uuc3VtbWFyeSB5ZXMgJiYKIAogCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKQEAgLTE1Nyw3ICsyMDUsNyBAQAogCWdpdCBmZXRjaCAuIGxlZnQgcmlnaHQgJiYKIAogCWdpdCBmbXQtbWVyZ2UtbXNnIDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGFjdHVhbCBleHBlY3RlZAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYzMDAtZm9yLWVhY2gtcmVmLnNoIGIvdC90NjMwMC1mb3ItZWFjaC1yZWYuc2gKaW5kZXggZjQ2ZWM5My4uOTFlYTg1ZCAxMDA3NTUKLS0tIGEvdC90NjMwMC1mb3ItZWFjaC1yZWYuc2gKKysrIGIvdC90NjMwMC1mb3ItZWFjaC1yZWYuc2gKQEAgLTc1LDE0ICs3NSwxNCBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgdW5mb3JtYXR0ZWQgZGF0ZSBmaWVsZHMgb3V0cHV0JyAnCiAJKGdpdCBmb3ItZWFjaC1yZWYgLS1zaGVsbCAtLWZvcm1hdD0iJShyZWZuYW1lKSAlKGNvbW1pdHRlcmRhdGUpICUoYXV0aG9yZGF0ZSkiIHJlZnMvaGVhZHMgJiYKIAlnaXQgZm9yLWVhY2gtcmVmIC0tc2hlbGwgLS1mb3JtYXQ9IiUocmVmbmFtZSkgJSh0YWdnZXJkYXRlKSIgcmVmcy90YWdzKSA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0ZWQgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIGZvcm1hdCAiZGVmYXVsdCIgZm9ybWF0dGVkIGRhdGUgZmllbGRzIG91dHB1dCcgJwogCWY9ZGVmYXVsdCAmJgogCShnaXQgZm9yLWVhY2gtcmVmIC0tc2hlbGwgLS1mb3JtYXQ9IiUocmVmbmFtZSkgJShjb21taXR0ZXJkYXRlOiRmKSAlKGF1dGhvcmRhdGU6JGYpIiByZWZzL2hlYWRzICYmCiAJZ2l0IGZvci1lYWNoLXJlZiAtLXNoZWxsIC0tZm9ybWF0PSIlKHJlZm5hbWUpICUodGFnZ2VyZGF0ZTokZikiIHJlZnMvdGFncykgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiAjIERvbid0IGtub3cgaG93IHRvIGRvIHJlbGF0aXZlIGNoZWNrIGJlY2F1c2UgSSBjYW4ndCBrbm93IHdoZW4gdGhpcyBzY3JpcHQKQEAgLTEwOSw3ICsxMDksNyBAQAogCWY9c2hvcnQgJiYKIAkoZ2l0IGZvci1lYWNoLXJlZiAtLXNoZWxsIC0tZm9ybWF0PSIlKHJlZm5hbWUpICUoY29tbWl0dGVyZGF0ZTokZikgJShhdXRob3JkYXRlOiRmKSIgcmVmcy9oZWFkcyAmJgogCWdpdCBmb3ItZWFjaC1yZWYgLS1zaGVsbCAtLWZvcm1hdD0iJShyZWZuYW1lKSAlKHRhZ2dlcmRhdGU6JGYpIiByZWZzL3RhZ3MpID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3RlZCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAogY2F0ID5leHBlY3RlZCA8PFxFT0YKQEAgLTEyMSw3ICsxMjEsNyBAQAogCWY9bG9jYWwgJiYKIAkoZ2l0IGZvci1lYWNoLXJlZiAtLXNoZWxsIC0tZm9ybWF0PSIlKHJlZm5hbWUpICUoY29tbWl0dGVyZGF0ZTokZikgJShhdXRob3JkYXRlOiRmKSIgcmVmcy9oZWFkcyAmJgogCWdpdCBmb3ItZWFjaC1yZWYgLS1zaGVsbCAtLWZvcm1hdD0iJShyZWZuYW1lKSAlKHRhZ2dlcmRhdGU6JGYpIiByZWZzL3RhZ3MpID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3RlZCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAogY2F0ID5leHBlY3RlZCA8PFxFT0YKQEAgLTEzMyw3ICsxMzMsNyBAQAogCWY9aXNvODYwMSAmJgogCShnaXQgZm9yLWVhY2gtcmVmIC0tc2hlbGwgLS1mb3JtYXQ9IiUocmVmbmFtZSkgJShjb21taXR0ZXJkYXRlOiRmKSAlKGF1dGhvcmRhdGU6JGYpIiByZWZzL2hlYWRzICYmCiAJZ2l0IGZvci1lYWNoLXJlZiAtLXNoZWxsIC0tZm9ybWF0PSIlKHJlZm5hbWUpICUodGFnZ2VyZGF0ZTokZikiIHJlZnMvdGFncykgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiBjYXQgPmV4cGVjdGVkIDw8XEVPRgpAQCAtMTQ1LDcgKzE0NSw3IEBACiAJZj1yZmMyODIyICYmCiAJKGdpdCBmb3ItZWFjaC1yZWYgLS1zaGVsbCAtLWZvcm1hdD0iJShyZWZuYW1lKSAlKGNvbW1pdHRlcmRhdGU6JGYpICUoYXV0aG9yZGF0ZTokZikiIHJlZnMvaGVhZHMgJiYKIAlnaXQgZm9yLWVhY2gtcmVmIC0tc2hlbGwgLS1mb3JtYXQ9IiUocmVmbmFtZSkgJSh0YWdnZXJkYXRlOiRmKSIgcmVmcy90YWdzKSA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0ZWQgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GCkBAIC0xNTUsNyArMTU1LDcgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnVmVyaWZ5IGFzY2VuZGluZyBzb3J0JyAnCiAJZ2l0LWZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShyZWZuYW1lKSIgLS1zb3J0PXJlZm5hbWUgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiAKQEAgLTE2Niw3ICsxNjYsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdWZXJpZnkgZGVzY2VuZGluZyBzb3J0JyAnCiAJZ2l0LWZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShyZWZuYW1lKSIgLS1zb3J0PS1yZWZuYW1lID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3RlZCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAogY2F0ID5leHBlY3RlZCA8PFxFT0YKQEAgLTE3NiwxNyArMTc2LDE3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1F1b3Rpbmcgc3R5bGU6IHNoZWxsJyAnCiAJZ2l0IGZvci1lYWNoLXJlZiAtLXNoZWxsIC0tZm9ybWF0PSIlKHJlZm5hbWUpIiA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0ZWQgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1F1b3Rpbmcgc3R5bGU6IHBlcmwnICcKIAlnaXQgZm9yLWVhY2gtcmVmIC0tcGVybCAtLWZvcm1hdD0iJShyZWZuYW1lKSIgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdRdW90aW5nIHN0eWxlOiBweXRob24nICcKIAlnaXQgZm9yLWVhY2gtcmVmIC0tcHl0aG9uIC0tZm9ybWF0PSIlKHJlZm5hbWUpIiA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0ZWQgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GCkBAIC0xOTYsNyArMTk2LDcgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnUXVvdGluZyBzdHlsZTogdGNsJyAnCiAJZ2l0IGZvci1lYWNoLXJlZiAtLXRjbCAtLWZvcm1hdD0iJShyZWZuYW1lKSIgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiBmb3IgaSBpbiAiLS1wZXJsIC0tc2hlbGwiICItcyAtLXB5dGhvbiIgIi0tcHl0aG9uIC0tdGNsIiAiLS10Y2wgLS1wZXJsIjsgZG8KZGlmZiAtLWdpdCBhL3QvdDcwMDMtZmlsdGVyLWJyYW5jaC5zaCBiL3QvdDcwMDMtZmlsdGVyLWJyYW5jaC5zaAppbmRleCBmMTI2MjA0Li5lMjZmNzI2IDEwMDc1NQotLS0gYS90L3Q3MDAzLWZpbHRlci1icmFuY2guc2gKKysrIGIvdC90NzAwMy1maWx0ZXItYnJhbmNoLnNoCkBAIC0xMTYsNyArMTE2LDcgQEAKIAkJICJnaXQgbHMtZmlsZXMgLXMgfCBzZWQgXCJzLVxcdC0mbmV3c3ViZGlyLy1cIiB8CiAJICAgICAgICAgIEdJVF9JTkRFWF9GSUxFPVwkR0lUX0lOREVYX0ZJTEUubmV3IFwKIAkJCWdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvICYmCi0JCSAgbXYgXCRHSVRfSU5ERVhfRklMRS5uZXcgXCRHSVRfSU5ERVhfRklMRSIgZGlyZWN0b3J5bW92ZWQgJiYKKwkJICBtdiBcIlwkR0lUX0lOREVYX0ZJTEUubmV3XCIgXCJcJEdJVF9JTkRFWF9GSUxFXCIiIGRpcmVjdG9yeW1vdmVkICYmCiAJdGVzdCAteiAiJChnaXQgZGlmZiBIRUFEIGRpcmVjdG9yeW1vdmVkOm5ld3N1YmRpcikiJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdG9wcyB3aGVuIG1zZyBmaWx0ZXIgZmFpbHMnICcKQEAgLTIxMCw0ICsyMTAsMzYgQEAKIAl0ZXN0ICQoZ2l0IHJldi1saXN0IG1hc3RlciB8IHdjIC1sKSA9IDMKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnVGFnIG5hbWUgZmlsdGVyaW5nIHJldGFpbnMgdGFnIG1lc3NhZ2UnICcKKwlnaXQgdGFnIC1tIGF0YWcgVCAmJgorCWdpdCBjYXQtZmlsZSB0YWcgVCA+IGV4cGVjdCAmJgorCWdpdCBmaWx0ZXItYnJhbmNoIC1mIC0tdGFnLW5hbWUtZmlsdGVyIGNhdCAmJgorCWdpdCBjYXQtZmlsZSB0YWcgVCA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworZmF1eF9ncGdfdGFnPSdvYmplY3QgWFhYWFhYCit0eXBlIGNvbW1pdAordGFnIFMKK3RhZ2dlciBUIEEgR2dlciA8dGFnZ2VyQGV4YW1wbGUuY29tPiAxMjA2MDI2MzM5IC0wNTAwCisKK1RoaXMgaXMgYSBmYXV4IGdwZyBzaWduZWQgdGFnLgorLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0KK1ZlcnNpb246IEZhdXhHUEcgdjAuMC4wIChGQVVYL0xpbnV4KQorCitnZHNmb2V3aHh1LzZsMDZmMWt4eXhoS2Raa3JjYmFpT010a0pVQTlJVEFjMW1sYW1oMG9vYXN4a0gxWHdNYllRCithY213WGFXRVQyMEgwR2VBR1ArN3Zvdz0KKz1hZ3BPCistLS0tLUVORCBQR1AgU0lHTkFUVVJFLS0tLS0KKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1RhZyBuYW1lIGZpbHRlcmluZyBzdHJpcHMgZ3BnIHNpZ25hdHVyZScgJworCXNoYTE9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJc2hhMXQ9JChlY2hvICIkZmF1eF9ncGdfdGFnIiB8IHNlZCAtZSBzL1hYWFhYWC8kc2hhMS8gfCBnaXQgbWt0YWcpICYmCisJZ2l0IHVwZGF0ZS1yZWYgInJlZnMvdGFncy9TIiAiJHNoYTF0IiAmJgorCWVjaG8gIiRmYXV4X2dwZ190YWciIHwgc2VkIC1lIHMvWFhYWFhYLyRzaGExLyB8IGhlYWQgLW4gNiA+IGV4cGVjdCAmJgorCWdpdCBmaWx0ZXItYnJhbmNoIC1mIC0tdGFnLW5hbWUtZmlsdGVyIGNhdCAmJgorCWdpdCBjYXQtZmlsZSB0YWcgUyA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MDA0LXRhZy5zaCBiL3QvdDcwMDQtdGFnLnNoCmluZGV4IDFhNzE0MWUuLmFjZGRiZjUgMTAwNzU1Ci0tLSBhL3QvdDcwMDQtdGFnLnNoCisrKyBiL3QvdDcwMDQtdGFnLnNoCkBAIC0xMTYsOSArMTE2LDkgQEAKIEVPRgogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAJJ3RyeWluZyB0byBkZWxldGUgdGFncyB3aXRob3V0IHBhcmFtcyBzaG91bGQgc3VjY2VlZCBhbmQgZG8gbm90aGluZycgJwotCWdpdCB0YWcgLWwgPiBhY3R1YWwgJiYgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLWwgPiBhY3R1YWwgJiYgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLWQgJiYKLQlnaXQgdGFnIC1sID4gYWN0dWFsICYmIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwKKwlnaXQgdGFnIC1sID4gYWN0dWFsICYmIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCkBAIC0xNzMsOSArMTczLDkgQEAKIAlnaXQgdGFnIHYxLjAgJiYKIAlnaXQgdGFnIHQyMTAgJiYKIAlnaXQgdGFnIC1sID4gYWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQgdGFnID4gYWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogY2F0ID5leHBlY3QgPDxFT0YKQEAgLTE4Niw3ICsxODYsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAJJ2xpc3RpbmcgdGFncyB3aXRoIHN1YnN0cmluZyBhcyBwYXR0ZXJuIG11c3QgcHJpbnQgdGhvc2UgbWF0Y2hpbmcnICcKIAlnaXQtdGFnIC1sICIqYSoiID4gYWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogY2F0ID5leHBlY3QgPDxFT0YKQEAgLTE5Niw3ICsxOTYsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAJJ2xpc3RpbmcgdGFncyB3aXRoIGEgc3VmZml4IGFzIHBhdHRlcm4gbXVzdCBwcmludCB0aG9zZSBtYXRjaGluZycgJwogCWdpdC10YWcgLWwgIiouMSIgPiBhY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiBjYXQgPmV4cGVjdCA8PEVPRgpAQCAtMjA2LDcgKzIwNiw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKIAknbGlzdGluZyB0YWdzIHdpdGggYSBwcmVmaXggYXMgcGF0dGVybiBtdXN0IHByaW50IHRob3NlIG1hdGNoaW5nJyAnCiAJZ2l0LXRhZyAtbCAidDIxKiIgPiBhY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiBjYXQgPmV4cGVjdCA8PEVPRgpAQCAtMjE1LDcgKzIxNSw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKIAknbGlzdGluZyB0YWdzIHVzaW5nIGEgbmFtZSBhcyBwYXR0ZXJuIG11c3QgcHJpbnQgdGhhdCBvbmUgbWF0Y2hpbmcnICcKIAlnaXQtdGFnIC1sIGExID4gYWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogY2F0ID5leHBlY3QgPDxFT0YKQEAgLTIyNCw3ICsyMjQsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAJJ2xpc3RpbmcgdGFncyB1c2luZyBhIG5hbWUgYXMgcGF0dGVybiBtdXN0IHByaW50IHRoYXQgb25lIG1hdGNoaW5nJyAnCiAJZ2l0LXRhZyAtbCB2MS4wID4gYWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogY2F0ID5leHBlY3QgPDxFT0YKQEAgLTIzNCwxNCArMjM0LDE0IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKIAknbGlzdGluZyB0YWdzIHdpdGggPyBpbiB0aGUgcGF0dGVybiBzaG91bGQgcHJpbnQgdGhvc2UgbWF0Y2hpbmcnICcKIAlnaXQtdGFnIC1sICJ2MS4/Lj8iID4gYWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogPmV4cGVjdAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAJJ2xpc3RpbmcgdGFncyB1c2luZyB2Liogc2hvdWxkIHByaW50IG5vdGhpbmcgYmVjYXVzZSBub25lIGhhdmUgdi4nICcKIAlnaXQtdGFnIC1sICJ2LioiID4gYWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogY2F0ID5leHBlY3QgPDxFT0YKQEAgLTI1Myw3ICsyNTMsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAJJ2xpc3RpbmcgdGFncyB1c2luZyB2KiBzaG91bGQgcHJpbnQgb25seSB0aG9zZSBoYXZpbmcgdicgJwogCWdpdC10YWcgLWwgInYqIiA+IGFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKICMgY3JlYXRpbmcgYW5kIHZlcmlmeWluZyBsaWdodHdlaWdodCB0YWdzOgpAQCAtMzAyLDcgKzMwMiw3IEBACiAJJ2NyZWF0aW5nIGFuIGFubm90YXRlZCB0YWcgd2l0aCAtbSBtZXNzYWdlIHNob3VsZCBzdWNjZWVkJyAnCiAJZ2l0LXRhZyAtbSAiQSBtZXNzYWdlIiBhbm5vdGF0ZWQtdGFnICYmCiAJZ2V0X3RhZ19tc2cgYW5ub3RhdGVkLXRhZyA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogY2F0ID5tc2dmaWxlIDw8RU9GCkBAIC0zMTUsNyArMzE1LDcgQEAKIAknY3JlYXRpbmcgYW4gYW5ub3RhdGVkIHRhZyB3aXRoIC1GIG1lc3NhZ2VmaWxlIHNob3VsZCBzdWNjZWVkJyAnCiAJZ2l0LXRhZyAtRiBtc2dmaWxlIGZpbGUtYW5ub3RhdGVkLXRhZyAmJgogCWdldF90YWdfbXNnIGZpbGUtYW5ub3RhdGVkLXRhZyA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogY2F0ID5pbnB1dG1zZyA8PEVPRgpAQCAtMzI3LDcgKzMyNyw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGluZyBhbiBhbm5vdGF0ZWQgdGFnIHdpdGggLUYgLSBzaG91bGQgc3VjY2VlZCcgJwogCWdpdC10YWcgLUYgLSBzdGRpbi1hbm5vdGF0ZWQtdGFnIDxpbnB1dG1zZyAmJgogCWdldF90YWdfbXNnIHN0ZGluLWFubm90YXRlZC10YWcgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXApAQCAtMzU4LDcgKzM1OCw3IEBACiAJJ2NyZWF0aW5nIGEgdGFnIHdpdGggYW4gZW1wdHkgLW0gbWVzc2FnZSBzaG91bGQgc3VjY2VlZCcgJwogCWdpdC10YWcgLW0gIiIgZW1wdHktYW5ub3RhdGVkLXRhZyAmJgogCWdldF90YWdfbXNnIGVtcHR5LWFubm90YXRlZC10YWcgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKID5lbXB0eWZpbGUKQEAgLTM2Nyw3ICszNjcsNyBAQAogCSdjcmVhdGluZyBhIHRhZyB3aXRoIGFuIGVtcHR5IC1GIG1lc3NhZ2VmaWxlIHNob3VsZCBzdWNjZWVkJyAnCiAJZ2l0LXRhZyAtRiBlbXB0eWZpbGUgZW1wdHlmaWxlLWFubm90YXRlZC10YWcgJiYKIAlnZXRfdGFnX21zZyBlbXB0eWZpbGUtYW5ub3RhdGVkLXRhZyA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogcHJpbnRmICdcblxuICBcblx0XG5MZWFkaW5nIGJsYW5rIGxpbmVzXG4nID5ibGFua3NmaWxlCkBAIC0zODgsNyArMzg4LDcgQEAKIAknZXh0cmEgYmxhbmtzIGluIHRoZSBtZXNzYWdlIGZvciBhbiBhbm5vdGF0ZWQgdGFnIHNob3VsZCBiZSByZW1vdmVkJyAnCiAJZ2l0LXRhZyAtRiBibGFua3NmaWxlIGJsYW5rcy1hbm5vdGF0ZWQtdGFnICYmCiAJZ2V0X3RhZ19tc2cgYmxhbmtzLWFubm90YXRlZC10YWcgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIGdldF90YWdfaGVhZGVyIGJsYW5rLWFubm90YXRlZC10YWcgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdApAQCAtMzk2LDcgKzM5Niw3IEBACiAJJ2NyZWF0aW5nIGEgdGFnIHdpdGggYmxhbmsgLW0gbWVzc2FnZSB3aXRoIHNwYWNlcyBzaG91bGQgc3VjY2VlZCcgJwogCWdpdC10YWcgLW0gIiAgICAgIiBibGFuay1hbm5vdGF0ZWQtdGFnICYmCiAJZ2V0X3RhZ19tc2cgYmxhbmstYW5ub3RhdGVkLXRhZyA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogZWNobyAnICAgICAnID5ibGFua2ZpbGUKQEAgLTQwNyw3ICs0MDcsNyBAQAogCSdjcmVhdGluZyBhIHRhZyB3aXRoIGJsYW5rIC1GIG1lc3NhZ2VmaWxlIHdpdGggc3BhY2VzIHNob3VsZCBzdWNjZWVkJyAnCiAJZ2l0LXRhZyAtRiBibGFua2ZpbGUgYmxhbmtmaWxlLWFubm90YXRlZC10YWcgJiYKIAlnZXRfdGFnX21zZyBibGFua2ZpbGUtYW5ub3RhdGVkLXRhZyA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogcHJpbnRmICcgICAgICAnID5ibGFua25vbmxmaWxlCkBAIC00MTYsNyArNDE2LDcgQEAKIAknY3JlYXRpbmcgYSB0YWcgd2l0aCAtRiBmaWxlIG9mIHNwYWNlcyBhbmQgbm8gbmV3bGluZSBzaG91bGQgc3VjY2VlZCcgJwogCWdpdC10YWcgLUYgYmxhbmtub25sZmlsZSBibGFua25vbmxmaWxlLWFubm90YXRlZC10YWcgJiYKIAlnZXRfdGFnX21zZyBibGFua25vbmxmaWxlLWFubm90YXRlZC10YWcgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKICMgbWVzc2FnZXMgd2l0aCBjb21tZW50ZWQgbGluZXM6CkBAIC00NTEsNyArNDUxLDcgQEAKIAknY3JlYXRpbmcgYSB0YWcgdXNpbmcgYSAtRiBtZXNzYWdlZmlsZSB3aXRoICNjb21tZW50cyBzaG91bGQgc3VjY2VlZCcgJwogCWdpdC10YWcgLUYgY29tbWVudHNmaWxlIGNvbW1lbnRzLWFubm90YXRlZC10YWcgJiYKIAlnZXRfdGFnX21zZyBjb21tZW50cy1hbm5vdGF0ZWQtdGFnID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiBnZXRfdGFnX2hlYWRlciBjb21tZW50LWFubm90YXRlZC10YWcgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdApAQCAtNDU5LDcgKzQ1OSw3IEBACiAJJ2NyZWF0aW5nIGEgdGFnIHdpdGggYSAjY29tbWVudCBpbiB0aGUgLW0gbWVzc2FnZSBzaG91bGQgc3VjY2VlZCcgJwogCWdpdC10YWcgLW0gIiNjb21tZW50IiBjb21tZW50LWFubm90YXRlZC10YWcgJiYKIAlnZXRfdGFnX21zZyBjb21tZW50LWFubm90YXRlZC10YWcgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIGVjaG8gJyNjb21tZW50JyA+Y29tbWVudGZpbGUKQEAgLTQ3MCw3ICs0NzAsNyBAQAogCSdjcmVhdGluZyBhIHRhZyB3aXRoICNjb21tZW50cyBpbiB0aGUgLUYgbWVzc2FnZWZpbGUgc2hvdWxkIHN1Y2NlZWQnICcKIAlnaXQtdGFnIC1GIGNvbW1lbnRmaWxlIGNvbW1lbnRmaWxlLWFubm90YXRlZC10YWcgJiYKIAlnZXRfdGFnX21zZyBjb21tZW50ZmlsZS1hbm5vdGF0ZWQtdGFnID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiBwcmludGYgJyNjb21tZW50JyA+Y29tbWVudG5vbmxmaWxlCkBAIC00NzksNyArNDc5LDcgQEAKIAknY3JlYXRpbmcgYSB0YWcgd2l0aCBhIGZpbGUgb2YgI2NvbW1lbnQgYW5kIG5vIG5ld2xpbmUgc2hvdWxkIHN1Y2NlZWQnICcKIAlnaXQtdGFnIC1GIGNvbW1lbnRub25sZmlsZSBjb21tZW50bm9ubGZpbGUtYW5ub3RhdGVkLXRhZyAmJgogCWdldF90YWdfbXNnIGNvbW1lbnRub25sZmlsZS1hbm5vdGF0ZWQtdGFnID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiAjIGxpc3RpbmcgbWVzc2FnZXMgZm9yIGFubm90YXRlZCBub24tc2lnbmVkIHRhZ3M6CkBAIC00OTAsMjMgKzQ5MCwyMyBAQAogCiAJZWNobyAidGFnLW9uZS1saW5lIiA+ZXhwZWN0ICYmCiAJZ2l0LXRhZyAtbCB8IGdyZXAgIl50YWctb25lLWxpbmUiID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLW4wIC1sIHwgZ3JlcCAiXnRhZy1vbmUtbGluZSIgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0LXRhZyAtbjAgLWwgdGFnLW9uZS1saW5lID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAJZWNobyAidGFnLW9uZS1saW5lICAgIEEgbXNnIiA+ZXhwZWN0ICYmCiAJZ2l0LXRhZyAtbjEgLWwgfCBncmVwICJedGFnLW9uZS1saW5lIiA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC1uIC1sIHwgZ3JlcCAiXnRhZy1vbmUtbGluZSIgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0LXRhZyAtbjEgLWwgdGFnLW9uZS1saW5lID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLW4yIC1sIHRhZy1vbmUtbGluZSA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC1uOTk5IC1sIHRhZy1vbmUtbGluZSA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCkBAIC01MTUsMjMgKzUxNSwyMyBAQAogCiAJZWNobyAidGFnLXplcm8tbGluZXMiID5leHBlY3QgJiYKIAlnaXQtdGFnIC1sIHwgZ3JlcCAiXnRhZy16ZXJvLWxpbmVzIiA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC1uMCAtbCB8IGdyZXAgIl50YWctemVyby1saW5lcyIgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0LXRhZyAtbjAgLWwgdGFnLXplcm8tbGluZXMgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKIAllY2hvICJ0YWctemVyby1saW5lcyAgIiA+ZXhwZWN0ICYmCiAJZ2l0LXRhZyAtbjEgLWwgfCBncmVwICJedGFnLXplcm8tbGluZXMiID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLW4gLWwgfCBncmVwICJedGFnLXplcm8tbGluZXMiID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLW4xIC1sIHRhZy16ZXJvLWxpbmVzID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLW4yIC1sIHRhZy16ZXJvLWxpbmVzID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLW45OTkgLWwgdGFnLXplcm8tbGluZXMgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIGVjaG8gJ3RhZyBsaW5lIG9uZScgPmFubm90YWdtc2cKQEAgLTU0MywzOSArNTQzLDM5IEBACiAKIAllY2hvICJ0YWctbGluZXMiID5leHBlY3QgJiYKIAlnaXQtdGFnIC1sIHwgZ3JlcCAiXnRhZy1saW5lcyIgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0LXRhZyAtbjAgLWwgfCBncmVwICJedGFnLWxpbmVzIiA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC1uMCAtbCB0YWctbGluZXMgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKIAllY2hvICJ0YWctbGluZXMgICAgICAgdGFnIGxpbmUgb25lIiA+ZXhwZWN0ICYmCiAJZ2l0LXRhZyAtbjEgLWwgfCBncmVwICJedGFnLWxpbmVzIiA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC1uIC1sIHwgZ3JlcCAiXnRhZy1saW5lcyIgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0LXRhZyAtbjEgLWwgdGFnLWxpbmVzID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAJZWNobyAiICAgIHRhZyBsaW5lIHR3byIgPj5leHBlY3QgJiYKIAlnaXQtdGFnIC1uMiAtbCB8IGdyZXAgIl4gKnRhZy5saW5lIiA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC1uMiAtbCB0YWctbGluZXMgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKIAllY2hvICIgICAgdGFnIGxpbmUgdGhyZWUiID4+ZXhwZWN0ICYmCiAJZ2l0LXRhZyAtbjMgLWwgfCBncmVwICJeICp0YWcubGluZSIgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0LXRhZyAtbjMgLWwgdGFnLWxpbmVzID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLW40IC1sIHwgZ3JlcCAiXiAqdGFnLmxpbmUiID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLW40IC1sIHRhZy1saW5lcyA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC1uOTkgLWwgfCBncmVwICJeICp0YWcubGluZSIgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0LXRhZyAtbjk5IC1sIHRhZy1saW5lcyA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogIyBzdWJzZXF1ZW50IHRlc3RzIHJlcXVpcmUgZ3BnOyBjaGVjayBpZiBpdCBpcyBhdmFpbGFibGUKQEAgLTYyNiw3ICs2MjYsOCBAQAogCiBjcCAtUiAuLi90NzAwNCAuL2dwZ2hvbWUKIGNobW9kIDA3MDAgZ3BnaG9tZQotZXhwb3J0IEdOVVBHSE9NRT0iJChwd2QpL2dwZ2hvbWUiCitHTlVQR0hPTUU9IiQocHdkKS9ncGdob21lIgorZXhwb3J0IEdOVVBHSE9NRQogCiBnZXRfdGFnX2hlYWRlciBzaWduZWQtdGFnICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKIGVjaG8gJ0Egc2lnbmVkIHRhZyBtZXNzYWdlJyA+PmV4cGVjdApAQCAtNjM0LDcgKzYzNSw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGluZyBhIHNpZ25lZCB0YWcgd2l0aCAtbSBtZXNzYWdlIHNob3VsZCBzdWNjZWVkJyAnCiAJZ2l0LXRhZyAtcyAtbSAiQSBzaWduZWQgdGFnIG1lc3NhZ2UiIHNpZ25lZC10YWcgJiYKIAlnZXRfdGFnX21zZyBzaWduZWQtdGFnID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiBnZXRfdGFnX2hlYWRlciB1LXNpZ25lZC10YWcgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdApAQCAtNjQ0LDcgKzY0NSw3IEBACiAKIAlnaXQgdGFnIC11IGNvbW1pdHRlckBleGFtcGxlLmNvbSAtbSAiQW5vdGhlciBtZXNzYWdlIiB1LXNpZ25lZC10YWcgJiYKIAlnZXRfdGFnX21zZyB1LXNpZ25lZC10YWcgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAKICcKIApAQCAtNjc0LDcgKzY3NSw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICctdSBpbXBsaWVzIHNpZ25lZCB0YWcnICcKIAlHSVRfRURJVE9SPS4vZmFrZWVkaXRvciBnaXQtdGFnIC11IENEREU0MzBEIGltcGxpZWQtc2lnbiAmJgogCWdldF90YWdfbXNnIGltcGxpZWQtc2lnbiA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogY2F0ID5zaWdtc2dmaWxlIDw8RU9GCkBAIC02ODgsNyArNjg5LDcgQEAKIAknY3JlYXRpbmcgYSBzaWduZWQgdGFnIHdpdGggLUYgbWVzc2FnZWZpbGUgc2hvdWxkIHN1Y2NlZWQnICcKIAlnaXQtdGFnIC1zIC1GIHNpZ21zZ2ZpbGUgZmlsZS1zaWduZWQtdGFnICYmCiAJZ2V0X3RhZ19tc2cgZmlsZS1zaWduZWQtdGFnID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiBjYXQgPnNpZ2lucHV0bXNnIDw8RU9GCkBAIC03MDEsNyArNzAyLDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0aW5nIGEgc2lnbmVkIHRhZyB3aXRoIC1GIC0gc2hvdWxkIHN1Y2NlZWQnICcKIAlnaXQtdGFnIC1zIC1GIC0gc3RkaW4tc2lnbmVkLXRhZyA8c2lnaW5wdXRtc2cgJiYKIAlnZXRfdGFnX21zZyBzdGRpbi1zaWduZWQtdGFnID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiBnZXRfdGFnX2hlYWRlciBpbXBsaWVkLWFubm90YXRlICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKQEAgLTcxMCw3ICs3MTEsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLXMgaW1wbGllcyBhbm5vdGF0ZWQgdGFnJyAnCiAJR0lUX0VESVRPUj0uL2Zha2VlZGl0b3IgZ2l0LXRhZyAtcyBpbXBsaWVkLWFubm90YXRlICYmCiAJZ2V0X3RhZ19tc2cgaW1wbGllZC1hbm5vdGF0ZSA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCkBAIC03NTEsNyArNzUyLDcgQEAKIAknY3JlYXRpbmcgYSBzaWduZWQgdGFnIHdpdGggYW4gZW1wdHkgLW0gbWVzc2FnZSBzaG91bGQgc3VjY2VlZCcgJwogCWdpdC10YWcgLXMgLW0gIiIgZW1wdHktc2lnbmVkLXRhZyAmJgogCWdldF90YWdfbXNnIGVtcHR5LXNpZ25lZC10YWcgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0LXRhZyAtdiBlbXB0eS1zaWduZWQtdGFnCiAnCiAKQEAgLTc2Miw3ICs3NjMsNyBAQAogCSdjcmVhdGluZyBhIHNpZ25lZCB0YWcgd2l0aCBhbiBlbXB0eSAtRiBtZXNzYWdlZmlsZSBzaG91bGQgc3VjY2VlZCcgJwogCWdpdC10YWcgLXMgLUYgc2lnZW1wdHlmaWxlIGVtcHR5ZmlsZS1zaWduZWQtdGFnICYmCiAJZ2V0X3RhZ19tc2cgZW1wdHlmaWxlLXNpZ25lZC10YWcgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0LXRhZyAtdiBlbXB0eWZpbGUtc2lnbmVkLXRhZwogJwogCkBAIC03ODUsNyArNzg2LDcgQEAKIAknZXh0cmEgYmxhbmtzIGluIHRoZSBtZXNzYWdlIGZvciBhIHNpZ25lZCB0YWcgc2hvdWxkIGJlIHJlbW92ZWQnICcKIAlnaXQtdGFnIC1zIC1GIHNpZ2JsYW5rc2ZpbGUgYmxhbmtzLXNpZ25lZC10YWcgJiYKIAlnZXRfdGFnX21zZyBibGFua3Mtc2lnbmVkLXRhZyA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC12IGJsYW5rcy1zaWduZWQtdGFnCiAnCiAKQEAgLTc5NSw3ICs3OTYsNyBAQAogCSdjcmVhdGluZyBhIHNpZ25lZCB0YWcgd2l0aCBhIGJsYW5rIC1tIG1lc3NhZ2Ugc2hvdWxkIHN1Y2NlZWQnICcKIAlnaXQtdGFnIC1zIC1tICIgICAgICIgYmxhbmstc2lnbmVkLXRhZyAmJgogCWdldF90YWdfbXNnIGJsYW5rLXNpZ25lZC10YWcgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0LXRhZyAtdiBibGFuay1zaWduZWQtdGFnCiAnCiAKQEAgLTgwOCw3ICs4MDksNyBAQAogCSdjcmVhdGluZyBhIHNpZ25lZCB0YWcgd2l0aCBibGFuayAtRiBmaWxlIHdpdGggc3BhY2VzIHNob3VsZCBzdWNjZWVkJyAnCiAJZ2l0LXRhZyAtcyAtRiBzaWdibGFua2ZpbGUgYmxhbmtmaWxlLXNpZ25lZC10YWcgJiYKIAlnZXRfdGFnX21zZyBibGFua2ZpbGUtc2lnbmVkLXRhZyA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC12IGJsYW5rZmlsZS1zaWduZWQtdGFnCiAnCiAKQEAgLTgxOSw3ICs4MjAsNyBAQAogCSdjcmVhdGluZyBhIHNpZ25lZCB0YWcgd2l0aCBzcGFjZXMgYW5kIG5vIG5ld2xpbmUgc2hvdWxkIHN1Y2NlZWQnICcKIAlnaXQtdGFnIC1zIC1GIHNpZ2JsYW5rbm9ubGZpbGUgYmxhbmtub25sZmlsZS1zaWduZWQtdGFnICYmCiAJZ2V0X3RhZ19tc2cgYmxhbmtub25sZmlsZS1zaWduZWQtdGFnID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLXYgc2lnbmVkLXRhZwogJwogCkBAIC04NTYsNyArODU3LDcgQEAKIAknY3JlYXRpbmcgYSBzaWduZWQgdGFnIHdpdGggYSAtRiBmaWxlIHdpdGggI2NvbW1lbnRzIHNob3VsZCBzdWNjZWVkJyAnCiAJZ2l0LXRhZyAtcyAtRiBzaWdjb21tZW50c2ZpbGUgY29tbWVudHMtc2lnbmVkLXRhZyAmJgogCWdldF90YWdfbXNnIGNvbW1lbnRzLXNpZ25lZC10YWcgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0LXRhZyAtdiBjb21tZW50cy1zaWduZWQtdGFnCiAnCiAKQEAgLTg2Niw3ICs4NjcsNyBAQAogCSdjcmVhdGluZyBhIHNpZ25lZCB0YWcgd2l0aCAjY29tbWVudGVkIC1tIG1lc3NhZ2Ugc2hvdWxkIHN1Y2NlZWQnICcKIAlnaXQtdGFnIC1zIC1tICIjY29tbWVudCIgY29tbWVudC1zaWduZWQtdGFnICYmCiAJZ2V0X3RhZ19tc2cgY29tbWVudC1zaWduZWQtdGFnID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLXYgY29tbWVudC1zaWduZWQtdGFnCiAnCiAKQEAgLTg3OSw3ICs4ODAsNyBAQAogCSdjcmVhdGluZyBhIHNpZ25lZCB0YWcgd2l0aCAjY29tbWVudGVkIC1GIG1lc3NhZ2VmaWxlIHNob3VsZCBzdWNjZWVkJyAnCiAJZ2l0LXRhZyAtcyAtRiBzaWdjb21tZW50ZmlsZSBjb21tZW50ZmlsZS1zaWduZWQtdGFnICYmCiAJZ2V0X3RhZ19tc2cgY29tbWVudGZpbGUtc2lnbmVkLXRhZyA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC12IGNvbW1lbnRmaWxlLXNpZ25lZC10YWcKICcKIApAQCAtODkwLDcgKzg5MSw3IEBACiAJJ2NyZWF0aW5nIGEgc2lnbmVkIHRhZyB3aXRoIGEgI2NvbW1lbnQgYW5kIG5vIG5ld2xpbmUgc2hvdWxkIHN1Y2NlZWQnICcKIAlnaXQtdGFnIC1zIC1GIHNpZ2NvbW1lbnRub25sZmlsZSBjb21tZW50bm9ubGZpbGUtc2lnbmVkLXRhZyAmJgogCWdldF90YWdfbXNnIGNvbW1lbnRub25sZmlsZS1zaWduZWQtdGFnID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLXYgY29tbWVudG5vbmxmaWxlLXNpZ25lZC10YWcKICcKIApAQCAtOTAyLDIzICs5MDMsMjMgQEAKIAogCWVjaG8gInN0YWctb25lLWxpbmUiID5leHBlY3QgJiYKIAlnaXQtdGFnIC1sIHwgZ3JlcCAiXnN0YWctb25lLWxpbmUiID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLW4wIC1sIHwgZ3JlcCAiXnN0YWctb25lLWxpbmUiID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLW4wIC1sIHN0YWctb25lLWxpbmUgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKIAllY2hvICJzdGFnLW9uZS1saW5lICAgQSBtZXNzYWdlIGxpbmUgc2lnbmVkIiA+ZXhwZWN0ICYmCiAJZ2l0LXRhZyAtbjEgLWwgfCBncmVwICJec3RhZy1vbmUtbGluZSIgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0LXRhZyAtbiAtbCB8IGdyZXAgIl5zdGFnLW9uZS1saW5lIiA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC1uMSAtbCBzdGFnLW9uZS1saW5lID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLW4yIC1sIHN0YWctb25lLWxpbmUgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0LXRhZyAtbjk5OSAtbCBzdGFnLW9uZS1saW5lID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKQEAgLTkyNywyMyArOTI4LDIzIEBACiAKIAllY2hvICJzdGFnLXplcm8tbGluZXMiID5leHBlY3QgJiYKIAlnaXQtdGFnIC1sIHwgZ3JlcCAiXnN0YWctemVyby1saW5lcyIgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0LXRhZyAtbjAgLWwgfCBncmVwICJec3RhZy16ZXJvLWxpbmVzIiA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC1uMCAtbCBzdGFnLXplcm8tbGluZXMgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKIAllY2hvICJzdGFnLXplcm8tbGluZXMgIiA+ZXhwZWN0ICYmCiAJZ2l0LXRhZyAtbjEgLWwgfCBncmVwICJec3RhZy16ZXJvLWxpbmVzIiA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC1uIC1sIHwgZ3JlcCAiXnN0YWctemVyby1saW5lcyIgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0LXRhZyAtbjEgLWwgc3RhZy16ZXJvLWxpbmVzID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLW4yIC1sIHN0YWctemVyby1saW5lcyA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC1uOTk5IC1sIHN0YWctemVyby1saW5lcyA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogZWNobyAnc3RhZyBsaW5lIG9uZScgPnNpZ3RhZ21zZwpAQCAtOTU1LDM5ICs5NTYsMzkgQEAKIAogCWVjaG8gInN0YWctbGluZXMiID5leHBlY3QgJiYKIAlnaXQtdGFnIC1sIHwgZ3JlcCAiXnN0YWctbGluZXMiID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLW4wIC1sIHwgZ3JlcCAiXnN0YWctbGluZXMiID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLW4wIC1sIHN0YWctbGluZXMgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAKIAllY2hvICJzdGFnLWxpbmVzICAgICAgc3RhZyBsaW5lIG9uZSIgPmV4cGVjdCAmJgogCWdpdC10YWcgLW4xIC1sIHwgZ3JlcCAiXnN0YWctbGluZXMiID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLW4gLWwgfCBncmVwICJec3RhZy1saW5lcyIgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0LXRhZyAtbjEgLWwgc3RhZy1saW5lcyA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAogCWVjaG8gIiAgICBzdGFnIGxpbmUgdHdvIiA+PmV4cGVjdCAmJgogCWdpdC10YWcgLW4yIC1sIHwgZ3JlcCAiXiAqc3RhZy5saW5lIiA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC1uMiAtbCBzdGFnLWxpbmVzID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCiAJZWNobyAiICAgIHN0YWcgbGluZSB0aHJlZSIgPj5leHBlY3QgJiYKIAlnaXQtdGFnIC1uMyAtbCB8IGdyZXAgIl4gKnN0YWcubGluZSIgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0LXRhZyAtbjMgLWwgc3RhZy1saW5lcyA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC1uNCAtbCB8IGdyZXAgIl4gKnN0YWcubGluZSIgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0LXRhZyAtbjQgLWwgc3RhZy1saW5lcyA+YWN0dWFsICYmCi0JZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQtdGFnIC1uOTkgLWwgfCBncmVwICJeICpzdGFnLmxpbmUiID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdC10YWcgLW45OSAtbCBzdGFnLWxpbmVzID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiAjIHRhZ3MgcG9pbnRpbmcgdG8gb2JqZWN0cyBkaWZmZXJlbnQgZnJvbSBjb21taXRzOgpAQCAtMTAwMyw3ICsxMDA0LDcgQEAKIAknY3JlYXRpbmcgYSBzaWduZWQgdGFnIHBvaW50aW5nIHRvIGEgdHJlZSBzaG91bGQgc3VjY2VlZCcgJwogCWdpdC10YWcgLXMgLW0gIkEgbWVzc2FnZSBmb3IgYSB0cmVlIiB0cmVlLXNpZ25lZC10YWcgSEVBRF57dHJlZX0gJiYKIAlnZXRfdGFnX21zZyB0cmVlLXNpZ25lZC10YWcgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIGdldF90YWdfaGVhZGVyIGJsb2Itc2lnbmVkLXRhZyAkYmxvYiBibG9iICR0aW1lID5leHBlY3QKQEAgLTEwMTMsNyArMTAxNCw3IEBACiAJJ2NyZWF0aW5nIGEgc2lnbmVkIHRhZyBwb2ludGluZyB0byBhIGJsb2Igc2hvdWxkIHN1Y2NlZWQnICcKIAlnaXQtdGFnIC1zIC1tICJBIG1lc3NhZ2UgZm9yIGEgYmxvYiIgYmxvYi1zaWduZWQtdGFnIEhFQUQ6Zm9vICYmCiAJZ2V0X3RhZ19tc2cgYmxvYi1zaWduZWQtdGFnID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiBnZXRfdGFnX2hlYWRlciB0YWctc2lnbmVkLXRhZyAkdGFnIHRhZyAkdGltZSA+ZXhwZWN0CkBAIC0xMDIzLDcgKzEwMjQsNyBAQAogCSdjcmVhdGluZyBhIHNpZ25lZCB0YWcgcG9pbnRpbmcgdG8gYW5vdGhlciB0YWcgc2hvdWxkIHN1Y2NlZWQnICcKIAlnaXQtdGFnIC1zIC1tICJBIG1lc3NhZ2UgZm9yIGFub3RoZXIgdGFnIiB0YWctc2lnbmVkLXRhZyBzaWduZWQtdGFnICYmCiAJZ2V0X3RhZ19tc2cgdGFnLXNpZ25lZC10YWcgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKICMgdHJ5IHRvIHNpZ24gd2l0aCBiYWQgdXNlci5zaWduaW5na2V5CkBAIC0xMDYzLDcgKzEwNjQsMjcgQEAKIAlnaXQgdGFnIC1hIC1tICJBbiBhbm5vdGF0aW9uIHRvIGJlIHJldXNlZCIgcmV1c2UgJiYKIAlHSVRfRURJVE9SPXRydWUgZ2l0IHRhZyAtZiAtYSByZXVzZSAmJgogCWdldF90YWdfbXNnIHJldXNlID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlbmFtZSBmb3IgdGhlIG1lc3NhZ2UgaXMgcmVsYXRpdmUgdG8gY3dkJyAnCisJbWtkaXIgc3ViZGlyICYmCisJZWNobyAiVGFnIG1lc3NhZ2UgaW4gdG9wIGRpcmVjdG9yeSIgPm1zZ2ZpbGUtNSAmJgorCWVjaG8gIlRhZyBtZXNzYWdlIGluIHN1YiBkaXJlY3RvcnkiID5zdWJkaXIvbXNnZmlsZS01ICYmCisJKAorCQljZCBzdWJkaXIgJiYKKwkJZ2l0IHRhZyAtYSAtRiBtc2dmaWxlLTUgdGFnLWZyb20tc3ViZGlyCisJKSAmJgorCWdpdCBjYXQtZmlsZSB0YWcgdGFnLWZyb20tc3ViZGlyIHwgZ3JlcCAiaW4gc3ViIGRpcmVjdG9yeSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZW5hbWUgZm9yIHRoZSBtZXNzYWdlIGlzIHJlbGF0aXZlIHRvIGN3ZCcgJworCWVjaG8gIlRhZyBtZXNzYWdlIGluIHN1YiBkaXJlY3RvcnkiID5zdWJkaXIvbXNnZmlsZS02ICYmCisJKAorCQljZCBzdWJkaXIgJiYKKwkJZ2l0IHRhZyAtYSAtRiBtc2dmaWxlLTYgdGFnLWZyb20tc3ViZGlyLTIKKwkpICYmCisJZ2l0IGNhdC1maWxlIHRhZyB0YWctZnJvbS1zdWJkaXItMiB8IGdyZXAgImluIHN1YiBkaXJlY3RvcnkiCiAnCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzAxMC1zZXR1cC5zaCBiL3QvdDcwMTAtc2V0dXAuc2gKaW5kZXggMDJjZjdjNS4uZDhhN2M3OSAxMDA3NTUKLS0tIGEvdC90NzAxMC1zZXR1cC5zaAorKysgYi90L3Q3MDEwLXNldHVwLnNoCkBAIC0xMjIsNyArMTIyLDcgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIHVzaW5nIGFic29sdXRlIHBhdGggbmFtZXMnICcKIAllY2hvIGJiID4+YS9iL2MvZCAmJgotCWdpdCBjb21taXQgLW0gImJiIiAkKHB3ZCkvYS9iL2MvZCAmJgorCWdpdCBjb21taXQgLW0gImJiIiAiJChwd2QpL2EvYi9jL2QiICYmCiAKIAlnaXQgbG9nIGEvYi9jL2QgPmYxLnR4dCAmJgogCWdpdCBsb2cgIiQocHdkKS9hL2IvYy9kIiA+ZjIudHh0ICYmCmRpZmYgLS1naXQgYS90L3Q3MTAyLXJlc2V0LnNoIGIvdC90NzEwMi1yZXNldC5zaAppbmRleCBlNWM5ZjMwLi45NmQxNTA4IDEwMDc1NQotLS0gYS90L3Q3MTAyLXJlc2V0LnNoCisrKyBiL3QvdDcxMDItcmVzZXQuc2gKQEAgLTM0LDEzICszNCwxMyBAQAogCiBjaGVja19jaGFuZ2VzICgpIHsKIAl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gIiQxIiAmJgotCWdpdCBkaWZmIHwgZ2l0IGRpZmYgLmRpZmZfZXhwZWN0IC0gJiYKLQlnaXQgZGlmZiAtLWNhY2hlZCB8IGdpdCBkaWZmIC5jYWNoZWRfZXhwZWN0IC0gJiYKKwlnaXQgZGlmZiB8IHRlc3RfY21wIC5kaWZmX2V4cGVjdCAtICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgfCB0ZXN0X2NtcCAuY2FjaGVkX2V4cGVjdCAtICYmCiAJZm9yIEZJTEUgaW4gKgogCWRvCiAJCWVjaG8gJEZJTEUnOicKIAkJY2F0ICRGSUxFIHx8IHJldHVybgotCWRvbmUgfCBnaXQgZGlmZiAuY2F0X2V4cGVjdCAtCisJZG9uZSB8IHRlc3RfY21wIC5jYXRfZXhwZWN0IC0KIH0KIAogPi5kaWZmX2V4cGVjdApAQCAtMzkwLDkgKzM5MCw5IEBACiAJZ2l0IGFkZCBmaWxlMSBmaWxlMyBmaWxlNCAmJgogCSEgZ2l0IHJlc2V0IEhFQUQgLS0gZmlsZTEgZmlsZTIgZmlsZTMgJiYKIAlnaXQgZGlmZiA+IG91dHB1dCAmJgotCWdpdCBkaWZmIG91dHB1dCBleHBlY3QgJiYKKwl0ZXN0X2NtcCBvdXRwdXQgZXhwZWN0ICYmCiAJZ2l0IGRpZmYgLS1jYWNoZWQgPiBvdXRwdXQgJiYKLQlnaXQgZGlmZiBvdXRwdXQgY2FjaGVkX2V4cGVjdAorCXRlc3RfY21wIG91dHB1dCBjYWNoZWRfZXhwZWN0CiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgcmVzZXR0aW5nIHRoZSBpbmRleCBhdCBnaXZlIHBhdGhzJyAnCkBAIC00MjUsNyArNDI1LDU0IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW1peGVkIHJlZnJlc2hlcyB0aGUgaW5kZXgnICcKIAllY2hvIDEyMyA+PiBmaWxlMiAmJgogCWdpdCByZXNldCAtLW1peGVkIEhFQUQgPiBvdXRwdXQgJiYKLQlnaXQgZGlmZiAtLWV4aXQtY29kZSBleHBlY3Qgb3V0cHV0CisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXNhbWJpZ3VhdGlvbiAoMSknICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwk+c2Vjb25kZmlsZSAmJgorCWdpdCBhZGQgc2Vjb25kZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCBzZWNvbmRmaWxlICYmCisJdGVzdCAteiAiJChnaXQgZGlmZiAtLWNhY2hlZCAtLW5hbWUtb25seSkiICYmCisJdGVzdCAtZiBzZWNvbmRmaWxlICYmCisJdGVzdCAhIC1zIHNlY29uZGZpbGUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXNhbWJpZ3VhdGlvbiAoMiknICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwk+c2Vjb25kZmlsZSAmJgorCWdpdCBhZGQgc2Vjb25kZmlsZSAmJgorCXJtIC1mIHNlY29uZGZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgc2Vjb25kZmlsZSAmJgorCXRlc3QgLW4gIiQoZ2l0IGRpZmYgLS1jYWNoZWQgLS1uYW1lLW9ubHkgLS0gc2Vjb25kZmlsZSkiICYmCisJdGVzdCAhIC1mIHNlY29uZGZpbGUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXNhbWJpZ3VhdGlvbiAoMyknICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwk+c2Vjb25kZmlsZSAmJgorCWdpdCBhZGQgc2Vjb25kZmlsZSAmJgorCXJtIC1mIHNlY29uZGZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgSEVBRCBzZWNvbmRmaWxlICYmCisJdGVzdCAteiAiJChnaXQgZGlmZiAtLWNhY2hlZCAtLW5hbWUtb25seSkiICYmCisJdGVzdCAhIC1mIHNlY29uZGZpbGUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXNhbWJpZ3VhdGlvbiAoNCknICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwk+c2Vjb25kZmlsZSAmJgorCWdpdCBhZGQgc2Vjb25kZmlsZSAmJgorCXJtIC1mIHNlY29uZGZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS0gc2Vjb25kZmlsZSAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYgLS1jYWNoZWQgLS1uYW1lLW9ubHkpIiAmJgorCXRlc3QgISAtZiBzZWNvbmRmaWxlCiAnCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzMwMC1jbGVhbi5zaCBiL3QvdDczMDAtY2xlYW4uc2gKaW5kZXggYTUwNDkyZi4uYmQ3NzIzOSAxMDA3NTUKLS0tIGEvdC90NzMwMC1jbGVhbi5zaAorKysgYi90L3Q3MzAwLWNsZWFuLnNoCkBAIC0xMTIsNyArMTEyLDcgQEAKIAl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCiAJd291bGRfY2xlYW49JCgKIAkJY2QgZG9jcyAmJgotCQlnaXQgY2xlYW4gLW4gJChwd2QpLy4uL3NyYyB8CisJCWdpdCBjbGVhbiAtbiAiJChwd2QpLy4uL3NyYyIgfAogCQlzZWQgLW4gLWUgInN8XldvdWxkIHJlbW92ZSB8fHAiCiAJKSAmJgogCXRlc3QgIiR3b3VsZF9jbGVhbiIgPSAuLi9zcmMvcGFydDMuYyB8fCB7CmRpZmYgLS1naXQgYS90L3Q3NDAwLXN1Ym1vZHVsZS1iYXNpYy5zaCBiL3QvdDc0MDAtc3VibW9kdWxlLWJhc2ljLnNoCmluZGV4IDJlZjg1YTguLjZjN2I5MDIgMTAwNzU1Ci0tLSBhL3QvdDc0MDAtc3VibW9kdWxlLWJhc2ljLnNoCisrKyBiL3QvdDc0MDAtc3VibW9kdWxlLWJhc2ljLnNoCkBAIC0xOTYsNCArMTk2LDE3IEBACiAJdGVzdCAteiAiJEQiCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSAtLWluaXQnICcKKworCW12IGluaXQgaW5pdDIgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5leGFtcGxlLnVybCAiJChwd2QpL2luaXQyIiAmJgorCWdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuZXhhbXBsZQorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIGluaXQgPiB1cGRhdGUub3V0ICYmCisJZ3JlcCAibm90IGluaXRpYWxpemVkIiB1cGRhdGUub3V0ICYmCisJdGVzdCAhIC1kIGluaXQvLmdpdCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCBpbml0ICYmCisJdGVzdCAtZCBpbml0Ly5naXQKKworJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc0MDEtc3VibW9kdWxlLXN1bW1hcnkuc2ggYi90L3Q3NDAxLXN1Ym1vZHVsZS1zdW1tYXJ5LnNoCmluZGV4IGI5YTIyMTkuLmJmMTJkYmQgMTAwNzU1Ci0tLSBhL3QvdDc0MDEtc3VibW9kdWxlLXN1bW1hcnkuc2gKKysrIGIvdC90NzQwMS1zdWJtb2R1bGUtc3VtbWFyeS5zaApAQCAtMTkyLDQgKzE5MiwxNyBAQAogRU9GCiAiCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZm9yLXN0YXR1cycgIgorICAgIGdpdCBzdWJtb2R1bGUgc3VtbWFyeSAtLWZvci1zdGF0dXMgSEVBRF4gPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGFjdHVhbCAtIDw8RU9GCisjIE1vZGlmaWVkIHN1Ym1vZHVsZXM6CisjCisjICogc20xICRoZWFkNi4uLjAwMDAwMDA6CisjCisjICogc20yIDAwMDAwMDAuLi4kaGVhZDcgKDIpOgorIyAgID4gQWRkIGZvbzkKKyMKK0VPRgorIgorCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc0MDItc3VibW9kdWxlLXJlYmFzZS5zaCBiL3QvdDc0MDItc3VibW9kdWxlLXJlYmFzZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41YmVjYjNlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzQwMi1zdWJtb2R1bGUtcmViYXNlLnNoCkBAIC0wLDAgKzEsOTIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggSm9oYW5uZXMgU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHJlYmFzaW5nIGFuZCBzdGFzaGluZyB3aXRoIGRpcnR5IHN1Ym1vZHVsZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCWVjaG8gZmlsZSA+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgY2xvbmUgLiBzdWJtb2R1bGUgJiYKKwlnaXQgYWRkIHN1Ym1vZHVsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gc3VibW9kdWxlICYmCisJZWNobyBzZWNvbmQgbGluZSA+PiBmaWxlICYmCisJKGNkIHN1Ym1vZHVsZSAmJiBnaXQgcHVsbCkgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGZpbGUtYW5kLXN1Ym1vZHVsZSAtYQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSB3aXRoIGEgZGlydHkgc3VibW9kdWxlJyAnCisKKwkoY2Qgc3VibW9kdWxlICYmCisJIGVjaG8gM3JkIGxpbmUgPj4gZmlsZSAmJgorCSB0ZXN0X3RpY2sgJiYKKwkgZ2l0IGNvbW1pdCAtbSBmb3JrIC1hKSAmJgorCWVjaG8gdW5yZWxhdGVkID4+IGZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gdW5yZWxhdGVkIGZpbGUyICYmCisJZWNobyBvdGhlciBsaW5lID4+IGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHVwZGF0ZSBmaWxlICYmCisJQ1VSUkVOVD0kKGNkIHN1Ym1vZHVsZSAmJiBnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJRVhQRUNURUQ9JChnaXQgcmV2LXBhcnNlIEhFQUR+MjpzdWJtb2R1bGUpICYmCisJR0lUX1RSQUNFPTEgZ2l0IHJlYmFzZSAtLW9udG8gSEVBRH4yIEhFQUReICYmCisJU1RPUkVEPSQoZ2l0IHJldi1wYXJzZSBIRUFEOnN1Ym1vZHVsZSkgJiYKKwl0ZXN0ICRFWFBFQ1RFRCA9ICRTVE9SRUQgJiYKKwl0ZXN0ICRDVVJSRU5UID0gJChjZCBzdWJtb2R1bGUgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKQorCisnCisKK2NhdCA+IGZha2UtZWRpdG9yLnNoIDw8IFxFT0YKKyMhL2Jpbi9zaAorZWNobyAkRURJVE9SX1RFWFQKK0VPRgorY2htb2QgYSt4IGZha2UtZWRpdG9yLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludGVyYWN0aXZlIHJlYmFzZSB3aXRoIGEgZGlydHkgc3VibW9kdWxlJyAnCisKKwl0ZXN0IHN1Ym1vZHVsZSA9ICQoZ2l0IGRpZmYgLS1uYW1lLW9ubHkpICYmCisJSEVBRD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlHSVRfRURJVE9SPSJcIiQocHdkKS9mYWtlLWVkaXRvci5zaFwiIiBFRElUT1JfVEVYVD0icGljayAkSEVBRCIgXAorCQlnaXQgcmViYXNlIC1pIEhFQUReICYmCisJdGVzdCBzdWJtb2R1bGUgPSAkKGdpdCBkaWZmIC0tbmFtZS1vbmx5KQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSB3aXRoIGRpcnR5IGZpbGUgYW5kIHN1Ym1vZHVsZSBmYWlscycgJworCisJZWNobyB5ZXQgYW5vdGhlciBsaW5lID4+IGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIG5leHQgZmlsZSAmJgorCWVjaG8gcmV3cml0ZSA+IGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHJld3JpdGUgZmlsZSAmJgorCWVjaG8gZGlydHkgPiBmaWxlICYmCisJISBnaXQgcmViYXNlIC0tb250byBIRUFEfjIgSEVBRF4KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCB3aXRoIGEgZGlydHkgc3VibW9kdWxlJyAnCisKKwllY2hvIG5ldyA+IGZpbGUgJiYKKwlDVVJSRU5UPSQoY2Qgc3VibW9kdWxlICYmIGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgc3Rhc2ggJiYKKwl0ZXN0IG5ldyAhPSAkKGNhdCBmaWxlKSAmJgorCXRlc3Qgc3VibW9kdWxlID0gJChnaXQgZGlmZiAtLW5hbWUtb25seSkgJiYKKwl0ZXN0ICRDVVJSRU5UID0gJChjZCBzdWJtb2R1bGUgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCBzdGFzaCBhcHBseSAmJgorCXRlc3QgbmV3ID0gJChjYXQgZmlsZSkgJiYKKwl0ZXN0ICRDVVJSRU5UID0gJChjZCBzdWJtb2R1bGUgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKQorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzUwMC1jb21taXQuc2ggYi90L3Q3NTAwLWNvbW1pdC5zaAppbmRleCBiYWVkNmNlLi44MjMyNTZhIDEwMDc1NQotLS0gYS90L3Q3NTAwLWNvbW1pdC5zaAorKysgYi90L3Q3NTAwLWNvbW1pdC5zaApAQCAtMTM4LDQgKzEzOCwzMyBAQAogCWRpZmYgZXhwZWN0IG91dHB1dAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgbWVzc2FnZSBmcm9tIGZpbGUgKDEpJyAnCisJbWtkaXIgc3ViZGlyICYmCisJZWNobyAiTG9nIGluIHRvcCBkaXJlY3RvcnkiID5sb2cgJiYKKwllY2hvICJMb2cgaW4gc3ViIGRpcmVjdG9yeSIgPnN1YmRpci9sb2cgJiYKKwkoCisJCWNkIHN1YmRpciAmJgorCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLUYgbG9nCisJKSAmJgorCWNvbW1pdF9tc2dfaXMgIkxvZyBpbiBzdWIgZGlyZWN0b3J5IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgbWVzc2FnZSBmcm9tIGZpbGUgKDIpJyAnCisJcm0gLWYgbG9nICYmCisJZWNobyAiTG9nIGluIHN1YiBkaXJlY3RvcnkiID5zdWJkaXIvbG9nICYmCisJKAorCQljZCBzdWJkaXIgJiYKKwkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1GIGxvZworCSkgJiYKKwljb21taXRfbXNnX2lzICJMb2cgaW4gc3ViIGRpcmVjdG9yeSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IG1lc3NhZ2UgZnJvbSBzdGRpbicgJworCSgKKwkJY2Qgc3ViZGlyICYmCisJCWVjaG8gIkxvZyB3aXRoIGZvbyB3b3JkIiB8IGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtRiAtCisJKSAmJgorCWNvbW1pdF9tc2dfaXMgIkxvZyB3aXRoIGZvbyB3b3JkIgorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc1MDEtY29tbWl0LnNoIGIvdC90NzUwMS1jb21taXQuc2gKaW5kZXggYzAyODhmMy4uZDMzNzBmZiAxMDA3NTUKLS0tIGEvdC90NzUwMS1jb21taXQuc2gKKysrIGIvdC90NzUwMS1jb21taXQuc2gKQEAgLTQxLDcgKzQxLDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogCSJ1c2luZyBwYXRocyB3aXRoIC0taW50ZXJhY3RpdmUiIFwKIAkiZWNobyBib25nLW8tYm9uZyA+ZmlsZSAmJgotCSEgZWNobyA3IHwgZ2l0LWNvbW1pdCAtbSBmb28gLS1pbnRlcmFjdGl2ZSBmaWxlIgorCSEgKGVjaG8gNyB8IGdpdC1jb21taXQgLW0gZm9vIC0taW50ZXJhY3RpdmUgZmlsZSkiCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogCSJ1c2luZyBpbnZhbGlkIGNvbW1pdCB3aXRoIC1DIiBcCkBAIC03OSw4ICs3OSw4IEBACiAKIGNhdCA+ZWRpdG9yIDw8XEVPRgogIyEvYmluL3NoCi1zZWQgLWUgInMvYSBmaWxlL2FuIGFtZW5kIGNvbW1pdC9nIiA8ICQxID4gJDEtCi1tdiAkMS0gJDEKK3NlZCAtZSAicy9hIGZpbGUvYW4gYW1lbmQgY29tbWl0L2ciIDwgIiQxIiA+ICIkMS0iCittdiAiJDEtIiAiJDEiCiBFT0YKIGNobW9kIDc1NSBlZGl0b3IKIApAQCAtOTksOCArOTksOCBAQAogCiBjYXQgPmVkaXRvciA8PFxFT0YKICMhL2Jpbi9zaAotc2VkIC1lICJzL2FtZW5kL29sZGVyL2ciICA8ICQxID4gJDEtCi1tdiAkMS0gJDEKK3NlZCAtZSAicy9hbWVuZC9vbGRlci9nIiAgPCAiJDEiID4gIiQxLSIKK212ICIkMS0iICIkMSIKIEVPRgogY2htb2QgNzU1IGVkaXRvcgogCmRpZmYgLS1naXQgYS90L3Q3NTAyLWNvbW1pdC5zaCBiL3QvdDc1MDItY29tbWl0LnNoCmluZGV4IDI4NGM5NDEuLmMyNWVmZjkgMTAwNzU1Ci0tLSBhL3QvdDc1MDItY29tbWl0LnNoCisrKyBiL3QvdDc1MDItY29tbWl0LnNoCkBAIC0xNTQsNiArMTU0LDM4IEBACiAKICcKIAorZWNobyAiIworIyBBdXRob3I6ICAgICRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPgorIyIgPj4gZXhwZWN0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dGhvciBkaWZmZXJlbnQgZnJvbSBjb21taXR0ZXInICcKKworCWVjaG8gPj5uZWdhdGl2ZSAmJgorCWdpdCBjb21taXQgLWUgLW0gInNhbXBsZSIKKwloZWFkIC1uIDcgLmdpdC9DT01NSVRfRURJVE1TRyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCittdiBleHBlY3QgZXhwZWN0LnRtcAorc2VkICckZCcgPCBleHBlY3QudG1wID4gZXhwZWN0CitybSAtZiBleHBlY3QudG1wCitlY2hvICIjIENvbW1pdHRlcjoKKyMiID4+IGV4cGVjdAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXR0ZXIgaXMgYXV0b21hdGljJyAnCisKKwllY2hvID4+bmVnYXRpdmUgJiYKKwkoCisJCXVuc2V0IEdJVF9DT01NSVRURVJfRU1BSUwKKwkJdW5zZXQgR0lUX0NPTU1JVFRFUl9OQU1FCisJCSMgbXVzdCBmYWlsIGJlY2F1c2UgdGhlcmUgaXMgbm8gY2hhbmdlCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLWUgLW0gInNhbXBsZSIKKwkpICYmCisJaGVhZCAtbiA4IC5naXQvQ09NTUlUX0VESVRNU0cgfAlcCisJc2VkICJzL14jIENvbW1pdHRlcjogLiovIyBDb21taXR0ZXI6LyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwogcHdkPWBwd2RgCiBjYXQgPj4gLmdpdC9GQUtFX0VESVRPUiA8PCBFT0YKICMhIC9iaW4vc2gKQEAgLTE2NCwyMyArMTk2LDU2IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCBmaXJlIGVkaXRvciBpbiB0aGUgcHJlc2VuY2Ugb2YgY29uZmxpY3RzJyAnCiAKLQlnaXQgY2xlYW4KLQllY2hvIGY+ZwotCWdpdCBhZGQgZwotCWdpdCBjb21taXQgLW15ZXMKLQlnaXQgYnJhbmNoIHNlY29uZAotCWVjaG8gbWFzdGVyPmcKLQllY2hvIGc+aAotCWdpdCBhZGQgZyBoCi0JZ2l0IGNvbW1pdCAtbW1hc3RlcgotCWdpdCBjaGVja291dCBzZWNvbmQKLQllY2hvIHNlY29uZD5nCi0JZ2l0IGFkZCBnCi0JZ2l0IGNvbW1pdCAtbXNlY29uZAotCWdpdCBjaGVycnktcGljayAtbiBtYXN0ZXIKLQllY2hvICJlZGl0b3Igbm90IHN0YXJ0ZWQiID4gLmdpdC9yZXN1bHQKLQlHSVRfRURJVE9SPWBwd2RgLy5naXQvRkFLRV9FRElUT1IgZ2l0IGNvbW1pdCAmJiBleGl0IDEgICMgc2hvdWxkIGZhaWwKLQl0ZXN0ICJgY2F0IC5naXQvcmVzdWx0YCIgPSAiZWRpdG9yIG5vdCBzdGFydGVkIgorCWdpdCBjbGVhbiAtZiAmJgorCWVjaG8gZiA+ZyAmJgorCWdpdCBhZGQgZyAmJgorCWdpdCBjb21taXQgLW0gImFkZCBnIiAmJgorCWdpdCBicmFuY2ggc2Vjb25kICYmCisJZWNobyBtYXN0ZXIgPmcgJiYKKwllY2hvIGcgPmggJiYKKwlnaXQgYWRkIGcgaCAmJgorCWdpdCBjb21taXQgLW0gIm1vZGlmeSBnIGFuZCBhZGQgaCIgJiYKKwlnaXQgY2hlY2tvdXQgc2Vjb25kICYmCisJZWNobyBzZWNvbmQgPmcgJiYKKwlnaXQgYWRkIGcgJiYKKwlnaXQgY29tbWl0IC1tIHNlY29uZCAmJgorCSMgTXVzdCBmYWlsIGR1ZSB0byBjb25mbGljdAorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtbiBtYXN0ZXIgJiYKKwllY2hvICJlZGl0b3Igbm90IHN0YXJ0ZWQiID4uZ2l0L3Jlc3VsdCAmJgorCSgKKwkJR0lUX0VESVRPUj0iJChwd2QpLy5naXQvRkFLRV9FRElUT1IiICYmCisJCWV4cG9ydCBHSVRfRURJVE9SICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQKKwkpICYmCisJdGVzdCAiJChjYXQgLmdpdC9yZXN1bHQpIiA9ICJlZGl0b3Igbm90IHN0YXJ0ZWQiCisnCisKK3B3ZD1gcHdkYAorY2F0ID4uZ2l0L0ZBS0VfRURJVE9SIDw8RU9GCisjISAkU0hFTExfUEFUSAorIyBraWxsIC1URVJNIGNvbW1hbmQgYWRkZWQgYmVsb3cuCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYSBTSUdURVJNIHNob3VsZCBicmVhayBsb2NrcycgJworCWVjaG8gPj5uZWdhdGl2ZSAmJgorCSIkU0hFTExfUEFUSCIgLWMgJ1wnJworCSAgZWNobyBraWxsIC1URVJNICQkID4+IC5naXQvRkFLRV9FRElUT1IKKwkgIEdJVF9FRElUT1I9LmdpdC9GQUtFX0VESVRPUiBleGVjIGdpdCBjb21taXQgLWEnXCcnICYmIGV4aXQgMSAgIyBzaG91bGQgZmFpbAorCSEgdGVzdCAtZiAuZ2l0L2luZGV4LmxvY2sKKycKKworcm0gLWYgLmdpdC9NRVJHRV9NU0cgLmdpdC9DT01NSVRfRURJVE1TRworZ2l0IHJlc2V0IC1xIC0taGFyZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdIYW5kIGNvbW1pdHRpbmcgb2YgYSByZWR1bmRhbnQgbWVyZ2UgcmVtb3ZlcyBkdXBzJyAnCisKKwlnaXQgcmV2LXBhcnNlIHNlY29uZCBtYXN0ZXIgPmV4cGVjdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBzZWNvbmQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciBnICYmCisJRURJVE9SPTogZ2l0IGNvbW1pdCAtYSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbiAtZSAicy9ecGFyZW50IC8vcCIgLWUgIi9eJC9xIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCiAnCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzUwMi1zdGF0dXMuc2ggYi90L3Q3NTAyLXN0YXR1cy5zaAppbmRleCBjZDA4NTE2Li44MGE0MzhkIDEwMDc1NQotLS0gYS90L3Q3NTAyLXN0YXR1cy5zaAorKysgYi90L3Q3NTAyLXN0YXR1cy5zaApAQCAtNjMsNyArNjMsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzICgyKScgJwogCiAJZ2l0IHN0YXR1cyA+IG91dHB1dCAmJgotCWdpdCBkaWZmIGV4cGVjdCBvdXRwdXQKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CiAKICcKIApAQCAtOTMsNyArOTMsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggcmVsYXRpdmUgcGF0aHMnICcKIAogCShjZCBkaXIxICYmIGdpdCBzdGF0dXMpID4gb3V0cHV0ICYmCi0JZ2l0IGRpZmYgZXhwZWN0IG91dHB1dAorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKIAogJwogCkBAIC0xMjQsNyArMTI0LDcgQEAKIAogCWdpdCBjb25maWcgc3RhdHVzLnJlbGF0aXZlUGF0aHMgZmFsc2UKIAkoY2QgZGlyMSAmJiBnaXQgc3RhdHVzKSA+IG91dHB1dCAmJgotCWdpdCBkaWZmIGV4cGVjdCBvdXRwdXQKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CiAKICcKIApAQCAtMTQ5LDQgKzE0OSwxMzggQEAKIAl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN0YXR1cyBzdWJtb2R1bGUgc3VtbWFyeScgJworCXRlc3RfY3JlYXRlX3JlcG8gc20gJiYgKAorCQljZCBzbSAmJgorCQk+Zm9vICYmCisJCWdpdCBhZGQgZm9vICYmCisJCWdpdCBjb21taXQgLW0gIkFkZCBmb28iCisJKSAmJgorCWdpdCBhZGQgc20KKycKKworY2F0ID5leHBlY3QgPDxFT0YKKyMgT24gYnJhbmNoIG1hc3RlcgorIyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyMgICAodXNlICJnaXQgcmVzZXQgSEVBRCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisjCisjCW5ldyBmaWxlOiAgIGRpcjIvYWRkZWQKKyMJbmV3IGZpbGU6ICAgc20KKyMKKyMgQ2hhbmdlZCBidXQgbm90IHVwZGF0ZWQ6CisjICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorIworIwltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCisjCisjIFVudHJhY2tlZCBmaWxlczoKKyMgICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorIworIwlkaXIxL3VudHJhY2tlZAorIwlkaXIyL21vZGlmaWVkCisjCWRpcjIvdW50cmFja2VkCisjCWV4cGVjdAorIwlvdXRwdXQKKyMJdW50cmFja2VkCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBzdWJtb2R1bGUgc3VtbWFyeSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0JyAnCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitoZWFkPSQoY2Qgc20gJiYgZ2l0IHJldi1wYXJzZSAtLXNob3J0PTcgLS12ZXJpZnkgSEVBRCkKKworY2F0ID5leHBlY3QgPDxFT0YKKyMgT24gYnJhbmNoIG1hc3RlcgorIyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyMgICAodXNlICJnaXQgcmVzZXQgSEVBRCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisjCisjCW5ldyBmaWxlOiAgIGRpcjIvYWRkZWQKKyMJbmV3IGZpbGU6ICAgc20KKyMKKyMgQ2hhbmdlZCBidXQgbm90IHVwZGF0ZWQ6CisjICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorIworIwltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCisjCisjIE1vZGlmaWVkIHN1Ym1vZHVsZXM6CisjCisjICogc20gMDAwMDAwMC4uLiRoZWFkICgxKToKKyMgICA+IEFkZCBmb28KKyMKKyMgVW50cmFja2VkIGZpbGVzOgorIyAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisjCisjCWRpcjEvdW50cmFja2VkCisjCWRpcjIvbW9kaWZpZWQKKyMJZGlyMi91bnRyYWNrZWQKKyMJZXhwZWN0CisjCW91dHB1dAorIwl1bnRyYWNrZWQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHN1Ym1vZHVsZSBzdW1tYXJ5JyAnCisJZ2l0IGNvbmZpZyBzdGF0dXMuc3VibW9kdWxlc3VtbWFyeSAxMCAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKworCitjYXQgPmV4cGVjdCA8PEVPRgorIyBPbiBicmFuY2ggbWFzdGVyCisjIENoYW5nZWQgYnV0IG5vdCB1cGRhdGVkOgorIyAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyMKKyMJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAorIworIyBVbnRyYWNrZWQgZmlsZXM6CisjICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyMKKyMJZGlyMS91bnRyYWNrZWQKKyMJZGlyMi9tb2RpZmllZAorIwlkaXIyL3VudHJhY2tlZAorIwlleHBlY3QKKyMJb3V0cHV0CisjCXVudHJhY2tlZAorbm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSAiZ2l0IGFkZCIgYW5kL29yICJnaXQgY29tbWl0IC1hIikKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHN1Ym1vZHVsZSBzdW1tYXJ5IChjbGVhbiBzdWJtb2R1bGUpJyAnCisJZ2l0IGNvbW1pdCAtbSAiY29tbWl0IHN1Ym1vZHVsZSIgJiYKKwlnaXQgY29uZmlnIHN0YXR1cy5zdWJtb2R1bGVzdW1tYXJ5IDEwICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorIyBPbiBicmFuY2ggbWFzdGVyCisjIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorIyAgICh1c2UgImdpdCByZXNldCBIRUFEXjEgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorIworIwluZXcgZmlsZTogICBkaXIyL2FkZGVkCisjCW5ldyBmaWxlOiAgIHNtCisjCisjIENoYW5nZWQgYnV0IG5vdCB1cGRhdGVkOgorIyAgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyMKKyMJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAorIworIyBNb2RpZmllZCBzdWJtb2R1bGVzOgorIworIyAqIHNtIDAwMDAwMDAuLi4kaGVhZCAoMSk6CisjICAgPiBBZGQgZm9vCisjCisjIFVudHJhY2tlZCBmaWxlczoKKyMgICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorIworIwlkaXIxL3VudHJhY2tlZAorIwlkaXIyL21vZGlmaWVkCisjCWRpcjIvdW50cmFja2VkCisjCWV4cGVjdAorIwlvdXRwdXQKKyMJdW50cmFja2VkCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBzdWJtb2R1bGUgc3VtbWFyeSAoLS1hbWVuZCknICcKKwlnaXQgY29uZmlnIHN0YXR1cy5zdWJtb2R1bGVzdW1tYXJ5IDEwICYmCisJZ2l0IHN0YXR1cyAtLWFtZW5kID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzUwNC1jb21taXQtbXNnLWhvb2suc2ggYi90L3Q3NTA0LWNvbW1pdC1tc2ctaG9vay5zaAppbmRleCBlZmYzNmFhLi44ODU3N2FmIDEwMDc1NQotLS0gYS90L3Q3NTA0LWNvbW1pdC1tc2ctaG9vay5zaAorKysgYi90L3Q3NTA0LWNvbW1pdC1tc2ctaG9vay5zaApAQCAtMTksNiArMTksOSBAQAogZXhpdCAwCiBFT0YKIGNobW9kICt4IGZha2UtZWRpdG9yCisKKyMjIE5vdCB1c2luZyB0ZXN0X3NldF9lZGl0b3IgaGVyZSBzbyB3ZSBjYW4gZWFzaWx5IGVuc3VyZSB0aGUgZWRpdG9yIHZhcmlhYmxlCisjIyBpcyBvbmx5IHNldCBmb3IgdGhlIGVkaXRvciB0ZXN0cwogRkFLRV9FRElUT1I9IiQocHdkKS9mYWtlLWVkaXRvciIKIGV4cG9ydCBGQUtFX0VESVRPUgogCkBAIC0yNyw3ICszMCw3IEBACiAJZWNobyAibW9yZSBmb28iID4+IGZpbGUgJiYKIAlnaXQgYWRkIGZpbGUgJiYKIAllY2hvICJtb3JlIGZvbyIgPiBGQUtFX01TRyAmJgotCUdJVF9FRElUT1I9IiRGQUtFX0VESVRPUiIgZ2l0IGNvbW1pdAorCUdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0CiAKICcKIApAQCAtNDQsNyArNDcsNyBAQAogCWVjaG8gIm1vcmUgYmFyIiA+IGZpbGUgJiYKIAlnaXQgYWRkIGZpbGUgJiYKIAllY2hvICJtb3JlIGJhciIgPiBGQUtFX01TRyAmJgotCUdJVF9FRElUT1I9IiRGQUtFX0VESVRPUiIgZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeQorCUdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0IC0tbm8tdmVyaWZ5CiAKICcKIApAQCAtNzEsNyArNzQsNyBAQAogCWVjaG8gIm1vcmUgbW9yZSIgPj4gZmlsZSAmJgogCWdpdCBhZGQgZmlsZSAmJgogCWVjaG8gIm1vcmUgbW9yZSIgPiBGQUtFX01TRyAmJgotCUdJVF9FRElUT1I9IiRGQUtFX0VESVRPUiIgZ2l0IGNvbW1pdAorCUdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0CiAKICcKIApAQCAtODgsNyArOTEsNyBAQAogCWVjaG8gImV2ZW4gbW9yZSBtb3JlIiA+PiBmaWxlICYmCiAJZ2l0IGFkZCBmaWxlICYmCiAJZWNobyAiZXZlbiBtb3JlIG1vcmUiID4gRkFLRV9NU0cgJiYKLQlHSVRfRURJVE9SPSIkRkFLRV9FRElUT1IiIGdpdCBjb21taXQgLS1uby12ZXJpZnkKKwlHSVRfRURJVE9SPSJcIlwkRkFLRV9FRElUT1JcIiIgZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeQogCiAnCiAKQEAgLTExMSw3ICsxMTQsNyBAQAogCWVjaG8gIm1vcmUgYW5vdGhlciIgPj4gZmlsZSAmJgogCWdpdCBhZGQgZmlsZSAmJgogCWVjaG8gIm1vcmUgYW5vdGhlciIgPiBGQUtFX01TRyAmJgotCSEgKEdJVF9FRElUT1I9IiRGQUtFX0VESVRPUiIgZ2l0IGNvbW1pdCkKKwkhIChHSVRfRURJVE9SPSJcIlwkRkFLRV9FRElUT1JcIiIgZ2l0IGNvbW1pdCkKIAogJwogCkBAIC0xMjgsNyArMTMxLDcgQEAKIAllY2hvICJtb3JlIHN0dWZmIiA+PiBmaWxlICYmCiAJZ2l0IGFkZCBmaWxlICYmCiAJZWNobyAibW9yZSBzdHVmZiIgPiBGQUtFX01TRyAmJgotCUdJVF9FRElUT1I9IiRGQUtFX0VESVRPUiIgZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeQorCUdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0IC0tbm8tdmVyaWZ5CiAKICcKIApAQCAtMTQ2LDcgKzE0OSw3IEBACiAJZWNobyAiY29udGVudCBhZ2FpbiIgPj4gZmlsZSAmJgogCWdpdCBhZGQgZmlsZSAmJgogCWVjaG8gImNvbnRlbnQgYWdhaW4iID4gRkFLRV9NU0cgJiYKLQlHSVRfRURJVE9SPSIkRkFLRV9FRElUT1IiIGdpdCBjb21taXQgLW0gImNvbnRlbnQgYWdhaW4iCisJR0lUX0VESVRPUj0iXCJcJEZBS0VfRURJVE9SXCIiIGdpdCBjb21taXQgLW0gImNvbnRlbnQgYWdhaW4iCiAKICcKIApAQCAtMTYzLDcgKzE2Niw3IEBACiAJZWNobyAiZXZlbiBtb3JlIGNvbnRlbnQiID4+IGZpbGUgJiYKIAlnaXQgYWRkIGZpbGUgJiYKIAllY2hvICJldmVuIG1vcmUgY29udGVudCIgPiBGQUtFX01TRyAmJgotCUdJVF9FRElUT1I9IiRGQUtFX0VESVRPUiIgZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeQorCUdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0IC0tbm8tdmVyaWZ5CiAKICcKIApAQCAtMTkzLDcgKzE5Niw3IEBACiAJZWNobyAiYWRkaXRpb25hbCBjb250ZW50IiA+PiBmaWxlICYmCiAJZ2l0IGFkZCBmaWxlICYmCiAJZWNobyAiYWRkaXRpb25hbCBjb250ZW50IiA+IEZBS0VfTVNHICYmCi0JR0lUX0VESVRPUj0iJEZBS0VfRURJVE9SIiBnaXQgY29tbWl0ICYmCisJR0lUX0VESVRPUj0iXCJcJEZBS0VfRURJVE9SXCIiIGdpdCBjb21taXQgJiYKIAljb21taXRfbXNnX2lzICJuZXcgbWVzc2FnZSIKIAogJwpAQCAtMjEyLDcgKzIxNSw3IEBACiAJZWNobyAibW9yZSBwbHVzIiA+PiBmaWxlICYmCiAJZ2l0IGFkZCBmaWxlICYmCiAJZWNobyAibW9yZSBwbHVzIiA+IEZBS0VfTVNHICYmCi0JR0lUX0VESVRPUj0iJEZBS0VfRURJVE9SIiBnaXQgY29tbWl0IC0tbm8tdmVyaWZ5ICYmCisJR0lUX0VESVRPUj0iXCJcJEZBS0VfRURJVE9SXCIiIGdpdCBjb21taXQgLS1uby12ZXJpZnkgJiYKIAljb21taXRfbXNnX2lzICJtb3JlIHBsdXMiCiAKICcKZGlmZiAtLWdpdCBhL3QvdDc1MDUtcHJlcGFyZS1jb21taXQtbXNnLWhvb2suc2ggYi90L3Q3NTA1LXByZXBhcmUtY29tbWl0LW1zZy1ob29rLnNoCmluZGV4IDgwMmFhNjIuLmNkNmM3YzggMTAwNzU1Ci0tLSBhL3QvdDc1MDUtcHJlcGFyZS1jb21taXQtbXNnLWhvb2suc2gKKysrIGIvdC90NzUwNS1wcmVwYXJlLWNvbW1pdC1tc2ctaG9vay5zaApAQCAtMTgsNiArMTgsOSBAQAogZXhpdCAwCiBFT0YKIGNobW9kICt4IGZha2UtZWRpdG9yCisKKyMjIE5vdCB1c2luZyB0ZXN0X3NldF9lZGl0b3IgaGVyZSBzbyB3ZSBjYW4gZWFzaWx5IGVuc3VyZSB0aGUgZWRpdG9yIHZhcmlhYmxlCisjIyBpcyBvbmx5IHNldCBmb3IgdGhlIGVkaXRvciB0ZXN0cwogRkFLRV9FRElUT1I9IiQocHdkKS9mYWtlLWVkaXRvciIKIGV4cG9ydCBGQUtFX0VESVRPUgogCkBAIC01OCw3ICs2MSw3IEBACiAKIAllY2hvICJtb3JlIiA+PiBmaWxlICYmCiAJZ2l0IGFkZCBmaWxlICYmCi0JR0lUX0VESVRPUj0iJEZBS0VfRURJVE9SIiBnaXQgY29tbWl0IC1lIC1tICJtb3JlIG1vcmUiICYmCisJR0lUX0VESVRPUj0iXCJcJEZBS0VfRURJVE9SXCIiIGdpdCBjb21taXQgLWUgLW0gIm1vcmUgbW9yZSIgJiYKIAl0ZXN0ICJgZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JXNgIiA9IG1lc3NhZ2UKIAogJwpAQCAtODUsNyArODgsNyBAQAogCiAJZWNobyAibW9yZSIgPj4gZmlsZSAmJgogCWdpdCBhZGQgZmlsZSAmJgotCShlY2hvIG1vcmUgbW9yZSB8IEdJVF9FRElUT1I9IiRGQUtFX0VESVRPUiIgZ2l0IGNvbW1pdCAtZSAtRiAtKSAmJgorCShlY2hvIG1vcmUgbW9yZSB8IEdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0IC1lIC1GIC0pICYmCiAJdGVzdCAiYGdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVzYCIgPSBtZXNzYWdlCiAKICcKQEAgLTEwNCw3ICsxMDcsNyBAQAogCiAJZWNobyAibW9yZSBtb3JlIiA+PiBmaWxlICYmCiAJZ2l0IGFkZCBmaWxlICYmCi0JR0lUX0VESVRPUj0iJEZBS0VfRURJVE9SIiBnaXQgY29tbWl0ICYmCisJR0lUX0VESVRPUj0iXCJcJEZBS0VfRURJVE9SXCIiIGdpdCBjb21taXQgJiYKIAl0ZXN0ICJgZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JXNgIiA9IGRlZmF1bHQKIAogJwpAQCAtMTE0LDcgKzExNyw3IEBACiAJaGVhZD1gZ2l0IHJldi1wYXJzZSBIRUFEYCAmJgogCWVjaG8gIm1vcmUiID4+IGZpbGUgJiYKIAlnaXQgYWRkIGZpbGUgJiYKLQlHSVRfRURJVE9SPSIkRkFLRV9FRElUT1IiIGdpdCBjb21taXQgLS1hbWVuZCAmJgorCUdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0IC0tYW1lbmQgJiYKIAl0ZXN0ICJgZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JXNgIiA9ICIkaGVhZCIKIAogJwpAQCAtMTI0LDcgKzEyNyw3IEBACiAJaGVhZD1gZ2l0IHJldi1wYXJzZSBIRUFEYCAmJgogCWVjaG8gIm1vcmUiID4+IGZpbGUgJiYKIAlnaXQgYWRkIGZpbGUgJiYKLQlHSVRfRURJVE9SPSIkRkFLRV9FRElUT1IiIGdpdCBjb21taXQgLWMgJGhlYWQgJiYKKwlHSVRfRURJVE9SPSJcIlwkRkFLRV9FRElUT1JcIiIgZ2l0IGNvbW1pdCAtYyAkaGVhZCAmJgogCXRlc3QgImBnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolc2AiID0gIiRoZWFkIgogCiAnCkBAIC0xMzksNyArMTQyLDcgQEAKIAloZWFkPWBnaXQgcmV2LXBhcnNlIEhFQURgICYmCiAJZWNobyAibW9yZSIgPj4gZmlsZSAmJgogCWdpdCBhZGQgZmlsZSAmJgotCSEgR0lUX0VESVRPUj0iJEZBS0VfRURJVE9SIiBnaXQgY29tbWl0IC1jICRoZWFkCisJISBHSVRfRURJVE9SPSJcIlwkRkFLRV9FRElUT1JcIiIgZ2l0IGNvbW1pdCAtYyAkaGVhZAogCiAnCiAKQEAgLTE0OCw3ICsxNTEsNyBAQAogCWhlYWQ9YGdpdCByZXYtcGFyc2UgSEVBRGAgJiYKIAllY2hvICJtb3JlIiA+PiBmaWxlICYmCiAJZ2l0IGFkZCBmaWxlICYmCi0JISBHSVRfRURJVE9SPSIkRkFLRV9FRElUT1IiIGdpdCBjb21taXQgLS1uby12ZXJpZnkgLWMgJGhlYWQKKwkhIEdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0IC0tbm8tdmVyaWZ5IC1jICRoZWFkCiAKICcKIApkaWZmIC0tZ2l0IGEvdC90NzUwNi1zdGF0dXMtc3VibW9kdWxlLnNoIGIvdC90NzUwNi1zdGF0dXMtc3VibW9kdWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE3NTEzMGMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTA2LXN0YXR1cy1zdWJtb2R1bGUuc2gKQEAgLTAsMCArMSwzOCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdC1zdGF0dXMgZm9yIHN1Ym1vZHVsZScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jcmVhdGVfcmVwbyBzdWIKKwljZCBzdWIgJiYKKwk6ID5iYXIgJiYKKwlnaXQgYWRkIGJhciAmJgorCWdpdCBjb21taXQgLW0gIiBBZGQgYmFyIiAmJgorCWNkIC4uICYmCisJZ2l0IGFkZCBzdWIgJiYKKwlnaXQgY29tbWl0IC1tICJBZGQgc3VibW9kdWxlIHN1YiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIGNsZWFuJyAnCisJZ2l0IHN0YXR1cyB8CisJZ3JlcCAibm90aGluZyB0byBjb21taXQiCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLWEgY2xlYW4nICcKKwlnaXQgc3RhdHVzIC1hIHwKKwlncmVwICJub3RoaW5nIHRvIGNvbW1pdCIKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIHN1Ym1vZHVsZSBjb250ZW50cycgJworCXJtIC1yZiBzdWIvKiBzdWIvLmdpdAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIGNsZWFuIChlbXB0eSBzdWJtb2R1bGUgZGlyKScgJworCWdpdCBzdGF0dXMgfAorCWdyZXAgIm5vdGhpbmcgdG8gY29tbWl0IgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC1hIGNsZWFuIChlbXB0eSBzdWJtb2R1bGUgZGlyKScgJworCWdpdCBzdGF0dXMgLWEgfAorCWdyZXAgIm5vdGhpbmcgdG8gY29tbWl0IgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc2MDAtbWVyZ2Uuc2ggYi90L3Q3NjAwLW1lcmdlLnNoCmluZGV4IDU2ODY5YWMuLmRhZjQ1YjcgMTAwNzU1Ci0tLSBhL3QvdDc2MDAtbWVyZ2Uuc2gKKysrIGIvdC90NzYwMC1tZXJnZS5zaApAQCAtMTA0LDcgKzEwNCwxMSBAQAogCWdpdCBsb2cgLS1uby1tZXJnZXMgXkhFQUQgYzIgPj5zcXVhc2guMS01ICYmCiAJZWNobyAiU3F1YXNoZWQgY29tbWl0IG9mIHRoZSBmb2xsb3dpbmc6IiA+c3F1YXNoLjEtNS05ICYmCiAJZWNobyA+PnNxdWFzaC4xLTUtOSAmJgotCWdpdCBsb2cgLS1uby1tZXJnZXMgXkhFQUQgYzIgYzMgPj5zcXVhc2guMS01LTkKKwlnaXQgbG9nIC0tbm8tbWVyZ2VzIF5IRUFEIGMyIGMzID4+c3F1YXNoLjEtNS05ICYmCisJZWNobyA+IG1zZy5ub2xvZyAmJgorCWVjaG8gIiogY29tbWl0ICdjMyc6IiA+bXNnLmxvZyAmJgorCWVjaG8gIiAgY29tbWl0IDMiID4+bXNnLmxvZyAmJgorCWVjaG8gPj5tc2cubG9nCiB9CiAKIHZlcmlmeV9kaWZmKCkgewpAQCAtMjE4LDM2ICsyMjIsMTIgQEAKIHRlc3RfZGVidWcgJ2dpdGsgLS1hbGwnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgb3B0aW9uIHBhcnNpbmcnICcKLQlpZiBnaXQgbWVyZ2UgLSQgYzEKLQl0aGVuCi0JCWVjaG8gIltPT1BTXSAtJCBhY2NlcHRlZCIKLQkJZmFsc2UKLQlmaSAmJgotCWlmIGdpdCBtZXJnZSAtLW5vLXN1Y2ggYzEKLQl0aGVuCi0JCWVjaG8gIltPT1BTXSAtLW5vLXN1Y2ggYWNjZXB0ZWQiCi0JCWZhbHNlCi0JZmkgJiYKLQlpZiBnaXQgbWVyZ2UgLXMgZm9vYmFyIGMxCi0JdGhlbgotCQllY2hvICJbT09QU10gLXMgZm9vYmFyIGFjY2VwdGVkIgotCQlmYWxzZQotCWZpICYmCi0JaWYgZ2l0IG1lcmdlIC1zPWZvb2JhciBjMQotCXRoZW4KLQkJZWNobyAiW09PUFNdIC1zPWZvb2JhciBhY2NlcHRlZCIKLQkJZmFsc2UKLQlmaSAmJgotCWlmIGdpdCBtZXJnZSAtbQotCXRoZW4KLQkJZWNobyAiW09PUFNdIG1pc3NpbmcgY29tbWl0IG1zZyBhY2NlcHRlZCIKLQkJZmFsc2UKLQlmaSAmJgotCWlmIGdpdCBtZXJnZQotCXRoZW4KLQkJZWNobyAiW09PUFNdIG1pc3NpbmcgY29tbWl0IHJlZmVyZW5jZXMgYWNjZXB0ZWQiCi0JCWZhbHNlCi0JZmkKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLSQgYzEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1uby1zdWNoIGMxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIGZvb2JhciBjMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcz1mb29iYXIgYzEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLW0gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzAgd2l0aCBjMScgJwpAQCAtMzY0LDcgKzM0NCw3IEBACiAKIHRlc3RfZGVidWcgJ2dpdGsgLS1hbGwnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJyaWRlIGNvbmZpZyBvcHRpb24gLW4nICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJyaWRlIGNvbmZpZyBvcHRpb24gLW4gd2l0aCAtLXN1bW1hcnknICcKIAlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCiAJZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlb3B0aW9ucyAiLW4iICYmCiAJdGVzdF90aWNrICYmCkBAIC0zNzMsMTUgKzM1MywzMCBAQAogCXZlcmlmeV9wYXJlbnRzICRjMSAkYzIgJiYKIAlpZiAhIGdyZXAgIl4gZmlsZSB8ICAqMiArLSQiIGRpZmZzdGF0LnR4dAogCXRoZW4KLQkJZWNobyAiW09PUFNdIGRpZmZzdGF0IHdhcyBub3QgZ2VuZXJhdGVkIgorCQllY2hvICJbT09QU10gZGlmZnN0YXQgd2FzIG5vdCBnZW5lcmF0ZWQgd2l0aCAtLXN1bW1hcnkiCisJCWZhbHNlCisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcnJpZGUgY29uZmlnIG9wdGlvbiAtbiB3aXRoIC0tc3RhdCcgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2VvcHRpb25zICItbiIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgLS1zdGF0IGMyID5kaWZmc3RhdC50eHQgJiYKKwl2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMS01IG1zZy4xLTUgJiYKKwl2ZXJpZnlfcGFyZW50cyAkYzEgJGMyICYmCisJaWYgISBncmVwICJeIGZpbGUgfCAgKjIgKy0kIiBkaWZmc3RhdC50eHQKKwl0aGVuCisJCWVjaG8gIltPT1BTXSBkaWZmc3RhdCB3YXMgbm90IGdlbmVyYXRlZCB3aXRoIC0tc3RhdCIKKwkJZmFsc2UKIAlmaQogJwogCiB0ZXN0X2RlYnVnICdnaXRrIC0tYWxsJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVycmlkZSBjb25maWcgb3B0aW9uIC0tc3VtbWFyeScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcnJpZGUgY29uZmlnIG9wdGlvbiAtLXN0YXQnICcKIAlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCi0JZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlb3B0aW9ucyAiLS1zdW1tYXJ5IiAmJgorCWdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZW9wdGlvbnMgIi0tc3RhdCIgJiYKIAl0ZXN0X3RpY2sgJiYKIAlnaXQgbWVyZ2UgLW4gYzIgPmRpZmZzdGF0LnR4dCAmJgogCXZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xLTUgbXNnLjEtNSAmJgpAQCAtNDQxLDYgKzQzNiwxNiBAQAogCXZlcmlmeV9oZWFkICRjMQogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBsb2cgbWVzc2FnZScgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwlnaXQgbWVyZ2UgLS1uby1sb2cgYzIgJiYKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6JWIgSEVBRCA+bXNnLmFjdCAmJgorCXZlcmlmeV9kaWZmIG1zZy5ub2xvZyBtc2cuYWN0ICJbT09QU10gYmFkIG1lcmdlIGxvZyBtZXNzYWdlIiAmJgorCWdpdCBtZXJnZSAtLWxvZyBjMyAmJgorCWdpdCBzaG93IC1zIC0tcHJldHR5PWZvcm1hdDolYiBIRUFEID5tc2cuYWN0ICYmCisJdmVyaWZ5X2RpZmYgbXNnLmxvZyBtc2cuYWN0ICJbT09QU10gYmFkIG1lcmdlIGxvZyBtZXNzYWdlIgorJworCiB0ZXN0X2RlYnVnICdnaXRrIC0tYWxsJwogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc2MTAtbWVyZ2V0b29sLnNoIGIvdC90NzYxMC1tZXJnZXRvb2wuc2gKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvdC90NzcwMS1yZXBhY2stdW5wYWNrLXVucmVhY2hhYmxlLnNoIGIvdC90NzcwMS1yZXBhY2stdW5wYWNrLXVucmVhY2hhYmxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZhNTIxMWYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NzAxLXJlcGFjay11bnBhY2stdW5yZWFjaGFibGUuc2gKQEAgLTAsMCArMSw0NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdC1yZXBhY2sgd29ya3MgY29ycmVjdGx5JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLUEgb3B0aW9uIGxlYXZlcyB1bnJlYWNoYWJsZSBvYmplY3RzIHVucGFja2VkJyAnCisJZWNobyBjb250ZW50ID4gZmlsZTEgJiYKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWxfY29tbWl0ICYmCisJIyBjcmVhdGUgYSB0cmFuc2llbnQgYnJhbmNoIHdpdGggdW5pcXVlIGNvbnRlbnQKKwlnaXQgY2hlY2tvdXQgLWIgdHJhbnNpZW50X2JyYW5jaCAmJgorCWVjaG8gbW9yZSBjb250ZW50ID4+IGZpbGUxICYmCisJIyByZWNvcmQgdGhlIG9iamVjdHMgY3JlYXRlZCBpbiB0aGUgZGF0YWJhc2UgZm9yIGZpbGUsIGNvbW1pdCwgdHJlZQorCWZzaGExPSQoZ2l0IGhhc2gtb2JqZWN0IGZpbGUxKSAmJgorCWdpdCBjb21taXQgLWEgLW0gbW9yZV9jb250ZW50ICYmCisJY3NoYTE9JChnaXQgcmV2LXBhcnNlIEhFQURee2NvbW1pdH0pICYmCisJdHNoYTE9JChnaXQgcmV2LXBhcnNlIEhFQURee3RyZWV9KSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwllY2hvIGV2ZW4gbW9yZSBjb250ZW50ID4+IGZpbGUxICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBldmVuX21vcmVfY29udGVudCAmJgorCSMgZGVsZXRlIHRoZSB0cmFuc2llbnQgYnJhbmNoCisJZ2l0IGJyYW5jaCAtRCB0cmFuc2llbnRfYnJhbmNoICYmCisJIyBwYWNrIHRoZSByZXBvCisJZ2l0IHJlcGFjayAtQSAtZCAtbCAmJgorCSMgdmVyaWZ5IG9iamVjdHMgYXJlIHBhY2tlZCBpbiByZXBvc2l0b3J5CisJdGVzdCAzID0gJChnaXQgdmVyaWZ5LXBhY2sgLXYgLS0gLmdpdC9vYmplY3RzL3BhY2svKi5pZHggfAorCQkgICBncmVwIC1lICJeJGZzaGExICIgLWUgIl4kY3NoYTEgIiAtZSAiXiR0c2hhMSAiIHwKKwkJICAgc29ydCB8IHVuaXEgfCB3YyAtbCkgJiYKKwlnaXQgc2hvdyAkZnNoYTEgJiYKKwlnaXQgc2hvdyAkY3NoYTEgJiYKKwlnaXQgc2hvdyAkdHNoYTEgJiYKKwkjIG5vdyBleHBpcmUgdGhlIHJlZmxvZworCXNsZWVwIDEgJiYKKwlnaXQgcmVmbG9nIGV4cGlyZSAtLWV4cGlyZS11bnJlYWNoYWJsZT1ub3cgLS1hbGwgJiYKKwkjIGFuZCByZXBhY2sKKwlnaXQgcmVwYWNrIC1BIC1kIC1sICYmCisJIyB2ZXJpZnkgb2JqZWN0cyBhcmUgcmV0YWluZWQgdW5wYWNrZWQKKwl0ZXN0IDAgPSAkKGdpdCB2ZXJpZnktcGFjayAtdiAtLSAuZ2l0L29iamVjdHMvcGFjay8qLmlkeCB8CisJCSAgIGdyZXAgLWUgIl4kZnNoYTEgIiAtZSAiXiRjc2hhMSAiIC1lICJeJHRzaGExICIgfAorCQkgICBzb3J0IHwgdW5pcSB8IHdjIC1sKSAmJgorCWdpdCBzaG93ICRmc2hhMSAmJgorCWdpdCBzaG93ICRjc2hhMSAmJgorCWdpdCBzaG93ICR0c2hhMQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkwMDEtc2VuZC1lbWFpbC5zaCBiL3QvdDkwMDEtc2VuZC1lbWFpbC5zaAppbmRleCBhNGJjZDI4Li4zZTRlYjYzIDEwMDc1NQotLS0gYS90L3Q5MDAxLXNlbmQtZW1haWwuc2gKKysrIGIvdC90OTAwMS1zZW5kLWVtYWlsLnNoCkBAIC0xMzksMTUgKzEzOSwxNiBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmYWtlIGVkaXRvcicgJwogCShlY2hvICIjIS9iaW4vc2giICYmCi0JIGVjaG8gImVjaG8gZmFrZSBlZGl0ID4+XCQxIgorCSBlY2hvICJlY2hvIGZha2UgZWRpdCA+PlwiXCQxXCIiCiAJKSA+ZmFrZS1lZGl0b3IgJiYKIAljaG1vZCAreCBmYWtlLWVkaXRvcgogJwogCit0ZXN0X3NldF9lZGl0b3IgIiQocHdkKS9mYWtlLWVkaXRvciIKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb21wb3NlIHdvcmtzJyAnCiAJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgogCWVjaG8geSB8IFwKLQkJR0lUX0VESVRPUj0kKHB3ZCkvZmFrZS1lZGl0b3IgXAogCQlHSVRfU0VORF9FTUFJTF9OT1RUWT0xIFwKIAkJZ2l0IHNlbmQtZW1haWwgXAogCQktLWNvbXBvc2UgLS1zdWJqZWN0IGZvbyBcCkBAIC0xNjYsMTQgKzE2Nyw4MCBAQAogCWdyZXAgIlN1YmplY3Q6LipTZWNvbmQiIG1zZ3R4dDIKICcKIAorY2F0ID5leHBlY3RlZC1zaG93LWFsbC1oZWFkZXJzIDw8XEVPRgorMDAwMS1TZWNvbmQucGF0Y2gKKyhtYm94KSBBZGRpbmcgY2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4gZnJvbSBsaW5lICdGcm9tOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+JworRHJ5LU9LLiBMb2cgc2F5czoKK1NlcnZlcjogcmVsYXkuZXhhbXBsZS5jb20KK01BSUwgRlJPTTo8ZnJvbUBleGFtcGxlLmNvbT4KK1JDUFQgVE86PHRvQGV4YW1wbGUuY29tPiw8Y2NAZXhhbXBsZS5jb20+LDxhdXRob3JAZXhhbXBsZS5jb20+CitGcm9tOiBFeGFtcGxlIDxmcm9tQGV4YW1wbGUuY29tPgorVG86IHRvQGV4YW1wbGUuY29tCitDYzogY2NAZXhhbXBsZS5jb20sIEEgPGF1dGhvckBleGFtcGxlLmNvbT4KK1N1YmplY3Q6IFtQQVRDSCAxLzFdIFNlY29uZC4KK0RhdGU6IERBVEUtU1RSSU5HCitNZXNzYWdlLUlkOiBNRVNTQUdFLUlELVNUUklORworWC1NYWlsZXI6IFgtTUFJTEVSLVNUUklORworCitSZXN1bHQ6IE9LCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2VuZGVtYWlsLmNjIHNldCcgJworCWdpdCBjb25maWcgc2VuZGVtYWlsLmNjIGNjQGV4YW1wbGUuY29tICYmCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWRyeS1ydW4gXAorCQktLWZyb209IkV4YW1wbGUgPGZyb21AZXhhbXBsZS5jb20+IiBcCisJCS0tdG89dG9AZXhhbXBsZS5jb20gXAorCQktLXNtdHAtc2VydmVyIHJlbGF5LmV4YW1wbGUuY29tIFwKKwkJJHBhdGNoZXMgfAorCXNlZAktZSAicy9eXChEYXRlOlwpLiovXDEgREFURS1TVFJJTkcvIiBcCisJCS1lICJzL15cKE1lc3NhZ2UtSWQ6XCkuKi9cMSBNRVNTQUdFLUlELVNUUklORy8iIFwKKwkJLWUgInMvXlwoWC1NYWlsZXI6XCkuKi9cMSBYLU1BSUxFUi1TVFJJTkcvIiBcCisJCT5hY3R1YWwtc2hvdy1hbGwtaGVhZGVycyAmJgorCXRlc3RfY21wIGV4cGVjdGVkLXNob3ctYWxsLWhlYWRlcnMgYWN0dWFsLXNob3ctYWxsLWhlYWRlcnMKKycKKworY2F0ID5leHBlY3RlZC1zaG93LWFsbC1oZWFkZXJzIDw8XEVPRgorMDAwMS1TZWNvbmQucGF0Y2gKKyhtYm94KSBBZGRpbmcgY2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4gZnJvbSBsaW5lICdGcm9tOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+JworRHJ5LU9LLiBMb2cgc2F5czoKK1NlcnZlcjogcmVsYXkuZXhhbXBsZS5jb20KK01BSUwgRlJPTTo8ZnJvbUBleGFtcGxlLmNvbT4KK1JDUFQgVE86PHRvQGV4YW1wbGUuY29tPiw8YXV0aG9yQGV4YW1wbGUuY29tPgorRnJvbTogRXhhbXBsZSA8ZnJvbUBleGFtcGxlLmNvbT4KK1RvOiB0b0BleGFtcGxlLmNvbQorQ2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4KK1N1YmplY3Q6IFtQQVRDSCAxLzFdIFNlY29uZC4KK0RhdGU6IERBVEUtU1RSSU5HCitNZXNzYWdlLUlkOiBNRVNTQUdFLUlELVNUUklORworWC1NYWlsZXI6IFgtTUFJTEVSLVNUUklORworCitSZXN1bHQ6IE9LCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2VuZGVtYWlsLmNjIHVuc2V0JyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0IHNlbmRlbWFpbC5jYyAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1kcnktcnVuIFwKKwkJLS1mcm9tPSJFeGFtcGxlIDxmcm9tQGV4YW1wbGUuY29tPiIgXAorCQktLXRvPXRvQGV4YW1wbGUuY29tIFwKKwkJLS1zbXRwLXNlcnZlciByZWxheS5leGFtcGxlLmNvbSBcCisJCSRwYXRjaGVzIHwKKwlzZWQJLWUgInMvXlwoRGF0ZTpcKS4qL1wxIERBVEUtU1RSSU5HLyIgXAorCQktZSAicy9eXChNZXNzYWdlLUlkOlwpLiovXDEgTUVTU0FHRS1JRC1TVFJJTkcvIiBcCisJCS1lICJzL15cKFgtTWFpbGVyOlwpLiovXDEgWC1NQUlMRVItU1RSSU5HLyIgXAorCQk+YWN0dWFsLXNob3ctYWxsLWhlYWRlcnMgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC1zaG93LWFsbC1oZWFkZXJzIGFjdHVhbC1zaG93LWFsbC1oZWFkZXJzCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY29tcG9zZSBhZGRzIE1JTUUgZm9yIHV0ZjggYm9keScgJwogCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKIAkoZWNobyAiIyEvYmluL3NoIiAmJgotCSBlY2hvICJlY2hvIHV0ZjggYm9keTogw6DDqcOsw7bDuiA+PlwkMSIKKwkgZWNobyAiZWNobyB1dGY4IGJvZHk6IMOgw6nDrMO2w7ogPj5cIlwkMVwiIgogCSkgPmZha2UtZWRpdG9yLXV0ZjggJiYKIAljaG1vZCAreCBmYWtlLWVkaXRvci11dGY4ICYmCiAJZWNobyB5IHwgXAotCSAgR0lUX0VESVRPUj0kKHB3ZCkvZmFrZS1lZGl0b3ItdXRmOCBcCisJICBHSVRfRURJVE9SPSJcIiQocHdkKS9mYWtlLWVkaXRvci11dGY4XCIiIFwKIAkgIEdJVF9TRU5EX0VNQUlMX05PVFRZPTEgXAogCSAgZ2l0IHNlbmQtZW1haWwgXAogCSAgLS1jb21wb3NlIC0tc3ViamVjdCBmb28gXApAQCAtMTkzLDExICsyNjAsMTEgQEAKIAkgZWNobyAiIGVjaG8gQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdCIKIAkgZWNobyAiIGVjaG8gU3ViamVjdDogZm9vIgogCSBlY2hvICIgZWNobyAiCi0JIGVjaG8gIiBlY2hvIHV0ZjggYm9keTogw6DDqcOsw7bDuikgPlwkMSIKKwkgZWNobyAiIGVjaG8gdXRmOCBib2R5OiDDoMOpw6zDtsO6KSA+XCJcJDFcIiIKIAkpID5mYWtlLWVkaXRvci11dGY4LW1pbWUgJiYKIAljaG1vZCAreCBmYWtlLWVkaXRvci11dGY4LW1pbWUgJiYKIAllY2hvIHkgfCBcCi0JICBHSVRfRURJVE9SPSQocHdkKS9mYWtlLWVkaXRvci11dGY4LW1pbWUgXAorCSAgR0lUX0VESVRPUj0iXCIkKHB3ZCkvZmFrZS1lZGl0b3ItdXRmOC1taW1lXCIiIFwKIAkgIEdJVF9TRU5EX0VNQUlMX05PVFRZPTEgXAogCSAgZ2l0IHNlbmQtZW1haWwgXAogCSAgLS1jb21wb3NlIC0tc3ViamVjdCBmb28gXApAQCAtMjEzLDcgKzI4MCw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNvbXBvc2UgYWRkcyBNSU1FIGZvciB1dGY4IHN1YmplY3QnICcKIAljbGVhbl9mYWtlX3NlbmRtYWlsICYmCiAJZWNobyB5IHwgXAotCSAgR0lUX0VESVRPUj0kKHB3ZCkvZmFrZS1lZGl0b3IgXAorCSAgR0lUX0VESVRPUj0iXCIkKHB3ZCkvZmFrZS1lZGl0b3JcIiIgXAogCSAgR0lUX1NFTkRfRU1BSUxfTk9UVFk9MSBcCiAJICBnaXQgc2VuZC1lbWFpbCBcCiAJICAtLWNvbXBvc2UgLS1zdWJqZWN0IHV0Zjgtc8O8YmrDq2N0IFwKZGlmZiAtLWdpdCBhL3QvdDkxMDAtZ2l0LXN2bi1iYXNpYy5zaCBiL3QvdDkxMDAtZ2l0LXN2bi1iYXNpYy5zaAppbmRleCA0ZTI0YWIzLi4yNDJjZGYwIDEwMDc1NQotLS0gYS90L3Q5MTAwLWdpdC1zdm4tYmFzaWMuc2gKKysrIGIvdC90OTEwMC1naXQtc3ZuLWJhc2ljLnNoCkBAIC0yMCwzOSArMjAsMzkgQEAKIGVjaG8gJ2RlZmluZSBOT19TVk5fVEVTVFMgdG8gc2tpcCBnaXQtc3ZuIHRlc3RzJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKLSAgICAnaW5pdGlhbGl6ZSBnaXQtc3ZuJyAiCisgICAgJ2luaXRpYWxpemUgZ2l0LXN2bicgJwogCW1rZGlyIGltcG9ydCAmJgogCWNkIGltcG9ydCAmJgogCWVjaG8gZm9vID4gZm9vICYmCiAJbG4gLXMgZm9vIGZvby5saW5rCiAJbWtkaXIgLXAgZGlyL2EvYi9jL2QvZSAmJgotCWVjaG8gJ2RlZXAgZGlyJyA+IGRpci9hL2IvYy9kL2UvZmlsZSAmJgorCWVjaG8gImRlZXAgZGlyIiA+IGRpci9hL2IvYy9kL2UvZmlsZSAmJgogCW1rZGlyIGJhciAmJgotCWVjaG8gJ3p6eicgPiBiYXIvenp6ICYmCi0JZWNobyAnIyEvYmluL3NoJyA+IGV4ZWMuc2ggJiYKKwllY2hvICJ6enoiID4gYmFyL3p6eiAmJgorCWVjaG8gIiMhL2Jpbi9zaCIgPiBleGVjLnNoICYmCiAJY2htb2QgK3ggZXhlYy5zaCAmJgotCXN2biBpbXBvcnQgLW0gJ2ltcG9ydCBmb3IgZ2l0LXN2bicgLiAkc3ZucmVwbyA+L2Rldi9udWxsICYmCisJc3ZuIGltcG9ydCAtbSAiaW1wb3J0IGZvciBnaXQtc3ZuIiAuICIkc3ZucmVwbyIgPi9kZXYvbnVsbCAmJgogCWNkIC4uICYmCiAJcm0gLXJmIGltcG9ydCAmJgotCWdpdC1zdm4gaW5pdCAkc3ZucmVwbyIKKwlnaXQtc3ZuIGluaXQgIiRzdm5yZXBvIicKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2ltcG9ydCBhbiBTVk4gcmV2aXNpb24gaW50byBnaXQnIFwKICAgICAnZ2l0LXN2biBmZXRjaCcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAiY2hlY2tvdXQgZnJvbSBzdm4iICJzdm4gY28gJHN2bnJlcG8gJyRTVk5fVFJFRSciCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJjaGVja291dCBmcm9tIHN2biIgJ3N2biBjbyAiJHN2bnJlcG8iICIkU1ZOX1RSRUUiJwogCiBuYW1lPSd0cnkgYSBkZWVwIC0tcm1kaXIgd2l0aCBhIGNvbW1pdCcKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRuYW1lIiAiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICIkbmFtZSIgJwogCWdpdCBjaGVja291dCAtZiAtYiBteWJyYW5jaCByZW1vdGVzL2dpdC1zdm4gJiYKIAltdiBkaXIvYS9iL2MvZC9lL2ZpbGUgZGlyL2ZpbGUgJiYKIAljcCBkaXIvZmlsZSBmaWxlICYmCiAJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlbW92ZSBkaXIvYS9iL2MvZC9lL2ZpbGUgZGlyL2ZpbGUgZmlsZSAmJgotCWdpdCBjb21taXQgLW0gJyRuYW1lJyAmJgorCWdpdCBjb21taXQgLW0gIiRuYW1lIiAmJgogCWdpdC1zdm4gc2V0LXRyZWUgLS1maW5kLWNvcGllcy1oYXJkZXIgLS1ybWRpciBcCiAJCXJlbW90ZXMvZ2l0LXN2bi4ubXlicmFuY2ggJiYKLQlzdm4gdXAgJyRTVk5fVFJFRScgJiYKLQl0ZXN0IC1kICckU1ZOX1RSRUUnL2RpciAmJiB0ZXN0ICEgLWQgJyRTVk5fVFJFRScvZGlyL2EiCisJc3ZuIHVwICIkU1ZOX1RSRUUiICYmCisJdGVzdCAtZCAiJFNWTl9UUkVFIi9kaXIgJiYgdGVzdCAhIC1kICIkU1ZOX1RSRUUiL2Rpci9hJwogCiAKIG5hbWU9J2RldGVjdCBub2RlIGNoYW5nZSBmcm9tIGZpbGUgdG8gZGlyZWN0b3J5ICMxJwpAQCAtNjgsMTA4ICs2OCwxMDggQEAKIAogCiBuYW1lPSdkZXRlY3Qgbm9kZSBjaGFuZ2UgZnJvbSBkaXJlY3RvcnkgdG8gZmlsZSAjMScKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRuYW1lIiAiCi0Jcm0gLXJmIGRpciAnJEdJVF9ESVInL2luZGV4ICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICIkbmFtZSIgJworCXJtIC1yZiBkaXIgIiRHSVRfRElSIi9pbmRleCAmJgogCWdpdCBjaGVja291dCAtZiAtYiBteWJyYW5jaDIgcmVtb3Rlcy9naXQtc3ZuICYmCiAJbXYgYmFyL3p6eiB6enogJiYKIAlybSAtcmYgYmFyICYmCiAJbXYgenp6IGJhciAmJgogCWdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgLS0gYmFyL3p6eiAmJgogCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS0gYmFyICYmCi0JZ2l0IGNvbW1pdCAtbSAnJG5hbWUnICYmCisJZ2l0IGNvbW1pdCAtbSAiJG5hbWUiICYmCiAJISBnaXQtc3ZuIHNldC10cmVlIC0tZmluZC1jb3BpZXMtaGFyZGVyIC0tcm1kaXIgXAotCQlyZW1vdGVzL2dpdC1zdm4uLm15YnJhbmNoMiIgfHwgdHJ1ZQorCQlyZW1vdGVzL2dpdC1zdm4uLm15YnJhbmNoMicgfHwgdHJ1ZQogCiAKIG5hbWU9J2RldGVjdCBub2RlIGNoYW5nZSBmcm9tIGZpbGUgdG8gZGlyZWN0b3J5ICMyJwotdGVzdF9leHBlY3Rfc3VjY2VzcyAiJG5hbWUiICIKLQlybSAtZiAnJEdJVF9ESVInL2luZGV4ICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICIkbmFtZSIgJworCXJtIC1mICIkR0lUX0RJUiIvaW5kZXggJiYKIAlnaXQgY2hlY2tvdXQgLWYgLWIgbXlicmFuY2gzIHJlbW90ZXMvZ2l0LXN2biAmJgogCXJtIGJhci96enogJiYKIAlnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIGJhci96enogJiYKIAlta2RpciBiYXIvenp6ICYmCiAJZWNobyB5eXkgPiBiYXIvenp6L3l5eSAmJgogCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYmFyL3p6ei95eXkgJiYKLQlnaXQgY29tbWl0IC1tICckbmFtZScgJiYKKwlnaXQgY29tbWl0IC1tICIkbmFtZSIgJiYKIAkhIGdpdC1zdm4gc2V0LXRyZWUgLS1maW5kLWNvcGllcy1oYXJkZXIgLS1ybWRpciBcCi0JCXJlbW90ZXMvZ2l0LXN2bi4ubXlicmFuY2gzIiB8fCB0cnVlCisJCXJlbW90ZXMvZ2l0LXN2bi4ubXlicmFuY2gzJyB8fCB0cnVlCiAKIAogbmFtZT0nZGV0ZWN0IG5vZGUgY2hhbmdlIGZyb20gZGlyZWN0b3J5IHRvIGZpbGUgIzInCi10ZXN0X2V4cGVjdF9zdWNjZXNzICIkbmFtZSIgIgotCXJtIC1mICckR0lUX0RJUicvaW5kZXggJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRuYW1lIiAnCisJcm0gLWYgIiRHSVRfRElSIi9pbmRleCAmJgogCWdpdCBjaGVja291dCAtZiAtYiBteWJyYW5jaDQgcmVtb3Rlcy9naXQtc3ZuICYmCiAJcm0gLXJmIGRpciAmJgogCWdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgLS0gZGlyL2ZpbGUgJiYKIAl0b3VjaCBkaXIgJiYKIAllY2hvIGFzZGYgPiBkaXIgJiYKIAlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tIGRpciAmJgotCWdpdCBjb21taXQgLW0gJyRuYW1lJyAmJgorCWdpdCBjb21taXQgLW0gIiRuYW1lIiAmJgogCSEgZ2l0LXN2biBzZXQtdHJlZSAtLWZpbmQtY29waWVzLWhhcmRlciAtLXJtZGlyIFwKLQkJcmVtb3Rlcy9naXQtc3ZuLi5teWJyYW5jaDQiIHx8IHRydWUKKwkJcmVtb3Rlcy9naXQtc3ZuLi5teWJyYW5jaDQnIHx8IHRydWUKIAogCiBuYW1lPSdyZW1vdmUgZXhlY3V0YWJsZSBiaXQgZnJvbSBhIGZpbGUnCi10ZXN0X2V4cGVjdF9zdWNjZXNzICIkbmFtZSIgIgotCXJtIC1mICckR0lUX0RJUicvaW5kZXggJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRuYW1lIiAnCisJcm0gLWYgIiRHSVRfRElSIi9pbmRleCAmJgogCWdpdCBjaGVja291dCAtZiAtYiBteWJyYW5jaDUgcmVtb3Rlcy9naXQtc3ZuICYmCiAJY2htb2QgLXggZXhlYy5zaCAmJgogCWdpdCB1cGRhdGUtaW5kZXggZXhlYy5zaCAmJgotCWdpdCBjb21taXQgLW0gJyRuYW1lJyAmJgorCWdpdCBjb21taXQgLW0gIiRuYW1lIiAmJgogCWdpdC1zdm4gc2V0LXRyZWUgLS1maW5kLWNvcGllcy1oYXJkZXIgLS1ybWRpciBcCiAJCXJlbW90ZXMvZ2l0LXN2bi4ubXlicmFuY2g1ICYmCi0Jc3ZuIHVwICckU1ZOX1RSRUUnICYmCi0JdGVzdCAhIC14ICckU1ZOX1RSRUUnL2V4ZWMuc2giCisJc3ZuIHVwICIkU1ZOX1RSRUUiICYmCisJdGVzdCAhIC14ICIkU1ZOX1RSRUUiL2V4ZWMuc2gnCiAKIAogbmFtZT0nYWRkIGV4ZWN1dGFibGUgYml0IGJhY2sgZmlsZScKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRuYW1lIiAiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICIkbmFtZSIgJwogCWNobW9kICt4IGV4ZWMuc2ggJiYKIAlnaXQgdXBkYXRlLWluZGV4IGV4ZWMuc2ggJiYKLQlnaXQgY29tbWl0IC1tICckbmFtZScgJiYKKwlnaXQgY29tbWl0IC1tICIkbmFtZSIgJiYKIAlnaXQtc3ZuIHNldC10cmVlIC0tZmluZC1jb3BpZXMtaGFyZGVyIC0tcm1kaXIgXAogCQlyZW1vdGVzL2dpdC1zdm4uLm15YnJhbmNoNSAmJgotCXN2biB1cCAnJFNWTl9UUkVFJyAmJgotCXRlc3QgLXggJyRTVk5fVFJFRScvZXhlYy5zaCIKKwlzdm4gdXAgIiRTVk5fVFJFRSIgJiYKKwl0ZXN0IC14ICIkU1ZOX1RSRUUiL2V4ZWMuc2gnCiAKIAogbmFtZT0nZXhlY3V0YWJsZSBmaWxlIGJlY29tZXMgYSBzeW1saW5rIHRvIGJhci96enogKGZpbGUpJwotdGVzdF9leHBlY3Rfc3VjY2VzcyAiJG5hbWUiICIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRuYW1lIiAnCiAJcm0gZXhlYy5zaCAmJgogCWxuIC1zIGJhci96enogZXhlYy5zaCAmJgogCWdpdCB1cGRhdGUtaW5kZXggZXhlYy5zaCAmJgotCWdpdCBjb21taXQgLW0gJyRuYW1lJyAmJgorCWdpdCBjb21taXQgLW0gIiRuYW1lIiAmJgogCWdpdC1zdm4gc2V0LXRyZWUgLS1maW5kLWNvcGllcy1oYXJkZXIgLS1ybWRpciBcCiAJCXJlbW90ZXMvZ2l0LXN2bi4ubXlicmFuY2g1ICYmCi0Jc3ZuIHVwICckU1ZOX1RSRUUnICYmCi0JdGVzdCAtTCAnJFNWTl9UUkVFJy9leGVjLnNoIgorCXN2biB1cCAiJFNWTl9UUkVFIiAmJgorCXRlc3QgLUwgIiRTVk5fVFJFRSIvZXhlYy5zaCcKIAogbmFtZT0nbmV3IHN5bWxpbmsgaXMgYWRkZWQgdG8gYSBmaWxlIHRoYXQgd2FzIGFsc28ganVzdCBtYWRlIGV4ZWN1dGFibGUnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRuYW1lIiAiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICIkbmFtZSIgJwogCWNobW9kICt4IGJhci96enogJiYKIAlsbiAtcyBiYXIvenp6IGV4ZWMtMi5zaCAmJgogCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYmFyL3p6eiBleGVjLTIuc2ggJiYKLQlnaXQgY29tbWl0IC1tICckbmFtZScgJiYKKwlnaXQgY29tbWl0IC1tICIkbmFtZSIgJiYKIAlnaXQtc3ZuIHNldC10cmVlIC0tZmluZC1jb3BpZXMtaGFyZGVyIC0tcm1kaXIgXAogCQlyZW1vdGVzL2dpdC1zdm4uLm15YnJhbmNoNSAmJgotCXN2biB1cCAnJFNWTl9UUkVFJyAmJgotCXRlc3QgLXggJyRTVk5fVFJFRScvYmFyL3p6eiAmJgotCXRlc3QgLUwgJyRTVk5fVFJFRScvZXhlYy0yLnNoIgorCXN2biB1cCAiJFNWTl9UUkVFIiAmJgorCXRlc3QgLXggIiRTVk5fVFJFRSIvYmFyL3p6eiAmJgorCXRlc3QgLUwgIiRTVk5fVFJFRSIvZXhlYy0yLnNoJwogCiBuYW1lPSdtb2RpZnkgYSBzeW1saW5rIHRvIGJlY29tZSBhIGZpbGUnCi10ZXN0X2V4cGVjdF9zdWNjZXNzICIkbmFtZSIgIgordGVzdF9leHBlY3Rfc3VjY2VzcyAiJG5hbWUiICcKIAllY2hvIGdpdCBoZWxwID4gaGVscCB8fCB0cnVlICYmCiAJcm0gZXhlYy0yLnNoICYmCiAJY3AgaGVscCBleGVjLTIuc2ggJiYKIAlnaXQgdXBkYXRlLWluZGV4IGV4ZWMtMi5zaCAmJgotCWdpdCBjb21taXQgLW0gJyRuYW1lJyAmJgorCWdpdCBjb21taXQgLW0gIiRuYW1lIiAmJgogCWdpdC1zdm4gc2V0LXRyZWUgLS1maW5kLWNvcGllcy1oYXJkZXIgLS1ybWRpciBcCiAJCXJlbW90ZXMvZ2l0LXN2bi4ubXlicmFuY2g1ICYmCi0Jc3ZuIHVwICckU1ZOX1RSRUUnICYmCi0JdGVzdCAtZiAnJFNWTl9UUkVFJy9leGVjLTIuc2ggJiYKLQl0ZXN0ICEgLUwgJyRTVk5fVFJFRScvZXhlYy0yLnNoICYmCi0JZ2l0IGRpZmYgaGVscCAkU1ZOX1RSRUUvZXhlYy0yLnNoIgorCXN2biB1cCAiJFNWTl9UUkVFIiAmJgorCXRlc3QgLWYgIiRTVk5fVFJFRSIvZXhlYy0yLnNoICYmCisJdGVzdCAhIC1MICIkU1ZOX1RSRUUiL2V4ZWMtMi5zaCAmJgorCXRlc3RfY21wIGhlbHAgIiRTVk5fVFJFRSIvZXhlYy0yLnNoJwogCiBpZiB0ZXN0ICIkaGF2ZV91dGY4IiA9IHQKIHRoZW4KQEAgLTE5MCwxMCArMTkwLDEwIEBACiBHSVRfU1ZOX0lEPWFsdAogZXhwb3J0IEdJVF9TVk5fSUQKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRuYW1lIiBcCi0gICAgImdpdC1zdm4gaW5pdCAkc3ZucmVwbyAmJiBnaXQtc3ZuIGZldGNoICYmCisgICAgJ2dpdC1zdm4gaW5pdCAiJHN2bnJlcG8iICYmIGdpdC1zdm4gZmV0Y2ggJiYKICAgICAgZ2l0IHJldi1saXN0IC0tcHJldHR5PXJhdyByZW1vdGVzL2dpdC1zdm4gfCBncmVwIF50cmVlIHwgdW5pcSA+IGEgJiYKICAgICAgZ2l0IHJldi1saXN0IC0tcHJldHR5PXJhdyByZW1vdGVzL2FsdCB8IGdyZXAgXnRyZWUgfCB1bmlxID4gYiAmJgotICAgICBnaXQgZGlmZiBhIGIiCisgICAgIHRlc3RfY21wIGEgYicKIAogbmFtZT0nY2hlY2sgaW1wb3J0ZWQgdHJlZSBjaGVja3N1bXMgZXhwZWN0ZWQgdHJlZSBjaGVja3N1bXMnCiBybSAtZiBleHBlY3RlZApAQCAtMjExLDcgKzIxMSw3IEBACiB0cmVlIDhmNTFmNzRjZjAxNjNhZmM5YWQ2OGE0YjE1MzcyODhjNDU1OGI1YTQKIEVPRgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICIkbmFtZSIgImdpdCBkaWZmIGEgZXhwZWN0ZWQiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICIkbmFtZSIgInRlc3RfY21wIGEgZXhwZWN0ZWQiCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4aXQgaWYgcmVtb3RlIHJlZnMgYXJlIGFtYmlnaW91cycgIgogICAgICAgICBnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLmZldGNoIFwKQEAgLTIxOSwyMiArMjE5LDIyIEBACiAJISBnaXQtc3ZuIG1pZ3JhdGUKICIKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhpdCBpZiBpbml0LWluZyBhIHdvdWxkIGNsb2JiZXIgYSBVUkwnICIKLSAgICAgICAgc3ZuYWRtaW4gY3JlYXRlICR7UFdEfS9zdm5yZXBvMiAmJgotICAgICAgICBzdm4gbWtkaXIgLW0gJ21rZGlyIGJhcicgJHtzdm5yZXBvfTIvYmFyICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGl0IGlmIGluaXQtaW5nIGEgd291bGQgY2xvYmJlciBhIFVSTCcgJworICAgICAgICBzdm5hZG1pbiBjcmVhdGUgIiR7UFdEfS9zdm5yZXBvMiIgJiYKKyAgICAgICAgc3ZuIG1rZGlyIC1tICJta2RpciBiYXIiICIke3N2bnJlcG99Mi9iYXIiICYmCiAgICAgICAgIGdpdCBjb25maWcgLS11bnNldCBzdm4tcmVtb3RlLnN2bi5mZXRjaCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdeYmFyOnJlZnMvcmVtb3Rlcy9naXQtc3ZuJCcgJiYKLQkhIGdpdC1zdm4gaW5pdCAke3N2bnJlcG99Mi9iYXIKLSAgICAgICAgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXmJhcjpyZWZzL3JlbW90ZXMvZ2l0LXN2biQiICYmCisJISBnaXQtc3ZuIGluaXQgIiR7c3ZucmVwb30yL2JhciIKKyAgICAgICAgJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKLSAgJ2luaXQgYWxsb3dzIHVzIHRvIGNvbm5lY3QgdG8gYW5vdGhlciBkaXJlY3RvcnkgaW4gdGhlIHNhbWUgcmVwbycgIgotICAgICAgICBnaXQtc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLWkgYmFyICRzdm5yZXBvL2JhciAmJgorICAnaW5pdCBhbGxvd3MgdXMgdG8gY29ubmVjdCB0byBhbm90aGVyIGRpcmVjdG9yeSBpbiB0aGUgc2FtZSByZXBvJyAnCisgICAgICAgIGdpdC1zdm4gaW5pdCAtLW1pbmltaXplLXVybCAtaSBiYXIgIiRzdm5yZXBvL2JhciIgJiYKICAgICAgICAgZ2l0IGNvbmZpZyAtLWdldCBzdm4tcmVtb3RlLnN2bi5mZXRjaCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXmJhcjpyZWZzL3JlbW90ZXMvYmFyJCcgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeYmFyOnJlZnMvcmVtb3Rlcy9iYXIkIiAmJgogICAgICAgICBnaXQgY29uZmlnIC0tZ2V0IHN2bi1yZW1vdGUuc3ZuLmZldGNoIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdeOnJlZnMvcmVtb3Rlcy9naXQtc3ZuJCcKLSAgICAgICAgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl46cmVmcy9yZW1vdGVzL2dpdC1zdm4kIgorICAgICAgICAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FibGUgdG8gZGNvbW1pdCB0byBhIHN1YmRpcmVjdG9yeScgIgogCWdpdC1zdm4gZmV0Y2ggLWkgYmFyICYmCmRpZmYgLS1naXQgYS90L3Q5MTAxLWdpdC1zdm4tcHJvcHMuc2ggYi90L3Q5MTAxLWdpdC1zdm4tcHJvcHMuc2gKaW5kZXggZDdhNzA0Ny4uZjQyMDc5NiAxMDA3NTUKLS0tIGEvdC90OTEwMS1naXQtc3ZuLXByb3BzLnNoCisrKyBiL3QvdDkxMDEtZ2l0LXN2bi1wcm9wcy5zaApAQCAtNTIsNyArNTIsNyBAQAogY2QgLi4KIAogcm0gLXJmIGltcG9ydAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgd29ya2luZyBjb3B5IGZyb20gc3ZuJyAic3ZuIGNvICRzdm5yZXBvIHRlc3Rfd2MiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB3b3JraW5nIGNvcHkgZnJvbSBzdm4nICdzdm4gY28gIiRzdm5yZXBvIiB0ZXN0X3djJwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc29tZSBjb21taXRzIHRvIHN2bicgXAogCSdjZCB0ZXN0X3djICYmCiAJCWVjaG8gR3JlZXRpbmdzID4+IGt3LmMgJiYKQEAgLTY2LDcgKzY2LDcgQEAKIAkJc3ZuIGNvbW1pdCAtbSAiUHJvcHNldCBJZCIgJiYKIAljZCAuLicKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSBnaXQtc3ZuJyAiZ2l0LXN2biBpbml0ICRzdm5yZXBvIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSBnaXQtc3ZuJyAnZ2l0LXN2biBpbml0ICIkc3ZucmVwbyInCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCByZXZpc2lvbnMgZnJvbSBzdm4nICdnaXQtc3ZuIGZldGNoJwogCiBuYW1lPSd0ZXN0IHN2bjprZXl3b3JkcyBpZ25vcmluZycKQEAgLTkwLDkgKzkwLDkgQEAKIAkgY2QgLi4nCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGFuZCBwdWxsIGxhdGVzdCBmcm9tIHN2biBhbmQgY2hlY2tvdXQgYSBuZXcgd2MnIFwKLQkiZ2l0LXN2biBmZXRjaCAmJgorCSdnaXQtc3ZuIGZldGNoICYmCiAJIGdpdCBwdWxsIC4gcmVtb3Rlcy9naXQtc3ZuICYmCi0JIHN2biBjbyAkc3ZucmVwbyBuZXdfd2MiCisJIHN2biBjbyAiJHN2bnJlcG8iIG5ld193YycKIAogZm9yIGkgaW4gY3JsZiBuZV9jcmxmIGxmIG5lX2xmIGNyIG5lX2NyIGVtcHR5X2NyIGVtcHR5X2xmIGVtcHR5IGVtcHR5X2NybGYKIGRvCmRpZmYgLS1naXQgYS90L3Q5MTAyLWdpdC1zdm4tZGVlcC1ybWRpci5zaCBiL3QvdDkxMDItZ2l0LXN2bi1kZWVwLXJtZGlyLnNoCmluZGV4IDRlMDgwODMuLjBlN2NlMzQgMTAwNzU1Ci0tLSBhL3QvdDkxMDItZ2l0LXN2bi1kZWVwLXJtZGlyLnNoCisrKyBiL3QvdDkxMDItZ2l0LXN2bi1kZWVwLXJtZGlyLnNoCkBAIC0yLDI5ICsyLDI5IEBACiB0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtc3ZuIHJtZGlyJwogLiAuL2xpYi1naXQtc3ZuLnNoCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgcmVwbycgIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSByZXBvJyAnCiAJbWtkaXIgaW1wb3J0ICYmCiAJY2QgaW1wb3J0ICYmCiAJbWtkaXIgLXAgZGVlcGx5L25lc3RlZC9kaXJlY3RvcnkvbnVtYmVyLzEgJiYKIAlta2RpciAtcCBkZWVwbHkvbmVzdGVkL2RpcmVjdG9yeS9udW1iZXIvMiAmJgogCWVjaG8gZm9vID4gZGVlcGx5L25lc3RlZC9kaXJlY3RvcnkvbnVtYmVyLzEvZmlsZSAmJgogCWVjaG8gZm9vID4gZGVlcGx5L25lc3RlZC9kaXJlY3RvcnkvbnVtYmVyLzIvYW5vdGhlciAmJgotCXN2biBpbXBvcnQgLW0gJ2ltcG9ydCBmb3IgZ2l0LXN2bicgLiAkc3ZucmVwbyAmJgorCXN2biBpbXBvcnQgLW0gImltcG9ydCBmb3IgZ2l0LXN2biIgLiAiJHN2bnJlcG8iICYmCiAJY2QgLi4KLQkiCisJJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXJyb3IgdmlhIGdpdC1zdm4nICIKLQlnaXQtc3ZuIGluaXQgJHN2bnJlcG8gJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pcnJvciB2aWEgZ2l0LXN2bicgJworCWdpdC1zdm4gaW5pdCAiJHN2bnJlcG8iICYmCiAJZ2l0LXN2biBmZXRjaCAmJgogCWdpdCBjaGVja291dCAtZiAtYiB0ZXN0LXJtZGlyIHJlbW90ZXMvZ2l0LXN2bgotCSIKKwknCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1RyeSBhIGNvbW1pdCBvbiBybWRpcicgIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnVHJ5IGEgY29tbWl0IG9uIHJtZGlyJyAnCiAJZ2l0IHJtIC1mIGRlZXBseS9uZXN0ZWQvZGlyZWN0b3J5L251bWJlci8yL2Fub3RoZXIgJiYKLQlnaXQgY29tbWl0IC1hIC1tICdyZW1vdmUgYW5vdGhlcicgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJyZW1vdmUgYW5vdGhlciIgJiYKIAlnaXQtc3ZuIHNldC10cmVlIC0tcm1kaXIgSEVBRCAmJgotCXN2biBscyAtUiAkc3ZucmVwbyB8IGdyZXAgXmRlZXBseS9uZXN0ZWQvZGlyZWN0b3J5L251bWJlci8xCi0JIgorCXN2biBscyAtUiAiJHN2bnJlcG8iIHwgZ3JlcCBeZGVlcGx5L25lc3RlZC9kaXJlY3RvcnkvbnVtYmVyLzEKKwknCiAKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTAzLWdpdC1zdm4tdHJhY2tlZC1kaXJlY3RvcnktcmVtb3ZlZC5zaCBiL3QvdDkxMDMtZ2l0LXN2bi10cmFja2VkLWRpcmVjdG9yeS1yZW1vdmVkLnNoCmluZGV4IDBmMGIwZmQuLjlmZmQ4NDUgMTAwNzU1Ci0tLSBhL3QvdDkxMDMtZ2l0LXN2bi10cmFja2VkLWRpcmVjdG9yeS1yZW1vdmVkLnNoCisrKyBiL3QvdDkxMDMtZ2l0LXN2bi10cmFja2VkLWRpcmVjdG9yeS1yZW1vdmVkLnNoCkBAIC0xMCwzMCArMTAsMzAgQEAKIAlta2RpciBpbXBvcnQgJiYKIAlta2RpciBpbXBvcnQvdHJ1bmsgJiYKIAllY2hvIGhlbGxvID4+IGltcG9ydC90cnVuay9SRUFETUUgJiYKLQlzdm4gaW1wb3J0IC1tIGluaXRpYWwgaW1wb3J0ICRzdm5yZXBvICYmCisJc3ZuIGltcG9ydCAtbSBpbml0aWFsIGltcG9ydCAiJHN2bnJlcG8iICYmCiAJcm0gLXJmIGltcG9ydCAmJgotCXN2biBjbyAkc3ZucmVwby90cnVuayB0cnVuayAmJgorCXN2biBjbyAiJHN2bnJlcG8iL3RydW5rIHRydW5rICYmCiAJZWNobyBieWUgYnllID4+IHRydW5rL1JFQURNRSAmJgotCXN2biBybSAtbSAiZ29uZSIgJHN2bnJlcG8vdHJ1bmsgJiYKKwlzdm4gcm0gLW0gImdvbmUiICIkc3ZucmVwbyIvdHJ1bmsgJiYKIAlybSAtcmYgdHJ1bmsgJiYKIAlta2RpciB0cnVuayAmJgogCWVjaG8gIm5ldyIgPiB0cnVuay9GT0xMT1dNRSAmJgotCXN2biBpbXBvcnQgLW0gIm5ldyB0cnVuayIgdHJ1bmsgJHN2bnJlcG8vdHJ1bmsKKwlzdm4gaW1wb3J0IC1tICJuZXcgdHJ1bmsiIHRydW5rICIkc3ZucmVwbyIvdHJ1bmsKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgcmVwbyB3aXRoIGdpdCcgJwotCWdpdCBzdm4gY2xvbmUgLXMgJHN2bnJlcG8geCAmJgorCWdpdCBzdm4gY2xvbmUgLXMgIiRzdm5yZXBvIiB4ICYmCiAJdGVzdCAtZiB4L0ZPTExPV01FICYmCiAJdGVzdCAhIC1mIHgvUkVBRE1FCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21ha2Ugc3VyZSByMiBzdGlsbCBoYXMgb2xkIGZpbGUnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21ha2Ugc3VyZSByMiBzdGlsbCBoYXMgb2xkIGZpbGUnICIKIAljZCB4ICYmCi0JCXRlc3QgLW4gIiQoZ2l0IHN2biBmaW5kLXJldiByMSkiICYmCi0JCWdpdCByZXNldCAtLWhhcmQgJChnaXQgc3ZuIGZpbmQtcmV2IHIxKSAmJgorCQl0ZXN0IC1uIFwiXCQoZ2l0IHN2biBmaW5kLXJldiByMSlcIiAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIFwkKGdpdCBzdm4gZmluZC1yZXYgcjEpICYmCiAJCXRlc3QgLWYgUkVBRE1FICYmCiAJCXRlc3QgISAtZiBGT0xMT1dNRSAmJgotCQl0ZXN0IHgkKGdpdCBzdm4gZmluZC1yZXYgcjIpID0geAotJworCQl0ZXN0IHhcJChnaXQgc3ZuIGZpbmQtcmV2IHIyKSA9IHgKKyIKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTA0LWdpdC1zdm4tZm9sbG93LXBhcmVudC5zaCBiL3QvdDkxMDQtZ2l0LXN2bi1mb2xsb3ctcGFyZW50LnNoCmluZGV4IDdiYTc2MzAuLjRkOTY0ZTIgMTAwNzU1Ci0tLSBhL3QvdDkxMDQtZ2l0LXN2bi1mb2xsb3ctcGFyZW50LnNoCisrKyBiL3QvdDkxMDQtZ2l0LXN2bi1mb2xsb3ctcGFyZW50LnNoCkBAIC02LDE2NSArNiwxNjUgQEAKIHRlc3RfZGVzY3JpcHRpb249J2dpdC1zdm4gZmV0Y2hpbmcnCiAuIC4vbGliLWdpdC1zdm4uc2gKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSByZXBvJyAiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIHJlcG8nICcKIAlta2RpciBpbXBvcnQgJiYKIAljZCBpbXBvcnQgJiYKIAlta2RpciAtcCB0cnVuayAmJgogCWVjaG8gaGVsbG8gPiB0cnVuay9yZWFkbWUgJiYKLQlzdm4gaW1wb3J0IC1tICdpbml0aWFsJyAuICRzdm5yZXBvICYmCisJc3ZuIGltcG9ydCAtbSAiaW5pdGlhbCIgLiAiJHN2bnJlcG8iICYmCiAJY2QgLi4gJiYKLQlzdm4gY28gJHN2bnJlcG8gd2MgJiYKKwlzdm4gY28gIiRzdm5yZXBvIiB3YyAmJgogCWNkIHdjICYmCiAJZWNobyB3b3JsZCA+PiB0cnVuay9yZWFkbWUgJiYKIAlwb2tlIHRydW5rL3JlYWRtZSAmJgotCXN2biBjb21taXQgLW0gJ2Fub3RoZXIgY29tbWl0JyAmJgorCXN2biBjb21taXQgLW0gImFub3RoZXIgY29tbWl0IiAmJgogCXN2biB1cCAmJgogCXN2biBtdiB0cnVuayB0aHVuayAmJgogCWVjaG8gZ29vZGJ5ZSA+PiB0aHVuay9yZWFkbWUgJiYKIAlwb2tlIHRodW5rL3JlYWRtZSAmJgotCXN2biBjb21taXQgLW0gJ2J5ZSBub3cnICYmCisJc3ZuIGNvbW1pdCAtbSAiYnllIG5vdyIgJiYKIAljZCAuLgotCSIKKwknCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgYW5kIGZldGNoIGEgbW92ZWQgZGlyZWN0b3J5JyAiCi0JZ2l0LXN2biBpbml0IC0tbWluaW1pemUtdXJsIC1pIHRodW5rICRzdm5yZXBvL3RodW5rICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IGFuZCBmZXRjaCBhIG1vdmVkIGRpcmVjdG9yeScgJworCWdpdC1zdm4gaW5pdCAtLW1pbmltaXplLXVybCAtaSB0aHVuayAiJHN2bnJlcG8iL3RodW5rICYmCiAJZ2l0LXN2biBmZXRjaCAtaSB0aHVuayAmJgotCXRlc3QgXCJcYGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL3RodW5rQDJcYFwiIFwKLSAgICAgICAgICAgPSBcIlxgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvdGh1bmt+MVxgXCIgJiYKLSAgICAgICAgdGVzdCBcIlxgZ2l0IGNhdC1maWxlIGJsb2IgcmVmcy9yZW1vdGVzL3RodW5rOnJlYWRtZSB8XAotICAgICAgICAgICAgICAgICBzZWQgLW4gLWUgJzNwJ1xgXCIgPSBnb29kYnllICYmCi0JdGVzdCAteiBcIlxgZ2l0IGNvbmZpZyAtLWdldCBzdm4tcmVtb3RlLnN2bi5mZXRjaCBcCi0JICAgICAgICAgJ150cnVuazpyZWZzL3JlbW90ZXMvdGh1bmtAMiQnXGBcIgotCSIKKwl0ZXN0ICJgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvdGh1bmtAMmAiIFwKKyAgICAgICAgICAgPSAiYGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL3RodW5rfjFgIiAmJgorICAgICAgICB0ZXN0ICJgZ2l0IGNhdC1maWxlIGJsb2IgcmVmcy9yZW1vdGVzL3RodW5rOnJlYWRtZSB8XAorICAgICAgICAgICAgICAgICBzZWQgLW4gLWUgIjNwImAiID0gZ29vZGJ5ZSAmJgorCXRlc3QgLXogImBnaXQgY29uZmlnIC0tZ2V0IHN2bi1yZW1vdGUuc3ZuLmZldGNoIFwKKwkgICAgICAgICAiXnRydW5rOnJlZnMvcmVtb3Rlcy90aHVua0AyJCJgIgorCScKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBhbmQgZmV0Y2ggZnJvbSBvbmUgc3ZuLXJlbW90ZScgIgotICAgICAgICBnaXQgY29uZmlnIHN2bi1yZW1vdGUuc3ZuLnVybCAkc3ZucmVwbyAmJgordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBhbmQgZmV0Y2ggZnJvbSBvbmUgc3ZuLXJlbW90ZScgJworICAgICAgICBnaXQgY29uZmlnIHN2bi1yZW1vdGUuc3ZuLnVybCAiJHN2bnJlcG8iICYmCiAgICAgICAgIGdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5zdm4uZmV0Y2ggXAogICAgICAgICAgIHRydW5rOnJlZnMvcmVtb3Rlcy9zdm4vdHJ1bmsgJiYKICAgICAgICAgZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi5mZXRjaCBcCiAgICAgICAgICAgdGh1bms6cmVmcy9yZW1vdGVzL3N2bi90aHVuayAmJgogICAgICAgICBnaXQtc3ZuIGZldGNoIC1pIHN2bi90aHVuayAmJgotCXRlc3QgXCJcYGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL3N2bi90cnVua1xgXCIgXAotICAgICAgICAgICA9IFwiXGBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9zdm4vdGh1bmt+MVxgXCIgJiYKLSAgICAgICAgdGVzdCBcIlxgZ2l0IGNhdC1maWxlIGJsb2IgcmVmcy9yZW1vdGVzL3N2bi90aHVuazpyZWFkbWUgfFwKLSAgICAgICAgICAgICAgICAgc2VkIC1uIC1lICczcCdcYFwiID0gZ29vZGJ5ZQotICAgICAgICAiCisJdGVzdCAiYGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL3N2bi90cnVua2AiIFwKKyAgICAgICAgICAgPSAiYGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL3N2bi90aHVua34xYCIgJiYKKyAgICAgICAgdGVzdCAiYGdpdCBjYXQtZmlsZSBibG9iIHJlZnMvcmVtb3Rlcy9zdm4vdGh1bms6cmVhZG1lIHxcCisgICAgICAgICAgICAgICAgIHNlZCAtbiAtZSAiM3AiYCIgPSBnb29kYnllCisgICAgICAgICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9sbG93IGRlbGV0ZWQgcGFyZW50JyAiCi0gICAgICAgIChzdm4gY3AgLW0gJ3Jlc3VycmVjdGluZyB0cnVuayBhcyBqdW5rJyBcCi0gICAgICAgICAgICAgICAkc3ZucmVwby90cnVua0AyICRzdm5yZXBvL2p1bmsgfHwKLSAgICAgICAgIHN2biBjcCAtbSAncmVzdXJyZWN0aW5nIHRydW5rIGFzIGp1bmsnIFwKLSAgICAgICAgICAgICAgIC1yMiAkc3ZucmVwby90cnVuayAkc3ZucmVwby9qdW5rKSAmJgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9sbG93IGRlbGV0ZWQgcGFyZW50JyAnCisgICAgICAgIChzdm4gY3AgLW0gInJlc3VycmVjdGluZyB0cnVuayBhcyBqdW5rIiBcCisgICAgICAgICAgICAgICAiJHN2bnJlcG8iL3RydW5rQDIgIiRzdm5yZXBvIi9qdW5rIHx8CisgICAgICAgICBzdm4gY3AgLW0gInJlc3VycmVjdGluZyB0cnVuayBhcyBqdW5rIiBcCisgICAgICAgICAgICAgICAtcjIgIiRzdm5yZXBvIi90cnVuayAiJHN2bnJlcG8iL2p1bmspICYmCiAgICAgICAgIGdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5zdm4uZmV0Y2ggXAogICAgICAgICAgIGp1bms6cmVmcy9yZW1vdGVzL3N2bi9qdW5rICYmCiAgICAgICAgIGdpdC1zdm4gZmV0Y2ggLWkgc3ZuL3RodW5rICYmCiAgICAgICAgIGdpdC1zdm4gZmV0Y2ggLWkgc3ZuL2p1bmsgJiYKLSAgICAgICAgdGVzdCAteiBcIlxgZ2l0IGRpZmYgc3ZuL2p1bmsgc3ZuL3RydW5rXGBcIiAmJgotICAgICAgICB0ZXN0IFwiXGBnaXQgbWVyZ2UtYmFzZSBzdm4vanVuayBzdm4vdHJ1bmtcYFwiIFwKLSAgICAgICAgICAgPSBcIlxgZ2l0IHJldi1wYXJzZSBzdm4vdHJ1bmtcYFwiCi0gICAgICAgICIKKyAgICAgICAgdGVzdCAteiAiYGdpdCBkaWZmIHN2bi9qdW5rIHN2bi90cnVua2AiICYmCisgICAgICAgIHRlc3QgImBnaXQgbWVyZ2UtYmFzZSBzdm4vanVuayBzdm4vdHJ1bmtgIiBcCisgICAgICAgICAgID0gImBnaXQgcmV2LXBhcnNlIHN2bi90cnVua2AiCisgICAgICAgICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9sbG93IGxhcmdlciBwYXJlbnQnICIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvbGxvdyBsYXJnZXIgcGFyZW50JyAnCiAgICAgICAgIG1rZGlyIC1wIGltcG9ydC90cnVuay90aHVuay9idW1wL3RodWQgJiYKICAgICAgICAgZWNobyBoaSA+IGltcG9ydC90cnVuay90aHVuay9idW1wL3RodWQvZmlsZSAmJgotICAgICAgICBzdm4gaW1wb3J0IC1tICdpbXBvcnQgYSBsYXJnZXIgcGFyZW50JyBpbXBvcnQgJHN2bnJlcG8vbGFyZ2VyLXBhcmVudCAmJgotICAgICAgICBzdm4gY3AgLW0gJ2hpJyAkc3ZucmVwby9sYXJnZXItcGFyZW50ICRzdm5yZXBvL2Fub3RoZXItbGFyZ2VyICYmCisgICAgICAgIHN2biBpbXBvcnQgLW0gImltcG9ydCBhIGxhcmdlciBwYXJlbnQiIGltcG9ydCAiJHN2bnJlcG8iL2xhcmdlci1wYXJlbnQgJiYKKyAgICAgICAgc3ZuIGNwIC1tICJoaSIgIiRzdm5yZXBvIi9sYXJnZXItcGFyZW50ICIkc3ZucmVwbyIvYW5vdGhlci1sYXJnZXIgJiYKICAgICAgICAgZ2l0LXN2biBpbml0IC0tbWluaW1pemUtdXJsIC1pIGxhcmdlciBcCi0gICAgICAgICAgJHN2bnJlcG8vYW5vdGhlci1sYXJnZXIvdHJ1bmsvdGh1bmsvYnVtcC90aHVkICYmCisgICAgICAgICAgIiRzdm5yZXBvIi9hbm90aGVyLWxhcmdlci90cnVuay90aHVuay9idW1wL3RodWQgJiYKICAgICAgICAgZ2l0LXN2biBmZXRjaCAtaSBsYXJnZXIgJiYKICAgICAgICAgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvbGFyZ2VyICYmCiAgICAgICAgIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgXAogICAgICAgICAgICByZWZzL3JlbW90ZXMvbGFyZ2VyLXBhcmVudC90cnVuay90aHVuay9idW1wL3RodWQgJiYKLSAgICAgICAgdGVzdCBcIlxgZ2l0IG1lcmdlLWJhc2UgXAorICAgICAgICB0ZXN0ICJgZ2l0IG1lcmdlLWJhc2UgXAogICAgICAgICAgICAgICAgICByZWZzL3JlbW90ZXMvbGFyZ2VyLXBhcmVudC90cnVuay90aHVuay9idW1wL3RodWQgXAotICAgICAgICAgICAgICAgICByZWZzL3JlbW90ZXMvbGFyZ2VyXGBcIiA9IFwKLSAgICAgICAgICAgICBcIlxgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvbGFyZ2VyXGBcIgorICAgICAgICAgICAgICAgICByZWZzL3JlbW90ZXMvbGFyZ2VyYCIgPSBcCisgICAgICAgICAgICAgImBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9sYXJnZXJgIgogICAgICAgICB0cnVlCi0gICAgICAgICIKKyAgICAgICAgJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdmb2xsb3cgaGlnaGVyLWxldmVsIHBhcmVudCcgIgotICAgICAgICBzdm4gbWtkaXIgLW0gJ2ZvbGxvdyBoaWdoZXItbGV2ZWwgcGFyZW50JyAkc3ZucmVwby9ibG9iICYmCi0gICAgICAgIHN2biBjbyAkc3ZucmVwby9ibG9iIGJsb2IgJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvbGxvdyBoaWdoZXItbGV2ZWwgcGFyZW50JyAnCisgICAgICAgIHN2biBta2RpciAtbSAiZm9sbG93IGhpZ2hlci1sZXZlbCBwYXJlbnQiICIkc3ZucmVwbyIvYmxvYiAmJgorICAgICAgICBzdm4gY28gIiRzdm5yZXBvIi9ibG9iIGJsb2IgJiYKICAgICAgICAgY2QgYmxvYiAmJgogICAgICAgICAgICAgICAgIGVjaG8gaGkgPiBoaSAmJgogICAgICAgICAgICAgICAgIHN2biBhZGQgaGkgJiYKLSAgICAgICAgICAgICAgICBzdm4gY29tbWl0IC1tICdoaWhpJyAmJgorICAgICAgICAgICAgICAgIHN2biBjb21taXQgLW0gImhpaGkiICYmCiAgICAgICAgICAgICAgICAgY2QgLi4KLSAgICAgICAgc3ZuIG1rZGlyIC1tICduZXcgZ2xvYiBhdCB0b3AgbGV2ZWwnICRzdm5yZXBvL2dsb2IgJiYKLSAgICAgICAgc3ZuIG12IC1tICdtb3ZlIGJsb2IgZG93biBhIGxldmVsJyAkc3ZucmVwby9ibG9iICRzdm5yZXBvL2dsb2IvYmxvYiAmJgotICAgICAgICBnaXQtc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLWkgYmxvYiAkc3ZucmVwby9nbG9iL2Jsb2IgJiYKKyAgICAgICAgc3ZuIG1rZGlyIC1tICJuZXcgZ2xvYiBhdCB0b3AgbGV2ZWwiICIkc3ZucmVwbyIvZ2xvYiAmJgorICAgICAgICBzdm4gbXYgLW0gIm1vdmUgYmxvYiBkb3duIGEgbGV2ZWwiICIkc3ZucmVwbyIvYmxvYiAiJHN2bnJlcG8iL2dsb2IvYmxvYiAmJgorICAgICAgICBnaXQtc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLWkgYmxvYiAiJHN2bnJlcG8iL2dsb2IvYmxvYiAmJgogICAgICAgICBnaXQtc3ZuIGZldGNoIC1pIGJsb2IKLSAgICAgICAgIgorICAgICAgICAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvbGxvdyBkZWxldGVkIGRpcmVjdG9yeScgIgotCXN2biBtdiAtbSAnYnllIScgJHN2bnJlcG8vZ2xvYi9ibG9iL2hpICRzdm5yZXBvL2dsb2IvYmxvYi9ieWUgJiYKLQlzdm4gcm0gLW0gJ3JlbW92ZSBnbG9iJyAkc3ZucmVwby9nbG9iICYmCi0JZ2l0LXN2biBpbml0IC0tbWluaW1pemUtdXJsIC1pIGdsb2IgJHN2bnJlcG8vZ2xvYiAmJgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9sbG93IGRlbGV0ZWQgZGlyZWN0b3J5JyAnCisJc3ZuIG12IC1tICJieWUhIiAiJHN2bnJlcG8iL2dsb2IvYmxvYi9oaSAiJHN2bnJlcG8iL2dsb2IvYmxvYi9ieWUgJiYKKwlzdm4gcm0gLW0gInJlbW92ZSBnbG9iIiAiJHN2bnJlcG8iL2dsb2IgJiYKKwlnaXQtc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLWkgZ2xvYiAiJHN2bnJlcG8iL2dsb2IgJiYKIAlnaXQtc3ZuIGZldGNoIC1pIGdsb2IgJiYKLQl0ZXN0IFwiXGBnaXQgY2F0LWZpbGUgYmxvYiByZWZzL3JlbW90ZXMvZ2xvYjpibG9iL2J5ZVxgXCIgPSBoaSAmJgotCXRlc3QgXCJcYGdpdCBscy10cmVlIHJlZnMvcmVtb3Rlcy9nbG9iIHwgd2MgLWwgXGBcIiAtZXEgMQotCSIKKwl0ZXN0ICJgZ2l0IGNhdC1maWxlIGJsb2IgcmVmcy9yZW1vdGVzL2dsb2I6YmxvYi9ieWVgIiA9IGhpICYmCisJdGVzdCAiYGdpdCBscy10cmVlIHJlZnMvcmVtb3Rlcy9nbG9iIHwgd2MgLWwgYCIgLWVxIDEKKwknCiAKICMgcmVmOiByOTI3MCBvZiB0aGUgU3VidmVyc2lvbiByZXBvc2l0b3J5OiAoaHR0cDovL3N2bi5jb2xsYWIubmV0L3JlcG9zL3N2bikKICMgaW4gdHJ1bmsvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3BlcmwKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvbGxvdy1wYXJlbnQgYXZvaWRzIGRlbGV0aW5nIHJlbGV2YW50IGluZm8nICIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvbGxvdy1wYXJlbnQgYXZvaWRzIGRlbGV0aW5nIHJlbGV2YW50IGluZm8nICcKIAlta2RpciAtcCBpbXBvcnQvdHJ1bmsvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3BlcmwvdCAmJgogCWZvciBpIGluIGEgYiBjIDsgZG8gXAotCSAgZWNobyBcJGkgPiBpbXBvcnQvdHJ1bmsvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3BlcmwvXCRpLnBtICYmCi0JICBlY2hvIF9cJGkgPiBpbXBvcnQvdHJ1bmsvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3BlcmwvdC9cJGkudDsgXAorCSAgZWNobyAkaSA+IGltcG9ydC90cnVuay9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcGVybC8kaS5wbSAmJgorCSAgZWNobyBfJGkgPiBpbXBvcnQvdHJ1bmsvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3BlcmwvdC8kaS50OyBcCiAJZG9uZSAmJgotCSAgZWNobyAnYmFkIGRlbGV0ZSB0ZXN0JyA+IFwKKwkgIGVjaG8gImJhZCBkZWxldGUgdGVzdCIgPiBcCiAJICAgaW1wb3J0L3RydW5rL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9wZXJsL3QvbGFyZ2VyLXBhcmVudCAmJgotCSAgZWNobyAnYmFkIGRlbGV0ZSB0ZXN0IDInID4gXAorCSAgZWNobyAiYmFkIGRlbGV0ZSB0ZXN0IDIiID4gXAogCSAgIGltcG9ydC90cnVuay9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcGVybC9hbm90aGVyLWxhcmdlciAmJgogCWNkIGltcG9ydCAmJgotCSAgc3ZuIGltcG9ydCAtbSAncjkyNzAgdGVzdCcgLiAkc3ZucmVwby9yOTI3MCAmJgorCSAgc3ZuIGltcG9ydCAtbSAicjkyNzAgdGVzdCIgLiAiJHN2bnJlcG8iL3I5MjcwICYmCiAJY2QgLi4gJiYKLQlzdm4gY28gJHN2bnJlcG8vcjkyNzAvdHJ1bmsvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3BlcmwgcjkyNzAgJiYKKwlzdm4gY28gIiRzdm5yZXBvIi9yOTI3MC90cnVuay9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcGVybCByOTI3MCAmJgogCWNkIHI5MjcwICYmCiAJICBzdm4gbWtkaXIgbmF0aXZlICYmCiAJICBzdm4gbXYgdCBuYXRpdmUvdCAmJgotCSAgZm9yIGkgaW4gYSBiIGM7IGRvIHN2biBtdiBcJGkucG0gbmF0aXZlL1wkaS5wbTsgZG9uZSAmJgorCSAgZm9yIGkgaW4gYSBiIGM7IGRvIHN2biBtdiAkaS5wbSBuYXRpdmUvJGkucG07IGRvbmUgJiYKIAkgIGVjaG8geiA+PiBuYXRpdmUvdC9jLnQgJiYKIAkgIHBva2UgbmF0aXZlL3QvYy50ICYmCi0JICBzdm4gY29tbWl0IC1tICdyZW9yZyB0ZXN0JyAmJgorCSAgc3ZuIGNvbW1pdCAtbSAicmVvcmcgdGVzdCIgJiYKIAljZCAuLiAmJgogCWdpdC1zdm4gaW5pdCAtLW1pbmltaXplLXVybCAtaSByOTI3MC10IFwKLQkgICRzdm5yZXBvL3I5MjcwL3RydW5rL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9wZXJsL25hdGl2ZS90ICYmCisJICAiJHN2bnJlcG8iL3I5MjcwL3RydW5rL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9wZXJsL25hdGl2ZS90ICYmCiAJZ2l0LXN2biBmZXRjaCAtaSByOTI3MC10ICYmCi0JdGVzdCBcYGdpdCByZXYtbGlzdCByOTI3MC10IHwgd2MgLWxcYCAtZXEgMiAmJgotCXRlc3QgXCJcYGdpdCBscy10cmVlIC0tbmFtZS1vbmx5IHI5MjcwLXR+MVxgXCIgPSBcCi0JICAgICBcIlxgZ2l0IGxzLXRyZWUgLS1uYW1lLW9ubHkgcjkyNzAtdFxgXCIKLQkiCisJdGVzdCBgZ2l0IHJldi1saXN0IHI5MjcwLXQgfCB3YyAtbGAgLWVxIDIgJiYKKwl0ZXN0ICJgZ2l0IGxzLXRyZWUgLS1uYW1lLW9ubHkgcjkyNzAtdH4xYCIgPSBcCisJICAgICAiYGdpdCBscy10cmVlIC0tbmFtZS1vbmx5IHI5MjcwLXRgIgorCScKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAidHJhY2sgaW5pdGlhbCBjaGFuZ2UgaWYgaXQgd2FzIG9ubHkgbWFkZSB0byBwYXJlbnQiICIKLQlzdm4gY3AgLW0gJ3doZWVlIScgJHN2bnJlcG8vcjkyNzAvdHJ1bmsgJHN2bnJlcG8vcjkyNzAvZHJ1bmsgJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInRyYWNrIGluaXRpYWwgY2hhbmdlIGlmIGl0IHdhcyBvbmx5IG1hZGUgdG8gcGFyZW50IiAnCisJc3ZuIGNwIC1tICJ3aGVlZSEiICIkc3ZucmVwbyIvcjkyNzAvdHJ1bmsgIiRzdm5yZXBvIi9yOTI3MC9kcnVuayAmJgogCWdpdC1zdm4gaW5pdCAtLW1pbmltaXplLXVybCAtaSByOTI3MC1kIFwKLQkgICRzdm5yZXBvL3I5MjcwL2RydW5rL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9wZXJsL25hdGl2ZS90ICYmCisJICAiJHN2bnJlcG8iL3I5MjcwL2RydW5rL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9wZXJsL25hdGl2ZS90ICYmCiAJZ2l0LXN2biBmZXRjaCAtaSByOTI3MC1kICYmCi0JdGVzdCBcYGdpdCByZXYtbGlzdCByOTI3MC1kIHwgd2MgLWxcYCAtZXEgMyAmJgotCXRlc3QgXCJcYGdpdCBscy10cmVlIC0tbmFtZS1vbmx5IHI5MjcwLXRcYFwiID0gXAotCSAgICAgXCJcYGdpdCBscy10cmVlIC0tbmFtZS1vbmx5IHI5MjcwLWRcYFwiICYmCi0JdGVzdCBcIlxgZ2l0IHJldi1wYXJzZSByOTI3MC10XGBcIiA9IFwKLQkgICAgIFwiXGBnaXQgcmV2LXBhcnNlIHI5MjcwLWR+MVxgXCIKLQkiCisJdGVzdCBgZ2l0IHJldi1saXN0IHI5MjcwLWQgfCB3YyAtbGAgLWVxIDMgJiYKKwl0ZXN0ICJgZ2l0IGxzLXRyZWUgLS1uYW1lLW9ubHkgcjkyNzAtdGAiID0gXAorCSAgICAgImBnaXQgbHMtdHJlZSAtLW5hbWUtb25seSByOTI3MC1kYCIgJiYKKwl0ZXN0ICJgZ2l0IHJldi1wYXJzZSByOTI3MC10YCIgPSBcCisJICAgICAiYGdpdCByZXYtcGFyc2UgcjkyNzAtZH4xYCIKKwknCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInRyYWNrIG11bHRpLXBhcmVudCBwYXRocyIgIgotCXN2biBjcCAtbSAncmVzdXJyZWN0IC9nbG9iJyAkc3ZucmVwby9yOTI3MCAkc3ZucmVwby9nbG9iICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJ0cmFjayBtdWx0aS1wYXJlbnQgcGF0aHMiICcKKwlzdm4gY3AgLW0gInJlc3VycmVjdCAvZ2xvYiIgIiRzdm5yZXBvIi9yOTI3MCAiJHN2bnJlcG8iL2dsb2IgJiYKIAlnaXQtc3ZuIG11bHRpLWZldGNoICYmCi0JdGVzdCBcYGdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9yZW1vdGVzL2dsb2IgfCBcCi0JICAgICAgIGdyZXAgJ15wYXJlbnQgJyB8IHdjIC1sXGAgLWVxIDIKLQkiCisJdGVzdCBgZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL3JlbW90ZXMvZ2xvYiB8IFwKKwkgICAgICAgZ3JlcCAiXnBhcmVudCAiIHwgd2MgLWxgIC1lcSAyCisJJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICJtdWx0aS1mZXRjaCBjb250aW51ZXMgdG8gd29yayIgIgogCWdpdC1zdm4gbXVsdGktZmV0Y2gKIAkiCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIm11bHRpLWZldGNoIHdvcmtzIG9mZiBhICdjbGVhbicgcmVwb3NpdG9yeSIgIgotCXJtIC1yICRHSVRfRElSL3N2biAkR0lUX0RJUi9yZWZzL3JlbW90ZXMgJEdJVF9ESVIvbG9ncyAmJgotCW1rZGlyICRHSVRfRElSL3N2biAmJgordGVzdF9leHBlY3Rfc3VjY2VzcyAibXVsdGktZmV0Y2ggd29ya3Mgb2ZmIGEgJ2NsZWFuJyByZXBvc2l0b3J5IiAnCisJcm0gLXIgIiRHSVRfRElSL3N2biIgIiRHSVRfRElSL3JlZnMvcmVtb3RlcyIgIiRHSVRfRElSL2xvZ3MiICYmCisJbWtkaXIgIiRHSVRfRElSL3N2biIgJiYKIAlnaXQtc3ZuIG11bHRpLWZldGNoCi0JIgorCScKIAogdGVzdF9kZWJ1ZyAnZ2l0ayAtLWFsbCAmJwogCmRpZmYgLS1naXQgYS90L3Q5MTA1LWdpdC1zdm4tY29tbWl0LWRpZmYuc2ggYi90L3Q5MTA1LWdpdC1zdm4tY29tbWl0LWRpZmYuc2gKaW5kZXggMzE4ZTE3Mi4uNjMyMzAzNiAxMDA3NTUKLS0tIGEvdC90OTEwNS1naXQtc3ZuLWNvbW1pdC1kaWZmLnNoCisrKyBiL3QvdDkxMDUtZ2l0LXN2bi1jb21taXQtZGlmZi5zaApAQCAtNCwxOCArNCwxOCBAQAogdGVzdF9kZXNjcmlwdGlvbj0nZ2l0LXN2biBjb21taXQtZGlmZicKIC4gLi9saWItZ2l0LXN2bi5zaAogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIHJlcG8nICIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgcmVwbycgJwogCW1rZGlyIGltcG9ydCAmJgogCWNkIGltcG9ydCAmJgogCWVjaG8gaGVsbG8gPiByZWFkbWUgJiYKLQlzdm4gaW1wb3J0IC1tICdpbml0aWFsJyAuICRzdm5yZXBvICYmCisJc3ZuIGltcG9ydCAtbSAiaW5pdGlhbCIgLiAiJHN2bnJlcG8iICYmCiAJY2QgLi4gJiYKIAllY2hvIGhlbGxvID4gcmVhZG1lICYmCiAJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCByZWFkbWUgJiYKLQlnaXQgY29tbWl0IC1hIC1tICdpbml0aWFsJyAmJgorCWdpdCBjb21taXQgLWEgLW0gImluaXRpYWwiICYmCiAJZWNobyB3b3JsZCA+PiByZWFkbWUgJiYKLQlnaXQgY29tbWl0IC1hIC1tICdhbm90aGVyJwotCSIKKwlnaXQgY29tbWl0IC1hIC1tICJhbm90aGVyIgorCScKIAogaGVhZD1gZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEXjBgCiBwcmV2PWBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUReMWAKQEAgLTI0LDIwICsyNCwyMCBAQAogIyBjb21taXQsIHNvIG9ubHkgYSBiYXNpYyB0ZXN0IG9mIGZ1bmN0aW9uYWxpdHkgaXMgbmVlZGVkIHNpbmNlIHdlJ3ZlCiAjIGFscmVhZHkgdGVzdGVkIGNvbW1pdCBleHRlbnNpdmVseSBlbHNld2hlcmUKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCB0aGUgY29tbWl0LWRpZmYgY29tbWFuZCcgIgotCXRlc3QgLW4gJyRwcmV2JyAmJiB0ZXN0IC1uICckaGVhZCcgJiYKLQlnaXQtc3ZuIGNvbW1pdC1kaWZmIC1yMSAnJHByZXYnICckaGVhZCcgJyRzdm5yZXBvJyAmJgotCXN2biBjbyAkc3ZucmVwbyB3YyAmJgordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCB0aGUgY29tbWl0LWRpZmYgY29tbWFuZCcgJworCXRlc3QgLW4gIiRwcmV2IiAmJiB0ZXN0IC1uICIkaGVhZCIgJiYKKwlnaXQtc3ZuIGNvbW1pdC1kaWZmIC1yMSAiJHByZXYiICIkaGVhZCIgIiRzdm5yZXBvIiAmJgorCXN2biBjbyAiJHN2bnJlcG8iIHdjICYmCiAJY21wIHJlYWRtZSB3Yy9yZWFkbWUKLQkiCisJJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQtZGlmZiB0byBhIHN1Yi1kaXJlY3RvcnkgKHdpdGggZ2l0LXN2biBjb25maWcpJyAiCi0Jc3ZuIGltcG9ydCAtbSAnc3ViLWRpcmVjdG9yeScgaW1wb3J0ICRzdm5yZXBvL3N1YmRpciAmJgotCWdpdC1zdm4gaW5pdCAtLW1pbmltaXplLXVybCAkc3ZucmVwby9zdWJkaXIgJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdC1kaWZmIHRvIGEgc3ViLWRpcmVjdG9yeSAod2l0aCBnaXQtc3ZuIGNvbmZpZyknICcKKwlzdm4gaW1wb3J0IC1tICJzdWItZGlyZWN0b3J5IiBpbXBvcnQgIiRzdm5yZXBvIi9zdWJkaXIgJiYKKwlnaXQtc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgIiRzdm5yZXBvIi9zdWJkaXIgJiYKIAlnaXQtc3ZuIGZldGNoICYmCi0JZ2l0LXN2biBjb21taXQtZGlmZiAtcjMgJyRwcmV2JyAnJGhlYWQnICYmCi0Jc3ZuIGNhdCAkc3ZucmVwby9zdWJkaXIvcmVhZG1lID4gcmVhZG1lLjIgJiYKKwlnaXQtc3ZuIGNvbW1pdC1kaWZmIC1yMyAiJHByZXYiICIkaGVhZCIgJiYKKwlzdm4gY2F0ICIkc3ZucmVwbyIvc3ViZGlyL3JlYWRtZSA+IHJlYWRtZS4yICYmCiAJY21wIHJlYWRtZSByZWFkbWUuMgotCSIKKwknCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEwNi1naXQtc3ZuLWNvbW1pdC1kaWZmLWNsb2JiZXIuc2ggYi90L3Q5MTA2LWdpdC1zdm4tY29tbWl0LWRpZmYtY2xvYmJlci5zaAppbmRleCBmNzRhYjEyLi41OGEzYTdiIDEwMDc1NQotLS0gYS90L3Q5MTA2LWdpdC1zdm4tY29tbWl0LWRpZmYtY2xvYmJlci5zaAorKysgYi90L3Q5MTA2LWdpdC1zdm4tY29tbWl0LWRpZmYtY2xvYmJlci5zaApAQCAtNCw1NiArNCw1NiBAQAogdGVzdF9kZXNjcmlwdGlvbj0nZ2l0LXN2biBjb21taXQtZGlmZiBjbG9iYmVyJwogLiAuL2xpYi1naXQtc3ZuLnNoCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgcmVwbycgIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSByZXBvJyAnCiAJbWtkaXIgaW1wb3J0ICYmCiAJY2QgaW1wb3J0ICYmCiAJZWNobyBpbml0aWFsID4gZmlsZSAmJgotCXN2biBpbXBvcnQgLW0gJ2luaXRpYWwnIC4gJHN2bnJlcG8gJiYKKwlzdm4gaW1wb3J0IC1tICJpbml0aWFsIiAuICIkc3ZucmVwbyIgJiYKIAljZCAuLiAmJgogCWVjaG8gaW5pdGlhbCA+IGZpbGUgJiYKIAlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZpbGUgJiYKLQlnaXQgY29tbWl0IC1hIC1tICdpbml0aWFsJwotCSIKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBjaGFuZ2UgZnJvbSBzdm4gc2lkZScgIgotCXN2biBjbyAkc3ZucmVwbyB0LnN2biAmJgorCWdpdCBjb21taXQgLWEgLW0gImluaXRpYWwiCisJJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGNoYW5nZSBmcm9tIHN2biBzaWRlJyAnCisJc3ZuIGNvICIkc3ZucmVwbyIgdC5zdm4gJiYKIAljZCB0LnN2biAmJgogCWVjaG8gc2Vjb25kIGxpbmUgZnJvbSBzdm4gPj4gZmlsZSAmJgogCXBva2UgZmlsZSAmJgotCXN2biBjb21taXQgLW0gJ3NlY29uZCBsaW5lIGZyb20gc3ZuJyAmJgorCXN2biBjb21taXQgLW0gInNlY29uZCBsaW5lIGZyb20gc3ZuIiAmJgogCWNkIC4uICYmCiAJcm0gLXJmIHQuc3ZuCi0JIgorCScKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGNvbmZsaWN0aW5nIGNoYW5nZSBmcm9tIGdpdCcgIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGNvbmZsaWN0aW5nIGNoYW5nZSBmcm9tIGdpdCcgJwogCWVjaG8gc2Vjb25kIGxpbmUgZnJvbSBnaXQgPj4gZmlsZSAmJgotCWdpdCBjb21taXQgLWEgLW0gJ3NlY29uZCBsaW5lIGZyb20gZ2l0JyAmJgotCSEgZ2l0LXN2biBjb21taXQtZGlmZiAtcjEgSEVBRH4xIEhFQUQgJHN2bnJlcG8KLSIKKwlnaXQgY29tbWl0IC1hIC1tICJzZWNvbmQgbGluZSBmcm9tIGdpdCIgJiYKKwkhIGdpdC1zdm4gY29tbWl0LWRpZmYgLXIxIEhFQUR+MSBIRUFEICIkc3ZucmVwbyIKKycKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGNvbXBsZW1lbnRpbmcgY2hhbmdlIGZyb20gZ2l0JyAiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgY29tcGxlbWVudGluZyBjaGFuZ2UgZnJvbSBnaXQnICcKIAlnaXQgcmVzZXQgLS1oYXJkIEhFQUR+MSAmJgogCWVjaG8gc2Vjb25kIGxpbmUgZnJvbSBzdm4gPj4gZmlsZSAmJgotCWdpdCBjb21taXQgLWEgLW0gJ3NlY29uZCBsaW5lIGZyb20gc3ZuJyAmJgorCWdpdCBjb21taXQgLWEgLW0gInNlY29uZCBsaW5lIGZyb20gc3ZuIiAmJgogCWVjaG8gdGhpcmQgbGluZSBmcm9tIGdpdCA+PiBmaWxlICYmCi0JZ2l0IGNvbW1pdCAtYSAtbSAndGhpcmQgbGluZSBmcm9tIGdpdCcgJiYKLQlnaXQtc3ZuIGNvbW1pdC1kaWZmIC1yMiBIRUFEfjEgSEVBRCAkc3ZucmVwbwotCSIKKwlnaXQgY29tbWl0IC1hIC1tICJ0aGlyZCBsaW5lIGZyb20gZ2l0IiAmJgorCWdpdC1zdm4gY29tbWl0LWRpZmYgLXIyIEhFQUR+MSBIRUFEICIkc3ZucmVwbyIKKwknCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rjb21taXQgZmFpbHMgdG8gY29tbWl0IGJlY2F1c2Ugb2YgY29uZmxpY3QnICIKLQlnaXQtc3ZuIGluaXQgJHN2bnJlcG8gJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rjb21taXQgZmFpbHMgdG8gY29tbWl0IGJlY2F1c2Ugb2YgY29uZmxpY3QnICcKKwlnaXQtc3ZuIGluaXQgIiRzdm5yZXBvIiAmJgogCWdpdC1zdm4gZmV0Y2ggJiYKIAlnaXQgcmVzZXQgLS1oYXJkIHJlZnMvcmVtb3Rlcy9naXQtc3ZuICYmCi0Jc3ZuIGNvICRzdm5yZXBvIHQuc3ZuICYmCisJc3ZuIGNvICIkc3ZucmVwbyIgdC5zdm4gJiYKIAljZCB0LnN2biAmJgogCWVjaG8gZm91cnRoIGxpbmUgZnJvbSBzdm4gPj4gZmlsZSAmJgogCXBva2UgZmlsZSAmJgotCXN2biBjb21taXQgLW0gJ2ZvdXJ0aCBsaW5lIGZyb20gc3ZuJyAmJgorCXN2biBjb21taXQgLW0gImZvdXJ0aCBsaW5lIGZyb20gc3ZuIiAmJgogCWNkIC4uICYmCiAJcm0gLXJmIHQuc3ZuICYmCi0JZWNobyAnZm91cnRoIGxpbmUgZnJvbSBnaXQnID4+IGZpbGUgJiYKLQlnaXQgY29tbWl0IC1hIC1tICdmb3VydGggbGluZSBmcm9tIGdpdCcgJiYKKwllY2hvICJmb3VydGggbGluZSBmcm9tIGdpdCIgPj4gZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gImZvdXJ0aCBsaW5lIGZyb20gZ2l0IiAmJgogCSEgZ2l0LXN2biBkY29tbWl0Ci0JIgorCScKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZGNvbW1pdCBkb2VzIHRoZSBzdm4gZXF1aXZhbGVudCBvZiBhbiBpbmRleCBtZXJnZScgIgogCWdpdCByZXNldCAtLWhhcmQgcmVmcy9yZW1vdGVzL2dpdC1zdm4gJiYKQEAgLTY2LDE1ICs2NiwxNSBAQAogCWdpdC1zdm4gZGNvbW1pdAogCSIKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGFub3RoZXIgY2hhbmdlIGZyb20gc3ZuIHNpZGUnICIKLQlzdm4gY28gJHN2bnJlcG8gdC5zdm4gJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBhbm90aGVyIGNoYW5nZSBmcm9tIHN2biBzaWRlJyAnCisJc3ZuIGNvICIkc3ZucmVwbyIgdC5zdm4gJiYKIAljZCB0LnN2biAmJgogCQllY2hvIHRoaXJkIGxpbmUgZnJvbSBzdm4gPj4gZmlsZSAmJgogCQlwb2tlIGZpbGUgJiYKLQkJc3ZuIGNvbW1pdCAtbSAndGhpcmQgbGluZSBmcm9tIHN2bicgJiYKKwkJc3ZuIGNvbW1pdCAtbSAidGhpcmQgbGluZSBmcm9tIHN2biIgJiYKIAljZCAuLiAmJgogCXJtIC1yZiB0LnN2bgotCSIKKwknCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpcGxlIGRjb21taXQgZnJvbSBnaXQtc3ZuIHdpbGwgbm90IGNsb2JiZXIgc3ZuJyAiCiAJZ2l0IHJlc2V0IC0taGFyZCByZWZzL3JlbW90ZXMvZ2l0LXN2biAmJgpkaWZmIC0tZ2l0IGEvdC90OTEwNi1naXQtc3ZuLWRjb21taXQtY2xvYmJlci1zZXJpZXMuc2ggYi90L3Q5MTA2LWdpdC1zdm4tZGNvbW1pdC1jbG9iYmVyLXNlcmllcy5zaAppbmRleCBjYThhMDBlLi5hNDAwZGM3IDEwMDc1NQotLS0gYS90L3Q5MTA2LWdpdC1zdm4tZGNvbW1pdC1jbG9iYmVyLXNlcmllcy5zaAorKysgYi90L3Q5MTA2LWdpdC1zdm4tZGNvbW1pdC1jbG9iYmVyLXNlcmllcy5zaApAQCAtNCwzMCArNCwzMCBAQAogdGVzdF9kZXNjcmlwdGlvbj0nZ2l0LXN2biBkY29tbWl0IGNsb2JiZXIgc2VyaWVzJwogLiAuL2xpYi1naXQtc3ZuLnNoCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgcmVwbycgIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSByZXBvJyAnCiAJbWtkaXIgaW1wb3J0ICYmCiAJY2QgaW1wb3J0ICYmCi0JYXdrICdCRUdJTiB7IGZvciAoaSA9IDE7IGkgPCA2NDsgaSsrKSB7IHByaW50IGkgfSB9JyA+IGZpbGUKLQlzdm4gaW1wb3J0IC1tICdpbml0aWFsJyAuICRzdm5yZXBvICYmCisJYXdrICJCRUdJTiB7IGZvciAoaSA9IDE7IGkgPCA2NDsgaSsrKSB7IHByaW50IGkgfSB9IiA+IGZpbGUKKwlzdm4gaW1wb3J0IC1tICJpbml0aWFsIiAuICIkc3ZucmVwbyIgJiYKIAljZCAuLiAmJgotCWdpdCBzdm4gaW5pdCAkc3ZucmVwbyAmJgorCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iICYmCiAJZ2l0IHN2biBmZXRjaCAmJgogCXRlc3QgLWUgZmlsZQotCSIKKwknCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJyhzdXBwb3NlZGx5KSBub24tY29uZmxpY3RpbmcgY2hhbmdlIGZyb20gU1ZOJyAiCi0JdGVzdCB4XCJcYHNlZCAtbiAtZSA1OHAgPCBmaWxlXGBcIiA9IHg1OCAmJgotCXRlc3QgeFwiXGBzZWQgLW4gLWUgNjFwIDwgZmlsZVxgXCIgPSB4NjEgJiYKLQlzdm4gY28gJHN2bnJlcG8gdG1wICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcoc3VwcG9zZWRseSkgbm9uLWNvbmZsaWN0aW5nIGNoYW5nZSBmcm9tIFNWTicgJworCXRlc3QgeCJgc2VkIC1uIC1lIDU4cCA8IGZpbGVgIiA9IHg1OCAmJgorCXRlc3QgeCJgc2VkIC1uIC1lIDYxcCA8IGZpbGVgIiA9IHg2MSAmJgorCXN2biBjbyAiJHN2bnJlcG8iIHRtcCAmJgogCWNkIHRtcCAmJgotCQlwZXJsIC1pIC1wIC1lICdzL141OFwkLzU1ODgvJyBmaWxlICYmCi0JCXBlcmwgLWkgLXAgLWUgJ3MvXjYxXCQvNjYxMS8nIGZpbGUgJiYKKwkJcGVybCAtaSAtcCAtZSAicy9eNTgkLzU1ODgvIiBmaWxlICYmCisJCXBlcmwgLWkgLXAgLWUgInMvXjYxJC82NjExLyIgZmlsZSAmJgogCQlwb2tlIGZpbGUgJiYKLQkJdGVzdCB4XCJcYHNlZCAtbiAtZSA1OHAgPCBmaWxlXGBcIiA9IHg1NTg4ICYmCi0JCXRlc3QgeFwiXGBzZWQgLW4gLWUgNjFwIDwgZmlsZVxgXCIgPSB4NjYxMSAmJgotCQlzdm4gY29tbWl0IC1tICc1OCA9PiA1NTg4LCA2MSA9PiA2NjExJyAmJgorCQl0ZXN0IHgiYHNlZCAtbiAtZSA1OHAgPCBmaWxlYCIgPSB4NTU4OCAmJgorCQl0ZXN0IHgiYHNlZCAtbiAtZSA2MXAgPCBmaWxlYCIgPSB4NjYxMSAmJgorCQlzdm4gY29tbWl0IC1tICI1OCA9PiA1NTg4LCA2MSA9PiA2NjExIiAmJgogCQljZCAuLgotCSIKKwknCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NvbWUgdW5yZWxhdGVkIGNoYW5nZXMgdG8gZ2l0JyAiCiAJZWNobyBoaSA+IGxpZmUgJiYKZGlmZiAtLWdpdCBhL3QvdDkxMDctZ2l0LXN2bi1taWdyYXRlLnNoIGIvdC90OTEwNy1naXQtc3ZuLW1pZ3JhdGUuc2gKaW5kZXggMGE0MWQ1Mi4uZDliNTUzYSAxMDA3NTUKLS0tIGEvdC90OTEwNy1naXQtc3ZuLW1pZ3JhdGUuc2gKKysrIGIvdC90OTEwNy1naXQtc3ZuLW1pZ3JhdGUuc2gKQEAgLTMsNjEgKzMsNjEgQEAKIHRlc3RfZGVzY3JpcHRpb249J2dpdC1zdm4gbWV0YWRhdGEgbWlncmF0aW9ucyBmcm9tIHByZXZpb3VzIHZlcnNpb25zJwogLiAuL2xpYi1naXQtc3ZuLnNoCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG9sZC1sb29raW5nIG1ldGFkYXRhJyAiCi0JY3AgJEdJVF9ESVIvY29uZmlnICRHSVRfRElSL2NvbmZpZy1vbGQtZ2l0LXN2biAmJgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgb2xkLWxvb2tpbmcgbWV0YWRhdGEnICcKKwljcCAiJEdJVF9ESVIiL2NvbmZpZyAiJEdJVF9ESVIiL2NvbmZpZy1vbGQtZ2l0LXN2biAmJgogCW1rZGlyIGltcG9ydCAmJgogCWNkIGltcG9ydCAmJgogCQlmb3IgaSBpbiB0cnVuayBicmFuY2hlcy9hIGJyYW5jaGVzL2IgXAogCQkgICAgICAgICB0YWdzLzAuMSB0YWdzLzAuMiB0YWdzLzAuMzsgZG8KLQkJCW1rZGlyIC1wIFwkaSAmJiBcCi0JCQllY2hvIGhlbGxvID4+IFwkaS9SRUFETUUgfHwgZXhpdCAxCisJCQlta2RpciAtcCAkaSAmJiBcCisJCQllY2hvIGhlbGxvID4+ICRpL1JFQURNRSB8fCBleGl0IDEKIAkJZG9uZSAmJiBcCi0JCXN2biBpbXBvcnQgLW0gdGVzdCAuICRzdm5yZXBvCisJCXN2biBpbXBvcnQgLW0gdGVzdCAuICIkc3ZucmVwbyIKIAkJY2QgLi4gJiYKLQlnaXQtc3ZuIGluaXQgJHN2bnJlcG8gJiYKKwlnaXQtc3ZuIGluaXQgIiRzdm5yZXBvIiAmJgogCWdpdC1zdm4gZmV0Y2ggJiYKLQltdiAkR0lUX0RJUi9zdm4vKiAkR0lUX0RJUi8gJiYKLQltdiAkR0lUX0RJUi9zdm4vLm1ldGFkYXRhICRHSVRfRElSLyAmJgotCXJtZGlyICRHSVRfRElSL3N2biAmJgorCW12ICIkR0lUX0RJUiIvc3ZuLyogIiRHSVRfRElSIi8gJiYKKwltdiAiJEdJVF9ESVIiL3N2bi8ubWV0YWRhdGEgIiRHSVRfRElSIi8gJiYKKwlybWRpciAiJEdJVF9ESVIiL3N2biAmJgogCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvZ2l0LXN2bi1IRUFEIHJlZnMvcmVtb3Rlcy9naXQtc3ZuICYmCiAJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9zdm4tSEVBRCByZWZzL3JlbW90ZXMvZ2l0LXN2biAmJgogCWdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvcmVtb3Rlcy9naXQtc3ZuIHJlZnMvcmVtb3Rlcy9naXQtc3ZuCi0JIgorCScKIAogaGVhZD1gZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL2dpdC1zdm4tSEVBRF4wYAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LXN2bi1IRUFEIGlzIGEgcmVhbCBIRUFEJyAidGVzdCAtbiAnJGhlYWQnIgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIG9sZC1zdHlsZSAodjApIGdpdC1zdm4gbGF5b3V0JyAiCi0JbWtkaXIgLXAgJEdJVF9ESVIvZ2l0LXN2bi9pbmZvICRHSVRfRElSL3N2bi9pbmZvICYmCi0JZWNobyAkc3ZucmVwbyA+ICRHSVRfRElSL2dpdC1zdm4vaW5mby91cmwgJiYKLQllY2hvICRzdm5yZXBvID4gJEdJVF9ESVIvc3ZuL2luZm8vdXJsICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIG9sZC1zdHlsZSAodjApIGdpdC1zdm4gbGF5b3V0JyAnCisJbWtkaXIgLXAgIiRHSVRfRElSIi9naXQtc3ZuL2luZm8gIiRHSVRfRElSIi9zdm4vaW5mbyAmJgorCWVjaG8gIiRzdm5yZXBvIiA+ICIkR0lUX0RJUiIvZ2l0LXN2bi9pbmZvL3VybCAmJgorCWVjaG8gIiRzdm5yZXBvIiA+ICIkR0lUX0RJUiIvc3ZuL2luZm8vdXJsICYmCiAJZ2l0LXN2biBtaWdyYXRlICYmCi0JISB0ZXN0IC1kICRHSVRfRElSL2dpdC1zdm4gJiYKKwkhIHRlc3QgLWQgIiRHSVRfRElSIi9naXQtc3ZuICYmCiAJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvZ2l0LXN2bl4wICYmCiAJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvc3ZuXjAgJiYKLQl0ZXN0IFxgZ2l0IGNvbmZpZyAtLWdldCBzdm4tcmVtb3RlLnN2bi51cmxcYCA9ICckc3ZucmVwbycgJiYKLQl0ZXN0IFxgZ2l0IGNvbmZpZyAtLWdldCBzdm4tcmVtb3RlLnN2bi5mZXRjaFxgID0gXAotICAgICAgICAgICAgICc6cmVmcy9yZW1vdGVzL2dpdC1zdm4nCi0JIgorCXRlc3QgIiQoZ2l0IGNvbmZpZyAtLWdldCBzdm4tcmVtb3RlLnN2bi51cmwpIiA9ICIkc3ZucmVwbyIgJiYKKwl0ZXN0IGBnaXQgY29uZmlnIC0tZ2V0IHN2bi1yZW1vdGUuc3ZuLmZldGNoYCA9IFwKKyAgICAgICAgICAgICAiOnJlZnMvcmVtb3Rlcy9naXQtc3ZuIgorCScKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSBhIG11bHRpLXJlcG9zaXRvcnkgcmVwbycgIgotCWdpdC1zdm4gaW5pdCAkc3ZucmVwbyAtVCB0cnVuayAtdCB0YWdzIC1iIGJyYW5jaGVzICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIGEgbXVsdGktcmVwb3NpdG9yeSByZXBvJyAnCisJZ2l0LXN2biBpbml0ICIkc3ZucmVwbyIgLVQgdHJ1bmsgLXQgdGFncyAtYiBicmFuY2hlcyAmJgogCWdpdCBjb25maWcgLS1nZXQtYWxsIHN2bi1yZW1vdGUuc3ZuLmZldGNoID4gZmV0Y2gub3V0ICYmCi0JZ3JlcCAnXnRydW5rOnJlZnMvcmVtb3Rlcy90cnVuayQnIGZldGNoLm91dCAmJgotCXRlc3QgLW4gXCJcYGdpdCBjb25maWcgLS1nZXQgc3ZuLXJlbW90ZS5zdm4uYnJhbmNoZXMgXAotCSAgICAgICAgICAgICdeYnJhbmNoZXMvXCo6cmVmcy9yZW1vdGVzL1wqJCdcYFwiICYmCi0JdGVzdCAtbiBcIlxgZ2l0IGNvbmZpZyAtLWdldCBzdm4tcmVtb3RlLnN2bi50YWdzIFwKLQkgICAgICAgICAgICAnXnRhZ3MvXCo6cmVmcy9yZW1vdGVzL3RhZ3MvXCokJ1xgXCIgJiYKKwlncmVwICJedHJ1bms6cmVmcy9yZW1vdGVzL3RydW5rJCIgZmV0Y2gub3V0ICYmCisJdGVzdCAtbiAiYGdpdCBjb25maWcgLS1nZXQgc3ZuLXJlbW90ZS5zdm4uYnJhbmNoZXMgXAorCSAgICAgICAgICAgICJeYnJhbmNoZXMvXCo6cmVmcy9yZW1vdGVzL1wqJCJgIiAmJgorCXRlc3QgLW4gImBnaXQgY29uZmlnIC0tZ2V0IHN2bi1yZW1vdGUuc3ZuLnRhZ3MgXAorCSAgICAgICAgICAgICJedGFncy9cKjpyZWZzL3JlbW90ZXMvdGFncy9cKiQiYCIgJiYKIAlnaXQgY29uZmlnIC0tdW5zZXQgc3ZuLXJlbW90ZS5zdm4uYnJhbmNoZXMgXAotCSAgICAgICAgICAgICAgICAgICAgICAgICdeYnJhbmNoZXMvXCo6cmVmcy9yZW1vdGVzL1wqJCcgJiYKKwkgICAgICAgICAgICAgICAgICAgICAgICAiXmJyYW5jaGVzL1wqOnJlZnMvcmVtb3Rlcy9cKiQiICYmCiAJZ2l0IGNvbmZpZyAtLXVuc2V0IHN2bi1yZW1vdGUuc3ZuLnRhZ3MgXAotCSAgICAgICAgICAgICAgICAgICAgICAgICdedGFncy9cKjpyZWZzL3JlbW90ZXMvdGFncy9cKiQnICYmCi0JZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi5mZXRjaCAnYnJhbmNoZXMvYTpyZWZzL3JlbW90ZXMvYScgJiYKLQlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLmZldGNoICdicmFuY2hlcy9iOnJlZnMvcmVtb3Rlcy9iJyAmJgorCSAgICAgICAgICAgICAgICAgICAgICAgICJedGFncy9cKjpyZWZzL3JlbW90ZXMvdGFncy9cKiQiICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi5mZXRjaCAiYnJhbmNoZXMvYTpyZWZzL3JlbW90ZXMvYSIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLmZldGNoICJicmFuY2hlcy9iOnJlZnMvcmVtb3Rlcy9iIiAmJgogCWZvciBpIGluIHRhZ3MvMC4xIHRhZ3MvMC4yIHRhZ3MvMC4zOyBkbwogCQlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLmZldGNoIFwKLQkJICAgICAgICAgICAgICAgICBcJGk6cmVmcy9yZW1vdGVzL1wkaSB8fCBleGl0IDE7IGRvbmUKLQkiCisJCSAgICAgICAgICAgICAgICAgJGk6cmVmcy9yZW1vdGVzLyRpIHx8IGV4aXQgMTsgZG9uZQorCScKIAogIyByZWZzIHNob3VsZCBhbGwgYmUgZGlmZmVyZW50LCBidXQgdGhlIHRyZWVzIHNob3VsZCBhbGwgYmUgdGhlIHNhbWU6CiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aS1mZXRjaCB3b3JrcyBvbiBwYXJ0aWFsIHVybHMgKyBwYXRocycgIgpAQCAtNzMsNDMgKzczLDQzIEBACiAJICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnMvcmVtb3Rlcy9cJGpcYFwiIHx8ZXhpdCAxOyBkb25lOyBkb25lCiAJIgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdtaWdyYXRlIC0tbWluaW1pemUgb24gb2xkIGluaXRlZCBsYXlvdXQnICIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pZ3JhdGUgLS1taW5pbWl6ZSBvbiBvbGQgaW5pdGVkIGxheW91dCcgJwogCWdpdCBjb25maWcgLS11bnNldC1hbGwgc3ZuLXJlbW90ZS5zdm4uZmV0Y2ggJiYKIAlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIHN2bi1yZW1vdGUuc3ZuLnVybCAmJgotCXJtIC1yZiAkR0lUX0RJUi9zdm4gJiYKLQlmb3IgaSBpbiBcYGNhdCBmZXRjaC5vdXRcYDsgZG8KLQkJcGF0aD1cYGV4cHIgXCRpIDogJ1xcKFteOl0qXFwpOi4qJCdcYAotCQlyZWY9XGBleHByIFwkaSA6ICdbXjpdKjpyZWZzL3JlbW90ZXMvXFwoLipcXCkkJ1xgCi0JCWlmIHRlc3QgLXogXCJcJHJlZlwiOyB0aGVuIGNvbnRpbnVlOyBmaQotCQlpZiB0ZXN0IC1uIFwiXCRwYXRoXCI7IHRoZW4gcGF0aD1cIi9cJHBhdGhcIjsgZmkKLQkJKCBta2RpciAtcCAkR0lUX0RJUi9zdm4vXCRyZWYvaW5mby8gJiYKLQkJZWNobyAkc3ZucmVwb1wkcGF0aCA+ICRHSVRfRElSL3N2bi9cJHJlZi9pbmZvL3VybCApIHx8IGV4aXQgMTsKKwlybSAtcmYgIiRHSVRfRElSIi9zdm4gJiYKKwlmb3IgaSBpbiBgY2F0IGZldGNoLm91dGA7IGRvCisJCXBhdGg9YGV4cHIgJGkgOiAiXChbXjpdKlwpOi4qJCJgCisJCXJlZj1gZXhwciAkaSA6ICJbXjpdKjpyZWZzL3JlbW90ZXMvXCguKlwpJCJgCisJCWlmIHRlc3QgLXogIiRyZWYiOyB0aGVuIGNvbnRpbnVlOyBmaQorCQlpZiB0ZXN0IC1uICIkcGF0aCI7IHRoZW4gcGF0aD0iLyRwYXRoIjsgZmkKKwkJKCBta2RpciAtcCAiJEdJVF9ESVIiL3N2bi8kcmVmL2luZm8vICYmCisJCWVjaG8gIiRzdm5yZXBvIiRwYXRoID4gIiRHSVRfRElSIi9zdm4vJHJlZi9pbmZvL3VybCApIHx8IGV4aXQgMTsKIAlkb25lICYmCiAJZ2l0LXN2biBtaWdyYXRlIC0tbWluaW1pemUgJiYKLQl0ZXN0IC16IFwiXGBnaXQgY29uZmlnIC1sIHxncmVwIC12ICdec3ZuLXJlbW90ZVwuZ2l0LXN2blwuJ1xgXCIgJiYKKwl0ZXN0IC16ICJgZ2l0IGNvbmZpZyAtbCB8Z3JlcCAtdiAiXnN2bi1yZW1vdGVcLmdpdC1zdm5cLiJgIiAmJgogCWdpdCBjb25maWcgLS1nZXQtYWxsIHN2bi1yZW1vdGUuc3ZuLmZldGNoID4gZmV0Y2gub3V0ICYmCi0JZ3JlcCAnXnRydW5rOnJlZnMvcmVtb3Rlcy90cnVuayQnIGZldGNoLm91dCAmJgotCWdyZXAgJ15icmFuY2hlcy9hOnJlZnMvcmVtb3Rlcy9hJCcgZmV0Y2gub3V0ICYmCi0JZ3JlcCAnXmJyYW5jaGVzL2I6cmVmcy9yZW1vdGVzL2IkJyBmZXRjaC5vdXQgJiYKLQlncmVwICdedGFncy8wXC4xOnJlZnMvcmVtb3Rlcy90YWdzLzBcLjEkJyBmZXRjaC5vdXQgJiYKLQlncmVwICdedGFncy8wXC4yOnJlZnMvcmVtb3Rlcy90YWdzLzBcLjIkJyBmZXRjaC5vdXQgJiYKLQlncmVwICdedGFncy8wXC4zOnJlZnMvcmVtb3Rlcy90YWdzLzBcLjMkJyBmZXRjaC5vdXQKLQlncmVwICdeOnJlZnMvcmVtb3Rlcy9naXQtc3ZuJyBmZXRjaC5vdXQKLQkiCisJZ3JlcCAiXnRydW5rOnJlZnMvcmVtb3Rlcy90cnVuayQiIGZldGNoLm91dCAmJgorCWdyZXAgIl5icmFuY2hlcy9hOnJlZnMvcmVtb3Rlcy9hJCIgZmV0Y2gub3V0ICYmCisJZ3JlcCAiXmJyYW5jaGVzL2I6cmVmcy9yZW1vdGVzL2IkIiBmZXRjaC5vdXQgJiYKKwlncmVwICJedGFncy8wXC4xOnJlZnMvcmVtb3Rlcy90YWdzLzBcLjEkIiBmZXRjaC5vdXQgJiYKKwlncmVwICJedGFncy8wXC4yOnJlZnMvcmVtb3Rlcy90YWdzLzBcLjIkIiBmZXRjaC5vdXQgJiYKKwlncmVwICJedGFncy8wXC4zOnJlZnMvcmVtb3Rlcy90YWdzLzBcLjMkIiBmZXRjaC5vdXQKKwlncmVwICJeOnJlZnMvcmVtb3Rlcy9naXQtc3ZuIiBmZXRjaC5vdXQKKwknCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgICIucmV2X2RiIGF1dG8tY29udmVydGVkIHRvIC5yZXZfbWFwLlVVSUQiICIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgICIucmV2X2RiIGF1dG8tY29udmVydGVkIHRvIC5yZXZfbWFwLlVVSUQiICcKIAlnaXQtc3ZuIGZldGNoIC1pIHRydW5rICYmCi0JdGVzdCAteiBcIlwkKGxzICRHSVRfRElSL3N2bi90cnVuay8ucmV2X2RiLiogMj4vZGV2L251bGwpXCIgJiYKLQlleHBlY3Q9XCJcJChscyAkR0lUX0RJUi9zdm4vdHJ1bmsvLnJldl9tYXAuKilcIiAmJgotCXRlc3QgLW4gXCJcJGV4cGVjdFwiICYmCi0JcmV2X2RiPVwkKGVjaG8gXCRleHBlY3QgfCBzZWQgLWUgJ3MsX21hcCxfZGIsJykgJiYKLQljb252ZXJ0X3RvX3Jldl9kYiBcJGV4cGVjdCBcJHJldl9kYiAmJgotCXJtIC1mIFwkZXhwZWN0ICYmCi0JdGVzdCAtZiBcJHJldl9kYiAmJgorCXRlc3QgLXogIiQobHMgIiRHSVRfRElSIi9zdm4vdHJ1bmsvLnJldl9kYi4qIDI+L2Rldi9udWxsKSIgJiYKKwlleHBlY3Q9IiQobHMgIiRHSVRfRElSIi9zdm4vdHJ1bmsvLnJldl9tYXAuKikiICYmCisJdGVzdCAtbiAiJGV4cGVjdCIgJiYKKwlyZXZfZGI9IiQoZWNobyAkZXhwZWN0IHwgc2VkIC1lICJzLF9tYXAsX2RiLCIpIiAmJgorCWNvbnZlcnRfdG9fcmV2X2RiICIkZXhwZWN0IiAiJHJldl9kYiIgJiYKKwlybSAtZiAiJGV4cGVjdCIgJiYKKwl0ZXN0IC1mICIkcmV2X2RiIiAmJgogCWdpdC1zdm4gZmV0Y2ggLWkgdHJ1bmsgJiYKLQl0ZXN0IC16IFwiXCQobHMgJEdJVF9ESVIvc3ZuL3RydW5rLy5yZXZfZGIuKiAyPi9kZXYvbnVsbClcIiAmJgotCXRlc3QgISAtZSAkR0lUX0RJUi9zdm4vdHJ1bmsvLnJldl9kYiAmJgotCXRlc3QgLWYgXCRleHBlY3QKLQkiCisJdGVzdCAteiAiJChscyAiJEdJVF9ESVIiL3N2bi90cnVuay8ucmV2X2RiLiogMj4vZGV2L251bGwpIiAmJgorCXRlc3QgISAtZSAiJEdJVF9ESVIiL3N2bi90cnVuay8ucmV2X2RiICYmCisJdGVzdCAtZiAiJGV4cGVjdCIKKwknCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEwOC1naXQtc3ZuLWdsb2Iuc2ggYi90L3Q5MTA4LWdpdC1zdm4tZ2xvYi5zaAppbmRleCBkYjQzNDRjLi5mNmY3MWQwIDEwMDc1NQotLS0gYS90L3Q5MTA4LWdpdC1zdm4tZ2xvYi5zaAorKysgYi90L3Q5MTA4LWdpdC1zdm4tZ2xvYi5zaApAQCAtMTAsNzcgKzEwLDc3IEBACiBpbml0aWFsCiBFT0YKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCByZWZzcGVjIGdsb2JiaW5nJyAiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHJlZnNwZWMgZ2xvYmJpbmcnICcKIAlta2RpciAtcCB0cnVuay9zcmMvYSB0cnVuay9zcmMvYiB0cnVuay9kb2MgJiYKLQllY2hvICdoZWxsbyB3b3JsZCcgPiB0cnVuay9zcmMvYS9yZWFkbWUgJiYKLQllY2hvICdnb29kYnllIHdvcmxkJyA+IHRydW5rL3NyYy9iL3JlYWRtZSAmJgotCXN2biBpbXBvcnQgLW0gJ2luaXRpYWwnIHRydW5rICRzdm5yZXBvL3RydW5rICYmCi0Jc3ZuIGNvICRzdm5yZXBvIHRtcCAmJgorCWVjaG8gImhlbGxvIHdvcmxkIiA+IHRydW5rL3NyYy9hL3JlYWRtZSAmJgorCWVjaG8gImdvb2RieWUgd29ybGQiID4gdHJ1bmsvc3JjL2IvcmVhZG1lICYmCisJc3ZuIGltcG9ydCAtbSAiaW5pdGlhbCIgdHJ1bmsgIiRzdm5yZXBvIi90cnVuayAmJgorCXN2biBjbyAiJHN2bnJlcG8iIHRtcCAmJgogCWNkIHRtcCAmJgogCQlta2RpciBicmFuY2hlcyB0YWdzICYmCiAJCXN2biBhZGQgYnJhbmNoZXMgdGFncyAmJgogCQlzdm4gY3AgdHJ1bmsgYnJhbmNoZXMvc3RhcnQgJiYKLQkJc3ZuIGNvbW1pdCAtbSAnc3RhcnQgYSBuZXcgYnJhbmNoJyAmJgorCQlzdm4gY29tbWl0IC1tICJzdGFydCBhIG5ldyBicmFuY2giICYmCiAJCXN2biB1cCAmJgotCQllY2hvICdoaScgPj4gYnJhbmNoZXMvc3RhcnQvc3JjL2IvcmVhZG1lICYmCisJCWVjaG8gImhpIiA+PiBicmFuY2hlcy9zdGFydC9zcmMvYi9yZWFkbWUgJiYKIAkJcG9rZSBicmFuY2hlcy9zdGFydC9zcmMvYi9yZWFkbWUgJiYKLQkJZWNobyAnaGV5JyA+PiBicmFuY2hlcy9zdGFydC9zcmMvYS9yZWFkbWUgJiYKKwkJZWNobyAiaGV5IiA+PiBicmFuY2hlcy9zdGFydC9zcmMvYS9yZWFkbWUgJiYKIAkJcG9rZSBicmFuY2hlcy9zdGFydC9zcmMvYS9yZWFkbWUgJiYKLQkJc3ZuIGNvbW1pdCAtbSAnaGknICYmCisJCXN2biBjb21taXQgLW0gImhpIiAmJgogCQlzdm4gdXAgJiYKIAkJc3ZuIGNwIGJyYW5jaGVzL3N0YXJ0IHRhZ3MvZW5kICYmCi0JCWVjaG8gJ2J5ZScgPj4gdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCisJCWVjaG8gImJ5ZSIgPj4gdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCiAJCXBva2UgdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCi0JCWVjaG8gJ2F5ZScgPj4gdGFncy9lbmQvc3JjL2EvcmVhZG1lICYmCisJCWVjaG8gImF5ZSIgPj4gdGFncy9lbmQvc3JjL2EvcmVhZG1lICYmCiAJCXBva2UgdGFncy9lbmQvc3JjL2EvcmVhZG1lICYmCi0JCXN2biBjb21taXQgLW0gJ3RoZSBlbmQnICYmCi0JCWVjaG8gJ2J5ZWJ5ZScgPj4gdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCisJCXN2biBjb21taXQgLW0gInRoZSBlbmQiICYmCisJCWVjaG8gImJ5ZWJ5ZSIgPj4gdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCiAJCXBva2UgdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCi0JCXN2biBjb21taXQgLW0gJ25vdGhpbmcgdG8gc2VlIGhlcmUnCisJCXN2biBjb21taXQgLW0gIm5vdGhpbmcgdG8gc2VlIGhlcmUiCiAJCWNkIC4uICYmCi0JZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi51cmwgJHN2bnJlcG8gJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLnVybCAiJHN2bnJlcG8iICYmCiAJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi5mZXRjaCBcCi0JICAgICAgICAgICAgICAgICAndHJ1bmsvc3JjL2E6cmVmcy9yZW1vdGVzL3RydW5rJyAmJgorCSAgICAgICAgICAgICAgICAgInRydW5rL3NyYy9hOnJlZnMvcmVtb3Rlcy90cnVuayIgJiYKIAlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLmJyYW5jaGVzIFwKLQkgICAgICAgICAgICAgICAgICdicmFuY2hlcy8qL3NyYy9hOnJlZnMvcmVtb3Rlcy9icmFuY2hlcy8qJyAmJgorCSAgICAgICAgICAgICAgICAgImJyYW5jaGVzLyovc3JjL2E6cmVmcy9yZW1vdGVzL2JyYW5jaGVzLyoiICYmCiAJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi50YWdzXAotCSAgICAgICAgICAgICAgICAgJ3RhZ3MvKi9zcmMvYTpyZWZzL3JlbW90ZXMvdGFncy8qJyAmJgorCSAgICAgICAgICAgICAgICAgInRhZ3MvKi9zcmMvYTpyZWZzL3JlbW90ZXMvdGFncy8qIiAmJgogCWdpdC1zdm4gbXVsdGktZmV0Y2ggJiYKIAlnaXQgbG9nIC0tcHJldHR5PW9uZWxpbmUgcmVmcy9yZW1vdGVzL3RhZ3MvZW5kIHwgXAotCSAgICBzZWQgLWUgJ3MvXi5cezQxXH0vLycgPiBvdXRwdXQuZW5kICYmCisJICAgIHNlZCAtZSAicy9eLlx7NDFcfS8vIiA+IG91dHB1dC5lbmQgJiYKIAljbXAgZXhwZWN0LmVuZCBvdXRwdXQuZW5kICYmCi0JdGVzdCBcIlxgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdGFncy9lbmR+MVxgXCIgPSBcCi0JCVwiXGBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9icmFuY2hlcy9zdGFydFxgXCIgJiYKLQl0ZXN0IFwiXGBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9icmFuY2hlcy9zdGFydH4yXGBcIiA9IFwKLQkJXCJcYGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3RydW5rXGBcIgotCSIKKwl0ZXN0ICJgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdGFncy9lbmR+MWAiID0gXAorCQkiYGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL2JyYW5jaGVzL3N0YXJ0YCIgJiYKKwl0ZXN0ICJgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvYnJhbmNoZXMvc3RhcnR+MmAiID0gXAorCQkiYGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3RydW5rYCIKKwknCiAKIGVjaG8gdHJ5IHRvIHRyeSA+IGV4cGVjdC50d28KIGVjaG8gbm90aGluZyB0byBzZWUgaGVyZSA+PiBleHBlY3QudHdvCiBjYXQgZXhwZWN0LmVuZCA+PiBleHBlY3QudHdvCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgbGVmdC1oYW5kLXNpZGUgb25seSBnbG9iYmluZycgIgotCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS50d28udXJsICRzdm5yZXBvICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGxlZnQtaGFuZC1zaWRlIG9ubHkgZ2xvYmJpbmcnICcKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUudHdvLnVybCAiJHN2bnJlcG8iICYmCiAJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnR3by5mZXRjaCB0cnVuazpyZWZzL3JlbW90ZXMvdHdvL3RydW5rICYmCiAJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnR3by5icmFuY2hlcyBcCi0JICAgICAgICAgICAgICAgICAnYnJhbmNoZXMvKjpyZWZzL3JlbW90ZXMvdHdvL2JyYW5jaGVzLyonICYmCisJICAgICAgICAgICAgICAgICAiYnJhbmNoZXMvKjpyZWZzL3JlbW90ZXMvdHdvL2JyYW5jaGVzLyoiICYmCiAJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnR3by50YWdzIFwKLQkgICAgICAgICAgICAgICAgICd0YWdzLyo6cmVmcy9yZW1vdGVzL3R3by90YWdzLyonICYmCisJICAgICAgICAgICAgICAgICAidGFncy8qOnJlZnMvcmVtb3Rlcy90d28vdGFncy8qIiAmJgogCWNkIHRtcCAmJgotCQllY2hvICd0cnkgdHJ5JyA+PiB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKKwkJZWNobyAidHJ5IHRyeSIgPj4gdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCiAJCXBva2UgdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCi0JCXN2biBjb21taXQgLW0gJ3RyeSB0byB0cnknCisJCXN2biBjb21taXQgLW0gInRyeSB0byB0cnkiCiAJCWNkIC4uICYmCiAJZ2l0LXN2biBmZXRjaCB0d28gJiYKLQl0ZXN0IFxgZ2l0IHJldi1saXN0IHJlZnMvcmVtb3Rlcy90d28vdGFncy9lbmQgfCB3YyAtbFxgIC1lcSA2ICYmCi0JdGVzdCBcYGdpdCByZXYtbGlzdCByZWZzL3JlbW90ZXMvdHdvL2JyYW5jaGVzL3N0YXJ0IHwgd2MgLWxcYCAtZXEgMyAmJgotCXRlc3QgXGBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90d28vYnJhbmNoZXMvc3RhcnR+MlxgID0gXAotCSAgICAgXGBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90d28vdHJ1bmtcYCAmJgotCXRlc3QgXGBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90d28vdGFncy9lbmR+M1xgID0gXAotCSAgICAgXGBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90d28vYnJhbmNoZXMvc3RhcnRcYCAmJgorCXRlc3QgYGdpdCByZXYtbGlzdCByZWZzL3JlbW90ZXMvdHdvL3RhZ3MvZW5kIHwgd2MgLWxgIC1lcSA2ICYmCisJdGVzdCBgZ2l0IHJldi1saXN0IHJlZnMvcmVtb3Rlcy90d28vYnJhbmNoZXMvc3RhcnQgfCB3YyAtbGAgLWVxIDMgJiYKKwl0ZXN0IGBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90d28vYnJhbmNoZXMvc3RhcnR+MmAgPSBcCisJICAgICBgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdHdvL3RydW5rYCAmJgorCXRlc3QgYGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3R3by90YWdzL2VuZH4zYCA9IFwKKwkgICAgIGBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90d28vYnJhbmNoZXMvc3RhcnRgICYmCiAJZ2l0IGxvZyAtLXByZXR0eT1vbmVsaW5lIHJlZnMvcmVtb3Rlcy90d28vdGFncy9lbmQgfCBcCi0JICAgIHNlZCAtZSAncy9eLlx7NDFcfS8vJyA+IG91dHB1dC50d28gJiYKKwkgICAgc2VkIC1lICJzL14uXHs0MVx9Ly8iID4gb3V0cHV0LnR3byAmJgogCWNtcCBleHBlY3QudHdvIG91dHB1dC50d28KLQkiCisJJwogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMTAtZ2l0LXN2bi11c2Utc3ZtLXByb3BzLnNoIGIvdC90OTExMC1naXQtc3ZuLXVzZS1zdm0tcHJvcHMuc2gKaW5kZXggNjIzNWFmNC4uMDQ3NjU5ZiAxMDA3NTUKLS0tIGEvdC90OTExMC1naXQtc3ZuLXVzZS1zdm0tcHJvcHMuc2gKKysrIGIvdC90OTExMC1naXQtc3ZuLXVzZS1zdm0tcHJvcHMuc2gKQEAgLTcsMTUgKzcsMTUgQEAKIAogLiAuL2xpYi1naXQtc3ZuLnNoCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvYWQgc3ZtIHJlcG8nICIKLQlzdm5hZG1pbiBsb2FkIC1xICRyYXdzdm5yZXBvIDwgLi4vdDkxMTAvc3ZtLmR1bXAgJiYKLQlnaXQtc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLVIgYXJyIC1pIGJhciAkc3ZucmVwby9taXJyb3IvYXJyICYmCi0JZ2l0LXN2biBpbml0IC0tbWluaW1pemUtdXJsIC1SIGFyZ2ggLWkgZGlyICRzdm5yZXBvL21pcnJvci9hcmdoICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2FkIHN2bSByZXBvJyAnCisJc3ZuYWRtaW4gbG9hZCAtcSAiJHJhd3N2bnJlcG8iIDwgLi4vdDkxMTAvc3ZtLmR1bXAgJiYKKwlnaXQtc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLVIgYXJyIC1pIGJhciAiJHN2bnJlcG8iL21pcnJvci9hcnIgJiYKKwlnaXQtc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLVIgYXJnaCAtaSBkaXIgIiRzdm5yZXBvIi9taXJyb3IvYXJnaCAmJgogCWdpdC1zdm4gaW5pdCAtLW1pbmltaXplLXVybCAtUiBhcmdoIC1pIGUgXAotCSAgJHN2bnJlcG8vbWlycm9yL2FyZ2gvYS9iL2MvZC9lICYmCisJICAiJHN2bnJlcG8iL21pcnJvci9hcmdoL2EvYi9jL2QvZSAmJgogCWdpdCBjb25maWcgc3ZuLnVzZVN2bVByb3BzIHRydWUgJiYKIAlnaXQtc3ZuIGZldGNoIC0tYWxsCi0JIgorCScKIAogdXVpZD0xNjFjZTQyOS1hOWRkLTQ4MjgtYWY0YS01MjAyM2Y5NjhjODkKIApkaWZmIC0tZ2l0IGEvdC90OTExMS1naXQtc3ZuLXVzZS1zdm5zeW5jLXByb3BzLnNoIGIvdC90OTExMS1naXQtc3ZuLXVzZS1zdm5zeW5jLXByb3BzLnNoCmluZGV4IGVjN2RlZGQuLmE4ZDc0ZGMgMTAwNzU1Ci0tLSBhL3QvdDkxMTEtZ2l0LXN2bi11c2Utc3Zuc3luYy1wcm9wcy5zaAorKysgYi90L3Q5MTExLWdpdC1zdm4tdXNlLXN2bnN5bmMtcHJvcHMuc2gKQEAgLTcsMTQgKzcsMTQgQEAKIAogLiAuL2xpYi1naXQtc3ZuLnNoCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvYWQgc3Zuc3luYyByZXBvJyAiCi0Jc3ZuYWRtaW4gbG9hZCAtcSAkcmF3c3ZucmVwbyA8IC4uL3Q5MTExL3N2bnN5bmMuZHVtcCAmJgotCWdpdC1zdm4gaW5pdCAtLW1pbmltaXplLXVybCAtUiBhcnIgLWkgYmFyICRzdm5yZXBvL2JhciAmJgotCWdpdC1zdm4gaW5pdCAtLW1pbmltaXplLXVybCAtUiBhcmdoIC1pIGRpciAkc3ZucmVwby9kaXIgJiYKLQlnaXQtc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLVIgYXJnaCAtaSBlICRzdm5yZXBvL2Rpci9hL2IvYy9kL2UgJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvYWQgc3Zuc3luYyByZXBvJyAnCisJc3ZuYWRtaW4gbG9hZCAtcSAiJHJhd3N2bnJlcG8iIDwgLi4vdDkxMTEvc3Zuc3luYy5kdW1wICYmCisJZ2l0LXN2biBpbml0IC0tbWluaW1pemUtdXJsIC1SIGFyciAtaSBiYXIgIiRzdm5yZXBvIi9iYXIgJiYKKwlnaXQtc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLVIgYXJnaCAtaSBkaXIgIiRzdm5yZXBvIi9kaXIgJiYKKwlnaXQtc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLVIgYXJnaCAtaSBlICIkc3ZucmVwbyIvZGlyL2EvYi9jL2QvZSAmJgogCWdpdCBjb25maWcgc3ZuLnVzZVN2bnN5bmNQcm9wcyB0cnVlICYmCiAJZ2l0LXN2biBmZXRjaCAtLWFsbAotCSIKKwknCiAKIHV1aWQ9MTYxY2U0MjktYTlkZC00ODI4LWFmNGEtNTIwMjNmOTY4Yzg5CiAKZGlmZiAtLWdpdCBhL3QvdDkxMTItZ2l0LXN2bi1tZDVsZXNzLWZpbGUuc2ggYi90L3Q5MTEyLWdpdC1zdm4tbWQ1bGVzcy1maWxlLnNoCmluZGV4IDY0NmE1ZjAuLmQ0NzBhOTIgMTAwNzU1Ci0tLSBhL3QvdDkxMTItZ2l0LXN2bi1tZDVsZXNzLWZpbGUuc2gKKysrIGIvdC90OTExMi1naXQtc3ZuLW1kNWxlc3MtZmlsZS5zaApAQCAtNDAsOCArNDAsOCBAQAogCiBFT0YKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9hZCBzdm4gZHVtcGZpbGUnICJzdm5hZG1pbiBsb2FkICRyYXdzdm5yZXBvIDwgZHVtcGZpbGUuc3ZuIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9hZCBzdm4gZHVtcGZpbGUnICdzdm5hZG1pbiBsb2FkICIkcmF3c3ZucmVwbyIgPCBkdW1wZmlsZS5zdm4nCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgZ2l0LXN2bicgImdpdC1zdm4gaW5pdCAkc3ZucmVwbyIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgZ2l0LXN2bicgJ2dpdC1zdm4gaW5pdCAiJHN2bnJlcG8iJwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggcmV2aXNpb25zIGZyb20gc3ZuJyAnZ2l0LXN2biBmZXRjaCcKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTExMy1naXQtc3ZuLWRjb21taXQtbmV3LWZpbGUuc2ggYi90L3Q5MTEzLWdpdC1zdm4tZGNvbW1pdC1uZXctZmlsZS5zaAppbmRleCA5ZWYwZGI5Li4zMWM5MjliIDEwMDc1NQotLS0gYS90L3Q5MTEzLWdpdC1zdm4tZGNvbW1pdC1uZXctZmlsZS5zaAorKysgYi90L3Q5MTEzLWdpdC1zdm4tZGNvbW1pdC1uZXctZmlsZS5zaApAQCAtMTUsMTggKzE1LDE4IEBACiAKIHN0YXJ0X3N2bnNlcnZlICgpIHsKIAlzdm5zZXJ2ZSAtLWxpc3Rlbi1wb3J0ICRTVk5TRVJWRV9QT1JUIFwKLQkgICAgICAgICAtLXJvb3QgJHJhd3N2bnJlcG8gXAorCSAgICAgICAgIC0tcm9vdCAiJHJhd3N2bnJlcG8iIFwKIAkgICAgICAgICAtLWxpc3Rlbi1vbmNlIFwKIAkgICAgICAgICAtLWxpc3Rlbi1ob3N0IDEyNy4wLjAuMSAmCiB9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHRyYWNraW5nIGFuIGVtcHR5IHJlcG8nICIKLQlzdm4gbWtkaXIgLW0gJ2VtcHR5IGRpcicgJHN2bnJlcG8vZW1wdHktZGlyICYmCi0JZWNobyBhbm9uLWFjY2VzcyA9IHdyaXRlID4+ICRyYXdzdm5yZXBvL2NvbmYvc3Zuc2VydmUuY29uZiAmJgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnQgdHJhY2tpbmcgYW4gZW1wdHkgcmVwbycgJworCXN2biBta2RpciAtbSAiZW1wdHkgZGlyIiAiJHN2bnJlcG8iL2VtcHR5LWRpciAmJgorCWVjaG8gYW5vbi1hY2Nlc3MgPSB3cml0ZSA+PiAiJHJhd3N2bnJlcG8iL2NvbmYvc3Zuc2VydmUuY29uZiAmJgogCXN0YXJ0X3N2bnNlcnZlICYmCiAJZ2l0IHN2biBpbml0IHN2bjovLzEyNy4wLjAuMTokU1ZOU0VSVkVfUE9SVCAmJgogCWdpdCBzdm4gZmV0Y2gKLQkiCisJJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgZmlsZXMgaW4gbmV3IGRpcmVjdG9yeSB3aXRoIGRjb21taXQnICIKIAlta2RpciBnaXQtbmV3LWRpciAmJgpkaWZmIC0tZ2l0IGEvdC90OTExNC1naXQtc3ZuLWRjb21taXQtbWVyZ2Uuc2ggYi90L3Q5MTE0LWdpdC1zdm4tZGNvbW1pdC1tZXJnZS5zaAppbmRleCAyMjUwNjBiLi42MWQ3NzgxIDEwMDc1NQotLS0gYS90L3Q5MTE0LWdpdC1zdm4tZGNvbW1pdC1tZXJnZS5zaAorKysgYi90L3Q5MTE0LWdpdC1zdm4tZGNvbW1pdC1tZXJnZS5zaApAQCAtMzQsMzUgKzM0LDM1IEBACiBFT0YKIH0KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3ZuIHJlcG9zaXRvcnknICIKLQlzdm4gY28gJHN2bnJlcG8gbXlzdm53b3JrICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzdm4gcmVwb3NpdG9yeScgJworCXN2biBjbyAiJHN2bnJlcG8iIG15c3Zud29yayAmJgogCW1rZGlyIC1wIG15c3Zud29yay90cnVuayAmJgogCWNkIG15c3Zud29yayAmJgogCQliaWdfdGV4dF9ibG9jayA+PiB0cnVuay9SRUFETUUgJiYKIAkJc3ZuIGFkZCB0cnVuayAmJgotCQlzdm4gY2kgLW0gJ2ZpcnN0IGNvbW1pdCcgdHJ1bmsgJiYKKwkJc3ZuIGNpIC1tICJmaXJzdCBjb21taXQiIHRydW5rICYmCiAJCWNkIC4uCi0JIgorCScKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZ2l0IG1pcnJvciBhbmQgbWVyZ2UnICIKLQlnaXQgc3ZuIGluaXQgJHN2bnJlcG8gLXQgdGFncyAtVCB0cnVuayAtYiBicmFuY2hlcyAmJgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZ2l0IG1pcnJvciBhbmQgbWVyZ2UnICcKKwlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIiAtdCB0YWdzIC1UIHRydW5rIC1iIGJyYW5jaGVzICYmCiAJZ2l0IHN2biBmZXRjaCAmJgogCWdpdCBjaGVja291dCAtLXRyYWNrIC1iIHN2biByZW1vdGVzL3RydW5rICYmCiAJZ2l0IGNoZWNrb3V0IC1iIG1lcmdlICYmCiAJZWNobyBuZXcgZmlsZSA+IG5ld19maWxlICYmCiAJZ2l0IGFkZCBuZXdfZmlsZSAmJgotCWdpdCBjb21taXQgLWEgLW0gJ05ldyBmaWxlJyAmJgorCWdpdCBjb21taXQgLWEgLW0gIk5ldyBmaWxlIiAmJgogCWVjaG8gaGVsbG8gPj4gUkVBRE1FICYmCi0JZ2l0IGNvbW1pdCAtYSAtbSAnaGVsbG8nICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiaGVsbG8iICYmCiAJZWNobyBhZGQgc29tZSBzdHVmZiA+PiBuZXdfZmlsZSAmJgotCWdpdCBjb21taXQgLWEgLW0gJ2FkZCBzb21lIHN0dWZmJyAmJgorCWdpdCBjb21taXQgLWEgLW0gImFkZCBzb21lIHN0dWZmIiAmJgogCWdpdCBjaGVja291dCBzdm4gJiYKIAltdiAtZiBSRUFETUUgdG1wICYmCiAJZWNobyBmcmllbmQgPiBSRUFETUUgJiYKIAljYXQgdG1wID4+IFJFQURNRSAmJgotCWdpdCBjb21taXQgLWEgLW0gJ2ZyaWVuZCcgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJmcmllbmQiICYmCiAJZ2l0IHB1bGwgLiBtZXJnZQotCSIKKwknCiAKIHRlc3RfZGVidWcgJ2dpdGsgLS1hbGwgJiBzbGVlcCAxJwogCmRpZmYgLS1naXQgYS90L3Q5MTE1LWdpdC1zdm4tZGNvbW1pdC1mdW5reS1yZW5hbWVzLnNoIGIvdC90OTExNS1naXQtc3ZuLWRjb21taXQtZnVua3ktcmVuYW1lcy5zaAppbmRleCAxODIyOTljLi5mMGZiZDNhIDEwMDc1NQotLS0gYS90L3Q5MTE1LWdpdC1zdm4tZGNvbW1pdC1mdW5reS1yZW5hbWVzLnNoCisrKyBiL3QvdDkxMTUtZ2l0LXN2bi1kY29tbWl0LWZ1bmt5LXJlbmFtZXMuc2gKQEAgLTcsMTYgKzcsMTYgQEAKIAogLiAuL2xpYi1naXQtc3ZuLnNoCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvYWQgcmVwb3NpdG9yeSB3aXRoIHN0cmFuZ2UgbmFtZXMnICIKLQlzdm5hZG1pbiBsb2FkIC1xICRyYXdzdm5yZXBvIDwgLi4vdDkxMTUvZnVua3ktbmFtZXMuZHVtcCAmJgotCXN0YXJ0X2h0dHBkCi0JIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9hZCByZXBvc2l0b3J5IHdpdGggc3RyYW5nZSBuYW1lcycgJworCXN2bmFkbWluIGxvYWQgLXEgIiRyYXdzdm5yZXBvIiA8IC4uL3Q5MTE1L2Z1bmt5LW5hbWVzLmR1bXAgJiYKKwlzdGFydF9odHRwZCBndGsrCisJJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IGFuZCBmZXRjaCByZXBvc2l0b3J5JyAiCi0JZ2l0IHN2biBpbml0ICRzdm5yZXBvICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IGFuZCBmZXRjaCByZXBvc2l0b3J5JyAnCisJZ2l0IHN2biBpbml0ICIkc3ZucmVwbyIgJiYKIAlnaXQgc3ZuIGZldGNoICYmCiAJZ2l0IHJlc2V0IC0taGFyZCBnaXQtc3ZuCi0JIgorCScKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGZpbGUgaW4gZXhpc3RpbmcgdWdseSBhbmQgZW1wdHkgZGlyJyAnCiAJbWtkaXIgIiN7YmFkX2RpcmVjdG9yeV9uYW1lfSIgJiYKQEAgLTQ5LDYgKzQ5LDM5IEBACiAJZ2l0IHN2biBkY29tbWl0CiAJJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgYSBmaWxlIHdpdGggcGx1cyBzaWducycgJworCWVjaG8gLi4gPiArXysgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkICtfKyAmJgorCWdpdCBjb21taXQgLW0gcGx1cyAmJgorCW1rZGlyIGd0aysgJiYKKwlnaXQgbXYgK18rIGd0aysvXytfICYmCisJZ2l0IGNvbW1pdCAtbSBwbHVzX2RpciAmJgorCWdpdCBzdm4gZGNvbW1pdAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdGhlIHJlcG9zaXRvcnkgdG8gdGVzdCByZWJhc2UnICcKKwlnaXQgc3ZuIGNsb25lICIkc3ZucmVwbyIgdGVzdC1yZWJhc2UgJiYKKwljZCB0ZXN0LXJlYmFzZSAmJgorCQllY2hvIHRlc3QtcmViYXNlID4gdGVzdC1yZWJhc2UgJiYKKwkJZ2l0IGFkZCB0ZXN0LXJlYmFzZSAmJgorCQlnaXQgY29tbWl0IC1tIHRlc3QtcmViYXNlICYmCisJCWNkIC4uCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWtlIGEgY29tbWl0IHRvIHRlc3QgcmViYXNlJyAnCisJCWVjaG8gdGVzdC1yZWJhc2UtbWFpbiA+IHRlc3QtcmViYXNlLW1haW4gJiYKKwkJZ2l0IGFkZCB0ZXN0LXJlYmFzZS1tYWluICYmCisJCWdpdCBjb21taXQgLW0gdGVzdC1yZWJhc2UtbWFpbiAmJgorCQlnaXQgc3ZuIGRjb21taXQKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1zdm4gcmViYXNlIHdvcmtzIGluc2lkZSBhIGZyZXNoLWNsb25lZCByZXBvc2l0b3J5JyAnCisJY2QgdGVzdC1yZWJhc2UgJiYKKwkJZ2l0IHN2biByZWJhc2UgJiYKKwkJdGVzdCAtZSB0ZXN0LXJlYmFzZS1tYWluICYmCisJCXRlc3QgLWUgdGVzdC1yZWJhc2UKKwknCisKIHN0b3BfaHR0cGQKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTE2LWdpdC1zdm4tbG9nLnNoIGIvdC90OTExNi1naXQtc3ZuLWxvZy5zaAppbmRleCBlMWU4YmRmLi40YjJjYzg3IDEwMDc1NQotLS0gYS90L3Q5MTE2LWdpdC1zdm4tbG9nLnNoCisrKyBiL3QvdDkxMTYtZ2l0LXN2bi1sb2cuc2gKQEAgLTYsMTcgKzYsMTcgQEAKIHRlc3RfZGVzY3JpcHRpb249J2dpdC1zdm4gbG9nIHRlc3RzJwogLiAuL2xpYi1naXQtc3ZuLnNoCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG9zaXRvcnkgYW5kIGltcG9ydCcgIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVwb3NpdG9yeSBhbmQgaW1wb3J0JyAnCiAJbWtkaXIgaW1wb3J0ICYmCiAJY2QgaW1wb3J0ICYmCiAJCWZvciBpIGluIHRydW5rIGJyYW5jaGVzL2EgYnJhbmNoZXMvYiBcCiAJCSAgICAgICAgIHRhZ3MvMC4xIHRhZ3MvMC4yIHRhZ3MvMC4zOyBkbwotCQkJbWtkaXIgLXAgXCRpICYmIFwKLQkJCWVjaG8gaGVsbG8gPj4gXCRpL1JFQURNRSB8fCBleGl0IDEKKwkJCW1rZGlyIC1wICRpICYmIFwKKwkJCWVjaG8gaGVsbG8gPj4gJGkvUkVBRE1FIHx8IGV4aXQgMQogCQlkb25lICYmIFwKLQkJc3ZuIGltcG9ydCAtbSB0ZXN0IC4gJHN2bnJlcG8KKwkJc3ZuIGltcG9ydCAtbSB0ZXN0IC4gIiRzdm5yZXBvIgogCQljZCAuLiAmJgotCWdpdC1zdm4gaW5pdCAkc3ZucmVwbyAtVCB0cnVuayAtYiBicmFuY2hlcyAtdCB0YWdzICYmCisJZ2l0LXN2biBpbml0ICIkc3ZucmVwbyIgLVQgdHJ1bmsgLWIgYnJhbmNoZXMgLXQgdGFncyAmJgogCWdpdC1zdm4gZmV0Y2ggJiYKIAlnaXQgcmVzZXQgLS1oYXJkIHRydW5rICYmCiAJZWNobyBieWUgPj4gUkVBRE1FICYmCkBAIC0zNyw3ICszNyw3IEBACiAJZWNobyB0cnkgPj4gUkVBRE1FICYmCiAJZ2l0IGNvbW1pdCAtYSAtbSB0cnkgJiYKIAlnaXQgc3ZuIGRjb21taXQKLQkiCisJJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdydW4gbG9nJyAiCiAJZ2l0IHJlc2V0IC0taGFyZCBhICYmCmRpZmYgLS1naXQgYS90L3Q5MTE3LWdpdC1zdm4taW5pdC1jbG9uZS5zaCBiL3QvdDkxMTctZ2l0LXN2bi1pbml0LWNsb25lLnNoCmluZGV4IGQ0ODJiNDAuLjdhNjg5YmIgMTAwNzU1Ci0tLSBhL3QvdDkxMTctZ2l0LXN2bi1pbml0LWNsb25lLnNoCisrKyBiL3QvdDkxMTctZ2l0LXN2bi1pbml0LWNsb25lLnNoCkBAIC0xMyw0MyArMTMsNDMgQEAKIG1rZGlyIHRtcAogY2QgdG1wCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN2bnJlcG8nICIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN2bnJlcG8nICcKIAlta2RpciBwcm9qZWN0IHByb2plY3QvdHJ1bmsgcHJvamVjdC9icmFuY2hlcyBwcm9qZWN0L3RhZ3MgJiYKIAllY2hvIGZvbyA+IHByb2plY3QvdHJ1bmsvZm9vICYmCi0Jc3ZuIGltcG9ydCAtbSAnJHRlc3RfZGVzY3JpcHRpb24nIHByb2plY3QgJHN2bnJlcG8vcHJvamVjdCAmJgorCXN2biBpbXBvcnQgLW0gIiR0ZXN0X2Rlc2NyaXB0aW9uIiBwcm9qZWN0ICIkc3ZucmVwbyIvcHJvamVjdCAmJgogCXJtIC1yZiBwcm9qZWN0Ci0JIgorCScKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFzaWMgY2xvbmUnICIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jhc2ljIGNsb25lJyAnCiAJdGVzdCAhIC1kIHRydW5rICYmCi0JZ2l0IHN2biBjbG9uZSAkc3ZucmVwby9wcm9qZWN0L3RydW5rICYmCisJZ2l0IHN2biBjbG9uZSAiJHN2bnJlcG8iL3Byb2plY3QvdHJ1bmsgJiYKIAl0ZXN0IC1kIHRydW5rLy5naXQvc3ZuICYmCiAJdGVzdCAtZSB0cnVuay9mb28gJiYKIAlybSAtcmYgdHJ1bmsKLQkiCisJJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB0byB0YXJnZXQgZGlyZWN0b3J5JyAiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB0byB0YXJnZXQgZGlyZWN0b3J5JyAnCiAJdGVzdCAhIC1kIHRhcmdldCAmJgotCWdpdCBzdm4gY2xvbmUgJHN2bnJlcG8vcHJvamVjdC90cnVuayB0YXJnZXQgJiYKKwlnaXQgc3ZuIGNsb25lICIkc3ZucmVwbyIvcHJvamVjdC90cnVuayB0YXJnZXQgJiYKIAl0ZXN0IC1kIHRhcmdldC8uZ2l0L3N2biAmJgogCXRlc3QgLWUgdGFyZ2V0L2ZvbyAmJgogCXJtIC1yZiB0YXJnZXQKLQkiCisJJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB3aXRoIC0tc3RkbGF5b3V0JyAiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB3aXRoIC0tc3RkbGF5b3V0JyAnCiAJdGVzdCAhIC1kIHByb2plY3QgJiYKLQlnaXQgc3ZuIGNsb25lIC1zICRzdm5yZXBvL3Byb2plY3QgJiYKKwlnaXQgc3ZuIGNsb25lIC1zICIkc3ZucmVwbyIvcHJvamVjdCAmJgogCXRlc3QgLWQgcHJvamVjdC8uZ2l0L3N2biAmJgogCXRlc3QgLWUgcHJvamVjdC9mb28gJiYKIAlybSAtcmYgcHJvamVjdAotCSIKKwknCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHRvIHRhcmdldCBkaXJlY3Rvcnkgd2l0aCAtLXN0ZGxheW91dCcgIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdG8gdGFyZ2V0IGRpcmVjdG9yeSB3aXRoIC0tc3RkbGF5b3V0JyAnCiAJdGVzdCAhIC1kIHRhcmdldCAmJgotCWdpdCBzdm4gY2xvbmUgLXMgJHN2bnJlcG8vcHJvamVjdCB0YXJnZXQgJiYKKwlnaXQgc3ZuIGNsb25lIC1zICIkc3ZucmVwbyIvcHJvamVjdCB0YXJnZXQgJiYKIAl0ZXN0IC1kIHRhcmdldC8uZ2l0L3N2biAmJgogCXRlc3QgLWUgdGFyZ2V0L2ZvbyAmJgogCXJtIC1yZiB0YXJnZXQKLQkiCisJJwogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMTgtZ2l0LXN2bi1mdW5reS1icmFuY2gtbmFtZXMuc2ggYi90L3Q5MTE4LWdpdC1zdm4tZnVua3ktYnJhbmNoLW5hbWVzLnNoCmluZGV4IDY0MGJiMDYuLjMyODFjYmQgMTAwNzU1Ci0tLSBhL3QvdDkxMTgtZ2l0LXN2bi1mdW5reS1icmFuY2gtbmFtZXMuc2gKKysrIGIvdC90OTExOC1naXQtc3ZuLWZ1bmt5LWJyYW5jaC1uYW1lcy5zaApAQCAtNiwyNSArNiwyNSBAQAogdGVzdF9kZXNjcmlwdGlvbj0nZ2l0LXN2biBmdW5reSBicmFuY2ggbmFtZXMnCiAuIC4vbGliLWdpdC1zdm4uc2gKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3ZucmVwbycgIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3ZucmVwbycgJwogCW1rZGlyIHByb2plY3QgcHJvamVjdC90cnVuayBwcm9qZWN0L2JyYW5jaGVzIHByb2plY3QvdGFncyAmJgogCWVjaG8gZm9vID4gcHJvamVjdC90cnVuay9mb28gJiYKLQlzdm4gaW1wb3J0IC1tICckdGVzdF9kZXNjcmlwdGlvbicgcHJvamVjdCBcIiRzdm5yZXBvL3ByIGplY3RcIiAmJgorCXN2biBpbXBvcnQgLW0gIiR0ZXN0X2Rlc2NyaXB0aW9uIiBwcm9qZWN0ICIkc3ZucmVwby9wciBqZWN0IiAmJgogCXJtIC1yZiBwcm9qZWN0ICYmCi0Jc3ZuIGNwIC1tICdmdW4nIFwiJHN2bnJlcG8vcHIgamVjdC90cnVua1wiIFwKLQkgICAgICAgICAgICAgICAgXCIkc3ZucmVwby9wciBqZWN0L2JyYW5jaGVzL2Z1biBwbHVnaW5cIiAmJgotCXN2biBjcCAtbSAnbW9yZSBmdW4hJyBcIiRzdm5yZXBvL3ByIGplY3QvYnJhbmNoZXMvZnVuIHBsdWdpblwiIFwKLQkgICAgICAgICAgICAgICAgICAgICAgXCIkc3ZucmVwby9wciBqZWN0L2JyYW5jaGVzL21vcmUgZnVuIHBsdWdpbiFcIiAmJgorCXN2biBjcCAtbSAiZnVuIiAiJHN2bnJlcG8vcHIgamVjdC90cnVuayIgXAorCSAgICAgICAgICAgICAgICAiJHN2bnJlcG8vcHIgamVjdC9icmFuY2hlcy9mdW4gcGx1Z2luIiAmJgorCXN2biBjcCAtbSAibW9yZSBmdW4hIiAiJHN2bnJlcG8vcHIgamVjdC9icmFuY2hlcy9mdW4gcGx1Z2luIiBcCisJICAgICAgICAgICAgICAgICAgICAgICIkc3ZucmVwby9wciBqZWN0L2JyYW5jaGVzL21vcmUgZnVuIHBsdWdpbiEiICYmCiAJc3RhcnRfaHR0cGQKLQkiCisJJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGNsb25lIHdpdGggZnVua3kgYnJhbmNoIG5hbWVzJyAiCi0JZ2l0IHN2biBjbG9uZSAtcyBcIiRzdm5yZXBvL3ByIGplY3RcIiBwcm9qZWN0ICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGNsb25lIHdpdGggZnVua3kgYnJhbmNoIG5hbWVzJyAnCisJZ2l0IHN2biBjbG9uZSAtcyAiJHN2bnJlcG8vcHIgamVjdCIgcHJvamVjdCAmJgogCWNkIHByb2plY3QgJiYKLQkJZ2l0IHJldi1wYXJzZSAncmVmcy9yZW1vdGVzL2Z1biUyMHBsdWdpbicgJiYKLQkJZ2l0IHJldi1wYXJzZSAncmVmcy9yZW1vdGVzL21vcmUlMjBmdW4lMjBwbHVnaW4hJyAmJgorCQlnaXQgcmV2LXBhcnNlICJyZWZzL3JlbW90ZXMvZnVuJTIwcGx1Z2luIiAmJgorCQlnaXQgcmV2LXBhcnNlICJyZWZzL3JlbW90ZXMvbW9yZSUyMGZ1biUyMHBsdWdpbiEiICYmCiAJY2QgLi4KLQkiCisJJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGRjb21taXQgdG8gZnVua3kgYnJhbmNoJyAiCiAJY2QgcHJvamVjdCAmJgpkaWZmIC0tZ2l0IGEvdC90OTEyMC1naXQtc3ZuLWNsb25lLXdpdGgtcGVyY2VudC1lc2NhcGVzLnNoIGIvdC90OTEyMC1naXQtc3ZuLWNsb25lLXdpdGgtcGVyY2VudC1lc2NhcGVzLnNoCmluZGV4IDlhNGVhYmUuLjU5NzllMTMgMTAwNzU1Ci0tLSBhL3QvdDkxMjAtZ2l0LXN2bi1jbG9uZS13aXRoLXBlcmNlbnQtZXNjYXBlcy5zaAorKysgYi90L3Q5MTIwLWdpdC1zdm4tY2xvbmUtd2l0aC1wZXJjZW50LWVzY2FwZXMuc2gKQEAgLTYsMTMgKzYsMTMgQEAKIHRlc3RfZGVzY3JpcHRpb249J2dpdC1zdm4gY2xvbmUgd2l0aCBwZXJjZW50IGVzY2FwZXMnCiAuIC4vbGliLWdpdC1zdm4uc2gKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3ZucmVwbycgIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3ZucmVwbycgJwogCW1rZGlyIHByb2plY3QgcHJvamVjdC90cnVuayBwcm9qZWN0L2JyYW5jaGVzIHByb2plY3QvdGFncyAmJgogCWVjaG8gZm9vID4gcHJvamVjdC90cnVuay9mb28gJiYKLQlzdm4gaW1wb3J0IC1tICckdGVzdF9kZXNjcmlwdGlvbicgcHJvamVjdCAnJHN2bnJlcG8vcHIgamVjdCcgJiYKKwlzdm4gaW1wb3J0IC1tICIkdGVzdF9kZXNjcmlwdGlvbiIgcHJvamVjdCAiJHN2bnJlcG8vcHIgamVjdCIgJiYKIAlybSAtcmYgcHJvamVjdCAmJgogCXN0YXJ0X2h0dHBkCi0iCisnCiAKIGlmIHRlc3QgIiRTVk5fSFRUUERfUE9SVCIgPSAiIgogdGhlbgpkaWZmIC0tZ2l0IGEvdC90OTEyMS1naXQtc3ZuLWZldGNoLXJlbmFtZWQtZGlyLnNoIGIvdC90OTEyMS1naXQtc3ZuLWZldGNoLXJlbmFtZWQtZGlyLnNoCmluZGV4IDUxNDNlZDYuLjk5MjMwYjAgMTAwNzU1Ci0tLSBhL3QvdDkxMjEtZ2l0LXN2bi1mZXRjaC1yZW5hbWVkLWRpci5zaAorKysgYi90L3Q5MTIxLWdpdC1zdm4tZmV0Y2gtcmVuYW1lZC1kaXIuc2gKQEAgLTcsMTQgKzcsMTQgQEAKIAogLiAuL2xpYi1naXQtc3ZuLnNoCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvYWQgcmVwb3NpdG9yeSB3aXRoIHJlbmFtZWQgZGlyZWN0b3J5JyAiCi0Jc3ZuYWRtaW4gbG9hZCAtcSAkcmF3c3ZucmVwbyA8IC4uL3Q5MTIxL3JlbmFtZWQtZGlyLmR1bXAKLQkiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2FkIHJlcG9zaXRvcnkgd2l0aCByZW5hbWVkIGRpcmVjdG9yeScgJworCXN2bmFkbWluIGxvYWQgLXEgIiRyYXdzdm5yZXBvIiA8IC4uL3Q5MTIxL3JlbmFtZWQtZGlyLmR1bXAKKwknCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgYW5kIGZldGNoIHJlcG9zaXRvcnknICIKLQlnaXQgc3ZuIGluaXQgJHN2bnJlcG8vbmV3bmFtZSAmJgordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBhbmQgZmV0Y2ggcmVwb3NpdG9yeScgJworCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8vbmV3bmFtZSIgJiYKIAlnaXQgc3ZuIGZldGNoCi0JIgorCScKIAogdGVzdF9kb25lCiAKZGlmZiAtLWdpdCBhL3QvdDkxMjItZ2l0LXN2bi1hdXRob3Iuc2ggYi90L3Q5MTIyLWdpdC1zdm4tYXV0aG9yLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjExOTA1NzYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTIyLWdpdC1zdm4tYXV0aG9yLnNoCkBAIC0wLDAgKzEsODQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGF1dGhvcnNoaXAnCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3ZuIHJlcG9zaXRvcnknICcKKwlzdm4gY2hlY2tvdXQgIiRzdm5yZXBvIiB3b3JrLnN2biAmJgorCSgKKwkJY2Qgd29yay5zdm4gJiYKKwkJZWNobyA+ZmlsZQorCQlzdm4gYWRkIGZpbGUKKwkJc3ZuIGNvbW1pdCAtbSAiZmlyc3QgY29tbWl0IiBmaWxlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlcmFjdCB3aXRoIGl0IHZpYSBnaXQtc3ZuJyAnCisJbWtkaXIgd29yay5naXQgJiYKKwkoCisJCWNkIHdvcmsuZ2l0ICYmCisJCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iCisJCWdpdCBzdm4gZmV0Y2ggJiYKKworCQllY2hvIG1vZGlmaWNhdGlvbiA+ZmlsZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSBzZWNvbmQgJiYKKworCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IHN2biBkY29tbWl0ICYmCisKKwkJZWNobyAiZnVydGhlciBtb2RpZmljYXRpb24iID5maWxlICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1hIC1tIHRoaXJkICYmCisKKwkJdGVzdF90aWNrICYmCisJCWdpdCBzdm4gLS1hZGQtYXV0aG9yLWZyb20gZGNvbW1pdCAmJgorCisJCWVjaG8gInlldCBmdXJ0aGVyIG1vZGlmaWNhdGlvbiIgPmZpbGUgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLWEgLW0gZm91cnRoICYmCisKKwkJdGVzdF90aWNrICYmCisJCWdpdCBzdm4gLS1hZGQtYXV0aG9yLWZyb20gLS11c2UtbG9nLWF1dGhvciBkY29tbWl0ICYmCisKKwkJZ2l0IGxvZyAmJgorCisJCWdpdCBzaG93IC1zIEhFQUReXiA+Li4vYWN0dWFsLjIgJiYKKwkJZ2l0IHNob3cgLXMgSEVBRF4gID4uLi9hY3R1YWwuMyAmJgorCQlnaXQgc2hvdyAtcyBIRUFEICAgPi4uL2FjdHVhbC40CisKKwkpICYmCisKKwkjIE1ha2Ugc3VyZSB0aGF0IC0tYWRkLWF1dGhvci1mcm9tIHdpdGhvdXQgLS11c2UtbG9nLWF1dGhvcgorCSMgZGlkIG5vdCBhZmZlY3QgdGhlIGF1dGhvcnNoaXAgaW5mb3JtYXRpb24KKwlteXNlbGY9JChncmVwICJeQXV0aG9yOiAiIGFjdHVhbC4yKSAmJgorCXVuYWZmZWN0ZWQ9JChncmVwICJeQXV0aG9yOiAiIGFjdHVhbC4zKSAmJgorCXRlc3QgInokbXlzZWxmIiA9ICJ6JHVuYWZmZWN0ZWQiICYmCisKKwkjIE1ha2Ugc3VyZSBsYWNrIG9mIC0tYWRkLWF1dGhvci1mcm9tIGRpZCBub3QgYWRkIGNydWZ0CisJISBncmVwICJeICAgIEZyb206IEEgVSBUaG9yICIgYWN0dWFsLjIgJiYKKworCSMgTWFrZSBzdXJlIC0tYWRkLWF1dGhvci1mcm9tIGFkZGVkIGNydWZ0CisJZ3JlcCAiXiAgICBGcm9tOiBBIFUgVGhvciAiIGFjdHVhbC4zICYmCisJZ3JlcCAiXiAgICBGcm9tOiBBIFUgVGhvciAiIGFjdHVhbC40ICYmCisKKwkjIE1ha2Ugc3VyZSAtLWFkZC1hdXRob3ItZnJvbSB3aXRoIC0tdXNlLWxvZy1hdXRob3IgYWZmZWN0ZWQKKwkjIHRoZSBhdXRob3JzaGlwIGluZm9ybWF0aW9uCisJZ3JlcCAiXkF1dGhvcjogQSBVIFRob3IgIiBhY3R1YWwuNCAmJgorCisJIyBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIGNvbW1pdCBtZXNzYWdlcyB3aXRoIGV4Y2VzcyBibGFuayBsaW5lcworCXRlc3QgJChncmVwICJeICIgYWN0dWFsLjIgfCB3YyAtbCkgPSAzICYmCisJdGVzdCAkKGdyZXAgIl4gIiBhY3R1YWwuMyB8IHdjIC1sKSA9IDUgJiYKKwl0ZXN0ICQoZ3JlcCAiXiAiIGFjdHVhbC40IHwgd2MgLWwpID0gNSAmJgorCisJIyBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHN2biBjb21taXQgbWVzc2FnZXMgd2l0aCBleGNlc3MgYmxhbmsgbGluZXMKKwkoCisJCWNkIHdvcmsuc3ZuICYmCisJCXN2biB1cCAmJgorCQkKKwkJdGVzdCAkKHN2biBsb2cgLXIyOjIgfCB3YyAtbCkgPSA1ICYmCisJCXRlc3QgJChzdm4gbG9nIC1yNDo0IHwgd2MgLWwpID0gNworCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTIzLWdpdC1zdm4tcmVidWlsZC13aXRoLXJld3JpdGVyb290LnNoIGIvdC90OTEyMy1naXQtc3ZuLXJlYnVpbGQtd2l0aC1yZXdyaXRlcm9vdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMTg4NzhmCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTEyMy1naXQtc3ZuLXJlYnVpbGQtd2l0aC1yZXdyaXRlcm9vdC5zaApAQCAtMCwwICsxLDMyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IEphbiBLcsO8Z2VyCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdC1zdm4gcmVzcGVjdHMgcmV3cml0ZVJvb3QgZHVyaW5nIHJlYnVpbGQnCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCitta2RpciBpbXBvcnQKK2NkIGltcG9ydAorCXRvdWNoIGZvbworCXN2biBpbXBvcnQgLW0gJ2ltcG9ydCBmb3IgZ2l0LXN2bicgLiAiJHN2bnJlcG8iID4vZGV2L251bGwKK2NkIC4uCitybSAtcmYgaW1wb3J0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQsIGZldGNoIGFuZCBjaGVja291dCByZXBvc2l0b3J5JyAnCisJZ2l0IHN2biBpbml0IC0tcmV3cml0ZS1yb290PWh0dHA6Ly9pbnZhbGlkLmludmFsaWQvICIkc3ZucmVwbyIgJiYKKwlnaXQgc3ZuIGZldGNoCisJZ2l0IGNoZWNrb3V0IC1iIG15YnJhbmNoIHJlbW90ZXMvZ2l0LXN2bgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIHJldl9tYXAnICcKKwlybSAiJEdJVF9TVk5fRElSIi8ucmV2X21hcC4qCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJ1aWxkIHJldl9tYXAnICcKKwlnaXQgc3ZuIHJlYmFzZSA+L2Rldi9udWxsCisJJworCit0ZXN0X2RvbmUKKwpkaWZmIC0tZ2l0IGEvdC90OTIwMC1naXQtY3ZzZXhwb3J0Y29tbWl0LnNoIGIvdC90OTIwMC1naXQtY3ZzZXhwb3J0Y29tbWl0LnNoCmluZGV4IDQyYjE0NGIuLmIxZGMzMmQgMTAwNzU1Ci0tLSBhL3QvdDkyMDAtZ2l0LWN2c2V4cG9ydGNvbW1pdC5zaAorKysgYi90L3Q5MjAwLWdpdC1jdnNleHBvcnRjb21taXQuc2gKQEAgLTI5Nyw0ICsyOTcsMjEgQEAKIAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgdGhlIHNhbWUgY2hlY2tvdXQgZm9yIEdpdCBhbmQgQ1ZTJyAnCisKKwkobWtkaXIgc2hhcmVkICYmCisJIGNkIHNoYXJlZCAmJgorCSB1bnNldCBHSVRfRElSICYmCisJIGN2cyBjbyAuICYmCisJIGdpdCBpbml0ICYmCisJIGdpdCBhZGQgIiBzcGFjZSIgJiYKKwkgZ2l0IGNvbW1pdCAtbSAiZmFrZSBpbml0aWFsIGNvbW1pdCIgJiYKKwkgZWNobyBIZWxsbyA+PiAiIHNwYWNlIiAmJgorCSBnaXQgY29tbWl0IC1tICJBbm90aGVyIGNoYW5nZSIgIiBzcGFjZSIgJiYKKwkgZ2l0IGN2c2V4cG9ydGNvbW1pdCAtVyAtcCAtdSAtYyBIRUFEICYmCisJIGdyZXAgSGVsbG8gIiBzcGFjZSIgJiYKKwkgZ2l0IGRpZmYtZmlsZXMpCisKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MzAwLWZhc3QtaW1wb3J0LnNoIGIvdC90OTMwMC1mYXN0LWltcG9ydC5zaAppbmRleCBjNGY0NDY1Li41ZWRmNTZmIDEwMDc1NQotLS0gYS90L3Q5MzAwLWZhc3QtaW1wb3J0LnNoCisrKyBiL3QvdDkzMDAtZmFzdC1pbXBvcnQuc2gKQEAgLTc0LDcgKzc0LDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogCSdBOiB2ZXJpZnkgY29tbWl0JyBcCiAJJ2dpdCBjYXQtZmlsZSBjb21taXQgbWFzdGVyIHwgc2VkIDFkID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsJworCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCiAKIGNhdCA+ZXhwZWN0IDw8RU9GCiAxMDA2NDQgYmxvYiBmaWxlMgpAQCAtODQsMjIgKzg0LDIyIEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKIAknQTogdmVyaWZ5IHRyZWUnIFwKIAknZ2l0IGNhdC1maWxlIC1wIG1hc3Rlcl57dHJlZX0gfCBzZWQgInMvIFswLTlhLWZdKgkvIC8iID5hY3R1YWwgJiYKLQkgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCcKKwkgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKIAogZWNobyAiJGZpbGUyX2RhdGEiID5leHBlY3QKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogCSdBOiB2ZXJpZnkgZmlsZTInIFwKLQknZ2l0IGNhdC1maWxlIGJsb2IgbWFzdGVyOmZpbGUyID5hY3R1YWwgJiYgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCcKKwknZ2l0IGNhdC1maWxlIGJsb2IgbWFzdGVyOmZpbGUyID5hY3R1YWwgJiYgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKIAogZWNobyAiJGZpbGUzX2RhdGEiID5leHBlY3QKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogCSdBOiB2ZXJpZnkgZmlsZTMnIFwKLQknZ2l0IGNhdC1maWxlIGJsb2IgbWFzdGVyOmZpbGUzID5hY3R1YWwgJiYgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCcKKwknZ2l0IGNhdC1maWxlIGJsb2IgbWFzdGVyOmZpbGUzID5hY3R1YWwgJiYgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKIAogcHJpbnRmICIkZmlsZTRfZGF0YSIgPmV4cGVjdAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAJJ0E6IHZlcmlmeSBmaWxlNCcgXAotCSdnaXQgY2F0LWZpbGUgYmxvYiBtYXN0ZXI6ZmlsZTQgPmFjdHVhbCAmJiBnaXQgZGlmZiBleHBlY3QgYWN0dWFsJworCSdnaXQgY2F0LWZpbGUgYmxvYiBtYXN0ZXI6ZmlsZTQgPmFjdHVhbCAmJiB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsJwogCiBjYXQgPmV4cGVjdCA8PEVPRgogOjIgYGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyOmZpbGUyYApAQCAtMTA5LDcgKzEwOSw3IEBACiBFT0YKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogCSdBOiB2ZXJpZnkgbWFya3Mgb3V0cHV0JyBcCi0JJ2dpdCBkaWZmIGV4cGVjdCBtYXJrcy5vdXQnCisJJ3Rlc3RfY21wIGV4cGVjdCBtYXJrcy5vdXQnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogCSdBOiB2ZXJpZnkgbWFya3MgaW1wb3J0JyBcCkBAIC0xMTcsNyArMTE3LDcgQEAKIAkJLS1pbXBvcnQtbWFya3M9bWFya3Mub3V0IFwKIAkJLS1leHBvcnQtbWFya3M9bWFya3MubmV3IFwKIAkJPC9kZXYvbnVsbCAmJgotCWdpdCBkaWZmIC11IGV4cGVjdCBtYXJrcy5uZXcnCisJdGVzdF9jbXAgZXhwZWN0IG1hcmtzLm5ldycKIAogdGVzdF90aWNrCiBjYXQgPmlucHV0IDw8SU5QVVRfRU5ECkBAIC0yNTksNyArMjU5LDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogCSdDOiB2ZXJpZnkgY29tbWl0JyBcCiAJJ2dpdCBjYXQtZmlsZSBjb21taXQgYnJhbmNoIHwgc2VkIDFkID5hY3R1YWwgJiYKLQkgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCcKKwkgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKIAogY2F0ID5leHBlY3QgPDxFT0YKIDowMDAwMDAgMTAwNzU1IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgZjFmYjVkYTcxODM5MjY5NGQwMDc2ZDY3N2Q2ZDBlMzY0Yzc5YjBiYyBBCWZpbGUyL25ld2YKQEAgLTMxNiwxMyArMzE2LDEzIEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKIAknRDogdmVyaWZ5IGZpbGU1JyBcCiAJJ2dpdCBjYXQtZmlsZSBibG9iIGJyYW5jaDpuZXdkaXIvaW50ZXJlc3RpbmcgPmFjdHVhbCAmJgotCSBnaXQgZGlmZiBleHBlY3QgYWN0dWFsJworCSB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsJwogCiBlY2hvICIkZmlsZTZfZGF0YSIgPmV4cGVjdAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAJJ0Q6IHZlcmlmeSBmaWxlNicgXAogCSdnaXQgY2F0LWZpbGUgYmxvYiBicmFuY2g6bmV3ZGlyL2V4ZWMuc2ggPmFjdHVhbCAmJgotCSBnaXQgZGlmZiBleHBlY3QgYWN0dWFsJworCSB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsJwogCiAjIyMKICMjIyBzZXJpZXMgRQpAQCAtMzU4LDcgKzM1OCw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKIAknRTogdmVyaWZ5IGNvbW1pdCcgXAogCSdnaXQgY2F0LWZpbGUgY29tbWl0IGJyYW5jaCB8IHNlZCAxLDJkID5hY3R1YWwgJiYKLQlnaXQgZGlmZiBleHBlY3QgYWN0dWFsJworCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCiAKICMjIwogIyMjIHNlcmllcyBGCkBAIC00MTEsNyArNDExLDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogCSdGOiB2ZXJpZnkgb3RoZXIgY29tbWl0JyBcCiAJJ2dpdCBjYXQtZmlsZSBjb21taXQgb3RoZXIgPmFjdHVhbCAmJgotCWdpdCBkaWZmIGV4cGVjdCBhY3R1YWwnCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKIAogIyMjCiAjIyMgc2VyaWVzIEcKQEAgLTQ4OSw3ICs0ODksNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAJJ0g6IHZlcmlmeSBmaWxlJyBcCiAJJ2dpdCBjYXQtZmlsZSBibG9iIEg6aC9lL2wvbG8gPmFjdHVhbCAmJgotCSBnaXQgZGlmZiBleHBlY3QgYWN0dWFsJworCSB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsJwogCiAjIyMKICMjIyBzZXJpZXMgSQpAQCAtNTE1LDcgKzUxNSw3IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKIAknSTogdmVyaWZ5IGVkZ2UgbGlzdCcgXAogCSdzZWQgLWUgcy9wYWNrLS4qcGFjay9wYWNrLS5wYWNrLyBlZGdlcy5saXN0ID5hY3R1YWwgJiYKLQkgZ2l0IGRpZmYgZXhwZWN0IGFjdHVhbCcKKwkgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKIAogIyMjCiAjIyMgc2VyaWVzIEoKQEAgLTYyNSw3ICs2MjUsNyBAQAogICAgICdMOiB2ZXJpZnkgaW50ZXJuYWwgdHJlZSBzb3J0aW5nJyBcCiAJJ2dpdC1mYXN0LWltcG9ydCA8aW5wdXQgJiYKIAkgZ2l0IGRpZmYtdHJlZSAtLWFiYnJldiAtLXJhdyBMXiBMID5vdXRwdXQgJiYKLQkgZ2l0IGRpZmYgZXhwZWN0IG91dHB1dCcKKwkgdGVzdF9jbXAgZXhwZWN0IG91dHB1dCcKIAogIyMjCiAjIyMgc2VyaWVzIE0KQEAgLTg4NSw3ICs4ODUsNyBAQAogCSB0ZXN0IDggPSBgZmluZCAuZ2l0L29iamVjdHMvcGFjayAtdHlwZSBmIHwgd2MgLWxgICYmCiAJIHRlc3QgYGdpdCByZXYtcGFyc2UgcmVmcy90YWdzL08zLTJuZGAgPSBgZ2l0IHJldi1wYXJzZSBPM15gICYmCiAJIGdpdCBsb2cgLS1yZXZlcnNlIC0tcHJldHR5PW9uZWxpbmUgTzMgfCBzZWQgcy9eLip6Ly8gPmFjdHVhbCAmJgotCSBnaXQgZGlmZiBleHBlY3QgYWN0dWFsJworCSB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsJwogCiBjYXQgPmlucHV0IDw8SU5QVVRfRU5ECiBjb21taXQgcmVmcy9oZWFkcy9PNApAQCAtOTE2LDYgKzkxNiw2IEBACiAJJ086IHByb2dyZXNzIG91dHB1dHMgYXMgcmVxdWVzdGVkIGJ5IGlucHV0JyBcCiAJJ2dpdC1mYXN0LWltcG9ydCA8aW5wdXQgPmFjdHVhbCAmJgogCSBncmVwICJwcm9ncmVzcyAiIDxpbnB1dCA+ZXhwZWN0ICYmCi0JIGdpdCBkaWZmIGV4cGVjdCBhY3R1YWwnCisJIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTQwMC1naXQtY3Zzc2VydmVyLXNlcnZlci5zaCBiL3QvdDk0MDAtZ2l0LWN2c3NlcnZlci1zZXJ2ZXIuc2gKaW5kZXggMTY2YjQzZi4uZTk3YWFhNiAxMDA3NTUKLS0tIGEvdC90OTQwMC1naXQtY3Zzc2VydmVyLXNlcnZlci5zaAorKysgYi90L3Q5NDAwLWdpdC1jdnNzZXJ2ZXItc2VydmVyLnNoCkBAIC0xNTMsMjEgKzE1MywyMSBAQAogICAgdGFpbCBsb2cgfCBncmVwICJeZXJyb3IgMSBDb25mbGljdGluZyByb290cyBzcGVjaWZpZWQkIicKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmVxX1Jvb3QgKHN0cmljdCBwYXRocyknIFwKLSAgJ2NhdCByZXF1ZXN0LWFub255bW91cyB8IGdpdC1jdnNzZXJ2ZXIgLS1zdHJpY3QtcGF0aHMgcHNlcnZlciAkU0VSVkVSRElSID5sb2cgMj4mMSAmJgorICAnY2F0IHJlcXVlc3QtYW5vbnltb3VzIHwgZ2l0LWN2c3NlcnZlciAtLXN0cmljdC1wYXRocyBwc2VydmVyICIkU0VSVkVSRElSIiA+bG9nIDI+JjEgJiYKICAgIHNlZCAtbmUgXCRwIGxvZyB8IGdyZXAgIl5JIExPVkUgWU9VJCInCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcV9Sb290IGZhaWx1cmUgKHN0cmljdC1wYXRocyknICcKICAgICAhIGNhdCByZXF1ZXN0LWFub255bW91cyB8Ci0gICAgZ2l0LWN2c3NlcnZlciAtLXN0cmljdC1wYXRocyBwc2VydmVyICRXT1JLRElSID5sb2cgMj4mMQorICAgIGdpdC1jdnNzZXJ2ZXIgLS1zdHJpY3QtcGF0aHMgcHNlcnZlciAiJFdPUktESVIiID5sb2cgMj4mMQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXFfUm9vdCAody9vIHN0cmljdC1wYXRocyknIFwKLSAgJ2NhdCByZXF1ZXN0LWFub255bW91cyB8IGdpdC1jdnNzZXJ2ZXIgcHNlcnZlciAkV09SS0RJUi8gPmxvZyAyPiYxICYmCisgICdjYXQgcmVxdWVzdC1hbm9ueW1vdXMgfCBnaXQtY3Zzc2VydmVyIHBzZXJ2ZXIgIiRXT1JLRElSLyIgPmxvZyAyPiYxICYmCiAgICBzZWQgLW5lIFwkcCBsb2cgfCBncmVwICJeSSBMT1ZFIFlPVSQiJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXFfUm9vdCBmYWlsdXJlICh3L28gc3RyaWN0LXBhdGhzKScgJwogICAgICEgY2F0IHJlcXVlc3QtYW5vbnltb3VzIHwKLSAgICBnaXQtY3Zzc2VydmVyIHBzZXJ2ZXIgJFdPUktESVIvZ2l0Y3ZzID5sb2cgMj4mMQorICAgIGdpdC1jdnNzZXJ2ZXIgcHNlcnZlciAiJFdPUktESVIvZ2l0Y3ZzIiA+bG9nIDI+JjEKICcKIAogY2F0ID5yZXF1ZXN0LWJhc2UgIDw8RU9GCkBAIC0xODAsMjUgKzE4MCwyNSBAQAogRU9GCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcV9Sb290IChiYXNlLXBhdGgpJyBcCi0gICdjYXQgcmVxdWVzdC1iYXNlIHwgZ2l0LWN2c3NlcnZlciAtLXN0cmljdC1wYXRocyAtLWJhc2UtcGF0aCAkV09SS0RJUi8gcHNlcnZlciAkU0VSVkVSRElSID5sb2cgMj4mMSAmJgorICAnY2F0IHJlcXVlc3QtYmFzZSB8IGdpdC1jdnNzZXJ2ZXIgLS1zdHJpY3QtcGF0aHMgLS1iYXNlLXBhdGggIiRXT1JLRElSLyIgcHNlcnZlciAiJFNFUlZFUkRJUiIgPmxvZyAyPiYxICYmCiAgICBzZWQgLW5lIFwkcCBsb2cgfCBncmVwICJeSSBMT1ZFIFlPVSQiJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXFfUm9vdCBmYWlsdXJlIChiYXNlLXBhdGgpJyAnCiAgICAgISBjYXQgcmVxdWVzdC1hbm9ueW1vdXMgfAotICAgIGdpdC1jdnNzZXJ2ZXIgLS1zdHJpY3QtcGF0aHMgLS1iYXNlLXBhdGggJFdPUktESVIgcHNlcnZlciAkU0VSVkVSRElSID5sb2cgMj4mMQorICAgIGdpdC1jdnNzZXJ2ZXIgLS1zdHJpY3QtcGF0aHMgLS1iYXNlLXBhdGggIiRXT1JLRElSIiBwc2VydmVyICIkU0VSVkVSRElSIiA+bG9nIDI+JjEKICcKIAogR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyAtLWJvb2wgZ2l0Y3ZzLmVuYWJsZWQgZmFsc2UgfHwgZXhpdCAxCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcV9Sb290IChleHBvcnQtYWxsKScgXAotICAnY2F0IHJlcXVlc3QtYW5vbnltb3VzIHwgZ2l0LWN2c3NlcnZlciAtLWV4cG9ydC1hbGwgcHNlcnZlciAkV09SS0RJUiA+bG9nIDI+JjEgJiYKKyAgJ2NhdCByZXF1ZXN0LWFub255bW91cyB8IGdpdC1jdnNzZXJ2ZXIgLS1leHBvcnQtYWxsIHBzZXJ2ZXIgIiRXT1JLRElSIiA+bG9nIDI+JjEgJiYKICAgIHNlZCAtbmUgXCRwIGxvZyB8IGdyZXAgIl5JIExPVkUgWU9VJCInCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcV9Sb290IGZhaWx1cmUgKGV4cG9ydC1hbGwgdy9vIHdoaXRlbGlzdCknIFwKICAgJyEgKGNhdCByZXF1ZXN0LWFub255bW91cyB8IGdpdC1jdnNzZXJ2ZXIgLS1leHBvcnQtYWxsIHBzZXJ2ZXIgPmxvZyAyPiYxIHx8IGZhbHNlKScKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmVxX1Jvb3QgKGV2ZXJ5dGhpbmcgdG9nZXRoZXIpJyBcCi0gICdjYXQgcmVxdWVzdC1iYXNlIHwgZ2l0LWN2c3NlcnZlciAtLWV4cG9ydC1hbGwgLS1zdHJpY3QtcGF0aHMgLS1iYXNlLXBhdGggJFdPUktESVIvIHBzZXJ2ZXIgJFNFUlZFUkRJUiA+bG9nIDI+JjEgJiYKKyAgJ2NhdCByZXF1ZXN0LWJhc2UgfCBnaXQtY3Zzc2VydmVyIC0tZXhwb3J0LWFsbCAtLXN0cmljdC1wYXRocyAtLWJhc2UtcGF0aCAiJFdPUktESVIvIiBwc2VydmVyICIkU0VSVkVSRElSIiA+bG9nIDI+JjEgJiYKICAgIHNlZCAtbmUgXCRwIGxvZyB8IGdyZXAgIl5JIExPVkUgWU9VJCInCiAKIEdJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgLS1ib29sIGdpdGN2cy5lbmFibGVkIHRydWUgfHwgZXhpdCAxCmRpZmYgLS1naXQgYS90L3Q5NDAxLWdpdC1jdnNzZXJ2ZXItY3JsZi5zaCBiL3QvdDk0MDEtZ2l0LWN2c3NlcnZlci1jcmxmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUyN2ExYzUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NDAxLWdpdC1jdnNzZXJ2ZXItY3JsZi5zaApAQCAtMCwwICsxLDMzNyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBNYXR0aGV3IE9naWx2aWUKKyMgUGFydHMgYWRhcHRlZCBmcm9tIG90aGVyIHRlc3RzLgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtY3Zzc2VydmVyIC1rYiBtb2RlcworCit0ZXN0cyAta2IgbW9kZSBmb3IgYmluYXJ5IGZpbGVzIHdoZW4gYWNjZXNzaW5nIGEgZ2l0CityZXBvc2l0b3J5IHVzaW5nIGN2cyBDTEkgY2xpZW50IHZpYSBnaXQtY3Zzc2VydmVyIHNlcnZlcicKKworLiAuL3Rlc3QtbGliLnNoCisKK3FfdG9fbnVsICgpIHsKKyAgICBwZXJsIC1wZSAneS9RL1wwMDAvJworfQorCitxX3RvX2NyICgpIHsKKyAgICB0ciBRICdcMDE1JworfQorCittYXJrZWRfYXMgKCkgeworICAgIGZvdW5kRW50cnk9IiQoZ3JlcCAiXi8kMi8iICIkMS9DVlMvRW50cmllcyIpIgorICAgIGlmIFsgeCIkZm91bmRFbnRyeSIgPSB4IiIgXSA7IHRoZW4KKyAgICAgICBlY2hvICJOT1QgRk9VTkQ6ICQxICQyIDEgJDMiID4+ICIke1dPUktESVJ9L21hcmtlZC5sb2ciCisgICAgICAgcmV0dXJuIDEKKyAgICBmaQorICAgIHRlc3QgeCIkKGdyZXAgIl4vJDIvIiAiJDEvQ1ZTL0VudHJpZXMiIHwgY3V0IC1kLyAtZjUpIiA9IHgiJDMiCisgICAgc3RhdD0kPworICAgIGVjaG8gIiQxICQyICRzdGF0ICckMyciID4+ICIke1dPUktESVJ9L21hcmtlZC5sb2ciCisgICAgcmV0dXJuICRzdGF0Cit9CisKK25vdF9wcmVzZW50KCkgeworICAgIGZvdW5kRW50cnk9IiQoZ3JlcCAiXi8kMi8iICIkMS9DVlMvRW50cmllcyIpIgorICAgIGlmIFsgLXIgIiQxLyQyIiBdIDsgdGhlbgorICAgICAgICBlY2hvICJFcnJvcjogRmlsZSBzdGlsbCBleGlzdHM6ICQxICQyIiA+PiAiJHtXT1JLRElSfS9tYXJrZWQubG9nIgorICAgICAgICByZXR1cm4gMTsKKyAgICBmaQorICAgIGlmIFsgeCIkZm91bmRFbnRyeSIgIT0geCIiIF0gOyB0aGVuCisgICAgICAgIGVjaG8gIkVycm9yOiBzaG91bGQgbm90IGhhdmUgZm91bmQ6ICQxICQyIiA+PiAiJHtXT1JLRElSfS9tYXJrZWQubG9nIgorICAgICAgICByZXR1cm4gMTsKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIkNvcnJlY3RseSBub3QgZm91bmQ6ICQxICQyIiA+PiAiJHtXT1JLRElSfS9tYXJrZWQubG9nIgorICAgICAgICByZXR1cm4gMDsKKyAgICBmaQorfQorCitjdnMgPi9kZXYvbnVsbCAyPiYxCitpZiB0ZXN0ICQ/IC1uZSAxCit0aGVuCisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2tpcHBpbmcgZ2l0LWN2c3NlcnZlciB0ZXN0cywgY3ZzIG5vdCBmb3VuZCcgOgorICAgIHRlc3RfZG9uZQorICAgIGV4aXQKK2ZpCitwZXJsIC1lICd1c2UgREJJOyB1c2UgREJEOjpTUUxpdGUnID4vZGV2L251bGwgMj4mMSB8fCB7CisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2tpcHBpbmcgZ2l0LWN2c3NlcnZlciB0ZXN0cywgUGVybCBTUUxpdGUgaW50ZXJmYWNlIHVuYXZhaWxhYmxlJyA6CisgICAgdGVzdF9kb25lCisgICAgZXhpdAorfQorCit1bnNldCBHSVRfRElSIEdJVF9DT05GSUcKK1dPUktESVI9JChwd2QpCitTRVJWRVJESVI9JChwd2QpL2dpdGN2cy5naXQKK2dpdF9jb25maWc9IiRTRVJWRVJESVIvY29uZmlnIgorQ1ZTUk9PVD0iOmZvcms6JFNFUlZFUkRJUiIKK0NWU1dPUks9IiQocHdkKS9jdnN3b3JrIgorQ1ZTX1NFUlZFUj1naXQtY3Zzc2VydmVyCitleHBvcnQgQ1ZTUk9PVCBDVlNfU0VSVkVSCisKK3JtIC1yZiAiJENWU1dPUksiICIkU0VSVkVSRElSIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKyAgICBlY2hvICJTaW1wbGUgdGV4dCBmaWxlIiA+dGV4dGZpbGUuYyAmJgorICAgIGVjaG8gIkZpbGUgd2l0aCBlbWJlZGRlZCBOVUw6IFEgPC0gdGhlcmUiIHwgcV90b19udWwgPiBiaW5maWxlLmJpbiAmJgorICAgIG1rZGlyIHN1YmRpciAmJgorICAgIGVjaG8gIkFub3RoZXIgdGV4dCBmaWxlIiA+IHN1YmRpci9maWxlLmggJiYKKyAgICBlY2hvICJBbm90aGVyIGJpbmFyeTogUSAodGhpcyB0aW1lIENSKSIgfCBxX3RvX2NyID4gc3ViZGlyL3dpdGhDci5iaW4gJiYKKyAgICBlY2hvICJNaXhlZCB1cCBOVUwsIGJ1dCBtYXJrZWQgdGV4dDogUSA8LSB0aGVyZSIgfCBxX3RvX251bCA+IG1peGVkVXAuYworICAgIGVjaG8gIlVuc3BlY2lmaWVkIiA+IHN1YmRpci91bnNwZWNpZmllZC5vdGhlciAmJgorICAgIGVjaG8gIi8qLmJpbiAtY3JsZiIgPiAuZ2l0YXR0cmlidXRlcyAmJgorICAgIGVjaG8gIi8qLmMgY3JsZiIgPj4gLmdpdGF0dHJpYnV0ZXMgJiYKKyAgICBlY2hvICJzdWJkaXIvKi5iaW4gLWNybGYiID4+IC5naXRhdHRyaWJ1dGVzICYmCisgICAgZWNobyAic3ViZGlyLyouYyBjcmxmIiA+PiAuZ2l0YXR0cmlidXRlcyAmJgorICAgIGVjaG8gInN1YmRpci9maWxlLmggY3JsZiIgPj4gLmdpdGF0dHJpYnV0ZXMgJiYKKyAgICBnaXQgYWRkIC5naXRhdHRyaWJ1dGVzIHRleHRmaWxlLmMgYmluZmlsZS5iaW4gbWl4ZWRVcC5jIHN1YmRpci8qICYmCisgICAgZ2l0IGNvbW1pdCAtcSAtbSAiRmlyc3QgQ29tbWl0IiAmJgorICAgIGdpdCBjbG9uZSAtcSAtLWxvY2FsIC0tYmFyZSAiJFdPUktESVIvLmdpdCIgIiRTRVJWRVJESVIiID4vZGV2L251bGwgMj4mMSAmJgorICAgIEdJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgLS1ib29sIGdpdGN2cy5lbmFibGVkIHRydWUgJiYKKyAgICBHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIGdpdGN2cy5sb2dmaWxlICIkU0VSVkVSRElSL2dpdGN2cy5sb2ciCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBjbyAoZGVmYXVsdCBjcmxmKScgJworICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgY28gLWQgY3Zzd29yayBtYXN0ZXIgPmN2cy5sb2cgMj4mMSAmJgorICAgIHRlc3QgeCIkKGdyZXAgJy8taycgY3Zzd29yay9DVlMvRW50cmllcyBjdnN3b3JrL3N1YmRpci9DVlMvRW50cmllcykiID0geCIiCisnCisKK3JtIC1yZiBjdnN3b3JrCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgY28gKGFsbGJpbmFyeSknICcKKyAgICBHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIC0tYm9vbCBnaXRjdnMuYWxsYmluYXJ5IHRydWUgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGNvIC1kIGN2c3dvcmsgbWFzdGVyID5jdnMubG9nIDI+JjEgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayB0ZXh0ZmlsZS5jIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIGJpbmZpbGUuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIC5naXRhdHRyaWJ1dGVzIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIG1peGVkVXAuYyAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgd2l0aENyLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgZmlsZS5oIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciB1bnNwZWNpZmllZC5vdGhlciAta2IKKycKKworcm0gLXJmIGN2c3dvcmsgY3ZzLmxvZwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIGNvICh1c2UgYXR0cmlidXRlcy9hbGxiaW5hcnkpJyAnCisgICAgR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyAtLWJvb2wgZ2l0Y3ZzLnVzZWNybGZhdHRyIHRydWUgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGNvIC1kIGN2c3dvcmsgbWFzdGVyID5jdnMubG9nIDI+JjEgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayB0ZXh0ZmlsZS5jICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgYmluZmlsZS5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgLmdpdGF0dHJpYnV0ZXMgLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgbWl4ZWRVcC5jICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIHdpdGhDci5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIGZpbGUuaCAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciB1bnNwZWNpZmllZC5vdGhlciAta2IKKycKKworcm0gLXJmIGN2c3dvcmsKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBjbyAodXNlIGF0dHJpYnV0ZXMpJyAnCisgICAgR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyAtLWJvb2wgZ2l0Y3ZzLmFsbGJpbmFyeSBmYWxzZSAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgY28gLWQgY3Zzd29yayBtYXN0ZXIgPmN2cy5sb2cgMj4mMSAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIHRleHRmaWxlLmMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBiaW5maWxlLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayAuZ2l0YXR0cmlidXRlcyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIG1peGVkVXAuYyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciB3aXRoQ3IuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciBmaWxlLmggIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgdW5zcGVjaWZpZWQub3RoZXIgIiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkaW5nIGZpbGVzJyAnCisgICAgY2QgY3Zzd29yay9zdWJkaXIgJiYKKyAgICBlY2hvICJtb3JlIHRleHQiID4gc3JjLmMgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGFkZCBzcmMuYyA+Y3ZzLmxvZyAyPiYxICYmCisgICAgbWFya2VkX2FzIC4gc3JjLmMgIiIgJiYKKyAgICBlY2hvICJwc3VlZG8tYmluYXJ5IiA+IHRlbXAuYmluICYmCisgICAgY2QgLi4gJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGFkZCBzdWJkaXIvdGVtcC5iaW4gPmN2cy5sb2cgMj4mMSAmJgorICAgIG1hcmtlZF9hcyBzdWJkaXIgdGVtcC5iaW4gIi1rYiIgJiYKKyAgICBjZCBzdWJkaXIgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGNpIC1tICJhZGRpbmcgZmlsZXMiID5jdnMubG9nIDI+JjEgJiYKKyAgICBtYXJrZWRfYXMgLiB0ZW1wLmJpbiAiLWtiIiAmJgorICAgIG1hcmtlZF9hcyAuIHNyYy5jICIiCisnCisKK2NkICIkV09SS0RJUiIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0aW5nJyAnCisgICAgZ2l0IHB1bGwgZ2l0Y3ZzLmdpdCAmJgorICAgIGVjaG8gJ2hpJyA+IHN1YmRpci9uZXdmaWxlLmJpbiAmJgorICAgIGVjaG8gJ2p1bmsnID4gc3ViZGlyL2ZpbGUuaCAmJgorICAgIGVjaG8gJ2hpJyA+IHN1YmRpci9uZXdmaWxlLmMgJiYKKyAgICBlY2hvICdoZWxsbycgPj4gYmluZmlsZS5iaW4gJiYKKyAgICBnaXQgYWRkIHN1YmRpci9uZXdmaWxlLmJpbiBzdWJkaXIvZmlsZS5oIHN1YmRpci9uZXdmaWxlLmMgYmluZmlsZS5iaW4gJiYKKyAgICBnaXQgY29tbWl0IC1xIC1tICJBZGQgYW5kIGNoYW5nZSBzb21lIGZpbGVzIiAmJgorICAgIGdpdCBwdXNoIGdpdGN2cy5naXQgPi9kZXYvbnVsbCAmJgorICAgIGNkIGN2c3dvcmsgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIHVwZGF0ZSAmJgorICAgIGNkIC4uICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgdGV4dGZpbGUuYyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIGJpbmZpbGUuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIC5naXRhdHRyaWJ1dGVzICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgbWl4ZWRVcC5jICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIHdpdGhDci5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIGZpbGUuaCAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciB1bnNwZWNpZmllZC5vdGhlciAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciBuZXdmaWxlLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgbmV3ZmlsZS5jICIiICYmCisgICAgZWNobyAiRmlsZSB3aXRoIGVtYmVkZGVkIE5VTDogUSA8LSB0aGVyZSIgfCBxX3RvX251bCA+IHRtcEV4cGVjdDEgJiYKKyAgICBlY2hvICJoZWxsbyIgPj4gdG1wRXhwZWN0MSAmJgorICAgIGNtcCBjdnN3b3JrL2JpbmZpbGUuYmluIHRtcEV4cGVjdDEKKycKKworcm0gLXJmIGN2c3dvcmsKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBjbyAodXNlIGF0dHJpYnV0ZXMvZ3Vlc3MpJyAnCisgICAgR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyBnaXRjdnMuYWxsYmluYXJ5IGd1ZXNzICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBjbyAtZCBjdnN3b3JrIG1hc3RlciA+Y3ZzLmxvZyAyPiYxICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgdGV4dGZpbGUuYyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIGJpbmZpbGUuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIC5naXRhdHRyaWJ1dGVzICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgbWl4ZWRVcC5jICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIHdpdGhDci5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIGZpbGUuaCAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciB1bnNwZWNpZmllZC5vdGhlciAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciBuZXdmaWxlLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgbmV3ZmlsZS5jICIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG11bHRpLWxpbmUgZmlsZXMnICcKKyAgICAoIGVjaG8gImxpbmUgMSIgJiYKKyAgICAgIGVjaG8gImxpbmUgMiIgJiYKKyAgICAgIGVjaG8gImxpbmUgMyIgJiYKKyAgICAgIGVjaG8gImxpbmUgNCB3aXRoIE5VTDogUSA8LSIgKSB8IHFfdG9fbnVsID4gbXVsdGlsaW5lLmMgJiYKKyAgICBnaXQgYWRkIG11bHRpbGluZS5jICYmCisgICAgKCBlY2hvICJsaW5lIDEiICYmCisgICAgICBlY2hvICJsaW5lIDIiICYmCisgICAgICBlY2hvICJsaW5lIDMiICYmCisgICAgICBlY2hvICJsaW5lIDQiICkgfCBxX3RvX251bCA+IG11bHRpbGluZVR4dC5jICYmCisgICAgZ2l0IGFkZCBtdWx0aWxpbmVUeHQuYyAmJgorICAgIGdpdCBjb21taXQgLXEgLW0gIm11bHRpbGluZSBmaWxlcyIgJiYKKyAgICBnaXQgcHVzaCBnaXRjdnMuZ2l0ID4vZGV2L251bGwKKycKKworcm0gLXJmIGN2c3dvcmsKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBjbyAoZ3Vlc3MpJyAnCisgICAgR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyAtLWJvb2wgZ2l0Y3ZzLnVzZWNybGZhdHRyIGZhbHNlICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBjbyAtZCBjdnN3b3JrIG1hc3RlciA+Y3ZzLmxvZyAyPiYxICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgdGV4dGZpbGUuYyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIGJpbmZpbGUuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIC5naXRhdHRyaWJ1dGVzICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgbWl4ZWRVcC5jIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIG11bHRpbGluZS5jIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIG11bHRpbGluZVR4dC5jICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIHdpdGhDci5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIGZpbGUuaCAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciB1bnNwZWNpZmllZC5vdGhlciAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciBuZXdmaWxlLmJpbiAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciBuZXdmaWxlLmMgIiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIGNvIGFub3RoZXIgY29weSAoZ3Vlc3MpJyAnCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBjbyAtZCBjdnN3b3JrMiBtYXN0ZXIgPmN2cy5sb2cgMj4mMSAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiB0ZXh0ZmlsZS5jICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIGJpbmZpbGUuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiAuZ2l0YXR0cmlidXRlcyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiBtaXhlZFVwLmMgLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIG11bHRpbGluZS5jIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiBtdWx0aWxpbmVUeHQuYyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMi9zdWJkaXIgd2l0aENyLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIvc3ViZGlyIGZpbGUuaCAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMi9zdWJkaXIgdW5zcGVjaWZpZWQub3RoZXIgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIvc3ViZGlyIG5ld2ZpbGUuYmluICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyL3N1YmRpciBuZXdmaWxlLmMgIiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHRleHQgKGd1ZXNzKScgJworICAgIGNkIGN2c3dvcmsgJiYKKyAgICBlY2hvICJzaW1wbGVUZXh0IiA+IHNpbXBsZVRleHQuYyAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgYWRkIHNpbXBsZVRleHQuYyAmJgorICAgIGNkIC4uICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgc2ltcGxlVGV4dC5jICIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBiaW4gKGd1ZXNzKScgJworICAgIGNkIGN2c3dvcmsgJiYKKyAgICBlY2hvICJzaW1wbGVCaW46IE5VTDogUSA8LSB0aGVyZSIgfCBxX3RvX251bCA+IHNpbXBsZUJpbi5iaW4gJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGFkZCBzaW1wbGVCaW4uYmluICYmCisgICAgY2QgLi4gJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBzaW1wbGVCaW4uYmluIC1rYgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgZmlsZXMgKGd1ZXNzKScgJworICAgIGNkIGN2c3dvcmsgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIHJtIC1mIHN1YmRpci9maWxlLmggJiYKKyAgICBjZCBzdWJkaXIgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIHJtIC1mIHdpdGhDci5iaW4gJiYKKyAgICBjZCAuLi8uLiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciB3aXRoQ3IuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciBmaWxlLmggIiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIGNpIChndWVzcyknICcKKyAgICBjZCBjdnN3b3JrICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBjaSAtbSAiYWRkL3JtIGZpbGVzIiA+Y3ZzLmxvZyAyPiYxICYmCisgICAgY2QgLi4gJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayB0ZXh0ZmlsZS5jICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgYmluZmlsZS5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgLmdpdGF0dHJpYnV0ZXMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBtaXhlZFVwLmMgLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgbXVsdGlsaW5lLmMgLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgbXVsdGlsaW5lVHh0LmMgIiIgJiYKKyAgICBub3RfcHJlc2VudCBjdnN3b3JrL3N1YmRpciB3aXRoQ3IuYmluICYmCisgICAgbm90X3ByZXNlbnQgY3Zzd29yay9zdWJkaXIgZmlsZS5oICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIHVuc3BlY2lmaWVkLm90aGVyICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIG5ld2ZpbGUuYmluICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIG5ld2ZpbGUuYyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIHNpbXBsZUJpbi5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgc2ltcGxlVGV4dC5jICIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBzdWJkaXIgb2Ygb3RoZXIgY29weSAoZ3Vlc3MpJyAnCisgICAgY2QgY3Zzd29yazIvc3ViZGlyICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSB1cGRhdGUgJiYKKyAgICBjZCAuLi8uLiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiB0ZXh0ZmlsZS5jICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIGJpbmZpbGUuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiAuZ2l0YXR0cmlidXRlcyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiBtaXhlZFVwLmMgLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIG11bHRpbGluZS5jIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiBtdWx0aWxpbmVUeHQuYyAiIiAmJgorICAgIG5vdF9wcmVzZW50IGN2c3dvcmsyL3N1YmRpciB3aXRoQ3IuYmluICYmCisgICAgbm90X3ByZXNlbnQgY3Zzd29yazIvc3ViZGlyIGZpbGUuaCAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMi9zdWJkaXIgdW5zcGVjaWZpZWQub3RoZXIgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIvc3ViZGlyIG5ld2ZpbGUuYmluICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyL3N1YmRpciBuZXdmaWxlLmMgIiIgJiYKKyAgICBub3RfcHJlc2VudCBjdnN3b3JrMiBzaW1wbGVCaW4uYmluICYmCisgICAgbm90X3ByZXNlbnQgY3Zzd29yazIgc2ltcGxlVGV4dC5jCisnCisKK2VjaG8gInN0YXJ0aW5nIHVwZGF0ZS9tZXJnZSIgPj4gIiR7V09SS0RJUn0vbWFya2VkLmxvZyIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS9tZXJnZSBmdWxsIG90aGVyIGNvcHkgKGd1ZXNzKScgJworICAgIGdpdCBwdWxsIGdpdGN2cy5naXQgbWFzdGVyICYmCisgICAgc2VkICJzLzMvcmVwbGFjZWRfMy8iIDwgbXVsdGlsaW5lVHh0LmMgPiBtbC50ZW1wICYmCisgICAgbXYgbWwudGVtcCBtdWx0aWxpbmVUeHQuYyAmJgorICAgIGdpdCBhZGQgbXVsdGlsaW5lVHh0LmMgJiYKKyAgICBnaXQgY29tbWl0IC1xIC1tICJtb2RpZnkgbXVsdGlsaW5lIGZpbGUiID4+ICIke1dPUktESVJ9L21hcmtlZC5sb2ciICYmCisgICAgZ2l0IHB1c2ggZ2l0Y3ZzLmdpdCA+L2Rldi9udWxsICYmCisgICAgY2QgY3Zzd29yazIgJiYKKyAgICBzZWQgInMvMS9yZXBsYWNlZF8xLyIgPCBtdWx0aWxpbmVUeHQuYyA+IG1sLnRlbXAgJiYKKyAgICBtdiBtbC50ZW1wIG11bHRpbGluZVR4dC5jICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyB1cGRhdGUgPiBjdnMubG9nIDI+JjEgJiYKKyAgICBjZCAuLiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiB0ZXh0ZmlsZS5jICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIGJpbmZpbGUuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiAuZ2l0YXR0cmlidXRlcyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiBtaXhlZFVwLmMgLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIG11bHRpbGluZS5jIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiBtdWx0aWxpbmVUeHQuYyAiIiAmJgorICAgIG5vdF9wcmVzZW50IGN2c3dvcmsyL3N1YmRpciB3aXRoQ3IuYmluICYmCisgICAgbm90X3ByZXNlbnQgY3Zzd29yazIvc3ViZGlyIGZpbGUuaCAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMi9zdWJkaXIgdW5zcGVjaWZpZWQub3RoZXIgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIvc3ViZGlyIG5ld2ZpbGUuYmluICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyL3N1YmRpciBuZXdmaWxlLmMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgc2ltcGxlQmluLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgc2ltcGxlVGV4dC5jICIiICYmCisgICAgZWNobyAibGluZSByZXBsYWNlZF8xIiA+IHRtcEV4cGVjdDIgJiYKKyAgICBlY2hvICJsaW5lIDIiID4+IHRtcEV4cGVjdDIgJiYKKyAgICBlY2hvICJsaW5lIHJlcGxhY2VkXzMiID4+IHRtcEV4cGVjdDIgJiYKKyAgICBlY2hvICJsaW5lIDQiIHwgcV90b19udWwgPj4gdG1wRXhwZWN0MiAmJgorICAgIGNtcCBjdnN3b3JrMi9tdWx0aWxpbmVUeHQuYyB0bXBFeHBlY3QyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTUwMC1naXR3ZWItc3RhbmRhbG9uZS1uby1lcnJvcnMuc2ggYi90L3Q5NTAwLWdpdHdlYi1zdGFuZGFsb25lLW5vLWVycm9ycy5zaAppbmRleCAwNjFhMjU5Li5hZTcwODJiIDEwMDc1NQotLS0gYS90L3Q5NTAwLWdpdHdlYi1zdGFuZGFsb25lLW5vLWVycm9ycy5zaAorKysgYi90L3Q5NTAwLWdpdHdlYi1zdGFuZGFsb25lLW5vLWVycm9ycy5zaApAQCAtMTAsNiArMTAsNyBAQAogb3Igd2FybmluZ3MgdG8gbG9nLicKIAogZ2l0d2ViX2luaXQgKCkgeworCXNhZmVfcHdkPSIkKHBlcmwgLU1QT1NJWD1nZXRjd2QgLWUgJ3ByaW50IHF1b3RlbWV0YShnZXRjd2QpJykiCiAJY2F0ID5naXR3ZWJfY29uZmlnLnBlcmwgPDxFT0YKICMhL3Vzci9iaW4vcGVybAogCkBAIC0xNywxNiArMTgsMTYgQEAKIAogb3VyIFwkdmVyc2lvbiA9ICJjdXJyZW50IjsKIG91ciBcJEdJVCA9ICJnaXQiOwotb3VyIFwkcHJvamVjdHJvb3QgPSAiJChwd2QpIjsKK291ciBcJHByb2plY3Ryb290ID0gIiRzYWZlX3B3ZCI7CiBvdXIgXCRwcm9qZWN0X21heGRlcHRoID0gODsKIG91ciBcJGhvbWVfbGlua19zdHIgPSAicHJvamVjdHMiOwogb3VyIFwkc2l0ZV9uYW1lID0gIltsb2NhbGhvc3RdIjsKIG91ciBcJHNpdGVfaGVhZGVyID0gIiI7CiBvdXIgXCRzaXRlX2Zvb3RlciA9ICIiOwogb3VyIFwkaG9tZV90ZXh0ID0gImluZGV4dGV4dC5odG1sIjsKLW91ciBAc3R5bGVzaGVldHMgPSAoImZpbGU6Ly8vJChwd2QpLy4uLy4uL2dpdHdlYi9naXR3ZWIuY3NzIik7Ci1vdXIgXCRsb2dvID0gImZpbGU6Ly8vJChwd2QpLy4uLy4uL2dpdHdlYi9naXQtbG9nby5wbmciOwotb3VyIFwkZmF2aWNvbiA9ICJmaWxlOi8vLyQocHdkKS8uLi8uLi9naXR3ZWIvZ2l0LWZhdmljb24ucG5nIjsKK291ciBAc3R5bGVzaGVldHMgPSAoImZpbGU6Ly8vJHNhZmVfcHdkLy4uLy4uL2dpdHdlYi9naXR3ZWIuY3NzIik7CitvdXIgXCRsb2dvID0gImZpbGU6Ly8vJHNhZmVfcHdkLy4uLy4uL2dpdHdlYi9naXQtbG9nby5wbmciOworb3VyIFwkZmF2aWNvbiA9ICJmaWxlOi8vLyRzYWZlX3B3ZC8uLi8uLi9naXR3ZWIvZ2l0LWZhdmljb24ucG5nIjsKIG91ciBcJHByb2plY3RzX2xpc3QgPSAiIjsKIG91ciBcJGV4cG9ydF9vayA9ICIiOwogb3VyIFwkc3RyaWN0X2V4cG9ydCA9ICIiOwpAQCAtMzksMTkgKzQwLDIxIEBACiB9CiAKIGdpdHdlYl9ydW4gKCkgewotCWV4cG9ydCBHQVRFV0FZX0lOVEVSRkFDRT0iQ0dJLzEuMSIKLQlleHBvcnQgSFRUUF9BQ0NFUFQ9IiovKiIKLQlleHBvcnQgUkVRVUVTVF9NRVRIT0Q9IkdFVCIKLQlleHBvcnQgUVVFUllfU1RSSU5HPSIiJDEiIgotCWV4cG9ydCBQQVRIX0lORk89IiIkMiIiCisJR0FURVdBWV9JTlRFUkZBQ0U9IkNHSS8xLjEiCisJSFRUUF9BQ0NFUFQ9IiovKiIKKwlSRVFVRVNUX01FVEhPRD0iR0VUIgorCVFVRVJZX1NUUklORz0iIiQxIiIKKwlQQVRIX0lORk89IiIkMiIiCisJZXhwb3J0IEdBVEVXQVlfSU5URVJGQUNFIEhUVFBfQUNDRVBUIFJFUVVFU1RfTUVUSE9EIFFVRVJZX1NUUklORyBQQVRIX0lORk8KIAotCWV4cG9ydCBHSVRXRUJfQ09ORklHPSQocHdkKS9naXR3ZWJfY29uZmlnLnBlcmwKKwlHSVRXRUJfQ09ORklHPSQocHdkKS9naXR3ZWJfY29uZmlnLnBlcmwKKwlleHBvcnQgR0lUV0VCX0NPTkZJRwogCiAJIyBzb21lIG9mIGdpdCBjb21tYW5kcyB3cml0ZSB0byBTVERFUlIgb24gZXJyb3IsIGJ1dCB0aGlzIGlzIG5vdAogCSMgd3JpdHRlbiB0byB3ZWIgc2VydmVyIGxvZ3MsIHNvIHdlIGFyZSBub3QgaW50ZXJlc3RlZCBpbiB0aGF0OgogCSMgd2UgYXJlIGludGVyZXN0ZWQgb25seSBpbiBwcm9wZXJseSBmb3JtYXR0ZWQgZXJyb3JzL3dhcm5pbmdzCiAJcm0gLWYgZ2l0d2ViLmxvZyAmJgotCXBlcmwgLS0gJChwd2QpLy4uLy4uL2dpdHdlYi9naXR3ZWIucGVybCBcCisJcGVybCAtLSAiJChwd2QpLy4uLy4uL2dpdHdlYi9naXR3ZWIucGVybCIgXAogCQk+L2Rldi9udWxsIDI+Z2l0d2ViLmxvZyAmJgogCWlmIGdyZXAgLXEgLXMgIl5bW10iIGdpdHdlYi5sb2cgPi9kZXYvbnVsbDsgdGhlbiBmYWxzZTsgZWxzZSB0cnVlOyBmaQogCmRpZmYgLS1naXQgYS90L3Q5NjAwLWN2c2ltcG9ydC5zaCBiL3QvdDk2MDAtY3ZzaW1wb3J0LnNoCmluZGV4IDAwYTc0ZWUuLjY1NWY4ODIgMTAwNzU1Ci0tLSBhL3QvdDk2MDAtY3ZzaW1wb3J0LnNoCisrKyBiL3QvdDk2MDAtY3ZzaW1wb3J0LnNoCkBAIC0zNiw3ICszNiw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGEgY3ZzIG1vZHVsZScgJwogCi0JbWtkaXIgJENWU1JPT1QvbW9kdWxlICYmCisJbWtkaXIgIiRDVlNST09UL21vZHVsZSIgJiYKIAljdnMgY28gLWQgbW9kdWxlLWN2cyBtb2R1bGUgJiYKIAljZCBtb2R1bGUtY3ZzICYmCiAJY2F0IDw8RU9GID5vX2ZvcnR1bmEgJiYKQEAgLTY5LDcgKzY5LDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ltcG9ydCBhIHRyaXZpYWwgbW9kdWxlJyAnCiAKIAlnaXQgY3ZzaW1wb3J0IC1hIC16IDAgLUMgbW9kdWxlLWdpdCBtb2R1bGUgJiYKLQlnaXQgZGlmZiBtb2R1bGUtY3ZzL29fZm9ydHVuYSBtb2R1bGUtZ2l0L29fZm9ydHVuYQorCXRlc3RfY21wIG1vZHVsZS1jdnMvb19mb3J0dW5hIG1vZHVsZS1naXQvb19mb3J0dW5hCiAKICcKIApAQCAtMTEwLDcgKzExMCw3IEBACiAJZ2l0IGN2c2ltcG9ydCAtYSAteiAwIG1vZHVsZSAmJgogCWdpdCBtZXJnZSBvcmlnaW4gJiYKIAljZCAuLiAmJgotCWdpdCBkaWZmIG1vZHVsZS1jdnMvb19mb3J0dW5hIG1vZHVsZS1naXQvb19mb3J0dW5hCisJdGVzdF9jbXAgbW9kdWxlLWN2cy9vX2ZvcnR1bmEgbW9kdWxlLWdpdC9vX2ZvcnR1bmEKIAogJwogCkBAIC0xMzEsNyArMTMxLDcgQEAKIAkJZ2l0IGN2c2ltcG9ydCAtYSAtejAgJiYKIAkJZ2l0IG1lcmdlIG9yaWdpbiAmJgogCWNkIC4uICYmCi0JZ2l0IGRpZmYgbW9kdWxlLWN2cy90aWNrIG1vZHVsZS1naXQvdGljaworCXRlc3RfY21wIG1vZHVsZS1jdnMvdGljayBtb2R1bGUtZ2l0L3RpY2sKIAogJwogCkBAIC0xNDIsNyArMTQyLDcgQEAKIAkJZ2l0IGN2c2ltcG9ydCAtYSAtejAgJiYKIAkJZWNobyAxID5leHBlY3QgJiYKIAkJZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JXMlbiA+YWN0dWFsICYmCi0JCWdpdCBkaWZmIGFjdHVhbCBleHBlY3QgJiYKKwkJdGVzdF9jbXAgYWN0dWFsIGV4cGVjdCAmJgogCWNkIC4uCiAKICcKZGlmZiAtLWdpdCBhL3QvdGVzdC1saWIuc2ggYi90L3Rlc3QtbGliLnNoCmluZGV4IDdjMmE4YmEuLmM4NjExNDEgMTAwNjQ0Ci0tLSBhL3QvdGVzdC1saWIuc2gKKysrIGIvdC90ZXN0LWxpYi5zaApAQCAtMTYwLDYgKzE2MCwyMiBAQAogCiB0cmFwICdkaWUnIGV4aXQKIAorIyBUaGUgc2VtYW50aWNzIG9mIHRoZSBlZGl0b3IgdmFyaWFibGVzIGFyZSB0aGF0IG9mIGludm9raW5nCisjIHNoIC1jICIkRURJVE9SIFwiJEBcIiIgZmlsZXMgLi4uCisjCisjIElmIG91ciB0cmFzaCBkaXJlY3RvcnkgY29udGFpbnMgc2hlbGwgbWV0YWNoYXJhY3RlcnMsIHRoZXkgd2lsbCBiZQorIyBpbnRlcnByZXRlZCBpZiB3ZSBqdXN0IHNldCAkRURJVE9SIGRpcmVjdGx5LCBzbyBkbyBhIGxpdHRsZSBkYW5jZSB3aXRoCisjIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byB3b3JrIGFyb3VuZCB0aGlzLgorIworIyBJbiBwYXJ0aWN1bGFyLCBxdW90aW5nIGlzbid0IGVub3VnaCwgYXMgdGhlIHBhdGggbWF5IGNvbnRhaW4gdGhlIHNhbWUgcXVvdGUKKyMgdGhhdCB3ZSdyZSB1c2luZy4KK3Rlc3Rfc2V0X2VkaXRvciAoKSB7CisJRkFLRV9FRElUT1I9IiQxIgorCWV4cG9ydCBGQUtFX0VESVRPUgorCVZJU1VBTD0nIiRGQUtFX0VESVRPUiInCisJZXhwb3J0IFZJU1VBTAorfQorCiB0ZXN0X3RpY2sgKCkgewogCWlmIHRlc3QgLXogIiR7dGVzdF90aWNrK3NldH0iCiAJdGhlbgpAQCAtMzI5LDcgKzM0NSw3IEBACiAJcmVwbz0iJDEiCiAJbWtkaXIgIiRyZXBvIgogCWNkICIkcmVwbyIgfHwgZXJyb3IgIkNhbm5vdCBzZXR1cCB0ZXN0IGVudmlyb25tZW50IgotCSIkR0lUX0VYRUNfUEFUSC9naXQiIGluaXQgLS10ZW1wbGF0ZT0kR0lUX0VYRUNfUEFUSC90ZW1wbGF0ZXMvYmx0LyA+L2Rldi9udWxsIDI+JjEgfHwKKwkiJEdJVF9FWEVDX1BBVEgvZ2l0IiBpbml0ICItLXRlbXBsYXRlPSRHSVRfRVhFQ19QQVRIL3RlbXBsYXRlcy9ibHQvIiA+L2Rldi9udWxsIDI+JjEgfHwKIAllcnJvciAiY2Fubm90IHJ1biBnaXQgaW5pdCAtLSBoYXZlIHlvdSBidWlsdCB0aGluZ3MgeWV0PyIKIAltdiAuZ2l0L2hvb2tzIC5naXQvaG9va3MtZGlzYWJsZWQKIAljZCAiJG93ZCIKQEAgLTM1Miw3ICszNjgsNyBAQAogCWNhc2UgIiR0ZXN0X2ZhaWx1cmUiIGluCiAJMCkKIAkJIyBXZSBjb3VsZDoKLQkJIyBjZCAuLiAmJiBybSAtZnIgdHJhc2gKKwkJIyBjZCAuLiAmJiBybSAtZnIgJ3RyYXNoIGRpcmVjdG9yeScKIAkJIyBidXQgdGhhdCBtZWFucyB3ZSBmb3JiaWQgYW55IHRlc3RzIHRoYXQgdXNlIHRoZWlyIG93bgogCQkjIHN1YmRpcmVjdG9yeSBmcm9tIGNhbGxpbmcgdGVzdF9kb25lIHdpdGhvdXQgY29taW5nIGJhY2sKIAkJIyB0byB3aGVyZSB0aGV5IHN0YXJ0ZWQgZnJvbS4KQEAgLTM3MCw3ICszODYsNyBAQAogfQogCiAjIFRlc3QgdGhlIGJpbmFyaWVzIHdlIGhhdmUganVzdCBidWlsdC4gIFRoZSB0ZXN0cyBhcmUga2VwdCBpbgotIyB0LyBzdWJkaXJlY3RvcnkgYW5kIGFyZSBydW4gaW4gdHJhc2ggc3ViZGlyZWN0b3J5LgorIyB0LyBzdWJkaXJlY3RvcnkgYW5kIGFyZSBydW4gaW4gJ3RyYXNoIGRpcmVjdG9yeScgc3ViZGlyZWN0b3J5LgogUEFUSD0kKHB3ZCkvLi46JFBBVEgKIEdJVF9FWEVDX1BBVEg9JChwd2QpLy4uCiBHSVRfVEVNUExBVEVfRElSPSQocHdkKS8uLi90ZW1wbGF0ZXMvYmx0CkBAIC0zOTUsMTUgKzQxMSwxNyBAQAogLiAuLi9HSVQtQlVJTEQtT1BUSU9OUwogCiAjIFRlc3QgcmVwb3NpdG9yeQotdGVzdD10cmFzaAordGVzdD0idHJhc2ggZGlyZWN0b3J5Igogcm0gLWZyICIkdGVzdCIgfHwgewogCXRyYXAgLSBleGl0CiAJZWNobyA+JjUgIkZBVEFMOiBDYW5ub3QgcHJlcGFyZSB0ZXN0IGFyZWEiCiAJZXhpdCAxCiB9CiAKLXRlc3RfY3JlYXRlX3JlcG8gJHRlc3QKLWNkICIkdGVzdCIKK3Rlc3RfY3JlYXRlX3JlcG8gIiR0ZXN0IgorIyBVc2UgLVAgdG8gcmVzb2x2ZSBzeW1saW5rcyBpbiBvdXIgd29ya2luZyBkaXJlY3Rvcnkgc28gdGhhdCB0aGUgY3dkCisjIGluIHN1YnByb2Nlc3NlcyBsaWtlIGdpdCBlcXVhbHMgb3VyICRQV0QgKGZvciBwYXRobmFtZSBjb21wYXJpc29ucykuCitjZCAtUCAiJHRlc3QiIHx8IGV4aXQgMQogCiB0aGlzX3Rlc3Q9JChleHByICIuLyQwIiA6ICcuKi9cKHRbMC05XSpcKS1bXi9dKiQnKQogZm9yIHNrcCBpbiAkR0lUX1NLSVBfVEVTVFMKZGlmZiAtLWdpdCBhL3RlbXBsYXRlcy9ob29rcy0tcHJlcGFyZS1jb21taXQtbXNnIGIvdGVtcGxhdGVzL2hvb2tzLS1wcmVwYXJlLWNvbW1pdC1tc2cKaW5kZXggZmYwZjQyYS4uZDNjMWRhMyAxMDA2NDQKLS0tIGEvdGVtcGxhdGVzL2hvb2tzLS1wcmVwYXJlLWNvbW1pdC1tc2cKKysrIGIvdGVtcGxhdGVzL2hvb2tzLS1wcmVwYXJlLWNvbW1pdC1tc2cKQEAgLTIwLDExICsyMCwxMSBAQAogIyBUaGUgdGhpcmQgZXhhbXBsZSBhZGRzIGEgU2lnbmVkLW9mZi1ieSBsaW5lIHRvIHRoZSBtZXNzYWdlLCB0aGF0IGNhbgogIyBzdGlsbCBiZSBlZGl0ZWQuICBUaGlzIGlzIHJhcmVseSBhIGdvb2QgaWRlYS4KIAotY2FzZSAiJDIgJDMiIGluCi0gIG1lcmdlKQotICAgIHNlZCAtaSAnL15Db25mbGljdHM6LywvIy8hYjtzL14vIyAmLztzL14jICMvIy8nICIkMSIgOzsKK2Nhc2UgIiQyLCQzIiBpbgorICBtZXJnZSwpCisgICAgcGVybCAtaSAtbmUgJ3MvXi8jIC8sIHMvXiMgIy8jLyBpZiAvXkNvbmZsaWN0cy8gLi4gLyMvOyBwcmludCcgIiQxIiA7OwogCi0jICIifHRlbXBsYXRlKQorIyAsfHRlbXBsYXRlLCkKICMgICBwZXJsIC1pIC1wZSAnCiAjICAgICAgcHJpbnQgIlxuIiAuIGBnaXQgZGlmZiAtLWNhY2hlZCAtLW5hbWUtc3RhdHVzIC1yYAogIwkgaWYgL14jLyAmJiAkZmlyc3QrKyA9PSAwJyAiJDEiIDs7CmRpZmYgLS1naXQgYS90ZXN0LXBhcnNlLW9wdGlvbnMuYyBiL3Rlc3QtcGFyc2Utb3B0aW9ucy5jCmluZGV4IDczMzYwZDcuLjJhNzllNzIgMTAwNjQ0Ci0tLSBhL3Rlc3QtcGFyc2Utb3B0aW9ucy5jCisrKyBiL3Rlc3QtcGFyc2Utb3B0aW9ucy5jCkBAIC0yLDkgKzIsMjIgQEAKICNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCiAKIHN0YXRpYyBpbnQgYm9vbGVhbiA9IDA7Ci1zdGF0aWMgaW50IGludGVnZXIgPSAwOworc3RhdGljIHVuc2lnbmVkIGxvbmcgaW50ZWdlciA9IDA7CitzdGF0aWMgaW50IGFiYnJldiA9IDc7CitzdGF0aWMgaW50IHZlcmJvc2UgPSAwLCBkcnlfcnVuID0gMCwgcXVpZXQgPSAwOwogc3RhdGljIGNoYXIgKnN0cmluZyA9IE5VTEw7CiAKK2ludCBsZW5ndGhfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlwcmludGYoIkNhbGxiYWNrOiBcIiVzXCIsICVkXG4iLAorCQkoYXJnID8gYXJnIDogIm5vdCBzZXQiKSwgdW5zZXQpOworCWlmICh1bnNldCkKKwkJcmV0dXJuIDE7IC8qIGRvIG5vdCBzdXBwb3J0IHVuc2V0ICovCisKKwkqKHVuc2lnbmVkIGxvbmcgKilvcHQtPnZhbHVlID0gc3RybGVuKGFyZyk7CisJcmV0dXJuIDA7Cit9CisKIGludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKIAljb25zdCBjaGFyICp1c2FnZVtdID0gewpAQCAtMTMsMTUgKzI2LDI5IEBACiAJfTsKIAlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKIAkJT1BUX0JPT0xFQU4oJ2InLCAiYm9vbGVhbiIsICZib29sZWFuLCAiZ2V0IGEgYm9vbGVhbiIpLAorCQlPUFRfQklUKCc0JywgIm9yNCIsICZib29sZWFuLAorCQkJImJpdHdpc2Utb3IgYm9vbGVhbiB3aXRoIC4uLjAxMDAiLCA0KSwKKwkJT1BUX0dST1VQKCIiKSwKIAkJT1BUX0lOVEVHRVIoJ2knLCAiaW50ZWdlciIsICZpbnRlZ2VyLCAiZ2V0IGEgaW50ZWdlciIpLAogCQlPUFRfSU5URUdFUignaicsIE5VTEwsICZpbnRlZ2VyLCAiZ2V0IGEgaW50ZWdlciwgdG9vIiksCi0JCU9QVF9HUk9VUCgic3RyaW5nIG9wdGlvbnMiKSwKKwkJT1BUX1NFVF9JTlQoMCwgInNldDIzIiwgJmludGVnZXIsICJzZXQgaW50ZWdlciB0byAyMyIsIDIzKSwKKwkJT1BUX0RBVEUoJ3QnLCBOVUxMLCAmaW50ZWdlciwgImdldCB0aW1lc3RhbXAgb2YgPHRpbWU+IiksCisJCU9QVF9DQUxMQkFDSygnTCcsICJsZW5ndGgiLCAmaW50ZWdlciwgInN0ciIsCisJCQkiZ2V0IGxlbmd0aCBvZiA8c3RyPiIsIGxlbmd0aF9jYWxsYmFjayksCisJCU9QVF9HUk9VUCgiU3RyaW5nIG9wdGlvbnMiKSwKIAkJT1BUX1NUUklORygncycsICJzdHJpbmciLCAmc3RyaW5nLCAic3RyaW5nIiwgImdldCBhIHN0cmluZyIpLAogCQlPUFRfU1RSSU5HKDAsICJzdHJpbmcyIiwgJnN0cmluZywgInN0ciIsICJnZXQgYW5vdGhlciBzdHJpbmciKSwKIAkJT1BUX1NUUklORygwLCAic3QiLCAmc3RyaW5nLCAic3QiLCAiZ2V0IGFub3RoZXIgc3RyaW5nIChwZXJ2ZXJ0IG9yZGVyaW5nKSIpLAogCQlPUFRfU1RSSU5HKCdvJywgTlVMTCwgJnN0cmluZywgInN0ciIsICJnZXQgYW5vdGhlciBzdHJpbmciKSwKLQkJT1BUX0dST1VQKCJtYWdpYyBhcmd1bWVudHMiKSwKKwkJT1BUX1NFVF9QVFIoMCwgImRlZmF1bHQtc3RyaW5nIiwgJnN0cmluZywKKwkJCSJzZXQgc3RyaW5nIHRvIGRlZmF1bHQiLCAodW5zaWduZWQgbG9uZykiZGVmYXVsdCIpLAorCQlPUFRfR1JPVVAoIk1hZ2ljIGFyZ3VtZW50cyIpLAogCQlPUFRfQVJHVU1FTlQoInF1dXgiLCAibWVhbnMgLS1xdXV4IiksCisJCU9QVF9HUk9VUCgiU3RhbmRhcmQgb3B0aW9ucyIpLAorCQlPUFRfX0FCQlJFVigmYWJicmV2KSwKKwkJT1BUX19WRVJCT1NFKCZ2ZXJib3NlKSwKKwkJT1BUX19EUllfUlVOKCZkcnlfcnVuKSwKKwkJT1BUX19RVUlFVCgmcXVpZXQpLAogCQlPUFRfRU5EKCksCiAJfTsKIAlpbnQgaTsKQEAgLTI5LDggKzU2LDEyIEBACiAJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgb3B0aW9ucywgdXNhZ2UsIDApOwogCiAJcHJpbnRmKCJib29sZWFuOiAlZFxuIiwgYm9vbGVhbik7Ci0JcHJpbnRmKCJpbnRlZ2VyOiAlZFxuIiwgaW50ZWdlcik7CisJcHJpbnRmKCJpbnRlZ2VyOiAlbHVcbiIsIGludGVnZXIpOwogCXByaW50Zigic3RyaW5nOiAlc1xuIiwgc3RyaW5nID8gc3RyaW5nIDogIihub3Qgc2V0KSIpOworCXByaW50ZigiYWJicmV2OiAlZFxuIiwgYWJicmV2KTsKKwlwcmludGYoInZlcmJvc2U6ICVkXG4iLCB2ZXJib3NlKTsKKwlwcmludGYoInF1aWV0OiAlc1xuIiwgcXVpZXQgPyAieWVzIiA6ICJubyIpOworCXByaW50ZigiZHJ5IHJ1bjogJXNcbiIsIGRyeV9ydW4gPyAieWVzIiA6ICJubyIpOwogCiAJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKIAkJcHJpbnRmKCJhcmcgJTAyZDogJXNcbiIsIGksIGFyZ3ZbaV0pOwpkaWZmIC0tZ2l0IGEvdHJhbnNwb3J0LmMgYi90cmFuc3BvcnQuYwppbmRleCAzOTNlMGU4Li5iM2UzZTYxIDEwMDY0NAotLS0gYS90cmFuc3BvcnQuYworKysgYi90cmFuc3BvcnQuYwpAQCAtMjAzLDcgKzIwMyw3IEBACiB9CiAKIHN0YXRpYyBpbnQgZmV0Y2hfb2Jqc192aWFfcnN5bmMoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAotCQkJCSBpbnQgbnJfb2Jqcywgc3RydWN0IHJlZiAqKnRvX2ZldGNoKQorCQkJCWludCBucl9vYmpzLCBjb25zdCBzdHJ1Y3QgcmVmICoqdG9fZmV0Y2gpCiB7CiAJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKIAlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyByc3luYzsKQEAgLTM1MCw3ICszNTAsNyBAQAogCiAjaWZuZGVmIE5PX0NVUkwgLyogaHR0cCBmZXRjaCBpcyB0aGUgb25seSB1c2VyICovCiBzdGF0aWMgaW50IGZldGNoX29ianNfdmlhX3dhbGtlcihzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCi0JCQkJIGludCBucl9vYmpzLCBzdHJ1Y3QgcmVmICoqdG9fZmV0Y2gpCisJCQkJIGludCBucl9vYmpzLCBjb25zdCBzdHJ1Y3QgcmVmICoqdG9fZmV0Y2gpCiB7CiAJY2hhciAqZGVzdCA9IHhzdHJkdXAodHJhbnNwb3J0LT51cmwpOwogCXN0cnVjdCB3YWxrZXIgKndhbGtlciA9IHRyYW5zcG9ydC0+ZGF0YTsKQEAgLTQ0MSwxMCArNDQxLDE0IEBACiAJc3RydWN0IHJlZiAqcmVmID0gTlVMTDsKIAlzdHJ1Y3QgcmVmICpsYXN0X3JlZiA9IE5VTEw7CiAKKwlzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXI7CisKIAlpZiAoIXRyYW5zcG9ydC0+ZGF0YSkKIAkJdHJhbnNwb3J0LT5kYXRhID0gZ2V0X2h0dHBfd2Fsa2VyKHRyYW5zcG9ydC0+dXJsLAogCQkJCQkJdHJhbnNwb3J0LT5yZW1vdGUpOwogCisJd2Fsa2VyID0gdHJhbnNwb3J0LT5kYXRhOworCiAJcmVmc191cmwgPSB4bWFsbG9jKHN0cmxlbih0cmFuc3BvcnQtPnVybCkgKyAxMSk7CiAJc3ByaW50ZihyZWZzX3VybCwgIiVzL2luZm8vcmVmcyIsIHRyYW5zcG9ydC0+dXJsKTsKIApAQCAtNDU5LDE3ICs0NjMsMTQgQEAKIAkJcnVuX2FjdGl2ZV9zbG90KHNsb3QpOwogCQlpZiAocmVzdWx0cy5jdXJsX3Jlc3VsdCAhPSBDVVJMRV9PSykgewogCQkJc3RyYnVmX3JlbGVhc2UoJmJ1ZmZlcik7Ci0JCQlpZiAobWlzc2luZ190YXJnZXQoJnJlc3VsdHMpKSB7Ci0JCQkJcmV0dXJuIE5VTEw7Ci0JCQl9IGVsc2UgewotCQkJCWVycm9yKCIlcyIsIGN1cmxfZXJyb3JzdHIpOwotCQkJCXJldHVybiBOVUxMOwotCQkJfQorCQkJaWYgKG1pc3NpbmdfdGFyZ2V0KCZyZXN1bHRzKSkKKwkJCQlkaWUoIiVzIG5vdCBmb3VuZDogZGlkIHlvdSBydW4gZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyBvbiB0aGUgc2VydmVyPyIsIHJlZnNfdXJsKTsKKwkJCWVsc2UKKwkJCQlkaWUoIiVzIGRvd25sb2FkIGVycm9yIC0gJXMiLCByZWZzX3VybCwgY3VybF9lcnJvcnN0cik7CiAJCX0KIAl9IGVsc2UgewogCQlzdHJidWZfcmVsZWFzZSgmYnVmZmVyKTsKLQkJZXJyb3IoIlVuYWJsZSB0byBzdGFydCByZXF1ZXN0Iik7Ci0JCXJldHVybiBOVUxMOworCQlkaWUoIlVuYWJsZSB0byBzdGFydCBIVFRQIHJlcXVlc3QiKTsKIAl9CiAKIAlkYXRhID0gYnVmZmVyLmJ1ZjsKQEAgLTUwMCwxMSArNTAxLDIwIEBACiAKIAlzdHJidWZfcmVsZWFzZSgmYnVmZmVyKTsKIAorCXJlZiA9IGFsbG9jX3JlZl9mcm9tX3N0cigiSEVBRCIpOworCWlmICghd2Fsa2VyLT5mZXRjaF9yZWYod2Fsa2VyLCByZWYpICYmCisJICAgICFyZXNvbHZlX3JlbW90ZV9zeW1yZWYocmVmLCByZWZzKSkgeworCQlyZWYtPm5leHQgPSByZWZzOworCQlyZWZzID0gcmVmOworCX0gZWxzZSB7CisJCWZyZWUocmVmKTsKKwl9CisKIAlyZXR1cm4gcmVmczsKIH0KIAogc3RhdGljIGludCBmZXRjaF9vYmpzX3ZpYV9jdXJsKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKLQkJCQkgaW50IG5yX29ianMsIHN0cnVjdCByZWYgKip0b19mZXRjaCkKKwkJCQkgaW50IG5yX29ianMsIGNvbnN0IHN0cnVjdCByZWYgKip0b19mZXRjaCkKIHsKIAlpZiAoIXRyYW5zcG9ydC0+ZGF0YSkKIAkJdHJhbnNwb3J0LT5kYXRhID0gZ2V0X2h0dHBfd2Fsa2VyKHRyYW5zcG9ydC0+dXJsLApAQCAtNTMyLDkgKzU0Miw4IEBACiAJCWRpZSAoIkNvdWxkIG5vdCByZWFkIGJ1bmRsZSAnJXMnLiIsIHRyYW5zcG9ydC0+dXJsKTsKIAlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+aGVhZGVyLnJlZmVyZW5jZXMubnI7IGkrKykgewogCQlzdHJ1Y3QgcmVmX2xpc3RfZW50cnkgKmUgPSBkYXRhLT5oZWFkZXIucmVmZXJlbmNlcy5saXN0ICsgaTsKLQkJc3RydWN0IHJlZiAqcmVmID0gYWxsb2NfcmVmKHN0cmxlbihlLT5uYW1lKSArIDEpOworCQlzdHJ1Y3QgcmVmICpyZWYgPSBhbGxvY19yZWZfZnJvbV9zdHIoZS0+bmFtZSk7CiAJCWhhc2hjcHkocmVmLT5vbGRfc2hhMSwgZS0+c2hhMSk7Ci0JCXN0cmNweShyZWYtPm5hbWUsIGUtPm5hbWUpOwogCQlyZWYtPm5leHQgPSByZXN1bHQ7CiAJCXJlc3VsdCA9IHJlZjsKIAl9CkBAIC01NDIsNyArNTUxLDcgQEAKIH0KIAogc3RhdGljIGludCBmZXRjaF9yZWZzX2Zyb21fYnVuZGxlKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKLQkJCSAgICAgICBpbnQgbnJfaGVhZHMsIHN0cnVjdCByZWYgKip0b19mZXRjaCkKKwkJCSAgICAgICBpbnQgbnJfaGVhZHMsIGNvbnN0IHN0cnVjdCByZWYgKip0b19mZXRjaCkKIHsKIAlzdHJ1Y3QgYnVuZGxlX3RyYW5zcG9ydF9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOwogCXJldHVybiB1bmJ1bmRsZSgmZGF0YS0+aGVhZGVyLCBkYXRhLT5mZCk7CkBAIC02MTYsNyArNjI1LDcgQEAKIH0KIAogc3RhdGljIGludCBmZXRjaF9yZWZzX3ZpYV9wYWNrKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKLQkJCSAgICAgICBpbnQgbnJfaGVhZHMsIHN0cnVjdCByZWYgKip0b19mZXRjaCkKKwkJCSAgICAgICBpbnQgbnJfaGVhZHMsIGNvbnN0IHN0cnVjdCByZWYgKip0b19mZXRjaCkKIHsKIAlzdHJ1Y3QgZ2l0X3RyYW5zcG9ydF9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOwogCWNoYXIgKipoZWFkcyA9IHhtYWxsb2MobnJfaGVhZHMgKiBzaXplb2YoKmhlYWRzKSk7CkBAIC02MzMsNyArNjQyLDkgQEAKIAlhcmdzLmxvY2tfcGFjayA9IDE7CiAJYXJncy51c2VfdGhpbl9wYWNrID0gZGF0YS0+dGhpbjsKIAlhcmdzLmluY2x1ZGVfdGFnID0gZGF0YS0+Zm9sbG93dGFnczsKLQlhcmdzLnZlcmJvc2UgPSB0cmFuc3BvcnQtPnZlcmJvc2UgPiAwOworCWFyZ3MudmVyYm9zZSA9ICh0cmFuc3BvcnQtPnZlcmJvc2UgPiAwKTsKKwlhcmdzLnF1aWV0ID0gYXJncy5ub19wcm9ncmVzcyA9ICh0cmFuc3BvcnQtPnZlcmJvc2UgPCAwKTsKKwlhcmdzLm5vX3Byb2dyZXNzID0gIWlzYXR0eSgxKTsKIAlhcmdzLmRlcHRoID0gZGF0YS0+ZGVwdGg7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnJfaGVhZHM7IGkrKykKQEAgLTc4NCwxMiArNzk1LDEyIEBACiAJcmV0dXJuIHRyYW5zcG9ydC0+cmVtb3RlX3JlZnM7CiB9CiAKLWludCB0cmFuc3BvcnRfZmV0Y2hfcmVmcyhzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIHN0cnVjdCByZWYgKnJlZnMpCitpbnQgdHJhbnNwb3J0X2ZldGNoX3JlZnMoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBjb25zdCBzdHJ1Y3QgcmVmICpyZWZzKQogewogCWludCByYzsKIAlpbnQgbnJfaGVhZHMgPSAwLCBucl9hbGxvYyA9IDA7Ci0Jc3RydWN0IHJlZiAqKmhlYWRzID0gTlVMTDsKLQlzdHJ1Y3QgcmVmICpybTsKKwljb25zdCBzdHJ1Y3QgcmVmICoqaGVhZHMgPSBOVUxMOworCWNvbnN0IHN0cnVjdCByZWYgKnJtOwogCiAJZm9yIChybSA9IHJlZnM7IHJtOyBybSA9IHJtLT5uZXh0KSB7CiAJCWlmIChybS0+cGVlcl9yZWYgJiYKZGlmZiAtLWdpdCBhL3RyYW5zcG9ydC5oIGIvdHJhbnNwb3J0LmgKaW5kZXggOGFiZmMwYS4uZDBiNTIwNSAxMDA2NDQKLS0tIGEvdHJhbnNwb3J0LmgKKysrIGIvdHJhbnNwb3J0LmgKQEAgLTE5LDcgKzE5LDcgQEAKIAkJCSAgY29uc3QgY2hhciAqdmFsdWUpOwogCiAJc3RydWN0IHJlZiAqKCpnZXRfcmVmc19saXN0KShzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQpOwotCWludCAoKmZldGNoKShzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIGludCByZWZzX25yLCBzdHJ1Y3QgcmVmICoqcmVmcyk7CisJaW50ICgqZmV0Y2gpKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgaW50IHJlZnNfbnIsIGNvbnN0IHN0cnVjdCByZWYgKipyZWZzKTsKIAlpbnQgKCpwdXNoKShzdHJ1Y3QgdHJhbnNwb3J0ICpjb25uZWN0aW9uLCBpbnQgcmVmc3BlY19uciwgY29uc3QgY2hhciAqKnJlZnNwZWMsIGludCBmbGFncyk7CiAKIAlpbnQgKCpkaXNjb25uZWN0KShzdHJ1Y3QgdHJhbnNwb3J0ICpjb25uZWN0aW9uKTsKQEAgLTY4LDcgKzY4LDcgQEAKIAogY29uc3Qgc3RydWN0IHJlZiAqdHJhbnNwb3J0X2dldF9yZW1vdGVfcmVmcyhzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQpOwogCi1pbnQgdHJhbnNwb3J0X2ZldGNoX3JlZnMoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBzdHJ1Y3QgcmVmICpyZWZzKTsKK2ludCB0cmFuc3BvcnRfZmV0Y2hfcmVmcyhzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIGNvbnN0IHN0cnVjdCByZWYgKnJlZnMpOwogdm9pZCB0cmFuc3BvcnRfdW5sb2NrX3BhY2soc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0KTsKIGludCB0cmFuc3BvcnRfZGlzY29ubmVjdChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQpOwogCmRpZmYgLS1naXQgYS90cmVlLWRpZmYuYyBiL3RyZWUtZGlmZi5jCmluZGV4IGUxZTJlNmMuLmJiYjEyNmYgMTAwNjQ0Ci0tLSBhL3RyZWUtZGlmZi5jCisrKyBiL3RyZWUtZGlmZi5jCkBAIC0xNSw2ICsxNSwxNSBAQAogCXJldHVybiBuZXdiYXNlOwogfQogCitzdGF0aWMgY2hhciAqbWFsbG9jX2Z1bGxuYW1lKGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgcGF0aGxlbikKK3sKKwljaGFyICpmdWxsbmFtZSA9IHhtYWxsb2MoYmFzZWxlbiArIHBhdGhsZW4gKyAxKTsKKwltZW1jcHkoZnVsbG5hbWUsIGJhc2UsIGJhc2VsZW4pOworCW1lbWNweShmdWxsbmFtZSArIGJhc2VsZW4sIHBhdGgsIHBhdGhsZW4pOworCWZ1bGxuYW1lW2Jhc2VsZW4gKyBwYXRobGVuXSA9IDA7CisJcmV0dXJuIGZ1bGxuYW1lOworfQorCiBzdGF0aWMgdm9pZCBzaG93X2VudHJ5KHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCwgY29uc3QgY2hhciAqcHJlZml4LCBzdHJ1Y3QgdHJlZV9kZXNjICpkZXNjLAogCQkgICAgICAgY29uc3QgY2hhciAqYmFzZSwgaW50IGJhc2VsZW4pOwogCkBAIC0yNCw2ICszMyw3IEBACiAJY29uc3QgY2hhciAqcGF0aDEsICpwYXRoMjsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCAqc2hhMjsKIAlpbnQgY21wLCBwYXRobGVuMSwgcGF0aGxlbjI7CisJY2hhciAqZnVsbG5hbWU7CiAKIAlzaGExID0gdHJlZV9lbnRyeV9leHRyYWN0KHQxLCAmcGF0aDEsICZtb2RlMSk7CiAJc2hhMiA9IHRyZWVfZW50cnlfZXh0cmFjdCh0MiwgJnBhdGgyLCAmbW9kZTIpOwpAQCAtNTUsMTUgKzY1LDIwIEBACiAJaWYgKERJRkZfT1BUX1RTVChvcHQsIFJFQ1VSU0lWRSkgJiYgU19JU0RJUihtb2RlMSkpIHsKIAkJaW50IHJldHZhbDsKIAkJY2hhciAqbmV3YmFzZSA9IG1hbGxvY19iYXNlKGJhc2UsIGJhc2VsZW4sIHBhdGgxLCBwYXRobGVuMSk7Ci0JCWlmIChESUZGX09QVF9UU1Qob3B0LCBUUkVFX0lOX1JFQ1VSU0lWRSkpCisJCWlmIChESUZGX09QVF9UU1Qob3B0LCBUUkVFX0lOX1JFQ1VSU0lWRSkpIHsKKwkJCW5ld2Jhc2VbYmFzZWxlbiArIHBhdGhsZW4xXSA9IDA7CiAJCQlvcHQtPmNoYW5nZShvcHQsIG1vZGUxLCBtb2RlMiwKLQkJCQkgICAgc2hhMSwgc2hhMiwgYmFzZSwgcGF0aDEpOworCQkJCSAgICBzaGExLCBzaGEyLCBuZXdiYXNlKTsKKwkJCW5ld2Jhc2VbYmFzZWxlbiArIHBhdGhsZW4xXSA9ICcvJzsKKwkJfQogCQlyZXR2YWwgPSBkaWZmX3RyZWVfc2hhMShzaGExLCBzaGEyLCBuZXdiYXNlLCBvcHQpOwogCQlmcmVlKG5ld2Jhc2UpOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KIAotCW9wdC0+Y2hhbmdlKG9wdCwgbW9kZTEsIG1vZGUyLCBzaGExLCBzaGEyLCBiYXNlLCBwYXRoMSk7CisJZnVsbG5hbWUgPSBtYWxsb2NfZnVsbG5hbWUoYmFzZSwgYmFzZWxlbiwgcGF0aDEsIHBhdGhsZW4xKTsKKwlvcHQtPmNoYW5nZShvcHQsIG1vZGUxLCBtb2RlMiwgc2hhMSwgc2hhMiwgZnVsbG5hbWUpOworCWZyZWUoZnVsbG5hbWUpOwogCXJldHVybiAwOwogfQogCkBAIC0yMDUsMTAgKzIyMCwxMCBAQAogCXVuc2lnbmVkIG1vZGU7CiAJY29uc3QgY2hhciAqcGF0aDsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExID0gdHJlZV9lbnRyeV9leHRyYWN0KGRlc2MsICZwYXRoLCAmbW9kZSk7CisJaW50IHBhdGhsZW4gPSB0cmVlX2VudHJ5X2xlbihwYXRoLCBzaGExKTsKIAogCWlmIChESUZGX09QVF9UU1Qob3B0LCBSRUNVUlNJVkUpICYmIFNfSVNESVIobW9kZSkpIHsKIAkJZW51bSBvYmplY3RfdHlwZSB0eXBlOwotCQlpbnQgcGF0aGxlbiA9IHRyZWVfZW50cnlfbGVuKHBhdGgsIHNoYTEpOwogCQljaGFyICpuZXdiYXNlID0gbWFsbG9jX2Jhc2UoYmFzZSwgYmFzZWxlbiwgcGF0aCwgcGF0aGxlbik7CiAJCXN0cnVjdCB0cmVlX2Rlc2MgaW5uZXI7CiAJCXZvaWQgKnRyZWU7CkBAIC0yMjQsNyArMjM5LDkgQEAKIAkJZnJlZSh0cmVlKTsKIAkJZnJlZShuZXdiYXNlKTsKIAl9IGVsc2UgewotCQlvcHQtPmFkZF9yZW1vdmUob3B0LCBwcmVmaXhbMF0sIG1vZGUsIHNoYTEsIGJhc2UsIHBhdGgpOworCQljaGFyICpmdWxsbmFtZSA9IG1hbGxvY19mdWxsbmFtZShiYXNlLCBiYXNlbGVuLCBwYXRoLCBwYXRobGVuKTsKKwkJb3B0LT5hZGRfcmVtb3ZlKG9wdCwgcHJlZml4WzBdLCBtb2RlLCBzaGExLCBmdWxsbmFtZSk7CisJCWZyZWUoZnVsbG5hbWUpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvdW5wYWNrLWZpbGUuYyBiL3VucGFjay1maWxlLmMKaW5kZXggNjVjNjZlYi4uYmNkYzhiYiAxMDA2NDQKLS0tIGEvdW5wYWNrLWZpbGUuYworKysgYi91bnBhY2stZmlsZS5jCkBAIC0zMSw3ICszMSw3IEBACiAJCWRpZSgiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiLCBhcmd2WzFdKTsKIAogCXNldHVwX2dpdF9kaXJlY3RvcnkoKTsKLQlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZyk7CisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOwogCiAJcHV0cyhjcmVhdGVfdGVtcF9maWxlKHNoYTEpKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3VucGFjay10cmVlcy5jIGIvdW5wYWNrLXRyZWVzLmMKaW5kZXggYTU5ZjQ3NS4uY2JhMGFjYSAxMDA2NDQKLS0tIGEvdW5wYWNrLXRyZWVzLmMKKysrIGIvdW5wYWNrLXRyZWVzLmMKQEAgLTgsNiArOCwzNiBAQAogI2luY2x1ZGUgInByb2dyZXNzLmgiCiAjaW5jbHVkZSAicmVmcy5oIgogCisvKgorICogRXJyb3IgbWVzc2FnZXMgZXhwZWN0ZWQgYnkgc2NyaXB0cyBvdXQgb2YgcGx1bWJpbmcgY29tbWFuZHMgc3VjaCBhcworICogcmVhZC10cmVlLiAgTm9uLXNjcmlwdGVkIFBvcmNlbGFpbiBpcyBub3QgcmVxdWlyZWQgdG8gdXNlIHRoZXNlIG1lc3NhZ2VzCisgKiBhbmQgaW4gZmFjdCBhcmUgZW5jb3VyYWdlZCB0byByZXdvcmQgdGhlbSB0byBiZXR0ZXIgc3VpdCB0aGVpciBwYXJ0aWN1bGFyCisgKiBzaXR1YXRpb24gYmV0dGVyLiAgU2VlIGhvdyAiZ2l0IGNoZWNrb3V0IiByZXBsYWNlcyBub3RfdXB0b2RhdGVfZmlsZSB0bworICogZXhwbGFpbiB3aHkgaXQgZG9lcyBub3QgYWxsb3cgc3dpdGNoaW5nIGJldHdlZW4gYnJhbmNoZXMgd2hlbiB5b3UgaGF2ZQorICogbG9jYWwgY2hhbmdlcywgZm9yIGV4YW1wbGUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdW5wYWNrX3RyZWVzX2Vycm9yX21zZ3MgdW5wYWNrX3BsdW1iaW5nX2Vycm9ycyA9IHsKKwkvKiB3b3VsZF9vdmVyd3JpdGUgKi8KKwkiRW50cnkgJyVzJyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZS4gQ2Fubm90IG1lcmdlLiIsCisKKwkvKiBub3RfdXB0b2RhdGVfZmlsZSAqLworCSJFbnRyeSAnJXMnIG5vdCB1cHRvZGF0ZS4gQ2Fubm90IG1lcmdlLiIsCisKKwkvKiBub3RfdXB0b2RhdGVfZGlyICovCisJIlVwZGF0aW5nICclcycgd291bGQgbG9zZSB1bnRyYWNrZWQgZmlsZXMgaW4gaXQiLAorCisJLyogd291bGRfbG9zZV91bnRyYWNrZWQgKi8KKwkiVW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlICclcycgd291bGQgYmUgJXMgYnkgbWVyZ2UuIiwKKworCS8qIGJpbmRfb3ZlcmxhcCAqLworCSJFbnRyeSAnJXMnIG92ZXJsYXBzIHdpdGggJyVzJy4gIENhbm5vdCBiaW5kLiIsCit9OworCisjZGVmaW5lIEVSUk9STVNHKG8sZmxkKSBcCisJKCAoKG8pICYmIChvKS0+bXNncy5mbGQpIFwKKwk/ICgobyktPm1zZ3MuZmxkKSBcCisJOiAodW5wYWNrX3BsdW1iaW5nX2Vycm9ycy5mbGQpICkKKwogc3RhdGljIHZvaWQgYWRkX2VudHJ5KHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbywgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKIAl1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCiB7CkBAIC0yNiwxMSArNTYsMTIgQEAKICAqIGRpcmVjdG9yaWVzLCBpbiBjYXNlIHRoaXMgdW5saW5rIGlzIHRoZSByZW1vdmFsIG9mIHRoZQogICogbGFzdCBlbnRyeSBpbiB0aGUgZGlyZWN0b3J5IC0tIGVtcHR5IGRpcmVjdG9yaWVzIGFyZSByZW1vdmVkLgogICovCi1zdGF0aWMgdm9pZCB1bmxpbmtfZW50cnkoY2hhciAqbmFtZSwgY2hhciAqbGFzdF9zeW1saW5rKQorc3RhdGljIHZvaWQgdW5saW5rX2VudHJ5KHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCiB7CiAJY2hhciAqY3AsICpwcmV2OworCWNoYXIgKm5hbWUgPSBjZS0+bmFtZTsKIAotCWlmIChoYXNfc3ltbGlua19sZWFkaW5nX3BhdGgobmFtZSwgbGFzdF9zeW1saW5rKSkKKwlpZiAoaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKGNlX25hbWVsZW4oY2UpLCBjZS0+bmFtZSkpCiAJCXJldHVybjsKIAlpZiAodW5saW5rKG5hbWUpKQogCQlyZXR1cm47CkBAIC01OCw3ICs4OSw2IEBACiB7CiAJdW5zaWduZWQgY250ID0gMCwgdG90YWwgPSAwOwogCXN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MgPSBOVUxMOwotCWNoYXIgbGFzdF9zeW1saW5rW1BBVEhfTUFYXTsKIAlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmluZGV4ID0gJm8tPnJlc3VsdDsKIAlpbnQgaTsKIAlpbnQgZXJycyA9IDA7CkBAIC03NSwyNCArMTA1LDI3IEBACiAJCWNudCA9IDA7CiAJfQogCi0JKmxhc3Rfc3ltbGluayA9ICdcMCc7CiAJZm9yIChpID0gMDsgaSA8IGluZGV4LT5jYWNoZV9ucjsgaSsrKSB7CiAJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpbmRleC0+Y2FjaGVbaV07CiAKLQkJaWYgKGNlLT5jZV9mbGFncyAmIChDRV9VUERBVEUgfCBDRV9SRU1PVkUpKQotCQkJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgKytjbnQpOwogCQlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfUkVNT1ZFKSB7CisJCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCArK2NudCk7CiAJCQlpZiAoby0+dXBkYXRlKQotCQkJCXVubGlua19lbnRyeShjZS0+bmFtZSwgbGFzdF9zeW1saW5rKTsKKwkJCQl1bmxpbmtfZW50cnkoY2UpOwogCQkJcmVtb3ZlX2luZGV4X2VudHJ5X2F0KCZvLT5yZXN1bHQsIGkpOwogCQkJaS0tOwogCQkJY29udGludWU7CiAJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5kZXgtPmNhY2hlX25yOyBpKyspIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGluZGV4LT5jYWNoZVtpXTsKKwogCQlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfVVBEQVRFKSB7CisJCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCArK2NudCk7CiAJCQljZS0+Y2VfZmxhZ3MgJj0gfkNFX1VQREFURTsKIAkJCWlmIChvLT51cGRhdGUpIHsKIAkJCQllcnJzIHw9IGNoZWNrb3V0X2VudHJ5KGNlLCAmc3RhdGUsIE5VTEwpOwotCQkJCSpsYXN0X3N5bWxpbmsgPSAnXDAnOwogCQkJfQogCQl9CiAJfQpAQCAtMzI1LDggKzM1OCwxMyBAQAogCXJldHVybiAtMTsKIH0KIAorLyoKKyAqIE4td2F5IG1lcmdlICJsZW4iIHRyZWVzLiAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUgdG8gbWFuaXB1bGF0ZSB0aGUKKyAqIHJlc3VsdGluZyBpbmRleCwgLTIgb24gZmFpbHVyZSB0byByZWZsZWN0IHRoZSBjaGFuZ2VzIHRvIHRoZSB3b3JrIHRyZWUuCisgKi8KIGludCB1bnBhY2tfdHJlZXModW5zaWduZWQgbGVuLCBzdHJ1Y3QgdHJlZV9kZXNjICp0LCBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCiB7CisJaW50IHJldDsKIAlzdGF0aWMgc3RydWN0IGNhY2hlX2VudHJ5ICpkZmM7CiAKIAlpZiAobGVuID4gTUFYX1VOUEFDS19UUkVFUykKQEAgLTM3MSwxOSArNDA5LDE3IEBACiAJCXJldHVybiB1bnBhY2tfZmFpbGVkKG8sICJNZXJnZSByZXF1aXJlcyBmaWxlLWxldmVsIG1lcmdpbmciKTsKIAogCW8tPnNyY19pbmRleCA9IE5VTEw7Ci0JaWYgKGNoZWNrX3VwZGF0ZXMobykpCi0JCXJldHVybiAtMTsKKwlyZXQgPSBjaGVja191cGRhdGVzKG8pID8gKC0yKSA6IDA7CiAJaWYgKG8tPmRzdF9pbmRleCkKIAkJKm8tPmRzdF9pbmRleCA9IG8tPnJlc3VsdDsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiAvKiBIZXJlIGNvbWUgdGhlIG1lcmdlIGZ1bmN0aW9ucyAqLwogCi1zdGF0aWMgaW50IHJlamVjdF9tZXJnZShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQorc3RhdGljIGludCByZWplY3RfbWVyZ2Uoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQogewotCXJldHVybiBlcnJvcigiRW50cnkgJyVzJyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZS4gQ2Fubm90IG1lcmdlLiIsCi0JCSAgICAgY2UtPm5hbWUpOworCXJldHVybiBlcnJvcihFUlJPUk1TRyhvLCB3b3VsZF9vdmVyd3JpdGUpLCBjZS0+bmFtZSk7CiB9CiAKIHN0YXRpYyBpbnQgc2FtZShzdHJ1Y3QgY2FjaGVfZW50cnkgKmEsIHN0cnVjdCBjYWNoZV9lbnRyeSAqYikKQEAgLTQyNyw3ICs0NjMsNyBAQAogCWlmIChlcnJubyA9PSBFTk9FTlQpCiAJCXJldHVybiAwOwogCXJldHVybiBvLT5nZW50bHkgPyAtMSA6Ci0JCWVycm9yKCJFbnRyeSAnJXMnIG5vdCB1cHRvZGF0ZS4gQ2Fubm90IG1lcmdlLiIsIGNlLT5uYW1lKTsKKwkJZXJyb3IoRVJST1JNU0cobywgbm90X3VwdG9kYXRlX2ZpbGUpLCBjZS0+bmFtZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGludmFsaWRhdGVfY2VfcGF0aChzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCkBAIC01MTQsMTMgKzU1MCwyOCBAQAogCWkgPSByZWFkX2RpcmVjdG9yeSgmZCwgY2UtPm5hbWUsIHBhdGhidWYsIG5hbWVsZW4rMSwgTlVMTCk7CiAJaWYgKGkpCiAJCXJldHVybiBvLT5nZW50bHkgPyAtMSA6Ci0JCQllcnJvcigiVXBkYXRpbmcgJyVzJyB3b3VsZCBsb3NlIHVudHJhY2tlZCBmaWxlcyBpbiBpdCIsCi0JCQkgICAgICBjZS0+bmFtZSk7CisJCQllcnJvcihFUlJPUk1TRyhvLCBub3RfdXB0b2RhdGVfZGlyKSwgY2UtPm5hbWUpOwogCWZyZWUocGF0aGJ1Zik7CiAJcmV0dXJuIGNudDsKIH0KIAogLyoKKyAqIFRoaXMgZ2V0cyBjYWxsZWQgd2hlbiB0aGVyZSB3YXMgbm8gaW5kZXggZW50cnkgZm9yIHRoZSB0cmVlIGVudHJ5ICdkc3QnLAorICogYnV0IHdlIGZvdW5kIGEgZmlsZSBpbiB0aGUgd29ya2luZyB0cmVlIHRoYXQgJ2xzdGF0KCknIHNhaWQgd2FzIGZpbmUsCisgKiBhbmQgd2UncmUgb24gYSBjYXNlLWluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0uCisgKgorICogU2VlIGlmIHdlIGNhbiBmaW5kIGEgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBpbiB0aGUgaW5kZXggdGhhdCBhbHNvCisgKiBtYXRjaGVzIHRoZSBzdGF0IGluZm9ybWF0aW9uLCBhbmQgYXNzdW1lIGl0J3MgdGhhdCBvdGhlciBmaWxlIQorICovCitzdGF0aWMgaW50IGljYXNlX2V4aXN0cyhzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8sIHN0cnVjdCBjYWNoZV9lbnRyeSAqZHN0LCBzdHJ1Y3Qgc3RhdCAqc3QpCit7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpzcmM7CisKKwlzcmMgPSBpbmRleF9uYW1lX2V4aXN0cyhvLT5zcmNfaW5kZXgsIGRzdC0+bmFtZSwgY2VfbmFtZWxlbihkc3QpLCAxKTsKKwlyZXR1cm4gc3JjICYmICFpZV9tYXRjaF9zdGF0KG8tPnNyY19pbmRleCwgc3JjLCBzdCwgQ0VfTUFUQ0hfSUdOT1JFX1ZBTElEKTsKK30KKworLyoKICAqIFdlIGRvIG5vdCB3YW50IHRvIHJlbW92ZSBvciBvdmVyd3JpdGUgYSB3b3JraW5nIHRyZWUgZmlsZSB0aGF0CiAgKiBpcyBub3QgdHJhY2tlZCwgdW5sZXNzIGl0IGlzIGlnbm9yZWQuCiAgKi8KQEAgLTUzMiwxMiArNTgzLDIzIEBACiAJaWYgKG8tPmluZGV4X29ubHkgfHwgby0+cmVzZXQgfHwgIW8tPnVwZGF0ZSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKGNlLT5uYW1lLCBOVUxMKSkKKwlpZiAoaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKGNlX25hbWVsZW4oY2UpLCBjZS0+bmFtZSkpCiAJCXJldHVybiAwOwogCiAJaWYgKCFsc3RhdChjZS0+bmFtZSwgJnN0KSkgewogCQlpbnQgY250OwogCQlpbnQgZHR5cGUgPSBjZV90b19kdHlwZShjZSk7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqcmVzdWx0OworCisJCS8qCisJCSAqIEl0IG1heSBiZSB0aGF0IHRoZSAnbHN0YXQoKScgc3VjY2VlZGVkIGV2ZW4gdGhvdWdoCisJCSAqIHRhcmdldCAnY2UnIHdhcyBhYnNlbnQsIGJlY2F1c2UgdGhlcmUgaXMgYW4gb2xkCisJCSAqIGVudHJ5IHRoYXQgaXMgZGlmZmVyZW50IG9ubHkgaW4gY2FzZS4uCisJCSAqCisJCSAqIElnbm9yZSB0aGF0IGxzdGF0KCkgaWYgaXQgbWF0Y2hlcy4KKwkJICovCisJCWlmIChpZ25vcmVfY2FzZSAmJiBpY2FzZV9leGlzdHMobywgY2UsICZzdCkpCisJCQlyZXR1cm4gMDsKIAogCQlpZiAoby0+ZGlyICYmIGV4Y2x1ZGVkKG8tPmRpciwgY2UtPm5hbWUsICZkdHlwZSkpCiAJCQkvKgpAQCAtNTgxLDE2ICs2NDMsMTQgQEAKIAkJICogZGVsZXRlIHRoaXMgcGF0aCwgd2hpY2ggaXMgaW4gYSBzdWJkaXJlY3RvcnkgdGhhdAogCQkgKiBpcyBiZWluZyByZXBsYWNlZCB3aXRoIGEgYmxvYi4KIAkJICovCi0JCWNudCA9IGluZGV4X25hbWVfcG9zKCZvLT5yZXN1bHQsIGNlLT5uYW1lLCBzdHJsZW4oY2UtPm5hbWUpKTsKLQkJaWYgKDAgPD0gY250KSB7Ci0JCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gby0+cmVzdWx0LmNhY2hlW2NudF07Ci0JCQlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfUkVNT1ZFKQorCQlyZXN1bHQgPSBpbmRleF9uYW1lX2V4aXN0cygmby0+cmVzdWx0LCBjZS0+bmFtZSwgY2VfbmFtZWxlbihjZSksIDApOworCQlpZiAocmVzdWx0KSB7CisJCQlpZiAocmVzdWx0LT5jZV9mbGFncyAmIENFX1JFTU9WRSkKIAkJCQlyZXR1cm4gMDsKIAkJfQogCiAJCXJldHVybiBvLT5nZW50bHkgPyAtMSA6Ci0JCQllcnJvcigiVW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlICclcycgIgotCQkJICAgICAgIndvdWxkIGJlICVzIGJ5IG1lcmdlLiIsIGNlLT5uYW1lLCBhY3Rpb24pOworCQkJZXJyb3IoRVJST1JNU0cobywgd291bGRfbG9zZV91bnRyYWNrZWQpLCBjZS0+bmFtZSwgYWN0aW9uKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC03MjIsNyArNzgyLDcgQEAKIAkvKiAjMTQsICMxNEFMVCwgIzJBTFQgKi8KIAlpZiAocmVtb3RlICYmICFkZl9jb25mbGljdF9oZWFkICYmIGhlYWRfbWF0Y2ggJiYgIXJlbW90ZV9tYXRjaCkgewogCQlpZiAoaW5kZXggJiYgIXNhbWUoaW5kZXgsIHJlbW90ZSkgJiYgIXNhbWUoaW5kZXgsIGhlYWQpKQotCQkJcmV0dXJuIG8tPmdlbnRseSA/IC0xIDogcmVqZWN0X21lcmdlKGluZGV4KTsKKwkJCXJldHVybiBvLT5nZW50bHkgPyAtMSA6IHJlamVjdF9tZXJnZShpbmRleCwgbyk7CiAJCXJldHVybiBtZXJnZWRfZW50cnkocmVtb3RlLCBpbmRleCwgbyk7CiAJfQogCS8qCkBAIC03MzAsNyArNzkwLDcgQEAKIAkgKiBtYWtlIHN1cmUgdGhhdCBpdCBtYXRjaGVzIGhlYWQuCiAJICovCiAJaWYgKGluZGV4ICYmICFzYW1lKGluZGV4LCBoZWFkKSkKLQkJcmV0dXJuIG8tPmdlbnRseSA/IC0xIDogcmVqZWN0X21lcmdlKGluZGV4KTsKKwkJcmV0dXJuIG8tPmdlbnRseSA/IC0xIDogcmVqZWN0X21lcmdlKGluZGV4LCBvKTsKIAogCWlmIChoZWFkKSB7CiAJCS8qICM1QUxULCAjMTUgKi8KQEAgLTg3MiwxMSArOTMyLDExIEBACiAJCWVsc2UgewogCQkJLyogYWxsIG90aGVyIGZhaWx1cmVzICovCiAJCQlpZiAob2xkdHJlZSkKLQkJCQlyZXR1cm4gby0+Z2VudGx5ID8gLTEgOiByZWplY3RfbWVyZ2Uob2xkdHJlZSk7CisJCQkJcmV0dXJuIG8tPmdlbnRseSA/IC0xIDogcmVqZWN0X21lcmdlKG9sZHRyZWUsIG8pOwogCQkJaWYgKGN1cnJlbnQpCi0JCQkJcmV0dXJuIG8tPmdlbnRseSA/IC0xIDogcmVqZWN0X21lcmdlKGN1cnJlbnQpOworCQkJCXJldHVybiBvLT5nZW50bHkgPyAtMSA6IHJlamVjdF9tZXJnZShjdXJyZW50LCBvKTsKIAkJCWlmIChuZXd0cmVlKQotCQkJCXJldHVybiBvLT5nZW50bHkgPyAtMSA6IHJlamVjdF9tZXJnZShuZXd0cmVlKTsKKwkJCQlyZXR1cm4gby0+Z2VudGx5ID8gLTEgOiByZWplY3RfbWVyZ2UobmV3dHJlZSwgbyk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAl9CkBAIC05MDIsNyArOTYyLDcgQEAKIAkJCSAgICAgby0+bWVyZ2Vfc2l6ZSk7CiAJaWYgKGEgJiYgb2xkKQogCQlyZXR1cm4gby0+Z2VudGx5ID8gLTEgOgotCQkJZXJyb3IoIkVudHJ5ICclcycgb3ZlcmxhcHMgd2l0aCAnJXMnLiAgQ2Fubm90IGJpbmQuIiwgYS0+bmFtZSwgb2xkLT5uYW1lKTsKKwkJCWVycm9yKEVSUk9STVNHKG8sIGJpbmRfb3ZlcmxhcCksIGEtPm5hbWUsIG9sZC0+bmFtZSk7CiAJaWYgKCFhKQogCQlyZXR1cm4ga2VlcF9lbnRyeShvbGQsIG8pOwogCWVsc2UKZGlmZiAtLWdpdCBhL3VucGFjay10cmVlcy5oIGIvdW5wYWNrLXRyZWVzLmgKaW5kZXggNTA0NTNlZC4uOTRlNTY3MiAxMDA2NDQKLS0tIGEvdW5wYWNrLXRyZWVzLmgKKysrIGIvdW5wYWNrLXRyZWVzLmgKQEAgLTgsMjEgKzgsMzAgQEAKIHR5cGVkZWYgaW50ICgqbWVyZ2VfZm5fdCkoc3RydWN0IGNhY2hlX2VudHJ5ICoqc3JjLAogCQlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm9wdGlvbnMpOwogCitzdHJ1Y3QgdW5wYWNrX3RyZWVzX2Vycm9yX21zZ3MgeworCWNvbnN0IGNoYXIgKndvdWxkX292ZXJ3cml0ZTsKKwljb25zdCBjaGFyICpub3RfdXB0b2RhdGVfZmlsZTsKKwljb25zdCBjaGFyICpub3RfdXB0b2RhdGVfZGlyOworCWNvbnN0IGNoYXIgKndvdWxkX2xvc2VfdW50cmFja2VkOworCWNvbnN0IGNoYXIgKmJpbmRfb3ZlcmxhcDsKK307CisKIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyB7Ci0JaW50IHJlc2V0OwotCWludCBtZXJnZTsKLQlpbnQgdXBkYXRlOwotCWludCBpbmRleF9vbmx5OwotCWludCBub250cml2aWFsX21lcmdlOwotCWludCB0cml2aWFsX21lcmdlc19vbmx5OwotCWludCB2ZXJib3NlX3VwZGF0ZTsKLQlpbnQgYWdncmVzc2l2ZTsKLQlpbnQgc2tpcF91bm1lcmdlZDsKLQlpbnQgZ2VudGx5OworCXVuc2lnbmVkIGludCByZXNldDoxLAorCQkgICAgIG1lcmdlOjEsCisJCSAgICAgdXBkYXRlOjEsCisJCSAgICAgaW5kZXhfb25seToxLAorCQkgICAgIG5vbnRyaXZpYWxfbWVyZ2U6MSwKKwkJICAgICB0cml2aWFsX21lcmdlc19vbmx5OjEsCisJCSAgICAgdmVyYm9zZV91cGRhdGU6MSwKKwkJICAgICBhZ2dyZXNzaXZlOjEsCisJCSAgICAgc2tpcF91bm1lcmdlZDoxLAorCQkgICAgIGdlbnRseToxOwogCWNvbnN0IGNoYXIgKnByZWZpeDsKIAlpbnQgcG9zOwogCXN0cnVjdCBkaXJfc3RydWN0ICpkaXI7CiAJbWVyZ2VfZm5fdCBmbjsKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX2Vycm9yX21zZ3MgbXNnczsKIAogCWludCBoZWFkX2lkeDsKIAlpbnQgbWVyZ2Vfc2l6ZTsKQEAgLTMxLDcgKzQwLDcgQEAKIAl2b2lkICp1bnBhY2tfZGF0YTsKIAogCXN0cnVjdCBpbmRleF9zdGF0ZSAqZHN0X2luZGV4OwotCWNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqc3JjX2luZGV4OworCXN0cnVjdCBpbmRleF9zdGF0ZSAqc3JjX2luZGV4OwogCXN0cnVjdCBpbmRleF9zdGF0ZSByZXN1bHQ7CiB9OwogCmRpZmYgLS1naXQgYS92YXIuYyBiL3Zhci5jCmluZGV4IDBkZTBlZmEuLjcyNGJhODcgMTAwNjQ0Ci0tLSBhL3Zhci5jCisrKyBiL3Zhci5jCkBAIC0zOSwzMSArMzksMzIgQEAKIAlyZXR1cm4gdmFsOwogfQogCi1zdGF0aWMgaW50IHNob3dfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCitzdGF0aWMgaW50IHNob3dfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQogewogCWlmICh2YWx1ZSkKIAkJcHJpbnRmKCIlcz0lc1xuIiwgdmFyLCB2YWx1ZSk7CiAJZWxzZQogCQlwcmludGYoIiVzXG4iLCB2YXIpOwotCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSk7CisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CiB9CiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKIAljb25zdCBjaGFyICp2YWw7CisJaW50IG5vbmdpdDsKIAlpZiAoYXJnYyAhPSAyKSB7CiAJCXVzYWdlKHZhcl91c2FnZSk7CiAJfQogCi0Jc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCXNldHVwX2dpdF9kaXJlY3RvcnlfZ2VudGx5KCZub25naXQpOwogCXZhbCA9IE5VTEw7CiAKIAlpZiAoc3RyY21wKGFyZ3ZbMV0sICItbCIpID09IDApIHsKLQkJZ2l0X2NvbmZpZyhzaG93X2NvbmZpZyk7CisJCWdpdF9jb25maWcoc2hvd19jb25maWcsIE5VTEwpOwogCQlsaXN0X3ZhcnMoKTsKIAkJcmV0dXJuIDA7CiAJfQotCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnKTsKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CiAJdmFsID0gcmVhZF92YXIoYXJndlsxXSk7CiAJaWYgKCF2YWwpCiAJCXVzYWdlKHZhcl91c2FnZSk7CmRpZmYgLS1naXQgYS93YWxrZXIuYyBiL3dhbGtlci5jCmluZGV4IGMxMGVjYTguLjBlNjhlZTYgMTAwNjQ0Ci0tLSBhL3dhbGtlci5jCisrKyBiL3dhbGtlci5jCkBAIC01OSw2ICs1OSw3IEBACiAJZnJlZSh0cmVlLT5idWZmZXIpOwogCXRyZWUtPmJ1ZmZlciA9IE5VTEw7CiAJdHJlZS0+c2l6ZSA9IDA7CisJdHJlZS0+b2JqZWN0LnBhcnNlZCA9IDA7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5MCw5ICsxOTEsMTMgQEAKIAlpZiAoIWdldF9zaGExX2hleCh0YXJnZXQsIHNoYTEpKQogCQlyZXR1cm4gMDsKIAlpZiAoIWNoZWNrX3JlZl9mb3JtYXQodGFyZ2V0KSkgewotCQlpZiAoIXdhbGtlci0+ZmV0Y2hfcmVmKHdhbGtlciwgdGFyZ2V0LCBzaGExKSkgeworCQlzdHJ1Y3QgcmVmICpyZWYgPSBhbGxvY19yZWZfZnJvbV9zdHIodGFyZ2V0KTsKKwkJaWYgKCF3YWxrZXItPmZldGNoX3JlZih3YWxrZXIsIHJlZikpIHsKKwkJCWhhc2hjcHkoc2hhMSwgcmVmLT5vbGRfc2hhMSk7CisJCQlmcmVlKHJlZik7CiAJCQlyZXR1cm4gMDsKIAkJfQorCQlmcmVlKHJlZik7CiAJfQogCXJldHVybiAtMTsKIH0KZGlmZiAtLWdpdCBhL3dhbGtlci5oIGIvd2Fsa2VyLmgKaW5kZXggZTFkNDBkZS4uOGExNDllMSAxMDA2NDQKLS0tIGEvd2Fsa2VyLmgKKysrIGIvd2Fsa2VyLmgKQEAgLTUsNyArNSw3IEBACiAKIHN0cnVjdCB3YWxrZXIgewogCXZvaWQgKmRhdGE7Ci0JaW50ICgqZmV0Y2hfcmVmKShzdHJ1Y3Qgd2Fsa2VyICosIGNoYXIgKnJlZiwgdW5zaWduZWQgY2hhciAqc2hhMSk7CisJaW50ICgqZmV0Y2hfcmVmKShzdHJ1Y3Qgd2Fsa2VyICosIHN0cnVjdCByZWYgKnJlZik7CiAJdm9pZCAoKnByZWZldGNoKShzdHJ1Y3Qgd2Fsa2VyICosIHVuc2lnbmVkIGNoYXIgKnNoYTEpOwogCWludCAoKmZldGNoKShzdHJ1Y3Qgd2Fsa2VyICosIHVuc2lnbmVkIGNoYXIgKnNoYTEpOwogCXZvaWQgKCpjbGVhbnVwKShzdHJ1Y3Qgd2Fsa2VyICopOwpkaWZmIC0tZ2l0IGEvd3JpdGVfb3JfZGllLmMgYi93cml0ZV9vcl9kaWUuYwppbmRleCBlMTI1ZTExLi42MzBiZTRjIDEwMDY0NAotLS0gYS93cml0ZV9vcl9kaWUuYworKysgYi93cml0ZV9vcl9kaWUuYwpAQCAtNDAsNyArNDAsNyBAQAogCX0KIH0KIAotaW50IHJlYWRfaW5fZnVsbChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KQorc3NpemVfdCByZWFkX2luX2Z1bGwoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAljaGFyICpwID0gYnVmOwogCXNzaXplX3QgdG90YWwgPSAwOwpAQCAtNTcsNyArNTcsNyBAQAogCXJldHVybiB0b3RhbDsKIH0KIAotaW50IHdyaXRlX2luX2Z1bGwoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCkKK3NzaXplX3Qgd3JpdGVfaW5fZnVsbChpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCWNvbnN0IGNoYXIgKnAgPSBidWY7CiAJc3NpemVfdCB0b3RhbCA9IDA7CkBAIC03OCw2ICs3OCwxMyBAQAogCXJldHVybiB0b3RhbDsKIH0KIAordm9pZCBmc3luY19vcl9kaWUoaW50IGZkLCBjb25zdCBjaGFyICptc2cpCit7CisJaWYgKGZzeW5jKGZkKSA8IDApIHsKKwkJZGllKCIlczogZnN5bmMgZXJyb3IgKCVzKSIsIG1zZywgc3RyZXJyb3IoZXJybm8pKTsKKwl9Cit9CisKIHZvaWQgd3JpdGVfb3JfZGllKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIGJ1ZiwgY291bnQpIDwgMCkgewpkaWZmIC0tZ2l0IGEvd3Qtc3RhdHVzLmMgYi93dC1zdGF0dXMuYwppbmRleCBiM2ZkNTdiLi41YjRkNzRjIDEwMDY0NAotLS0gYS93dC1zdGF0dXMuYworKysgYi93dC1zdGF0dXMuYwpAQCAtOCwxNCArOCwxNyBAQAogI2luY2x1ZGUgInJldmlzaW9uLmgiCiAjaW5jbHVkZSAiZGlmZmNvcmUuaCIKICNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCiAKIGludCB3dF9zdGF0dXNfcmVsYXRpdmVfcGF0aHMgPSAxOwogaW50IHd0X3N0YXR1c191c2VfY29sb3IgPSAtMTsKK2ludCB3dF9zdGF0dXNfc3VibW9kdWxlX3N1bW1hcnk7CiBzdGF0aWMgY2hhciB3dF9zdGF0dXNfY29sb3JzW11bQ09MT1JfTUFYTEVOXSA9IHsKIAkiIiwgICAgICAgICAvKiBXVF9TVEFUVVNfSEVBREVSOiBub3JtYWwgKi8KIAkiXDAzM1szMm0iLCAvKiBXVF9TVEFUVVNfVVBEQVRFRDogZ3JlZW4gKi8KIAkiXDAzM1szMW0iLCAvKiBXVF9TVEFUVVNfQ0hBTkdFRDogcmVkICovCiAJIlwwMzNbMzFtIiwgLyogV1RfU1RBVFVTX1VOVFJBQ0tFRDogcmVkICovCisJIlwwMzNbMzFtIiwgLyogV1RfU1RBVFVTX05PQlJBTkNIOiByZWQgKi8KIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyIHVzZV9hZGRfbXNnW10gPQpAQCAtMzYsNiArMzksOCBAQAogCQlyZXR1cm4gV1RfU1RBVFVTX0NIQU5HRUQ7CiAJaWYgKCFzdHJjYXNlY21wKHZhcitvZmZzZXQsICJ1bnRyYWNrZWQiKSkKIAkJcmV0dXJuIFdUX1NUQVRVU19VTlRSQUNLRUQ7CisJaWYgKCFzdHJjYXNlY21wKHZhcitvZmZzZXQsICJub2JyYW5jaCIpKQorCQlyZXR1cm4gV1RfU1RBVFVTX05PQlJBTkNIOwogCWRpZSgiYmFkIGNvbmZpZyB2YXJpYWJsZSAnJXMnIiwgdmFyKTsKIH0KIApAQCAtMjA0LDcgKzIwOSw3IEBACiAJcmV2LmRpZmZvcHQuZm9ybWF0X2NhbGxiYWNrID0gd3Rfc3RhdHVzX3ByaW50X3VwZGF0ZWRfY2I7CiAJcmV2LmRpZmZvcHQuZm9ybWF0X2NhbGxiYWNrX2RhdGEgPSBzOwogCXJldi5kaWZmb3B0LmRldGVjdF9yZW5hbWUgPSAxOwotCXJldi5kaWZmb3B0LnJlbmFtZV9saW1pdCA9IDEwMDsKKwlyZXYuZGlmZm9wdC5yZW5hbWVfbGltaXQgPSAyMDA7CiAJcmV2LmRpZmZvcHQuYnJlYWtfb3B0ID0gMDsKIAlydW5fZGlmZl9pbmRleCgmcmV2LCAxKTsKIH0KQEAgLTIyMCw2ICsyMjUsMzYgQEAKIAlydW5fZGlmZl9maWxlcygmcmV2LCAwKTsKIH0KIAorc3RhdGljIHZvaWQgd3Rfc3RhdHVzX3ByaW50X3N1Ym1vZHVsZV9zdW1tYXJ5KHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3Mgc21fc3VtbWFyeTsKKwljaGFyIHN1bW1hcnlfbGltaXRbNjRdOworCWNoYXIgaW5kZXhbUEFUSF9NQVhdOworCWNvbnN0IGNoYXIgKmVudltdID0geyBpbmRleCwgTlVMTCB9OworCWNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHsKKwkJInN1Ym1vZHVsZSIsCisJCSJzdW1tYXJ5IiwKKwkJIi0tY2FjaGVkIiwKKwkJIi0tZm9yLXN0YXR1cyIsCisJCSItLXN1bW1hcnktbGltaXQiLAorCQlzdW1tYXJ5X2xpbWl0LAorCQlzLT5hbWVuZCA/ICJIRUFEXiIgOiAiSEVBRCIsCisJCU5VTEwKKwl9OworCisJc3ByaW50ZihzdW1tYXJ5X2xpbWl0LCAiJWQiLCB3dF9zdGF0dXNfc3VibW9kdWxlX3N1bW1hcnkpOworCXNucHJpbnRmKGluZGV4LCBzaXplb2YoaW5kZXgpLCAiR0lUX0lOREVYX0ZJTEU9JXMiLCBzLT5pbmRleF9maWxlKTsKKworCW1lbXNldCgmc21fc3VtbWFyeSwgMCwgc2l6ZW9mKHNtX3N1bW1hcnkpKTsKKwlzbV9zdW1tYXJ5LmFyZ3YgPSBhcmd2OworCXNtX3N1bW1hcnkuZW52ID0gZW52OworCXNtX3N1bW1hcnkuZ2l0X2NtZCA9IDE7CisJc21fc3VtbWFyeS5ub19zdGRpbiA9IDE7CisJZmZsdXNoKHMtPmZwKTsKKwlzbV9zdW1tYXJ5Lm91dCA9IGR1cChmaWxlbm8ocy0+ZnApKTsgICAgLyogcnVuX2NvbW1hbmQgY2xvc2VzIGl0ICovCisJcnVuX2NvbW1hbmQoJnNtX3N1bW1hcnkpOworfQorCiBzdGF0aWMgdm9pZCB3dF9zdGF0dXNfcHJpbnRfdW50cmFja2VkKHN0cnVjdCB3dF9zdGF0dXMgKnMpCiB7CiAJc3RydWN0IGRpcl9zdHJ1Y3QgZGlyOwpAQCAtMjgyLDggKzMxNyw5IEBACiB2b2lkIHd0X3N0YXR1c19wcmludChzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQogewogCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07Ci0Jcy0+aXNfaW5pdGlhbCA9IGdldF9zaGExKHMtPnJlZmVyZW5jZSwgc2hhMSkgPyAxIDogMDsKKwljb25zdCBjaGFyICpicmFuY2hfY29sb3IgPSBjb2xvcihXVF9TVEFUVVNfSEVBREVSKTsKIAorCXMtPmlzX2luaXRpYWwgPSBnZXRfc2hhMShzLT5yZWZlcmVuY2UsIHNoYTEpID8gMSA6IDA7CiAJaWYgKHMtPmJyYW5jaCkgewogCQljb25zdCBjaGFyICpvbl93aGF0ID0gIk9uIGJyYW5jaCAiOwogCQljb25zdCBjaGFyICpicmFuY2hfbmFtZSA9IHMtPmJyYW5jaDsKQEAgLTI5MSwxMCArMzI3LDExIEBACiAJCQlicmFuY2hfbmFtZSArPSAxMTsKIAkJZWxzZSBpZiAoIXN0cmNtcChicmFuY2hfbmFtZSwgIkhFQUQiKSkgewogCQkJYnJhbmNoX25hbWUgPSAiIjsKKwkJCWJyYW5jaF9jb2xvciA9IGNvbG9yKFdUX1NUQVRVU19OT0JSQU5DSCk7CiAJCQlvbl93aGF0ID0gIk5vdCBjdXJyZW50bHkgb24gYW55IGJyYW5jaC4iOwogCQl9Ci0JCWNvbG9yX2ZwcmludGZfbG4ocy0+ZnAsIGNvbG9yKFdUX1NUQVRVU19IRUFERVIpLAotCQkJIiMgJXMlcyIsIG9uX3doYXQsIGJyYW5jaF9uYW1lKTsKKwkJY29sb3JfZnByaW50ZihzLT5mcCwgY29sb3IoV1RfU1RBVFVTX0hFQURFUiksICIjICIpOworCQljb2xvcl9mcHJpbnRmX2xuKHMtPmZwLCBicmFuY2hfY29sb3IsICIlcyVzIiwgb25fd2hhdCwgYnJhbmNoX25hbWUpOwogCX0KIAogCWlmIChzLT5pc19pbml0aWFsKSB7CkBAIC0zMDgsNiArMzQ1LDggQEAKIAl9CiAKIAl3dF9zdGF0dXNfcHJpbnRfY2hhbmdlZChzKTsKKwlpZiAod3Rfc3RhdHVzX3N1Ym1vZHVsZV9zdW1tYXJ5KQorCQl3dF9zdGF0dXNfcHJpbnRfc3VibW9kdWxlX3N1bW1hcnkocyk7CiAJd3Rfc3RhdHVzX3ByaW50X3VudHJhY2tlZChzKTsKIAogCWlmIChzLT52ZXJib3NlICYmICFzLT5pc19pbml0aWFsKQpAQCAtMzI4LDggKzM2NywxNSBAQAogCX0KIH0KIAotaW50IGdpdF9zdGF0dXNfY29uZmlnKGNvbnN0IGNoYXIgKmssIGNvbnN0IGNoYXIgKnYpCitpbnQgZ2l0X3N0YXR1c19jb25maWcoY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdiwgdm9pZCAqY2IpCiB7CisJaWYgKCFzdHJjbXAoaywgInN0YXR1cy5zdWJtb2R1bGVzdW1tYXJ5IikpIHsKKwkJaW50IGlzX2Jvb2w7CisJCXd0X3N0YXR1c19zdWJtb2R1bGVfc3VtbWFyeSA9IGdpdF9jb25maWdfYm9vbF9vcl9pbnQoaywgdiwgJmlzX2Jvb2wpOworCQlpZiAoaXNfYm9vbCAmJiB3dF9zdGF0dXNfc3VibW9kdWxlX3N1bW1hcnkpCisJCQl3dF9zdGF0dXNfc3VibW9kdWxlX3N1bW1hcnkgPSAtMTsKKwkJcmV0dXJuIDA7CisJfQogCWlmICghc3RyY21wKGssICJzdGF0dXMuY29sb3IiKSB8fCAhc3RyY21wKGssICJjb2xvci5zdGF0dXMiKSkgewogCQl3dF9zdGF0dXNfdXNlX2NvbG9yID0gZ2l0X2NvbmZpZ19jb2xvcmJvb2woaywgdiwgLTEpOwogCQlyZXR1cm4gMDsKQEAgLTM0NSw1ICszOTEsNSBAQAogCQl3dF9zdGF0dXNfcmVsYXRpdmVfcGF0aHMgPSBnaXRfY29uZmlnX2Jvb2woaywgdik7CiAJCXJldHVybiAwOwogCX0KLQlyZXR1cm4gZ2l0X2NvbG9yX2RlZmF1bHRfY29uZmlnKGssIHYpOworCXJldHVybiBnaXRfY29sb3JfZGVmYXVsdF9jb25maWcoaywgdiwgY2IpOwogfQpkaWZmIC0tZ2l0IGEvd3Qtc3RhdHVzLmggYi93dC1zdGF0dXMuaAppbmRleCA3ZDYxNDEwLi41OTdjN2VhIDEwMDY0NAotLS0gYS93dC1zdGF0dXMuaAorKysgYi93dC1zdGF0dXMuaApAQCAtOCw2ICs4LDcgQEAKIAlXVF9TVEFUVVNfVVBEQVRFRCwKIAlXVF9TVEFUVVNfQ0hBTkdFRCwKIAlXVF9TVEFUVVNfVU5UUkFDS0VELAorCVdUX1NUQVRVU19OT0JSQU5DSCwKIH07CiAKIHN0cnVjdCB3dF9zdGF0dXMgewpAQCAtMjcsNyArMjgsNyBAQAogCWNvbnN0IGNoYXIgKnByZWZpeDsKIH07CiAKLWludCBnaXRfc3RhdHVzX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKTsKK2ludCBnaXRfc3RhdHVzX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYik7CiBleHRlcm4gaW50IHd0X3N0YXR1c191c2VfY29sb3I7CiBleHRlcm4gaW50IHd0X3N0YXR1c19yZWxhdGl2ZV9wYXRoczsKIHZvaWQgd3Rfc3RhdHVzX3ByZXBhcmUoc3RydWN0IHd0X3N0YXR1cyAqcyk7Cg==